From dba6dee19e0dba601a5a86db257bc3be3752c0f1 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 22 Nov 2021 17:35:39 +0200 Subject: [PATCH] Updated .venv --- .venv/bin/fonttools | 8 + .venv/bin/pyftmerge | 8 + .venv/bin/pyftsubset | 8 + .venv/bin/ttx | 8 + .../site-packages/PIL/BdfFontFile.py | 110 + .../site-packages/PIL/BlpImagePlugin.py | 428 + .../site-packages/PIL/BmpImagePlugin.py | 378 + .../site-packages/PIL/BufrStubImagePlugin.py | 73 + .../site-packages/PIL/ContainerIO.py | 120 + .../site-packages/PIL/CurImagePlugin.py | 75 + .../site-packages/PIL/DcxImagePlugin.py | 89 + .../site-packages/PIL/DdsImagePlugin.py | 247 + .../site-packages/PIL/EpsImagePlugin.py | 411 + .../python3.9/site-packages/PIL/ExifTags.py | 331 + .../site-packages/PIL/FitsStubImagePlugin.py | 100 + .../site-packages/PIL/FliImagePlugin.py | 171 + .../python3.9/site-packages/PIL/FontFile.py | 111 + .../site-packages/PIL/FpxImagePlugin.py | 242 + .../site-packages/PIL/FtexImagePlugin.py | 106 + .../site-packages/PIL/GbrImagePlugin.py | 100 + .../site-packages/PIL/GdImageFile.py | 90 + .../site-packages/PIL/GifImagePlugin.py | 926 ++ .../site-packages/PIL/GimpGradientFile.py | 140 + .../site-packages/PIL/GimpPaletteFile.py | 56 + .../site-packages/PIL/GribStubImagePlugin.py | 73 + .../site-packages/PIL/Hdf5StubImagePlugin.py | 73 + .../site-packages/PIL/IcnsImagePlugin.py | 386 + .../site-packages/PIL/IcoImagePlugin.py | 339 + .../site-packages/PIL/ImImagePlugin.py | 376 + .../lib/python3.9/site-packages/PIL/Image.py | 3611 ++++++++ .../python3.9/site-packages/PIL/ImageChops.py | 328 + .../python3.9/site-packages/PIL/ImageCms.py | 999 ++ .../python3.9/site-packages/PIL/ImageColor.py | 302 + .../python3.9/site-packages/PIL/ImageDraw.py | 984 ++ .../python3.9/site-packages/PIL/ImageDraw2.py | 179 + .../site-packages/PIL/ImageEnhance.py | 103 + .../python3.9/site-packages/PIL/ImageFile.py | 699 ++ .../site-packages/PIL/ImageFilter.py | 538 ++ .../python3.9/site-packages/PIL/ImageFont.py | 1060 +++ .../python3.9/site-packages/PIL/ImageGrab.py | 120 + .../python3.9/site-packages/PIL/ImageMath.py | 253 + .../python3.9/site-packages/PIL/ImageMode.py | 74 + .../python3.9/site-packages/PIL/ImageMorph.py | 245 + .../python3.9/site-packages/PIL/ImageOps.py | 608 ++ .../site-packages/PIL/ImagePalette.py | 261 + .../python3.9/site-packages/PIL/ImagePath.py | 19 + .../python3.9/site-packages/PIL/ImageQt.py | 213 + .../site-packages/PIL/ImageSequence.py | 75 + .../python3.9/site-packages/PIL/ImageShow.py | 264 + .../python3.9/site-packages/PIL/ImageStat.py | 147 + .../python3.9/site-packages/PIL/ImageTk.py | 300 + .../site-packages/PIL/ImageTransform.py | 102 + .../python3.9/site-packages/PIL/ImageWin.py | 230 + .../site-packages/PIL/ImtImagePlugin.py | 93 + .../site-packages/PIL/IptcImagePlugin.py | 230 + .../site-packages/PIL/Jpeg2KImagePlugin.py | 360 + .../site-packages/PIL/JpegImagePlugin.py | 826 ++ .../site-packages/PIL/JpegPresets.py | 240 + .../site-packages/PIL/McIdasImagePlugin.py | 75 + .../site-packages/PIL/MicImagePlugin.py | 107 + .../site-packages/PIL/MpegImagePlugin.py | 83 + .../site-packages/PIL/MpoImagePlugin.py | 135 + .../site-packages/PIL/MspImagePlugin.py | 194 + .../lib/python3.9/site-packages/PIL/PSDraw.py | 235 + .../site-packages/PIL/PaletteFile.py | 53 + .../site-packages/PIL/PalmImagePlugin.py | 227 + .../site-packages/PIL/PcdImagePlugin.py | 63 + .../site-packages/PIL/PcfFontFile.py | 248 + .../site-packages/PIL/PcxImagePlugin.py | 218 + .../site-packages/PIL/PdfImagePlugin.py | 240 + .../python3.9/site-packages/PIL/PdfParser.py | 997 ++ .../site-packages/PIL/PixarImagePlugin.py | 70 + .../site-packages/PIL/PngImagePlugin.py | 1406 +++ .../site-packages/PIL/PpmImagePlugin.py | 164 + .../site-packages/PIL/PsdImagePlugin.py | 325 + .../python3.9/site-packages/PIL/PyAccess.py | 353 + .../site-packages/PIL/SgiImagePlugin.py | 230 + .../site-packages/PIL/SpiderImagePlugin.py | 324 + .../site-packages/PIL/SunImagePlugin.py | 136 + .../lib/python3.9/site-packages/PIL/TarIO.py | 65 + .../site-packages/PIL/TgaImagePlugin.py | 248 + .../site-packages/PIL/TiffImagePlugin.py | 2043 +++++ .../python3.9/site-packages/PIL/TiffTags.py | 521 ++ .../site-packages/PIL/WalImageFile.py | 127 + .../site-packages/PIL/WebPImagePlugin.py | 351 + .../site-packages/PIL/WmfImagePlugin.py | 178 + .../site-packages/PIL/XVThumbImagePlugin.py | 78 + .../site-packages/PIL/XbmImagePlugin.py | 94 + .../site-packages/PIL/XpmImagePlugin.py | 130 + .../python3.9/site-packages/PIL/__init__.py | 139 + .../python3.9/site-packages/PIL/__main__.py | 3 + .../__pycache__/BdfFontFile.cpython-39.pyc | Bin 0 -> 2450 bytes .../__pycache__/BlpImagePlugin.cpython-39.pyc | Bin 0 -> 10506 bytes .../__pycache__/BmpImagePlugin.cpython-39.pyc | Bin 0 -> 6872 bytes .../BufrStubImagePlugin.cpython-39.pyc | Bin 0 -> 1649 bytes .../__pycache__/ContainerIO.cpython-39.pyc | Bin 0 -> 2831 bytes .../__pycache__/CurImagePlugin.cpython-39.pyc | Bin 0 -> 1335 bytes .../__pycache__/DcxImagePlugin.cpython-39.pyc | Bin 0 -> 1823 bytes .../__pycache__/DdsImagePlugin.cpython-39.pyc | Bin 0 -> 5934 bytes .../__pycache__/EpsImagePlugin.cpython-39.pyc | Bin 0 -> 7587 bytes .../PIL/__pycache__/ExifTags.cpython-39.pyc | Bin 0 -> 8006 bytes .../FitsStubImagePlugin.cpython-39.pyc | Bin 0 -> 2178 bytes .../__pycache__/FliImagePlugin.cpython-39.pyc | Bin 0 -> 3633 bytes .../PIL/__pycache__/FontFile.cpython-39.pyc | Bin 0 -> 2338 bytes .../__pycache__/FpxImagePlugin.cpython-39.pyc | Bin 0 -> 3633 bytes .../FtexImagePlugin.cpython-39.pyc | Bin 0 -> 3470 bytes .../__pycache__/GbrImagePlugin.cpython-39.pyc | Bin 0 -> 1868 bytes .../__pycache__/GdImageFile.cpython-39.pyc | Bin 0 -> 2451 bytes .../__pycache__/GifImagePlugin.cpython-39.pyc | Bin 0 -> 17167 bytes .../GimpGradientFile.cpython-39.pyc | Bin 0 -> 3269 bytes .../GimpPaletteFile.cpython-39.pyc | Bin 0 -> 1385 bytes .../GribStubImagePlugin.cpython-39.pyc | Bin 0 -> 1651 bytes .../Hdf5StubImagePlugin.cpython-39.pyc | Bin 0 -> 1637 bytes .../IcnsImagePlugin.cpython-39.pyc | Bin 0 -> 9368 bytes .../__pycache__/IcoImagePlugin.cpython-39.pyc | Bin 0 -> 7634 bytes .../__pycache__/ImImagePlugin.cpython-39.pyc | Bin 0 -> 6553 bytes .../PIL/__pycache__/Image.cpython-39.pyc | Bin 0 -> 97231 bytes .../PIL/__pycache__/ImageChops.cpython-39.pyc | Bin 0 -> 7784 bytes .../PIL/__pycache__/ImageCms.cpython-39.pyc | Bin 0 -> 32303 bytes .../PIL/__pycache__/ImageColor.cpython-39.pyc | Bin 0 -> 6502 bytes .../PIL/__pycache__/ImageDraw.cpython-39.pyc | Bin 0 -> 21647 bytes .../PIL/__pycache__/ImageDraw2.cpython-39.pyc | Bin 0 -> 5527 bytes .../__pycache__/ImageEnhance.cpython-39.pyc | Bin 0 -> 3506 bytes .../PIL/__pycache__/ImageFile.cpython-39.pyc | Bin 0 -> 14776 bytes .../__pycache__/ImageFilter.cpython-39.pyc | Bin 0 -> 16307 bytes .../PIL/__pycache__/ImageFont.cpython-39.pyc | Bin 0 -> 41612 bytes .../PIL/__pycache__/ImageGrab.cpython-39.pyc | Bin 0 -> 2462 bytes .../PIL/__pycache__/ImageMath.cpython-39.pyc | Bin 0 -> 8007 bytes .../PIL/__pycache__/ImageMode.cpython-39.pyc | Bin 0 -> 1614 bytes .../PIL/__pycache__/ImageMorph.cpython-39.pyc | Bin 0 -> 7250 bytes .../PIL/__pycache__/ImageOps.cpython-39.pyc | Bin 0 -> 16045 bytes .../__pycache__/ImagePalette.cpython-39.pyc | Bin 0 -> 6843 bytes .../PIL/__pycache__/ImagePath.cpython-39.pyc | Bin 0 -> 230 bytes .../PIL/__pycache__/ImageQt.cpython-39.pyc | Bin 0 -> 4390 bytes .../__pycache__/ImageSequence.cpython-39.pyc | Bin 0 -> 2335 bytes .../PIL/__pycache__/ImageShow.cpython-39.pyc | Bin 0 -> 7570 bytes .../PIL/__pycache__/ImageStat.cpython-39.pyc | Bin 0 -> 3659 bytes .../PIL/__pycache__/ImageTk.cpython-39.pyc | Bin 0 -> 7603 bytes .../__pycache__/ImageTransform.cpython-39.pyc | Bin 0 -> 3521 bytes .../PIL/__pycache__/ImageWin.cpython-39.pyc | Bin 0 -> 8135 bytes .../__pycache__/ImtImagePlugin.cpython-39.pyc | Bin 0 -> 1240 bytes .../IptcImagePlugin.cpython-39.pyc | Bin 0 -> 4365 bytes .../Jpeg2KImagePlugin.cpython-39.pyc | Bin 0 -> 7886 bytes .../JpegImagePlugin.cpython-39.pyc | Bin 0 -> 17507 bytes .../__pycache__/JpegPresets.cpython-39.pyc | Bin 0 -> 7904 bytes .../McIdasImagePlugin.cpython-39.pyc | Bin 0 -> 1358 bytes .../__pycache__/MicImagePlugin.cpython-39.pyc | Bin 0 -> 2105 bytes .../MpegImagePlugin.cpython-39.pyc | Bin 0 -> 1938 bytes .../__pycache__/MpoImagePlugin.cpython-39.pyc | Bin 0 -> 3448 bytes .../__pycache__/MspImagePlugin.cpython-39.pyc | Bin 0 -> 3050 bytes .../PIL/__pycache__/PSDraw.cpython-39.pyc | Bin 0 -> 5810 bytes .../__pycache__/PaletteFile.cpython-39.pyc | Bin 0 -> 1353 bytes .../PalmImagePlugin.cpython-39.pyc | Bin 0 -> 6738 bytes .../__pycache__/PcdImagePlugin.cpython-39.pyc | Bin 0 -> 1165 bytes .../__pycache__/PcfFontFile.cpython-39.pyc | Bin 0 -> 5247 bytes .../__pycache__/PcxImagePlugin.cpython-39.pyc | Bin 0 -> 3693 bytes .../__pycache__/PdfImagePlugin.cpython-39.pyc | Bin 0 -> 3633 bytes .../PIL/__pycache__/PdfParser.cpython-39.pyc | Bin 0 -> 26678 bytes .../PixarImagePlugin.cpython-39.pyc | Bin 0 -> 1140 bytes .../__pycache__/PngImagePlugin.cpython-39.pyc | Bin 0 -> 29172 bytes .../__pycache__/PpmImagePlugin.cpython-39.pyc | Bin 0 -> 3002 bytes .../__pycache__/PsdImagePlugin.cpython-39.pyc | Bin 0 -> 5399 bytes .../PIL/__pycache__/PyAccess.cpython-39.pyc | Bin 0 -> 10579 bytes .../__pycache__/SgiImagePlugin.cpython-39.pyc | Bin 0 -> 3937 bytes .../SpiderImagePlugin.cpython-39.pyc | Bin 0 -> 6694 bytes .../__pycache__/SunImagePlugin.cpython-39.pyc | Bin 0 -> 1898 bytes .../PIL/__pycache__/TarIO.cpython-39.pyc | Bin 0 -> 1551 bytes .../__pycache__/TgaImagePlugin.cpython-39.pyc | Bin 0 -> 3764 bytes .../TiffImagePlugin.cpython-39.pyc | Bin 0 -> 49917 bytes .../PIL/__pycache__/TiffTags.cpython-39.pyc | Bin 0 -> 9619 bytes .../__pycache__/WalImageFile.cpython-39.pyc | Bin 0 -> 2878 bytes .../WebPImagePlugin.cpython-39.pyc | Bin 0 -> 7027 bytes .../__pycache__/WmfImagePlugin.cpython-39.pyc | Bin 0 -> 3440 bytes .../XVThumbImagePlugin.cpython-39.pyc | Bin 0 -> 1415 bytes .../__pycache__/XbmImagePlugin.cpython-39.pyc | Bin 0 -> 2048 bytes .../__pycache__/XpmImagePlugin.cpython-39.pyc | Bin 0 -> 2224 bytes .../PIL/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 3726 bytes .../PIL/__pycache__/__main__.cpython-39.pyc | Bin 0 -> 219 bytes .../PIL/__pycache__/_binary.cpython-39.pyc | Bin 0 -> 2754 bytes .../_tkinter_finder.cpython-39.pyc | Bin 0 -> 659 bytes .../PIL/__pycache__/_util.cpython-39.pyc | Bin 0 -> 944 bytes .../PIL/__pycache__/_version.cpython-39.pyc | Bin 0 -> 192 bytes .../PIL/__pycache__/features.cpython-39.pyc | Bin 0 -> 8652 bytes .../python3.9/site-packages/PIL/_binary.py | 102 + .../_imaging.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 690408 bytes ..._imagingcms.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 47120 bytes .../_imagingft.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 68616 bytes ...imagingmath.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 30976 bytes ...magingmorph.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 14656 bytes .../_imagingtk.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 14656 bytes .../site-packages/PIL/_tkinter_finder.py | 20 + .../lib/python3.9/site-packages/PIL/_util.py | 19 + .../python3.9/site-packages/PIL/_version.py | 2 + .../PIL/_webp.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 45816 bytes .../python3.9/site-packages/PIL/features.py | 320 + .../Pillow-8.4.0.dist-info/INSTALLER | 1 + .../Pillow-8.4.0.dist-info/LICENSE | 636 ++ .../Pillow-8.4.0.dist-info/METADATA | 143 + .../Pillow-8.4.0.dist-info/RECORD | 212 + .../Pillow-8.4.0.dist-info/WHEEL | 6 + .../Pillow-8.4.0.dist-info/top_level.txt | 1 + .../zip-safe} | 0 .../Pillow.libs/libXau-00ec42fe.so.6.0.0 | Bin 0 -> 17048 bytes .../libfreetype-804dfcff.so.6.18.0 | Bin 0 -> 1410192 bytes .../libharfbuzz-a69be65e.so.0.30000.0 | Bin 0 -> 2923504 bytes .../Pillow.libs/libjpeg-183418da.so.9.4.0 | Bin 0 -> 250480 bytes .../Pillow.libs/liblcms2-035b9744.so.2.0.12 | Bin 0 -> 481912 bytes .../Pillow.libs/liblzma-d540a118.so.5.2.5 | Bin 0 -> 220808 bytes .../Pillow.libs/libopenjp2-430a98fc.so.2.4.0 | Bin 0 -> 532568 bytes .../Pillow.libs/libpng16-213e245f.so.16.37.0 | Bin 0 -> 283968 bytes .../Pillow.libs/libtiff-9ffe9659.so.5.7.0 | Bin 0 -> 689944 bytes .../Pillow.libs/libwebp-d8a3db66.so.7.1.2 | Bin 0 -> 641712 bytes .../libwebpdemux-f117ddb4.so.2.0.8 | Bin 0 -> 29456 bytes .../Pillow.libs/libwebpmux-fe44437b.so.3.0.7 | Bin 0 -> 54456 bytes .../Pillow.libs/libxcb-1122e22b.so.1.1.0 | Bin 0 -> 243216 bytes .../Pillow.libs/libz-dd453c56.so.1.2.11 | Bin 0 -> 129328 bytes .../__pycache__/cycler.cpython-39.pyc | Bin 0 -> 14581 bytes .../__pycache__/pylab.cpython-39.pyc | Bin 0 -> 245 bytes .../cycler-0.11.0.dist-info/INSTALLER | 1 + .../cycler-0.11.0.dist-info/LICENSE | 27 + .../cycler-0.11.0.dist-info/METADATA | 26 + .../cycler-0.11.0.dist-info/RECORD | 8 + .../cycler-0.11.0.dist-info/WHEEL | 5 + .../cycler-0.11.0.dist-info/top_level.txt | 1 + .venv/lib/python3.9/site-packages/cycler.py | 501 + .../site-packages/fontTools/__init__.py | 8 + .../site-packages/fontTools/__main__.py | 34 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 374 bytes .../__pycache__/__main__.cpython-39.pyc | Bin 0 -> 644 bytes .../__pycache__/afmLib.cpython-39.pyc | Bin 0 -> 10903 bytes .../fontTools/__pycache__/agl.cpython-39.pyc | Bin 0 -> 111031 bytes .../__pycache__/fontBuilder.cpython-39.pyc | Bin 0 -> 23984 bytes .../fontTools/__pycache__/help.cpython-39.pyc | Bin 0 -> 1224 bytes .../__pycache__/merge.cpython-39.pyc | Bin 0 -> 34377 bytes .../__pycache__/tfmLib.cpython-39.pyc | Bin 0 -> 11649 bytes .../fontTools/__pycache__/ttx.cpython-39.pyc | Bin 0 -> 12314 bytes .../__pycache__/unicode.cpython-39.pyc | Bin 0 -> 1665 bytes .../site-packages/fontTools/afmLib.py | 430 + .../python3.9/site-packages/fontTools/agl.py | 5232 +++++++++++ .../fontTools/cffLib/__init__.py | 3023 ++++++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 83377 bytes .../__pycache__/specializer.cpython-39.pyc | Bin 0 -> 16535 bytes .../cffLib/__pycache__/width.cpython-39.pyc | Bin 0 -> 6276 bytes .../fontTools/cffLib/specializer.py | 750 ++ .../site-packages/fontTools/cffLib/width.py | 183 + .../fontTools/colorLib/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 186 bytes .../__pycache__/builder.cpython-39.pyc | Bin 0 -> 19066 bytes .../__pycache__/errors.cpython-39.pyc | Bin 0 -> 352 bytes .../__pycache__/geometry.cpython-39.pyc | Bin 0 -> 3616 bytes .../__pycache__/table_builder.cpython-39.pyc | Bin 0 -> 6193 bytes .../__pycache__/unbuilder.cpython-39.pyc | Bin 0 -> 2575 bytes .../fontTools/colorLib/builder.py | 673 ++ .../fontTools/colorLib/errors.py | 3 + .../fontTools/colorLib/geometry.py | 145 + .../fontTools/colorLib/table_builder.py | 225 + .../fontTools/colorLib/unbuilder.py | 82 + .../site-packages/fontTools/cu2qu/__init__.py | 15 + .../site-packages/fontTools/cu2qu/__main__.py | 6 + .../cu2qu/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 205 bytes .../cu2qu/__pycache__/__main__.cpython-39.pyc | Bin 0 -> 285 bytes .../cu2qu/__pycache__/cli.cpython-39.pyc | Bin 0 -> 4860 bytes .../cu2qu/__pycache__/cu2qu.cpython-39.pyc | Bin 0 -> 14716 bytes .../cu2qu/__pycache__/errors.cpython-39.pyc | Bin 0 -> 3651 bytes .../cu2qu/__pycache__/ufo.cpython-39.pyc | Bin 0 -> 10517 bytes .../site-packages/fontTools/cu2qu/cli.py | 183 + .../site-packages/fontTools/cu2qu/cu2qu.py | 496 + .../site-packages/fontTools/cu2qu/errors.py | 76 + .../site-packages/fontTools/cu2qu/ufo.py | 324 + .../fontTools/designspaceLib/__init__.py | 1407 +++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 38428 bytes .../fontTools/encodings/MacRoman.py | 36 + .../fontTools/encodings/StandardEncoding.py | 48 + .../fontTools/encodings/__init__.py | 1 + .../__pycache__/MacRoman.cpython-39.pyc | Bin 0 -> 2232 bytes .../StandardEncoding.cpython-39.pyc | Bin 0 -> 1821 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 267 bytes .../__pycache__/codecs.cpython-39.pyc | Bin 0 -> 3510 bytes .../fontTools/encodings/codecs.py | 119 + .../fontTools/feaLib/__init__.py | 4 + .../fontTools/feaLib/__main__.py | 77 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 266 bytes .../__pycache__/__main__.cpython-39.pyc | Bin 0 -> 2149 bytes .../feaLib/__pycache__/ast.cpython-39.pyc | Bin 0 -> 81234 bytes .../feaLib/__pycache__/builder.cpython-39.pyc | Bin 0 -> 45635 bytes .../feaLib/__pycache__/error.cpython-39.pyc | Bin 0 -> 1119 bytes .../feaLib/__pycache__/lexer.cpython-39.pyc | Bin 0 -> 8337 bytes .../__pycache__/location.cpython-39.pyc | Bin 0 -> 679 bytes .../lookupDebugInfo.cpython-39.pyc | Bin 0 -> 678 bytes .../feaLib/__pycache__/parser.cpython-39.pyc | Bin 0 -> 54923 bytes .../__pycache__/variableScalar.cpython-39.pyc | Bin 0 -> 4745 bytes .../site-packages/fontTools/feaLib/ast.py | 2128 +++++ .../site-packages/fontTools/feaLib/builder.py | 1654 ++++ .../site-packages/fontTools/feaLib/error.py | 22 + .../site-packages/fontTools/feaLib/lexer.py | 285 + .../fontTools/feaLib/location.py | 12 + .../fontTools/feaLib/lookupDebugInfo.py | 11 + .../site-packages/fontTools/feaLib/parser.py | 2356 +++++ .../fontTools/feaLib/variableScalar.py | 97 + .../site-packages/fontTools/fontBuilder.py | 959 ++ .../python3.9/site-packages/fontTools/help.py | 35 + .../site-packages/fontTools/merge.py | 1282 +++ .../site-packages/fontTools/misc/__init__.py | 1 + .../misc/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 262 bytes .../__pycache__/arrayTools.cpython-39.pyc | Bin 0 -> 12224 bytes .../__pycache__/bezierTools.cpython-39.pyc | Bin 0 -> 34516 bytes .../__pycache__/classifyTools.cpython-39.pyc | Bin 0 -> 5236 bytes .../misc/__pycache__/cliTools.cpython-39.pyc | Bin 0 -> 1702 bytes .../misc/__pycache__/cython.cpython-39.pyc | Bin 0 -> 1044 bytes .../misc/__pycache__/dictTools.cpython-39.pyc | Bin 0 -> 2920 bytes .../misc/__pycache__/eexec.cpython-39.pyc | Bin 0 -> 3445 bytes .../__pycache__/encodingTools.cpython-39.pyc | Bin 0 -> 1540 bytes .../misc/__pycache__/etree.cpython-39.pyc | Bin 0 -> 9736 bytes .../misc/__pycache__/filenames.cpython-39.pyc | Bin 0 -> 6299 bytes .../__pycache__/fixedTools.cpython-39.pyc | Bin 0 -> 7120 bytes .../misc/__pycache__/intTools.cpython-39.pyc | Bin 0 -> 837 bytes .../__pycache__/loggingTools.cpython-39.pyc | Bin 0 -> 17563 bytes .../__pycache__/macCreatorType.cpython-39.pyc | Bin 0 -> 1838 bytes .../misc/__pycache__/macRes.cpython-39.pyc | Bin 0 -> 8722 bytes .../__pycache__/psCharStrings.cpython-39.pyc | Bin 0 -> 40984 bytes .../misc/__pycache__/psLib.cpython-39.pyc | Bin 0 -> 10200 bytes .../__pycache__/psOperators.cpython-39.pyc | Bin 0 -> 19046 bytes .../misc/__pycache__/py23.cpython-39.pyc | Bin 0 -> 2360 bytes .../__pycache__/roundTools.cpython-39.pyc | Bin 0 -> 3103 bytes .../misc/__pycache__/sstruct.cpython-39.pyc | Bin 0 -> 5959 bytes .../misc/__pycache__/symfont.cpython-39.pyc | Bin 0 -> 8009 bytes .../misc/__pycache__/testTools.cpython-39.pyc | Bin 0 -> 8726 bytes .../misc/__pycache__/textTools.cpython-39.pyc | Bin 0 -> 4802 bytes .../misc/__pycache__/timeTools.cpython-39.pyc | Bin 0 -> 2520 bytes .../misc/__pycache__/transform.cpython-39.pyc | Bin 0 -> 11122 bytes .../misc/__pycache__/vector.cpython-39.pyc | Bin 0 -> 6014 bytes .../misc/__pycache__/xmlReader.cpython-39.pyc | Bin 0 -> 4821 bytes .../misc/__pycache__/xmlWriter.cpython-39.pyc | Bin 0 -> 6327 bytes .../fontTools/misc/arrayTools.py | 379 + .../fontTools/misc/bezierTools.py | 1225 +++ .../fontTools/misc/classifyTools.py | 171 + .../site-packages/fontTools/misc/cliTools.py | 46 + .../site-packages/fontTools/misc/cython.py | 25 + .../site-packages/fontTools/misc/dictTools.py | 66 + .../site-packages/fontTools/misc/eexec.py | 113 + .../fontTools/misc/encodingTools.py | 71 + .../site-packages/fontTools/misc/etree.py | 479 + .../site-packages/fontTools/misc/filenames.py | 242 + .../fontTools/misc/fixedTools.py | 251 + .../site-packages/fontTools/misc/intTools.py | 25 + .../fontTools/misc/loggingTools.py | 536 ++ .../fontTools/misc/macCreatorType.py | 54 + .../site-packages/fontTools/misc/macRes.py | 259 + .../fontTools/misc/plistlib/__init__.py | 677 ++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 18334 bytes .../fontTools/misc/plistlib/py.typed | 0 .../fontTools/misc/psCharStrings.py | 1304 +++ .../site-packages/fontTools/misc/psLib.py | 384 + .../fontTools/misc/psOperators.py | 537 ++ .../site-packages/fontTools/misc/py23.py | 96 + .../fontTools/misc/roundTools.py | 105 + .../site-packages/fontTools/misc/sstruct.py | 216 + .../site-packages/fontTools/misc/symfont.py | 192 + .../site-packages/fontTools/misc/testTools.py | 198 + .../site-packages/fontTools/misc/textTools.py | 154 + .../site-packages/fontTools/misc/timeTools.py | 68 + .../site-packages/fontTools/misc/transform.py | 378 + .../site-packages/fontTools/misc/vector.py | 143 + .../site-packages/fontTools/misc/xmlReader.py | 171 + .../site-packages/fontTools/misc/xmlWriter.py | 194 + .../fontTools/mtiLib/__init__.py | 1230 +++ .../fontTools/mtiLib/__main__.py | 5 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 40428 bytes .../__pycache__/__main__.cpython-39.pyc | Bin 0 -> 294 bytes .../fontTools/otlLib/__init__.py | 1 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 234 bytes .../otlLib/__pycache__/builder.cpython-39.pyc | Bin 0 -> 99280 bytes .../otlLib/__pycache__/error.cpython-39.pyc | Bin 0 -> 717 bytes .../__pycache__/maxContextCalc.cpython-39.pyc | Bin 0 -> 2235 bytes .../site-packages/fontTools/otlLib/builder.py | 2853 ++++++ .../site-packages/fontTools/otlLib/error.py | 11 + .../fontTools/otlLib/maxContextCalc.py | 96 + .../fontTools/otlLib/optimize/__init__.py | 68 + .../fontTools/otlLib/optimize/__main__.py | 6 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 2456 bytes .../__pycache__/__main__.cpython-39.pyc | Bin 0 -> 312 bytes .../optimize/__pycache__/gpos.cpython-39.pyc | Bin 0 -> 10928 bytes .../fontTools/otlLib/optimize/gpos.py | 439 + .../site-packages/fontTools/pens/__init__.py | 1 + .../pens/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 262 bytes .../pens/__pycache__/areaPen.cpython-39.pyc | Bin 0 -> 2057 bytes .../pens/__pycache__/basePen.cpython-39.pyc | Bin 0 -> 14826 bytes .../pens/__pycache__/boundsPen.cpython-39.pyc | Bin 0 -> 3408 bytes .../pens/__pycache__/cocoaPen.cpython-39.pyc | Bin 0 -> 1307 bytes .../pens/__pycache__/cu2quPen.cpython-39.pyc | Bin 0 -> 8259 bytes .../pens/__pycache__/filterPen.cpython-39.pyc | Bin 0 -> 6511 bytes .../__pycache__/hashPointPen.cpython-39.pyc | Bin 0 -> 3215 bytes .../__pycache__/momentsPen.cpython-39.pyc | Bin 0 -> 10234 bytes .../__pycache__/perimeterPen.cpython-39.pyc | Bin 0 -> 2822 bytes .../__pycache__/pointInsidePen.cpython-39.pyc | Bin 0 -> 5169 bytes .../pens/__pycache__/pointPen.cpython-39.pyc | Bin 0 -> 13248 bytes .../pens/__pycache__/qtPen.cpython-39.pyc | Bin 0 -> 1400 bytes .../pens/__pycache__/quartzPen.cpython-39.pyc | Bin 0 -> 1947 bytes .../__pycache__/recordingPen.cpython-39.pyc | Bin 0 -> 6095 bytes .../__pycache__/reportLabPen.cpython-39.pyc | Bin 0 -> 2490 bytes .../reverseContourPen.cpython-39.pyc | Bin 0 -> 2219 bytes .../__pycache__/roundingPen.cpython-39.pyc | Bin 0 -> 4727 bytes .../__pycache__/statisticsPen.cpython-39.pyc | Bin 0 -> 3281 bytes .../__pycache__/svgPathPen.cpython-39.pyc | Bin 0 -> 4699 bytes .../t2CharStringPen.cpython-39.pyc | Bin 0 -> 3018 bytes .../pens/__pycache__/teePen.cpython-39.pyc | Bin 0 -> 2081 bytes .../__pycache__/transformPen.cpython-39.pyc | Bin 0 -> 4701 bytes .../__pycache__/ttGlyphPen.cpython-39.pyc | Bin 0 -> 9972 bytes .../pens/__pycache__/wxPen.cpython-39.pyc | Bin 0 -> 1458 bytes .../site-packages/fontTools/pens/areaPen.py | 57 + .../site-packages/fontTools/pens/basePen.py | 408 + .../site-packages/fontTools/pens/boundsPen.py | 96 + .../site-packages/fontTools/pens/cocoaPen.py | 26 + .../site-packages/fontTools/pens/cu2quPen.py | 257 + .../site-packages/fontTools/pens/filterPen.py | 158 + .../fontTools/pens/hashPointPen.py | 77 + .../fontTools/pens/momentsPen.py | 297 + .../fontTools/pens/perimeterPen.py | 58 + .../fontTools/pens/pointInsidePen.py | 190 + .../site-packages/fontTools/pens/pointPen.py | 493 + .../site-packages/fontTools/pens/qtPen.py | 29 + .../site-packages/fontTools/pens/quartzPen.py | 45 + .../fontTools/pens/recordingPen.py | 155 + .../fontTools/pens/reportLabPen.py | 73 + .../fontTools/pens/reverseContourPen.py | 95 + .../fontTools/pens/roundingPen.py | 112 + .../fontTools/pens/statisticsPen.py | 100 + .../fontTools/pens/svgPathPen.py | 176 + .../fontTools/pens/t2CharStringPen.py | 65 + .../site-packages/fontTools/pens/teePen.py | 46 + .../fontTools/pens/transformPen.py | 108 + .../fontTools/pens/ttGlyphPen.py | 285 + .../site-packages/fontTools/pens/wxPen.py | 29 + .../fontTools/subset/__init__.py | 3130 +++++++ .../fontTools/subset/__main__.py | 6 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 102662 bytes .../__pycache__/__main__.cpython-39.pyc | Bin 0 -> 294 bytes .../subset/__pycache__/cff.cpython-39.pyc | Bin 0 -> 13678 bytes .../subset/__pycache__/svg.cpython-39.pyc | Bin 0 -> 6091 bytes .../subset/__pycache__/util.cpython-39.pyc | Bin 0 -> 942 bytes .../site-packages/fontTools/subset/cff.py | 509 ++ .../site-packages/fontTools/subset/svg.py | 245 + .../site-packages/fontTools/subset/util.py | 25 + .../fontTools/svgLib/__init__.py | 3 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 270 bytes .../fontTools/svgLib/path/__init__.py | 61 + .../path/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 2285 bytes .../path/__pycache__/arc.cpython-39.pyc | Bin 0 -> 3581 bytes .../path/__pycache__/parser.cpython-39.pyc | Bin 0 -> 4638 bytes .../path/__pycache__/shapes.cpython-39.pyc | Bin 0 -> 6551 bytes .../fontTools/svgLib/path/arc.py | 154 + .../fontTools/svgLib/path/parser.py | 312 + .../fontTools/svgLib/path/shapes.py | 181 + .../site-packages/fontTools/t1Lib/__init__.py | 369 + .../t1Lib/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 9977 bytes .../site-packages/fontTools/tfmLib.py | 460 + .../site-packages/fontTools/ttLib/__init__.py | 17 + .../ttLib/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 921 bytes .../ttLib/__pycache__/macUtils.cpython-39.pyc | Bin 0 -> 1961 bytes .../__pycache__/removeOverlaps.cpython-39.pyc | Bin 0 -> 6940 bytes .../ttLib/__pycache__/sfnt.cpython-39.pyc | Bin 0 -> 17120 bytes .../standardGlyphOrder.cpython-39.pyc | Bin 0 -> 2331 bytes .../__pycache__/ttCollection.cpython-39.pyc | Bin 0 -> 3886 bytes .../ttLib/__pycache__/ttFont.cpython-39.pyc | Bin 0 -> 30872 bytes .../ttLib/__pycache__/woff2.cpython-39.pyc | Bin 0 -> 42595 bytes .../site-packages/fontTools/ttLib/macUtils.py | 52 + .../fontTools/ttLib/removeOverlaps.py | 248 + .../site-packages/fontTools/ttLib/sfnt.py | 624 ++ .../fontTools/ttLib/standardGlyphOrder.py | 271 + .../fontTools/ttLib/tables/B_A_S_E_.py | 5 + .../ttLib/tables/BitmapGlyphMetrics.py | 59 + .../fontTools/ttLib/tables/C_B_D_T_.py | 92 + .../fontTools/ttLib/tables/C_B_L_C_.py | 9 + .../fontTools/ttLib/tables/C_F_F_.py | 46 + .../fontTools/ttLib/tables/C_F_F__2.py | 14 + .../fontTools/ttLib/tables/C_O_L_R_.py | 160 + .../fontTools/ttLib/tables/C_P_A_L_.py | 260 + .../fontTools/ttLib/tables/D_S_I_G_.py | 129 + .../fontTools/ttLib/tables/D__e_b_g.py | 17 + .../fontTools/ttLib/tables/DefaultTable.py | 48 + .../fontTools/ttLib/tables/E_B_D_T_.py | 761 ++ .../fontTools/ttLib/tables/E_B_L_C_.py | 625 ++ .../fontTools/ttLib/tables/F_F_T_M_.py | 40 + .../fontTools/ttLib/tables/F__e_a_t.py | 119 + .../fontTools/ttLib/tables/G_D_E_F_.py | 5 + .../fontTools/ttLib/tables/G_M_A_P_.py | 126 + .../fontTools/ttLib/tables/G_P_K_G_.py | 123 + .../fontTools/ttLib/tables/G_P_O_S_.py | 5 + .../fontTools/ttLib/tables/G_S_U_B_.py | 5 + .../fontTools/ttLib/tables/G__l_a_t.py | 218 + .../fontTools/ttLib/tables/G__l_o_c.py | 71 + .../fontTools/ttLib/tables/H_V_A_R_.py | 5 + .../fontTools/ttLib/tables/J_S_T_F_.py | 5 + .../fontTools/ttLib/tables/L_T_S_H_.py | 48 + .../fontTools/ttLib/tables/M_A_T_H_.py | 5 + .../fontTools/ttLib/tables/M_E_T_A_.py | 303 + .../fontTools/ttLib/tables/M_V_A_R_.py | 5 + .../fontTools/ttLib/tables/O_S_2f_2.py | 524 ++ .../fontTools/ttLib/tables/S_I_N_G_.py | 93 + .../fontTools/ttLib/tables/S_T_A_T_.py | 5 + .../fontTools/ttLib/tables/S_V_G_.py | 156 + .../fontTools/ttLib/tables/S__i_l_f.py | 885 ++ .../fontTools/ttLib/tables/S__i_l_l.py | 80 + .../fontTools/ttLib/tables/T_S_I_B_.py | 4 + .../fontTools/ttLib/tables/T_S_I_C_.py | 5 + .../fontTools/ttLib/tables/T_S_I_D_.py | 4 + .../fontTools/ttLib/tables/T_S_I_J_.py | 4 + .../fontTools/ttLib/tables/T_S_I_P_.py | 4 + .../fontTools/ttLib/tables/T_S_I_S_.py | 4 + .../fontTools/ttLib/tables/T_S_I_V_.py | 20 + .../fontTools/ttLib/tables/T_S_I__0.py | 54 + .../fontTools/ttLib/tables/T_S_I__1.py | 156 + .../fontTools/ttLib/tables/T_S_I__2.py | 14 + .../fontTools/ttLib/tables/T_S_I__3.py | 14 + .../fontTools/ttLib/tables/T_S_I__5.py | 43 + .../fontTools/ttLib/tables/T_T_F_A_.py | 4 + .../fontTools/ttLib/tables/TupleVariation.py | 772 ++ .../fontTools/ttLib/tables/V_D_M_X_.py | 232 + .../fontTools/ttLib/tables/V_O_R_G_.py | 139 + .../fontTools/ttLib/tables/V_V_A_R_.py | 5 + .../fontTools/ttLib/tables/__init__.py | 95 + .../__pycache__/B_A_S_E_.cpython-39.pyc | Bin 0 -> 400 bytes .../BitmapGlyphMetrics.cpython-39.pyc | Bin 0 -> 1935 bytes .../__pycache__/C_B_D_T_.cpython-39.pyc | Bin 0 -> 3514 bytes .../__pycache__/C_B_L_C_.cpython-39.pyc | Bin 0 -> 430 bytes .../tables/__pycache__/C_F_F_.cpython-39.pyc | Bin 0 -> 2129 bytes .../__pycache__/C_F_F__2.cpython-39.pyc | Bin 0 -> 903 bytes .../__pycache__/C_O_L_R_.cpython-39.pyc | Bin 0 -> 5226 bytes .../__pycache__/C_P_A_L_.cpython-39.pyc | Bin 0 -> 9386 bytes .../__pycache__/D_S_I_G_.cpython-39.pyc | Bin 0 -> 4394 bytes .../__pycache__/D__e_b_g.cpython-39.pyc | Bin 0 -> 1090 bytes .../__pycache__/DefaultTable.cpython-39.pyc | Bin 0 -> 2192 bytes .../__pycache__/E_B_D_T_.cpython-39.pyc | Bin 0 -> 20599 bytes .../__pycache__/E_B_L_C_.cpython-39.pyc | Bin 0 -> 19810 bytes .../__pycache__/F_F_T_M_.cpython-39.pyc | Bin 0 -> 1760 bytes .../__pycache__/F__e_a_t.cpython-39.pyc | Bin 0 -> 4519 bytes .../__pycache__/G_D_E_F_.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/G_M_A_P_.cpython-39.pyc | Bin 0 -> 4098 bytes .../__pycache__/G_P_K_G_.cpython-39.pyc | Bin 0 -> 3187 bytes .../__pycache__/G_P_O_S_.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/G_S_U_B_.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/G__l_a_t.cpython-39.pyc | Bin 0 -> 7177 bytes .../__pycache__/G__l_o_c.cpython-39.pyc | Bin 0 -> 2983 bytes .../__pycache__/H_V_A_R_.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/J_S_T_F_.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/L_T_S_H_.cpython-39.pyc | Bin 0 -> 1785 bytes .../__pycache__/M_A_T_H_.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/M_E_T_A_.cpython-39.pyc | Bin 0 -> 7651 bytes .../__pycache__/M_V_A_R_.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/O_S_2f_2.cpython-39.pyc | Bin 0 -> 17030 bytes .../__pycache__/S_I_N_G_.cpython-39.pyc | Bin 0 -> 3060 bytes .../__pycache__/S_T_A_T_.cpython-39.pyc | Bin 0 -> 400 bytes .../tables/__pycache__/S_V_G_.cpython-39.pyc | Bin 0 -> 4422 bytes .../__pycache__/S__i_l_f.cpython-39.pyc | Bin 0 -> 26368 bytes .../__pycache__/S__i_l_l.cpython-39.pyc | Bin 0 -> 2989 bytes .../__pycache__/T_S_I_B_.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/T_S_I_C_.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/T_S_I_D_.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/T_S_I_J_.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/T_S_I_P_.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/T_S_I_S_.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/T_S_I_V_.cpython-39.pyc | Bin 0 -> 1059 bytes .../__pycache__/T_S_I__0.cpython-39.pyc | Bin 0 -> 2129 bytes .../__pycache__/T_S_I__1.cpython-39.pyc | Bin 0 -> 3641 bytes .../__pycache__/T_S_I__2.cpython-39.pyc | Bin 0 -> 761 bytes .../__pycache__/T_S_I__3.cpython-39.pyc | Bin 0 -> 757 bytes .../__pycache__/T_S_I__5.cpython-39.pyc | Bin 0 -> 1883 bytes .../__pycache__/T_T_F_A_.cpython-39.pyc | Bin 0 -> 390 bytes .../__pycache__/TupleVariation.cpython-39.pyc | Bin 0 -> 19578 bytes .../__pycache__/V_D_M_X_.cpython-39.pyc | Bin 0 -> 5797 bytes .../__pycache__/V_O_R_G_.cpython-39.pyc | Bin 0 -> 5072 bytes .../__pycache__/V_V_A_R_.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 3540 bytes .../__pycache__/_a_n_k_r.cpython-39.pyc | Bin 0 -> 782 bytes .../__pycache__/_a_v_a_r.cpython-39.pyc | Bin 0 -> 4495 bytes .../__pycache__/_b_s_l_n.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/_c_i_d_g.cpython-39.pyc | Bin 0 -> 1056 bytes .../__pycache__/_c_m_a_p.cpython-39.pyc | Bin 0 -> 31363 bytes .../__pycache__/_c_v_a_r.cpython-39.pyc | Bin 0 -> 3390 bytes .../tables/__pycache__/_c_v_t.cpython-39.pyc | Bin 0 -> 2105 bytes .../__pycache__/_f_e_a_t.cpython-39.pyc | Bin 0 -> 865 bytes .../__pycache__/_f_p_g_m.cpython-39.pyc | Bin 0 -> 1699 bytes .../__pycache__/_f_v_a_r.cpython-39.pyc | Bin 0 -> 7659 bytes .../__pycache__/_g_a_s_p.cpython-39.pyc | Bin 0 -> 1905 bytes .../__pycache__/_g_c_i_d.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/_g_l_y_f.cpython-39.pyc | Bin 0 -> 43244 bytes .../__pycache__/_g_v_a_r.cpython-39.pyc | Bin 0 -> 7427 bytes .../__pycache__/_h_d_m_x.cpython-39.pyc | Bin 0 -> 4181 bytes .../__pycache__/_h_e_a_d.cpython-39.pyc | Bin 0 -> 3595 bytes .../__pycache__/_h_h_e_a.cpython-39.pyc | Bin 0 -> 3948 bytes .../__pycache__/_h_m_t_x.cpython-39.pyc | Bin 0 -> 4232 bytes .../__pycache__/_k_e_r_n.cpython-39.pyc | Bin 0 -> 7949 bytes .../__pycache__/_l_c_a_r.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/_l_o_c_a.cpython-39.pyc | Bin 0 -> 2386 bytes .../__pycache__/_l_t_a_g.cpython-39.pyc | Bin 0 -> 2478 bytes .../__pycache__/_m_a_x_p.cpython-39.pyc | Bin 0 -> 3901 bytes .../__pycache__/_m_e_t_a.cpython-39.pyc | Bin 0 -> 2962 bytes .../__pycache__/_m_o_r_t.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/_m_o_r_x.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/_n_a_m_e.cpython-39.pyc | Bin 0 -> 23116 bytes .../__pycache__/_o_p_b_d.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/_p_o_s_t.cpython-39.pyc | Bin 0 -> 8088 bytes .../__pycache__/_p_r_e_p.cpython-39.pyc | Bin 0 -> 437 bytes .../__pycache__/_p_r_o_p.cpython-39.pyc | Bin 0 -> 400 bytes .../__pycache__/_s_b_i_x.cpython-39.pyc | Bin 0 -> 3539 bytes .../__pycache__/_t_r_a_k.cpython-39.pyc | Bin 0 -> 9517 bytes .../__pycache__/_v_h_e_a.cpython-39.pyc | Bin 0 -> 3558 bytes .../__pycache__/_v_m_t_x.cpython-39.pyc | Bin 0 -> 558 bytes .../__pycache__/asciiTable.cpython-39.pyc | Bin 0 -> 1021 bytes .../tables/__pycache__/grUtils.cpython-39.pyc | Bin 0 -> 2574 bytes .../tables/__pycache__/otBase.cpython-39.pyc | Bin 0 -> 30758 bytes .../__pycache__/otConverters.cpython-39.pyc | Bin 0 -> 59007 bytes .../tables/__pycache__/otData.cpython-39.pyc | Bin 0 -> 73471 bytes .../__pycache__/otTables.cpython-39.pyc | Bin 0 -> 54049 bytes .../__pycache__/sbixGlyph.cpython-39.pyc | Bin 0 -> 3413 bytes .../__pycache__/sbixStrike.cpython-39.pyc | Bin 0 -> 3788 bytes .../__pycache__/ttProgram.cpython-39.pyc | Bin 0 -> 16365 bytes .../fontTools/ttLib/tables/_a_n_k_r.py | 12 + .../fontTools/ttLib/tables/_a_v_a_r.py | 122 + .../fontTools/ttLib/tables/_b_s_l_n.py | 6 + .../fontTools/ttLib/tables/_c_i_d_g.py | 19 + .../fontTools/ttLib/tables/_c_m_a_p.py | 1298 +++ .../fontTools/ttLib/tables/_c_v_a_r.py | 82 + .../fontTools/ttLib/tables/_c_v_t.py | 45 + .../fontTools/ttLib/tables/_f_e_a_t.py | 11 + .../fontTools/ttLib/tables/_f_p_g_m.py | 48 + .../fontTools/ttLib/tables/_f_v_a_r.py | 227 + .../fontTools/ttLib/tables/_g_a_s_p.py | 49 + .../fontTools/ttLib/tables/_g_c_i_d.py | 6 + .../fontTools/ttLib/tables/_g_l_y_f.py | 1714 ++++ .../fontTools/ttLib/tables/_g_v_a_r.py | 237 + .../fontTools/ttLib/tables/_h_d_m_x.py | 116 + .../fontTools/ttLib/tables/_h_e_a_d.py | 117 + .../fontTools/ttLib/tables/_h_h_e_a.py | 123 + .../fontTools/ttLib/tables/_h_m_t_x.py | 138 + .../fontTools/ttLib/tables/_k_e_r_n.py | 284 + .../fontTools/ttLib/tables/_l_c_a_r.py | 5 + .../fontTools/ttLib/tables/_l_o_c_a.py | 61 + .../fontTools/ttLib/tables/_l_t_a_g.py | 63 + .../fontTools/ttLib/tables/_m_a_x_p.py | 138 + .../fontTools/ttLib/tables/_m_e_t_a.py | 101 + .../fontTools/ttLib/tables/_m_o_r_t.py | 6 + .../fontTools/ttLib/tables/_m_o_r_x.py | 6 + .../fontTools/ttLib/tables/_n_a_m_e.py | 1045 +++ .../fontTools/ttLib/tables/_o_p_b_d.py | 6 + .../fontTools/ttLib/tables/_p_o_s_t.py | 292 + .../fontTools/ttLib/tables/_p_r_e_p.py | 6 + .../fontTools/ttLib/tables/_p_r_o_p.py | 6 + .../fontTools/ttLib/tables/_s_b_i_x.py | 115 + .../fontTools/ttLib/tables/_t_r_a_k.py | 314 + .../fontTools/ttLib/tables/_v_h_e_a.py | 118 + .../fontTools/ttLib/tables/_v_m_t_x.py | 10 + .../fontTools/ttLib/tables/asciiTable.py | 21 + .../fontTools/ttLib/tables/grUtils.py | 81 + .../fontTools/ttLib/tables/otBase.py | 1062 +++ .../fontTools/ttLib/tables/otConverters.py | 1773 ++++ .../fontTools/ttLib/tables/otData.py | 1957 ++++ .../fontTools/ttLib/tables/otTables.py | 2047 +++++ .../fontTools/ttLib/tables/sbixGlyph.py | 117 + .../fontTools/ttLib/tables/sbixStrike.py | 148 + .../ttLib/tables/table_API_readme.txt | 91 + .../fontTools/ttLib/tables/ttProgram.py | 544 ++ .../fontTools/ttLib/ttCollection.py | 116 + .../site-packages/fontTools/ttLib/ttFont.py | 1081 +++ .../site-packages/fontTools/ttLib/woff2.py | 1532 ++++ .../python3.9/site-packages/fontTools/ttx.py | 416 + .../fontTools/ufoLib/__init__.py | 2308 +++++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 57367 bytes .../__pycache__/converters.cpython-39.pyc | Bin 0 -> 8706 bytes .../ufoLib/__pycache__/errors.cpython-39.pyc | Bin 0 -> 749 bytes .../ufoLib/__pycache__/etree.cpython-39.pyc | Bin 0 -> 416 bytes .../__pycache__/filenames.cpython-39.pyc | Bin 0 -> 5072 bytes .../ufoLib/__pycache__/glifLib.cpython-39.pyc | Bin 0 -> 49153 bytes .../ufoLib/__pycache__/kerning.cpython-39.pyc | Bin 0 -> 2026 bytes .../__pycache__/plistlib.cpython-39.pyc | Bin 0 -> 1638 bytes .../__pycache__/pointPen.cpython-39.pyc | Bin 0 -> 428 bytes .../ufoLib/__pycache__/utils.cpython-39.pyc | Bin 0 -> 2630 bytes .../__pycache__/validators.cpython-39.pyc | Bin 0 -> 20815 bytes .../fontTools/ufoLib/converters.py | 335 + .../site-packages/fontTools/ufoLib/errors.py | 16 + .../site-packages/fontTools/ufoLib/etree.py | 5 + .../fontTools/ufoLib/filenames.py | 210 + .../site-packages/fontTools/ufoLib/glifLib.py | 1773 ++++ .../site-packages/fontTools/ufoLib/kerning.py | 89 + .../fontTools/ufoLib/plistlib.py | 46 + .../fontTools/ufoLib/pointPen.py | 5 + .../site-packages/fontTools/ufoLib/utils.py | 75 + .../fontTools/ufoLib/validators.py | 1060 +++ .../site-packages/fontTools/unicode.py | 47 + .../fontTools/unicodedata/Blocks.py | 765 ++ .../fontTools/unicodedata/OTTags.py | 41 + .../fontTools/unicodedata/ScriptExtensions.py | 447 + .../fontTools/unicodedata/Scripts.py | 3469 +++++++ .../fontTools/unicodedata/__init__.py | 284 + .../__pycache__/Blocks.cpython-39.pyc | Bin 0 -> 7997 bytes .../__pycache__/OTTags.cpython-39.pyc | Bin 0 -> 764 bytes .../ScriptExtensions.cpython-39.pyc | Bin 0 -> 3806 bytes .../__pycache__/Scripts.cpython-39.pyc | Bin 0 -> 20022 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 5457 bytes .../fontTools/varLib/__init__.py | 1108 +++ .../fontTools/varLib/__main__.py | 6 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 29662 bytes .../__pycache__/__main__.cpython-39.pyc | Bin 0 -> 294 bytes .../varLib/__pycache__/builder.cpython-39.pyc | Bin 0 -> 5331 bytes .../varLib/__pycache__/cff.cpython-39.pyc | Bin 0 -> 18054 bytes .../varLib/__pycache__/errors.cpython-39.pyc | Bin 0 -> 8088 bytes .../__pycache__/featureVars.cpython-39.pyc | Bin 0 -> 14336 bytes .../__pycache__/interpolatable.cpython-39.pyc | Bin 0 -> 9208 bytes .../interpolate_layout.cpython-39.pyc | Bin 0 -> 3768 bytes .../varLib/__pycache__/iup.cpython-39.pyc | Bin 0 -> 7035 bytes .../varLib/__pycache__/merger.cpython-39.pyc | Bin 0 -> 34833 bytes .../varLib/__pycache__/models.cpython-39.pyc | Bin 0 -> 17270 bytes .../varLib/__pycache__/mutator.cpython-39.pyc | Bin 0 -> 12654 bytes .../varLib/__pycache__/mvar.cpython-39.pyc | Bin 0 -> 1085 bytes .../varLib/__pycache__/plot.cpython-39.pyc | Bin 0 -> 5303 bytes .../__pycache__/varStore.cpython-39.pyc | Bin 0 -> 16343 bytes .../site-packages/fontTools/varLib/builder.py | 137 + .../site-packages/fontTools/varLib/cff.py | 653 ++ .../site-packages/fontTools/varLib/errors.py | 190 + .../fontTools/varLib/featureVars.py | 504 + .../fontTools/varLib/instancer/__init__.py | 1444 +++ .../fontTools/varLib/instancer/__main__.py | 5 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 39762 bytes .../__pycache__/__main__.cpython-39.pyc | Bin 0 -> 314 bytes .../__pycache__/names.cpython-39.pyc | Bin 0 -> 10880 bytes .../fontTools/varLib/instancer/names.py | 379 + .../fontTools/varLib/interpolatable.py | 372 + .../fontTools/varLib/interpolate_layout.py | 104 + .../site-packages/fontTools/varLib/iup.py | 300 + .../site-packages/fontTools/varLib/merger.py | 1097 +++ .../site-packages/fontTools/varLib/models.py | 529 ++ .../site-packages/fontTools/varLib/mutator.py | 461 + .../site-packages/fontTools/varLib/mvar.py | 40 + .../site-packages/fontTools/varLib/plot.py | 167 + .../fontTools/varLib/varStore.py | 606 ++ .../fontTools/voltLib/__init__.py | 5 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 286 bytes .../voltLib/__pycache__/ast.cpython-39.pyc | Bin 0 -> 18303 bytes .../voltLib/__pycache__/error.cpython-39.pyc | Bin 0 -> 750 bytes .../voltLib/__pycache__/lexer.cpython-39.pyc | Bin 0 -> 3039 bytes .../voltLib/__pycache__/parser.cpython-39.pyc | Bin 0 -> 17578 bytes .../site-packages/fontTools/voltLib/ast.py | 433 + .../site-packages/fontTools/voltLib/error.py | 14 + .../site-packages/fontTools/voltLib/lexer.py | 99 + .../site-packages/fontTools/voltLib/parser.py | 649 ++ .../fonttools-4.28.2.dist-info/INSTALLER | 1 + .../fonttools-4.28.2.dist-info/LICENSE | 21 + .../fonttools-4.28.2.dist-info/METADATA | 2480 +++++ .../fonttools-4.28.2.dist-info/RECORD | 532 ++ .../fonttools-4.28.2.dist-info/WHEEL | 5 + .../entry_points.txt | 6 + .../fonttools-4.28.2.dist-info/top_level.txt | 1 + .../kiwisolver-1.3.2.dist-info/INSTALLER | 1 + .../kiwisolver-1.3.2.dist-info/LICENSE | 71 + .../kiwisolver-1.3.2.dist-info/METADATA | 48 + .../kiwisolver-1.3.2.dist-info/RECORD | 7 + .../kiwisolver-1.3.2.dist-info/WHEEL | 6 + .../kiwisolver-1.3.2.dist-info/top_level.txt | 1 + .../kiwisolver.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 6575072 bytes .../mathprolib-0.1.7-py3.9.egg-info/PKG-INFO | 62 - .../SOURCES.txt | 18 - .../installed-files.txt | 22 - .../top_level.txt | 1 - .../site-packages/mathprolib/Fraction.py | 423 - .../mathprolib/Inf_digits_float.py | 50 - .../site-packages/mathprolib/Scientific.py | 113 - .../site-packages/mathprolib/__init__.py | 4 - .../__pycache__/Fraction.cpython-39.pyc | Bin 13417 -> 0 bytes .../Inf_digits_float.cpython-39.pyc | Bin 1890 -> 0 bytes .../__pycache__/Scientific.cpython-39.pyc | Bin 3896 -> 0 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 195 -> 0 bytes .../__pycache__/float2Fraction.cpython-39.pyc | Bin 604 -> 0 bytes .../__pycache__/linear_algebra.cpython-39.pyc | Bin 1516 -> 0 bytes .../__pycache__/polynomials.cpython-39.pyc | Bin 2148 -> 0 bytes .../__pycache__/simple.cpython-39.pyc | Bin 5919 -> 0 bytes .../mathprolib/float2Fraction.py | 11 - .../site-packages/mathprolib/help.py | 53 - .../mathprolib/linear_algebra.py | 23 - .../site-packages/mathprolib/polynomials.py | 60 - .../site-packages/mathprolib/simple.py | 131 - .../matplotlib-3.5.0-py3.9-nspkg.pth | 1 + .../matplotlib-3.5.0.dist-info/INSTALLER | 1 + .../matplotlib-3.5.0.dist-info/LICENSE | 99 + .../LICENSE_AMSFONTS | 240 + .../matplotlib-3.5.0.dist-info/LICENSE_BAKOMA | 40 + .../LICENSE_CARLOGO | 45 + .../LICENSE_COLORBREWER | 38 + .../LICENSE_JSXTOOLS_RESIZE_OBSERVER | 108 + .../matplotlib-3.5.0.dist-info/LICENSE_QHULL | 39 + .../LICENSE_QT4_EDITOR | 30 + .../LICENSE_SOLARIZED | 20 + .../matplotlib-3.5.0.dist-info/LICENSE_STIX | 71 + .../matplotlib-3.5.0.dist-info/LICENSE_YORICK | 49 + .../matplotlib-3.5.0.dist-info/METADATA | 169 + .../matplotlib-3.5.0.dist-info/RECORD | 815 ++ .../matplotlib-3.5.0.dist-info/REQUESTED | 0 .../matplotlib-3.5.0.dist-info/WHEEL | 6 + .../namespace_packages.txt | 1 + .../matplotlib-3.5.0.dist-info/top_level.txt | 3 + .../site-packages/matplotlib/__init__.py | 1452 +++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 41879 bytes .../_animation_data.cpython-39.pyc | Bin 0 -> 8055 bytes .../_blocking_input.cpython-39.pyc | Bin 0 -> 1362 bytes .../matplotlib/__pycache__/_cm.cpython-39.pyc | Bin 0 -> 29690 bytes .../__pycache__/_cm_listed.cpython-39.pyc | Bin 0 -> 79970 bytes .../__pycache__/_color_data.cpython-39.pyc | Bin 0 -> 29925 bytes .../_constrained_layout.cpython-39.pyc | Bin 0 -> 15123 bytes .../__pycache__/_enums.cpython-39.pyc | Bin 0 -> 7268 bytes .../_internal_utils.cpython-39.pyc | Bin 0 -> 2311 bytes .../__pycache__/_layoutgrid.cpython-39.pyc | Bin 0 -> 16638 bytes .../__pycache__/_mathtext.cpython-39.pyc | Bin 0 -> 76525 bytes .../__pycache__/_mathtext_data.cpython-39.pyc | Bin 0 -> 27540 bytes .../__pycache__/_pylab_helpers.cpython-39.pyc | Bin 0 -> 5199 bytes .../__pycache__/_text_helpers.cpython-39.pyc | Bin 0 -> 2321 bytes .../__pycache__/_version.cpython-39.pyc | Bin 0 -> 233 bytes .../matplotlib/__pycache__/afm.cpython-39.pyc | Bin 0 -> 15211 bytes .../__pycache__/animation.cpython-39.pyc | Bin 0 -> 51404 bytes .../__pycache__/artist.cpython-39.pyc | Bin 0 -> 54305 bytes .../__pycache__/axis.cpython-39.pyc | Bin 0 -> 74110 bytes .../__pycache__/backend_bases.cpython-39.pyc | Bin 0 -> 115218 bytes .../backend_managers.cpython-39.pyc | Bin 0 -> 12394 bytes .../__pycache__/backend_tools.cpython-39.pyc | Bin 0 -> 31543 bytes .../__pycache__/bezier.cpython-39.pyc | Bin 0 -> 15273 bytes .../__pycache__/blocking_input.cpython-39.pyc | Bin 0 -> 11631 bytes .../__pycache__/category.cpython-39.pyc | Bin 0 -> 8210 bytes .../matplotlib/__pycache__/cm.cpython-39.pyc | Bin 0 -> 20348 bytes .../__pycache__/collections.cpython-39.pyc | Bin 0 -> 73338 bytes .../__pycache__/colorbar.cpython-39.pyc | Bin 0 -> 46542 bytes .../__pycache__/colors.cpython-39.pyc | Bin 0 -> 79619 bytes .../__pycache__/container.cpython-39.pyc | Bin 0 -> 5640 bytes .../__pycache__/contour.cpython-39.pyc | Bin 0 -> 53711 bytes .../__pycache__/dates.cpython-39.pyc | Bin 0 -> 57799 bytes .../__pycache__/docstring.cpython-39.pyc | Bin 0 -> 4223 bytes .../__pycache__/dviread.cpython-39.pyc | Bin 0 -> 34823 bytes .../__pycache__/figure.cpython-39.pyc | Bin 0 -> 102622 bytes .../__pycache__/font_manager.cpython-39.pyc | Bin 0 -> 41369 bytes .../fontconfig_pattern.cpython-39.pyc | Bin 0 -> 5851 bytes .../__pycache__/gridspec.cpython-39.pyc | Bin 0 -> 25673 bytes .../__pycache__/hatch.cpython-39.pyc | Bin 0 -> 7657 bytes .../__pycache__/image.cpython-39.pyc | Bin 0 -> 50688 bytes .../__pycache__/legend.cpython-39.pyc | Bin 0 -> 36924 bytes .../__pycache__/legend_handler.cpython-39.pyc | Bin 0 -> 24484 bytes .../__pycache__/lines.cpython-39.pyc | Bin 0 -> 41359 bytes .../__pycache__/markers.cpython-39.pyc | Bin 0 -> 27865 bytes .../__pycache__/mathtext.cpython-39.pyc | Bin 0 -> 20552 bytes .../__pycache__/mlab.cpython-39.pyc | Bin 0 -> 25864 bytes .../__pycache__/offsetbox.cpython-39.pyc | Bin 0 -> 52850 bytes .../__pycache__/patches.cpython-39.pyc | Bin 0 -> 139360 bytes .../__pycache__/path.cpython-39.pyc | Bin 0 -> 34018 bytes .../__pycache__/patheffects.cpython-39.pyc | Bin 0 -> 15717 bytes .../__pycache__/pylab.cpython-39.pyc | Bin 0 -> 1887 bytes .../__pycache__/pyplot.cpython-39.pyc | Bin 0 -> 90695 bytes .../__pycache__/quiver.cpython-39.pyc | Bin 0 -> 36759 bytes .../__pycache__/rcsetup.cpython-39.pyc | Bin 0 -> 30162 bytes .../__pycache__/sankey.cpython-39.pyc | Bin 0 -> 22671 bytes .../__pycache__/scale.cpython-39.pyc | Bin 0 -> 22845 bytes .../__pycache__/spines.cpython-39.pyc | Bin 0 -> 17988 bytes .../__pycache__/stackplot.cpython-39.pyc | Bin 0 -> 3553 bytes .../__pycache__/streamplot.cpython-39.pyc | Bin 0 -> 19416 bytes .../__pycache__/table.cpython-39.pyc | Bin 0 -> 22863 bytes .../__pycache__/texmanager.cpython-39.pyc | Bin 0 -> 10510 bytes .../__pycache__/text.cpython-39.pyc | Bin 0 -> 56459 bytes .../__pycache__/textpath.cpython-39.pyc | Bin 0 -> 11510 bytes .../__pycache__/ticker.cpython-39.pyc | Bin 0 -> 85016 bytes .../__pycache__/tight_bbox.cpython-39.pyc | Bin 0 -> 2650 bytes .../__pycache__/tight_layout.cpython-39.pyc | Bin 0 -> 10712 bytes .../__pycache__/transforms.cpython-39.pyc | Bin 0 -> 96072 bytes .../__pycache__/type1font.cpython-39.pyc | Bin 0 -> 12010 bytes .../__pycache__/units.cpython-39.pyc | Bin 0 -> 6843 bytes .../__pycache__/widgets.cpython-39.pyc | Bin 0 -> 102450 bytes .../matplotlib/_animation_data.py | 262 + .../site-packages/matplotlib/_api/__init__.py | 299 + .../_api/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 10319 bytes .../__pycache__/deprecation.cpython-39.pyc | Bin 0 -> 17394 bytes .../matplotlib/_api/deprecation.py | 512 ++ .../matplotlib/_blocking_input.py | 30 + ...ernal_utils.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 23679 bytes .../python3.9/site-packages/matplotlib/_cm.py | 1440 +++ .../site-packages/matplotlib/_cm_listed.py | 2071 +++++ .../site-packages/matplotlib/_color_data.py | 1141 +++ .../matplotlib/_constrained_layout.py | 713 ++ .../_contour.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 699121 bytes .../site-packages/matplotlib/_enums.py | 183 + .../_image.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 2402280 bytes .../matplotlib/_internal_utils.py | 64 + .../site-packages/matplotlib/_layoutgrid.py | 563 ++ .../site-packages/matplotlib/_mathtext.py | 2942 ++++++ .../matplotlib/_mathtext_data.py | 1394 +++ .../_path.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 1694852 bytes .../matplotlib/_pylab_helpers.py | 140 + .../_qhull.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 1931435 bytes .../site-packages/matplotlib/_text_helpers.py | 68 + .../_tri.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 1271643 bytes .../_ttconv.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 354070 bytes .../site-packages/matplotlib/_version.py | 5 + .../python3.9/site-packages/matplotlib/afm.py | 532 ++ .../site-packages/matplotlib/animation.py | 1741 ++++ .../site-packages/matplotlib/artist.py | 1753 ++++ .../site-packages/matplotlib/axes/__init__.py | 2 + .../axes/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 226 bytes .../axes/__pycache__/_axes.cpython-39.pyc | Bin 0 -> 247715 bytes .../axes/__pycache__/_base.cpython-39.pyc | Bin 0 -> 143318 bytes .../_secondary_axes.cpython-39.pyc | Bin 0 -> 8743 bytes .../axes/__pycache__/_subplots.cpython-39.pyc | Bin 0 -> 6834 bytes .../site-packages/matplotlib/axes/_axes.py | 8082 +++++++++++++++++ .../site-packages/matplotlib/axes/_base.py | 4745 ++++++++++ .../matplotlib/axes/_secondary_axes.py | 296 + .../matplotlib/axes/_subplots.py | 170 + .../site-packages/matplotlib/axis.py | 2533 ++++++ .../site-packages/matplotlib/backend_bases.py | 3559 ++++++++ .../matplotlib/backend_managers.py | 435 + .../site-packages/matplotlib/backend_tools.py | 1003 ++ .../matplotlib/backends/__init__.py | 2 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 187 bytes .../__pycache__/_backend_gtk.cpython-39.pyc | Bin 0 -> 6377 bytes .../_backend_pdf_ps.cpython-39.pyc | Bin 0 -> 5035 bytes .../__pycache__/_backend_tk.cpython-39.pyc | Bin 0 -> 31527 bytes .../__pycache__/backend_agg.cpython-39.pyc | Bin 0 -> 19025 bytes .../__pycache__/backend_cairo.cpython-39.pyc | Bin 0 -> 16143 bytes .../__pycache__/backend_gtk3.cpython-39.pyc | Bin 0 -> 24012 bytes .../backend_gtk3agg.cpython-39.pyc | Bin 0 -> 2864 bytes .../backend_gtk3cairo.cpython-39.pyc | Bin 0 -> 1910 bytes .../__pycache__/backend_gtk4.cpython-39.pyc | Bin 0 -> 21889 bytes .../backend_gtk4agg.cpython-39.pyc | Bin 0 -> 2172 bytes .../backend_gtk4cairo.cpython-39.pyc | Bin 0 -> 1937 bytes .../__pycache__/backend_macosx.cpython-39.pyc | Bin 0 -> 5425 bytes .../__pycache__/backend_mixed.cpython-39.pyc | Bin 0 -> 3531 bytes .../__pycache__/backend_nbagg.cpython-39.pyc | Bin 0 -> 8707 bytes .../__pycache__/backend_pdf.cpython-39.pyc | Bin 0 -> 71581 bytes .../__pycache__/backend_pgf.cpython-39.pyc | Bin 0 -> 32863 bytes .../__pycache__/backend_ps.cpython-39.pyc | Bin 0 -> 37418 bytes .../__pycache__/backend_qt.cpython-39.pyc | Bin 0 -> 34211 bytes .../__pycache__/backend_qt5.cpython-39.pyc | Bin 0 -> 1005 bytes .../__pycache__/backend_qt5agg.cpython-39.pyc | Bin 0 -> 625 bytes .../backend_qt5cairo.cpython-39.pyc | Bin 0 -> 538 bytes .../__pycache__/backend_qtagg.cpython-39.pyc | Bin 0 -> 2730 bytes .../backend_qtcairo.cpython-39.pyc | Bin 0 -> 2360 bytes .../__pycache__/backend_svg.cpython-39.pyc | Bin 0 -> 34192 bytes .../backend_template.cpython-39.pyc | Bin 0 -> 8296 bytes .../__pycache__/backend_tkagg.cpython-39.pyc | Bin 0 -> 1156 bytes .../backend_tkcairo.cpython-39.pyc | Bin 0 -> 1572 bytes .../__pycache__/backend_webagg.cpython-39.pyc | Bin 0 -> 10117 bytes .../backend_webagg_core.cpython-39.pyc | Bin 0 -> 17422 bytes .../__pycache__/backend_wx.cpython-39.pyc | Bin 0 -> 44664 bytes .../__pycache__/backend_wxagg.cpython-39.pyc | Bin 0 -> 2929 bytes .../backend_wxcairo.cpython-39.pyc | Bin 0 -> 2263 bytes .../__pycache__/qt_compat.cpython-39.pyc | Bin 0 -> 7684 bytes ...backend_agg.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 3759204 bytes .../matplotlib/backends/_backend_gtk.py | 181 + .../matplotlib/backends/_backend_pdf_ps.py | 143 + .../matplotlib/backends/_backend_tk.py | 960 ++ .../_tkagg.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 36747 bytes .../matplotlib/backends/backend_agg.py | 603 ++ .../matplotlib/backends/backend_cairo.py | 536 ++ .../matplotlib/backends/backend_gtk3.py | 750 ++ .../matplotlib/backends/backend_gtk3agg.py | 86 + .../matplotlib/backends/backend_gtk3cairo.py | 39 + .../matplotlib/backends/backend_gtk4.py | 698 ++ .../matplotlib/backends/backend_gtk4agg.py | 54 + .../matplotlib/backends/backend_gtk4cairo.py | 40 + .../matplotlib/backends/backend_macosx.py | 131 + .../matplotlib/backends/backend_mixed.py | 119 + .../matplotlib/backends/backend_nbagg.py | 268 + .../matplotlib/backends/backend_pdf.py | 2805 ++++++ .../matplotlib/backends/backend_pgf.py | 1077 +++ .../matplotlib/backends/backend_ps.py | 1390 +++ .../matplotlib/backends/backend_qt.py | 1014 +++ .../matplotlib/backends/backend_qt5.py | 16 + .../matplotlib/backends/backend_qt5agg.py | 13 + .../matplotlib/backends/backend_qt5cairo.py | 10 + .../matplotlib/backends/backend_qtagg.py | 91 + .../matplotlib/backends/backend_qtcairo.py | 53 + .../matplotlib/backends/backend_svg.py | 1362 +++ .../matplotlib/backends/backend_template.py | 245 + .../matplotlib/backends/backend_tkagg.py | 19 + .../matplotlib/backends/backend_tkcairo.py | 31 + .../matplotlib/backends/backend_webagg.py | 320 + .../backends/backend_webagg_core.py | 547 ++ .../matplotlib/backends/backend_wx.py | 1422 +++ .../matplotlib/backends/backend_wxagg.py | 92 + .../matplotlib/backends/backend_wxcairo.py | 48 + .../matplotlib/backends/qt_compat.py | 270 + .../matplotlib/backends/qt_editor/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 197 bytes .../__pycache__/_formlayout.cpython-39.pyc | Bin 0 -> 18585 bytes .../__pycache__/figureoptions.cpython-39.pyc | Bin 0 -> 7421 bytes .../backends/qt_editor/_formlayout.py | 587 ++ .../backends/qt_editor/figureoptions.py | 266 + .../backends/web_backend/.eslintrc.js | 32 + .../backends/web_backend/.prettierignore | 7 + .../backends/web_backend/.prettierrc | 11 + .../backends/web_backend/all_figures.html | 49 + .../backends/web_backend/css/boilerplate.css | 77 + .../backends/web_backend/css/fbm.css | 97 + .../backends/web_backend/css/mpl.css | 84 + .../backends/web_backend/css/page.css | 83 + .../web_backend/ipython_inline_figure.html | 34 + .../matplotlib/backends/web_backend/js/mpl.js | 675 ++ .../backends/web_backend/js/mpl_tornado.js | 8 + .../backends/web_backend/js/nbagg_mpl.js | 275 + .../backends/web_backend/nbagg_uat.ipynb | 631 ++ .../backends/web_backend/package.json | 18 + .../backends/web_backend/single_figure.html | 37 + .../site-packages/matplotlib/bezier.py | 595 ++ .../matplotlib/blocking_input.py | 354 + .../site-packages/matplotlib/category.py | 243 + .../matplotlib/cbook/__init__.py | 2307 +++++ .../cbook/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 66588 bytes .../__pycache__/deprecation.cpython-39.pyc | Bin 0 -> 480 bytes .../matplotlib/cbook/deprecation.py | 8 + .../python3.9/site-packages/matplotlib/cm.py | 619 ++ .../site-packages/matplotlib/collections.py | 2214 +++++ .../site-packages/matplotlib/colorbar.py | 1605 ++++ .../site-packages/matplotlib/colors.py | 2459 +++++ .../site-packages/matplotlib/container.py | 142 + .../site-packages/matplotlib/contour.py | 1794 ++++ .../site-packages/matplotlib/dates.py | 1924 ++++ .../site-packages/matplotlib/docstring.py | 101 + .../site-packages/matplotlib/dviread.py | 1097 +++ .../site-packages/matplotlib/figure.py | 3274 +++++++ .../site-packages/matplotlib/font_manager.py | 1448 +++ .../matplotlib/fontconfig_pattern.py | 209 + .../ft2font.cpython-39-x86_64-linux-gnu.so | Bin 0 -> 4107406 bytes .../site-packages/matplotlib/gridspec.py | 752 ++ .../site-packages/matplotlib/hatch.py | 225 + .../site-packages/matplotlib/image.py | 1804 ++++ .../site-packages/matplotlib/legend.py | 1242 +++ .../matplotlib/legend_handler.py | 835 ++ .../site-packages/matplotlib/lines.py | 1528 ++++ .../site-packages/matplotlib/markers.py | 839 ++ .../site-packages/matplotlib/mathtext.py | 605 ++ .../site-packages/matplotlib/mlab.py | 986 ++ .../matplotlib/mpl-data/fonts/afm/cmex10.afm | 220 + .../matplotlib/mpl-data/fonts/afm/cmmi10.afm | 326 + .../matplotlib/mpl-data/fonts/afm/cmr10.afm | 343 + .../matplotlib/mpl-data/fonts/afm/cmsy10.afm | 195 + .../matplotlib/mpl-data/fonts/afm/cmtt10.afm | 156 + .../matplotlib/mpl-data/fonts/afm/pagd8a.afm | 576 ++ .../matplotlib/mpl-data/fonts/afm/pagdo8a.afm | 576 ++ .../matplotlib/mpl-data/fonts/afm/pagk8a.afm | 573 ++ .../matplotlib/mpl-data/fonts/afm/pagko8a.afm | 573 ++ .../matplotlib/mpl-data/fonts/afm/pbkd8a.afm | 415 + .../matplotlib/mpl-data/fonts/afm/pbkdi8a.afm | 417 + .../matplotlib/mpl-data/fonts/afm/pbkl8a.afm | 407 + .../matplotlib/mpl-data/fonts/afm/pbkli8a.afm | 410 + .../matplotlib/mpl-data/fonts/afm/pcrb8a.afm | 344 + .../matplotlib/mpl-data/fonts/afm/pcrbo8a.afm | 344 + .../matplotlib/mpl-data/fonts/afm/pcrr8a.afm | 344 + .../matplotlib/mpl-data/fonts/afm/pcrro8a.afm | 344 + .../matplotlib/mpl-data/fonts/afm/phvb8a.afm | 570 ++ .../matplotlib/mpl-data/fonts/afm/phvb8an.afm | 570 ++ .../matplotlib/mpl-data/fonts/afm/phvbo8a.afm | 570 ++ .../mpl-data/fonts/afm/phvbo8an.afm | 570 ++ .../matplotlib/mpl-data/fonts/afm/phvl8a.afm | 445 + .../matplotlib/mpl-data/fonts/afm/phvlo8a.afm | 445 + .../matplotlib/mpl-data/fonts/afm/phvr8a.afm | 612 ++ .../matplotlib/mpl-data/fonts/afm/phvr8an.afm | 612 ++ .../matplotlib/mpl-data/fonts/afm/phvro8a.afm | 612 ++ .../mpl-data/fonts/afm/phvro8an.afm | 612 ++ .../matplotlib/mpl-data/fonts/afm/pncb8a.afm | 472 + .../matplotlib/mpl-data/fonts/afm/pncbi8a.afm | 602 ++ .../matplotlib/mpl-data/fonts/afm/pncr8a.afm | 524 ++ .../matplotlib/mpl-data/fonts/afm/pncri8a.afm | 536 ++ .../matplotlib/mpl-data/fonts/afm/pplb8a.afm | 434 + .../matplotlib/mpl-data/fonts/afm/pplbi8a.afm | 441 + .../matplotlib/mpl-data/fonts/afm/pplr8a.afm | 445 + .../matplotlib/mpl-data/fonts/afm/pplri8a.afm | 439 + .../matplotlib/mpl-data/fonts/afm/psyr.afm | 209 + .../matplotlib/mpl-data/fonts/afm/ptmb8a.afm | 648 ++ .../matplotlib/mpl-data/fonts/afm/ptmbi8a.afm | 648 ++ .../matplotlib/mpl-data/fonts/afm/ptmr8a.afm | 648 ++ .../matplotlib/mpl-data/fonts/afm/ptmri8a.afm | 648 ++ .../matplotlib/mpl-data/fonts/afm/putb8a.afm | 1005 ++ .../matplotlib/mpl-data/fonts/afm/putbi8a.afm | 1017 +++ .../matplotlib/mpl-data/fonts/afm/putr8a.afm | 1029 +++ .../matplotlib/mpl-data/fonts/afm/putri8a.afm | 1008 ++ .../matplotlib/mpl-data/fonts/afm/pzcmi8a.afm | 480 + .../matplotlib/mpl-data/fonts/afm/pzdr.afm | 222 + .../fonts/pdfcorefonts/Courier-Bold.afm | 342 + .../pdfcorefonts/Courier-BoldOblique.afm | 342 + .../fonts/pdfcorefonts/Courier-Oblique.afm | 342 + .../mpl-data/fonts/pdfcorefonts/Courier.afm | 342 + .../fonts/pdfcorefonts/Helvetica-Bold.afm | 2827 ++++++ .../pdfcorefonts/Helvetica-BoldOblique.afm | 2827 ++++++ .../fonts/pdfcorefonts/Helvetica-Oblique.afm | 3051 +++++++ .../mpl-data/fonts/pdfcorefonts/Helvetica.afm | 3051 +++++++ .../mpl-data/fonts/pdfcorefonts/Symbol.afm | 213 + .../fonts/pdfcorefonts/Times-Bold.afm | 2588 ++++++ .../fonts/pdfcorefonts/Times-BoldItalic.afm | 2384 +++++ .../fonts/pdfcorefonts/Times-Italic.afm | 2667 ++++++ .../fonts/pdfcorefonts/Times-Roman.afm | 2419 +++++ .../fonts/pdfcorefonts/ZapfDingbats.afm | 225 + .../mpl-data/fonts/pdfcorefonts/readme.txt | 15 + .../mpl-data/fonts/ttf/DejaVuSans-Bold.ttf | Bin 0 -> 704128 bytes .../fonts/ttf/DejaVuSans-BoldOblique.ttf | Bin 0 -> 641720 bytes .../mpl-data/fonts/ttf/DejaVuSans-Oblique.ttf | Bin 0 -> 633840 bytes .../mpl-data/fonts/ttf/DejaVuSans.ttf | Bin 0 -> 756072 bytes .../mpl-data/fonts/ttf/DejaVuSansDisplay.ttf | Bin 0 -> 25712 bytes .../fonts/ttf/DejaVuSansMono-Bold.ttf | Bin 0 -> 331536 bytes .../fonts/ttf/DejaVuSansMono-BoldOblique.ttf | Bin 0 -> 253116 bytes .../fonts/ttf/DejaVuSansMono-Oblique.ttf | Bin 0 -> 251472 bytes .../mpl-data/fonts/ttf/DejaVuSansMono.ttf | Bin 0 -> 340240 bytes .../mpl-data/fonts/ttf/DejaVuSerif-Bold.ttf | Bin 0 -> 355692 bytes .../fonts/ttf/DejaVuSerif-BoldItalic.ttf | Bin 0 -> 347064 bytes .../mpl-data/fonts/ttf/DejaVuSerif-Italic.ttf | Bin 0 -> 345612 bytes .../mpl-data/fonts/ttf/DejaVuSerif.ttf | Bin 0 -> 379740 bytes .../mpl-data/fonts/ttf/DejaVuSerifDisplay.ttf | Bin 0 -> 14300 bytes .../mpl-data/fonts/ttf/LICENSE_DEJAVU | 99 + .../mpl-data/fonts/ttf/LICENSE_STIX | 124 + .../mpl-data/fonts/ttf/STIXGeneral.ttf | Bin 0 -> 448228 bytes .../mpl-data/fonts/ttf/STIXGeneralBol.ttf | Bin 0 -> 237360 bytes .../mpl-data/fonts/ttf/STIXGeneralBolIta.ttf | Bin 0 -> 181152 bytes .../mpl-data/fonts/ttf/STIXGeneralItalic.ttf | Bin 0 -> 175040 bytes .../mpl-data/fonts/ttf/STIXNonUni.ttf | Bin 0 -> 59108 bytes .../mpl-data/fonts/ttf/STIXNonUniBol.ttf | Bin 0 -> 30512 bytes .../mpl-data/fonts/ttf/STIXNonUniBolIta.ttf | Bin 0 -> 41272 bytes .../mpl-data/fonts/ttf/STIXNonUniIta.ttf | Bin 0 -> 46752 bytes .../mpl-data/fonts/ttf/STIXSizFiveSymReg.ttf | Bin 0 -> 13656 bytes .../mpl-data/fonts/ttf/STIXSizFourSymBol.ttf | Bin 0 -> 12228 bytes .../mpl-data/fonts/ttf/STIXSizFourSymReg.ttf | Bin 0 -> 15972 bytes .../mpl-data/fonts/ttf/STIXSizOneSymBol.ttf | Bin 0 -> 12556 bytes .../mpl-data/fonts/ttf/STIXSizOneSymReg.ttf | Bin 0 -> 19760 bytes .../mpl-data/fonts/ttf/STIXSizThreeSymBol.ttf | Bin 0 -> 12192 bytes .../mpl-data/fonts/ttf/STIXSizThreeSymReg.ttf | Bin 0 -> 15836 bytes .../mpl-data/fonts/ttf/STIXSizTwoSymBol.ttf | Bin 0 -> 12116 bytes .../mpl-data/fonts/ttf/STIXSizTwoSymReg.ttf | Bin 0 -> 15704 bytes .../matplotlib/mpl-data/fonts/ttf/cmb10.ttf | Bin 0 -> 25680 bytes .../matplotlib/mpl-data/fonts/ttf/cmex10.ttf | Bin 0 -> 21092 bytes .../matplotlib/mpl-data/fonts/ttf/cmmi10.ttf | Bin 0 -> 32560 bytes .../matplotlib/mpl-data/fonts/ttf/cmr10.ttf | Bin 0 -> 26348 bytes .../matplotlib/mpl-data/fonts/ttf/cmss10.ttf | Bin 0 -> 20376 bytes .../matplotlib/mpl-data/fonts/ttf/cmsy10.ttf | Bin 0 -> 29396 bytes .../matplotlib/mpl-data/fonts/ttf/cmtt10.ttf | Bin 0 -> 28136 bytes .../mpl-data/images/back-symbolic.svg | 46 + .../matplotlib/mpl-data/images/back.pdf | Bin 0 -> 1623 bytes .../matplotlib/mpl-data/images/back.png | Bin 0 -> 380 bytes .../matplotlib/mpl-data/images/back.svg | 46 + .../matplotlib/mpl-data/images/back_large.png | Bin 0 -> 620 bytes .../mpl-data/images/filesave-symbolic.svg | 68 + .../matplotlib/mpl-data/images/filesave.pdf | 70 + .../matplotlib/mpl-data/images/filesave.png | Bin 0 -> 458 bytes .../matplotlib/mpl-data/images/filesave.svg | 68 + .../mpl-data/images/filesave_large.png | Bin 0 -> 720 bytes .../mpl-data/images/forward-symbolic.svg | 46 + .../matplotlib/mpl-data/images/forward.pdf | Bin 0 -> 1630 bytes .../matplotlib/mpl-data/images/forward.png | Bin 0 -> 357 bytes .../matplotlib/mpl-data/images/forward.svg | 46 + .../mpl-data/images/forward_large.png | Bin 0 -> 593 bytes .../matplotlib/mpl-data/images/hand.pdf | Bin 0 -> 4172 bytes .../matplotlib/mpl-data/images/hand.png | Bin 0 -> 979 bytes .../matplotlib/mpl-data/images/hand.svg | 130 + .../mpl-data/images/help-symbolic.svg | 52 + .../matplotlib/mpl-data/images/help.pdf | 68 + .../matplotlib/mpl-data/images/help.png | Bin 0 -> 472 bytes .../matplotlib/mpl-data/images/help.svg | 52 + .../matplotlib/mpl-data/images/help_large.png | Bin 0 -> 747 bytes .../mpl-data/images/home-symbolic.svg | 59 + .../matplotlib/mpl-data/images/home.pdf | Bin 0 -> 1737 bytes .../matplotlib/mpl-data/images/home.png | Bin 0 -> 468 bytes .../matplotlib/mpl-data/images/home.svg | 59 + .../matplotlib/mpl-data/images/home_large.png | Bin 0 -> 790 bytes .../matplotlib/mpl-data/images/matplotlib.pdf | Bin 0 -> 22852 bytes .../matplotlib/mpl-data/images/matplotlib.png | Bin 0 -> 1283 bytes .../matplotlib/mpl-data/images/matplotlib.svg | 3171 +++++++ .../mpl-data/images/matplotlib_128.ppm | 4 + .../mpl-data/images/matplotlib_large.png | Bin 0 -> 3088 bytes .../mpl-data/images/move-symbolic.svg | 73 + .../matplotlib/mpl-data/images/move.pdf | Bin 0 -> 1867 bytes .../matplotlib/mpl-data/images/move.png | Bin 0 -> 481 bytes .../matplotlib/mpl-data/images/move.svg | 73 + .../matplotlib/mpl-data/images/move_large.png | Bin 0 -> 767 bytes .../mpl-data/images/qt4_editor_options.pdf | Bin 0 -> 1568 bytes .../mpl-data/images/qt4_editor_options.png | Bin 0 -> 380 bytes .../mpl-data/images/qt4_editor_options.svg | 48 + .../images/qt4_editor_options_large.png | Bin 0 -> 619 bytes .../mpl-data/images/subplots-symbolic.svg | 81 + .../matplotlib/mpl-data/images/subplots.pdf | Bin 0 -> 1714 bytes .../matplotlib/mpl-data/images/subplots.png | Bin 0 -> 445 bytes .../matplotlib/mpl-data/images/subplots.svg | 81 + .../mpl-data/images/subplots_large.png | Bin 0 -> 662 bytes .../mpl-data/images/zoom_to_rect-symbolic.svg | 40 + .../mpl-data/images/zoom_to_rect.pdf | 68 + .../mpl-data/images/zoom_to_rect.png | Bin 0 -> 530 bytes .../mpl-data/images/zoom_to_rect.svg | 40 + .../mpl-data/images/zoom_to_rect_large.png | Bin 0 -> 1016 bytes .../matplotlib/mpl-data/kpsewhich.lua | 3 + .../matplotlib/mpl-data/matplotlibrc | 766 ++ .../plot_directive/plot_directive.css | 16 + .../sample_data/Minduka_Present_Blue_Pack.png | Bin 0 -> 13634 bytes .../mpl-data/sample_data/README.txt | 2 + .../axes_grid/bivariate_normal.npy | Bin 0 -> 1880 bytes .../mpl-data/sample_data/data_x_x2_x3.csv | 11 + .../matplotlib/mpl-data/sample_data/eeg.dat | Bin 0 -> 25600 bytes .../mpl-data/sample_data/embedding_in_wx3.xrc | 65 + .../matplotlib/mpl-data/sample_data/goog.npz | Bin 0 -> 22845 bytes .../mpl-data/sample_data/grace_hopper.jpg | Bin 0 -> 61306 bytes .../sample_data/jacksboro_fault_dem.npz | Bin 0 -> 174061 bytes .../matplotlib/mpl-data/sample_data/logo2.png | Bin 0 -> 33541 bytes .../mpl-data/sample_data/membrane.dat | Bin 0 -> 48000 bytes .../matplotlib/mpl-data/sample_data/msft.csv | 66 + .../percent_bachelors_degrees_women_usa.csv | 43 + .../mpl-data/sample_data/s1045.ima.gz | Bin 0 -> 33229 bytes .../mpl-data/sample_data/topobathy.npz | Bin 0 -> 45224 bytes .../stylelib/Solarize_Light2.mplstyle | 53 + .../stylelib/_classic_test_patch.mplstyle | 6 + .../stylelib/_mpl-gallery-nogrid.mplstyle | 19 + .../mpl-data/stylelib/_mpl-gallery.mplstyle | 19 + .../matplotlib/mpl-data/stylelib/bmh.mplstyle | 29 + .../mpl-data/stylelib/classic.mplstyle | 490 + .../stylelib/dark_background.mplstyle | 29 + .../mpl-data/stylelib/fast.mplstyle | 11 + .../stylelib/fivethirtyeight.mplstyle | 40 + .../mpl-data/stylelib/ggplot.mplstyle | 39 + .../mpl-data/stylelib/grayscale.mplstyle | 29 + .../mpl-data/stylelib/seaborn-bright.mplstyle | 3 + .../stylelib/seaborn-colorblind.mplstyle | 3 + .../stylelib/seaborn-dark-palette.mplstyle | 3 + .../mpl-data/stylelib/seaborn-dark.mplstyle | 30 + .../stylelib/seaborn-darkgrid.mplstyle | 30 + .../mpl-data/stylelib/seaborn-deep.mplstyle | 3 + .../mpl-data/stylelib/seaborn-muted.mplstyle | 3 + .../stylelib/seaborn-notebook.mplstyle | 21 + .../mpl-data/stylelib/seaborn-paper.mplstyle | 21 + .../mpl-data/stylelib/seaborn-pastel.mplstyle | 3 + .../mpl-data/stylelib/seaborn-poster.mplstyle | 21 + .../mpl-data/stylelib/seaborn-talk.mplstyle | 21 + .../mpl-data/stylelib/seaborn-ticks.mplstyle | 30 + .../mpl-data/stylelib/seaborn-white.mplstyle | 30 + .../stylelib/seaborn-whitegrid.mplstyle | 30 + .../mpl-data/stylelib/seaborn.mplstyle | 57 + .../stylelib/tableau-colorblind10.mplstyle | 3 + .../site-packages/matplotlib/offsetbox.py | 1685 ++++ .../site-packages/matplotlib/patches.py | 4745 ++++++++++ .../site-packages/matplotlib/path.py | 1074 +++ .../site-packages/matplotlib/patheffects.py | 517 ++ .../matplotlib/projections/__init__.py | 114 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 4513 bytes .../__pycache__/geo.cpython-39.pyc | Bin 0 -> 18624 bytes .../__pycache__/polar.cpython-39.pyc | Bin 0 -> 43942 bytes .../matplotlib/projections/geo.py | 508 ++ .../matplotlib/projections/polar.py | 1500 +++ .../site-packages/matplotlib/pylab.py | 51 + .../site-packages/matplotlib/pyplot.py | 3080 +++++++ .../site-packages/matplotlib/quiver.py | 1226 +++ .../site-packages/matplotlib/rcsetup.py | 1245 +++ .../site-packages/matplotlib/sankey.py | 829 ++ .../site-packages/matplotlib/scale.py | 636 ++ .../matplotlib/sphinxext/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 188 bytes .../__pycache__/mathmpl.cpython-39.pyc | Bin 0 -> 7288 bytes .../__pycache__/plot_directive.cpython-39.pyc | Bin 0 -> 22611 bytes .../matplotlib/sphinxext/mathmpl.py | 232 + .../matplotlib/sphinxext/plot_directive.py | 876 ++ .../site-packages/matplotlib/spines.py | 586 ++ .../site-packages/matplotlib/stackplot.py | 124 + .../site-packages/matplotlib/streamplot.py | 702 ++ .../matplotlib/style/__init__.py | 1 + .../style/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 297 bytes .../style/__pycache__/core.cpython-39.pyc | Bin 0 -> 8201 bytes .../site-packages/matplotlib/style/core.py | 233 + .../site-packages/matplotlib/table.py | 824 ++ .../matplotlib/testing/__init__.py | 81 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 2339 bytes .../__pycache__/compare.cpython-39.pyc | Bin 0 -> 13775 bytes .../__pycache__/conftest.cpython-39.pyc | Bin 0 -> 3612 bytes .../__pycache__/decorators.cpython-39.pyc | Bin 0 -> 16087 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 0 -> 466 bytes .../__pycache__/widgets.cpython-39.pyc | Bin 0 -> 2743 bytes .../matplotlib/testing/compare.py | 497 + .../matplotlib/testing/conftest.py | 127 + .../matplotlib/testing/decorators.py | 486 + .../matplotlib/testing/exceptions.py | 4 + .../matplotlib/testing/jpl_units/Duration.py | 138 + .../matplotlib/testing/jpl_units/Epoch.py | 211 + .../testing/jpl_units/EpochConverter.py | 97 + .../testing/jpl_units/StrConverter.py | 97 + .../matplotlib/testing/jpl_units/UnitDbl.py | 180 + .../testing/jpl_units/UnitDblConverter.py | 86 + .../testing/jpl_units/UnitDblFormatter.py | 28 + .../matplotlib/testing/jpl_units/__init__.py | 76 + .../__pycache__/Duration.cpython-39.pyc | Bin 0 -> 4662 bytes .../__pycache__/Epoch.cpython-39.pyc | Bin 0 -> 5481 bytes .../__pycache__/EpochConverter.cpython-39.pyc | Bin 0 -> 3406 bytes .../__pycache__/StrConverter.cpython-39.pyc | Bin 0 -> 2301 bytes .../__pycache__/UnitDbl.cpython-39.pyc | Bin 0 -> 5829 bytes .../UnitDblConverter.cpython-39.pyc | Bin 0 -> 2347 bytes .../UnitDblFormatter.cpython-39.pyc | Bin 0 -> 1141 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 2673 bytes .../matplotlib/testing/widgets.py | 85 + .../matplotlib/tests/__init__.py | 10 + .../tests/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 481 bytes .../tests/__pycache__/conftest.cpython-39.pyc | Bin 0 -> 322 bytes .../tests/__pycache__/test_afm.cpython-39.pyc | Bin 0 -> 3857 bytes .../tests/__pycache__/test_agg.cpython-39.pyc | Bin 0 -> 11514 bytes .../test_agg_filter.cpython-39.pyc | Bin 0 -> 1088 bytes .../__pycache__/test_animation.cpython-39.pyc | Bin 0 -> 11769 bytes .../tests/__pycache__/test_api.cpython-39.pyc | Bin 0 -> 3812 bytes .../test_arrow_patches.cpython-39.pyc | Bin 0 -> 5677 bytes .../__pycache__/test_artist.cpython-39.pyc | Bin 0 -> 11367 bytes .../__pycache__/test_axes.cpython-39.pyc | Bin 0 -> 218538 bytes .../test_backend_bases.cpython-39.pyc | Bin 0 -> 9437 bytes .../test_backend_cairo.cpython-39.pyc | Bin 0 -> 1471 bytes .../test_backend_gtk3.cpython-39.pyc | Bin 0 -> 1550 bytes .../test_backend_nbagg.cpython-39.pyc | Bin 0 -> 1192 bytes .../test_backend_pdf.cpython-39.pyc | Bin 0 -> 12053 bytes .../test_backend_pgf.cpython-39.pyc | Bin 0 -> 11111 bytes .../test_backend_ps.cpython-39.pyc | Bin 0 -> 8047 bytes .../test_backend_qt.cpython-39.pyc | Bin 0 -> 17634 bytes .../test_backend_svg.cpython-39.pyc | Bin 0 -> 14436 bytes .../test_backend_tk.cpython-39.pyc | Bin 0 -> 5843 bytes .../test_backend_tools.cpython-39.pyc | Bin 0 -> 692 bytes .../test_backend_webagg.cpython-39.pyc | Bin 0 -> 924 bytes .../test_backends_interactive.cpython-39.pyc | Bin 0 -> 8539 bytes .../__pycache__/test_basic.cpython-39.pyc | Bin 0 -> 1498 bytes .../test_bbox_tight.cpython-39.pyc | Bin 0 -> 4921 bytes .../__pycache__/test_category.cpython-39.pyc | Bin 0 -> 13864 bytes .../__pycache__/test_cbook.cpython-39.pyc | Bin 0 -> 26905 bytes .../test_collections.cpython-39.pyc | Bin 0 -> 32410 bytes .../__pycache__/test_colorbar.cpython-39.pyc | Bin 0 -> 24357 bytes .../__pycache__/test_colors.cpython-39.pyc | Bin 0 -> 43435 bytes .../test_compare_images.cpython-39.pyc | Bin 0 -> 1848 bytes .../test_constrainedlayout.cpython-39.pyc | Bin 0 -> 17484 bytes .../__pycache__/test_container.cpython-39.pyc | Bin 0 -> 785 bytes .../__pycache__/test_contour.cpython-39.pyc | Bin 0 -> 15761 bytes .../__pycache__/test_cycles.cpython-39.pyc | Bin 0 -> 7258 bytes .../__pycache__/test_dates.cpython-39.pyc | Bin 0 -> 39387 bytes .../test_determinism.cpython-39.pyc | Bin 0 -> 4231 bytes .../__pycache__/test_dviread.cpython-39.pyc | Bin 0 -> 2901 bytes .../__pycache__/test_figure.cpython-39.pyc | Bin 0 -> 36413 bytes .../test_font_manager.cpython-39.pyc | Bin 0 -> 8802 bytes .../test_fontconfig_pattern.cpython-39.pyc | Bin 0 -> 1580 bytes .../__pycache__/test_getattr.cpython-39.pyc | Bin 0 -> 1124 bytes .../__pycache__/test_gridspec.cpython-39.pyc | Bin 0 -> 1367 bytes .../__pycache__/test_image.cpython-39.pyc | Bin 0 -> 40409 bytes .../__pycache__/test_legend.cpython-39.pyc | Bin 0 -> 31003 bytes .../__pycache__/test_lines.cpython-39.pyc | Bin 0 -> 10765 bytes .../__pycache__/test_marker.cpython-39.pyc | Bin 0 -> 5023 bytes .../__pycache__/test_mathtext.cpython-39.pyc | Bin 0 -> 14490 bytes .../test_matplotlib.cpython-39.pyc | Bin 0 -> 3167 bytes .../__pycache__/test_mlab.cpython-39.pyc | Bin 0 -> 31948 bytes .../__pycache__/test_offsetbox.cpython-39.pyc | Bin 0 -> 8531 bytes .../__pycache__/test_patches.cpython-39.pyc | Bin 0 -> 19381 bytes .../__pycache__/test_path.cpython-39.pyc | Bin 0 -> 13839 bytes .../test_patheffects.cpython-39.pyc | Bin 0 -> 5958 bytes .../__pycache__/test_pickle.cpython-39.pyc | Bin 0 -> 6231 bytes .../tests/__pycache__/test_png.cpython-39.pyc | Bin 0 -> 1792 bytes .../__pycache__/test_polar.cpython-39.pyc | Bin 0 -> 13919 bytes .../test_preprocess_data.cpython-39.pyc | Bin 0 -> 9379 bytes .../__pycache__/test_pyplot.cpython-39.pyc | Bin 0 -> 8414 bytes .../__pycache__/test_quiver.cpython-39.pyc | Bin 0 -> 9270 bytes .../__pycache__/test_rcparams.cpython-39.pyc | Bin 0 -> 14568 bytes .../__pycache__/test_sankey.cpython-39.pyc | Bin 0 -> 1050 bytes .../__pycache__/test_scale.cpython-39.pyc | Bin 0 -> 6564 bytes .../test_simplification.cpython-39.pyc | Bin 0 -> 13827 bytes .../__pycache__/test_skew.cpython-39.pyc | Bin 0 -> 5473 bytes .../__pycache__/test_sphinxext.cpython-39.pyc | Bin 0 -> 4460 bytes .../__pycache__/test_spines.cpython-39.pyc | Bin 0 -> 4759 bytes .../test_streamplot.cpython-39.pyc | Bin 0 -> 5114 bytes .../__pycache__/test_style.cpython-39.pyc | Bin 0 -> 5721 bytes .../__pycache__/test_subplots.cpython-39.pyc | Bin 0 -> 6170 bytes .../__pycache__/test_table.cpython-39.pyc | Bin 0 -> 4731 bytes .../__pycache__/test_testing.cpython-39.pyc | Bin 0 -> 1692 bytes .../test_texmanager.cpython-39.pyc | Bin 0 -> 1571 bytes .../__pycache__/test_text.cpython-39.pyc | Bin 0 -> 21747 bytes .../__pycache__/test_ticker.cpython-39.pyc | Bin 0 -> 46786 bytes .../test_tightlayout.cpython-39.pyc | Bin 0 -> 9666 bytes .../test_transforms.cpython-39.pyc | Bin 0 -> 23182 bytes .../test_triangulation.cpython-39.pyc | Bin 0 -> 31209 bytes .../__pycache__/test_ttconv.cpython-39.pyc | Bin 0 -> 766 bytes .../__pycache__/test_type1font.cpython-39.pyc | Bin 0 -> 2868 bytes .../__pycache__/test_units.cpython-39.pyc | Bin 0 -> 9550 bytes .../__pycache__/test_usetex.cpython-39.pyc | Bin 0 -> 4130 bytes .../__pycache__/test_widgets.cpython-39.pyc | Bin 0 -> 32272 bytes .../matplotlib/tests/conftest.py | 3 + .../matplotlib/tests/test_afm.py | 137 + .../matplotlib/tests/test_agg.py | 332 + .../matplotlib/tests/test_agg_filter.py | 33 + .../matplotlib/tests/test_animation.py | 406 + .../matplotlib/tests/test_api.py | 87 + .../matplotlib/tests/test_arrow_patches.py | 177 + .../matplotlib/tests/test_artist.py | 376 + .../matplotlib/tests/test_axes.py | 7262 +++++++++++++++ .../matplotlib/tests/test_backend_bases.py | 299 + .../matplotlib/tests/test_backend_cairo.py | 48 + .../matplotlib/tests/test_backend_gtk3.py | 51 + .../matplotlib/tests/test_backend_nbagg.py | 28 + .../matplotlib/tests/test_backend_pdf.py | 370 + .../matplotlib/tests/test_backend_pgf.py | 366 + .../matplotlib/tests/test_backend_ps.py | 267 + .../matplotlib/tests/test_backend_qt.py | 644 ++ .../matplotlib/tests/test_backend_svg.py | 488 + .../matplotlib/tests/test_backend_tk.py | 187 + .../matplotlib/tests/test_backend_tools.py | 20 + .../matplotlib/tests/test_backend_webagg.py | 27 + .../tests/test_backends_interactive.py | 319 + .../matplotlib/tests/test_basic.py | 46 + .../matplotlib/tests/test_bbox_tight.py | 148 + .../matplotlib/tests/test_category.py | 314 + .../matplotlib/tests/test_cbook.py | 827 ++ .../matplotlib/tests/test_collections.py | 1086 +++ .../matplotlib/tests/test_colorbar.py | 873 ++ .../matplotlib/tests/test_colors.py | 1483 +++ .../matplotlib/tests/test_compare_images.py | 72 + .../tests/test_constrainedlayout.py | 569 ++ .../matplotlib/tests/test_container.py | 30 + .../matplotlib/tests/test_contour.py | 476 + .../matplotlib/tests/test_cycles.py | 160 + .../matplotlib/tests/test_dates.py | 1206 +++ .../matplotlib/tests/test_determinism.py | 145 + .../matplotlib/tests/test_dviread.py | 77 + .../matplotlib/tests/test_figure.py | 1228 +++ .../matplotlib/tests/test_font_manager.py | 257 + .../tests/test_fontconfig_pattern.py | 70 + .../matplotlib/tests/test_getattr.py | 28 + .../matplotlib/tests/test_gridspec.py | 37 + .../matplotlib/tests/test_image.py | 1378 +++ .../matplotlib/tests/test_legend.py | 882 ++ .../matplotlib/tests/test_lines.py | 334 + .../matplotlib/tests/test_marker.py | 198 + .../matplotlib/tests/test_mathtext.py | 443 + .../matplotlib/tests/test_matplotlib.py | 77 + .../matplotlib/tests/test_mlab.py | 1069 +++ .../matplotlib/tests/test_offsetbox.py | 327 + .../matplotlib/tests/test_patches.py | 721 ++ .../matplotlib/tests/test_path.py | 518 ++ .../matplotlib/tests/test_patheffects.py | 191 + .../matplotlib/tests/test_pickle.py | 220 + .../matplotlib/tests/test_png.py | 52 + .../matplotlib/tests/test_polar.py | 429 + .../matplotlib/tests/test_preprocess_data.py | 289 + .../matplotlib/tests/test_pyplot.py | 337 + .../matplotlib/tests/test_quiver.py | 279 + .../matplotlib/tests/test_rcparams.py | 523 ++ .../matplotlib/tests/test_sankey.py | 24 + .../matplotlib/tests/test_scale.py | 221 + .../matplotlib/tests/test_simplification.py | 518 ++ .../matplotlib/tests/test_skew.py | 168 + .../matplotlib/tests/test_sphinxext.py | 139 + .../matplotlib/tests/test_spines.py | 136 + .../matplotlib/tests/test_streamplot.py | 146 + .../matplotlib/tests/test_style.py | 176 + .../matplotlib/tests/test_subplots.py | 214 + .../matplotlib/tests/test_table.py | 196 + .../matplotlib/tests/test_testing.py | 41 + .../matplotlib/tests/test_texmanager.py | 44 + .../matplotlib/tests/test_text.py | 758 ++ .../matplotlib/tests/test_ticker.py | 1377 +++ .../matplotlib/tests/test_tightlayout.py | 331 + .../matplotlib/tests/test_transforms.py | 725 ++ .../matplotlib/tests/test_triangulation.py | 1179 +++ .../matplotlib/tests/test_ttconv.py | 17 + .../matplotlib/tests/test_type1font.py | 79 + .../matplotlib/tests/test_units.py | 263 + .../matplotlib/tests/test_usetex.py | 121 + .../matplotlib/tests/test_widgets.py | 1340 +++ .../site-packages/matplotlib/texmanager.py | 340 + .../site-packages/matplotlib/text.py | 2017 ++++ .../site-packages/matplotlib/textpath.py | 431 + .../site-packages/matplotlib/ticker.py | 2812 ++++++ .../site-packages/matplotlib/tight_bbox.py | 88 + .../site-packages/matplotlib/tight_layout.py | 354 + .../site-packages/matplotlib/transforms.py | 2999 ++++++ .../site-packages/matplotlib/tri/__init__.py | 12 + .../tri/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 420 bytes .../__pycache__/triangulation.cpython-39.pyc | Bin 0 -> 6977 bytes .../tri/__pycache__/tricontour.cpython-39.pyc | Bin 0 -> 10914 bytes .../tri/__pycache__/trifinder.cpython-39.pyc | Bin 0 -> 4187 bytes .../__pycache__/triinterpolate.cpython-39.pyc | Bin 0 -> 48965 bytes .../tri/__pycache__/tripcolor.cpython-39.pyc | Bin 0 -> 3692 bytes .../tri/__pycache__/triplot.cpython-39.pyc | Bin 0 -> 2017 bytes .../tri/__pycache__/trirefine.cpython-39.pyc | Bin 0 -> 8683 bytes .../tri/__pycache__/tritools.cpython-39.pyc | Bin 0 -> 9108 bytes .../matplotlib/tri/triangulation.py | 220 + .../matplotlib/tri/tricontour.py | 307 + .../site-packages/matplotlib/tri/trifinder.py | 93 + .../matplotlib/tri/triinterpolate.py | 1579 ++++ .../site-packages/matplotlib/tri/tripcolor.py | 131 + .../site-packages/matplotlib/tri/triplot.py | 82 + .../site-packages/matplotlib/tri/trirefine.py | 307 + .../site-packages/matplotlib/tri/tritools.py | 263 + .../site-packages/matplotlib/type1font.py | 404 + .../site-packages/matplotlib/units.py | 211 + .../site-packages/matplotlib/widgets.py | 3687 ++++++++ .../mpl_toolkits/axes_grid/__init__.py | 10 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 661 bytes .../anchored_artists.cpython-39.pyc | Bin 0 -> 563 bytes .../__pycache__/angle_helper.cpython-39.pyc | Bin 0 -> 247 bytes .../__pycache__/axes_divider.cpython-39.pyc | Bin 0 -> 423 bytes .../__pycache__/axes_grid.cpython-39.pyc | Bin 0 -> 311 bytes .../__pycache__/axes_rgb.cpython-39.pyc | Bin 0 -> 239 bytes .../__pycache__/axes_size.cpython-39.pyc | Bin 0 -> 241 bytes .../__pycache__/axis_artist.cpython-39.pyc | Bin 0 -> 245 bytes .../__pycache__/axisline_style.cpython-39.pyc | Bin 0 -> 251 bytes .../__pycache__/axislines.cpython-39.pyc | Bin 0 -> 241 bytes .../__pycache__/clip_path.cpython-39.pyc | Bin 0 -> 241 bytes .../__pycache__/floating_axes.cpython-39.pyc | Bin 0 -> 249 bytes .../__pycache__/grid_finder.cpython-39.pyc | Bin 0 -> 245 bytes .../grid_helper_curvelinear.cpython-39.pyc | Bin 0 -> 269 bytes .../__pycache__/inset_locator.cpython-39.pyc | Bin 0 -> 473 bytes .../__pycache__/parasite_axes.cpython-39.pyc | Bin 0 -> 680 bytes .../axes_grid/anchored_artists.py | 6 + .../mpl_toolkits/axes_grid/angle_helper.py | 1 + .../mpl_toolkits/axes_grid/axes_divider.py | 3 + .../mpl_toolkits/axes_grid/axes_grid.py | 2 + .../mpl_toolkits/axes_grid/axes_rgb.py | 1 + .../mpl_toolkits/axes_grid/axes_size.py | 1 + .../mpl_toolkits/axes_grid/axis_artist.py | 1 + .../mpl_toolkits/axes_grid/axisline_style.py | 1 + .../mpl_toolkits/axes_grid/axislines.py | 1 + .../mpl_toolkits/axes_grid/clip_path.py | 1 + .../mpl_toolkits/axes_grid/floating_axes.py | 1 + .../mpl_toolkits/axes_grid/grid_finder.py | 1 + .../axes_grid/grid_helper_curvelinear.py | 1 + .../mpl_toolkits/axes_grid/inset_locator.py | 4 + .../mpl_toolkits/axes_grid/parasite_axes.py | 12 + .../mpl_toolkits/axes_grid1/__init__.py | 5 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 477 bytes .../anchored_artists.cpython-39.pyc | Bin 0 -> 17699 bytes .../__pycache__/axes_divider.cpython-39.pyc | Bin 0 -> 24309 bytes .../__pycache__/axes_grid.cpython-39.pyc | Bin 0 -> 16322 bytes .../__pycache__/axes_rgb.cpython-39.pyc | Bin 0 -> 4192 bytes .../__pycache__/axes_size.cpython-39.pyc | Bin 0 -> 10452 bytes .../__pycache__/inset_locator.cpython-39.pyc | Bin 0 -> 21738 bytes .../__pycache__/mpl_axes.cpython-39.pyc | Bin 0 -> 5505 bytes .../__pycache__/parasite_axes.cpython-39.pyc | Bin 0 -> 11906 bytes .../axes_grid1/anchored_artists.py | 461 + .../mpl_toolkits/axes_grid1/axes_divider.py | 747 ++ .../mpl_toolkits/axes_grid1/axes_grid.py | 572 ++ .../mpl_toolkits/axes_grid1/axes_rgb.py | 141 + .../mpl_toolkits/axes_grid1/axes_size.py | 272 + .../mpl_toolkits/axes_grid1/inset_locator.py | 632 ++ .../mpl_toolkits/axes_grid1/mpl_axes.py | 134 + .../mpl_toolkits/axes_grid1/parasite_axes.py | 358 + .../mpl_toolkits/axisartist/__init__.py | 17 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 1057 bytes .../__pycache__/angle_helper.cpython-39.pyc | Bin 0 -> 11583 bytes .../__pycache__/axes_divider.cpython-39.pyc | Bin 0 -> 362 bytes .../__pycache__/axes_grid.cpython-39.pyc | Bin 0 -> 881 bytes .../__pycache__/axes_rgb.cpython-39.pyc | Bin 0 -> 507 bytes .../__pycache__/axis_artist.cpython-39.pyc | Bin 0 -> 34692 bytes .../__pycache__/axisline_style.cpython-39.pyc | Bin 0 -> 5394 bytes .../__pycache__/axislines.cpython-39.pyc | Bin 0 -> 18931 bytes .../__pycache__/clip_path.cpython-39.pyc | Bin 0 -> 3118 bytes .../__pycache__/floating_axes.cpython-39.pyc | Bin 0 -> 10121 bytes .../__pycache__/grid_finder.cpython-39.pyc | Bin 0 -> 11794 bytes .../grid_helper_curvelinear.cpython-39.pyc | Bin 0 -> 10764 bytes .../__pycache__/parasite_axes.cpython-39.pyc | Bin 0 -> 662 bytes .../mpl_toolkits/axisartist/angle_helper.py | 394 + .../mpl_toolkits/axisartist/axes_divider.py | 2 + .../mpl_toolkits/axisartist/axes_grid.py | 19 + .../mpl_toolkits/axisartist/axes_rgb.py | 6 + .../mpl_toolkits/axisartist/axis_artist.py | 1069 +++ .../mpl_toolkits/axisartist/axisline_style.py | 145 + .../mpl_toolkits/axisartist/axislines.py | 608 ++ .../mpl_toolkits/axisartist/clip_path.py | 121 + .../mpl_toolkits/axisartist/floating_axes.py | 360 + .../mpl_toolkits/axisartist/grid_finder.py | 336 + .../axisartist/grid_helper_curvelinear.py | 362 + .../mpl_toolkits/axisartist/parasite_axes.py | 12 + .../mpl_toolkits/mplot3d/__init__.py | 1 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 225 bytes .../mplot3d/__pycache__/art3d.cpython-39.pyc | Bin 0 -> 30616 bytes .../mplot3d/__pycache__/axes3d.cpython-39.pyc | Bin 0 -> 97697 bytes .../mplot3d/__pycache__/axis3d.cpython-39.pyc | Bin 0 -> 12739 bytes .../mplot3d/__pycache__/proj3d.cpython-39.pyc | Bin 0 -> 4457 bytes .../mpl_toolkits/mplot3d/art3d.py | 941 ++ .../mpl_toolkits/mplot3d/axes3d.py | 3502 +++++++ .../mpl_toolkits/mplot3d/axis3d.py | 537 ++ .../mpl_toolkits/mplot3d/proj3d.py | 175 + .../mpl_toolkits/tests/__init__.py | 10 + .../tests/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 483 bytes .../tests/__pycache__/conftest.cpython-39.pyc | Bin 0 -> 311 bytes .../__pycache__/test_axes_grid.cpython-39.pyc | Bin 0 -> 1952 bytes .../test_axes_grid1.cpython-39.pyc | Bin 0 -> 14965 bytes ...est_axisartist_angle_helper.cpython-39.pyc | Bin 0 -> 4672 bytes ...test_axisartist_axis_artist.cpython-39.pyc | Bin 0 -> 3161 bytes .../test_axisartist_axislines.cpython-39.pyc | Bin 0 -> 3051 bytes .../test_axisartist_clip_path.cpython-39.pyc | Bin 0 -> 1456 bytes ...st_axisartist_floating_axes.cpython-39.pyc | Bin 0 -> 3672 bytes ...test_axisartist_grid_finder.cpython-39.pyc | Bin 0 -> 1680 bytes ...ist_grid_helper_curvelinear.cpython-39.pyc | Bin 0 -> 5991 bytes .../__pycache__/test_mplot3d.cpython-39.pyc | Bin 0 -> 51160 bytes .../mpl_toolkits/tests/conftest.py | 2 + .../mpl_toolkits/tests/test_axes_grid.py | 56 + .../mpl_toolkits/tests/test_axes_grid1.py | 496 + .../tests/test_axisartist_angle_helper.py | 141 + .../tests/test_axisartist_axis_artist.py | 99 + .../tests/test_axisartist_axislines.py | 99 + .../tests/test_axisartist_clip_path.py | 35 + .../tests/test_axisartist_floating_axes.py | 134 + .../tests/test_axisartist_grid_finder.py | 34 + ...test_axisartist_grid_helper_curvelinear.py | 210 + .../mpl_toolkits/tests/test_mplot3d.py | 1703 ++++ .../packaging-21.3.dist-info/INSTALLER | 1 + .../packaging-21.3.dist-info/LICENSE | 3 + .../packaging-21.3.dist-info/LICENSE.APACHE | 177 + .../packaging-21.3.dist-info/LICENSE.BSD | 23 + .../packaging-21.3.dist-info/METADATA | 453 + .../packaging-21.3.dist-info/RECORD | 31 + .../packaging-21.3.dist-info/WHEEL | 5 + .../packaging-21.3.dist-info/top_level.txt | 1 + .../site-packages/packaging/__about__.py | 26 + .../site-packages/packaging/__init__.py | 25 + .../__pycache__/__about__.cpython-39.pyc | Bin 0 -> 574 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 430 bytes .../__pycache__/_manylinux.cpython-39.pyc | Bin 0 -> 7278 bytes .../__pycache__/_musllinux.cpython-39.pyc | Bin 0 -> 4593 bytes .../__pycache__/_structures.cpython-39.pyc | Bin 0 -> 2787 bytes .../__pycache__/markers.cpython-39.pyc | Bin 0 -> 9425 bytes .../__pycache__/requirements.cpython-39.pyc | Bin 0 -> 3946 bytes .../__pycache__/specifiers.cpython-39.pyc | Bin 0 -> 21505 bytes .../packaging/__pycache__/tags.cpython-39.pyc | Bin 0 -> 12236 bytes .../__pycache__/utils.cpython-39.pyc | Bin 0 -> 3595 bytes .../__pycache__/version.cpython-39.pyc | Bin 0 -> 13136 bytes .../site-packages/packaging/_manylinux.py | 301 + .../site-packages/packaging/_musllinux.py | 136 + .../site-packages/packaging/_structures.py | 61 + .../site-packages/packaging/markers.py | 304 + .../site-packages/packaging/py.typed | 0 .../site-packages/packaging/requirements.py | 146 + .../site-packages/packaging/specifiers.py | 802 ++ .../python3.9/site-packages/packaging/tags.py | 487 + .../site-packages/packaging/utils.py | 136 + .../site-packages/packaging/version.py | 504 + .venv/lib/python3.9/site-packages/pylab.py | 3 + .../pyparsing-3.0.6.dist-info/INSTALLER | 1 + .../pyparsing-3.0.6.dist-info/LICENSE | 18 + .../pyparsing-3.0.6.dist-info/METADATA | 109 + .../pyparsing-3.0.6.dist-info/RECORD | 29 + .../pyparsing-3.0.6.dist-info/WHEEL | 5 + .../pyparsing-3.0.6.dist-info/top_level.txt | 1 + .../site-packages/pyparsing/__init__.py | 328 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 7089 bytes .../__pycache__/actions.cpython-39.pyc | Bin 0 -> 7152 bytes .../__pycache__/common.cpython-39.pyc | Bin 0 -> 10043 bytes .../pyparsing/__pycache__/core.cpython-39.pyc | Bin 0 -> 175157 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 0 -> 9140 bytes .../__pycache__/helpers.cpython-39.pyc | Bin 0 -> 34444 bytes .../__pycache__/results.cpython-39.pyc | Bin 0 -> 24761 bytes .../__pycache__/testing.cpython-39.pyc | Bin 0 -> 12093 bytes .../__pycache__/unicode.cpython-39.pyc | Bin 0 -> 10238 bytes .../pyparsing/__pycache__/util.cpython-39.pyc | Bin 0 -> 8557 bytes .../site-packages/pyparsing/actions.py | 207 + .../site-packages/pyparsing/common.py | 424 + .../python3.9/site-packages/pyparsing/core.py | 5772 ++++++++++++ .../pyparsing/diagram/__init__.py | 593 ++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 15535 bytes .../pyparsing/diagram/template.jinja2 | 26 + .../site-packages/pyparsing/exceptions.py | 267 + .../site-packages/pyparsing/helpers.py | 1059 +++ .../site-packages/pyparsing/results.py | 758 ++ .../site-packages/pyparsing/testing.py | 331 + .../site-packages/pyparsing/unicode.py | 332 + .../python3.9/site-packages/pyparsing/util.py | 234 + .../setuptools_scm-6.3.2.dist-info/INSTALLER | 1 + .../setuptools_scm-6.3.2.dist-info/LICENSE | 17 + .../setuptools_scm-6.3.2.dist-info/METADATA | 639 ++ .../setuptools_scm-6.3.2.dist-info/RECORD | 40 + .../setuptools_scm-6.3.2.dist-info/WHEEL | 5 + .../entry_points.txt | 37 + .../top_level.txt | 1 + .../setuptools_scm-6.3.2.dist-info/zip-safe | 1 + .../site-packages/setuptools_scm/__init__.py | 212 + .../site-packages/setuptools_scm/__main__.py | 15 + .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 4921 bytes .../__pycache__/__main__.cpython-39.pyc | Bin 0 -> 564 bytes .../__pycache__/_version_cls.cpython-39.pyc | Bin 0 -> 1978 bytes .../__pycache__/config.cpython-39.pyc | Bin 0 -> 5524 bytes .../__pycache__/discover.cpython-39.pyc | Bin 0 -> 1717 bytes .../__pycache__/file_finder.cpython-39.pyc | Bin 0 -> 2339 bytes .../file_finder_git.cpython-39.pyc | Bin 0 -> 2415 bytes .../__pycache__/file_finder_hg.cpython-39.pyc | Bin 0 -> 1453 bytes .../__pycache__/git.cpython-39.pyc | Bin 0 -> 5703 bytes .../__pycache__/hacks.cpython-39.pyc | Bin 0 -> 1326 bytes .../__pycache__/hg.cpython-39.pyc | Bin 0 -> 4352 bytes .../__pycache__/hg_git.cpython-39.pyc | Bin 0 -> 3775 bytes .../__pycache__/integration.cpython-39.pyc | Bin 0 -> 2770 bytes .../__pycache__/scm_workdir.cpython-39.pyc | Bin 0 -> 857 bytes .../__pycache__/utils.cpython-39.pyc | Bin 0 -> 4341 bytes .../__pycache__/version.cpython-39.pyc | Bin 0 -> 11817 bytes .../setuptools_scm/_version_cls.py | 49 + .../site-packages/setuptools_scm/config.py | 212 + .../site-packages/setuptools_scm/discover.py | 58 + .../setuptools_scm/file_finder.py | 70 + .../setuptools_scm/file_finder_git.py | 93 + .../setuptools_scm/file_finder_hg.py | 49 + .../site-packages/setuptools_scm/git.py | 220 + .../site-packages/setuptools_scm/hacks.py | 40 + .../site-packages/setuptools_scm/hg.py | 169 + .../site-packages/setuptools_scm/hg_git.py | 133 + .../setuptools_scm/integration.py | 94 + .../setuptools_scm/scm_workdir.py | 15 + .../site-packages/setuptools_scm/utils.py | 154 + .../site-packages/setuptools_scm/version.py | 460 + .../tomli-1.2.2.dist-info/INSTALLER | 1 + .../tomli-1.2.2.dist-info/LICENSE | 21 + .../tomli-1.2.2.dist-info/METADATA | 208 + .../tomli-1.2.2.dist-info/RECORD | 14 + .../site-packages/tomli-1.2.2.dist-info/WHEEL | 4 + .../python3.9/site-packages/tomli/__init__.py | 9 + .../tomli/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 378 bytes .../tomli/__pycache__/_parser.cpython-39.pyc | Bin 0 -> 15657 bytes .../tomli/__pycache__/_re.cpython-39.pyc | Bin 0 -> 2783 bytes .../tomli/__pycache__/_types.cpython-39.pyc | Bin 0 -> 309 bytes .../python3.9/site-packages/tomli/_parser.py | 663 ++ .../lib/python3.9/site-packages/tomli/_re.py | 101 + .../python3.9/site-packages/tomli/_types.py | 6 + .../python3.9/site-packages/tomli/py.typed | 1 + .venv/share/man/man1/ttx.1 | 225 + task_171121/task_171121.py | 13 + 1710 files changed, 376525 insertions(+), 971 deletions(-) create mode 100644 .venv/bin/fonttools create mode 100644 .venv/bin/pyftmerge create mode 100644 .venv/bin/pyftsubset create mode 100644 .venv/bin/ttx create mode 100644 .venv/lib/python3.9/site-packages/PIL/BdfFontFile.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/BlpImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/BmpImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/BufrStubImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ContainerIO.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/CurImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/DcxImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/DdsImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/EpsImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ExifTags.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/FitsStubImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/FliImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/FontFile.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/FpxImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/FtexImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/GbrImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/GdImageFile.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/GifImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/GimpGradientFile.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/GimpPaletteFile.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/GribStubImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/Hdf5StubImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/IcnsImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/IcoImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/Image.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageChops.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageCms.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageColor.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageDraw.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageDraw2.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageEnhance.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageFile.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageFilter.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageFont.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageGrab.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageMath.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageMode.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageMorph.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageOps.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImagePalette.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImagePath.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageQt.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageSequence.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageShow.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageStat.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageTk.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageTransform.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImageWin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/ImtImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/IptcImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/Jpeg2KImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/JpegImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/JpegPresets.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/McIdasImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/MicImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/MpegImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/MpoImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/MspImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/PSDraw.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/PaletteFile.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/PalmImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/PcdImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/PcfFontFile.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/PcxImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/PdfImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/PdfParser.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/PixarImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/PngImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/PpmImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/PsdImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/PyAccess.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/SgiImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/SpiderImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/SunImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/TarIO.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/TgaImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/TiffImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/TiffTags.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/WalImageFile.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/WebPImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/WmfImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/XVThumbImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/XbmImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/XpmImagePlugin.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/__main__.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/BdfFontFile.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/BlpImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/BmpImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/BufrStubImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ContainerIO.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/CurImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/DcxImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/DdsImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/EpsImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ExifTags.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/FitsStubImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/FliImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/FontFile.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/FpxImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/FtexImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/GbrImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/GdImageFile.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/GifImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/GimpGradientFile.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/GimpPaletteFile.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/GribStubImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/Hdf5StubImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/IcnsImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/IcoImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/Image.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageChops.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageCms.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageColor.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageDraw.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageDraw2.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageEnhance.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageFile.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageFilter.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageFont.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageGrab.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageMath.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageMode.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageMorph.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageOps.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImagePalette.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImagePath.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageQt.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageSequence.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageShow.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageStat.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageTk.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageTransform.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImageWin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/ImtImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/IptcImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/Jpeg2KImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/JpegImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/JpegPresets.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/McIdasImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/MicImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/MpegImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/MpoImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/MspImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/PSDraw.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/PaletteFile.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/PalmImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/PcdImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/PcfFontFile.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/PcxImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/PdfImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/PdfParser.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/PixarImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/PngImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/PpmImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/PsdImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/PyAccess.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/SgiImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/SpiderImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/SunImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/TarIO.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/TgaImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/TiffImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/TiffTags.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/WalImageFile.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/WebPImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/WmfImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/XVThumbImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/XbmImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/XpmImagePlugin.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/_binary.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/_tkinter_finder.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/_util.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/_version.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/__pycache__/features.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/PIL/_binary.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/_imaging.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/PIL/_imagingcms.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/PIL/_imagingft.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/PIL/_imagingmath.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/PIL/_imagingmorph.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/PIL/_imagingtk.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/PIL/_tkinter_finder.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/_util.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/_version.py create mode 100644 .venv/lib/python3.9/site-packages/PIL/_webp.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/PIL/features.py create mode 100644 .venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/INSTALLER create mode 100644 .venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/LICENSE create mode 100644 .venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/METADATA create mode 100644 .venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/RECORD create mode 100644 .venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/WHEEL create mode 100644 .venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/top_level.txt rename .venv/lib/python3.9/site-packages/{mathprolib-0.1.7-py3.9.egg-info/dependency_links.txt => Pillow-8.4.0.dist-info/zip-safe} (100%) create mode 100644 .venv/lib/python3.9/site-packages/Pillow.libs/libXau-00ec42fe.so.6.0.0 create mode 100644 .venv/lib/python3.9/site-packages/Pillow.libs/libfreetype-804dfcff.so.6.18.0 create mode 100644 .venv/lib/python3.9/site-packages/Pillow.libs/libharfbuzz-a69be65e.so.0.30000.0 create mode 100644 .venv/lib/python3.9/site-packages/Pillow.libs/libjpeg-183418da.so.9.4.0 create mode 100644 .venv/lib/python3.9/site-packages/Pillow.libs/liblcms2-035b9744.so.2.0.12 create mode 100644 .venv/lib/python3.9/site-packages/Pillow.libs/liblzma-d540a118.so.5.2.5 create mode 100644 .venv/lib/python3.9/site-packages/Pillow.libs/libopenjp2-430a98fc.so.2.4.0 create mode 100644 .venv/lib/python3.9/site-packages/Pillow.libs/libpng16-213e245f.so.16.37.0 create mode 100644 .venv/lib/python3.9/site-packages/Pillow.libs/libtiff-9ffe9659.so.5.7.0 create mode 100644 .venv/lib/python3.9/site-packages/Pillow.libs/libwebp-d8a3db66.so.7.1.2 create mode 100644 .venv/lib/python3.9/site-packages/Pillow.libs/libwebpdemux-f117ddb4.so.2.0.8 create mode 100644 .venv/lib/python3.9/site-packages/Pillow.libs/libwebpmux-fe44437b.so.3.0.7 create mode 100644 .venv/lib/python3.9/site-packages/Pillow.libs/libxcb-1122e22b.so.1.1.0 create mode 100644 .venv/lib/python3.9/site-packages/Pillow.libs/libz-dd453c56.so.1.2.11 create mode 100644 .venv/lib/python3.9/site-packages/__pycache__/cycler.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/__pycache__/pylab.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/INSTALLER create mode 100644 .venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/LICENSE create mode 100644 .venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/METADATA create mode 100644 .venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/RECORD create mode 100644 .venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/WHEEL create mode 100644 .venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/top_level.txt create mode 100644 .venv/lib/python3.9/site-packages/cycler.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/__main__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/__pycache__/afmLib.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/__pycache__/agl.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/__pycache__/fontBuilder.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/__pycache__/help.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/__pycache__/merge.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/__pycache__/tfmLib.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/__pycache__/ttx.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/__pycache__/unicode.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/afmLib.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/agl.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cffLib/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cffLib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cffLib/__pycache__/specializer.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cffLib/__pycache__/width.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cffLib/specializer.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cffLib/width.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/colorLib/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/colorLib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/colorLib/__pycache__/builder.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/colorLib/__pycache__/errors.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/colorLib/__pycache__/geometry.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/colorLib/__pycache__/table_builder.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/colorLib/__pycache__/unbuilder.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/colorLib/builder.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/colorLib/errors.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/colorLib/geometry.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/colorLib/table_builder.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/colorLib/unbuilder.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cu2qu/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cu2qu/__main__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cu2qu/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cu2qu/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cu2qu/__pycache__/cli.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cu2qu/__pycache__/cu2qu.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cu2qu/__pycache__/errors.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cu2qu/__pycache__/ufo.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cu2qu/cli.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cu2qu/cu2qu.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cu2qu/errors.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/cu2qu/ufo.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/designspaceLib/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/designspaceLib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/encodings/MacRoman.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/encodings/StandardEncoding.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/encodings/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/encodings/__pycache__/MacRoman.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/encodings/__pycache__/StandardEncoding.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/encodings/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/encodings/__pycache__/codecs.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/encodings/codecs.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/__main__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/ast.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/builder.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/error.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/lexer.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/location.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/lookupDebugInfo.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/parser.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/variableScalar.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/ast.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/builder.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/error.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/lexer.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/location.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/lookupDebugInfo.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/parser.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/feaLib/variableScalar.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/fontBuilder.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/help.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/merge.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/arrayTools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/bezierTools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/classifyTools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/cliTools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/cython.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/dictTools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/eexec.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/encodingTools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/etree.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/filenames.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/fixedTools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/intTools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/loggingTools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/macCreatorType.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/macRes.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/psCharStrings.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/psLib.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/psOperators.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/py23.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/roundTools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/sstruct.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/symfont.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/testTools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/textTools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/timeTools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/transform.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/vector.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/xmlReader.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/xmlWriter.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/arrayTools.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/bezierTools.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/classifyTools.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/cliTools.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/cython.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/dictTools.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/eexec.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/encodingTools.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/etree.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/filenames.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/fixedTools.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/intTools.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/loggingTools.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/macCreatorType.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/macRes.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/plistlib/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/plistlib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/plistlib/py.typed create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/psCharStrings.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/psLib.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/psOperators.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/py23.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/roundTools.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/sstruct.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/symfont.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/testTools.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/textTools.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/timeTools.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/transform.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/vector.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/xmlReader.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/misc/xmlWriter.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/mtiLib/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/mtiLib/__main__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/mtiLib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/mtiLib/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/otlLib/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/otlLib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/otlLib/__pycache__/builder.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/otlLib/__pycache__/error.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/otlLib/__pycache__/maxContextCalc.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/otlLib/builder.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/otlLib/error.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/otlLib/maxContextCalc.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__main__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__pycache__/gpos.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/gpos.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/areaPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/basePen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/boundsPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/cocoaPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/cu2quPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/filterPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/hashPointPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/momentsPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/perimeterPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/pointInsidePen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/pointPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/qtPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/quartzPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/recordingPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/reportLabPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/reverseContourPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/roundingPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/statisticsPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/svgPathPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/t2CharStringPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/teePen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/transformPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/ttGlyphPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/wxPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/areaPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/basePen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/boundsPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/cocoaPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/cu2quPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/filterPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/hashPointPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/momentsPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/perimeterPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/pointInsidePen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/pointPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/qtPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/quartzPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/recordingPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/reportLabPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/reverseContourPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/roundingPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/statisticsPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/svgPathPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/t2CharStringPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/teePen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/transformPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/ttGlyphPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/pens/wxPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/subset/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/subset/__main__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/subset/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/subset/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/subset/__pycache__/cff.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/subset/__pycache__/svg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/subset/__pycache__/util.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/subset/cff.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/subset/svg.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/subset/util.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/svgLib/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/svgLib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/svgLib/path/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/svgLib/path/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/svgLib/path/__pycache__/arc.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/svgLib/path/__pycache__/parser.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/svgLib/path/__pycache__/shapes.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/svgLib/path/arc.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/svgLib/path/parser.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/svgLib/path/shapes.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/t1Lib/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/t1Lib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/tfmLib.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/__pycache__/macUtils.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/__pycache__/removeOverlaps.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/__pycache__/sfnt.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/__pycache__/standardGlyphOrder.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/__pycache__/ttCollection.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/__pycache__/ttFont.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/__pycache__/woff2.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/macUtils.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/removeOverlaps.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/sfnt.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/standardGlyphOrder.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/B_A_S_E_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/BitmapGlyphMetrics.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/C_B_D_T_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/C_B_L_C_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/C_F_F_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/C_F_F__2.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/C_O_L_R_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/C_P_A_L_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/D_S_I_G_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/D__e_b_g.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/DefaultTable.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/E_B_D_T_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/E_B_L_C_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/F_F_T_M_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/F__e_a_t.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/G_D_E_F_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/G_M_A_P_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/G_P_K_G_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/G_P_O_S_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/G_S_U_B_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/G__l_a_t.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/G__l_o_c.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/H_V_A_R_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/J_S_T_F_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/L_T_S_H_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/M_A_T_H_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/M_E_T_A_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/M_V_A_R_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/O_S_2f_2.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/S_I_N_G_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/S_T_A_T_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/S_V_G_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/S__i_l_f.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/S__i_l_l.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/T_S_I_B_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/T_S_I_C_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/T_S_I_D_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/T_S_I_J_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/T_S_I_P_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/T_S_I_S_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/T_S_I_V_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/T_S_I__0.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/T_S_I__1.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/T_S_I__2.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/T_S_I__3.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/T_S_I__5.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/T_T_F_A_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/TupleVariation.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/V_D_M_X_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/V_O_R_G_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/V_V_A_R_.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/B_A_S_E_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/BitmapGlyphMetrics.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/C_B_D_T_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/C_B_L_C_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/C_F_F_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/C_F_F__2.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/C_O_L_R_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/C_P_A_L_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/D_S_I_G_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/D__e_b_g.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/DefaultTable.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/E_B_D_T_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/E_B_L_C_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/F_F_T_M_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/F__e_a_t.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/G_D_E_F_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/G_M_A_P_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/G_P_K_G_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/G_P_O_S_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/G_S_U_B_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/G__l_a_t.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/G__l_o_c.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/H_V_A_R_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/J_S_T_F_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/L_T_S_H_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/M_A_T_H_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/M_E_T_A_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/M_V_A_R_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/O_S_2f_2.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/S_I_N_G_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/S_T_A_T_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/S_V_G_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/S__i_l_f.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/S__i_l_l.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_B_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_C_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_D_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_J_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_P_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_S_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_V_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__0.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__1.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__2.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__3.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__5.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/T_T_F_A_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/TupleVariation.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/V_D_M_X_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/V_O_R_G_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/V_V_A_R_.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_a_n_k_r.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_a_v_a_r.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_b_s_l_n.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_c_i_d_g.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_c_m_a_p.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_c_v_a_r.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_c_v_t.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_f_e_a_t.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_f_p_g_m.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_f_v_a_r.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_g_a_s_p.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_g_c_i_d.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_g_l_y_f.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_g_v_a_r.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_h_d_m_x.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_h_e_a_d.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_h_h_e_a.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_h_m_t_x.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_k_e_r_n.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_l_c_a_r.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_l_o_c_a.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_l_t_a_g.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_m_a_x_p.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_m_e_t_a.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_m_o_r_t.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_m_o_r_x.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_n_a_m_e.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_o_p_b_d.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_p_o_s_t.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_p_r_e_p.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_p_r_o_p.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_s_b_i_x.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_t_r_a_k.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_v_h_e_a.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/_v_m_t_x.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/asciiTable.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/grUtils.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/otBase.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/otConverters.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/otData.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/otTables.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/sbixGlyph.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/sbixStrike.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/__pycache__/ttProgram.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_a_n_k_r.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_a_v_a_r.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_b_s_l_n.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_c_i_d_g.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_c_m_a_p.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_c_v_a_r.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_c_v_t.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_f_e_a_t.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_f_p_g_m.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_f_v_a_r.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_g_a_s_p.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_g_c_i_d.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_g_l_y_f.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_g_v_a_r.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_h_d_m_x.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_h_e_a_d.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_h_h_e_a.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_h_m_t_x.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_k_e_r_n.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_l_c_a_r.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_l_o_c_a.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_l_t_a_g.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_m_a_x_p.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_m_e_t_a.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_m_o_r_t.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_m_o_r_x.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_n_a_m_e.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_o_p_b_d.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_p_o_s_t.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_p_r_e_p.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_p_r_o_p.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_s_b_i_x.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_t_r_a_k.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_v_h_e_a.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/_v_m_t_x.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/asciiTable.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/grUtils.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/otBase.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/otConverters.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/otData.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/otTables.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/sbixGlyph.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/sbixStrike.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/table_API_readme.txt create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/tables/ttProgram.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/ttCollection.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/ttFont.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttLib/woff2.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ttx.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/__pycache__/converters.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/__pycache__/errors.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/__pycache__/etree.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/__pycache__/filenames.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/__pycache__/glifLib.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/__pycache__/kerning.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/__pycache__/plistlib.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/__pycache__/pointPen.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/__pycache__/utils.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/__pycache__/validators.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/converters.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/errors.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/etree.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/filenames.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/glifLib.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/kerning.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/plistlib.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/pointPen.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/utils.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/ufoLib/validators.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/unicode.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/unicodedata/Blocks.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/unicodedata/OTTags.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/unicodedata/ScriptExtensions.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/unicodedata/Scripts.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/unicodedata/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/unicodedata/__pycache__/Blocks.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/unicodedata/__pycache__/OTTags.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/unicodedata/__pycache__/ScriptExtensions.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/unicodedata/__pycache__/Scripts.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/unicodedata/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__main__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__pycache__/builder.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__pycache__/cff.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__pycache__/errors.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__pycache__/featureVars.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__pycache__/interpolatable.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__pycache__/interpolate_layout.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__pycache__/iup.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__pycache__/merger.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__pycache__/models.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__pycache__/mutator.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__pycache__/mvar.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__pycache__/plot.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/__pycache__/varStore.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/builder.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/cff.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/errors.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/featureVars.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/instancer/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/instancer/__main__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/instancer/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/instancer/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/instancer/__pycache__/names.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/instancer/names.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/interpolatable.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/interpolate_layout.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/iup.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/merger.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/models.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/mutator.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/mvar.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/plot.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/varLib/varStore.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/voltLib/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/voltLib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/voltLib/__pycache__/ast.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/voltLib/__pycache__/error.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/voltLib/__pycache__/lexer.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/voltLib/__pycache__/parser.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/fontTools/voltLib/ast.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/voltLib/error.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/voltLib/lexer.py create mode 100644 .venv/lib/python3.9/site-packages/fontTools/voltLib/parser.py create mode 100644 .venv/lib/python3.9/site-packages/fonttools-4.28.2.dist-info/INSTALLER create mode 100644 .venv/lib/python3.9/site-packages/fonttools-4.28.2.dist-info/LICENSE create mode 100644 .venv/lib/python3.9/site-packages/fonttools-4.28.2.dist-info/METADATA create mode 100644 .venv/lib/python3.9/site-packages/fonttools-4.28.2.dist-info/RECORD create mode 100644 .venv/lib/python3.9/site-packages/fonttools-4.28.2.dist-info/WHEEL create mode 100644 .venv/lib/python3.9/site-packages/fonttools-4.28.2.dist-info/entry_points.txt create mode 100644 .venv/lib/python3.9/site-packages/fonttools-4.28.2.dist-info/top_level.txt create mode 100644 .venv/lib/python3.9/site-packages/kiwisolver-1.3.2.dist-info/INSTALLER create mode 100644 .venv/lib/python3.9/site-packages/kiwisolver-1.3.2.dist-info/LICENSE create mode 100644 .venv/lib/python3.9/site-packages/kiwisolver-1.3.2.dist-info/METADATA create mode 100644 .venv/lib/python3.9/site-packages/kiwisolver-1.3.2.dist-info/RECORD create mode 100644 .venv/lib/python3.9/site-packages/kiwisolver-1.3.2.dist-info/WHEEL create mode 100644 .venv/lib/python3.9/site-packages/kiwisolver-1.3.2.dist-info/top_level.txt create mode 100644 .venv/lib/python3.9/site-packages/kiwisolver.cpython-39-x86_64-linux-gnu.so delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib-0.1.7-py3.9.egg-info/PKG-INFO delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib-0.1.7-py3.9.egg-info/SOURCES.txt delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib-0.1.7-py3.9.egg-info/installed-files.txt delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib-0.1.7-py3.9.egg-info/top_level.txt delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/Fraction.py delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/Inf_digits_float.py delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/Scientific.py delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/__init__.py delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/__pycache__/Fraction.cpython-39.pyc delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/__pycache__/Inf_digits_float.cpython-39.pyc delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/__pycache__/Scientific.cpython-39.pyc delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/__pycache__/__init__.cpython-39.pyc delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/__pycache__/float2Fraction.cpython-39.pyc delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/__pycache__/linear_algebra.cpython-39.pyc delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/__pycache__/polynomials.cpython-39.pyc delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/__pycache__/simple.cpython-39.pyc delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/float2Fraction.py delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/help.py delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/linear_algebra.py delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/polynomials.py delete mode 100644 .venv/lib/python3.9/site-packages/mathprolib/simple.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0-py3.9-nspkg.pth create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/INSTALLER create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/LICENSE create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/LICENSE_AMSFONTS create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/LICENSE_BAKOMA create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/LICENSE_CARLOGO create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/LICENSE_COLORBREWER create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/LICENSE_JSXTOOLS_RESIZE_OBSERVER create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/LICENSE_QHULL create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/LICENSE_QT4_EDITOR create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/LICENSE_SOLARIZED create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/LICENSE_STIX create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/LICENSE_YORICK create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/METADATA create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/RECORD create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/REQUESTED create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/WHEEL create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/namespace_packages.txt create mode 100644 .venv/lib/python3.9/site-packages/matplotlib-3.5.0.dist-info/top_level.txt create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/_animation_data.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/_blocking_input.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/_cm.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/_cm_listed.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/_color_data.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/_constrained_layout.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/_enums.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/_internal_utils.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/_layoutgrid.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/_mathtext.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/_mathtext_data.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/_pylab_helpers.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/_text_helpers.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/_version.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/afm.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/animation.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/artist.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/axis.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/backend_bases.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/backend_managers.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/backend_tools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/bezier.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/blocking_input.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/category.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/cm.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/collections.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/colorbar.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/colors.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/container.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/contour.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/dates.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/docstring.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/dviread.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/figure.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/font_manager.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/fontconfig_pattern.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/gridspec.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/hatch.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/image.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/legend.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/legend_handler.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/lines.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/markers.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/mathtext.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/mlab.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/offsetbox.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/patches.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/path.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/patheffects.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/pylab.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/pyplot.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/quiver.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/rcsetup.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/sankey.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/scale.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/spines.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/stackplot.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/streamplot.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/table.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/texmanager.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/text.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/textpath.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/ticker.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/tight_bbox.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/tight_layout.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/transforms.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/type1font.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/units.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/__pycache__/widgets.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_animation_data.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_api/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_api/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_api/__pycache__/deprecation.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_api/deprecation.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_blocking_input.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_c_internal_utils.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_cm.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_cm_listed.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_color_data.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_constrained_layout.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_contour.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_enums.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_image.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_internal_utils.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_layoutgrid.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_mathtext.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_mathtext_data.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_path.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_pylab_helpers.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_qhull.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_text_helpers.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_tri.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_ttconv.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/_version.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/afm.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/animation.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/artist.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/axes/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/axes/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/axes/__pycache__/_axes.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/axes/__pycache__/_base.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/axes/__pycache__/_secondary_axes.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/axes/__pycache__/_subplots.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/axes/_axes.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/axes/_base.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/axes/_secondary_axes.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/axes/_subplots.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/axis.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backend_bases.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backend_managers.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backend_tools.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/_backend_gtk.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/_backend_pdf_ps.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/_backend_tk.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_agg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_cairo.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_gtk3.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_gtk3agg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_gtk3cairo.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_gtk4.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_gtk4agg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_gtk4cairo.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_macosx.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_mixed.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_nbagg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_pdf.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_pgf.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_ps.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_qt.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_qt5.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_qt5agg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_qt5cairo.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_qtagg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_qtcairo.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_svg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_template.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_tkagg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_tkcairo.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_webagg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_webagg_core.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_wx.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_wxagg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/backend_wxcairo.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/__pycache__/qt_compat.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/_backend_agg.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/_backend_gtk.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/_backend_pdf_ps.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/_backend_tk.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/_tkagg.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_agg.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_cairo.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_gtk3.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_gtk3agg.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_gtk3cairo.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_gtk4.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_gtk4agg.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_gtk4cairo.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_macosx.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_mixed.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_nbagg.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_pdf.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_pgf.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_ps.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_qt.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_qt5.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_qt5agg.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_qt5cairo.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_qtagg.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_qtcairo.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_svg.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_template.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_tkagg.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_tkcairo.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_webagg.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_webagg_core.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_wx.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_wxagg.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/backend_wxcairo.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/qt_compat.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/qt_editor/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/qt_editor/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/qt_editor/__pycache__/_formlayout.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/qt_editor/__pycache__/figureoptions.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/qt_editor/_formlayout.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/qt_editor/figureoptions.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/web_backend/.eslintrc.js create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/web_backend/.prettierignore create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/web_backend/.prettierrc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/web_backend/all_figures.html create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/web_backend/css/boilerplate.css create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/web_backend/css/fbm.css create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/web_backend/css/mpl.css create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/web_backend/css/page.css create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/web_backend/ipython_inline_figure.html create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/web_backend/js/mpl.js create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/web_backend/js/mpl_tornado.js create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/web_backend/js/nbagg_mpl.js create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/web_backend/nbagg_uat.ipynb create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/web_backend/package.json create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/backends/web_backend/single_figure.html create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/bezier.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/blocking_input.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/category.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/cbook/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/cbook/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/cbook/__pycache__/deprecation.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/cbook/deprecation.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/cm.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/collections.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/colorbar.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/colors.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/container.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/contour.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/dates.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/docstring.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/dviread.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/figure.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/font_manager.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/fontconfig_pattern.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/ft2font.cpython-39-x86_64-linux-gnu.so create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/gridspec.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/hatch.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/image.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/legend.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/legend_handler.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/lines.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/markers.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mathtext.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mlab.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/cmex10.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/cmmi10.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/cmr10.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/cmsy10.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/cmtt10.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pagd8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pagdo8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pagk8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pagko8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pbkd8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pbkdi8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pbkl8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pbkli8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pcrb8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pcrbo8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pcrr8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pcrro8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/phvb8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/phvb8an.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/phvbo8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/phvbo8an.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/phvl8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/phvlo8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/phvr8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/phvr8an.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/phvro8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/phvro8an.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pncb8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pncbi8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pncr8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pncri8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pplb8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pplbi8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pplr8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pplri8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/psyr.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/ptmb8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/ptmbi8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/ptmr8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/ptmri8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/putb8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/putbi8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/putr8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/putri8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pzcmi8a.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/afm/pzdr.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Courier-Bold.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Courier-BoldOblique.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Courier-Oblique.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Courier.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Helvetica-Bold.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Helvetica-BoldOblique.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Helvetica-Oblique.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Helvetica.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Symbol.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Times-Bold.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Times-BoldItalic.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Times-Italic.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Times-Roman.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/ZapfDingbats.afm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/readme.txt create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans-Bold.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans-BoldOblique.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans-Oblique.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansDisplay.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono-Bold.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono-BoldOblique.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono-Oblique.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif-Bold.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif-BoldItalic.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif-Italic.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerifDisplay.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/LICENSE_DEJAVU create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/LICENSE_STIX create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneral.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralBol.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralBolIta.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralItalic.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUni.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniBol.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniBolIta.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniIta.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFiveSymReg.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFourSymBol.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFourSymReg.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizOneSymBol.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizOneSymReg.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizThreeSymBol.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizThreeSymReg.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizTwoSymBol.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizTwoSymReg.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/cmb10.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/cmex10.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/cmmi10.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/cmr10.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/cmss10.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/cmsy10.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/cmtt10.ttf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/back-symbolic.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/back.pdf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/back.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/back.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/back_large.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/filesave-symbolic.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/filesave.pdf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/filesave.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/filesave.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/filesave_large.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/forward-symbolic.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/forward.pdf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/forward.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/forward.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/forward_large.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/hand.pdf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/hand.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/hand.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/help-symbolic.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/help.pdf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/help.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/help.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/help_large.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/home-symbolic.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/home.pdf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/home.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/home.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/home_large.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/matplotlib.pdf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/matplotlib.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/matplotlib.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/matplotlib_128.ppm create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/matplotlib_large.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/move-symbolic.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/move.pdf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/move.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/move.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/move_large.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/qt4_editor_options.pdf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/qt4_editor_options.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/qt4_editor_options.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/qt4_editor_options_large.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/subplots-symbolic.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/subplots.pdf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/subplots.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/subplots.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/subplots_large.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/zoom_to_rect-symbolic.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/zoom_to_rect.pdf create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/zoom_to_rect.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/zoom_to_rect.svg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/images/zoom_to_rect_large.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/kpsewhich.lua create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/matplotlibrc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/plot_directive/plot_directive.css create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/sample_data/Minduka_Present_Blue_Pack.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/sample_data/README.txt create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/sample_data/axes_grid/bivariate_normal.npy create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/sample_data/data_x_x2_x3.csv create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/sample_data/eeg.dat create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/sample_data/embedding_in_wx3.xrc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/sample_data/goog.npz create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/sample_data/grace_hopper.jpg create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/sample_data/jacksboro_fault_dem.npz create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/sample_data/logo2.png create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/sample_data/membrane.dat create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/sample_data/msft.csv create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/sample_data/percent_bachelors_degrees_women_usa.csv create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/sample_data/s1045.ima.gz create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/sample_data/topobathy.npz create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/Solarize_Light2.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/_classic_test_patch.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/_mpl-gallery-nogrid.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/_mpl-gallery.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/bmh.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/classic.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/dark_background.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/fast.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/fivethirtyeight.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/ggplot.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/grayscale.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn-bright.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn-colorblind.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn-dark-palette.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn-dark.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn-darkgrid.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn-deep.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn-muted.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn-notebook.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn-paper.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn-pastel.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn-poster.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn-talk.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn-ticks.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn-white.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn-whitegrid.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/seaborn.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/mpl-data/stylelib/tableau-colorblind10.mplstyle create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/offsetbox.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/patches.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/path.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/patheffects.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/projections/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/projections/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/projections/__pycache__/geo.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/projections/__pycache__/polar.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/projections/geo.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/projections/polar.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/pylab.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/pyplot.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/quiver.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/rcsetup.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/sankey.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/scale.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/sphinxext/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/sphinxext/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/sphinxext/__pycache__/mathmpl.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/sphinxext/__pycache__/plot_directive.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/sphinxext/mathmpl.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/sphinxext/plot_directive.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/spines.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/stackplot.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/streamplot.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/style/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/style/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/style/__pycache__/core.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/style/core.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/table.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/__pycache__/compare.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/__pycache__/conftest.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/__pycache__/decorators.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/__pycache__/exceptions.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/__pycache__/widgets.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/compare.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/conftest.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/decorators.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/exceptions.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/Duration.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/Epoch.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/EpochConverter.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/StrConverter.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/UnitDbl.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/UnitDblConverter.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/UnitDblFormatter.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/__pycache__/Duration.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/__pycache__/Epoch.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/__pycache__/EpochConverter.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/__pycache__/StrConverter.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/__pycache__/UnitDbl.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/__pycache__/UnitDblConverter.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/__pycache__/UnitDblFormatter.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/jpl_units/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/testing/widgets.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/conftest.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_afm.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_agg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_agg_filter.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_animation.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_api.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_arrow_patches.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_artist.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_axes.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_backend_bases.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_backend_cairo.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_backend_gtk3.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_backend_nbagg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_backend_pdf.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_backend_pgf.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_backend_ps.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_backend_qt.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_backend_svg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_backend_tk.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_backend_tools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_backend_webagg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_backends_interactive.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_basic.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_bbox_tight.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_category.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_cbook.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_collections.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_colorbar.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_colors.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_compare_images.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_constrainedlayout.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_container.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_contour.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_cycles.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_dates.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_determinism.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_dviread.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_figure.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_font_manager.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_fontconfig_pattern.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_getattr.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_gridspec.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_image.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_legend.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_lines.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_marker.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_mathtext.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_matplotlib.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_mlab.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_offsetbox.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_patches.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_path.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_patheffects.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_pickle.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_png.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_polar.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_preprocess_data.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_pyplot.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_quiver.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_rcparams.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_sankey.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_scale.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_simplification.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_skew.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_sphinxext.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_spines.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_streamplot.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_style.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_subplots.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_table.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_testing.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_texmanager.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_text.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_ticker.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_tightlayout.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_transforms.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_triangulation.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_ttconv.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_type1font.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_units.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_usetex.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/__pycache__/test_widgets.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/conftest.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_afm.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_agg.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_agg_filter.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_animation.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_api.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_arrow_patches.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_artist.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_axes.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_backend_bases.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_backend_cairo.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_backend_gtk3.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_backend_nbagg.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_backend_pdf.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_backend_pgf.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_backend_ps.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_backend_qt.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_backend_svg.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_backend_tk.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_backend_tools.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_backend_webagg.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_backends_interactive.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_basic.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_bbox_tight.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_category.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_cbook.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_collections.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_colorbar.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_colors.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_compare_images.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_constrainedlayout.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_container.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_contour.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_cycles.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_dates.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_determinism.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_dviread.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_figure.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_font_manager.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_fontconfig_pattern.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_getattr.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_gridspec.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_image.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_legend.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_lines.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_marker.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_mathtext.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_matplotlib.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_mlab.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_offsetbox.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_patches.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_path.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_patheffects.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_pickle.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_png.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_polar.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_preprocess_data.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_pyplot.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_quiver.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_rcparams.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_sankey.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_scale.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_simplification.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_skew.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_sphinxext.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_spines.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_streamplot.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_style.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_subplots.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_table.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_testing.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_texmanager.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_text.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_ticker.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_tightlayout.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_transforms.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_triangulation.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_ttconv.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_type1font.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_units.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_usetex.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tests/test_widgets.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/texmanager.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/text.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/textpath.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/ticker.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tight_bbox.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tight_layout.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/transforms.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/__pycache__/triangulation.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/__pycache__/tricontour.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/__pycache__/trifinder.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/__pycache__/triinterpolate.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/__pycache__/tripcolor.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/__pycache__/triplot.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/__pycache__/trirefine.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/__pycache__/tritools.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/triangulation.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/tricontour.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/trifinder.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/triinterpolate.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/tripcolor.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/triplot.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/trirefine.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/tri/tritools.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/type1font.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/units.py create mode 100644 .venv/lib/python3.9/site-packages/matplotlib/widgets.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/anchored_artists.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/angle_helper.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/axes_divider.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/axes_grid.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/axes_rgb.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/axes_size.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/axis_artist.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/axisline_style.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/axislines.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/clip_path.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/floating_axes.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/grid_finder.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/grid_helper_curvelinear.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/inset_locator.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/__pycache__/parasite_axes.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/anchored_artists.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/angle_helper.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/axes_divider.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/axes_grid.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/axes_rgb.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/axes_size.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/axis_artist.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/axisline_style.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/axislines.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/clip_path.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/floating_axes.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/grid_finder.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/grid_helper_curvelinear.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/inset_locator.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid/parasite_axes.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/__pycache__/anchored_artists.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/__pycache__/axes_divider.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/__pycache__/axes_grid.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/__pycache__/axes_rgb.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/__pycache__/axes_size.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/__pycache__/inset_locator.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/__pycache__/mpl_axes.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/__pycache__/parasite_axes.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/anchored_artists.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/axes_divider.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/axes_grid.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/axes_rgb.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/axes_size.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/inset_locator.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/mpl_axes.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axes_grid1/parasite_axes.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/__pycache__/angle_helper.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/__pycache__/axes_divider.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/__pycache__/axes_grid.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/__pycache__/axes_rgb.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/__pycache__/axis_artist.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/__pycache__/axisline_style.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/__pycache__/axislines.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/__pycache__/clip_path.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/__pycache__/floating_axes.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/__pycache__/grid_finder.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/__pycache__/grid_helper_curvelinear.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/__pycache__/parasite_axes.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/angle_helper.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/axes_divider.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/axes_grid.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/axes_rgb.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/axis_artist.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/axisline_style.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/axislines.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/clip_path.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/floating_axes.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/grid_finder.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/grid_helper_curvelinear.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/axisartist/parasite_axes.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/mplot3d/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/mplot3d/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/mplot3d/__pycache__/art3d.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/mplot3d/__pycache__/axes3d.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/mplot3d/__pycache__/axis3d.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/mplot3d/__pycache__/proj3d.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/mplot3d/art3d.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/mplot3d/axes3d.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/mplot3d/axis3d.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/mplot3d/proj3d.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/__pycache__/conftest.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/__pycache__/test_axes_grid.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/__pycache__/test_axes_grid1.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/__pycache__/test_axisartist_angle_helper.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/__pycache__/test_axisartist_axis_artist.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/__pycache__/test_axisartist_axislines.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/__pycache__/test_axisartist_clip_path.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/__pycache__/test_axisartist_floating_axes.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/__pycache__/test_axisartist_grid_finder.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/__pycache__/test_axisartist_grid_helper_curvelinear.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/__pycache__/test_mplot3d.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/conftest.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/test_axes_grid.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/test_axes_grid1.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/test_axisartist_angle_helper.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/test_axisartist_axis_artist.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/test_axisartist_axislines.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/test_axisartist_clip_path.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/test_axisartist_floating_axes.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/test_axisartist_grid_finder.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/test_axisartist_grid_helper_curvelinear.py create mode 100644 .venv/lib/python3.9/site-packages/mpl_toolkits/tests/test_mplot3d.py create mode 100644 .venv/lib/python3.9/site-packages/packaging-21.3.dist-info/INSTALLER create mode 100644 .venv/lib/python3.9/site-packages/packaging-21.3.dist-info/LICENSE create mode 100644 .venv/lib/python3.9/site-packages/packaging-21.3.dist-info/LICENSE.APACHE create mode 100644 .venv/lib/python3.9/site-packages/packaging-21.3.dist-info/LICENSE.BSD create mode 100644 .venv/lib/python3.9/site-packages/packaging-21.3.dist-info/METADATA create mode 100644 .venv/lib/python3.9/site-packages/packaging-21.3.dist-info/RECORD create mode 100644 .venv/lib/python3.9/site-packages/packaging-21.3.dist-info/WHEEL create mode 100644 .venv/lib/python3.9/site-packages/packaging-21.3.dist-info/top_level.txt create mode 100644 .venv/lib/python3.9/site-packages/packaging/__about__.py create mode 100644 .venv/lib/python3.9/site-packages/packaging/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/packaging/__pycache__/__about__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/packaging/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/packaging/__pycache__/_manylinux.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/packaging/__pycache__/_musllinux.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/packaging/__pycache__/_structures.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/packaging/__pycache__/markers.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/packaging/__pycache__/requirements.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/packaging/__pycache__/specifiers.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/packaging/__pycache__/tags.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/packaging/__pycache__/utils.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/packaging/__pycache__/version.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/packaging/_manylinux.py create mode 100644 .venv/lib/python3.9/site-packages/packaging/_musllinux.py create mode 100644 .venv/lib/python3.9/site-packages/packaging/_structures.py create mode 100644 .venv/lib/python3.9/site-packages/packaging/markers.py create mode 100644 .venv/lib/python3.9/site-packages/packaging/py.typed create mode 100644 .venv/lib/python3.9/site-packages/packaging/requirements.py create mode 100644 .venv/lib/python3.9/site-packages/packaging/specifiers.py create mode 100644 .venv/lib/python3.9/site-packages/packaging/tags.py create mode 100644 .venv/lib/python3.9/site-packages/packaging/utils.py create mode 100644 .venv/lib/python3.9/site-packages/packaging/version.py create mode 100644 .venv/lib/python3.9/site-packages/pylab.py create mode 100644 .venv/lib/python3.9/site-packages/pyparsing-3.0.6.dist-info/INSTALLER create mode 100644 .venv/lib/python3.9/site-packages/pyparsing-3.0.6.dist-info/LICENSE create mode 100644 .venv/lib/python3.9/site-packages/pyparsing-3.0.6.dist-info/METADATA create mode 100644 .venv/lib/python3.9/site-packages/pyparsing-3.0.6.dist-info/RECORD create mode 100644 .venv/lib/python3.9/site-packages/pyparsing-3.0.6.dist-info/WHEEL create mode 100644 .venv/lib/python3.9/site-packages/pyparsing-3.0.6.dist-info/top_level.txt create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/__pycache__/actions.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/__pycache__/common.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/__pycache__/core.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/__pycache__/exceptions.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/__pycache__/helpers.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/__pycache__/results.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/__pycache__/testing.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/__pycache__/unicode.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/__pycache__/util.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/actions.py create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/common.py create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/core.py create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/diagram/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/diagram/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/diagram/template.jinja2 create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/exceptions.py create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/helpers.py create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/results.py create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/testing.py create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/unicode.py create mode 100644 .venv/lib/python3.9/site-packages/pyparsing/util.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm-6.3.2.dist-info/INSTALLER create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm-6.3.2.dist-info/LICENSE create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm-6.3.2.dist-info/METADATA create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm-6.3.2.dist-info/RECORD create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm-6.3.2.dist-info/WHEEL create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm-6.3.2.dist-info/entry_points.txt create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm-6.3.2.dist-info/top_level.txt create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm-6.3.2.dist-info/zip-safe create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__main__.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/__main__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/_version_cls.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/config.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/discover.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/file_finder.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/file_finder_git.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/file_finder_hg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/git.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/hacks.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/hg.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/hg_git.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/integration.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/scm_workdir.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/utils.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/__pycache__/version.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/_version_cls.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/config.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/discover.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/file_finder.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/file_finder_git.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/file_finder_hg.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/git.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/hacks.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/hg.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/hg_git.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/integration.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/scm_workdir.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/utils.py create mode 100644 .venv/lib/python3.9/site-packages/setuptools_scm/version.py create mode 100644 .venv/lib/python3.9/site-packages/tomli-1.2.2.dist-info/INSTALLER create mode 100644 .venv/lib/python3.9/site-packages/tomli-1.2.2.dist-info/LICENSE create mode 100644 .venv/lib/python3.9/site-packages/tomli-1.2.2.dist-info/METADATA create mode 100644 .venv/lib/python3.9/site-packages/tomli-1.2.2.dist-info/RECORD create mode 100644 .venv/lib/python3.9/site-packages/tomli-1.2.2.dist-info/WHEEL create mode 100644 .venv/lib/python3.9/site-packages/tomli/__init__.py create mode 100644 .venv/lib/python3.9/site-packages/tomli/__pycache__/__init__.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/tomli/__pycache__/_parser.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/tomli/__pycache__/_re.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/tomli/__pycache__/_types.cpython-39.pyc create mode 100644 .venv/lib/python3.9/site-packages/tomli/_parser.py create mode 100644 .venv/lib/python3.9/site-packages/tomli/_re.py create mode 100644 .venv/lib/python3.9/site-packages/tomli/_types.py create mode 100644 .venv/lib/python3.9/site-packages/tomli/py.typed create mode 100644 .venv/share/man/man1/ttx.1 diff --git a/.venv/bin/fonttools b/.venv/bin/fonttools new file mode 100644 index 00000000..aa7f8487 --- /dev/null +++ b/.venv/bin/fonttools @@ -0,0 +1,8 @@ +#!/media/HardDrive/Pyhton/School/.venv/bin/python +# -*- coding: utf-8 -*- +import re +import sys +from fontTools.__main__ import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/.venv/bin/pyftmerge b/.venv/bin/pyftmerge new file mode 100644 index 00000000..47adbc13 --- /dev/null +++ b/.venv/bin/pyftmerge @@ -0,0 +1,8 @@ +#!/media/HardDrive/Pyhton/School/.venv/bin/python +# -*- coding: utf-8 -*- +import re +import sys +from fontTools.merge import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/.venv/bin/pyftsubset b/.venv/bin/pyftsubset new file mode 100644 index 00000000..99d8ff45 --- /dev/null +++ b/.venv/bin/pyftsubset @@ -0,0 +1,8 @@ +#!/media/HardDrive/Pyhton/School/.venv/bin/python +# -*- coding: utf-8 -*- +import re +import sys +from fontTools.subset import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/.venv/bin/ttx b/.venv/bin/ttx new file mode 100644 index 00000000..172b9823 --- /dev/null +++ b/.venv/bin/ttx @@ -0,0 +1,8 @@ +#!/media/HardDrive/Pyhton/School/.venv/bin/python +# -*- coding: utf-8 -*- +import re +import sys +from fontTools.ttx import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/.venv/lib/python3.9/site-packages/PIL/BdfFontFile.py b/.venv/lib/python3.9/site-packages/PIL/BdfFontFile.py new file mode 100644 index 00000000..102b72e1 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/BdfFontFile.py @@ -0,0 +1,110 @@ +# +# The Python Imaging Library +# $Id$ +# +# bitmap distribution font (bdf) file parser +# +# history: +# 1996-05-16 fl created (as bdf2pil) +# 1997-08-25 fl converted to FontFile driver +# 2001-05-25 fl removed bogus __init__ call +# 2002-11-20 fl robustification (from Kevin Cazabon, Dmitry Vasiliev) +# 2003-04-22 fl more robustification (from Graham Dumpleton) +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1997-2003 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +""" +Parse X Bitmap Distribution Format (BDF) +""" + + +from . import FontFile, Image + +bdf_slant = { + "R": "Roman", + "I": "Italic", + "O": "Oblique", + "RI": "Reverse Italic", + "RO": "Reverse Oblique", + "OT": "Other", +} + +bdf_spacing = {"P": "Proportional", "M": "Monospaced", "C": "Cell"} + + +def bdf_char(f): + # skip to STARTCHAR + while True: + s = f.readline() + if not s: + return None + if s[:9] == b"STARTCHAR": + break + id = s[9:].strip().decode("ascii") + + # load symbol properties + props = {} + while True: + s = f.readline() + if not s or s[:6] == b"BITMAP": + break + i = s.find(b" ") + props[s[:i].decode("ascii")] = s[i + 1 : -1].decode("ascii") + + # load bitmap + bitmap = [] + while True: + s = f.readline() + if not s or s[:7] == b"ENDCHAR": + break + bitmap.append(s[:-1]) + bitmap = b"".join(bitmap) + + [x, y, l, d] = [int(p) for p in props["BBX"].split()] + [dx, dy] = [int(p) for p in props["DWIDTH"].split()] + + bbox = (dx, dy), (l, -d - y, x + l, -d), (0, 0, x, y) + + try: + im = Image.frombytes("1", (x, y), bitmap, "hex", "1") + except ValueError: + # deal with zero-width characters + im = Image.new("1", (x, y)) + + return id, int(props["ENCODING"]), bbox, im + + +class BdfFontFile(FontFile.FontFile): + """Font file plugin for the X11 BDF format.""" + + def __init__(self, fp): + super().__init__() + + s = fp.readline() + if s[:13] != b"STARTFONT 2.1": + raise SyntaxError("not a valid BDF file") + + props = {} + comments = [] + + while True: + s = fp.readline() + if not s or s[:13] == b"ENDPROPERTIES": + break + i = s.find(b" ") + props[s[:i].decode("ascii")] = s[i + 1 : -1].decode("ascii") + if s[:i] in [b"COMMENT", b"COPYRIGHT"]: + if s.find(b"LogicalFontDescription") < 0: + comments.append(s[i + 1 : -1].decode("ascii")) + + while True: + c = bdf_char(fp) + if not c: + break + id, ch, (xy, dst, src), im = c + if 0 <= ch < len(self.glyph): + self.glyph[ch] = xy, dst, src, im diff --git a/.venv/lib/python3.9/site-packages/PIL/BlpImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/BlpImagePlugin.py new file mode 100644 index 00000000..7b78597b --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/BlpImagePlugin.py @@ -0,0 +1,428 @@ +""" +Blizzard Mipmap Format (.blp) +Jerome Leclanche + +The contents of this file are hereby released in the public domain (CC0) +Full text of the CC0 license: + https://creativecommons.org/publicdomain/zero/1.0/ + +BLP1 files, used mostly in Warcraft III, are not fully supported. +All types of BLP2 files used in World of Warcraft are supported. + +The BLP file structure consists of a header, up to 16 mipmaps of the +texture + +Texture sizes must be powers of two, though the two dimensions do +not have to be equal; 512x256 is valid, but 512x200 is not. +The first mipmap (mipmap #0) is the full size image; each subsequent +mipmap halves both dimensions. The final mipmap should be 1x1. + +BLP files come in many different flavours: +* JPEG-compressed (type == 0) - only supported for BLP1. +* RAW images (type == 1, encoding == 1). Each mipmap is stored as an + array of 8-bit values, one per pixel, left to right, top to bottom. + Each value is an index to the palette. +* DXT-compressed (type == 1, encoding == 2): +- DXT1 compression is used if alpha_encoding == 0. + - An additional alpha bit is used if alpha_depth == 1. + - DXT3 compression is used if alpha_encoding == 1. + - DXT5 compression is used if alpha_encoding == 7. +""" + +import struct +from io import BytesIO + +from . import Image, ImageFile + +BLP_FORMAT_JPEG = 0 + +BLP_ENCODING_UNCOMPRESSED = 1 +BLP_ENCODING_DXT = 2 +BLP_ENCODING_UNCOMPRESSED_RAW_BGRA = 3 + +BLP_ALPHA_ENCODING_DXT1 = 0 +BLP_ALPHA_ENCODING_DXT3 = 1 +BLP_ALPHA_ENCODING_DXT5 = 7 + + +def unpack_565(i): + return (((i >> 11) & 0x1F) << 3, ((i >> 5) & 0x3F) << 2, (i & 0x1F) << 3) + + +def decode_dxt1(data, alpha=False): + """ + input: one "row" of data (i.e. will produce 4*width pixels) + """ + + blocks = len(data) // 8 # number of blocks in row + ret = (bytearray(), bytearray(), bytearray(), bytearray()) + + for block in range(blocks): + # Decode next 8-byte block. + idx = block * 8 + color0, color1, bits = struct.unpack_from("> 2 + + a = 0xFF + if control == 0: + r, g, b = r0, g0, b0 + elif control == 1: + r, g, b = r1, g1, b1 + elif control == 2: + if color0 > color1: + r = (2 * r0 + r1) // 3 + g = (2 * g0 + g1) // 3 + b = (2 * b0 + b1) // 3 + else: + r = (r0 + r1) // 2 + g = (g0 + g1) // 2 + b = (b0 + b1) // 2 + elif control == 3: + if color0 > color1: + r = (2 * r1 + r0) // 3 + g = (2 * g1 + g0) // 3 + b = (2 * b1 + b0) // 3 + else: + r, g, b, a = 0, 0, 0, 0 + + if alpha: + ret[j].extend([r, g, b, a]) + else: + ret[j].extend([r, g, b]) + + return ret + + +def decode_dxt3(data): + """ + input: one "row" of data (i.e. will produce 4*width pixels) + """ + + blocks = len(data) // 16 # number of blocks in row + ret = (bytearray(), bytearray(), bytearray(), bytearray()) + + for block in range(blocks): + idx = block * 16 + block = data[idx : idx + 16] + # Decode next 16-byte block. + bits = struct.unpack_from("<8B", block) + color0, color1 = struct.unpack_from(">= 4 + else: + high = True + a &= 0xF + a *= 17 # We get a value between 0 and 15 + + color_code = (code >> 2 * (4 * j + i)) & 0x03 + + if color_code == 0: + r, g, b = r0, g0, b0 + elif color_code == 1: + r, g, b = r1, g1, b1 + elif color_code == 2: + r = (2 * r0 + r1) // 3 + g = (2 * g0 + g1) // 3 + b = (2 * b0 + b1) // 3 + elif color_code == 3: + r = (2 * r1 + r0) // 3 + g = (2 * g1 + g0) // 3 + b = (2 * b1 + b0) // 3 + + ret[j].extend([r, g, b, a]) + + return ret + + +def decode_dxt5(data): + """ + input: one "row" of data (i.e. will produce 4 * width pixels) + """ + + blocks = len(data) // 16 # number of blocks in row + ret = (bytearray(), bytearray(), bytearray(), bytearray()) + + for block in range(blocks): + idx = block * 16 + block = data[idx : idx + 16] + # Decode next 16-byte block. + a0, a1 = struct.unpack_from("> alphacode_index) & 0x07 + elif alphacode_index == 15: + alphacode = (alphacode2 >> 15) | ((alphacode1 << 1) & 0x06) + else: # alphacode_index >= 18 and alphacode_index <= 45 + alphacode = (alphacode1 >> (alphacode_index - 16)) & 0x07 + + if alphacode == 0: + a = a0 + elif alphacode == 1: + a = a1 + elif a0 > a1: + a = ((8 - alphacode) * a0 + (alphacode - 1) * a1) // 7 + elif alphacode == 6: + a = 0 + elif alphacode == 7: + a = 255 + else: + a = ((6 - alphacode) * a0 + (alphacode - 1) * a1) // 5 + + color_code = (code >> 2 * (4 * j + i)) & 0x03 + + if color_code == 0: + r, g, b = r0, g0, b0 + elif color_code == 1: + r, g, b = r1, g1, b1 + elif color_code == 2: + r = (2 * r0 + r1) // 3 + g = (2 * g0 + g1) // 3 + b = (2 * b0 + b1) // 3 + elif color_code == 3: + r = (2 * r1 + r0) // 3 + g = (2 * g1 + g0) // 3 + b = (2 * b1 + b0) // 3 + + ret[j].extend([r, g, b, a]) + + return ret + + +class BLPFormatError(NotImplementedError): + pass + + +class BlpImageFile(ImageFile.ImageFile): + """ + Blizzard Mipmap Format + """ + + format = "BLP" + format_description = "Blizzard Mipmap Format" + + def _open(self): + self.magic = self.fp.read(4) + self._read_blp_header() + + if self.magic == b"BLP1": + decoder = "BLP1" + self.mode = "RGB" + elif self.magic == b"BLP2": + decoder = "BLP2" + self.mode = "RGBA" if self._blp_alpha_depth else "RGB" + else: + raise BLPFormatError(f"Bad BLP magic {repr(self.magic)}") + + self.tile = [(decoder, (0, 0) + self.size, 0, (self.mode, 0, 1))] + + def _read_blp_header(self): + (self._blp_compression,) = struct.unpack(" mode, rawmode + 1: ("P", "P;1"), + 4: ("P", "P;4"), + 8: ("P", "P"), + 16: ("RGB", "BGR;15"), + 24: ("RGB", "BGR"), + 32: ("RGB", "BGRX"), +} + + +def _accept(prefix): + return prefix[:2] == b"BM" + + +def _dib_accept(prefix): + return i32(prefix) in [12, 40, 64, 108, 124] + + +# ============================================================================= +# Image plugin for the Windows BMP format. +# ============================================================================= +class BmpImageFile(ImageFile.ImageFile): + """Image plugin for the Windows Bitmap format (BMP)""" + + # ------------------------------------------------------------- Description + format_description = "Windows Bitmap" + format = "BMP" + + # -------------------------------------------------- BMP Compression values + COMPRESSIONS = {"RAW": 0, "RLE8": 1, "RLE4": 2, "BITFIELDS": 3, "JPEG": 4, "PNG": 5} + for k, v in COMPRESSIONS.items(): + vars()[k] = v + + def _bitmap(self, header=0, offset=0): + """Read relevant info about the BMP""" + read, seek = self.fp.read, self.fp.seek + if header: + seek(header) + file_info = {} + # read bmp header size @offset 14 (this is part of the header size) + file_info["header_size"] = i32(read(4)) + file_info["direction"] = -1 + + # -------------------- If requested, read header at a specific position + # read the rest of the bmp header, without its size + header_data = ImageFile._safe_read(self.fp, file_info["header_size"] - 4) + + # -------------------------------------------------- IBM OS/2 Bitmap v1 + # ----- This format has different offsets because of width/height types + if file_info["header_size"] == 12: + file_info["width"] = i16(header_data, 0) + file_info["height"] = i16(header_data, 2) + file_info["planes"] = i16(header_data, 4) + file_info["bits"] = i16(header_data, 6) + file_info["compression"] = self.RAW + file_info["palette_padding"] = 3 + + # --------------------------------------------- Windows Bitmap v2 to v5 + # v3, OS/2 v2, v4, v5 + elif file_info["header_size"] in (40, 64, 108, 124): + file_info["y_flip"] = header_data[7] == 0xFF + file_info["direction"] = 1 if file_info["y_flip"] else -1 + file_info["width"] = i32(header_data, 0) + file_info["height"] = ( + i32(header_data, 4) + if not file_info["y_flip"] + else 2 ** 32 - i32(header_data, 4) + ) + file_info["planes"] = i16(header_data, 8) + file_info["bits"] = i16(header_data, 10) + file_info["compression"] = i32(header_data, 12) + # byte size of pixel data + file_info["data_size"] = i32(header_data, 16) + file_info["pixels_per_meter"] = ( + i32(header_data, 20), + i32(header_data, 24), + ) + file_info["colors"] = i32(header_data, 28) + file_info["palette_padding"] = 4 + self.info["dpi"] = tuple(x / 39.3701 for x in file_info["pixels_per_meter"]) + if file_info["compression"] == self.BITFIELDS: + if len(header_data) >= 52: + for idx, mask in enumerate( + ["r_mask", "g_mask", "b_mask", "a_mask"] + ): + file_info[mask] = i32(header_data, 36 + idx * 4) + else: + # 40 byte headers only have the three components in the + # bitfields masks, ref: + # https://msdn.microsoft.com/en-us/library/windows/desktop/dd183376(v=vs.85).aspx + # See also + # https://github.com/python-pillow/Pillow/issues/1293 + # There is a 4th component in the RGBQuad, in the alpha + # location, but it is listed as a reserved component, + # and it is not generally an alpha channel + file_info["a_mask"] = 0x0 + for mask in ["r_mask", "g_mask", "b_mask"]: + file_info[mask] = i32(read(4)) + file_info["rgb_mask"] = ( + file_info["r_mask"], + file_info["g_mask"], + file_info["b_mask"], + ) + file_info["rgba_mask"] = ( + file_info["r_mask"], + file_info["g_mask"], + file_info["b_mask"], + file_info["a_mask"], + ) + else: + raise OSError(f"Unsupported BMP header type ({file_info['header_size']})") + + # ------------------ Special case : header is reported 40, which + # ---------------------- is shorter than real size for bpp >= 16 + self._size = file_info["width"], file_info["height"] + + # ------- If color count was not found in the header, compute from bits + file_info["colors"] = ( + file_info["colors"] + if file_info.get("colors", 0) + else (1 << file_info["bits"]) + ) + + # ---------------------- Check bit depth for unusual unsupported values + self.mode, raw_mode = BIT2MODE.get(file_info["bits"], (None, None)) + if self.mode is None: + raise OSError(f"Unsupported BMP pixel depth ({file_info['bits']})") + + # ---------------- Process BMP with Bitfields compression (not palette) + if file_info["compression"] == self.BITFIELDS: + SUPPORTED = { + 32: [ + (0xFF0000, 0xFF00, 0xFF, 0x0), + (0xFF0000, 0xFF00, 0xFF, 0xFF000000), + (0xFF, 0xFF00, 0xFF0000, 0xFF000000), + (0x0, 0x0, 0x0, 0x0), + (0xFF000000, 0xFF0000, 0xFF00, 0x0), + ], + 24: [(0xFF0000, 0xFF00, 0xFF)], + 16: [(0xF800, 0x7E0, 0x1F), (0x7C00, 0x3E0, 0x1F)], + } + MASK_MODES = { + (32, (0xFF0000, 0xFF00, 0xFF, 0x0)): "BGRX", + (32, (0xFF000000, 0xFF0000, 0xFF00, 0x0)): "XBGR", + (32, (0xFF, 0xFF00, 0xFF0000, 0xFF000000)): "RGBA", + (32, (0xFF0000, 0xFF00, 0xFF, 0xFF000000)): "BGRA", + (32, (0x0, 0x0, 0x0, 0x0)): "BGRA", + (24, (0xFF0000, 0xFF00, 0xFF)): "BGR", + (16, (0xF800, 0x7E0, 0x1F)): "BGR;16", + (16, (0x7C00, 0x3E0, 0x1F)): "BGR;15", + } + if file_info["bits"] in SUPPORTED: + if ( + file_info["bits"] == 32 + and file_info["rgba_mask"] in SUPPORTED[file_info["bits"]] + ): + raw_mode = MASK_MODES[(file_info["bits"], file_info["rgba_mask"])] + self.mode = "RGBA" if "A" in raw_mode else self.mode + elif ( + file_info["bits"] in (24, 16) + and file_info["rgb_mask"] in SUPPORTED[file_info["bits"]] + ): + raw_mode = MASK_MODES[(file_info["bits"], file_info["rgb_mask"])] + else: + raise OSError("Unsupported BMP bitfields layout") + else: + raise OSError("Unsupported BMP bitfields layout") + elif file_info["compression"] == self.RAW: + if file_info["bits"] == 32 and header == 22: # 32-bit .cur offset + raw_mode, self.mode = "BGRA", "RGBA" + else: + raise OSError(f"Unsupported BMP compression ({file_info['compression']})") + + # --------------- Once the header is processed, process the palette/LUT + if self.mode == "P": # Paletted for 1, 4 and 8 bit images + + # ---------------------------------------------------- 1-bit images + if not (0 < file_info["colors"] <= 65536): + raise OSError(f"Unsupported BMP Palette size ({file_info['colors']})") + else: + padding = file_info["palette_padding"] + palette = read(padding * file_info["colors"]) + greyscale = True + indices = ( + (0, 255) + if file_info["colors"] == 2 + else list(range(file_info["colors"])) + ) + + # ----------------- Check if greyscale and ignore palette if so + for ind, val in enumerate(indices): + rgb = palette[ind * padding : ind * padding + 3] + if rgb != o8(val) * 3: + greyscale = False + + # ------- If all colors are grey, white or black, ditch palette + if greyscale: + self.mode = "1" if file_info["colors"] == 2 else "L" + raw_mode = self.mode + else: + self.mode = "P" + self.palette = ImagePalette.raw( + "BGRX" if padding == 4 else "BGR", palette + ) + + # ---------------------------- Finally set the tile data for the plugin + self.info["compression"] = file_info["compression"] + self.tile = [ + ( + "raw", + (0, 0, file_info["width"], file_info["height"]), + offset or self.fp.tell(), + ( + raw_mode, + ((file_info["width"] * file_info["bits"] + 31) >> 3) & (~3), + file_info["direction"], + ), + ) + ] + + def _open(self): + """Open file, check magic number and read header""" + # read 14 bytes: magic number, filesize, reserved, header final offset + head_data = self.fp.read(14) + # choke if the file does not have the required magic bytes + if not _accept(head_data): + raise SyntaxError("Not a BMP file") + # read the start position of the BMP image data (u32) + offset = i32(head_data, 10) + # load bitmap information (offset=raster info) + self._bitmap(offset=offset) + + +# ============================================================================= +# Image plugin for the DIB format (BMP alias) +# ============================================================================= +class DibImageFile(BmpImageFile): + + format = "DIB" + format_description = "Windows Bitmap" + + def _open(self): + self._bitmap() + + +# +# -------------------------------------------------------------------- +# Write BMP file + + +SAVE = { + "1": ("1", 1, 2), + "L": ("L", 8, 256), + "P": ("P", 8, 256), + "RGB": ("BGR", 24, 0), + "RGBA": ("BGRA", 32, 0), +} + + +def _dib_save(im, fp, filename): + _save(im, fp, filename, False) + + +def _save(im, fp, filename, bitmap_header=True): + try: + rawmode, bits, colors = SAVE[im.mode] + except KeyError as e: + raise OSError(f"cannot write mode {im.mode} as BMP") from e + + info = im.encoderinfo + + dpi = info.get("dpi", (96, 96)) + + # 1 meter == 39.3701 inches + ppm = tuple(map(lambda x: int(x * 39.3701 + 0.5), dpi)) + + stride = ((im.size[0] * bits + 7) // 8 + 3) & (~3) + header = 40 # or 64 for OS/2 version 2 + image = stride * im.size[1] + + # bitmap header + if bitmap_header: + offset = 14 + header + colors * 4 + file_size = offset + image + if file_size > 2 ** 32 - 1: + raise ValueError("File size is too large for the BMP format") + fp.write( + b"BM" # file type (magic) + + o32(file_size) # file size + + o32(0) # reserved + + o32(offset) # image data offset + ) + + # bitmap info header + fp.write( + o32(header) # info header size + + o32(im.size[0]) # width + + o32(im.size[1]) # height + + o16(1) # planes + + o16(bits) # depth + + o32(0) # compression (0=uncompressed) + + o32(image) # size of bitmap + + o32(ppm[0]) # resolution + + o32(ppm[1]) # resolution + + o32(colors) # colors used + + o32(colors) # colors important + ) + + fp.write(b"\0" * (header - 40)) # padding (for OS/2 format) + + if im.mode == "1": + for i in (0, 255): + fp.write(o8(i) * 4) + elif im.mode == "L": + for i in range(256): + fp.write(o8(i) * 4) + elif im.mode == "P": + fp.write(im.im.getpalette("RGB", "BGRX")) + + ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, stride, -1))]) + + +# +# -------------------------------------------------------------------- +# Registry + + +Image.register_open(BmpImageFile.format, BmpImageFile, _accept) +Image.register_save(BmpImageFile.format, _save) + +Image.register_extension(BmpImageFile.format, ".bmp") + +Image.register_mime(BmpImageFile.format, "image/bmp") + +Image.register_open(DibImageFile.format, DibImageFile, _dib_accept) +Image.register_save(DibImageFile.format, _dib_save) + +Image.register_extension(DibImageFile.format, ".dib") + +Image.register_mime(DibImageFile.format, "image/bmp") diff --git a/.venv/lib/python3.9/site-packages/PIL/BufrStubImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/BufrStubImagePlugin.py new file mode 100644 index 00000000..48f21e1b --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/BufrStubImagePlugin.py @@ -0,0 +1,73 @@ +# +# The Python Imaging Library +# $Id$ +# +# BUFR stub adapter +# +# Copyright (c) 1996-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from . import Image, ImageFile + +_handler = None + + +def register_handler(handler): + """ + Install application-specific BUFR image handler. + + :param handler: Handler object. + """ + global _handler + _handler = handler + + +# -------------------------------------------------------------------- +# Image adapter + + +def _accept(prefix): + return prefix[:4] == b"BUFR" or prefix[:4] == b"ZCZC" + + +class BufrStubImageFile(ImageFile.StubImageFile): + + format = "BUFR" + format_description = "BUFR" + + def _open(self): + + offset = self.fp.tell() + + if not _accept(self.fp.read(4)): + raise SyntaxError("Not a BUFR file") + + self.fp.seek(offset) + + # make something up + self.mode = "F" + self._size = 1, 1 + + loader = self._load() + if loader: + loader.open(self) + + def _load(self): + return _handler + + +def _save(im, fp, filename): + if _handler is None or not hasattr("_handler", "save"): + raise OSError("BUFR save handler not installed") + _handler.save(im, fp, filename) + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(BufrStubImageFile.format, BufrStubImageFile, _accept) +Image.register_save(BufrStubImageFile.format, _save) + +Image.register_extension(BufrStubImageFile.format, ".bufr") diff --git a/.venv/lib/python3.9/site-packages/PIL/ContainerIO.py b/.venv/lib/python3.9/site-packages/PIL/ContainerIO.py new file mode 100644 index 00000000..45e80b39 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ContainerIO.py @@ -0,0 +1,120 @@ +# +# The Python Imaging Library. +# $Id$ +# +# a class to read from a container file +# +# History: +# 1995-06-18 fl Created +# 1995-09-07 fl Added readline(), readlines() +# +# Copyright (c) 1997-2001 by Secret Labs AB +# Copyright (c) 1995 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + + +import io + + +class ContainerIO: + """ + A file object that provides read access to a part of an existing + file (for example a TAR file). + """ + + def __init__(self, file, offset, length): + """ + Create file object. + + :param file: Existing file. + :param offset: Start of region, in bytes. + :param length: Size of region, in bytes. + """ + self.fh = file + self.pos = 0 + self.offset = offset + self.length = length + self.fh.seek(offset) + + ## + # Always false. + + def isatty(self): + return False + + def seek(self, offset, mode=io.SEEK_SET): + """ + Move file pointer. + + :param offset: Offset in bytes. + :param mode: Starting position. Use 0 for beginning of region, 1 + for current offset, and 2 for end of region. You cannot move + the pointer outside the defined region. + """ + if mode == 1: + self.pos = self.pos + offset + elif mode == 2: + self.pos = self.length + offset + else: + self.pos = offset + # clamp + self.pos = max(0, min(self.pos, self.length)) + self.fh.seek(self.offset + self.pos) + + def tell(self): + """ + Get current file pointer. + + :returns: Offset from start of region, in bytes. + """ + return self.pos + + def read(self, n=0): + """ + Read data. + + :param n: Number of bytes to read. If omitted or zero, + read until end of region. + :returns: An 8-bit string. + """ + if n: + n = min(n, self.length - self.pos) + else: + n = self.length - self.pos + if not n: # EOF + return b"" if "b" in self.fh.mode else "" + self.pos = self.pos + n + return self.fh.read(n) + + def readline(self): + """ + Read a line of text. + + :returns: An 8-bit string. + """ + s = b"" if "b" in self.fh.mode else "" + newline_character = b"\n" if "b" in self.fh.mode else "\n" + while True: + c = self.read(1) + if not c: + break + s = s + c + if c == newline_character: + break + return s + + def readlines(self): + """ + Read multiple lines of text. + + :returns: A list of 8-bit strings. + """ + lines = [] + while True: + s = self.readline() + if not s: + break + lines.append(s) + return lines diff --git a/.venv/lib/python3.9/site-packages/PIL/CurImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/CurImagePlugin.py new file mode 100644 index 00000000..42af5caf --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/CurImagePlugin.py @@ -0,0 +1,75 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Windows Cursor support for PIL +# +# notes: +# uses BmpImagePlugin.py to read the bitmap data. +# +# history: +# 96-05-27 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# +from . import BmpImagePlugin, Image +from ._binary import i16le as i16 +from ._binary import i32le as i32 + +# +# -------------------------------------------------------------------- + + +def _accept(prefix): + return prefix[:4] == b"\0\0\2\0" + + +## +# Image plugin for Windows Cursor files. + + +class CurImageFile(BmpImagePlugin.BmpImageFile): + + format = "CUR" + format_description = "Windows Cursor" + + def _open(self): + + offset = self.fp.tell() + + # check magic + s = self.fp.read(6) + if not _accept(s): + raise SyntaxError("not a CUR file") + + # pick the largest cursor in the file + m = b"" + for i in range(i16(s, 4)): + s = self.fp.read(16) + if not m: + m = s + elif s[0] > m[0] and s[1] > m[1]: + m = s + if not m: + raise TypeError("No cursors were found") + + # load as bitmap + self._bitmap(i32(m, 12) + offset) + + # patch up the bitmap height + self._size = self.size[0], self.size[1] // 2 + d, e, o, a = self.tile[0] + self.tile[0] = d, (0, 0) + self.size, o, a + + return + + +# +# -------------------------------------------------------------------- + +Image.register_open(CurImageFile.format, CurImageFile, _accept) + +Image.register_extension(CurImageFile.format, ".cur") diff --git a/.venv/lib/python3.9/site-packages/PIL/DcxImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/DcxImagePlugin.py new file mode 100644 index 00000000..de21db8f --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/DcxImagePlugin.py @@ -0,0 +1,89 @@ +# +# The Python Imaging Library. +# $Id$ +# +# DCX file handling +# +# DCX is a container file format defined by Intel, commonly used +# for fax applications. Each DCX file consists of a directory +# (a list of file offsets) followed by a set of (usually 1-bit) +# PCX files. +# +# History: +# 1995-09-09 fl Created +# 1996-03-20 fl Properly derived from PcxImageFile. +# 1998-07-15 fl Renamed offset attribute to avoid name clash +# 2002-07-30 fl Fixed file handling +# +# Copyright (c) 1997-98 by Secret Labs AB. +# Copyright (c) 1995-96 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +from . import Image +from ._binary import i32le as i32 +from .PcxImagePlugin import PcxImageFile + +MAGIC = 0x3ADE68B1 # QUIZ: what's this value, then? + + +def _accept(prefix): + return len(prefix) >= 4 and i32(prefix) == MAGIC + + +## +# Image plugin for the Intel DCX format. + + +class DcxImageFile(PcxImageFile): + + format = "DCX" + format_description = "Intel DCX" + _close_exclusive_fp_after_loading = False + + def _open(self): + + # Header + s = self.fp.read(4) + if not _accept(s): + raise SyntaxError("not a DCX file") + + # Component directory + self._offset = [] + for i in range(1024): + offset = i32(self.fp.read(4)) + if not offset: + break + self._offset.append(offset) + + self.__fp = self.fp + self.frame = None + self.n_frames = len(self._offset) + self.is_animated = self.n_frames > 1 + self.seek(0) + + def seek(self, frame): + if not self._seek_check(frame): + return + self.frame = frame + self.fp = self.__fp + self.fp.seek(self._offset[frame]) + PcxImageFile._open(self) + + def tell(self): + return self.frame + + def _close__fp(self): + try: + if self.__fp != self.fp: + self.__fp.close() + except AttributeError: + pass + finally: + self.__fp = None + + +Image.register_open(DcxImageFile.format, DcxImageFile, _accept) + +Image.register_extension(DcxImageFile.format, ".dcx") diff --git a/.venv/lib/python3.9/site-packages/PIL/DdsImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/DdsImagePlugin.py new file mode 100644 index 00000000..260924fc --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/DdsImagePlugin.py @@ -0,0 +1,247 @@ +""" +A Pillow loader for .dds files (S3TC-compressed aka DXTC) +Jerome Leclanche + +Documentation: + https://web.archive.org/web/20170802060935/http://oss.sgi.com/projects/ogl-sample/registry/EXT/texture_compression_s3tc.txt + +The contents of this file are hereby released in the public domain (CC0) +Full text of the CC0 license: + https://creativecommons.org/publicdomain/zero/1.0/ +""" + +import struct +from io import BytesIO + +from . import Image, ImageFile +from ._binary import o32le as o32 + +# Magic ("DDS ") +DDS_MAGIC = 0x20534444 + +# DDS flags +DDSD_CAPS = 0x1 +DDSD_HEIGHT = 0x2 +DDSD_WIDTH = 0x4 +DDSD_PITCH = 0x8 +DDSD_PIXELFORMAT = 0x1000 +DDSD_MIPMAPCOUNT = 0x20000 +DDSD_LINEARSIZE = 0x80000 +DDSD_DEPTH = 0x800000 + +# DDS caps +DDSCAPS_COMPLEX = 0x8 +DDSCAPS_TEXTURE = 0x1000 +DDSCAPS_MIPMAP = 0x400000 + +DDSCAPS2_CUBEMAP = 0x200 +DDSCAPS2_CUBEMAP_POSITIVEX = 0x400 +DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800 +DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000 +DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000 +DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000 +DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000 +DDSCAPS2_VOLUME = 0x200000 + +# Pixel Format +DDPF_ALPHAPIXELS = 0x1 +DDPF_ALPHA = 0x2 +DDPF_FOURCC = 0x4 +DDPF_PALETTEINDEXED8 = 0x20 +DDPF_RGB = 0x40 +DDPF_LUMINANCE = 0x20000 + + +# dds.h + +DDS_FOURCC = DDPF_FOURCC +DDS_RGB = DDPF_RGB +DDS_RGBA = DDPF_RGB | DDPF_ALPHAPIXELS +DDS_LUMINANCE = DDPF_LUMINANCE +DDS_LUMINANCEA = DDPF_LUMINANCE | DDPF_ALPHAPIXELS +DDS_ALPHA = DDPF_ALPHA +DDS_PAL8 = DDPF_PALETTEINDEXED8 + +DDS_HEADER_FLAGS_TEXTURE = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT +DDS_HEADER_FLAGS_MIPMAP = DDSD_MIPMAPCOUNT +DDS_HEADER_FLAGS_VOLUME = DDSD_DEPTH +DDS_HEADER_FLAGS_PITCH = DDSD_PITCH +DDS_HEADER_FLAGS_LINEARSIZE = DDSD_LINEARSIZE + +DDS_HEIGHT = DDSD_HEIGHT +DDS_WIDTH = DDSD_WIDTH + +DDS_SURFACE_FLAGS_TEXTURE = DDSCAPS_TEXTURE +DDS_SURFACE_FLAGS_MIPMAP = DDSCAPS_COMPLEX | DDSCAPS_MIPMAP +DDS_SURFACE_FLAGS_CUBEMAP = DDSCAPS_COMPLEX + +DDS_CUBEMAP_POSITIVEX = DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX +DDS_CUBEMAP_NEGATIVEX = DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX +DDS_CUBEMAP_POSITIVEY = DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY +DDS_CUBEMAP_NEGATIVEY = DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY +DDS_CUBEMAP_POSITIVEZ = DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ +DDS_CUBEMAP_NEGATIVEZ = DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ + + +# DXT1 +DXT1_FOURCC = 0x31545844 + +# DXT3 +DXT3_FOURCC = 0x33545844 + +# DXT5 +DXT5_FOURCC = 0x35545844 + + +# dxgiformat.h + +DXGI_FORMAT_R8G8B8A8_TYPELESS = 27 +DXGI_FORMAT_R8G8B8A8_UNORM = 28 +DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29 +DXGI_FORMAT_BC5_TYPELESS = 82 +DXGI_FORMAT_BC5_UNORM = 83 +DXGI_FORMAT_BC5_SNORM = 84 +DXGI_FORMAT_BC7_TYPELESS = 97 +DXGI_FORMAT_BC7_UNORM = 98 +DXGI_FORMAT_BC7_UNORM_SRGB = 99 + + +class DdsImageFile(ImageFile.ImageFile): + format = "DDS" + format_description = "DirectDraw Surface" + + def _open(self): + magic, header_size = struct.unpack(" 0: + s = fp.read(min(lengthfile, 100 * 1024)) + if not s: + break + lengthfile -= len(s) + f.write(s) + + device = "pngalpha" if transparency else "ppmraw" + + # Build Ghostscript command + command = [ + "gs", + "-q", # quiet mode + "-g%dx%d" % size, # set output geometry (pixels) + "-r%fx%f" % res, # set input DPI (dots per inch) + "-dBATCH", # exit after processing + "-dNOPAUSE", # don't pause between pages + "-dSAFER", # safe mode + f"-sDEVICE={device}", + f"-sOutputFile={outfile}", # output file + # adjust for image origin + "-c", + f"{-bbox[0]} {-bbox[1]} translate", + "-f", + infile, # input file + # showpage (see https://bugs.ghostscript.com/show_bug.cgi?id=698272) + "-c", + "showpage", + ] + + if gs_windows_binary is not None: + if not gs_windows_binary: + raise OSError("Unable to locate Ghostscript on paths") + command[0] = gs_windows_binary + + # push data through Ghostscript + try: + startupinfo = None + if sys.platform.startswith("win"): + startupinfo = subprocess.STARTUPINFO() + startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW + subprocess.check_call(command, startupinfo=startupinfo) + out_im = Image.open(outfile) + out_im.load() + finally: + try: + os.unlink(outfile) + if infile_temp: + os.unlink(infile_temp) + except OSError: + pass + + im = out_im.im.copy() + out_im.close() + return im + + +class PSFile: + """ + Wrapper for bytesio object that treats either CR or LF as end of line. + """ + + def __init__(self, fp): + self.fp = fp + self.char = None + + def seek(self, offset, whence=io.SEEK_SET): + self.char = None + self.fp.seek(offset, whence) + + def readline(self): + s = [self.char or b""] + self.char = None + + c = self.fp.read(1) + while (c not in b"\r\n") and len(c): + s.append(c) + c = self.fp.read(1) + + self.char = self.fp.read(1) + # line endings can be 1 or 2 of \r \n, in either order + if self.char in b"\r\n": + self.char = None + + return b"".join(s).decode("latin-1") + + +def _accept(prefix): + return prefix[:4] == b"%!PS" or (len(prefix) >= 4 and i32(prefix) == 0xC6D3D0C5) + + +## +# Image plugin for Encapsulated PostScript. This plugin supports only +# a few variants of this format. + + +class EpsImageFile(ImageFile.ImageFile): + """EPS File Parser for the Python Imaging Library""" + + format = "EPS" + format_description = "Encapsulated Postscript" + + mode_map = {1: "L", 2: "LAB", 3: "RGB", 4: "CMYK"} + + def _open(self): + (length, offset) = self._find_offset(self.fp) + + # Rewrap the open file pointer in something that will + # convert line endings and decode to latin-1. + fp = PSFile(self.fp) + + # go to offset - start of "%!PS" + fp.seek(offset) + + box = None + + self.mode = "RGB" + self._size = 1, 1 # FIXME: huh? + + # + # Load EPS header + + s_raw = fp.readline() + s = s_raw.strip("\r\n") + + while s_raw: + if s: + if len(s) > 255: + raise SyntaxError("not an EPS file") + + try: + m = split.match(s) + except re.error as e: + raise SyntaxError("not an EPS file") from e + + if m: + k, v = m.group(1, 2) + self.info[k] = v + if k == "BoundingBox": + try: + # Note: The DSC spec says that BoundingBox + # fields should be integers, but some drivers + # put floating point values there anyway. + box = [int(float(i)) for i in v.split()] + self._size = box[2] - box[0], box[3] - box[1] + self.tile = [ + ("eps", (0, 0) + self.size, offset, (length, box)) + ] + except Exception: + pass + + else: + m = field.match(s) + if m: + k = m.group(1) + + if k == "EndComments": + break + if k[:8] == "PS-Adobe": + self.info[k[:8]] = k[9:] + else: + self.info[k] = "" + elif s[0] == "%": + # handle non-DSC PostScript comments that some + # tools mistakenly put in the Comments section + pass + else: + raise OSError("bad EPS header") + + s_raw = fp.readline() + s = s_raw.strip("\r\n") + + if s and s[:1] != "%": + break + + # + # Scan for an "ImageData" descriptor + + while s[:1] == "%": + + if len(s) > 255: + raise SyntaxError("not an EPS file") + + if s[:11] == "%ImageData:": + # Encoded bitmapped image. + x, y, bi, mo = s[11:].split(None, 7)[:4] + + if int(bi) != 8: + break + try: + self.mode = self.mode_map[int(mo)] + except ValueError: + break + + self._size = int(x), int(y) + return + + s = fp.readline().strip("\r\n") + if not s: + break + + if not box: + raise OSError("cannot determine EPS bounding box") + + def _find_offset(self, fp): + + s = fp.read(160) + + if s[:4] == b"%!PS": + # for HEAD without binary preview + fp.seek(0, io.SEEK_END) + length = fp.tell() + offset = 0 + elif i32(s, 0) == 0xC6D3D0C5: + # FIX for: Some EPS file not handled correctly / issue #302 + # EPS can contain binary data + # or start directly with latin coding + # more info see: + # https://web.archive.org/web/20160528181353/http://partners.adobe.com/public/developer/en/ps/5002.EPSF_Spec.pdf + offset = i32(s, 4) + length = i32(s, 8) + else: + raise SyntaxError("not an EPS file") + + return (length, offset) + + def load(self, scale=1, transparency=False): + # Load EPS via Ghostscript + if not self.tile: + return + self.im = Ghostscript(self.tile, self.size, self.fp, scale, transparency) + self.mode = self.im.mode + self._size = self.im.size + self.tile = [] + + def load_seek(self, *args, **kwargs): + # we can't incrementally load, so force ImageFile.parser to + # use our custom load method by defining this method. + pass + + +# +# -------------------------------------------------------------------- + + +def _save(im, fp, filename, eps=1): + """EPS Writer for the Python Imaging Library.""" + + # + # make sure image data is available + im.load() + + # + # determine PostScript image mode + if im.mode == "L": + operator = (8, 1, b"image") + elif im.mode == "RGB": + operator = (8, 3, b"false 3 colorimage") + elif im.mode == "CMYK": + operator = (8, 4, b"false 4 colorimage") + else: + raise ValueError("image mode is not supported") + + if eps: + # + # write EPS header + fp.write(b"%!PS-Adobe-3.0 EPSF-3.0\n") + fp.write(b"%%Creator: PIL 0.1 EpsEncode\n") + # fp.write("%%CreationDate: %s"...) + fp.write(b"%%%%BoundingBox: 0 0 %d %d\n" % im.size) + fp.write(b"%%Pages: 1\n") + fp.write(b"%%EndComments\n") + fp.write(b"%%Page: 1 1\n") + fp.write(b"%%ImageData: %d %d " % im.size) + fp.write(b'%d %d 0 1 1 "%s"\n' % operator) + + # + # image header + fp.write(b"gsave\n") + fp.write(b"10 dict begin\n") + fp.write(b"/buf %d string def\n" % (im.size[0] * operator[1])) + fp.write(b"%d %d scale\n" % im.size) + fp.write(b"%d %d 8\n" % im.size) # <= bits + fp.write(b"[%d 0 0 -%d 0 %d]\n" % (im.size[0], im.size[1], im.size[1])) + fp.write(b"{ currentfile buf readhexstring pop } bind\n") + fp.write(operator[2] + b"\n") + if hasattr(fp, "flush"): + fp.flush() + + ImageFile._save(im, fp, [("eps", (0, 0) + im.size, 0, None)]) + + fp.write(b"\n%%%%EndBinary\n") + fp.write(b"grestore end\n") + if hasattr(fp, "flush"): + fp.flush() + + +# +# -------------------------------------------------------------------- + + +Image.register_open(EpsImageFile.format, EpsImageFile, _accept) + +Image.register_save(EpsImageFile.format, _save) + +Image.register_extensions(EpsImageFile.format, [".ps", ".eps"]) + +Image.register_mime(EpsImageFile.format, "application/postscript") diff --git a/.venv/lib/python3.9/site-packages/PIL/ExifTags.py b/.venv/lib/python3.9/site-packages/PIL/ExifTags.py new file mode 100644 index 00000000..7da2ddae --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ExifTags.py @@ -0,0 +1,331 @@ +# +# The Python Imaging Library. +# $Id$ +# +# EXIF tags +# +# Copyright (c) 2003 by Secret Labs AB +# +# See the README file for information on usage and redistribution. +# + +""" +This module provides constants and clear-text names for various +well-known EXIF tags. +""" + + +TAGS = { + # possibly incomplete + 0x0001: "InteropIndex", + 0x000B: "ProcessingSoftware", + 0x00FE: "NewSubfileType", + 0x00FF: "SubfileType", + 0x0100: "ImageWidth", + 0x0101: "ImageLength", + 0x0102: "BitsPerSample", + 0x0103: "Compression", + 0x0106: "PhotometricInterpretation", + 0x0107: "Thresholding", + 0x0108: "CellWidth", + 0x0109: "CellLength", + 0x010A: "FillOrder", + 0x010D: "DocumentName", + 0x010E: "ImageDescription", + 0x010F: "Make", + 0x0110: "Model", + 0x0111: "StripOffsets", + 0x0112: "Orientation", + 0x0115: "SamplesPerPixel", + 0x0116: "RowsPerStrip", + 0x0117: "StripByteCounts", + 0x0118: "MinSampleValue", + 0x0119: "MaxSampleValue", + 0x011A: "XResolution", + 0x011B: "YResolution", + 0x011C: "PlanarConfiguration", + 0x011D: "PageName", + 0x0120: "FreeOffsets", + 0x0121: "FreeByteCounts", + 0x0122: "GrayResponseUnit", + 0x0123: "GrayResponseCurve", + 0x0124: "T4Options", + 0x0125: "T6Options", + 0x0128: "ResolutionUnit", + 0x0129: "PageNumber", + 0x012D: "TransferFunction", + 0x0131: "Software", + 0x0132: "DateTime", + 0x013B: "Artist", + 0x013C: "HostComputer", + 0x013D: "Predictor", + 0x013E: "WhitePoint", + 0x013F: "PrimaryChromaticities", + 0x0140: "ColorMap", + 0x0141: "HalftoneHints", + 0x0142: "TileWidth", + 0x0143: "TileLength", + 0x0144: "TileOffsets", + 0x0145: "TileByteCounts", + 0x014A: "SubIFDs", + 0x014C: "InkSet", + 0x014D: "InkNames", + 0x014E: "NumberOfInks", + 0x0150: "DotRange", + 0x0151: "TargetPrinter", + 0x0152: "ExtraSamples", + 0x0153: "SampleFormat", + 0x0154: "SMinSampleValue", + 0x0155: "SMaxSampleValue", + 0x0156: "TransferRange", + 0x0157: "ClipPath", + 0x0158: "XClipPathUnits", + 0x0159: "YClipPathUnits", + 0x015A: "Indexed", + 0x015B: "JPEGTables", + 0x015F: "OPIProxy", + 0x0200: "JPEGProc", + 0x0201: "JpegIFOffset", + 0x0202: "JpegIFByteCount", + 0x0203: "JpegRestartInterval", + 0x0205: "JpegLosslessPredictors", + 0x0206: "JpegPointTransforms", + 0x0207: "JpegQTables", + 0x0208: "JpegDCTables", + 0x0209: "JpegACTables", + 0x0211: "YCbCrCoefficients", + 0x0212: "YCbCrSubSampling", + 0x0213: "YCbCrPositioning", + 0x0214: "ReferenceBlackWhite", + 0x02BC: "XMLPacket", + 0x1000: "RelatedImageFileFormat", + 0x1001: "RelatedImageWidth", + 0x1002: "RelatedImageLength", + 0x4746: "Rating", + 0x4749: "RatingPercent", + 0x800D: "ImageID", + 0x828D: "CFARepeatPatternDim", + 0x828E: "CFAPattern", + 0x828F: "BatteryLevel", + 0x8298: "Copyright", + 0x829A: "ExposureTime", + 0x829D: "FNumber", + 0x83BB: "IPTCNAA", + 0x8649: "ImageResources", + 0x8769: "ExifOffset", + 0x8773: "InterColorProfile", + 0x8822: "ExposureProgram", + 0x8824: "SpectralSensitivity", + 0x8825: "GPSInfo", + 0x8827: "ISOSpeedRatings", + 0x8828: "OECF", + 0x8829: "Interlace", + 0x882A: "TimeZoneOffset", + 0x882B: "SelfTimerMode", + 0x8830: "SensitivityType", + 0x8831: "StandardOutputSensitivity", + 0x8832: "RecommendedExposureIndex", + 0x8833: "ISOSpeed", + 0x8834: "ISOSpeedLatitudeyyy", + 0x8835: "ISOSpeedLatitudezzz", + 0x9000: "ExifVersion", + 0x9003: "DateTimeOriginal", + 0x9004: "DateTimeDigitized", + 0x9010: "OffsetTime", + 0x9011: "OffsetTimeOriginal", + 0x9012: "OffsetTimeDigitized", + 0x9101: "ComponentsConfiguration", + 0x9102: "CompressedBitsPerPixel", + 0x9201: "ShutterSpeedValue", + 0x9202: "ApertureValue", + 0x9203: "BrightnessValue", + 0x9204: "ExposureBiasValue", + 0x9205: "MaxApertureValue", + 0x9206: "SubjectDistance", + 0x9207: "MeteringMode", + 0x9208: "LightSource", + 0x9209: "Flash", + 0x920A: "FocalLength", + 0x920B: "FlashEnergy", + 0x920C: "SpatialFrequencyResponse", + 0x920D: "Noise", + 0x9211: "ImageNumber", + 0x9212: "SecurityClassification", + 0x9213: "ImageHistory", + 0x9214: "SubjectLocation", + 0x9215: "ExposureIndex", + 0x9216: "TIFF/EPStandardID", + 0x927C: "MakerNote", + 0x9286: "UserComment", + 0x9290: "SubsecTime", + 0x9291: "SubsecTimeOriginal", + 0x9292: "SubsecTimeDigitized", + 0x9400: "AmbientTemperature", + 0x9401: "Humidity", + 0x9402: "Pressure", + 0x9403: "WaterDepth", + 0x9404: "Acceleration", + 0x9405: "CameraElevationAngle", + 0x9C9B: "XPTitle", + 0x9C9C: "XPComment", + 0x9C9D: "XPAuthor", + 0x9C9E: "XPKeywords", + 0x9C9F: "XPSubject", + 0xA000: "FlashPixVersion", + 0xA001: "ColorSpace", + 0xA002: "ExifImageWidth", + 0xA003: "ExifImageHeight", + 0xA004: "RelatedSoundFile", + 0xA005: "ExifInteroperabilityOffset", + 0xA20B: "FlashEnergy", + 0xA20C: "SpatialFrequencyResponse", + 0xA20E: "FocalPlaneXResolution", + 0xA20F: "FocalPlaneYResolution", + 0xA210: "FocalPlaneResolutionUnit", + 0xA214: "SubjectLocation", + 0xA215: "ExposureIndex", + 0xA217: "SensingMethod", + 0xA300: "FileSource", + 0xA301: "SceneType", + 0xA302: "CFAPattern", + 0xA401: "CustomRendered", + 0xA402: "ExposureMode", + 0xA403: "WhiteBalance", + 0xA404: "DigitalZoomRatio", + 0xA405: "FocalLengthIn35mmFilm", + 0xA406: "SceneCaptureType", + 0xA407: "GainControl", + 0xA408: "Contrast", + 0xA409: "Saturation", + 0xA40A: "Sharpness", + 0xA40B: "DeviceSettingDescription", + 0xA40C: "SubjectDistanceRange", + 0xA420: "ImageUniqueID", + 0xA430: "CameraOwnerName", + 0xA431: "BodySerialNumber", + 0xA432: "LensSpecification", + 0xA433: "LensMake", + 0xA434: "LensModel", + 0xA435: "LensSerialNumber", + 0xA460: "CompositeImage", + 0xA461: "CompositeImageCount", + 0xA462: "CompositeImageExposureTimes", + 0xA500: "Gamma", + 0xC4A5: "PrintImageMatching", + 0xC612: "DNGVersion", + 0xC613: "DNGBackwardVersion", + 0xC614: "UniqueCameraModel", + 0xC615: "LocalizedCameraModel", + 0xC616: "CFAPlaneColor", + 0xC617: "CFALayout", + 0xC618: "LinearizationTable", + 0xC619: "BlackLevelRepeatDim", + 0xC61A: "BlackLevel", + 0xC61B: "BlackLevelDeltaH", + 0xC61C: "BlackLevelDeltaV", + 0xC61D: "WhiteLevel", + 0xC61E: "DefaultScale", + 0xC61F: "DefaultCropOrigin", + 0xC620: "DefaultCropSize", + 0xC621: "ColorMatrix1", + 0xC622: "ColorMatrix2", + 0xC623: "CameraCalibration1", + 0xC624: "CameraCalibration2", + 0xC625: "ReductionMatrix1", + 0xC626: "ReductionMatrix2", + 0xC627: "AnalogBalance", + 0xC628: "AsShotNeutral", + 0xC629: "AsShotWhiteXY", + 0xC62A: "BaselineExposure", + 0xC62B: "BaselineNoise", + 0xC62C: "BaselineSharpness", + 0xC62D: "BayerGreenSplit", + 0xC62E: "LinearResponseLimit", + 0xC62F: "CameraSerialNumber", + 0xC630: "LensInfo", + 0xC631: "ChromaBlurRadius", + 0xC632: "AntiAliasStrength", + 0xC633: "ShadowScale", + 0xC634: "DNGPrivateData", + 0xC635: "MakerNoteSafety", + 0xC65A: "CalibrationIlluminant1", + 0xC65B: "CalibrationIlluminant2", + 0xC65C: "BestQualityScale", + 0xC65D: "RawDataUniqueID", + 0xC68B: "OriginalRawFileName", + 0xC68C: "OriginalRawFileData", + 0xC68D: "ActiveArea", + 0xC68E: "MaskedAreas", + 0xC68F: "AsShotICCProfile", + 0xC690: "AsShotPreProfileMatrix", + 0xC691: "CurrentICCProfile", + 0xC692: "CurrentPreProfileMatrix", + 0xC6BF: "ColorimetricReference", + 0xC6F3: "CameraCalibrationSignature", + 0xC6F4: "ProfileCalibrationSignature", + 0xC6F6: "AsShotProfileName", + 0xC6F7: "NoiseReductionApplied", + 0xC6F8: "ProfileName", + 0xC6F9: "ProfileHueSatMapDims", + 0xC6FA: "ProfileHueSatMapData1", + 0xC6FB: "ProfileHueSatMapData2", + 0xC6FC: "ProfileToneCurve", + 0xC6FD: "ProfileEmbedPolicy", + 0xC6FE: "ProfileCopyright", + 0xC714: "ForwardMatrix1", + 0xC715: "ForwardMatrix2", + 0xC716: "PreviewApplicationName", + 0xC717: "PreviewApplicationVersion", + 0xC718: "PreviewSettingsName", + 0xC719: "PreviewSettingsDigest", + 0xC71A: "PreviewColorSpace", + 0xC71B: "PreviewDateTime", + 0xC71C: "RawImageDigest", + 0xC71D: "OriginalRawFileDigest", + 0xC71E: "SubTileBlockSize", + 0xC71F: "RowInterleaveFactor", + 0xC725: "ProfileLookTableDims", + 0xC726: "ProfileLookTableData", + 0xC740: "OpcodeList1", + 0xC741: "OpcodeList2", + 0xC74E: "OpcodeList3", + 0xC761: "NoiseProfile", +} +"""Maps EXIF tags to tag names.""" + + +GPSTAGS = { + 0: "GPSVersionID", + 1: "GPSLatitudeRef", + 2: "GPSLatitude", + 3: "GPSLongitudeRef", + 4: "GPSLongitude", + 5: "GPSAltitudeRef", + 6: "GPSAltitude", + 7: "GPSTimeStamp", + 8: "GPSSatellites", + 9: "GPSStatus", + 10: "GPSMeasureMode", + 11: "GPSDOP", + 12: "GPSSpeedRef", + 13: "GPSSpeed", + 14: "GPSTrackRef", + 15: "GPSTrack", + 16: "GPSImgDirectionRef", + 17: "GPSImgDirection", + 18: "GPSMapDatum", + 19: "GPSDestLatitudeRef", + 20: "GPSDestLatitude", + 21: "GPSDestLongitudeRef", + 22: "GPSDestLongitude", + 23: "GPSDestBearingRef", + 24: "GPSDestBearing", + 25: "GPSDestDistanceRef", + 26: "GPSDestDistance", + 27: "GPSProcessingMethod", + 28: "GPSAreaInformation", + 29: "GPSDateStamp", + 30: "GPSDifferential", + 31: "GPSHPositioningError", +} +"""Maps EXIF GPS tags to tag names.""" diff --git a/.venv/lib/python3.9/site-packages/PIL/FitsStubImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/FitsStubImagePlugin.py new file mode 100644 index 00000000..a3a94cf4 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/FitsStubImagePlugin.py @@ -0,0 +1,100 @@ +# +# The Python Imaging Library +# $Id$ +# +# FITS stub adapter +# +# Copyright (c) 1998-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from . import Image, ImageFile + +_handler = None + + +def register_handler(handler): + """ + Install application-specific FITS image handler. + + :param handler: Handler object. + """ + global _handler + _handler = handler + + +# -------------------------------------------------------------------- +# Image adapter + + +def _accept(prefix): + return prefix[:6] == b"SIMPLE" + + +class FITSStubImageFile(ImageFile.StubImageFile): + + format = "FITS" + format_description = "FITS" + + def _open(self): + offset = self.fp.tell() + + headers = {} + while True: + header = self.fp.read(80) + if not header: + raise OSError("Truncated FITS file") + keyword = header[:8].strip() + if keyword == b"END": + break + value = header[8:].strip() + if value.startswith(b"="): + value = value[1:].strip() + if not headers and (not _accept(keyword) or value != b"T"): + raise SyntaxError("Not a FITS file") + headers[keyword] = value + + naxis = int(headers[b"NAXIS"]) + if naxis == 0: + raise ValueError("No image data") + elif naxis == 1: + self._size = 1, int(headers[b"NAXIS1"]) + else: + self._size = int(headers[b"NAXIS1"]), int(headers[b"NAXIS2"]) + + number_of_bits = int(headers[b"BITPIX"]) + if number_of_bits == 8: + self.mode = "L" + elif number_of_bits == 16: + self.mode = "I" + # rawmode = "I;16S" + elif number_of_bits == 32: + self.mode = "I" + elif number_of_bits in (-32, -64): + self.mode = "F" + # rawmode = "F" if number_of_bits == -32 else "F;64F" + + self.fp.seek(offset) + + loader = self._load() + if loader: + loader.open(self) + + def _load(self): + return _handler + + +def _save(im, fp, filename): + if _handler is None or not hasattr("_handler", "save"): + raise OSError("FITS save handler not installed") + _handler.save(im, fp, filename) + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(FITSStubImageFile.format, FITSStubImageFile, _accept) +Image.register_save(FITSStubImageFile.format, _save) + +Image.register_extensions(FITSStubImageFile.format, [".fit", ".fits"]) diff --git a/.venv/lib/python3.9/site-packages/PIL/FliImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/FliImagePlugin.py new file mode 100644 index 00000000..f2d4857f --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/FliImagePlugin.py @@ -0,0 +1,171 @@ +# +# The Python Imaging Library. +# $Id$ +# +# FLI/FLC file handling. +# +# History: +# 95-09-01 fl Created +# 97-01-03 fl Fixed parser, setup decoder tile +# 98-07-15 fl Renamed offset attribute to avoid name clash +# +# Copyright (c) Secret Labs AB 1997-98. +# Copyright (c) Fredrik Lundh 1995-97. +# +# See the README file for information on usage and redistribution. +# + + +from . import Image, ImageFile, ImagePalette +from ._binary import i16le as i16 +from ._binary import i32le as i32 +from ._binary import o8 + +# +# decoder + + +def _accept(prefix): + return len(prefix) >= 6 and i16(prefix, 4) in [0xAF11, 0xAF12] + + +## +# Image plugin for the FLI/FLC animation format. Use the seek +# method to load individual frames. + + +class FliImageFile(ImageFile.ImageFile): + + format = "FLI" + format_description = "Autodesk FLI/FLC Animation" + _close_exclusive_fp_after_loading = False + + def _open(self): + + # HEAD + s = self.fp.read(128) + if not ( + _accept(s) + and i16(s, 14) in [0, 3] # flags + and s[20:22] == b"\x00\x00" # reserved + ): + raise SyntaxError("not an FLI/FLC file") + + # frames + self.n_frames = i16(s, 6) + self.is_animated = self.n_frames > 1 + + # image characteristics + self.mode = "P" + self._size = i16(s, 8), i16(s, 10) + + # animation speed + duration = i32(s, 16) + magic = i16(s, 4) + if magic == 0xAF11: + duration = (duration * 1000) // 70 + self.info["duration"] = duration + + # look for palette + palette = [(a, a, a) for a in range(256)] + + s = self.fp.read(16) + + self.__offset = 128 + + if i16(s, 4) == 0xF100: + # prefix chunk; ignore it + self.__offset = self.__offset + i32(s) + s = self.fp.read(16) + + if i16(s, 4) == 0xF1FA: + # look for palette chunk + s = self.fp.read(6) + if i16(s, 4) == 11: + self._palette(palette, 2) + elif i16(s, 4) == 4: + self._palette(palette, 0) + + palette = [o8(r) + o8(g) + o8(b) for (r, g, b) in palette] + self.palette = ImagePalette.raw("RGB", b"".join(palette)) + + # set things up to decode first frame + self.__frame = -1 + self.__fp = self.fp + self.__rewind = self.fp.tell() + self.seek(0) + + def _palette(self, palette, shift): + # load palette + + i = 0 + for e in range(i16(self.fp.read(2))): + s = self.fp.read(2) + i = i + s[0] + n = s[1] + if n == 0: + n = 256 + s = self.fp.read(n * 3) + for n in range(0, len(s), 3): + r = s[n] << shift + g = s[n + 1] << shift + b = s[n + 2] << shift + palette[i] = (r, g, b) + i += 1 + + def seek(self, frame): + if not self._seek_check(frame): + return + if frame < self.__frame: + self._seek(0) + + for f in range(self.__frame + 1, frame + 1): + self._seek(f) + + def _seek(self, frame): + if frame == 0: + self.__frame = -1 + self.__fp.seek(self.__rewind) + self.__offset = 128 + else: + # ensure that the previous frame was loaded + self.load() + + if frame != self.__frame + 1: + raise ValueError(f"cannot seek to frame {frame}") + self.__frame = frame + + # move to next frame + self.fp = self.__fp + self.fp.seek(self.__offset) + + s = self.fp.read(4) + if not s: + raise EOFError + + framesize = i32(s) + + self.decodermaxblock = framesize + self.tile = [("fli", (0, 0) + self.size, self.__offset, None)] + + self.__offset += framesize + + def tell(self): + return self.__frame + + def _close__fp(self): + try: + if self.__fp != self.fp: + self.__fp.close() + except AttributeError: + pass + finally: + self.__fp = None + + +# +# registry + +Image.register_open(FliImageFile.format, FliImageFile, _accept) + +Image.register_extensions(FliImageFile.format, [".fli", ".flc"]) diff --git a/.venv/lib/python3.9/site-packages/PIL/FontFile.py b/.venv/lib/python3.9/site-packages/PIL/FontFile.py new file mode 100644 index 00000000..c5fc80b3 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/FontFile.py @@ -0,0 +1,111 @@ +# +# The Python Imaging Library +# $Id$ +# +# base class for raster font file parsers +# +# history: +# 1997-06-05 fl created +# 1997-08-19 fl restrict image width +# +# Copyright (c) 1997-1998 by Secret Labs AB +# Copyright (c) 1997-1998 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + + +import os + +from . import Image, _binary + +WIDTH = 800 + + +def puti16(fp, values): + """Write network order (big-endian) 16-bit sequence""" + for v in values: + if v < 0: + v += 65536 + fp.write(_binary.o16be(v)) + + +class FontFile: + """Base class for raster font file handlers.""" + + bitmap = None + + def __init__(self): + + self.info = {} + self.glyph = [None] * 256 + + def __getitem__(self, ix): + return self.glyph[ix] + + def compile(self): + """Create metrics and bitmap""" + + if self.bitmap: + return + + # create bitmap large enough to hold all data + h = w = maxwidth = 0 + lines = 1 + for glyph in self: + if glyph: + d, dst, src, im = glyph + h = max(h, src[3] - src[1]) + w = w + (src[2] - src[0]) + if w > WIDTH: + lines += 1 + w = src[2] - src[0] + maxwidth = max(maxwidth, w) + + xsize = maxwidth + ysize = lines * h + + if xsize == 0 and ysize == 0: + return "" + + self.ysize = h + + # paste glyphs into bitmap + self.bitmap = Image.new("1", (xsize, ysize)) + self.metrics = [None] * 256 + x = y = 0 + for i in range(256): + glyph = self[i] + if glyph: + d, dst, src, im = glyph + xx = src[2] - src[0] + # yy = src[3] - src[1] + x0, y0 = x, y + x = x + xx + if x > WIDTH: + x, y = 0, y + h + x0, y0 = x, y + x = xx + s = src[0] + x0, src[1] + y0, src[2] + x0, src[3] + y0 + self.bitmap.paste(im.crop(src), s) + self.metrics[i] = d, dst, s + + def save(self, filename): + """Save font""" + + self.compile() + + # font data + self.bitmap.save(os.path.splitext(filename)[0] + ".pbm", "PNG") + + # font metrics + with open(os.path.splitext(filename)[0] + ".pil", "wb") as fp: + fp.write(b"PILfont\n") + fp.write(f";;;;;;{self.ysize};\n".encode("ascii")) # HACK!!! + fp.write(b"DATA\n") + for id in range(256): + m = self.metrics[id] + if not m: + puti16(fp, [0] * 10) + else: + puti16(fp, m[0] + m[1] + m[2]) diff --git a/.venv/lib/python3.9/site-packages/PIL/FpxImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/FpxImagePlugin.py new file mode 100644 index 00000000..5e385469 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/FpxImagePlugin.py @@ -0,0 +1,242 @@ +# +# THIS IS WORK IN PROGRESS +# +# The Python Imaging Library. +# $Id$ +# +# FlashPix support for PIL +# +# History: +# 97-01-25 fl Created (reads uncompressed RGB images only) +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# +import olefile + +from . import Image, ImageFile +from ._binary import i32le as i32 + +# we map from colour field tuples to (mode, rawmode) descriptors +MODES = { + # opacity + (0x00007FFE): ("A", "L"), + # monochrome + (0x00010000,): ("L", "L"), + (0x00018000, 0x00017FFE): ("RGBA", "LA"), + # photo YCC + (0x00020000, 0x00020001, 0x00020002): ("RGB", "YCC;P"), + (0x00028000, 0x00028001, 0x00028002, 0x00027FFE): ("RGBA", "YCCA;P"), + # standard RGB (NIFRGB) + (0x00030000, 0x00030001, 0x00030002): ("RGB", "RGB"), + (0x00038000, 0x00038001, 0x00038002, 0x00037FFE): ("RGBA", "RGBA"), +} + + +# +# -------------------------------------------------------------------- + + +def _accept(prefix): + return prefix[:8] == olefile.MAGIC + + +## +# Image plugin for the FlashPix images. + + +class FpxImageFile(ImageFile.ImageFile): + + format = "FPX" + format_description = "FlashPix" + + def _open(self): + # + # read the OLE directory and see if this is a likely + # to be a FlashPix file + + try: + self.ole = olefile.OleFileIO(self.fp) + except OSError as e: + raise SyntaxError("not an FPX file; invalid OLE file") from e + + if self.ole.root.clsid != "56616700-C154-11CE-8553-00AA00A1F95B": + raise SyntaxError("not an FPX file; bad root CLSID") + + self._open_index(1) + + def _open_index(self, index=1): + # + # get the Image Contents Property Set + + prop = self.ole.getproperties( + [f"Data Object Store {index:06d}", "\005Image Contents"] + ) + + # size (highest resolution) + + self._size = prop[0x1000002], prop[0x1000003] + + size = max(self.size) + i = 1 + while size > 64: + size = size / 2 + i += 1 + self.maxid = i - 1 + + # mode. instead of using a single field for this, flashpix + # requires you to specify the mode for each channel in each + # resolution subimage, and leaves it to the decoder to make + # sure that they all match. for now, we'll cheat and assume + # that this is always the case. + + id = self.maxid << 16 + + s = prop[0x2000002 | id] + + colors = [] + bands = i32(s, 4) + if bands > 4: + raise OSError("Invalid number of bands") + for i in range(bands): + # note: for now, we ignore the "uncalibrated" flag + colors.append(i32(s, 8 + i * 4) & 0x7FFFFFFF) + + self.mode, self.rawmode = MODES[tuple(colors)] + + # load JPEG tables, if any + self.jpeg = {} + for i in range(256): + id = 0x3000001 | (i << 16) + if id in prop: + self.jpeg[i] = prop[id] + + self._open_subimage(1, self.maxid) + + def _open_subimage(self, index=1, subimage=0): + # + # setup tile descriptors for a given subimage + + stream = [ + f"Data Object Store {index:06d}", + f"Resolution {subimage:04d}", + "Subimage 0000 Header", + ] + + fp = self.ole.openstream(stream) + + # skip prefix + fp.read(28) + + # header stream + s = fp.read(36) + + size = i32(s, 4), i32(s, 8) + # tilecount = i32(s, 12) + tilesize = i32(s, 16), i32(s, 20) + # channels = i32(s, 24) + offset = i32(s, 28) + length = i32(s, 32) + + if size != self.size: + raise OSError("subimage mismatch") + + # get tile descriptors + fp.seek(28 + offset) + s = fp.read(i32(s, 12) * length) + + x = y = 0 + xsize, ysize = size + xtile, ytile = tilesize + self.tile = [] + + for i in range(0, len(s), length): + + compression = i32(s, i + 8) + + if compression == 0: + self.tile.append( + ( + "raw", + (x, y, x + xtile, y + ytile), + i32(s, i) + 28, + (self.rawmode), + ) + ) + + elif compression == 1: + + # FIXME: the fill decoder is not implemented + self.tile.append( + ( + "fill", + (x, y, x + xtile, y + ytile), + i32(s, i) + 28, + (self.rawmode, s[12:16]), + ) + ) + + elif compression == 2: + + internal_color_conversion = s[14] + jpeg_tables = s[15] + rawmode = self.rawmode + + if internal_color_conversion: + # The image is stored as usual (usually YCbCr). + if rawmode == "RGBA": + # For "RGBA", data is stored as YCbCrA based on + # negative RGB. The following trick works around + # this problem : + jpegmode, rawmode = "YCbCrK", "CMYK" + else: + jpegmode = None # let the decoder decide + + else: + # The image is stored as defined by rawmode + jpegmode = rawmode + + self.tile.append( + ( + "jpeg", + (x, y, x + xtile, y + ytile), + i32(s, i) + 28, + (rawmode, jpegmode), + ) + ) + + # FIXME: jpeg tables are tile dependent; the prefix + # data must be placed in the tile descriptor itself! + + if jpeg_tables: + self.tile_prefix = self.jpeg[jpeg_tables] + + else: + raise OSError("unknown/invalid compression") + + x = x + xtile + if x >= xsize: + x, y = 0, y + ytile + if y >= ysize: + break # isn't really required + + self.stream = stream + self.fp = None + + def load(self): + + if not self.fp: + self.fp = self.ole.openstream(self.stream[:2] + ["Subimage 0000 Data"]) + + return ImageFile.ImageFile.load(self) + + +# +# -------------------------------------------------------------------- + + +Image.register_open(FpxImageFile.format, FpxImageFile, _accept) + +Image.register_extension(FpxImageFile.format, ".fpx") diff --git a/.venv/lib/python3.9/site-packages/PIL/FtexImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/FtexImagePlugin.py new file mode 100644 index 00000000..3b169038 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/FtexImagePlugin.py @@ -0,0 +1,106 @@ +""" +A Pillow loader for .ftc and .ftu files (FTEX) +Jerome Leclanche + +The contents of this file are hereby released in the public domain (CC0) +Full text of the CC0 license: + https://creativecommons.org/publicdomain/zero/1.0/ + +Independence War 2: Edge Of Chaos - Texture File Format - 16 October 2001 + +The textures used for 3D objects in Independence War 2: Edge Of Chaos are in a +packed custom format called FTEX. This file format uses file extensions FTC +and FTU. +* FTC files are compressed textures (using standard texture compression). +* FTU files are not compressed. +Texture File Format +The FTC and FTU texture files both use the same format. This +has the following structure: +{header} +{format_directory} +{data} +Where: +{header} = { + u32:magic, + u32:version, + u32:width, + u32:height, + u32:mipmap_count, + u32:format_count +} + +* The "magic" number is "FTEX". +* "width" and "height" are the dimensions of the texture. +* "mipmap_count" is the number of mipmaps in the texture. +* "format_count" is the number of texture formats (different versions of the +same texture) in this file. + +{format_directory} = format_count * { u32:format, u32:where } + +The format value is 0 for DXT1 compressed textures and 1 for 24-bit RGB +uncompressed textures. +The texture data for a format starts at the position "where" in the file. + +Each set of texture data in the file has the following structure: +{data} = format_count * { u32:mipmap_size, mipmap_size * { u8 } } +* "mipmap_size" is the number of bytes in that mip level. For compressed +textures this is the size of the texture data compressed with DXT1. For 24 bit +uncompressed textures, this is 3 * width * height. Following this are the image +bytes for that mipmap level. + +Note: All data is stored in little-Endian (Intel) byte order. +""" + +import struct +from io import BytesIO + +from . import Image, ImageFile + +MAGIC = b"FTEX" +FORMAT_DXT1 = 0 +FORMAT_UNCOMPRESSED = 1 + + +class FtexImageFile(ImageFile.ImageFile): + format = "FTEX" + format_description = "Texture File Format (IW2:EOC)" + + def _open(self): + struct.unpack("= 8 and i32(prefix, 0) >= 20 and i32(prefix, 4) in (1, 2) + + +## +# Image plugin for the GIMP brush format. + + +class GbrImageFile(ImageFile.ImageFile): + + format = "GBR" + format_description = "GIMP brush file" + + def _open(self): + header_size = i32(self.fp.read(4)) + version = i32(self.fp.read(4)) + if header_size < 20: + raise SyntaxError("not a GIMP brush") + if version not in (1, 2): + raise SyntaxError(f"Unsupported GIMP brush version: {version}") + + width = i32(self.fp.read(4)) + height = i32(self.fp.read(4)) + color_depth = i32(self.fp.read(4)) + if width <= 0 or height <= 0: + raise SyntaxError("not a GIMP brush") + if color_depth not in (1, 4): + raise SyntaxError(f"Unsupported GIMP brush color depth: {color_depth}") + + if version == 1: + comment_length = header_size - 20 + else: + comment_length = header_size - 28 + magic_number = self.fp.read(4) + if magic_number != b"GIMP": + raise SyntaxError("not a GIMP brush, bad magic number") + self.info["spacing"] = i32(self.fp.read(4)) + + comment = self.fp.read(comment_length)[:-1] + + if color_depth == 1: + self.mode = "L" + else: + self.mode = "RGBA" + + self._size = width, height + + self.info["comment"] = comment + + # Image might not be small + Image._decompression_bomb_check(self.size) + + # Data is an uncompressed block of w * h * bytes/pixel + self._data_size = width * height * color_depth + + def load(self): + if self.im: + # Already loaded + return + + self.im = Image.core.new(self.mode, self.size) + self.frombytes(self.fp.read(self._data_size)) + + +# +# registry + + +Image.register_open(GbrImageFile.format, GbrImageFile, _accept) +Image.register_extension(GbrImageFile.format, ".gbr") diff --git a/.venv/lib/python3.9/site-packages/PIL/GdImageFile.py b/.venv/lib/python3.9/site-packages/PIL/GdImageFile.py new file mode 100644 index 00000000..9c34adaa --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/GdImageFile.py @@ -0,0 +1,90 @@ +# +# The Python Imaging Library. +# $Id$ +# +# GD file handling +# +# History: +# 1996-04-12 fl Created +# +# Copyright (c) 1997 by Secret Labs AB. +# Copyright (c) 1996 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + + +""" +.. note:: + This format cannot be automatically recognized, so the + class is not registered for use with :py:func:`PIL.Image.open()`. To open a + gd file, use the :py:func:`PIL.GdImageFile.open()` function instead. + +.. warning:: + THE GD FORMAT IS NOT DESIGNED FOR DATA INTERCHANGE. This + implementation is provided for convenience and demonstrational + purposes only. +""" + + +from . import ImageFile, ImagePalette, UnidentifiedImageError +from ._binary import i16be as i16 +from ._binary import i32be as i32 + + +class GdImageFile(ImageFile.ImageFile): + """ + Image plugin for the GD uncompressed format. Note that this format + is not supported by the standard :py:func:`PIL.Image.open()` function. To use + this plugin, you have to import the :py:mod:`PIL.GdImageFile` module and + use the :py:func:`PIL.GdImageFile.open()` function. + """ + + format = "GD" + format_description = "GD uncompressed images" + + def _open(self): + + # Header + s = self.fp.read(1037) + + if not i16(s) in [65534, 65535]: + raise SyntaxError("Not a valid GD 2.x .gd file") + + self.mode = "L" # FIXME: "P" + self._size = i16(s, 2), i16(s, 4) + + trueColor = s[6] + trueColorOffset = 2 if trueColor else 0 + + # transparency index + tindex = i32(s, 7 + trueColorOffset) + if tindex < 256: + self.info["transparency"] = tindex + + self.palette = ImagePalette.raw( + "XBGR", s[7 + trueColorOffset + 4 : 7 + trueColorOffset + 4 + 256 * 4] + ) + + self.tile = [ + ("raw", (0, 0) + self.size, 7 + trueColorOffset + 4 + 256 * 4, ("L", 0, 1)) + ] + + +def open(fp, mode="r"): + """ + Load texture from a GD image file. + + :param filename: GD file name, or an opened file handle. + :param mode: Optional mode. In this version, if the mode argument + is given, it must be "r". + :returns: An image instance. + :raises OSError: If the image could not be read. + """ + if mode != "r": + raise ValueError("bad mode") + + try: + return GdImageFile(fp) + except SyntaxError as e: + raise UnidentifiedImageError("cannot identify this image file") from e diff --git a/.venv/lib/python3.9/site-packages/PIL/GifImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/GifImagePlugin.py new file mode 100644 index 00000000..128afc42 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/GifImagePlugin.py @@ -0,0 +1,926 @@ +# +# The Python Imaging Library. +# $Id$ +# +# GIF file handling +# +# History: +# 1995-09-01 fl Created +# 1996-12-14 fl Added interlace support +# 1996-12-30 fl Added animation support +# 1997-01-05 fl Added write support, fixed local colour map bug +# 1997-02-23 fl Make sure to load raster data in getdata() +# 1997-07-05 fl Support external decoder (0.4) +# 1998-07-09 fl Handle all modes when saving (0.5) +# 1998-07-15 fl Renamed offset attribute to avoid name clash +# 2001-04-16 fl Added rewind support (seek to frame 0) (0.6) +# 2001-04-17 fl Added palette optimization (0.7) +# 2002-06-06 fl Added transparency support for save (0.8) +# 2004-02-24 fl Disable interlacing for small images +# +# Copyright (c) 1997-2004 by Secret Labs AB +# Copyright (c) 1995-2004 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import itertools +import math +import os +import subprocess + +from . import Image, ImageChops, ImageFile, ImagePalette, ImageSequence +from ._binary import i16le as i16 +from ._binary import o8 +from ._binary import o16le as o16 + +# -------------------------------------------------------------------- +# Identify/read GIF files + + +def _accept(prefix): + return prefix[:6] in [b"GIF87a", b"GIF89a"] + + +## +# Image plugin for GIF images. This plugin supports both GIF87 and +# GIF89 images. + + +class GifImageFile(ImageFile.ImageFile): + + format = "GIF" + format_description = "Compuserve GIF" + _close_exclusive_fp_after_loading = False + + global_palette = None + + def data(self): + s = self.fp.read(1) + if s and s[0]: + return self.fp.read(s[0]) + return None + + def _open(self): + + # Screen + s = self.fp.read(13) + if not _accept(s): + raise SyntaxError("not a GIF file") + + self.info["version"] = s[:6] + self._size = i16(s, 6), i16(s, 8) + self.tile = [] + flags = s[10] + bits = (flags & 7) + 1 + + if flags & 128: + # get global palette + self.info["background"] = s[11] + # check if palette contains colour indices + p = self.fp.read(3 << bits) + for i in range(0, len(p), 3): + if not (i // 3 == p[i] == p[i + 1] == p[i + 2]): + p = ImagePalette.raw("RGB", p) + self.global_palette = self.palette = p + break + + self.__fp = self.fp # FIXME: hack + self.__rewind = self.fp.tell() + self._n_frames = None + self._is_animated = None + self._seek(0) # get ready to read first frame + + @property + def n_frames(self): + if self._n_frames is None: + current = self.tell() + try: + while True: + self.seek(self.tell() + 1) + except EOFError: + self._n_frames = self.tell() + 1 + self.seek(current) + return self._n_frames + + @property + def is_animated(self): + if self._is_animated is None: + if self._n_frames is not None: + self._is_animated = self._n_frames != 1 + else: + current = self.tell() + + try: + self.seek(1) + self._is_animated = True + except EOFError: + self._is_animated = False + + self.seek(current) + return self._is_animated + + def seek(self, frame): + if not self._seek_check(frame): + return + if frame < self.__frame: + if frame != 0: + self.im = None + self._seek(0) + + last_frame = self.__frame + for f in range(self.__frame + 1, frame + 1): + try: + self._seek(f) + except EOFError as e: + self.seek(last_frame) + raise EOFError("no more images in GIF file") from e + + def _seek(self, frame): + + if frame == 0: + # rewind + self.__offset = 0 + self.dispose = None + self.dispose_extent = [0, 0, 0, 0] # x0, y0, x1, y1 + self.__frame = -1 + self.__fp.seek(self.__rewind) + self.disposal_method = 0 + else: + # ensure that the previous frame was loaded + if self.tile: + self.load() + + if frame != self.__frame + 1: + raise ValueError(f"cannot seek to frame {frame}") + self.__frame = frame + + self.tile = [] + + self.fp = self.__fp + if self.__offset: + # backup to last frame + self.fp.seek(self.__offset) + while self.data(): + pass + self.__offset = 0 + + if self.dispose: + self.im.paste(self.dispose, self.dispose_extent) + + from copy import copy + + self.palette = copy(self.global_palette) + + info = {} + frame_transparency = None + interlace = None + while True: + + s = self.fp.read(1) + if not s or s == b";": + break + + elif s == b"!": + # + # extensions + # + s = self.fp.read(1) + block = self.data() + if s[0] == 249: + # + # graphic control extension + # + flags = block[0] + if flags & 1: + frame_transparency = block[3] + info["duration"] = i16(block, 1) * 10 + + # disposal method - find the value of bits 4 - 6 + dispose_bits = 0b00011100 & flags + dispose_bits = dispose_bits >> 2 + if dispose_bits: + # only set the dispose if it is not + # unspecified. I'm not sure if this is + # correct, but it seems to prevent the last + # frame from looking odd for some animations + self.disposal_method = dispose_bits + elif s[0] == 254: + # + # comment extension + # + while block: + if "comment" in info: + info["comment"] += block + else: + info["comment"] = block + block = self.data() + continue + elif s[0] == 255: + # + # application extension + # + info["extension"] = block, self.fp.tell() + if block[:11] == b"NETSCAPE2.0": + block = self.data() + if len(block) >= 3 and block[0] == 1: + info["loop"] = i16(block, 1) + while self.data(): + pass + + elif s == b",": + # + # local image + # + s = self.fp.read(9) + + # extent + x0, y0 = i16(s, 0), i16(s, 2) + x1, y1 = x0 + i16(s, 4), y0 + i16(s, 6) + if x1 > self.size[0] or y1 > self.size[1]: + self._size = max(x1, self.size[0]), max(y1, self.size[1]) + self.dispose_extent = x0, y0, x1, y1 + flags = s[8] + + interlace = (flags & 64) != 0 + + if flags & 128: + bits = (flags & 7) + 1 + self.palette = ImagePalette.raw("RGB", self.fp.read(3 << bits)) + + # image data + bits = self.fp.read(1)[0] + self.__offset = self.fp.tell() + break + + else: + pass + # raise OSError, "illegal GIF tag `%x`" % s[0] + + try: + if self.disposal_method < 2: + # do not dispose or none specified + self.dispose = None + elif self.disposal_method == 2: + # replace with background colour + + # only dispose the extent in this frame + x0, y0, x1, y1 = self.dispose_extent + dispose_size = (x1 - x0, y1 - y0) + + Image._decompression_bomb_check(dispose_size) + + # by convention, attempt to use transparency first + color = self.info.get("transparency", frame_transparency) + if color is None: + color = self.info.get("background", 0) + self.dispose = Image.core.fill("P", dispose_size, color) + else: + # replace with previous contents + if self.im: + # only dispose the extent in this frame + self.dispose = self._crop(self.im, self.dispose_extent) + elif frame_transparency is not None: + x0, y0, x1, y1 = self.dispose_extent + dispose_size = (x1 - x0, y1 - y0) + + Image._decompression_bomb_check(dispose_size) + self.dispose = Image.core.fill( + "P", dispose_size, frame_transparency + ) + except AttributeError: + pass + + if interlace is not None: + transparency = -1 + if frame_transparency is not None: + if frame == 0: + self.info["transparency"] = frame_transparency + else: + transparency = frame_transparency + self.tile = [ + ( + "gif", + (x0, y0, x1, y1), + self.__offset, + (bits, interlace, transparency), + ) + ] + else: + # self.__fp = None + raise EOFError + + for k in ["duration", "comment", "extension", "loop"]: + if k in info: + self.info[k] = info[k] + elif k in self.info: + del self.info[k] + + self.mode = "L" + if self.palette: + self.mode = "P" + + def load_prepare(self): + if not self.im and "transparency" in self.info: + self.im = Image.core.fill(self.mode, self.size, self.info["transparency"]) + + super(GifImageFile, self).load_prepare() + + def tell(self): + return self.__frame + + def _close__fp(self): + try: + if self.__fp != self.fp: + self.__fp.close() + except AttributeError: + pass + finally: + self.__fp = None + + +# -------------------------------------------------------------------- +# Write GIF files + + +RAWMODE = {"1": "L", "L": "L", "P": "P"} + + +def _normalize_mode(im, initial_call=False): + """ + Takes an image (or frame), returns an image in a mode that is appropriate + for saving in a Gif. + + It may return the original image, or it may return an image converted to + palette or 'L' mode. + + UNDONE: What is the point of mucking with the initial call palette, for + an image that shouldn't have a palette, or it would be a mode 'P' and + get returned in the RAWMODE clause. + + :param im: Image object + :param initial_call: Default false, set to true for a single frame. + :returns: Image object + """ + if im.mode in RAWMODE: + im.load() + return im + if Image.getmodebase(im.mode) == "RGB": + if initial_call: + palette_size = 256 + if im.palette: + palette_size = len(im.palette.getdata()[1]) // 3 + return im.convert("P", palette=Image.ADAPTIVE, colors=palette_size) + else: + return im.convert("P") + return im.convert("L") + + +def _normalize_palette(im, palette, info): + """ + Normalizes the palette for image. + - Sets the palette to the incoming palette, if provided. + - Ensures that there's a palette for L mode images + - Optimizes the palette if necessary/desired. + + :param im: Image object + :param palette: bytes object containing the source palette, or .... + :param info: encoderinfo + :returns: Image object + """ + source_palette = None + if palette: + # a bytes palette + if isinstance(palette, (bytes, bytearray, list)): + source_palette = bytearray(palette[:768]) + if isinstance(palette, ImagePalette.ImagePalette): + source_palette = bytearray(palette.palette) + + if im.mode == "P": + if not source_palette: + source_palette = im.im.getpalette("RGB")[:768] + else: # L-mode + if not source_palette: + source_palette = bytearray(i // 3 for i in range(768)) + im.palette = ImagePalette.ImagePalette("RGB", palette=source_palette) + + if palette: + used_palette_colors = [] + for i in range(0, len(source_palette), 3): + source_color = tuple(source_palette[i : i + 3]) + try: + index = im.palette.colors[source_color] + except KeyError: + index = None + used_palette_colors.append(index) + for i, index in enumerate(used_palette_colors): + if index is None: + for j in range(len(used_palette_colors)): + if j not in used_palette_colors: + used_palette_colors[i] = j + break + im = im.remap_palette(used_palette_colors) + else: + used_palette_colors = _get_optimize(im, info) + if used_palette_colors is not None: + return im.remap_palette(used_palette_colors, source_palette) + + im.palette.palette = source_palette + return im + + +def _write_single_frame(im, fp, palette): + im_out = _normalize_mode(im, True) + for k, v in im_out.info.items(): + im.encoderinfo.setdefault(k, v) + im_out = _normalize_palette(im_out, palette, im.encoderinfo) + + for s in _get_global_header(im_out, im.encoderinfo): + fp.write(s) + + # local image header + flags = 0 + if get_interlace(im): + flags = flags | 64 + _write_local_header(fp, im, (0, 0), flags) + + im_out.encoderconfig = (8, get_interlace(im)) + ImageFile._save(im_out, fp, [("gif", (0, 0) + im.size, 0, RAWMODE[im_out.mode])]) + + fp.write(b"\0") # end of image data + + +def _write_multiple_frames(im, fp, palette): + + duration = im.encoderinfo.get("duration", im.info.get("duration")) + disposal = im.encoderinfo.get("disposal", im.info.get("disposal")) + + im_frames = [] + frame_count = 0 + background_im = None + for imSequence in itertools.chain([im], im.encoderinfo.get("append_images", [])): + for im_frame in ImageSequence.Iterator(imSequence): + # a copy is required here since seek can still mutate the image + im_frame = _normalize_mode(im_frame.copy()) + if frame_count == 0: + for k, v in im_frame.info.items(): + im.encoderinfo.setdefault(k, v) + im_frame = _normalize_palette(im_frame, palette, im.encoderinfo) + + encoderinfo = im.encoderinfo.copy() + if isinstance(duration, (list, tuple)): + encoderinfo["duration"] = duration[frame_count] + if isinstance(disposal, (list, tuple)): + encoderinfo["disposal"] = disposal[frame_count] + frame_count += 1 + + if im_frames: + # delta frame + previous = im_frames[-1] + if encoderinfo.get("disposal") == 2: + if background_im is None: + color = im.encoderinfo.get( + "transparency", im.info.get("transparency", (0, 0, 0)) + ) + background = _get_background(im_frame, color) + background_im = Image.new("P", im_frame.size, background) + background_im.putpalette(im_frames[0]["im"].palette) + base_im = background_im + else: + base_im = previous["im"] + if _get_palette_bytes(im_frame) == _get_palette_bytes(base_im): + delta = ImageChops.subtract_modulo(im_frame, base_im) + else: + delta = ImageChops.subtract_modulo( + im_frame.convert("RGB"), base_im.convert("RGB") + ) + bbox = delta.getbbox() + if not bbox: + # This frame is identical to the previous frame + if duration: + previous["encoderinfo"]["duration"] += encoderinfo["duration"] + continue + else: + bbox = None + im_frames.append({"im": im_frame, "bbox": bbox, "encoderinfo": encoderinfo}) + + if len(im_frames) > 1: + for frame_data in im_frames: + im_frame = frame_data["im"] + if not frame_data["bbox"]: + # global header + for s in _get_global_header(im_frame, frame_data["encoderinfo"]): + fp.write(s) + offset = (0, 0) + else: + # compress difference + if not palette: + frame_data["encoderinfo"]["include_color_table"] = True + + im_frame = im_frame.crop(frame_data["bbox"]) + offset = frame_data["bbox"][:2] + _write_frame_data(fp, im_frame, offset, frame_data["encoderinfo"]) + return True + elif "duration" in im.encoderinfo and isinstance( + im.encoderinfo["duration"], (list, tuple) + ): + # Since multiple frames will not be written, add together the frame durations + im.encoderinfo["duration"] = sum(im.encoderinfo["duration"]) + + +def _save_all(im, fp, filename): + _save(im, fp, filename, save_all=True) + + +def _save(im, fp, filename, save_all=False): + # header + if "palette" in im.encoderinfo or "palette" in im.info: + palette = im.encoderinfo.get("palette", im.info.get("palette")) + else: + palette = None + im.encoderinfo["optimize"] = im.encoderinfo.get("optimize", True) + + if not save_all or not _write_multiple_frames(im, fp, palette): + _write_single_frame(im, fp, palette) + + fp.write(b";") # end of file + + if hasattr(fp, "flush"): + fp.flush() + + +def get_interlace(im): + interlace = im.encoderinfo.get("interlace", 1) + + # workaround for @PIL153 + if min(im.size) < 16: + interlace = 0 + + return interlace + + +def _write_local_header(fp, im, offset, flags): + transparent_color_exists = False + try: + transparency = im.encoderinfo["transparency"] + except KeyError: + pass + else: + transparency = int(transparency) + # optimize the block away if transparent color is not used + transparent_color_exists = True + + used_palette_colors = _get_optimize(im, im.encoderinfo) + if used_palette_colors is not None: + # adjust the transparency index after optimize + try: + transparency = used_palette_colors.index(transparency) + except ValueError: + transparent_color_exists = False + + if "duration" in im.encoderinfo: + duration = int(im.encoderinfo["duration"] / 10) + else: + duration = 0 + + disposal = int(im.encoderinfo.get("disposal", 0)) + + if transparent_color_exists or duration != 0 or disposal: + packed_flag = 1 if transparent_color_exists else 0 + packed_flag |= disposal << 2 + if not transparent_color_exists: + transparency = 0 + + fp.write( + b"!" + + o8(249) # extension intro + + o8(4) # length + + o8(packed_flag) # packed fields + + o16(duration) # duration + + o8(transparency) # transparency index + + o8(0) + ) + + if "comment" in im.encoderinfo and 1 <= len(im.encoderinfo["comment"]): + fp.write(b"!" + o8(254)) # extension intro + comment = im.encoderinfo["comment"] + if isinstance(comment, str): + comment = comment.encode() + for i in range(0, len(comment), 255): + subblock = comment[i : i + 255] + fp.write(o8(len(subblock)) + subblock) + fp.write(o8(0)) + if "loop" in im.encoderinfo: + number_of_loops = im.encoderinfo["loop"] + fp.write( + b"!" + + o8(255) # extension intro + + o8(11) + + b"NETSCAPE2.0" + + o8(3) + + o8(1) + + o16(number_of_loops) # number of loops + + o8(0) + ) + include_color_table = im.encoderinfo.get("include_color_table") + if include_color_table: + palette_bytes = _get_palette_bytes(im) + color_table_size = _get_color_table_size(palette_bytes) + if color_table_size: + flags = flags | 128 # local color table flag + flags = flags | color_table_size + + fp.write( + b"," + + o16(offset[0]) # offset + + o16(offset[1]) + + o16(im.size[0]) # size + + o16(im.size[1]) + + o8(flags) # flags + ) + if include_color_table and color_table_size: + fp.write(_get_header_palette(palette_bytes)) + fp.write(o8(8)) # bits + + +def _save_netpbm(im, fp, filename): + + # Unused by default. + # To use, uncomment the register_save call at the end of the file. + # + # If you need real GIF compression and/or RGB quantization, you + # can use the external NETPBM/PBMPLUS utilities. See comments + # below for information on how to enable this. + tempfile = im._dump() + + try: + with open(filename, "wb") as f: + if im.mode != "RGB": + subprocess.check_call( + ["ppmtogif", tempfile], stdout=f, stderr=subprocess.DEVNULL + ) + else: + # Pipe ppmquant output into ppmtogif + # "ppmquant 256 %s | ppmtogif > %s" % (tempfile, filename) + quant_cmd = ["ppmquant", "256", tempfile] + togif_cmd = ["ppmtogif"] + quant_proc = subprocess.Popen( + quant_cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL + ) + togif_proc = subprocess.Popen( + togif_cmd, + stdin=quant_proc.stdout, + stdout=f, + stderr=subprocess.DEVNULL, + ) + + # Allow ppmquant to receive SIGPIPE if ppmtogif exits + quant_proc.stdout.close() + + retcode = quant_proc.wait() + if retcode: + raise subprocess.CalledProcessError(retcode, quant_cmd) + + retcode = togif_proc.wait() + if retcode: + raise subprocess.CalledProcessError(retcode, togif_cmd) + finally: + try: + os.unlink(tempfile) + except OSError: + pass + + +# Force optimization so that we can test performance against +# cases where it took lots of memory and time previously. +_FORCE_OPTIMIZE = False + + +def _get_optimize(im, info): + """ + Palette optimization is a potentially expensive operation. + + This function determines if the palette should be optimized using + some heuristics, then returns the list of palette entries in use. + + :param im: Image object + :param info: encoderinfo + :returns: list of indexes of palette entries in use, or None + """ + if im.mode in ("P", "L") and info and info.get("optimize", 0): + # Potentially expensive operation. + + # The palette saves 3 bytes per color not used, but palette + # lengths are restricted to 3*(2**N) bytes. Max saving would + # be 768 -> 6 bytes if we went all the way down to 2 colors. + # * If we're over 128 colors, we can't save any space. + # * If there aren't any holes, it's not worth collapsing. + # * If we have a 'large' image, the palette is in the noise. + + # create the new palette if not every color is used + optimise = _FORCE_OPTIMIZE or im.mode == "L" + if optimise or im.width * im.height < 512 * 512: + # check which colors are used + used_palette_colors = [] + for i, count in enumerate(im.histogram()): + if count: + used_palette_colors.append(i) + + if optimise or ( + len(used_palette_colors) <= 128 + and max(used_palette_colors) > len(used_palette_colors) + ): + return used_palette_colors + + +def _get_color_table_size(palette_bytes): + # calculate the palette size for the header + if not palette_bytes: + return 0 + elif len(palette_bytes) < 9: + return 1 + else: + return math.ceil(math.log(len(palette_bytes) // 3, 2)) - 1 + + +def _get_header_palette(palette_bytes): + """ + Returns the palette, null padded to the next power of 2 (*3) bytes + suitable for direct inclusion in the GIF header + + :param palette_bytes: Unpadded palette bytes, in RGBRGB form + :returns: Null padded palette + """ + color_table_size = _get_color_table_size(palette_bytes) + + # add the missing amount of bytes + # the palette has to be 2< 0: + palette_bytes += o8(0) * 3 * actual_target_size_diff + return palette_bytes + + +def _get_palette_bytes(im): + """ + Gets the palette for inclusion in the gif header + + :param im: Image object + :returns: Bytes, len<=768 suitable for inclusion in gif header + """ + return im.palette.palette + + +def _get_background(im, infoBackground): + background = 0 + if infoBackground: + background = infoBackground + if isinstance(background, tuple): + # WebPImagePlugin stores an RGBA value in info["background"] + # So it must be converted to the same format as GifImagePlugin's + # info["background"] - a global color table index + try: + background = im.palette.getcolor(background, im) + except ValueError as e: + if str(e) == "cannot allocate more than 256 colors": + # If all 256 colors are in use, + # then there is no need for the background color + return 0 + else: + raise + return background + + +def _get_global_header(im, info): + """Return a list of strings representing a GIF header""" + + # Header Block + # https://www.matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp + + version = b"87a" + for extensionKey in ["transparency", "duration", "loop", "comment"]: + if info and extensionKey in info: + if (extensionKey == "duration" and info[extensionKey] == 0) or ( + extensionKey == "comment" and not (1 <= len(info[extensionKey]) <= 255) + ): + continue + version = b"89a" + break + else: + if im.info.get("version") == b"89a": + version = b"89a" + + background = _get_background(im, info.get("background")) + + palette_bytes = _get_palette_bytes(im) + color_table_size = _get_color_table_size(palette_bytes) + + return [ + b"GIF" # signature + + version # version + + o16(im.size[0]) # canvas width + + o16(im.size[1]), # canvas height + # Logical Screen Descriptor + # size of global color table + global color table flag + o8(color_table_size + 128), # packed fields + # background + reserved/aspect + o8(background) + o8(0), + # Global Color Table + _get_header_palette(palette_bytes), + ] + + +def _write_frame_data(fp, im_frame, offset, params): + try: + im_frame.encoderinfo = params + + # local image header + _write_local_header(fp, im_frame, offset, 0) + + ImageFile._save( + im_frame, fp, [("gif", (0, 0) + im_frame.size, 0, RAWMODE[im_frame.mode])] + ) + + fp.write(b"\0") # end of image data + finally: + del im_frame.encoderinfo + + +# -------------------------------------------------------------------- +# Legacy GIF utilities + + +def getheader(im, palette=None, info=None): + """ + Legacy Method to get Gif data from image. + + Warning:: May modify image data. + + :param im: Image object + :param palette: bytes object containing the source palette, or .... + :param info: encoderinfo + :returns: tuple of(list of header items, optimized palette) + + """ + used_palette_colors = _get_optimize(im, info) + + if info is None: + info = {} + + if "background" not in info and "background" in im.info: + info["background"] = im.info["background"] + + im_mod = _normalize_palette(im, palette, info) + im.palette = im_mod.palette + im.im = im_mod.im + header = _get_global_header(im, info) + + return header, used_palette_colors + + +# To specify duration, add the time in milliseconds to getdata(), +# e.g. getdata(im_frame, duration=1000) +def getdata(im, offset=(0, 0), **params): + """ + Legacy Method + + Return a list of strings representing this image. + The first string is a local image header, the rest contains + encoded image data. + + :param im: Image object + :param offset: Tuple of (x, y) pixels. Defaults to (0,0) + :param \\**params: E.g. duration or other encoder info parameters + :returns: List of Bytes containing gif encoded frame data + + """ + + class Collector: + data = [] + + def write(self, data): + self.data.append(data) + + im.load() # make sure raster data is available + + fp = Collector() + + _write_frame_data(fp, im, offset, params) + + return fp.data + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(GifImageFile.format, GifImageFile, _accept) +Image.register_save(GifImageFile.format, _save) +Image.register_save_all(GifImageFile.format, _save_all) +Image.register_extension(GifImageFile.format, ".gif") +Image.register_mime(GifImageFile.format, "image/gif") + +# +# Uncomment the following line if you wish to use NETPBM/PBMPLUS +# instead of the built-in "uncompressed" GIF encoder + +# Image.register_save(GifImageFile.format, _save_netpbm) diff --git a/.venv/lib/python3.9/site-packages/PIL/GimpGradientFile.py b/.venv/lib/python3.9/site-packages/PIL/GimpGradientFile.py new file mode 100644 index 00000000..7ab7f999 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/GimpGradientFile.py @@ -0,0 +1,140 @@ +# +# Python Imaging Library +# $Id$ +# +# stuff to read (and render) GIMP gradient files +# +# History: +# 97-08-23 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# + +""" +Stuff to translate curve segments to palette values (derived from +the corresponding code in GIMP, written by Federico Mena Quintero. +See the GIMP distribution for more information.) +""" + + +from math import log, pi, sin, sqrt + +from ._binary import o8 + +EPSILON = 1e-10 +"""""" # Enable auto-doc for data member + + +def linear(middle, pos): + if pos <= middle: + if middle < EPSILON: + return 0.0 + else: + return 0.5 * pos / middle + else: + pos = pos - middle + middle = 1.0 - middle + if middle < EPSILON: + return 1.0 + else: + return 0.5 + 0.5 * pos / middle + + +def curved(middle, pos): + return pos ** (log(0.5) / log(max(middle, EPSILON))) + + +def sine(middle, pos): + return (sin((-pi / 2.0) + pi * linear(middle, pos)) + 1.0) / 2.0 + + +def sphere_increasing(middle, pos): + return sqrt(1.0 - (linear(middle, pos) - 1.0) ** 2) + + +def sphere_decreasing(middle, pos): + return 1.0 - sqrt(1.0 - linear(middle, pos) ** 2) + + +SEGMENTS = [linear, curved, sine, sphere_increasing, sphere_decreasing] +"""""" # Enable auto-doc for data member + + +class GradientFile: + + gradient = None + + def getpalette(self, entries=256): + + palette = [] + + ix = 0 + x0, x1, xm, rgb0, rgb1, segment = self.gradient[ix] + + for i in range(entries): + + x = i / (entries - 1) + + while x1 < x: + ix += 1 + x0, x1, xm, rgb0, rgb1, segment = self.gradient[ix] + + w = x1 - x0 + + if w < EPSILON: + scale = segment(0.5, 0.5) + else: + scale = segment((xm - x0) / w, (x - x0) / w) + + # expand to RGBA + r = o8(int(255 * ((rgb1[0] - rgb0[0]) * scale + rgb0[0]) + 0.5)) + g = o8(int(255 * ((rgb1[1] - rgb0[1]) * scale + rgb0[1]) + 0.5)) + b = o8(int(255 * ((rgb1[2] - rgb0[2]) * scale + rgb0[2]) + 0.5)) + a = o8(int(255 * ((rgb1[3] - rgb0[3]) * scale + rgb0[3]) + 0.5)) + + # add to palette + palette.append(r + g + b + a) + + return b"".join(palette), "RGBA" + + +class GimpGradientFile(GradientFile): + """File handler for GIMP's gradient format.""" + + def __init__(self, fp): + + if fp.readline()[:13] != b"GIMP Gradient": + raise SyntaxError("not a GIMP gradient file") + + line = fp.readline() + + # GIMP 1.2 gradient files don't contain a name, but GIMP 1.3 files do + if line.startswith(b"Name: "): + line = fp.readline().strip() + + count = int(line) + + gradient = [] + + for i in range(count): + + s = fp.readline().split() + w = [float(x) for x in s[:11]] + + x0, x1 = w[0], w[2] + xm = w[1] + rgb0 = w[3:7] + rgb1 = w[7:11] + + segment = SEGMENTS[int(s[11])] + cspace = int(s[12]) + + if cspace != 0: + raise OSError("cannot handle HSV colour space") + + gradient.append((x0, x1, xm, rgb0, rgb1, segment)) + + self.gradient = gradient diff --git a/.venv/lib/python3.9/site-packages/PIL/GimpPaletteFile.py b/.venv/lib/python3.9/site-packages/PIL/GimpPaletteFile.py new file mode 100644 index 00000000..10fd3ad8 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/GimpPaletteFile.py @@ -0,0 +1,56 @@ +# +# Python Imaging Library +# $Id$ +# +# stuff to read GIMP palette files +# +# History: +# 1997-08-23 fl Created +# 2004-09-07 fl Support GIMP 2.0 palette files. +# +# Copyright (c) Secret Labs AB 1997-2004. All rights reserved. +# Copyright (c) Fredrik Lundh 1997-2004. +# +# See the README file for information on usage and redistribution. +# + +import re + +from ._binary import o8 + + +class GimpPaletteFile: + """File handler for GIMP's palette format.""" + + rawmode = "RGB" + + def __init__(self, fp): + + self.palette = [o8(i) * 3 for i in range(256)] + + if fp.readline()[:12] != b"GIMP Palette": + raise SyntaxError("not a GIMP palette file") + + for i in range(256): + + s = fp.readline() + if not s: + break + + # skip fields and comment lines + if re.match(br"\w+:|#", s): + continue + if len(s) > 100: + raise SyntaxError("bad palette file") + + v = tuple(map(int, s.split()[:3])) + if len(v) != 3: + raise ValueError("bad palette entry") + + self.palette[i] = o8(v[0]) + o8(v[1]) + o8(v[2]) + + self.palette = b"".join(self.palette) + + def getpalette(self): + + return self.palette, self.rawmode diff --git a/.venv/lib/python3.9/site-packages/PIL/GribStubImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/GribStubImagePlugin.py new file mode 100644 index 00000000..b9bdd16e --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/GribStubImagePlugin.py @@ -0,0 +1,73 @@ +# +# The Python Imaging Library +# $Id$ +# +# GRIB stub adapter +# +# Copyright (c) 1996-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from . import Image, ImageFile + +_handler = None + + +def register_handler(handler): + """ + Install application-specific GRIB image handler. + + :param handler: Handler object. + """ + global _handler + _handler = handler + + +# -------------------------------------------------------------------- +# Image adapter + + +def _accept(prefix): + return prefix[0:4] == b"GRIB" and prefix[7] == 1 + + +class GribStubImageFile(ImageFile.StubImageFile): + + format = "GRIB" + format_description = "GRIB" + + def _open(self): + + offset = self.fp.tell() + + if not _accept(self.fp.read(8)): + raise SyntaxError("Not a GRIB file") + + self.fp.seek(offset) + + # make something up + self.mode = "F" + self._size = 1, 1 + + loader = self._load() + if loader: + loader.open(self) + + def _load(self): + return _handler + + +def _save(im, fp, filename): + if _handler is None or not hasattr("_handler", "save"): + raise OSError("GRIB save handler not installed") + _handler.save(im, fp, filename) + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(GribStubImageFile.format, GribStubImageFile, _accept) +Image.register_save(GribStubImageFile.format, _save) + +Image.register_extension(GribStubImageFile.format, ".grib") diff --git a/.venv/lib/python3.9/site-packages/PIL/Hdf5StubImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/Hdf5StubImagePlugin.py new file mode 100644 index 00000000..362f2d39 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/Hdf5StubImagePlugin.py @@ -0,0 +1,73 @@ +# +# The Python Imaging Library +# $Id$ +# +# HDF5 stub adapter +# +# Copyright (c) 2000-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from . import Image, ImageFile + +_handler = None + + +def register_handler(handler): + """ + Install application-specific HDF5 image handler. + + :param handler: Handler object. + """ + global _handler + _handler = handler + + +# -------------------------------------------------------------------- +# Image adapter + + +def _accept(prefix): + return prefix[:8] == b"\x89HDF\r\n\x1a\n" + + +class HDF5StubImageFile(ImageFile.StubImageFile): + + format = "HDF5" + format_description = "HDF5" + + def _open(self): + + offset = self.fp.tell() + + if not _accept(self.fp.read(8)): + raise SyntaxError("Not an HDF file") + + self.fp.seek(offset) + + # make something up + self.mode = "F" + self._size = 1, 1 + + loader = self._load() + if loader: + loader.open(self) + + def _load(self): + return _handler + + +def _save(im, fp, filename): + if _handler is None or not hasattr("_handler", "save"): + raise OSError("HDF5 save handler not installed") + _handler.save(im, fp, filename) + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(HDF5StubImageFile.format, HDF5StubImageFile, _accept) +Image.register_save(HDF5StubImageFile.format, _save) + +Image.register_extensions(HDF5StubImageFile.format, [".h5", ".hdf"]) diff --git a/.venv/lib/python3.9/site-packages/PIL/IcnsImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/IcnsImagePlugin.py new file mode 100644 index 00000000..d30eaf90 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/IcnsImagePlugin.py @@ -0,0 +1,386 @@ +# +# The Python Imaging Library. +# $Id$ +# +# macOS icns file decoder, based on icns.py by Bob Ippolito. +# +# history: +# 2004-10-09 fl Turned into a PIL plugin; removed 2.3 dependencies. +# 2020-04-04 Allow saving on all operating systems. +# +# Copyright (c) 2004 by Bob Ippolito. +# Copyright (c) 2004 by Secret Labs. +# Copyright (c) 2004 by Fredrik Lundh. +# Copyright (c) 2014 by Alastair Houghton. +# Copyright (c) 2020 by Pan Jing. +# +# See the README file for information on usage and redistribution. +# + +import io +import os +import struct +import sys + +from PIL import Image, ImageFile, PngImagePlugin, features + +enable_jpeg2k = features.check_codec("jpg_2000") +if enable_jpeg2k: + from PIL import Jpeg2KImagePlugin + +MAGIC = b"icns" +HEADERSIZE = 8 + + +def nextheader(fobj): + return struct.unpack(">4sI", fobj.read(HEADERSIZE)) + + +def read_32t(fobj, start_length, size): + # The 128x128 icon seems to have an extra header for some reason. + (start, length) = start_length + fobj.seek(start) + sig = fobj.read(4) + if sig != b"\x00\x00\x00\x00": + raise SyntaxError("Unknown signature, expecting 0x00000000") + return read_32(fobj, (start + 4, length - 4), size) + + +def read_32(fobj, start_length, size): + """ + Read a 32bit RGB icon resource. Seems to be either uncompressed or + an RLE packbits-like scheme. + """ + (start, length) = start_length + fobj.seek(start) + pixel_size = (size[0] * size[2], size[1] * size[2]) + sizesq = pixel_size[0] * pixel_size[1] + if length == sizesq * 3: + # uncompressed ("RGBRGBGB") + indata = fobj.read(length) + im = Image.frombuffer("RGB", pixel_size, indata, "raw", "RGB", 0, 1) + else: + # decode image + im = Image.new("RGB", pixel_size, None) + for band_ix in range(3): + data = [] + bytesleft = sizesq + while bytesleft > 0: + byte = fobj.read(1) + if not byte: + break + byte = byte[0] + if byte & 0x80: + blocksize = byte - 125 + byte = fobj.read(1) + for i in range(blocksize): + data.append(byte) + else: + blocksize = byte + 1 + data.append(fobj.read(blocksize)) + bytesleft -= blocksize + if bytesleft <= 0: + break + if bytesleft != 0: + raise SyntaxError(f"Error reading channel [{repr(bytesleft)} left]") + band = Image.frombuffer("L", pixel_size, b"".join(data), "raw", "L", 0, 1) + im.im.putband(band.im, band_ix) + return {"RGB": im} + + +def read_mk(fobj, start_length, size): + # Alpha masks seem to be uncompressed + start = start_length[0] + fobj.seek(start) + pixel_size = (size[0] * size[2], size[1] * size[2]) + sizesq = pixel_size[0] * pixel_size[1] + band = Image.frombuffer("L", pixel_size, fobj.read(sizesq), "raw", "L", 0, 1) + return {"A": band} + + +def read_png_or_jpeg2000(fobj, start_length, size): + (start, length) = start_length + fobj.seek(start) + sig = fobj.read(12) + if sig[:8] == b"\x89PNG\x0d\x0a\x1a\x0a": + fobj.seek(start) + im = PngImagePlugin.PngImageFile(fobj) + Image._decompression_bomb_check(im.size) + return {"RGBA": im} + elif ( + sig[:4] == b"\xff\x4f\xff\x51" + or sig[:4] == b"\x0d\x0a\x87\x0a" + or sig == b"\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a" + ): + if not enable_jpeg2k: + raise ValueError( + "Unsupported icon subimage format (rebuild PIL " + "with JPEG 2000 support to fix this)" + ) + # j2k, jpc or j2c + fobj.seek(start) + jp2kstream = fobj.read(length) + f = io.BytesIO(jp2kstream) + im = Jpeg2KImagePlugin.Jpeg2KImageFile(f) + Image._decompression_bomb_check(im.size) + if im.mode != "RGBA": + im = im.convert("RGBA") + return {"RGBA": im} + else: + raise ValueError("Unsupported icon subimage format") + + +class IcnsFile: + + SIZES = { + (512, 512, 2): [(b"ic10", read_png_or_jpeg2000)], + (512, 512, 1): [(b"ic09", read_png_or_jpeg2000)], + (256, 256, 2): [(b"ic14", read_png_or_jpeg2000)], + (256, 256, 1): [(b"ic08", read_png_or_jpeg2000)], + (128, 128, 2): [(b"ic13", read_png_or_jpeg2000)], + (128, 128, 1): [ + (b"ic07", read_png_or_jpeg2000), + (b"it32", read_32t), + (b"t8mk", read_mk), + ], + (64, 64, 1): [(b"icp6", read_png_or_jpeg2000)], + (32, 32, 2): [(b"ic12", read_png_or_jpeg2000)], + (48, 48, 1): [(b"ih32", read_32), (b"h8mk", read_mk)], + (32, 32, 1): [ + (b"icp5", read_png_or_jpeg2000), + (b"il32", read_32), + (b"l8mk", read_mk), + ], + (16, 16, 2): [(b"ic11", read_png_or_jpeg2000)], + (16, 16, 1): [ + (b"icp4", read_png_or_jpeg2000), + (b"is32", read_32), + (b"s8mk", read_mk), + ], + } + + def __init__(self, fobj): + """ + fobj is a file-like object as an icns resource + """ + # signature : (start, length) + self.dct = dct = {} + self.fobj = fobj + sig, filesize = nextheader(fobj) + if sig != MAGIC: + raise SyntaxError("not an icns file") + i = HEADERSIZE + while i < filesize: + sig, blocksize = nextheader(fobj) + if blocksize <= 0: + raise SyntaxError("invalid block header") + i += HEADERSIZE + blocksize -= HEADERSIZE + dct[sig] = (i, blocksize) + fobj.seek(blocksize, io.SEEK_CUR) + i += blocksize + + def itersizes(self): + sizes = [] + for size, fmts in self.SIZES.items(): + for (fmt, reader) in fmts: + if fmt in self.dct: + sizes.append(size) + break + return sizes + + def bestsize(self): + sizes = self.itersizes() + if not sizes: + raise SyntaxError("No 32bit icon resources found") + return max(sizes) + + def dataforsize(self, size): + """ + Get an icon resource as {channel: array}. Note that + the arrays are bottom-up like windows bitmaps and will likely + need to be flipped or transposed in some way. + """ + dct = {} + for code, reader in self.SIZES[size]: + desc = self.dct.get(code) + if desc is not None: + dct.update(reader(self.fobj, desc, size)) + return dct + + def getimage(self, size=None): + if size is None: + size = self.bestsize() + if len(size) == 2: + size = (size[0], size[1], 1) + channels = self.dataforsize(size) + + im = channels.get("RGBA", None) + if im: + return im + + im = channels.get("RGB").copy() + try: + im.putalpha(channels["A"]) + except KeyError: + pass + return im + + +## +# Image plugin for Mac OS icons. + + +class IcnsImageFile(ImageFile.ImageFile): + """ + PIL image support for Mac OS .icns files. + Chooses the best resolution, but will possibly load + a different size image if you mutate the size attribute + before calling 'load'. + + The info dictionary has a key 'sizes' that is a list + of sizes that the icns file has. + """ + + format = "ICNS" + format_description = "Mac OS icns resource" + + def _open(self): + self.icns = IcnsFile(self.fp) + self.mode = "RGBA" + self.info["sizes"] = self.icns.itersizes() + self.best_size = self.icns.bestsize() + self.size = ( + self.best_size[0] * self.best_size[2], + self.best_size[1] * self.best_size[2], + ) + + @property + def size(self): + return self._size + + @size.setter + def size(self, value): + info_size = value + if info_size not in self.info["sizes"] and len(info_size) == 2: + info_size = (info_size[0], info_size[1], 1) + if ( + info_size not in self.info["sizes"] + and len(info_size) == 3 + and info_size[2] == 1 + ): + simple_sizes = [ + (size[0] * size[2], size[1] * size[2]) for size in self.info["sizes"] + ] + if value in simple_sizes: + info_size = self.info["sizes"][simple_sizes.index(value)] + if info_size not in self.info["sizes"]: + raise ValueError("This is not one of the allowed sizes of this image") + self._size = value + + def load(self): + if len(self.size) == 3: + self.best_size = self.size + self.size = ( + self.best_size[0] * self.best_size[2], + self.best_size[1] * self.best_size[2], + ) + + Image.Image.load(self) + if self.im and self.im.size == self.size: + # Already loaded + return + self.load_prepare() + # This is likely NOT the best way to do it, but whatever. + im = self.icns.getimage(self.best_size) + + # If this is a PNG or JPEG 2000, it won't be loaded yet + im.load() + + self.im = im.im + self.mode = im.mode + self.size = im.size + self.load_end() + + +def _save(im, fp, filename): + """ + Saves the image as a series of PNG files, + that are then combined into a .icns file. + """ + if hasattr(fp, "flush"): + fp.flush() + + sizes = { + b"ic07": 128, + b"ic08": 256, + b"ic09": 512, + b"ic10": 1024, + b"ic11": 32, + b"ic12": 64, + b"ic13": 256, + b"ic14": 512, + } + provided_images = {im.width: im for im in im.encoderinfo.get("append_images", [])} + size_streams = {} + for size in set(sizes.values()): + image = ( + provided_images[size] + if size in provided_images + else im.resize((size, size)) + ) + + temp = io.BytesIO() + image.save(temp, "png") + size_streams[size] = temp.getvalue() + + entries = [] + for type, size in sizes.items(): + stream = size_streams[size] + entries.append({"type": type, "size": len(stream), "stream": stream}) + + # Header + fp.write(MAGIC) + fp.write(struct.pack(">i", sum(entry["size"] for entry in entries))) + + # TOC + fp.write(b"TOC ") + fp.write(struct.pack(">i", HEADERSIZE + len(entries) * HEADERSIZE)) + for entry in entries: + fp.write(entry["type"]) + fp.write(struct.pack(">i", HEADERSIZE + entry["size"])) + + # Data + for entry in entries: + fp.write(entry["type"]) + fp.write(struct.pack(">i", HEADERSIZE + entry["size"])) + fp.write(entry["stream"]) + + if hasattr(fp, "flush"): + fp.flush() + + +def _accept(prefix): + return prefix[:4] == MAGIC + + +Image.register_open(IcnsImageFile.format, IcnsImageFile, _accept) +Image.register_extension(IcnsImageFile.format, ".icns") + +Image.register_save(IcnsImageFile.format, _save) +Image.register_mime(IcnsImageFile.format, "image/icns") + +if __name__ == "__main__": + if len(sys.argv) < 2: + print("Syntax: python3 IcnsImagePlugin.py [file]") + sys.exit() + + with open(sys.argv[1], "rb") as fp: + imf = IcnsImageFile(fp) + for size in imf.info["sizes"]: + imf.size = size + imf.save("out-%s-%s-%s.png" % size) + with Image.open(sys.argv[1]) as im: + im.save("out.png") + if sys.platform == "windows": + os.startfile("out.png") diff --git a/.venv/lib/python3.9/site-packages/PIL/IcoImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/IcoImagePlugin.py new file mode 100644 index 00000000..d9ff9b5e --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/IcoImagePlugin.py @@ -0,0 +1,339 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Windows Icon support for PIL +# +# History: +# 96-05-27 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# + +# This plugin is a refactored version of Win32IconImagePlugin by Bryan Davis +# . +# https://code.google.com/archive/p/casadebender/wikis/Win32IconImagePlugin.wiki +# +# Icon format references: +# * https://en.wikipedia.org/wiki/ICO_(file_format) +# * https://msdn.microsoft.com/en-us/library/ms997538.aspx + + +import struct +import warnings +from io import BytesIO +from math import ceil, log + +from . import BmpImagePlugin, Image, ImageFile, PngImagePlugin +from ._binary import i16le as i16 +from ._binary import i32le as i32 +from ._binary import o32le as o32 + +# +# -------------------------------------------------------------------- + +_MAGIC = b"\0\0\1\0" + + +def _save(im, fp, filename): + fp.write(_MAGIC) # (2+2) + sizes = im.encoderinfo.get( + "sizes", + [(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)], + ) + width, height = im.size + sizes = filter( + lambda x: False + if (x[0] > width or x[1] > height or x[0] > 256 or x[1] > 256) + else True, + sizes, + ) + sizes = list(sizes) + fp.write(struct.pack("=8bpp) + "reserved": s[3], + "planes": i16(s, 4), + "bpp": i16(s, 6), + "size": i32(s, 8), + "offset": i32(s, 12), + } + + # See Wikipedia + for j in ("width", "height"): + if not icon_header[j]: + icon_header[j] = 256 + + # See Wikipedia notes about color depth. + # We need this just to differ images with equal sizes + icon_header["color_depth"] = ( + icon_header["bpp"] + or ( + icon_header["nb_color"] != 0 + and ceil(log(icon_header["nb_color"], 2)) + ) + or 256 + ) + + icon_header["dim"] = (icon_header["width"], icon_header["height"]) + icon_header["square"] = icon_header["width"] * icon_header["height"] + + self.entry.append(icon_header) + + self.entry = sorted(self.entry, key=lambda x: x["color_depth"]) + # ICO images are usually squares + # self.entry = sorted(self.entry, key=lambda x: x['width']) + self.entry = sorted(self.entry, key=lambda x: x["square"]) + self.entry.reverse() + + def sizes(self): + """ + Get a list of all available icon sizes and color depths. + """ + return {(h["width"], h["height"]) for h in self.entry} + + def getentryindex(self, size, bpp=False): + for (i, h) in enumerate(self.entry): + if size == h["dim"] and (bpp is False or bpp == h["color_depth"]): + return i + return 0 + + def getimage(self, size, bpp=False): + """ + Get an image from the icon + """ + return self.frame(self.getentryindex(size, bpp)) + + def frame(self, idx): + """ + Get an image from frame idx + """ + + header = self.entry[idx] + + self.buf.seek(header["offset"]) + data = self.buf.read(8) + self.buf.seek(header["offset"]) + + if data[:8] == PngImagePlugin._MAGIC: + # png frame + im = PngImagePlugin.PngImageFile(self.buf) + Image._decompression_bomb_check(im.size) + else: + # XOR + AND mask bmp frame + im = BmpImagePlugin.DibImageFile(self.buf) + Image._decompression_bomb_check(im.size) + + # change tile dimension to only encompass XOR image + im._size = (im.size[0], int(im.size[1] / 2)) + d, e, o, a = im.tile[0] + im.tile[0] = d, (0, 0) + im.size, o, a + + # figure out where AND mask image starts + bpp = header["bpp"] + if 32 == bpp: + # 32-bit color depth icon image allows semitransparent areas + # PIL's DIB format ignores transparency bits, recover them. + # The DIB is packed in BGRX byte order where X is the alpha + # channel. + + # Back up to start of bmp data + self.buf.seek(o) + # extract every 4th byte (eg. 3,7,11,15,...) + alpha_bytes = self.buf.read(im.size[0] * im.size[1] * 4)[3::4] + + # convert to an 8bpp grayscale image + mask = Image.frombuffer( + "L", # 8bpp + im.size, # (w, h) + alpha_bytes, # source chars + "raw", # raw decoder + ("L", 0, -1), # 8bpp inverted, unpadded, reversed + ) + else: + # get AND image from end of bitmap + w = im.size[0] + if (w % 32) > 0: + # bitmap row data is aligned to word boundaries + w += 32 - (im.size[0] % 32) + + # the total mask data is + # padded row size * height / bits per char + + total_bytes = int((w * im.size[1]) / 8) + and_mask_offset = header["offset"] + header["size"] - total_bytes + + self.buf.seek(and_mask_offset) + mask_data = self.buf.read(total_bytes) + + # convert raw data to image + mask = Image.frombuffer( + "1", # 1 bpp + im.size, # (w, h) + mask_data, # source chars + "raw", # raw decoder + ("1;I", int(w / 8), -1), # 1bpp inverted, padded, reversed + ) + + # now we have two images, im is XOR image and mask is AND image + + # apply mask image as alpha channel + im = im.convert("RGBA") + im.putalpha(mask) + + return im + + +## +# Image plugin for Windows Icon files. + + +class IcoImageFile(ImageFile.ImageFile): + """ + PIL read-only image support for Microsoft Windows .ico files. + + By default the largest resolution image in the file will be loaded. This + can be changed by altering the 'size' attribute before calling 'load'. + + The info dictionary has a key 'sizes' that is a list of the sizes available + in the icon file. + + Handles classic, XP and Vista icon formats. + + When saving, PNG compression is used. Support for this was only added in + Windows Vista. If you are unable to view the icon in Windows, convert the + image to "RGBA" mode before saving. + + This plugin is a refactored version of Win32IconImagePlugin by Bryan Davis + . + https://code.google.com/archive/p/casadebender/wikis/Win32IconImagePlugin.wiki + """ + + format = "ICO" + format_description = "Windows Icon" + + def _open(self): + self.ico = IcoFile(self.fp) + self.info["sizes"] = self.ico.sizes() + self.size = self.ico.entry[0]["dim"] + self.load() + + @property + def size(self): + return self._size + + @size.setter + def size(self, value): + if value not in self.info["sizes"]: + raise ValueError("This is not one of the allowed sizes of this image") + self._size = value + + def load(self): + if self.im and self.im.size == self.size: + # Already loaded + return + im = self.ico.getimage(self.size) + # if tile is PNG, it won't really be loaded yet + im.load() + self.im = im.im + self.mode = im.mode + if im.size != self.size: + warnings.warn("Image was not the expected size") + + index = self.ico.getentryindex(self.size) + sizes = list(self.info["sizes"]) + sizes[index] = im.size + self.info["sizes"] = set(sizes) + + self.size = im.size + + def load_seek(self): + # Flag the ImageFile.Parser so that it + # just does all the decode at the end. + pass + + +# +# -------------------------------------------------------------------- + + +Image.register_open(IcoImageFile.format, IcoImageFile, _accept) +Image.register_save(IcoImageFile.format, _save) +Image.register_extension(IcoImageFile.format, ".ico") + +Image.register_mime(IcoImageFile.format, "image/x-icon") diff --git a/.venv/lib/python3.9/site-packages/PIL/ImImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/ImImagePlugin.py new file mode 100644 index 00000000..1dfc808c --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImImagePlugin.py @@ -0,0 +1,376 @@ +# +# The Python Imaging Library. +# $Id$ +# +# IFUNC IM file handling for PIL +# +# history: +# 1995-09-01 fl Created. +# 1997-01-03 fl Save palette images +# 1997-01-08 fl Added sequence support +# 1997-01-23 fl Added P and RGB save support +# 1997-05-31 fl Read floating point images +# 1997-06-22 fl Save floating point images +# 1997-08-27 fl Read and save 1-bit images +# 1998-06-25 fl Added support for RGB+LUT images +# 1998-07-02 fl Added support for YCC images +# 1998-07-15 fl Renamed offset attribute to avoid name clash +# 1998-12-29 fl Added I;16 support +# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.7) +# 2003-09-26 fl Added LA/PA support +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1995-2001 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + + +import os +import re + +from . import Image, ImageFile, ImagePalette + +# -------------------------------------------------------------------- +# Standard tags + +COMMENT = "Comment" +DATE = "Date" +EQUIPMENT = "Digitalization equipment" +FRAMES = "File size (no of images)" +LUT = "Lut" +NAME = "Name" +SCALE = "Scale (x,y)" +SIZE = "Image size (x*y)" +MODE = "Image type" + +TAGS = { + COMMENT: 0, + DATE: 0, + EQUIPMENT: 0, + FRAMES: 0, + LUT: 0, + NAME: 0, + SCALE: 0, + SIZE: 0, + MODE: 0, +} + +OPEN = { + # ifunc93/p3cfunc formats + "0 1 image": ("1", "1"), + "L 1 image": ("1", "1"), + "Greyscale image": ("L", "L"), + "Grayscale image": ("L", "L"), + "RGB image": ("RGB", "RGB;L"), + "RLB image": ("RGB", "RLB"), + "RYB image": ("RGB", "RLB"), + "B1 image": ("1", "1"), + "B2 image": ("P", "P;2"), + "B4 image": ("P", "P;4"), + "X 24 image": ("RGB", "RGB"), + "L 32 S image": ("I", "I;32"), + "L 32 F image": ("F", "F;32"), + # old p3cfunc formats + "RGB3 image": ("RGB", "RGB;T"), + "RYB3 image": ("RGB", "RYB;T"), + # extensions + "LA image": ("LA", "LA;L"), + "PA image": ("LA", "PA;L"), + "RGBA image": ("RGBA", "RGBA;L"), + "RGBX image": ("RGBX", "RGBX;L"), + "CMYK image": ("CMYK", "CMYK;L"), + "YCC image": ("YCbCr", "YCbCr;L"), +} + +# ifunc95 extensions +for i in ["8", "8S", "16", "16S", "32", "32F"]: + OPEN[f"L {i} image"] = ("F", f"F;{i}") + OPEN[f"L*{i} image"] = ("F", f"F;{i}") +for i in ["16", "16L", "16B"]: + OPEN[f"L {i} image"] = (f"I;{i}", f"I;{i}") + OPEN[f"L*{i} image"] = (f"I;{i}", f"I;{i}") +for i in ["32S"]: + OPEN[f"L {i} image"] = ("I", f"I;{i}") + OPEN[f"L*{i} image"] = ("I", f"I;{i}") +for i in range(2, 33): + OPEN[f"L*{i} image"] = ("F", f"F;{i}") + + +# -------------------------------------------------------------------- +# Read IM directory + +split = re.compile(br"^([A-Za-z][^:]*):[ \t]*(.*)[ \t]*$") + + +def number(s): + try: + return int(s) + except ValueError: + return float(s) + + +## +# Image plugin for the IFUNC IM file format. + + +class ImImageFile(ImageFile.ImageFile): + + format = "IM" + format_description = "IFUNC Image Memory" + _close_exclusive_fp_after_loading = False + + def _open(self): + + # Quick rejection: if there's not an LF among the first + # 100 bytes, this is (probably) not a text header. + + if b"\n" not in self.fp.read(100): + raise SyntaxError("not an IM file") + self.fp.seek(0) + + n = 0 + + # Default values + self.info[MODE] = "L" + self.info[SIZE] = (512, 512) + self.info[FRAMES] = 1 + + self.rawmode = "L" + + while True: + + s = self.fp.read(1) + + # Some versions of IFUNC uses \n\r instead of \r\n... + if s == b"\r": + continue + + if not s or s == b"\0" or s == b"\x1A": + break + + # FIXME: this may read whole file if not a text file + s = s + self.fp.readline() + + if len(s) > 100: + raise SyntaxError("not an IM file") + + if s[-2:] == b"\r\n": + s = s[:-2] + elif s[-1:] == b"\n": + s = s[:-1] + + try: + m = split.match(s) + except re.error as e: + raise SyntaxError("not an IM file") from e + + if m: + + k, v = m.group(1, 2) + + # Don't know if this is the correct encoding, + # but a decent guess (I guess) + k = k.decode("latin-1", "replace") + v = v.decode("latin-1", "replace") + + # Convert value as appropriate + if k in [FRAMES, SCALE, SIZE]: + v = v.replace("*", ",") + v = tuple(map(number, v.split(","))) + if len(v) == 1: + v = v[0] + elif k == MODE and v in OPEN: + v, self.rawmode = OPEN[v] + + # Add to dictionary. Note that COMMENT tags are + # combined into a list of strings. + if k == COMMENT: + if k in self.info: + self.info[k].append(v) + else: + self.info[k] = [v] + else: + self.info[k] = v + + if k in TAGS: + n += 1 + + else: + + raise SyntaxError( + "Syntax error in IM header: " + s.decode("ascii", "replace") + ) + + if not n: + raise SyntaxError("Not an IM file") + + # Basic attributes + self._size = self.info[SIZE] + self.mode = self.info[MODE] + + # Skip forward to start of image data + while s and s[0:1] != b"\x1A": + s = self.fp.read(1) + if not s: + raise SyntaxError("File truncated") + + if LUT in self.info: + # convert lookup table to palette or lut attribute + palette = self.fp.read(768) + greyscale = 1 # greyscale palette + linear = 1 # linear greyscale palette + for i in range(256): + if palette[i] == palette[i + 256] == palette[i + 512]: + if palette[i] != i: + linear = 0 + else: + greyscale = 0 + if self.mode in ["L", "LA", "P", "PA"]: + if greyscale: + if not linear: + self.lut = list(palette[:256]) + else: + if self.mode in ["L", "P"]: + self.mode = self.rawmode = "P" + elif self.mode in ["LA", "PA"]: + self.mode = "PA" + self.rawmode = "PA;L" + self.palette = ImagePalette.raw("RGB;L", palette) + elif self.mode == "RGB": + if not greyscale or not linear: + self.lut = list(palette) + + self.frame = 0 + + self.__offset = offs = self.fp.tell() + + self.__fp = self.fp # FIXME: hack + + if self.rawmode[:2] == "F;": + + # ifunc95 formats + try: + # use bit decoder (if necessary) + bits = int(self.rawmode[2:]) + if bits not in [8, 16, 32]: + self.tile = [("bit", (0, 0) + self.size, offs, (bits, 8, 3, 0, -1))] + return + except ValueError: + pass + + if self.rawmode in ["RGB;T", "RYB;T"]: + # Old LabEye/3PC files. Would be very surprised if anyone + # ever stumbled upon such a file ;-) + size = self.size[0] * self.size[1] + self.tile = [ + ("raw", (0, 0) + self.size, offs, ("G", 0, -1)), + ("raw", (0, 0) + self.size, offs + size, ("R", 0, -1)), + ("raw", (0, 0) + self.size, offs + 2 * size, ("B", 0, -1)), + ] + else: + # LabEye/IFUNC files + self.tile = [("raw", (0, 0) + self.size, offs, (self.rawmode, 0, -1))] + + @property + def n_frames(self): + return self.info[FRAMES] + + @property + def is_animated(self): + return self.info[FRAMES] > 1 + + def seek(self, frame): + if not self._seek_check(frame): + return + + self.frame = frame + + if self.mode == "1": + bits = 1 + else: + bits = 8 * len(self.mode) + + size = ((self.size[0] * bits + 7) // 8) * self.size[1] + offs = self.__offset + frame * size + + self.fp = self.__fp + + self.tile = [("raw", (0, 0) + self.size, offs, (self.rawmode, 0, -1))] + + def tell(self): + return self.frame + + def _close__fp(self): + try: + if self.__fp != self.fp: + self.__fp.close() + except AttributeError: + pass + finally: + self.__fp = None + + +# +# -------------------------------------------------------------------- +# Save IM files + + +SAVE = { + # mode: (im type, raw mode) + "1": ("0 1", "1"), + "L": ("Greyscale", "L"), + "LA": ("LA", "LA;L"), + "P": ("Greyscale", "P"), + "PA": ("LA", "PA;L"), + "I": ("L 32S", "I;32S"), + "I;16": ("L 16", "I;16"), + "I;16L": ("L 16L", "I;16L"), + "I;16B": ("L 16B", "I;16B"), + "F": ("L 32F", "F;32F"), + "RGB": ("RGB", "RGB;L"), + "RGBA": ("RGBA", "RGBA;L"), + "RGBX": ("RGBX", "RGBX;L"), + "CMYK": ("CMYK", "CMYK;L"), + "YCbCr": ("YCC", "YCbCr;L"), +} + + +def _save(im, fp, filename): + + try: + image_type, rawmode = SAVE[im.mode] + except KeyError as e: + raise ValueError(f"Cannot save {im.mode} images as IM") from e + + frames = im.encoderinfo.get("frames", 1) + + fp.write(f"Image type: {image_type} image\r\n".encode("ascii")) + if filename: + # Each line must be 100 characters or less, + # or: SyntaxError("not an IM file") + # 8 characters are used for "Name: " and "\r\n" + # Keep just the filename, ditch the potentially overlong path + name, ext = os.path.splitext(os.path.basename(filename)) + name = "".join([name[: 92 - len(ext)], ext]) + + fp.write(f"Name: {name}\r\n".encode("ascii")) + fp.write(("Image size (x*y): %d*%d\r\n" % im.size).encode("ascii")) + fp.write(f"File size (no of images): {frames}\r\n".encode("ascii")) + if im.mode in ["P", "PA"]: + fp.write(b"Lut: 1\r\n") + fp.write(b"\000" * (511 - fp.tell()) + b"\032") + if im.mode in ["P", "PA"]: + fp.write(im.im.getpalette("RGB", "RGB;L")) # 768 bytes + ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, 0, -1))]) + + +# +# -------------------------------------------------------------------- +# Registry + + +Image.register_open(ImImageFile.format, ImImageFile) +Image.register_save(ImImageFile.format, _save) + +Image.register_extension(ImImageFile.format, ".im") diff --git a/.venv/lib/python3.9/site-packages/PIL/Image.py b/.venv/lib/python3.9/site-packages/PIL/Image.py new file mode 100644 index 00000000..7dd5b35b --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/Image.py @@ -0,0 +1,3611 @@ +# +# The Python Imaging Library. +# $Id$ +# +# the Image class wrapper +# +# partial release history: +# 1995-09-09 fl Created +# 1996-03-11 fl PIL release 0.0 (proof of concept) +# 1996-04-30 fl PIL release 0.1b1 +# 1999-07-28 fl PIL release 1.0 final +# 2000-06-07 fl PIL release 1.1 +# 2000-10-20 fl PIL release 1.1.1 +# 2001-05-07 fl PIL release 1.1.2 +# 2002-03-15 fl PIL release 1.1.3 +# 2003-05-10 fl PIL release 1.1.4 +# 2005-03-28 fl PIL release 1.1.5 +# 2006-12-02 fl PIL release 1.1.6 +# 2009-11-15 fl PIL release 1.1.7 +# +# Copyright (c) 1997-2009 by Secret Labs AB. All rights reserved. +# Copyright (c) 1995-2009 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +import atexit +import builtins +import io +import logging +import math +import numbers +import os +import re +import struct +import sys +import tempfile +import warnings +from collections.abc import Callable, MutableMapping +from pathlib import Path + +try: + import defusedxml.ElementTree as ElementTree +except ImportError: + ElementTree = None + +# VERSION was removed in Pillow 6.0.0. +# PILLOW_VERSION is deprecated and will be removed in a future release. +# Use __version__ instead. +from . import ( + ImageMode, + TiffTags, + UnidentifiedImageError, + __version__, + _plugins, + _raise_version_warning, +) +from ._binary import i32le +from ._util import deferred_error, isPath + +if sys.version_info >= (3, 7): + + def __getattr__(name): + if name == "PILLOW_VERSION": + _raise_version_warning() + return __version__ + else: + categories = {"NORMAL": 0, "SEQUENCE": 1, "CONTAINER": 2} + if name in categories: + warnings.warn( + "Image categories are deprecated and will be removed in Pillow 10 " + "(2023-01-02). Use is_animated instead.", + DeprecationWarning, + stacklevel=2, + ) + return categories[name] + raise AttributeError(f"module '{__name__}' has no attribute '{name}'") + + +else: + + from . import PILLOW_VERSION + + # Silence warning + assert PILLOW_VERSION + + # categories + NORMAL = 0 + SEQUENCE = 1 + CONTAINER = 2 + + +logger = logging.getLogger(__name__) + + +class DecompressionBombWarning(RuntimeWarning): + pass + + +class DecompressionBombError(Exception): + pass + + +# Limit to around a quarter gigabyte for a 24-bit (3 bpp) image +MAX_IMAGE_PIXELS = int(1024 * 1024 * 1024 // 4 // 3) + + +try: + # If the _imaging C module is not present, Pillow will not load. + # Note that other modules should not refer to _imaging directly; + # import Image and use the Image.core variable instead. + # Also note that Image.core is not a publicly documented interface, + # and should be considered private and subject to change. + from . import _imaging as core + + if __version__ != getattr(core, "PILLOW_VERSION", None): + raise ImportError( + "The _imaging extension was built for another version of Pillow or PIL:\n" + f"Core version: {getattr(core, 'PILLOW_VERSION', None)}\n" + f"Pillow version: {__version__}" + ) + +except ImportError as v: + core = deferred_error(ImportError("The _imaging C module is not installed.")) + # Explanations for ways that we know we might have an import error + if str(v).startswith("Module use of python"): + # The _imaging C module is present, but not compiled for + # the right version (windows only). Print a warning, if + # possible. + warnings.warn( + "The _imaging extension was built for another version of Python.", + RuntimeWarning, + ) + elif str(v).startswith("The _imaging extension"): + warnings.warn(str(v), RuntimeWarning) + # Fail here anyway. Don't let people run with a mostly broken Pillow. + # see docs/porting.rst + raise + + +# works everywhere, win for pypy, not cpython +USE_CFFI_ACCESS = hasattr(sys, "pypy_version_info") +try: + import cffi +except ImportError: + cffi = None + + +def isImageType(t): + """ + Checks if an object is an image object. + + .. warning:: + + This function is for internal use only. + + :param t: object to check if it's an image + :returns: True if the object is an image + """ + return hasattr(t, "im") + + +# +# Constants + +NONE = 0 + +# transpose +FLIP_LEFT_RIGHT = 0 +FLIP_TOP_BOTTOM = 1 +ROTATE_90 = 2 +ROTATE_180 = 3 +ROTATE_270 = 4 +TRANSPOSE = 5 +TRANSVERSE = 6 + +# transforms (also defined in Imaging.h) +AFFINE = 0 +EXTENT = 1 +PERSPECTIVE = 2 +QUAD = 3 +MESH = 4 + +# resampling filters (also defined in Imaging.h) +NEAREST = NONE = 0 +BOX = 4 +BILINEAR = LINEAR = 2 +HAMMING = 5 +BICUBIC = CUBIC = 3 +LANCZOS = ANTIALIAS = 1 + +_filters_support = {BOX: 0.5, BILINEAR: 1.0, HAMMING: 1.0, BICUBIC: 2.0, LANCZOS: 3.0} + + +# dithers +NEAREST = NONE = 0 +ORDERED = 1 # Not yet implemented +RASTERIZE = 2 # Not yet implemented +FLOYDSTEINBERG = 3 # default + +# palettes/quantizers +WEB = 0 +ADAPTIVE = 1 + +MEDIANCUT = 0 +MAXCOVERAGE = 1 +FASTOCTREE = 2 +LIBIMAGEQUANT = 3 + +if hasattr(core, "DEFAULT_STRATEGY"): + DEFAULT_STRATEGY = core.DEFAULT_STRATEGY + FILTERED = core.FILTERED + HUFFMAN_ONLY = core.HUFFMAN_ONLY + RLE = core.RLE + FIXED = core.FIXED + + +# -------------------------------------------------------------------- +# Registries + +ID = [] +OPEN = {} +MIME = {} +SAVE = {} +SAVE_ALL = {} +EXTENSION = {} +DECODERS = {} +ENCODERS = {} + +# -------------------------------------------------------------------- +# Modes + +if sys.byteorder == "little": + _ENDIAN = "<" +else: + _ENDIAN = ">" + +_MODE_CONV = { + # official modes + "1": ("|b1", None), # Bits need to be extended to bytes + "L": ("|u1", None), + "LA": ("|u1", 2), + "I": (_ENDIAN + "i4", None), + "F": (_ENDIAN + "f4", None), + "P": ("|u1", None), + "RGB": ("|u1", 3), + "RGBX": ("|u1", 4), + "RGBA": ("|u1", 4), + "CMYK": ("|u1", 4), + "YCbCr": ("|u1", 3), + "LAB": ("|u1", 3), # UNDONE - unsigned |u1i1i1 + "HSV": ("|u1", 3), + # I;16 == I;16L, and I;32 == I;32L + "I;16": ("u2", None), + "I;16L": ("i2", None), + "I;16LS": ("u4", None), + "I;32L": ("i4", None), + "I;32LS": ("= 1: + return + + try: + from . import BmpImagePlugin + + assert BmpImagePlugin + except ImportError: + pass + try: + from . import GifImagePlugin + + assert GifImagePlugin + except ImportError: + pass + try: + from . import JpegImagePlugin + + assert JpegImagePlugin + except ImportError: + pass + try: + from . import PpmImagePlugin + + assert PpmImagePlugin + except ImportError: + pass + try: + from . import PngImagePlugin + + assert PngImagePlugin + except ImportError: + pass + # try: + # import TiffImagePlugin + # assert TiffImagePlugin + # except ImportError: + # pass + + _initialized = 1 + + +def init(): + """ + Explicitly initializes the Python Imaging Library. This function + loads all available file format drivers. + """ + + global _initialized + if _initialized >= 2: + return 0 + + for plugin in _plugins: + try: + logger.debug("Importing %s", plugin) + __import__(f"PIL.{plugin}", globals(), locals(), []) + except ImportError as e: + logger.debug("Image: failed to import %s: %s", plugin, e) + + if OPEN or SAVE: + _initialized = 2 + return 1 + + +# -------------------------------------------------------------------- +# Codec factories (used by tobytes/frombytes and ImageFile.load) + + +def _getdecoder(mode, decoder_name, args, extra=()): + + # tweak arguments + if args is None: + args = () + elif not isinstance(args, tuple): + args = (args,) + + try: + decoder = DECODERS[decoder_name] + except KeyError: + pass + else: + return decoder(mode, *args + extra) + + try: + # get decoder + decoder = getattr(core, decoder_name + "_decoder") + except AttributeError as e: + raise OSError(f"decoder {decoder_name} not available") from e + return decoder(mode, *args + extra) + + +def _getencoder(mode, encoder_name, args, extra=()): + + # tweak arguments + if args is None: + args = () + elif not isinstance(args, tuple): + args = (args,) + + try: + encoder = ENCODERS[encoder_name] + except KeyError: + pass + else: + return encoder(mode, *args + extra) + + try: + # get encoder + encoder = getattr(core, encoder_name + "_encoder") + except AttributeError as e: + raise OSError(f"encoder {encoder_name} not available") from e + return encoder(mode, *args + extra) + + +# -------------------------------------------------------------------- +# Simple expression analyzer + + +def coerce_e(value): + return value if isinstance(value, _E) else _E(value) + + +class _E: + def __init__(self, data): + self.data = data + + def __add__(self, other): + return _E((self.data, "__add__", coerce_e(other).data)) + + def __mul__(self, other): + return _E((self.data, "__mul__", coerce_e(other).data)) + + +def _getscaleoffset(expr): + stub = ["stub"] + data = expr(_E(stub)).data + try: + (a, b, c) = data # simplified syntax + if a is stub and b == "__mul__" and isinstance(c, numbers.Number): + return c, 0.0 + if a is stub and b == "__add__" and isinstance(c, numbers.Number): + return 1.0, c + except TypeError: + pass + try: + ((a, b, c), d, e) = data # full syntax + if ( + a is stub + and b == "__mul__" + and isinstance(c, numbers.Number) + and d == "__add__" + and isinstance(e, numbers.Number) + ): + return c, e + except TypeError: + pass + raise ValueError("illegal expression") + + +# -------------------------------------------------------------------- +# Implementation wrapper + + +class Image: + """ + This class represents an image object. To create + :py:class:`~PIL.Image.Image` objects, use the appropriate factory + functions. There's hardly ever any reason to call the Image constructor + directly. + + * :py:func:`~PIL.Image.open` + * :py:func:`~PIL.Image.new` + * :py:func:`~PIL.Image.frombytes` + """ + + format = None + format_description = None + _close_exclusive_fp_after_loading = True + + def __init__(self): + # FIXME: take "new" parameters / other image? + # FIXME: turn mode and size into delegating properties? + self.im = None + self.mode = "" + self._size = (0, 0) + self.palette = None + self.info = {} + self._category = 0 + self.readonly = 0 + self.pyaccess = None + self._exif = None + + def __getattr__(self, name): + if name == "category": + warnings.warn( + "Image categories are deprecated and will be removed in Pillow 10 " + "(2023-01-02). Use is_animated instead.", + DeprecationWarning, + stacklevel=2, + ) + return self._category + raise AttributeError(name) + + @property + def width(self): + return self.size[0] + + @property + def height(self): + return self.size[1] + + @property + def size(self): + return self._size + + def _new(self, im): + new = Image() + new.im = im + new.mode = im.mode + new._size = im.size + if im.mode in ("P", "PA"): + if self.palette: + new.palette = self.palette.copy() + else: + from . import ImagePalette + + new.palette = ImagePalette.ImagePalette() + new.info = self.info.copy() + return new + + # Context manager support + def __enter__(self): + return self + + def __exit__(self, *args): + if hasattr(self, "fp") and getattr(self, "_exclusive_fp", False): + if hasattr(self, "_close__fp"): + self._close__fp() + if self.fp: + self.fp.close() + self.fp = None + + def close(self): + """ + Closes the file pointer, if possible. + + This operation will destroy the image core and release its memory. + The image data will be unusable afterward. + + This function is required to close images that have multiple frames or + have not had their file read and closed by the + :py:meth:`~PIL.Image.Image.load` method. See :ref:`file-handling` for + more information. + """ + try: + if hasattr(self, "_close__fp"): + self._close__fp() + if self.fp: + self.fp.close() + self.fp = None + except Exception as msg: + logger.debug("Error closing: %s", msg) + + if getattr(self, "map", None): + self.map = None + + # Instead of simply setting to None, we're setting up a + # deferred error that will better explain that the core image + # object is gone. + self.im = deferred_error(ValueError("Operation on closed image")) + + def _copy(self): + self.load() + self.im = self.im.copy() + self.pyaccess = None + self.readonly = 0 + + def _ensure_mutable(self): + if self.readonly: + self._copy() + else: + self.load() + + def _dump(self, file=None, format=None, **options): + suffix = "" + if format: + suffix = "." + format + + if not file: + f, filename = tempfile.mkstemp(suffix) + os.close(f) + else: + filename = file + if not filename.endswith(suffix): + filename = filename + suffix + + self.load() + + if not format or format == "PPM": + self.im.save_ppm(filename) + else: + self.save(filename, format, **options) + + return filename + + def __eq__(self, other): + return ( + self.__class__ is other.__class__ + and self.mode == other.mode + and self.size == other.size + and self.info == other.info + and self._category == other._category + and self.readonly == other.readonly + and self.getpalette() == other.getpalette() + and self.tobytes() == other.tobytes() + ) + + def __repr__(self): + return "<%s.%s image mode=%s size=%dx%d at 0x%X>" % ( + self.__class__.__module__, + self.__class__.__name__, + self.mode, + self.size[0], + self.size[1], + id(self), + ) + + def _repr_png_(self): + """iPython display hook support + + :returns: png version of the image as bytes + """ + b = io.BytesIO() + try: + self.save(b, "PNG") + except Exception as e: + raise ValueError("Could not save to PNG for display") from e + return b.getvalue() + + def __array__(self, dtype=None): + # numpy array interface support + import numpy as np + + new = {} + shape, typestr = _conv_type_shape(self) + new["shape"] = shape + new["typestr"] = typestr + new["version"] = 3 + if self.mode == "1": + # Binary images need to be extended from bits to bytes + # See: https://github.com/python-pillow/Pillow/issues/350 + new["data"] = self.tobytes("raw", "L") + else: + new["data"] = self.tobytes() + + class ArrayData: + __array_interface__ = new + + return np.array(ArrayData(), dtype) + + def __getstate__(self): + return [self.info, self.mode, self.size, self.getpalette(), self.tobytes()] + + def __setstate__(self, state): + Image.__init__(self) + self.tile = [] + info, mode, size, palette, data = state + self.info = info + self.mode = mode + self._size = size + self.im = core.new(mode, size) + if mode in ("L", "LA", "P", "PA") and palette: + self.putpalette(palette) + self.frombytes(data) + + def tobytes(self, encoder_name="raw", *args): + """ + Return image as a bytes object. + + .. warning:: + + This method returns the raw image data from the internal + storage. For compressed image data (e.g. PNG, JPEG) use + :meth:`~.save`, with a BytesIO parameter for in-memory + data. + + :param encoder_name: What encoder to use. The default is to + use the standard "raw" encoder. + :param args: Extra arguments to the encoder. + :returns: A :py:class:`bytes` object. + """ + + # may pass tuple instead of argument list + if len(args) == 1 and isinstance(args[0], tuple): + args = args[0] + + if encoder_name == "raw" and args == (): + args = self.mode + + self.load() + + # unpack data + e = _getencoder(self.mode, encoder_name, args) + e.setimage(self.im) + + bufsize = max(65536, self.size[0] * 4) # see RawEncode.c + + data = [] + while True: + l, s, d = e.encode(bufsize) + data.append(d) + if s: + break + if s < 0: + raise RuntimeError(f"encoder error {s} in tobytes") + + return b"".join(data) + + def tobitmap(self, name="image"): + """ + Returns the image converted to an X11 bitmap. + + .. note:: This method only works for mode "1" images. + + :param name: The name prefix to use for the bitmap variables. + :returns: A string containing an X11 bitmap. + :raises ValueError: If the mode is not "1" + """ + + self.load() + if self.mode != "1": + raise ValueError("not a bitmap") + data = self.tobytes("xbm") + return b"".join( + [ + f"#define {name}_width {self.size[0]}\n".encode("ascii"), + f"#define {name}_height {self.size[1]}\n".encode("ascii"), + f"static char {name}_bits[] = {{\n".encode("ascii"), + data, + b"};", + ] + ) + + def frombytes(self, data, decoder_name="raw", *args): + """ + Loads this image with pixel data from a bytes object. + + This method is similar to the :py:func:`~PIL.Image.frombytes` function, + but loads data into this image instead of creating a new image object. + """ + + # may pass tuple instead of argument list + if len(args) == 1 and isinstance(args[0], tuple): + args = args[0] + + # default format + if decoder_name == "raw" and args == (): + args = self.mode + + # unpack data + d = _getdecoder(self.mode, decoder_name, args) + d.setimage(self.im) + s = d.decode(data) + + if s[0] >= 0: + raise ValueError("not enough image data") + if s[1] != 0: + raise ValueError("cannot decode image data") + + def load(self): + """ + Allocates storage for the image and loads the pixel data. In + normal cases, you don't need to call this method, since the + Image class automatically loads an opened image when it is + accessed for the first time. + + If the file associated with the image was opened by Pillow, then this + method will close it. The exception to this is if the image has + multiple frames, in which case the file will be left open for seek + operations. See :ref:`file-handling` for more information. + + :returns: An image access object. + :rtype: :ref:`PixelAccess` or :py:class:`PIL.PyAccess` + """ + if self.im and self.palette and self.palette.dirty: + # realize palette + mode, arr = self.palette.getdata() + if mode == "RGBA": + mode = "RGB" + self.info["transparency"] = arr[3::4] + arr = bytes( + value for (index, value) in enumerate(arr) if index % 4 != 3 + ) + palette_length = self.im.putpalette(mode, arr) + self.palette.dirty = 0 + self.palette.rawmode = None + if "transparency" in self.info and mode in ("RGBA", "LA", "PA"): + if isinstance(self.info["transparency"], int): + self.im.putpalettealpha(self.info["transparency"], 0) + else: + self.im.putpalettealphas(self.info["transparency"]) + self.palette.mode = "RGBA" + else: + self.palette.mode = "RGB" + self.palette.palette = self.im.getpalette()[: palette_length * 3] + + if self.im: + if cffi and USE_CFFI_ACCESS: + if self.pyaccess: + return self.pyaccess + from . import PyAccess + + self.pyaccess = PyAccess.new(self, self.readonly) + if self.pyaccess: + return self.pyaccess + return self.im.pixel_access(self.readonly) + + def verify(self): + """ + Verifies the contents of a file. For data read from a file, this + method attempts to determine if the file is broken, without + actually decoding the image data. If this method finds any + problems, it raises suitable exceptions. If you need to load + the image after using this method, you must reopen the image + file. + """ + pass + + def convert(self, mode=None, matrix=None, dither=None, palette=WEB, colors=256): + """ + Returns a converted copy of this image. For the "P" mode, this + method translates pixels through the palette. If mode is + omitted, a mode is chosen so that all information in the image + and the palette can be represented without a palette. + + The current version supports all possible conversions between + "L", "RGB" and "CMYK." The ``matrix`` argument only supports "L" + and "RGB". + + When translating a color image to greyscale (mode "L"), + the library uses the ITU-R 601-2 luma transform:: + + L = R * 299/1000 + G * 587/1000 + B * 114/1000 + + The default method of converting a greyscale ("L") or "RGB" + image into a bilevel (mode "1") image uses Floyd-Steinberg + dither to approximate the original image luminosity levels. If + dither is :data:`NONE`, all values larger than 127 are set to 255 (white), + all other values to 0 (black). To use other thresholds, use the + :py:meth:`~PIL.Image.Image.point` method. + + When converting from "RGBA" to "P" without a ``matrix`` argument, + this passes the operation to :py:meth:`~PIL.Image.Image.quantize`, + and ``dither`` and ``palette`` are ignored. + + :param mode: The requested mode. See: :ref:`concept-modes`. + :param matrix: An optional conversion matrix. If given, this + should be 4- or 12-tuple containing floating point values. + :param dither: Dithering method, used when converting from + mode "RGB" to "P" or from "RGB" or "L" to "1". + Available methods are :data:`NONE` or :data:`FLOYDSTEINBERG` (default). + Note that this is not used when ``matrix`` is supplied. + :param palette: Palette to use when converting from mode "RGB" + to "P". Available palettes are :data:`WEB` or :data:`ADAPTIVE`. + :param colors: Number of colors to use for the :data:`ADAPTIVE` palette. + Defaults to 256. + :rtype: :py:class:`~PIL.Image.Image` + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + self.load() + + has_transparency = self.info.get("transparency") is not None + if not mode and self.mode == "P": + # determine default mode + if self.palette: + mode = self.palette.mode + else: + mode = "RGB" + if mode == "RGB" and has_transparency: + mode = "RGBA" + if not mode or (mode == self.mode and not matrix): + return self.copy() + + if matrix: + # matrix conversion + if mode not in ("L", "RGB"): + raise ValueError("illegal conversion") + im = self.im.convert_matrix(mode, matrix) + new = self._new(im) + if has_transparency and self.im.bands == 3: + transparency = new.info["transparency"] + + def convert_transparency(m, v): + v = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3] * 0.5 + return max(0, min(255, int(v))) + + if mode == "L": + transparency = convert_transparency(matrix, transparency) + elif len(mode) == 3: + transparency = tuple( + [ + convert_transparency( + matrix[i * 4 : i * 4 + 4], transparency + ) + for i in range(0, len(transparency)) + ] + ) + new.info["transparency"] = transparency + return new + + if mode == "P" and self.mode == "RGBA": + return self.quantize(colors) + + trns = None + delete_trns = False + # transparency handling + if has_transparency: + if self.mode in ("1", "L", "I", "RGB") and mode == "RGBA": + # Use transparent conversion to promote from transparent + # color to an alpha channel. + new_im = self._new( + self.im.convert_transparent(mode, self.info["transparency"]) + ) + del new_im.info["transparency"] + return new_im + elif self.mode in ("L", "RGB", "P") and mode in ("L", "RGB", "P"): + t = self.info["transparency"] + if isinstance(t, bytes): + # Dragons. This can't be represented by a single color + warnings.warn( + "Palette images with Transparency expressed in bytes should be " + "converted to RGBA images" + ) + delete_trns = True + else: + # get the new transparency color. + # use existing conversions + trns_im = Image()._new(core.new(self.mode, (1, 1))) + if self.mode == "P": + trns_im.putpalette(self.palette) + if isinstance(t, tuple): + err = "Couldn't allocate a palette color for transparency" + try: + t = trns_im.palette.getcolor(t, self) + except ValueError as e: + if str(e) == "cannot allocate more than 256 colors": + # If all 256 colors are in use, + # then there is no need for transparency + t = None + else: + raise ValueError(err) from e + if t is None: + trns = None + else: + trns_im.putpixel((0, 0), t) + + if mode in ("L", "RGB"): + trns_im = trns_im.convert(mode) + else: + # can't just retrieve the palette number, got to do it + # after quantization. + trns_im = trns_im.convert("RGB") + trns = trns_im.getpixel((0, 0)) + + elif self.mode == "P" and mode in ("LA", "PA", "RGBA"): + t = self.info["transparency"] + delete_trns = True + + if isinstance(t, bytes): + self.im.putpalettealphas(t) + elif isinstance(t, int): + self.im.putpalettealpha(t, 0) + else: + raise ValueError("Transparency for P mode should be bytes or int") + + if mode == "P" and palette == ADAPTIVE: + im = self.im.quantize(colors) + new = self._new(im) + from . import ImagePalette + + new.palette = ImagePalette.ImagePalette("RGB", new.im.getpalette("RGB")) + if delete_trns: + # This could possibly happen if we requantize to fewer colors. + # The transparency would be totally off in that case. + del new.info["transparency"] + if trns is not None: + try: + new.info["transparency"] = new.palette.getcolor(trns, new) + except Exception: + # if we can't make a transparent color, don't leave the old + # transparency hanging around to mess us up. + del new.info["transparency"] + warnings.warn("Couldn't allocate palette entry for transparency") + return new + + # colorspace conversion + if dither is None: + dither = FLOYDSTEINBERG + + try: + im = self.im.convert(mode, dither) + except ValueError: + try: + # normalize source image and try again + im = self.im.convert(getmodebase(self.mode)) + im = im.convert(mode, dither) + except KeyError as e: + raise ValueError("illegal conversion") from e + + new_im = self._new(im) + if mode == "P" and palette != ADAPTIVE: + from . import ImagePalette + + new_im.palette = ImagePalette.ImagePalette("RGB", list(range(256)) * 3) + if delete_trns: + # crash fail if we leave a bytes transparency in an rgb/l mode. + del new_im.info["transparency"] + if trns is not None: + if new_im.mode == "P": + try: + new_im.info["transparency"] = new_im.palette.getcolor(trns, new_im) + except ValueError as e: + del new_im.info["transparency"] + if str(e) != "cannot allocate more than 256 colors": + # If all 256 colors are in use, + # then there is no need for transparency + warnings.warn( + "Couldn't allocate palette entry for transparency" + ) + else: + new_im.info["transparency"] = trns + return new_im + + def quantize(self, colors=256, method=None, kmeans=0, palette=None, dither=1): + """ + Convert the image to 'P' mode with the specified number + of colors. + + :param colors: The desired number of colors, <= 256 + :param method: :data:`MEDIANCUT` (median cut), + :data:`MAXCOVERAGE` (maximum coverage), + :data:`FASTOCTREE` (fast octree), + :data:`LIBIMAGEQUANT` (libimagequant; check support using + :py:func:`PIL.features.check_feature` + with ``feature="libimagequant"``). + + By default, :data:`MEDIANCUT` will be used. + + The exception to this is RGBA images. :data:`MEDIANCUT` and + :data:`MAXCOVERAGE` do not support RGBA images, so + :data:`FASTOCTREE` is used by default instead. + :param kmeans: Integer + :param palette: Quantize to the palette of given + :py:class:`PIL.Image.Image`. + :param dither: Dithering method, used when converting from + mode "RGB" to "P" or from "RGB" or "L" to "1". + Available methods are :data:`NONE` or :data:`FLOYDSTEINBERG` (default). + Default: 1 (legacy setting) + :returns: A new image + + """ + + self.load() + + if method is None: + # defaults: + method = MEDIANCUT + if self.mode == "RGBA": + method = FASTOCTREE + + if self.mode == "RGBA" and method not in (FASTOCTREE, LIBIMAGEQUANT): + # Caller specified an invalid mode. + raise ValueError( + "Fast Octree (method == 2) and libimagequant (method == 3) " + "are the only valid methods for quantizing RGBA images" + ) + + if palette: + # use palette from reference image + palette.load() + if palette.mode != "P": + raise ValueError("bad mode for palette image") + if self.mode != "RGB" and self.mode != "L": + raise ValueError( + "only RGB or L mode images can be quantized to a palette" + ) + im = self.im.convert("P", dither, palette.im) + new_im = self._new(im) + new_im.palette = palette.palette.copy() + return new_im + + im = self._new(self.im.quantize(colors, method, kmeans)) + + from . import ImagePalette + + mode = im.im.getpalettemode() + im.palette = ImagePalette.ImagePalette(mode, im.im.getpalette(mode, mode)) + + return im + + def copy(self): + """ + Copies this image. Use this method if you wish to paste things + into an image, but still retain the original. + + :rtype: :py:class:`~PIL.Image.Image` + :returns: An :py:class:`~PIL.Image.Image` object. + """ + self.load() + return self._new(self.im.copy()) + + __copy__ = copy + + def crop(self, box=None): + """ + Returns a rectangular region from this image. The box is a + 4-tuple defining the left, upper, right, and lower pixel + coordinate. See :ref:`coordinate-system`. + + Note: Prior to Pillow 3.4.0, this was a lazy operation. + + :param box: The crop rectangle, as a (left, upper, right, lower)-tuple. + :rtype: :py:class:`~PIL.Image.Image` + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + if box is None: + return self.copy() + + self.load() + return self._new(self._crop(self.im, box)) + + def _crop(self, im, box): + """ + Returns a rectangular region from the core image object im. + + This is equivalent to calling im.crop((x0, y0, x1, y1)), but + includes additional sanity checks. + + :param im: a core image object + :param box: The crop rectangle, as a (left, upper, right, lower)-tuple. + :returns: A core image object. + """ + + x0, y0, x1, y1 = map(int, map(round, box)) + + absolute_values = (abs(x1 - x0), abs(y1 - y0)) + + _decompression_bomb_check(absolute_values) + + return im.crop((x0, y0, x1, y1)) + + def draft(self, mode, size): + """ + Configures the image file loader so it returns a version of the + image that as closely as possible matches the given mode and + size. For example, you can use this method to convert a color + JPEG to greyscale while loading it. + + If any changes are made, returns a tuple with the chosen ``mode`` and + ``box`` with coordinates of the original image within the altered one. + + Note that this method modifies the :py:class:`~PIL.Image.Image` object + in place. If the image has already been loaded, this method has no + effect. + + Note: This method is not implemented for most images. It is + currently implemented only for JPEG and MPO images. + + :param mode: The requested mode. + :param size: The requested size. + """ + pass + + def _expand(self, xmargin, ymargin=None): + if ymargin is None: + ymargin = xmargin + self.load() + return self._new(self.im.expand(xmargin, ymargin, 0)) + + def filter(self, filter): + """ + Filters this image using the given filter. For a list of + available filters, see the :py:mod:`~PIL.ImageFilter` module. + + :param filter: Filter kernel. + :returns: An :py:class:`~PIL.Image.Image` object.""" + + from . import ImageFilter + + self.load() + + if isinstance(filter, Callable): + filter = filter() + if not hasattr(filter, "filter"): + raise TypeError( + "filter argument should be ImageFilter.Filter instance or class" + ) + + multiband = isinstance(filter, ImageFilter.MultibandFilter) + if self.im.bands == 1 or multiband: + return self._new(filter.filter(self.im)) + + ims = [] + for c in range(self.im.bands): + ims.append(self._new(filter.filter(self.im.getband(c)))) + return merge(self.mode, ims) + + def getbands(self): + """ + Returns a tuple containing the name of each band in this image. + For example, ``getbands`` on an RGB image returns ("R", "G", "B"). + + :returns: A tuple containing band names. + :rtype: tuple + """ + return ImageMode.getmode(self.mode).bands + + def getbbox(self): + """ + Calculates the bounding box of the non-zero regions in the + image. + + :returns: The bounding box is returned as a 4-tuple defining the + left, upper, right, and lower pixel coordinate. See + :ref:`coordinate-system`. If the image is completely empty, this + method returns None. + + """ + + self.load() + return self.im.getbbox() + + def getcolors(self, maxcolors=256): + """ + Returns a list of colors used in this image. + + The colors will be in the image's mode. For example, an RGB image will + return a tuple of (red, green, blue) color values, and a P image will + return the index of the color in the palette. + + :param maxcolors: Maximum number of colors. If this number is + exceeded, this method returns None. The default limit is + 256 colors. + :returns: An unsorted list of (count, pixel) values. + """ + + self.load() + if self.mode in ("1", "L", "P"): + h = self.im.histogram() + out = [] + for i in range(256): + if h[i]: + out.append((h[i], i)) + if len(out) > maxcolors: + return None + return out + return self.im.getcolors(maxcolors) + + def getdata(self, band=None): + """ + Returns the contents of this image as a sequence object + containing pixel values. The sequence object is flattened, so + that values for line one follow directly after the values of + line zero, and so on. + + Note that the sequence object returned by this method is an + internal PIL data type, which only supports certain sequence + operations. To convert it to an ordinary sequence (e.g. for + printing), use ``list(im.getdata())``. + + :param band: What band to return. The default is to return + all bands. To return a single band, pass in the index + value (e.g. 0 to get the "R" band from an "RGB" image). + :returns: A sequence-like object. + """ + + self.load() + if band is not None: + return self.im.getband(band) + return self.im # could be abused + + def getextrema(self): + """ + Gets the the minimum and maximum pixel values for each band in + the image. + + :returns: For a single-band image, a 2-tuple containing the + minimum and maximum pixel value. For a multi-band image, + a tuple containing one 2-tuple for each band. + """ + + self.load() + if self.im.bands > 1: + extrema = [] + for i in range(self.im.bands): + extrema.append(self.im.getband(i).getextrema()) + return tuple(extrema) + return self.im.getextrema() + + def _getxmp(self, xmp_tags): + def get_name(tag): + return tag.split("}")[1] + + def get_value(element): + value = {get_name(k): v for k, v in element.attrib.items()} + children = list(element) + if children: + for child in children: + name = get_name(child.tag) + child_value = get_value(child) + if name in value: + if not isinstance(value[name], list): + value[name] = [value[name]] + value[name].append(child_value) + else: + value[name] = child_value + elif value: + if element.text: + value["text"] = element.text + else: + return element.text + return value + + if ElementTree is None: + warnings.warn("XMP data cannot be read without defusedxml dependency") + return {} + else: + root = ElementTree.fromstring(xmp_tags) + return {get_name(root.tag): get_value(root)} + + def getexif(self): + if self._exif is None: + self._exif = Exif() + + exif_info = self.info.get("exif") + if exif_info is None: + if "Raw profile type exif" in self.info: + exif_info = bytes.fromhex( + "".join(self.info["Raw profile type exif"].split("\n")[3:]) + ) + elif hasattr(self, "tag_v2"): + self._exif.endian = self.tag_v2._endian + self._exif.load_from_fp(self.fp, self.tag_v2._offset) + if exif_info is not None: + self._exif.load(exif_info) + + # XMP tags + if 0x0112 not in self._exif: + xmp_tags = self.info.get("XML:com.adobe.xmp") + if xmp_tags: + match = re.search(r'tiff:Orientation="([0-9])"', xmp_tags) + if match: + self._exif[0x0112] = int(match[1]) + + return self._exif + + def getim(self): + """ + Returns a capsule that points to the internal image memory. + + :returns: A capsule object. + """ + + self.load() + return self.im.ptr + + def getpalette(self): + """ + Returns the image palette as a list. + + :returns: A list of color values [r, g, b, ...], or None if the + image has no palette. + """ + + self.load() + try: + return list(self.im.getpalette()) + except ValueError: + return None # no palette + + def getpixel(self, xy): + """ + Returns the pixel value at a given position. + + :param xy: The coordinate, given as (x, y). See + :ref:`coordinate-system`. + :returns: The pixel value. If the image is a multi-layer image, + this method returns a tuple. + """ + + self.load() + if self.pyaccess: + return self.pyaccess.getpixel(xy) + return self.im.getpixel(xy) + + def getprojection(self): + """ + Get projection to x and y axes + + :returns: Two sequences, indicating where there are non-zero + pixels along the X-axis and the Y-axis, respectively. + """ + + self.load() + x, y = self.im.getprojection() + return list(x), list(y) + + def histogram(self, mask=None, extrema=None): + """ + Returns a histogram for the image. The histogram is returned as + a list of pixel counts, one for each pixel value in the source + image. If the image has more than one band, the histograms for + all bands are concatenated (for example, the histogram for an + "RGB" image contains 768 values). + + A bilevel image (mode "1") is treated as a greyscale ("L") image + by this method. + + If a mask is provided, the method returns a histogram for those + parts of the image where the mask image is non-zero. The mask + image must have the same size as the image, and be either a + bi-level image (mode "1") or a greyscale image ("L"). + + :param mask: An optional mask. + :param extrema: An optional tuple of manually-specified extrema. + :returns: A list containing pixel counts. + """ + self.load() + if mask: + mask.load() + return self.im.histogram((0, 0), mask.im) + if self.mode in ("I", "F"): + if extrema is None: + extrema = self.getextrema() + return self.im.histogram(extrema) + return self.im.histogram() + + def entropy(self, mask=None, extrema=None): + """ + Calculates and returns the entropy for the image. + + A bilevel image (mode "1") is treated as a greyscale ("L") + image by this method. + + If a mask is provided, the method employs the histogram for + those parts of the image where the mask image is non-zero. + The mask image must have the same size as the image, and be + either a bi-level image (mode "1") or a greyscale image ("L"). + + :param mask: An optional mask. + :param extrema: An optional tuple of manually-specified extrema. + :returns: A float value representing the image entropy + """ + self.load() + if mask: + mask.load() + return self.im.entropy((0, 0), mask.im) + if self.mode in ("I", "F"): + if extrema is None: + extrema = self.getextrema() + return self.im.entropy(extrema) + return self.im.entropy() + + def paste(self, im, box=None, mask=None): + """ + Pastes another image into this image. The box argument is either + a 2-tuple giving the upper left corner, a 4-tuple defining the + left, upper, right, and lower pixel coordinate, or None (same as + (0, 0)). See :ref:`coordinate-system`. If a 4-tuple is given, the size + of the pasted image must match the size of the region. + + If the modes don't match, the pasted image is converted to the mode of + this image (see the :py:meth:`~PIL.Image.Image.convert` method for + details). + + Instead of an image, the source can be a integer or tuple + containing pixel values. The method then fills the region + with the given color. When creating RGB images, you can + also use color strings as supported by the ImageColor module. + + If a mask is given, this method updates only the regions + indicated by the mask. You can use either "1", "L" or "RGBA" + images (in the latter case, the alpha band is used as mask). + Where the mask is 255, the given image is copied as is. Where + the mask is 0, the current value is preserved. Intermediate + values will mix the two images together, including their alpha + channels if they have them. + + See :py:meth:`~PIL.Image.Image.alpha_composite` if you want to + combine images with respect to their alpha channels. + + :param im: Source image or pixel value (integer or tuple). + :param box: An optional 4-tuple giving the region to paste into. + If a 2-tuple is used instead, it's treated as the upper left + corner. If omitted or None, the source is pasted into the + upper left corner. + + If an image is given as the second argument and there is no + third, the box defaults to (0, 0), and the second argument + is interpreted as a mask image. + :param mask: An optional mask image. + """ + + if isImageType(box) and mask is None: + # abbreviated paste(im, mask) syntax + mask = box + box = None + + if box is None: + box = (0, 0) + + if len(box) == 2: + # upper left corner given; get size from image or mask + if isImageType(im): + size = im.size + elif isImageType(mask): + size = mask.size + else: + # FIXME: use self.size here? + raise ValueError("cannot determine region size; use 4-item box") + box += (box[0] + size[0], box[1] + size[1]) + + if isinstance(im, str): + from . import ImageColor + + im = ImageColor.getcolor(im, self.mode) + + elif isImageType(im): + im.load() + if self.mode != im.mode: + if self.mode != "RGB" or im.mode not in ("RGBA", "RGBa"): + # should use an adapter for this! + im = im.convert(self.mode) + im = im.im + + self._ensure_mutable() + + if mask: + mask.load() + self.im.paste(im, box, mask.im) + else: + self.im.paste(im, box) + + def alpha_composite(self, im, dest=(0, 0), source=(0, 0)): + """'In-place' analog of Image.alpha_composite. Composites an image + onto this image. + + :param im: image to composite over this one + :param dest: Optional 2 tuple (left, top) specifying the upper + left corner in this (destination) image. + :param source: Optional 2 (left, top) tuple for the upper left + corner in the overlay source image, or 4 tuple (left, top, right, + bottom) for the bounds of the source rectangle + + Performance Note: Not currently implemented in-place in the core layer. + """ + + if not isinstance(source, (list, tuple)): + raise ValueError("Source must be a tuple") + if not isinstance(dest, (list, tuple)): + raise ValueError("Destination must be a tuple") + if not len(source) in (2, 4): + raise ValueError("Source must be a 2 or 4-tuple") + if not len(dest) == 2: + raise ValueError("Destination must be a 2-tuple") + if min(source) < 0: + raise ValueError("Source must be non-negative") + + if len(source) == 2: + source = source + im.size + + # over image, crop if it's not the whole thing. + if source == (0, 0) + im.size: + overlay = im + else: + overlay = im.crop(source) + + # target for the paste + box = dest + (dest[0] + overlay.width, dest[1] + overlay.height) + + # destination image. don't copy if we're using the whole image. + if box == (0, 0) + self.size: + background = self + else: + background = self.crop(box) + + result = alpha_composite(background, overlay) + self.paste(result, box) + + def point(self, lut, mode=None): + """ + Maps this image through a lookup table or function. + + :param lut: A lookup table, containing 256 (or 65536 if + self.mode=="I" and mode == "L") values per band in the + image. A function can be used instead, it should take a + single argument. The function is called once for each + possible pixel value, and the resulting table is applied to + all bands of the image. + + It may also be an :py:class:`~PIL.Image.ImagePointHandler` + object:: + + class Example(Image.ImagePointHandler): + def point(self, data): + # Return result + :param mode: Output mode (default is same as input). In the + current version, this can only be used if the source image + has mode "L" or "P", and the output has mode "1" or the + source image mode is "I" and the output mode is "L". + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + self.load() + + if isinstance(lut, ImagePointHandler): + return lut.point(self) + + if callable(lut): + # if it isn't a list, it should be a function + if self.mode in ("I", "I;16", "F"): + # check if the function can be used with point_transform + # UNDONE wiredfool -- I think this prevents us from ever doing + # a gamma function point transform on > 8bit images. + scale, offset = _getscaleoffset(lut) + return self._new(self.im.point_transform(scale, offset)) + # for other modes, convert the function to a table + lut = [lut(i) for i in range(256)] * self.im.bands + + if self.mode == "F": + # FIXME: _imaging returns a confusing error message for this case + raise ValueError("point operation not supported for this mode") + + return self._new(self.im.point(lut, mode)) + + def putalpha(self, alpha): + """ + Adds or replaces the alpha layer in this image. If the image + does not have an alpha layer, it's converted to "LA" or "RGBA". + The new layer must be either "L" or "1". + + :param alpha: The new alpha layer. This can either be an "L" or "1" + image having the same size as this image, or an integer or + other color value. + """ + + self._ensure_mutable() + + if self.mode not in ("LA", "PA", "RGBA"): + # attempt to promote self to a matching alpha mode + try: + mode = getmodebase(self.mode) + "A" + try: + self.im.setmode(mode) + except (AttributeError, ValueError) as e: + # do things the hard way + im = self.im.convert(mode) + if im.mode not in ("LA", "PA", "RGBA"): + raise ValueError from e # sanity check + self.im = im + self.pyaccess = None + self.mode = self.im.mode + except KeyError as e: + raise ValueError("illegal image mode") from e + + if self.mode in ("LA", "PA"): + band = 1 + else: + band = 3 + + if isImageType(alpha): + # alpha layer + if alpha.mode not in ("1", "L"): + raise ValueError("illegal image mode") + alpha.load() + if alpha.mode == "1": + alpha = alpha.convert("L") + else: + # constant alpha + try: + self.im.fillband(band, alpha) + except (AttributeError, ValueError): + # do things the hard way + alpha = new("L", self.size, alpha) + else: + return + + self.im.putband(alpha.im, band) + + def putdata(self, data, scale=1.0, offset=0.0): + """ + Copies pixel data to this image. This method copies data from a + sequence object into the image, starting at the upper left + corner (0, 0), and continuing until either the image or the + sequence ends. The scale and offset values are used to adjust + the sequence values: **pixel = value*scale + offset**. + + :param data: A sequence object. + :param scale: An optional scale value. The default is 1.0. + :param offset: An optional offset value. The default is 0.0. + """ + + self._ensure_mutable() + + self.im.putdata(data, scale, offset) + + def putpalette(self, data, rawmode="RGB"): + """ + Attaches a palette to this image. The image must be a "P", "PA", "L" + or "LA" image. + + The palette sequence must contain at most 256 colors, made up of one + integer value for each channel in the raw mode. + For example, if the raw mode is "RGB", then it can contain at most 768 + values, made up of red, green and blue values for the corresponding pixel + index in the 256 colors. + If the raw mode is "RGBA", then it can contain at most 1024 values, + containing red, green, blue and alpha values. + + Alternatively, an 8-bit string may be used instead of an integer sequence. + + :param data: A palette sequence (either a list or a string). + :param rawmode: The raw mode of the palette. Either "RGB", "RGBA", or a + mode that can be transformed to "RGB" (e.g. "R", "BGR;15", "RGBA;L"). + """ + from . import ImagePalette + + if self.mode not in ("L", "LA", "P", "PA"): + raise ValueError("illegal image mode") + if isinstance(data, ImagePalette.ImagePalette): + palette = ImagePalette.raw(data.rawmode, data.palette) + else: + if not isinstance(data, bytes): + data = bytes(data) + palette = ImagePalette.raw(rawmode, data) + self.mode = "PA" if "A" in self.mode else "P" + self.palette = palette + self.palette.mode = "RGB" + self.load() # install new palette + + def putpixel(self, xy, value): + """ + Modifies the pixel at the given position. The color is given as + a single numerical value for single-band images, and a tuple for + multi-band images. In addition to this, RGB and RGBA tuples are + accepted for P images. + + Note that this method is relatively slow. For more extensive changes, + use :py:meth:`~PIL.Image.Image.paste` or the :py:mod:`~PIL.ImageDraw` + module instead. + + See: + + * :py:meth:`~PIL.Image.Image.paste` + * :py:meth:`~PIL.Image.Image.putdata` + * :py:mod:`~PIL.ImageDraw` + + :param xy: The pixel coordinate, given as (x, y). See + :ref:`coordinate-system`. + :param value: The pixel value. + """ + + if self.readonly: + self._copy() + self.load() + + if self.pyaccess: + return self.pyaccess.putpixel(xy, value) + + if ( + self.mode == "P" + and isinstance(value, (list, tuple)) + and len(value) in [3, 4] + ): + # RGB or RGBA value for a P image + value = self.palette.getcolor(value, self) + return self.im.putpixel(xy, value) + + def remap_palette(self, dest_map, source_palette=None): + """ + Rewrites the image to reorder the palette. + + :param dest_map: A list of indexes into the original palette. + e.g. ``[1,0]`` would swap a two item palette, and ``list(range(256))`` + is the identity transform. + :param source_palette: Bytes or None. + :returns: An :py:class:`~PIL.Image.Image` object. + + """ + from . import ImagePalette + + if self.mode not in ("L", "P"): + raise ValueError("illegal image mode") + + if source_palette is None: + if self.mode == "P": + self.load() + source_palette = self.im.getpalette("RGB")[:768] + else: # L-mode + source_palette = bytearray(i // 3 for i in range(768)) + + palette_bytes = b"" + new_positions = [0] * 256 + + # pick only the used colors from the palette + for i, oldPosition in enumerate(dest_map): + palette_bytes += source_palette[oldPosition * 3 : oldPosition * 3 + 3] + new_positions[oldPosition] = i + + # replace the palette color id of all pixel with the new id + + # Palette images are [0..255], mapped through a 1 or 3 + # byte/color map. We need to remap the whole image + # from palette 1 to palette 2. New_positions is + # an array of indexes into palette 1. Palette 2 is + # palette 1 with any holes removed. + + # We're going to leverage the convert mechanism to use the + # C code to remap the image from palette 1 to palette 2, + # by forcing the source image into 'L' mode and adding a + # mapping 'L' mode palette, then converting back to 'L' + # sans palette thus converting the image bytes, then + # assigning the optimized RGB palette. + + # perf reference, 9500x4000 gif, w/~135 colors + # 14 sec prepatch, 1 sec postpatch with optimization forced. + + mapping_palette = bytearray(new_positions) + + m_im = self.copy() + m_im.mode = "P" + + m_im.palette = ImagePalette.ImagePalette("RGB", palette=mapping_palette * 3) + # possibly set palette dirty, then + # m_im.putpalette(mapping_palette, 'L') # converts to 'P' + # or just force it. + # UNDONE -- this is part of the general issue with palettes + m_im.im.putpalette("RGB;L", m_im.palette.tobytes()) + + m_im = m_im.convert("L") + + # Internally, we require 768 bytes for a palette. + new_palette_bytes = palette_bytes + (768 - len(palette_bytes)) * b"\x00" + m_im.putpalette(new_palette_bytes) + m_im.palette = ImagePalette.ImagePalette("RGB", palette=palette_bytes) + + return m_im + + def _get_safe_box(self, size, resample, box): + """Expands the box so it includes adjacent pixels + that may be used by resampling with the given resampling filter. + """ + filter_support = _filters_support[resample] - 0.5 + scale_x = (box[2] - box[0]) / size[0] + scale_y = (box[3] - box[1]) / size[1] + support_x = filter_support * scale_x + support_y = filter_support * scale_y + + return ( + max(0, int(box[0] - support_x)), + max(0, int(box[1] - support_y)), + min(self.size[0], math.ceil(box[2] + support_x)), + min(self.size[1], math.ceil(box[3] + support_y)), + ) + + def resize(self, size, resample=None, box=None, reducing_gap=None): + """ + Returns a resized copy of this image. + + :param size: The requested size in pixels, as a 2-tuple: + (width, height). + :param resample: An optional resampling filter. This can be + one of :py:data:`PIL.Image.NEAREST`, :py:data:`PIL.Image.BOX`, + :py:data:`PIL.Image.BILINEAR`, :py:data:`PIL.Image.HAMMING`, + :py:data:`PIL.Image.BICUBIC` or :py:data:`PIL.Image.LANCZOS`. + If the image has mode "1" or "P", it is always set to + :py:data:`PIL.Image.NEAREST`. + If the image mode specifies a number of bits, such as "I;16", then the + default filter is :py:data:`PIL.Image.NEAREST`. + Otherwise, the default filter is :py:data:`PIL.Image.BICUBIC`. + See: :ref:`concept-filters`. + :param box: An optional 4-tuple of floats providing + the source image region to be scaled. + The values must be within (0, 0, width, height) rectangle. + If omitted or None, the entire source is used. + :param reducing_gap: Apply optimization by resizing the image + in two steps. First, reducing the image by integer times + using :py:meth:`~PIL.Image.Image.reduce`. + Second, resizing using regular resampling. The last step + changes size no less than by ``reducing_gap`` times. + ``reducing_gap`` may be None (no first step is performed) + or should be greater than 1.0. The bigger ``reducing_gap``, + the closer the result to the fair resampling. + The smaller ``reducing_gap``, the faster resizing. + With ``reducing_gap`` greater or equal to 3.0, the result is + indistinguishable from fair resampling in most cases. + The default value is None (no optimization). + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + if resample is None: + type_special = ";" in self.mode + resample = NEAREST if type_special else BICUBIC + elif resample not in (NEAREST, BILINEAR, BICUBIC, LANCZOS, BOX, HAMMING): + message = f"Unknown resampling filter ({resample})." + + filters = [ + "{} ({})".format(filter[1], filter[0]) + for filter in ( + (NEAREST, "Image.NEAREST"), + (LANCZOS, "Image.LANCZOS"), + (BILINEAR, "Image.BILINEAR"), + (BICUBIC, "Image.BICUBIC"), + (BOX, "Image.BOX"), + (HAMMING, "Image.HAMMING"), + ) + ] + raise ValueError( + message + " Use " + ", ".join(filters[:-1]) + " or " + filters[-1] + ) + + if reducing_gap is not None and reducing_gap < 1.0: + raise ValueError("reducing_gap must be 1.0 or greater") + + size = tuple(size) + + if box is None: + box = (0, 0) + self.size + else: + box = tuple(box) + + if self.size == size and box == (0, 0) + self.size: + return self.copy() + + if self.mode in ("1", "P"): + resample = NEAREST + + if self.mode in ["LA", "RGBA"] and resample != NEAREST: + im = self.convert({"LA": "La", "RGBA": "RGBa"}[self.mode]) + im = im.resize(size, resample, box) + return im.convert(self.mode) + + self.load() + + if reducing_gap is not None and resample != NEAREST: + factor_x = int((box[2] - box[0]) / size[0] / reducing_gap) or 1 + factor_y = int((box[3] - box[1]) / size[1] / reducing_gap) or 1 + if factor_x > 1 or factor_y > 1: + reduce_box = self._get_safe_box(size, resample, box) + factor = (factor_x, factor_y) + if callable(self.reduce): + self = self.reduce(factor, box=reduce_box) + else: + self = Image.reduce(self, factor, box=reduce_box) + box = ( + (box[0] - reduce_box[0]) / factor_x, + (box[1] - reduce_box[1]) / factor_y, + (box[2] - reduce_box[0]) / factor_x, + (box[3] - reduce_box[1]) / factor_y, + ) + + return self._new(self.im.resize(size, resample, box)) + + def reduce(self, factor, box=None): + """ + Returns a copy of the image reduced ``factor`` times. + If the size of the image is not dividable by ``factor``, + the resulting size will be rounded up. + + :param factor: A greater than 0 integer or tuple of two integers + for width and height separately. + :param box: An optional 4-tuple of ints providing + the source image region to be reduced. + The values must be within ``(0, 0, width, height)`` rectangle. + If omitted or ``None``, the entire source is used. + """ + if not isinstance(factor, (list, tuple)): + factor = (factor, factor) + + if box is None: + box = (0, 0) + self.size + else: + box = tuple(box) + + if factor == (1, 1) and box == (0, 0) + self.size: + return self.copy() + + if self.mode in ["LA", "RGBA"]: + im = self.convert({"LA": "La", "RGBA": "RGBa"}[self.mode]) + im = im.reduce(factor, box) + return im.convert(self.mode) + + self.load() + + return self._new(self.im.reduce(factor, box)) + + def rotate( + self, + angle, + resample=NEAREST, + expand=0, + center=None, + translate=None, + fillcolor=None, + ): + """ + Returns a rotated copy of this image. This method returns a + copy of this image, rotated the given number of degrees counter + clockwise around its centre. + + :param angle: In degrees counter clockwise. + :param resample: An optional resampling filter. This can be + one of :py:data:`PIL.Image.NEAREST` (use nearest neighbour), + :py:data:`PIL.Image.BILINEAR` (linear interpolation in a 2x2 + environment), or :py:data:`PIL.Image.BICUBIC` + (cubic spline interpolation in a 4x4 environment). + If omitted, or if the image has mode "1" or "P", it is + set to :py:data:`PIL.Image.NEAREST`. See :ref:`concept-filters`. + :param expand: Optional expansion flag. If true, expands the output + image to make it large enough to hold the entire rotated image. + If false or omitted, make the output image the same size as the + input image. Note that the expand flag assumes rotation around + the center and no translation. + :param center: Optional center of rotation (a 2-tuple). Origin is + the upper left corner. Default is the center of the image. + :param translate: An optional post-rotate translation (a 2-tuple). + :param fillcolor: An optional color for area outside the rotated image. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + angle = angle % 360.0 + + # Fast paths regardless of filter, as long as we're not + # translating or changing the center. + if not (center or translate): + if angle == 0: + return self.copy() + if angle == 180: + return self.transpose(ROTATE_180) + if angle in (90, 270) and (expand or self.width == self.height): + return self.transpose(ROTATE_90 if angle == 90 else ROTATE_270) + + # Calculate the affine matrix. Note that this is the reverse + # transformation (from destination image to source) because we + # want to interpolate the (discrete) destination pixel from + # the local area around the (floating) source pixel. + + # The matrix we actually want (note that it operates from the right): + # (1, 0, tx) (1, 0, cx) ( cos a, sin a, 0) (1, 0, -cx) + # (0, 1, ty) * (0, 1, cy) * (-sin a, cos a, 0) * (0, 1, -cy) + # (0, 0, 1) (0, 0, 1) ( 0, 0, 1) (0, 0, 1) + + # The reverse matrix is thus: + # (1, 0, cx) ( cos -a, sin -a, 0) (1, 0, -cx) (1, 0, -tx) + # (0, 1, cy) * (-sin -a, cos -a, 0) * (0, 1, -cy) * (0, 1, -ty) + # (0, 0, 1) ( 0, 0, 1) (0, 0, 1) (0, 0, 1) + + # In any case, the final translation may be updated at the end to + # compensate for the expand flag. + + w, h = self.size + + if translate is None: + post_trans = (0, 0) + else: + post_trans = translate + if center is None: + # FIXME These should be rounded to ints? + rotn_center = (w / 2.0, h / 2.0) + else: + rotn_center = center + + angle = -math.radians(angle) + matrix = [ + round(math.cos(angle), 15), + round(math.sin(angle), 15), + 0.0, + round(-math.sin(angle), 15), + round(math.cos(angle), 15), + 0.0, + ] + + def transform(x, y, matrix): + (a, b, c, d, e, f) = matrix + return a * x + b * y + c, d * x + e * y + f + + matrix[2], matrix[5] = transform( + -rotn_center[0] - post_trans[0], -rotn_center[1] - post_trans[1], matrix + ) + matrix[2] += rotn_center[0] + matrix[5] += rotn_center[1] + + if expand: + # calculate output size + xx = [] + yy = [] + for x, y in ((0, 0), (w, 0), (w, h), (0, h)): + x, y = transform(x, y, matrix) + xx.append(x) + yy.append(y) + nw = math.ceil(max(xx)) - math.floor(min(xx)) + nh = math.ceil(max(yy)) - math.floor(min(yy)) + + # We multiply a translation matrix from the right. Because of its + # special form, this is the same as taking the image of the + # translation vector as new translation vector. + matrix[2], matrix[5] = transform(-(nw - w) / 2.0, -(nh - h) / 2.0, matrix) + w, h = nw, nh + + return self.transform((w, h), AFFINE, matrix, resample, fillcolor=fillcolor) + + def save(self, fp, format=None, **params): + """ + Saves this image under the given filename. If no format is + specified, the format to use is determined from the filename + extension, if possible. + + Keyword options can be used to provide additional instructions + to the writer. If a writer doesn't recognise an option, it is + silently ignored. The available options are described in the + :doc:`image format documentation + <../handbook/image-file-formats>` for each writer. + + You can use a file object instead of a filename. In this case, + you must always specify the format. The file object must + implement the ``seek``, ``tell``, and ``write`` + methods, and be opened in binary mode. + + :param fp: A filename (string), pathlib.Path object or file object. + :param format: Optional format override. If omitted, the + format to use is determined from the filename extension. + If a file object was used instead of a filename, this + parameter should always be used. + :param params: Extra parameters to the image writer. + :returns: None + :exception ValueError: If the output format could not be determined + from the file name. Use the format option to solve this. + :exception OSError: If the file could not be written. The file + may have been created, and may contain partial data. + """ + + filename = "" + open_fp = False + if isinstance(fp, Path): + filename = str(fp) + open_fp = True + elif isPath(fp): + filename = fp + open_fp = True + elif fp == sys.stdout: + try: + fp = sys.stdout.buffer + except AttributeError: + pass + if not filename and hasattr(fp, "name") and isPath(fp.name): + # only set the name for metadata purposes + filename = fp.name + + # may mutate self! + self._ensure_mutable() + + save_all = params.pop("save_all", False) + self.encoderinfo = params + self.encoderconfig = () + + preinit() + + ext = os.path.splitext(filename)[1].lower() + + if not format: + if ext not in EXTENSION: + init() + try: + format = EXTENSION[ext] + except KeyError as e: + raise ValueError(f"unknown file extension: {ext}") from e + + if format.upper() not in SAVE: + init() + if save_all: + save_handler = SAVE_ALL[format.upper()] + else: + save_handler = SAVE[format.upper()] + + if open_fp: + if params.get("append", False): + # Open also for reading ("+"), because TIFF save_all + # writer needs to go back and edit the written data. + fp = builtins.open(filename, "r+b") + else: + fp = builtins.open(filename, "w+b") + + try: + save_handler(self, fp, filename) + finally: + # do what we can to clean up + if open_fp: + fp.close() + + def seek(self, frame): + """ + Seeks to the given frame in this sequence file. If you seek + beyond the end of the sequence, the method raises an + ``EOFError`` exception. When a sequence file is opened, the + library automatically seeks to frame 0. + + See :py:meth:`~PIL.Image.Image.tell`. + + If defined, :attr:`~PIL.Image.Image.n_frames` refers to the + number of available frames. + + :param frame: Frame number, starting at 0. + :exception EOFError: If the call attempts to seek beyond the end + of the sequence. + """ + + # overridden by file handlers + if frame != 0: + raise EOFError + + def show(self, title=None, command=None): + """ + Displays this image. This method is mainly intended for debugging purposes. + + This method calls :py:func:`PIL.ImageShow.show` internally. You can use + :py:func:`PIL.ImageShow.register` to override its default behaviour. + + The image is first saved to a temporary file. By default, it will be in + PNG format. + + On Unix, the image is then opened using the **display**, **eog** or + **xv** utility, depending on which one can be found. + + On macOS, the image is opened with the native Preview application. + + On Windows, the image is opened with the standard PNG display utility. + + :param title: Optional title to use for the image window, where possible. + """ + + if command is not None: + warnings.warn( + "The command parameter is deprecated and will be removed in Pillow 9 " + "(2022-01-02). Use a subclass of ImageShow.Viewer instead.", + DeprecationWarning, + ) + + _show(self, title=title, command=command) + + def split(self): + """ + Split this image into individual bands. This method returns a + tuple of individual image bands from an image. For example, + splitting an "RGB" image creates three new images each + containing a copy of one of the original bands (red, green, + blue). + + If you need only one band, :py:meth:`~PIL.Image.Image.getchannel` + method can be more convenient and faster. + + :returns: A tuple containing bands. + """ + + self.load() + if self.im.bands == 1: + ims = [self.copy()] + else: + ims = map(self._new, self.im.split()) + return tuple(ims) + + def getchannel(self, channel): + """ + Returns an image containing a single channel of the source image. + + :param channel: What channel to return. Could be index + (0 for "R" channel of "RGB") or channel name + ("A" for alpha channel of "RGBA"). + :returns: An image in "L" mode. + + .. versionadded:: 4.3.0 + """ + self.load() + + if isinstance(channel, str): + try: + channel = self.getbands().index(channel) + except ValueError as e: + raise ValueError(f'The image has no channel "{channel}"') from e + + return self._new(self.im.getband(channel)) + + def tell(self): + """ + Returns the current frame number. See :py:meth:`~PIL.Image.Image.seek`. + + If defined, :attr:`~PIL.Image.Image.n_frames` refers to the + number of available frames. + + :returns: Frame number, starting with 0. + """ + return 0 + + def thumbnail(self, size, resample=BICUBIC, reducing_gap=2.0): + """ + Make this image into a thumbnail. This method modifies the + image to contain a thumbnail version of itself, no larger than + the given size. This method calculates an appropriate thumbnail + size to preserve the aspect of the image, calls the + :py:meth:`~PIL.Image.Image.draft` method to configure the file reader + (where applicable), and finally resizes the image. + + Note that this function modifies the :py:class:`~PIL.Image.Image` + object in place. If you need to use the full resolution image as well, + apply this method to a :py:meth:`~PIL.Image.Image.copy` of the original + image. + + :param size: Requested size. + :param resample: Optional resampling filter. This can be one + of :py:data:`PIL.Image.NEAREST`, :py:data:`PIL.Image.BOX`, + :py:data:`PIL.Image.BILINEAR`, :py:data:`PIL.Image.HAMMING`, + :py:data:`PIL.Image.BICUBIC` or :py:data:`PIL.Image.LANCZOS`. + If omitted, it defaults to :py:data:`PIL.Image.BICUBIC`. + (was :py:data:`PIL.Image.NEAREST` prior to version 2.5.0). + See: :ref:`concept-filters`. + :param reducing_gap: Apply optimization by resizing the image + in two steps. First, reducing the image by integer times + using :py:meth:`~PIL.Image.Image.reduce` or + :py:meth:`~PIL.Image.Image.draft` for JPEG images. + Second, resizing using regular resampling. The last step + changes size no less than by ``reducing_gap`` times. + ``reducing_gap`` may be None (no first step is performed) + or should be greater than 1.0. The bigger ``reducing_gap``, + the closer the result to the fair resampling. + The smaller ``reducing_gap``, the faster resizing. + With ``reducing_gap`` greater or equal to 3.0, the result is + indistinguishable from fair resampling in most cases. + The default value is 2.0 (very close to fair resampling + while still being faster in many cases). + :returns: None + """ + + x, y = map(math.floor, size) + if x >= self.width and y >= self.height: + return + + def round_aspect(number, key): + return max(min(math.floor(number), math.ceil(number), key=key), 1) + + # preserve aspect ratio + aspect = self.width / self.height + if x / y >= aspect: + x = round_aspect(y * aspect, key=lambda n: abs(aspect - n / y)) + else: + y = round_aspect( + x / aspect, key=lambda n: 0 if n == 0 else abs(aspect - x / n) + ) + size = (x, y) + + box = None + if reducing_gap is not None: + res = self.draft(None, (size[0] * reducing_gap, size[1] * reducing_gap)) + if res is not None: + box = res[1] + + if self.size != size: + im = self.resize(size, resample, box=box, reducing_gap=reducing_gap) + + self.im = im.im + self._size = size + self.mode = self.im.mode + + self.readonly = 0 + self.pyaccess = None + + # FIXME: the different transform methods need further explanation + # instead of bloating the method docs, add a separate chapter. + def transform( + self, size, method, data=None, resample=NEAREST, fill=1, fillcolor=None + ): + """ + Transforms this image. This method creates a new image with the + given size, and the same mode as the original, and copies data + to the new image using the given transform. + + :param size: The output size. + :param method: The transformation method. This is one of + :py:data:`PIL.Image.EXTENT` (cut out a rectangular subregion), + :py:data:`PIL.Image.AFFINE` (affine transform), + :py:data:`PIL.Image.PERSPECTIVE` (perspective transform), + :py:data:`PIL.Image.QUAD` (map a quadrilateral to a rectangle), or + :py:data:`PIL.Image.MESH` (map a number of source quadrilaterals + in one operation). + + It may also be an :py:class:`~PIL.Image.ImageTransformHandler` + object:: + + class Example(Image.ImageTransformHandler): + def transform(self, size, data, resample, fill=1): + # Return result + + It may also be an object with a ``method.getdata`` method + that returns a tuple supplying new ``method`` and ``data`` values:: + + class Example: + def getdata(self): + method = Image.EXTENT + data = (0, 0, 100, 100) + return method, data + :param data: Extra data to the transformation method. + :param resample: Optional resampling filter. It can be one of + :py:data:`PIL.Image.NEAREST` (use nearest neighbour), + :py:data:`PIL.Image.BILINEAR` (linear interpolation in a 2x2 + environment), or :py:data:`PIL.Image.BICUBIC` (cubic spline + interpolation in a 4x4 environment). If omitted, or if the image + has mode "1" or "P", it is set to :py:data:`PIL.Image.NEAREST`. + See: :ref:`concept-filters`. + :param fill: If ``method`` is an + :py:class:`~PIL.Image.ImageTransformHandler` object, this is one of + the arguments passed to it. Otherwise, it is unused. + :param fillcolor: Optional fill color for the area outside the + transform in the output image. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + if self.mode in ("LA", "RGBA") and resample != NEAREST: + return ( + self.convert({"LA": "La", "RGBA": "RGBa"}[self.mode]) + .transform(size, method, data, resample, fill, fillcolor) + .convert(self.mode) + ) + + if isinstance(method, ImageTransformHandler): + return method.transform(size, self, resample=resample, fill=fill) + + if hasattr(method, "getdata"): + # compatibility w. old-style transform objects + method, data = method.getdata() + + if data is None: + raise ValueError("missing method data") + + im = new(self.mode, size, fillcolor) + if self.mode == "P" and self.palette: + im.palette = self.palette.copy() + im.info = self.info.copy() + if method == MESH: + # list of quads + for box, quad in data: + im.__transformer(box, self, QUAD, quad, resample, fillcolor is None) + else: + im.__transformer( + (0, 0) + size, self, method, data, resample, fillcolor is None + ) + + return im + + def __transformer(self, box, image, method, data, resample=NEAREST, fill=1): + w = box[2] - box[0] + h = box[3] - box[1] + + if method == AFFINE: + data = data[0:6] + + elif method == EXTENT: + # convert extent to an affine transform + x0, y0, x1, y1 = data + xs = (x1 - x0) / w + ys = (y1 - y0) / h + method = AFFINE + data = (xs, 0, x0, 0, ys, y0) + + elif method == PERSPECTIVE: + data = data[0:8] + + elif method == QUAD: + # quadrilateral warp. data specifies the four corners + # given as NW, SW, SE, and NE. + nw = data[0:2] + sw = data[2:4] + se = data[4:6] + ne = data[6:8] + x0, y0 = nw + As = 1.0 / w + At = 1.0 / h + data = ( + x0, + (ne[0] - x0) * As, + (sw[0] - x0) * At, + (se[0] - sw[0] - ne[0] + x0) * As * At, + y0, + (ne[1] - y0) * As, + (sw[1] - y0) * At, + (se[1] - sw[1] - ne[1] + y0) * As * At, + ) + + else: + raise ValueError("unknown transformation method") + + if resample not in (NEAREST, BILINEAR, BICUBIC): + if resample in (BOX, HAMMING, LANCZOS): + message = { + BOX: "Image.BOX", + HAMMING: "Image.HAMMING", + LANCZOS: "Image.LANCZOS/Image.ANTIALIAS", + }[resample] + f" ({resample}) cannot be used." + else: + message = f"Unknown resampling filter ({resample})." + + filters = [ + "{} ({})".format(filter[1], filter[0]) + for filter in ( + (NEAREST, "Image.NEAREST"), + (BILINEAR, "Image.BILINEAR"), + (BICUBIC, "Image.BICUBIC"), + ) + ] + raise ValueError( + message + " Use " + ", ".join(filters[:-1]) + " or " + filters[-1] + ) + + image.load() + + self.load() + + if image.mode in ("1", "P"): + resample = NEAREST + + self.im.transform2(box, image.im, method, data, resample, fill) + + def transpose(self, method): + """ + Transpose image (flip or rotate in 90 degree steps) + + :param method: One of :py:data:`PIL.Image.FLIP_LEFT_RIGHT`, + :py:data:`PIL.Image.FLIP_TOP_BOTTOM`, :py:data:`PIL.Image.ROTATE_90`, + :py:data:`PIL.Image.ROTATE_180`, :py:data:`PIL.Image.ROTATE_270`, + :py:data:`PIL.Image.TRANSPOSE` or :py:data:`PIL.Image.TRANSVERSE`. + :returns: Returns a flipped or rotated copy of this image. + """ + + self.load() + return self._new(self.im.transpose(method)) + + def effect_spread(self, distance): + """ + Randomly spread pixels in an image. + + :param distance: Distance to spread pixels. + """ + self.load() + return self._new(self.im.effect_spread(distance)) + + def toqimage(self): + """Returns a QImage copy of this image""" + from . import ImageQt + + if not ImageQt.qt_is_installed: + raise ImportError("Qt bindings are not installed") + return ImageQt.toqimage(self) + + def toqpixmap(self): + """Returns a QPixmap copy of this image""" + from . import ImageQt + + if not ImageQt.qt_is_installed: + raise ImportError("Qt bindings are not installed") + return ImageQt.toqpixmap(self) + + +# -------------------------------------------------------------------- +# Abstract handlers. + + +class ImagePointHandler: + """ + Used as a mixin by point transforms + (for use with :py:meth:`~PIL.Image.Image.point`) + """ + + pass + + +class ImageTransformHandler: + """ + Used as a mixin by geometry transforms + (for use with :py:meth:`~PIL.Image.Image.transform`) + """ + + pass + + +# -------------------------------------------------------------------- +# Factories + +# +# Debugging + + +def _wedge(): + """Create greyscale wedge (for debugging only)""" + + return Image()._new(core.wedge("L")) + + +def _check_size(size): + """ + Common check to enforce type and sanity check on size tuples + + :param size: Should be a 2 tuple of (width, height) + :returns: True, or raises a ValueError + """ + + if not isinstance(size, (list, tuple)): + raise ValueError("Size must be a tuple") + if len(size) != 2: + raise ValueError("Size must be a tuple of length 2") + if size[0] < 0 or size[1] < 0: + raise ValueError("Width and height must be >= 0") + + return True + + +def new(mode, size, color=0): + """ + Creates a new image with the given mode and size. + + :param mode: The mode to use for the new image. See: + :ref:`concept-modes`. + :param size: A 2-tuple, containing (width, height) in pixels. + :param color: What color to use for the image. Default is black. + If given, this should be a single integer or floating point value + for single-band modes, and a tuple for multi-band modes (one value + per band). When creating RGB images, you can also use color + strings as supported by the ImageColor module. If the color is + None, the image is not initialised. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + _check_size(size) + + if color is None: + # don't initialize + return Image()._new(core.new(mode, size)) + + if isinstance(color, str): + # css3-style specifier + + from . import ImageColor + + color = ImageColor.getcolor(color, mode) + + im = Image() + if mode == "P" and isinstance(color, (list, tuple)) and len(color) in [3, 4]: + # RGB or RGBA value for a P image + from . import ImagePalette + + im.palette = ImagePalette.ImagePalette() + color = im.palette.getcolor(color) + return im._new(core.fill(mode, size, color)) + + +def frombytes(mode, size, data, decoder_name="raw", *args): + """ + Creates a copy of an image memory from pixel data in a buffer. + + In its simplest form, this function takes three arguments + (mode, size, and unpacked pixel data). + + You can also use any pixel decoder supported by PIL. For more + information on available decoders, see the section + :ref:`Writing Your Own File Decoder `. + + Note that this function decodes pixel data only, not entire images. + If you have an entire image in a string, wrap it in a + :py:class:`~io.BytesIO` object, and use :py:func:`~PIL.Image.open` to load + it. + + :param mode: The image mode. See: :ref:`concept-modes`. + :param size: The image size. + :param data: A byte buffer containing raw data for the given mode. + :param decoder_name: What decoder to use. + :param args: Additional parameters for the given decoder. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + _check_size(size) + + # may pass tuple instead of argument list + if len(args) == 1 and isinstance(args[0], tuple): + args = args[0] + + if decoder_name == "raw" and args == (): + args = mode + + im = new(mode, size) + im.frombytes(data, decoder_name, args) + return im + + +def frombuffer(mode, size, data, decoder_name="raw", *args): + """ + Creates an image memory referencing pixel data in a byte buffer. + + This function is similar to :py:func:`~PIL.Image.frombytes`, but uses data + in the byte buffer, where possible. This means that changes to the + original buffer object are reflected in this image). Not all modes can + share memory; supported modes include "L", "RGBX", "RGBA", and "CMYK". + + Note that this function decodes pixel data only, not entire images. + If you have an entire image file in a string, wrap it in a + :py:class:`~io.BytesIO` object, and use :py:func:`~PIL.Image.open` to load it. + + In the current version, the default parameters used for the "raw" decoder + differs from that used for :py:func:`~PIL.Image.frombytes`. This is a + bug, and will probably be fixed in a future release. The current release + issues a warning if you do this; to disable the warning, you should provide + the full set of parameters. See below for details. + + :param mode: The image mode. See: :ref:`concept-modes`. + :param size: The image size. + :param data: A bytes or other buffer object containing raw + data for the given mode. + :param decoder_name: What decoder to use. + :param args: Additional parameters for the given decoder. For the + default encoder ("raw"), it's recommended that you provide the + full set of parameters:: + + frombuffer(mode, size, data, "raw", mode, 0, 1) + + :returns: An :py:class:`~PIL.Image.Image` object. + + .. versionadded:: 1.1.4 + """ + + _check_size(size) + + # may pass tuple instead of argument list + if len(args) == 1 and isinstance(args[0], tuple): + args = args[0] + + if decoder_name == "raw": + if args == (): + args = mode, 0, 1 + if args[0] in _MAPMODES: + im = new(mode, (1, 1)) + im = im._new(core.map_buffer(data, size, decoder_name, 0, args)) + im.readonly = 1 + return im + + return frombytes(mode, size, data, decoder_name, args) + + +def fromarray(obj, mode=None): + """ + Creates an image memory from an object exporting the array interface + (using the buffer protocol). + + If ``obj`` is not contiguous, then the ``tobytes`` method is called + and :py:func:`~PIL.Image.frombuffer` is used. + + If you have an image in NumPy:: + + from PIL import Image + import numpy as np + im = Image.open('hopper.jpg') + a = np.asarray(im) + + Then this can be used to convert it to a Pillow image:: + + im = Image.fromarray(a) + + :param obj: Object with array interface + :param mode: Mode to use (will be determined from type if None) + See: :ref:`concept-modes`. + :returns: An image object. + + .. versionadded:: 1.1.6 + """ + arr = obj.__array_interface__ + shape = arr["shape"] + ndim = len(shape) + strides = arr.get("strides", None) + if mode is None: + try: + typekey = (1, 1) + shape[2:], arr["typestr"] + except KeyError as e: + raise TypeError("Cannot handle this data type") from e + try: + mode, rawmode = _fromarray_typemap[typekey] + except KeyError as e: + raise TypeError("Cannot handle this data type: %s, %s" % typekey) from e + else: + rawmode = mode + if mode in ["1", "L", "I", "P", "F"]: + ndmax = 2 + elif mode == "RGB": + ndmax = 3 + else: + ndmax = 4 + if ndim > ndmax: + raise ValueError(f"Too many dimensions: {ndim} > {ndmax}.") + + size = 1 if ndim == 1 else shape[1], shape[0] + if strides is not None: + if hasattr(obj, "tobytes"): + obj = obj.tobytes() + else: + obj = obj.tostring() + + return frombuffer(mode, size, obj, "raw", rawmode, 0, 1) + + +def fromqimage(im): + """Creates an image instance from a QImage image""" + from . import ImageQt + + if not ImageQt.qt_is_installed: + raise ImportError("Qt bindings are not installed") + return ImageQt.fromqimage(im) + + +def fromqpixmap(im): + """Creates an image instance from a QPixmap image""" + from . import ImageQt + + if not ImageQt.qt_is_installed: + raise ImportError("Qt bindings are not installed") + return ImageQt.fromqpixmap(im) + + +_fromarray_typemap = { + # (shape, typestr) => mode, rawmode + # first two members of shape are set to one + ((1, 1), "|b1"): ("1", "1;8"), + ((1, 1), "|u1"): ("L", "L"), + ((1, 1), "|i1"): ("I", "I;8"), + ((1, 1), "u2"): ("I", "I;16B"), + ((1, 1), "i2"): ("I", "I;16BS"), + ((1, 1), "u4"): ("I", "I;32B"), + ((1, 1), "i4"): ("I", "I;32BS"), + ((1, 1), "f4"): ("F", "F;32BF"), + ((1, 1), "f8"): ("F", "F;64BF"), + ((1, 1, 2), "|u1"): ("LA", "LA"), + ((1, 1, 3), "|u1"): ("RGB", "RGB"), + ((1, 1, 4), "|u1"): ("RGBA", "RGBA"), +} + +# shortcuts +_fromarray_typemap[((1, 1), _ENDIAN + "i4")] = ("I", "I") +_fromarray_typemap[((1, 1), _ENDIAN + "f4")] = ("F", "F") + + +def _decompression_bomb_check(size): + if MAX_IMAGE_PIXELS is None: + return + + pixels = size[0] * size[1] + + if pixels > 2 * MAX_IMAGE_PIXELS: + raise DecompressionBombError( + f"Image size ({pixels} pixels) exceeds limit of {2 * MAX_IMAGE_PIXELS} " + "pixels, could be decompression bomb DOS attack." + ) + + if pixels > MAX_IMAGE_PIXELS: + warnings.warn( + f"Image size ({pixels} pixels) exceeds limit of {MAX_IMAGE_PIXELS} pixels, " + "could be decompression bomb DOS attack.", + DecompressionBombWarning, + ) + + +def open(fp, mode="r", formats=None): + """ + Opens and identifies the given image file. + + This is a lazy operation; this function identifies the file, but + the file remains open and the actual image data is not read from + the file until you try to process the data (or call the + :py:meth:`~PIL.Image.Image.load` method). See + :py:func:`~PIL.Image.new`. See :ref:`file-handling`. + + :param fp: A filename (string), pathlib.Path object or a file object. + The file object must implement ``file.read``, + ``file.seek``, and ``file.tell`` methods, + and be opened in binary mode. + :param mode: The mode. If given, this argument must be "r". + :param formats: A list or tuple of formats to attempt to load the file in. + This can be used to restrict the set of formats checked. + Pass ``None`` to try all supported formats. You can print the set of + available formats by running ``python3 -m PIL`` or using + the :py:func:`PIL.features.pilinfo` function. + :returns: An :py:class:`~PIL.Image.Image` object. + :exception FileNotFoundError: If the file cannot be found. + :exception PIL.UnidentifiedImageError: If the image cannot be opened and + identified. + :exception ValueError: If the ``mode`` is not "r", or if a ``StringIO`` + instance is used for ``fp``. + :exception TypeError: If ``formats`` is not ``None``, a list or a tuple. + """ + + if mode != "r": + raise ValueError(f"bad mode {repr(mode)}") + elif isinstance(fp, io.StringIO): + raise ValueError( + "StringIO cannot be used to open an image. " + "Binary data must be used instead." + ) + + if formats is None: + formats = ID + elif not isinstance(formats, (list, tuple)): + raise TypeError("formats must be a list or tuple") + + exclusive_fp = False + filename = "" + if isinstance(fp, Path): + filename = str(fp.resolve()) + elif isPath(fp): + filename = fp + + if filename: + fp = builtins.open(filename, "rb") + exclusive_fp = True + + try: + fp.seek(0) + except (AttributeError, io.UnsupportedOperation): + fp = io.BytesIO(fp.read()) + exclusive_fp = True + + prefix = fp.read(16) + + preinit() + + accept_warnings = [] + + def _open_core(fp, filename, prefix, formats): + for i in formats: + i = i.upper() + if i not in OPEN: + init() + try: + factory, accept = OPEN[i] + result = not accept or accept(prefix) + if type(result) in [str, bytes]: + accept_warnings.append(result) + elif result: + fp.seek(0) + im = factory(fp, filename) + _decompression_bomb_check(im.size) + return im + except (SyntaxError, IndexError, TypeError, struct.error): + # Leave disabled by default, spams the logs with image + # opening failures that are entirely expected. + # logger.debug("", exc_info=True) + continue + except BaseException: + if exclusive_fp: + fp.close() + raise + return None + + im = _open_core(fp, filename, prefix, formats) + + if im is None: + if init(): + im = _open_core(fp, filename, prefix, formats) + + if im: + im._exclusive_fp = exclusive_fp + return im + + if exclusive_fp: + fp.close() + for message in accept_warnings: + warnings.warn(message) + raise UnidentifiedImageError( + "cannot identify image file %r" % (filename if filename else fp) + ) + + +# +# Image processing. + + +def alpha_composite(im1, im2): + """ + Alpha composite im2 over im1. + + :param im1: The first image. Must have mode RGBA. + :param im2: The second image. Must have mode RGBA, and the same size as + the first image. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + im1.load() + im2.load() + return im1._new(core.alpha_composite(im1.im, im2.im)) + + +def blend(im1, im2, alpha): + """ + Creates a new image by interpolating between two input images, using + a constant alpha.:: + + out = image1 * (1.0 - alpha) + image2 * alpha + + :param im1: The first image. + :param im2: The second image. Must have the same mode and size as + the first image. + :param alpha: The interpolation alpha factor. If alpha is 0.0, a + copy of the first image is returned. If alpha is 1.0, a copy of + the second image is returned. There are no restrictions on the + alpha value. If necessary, the result is clipped to fit into + the allowed output range. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + im1.load() + im2.load() + return im1._new(core.blend(im1.im, im2.im, alpha)) + + +def composite(image1, image2, mask): + """ + Create composite image by blending images using a transparency mask. + + :param image1: The first image. + :param image2: The second image. Must have the same mode and + size as the first image. + :param mask: A mask image. This image can have mode + "1", "L", or "RGBA", and must have the same size as the + other two images. + """ + + image = image2.copy() + image.paste(image1, None, mask) + return image + + +def eval(image, *args): + """ + Applies the function (which should take one argument) to each pixel + in the given image. If the image has more than one band, the same + function is applied to each band. Note that the function is + evaluated once for each possible pixel value, so you cannot use + random components or other generators. + + :param image: The input image. + :param function: A function object, taking one integer argument. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + return image.point(args[0]) + + +def merge(mode, bands): + """ + Merge a set of single band images into a new multiband image. + + :param mode: The mode to use for the output image. See: + :ref:`concept-modes`. + :param bands: A sequence containing one single-band image for + each band in the output image. All bands must have the + same size. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + if getmodebands(mode) != len(bands) or "*" in mode: + raise ValueError("wrong number of bands") + for band in bands[1:]: + if band.mode != getmodetype(mode): + raise ValueError("mode mismatch") + if band.size != bands[0].size: + raise ValueError("size mismatch") + for band in bands: + band.load() + return bands[0]._new(core.merge(mode, *[b.im for b in bands])) + + +# -------------------------------------------------------------------- +# Plugin registry + + +def register_open(id, factory, accept=None): + """ + Register an image file plugin. This function should not be used + in application code. + + :param id: An image format identifier. + :param factory: An image file factory method. + :param accept: An optional function that can be used to quickly + reject images having another format. + """ + id = id.upper() + ID.append(id) + OPEN[id] = factory, accept + + +def register_mime(id, mimetype): + """ + Registers an image MIME type. This function should not be used + in application code. + + :param id: An image format identifier. + :param mimetype: The image MIME type for this format. + """ + MIME[id.upper()] = mimetype + + +def register_save(id, driver): + """ + Registers an image save function. This function should not be + used in application code. + + :param id: An image format identifier. + :param driver: A function to save images in this format. + """ + SAVE[id.upper()] = driver + + +def register_save_all(id, driver): + """ + Registers an image function to save all the frames + of a multiframe format. This function should not be + used in application code. + + :param id: An image format identifier. + :param driver: A function to save images in this format. + """ + SAVE_ALL[id.upper()] = driver + + +def register_extension(id, extension): + """ + Registers an image extension. This function should not be + used in application code. + + :param id: An image format identifier. + :param extension: An extension used for this format. + """ + EXTENSION[extension.lower()] = id.upper() + + +def register_extensions(id, extensions): + """ + Registers image extensions. This function should not be + used in application code. + + :param id: An image format identifier. + :param extensions: A list of extensions used for this format. + """ + for extension in extensions: + register_extension(id, extension) + + +def registered_extensions(): + """ + Returns a dictionary containing all file extensions belonging + to registered plugins + """ + if not EXTENSION: + init() + return EXTENSION + + +def register_decoder(name, decoder): + """ + Registers an image decoder. This function should not be + used in application code. + + :param name: The name of the decoder + :param decoder: A callable(mode, args) that returns an + ImageFile.PyDecoder object + + .. versionadded:: 4.1.0 + """ + DECODERS[name] = decoder + + +def register_encoder(name, encoder): + """ + Registers an image encoder. This function should not be + used in application code. + + :param name: The name of the encoder + :param encoder: A callable(mode, args) that returns an + ImageFile.PyEncoder object + + .. versionadded:: 4.1.0 + """ + ENCODERS[name] = encoder + + +# -------------------------------------------------------------------- +# Simple display support. + + +def _show(image, **options): + options["_internal_pillow"] = True + _showxv(image, **options) + + +def _showxv(image, title=None, **options): + from . import ImageShow + + if "_internal_pillow" in options: + del options["_internal_pillow"] + else: + warnings.warn( + "_showxv is deprecated and will be removed in Pillow 9 (2022-01-02). " + "Use Image.show instead.", + DeprecationWarning, + ) + ImageShow.show(image, title, **options) + + +# -------------------------------------------------------------------- +# Effects + + +def effect_mandelbrot(size, extent, quality): + """ + Generate a Mandelbrot set covering the given extent. + + :param size: The requested size in pixels, as a 2-tuple: + (width, height). + :param extent: The extent to cover, as a 4-tuple: + (x0, y0, x1, y2). + :param quality: Quality. + """ + return Image()._new(core.effect_mandelbrot(size, extent, quality)) + + +def effect_noise(size, sigma): + """ + Generate Gaussian noise centered around 128. + + :param size: The requested size in pixels, as a 2-tuple: + (width, height). + :param sigma: Standard deviation of noise. + """ + return Image()._new(core.effect_noise(size, sigma)) + + +def linear_gradient(mode): + """ + Generate 256x256 linear gradient from black to white, top to bottom. + + :param mode: Input mode. + """ + return Image()._new(core.linear_gradient(mode)) + + +def radial_gradient(mode): + """ + Generate 256x256 radial gradient from black to white, centre to edge. + + :param mode: Input mode. + """ + return Image()._new(core.radial_gradient(mode)) + + +# -------------------------------------------------------------------- +# Resources + + +def _apply_env_variables(env=None): + if env is None: + env = os.environ + + for var_name, setter in [ + ("PILLOW_ALIGNMENT", core.set_alignment), + ("PILLOW_BLOCK_SIZE", core.set_block_size), + ("PILLOW_BLOCKS_MAX", core.set_blocks_max), + ]: + if var_name not in env: + continue + + var = env[var_name].lower() + + units = 1 + for postfix, mul in [("k", 1024), ("m", 1024 * 1024)]: + if var.endswith(postfix): + units = mul + var = var[: -len(postfix)] + + try: + var = int(var) * units + except ValueError: + warnings.warn(f"{var_name} is not int") + continue + + try: + setter(var) + except ValueError as e: + warnings.warn(f"{var_name}: {e}") + + +_apply_env_variables() +atexit.register(core.clear_cache) + + +class Exif(MutableMapping): + endian = None + + def __init__(self): + self._data = {} + self._ifds = {} + self._info = None + self._loaded_exif = None + + def _fixup(self, value): + try: + if len(value) == 1 and isinstance(value, tuple): + return value[0] + except Exception: + pass + return value + + def _fixup_dict(self, src_dict): + # Helper function + # returns a dict with any single item tuples/lists as individual values + return {k: self._fixup(v) for k, v in src_dict.items()} + + def _get_ifd_dict(self, offset): + try: + # an offset pointer to the location of the nested embedded IFD. + # It should be a long, but may be corrupted. + self.fp.seek(offset) + except (KeyError, TypeError): + pass + else: + from . import TiffImagePlugin + + info = TiffImagePlugin.ImageFileDirectory_v2(self.head) + info.load(self.fp) + return self._fixup_dict(info) + + def _get_head(self): + if self.endian == "<": + return b"II\x2A\x00\x08\x00\x00\x00" + else: + return b"MM\x00\x2A\x00\x00\x00\x08" + + def load(self, data): + # Extract EXIF information. This is highly experimental, + # and is likely to be replaced with something better in a future + # version. + + # The EXIF record consists of a TIFF file embedded in a JPEG + # application marker (!). + if data == self._loaded_exif: + return + self._loaded_exif = data + self._data.clear() + self._ifds.clear() + if not data: + self._info = None + return + + if data.startswith(b"Exif\x00\x00"): + data = data[6:] + self.fp = io.BytesIO(data) + self.head = self.fp.read(8) + # process dictionary + from . import TiffImagePlugin + + self._info = TiffImagePlugin.ImageFileDirectory_v2(self.head) + self.endian = self._info._endian + self.fp.seek(self._info.next) + self._info.load(self.fp) + + def load_from_fp(self, fp, offset=None): + self._loaded_exif = None + self._data.clear() + self._ifds.clear() + + # process dictionary + from . import TiffImagePlugin + + self.fp = fp + if offset is not None: + self.head = self._get_head() + else: + self.head = self.fp.read(8) + self._info = TiffImagePlugin.ImageFileDirectory_v2(self.head) + if self.endian is None: + self.endian = self._info._endian + if offset is None: + offset = self._info.next + self.fp.seek(offset) + self._info.load(self.fp) + + def _get_merged_dict(self): + merged_dict = dict(self) + + # get EXIF extension + if 0x8769 in self: + ifd = self._get_ifd_dict(self[0x8769]) + if ifd: + merged_dict.update(ifd) + + # GPS + if 0x8825 in self: + merged_dict[0x8825] = self._get_ifd_dict(self[0x8825]) + + return merged_dict + + def tobytes(self, offset=8): + from . import TiffImagePlugin + + head = self._get_head() + ifd = TiffImagePlugin.ImageFileDirectory_v2(ifh=head) + for tag, value in self.items(): + if tag in [0x8769, 0x8225, 0x8825] and not isinstance(value, dict): + value = self.get_ifd(tag) + if ( + tag == 0x8769 + and 0xA005 in value + and not isinstance(value[0xA005], dict) + ): + value = value.copy() + value[0xA005] = self.get_ifd(0xA005) + ifd[tag] = value + return b"Exif\x00\x00" + head + ifd.tobytes(offset) + + def get_ifd(self, tag): + if tag not in self._ifds: + if tag in [0x8769, 0x8825]: + # exif, gpsinfo + if tag in self: + self._ifds[tag] = self._get_ifd_dict(self[tag]) + elif tag in [0xA005, 0x927C]: + # interop, makernote + if 0x8769 not in self._ifds: + self.get_ifd(0x8769) + tag_data = self._ifds[0x8769][tag] + if tag == 0x927C: + # makernote + from .TiffImagePlugin import ImageFileDirectory_v2 + + if tag_data[:8] == b"FUJIFILM": + ifd_offset = i32le(tag_data, 8) + ifd_data = tag_data[ifd_offset:] + + makernote = {} + for i in range(0, struct.unpack(" 4: + (offset,) = struct.unpack("H", tag_data[:2])[0]): + ifd_tag, typ, count, data = struct.unpack( + ">HHL4s", tag_data[i * 12 + 2 : (i + 1) * 12 + 2] + ) + if ifd_tag == 0x1101: + # CameraInfo + (offset,) = struct.unpack(">L", data) + self.fp.seek(offset) + + camerainfo = {"ModelID": self.fp.read(4)} + + self.fp.read(4) + # Seconds since 2000 + camerainfo["TimeStamp"] = i32le(self.fp.read(12)) + + self.fp.read(4) + camerainfo["InternalSerialNumber"] = self.fp.read(4) + + self.fp.read(12) + parallax = self.fp.read(4) + handler = ImageFileDirectory_v2._load_dispatch[ + TiffTags.FLOAT + ][1] + camerainfo["Parallax"] = handler( + ImageFileDirectory_v2(), parallax, False + ) + + self.fp.read(4) + camerainfo["Category"] = self.fp.read(2) + + makernote = {0x1101: dict(self._fixup_dict(camerainfo))} + self._ifds[tag] = makernote + else: + # interop + self._ifds[tag] = self._get_ifd_dict(tag_data) + return self._ifds.get(tag, {}) + + def __str__(self): + if self._info is not None: + # Load all keys into self._data + for tag in self._info.keys(): + self[tag] + + return str(self._data) + + def __len__(self): + keys = set(self._data) + if self._info is not None: + keys.update(self._info) + return len(keys) + + def __getitem__(self, tag): + if self._info is not None and tag not in self._data and tag in self._info: + self._data[tag] = self._fixup(self._info[tag]) + del self._info[tag] + return self._data[tag] + + def __contains__(self, tag): + return tag in self._data or (self._info is not None and tag in self._info) + + def __setitem__(self, tag, value): + if self._info is not None and tag in self._info: + del self._info[tag] + self._data[tag] = value + + def __delitem__(self, tag): + if self._info is not None and tag in self._info: + del self._info[tag] + else: + del self._data[tag] + + def __iter__(self): + keys = set(self._data) + if self._info is not None: + keys.update(self._info) + return iter(keys) diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageChops.py b/.venv/lib/python3.9/site-packages/PIL/ImageChops.py new file mode 100644 index 00000000..61d3a295 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageChops.py @@ -0,0 +1,328 @@ +# +# The Python Imaging Library. +# $Id$ +# +# standard channel operations +# +# History: +# 1996-03-24 fl Created +# 1996-08-13 fl Added logical operations (for "1" images) +# 2000-10-12 fl Added offset method (from Image.py) +# +# Copyright (c) 1997-2000 by Secret Labs AB +# Copyright (c) 1996-2000 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from . import Image + + +def constant(image, value): + """Fill a channel with a given grey level. + + :rtype: :py:class:`~PIL.Image.Image` + """ + + return Image.new("L", image.size, value) + + +def duplicate(image): + """Copy a channel. Alias for :py:meth:`PIL.Image.Image.copy`. + + :rtype: :py:class:`~PIL.Image.Image` + """ + + return image.copy() + + +def invert(image): + """ + Invert an image (channel). + + .. code-block:: python + + out = MAX - image + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image.load() + return image._new(image.im.chop_invert()) + + +def lighter(image1, image2): + """ + Compares the two images, pixel by pixel, and returns a new image containing + the lighter values. + + .. code-block:: python + + out = max(image1, image2) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_lighter(image2.im)) + + +def darker(image1, image2): + """ + Compares the two images, pixel by pixel, and returns a new image containing + the darker values. + + .. code-block:: python + + out = min(image1, image2) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_darker(image2.im)) + + +def difference(image1, image2): + """ + Returns the absolute value of the pixel-by-pixel difference between the two + images. + + .. code-block:: python + + out = abs(image1 - image2) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_difference(image2.im)) + + +def multiply(image1, image2): + """ + Superimposes two images on top of each other. + + If you multiply an image with a solid black image, the result is black. If + you multiply with a solid white image, the image is unaffected. + + .. code-block:: python + + out = image1 * image2 / MAX + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_multiply(image2.im)) + + +def screen(image1, image2): + """ + Superimposes two inverted images on top of each other. + + .. code-block:: python + + out = MAX - ((MAX - image1) * (MAX - image2) / MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_screen(image2.im)) + + +def soft_light(image1, image2): + """ + Superimposes two images on top of each other using the Soft Light algorithm + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_soft_light(image2.im)) + + +def hard_light(image1, image2): + """ + Superimposes two images on top of each other using the Hard Light algorithm + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_hard_light(image2.im)) + + +def overlay(image1, image2): + """ + Superimposes two images on top of each other using the Overlay algorithm + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_overlay(image2.im)) + + +def add(image1, image2, scale=1.0, offset=0): + """ + Adds two images, dividing the result by scale and adding the + offset. If omitted, scale defaults to 1.0, and offset to 0.0. + + .. code-block:: python + + out = ((image1 + image2) / scale + offset) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_add(image2.im, scale, offset)) + + +def subtract(image1, image2, scale=1.0, offset=0): + """ + Subtracts two images, dividing the result by scale and adding the offset. + If omitted, scale defaults to 1.0, and offset to 0.0. + + .. code-block:: python + + out = ((image1 - image2) / scale + offset) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_subtract(image2.im, scale, offset)) + + +def add_modulo(image1, image2): + """Add two images, without clipping the result. + + .. code-block:: python + + out = ((image1 + image2) % MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_add_modulo(image2.im)) + + +def subtract_modulo(image1, image2): + """Subtract two images, without clipping the result. + + .. code-block:: python + + out = ((image1 - image2) % MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_subtract_modulo(image2.im)) + + +def logical_and(image1, image2): + """Logical AND between two images. + + Both of the images must have mode "1". If you would like to perform a + logical AND on an image with a mode other than "1", try + :py:meth:`~PIL.ImageChops.multiply` instead, using a black-and-white mask + as the second image. + + .. code-block:: python + + out = ((image1 and image2) % MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_and(image2.im)) + + +def logical_or(image1, image2): + """Logical OR between two images. + + Both of the images must have mode "1". + + .. code-block:: python + + out = ((image1 or image2) % MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_or(image2.im)) + + +def logical_xor(image1, image2): + """Logical XOR between two images. + + Both of the images must have mode "1". + + .. code-block:: python + + out = ((bool(image1) != bool(image2)) % MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_xor(image2.im)) + + +def blend(image1, image2, alpha): + """Blend images using constant transparency weight. Alias for + :py:func:`PIL.Image.blend`. + + :rtype: :py:class:`~PIL.Image.Image` + """ + + return Image.blend(image1, image2, alpha) + + +def composite(image1, image2, mask): + """Create composite using transparency mask. Alias for + :py:func:`PIL.Image.composite`. + + :rtype: :py:class:`~PIL.Image.Image` + """ + + return Image.composite(image1, image2, mask) + + +def offset(image, xoffset, yoffset=None): + """Returns a copy of the image where data has been offset by the given + distances. Data wraps around the edges. If ``yoffset`` is omitted, it + is assumed to be equal to ``xoffset``. + + :param xoffset: The horizontal distance. + :param yoffset: The vertical distance. If omitted, both + distances are set to the same value. + :rtype: :py:class:`~PIL.Image.Image` + """ + + if yoffset is None: + yoffset = xoffset + image.load() + return image._new(image.im.offset(xoffset, yoffset)) diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageCms.py b/.venv/lib/python3.9/site-packages/PIL/ImageCms.py new file mode 100644 index 00000000..36990959 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageCms.py @@ -0,0 +1,999 @@ +# The Python Imaging Library. +# $Id$ + +# Optional color management support, based on Kevin Cazabon's PyCMS +# library. + +# History: + +# 2009-03-08 fl Added to PIL. + +# Copyright (C) 2002-2003 Kevin Cazabon +# Copyright (c) 2009 by Fredrik Lundh +# Copyright (c) 2013 by Eric Soroos + +# See the README file for information on usage and redistribution. See +# below for the original description. + +import sys + +from PIL import Image + +try: + from PIL import _imagingcms +except ImportError as ex: + # Allow error import for doc purposes, but error out when accessing + # anything in core. + from ._util import deferred_error + + _imagingcms = deferred_error(ex) + +DESCRIPTION = """ +pyCMS + + a Python / PIL interface to the littleCMS ICC Color Management System + Copyright (C) 2002-2003 Kevin Cazabon + kevin@cazabon.com + http://www.cazabon.com + + pyCMS home page: http://www.cazabon.com/pyCMS + littleCMS home page: https://www.littlecms.com + (littleCMS is Copyright (C) 1998-2001 Marti Maria) + + Originally released under LGPL. Graciously donated to PIL in + March 2009, for distribution under the standard PIL license + + The pyCMS.py module provides a "clean" interface between Python/PIL and + pyCMSdll, taking care of some of the more complex handling of the direct + pyCMSdll functions, as well as error-checking and making sure that all + relevant data is kept together. + + While it is possible to call pyCMSdll functions directly, it's not highly + recommended. + + Version History: + + 1.0.0 pil Oct 2013 Port to LCMS 2. + + 0.1.0 pil mod March 10, 2009 + + Renamed display profile to proof profile. The proof + profile is the profile of the device that is being + simulated, not the profile of the device which is + actually used to display/print the final simulation + (that'd be the output profile) - also see LCMSAPI.txt + input colorspace -> using 'renderingIntent' -> proof + colorspace -> using 'proofRenderingIntent' -> output + colorspace + + Added LCMS FLAGS support. + Added FLAGS["SOFTPROOFING"] as default flag for + buildProofTransform (otherwise the proof profile/intent + would be ignored). + + 0.1.0 pil March 2009 - added to PIL, as PIL.ImageCms + + 0.0.2 alpha Jan 6, 2002 + + Added try/except statements around type() checks of + potential CObjects... Python won't let you use type() + on them, and raises a TypeError (stupid, if you ask + me!) + + Added buildProofTransformFromOpenProfiles() function. + Additional fixes in DLL, see DLL code for details. + + 0.0.1 alpha first public release, Dec. 26, 2002 + + Known to-do list with current version (of Python interface, not pyCMSdll): + + none + +""" + +VERSION = "1.0.0 pil" + +# --------------------------------------------------------------------. + +core = _imagingcms + +# +# intent/direction values + +INTENT_PERCEPTUAL = 0 +INTENT_RELATIVE_COLORIMETRIC = 1 +INTENT_SATURATION = 2 +INTENT_ABSOLUTE_COLORIMETRIC = 3 + +DIRECTION_INPUT = 0 +DIRECTION_OUTPUT = 1 +DIRECTION_PROOF = 2 + +# +# flags + +FLAGS = { + "MATRIXINPUT": 1, + "MATRIXOUTPUT": 2, + "MATRIXONLY": (1 | 2), + "NOWHITEONWHITEFIXUP": 4, # Don't hot fix scum dot + # Don't create prelinearization tables on precalculated transforms + # (internal use): + "NOPRELINEARIZATION": 16, + "GUESSDEVICECLASS": 32, # Guess device class (for transform2devicelink) + "NOTCACHE": 64, # Inhibit 1-pixel cache + "NOTPRECALC": 256, + "NULLTRANSFORM": 512, # Don't transform anyway + "HIGHRESPRECALC": 1024, # Use more memory to give better accuracy + "LOWRESPRECALC": 2048, # Use less memory to minimize resources + "WHITEBLACKCOMPENSATION": 8192, + "BLACKPOINTCOMPENSATION": 8192, + "GAMUTCHECK": 4096, # Out of Gamut alarm + "SOFTPROOFING": 16384, # Do softproofing + "PRESERVEBLACK": 32768, # Black preservation + "NODEFAULTRESOURCEDEF": 16777216, # CRD special + "GRIDPOINTS": lambda n: ((n) & 0xFF) << 16, # Gridpoints +} + +_MAX_FLAG = 0 +for flag in FLAGS.values(): + if isinstance(flag, int): + _MAX_FLAG = _MAX_FLAG | flag + + +# --------------------------------------------------------------------. +# Experimental PIL-level API +# --------------------------------------------------------------------. + +## +# Profile. + + +class ImageCmsProfile: + def __init__(self, profile): + """ + :param profile: Either a string representing a filename, + a file like object containing a profile or a + low-level profile object + + """ + + if isinstance(profile, str): + if sys.platform == "win32": + profile_bytes_path = profile.encode() + try: + profile_bytes_path.decode("ascii") + except UnicodeDecodeError: + with open(profile, "rb") as f: + self._set(core.profile_frombytes(f.read())) + return + self._set(core.profile_open(profile), profile) + elif hasattr(profile, "read"): + self._set(core.profile_frombytes(profile.read())) + elif isinstance(profile, _imagingcms.CmsProfile): + self._set(profile) + else: + raise TypeError("Invalid type for Profile") + + def _set(self, profile, filename=None): + self.profile = profile + self.filename = filename + if profile: + self.product_name = None # profile.product_name + self.product_info = None # profile.product_info + else: + self.product_name = None + self.product_info = None + + def tobytes(self): + """ + Returns the profile in a format suitable for embedding in + saved images. + + :returns: a bytes object containing the ICC profile. + """ + + return core.profile_tobytes(self.profile) + + +class ImageCmsTransform(Image.ImagePointHandler): + + """ + Transform. This can be used with the procedural API, or with the standard + :py:func:`~PIL.Image.Image.point` method. + + Will return the output profile in the ``output.info['icc_profile']``. + """ + + def __init__( + self, + input, + output, + input_mode, + output_mode, + intent=INTENT_PERCEPTUAL, + proof=None, + proof_intent=INTENT_ABSOLUTE_COLORIMETRIC, + flags=0, + ): + if proof is None: + self.transform = core.buildTransform( + input.profile, output.profile, input_mode, output_mode, intent, flags + ) + else: + self.transform = core.buildProofTransform( + input.profile, + output.profile, + proof.profile, + input_mode, + output_mode, + intent, + proof_intent, + flags, + ) + # Note: inputMode and outputMode are for pyCMS compatibility only + self.input_mode = self.inputMode = input_mode + self.output_mode = self.outputMode = output_mode + + self.output_profile = output + + def point(self, im): + return self.apply(im) + + def apply(self, im, imOut=None): + im.load() + if imOut is None: + imOut = Image.new(self.output_mode, im.size, None) + self.transform.apply(im.im.id, imOut.im.id) + imOut.info["icc_profile"] = self.output_profile.tobytes() + return imOut + + def apply_in_place(self, im): + im.load() + if im.mode != self.output_mode: + raise ValueError("mode mismatch") # wrong output mode + self.transform.apply(im.im.id, im.im.id) + im.info["icc_profile"] = self.output_profile.tobytes() + return im + + +def get_display_profile(handle=None): + """ + (experimental) Fetches the profile for the current display device. + + :returns: ``None`` if the profile is not known. + """ + + if sys.platform != "win32": + return None + + from PIL import ImageWin + + if isinstance(handle, ImageWin.HDC): + profile = core.get_display_profile_win32(handle, 1) + else: + profile = core.get_display_profile_win32(handle or 0) + if profile is None: + return None + return ImageCmsProfile(profile) + + +# --------------------------------------------------------------------. +# pyCMS compatible layer +# --------------------------------------------------------------------. + + +class PyCMSError(Exception): + + """(pyCMS) Exception class. + This is used for all errors in the pyCMS API.""" + + pass + + +def profileToProfile( + im, + inputProfile, + outputProfile, + renderingIntent=INTENT_PERCEPTUAL, + outputMode=None, + inPlace=False, + flags=0, +): + """ + (pyCMS) Applies an ICC transformation to a given image, mapping from + ``inputProfile`` to ``outputProfile``. + + If the input or output profiles specified are not valid filenames, a + :exc:`PyCMSError` will be raised. If ``inPlace`` is ``True`` and + ``outputMode != im.mode``, a :exc:`PyCMSError` will be raised. + If an error occurs during application of the profiles, + a :exc:`PyCMSError` will be raised. + If ``outputMode`` is not a mode supported by the ``outputProfile`` (or by pyCMS), + a :exc:`PyCMSError` will be raised. + + This function applies an ICC transformation to im from ``inputProfile``'s + color space to ``outputProfile``'s color space using the specified rendering + intent to decide how to handle out-of-gamut colors. + + ``outputMode`` can be used to specify that a color mode conversion is to + be done using these profiles, but the specified profiles must be able + to handle that mode. I.e., if converting im from RGB to CMYK using + profiles, the input profile must handle RGB data, and the output + profile must handle CMYK data. + + :param im: An open :py:class:`~PIL.Image.Image` object (i.e. Image.new(...) + or Image.open(...), etc.) + :param inputProfile: String, as a valid filename path to the ICC input + profile you wish to use for this image, or a profile object + :param outputProfile: String, as a valid filename path to the ICC output + profile you wish to use for this image, or a profile object + :param renderingIntent: Integer (0-3) specifying the rendering intent you + wish to use for the transform + + ImageCms.INTENT_PERCEPTUAL = 0 (DEFAULT) + ImageCms.INTENT_RELATIVE_COLORIMETRIC = 1 + ImageCms.INTENT_SATURATION = 2 + ImageCms.INTENT_ABSOLUTE_COLORIMETRIC = 3 + + see the pyCMS documentation for details on rendering intents and what + they do. + :param outputMode: A valid PIL mode for the output image (i.e. "RGB", + "CMYK", etc.). Note: if rendering the image "inPlace", outputMode + MUST be the same mode as the input, or omitted completely. If + omitted, the outputMode will be the same as the mode of the input + image (im.mode) + :param inPlace: Boolean. If ``True``, the original image is modified in-place, + and ``None`` is returned. If ``False`` (default), a new + :py:class:`~PIL.Image.Image` object is returned with the transform applied. + :param flags: Integer (0-...) specifying additional flags + :returns: Either None or a new :py:class:`~PIL.Image.Image` object, depending on + the value of ``inPlace`` + :exception PyCMSError: + """ + + if outputMode is None: + outputMode = im.mode + + if not isinstance(renderingIntent, int) or not (0 <= renderingIntent <= 3): + raise PyCMSError("renderingIntent must be an integer between 0 and 3") + + if not isinstance(flags, int) or not (0 <= flags <= _MAX_FLAG): + raise PyCMSError("flags must be an integer between 0 and %s" + _MAX_FLAG) + + try: + if not isinstance(inputProfile, ImageCmsProfile): + inputProfile = ImageCmsProfile(inputProfile) + if not isinstance(outputProfile, ImageCmsProfile): + outputProfile = ImageCmsProfile(outputProfile) + transform = ImageCmsTransform( + inputProfile, + outputProfile, + im.mode, + outputMode, + renderingIntent, + flags=flags, + ) + if inPlace: + transform.apply_in_place(im) + imOut = None + else: + imOut = transform.apply(im) + except (OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + return imOut + + +def getOpenProfile(profileFilename): + """ + (pyCMS) Opens an ICC profile file. + + The PyCMSProfile object can be passed back into pyCMS for use in creating + transforms and such (as in ImageCms.buildTransformFromOpenProfiles()). + + If ``profileFilename`` is not a valid filename for an ICC profile, + a :exc:`PyCMSError` will be raised. + + :param profileFilename: String, as a valid filename path to the ICC profile + you wish to open, or a file-like object. + :returns: A CmsProfile class object. + :exception PyCMSError: + """ + + try: + return ImageCmsProfile(profileFilename) + except (OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def buildTransform( + inputProfile, + outputProfile, + inMode, + outMode, + renderingIntent=INTENT_PERCEPTUAL, + flags=0, +): + """ + (pyCMS) Builds an ICC transform mapping from the ``inputProfile`` to the + ``outputProfile``. Use applyTransform to apply the transform to a given + image. + + If the input or output profiles specified are not valid filenames, a + :exc:`PyCMSError` will be raised. If an error occurs during creation + of the transform, a :exc:`PyCMSError` will be raised. + + If ``inMode`` or ``outMode`` are not a mode supported by the ``outputProfile`` + (or by pyCMS), a :exc:`PyCMSError` will be raised. + + This function builds and returns an ICC transform from the ``inputProfile`` + to the ``outputProfile`` using the ``renderingIntent`` to determine what to do + with out-of-gamut colors. It will ONLY work for converting images that + are in ``inMode`` to images that are in ``outMode`` color format (PIL mode, + i.e. "RGB", "RGBA", "CMYK", etc.). + + Building the transform is a fair part of the overhead in + ImageCms.profileToProfile(), so if you're planning on converting multiple + images using the same input/output settings, this can save you time. + Once you have a transform object, it can be used with + ImageCms.applyProfile() to convert images without the need to re-compute + the lookup table for the transform. + + The reason pyCMS returns a class object rather than a handle directly + to the transform is that it needs to keep track of the PIL input/output + modes that the transform is meant for. These attributes are stored in + the ``inMode`` and ``outMode`` attributes of the object (which can be + manually overridden if you really want to, but I don't know of any + time that would be of use, or would even work). + + :param inputProfile: String, as a valid filename path to the ICC input + profile you wish to use for this transform, or a profile object + :param outputProfile: String, as a valid filename path to the ICC output + profile you wish to use for this transform, or a profile object + :param inMode: String, as a valid PIL mode that the appropriate profile + also supports (i.e. "RGB", "RGBA", "CMYK", etc.) + :param outMode: String, as a valid PIL mode that the appropriate profile + also supports (i.e. "RGB", "RGBA", "CMYK", etc.) + :param renderingIntent: Integer (0-3) specifying the rendering intent you + wish to use for the transform + + ImageCms.INTENT_PERCEPTUAL = 0 (DEFAULT) + ImageCms.INTENT_RELATIVE_COLORIMETRIC = 1 + ImageCms.INTENT_SATURATION = 2 + ImageCms.INTENT_ABSOLUTE_COLORIMETRIC = 3 + + see the pyCMS documentation for details on rendering intents and what + they do. + :param flags: Integer (0-...) specifying additional flags + :returns: A CmsTransform class object. + :exception PyCMSError: + """ + + if not isinstance(renderingIntent, int) or not (0 <= renderingIntent <= 3): + raise PyCMSError("renderingIntent must be an integer between 0 and 3") + + if not isinstance(flags, int) or not (0 <= flags <= _MAX_FLAG): + raise PyCMSError("flags must be an integer between 0 and %s" + _MAX_FLAG) + + try: + if not isinstance(inputProfile, ImageCmsProfile): + inputProfile = ImageCmsProfile(inputProfile) + if not isinstance(outputProfile, ImageCmsProfile): + outputProfile = ImageCmsProfile(outputProfile) + return ImageCmsTransform( + inputProfile, outputProfile, inMode, outMode, renderingIntent, flags=flags + ) + except (OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def buildProofTransform( + inputProfile, + outputProfile, + proofProfile, + inMode, + outMode, + renderingIntent=INTENT_PERCEPTUAL, + proofRenderingIntent=INTENT_ABSOLUTE_COLORIMETRIC, + flags=FLAGS["SOFTPROOFING"], +): + """ + (pyCMS) Builds an ICC transform mapping from the ``inputProfile`` to the + ``outputProfile``, but tries to simulate the result that would be + obtained on the ``proofProfile`` device. + + If the input, output, or proof profiles specified are not valid + filenames, a :exc:`PyCMSError` will be raised. + + If an error occurs during creation of the transform, + a :exc:`PyCMSError` will be raised. + + If ``inMode`` or ``outMode`` are not a mode supported by the ``outputProfile`` + (or by pyCMS), a :exc:`PyCMSError` will be raised. + + This function builds and returns an ICC transform from the ``inputProfile`` + to the ``outputProfile``, but tries to simulate the result that would be + obtained on the ``proofProfile`` device using ``renderingIntent`` and + ``proofRenderingIntent`` to determine what to do with out-of-gamut + colors. This is known as "soft-proofing". It will ONLY work for + converting images that are in ``inMode`` to images that are in outMode + color format (PIL mode, i.e. "RGB", "RGBA", "CMYK", etc.). + + Usage of the resulting transform object is exactly the same as with + ImageCms.buildTransform(). + + Proof profiling is generally used when using an output device to get a + good idea of what the final printed/displayed image would look like on + the ``proofProfile`` device when it's quicker and easier to use the + output device for judging color. Generally, this means that the + output device is a monitor, or a dye-sub printer (etc.), and the simulated + device is something more expensive, complicated, or time consuming + (making it difficult to make a real print for color judgement purposes). + + Soft-proofing basically functions by adjusting the colors on the + output device to match the colors of the device being simulated. However, + when the simulated device has a much wider gamut than the output + device, you may obtain marginal results. + + :param inputProfile: String, as a valid filename path to the ICC input + profile you wish to use for this transform, or a profile object + :param outputProfile: String, as a valid filename path to the ICC output + (monitor, usually) profile you wish to use for this transform, or a + profile object + :param proofProfile: String, as a valid filename path to the ICC proof + profile you wish to use for this transform, or a profile object + :param inMode: String, as a valid PIL mode that the appropriate profile + also supports (i.e. "RGB", "RGBA", "CMYK", etc.) + :param outMode: String, as a valid PIL mode that the appropriate profile + also supports (i.e. "RGB", "RGBA", "CMYK", etc.) + :param renderingIntent: Integer (0-3) specifying the rendering intent you + wish to use for the input->proof (simulated) transform + + ImageCms.INTENT_PERCEPTUAL = 0 (DEFAULT) + ImageCms.INTENT_RELATIVE_COLORIMETRIC = 1 + ImageCms.INTENT_SATURATION = 2 + ImageCms.INTENT_ABSOLUTE_COLORIMETRIC = 3 + + see the pyCMS documentation for details on rendering intents and what + they do. + :param proofRenderingIntent: Integer (0-3) specifying the rendering intent + you wish to use for proof->output transform + + ImageCms.INTENT_PERCEPTUAL = 0 (DEFAULT) + ImageCms.INTENT_RELATIVE_COLORIMETRIC = 1 + ImageCms.INTENT_SATURATION = 2 + ImageCms.INTENT_ABSOLUTE_COLORIMETRIC = 3 + + see the pyCMS documentation for details on rendering intents and what + they do. + :param flags: Integer (0-...) specifying additional flags + :returns: A CmsTransform class object. + :exception PyCMSError: + """ + + if not isinstance(renderingIntent, int) or not (0 <= renderingIntent <= 3): + raise PyCMSError("renderingIntent must be an integer between 0 and 3") + + if not isinstance(flags, int) or not (0 <= flags <= _MAX_FLAG): + raise PyCMSError("flags must be an integer between 0 and %s" + _MAX_FLAG) + + try: + if not isinstance(inputProfile, ImageCmsProfile): + inputProfile = ImageCmsProfile(inputProfile) + if not isinstance(outputProfile, ImageCmsProfile): + outputProfile = ImageCmsProfile(outputProfile) + if not isinstance(proofProfile, ImageCmsProfile): + proofProfile = ImageCmsProfile(proofProfile) + return ImageCmsTransform( + inputProfile, + outputProfile, + inMode, + outMode, + renderingIntent, + proofProfile, + proofRenderingIntent, + flags, + ) + except (OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +buildTransformFromOpenProfiles = buildTransform +buildProofTransformFromOpenProfiles = buildProofTransform + + +def applyTransform(im, transform, inPlace=False): + """ + (pyCMS) Applies a transform to a given image. + + If ``im.mode != transform.inMode``, a :exc:`PyCMSError` is raised. + + If ``inPlace`` is ``True`` and ``transform.inMode != transform.outMode``, a + :exc:`PyCMSError` is raised. + + If ``im.mode``, ``transform.inMode`` or ``transform.outMode`` is not + supported by pyCMSdll or the profiles you used for the transform, a + :exc:`PyCMSError` is raised. + + If an error occurs while the transform is being applied, + a :exc:`PyCMSError` is raised. + + This function applies a pre-calculated transform (from + ImageCms.buildTransform() or ImageCms.buildTransformFromOpenProfiles()) + to an image. The transform can be used for multiple images, saving + considerable calculation time if doing the same conversion multiple times. + + If you want to modify im in-place instead of receiving a new image as + the return value, set ``inPlace`` to ``True``. This can only be done if + ``transform.inMode`` and ``transform.outMode`` are the same, because we can't + change the mode in-place (the buffer sizes for some modes are + different). The default behavior is to return a new :py:class:`~PIL.Image.Image` + object of the same dimensions in mode ``transform.outMode``. + + :param im: An :py:class:`~PIL.Image.Image` object, and im.mode must be the same + as the ``inMode`` supported by the transform. + :param transform: A valid CmsTransform class object + :param inPlace: Bool. If ``True``, ``im`` is modified in place and ``None`` is + returned, if ``False``, a new :py:class:`~PIL.Image.Image` object with the + transform applied is returned (and ``im`` is not changed). The default is + ``False``. + :returns: Either ``None``, or a new :py:class:`~PIL.Image.Image` object, + depending on the value of ``inPlace``. The profile will be returned in + the image's ``info['icc_profile']``. + :exception PyCMSError: + """ + + try: + if inPlace: + transform.apply_in_place(im) + imOut = None + else: + imOut = transform.apply(im) + except (TypeError, ValueError) as v: + raise PyCMSError(v) from v + + return imOut + + +def createProfile(colorSpace, colorTemp=-1): + """ + (pyCMS) Creates a profile. + + If colorSpace not in ``["LAB", "XYZ", "sRGB"]``, + a :exc:`PyCMSError` is raised. + + If using LAB and ``colorTemp`` is not a positive integer, + a :exc:`PyCMSError` is raised. + + If an error occurs while creating the profile, + a :exc:`PyCMSError` is raised. + + Use this function to create common profiles on-the-fly instead of + having to supply a profile on disk and knowing the path to it. It + returns a normal CmsProfile object that can be passed to + ImageCms.buildTransformFromOpenProfiles() to create a transform to apply + to images. + + :param colorSpace: String, the color space of the profile you wish to + create. + Currently only "LAB", "XYZ", and "sRGB" are supported. + :param colorTemp: Positive integer for the white point for the profile, in + degrees Kelvin (i.e. 5000, 6500, 9600, etc.). The default is for D50 + illuminant if omitted (5000k). colorTemp is ONLY applied to LAB + profiles, and is ignored for XYZ and sRGB. + :returns: A CmsProfile class object + :exception PyCMSError: + """ + + if colorSpace not in ["LAB", "XYZ", "sRGB"]: + raise PyCMSError( + f"Color space not supported for on-the-fly profile creation ({colorSpace})" + ) + + if colorSpace == "LAB": + try: + colorTemp = float(colorTemp) + except (TypeError, ValueError) as e: + raise PyCMSError( + f'Color temperature must be numeric, "{colorTemp}" not valid' + ) from e + + try: + return core.createProfile(colorSpace, colorTemp) + except (TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def getProfileName(profile): + """ + + (pyCMS) Gets the internal product name for the given profile. + + If ``profile`` isn't a valid CmsProfile object or filename to a profile, + a :exc:`PyCMSError` is raised If an error occurs while trying + to obtain the name tag, a :exc:`PyCMSError` is raised. + + Use this function to obtain the INTERNAL name of the profile (stored + in an ICC tag in the profile itself), usually the one used when the + profile was originally created. Sometimes this tag also contains + additional information supplied by the creator. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal name of the profile as stored + in an ICC tag. + :exception PyCMSError: + """ + + try: + # add an extra newline to preserve pyCMS compatibility + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + # do it in python, not c. + # // name was "%s - %s" (model, manufacturer) || Description , + # // but if the Model and Manufacturer were the same or the model + # // was long, Just the model, in 1.x + model = profile.profile.model + manufacturer = profile.profile.manufacturer + + if not (model or manufacturer): + return (profile.profile.profile_description or "") + "\n" + if not manufacturer or len(model) > 30: + return model + "\n" + return f"{model} - {manufacturer}\n" + + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def getProfileInfo(profile): + """ + (pyCMS) Gets the internal product information for the given profile. + + If ``profile`` isn't a valid CmsProfile object or filename to a profile, + a :exc:`PyCMSError` is raised. + + If an error occurs while trying to obtain the info tag, + a :exc:`PyCMSError` is raised. + + Use this function to obtain the information stored in the profile's + info tag. This often contains details about the profile, and how it + was created, as supplied by the creator. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal profile information stored in + an ICC tag. + :exception PyCMSError: + """ + + try: + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + # add an extra newline to preserve pyCMS compatibility + # Python, not C. the white point bits weren't working well, + # so skipping. + # info was description \r\n\r\n copyright \r\n\r\n K007 tag \r\n\r\n whitepoint + description = profile.profile.profile_description + cpright = profile.profile.copyright + arr = [] + for elt in (description, cpright): + if elt: + arr.append(elt) + return "\r\n\r\n".join(arr) + "\r\n\r\n" + + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def getProfileCopyright(profile): + """ + (pyCMS) Gets the copyright for the given profile. + + If ``profile`` isn't a valid CmsProfile object or filename to a profile, a + :exc:`PyCMSError` is raised. + + If an error occurs while trying to obtain the copyright tag, + a :exc:`PyCMSError` is raised. + + Use this function to obtain the information stored in the profile's + copyright tag. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal profile information stored in + an ICC tag. + :exception PyCMSError: + """ + try: + # add an extra newline to preserve pyCMS compatibility + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + return (profile.profile.copyright or "") + "\n" + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def getProfileManufacturer(profile): + """ + (pyCMS) Gets the manufacturer for the given profile. + + If ``profile`` isn't a valid CmsProfile object or filename to a profile, a + :exc:`PyCMSError` is raised. + + If an error occurs while trying to obtain the manufacturer tag, a + :exc:`PyCMSError` is raised. + + Use this function to obtain the information stored in the profile's + manufacturer tag. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal profile information stored in + an ICC tag. + :exception PyCMSError: + """ + try: + # add an extra newline to preserve pyCMS compatibility + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + return (profile.profile.manufacturer or "") + "\n" + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def getProfileModel(profile): + """ + (pyCMS) Gets the model for the given profile. + + If ``profile`` isn't a valid CmsProfile object or filename to a profile, a + :exc:`PyCMSError` is raised. + + If an error occurs while trying to obtain the model tag, + a :exc:`PyCMSError` is raised. + + Use this function to obtain the information stored in the profile's + model tag. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal profile information stored in + an ICC tag. + :exception PyCMSError: + """ + + try: + # add an extra newline to preserve pyCMS compatibility + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + return (profile.profile.model or "") + "\n" + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def getProfileDescription(profile): + """ + (pyCMS) Gets the description for the given profile. + + If ``profile`` isn't a valid CmsProfile object or filename to a profile, a + :exc:`PyCMSError` is raised. + + If an error occurs while trying to obtain the description tag, + a :exc:`PyCMSError` is raised. + + Use this function to obtain the information stored in the profile's + description tag. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal profile information stored in an + ICC tag. + :exception PyCMSError: + """ + + try: + # add an extra newline to preserve pyCMS compatibility + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + return (profile.profile.profile_description or "") + "\n" + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def getDefaultIntent(profile): + """ + (pyCMS) Gets the default intent name for the given profile. + + If ``profile`` isn't a valid CmsProfile object or filename to a profile, a + :exc:`PyCMSError` is raised. + + If an error occurs while trying to obtain the default intent, a + :exc:`PyCMSError` is raised. + + Use this function to determine the default (and usually best optimized) + rendering intent for this profile. Most profiles support multiple + rendering intents, but are intended mostly for one type of conversion. + If you wish to use a different intent than returned, use + ImageCms.isIntentSupported() to verify it will work first. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: Integer 0-3 specifying the default rendering intent for this + profile. + + ImageCms.INTENT_PERCEPTUAL = 0 (DEFAULT) + ImageCms.INTENT_RELATIVE_COLORIMETRIC = 1 + ImageCms.INTENT_SATURATION = 2 + ImageCms.INTENT_ABSOLUTE_COLORIMETRIC = 3 + + see the pyCMS documentation for details on rendering intents and what + they do. + :exception PyCMSError: + """ + + try: + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + return profile.profile.rendering_intent + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def isIntentSupported(profile, intent, direction): + """ + (pyCMS) Checks if a given intent is supported. + + Use this function to verify that you can use your desired + ``intent`` with ``profile``, and that ``profile`` can be used for the + input/output/proof profile as you desire. + + Some profiles are created specifically for one "direction", can cannot + be used for others. Some profiles can only be used for certain + rendering intents, so it's best to either verify this before trying + to create a transform with them (using this function), or catch the + potential :exc:`PyCMSError` that will occur if they don't + support the modes you select. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :param intent: Integer (0-3) specifying the rendering intent you wish to + use with this profile + + ImageCms.INTENT_PERCEPTUAL = 0 (DEFAULT) + ImageCms.INTENT_RELATIVE_COLORIMETRIC = 1 + ImageCms.INTENT_SATURATION = 2 + ImageCms.INTENT_ABSOLUTE_COLORIMETRIC = 3 + + see the pyCMS documentation for details on rendering intents and what + they do. + :param direction: Integer specifying if the profile is to be used for + input, output, or proof + + INPUT = 0 (or use ImageCms.DIRECTION_INPUT) + OUTPUT = 1 (or use ImageCms.DIRECTION_OUTPUT) + PROOF = 2 (or use ImageCms.DIRECTION_PROOF) + + :returns: 1 if the intent/direction are supported, -1 if they are not. + :exception PyCMSError: + """ + + try: + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + # FIXME: I get different results for the same data w. different + # compilers. Bug in LittleCMS or in the binding? + if profile.profile.is_intent_supported(intent, direction): + return 1 + else: + return -1 + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def versions(): + """ + (pyCMS) Fetches versions. + """ + + return (VERSION, core.littlecms_version, sys.version.split()[0], Image.__version__) diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageColor.py b/.venv/lib/python3.9/site-packages/PIL/ImageColor.py new file mode 100644 index 00000000..25f92f2c --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageColor.py @@ -0,0 +1,302 @@ +# +# The Python Imaging Library +# $Id$ +# +# map CSS3-style colour description strings to RGB +# +# History: +# 2002-10-24 fl Added support for CSS-style color strings +# 2002-12-15 fl Added RGBA support +# 2004-03-27 fl Fixed remaining int() problems for Python 1.5.2 +# 2004-07-19 fl Fixed gray/grey spelling issues +# 2009-03-05 fl Fixed rounding error in grayscale calculation +# +# Copyright (c) 2002-2004 by Secret Labs AB +# Copyright (c) 2002-2004 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import re + +from . import Image + + +def getrgb(color): + """ + Convert a color string to an RGB or RGBA tuple. If the string cannot be + parsed, this function raises a :py:exc:`ValueError` exception. + + .. versionadded:: 1.1.4 + + :param color: A color string + :return: ``(red, green, blue[, alpha])`` + """ + if len(color) > 100: + raise ValueError("color specifier is too long") + color = color.lower() + + rgb = colormap.get(color, None) + if rgb: + if isinstance(rgb, tuple): + return rgb + colormap[color] = rgb = getrgb(rgb) + return rgb + + # check for known string formats + if re.match("#[a-f0-9]{3}$", color): + return (int(color[1] * 2, 16), int(color[2] * 2, 16), int(color[3] * 2, 16)) + + if re.match("#[a-f0-9]{4}$", color): + return ( + int(color[1] * 2, 16), + int(color[2] * 2, 16), + int(color[3] * 2, 16), + int(color[4] * 2, 16), + ) + + if re.match("#[a-f0-9]{6}$", color): + return (int(color[1:3], 16), int(color[3:5], 16), int(color[5:7], 16)) + + if re.match("#[a-f0-9]{8}$", color): + return ( + int(color[1:3], 16), + int(color[3:5], 16), + int(color[5:7], 16), + int(color[7:9], 16), + ) + + m = re.match(r"rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$", color) + if m: + return (int(m.group(1)), int(m.group(2)), int(m.group(3))) + + m = re.match(r"rgb\(\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)$", color) + if m: + return ( + int((int(m.group(1)) * 255) / 100.0 + 0.5), + int((int(m.group(2)) * 255) / 100.0 + 0.5), + int((int(m.group(3)) * 255) / 100.0 + 0.5), + ) + + m = re.match( + r"hsl\(\s*(\d+\.?\d*)\s*,\s*(\d+\.?\d*)%\s*,\s*(\d+\.?\d*)%\s*\)$", color + ) + if m: + from colorsys import hls_to_rgb + + rgb = hls_to_rgb( + float(m.group(1)) / 360.0, + float(m.group(3)) / 100.0, + float(m.group(2)) / 100.0, + ) + return ( + int(rgb[0] * 255 + 0.5), + int(rgb[1] * 255 + 0.5), + int(rgb[2] * 255 + 0.5), + ) + + m = re.match( + r"hs[bv]\(\s*(\d+\.?\d*)\s*,\s*(\d+\.?\d*)%\s*,\s*(\d+\.?\d*)%\s*\)$", color + ) + if m: + from colorsys import hsv_to_rgb + + rgb = hsv_to_rgb( + float(m.group(1)) / 360.0, + float(m.group(2)) / 100.0, + float(m.group(3)) / 100.0, + ) + return ( + int(rgb[0] * 255 + 0.5), + int(rgb[1] * 255 + 0.5), + int(rgb[2] * 255 + 0.5), + ) + + m = re.match(r"rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$", color) + if m: + return (int(m.group(1)), int(m.group(2)), int(m.group(3)), int(m.group(4))) + raise ValueError(f"unknown color specifier: {repr(color)}") + + +def getcolor(color, mode): + """ + Same as :py:func:`~PIL.ImageColor.getrgb`, but converts the RGB value to a + greyscale value if the mode is not color or a palette image. If the string + cannot be parsed, this function raises a :py:exc:`ValueError` exception. + + .. versionadded:: 1.1.4 + + :param color: A color string + :return: ``(graylevel [, alpha]) or (red, green, blue[, alpha])`` + """ + # same as getrgb, but converts the result to the given mode + color, alpha = getrgb(color), 255 + if len(color) == 4: + color, alpha = color[0:3], color[3] + + if Image.getmodebase(mode) == "L": + r, g, b = color + # ITU-R Recommendation 601-2 for nonlinear RGB + # scaled to 24 bits to match the convert's implementation. + color = (r * 19595 + g * 38470 + b * 7471 + 0x8000) >> 16 + if mode[-1] == "A": + return (color, alpha) + else: + if mode[-1] == "A": + return color + (alpha,) + return color + + +colormap = { + # X11 colour table from https://drafts.csswg.org/css-color-4/, with + # gray/grey spelling issues fixed. This is a superset of HTML 4.0 + # colour names used in CSS 1. + "aliceblue": "#f0f8ff", + "antiquewhite": "#faebd7", + "aqua": "#00ffff", + "aquamarine": "#7fffd4", + "azure": "#f0ffff", + "beige": "#f5f5dc", + "bisque": "#ffe4c4", + "black": "#000000", + "blanchedalmond": "#ffebcd", + "blue": "#0000ff", + "blueviolet": "#8a2be2", + "brown": "#a52a2a", + "burlywood": "#deb887", + "cadetblue": "#5f9ea0", + "chartreuse": "#7fff00", + "chocolate": "#d2691e", + "coral": "#ff7f50", + "cornflowerblue": "#6495ed", + "cornsilk": "#fff8dc", + "crimson": "#dc143c", + "cyan": "#00ffff", + "darkblue": "#00008b", + "darkcyan": "#008b8b", + "darkgoldenrod": "#b8860b", + "darkgray": "#a9a9a9", + "darkgrey": "#a9a9a9", + "darkgreen": "#006400", + "darkkhaki": "#bdb76b", + "darkmagenta": "#8b008b", + "darkolivegreen": "#556b2f", + "darkorange": "#ff8c00", + "darkorchid": "#9932cc", + "darkred": "#8b0000", + "darksalmon": "#e9967a", + "darkseagreen": "#8fbc8f", + "darkslateblue": "#483d8b", + "darkslategray": "#2f4f4f", + "darkslategrey": "#2f4f4f", + "darkturquoise": "#00ced1", + "darkviolet": "#9400d3", + "deeppink": "#ff1493", + "deepskyblue": "#00bfff", + "dimgray": "#696969", + "dimgrey": "#696969", + "dodgerblue": "#1e90ff", + "firebrick": "#b22222", + "floralwhite": "#fffaf0", + "forestgreen": "#228b22", + "fuchsia": "#ff00ff", + "gainsboro": "#dcdcdc", + "ghostwhite": "#f8f8ff", + "gold": "#ffd700", + "goldenrod": "#daa520", + "gray": "#808080", + "grey": "#808080", + "green": "#008000", + "greenyellow": "#adff2f", + "honeydew": "#f0fff0", + "hotpink": "#ff69b4", + "indianred": "#cd5c5c", + "indigo": "#4b0082", + "ivory": "#fffff0", + "khaki": "#f0e68c", + "lavender": "#e6e6fa", + "lavenderblush": "#fff0f5", + "lawngreen": "#7cfc00", + "lemonchiffon": "#fffacd", + "lightblue": "#add8e6", + "lightcoral": "#f08080", + "lightcyan": "#e0ffff", + "lightgoldenrodyellow": "#fafad2", + "lightgreen": "#90ee90", + "lightgray": "#d3d3d3", + "lightgrey": "#d3d3d3", + "lightpink": "#ffb6c1", + "lightsalmon": "#ffa07a", + "lightseagreen": "#20b2aa", + "lightskyblue": "#87cefa", + "lightslategray": "#778899", + "lightslategrey": "#778899", + "lightsteelblue": "#b0c4de", + "lightyellow": "#ffffe0", + "lime": "#00ff00", + "limegreen": "#32cd32", + "linen": "#faf0e6", + "magenta": "#ff00ff", + "maroon": "#800000", + "mediumaquamarine": "#66cdaa", + "mediumblue": "#0000cd", + "mediumorchid": "#ba55d3", + "mediumpurple": "#9370db", + "mediumseagreen": "#3cb371", + "mediumslateblue": "#7b68ee", + "mediumspringgreen": "#00fa9a", + "mediumturquoise": "#48d1cc", + "mediumvioletred": "#c71585", + "midnightblue": "#191970", + "mintcream": "#f5fffa", + "mistyrose": "#ffe4e1", + "moccasin": "#ffe4b5", + "navajowhite": "#ffdead", + "navy": "#000080", + "oldlace": "#fdf5e6", + "olive": "#808000", + "olivedrab": "#6b8e23", + "orange": "#ffa500", + "orangered": "#ff4500", + "orchid": "#da70d6", + "palegoldenrod": "#eee8aa", + "palegreen": "#98fb98", + "paleturquoise": "#afeeee", + "palevioletred": "#db7093", + "papayawhip": "#ffefd5", + "peachpuff": "#ffdab9", + "peru": "#cd853f", + "pink": "#ffc0cb", + "plum": "#dda0dd", + "powderblue": "#b0e0e6", + "purple": "#800080", + "rebeccapurple": "#663399", + "red": "#ff0000", + "rosybrown": "#bc8f8f", + "royalblue": "#4169e1", + "saddlebrown": "#8b4513", + "salmon": "#fa8072", + "sandybrown": "#f4a460", + "seagreen": "#2e8b57", + "seashell": "#fff5ee", + "sienna": "#a0522d", + "silver": "#c0c0c0", + "skyblue": "#87ceeb", + "slateblue": "#6a5acd", + "slategray": "#708090", + "slategrey": "#708090", + "snow": "#fffafa", + "springgreen": "#00ff7f", + "steelblue": "#4682b4", + "tan": "#d2b48c", + "teal": "#008080", + "thistle": "#d8bfd8", + "tomato": "#ff6347", + "turquoise": "#40e0d0", + "violet": "#ee82ee", + "wheat": "#f5deb3", + "white": "#ffffff", + "whitesmoke": "#f5f5f5", + "yellow": "#ffff00", + "yellowgreen": "#9acd32", +} diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageDraw.py b/.venv/lib/python3.9/site-packages/PIL/ImageDraw.py new file mode 100644 index 00000000..aea0cc68 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageDraw.py @@ -0,0 +1,984 @@ +# +# The Python Imaging Library +# $Id$ +# +# drawing interface operations +# +# History: +# 1996-04-13 fl Created (experimental) +# 1996-08-07 fl Filled polygons, ellipses. +# 1996-08-13 fl Added text support +# 1998-06-28 fl Handle I and F images +# 1998-12-29 fl Added arc; use arc primitive to draw ellipses +# 1999-01-10 fl Added shape stuff (experimental) +# 1999-02-06 fl Added bitmap support +# 1999-02-11 fl Changed all primitives to take options +# 1999-02-20 fl Fixed backwards compatibility +# 2000-10-12 fl Copy on write, when necessary +# 2001-02-18 fl Use default ink for bitmap/text also in fill mode +# 2002-10-24 fl Added support for CSS-style color strings +# 2002-12-10 fl Added experimental support for RGBA-on-RGB drawing +# 2002-12-11 fl Refactored low-level drawing API (work in progress) +# 2004-08-26 fl Made Draw() a factory function, added getdraw() support +# 2004-09-04 fl Added width support to line primitive +# 2004-09-10 fl Added font mode handling +# 2006-06-19 fl Added font bearing support (getmask2) +# +# Copyright (c) 1997-2006 by Secret Labs AB +# Copyright (c) 1996-2006 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import math +import numbers + +from . import Image, ImageColor, ImageFont + +""" +A simple 2D drawing interface for PIL images. +

+Application code should use the Draw factory, instead of +directly. +""" + + +class ImageDraw: + def __init__(self, im, mode=None): + """ + Create a drawing instance. + + :param im: The image to draw in. + :param mode: Optional mode to use for color values. For RGB + images, this argument can be RGB or RGBA (to blend the + drawing into the image). For all other modes, this argument + must be the same as the image mode. If omitted, the mode + defaults to the mode of the image. + """ + im.load() + if im.readonly: + im._copy() # make it writeable + blend = 0 + if mode is None: + mode = im.mode + if mode != im.mode: + if mode == "RGBA" and im.mode == "RGB": + blend = 1 + else: + raise ValueError("mode mismatch") + if mode == "P": + self.palette = im.palette + else: + self.palette = None + self._image = im + self.im = im.im + self.draw = Image.core.draw(self.im, blend) + self.mode = mode + if mode in ("I", "F"): + self.ink = self.draw.draw_ink(1) + else: + self.ink = self.draw.draw_ink(-1) + if mode in ("1", "P", "I", "F"): + # FIXME: fix Fill2 to properly support matte for I+F images + self.fontmode = "1" + else: + self.fontmode = "L" # aliasing is okay for other modes + self.fill = 0 + self.font = None + + def getfont(self): + """ + Get the current default font. + + :returns: An image font.""" + if not self.font: + # FIXME: should add a font repository + from . import ImageFont + + self.font = ImageFont.load_default() + return self.font + + def _getink(self, ink, fill=None): + if ink is None and fill is None: + if self.fill: + fill = self.ink + else: + ink = self.ink + else: + if ink is not None: + if isinstance(ink, str): + ink = ImageColor.getcolor(ink, self.mode) + if self.palette and not isinstance(ink, numbers.Number): + ink = self.palette.getcolor(ink, self._image) + ink = self.draw.draw_ink(ink) + if fill is not None: + if isinstance(fill, str): + fill = ImageColor.getcolor(fill, self.mode) + if self.palette and not isinstance(fill, numbers.Number): + fill = self.palette.getcolor(fill, self._image) + fill = self.draw.draw_ink(fill) + return ink, fill + + def arc(self, xy, start, end, fill=None, width=1): + """Draw an arc.""" + ink, fill = self._getink(fill) + if ink is not None: + self.draw.draw_arc(xy, start, end, ink, width) + + def bitmap(self, xy, bitmap, fill=None): + """Draw a bitmap.""" + bitmap.load() + ink, fill = self._getink(fill) + if ink is None: + ink = fill + if ink is not None: + self.draw.draw_bitmap(xy, bitmap.im, ink) + + def chord(self, xy, start, end, fill=None, outline=None, width=1): + """Draw a chord.""" + ink, fill = self._getink(outline, fill) + if fill is not None: + self.draw.draw_chord(xy, start, end, fill, 1) + if ink is not None and ink != fill and width != 0: + self.draw.draw_chord(xy, start, end, ink, 0, width) + + def ellipse(self, xy, fill=None, outline=None, width=1): + """Draw an ellipse.""" + ink, fill = self._getink(outline, fill) + if fill is not None: + self.draw.draw_ellipse(xy, fill, 1) + if ink is not None and ink != fill and width != 0: + self.draw.draw_ellipse(xy, ink, 0, width) + + def line(self, xy, fill=None, width=0, joint=None): + """Draw a line, or a connected sequence of line segments.""" + ink = self._getink(fill)[0] + if ink is not None: + self.draw.draw_lines(xy, ink, width) + if joint == "curve" and width > 4: + if not isinstance(xy[0], (list, tuple)): + xy = [tuple(xy[i : i + 2]) for i in range(0, len(xy), 2)] + for i in range(1, len(xy) - 1): + point = xy[i] + angles = [ + math.degrees(math.atan2(end[0] - start[0], start[1] - end[1])) + % 360 + for start, end in ((xy[i - 1], point), (point, xy[i + 1])) + ] + if angles[0] == angles[1]: + # This is a straight line, so no joint is required + continue + + def coord_at_angle(coord, angle): + x, y = coord + angle -= 90 + distance = width / 2 - 1 + return tuple( + [ + p + (math.floor(p_d) if p_d > 0 else math.ceil(p_d)) + for p, p_d in ( + (x, distance * math.cos(math.radians(angle))), + (y, distance * math.sin(math.radians(angle))), + ) + ] + ) + + flipped = ( + angles[1] > angles[0] and angles[1] - 180 > angles[0] + ) or (angles[1] < angles[0] and angles[1] + 180 > angles[0]) + coords = [ + (point[0] - width / 2 + 1, point[1] - width / 2 + 1), + (point[0] + width / 2 - 1, point[1] + width / 2 - 1), + ] + if flipped: + start, end = (angles[1] + 90, angles[0] + 90) + else: + start, end = (angles[0] - 90, angles[1] - 90) + self.pieslice(coords, start - 90, end - 90, fill) + + if width > 8: + # Cover potential gaps between the line and the joint + if flipped: + gapCoords = [ + coord_at_angle(point, angles[0] + 90), + point, + coord_at_angle(point, angles[1] + 90), + ] + else: + gapCoords = [ + coord_at_angle(point, angles[0] - 90), + point, + coord_at_angle(point, angles[1] - 90), + ] + self.line(gapCoords, fill, width=3) + + def shape(self, shape, fill=None, outline=None): + """(Experimental) Draw a shape.""" + shape.close() + ink, fill = self._getink(outline, fill) + if fill is not None: + self.draw.draw_outline(shape, fill, 1) + if ink is not None and ink != fill: + self.draw.draw_outline(shape, ink, 0) + + def pieslice(self, xy, start, end, fill=None, outline=None, width=1): + """Draw a pieslice.""" + ink, fill = self._getink(outline, fill) + if fill is not None: + self.draw.draw_pieslice(xy, start, end, fill, 1) + if ink is not None and ink != fill and width != 0: + self.draw.draw_pieslice(xy, start, end, ink, 0, width) + + def point(self, xy, fill=None): + """Draw one or more individual pixels.""" + ink, fill = self._getink(fill) + if ink is not None: + self.draw.draw_points(xy, ink) + + def polygon(self, xy, fill=None, outline=None): + """Draw a polygon.""" + ink, fill = self._getink(outline, fill) + if fill is not None: + self.draw.draw_polygon(xy, fill, 1) + if ink is not None and ink != fill: + self.draw.draw_polygon(xy, ink, 0) + + def regular_polygon( + self, bounding_circle, n_sides, rotation=0, fill=None, outline=None + ): + """Draw a regular polygon.""" + xy = _compute_regular_polygon_vertices(bounding_circle, n_sides, rotation) + self.polygon(xy, fill, outline) + + def rectangle(self, xy, fill=None, outline=None, width=1): + """Draw a rectangle.""" + ink, fill = self._getink(outline, fill) + if fill is not None: + self.draw.draw_rectangle(xy, fill, 1) + if ink is not None and ink != fill and width != 0: + self.draw.draw_rectangle(xy, ink, 0, width) + + def rounded_rectangle(self, xy, radius=0, fill=None, outline=None, width=1): + """Draw a rounded rectangle.""" + if isinstance(xy[0], (list, tuple)): + (x0, y0), (x1, y1) = xy + else: + x0, y0, x1, y1 = xy + + d = radius * 2 + + full_x = d >= x1 - x0 + if full_x: + # The two left and two right corners are joined + d = x1 - x0 + full_y = d >= y1 - y0 + if full_y: + # The two top and two bottom corners are joined + d = y1 - y0 + if full_x and full_y: + # If all corners are joined, that is a circle + return self.ellipse(xy, fill, outline, width) + + if d == 0: + # If the corners have no curve, that is a rectangle + return self.rectangle(xy, fill, outline, width) + + r = d // 2 + ink, fill = self._getink(outline, fill) + + def draw_corners(pieslice): + if full_x: + # Draw top and bottom halves + parts = ( + ((x0, y0, x0 + d, y0 + d), 180, 360), + ((x0, y1 - d, x0 + d, y1), 0, 180), + ) + elif full_y: + # Draw left and right halves + parts = ( + ((x0, y0, x0 + d, y0 + d), 90, 270), + ((x1 - d, y0, x1, y0 + d), 270, 90), + ) + else: + # Draw four separate corners + parts = ( + ((x1 - d, y0, x1, y0 + d), 270, 360), + ((x1 - d, y1 - d, x1, y1), 0, 90), + ((x0, y1 - d, x0 + d, y1), 90, 180), + ((x0, y0, x0 + d, y0 + d), 180, 270), + ) + for part in parts: + if pieslice: + self.draw.draw_pieslice(*(part + (fill, 1))) + else: + self.draw.draw_arc(*(part + (ink, width))) + + if fill is not None: + draw_corners(True) + + if full_x: + self.draw.draw_rectangle((x0, y0 + r + 1, x1, y1 - r - 1), fill, 1) + else: + self.draw.draw_rectangle((x0 + r + 1, y0, x1 - r - 1, y1), fill, 1) + if not full_x and not full_y: + self.draw.draw_rectangle((x0, y0 + r + 1, x0 + r, y1 - r - 1), fill, 1) + self.draw.draw_rectangle((x1 - r, y0 + r + 1, x1, y1 - r - 1), fill, 1) + if ink is not None and ink != fill and width != 0: + draw_corners(False) + + if not full_x: + self.draw.draw_rectangle( + (x0 + r + 1, y0, x1 - r - 1, y0 + width - 1), ink, 1 + ) + self.draw.draw_rectangle( + (x0 + r + 1, y1 - width + 1, x1 - r - 1, y1), ink, 1 + ) + if not full_y: + self.draw.draw_rectangle( + (x0, y0 + r + 1, x0 + width - 1, y1 - r - 1), ink, 1 + ) + self.draw.draw_rectangle( + (x1 - width + 1, y0 + r + 1, x1, y1 - r - 1), ink, 1 + ) + + def _multiline_check(self, text): + """Draw text.""" + split_character = "\n" if isinstance(text, str) else b"\n" + + return split_character in text + + def _multiline_split(self, text): + split_character = "\n" if isinstance(text, str) else b"\n" + + return text.split(split_character) + + def text( + self, + xy, + text, + fill=None, + font=None, + anchor=None, + spacing=4, + align="left", + direction=None, + features=None, + language=None, + stroke_width=0, + stroke_fill=None, + embedded_color=False, + *args, + **kwargs, + ): + if self._multiline_check(text): + return self.multiline_text( + xy, + text, + fill, + font, + anchor, + spacing, + align, + direction, + features, + language, + stroke_width, + stroke_fill, + embedded_color, + ) + + if embedded_color and self.mode not in ("RGB", "RGBA"): + raise ValueError("Embedded color supported only in RGB and RGBA modes") + + if font is None: + font = self.getfont() + + def getink(fill): + ink, fill = self._getink(fill) + if ink is None: + return fill + return ink + + def draw_text(ink, stroke_width=0, stroke_offset=None): + mode = self.fontmode + if stroke_width == 0 and embedded_color: + mode = "RGBA" + coord = xy + try: + mask, offset = font.getmask2( + text, + mode, + direction=direction, + features=features, + language=language, + stroke_width=stroke_width, + anchor=anchor, + ink=ink, + *args, + **kwargs, + ) + coord = coord[0] + offset[0], coord[1] + offset[1] + except AttributeError: + try: + mask = font.getmask( + text, + mode, + direction, + features, + language, + stroke_width, + anchor, + ink, + *args, + **kwargs, + ) + except TypeError: + mask = font.getmask(text) + if stroke_offset: + coord = coord[0] + stroke_offset[0], coord[1] + stroke_offset[1] + if mode == "RGBA": + # font.getmask2(mode="RGBA") returns color in RGB bands and mask in A + # extract mask and set text alpha + color, mask = mask, mask.getband(3) + color.fillband(3, (ink >> 24) & 0xFF) + coord2 = coord[0] + mask.size[0], coord[1] + mask.size[1] + self.im.paste(color, coord + coord2, mask) + else: + self.draw.draw_bitmap(coord, mask, ink) + + ink = getink(fill) + if ink is not None: + stroke_ink = None + if stroke_width: + stroke_ink = getink(stroke_fill) if stroke_fill is not None else ink + + if stroke_ink is not None: + # Draw stroked text + draw_text(stroke_ink, stroke_width) + + # Draw normal text + draw_text(ink, 0) + else: + # Only draw normal text + draw_text(ink) + + def multiline_text( + self, + xy, + text, + fill=None, + font=None, + anchor=None, + spacing=4, + align="left", + direction=None, + features=None, + language=None, + stroke_width=0, + stroke_fill=None, + embedded_color=False, + ): + if direction == "ttb": + raise ValueError("ttb direction is unsupported for multiline text") + + if anchor is None: + anchor = "la" + elif len(anchor) != 2: + raise ValueError("anchor must be a 2 character string") + elif anchor[1] in "tb": + raise ValueError("anchor not supported for multiline text") + + widths = [] + max_width = 0 + lines = self._multiline_split(text) + line_spacing = ( + self.textsize("A", font=font, stroke_width=stroke_width)[1] + spacing + ) + for line in lines: + line_width = self.textlength( + line, font, direction=direction, features=features, language=language + ) + widths.append(line_width) + max_width = max(max_width, line_width) + + top = xy[1] + if anchor[1] == "m": + top -= (len(lines) - 1) * line_spacing / 2.0 + elif anchor[1] == "d": + top -= (len(lines) - 1) * line_spacing + + for idx, line in enumerate(lines): + left = xy[0] + width_difference = max_width - widths[idx] + + # first align left by anchor + if anchor[0] == "m": + left -= width_difference / 2.0 + elif anchor[0] == "r": + left -= width_difference + + # then align by align parameter + if align == "left": + pass + elif align == "center": + left += width_difference / 2.0 + elif align == "right": + left += width_difference + else: + raise ValueError('align must be "left", "center" or "right"') + + self.text( + (left, top), + line, + fill, + font, + anchor, + direction=direction, + features=features, + language=language, + stroke_width=stroke_width, + stroke_fill=stroke_fill, + embedded_color=embedded_color, + ) + top += line_spacing + + def textsize( + self, + text, + font=None, + spacing=4, + direction=None, + features=None, + language=None, + stroke_width=0, + ): + """Get the size of a given string, in pixels.""" + if self._multiline_check(text): + return self.multiline_textsize( + text, font, spacing, direction, features, language, stroke_width + ) + + if font is None: + font = self.getfont() + return font.getsize(text, direction, features, language, stroke_width) + + def multiline_textsize( + self, + text, + font=None, + spacing=4, + direction=None, + features=None, + language=None, + stroke_width=0, + ): + max_width = 0 + lines = self._multiline_split(text) + line_spacing = ( + self.textsize("A", font=font, stroke_width=stroke_width)[1] + spacing + ) + for line in lines: + line_width, line_height = self.textsize( + line, font, spacing, direction, features, language, stroke_width + ) + max_width = max(max_width, line_width) + return max_width, len(lines) * line_spacing - spacing + + def textlength( + self, + text, + font=None, + direction=None, + features=None, + language=None, + embedded_color=False, + ): + """Get the length of a given string, in pixels with 1/64 precision.""" + if self._multiline_check(text): + raise ValueError("can't measure length of multiline text") + if embedded_color and self.mode not in ("RGB", "RGBA"): + raise ValueError("Embedded color supported only in RGB and RGBA modes") + + if font is None: + font = self.getfont() + mode = "RGBA" if embedded_color else self.fontmode + try: + return font.getlength(text, mode, direction, features, language) + except AttributeError: + size = self.textsize( + text, font, direction=direction, features=features, language=language + ) + if direction == "ttb": + return size[1] + return size[0] + + def textbbox( + self, + xy, + text, + font=None, + anchor=None, + spacing=4, + align="left", + direction=None, + features=None, + language=None, + stroke_width=0, + embedded_color=False, + ): + """Get the bounding box of a given string, in pixels.""" + if embedded_color and self.mode not in ("RGB", "RGBA"): + raise ValueError("Embedded color supported only in RGB and RGBA modes") + + if self._multiline_check(text): + return self.multiline_textbbox( + xy, + text, + font, + anchor, + spacing, + align, + direction, + features, + language, + stroke_width, + embedded_color, + ) + + if font is None: + font = self.getfont() + if not isinstance(font, ImageFont.FreeTypeFont): + raise ValueError("Only supported for TrueType fonts") + mode = "RGBA" if embedded_color else self.fontmode + bbox = font.getbbox( + text, mode, direction, features, language, stroke_width, anchor + ) + return bbox[0] + xy[0], bbox[1] + xy[1], bbox[2] + xy[0], bbox[3] + xy[1] + + def multiline_textbbox( + self, + xy, + text, + font=None, + anchor=None, + spacing=4, + align="left", + direction=None, + features=None, + language=None, + stroke_width=0, + embedded_color=False, + ): + if direction == "ttb": + raise ValueError("ttb direction is unsupported for multiline text") + + if anchor is None: + anchor = "la" + elif len(anchor) != 2: + raise ValueError("anchor must be a 2 character string") + elif anchor[1] in "tb": + raise ValueError("anchor not supported for multiline text") + + widths = [] + max_width = 0 + lines = self._multiline_split(text) + line_spacing = ( + self.textsize("A", font=font, stroke_width=stroke_width)[1] + spacing + ) + for line in lines: + line_width = self.textlength( + line, + font, + direction=direction, + features=features, + language=language, + embedded_color=embedded_color, + ) + widths.append(line_width) + max_width = max(max_width, line_width) + + top = xy[1] + if anchor[1] == "m": + top -= (len(lines) - 1) * line_spacing / 2.0 + elif anchor[1] == "d": + top -= (len(lines) - 1) * line_spacing + + bbox = None + + for idx, line in enumerate(lines): + left = xy[0] + width_difference = max_width - widths[idx] + + # first align left by anchor + if anchor[0] == "m": + left -= width_difference / 2.0 + elif anchor[0] == "r": + left -= width_difference + + # then align by align parameter + if align == "left": + pass + elif align == "center": + left += width_difference / 2.0 + elif align == "right": + left += width_difference + else: + raise ValueError('align must be "left", "center" or "right"') + + bbox_line = self.textbbox( + (left, top), + line, + font, + anchor, + direction=direction, + features=features, + language=language, + stroke_width=stroke_width, + embedded_color=embedded_color, + ) + if bbox is None: + bbox = bbox_line + else: + bbox = ( + min(bbox[0], bbox_line[0]), + min(bbox[1], bbox_line[1]), + max(bbox[2], bbox_line[2]), + max(bbox[3], bbox_line[3]), + ) + + top += line_spacing + + if bbox is None: + return xy[0], xy[1], xy[0], xy[1] + return bbox + + +def Draw(im, mode=None): + """ + A simple 2D drawing interface for PIL images. + + :param im: The image to draw in. + :param mode: Optional mode to use for color values. For RGB + images, this argument can be RGB or RGBA (to blend the + drawing into the image). For all other modes, this argument + must be the same as the image mode. If omitted, the mode + defaults to the mode of the image. + """ + try: + return im.getdraw(mode) + except AttributeError: + return ImageDraw(im, mode) + + +# experimental access to the outline API +try: + Outline = Image.core.outline +except AttributeError: + Outline = None + + +def getdraw(im=None, hints=None): + """ + (Experimental) A more advanced 2D drawing interface for PIL images, + based on the WCK interface. + + :param im: The image to draw in. + :param hints: An optional list of hints. + :returns: A (drawing context, drawing resource factory) tuple. + """ + # FIXME: this needs more work! + # FIXME: come up with a better 'hints' scheme. + handler = None + if not hints or "nicest" in hints: + try: + from . import _imagingagg as handler + except ImportError: + pass + if handler is None: + from . import ImageDraw2 as handler + if im: + im = handler.Draw(im) + return im, handler + + +def floodfill(image, xy, value, border=None, thresh=0): + """ + (experimental) Fills a bounded region with a given color. + + :param image: Target image. + :param xy: Seed position (a 2-item coordinate tuple). See + :ref:`coordinate-system`. + :param value: Fill color. + :param border: Optional border value. If given, the region consists of + pixels with a color different from the border color. If not given, + the region consists of pixels having the same color as the seed + pixel. + :param thresh: Optional threshold value which specifies a maximum + tolerable difference of a pixel value from the 'background' in + order for it to be replaced. Useful for filling regions of + non-homogeneous, but similar, colors. + """ + # based on an implementation by Eric S. Raymond + # amended by yo1995 @20180806 + pixel = image.load() + x, y = xy + try: + background = pixel[x, y] + if _color_diff(value, background) <= thresh: + return # seed point already has fill color + pixel[x, y] = value + except (ValueError, IndexError): + return # seed point outside image + edge = {(x, y)} + # use a set to keep record of current and previous edge pixels + # to reduce memory consumption + full_edge = set() + while edge: + new_edge = set() + for (x, y) in edge: # 4 adjacent method + for (s, t) in ((x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)): + # If already processed, or if a coordinate is negative, skip + if (s, t) in full_edge or s < 0 or t < 0: + continue + try: + p = pixel[s, t] + except (ValueError, IndexError): + pass + else: + full_edge.add((s, t)) + if border is None: + fill = _color_diff(p, background) <= thresh + else: + fill = p != value and p != border + if fill: + pixel[s, t] = value + new_edge.add((s, t)) + full_edge = edge # discard pixels processed + edge = new_edge + + +def _compute_regular_polygon_vertices(bounding_circle, n_sides, rotation): + """ + Generate a list of vertices for a 2D regular polygon. + + :param bounding_circle: The bounding circle is a tuple defined + by a point and radius. The polygon is inscribed in this circle. + (e.g. ``bounding_circle=(x, y, r)`` or ``((x, y), r)``) + :param n_sides: Number of sides + (e.g. ``n_sides=3`` for a triangle, ``6`` for a hexagon) + :param rotation: Apply an arbitrary rotation to the polygon + (e.g. ``rotation=90``, applies a 90 degree rotation) + :return: List of regular polygon vertices + (e.g. ``[(25, 50), (50, 50), (50, 25), (25, 25)]``) + + How are the vertices computed? + 1. Compute the following variables + - theta: Angle between the apothem & the nearest polygon vertex + - side_length: Length of each polygon edge + - centroid: Center of bounding circle (1st, 2nd elements of bounding_circle) + - polygon_radius: Polygon radius (last element of bounding_circle) + - angles: Location of each polygon vertex in polar grid + (e.g. A square with 0 degree rotation => [225.0, 315.0, 45.0, 135.0]) + + 2. For each angle in angles, get the polygon vertex at that angle + The vertex is computed using the equation below. + X= xcos(φ) + ysin(φ) + Y= −xsin(φ) + ycos(φ) + + Note: + φ = angle in degrees + x = 0 + y = polygon_radius + + The formula above assumes rotation around the origin. + In our case, we are rotating around the centroid. + To account for this, we use the formula below + X = xcos(φ) + ysin(φ) + centroid_x + Y = −xsin(φ) + ycos(φ) + centroid_y + """ + # 1. Error Handling + # 1.1 Check `n_sides` has an appropriate value + if not isinstance(n_sides, int): + raise TypeError("n_sides should be an int") + if n_sides < 3: + raise ValueError("n_sides should be an int > 2") + + # 1.2 Check `bounding_circle` has an appropriate value + if not isinstance(bounding_circle, (list, tuple)): + raise TypeError("bounding_circle should be a tuple") + + if len(bounding_circle) == 3: + *centroid, polygon_radius = bounding_circle + elif len(bounding_circle) == 2: + centroid, polygon_radius = bounding_circle + else: + raise ValueError( + "bounding_circle should contain 2D coordinates " + "and a radius (e.g. (x, y, r) or ((x, y), r) )" + ) + + if not all(isinstance(i, (int, float)) for i in (*centroid, polygon_radius)): + raise ValueError("bounding_circle should only contain numeric data") + + if not len(centroid) == 2: + raise ValueError( + "bounding_circle centre should contain 2D coordinates (e.g. (x, y))" + ) + + if polygon_radius <= 0: + raise ValueError("bounding_circle radius should be > 0") + + # 1.3 Check `rotation` has an appropriate value + if not isinstance(rotation, (int, float)): + raise ValueError("rotation should be an int or float") + + # 2. Define Helper Functions + def _apply_rotation(point, degrees, centroid): + return ( + round( + point[0] * math.cos(math.radians(360 - degrees)) + - point[1] * math.sin(math.radians(360 - degrees)) + + centroid[0], + 2, + ), + round( + point[1] * math.cos(math.radians(360 - degrees)) + + point[0] * math.sin(math.radians(360 - degrees)) + + centroid[1], + 2, + ), + ) + + def _compute_polygon_vertex(centroid, polygon_radius, angle): + start_point = [polygon_radius, 0] + return _apply_rotation(start_point, angle, centroid) + + def _get_angles(n_sides, rotation): + angles = [] + degrees = 360 / n_sides + # Start with the bottom left polygon vertex + current_angle = (270 - 0.5 * degrees) + rotation + for _ in range(0, n_sides): + angles.append(current_angle) + current_angle += degrees + if current_angle > 360: + current_angle -= 360 + return angles + + # 3. Variable Declarations + angles = _get_angles(n_sides, rotation) + + # 4. Compute Vertices + return [ + _compute_polygon_vertex(centroid, polygon_radius, angle) for angle in angles + ] + + +def _color_diff(color1, color2): + """ + Uses 1-norm distance to calculate difference between two values. + """ + if isinstance(color2, tuple): + return sum([abs(color1[i] - color2[i]) for i in range(0, len(color2))]) + else: + return abs(color1 - color2) diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageDraw2.py b/.venv/lib/python3.9/site-packages/PIL/ImageDraw2.py new file mode 100644 index 00000000..1f63110f --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageDraw2.py @@ -0,0 +1,179 @@ +# +# The Python Imaging Library +# $Id$ +# +# WCK-style drawing interface operations +# +# History: +# 2003-12-07 fl created +# 2005-05-15 fl updated; added to PIL as ImageDraw2 +# 2005-05-15 fl added text support +# 2005-05-20 fl added arc/chord/pieslice support +# +# Copyright (c) 2003-2005 by Secret Labs AB +# Copyright (c) 2003-2005 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + + +""" +(Experimental) WCK-style drawing interface operations + +.. seealso:: :py:mod:`PIL.ImageDraw` +""" + + +from . import Image, ImageColor, ImageDraw, ImageFont, ImagePath + + +class Pen: + """Stores an outline color and width.""" + + def __init__(self, color, width=1, opacity=255): + self.color = ImageColor.getrgb(color) + self.width = width + + +class Brush: + """Stores a fill color""" + + def __init__(self, color, opacity=255): + self.color = ImageColor.getrgb(color) + + +class Font: + """Stores a TrueType font and color""" + + def __init__(self, color, file, size=12): + # FIXME: add support for bitmap fonts + self.color = ImageColor.getrgb(color) + self.font = ImageFont.truetype(file, size) + + +class Draw: + """ + (Experimental) WCK-style drawing interface + """ + + def __init__(self, image, size=None, color=None): + if not hasattr(image, "im"): + image = Image.new(image, size, color) + self.draw = ImageDraw.Draw(image) + self.image = image + self.transform = None + + def flush(self): + return self.image + + def render(self, op, xy, pen, brush=None): + # handle color arguments + outline = fill = None + width = 1 + if isinstance(pen, Pen): + outline = pen.color + width = pen.width + elif isinstance(brush, Pen): + outline = brush.color + width = brush.width + if isinstance(brush, Brush): + fill = brush.color + elif isinstance(pen, Brush): + fill = pen.color + # handle transformation + if self.transform: + xy = ImagePath.Path(xy) + xy.transform(self.transform) + # render the item + if op == "line": + self.draw.line(xy, fill=outline, width=width) + else: + getattr(self.draw, op)(xy, fill=fill, outline=outline) + + def settransform(self, offset): + """Sets a transformation offset.""" + (xoffset, yoffset) = offset + self.transform = (1, 0, xoffset, 0, 1, yoffset) + + def arc(self, xy, start, end, *options): + """ + Draws an arc (a portion of a circle outline) between the start and end + angles, inside the given bounding box. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.arc` + """ + self.render("arc", xy, start, end, *options) + + def chord(self, xy, start, end, *options): + """ + Same as :py:meth:`~PIL.ImageDraw2.Draw.arc`, but connects the end points + with a straight line. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.chord` + """ + self.render("chord", xy, start, end, *options) + + def ellipse(self, xy, *options): + """ + Draws an ellipse inside the given bounding box. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.ellipse` + """ + self.render("ellipse", xy, *options) + + def line(self, xy, *options): + """ + Draws a line between the coordinates in the ``xy`` list. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.line` + """ + self.render("line", xy, *options) + + def pieslice(self, xy, start, end, *options): + """ + Same as arc, but also draws straight lines between the end points and the + center of the bounding box. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.pieslice` + """ + self.render("pieslice", xy, start, end, *options) + + def polygon(self, xy, *options): + """ + Draws a polygon. + + The polygon outline consists of straight lines between the given + coordinates, plus a straight line between the last and the first + coordinate. + + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.polygon` + """ + self.render("polygon", xy, *options) + + def rectangle(self, xy, *options): + """ + Draws a rectangle. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.rectangle` + """ + self.render("rectangle", xy, *options) + + def text(self, xy, text, font): + """ + Draws the string at the given position. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.text` + """ + if self.transform: + xy = ImagePath.Path(xy) + xy.transform(self.transform) + self.draw.text(xy, text, font=font.font, fill=font.color) + + def textsize(self, text, font): + """ + Return the size of the given string, in pixels. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.textsize` + """ + return self.draw.textsize(text, font=font.font) diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageEnhance.py b/.venv/lib/python3.9/site-packages/PIL/ImageEnhance.py new file mode 100644 index 00000000..3b79d5c4 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageEnhance.py @@ -0,0 +1,103 @@ +# +# The Python Imaging Library. +# $Id$ +# +# image enhancement classes +# +# For a background, see "Image Processing By Interpolation and +# Extrapolation", Paul Haeberli and Douglas Voorhies. Available +# at http://www.graficaobscura.com/interp/index.html +# +# History: +# 1996-03-23 fl Created +# 2009-06-16 fl Fixed mean calculation +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# + +from . import Image, ImageFilter, ImageStat + + +class _Enhance: + def enhance(self, factor): + """ + Returns an enhanced image. + + :param factor: A floating point value controlling the enhancement. + Factor 1.0 always returns a copy of the original image, + lower factors mean less color (brightness, contrast, + etc), and higher values more. There are no restrictions + on this value. + :rtype: :py:class:`~PIL.Image.Image` + """ + return Image.blend(self.degenerate, self.image, factor) + + +class Color(_Enhance): + """Adjust image color balance. + + This class can be used to adjust the colour balance of an image, in + a manner similar to the controls on a colour TV set. An enhancement + factor of 0.0 gives a black and white image. A factor of 1.0 gives + the original image. + """ + + def __init__(self, image): + self.image = image + self.intermediate_mode = "L" + if "A" in image.getbands(): + self.intermediate_mode = "LA" + + self.degenerate = image.convert(self.intermediate_mode).convert(image.mode) + + +class Contrast(_Enhance): + """Adjust image contrast. + + This class can be used to control the contrast of an image, similar + to the contrast control on a TV set. An enhancement factor of 0.0 + gives a solid grey image. A factor of 1.0 gives the original image. + """ + + def __init__(self, image): + self.image = image + mean = int(ImageStat.Stat(image.convert("L")).mean[0] + 0.5) + self.degenerate = Image.new("L", image.size, mean).convert(image.mode) + + if "A" in image.getbands(): + self.degenerate.putalpha(image.getchannel("A")) + + +class Brightness(_Enhance): + """Adjust image brightness. + + This class can be used to control the brightness of an image. An + enhancement factor of 0.0 gives a black image. A factor of 1.0 gives the + original image. + """ + + def __init__(self, image): + self.image = image + self.degenerate = Image.new(image.mode, image.size, 0) + + if "A" in image.getbands(): + self.degenerate.putalpha(image.getchannel("A")) + + +class Sharpness(_Enhance): + """Adjust image sharpness. + + This class can be used to adjust the sharpness of an image. An + enhancement factor of 0.0 gives a blurred image, a factor of 1.0 gives the + original image, and a factor of 2.0 gives a sharpened image. + """ + + def __init__(self, image): + self.image = image + self.degenerate = image.filter(ImageFilter.SMOOTH) + + if "A" in image.getbands(): + self.degenerate.putalpha(image.getchannel("A")) diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageFile.py b/.venv/lib/python3.9/site-packages/PIL/ImageFile.py new file mode 100644 index 00000000..43d2bf0c --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageFile.py @@ -0,0 +1,699 @@ +# +# The Python Imaging Library. +# $Id$ +# +# base class for image file handlers +# +# history: +# 1995-09-09 fl Created +# 1996-03-11 fl Fixed load mechanism. +# 1996-04-15 fl Added pcx/xbm decoders. +# 1996-04-30 fl Added encoders. +# 1996-12-14 fl Added load helpers +# 1997-01-11 fl Use encode_to_file where possible +# 1997-08-27 fl Flush output in _save +# 1998-03-05 fl Use memory mapping for some modes +# 1999-02-04 fl Use memory mapping also for "I;16" and "I;16B" +# 1999-05-31 fl Added image parser +# 2000-10-12 fl Set readonly flag on memory-mapped images +# 2002-03-20 fl Use better messages for common decoder errors +# 2003-04-21 fl Fall back on mmap/map_buffer if map is not available +# 2003-10-30 fl Added StubImageFile class +# 2004-02-25 fl Made incremental parser more robust +# +# Copyright (c) 1997-2004 by Secret Labs AB +# Copyright (c) 1995-2004 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import io +import struct +import sys +import warnings + +from . import Image +from ._util import isPath + +MAXBLOCK = 65536 + +SAFEBLOCK = 1024 * 1024 + +LOAD_TRUNCATED_IMAGES = False +"""Whether or not to load truncated image files. User code may change this.""" + +ERRORS = { + -1: "image buffer overrun error", + -2: "decoding error", + -3: "unknown error", + -8: "bad configuration", + -9: "out of memory error", +} +"""Dict of known error codes returned from :meth:`.PyDecoder.decode`.""" + + +# +# -------------------------------------------------------------------- +# Helpers + + +def raise_oserror(error): + try: + message = Image.core.getcodecstatus(error) + except AttributeError: + message = ERRORS.get(error) + if not message: + message = f"decoder error {error}" + raise OSError(message + " when reading image file") + + +def raise_ioerror(error): + warnings.warn( + "raise_ioerror is deprecated and will be removed in Pillow 9 (2022-01-02). " + "Use raise_oserror instead.", + DeprecationWarning, + ) + return raise_oserror(error) + + +def _tilesort(t): + # sort on offset + return t[2] + + +# +# -------------------------------------------------------------------- +# ImageFile base class + + +class ImageFile(Image.Image): + """Base class for image file format handlers.""" + + def __init__(self, fp=None, filename=None): + super().__init__() + + self._min_frame = 0 + + self.custom_mimetype = None + + self.tile = None + """ A list of tile descriptors, or ``None`` """ + + self.readonly = 1 # until we know better + + self.decoderconfig = () + self.decodermaxblock = MAXBLOCK + + if isPath(fp): + # filename + self.fp = open(fp, "rb") + self.filename = fp + self._exclusive_fp = True + else: + # stream + self.fp = fp + self.filename = filename + # can be overridden + self._exclusive_fp = None + + try: + try: + self._open() + except ( + IndexError, # end of data + TypeError, # end of data (ord) + KeyError, # unsupported mode + EOFError, # got header but not the first frame + struct.error, + ) as v: + raise SyntaxError(v) from v + + if not self.mode or self.size[0] <= 0: + raise SyntaxError("not identified by this driver") + except BaseException: + # close the file only if we have opened it this constructor + if self._exclusive_fp: + self.fp.close() + raise + + def get_format_mimetype(self): + if self.custom_mimetype: + return self.custom_mimetype + if self.format is not None: + return Image.MIME.get(self.format.upper()) + + def verify(self): + """Check file integrity""" + + # raise exception if something's wrong. must be called + # directly after open, and closes file when finished. + if self._exclusive_fp: + self.fp.close() + self.fp = None + + def load(self): + """Load image data based on tile list""" + + if self.tile is None: + raise OSError("cannot load this image") + + pixel = Image.Image.load(self) + if not self.tile: + return pixel + + self.map = None + use_mmap = self.filename and len(self.tile) == 1 + # As of pypy 2.1.0, memory mapping was failing here. + use_mmap = use_mmap and not hasattr(sys, "pypy_version_info") + + readonly = 0 + + # look for read/seek overrides + try: + read = self.load_read + # don't use mmap if there are custom read/seek functions + use_mmap = False + except AttributeError: + read = self.fp.read + + try: + seek = self.load_seek + use_mmap = False + except AttributeError: + seek = self.fp.seek + + if use_mmap: + # try memory mapping + decoder_name, extents, offset, args = self.tile[0] + if ( + decoder_name == "raw" + and len(args) >= 3 + and args[0] == self.mode + and args[0] in Image._MAPMODES + ): + try: + # use mmap, if possible + import mmap + + with open(self.filename) as fp: + self.map = mmap.mmap(fp.fileno(), 0, access=mmap.ACCESS_READ) + self.im = Image.core.map_buffer( + self.map, self.size, decoder_name, offset, args + ) + readonly = 1 + # After trashing self.im, + # we might need to reload the palette data. + if self.palette: + self.palette.dirty = 1 + except (AttributeError, OSError, ImportError): + self.map = None + + self.load_prepare() + err_code = -3 # initialize to unknown error + if not self.map: + # sort tiles in file order + self.tile.sort(key=_tilesort) + + try: + # FIXME: This is a hack to handle TIFF's JpegTables tag. + prefix = self.tile_prefix + except AttributeError: + prefix = b"" + + for decoder_name, extents, offset, args in self.tile: + decoder = Image._getdecoder( + self.mode, decoder_name, args, self.decoderconfig + ) + try: + seek(offset) + decoder.setimage(self.im, extents) + if decoder.pulls_fd: + decoder.setfd(self.fp) + status, err_code = decoder.decode(b"") + else: + b = prefix + while True: + try: + s = read(self.decodermaxblock) + except (IndexError, struct.error) as e: + # truncated png/gif + if LOAD_TRUNCATED_IMAGES: + break + else: + raise OSError("image file is truncated") from e + + if not s: # truncated jpeg + if LOAD_TRUNCATED_IMAGES: + break + else: + raise OSError( + "image file is truncated " + f"({len(b)} bytes not processed)" + ) + + b = b + s + n, err_code = decoder.decode(b) + if n < 0: + break + b = b[n:] + finally: + # Need to cleanup here to prevent leaks + decoder.cleanup() + + self.tile = [] + self.readonly = readonly + + self.load_end() + + if self._exclusive_fp and self._close_exclusive_fp_after_loading: + self.fp.close() + self.fp = None + + if not self.map and not LOAD_TRUNCATED_IMAGES and err_code < 0: + # still raised if decoder fails to return anything + raise_oserror(err_code) + + return Image.Image.load(self) + + def load_prepare(self): + # create image memory if necessary + if not self.im or self.im.mode != self.mode or self.im.size != self.size: + self.im = Image.core.new(self.mode, self.size) + # create palette (optional) + if self.mode == "P": + Image.Image.load(self) + + def load_end(self): + # may be overridden + pass + + # may be defined for contained formats + # def load_seek(self, pos): + # pass + + # may be defined for blocked formats (e.g. PNG) + # def load_read(self, bytes): + # pass + + def _seek_check(self, frame): + if ( + frame < self._min_frame + # Only check upper limit on frames if additional seek operations + # are not required to do so + or ( + not (hasattr(self, "_n_frames") and self._n_frames is None) + and frame >= self.n_frames + self._min_frame + ) + ): + raise EOFError("attempt to seek outside sequence") + + return self.tell() != frame + + +class StubImageFile(ImageFile): + """ + Base class for stub image loaders. + + A stub loader is an image loader that can identify files of a + certain format, but relies on external code to load the file. + """ + + def _open(self): + raise NotImplementedError("StubImageFile subclass must implement _open") + + def load(self): + loader = self._load() + if loader is None: + raise OSError(f"cannot find loader for this {self.format} file") + image = loader.load(self) + assert image is not None + # become the other object (!) + self.__class__ = image.__class__ + self.__dict__ = image.__dict__ + + def _load(self): + """(Hook) Find actual image loader.""" + raise NotImplementedError("StubImageFile subclass must implement _load") + + +class Parser: + """ + Incremental image parser. This class implements the standard + feed/close consumer interface. + """ + + incremental = None + image = None + data = None + decoder = None + offset = 0 + finished = 0 + + def reset(self): + """ + (Consumer) Reset the parser. Note that you can only call this + method immediately after you've created a parser; parser + instances cannot be reused. + """ + assert self.data is None, "cannot reuse parsers" + + def feed(self, data): + """ + (Consumer) Feed data to the parser. + + :param data: A string buffer. + :exception OSError: If the parser failed to parse the image file. + """ + # collect data + + if self.finished: + return + + if self.data is None: + self.data = data + else: + self.data = self.data + data + + # parse what we have + if self.decoder: + + if self.offset > 0: + # skip header + skip = min(len(self.data), self.offset) + self.data = self.data[skip:] + self.offset = self.offset - skip + if self.offset > 0 or not self.data: + return + + n, e = self.decoder.decode(self.data) + + if n < 0: + # end of stream + self.data = None + self.finished = 1 + if e < 0: + # decoding error + self.image = None + raise_oserror(e) + else: + # end of image + return + self.data = self.data[n:] + + elif self.image: + + # if we end up here with no decoder, this file cannot + # be incrementally parsed. wait until we've gotten all + # available data + pass + + else: + + # attempt to open this file + try: + with io.BytesIO(self.data) as fp: + im = Image.open(fp) + except OSError: + # traceback.print_exc() + pass # not enough data + else: + flag = hasattr(im, "load_seek") or hasattr(im, "load_read") + if flag or len(im.tile) != 1: + # custom load code, or multiple tiles + self.decode = None + else: + # initialize decoder + im.load_prepare() + d, e, o, a = im.tile[0] + im.tile = [] + self.decoder = Image._getdecoder(im.mode, d, a, im.decoderconfig) + self.decoder.setimage(im.im, e) + + # calculate decoder offset + self.offset = o + if self.offset <= len(self.data): + self.data = self.data[self.offset :] + self.offset = 0 + + self.image = im + + def __enter__(self): + return self + + def __exit__(self, *args): + self.close() + + def close(self): + """ + (Consumer) Close the stream. + + :returns: An image object. + :exception OSError: If the parser failed to parse the image file either + because it cannot be identified or cannot be + decoded. + """ + # finish decoding + if self.decoder: + # get rid of what's left in the buffers + self.feed(b"") + self.data = self.decoder = None + if not self.finished: + raise OSError("image was incomplete") + if not self.image: + raise OSError("cannot parse this image") + if self.data: + # incremental parsing not possible; reopen the file + # not that we have all data + with io.BytesIO(self.data) as fp: + try: + self.image = Image.open(fp) + finally: + self.image.load() + return self.image + + +# -------------------------------------------------------------------- + + +def _save(im, fp, tile, bufsize=0): + """Helper to save image based on tile list + + :param im: Image object. + :param fp: File object. + :param tile: Tile list. + :param bufsize: Optional buffer size + """ + + im.load() + if not hasattr(im, "encoderconfig"): + im.encoderconfig = () + tile.sort(key=_tilesort) + # FIXME: make MAXBLOCK a configuration parameter + # It would be great if we could have the encoder specify what it needs + # But, it would need at least the image size in most cases. RawEncode is + # a tricky case. + bufsize = max(MAXBLOCK, bufsize, im.size[0] * 4) # see RawEncode.c + try: + stdout = fp == sys.stdout or fp == sys.stdout.buffer + except (OSError, AttributeError): + stdout = False + if stdout: + fp.flush() + return + try: + fh = fp.fileno() + fp.flush() + except (AttributeError, io.UnsupportedOperation) as exc: + # compress to Python file-compatible object + for e, b, o, a in tile: + e = Image._getencoder(im.mode, e, a, im.encoderconfig) + if o > 0: + fp.seek(o) + e.setimage(im.im, b) + if e.pushes_fd: + e.setfd(fp) + l, s = e.encode_to_pyfd() + else: + while True: + l, s, d = e.encode(bufsize) + fp.write(d) + if s: + break + if s < 0: + raise OSError(f"encoder error {s} when writing image file") from exc + e.cleanup() + else: + # slight speedup: compress to real file object + for e, b, o, a in tile: + e = Image._getencoder(im.mode, e, a, im.encoderconfig) + if o > 0: + fp.seek(o) + e.setimage(im.im, b) + if e.pushes_fd: + e.setfd(fp) + l, s = e.encode_to_pyfd() + else: + s = e.encode_to_file(fh, bufsize) + if s < 0: + raise OSError(f"encoder error {s} when writing image file") + e.cleanup() + if hasattr(fp, "flush"): + fp.flush() + + +def _safe_read(fp, size): + """ + Reads large blocks in a safe way. Unlike fp.read(n), this function + doesn't trust the user. If the requested size is larger than + SAFEBLOCK, the file is read block by block. + + :param fp: File handle. Must implement a read method. + :param size: Number of bytes to read. + :returns: A string containing size bytes of data. + + Raises an OSError if the file is truncated and the read cannot be completed + + """ + if size <= 0: + return b"" + if size <= SAFEBLOCK: + data = fp.read(size) + if len(data) < size: + raise OSError("Truncated File Read") + return data + data = [] + while size > 0: + block = fp.read(min(size, SAFEBLOCK)) + if not block: + break + data.append(block) + size -= len(block) + if sum(len(d) for d in data) < size: + raise OSError("Truncated File Read") + return b"".join(data) + + +class PyCodecState: + def __init__(self): + self.xsize = 0 + self.ysize = 0 + self.xoff = 0 + self.yoff = 0 + + def extents(self): + return (self.xoff, self.yoff, self.xoff + self.xsize, self.yoff + self.ysize) + + +class PyDecoder: + """ + Python implementation of a format decoder. Override this class and + add the decoding logic in the :meth:`decode` method. + + See :ref:`Writing Your Own File Decoder in Python` + """ + + _pulls_fd = False + + def __init__(self, mode, *args): + self.im = None + self.state = PyCodecState() + self.fd = None + self.mode = mode + self.init(args) + + def init(self, args): + """ + Override to perform decoder specific initialization + + :param args: Array of args items from the tile entry + :returns: None + """ + self.args = args + + @property + def pulls_fd(self): + return self._pulls_fd + + def decode(self, buffer): + """ + Override to perform the decoding process. + + :param buffer: A bytes object with the data to be decoded. + :returns: A tuple of ``(bytes consumed, errcode)``. + If finished with decoding return <0 for the bytes consumed. + Err codes are from :data:`.ImageFile.ERRORS`. + """ + raise NotImplementedError() + + def cleanup(self): + """ + Override to perform decoder specific cleanup + + :returns: None + """ + pass + + def setfd(self, fd): + """ + Called from ImageFile to set the python file-like object + + :param fd: A python file-like object + :returns: None + """ + self.fd = fd + + def setimage(self, im, extents=None): + """ + Called from ImageFile to set the core output image for the decoder + + :param im: A core image object + :param extents: a 4 tuple of (x0, y0, x1, y1) defining the rectangle + for this tile + :returns: None + """ + + # following c code + self.im = im + + if extents: + (x0, y0, x1, y1) = extents + else: + (x0, y0, x1, y1) = (0, 0, 0, 0) + + if x0 == 0 and x1 == 0: + self.state.xsize, self.state.ysize = self.im.size + else: + self.state.xoff = x0 + self.state.yoff = y0 + self.state.xsize = x1 - x0 + self.state.ysize = y1 - y0 + + if self.state.xsize <= 0 or self.state.ysize <= 0: + raise ValueError("Size cannot be negative") + + if ( + self.state.xsize + self.state.xoff > self.im.size[0] + or self.state.ysize + self.state.yoff > self.im.size[1] + ): + raise ValueError("Tile cannot extend outside image") + + def set_as_raw(self, data, rawmode=None): + """ + Convenience method to set the internal image from a stream of raw data + + :param data: Bytes to be set + :param rawmode: The rawmode to be used for the decoder. + If not specified, it will default to the mode of the image + :returns: None + """ + + if not rawmode: + rawmode = self.mode + d = Image._getdecoder(self.mode, "raw", (rawmode)) + d.setimage(self.im, self.state.extents()) + s = d.decode(data) + + if s[0] >= 0: + raise ValueError("not enough image data") + if s[1] != 0: + raise ValueError("cannot decode image data") diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageFilter.py b/.venv/lib/python3.9/site-packages/PIL/ImageFilter.py new file mode 100644 index 00000000..d2ece375 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageFilter.py @@ -0,0 +1,538 @@ +# +# The Python Imaging Library. +# $Id$ +# +# standard filters +# +# History: +# 1995-11-27 fl Created +# 2002-06-08 fl Added rank and mode filters +# 2003-09-15 fl Fixed rank calculation in rank filter; added expand call +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1995-2002 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# +import functools + + +class Filter: + pass + + +class MultibandFilter(Filter): + pass + + +class BuiltinFilter(MultibandFilter): + def filter(self, image): + if image.mode == "P": + raise ValueError("cannot filter palette images") + return image.filter(*self.filterargs) + + +class Kernel(BuiltinFilter): + """ + Create a convolution kernel. The current version only + supports 3x3 and 5x5 integer and floating point kernels. + + In the current version, kernels can only be applied to + "L" and "RGB" images. + + :param size: Kernel size, given as (width, height). In the current + version, this must be (3,3) or (5,5). + :param kernel: A sequence containing kernel weights. + :param scale: Scale factor. If given, the result for each pixel is + divided by this value. The default is the sum of the + kernel weights. + :param offset: Offset. If given, this value is added to the result, + after it has been divided by the scale factor. + """ + + name = "Kernel" + + def __init__(self, size, kernel, scale=None, offset=0): + if scale is None: + # default scale is sum of kernel + scale = functools.reduce(lambda a, b: a + b, kernel) + if size[0] * size[1] != len(kernel): + raise ValueError("not enough coefficients in kernel") + self.filterargs = size, scale, offset, kernel + + +class RankFilter(Filter): + """ + Create a rank filter. The rank filter sorts all pixels in + a window of the given size, and returns the ``rank``'th value. + + :param size: The kernel size, in pixels. + :param rank: What pixel value to pick. Use 0 for a min filter, + ``size * size / 2`` for a median filter, ``size * size - 1`` + for a max filter, etc. + """ + + name = "Rank" + + def __init__(self, size, rank): + self.size = size + self.rank = rank + + def filter(self, image): + if image.mode == "P": + raise ValueError("cannot filter palette images") + image = image.expand(self.size // 2, self.size // 2) + return image.rankfilter(self.size, self.rank) + + +class MedianFilter(RankFilter): + """ + Create a median filter. Picks the median pixel value in a window with the + given size. + + :param size: The kernel size, in pixels. + """ + + name = "Median" + + def __init__(self, size=3): + self.size = size + self.rank = size * size // 2 + + +class MinFilter(RankFilter): + """ + Create a min filter. Picks the lowest pixel value in a window with the + given size. + + :param size: The kernel size, in pixels. + """ + + name = "Min" + + def __init__(self, size=3): + self.size = size + self.rank = 0 + + +class MaxFilter(RankFilter): + """ + Create a max filter. Picks the largest pixel value in a window with the + given size. + + :param size: The kernel size, in pixels. + """ + + name = "Max" + + def __init__(self, size=3): + self.size = size + self.rank = size * size - 1 + + +class ModeFilter(Filter): + """ + Create a mode filter. Picks the most frequent pixel value in a box with the + given size. Pixel values that occur only once or twice are ignored; if no + pixel value occurs more than twice, the original pixel value is preserved. + + :param size: The kernel size, in pixels. + """ + + name = "Mode" + + def __init__(self, size=3): + self.size = size + + def filter(self, image): + return image.modefilter(self.size) + + +class GaussianBlur(MultibandFilter): + """Blurs the image with a sequence of extended box filters, which + approximates a Gaussian kernel. For details on accuracy see + + + :param radius: Standard deviation of the Gaussian kernel. + """ + + name = "GaussianBlur" + + def __init__(self, radius=2): + self.radius = radius + + def filter(self, image): + return image.gaussian_blur(self.radius) + + +class BoxBlur(MultibandFilter): + """Blurs the image by setting each pixel to the average value of the pixels + in a square box extending radius pixels in each direction. + Supports float radius of arbitrary size. Uses an optimized implementation + which runs in linear time relative to the size of the image + for any radius value. + + :param radius: Size of the box in one direction. Radius 0 does not blur, + returns an identical image. Radius 1 takes 1 pixel + in each direction, i.e. 9 pixels in total. + """ + + name = "BoxBlur" + + def __init__(self, radius): + self.radius = radius + + def filter(self, image): + return image.box_blur(self.radius) + + +class UnsharpMask(MultibandFilter): + """Unsharp mask filter. + + See Wikipedia's entry on `digital unsharp masking`_ for an explanation of + the parameters. + + :param radius: Blur Radius + :param percent: Unsharp strength, in percent + :param threshold: Threshold controls the minimum brightness change that + will be sharpened + + .. _digital unsharp masking: https://en.wikipedia.org/wiki/Unsharp_masking#Digital_unsharp_masking + + """ # noqa: E501 + + name = "UnsharpMask" + + def __init__(self, radius=2, percent=150, threshold=3): + self.radius = radius + self.percent = percent + self.threshold = threshold + + def filter(self, image): + return image.unsharp_mask(self.radius, self.percent, self.threshold) + + +class BLUR(BuiltinFilter): + name = "Blur" + # fmt: off + filterargs = (5, 5), 16, 0, ( + 1, 1, 1, 1, 1, + 1, 0, 0, 0, 1, + 1, 0, 0, 0, 1, + 1, 0, 0, 0, 1, + 1, 1, 1, 1, 1, + ) + # fmt: on + + +class CONTOUR(BuiltinFilter): + name = "Contour" + # fmt: off + filterargs = (3, 3), 1, 255, ( + -1, -1, -1, + -1, 8, -1, + -1, -1, -1, + ) + # fmt: on + + +class DETAIL(BuiltinFilter): + name = "Detail" + # fmt: off + filterargs = (3, 3), 6, 0, ( + 0, -1, 0, + -1, 10, -1, + 0, -1, 0, + ) + # fmt: on + + +class EDGE_ENHANCE(BuiltinFilter): + name = "Edge-enhance" + # fmt: off + filterargs = (3, 3), 2, 0, ( + -1, -1, -1, + -1, 10, -1, + -1, -1, -1, + ) + # fmt: on + + +class EDGE_ENHANCE_MORE(BuiltinFilter): + name = "Edge-enhance More" + # fmt: off + filterargs = (3, 3), 1, 0, ( + -1, -1, -1, + -1, 9, -1, + -1, -1, -1, + ) + # fmt: on + + +class EMBOSS(BuiltinFilter): + name = "Emboss" + # fmt: off + filterargs = (3, 3), 1, 128, ( + -1, 0, 0, + 0, 1, 0, + 0, 0, 0, + ) + # fmt: on + + +class FIND_EDGES(BuiltinFilter): + name = "Find Edges" + # fmt: off + filterargs = (3, 3), 1, 0, ( + -1, -1, -1, + -1, 8, -1, + -1, -1, -1, + ) + # fmt: on + + +class SHARPEN(BuiltinFilter): + name = "Sharpen" + # fmt: off + filterargs = (3, 3), 16, 0, ( + -2, -2, -2, + -2, 32, -2, + -2, -2, -2, + ) + # fmt: on + + +class SMOOTH(BuiltinFilter): + name = "Smooth" + # fmt: off + filterargs = (3, 3), 13, 0, ( + 1, 1, 1, + 1, 5, 1, + 1, 1, 1, + ) + # fmt: on + + +class SMOOTH_MORE(BuiltinFilter): + name = "Smooth More" + # fmt: off + filterargs = (5, 5), 100, 0, ( + 1, 1, 1, 1, 1, + 1, 5, 5, 5, 1, + 1, 5, 44, 5, 1, + 1, 5, 5, 5, 1, + 1, 1, 1, 1, 1, + ) + # fmt: on + + +class Color3DLUT(MultibandFilter): + """Three-dimensional color lookup table. + + Transforms 3-channel pixels using the values of the channels as coordinates + in the 3D lookup table and interpolating the nearest elements. + + This method allows you to apply almost any color transformation + in constant time by using pre-calculated decimated tables. + + .. versionadded:: 5.2.0 + + :param size: Size of the table. One int or tuple of (int, int, int). + Minimal size in any dimension is 2, maximum is 65. + :param table: Flat lookup table. A list of ``channels * size**3`` + float elements or a list of ``size**3`` channels-sized + tuples with floats. Channels are changed first, + then first dimension, then second, then third. + Value 0.0 corresponds lowest value of output, 1.0 highest. + :param channels: Number of channels in the table. Could be 3 or 4. + Default is 3. + :param target_mode: A mode for the result image. Should have not less + than ``channels`` channels. Default is ``None``, + which means that mode wouldn't be changed. + """ + + name = "Color 3D LUT" + + def __init__(self, size, table, channels=3, target_mode=None, **kwargs): + if channels not in (3, 4): + raise ValueError("Only 3 or 4 output channels are supported") + self.size = size = self._check_size(size) + self.channels = channels + self.mode = target_mode + + # Hidden flag `_copy_table=False` could be used to avoid extra copying + # of the table if the table is specially made for the constructor. + copy_table = kwargs.get("_copy_table", True) + items = size[0] * size[1] * size[2] + wrong_size = False + + numpy = None + if hasattr(table, "shape"): + try: + import numpy + except ImportError: # pragma: no cover + pass + + if numpy and isinstance(table, numpy.ndarray): + if copy_table: + table = table.copy() + + if table.shape in [ + (items * channels,), + (items, channels), + (size[2], size[1], size[0], channels), + ]: + table = table.reshape(items * channels) + else: + wrong_size = True + + else: + if copy_table: + table = list(table) + + # Convert to a flat list + if table and isinstance(table[0], (list, tuple)): + table, raw_table = [], table + for pixel in raw_table: + if len(pixel) != channels: + raise ValueError( + "The elements of the table should " + "have a length of {}.".format(channels) + ) + table.extend(pixel) + + if wrong_size or len(table) != items * channels: + raise ValueError( + "The table should have either channels * size**3 float items " + "or size**3 items of channels-sized tuples with floats. " + f"Table should be: {channels}x{size[0]}x{size[1]}x{size[2]}. " + f"Actual length: {len(table)}" + ) + self.table = table + + @staticmethod + def _check_size(size): + try: + _, _, _ = size + except ValueError as e: + raise ValueError( + "Size should be either an integer or a tuple of three integers." + ) from e + except TypeError: + size = (size, size, size) + size = [int(x) for x in size] + for size1D in size: + if not 2 <= size1D <= 65: + raise ValueError("Size should be in [2, 65] range.") + return size + + @classmethod + def generate(cls, size, callback, channels=3, target_mode=None): + """Generates new LUT using provided callback. + + :param size: Size of the table. Passed to the constructor. + :param callback: Function with three parameters which correspond + three color channels. Will be called ``size**3`` + times with values from 0.0 to 1.0 and should return + a tuple with ``channels`` elements. + :param channels: The number of channels which should return callback. + :param target_mode: Passed to the constructor of the resulting + lookup table. + """ + size1D, size2D, size3D = cls._check_size(size) + if channels not in (3, 4): + raise ValueError("Only 3 or 4 output channels are supported") + + table = [0] * (size1D * size2D * size3D * channels) + idx_out = 0 + for b in range(size3D): + for g in range(size2D): + for r in range(size1D): + table[idx_out : idx_out + channels] = callback( + r / (size1D - 1), g / (size2D - 1), b / (size3D - 1) + ) + idx_out += channels + + return cls( + (size1D, size2D, size3D), + table, + channels=channels, + target_mode=target_mode, + _copy_table=False, + ) + + def transform(self, callback, with_normals=False, channels=None, target_mode=None): + """Transforms the table values using provided callback and returns + a new LUT with altered values. + + :param callback: A function which takes old lookup table values + and returns a new set of values. The number + of arguments which function should take is + ``self.channels`` or ``3 + self.channels`` + if ``with_normals`` flag is set. + Should return a tuple of ``self.channels`` or + ``channels`` elements if it is set. + :param with_normals: If true, ``callback`` will be called with + coordinates in the color cube as the first + three arguments. Otherwise, ``callback`` + will be called only with actual color values. + :param channels: The number of channels in the resulting lookup table. + :param target_mode: Passed to the constructor of the resulting + lookup table. + """ + if channels not in (None, 3, 4): + raise ValueError("Only 3 or 4 output channels are supported") + ch_in = self.channels + ch_out = channels or ch_in + size1D, size2D, size3D = self.size + + table = [0] * (size1D * size2D * size3D * ch_out) + idx_in = 0 + idx_out = 0 + for b in range(size3D): + for g in range(size2D): + for r in range(size1D): + values = self.table[idx_in : idx_in + ch_in] + if with_normals: + values = callback( + r / (size1D - 1), + g / (size2D - 1), + b / (size3D - 1), + *values, + ) + else: + values = callback(*values) + table[idx_out : idx_out + ch_out] = values + idx_in += ch_in + idx_out += ch_out + + return type(self)( + self.size, + table, + channels=ch_out, + target_mode=target_mode or self.mode, + _copy_table=False, + ) + + def __repr__(self): + r = [ + f"{self.__class__.__name__} from {self.table.__class__.__name__}", + "size={:d}x{:d}x{:d}".format(*self.size), + f"channels={self.channels:d}", + ] + if self.mode: + r.append(f"target_mode={self.mode}") + return "<{}>".format(" ".join(r)) + + def filter(self, image): + from . import Image + + return image.color_lut_3d( + self.mode or image.mode, + Image.LINEAR, + self.channels, + self.size[0], + self.size[1], + self.size[2], + self.table, + ) diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageFont.py b/.venv/lib/python3.9/site-packages/PIL/ImageFont.py new file mode 100644 index 00000000..e99ca21b --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageFont.py @@ -0,0 +1,1060 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PIL raster font management +# +# History: +# 1996-08-07 fl created (experimental) +# 1997-08-25 fl minor adjustments to handle fonts from pilfont 0.3 +# 1999-02-06 fl rewrote most font management stuff in C +# 1999-03-17 fl take pth files into account in load_path (from Richard Jones) +# 2001-02-17 fl added freetype support +# 2001-05-09 fl added TransposedFont wrapper class +# 2002-03-04 fl make sure we have a "L" or "1" font +# 2002-12-04 fl skip non-directory entries in the system path +# 2003-04-29 fl add embedded default font +# 2003-09-27 fl added support for truetype charmap encodings +# +# Todo: +# Adapt to PILFONT2 format (16-bit fonts, compressed, single file) +# +# Copyright (c) 1997-2003 by Secret Labs AB +# Copyright (c) 1996-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import base64 +import os +import sys +import warnings +from io import BytesIO + +from . import Image, features +from ._util import isDirectory, isPath + +LAYOUT_BASIC = 0 +LAYOUT_RAQM = 1 + + +class _imagingft_not_installed: + # module placeholder + def __getattr__(self, id): + raise ImportError("The _imagingft C module is not installed") + + +try: + from . import _imagingft as core +except ImportError: + core = _imagingft_not_installed() + + +# FIXME: add support for pilfont2 format (see FontFile.py) + +# -------------------------------------------------------------------- +# Font metrics format: +# "PILfont" LF +# fontdescriptor LF +# (optional) key=value... LF +# "DATA" LF +# binary data: 256*10*2 bytes (dx, dy, dstbox, srcbox) +# +# To place a character, cut out srcbox and paste at dstbox, +# relative to the character position. Then move the character +# position according to dx, dy. +# -------------------------------------------------------------------- + + +class ImageFont: + "PIL font wrapper" + + def _load_pilfont(self, filename): + + with open(filename, "rb") as fp: + image = None + for ext in (".png", ".gif", ".pbm"): + if image: + image.close() + try: + fullname = os.path.splitext(filename)[0] + ext + image = Image.open(fullname) + except Exception: + pass + else: + if image and image.mode in ("1", "L"): + break + else: + if image: + image.close() + raise OSError("cannot find glyph data file") + + self.file = fullname + + self._load_pilfont_data(fp, image) + image.close() + + def _load_pilfont_data(self, file, image): + + # read PILfont header + if file.readline() != b"PILfont\n": + raise SyntaxError("Not a PILfont file") + file.readline().split(b";") + self.info = [] # FIXME: should be a dictionary + while True: + s = file.readline() + if not s or s == b"DATA\n": + break + self.info.append(s) + + # read PILfont metrics + data = file.read(256 * 20) + + # check image + if image.mode not in ("1", "L"): + raise TypeError("invalid font image mode") + + image.load() + + self.font = Image.core.font(image.im, data) + + def getsize(self, text, *args, **kwargs): + """ + Returns width and height (in pixels) of given text. + + :param text: Text to measure. + + :return: (width, height) + """ + return self.font.getsize(text) + + def getmask(self, text, mode="", *args, **kwargs): + """ + Create a bitmap for the text. + + If the font uses antialiasing, the bitmap should have mode ``L`` and use a + maximum value of 255. Otherwise, it should have mode ``1``. + + :param text: Text to render. + :param mode: Used by some graphics drivers to indicate what mode the + driver prefers; if empty, the renderer may return either + mode. Note that the mode is always a string, to simplify + C-level implementations. + + .. versionadded:: 1.1.5 + + :return: An internal PIL storage memory instance as defined by the + :py:mod:`PIL.Image.core` interface module. + """ + return self.font.getmask(text, mode) + + +## +# Wrapper for FreeType fonts. Application code should use the +# truetype factory function to create font objects. + + +class FreeTypeFont: + "FreeType font wrapper (requires _imagingft service)" + + def __init__(self, font=None, size=10, index=0, encoding="", layout_engine=None): + # FIXME: use service provider instead + + self.path = font + self.size = size + self.index = index + self.encoding = encoding + + try: + from packaging.version import parse as parse_version + except ImportError: + pass + else: + freetype_version = features.version_module("freetype2") + if freetype_version is not None and parse_version( + freetype_version + ) < parse_version("2.8"): + warnings.warn( + "Support for FreeType 2.7 is deprecated and will be removed" + " in Pillow 9 (2022-01-02). Please upgrade to FreeType 2.8 " + "or newer, preferably FreeType 2.10.4 which fixes " + "CVE-2020-15999.", + DeprecationWarning, + ) + + if layout_engine not in (LAYOUT_BASIC, LAYOUT_RAQM): + layout_engine = LAYOUT_BASIC + if core.HAVE_RAQM: + layout_engine = LAYOUT_RAQM + elif layout_engine == LAYOUT_RAQM and not core.HAVE_RAQM: + layout_engine = LAYOUT_BASIC + + self.layout_engine = layout_engine + + def load_from_bytes(f): + self.font_bytes = f.read() + self.font = core.getfont( + "", size, index, encoding, self.font_bytes, layout_engine + ) + + if isPath(font): + if sys.platform == "win32": + font_bytes_path = font if isinstance(font, bytes) else font.encode() + try: + font_bytes_path.decode("ascii") + except UnicodeDecodeError: + # FreeType cannot load fonts with non-ASCII characters on Windows + # So load it into memory first + with open(font, "rb") as f: + load_from_bytes(f) + return + self.font = core.getfont( + font, size, index, encoding, layout_engine=layout_engine + ) + else: + load_from_bytes(font) + + def _multiline_split(self, text): + split_character = "\n" if isinstance(text, str) else b"\n" + return text.split(split_character) + + def getname(self): + """ + :return: A tuple of the font family (e.g. Helvetica) and the font style + (e.g. Bold) + """ + return self.font.family, self.font.style + + def getmetrics(self): + """ + :return: A tuple of the font ascent (the distance from the baseline to + the highest outline point) and descent (the distance from the + baseline to the lowest outline point, a negative value) + """ + return self.font.ascent, self.font.descent + + def getlength(self, text, mode="", direction=None, features=None, language=None): + """ + Returns length (in pixels with 1/64 precision) of given text when rendered + in font with provided direction, features, and language. + + This is the amount by which following text should be offset. + Text bounding box may extend past the length in some fonts, + e.g. when using italics or accents. + + The result is returned as a float; it is a whole number if using basic layout. + + Note that the sum of two lengths may not equal the length of a concatenated + string due to kerning. If you need to adjust for kerning, include the following + character and subtract its length. + + For example, instead of + + .. code-block:: python + + hello = font.getlength("Hello") + world = font.getlength("World") + hello_world = hello + world # not adjusted for kerning + assert hello_world == font.getlength("HelloWorld") # may fail + + use + + .. code-block:: python + + hello = font.getlength("HelloW") - font.getlength("W") # adjusted for kerning + world = font.getlength("World") + hello_world = hello + world # adjusted for kerning + assert hello_world == font.getlength("HelloWorld") # True + + or disable kerning with (requires libraqm) + + .. code-block:: python + + hello = draw.textlength("Hello", font, features=["-kern"]) + world = draw.textlength("World", font, features=["-kern"]) + hello_world = hello + world # kerning is disabled, no need to adjust + assert hello_world == draw.textlength("HelloWorld", font, features=["-kern"]) + + .. versionadded:: 8.0.0 + + :param text: Text to measure. + :param mode: Used by some graphics drivers to indicate what mode the + driver prefers; if empty, the renderer may return either + mode. Note that the mode is always a string, to simplify + C-level implementations. + + :param direction: Direction of the text. It can be 'rtl' (right to + left), 'ltr' (left to right) or 'ttb' (top to bottom). + Requires libraqm. + + :param features: A list of OpenType font features to be used during text + layout. This is usually used to turn on optional + font features that are not enabled by default, + for example 'dlig' or 'ss01', but can be also + used to turn off default font features for + example '-liga' to disable ligatures or '-kern' + to disable kerning. To get all supported + features, see + https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist + Requires libraqm. + + :param language: Language of the text. Different languages may use + different glyph shapes or ligatures. This parameter tells + the font which language the text is in, and to apply the + correct substitutions as appropriate, if available. + It should be a `BCP 47 language code + `_ + Requires libraqm. + + :return: Width for horizontal, height for vertical text. + """ + return self.font.getlength(text, mode, direction, features, language) / 64 + + def getbbox( + self, + text, + mode="", + direction=None, + features=None, + language=None, + stroke_width=0, + anchor=None, + ): + """ + Returns bounding box (in pixels) of given text relative to given anchor + when rendered in font with provided direction, features, and language. + + Use :py:meth:`getlength()` to get the offset of following text with + 1/64 pixel precision. The bounding box includes extra margins for + some fonts, e.g. italics or accents. + + .. versionadded:: 8.0.0 + + :param text: Text to render. + :param mode: Used by some graphics drivers to indicate what mode the + driver prefers; if empty, the renderer may return either + mode. Note that the mode is always a string, to simplify + C-level implementations. + + :param direction: Direction of the text. It can be 'rtl' (right to + left), 'ltr' (left to right) or 'ttb' (top to bottom). + Requires libraqm. + + :param features: A list of OpenType font features to be used during text + layout. This is usually used to turn on optional + font features that are not enabled by default, + for example 'dlig' or 'ss01', but can be also + used to turn off default font features for + example '-liga' to disable ligatures or '-kern' + to disable kerning. To get all supported + features, see + https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist + Requires libraqm. + + :param language: Language of the text. Different languages may use + different glyph shapes or ligatures. This parameter tells + the font which language the text is in, and to apply the + correct substitutions as appropriate, if available. + It should be a `BCP 47 language code + `_ + Requires libraqm. + + :param stroke_width: The width of the text stroke. + + :param anchor: The text anchor alignment. Determines the relative location of + the anchor to the text. The default alignment is top left. + See :ref:`text-anchors` for valid values. + + :return: ``(left, top, right, bottom)`` bounding box + """ + size, offset = self.font.getsize( + text, mode, direction, features, language, anchor + ) + left, top = offset[0] - stroke_width, offset[1] - stroke_width + width, height = size[0] + 2 * stroke_width, size[1] + 2 * stroke_width + return left, top, left + width, top + height + + def getsize( + self, text, direction=None, features=None, language=None, stroke_width=0 + ): + """ + Returns width and height (in pixels) of given text if rendered in font with + provided direction, features, and language. + + Use :py:meth:`getlength()` to measure the offset of following text with + 1/64 pixel precision. + Use :py:meth:`getbbox()` to get the exact bounding box based on an anchor. + + .. note:: For historical reasons this function measures text height from + the ascender line instead of the top, see :ref:`text-anchors`. + If you wish to measure text height from the top, it is recommended + to use the bottom value of :meth:`getbbox` with ``anchor='lt'`` instead. + + :param text: Text to measure. + + :param direction: Direction of the text. It can be 'rtl' (right to + left), 'ltr' (left to right) or 'ttb' (top to bottom). + Requires libraqm. + + .. versionadded:: 4.2.0 + + :param features: A list of OpenType font features to be used during text + layout. This is usually used to turn on optional + font features that are not enabled by default, + for example 'dlig' or 'ss01', but can be also + used to turn off default font features for + example '-liga' to disable ligatures or '-kern' + to disable kerning. To get all supported + features, see + https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist + Requires libraqm. + + .. versionadded:: 4.2.0 + + :param language: Language of the text. Different languages may use + different glyph shapes or ligatures. This parameter tells + the font which language the text is in, and to apply the + correct substitutions as appropriate, if available. + It should be a `BCP 47 language code + `_ + Requires libraqm. + + .. versionadded:: 6.0.0 + + :param stroke_width: The width of the text stroke. + + .. versionadded:: 6.2.0 + + :return: (width, height) + """ + # vertical offset is added for historical reasons + # see https://github.com/python-pillow/Pillow/pull/4910#discussion_r486682929 + size, offset = self.font.getsize(text, "L", direction, features, language) + return ( + size[0] + stroke_width * 2, + size[1] + stroke_width * 2 + offset[1], + ) + + def getsize_multiline( + self, + text, + direction=None, + spacing=4, + features=None, + language=None, + stroke_width=0, + ): + """ + Returns width and height (in pixels) of given text if rendered in font + with provided direction, features, and language, while respecting + newline characters. + + :param text: Text to measure. + + :param direction: Direction of the text. It can be 'rtl' (right to + left), 'ltr' (left to right) or 'ttb' (top to bottom). + Requires libraqm. + + :param spacing: The vertical gap between lines, defaulting to 4 pixels. + + :param features: A list of OpenType font features to be used during text + layout. This is usually used to turn on optional + font features that are not enabled by default, + for example 'dlig' or 'ss01', but can be also + used to turn off default font features for + example '-liga' to disable ligatures or '-kern' + to disable kerning. To get all supported + features, see + https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist + Requires libraqm. + + :param language: Language of the text. Different languages may use + different glyph shapes or ligatures. This parameter tells + the font which language the text is in, and to apply the + correct substitutions as appropriate, if available. + It should be a `BCP 47 language code + `_ + Requires libraqm. + + .. versionadded:: 6.0.0 + + :param stroke_width: The width of the text stroke. + + .. versionadded:: 6.2.0 + + :return: (width, height) + """ + max_width = 0 + lines = self._multiline_split(text) + line_spacing = self.getsize("A", stroke_width=stroke_width)[1] + spacing + for line in lines: + line_width, line_height = self.getsize( + line, direction, features, language, stroke_width + ) + max_width = max(max_width, line_width) + + return max_width, len(lines) * line_spacing - spacing + + def getoffset(self, text): + """ + Returns the offset of given text. This is the gap between the + starting coordinate and the first marking. Note that this gap is + included in the result of :py:func:`~PIL.ImageFont.FreeTypeFont.getsize`. + + :param text: Text to measure. + + :return: A tuple of the x and y offset + """ + return self.font.getsize(text)[1] + + def getmask( + self, + text, + mode="", + direction=None, + features=None, + language=None, + stroke_width=0, + anchor=None, + ink=0, + ): + """ + Create a bitmap for the text. + + If the font uses antialiasing, the bitmap should have mode ``L`` and use a + maximum value of 255. If the font has embedded color data, the bitmap + should have mode ``RGBA``. Otherwise, it should have mode ``1``. + + :param text: Text to render. + :param mode: Used by some graphics drivers to indicate what mode the + driver prefers; if empty, the renderer may return either + mode. Note that the mode is always a string, to simplify + C-level implementations. + + .. versionadded:: 1.1.5 + + :param direction: Direction of the text. It can be 'rtl' (right to + left), 'ltr' (left to right) or 'ttb' (top to bottom). + Requires libraqm. + + .. versionadded:: 4.2.0 + + :param features: A list of OpenType font features to be used during text + layout. This is usually used to turn on optional + font features that are not enabled by default, + for example 'dlig' or 'ss01', but can be also + used to turn off default font features for + example '-liga' to disable ligatures or '-kern' + to disable kerning. To get all supported + features, see + https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist + Requires libraqm. + + .. versionadded:: 4.2.0 + + :param language: Language of the text. Different languages may use + different glyph shapes or ligatures. This parameter tells + the font which language the text is in, and to apply the + correct substitutions as appropriate, if available. + It should be a `BCP 47 language code + `_ + Requires libraqm. + + .. versionadded:: 6.0.0 + + :param stroke_width: The width of the text stroke. + + .. versionadded:: 6.2.0 + + :param anchor: The text anchor alignment. Determines the relative location of + the anchor to the text. The default alignment is top left. + See :ref:`text-anchors` for valid values. + + .. versionadded:: 8.0.0 + + :param ink: Foreground ink for rendering in RGBA mode. + + .. versionadded:: 8.0.0 + + :return: An internal PIL storage memory instance as defined by the + :py:mod:`PIL.Image.core` interface module. + """ + return self.getmask2( + text, + mode, + direction=direction, + features=features, + language=language, + stroke_width=stroke_width, + anchor=anchor, + ink=ink, + )[0] + + def getmask2( + self, + text, + mode="", + fill=Image.core.fill, + direction=None, + features=None, + language=None, + stroke_width=0, + anchor=None, + ink=0, + *args, + **kwargs, + ): + """ + Create a bitmap for the text. + + If the font uses antialiasing, the bitmap should have mode ``L`` and use a + maximum value of 255. If the font has embedded color data, the bitmap + should have mode ``RGBA``. Otherwise, it should have mode ``1``. + + :param text: Text to render. + :param mode: Used by some graphics drivers to indicate what mode the + driver prefers; if empty, the renderer may return either + mode. Note that the mode is always a string, to simplify + C-level implementations. + + .. versionadded:: 1.1.5 + + :param direction: Direction of the text. It can be 'rtl' (right to + left), 'ltr' (left to right) or 'ttb' (top to bottom). + Requires libraqm. + + .. versionadded:: 4.2.0 + + :param features: A list of OpenType font features to be used during text + layout. This is usually used to turn on optional + font features that are not enabled by default, + for example 'dlig' or 'ss01', but can be also + used to turn off default font features for + example '-liga' to disable ligatures or '-kern' + to disable kerning. To get all supported + features, see + https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist + Requires libraqm. + + .. versionadded:: 4.2.0 + + :param language: Language of the text. Different languages may use + different glyph shapes or ligatures. This parameter tells + the font which language the text is in, and to apply the + correct substitutions as appropriate, if available. + It should be a `BCP 47 language code + `_ + Requires libraqm. + + .. versionadded:: 6.0.0 + + :param stroke_width: The width of the text stroke. + + .. versionadded:: 6.2.0 + + :param anchor: The text anchor alignment. Determines the relative location of + the anchor to the text. The default alignment is top left. + See :ref:`text-anchors` for valid values. + + .. versionadded:: 8.0.0 + + :param ink: Foreground ink for rendering in RGBA mode. + + .. versionadded:: 8.0.0 + + :return: A tuple of an internal PIL storage memory instance as defined by the + :py:mod:`PIL.Image.core` interface module, and the text offset, the + gap between the starting coordinate and the first marking + """ + size, offset = self.font.getsize( + text, mode, direction, features, language, anchor + ) + size = size[0] + stroke_width * 2, size[1] + stroke_width * 2 + offset = offset[0] - stroke_width, offset[1] - stroke_width + Image._decompression_bomb_check(size) + im = fill("RGBA" if mode == "RGBA" else "L", size, 0) + self.font.render( + text, im.id, mode, direction, features, language, stroke_width, ink + ) + return im, offset + + def font_variant( + self, font=None, size=None, index=None, encoding=None, layout_engine=None + ): + """ + Create a copy of this FreeTypeFont object, + using any specified arguments to override the settings. + + Parameters are identical to the parameters used to initialize this + object. + + :return: A FreeTypeFont object. + """ + return FreeTypeFont( + font=self.path if font is None else font, + size=self.size if size is None else size, + index=self.index if index is None else index, + encoding=self.encoding if encoding is None else encoding, + layout_engine=layout_engine or self.layout_engine, + ) + + def get_variation_names(self): + """ + :returns: A list of the named styles in a variation font. + :exception OSError: If the font is not a variation font. + """ + try: + names = self.font.getvarnames() + except AttributeError as e: + raise NotImplementedError("FreeType 2.9.1 or greater is required") from e + return [name.replace(b"\x00", b"") for name in names] + + def set_variation_by_name(self, name): + """ + :param name: The name of the style. + :exception OSError: If the font is not a variation font. + """ + names = self.get_variation_names() + if not isinstance(name, bytes): + name = name.encode() + index = names.index(name) + + if index == getattr(self, "_last_variation_index", None): + # When the same name is set twice in a row, + # there is an 'unknown freetype error' + # https://savannah.nongnu.org/bugs/?56186 + return + self._last_variation_index = index + + self.font.setvarname(index) + + def get_variation_axes(self): + """ + :returns: A list of the axes in a variation font. + :exception OSError: If the font is not a variation font. + """ + try: + axes = self.font.getvaraxes() + except AttributeError as e: + raise NotImplementedError("FreeType 2.9.1 or greater is required") from e + for axis in axes: + axis["name"] = axis["name"].replace(b"\x00", b"") + return axes + + def set_variation_by_axes(self, axes): + """ + :param axes: A list of values for each axis. + :exception OSError: If the font is not a variation font. + """ + try: + self.font.setvaraxes(axes) + except AttributeError as e: + raise NotImplementedError("FreeType 2.9.1 or greater is required") from e + + +class TransposedFont: + "Wrapper for writing rotated or mirrored text" + + def __init__(self, font, orientation=None): + """ + Wrapper that creates a transposed font from any existing font + object. + + :param font: A font object. + :param orientation: An optional orientation. If given, this should + be one of Image.FLIP_LEFT_RIGHT, Image.FLIP_TOP_BOTTOM, + Image.ROTATE_90, Image.ROTATE_180, or Image.ROTATE_270. + """ + self.font = font + self.orientation = orientation # any 'transpose' argument, or None + + def getsize(self, text, *args, **kwargs): + w, h = self.font.getsize(text) + if self.orientation in (Image.ROTATE_90, Image.ROTATE_270): + return h, w + return w, h + + def getmask(self, text, mode="", *args, **kwargs): + im = self.font.getmask(text, mode, *args, **kwargs) + if self.orientation is not None: + return im.transpose(self.orientation) + return im + + +def load(filename): + """ + Load a font file. This function loads a font object from the given + bitmap font file, and returns the corresponding font object. + + :param filename: Name of font file. + :return: A font object. + :exception OSError: If the file could not be read. + """ + f = ImageFont() + f._load_pilfont(filename) + return f + + +def truetype(font=None, size=10, index=0, encoding="", layout_engine=None): + """ + Load a TrueType or OpenType font from a file or file-like object, + and create a font object. + This function loads a font object from the given file or file-like + object, and creates a font object for a font of the given size. + + Pillow uses FreeType to open font files. If you are opening many fonts + simultaneously on Windows, be aware that Windows limits the number of files + that can be open in C at once to 512. If you approach that limit, an + ``OSError`` may be thrown, reporting that FreeType "cannot open resource". + + This function requires the _imagingft service. + + :param font: A filename or file-like object containing a TrueType font. + If the file is not found in this filename, the loader may also + search in other directories, such as the :file:`fonts/` + directory on Windows or :file:`/Library/Fonts/`, + :file:`/System/Library/Fonts/` and :file:`~/Library/Fonts/` on + macOS. + + :param size: The requested size, in points. + :param index: Which font face to load (default is first available face). + :param encoding: Which font encoding to use (default is Unicode). Possible + encodings include (see the FreeType documentation for more + information): + + * "unic" (Unicode) + * "symb" (Microsoft Symbol) + * "ADOB" (Adobe Standard) + * "ADBE" (Adobe Expert) + * "ADBC" (Adobe Custom) + * "armn" (Apple Roman) + * "sjis" (Shift JIS) + * "gb " (PRC) + * "big5" + * "wans" (Extended Wansung) + * "joha" (Johab) + * "lat1" (Latin-1) + + This specifies the character set to use. It does not alter the + encoding of any text provided in subsequent operations. + :param layout_engine: Which layout engine to use, if available: + :data:`.ImageFont.LAYOUT_BASIC` or :data:`.ImageFont.LAYOUT_RAQM`. + + You can check support for Raqm layout using + :py:func:`PIL.features.check_feature` with ``feature="raqm"``. + + .. versionadded:: 4.2.0 + :return: A font object. + :exception OSError: If the file could not be read. + """ + + def freetype(font): + return FreeTypeFont(font, size, index, encoding, layout_engine) + + try: + return freetype(font) + except OSError: + if not isPath(font): + raise + ttf_filename = os.path.basename(font) + + dirs = [] + if sys.platform == "win32": + # check the windows font repository + # NOTE: must use uppercase WINDIR, to work around bugs in + # 1.5.2's os.environ.get() + windir = os.environ.get("WINDIR") + if windir: + dirs.append(os.path.join(windir, "fonts")) + elif sys.platform in ("linux", "linux2"): + lindirs = os.environ.get("XDG_DATA_DIRS", "") + if not lindirs: + # According to the freedesktop spec, XDG_DATA_DIRS should + # default to /usr/share + lindirs = "/usr/share" + dirs += [os.path.join(lindir, "fonts") for lindir in lindirs.split(":")] + elif sys.platform == "darwin": + dirs += [ + "/Library/Fonts", + "/System/Library/Fonts", + os.path.expanduser("~/Library/Fonts"), + ] + + ext = os.path.splitext(ttf_filename)[1] + first_font_with_a_different_extension = None + for directory in dirs: + for walkroot, walkdir, walkfilenames in os.walk(directory): + for walkfilename in walkfilenames: + if ext and walkfilename == ttf_filename: + return freetype(os.path.join(walkroot, walkfilename)) + elif not ext and os.path.splitext(walkfilename)[0] == ttf_filename: + fontpath = os.path.join(walkroot, walkfilename) + if os.path.splitext(fontpath)[1] == ".ttf": + return freetype(fontpath) + if not ext and first_font_with_a_different_extension is None: + first_font_with_a_different_extension = fontpath + if first_font_with_a_different_extension: + return freetype(first_font_with_a_different_extension) + raise + + +def load_path(filename): + """ + Load font file. Same as :py:func:`~PIL.ImageFont.load`, but searches for a + bitmap font along the Python path. + + :param filename: Name of font file. + :return: A font object. + :exception OSError: If the file could not be read. + """ + for directory in sys.path: + if isDirectory(directory): + if not isinstance(filename, str): + filename = filename.decode("utf-8") + try: + return load(os.path.join(directory, filename)) + except OSError: + pass + raise OSError("cannot find font file") + + +def load_default(): + """Load a "better than nothing" default font. + + .. versionadded:: 1.1.4 + + :return: A font object. + """ + f = ImageFont() + f._load_pilfont_data( + # courB08 + BytesIO( + base64.b64decode( + b""" +UElMZm9udAo7Ozs7OzsxMDsKREFUQQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAA//8AAQAAAAAAAAABAAEA +BgAAAAH/+gADAAAAAQAAAAMABgAGAAAAAf/6AAT//QADAAAABgADAAYAAAAA//kABQABAAYAAAAL +AAgABgAAAAD/+AAFAAEACwAAABAACQAGAAAAAP/5AAUAAAAQAAAAFQAHAAYAAP////oABQAAABUA +AAAbAAYABgAAAAH/+QAE//wAGwAAAB4AAwAGAAAAAf/5AAQAAQAeAAAAIQAIAAYAAAAB//kABAAB +ACEAAAAkAAgABgAAAAD/+QAE//0AJAAAACgABAAGAAAAAP/6AAX//wAoAAAALQAFAAYAAAAB//8A +BAACAC0AAAAwAAMABgAAAAD//AAF//0AMAAAADUAAQAGAAAAAf//AAMAAAA1AAAANwABAAYAAAAB +//kABQABADcAAAA7AAgABgAAAAD/+QAFAAAAOwAAAEAABwAGAAAAAP/5AAYAAABAAAAARgAHAAYA +AAAA//kABQAAAEYAAABLAAcABgAAAAD/+QAFAAAASwAAAFAABwAGAAAAAP/5AAYAAABQAAAAVgAH +AAYAAAAA//kABQAAAFYAAABbAAcABgAAAAD/+QAFAAAAWwAAAGAABwAGAAAAAP/5AAUAAABgAAAA +ZQAHAAYAAAAA//kABQAAAGUAAABqAAcABgAAAAD/+QAFAAAAagAAAG8ABwAGAAAAAf/8AAMAAABv +AAAAcQAEAAYAAAAA//wAAwACAHEAAAB0AAYABgAAAAD/+gAE//8AdAAAAHgABQAGAAAAAP/7AAT/ +/gB4AAAAfAADAAYAAAAB//oABf//AHwAAACAAAUABgAAAAD/+gAFAAAAgAAAAIUABgAGAAAAAP/5 +AAYAAQCFAAAAiwAIAAYAAP////oABgAAAIsAAACSAAYABgAA////+gAFAAAAkgAAAJgABgAGAAAA +AP/6AAUAAACYAAAAnQAGAAYAAP////oABQAAAJ0AAACjAAYABgAA////+gAFAAAAowAAAKkABgAG +AAD////6AAUAAACpAAAArwAGAAYAAAAA//oABQAAAK8AAAC0AAYABgAA////+gAGAAAAtAAAALsA +BgAGAAAAAP/6AAQAAAC7AAAAvwAGAAYAAP////oABQAAAL8AAADFAAYABgAA////+gAGAAAAxQAA +AMwABgAGAAD////6AAUAAADMAAAA0gAGAAYAAP////oABQAAANIAAADYAAYABgAA////+gAGAAAA +2AAAAN8ABgAGAAAAAP/6AAUAAADfAAAA5AAGAAYAAP////oABQAAAOQAAADqAAYABgAAAAD/+gAF +AAEA6gAAAO8ABwAGAAD////6AAYAAADvAAAA9gAGAAYAAAAA//oABQAAAPYAAAD7AAYABgAA//// ++gAFAAAA+wAAAQEABgAGAAD////6AAYAAAEBAAABCAAGAAYAAP////oABgAAAQgAAAEPAAYABgAA +////+gAGAAABDwAAARYABgAGAAAAAP/6AAYAAAEWAAABHAAGAAYAAP////oABgAAARwAAAEjAAYA +BgAAAAD/+gAFAAABIwAAASgABgAGAAAAAf/5AAQAAQEoAAABKwAIAAYAAAAA//kABAABASsAAAEv +AAgABgAAAAH/+QAEAAEBLwAAATIACAAGAAAAAP/5AAX//AEyAAABNwADAAYAAAAAAAEABgACATcA +AAE9AAEABgAAAAH/+QAE//wBPQAAAUAAAwAGAAAAAP/7AAYAAAFAAAABRgAFAAYAAP////kABQAA +AUYAAAFMAAcABgAAAAD/+wAFAAABTAAAAVEABQAGAAAAAP/5AAYAAAFRAAABVwAHAAYAAAAA//sA +BQAAAVcAAAFcAAUABgAAAAD/+QAFAAABXAAAAWEABwAGAAAAAP/7AAYAAgFhAAABZwAHAAYAAP// +//kABQAAAWcAAAFtAAcABgAAAAD/+QAGAAABbQAAAXMABwAGAAAAAP/5AAQAAgFzAAABdwAJAAYA +AP////kABgAAAXcAAAF+AAcABgAAAAD/+QAGAAABfgAAAYQABwAGAAD////7AAUAAAGEAAABigAF +AAYAAP////sABQAAAYoAAAGQAAUABgAAAAD/+wAFAAABkAAAAZUABQAGAAD////7AAUAAgGVAAAB +mwAHAAYAAAAA//sABgACAZsAAAGhAAcABgAAAAD/+wAGAAABoQAAAacABQAGAAAAAP/7AAYAAAGn +AAABrQAFAAYAAAAA//kABgAAAa0AAAGzAAcABgAA////+wAGAAABswAAAboABQAGAAD////7AAUA +AAG6AAABwAAFAAYAAP////sABgAAAcAAAAHHAAUABgAAAAD/+wAGAAABxwAAAc0ABQAGAAD////7 +AAYAAgHNAAAB1AAHAAYAAAAA//sABQAAAdQAAAHZAAUABgAAAAH/+QAFAAEB2QAAAd0ACAAGAAAA +Av/6AAMAAQHdAAAB3gAHAAYAAAAA//kABAABAd4AAAHiAAgABgAAAAD/+wAF//0B4gAAAecAAgAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAB +//sAAwACAecAAAHpAAcABgAAAAD/+QAFAAEB6QAAAe4ACAAGAAAAAP/5AAYAAAHuAAAB9AAHAAYA +AAAA//oABf//AfQAAAH5AAUABgAAAAD/+QAGAAAB+QAAAf8ABwAGAAAAAv/5AAMAAgH/AAACAAAJ +AAYAAAAA//kABQABAgAAAAIFAAgABgAAAAH/+gAE//sCBQAAAggAAQAGAAAAAP/5AAYAAAIIAAAC +DgAHAAYAAAAB//kABf/+Ag4AAAISAAUABgAA////+wAGAAACEgAAAhkABQAGAAAAAP/7AAX//gIZ +AAACHgADAAYAAAAA//wABf/9Ah4AAAIjAAEABgAAAAD/+QAHAAACIwAAAioABwAGAAAAAP/6AAT/ ++wIqAAACLgABAAYAAAAA//kABP/8Ai4AAAIyAAMABgAAAAD/+gAFAAACMgAAAjcABgAGAAAAAf/5 +AAT//QI3AAACOgAEAAYAAAAB//kABP/9AjoAAAI9AAQABgAAAAL/+QAE//sCPQAAAj8AAgAGAAD/ +///7AAYAAgI/AAACRgAHAAYAAAAA//kABgABAkYAAAJMAAgABgAAAAH//AAD//0CTAAAAk4AAQAG +AAAAAf//AAQAAgJOAAACUQADAAYAAAAB//kABP/9AlEAAAJUAAQABgAAAAH/+QAF//4CVAAAAlgA +BQAGAAD////7AAYAAAJYAAACXwAFAAYAAP////kABgAAAl8AAAJmAAcABgAA////+QAGAAACZgAA +Am0ABwAGAAD////5AAYAAAJtAAACdAAHAAYAAAAA//sABQACAnQAAAJ5AAcABgAA////9wAGAAAC +eQAAAoAACQAGAAD////3AAYAAAKAAAAChwAJAAYAAP////cABgAAAocAAAKOAAkABgAA////9wAG +AAACjgAAApUACQAGAAD////4AAYAAAKVAAACnAAIAAYAAP////cABgAAApwAAAKjAAkABgAA//// ++gAGAAACowAAAqoABgAGAAAAAP/6AAUAAgKqAAACrwAIAAYAAP////cABQAAAq8AAAK1AAkABgAA +////9wAFAAACtQAAArsACQAGAAD////3AAUAAAK7AAACwQAJAAYAAP////gABQAAAsEAAALHAAgA +BgAAAAD/9wAEAAACxwAAAssACQAGAAAAAP/3AAQAAALLAAACzwAJAAYAAAAA//cABAAAAs8AAALT +AAkABgAAAAD/+AAEAAAC0wAAAtcACAAGAAD////6AAUAAALXAAAC3QAGAAYAAP////cABgAAAt0A +AALkAAkABgAAAAD/9wAFAAAC5AAAAukACQAGAAAAAP/3AAUAAALpAAAC7gAJAAYAAAAA//cABQAA +Au4AAALzAAkABgAAAAD/9wAFAAAC8wAAAvgACQAGAAAAAP/4AAUAAAL4AAAC/QAIAAYAAAAA//oA +Bf//Av0AAAMCAAUABgAA////+gAGAAADAgAAAwkABgAGAAD////3AAYAAAMJAAADEAAJAAYAAP// +//cABgAAAxAAAAMXAAkABgAA////9wAGAAADFwAAAx4ACQAGAAD////4AAYAAAAAAAoABwASAAYA +AP////cABgAAAAcACgAOABMABgAA////+gAFAAAADgAKABQAEAAGAAD////6AAYAAAAUAAoAGwAQ +AAYAAAAA//gABgAAABsACgAhABIABgAAAAD/+AAGAAAAIQAKACcAEgAGAAAAAP/4AAYAAAAnAAoA +LQASAAYAAAAA//gABgAAAC0ACgAzABIABgAAAAD/+QAGAAAAMwAKADkAEQAGAAAAAP/3AAYAAAA5 +AAoAPwATAAYAAP////sABQAAAD8ACgBFAA8ABgAAAAD/+wAFAAIARQAKAEoAEQAGAAAAAP/4AAUA +AABKAAoATwASAAYAAAAA//gABQAAAE8ACgBUABIABgAAAAD/+AAFAAAAVAAKAFkAEgAGAAAAAP/5 +AAUAAABZAAoAXgARAAYAAAAA//gABgAAAF4ACgBkABIABgAAAAD/+AAGAAAAZAAKAGoAEgAGAAAA +AP/4AAYAAABqAAoAcAASAAYAAAAA//kABgAAAHAACgB2ABEABgAAAAD/+AAFAAAAdgAKAHsAEgAG +AAD////4AAYAAAB7AAoAggASAAYAAAAA//gABQAAAIIACgCHABIABgAAAAD/+AAFAAAAhwAKAIwA +EgAGAAAAAP/4AAUAAACMAAoAkQASAAYAAAAA//gABQAAAJEACgCWABIABgAAAAD/+QAFAAAAlgAK +AJsAEQAGAAAAAP/6AAX//wCbAAoAoAAPAAYAAAAA//oABQABAKAACgClABEABgAA////+AAGAAAA +pQAKAKwAEgAGAAD////4AAYAAACsAAoAswASAAYAAP////gABgAAALMACgC6ABIABgAA////+QAG +AAAAugAKAMEAEQAGAAD////4AAYAAgDBAAoAyAAUAAYAAP////kABQACAMgACgDOABMABgAA//// ++QAGAAIAzgAKANUAEw== +""" + ) + ), + Image.open( + BytesIO( + base64.b64decode( + b""" +iVBORw0KGgoAAAANSUhEUgAAAx4AAAAUAQAAAAArMtZoAAAEwElEQVR4nABlAJr/AHVE4czCI/4u +Mc4b7vuds/xzjz5/3/7u/n9vMe7vnfH/9++vPn/xyf5zhxzjt8GHw8+2d83u8x27199/nxuQ6Od9 +M43/5z2I+9n9ZtmDBwMQECDRQw/eQIQohJXxpBCNVE6QCCAAAAD//wBlAJr/AgALyj1t/wINwq0g +LeNZUworuN1cjTPIzrTX6ofHWeo3v336qPzfEwRmBnHTtf95/fglZK5N0PDgfRTslpGBvz7LFc4F +IUXBWQGjQ5MGCx34EDFPwXiY4YbYxavpnhHFrk14CDAAAAD//wBlAJr/AgKqRooH2gAgPeggvUAA +Bu2WfgPoAwzRAABAAAAAAACQgLz/3Uv4Gv+gX7BJgDeeGP6AAAD1NMDzKHD7ANWr3loYbxsAD791 +NAADfcoIDyP44K/jv4Y63/Z+t98Ovt+ub4T48LAAAAD//wBlAJr/AuplMlADJAAAAGuAphWpqhMx +in0A/fRvAYBABPgBwBUgABBQ/sYAyv9g0bCHgOLoGAAAAAAAREAAwI7nr0ArYpow7aX8//9LaP/9 +SjdavWA8ePHeBIKB//81/83ndznOaXx379wAAAD//wBlAJr/AqDxW+D3AABAAbUh/QMnbQag/gAY +AYDAAACgtgD/gOqAAAB5IA/8AAAk+n9w0AAA8AAAmFRJuPo27ciC0cD5oeW4E7KA/wD3ECMAn2tt +y8PgwH8AfAxFzC0JzeAMtratAsC/ffwAAAD//wBlAJr/BGKAyCAA4AAAAvgeYTAwHd1kmQF5chkG +ABoMIHcL5xVpTfQbUqzlAAAErwAQBgAAEOClA5D9il08AEh/tUzdCBsXkbgACED+woQg8Si9VeqY +lODCn7lmF6NhnAEYgAAA/NMIAAAAAAD//2JgjLZgVGBg5Pv/Tvpc8hwGBjYGJADjHDrAwPzAjv/H +/Wf3PzCwtzcwHmBgYGcwbZz8wHaCAQMDOwMDQ8MCBgYOC3W7mp+f0w+wHOYxO3OG+e376hsMZjk3 +AAAAAP//YmCMY2A4wMAIN5e5gQETPD6AZisDAwMDgzSDAAPjByiHcQMDAwMDg1nOze1lByRu5/47 +c4859311AYNZzg0AAAAA//9iYGDBYihOIIMuwIjGL39/fwffA8b//xv/P2BPtzzHwCBjUQAAAAD/ +/yLFBrIBAAAA//9i1HhcwdhizX7u8NZNzyLbvT97bfrMf/QHI8evOwcSqGUJAAAA//9iYBB81iSw +pEE170Qrg5MIYydHqwdDQRMrAwcVrQAAAAD//2J4x7j9AAMDn8Q/BgYLBoaiAwwMjPdvMDBYM1Tv +oJodAAAAAP//Yqo/83+dxePWlxl3npsel9lvLfPcqlE9725C+acfVLMEAAAA//9i+s9gwCoaaGMR +evta/58PTEWzr21hufPjA8N+qlnBwAAAAAD//2JiWLci5v1+HmFXDqcnULE/MxgYGBj+f6CaJQAA +AAD//2Ji2FrkY3iYpYC5qDeGgeEMAwPDvwQBBoYvcTwOVLMEAAAA//9isDBgkP///0EOg9z35v// +Gc/eeW7BwPj5+QGZhANUswMAAAD//2JgqGBgYGBgqEMXlvhMPUsAAAAA//8iYDd1AAAAAP//AwDR +w7IkEbzhVQAAAABJRU5ErkJggg== +""" + ) + ) + ), + ) + return f diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageGrab.py b/.venv/lib/python3.9/site-packages/PIL/ImageGrab.py new file mode 100644 index 00000000..b93ec3f2 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageGrab.py @@ -0,0 +1,120 @@ +# +# The Python Imaging Library +# $Id$ +# +# screen grabber +# +# History: +# 2001-04-26 fl created +# 2001-09-17 fl use builtin driver, if present +# 2002-11-19 fl added grabclipboard support +# +# Copyright (c) 2001-2002 by Secret Labs AB +# Copyright (c) 2001-2002 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import sys + +from . import Image + +if sys.platform == "darwin": + import os + import subprocess + import tempfile + + +def grab(bbox=None, include_layered_windows=False, all_screens=False, xdisplay=None): + if xdisplay is None: + if sys.platform == "darwin": + fh, filepath = tempfile.mkstemp(".png") + os.close(fh) + subprocess.call(["screencapture", "-x", filepath]) + im = Image.open(filepath) + im.load() + os.unlink(filepath) + if bbox: + im_cropped = im.crop(bbox) + im.close() + return im_cropped + return im + elif sys.platform == "win32": + offset, size, data = Image.core.grabscreen_win32( + include_layered_windows, all_screens + ) + im = Image.frombytes( + "RGB", + size, + data, + # RGB, 32-bit line padding, origin lower left corner + "raw", + "BGR", + (size[0] * 3 + 3) & -4, + -1, + ) + if bbox: + x0, y0 = offset + left, top, right, bottom = bbox + im = im.crop((left - x0, top - y0, right - x0, bottom - y0)) + return im + # use xdisplay=None for default display on non-win32/macOS systems + if not Image.core.HAVE_XCB: + raise OSError("Pillow was built without XCB support") + size, data = Image.core.grabscreen_x11(xdisplay) + im = Image.frombytes("RGB", size, data, "raw", "BGRX", size[0] * 4, 1) + if bbox: + im = im.crop(bbox) + return im + + +def grabclipboard(): + if sys.platform == "darwin": + fh, filepath = tempfile.mkstemp(".jpg") + os.close(fh) + commands = [ + 'set theFile to (open for access POSIX file "' + + filepath + + '" with write permission)', + "try", + " write (the clipboard as JPEG picture) to theFile", + "end try", + "close access theFile", + ] + script = ["osascript"] + for command in commands: + script += ["-e", command] + subprocess.call(script) + + im = None + if os.stat(filepath).st_size != 0: + im = Image.open(filepath) + im.load() + os.unlink(filepath) + return im + elif sys.platform == "win32": + fmt, data = Image.core.grabclipboard_win32() + if fmt == "file": # CF_HDROP + import struct + + o = struct.unpack_from("I", data)[0] + if data[16] != 0: + files = data[o:].decode("utf-16le").split("\0") + else: + files = data[o:].decode("mbcs").split("\0") + return files[: files.index("")] + if isinstance(data, bytes): + import io + + data = io.BytesIO(data) + if fmt == "png": + from . import PngImagePlugin + + return PngImagePlugin.PngImageFile(data) + elif fmt == "DIB": + from . import BmpImagePlugin + + return BmpImagePlugin.DibImageFile(data) + return None + else: + raise NotImplementedError("ImageGrab.grabclipboard() is macOS and Windows only") diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageMath.py b/.venv/lib/python3.9/site-packages/PIL/ImageMath.py new file mode 100644 index 00000000..7f9c88e1 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageMath.py @@ -0,0 +1,253 @@ +# +# The Python Imaging Library +# $Id$ +# +# a simple math add-on for the Python Imaging Library +# +# History: +# 1999-02-15 fl Original PIL Plus release +# 2005-05-05 fl Simplified and cleaned up for PIL 1.1.6 +# 2005-09-12 fl Fixed int() and float() for Python 2.4.1 +# +# Copyright (c) 1999-2005 by Secret Labs AB +# Copyright (c) 2005 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import builtins + +from . import Image, _imagingmath + +VERBOSE = 0 + + +def _isconstant(v): + return isinstance(v, (int, float)) + + +class _Operand: + """Wraps an image operand, providing standard operators""" + + def __init__(self, im): + self.im = im + + def __fixup(self, im1): + # convert image to suitable mode + if isinstance(im1, _Operand): + # argument was an image. + if im1.im.mode in ("1", "L"): + return im1.im.convert("I") + elif im1.im.mode in ("I", "F"): + return im1.im + else: + raise ValueError(f"unsupported mode: {im1.im.mode}") + else: + # argument was a constant + if _isconstant(im1) and self.im.mode in ("1", "L", "I"): + return Image.new("I", self.im.size, im1) + else: + return Image.new("F", self.im.size, im1) + + def apply(self, op, im1, im2=None, mode=None): + im1 = self.__fixup(im1) + if im2 is None: + # unary operation + out = Image.new(mode or im1.mode, im1.size, None) + im1.load() + try: + op = getattr(_imagingmath, op + "_" + im1.mode) + except AttributeError as e: + raise TypeError(f"bad operand type for '{op}'") from e + _imagingmath.unop(op, out.im.id, im1.im.id) + else: + # binary operation + im2 = self.__fixup(im2) + if im1.mode != im2.mode: + # convert both arguments to floating point + if im1.mode != "F": + im1 = im1.convert("F") + if im2.mode != "F": + im2 = im2.convert("F") + if im1.mode != im2.mode: + raise ValueError("mode mismatch") + if im1.size != im2.size: + # crop both arguments to a common size + size = (min(im1.size[0], im2.size[0]), min(im1.size[1], im2.size[1])) + if im1.size != size: + im1 = im1.crop((0, 0) + size) + if im2.size != size: + im2 = im2.crop((0, 0) + size) + out = Image.new(mode or im1.mode, size, None) + else: + out = Image.new(mode or im1.mode, im1.size, None) + im1.load() + im2.load() + try: + op = getattr(_imagingmath, op + "_" + im1.mode) + except AttributeError as e: + raise TypeError(f"bad operand type for '{op}'") from e + _imagingmath.binop(op, out.im.id, im1.im.id, im2.im.id) + return _Operand(out) + + # unary operators + def __bool__(self): + # an image is "true" if it contains at least one non-zero pixel + return self.im.getbbox() is not None + + def __abs__(self): + return self.apply("abs", self) + + def __pos__(self): + return self + + def __neg__(self): + return self.apply("neg", self) + + # binary operators + def __add__(self, other): + return self.apply("add", self, other) + + def __radd__(self, other): + return self.apply("add", other, self) + + def __sub__(self, other): + return self.apply("sub", self, other) + + def __rsub__(self, other): + return self.apply("sub", other, self) + + def __mul__(self, other): + return self.apply("mul", self, other) + + def __rmul__(self, other): + return self.apply("mul", other, self) + + def __truediv__(self, other): + return self.apply("div", self, other) + + def __rtruediv__(self, other): + return self.apply("div", other, self) + + def __mod__(self, other): + return self.apply("mod", self, other) + + def __rmod__(self, other): + return self.apply("mod", other, self) + + def __pow__(self, other): + return self.apply("pow", self, other) + + def __rpow__(self, other): + return self.apply("pow", other, self) + + # bitwise + def __invert__(self): + return self.apply("invert", self) + + def __and__(self, other): + return self.apply("and", self, other) + + def __rand__(self, other): + return self.apply("and", other, self) + + def __or__(self, other): + return self.apply("or", self, other) + + def __ror__(self, other): + return self.apply("or", other, self) + + def __xor__(self, other): + return self.apply("xor", self, other) + + def __rxor__(self, other): + return self.apply("xor", other, self) + + def __lshift__(self, other): + return self.apply("lshift", self, other) + + def __rshift__(self, other): + return self.apply("rshift", self, other) + + # logical + def __eq__(self, other): + return self.apply("eq", self, other) + + def __ne__(self, other): + return self.apply("ne", self, other) + + def __lt__(self, other): + return self.apply("lt", self, other) + + def __le__(self, other): + return self.apply("le", self, other) + + def __gt__(self, other): + return self.apply("gt", self, other) + + def __ge__(self, other): + return self.apply("ge", self, other) + + +# conversions +def imagemath_int(self): + return _Operand(self.im.convert("I")) + + +def imagemath_float(self): + return _Operand(self.im.convert("F")) + + +# logical +def imagemath_equal(self, other): + return self.apply("eq", self, other, mode="I") + + +def imagemath_notequal(self, other): + return self.apply("ne", self, other, mode="I") + + +def imagemath_min(self, other): + return self.apply("min", self, other) + + +def imagemath_max(self, other): + return self.apply("max", self, other) + + +def imagemath_convert(self, mode): + return _Operand(self.im.convert(mode)) + + +ops = {} +for k, v in list(globals().items()): + if k[:10] == "imagemath_": + ops[k[10:]] = v + + +def eval(expression, _dict={}, **kw): + """ + Evaluates an image expression. + + :param expression: A string containing a Python-style expression. + :param options: Values to add to the evaluation context. You + can either use a dictionary, or one or more keyword + arguments. + :return: The evaluated expression. This is usually an image object, but can + also be an integer, a floating point value, or a pixel tuple, + depending on the expression. + """ + + # build execution namespace + args = ops.copy() + args.update(_dict) + args.update(kw) + for k, v in list(args.items()): + if hasattr(v, "im"): + args[k] = _Operand(v) + + out = builtins.eval(expression, args) + try: + return out.im + except AttributeError: + return out diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageMode.py b/.venv/lib/python3.9/site-packages/PIL/ImageMode.py new file mode 100644 index 00000000..0afcf9fe --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageMode.py @@ -0,0 +1,74 @@ +# +# The Python Imaging Library. +# $Id$ +# +# standard mode descriptors +# +# History: +# 2006-03-20 fl Added +# +# Copyright (c) 2006 by Secret Labs AB. +# Copyright (c) 2006 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +# mode descriptor cache +_modes = None + + +class ModeDescriptor: + """Wrapper for mode strings.""" + + def __init__(self, mode, bands, basemode, basetype): + self.mode = mode + self.bands = bands + self.basemode = basemode + self.basetype = basetype + + def __str__(self): + return self.mode + + +def getmode(mode): + """Gets a mode descriptor for the given mode.""" + global _modes + if not _modes: + # initialize mode cache + modes = {} + for m, (basemode, basetype, bands) in { + # core modes + "1": ("L", "L", ("1",)), + "L": ("L", "L", ("L",)), + "I": ("L", "I", ("I",)), + "F": ("L", "F", ("F",)), + "P": ("P", "L", ("P",)), + "RGB": ("RGB", "L", ("R", "G", "B")), + "RGBX": ("RGB", "L", ("R", "G", "B", "X")), + "RGBA": ("RGB", "L", ("R", "G", "B", "A")), + "CMYK": ("RGB", "L", ("C", "M", "Y", "K")), + "YCbCr": ("RGB", "L", ("Y", "Cb", "Cr")), + "LAB": ("RGB", "L", ("L", "A", "B")), + "HSV": ("RGB", "L", ("H", "S", "V")), + # extra experimental modes + "RGBa": ("RGB", "L", ("R", "G", "B", "a")), + "LA": ("L", "L", ("L", "A")), + "La": ("L", "L", ("L", "a")), + "PA": ("RGB", "L", ("P", "A")), + }.items(): + modes[m] = ModeDescriptor(m, bands, basemode, basetype) + # mapping modes + for i16mode in ( + "I;16", + "I;16S", + "I;16L", + "I;16LS", + "I;16B", + "I;16BS", + "I;16N", + "I;16NS", + ): + modes[i16mode] = ModeDescriptor(i16mode, ("I",), "L", "L") + # set global mode cache atomically + _modes = modes + return _modes[mode] diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageMorph.py b/.venv/lib/python3.9/site-packages/PIL/ImageMorph.py new file mode 100644 index 00000000..fe008375 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageMorph.py @@ -0,0 +1,245 @@ +# A binary morphology add-on for the Python Imaging Library +# +# History: +# 2014-06-04 Initial version. +# +# Copyright (c) 2014 Dov Grobgeld + +import re + +from . import Image, _imagingmorph + +LUT_SIZE = 1 << 9 + +# fmt: off +ROTATION_MATRIX = [ + 6, 3, 0, + 7, 4, 1, + 8, 5, 2, +] +MIRROR_MATRIX = [ + 2, 1, 0, + 5, 4, 3, + 8, 7, 6, +] +# fmt: on + + +class LutBuilder: + """A class for building a MorphLut from a descriptive language + + The input patterns is a list of a strings sequences like these:: + + 4:(... + .1. + 111)->1 + + (whitespaces including linebreaks are ignored). The option 4 + describes a series of symmetry operations (in this case a + 4-rotation), the pattern is described by: + + - . or X - Ignore + - 1 - Pixel is on + - 0 - Pixel is off + + The result of the operation is described after "->" string. + + The default is to return the current pixel value, which is + returned if no other match is found. + + Operations: + + - 4 - 4 way rotation + - N - Negate + - 1 - Dummy op for no other operation (an op must always be given) + - M - Mirroring + + Example:: + + lb = LutBuilder(patterns = ["4:(... .1. 111)->1"]) + lut = lb.build_lut() + + """ + + def __init__(self, patterns=None, op_name=None): + if patterns is not None: + self.patterns = patterns + else: + self.patterns = [] + self.lut = None + if op_name is not None: + known_patterns = { + "corner": ["1:(... ... ...)->0", "4:(00. 01. ...)->1"], + "dilation4": ["4:(... .0. .1.)->1"], + "dilation8": ["4:(... .0. .1.)->1", "4:(... .0. ..1)->1"], + "erosion4": ["4:(... .1. .0.)->0"], + "erosion8": ["4:(... .1. .0.)->0", "4:(... .1. ..0)->0"], + "edge": [ + "1:(... ... ...)->0", + "4:(.0. .1. ...)->1", + "4:(01. .1. ...)->1", + ], + } + if op_name not in known_patterns: + raise Exception("Unknown pattern " + op_name + "!") + + self.patterns = known_patterns[op_name] + + def add_patterns(self, patterns): + self.patterns += patterns + + def build_default_lut(self): + symbols = [0, 1] + m = 1 << 4 # pos of current pixel + self.lut = bytearray(symbols[(i & m) > 0] for i in range(LUT_SIZE)) + + def get_lut(self): + return self.lut + + def _string_permute(self, pattern, permutation): + """string_permute takes a pattern and a permutation and returns the + string permuted according to the permutation list. + """ + assert len(permutation) == 9 + return "".join(pattern[p] for p in permutation) + + def _pattern_permute(self, basic_pattern, options, basic_result): + """pattern_permute takes a basic pattern and its result and clones + the pattern according to the modifications described in the $options + parameter. It returns a list of all cloned patterns.""" + patterns = [(basic_pattern, basic_result)] + + # rotations + if "4" in options: + res = patterns[-1][1] + for i in range(4): + patterns.append( + (self._string_permute(patterns[-1][0], ROTATION_MATRIX), res) + ) + # mirror + if "M" in options: + n = len(patterns) + for pattern, res in patterns[0:n]: + patterns.append((self._string_permute(pattern, MIRROR_MATRIX), res)) + + # negate + if "N" in options: + n = len(patterns) + for pattern, res in patterns[0:n]: + # Swap 0 and 1 + pattern = pattern.replace("0", "Z").replace("1", "0").replace("Z", "1") + res = 1 - int(res) + patterns.append((pattern, res)) + + return patterns + + def build_lut(self): + """Compile all patterns into a morphology lut. + + TBD :Build based on (file) morphlut:modify_lut + """ + self.build_default_lut() + patterns = [] + + # Parse and create symmetries of the patterns strings + for p in self.patterns: + m = re.search(r"(\w*):?\s*\((.+?)\)\s*->\s*(\d)", p.replace("\n", "")) + if not m: + raise Exception('Syntax error in pattern "' + p + '"') + options = m.group(1) + pattern = m.group(2) + result = int(m.group(3)) + + # Get rid of spaces + pattern = pattern.replace(" ", "").replace("\n", "") + + patterns += self._pattern_permute(pattern, options, result) + + # compile the patterns into regular expressions for speed + for i, pattern in enumerate(patterns): + p = pattern[0].replace(".", "X").replace("X", "[01]") + p = re.compile(p) + patterns[i] = (p, pattern[1]) + + # Step through table and find patterns that match. + # Note that all the patterns are searched. The last one + # caught overrides + for i in range(LUT_SIZE): + # Build the bit pattern + bitpattern = bin(i)[2:] + bitpattern = ("0" * (9 - len(bitpattern)) + bitpattern)[::-1] + + for p, r in patterns: + if p.match(bitpattern): + self.lut[i] = [0, 1][r] + + return self.lut + + +class MorphOp: + """A class for binary morphological operators""" + + def __init__(self, lut=None, op_name=None, patterns=None): + """Create a binary morphological operator""" + self.lut = lut + if op_name is not None: + self.lut = LutBuilder(op_name=op_name).build_lut() + elif patterns is not None: + self.lut = LutBuilder(patterns=patterns).build_lut() + + def apply(self, image): + """Run a single morphological operation on an image + + Returns a tuple of the number of changed pixels and the + morphed image""" + if self.lut is None: + raise Exception("No operator loaded") + + if image.mode != "L": + raise ValueError("Image mode must be L") + outimage = Image.new(image.mode, image.size, None) + count = _imagingmorph.apply(bytes(self.lut), image.im.id, outimage.im.id) + return count, outimage + + def match(self, image): + """Get a list of coordinates matching the morphological operation on + an image. + + Returns a list of tuples of (x,y) coordinates + of all matching pixels. See :ref:`coordinate-system`.""" + if self.lut is None: + raise Exception("No operator loaded") + + if image.mode != "L": + raise ValueError("Image mode must be L") + return _imagingmorph.match(bytes(self.lut), image.im.id) + + def get_on_pixels(self, image): + """Get a list of all turned on pixels in a binary image + + Returns a list of tuples of (x,y) coordinates + of all matching pixels. See :ref:`coordinate-system`.""" + + if image.mode != "L": + raise ValueError("Image mode must be L") + return _imagingmorph.get_on_pixels(image.im.id) + + def load_lut(self, filename): + """Load an operator from an mrl file""" + with open(filename, "rb") as f: + self.lut = bytearray(f.read()) + + if len(self.lut) != LUT_SIZE: + self.lut = None + raise Exception("Wrong size operator file!") + + def save_lut(self, filename): + """Save an operator to an mrl file""" + if self.lut is None: + raise Exception("No operator loaded") + with open(filename, "wb") as f: + f.write(self.lut) + + def set_lut(self, lut): + """Set the lut from an external source""" + self.lut = lut diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageOps.py b/.venv/lib/python3.9/site-packages/PIL/ImageOps.py new file mode 100644 index 00000000..f0c932d3 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageOps.py @@ -0,0 +1,608 @@ +# +# The Python Imaging Library. +# $Id$ +# +# standard image operations +# +# History: +# 2001-10-20 fl Created +# 2001-10-23 fl Added autocontrast operator +# 2001-12-18 fl Added Kevin's fit operator +# 2004-03-14 fl Fixed potential division by zero in equalize +# 2005-05-05 fl Fixed equalize for low number of values +# +# Copyright (c) 2001-2004 by Secret Labs AB +# Copyright (c) 2001-2004 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import functools +import operator +import re + +from . import Image + +# +# helpers + + +def _border(border): + if isinstance(border, tuple): + if len(border) == 2: + left, top = right, bottom = border + elif len(border) == 4: + left, top, right, bottom = border + else: + left = top = right = bottom = border + return left, top, right, bottom + + +def _color(color, mode): + if isinstance(color, str): + from . import ImageColor + + color = ImageColor.getcolor(color, mode) + return color + + +def _lut(image, lut): + if image.mode == "P": + # FIXME: apply to lookup table, not image data + raise NotImplementedError("mode P support coming soon") + elif image.mode in ("L", "RGB"): + if image.mode == "RGB" and len(lut) == 256: + lut = lut + lut + lut + return image.point(lut) + else: + raise OSError("not supported for this image mode") + + +# +# actions + + +def autocontrast(image, cutoff=0, ignore=None, mask=None, preserve_tone=False): + """ + Maximize (normalize) image contrast. This function calculates a + histogram of the input image (or mask region), removes ``cutoff`` percent of the + lightest and darkest pixels from the histogram, and remaps the image + so that the darkest pixel becomes black (0), and the lightest + becomes white (255). + + :param image: The image to process. + :param cutoff: The percent to cut off from the histogram on the low and + high ends. Either a tuple of (low, high), or a single + number for both. + :param ignore: The background pixel value (use None for no background). + :param mask: Histogram used in contrast operation is computed using pixels + within the mask. If no mask is given the entire image is used + for histogram computation. + :param preserve_tone: Preserve image tone in Photoshop-like style autocontrast. + + .. versionadded:: 8.2.0 + + :return: An image. + """ + if preserve_tone: + histogram = image.convert("L").histogram(mask) + else: + histogram = image.histogram(mask) + + lut = [] + for layer in range(0, len(histogram), 256): + h = histogram[layer : layer + 256] + if ignore is not None: + # get rid of outliers + try: + h[ignore] = 0 + except TypeError: + # assume sequence + for ix in ignore: + h[ix] = 0 + if cutoff: + # cut off pixels from both ends of the histogram + if not isinstance(cutoff, tuple): + cutoff = (cutoff, cutoff) + # get number of pixels + n = 0 + for ix in range(256): + n = n + h[ix] + # remove cutoff% pixels from the low end + cut = n * cutoff[0] // 100 + for lo in range(256): + if cut > h[lo]: + cut = cut - h[lo] + h[lo] = 0 + else: + h[lo] -= cut + cut = 0 + if cut <= 0: + break + # remove cutoff% samples from the high end + cut = n * cutoff[1] // 100 + for hi in range(255, -1, -1): + if cut > h[hi]: + cut = cut - h[hi] + h[hi] = 0 + else: + h[hi] -= cut + cut = 0 + if cut <= 0: + break + # find lowest/highest samples after preprocessing + for lo in range(256): + if h[lo]: + break + for hi in range(255, -1, -1): + if h[hi]: + break + if hi <= lo: + # don't bother + lut.extend(list(range(256))) + else: + scale = 255.0 / (hi - lo) + offset = -lo * scale + for ix in range(256): + ix = int(ix * scale + offset) + if ix < 0: + ix = 0 + elif ix > 255: + ix = 255 + lut.append(ix) + return _lut(image, lut) + + +def colorize(image, black, white, mid=None, blackpoint=0, whitepoint=255, midpoint=127): + """ + Colorize grayscale image. + This function calculates a color wedge which maps all black pixels in + the source image to the first color and all white pixels to the + second color. If ``mid`` is specified, it uses three-color mapping. + The ``black`` and ``white`` arguments should be RGB tuples or color names; + optionally you can use three-color mapping by also specifying ``mid``. + Mapping positions for any of the colors can be specified + (e.g. ``blackpoint``), where these parameters are the integer + value corresponding to where the corresponding color should be mapped. + These parameters must have logical order, such that + ``blackpoint <= midpoint <= whitepoint`` (if ``mid`` is specified). + + :param image: The image to colorize. + :param black: The color to use for black input pixels. + :param white: The color to use for white input pixels. + :param mid: The color to use for midtone input pixels. + :param blackpoint: an int value [0, 255] for the black mapping. + :param whitepoint: an int value [0, 255] for the white mapping. + :param midpoint: an int value [0, 255] for the midtone mapping. + :return: An image. + """ + + # Initial asserts + assert image.mode == "L" + if mid is None: + assert 0 <= blackpoint <= whitepoint <= 255 + else: + assert 0 <= blackpoint <= midpoint <= whitepoint <= 255 + + # Define colors from arguments + black = _color(black, "RGB") + white = _color(white, "RGB") + if mid is not None: + mid = _color(mid, "RGB") + + # Empty lists for the mapping + red = [] + green = [] + blue = [] + + # Create the low-end values + for i in range(0, blackpoint): + red.append(black[0]) + green.append(black[1]) + blue.append(black[2]) + + # Create the mapping (2-color) + if mid is None: + + range_map = range(0, whitepoint - blackpoint) + + for i in range_map: + red.append(black[0] + i * (white[0] - black[0]) // len(range_map)) + green.append(black[1] + i * (white[1] - black[1]) // len(range_map)) + blue.append(black[2] + i * (white[2] - black[2]) // len(range_map)) + + # Create the mapping (3-color) + else: + + range_map1 = range(0, midpoint - blackpoint) + range_map2 = range(0, whitepoint - midpoint) + + for i in range_map1: + red.append(black[0] + i * (mid[0] - black[0]) // len(range_map1)) + green.append(black[1] + i * (mid[1] - black[1]) // len(range_map1)) + blue.append(black[2] + i * (mid[2] - black[2]) // len(range_map1)) + for i in range_map2: + red.append(mid[0] + i * (white[0] - mid[0]) // len(range_map2)) + green.append(mid[1] + i * (white[1] - mid[1]) // len(range_map2)) + blue.append(mid[2] + i * (white[2] - mid[2]) // len(range_map2)) + + # Create the high-end values + for i in range(0, 256 - whitepoint): + red.append(white[0]) + green.append(white[1]) + blue.append(white[2]) + + # Return converted image + image = image.convert("RGB") + return _lut(image, red + green + blue) + + +def contain(image, size, method=Image.BICUBIC): + """ + Returns a resized version of the image, set to the maximum width and height + within the requested size, while maintaining the original aspect ratio. + + :param image: The image to resize and crop. + :param size: The requested output size in pixels, given as a + (width, height) tuple. + :param method: Resampling method to use. Default is + :py:attr:`PIL.Image.BICUBIC`. See :ref:`concept-filters`. + :return: An image. + """ + + im_ratio = image.width / image.height + dest_ratio = size[0] / size[1] + + if im_ratio != dest_ratio: + if im_ratio > dest_ratio: + new_height = int(image.height / image.width * size[0]) + if new_height != size[1]: + size = (size[0], new_height) + else: + new_width = int(image.width / image.height * size[1]) + if new_width != size[0]: + size = (new_width, size[1]) + return image.resize(size, resample=method) + + +def pad(image, size, method=Image.BICUBIC, color=None, centering=(0.5, 0.5)): + """ + Returns a resized and padded version of the image, expanded to fill the + requested aspect ratio and size. + + :param image: The image to resize and crop. + :param size: The requested output size in pixels, given as a + (width, height) tuple. + :param method: Resampling method to use. Default is + :py:attr:`PIL.Image.BICUBIC`. See :ref:`concept-filters`. + :param color: The background color of the padded image. + :param centering: Control the position of the original image within the + padded version. + + (0.5, 0.5) will keep the image centered + (0, 0) will keep the image aligned to the top left + (1, 1) will keep the image aligned to the bottom + right + :return: An image. + """ + + resized = contain(image, size, method) + if resized.size == size: + out = resized + else: + out = Image.new(image.mode, size, color) + if resized.width != size[0]: + x = int((size[0] - resized.width) * max(0, min(centering[0], 1))) + out.paste(resized, (x, 0)) + else: + y = int((size[1] - resized.height) * max(0, min(centering[1], 1))) + out.paste(resized, (0, y)) + return out + + +def crop(image, border=0): + """ + Remove border from image. The same amount of pixels are removed + from all four sides. This function works on all image modes. + + .. seealso:: :py:meth:`~PIL.Image.Image.crop` + + :param image: The image to crop. + :param border: The number of pixels to remove. + :return: An image. + """ + left, top, right, bottom = _border(border) + return image.crop((left, top, image.size[0] - right, image.size[1] - bottom)) + + +def scale(image, factor, resample=Image.BICUBIC): + """ + Returns a rescaled image by a specific factor given in parameter. + A factor greater than 1 expands the image, between 0 and 1 contracts the + image. + + :param image: The image to rescale. + :param factor: The expansion factor, as a float. + :param resample: Resampling method to use. Default is + :py:attr:`PIL.Image.BICUBIC`. See :ref:`concept-filters`. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + if factor == 1: + return image.copy() + elif factor <= 0: + raise ValueError("the factor must be greater than 0") + else: + size = (round(factor * image.width), round(factor * image.height)) + return image.resize(size, resample) + + +def deform(image, deformer, resample=Image.BILINEAR): + """ + Deform the image. + + :param image: The image to deform. + :param deformer: A deformer object. Any object that implements a + ``getmesh`` method can be used. + :param resample: An optional resampling filter. Same values possible as + in the PIL.Image.transform function. + :return: An image. + """ + return image.transform(image.size, Image.MESH, deformer.getmesh(image), resample) + + +def equalize(image, mask=None): + """ + Equalize the image histogram. This function applies a non-linear + mapping to the input image, in order to create a uniform + distribution of grayscale values in the output image. + + :param image: The image to equalize. + :param mask: An optional mask. If given, only the pixels selected by + the mask are included in the analysis. + :return: An image. + """ + if image.mode == "P": + image = image.convert("RGB") + h = image.histogram(mask) + lut = [] + for b in range(0, len(h), 256): + histo = [_f for _f in h[b : b + 256] if _f] + if len(histo) <= 1: + lut.extend(list(range(256))) + else: + step = (functools.reduce(operator.add, histo) - histo[-1]) // 255 + if not step: + lut.extend(list(range(256))) + else: + n = step // 2 + for i in range(256): + lut.append(n // step) + n = n + h[i + b] + return _lut(image, lut) + + +def expand(image, border=0, fill=0): + """ + Add border to the image + + :param image: The image to expand. + :param border: Border width, in pixels. + :param fill: Pixel fill value (a color value). Default is 0 (black). + :return: An image. + """ + left, top, right, bottom = _border(border) + width = left + image.size[0] + right + height = top + image.size[1] + bottom + color = _color(fill, image.mode) + if image.mode == "P" and image.palette: + image.load() + palette = image.palette.copy() + if isinstance(color, tuple): + color = palette.getcolor(color) + else: + palette = None + out = Image.new(image.mode, (width, height), color) + if palette: + out.putpalette(palette.palette) + out.paste(image, (left, top)) + return out + + +def fit(image, size, method=Image.BICUBIC, bleed=0.0, centering=(0.5, 0.5)): + """ + Returns a resized and cropped version of the image, cropped to the + requested aspect ratio and size. + + This function was contributed by Kevin Cazabon. + + :param image: The image to resize and crop. + :param size: The requested output size in pixels, given as a + (width, height) tuple. + :param method: Resampling method to use. Default is + :py:attr:`PIL.Image.BICUBIC`. See :ref:`concept-filters`. + :param bleed: Remove a border around the outside of the image from all + four edges. The value is a decimal percentage (use 0.01 for + one percent). The default value is 0 (no border). + Cannot be greater than or equal to 0.5. + :param centering: Control the cropping position. Use (0.5, 0.5) for + center cropping (e.g. if cropping the width, take 50% off + of the left side, and therefore 50% off the right side). + (0.0, 0.0) will crop from the top left corner (i.e. if + cropping the width, take all of the crop off of the right + side, and if cropping the height, take all of it off the + bottom). (1.0, 0.0) will crop from the bottom left + corner, etc. (i.e. if cropping the width, take all of the + crop off the left side, and if cropping the height take + none from the top, and therefore all off the bottom). + :return: An image. + """ + + # by Kevin Cazabon, Feb 17/2000 + # kevin@cazabon.com + # http://www.cazabon.com + + # ensure centering is mutable + centering = list(centering) + + if not 0.0 <= centering[0] <= 1.0: + centering[0] = 0.5 + if not 0.0 <= centering[1] <= 1.0: + centering[1] = 0.5 + + if not 0.0 <= bleed < 0.5: + bleed = 0.0 + + # calculate the area to use for resizing and cropping, subtracting + # the 'bleed' around the edges + + # number of pixels to trim off on Top and Bottom, Left and Right + bleed_pixels = (bleed * image.size[0], bleed * image.size[1]) + + live_size = ( + image.size[0] - bleed_pixels[0] * 2, + image.size[1] - bleed_pixels[1] * 2, + ) + + # calculate the aspect ratio of the live_size + live_size_ratio = live_size[0] / live_size[1] + + # calculate the aspect ratio of the output image + output_ratio = size[0] / size[1] + + # figure out if the sides or top/bottom will be cropped off + if live_size_ratio == output_ratio: + # live_size is already the needed ratio + crop_width = live_size[0] + crop_height = live_size[1] + elif live_size_ratio >= output_ratio: + # live_size is wider than what's needed, crop the sides + crop_width = output_ratio * live_size[1] + crop_height = live_size[1] + else: + # live_size is taller than what's needed, crop the top and bottom + crop_width = live_size[0] + crop_height = live_size[0] / output_ratio + + # make the crop + crop_left = bleed_pixels[0] + (live_size[0] - crop_width) * centering[0] + crop_top = bleed_pixels[1] + (live_size[1] - crop_height) * centering[1] + + crop = (crop_left, crop_top, crop_left + crop_width, crop_top + crop_height) + + # resize the image and return it + return image.resize(size, method, box=crop) + + +def flip(image): + """ + Flip the image vertically (top to bottom). + + :param image: The image to flip. + :return: An image. + """ + return image.transpose(Image.FLIP_TOP_BOTTOM) + + +def grayscale(image): + """ + Convert the image to grayscale. + + :param image: The image to convert. + :return: An image. + """ + return image.convert("L") + + +def invert(image): + """ + Invert (negate) the image. + + :param image: The image to invert. + :return: An image. + """ + lut = [] + for i in range(256): + lut.append(255 - i) + return _lut(image, lut) + + +def mirror(image): + """ + Flip image horizontally (left to right). + + :param image: The image to mirror. + :return: An image. + """ + return image.transpose(Image.FLIP_LEFT_RIGHT) + + +def posterize(image, bits): + """ + Reduce the number of bits for each color channel. + + :param image: The image to posterize. + :param bits: The number of bits to keep for each channel (1-8). + :return: An image. + """ + lut = [] + mask = ~(2 ** (8 - bits) - 1) + for i in range(256): + lut.append(i & mask) + return _lut(image, lut) + + +def solarize(image, threshold=128): + """ + Invert all pixel values above a threshold. + + :param image: The image to solarize. + :param threshold: All pixels above this greyscale level are inverted. + :return: An image. + """ + lut = [] + for i in range(256): + if i < threshold: + lut.append(i) + else: + lut.append(255 - i) + return _lut(image, lut) + + +def exif_transpose(image): + """ + If an image has an EXIF Orientation tag, return a new image that is + transposed accordingly. Otherwise, return a copy of the image. + + :param image: The image to transpose. + :return: An image. + """ + exif = image.getexif() + orientation = exif.get(0x0112) + method = { + 2: Image.FLIP_LEFT_RIGHT, + 3: Image.ROTATE_180, + 4: Image.FLIP_TOP_BOTTOM, + 5: Image.TRANSPOSE, + 6: Image.ROTATE_270, + 7: Image.TRANSVERSE, + 8: Image.ROTATE_90, + }.get(orientation) + if method is not None: + transposed_image = image.transpose(method) + transposed_exif = transposed_image.getexif() + if 0x0112 in transposed_exif: + del transposed_exif[0x0112] + if "exif" in transposed_image.info: + transposed_image.info["exif"] = transposed_exif.tobytes() + elif "Raw profile type exif" in transposed_image.info: + transposed_image.info[ + "Raw profile type exif" + ] = transposed_exif.tobytes().hex() + elif "XML:com.adobe.xmp" in transposed_image.info: + transposed_image.info["XML:com.adobe.xmp"] = re.sub( + r'tiff:Orientation="([0-9])"', + "", + transposed_image.info["XML:com.adobe.xmp"], + ) + return transposed_image + return image.copy() diff --git a/.venv/lib/python3.9/site-packages/PIL/ImagePalette.py b/.venv/lib/python3.9/site-packages/PIL/ImagePalette.py new file mode 100644 index 00000000..36826bdf --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImagePalette.py @@ -0,0 +1,261 @@ +# +# The Python Imaging Library. +# $Id$ +# +# image palette object +# +# History: +# 1996-03-11 fl Rewritten. +# 1997-01-03 fl Up and running. +# 1997-08-23 fl Added load hack +# 2001-04-16 fl Fixed randint shadow bug in random() +# +# Copyright (c) 1997-2001 by Secret Labs AB +# Copyright (c) 1996-1997 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import array +import warnings + +from . import GimpGradientFile, GimpPaletteFile, ImageColor, PaletteFile + + +class ImagePalette: + """ + Color palette for palette mapped images + + :param mode: The mode to use for the palette. See: + :ref:`concept-modes`. Defaults to "RGB" + :param palette: An optional palette. If given, it must be a bytearray, + an array or a list of ints between 0-255. The list must consist of + all channels for one color followed by the next color (e.g. RGBRGBRGB). + Defaults to an empty palette. + :param size: An optional palette size. If given, an error is raised + if ``palette`` is not of equal length. + """ + + def __init__(self, mode="RGB", palette=None, size=0): + self.mode = mode + self.rawmode = None # if set, palette contains raw data + self.palette = palette or bytearray() + self.dirty = None + if size != 0: + warnings.warn( + "The size parameter is deprecated and will be removed in Pillow 10 " + "(2023-01-02).", + DeprecationWarning, + ) + if size != len(self.palette): + raise ValueError("wrong palette size") + + @property + def palette(self): + return self._palette + + @palette.setter + def palette(self, palette): + self._palette = palette + + mode_len = len(self.mode) + self.colors = {} + for i in range(0, len(self.palette), mode_len): + color = tuple(self.palette[i : i + mode_len]) + if color in self.colors: + continue + self.colors[color] = i // mode_len + + def copy(self): + new = ImagePalette() + + new.mode = self.mode + new.rawmode = self.rawmode + if self.palette is not None: + new.palette = self.palette[:] + new.dirty = self.dirty + + return new + + def getdata(self): + """ + Get palette contents in format suitable for the low-level + ``im.putpalette`` primitive. + + .. warning:: This method is experimental. + """ + if self.rawmode: + return self.rawmode, self.palette + return self.mode, self.tobytes() + + def tobytes(self): + """Convert palette to bytes. + + .. warning:: This method is experimental. + """ + if self.rawmode: + raise ValueError("palette contains raw palette data") + if isinstance(self.palette, bytes): + return self.palette + arr = array.array("B", self.palette) + return arr.tobytes() + + # Declare tostring as an alias for tobytes + tostring = tobytes + + def getcolor(self, color, image=None): + """Given an rgb tuple, allocate palette entry. + + .. warning:: This method is experimental. + """ + if self.rawmode: + raise ValueError("palette contains raw palette data") + if isinstance(color, tuple): + if self.mode == "RGB": + if len(color) == 4 and color[3] == 255: + color = color[:3] + elif self.mode == "RGBA": + if len(color) == 3: + color += (255,) + try: + return self.colors[color] + except KeyError as e: + # allocate new color slot + if not isinstance(self.palette, bytearray): + self._palette = bytearray(self.palette) + index = len(self.palette) // 3 + special_colors = () + if image: + special_colors = ( + image.info.get("background"), + image.info.get("transparency"), + ) + while index in special_colors: + index += 1 + if index >= 256: + if image: + # Search for an unused index + for i, count in reversed(list(enumerate(image.histogram()))): + if count == 0 and i not in special_colors: + index = i + break + if index >= 256: + raise ValueError("cannot allocate more than 256 colors") from e + self.colors[color] = index + if index * 3 < len(self.palette): + self._palette = ( + self.palette[: index * 3] + + bytes(color) + + self.palette[index * 3 + 3 :] + ) + else: + self._palette += bytes(color) + self.dirty = 1 + return index + else: + raise ValueError(f"unknown color specifier: {repr(color)}") + + def save(self, fp): + """Save palette to text file. + + .. warning:: This method is experimental. + """ + if self.rawmode: + raise ValueError("palette contains raw palette data") + if isinstance(fp, str): + fp = open(fp, "w") + fp.write("# Palette\n") + fp.write(f"# Mode: {self.mode}\n") + for i in range(256): + fp.write(f"{i}") + for j in range(i * len(self.mode), (i + 1) * len(self.mode)): + try: + fp.write(f" {self.palette[j]}") + except IndexError: + fp.write(" 0") + fp.write("\n") + fp.close() + + +# -------------------------------------------------------------------- +# Internal + + +def raw(rawmode, data): + palette = ImagePalette() + palette.rawmode = rawmode + palette.palette = data + palette.dirty = 1 + return palette + + +# -------------------------------------------------------------------- +# Factories + + +def make_linear_lut(black, white): + lut = [] + if black == 0: + for i in range(256): + lut.append(white * i // 255) + else: + raise NotImplementedError # FIXME + return lut + + +def make_gamma_lut(exp): + lut = [] + for i in range(256): + lut.append(int(((i / 255.0) ** exp) * 255.0 + 0.5)) + return lut + + +def negative(mode="RGB"): + palette = list(range(256 * len(mode))) + palette.reverse() + return ImagePalette(mode, [i // len(mode) for i in palette]) + + +def random(mode="RGB"): + from random import randint + + palette = [] + for i in range(256 * len(mode)): + palette.append(randint(0, 255)) + return ImagePalette(mode, palette) + + +def sepia(white="#fff0c0"): + bands = [make_linear_lut(0, band) for band in ImageColor.getrgb(white)] + return ImagePalette("RGB", [bands[i % 3][i // 3] for i in range(256 * 3)]) + + +def wedge(mode="RGB"): + palette = list(range(256 * len(mode))) + return ImagePalette(mode, [i // len(mode) for i in palette]) + + +def load(filename): + + # FIXME: supports GIMP gradients only + + with open(filename, "rb") as fp: + + for paletteHandler in [ + GimpPaletteFile.GimpPaletteFile, + GimpGradientFile.GimpGradientFile, + PaletteFile.PaletteFile, + ]: + try: + fp.seek(0) + lut = paletteHandler(fp).getpalette() + if lut: + break + except (SyntaxError, ValueError): + # import traceback + # traceback.print_exc() + pass + else: + raise OSError("cannot load palette") + + return lut # data, rawmode diff --git a/.venv/lib/python3.9/site-packages/PIL/ImagePath.py b/.venv/lib/python3.9/site-packages/PIL/ImagePath.py new file mode 100644 index 00000000..3d3538c9 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImagePath.py @@ -0,0 +1,19 @@ +# +# The Python Imaging Library +# $Id$ +# +# path interface +# +# History: +# 1996-11-04 fl Created +# 2002-04-14 fl Added documentation stub class +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# + +from . import Image + +Path = Image.core.path diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageQt.py b/.venv/lib/python3.9/site-packages/PIL/ImageQt.py new file mode 100644 index 00000000..32630f2c --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageQt.py @@ -0,0 +1,213 @@ +# +# The Python Imaging Library. +# $Id$ +# +# a simple Qt image interface. +# +# history: +# 2006-06-03 fl: created +# 2006-06-04 fl: inherit from QImage instead of wrapping it +# 2006-06-05 fl: removed toimage helper; move string support to ImageQt +# 2013-11-13 fl: add support for Qt5 (aurelien.ballier@cyclonit.com) +# +# Copyright (c) 2006 by Secret Labs AB +# Copyright (c) 2006 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import sys +from io import BytesIO + +from . import Image +from ._util import isPath + +qt_versions = [ + ["6", "PyQt6"], + ["side6", "PySide6"], + ["5", "PyQt5"], + ["side2", "PySide2"], +] + +# If a version has already been imported, attempt it first +qt_versions.sort(key=lambda qt_version: qt_version[1] in sys.modules, reverse=True) +for qt_version, qt_module in qt_versions: + try: + if qt_module == "PyQt6": + from PyQt6.QtCore import QBuffer, QIODevice + from PyQt6.QtGui import QImage, QPixmap, qRgba + elif qt_module == "PySide6": + from PySide6.QtCore import QBuffer, QIODevice + from PySide6.QtGui import QImage, QPixmap, qRgba + elif qt_module == "PyQt5": + from PyQt5.QtCore import QBuffer, QIODevice + from PyQt5.QtGui import QImage, QPixmap, qRgba + elif qt_module == "PySide2": + from PySide2.QtCore import QBuffer, QIODevice + from PySide2.QtGui import QImage, QPixmap, qRgba + except (ImportError, RuntimeError): + continue + qt_is_installed = True + break +else: + qt_is_installed = False + qt_version = None + + +def rgb(r, g, b, a=255): + """(Internal) Turns an RGB color into a Qt compatible color integer.""" + # use qRgb to pack the colors, and then turn the resulting long + # into a negative integer with the same bitpattern. + return qRgba(r, g, b, a) & 0xFFFFFFFF + + +def fromqimage(im): + """ + :param im: QImage or PIL ImageQt object + """ + buffer = QBuffer() + qt_openmode = QIODevice.OpenMode if qt_version == "6" else QIODevice + buffer.open(qt_openmode.ReadWrite) + # preserve alpha channel with png + # otherwise ppm is more friendly with Image.open + if im.hasAlphaChannel(): + im.save(buffer, "png") + else: + im.save(buffer, "ppm") + + b = BytesIO() + b.write(buffer.data()) + buffer.close() + b.seek(0) + + return Image.open(b) + + +def fromqpixmap(im): + return fromqimage(im) + # buffer = QBuffer() + # buffer.open(QIODevice.ReadWrite) + # # im.save(buffer) + # # What if png doesn't support some image features like animation? + # im.save(buffer, 'ppm') + # bytes_io = BytesIO() + # bytes_io.write(buffer.data()) + # buffer.close() + # bytes_io.seek(0) + # return Image.open(bytes_io) + + +def align8to32(bytes, width, mode): + """ + converts each scanline of data from 8 bit to 32 bit aligned + """ + + bits_per_pixel = {"1": 1, "L": 8, "P": 8}[mode] + + # calculate bytes per line and the extra padding if needed + bits_per_line = bits_per_pixel * width + full_bytes_per_line, remaining_bits_per_line = divmod(bits_per_line, 8) + bytes_per_line = full_bytes_per_line + (1 if remaining_bits_per_line else 0) + + extra_padding = -bytes_per_line % 4 + + # already 32 bit aligned by luck + if not extra_padding: + return bytes + + new_data = [] + for i in range(len(bytes) // bytes_per_line): + new_data.append( + bytes[i * bytes_per_line : (i + 1) * bytes_per_line] + + b"\x00" * extra_padding + ) + + return b"".join(new_data) + + +def _toqclass_helper(im): + data = None + colortable = None + exclusive_fp = False + + # handle filename, if given instead of image name + if hasattr(im, "toUtf8"): + # FIXME - is this really the best way to do this? + im = str(im.toUtf8(), "utf-8") + if isPath(im): + im = Image.open(im) + exclusive_fp = True + + qt_format = QImage.Format if qt_version == "6" else QImage + if im.mode == "1": + format = qt_format.Format_Mono + elif im.mode == "L": + format = qt_format.Format_Indexed8 + colortable = [] + for i in range(256): + colortable.append(rgb(i, i, i)) + elif im.mode == "P": + format = qt_format.Format_Indexed8 + colortable = [] + palette = im.getpalette() + for i in range(0, len(palette), 3): + colortable.append(rgb(*palette[i : i + 3])) + elif im.mode == "RGB": + # Populate the 4th channel with 255 + im = im.convert("RGBA") + + data = im.tobytes("raw", "BGRA") + format = qt_format.Format_RGB32 + elif im.mode == "RGBA": + data = im.tobytes("raw", "BGRA") + format = qt_format.Format_ARGB32 + else: + if exclusive_fp: + im.close() + raise ValueError(f"unsupported image mode {repr(im.mode)}") + + size = im.size + __data = data or align8to32(im.tobytes(), size[0], im.mode) + if exclusive_fp: + im.close() + return {"data": __data, "size": size, "format": format, "colortable": colortable} + + +if qt_is_installed: + + class ImageQt(QImage): + def __init__(self, im): + """ + An PIL image wrapper for Qt. This is a subclass of PyQt's QImage + class. + + :param im: A PIL Image object, or a file name (given either as + Python string or a PyQt string object). + """ + im_data = _toqclass_helper(im) + # must keep a reference, or Qt will crash! + # All QImage constructors that take data operate on an existing + # buffer, so this buffer has to hang on for the life of the image. + # Fixes https://github.com/python-pillow/Pillow/issues/1370 + self.__data = im_data["data"] + super().__init__( + self.__data, + im_data["size"][0], + im_data["size"][1], + im_data["format"], + ) + if im_data["colortable"]: + self.setColorTable(im_data["colortable"]) + + +def toqimage(im): + return ImageQt(im) + + +def toqpixmap(im): + # # This doesn't work. For now using a dumb approach. + # im_data = _toqclass_helper(im) + # result = QPixmap(im_data["size"][0], im_data["size"][1]) + # result.loadFromData(im_data["data"]) + qimage = toqimage(im) + return QPixmap.fromImage(qimage) diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageSequence.py b/.venv/lib/python3.9/site-packages/PIL/ImageSequence.py new file mode 100644 index 00000000..9df910a4 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageSequence.py @@ -0,0 +1,75 @@ +# +# The Python Imaging Library. +# $Id$ +# +# sequence support classes +# +# history: +# 1997-02-20 fl Created +# +# Copyright (c) 1997 by Secret Labs AB. +# Copyright (c) 1997 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +## + + +class Iterator: + """ + This class implements an iterator object that can be used to loop + over an image sequence. + + You can use the ``[]`` operator to access elements by index. This operator + will raise an :py:exc:`IndexError` if you try to access a nonexistent + frame. + + :param im: An image object. + """ + + def __init__(self, im): + if not hasattr(im, "seek"): + raise AttributeError("im must have seek method") + self.im = im + self.position = getattr(self.im, "_min_frame", 0) + + def __getitem__(self, ix): + try: + self.im.seek(ix) + return self.im + except EOFError as e: + raise IndexError from e # end of sequence + + def __iter__(self): + return self + + def __next__(self): + try: + self.im.seek(self.position) + self.position += 1 + return self.im + except EOFError as e: + raise StopIteration from e + + +def all_frames(im, func=None): + """ + Applies a given function to all frames in an image or a list of images. + The frames are returned as a list of separate images. + + :param im: An image, or a list of images. + :param func: The function to apply to all of the image frames. + :returns: A list of images. + """ + if not isinstance(im, list): + im = [im] + + ims = [] + for imSequence in im: + current = imSequence.tell() + + ims += [im_frame.copy() for im_frame in Iterator(imSequence)] + + imSequence.seek(current) + return [func(im) for im in ims] if func else ims diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageShow.py b/.venv/lib/python3.9/site-packages/PIL/ImageShow.py new file mode 100644 index 00000000..60c97542 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageShow.py @@ -0,0 +1,264 @@ +# +# The Python Imaging Library. +# $Id$ +# +# im.show() drivers +# +# History: +# 2008-04-06 fl Created +# +# Copyright (c) Secret Labs AB 2008. +# +# See the README file for information on usage and redistribution. +# +import os +import shutil +import subprocess +import sys +import tempfile +from shlex import quote + +from PIL import Image + +_viewers = [] + + +def register(viewer, order=1): + """ + The :py:func:`register` function is used to register additional viewers. + + :param viewer: The viewer to be registered. + :param order: + Zero or a negative integer to prepend this viewer to the list, + a positive integer to append it. + """ + try: + if issubclass(viewer, Viewer): + viewer = viewer() + except TypeError: + pass # raised if viewer wasn't a class + if order > 0: + _viewers.append(viewer) + else: + _viewers.insert(0, viewer) + + +def show(image, title=None, **options): + r""" + Display a given image. + + :param image: An image object. + :param title: Optional title. Not all viewers can display the title. + :param \**options: Additional viewer options. + :returns: ``True`` if a suitable viewer was found, ``False`` otherwise. + """ + for viewer in _viewers: + if viewer.show(image, title=title, **options): + return 1 + return 0 + + +class Viewer: + """Base class for viewers.""" + + # main api + + def show(self, image, **options): + """ + The main function for displaying an image. + Converts the given image to the target format and displays it. + """ + + if not ( + image.mode in ("1", "RGBA") + or (self.format == "PNG" and image.mode in ("I;16", "LA")) + ): + base = Image.getmodebase(image.mode) + if image.mode != base: + image = image.convert(base) + + return self.show_image(image, **options) + + # hook methods + + format = None + """The format to convert the image into.""" + options = {} + """Additional options used to convert the image.""" + + def get_format(self, image): + """Return format name, or ``None`` to save as PGM/PPM.""" + return self.format + + def get_command(self, file, **options): + """ + Returns the command used to display the file. + Not implemented in the base class. + """ + raise NotImplementedError + + def save_image(self, image): + """Save to temporary file and return filename.""" + return image._dump(format=self.get_format(image), **self.options) + + def show_image(self, image, **options): + """Display the given image.""" + return self.show_file(self.save_image(image), **options) + + def show_file(self, file, **options): + """Display the given file.""" + os.system(self.get_command(file, **options)) + return 1 + + +# -------------------------------------------------------------------- + + +class WindowsViewer(Viewer): + """The default viewer on Windows is the default system application for PNG files.""" + + format = "PNG" + options = {"compress_level": 1} + + def get_command(self, file, **options): + return ( + f'start "Pillow" /WAIT "{file}" ' + "&& ping -n 2 127.0.0.1 >NUL " + f'&& del /f "{file}"' + ) + + +if sys.platform == "win32": + register(WindowsViewer) + + +class MacViewer(Viewer): + """The default viewer on macOS using ``Preview.app``.""" + + format = "PNG" + options = {"compress_level": 1} + + def get_command(self, file, **options): + # on darwin open returns immediately resulting in the temp + # file removal while app is opening + command = "open -a Preview.app" + command = f"({command} {quote(file)}; sleep 20; rm -f {quote(file)})&" + return command + + def show_file(self, file, **options): + """Display given file""" + fd, path = tempfile.mkstemp() + with os.fdopen(fd, "w") as f: + f.write(file) + with open(path) as f: + subprocess.Popen( + ["im=$(cat); open -a Preview.app $im; sleep 20; rm -f $im"], + shell=True, + stdin=f, + ) + os.remove(path) + return 1 + + +if sys.platform == "darwin": + register(MacViewer) + + +class UnixViewer(Viewer): + format = "PNG" + options = {"compress_level": 1} + + def get_command(self, file, **options): + command = self.get_command_ex(file, **options)[0] + return f"({command} {quote(file)}; rm -f {quote(file)})&" + + def show_file(self, file, **options): + """Display given file""" + fd, path = tempfile.mkstemp() + with os.fdopen(fd, "w") as f: + f.write(file) + with open(path) as f: + command = self.get_command_ex(file, **options)[0] + subprocess.Popen( + ["im=$(cat);" + command + " $im; rm -f $im"], shell=True, stdin=f + ) + os.remove(path) + return 1 + + +class DisplayViewer(UnixViewer): + """The ImageMagick ``display`` command.""" + + def get_command_ex(self, file, **options): + command = executable = "display" + return command, executable + + +class GmDisplayViewer(UnixViewer): + """The GraphicsMagick ``gm display`` command.""" + + def get_command_ex(self, file, **options): + executable = "gm" + command = "gm display" + return command, executable + + +class EogViewer(UnixViewer): + """The GNOME Image Viewer ``eog`` command.""" + + def get_command_ex(self, file, **options): + executable = "eog" + command = "eog -n" + return command, executable + + +class XVViewer(UnixViewer): + """ + The X Viewer ``xv`` command. + This viewer supports the ``title`` parameter. + """ + + def get_command_ex(self, file, title=None, **options): + # note: xv is pretty outdated. most modern systems have + # imagemagick's display command instead. + command = executable = "xv" + if title: + command += f" -name {quote(title)}" + return command, executable + + +if sys.platform not in ("win32", "darwin"): # unixoids + if shutil.which("display"): + register(DisplayViewer) + if shutil.which("gm"): + register(GmDisplayViewer) + if shutil.which("eog"): + register(EogViewer) + if shutil.which("xv"): + register(XVViewer) + + +class IPythonViewer(Viewer): + """The viewer for IPython frontends.""" + + def show_image(self, image, **options): + ipython_display(image) + return 1 + + +try: + from IPython.display import display as ipython_display +except ImportError: + pass +else: + register(IPythonViewer) + + +if __name__ == "__main__": + + if len(sys.argv) < 2: + print("Syntax: python3 ImageShow.py imagefile [title]") + sys.exit() + + with Image.open(sys.argv[1]) as im: + print(show(im, *sys.argv[2:])) diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageStat.py b/.venv/lib/python3.9/site-packages/PIL/ImageStat.py new file mode 100644 index 00000000..50bafc97 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageStat.py @@ -0,0 +1,147 @@ +# +# The Python Imaging Library. +# $Id$ +# +# global image statistics +# +# History: +# 1996-04-05 fl Created +# 1997-05-21 fl Added mask; added rms, var, stddev attributes +# 1997-08-05 fl Added median +# 1998-07-05 hk Fixed integer overflow error +# +# Notes: +# This class shows how to implement delayed evaluation of attributes. +# To get a certain value, simply access the corresponding attribute. +# The __getattr__ dispatcher takes care of the rest. +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996-97. +# +# See the README file for information on usage and redistribution. +# + +import functools +import math +import operator + + +class Stat: + def __init__(self, image_or_list, mask=None): + try: + if mask: + self.h = image_or_list.histogram(mask) + else: + self.h = image_or_list.histogram() + except AttributeError: + self.h = image_or_list # assume it to be a histogram list + if not isinstance(self.h, list): + raise TypeError("first argument must be image or list") + self.bands = list(range(len(self.h) // 256)) + + def __getattr__(self, id): + """Calculate missing attribute""" + if id[:4] == "_get": + raise AttributeError(id) + # calculate missing attribute + v = getattr(self, "_get" + id)() + setattr(self, id, v) + return v + + def _getextrema(self): + """Get min/max values for each band in the image""" + + def minmax(histogram): + n = 255 + x = 0 + for i in range(256): + if histogram[i]: + n = min(n, i) + x = max(x, i) + return n, x # returns (255, 0) if there's no data in the histogram + + v = [] + for i in range(0, len(self.h), 256): + v.append(minmax(self.h[i:])) + return v + + def _getcount(self): + """Get total number of pixels in each layer""" + + v = [] + for i in range(0, len(self.h), 256): + v.append(functools.reduce(operator.add, self.h[i : i + 256])) + return v + + def _getsum(self): + """Get sum of all pixels in each layer""" + + v = [] + for i in range(0, len(self.h), 256): + layerSum = 0.0 + for j in range(256): + layerSum += j * self.h[i + j] + v.append(layerSum) + return v + + def _getsum2(self): + """Get squared sum of all pixels in each layer""" + + v = [] + for i in range(0, len(self.h), 256): + sum2 = 0.0 + for j in range(256): + sum2 += (j ** 2) * float(self.h[i + j]) + v.append(sum2) + return v + + def _getmean(self): + """Get average pixel level for each layer""" + + v = [] + for i in self.bands: + v.append(self.sum[i] / self.count[i]) + return v + + def _getmedian(self): + """Get median pixel level for each layer""" + + v = [] + for i in self.bands: + s = 0 + half = self.count[i] // 2 + b = i * 256 + for j in range(256): + s = s + self.h[b + j] + if s > half: + break + v.append(j) + return v + + def _getrms(self): + """Get RMS for each layer""" + + v = [] + for i in self.bands: + v.append(math.sqrt(self.sum2[i] / self.count[i])) + return v + + def _getvar(self): + """Get variance for each layer""" + + v = [] + for i in self.bands: + n = self.count[i] + v.append((self.sum2[i] - (self.sum[i] ** 2.0) / n) / n) + return v + + def _getstddev(self): + """Get standard deviation for each layer""" + + v = [] + for i in self.bands: + v.append(math.sqrt(self.var[i])) + return v + + +Global = Stat # compatibility diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageTk.py b/.venv/lib/python3.9/site-packages/PIL/ImageTk.py new file mode 100644 index 00000000..62db7a71 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageTk.py @@ -0,0 +1,300 @@ +# +# The Python Imaging Library. +# $Id$ +# +# a Tk display interface +# +# History: +# 96-04-08 fl Created +# 96-09-06 fl Added getimage method +# 96-11-01 fl Rewritten, removed image attribute and crop method +# 97-05-09 fl Use PyImagingPaste method instead of image type +# 97-05-12 fl Minor tweaks to match the IFUNC95 interface +# 97-05-17 fl Support the "pilbitmap" booster patch +# 97-06-05 fl Added file= and data= argument to image constructors +# 98-03-09 fl Added width and height methods to Image classes +# 98-07-02 fl Use default mode for "P" images without palette attribute +# 98-07-02 fl Explicitly destroy Tkinter image objects +# 99-07-24 fl Support multiple Tk interpreters (from Greg Couch) +# 99-07-26 fl Automatically hook into Tkinter (if possible) +# 99-08-15 fl Hook uses _imagingtk instead of _imaging +# +# Copyright (c) 1997-1999 by Secret Labs AB +# Copyright (c) 1996-1997 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import tkinter +from io import BytesIO + +from . import Image + +# -------------------------------------------------------------------- +# Check for Tkinter interface hooks + +_pilbitmap_ok = None + + +def _pilbitmap_check(): + global _pilbitmap_ok + if _pilbitmap_ok is None: + try: + im = Image.new("1", (1, 1)) + tkinter.BitmapImage(data=f"PIL:{im.im.id}") + _pilbitmap_ok = 1 + except tkinter.TclError: + _pilbitmap_ok = 0 + return _pilbitmap_ok + + +def _get_image_from_kw(kw): + source = None + if "file" in kw: + source = kw.pop("file") + elif "data" in kw: + source = BytesIO(kw.pop("data")) + if source: + return Image.open(source) + + +# -------------------------------------------------------------------- +# PhotoImage + + +class PhotoImage: + """ + A Tkinter-compatible photo image. This can be used + everywhere Tkinter expects an image object. If the image is an RGBA + image, pixels having alpha 0 are treated as transparent. + + The constructor takes either a PIL image, or a mode and a size. + Alternatively, you can use the ``file`` or ``data`` options to initialize + the photo image object. + + :param image: Either a PIL image, or a mode string. If a mode string is + used, a size must also be given. + :param size: If the first argument is a mode string, this defines the size + of the image. + :keyword file: A filename to load the image from (using + ``Image.open(file)``). + :keyword data: An 8-bit string containing image data (as loaded from an + image file). + """ + + def __init__(self, image=None, size=None, **kw): + + # Tk compatibility: file or data + if image is None: + image = _get_image_from_kw(kw) + + if hasattr(image, "mode") and hasattr(image, "size"): + # got an image instead of a mode + mode = image.mode + if mode == "P": + # palette mapped data + image.load() + try: + mode = image.palette.mode + except AttributeError: + mode = "RGB" # default + size = image.size + kw["width"], kw["height"] = size + else: + mode = image + image = None + + if mode not in ["1", "L", "RGB", "RGBA"]: + mode = Image.getmodebase(mode) + + self.__mode = mode + self.__size = size + self.__photo = tkinter.PhotoImage(**kw) + self.tk = self.__photo.tk + if image: + self.paste(image) + + def __del__(self): + name = self.__photo.name + self.__photo.name = None + try: + self.__photo.tk.call("image", "delete", name) + except Exception: + pass # ignore internal errors + + def __str__(self): + """ + Get the Tkinter photo image identifier. This method is automatically + called by Tkinter whenever a PhotoImage object is passed to a Tkinter + method. + + :return: A Tkinter photo image identifier (a string). + """ + return str(self.__photo) + + def width(self): + """ + Get the width of the image. + + :return: The width, in pixels. + """ + return self.__size[0] + + def height(self): + """ + Get the height of the image. + + :return: The height, in pixels. + """ + return self.__size[1] + + def paste(self, im, box=None): + """ + Paste a PIL image into the photo image. Note that this can + be very slow if the photo image is displayed. + + :param im: A PIL image. The size must match the target region. If the + mode does not match, the image is converted to the mode of + the bitmap image. + :param box: A 4-tuple defining the left, upper, right, and lower pixel + coordinate. See :ref:`coordinate-system`. If None is given + instead of a tuple, all of the image is assumed. + """ + + # convert to blittable + im.load() + image = im.im + if image.isblock() and im.mode == self.__mode: + block = image + else: + block = image.new_block(self.__mode, im.size) + image.convert2(block, image) # convert directly between buffers + + tk = self.__photo.tk + + try: + tk.call("PyImagingPhoto", self.__photo, block.id) + except tkinter.TclError: + # activate Tkinter hook + try: + from . import _imagingtk + + try: + if hasattr(tk, "interp"): + # Required for PyPy, which always has CFFI installed + from cffi import FFI + + ffi = FFI() + + # PyPy is using an FFI CDATA element + # (Pdb) self.tk.interp + # + _imagingtk.tkinit(int(ffi.cast("uintptr_t", tk.interp)), 1) + else: + _imagingtk.tkinit(tk.interpaddr(), 1) + except AttributeError: + _imagingtk.tkinit(id(tk), 0) + tk.call("PyImagingPhoto", self.__photo, block.id) + except (ImportError, AttributeError, tkinter.TclError): + raise # configuration problem; cannot attach to Tkinter + + +# -------------------------------------------------------------------- +# BitmapImage + + +class BitmapImage: + """ + A Tkinter-compatible bitmap image. This can be used everywhere Tkinter + expects an image object. + + The given image must have mode "1". Pixels having value 0 are treated as + transparent. Options, if any, are passed on to Tkinter. The most commonly + used option is ``foreground``, which is used to specify the color for the + non-transparent parts. See the Tkinter documentation for information on + how to specify colours. + + :param image: A PIL image. + """ + + def __init__(self, image=None, **kw): + + # Tk compatibility: file or data + if image is None: + image = _get_image_from_kw(kw) + + self.__mode = image.mode + self.__size = image.size + + if _pilbitmap_check(): + # fast way (requires the pilbitmap booster patch) + image.load() + kw["data"] = f"PIL:{image.im.id}" + self.__im = image # must keep a reference + else: + # slow but safe way + kw["data"] = image.tobitmap() + self.__photo = tkinter.BitmapImage(**kw) + + def __del__(self): + name = self.__photo.name + self.__photo.name = None + try: + self.__photo.tk.call("image", "delete", name) + except Exception: + pass # ignore internal errors + + def width(self): + """ + Get the width of the image. + + :return: The width, in pixels. + """ + return self.__size[0] + + def height(self): + """ + Get the height of the image. + + :return: The height, in pixels. + """ + return self.__size[1] + + def __str__(self): + """ + Get the Tkinter bitmap image identifier. This method is automatically + called by Tkinter whenever a BitmapImage object is passed to a Tkinter + method. + + :return: A Tkinter bitmap image identifier (a string). + """ + return str(self.__photo) + + +def getimage(photo): + """Copies the contents of a PhotoImage to a PIL image memory.""" + im = Image.new("RGBA", (photo.width(), photo.height())) + block = im.im + + photo.tk.call("PyImagingPhotoGet", photo, block.id) + + return im + + +def _show(image, title): + """Helper for the Image.show method.""" + + class UI(tkinter.Label): + def __init__(self, master, im): + if im.mode == "1": + self.image = BitmapImage(im, foreground="white", master=master) + else: + self.image = PhotoImage(im, master=master) + super().__init__(master, image=self.image, bg="black", bd=0) + + if not tkinter._default_root: + raise OSError("tkinter not initialized") + top = tkinter.Toplevel() + if title: + top.title(title) + UI(top, image).pack() diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageTransform.py b/.venv/lib/python3.9/site-packages/PIL/ImageTransform.py new file mode 100644 index 00000000..77791ab7 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageTransform.py @@ -0,0 +1,102 @@ +# +# The Python Imaging Library. +# $Id$ +# +# transform wrappers +# +# History: +# 2002-04-08 fl Created +# +# Copyright (c) 2002 by Secret Labs AB +# Copyright (c) 2002 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from . import Image + + +class Transform(Image.ImageTransformHandler): + def __init__(self, data): + self.data = data + + def getdata(self): + return self.method, self.data + + def transform(self, size, image, **options): + # can be overridden + method, data = self.getdata() + return image.transform(size, method, data, **options) + + +class AffineTransform(Transform): + """ + Define an affine image transform. + + This function takes a 6-tuple (a, b, c, d, e, f) which contain the first + two rows from an affine transform matrix. For each pixel (x, y) in the + output image, the new value is taken from a position (a x + b y + c, + d x + e y + f) in the input image, rounded to nearest pixel. + + This function can be used to scale, translate, rotate, and shear the + original image. + + See :py:meth:`~PIL.Image.Image.transform` + + :param matrix: A 6-tuple (a, b, c, d, e, f) containing the first two rows + from an affine transform matrix. + """ + + method = Image.AFFINE + + +class ExtentTransform(Transform): + """ + Define a transform to extract a subregion from an image. + + Maps a rectangle (defined by two corners) from the image to a rectangle of + the given size. The resulting image will contain data sampled from between + the corners, such that (x0, y0) in the input image will end up at (0,0) in + the output image, and (x1, y1) at size. + + This method can be used to crop, stretch, shrink, or mirror an arbitrary + rectangle in the current image. It is slightly slower than crop, but about + as fast as a corresponding resize operation. + + See :py:meth:`~PIL.Image.Image.transform` + + :param bbox: A 4-tuple (x0, y0, x1, y1) which specifies two points in the + input image's coordinate system. See :ref:`coordinate-system`. + """ + + method = Image.EXTENT + + +class QuadTransform(Transform): + """ + Define a quad image transform. + + Maps a quadrilateral (a region defined by four corners) from the image to a + rectangle of the given size. + + See :py:meth:`~PIL.Image.Image.transform` + + :param xy: An 8-tuple (x0, y0, x1, y1, x2, y2, x3, y3) which contain the + upper left, lower left, lower right, and upper right corner of the + source quadrilateral. + """ + + method = Image.QUAD + + +class MeshTransform(Transform): + """ + Define a mesh image transform. A mesh transform consists of one or more + individual quad transforms. + + See :py:meth:`~PIL.Image.Image.transform` + + :param data: A list of (bbox, quad) tuples. + """ + + method = Image.MESH diff --git a/.venv/lib/python3.9/site-packages/PIL/ImageWin.py b/.venv/lib/python3.9/site-packages/PIL/ImageWin.py new file mode 100644 index 00000000..ca9b14c8 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImageWin.py @@ -0,0 +1,230 @@ +# +# The Python Imaging Library. +# $Id$ +# +# a Windows DIB display interface +# +# History: +# 1996-05-20 fl Created +# 1996-09-20 fl Fixed subregion exposure +# 1997-09-21 fl Added draw primitive (for tzPrint) +# 2003-05-21 fl Added experimental Window/ImageWindow classes +# 2003-09-05 fl Added fromstring/tostring methods +# +# Copyright (c) Secret Labs AB 1997-2003. +# Copyright (c) Fredrik Lundh 1996-2003. +# +# See the README file for information on usage and redistribution. +# + +from . import Image + + +class HDC: + """ + Wraps an HDC integer. The resulting object can be passed to the + :py:meth:`~PIL.ImageWin.Dib.draw` and :py:meth:`~PIL.ImageWin.Dib.expose` + methods. + """ + + def __init__(self, dc): + self.dc = dc + + def __int__(self): + return self.dc + + +class HWND: + """ + Wraps an HWND integer. The resulting object can be passed to the + :py:meth:`~PIL.ImageWin.Dib.draw` and :py:meth:`~PIL.ImageWin.Dib.expose` + methods, instead of a DC. + """ + + def __init__(self, wnd): + self.wnd = wnd + + def __int__(self): + return self.wnd + + +class Dib: + """ + A Windows bitmap with the given mode and size. The mode can be one of "1", + "L", "P", or "RGB". + + If the display requires a palette, this constructor creates a suitable + palette and associates it with the image. For an "L" image, 128 greylevels + are allocated. For an "RGB" image, a 6x6x6 colour cube is used, together + with 20 greylevels. + + To make sure that palettes work properly under Windows, you must call the + ``palette`` method upon certain events from Windows. + + :param image: Either a PIL image, or a mode string. If a mode string is + used, a size must also be given. The mode can be one of "1", + "L", "P", or "RGB". + :param size: If the first argument is a mode string, this + defines the size of the image. + """ + + def __init__(self, image, size=None): + if hasattr(image, "mode") and hasattr(image, "size"): + mode = image.mode + size = image.size + else: + mode = image + image = None + if mode not in ["1", "L", "P", "RGB"]: + mode = Image.getmodebase(mode) + self.image = Image.core.display(mode, size) + self.mode = mode + self.size = size + if image: + self.paste(image) + + def expose(self, handle): + """ + Copy the bitmap contents to a device context. + + :param handle: Device context (HDC), cast to a Python integer, or an + HDC or HWND instance. In PythonWin, you can use + ``CDC.GetHandleAttrib()`` to get a suitable handle. + """ + if isinstance(handle, HWND): + dc = self.image.getdc(handle) + try: + result = self.image.expose(dc) + finally: + self.image.releasedc(handle, dc) + else: + result = self.image.expose(handle) + return result + + def draw(self, handle, dst, src=None): + """ + Same as expose, but allows you to specify where to draw the image, and + what part of it to draw. + + The destination and source areas are given as 4-tuple rectangles. If + the source is omitted, the entire image is copied. If the source and + the destination have different sizes, the image is resized as + necessary. + """ + if not src: + src = (0, 0) + self.size + if isinstance(handle, HWND): + dc = self.image.getdc(handle) + try: + result = self.image.draw(dc, dst, src) + finally: + self.image.releasedc(handle, dc) + else: + result = self.image.draw(handle, dst, src) + return result + + def query_palette(self, handle): + """ + Installs the palette associated with the image in the given device + context. + + This method should be called upon **QUERYNEWPALETTE** and + **PALETTECHANGED** events from Windows. If this method returns a + non-zero value, one or more display palette entries were changed, and + the image should be redrawn. + + :param handle: Device context (HDC), cast to a Python integer, or an + HDC or HWND instance. + :return: A true value if one or more entries were changed (this + indicates that the image should be redrawn). + """ + if isinstance(handle, HWND): + handle = self.image.getdc(handle) + try: + result = self.image.query_palette(handle) + finally: + self.image.releasedc(handle, handle) + else: + result = self.image.query_palette(handle) + return result + + def paste(self, im, box=None): + """ + Paste a PIL image into the bitmap image. + + :param im: A PIL image. The size must match the target region. + If the mode does not match, the image is converted to the + mode of the bitmap image. + :param box: A 4-tuple defining the left, upper, right, and + lower pixel coordinate. See :ref:`coordinate-system`. If + None is given instead of a tuple, all of the image is + assumed. + """ + im.load() + if self.mode != im.mode: + im = im.convert(self.mode) + if box: + self.image.paste(im.im, box) + else: + self.image.paste(im.im) + + def frombytes(self, buffer): + """ + Load display memory contents from byte data. + + :param buffer: A buffer containing display data (usually + data returned from :py:func:`~PIL.ImageWin.Dib.tobytes`) + """ + return self.image.frombytes(buffer) + + def tobytes(self): + """ + Copy display memory contents to bytes object. + + :return: A bytes object containing display data. + """ + return self.image.tobytes() + + +class Window: + """Create a Window with the given title size.""" + + def __init__(self, title="PIL", width=None, height=None): + self.hwnd = Image.core.createwindow( + title, self.__dispatcher, width or 0, height or 0 + ) + + def __dispatcher(self, action, *args): + return getattr(self, "ui_handle_" + action)(*args) + + def ui_handle_clear(self, dc, x0, y0, x1, y1): + pass + + def ui_handle_damage(self, x0, y0, x1, y1): + pass + + def ui_handle_destroy(self): + pass + + def ui_handle_repair(self, dc, x0, y0, x1, y1): + pass + + def ui_handle_resize(self, width, height): + pass + + def mainloop(self): + Image.core.eventloop() + + +class ImageWindow(Window): + """Create an image window which displays the given image.""" + + def __init__(self, image, title="PIL"): + if not isinstance(image, Dib): + image = Dib(image) + self.image = image + width, height = image.size + super().__init__(title, width=width, height=height) + + def ui_handle_repair(self, dc, x0, y0, x1, y1): + self.image.draw(dc, (x0, y0, x1, y1)) diff --git a/.venv/lib/python3.9/site-packages/PIL/ImtImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/ImtImagePlugin.py new file mode 100644 index 00000000..21ffd747 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/ImtImagePlugin.py @@ -0,0 +1,93 @@ +# +# The Python Imaging Library. +# $Id$ +# +# IM Tools support for PIL +# +# history: +# 1996-05-27 fl Created (read 8-bit images only) +# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.2) +# +# Copyright (c) Secret Labs AB 1997-2001. +# Copyright (c) Fredrik Lundh 1996-2001. +# +# See the README file for information on usage and redistribution. +# + + +import re + +from . import Image, ImageFile + +# +# -------------------------------------------------------------------- + +field = re.compile(br"([a-z]*) ([^ \r\n]*)") + + +## +# Image plugin for IM Tools images. + + +class ImtImageFile(ImageFile.ImageFile): + + format = "IMT" + format_description = "IM Tools" + + def _open(self): + + # Quick rejection: if there's not a LF among the first + # 100 bytes, this is (probably) not a text header. + + if b"\n" not in self.fp.read(100): + raise SyntaxError("not an IM file") + self.fp.seek(0) + + xsize = ysize = 0 + + while True: + + s = self.fp.read(1) + if not s: + break + + if s == b"\x0C": + + # image data begins + self.tile = [ + ("raw", (0, 0) + self.size, self.fp.tell(), (self.mode, 0, 1)) + ] + + break + + else: + + # read key/value pair + # FIXME: dangerous, may read whole file + s = s + self.fp.readline() + if len(s) == 1 or len(s) > 100: + break + if s[0] == ord(b"*"): + continue # comment + + m = field.match(s) + if not m: + break + k, v = m.group(1, 2) + if k == "width": + xsize = int(v) + self._size = xsize, ysize + elif k == "height": + ysize = int(v) + self._size = xsize, ysize + elif k == "pixel" and v == "n8": + self.mode = "L" + + +# +# -------------------------------------------------------------------- + +Image.register_open(ImtImageFile.format, ImtImageFile) + +# +# no extension registered (".im" is simply too common) diff --git a/.venv/lib/python3.9/site-packages/PIL/IptcImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/IptcImagePlugin.py new file mode 100644 index 00000000..0bbe5066 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/IptcImagePlugin.py @@ -0,0 +1,230 @@ +# +# The Python Imaging Library. +# $Id$ +# +# IPTC/NAA file handling +# +# history: +# 1995-10-01 fl Created +# 1998-03-09 fl Cleaned up and added to PIL +# 2002-06-18 fl Added getiptcinfo helper +# +# Copyright (c) Secret Labs AB 1997-2002. +# Copyright (c) Fredrik Lundh 1995. +# +# See the README file for information on usage and redistribution. +# +import os +import tempfile + +from . import Image, ImageFile +from ._binary import i8 +from ._binary import i16be as i16 +from ._binary import i32be as i32 +from ._binary import o8 + +COMPRESSION = {1: "raw", 5: "jpeg"} + +PAD = o8(0) * 4 + + +# +# Helpers + + +def i(c): + return i32((PAD + c)[-4:]) + + +def dump(c): + for i in c: + print("%02x" % i8(i), end=" ") + print() + + +## +# Image plugin for IPTC/NAA datastreams. To read IPTC/NAA fields +# from TIFF and JPEG files, use the getiptcinfo function. + + +class IptcImageFile(ImageFile.ImageFile): + + format = "IPTC" + format_description = "IPTC/NAA" + + def getint(self, key): + return i(self.info[key]) + + def field(self): + # + # get a IPTC field header + s = self.fp.read(5) + if not len(s): + return None, 0 + + tag = s[1], s[2] + + # syntax + if s[0] != 0x1C or tag[0] < 1 or tag[0] > 9: + raise SyntaxError("invalid IPTC/NAA file") + + # field size + size = s[3] + if size > 132: + raise OSError("illegal field length in IPTC/NAA file") + elif size == 128: + size = 0 + elif size > 128: + size = i(self.fp.read(size - 128)) + else: + size = i16(s, 3) + + return tag, size + + def _open(self): + + # load descriptive fields + while True: + offset = self.fp.tell() + tag, size = self.field() + if not tag or tag == (8, 10): + break + if size: + tagdata = self.fp.read(size) + else: + tagdata = None + if tag in self.info: + if isinstance(self.info[tag], list): + self.info[tag].append(tagdata) + else: + self.info[tag] = [self.info[tag], tagdata] + else: + self.info[tag] = tagdata + + # mode + layers = i8(self.info[(3, 60)][0]) + component = i8(self.info[(3, 60)][1]) + if (3, 65) in self.info: + id = i8(self.info[(3, 65)][0]) - 1 + else: + id = 0 + if layers == 1 and not component: + self.mode = "L" + elif layers == 3 and component: + self.mode = "RGB"[id] + elif layers == 4 and component: + self.mode = "CMYK"[id] + + # size + self._size = self.getint((3, 20)), self.getint((3, 30)) + + # compression + try: + compression = COMPRESSION[self.getint((3, 120))] + except KeyError as e: + raise OSError("Unknown IPTC image compression") from e + + # tile + if tag == (8, 10): + self.tile = [ + ("iptc", (compression, offset), (0, 0, self.size[0], self.size[1])) + ] + + def load(self): + + if len(self.tile) != 1 or self.tile[0][0] != "iptc": + return ImageFile.ImageFile.load(self) + + type, tile, box = self.tile[0] + + encoding, offset = tile + + self.fp.seek(offset) + + # Copy image data to temporary file + o_fd, outfile = tempfile.mkstemp(text=False) + o = os.fdopen(o_fd) + if encoding == "raw": + # To simplify access to the extracted file, + # prepend a PPM header + o.write("P5\n%d %d\n255\n" % self.size) + while True: + type, size = self.field() + if type != (8, 10): + break + while size > 0: + s = self.fp.read(min(size, 8192)) + if not s: + break + o.write(s) + size -= len(s) + o.close() + + try: + with Image.open(outfile) as _im: + _im.load() + self.im = _im.im + finally: + try: + os.unlink(outfile) + except OSError: + pass + + +Image.register_open(IptcImageFile.format, IptcImageFile) + +Image.register_extension(IptcImageFile.format, ".iim") + + +def getiptcinfo(im): + """ + Get IPTC information from TIFF, JPEG, or IPTC file. + + :param im: An image containing IPTC data. + :returns: A dictionary containing IPTC information, or None if + no IPTC information block was found. + """ + import io + + from . import JpegImagePlugin, TiffImagePlugin + + data = None + + if isinstance(im, IptcImageFile): + # return info dictionary right away + return im.info + + elif isinstance(im, JpegImagePlugin.JpegImageFile): + # extract the IPTC/NAA resource + photoshop = im.info.get("photoshop") + if photoshop: + data = photoshop.get(0x0404) + + elif isinstance(im, TiffImagePlugin.TiffImageFile): + # get raw data from the IPTC/NAA tag (PhotoShop tags the data + # as 4-byte integers, so we cannot use the get method...) + try: + data = im.tag.tagdata[TiffImagePlugin.IPTC_NAA_CHUNK] + except (AttributeError, KeyError): + pass + + if data is None: + return None # no properties + + # create an IptcImagePlugin object without initializing it + class FakeImage: + pass + + im = FakeImage() + im.__class__ = IptcImageFile + + # parse the IPTC information chunk + im.info = {} + im.fp = io.BytesIO(data) + + try: + im._open() + except (IndexError, KeyError): + pass # expected failure + + return im.info diff --git a/.venv/lib/python3.9/site-packages/PIL/Jpeg2KImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/Jpeg2KImagePlugin.py new file mode 100644 index 00000000..cc798027 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/Jpeg2KImagePlugin.py @@ -0,0 +1,360 @@ +# +# The Python Imaging Library +# $Id$ +# +# JPEG2000 file handling +# +# History: +# 2014-03-12 ajh Created +# 2021-06-30 rogermb Extract dpi information from the 'resc' header box +# +# Copyright (c) 2014 Coriolis Systems Limited +# Copyright (c) 2014 Alastair Houghton +# +# See the README file for information on usage and redistribution. +# +import io +import os +import struct + +from . import Image, ImageFile + + +class BoxReader: + """ + A small helper class to read fields stored in JPEG2000 header boxes + and to easily step into and read sub-boxes. + """ + + def __init__(self, fp, length=-1): + self.fp = fp + self.has_length = length >= 0 + self.length = length + self.remaining_in_box = -1 + + def _can_read(self, num_bytes): + if self.has_length and self.fp.tell() + num_bytes > self.length: + # Outside box: ensure we don't read past the known file length + return False + if self.remaining_in_box >= 0: + # Inside box contents: ensure read does not go past box boundaries + return num_bytes <= self.remaining_in_box + else: + return True # No length known, just read + + def _read_bytes(self, num_bytes): + if not self._can_read(num_bytes): + raise SyntaxError("Not enough data in header") + + data = self.fp.read(num_bytes) + if len(data) < num_bytes: + raise OSError( + f"Expected to read {num_bytes} bytes but only got {len(data)}." + ) + + if self.remaining_in_box > 0: + self.remaining_in_box -= num_bytes + return data + + def read_fields(self, field_format): + size = struct.calcsize(field_format) + data = self._read_bytes(size) + return struct.unpack(field_format, data) + + def read_boxes(self): + size = self.remaining_in_box + data = self._read_bytes(size) + return BoxReader(io.BytesIO(data), size) + + def has_next_box(self): + if self.has_length: + return self.fp.tell() + self.remaining_in_box < self.length + else: + return True + + def next_box_type(self): + # Skip the rest of the box if it has not been read + if self.remaining_in_box > 0: + self.fp.seek(self.remaining_in_box, os.SEEK_CUR) + self.remaining_in_box = -1 + + # Read the length and type of the next box + lbox, tbox = self.read_fields(">I4s") + if lbox == 1: + lbox = self.read_fields(">Q")[0] + hlen = 16 + else: + hlen = 8 + + if lbox < hlen or not self._can_read(lbox - hlen): + raise SyntaxError("Invalid header length") + + self.remaining_in_box = lbox - hlen + return tbox + + +def _parse_codestream(fp): + """Parse the JPEG 2000 codestream to extract the size and component + count from the SIZ marker segment, returning a PIL (size, mode) tuple.""" + + hdr = fp.read(2) + lsiz = struct.unpack(">H", hdr)[0] + siz = hdr + fp.read(lsiz - 2) + lsiz, rsiz, xsiz, ysiz, xosiz, yosiz, _, _, _, _, csiz = struct.unpack_from( + ">HHIIIIIIIIH", siz + ) + ssiz = [None] * csiz + xrsiz = [None] * csiz + yrsiz = [None] * csiz + for i in range(csiz): + ssiz[i], xrsiz[i], yrsiz[i] = struct.unpack_from(">BBB", siz, 36 + 3 * i) + + size = (xsiz - xosiz, ysiz - yosiz) + if csiz == 1: + if (yrsiz[0] & 0x7F) > 8: + mode = "I;16" + else: + mode = "L" + elif csiz == 2: + mode = "LA" + elif csiz == 3: + mode = "RGB" + elif csiz == 4: + mode = "RGBA" + else: + mode = None + + return (size, mode) + + +def _res_to_dpi(num, denom, exp): + """Convert JPEG2000's (numerator, denominator, exponent-base-10) resolution, + calculated as (num / denom) * 10^exp and stored in dots per meter, + to floating-point dots per inch.""" + if denom != 0: + return (254 * num * (10 ** exp)) / (10000 * denom) + + +def _parse_jp2_header(fp): + """Parse the JP2 header box to extract size, component count, + color space information, and optionally DPI information, + returning a (size, mode, mimetype, dpi) tuple.""" + + # Find the JP2 header box + reader = BoxReader(fp) + header = None + mimetype = None + while reader.has_next_box(): + tbox = reader.next_box_type() + + if tbox == b"jp2h": + header = reader.read_boxes() + break + elif tbox == b"ftyp": + if reader.read_fields(">4s")[0] == b"jpx ": + mimetype = "image/jpx" + + size = None + mode = None + bpc = None + nc = None + dpi = None # 2-tuple of DPI info, or None + + while header.has_next_box(): + tbox = header.next_box_type() + + if tbox == b"ihdr": + height, width, nc, bpc = header.read_fields(">IIHB") + size = (width, height) + if nc == 1 and (bpc & 0x7F) > 8: + mode = "I;16" + elif nc == 1: + mode = "L" + elif nc == 2: + mode = "LA" + elif nc == 3: + mode = "RGB" + elif nc == 4: + mode = "RGBA" + elif tbox == b"res ": + res = header.read_boxes() + while res.has_next_box(): + tres = res.next_box_type() + if tres == b"resc": + vrcn, vrcd, hrcn, hrcd, vrce, hrce = res.read_fields(">HHHHBB") + hres = _res_to_dpi(hrcn, hrcd, hrce) + vres = _res_to_dpi(vrcn, vrcd, vrce) + if hres is not None and vres is not None: + dpi = (hres, vres) + break + + if size is None or mode is None: + raise SyntaxError("Malformed JP2 header") + + return (size, mode, mimetype, dpi) + + +## +# Image plugin for JPEG2000 images. + + +class Jpeg2KImageFile(ImageFile.ImageFile): + format = "JPEG2000" + format_description = "JPEG 2000 (ISO 15444)" + + def _open(self): + sig = self.fp.read(4) + if sig == b"\xff\x4f\xff\x51": + self.codec = "j2k" + self._size, self.mode = _parse_codestream(self.fp) + else: + sig = sig + self.fp.read(8) + + if sig == b"\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a": + self.codec = "jp2" + header = _parse_jp2_header(self.fp) + self._size, self.mode, self.custom_mimetype, dpi = header + if dpi is not None: + self.info["dpi"] = dpi + else: + raise SyntaxError("not a JPEG 2000 file") + + if self.size is None or self.mode is None: + raise SyntaxError("unable to determine size/mode") + + self._reduce = 0 + self.layers = 0 + + fd = -1 + length = -1 + + try: + fd = self.fp.fileno() + length = os.fstat(fd).st_size + except Exception: + fd = -1 + try: + pos = self.fp.tell() + self.fp.seek(0, io.SEEK_END) + length = self.fp.tell() + self.fp.seek(pos) + except Exception: + length = -1 + + self.tile = [ + ( + "jpeg2k", + (0, 0) + self.size, + 0, + (self.codec, self._reduce, self.layers, fd, length), + ) + ] + + @property + def reduce(self): + # https://github.com/python-pillow/Pillow/issues/4343 found that the + # new Image 'reduce' method was shadowed by this plugin's 'reduce' + # property. This attempts to allow for both scenarios + return self._reduce or super().reduce + + @reduce.setter + def reduce(self, value): + self._reduce = value + + def load(self): + if self.tile and self._reduce: + power = 1 << self._reduce + adjust = power >> 1 + self._size = ( + int((self.size[0] + adjust) / power), + int((self.size[1] + adjust) / power), + ) + + # Update the reduce and layers settings + t = self.tile[0] + t3 = (t[3][0], self._reduce, self.layers, t[3][3], t[3][4]) + self.tile = [(t[0], (0, 0) + self.size, t[2], t3)] + + return ImageFile.ImageFile.load(self) + + +def _accept(prefix): + return ( + prefix[:4] == b"\xff\x4f\xff\x51" + or prefix[:12] == b"\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a" + ) + + +# ------------------------------------------------------------ +# Save support + + +def _save(im, fp, filename): + if filename.endswith(".j2k"): + kind = "j2k" + else: + kind = "jp2" + + # Get the keyword arguments + info = im.encoderinfo + + offset = info.get("offset", None) + tile_offset = info.get("tile_offset", None) + tile_size = info.get("tile_size", None) + quality_mode = info.get("quality_mode", "rates") + quality_layers = info.get("quality_layers", None) + if quality_layers is not None and not ( + isinstance(quality_layers, (list, tuple)) + and all( + [ + isinstance(quality_layer, (int, float)) + for quality_layer in quality_layers + ] + ) + ): + raise ValueError("quality_layers must be a sequence of numbers") + + num_resolutions = info.get("num_resolutions", 0) + cblk_size = info.get("codeblock_size", None) + precinct_size = info.get("precinct_size", None) + irreversible = info.get("irreversible", False) + progression = info.get("progression", "LRCP") + cinema_mode = info.get("cinema_mode", "no") + fd = -1 + + if hasattr(fp, "fileno"): + try: + fd = fp.fileno() + except Exception: + fd = -1 + + im.encoderconfig = ( + offset, + tile_offset, + tile_size, + quality_mode, + quality_layers, + num_resolutions, + cblk_size, + precinct_size, + irreversible, + progression, + cinema_mode, + fd, + ) + + ImageFile._save(im, fp, [("jpeg2k", (0, 0) + im.size, 0, kind)]) + + +# ------------------------------------------------------------ +# Registry stuff + + +Image.register_open(Jpeg2KImageFile.format, Jpeg2KImageFile, _accept) +Image.register_save(Jpeg2KImageFile.format, _save) + +Image.register_extensions( + Jpeg2KImageFile.format, [".jp2", ".j2k", ".jpc", ".jpf", ".jpx", ".j2c"] +) + +Image.register_mime(Jpeg2KImageFile.format, "image/jp2") diff --git a/.venv/lib/python3.9/site-packages/PIL/JpegImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/JpegImagePlugin.py new file mode 100644 index 00000000..b8674eee --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/JpegImagePlugin.py @@ -0,0 +1,826 @@ +# +# The Python Imaging Library. +# $Id$ +# +# JPEG (JFIF) file handling +# +# See "Digital Compression and Coding of Continuous-Tone Still Images, +# Part 1, Requirements and Guidelines" (CCITT T.81 / ISO 10918-1) +# +# History: +# 1995-09-09 fl Created +# 1995-09-13 fl Added full parser +# 1996-03-25 fl Added hack to use the IJG command line utilities +# 1996-05-05 fl Workaround Photoshop 2.5 CMYK polarity bug +# 1996-05-28 fl Added draft support, JFIF version (0.1) +# 1996-12-30 fl Added encoder options, added progression property (0.2) +# 1997-08-27 fl Save mode 1 images as BW (0.3) +# 1998-07-12 fl Added YCbCr to draft and save methods (0.4) +# 1998-10-19 fl Don't hang on files using 16-bit DQT's (0.4.1) +# 2001-04-16 fl Extract DPI settings from JFIF files (0.4.2) +# 2002-07-01 fl Skip pad bytes before markers; identify Exif files (0.4.3) +# 2003-04-25 fl Added experimental EXIF decoder (0.5) +# 2003-06-06 fl Added experimental EXIF GPSinfo decoder +# 2003-09-13 fl Extract COM markers +# 2009-09-06 fl Added icc_profile support (from Florian Hoech) +# 2009-03-06 fl Changed CMYK handling; always use Adobe polarity (0.6) +# 2009-03-08 fl Added subsampling support (from Justin Huff). +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1995-1996 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# +import array +import io +import math +import os +import struct +import subprocess +import sys +import tempfile +import warnings + +from . import Image, ImageFile, TiffImagePlugin +from ._binary import i16be as i16 +from ._binary import i32be as i32 +from ._binary import o8 +from .JpegPresets import presets + +# +# Parser + + +def Skip(self, marker): + n = i16(self.fp.read(2)) - 2 + ImageFile._safe_read(self.fp, n) + + +def APP(self, marker): + # + # Application marker. Store these in the APP dictionary. + # Also look for well-known application markers. + + n = i16(self.fp.read(2)) - 2 + s = ImageFile._safe_read(self.fp, n) + + app = "APP%d" % (marker & 15) + + self.app[app] = s # compatibility + self.applist.append((app, s)) + + if marker == 0xFFE0 and s[:4] == b"JFIF": + # extract JFIF information + self.info["jfif"] = version = i16(s, 5) # version + self.info["jfif_version"] = divmod(version, 256) + # extract JFIF properties + try: + jfif_unit = s[7] + jfif_density = i16(s, 8), i16(s, 10) + except Exception: + pass + else: + if jfif_unit == 1: + self.info["dpi"] = jfif_density + self.info["jfif_unit"] = jfif_unit + self.info["jfif_density"] = jfif_density + elif marker == 0xFFE1 and s[:5] == b"Exif\0": + if "exif" not in self.info: + # extract EXIF information (incomplete) + self.info["exif"] = s # FIXME: value will change + elif marker == 0xFFE2 and s[:5] == b"FPXR\0": + # extract FlashPix information (incomplete) + self.info["flashpix"] = s # FIXME: value will change + elif marker == 0xFFE2 and s[:12] == b"ICC_PROFILE\0": + # Since an ICC profile can be larger than the maximum size of + # a JPEG marker (64K), we need provisions to split it into + # multiple markers. The format defined by the ICC specifies + # one or more APP2 markers containing the following data: + # Identifying string ASCII "ICC_PROFILE\0" (12 bytes) + # Marker sequence number 1, 2, etc (1 byte) + # Number of markers Total of APP2's used (1 byte) + # Profile data (remainder of APP2 data) + # Decoders should use the marker sequence numbers to + # reassemble the profile, rather than assuming that the APP2 + # markers appear in the correct sequence. + self.icclist.append(s) + elif marker == 0xFFED and s[:14] == b"Photoshop 3.0\x00": + # parse the image resource block + offset = 14 + photoshop = self.info.setdefault("photoshop", {}) + while s[offset : offset + 4] == b"8BIM": + try: + offset += 4 + # resource code + code = i16(s, offset) + offset += 2 + # resource name (usually empty) + name_len = s[offset] + # name = s[offset+1:offset+1+name_len] + offset += 1 + name_len + offset += offset & 1 # align + # resource data block + size = i32(s, offset) + offset += 4 + data = s[offset : offset + size] + if code == 0x03ED: # ResolutionInfo + data = { + "XResolution": i32(data, 0) / 65536, + "DisplayedUnitsX": i16(data, 4), + "YResolution": i32(data, 8) / 65536, + "DisplayedUnitsY": i16(data, 12), + } + photoshop[code] = data + offset += size + offset += offset & 1 # align + except struct.error: + break # insufficient data + + elif marker == 0xFFEE and s[:5] == b"Adobe": + self.info["adobe"] = i16(s, 5) + # extract Adobe custom properties + try: + adobe_transform = s[11] + except IndexError: + pass + else: + self.info["adobe_transform"] = adobe_transform + elif marker == 0xFFE2 and s[:4] == b"MPF\0": + # extract MPO information + self.info["mp"] = s[4:] + # offset is current location minus buffer size + # plus constant header size + self.info["mpoffset"] = self.fp.tell() - n + 4 + + # If DPI isn't in JPEG header, fetch from EXIF + if "dpi" not in self.info and "exif" in self.info: + try: + exif = self.getexif() + resolution_unit = exif[0x0128] + x_resolution = exif[0x011A] + try: + dpi = float(x_resolution[0]) / x_resolution[1] + except TypeError: + dpi = x_resolution + if math.isnan(dpi): + raise ValueError + if resolution_unit == 3: # cm + # 1 dpcm = 2.54 dpi + dpi *= 2.54 + self.info["dpi"] = dpi, dpi + except (TypeError, KeyError, SyntaxError, ValueError, ZeroDivisionError): + # SyntaxError for invalid/unreadable EXIF + # KeyError for dpi not included + # ZeroDivisionError for invalid dpi rational value + # ValueError or TypeError for dpi being an invalid float + self.info["dpi"] = 72, 72 + + +def COM(self, marker): + # + # Comment marker. Store these in the APP dictionary. + n = i16(self.fp.read(2)) - 2 + s = ImageFile._safe_read(self.fp, n) + + self.info["comment"] = s + self.app["COM"] = s # compatibility + self.applist.append(("COM", s)) + + +def SOF(self, marker): + # + # Start of frame marker. Defines the size and mode of the + # image. JPEG is colour blind, so we use some simple + # heuristics to map the number of layers to an appropriate + # mode. Note that this could be made a bit brighter, by + # looking for JFIF and Adobe APP markers. + + n = i16(self.fp.read(2)) - 2 + s = ImageFile._safe_read(self.fp, n) + self._size = i16(s, 3), i16(s, 1) + + self.bits = s[0] + if self.bits != 8: + raise SyntaxError(f"cannot handle {self.bits}-bit layers") + + self.layers = s[5] + if self.layers == 1: + self.mode = "L" + elif self.layers == 3: + self.mode = "RGB" + elif self.layers == 4: + self.mode = "CMYK" + else: + raise SyntaxError(f"cannot handle {self.layers}-layer images") + + if marker in [0xFFC2, 0xFFC6, 0xFFCA, 0xFFCE]: + self.info["progressive"] = self.info["progression"] = 1 + + if self.icclist: + # fixup icc profile + self.icclist.sort() # sort by sequence number + if self.icclist[0][13] == len(self.icclist): + profile = [] + for p in self.icclist: + profile.append(p[14:]) + icc_profile = b"".join(profile) + else: + icc_profile = None # wrong number of fragments + self.info["icc_profile"] = icc_profile + self.icclist = [] + + for i in range(6, len(s), 3): + t = s[i : i + 3] + # 4-tuples: id, vsamp, hsamp, qtable + self.layer.append((t[0], t[1] // 16, t[1] & 15, t[2])) + + +def DQT(self, marker): + # + # Define quantization table. Note that there might be more + # than one table in each marker. + + # FIXME: The quantization tables can be used to estimate the + # compression quality. + + n = i16(self.fp.read(2)) - 2 + s = ImageFile._safe_read(self.fp, n) + while len(s): + v = s[0] + precision = 1 if (v // 16 == 0) else 2 # in bytes + qt_length = 1 + precision * 64 + if len(s) < qt_length: + raise SyntaxError("bad quantization table marker") + data = array.array("B" if precision == 1 else "H", s[1:qt_length]) + if sys.byteorder == "little" and precision > 1: + data.byteswap() # the values are always big-endian + self.quantization[v & 15] = [data[i] for i in zigzag_index] + s = s[qt_length:] + + +# +# JPEG marker table + +MARKER = { + 0xFFC0: ("SOF0", "Baseline DCT", SOF), + 0xFFC1: ("SOF1", "Extended Sequential DCT", SOF), + 0xFFC2: ("SOF2", "Progressive DCT", SOF), + 0xFFC3: ("SOF3", "Spatial lossless", SOF), + 0xFFC4: ("DHT", "Define Huffman table", Skip), + 0xFFC5: ("SOF5", "Differential sequential DCT", SOF), + 0xFFC6: ("SOF6", "Differential progressive DCT", SOF), + 0xFFC7: ("SOF7", "Differential spatial", SOF), + 0xFFC8: ("JPG", "Extension", None), + 0xFFC9: ("SOF9", "Extended sequential DCT (AC)", SOF), + 0xFFCA: ("SOF10", "Progressive DCT (AC)", SOF), + 0xFFCB: ("SOF11", "Spatial lossless DCT (AC)", SOF), + 0xFFCC: ("DAC", "Define arithmetic coding conditioning", Skip), + 0xFFCD: ("SOF13", "Differential sequential DCT (AC)", SOF), + 0xFFCE: ("SOF14", "Differential progressive DCT (AC)", SOF), + 0xFFCF: ("SOF15", "Differential spatial (AC)", SOF), + 0xFFD0: ("RST0", "Restart 0", None), + 0xFFD1: ("RST1", "Restart 1", None), + 0xFFD2: ("RST2", "Restart 2", None), + 0xFFD3: ("RST3", "Restart 3", None), + 0xFFD4: ("RST4", "Restart 4", None), + 0xFFD5: ("RST5", "Restart 5", None), + 0xFFD6: ("RST6", "Restart 6", None), + 0xFFD7: ("RST7", "Restart 7", None), + 0xFFD8: ("SOI", "Start of image", None), + 0xFFD9: ("EOI", "End of image", None), + 0xFFDA: ("SOS", "Start of scan", Skip), + 0xFFDB: ("DQT", "Define quantization table", DQT), + 0xFFDC: ("DNL", "Define number of lines", Skip), + 0xFFDD: ("DRI", "Define restart interval", Skip), + 0xFFDE: ("DHP", "Define hierarchical progression", SOF), + 0xFFDF: ("EXP", "Expand reference component", Skip), + 0xFFE0: ("APP0", "Application segment 0", APP), + 0xFFE1: ("APP1", "Application segment 1", APP), + 0xFFE2: ("APP2", "Application segment 2", APP), + 0xFFE3: ("APP3", "Application segment 3", APP), + 0xFFE4: ("APP4", "Application segment 4", APP), + 0xFFE5: ("APP5", "Application segment 5", APP), + 0xFFE6: ("APP6", "Application segment 6", APP), + 0xFFE7: ("APP7", "Application segment 7", APP), + 0xFFE8: ("APP8", "Application segment 8", APP), + 0xFFE9: ("APP9", "Application segment 9", APP), + 0xFFEA: ("APP10", "Application segment 10", APP), + 0xFFEB: ("APP11", "Application segment 11", APP), + 0xFFEC: ("APP12", "Application segment 12", APP), + 0xFFED: ("APP13", "Application segment 13", APP), + 0xFFEE: ("APP14", "Application segment 14", APP), + 0xFFEF: ("APP15", "Application segment 15", APP), + 0xFFF0: ("JPG0", "Extension 0", None), + 0xFFF1: ("JPG1", "Extension 1", None), + 0xFFF2: ("JPG2", "Extension 2", None), + 0xFFF3: ("JPG3", "Extension 3", None), + 0xFFF4: ("JPG4", "Extension 4", None), + 0xFFF5: ("JPG5", "Extension 5", None), + 0xFFF6: ("JPG6", "Extension 6", None), + 0xFFF7: ("JPG7", "Extension 7", None), + 0xFFF8: ("JPG8", "Extension 8", None), + 0xFFF9: ("JPG9", "Extension 9", None), + 0xFFFA: ("JPG10", "Extension 10", None), + 0xFFFB: ("JPG11", "Extension 11", None), + 0xFFFC: ("JPG12", "Extension 12", None), + 0xFFFD: ("JPG13", "Extension 13", None), + 0xFFFE: ("COM", "Comment", COM), +} + + +def _accept(prefix): + # Magic number was taken from https://en.wikipedia.org/wiki/JPEG + return prefix[0:3] == b"\xFF\xD8\xFF" + + +## +# Image plugin for JPEG and JFIF images. + + +class JpegImageFile(ImageFile.ImageFile): + + format = "JPEG" + format_description = "JPEG (ISO 10918)" + + def _open(self): + + s = self.fp.read(3) + + if not _accept(s): + raise SyntaxError("not a JPEG file") + s = b"\xFF" + + # Create attributes + self.bits = self.layers = 0 + + # JPEG specifics (internal) + self.layer = [] + self.huffman_dc = {} + self.huffman_ac = {} + self.quantization = {} + self.app = {} # compatibility + self.applist = [] + self.icclist = [] + + while True: + + i = s[0] + if i == 0xFF: + s = s + self.fp.read(1) + i = i16(s) + else: + # Skip non-0xFF junk + s = self.fp.read(1) + continue + + if i in MARKER: + name, description, handler = MARKER[i] + if handler is not None: + handler(self, i) + if i == 0xFFDA: # start of scan + rawmode = self.mode + if self.mode == "CMYK": + rawmode = "CMYK;I" # assume adobe conventions + self.tile = [("jpeg", (0, 0) + self.size, 0, (rawmode, ""))] + # self.__offset = self.fp.tell() + break + s = self.fp.read(1) + elif i == 0 or i == 0xFFFF: + # padded marker or junk; move on + s = b"\xff" + elif i == 0xFF00: # Skip extraneous data (escaped 0xFF) + s = self.fp.read(1) + else: + raise SyntaxError("no marker found") + + def load_read(self, read_bytes): + """ + internal: read more image data + For premature EOF and LOAD_TRUNCATED_IMAGES adds EOI marker + so libjpeg can finish decoding + """ + s = self.fp.read(read_bytes) + + if not s and ImageFile.LOAD_TRUNCATED_IMAGES: + # Premature EOF. + # Pretend file is finished adding EOI marker + return b"\xFF\xD9" + + return s + + def draft(self, mode, size): + + if len(self.tile) != 1: + return + + # Protect from second call + if self.decoderconfig: + return + + d, e, o, a = self.tile[0] + scale = 1 + original_size = self.size + + if a[0] == "RGB" and mode in ["L", "YCbCr"]: + self.mode = mode + a = mode, "" + + if size: + scale = min(self.size[0] // size[0], self.size[1] // size[1]) + for s in [8, 4, 2, 1]: + if scale >= s: + break + e = ( + e[0], + e[1], + (e[2] - e[0] + s - 1) // s + e[0], + (e[3] - e[1] + s - 1) // s + e[1], + ) + self._size = ((self.size[0] + s - 1) // s, (self.size[1] + s - 1) // s) + scale = s + + self.tile = [(d, e, o, a)] + self.decoderconfig = (scale, 0) + + box = (0, 0, original_size[0] / scale, original_size[1] / scale) + return (self.mode, box) + + def load_djpeg(self): + + # ALTERNATIVE: handle JPEGs via the IJG command line utilities + + f, path = tempfile.mkstemp() + os.close(f) + if os.path.exists(self.filename): + subprocess.check_call(["djpeg", "-outfile", path, self.filename]) + else: + raise ValueError("Invalid Filename") + + try: + with Image.open(path) as _im: + _im.load() + self.im = _im.im + finally: + try: + os.unlink(path) + except OSError: + pass + + self.mode = self.im.mode + self._size = self.im.size + + self.tile = [] + + def _getexif(self): + return _getexif(self) + + def _getmp(self): + return _getmp(self) + + def getxmp(self): + """ + Returns a dictionary containing the XMP tags. + Requires defusedxml to be installed. + :returns: XMP tags in a dictionary. + """ + + for segment, content in self.applist: + if segment == "APP1": + marker, xmp_tags = content.rsplit(b"\x00", 1) + if marker == b"http://ns.adobe.com/xap/1.0/": + return self._getxmp(xmp_tags) + return {} + + +def _getexif(self): + if "exif" not in self.info: + return None + return self.getexif()._get_merged_dict() + + +def _getmp(self): + # Extract MP information. This method was inspired by the "highly + # experimental" _getexif version that's been in use for years now, + # itself based on the ImageFileDirectory class in the TIFF plugin. + + # The MP record essentially consists of a TIFF file embedded in a JPEG + # application marker. + try: + data = self.info["mp"] + except KeyError: + return None + file_contents = io.BytesIO(data) + head = file_contents.read(8) + endianness = ">" if head[:4] == b"\x4d\x4d\x00\x2a" else "<" + # process dictionary + try: + info = TiffImagePlugin.ImageFileDirectory_v2(head) + file_contents.seek(info.next) + info.load(file_contents) + mp = dict(info) + except Exception as e: + raise SyntaxError("malformed MP Index (unreadable directory)") from e + # it's an error not to have a number of images + try: + quant = mp[0xB001] + except KeyError as e: + raise SyntaxError("malformed MP Index (no number of images)") from e + # get MP entries + mpentries = [] + try: + rawmpentries = mp[0xB002] + for entrynum in range(0, quant): + unpackedentry = struct.unpack_from( + f"{endianness}LLLHH", rawmpentries, entrynum * 16 + ) + labels = ("Attribute", "Size", "DataOffset", "EntryNo1", "EntryNo2") + mpentry = dict(zip(labels, unpackedentry)) + mpentryattr = { + "DependentParentImageFlag": bool(mpentry["Attribute"] & (1 << 31)), + "DependentChildImageFlag": bool(mpentry["Attribute"] & (1 << 30)), + "RepresentativeImageFlag": bool(mpentry["Attribute"] & (1 << 29)), + "Reserved": (mpentry["Attribute"] & (3 << 27)) >> 27, + "ImageDataFormat": (mpentry["Attribute"] & (7 << 24)) >> 24, + "MPType": mpentry["Attribute"] & 0x00FFFFFF, + } + if mpentryattr["ImageDataFormat"] == 0: + mpentryattr["ImageDataFormat"] = "JPEG" + else: + raise SyntaxError("unsupported picture format in MPO") + mptypemap = { + 0x000000: "Undefined", + 0x010001: "Large Thumbnail (VGA Equivalent)", + 0x010002: "Large Thumbnail (Full HD Equivalent)", + 0x020001: "Multi-Frame Image (Panorama)", + 0x020002: "Multi-Frame Image: (Disparity)", + 0x020003: "Multi-Frame Image: (Multi-Angle)", + 0x030000: "Baseline MP Primary Image", + } + mpentryattr["MPType"] = mptypemap.get(mpentryattr["MPType"], "Unknown") + mpentry["Attribute"] = mpentryattr + mpentries.append(mpentry) + mp[0xB002] = mpentries + except KeyError as e: + raise SyntaxError("malformed MP Index (bad MP Entry)") from e + # Next we should try and parse the individual image unique ID list; + # we don't because I've never seen this actually used in a real MPO + # file and so can't test it. + return mp + + +# -------------------------------------------------------------------- +# stuff to save JPEG files + +RAWMODE = { + "1": "L", + "L": "L", + "RGB": "RGB", + "RGBX": "RGB", + "CMYK": "CMYK;I", # assume adobe conventions + "YCbCr": "YCbCr", +} + +# fmt: off +zigzag_index = ( + 0, 1, 5, 6, 14, 15, 27, 28, + 2, 4, 7, 13, 16, 26, 29, 42, + 3, 8, 12, 17, 25, 30, 41, 43, + 9, 11, 18, 24, 31, 40, 44, 53, + 10, 19, 23, 32, 39, 45, 52, 54, + 20, 22, 33, 38, 46, 51, 55, 60, + 21, 34, 37, 47, 50, 56, 59, 61, + 35, 36, 48, 49, 57, 58, 62, 63, +) + +samplings = { + (1, 1, 1, 1, 1, 1): 0, + (2, 1, 1, 1, 1, 1): 1, + (2, 2, 1, 1, 1, 1): 2, +} +# fmt: on + + +def convert_dict_qtables(qtables): + warnings.warn( + "convert_dict_qtables is deprecated and will be removed in Pillow 10" + "(2023-01-02). Conversion is no longer needed.", + DeprecationWarning, + ) + return qtables + + +def get_sampling(im): + # There's no subsampling when images have only 1 layer + # (grayscale images) or when they are CMYK (4 layers), + # so set subsampling to the default value. + # + # NOTE: currently Pillow can't encode JPEG to YCCK format. + # If YCCK support is added in the future, subsampling code will have + # to be updated (here and in JpegEncode.c) to deal with 4 layers. + if not hasattr(im, "layers") or im.layers in (1, 4): + return -1 + sampling = im.layer[0][1:3] + im.layer[1][1:3] + im.layer[2][1:3] + return samplings.get(sampling, -1) + + +def _save(im, fp, filename): + + try: + rawmode = RAWMODE[im.mode] + except KeyError as e: + raise OSError(f"cannot write mode {im.mode} as JPEG") from e + + info = im.encoderinfo + + dpi = [round(x) for x in info.get("dpi", (0, 0))] + + quality = info.get("quality", -1) + subsampling = info.get("subsampling", -1) + qtables = info.get("qtables") + + if quality == "keep": + quality = -1 + subsampling = "keep" + qtables = "keep" + elif quality in presets: + preset = presets[quality] + quality = -1 + subsampling = preset.get("subsampling", -1) + qtables = preset.get("quantization") + elif not isinstance(quality, int): + raise ValueError("Invalid quality setting") + else: + if subsampling in presets: + subsampling = presets[subsampling].get("subsampling", -1) + if isinstance(qtables, str) and qtables in presets: + qtables = presets[qtables].get("quantization") + + if subsampling == "4:4:4": + subsampling = 0 + elif subsampling == "4:2:2": + subsampling = 1 + elif subsampling == "4:2:0": + subsampling = 2 + elif subsampling == "4:1:1": + # For compatibility. Before Pillow 4.3, 4:1:1 actually meant 4:2:0. + # Set 4:2:0 if someone is still using that value. + subsampling = 2 + elif subsampling == "keep": + if im.format != "JPEG": + raise ValueError("Cannot use 'keep' when original image is not a JPEG") + subsampling = get_sampling(im) + + def validate_qtables(qtables): + if qtables is None: + return qtables + if isinstance(qtables, str): + try: + lines = [ + int(num) + for line in qtables.splitlines() + for num in line.split("#", 1)[0].split() + ] + except ValueError as e: + raise ValueError("Invalid quantization table") from e + else: + qtables = [lines[s : s + 64] for s in range(0, len(lines), 64)] + if isinstance(qtables, (tuple, list, dict)): + if isinstance(qtables, dict): + qtables = [ + qtables[key] for key in range(len(qtables)) if key in qtables + ] + elif isinstance(qtables, tuple): + qtables = list(qtables) + if not (0 < len(qtables) < 5): + raise ValueError("None or too many quantization tables") + for idx, table in enumerate(qtables): + try: + if len(table) != 64: + raise TypeError + table = array.array("H", table) + except TypeError as e: + raise ValueError("Invalid quantization table") from e + else: + qtables[idx] = list(table) + return qtables + + if qtables == "keep": + if im.format != "JPEG": + raise ValueError("Cannot use 'keep' when original image is not a JPEG") + qtables = getattr(im, "quantization", None) + qtables = validate_qtables(qtables) + + extra = b"" + + icc_profile = info.get("icc_profile") + if icc_profile: + ICC_OVERHEAD_LEN = 14 + MAX_BYTES_IN_MARKER = 65533 + MAX_DATA_BYTES_IN_MARKER = MAX_BYTES_IN_MARKER - ICC_OVERHEAD_LEN + markers = [] + while icc_profile: + markers.append(icc_profile[:MAX_DATA_BYTES_IN_MARKER]) + icc_profile = icc_profile[MAX_DATA_BYTES_IN_MARKER:] + i = 1 + for marker in markers: + size = struct.pack(">H", 2 + ICC_OVERHEAD_LEN + len(marker)) + extra += ( + b"\xFF\xE2" + + size + + b"ICC_PROFILE\0" + + o8(i) + + o8(len(markers)) + + marker + ) + i += 1 + + # "progressive" is the official name, but older documentation + # says "progression" + # FIXME: issue a warning if the wrong form is used (post-1.1.7) + progressive = info.get("progressive", False) or info.get("progression", False) + + optimize = info.get("optimize", False) + + exif = info.get("exif", b"") + if isinstance(exif, Image.Exif): + exif = exif.tobytes() + + # get keyword arguments + im.encoderconfig = ( + quality, + progressive, + info.get("smooth", 0), + optimize, + info.get("streamtype", 0), + dpi[0], + dpi[1], + subsampling, + qtables, + extra, + exif, + ) + + # if we optimize, libjpeg needs a buffer big enough to hold the whole image + # in a shot. Guessing on the size, at im.size bytes. (raw pixel size is + # channels*size, this is a value that's been used in a django patch. + # https://github.com/matthewwithanm/django-imagekit/issues/50 + bufsize = 0 + if optimize or progressive: + # CMYK can be bigger + if im.mode == "CMYK": + bufsize = 4 * im.size[0] * im.size[1] + # keep sets quality to -1, but the actual value may be high. + elif quality >= 95 or quality == -1: + bufsize = 2 * im.size[0] * im.size[1] + else: + bufsize = im.size[0] * im.size[1] + + # The EXIF info needs to be written as one block, + APP1, + one spare byte. + # Ensure that our buffer is big enough. Same with the icc_profile block. + bufsize = max(ImageFile.MAXBLOCK, bufsize, len(exif) + 5, len(extra) + 1) + + ImageFile._save(im, fp, [("jpeg", (0, 0) + im.size, 0, rawmode)], bufsize) + + +def _save_cjpeg(im, fp, filename): + # ALTERNATIVE: handle JPEGs via the IJG command line utilities. + tempfile = im._dump() + subprocess.check_call(["cjpeg", "-outfile", filename, tempfile]) + try: + os.unlink(tempfile) + except OSError: + pass + + +## +# Factory for making JPEG and MPO instances +def jpeg_factory(fp=None, filename=None): + im = JpegImageFile(fp, filename) + try: + mpheader = im._getmp() + if mpheader[45057] > 1: + # It's actually an MPO + from .MpoImagePlugin import MpoImageFile + + # Don't reload everything, just convert it. + im = MpoImageFile.adopt(im, mpheader) + except (TypeError, IndexError): + # It is really a JPEG + pass + except SyntaxError: + warnings.warn( + "Image appears to be a malformed MPO file, it will be " + "interpreted as a base JPEG file" + ) + return im + + +# --------------------------------------------------------------------- +# Registry stuff + +Image.register_open(JpegImageFile.format, jpeg_factory, _accept) +Image.register_save(JpegImageFile.format, _save) + +Image.register_extensions(JpegImageFile.format, [".jfif", ".jpe", ".jpg", ".jpeg"]) + +Image.register_mime(JpegImageFile.format, "image/jpeg") diff --git a/.venv/lib/python3.9/site-packages/PIL/JpegPresets.py b/.venv/lib/python3.9/site-packages/PIL/JpegPresets.py new file mode 100644 index 00000000..e5a5d178 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/JpegPresets.py @@ -0,0 +1,240 @@ +""" +JPEG quality settings equivalent to the Photoshop settings. +Can be used when saving JPEG files. + +The following presets are available by default: +``web_low``, ``web_medium``, ``web_high``, ``web_very_high``, ``web_maximum``, +``low``, ``medium``, ``high``, ``maximum``. +More presets can be added to the :py:data:`presets` dict if needed. + +To apply the preset, specify:: + + quality="preset_name" + +To apply only the quantization table:: + + qtables="preset_name" + +To apply only the subsampling setting:: + + subsampling="preset_name" + +Example:: + + im.save("image_name.jpg", quality="web_high") + +Subsampling +----------- + +Subsampling is the practice of encoding images by implementing less resolution +for chroma information than for luma information. +(ref.: https://en.wikipedia.org/wiki/Chroma_subsampling) + +Possible subsampling values are 0, 1 and 2 that correspond to 4:4:4, 4:2:2 and +4:2:0. + +You can get the subsampling of a JPEG with the +:func:`.JpegImagePlugin.get_sampling` function. + +In JPEG compressed data a JPEG marker is used instead of an EXIF tag. +(ref.: https://www.exiv2.org/tags.html) + + +Quantization tables +------------------- + +They are values use by the DCT (Discrete cosine transform) to remove +*unnecessary* information from the image (the lossy part of the compression). +(ref.: https://en.wikipedia.org/wiki/Quantization_matrix#Quantization_matrices, +https://en.wikipedia.org/wiki/JPEG#Quantization) + +You can get the quantization tables of a JPEG with:: + + im.quantization + +This will return a dict with a number of lists. You can pass this dict +directly as the qtables argument when saving a JPEG. + +The quantization table format in presets is a list with sublists. These formats +are interchangeable. + +Libjpeg ref.: +https://web.archive.org/web/20120328125543/http://www.jpegcameras.com/libjpeg/libjpeg-3.html + +""" + +# fmt: off +presets = { + 'web_low': {'subsampling': 2, # "4:2:0" + 'quantization': [ + [20, 16, 25, 39, 50, 46, 62, 68, + 16, 18, 23, 38, 38, 53, 65, 68, + 25, 23, 31, 38, 53, 65, 68, 68, + 39, 38, 38, 53, 65, 68, 68, 68, + 50, 38, 53, 65, 68, 68, 68, 68, + 46, 53, 65, 68, 68, 68, 68, 68, + 62, 65, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68], + [21, 25, 32, 38, 54, 68, 68, 68, + 25, 28, 24, 38, 54, 68, 68, 68, + 32, 24, 32, 43, 66, 68, 68, 68, + 38, 38, 43, 53, 68, 68, 68, 68, + 54, 54, 66, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68] + ]}, + 'web_medium': {'subsampling': 2, # "4:2:0" + 'quantization': [ + [16, 11, 11, 16, 23, 27, 31, 30, + 11, 12, 12, 15, 20, 23, 23, 30, + 11, 12, 13, 16, 23, 26, 35, 47, + 16, 15, 16, 23, 26, 37, 47, 64, + 23, 20, 23, 26, 39, 51, 64, 64, + 27, 23, 26, 37, 51, 64, 64, 64, + 31, 23, 35, 47, 64, 64, 64, 64, + 30, 30, 47, 64, 64, 64, 64, 64], + [17, 15, 17, 21, 20, 26, 38, 48, + 15, 19, 18, 17, 20, 26, 35, 43, + 17, 18, 20, 22, 26, 30, 46, 53, + 21, 17, 22, 28, 30, 39, 53, 64, + 20, 20, 26, 30, 39, 48, 64, 64, + 26, 26, 30, 39, 48, 63, 64, 64, + 38, 35, 46, 53, 64, 64, 64, 64, + 48, 43, 53, 64, 64, 64, 64, 64] + ]}, + 'web_high': {'subsampling': 0, # "4:4:4" + 'quantization': [ + [6, 4, 4, 6, 9, 11, 12, 16, + 4, 5, 5, 6, 8, 10, 12, 12, + 4, 5, 5, 6, 10, 12, 14, 19, + 6, 6, 6, 11, 12, 15, 19, 28, + 9, 8, 10, 12, 16, 20, 27, 31, + 11, 10, 12, 15, 20, 27, 31, 31, + 12, 12, 14, 19, 27, 31, 31, 31, + 16, 12, 19, 28, 31, 31, 31, 31], + [7, 7, 13, 24, 26, 31, 31, 31, + 7, 12, 16, 21, 31, 31, 31, 31, + 13, 16, 17, 31, 31, 31, 31, 31, + 24, 21, 31, 31, 31, 31, 31, 31, + 26, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31] + ]}, + 'web_very_high': {'subsampling': 0, # "4:4:4" + 'quantization': [ + [2, 2, 2, 2, 3, 4, 5, 6, + 2, 2, 2, 2, 3, 4, 5, 6, + 2, 2, 2, 2, 4, 5, 7, 9, + 2, 2, 2, 4, 5, 7, 9, 12, + 3, 3, 4, 5, 8, 10, 12, 12, + 4, 4, 5, 7, 10, 12, 12, 12, + 5, 5, 7, 9, 12, 12, 12, 12, + 6, 6, 9, 12, 12, 12, 12, 12], + [3, 3, 5, 9, 13, 15, 15, 15, + 3, 4, 6, 11, 14, 12, 12, 12, + 5, 6, 9, 14, 12, 12, 12, 12, + 9, 11, 14, 12, 12, 12, 12, 12, + 13, 14, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12] + ]}, + 'web_maximum': {'subsampling': 0, # "4:4:4" + 'quantization': [ + [1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 2, 2, + 1, 1, 1, 1, 1, 2, 2, 3, + 1, 1, 1, 1, 2, 2, 3, 3, + 1, 1, 1, 2, 2, 3, 3, 3, + 1, 1, 2, 2, 3, 3, 3, 3], + [1, 1, 1, 2, 2, 3, 3, 3, + 1, 1, 1, 2, 3, 3, 3, 3, + 1, 1, 1, 3, 3, 3, 3, 3, + 2, 2, 3, 3, 3, 3, 3, 3, + 2, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3] + ]}, + 'low': {'subsampling': 2, # "4:2:0" + 'quantization': [ + [18, 14, 14, 21, 30, 35, 34, 17, + 14, 16, 16, 19, 26, 23, 12, 12, + 14, 16, 17, 21, 23, 12, 12, 12, + 21, 19, 21, 23, 12, 12, 12, 12, + 30, 26, 23, 12, 12, 12, 12, 12, + 35, 23, 12, 12, 12, 12, 12, 12, + 34, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12], + [20, 19, 22, 27, 20, 20, 17, 17, + 19, 25, 23, 14, 14, 12, 12, 12, + 22, 23, 14, 14, 12, 12, 12, 12, + 27, 14, 14, 12, 12, 12, 12, 12, + 20, 14, 12, 12, 12, 12, 12, 12, + 20, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12] + ]}, + 'medium': {'subsampling': 2, # "4:2:0" + 'quantization': [ + [12, 8, 8, 12, 17, 21, 24, 17, + 8, 9, 9, 11, 15, 19, 12, 12, + 8, 9, 10, 12, 19, 12, 12, 12, + 12, 11, 12, 21, 12, 12, 12, 12, + 17, 15, 19, 12, 12, 12, 12, 12, + 21, 19, 12, 12, 12, 12, 12, 12, + 24, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12], + [13, 11, 13, 16, 20, 20, 17, 17, + 11, 14, 14, 14, 14, 12, 12, 12, + 13, 14, 14, 14, 12, 12, 12, 12, + 16, 14, 14, 12, 12, 12, 12, 12, + 20, 14, 12, 12, 12, 12, 12, 12, + 20, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12] + ]}, + 'high': {'subsampling': 0, # "4:4:4" + 'quantization': [ + [6, 4, 4, 6, 9, 11, 12, 16, + 4, 5, 5, 6, 8, 10, 12, 12, + 4, 5, 5, 6, 10, 12, 12, 12, + 6, 6, 6, 11, 12, 12, 12, 12, + 9, 8, 10, 12, 12, 12, 12, 12, + 11, 10, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 16, 12, 12, 12, 12, 12, 12, 12], + [7, 7, 13, 24, 20, 20, 17, 17, + 7, 12, 16, 14, 14, 12, 12, 12, + 13, 16, 14, 14, 12, 12, 12, 12, + 24, 14, 14, 12, 12, 12, 12, 12, + 20, 14, 12, 12, 12, 12, 12, 12, + 20, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12] + ]}, + 'maximum': {'subsampling': 0, # "4:4:4" + 'quantization': [ + [2, 2, 2, 2, 3, 4, 5, 6, + 2, 2, 2, 2, 3, 4, 5, 6, + 2, 2, 2, 2, 4, 5, 7, 9, + 2, 2, 2, 4, 5, 7, 9, 12, + 3, 3, 4, 5, 8, 10, 12, 12, + 4, 4, 5, 7, 10, 12, 12, 12, + 5, 5, 7, 9, 12, 12, 12, 12, + 6, 6, 9, 12, 12, 12, 12, 12], + [3, 3, 5, 9, 13, 15, 15, 15, + 3, 4, 6, 10, 14, 12, 12, 12, + 5, 6, 9, 14, 12, 12, 12, 12, + 9, 10, 14, 12, 12, 12, 12, 12, + 13, 14, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12] + ]}, +} +# fmt: on diff --git a/.venv/lib/python3.9/site-packages/PIL/McIdasImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/McIdasImagePlugin.py new file mode 100644 index 00000000..cd047fe9 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/McIdasImagePlugin.py @@ -0,0 +1,75 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Basic McIdas support for PIL +# +# History: +# 1997-05-05 fl Created (8-bit images only) +# 2009-03-08 fl Added 16/32-bit support. +# +# Thanks to Richard Jones and Craig Swank for specs and samples. +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# + +import struct + +from . import Image, ImageFile + + +def _accept(s): + return s[:8] == b"\x00\x00\x00\x00\x00\x00\x00\x04" + + +## +# Image plugin for McIdas area images. + + +class McIdasImageFile(ImageFile.ImageFile): + + format = "MCIDAS" + format_description = "McIdas area file" + + def _open(self): + + # parse area file directory + s = self.fp.read(256) + if not _accept(s) or len(s) != 256: + raise SyntaxError("not an McIdas area file") + + self.area_descriptor_raw = s + self.area_descriptor = w = [0] + list(struct.unpack("!64i", s)) + + # get mode + if w[11] == 1: + mode = rawmode = "L" + elif w[11] == 2: + # FIXME: add memory map support + mode = "I" + rawmode = "I;16B" + elif w[11] == 4: + # FIXME: add memory map support + mode = "I" + rawmode = "I;32B" + else: + raise SyntaxError("unsupported McIdas format") + + self.mode = mode + self._size = w[10], w[9] + + offset = w[34] + w[15] + stride = w[15] + w[10] * w[11] * w[14] + + self.tile = [("raw", (0, 0) + self.size, offset, (rawmode, stride, 1))] + + +# -------------------------------------------------------------------- +# registry + +Image.register_open(McIdasImageFile.format, McIdasImageFile, _accept) + +# no default extension diff --git a/.venv/lib/python3.9/site-packages/PIL/MicImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/MicImagePlugin.py new file mode 100644 index 00000000..9248b1b6 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/MicImagePlugin.py @@ -0,0 +1,107 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Microsoft Image Composer support for PIL +# +# Notes: +# uses TiffImagePlugin.py to read the actual image streams +# +# History: +# 97-01-20 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# + + +import olefile + +from . import Image, TiffImagePlugin + +# +# -------------------------------------------------------------------- + + +def _accept(prefix): + return prefix[:8] == olefile.MAGIC + + +## +# Image plugin for Microsoft's Image Composer file format. + + +class MicImageFile(TiffImagePlugin.TiffImageFile): + + format = "MIC" + format_description = "Microsoft Image Composer" + _close_exclusive_fp_after_loading = False + + def _open(self): + + # read the OLE directory and see if this is a likely + # to be a Microsoft Image Composer file + + try: + self.ole = olefile.OleFileIO(self.fp) + except OSError as e: + raise SyntaxError("not an MIC file; invalid OLE file") from e + + # find ACI subfiles with Image members (maybe not the + # best way to identify MIC files, but what the... ;-) + + self.images = [] + for path in self.ole.listdir(): + if path[1:] and path[0][-4:] == ".ACI" and path[1] == "Image": + self.images.append(path) + + # if we didn't find any images, this is probably not + # an MIC file. + if not self.images: + raise SyntaxError("not an MIC file; no image entries") + + self.__fp = self.fp + self.frame = None + self._n_frames = len(self.images) + self.is_animated = self._n_frames > 1 + + if len(self.images) > 1: + self._category = Image.CONTAINER + + self.seek(0) + + def seek(self, frame): + if not self._seek_check(frame): + return + try: + filename = self.images[frame] + except IndexError as e: + raise EOFError("no such frame") from e + + self.fp = self.ole.openstream(filename) + + TiffImagePlugin.TiffImageFile._open(self) + + self.frame = frame + + def tell(self): + return self.frame + + def _close__fp(self): + try: + if self.__fp != self.fp: + self.__fp.close() + except AttributeError: + pass + finally: + self.__fp = None + + +# +# -------------------------------------------------------------------- + +Image.register_open(MicImageFile.format, MicImageFile, _accept) + +Image.register_extension(MicImageFile.format, ".mic") diff --git a/.venv/lib/python3.9/site-packages/PIL/MpegImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/MpegImagePlugin.py new file mode 100644 index 00000000..a358dfdc --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/MpegImagePlugin.py @@ -0,0 +1,83 @@ +# +# The Python Imaging Library. +# $Id$ +# +# MPEG file handling +# +# History: +# 95-09-09 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1995. +# +# See the README file for information on usage and redistribution. +# + + +from . import Image, ImageFile +from ._binary import i8 + +# +# Bitstream parser + + +class BitStream: + def __init__(self, fp): + self.fp = fp + self.bits = 0 + self.bitbuffer = 0 + + def next(self): + return i8(self.fp.read(1)) + + def peek(self, bits): + while self.bits < bits: + c = self.next() + if c < 0: + self.bits = 0 + continue + self.bitbuffer = (self.bitbuffer << 8) + c + self.bits += 8 + return self.bitbuffer >> (self.bits - bits) & (1 << bits) - 1 + + def skip(self, bits): + while self.bits < bits: + self.bitbuffer = (self.bitbuffer << 8) + i8(self.fp.read(1)) + self.bits += 8 + self.bits = self.bits - bits + + def read(self, bits): + v = self.peek(bits) + self.bits = self.bits - bits + return v + + +## +# Image plugin for MPEG streams. This plugin can identify a stream, +# but it cannot read it. + + +class MpegImageFile(ImageFile.ImageFile): + + format = "MPEG" + format_description = "MPEG" + + def _open(self): + + s = BitStream(self.fp) + + if s.read(32) != 0x1B3: + raise SyntaxError("not an MPEG file") + + self.mode = "RGB" + self._size = s.read(12), s.read(12) + + +# -------------------------------------------------------------------- +# Registry stuff + +Image.register_open(MpegImageFile.format, MpegImageFile) + +Image.register_extensions(MpegImageFile.format, [".mpg", ".mpeg"]) + +Image.register_mime(MpegImageFile.format, "video/mpeg") diff --git a/.venv/lib/python3.9/site-packages/PIL/MpoImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/MpoImagePlugin.py new file mode 100644 index 00000000..7ccf27c4 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/MpoImagePlugin.py @@ -0,0 +1,135 @@ +# +# The Python Imaging Library. +# $Id$ +# +# MPO file handling +# +# See "Multi-Picture Format" (CIPA DC-007-Translation 2009, Standard of the +# Camera & Imaging Products Association) +# +# The multi-picture object combines multiple JPEG images (with a modified EXIF +# data format) into a single file. While it can theoretically be used much like +# a GIF animation, it is commonly used to represent 3D photographs and is (as +# of this writing) the most commonly used format by 3D cameras. +# +# History: +# 2014-03-13 Feneric Created +# +# See the README file for information on usage and redistribution. +# + +from . import Image, ImageFile, JpegImagePlugin +from ._binary import i16be as i16 + +# def _accept(prefix): +# return JpegImagePlugin._accept(prefix) + + +def _save(im, fp, filename): + # Note that we can only save the current frame at present + return JpegImagePlugin._save(im, fp, filename) + + +## +# Image plugin for MPO images. + + +class MpoImageFile(JpegImagePlugin.JpegImageFile): + + format = "MPO" + format_description = "MPO (CIPA DC-007)" + _close_exclusive_fp_after_loading = False + + def _open(self): + self.fp.seek(0) # prep the fp in order to pass the JPEG test + JpegImagePlugin.JpegImageFile._open(self) + self._after_jpeg_open() + + def _after_jpeg_open(self, mpheader=None): + self.mpinfo = mpheader if mpheader is not None else self._getmp() + self.n_frames = self.mpinfo[0xB001] + self.__mpoffsets = [ + mpent["DataOffset"] + self.info["mpoffset"] for mpent in self.mpinfo[0xB002] + ] + self.__mpoffsets[0] = 0 + # Note that the following assertion will only be invalid if something + # gets broken within JpegImagePlugin. + assert self.n_frames == len(self.__mpoffsets) + del self.info["mpoffset"] # no longer needed + self.is_animated = self.n_frames > 1 + self.__fp = self.fp # FIXME: hack + self.__fp.seek(self.__mpoffsets[0]) # get ready to read first frame + self.__frame = 0 + self.offset = 0 + # for now we can only handle reading and individual frame extraction + self.readonly = 1 + + def load_seek(self, pos): + self.__fp.seek(pos) + + def seek(self, frame): + if not self._seek_check(frame): + return + self.fp = self.__fp + self.offset = self.__mpoffsets[frame] + + self.fp.seek(self.offset + 2) # skip SOI marker + segment = self.fp.read(2) + if not segment: + raise ValueError("No data found for frame") + if i16(segment) == 0xFFE1: # APP1 + n = i16(self.fp.read(2)) - 2 + self.info["exif"] = ImageFile._safe_read(self.fp, n) + + mptype = self.mpinfo[0xB002][frame]["Attribute"]["MPType"] + if mptype.startswith("Large Thumbnail"): + exif = self.getexif().get_ifd(0x8769) + if 40962 in exif and 40963 in exif: + self._size = (exif[40962], exif[40963]) + elif "exif" in self.info: + del self.info["exif"] + + self.tile = [("jpeg", (0, 0) + self.size, self.offset, (self.mode, ""))] + self.__frame = frame + + def tell(self): + return self.__frame + + def _close__fp(self): + try: + if self.__fp != self.fp: + self.__fp.close() + except AttributeError: + pass + finally: + self.__fp = None + + @staticmethod + def adopt(jpeg_instance, mpheader=None): + """ + Transform the instance of JpegImageFile into + an instance of MpoImageFile. + After the call, the JpegImageFile is extended + to be an MpoImageFile. + + This is essentially useful when opening a JPEG + file that reveals itself as an MPO, to avoid + double call to _open. + """ + jpeg_instance.__class__ = MpoImageFile + jpeg_instance._after_jpeg_open(mpheader) + return jpeg_instance + + +# --------------------------------------------------------------------- +# Registry stuff + +# Note that since MPO shares a factory with JPEG, we do not need to do a +# separate registration for it here. +# Image.register_open(MpoImageFile.format, +# JpegImagePlugin.jpeg_factory, _accept) +Image.register_save(MpoImageFile.format, _save) + +Image.register_extension(MpoImageFile.format, ".mpo") + +Image.register_mime(MpoImageFile.format, "image/mpo") diff --git a/.venv/lib/python3.9/site-packages/PIL/MspImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/MspImagePlugin.py new file mode 100644 index 00000000..32b28d44 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/MspImagePlugin.py @@ -0,0 +1,194 @@ +# +# The Python Imaging Library. +# +# MSP file handling +# +# This is the format used by the Paint program in Windows 1 and 2. +# +# History: +# 95-09-05 fl Created +# 97-01-03 fl Read/write MSP images +# 17-02-21 es Fixed RLE interpretation +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1995-97. +# Copyright (c) Eric Soroos 2017. +# +# See the README file for information on usage and redistribution. +# +# More info on this format: https://archive.org/details/gg243631 +# Page 313: +# Figure 205. Windows Paint Version 1: "DanM" Format +# Figure 206. Windows Paint Version 2: "LinS" Format. Used in Windows V2.03 +# +# See also: https://www.fileformat.info/format/mspaint/egff.htm + +import io +import struct + +from . import Image, ImageFile +from ._binary import i16le as i16 +from ._binary import o16le as o16 + +# +# read MSP files + + +def _accept(prefix): + return prefix[:4] in [b"DanM", b"LinS"] + + +## +# Image plugin for Windows MSP images. This plugin supports both +# uncompressed (Windows 1.0). + + +class MspImageFile(ImageFile.ImageFile): + + format = "MSP" + format_description = "Windows Paint" + + def _open(self): + + # Header + s = self.fp.read(32) + if not _accept(s): + raise SyntaxError("not an MSP file") + + # Header checksum + checksum = 0 + for i in range(0, 32, 2): + checksum = checksum ^ i16(s, i) + if checksum != 0: + raise SyntaxError("bad MSP checksum") + + self.mode = "1" + self._size = i16(s, 4), i16(s, 6) + + if s[:4] == b"DanM": + self.tile = [("raw", (0, 0) + self.size, 32, ("1", 0, 1))] + else: + self.tile = [("MSP", (0, 0) + self.size, 32, None)] + + +class MspDecoder(ImageFile.PyDecoder): + # The algo for the MSP decoder is from + # https://www.fileformat.info/format/mspaint/egff.htm + # cc-by-attribution -- That page references is taken from the + # Encyclopedia of Graphics File Formats and is licensed by + # O'Reilly under the Creative Common/Attribution license + # + # For RLE encoded files, the 32byte header is followed by a scan + # line map, encoded as one 16bit word of encoded byte length per + # line. + # + # NOTE: the encoded length of the line can be 0. This was not + # handled in the previous version of this encoder, and there's no + # mention of how to handle it in the documentation. From the few + # examples I've seen, I've assumed that it is a fill of the + # background color, in this case, white. + # + # + # Pseudocode of the decoder: + # Read a BYTE value as the RunType + # If the RunType value is zero + # Read next byte as the RunCount + # Read the next byte as the RunValue + # Write the RunValue byte RunCount times + # If the RunType value is non-zero + # Use this value as the RunCount + # Read and write the next RunCount bytes literally + # + # e.g.: + # 0x00 03 ff 05 00 01 02 03 04 + # would yield the bytes: + # 0xff ff ff 00 01 02 03 04 + # + # which are then interpreted as a bit packed mode '1' image + + _pulls_fd = True + + def decode(self, buffer): + + img = io.BytesIO() + blank_line = bytearray((0xFF,) * ((self.state.xsize + 7) // 8)) + try: + self.fd.seek(32) + rowmap = struct.unpack_from( + f"<{self.state.ysize}H", self.fd.read(self.state.ysize * 2) + ) + except struct.error as e: + raise OSError("Truncated MSP file in row map") from e + + for x, rowlen in enumerate(rowmap): + try: + if rowlen == 0: + img.write(blank_line) + continue + row = self.fd.read(rowlen) + if len(row) != rowlen: + raise OSError( + "Truncated MSP file, expected %d bytes on row %s", (rowlen, x) + ) + idx = 0 + while idx < rowlen: + runtype = row[idx] + idx += 1 + if runtype == 0: + (runcount, runval) = struct.unpack_from("Bc", row, idx) + img.write(runval * runcount) + idx += 2 + else: + runcount = runtype + img.write(row[idx : idx + runcount]) + idx += runcount + + except struct.error as e: + raise OSError(f"Corrupted MSP file in row {x}") from e + + self.set_as_raw(img.getvalue(), ("1", 0, 1)) + + return 0, 0 + + +Image.register_decoder("MSP", MspDecoder) + + +# +# write MSP files (uncompressed only) + + +def _save(im, fp, filename): + + if im.mode != "1": + raise OSError(f"cannot write mode {im.mode} as MSP") + + # create MSP header + header = [0] * 16 + + header[0], header[1] = i16(b"Da"), i16(b"nM") # version 1 + header[2], header[3] = im.size + header[4], header[5] = 1, 1 + header[6], header[7] = 1, 1 + header[8], header[9] = im.size + + checksum = 0 + for h in header: + checksum = checksum ^ h + header[12] = checksum # FIXME: is this the right field? + + # header + for h in header: + fp.write(o16(h)) + + # image body + ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 32, ("1", 0, 1))]) + + +# +# registry + +Image.register_open(MspImageFile.format, MspImageFile, _accept) +Image.register_save(MspImageFile.format, _save) + +Image.register_extension(MspImageFile.format, ".msp") diff --git a/.venv/lib/python3.9/site-packages/PIL/PSDraw.py b/.venv/lib/python3.9/site-packages/PIL/PSDraw.py new file mode 100644 index 00000000..743c35f0 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/PSDraw.py @@ -0,0 +1,235 @@ +# +# The Python Imaging Library +# $Id$ +# +# Simple PostScript graphics interface +# +# History: +# 1996-04-20 fl Created +# 1999-01-10 fl Added gsave/grestore to image method +# 2005-05-04 fl Fixed floating point issue in image (from Eric Etheridge) +# +# Copyright (c) 1997-2005 by Secret Labs AB. All rights reserved. +# Copyright (c) 1996 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +import sys + +from . import EpsImagePlugin + +## +# Simple PostScript graphics interface. + + +class PSDraw: + """ + Sets up printing to the given file. If ``fp`` is omitted, + ``sys.stdout.buffer`` or ``sys.stdout`` is assumed. + """ + + def __init__(self, fp=None): + if not fp: + try: + fp = sys.stdout.buffer + except AttributeError: + fp = sys.stdout + self.fp = fp + + def begin_document(self, id=None): + """Set up printing of a document. (Write PostScript DSC header.)""" + # FIXME: incomplete + self.fp.write( + b"%!PS-Adobe-3.0\n" + b"save\n" + b"/showpage { } def\n" + b"%%EndComments\n" + b"%%BeginDocument\n" + ) + # self.fp.write(ERROR_PS) # debugging! + self.fp.write(EDROFF_PS) + self.fp.write(VDI_PS) + self.fp.write(b"%%EndProlog\n") + self.isofont = {} + + def end_document(self): + """Ends printing. (Write PostScript DSC footer.)""" + self.fp.write(b"%%EndDocument\nrestore showpage\n%%End\n") + if hasattr(self.fp, "flush"): + self.fp.flush() + + def setfont(self, font, size): + """ + Selects which font to use. + + :param font: A PostScript font name + :param size: Size in points. + """ + font = bytes(font, "UTF-8") + if font not in self.isofont: + # reencode font + self.fp.write(b"/PSDraw-%s ISOLatin1Encoding /%s E\n" % (font, font)) + self.isofont[font] = 1 + # rough + self.fp.write(b"/F0 %d /PSDraw-%s F\n" % (size, font)) + + def line(self, xy0, xy1): + """ + Draws a line between the two points. Coordinates are given in + PostScript point coordinates (72 points per inch, (0, 0) is the lower + left corner of the page). + """ + self.fp.write(b"%d %d %d %d Vl\n" % (*xy0, *xy1)) + + def rectangle(self, box): + """ + Draws a rectangle. + + :param box: A 4-tuple of integers whose order and function is currently + undocumented. + + Hint: the tuple is passed into this format string: + + .. code-block:: python + + %d %d M %d %d 0 Vr\n + """ + self.fp.write(b"%d %d M %d %d 0 Vr\n" % box) + + def text(self, xy, text): + """ + Draws text at the given position. You must use + :py:meth:`~PIL.PSDraw.PSDraw.setfont` before calling this method. + """ + text = bytes(text, "UTF-8") + text = b"\\(".join(text.split(b"(")) + text = b"\\)".join(text.split(b")")) + xy += (text,) + self.fp.write(b"%d %d M (%s) S\n" % xy) + + def image(self, box, im, dpi=None): + """Draw a PIL image, centered in the given box.""" + # default resolution depends on mode + if not dpi: + if im.mode == "1": + dpi = 200 # fax + else: + dpi = 100 # greyscale + # image size (on paper) + x = im.size[0] * 72 / dpi + y = im.size[1] * 72 / dpi + # max allowed size + xmax = float(box[2] - box[0]) + ymax = float(box[3] - box[1]) + if x > xmax: + y = y * xmax / x + x = xmax + if y > ymax: + x = x * ymax / y + y = ymax + dx = (xmax - x) / 2 + box[0] + dy = (ymax - y) / 2 + box[1] + self.fp.write(b"gsave\n%f %f translate\n" % (dx, dy)) + if (x, y) != im.size: + # EpsImagePlugin._save prints the image at (0,0,xsize,ysize) + sx = x / im.size[0] + sy = y / im.size[1] + self.fp.write(b"%f %f scale\n" % (sx, sy)) + EpsImagePlugin._save(im, self.fp, None, 0) + self.fp.write(b"\ngrestore\n") + + +# -------------------------------------------------------------------- +# PostScript driver + +# +# EDROFF.PS -- PostScript driver for Edroff 2 +# +# History: +# 94-01-25 fl: created (edroff 2.04) +# +# Copyright (c) Fredrik Lundh 1994. +# + + +EDROFF_PS = b"""\ +/S { show } bind def +/P { moveto show } bind def +/M { moveto } bind def +/X { 0 rmoveto } bind def +/Y { 0 exch rmoveto } bind def +/E { findfont + dup maxlength dict begin + { + 1 index /FID ne { def } { pop pop } ifelse + } forall + /Encoding exch def + dup /FontName exch def + currentdict end definefont pop +} bind def +/F { findfont exch scalefont dup setfont + [ exch /setfont cvx ] cvx bind def +} bind def +""" + +# +# VDI.PS -- PostScript driver for VDI meta commands +# +# History: +# 94-01-25 fl: created (edroff 2.04) +# +# Copyright (c) Fredrik Lundh 1994. +# + +VDI_PS = b"""\ +/Vm { moveto } bind def +/Va { newpath arcn stroke } bind def +/Vl { moveto lineto stroke } bind def +/Vc { newpath 0 360 arc closepath } bind def +/Vr { exch dup 0 rlineto + exch dup neg 0 exch rlineto + exch neg 0 rlineto + 0 exch rlineto + 100 div setgray fill 0 setgray } bind def +/Tm matrix def +/Ve { Tm currentmatrix pop + translate scale newpath 0 0 .5 0 360 arc closepath + Tm setmatrix +} bind def +/Vf { currentgray exch setgray fill setgray } bind def +""" + +# +# ERROR.PS -- Error handler +# +# History: +# 89-11-21 fl: created (pslist 1.10) +# + +ERROR_PS = b"""\ +/landscape false def +/errorBUF 200 string def +/errorNL { currentpoint 10 sub exch pop 72 exch moveto } def +errordict begin /handleerror { + initmatrix /Courier findfont 10 scalefont setfont + newpath 72 720 moveto $error begin /newerror false def + (PostScript Error) show errorNL errorNL + (Error: ) show + /errorname load errorBUF cvs show errorNL errorNL + (Command: ) show + /command load dup type /stringtype ne { errorBUF cvs } if show + errorNL errorNL + (VMstatus: ) show + vmstatus errorBUF cvs show ( bytes available, ) show + errorBUF cvs show ( bytes used at level ) show + errorBUF cvs show errorNL errorNL + (Operand stargck: ) show errorNL /ostargck load { + dup type /stringtype ne { errorBUF cvs } if 72 0 rmoveto show errorNL + } forall errorNL + (Execution stargck: ) show errorNL /estargck load { + dup type /stringtype ne { errorBUF cvs } if 72 0 rmoveto show errorNL + } forall + end showpage +} def end +""" diff --git a/.venv/lib/python3.9/site-packages/PIL/PaletteFile.py b/.venv/lib/python3.9/site-packages/PIL/PaletteFile.py new file mode 100644 index 00000000..6ccaa1f5 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/PaletteFile.py @@ -0,0 +1,53 @@ +# +# Python Imaging Library +# $Id$ +# +# stuff to read simple, teragon-style palette files +# +# History: +# 97-08-23 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# + +from ._binary import o8 + + +class PaletteFile: + """File handler for Teragon-style palette files.""" + + rawmode = "RGB" + + def __init__(self, fp): + + self.palette = [(i, i, i) for i in range(256)] + + while True: + + s = fp.readline() + + if not s: + break + if s[0:1] == b"#": + continue + if len(s) > 100: + raise SyntaxError("bad palette file") + + v = [int(x) for x in s.split()] + try: + [i, r, g, b] = v + except ValueError: + [i, r] = v + g = b = r + + if 0 <= i <= 255: + self.palette[i] = o8(r) + o8(g) + o8(b) + + self.palette = b"".join(self.palette) + + def getpalette(self): + + return self.palette, self.rawmode diff --git a/.venv/lib/python3.9/site-packages/PIL/PalmImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/PalmImagePlugin.py new file mode 100644 index 00000000..700f10e3 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/PalmImagePlugin.py @@ -0,0 +1,227 @@ +# +# The Python Imaging Library. +# $Id$ +# + +## +# Image plugin for Palm pixmap images (output only). +## + +from . import Image, ImageFile +from ._binary import o8 +from ._binary import o16be as o16b + +# fmt: off +_Palm8BitColormapValues = ( + (255, 255, 255), (255, 204, 255), (255, 153, 255), (255, 102, 255), + (255, 51, 255), (255, 0, 255), (255, 255, 204), (255, 204, 204), + (255, 153, 204), (255, 102, 204), (255, 51, 204), (255, 0, 204), + (255, 255, 153), (255, 204, 153), (255, 153, 153), (255, 102, 153), + (255, 51, 153), (255, 0, 153), (204, 255, 255), (204, 204, 255), + (204, 153, 255), (204, 102, 255), (204, 51, 255), (204, 0, 255), + (204, 255, 204), (204, 204, 204), (204, 153, 204), (204, 102, 204), + (204, 51, 204), (204, 0, 204), (204, 255, 153), (204, 204, 153), + (204, 153, 153), (204, 102, 153), (204, 51, 153), (204, 0, 153), + (153, 255, 255), (153, 204, 255), (153, 153, 255), (153, 102, 255), + (153, 51, 255), (153, 0, 255), (153, 255, 204), (153, 204, 204), + (153, 153, 204), (153, 102, 204), (153, 51, 204), (153, 0, 204), + (153, 255, 153), (153, 204, 153), (153, 153, 153), (153, 102, 153), + (153, 51, 153), (153, 0, 153), (102, 255, 255), (102, 204, 255), + (102, 153, 255), (102, 102, 255), (102, 51, 255), (102, 0, 255), + (102, 255, 204), (102, 204, 204), (102, 153, 204), (102, 102, 204), + (102, 51, 204), (102, 0, 204), (102, 255, 153), (102, 204, 153), + (102, 153, 153), (102, 102, 153), (102, 51, 153), (102, 0, 153), + (51, 255, 255), (51, 204, 255), (51, 153, 255), (51, 102, 255), + (51, 51, 255), (51, 0, 255), (51, 255, 204), (51, 204, 204), + (51, 153, 204), (51, 102, 204), (51, 51, 204), (51, 0, 204), + (51, 255, 153), (51, 204, 153), (51, 153, 153), (51, 102, 153), + (51, 51, 153), (51, 0, 153), (0, 255, 255), (0, 204, 255), + (0, 153, 255), (0, 102, 255), (0, 51, 255), (0, 0, 255), + (0, 255, 204), (0, 204, 204), (0, 153, 204), (0, 102, 204), + (0, 51, 204), (0, 0, 204), (0, 255, 153), (0, 204, 153), + (0, 153, 153), (0, 102, 153), (0, 51, 153), (0, 0, 153), + (255, 255, 102), (255, 204, 102), (255, 153, 102), (255, 102, 102), + (255, 51, 102), (255, 0, 102), (255, 255, 51), (255, 204, 51), + (255, 153, 51), (255, 102, 51), (255, 51, 51), (255, 0, 51), + (255, 255, 0), (255, 204, 0), (255, 153, 0), (255, 102, 0), + (255, 51, 0), (255, 0, 0), (204, 255, 102), (204, 204, 102), + (204, 153, 102), (204, 102, 102), (204, 51, 102), (204, 0, 102), + (204, 255, 51), (204, 204, 51), (204, 153, 51), (204, 102, 51), + (204, 51, 51), (204, 0, 51), (204, 255, 0), (204, 204, 0), + (204, 153, 0), (204, 102, 0), (204, 51, 0), (204, 0, 0), + (153, 255, 102), (153, 204, 102), (153, 153, 102), (153, 102, 102), + (153, 51, 102), (153, 0, 102), (153, 255, 51), (153, 204, 51), + (153, 153, 51), (153, 102, 51), (153, 51, 51), (153, 0, 51), + (153, 255, 0), (153, 204, 0), (153, 153, 0), (153, 102, 0), + (153, 51, 0), (153, 0, 0), (102, 255, 102), (102, 204, 102), + (102, 153, 102), (102, 102, 102), (102, 51, 102), (102, 0, 102), + (102, 255, 51), (102, 204, 51), (102, 153, 51), (102, 102, 51), + (102, 51, 51), (102, 0, 51), (102, 255, 0), (102, 204, 0), + (102, 153, 0), (102, 102, 0), (102, 51, 0), (102, 0, 0), + (51, 255, 102), (51, 204, 102), (51, 153, 102), (51, 102, 102), + (51, 51, 102), (51, 0, 102), (51, 255, 51), (51, 204, 51), + (51, 153, 51), (51, 102, 51), (51, 51, 51), (51, 0, 51), + (51, 255, 0), (51, 204, 0), (51, 153, 0), (51, 102, 0), + (51, 51, 0), (51, 0, 0), (0, 255, 102), (0, 204, 102), + (0, 153, 102), (0, 102, 102), (0, 51, 102), (0, 0, 102), + (0, 255, 51), (0, 204, 51), (0, 153, 51), (0, 102, 51), + (0, 51, 51), (0, 0, 51), (0, 255, 0), (0, 204, 0), + (0, 153, 0), (0, 102, 0), (0, 51, 0), (17, 17, 17), + (34, 34, 34), (68, 68, 68), (85, 85, 85), (119, 119, 119), + (136, 136, 136), (170, 170, 170), (187, 187, 187), (221, 221, 221), + (238, 238, 238), (192, 192, 192), (128, 0, 0), (128, 0, 128), + (0, 128, 0), (0, 128, 128), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)) +# fmt: on + + +# so build a prototype image to be used for palette resampling +def build_prototype_image(): + image = Image.new("L", (1, len(_Palm8BitColormapValues))) + image.putdata(list(range(len(_Palm8BitColormapValues)))) + palettedata = () + for colormapValue in _Palm8BitColormapValues: + palettedata += colormapValue + palettedata += (0, 0, 0) * (256 - len(_Palm8BitColormapValues)) + image.putpalette(palettedata) + return image + + +Palm8BitColormapImage = build_prototype_image() + +# OK, we now have in Palm8BitColormapImage, +# a "P"-mode image with the right palette +# +# -------------------------------------------------------------------- + +_FLAGS = {"custom-colormap": 0x4000, "is-compressed": 0x8000, "has-transparent": 0x2000} + +_COMPRESSION_TYPES = {"none": 0xFF, "rle": 0x01, "scanline": 0x00} + + +# +# -------------------------------------------------------------------- + +## +# (Internal) Image save plugin for the Palm format. + + +def _save(im, fp, filename): + + if im.mode == "P": + + # we assume this is a color Palm image with the standard colormap, + # unless the "info" dict has a "custom-colormap" field + + rawmode = "P" + bpp = 8 + version = 1 + + elif im.mode == "L": + if im.encoderinfo.get("bpp") in (1, 2, 4): + # this is 8-bit grayscale, so we shift it to get the high-order bits, + # and invert it because + # Palm does greyscale from white (0) to black (1) + bpp = im.encoderinfo["bpp"] + im = im.point( + lambda x, shift=8 - bpp, maxval=(1 << bpp) - 1: maxval - (x >> shift) + ) + elif im.info.get("bpp") in (1, 2, 4): + # here we assume that even though the inherent mode is 8-bit grayscale, + # only the lower bpp bits are significant. + # We invert them to match the Palm. + bpp = im.info["bpp"] + im = im.point(lambda x, maxval=(1 << bpp) - 1: maxval - (x & maxval)) + else: + raise OSError(f"cannot write mode {im.mode} as Palm") + + # we ignore the palette here + im.mode = "P" + rawmode = "P;" + str(bpp) + version = 1 + + elif im.mode == "1": + + # monochrome -- write it inverted, as is the Palm standard + rawmode = "1;I" + bpp = 1 + version = 0 + + else: + + raise OSError(f"cannot write mode {im.mode} as Palm") + + # + # make sure image data is available + im.load() + + # write header + + cols = im.size[0] + rows = im.size[1] + + rowbytes = int((cols + (16 // bpp - 1)) / (16 // bpp)) * 2 + transparent_index = 0 + compression_type = _COMPRESSION_TYPES["none"] + + flags = 0 + if im.mode == "P" and "custom-colormap" in im.info: + flags = flags & _FLAGS["custom-colormap"] + colormapsize = 4 * 256 + 2 + colormapmode = im.palette.mode + colormap = im.getdata().getpalette() + else: + colormapsize = 0 + + if "offset" in im.info: + offset = (rowbytes * rows + 16 + 3 + colormapsize) // 4 + else: + offset = 0 + + fp.write(o16b(cols) + o16b(rows) + o16b(rowbytes) + o16b(flags)) + fp.write(o8(bpp)) + fp.write(o8(version)) + fp.write(o16b(offset)) + fp.write(o8(transparent_index)) + fp.write(o8(compression_type)) + fp.write(o16b(0)) # reserved by Palm + + # now write colormap if necessary + + if colormapsize > 0: + fp.write(o16b(256)) + for i in range(256): + fp.write(o8(i)) + if colormapmode == "RGB": + fp.write( + o8(colormap[3 * i]) + + o8(colormap[3 * i + 1]) + + o8(colormap[3 * i + 2]) + ) + elif colormapmode == "RGBA": + fp.write( + o8(colormap[4 * i]) + + o8(colormap[4 * i + 1]) + + o8(colormap[4 * i + 2]) + ) + + # now convert data to raw form + ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, rowbytes, 1))]) + + if hasattr(fp, "flush"): + fp.flush() + + +# +# -------------------------------------------------------------------- + +Image.register_save("Palm", _save) + +Image.register_extension("Palm", ".palm") + +Image.register_mime("Palm", "image/palm") diff --git a/.venv/lib/python3.9/site-packages/PIL/PcdImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/PcdImagePlugin.py new file mode 100644 index 00000000..38caf5c6 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/PcdImagePlugin.py @@ -0,0 +1,63 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PCD file handling +# +# History: +# 96-05-10 fl Created +# 96-05-27 fl Added draft mode (128x192, 256x384) +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# + + +from . import Image, ImageFile + +## +# Image plugin for PhotoCD images. This plugin only reads the 768x512 +# image from the file; higher resolutions are encoded in a proprietary +# encoding. + + +class PcdImageFile(ImageFile.ImageFile): + + format = "PCD" + format_description = "Kodak PhotoCD" + + def _open(self): + + # rough + self.fp.seek(2048) + s = self.fp.read(2048) + + if s[:4] != b"PCD_": + raise SyntaxError("not a PCD file") + + orientation = s[1538] & 3 + self.tile_post_rotate = None + if orientation == 1: + self.tile_post_rotate = 90 + elif orientation == 3: + self.tile_post_rotate = -90 + + self.mode = "RGB" + self._size = 768, 512 # FIXME: not correct for rotated images! + self.tile = [("pcd", (0, 0) + self.size, 96 * 2048, None)] + + def load_end(self): + if self.tile_post_rotate: + # Handle rotated PCDs + self.im = self.im.rotate(self.tile_post_rotate) + self._size = self.im.size + + +# +# registry + +Image.register_open(PcdImageFile.format, PcdImageFile) + +Image.register_extension(PcdImageFile.format, ".pcd") diff --git a/.venv/lib/python3.9/site-packages/PIL/PcfFontFile.py b/.venv/lib/python3.9/site-packages/PIL/PcfFontFile.py new file mode 100644 index 00000000..6a4eb22a --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/PcfFontFile.py @@ -0,0 +1,248 @@ +# +# THIS IS WORK IN PROGRESS +# +# The Python Imaging Library +# $Id$ +# +# portable compiled font file parser +# +# history: +# 1997-08-19 fl created +# 2003-09-13 fl fixed loading of unicode fonts +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1997-2003 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +import io + +from . import FontFile, Image +from ._binary import i8 +from ._binary import i16be as b16 +from ._binary import i16le as l16 +from ._binary import i32be as b32 +from ._binary import i32le as l32 + +# -------------------------------------------------------------------- +# declarations + +PCF_MAGIC = 0x70636601 # "\x01fcp" + +PCF_PROPERTIES = 1 << 0 +PCF_ACCELERATORS = 1 << 1 +PCF_METRICS = 1 << 2 +PCF_BITMAPS = 1 << 3 +PCF_INK_METRICS = 1 << 4 +PCF_BDF_ENCODINGS = 1 << 5 +PCF_SWIDTHS = 1 << 6 +PCF_GLYPH_NAMES = 1 << 7 +PCF_BDF_ACCELERATORS = 1 << 8 + +BYTES_PER_ROW = [ + lambda bits: ((bits + 7) >> 3), + lambda bits: ((bits + 15) >> 3) & ~1, + lambda bits: ((bits + 31) >> 3) & ~3, + lambda bits: ((bits + 63) >> 3) & ~7, +] + + +def sz(s, o): + return s[o : s.index(b"\0", o)] + + +class PcfFontFile(FontFile.FontFile): + """Font file plugin for the X11 PCF format.""" + + name = "name" + + def __init__(self, fp, charset_encoding="iso8859-1"): + + self.charset_encoding = charset_encoding + + magic = l32(fp.read(4)) + if magic != PCF_MAGIC: + raise SyntaxError("not a PCF file") + + super().__init__() + + count = l32(fp.read(4)) + self.toc = {} + for i in range(count): + type = l32(fp.read(4)) + self.toc[type] = l32(fp.read(4)), l32(fp.read(4)), l32(fp.read(4)) + + self.fp = fp + + self.info = self._load_properties() + + metrics = self._load_metrics() + bitmaps = self._load_bitmaps(metrics) + encoding = self._load_encoding() + + # + # create glyph structure + + for ch in range(256): + ix = encoding[ch] + if ix is not None: + x, y, l, r, w, a, d, f = metrics[ix] + glyph = (w, 0), (l, d - y, x + l, d), (0, 0, x, y), bitmaps[ix] + self.glyph[ch] = glyph + + def _getformat(self, tag): + + format, size, offset = self.toc[tag] + + fp = self.fp + fp.seek(offset) + + format = l32(fp.read(4)) + + if format & 4: + i16, i32 = b16, b32 + else: + i16, i32 = l16, l32 + + return fp, format, i16, i32 + + def _load_properties(self): + + # + # font properties + + properties = {} + + fp, format, i16, i32 = self._getformat(PCF_PROPERTIES) + + nprops = i32(fp.read(4)) + + # read property description + p = [] + for i in range(nprops): + p.append((i32(fp.read(4)), i8(fp.read(1)), i32(fp.read(4)))) + if nprops & 3: + fp.seek(4 - (nprops & 3), io.SEEK_CUR) # pad + + data = fp.read(i32(fp.read(4))) + + for k, s, v in p: + k = sz(data, k) + if s: + v = sz(data, v) + properties[k] = v + + return properties + + def _load_metrics(self): + + # + # font metrics + + metrics = [] + + fp, format, i16, i32 = self._getformat(PCF_METRICS) + + append = metrics.append + + if (format & 0xFF00) == 0x100: + + # "compressed" metrics + for i in range(i16(fp.read(2))): + left = i8(fp.read(1)) - 128 + right = i8(fp.read(1)) - 128 + width = i8(fp.read(1)) - 128 + ascent = i8(fp.read(1)) - 128 + descent = i8(fp.read(1)) - 128 + xsize = right - left + ysize = ascent + descent + append((xsize, ysize, left, right, width, ascent, descent, 0)) + + else: + + # "jumbo" metrics + for i in range(i32(fp.read(4))): + left = i16(fp.read(2)) + right = i16(fp.read(2)) + width = i16(fp.read(2)) + ascent = i16(fp.read(2)) + descent = i16(fp.read(2)) + attributes = i16(fp.read(2)) + xsize = right - left + ysize = ascent + descent + append((xsize, ysize, left, right, width, ascent, descent, attributes)) + + return metrics + + def _load_bitmaps(self, metrics): + + # + # bitmap data + + bitmaps = [] + + fp, format, i16, i32 = self._getformat(PCF_BITMAPS) + + nbitmaps = i32(fp.read(4)) + + if nbitmaps != len(metrics): + raise OSError("Wrong number of bitmaps") + + offsets = [] + for i in range(nbitmaps): + offsets.append(i32(fp.read(4))) + + bitmapSizes = [] + for i in range(4): + bitmapSizes.append(i32(fp.read(4))) + + # byteorder = format & 4 # non-zero => MSB + bitorder = format & 8 # non-zero => MSB + padindex = format & 3 + + bitmapsize = bitmapSizes[padindex] + offsets.append(bitmapsize) + + data = fp.read(bitmapsize) + + pad = BYTES_PER_ROW[padindex] + mode = "1;R" + if bitorder: + mode = "1" + + for i in range(nbitmaps): + x, y, l, r, w, a, d, f = metrics[i] + b, e = offsets[i], offsets[i + 1] + bitmaps.append(Image.frombytes("1", (x, y), data[b:e], "raw", mode, pad(x))) + + return bitmaps + + def _load_encoding(self): + + # map character code to bitmap index + encoding = [None] * 256 + + fp, format, i16, i32 = self._getformat(PCF_BDF_ENCODINGS) + + firstCol, lastCol = i16(fp.read(2)), i16(fp.read(2)) + firstRow, lastRow = i16(fp.read(2)), i16(fp.read(2)) + + i16(fp.read(2)) # default + + nencoding = (lastCol - firstCol + 1) * (lastRow - firstRow + 1) + + encodingOffsets = [i16(fp.read(2)) for _ in range(nencoding)] + + for i in range(firstCol, len(encoding)): + try: + encodingOffset = encodingOffsets[ + ord(bytearray([i]).decode(self.charset_encoding)) + ] + if encodingOffset != 0xFFFF: + encoding[i] = encodingOffset + except UnicodeDecodeError: + # character is not supported in selected encoding + pass + + return encoding diff --git a/.venv/lib/python3.9/site-packages/PIL/PcxImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/PcxImagePlugin.py new file mode 100644 index 00000000..d2e166bd --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/PcxImagePlugin.py @@ -0,0 +1,218 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PCX file handling +# +# This format was originally used by ZSoft's popular PaintBrush +# program for the IBM PC. It is also supported by many MS-DOS and +# Windows applications, including the Windows PaintBrush program in +# Windows 3. +# +# history: +# 1995-09-01 fl Created +# 1996-05-20 fl Fixed RGB support +# 1997-01-03 fl Fixed 2-bit and 4-bit support +# 1999-02-03 fl Fixed 8-bit support (broken in 1.0b1) +# 1999-02-07 fl Added write support +# 2002-06-09 fl Made 2-bit and 4-bit support a bit more robust +# 2002-07-30 fl Seek from to current position, not beginning of file +# 2003-06-03 fl Extract DPI settings (info["dpi"]) +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1995-2003 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +import io +import logging + +from . import Image, ImageFile, ImagePalette +from ._binary import i16le as i16 +from ._binary import o8 +from ._binary import o16le as o16 + +logger = logging.getLogger(__name__) + + +def _accept(prefix): + return prefix[0] == 10 and prefix[1] in [0, 2, 3, 5] + + +## +# Image plugin for Paintbrush images. + + +class PcxImageFile(ImageFile.ImageFile): + + format = "PCX" + format_description = "Paintbrush" + + def _open(self): + + # header + s = self.fp.read(128) + if not _accept(s): + raise SyntaxError("not a PCX file") + + # image + bbox = i16(s, 4), i16(s, 6), i16(s, 8) + 1, i16(s, 10) + 1 + if bbox[2] <= bbox[0] or bbox[3] <= bbox[1]: + raise SyntaxError("bad PCX image size") + logger.debug("BBox: %s %s %s %s", *bbox) + + # format + version = s[1] + bits = s[3] + planes = s[65] + provided_stride = i16(s, 66) + logger.debug( + "PCX version %s, bits %s, planes %s, stride %s", + version, + bits, + planes, + provided_stride, + ) + + self.info["dpi"] = i16(s, 12), i16(s, 14) + + if bits == 1 and planes == 1: + mode = rawmode = "1" + + elif bits == 1 and planes in (2, 4): + mode = "P" + rawmode = "P;%dL" % planes + self.palette = ImagePalette.raw("RGB", s[16:64]) + + elif version == 5 and bits == 8 and planes == 1: + mode = rawmode = "L" + # FIXME: hey, this doesn't work with the incremental loader !!! + self.fp.seek(-769, io.SEEK_END) + s = self.fp.read(769) + if len(s) == 769 and s[0] == 12: + # check if the palette is linear greyscale + for i in range(256): + if s[i * 3 + 1 : i * 3 + 4] != o8(i) * 3: + mode = rawmode = "P" + break + if mode == "P": + self.palette = ImagePalette.raw("RGB", s[1:]) + self.fp.seek(128) + + elif version == 5 and bits == 8 and planes == 3: + mode = "RGB" + rawmode = "RGB;L" + + else: + raise OSError("unknown PCX mode") + + self.mode = mode + self._size = bbox[2] - bbox[0], bbox[3] - bbox[1] + + # Don't trust the passed in stride. + # Calculate the approximate position for ourselves. + # CVE-2020-35653 + stride = (self._size[0] * bits + 7) // 8 + + # While the specification states that this must be even, + # not all images follow this + if provided_stride != stride: + stride += stride % 2 + + bbox = (0, 0) + self.size + logger.debug("size: %sx%s", *self.size) + + self.tile = [("pcx", bbox, self.fp.tell(), (rawmode, planes * stride))] + + +# -------------------------------------------------------------------- +# save PCX files + + +SAVE = { + # mode: (version, bits, planes, raw mode) + "1": (2, 1, 1, "1"), + "L": (5, 8, 1, "L"), + "P": (5, 8, 1, "P"), + "RGB": (5, 8, 3, "RGB;L"), +} + + +def _save(im, fp, filename): + + try: + version, bits, planes, rawmode = SAVE[im.mode] + except KeyError as e: + raise ValueError(f"Cannot save {im.mode} images as PCX") from e + + # bytes per plane + stride = (im.size[0] * bits + 7) // 8 + # stride should be even + stride += stride % 2 + # Stride needs to be kept in sync with the PcxEncode.c version. + # Ideally it should be passed in in the state, but the bytes value + # gets overwritten. + + logger.debug( + "PcxImagePlugin._save: xwidth: %d, bits: %d, stride: %d", + im.size[0], + bits, + stride, + ) + + # under windows, we could determine the current screen size with + # "Image.core.display_mode()[1]", but I think that's overkill... + + screen = im.size + + dpi = 100, 100 + + # PCX header + fp.write( + o8(10) + + o8(version) + + o8(1) + + o8(bits) + + o16(0) + + o16(0) + + o16(im.size[0] - 1) + + o16(im.size[1] - 1) + + o16(dpi[0]) + + o16(dpi[1]) + + b"\0" * 24 + + b"\xFF" * 24 + + b"\0" + + o8(planes) + + o16(stride) + + o16(1) + + o16(screen[0]) + + o16(screen[1]) + + b"\0" * 54 + ) + + assert fp.tell() == 128 + + ImageFile._save(im, fp, [("pcx", (0, 0) + im.size, 0, (rawmode, bits * planes))]) + + if im.mode == "P": + # colour palette + fp.write(o8(12)) + fp.write(im.im.getpalette("RGB", "RGB")) # 768 bytes + elif im.mode == "L": + # greyscale palette + fp.write(o8(12)) + for i in range(256): + fp.write(o8(i) * 3) + + +# -------------------------------------------------------------------- +# registry + + +Image.register_open(PcxImageFile.format, PcxImageFile, _accept) +Image.register_save(PcxImageFile.format, _save) + +Image.register_extension(PcxImageFile.format, ".pcx") + +Image.register_mime(PcxImageFile.format, "image/x-pcx") diff --git a/.venv/lib/python3.9/site-packages/PIL/PdfImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/PdfImagePlugin.py new file mode 100644 index 00000000..49ba077e --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/PdfImagePlugin.py @@ -0,0 +1,240 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PDF (Acrobat) file handling +# +# History: +# 1996-07-16 fl Created +# 1997-01-18 fl Fixed header +# 2004-02-21 fl Fixes for 1/L/CMYK images, etc. +# 2004-02-24 fl Fixes for 1 and P images. +# +# Copyright (c) 1997-2004 by Secret Labs AB. All rights reserved. +# Copyright (c) 1996-1997 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +## +# Image plugin for PDF images (output only). +## + +import io +import os +import time + +from . import Image, ImageFile, ImageSequence, PdfParser, __version__ + +# +# -------------------------------------------------------------------- + +# object ids: +# 1. catalogue +# 2. pages +# 3. image +# 4. page +# 5. page contents + + +def _save_all(im, fp, filename): + _save(im, fp, filename, save_all=True) + + +## +# (Internal) Image save plugin for the PDF format. + + +def _save(im, fp, filename, save_all=False): + is_appending = im.encoderinfo.get("append", False) + if is_appending: + existing_pdf = PdfParser.PdfParser(f=fp, filename=filename, mode="r+b") + else: + existing_pdf = PdfParser.PdfParser(f=fp, filename=filename, mode="w+b") + + resolution = im.encoderinfo.get("resolution", 72.0) + + info = { + "title": None + if is_appending + else os.path.splitext(os.path.basename(filename))[0], + "author": None, + "subject": None, + "keywords": None, + "creator": None, + "producer": None, + "creationDate": None if is_appending else time.gmtime(), + "modDate": None if is_appending else time.gmtime(), + } + for k, default in info.items(): + v = im.encoderinfo.get(k) if k in im.encoderinfo else default + if v: + existing_pdf.info[k[0].upper() + k[1:]] = v + + # + # make sure image data is available + im.load() + + existing_pdf.start_writing() + existing_pdf.write_header() + existing_pdf.write_comment(f"created by Pillow {__version__} PDF driver") + + # + # pages + ims = [im] + if save_all: + append_images = im.encoderinfo.get("append_images", []) + for append_im in append_images: + append_im.encoderinfo = im.encoderinfo.copy() + ims.append(append_im) + numberOfPages = 0 + image_refs = [] + page_refs = [] + contents_refs = [] + for im in ims: + im_numberOfPages = 1 + if save_all: + try: + im_numberOfPages = im.n_frames + except AttributeError: + # Image format does not have n_frames. + # It is a single frame image + pass + numberOfPages += im_numberOfPages + for i in range(im_numberOfPages): + image_refs.append(existing_pdf.next_object_id(0)) + page_refs.append(existing_pdf.next_object_id(0)) + contents_refs.append(existing_pdf.next_object_id(0)) + existing_pdf.pages.append(page_refs[-1]) + + # + # catalog and list of pages + existing_pdf.write_catalog() + + pageNumber = 0 + for imSequence in ims: + im_pages = ImageSequence.Iterator(imSequence) if save_all else [imSequence] + for im in im_pages: + # FIXME: Should replace ASCIIHexDecode with RunLengthDecode + # (packbits) or LZWDecode (tiff/lzw compression). Note that + # PDF 1.2 also supports Flatedecode (zip compression). + + bits = 8 + params = None + decode = None + + if im.mode == "1": + filter = "DCTDecode" + colorspace = PdfParser.PdfName("DeviceGray") + procset = "ImageB" # grayscale + bits = 1 + elif im.mode == "L": + filter = "DCTDecode" + # params = f"<< /Predictor 15 /Columns {width-2} >>" + colorspace = PdfParser.PdfName("DeviceGray") + procset = "ImageB" # grayscale + elif im.mode == "P": + filter = "ASCIIHexDecode" + palette = im.im.getpalette("RGB") + colorspace = [ + PdfParser.PdfName("Indexed"), + PdfParser.PdfName("DeviceRGB"), + 255, + PdfParser.PdfBinary(palette), + ] + procset = "ImageI" # indexed color + elif im.mode == "RGB": + filter = "DCTDecode" + colorspace = PdfParser.PdfName("DeviceRGB") + procset = "ImageC" # color images + elif im.mode == "CMYK": + filter = "DCTDecode" + colorspace = PdfParser.PdfName("DeviceCMYK") + procset = "ImageC" # color images + decode = [1, 0, 1, 0, 1, 0, 1, 0] + else: + raise ValueError(f"cannot save mode {im.mode}") + + # + # image + + op = io.BytesIO() + + if filter == "ASCIIHexDecode": + ImageFile._save(im, op, [("hex", (0, 0) + im.size, 0, im.mode)]) + elif filter == "DCTDecode": + Image.SAVE["JPEG"](im, op, filename) + elif filter == "FlateDecode": + ImageFile._save(im, op, [("zip", (0, 0) + im.size, 0, im.mode)]) + elif filter == "RunLengthDecode": + ImageFile._save(im, op, [("packbits", (0, 0) + im.size, 0, im.mode)]) + else: + raise ValueError(f"unsupported PDF filter ({filter})") + + # + # Get image characteristics + + width, height = im.size + + existing_pdf.write_obj( + image_refs[pageNumber], + stream=op.getvalue(), + Type=PdfParser.PdfName("XObject"), + Subtype=PdfParser.PdfName("Image"), + Width=width, # * 72.0 / resolution, + Height=height, # * 72.0 / resolution, + Filter=PdfParser.PdfName(filter), + BitsPerComponent=bits, + Decode=decode, + DecodeParams=params, + ColorSpace=colorspace, + ) + + # + # page + + existing_pdf.write_page( + page_refs[pageNumber], + Resources=PdfParser.PdfDict( + ProcSet=[PdfParser.PdfName("PDF"), PdfParser.PdfName(procset)], + XObject=PdfParser.PdfDict(image=image_refs[pageNumber]), + ), + MediaBox=[ + 0, + 0, + width * 72.0 / resolution, + height * 72.0 / resolution, + ], + Contents=contents_refs[pageNumber], + ) + + # + # page contents + + page_contents = b"q %f 0 0 %f 0 0 cm /image Do Q\n" % ( + width * 72.0 / resolution, + height * 72.0 / resolution, + ) + + existing_pdf.write_obj(contents_refs[pageNumber], stream=page_contents) + + pageNumber += 1 + + # + # trailer + existing_pdf.write_xref_and_trailer() + if hasattr(fp, "flush"): + fp.flush() + existing_pdf.close() + + +# +# -------------------------------------------------------------------- + + +Image.register_save("PDF", _save) +Image.register_save_all("PDF", _save_all) + +Image.register_extension("PDF", ".pdf") + +Image.register_mime("PDF", "application/pdf") diff --git a/.venv/lib/python3.9/site-packages/PIL/PdfParser.py b/.venv/lib/python3.9/site-packages/PIL/PdfParser.py new file mode 100644 index 00000000..b5279e0d --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/PdfParser.py @@ -0,0 +1,997 @@ +import calendar +import codecs +import collections +import mmap +import os +import re +import time +import zlib + + +# see 7.9.2.2 Text String Type on page 86 and D.3 PDFDocEncoding Character Set +# on page 656 +def encode_text(s): + return codecs.BOM_UTF16_BE + s.encode("utf_16_be") + + +PDFDocEncoding = { + 0x16: "\u0017", + 0x18: "\u02D8", + 0x19: "\u02C7", + 0x1A: "\u02C6", + 0x1B: "\u02D9", + 0x1C: "\u02DD", + 0x1D: "\u02DB", + 0x1E: "\u02DA", + 0x1F: "\u02DC", + 0x80: "\u2022", + 0x81: "\u2020", + 0x82: "\u2021", + 0x83: "\u2026", + 0x84: "\u2014", + 0x85: "\u2013", + 0x86: "\u0192", + 0x87: "\u2044", + 0x88: "\u2039", + 0x89: "\u203A", + 0x8A: "\u2212", + 0x8B: "\u2030", + 0x8C: "\u201E", + 0x8D: "\u201C", + 0x8E: "\u201D", + 0x8F: "\u2018", + 0x90: "\u2019", + 0x91: "\u201A", + 0x92: "\u2122", + 0x93: "\uFB01", + 0x94: "\uFB02", + 0x95: "\u0141", + 0x96: "\u0152", + 0x97: "\u0160", + 0x98: "\u0178", + 0x99: "\u017D", + 0x9A: "\u0131", + 0x9B: "\u0142", + 0x9C: "\u0153", + 0x9D: "\u0161", + 0x9E: "\u017E", + 0xA0: "\u20AC", +} + + +def decode_text(b): + if b[: len(codecs.BOM_UTF16_BE)] == codecs.BOM_UTF16_BE: + return b[len(codecs.BOM_UTF16_BE) :].decode("utf_16_be") + else: + return "".join(PDFDocEncoding.get(byte, chr(byte)) for byte in b) + + +class PdfFormatError(RuntimeError): + """An error that probably indicates a syntactic or semantic error in the + PDF file structure""" + + pass + + +def check_format_condition(condition, error_message): + if not condition: + raise PdfFormatError(error_message) + + +class IndirectReference( + collections.namedtuple("IndirectReferenceTuple", ["object_id", "generation"]) +): + def __str__(self): + return "%s %s R" % self + + def __bytes__(self): + return self.__str__().encode("us-ascii") + + def __eq__(self, other): + return ( + other.__class__ is self.__class__ + and other.object_id == self.object_id + and other.generation == self.generation + ) + + def __ne__(self, other): + return not (self == other) + + def __hash__(self): + return hash((self.object_id, self.generation)) + + +class IndirectObjectDef(IndirectReference): + def __str__(self): + return "%s %s obj" % self + + +class XrefTable: + def __init__(self): + self.existing_entries = {} # object ID => (offset, generation) + self.new_entries = {} # object ID => (offset, generation) + self.deleted_entries = {0: 65536} # object ID => generation + self.reading_finished = False + + def __setitem__(self, key, value): + if self.reading_finished: + self.new_entries[key] = value + else: + self.existing_entries[key] = value + if key in self.deleted_entries: + del self.deleted_entries[key] + + def __getitem__(self, key): + try: + return self.new_entries[key] + except KeyError: + return self.existing_entries[key] + + def __delitem__(self, key): + if key in self.new_entries: + generation = self.new_entries[key][1] + 1 + del self.new_entries[key] + self.deleted_entries[key] = generation + elif key in self.existing_entries: + generation = self.existing_entries[key][1] + 1 + self.deleted_entries[key] = generation + elif key in self.deleted_entries: + generation = self.deleted_entries[key] + else: + raise IndexError( + "object ID " + str(key) + " cannot be deleted because it doesn't exist" + ) + + def __contains__(self, key): + return key in self.existing_entries or key in self.new_entries + + def __len__(self): + return len( + set(self.existing_entries.keys()) + | set(self.new_entries.keys()) + | set(self.deleted_entries.keys()) + ) + + def keys(self): + return ( + set(self.existing_entries.keys()) - set(self.deleted_entries.keys()) + ) | set(self.new_entries.keys()) + + def write(self, f): + keys = sorted(set(self.new_entries.keys()) | set(self.deleted_entries.keys())) + deleted_keys = sorted(set(self.deleted_entries.keys())) + startxref = f.tell() + f.write(b"xref\n") + while keys: + # find a contiguous sequence of object IDs + prev = None + for index, key in enumerate(keys): + if prev is None or prev + 1 == key: + prev = key + else: + contiguous_keys = keys[:index] + keys = keys[index:] + break + else: + contiguous_keys = keys + keys = None + f.write(b"%d %d\n" % (contiguous_keys[0], len(contiguous_keys))) + for object_id in contiguous_keys: + if object_id in self.new_entries: + f.write(b"%010d %05d n \n" % self.new_entries[object_id]) + else: + this_deleted_object_id = deleted_keys.pop(0) + check_format_condition( + object_id == this_deleted_object_id, + f"expected the next deleted object ID to be {object_id}, " + f"instead found {this_deleted_object_id}", + ) + try: + next_in_linked_list = deleted_keys[0] + except IndexError: + next_in_linked_list = 0 + f.write( + b"%010d %05d f \n" + % (next_in_linked_list, self.deleted_entries[object_id]) + ) + return startxref + + +class PdfName: + def __init__(self, name): + if isinstance(name, PdfName): + self.name = name.name + elif isinstance(name, bytes): + self.name = name + else: + self.name = name.encode("us-ascii") + + def name_as_str(self): + return self.name.decode("us-ascii") + + def __eq__(self, other): + return ( + isinstance(other, PdfName) and other.name == self.name + ) or other == self.name + + def __hash__(self): + return hash(self.name) + + def __repr__(self): + return f"PdfName({repr(self.name)})" + + @classmethod + def from_pdf_stream(cls, data): + return cls(PdfParser.interpret_name(data)) + + allowed_chars = set(range(33, 127)) - {ord(c) for c in "#%/()<>[]{}"} + + def __bytes__(self): + result = bytearray(b"/") + for b in self.name: + if b in self.allowed_chars: + result.append(b) + else: + result.extend(b"#%02X" % b) + return bytes(result) + + +class PdfArray(list): + def __bytes__(self): + return b"[ " + b" ".join(pdf_repr(x) for x in self) + b" ]" + + +class PdfDict(collections.UserDict): + def __setattr__(self, key, value): + if key == "data": + collections.UserDict.__setattr__(self, key, value) + else: + self[key.encode("us-ascii")] = value + + def __getattr__(self, key): + try: + value = self[key.encode("us-ascii")] + except KeyError as e: + raise AttributeError(key) from e + if isinstance(value, bytes): + value = decode_text(value) + if key.endswith("Date"): + if value.startswith("D:"): + value = value[2:] + + relationship = "Z" + if len(value) > 17: + relationship = value[14] + offset = int(value[15:17]) * 60 + if len(value) > 20: + offset += int(value[18:20]) + + format = "%Y%m%d%H%M%S"[: len(value) - 2] + value = time.strptime(value[: len(format) + 2], format) + if relationship in ["+", "-"]: + offset *= 60 + if relationship == "+": + offset *= -1 + value = time.gmtime(calendar.timegm(value) + offset) + return value + + def __bytes__(self): + out = bytearray(b"<<") + for key, value in self.items(): + if value is None: + continue + value = pdf_repr(value) + out.extend(b"\n") + out.extend(bytes(PdfName(key))) + out.extend(b" ") + out.extend(value) + out.extend(b"\n>>") + return bytes(out) + + +class PdfBinary: + def __init__(self, data): + self.data = data + + def __bytes__(self): + return b"<%s>" % b"".join(b"%02X" % b for b in self.data) + + +class PdfStream: + def __init__(self, dictionary, buf): + self.dictionary = dictionary + self.buf = buf + + def decode(self): + try: + filter = self.dictionary.Filter + except AttributeError: + return self.buf + if filter == b"FlateDecode": + try: + expected_length = self.dictionary.DL + except AttributeError: + expected_length = self.dictionary.Length + return zlib.decompress(self.buf, bufsize=int(expected_length)) + else: + raise NotImplementedError( + f"stream filter {repr(self.dictionary.Filter)} unknown/unsupported" + ) + + +def pdf_repr(x): + if x is True: + return b"true" + elif x is False: + return b"false" + elif x is None: + return b"null" + elif isinstance(x, (PdfName, PdfDict, PdfArray, PdfBinary)): + return bytes(x) + elif isinstance(x, int): + return str(x).encode("us-ascii") + elif isinstance(x, float): + return str(x).encode("us-ascii") + elif isinstance(x, time.struct_time): + return b"(D:" + time.strftime("%Y%m%d%H%M%SZ", x).encode("us-ascii") + b")" + elif isinstance(x, dict): + return bytes(PdfDict(x)) + elif isinstance(x, list): + return bytes(PdfArray(x)) + elif isinstance(x, str): + return pdf_repr(encode_text(x)) + elif isinstance(x, bytes): + # XXX escape more chars? handle binary garbage + x = x.replace(b"\\", b"\\\\") + x = x.replace(b"(", b"\\(") + x = x.replace(b")", b"\\)") + return b"(" + x + b")" + else: + return bytes(x) + + +class PdfParser: + """Based on + https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf + Supports PDF up to 1.4 + """ + + def __init__(self, filename=None, f=None, buf=None, start_offset=0, mode="rb"): + if buf and f: + raise RuntimeError("specify buf or f or filename, but not both buf and f") + self.filename = filename + self.buf = buf + self.f = f + self.start_offset = start_offset + self.should_close_buf = False + self.should_close_file = False + if filename is not None and f is None: + self.f = f = open(filename, mode) + self.should_close_file = True + if f is not None: + self.buf = buf = self.get_buf_from_file(f) + self.should_close_buf = True + if not filename and hasattr(f, "name"): + self.filename = f.name + self.cached_objects = {} + if buf: + self.read_pdf_info() + else: + self.file_size_total = self.file_size_this = 0 + self.root = PdfDict() + self.root_ref = None + self.info = PdfDict() + self.info_ref = None + self.page_tree_root = {} + self.pages = [] + self.orig_pages = [] + self.pages_ref = None + self.last_xref_section_offset = None + self.trailer_dict = {} + self.xref_table = XrefTable() + self.xref_table.reading_finished = True + if f: + self.seek_end() + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + return False # do not suppress exceptions + + def start_writing(self): + self.close_buf() + self.seek_end() + + def close_buf(self): + try: + self.buf.close() + except AttributeError: + pass + self.buf = None + + def close(self): + if self.should_close_buf: + self.close_buf() + if self.f is not None and self.should_close_file: + self.f.close() + self.f = None + + def seek_end(self): + self.f.seek(0, os.SEEK_END) + + def write_header(self): + self.f.write(b"%PDF-1.4\n") + + def write_comment(self, s): + self.f.write(f"% {s}\n".encode("utf-8")) + + def write_catalog(self): + self.del_root() + self.root_ref = self.next_object_id(self.f.tell()) + self.pages_ref = self.next_object_id(0) + self.rewrite_pages() + self.write_obj(self.root_ref, Type=PdfName(b"Catalog"), Pages=self.pages_ref) + self.write_obj( + self.pages_ref, + Type=PdfName(b"Pages"), + Count=len(self.pages), + Kids=self.pages, + ) + return self.root_ref + + def rewrite_pages(self): + pages_tree_nodes_to_delete = [] + for i, page_ref in enumerate(self.orig_pages): + page_info = self.cached_objects[page_ref] + del self.xref_table[page_ref.object_id] + pages_tree_nodes_to_delete.append(page_info[PdfName(b"Parent")]) + if page_ref not in self.pages: + # the page has been deleted + continue + # make dict keys into strings for passing to write_page + stringified_page_info = {} + for key, value in page_info.items(): + # key should be a PdfName + stringified_page_info[key.name_as_str()] = value + stringified_page_info["Parent"] = self.pages_ref + new_page_ref = self.write_page(None, **stringified_page_info) + for j, cur_page_ref in enumerate(self.pages): + if cur_page_ref == page_ref: + # replace the page reference with the new one + self.pages[j] = new_page_ref + # delete redundant Pages tree nodes from xref table + for pages_tree_node_ref in pages_tree_nodes_to_delete: + while pages_tree_node_ref: + pages_tree_node = self.cached_objects[pages_tree_node_ref] + if pages_tree_node_ref.object_id in self.xref_table: + del self.xref_table[pages_tree_node_ref.object_id] + pages_tree_node_ref = pages_tree_node.get(b"Parent", None) + self.orig_pages = [] + + def write_xref_and_trailer(self, new_root_ref=None): + if new_root_ref: + self.del_root() + self.root_ref = new_root_ref + if self.info: + self.info_ref = self.write_obj(None, self.info) + start_xref = self.xref_table.write(self.f) + num_entries = len(self.xref_table) + trailer_dict = {b"Root": self.root_ref, b"Size": num_entries} + if self.last_xref_section_offset is not None: + trailer_dict[b"Prev"] = self.last_xref_section_offset + if self.info: + trailer_dict[b"Info"] = self.info_ref + self.last_xref_section_offset = start_xref + self.f.write( + b"trailer\n" + + bytes(PdfDict(trailer_dict)) + + b"\nstartxref\n%d\n%%%%EOF" % start_xref + ) + + def write_page(self, ref, *objs, **dict_obj): + if isinstance(ref, int): + ref = self.pages[ref] + if "Type" not in dict_obj: + dict_obj["Type"] = PdfName(b"Page") + if "Parent" not in dict_obj: + dict_obj["Parent"] = self.pages_ref + return self.write_obj(ref, *objs, **dict_obj) + + def write_obj(self, ref, *objs, **dict_obj): + f = self.f + if ref is None: + ref = self.next_object_id(f.tell()) + else: + self.xref_table[ref.object_id] = (f.tell(), ref.generation) + f.write(bytes(IndirectObjectDef(*ref))) + stream = dict_obj.pop("stream", None) + if stream is not None: + dict_obj["Length"] = len(stream) + if dict_obj: + f.write(pdf_repr(dict_obj)) + for obj in objs: + f.write(pdf_repr(obj)) + if stream is not None: + f.write(b"stream\n") + f.write(stream) + f.write(b"\nendstream\n") + f.write(b"endobj\n") + return ref + + def del_root(self): + if self.root_ref is None: + return + del self.xref_table[self.root_ref.object_id] + del self.xref_table[self.root[b"Pages"].object_id] + + @staticmethod + def get_buf_from_file(f): + if hasattr(f, "getbuffer"): + return f.getbuffer() + elif hasattr(f, "getvalue"): + return f.getvalue() + else: + try: + return mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) + except ValueError: # cannot mmap an empty file + return b"" + + def read_pdf_info(self): + self.file_size_total = len(self.buf) + self.file_size_this = self.file_size_total - self.start_offset + self.read_trailer() + self.root_ref = self.trailer_dict[b"Root"] + self.info_ref = self.trailer_dict.get(b"Info", None) + self.root = PdfDict(self.read_indirect(self.root_ref)) + if self.info_ref is None: + self.info = PdfDict() + else: + self.info = PdfDict(self.read_indirect(self.info_ref)) + check_format_condition(b"Type" in self.root, "/Type missing in Root") + check_format_condition( + self.root[b"Type"] == b"Catalog", "/Type in Root is not /Catalog" + ) + check_format_condition(b"Pages" in self.root, "/Pages missing in Root") + check_format_condition( + isinstance(self.root[b"Pages"], IndirectReference), + "/Pages in Root is not an indirect reference", + ) + self.pages_ref = self.root[b"Pages"] + self.page_tree_root = self.read_indirect(self.pages_ref) + self.pages = self.linearize_page_tree(self.page_tree_root) + # save the original list of page references + # in case the user modifies, adds or deletes some pages + # and we need to rewrite the pages and their list + self.orig_pages = self.pages[:] + + def next_object_id(self, offset=None): + try: + # TODO: support reuse of deleted objects + reference = IndirectReference(max(self.xref_table.keys()) + 1, 0) + except ValueError: + reference = IndirectReference(1, 0) + if offset is not None: + self.xref_table[reference.object_id] = (offset, 0) + return reference + + delimiter = br"[][()<>{}/%]" + delimiter_or_ws = br"[][()<>{}/%\000\011\012\014\015\040]" + whitespace = br"[\000\011\012\014\015\040]" + whitespace_or_hex = br"[\000\011\012\014\015\0400-9a-fA-F]" + whitespace_optional = whitespace + b"*" + whitespace_mandatory = whitespace + b"+" + whitespace_optional_no_nl = br"[\000\011\014\015\040]*" # no "\012" aka "\n" + newline_only = br"[\r\n]+" + newline = whitespace_optional_no_nl + newline_only + whitespace_optional_no_nl + re_trailer_end = re.compile( + whitespace_mandatory + + br"trailer" + + whitespace_optional + + br"\<\<(.*\>\>)" + + newline + + br"startxref" + + newline + + br"([0-9]+)" + + newline + + br"%%EOF" + + whitespace_optional + + br"$", + re.DOTALL, + ) + re_trailer_prev = re.compile( + whitespace_optional + + br"trailer" + + whitespace_optional + + br"\<\<(.*?\>\>)" + + newline + + br"startxref" + + newline + + br"([0-9]+)" + + newline + + br"%%EOF" + + whitespace_optional, + re.DOTALL, + ) + + def read_trailer(self): + search_start_offset = len(self.buf) - 16384 + if search_start_offset < self.start_offset: + search_start_offset = self.start_offset + m = self.re_trailer_end.search(self.buf, search_start_offset) + check_format_condition(m, "trailer end not found") + # make sure we found the LAST trailer + last_match = m + while m: + last_match = m + m = self.re_trailer_end.search(self.buf, m.start() + 16) + if not m: + m = last_match + trailer_data = m.group(1) + self.last_xref_section_offset = int(m.group(2)) + self.trailer_dict = self.interpret_trailer(trailer_data) + self.xref_table = XrefTable() + self.read_xref_table(xref_section_offset=self.last_xref_section_offset) + if b"Prev" in self.trailer_dict: + self.read_prev_trailer(self.trailer_dict[b"Prev"]) + + def read_prev_trailer(self, xref_section_offset): + trailer_offset = self.read_xref_table(xref_section_offset=xref_section_offset) + m = self.re_trailer_prev.search( + self.buf[trailer_offset : trailer_offset + 16384] + ) + check_format_condition(m, "previous trailer not found") + trailer_data = m.group(1) + check_format_condition( + int(m.group(2)) == xref_section_offset, + "xref section offset in previous trailer doesn't match what was expected", + ) + trailer_dict = self.interpret_trailer(trailer_data) + if b"Prev" in trailer_dict: + self.read_prev_trailer(trailer_dict[b"Prev"]) + + re_whitespace_optional = re.compile(whitespace_optional) + re_name = re.compile( + whitespace_optional + + br"/([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=" + + delimiter_or_ws + + br")" + ) + re_dict_start = re.compile(whitespace_optional + br"\<\<") + re_dict_end = re.compile(whitespace_optional + br"\>\>" + whitespace_optional) + + @classmethod + def interpret_trailer(cls, trailer_data): + trailer = {} + offset = 0 + while True: + m = cls.re_name.match(trailer_data, offset) + if not m: + m = cls.re_dict_end.match(trailer_data, offset) + check_format_condition( + m and m.end() == len(trailer_data), + "name not found in trailer, remaining data: " + + repr(trailer_data[offset:]), + ) + break + key = cls.interpret_name(m.group(1)) + value, offset = cls.get_value(trailer_data, m.end()) + trailer[key] = value + check_format_condition( + b"Size" in trailer and isinstance(trailer[b"Size"], int), + "/Size not in trailer or not an integer", + ) + check_format_condition( + b"Root" in trailer and isinstance(trailer[b"Root"], IndirectReference), + "/Root not in trailer or not an indirect reference", + ) + return trailer + + re_hashes_in_name = re.compile(br"([^#]*)(#([0-9a-fA-F]{2}))?") + + @classmethod + def interpret_name(cls, raw, as_text=False): + name = b"" + for m in cls.re_hashes_in_name.finditer(raw): + if m.group(3): + name += m.group(1) + bytearray.fromhex(m.group(3).decode("us-ascii")) + else: + name += m.group(1) + if as_text: + return name.decode("utf-8") + else: + return bytes(name) + + re_null = re.compile(whitespace_optional + br"null(?=" + delimiter_or_ws + br")") + re_true = re.compile(whitespace_optional + br"true(?=" + delimiter_or_ws + br")") + re_false = re.compile(whitespace_optional + br"false(?=" + delimiter_or_ws + br")") + re_int = re.compile( + whitespace_optional + br"([-+]?[0-9]+)(?=" + delimiter_or_ws + br")" + ) + re_real = re.compile( + whitespace_optional + + br"([-+]?([0-9]+\.[0-9]*|[0-9]*\.[0-9]+))(?=" + + delimiter_or_ws + + br")" + ) + re_array_start = re.compile(whitespace_optional + br"\[") + re_array_end = re.compile(whitespace_optional + br"]") + re_string_hex = re.compile( + whitespace_optional + br"\<(" + whitespace_or_hex + br"*)\>" + ) + re_string_lit = re.compile(whitespace_optional + br"\(") + re_indirect_reference = re.compile( + whitespace_optional + + br"([-+]?[0-9]+)" + + whitespace_mandatory + + br"([-+]?[0-9]+)" + + whitespace_mandatory + + br"R(?=" + + delimiter_or_ws + + br")" + ) + re_indirect_def_start = re.compile( + whitespace_optional + + br"([-+]?[0-9]+)" + + whitespace_mandatory + + br"([-+]?[0-9]+)" + + whitespace_mandatory + + br"obj(?=" + + delimiter_or_ws + + br")" + ) + re_indirect_def_end = re.compile( + whitespace_optional + br"endobj(?=" + delimiter_or_ws + br")" + ) + re_comment = re.compile( + br"(" + whitespace_optional + br"%[^\r\n]*" + newline + br")*" + ) + re_stream_start = re.compile(whitespace_optional + br"stream\r?\n") + re_stream_end = re.compile( + whitespace_optional + br"endstream(?=" + delimiter_or_ws + br")" + ) + + @classmethod + def get_value(cls, data, offset, expect_indirect=None, max_nesting=-1): + if max_nesting == 0: + return None, None + m = cls.re_comment.match(data, offset) + if m: + offset = m.end() + m = cls.re_indirect_def_start.match(data, offset) + if m: + check_format_condition( + int(m.group(1)) > 0, + "indirect object definition: object ID must be greater than 0", + ) + check_format_condition( + int(m.group(2)) >= 0, + "indirect object definition: generation must be non-negative", + ) + check_format_condition( + expect_indirect is None + or expect_indirect + == IndirectReference(int(m.group(1)), int(m.group(2))), + "indirect object definition different than expected", + ) + object, offset = cls.get_value(data, m.end(), max_nesting=max_nesting - 1) + if offset is None: + return object, None + m = cls.re_indirect_def_end.match(data, offset) + check_format_condition(m, "indirect object definition end not found") + return object, m.end() + check_format_condition( + not expect_indirect, "indirect object definition not found" + ) + m = cls.re_indirect_reference.match(data, offset) + if m: + check_format_condition( + int(m.group(1)) > 0, + "indirect object reference: object ID must be greater than 0", + ) + check_format_condition( + int(m.group(2)) >= 0, + "indirect object reference: generation must be non-negative", + ) + return IndirectReference(int(m.group(1)), int(m.group(2))), m.end() + m = cls.re_dict_start.match(data, offset) + if m: + offset = m.end() + result = {} + m = cls.re_dict_end.match(data, offset) + while not m: + key, offset = cls.get_value(data, offset, max_nesting=max_nesting - 1) + if offset is None: + return result, None + value, offset = cls.get_value(data, offset, max_nesting=max_nesting - 1) + result[key] = value + if offset is None: + return result, None + m = cls.re_dict_end.match(data, offset) + offset = m.end() + m = cls.re_stream_start.match(data, offset) + if m: + try: + stream_len = int(result[b"Length"]) + except (TypeError, KeyError, ValueError) as e: + raise PdfFormatError( + "bad or missing Length in stream dict (%r)" + % result.get(b"Length", None) + ) from e + stream_data = data[m.end() : m.end() + stream_len] + m = cls.re_stream_end.match(data, m.end() + stream_len) + check_format_condition(m, "stream end not found") + offset = m.end() + result = PdfStream(PdfDict(result), stream_data) + else: + result = PdfDict(result) + return result, offset + m = cls.re_array_start.match(data, offset) + if m: + offset = m.end() + result = [] + m = cls.re_array_end.match(data, offset) + while not m: + value, offset = cls.get_value(data, offset, max_nesting=max_nesting - 1) + result.append(value) + if offset is None: + return result, None + m = cls.re_array_end.match(data, offset) + return result, m.end() + m = cls.re_null.match(data, offset) + if m: + return None, m.end() + m = cls.re_true.match(data, offset) + if m: + return True, m.end() + m = cls.re_false.match(data, offset) + if m: + return False, m.end() + m = cls.re_name.match(data, offset) + if m: + return PdfName(cls.interpret_name(m.group(1))), m.end() + m = cls.re_int.match(data, offset) + if m: + return int(m.group(1)), m.end() + m = cls.re_real.match(data, offset) + if m: + # XXX Decimal instead of float??? + return float(m.group(1)), m.end() + m = cls.re_string_hex.match(data, offset) + if m: + # filter out whitespace + hex_string = bytearray( + [b for b in m.group(1) if b in b"0123456789abcdefABCDEF"] + ) + if len(hex_string) % 2 == 1: + # append a 0 if the length is not even - yes, at the end + hex_string.append(ord(b"0")) + return bytearray.fromhex(hex_string.decode("us-ascii")), m.end() + m = cls.re_string_lit.match(data, offset) + if m: + return cls.get_literal_string(data, m.end()) + # return None, offset # fallback (only for debugging) + raise PdfFormatError("unrecognized object: " + repr(data[offset : offset + 32])) + + re_lit_str_token = re.compile( + br"(\\[nrtbf()\\])|(\\[0-9]{1,3})|(\\(\r\n|\r|\n))|(\r\n|\r|\n)|(\()|(\))" + ) + escaped_chars = { + b"n": b"\n", + b"r": b"\r", + b"t": b"\t", + b"b": b"\b", + b"f": b"\f", + b"(": b"(", + b")": b")", + b"\\": b"\\", + ord(b"n"): b"\n", + ord(b"r"): b"\r", + ord(b"t"): b"\t", + ord(b"b"): b"\b", + ord(b"f"): b"\f", + ord(b"("): b"(", + ord(b")"): b")", + ord(b"\\"): b"\\", + } + + @classmethod + def get_literal_string(cls, data, offset): + nesting_depth = 0 + result = bytearray() + for m in cls.re_lit_str_token.finditer(data, offset): + result.extend(data[offset : m.start()]) + if m.group(1): + result.extend(cls.escaped_chars[m.group(1)[1]]) + elif m.group(2): + result.append(int(m.group(2)[1:], 8)) + elif m.group(3): + pass + elif m.group(5): + result.extend(b"\n") + elif m.group(6): + result.extend(b"(") + nesting_depth += 1 + elif m.group(7): + if nesting_depth == 0: + return bytes(result), m.end() + result.extend(b")") + nesting_depth -= 1 + offset = m.end() + raise PdfFormatError("unfinished literal string") + + re_xref_section_start = re.compile(whitespace_optional + br"xref" + newline) + re_xref_subsection_start = re.compile( + whitespace_optional + + br"([0-9]+)" + + whitespace_mandatory + + br"([0-9]+)" + + whitespace_optional + + newline_only + ) + re_xref_entry = re.compile(br"([0-9]{10}) ([0-9]{5}) ([fn])( \r| \n|\r\n)") + + def read_xref_table(self, xref_section_offset): + subsection_found = False + m = self.re_xref_section_start.match( + self.buf, xref_section_offset + self.start_offset + ) + check_format_condition(m, "xref section start not found") + offset = m.end() + while True: + m = self.re_xref_subsection_start.match(self.buf, offset) + if not m: + check_format_condition( + subsection_found, "xref subsection start not found" + ) + break + subsection_found = True + offset = m.end() + first_object = int(m.group(1)) + num_objects = int(m.group(2)) + for i in range(first_object, first_object + num_objects): + m = self.re_xref_entry.match(self.buf, offset) + check_format_condition(m, "xref entry not found") + offset = m.end() + is_free = m.group(3) == b"f" + generation = int(m.group(2)) + if not is_free: + new_entry = (int(m.group(1)), generation) + check_format_condition( + i not in self.xref_table or self.xref_table[i] == new_entry, + "xref entry duplicated (and not identical)", + ) + self.xref_table[i] = new_entry + return offset + + def read_indirect(self, ref, max_nesting=-1): + offset, generation = self.xref_table[ref[0]] + check_format_condition( + generation == ref[1], + f"expected to find generation {ref[1]} for object ID {ref[0]} in xref " + f"table, instead found generation {generation} at offset {offset}", + ) + value = self.get_value( + self.buf, + offset + self.start_offset, + expect_indirect=IndirectReference(*ref), + max_nesting=max_nesting, + )[0] + self.cached_objects[ref] = value + return value + + def linearize_page_tree(self, node=None): + if node is None: + node = self.page_tree_root + check_format_condition( + node[b"Type"] == b"Pages", "/Type of page tree node is not /Pages" + ) + pages = [] + for kid in node[b"Kids"]: + kid_object = self.read_indirect(kid) + if kid_object[b"Type"] == b"Page": + pages.append(kid) + else: + pages.extend(self.linearize_page_tree(node=kid_object)) + return pages diff --git a/.venv/lib/python3.9/site-packages/PIL/PixarImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/PixarImagePlugin.py new file mode 100644 index 00000000..c4860b6c --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/PixarImagePlugin.py @@ -0,0 +1,70 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PIXAR raster support for PIL +# +# history: +# 97-01-29 fl Created +# +# notes: +# This is incomplete; it is based on a few samples created with +# Photoshop 2.5 and 3.0, and a summary description provided by +# Greg Coats . Hopefully, "L" and +# "RGBA" support will be added in future versions. +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# + +from . import Image, ImageFile +from ._binary import i16le as i16 + +# +# helpers + + +def _accept(prefix): + return prefix[:4] == b"\200\350\000\000" + + +## +# Image plugin for PIXAR raster images. + + +class PixarImageFile(ImageFile.ImageFile): + + format = "PIXAR" + format_description = "PIXAR raster image" + + def _open(self): + + # assuming a 4-byte magic label + s = self.fp.read(4) + if not _accept(s): + raise SyntaxError("not a PIXAR file") + + # read rest of header + s = s + self.fp.read(508) + + self._size = i16(s, 418), i16(s, 416) + + # get channel/depth descriptions + mode = i16(s, 424), i16(s, 426) + + if mode == (14, 2): + self.mode = "RGB" + # FIXME: to be continued... + + # create tile descriptor (assuming "dumped") + self.tile = [("raw", (0, 0) + self.size, 1024, (self.mode, 0, 1))] + + +# +# -------------------------------------------------------------------- + +Image.register_open(PixarImageFile.format, PixarImageFile, _accept) + +Image.register_extension(PixarImageFile.format, ".pxr") diff --git a/.venv/lib/python3.9/site-packages/PIL/PngImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/PngImagePlugin.py new file mode 100644 index 00000000..0f596f1f --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/PngImagePlugin.py @@ -0,0 +1,1406 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PNG support code +# +# See "PNG (Portable Network Graphics) Specification, version 1.0; +# W3C Recommendation", 1996-10-01, Thomas Boutell (ed.). +# +# history: +# 1996-05-06 fl Created (couldn't resist it) +# 1996-12-14 fl Upgraded, added read and verify support (0.2) +# 1996-12-15 fl Separate PNG stream parser +# 1996-12-29 fl Added write support, added getchunks +# 1996-12-30 fl Eliminated circular references in decoder (0.3) +# 1998-07-12 fl Read/write 16-bit images as mode I (0.4) +# 2001-02-08 fl Added transparency support (from Zircon) (0.5) +# 2001-04-16 fl Don't close data source in "open" method (0.6) +# 2004-02-24 fl Don't even pretend to support interlaced files (0.7) +# 2004-08-31 fl Do basic sanity check on chunk identifiers (0.8) +# 2004-09-20 fl Added PngInfo chunk container +# 2004-12-18 fl Added DPI read support (based on code by Niki Spahiev) +# 2008-08-13 fl Added tRNS support for RGB images +# 2009-03-06 fl Support for preserving ICC profiles (by Florian Hoech) +# 2009-03-08 fl Added zTXT support (from Lowell Alleman) +# 2009-03-29 fl Read interlaced PNG files (from Conrado Porto Lopes Gouvua) +# +# Copyright (c) 1997-2009 by Secret Labs AB +# Copyright (c) 1996 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import itertools +import logging +import re +import struct +import warnings +import zlib + +from . import Image, ImageChops, ImageFile, ImagePalette, ImageSequence +from ._binary import i16be as i16 +from ._binary import i32be as i32 +from ._binary import o8 +from ._binary import o16be as o16 +from ._binary import o32be as o32 + +logger = logging.getLogger(__name__) + +is_cid = re.compile(br"\w\w\w\w").match + + +_MAGIC = b"\211PNG\r\n\032\n" + + +_MODES = { + # supported bits/color combinations, and corresponding modes/rawmodes + # Greyscale + (1, 0): ("1", "1"), + (2, 0): ("L", "L;2"), + (4, 0): ("L", "L;4"), + (8, 0): ("L", "L"), + (16, 0): ("I", "I;16B"), + # Truecolour + (8, 2): ("RGB", "RGB"), + (16, 2): ("RGB", "RGB;16B"), + # Indexed-colour + (1, 3): ("P", "P;1"), + (2, 3): ("P", "P;2"), + (4, 3): ("P", "P;4"), + (8, 3): ("P", "P"), + # Greyscale with alpha + (8, 4): ("LA", "LA"), + (16, 4): ("RGBA", "LA;16B"), # LA;16B->LA not yet available + # Truecolour with alpha + (8, 6): ("RGBA", "RGBA"), + (16, 6): ("RGBA", "RGBA;16B"), +} + + +_simple_palette = re.compile(b"^\xff*\x00\xff*$") + +MAX_TEXT_CHUNK = ImageFile.SAFEBLOCK +""" +Maximum decompressed size for a iTXt or zTXt chunk. +Eliminates decompression bombs where compressed chunks can expand 1000x. +See :ref:`Text in PNG File Format`. +""" +MAX_TEXT_MEMORY = 64 * MAX_TEXT_CHUNK +""" +Set the maximum total text chunk size. +See :ref:`Text in PNG File Format`. +""" + + +# APNG frame disposal modes +APNG_DISPOSE_OP_NONE = 0 +""" +No disposal is done on this frame before rendering the next frame. +See :ref:`Saving APNG sequences`. +""" +APNG_DISPOSE_OP_BACKGROUND = 1 +""" +This frame’s modified region is cleared to fully transparent black before rendering +the next frame. +See :ref:`Saving APNG sequences`. +""" +APNG_DISPOSE_OP_PREVIOUS = 2 +""" +This frame’s modified region is reverted to the previous frame’s contents before +rendering the next frame. +See :ref:`Saving APNG sequences`. +""" + +# APNG frame blend modes +APNG_BLEND_OP_SOURCE = 0 +""" +All color components of this frame, including alpha, overwrite the previous output +image contents. +See :ref:`Saving APNG sequences`. +""" +APNG_BLEND_OP_OVER = 1 +""" +This frame should be alpha composited with the previous output image contents. +See :ref:`Saving APNG sequences`. +""" + + +def _safe_zlib_decompress(s): + dobj = zlib.decompressobj() + plaintext = dobj.decompress(s, MAX_TEXT_CHUNK) + if dobj.unconsumed_tail: + raise ValueError("Decompressed Data Too Large") + return plaintext + + +def _crc32(data, seed=0): + return zlib.crc32(data, seed) & 0xFFFFFFFF + + +# -------------------------------------------------------------------- +# Support classes. Suitable for PNG and related formats like MNG etc. + + +class ChunkStream: + def __init__(self, fp): + + self.fp = fp + self.queue = [] + + def read(self): + """Fetch a new chunk. Returns header information.""" + cid = None + + if self.queue: + cid, pos, length = self.queue.pop() + self.fp.seek(pos) + else: + s = self.fp.read(8) + cid = s[4:] + pos = self.fp.tell() + length = i32(s) + + if not is_cid(cid): + if not ImageFile.LOAD_TRUNCATED_IMAGES: + raise SyntaxError(f"broken PNG file (chunk {repr(cid)})") + + return cid, pos, length + + def __enter__(self): + return self + + def __exit__(self, *args): + self.close() + + def close(self): + self.queue = self.crc = self.fp = None + + def push(self, cid, pos, length): + + self.queue.append((cid, pos, length)) + + def call(self, cid, pos, length): + """Call the appropriate chunk handler""" + + logger.debug("STREAM %r %s %s", cid, pos, length) + return getattr(self, "chunk_" + cid.decode("ascii"))(pos, length) + + def crc(self, cid, data): + """Read and verify checksum""" + + # Skip CRC checks for ancillary chunks if allowed to load truncated + # images + # 5th byte of first char is 1 [specs, section 5.4] + if ImageFile.LOAD_TRUNCATED_IMAGES and (cid[0] >> 5 & 1): + self.crc_skip(cid, data) + return + + try: + crc1 = _crc32(data, _crc32(cid)) + crc2 = i32(self.fp.read(4)) + if crc1 != crc2: + raise SyntaxError( + f"broken PNG file (bad header checksum in {repr(cid)})" + ) + except struct.error as e: + raise SyntaxError( + f"broken PNG file (incomplete checksum in {repr(cid)})" + ) from e + + def crc_skip(self, cid, data): + """Read checksum. Used if the C module is not present""" + + self.fp.read(4) + + def verify(self, endchunk=b"IEND"): + + # Simple approach; just calculate checksum for all remaining + # blocks. Must be called directly after open. + + cids = [] + + while True: + try: + cid, pos, length = self.read() + except struct.error as e: + raise OSError("truncated PNG file") from e + + if cid == endchunk: + break + self.crc(cid, ImageFile._safe_read(self.fp, length)) + cids.append(cid) + + return cids + + +class iTXt(str): + """ + Subclass of string to allow iTXt chunks to look like strings while + keeping their extra information + + """ + + @staticmethod + def __new__(cls, text, lang=None, tkey=None): + """ + :param cls: the class to use when creating the instance + :param text: value for this key + :param lang: language code + :param tkey: UTF-8 version of the key name + """ + + self = str.__new__(cls, text) + self.lang = lang + self.tkey = tkey + return self + + +class PngInfo: + """ + PNG chunk container (for use with save(pnginfo=)) + + """ + + def __init__(self): + self.chunks = [] + + def add(self, cid, data, after_idat=False): + """Appends an arbitrary chunk. Use with caution. + + :param cid: a byte string, 4 bytes long. + :param data: a byte string of the encoded data + :param after_idat: for use with private chunks. Whether the chunk + should be written after IDAT + + """ + + chunk = [cid, data] + if after_idat: + chunk.append(True) + self.chunks.append(tuple(chunk)) + + def add_itxt(self, key, value, lang="", tkey="", zip=False): + """Appends an iTXt chunk. + + :param key: latin-1 encodable text key name + :param value: value for this key + :param lang: language code + :param tkey: UTF-8 version of the key name + :param zip: compression flag + + """ + + if not isinstance(key, bytes): + key = key.encode("latin-1", "strict") + if not isinstance(value, bytes): + value = value.encode("utf-8", "strict") + if not isinstance(lang, bytes): + lang = lang.encode("utf-8", "strict") + if not isinstance(tkey, bytes): + tkey = tkey.encode("utf-8", "strict") + + if zip: + self.add( + b"iTXt", + key + b"\0\x01\0" + lang + b"\0" + tkey + b"\0" + zlib.compress(value), + ) + else: + self.add(b"iTXt", key + b"\0\0\0" + lang + b"\0" + tkey + b"\0" + value) + + def add_text(self, key, value, zip=False): + """Appends a text chunk. + + :param key: latin-1 encodable text key name + :param value: value for this key, text or an + :py:class:`PIL.PngImagePlugin.iTXt` instance + :param zip: compression flag + + """ + if isinstance(value, iTXt): + return self.add_itxt(key, value, value.lang, value.tkey, zip=zip) + + # The tEXt chunk stores latin-1 text + if not isinstance(value, bytes): + try: + value = value.encode("latin-1", "strict") + except UnicodeError: + return self.add_itxt(key, value, zip=zip) + + if not isinstance(key, bytes): + key = key.encode("latin-1", "strict") + + if zip: + self.add(b"zTXt", key + b"\0\0" + zlib.compress(value)) + else: + self.add(b"tEXt", key + b"\0" + value) + + +# -------------------------------------------------------------------- +# PNG image stream (IHDR/IEND) + + +class PngStream(ChunkStream): + def __init__(self, fp): + super().__init__(fp) + + # local copies of Image attributes + self.im_info = {} + self.im_text = {} + self.im_size = (0, 0) + self.im_mode = None + self.im_tile = None + self.im_palette = None + self.im_custom_mimetype = None + self.im_n_frames = None + self._seq_num = None + self.rewind_state = None + + self.text_memory = 0 + + def check_text_memory(self, chunklen): + self.text_memory += chunklen + if self.text_memory > MAX_TEXT_MEMORY: + raise ValueError( + "Too much memory used in text chunks: " + f"{self.text_memory}>MAX_TEXT_MEMORY" + ) + + def save_rewind(self): + self.rewind_state = { + "info": self.im_info.copy(), + "tile": self.im_tile, + "seq_num": self._seq_num, + } + + def rewind(self): + self.im_info = self.rewind_state["info"] + self.im_tile = self.rewind_state["tile"] + self._seq_num = self.rewind_state["seq_num"] + + def chunk_iCCP(self, pos, length): + + # ICC profile + s = ImageFile._safe_read(self.fp, length) + # according to PNG spec, the iCCP chunk contains: + # Profile name 1-79 bytes (character string) + # Null separator 1 byte (null character) + # Compression method 1 byte (0) + # Compressed profile n bytes (zlib with deflate compression) + i = s.find(b"\0") + logger.debug("iCCP profile name %r", s[:i]) + logger.debug("Compression method %s", s[i]) + comp_method = s[i] + if comp_method != 0: + raise SyntaxError(f"Unknown compression method {comp_method} in iCCP chunk") + try: + icc_profile = _safe_zlib_decompress(s[i + 2 :]) + except ValueError: + if ImageFile.LOAD_TRUNCATED_IMAGES: + icc_profile = None + else: + raise + except zlib.error: + icc_profile = None # FIXME + self.im_info["icc_profile"] = icc_profile + return s + + def chunk_IHDR(self, pos, length): + + # image header + s = ImageFile._safe_read(self.fp, length) + self.im_size = i32(s, 0), i32(s, 4) + try: + self.im_mode, self.im_rawmode = _MODES[(s[8], s[9])] + except Exception: + pass + if s[12]: + self.im_info["interlace"] = 1 + if s[11]: + raise SyntaxError("unknown filter category") + return s + + def chunk_IDAT(self, pos, length): + + # image data + if "bbox" in self.im_info: + tile = [("zip", self.im_info["bbox"], pos, self.im_rawmode)] + else: + if self.im_n_frames is not None: + self.im_info["default_image"] = True + tile = [("zip", (0, 0) + self.im_size, pos, self.im_rawmode)] + self.im_tile = tile + self.im_idat = length + raise EOFError + + def chunk_IEND(self, pos, length): + + # end of PNG image + raise EOFError + + def chunk_PLTE(self, pos, length): + + # palette + s = ImageFile._safe_read(self.fp, length) + if self.im_mode == "P": + self.im_palette = "RGB", s + return s + + def chunk_tRNS(self, pos, length): + + # transparency + s = ImageFile._safe_read(self.fp, length) + if self.im_mode == "P": + if _simple_palette.match(s): + # tRNS contains only one full-transparent entry, + # other entries are full opaque + i = s.find(b"\0") + if i >= 0: + self.im_info["transparency"] = i + else: + # otherwise, we have a byte string with one alpha value + # for each palette entry + self.im_info["transparency"] = s + elif self.im_mode in ("1", "L", "I"): + self.im_info["transparency"] = i16(s) + elif self.im_mode == "RGB": + self.im_info["transparency"] = i16(s), i16(s, 2), i16(s, 4) + return s + + def chunk_gAMA(self, pos, length): + # gamma setting + s = ImageFile._safe_read(self.fp, length) + self.im_info["gamma"] = i32(s) / 100000.0 + return s + + def chunk_cHRM(self, pos, length): + # chromaticity, 8 unsigned ints, actual value is scaled by 100,000 + # WP x,y, Red x,y, Green x,y Blue x,y + + s = ImageFile._safe_read(self.fp, length) + raw_vals = struct.unpack(">%dI" % (len(s) // 4), s) + self.im_info["chromaticity"] = tuple(elt / 100000.0 for elt in raw_vals) + return s + + def chunk_sRGB(self, pos, length): + # srgb rendering intent, 1 byte + # 0 perceptual + # 1 relative colorimetric + # 2 saturation + # 3 absolute colorimetric + + s = ImageFile._safe_read(self.fp, length) + self.im_info["srgb"] = s[0] + return s + + def chunk_pHYs(self, pos, length): + + # pixels per unit + s = ImageFile._safe_read(self.fp, length) + px, py = i32(s, 0), i32(s, 4) + unit = s[8] + if unit == 1: # meter + dpi = px * 0.0254, py * 0.0254 + self.im_info["dpi"] = dpi + elif unit == 0: + self.im_info["aspect"] = px, py + return s + + def chunk_tEXt(self, pos, length): + + # text + s = ImageFile._safe_read(self.fp, length) + try: + k, v = s.split(b"\0", 1) + except ValueError: + # fallback for broken tEXt tags + k = s + v = b"" + if k: + k = k.decode("latin-1", "strict") + v_str = v.decode("latin-1", "replace") + + self.im_info[k] = v if k == "exif" else v_str + self.im_text[k] = v_str + self.check_text_memory(len(v_str)) + + return s + + def chunk_zTXt(self, pos, length): + + # compressed text + s = ImageFile._safe_read(self.fp, length) + try: + k, v = s.split(b"\0", 1) + except ValueError: + k = s + v = b"" + if v: + comp_method = v[0] + else: + comp_method = 0 + if comp_method != 0: + raise SyntaxError(f"Unknown compression method {comp_method} in zTXt chunk") + try: + v = _safe_zlib_decompress(v[1:]) + except ValueError: + if ImageFile.LOAD_TRUNCATED_IMAGES: + v = b"" + else: + raise + except zlib.error: + v = b"" + + if k: + k = k.decode("latin-1", "strict") + v = v.decode("latin-1", "replace") + + self.im_info[k] = self.im_text[k] = v + self.check_text_memory(len(v)) + + return s + + def chunk_iTXt(self, pos, length): + + # international text + r = s = ImageFile._safe_read(self.fp, length) + try: + k, r = r.split(b"\0", 1) + except ValueError: + return s + if len(r) < 2: + return s + cf, cm, r = r[0], r[1], r[2:] + try: + lang, tk, v = r.split(b"\0", 2) + except ValueError: + return s + if cf != 0: + if cm == 0: + try: + v = _safe_zlib_decompress(v) + except ValueError: + if ImageFile.LOAD_TRUNCATED_IMAGES: + return s + else: + raise + except zlib.error: + return s + else: + return s + try: + k = k.decode("latin-1", "strict") + lang = lang.decode("utf-8", "strict") + tk = tk.decode("utf-8", "strict") + v = v.decode("utf-8", "strict") + except UnicodeError: + return s + + self.im_info[k] = self.im_text[k] = iTXt(v, lang, tk) + self.check_text_memory(len(v)) + + return s + + def chunk_eXIf(self, pos, length): + s = ImageFile._safe_read(self.fp, length) + self.im_info["exif"] = b"Exif\x00\x00" + s + return s + + # APNG chunks + def chunk_acTL(self, pos, length): + s = ImageFile._safe_read(self.fp, length) + if self.im_n_frames is not None: + self.im_n_frames = None + warnings.warn("Invalid APNG, will use default PNG image if possible") + return s + n_frames = i32(s) + if n_frames == 0 or n_frames > 0x80000000: + warnings.warn("Invalid APNG, will use default PNG image if possible") + return s + self.im_n_frames = n_frames + self.im_info["loop"] = i32(s, 4) + self.im_custom_mimetype = "image/apng" + return s + + def chunk_fcTL(self, pos, length): + s = ImageFile._safe_read(self.fp, length) + seq = i32(s) + if (self._seq_num is None and seq != 0) or ( + self._seq_num is not None and self._seq_num != seq - 1 + ): + raise SyntaxError("APNG contains frame sequence errors") + self._seq_num = seq + width, height = i32(s, 4), i32(s, 8) + px, py = i32(s, 12), i32(s, 16) + im_w, im_h = self.im_size + if px + width > im_w or py + height > im_h: + raise SyntaxError("APNG contains invalid frames") + self.im_info["bbox"] = (px, py, px + width, py + height) + delay_num, delay_den = i16(s, 20), i16(s, 22) + if delay_den == 0: + delay_den = 100 + self.im_info["duration"] = float(delay_num) / float(delay_den) * 1000 + self.im_info["disposal"] = s[24] + self.im_info["blend"] = s[25] + return s + + def chunk_fdAT(self, pos, length): + s = ImageFile._safe_read(self.fp, 4) + seq = i32(s) + if self._seq_num != seq - 1: + raise SyntaxError("APNG contains frame sequence errors") + self._seq_num = seq + return self.chunk_IDAT(pos + 4, length - 4) + + +# -------------------------------------------------------------------- +# PNG reader + + +def _accept(prefix): + return prefix[:8] == _MAGIC + + +## +# Image plugin for PNG images. + + +class PngImageFile(ImageFile.ImageFile): + + format = "PNG" + format_description = "Portable network graphics" + + def _open(self): + + if not _accept(self.fp.read(8)): + raise SyntaxError("not a PNG file") + self.__fp = self.fp + self.__frame = 0 + + # + # Parse headers up to the first IDAT or fDAT chunk + + self.private_chunks = [] + self.png = PngStream(self.fp) + + while True: + + # + # get next chunk + + cid, pos, length = self.png.read() + + try: + s = self.png.call(cid, pos, length) + except EOFError: + break + except AttributeError: + logger.debug("%r %s %s (unknown)", cid, pos, length) + s = ImageFile._safe_read(self.fp, length) + if cid[1:2].islower(): + self.private_chunks.append((cid, s)) + + self.png.crc(cid, s) + + # + # Copy relevant attributes from the PngStream. An alternative + # would be to let the PngStream class modify these attributes + # directly, but that introduces circular references which are + # difficult to break if things go wrong in the decoder... + # (believe me, I've tried ;-) + + self.mode = self.png.im_mode + self._size = self.png.im_size + self.info = self.png.im_info + self._text = None + self.tile = self.png.im_tile + self.custom_mimetype = self.png.im_custom_mimetype + self.n_frames = self.png.im_n_frames or 1 + self.default_image = self.info.get("default_image", False) + + if self.png.im_palette: + rawmode, data = self.png.im_palette + self.palette = ImagePalette.raw(rawmode, data) + + if cid == b"fdAT": + self.__prepare_idat = length - 4 + else: + self.__prepare_idat = length # used by load_prepare() + + if self.png.im_n_frames is not None: + self._close_exclusive_fp_after_loading = False + self.png.save_rewind() + self.__rewind_idat = self.__prepare_idat + self.__rewind = self.__fp.tell() + if self.default_image: + # IDAT chunk contains default image and not first animation frame + self.n_frames += 1 + self._seek(0) + self.is_animated = self.n_frames > 1 + + @property + def text(self): + # experimental + if self._text is None: + # iTxt, tEXt and zTXt chunks may appear at the end of the file + # So load the file to ensure that they are read + if self.is_animated: + frame = self.__frame + # for APNG, seek to the final frame before loading + self.seek(self.n_frames - 1) + self.load() + if self.is_animated: + self.seek(frame) + return self._text + + def verify(self): + """Verify PNG file""" + + if self.fp is None: + raise RuntimeError("verify must be called directly after open") + + # back up to beginning of IDAT block + self.fp.seek(self.tile[0][2] - 8) + + self.png.verify() + self.png.close() + + if self._exclusive_fp: + self.fp.close() + self.fp = None + + def seek(self, frame): + if not self._seek_check(frame): + return + if frame < self.__frame: + self._seek(0, True) + + last_frame = self.__frame + for f in range(self.__frame + 1, frame + 1): + try: + self._seek(f) + except EOFError as e: + self.seek(last_frame) + raise EOFError("no more images in APNG file") from e + + def _seek(self, frame, rewind=False): + if frame == 0: + if rewind: + self.__fp.seek(self.__rewind) + self.png.rewind() + self.__prepare_idat = self.__rewind_idat + self.im = None + if self.pyaccess: + self.pyaccess = None + self.info = self.png.im_info + self.tile = self.png.im_tile + self.fp = self.__fp + self._prev_im = None + self.dispose = None + self.default_image = self.info.get("default_image", False) + self.dispose_op = self.info.get("disposal") + self.blend_op = self.info.get("blend") + self.dispose_extent = self.info.get("bbox") + self.__frame = 0 + else: + if frame != self.__frame + 1: + raise ValueError(f"cannot seek to frame {frame}") + + # ensure previous frame was loaded + self.load() + + if self.dispose: + self.im.paste(self.dispose, self.dispose_extent) + self._prev_im = self.im.copy() + + self.fp = self.__fp + + # advance to the next frame + if self.__prepare_idat: + ImageFile._safe_read(self.fp, self.__prepare_idat) + self.__prepare_idat = 0 + frame_start = False + while True: + self.fp.read(4) # CRC + + try: + cid, pos, length = self.png.read() + except (struct.error, SyntaxError): + break + + if cid == b"IEND": + raise EOFError("No more images in APNG file") + if cid == b"fcTL": + if frame_start: + # there must be at least one fdAT chunk between fcTL chunks + raise SyntaxError("APNG missing frame data") + frame_start = True + + try: + self.png.call(cid, pos, length) + except UnicodeDecodeError: + break + except EOFError: + if cid == b"fdAT": + length -= 4 + if frame_start: + self.__prepare_idat = length + break + ImageFile._safe_read(self.fp, length) + except AttributeError: + logger.debug("%r %s %s (unknown)", cid, pos, length) + ImageFile._safe_read(self.fp, length) + + self.__frame = frame + self.tile = self.png.im_tile + self.dispose_op = self.info.get("disposal") + self.blend_op = self.info.get("blend") + self.dispose_extent = self.info.get("bbox") + + if not self.tile: + raise EOFError + + # setup frame disposal (actual disposal done when needed in the next _seek()) + if self._prev_im is None and self.dispose_op == APNG_DISPOSE_OP_PREVIOUS: + self.dispose_op = APNG_DISPOSE_OP_BACKGROUND + + if self.dispose_op == APNG_DISPOSE_OP_PREVIOUS: + self.dispose = self._prev_im.copy() + self.dispose = self._crop(self.dispose, self.dispose_extent) + elif self.dispose_op == APNG_DISPOSE_OP_BACKGROUND: + self.dispose = Image.core.fill(self.mode, self.size) + self.dispose = self._crop(self.dispose, self.dispose_extent) + else: + self.dispose = None + + def tell(self): + return self.__frame + + def load_prepare(self): + """internal: prepare to read PNG file""" + + if self.info.get("interlace"): + self.decoderconfig = self.decoderconfig + (1,) + + self.__idat = self.__prepare_idat # used by load_read() + ImageFile.ImageFile.load_prepare(self) + + def load_read(self, read_bytes): + """internal: read more image data""" + + while self.__idat == 0: + # end of chunk, skip forward to next one + + self.fp.read(4) # CRC + + cid, pos, length = self.png.read() + + if cid not in [b"IDAT", b"DDAT", b"fdAT"]: + self.png.push(cid, pos, length) + return b"" + + if cid == b"fdAT": + try: + self.png.call(cid, pos, length) + except EOFError: + pass + self.__idat = length - 4 # sequence_num has already been read + else: + self.__idat = length # empty chunks are allowed + + # read more data from this chunk + if read_bytes <= 0: + read_bytes = self.__idat + else: + read_bytes = min(read_bytes, self.__idat) + + self.__idat = self.__idat - read_bytes + + return self.fp.read(read_bytes) + + def load_end(self): + """internal: finished reading image data""" + if self.__idat != 0: + self.fp.read(self.__idat) + while True: + self.fp.read(4) # CRC + + try: + cid, pos, length = self.png.read() + except (struct.error, SyntaxError): + break + + if cid == b"IEND": + break + elif cid == b"fcTL" and self.is_animated: + # start of the next frame, stop reading + self.__prepare_idat = 0 + self.png.push(cid, pos, length) + break + + try: + self.png.call(cid, pos, length) + except UnicodeDecodeError: + break + except EOFError: + if cid == b"fdAT": + length -= 4 + ImageFile._safe_read(self.fp, length) + except AttributeError: + logger.debug("%r %s %s (unknown)", cid, pos, length) + s = ImageFile._safe_read(self.fp, length) + if cid[1:2].islower(): + self.private_chunks.append((cid, s, True)) + self._text = self.png.im_text + if not self.is_animated: + self.png.close() + self.png = None + else: + if self._prev_im and self.blend_op == APNG_BLEND_OP_OVER: + updated = self._crop(self.im, self.dispose_extent) + self._prev_im.paste( + updated, self.dispose_extent, updated.convert("RGBA") + ) + self.im = self._prev_im + if self.pyaccess: + self.pyaccess = None + + def _getexif(self): + if "exif" not in self.info: + self.load() + if "exif" not in self.info and "Raw profile type exif" not in self.info: + return None + return self.getexif()._get_merged_dict() + + def getexif(self): + if "exif" not in self.info: + self.load() + + return super().getexif() + + def getxmp(self): + """ + Returns a dictionary containing the XMP tags. + Requires defusedxml to be installed. + :returns: XMP tags in a dictionary. + """ + return ( + self._getxmp(self.info["XML:com.adobe.xmp"]) + if "XML:com.adobe.xmp" in self.info + else {} + ) + + def _close__fp(self): + try: + if self.__fp != self.fp: + self.__fp.close() + except AttributeError: + pass + finally: + self.__fp = None + + +# -------------------------------------------------------------------- +# PNG writer + +_OUTMODES = { + # supported PIL modes, and corresponding rawmodes/bits/color combinations + "1": ("1", b"\x01\x00"), + "L;1": ("L;1", b"\x01\x00"), + "L;2": ("L;2", b"\x02\x00"), + "L;4": ("L;4", b"\x04\x00"), + "L": ("L", b"\x08\x00"), + "LA": ("LA", b"\x08\x04"), + "I": ("I;16B", b"\x10\x00"), + "I;16": ("I;16B", b"\x10\x00"), + "P;1": ("P;1", b"\x01\x03"), + "P;2": ("P;2", b"\x02\x03"), + "P;4": ("P;4", b"\x04\x03"), + "P": ("P", b"\x08\x03"), + "RGB": ("RGB", b"\x08\x02"), + "RGBA": ("RGBA", b"\x08\x06"), +} + + +def putchunk(fp, cid, *data): + """Write a PNG chunk (including CRC field)""" + + data = b"".join(data) + + fp.write(o32(len(data)) + cid) + fp.write(data) + crc = _crc32(data, _crc32(cid)) + fp.write(o32(crc)) + + +class _idat: + # wrap output from the encoder in IDAT chunks + + def __init__(self, fp, chunk): + self.fp = fp + self.chunk = chunk + + def write(self, data): + self.chunk(self.fp, b"IDAT", data) + + +class _fdat: + # wrap encoder output in fdAT chunks + + def __init__(self, fp, chunk, seq_num): + self.fp = fp + self.chunk = chunk + self.seq_num = seq_num + + def write(self, data): + self.chunk(self.fp, b"fdAT", o32(self.seq_num), data) + self.seq_num += 1 + + +def _write_multiple_frames(im, fp, chunk, rawmode): + default_image = im.encoderinfo.get("default_image", im.info.get("default_image")) + duration = im.encoderinfo.get("duration", im.info.get("duration", 0)) + loop = im.encoderinfo.get("loop", im.info.get("loop", 0)) + disposal = im.encoderinfo.get( + "disposal", im.info.get("disposal", APNG_DISPOSE_OP_NONE) + ) + blend = im.encoderinfo.get("blend", im.info.get("blend", APNG_BLEND_OP_SOURCE)) + + if default_image: + chain = itertools.chain(im.encoderinfo.get("append_images", [])) + else: + chain = itertools.chain([im], im.encoderinfo.get("append_images", [])) + + im_frames = [] + frame_count = 0 + for im_seq in chain: + for im_frame in ImageSequence.Iterator(im_seq): + im_frame = im_frame.copy() + if im_frame.mode != im.mode: + if im.mode == "P": + im_frame = im_frame.convert(im.mode, palette=im.palette) + else: + im_frame = im_frame.convert(im.mode) + encoderinfo = im.encoderinfo.copy() + if isinstance(duration, (list, tuple)): + encoderinfo["duration"] = duration[frame_count] + if isinstance(disposal, (list, tuple)): + encoderinfo["disposal"] = disposal[frame_count] + if isinstance(blend, (list, tuple)): + encoderinfo["blend"] = blend[frame_count] + frame_count += 1 + + if im_frames: + previous = im_frames[-1] + prev_disposal = previous["encoderinfo"].get("disposal") + prev_blend = previous["encoderinfo"].get("blend") + if prev_disposal == APNG_DISPOSE_OP_PREVIOUS and len(im_frames) < 2: + prev_disposal = APNG_DISPOSE_OP_BACKGROUND + + if prev_disposal == APNG_DISPOSE_OP_BACKGROUND: + base_im = previous["im"] + dispose = Image.core.fill("RGBA", im.size, (0, 0, 0, 0)) + bbox = previous["bbox"] + if bbox: + dispose = dispose.crop(bbox) + else: + bbox = (0, 0) + im.size + base_im.paste(dispose, bbox) + elif prev_disposal == APNG_DISPOSE_OP_PREVIOUS: + base_im = im_frames[-2]["im"] + else: + base_im = previous["im"] + delta = ImageChops.subtract_modulo( + im_frame.convert("RGB"), base_im.convert("RGB") + ) + bbox = delta.getbbox() + if ( + not bbox + and prev_disposal == encoderinfo.get("disposal") + and prev_blend == encoderinfo.get("blend") + ): + if isinstance(duration, (list, tuple)): + previous["encoderinfo"]["duration"] += encoderinfo["duration"] + continue + else: + bbox = None + im_frames.append({"im": im_frame, "bbox": bbox, "encoderinfo": encoderinfo}) + + # animation control + chunk( + fp, + b"acTL", + o32(len(im_frames)), # 0: num_frames + o32(loop), # 4: num_plays + ) + + # default image IDAT (if it exists) + if default_image: + ImageFile._save(im, _idat(fp, chunk), [("zip", (0, 0) + im.size, 0, rawmode)]) + + seq_num = 0 + for frame, frame_data in enumerate(im_frames): + im_frame = frame_data["im"] + if not frame_data["bbox"]: + bbox = (0, 0) + im_frame.size + else: + bbox = frame_data["bbox"] + im_frame = im_frame.crop(bbox) + size = im_frame.size + encoderinfo = frame_data["encoderinfo"] + frame_duration = int(round(encoderinfo.get("duration", duration))) + frame_disposal = encoderinfo.get("disposal", disposal) + frame_blend = encoderinfo.get("blend", blend) + # frame control + chunk( + fp, + b"fcTL", + o32(seq_num), # sequence_number + o32(size[0]), # width + o32(size[1]), # height + o32(bbox[0]), # x_offset + o32(bbox[1]), # y_offset + o16(frame_duration), # delay_numerator + o16(1000), # delay_denominator + o8(frame_disposal), # dispose_op + o8(frame_blend), # blend_op + ) + seq_num += 1 + # frame data + if frame == 0 and not default_image: + # first frame must be in IDAT chunks for backwards compatibility + ImageFile._save( + im_frame, + _idat(fp, chunk), + [("zip", (0, 0) + im_frame.size, 0, rawmode)], + ) + else: + fdat_chunks = _fdat(fp, chunk, seq_num) + ImageFile._save( + im_frame, + fdat_chunks, + [("zip", (0, 0) + im_frame.size, 0, rawmode)], + ) + seq_num = fdat_chunks.seq_num + + +def _save_all(im, fp, filename): + _save(im, fp, filename, save_all=True) + + +def _save(im, fp, filename, chunk=putchunk, save_all=False): + # save an image to disk (called by the save method) + + mode = im.mode + + if mode == "P": + + # + # attempt to minimize storage requirements for palette images + if "bits" in im.encoderinfo: + # number of bits specified by user + colors = min(1 << im.encoderinfo["bits"], 256) + else: + # check palette contents + if im.palette: + colors = max(min(len(im.palette.getdata()[1]) // 3, 256), 1) + else: + colors = 256 + + if colors <= 16: + if colors <= 2: + bits = 1 + elif colors <= 4: + bits = 2 + else: + bits = 4 + mode = f"{mode};{bits}" + + # encoder options + im.encoderconfig = ( + im.encoderinfo.get("optimize", False), + im.encoderinfo.get("compress_level", -1), + im.encoderinfo.get("compress_type", -1), + im.encoderinfo.get("dictionary", b""), + ) + + # get the corresponding PNG mode + try: + rawmode, mode = _OUTMODES[mode] + except KeyError as e: + raise OSError(f"cannot write mode {mode} as PNG") from e + + # + # write minimal PNG file + + fp.write(_MAGIC) + + chunk( + fp, + b"IHDR", + o32(im.size[0]), # 0: size + o32(im.size[1]), + mode, # 8: depth/type + b"\0", # 10: compression + b"\0", # 11: filter category + b"\0", # 12: interlace flag + ) + + chunks = [b"cHRM", b"gAMA", b"sBIT", b"sRGB", b"tIME"] + + icc = im.encoderinfo.get("icc_profile", im.info.get("icc_profile")) + if icc: + # ICC profile + # according to PNG spec, the iCCP chunk contains: + # Profile name 1-79 bytes (character string) + # Null separator 1 byte (null character) + # Compression method 1 byte (0) + # Compressed profile n bytes (zlib with deflate compression) + name = b"ICC Profile" + data = name + b"\0\0" + zlib.compress(icc) + chunk(fp, b"iCCP", data) + + # You must either have sRGB or iCCP. + # Disallow sRGB chunks when an iCCP-chunk has been emitted. + chunks.remove(b"sRGB") + + info = im.encoderinfo.get("pnginfo") + if info: + chunks_multiple_allowed = [b"sPLT", b"iTXt", b"tEXt", b"zTXt"] + for info_chunk in info.chunks: + cid, data = info_chunk[:2] + if cid in chunks: + chunks.remove(cid) + chunk(fp, cid, data) + elif cid in chunks_multiple_allowed: + chunk(fp, cid, data) + elif cid[1:2].islower(): + # Private chunk + after_idat = info_chunk[2:3] + if not after_idat: + chunk(fp, cid, data) + + if im.mode == "P": + palette_byte_number = colors * 3 + palette_bytes = im.im.getpalette("RGB")[:palette_byte_number] + while len(palette_bytes) < palette_byte_number: + palette_bytes += b"\0" + chunk(fp, b"PLTE", palette_bytes) + + transparency = im.encoderinfo.get("transparency", im.info.get("transparency", None)) + + if transparency or transparency == 0: + if im.mode == "P": + # limit to actual palette size + alpha_bytes = colors + if isinstance(transparency, bytes): + chunk(fp, b"tRNS", transparency[:alpha_bytes]) + else: + transparency = max(0, min(255, transparency)) + alpha = b"\xFF" * transparency + b"\0" + chunk(fp, b"tRNS", alpha[:alpha_bytes]) + elif im.mode in ("1", "L", "I"): + transparency = max(0, min(65535, transparency)) + chunk(fp, b"tRNS", o16(transparency)) + elif im.mode == "RGB": + red, green, blue = transparency + chunk(fp, b"tRNS", o16(red) + o16(green) + o16(blue)) + else: + if "transparency" in im.encoderinfo: + # don't bother with transparency if it's an RGBA + # and it's in the info dict. It's probably just stale. + raise OSError("cannot use transparency for this mode") + else: + if im.mode == "P" and im.im.getpalettemode() == "RGBA": + alpha = im.im.getpalette("RGBA", "A") + alpha_bytes = colors + chunk(fp, b"tRNS", alpha[:alpha_bytes]) + + dpi = im.encoderinfo.get("dpi") + if dpi: + chunk( + fp, + b"pHYs", + o32(int(dpi[0] / 0.0254 + 0.5)), + o32(int(dpi[1] / 0.0254 + 0.5)), + b"\x01", + ) + + if info: + chunks = [b"bKGD", b"hIST"] + for info_chunk in info.chunks: + cid, data = info_chunk[:2] + if cid in chunks: + chunks.remove(cid) + chunk(fp, cid, data) + + exif = im.encoderinfo.get("exif", im.info.get("exif")) + if exif: + if isinstance(exif, Image.Exif): + exif = exif.tobytes(8) + if exif.startswith(b"Exif\x00\x00"): + exif = exif[6:] + chunk(fp, b"eXIf", exif) + + if save_all: + _write_multiple_frames(im, fp, chunk, rawmode) + else: + ImageFile._save(im, _idat(fp, chunk), [("zip", (0, 0) + im.size, 0, rawmode)]) + + if info: + for info_chunk in info.chunks: + cid, data = info_chunk[:2] + if cid[1:2].islower(): + # Private chunk + after_idat = info_chunk[2:3] + if after_idat: + chunk(fp, cid, data) + + chunk(fp, b"IEND", b"") + + if hasattr(fp, "flush"): + fp.flush() + + +# -------------------------------------------------------------------- +# PNG chunk converter + + +def getchunks(im, **params): + """Return a list of PNG chunks representing this image.""" + + class collector: + data = [] + + def write(self, data): + pass + + def append(self, chunk): + self.data.append(chunk) + + def append(fp, cid, *data): + data = b"".join(data) + crc = o32(_crc32(data, _crc32(cid))) + fp.append((cid, data, crc)) + + fp = collector() + + try: + im.encoderinfo = params + _save(im, fp, None, append) + finally: + del im.encoderinfo + + return fp.data + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(PngImageFile.format, PngImageFile, _accept) +Image.register_save(PngImageFile.format, _save) +Image.register_save_all(PngImageFile.format, _save_all) + +Image.register_extensions(PngImageFile.format, [".png", ".apng"]) + +Image.register_mime(PngImageFile.format, "image/png") diff --git a/.venv/lib/python3.9/site-packages/PIL/PpmImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/PpmImagePlugin.py new file mode 100644 index 00000000..abf4d651 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/PpmImagePlugin.py @@ -0,0 +1,164 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PPM support for PIL +# +# History: +# 96-03-24 fl Created +# 98-03-06 fl Write RGBA images (as RGB, that is) +# +# Copyright (c) Secret Labs AB 1997-98. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# + + +from . import Image, ImageFile + +# +# -------------------------------------------------------------------- + +b_whitespace = b"\x20\x09\x0a\x0b\x0c\x0d" + +MODES = { + # standard + b"P4": "1", + b"P5": "L", + b"P6": "RGB", + # extensions + b"P0CMYK": "CMYK", + # PIL extensions (for test purposes only) + b"PyP": "P", + b"PyRGBA": "RGBA", + b"PyCMYK": "CMYK", +} + + +def _accept(prefix): + return prefix[0:1] == b"P" and prefix[1] in b"0456y" + + +## +# Image plugin for PBM, PGM, and PPM images. + + +class PpmImageFile(ImageFile.ImageFile): + + format = "PPM" + format_description = "Pbmplus image" + + def _token(self, s=b""): + while True: # read until next whitespace + c = self.fp.read(1) + if not c or c in b_whitespace: + break + if c > b"\x79": + raise ValueError("Expected ASCII value, found binary") + s = s + c + if len(s) > 9: + raise ValueError("Expected int, got > 9 digits") + return s + + def _open(self): + + # check magic + s = self.fp.read(1) + if s != b"P": + raise SyntaxError("not a PPM file") + magic_number = self._token(s) + mode = MODES[magic_number] + + self.custom_mimetype = { + b"P4": "image/x-portable-bitmap", + b"P5": "image/x-portable-graymap", + b"P6": "image/x-portable-pixmap", + }.get(magic_number) + + if mode == "1": + self.mode = "1" + rawmode = "1;I" + else: + self.mode = rawmode = mode + + for ix in range(3): + while True: + while True: + s = self.fp.read(1) + if s not in b_whitespace: + break + if s == b"": + raise ValueError("File does not extend beyond magic number") + if s != b"#": + break + s = self.fp.readline() + s = int(self._token(s)) + if ix == 0: + xsize = s + elif ix == 1: + ysize = s + if mode == "1": + break + elif ix == 2: + # maxgrey + if s > 255: + if not mode == "L": + raise ValueError(f"Too many colors for band: {s}") + if s < 2 ** 16: + self.mode = "I" + rawmode = "I;16B" + else: + self.mode = "I" + rawmode = "I;32B" + + self._size = xsize, ysize + self.tile = [("raw", (0, 0, xsize, ysize), self.fp.tell(), (rawmode, 0, 1))] + + +# +# -------------------------------------------------------------------- + + +def _save(im, fp, filename): + if im.mode == "1": + rawmode, head = "1;I", b"P4" + elif im.mode == "L": + rawmode, head = "L", b"P5" + elif im.mode == "I": + if im.getextrema()[1] < 2 ** 16: + rawmode, head = "I;16B", b"P5" + else: + rawmode, head = "I;32B", b"P5" + elif im.mode == "RGB": + rawmode, head = "RGB", b"P6" + elif im.mode == "RGBA": + rawmode, head = "RGB", b"P6" + else: + raise OSError(f"cannot write mode {im.mode} as PPM") + fp.write(head + ("\n%d %d\n" % im.size).encode("ascii")) + if head == b"P6": + fp.write(b"255\n") + if head == b"P5": + if rawmode == "L": + fp.write(b"255\n") + elif rawmode == "I;16B": + fp.write(b"65535\n") + elif rawmode == "I;32B": + fp.write(b"2147483648\n") + ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, 0, 1))]) + + # ALTERNATIVE: save via builtin debug function + # im._dump(filename) + + +# +# -------------------------------------------------------------------- + + +Image.register_open(PpmImageFile.format, PpmImageFile, _accept) +Image.register_save(PpmImageFile.format, _save) + +Image.register_extensions(PpmImageFile.format, [".pbm", ".pgm", ".ppm", ".pnm"]) + +Image.register_mime(PpmImageFile.format, "image/x-portable-anymap") diff --git a/.venv/lib/python3.9/site-packages/PIL/PsdImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/PsdImagePlugin.py new file mode 100644 index 00000000..04b21e3d --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/PsdImagePlugin.py @@ -0,0 +1,325 @@ +# +# The Python Imaging Library +# $Id$ +# +# Adobe PSD 2.5/3.0 file handling +# +# History: +# 1995-09-01 fl Created +# 1997-01-03 fl Read most PSD images +# 1997-01-18 fl Fixed P and CMYK support +# 2001-10-21 fl Added seek/tell support (for layers) +# +# Copyright (c) 1997-2001 by Secret Labs AB. +# Copyright (c) 1995-2001 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import io + +from . import Image, ImageFile, ImagePalette +from ._binary import i8 +from ._binary import i16be as i16 +from ._binary import i32be as i32 +from ._binary import si16be as si16 + +MODES = { + # (photoshop mode, bits) -> (pil mode, required channels) + (0, 1): ("1", 1), + (0, 8): ("L", 1), + (1, 8): ("L", 1), + (2, 8): ("P", 1), + (3, 8): ("RGB", 3), + (4, 8): ("CMYK", 4), + (7, 8): ("L", 1), # FIXME: multilayer + (8, 8): ("L", 1), # duotone + (9, 8): ("LAB", 3), +} + + +# --------------------------------------------------------------------. +# read PSD images + + +def _accept(prefix): + return prefix[:4] == b"8BPS" + + +## +# Image plugin for Photoshop images. + + +class PsdImageFile(ImageFile.ImageFile): + + format = "PSD" + format_description = "Adobe Photoshop" + _close_exclusive_fp_after_loading = False + + def _open(self): + + read = self.fp.read + + # + # header + + s = read(26) + if not _accept(s) or i16(s, 4) != 1: + raise SyntaxError("not a PSD file") + + psd_bits = i16(s, 22) + psd_channels = i16(s, 12) + psd_mode = i16(s, 24) + + mode, channels = MODES[(psd_mode, psd_bits)] + + if channels > psd_channels: + raise OSError("not enough channels") + + self.mode = mode + self._size = i32(s, 18), i32(s, 14) + + # + # color mode data + + size = i32(read(4)) + if size: + data = read(size) + if mode == "P" and size == 768: + self.palette = ImagePalette.raw("RGB;L", data) + + # + # image resources + + self.resources = [] + + size = i32(read(4)) + if size: + # load resources + end = self.fp.tell() + size + while self.fp.tell() < end: + read(4) # signature + id = i16(read(2)) + name = read(i8(read(1))) + if not (len(name) & 1): + read(1) # padding + data = read(i32(read(4))) + if len(data) & 1: + read(1) # padding + self.resources.append((id, name, data)) + if id == 1039: # ICC profile + self.info["icc_profile"] = data + + # + # layer and mask information + + self.layers = [] + + size = i32(read(4)) + if size: + end = self.fp.tell() + size + size = i32(read(4)) + if size: + _layer_data = io.BytesIO(ImageFile._safe_read(self.fp, size)) + self.layers = _layerinfo(_layer_data, size) + self.fp.seek(end) + self.n_frames = len(self.layers) + self.is_animated = self.n_frames > 1 + + # + # image descriptor + + self.tile = _maketile(self.fp, mode, (0, 0) + self.size, channels) + + # keep the file open + self.__fp = self.fp + self.frame = 1 + self._min_frame = 1 + + def seek(self, layer): + if not self._seek_check(layer): + return + + # seek to given layer (1..max) + try: + name, mode, bbox, tile = self.layers[layer - 1] + self.mode = mode + self.tile = tile + self.frame = layer + self.fp = self.__fp + return name, bbox + except IndexError as e: + raise EOFError("no such layer") from e + + def tell(self): + # return layer number (0=image, 1..max=layers) + return self.frame + + def load_prepare(self): + # create image memory if necessary + if not self.im or self.im.mode != self.mode or self.im.size != self.size: + self.im = Image.core.fill(self.mode, self.size, 0) + # create palette (optional) + if self.mode == "P": + Image.Image.load(self) + + def _close__fp(self): + try: + if self.__fp != self.fp: + self.__fp.close() + except AttributeError: + pass + finally: + self.__fp = None + + +def _layerinfo(fp, ct_bytes): + # read layerinfo block + layers = [] + + def read(size): + return ImageFile._safe_read(fp, size) + + ct = si16(read(2)) + + # sanity check + if ct_bytes < (abs(ct) * 20): + raise SyntaxError("Layer block too short for number of layers requested") + + for i in range(abs(ct)): + + # bounding box + y0 = i32(read(4)) + x0 = i32(read(4)) + y1 = i32(read(4)) + x1 = i32(read(4)) + + # image info + info = [] + mode = [] + ct_types = i16(read(2)) + types = list(range(ct_types)) + if len(types) > 4: + continue + + for i in types: + type = i16(read(2)) + + if type == 65535: + m = "A" + else: + m = "RGBA"[type] + + mode.append(m) + size = i32(read(4)) + info.append((m, size)) + + # figure out the image mode + mode.sort() + if mode == ["R"]: + mode = "L" + elif mode == ["B", "G", "R"]: + mode = "RGB" + elif mode == ["A", "B", "G", "R"]: + mode = "RGBA" + else: + mode = None # unknown + + # skip over blend flags and extra information + read(12) # filler + name = "" + size = i32(read(4)) # length of the extra data field + combined = 0 + if size: + data_end = fp.tell() + size + + length = i32(read(4)) + if length: + fp.seek(length - 16, io.SEEK_CUR) + combined += length + 4 + + length = i32(read(4)) + if length: + fp.seek(length, io.SEEK_CUR) + combined += length + 4 + + length = i8(read(1)) + if length: + # Don't know the proper encoding, + # Latin-1 should be a good guess + name = read(length).decode("latin-1", "replace") + combined += length + 1 + + fp.seek(data_end) + layers.append((name, mode, (x0, y0, x1, y1))) + + # get tiles + i = 0 + for name, mode, bbox in layers: + tile = [] + for m in mode: + t = _maketile(fp, m, bbox, 1) + if t: + tile.extend(t) + layers[i] = name, mode, bbox, tile + i += 1 + + return layers + + +def _maketile(file, mode, bbox, channels): + + tile = None + read = file.read + + compression = i16(read(2)) + + xsize = bbox[2] - bbox[0] + ysize = bbox[3] - bbox[1] + + offset = file.tell() + + if compression == 0: + # + # raw compression + tile = [] + for channel in range(channels): + layer = mode[channel] + if mode == "CMYK": + layer += ";I" + tile.append(("raw", bbox, offset, layer)) + offset = offset + xsize * ysize + + elif compression == 1: + # + # packbits compression + i = 0 + tile = [] + bytecount = read(channels * ysize * 2) + offset = file.tell() + for channel in range(channels): + layer = mode[channel] + if mode == "CMYK": + layer += ";I" + tile.append(("packbits", bbox, offset, layer)) + for y in range(ysize): + offset = offset + i16(bytecount, i) + i += 2 + + file.seek(offset) + + if offset & 1: + read(1) # padding + + return tile + + +# -------------------------------------------------------------------- +# registry + + +Image.register_open(PsdImageFile.format, PsdImageFile, _accept) + +Image.register_extension(PsdImageFile.format, ".psd") + +Image.register_mime(PsdImageFile.format, "image/vnd.adobe.photoshop") diff --git a/.venv/lib/python3.9/site-packages/PIL/PyAccess.py b/.venv/lib/python3.9/site-packages/PIL/PyAccess.py new file mode 100644 index 00000000..eeaa0ccc --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/PyAccess.py @@ -0,0 +1,353 @@ +# +# The Python Imaging Library +# Pillow fork +# +# Python implementation of the PixelAccess Object +# +# Copyright (c) 1997-2009 by Secret Labs AB. All rights reserved. +# Copyright (c) 1995-2009 by Fredrik Lundh. +# Copyright (c) 2013 Eric Soroos +# +# See the README file for information on usage and redistribution +# + +# Notes: +# +# * Implements the pixel access object following Access. +# * Does not implement the line functions, as they don't appear to be used +# * Taking only the tuple form, which is used from python. +# * Fill.c uses the integer form, but it's still going to use the old +# Access.c implementation. +# + +import logging +import sys + +try: + from cffi import FFI + + defs = """ + struct Pixel_RGBA { + unsigned char r,g,b,a; + }; + struct Pixel_I16 { + unsigned char l,r; + }; + """ + ffi = FFI() + ffi.cdef(defs) +except ImportError as ex: + # Allow error import for doc purposes, but error out when accessing + # anything in core. + from ._util import deferred_error + + FFI = ffi = deferred_error(ex) + +logger = logging.getLogger(__name__) + + +class PyAccess: + def __init__(self, img, readonly=False): + vals = dict(img.im.unsafe_ptrs) + self.readonly = readonly + self.image8 = ffi.cast("unsigned char **", vals["image8"]) + self.image32 = ffi.cast("int **", vals["image32"]) + self.image = ffi.cast("unsigned char **", vals["image"]) + self.xsize, self.ysize = img.im.size + self._img = img + + # Keep pointer to im object to prevent dereferencing. + self._im = img.im + if self._im.mode == "P": + self._palette = img.palette + + # Debugging is polluting test traces, only useful here + # when hacking on PyAccess + # logger.debug("%s", vals) + self._post_init() + + def _post_init(self): + pass + + def __setitem__(self, xy, color): + """ + Modifies the pixel at x,y. The color is given as a single + numerical value for single band images, and a tuple for + multi-band images + + :param xy: The pixel coordinate, given as (x, y). See + :ref:`coordinate-system`. + :param color: The pixel value. + """ + if self.readonly: + raise ValueError("Attempt to putpixel a read only image") + (x, y) = xy + if x < 0: + x = self.xsize + x + if y < 0: + y = self.ysize + y + (x, y) = self.check_xy((x, y)) + + if ( + self._im.mode == "P" + and isinstance(color, (list, tuple)) + and len(color) in [3, 4] + ): + # RGB or RGBA value for a P image + color = self._palette.getcolor(color, self._img) + + return self.set_pixel(x, y, color) + + def __getitem__(self, xy): + """ + Returns the pixel at x,y. The pixel is returned as a single + value for single band images or a tuple for multiple band + images + + :param xy: The pixel coordinate, given as (x, y). See + :ref:`coordinate-system`. + :returns: a pixel value for single band images, a tuple of + pixel values for multiband images. + """ + (x, y) = xy + if x < 0: + x = self.xsize + x + if y < 0: + y = self.ysize + y + (x, y) = self.check_xy((x, y)) + return self.get_pixel(x, y) + + putpixel = __setitem__ + getpixel = __getitem__ + + def check_xy(self, xy): + (x, y) = xy + if not (0 <= x < self.xsize and 0 <= y < self.ysize): + raise ValueError("pixel location out of range") + return xy + + +class _PyAccess32_2(PyAccess): + """PA, LA, stored in first and last bytes of a 32 bit word""" + + def _post_init(self, *args, **kwargs): + self.pixels = ffi.cast("struct Pixel_RGBA **", self.image32) + + def get_pixel(self, x, y): + pixel = self.pixels[y][x] + return (pixel.r, pixel.a) + + def set_pixel(self, x, y, color): + pixel = self.pixels[y][x] + # tuple + pixel.r = min(color[0], 255) + pixel.a = min(color[1], 255) + + +class _PyAccess32_3(PyAccess): + """RGB and friends, stored in the first three bytes of a 32 bit word""" + + def _post_init(self, *args, **kwargs): + self.pixels = ffi.cast("struct Pixel_RGBA **", self.image32) + + def get_pixel(self, x, y): + pixel = self.pixels[y][x] + return (pixel.r, pixel.g, pixel.b) + + def set_pixel(self, x, y, color): + pixel = self.pixels[y][x] + # tuple + pixel.r = min(color[0], 255) + pixel.g = min(color[1], 255) + pixel.b = min(color[2], 255) + pixel.a = 255 + + +class _PyAccess32_4(PyAccess): + """RGBA etc, all 4 bytes of a 32 bit word""" + + def _post_init(self, *args, **kwargs): + self.pixels = ffi.cast("struct Pixel_RGBA **", self.image32) + + def get_pixel(self, x, y): + pixel = self.pixels[y][x] + return (pixel.r, pixel.g, pixel.b, pixel.a) + + def set_pixel(self, x, y, color): + pixel = self.pixels[y][x] + # tuple + pixel.r = min(color[0], 255) + pixel.g = min(color[1], 255) + pixel.b = min(color[2], 255) + pixel.a = min(color[3], 255) + + +class _PyAccess8(PyAccess): + """1, L, P, 8 bit images stored as uint8""" + + def _post_init(self, *args, **kwargs): + self.pixels = self.image8 + + def get_pixel(self, x, y): + return self.pixels[y][x] + + def set_pixel(self, x, y, color): + try: + # integer + self.pixels[y][x] = min(color, 255) + except TypeError: + # tuple + self.pixels[y][x] = min(color[0], 255) + + +class _PyAccessI16_N(PyAccess): + """I;16 access, native bitendian without conversion""" + + def _post_init(self, *args, **kwargs): + self.pixels = ffi.cast("unsigned short **", self.image) + + def get_pixel(self, x, y): + return self.pixels[y][x] + + def set_pixel(self, x, y, color): + try: + # integer + self.pixels[y][x] = min(color, 65535) + except TypeError: + # tuple + self.pixels[y][x] = min(color[0], 65535) + + +class _PyAccessI16_L(PyAccess): + """I;16L access, with conversion""" + + def _post_init(self, *args, **kwargs): + self.pixels = ffi.cast("struct Pixel_I16 **", self.image) + + def get_pixel(self, x, y): + pixel = self.pixels[y][x] + return pixel.l + pixel.r * 256 + + def set_pixel(self, x, y, color): + pixel = self.pixels[y][x] + try: + color = min(color, 65535) + except TypeError: + color = min(color[0], 65535) + + pixel.l = color & 0xFF # noqa: E741 + pixel.r = color >> 8 + + +class _PyAccessI16_B(PyAccess): + """I;16B access, with conversion""" + + def _post_init(self, *args, **kwargs): + self.pixels = ffi.cast("struct Pixel_I16 **", self.image) + + def get_pixel(self, x, y): + pixel = self.pixels[y][x] + return pixel.l * 256 + pixel.r + + def set_pixel(self, x, y, color): + pixel = self.pixels[y][x] + try: + color = min(color, 65535) + except Exception: + color = min(color[0], 65535) + + pixel.l = color >> 8 # noqa: E741 + pixel.r = color & 0xFF + + +class _PyAccessI32_N(PyAccess): + """Signed Int32 access, native endian""" + + def _post_init(self, *args, **kwargs): + self.pixels = self.image32 + + def get_pixel(self, x, y): + return self.pixels[y][x] + + def set_pixel(self, x, y, color): + self.pixels[y][x] = color + + +class _PyAccessI32_Swap(PyAccess): + """I;32L/B access, with byteswapping conversion""" + + def _post_init(self, *args, **kwargs): + self.pixels = self.image32 + + def reverse(self, i): + orig = ffi.new("int *", i) + chars = ffi.cast("unsigned char *", orig) + chars[0], chars[1], chars[2], chars[3] = chars[3], chars[2], chars[1], chars[0] + return ffi.cast("int *", chars)[0] + + def get_pixel(self, x, y): + return self.reverse(self.pixels[y][x]) + + def set_pixel(self, x, y, color): + self.pixels[y][x] = self.reverse(color) + + +class _PyAccessF(PyAccess): + """32 bit float access""" + + def _post_init(self, *args, **kwargs): + self.pixels = ffi.cast("float **", self.image32) + + def get_pixel(self, x, y): + return self.pixels[y][x] + + def set_pixel(self, x, y, color): + try: + # not a tuple + self.pixels[y][x] = color + except TypeError: + # tuple + self.pixels[y][x] = color[0] + + +mode_map = { + "1": _PyAccess8, + "L": _PyAccess8, + "P": _PyAccess8, + "LA": _PyAccess32_2, + "La": _PyAccess32_2, + "PA": _PyAccess32_2, + "RGB": _PyAccess32_3, + "LAB": _PyAccess32_3, + "HSV": _PyAccess32_3, + "YCbCr": _PyAccess32_3, + "RGBA": _PyAccess32_4, + "RGBa": _PyAccess32_4, + "RGBX": _PyAccess32_4, + "CMYK": _PyAccess32_4, + "F": _PyAccessF, + "I": _PyAccessI32_N, +} + +if sys.byteorder == "little": + mode_map["I;16"] = _PyAccessI16_N + mode_map["I;16L"] = _PyAccessI16_N + mode_map["I;16B"] = _PyAccessI16_B + + mode_map["I;32L"] = _PyAccessI32_N + mode_map["I;32B"] = _PyAccessI32_Swap +else: + mode_map["I;16"] = _PyAccessI16_L + mode_map["I;16L"] = _PyAccessI16_L + mode_map["I;16B"] = _PyAccessI16_N + + mode_map["I;32L"] = _PyAccessI32_Swap + mode_map["I;32B"] = _PyAccessI32_N + + +def new(img, readonly=False): + access_type = mode_map.get(img.mode, None) + if not access_type: + logger.debug("PyAccess Not Implemented: %s", img.mode) + return None + return access_type(img, readonly) diff --git a/.venv/lib/python3.9/site-packages/PIL/SgiImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/SgiImagePlugin.py new file mode 100644 index 00000000..5f1ef6ed --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/SgiImagePlugin.py @@ -0,0 +1,230 @@ +# +# The Python Imaging Library. +# $Id$ +# +# SGI image file handling +# +# See "The SGI Image File Format (Draft version 0.97)", Paul Haeberli. +# +# +# +# History: +# 2017-22-07 mb Add RLE decompression +# 2016-16-10 mb Add save method without compression +# 1995-09-10 fl Created +# +# Copyright (c) 2016 by Mickael Bonfill. +# Copyright (c) 2008 by Karsten Hiddemann. +# Copyright (c) 1997 by Secret Labs AB. +# Copyright (c) 1995 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + + +import os +import struct + +from . import Image, ImageFile +from ._binary import i16be as i16 +from ._binary import o8 + + +def _accept(prefix): + return len(prefix) >= 2 and i16(prefix) == 474 + + +MODES = { + (1, 1, 1): "L", + (1, 2, 1): "L", + (2, 1, 1): "L;16B", + (2, 2, 1): "L;16B", + (1, 3, 3): "RGB", + (2, 3, 3): "RGB;16B", + (1, 3, 4): "RGBA", + (2, 3, 4): "RGBA;16B", +} + + +## +# Image plugin for SGI images. +class SgiImageFile(ImageFile.ImageFile): + + format = "SGI" + format_description = "SGI Image File Format" + + def _open(self): + + # HEAD + headlen = 512 + s = self.fp.read(headlen) + + if not _accept(s): + raise ValueError("Not an SGI image file") + + # compression : verbatim or RLE + compression = s[2] + + # bpc : 1 or 2 bytes (8bits or 16bits) + bpc = s[3] + + # dimension : 1, 2 or 3 (depending on xsize, ysize and zsize) + dimension = i16(s, 4) + + # xsize : width + xsize = i16(s, 6) + + # ysize : height + ysize = i16(s, 8) + + # zsize : channels count + zsize = i16(s, 10) + + # layout + layout = bpc, dimension, zsize + + # determine mode from bits/zsize + rawmode = "" + try: + rawmode = MODES[layout] + except KeyError: + pass + + if rawmode == "": + raise ValueError("Unsupported SGI image mode") + + self._size = xsize, ysize + self.mode = rawmode.split(";")[0] + if self.mode == "RGB": + self.custom_mimetype = "image/rgb" + + # orientation -1 : scanlines begins at the bottom-left corner + orientation = -1 + + # decoder info + if compression == 0: + pagesize = xsize * ysize * bpc + if bpc == 2: + self.tile = [ + ("SGI16", (0, 0) + self.size, headlen, (self.mode, 0, orientation)) + ] + else: + self.tile = [] + offset = headlen + for layer in self.mode: + self.tile.append( + ("raw", (0, 0) + self.size, offset, (layer, 0, orientation)) + ) + offset += pagesize + elif compression == 1: + self.tile = [ + ("sgi_rle", (0, 0) + self.size, headlen, (rawmode, orientation, bpc)) + ] + + +def _save(im, fp, filename): + if im.mode != "RGB" and im.mode != "RGBA" and im.mode != "L": + raise ValueError("Unsupported SGI image mode") + + # Get the keyword arguments + info = im.encoderinfo + + # Byte-per-pixel precision, 1 = 8bits per pixel + bpc = info.get("bpc", 1) + + if bpc not in (1, 2): + raise ValueError("Unsupported number of bytes per pixel") + + # Flip the image, since the origin of SGI file is the bottom-left corner + orientation = -1 + # Define the file as SGI File Format + magicNumber = 474 + # Run-Length Encoding Compression - Unsupported at this time + rle = 0 + + # Number of dimensions (x,y,z) + dim = 3 + # X Dimension = width / Y Dimension = height + x, y = im.size + if im.mode == "L" and y == 1: + dim = 1 + elif im.mode == "L": + dim = 2 + # Z Dimension: Number of channels + z = len(im.mode) + + if dim == 1 or dim == 2: + z = 1 + + # assert we've got the right number of bands. + if len(im.getbands()) != z: + raise ValueError( + f"incorrect number of bands in SGI write: {z} vs {len(im.getbands())}" + ) + + # Minimum Byte value + pinmin = 0 + # Maximum Byte value (255 = 8bits per pixel) + pinmax = 255 + # Image name (79 characters max, truncated below in write) + imgName = os.path.splitext(os.path.basename(filename))[0] + imgName = imgName.encode("ascii", "ignore") + # Standard representation of pixel in the file + colormap = 0 + fp.write(struct.pack(">h", magicNumber)) + fp.write(o8(rle)) + fp.write(o8(bpc)) + fp.write(struct.pack(">H", dim)) + fp.write(struct.pack(">H", x)) + fp.write(struct.pack(">H", y)) + fp.write(struct.pack(">H", z)) + fp.write(struct.pack(">l", pinmin)) + fp.write(struct.pack(">l", pinmax)) + fp.write(struct.pack("4s", b"")) # dummy + fp.write(struct.pack("79s", imgName)) # truncates to 79 chars + fp.write(struct.pack("s", b"")) # force null byte after imgname + fp.write(struct.pack(">l", colormap)) + fp.write(struct.pack("404s", b"")) # dummy + + rawmode = "L" + if bpc == 2: + rawmode = "L;16B" + + for channel in im.split(): + fp.write(channel.tobytes("raw", rawmode, 0, orientation)) + + if hasattr(fp, "flush"): + fp.flush() + + +class SGI16Decoder(ImageFile.PyDecoder): + _pulls_fd = True + + def decode(self, buffer): + rawmode, stride, orientation = self.args + pagesize = self.state.xsize * self.state.ysize + zsize = len(self.mode) + self.fd.seek(512) + + for band in range(zsize): + channel = Image.new("L", (self.state.xsize, self.state.ysize)) + channel.frombytes( + self.fd.read(2 * pagesize), "raw", "L;16B", stride, orientation + ) + self.im.putband(channel.im, band) + + return -1, 0 + + +# +# registry + + +Image.register_decoder("SGI16", SGI16Decoder) +Image.register_open(SgiImageFile.format, SgiImageFile, _accept) +Image.register_save(SgiImageFile.format, _save) +Image.register_mime(SgiImageFile.format, "image/sgi") + +Image.register_extensions(SgiImageFile.format, [".bw", ".rgb", ".rgba", ".sgi"]) + +# End of file diff --git a/.venv/lib/python3.9/site-packages/PIL/SpiderImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/SpiderImagePlugin.py new file mode 100644 index 00000000..062af9f9 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/SpiderImagePlugin.py @@ -0,0 +1,324 @@ +# +# The Python Imaging Library. +# +# SPIDER image file handling +# +# History: +# 2004-08-02 Created BB +# 2006-03-02 added save method +# 2006-03-13 added support for stack images +# +# Copyright (c) 2004 by Health Research Inc. (HRI) RENSSELAER, NY 12144. +# Copyright (c) 2004 by William Baxter. +# Copyright (c) 2004 by Secret Labs AB. +# Copyright (c) 2004 by Fredrik Lundh. +# + +## +# Image plugin for the Spider image format. This format is is used +# by the SPIDER software, in processing image data from electron +# microscopy and tomography. +## + +# +# SpiderImagePlugin.py +# +# The Spider image format is used by SPIDER software, in processing +# image data from electron microscopy and tomography. +# +# Spider home page: +# https://spider.wadsworth.org/spider_doc/spider/docs/spider.html +# +# Details about the Spider image format: +# https://spider.wadsworth.org/spider_doc/spider/docs/image_doc.html +# +import os +import struct +import sys + +from PIL import Image, ImageFile + + +def isInt(f): + try: + i = int(f) + if f - i == 0: + return 1 + else: + return 0 + except (ValueError, OverflowError): + return 0 + + +iforms = [1, 3, -11, -12, -21, -22] + + +# There is no magic number to identify Spider files, so just check a +# series of header locations to see if they have reasonable values. +# Returns no. of bytes in the header, if it is a valid Spider header, +# otherwise returns 0 + + +def isSpiderHeader(t): + h = (99,) + t # add 1 value so can use spider header index start=1 + # header values 1,2,5,12,13,22,23 should be integers + for i in [1, 2, 5, 12, 13, 22, 23]: + if not isInt(h[i]): + return 0 + # check iform + iform = int(h[5]) + if iform not in iforms: + return 0 + # check other header values + labrec = int(h[13]) # no. records in file header + labbyt = int(h[22]) # total no. of bytes in header + lenbyt = int(h[23]) # record length in bytes + if labbyt != (labrec * lenbyt): + return 0 + # looks like a valid header + return labbyt + + +def isSpiderImage(filename): + with open(filename, "rb") as fp: + f = fp.read(92) # read 23 * 4 bytes + t = struct.unpack(">23f", f) # try big-endian first + hdrlen = isSpiderHeader(t) + if hdrlen == 0: + t = struct.unpack("<23f", f) # little-endian + hdrlen = isSpiderHeader(t) + return hdrlen + + +class SpiderImageFile(ImageFile.ImageFile): + + format = "SPIDER" + format_description = "Spider 2D image" + _close_exclusive_fp_after_loading = False + + def _open(self): + # check header + n = 27 * 4 # read 27 float values + f = self.fp.read(n) + + try: + self.bigendian = 1 + t = struct.unpack(">27f", f) # try big-endian first + hdrlen = isSpiderHeader(t) + if hdrlen == 0: + self.bigendian = 0 + t = struct.unpack("<27f", f) # little-endian + hdrlen = isSpiderHeader(t) + if hdrlen == 0: + raise SyntaxError("not a valid Spider file") + except struct.error as e: + raise SyntaxError("not a valid Spider file") from e + + h = (99,) + t # add 1 value : spider header index starts at 1 + iform = int(h[5]) + if iform != 1: + raise SyntaxError("not a Spider 2D image") + + self._size = int(h[12]), int(h[2]) # size in pixels (width, height) + self.istack = int(h[24]) + self.imgnumber = int(h[27]) + + if self.istack == 0 and self.imgnumber == 0: + # stk=0, img=0: a regular 2D image + offset = hdrlen + self._nimages = 1 + elif self.istack > 0 and self.imgnumber == 0: + # stk>0, img=0: Opening the stack for the first time + self.imgbytes = int(h[12]) * int(h[2]) * 4 + self.hdrlen = hdrlen + self._nimages = int(h[26]) + # Point to the first image in the stack + offset = hdrlen * 2 + self.imgnumber = 1 + elif self.istack == 0 and self.imgnumber > 0: + # stk=0, img>0: an image within the stack + offset = hdrlen + self.stkoffset + self.istack = 2 # So Image knows it's still a stack + else: + raise SyntaxError("inconsistent stack header values") + + if self.bigendian: + self.rawmode = "F;32BF" + else: + self.rawmode = "F;32F" + self.mode = "F" + + self.tile = [("raw", (0, 0) + self.size, offset, (self.rawmode, 0, 1))] + self.__fp = self.fp # FIXME: hack + + @property + def n_frames(self): + return self._nimages + + @property + def is_animated(self): + return self._nimages > 1 + + # 1st image index is zero (although SPIDER imgnumber starts at 1) + def tell(self): + if self.imgnumber < 1: + return 0 + else: + return self.imgnumber - 1 + + def seek(self, frame): + if self.istack == 0: + raise EOFError("attempt to seek in a non-stack file") + if not self._seek_check(frame): + return + self.stkoffset = self.hdrlen + frame * (self.hdrlen + self.imgbytes) + self.fp = self.__fp + self.fp.seek(self.stkoffset) + self._open() + + # returns a byte image after rescaling to 0..255 + def convert2byte(self, depth=255): + (minimum, maximum) = self.getextrema() + m = 1 + if maximum != minimum: + m = depth / (maximum - minimum) + b = -m * minimum + return self.point(lambda i, m=m, b=b: i * m + b).convert("L") + + # returns a ImageTk.PhotoImage object, after rescaling to 0..255 + def tkPhotoImage(self): + from PIL import ImageTk + + return ImageTk.PhotoImage(self.convert2byte(), palette=256) + + def _close__fp(self): + try: + if self.__fp != self.fp: + self.__fp.close() + except AttributeError: + pass + finally: + self.__fp = None + + +# -------------------------------------------------------------------- +# Image series + +# given a list of filenames, return a list of images +def loadImageSeries(filelist=None): + """create a list of :py:class:`~PIL.Image.Image` objects for use in a montage""" + if filelist is None or len(filelist) < 1: + return + + imglist = [] + for img in filelist: + if not os.path.exists(img): + print(f"unable to find {img}") + continue + try: + with Image.open(img) as im: + im = im.convert2byte() + except Exception: + if not isSpiderImage(img): + print(img + " is not a Spider image file") + continue + im.info["filename"] = img + imglist.append(im) + return imglist + + +# -------------------------------------------------------------------- +# For saving images in Spider format + + +def makeSpiderHeader(im): + nsam, nrow = im.size + lenbyt = nsam * 4 # There are labrec records in the header + labrec = int(1024 / lenbyt) + if 1024 % lenbyt != 0: + labrec += 1 + labbyt = labrec * lenbyt + hdr = [] + nvalues = int(labbyt / 4) + for i in range(nvalues): + hdr.append(0.0) + + if len(hdr) < 23: + return [] + + # NB these are Fortran indices + hdr[1] = 1.0 # nslice (=1 for an image) + hdr[2] = float(nrow) # number of rows per slice + hdr[5] = 1.0 # iform for 2D image + hdr[12] = float(nsam) # number of pixels per line + hdr[13] = float(labrec) # number of records in file header + hdr[22] = float(labbyt) # total number of bytes in header + hdr[23] = float(lenbyt) # record length in bytes + + # adjust for Fortran indexing + hdr = hdr[1:] + hdr.append(0.0) + # pack binary data into a string + hdrstr = [] + for v in hdr: + hdrstr.append(struct.pack("f", v)) + return hdrstr + + +def _save(im, fp, filename): + if im.mode[0] != "F": + im = im.convert("F") + + hdr = makeSpiderHeader(im) + if len(hdr) < 256: + raise OSError("Error creating Spider header") + + # write the SPIDER header + fp.writelines(hdr) + + rawmode = "F;32NF" # 32-bit native floating point + ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, 0, 1))]) + + +def _save_spider(im, fp, filename): + # get the filename extension and register it with Image + ext = os.path.splitext(filename)[1] + Image.register_extension(SpiderImageFile.format, ext) + _save(im, fp, filename) + + +# -------------------------------------------------------------------- + + +Image.register_open(SpiderImageFile.format, SpiderImageFile) +Image.register_save(SpiderImageFile.format, _save_spider) + +if __name__ == "__main__": + + if len(sys.argv) < 2: + print("Syntax: python3 SpiderImagePlugin.py [infile] [outfile]") + sys.exit() + + filename = sys.argv[1] + if not isSpiderImage(filename): + print("input image must be in Spider format") + sys.exit() + + with Image.open(filename) as im: + print("image: " + str(im)) + print("format: " + str(im.format)) + print("size: " + str(im.size)) + print("mode: " + str(im.mode)) + print("max, min: ", end=" ") + print(im.getextrema()) + + if len(sys.argv) > 2: + outfile = sys.argv[2] + + # perform some image operation + im = im.transpose(Image.FLIP_LEFT_RIGHT) + print( + f"saving a flipped version of {os.path.basename(filename)} " + f"as {outfile} " + ) + im.save(outfile, SpiderImageFile.format) diff --git a/.venv/lib/python3.9/site-packages/PIL/SunImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/SunImagePlugin.py new file mode 100644 index 00000000..c03759a0 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/SunImagePlugin.py @@ -0,0 +1,136 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Sun image file handling +# +# History: +# 1995-09-10 fl Created +# 1996-05-28 fl Fixed 32-bit alignment +# 1998-12-29 fl Import ImagePalette module +# 2001-12-18 fl Fixed palette loading (from Jean-Claude Rimbault) +# +# Copyright (c) 1997-2001 by Secret Labs AB +# Copyright (c) 1995-1996 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + + +from . import Image, ImageFile, ImagePalette +from ._binary import i32be as i32 + + +def _accept(prefix): + return len(prefix) >= 4 and i32(prefix) == 0x59A66A95 + + +## +# Image plugin for Sun raster files. + + +class SunImageFile(ImageFile.ImageFile): + + format = "SUN" + format_description = "Sun Raster File" + + def _open(self): + + # The Sun Raster file header is 32 bytes in length + # and has the following format: + + # typedef struct _SunRaster + # { + # DWORD MagicNumber; /* Magic (identification) number */ + # DWORD Width; /* Width of image in pixels */ + # DWORD Height; /* Height of image in pixels */ + # DWORD Depth; /* Number of bits per pixel */ + # DWORD Length; /* Size of image data in bytes */ + # DWORD Type; /* Type of raster file */ + # DWORD ColorMapType; /* Type of color map */ + # DWORD ColorMapLength; /* Size of the color map in bytes */ + # } SUNRASTER; + + # HEAD + s = self.fp.read(32) + if not _accept(s): + raise SyntaxError("not an SUN raster file") + + offset = 32 + + self._size = i32(s, 4), i32(s, 8) + + depth = i32(s, 12) + # data_length = i32(s, 16) # unreliable, ignore. + file_type = i32(s, 20) + palette_type = i32(s, 24) # 0: None, 1: RGB, 2: Raw/arbitrary + palette_length = i32(s, 28) + + if depth == 1: + self.mode, rawmode = "1", "1;I" + elif depth == 4: + self.mode, rawmode = "L", "L;4" + elif depth == 8: + self.mode = rawmode = "L" + elif depth == 24: + if file_type == 3: + self.mode, rawmode = "RGB", "RGB" + else: + self.mode, rawmode = "RGB", "BGR" + elif depth == 32: + if file_type == 3: + self.mode, rawmode = "RGB", "RGBX" + else: + self.mode, rawmode = "RGB", "BGRX" + else: + raise SyntaxError("Unsupported Mode/Bit Depth") + + if palette_length: + if palette_length > 1024: + raise SyntaxError("Unsupported Color Palette Length") + + if palette_type != 1: + raise SyntaxError("Unsupported Palette Type") + + offset = offset + palette_length + self.palette = ImagePalette.raw("RGB;L", self.fp.read(palette_length)) + if self.mode == "L": + self.mode = "P" + rawmode = rawmode.replace("L", "P") + + # 16 bit boundaries on stride + stride = ((self.size[0] * depth + 15) // 16) * 2 + + # file type: Type is the version (or flavor) of the bitmap + # file. The following values are typically found in the Type + # field: + # 0000h Old + # 0001h Standard + # 0002h Byte-encoded + # 0003h RGB format + # 0004h TIFF format + # 0005h IFF format + # FFFFh Experimental + + # Old and standard are the same, except for the length tag. + # byte-encoded is run-length-encoded + # RGB looks similar to standard, but RGB byte order + # TIFF and IFF mean that they were converted from T/IFF + # Experimental means that it's something else. + # (https://www.fileformat.info/format/sunraster/egff.htm) + + if file_type in (0, 1, 3, 4, 5): + self.tile = [("raw", (0, 0) + self.size, offset, (rawmode, stride))] + elif file_type == 2: + self.tile = [("sun_rle", (0, 0) + self.size, offset, rawmode)] + else: + raise SyntaxError("Unsupported Sun Raster file type") + + +# +# registry + + +Image.register_open(SunImageFile.format, SunImageFile, _accept) + +Image.register_extension(SunImageFile.format, ".ras") diff --git a/.venv/lib/python3.9/site-packages/PIL/TarIO.py b/.venv/lib/python3.9/site-packages/PIL/TarIO.py new file mode 100644 index 00000000..d108362f --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/TarIO.py @@ -0,0 +1,65 @@ +# +# The Python Imaging Library. +# $Id$ +# +# read files from within a tar file +# +# History: +# 95-06-18 fl Created +# 96-05-28 fl Open files in binary mode +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1995-96. +# +# See the README file for information on usage and redistribution. +# + +import io + +from . import ContainerIO + + +class TarIO(ContainerIO.ContainerIO): + """A file object that provides read access to a given member of a TAR file.""" + + def __init__(self, tarfile, file): + """ + Create file object. + + :param tarfile: Name of TAR file. + :param file: Name of member file. + """ + self.fh = open(tarfile, "rb") + + while True: + + s = self.fh.read(512) + if len(s) != 512: + raise OSError("unexpected end of tar file") + + name = s[:100].decode("utf-8") + i = name.find("\0") + if i == 0: + raise OSError("cannot find subfile") + if i > 0: + name = name[:i] + + size = int(s[124:135], 8) + + if file == name: + break + + self.fh.seek((size + 511) & (~511), io.SEEK_CUR) + + # Open region + super().__init__(self.fh, self.fh.tell(), size) + + # Context manager support + def __enter__(self): + return self + + def __exit__(self, *args): + self.close() + + def close(self): + self.fh.close() diff --git a/.venv/lib/python3.9/site-packages/PIL/TgaImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/TgaImagePlugin.py new file mode 100644 index 00000000..5e5d52d1 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/TgaImagePlugin.py @@ -0,0 +1,248 @@ +# +# The Python Imaging Library. +# $Id$ +# +# TGA file handling +# +# History: +# 95-09-01 fl created (reads 24-bit files only) +# 97-01-04 fl support more TGA versions, including compressed images +# 98-07-04 fl fixed orientation and alpha layer bugs +# 98-09-11 fl fixed orientation for runlength decoder +# +# Copyright (c) Secret Labs AB 1997-98. +# Copyright (c) Fredrik Lundh 1995-97. +# +# See the README file for information on usage and redistribution. +# + + +import warnings + +from . import Image, ImageFile, ImagePalette +from ._binary import i16le as i16 +from ._binary import o8 +from ._binary import o16le as o16 + +# +# -------------------------------------------------------------------- +# Read RGA file + + +MODES = { + # map imagetype/depth to rawmode + (1, 8): "P", + (3, 1): "1", + (3, 8): "L", + (3, 16): "LA", + (2, 16): "BGR;5", + (2, 24): "BGR", + (2, 32): "BGRA", +} + + +## +# Image plugin for Targa files. + + +class TgaImageFile(ImageFile.ImageFile): + + format = "TGA" + format_description = "Targa" + + def _open(self): + + # process header + s = self.fp.read(18) + + id_len = s[0] + + colormaptype = s[1] + imagetype = s[2] + + depth = s[16] + + flags = s[17] + + self._size = i16(s, 12), i16(s, 14) + + # validate header fields + if ( + colormaptype not in (0, 1) + or self.size[0] <= 0 + or self.size[1] <= 0 + or depth not in (1, 8, 16, 24, 32) + ): + raise SyntaxError("not a TGA file") + + # image mode + if imagetype in (3, 11): + self.mode = "L" + if depth == 1: + self.mode = "1" # ??? + elif depth == 16: + self.mode = "LA" + elif imagetype in (1, 9): + self.mode = "P" + elif imagetype in (2, 10): + self.mode = "RGB" + if depth == 32: + self.mode = "RGBA" + else: + raise SyntaxError("unknown TGA mode") + + # orientation + orientation = flags & 0x30 + if orientation == 0x20: + orientation = 1 + elif not orientation: + orientation = -1 + else: + raise SyntaxError("unknown TGA orientation") + + self.info["orientation"] = orientation + + if imagetype & 8: + self.info["compression"] = "tga_rle" + + if id_len: + self.info["id_section"] = self.fp.read(id_len) + + if colormaptype: + # read palette + start, size, mapdepth = i16(s, 3), i16(s, 5), s[7] + if mapdepth == 16: + self.palette = ImagePalette.raw( + "BGR;15", b"\0" * 2 * start + self.fp.read(2 * size) + ) + elif mapdepth == 24: + self.palette = ImagePalette.raw( + "BGR", b"\0" * 3 * start + self.fp.read(3 * size) + ) + elif mapdepth == 32: + self.palette = ImagePalette.raw( + "BGRA", b"\0" * 4 * start + self.fp.read(4 * size) + ) + + # setup tile descriptor + try: + rawmode = MODES[(imagetype & 7, depth)] + if imagetype & 8: + # compressed + self.tile = [ + ( + "tga_rle", + (0, 0) + self.size, + self.fp.tell(), + (rawmode, orientation, depth), + ) + ] + else: + self.tile = [ + ( + "raw", + (0, 0) + self.size, + self.fp.tell(), + (rawmode, 0, orientation), + ) + ] + except KeyError: + pass # cannot decode + + +# +# -------------------------------------------------------------------- +# Write TGA file + + +SAVE = { + "1": ("1", 1, 0, 3), + "L": ("L", 8, 0, 3), + "LA": ("LA", 16, 0, 3), + "P": ("P", 8, 1, 1), + "RGB": ("BGR", 24, 0, 2), + "RGBA": ("BGRA", 32, 0, 2), +} + + +def _save(im, fp, filename): + + try: + rawmode, bits, colormaptype, imagetype = SAVE[im.mode] + except KeyError as e: + raise OSError(f"cannot write mode {im.mode} as TGA") from e + + if "rle" in im.encoderinfo: + rle = im.encoderinfo["rle"] + else: + compression = im.encoderinfo.get("compression", im.info.get("compression")) + rle = compression == "tga_rle" + if rle: + imagetype += 8 + + id_section = im.encoderinfo.get("id_section", im.info.get("id_section", "")) + id_len = len(id_section) + if id_len > 255: + id_len = 255 + id_section = id_section[:255] + warnings.warn("id_section has been trimmed to 255 characters") + + if colormaptype: + colormapfirst, colormaplength, colormapentry = 0, 256, 24 + else: + colormapfirst, colormaplength, colormapentry = 0, 0, 0 + + if im.mode in ("LA", "RGBA"): + flags = 8 + else: + flags = 0 + + orientation = im.encoderinfo.get("orientation", im.info.get("orientation", -1)) + if orientation > 0: + flags = flags | 0x20 + + fp.write( + o8(id_len) + + o8(colormaptype) + + o8(imagetype) + + o16(colormapfirst) + + o16(colormaplength) + + o8(colormapentry) + + o16(0) + + o16(0) + + o16(im.size[0]) + + o16(im.size[1]) + + o8(bits) + + o8(flags) + ) + + if id_section: + fp.write(id_section) + + if colormaptype: + fp.write(im.im.getpalette("RGB", "BGR")) + + if rle: + ImageFile._save( + im, fp, [("tga_rle", (0, 0) + im.size, 0, (rawmode, orientation))] + ) + else: + ImageFile._save( + im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, 0, orientation))] + ) + + # write targa version 2 footer + fp.write(b"\000" * 8 + b"TRUEVISION-XFILE." + b"\000") + + +# +# -------------------------------------------------------------------- +# Registry + + +Image.register_open(TgaImageFile.format, TgaImageFile) +Image.register_save(TgaImageFile.format, _save) + +Image.register_extensions(TgaImageFile.format, [".tga", ".icb", ".vda", ".vst"]) + +Image.register_mime(TgaImageFile.format, "image/x-tga") diff --git a/.venv/lib/python3.9/site-packages/PIL/TiffImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/TiffImagePlugin.py new file mode 100644 index 00000000..6b311bbf --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/TiffImagePlugin.py @@ -0,0 +1,2043 @@ +# +# The Python Imaging Library. +# $Id$ +# +# TIFF file handling +# +# TIFF is a flexible, if somewhat aged, image file format originally +# defined by Aldus. Although TIFF supports a wide variety of pixel +# layouts and compression methods, the name doesn't really stand for +# "thousands of incompatible file formats," it just feels that way. +# +# To read TIFF data from a stream, the stream must be seekable. For +# progressive decoding, make sure to use TIFF files where the tag +# directory is placed first in the file. +# +# History: +# 1995-09-01 fl Created +# 1996-05-04 fl Handle JPEGTABLES tag +# 1996-05-18 fl Fixed COLORMAP support +# 1997-01-05 fl Fixed PREDICTOR support +# 1997-08-27 fl Added support for rational tags (from Perry Stoll) +# 1998-01-10 fl Fixed seek/tell (from Jan Blom) +# 1998-07-15 fl Use private names for internal variables +# 1999-06-13 fl Rewritten for PIL 1.0 (1.0) +# 2000-10-11 fl Additional fixes for Python 2.0 (1.1) +# 2001-04-17 fl Fixed rewind support (seek to frame 0) (1.2) +# 2001-05-12 fl Added write support for more tags (from Greg Couch) (1.3) +# 2001-12-18 fl Added workaround for broken Matrox library +# 2002-01-18 fl Don't mess up if photometric tag is missing (D. Alan Stewart) +# 2003-05-19 fl Check FILLORDER tag +# 2003-09-26 fl Added RGBa support +# 2004-02-24 fl Added DPI support; fixed rational write support +# 2005-02-07 fl Added workaround for broken Corel Draw 10 files +# 2006-01-09 fl Added support for float/double tags (from Russell Nelson) +# +# Copyright (c) 1997-2006 by Secret Labs AB. All rights reserved. +# Copyright (c) 1995-1997 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +import io +import itertools +import logging +import os +import struct +import warnings +from collections.abc import MutableMapping +from fractions import Fraction +from numbers import Number, Rational + +from . import Image, ImageFile, ImageOps, ImagePalette, TiffTags +from ._binary import o8 +from .TiffTags import TYPES + +logger = logging.getLogger(__name__) + +# Set these to true to force use of libtiff for reading or writing. +READ_LIBTIFF = False +WRITE_LIBTIFF = False +IFD_LEGACY_API = True +STRIP_SIZE = 65536 + +II = b"II" # little-endian (Intel style) +MM = b"MM" # big-endian (Motorola style) + +# +# -------------------------------------------------------------------- +# Read TIFF files + +# a few tag names, just to make the code below a bit more readable +IMAGEWIDTH = 256 +IMAGELENGTH = 257 +BITSPERSAMPLE = 258 +COMPRESSION = 259 +PHOTOMETRIC_INTERPRETATION = 262 +FILLORDER = 266 +IMAGEDESCRIPTION = 270 +STRIPOFFSETS = 273 +SAMPLESPERPIXEL = 277 +ROWSPERSTRIP = 278 +STRIPBYTECOUNTS = 279 +X_RESOLUTION = 282 +Y_RESOLUTION = 283 +PLANAR_CONFIGURATION = 284 +RESOLUTION_UNIT = 296 +TRANSFERFUNCTION = 301 +SOFTWARE = 305 +DATE_TIME = 306 +ARTIST = 315 +PREDICTOR = 317 +COLORMAP = 320 +TILEOFFSETS = 324 +SUBIFD = 330 +EXTRASAMPLES = 338 +SAMPLEFORMAT = 339 +JPEGTABLES = 347 +YCBCRSUBSAMPLING = 530 +REFERENCEBLACKWHITE = 532 +COPYRIGHT = 33432 +IPTC_NAA_CHUNK = 33723 # newsphoto properties +PHOTOSHOP_CHUNK = 34377 # photoshop properties +ICCPROFILE = 34675 +EXIFIFD = 34665 +XMP = 700 +JPEGQUALITY = 65537 # pseudo-tag by libtiff + +# https://github.com/imagej/ImageJA/blob/master/src/main/java/ij/io/TiffDecoder.java +IMAGEJ_META_DATA_BYTE_COUNTS = 50838 +IMAGEJ_META_DATA = 50839 + +COMPRESSION_INFO = { + # Compression => pil compression name + 1: "raw", + 2: "tiff_ccitt", + 3: "group3", + 4: "group4", + 5: "tiff_lzw", + 6: "tiff_jpeg", # obsolete + 7: "jpeg", + 8: "tiff_adobe_deflate", + 32771: "tiff_raw_16", # 16-bit padding + 32773: "packbits", + 32809: "tiff_thunderscan", + 32946: "tiff_deflate", + 34676: "tiff_sgilog", + 34677: "tiff_sgilog24", + 34925: "lzma", + 50000: "zstd", + 50001: "webp", +} + +COMPRESSION_INFO_REV = {v: k for k, v in COMPRESSION_INFO.items()} + +OPEN_INFO = { + # (ByteOrder, PhotoInterpretation, SampleFormat, FillOrder, BitsPerSample, + # ExtraSamples) => mode, rawmode + (II, 0, (1,), 1, (1,), ()): ("1", "1;I"), + (MM, 0, (1,), 1, (1,), ()): ("1", "1;I"), + (II, 0, (1,), 2, (1,), ()): ("1", "1;IR"), + (MM, 0, (1,), 2, (1,), ()): ("1", "1;IR"), + (II, 1, (1,), 1, (1,), ()): ("1", "1"), + (MM, 1, (1,), 1, (1,), ()): ("1", "1"), + (II, 1, (1,), 2, (1,), ()): ("1", "1;R"), + (MM, 1, (1,), 2, (1,), ()): ("1", "1;R"), + (II, 0, (1,), 1, (2,), ()): ("L", "L;2I"), + (MM, 0, (1,), 1, (2,), ()): ("L", "L;2I"), + (II, 0, (1,), 2, (2,), ()): ("L", "L;2IR"), + (MM, 0, (1,), 2, (2,), ()): ("L", "L;2IR"), + (II, 1, (1,), 1, (2,), ()): ("L", "L;2"), + (MM, 1, (1,), 1, (2,), ()): ("L", "L;2"), + (II, 1, (1,), 2, (2,), ()): ("L", "L;2R"), + (MM, 1, (1,), 2, (2,), ()): ("L", "L;2R"), + (II, 0, (1,), 1, (4,), ()): ("L", "L;4I"), + (MM, 0, (1,), 1, (4,), ()): ("L", "L;4I"), + (II, 0, (1,), 2, (4,), ()): ("L", "L;4IR"), + (MM, 0, (1,), 2, (4,), ()): ("L", "L;4IR"), + (II, 1, (1,), 1, (4,), ()): ("L", "L;4"), + (MM, 1, (1,), 1, (4,), ()): ("L", "L;4"), + (II, 1, (1,), 2, (4,), ()): ("L", "L;4R"), + (MM, 1, (1,), 2, (4,), ()): ("L", "L;4R"), + (II, 0, (1,), 1, (8,), ()): ("L", "L;I"), + (MM, 0, (1,), 1, (8,), ()): ("L", "L;I"), + (II, 0, (1,), 2, (8,), ()): ("L", "L;IR"), + (MM, 0, (1,), 2, (8,), ()): ("L", "L;IR"), + (II, 1, (1,), 1, (8,), ()): ("L", "L"), + (MM, 1, (1,), 1, (8,), ()): ("L", "L"), + (II, 1, (1,), 2, (8,), ()): ("L", "L;R"), + (MM, 1, (1,), 2, (8,), ()): ("L", "L;R"), + (II, 1, (1,), 1, (12,), ()): ("I;16", "I;12"), + (II, 1, (1,), 1, (16,), ()): ("I;16", "I;16"), + (MM, 1, (1,), 1, (16,), ()): ("I;16B", "I;16B"), + (II, 1, (2,), 1, (16,), ()): ("I", "I;16S"), + (MM, 1, (2,), 1, (16,), ()): ("I", "I;16BS"), + (II, 0, (3,), 1, (32,), ()): ("F", "F;32F"), + (MM, 0, (3,), 1, (32,), ()): ("F", "F;32BF"), + (II, 1, (1,), 1, (32,), ()): ("I", "I;32N"), + (II, 1, (2,), 1, (32,), ()): ("I", "I;32S"), + (MM, 1, (2,), 1, (32,), ()): ("I", "I;32BS"), + (II, 1, (3,), 1, (32,), ()): ("F", "F;32F"), + (MM, 1, (3,), 1, (32,), ()): ("F", "F;32BF"), + (II, 1, (1,), 1, (8, 8), (2,)): ("LA", "LA"), + (MM, 1, (1,), 1, (8, 8), (2,)): ("LA", "LA"), + (II, 2, (1,), 1, (8, 8, 8), ()): ("RGB", "RGB"), + (MM, 2, (1,), 1, (8, 8, 8), ()): ("RGB", "RGB"), + (II, 2, (1,), 2, (8, 8, 8), ()): ("RGB", "RGB;R"), + (MM, 2, (1,), 2, (8, 8, 8), ()): ("RGB", "RGB;R"), + (II, 2, (1,), 1, (8, 8, 8, 8), ()): ("RGBA", "RGBA"), # missing ExtraSamples + (MM, 2, (1,), 1, (8, 8, 8, 8), ()): ("RGBA", "RGBA"), # missing ExtraSamples + (II, 2, (1,), 1, (8, 8, 8, 8), (0,)): ("RGBX", "RGBX"), + (MM, 2, (1,), 1, (8, 8, 8, 8), (0,)): ("RGBX", "RGBX"), + (II, 2, (1,), 1, (8, 8, 8, 8, 8), (0, 0)): ("RGBX", "RGBXX"), + (MM, 2, (1,), 1, (8, 8, 8, 8, 8), (0, 0)): ("RGBX", "RGBXX"), + (II, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0, 0)): ("RGBX", "RGBXXX"), + (MM, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0, 0)): ("RGBX", "RGBXXX"), + (II, 2, (1,), 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"), + (MM, 2, (1,), 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"), + (II, 2, (1,), 1, (8, 8, 8, 8, 8), (1, 0)): ("RGBA", "RGBaX"), + (MM, 2, (1,), 1, (8, 8, 8, 8, 8), (1, 0)): ("RGBA", "RGBaX"), + (II, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (1, 0, 0)): ("RGBA", "RGBaXX"), + (MM, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (1, 0, 0)): ("RGBA", "RGBaXX"), + (II, 2, (1,), 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"), + (MM, 2, (1,), 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"), + (II, 2, (1,), 1, (8, 8, 8, 8, 8), (2, 0)): ("RGBA", "RGBAX"), + (MM, 2, (1,), 1, (8, 8, 8, 8, 8), (2, 0)): ("RGBA", "RGBAX"), + (II, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (2, 0, 0)): ("RGBA", "RGBAXX"), + (MM, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (2, 0, 0)): ("RGBA", "RGBAXX"), + (II, 2, (1,), 1, (8, 8, 8, 8), (999,)): ("RGBA", "RGBA"), # Corel Draw 10 + (MM, 2, (1,), 1, (8, 8, 8, 8), (999,)): ("RGBA", "RGBA"), # Corel Draw 10 + (II, 2, (1,), 1, (16, 16, 16), ()): ("RGB", "RGB;16L"), + (MM, 2, (1,), 1, (16, 16, 16), ()): ("RGB", "RGB;16B"), + (II, 2, (1,), 1, (16, 16, 16, 16), ()): ("RGBA", "RGBA;16L"), + (MM, 2, (1,), 1, (16, 16, 16, 16), ()): ("RGBA", "RGBA;16B"), + (II, 2, (1,), 1, (16, 16, 16, 16), (0,)): ("RGBX", "RGBX;16L"), + (MM, 2, (1,), 1, (16, 16, 16, 16), (0,)): ("RGBX", "RGBX;16B"), + (II, 2, (1,), 1, (16, 16, 16, 16), (1,)): ("RGBA", "RGBa;16L"), + (MM, 2, (1,), 1, (16, 16, 16, 16), (1,)): ("RGBA", "RGBa;16B"), + (II, 2, (1,), 1, (16, 16, 16, 16), (2,)): ("RGBA", "RGBA;16L"), + (MM, 2, (1,), 1, (16, 16, 16, 16), (2,)): ("RGBA", "RGBA;16B"), + (II, 3, (1,), 1, (1,), ()): ("P", "P;1"), + (MM, 3, (1,), 1, (1,), ()): ("P", "P;1"), + (II, 3, (1,), 2, (1,), ()): ("P", "P;1R"), + (MM, 3, (1,), 2, (1,), ()): ("P", "P;1R"), + (II, 3, (1,), 1, (2,), ()): ("P", "P;2"), + (MM, 3, (1,), 1, (2,), ()): ("P", "P;2"), + (II, 3, (1,), 2, (2,), ()): ("P", "P;2R"), + (MM, 3, (1,), 2, (2,), ()): ("P", "P;2R"), + (II, 3, (1,), 1, (4,), ()): ("P", "P;4"), + (MM, 3, (1,), 1, (4,), ()): ("P", "P;4"), + (II, 3, (1,), 2, (4,), ()): ("P", "P;4R"), + (MM, 3, (1,), 2, (4,), ()): ("P", "P;4R"), + (II, 3, (1,), 1, (8,), ()): ("P", "P"), + (MM, 3, (1,), 1, (8,), ()): ("P", "P"), + (II, 3, (1,), 1, (8, 8), (2,)): ("PA", "PA"), + (MM, 3, (1,), 1, (8, 8), (2,)): ("PA", "PA"), + (II, 3, (1,), 2, (8,), ()): ("P", "P;R"), + (MM, 3, (1,), 2, (8,), ()): ("P", "P;R"), + (II, 5, (1,), 1, (8, 8, 8, 8), ()): ("CMYK", "CMYK"), + (MM, 5, (1,), 1, (8, 8, 8, 8), ()): ("CMYK", "CMYK"), + (II, 5, (1,), 1, (8, 8, 8, 8, 8), (0,)): ("CMYK", "CMYKX"), + (MM, 5, (1,), 1, (8, 8, 8, 8, 8), (0,)): ("CMYK", "CMYKX"), + (II, 5, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0)): ("CMYK", "CMYKXX"), + (MM, 5, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0)): ("CMYK", "CMYKXX"), + (II, 5, (1,), 1, (16, 16, 16, 16), ()): ("CMYK", "CMYK;16L"), + # JPEG compressed images handled by LibTiff and auto-converted to RGBX + # Minimal Baseline TIFF requires YCbCr images to have 3 SamplesPerPixel + (II, 6, (1,), 1, (8, 8, 8), ()): ("RGB", "RGBX"), + (MM, 6, (1,), 1, (8, 8, 8), ()): ("RGB", "RGBX"), + (II, 8, (1,), 1, (8, 8, 8), ()): ("LAB", "LAB"), + (MM, 8, (1,), 1, (8, 8, 8), ()): ("LAB", "LAB"), +} + +PREFIXES = [ + b"MM\x00\x2A", # Valid TIFF header with big-endian byte order + b"II\x2A\x00", # Valid TIFF header with little-endian byte order + b"MM\x2A\x00", # Invalid TIFF header, assume big-endian + b"II\x00\x2A", # Invalid TIFF header, assume little-endian +] + + +def _accept(prefix): + return prefix[:4] in PREFIXES + + +def _limit_rational(val, max_val): + inv = abs(val) > 1 + n_d = IFDRational(1 / val if inv else val).limit_rational(max_val) + return n_d[::-1] if inv else n_d + + +def _limit_signed_rational(val, max_val, min_val): + frac = Fraction(val) + n_d = frac.numerator, frac.denominator + + if min(n_d) < min_val: + n_d = _limit_rational(val, abs(min_val)) + + if max(n_d) > max_val: + val = Fraction(*n_d) + n_d = _limit_rational(val, max_val) + + return n_d + + +## +# Wrapper for TIFF IFDs. + +_load_dispatch = {} +_write_dispatch = {} + + +class IFDRational(Rational): + """Implements a rational class where 0/0 is a legal value to match + the in the wild use of exif rationals. + + e.g., DigitalZoomRatio - 0.00/0.00 indicates that no digital zoom was used + """ + + """ If the denominator is 0, store this as a float('nan'), otherwise store + as a fractions.Fraction(). Delegate as appropriate + + """ + + __slots__ = ("_numerator", "_denominator", "_val") + + def __init__(self, value, denominator=1): + """ + :param value: either an integer numerator, a + float/rational/other number, or an IFDRational + :param denominator: Optional integer denominator + """ + if isinstance(value, IFDRational): + self._numerator = value.numerator + self._denominator = value.denominator + self._val = value._val + return + + if isinstance(value, Fraction): + self._numerator = value.numerator + self._denominator = value.denominator + else: + self._numerator = value + self._denominator = denominator + + if denominator == 0: + self._val = float("nan") + elif denominator == 1: + self._val = Fraction(value) + else: + self._val = Fraction(value, denominator) + + @property + def numerator(a): + return a._numerator + + @property + def denominator(a): + return a._denominator + + def limit_rational(self, max_denominator): + """ + + :param max_denominator: Integer, the maximum denominator value + :returns: Tuple of (numerator, denominator) + """ + + if self.denominator == 0: + return (self.numerator, self.denominator) + + f = self._val.limit_denominator(max_denominator) + return (f.numerator, f.denominator) + + def __repr__(self): + return str(float(self._val)) + + def __hash__(self): + return self._val.__hash__() + + def __eq__(self, other): + val = self._val + if isinstance(other, IFDRational): + other = other._val + if isinstance(other, float): + val = float(val) + return val == other + + def __getstate__(self): + return [self._val, self._numerator, self._denominator] + + def __setstate__(self, state): + IFDRational.__init__(self, 0) + _val, _numerator, _denominator = state + self._val = _val + self._numerator = _numerator + self._denominator = _denominator + + def _delegate(op): + def delegate(self, *args): + return getattr(self._val, op)(*args) + + return delegate + + """ a = ['add','radd', 'sub', 'rsub', 'mul', 'rmul', + 'truediv', 'rtruediv', 'floordiv', 'rfloordiv', + 'mod','rmod', 'pow','rpow', 'pos', 'neg', + 'abs', 'trunc', 'lt', 'gt', 'le', 'ge', 'bool', + 'ceil', 'floor', 'round'] + print("\n".join("__%s__ = _delegate('__%s__')" % (s,s) for s in a)) + """ + + __add__ = _delegate("__add__") + __radd__ = _delegate("__radd__") + __sub__ = _delegate("__sub__") + __rsub__ = _delegate("__rsub__") + __mul__ = _delegate("__mul__") + __rmul__ = _delegate("__rmul__") + __truediv__ = _delegate("__truediv__") + __rtruediv__ = _delegate("__rtruediv__") + __floordiv__ = _delegate("__floordiv__") + __rfloordiv__ = _delegate("__rfloordiv__") + __mod__ = _delegate("__mod__") + __rmod__ = _delegate("__rmod__") + __pow__ = _delegate("__pow__") + __rpow__ = _delegate("__rpow__") + __pos__ = _delegate("__pos__") + __neg__ = _delegate("__neg__") + __abs__ = _delegate("__abs__") + __trunc__ = _delegate("__trunc__") + __lt__ = _delegate("__lt__") + __gt__ = _delegate("__gt__") + __le__ = _delegate("__le__") + __ge__ = _delegate("__ge__") + __bool__ = _delegate("__bool__") + __ceil__ = _delegate("__ceil__") + __floor__ = _delegate("__floor__") + __round__ = _delegate("__round__") + + +class ImageFileDirectory_v2(MutableMapping): + """This class represents a TIFF tag directory. To speed things up, we + don't decode tags unless they're asked for. + + Exposes a dictionary interface of the tags in the directory:: + + ifd = ImageFileDirectory_v2() + ifd[key] = 'Some Data' + ifd.tagtype[key] = TiffTags.ASCII + print(ifd[key]) + 'Some Data' + + Individual values are returned as the strings or numbers, sequences are + returned as tuples of the values. + + The tiff metadata type of each item is stored in a dictionary of + tag types in + :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v2.tagtype`. The types + are read from a tiff file, guessed from the type added, or added + manually. + + Data Structures: + + * ``self.tagtype = {}`` + + * Key: numerical TIFF tag number + * Value: integer corresponding to the data type from + :py:data:`.TiffTags.TYPES` + + .. versionadded:: 3.0.0 + + 'Internal' data structures: + + * ``self._tags_v2 = {}`` + + * Key: numerical TIFF tag number + * Value: decoded data, as tuple for multiple values + + * ``self._tagdata = {}`` + + * Key: numerical TIFF tag number + * Value: undecoded byte string from file + + * ``self._tags_v1 = {}`` + + * Key: numerical TIFF tag number + * Value: decoded data in the v1 format + + Tags will be found in the private attributes ``self._tagdata``, and in + ``self._tags_v2`` once decoded. + + ``self.legacy_api`` is a value for internal use, and shouldn't be changed + from outside code. In cooperation with + :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`, if ``legacy_api`` + is true, then decoded tags will be populated into both ``_tags_v1`` and + ``_tags_v2``. ``_tags_v2`` will be used if this IFD is used in the TIFF + save routine. Tags should be read from ``_tags_v1`` if + ``legacy_api == true``. + + """ + + def __init__(self, ifh=b"II\052\0\0\0\0\0", prefix=None, group=None): + """Initialize an ImageFileDirectory. + + To construct an ImageFileDirectory from a real file, pass the 8-byte + magic header to the constructor. To only set the endianness, pass it + as the 'prefix' keyword argument. + + :param ifh: One of the accepted magic headers (cf. PREFIXES); also sets + endianness. + :param prefix: Override the endianness of the file. + """ + if ifh[:4] not in PREFIXES: + raise SyntaxError(f"not a TIFF file (header {repr(ifh)} not valid)") + self._prefix = prefix if prefix is not None else ifh[:2] + if self._prefix == MM: + self._endian = ">" + elif self._prefix == II: + self._endian = "<" + else: + raise SyntaxError("not a TIFF IFD") + self.group = group + self.tagtype = {} + """ Dictionary of tag types """ + self.reset() + (self.next,) = self._unpack("L", ifh[4:]) + self._legacy_api = False + + prefix = property(lambda self: self._prefix) + offset = property(lambda self: self._offset) + legacy_api = property(lambda self: self._legacy_api) + + @legacy_api.setter + def legacy_api(self, value): + raise Exception("Not allowing setting of legacy api") + + def reset(self): + self._tags_v1 = {} # will remain empty if legacy_api is false + self._tags_v2 = {} # main tag storage + self._tagdata = {} + self.tagtype = {} # added 2008-06-05 by Florian Hoech + self._next = None + self._offset = None + + def __str__(self): + return str(dict(self)) + + def named(self): + """ + :returns: dict of name|key: value + + Returns the complete tag dictionary, with named tags where possible. + """ + return { + TiffTags.lookup(code, self.group).name: value + for code, value in self.items() + } + + def __len__(self): + return len(set(self._tagdata) | set(self._tags_v2)) + + def __getitem__(self, tag): + if tag not in self._tags_v2: # unpack on the fly + data = self._tagdata[tag] + typ = self.tagtype[tag] + size, handler = self._load_dispatch[typ] + self[tag] = handler(self, data, self.legacy_api) # check type + val = self._tags_v2[tag] + if self.legacy_api and not isinstance(val, (tuple, bytes)): + val = (val,) + return val + + def __contains__(self, tag): + return tag in self._tags_v2 or tag in self._tagdata + + def __setitem__(self, tag, value): + self._setitem(tag, value, self.legacy_api) + + def _setitem(self, tag, value, legacy_api): + basetypes = (Number, bytes, str) + + info = TiffTags.lookup(tag, self.group) + values = [value] if isinstance(value, basetypes) else value + + if tag not in self.tagtype: + if info.type: + self.tagtype[tag] = info.type + else: + self.tagtype[tag] = TiffTags.UNDEFINED + if all(isinstance(v, IFDRational) for v in values): + self.tagtype[tag] = ( + TiffTags.RATIONAL + if all(v >= 0 for v in values) + else TiffTags.SIGNED_RATIONAL + ) + elif all(isinstance(v, int) for v in values): + if all(0 <= v < 2 ** 16 for v in values): + self.tagtype[tag] = TiffTags.SHORT + elif all(-(2 ** 15) < v < 2 ** 15 for v in values): + self.tagtype[tag] = TiffTags.SIGNED_SHORT + else: + self.tagtype[tag] = ( + TiffTags.LONG + if all(v >= 0 for v in values) + else TiffTags.SIGNED_LONG + ) + elif all(isinstance(v, float) for v in values): + self.tagtype[tag] = TiffTags.DOUBLE + elif all(isinstance(v, str) for v in values): + self.tagtype[tag] = TiffTags.ASCII + elif all(isinstance(v, bytes) for v in values): + self.tagtype[tag] = TiffTags.BYTE + + if self.tagtype[tag] == TiffTags.UNDEFINED: + values = [ + v.encode("ascii", "replace") if isinstance(v, str) else v + for v in values + ] + elif self.tagtype[tag] == TiffTags.RATIONAL: + values = [float(v) if isinstance(v, int) else v for v in values] + + is_ifd = self.tagtype[tag] == TiffTags.LONG and isinstance(values, dict) + if not is_ifd: + values = tuple(info.cvt_enum(value) for value in values) + + dest = self._tags_v1 if legacy_api else self._tags_v2 + + # Three branches: + # Spec'd length == 1, Actual length 1, store as element + # Spec'd length == 1, Actual > 1, Warn and truncate. Formerly barfed. + # No Spec, Actual length 1, Formerly (<4.2) returned a 1 element tuple. + # Don't mess with the legacy api, since it's frozen. + if not is_ifd and ( + (info.length == 1) + or self.tagtype[tag] == TiffTags.BYTE + or (info.length is None and len(values) == 1 and not legacy_api) + ): + # Don't mess with the legacy api, since it's frozen. + if legacy_api and self.tagtype[tag] in [ + TiffTags.RATIONAL, + TiffTags.SIGNED_RATIONAL, + ]: # rationals + values = (values,) + try: + (dest[tag],) = values + except ValueError: + # We've got a builtin tag with 1 expected entry + warnings.warn( + f"Metadata Warning, tag {tag} had too many entries: " + f"{len(values)}, expected 1" + ) + dest[tag] = values[0] + + else: + # Spec'd length > 1 or undefined + # Unspec'd, and length > 1 + dest[tag] = values + + def __delitem__(self, tag): + self._tags_v2.pop(tag, None) + self._tags_v1.pop(tag, None) + self._tagdata.pop(tag, None) + + def __iter__(self): + return iter(set(self._tagdata) | set(self._tags_v2)) + + def _unpack(self, fmt, data): + return struct.unpack(self._endian + fmt, data) + + def _pack(self, fmt, *values): + return struct.pack(self._endian + fmt, *values) + + def _register_loader(idx, size): + def decorator(func): + from .TiffTags import TYPES + + if func.__name__.startswith("load_"): + TYPES[idx] = func.__name__[5:].replace("_", " ") + _load_dispatch[idx] = size, func # noqa: F821 + return func + + return decorator + + def _register_writer(idx): + def decorator(func): + _write_dispatch[idx] = func # noqa: F821 + return func + + return decorator + + def _register_basic(idx_fmt_name): + from .TiffTags import TYPES + + idx, fmt, name = idx_fmt_name + TYPES[idx] = name + size = struct.calcsize("=" + fmt) + _load_dispatch[idx] = ( # noqa: F821 + size, + lambda self, data, legacy_api=True: ( + self._unpack("{}{}".format(len(data) // size, fmt), data) + ), + ) + _write_dispatch[idx] = lambda self, *values: ( # noqa: F821 + b"".join(self._pack(fmt, value) for value in values) + ) + + list( + map( + _register_basic, + [ + (TiffTags.SHORT, "H", "short"), + (TiffTags.LONG, "L", "long"), + (TiffTags.SIGNED_BYTE, "b", "signed byte"), + (TiffTags.SIGNED_SHORT, "h", "signed short"), + (TiffTags.SIGNED_LONG, "l", "signed long"), + (TiffTags.FLOAT, "f", "float"), + (TiffTags.DOUBLE, "d", "double"), + (TiffTags.IFD, "L", "long"), + ], + ) + ) + + @_register_loader(1, 1) # Basic type, except for the legacy API. + def load_byte(self, data, legacy_api=True): + return data + + @_register_writer(1) # Basic type, except for the legacy API. + def write_byte(self, data): + return data + + @_register_loader(2, 1) + def load_string(self, data, legacy_api=True): + if data.endswith(b"\0"): + data = data[:-1] + return data.decode("latin-1", "replace") + + @_register_writer(2) + def write_string(self, value): + # remerge of https://github.com/python-pillow/Pillow/pull/1416 + return b"" + value.encode("ascii", "replace") + b"\0" + + @_register_loader(5, 8) + def load_rational(self, data, legacy_api=True): + vals = self._unpack("{}L".format(len(data) // 4), data) + + def combine(a, b): + return (a, b) if legacy_api else IFDRational(a, b) + + return tuple(combine(num, denom) for num, denom in zip(vals[::2], vals[1::2])) + + @_register_writer(5) + def write_rational(self, *values): + return b"".join( + self._pack("2L", *_limit_rational(frac, 2 ** 32 - 1)) for frac in values + ) + + @_register_loader(7, 1) + def load_undefined(self, data, legacy_api=True): + return data + + @_register_writer(7) + def write_undefined(self, value): + return value + + @_register_loader(10, 8) + def load_signed_rational(self, data, legacy_api=True): + vals = self._unpack("{}l".format(len(data) // 4), data) + + def combine(a, b): + return (a, b) if legacy_api else IFDRational(a, b) + + return tuple(combine(num, denom) for num, denom in zip(vals[::2], vals[1::2])) + + @_register_writer(10) + def write_signed_rational(self, *values): + return b"".join( + self._pack("2l", *_limit_signed_rational(frac, 2 ** 31 - 1, -(2 ** 31))) + for frac in values + ) + + def _ensure_read(self, fp, size): + ret = fp.read(size) + if len(ret) != size: + raise OSError( + "Corrupt EXIF data. " + f"Expecting to read {size} bytes but only got {len(ret)}. " + ) + return ret + + def load(self, fp): + + self.reset() + self._offset = fp.tell() + + try: + for i in range(self._unpack("H", self._ensure_read(fp, 2))[0]): + tag, typ, count, data = self._unpack("HHL4s", self._ensure_read(fp, 12)) + + tagname = TiffTags.lookup(tag, self.group).name + typname = TYPES.get(typ, "unknown") + msg = f"tag: {tagname} ({tag}) - type: {typname} ({typ})" + + try: + unit_size, handler = self._load_dispatch[typ] + except KeyError: + logger.debug(msg + f" - unsupported type {typ}") + continue # ignore unsupported type + size = count * unit_size + if size > 4: + here = fp.tell() + (offset,) = self._unpack("L", data) + msg += f" Tag Location: {here} - Data Location: {offset}" + fp.seek(offset) + data = ImageFile._safe_read(fp, size) + fp.seek(here) + else: + data = data[:size] + + if len(data) != size: + warnings.warn( + "Possibly corrupt EXIF data. " + f"Expecting to read {size} bytes but only got {len(data)}." + f" Skipping tag {tag}" + ) + logger.debug(msg) + continue + + if not data: + logger.debug(msg) + continue + + self._tagdata[tag] = data + self.tagtype[tag] = typ + + msg += " - value: " + ( + "" % size if size > 32 else repr(data) + ) + logger.debug(msg) + + (self.next,) = self._unpack("L", self._ensure_read(fp, 4)) + except OSError as msg: + warnings.warn(str(msg)) + return + + def tobytes(self, offset=0): + # FIXME What about tagdata? + result = self._pack("H", len(self._tags_v2)) + + entries = [] + offset = offset + len(result) + len(self._tags_v2) * 12 + 4 + stripoffsets = None + + # pass 1: convert tags to binary format + # always write tags in ascending order + for tag, value in sorted(self._tags_v2.items()): + if tag == STRIPOFFSETS: + stripoffsets = len(entries) + typ = self.tagtype.get(tag) + logger.debug(f"Tag {tag}, Type: {typ}, Value: {repr(value)}") + is_ifd = typ == TiffTags.LONG and isinstance(value, dict) + if is_ifd: + if self._endian == "<": + ifh = b"II\x2A\x00\x08\x00\x00\x00" + else: + ifh = b"MM\x00\x2A\x00\x00\x00\x08" + ifd = ImageFileDirectory_v2(ifh, group=tag) + values = self._tags_v2[tag] + for ifd_tag, ifd_value in values.items(): + ifd[ifd_tag] = ifd_value + data = ifd.tobytes(offset) + else: + values = value if isinstance(value, tuple) else (value,) + data = self._write_dispatch[typ](self, *values) + + tagname = TiffTags.lookup(tag, self.group).name + typname = "ifd" if is_ifd else TYPES.get(typ, "unknown") + msg = f"save: {tagname} ({tag}) - type: {typname} ({typ})" + msg += " - value: " + ( + "" % len(data) if len(data) >= 16 else str(values) + ) + logger.debug(msg) + + # count is sum of lengths for string and arbitrary data + if is_ifd: + count = 1 + elif typ in [TiffTags.BYTE, TiffTags.ASCII, TiffTags.UNDEFINED]: + count = len(data) + else: + count = len(values) + # figure out if data fits into the entry + if len(data) <= 4: + entries.append((tag, typ, count, data.ljust(4, b"\0"), b"")) + else: + entries.append((tag, typ, count, self._pack("L", offset), data)) + offset += (len(data) + 1) // 2 * 2 # pad to word + + # update strip offset data to point beyond auxiliary data + if stripoffsets is not None: + tag, typ, count, value, data = entries[stripoffsets] + if data: + raise NotImplementedError("multistrip support not yet implemented") + value = self._pack("L", self._unpack("L", value)[0] + offset) + entries[stripoffsets] = tag, typ, count, value, data + + # pass 2: write entries to file + for tag, typ, count, value, data in entries: + logger.debug(f"{tag} {typ} {count} {repr(value)} {repr(data)}") + result += self._pack("HHL4s", tag, typ, count, value) + + # -- overwrite here for multi-page -- + result += b"\0\0\0\0" # end of entries + + # pass 3: write auxiliary data to file + for tag, typ, count, value, data in entries: + result += data + if len(data) & 1: + result += b"\0" + + return result + + def save(self, fp): + + if fp.tell() == 0: # skip TIFF header on subsequent pages + # tiff header -- PIL always starts the first IFD at offset 8 + fp.write(self._prefix + self._pack("HL", 42, 8)) + + offset = fp.tell() + result = self.tobytes(offset) + fp.write(result) + return offset + len(result) + + +ImageFileDirectory_v2._load_dispatch = _load_dispatch +ImageFileDirectory_v2._write_dispatch = _write_dispatch +for idx, name in TYPES.items(): + name = name.replace(" ", "_") + setattr(ImageFileDirectory_v2, "load_" + name, _load_dispatch[idx][1]) + setattr(ImageFileDirectory_v2, "write_" + name, _write_dispatch[idx]) +del _load_dispatch, _write_dispatch, idx, name + + +# Legacy ImageFileDirectory support. +class ImageFileDirectory_v1(ImageFileDirectory_v2): + """This class represents the **legacy** interface to a TIFF tag directory. + + Exposes a dictionary interface of the tags in the directory:: + + ifd = ImageFileDirectory_v1() + ifd[key] = 'Some Data' + ifd.tagtype[key] = TiffTags.ASCII + print(ifd[key]) + ('Some Data',) + + Also contains a dictionary of tag types as read from the tiff image file, + :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v1.tagtype`. + + Values are returned as a tuple. + + .. deprecated:: 3.0.0 + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._legacy_api = True + + tags = property(lambda self: self._tags_v1) + tagdata = property(lambda self: self._tagdata) + + # defined in ImageFileDirectory_v2 + tagtype: dict + """Dictionary of tag types""" + + @classmethod + def from_v2(cls, original): + """Returns an + :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1` + instance with the same data as is contained in the original + :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2` + instance. + + :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1` + + """ + + ifd = cls(prefix=original.prefix) + ifd._tagdata = original._tagdata + ifd.tagtype = original.tagtype + ifd.next = original.next # an indicator for multipage tiffs + return ifd + + def to_v2(self): + """Returns an + :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2` + instance with the same data as is contained in the original + :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1` + instance. + + :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2` + + """ + + ifd = ImageFileDirectory_v2(prefix=self.prefix) + ifd._tagdata = dict(self._tagdata) + ifd.tagtype = dict(self.tagtype) + ifd._tags_v2 = dict(self._tags_v2) + return ifd + + def __contains__(self, tag): + return tag in self._tags_v1 or tag in self._tagdata + + def __len__(self): + return len(set(self._tagdata) | set(self._tags_v1)) + + def __iter__(self): + return iter(set(self._tagdata) | set(self._tags_v1)) + + def __setitem__(self, tag, value): + for legacy_api in (False, True): + self._setitem(tag, value, legacy_api) + + def __getitem__(self, tag): + if tag not in self._tags_v1: # unpack on the fly + data = self._tagdata[tag] + typ = self.tagtype[tag] + size, handler = self._load_dispatch[typ] + for legacy in (False, True): + self._setitem(tag, handler(self, data, legacy), legacy) + val = self._tags_v1[tag] + if not isinstance(val, (tuple, bytes)): + val = (val,) + return val + + +# undone -- switch this pointer when IFD_LEGACY_API == False +ImageFileDirectory = ImageFileDirectory_v1 + + +## +# Image plugin for TIFF files. + + +class TiffImageFile(ImageFile.ImageFile): + + format = "TIFF" + format_description = "Adobe TIFF" + _close_exclusive_fp_after_loading = False + + def __init__(self, fp=None, filename=None): + self.tag_v2 = None + """ Image file directory (tag dictionary) """ + + self.tag = None + """ Legacy tag entries """ + + super().__init__(fp, filename) + + def _open(self): + """Open the first image in a TIFF file""" + + # Header + ifh = self.fp.read(8) + + self.tag_v2 = ImageFileDirectory_v2(ifh) + + # legacy IFD entries will be filled in later + self.ifd = None + + # setup frame pointers + self.__first = self.__next = self.tag_v2.next + self.__frame = -1 + self.__fp = self.fp + self._frame_pos = [] + self._n_frames = None + + logger.debug("*** TiffImageFile._open ***") + logger.debug(f"- __first: {self.__first}") + logger.debug(f"- ifh: {repr(ifh)}") # Use repr to avoid str(bytes) + + # and load the first frame + self._seek(0) + + @property + def n_frames(self): + if self._n_frames is None: + current = self.tell() + self._seek(len(self._frame_pos)) + while self._n_frames is None: + self._seek(self.tell() + 1) + self.seek(current) + return self._n_frames + + def seek(self, frame): + """Select a given frame as current image""" + if not self._seek_check(frame): + return + self._seek(frame) + # Create a new core image object on second and + # subsequent frames in the image. Image may be + # different size/mode. + Image._decompression_bomb_check(self.size) + self.im = Image.core.new(self.mode, self.size) + + def _seek(self, frame): + self.fp = self.__fp + + # reset buffered io handle in case fp + # was passed to libtiff, invalidating the buffer + self.fp.tell() + + while len(self._frame_pos) <= frame: + if not self.__next: + raise EOFError("no more images in TIFF file") + logger.debug( + f"Seeking to frame {frame}, on frame {self.__frame}, " + f"__next {self.__next}, location: {self.fp.tell()}" + ) + self.fp.seek(self.__next) + self._frame_pos.append(self.__next) + logger.debug("Loading tags, location: %s" % self.fp.tell()) + self.tag_v2.load(self.fp) + if self.tag_v2.next in self._frame_pos: + # This IFD has already been processed + # Declare this to be the end of the image + self.__next = 0 + else: + self.__next = self.tag_v2.next + if self.__next == 0: + self._n_frames = frame + 1 + if len(self._frame_pos) == 1: + self.is_animated = self.__next != 0 + self.__frame += 1 + self.fp.seek(self._frame_pos[frame]) + self.tag_v2.load(self.fp) + # fill the legacy tag/ifd entries + self.tag = self.ifd = ImageFileDirectory_v1.from_v2(self.tag_v2) + self.__frame = frame + self._setup() + + def tell(self): + """Return the current frame number""" + return self.__frame + + def getxmp(self): + """ + Returns a dictionary containing the XMP tags. + Requires defusedxml to be installed. + :returns: XMP tags in a dictionary. + """ + return self._getxmp(self.tag_v2[700]) if 700 in self.tag_v2 else {} + + def load(self): + if self.tile and self.use_load_libtiff: + return self._load_libtiff() + return super().load() + + def load_end(self): + if self._tile_orientation: + method = { + 2: Image.FLIP_LEFT_RIGHT, + 3: Image.ROTATE_180, + 4: Image.FLIP_TOP_BOTTOM, + 5: Image.TRANSPOSE, + 6: Image.ROTATE_270, + 7: Image.TRANSVERSE, + 8: Image.ROTATE_90, + }.get(self._tile_orientation) + if method is not None: + self.im = self.im.transpose(method) + self._size = self.im.size + + # allow closing if we're on the first frame, there's no next + # This is the ImageFile.load path only, libtiff specific below. + if not self.is_animated: + self._close_exclusive_fp_after_loading = True + + # reset buffered io handle in case fp + # was passed to libtiff, invalidating the buffer + self.fp.tell() + + # load IFD data from fp before it is closed + exif = self.getexif() + for key in TiffTags.TAGS_V2_GROUPS.keys(): + if key not in exif: + continue + exif.get_ifd(key) + + def _load_libtiff(self): + """Overload method triggered when we detect a compressed tiff + Calls out to libtiff""" + + Image.Image.load(self) + + self.load_prepare() + + if not len(self.tile) == 1: + raise OSError("Not exactly one tile") + + # (self._compression, (extents tuple), + # 0, (rawmode, self._compression, fp)) + extents = self.tile[0][1] + args = list(self.tile[0][3]) + + # To be nice on memory footprint, if there's a + # file descriptor, use that instead of reading + # into a string in python. + # libtiff closes the file descriptor, so pass in a dup. + try: + fp = hasattr(self.fp, "fileno") and os.dup(self.fp.fileno()) + # flush the file descriptor, prevents error on pypy 2.4+ + # should also eliminate the need for fp.tell + # in _seek + if hasattr(self.fp, "flush"): + self.fp.flush() + except OSError: + # io.BytesIO have a fileno, but returns an OSError if + # it doesn't use a file descriptor. + fp = False + + if fp: + args[2] = fp + + decoder = Image._getdecoder( + self.mode, "libtiff", tuple(args), self.decoderconfig + ) + try: + decoder.setimage(self.im, extents) + except ValueError as e: + raise OSError("Couldn't set the image") from e + + close_self_fp = self._exclusive_fp and not self.is_animated + if hasattr(self.fp, "getvalue"): + # We've got a stringio like thing passed in. Yay for all in memory. + # The decoder needs the entire file in one shot, so there's not + # a lot we can do here other than give it the entire file. + # unless we could do something like get the address of the + # underlying string for stringio. + # + # Rearranging for supporting byteio items, since they have a fileno + # that returns an OSError if there's no underlying fp. Easier to + # deal with here by reordering. + logger.debug("have getvalue. just sending in a string from getvalue") + n, err = decoder.decode(self.fp.getvalue()) + elif fp: + # we've got a actual file on disk, pass in the fp. + logger.debug("have fileno, calling fileno version of the decoder.") + if not close_self_fp: + self.fp.seek(0) + # 4 bytes, otherwise the trace might error out + n, err = decoder.decode(b"fpfp") + else: + # we have something else. + logger.debug("don't have fileno or getvalue. just reading") + self.fp.seek(0) + # UNDONE -- so much for that buffer size thing. + n, err = decoder.decode(self.fp.read()) + + self.tile = [] + self.readonly = 0 + + self.load_end() + + # libtiff closed the fp in a, we need to close self.fp, if possible + if close_self_fp: + self.fp.close() + self.fp = None # might be shared + + if err < 0: + raise OSError(err) + + return Image.Image.load(self) + + def _setup(self): + """Setup this image object based on current tags""" + + if 0xBC01 in self.tag_v2: + raise OSError("Windows Media Photo files not yet supported") + + # extract relevant tags + self._compression = COMPRESSION_INFO[self.tag_v2.get(COMPRESSION, 1)] + self._planar_configuration = self.tag_v2.get(PLANAR_CONFIGURATION, 1) + + # photometric is a required tag, but not everyone is reading + # the specification + photo = self.tag_v2.get(PHOTOMETRIC_INTERPRETATION, 0) + + # old style jpeg compression images most certainly are YCbCr + if self._compression == "tiff_jpeg": + photo = 6 + + fillorder = self.tag_v2.get(FILLORDER, 1) + + logger.debug("*** Summary ***") + logger.debug(f"- compression: {self._compression}") + logger.debug(f"- photometric_interpretation: {photo}") + logger.debug(f"- planar_configuration: {self._planar_configuration}") + logger.debug(f"- fill_order: {fillorder}") + logger.debug(f"- YCbCr subsampling: {self.tag.get(530)}") + + # size + xsize = int(self.tag_v2.get(IMAGEWIDTH)) + ysize = int(self.tag_v2.get(IMAGELENGTH)) + self._size = xsize, ysize + + logger.debug(f"- size: {self.size}") + + sampleFormat = self.tag_v2.get(SAMPLEFORMAT, (1,)) + if len(sampleFormat) > 1 and max(sampleFormat) == min(sampleFormat) == 1: + # SAMPLEFORMAT is properly per band, so an RGB image will + # be (1,1,1). But, we don't support per band pixel types, + # and anything more than one band is a uint8. So, just + # take the first element. Revisit this if adding support + # for more exotic images. + sampleFormat = (1,) + + bps_tuple = self.tag_v2.get(BITSPERSAMPLE, (1,)) + extra_tuple = self.tag_v2.get(EXTRASAMPLES, ()) + if photo in (2, 6, 8): # RGB, YCbCr, LAB + bps_count = 3 + elif photo == 5: # CMYK + bps_count = 4 + else: + bps_count = 1 + bps_count += len(extra_tuple) + # Some files have only one value in bps_tuple, + # while should have more. Fix it + if bps_count > len(bps_tuple) and len(bps_tuple) == 1: + bps_tuple = bps_tuple * bps_count + + samplesPerPixel = self.tag_v2.get( + SAMPLESPERPIXEL, + 3 if self._compression == "tiff_jpeg" and photo in (2, 6) else 1, + ) + if len(bps_tuple) != samplesPerPixel: + raise SyntaxError("unknown data organization") + + # mode: check photometric interpretation and bits per pixel + key = ( + self.tag_v2.prefix, + photo, + sampleFormat, + fillorder, + bps_tuple, + extra_tuple, + ) + logger.debug(f"format key: {key}") + try: + self.mode, rawmode = OPEN_INFO[key] + except KeyError as e: + logger.debug("- unsupported format") + raise SyntaxError("unknown pixel mode") from e + + logger.debug(f"- raw mode: {rawmode}") + logger.debug(f"- pil mode: {self.mode}") + + self.info["compression"] = self._compression + + xres = self.tag_v2.get(X_RESOLUTION, 1) + yres = self.tag_v2.get(Y_RESOLUTION, 1) + + if xres and yres: + resunit = self.tag_v2.get(RESOLUTION_UNIT) + if resunit == 2: # dots per inch + self.info["dpi"] = (xres, yres) + elif resunit == 3: # dots per centimeter. convert to dpi + self.info["dpi"] = (xres * 2.54, yres * 2.54) + elif resunit is None: # used to default to 1, but now 2) + self.info["dpi"] = (xres, yres) + # For backward compatibility, + # we also preserve the old behavior + self.info["resolution"] = xres, yres + else: # No absolute unit of measurement + self.info["resolution"] = xres, yres + + # build tile descriptors + x = y = layer = 0 + self.tile = [] + self.use_load_libtiff = READ_LIBTIFF or self._compression != "raw" + if self.use_load_libtiff: + # Decoder expects entire file as one tile. + # There's a buffer size limit in load (64k) + # so large g4 images will fail if we use that + # function. + # + # Setup the one tile for the whole image, then + # use the _load_libtiff function. + + # libtiff handles the fillmode for us, so 1;IR should + # actually be 1;I. Including the R double reverses the + # bits, so stripes of the image are reversed. See + # https://github.com/python-pillow/Pillow/issues/279 + if fillorder == 2: + # Replace fillorder with fillorder=1 + key = key[:3] + (1,) + key[4:] + logger.debug(f"format key: {key}") + # this should always work, since all the + # fillorder==2 modes have a corresponding + # fillorder=1 mode + self.mode, rawmode = OPEN_INFO[key] + # libtiff always returns the bytes in native order. + # we're expecting image byte order. So, if the rawmode + # contains I;16, we need to convert from native to image + # byte order. + if rawmode == "I;16": + rawmode = "I;16N" + if ";16B" in rawmode: + rawmode = rawmode.replace(";16B", ";16N") + if ";16L" in rawmode: + rawmode = rawmode.replace(";16L", ";16N") + + # YCbCr images with new jpeg compression with pixels in one plane + # unpacked straight into RGB values + if ( + photo == 6 + and self._compression == "jpeg" + and self._planar_configuration == 1 + ): + rawmode = "RGB" + + # Offset in the tile tuple is 0, we go from 0,0 to + # w,h, and we only do this once -- eds + a = (rawmode, self._compression, False, self.tag_v2.offset) + self.tile.append(("libtiff", (0, 0, xsize, ysize), 0, a)) + + elif STRIPOFFSETS in self.tag_v2 or TILEOFFSETS in self.tag_v2: + # striped image + if STRIPOFFSETS in self.tag_v2: + offsets = self.tag_v2[STRIPOFFSETS] + h = self.tag_v2.get(ROWSPERSTRIP, ysize) + w = self.size[0] + else: + # tiled image + offsets = self.tag_v2[TILEOFFSETS] + w = self.tag_v2.get(322) + h = self.tag_v2.get(323) + + for offset in offsets: + if x + w > xsize: + stride = w * sum(bps_tuple) / 8 # bytes per line + else: + stride = 0 + + tile_rawmode = rawmode + if self._planar_configuration == 2: + # each band on it's own layer + tile_rawmode = rawmode[layer] + # adjust stride width accordingly + stride /= bps_count + + a = (tile_rawmode, int(stride), 1) + self.tile.append( + ( + self._compression, + (x, y, min(x + w, xsize), min(y + h, ysize)), + offset, + a, + ) + ) + x = x + w + if x >= self.size[0]: + x, y = 0, y + h + if y >= self.size[1]: + x = y = 0 + layer += 1 + else: + logger.debug("- unsupported data organization") + raise SyntaxError("unknown data organization") + + # Fix up info. + if ICCPROFILE in self.tag_v2: + self.info["icc_profile"] = self.tag_v2[ICCPROFILE] + + # fixup palette descriptor + + if self.mode in ["P", "PA"]: + palette = [o8(b // 256) for b in self.tag_v2[COLORMAP]] + self.palette = ImagePalette.raw("RGB;L", b"".join(palette)) + + self._tile_orientation = self.tag_v2.get(0x0112) + + def _close__fp(self): + try: + if self.__fp != self.fp: + self.__fp.close() + except AttributeError: + pass + finally: + self.__fp = None + + +# +# -------------------------------------------------------------------- +# Write TIFF files + +# little endian is default except for image modes with +# explicit big endian byte-order + +SAVE_INFO = { + # mode => rawmode, byteorder, photometrics, + # sampleformat, bitspersample, extra + "1": ("1", II, 1, 1, (1,), None), + "L": ("L", II, 1, 1, (8,), None), + "LA": ("LA", II, 1, 1, (8, 8), 2), + "P": ("P", II, 3, 1, (8,), None), + "PA": ("PA", II, 3, 1, (8, 8), 2), + "I": ("I;32S", II, 1, 2, (32,), None), + "I;16": ("I;16", II, 1, 1, (16,), None), + "I;16S": ("I;16S", II, 1, 2, (16,), None), + "F": ("F;32F", II, 1, 3, (32,), None), + "RGB": ("RGB", II, 2, 1, (8, 8, 8), None), + "RGBX": ("RGBX", II, 2, 1, (8, 8, 8, 8), 0), + "RGBA": ("RGBA", II, 2, 1, (8, 8, 8, 8), 2), + "CMYK": ("CMYK", II, 5, 1, (8, 8, 8, 8), None), + "YCbCr": ("YCbCr", II, 6, 1, (8, 8, 8), None), + "LAB": ("LAB", II, 8, 1, (8, 8, 8), None), + "I;32BS": ("I;32BS", MM, 1, 2, (32,), None), + "I;16B": ("I;16B", MM, 1, 1, (16,), None), + "I;16BS": ("I;16BS", MM, 1, 2, (16,), None), + "F;32BF": ("F;32BF", MM, 1, 3, (32,), None), +} + + +def _save(im, fp, filename): + + try: + rawmode, prefix, photo, format, bits, extra = SAVE_INFO[im.mode] + except KeyError as e: + raise OSError(f"cannot write mode {im.mode} as TIFF") from e + + ifd = ImageFileDirectory_v2(prefix=prefix) + + encoderinfo = im.encoderinfo + encoderconfig = im.encoderconfig + compression = encoderinfo.get("compression", im.info.get("compression")) + if compression is None: + compression = "raw" + elif compression == "tiff_jpeg": + # OJPEG is obsolete, so use new-style JPEG compression instead + compression = "jpeg" + elif compression == "tiff_deflate": + compression = "tiff_adobe_deflate" + + libtiff = WRITE_LIBTIFF or compression != "raw" + + # required for color libtiff images + ifd[PLANAR_CONFIGURATION] = getattr(im, "_planar_configuration", 1) + + ifd[IMAGEWIDTH] = im.size[0] + ifd[IMAGELENGTH] = im.size[1] + + # write any arbitrary tags passed in as an ImageFileDirectory + if "tiffinfo" in encoderinfo: + info = encoderinfo["tiffinfo"] + elif "exif" in encoderinfo: + info = encoderinfo["exif"] + if isinstance(info, bytes): + exif = Image.Exif() + exif.load(info) + info = exif + else: + info = {} + logger.debug("Tiffinfo Keys: %s" % list(info)) + if isinstance(info, ImageFileDirectory_v1): + info = info.to_v2() + for key in info: + if isinstance(info, Image.Exif) and key in TiffTags.TAGS_V2_GROUPS.keys(): + ifd[key] = info.get_ifd(key) + else: + ifd[key] = info.get(key) + try: + ifd.tagtype[key] = info.tagtype[key] + except Exception: + pass # might not be an IFD. Might not have populated type + + # additions written by Greg Couch, gregc@cgl.ucsf.edu + # inspired by image-sig posting from Kevin Cazabon, kcazabon@home.com + if hasattr(im, "tag_v2"): + # preserve tags from original TIFF image file + for key in ( + RESOLUTION_UNIT, + X_RESOLUTION, + Y_RESOLUTION, + IPTC_NAA_CHUNK, + PHOTOSHOP_CHUNK, + XMP, + ): + if key in im.tag_v2: + ifd[key] = im.tag_v2[key] + ifd.tagtype[key] = im.tag_v2.tagtype[key] + + # preserve ICC profile (should also work when saving other formats + # which support profiles as TIFF) -- 2008-06-06 Florian Hoech + icc = encoderinfo.get("icc_profile", im.info.get("icc_profile")) + if icc: + ifd[ICCPROFILE] = icc + + for key, name in [ + (IMAGEDESCRIPTION, "description"), + (X_RESOLUTION, "resolution"), + (Y_RESOLUTION, "resolution"), + (X_RESOLUTION, "x_resolution"), + (Y_RESOLUTION, "y_resolution"), + (RESOLUTION_UNIT, "resolution_unit"), + (SOFTWARE, "software"), + (DATE_TIME, "date_time"), + (ARTIST, "artist"), + (COPYRIGHT, "copyright"), + ]: + if name in encoderinfo: + ifd[key] = encoderinfo[name] + + dpi = encoderinfo.get("dpi") + if dpi: + ifd[RESOLUTION_UNIT] = 2 + ifd[X_RESOLUTION] = dpi[0] + ifd[Y_RESOLUTION] = dpi[1] + + if bits != (1,): + ifd[BITSPERSAMPLE] = bits + if len(bits) != 1: + ifd[SAMPLESPERPIXEL] = len(bits) + if extra is not None: + ifd[EXTRASAMPLES] = extra + if format != 1: + ifd[SAMPLEFORMAT] = format + + if PHOTOMETRIC_INTERPRETATION not in ifd: + ifd[PHOTOMETRIC_INTERPRETATION] = photo + elif im.mode in ("1", "L") and ifd[PHOTOMETRIC_INTERPRETATION] == 0: + if im.mode == "1": + inverted_im = im.copy() + px = inverted_im.load() + for y in range(inverted_im.height): + for x in range(inverted_im.width): + px[x, y] = 0 if px[x, y] == 255 else 255 + im = inverted_im + else: + im = ImageOps.invert(im) + + if im.mode in ["P", "PA"]: + lut = im.im.getpalette("RGB", "RGB;L") + ifd[COLORMAP] = tuple(v * 256 for v in lut) + # data orientation + stride = len(bits) * ((im.size[0] * bits[0] + 7) // 8) + # aim for given strip size (64 KB by default) when using libtiff writer + if libtiff: + rows_per_strip = 1 if stride == 0 else min(STRIP_SIZE // stride, im.size[1]) + # JPEG encoder expects multiple of 8 rows + if compression == "jpeg": + rows_per_strip = min(((rows_per_strip + 7) // 8) * 8, im.size[1]) + else: + rows_per_strip = im.size[1] + if rows_per_strip == 0: + rows_per_strip = 1 + strip_byte_counts = 1 if stride == 0 else stride * rows_per_strip + strips_per_image = (im.size[1] + rows_per_strip - 1) // rows_per_strip + ifd[ROWSPERSTRIP] = rows_per_strip + if strip_byte_counts >= 2 ** 16: + ifd.tagtype[STRIPBYTECOUNTS] = TiffTags.LONG + ifd[STRIPBYTECOUNTS] = (strip_byte_counts,) * (strips_per_image - 1) + ( + stride * im.size[1] - strip_byte_counts * (strips_per_image - 1), + ) + ifd[STRIPOFFSETS] = tuple( + range(0, strip_byte_counts * strips_per_image, strip_byte_counts) + ) # this is adjusted by IFD writer + # no compression by default: + ifd[COMPRESSION] = COMPRESSION_INFO_REV.get(compression, 1) + + if im.mode == "YCbCr": + for tag, value in { + YCBCRSUBSAMPLING: (1, 1), + REFERENCEBLACKWHITE: (0, 255, 128, 255, 128, 255), + }.items(): + ifd.setdefault(tag, value) + + if libtiff: + if "quality" in encoderinfo: + quality = encoderinfo["quality"] + if not isinstance(quality, int) or quality < 0 or quality > 100: + raise ValueError("Invalid quality setting") + if compression != "jpeg": + raise ValueError( + "quality setting only supported for 'jpeg' compression" + ) + ifd[JPEGQUALITY] = quality + + logger.debug("Saving using libtiff encoder") + logger.debug("Items: %s" % sorted(ifd.items())) + _fp = 0 + if hasattr(fp, "fileno"): + try: + fp.seek(0) + _fp = os.dup(fp.fileno()) + except io.UnsupportedOperation: + pass + + # optional types for non core tags + types = {} + # SAMPLEFORMAT is determined by the image format and should not be copied + # from legacy_ifd. + # STRIPOFFSETS and STRIPBYTECOUNTS are added by the library + # based on the data in the strip. + # The other tags expect arrays with a certain length (fixed or depending on + # BITSPERSAMPLE, etc), passing arrays with a different length will result in + # segfaults. Block these tags until we add extra validation. + # SUBIFD may also cause a segfault. + blocklist = [ + REFERENCEBLACKWHITE, + SAMPLEFORMAT, + STRIPBYTECOUNTS, + STRIPOFFSETS, + TRANSFERFUNCTION, + SUBIFD, + ] + + atts = {} + # bits per sample is a single short in the tiff directory, not a list. + atts[BITSPERSAMPLE] = bits[0] + # Merge the ones that we have with (optional) more bits from + # the original file, e.g x,y resolution so that we can + # save(load('')) == original file. + legacy_ifd = {} + if hasattr(im, "tag"): + legacy_ifd = im.tag.to_v2() + for tag, value in itertools.chain( + ifd.items(), getattr(im, "tag_v2", {}).items(), legacy_ifd.items() + ): + # Libtiff can only process certain core items without adding + # them to the custom dictionary. + # Custom items are supported for int, float, unicode, string and byte + # values. Other types and tuples require a tagtype. + if tag not in TiffTags.LIBTIFF_CORE: + if not Image.core.libtiff_support_custom_tags: + continue + + if tag in ifd.tagtype: + types[tag] = ifd.tagtype[tag] + elif not (isinstance(value, (int, float, str, bytes))): + continue + else: + type = TiffTags.lookup(tag).type + if type: + types[tag] = type + if tag not in atts and tag not in blocklist: + if isinstance(value, str): + atts[tag] = value.encode("ascii", "replace") + b"\0" + elif isinstance(value, IFDRational): + atts[tag] = float(value) + else: + atts[tag] = value + + logger.debug("Converted items: %s" % sorted(atts.items())) + + # libtiff always expects the bytes in native order. + # we're storing image byte order. So, if the rawmode + # contains I;16, we need to convert from native to image + # byte order. + if im.mode in ("I;16B", "I;16"): + rawmode = "I;16N" + + # Pass tags as sorted list so that the tags are set in a fixed order. + # This is required by libtiff for some tags. For example, the JPEGQUALITY + # pseudo tag requires that the COMPRESS tag was already set. + tags = list(atts.items()) + tags.sort() + a = (rawmode, compression, _fp, filename, tags, types) + e = Image._getencoder(im.mode, "libtiff", a, encoderconfig) + e.setimage(im.im, (0, 0) + im.size) + while True: + # undone, change to self.decodermaxblock: + l, s, d = e.encode(16 * 1024) + if not _fp: + fp.write(d) + if s: + break + if s < 0: + raise OSError(f"encoder error {s} when writing image file") + + else: + offset = ifd.save(fp) + + ImageFile._save( + im, fp, [("raw", (0, 0) + im.size, offset, (rawmode, stride, 1))] + ) + + # -- helper for multi-page save -- + if "_debug_multipage" in encoderinfo: + # just to access o32 and o16 (using correct byte order) + im._debug_multipage = ifd + + +class AppendingTiffWriter: + fieldSizes = [ + 0, # None + 1, # byte + 1, # ascii + 2, # short + 4, # long + 8, # rational + 1, # sbyte + 1, # undefined + 2, # sshort + 4, # slong + 8, # srational + 4, # float + 8, # double + ] + + # StripOffsets = 273 + # FreeOffsets = 288 + # TileOffsets = 324 + # JPEGQTables = 519 + # JPEGDCTables = 520 + # JPEGACTables = 521 + Tags = {273, 288, 324, 519, 520, 521} + + def __init__(self, fn, new=False): + if hasattr(fn, "read"): + self.f = fn + self.close_fp = False + else: + self.name = fn + self.close_fp = True + try: + self.f = open(fn, "w+b" if new else "r+b") + except OSError: + self.f = open(fn, "w+b") + self.beginning = self.f.tell() + self.setup() + + def setup(self): + # Reset everything. + self.f.seek(self.beginning, os.SEEK_SET) + + self.whereToWriteNewIFDOffset = None + self.offsetOfNewPage = 0 + + self.IIMM = IIMM = self.f.read(4) + if not IIMM: + # empty file - first page + self.isFirst = True + return + + self.isFirst = False + if IIMM == b"II\x2a\x00": + self.setEndian("<") + elif IIMM == b"MM\x00\x2a": + self.setEndian(">") + else: + raise RuntimeError("Invalid TIFF file header") + + self.skipIFDs() + self.goToEnd() + + def finalize(self): + if self.isFirst: + return + + # fix offsets + self.f.seek(self.offsetOfNewPage) + + IIMM = self.f.read(4) + if not IIMM: + # raise RuntimeError("nothing written into new page") + # Make it easy to finish a frame without committing to a new one. + return + + if IIMM != self.IIMM: + raise RuntimeError("IIMM of new page doesn't match IIMM of first page") + + IFDoffset = self.readLong() + IFDoffset += self.offsetOfNewPage + self.f.seek(self.whereToWriteNewIFDOffset) + self.writeLong(IFDoffset) + self.f.seek(IFDoffset) + self.fixIFD() + + def newFrame(self): + # Call this to finish a frame. + self.finalize() + self.setup() + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + if self.close_fp: + self.close() + return False + + def tell(self): + return self.f.tell() - self.offsetOfNewPage + + def seek(self, offset, whence=io.SEEK_SET): + if whence == os.SEEK_SET: + offset += self.offsetOfNewPage + + self.f.seek(offset, whence) + return self.tell() + + def goToEnd(self): + self.f.seek(0, os.SEEK_END) + pos = self.f.tell() + + # pad to 16 byte boundary + padBytes = 16 - pos % 16 + if 0 < padBytes < 16: + self.f.write(bytes(padBytes)) + self.offsetOfNewPage = self.f.tell() + + def setEndian(self, endian): + self.endian = endian + self.longFmt = self.endian + "L" + self.shortFmt = self.endian + "H" + self.tagFormat = self.endian + "HHL" + + def skipIFDs(self): + while True: + IFDoffset = self.readLong() + if IFDoffset == 0: + self.whereToWriteNewIFDOffset = self.f.tell() - 4 + break + + self.f.seek(IFDoffset) + numTags = self.readShort() + self.f.seek(numTags * 12, os.SEEK_CUR) + + def write(self, data): + return self.f.write(data) + + def readShort(self): + (value,) = struct.unpack(self.shortFmt, self.f.read(2)) + return value + + def readLong(self): + (value,) = struct.unpack(self.longFmt, self.f.read(4)) + return value + + def rewriteLastShortToLong(self, value): + self.f.seek(-2, os.SEEK_CUR) + bytesWritten = self.f.write(struct.pack(self.longFmt, value)) + if bytesWritten is not None and bytesWritten != 4: + raise RuntimeError(f"wrote only {bytesWritten} bytes but wanted 4") + + def rewriteLastShort(self, value): + self.f.seek(-2, os.SEEK_CUR) + bytesWritten = self.f.write(struct.pack(self.shortFmt, value)) + if bytesWritten is not None and bytesWritten != 2: + raise RuntimeError(f"wrote only {bytesWritten} bytes but wanted 2") + + def rewriteLastLong(self, value): + self.f.seek(-4, os.SEEK_CUR) + bytesWritten = self.f.write(struct.pack(self.longFmt, value)) + if bytesWritten is not None and bytesWritten != 4: + raise RuntimeError(f"wrote only {bytesWritten} bytes but wanted 4") + + def writeShort(self, value): + bytesWritten = self.f.write(struct.pack(self.shortFmt, value)) + if bytesWritten is not None and bytesWritten != 2: + raise RuntimeError(f"wrote only {bytesWritten} bytes but wanted 2") + + def writeLong(self, value): + bytesWritten = self.f.write(struct.pack(self.longFmt, value)) + if bytesWritten is not None and bytesWritten != 4: + raise RuntimeError(f"wrote only {bytesWritten} bytes but wanted 4") + + def close(self): + self.finalize() + self.f.close() + + def fixIFD(self): + numTags = self.readShort() + + for i in range(numTags): + tag, fieldType, count = struct.unpack(self.tagFormat, self.f.read(8)) + + fieldSize = self.fieldSizes[fieldType] + totalSize = fieldSize * count + isLocal = totalSize <= 4 + if not isLocal: + offset = self.readLong() + offset += self.offsetOfNewPage + self.rewriteLastLong(offset) + + if tag in self.Tags: + curPos = self.f.tell() + + if isLocal: + self.fixOffsets( + count, isShort=(fieldSize == 2), isLong=(fieldSize == 4) + ) + self.f.seek(curPos + 4) + else: + self.f.seek(offset) + self.fixOffsets( + count, isShort=(fieldSize == 2), isLong=(fieldSize == 4) + ) + self.f.seek(curPos) + + offset = curPos = None + + elif isLocal: + # skip the locally stored value that is not an offset + self.f.seek(4, os.SEEK_CUR) + + def fixOffsets(self, count, isShort=False, isLong=False): + if not isShort and not isLong: + raise RuntimeError("offset is neither short nor long") + + for i in range(count): + offset = self.readShort() if isShort else self.readLong() + offset += self.offsetOfNewPage + if isShort and offset >= 65536: + # offset is now too large - we must convert shorts to longs + if count != 1: + raise RuntimeError("not implemented") # XXX TODO + + # simple case - the offset is just one and therefore it is + # local (not referenced with another offset) + self.rewriteLastShortToLong(offset) + self.f.seek(-10, os.SEEK_CUR) + self.writeShort(TiffTags.LONG) # rewrite the type to LONG + self.f.seek(8, os.SEEK_CUR) + elif isShort: + self.rewriteLastShort(offset) + else: + self.rewriteLastLong(offset) + + +def _save_all(im, fp, filename): + encoderinfo = im.encoderinfo.copy() + encoderconfig = im.encoderconfig + append_images = list(encoderinfo.get("append_images", [])) + if not hasattr(im, "n_frames") and not append_images: + return _save(im, fp, filename) + + cur_idx = im.tell() + try: + with AppendingTiffWriter(fp) as tf: + for ims in [im] + append_images: + ims.encoderinfo = encoderinfo + ims.encoderconfig = encoderconfig + if not hasattr(ims, "n_frames"): + nfr = 1 + else: + nfr = ims.n_frames + + for idx in range(nfr): + ims.seek(idx) + ims.load() + _save(ims, tf, filename) + tf.newFrame() + finally: + im.seek(cur_idx) + + +# +# -------------------------------------------------------------------- +# Register + +Image.register_open(TiffImageFile.format, TiffImageFile, _accept) +Image.register_save(TiffImageFile.format, _save) +Image.register_save_all(TiffImageFile.format, _save_all) + +Image.register_extensions(TiffImageFile.format, [".tif", ".tiff"]) + +Image.register_mime(TiffImageFile.format, "image/tiff") diff --git a/.venv/lib/python3.9/site-packages/PIL/TiffTags.py b/.venv/lib/python3.9/site-packages/PIL/TiffTags.py new file mode 100644 index 00000000..88856aa9 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/TiffTags.py @@ -0,0 +1,521 @@ +# +# The Python Imaging Library. +# $Id$ +# +# TIFF tags +# +# This module provides clear-text names for various well-known +# TIFF tags. the TIFF codec works just fine without it. +# +# Copyright (c) Secret Labs AB 1999. +# +# See the README file for information on usage and redistribution. +# + +## +# This module provides constants and clear-text names for various +# well-known TIFF tags. +## + +from collections import namedtuple + + +class TagInfo(namedtuple("_TagInfo", "value name type length enum")): + __slots__ = [] + + def __new__(cls, value=None, name="unknown", type=None, length=None, enum=None): + return super().__new__(cls, value, name, type, length, enum or {}) + + def cvt_enum(self, value): + # Using get will call hash(value), which can be expensive + # for some types (e.g. Fraction). Since self.enum is rarely + # used, it's usually better to test it first. + return self.enum.get(value, value) if self.enum else value + + +def lookup(tag, group=None): + """ + :param tag: Integer tag number + :returns: Taginfo namedtuple, From the TAGS_V2 info if possible, + otherwise just populating the value and name from TAGS. + If the tag is not recognized, "unknown" is returned for the name + + """ + + if group is not None: + info = TAGS_V2_GROUPS[group].get(tag) if group in TAGS_V2_GROUPS else None + else: + info = TAGS_V2.get(tag) + return info or TagInfo(tag, TAGS.get(tag, "unknown")) + + +## +# Map tag numbers to tag info. +# +# id: (Name, Type, Length, enum_values) +# +# The length here differs from the length in the tiff spec. For +# numbers, the tiff spec is for the number of fields returned. We +# agree here. For string-like types, the tiff spec uses the length of +# field in bytes. In Pillow, we are using the number of expected +# fields, in general 1 for string-like types. + + +BYTE = 1 +ASCII = 2 +SHORT = 3 +LONG = 4 +RATIONAL = 5 +SIGNED_BYTE = 6 +UNDEFINED = 7 +SIGNED_SHORT = 8 +SIGNED_LONG = 9 +SIGNED_RATIONAL = 10 +FLOAT = 11 +DOUBLE = 12 +IFD = 13 + +TAGS_V2 = { + 254: ("NewSubfileType", LONG, 1), + 255: ("SubfileType", SHORT, 1), + 256: ("ImageWidth", LONG, 1), + 257: ("ImageLength", LONG, 1), + 258: ("BitsPerSample", SHORT, 0), + 259: ( + "Compression", + SHORT, + 1, + { + "Uncompressed": 1, + "CCITT 1d": 2, + "Group 3 Fax": 3, + "Group 4 Fax": 4, + "LZW": 5, + "JPEG": 6, + "PackBits": 32773, + }, + ), + 262: ( + "PhotometricInterpretation", + SHORT, + 1, + { + "WhiteIsZero": 0, + "BlackIsZero": 1, + "RGB": 2, + "RGB Palette": 3, + "Transparency Mask": 4, + "CMYK": 5, + "YCbCr": 6, + "CieLAB": 8, + "CFA": 32803, # TIFF/EP, Adobe DNG + "LinearRaw": 32892, # Adobe DNG + }, + ), + 263: ("Threshholding", SHORT, 1), + 264: ("CellWidth", SHORT, 1), + 265: ("CellLength", SHORT, 1), + 266: ("FillOrder", SHORT, 1), + 269: ("DocumentName", ASCII, 1), + 270: ("ImageDescription", ASCII, 1), + 271: ("Make", ASCII, 1), + 272: ("Model", ASCII, 1), + 273: ("StripOffsets", LONG, 0), + 274: ("Orientation", SHORT, 1), + 277: ("SamplesPerPixel", SHORT, 1), + 278: ("RowsPerStrip", LONG, 1), + 279: ("StripByteCounts", LONG, 0), + 280: ("MinSampleValue", SHORT, 0), + 281: ("MaxSampleValue", SHORT, 0), + 282: ("XResolution", RATIONAL, 1), + 283: ("YResolution", RATIONAL, 1), + 284: ("PlanarConfiguration", SHORT, 1, {"Contiguous": 1, "Separate": 2}), + 285: ("PageName", ASCII, 1), + 286: ("XPosition", RATIONAL, 1), + 287: ("YPosition", RATIONAL, 1), + 288: ("FreeOffsets", LONG, 1), + 289: ("FreeByteCounts", LONG, 1), + 290: ("GrayResponseUnit", SHORT, 1), + 291: ("GrayResponseCurve", SHORT, 0), + 292: ("T4Options", LONG, 1), + 293: ("T6Options", LONG, 1), + 296: ("ResolutionUnit", SHORT, 1, {"none": 1, "inch": 2, "cm": 3}), + 297: ("PageNumber", SHORT, 2), + 301: ("TransferFunction", SHORT, 0), + 305: ("Software", ASCII, 1), + 306: ("DateTime", ASCII, 1), + 315: ("Artist", ASCII, 1), + 316: ("HostComputer", ASCII, 1), + 317: ("Predictor", SHORT, 1, {"none": 1, "Horizontal Differencing": 2}), + 318: ("WhitePoint", RATIONAL, 2), + 319: ("PrimaryChromaticities", RATIONAL, 6), + 320: ("ColorMap", SHORT, 0), + 321: ("HalftoneHints", SHORT, 2), + 322: ("TileWidth", LONG, 1), + 323: ("TileLength", LONG, 1), + 324: ("TileOffsets", LONG, 0), + 325: ("TileByteCounts", LONG, 0), + 332: ("InkSet", SHORT, 1), + 333: ("InkNames", ASCII, 1), + 334: ("NumberOfInks", SHORT, 1), + 336: ("DotRange", SHORT, 0), + 337: ("TargetPrinter", ASCII, 1), + 338: ("ExtraSamples", SHORT, 0), + 339: ("SampleFormat", SHORT, 0), + 340: ("SMinSampleValue", DOUBLE, 0), + 341: ("SMaxSampleValue", DOUBLE, 0), + 342: ("TransferRange", SHORT, 6), + 347: ("JPEGTables", UNDEFINED, 1), + # obsolete JPEG tags + 512: ("JPEGProc", SHORT, 1), + 513: ("JPEGInterchangeFormat", LONG, 1), + 514: ("JPEGInterchangeFormatLength", LONG, 1), + 515: ("JPEGRestartInterval", SHORT, 1), + 517: ("JPEGLosslessPredictors", SHORT, 0), + 518: ("JPEGPointTransforms", SHORT, 0), + 519: ("JPEGQTables", LONG, 0), + 520: ("JPEGDCTables", LONG, 0), + 521: ("JPEGACTables", LONG, 0), + 529: ("YCbCrCoefficients", RATIONAL, 3), + 530: ("YCbCrSubSampling", SHORT, 2), + 531: ("YCbCrPositioning", SHORT, 1), + 532: ("ReferenceBlackWhite", RATIONAL, 6), + 700: ("XMP", BYTE, 0), + 33432: ("Copyright", ASCII, 1), + 33723: ("IptcNaaInfo", UNDEFINED, 1), + 34377: ("PhotoshopInfo", BYTE, 0), + # FIXME add more tags here + 34665: ("ExifIFD", LONG, 1), + 34675: ("ICCProfile", UNDEFINED, 1), + 34853: ("GPSInfoIFD", LONG, 1), + 36864: ("ExifVersion", UNDEFINED, 1), + 40965: ("InteroperabilityIFD", LONG, 1), + 41730: ("CFAPattern", UNDEFINED, 1), + # MPInfo + 45056: ("MPFVersion", UNDEFINED, 1), + 45057: ("NumberOfImages", LONG, 1), + 45058: ("MPEntry", UNDEFINED, 1), + 45059: ("ImageUIDList", UNDEFINED, 0), # UNDONE, check + 45060: ("TotalFrames", LONG, 1), + 45313: ("MPIndividualNum", LONG, 1), + 45569: ("PanOrientation", LONG, 1), + 45570: ("PanOverlap_H", RATIONAL, 1), + 45571: ("PanOverlap_V", RATIONAL, 1), + 45572: ("BaseViewpointNum", LONG, 1), + 45573: ("ConvergenceAngle", SIGNED_RATIONAL, 1), + 45574: ("BaselineLength", RATIONAL, 1), + 45575: ("VerticalDivergence", SIGNED_RATIONAL, 1), + 45576: ("AxisDistance_X", SIGNED_RATIONAL, 1), + 45577: ("AxisDistance_Y", SIGNED_RATIONAL, 1), + 45578: ("AxisDistance_Z", SIGNED_RATIONAL, 1), + 45579: ("YawAngle", SIGNED_RATIONAL, 1), + 45580: ("PitchAngle", SIGNED_RATIONAL, 1), + 45581: ("RollAngle", SIGNED_RATIONAL, 1), + 40960: ("FlashPixVersion", UNDEFINED, 1), + 50741: ("MakerNoteSafety", SHORT, 1, {"Unsafe": 0, "Safe": 1}), + 50780: ("BestQualityScale", RATIONAL, 1), + 50838: ("ImageJMetaDataByteCounts", LONG, 0), # Can be more than one + 50839: ("ImageJMetaData", UNDEFINED, 1), # see Issue #2006 +} +TAGS_V2_GROUPS = { + # ExifIFD + 34665: { + 36864: ("ExifVersion", UNDEFINED, 1), + 40960: ("FlashPixVersion", UNDEFINED, 1), + 40965: ("InteroperabilityIFD", LONG, 1), + 41730: ("CFAPattern", UNDEFINED, 1), + }, + # GPSInfoIFD + 34853: {}, + # InteroperabilityIFD + 40965: {1: ("InteropIndex", ASCII, 1), 2: ("InteropVersion", UNDEFINED, 1)}, +} + +# Legacy Tags structure +# these tags aren't included above, but were in the previous versions +TAGS = { + 347: "JPEGTables", + 700: "XMP", + # Additional Exif Info + 32932: "Wang Annotation", + 33434: "ExposureTime", + 33437: "FNumber", + 33445: "MD FileTag", + 33446: "MD ScalePixel", + 33447: "MD ColorTable", + 33448: "MD LabName", + 33449: "MD SampleInfo", + 33450: "MD PrepDate", + 33451: "MD PrepTime", + 33452: "MD FileUnits", + 33550: "ModelPixelScaleTag", + 33723: "IptcNaaInfo", + 33918: "INGR Packet Data Tag", + 33919: "INGR Flag Registers", + 33920: "IrasB Transformation Matrix", + 33922: "ModelTiepointTag", + 34264: "ModelTransformationTag", + 34377: "PhotoshopInfo", + 34735: "GeoKeyDirectoryTag", + 34736: "GeoDoubleParamsTag", + 34737: "GeoAsciiParamsTag", + 34850: "ExposureProgram", + 34852: "SpectralSensitivity", + 34855: "ISOSpeedRatings", + 34856: "OECF", + 34864: "SensitivityType", + 34865: "StandardOutputSensitivity", + 34866: "RecommendedExposureIndex", + 34867: "ISOSpeed", + 34868: "ISOSpeedLatitudeyyy", + 34869: "ISOSpeedLatitudezzz", + 34908: "HylaFAX FaxRecvParams", + 34909: "HylaFAX FaxSubAddress", + 34910: "HylaFAX FaxRecvTime", + 36864: "ExifVersion", + 36867: "DateTimeOriginal", + 36868: "DateTImeDigitized", + 37121: "ComponentsConfiguration", + 37122: "CompressedBitsPerPixel", + 37724: "ImageSourceData", + 37377: "ShutterSpeedValue", + 37378: "ApertureValue", + 37379: "BrightnessValue", + 37380: "ExposureBiasValue", + 37381: "MaxApertureValue", + 37382: "SubjectDistance", + 37383: "MeteringMode", + 37384: "LightSource", + 37385: "Flash", + 37386: "FocalLength", + 37396: "SubjectArea", + 37500: "MakerNote", + 37510: "UserComment", + 37520: "SubSec", + 37521: "SubSecTimeOriginal", + 37522: "SubsecTimeDigitized", + 40960: "FlashPixVersion", + 40961: "ColorSpace", + 40962: "PixelXDimension", + 40963: "PixelYDimension", + 40964: "RelatedSoundFile", + 40965: "InteroperabilityIFD", + 41483: "FlashEnergy", + 41484: "SpatialFrequencyResponse", + 41486: "FocalPlaneXResolution", + 41487: "FocalPlaneYResolution", + 41488: "FocalPlaneResolutionUnit", + 41492: "SubjectLocation", + 41493: "ExposureIndex", + 41495: "SensingMethod", + 41728: "FileSource", + 41729: "SceneType", + 41730: "CFAPattern", + 41985: "CustomRendered", + 41986: "ExposureMode", + 41987: "WhiteBalance", + 41988: "DigitalZoomRatio", + 41989: "FocalLengthIn35mmFilm", + 41990: "SceneCaptureType", + 41991: "GainControl", + 41992: "Contrast", + 41993: "Saturation", + 41994: "Sharpness", + 41995: "DeviceSettingDescription", + 41996: "SubjectDistanceRange", + 42016: "ImageUniqueID", + 42032: "CameraOwnerName", + 42033: "BodySerialNumber", + 42034: "LensSpecification", + 42035: "LensMake", + 42036: "LensModel", + 42037: "LensSerialNumber", + 42112: "GDAL_METADATA", + 42113: "GDAL_NODATA", + 42240: "Gamma", + 50215: "Oce Scanjob Description", + 50216: "Oce Application Selector", + 50217: "Oce Identification Number", + 50218: "Oce ImageLogic Characteristics", + # Adobe DNG + 50706: "DNGVersion", + 50707: "DNGBackwardVersion", + 50708: "UniqueCameraModel", + 50709: "LocalizedCameraModel", + 50710: "CFAPlaneColor", + 50711: "CFALayout", + 50712: "LinearizationTable", + 50713: "BlackLevelRepeatDim", + 50714: "BlackLevel", + 50715: "BlackLevelDeltaH", + 50716: "BlackLevelDeltaV", + 50717: "WhiteLevel", + 50718: "DefaultScale", + 50719: "DefaultCropOrigin", + 50720: "DefaultCropSize", + 50721: "ColorMatrix1", + 50722: "ColorMatrix2", + 50723: "CameraCalibration1", + 50724: "CameraCalibration2", + 50725: "ReductionMatrix1", + 50726: "ReductionMatrix2", + 50727: "AnalogBalance", + 50728: "AsShotNeutral", + 50729: "AsShotWhiteXY", + 50730: "BaselineExposure", + 50731: "BaselineNoise", + 50732: "BaselineSharpness", + 50733: "BayerGreenSplit", + 50734: "LinearResponseLimit", + 50735: "CameraSerialNumber", + 50736: "LensInfo", + 50737: "ChromaBlurRadius", + 50738: "AntiAliasStrength", + 50740: "DNGPrivateData", + 50778: "CalibrationIlluminant1", + 50779: "CalibrationIlluminant2", + 50784: "Alias Layer Metadata", +} + + +def _populate(): + for k, v in TAGS_V2.items(): + # Populate legacy structure. + TAGS[k] = v[0] + if len(v) == 4: + for sk, sv in v[3].items(): + TAGS[(k, sv)] = sk + + TAGS_V2[k] = TagInfo(k, *v) + + for group, tags in TAGS_V2_GROUPS.items(): + for k, v in tags.items(): + tags[k] = TagInfo(k, *v) + + +_populate() +## +# Map type numbers to type names -- defined in ImageFileDirectory. + +TYPES = {} + +# was: +# TYPES = { +# 1: "byte", +# 2: "ascii", +# 3: "short", +# 4: "long", +# 5: "rational", +# 6: "signed byte", +# 7: "undefined", +# 8: "signed short", +# 9: "signed long", +# 10: "signed rational", +# 11: "float", +# 12: "double", +# } + +# +# These tags are handled by default in libtiff, without +# adding to the custom dictionary. From tif_dir.c, searching for +# case TIFFTAG in the _TIFFVSetField function: +# Line: item. +# 148: case TIFFTAG_SUBFILETYPE: +# 151: case TIFFTAG_IMAGEWIDTH: +# 154: case TIFFTAG_IMAGELENGTH: +# 157: case TIFFTAG_BITSPERSAMPLE: +# 181: case TIFFTAG_COMPRESSION: +# 202: case TIFFTAG_PHOTOMETRIC: +# 205: case TIFFTAG_THRESHHOLDING: +# 208: case TIFFTAG_FILLORDER: +# 214: case TIFFTAG_ORIENTATION: +# 221: case TIFFTAG_SAMPLESPERPIXEL: +# 228: case TIFFTAG_ROWSPERSTRIP: +# 238: case TIFFTAG_MINSAMPLEVALUE: +# 241: case TIFFTAG_MAXSAMPLEVALUE: +# 244: case TIFFTAG_SMINSAMPLEVALUE: +# 247: case TIFFTAG_SMAXSAMPLEVALUE: +# 250: case TIFFTAG_XRESOLUTION: +# 256: case TIFFTAG_YRESOLUTION: +# 262: case TIFFTAG_PLANARCONFIG: +# 268: case TIFFTAG_XPOSITION: +# 271: case TIFFTAG_YPOSITION: +# 274: case TIFFTAG_RESOLUTIONUNIT: +# 280: case TIFFTAG_PAGENUMBER: +# 284: case TIFFTAG_HALFTONEHINTS: +# 288: case TIFFTAG_COLORMAP: +# 294: case TIFFTAG_EXTRASAMPLES: +# 298: case TIFFTAG_MATTEING: +# 305: case TIFFTAG_TILEWIDTH: +# 316: case TIFFTAG_TILELENGTH: +# 327: case TIFFTAG_TILEDEPTH: +# 333: case TIFFTAG_DATATYPE: +# 344: case TIFFTAG_SAMPLEFORMAT: +# 361: case TIFFTAG_IMAGEDEPTH: +# 364: case TIFFTAG_SUBIFD: +# 376: case TIFFTAG_YCBCRPOSITIONING: +# 379: case TIFFTAG_YCBCRSUBSAMPLING: +# 383: case TIFFTAG_TRANSFERFUNCTION: +# 389: case TIFFTAG_REFERENCEBLACKWHITE: +# 393: case TIFFTAG_INKNAMES: + +# Following pseudo-tags are also handled by default in libtiff: +# TIFFTAG_JPEGQUALITY 65537 + +# some of these are not in our TAGS_V2 dict and were included from tiff.h + +# This list also exists in encode.c +LIBTIFF_CORE = { + 255, + 256, + 257, + 258, + 259, + 262, + 263, + 266, + 274, + 277, + 278, + 280, + 281, + 340, + 341, + 282, + 283, + 284, + 286, + 287, + 296, + 297, + 321, + 320, + 338, + 32995, + 322, + 323, + 32998, + 32996, + 339, + 32997, + 330, + 531, + 530, + 301, + 532, + 333, + # as above + 269, # this has been in our tests forever, and works + 65537, +} + +LIBTIFF_CORE.remove(255) # We don't have support for subfiletypes +LIBTIFF_CORE.remove(322) # We don't have support for writing tiled images with libtiff +LIBTIFF_CORE.remove(323) # Tiled images +LIBTIFF_CORE.remove(333) # Ink Names either + +# Note to advanced users: There may be combinations of these +# parameters and values that when added properly, will work and +# produce valid tiff images that may work in your application. +# It is safe to add and remove tags from this set from Pillow's point +# of view so long as you test against libtiff. diff --git a/.venv/lib/python3.9/site-packages/PIL/WalImageFile.py b/.venv/lib/python3.9/site-packages/PIL/WalImageFile.py new file mode 100644 index 00000000..1354ad32 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/WalImageFile.py @@ -0,0 +1,127 @@ +# +# The Python Imaging Library. +# $Id$ +# +# WAL file handling +# +# History: +# 2003-04-23 fl created +# +# Copyright (c) 2003 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +""" +This reader is based on the specification available from: +https://www.flipcode.com/archives/Quake_2_BSP_File_Format.shtml +and has been tested with a few sample files found using google. + +.. note:: + This format cannot be automatically recognized, so the reader + is not registered for use with :py:func:`PIL.Image.open()`. + To open a WAL file, use the :py:func:`PIL.WalImageFile.open()` function instead. +""" + +from . import Image, ImageFile +from ._binary import i32le as i32 + + +class WalImageFile(ImageFile.ImageFile): + + format = "WAL" + format_description = "Quake2 Texture" + + def _open(self): + self.mode = "P" + + # read header fields + header = self.fp.read(32 + 24 + 32 + 12) + self._size = i32(header, 32), i32(header, 36) + Image._decompression_bomb_check(self.size) + + # load pixel data + offset = i32(header, 40) + self.fp.seek(offset) + + # strings are null-terminated + self.info["name"] = header[:32].split(b"\0", 1)[0] + next_name = header[56 : 56 + 32].split(b"\0", 1)[0] + if next_name: + self.info["next_name"] = next_name + + def load(self): + if self.im: + # Already loaded + return + + self.im = Image.core.new(self.mode, self.size) + self.frombytes(self.fp.read(self.size[0] * self.size[1])) + self.putpalette(quake2palette) + Image.Image.load(self) + + +def open(filename): + """ + Load texture from a Quake2 WAL texture file. + + By default, a Quake2 standard palette is attached to the texture. + To override the palette, use the :py:func:`PIL.Image.Image.putpalette()` method. + + :param filename: WAL file name, or an opened file handle. + :returns: An image instance. + """ + return WalImageFile(filename) + + +quake2palette = ( + # default palette taken from piffo 0.93 by Hans Häggström + b"\x01\x01\x01\x0b\x0b\x0b\x12\x12\x12\x17\x17\x17\x1b\x1b\x1b\x1e" + b"\x1e\x1e\x22\x22\x22\x26\x26\x26\x29\x29\x29\x2c\x2c\x2c\x2f\x2f" + b"\x2f\x32\x32\x32\x35\x35\x35\x37\x37\x37\x3a\x3a\x3a\x3c\x3c\x3c" + b"\x24\x1e\x13\x22\x1c\x12\x20\x1b\x12\x1f\x1a\x10\x1d\x19\x10\x1b" + b"\x17\x0f\x1a\x16\x0f\x18\x14\x0d\x17\x13\x0d\x16\x12\x0d\x14\x10" + b"\x0b\x13\x0f\x0b\x10\x0d\x0a\x0f\x0b\x0a\x0d\x0b\x07\x0b\x0a\x07" + b"\x23\x23\x26\x22\x22\x25\x22\x20\x23\x21\x1f\x22\x20\x1e\x20\x1f" + b"\x1d\x1e\x1d\x1b\x1c\x1b\x1a\x1a\x1a\x19\x19\x18\x17\x17\x17\x16" + b"\x16\x14\x14\x14\x13\x13\x13\x10\x10\x10\x0f\x0f\x0f\x0d\x0d\x0d" + b"\x2d\x28\x20\x29\x24\x1c\x27\x22\x1a\x25\x1f\x17\x38\x2e\x1e\x31" + b"\x29\x1a\x2c\x25\x17\x26\x20\x14\x3c\x30\x14\x37\x2c\x13\x33\x28" + b"\x12\x2d\x24\x10\x28\x1f\x0f\x22\x1a\x0b\x1b\x14\x0a\x13\x0f\x07" + b"\x31\x1a\x16\x30\x17\x13\x2e\x16\x10\x2c\x14\x0d\x2a\x12\x0b\x27" + b"\x0f\x0a\x25\x0f\x07\x21\x0d\x01\x1e\x0b\x01\x1c\x0b\x01\x1a\x0b" + b"\x01\x18\x0a\x01\x16\x0a\x01\x13\x0a\x01\x10\x07\x01\x0d\x07\x01" + b"\x29\x23\x1e\x27\x21\x1c\x26\x20\x1b\x25\x1f\x1a\x23\x1d\x19\x21" + b"\x1c\x18\x20\x1b\x17\x1e\x19\x16\x1c\x18\x14\x1b\x17\x13\x19\x14" + b"\x10\x17\x13\x0f\x14\x10\x0d\x12\x0f\x0b\x0f\x0b\x0a\x0b\x0a\x07" + b"\x26\x1a\x0f\x23\x19\x0f\x20\x17\x0f\x1c\x16\x0f\x19\x13\x0d\x14" + b"\x10\x0b\x10\x0d\x0a\x0b\x0a\x07\x33\x22\x1f\x35\x29\x26\x37\x2f" + b"\x2d\x39\x35\x34\x37\x39\x3a\x33\x37\x39\x30\x34\x36\x2b\x31\x34" + b"\x27\x2e\x31\x22\x2b\x2f\x1d\x28\x2c\x17\x25\x2a\x0f\x20\x26\x0d" + b"\x1e\x25\x0b\x1c\x22\x0a\x1b\x20\x07\x19\x1e\x07\x17\x1b\x07\x14" + b"\x18\x01\x12\x16\x01\x0f\x12\x01\x0b\x0d\x01\x07\x0a\x01\x01\x01" + b"\x2c\x21\x21\x2a\x1f\x1f\x29\x1d\x1d\x27\x1c\x1c\x26\x1a\x1a\x24" + b"\x18\x18\x22\x17\x17\x21\x16\x16\x1e\x13\x13\x1b\x12\x12\x18\x10" + b"\x10\x16\x0d\x0d\x12\x0b\x0b\x0d\x0a\x0a\x0a\x07\x07\x01\x01\x01" + b"\x2e\x30\x29\x2d\x2e\x27\x2b\x2c\x26\x2a\x2a\x24\x28\x29\x23\x27" + b"\x27\x21\x26\x26\x1f\x24\x24\x1d\x22\x22\x1c\x1f\x1f\x1a\x1c\x1c" + b"\x18\x19\x19\x16\x17\x17\x13\x13\x13\x10\x0f\x0f\x0d\x0b\x0b\x0a" + b"\x30\x1e\x1b\x2d\x1c\x19\x2c\x1a\x17\x2a\x19\x14\x28\x17\x13\x26" + b"\x16\x10\x24\x13\x0f\x21\x12\x0d\x1f\x10\x0b\x1c\x0f\x0a\x19\x0d" + b"\x0a\x16\x0b\x07\x12\x0a\x07\x0f\x07\x01\x0a\x01\x01\x01\x01\x01" + b"\x28\x29\x38\x26\x27\x36\x25\x26\x34\x24\x24\x31\x22\x22\x2f\x20" + b"\x21\x2d\x1e\x1f\x2a\x1d\x1d\x27\x1b\x1b\x25\x19\x19\x21\x17\x17" + b"\x1e\x14\x14\x1b\x13\x12\x17\x10\x0f\x13\x0d\x0b\x0f\x0a\x07\x07" + b"\x2f\x32\x29\x2d\x30\x26\x2b\x2e\x24\x29\x2c\x21\x27\x2a\x1e\x25" + b"\x28\x1c\x23\x26\x1a\x21\x25\x18\x1e\x22\x14\x1b\x1f\x10\x19\x1c" + b"\x0d\x17\x1a\x0a\x13\x17\x07\x10\x13\x01\x0d\x0f\x01\x0a\x0b\x01" + b"\x01\x3f\x01\x13\x3c\x0b\x1b\x39\x10\x20\x35\x14\x23\x31\x17\x23" + b"\x2d\x18\x23\x29\x18\x3f\x3f\x3f\x3f\x3f\x39\x3f\x3f\x31\x3f\x3f" + b"\x2a\x3f\x3f\x20\x3f\x3f\x14\x3f\x3c\x12\x3f\x39\x0f\x3f\x35\x0b" + b"\x3f\x32\x07\x3f\x2d\x01\x3d\x2a\x01\x3b\x26\x01\x39\x21\x01\x37" + b"\x1d\x01\x34\x1a\x01\x32\x16\x01\x2f\x12\x01\x2d\x0f\x01\x2a\x0b" + b"\x01\x27\x07\x01\x23\x01\x01\x1d\x01\x01\x17\x01\x01\x10\x01\x01" + b"\x3d\x01\x01\x19\x19\x3f\x3f\x01\x01\x01\x01\x3f\x16\x16\x13\x10" + b"\x10\x0f\x0d\x0d\x0b\x3c\x2e\x2a\x36\x27\x20\x30\x21\x18\x29\x1b" + b"\x10\x3c\x39\x37\x37\x32\x2f\x31\x2c\x28\x2b\x26\x21\x30\x22\x20" +) diff --git a/.venv/lib/python3.9/site-packages/PIL/WebPImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/WebPImagePlugin.py new file mode 100644 index 00000000..590161f3 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/WebPImagePlugin.py @@ -0,0 +1,351 @@ +from io import BytesIO + +from . import Image, ImageFile + +try: + from . import _webp + + SUPPORTED = True +except ImportError: + SUPPORTED = False + + +_VALID_WEBP_MODES = {"RGBX": True, "RGBA": True, "RGB": True} + +_VALID_WEBP_LEGACY_MODES = {"RGB": True, "RGBA": True} + +_VP8_MODES_BY_IDENTIFIER = { + b"VP8 ": "RGB", + b"VP8X": "RGBA", + b"VP8L": "RGBA", # lossless +} + + +def _accept(prefix): + is_riff_file_format = prefix[:4] == b"RIFF" + is_webp_file = prefix[8:12] == b"WEBP" + is_valid_vp8_mode = prefix[12:16] in _VP8_MODES_BY_IDENTIFIER + + if is_riff_file_format and is_webp_file and is_valid_vp8_mode: + if not SUPPORTED: + return ( + "image file could not be identified because WEBP support not installed" + ) + return True + + +class WebPImageFile(ImageFile.ImageFile): + + format = "WEBP" + format_description = "WebP image" + __loaded = 0 + __logical_frame = 0 + + def _open(self): + if not _webp.HAVE_WEBPANIM: + # Legacy mode + data, width, height, self.mode, icc_profile, exif = _webp.WebPDecode( + self.fp.read() + ) + if icc_profile: + self.info["icc_profile"] = icc_profile + if exif: + self.info["exif"] = exif + self._size = width, height + self.fp = BytesIO(data) + self.tile = [("raw", (0, 0) + self.size, 0, self.mode)] + self.n_frames = 1 + self.is_animated = False + return + + # Use the newer AnimDecoder API to parse the (possibly) animated file, + # and access muxed chunks like ICC/EXIF/XMP. + self._decoder = _webp.WebPAnimDecoder(self.fp.read()) + + # Get info from decoder + width, height, loop_count, bgcolor, frame_count, mode = self._decoder.get_info() + self._size = width, height + self.info["loop"] = loop_count + bg_a, bg_r, bg_g, bg_b = ( + (bgcolor >> 24) & 0xFF, + (bgcolor >> 16) & 0xFF, + (bgcolor >> 8) & 0xFF, + bgcolor & 0xFF, + ) + self.info["background"] = (bg_r, bg_g, bg_b, bg_a) + self.n_frames = frame_count + self.is_animated = self.n_frames > 1 + self.mode = "RGB" if mode == "RGBX" else mode + self.rawmode = mode + self.tile = [] + + # Attempt to read ICC / EXIF / XMP chunks from file + icc_profile = self._decoder.get_chunk("ICCP") + exif = self._decoder.get_chunk("EXIF") + xmp = self._decoder.get_chunk("XMP ") + if icc_profile: + self.info["icc_profile"] = icc_profile + if exif: + self.info["exif"] = exif + if xmp: + self.info["xmp"] = xmp + + # Initialize seek state + self._reset(reset=False) + + def _getexif(self): + if "exif" not in self.info: + return None + return self.getexif()._get_merged_dict() + + def seek(self, frame): + if not self._seek_check(frame): + return + + # Set logical frame to requested position + self.__logical_frame = frame + + def _reset(self, reset=True): + if reset: + self._decoder.reset() + self.__physical_frame = 0 + self.__loaded = -1 + self.__timestamp = 0 + + def _get_next(self): + # Get next frame + ret = self._decoder.get_next() + self.__physical_frame += 1 + + # Check if an error occurred + if ret is None: + self._reset() # Reset just to be safe + self.seek(0) + raise EOFError("failed to decode next frame in WebP file") + + # Compute duration + data, timestamp = ret + duration = timestamp - self.__timestamp + self.__timestamp = timestamp + + # libwebp gives frame end, adjust to start of frame + timestamp -= duration + return data, timestamp, duration + + def _seek(self, frame): + if self.__physical_frame == frame: + return # Nothing to do + if frame < self.__physical_frame: + self._reset() # Rewind to beginning + while self.__physical_frame < frame: + self._get_next() # Advance to the requested frame + + def load(self): + if _webp.HAVE_WEBPANIM: + if self.__loaded != self.__logical_frame: + self._seek(self.__logical_frame) + + # We need to load the image data for this frame + data, timestamp, duration = self._get_next() + self.info["timestamp"] = timestamp + self.info["duration"] = duration + self.__loaded = self.__logical_frame + + # Set tile + if self.fp and self._exclusive_fp: + self.fp.close() + self.fp = BytesIO(data) + self.tile = [("raw", (0, 0) + self.size, 0, self.rawmode)] + + return super().load() + + def tell(self): + if not _webp.HAVE_WEBPANIM: + return super().tell() + + return self.__logical_frame + + +def _save_all(im, fp, filename): + encoderinfo = im.encoderinfo.copy() + append_images = list(encoderinfo.get("append_images", [])) + + # If total frame count is 1, then save using the legacy API, which + # will preserve non-alpha modes + total = 0 + for ims in [im] + append_images: + total += getattr(ims, "n_frames", 1) + if total == 1: + _save(im, fp, filename) + return + + background = (0, 0, 0, 0) + if "background" in encoderinfo: + background = encoderinfo["background"] + elif "background" in im.info: + background = im.info["background"] + if isinstance(background, int): + # GifImagePlugin stores a global color table index in + # info["background"]. So it must be converted to an RGBA value + palette = im.getpalette() + if palette: + r, g, b = palette[background * 3 : (background + 1) * 3] + background = (r, g, b, 0) + + duration = im.encoderinfo.get("duration", im.info.get("duration")) + loop = im.encoderinfo.get("loop", 0) + minimize_size = im.encoderinfo.get("minimize_size", False) + kmin = im.encoderinfo.get("kmin", None) + kmax = im.encoderinfo.get("kmax", None) + allow_mixed = im.encoderinfo.get("allow_mixed", False) + verbose = False + lossless = im.encoderinfo.get("lossless", False) + quality = im.encoderinfo.get("quality", 80) + method = im.encoderinfo.get("method", 0) + icc_profile = im.encoderinfo.get("icc_profile") or "" + exif = im.encoderinfo.get("exif", "") + if isinstance(exif, Image.Exif): + exif = exif.tobytes() + xmp = im.encoderinfo.get("xmp", "") + if allow_mixed: + lossless = False + + # Sensible keyframe defaults are from gif2webp.c script + if kmin is None: + kmin = 9 if lossless else 3 + if kmax is None: + kmax = 17 if lossless else 5 + + # Validate background color + if ( + not isinstance(background, (list, tuple)) + or len(background) != 4 + or not all(v >= 0 and v < 256 for v in background) + ): + raise OSError( + "Background color is not an RGBA tuple clamped to (0-255): %s" + % str(background) + ) + + # Convert to packed uint + bg_r, bg_g, bg_b, bg_a = background + background = (bg_a << 24) | (bg_r << 16) | (bg_g << 8) | (bg_b << 0) + + # Setup the WebP animation encoder + enc = _webp.WebPAnimEncoder( + im.size[0], + im.size[1], + background, + loop, + minimize_size, + kmin, + kmax, + allow_mixed, + verbose, + ) + + # Add each frame + frame_idx = 0 + timestamp = 0 + cur_idx = im.tell() + try: + for ims in [im] + append_images: + # Get # of frames in this image + nfr = getattr(ims, "n_frames", 1) + + for idx in range(nfr): + ims.seek(idx) + ims.load() + + # Make sure image mode is supported + frame = ims + rawmode = ims.mode + if ims.mode not in _VALID_WEBP_MODES: + alpha = ( + "A" in ims.mode + or "a" in ims.mode + or (ims.mode == "P" and "A" in ims.im.getpalettemode()) + ) + rawmode = "RGBA" if alpha else "RGB" + frame = ims.convert(rawmode) + + if rawmode == "RGB": + # For faster conversion, use RGBX + rawmode = "RGBX" + + # Append the frame to the animation encoder + enc.add( + frame.tobytes("raw", rawmode), + timestamp, + frame.size[0], + frame.size[1], + rawmode, + lossless, + quality, + method, + ) + + # Update timestamp and frame index + if isinstance(duration, (list, tuple)): + timestamp += duration[frame_idx] + else: + timestamp += duration + frame_idx += 1 + + finally: + im.seek(cur_idx) + + # Force encoder to flush frames + enc.add(None, timestamp, 0, 0, "", lossless, quality, 0) + + # Get the final output from the encoder + data = enc.assemble(icc_profile, exif, xmp) + if data is None: + raise OSError("cannot write file as WebP (encoder returned None)") + + fp.write(data) + + +def _save(im, fp, filename): + lossless = im.encoderinfo.get("lossless", False) + quality = im.encoderinfo.get("quality", 80) + icc_profile = im.encoderinfo.get("icc_profile") or "" + exif = im.encoderinfo.get("exif", "") + if isinstance(exif, Image.Exif): + exif = exif.tobytes() + xmp = im.encoderinfo.get("xmp", "") + method = im.encoderinfo.get("method", 4) + + if im.mode not in _VALID_WEBP_LEGACY_MODES: + alpha = ( + "A" in im.mode + or "a" in im.mode + or (im.mode == "P" and "transparency" in im.info) + ) + im = im.convert("RGBA" if alpha else "RGB") + + data = _webp.WebPEncode( + im.tobytes(), + im.size[0], + im.size[1], + lossless, + float(quality), + im.mode, + icc_profile, + method, + exif, + xmp, + ) + if data is None: + raise OSError("cannot write file as WebP (encoder returned None)") + + fp.write(data) + + +Image.register_open(WebPImageFile.format, WebPImageFile, _accept) +if SUPPORTED: + Image.register_save(WebPImageFile.format, _save) + if _webp.HAVE_WEBPANIM: + Image.register_save_all(WebPImageFile.format, _save_all) + Image.register_extension(WebPImageFile.format, ".webp") + Image.register_mime(WebPImageFile.format, "image/webp") diff --git a/.venv/lib/python3.9/site-packages/PIL/WmfImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/WmfImagePlugin.py new file mode 100644 index 00000000..27f5d2f8 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/WmfImagePlugin.py @@ -0,0 +1,178 @@ +# +# The Python Imaging Library +# $Id$ +# +# WMF stub codec +# +# history: +# 1996-12-14 fl Created +# 2004-02-22 fl Turned into a stub driver +# 2004-02-23 fl Added EMF support +# +# Copyright (c) Secret Labs AB 1997-2004. All rights reserved. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# +# WMF/EMF reference documentation: +# https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-WMF/[MS-WMF].pdf +# http://wvware.sourceforge.net/caolan/index.html +# http://wvware.sourceforge.net/caolan/ora-wmf.html + +from . import Image, ImageFile +from ._binary import i16le as word +from ._binary import i32le as dword +from ._binary import si16le as short +from ._binary import si32le as _long + +_handler = None + + +def register_handler(handler): + """ + Install application-specific WMF image handler. + + :param handler: Handler object. + """ + global _handler + _handler = handler + + +if hasattr(Image.core, "drawwmf"): + # install default handler (windows only) + + class WmfHandler: + def open(self, im): + im.mode = "RGB" + self.bbox = im.info["wmf_bbox"] + + def load(self, im): + im.fp.seek(0) # rewind + return Image.frombytes( + "RGB", + im.size, + Image.core.drawwmf(im.fp.read(), im.size, self.bbox), + "raw", + "BGR", + (im.size[0] * 3 + 3) & -4, + -1, + ) + + register_handler(WmfHandler()) + +# +# -------------------------------------------------------------------- +# Read WMF file + + +def _accept(prefix): + return ( + prefix[:6] == b"\xd7\xcd\xc6\x9a\x00\x00" or prefix[:4] == b"\x01\x00\x00\x00" + ) + + +## +# Image plugin for Windows metafiles. + + +class WmfStubImageFile(ImageFile.StubImageFile): + + format = "WMF" + format_description = "Windows Metafile" + + def _open(self): + self._inch = None + + # check placable header + s = self.fp.read(80) + + if s[:6] == b"\xd7\xcd\xc6\x9a\x00\x00": + + # placeable windows metafile + + # get units per inch + self._inch = word(s, 14) + + # get bounding box + x0 = short(s, 6) + y0 = short(s, 8) + x1 = short(s, 10) + y1 = short(s, 12) + + # normalize size to 72 dots per inch + self.info["dpi"] = 72 + size = ( + (x1 - x0) * self.info["dpi"] // self._inch, + (y1 - y0) * self.info["dpi"] // self._inch, + ) + + self.info["wmf_bbox"] = x0, y0, x1, y1 + + # sanity check (standard metafile header) + if s[22:26] != b"\x01\x00\t\x00": + raise SyntaxError("Unsupported WMF file format") + + elif dword(s) == 1 and s[40:44] == b" EMF": + # enhanced metafile + + # get bounding box + x0 = _long(s, 8) + y0 = _long(s, 12) + x1 = _long(s, 16) + y1 = _long(s, 20) + + # get frame (in 0.01 millimeter units) + frame = _long(s, 24), _long(s, 28), _long(s, 32), _long(s, 36) + + size = x1 - x0, y1 - y0 + + # calculate dots per inch from bbox and frame + xdpi = 2540.0 * (x1 - y0) / (frame[2] - frame[0]) + ydpi = 2540.0 * (y1 - y0) / (frame[3] - frame[1]) + + self.info["wmf_bbox"] = x0, y0, x1, y1 + + if xdpi == ydpi: + self.info["dpi"] = xdpi + else: + self.info["dpi"] = xdpi, ydpi + + else: + raise SyntaxError("Unsupported file format") + + self.mode = "RGB" + self._size = size + + loader = self._load() + if loader: + loader.open(self) + + def _load(self): + return _handler + + def load(self, dpi=None): + if dpi is not None and self._inch is not None: + self.info["dpi"] = dpi + x0, y0, x1, y1 = self.info["wmf_bbox"] + self._size = ( + (x1 - x0) * self.info["dpi"] // self._inch, + (y1 - y0) * self.info["dpi"] // self._inch, + ) + super().load() + + +def _save(im, fp, filename): + if _handler is None or not hasattr(_handler, "save"): + raise OSError("WMF save handler not installed") + _handler.save(im, fp, filename) + + +# +# -------------------------------------------------------------------- +# Registry stuff + + +Image.register_open(WmfStubImageFile.format, WmfStubImageFile, _accept) +Image.register_save(WmfStubImageFile.format, _save) + +Image.register_extensions(WmfStubImageFile.format, [".wmf", ".emf"]) diff --git a/.venv/lib/python3.9/site-packages/PIL/XVThumbImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/XVThumbImagePlugin.py new file mode 100644 index 00000000..4efedb77 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/XVThumbImagePlugin.py @@ -0,0 +1,78 @@ +# +# The Python Imaging Library. +# $Id$ +# +# XV Thumbnail file handler by Charles E. "Gene" Cash +# (gcash@magicnet.net) +# +# see xvcolor.c and xvbrowse.c in the sources to John Bradley's XV, +# available from ftp://ftp.cis.upenn.edu/pub/xv/ +# +# history: +# 98-08-15 cec created (b/w only) +# 98-12-09 cec added color palette +# 98-12-28 fl added to PIL (with only a few very minor modifications) +# +# To do: +# FIXME: make save work (this requires quantization support) +# + +from . import Image, ImageFile, ImagePalette +from ._binary import o8 + +_MAGIC = b"P7 332" + +# standard color palette for thumbnails (RGB332) +PALETTE = b"" +for r in range(8): + for g in range(8): + for b in range(4): + PALETTE = PALETTE + ( + o8((r * 255) // 7) + o8((g * 255) // 7) + o8((b * 255) // 3) + ) + + +def _accept(prefix): + return prefix[:6] == _MAGIC + + +## +# Image plugin for XV thumbnail images. + + +class XVThumbImageFile(ImageFile.ImageFile): + + format = "XVThumb" + format_description = "XV thumbnail image" + + def _open(self): + + # check magic + if not _accept(self.fp.read(6)): + raise SyntaxError("not an XV thumbnail file") + + # Skip to beginning of next line + self.fp.readline() + + # skip info comments + while True: + s = self.fp.readline() + if not s: + raise SyntaxError("Unexpected EOF reading XV thumbnail file") + if s[0] != 35: # ie. when not a comment: '#' + break + + # parse header line (already read) + s = s.strip().split() + + self.mode = "P" + self._size = int(s[0]), int(s[1]) + + self.palette = ImagePalette.raw("RGB", PALETTE) + + self.tile = [("raw", (0, 0) + self.size, self.fp.tell(), (self.mode, 0, 1))] + + +# -------------------------------------------------------------------- + +Image.register_open(XVThumbImageFile.format, XVThumbImageFile, _accept) diff --git a/.venv/lib/python3.9/site-packages/PIL/XbmImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/XbmImagePlugin.py new file mode 100644 index 00000000..644cfb39 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/XbmImagePlugin.py @@ -0,0 +1,94 @@ +# +# The Python Imaging Library. +# $Id$ +# +# XBM File handling +# +# History: +# 1995-09-08 fl Created +# 1996-11-01 fl Added save support +# 1997-07-07 fl Made header parser more tolerant +# 1997-07-22 fl Fixed yet another parser bug +# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.4) +# 2001-05-13 fl Added hotspot handling (based on code from Bernhard Herzog) +# 2004-02-24 fl Allow some whitespace before first #define +# +# Copyright (c) 1997-2004 by Secret Labs AB +# Copyright (c) 1996-1997 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +import re + +from . import Image, ImageFile + +# XBM header +xbm_head = re.compile( + br"\s*#define[ \t]+.*_width[ \t]+(?P[0-9]+)[\r\n]+" + b"#define[ \t]+.*_height[ \t]+(?P[0-9]+)[\r\n]+" + b"(?P" + b"#define[ \t]+[^_]*_x_hot[ \t]+(?P[0-9]+)[\r\n]+" + b"#define[ \t]+[^_]*_y_hot[ \t]+(?P[0-9]+)[\r\n]+" + b")?" + b"[\\000-\\377]*_bits\\[\\]" +) + + +def _accept(prefix): + return prefix.lstrip()[:7] == b"#define" + + +## +# Image plugin for X11 bitmaps. + + +class XbmImageFile(ImageFile.ImageFile): + + format = "XBM" + format_description = "X11 Bitmap" + + def _open(self): + + m = xbm_head.match(self.fp.read(512)) + + if m: + + xsize = int(m.group("width")) + ysize = int(m.group("height")) + + if m.group("hotspot"): + self.info["hotspot"] = (int(m.group("xhot")), int(m.group("yhot"))) + + self.mode = "1" + self._size = xsize, ysize + + self.tile = [("xbm", (0, 0) + self.size, m.end(), None)] + + +def _save(im, fp, filename): + + if im.mode != "1": + raise OSError(f"cannot write mode {im.mode} as XBM") + + fp.write(f"#define im_width {im.size[0]}\n".encode("ascii")) + fp.write(f"#define im_height {im.size[1]}\n".encode("ascii")) + + hotspot = im.encoderinfo.get("hotspot") + if hotspot: + fp.write(f"#define im_x_hot {hotspot[0]}\n".encode("ascii")) + fp.write(f"#define im_y_hot {hotspot[1]}\n".encode("ascii")) + + fp.write(b"static char im_bits[] = {\n") + + ImageFile._save(im, fp, [("xbm", (0, 0) + im.size, 0, None)]) + + fp.write(b"};\n") + + +Image.register_open(XbmImageFile.format, XbmImageFile, _accept) +Image.register_save(XbmImageFile.format, _save) + +Image.register_extension(XbmImageFile.format, ".xbm") + +Image.register_mime(XbmImageFile.format, "image/xbm") diff --git a/.venv/lib/python3.9/site-packages/PIL/XpmImagePlugin.py b/.venv/lib/python3.9/site-packages/PIL/XpmImagePlugin.py new file mode 100644 index 00000000..ebd65ba5 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/XpmImagePlugin.py @@ -0,0 +1,130 @@ +# +# The Python Imaging Library. +# $Id$ +# +# XPM File handling +# +# History: +# 1996-12-29 fl Created +# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.7) +# +# Copyright (c) Secret Labs AB 1997-2001. +# Copyright (c) Fredrik Lundh 1996-2001. +# +# See the README file for information on usage and redistribution. +# + + +import re + +from . import Image, ImageFile, ImagePalette +from ._binary import o8 + +# XPM header +xpm_head = re.compile(b'"([0-9]*) ([0-9]*) ([0-9]*) ([0-9]*)') + + +def _accept(prefix): + return prefix[:9] == b"/* XPM */" + + +## +# Image plugin for X11 pixel maps. + + +class XpmImageFile(ImageFile.ImageFile): + + format = "XPM" + format_description = "X11 Pixel Map" + + def _open(self): + + if not _accept(self.fp.read(9)): + raise SyntaxError("not an XPM file") + + # skip forward to next string + while True: + s = self.fp.readline() + if not s: + raise SyntaxError("broken XPM file") + m = xpm_head.match(s) + if m: + break + + self._size = int(m.group(1)), int(m.group(2)) + + pal = int(m.group(3)) + bpp = int(m.group(4)) + + if pal > 256 or bpp != 1: + raise ValueError("cannot read this XPM file") + + # + # load palette description + + palette = [b"\0\0\0"] * 256 + + for i in range(pal): + + s = self.fp.readline() + if s[-2:] == b"\r\n": + s = s[:-2] + elif s[-1:] in b"\r\n": + s = s[:-1] + + c = s[1] + s = s[2:-2].split() + + for i in range(0, len(s), 2): + + if s[i] == b"c": + + # process colour key + rgb = s[i + 1] + if rgb == b"None": + self.info["transparency"] = c + elif rgb[0:1] == b"#": + # FIXME: handle colour names (see ImagePalette.py) + rgb = int(rgb[1:], 16) + palette[c] = ( + o8((rgb >> 16) & 255) + o8((rgb >> 8) & 255) + o8(rgb & 255) + ) + else: + # unknown colour + raise ValueError("cannot read this XPM file") + break + + else: + + # missing colour key + raise ValueError("cannot read this XPM file") + + self.mode = "P" + self.palette = ImagePalette.raw("RGB", b"".join(palette)) + + self.tile = [("raw", (0, 0) + self.size, self.fp.tell(), ("P", 0, 1))] + + def load_read(self, bytes): + + # + # load all image data in one chunk + + xsize, ysize = self.size + + s = [None] * ysize + + for i in range(ysize): + s[i] = self.fp.readline()[1 : xsize + 1].ljust(xsize) + + return b"".join(s) + + +# +# Registry + + +Image.register_open(XpmImageFile.format, XpmImageFile, _accept) + +Image.register_extension(XpmImageFile.format, ".xpm") + +Image.register_mime(XpmImageFile.format, "image/xpm") diff --git a/.venv/lib/python3.9/site-packages/PIL/__init__.py b/.venv/lib/python3.9/site-packages/PIL/__init__.py new file mode 100644 index 00000000..890ae44f --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/__init__.py @@ -0,0 +1,139 @@ +"""Pillow (Fork of the Python Imaging Library) + +Pillow is the friendly PIL fork by Alex Clark and Contributors. + https://github.com/python-pillow/Pillow/ + +Pillow is forked from PIL 1.1.7. + +PIL is the Python Imaging Library by Fredrik Lundh and Contributors. +Copyright (c) 1999 by Secret Labs AB. + +Use PIL.__version__ for this Pillow version. + +;-) +""" + +import sys +import warnings + +from . import _version + +# VERSION was removed in Pillow 6.0.0. +__version__ = _version.__version__ + + +# PILLOW_VERSION is deprecated and will be removed in a future release. +# Use __version__ instead. +def _raise_version_warning(): + warnings.warn( + "PILLOW_VERSION is deprecated and will be removed in Pillow 9 (2022-01-02). " + "Use __version__ instead.", + DeprecationWarning, + stacklevel=3, + ) + + +if sys.version_info >= (3, 7): + + def __getattr__(name): + if name == "PILLOW_VERSION": + _raise_version_warning() + return __version__ + raise AttributeError(f"module '{__name__}' has no attribute '{name}'") + + +else: + + class _Deprecated_Version(str): + def __str__(self): + _raise_version_warning() + return super().__str__() + + def __getitem__(self, key): + _raise_version_warning() + return super().__getitem__(key) + + def __eq__(self, other): + _raise_version_warning() + return super().__eq__(other) + + def __ne__(self, other): + _raise_version_warning() + return super().__ne__(other) + + def __gt__(self, other): + _raise_version_warning() + return super().__gt__(other) + + def __lt__(self, other): + _raise_version_warning() + return super().__lt__(other) + + def __ge__(self, other): + _raise_version_warning() + return super().__gt__(other) + + def __le__(self, other): + _raise_version_warning() + return super().__lt__(other) + + PILLOW_VERSION = _Deprecated_Version(__version__) + +del _version + + +_plugins = [ + "BlpImagePlugin", + "BmpImagePlugin", + "BufrStubImagePlugin", + "CurImagePlugin", + "DcxImagePlugin", + "DdsImagePlugin", + "EpsImagePlugin", + "FitsStubImagePlugin", + "FliImagePlugin", + "FpxImagePlugin", + "FtexImagePlugin", + "GbrImagePlugin", + "GifImagePlugin", + "GribStubImagePlugin", + "Hdf5StubImagePlugin", + "IcnsImagePlugin", + "IcoImagePlugin", + "ImImagePlugin", + "ImtImagePlugin", + "IptcImagePlugin", + "JpegImagePlugin", + "Jpeg2KImagePlugin", + "McIdasImagePlugin", + "MicImagePlugin", + "MpegImagePlugin", + "MpoImagePlugin", + "MspImagePlugin", + "PalmImagePlugin", + "PcdImagePlugin", + "PcxImagePlugin", + "PdfImagePlugin", + "PixarImagePlugin", + "PngImagePlugin", + "PpmImagePlugin", + "PsdImagePlugin", + "SgiImagePlugin", + "SpiderImagePlugin", + "SunImagePlugin", + "TgaImagePlugin", + "TiffImagePlugin", + "WebPImagePlugin", + "WmfImagePlugin", + "XbmImagePlugin", + "XpmImagePlugin", + "XVThumbImagePlugin", +] + + +class UnidentifiedImageError(OSError): + """ + Raised in :py:meth:`PIL.Image.open` if an image cannot be opened and identified. + """ + + pass diff --git a/.venv/lib/python3.9/site-packages/PIL/__main__.py b/.venv/lib/python3.9/site-packages/PIL/__main__.py new file mode 100644 index 00000000..a05323f9 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/__main__.py @@ -0,0 +1,3 @@ +from .features import pilinfo + +pilinfo() diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/BdfFontFile.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/BdfFontFile.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16db09b3fe8047f3731ea6106d88e7dc15343ce6 GIT binary patch literal 2450 zcmb7F&2QX96rUM?toJKT($LZhijk1$29a$F9FU?ylTF%{NOsw*pjbsK$Ky@hdTsC6 z3E9ZLkOJ2taf8F|u~#InJ#yp^m@B88x%C3?Ia#_OE{rwLGjHB|e&cz+-`Le^i9mb* zmmh6fCggXV%(endK87B*L2zObPC4`GfLUyySPCUv;VRd-&I{b&#h-LbolRmyVbQSZ4pMHz(j1{Ds6{B7)Q3_ za!cKCeZQti+Lm-%(hUbQo3=R^7|=JM$KS$AO2%YDGMdtOo|9dYQVxId8+MIw_LvDW zd~1k0(4uZkCuGdHGNBpsNT$5>7Eg0eHTTrO^WhLQV}i+R)%ME!aAYpRVQ9%PxvnovrHKk)KcOEvhChG+YPqza#d zZ1o9gkW>0l&Gf908Cj8Ex>%i`S!G!%E2pKj+-Iqg7Rw|pyh>6%HLenz^;N#W7hqoK zt9>P_oLo-|V}mc|8kTDOGGCl%S@m-gyrq()_>_(!O7H=@($sFkvg#KkV7Exhk}~AC zbPX~~D`~Z_Lan{Bb5_J7L9yGt+v#rHzuS?T9XpM)uHy7n5Dgq)0+!zRyxHj9KZ7xmbX6(`?y)pBcQ#s$ z=FYuZMH<4jx$gylaioJt>fCig?n<@q1zhTO6uIzLABA23CXw$YLcw6gz6b|3cc*NO~;kNK#)?ZZUogePpS7 zd*LzI5B{|$X-t3P+YmT@9|Tbhs=_l5{feS8gDz1&mDB+0e2(;8tL&WNuZmIRM6%V|>6*7!R!^3K zFfncO2(BT1{+r~x!(y8=CPauIl02)K9QUd!oaqqV)gxzo)_YNOTu zqSL&0zZ+ixgHOVJ51@)C+i+tCFo747xQ4zZfWTqo3TgCuUf?CYo_HPfvb;MA68kuZ zfG|NL-azpt3amP*_-u2g8@2 z;{rd6^aedynkng(>Biu)hD`?c!0q*9sn;8X{Lsg7rPmuC+Wy5#q1WS~14-bgW%VK{ z2d?dDVtIBS!Rk3b-GK$aq{6tl4USU8F7tag5SW%4SzW~62PnG}x literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/BlpImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/BlpImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..82965858d82ebf3782ecfe40d37c797e71d55d1f GIT binary patch literal 10506 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/BmpImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/BmpImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b6aa5060f4c0b206b9bdcb2b548bcbe200a2591c GIT binary patch literal 6872 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 L1io2>$prrot;-mb literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/BufrStubImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/BufrStubImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fa38bab48ab62dbc883aa01f8ccb88b3dafaf18a GIT binary patch literal 1649 zcmZux&2Aev5GJ{+-IXjQvJU-8fkyoUDxi@L=_Ns11aa%eK%p8{d)XWo^pdjIUhQs3 z%CLp)rB0us7x|b6=*#fhQ*J%?)EUZhrKALAI3$OhnU6EWJDnDR@#UX?@V^^`{Dq6n z0ej>LkS>4;B4|!#G^R5aGfD*Gp74bKlEl7fhydos_e6vudPzhi*=ca)#i3}57Mw(q zE}JquZOKqJu02X%z2nx=HM|9@Hm<}Dt^}KqLHjiYqXT9e2Qz*wZPQKrSuV#Zo~#GT zNP9p!0#*|ap27=kk+k|S4hn5}p7(iGDr+3K`k9-Ye644uyS6}3@vb8kRxcq6_dDg;mdc|Mv+k@3+puEe)0 zJC~!w%M();qe*&FmicISE{pR~o*j*ei%KSPu0ZC zj~oDp`TRI5hSjC*DtVk~Bh}i0T||HZBcW;ne+woLHXTfT5Nh|Kzq9uN?lV?>xUu%m z@B{quYajG9GDOJ<@m{>=VuNUdO37(<;g&0g@Y^uqX(}soA1^z1sA_|p0&NXEdjh0C z1tv*M1&NuUu?OS}COph20l5WpAOdhHw7XkiU^c`)I=2-o#))3LSbqkgCZ}XcugR~} zFeihFYkEcX#|8{t(ch@sZPc&}>F3oX34{+ktjRKhd#q;aux86>wmG!lhXV#yULfS^6 zvjt9h32J^>$ztH4Mn1JcIh|^0Y=CD{y$O9ILG91MwC({Tti`%CVr?&=0gI?l7w^7> z-_YIJ!f&gj5J-dZ(y>B$K-GINyh=eSr4S;D!@eZwm8Ib%1>W6fTg6Vq(auAclkR_x2goOCT8jSm9;(7Je=l_gxo3 zaosQa1tdkbYCKX5{FOHJ2hEL9HvDnoK3;tUj|{w+Wixdb--|GV5Q2@+Tvb6 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ContainerIO.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ContainerIO.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f515f02c5cbe0ccf1c05988f7eda51eea2018b3d GIT binary patch literal 2831 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 Lmj%Jv#+vg#C;gOH literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/DdsImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/DdsImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50a1638283c06e8dea1ec39ea6943efd1de5f510 GIT binary patch literal 5934 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 UXu523+G6sXv8yqC7*fLD1BRyCO#lD@ literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/EpsImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/EpsImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6db4df55f8bd8995d7a99a548240025c2dc6dbbf GIT binary patch literal 7587 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ExifTags.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ExifTags.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b32248a892121a2c2efd268956b02d6056b9018 GIT binary patch literal 8006 zcmeI1iJu%tb;oD#*_qkhnZ0yNYgw`++tTVJAsFM?*Z*G6-m6z7tEVTGz@L*Jc-s2ZzC_}atTg}WZ%HKXgCO{LYa$^Dm5>%`l{RUY z4(XIGNlLe*BrO@~kzVPOtmLF$24ql%WLUPyR@o-oWrysPU9wyD$cWq~d*yc7C;R0N zIUon+klZPE$=z~Tj>xDSm1A;TPRL0)B`=b1kZ+V1%QwkO=`f|O)Y9+We3R+i+PD0xU;A+MBgmh~|$Q5}~o|3o7Tjg!?J@UQscKJSehdeD;FF!0lB0nlWCO`KWwMeoKB^en);+eoua1{y_dv{z(2<{zU#%{!IQ{ z{zCpzJ}!SH*W|C|Z{%;~@8s|06Y>x8kMc?RC;4ajl>CeQt6Z0VlYf{0kpGlV%YVs# z%m2v#%4g)W@_+I<`Mi8Vz9`Shm*mUx6?tC1dZk4YC@mWmT!BtAhoU?=kP_>TX#n$ zmZm31LTe>Bl2VyzH`KmYopwcEQvF5WE9)Sz-IbEJ9IjiwR=sn2y;QrfY&&|fUezky zTuDt=tQCFMmT*<2&GU?QS5WC0v%{dM{gPFwI%rhzDpj9f_FT2Cxax&oMTfp!Hr?Zw z&cGlFp)lzqEu zzSll$UDT>$))VchObIhq~z5Zm5QezFo2WdSTV~Dwt#04s9K%WWjShf7Yt1o+-;&4n0>-;dPD_<`u6r zALEry^LaxXtTbt(3x+s7IUcCaY4>7DhboDGsl-5K=FH6Immxu~<6gL6xhq=rEL#4G z4ly`dy~<2n3VkbHdYFf?)k)9Ch_U21EinW)u5nL8ZPB-r1;?%yE!ckVQsa@ThOwNx zvEF5zO^Zt1Uz|9-XkBoqn)%{1yzf$7B`KvNs?7aWy)r!+DM0l_wG9oZ0Sd6Lq2-6h zkJc{wu5h6Mqt(mHSWCD~ zpt44UH85(UyGD|t7hthHmy&@64YSg2S&unZ`Jyop)x9)3Q$!6bHoTx6*q0c;g;(oX z`MG9!WETC+qS!n-7hqcGrYHIr&RfRNRG0bO^tc)*Oy(DKRa+s}1q<$u+ZC09Fs`c1 zn330K^csA=yWmypzP+*vBcHfb^@5ronSR$~WKZ~Vaj`I$&#PY31%0Z9J_D7SxMVNK z>y$HVVJsc1$hfKc8lQt;#kVSIpj6dm*q&3;F4eVWhjrC;x>%Zamp#=tU7E)WTB3Oc zs(pT*X+k{xY%-2FVZqv_d>w+$O z6~s_v9gSf|yFs!s3^mYrnt{T@n&^7Heyi~E<;yBfMV!&T3G~@U@Ia_tv0Yeat|1wR zAha*j38E>O3H5J2Z!{U$lx;TJ!T^Nn!w_$bq{EGkMoYW{Me#gWTCLFpj9R0Z-IK3s zKg1eG)xI&a^e)^c666}%7_+Tdltl=*sTCaH)mX}LghmT?t}?S4-M}i%LZoMCP9BMUfF8wWoaXuaJ9cuS6fR}=+|-(_Fq$j*KEXk)iLMU0k%r8Z@oE7hN`TwuUh)D@`PqP|sfs#dXuCZ9xv3g~Cp zJrD@|aa~0K&E(5v?eJ~RXRv^n?pqU%UNeHcy8@T$S}HEuAs)Jyij4s#mx}pXxXQg~ zsrYhTU-ytM^MzOks?TT}7SXWKlyOt2ojyg=HM)x;4xBcwPiYervT+E)a=OB3rM8<_ zq6`W{ykI++RP2&NW|_I$>*i#jN!*+kY~6hOrkxtDjSvBQ(wG_Cg&oHR)m=ioi?Xub zLJjL(S)dzZN8Suz#tbti@{U;;3?`a2s{?QJ(10pc(V(KJI_;h~RjHttiprYr7py8* zElU1QTeb_23w_VwZjJ{FIYFw#g^iZ0yR>TgRl1SdILqxW<-|Ua!&NpL zwmT%#(van%IY#q~lG8ytsKbcZEbZZDMH4c1iXCb)KV#LsTB!PGY!~Uiec5Q;Y}#tT z?6PJvi?%(p-)#z2cJp~$JE1joi{wn4#zi|~W?U~@H76`#Xd1ygsugfvh@4*aHHk_X zyvoEG9@6GZ$8M+{SN+k<3Yg}F$XJej4cT!8Ka-kCM4?dgotq`cRZkw7IO0 z!l7bL*SM+TS5q}szjO|hv;yrwUyTLC@g$Z+aW&VdZrX0&m{r&QX(ZrosS3AN1Chev zohJRBu`3Y9Q@X(>jRBf{JR7CIV@}Oqu*9wfDwlUdJMUma!HFU|DW%b;cf;ozhZ$8=<&lEo%hK;U?`(I}YNgi}T;H7m!1jW5^F5s6pjnJ?f%w!CL3HH{5KX z5y0^SgNt#sn}udHsXSI?P3L`Wsr0NBT-3s6=3XU zm5aqqyJTN1Y9w;17iMFkU)*NsCUc6#SwwtufOEX^MH4CpaKw%>T5YZANy{7}8_J&X zyo)BN8D-xprE{d`t7Sy@8Du)gnk&bfD<^OmWbPEJ`(O^&Dc4aF*VDxF#8-&~gmw$j zO0*H3L>G}Hx``CgL-Z1TM3&%}ZQe=RL&Pw#h1g1LBeoMeh@HePVuZMj*h}0_>?8IQ z2Z=+(Vd5BZoOlUw5AjmsUgBlMeMFuZBMQVgF+to<%n-B098n}5AQp%cu}C~foFUE< zOT;-s5f2gPi3ILn?G~byXd^m^PNIuQ65T|O=qCnNP7o)FQ$*ql z&_=WqSt3XD6D>~ytwhUHd?MP2cA|smB)W(s(M_a?G?5{Ch#b*R3=o6F5HU==mUxu7 zLOe-4MI_z|v=FUC8_`a55KmtPt`g4>?GuE`qL=6+vcw=U zL~J1v?*&?jR`c{eJ`rt1JJCUO5?w@+=q6G`n#d3%#8KiHahy0ooFq;WuOcks0+DzY zc=jVe|3`rVVvrajhKVi2R$?2mo!CL_Bz6(Ii9N&!aT~FhxSiNX>?iIZ4iE>4L&TlL zUBunQVd4leN*pDQ5yy!W#7W{5p@@fwR}ilx-bB2ac#L?Qc!Ib>JV`u7e3M$BO6T3IKNr{FQAt1g34?iEbJiZ5ws-Did%VSSz?k zL__S#xEw|%kFy@DxYI?d#R1GBIlV(acXNzW;8fXZbm5{wzi0j>`-54`{ z7k7QjW?KAIEZXR9<0KUiknc2PraNqa@zs8OlH}BwzA;thm8ZEoV24m=q+By>d)Zv! z@m@j=;^(QR3%&{8_xwX6*Aw{Tw*l8%3G>v>rw*c%=pvFtH^Kke^UW(6R(ptEqL0WD zIijB!AO?vcVwl)MY$di4+ld{-PGT3ao7e-)9csJQb^g3~<@4uN`(pld$=tQ^;r$8! z0NyZot~gr3Wwtdsg^X()S-2i8)>m;!Jz6TSdY&_SWKFwkqd2{cR_i#7yC;skc$6o` z!?-`Vh#UN1v^YI8$~%EY{_je)el2-V#r&7ey_{uGg?8GLtu0^w`*jVpwzR*{-$xRU ZBtD&bIPq{|`wPDFLTzu9eY}TbY}L$YsXI9GzeM_wE$IEYGaj_N>l}v(uP_pCXypmEfTAZXPj)j-gRfj zX<}_SkkWJST#{oi+_-b*C(H?nQ_kGrP~ICmUo9iOH*emXnK$oq;##djVBGrcm-yc@ zA%EfG?C@Z54?sykoN$_wAr0w}g^Uu;Vuw52eNIA`d)$ZF`@D3eHU_EEo!6DoQt17Pe9ItLLm<*vtC8p>{iN4eX|Ht~ z32JC;#u-nAT&~ztcSf;{hsVr2jYm^yBVXSVJ-uxAbY4*tM6+{EYDzQm6_F))$v@w> zhJq(?>rpKE1DR}#*6Qx2&a+mxx0&Z@Yk6B_+pRQNZ;f{KW}e+#{;Z`EEv}E^-TZP&@bPwR% zK-oP2^${RJLdr?VI1L>Dmox5Q`fx}jn0@ZUTT12v2Ijzq+&r3+w<`T??_ zAY0^s9+EwpkUeHspy-h9IfbLHYKOCZ`V%c2$Y%#lKX75MTe#dEFnRCkOOSx=fNc?Gom zs>^&1cV)MM;{)dp?%RD;+}DR!N0sdIDaTT^Q<+`Q+dE4|i8}-Kl1j!G;M`nx3pjPl zS>hKg=L6s@TF%uOrw*Kp+XPPC=1aK8`l(ugpD1|npawn(iU8zc5gg1H1o@mmSl;Oz zt%AEJ7uV!CgGv&7T0eaV&k^Q?!W4VhdGI$@5WtJ6HDH2udTM982b1Kv)It~Q3K{COa6TQ`gQUNCjVndWP3hb2Ln(7P{VmYT8BC}KHe$ho3-XesO4j@RNV(eXob0~N?jVzIsgM)0ayaM0(`&# zOYAbxNCB|v>^oH!P@hiTeXGEht&VdAh5dZo^&o)Q#^rU?j|$H` z0z0q7WRx{P9|G8KAz&_bS#ZsAdzh!k18K}gYveT`G-Ugjs6|aVg^t10WerUVYgUs3 zryvC_82)3nCftt1!w~*>TTHIl{{+e7pQDjM;wRHDNbsgR-3>p5inW&VeK;#`0%|%T zONR12yeq(hLi5jJxM`JKCK$2RQho_p^1J?H%H?@TZ= zQ(^dh_p?ufKhH7tH)@>!S!leAk{&`xCV9-d+~Zy0iLT)poccs;b}i4=x&gi9Ia)WN zm%TD{OWMzwS9zbwl60Ok>4c&!Mut}n`LP>T+cRM`tejvsv}@FsWm(x1Cjx7$JFM=G zIgYOzh4rW#?1e>HS6fjW7OqyG1aX*UVVxIN^wzC-qTIX@hc9>`dUu+%{Pahi;|80QBm@PW;5((*KkNGAQ)HkkWEt0|7h%8 zl=LA)$UH8YCnWa_DLhjeo+V9bAtJW4WeGK+BFm^9S&>!LW$DTp)D>Biv#6_b4$hb_ z+|xUe>pf%Z@uR`oy@RYL!?d%GR%7e&d+Ya-s2gNaFWI`_c0v;QQoH@v2tv-<>=ink;s{EVHZo5J0^5nRv=4y zv^o;Hc1NN`^PH@V-DXB&IO(rJGjc=Dc7*y}F67)2lk;nAD00khSLDJblZ$fcIm@bY zdBpDnAVZv?Z#+XcmH>+H>NBvHyn=oHfpM448SxcZ=ey_UpUqt9h~IE^e>&!9>&a@` zWmS*8nX}`W+>}=d|H-wpm9^8AdUQ>{j<3)ib8~XPtadyrugR|-&*kO`KOwv4B~6fid;M4^i~nwSGUK%M0mzE2tXZ@jp><;mq=WJm_UvV7L#7K9wcW0 zZvhOdj0uXKR>7Z)9a=)fG6ttGMVhKYM1RMQ<1J`~BM+2D$pw%Qa0w_oC@Gz}hpT>6 z8}eNLTgGq2Q*&qX%=BBsLlhg=3m)j!M9`T9kGgE+kl<#fTA!H|gk6XFYqFZ7N7xA z5GGI?RG&AZgf(?jy^5;fs^EJC-@RmudJTg=Ls73oc*alO|Do2#U*cC^DMYJZm?{jU zCIdA?TUB?Ck}NoUpj1zJPU5#z&<#_s8l`@q-)ATbvx|pYSbiD}LNM9Q8-*DqtzKcN zAOXoP`{%vo`@L2x4YR`W`xCNNWP4$#;N!w<_oAdIO$UmlODpx^#r)-7+&T;6_!o4XsasUXt%9fO6*|vC0*IRG7W7MQf+ZBtZ(}5-kTb&-_LoAq{}D#*-@+rk_xx32lQtssC7PuxiHi1NG z+{VdI_n)rn_it}&bgOT`1pScJ*GQvBShv($q!Y3ffn1T3l?zd?s7=x-9)*?eN3E>j zQNcs?ed^(fdV_|)N#acslptR|Q*{%~U6hn^8Z%733ZJ|1yu(dIVhQ@3j>=&9VjQMe zYtpkk{ZUv5lsXhYf&z-e13ckrjZB2$tj#-kM(9U6Bjadh?PtTaL5=Lii*-%*sf?6{0jsp_pH#&pOO< zDebjQ$y(+f?KhL-vTZX5&;)Lx{aBv*v5w2DMH1xE!E!T5D6Npi>sfDIdv0B44$o-C zQC&>XNd#Q4X^*Qrw3=M0-XU=VqA=rLAdAX}L3|Ku@_UKb!g=t))}*h2soty%n;<~d z4Gwpa13DlY5TR#gNM~SV4eJNAF(KJ2PZ$(4E(h~IhKDFAu`>g3ZIFm#I3ST4w+)Ba zKrALVg(GafDlQX>jxqV*^hY`sjba-Ld{@*1u$eXV-0O}7gV zoAE)4uXfzR4_aBMd;(RJ?5Q8nor$t0u%pN;a=ZF~#LIYSO@I0$3$@L~4rIY?5P3{%({6>PT7CrCFG8p&BG8hLglkdwDY| y+{1SaE=|c$?NHz1SzmaVg-Hr))Bktd!r7eo?JhmclnfvO#@}|z3%_92ocJ%H{UTBT literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/FontFile.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/FontFile.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..063aa750a4da3d77f598265acd94f5b708a60c8d GIT binary patch literal 2338 zcmZuy&u<$=6rP#=;k9EYZd#hAKx8C@FwnRWRS{~1`b#a9kX5ObDppjhjb{^YWA8e% zo5Z$ePw9yZoVXOEm*7eb~Uqa-ptN>^WOKq2^)9&RO{pQc=KA6$T&>e zt+kui*5kaDMcX@3(u)-N7Bj|Kw{00`kA7D+biR|W-CU2L6dNPs?uLV%C^LNbH>RqX z{`W~|7-7fG*P)URRJ$!&XdRAbRMQj{xBXytD}i=M>~1Ec5@lKXC68xJWj8ggWMy<*@xnG2Q9mSE@D2H z%tw@bOA6$~k~Zb!I5+MrGk!%@Wes{y3Pfwpcqitk?R#MswR(dv%UT<$YN;?o93Uon zYXknZ`e7mmk;+!PJ&M@LLo#_%X6!PAm}wROFPmKQOC-ZD*b?0%gqT2J$H_)&oXx>x z)NgZRXVGAzjOeT*P#P}?;v~+4;3JGO$_5iIpI$g|clBicE%cBdr@qiWn!N;qmdQTv zwz*n>t}Rp(A0y)Nd8>0luo>k@(J%-;#hQ#ZV|;q)jM>u#Z$;rE)}7+^C!CWks~XjS z6gDe3nkX!36}DzTbiZ)4qgJ%@on5#^rSOVs&NbJbw3iurYnfeP`=a1lVC0lKLAoWv zzR1Ovt+Ym#Q499lD++;~EG_W2wY{RPqNZ()OcZmvCdHOezv{W!SGrFT9c0ML?E^fSnU$w_bM_SHd|A+S-4Lv378f8b z!27zcllMPzbw>)_(0mCgE3o^Sl?zw}gyPiArQ>Mm3#CMnnCU1^&~4boBE|Z^)768j z_71sTJQSR1S6B4nhJ`s-&);U-Z)SWnUB0iP5Ck!dauxTo7Es*+9Sp-!w`2lEIX@yE zIwHw1!`D;;QoCl{*+OFt!?AImKYsA+YvW9^cp54C!B|POXDY`#8%Kr7X5>2~swCg; zsdUu7IKv+A8@}gz*k&)5dEYpLIEk_no`y?f$t*Wkrh2}JhrTl|Exbz>_}K7?;jt0p zu`kBgeKEOicy=Dhm0mg=5vkyx>>)a4x!ktu+yl1rLvEc@#^ zPD1auXmSCR(wtVGhPzS8ktKGf_UdST=vz;^k4TIMM(nMZOb(_eCaq1~Tjetqw`#@- zvtAr$6t)Ldq$+0u}2|r<7J}(=xUrBI~_%d zqODX36c<-pimPvhH1AVKcSzfr;m;#RPr_lOh_pb3((vIq5GexB3$%<_omrl>V!a0_ zTt%ywkXRJc#wj4kvv!q;oAwO?QwxG&Dt87X*MnetCmbBlRDwXJy&x#hq%L4{Mf^EC zCs{q?3Ei}+3`rf*2WS}yK(Vle=XjRaQKV>BR0khLzLv#UUg7F04e8|NqW|01c(-S6 Qezk~YWwKBX!nQo`KNczbyZ`_I literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/FpxImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/FpxImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5905f3537ac0b03395b89122c1b36c4df46e810b GIT binary patch literal 3633 zcmai1-ESMm5#QbW;PLn&iKZszj6WV2J%c-XV zy7(Gv)<#&Ft&BKmQ{>ii&)*30qONX*-Jr>HE4=s)7?JbEoZoELFJ@T6Hu;u- zTg1wU?8l}G{cg~KBXaAb#oNnE@P|E6knH`HsVas%``uhGkfA^Kp|9i(748Oe_x2wq z{b+8j{jlHf&du%y(e7L~T%Q~4ClCA4#o2e~;xGx$5B&BPoE^{ITfRGYYp|z%ey_W; z5k|9v{k+if+wEYG{DRCBAdIU?&^EEJezcbbl=vD*z&tLQCnWa_DLhje(gZjxStZ~+ z=AI3Z06gFd1Rw&AtYF8JdHL7|I(N^wb?+0;xz+XKhxfw0*BnU35U#ZYJ79*jgdOsf zZHlL$E#qSr&6+GR_ZK+JIA_CCi6!{~Px)8kWA*^<&iEHRa>w;No5vAs8k_cJL5eLy zeS*=(0sjiR4jpMeg$BuBqO~&oY1B^|e$;?*4LX(g8ez2ScSG4&y?awjhUYF{xpLvk z)%p4JOBXI*I)CB9(#`YNE?>TQetv#&5#_?IcQ0QbzWF^x>%MHLKGZMWU0c4PXp_yN zDxvas$&LB4ciM+77c2lXo%1dkeQR4578zyP+tadjJWnOCa2SL;dBN^;b zsKi0Hlk-5sW=tlaJ-76*t6*aS6te`c@hWeKDtE-N_Uft3>Y>`UwuS_a$47BRc-1Fz z3IK;caUv2Pm*Q*lFUTkxIGaqQ$R#rj)S6)(fwK~cfwATR&kSj2W@^a7mZ|QecFwTO zNKI*9Wtq8sjkwd$+p;j;lEn{LWtL zKytuuu+JJ;qi|T%BP-BZs{GI@j8X|{-D={<39aL; z%#@Ru3mdMJ6|iHMsc%z}Vpp)Pnwsyk?Qeme32BqHI@=L~rdFQSZup7cSY6)?+DT(A z>8qfT8}nD>aAKVM8cY2s38ExMI$=CSaB=PL(E|KCBBzfi3aM9&OmM^L#x*y3{QH+EyUc7iTLUN-V#f;{pIsvIy*$9$>0z6a_1~DKIhr=K@dj1|@0@ky@ z0zw9Iuc~84ZYe)PX14tSFeQHza;tw`fBH)(lwjwC$H1=iwmZnyj0zKT6-ya9sa|ADHe(Y%EczXQTdn^#|$c1^h4 z| z5;^evjP|_Vf9674dCOAY$ceEp#Ms-Vv_ewOo`~)F?Qc@xqE(foV?tjZZ>*>@0G0X) z$gp%ji2L20BiQB5H&eAlBsu5-W@e@dRcqFYasXLyz^wEPm>R0F) zp4o}EqWwS5fnn&KGKyMmfj3REso|`W0mXy_)Bc4xPd5 zey0-$Np54MjpSj@_j11PS$pH0wm+`+Xt-zXYs2QDB`>|QJ#QvN0#=dVZRu3!!`Rp+617bX4zgjq;VT>RIx%Z6*XqK+RVD2`F(bwTOM z;kGy>s*u@&Zs0OE|07=5Mb|iPPmbGqv@LAmny#=-6Wn;bjefI?v}ibb4DN5-;5Hwg z`GLfD?9kU38&vfZE?eV$M1*CpWM4u(yVY%7u`?AT$C;pwZe;Wh-g%aB!4Es4NhEuQYh$gRK zHr`q@Ha`M`^Zpk2St8hTk zsqn9f>5E4ns3KclIcaUF4y7q{5Fld;J_mP@DVzy+-i;LX49(fjV6R!x&$*l_x@wf( zc%ii(M!wotI+b7IA&as%UH@ahifCKv0~KM28}^ zL(;Al>80uZieiEIaeu)6lYQdrKKXs0_G!N}q-CX0cV%cabLPyseCIM_Z)L^S@Ok); zU%ktQru~Z+^PdV9kMT`X3|wPhvD>DYXU+rMbevZ%am2>WD3*kbttQn0>3Yrf1IedEG_9OJpx zT=5z;O|!SzQ4ogl84F{N3(0!1WUXH6GcV#a$yhH4MZ)gxAMgFpw7(TH9t!rI@Ix>1 z2ZB91QIyA_qO|;ibW;@Z;eyj*?a^ z`|UzrA+9}!k?oDvdfT=;5f>wYA@T)#=}ES^#rAk#u)`kP8F+ER?z3a4%wXz1Txa{S z9C|6J8-HYnej0ay(&qa5M&Tz}2iAmT6WMl>pv@cgLpa?H|8r*`L$0j3H?PL?f6>#?DN? zny^-t3Su{s2Em2f^Y6E+!gf*pW zjYZjzQU|55M$ud&MAwv_HHFVwp#%$ri7J8z!>f?0A_BEYHg$5|gf)^%M@k)FFSb<* z(#HJBc{3NBELqD~pz?Xp>jB9qWhG2yQ43qetmJPNg7eifby&J$+Xrzfw%9f&@)In$(d8I?T^Ck5|cS2%egNoRvBl8~vi^upTpI{Ig?sLsC zaA%v`a4c?e3paFyS9le_RbInAT+dhb0s2g~W0BzTo#Qf-=I@}potK+idxtwspDerj z;2PJe`0n7Fe2kq`dy99(L_0CwLhpr6cfO*T3usnJs}SErb1lXB4)sT4s!t7G#cpL{ z@Y*XQ8GNh#tS{s=r^VUo#JbQI>HSfkRtlXH=$uw3W(tY&pS(`;=@os{cx&4*d{%X3+Z={Wh`9}X$`BRVxPJ})c zEWAC-Mz+P8@8#7brAsWYW)WTZxzQWt7TzyBuc)fdtzpbXZY4sz%9r;KpFQ0^cB!sF zLeV=`iUiDWl^ZV(b`GB&J==T!d~Y|mzo$mICuJ;2bk{R}#M%gIT zHRUvl9$Q>xd9_&O71ijR<++}cTU1kj*W@1{>_0EtLxDnS{~7OvU5Tex`{;a-#!>sZ zKZxV7-8vP~X*&$M?a_HUh@%Isui9v$;y(F|VoKUao$uPS#6JqNeh{@r=Kvwb>ueV~ zR0(PN`}q4nzim{lhH+bO=pPsjqpnx=+j}bk@zwg(fuMn#)f1x5Xf@_86&C2ALE-)uGV!+w~YE7MSZ6o zkfW55%GsNkOyDlp|7v`MCh&@${>Fi%o`FtRdAj|ivx7+$kHTK?({EJfHP`cfF-is4 zOYh}pn2#;`A3=>7a=PZaJoa5zE@Lk@f>>o-u1UgL(*HX0QyNxjc%KIHMM-j2r054p xDx?aV!p6BZqg_91=S)-JsQA<$6%c<-PA4SU`l7BkjGG3~(JgcJ)4Fw2|1XL__p- zTpboF_mHyhkVz)_kj32NvG4>ZT?~!b^emJOX+CA1y~Cs>?WauIN*st2!*dirb(M2a zQI4|D49-xmk}jPyvf=KtW@X0Fd{by^Hx7DASIWV5M*8yui3lgfuQS6E*9Qp(ndNb8-I+iOn{MnaG|CAd@qJ45KiHD$xeI zMep_qR5v<$&R_)>|9;$xm5hSc*8#{cAv#p8y-7b$lh%INPt##*>rf?!tzpz@jV5_N zP3~-c+RCC_y*~=V0j8F<_I4k(b~;dIxHla4qGW3{(T*R4p&I3HqLYlmU>xemLlUnJ zTDymo-9o0A$0hTG6MoDWbWw0A1`IyP4QZV4A9x|8dC1`b>Q*71v0nwv zE}SwJbaO$s3Paihp8Zsq^o5@%XDy7S@Gz^jR4Q_=94(!H(_ZE=pCBUc`Rv z6pmaP7@+ZN?d6zorzw}W&$BJ;Gpw#$`BB_t$LNXd|H5HYt`^L<5?j{kTNs7e6)4$- zTb^IrX1Q}pa^;M3M(Z1_u#lKvl?1}|HV_EGK{l-?Y2FALFZuyg{%PaeBpZ)LDdb9C zS!^6C$f7j4+W;H4HRr%B%}sCp&yg@4rqGaxu09?sf&Lnv&8WrXcKX(02)7%ZKsN9y zMqwiv#~lUQ$q>O&(wqH*L-U88`Do|<=h_L=I95sCT!I>!)1o`lCa6H_rTs~g2S;B4 zq@c|x>89F@Q>nD&XVFvv0ol9hONAEjj%AdU-$~<+ANEx^&?fEDRbK{qP@ZU3a83=o zdZ~~06_k_OIWLH|oz#i~s-t literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/GdImageFile.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/GdImageFile.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ce02c59c813cfd704cf3e8021b370ae06eea0ff GIT binary patch literal 2451 zcmb7F&2k$>5T2P`{dg_skCaoX1Q-HTP?eEFLQ#b(Ma9^TZOX{5*bvx@GS-ZwN%oJ~ zm14PM4sm!2F3FJx;LdaGm6KnA1Ezb{N`yJFRnt4u)7>-E{dKokSnvpZpa1@=cs)nR zpSYO)Tv$ASk?sJI#3zzU7SNFSEOdM)bbXg1&k0Il*{|5S3-hW!N69*oC0Tw+WLdGN z?AY-=IWMbn?j`l-rMFA!HSvNH;x!sPiZj(}c^tmIflhfZHlfIPS46PG_Z1hzEC!D5 ziXa$sqq=cF(uYbe@igYyKv~spAkvhBIw~2}*J-AVl4y+&Q^lX_Y`|N|xYZj*-PV(x z&8@~}DEg`qCo1}+{-gn?#~c@2Sc84g)qz^F+HlG_<#lP*AA-o#1V_`Ejw7xkI9}!T zkNr<%3zPt!tVw%BakC{pj)#08MsRw}Axv=7CQ*aEF17lQo7Q{eLiP zSUsPuuO2R*cZf!8r(F#0^ee%n0%HY6`Uj8+c}iYUNng_=nz0EzhWs8;!!t)Z$Mgl2 z?u2w)+>xbYX8+}5)?>ge0k3kM9I**ATe1`}Sv_*HGH~Z6&NXt(j@*eWy=TNE6R`5M zBIoautomwB)}}JDe2o;+cD8Vh{KBr2*J$077vx3Inm;cgFZJ9$1&Nv@0GZ2ey#Q6J z&h+1>gy>Tshc^HLT=0v>jXi0f~D=Gj06TbL9d(;@ReVKT#3>| z7)YV9@BZ-h`Xfz1I(LkCUT3BTl9tpRQ=QI@O`(OH^^)8*koUO*nUT-$jv-GEY_{Ys zL|f&hP6~w!w(s4|T^&Jfa?r>{Abuq|OE?#0d^dy2QZMChs)AllQ-3ZqL$wkIvGFgy znQr%bsmlCvrX#5iek0}vnEGqC87iqoa|2+#YV=4ocgBM(j+(pOK^zCo1{8@=Gtm3Z zWSkA+=w9Q?W~wvwX(GDM5I0RIkIfmdHj**i9gAZF?5FPmAx@3eXqA=eBCFDxbAeW= z$6U%!%cYyAhnHuyt!5iCyxQqRB2=AD?sYl^{$XD0bbcC&;B2ST>BzVX>~hfv@+-x^ zBLUAwCs_E*yKn*f)){gWc^JwMVWb$HDs?L^b(!Vn)O0cU(+@q54R8fU+6Dr^q|Y34 zDI=00{13ehpmt0j1JqoSvGE24z*BO#SR}}Vy}M8v#s3bu0~`QnNz|t$ zY%3O$XX+pu8pV4i4!J;R+8nh_1{wvHx)uOWgqDNOXrU1HAdagg4xLOywnbsZL;e6t z7xbT5WyD#FZ(BEs0E>)*qO}Cz23jSN-x@U_GZgXM!L+mNm4Bi9UN*_>zVi^yI zsqMnI%&oJ7jDm+mX^SsI2f{jI`<;NMGZhdT8_f2u#eR!#7KatG-FO&C+ohqkW407Z z<|7EfVRauog_k;f|E&L?^&YI%aILp4YuDY}`(6Y?We>3-Ht&E9gUJo)c?suNf#g)3 zLrLx;l)r(!6cd_wRRA)h9=$-#ZCJPK)Ly4vGatY*CkBC2^NGjl4Yr9pt^)%)-~sQX`ChE<9HbQiAD8f4Iw+y4MB7?k?} literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/GifImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/GifImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eef81bedb13adc7ee4b8e9a3e65f823f30a482a3 GIT binary patch literal 17167 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 r657H%7T#&BJ_OPIrl)d(9cT3WS zEo?7!`V_s`$2>q^hS#2izCll&p={SmN??XVa>$waW;ndx?-Cea{P_p}J0RpQT-+b9 zM_vHw3YZ{*mSj#-I%g@PL@@3NPxx<0>We^xFb6wCL?V7eL@e2HckqoXqN?^U=*6}sG1*;ye#0IVe+b2nHNx^8sY_L1$hthW3^r|T3G{=+Mfilud zARPm12?tN%1-8h#BN)4tHoPoHylKiJ=ccHur@E1OF)Q-X&X2p_j0&_cI^vZmr5bnL zt>+C_e15z6eDr#CI;szjWp2h!XZn`fIJ>!*P#fKdZ;6V)lYf4m%%v#!VDezo!SoRbEr2B0@9ZHF-U+L>VeNw) zoFMq&bO|bC=>yZq5T+%@q!4Qt9mE?pO3sRNw_GtyfQ>Sq=dv-6V6k$Ds!fn{ptXU{ zz5vpn0+S@Af}~8))C2Mb6CT!-fa-!d6d^bk*{wA=upUw$y<3YGBSp7ev_FB+l4Ej3 zugR~}FeihFYkEobV*`dR>2K8S1}*GD0eUUTLg53CT5=V`J=QX{*RrclOPmG)XM*Vx z<6S(M)@H<4r8EPFEPa)*6;Oy)(zR^XSl`I9bU0XFNiOWh{zYZ@`FBdy%KBQ$6YI}w zA#IT9Vu4dxgPLDAvPwMEC}%dTXEQC04e?B>ccBk5)cy>t>LD<~x@!(A*ehqaXHN;uV&D;-##ZE6kXUv4RkSd!e~s1yuph ze+4=^1V-qP##CXd7s2=tdPLH-J02?shi#KC`xE*%}bd&uHY2|v) literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/Hdf5StubImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/Hdf5StubImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0aec9518e364018fb357db0364bfd87d4fe589bc GIT binary patch literal 1637 zcmZux&2Hm15GE;Ek{x^3NrC>PhgI7xPy=22(B`mH;fvrU5rJgq-i;IaqAfbG z5=gpiOaHthec8HoD1rHood>sY7tFdi6FZ`N#?T_zgbaGGDL5W5(>k80nqI`(t-=9Y_DKb7f z;!3P*Wg6;Cc8q>>gT1o2fHS1{oqfdo(qMo)MUjc<1GY3}pJhmTw|ZKZ`NxzKG|KY`MabF!qj9{=8n6P>oQA}na6$SFSq5;9HB6l}Y}syz-9aFj)>vV&EFO+a z9r6N66Q&T5p@##ekbPDRI)X1)s?{Hk~+zoaZ^} z-8lYb&hxt!FD=!KYqPf+V%WFQ zwFiRGJsME;DQF94I6YXn!>LFIJwp_hmBQ?-Ph0escTsPvZY(19f~a@@X&`+R7Vd@( u{YLNHZ;@A87BxIWy%FL)`X=~l^`PHi$=CR&^qK1f4+3{@KWO*q1NI+$(snHX literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/IcnsImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/IcnsImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..966a330643be40b2117488f20bfc8d993407822e GIT binary patch literal 9368 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 R=G+go%Zv9Gpg42-{{oTw>L&mI literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0f07dcbd9bcc24e660b70ddc143d0c981e42d873 GIT binary patch literal 6553 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®KCyRp5rMFEe2#?TZYAKog@qB51eP9&%i&!E~B5tVHb3Z+nB$9VFr@V|B<80hitB{i!4{E^?LNL|Z5<9iJM5-w z?Q+G#2?7CNxX1Kxujw9{D$TR|qg`p?QS<&sAfdLag=~+t5#g7CA#PG8N8N}j=ZxT} zeR4wg5l`1pOCT;&9fb^sSk3dO#1L=wQJRAxkj=m+NfUZ>ipAT=IBQf%sEU)MkSmBr zk=QQClhY%@tO+hC@I*G7dTw;bg`dQ!UyQtgu5V05{ko>)GuO)X= z3a04UtX|GODtZem1msSV7gVp}k6{w1m=#S|1wIhcuF<3}%rV(t7L=H5*!Q zNn^GmhYFTSTWRc5qax{kF#t;6o>o9i6obQ>;=GZcB6-;9-yNVU)IE#}HxPrnM?%D4 zx=^JtAhr&N23@Vjk#bMR>6jwr$YPM0u6R_dwkw-%G04W(DeYpVjnXx;;>4sPX%Jue z73tn>q8Qk*WHu$QVeuku|8u+oi!SiM<=Ip)5})Ve%Raifn<$EE>iRoZ=0(%}c-sI0_R4|Y1kK8R) z3aXmNNxL4^ZBiA4`YNg=^Gk_Kl*o!15pSZlX;u8Ek*!KV_qiY0PbzJfqDEw_HEUi^ zf}kiH@mj-4K~<+jlLiq{-odM-r2GYq>kg4@It`E-Cxy(r>Xyl!aZ*_&p`VkGq3q}| z+Y>od(D)_T%M=JHj%cWs22rt$A&(T8VHVg)yoXqUY8y5Rn8%?Wa)ExS)+n8j{{UPr z5coR+^cAXs#x>>xG#%saD7OyN$Z5{tfe75-dTm7H9%mec z(a63XhxWgwGgA9o02_HBZ>o4oF}3^G53nxfe~cW*Mc6z4a4n~&`~P?AxDA&cM;TjW irvXRVNx1%`g*cra{7PFmknHy8egCJGw@>Gg>i-{$@98}N literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/Image.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/Image.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..63fc10cdfa78991249af84484a033dc8b67ad397 GIT binary patch literal 97231 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 H!ZZJWc7*t8 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageChops.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageChops.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..405003c8cdb6410c3b8b2b9ef28cf4a5de2ebc1d GIT binary patch literal 7784 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 G`TqyPqk}#G literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageColor.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageColor.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f7880f524ccfab166e190740d48c5001223340a7 GIT binary patch literal 6502 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageEnhance.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageEnhance.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..661c92ddf6279406533e5d5970ac84dc17453cec GIT binary patch literal 3506 zcmbW4%WfP+6o&gYS6^Z$fshD7!3IV$Ga(?9SP{e+LV}DF#TJVZQm1CBJkvu@_fTD9 zYb?Vic?&krww)LGQ9N|8(g!|a3d$2r_gO!usW4E4z zofiez1!L!77extn$=C(hWw8Kz!PrHyxMNk8p4)g?#Z7bfy1XUR1#`O-gj%Y!WQ-ln zbrX~3E(g|awB#Z>Y1M6E)g56A=ZRH!g$vJKTJ*n-+B|B?Ce0pS^qfQ6L`%-2)7H>F zvN{f$dt@KeTAM$^w#saDJ(RkyqJ;5?$;_i*0d2Qhp3GVAamBlAk2iI!*4YNz3uCT> zsKt755NWp0!@gwAIMON(LmJm@Id<2Tk*-c$jbA&u-!U%Pr`2nWhX;I+Fg4x}{PhMb z-ZQ>p6|{nghuPNFPIDK=2U3mpnXs;Gn zXA!K8Rd8$mN_dTxtg>B%GBx zGvrCK{^+*{_qM8rj;wz)aar*cMYx`8gfbFoS;&@*q~cnpITN#rlX{5^_v-m9R!=Qe z!h(NyYh5Vp_$W^LAscvu6x1*`nfc>NhI(UWWa{#^b?%{ zH3Fo;LrSR;`MVS@6BE`1NDayQi4;u7jAu&;aw4m**k~o;im4_RYb=ON631+D`4Q)ZVB&TN{xD zqaRcr3!XZvh?`mb0v-@TKZpYD``0idF-5@6C zQQp*zri2-|h`J553Ak77 zE6$>QxH_g}%C5RJzutHI+(%v8+DqInq3z(QXs)ZtN) z9nxIQk8j5D(_oTnz|Upk|{R23)ae1T7zp#vzOSsmBt5a5BGGtgWIG~O@| z8=5r(jkBHcQp`jrzi0kSpj>#Y=XZX%e}DJxnSg0ftjEAC6ENo|A$uKOKBO0uj|nd{ zvRx^qmXSTPGb4-U^koX5(HKQsDVjXP@kE%?;;rnk_a%{TB<`ZSd~W6Z%IeC>e~EBO A4gdfE literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageFile.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageFile.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f047e05f4038efdc6aae75c852c1bc4fe111f39f GIT binary patch literal 14776 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 Vu=w+azi?{q=Z#|F)toms^N$AK(DDEP literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageFilter.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageFilter.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..13e7fcd7077fb07fa148898a7afc8e456f1c9c64 GIT binary patch literal 16307 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 TL*Mdk literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageGrab.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageGrab.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ec610bac4d1532858c75627f8cf2aaec2d01221c GIT binary patch literal 2462 zcmZ8iTW{Pp7AAF>(P%CnUy|5qn+n-JWY8v)Y>E~IiX!VKc3l*Xw+6a_kcFWUIb+$n zEyamF0|_YF^lcxCechLt$Nd5OXZYGDzZONYTNL%4!*N_^CGd#kA^Dv{^7|CD+b)6U z{eS;6=yeGB0UK8z3mT806kmX0gwdGzgc;0?X=3;WC7c|Y%sMv22ij}-mj2qlt-m$D z##~lo^_SGIGlw-^65nBTpY)n%up-$#qhNbf**i%v;;P01aT29lAp*a8mZ8#s@+p+! zbC^(?jEsr+S&}2lD1b|8%uHs?>2ss9DqC7JyR_z%5?Pzo83b6`BU87XS);V)w5pZ0 znL8&i!kRU)hmw+r9C}+N0e>B8Hu}r@J}GPaL}S^2^|N%2+OtkcOJi<4H!G)VRIYSp zORQElN|!;JWrH;~2y@q<+#sy^h_KeY4wyvzSUM16vjUXoR@JUL)l${fsO_@3PRdT% z0=uN^U91lw4~!Nf0NkVQ_q1^2GHZWJzo9ykl@c<8HUB?~&P5bU5Jh)^{yi02ml^6c zd&|25w|Z*b%hQqHE<(Y18V0!>3qCdOo+=xTxNb6Ws5PL@-z+cc2qejiJbr!9?=HcRu^mS5FQgNL7Ej|3rvP_?;`` zPaiz!E&JABke&KBqBM-hj330ogbU7aF_xVaeiK4DSOCC+rz|QUp@}kvhswcZ@<1Lc zBT9TXN)9lvoI|A9a9D7utRk9nWwAg8zHxfrHzxNX7e18Al#qfgqS2xBYlBS6Ecq7^ zw;|QDPd+w zfld|_8#RSFBfBzKV?-;nG#-<`b}I{{!7Z(k@gb?qzilG@ksdIYXjyPdI;Tes);u=F zOX&jjpCV>J>YU;{ zh~-*Ym)F0=SW1m~qiUAT8LY4nE4HTNdCsn}>+wc%vuZ&Ot=SvsM*(9uw7&%ZI{4qL z+Td@`-dgw>BHUsdC@NU*-Mo~AqkJ@d4=$-E5BU~cWKU+^9b}saZ1sW=ndt33-QRiU z;XU_mPuFj2;(I3oZkv~LkwiriWoZv?vzScZ_uyIh?!cN}7)SXagG=mzZhXG?WZTQ5 z5ap+bP#37vI!~F0)7P{PyaK*(`;Dv!fPGOeLA1D*CxN$1Sz1Zx&RG{)Q)euPcOQHZ z^Is^ql0jG~;+vp+3oW9mvzLxECHCU+C`x_v@y;gvojRLIex-Z*@ORoEWiC^=)AORj zOM>v}z865ie_5!5m!6a5Vl$&#W<9zIZl!32dH!KU*%!OxUxZ(BB^YMi=QetDxwsy(hxja z3qhhXRo_He+<7YAMWpu-sr71K@Ct~#y6bT?(A$7rYIQf0J4qh%gr|}-t)jh-*uWKT zf>BPGB?;_Fp=yhRQuT`-@dom2xtx{7wXbEsMBwTi3$bpf2~FhbP0Xd6VCHe?g0L)u*WsQlBuYo}P3iY!q*yV|PAIGB%F+CwS-u-Ui1& KI0s+TefNLh@rr2x literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageMath.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageMath.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ff61fb40c63205618018e2c75f7d9e20ec30b28 GIT binary patch literal 8007 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageOps.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageOps.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..61666b240e9ede29660f74ad598d8d61801c99fe GIT binary patch literal 16045 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImagePalette.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImagePalette.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3376b9cf65d5d6287ec549c9853586fe3a23eb7e GIT binary patch literal 6843 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageQt.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageQt.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c2c272361d33072eb5298f69c9f8ef469d0fca09 GIT binary patch literal 4390 zcmZ8kOKcp+5$&Ge&i+VBqDfJf<&ppE*rY7Qjx0EeDcO>l*b*r#Hat+g7;ZP0L(R@E zdzzF;?8ZST!$6P(MquP(2Ow|JH9;;x4msqOL+*1-P6T`i>|05azEWO2k_Vq0*EQgiN zzsZUy-L};4vCh$?+Np)LPCcwcClkk#k;g0{i&lDieV?eUFLLa&*fM1M!r28l$JhGvZl%pA!6i)_8uGe0Z(F^U|daEwj1n zyKo;v+nwt~ZHbB(XY-L>&iQMhJHN4@@yTK#Ukgj~8}Cyk=dTtc_|VANy^*sm(zW+c z-NJhrZ#IIW50FeT%~tq2!&a(I`e*Ox!X-IOfTf9uwQQV~M+?E@8NlDs*M7y+bX>Dmq zs=T}~cl|B79=Bw}&bfY-PIfI#pufJ1E^^^q;dFA-NkDRaTFB|Q}lV? z>f2k6;BOjZY|g$gmujifC}{*Y*HoGXQ5xL1dMRjildcNlRCj|YSkP#9dXbJ76ZvRJ zwxya*$ea&8dGLu1f2zmOXgE1nIdA8DG3Sx7WKq;GnA@to_&O>Xd5Jmdag+xNpYc4nfWn5b;c4}#BVD-%dr@cdku7axm52R?b}wz`cCXh_2IV8_2znKzE=7(A{p&rMzSk8pce<#B}Y zZ%r9b_W3v)I9S>d)|Pe48n^?m@Af@)M)1@U&LkU@`lTup?gSh7eLs7r574*SpscyJ zXv6)|36x0nFAggG^0titsq{_J{LQzG*IV5b zKGInrqt9f%*_-fvxb{{B3_46b5})aTjq8m)7*=CaJ9&tm2R9is=2#JSr&ka1yZU* z7zjtOe%9w)L0^N=`z zKMEx>mjTDGVIF}5f!7jzU=tPz5b7DtkpQe6aDpvsz%<;u#nlDvY`c9pbHIcHX-~LF zEAMD<0Hl@D!0EG(H+1NvnzV6U)tiLx@7}^rygo4krq*%G|>BP0lL4ZiP2Uw zcR!`IBce_xKX-KRNuzEO^Na`N_~1ljOj_5v&Fw; zf3UXrFJZNn;|Li3Iq#)8hV@}<)-=^=np628O4j7tN_AE4DA`l$hqM48 zzfmbNX+Rx6LJ`*F-Bz-efsZtodSMxveyP~}MH2Y|iInzsL~25>X`=CPD2_FCceRy7 zS=L;Z2~xu^Ae{Xe1w;7ZXICt91t27k@(NuB+(Um2p;^>?1nMbXvno~%qc!||TpQ>` zc@nZdS685|MJo3{qbTdD0JaA~nht`S%W)RqFAB1?MPpXF0*K5$pAD(Q z0c}QPx^kdzAK93FL^6gH<0WDqxKCn`ur%t(;Dt6YkOnf=%h*Vi9Z*FZo;S2K0Q`}b zi`lfFhaHBwG^P*CGjUbGkAl;JemvjZ4Fk=Fl$%wsIF?3byJuo47D^vl-Si zsV@_YylKMGCa#h!87zmTxML7`pXcRfvw&c;fG3eeHHYHQc(ZX7%=g^_ZWV&vcaG=t z&9UL?(|haTYQ)-PmS!`rG@Hm0Aoi%&n$6X!vn6ro4c9gF=qFfBnH^k3 z?N4|OK>>`Zec%ov+dTY7V?PH{&tU{Ch-RqgsW7TdVHmKFs521yCkFQj&;sfQ^pkEv z_hk|y+DP{r5Dp@|4eCn-q*%#TG*^+O!ZL9UW0{6kSlTO=I=qK6_E4~}f02Ho8O+5o zZ{Ul)6B%qgt>{=_mED4W7Kt--n`=5wOeQrfbND|~2LB>Uo0MvDQsIEGX8xO-UH}%9 zESNBzCamuDUtNn8rC@Uc^AAKgGW?%!I4i6_YD2nE`Rd-FQA8~o8qPesH#nS0Z4Bqt zxei?=MV_tQSW9)>DY9-jiZmK$0B@$FB$2`-cSB_jIW?)+Air>|u{l|5pJn&C_>JQ9 z7wKTxyC{$ykt1uihpdR-ca9ID%`IfeF=W&IWd%LQLBlJ^v_7a1vT(_t@JIZU{u$32 IoARCi0}9p=xc~qF literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageSequence.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageSequence.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4b83b339434180fe42938d788c2c874ee5ed4c4 GIT binary patch literal 2335 zcmZ`*&u`l{6eelKR-GScyQ1h}?RZ!Z23kA725d8mpvBUy!G^4WI~4U+$cn_oYV|9m zoW+LILla=V?z~HS>>sdyM%SHs-fgFSkBS|q+hp*G5+BL$eSGhe{ngbb!}a+ezx&+= zV}H`a;#I@LeKhki%(pCLAwNMo7JU{jg|*N*;e8&89&6PDcwD#yp6;WWbr{9q$ND1V z{aPr(+6n7Bp%X6Qz7*EO2JZFH4KLx|2%A`MxpcP*rTrq){$0*kQ{s9ujEoFo-xwJs zd8`tZ7DoE1jLuwTw(~*-g)D}CAp;ETC^<4Jltm`vEX(aG*@4n_QsVC^Y1IBmrGaWU z?clR)WG7-4R#9>=`04pzAhW!}LJRpppnyQl_TL%HC=JzNyTUhfwafhy#j(_Wgw=qi zn~%HdFz61p$p4|%nI6b!SB|l1p~nl0`!dZ^br_ifA=;I8wV%vDc5@$3;GioXAb1-` z6?xnG2E_gBqP~OnHJZ5tQ?MzgGc;EVoZT^h&8K|IJW;=vybdJ&UoRHxhmbOdB zDD`r3BT8g4GKC!a2gI6sDHBx;v#{Uvk|^~ozV}!jbIQihH-1s*a_s?Zv@ zPWwQm2c0EvVJNIz?T)xmP=Zte#!ak8fKc@IjTgq&G#7jYVXg7WwS}#Ajf`?-3S@c}9lK47+wDKxmzYG| zc^)N|u_^Zfhj#SBPUJP`@ChC!pPq4u)T>x@C<*x&Odur}IIWGh!6|qKr_PkmIpwdo z>UKQLG8YgHA%pyV*A#$aI_hto#fz~zr zEU}CEQu%GSTuQJMrRsTQ)AN!n9L3aM@x1+!AD@jhJTJ@w&(pM~zDnjJGS|tRgRnh1 zV@=_Zhdo=DJIij}ZMZf2e)~d}F2Rc$Wvdy$pxjwO<$ig}_V^LoLmp1qCVPJ8s5Y&g zinr{@nS$|9oG@f-?U-+}WAG2J+Nm>j=v4M^ykYw1U)e5)Jctu_D#)kDrX>B2e-rSm z@I1)#I8u;gxrc&H^mC21%t0aGcr+X3LjtD(jfq)Q>Zw$$!k?_R;UvG{aTcm zeltpDqFpwEk=FPORy&Yv>niH=0Kddba~XzRYVx{pP@k^2E>^fEL2N-|MYS6}F0eN* Ru+qI(mFkA2fMjaz_CLx$EVKXs literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageShow.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageShow.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..25c4e386a1b59368aac20d28639f1c0483321626 GIT binary patch literal 7570 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 F{0XXXec%89 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageStat.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageStat.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c6d59f992b0a9fee73d78318f833ecd11d689e60 GIT binary patch literal 3659 zcma)8TW{OQ6`mm}nUZD4xzv{=P1$TVjdr_Mnho|+q(RzEkuI<`w(9_k3Mh!NhO+2T zq&*x7wm?0!N?-aH`Vv3p2lUVIwGV~=LSMSy8A>v(IBiMr%!P9~=R4myGh$_>&hR|` z$KS=Tt}ymbYLp)vjc54MZ3xLEk661Xd7GQI)wW(RX-WGvllH`F+kxG7B;RFC=L~b$ zPKRXqnXlPJZ@_4swk0>s8oX^wM^;`ltWlLqC@a#HHI!9Zm&+)ZWJ9i?bmgkNg0d#p zb-96Z#ptq?JG)xwoeph2d#LW>`wCxr05S41OWnx$8(n}BRR5mEn-0^~$rqf_o0$=RWU=*-X***FTssph-O&}vC;TsH>8f6${t1`X zO*TP^bzI2+j=eLw*9}#wJ)!mo{UFv}e}L9r;Dvp$A9#uKqA=BG*oZZ2d98;=vadux z=e>OO*IKJ^Z=i$UDwU|b9;RWOY7uvW+@WcC?d8eg^k+qhct6PPD2VgQo`_}Iv~wp7 zqHcS|?ByrQHmLY)TWOKDNT zj}`i1g)-+ugIOWgsCU_?$uz=p(F1`jItxc_*59+|r^M|%y!edUmA7BP^eI4!l8f%1z2WpF|`KOc!o?c z=0F|Fpk^Jd5&B(&{La~bu!16U6*&|*5;nOF-5|tq(@_R~9_Rcx=iwr>RSd+i&oC)n zgSpXXxYZdgx_LC^-h$wx!T}(XRdgrZU_EyVSMO7g3syI9hVhJ6{ zx#}k*Hb@X<7d2TXA5VAr6#ok++iuO_>-^^2$>)PEpi0J*<;KasK?Tm`a4w%a7kmY_ z_s15Jkgc6J6jf`UpDc=?m@P2%1gij|K z#QHfFOexngo3OdZN2_x;nE@A&Ay3Td{~a3dLFThD&YiIh%n%Ad>gL$V?97=Wap1Ef|QfVg46=?I7$Y+TVOO-S4wR}m6qXCLJp`%cF+~4JWIX5O78x5(4J10G#c|>LrG;?Gd73*t z5p{FEcPRtv#DGGB1FVv+Ls0Ih({%xf3Xp|7VSFl0T z$;l3Yonb^}#)uLke6&u8eE0j^MGjO;9KiKS_rU5Sr42yZjBc46|o;Nq!y2^DVY%WXUpXbc-w-3Ki1ralyQO zY(vkp3%;e(p)l|vYO|wqo(k1%`oF+`V=;F5GyYAFNpfbLKPcOb0T*m0?@U;x35?Bt9n5BJqd> z-FVcOBCx1xqybFaFtyNuU$ui&ehF|hmt8gGpLa5giq czKD`N5nZ-)?mj8he@dDf(_Mt2Yp)J}0E&$ZNdN!< literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageTk.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageTk.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..943630456a7affff324c494bb5228254527ec868 GIT binary patch literal 7603 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageTransform.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageTransform.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5781b29c6d87f844f5c8351877e775d817a498b GIT binary patch literal 3521 zcmbtXOK)5?6ux)fNfVKzv`DbA5E2^tr8H5Dos4so{ZBw*B9H9 z%tR?dqHF#D8<5!a2k=K&&XyG`_N@4h@4S*GrD`qN*T;|J^ZJf``QqYyfO6}PU-&zh zg5WPAW=jFYZB*MrBLWe|K{wnD!{Ez6iWn)%Jm>=Gk|={N zd%6g^BIZEPdAbC8UR(lw$K}8(k?BZ`|WX+%f7! z<3jz39t$8&f&;2yJGUJeav*dlbtME5UW;mIN*ML3WK9L+u)HrFY5W$5@!8AMvq!U0 z9@FDOZ0LZmQ0=>DPJ&;9--1WECxs`)liWcFlNL^j?Ys(3^1p{ahZBJef-M-%xv^)e zB`*_ft&ZiesL1)lvQC}Si8bUMFZvmo4XOJ!swF9c+(LMKc`EUQ`Bt?=rcHQPHk-rw zX0xkBFQ)!Nv-y3G$JvaT0}n5l=R0#2Io*(v3~7HE)spI!u#&Ij{n&GXN?y553$LP? z2I_8J77mKLB>~@5^TRjR+ijJ|iOhT(o}6bWcO*?Po-pp0FmDnz(WyS~m+f?vW$j)P zk)fF5kELateSFRJ(pa)pUSq8qi)u{Nn5?mOl^u0d)M1fM99P)Tk*uwZb)K0!(#+^1 zFf_V5bM)j;*5%Hqex2RbhDi=asp`v^t@dkdP-PiI&r0`P+H;xEHGfPZkJurPdy+w7 z5;Ped!%_`wkoc>d_1Ook#Rh1jnr9^Zkn}?keuIPPDbskgvXgyBktQ$vbA)uM)+FW`vJJF zdt8s&iRtz-f32n5@b1WtYi#{Rt{OQ>CHqr9v9XW5L=-6h=PSQ(t6DZo2t>0?%?g@f zx!DvtYBmibF4!%t-@UuJwUHsshx@egflootP(9KrVPV z(?BP;%0BEEIYhSYwT#@SU>WP}aWQhneV$VI8yPvC>=OWlhml~dfwx?wO(Ko0X1gi+ zN3hbTw&}LF8qMz`yC;mYQl0I9MtJpNM?T4R9;rB%*?K^^F)H4SD907xEqGy?n)qcmt z19bF}Bp88Fc32Ckfwv&MXUCCnI6#Xphbh6zraBR1V{~D8rc-G+rHI!8U8|-01i4$| z?3fw8#>OVga-&UUq}mFJl(3d+l{h<_+6Z(r`R9ELnYDqqNE^%!tdre3^J&4z_S)Wb z@>({zSNB>!4@pC}{s@j6-|cK{?OY7UD_Hu`3>;SsjYO!Y%FEqCiw}ETOu_ggc6kxU zcM!uJDaJ?{WA-%UXoXRfK@Acl68Q+FGx%%ko+0;M2*5M3rQ1I3%>Xb9>59@_jEwG_qK>U5#atJ=@0}(ZK{kFpU;Z`SWz92@lF@GmlY6d_eF8X9@k*tjokXA&F7f1VDEE+(G~3?*;(=8vc{ z|2zVJ^5+YISh&BjeeYsZ(_8rw>iAZiGc>Y=pN7qK+{$>=Xo4_oga fzw^8|=dkiw_Fny*ZgBsnvXEa{T)MJ!b!quO7jBqP literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageWin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImageWin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3bae201b37da56b86cb951997b9171d77e2f099f GIT binary patch literal 8135 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 Z69<0zeD@p;O8mBAFVgirV}9|Ke*(gceb4{^ literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImtImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/ImtImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30ea87fdcc6dcd20050809be7997a5c715f69b4a GIT binary patch literal 1240 zcmZ8h&1)M+6rXRcWyukykOV>z{UQpE_s|~FQi35(T0vqA4n1t#E?dn=T5G>FJ60^Q zy43jtaxA0=>DWtez4z~!YfpyWdh4ZqvzCkLzq3b8~~NifJr2Af&wIoqzO(*KvEh|j1*ci$<{dFUn9w-c!Q)+^psxEKq#_mC~@j3 zu_hSuk5R923ANDSB?jIjmiN($5p6HVd_5+u9 za}iJufXaKo6bi6J0g*VMk_1dr$=;xVOAeUAw)(004RkV)q*621`QnOV7p5zl!{28>^)duDspswm*Iij}|DF>KX_V`;9*30d-`sJPsQ*gwrqB`)w1SGXcW z=sdgy$XvE2;k`#GS*x+!&je68K^#%S|`Rx-jA) zoT+v$?ar$XYFVnI*FAD&cD~yD;L=4{{yLUsY{gi`qp=Bi5ud9hAlV~}pZ7YJ3=7M& zilp5>o@XXHf2wt^Ei09p0FM{SGNY2jvNV?}UJQKpgO$S*!|*PTJtyG literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/IptcImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/IptcImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e5f0353c02e8560efca12a5d4b48584d5ed0f94 GIT binary patch literal 4365 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/JpegImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/JpegImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3658c6b6c422ded9033e0e693319b48d8ed3cdcd GIT binary patch literal 17507 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/JpegPresets.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/JpegPresets.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d1bebbeb8d40bb9b1ade5fe8e27ad179ffa8b88 GIT binary patch literal 7904 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/McIdasImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/McIdasImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..006b695971b5c92b092c3b3baa651dcdcf819b20 GIT binary patch literal 1358 zcmZ8h&2HO95Z*shv@F@G?Z6cf1Zsg6<)J3p7y*g|MgE#rKw=p1sk|_(b}7@QNOnm% zwLo3!OS&A3WS# z4jdlCu3i90B56iKBAMhFow1P3c*rS{LOO3rD1Ic;m7TXlb`(G17d&(nyL6Rv(ov2Q zS7=F(i0`%FiyX8R&}YUO&*G^vYnHr7Gc`fQ`-MD*{S0~Nvmi@<3Ci>O zxXADCeHT<|t-dbf$tmPl1&8C8!K=ww#+A+VFq==)e6Kt=ohY76R9Sxt!77F+P`w5? zLH6cC-DB9*T>wQwDoMyB4Y_2YkX#BVq9Yx+lWR6_guj|FF^?NIi(v zx3M^Q?1Ih4kN|EDNy0#~4*bAMJ{gi-vUK1K+y^^|zJsSNq@Z`@w%mdH^>#_)G@@~( zoA5+T@g{vqpp178S^@*K*v*T26z8McrPDZF3-Q^5{j^;NR%3?@ec7()c;Sp6e)HgI zE6@!1``JL;BOd~ltw@c zr5zQ+GnJe5qw~CufBQk}LWkSf;7F=!qSLZ2bOb(($kM7dZdL2~1n4}+=?ph-nHn)G zq%uxar3+;QVkl}D6~6-~l_eU-#LzeT9?}kYwja1fl2ob=(SIt{$Je9rZGpd{RQVUc zR$l@T-lIFzV=lc5T$lEkpzaD8O1Id6j@aVPtwG+iUJhWyy(r4#nTjIQjUq^3o+00h zqF?86cCB$&r8QeC`k@|ak!#H4MvnHaW1<@SFoIp7$b+;5vohb)`0@+>VnGI)u>tqIE&qSGxjf_m literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/MicImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/MicImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e0a844fdce733151a7c22c588c25ed1b95afe13 GIT binary patch literal 2105 zcmZuyQEwYX5Z>K8pU;ltwicA8Lc#%rWCU>}cqpPmjnbqTXi_y5RZpPP^>&?Ha=vr- zE>UbbeQ3+CKtj%Ae*k}GUwI*a0U?!d)=8U`p0u;GvwO31-+VI{&Ck~vp0EG>J?cXH zix%gf3Kq98iU$yqNuIKRNg9DzljA_vR%F>;8tv$_}GERYM!cok}6ZVyK<+u+Tq3D@i8N=Ixq5m*|yQOSM$LzFO*)t zfGD9!M6ihd4Q1Ra*_2P%t~iDaorf%2a#`t)ZgF0X3mecHQtY|V=g;i4)~0OkUV`=VgiWtVhrCJ# z)clR{VwRWfC~E_+HWB69c9I=LX(HR3Kdo7drVMGK-O0bNUcDN-ODn5AO`yHwY;~# zdXA-@^O}0jQ^!&dGf@xky3-0#2MPDe>aIVnO&FzoLKcwJHi+>&QdR87J8cVEXD*lv z363z{QSqLp#$xKdOsdng_-mW%HbMFlwt_lgQj}Un1Kor{(>Iy<*NuyEt*Q3)RfvwO z7tVC!6U{Q@OuXs4h+$hB<8|(G0i1!iXo`jyU%7xSMSP)_iKaAcEfezq z2R`^E-{^1~%1b^A<>Ix*EmfL6qI+$k_*?hT?*Hzg7HjWWhcdn~zD{>h>h>IM^{F^U zFi2qw-NP9zajZD{MJASEwe`y~e>N}Miqwm61+?DBWN|f>I7P=Y&6N`M^mxBivm_7` z--6E6LwlAg;}>if4G0GO8bGf>y!_w-c5hB^bn3bWLPG77A&5+Q-^W7U*JE2D8i^;DjlYIB$I4=MhD8T{)EJ5B;KUK zYE%`P;{Ft)AY%E##V5GJU-X;4WB1U321(qh+sB-t8>_ literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/MpegImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/MpegImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5abca8ff8726f5ca2f7a770ce0e140187cc95e6e GIT binary patch literal 1938 zcmZuxOK;mo5Z+xrOi8xu%4p*jL8}(M2th;?4f+5A*L9n?0UE)m4*_^6L2FksZIM)# zv=Ir)rOv`pwc0DJh8^?(7bC=KE%5leM)b!}I9xKa$o8WB-t{ z_;^ruFv=W4GRem*;}Oq9Bsl3}>|}1_a<<2$Bi%Ply5}PDpn1}V<|}b5&Yj3t{9;A< z$AR)M@h7wfX>vsdBXPabv?~qLWb=S^TUQ)TyTW+SvSg%8!+xHoW7XwGq~8v(yYvWX zI~e672*n~UStKNv;th+OI=slO1B*Ozjdfo(WE0;N*@DYe)7VX`gG#F;8_;n#56x-( zh*5qBG3Rp@gAYhCgIPCmOttAOojW?qpHZmgTYZzjKkiU%Fn`adKgZo)lrdu)%z|i(@H&@B!d(1 zQil7_ehHsX)X4I)KRz9$d2cc`K^&)fTE+24a8vpajQej&VVn>~c*7Ws%il6{>M_^{V;=v(l2vXX|$%(AE;y z4(w=H_rGBR=ivK<>D@WI;Fs*Rm?ISEpIheHOR^ABY_qwzhj}dKi2oSX`3;g5U+>qa zY_acAsdK&!xy5!UXKr5;IadM14JA*s9^m!4 z;2U@sv6A5uR-%J?%wm0t$t~8eF+*i-vkGXAoeNhABH!Xe)meOe0UsFJBJAi&U~>AJ zVyWSH+QK0uclpxmP`ly|*gL4olXUU`MkW1CsP4aoh76X_EM@Lv{DgcVu1k)L0nK%U zd@c|n@56Z;Ha56rhR@!L#m4$2Y_F@h$yb+XrONAf1FHBu$y6MhW*ldQJRQ?~HI84N zCgXZXuaQfeS?he0RH97iWiV3hYE?yetP zJsj7LkPfaHPrAVFnYG(~rTZ*$pYK1}Tk1hN?6wE#)Vc@H`D@TvccK(0j_y>r+0Oaz zT)IfUYxlg%+6Lbth>ty65`O=xgLBfq(7CgXyr?=!-XXu8A%)=ly0?2ppu06Z+tijB z(>j>uRr2bI)`d1McvZ%W%XFr$%g69?fj!&sUR+F6{sWG))G^T%>pT#+d^VSm_pDtX zK0ko1rkhpYgE0QE&{mQK}we*fI%(%Uz*qZRYl} z$!O+5s?n@@mP%EGH1Bs?hH2tjQ|+3S_%O{AJ+0e>vTy&7*0dU>Wu>$YS9h=xZQico o0#kX3$jSx7EX~ya1!;oEb!Be9k5fvDdxNj~>tD1t*F{_W2j3KY-T(jq literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/MpoImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/MpoImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc9592cb9e0c44b2adb3d97077201ee5684542c3 GIT binary patch literal 3448 zcmZu!&2JmW6`z^iC6^Sb4_dLUpb54?T7+mrDoxw8sAJTy2YsGbMe2>OZt05i4v8pIB(v3zBg~)@4ZpjY}OgR zU;gXwVRwtM|5D@fXQT0Zlza#xndC7`xX%;ei^TFRPJJS_6UVQBx1@c-{OadSI4RCoV)SY&DUX>XWiakq1% z(xYx19dyUX#V|`h?)Oecs)F@TmKEoL$noGd|W;Z2lvZT!1iP+C5?~ ze@pxS3B8K>Tryus?psp$wzPal+R}l|EApDGO812ORaujD^tf_OHc;1OQ?8?~%MH1S zdQCOtw%n4f6aJF>O<94x-zppD`jL@+>+$}R=@y9h!QBV@cf5OdKiu8@qxpT_MRUk_2y`c@-744!b?OdtD#Z5GqH)}51 z39_+D%grF{7fJ^sT)XLc&1q5GH^)O zPbQ{whlWv^JkU$GI+wL`r4hV{7=(mHWXuf4;e8X7J z-HZ4?8C$srIs^IoH9Et)AOl$ZFV|miIt%GM0&I8K4fZ$jrA;^B*YAZz_@v*@RZ+Uh zI5Ql8WJhT~Yl~8Jc6}#-^$Xp?eiueA>$l=4FM3%rzWp(YBiR)`{b<$BS8l9xE6#dh zoZkj>zWR;8F?5r5-zH-4-t;TMKo!ZjtR!R7#dp)7uYtw9yct}U5d`OI=cNU>>bJ0o zzZT^|m_|uhD7kR2tt+egV@=VZ+`igRLdwd*5~ZtED6=#^Mvx$@l97h!QhH$uV-(|b z2$^gbB_|*=ejQF%=k9l|RkyaeiSttX7nE|Ttem=dvqRw*4iXJ3o8AKbnApjWwIpz5}X#uSe zQUih7n!&-q1Mnj;cR+2)Z=8W2JrxQHFT_mbkBX`kFZtKJaA&Bcbtv?|!P7c33w``1 zdtnu|d7XM^)+tF?llCo=*dTzAG+9BZ?ywj3%$_%;d&>2<&~N>e%{OEX(i~ZzIY&%? zE7unF3_V!u$h95T$DYAv+LEO48qHeB_>{?pY=YmqLDFcnCD;3+Zx86K*N{M1ux+5Y zvG;~-IlZx$c@lW?`q?CvpxQGo8~x`yif`(9)YmsLv8>%G3LPCx3guTG?>{>ptLet0 zP!E*%Y&b~{(lCmn=o`i&F$b|ge4C;kF4y3MNQqeOubJBndPCJaT=)QmQvEg&!vDg> zZF1tW{zVv1)Mr{}y0nldH91yUN7C!7fMyuv=pECW7ojflucBh;SAj!P-7rDamy{@@ zsY2{EG|8m$?E=X{zk{_1=LRT_IeJ;m)gVFmD0%7w$_37rIex5ahzuk%gtfR=cdBQc%jQpyt@^6Zs(NTGy^ad+}zT;dWm+^BmgtWk>B zgyqsMR2&E3776*P92)(e95TF-L#LSjX8JbCLg9y&HvC*r=KCW{TQ)1K;|@oQvp=&` z?4nmr4MJ*ZG5Is0U_l5cJ0fbdm-LgDo4dAcB#Y z-dM5S#q1T}lV6jcn3GX>E=W(f{#-1A(2O!U5AVXvb?@wZro%Lc_a|O4R9=+AnbMx} zvc9*H*D+FL%SB2mzp zFv>mrRG!0ABkX+aO>)(r#NJm!m3s90h|+-iEIh4_6tbEZ74#hO z!rTbke*y(FFFeYk3teP3IlwYfp9alCq_fd*+_*h zGAzp0q7J0Wdpa5yQI`5YKJyy&ycbV$yocdzXZeis2yABFV&)9`JyMxcuKop)UxAbj zxJD865{1{Y)SpnlLE!~4xs`146O{Zqh%0Qku`OJue$BPq9h92DI}JlqyOWHwX$^UQ zpt@jjNc~d`X!2td@D>luYH$#xp+44>)O4E&y}|Vc5!%UbYBj(M1#yr#UHl(->M)A{ literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/MspImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/MspImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f755b52b968b7e14cb3dcac8639115e3eb0e13d6 GIT binary patch literal 3050 zcmZ`*&2JmW6`z^?`w z-7;i#RoTC$DylrQIK#MM#>=FI(RCV0Gm?Cpwd!;1mTk^CXiF5%gF(2fijsN#BI>Ia zFP!MzA1|1Mm@cWF|A@Ene2gcpgXAXU--}lf;t_)bYjbWx-V)!?Ya@&wro?;_#oJFA zth+<4deMn4L1@UgzitndjKcQ)P|FP+9jW%#crQ!h_I7tKN&4;eBNZRD`_WE&IL`Kx z_`UTH+i8@k9}UCq0d}9Zw;p`bewYqT5L^AxZWON%$A#AkyInQRZo^Y5Kp59m&@Qo8 ze>C?Io^%aFG29*tgyexGMPN%y+Bj)PItb1!s^@;_unOzp_SU5KD2ioroHn<@D9&Cw zE{dG;#2nY(z~pS7opH%$e9AMC^HZL#W$<&#zu?lEij4emi453azimvdTx3qpbL&+6 zj7`PiJ2~>|z|vb-O8->!1f(8hOnT;ON(Vy!iSh~l{Ts+tS?$@o z99pG#6}faNXXkQBm$|e#Z(`SzO)+U)z3+9iY!hkVcRF!6P@PUu?sTx3QJ?r~r*k+8`!8nPUZMwK zRx}pxj#Oz^N5d>iV*Li3UfGl>2HKgffvn?6>GXVIb6XhM|4-VRP<%OQrG>5sUBG(B7|%|G?SQ;cT*+RgtAUcfJsh z*l*B4rq1u2xV(7ZVRu+o%k5K+3i!|GV(L!4$v<;XQV#z;7iUYkMgAYL!>?a>^iWNH zww#kq57qH6*e~Z^?)Jo~KwXulrM!e0_7&Hgxu2I_Wz%wAl9dk_X3At4GjE%Ssx&{d z;I}fZ8gJFSLa}g$6&|fPe3qA|6*C82{3|yYRoOx(H&zdy(f$^3f5k5%U&GF7x%-$s zLB+ou|KZn{@l#}Hb$GZoV{*y#`(<2aeY3^q&v9jQQ(shCdKu(fez)NFHMQf(YoF;+ z+zm6eC`u~UW)wGda@-t*LsM~+_W$a<(^Mxz)um;(WpihoskE6amfcQGi3Z|ccXI3F zMC;M;yR2(qB-1M(twtfDr10*Ml?R^|B{COk9gYhp&9Jq=IWdJRdXmaj9TaYw=}|W; zDx;X1dZ(w8LEwx@OW%OW!cnFNc%N=Bnn6j$qk+;eRyfBRU{F|n6$j;1Wt}kXpx+e! zuF8(W{z$cI`gOA5?u>dprO`nKyFq!UAI1lreiW;~#p&R13a$!%Vn(oqrj;B+SDpkO zjx-w&Rp8UvCKy0z6vOzH5;lFsm8Q}XxJx%cnDF^cE_jvOy!qU>>b!}zBG6*WkW}#p z|J+97DO1}4ZSW;tM%l0OCDGt-iMp6vyR6{#h5gNzqu+#e{e2>YZ$YUu9QFHYrziD2 z5?;XTf-}A4Elm6hj{#)=O>`ELnBLp9z@7h0>%qWuhG$??)y8ycbFttXa2 zAmE5}R@l@+-*8WXYCs|`SPtC0OVkHNH~CzEFBwVsF1~8axN63=i}8{fFJD6@Brc&o|I~W31pmA7PpXh1bq!;9%Z3# z`Mhpv(w*4rgLK$h(S%C+eUO4_3U;v*ud@@yp&n}!soAi>{rjY0f+U;?N?YR>AY^hb zsB5(wrJ2$|MT1SoS5UhU6F%!7(9%m8#T+y)RMbhP;*`+zJCeQd?=E2Zr?jV(K$391 UPDSVXrN&xgtLpi$*HLEw1&fKl`v3p{ literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/PSDraw.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/PSDraw.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8df3eecb7e48c7d767228ac0c3aa1a34766a5f2b GIT binary patch literal 5810 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 I>-MYv1`3bxFaQ7m literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/PaletteFile.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/PaletteFile.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..275ce26a79fedeeaf520b451805c2e4b3f1e7b58 GIT binary patch literal 1353 zcmZuxL2nyH6n<}Z*1K`sDk@fKK|&@Vfe-OkY7ZbqQ3Zt-2}MzjKvp`3G2&Rq0_l3i%K3nZsDT9JL!C+*r0GMWH{B6FuEwY#l|ZO0;PWGSm7> zn`oG&J9#l7%XsPA8jxGw={Zjyf70heSHmZT_7%Kb^)1yws1=D|s`a7r;p##=0a&5!cx7b0JoPNpMNJB>8QEA#MNu=8Tf%XW;xIPN;mp zgP{h1wy>ge&thE7D)^@xjI@fQ;7MfEBNLzL;9zo8WNFatA7xn*bk1~o79{auFrE}g zS$e_vO%!;ccryAtZSllsI7O^lh!vnQc0X@>m)k0o83uT zM9)7nCNtK}$4Ok+`qxo%s;ec#6|?eL7N_(P$Xq7_D+XhWxy3V6V+? z&hC&`zD)q4DSaVP;1)>(eQ~SONyD4s4z|R!`8v|Ck;d%urK)eIK?-$T)q?{;{f7I* z(JflFo{4@KWlFcv+@<-ex2q3zaYe~}GUpr;#Ps(1`7d4e+aBkWMk5`DwjPEQ`7~j@ z5r!wHQF3MR!cb-XFf{M-ku3&JeC=?q_p)UCJ9~p9ul@!og%tkVhFAC7j`hOBIE~Dt WDnPaRx**oyUEXAGiz9Io4d*{c7cZm$ literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/PalmImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/PalmImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cceae8060a2083fb7e8ed7ae2b72be15d6024d70 GIT binary patch literal 6738 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/PdfParser.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/PdfParser.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..41736c2c8b650b1c49d957156c87211b183af43d GIT binary patch literal 26678 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

!Kx)d<(4HDpIoWmT@)R=cdon~ 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 aFTd_=ABgpx>AQ0vHaO9j=o?Pl^8Wy{_swwt literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/PixarImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/PixarImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6fba0a70da728b96f850e4dd54038ce8ff87c8bb GIT binary patch literal 1140 zcmY*YOK%e~5VpOKY}%wmQPqM}L@peHL{~D=TwbY2wyAN{y@!$P;g0_UWeetWn0W(WQgZvmZUCb_ z1`(}|nT<|_55EcdP9Tz-Y1vmp4T+Kx{%rfP6pH(=xfU<9I*@*Mv{R&szt!7G)5z}} z$mGC})LTCr6+3Bizw^k?RUz+YytfBTbHBU(#_y^j*Cpj{v_DWuCmWec$a_7R6*rLu z10Yma0edK39_U+znXdpy5>P<`CTL&@7T9N1b%X;sxn|+wCM-_ibl10^ZjPJf($YLH zq;4rJ;gxb>sW9iVT%SRhkX>?21wEmMv|tlDrTIz$7f$I%I-zG?>x3>7@Y@qA>?tc( zXUh6)LPDq1+%szht%q#Fgty1E5LMXWia9Y4kt)kX)L?Z*T`csizCD2Wp(h9=bZtXp ze~lYSTC{lUG>bkYrvAbUtFH*h2;UHX0JPa`0Zz=YXo0o4_RLtCzXvPmM59X)c=A%x zupe5>uzqH2Ex9P`Z|1i~Nx_FNwNACMptp<@=4vdB9j5{i<-jhm_bkw4)HgKOix~gB zZ?p$0oJ%vA+yOCf0uZZ4J?dEvwqz|bkGl4F@#=eZ$^#qlkX{%jJeFZ-=E4x}-H%YN zh2gt>9-VpIeyU?$nC9sk3Yqt`$_kYx`Z`>9iB3rjIcfaOw_)aJ@|aC+R@%mPCmZUG z_Pik)i>I+Cph@4VgzJ&UZ=x}YvPR{JpswXWVMmp$HMVEaJh#bVA(I@rTvX+phVdSs UCiP?qPUT3dL2It(HE%W8KeliM&;S4c literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/PngImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/PngImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..86e5d02f50b20abc19c8ebc3e2fff9d971956605 GIT binary patch literal 29172 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/PpmImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/PpmImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c06b77684264d34f0e60d437bf235a7954f8930 GIT binary patch literal 3002 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/PyAccess.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/PyAccess.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb0067870777e306ef09338eace7eaf94511e9ce GIT binary patch literal 10579 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/SgiImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/SgiImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2cb7ae761f2a7738e59c7ea426af785e5b834860 GIT binary patch literal 3937 zcmZ`+&2t-B5r1#y&1m##S^kKV%?2$LVGXR6up!y(QcE^u^RWpgtYImpLW!~7NFG@l zDQ`xOtr}f$4iu-HxCE-CJy69Tz?~yiT!7(~80yMNvC zip3nm@5*1Ed;dJc*uSZ9@|Q*92Hxl&Ad*SmVea(HT`mo2c8sp+nqA=v&d?Set82R% z&0F9d*8y+K%v0uOrGqDnCnxi=Ad9l}2gl9bVRAv1pE6nYMOz%2ZeA|R3iJ!;S(3}> zSw>G0Jtf~9FUS?YG%+{>U-t9uML+LnC#G&!bh~ieyF@LydfZy3R*T6qUviR2zQxwp zj<74XdBj22jnul=^;&+K)t}oz$6x2E6AK{JGKw_4#LoWHQ z)mx3Z=8atgvzVJlq(q(wF13^ zhn+zy2sio%X{PQq8h$^1ht^7KVO*6!Q~uzE_28q+S8t}~=XY)nGa$MpzIuGJA zI3;rp$z4+#u8^h_a3o7wxCT2d%ua^x)-|{8+#9ZdRP||9Nm#wzQ(Z59?V=YjFol7> z=sxaH@)54L&Bi?86FxFxBQXwnRE;s`A^#0e5Ef_I$i!FRD`El8Iy6R>=4^1b<}%AS<6fLysh44m;MlK|LRHWWp>{lBjjNLAbi?TAeEGDIy-Gpt0R}^7Cgx%`9!>$Niy8r%H|P;+HhsF7gxQoN_Q4es8*Y} zv#Hx@A0iJqvWYlE2-;Hi;@r=}XwdKXRP4(Ww%wleU+|9<1+rQM8D{mMHPzZadWm0Z zVIqX7F;yYG)KuOR?cHuBY6W!#j3}i>v!4p(dvY37xi7rV!2eXKo>F=V){lR3>(i~& zx$hrnX=>G@VCbh-)b9jwDrhC{LSqocy>7i5bp80C@27%vToGf7sqOXqekj)$AoV*< zH?xD;2uFC7<{P~(U?hry9&ly5-vH2Jj8M0&{pm~x)6Yy2&Yd-LhG}8&1U4st_6KxX^5JVA{~WQ?_o_JfQ=r2FjMe?;c&;KCpUitH+TV$ zO?^g=mwArcrZ97m<&3qLj$YBQ-^R`nSSfij~XiI)7I4YvCI?OAk0;?7qtTNKHi9&$1wyKhL$x5 zt7g9nm^l#KhC{;P0S3FKx~Ms0&Y8r;TnZhStZe`c%&{pgX-|xiK$vCrxVj4shcpoG zmduT8nIC0j0YJdo;*l`|2x9KbGkrPs=F$z`nTUi`A01C7ZIl|f@t>{a9 zDd7JE?L764?FssmJl6Fu%vwtF&yjUs^*m>P)N92G3bH&Z#+kM=&T5)Vj0s>)<^e^e zq%_vq8M`P!cOl{9LR=h|}zJ(SWmnRG$ zcz(15^L_B;q2phm9 zzY$kYSbL$2s=*XlpD0umA6AE=x))WCUcxA~yr>ZbsU5V!p7Mvr$2)lM;_bM`mFPcE zVXk@YdZfNXoVar7N~FqQ)z?5$tJxVuJL}8pTO|5AspNgELi#EQo4wR*`LTMJ`Y5_w z2hD9-5K68n6@4$>Nga)p{(hV~+g{{TsHgUHjMUN#PVFdGg9gx)Y9U2&tS*A2nYgD9 zC(Z15kr&5G{Se~yN@@gMRV59FvWOm1(0Zl^|2_1$c_f*jv8hklH39Z0D}rvy_fvk5 z@}X<@gRmQf)33MhW`b^O6KivwMz2FK)K`~jhD>9}3qxFsMw~h9P#*C1{1H^5UxP4y z0q|*?Qy3Kn9#a4^D*(qFASq{*xiHHBR6wOg{cC_+f&LPn%2z$;CCdUohgW@$IsShI zMMdoE6_hklJqan0gDq4~lnrnB`r>}pAeWr|=-$ZLbcyskFoZ{s%n@)8Xvf;Tjlu-f zM3F&75NlgND;r;XoRJzEVkfZ=Ib!HDltkHaPEIY3?V1J<$4Q)VUfUF;nOMsVs3fG7 zn2DHJz#7&Dk|a*Mm}IEJfBd1evGB~MTE&W{fu(Cva!T!<2rL~Zl-Vh@da4y6DI*X1 zYJ-$&L}+u`b&=;Kv%r6I2op_J`r>-|Be6V;niJtE<&$>#2Off}qB3b3v-Gz_ zeS-+)WbLtT_Tj;?+vx?kW#zYm2$zK9uD#JM&LvcnsOvC2A)_EW(WDB?U7A|}Ri?#K v^i_wDIzN~e8XupugMi69SV`!fQc;a7k#w3%x%Nlvf8{E8$ zhCnI0R?lwOJ*VMtCM{`y$Qtf8lg`h1qaa;bz`G|sSwvZUlgW}Sf5>E6IUVP~YLw(v zS&>s8@vBrWbs)Yj{{|+3BXE^NfqFOlQAN{JaguW%U ztdJuhkR#!l;{M0ckS{h$dS4a*dh40{WY-Y0qi?e9< z%j{zw|MCWQP5(!DB;RE9Ye#gt8+DO6_j|#%%8I5~54);`6Mpd%s1@=21)lf~kkR#o zrC9ksPg%+rG1{)smocZkViO=C(F8O>sn|Ze>;&C0Xg) zL3gO`Y2DY^)Z0&#Zg>0dn^!E6w=*6-W13X-kB?S+N`}GeTY;8$b@)WBKHS?$`qAoU zYp37uuC6>$(Ua9~xV1XiOLqFvt1Dkyjl)EJX%Mt_vD0|<;r$1zn}bj)ZT9@IJKPSV zmBC)-gz^0-c?Gk?RS?Dn_jrZ7qQqyouArsvY8%Co1rq-E^XJdQ|0445ME(GBMs@`- z5x0?Df{KL97T7+Q;x2n{eqTV6JQYijW?Ug_*<_C^2~WASscqj%twcQGdX0KayJOmI zQ+G|>G4+C}yQ!1fsas>amLAYIsRLpgx)g(rnL|-83FI0LaHhGf%s?{>dD6t z^da9DP)?k~#2{wA%;Hy0n?oYTmb6lFDE6(yPAv%DPHkyJt)=O6&i6s6?nWl`*3tJc z=g7Wu^VPPI+sIx+weDngf1skw*4SF+#)%%bActW@8fbO_7OxFci-MlYM0=oV7nTnE_8oA>GawAo`2tDHD5}TxpQ4Qp`^?Y6+v|AZEfB>BumRS*VM)=j zrPXkxEggWXt0oYAz#AUw2BuLj<}eL-CU9l|=Xp6TX8_X`c|p#iWlCO@HI!932k9(i z)2HlYT-aDg7hkx^~9}@1YpE*#{BQkPxpuZzeV{oR!#yCzo%F#n9Qq~lS zHO9gx2jiSMv<+#$;5a_IvmD<~T*wO29V0?6!t#mY#$zLG@tjS&IeGNM^K!7 z=Z8*I%F7#sV1?9z4ZDe#y3#XtS4ay|z~=r5-xg_H(^sNCQ!7)gP3tb2_X@q^tz_P& zCU51GbxNdm@B%ZamtWNFeb4N=68&hxL!P2@il_5gGuD`_)?g6LDWC#tRt?YeWVQ-a zyj)|Gk;~D|Q?vhMGBVBb6Z*C@jU9UuD{Ph`54(it`v5!W&|3dNUO@XyHZnZ}XQ9tnm|4Gmd zrJpO6PnM$zpbbuq=5m%v=dohxSz;g?Ia(xgiHN~&LYa{tMy-AnhjF5!#E%nLroUs5 zh~^rqc;v2s{neXqtdATj*E7DJSvq+CnaB~+_^vsPP>Jc6K^n!aa9c%iOp(4yjn{|} zVrAvcy(kHu=Dy8Q{xZ-N~06F$w%c%lZ^BdP2uL_ zp9dhPNto6GNBj_k37c1h;O+!`j>`%>rJn;hAbgouc~vZe*W-)g3b?E2qk4&8p6bGd zf4#y-bLW=4lFvtSKK@ai9)k`pDx^o7>=}oL(_g_mia$qje(7G+Y-=EG{P*aL$^9`g zT0B4BG1D19qUq=ZGbJGtO^J}l#PzRR zKE?Nc&wd#rOlD`gO5s-iwg?d%hgGECMnCIZ{~6UkYgu-py4_#UdPs(hm*8bbwexEt zrk0TvG2usb8sCVbfy!htLeC~}v^gS-1>tn;(}K`%A-*BXI`#sqA@+gQJ9u+Z7El(( zgbvOjV)K-Zixit5Z-pd3x)vmf>J1V<>HD!#yRce6@S}e8rQBi(3F;;N8hA7B-rMWO z#v0`&@itpK3htK7M&BaxRU&Id$ZE+L)UN&}s&!%1CUcCIoI6GREpR-;Gx4`jT#^`H zL|NsZmK%+F^c?(Wgh!I5XvGNcEmW{wcF4Xb_7Qc!$sz7Y$%R~pz))Lcml#DMWtIwn zG(-jmXs1qFNFl8cA>y%+_8|rGPOgP53xgj2s7}YVi6^EYk3x000W7ZzIATfnYY#rdRsEM^Uq-aPdse2a$ZM(por9yn*>lRYu$b;=*D+Y$v@2a14Q?w zZI!5}iB`R!;SBl|>lY^9A($p}%^ax)$xfrt3t=q7URLM@PpP8+61{qZ$T`cZoSylY zU@*I+V2F^Wf&&^|{{I$x#>&np_7w~!q0U{_L+Amu+P% zFY)R9oMt_R4u_7J`dE;$Apn}C0BCRJI8BSh4NBv{+hmcK zmwDP|^rmi~vLL6`?Z+yseltmQxHU}j^zAb-r_?mO<*=$}mrHWfR93){sYP>ud zRXuHWhcR+Ttfv{Y6Q!HoejvkW+WlInhm1 zBk0#(0HIEk(s=NH_zUlr;3W%>?YUmLRP-FfcjoZuyvZmHQ2Yxjl+X-WT%*(m_Zb5B z8Hl8V$q}0Nbiq*uKGtdAeO$eZUB4nUh@!r!G5D5xn(y7c2qjo=Yg8>2{3EMWQ8*QgiKy*eG z++p;#GZFSqDT4_Crb(^L4mXt!Rs0)_A72Gwq6Uq~(W;7j1_3j8g-iiY3I7V$eQ=%8 z4H}W|6pU{C4=QBTa3RQxaAyF3M*<5CNv%uJlzl|psWlJSg2~^cg!YzkDXB#c1={1{ z=D?BM@D>u077jSHsk)E61_`n8$&cT`i6c{zF0@W>Q=m~m)?=@+1eq0b7-T?ed0Wx6 zann{Zb=%a-rjA=G@K#J62{!63v;`wc_BXiy*mqCn#L9}Pir^Ay4iJD)Gm4h;318-h&nk`eO8`#`O?i zoe2ae*N7OXHpJldQ?%gxij0VGG0>8Z>@P5lc_ym@7hdcsk0?lvxBQI}2 z&86g(N=ju>mJk7c(MLRZ+y5i?5ouXK-qB@jhV&-z+uaagEPWg_$%fp@$o7L6tQ+;~ zxm*clGb`SU^&`}Bj3*7ruQBPu)1>DH;&b5=;O06;5;pQ_OuaY>N`H;~Pqi6U`#v#C zkjxJB_7lBhs_-z0HcIDHKOGiUljt06j84-nURIchuu)6^KJfq%RbzVn!TpEL2lv+B zZN78=&9~m2=*U(O=QoD7nfK(ZU+6KS_B<-Oa}8t16g5%0?TH!7D|v|~3Rr1@$n%YlOt#4YUw1)(Y}gi0Zb5{kmA(rV)wC!4Hyx3lXs zw$>8D6=yC;2rkJ5i9Y}iJ#yfWm;)D1=E#v#-y6rlwKZ?v{N8WpeaxE)>-8#u-~Hcy z4qwg@@;5G~e-@$sg>wmC!FmSQ+__}%ox4vOl@SFO4MSOvJK>Q~6+L|x#X{Azx*Nu# zC`5xQE4ugLp=cq0@=u9+sd&fnZH1}J_X&N`z&qQ+8jHAP5 z)+>(FCXb>?S*+Eq=)Eh1*^c8 zHVj>`KcRdjIUyHNuuD3i1uN;0=4%Cb8q#k89k9YIDL01W*&MPqD@kB!)EcsZp*0&c zQ)>=rW2+0AT^hV{%B1Agr}&*caFTBTGXVRJ&s<|MU?yNc@tO${Y2E=~4q$(jCa=T% zJHIjEKl_)@PW0ps@F>{-x#IoB=O#Aby)n@f7qXhitV;WPDi2DVzjB?2{YE?mAiu2gAX(o4*x0&APsP8sgTmoVzmxv26QU%F%i2dp!Ed4-h5 z0^uu5gs-j=ertgYT!?e+jKEhv^0)YH1LP1UKL~B5)V`-ZbH18mH2`y6oPzNREo*{_-?qV*9d}iM|E?HntVr9YH{3 zG>ZZrGBU!;)3D?UOgb&Oh?-6xA2nsj@Hxb(?I?UF?SAf$-U9oni zOesRHZ?2lz?1} zuo7`w(OlVSyPbN1lpvMQ@m_%oLxHW{EX&B2+u%m$7NOc!{Iz_Mx0SY4>nHNcly ze}4KMS`X0K4m?k85F}wo1c9ms0mRpZYywpaf@j?@zOvZuRCdBb&5!4Ri@YVHtccP? zz7L^JrJ|FRqG}brQq3w4XHAN)0g2d+42LbQzVU&cjC$SIoY3W1M ypZRqujv{@Y$uXe+%X%G)az7qt_6gpq9PtGxj_c01=h!QLFVbiL literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/TarIO.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/TarIO.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2fd0cb05016e1d150e6c27e14839c492c2fb507b GIT binary patch literal 1551 zcmZ8h&2HO95Z+yq5+zd(nidU`L&2thP|=8o_K+HF;lMSLpsf=`2~hAtP~4S8nz#W+Wt>aVw)k7BWg66K-?ojBrP=12(lni_$dkYG>P0hwm zk?T0kg?#!f!ISIDS~=<=7=nb9laO&5TIZxsk?YJ2?Ila-@EWh5k+8;H-hgNQoY*9E zfw5_vmobE&JbC2z(@gk9??5El*MnI5BUv1$Tqs|PnEP>(2&H^o__4pA9*f)`ieXPk zzv#ox%SSJ&0G(u=80J?8fd&!WQ~!X{q@xvbtfwRIgLH2DTb;NFy- z)=E~|@YWwke^uOWS>vrcgl}#W-8g8@VK7IY-k6e^hvyZhH78|lZc!K*wCmPn()3qr z2fCug^{#cASBG1pSjIzN#}d1`K67SOF{UpxwLIVQOYTU!XixN&2=crsz=_Mdj z^55lUd(+s(NaTj~2gb(P8!H31{;azzWg$(Ci=^Pf*ci@OX|9c}gg7)TEsWdU-Tf)r zdG*3LYCICsxKWhmsg5FJYmsH`I)bylsjr%YVKQN;GIkDKGBgE1IuRGtG@>ZUVx^+! zg1q@97z&=o!IN0>A0=GC;Q7fw7kSW421Stt9k`OmL6-J{(TN@u`PZFq1C?s=U=$~Z z@xD;O^QS)t)ot&LPUIb^`7Vh12o$M%wnshcvfH#t-RkGD+svhm-Loc}%eU5rB-qpS zLK|fVMB#^Dk}kQRd-6Wm7gQogWiQny;9^}O*Fr|o7PtyV3Na?P)-0>D8#IVPc?_aF zP$ij>IWTjelb^x{{9!mrRw&VC6{)dfxv$=(hG~e`IF0Wy(2Du0zU9#kVyq2eRehUa zz-K{b^d>cvn3DVg)n};gUnwlOI@ktdO}Mcvb(wAhuLzDFu1GVAh6NvIXnRp~G>)^? zNj-{qkwj57IQcn7ZLdR{*6N}paKQlbmfc54l>(0DLlA|3-7dA6_pxiamc;$GEkA&V dA<}|JwRJ5<6%At;_q%0sKfDKCHEfr8*8j>raK``u literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/TgaImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/TgaImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04c4579005d314884057945ed5fbd80587309eb6 GIT binary patch literal 3764 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 P=}#Qb{jkcbVnX~6**RDP literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/TiffImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/TiffImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd4d4d9a6c845d0b3e9032b6c166e54a13ab3f21 GIT binary patch literal 49917 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/TiffTags.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/TiffTags.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..45a24cbba1f4ab255404a40fa9845e57c865af1a GIT binary patch literal 9619 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 GV*d+0V!i4B literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/WalImageFile.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/WalImageFile.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c4846de53e9c8e5948887c4d241984f74735fd9 GIT binary patch literal 2878 zcmZ`*%WvDr8Rt-xDU)W&C0S9_b3{EUOQNmVajbf)Y+7u)KoF!zfGu><(jsLskw}%K z<2rCo*K|nBd1GMl5PI|o28Wtb4sz%fTGLZ{otb73S!Y(vIy>D#)UPOqak4*BPS(x5$h^%= zS!c&#f25{4CpX=7cArruXa5CJ6!(1TML2YA#|<&e&h5x`aNy&3>EdYP&b@^ z>{qt8vd>p8UWCDV%q`=16OAqF>gsB^Sb3Xy;JCwiu(s@QzVu$Xk@cHP`=vV@%^p2_ zI{VgJxwCJBaBauKXc@0pob5Y!X@g1E1#@l`gW)SLUSbkY95dJ$d(mmqx^ zdHw~y2!e~1JLI_G5c@&wj>jB^mIks&4dA)$!wKAs?aMd-lMusdbq#UOgA3n#?K*uN z1!;`i(9;_re4-V)7alkhf;(^>7bu z@A?q(jBJ{G!mI()3BA}P48ci~futwdSp*0QNv5az%mGNPH=!Fv@J43m!TNkQU%K;` z2}7h{blsOpHrlMbIAJ`05tt0wTrHBFW%}xponWzu+&Glr!oN~s1%CeZ+*-SiXIsCv zL+6(vJSOYu^)e28>)Cu61S@O!%JpAaEAQOeT*u46zc)O!A}@9a8+-l|fEihUQS0-% z4ma1}Il*TG3`8mn6xzw`p*-5laL}u$fEe^z{z55L_@eqGb1d|<`cs%d-l>oyS&z{R z`W>kQ13mkm)ErK?HHQkro`ceAW*w-oO1(#E&7syYmtq0|68Ia~2Qnj7%sdJAz(QIr zb8kv}>on^LGY>*H$@uP7_!T+N!;tI}Ryw~1A_--(slYJhHka|nUb%7XCc^Is9gRLL znN?srCJKv0m?V8WRLP9M^Qao`f&Z0S?})p#Eq}qF!UTZrQJKd|3{EpcHNGjN(fAg z*Dl~4xH0u@ys<-jol-5y^7te1VzTUGpl{nxNtuv2!~`E4-yxyF2Lq2o7s$C-R)YvpmN(8g0X98Msle8MumTm1?C_E)|PKT`z#id|p*mMNuS45=BuE zgh3aZ&2q;mwrbjgVfD}~_FGyTt7ix5Nng3wl?P3!TN8~UUs5?mWDkq^15Fv`rM@ck zWWFPEEs?DYsLG=}MjAq4QhT@)L-h&8dC7j=aM2+_g*J)?GPwok0V>G9FY>GA}(c{llZq z@X*+|D&4-;>WR25R9k%6;7XX)tE^UH)dG_9NR$yTAeMvV_v`gut!7p#opQNdEH(=T zL(}T{d{t3OvRsg)ydcOtFK`^kvLHV^FbBiVe!t!8HM?e`)2X-HwPv$o80A{6SS}ZI zJ+EmbqmWLX=MJi+L0Rt?wVtkaHKm=Gnu=JLg_^{dMNSvEJkQD;E3!Zvq;<^)?auvH z`>5GGGz<&Z2h~~+yepMjx?b0`s;ZV0S(8LX;6-rB8kvKG_WrPG_UoNqwbd;*+QoXS zP&L$2P14JPR^$|ol@uh1h~p8OAmxlNol5vvZ5(QiL7`z5CZwHCCWn(rZ!*D?i8?ux zC#T}%n4gT;$pC%bLqBVy(>gk-praxh<&h<$frxrM>aeJRPz50kAqkm6IHdTH^%z?ZYn)irdhOWjC|XM-5ag134mkvS$}#9m0t5)a92NlrB!RGA<@>9L zPaz!i-&KEA*W<7M@%=@=TrMj3d;jnL!e4wxQT~l8NB?Y8KEV_H2MAZV+EzAHS5+0x zxYlMHnyYQ-uC6NEj|9$IHE@E` zKvR{#6#ow1sN_`!3>;&vCVm0lnBzbOy9 z_CCKmJ9po^^@X=EJGb~?VSZumURJpOy``nQ_a4m6HuTKwiJ%oeb;rWU6Je|6(bQh6 zD>nStb-*NvOQt)D+LqrAxwqB($lK`h;DsVavFewPW;OyI`ZKqE!DmId70fI>TaCM& znfuMvZnr&ibt~v>&9uYinclN_wcGjj)$hziVH~{M^PB6~Z#1*CaA)RGu)HKsd#Sy- z5_Ycko@JKjH=98(o+3$+fE2Y#Kjx@9W3QMd#=vV*!_hxFNcxM`Kmx^8x#BXex*BJ$ z&NbJ-W8(M>D7M8-ZsBcnn-}md@Ke0Ro#!fyqs%Mdl=uj*;_ZB`v{XLIYtL=BEX!kj z9OcT_imtdLIOd70e6R^pSy!hs+Ab2aE>BjF&K*;{5im?VQt@`t94l*Tl*CFODz>Ke z^?@=_zcf=dWl%E3Gg3V@5?#EP=x8^&dR<8j@kwIH8bggGS_|KLR%|Eg4iwkZNOjR( zn1oBf+i2-4#4mCaw8Sk?hZGgFmeD?(72FDHmHx;;!3r>cYNl3dr-j2g5{!UV*qGPi zh3_i7_z9It2PNmAgqD{6rJfekQtG7Tq?9;GIVraCeUveRO{>9pC2p>R>p4k*SJv6C zDo*o}4oeE)8Io34V4z-6u5Of92Wm>ARQjWQ6lK~Ym1`(h5*^?F;Hb1v?;Vj>1@#{# zv{RFhVHL_+jaz*DC**v|cuy^6rLfubdZJ6lk?FzHu$5`TfAWIK^E^UG^X4w*L6@rFy14-RP0S6G0Tj zjWIzQl9g}Yd^qQkO5I#s_}rChH5)Wxh#713GF=2d&vY`(Ob}ST4kjJZ;xf+BktFbsm+nu287D+rF+*>Dht>u+wx7`(PNv3pIoB~GCaWeXOCvsw0*866DO;+j zkP0PAUmd`p2c%AHQA(kqi3{lHS`Z^Clw0*kpc{c$3Ao3@X8b}Gw4sw*wW%L{@dGqQ zq!9=!Tf-TT$Gee%^$wfmig7pCHhYQxWYsbdBN?jhjw%P-+UZmAR zpd?rlC#;iJ%Q*QuO_p_OuiBzC$h}wiYZ&4Rz7ywYY3ELEptt%gI^01vak9PL^?AUv z>6838gzdyWOf=uL9R9?X#cyEBHl9cVKdFSIe%s^6cb%KgF>NyN)xjZgRQ9(_C`4D* z5XwG;x_KNA7YyigK_qm zL9j^lmIl4l7X?i!Ww(8$<-<|%dfct&E}-5Cp2l@~w)L=6r#(oN(y*j}UFjgGkN6!L zgf=gJ8zi&m?#|B%(G}vmsNy`NmS`e~#kS$oXHqRYCtWP_9 zp)|w|&JZ`0;+Go?ac_-(L*RRn(c0s2QG1mI=w^WGDv0s@dgM8WSb2=_mHGWhpTv@LSejS+m9m8 z%g=#ggt!gzQ#=tZ5D|j>yjH;hkOn#OJ;hEsC7R~gS?s%dc^0IJ60cQb28qB3$=R>z z`>J6a5x{5Yi})L~+qoD%KwT^lk*Xq>_`9h7C7z*|L=bvyK{P-^ebA^PI(r=ianH+& z9>MWV0Cz8QJnySbzddX*b0nYD@;Bmn)D&S)8rk8Ayicq6Eh1#Hx$(*al1D{y6ST6d zJQQmaYuFd9T)flH?EvR-M)(f+Ri9L5mG6(IW@5y8Vv?@zXdf!6@zs^Y;5y9t zVT_)Mny?)$$8y|Af%g+_OA+lv+JbCj3T+K@9MIb*{bQg(bhKCIQ`ET@LGv4Og)_FO)mP7FDx zC@D`TvD3-8xK`RBoc*I@vhQHGlfym}vd>g9inc$;ykp4-g&frWHW>r`Yd+aw+`@XR zL;gQX{y*?3@Tb$Nlp~AFEhfi*8CMc(N9Cv2wOuuO8ISNc_?hRB=d7}WTxFL<#kk7P z#-r400z8B;3pvAddOCe0J(HZ_=WZy;G(Uesxuqnhd0oEW;Edj>71#PC3tW**lLn1* z9d8R+MkT=tlhLF$D5PhhLFe$C$H|_;UhBKSPDeEASE+fZPwAWSMDpg23Qhah^sU6~ zPbP0kA8YofWXLts3yHZlon9mwpWae;HDU8NskWu;vfeK_zS=KSiC;iQ!@9qeectGw z8PN5?rR35s6EFEiNbM4h)jykDMD}taxyUb}za}R5W$@4T&m|Z74u2c1EIFTC819wc zwAYKtSTdfR8rbmSR^r6_lGl&{okzZPZd!qbobT9Fqf&B?>v*5rWncXnp6y4F8}?YI zJ$9h4`{ip2&CQkMJg%P@AE$YsUzi8{^T|XqnM@6|^m1}p>VYPHfpff)Ly&$wxlH3p zbk?UBdG1I;u_S$QKwvVycmra4Hv*1;g^ zKg~+G2a5kbz)DEI3v&c7w@w2@p8o=BLa2>&AYLey2iOeqcC@b3|&$efP z2tshjg1|nEmT-iyWukn40_Y5QY~ARNk}-MD(tZTtGIgOn0iMo6XVVI;4E z{7xMgV>j#ZW{+-@+Q6$hqPueK-SjMhRA|&2D;u&!l zcXqB8ZbX7~+_i=q%~X-8E19}{sPN(eefB*f4~aYi$t+C1Okn9TvA!VkdqfV>?L1%p z7V+LA@@*p5Kr#(S;}-I~JLFF#f^x0qrtna6wN6Vw{NR5~Ul0Pz48Pr5^(AnBO>qyD z^aXlG{{%uHx2o%EMXdqo(v=-@a*4Bmxq#Mn^_=Rk3AFG3s4x9$lG>oi*EJx0d{xn% zS2`>HTGy)I=mt}nYQAExbkkAm$nq%@Al||6fAlgz51OUI99$R@%F_w;p=@KMsc)Ep zaaob+;1}`bkum;PcdGc#R%_Z6el)+$#Mjui9W~|}vory)be*ky@oBRt~_Q)ZHO1JmuFM&mD;fCRF zI9-_mzVv>^31G+)y?J?^b$`YQSl9?LxIF6@l7jdvx=NE*W&rwqd`okokHbf0&~$hW zZ!In-I$a*F0bT+2n29wgrp2TvGtU2vD|~F|+((k)fpZ^UlxjGi>!AyQ-+dIf^6xWWMHkHr@CNI@EUjMi5 zKuejRk+zMiPjETEU6gTjhRTb$f@Wb?-uMYAbSW7b#AvUAZkw~x!Up}%AkWI55&KVw zREUfbA$Ts8UC!f{MX&;o9SC{xCGMj22v7QLO7Yy$gMRz*%B>x+kc0=F2+94CPd9Ln za>S1u2r9F$=lRSHI{1j(mcy!y!FI`y6g7txHEHSJn3i3x{ZKLNA1Y=0VwJ2Naw8w| Ef1G$}Y5)KL literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/WmfImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/WmfImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4bc29c80d196e191add883d4d9330e30056719d2 GIT binary patch literal 3440 zcmZuz&2Jn@6|buPn4TGrJsvy$NJ28e@-Y(e5O%c^s}(ZYd_v+4YmrDTMAM$CvD=>M z8LHcfZM82<&|WzqJ}$Q4u=xYHAkKT^hQz9`ocatG5W@Uk&DgP%^r+ta>eZ{N_g=mC zs=`{W!tlNKr{9Oy8;t#fI_EzJomI5ta}dcS@3B7jd0+T~Q(yF~zU?~(TfnYgGS~+8 z{IbCgaK*0zyWx~9N$&;oYie5Y?HO4f2|c{WWJOkAFj*Z5zpiSkK4K#d`6*e0>@3Eo zJEPqbcJdliq@DuhC z2S2Se@jZx>H0<@7;c(cCI$;_O;v30Ob)s(6X+C{)w;7Qd&8;w&J*8JFX3_`4P>20f z<_FFDtwqCVI^Gy%}Y{;&!6|Z9pat;NN5!;xeB6~&n5GP(;$b3Jcxhzb7Xr1=>lgoQv*|Oj0|VoRpWldeGn4PgMeLbO7T! z1FiHljoDg-QqKeGOGGGY&fDJ`gz_eM35hU1#ceLomOurc=i=WN{6W%dEe9bP#9?0r zL0$<0_lu)5p&7q>+_MemjkF`vjjx*knJG`d zL;y&!BZk*Z-!grBN5Fs1TH!+OpG5xt*Ux_kx6!ehJt%>VCdeXps8u)GJExclhEfoA zI%=5SKApqFwG&NRcF-<-v@Cte`yj7^904v6+~Xj3q$6DfyDKZ7vM!gNEWarGrB9j7 zd=J`I^EyIpJ>A_nt4_X!VsTJ^8pU$(JZU~sY1l>4y5JV_AsJ}g@&(M2ln-dz{0Mn= z%ny+(RJV;|tR12Ml3L){BSCVh4J=0DP#EL@Sq8a4wm~HzM|xP%k>w9rW@loF)<|Nco7}EAbTg4znB#OQ=p9+X3S3s@l+mZQW9dJquACn6U-0-}X({6)E@yVc zuekmUa;W-7t}*7M9(bgqFo-m>44O0A(&#*CYj~GNW2uG7|Kj9-X(YP#VQFHA(VO&? z%izEUSX7diQB_Lv$}(GGSJOGm8>pZ= zy`ZQq?t|o(97cMUx>PNT%OI1eFSCOyKaP{#;c%c+CCzO_G1cr2bU#crMO*F>7_`_;J1xPOwxdL*qcz&z%+t6~YTJ8i<+}YCC zXu?-Pa{Ku}%iKw}pq-v0PIY}hPQ$%BS`T#Y$nkj48^oI$&liRzOpSBELS-Z6T2)O} z=RC>9-nVnHkG6Lc|2OrQ&5SPYS>@Y%aFTEDgXS(xR{He{-~?3h*D)!fB7pnAni6$q z%BpblvnpbNFZ|DT8djZGMAJUyza#3_Ren`8M1^C9Nt!bk+AT^lP;7t^C$~Ou4>re^KF}^(~qhgCK#}F4sS!q@ExS zj2jJUOaG|0Kd}#yc8B(%b5;s4{+3d3flHwuh}0UfBl{TEO)hNx9(FaM+H&+NVLEkv z7X)FjJH(+-gtgqU(MI|KN&JAw4~aYk!Mms&1f5=(BtbBC4P}Fw`&)p7Qibsb&aGk2 z%(V|Ly>SxcAh@|z)?cH^UnlYnklY<-N8T9!2T~;+9S!MWr#~hs^1j(DuT9kGs9x_> z6?4!1h(wH1^uSm{ODJnSVRKt}A9Ep5)57K5dexxedvNgS7=rNguX{z(m$Ll8D z^b@dKmR`i4$UUeqIWun*O_t@Q zU?Yk{y{{<*_4kR8wfZ&@T1MX@QX+DP2&rkFoBAoCuMnY^gSnLb+J(E*c++U$*UnzA zl+K#+`5ccF_vg+;)LyFM1P7a(v+?Yql6xPH-#6c*5|dEjs^gVpe!{lA%9J%dTPb;! L#uKkv=hNc literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/XVThumbImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/XVThumbImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d5af023d6dab5b4d1603e43626ccf14ac3f8c752 GIT binary patch literal 1415 zcmZWp&2Jnv6t_K|o!PG>4N>zU4y#s3tWdL6gG7)j)Y2wtq!LynRFx$(nykH>NoHpz z9w#KLaAC`Tz>Q1x2xs_beC4!fZd}TH-a=FAm4AL89>4c~e%`p*tPvQW{_#uvb3n+S zsN5VOD34&4zXM1jX-bAv&><6S=n0Rajir3(3m;@pR3sOH3Z*}$Psw)&qWYh_EovZF zoPAT&RiJ!TmBA8`;TjoJ&}whBWdeHL=~eVDlVu`;(`Tm-Pw&f`tiK|nu|s4-HeV6h zRP30IJ<(M3dQLTu=T%cRCYamYK55TSDWu-^tiL;q2g+96vYn*LHk{avQ)P^5Q_J$r zvI3jCpS3nN9{dFonIZvGj_?`*I3iOIpogdaJ5WaB6PV=!z?I|bC$>rqIbo0m+neIa z5Tp`)^>}CZ2}*@l{p8|TqUXW&x9AL&OybV7Sj(q6Iai(T<&nv=&VKJG&(qHOxysHv zX>!;pF3nM%ZLELZDHEga6>;wbDl0qP-RGT`FAk2*hKIAt(z8L5trwRzh~i#P73MA` z$N&h{w*Y%6-W=$A1hf1QKoLPD5lm9yNhY}TBnRew=|e>oyKplW5-Nf>meJzN7cGN% zWO0(V5+wc|!Y~Z-;RyQ;1Ot>E(`yJdp<`OE7zj9~KT>Dq6GCTxkba<7wA=*0=loRi zRU-WpPv3#|xN}9X{Rz3Q;67QoB2i$%E4OD%ofND>JM|fOs-|{bm!WA)P;1JntUP4BSYK)%O-+Or+I<~o@OMGAr2|V3 z-37Q)L{qClQW~XQCAy8DxZrQWkrY0h74^ju>?l_NmS}@%@4!HyZ->I CqEnCn literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/XbmImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/XbmImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..73d9a67ebed7ee301b21d3e005a9082fb9dba3ee GIT binary patch literal 2048 zcmZ`)Uysv95Z^zx<2cE2M5u`NM6DvBh7-vlDj`$~h?cfU?e!$23OP9}pLdh^i0yRk zJMPlZ2cS|P`VA0L?vW4BuhNHo?GsWzL0{ULO%8G`-Dt-%vopK1JHMGkjfO{HeDd3i z=%*?nf1t2DY!Gh4ES>@pM9>ilh+u+`XvzYX@_w=2@AdA(gh*=NhZ5~uiRd5UkV>5q8!epk8f?=FyhVb#^vkV z>#c52^|I~tH!fA+7La0J8#>g%YT)PdkSOX$SKm`eypaB;wuml$t;0lljH*<9T_#6a7 zz#rWCcH%v_a>c)slxZ|R@mLn@hVV9z^(!zXnb9fPWiu}55&WLeDOJCe)|Ad{!H(!N z`h+bcZX|A20Qljo6Wl!TQjn{w2Ju5d*a)~aU-?BZdP`qlu> z4{L(JRlLoFz{Ry~psJlY{&WRkfq)AvL{wlQOfVB($AI zWjxfZKh~B)1y8b4+XI#FfhNiNxwg_=NNtBjGLhOcl*>#6RtfLevOpzAeNEHAKETDm zKE#g!$ecj)fMCOXEVHY?7EK_8HJQa$=nC`bN6eufn>3g6(>CUtkTy3AvnZ8esJ$?R zQ1(X1*Te9Ky=b&par(J}i|FS38wy#(0N66gGxZ@HwiFEFR$)Y{2BZzMaDceXq82l{ z7|Y~%AQI5UAmMjlATQ8v9&xo+Qh^yHFNokT`7`oBsb!by$1XK6pw4&nqi4IBiPBia3R*o+Z$N4U(|A zn*CSN&S2{FraA?;n>6Dn%kt8Hte{MN%)CFT_)+0wxtw0K1V2gVUDG#!($v#-RK!U# zX)amJVd*QZQMH1bFZ-Jw=$}xTF6S5TgK1GlWfJ@GFj9CJcC_xc|C#@zr&e*h(`bWv zdh)5)s;YCq>B@Ka?<$oms0$2UeSk_wW-(kMsLj91Aes+ksW7vM>S!N89Izx+*cG+g z2UH`hOvp>XF_>8gle;jB_ka+d` zB{fkP^!)5foTpK?lt@Ci0+^Spi^QGD#D- mf&u$mVhYi{F)yNo(82XI7yqSJ*!-h6UIF literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/XpmImagePlugin.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/XpmImagePlugin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9828245eb759e737cf1d4543759935077c9f70c GIT binary patch literal 2224 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/__main__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/__main__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d74f3524c2e81c79572e88865499f3a938585f38 GIT binary patch literal 219 zcmYe~<>g`k0+X$?6E%VKV-N=!FabFZKwK;aBvKes7;_kM8KW2(8B!UW85kK-n1UHJ znO`yjB{dmuu@_|KWag#i`)M-W;z&zPEGaEYEiM8Xv67*P1xSI3Ujh2LsVSL>`W}fz zDK15sWvTiBl^G@ZdHTW08Tt7+`g&!ld1d-JnMwKul_eSZdB%E{`o)BRR?~ zoc9mx4_JjO+CSs#p7;yd15~v!j1nL?D=pjBbk%fESCzkdbv!*?W;pKt^+)_qk+Hw& zB|AcVd4Ny)J5Ipr3^)XB-U;eKC#;8@K?u3mte%5B6p-fOG8Ccon%4_(1ty@3ToD9J z!W42PxC+xSgWLpMgISnEt_;^<9!?-P2{+&*oI-92PQw|LHVtRt9MTzBfb&Ra;R0Ml zItQ25S>@*T&4)_Iwl9?K_FQCo4v9#6-LA1tSbSGnrqy?7I;#YOTsKaB8%*{z(Z+@~ zorKfY$3c96&m(-&GdS(AUzy`QW@mQTI=%s4Kw1e_Eq#gtCmM~U9j9rdF$k4*6+Ym} z9d#TCoV-oO z#VwgeYtNoXji&#D)oyRXX|eYI%cf^X1WjHo*4lD81IpRs zfO05}z6r_?O(S&#BA7-5$&(Bu=Z*o%>VB{?EM;HMSgK)7x%NpDx95+k>3iJVl)q#& zT_jBhyDgPm-%02WGVCO~!LY;5;tCdJ>Nj?ZrUTU{Z>S!>#GO&EqS`!;2I}zk5=~#0 zPhNSIk$+`O`P4_hC7*l|XXJ}9hBjsO4v literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/_tkinter_finder.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/_tkinter_finder.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..24aa3a825283ba22529108bf44074d667ddbe4dd GIT binary patch literal 659 zcmYjOPjAyO6px*>&9W9G#EFxS^w7HNiZrANAv6#b(^S!lNx1|!er?^Papbry>2)82 z3mo|Xe3@K1@f8pUUfWH=mfy3V?cX0;v|53KZSeD}Xi>-cwO{<-JY2lSQAiBZ2^~o! zO-V=&nTGU`-O$DCrgY_nHR3=Wi1hBLxrExXvGl`}td29x5CC1C-jT2gO<7B*`3&y2 zmaN00@02)_j-7U6H(>8nCRwakxk^E@m6q!iSgNu_WpidVo5U&OY?5GYYJ^cx1iw+A zbJHf3A6YzR!GurqGB2YUVny%;;(C){&&!*eH-1=-`+8pPVw}-BtT-|%a?b{>Q563i->=6Fk z@)bxW_eqO>y&plkZm~X;CX2mIy>*abI76cOF1#+M{fRK<7T8Wha393rHw7+;g#5h(Lr_Bnw0&8nA|MiD-)Wiimi{vPjSYNsj)&ThdFY3;Vep7l3mu=trP$ zK+Rn+mMn>-mf2t!tk{68X)g&~OBq!en^%Q&(Z#|_;{s!~X7FN79UZQTJ_7&m$8;iv z%F}nb7Ux>cW!hhiZC#~K`cUb8|*;}SSFvs18^{f6|GM#y<|UvCHVZ`ZXDH~S`dkooNtc8}!?zhgt(p9iFc%tG4)rNS+~yr~t}10Y zN1|KOUmxAX?CxR?z;Pb_gOf}04N}>H>w9pSFnu2u7s%4yhHi5{k~X(ibB@$@=#LN3 zufuvtg`k0+X$?6ODlMV-N=!FakLaKwQiLBvKfn7*ZI688n%ySS|ES^bGto8E#mBE?C}IMt0~5aj^m9{FG86SZ5{pt?iZaVm^#dw1O7ipcgOfAz^K K16lGJh#3HhWHJB% literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/__pycache__/features.cpython-39.pyc b/.venv/lib/python3.9/site-packages/PIL/__pycache__/features.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c1e95d7eefd25e7e0f18dfa2f6ccc2136d4c84da GIT binary patch literal 8652 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 ax;~(fblM4?to(br514~`2G|37@BaXeDzCx- literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/_binary.py b/.venv/lib/python3.9/site-packages/PIL/_binary.py new file mode 100644 index 00000000..a74ee9eb --- /dev/null +++ b/.venv/lib/python3.9/site-packages/PIL/_binary.py @@ -0,0 +1,102 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Binary input/output support routines. +# +# Copyright (c) 1997-2003 by Secret Labs AB +# Copyright (c) 1995-2003 by Fredrik Lundh +# Copyright (c) 2012 by Brian Crowell +# +# See the README file for information on usage and redistribution. +# + + +"""Binary input/output support routines.""" + + +from struct import pack, unpack_from + + +def i8(c): + return c if c.__class__ is int else c[0] + + +def o8(i): + return bytes((i & 255,)) + + +# Input, le = little endian, be = big endian +def i16le(c, o=0): + """ + Converts a 2-bytes (16 bits) string to an unsigned integer. + + :param c: string containing bytes to convert + :param o: offset of bytes to convert in string + """ + return unpack_from("h", c, o)[0] + + +def i32le(c, o=0): + """ + Converts a 4-bytes (32 bits) string to an unsigned integer. + + :param c: string containing bytes to convert + :param o: offset of bytes to convert in string + """ + return unpack_from("H", c, o)[0] + + +def i32be(c, o=0): + return unpack_from(">I", c, o)[0] + + +# Output, le = little endian, be = big endian +def o16le(i): + return pack("H", i) + + +def o32be(i): + return pack(">I", i) diff --git a/.venv/lib/python3.9/site-packages/PIL/_imaging.cpython-39-x86_64-linux-gnu.so b/.venv/lib/python3.9/site-packages/PIL/_imaging.cpython-39-x86_64-linux-gnu.so new file mode 100644 index 0000000000000000000000000000000000000000..542623e32d5fccd3011734c984e5c45cad6b7e98 GIT binary patch literal 690408 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⩓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 z
BU1wIqDy3msabGk~;=I&+d+9k5su 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‚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®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 z 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 V{pjfEM{_*+%KIaTYxm2yzW_~V=vV*% literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/_imagingcms.cpython-39-x86_64-linux-gnu.so b/.venv/lib/python3.9/site-packages/PIL/_imagingcms.cpython-39-x86_64-linux-gnu.so new file mode 100644 index 0000000000000000000000000000000000000000..3e9888cbdb8da8962e93ed0ff3ff2856a69d92f0 GIT binary patch literal 47120 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/_imagingft.cpython-39-x86_64-linux-gnu.so b/.venv/lib/python3.9/site-packages/PIL/_imagingft.cpython-39-x86_64-linux-gnu.so new file mode 100644 index 0000000000000000000000000000000000000000..6997ae160fd060599f0f306213ec4d57f0830e09 GIT binary patch literal 68616 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 N*mO4srT9Y#zJC@He$xN| literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/_imagingmath.cpython-39-x86_64-linux-gnu.so b/.venv/lib/python3.9/site-packages/PIL/_imagingmath.cpython-39-x86_64-linux-gnu.so new file mode 100644 index 0000000000000000000000000000000000000000..07ac2b32a9d563361747fa83d00581324cc5badc GIT binary patch literal 30976 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/_imagingmorph.cpython-39-x86_64-linux-gnu.so b/.venv/lib/python3.9/site-packages/PIL/_imagingmorph.cpython-39-x86_64-linux-gnu.so new file mode 100644 index 0000000000000000000000000000000000000000..e5218593e9a34c51a1af82b7e0be1850151c5a77 GIT binary patch literal 14656 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/PIL/_imagingtk.cpython-39-x86_64-linux-gnu.so b/.venv/lib/python3.9/site-packages/PIL/_imagingtk.cpython-39-x86_64-linux-gnu.so new file mode 100644 index 0000000000000000000000000000000000000000..8a943efe8f9c4064ac610d74dc9611d00d30fb5c GIT binary patch literal 14656 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 z zCi@(1o}QOCVL~>^`f<|lI@tH9~ax?KV*QT?IYs(X{yCz`EO> zi4J}3+4V0xbK-xUvK9XDC%;&mv*W(Ud*8F|xv%xrNj38xyx=#xkKS9b@oI0&(&q~! zt*<^g^|xQ!w(Y}h&wcmx^X_&%-M;A`+=Z13j=g6OKX6X_yiQx$bN{^Xw>v(yt!$Zi z>brCO+o(SDC`xlHtUhRqA2_fE(|CUxe~aL!a`mYfQLxiFJLG#*^8F9_ei8np5j*7j5b`}S`To$%wDb=@A892> zzF#6=tC8<($oJ3W`xn?ynjP}}4Y`w#eD5OlzDOIFlkacH_uc5Xi*$(UX>zY2`F@i1G6MLHrRL#$Q50e~u#*TGQOx5{kvc z(Re7NVbegokQrjHVut)x~NN5GNmBhA!Vs}Ko17dVJ-vrPPd;BdZ z9{MQja<;Eur~-;8Ly&LYI7TW>5kyl8lq_Y@NJLBN6I^LWZK$%nC63K7OKBHK2!MuG zMB*#rQS1##JVaK7o7#oI*!tB)!c9%Bwdr*!i8Mvxa9VJEr~)p8F6={?<{H|Mk<44l zw$nVTLMXBkudhaU@|e0ex3xy&w3B99#eG7f^pTXS9yd33aU9zK%OY{^171b3v0^B- zvn17~m|h8H-VlvAR+jHHDfNn7Dl6IclLQJt>|_~Q7Y(@u~1pGwV5}luceNnkJX*YR-&oGu?Um*BkaO)M8Viv zkq6jDnr9bXK`%0sV@gCI@OW9iVmwb$XOI^8VrSa}v&*pOCH5wbjS1j#9%Ids=GwOP zsa6y2N{@DBzftJ()0UuPYomrN>ji1G60tklUSryc;#8C@16TA_%23|kv6OAwIo5vG zB4un3SRthpLN-8SaeIAzstsv-R8~fx5UrU**q?H6mqAP}!7S&Rx5t>uyC*68~5 zjx08k4BDZsgFbf#Sc%F}4rbhxVk{lG# z>iOVDwJ2+iHix+~(U7t~#_&S_XtPI^-DSr`Q^sN>Ls?}_;WbsQ<*jw?bh|*8sEW4B zkuSKO;~@-Dd_bq|Xem_3pM>~EyD9xV z`sSm-M1hE&65KKX5TSt`om`9s0ISxwMM9Mbk@Z?rJWFJ2nLmJ170m-7o2NflSr6@?entzNvCgs&6=C8Q2py0}2BW^|O z3SdYq^Tc5o6DIi%tSa>pCRWo_KwNLbL}fhuxePeX-(2J9nGF5omHRFxVB_KYGT2jv z3EX({i!Gp2KlKO z>N^5G z7i6%rE`y$Hfsd!>?F@b>g8yAO(~kt~A5Tvu1TRh(2LHrBer^$5(mWYqvvv!=M z^r9e&h~7^CG8nb{_$SLakkGnE-#Vw5_%rw$=Wm09#Jp0 z&oR;#3)~@awzo3y?+Lt3;PZr@ps;g5_+QGG3Oj>7F39$=#^rh;Ka?g<`!kdME-#m- uJ!j}>5%veK. + + The following license texts are included in the following files: + - COPYING.LGPLv2.1: GNU Lesser General Public License version 2.1 + - COPYING.GPLv2: GNU General Public License version 2 + - COPYING.GPLv3: GNU General Public License version 3 + + Note that the toolchain (compiler, linker etc.) may add some code + pieces that are copyrighted. Thus, it is possible that e.g. liblzma + binary wouldn't actually be in the public domain in its entirety + even though it contains no copyrighted code from the XZ Utils source + package. + + If you have questions, don't hesitate to ask the author(s) for more + information. + +---- + +LIBTIFF + +Copyright (c) 1988-1997 Sam Leffler +Copyright (c) 1991-1997 Silicon Graphics, Inc. + +Permission to use, copy, modify, distribute, and sell this software and +its documentation for any purpose is hereby granted without fee, provided +that (i) the above copyright notices and this permission notice appear in +all copies of the software and related documentation, and (ii) the names of +Sam Leffler and Silicon Graphics may not be used in any advertising or +publicity relating to the software without the specific, prior written +permission of Sam Leffler and Silicon Graphics. + +THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, +EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY +WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR +ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF +LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. + +---- + +LIBWEBP + +Copyright (c) 2010, Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +---- + +OPENJPEG + +* + * The copyright in this software is being made available under the 2-clauses + * BSD License, included below. This software may be subject to other third + * party and contributor rights, including patent rights, and no such rights + * are granted under this license. + * + * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2014, Professor Benoit Macq + * Copyright (c) 2003-2014, Antonin Descampe + * Copyright (c) 2003-2009, Francois-Olivier Devaux + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France + * Copyright (c) 2012, CS Systemes d'Information, France + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +--- + +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE +========================================= + +PNG Reference Library License version 2 +--------------------------------------- + + * Copyright (c) 1995-2019 The PNG Reference Library Authors. + * Copyright (c) 2018-2019 Cosmin Truta. + * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson. + * Copyright (c) 1996-1997 Andreas Dilger. + * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + +The software is supplied "as is", without warranty of any kind, +express or implied, including, without limitation, the warranties +of merchantability, fitness for a particular purpose, title, and +non-infringement. In no event shall the Copyright owners, or +anyone distributing the software, be liable for any damages or +other liability, whether in contract, tort or otherwise, arising +from, out of, or in connection with the software, or the use or +other dealings in the software, even if advised of the possibility +of such damage. + +Permission is hereby granted to use, copy, modify, and distribute +this software, or portions hereof, for any purpose, without fee, +subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you + must not claim that you wrote the original software. If you + use this software in a product, an acknowledgment in the product + documentation would be appreciated, but is not required. + + 2. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + + +PNG Reference Library License version 1 (for libpng 0.5 through 1.6.35) +----------------------------------------------------------------------- + +libpng versions 1.0.7, July 1, 2000, through 1.6.35, July 15, 2018 are +Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are +derived from libpng-1.0.6, and are distributed according to the same +disclaimer and license as libpng-1.0.6 with the following individuals +added to the list of Contributing Authors: + + Simon-Pierre Cadieux + Eric S. Raymond + Mans Rullgard + Cosmin Truta + Gilles Vollant + James Yu + Mandar Sahastrabuddhe + Google Inc. + Vadim Barkov + +and with the following additions to the disclaimer: + + There is no warranty against interference with your enjoyment of + the library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes + or needs. This library is provided with all faults, and the entire + risk of satisfactory quality, performance, accuracy, and effort is + with the user. + +Some files in the "contrib" directory and some configure-generated +files that are distributed with libpng have other copyright owners, and +are released under other open source licenses. + +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are +Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from +libpng-0.96, and are distributed according to the same disclaimer and +license as libpng-0.96, with the following individuals added to the +list of Contributing Authors: + + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik + +libpng versions 0.89, June 1996, through 0.96, May 1997, are +Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88, +and are distributed according to the same disclaimer and license as +libpng-0.88, with the following individuals added to the list of +Contributing Authors: + + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner + +Some files in the "scripts" directory have other copyright owners, +but are released under this license. + +libpng versions 0.5, May 1995, through 0.88, January 1996, are +Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + +For the purposes of this copyright and license, "Contributing Authors" +is defined as the following set of individuals: + + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + +The PNG Reference Library is supplied "AS IS". The Contributing +Authors and Group 42, Inc. disclaim all warranties, expressed or +implied, including, without limitation, the warranties of +merchantability and of fitness for any purpose. The Contributing +Authors and Group 42, Inc. assume no liability for direct, indirect, +incidental, special, exemplary, or consequential damages, which may +result from the use of the PNG Reference Library, even if advised of +the possibility of such damage. + +Permission is hereby granted to use, copy, modify, and distribute this +source code, or portions hereof, for any purpose, without fee, subject +to the following restrictions: + + 1. The origin of this source code must not be misrepresented. + + 2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. + + 3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + +The Contributing Authors and Group 42, Inc. specifically permit, +without fee, and encourage the use of this source code as a component +to supporting the PNG file format in commercial products. If you use +this source code in a product, acknowledgment is not required but would +be appreciated. + +---- + +RAQM + +The MIT License (MIT) + +Copyright © 2015 Information Technology Authority (ITA) +Copyright © 2016 Khaled Hosny + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +---- + +XAU + +Copyright 1988, 1993, 1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +---- + +XCB + +Copyright (C) 2001-2006 Bart Massey, Jamey Sharp, and Josh Triplett. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the names of the authors +or their institutions shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this +Software without prior written authorization from the +authors. + +---- + +XDMCP + +Copyright 1989, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +Author: Keith Packard, MIT X Consortium + +---- + +ZLIB + + (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. + +If you redistribute modified sources, we would appreciate that you include in +the file ChangeLog history information documenting your changes. Please read +the FAQ for more information on the distribution of modified source versions. \ No newline at end of file diff --git a/.venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/METADATA b/.venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/METADATA new file mode 100644 index 00000000..11bb79ee --- /dev/null +++ b/.venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/METADATA @@ -0,0 +1,143 @@ +Metadata-Version: 2.1 +Name: Pillow +Version: 8.4.0 +Summary: Python Imaging Library (Fork) +Home-page: https://python-pillow.org +Author: Alex Clark (PIL Fork Author) +Author-email: aclark@python-pillow.org +License: HPND +Project-URL: Documentation, https://pillow.readthedocs.io +Project-URL: Source, https://github.com/python-pillow/Pillow +Project-URL: Funding, https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=pypi +Project-URL: Release notes, https://pillow.readthedocs.io/en/stable/releasenotes/index.html +Project-URL: Changelog, https://github.com/python-pillow/Pillow/blob/master/CHANGES.rst +Project-URL: Twitter, https://twitter.com/PythonPillow +Keywords: Imaging +Platform: UNKNOWN +Classifier: Development Status :: 6 - Mature +Classifier: License :: OSI Approved :: Historical Permission Notice and Disclaimer (HPND) +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3 :: Only +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Multimedia :: Graphics +Classifier: Topic :: Multimedia :: Graphics :: Capture :: Digital Camera +Classifier: Topic :: Multimedia :: Graphics :: Capture :: Screen Capture +Classifier: Topic :: Multimedia :: Graphics :: Graphics Conversion +Classifier: Topic :: Multimedia :: Graphics :: Viewers +Requires-Python: >=3.6 +Description-Content-Type: text/markdown +License-File: LICENSE + +

+ Pillow logo +

+ +# Pillow + +## Python Imaging Library (Fork) + +Pillow is the friendly PIL fork by [Alex Clark and +Contributors](https://github.com/python-pillow/Pillow/graphs/contributors). +PIL is the Python Imaging Library by Fredrik Lundh and Contributors. +As of 2019, Pillow development is +[supported by Tidelift](https://tidelift.com/subscription/pkg/pypi-pillow?utm_source=pypi-pillow&utm_medium=readme&utm_campaign=enterprise). + + + + + + + + + + + + + + + + + + +
docs + Documentation Status +
tests + GitHub Actions build status (Lint) + GitHub Actions build status (Test Linux and macOS) + GitHub Actions build status (Test Windows) + GitHub Actions build status (Test Docker) + AppVeyor CI build status (Windows) + GitHub Actions wheels build status (Wheels) + Travis CI wheels build status (aarch64) + Code coverage +
package + Zenodo + Tidelift + Newest PyPI version + Number of PyPI downloads +
social + Join the chat at https://gitter.im/python-pillow/Pillow + Follow on https://twitter.com/PythonPillow +
+ +## Overview + +The Python Imaging Library adds image processing capabilities to your Python interpreter. + +This library provides extensive file format support, an efficient internal representation, and fairly powerful image processing capabilities. + +The core image library is designed for fast access to data stored in a few basic pixel formats. It should provide a solid foundation for a general image processing tool. + +## More Information + +- [Documentation](https://pillow.readthedocs.io/) + - [Installation](https://pillow.readthedocs.io/en/latest/installation.html) + - [Handbook](https://pillow.readthedocs.io/en/latest/handbook/index.html) +- [Contribute](https://github.com/python-pillow/Pillow/blob/master/.github/CONTRIBUTING.md) + - [Issues](https://github.com/python-pillow/Pillow/issues) + - [Pull requests](https://github.com/python-pillow/Pillow/pulls) +- [Release notes](https://pillow.readthedocs.io/en/stable/releasenotes/index.html) +- [Changelog](https://github.com/python-pillow/Pillow/blob/master/CHANGES.rst) + - [Pre-fork](https://github.com/python-pillow/Pillow/blob/master/CHANGES.rst#pre-fork) + +## Report a Vulnerability + +To report a security vulnerability, please follow the procedure described in the [Tidelift security policy](https://tidelift.com/docs/security). + + diff --git a/.venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/RECORD b/.venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/RECORD new file mode 100644 index 00000000..e6dd26de --- /dev/null +++ b/.venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/RECORD @@ -0,0 +1,212 @@ +PIL/BdfFontFile.py,sha256=hRnSgFZOIiTgWfJIaRHRQpU4TKVok2E31KJY6sbZPwc,2817 +PIL/BlpImagePlugin.py,sha256=mueMvKLQrS_b082agtFskRnzhCoxuOEyX3VwDm5wzdg,14569 +PIL/BmpImagePlugin.py,sha256=7XdbhPAcXDY93O0rHg8ogcFz5FmhF1G9ZKmuzG4gI2c,14117 +PIL/BufrStubImagePlugin.py,sha256=Zq60GwcqQJTmZJrA9EQq94QvYpNqwYvQzHojh4U7SDw,1520 +PIL/ContainerIO.py,sha256=1U15zUXjWO8uWK-MyCp66Eh7djQEU-oUeCDoBqewNkA,2883 +PIL/CurImagePlugin.py,sha256=er_bI3V1Ezly0QfFJq0fZMlGwrD5izDutwF1FrOwiMA,1679 +PIL/DcxImagePlugin.py,sha256=bfESLTji9GerqI4oYsy5oTFyRMlr2mjSsXzpY9IuLsk,2145 +PIL/DdsImagePlugin.py,sha256=cUSGUNx_sf5UFryyMLrOf1vJQIMx9GwoMfuvxz3Bg1U,7987 +PIL/EpsImagePlugin.py,sha256=mKiRyVh5NcX9MI1ByBzlnSB1u8xx_kX7Q_wcalcZkBY,11918 +PIL/ExifTags.py,sha256=0YRoKyMwPabWOZZgVeLL6mlaGjbZgfF-z8WuUc6Ibb0,9446 +PIL/FitsStubImagePlugin.py,sha256=F9NJsro-OyxKmt9SLBemx5LZaCqFXIejBVbZY9nuUPA,2555 +PIL/FliImagePlugin.py,sha256=pGeC1JI6d5xdYWRhsKz0_3yeFzGII_jYbQhJYNo6n7Y,4260 +PIL/FontFile.py,sha256=LkQcbwUu1C4fokMnbg-ao9ksp2RX-saaPRie-z2rpH4,2765 +PIL/FpxImagePlugin.py,sha256=nKGioxa5C0q9X9qva3t_htRV_3jXQcFkclVxTEaSusk,6658 +PIL/FtexImagePlugin.py,sha256=rHNkZXfhF21i3klylBqo8nJrIm41TxdCLHiv0Zgwbb0,3305 +PIL/GbrImagePlugin.py,sha256=u9kOIdBxYMRrXfXfIwGcz0uyvvxNRCwO3U1xcfa51T4,2794 +PIL/GdImageFile.py,sha256=JFWSUssG1z1r884GQtBbZ3T7uhPF4cDXSuW3ctgf3TU,2465 +PIL/GifImagePlugin.py,sha256=aY77KxVMCvXimrYmENZms_kqTk9EkBLeuSw79AhiiDg,30330 +PIL/GimpGradientFile.py,sha256=G0ClRmjRHIJoU0nmG-P-tgehLHZip5i0rY4-5pjJ7bc,3353 +PIL/GimpPaletteFile.py,sha256=_wWvNmB40AfQ1M5sTxoYYXOMApWQji7rrubqZhfd1dU,1274 +PIL/GribStubImagePlugin.py,sha256=sSBrTisTcunuC0WcSQ4_55nV6uFvLCQ0JLSd62dgURw,1515 +PIL/Hdf5StubImagePlugin.py,sha256=zjtFPZIcVkWXvYRPnHow6XA9kElEi772w7PFSuEqmq4,1517 +PIL/IcnsImagePlugin.py,sha256=lXyu80uDDCIltyFmCuThVLzjGU7r7VnjdcRHlgJOVAw,11596 +PIL/IcoImagePlugin.py,sha256=hru3Wu7soWoRl-CGKs7Wv14FbeiHvxv_l5HkSVsnK30,10822 +PIL/ImImagePlugin.py,sha256=RFFyRlFJTVuti-TZ9yWsqP7vJJydgX1MC6mjYwwdw-0,10729 +PIL/Image.py,sha256=a3QVr3M1kRfI82tiOXspyJvwbL732fd-KAZGYEZrtck,122031 +PIL/ImageChops.py,sha256=HOGSnuU4EcCbdeUzEGPm54zewppHWWe12XLyOLLPgCw,7297 +PIL/ImageCms.py,sha256=nx8mwBoN9npRwz7y5fhPdm_jFhl7wRtIcwB8RPXAaco,37088 +PIL/ImageColor.py,sha256=2e9xfO08S6afUzoahUIzyMN8RJcQsMz9E92rFnEhfP0,8727 +PIL/ImageDraw.py,sha256=Vx9suYwaqZ-mz5JJQFuJTFi8ix-z-LXHyfYOOEki0Vc,33946 +PIL/ImageDraw2.py,sha256=oBhpBTZhx3bd4D0s8E2kDjBzgThRkDU_TE_987l501k,5019 +PIL/ImageEnhance.py,sha256=CJnCouiBmxN2fE0xW7m_uMdBqcm-Fp0S3ruHhkygal4,3190 +PIL/ImageFile.py,sha256=MzpDDInyeANJxLho-T15CV1n1G-jAhN37cJxbEVbEMs,21144 +PIL/ImageFilter.py,sha256=SBdX7_KqGKFOJxXjv9Uc5gUP1LkvQ-r-2cbiRtcXoeM,16129 +PIL/ImageFont.py,sha256=6DHShfMCcIYoYswrktiZZe5_LFYPSIFT_mI4APVxuZw,45311 +PIL/ImageGrab.py,sha256=2o1aA0_vP-KeRJsJtIxYhi61yCK4k_Khh6NHQD7HO2Q,3625 +PIL/ImageMath.py,sha256=iQPtbXgdhcCchGTXbDop7AiI_Fe-fNmq8m1YHsHMBgc,7048 +PIL/ImageMode.py,sha256=woBgGcqCT5yTkS5yNWJyst4aaLdSMZsPpPoXDgnqo6M,2075 +PIL/ImageMorph.py,sha256=KL2843wgfLyXPOWEJnTXRvySfbpRrlTqA_0M1j5xuD0,7773 +PIL/ImageOps.py,sha256=MyLWGMdwa-5b4CDldBRpRZyoWw9DCssZzpPgKhYLUc8,20291 +PIL/ImagePalette.py,sha256=MCReMV6Ej9GvalXyAFoojKB8z4PVkigX153Lfrk2UaU,7841 +PIL/ImagePath.py,sha256=lVmH1-lCd0SyrFoqyhlstAFW2iJuC14fPcW8iewvxCQ,336 +PIL/ImageQt.py,sha256=oZFNAntkAYxTbS99jU8F6L9U15U8xDtNU0QGZddXMsk,6380 +PIL/ImageSequence.py,sha256=3djA7vDH6wafTGbt4e_lPlVhy2TaKfdSrA1XQ4n-Uoc,1850 +PIL/ImageShow.py,sha256=spuSP6ObqyfqC_sturCcZgbGwCqsC9pkqCx5ozHEEDs,6863 +PIL/ImageStat.py,sha256=PieQi44mRHE6jod7NqujwGr6WCntuZuNGmC2z9PaoDY,3901 +PIL/ImageTk.py,sha256=rLPqAnLH61y2XRHgRPUdesYLQqnDQ__LeRK66KL_fPQ,9324 +PIL/ImageTransform.py,sha256=V2l6tsjmymMIF7HQBMI21UPn4mlicarrm4NF3Kazvio,2843 +PIL/ImageWin.py,sha256=1MQBJS7tVrQzI9jN0nmeNeFpIaq8fXra9kQocHkiFxM,7191 +PIL/ImtImagePlugin.py,sha256=cn60lqUVnK2oh_sPqPBORr_rZ4zuF_6FU0V96IAh8Ww,2203 +PIL/IptcImagePlugin.py,sha256=-RZBUUodHcF5wLKanW1MxJj7cbLOpx5LvXqm0vDM22U,5714 +PIL/Jpeg2KImagePlugin.py,sha256=fC5qVN7kGz9awyF8P0EEI5XFVOPJDUdJgu3uVWhDLRk,10386 +PIL/JpegImagePlugin.py,sha256=FfxP12Zi2quaR2t2dw-IREvX0wrndxFvLvGOjeMHD9M,28396 +PIL/JpegPresets.py,sha256=6nVnX_H8eA8ZO7AOVvkUx8gEN6QfI8zKnV6od16XgWE,12347 +PIL/McIdasImagePlugin.py,sha256=LrP5nA7l8IQG3WhlMI0Xs8fGXY_uf6IDmzNCERl3tGw,1754 +PIL/MicImagePlugin.py,sha256=Eh94vjTurXYkmm27hhooyNm9NkWWyVxP8Nq4thNLV6Y,2607 +PIL/MpegImagePlugin.py,sha256=n16Zgdy8Hcfke16lQwZWs53PZq4BA_OxPCMPDkW62nw,1803 +PIL/MpoImagePlugin.py,sha256=2C07_0-G0XepZnJRNSAKp3Os8t_qo32N2WquMomXR9I,4399 +PIL/MspImagePlugin.py,sha256=RdQb1e5-KDWdWy-3MUhchTlxf9TPgyw2axONt_vWRUE,5526 +PIL/PSDraw.py,sha256=xmJ6GVUvDm1SC3QuUpYdeNfGu9lYBLX1ndCt96tObcc,6719 +PIL/PaletteFile.py,sha256=s3KtsDuY5S04MKDyiXK3iIbiOGzV9PvCDUpOQHI7yqc,1106 +PIL/PalmImagePlugin.py,sha256=lTVwwSPFrQ-IPFGU8_gRCMZ1Lb73cuVhQ-nkx1Q0oqc,9108 +PIL/PcdImagePlugin.py,sha256=cnBm_xKcpLGT6hZ8QKai9Up0gZERMxZwhDXl1hQtBm0,1476 +PIL/PcfFontFile.py,sha256=njhgblsjSVcITVz1DpWdEligmJgPMh5nTk_zDDWWTik,6348 +PIL/PcxImagePlugin.py,sha256=J-Pm2QBt5Hi4ObPeXDnc87X7nl1hbtTGqy4sTov6tug,5864 +PIL/PdfImagePlugin.py,sha256=5G3tVYhuR_1n6N5SRHU5URo6WKN-lgCWJsd9I7g78vs,7344 +PIL/PdfParser.py,sha256=ShZFc_iR0T7NzA44KoLtcDIRzAoDFY0RE-xC_iBw_10,34551 +PIL/PixarImagePlugin.py,sha256=5MMcrrShVr511QKevK1ziKyJn0WllokWQxBhs8NWttY,1631 +PIL/PngImagePlugin.py,sha256=m3s82KcpJ_awnsp4GKrFQd2-7zy6nq7SzUsdGTntBwU,44148 +PIL/PpmImagePlugin.py,sha256=UNwCp3h7psEK8i0p3P93VVXUBz9_8tUVzUWsITux6HQ,4447 +PIL/PsdImagePlugin.py,sha256=tSkfdEw---66vlBu4OA9y7zsQ5y4gIIThhyFi6orT0o,8072 +PIL/PyAccess.py,sha256=SaGs2ZE4kjh-dybpAA5_Og4wuhA6d0LTPKK8t2aHffY,9607 +PIL/SgiImagePlugin.py,sha256=mqpi0G4aiKzWmJHk22WKZ0oGqsglcTNgDfp4H8S-GCM,6097 +PIL/SpiderImagePlugin.py,sha256=gJI4peH7axhNNW37An9ixeFFAYooHh4DZSYPotXnQfo,9535 +PIL/SunImagePlugin.py,sha256=bnjnVFRjvApCH1QC1F9HeynoCe5AZk3wa1tOhPvHzKU,4282 +PIL/TarIO.py,sha256=E_pjAxk9wHezXUuR_99liySBXfJoL2wjzdNDf0g1hTo,1440 +PIL/TgaImagePlugin.py,sha256=jf7cIHVLCqrgxrV6RRTh0ViH5vr2308QqI0k_CL2RwE,6272 +PIL/TiffImagePlugin.py,sha256=j6IXb0fwIxsCcS8vhrugVl6qsd7SD716LjQ90WUnPTM,72522 +PIL/TiffTags.py,sha256=s9sOrIxxDdZSgi06YdalbZOn_p8V1Gh5V2TZg3B4DEg,15286 +PIL/WalImageFile.py,sha256=jJNdRLIjbEsPkpkIdY2n6WlStDz1ttVQS7y3DJE7qTU,5546 +PIL/WebPImagePlugin.py,sha256=VkCNYJRoJd8wXT4JG31CF4crjjPfuoOvDH81o4vqJ1w,10830 +PIL/WmfImagePlugin.py,sha256=2dDhAUW8-uebXmBJbI8TDJapK49ocUros1hbUUDlmO8,4639 +PIL/XVThumbImagePlugin.py,sha256=zmZ8Z4B8Kr6NOdUqSipW9_X5mKiLBLs-wxvPRRg1l0M,1940 +PIL/XbmImagePlugin.py,sha256=oIEt_uqwKKU6lLS_IVFwEjotwE1FI4_IHUnx_6Ul_gk,2430 +PIL/XpmImagePlugin.py,sha256=1EBt-g678p0A0NXOkxq7sGM8dymneDMHHQmwJzAbrlw,3062 +PIL/__init__.py,sha256=NnlpBykSA7dIeA6k7aHKD2ikvrCKhpieYVv7UieVoyk,3260 +PIL/__main__.py,sha256=axR7PO-HtXp-o0rBhKIxs0wark0rBfaDIhAIWqtWUo4,41 +PIL/__pycache__/BdfFontFile.cpython-39.pyc,, +PIL/__pycache__/BlpImagePlugin.cpython-39.pyc,, +PIL/__pycache__/BmpImagePlugin.cpython-39.pyc,, +PIL/__pycache__/BufrStubImagePlugin.cpython-39.pyc,, +PIL/__pycache__/ContainerIO.cpython-39.pyc,, +PIL/__pycache__/CurImagePlugin.cpython-39.pyc,, +PIL/__pycache__/DcxImagePlugin.cpython-39.pyc,, +PIL/__pycache__/DdsImagePlugin.cpython-39.pyc,, +PIL/__pycache__/EpsImagePlugin.cpython-39.pyc,, +PIL/__pycache__/ExifTags.cpython-39.pyc,, +PIL/__pycache__/FitsStubImagePlugin.cpython-39.pyc,, +PIL/__pycache__/FliImagePlugin.cpython-39.pyc,, +PIL/__pycache__/FontFile.cpython-39.pyc,, +PIL/__pycache__/FpxImagePlugin.cpython-39.pyc,, +PIL/__pycache__/FtexImagePlugin.cpython-39.pyc,, +PIL/__pycache__/GbrImagePlugin.cpython-39.pyc,, +PIL/__pycache__/GdImageFile.cpython-39.pyc,, +PIL/__pycache__/GifImagePlugin.cpython-39.pyc,, +PIL/__pycache__/GimpGradientFile.cpython-39.pyc,, +PIL/__pycache__/GimpPaletteFile.cpython-39.pyc,, +PIL/__pycache__/GribStubImagePlugin.cpython-39.pyc,, +PIL/__pycache__/Hdf5StubImagePlugin.cpython-39.pyc,, +PIL/__pycache__/IcnsImagePlugin.cpython-39.pyc,, +PIL/__pycache__/IcoImagePlugin.cpython-39.pyc,, +PIL/__pycache__/ImImagePlugin.cpython-39.pyc,, +PIL/__pycache__/Image.cpython-39.pyc,, +PIL/__pycache__/ImageChops.cpython-39.pyc,, +PIL/__pycache__/ImageCms.cpython-39.pyc,, +PIL/__pycache__/ImageColor.cpython-39.pyc,, +PIL/__pycache__/ImageDraw.cpython-39.pyc,, +PIL/__pycache__/ImageDraw2.cpython-39.pyc,, +PIL/__pycache__/ImageEnhance.cpython-39.pyc,, +PIL/__pycache__/ImageFile.cpython-39.pyc,, +PIL/__pycache__/ImageFilter.cpython-39.pyc,, +PIL/__pycache__/ImageFont.cpython-39.pyc,, +PIL/__pycache__/ImageGrab.cpython-39.pyc,, +PIL/__pycache__/ImageMath.cpython-39.pyc,, +PIL/__pycache__/ImageMode.cpython-39.pyc,, +PIL/__pycache__/ImageMorph.cpython-39.pyc,, +PIL/__pycache__/ImageOps.cpython-39.pyc,, +PIL/__pycache__/ImagePalette.cpython-39.pyc,, +PIL/__pycache__/ImagePath.cpython-39.pyc,, +PIL/__pycache__/ImageQt.cpython-39.pyc,, +PIL/__pycache__/ImageSequence.cpython-39.pyc,, +PIL/__pycache__/ImageShow.cpython-39.pyc,, +PIL/__pycache__/ImageStat.cpython-39.pyc,, +PIL/__pycache__/ImageTk.cpython-39.pyc,, +PIL/__pycache__/ImageTransform.cpython-39.pyc,, +PIL/__pycache__/ImageWin.cpython-39.pyc,, +PIL/__pycache__/ImtImagePlugin.cpython-39.pyc,, +PIL/__pycache__/IptcImagePlugin.cpython-39.pyc,, +PIL/__pycache__/Jpeg2KImagePlugin.cpython-39.pyc,, +PIL/__pycache__/JpegImagePlugin.cpython-39.pyc,, +PIL/__pycache__/JpegPresets.cpython-39.pyc,, +PIL/__pycache__/McIdasImagePlugin.cpython-39.pyc,, +PIL/__pycache__/MicImagePlugin.cpython-39.pyc,, +PIL/__pycache__/MpegImagePlugin.cpython-39.pyc,, +PIL/__pycache__/MpoImagePlugin.cpython-39.pyc,, +PIL/__pycache__/MspImagePlugin.cpython-39.pyc,, +PIL/__pycache__/PSDraw.cpython-39.pyc,, +PIL/__pycache__/PaletteFile.cpython-39.pyc,, +PIL/__pycache__/PalmImagePlugin.cpython-39.pyc,, +PIL/__pycache__/PcdImagePlugin.cpython-39.pyc,, +PIL/__pycache__/PcfFontFile.cpython-39.pyc,, +PIL/__pycache__/PcxImagePlugin.cpython-39.pyc,, +PIL/__pycache__/PdfImagePlugin.cpython-39.pyc,, +PIL/__pycache__/PdfParser.cpython-39.pyc,, +PIL/__pycache__/PixarImagePlugin.cpython-39.pyc,, +PIL/__pycache__/PngImagePlugin.cpython-39.pyc,, +PIL/__pycache__/PpmImagePlugin.cpython-39.pyc,, +PIL/__pycache__/PsdImagePlugin.cpython-39.pyc,, +PIL/__pycache__/PyAccess.cpython-39.pyc,, +PIL/__pycache__/SgiImagePlugin.cpython-39.pyc,, +PIL/__pycache__/SpiderImagePlugin.cpython-39.pyc,, +PIL/__pycache__/SunImagePlugin.cpython-39.pyc,, +PIL/__pycache__/TarIO.cpython-39.pyc,, +PIL/__pycache__/TgaImagePlugin.cpython-39.pyc,, +PIL/__pycache__/TiffImagePlugin.cpython-39.pyc,, +PIL/__pycache__/TiffTags.cpython-39.pyc,, +PIL/__pycache__/WalImageFile.cpython-39.pyc,, +PIL/__pycache__/WebPImagePlugin.cpython-39.pyc,, +PIL/__pycache__/WmfImagePlugin.cpython-39.pyc,, +PIL/__pycache__/XVThumbImagePlugin.cpython-39.pyc,, +PIL/__pycache__/XbmImagePlugin.cpython-39.pyc,, +PIL/__pycache__/XpmImagePlugin.cpython-39.pyc,, +PIL/__pycache__/__init__.cpython-39.pyc,, +PIL/__pycache__/__main__.cpython-39.pyc,, +PIL/__pycache__/_binary.cpython-39.pyc,, +PIL/__pycache__/_tkinter_finder.cpython-39.pyc,, +PIL/__pycache__/_util.cpython-39.pyc,, +PIL/__pycache__/_version.cpython-39.pyc,, +PIL/__pycache__/features.cpython-39.pyc,, +PIL/_binary.py,sha256=E5qhxNJ7hhbEoqu0mODOXHT8z-FDRShXG3jTJhsDdas,2043 +PIL/_imaging.cpython-39-x86_64-linux-gnu.so,sha256=3fd3n1yNLuikWPEjYX4PMYgvDtloGxkC3mlPoYpf7eI,690408 +PIL/_imagingcms.cpython-39-x86_64-linux-gnu.so,sha256=ahHNRyzxSGhKIi_3-S1G_MRy1AzDMtIsYzNOZ3AKmUg,47120 +PIL/_imagingft.cpython-39-x86_64-linux-gnu.so,sha256=xV0z35S8wz-_8sy5SVjc4ezgzkc20nFhPbJTaVLPkq0,68616 +PIL/_imagingmath.cpython-39-x86_64-linux-gnu.so,sha256=0KJXtj2tPNs_WL16e44Ms9XnUG9jwfbHAstX0EgSqoc,30976 +PIL/_imagingmorph.cpython-39-x86_64-linux-gnu.so,sha256=obJSPi6AGhsOV8Du7NWaPG9j3tQt12HAkdEDVed2ARQ,14656 +PIL/_imagingtk.cpython-39-x86_64-linux-gnu.so,sha256=wvuzENwFMjPjsSmP2haO4OtqbX-H_IFkrYko1n-9IcM,14656 +PIL/_tkinter_finder.py,sha256=-X7xba1HO66pG1K5KSNf4Yo2eORwFTXcoFtHsmmNEcQ,525 +PIL/_util.py,sha256=pbjX5KY1W2oZyYVC4TE9ai2PfrJZrAsO5hAnz_JMees,359 +PIL/_version.py,sha256=z-VuA4bGtBQYCROyUtgkMY80ki9XAWbicT7vKIWTu84,50 +PIL/_webp.cpython-39-x86_64-linux-gnu.so,sha256=8mDlaooP7ajsomzNhAc7UK6BeK8wSn_fwf_vIJ9aXF8,45816 +PIL/features.py,sha256=j2LT6v78cHWbR8z8OVaAGIbJWI-Bs62pfiB1i1fminM,9387 +Pillow-8.4.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +Pillow-8.4.0.dist-info/LICENSE,sha256=AYeYtqcrcjZrfTw8imgknuKkpPYeu0IUynv45BY00PU,27652 +Pillow-8.4.0.dist-info/METADATA,sha256=kM4lC8c4s460AJxQIo0m3hhjI83n8SCkpkpuh28mlDw,7453 +Pillow-8.4.0.dist-info/RECORD,, +Pillow-8.4.0.dist-info/WHEEL,sha256=ts1NGDem03kTrzsJp50lKy9cpDxDoGil0Q-wLa_TR_0,148 +Pillow-8.4.0.dist-info/top_level.txt,sha256=riZqrk-hyZqh5f1Z0Zwii3dKfxEsByhu9cU9IODF-NY,4 +Pillow-8.4.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 +Pillow.libs/libXau-00ec42fe.so.6.0.0,sha256=d75mSMNgdE9Ubbyh6DWZcVKSq3R4m8pD6eltRC2w49o,17048 +Pillow.libs/libfreetype-804dfcff.so.6.18.0,sha256=dedyzFf3aN0wvm7CSdDJAT80q2vdfrsbkSyxx3sGitE,1410192 +Pillow.libs/libharfbuzz-a69be65e.so.0.30000.0,sha256=-AGASwIdNaZrseoFkFxsswv1t7KfZFa-Yg6rYASgccg,2923504 +Pillow.libs/libjpeg-183418da.so.9.4.0,sha256=1B9nLxyvPsvWrkPtehO8-RePJe4qziv76IZITFnQF3c,250480 +Pillow.libs/liblcms2-035b9744.so.2.0.12,sha256=tCf-Iw-t7FyvGMML4Uc4iNfhvrf1jWwxzWw4nHyDOXQ,481912 +Pillow.libs/liblzma-d540a118.so.5.2.5,sha256=JbIyQEIYTjuWokwsiGf-sItr6eJBCFWYtfeWpZJ9o64,220808 +Pillow.libs/libopenjp2-430a98fc.so.2.4.0,sha256=xYk9Bl7aTIe1OD9RO8v-2bE4chHpieehUC-zlKPyW0Q,532568 +Pillow.libs/libpng16-213e245f.so.16.37.0,sha256=VG5oYdhMJaFXlX2G7wDk7Ig4m0gQ5BLTjskGjZraGK4,283968 +Pillow.libs/libtiff-9ffe9659.so.5.7.0,sha256=iFSY1IGiiOqw5YJdd2LSVuJMWOC-ZKdUMw1f9_aaCEM,689944 +Pillow.libs/libwebp-d8a3db66.so.7.1.2,sha256=DXWJlpikvPnqcBydQvgbLNy2ylG9_FuKtvAq5EeEVHE,641712 +Pillow.libs/libwebpdemux-f117ddb4.so.2.0.8,sha256=sSJ4GgrP8E4RPUOLo3zBaNKM542R6CHtWB5EJM1GMpU,29456 +Pillow.libs/libwebpmux-fe44437b.so.3.0.7,sha256=gIPOQVN5Cf9knVeCjU4dHi52ciCqeO8tQyxOIJu4UCY,54456 +Pillow.libs/libxcb-1122e22b.so.1.1.0,sha256=Ghohd8ctbBf5_jE5i6MExypVbwyX-uv1QjLvW_ADCHQ,243216 +Pillow.libs/libz-dd453c56.so.1.2.11,sha256=nYOJa1r68aU19J0jCVgalS9ypvHhC606cwm05SBt3rU,129328 diff --git a/.venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/WHEEL b/.venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/WHEEL new file mode 100644 index 00000000..ade37309 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/WHEEL @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.37.0) +Root-Is-Purelib: false +Tag: cp39-cp39-manylinux_2_17_x86_64 +Tag: cp39-cp39-manylinux2014_x86_64 + diff --git a/.venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/top_level.txt b/.venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/top_level.txt new file mode 100644 index 00000000..b338169c --- /dev/null +++ b/.venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/top_level.txt @@ -0,0 +1 @@ +PIL diff --git a/.venv/lib/python3.9/site-packages/mathprolib-0.1.7-py3.9.egg-info/dependency_links.txt b/.venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/zip-safe similarity index 100% rename from .venv/lib/python3.9/site-packages/mathprolib-0.1.7-py3.9.egg-info/dependency_links.txt rename to .venv/lib/python3.9/site-packages/Pillow-8.4.0.dist-info/zip-safe diff --git a/.venv/lib/python3.9/site-packages/Pillow.libs/libXau-00ec42fe.so.6.0.0 b/.venv/lib/python3.9/site-packages/Pillow.libs/libXau-00ec42fe.so.6.0.0 new file mode 100644 index 0000000000000000000000000000000000000000..936dbcdd7f2ccd022346baebcfdd10c55542b43c GIT binary patch literal 17048 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/Pillow.libs/libfreetype-804dfcff.so.6.18.0 b/.venv/lib/python3.9/site-packages/Pillow.libs/libfreetype-804dfcff.so.6.18.0 new file mode 100644 index 0000000000000000000000000000000000000000..0325ee854035f804c5c304b355db85a88e3995e1 GIT binary patch literal 1410192 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

Mbufxeyvx4N$GR<`>yhTB|P0e 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%0A17djZ)a{olC}FL# z@>l=&62=+gm-#>R=f6_nRv>3g!t~v7#5u6wDK}>WN-3Q!r1^sxNxMOu;-sD^B!+nSyzO zRs+!sW(wvBTJfS6%oHrW*RM(oWqd_Wl=)LIO)x_+OE6b3U$9Uxa+3H9rU_;UW(npB z<_i`IMot!g!8E}P!7RaC!F<6&!N@7%FPJ8nA($nYE0`}>C>S|a`~}klGX%2)a|QDS z3k4&miN9c)V1{6pV6I@kV4+}ShWHDn31$dp3FZps3l<7SP8WZ{G{FqPEWupCe8ED& z$Qj}md$piq|Ji$@L0kro`X7So?Jr|Fyyg%J0Ct+WvFFp9KBw z`MxW+kmb6c{O`|M33~oX6#t6{N^cJxCiuv23- z!Q3l4&JodH%~_|+`fa8t1_r91=x=hF6+aOOm~uQ*PV1*h{IE`iQP!yR|%h)sQcOEUwxRiZ$7;AxQ|GA zQj<#h8Glp$6(V@5jPeg3q4UWRyiU-x<1XRLrHh^5--1^2lI8HvKllG&{^tA9ZEn%| z2FgD(xn%yvZ_OO-cR?^{uI6I|pPjFH({2X4FV^z2g3e6MM=vei-uM|b?RMljZQt&B zjcJ0n2~K#S^mu6!=wZ=M*ju{Y;TKDne|tvD>wTl~#ZwyJ+Nbg6uQldLJ{wMJ{)%9# zUw@i<8T@a{cSg$H%dec9{?Yk;Dmd(l=1uvo{BiB_6_ioF6`yPWu3u;zDp(-cP4sem z&3fsmwi|U!qq+Wx`&RRR2#!Ce`5(_}H0|M!UJ>;CLEE+dzNGzUe!Rbb-rf3ma7geI z!4raC3Z57ITd=|k?N>=KO0b$>tYA~Y6v3{7{RBq|juV_ExJ)ohaI4@h!F_`J1wRx# zE_h1td%=r>{|JWMqsw1Ku$EvW!KQ*qg4YSQ7HlKfQ*e;r5W!J`qXj1mE)rZLm@T+l z@D;)L1V0!2Uhq%BD}q5Qbv?=p))8zWc)ef;!R~@R1$zso2@Vt-A~-_uX2H>dV+AJ* z&J*+>U)6i)J7m3kYkZ9VgbrI|AB``L(|F`Ijp+k5Zo5(Ai7^`g9;-1zu%-CT5L_;P z_7H8ie}u*-M{6|Y+BZw{k#jYkkbIw;p!w*D8kY(Vouv8gg4-sG-4u=W*J{kTUt{f+ z8c)8c@v~%&%bRPwy^Tgw9xFv3PtpbR1ifvv{G+Mb{z!(#meV!n2;MwH^ScB$-L83i zrpAxgX*{rAqbZlkKj(U#Po7|EE6ryL?pdb&Tz6{xd!feHmT1fqyBtApYwd618#MQM z#;?-j_3GPZ`UsvHz|Z&xLNk8`FW2RHLdyBI;I_N8Jdl4`audJV|3&f5`uAXo|BB!_ z!IZoI_sVbLpOZM#R_J&K1l{-i@5Nu$Uf;oP*GXg5t{Uxb8mn~I*jLcnF8#klIekYx{j$aad2c+=()(3Gkj8Yk#vFMrIa8h!%8~0xuenZ<^Zh)*OmiMD z=dn4m-xUOC|5vu^3&#f@)mRp9u4;$Kjcvo{%Z+lw&-Bxu@zeh*ym>yMmDuaigwD*@ z9cpG1uUn_g{oul5y8X=k*%0Y}bHDcw(VP3PM*rJC`rmvHovGW`JYQqwXx=<8b51UA z&Dqv!DWBP!%y>2H8&<0JH`gmWb@9}9QCT$e9F4i3zV8)XU?b1u2Trh=a<*Ecd2^L* z^84qCF2DL2~!mZ_9iw=_WW>aGc<5 z!R3M*1a}DT6+9q#Oz^DWCBfh$I-e-PIKh^J-2?{*!;3U(75EI3YZ zw%~HX4T3ua_X-{mJSKQn@RDHgQORF0POzn5H^ISz;{<05E*IP&xI=KS-~qv7f@cLU z2?l>E`3uGgwiN6pI9PC;;B3L=f*S;P2<{a;Ab3phtl%ZV;A4`%V4Pq}!ESsAy=xv>+d3=#fwp-KR;@aD z_P+jqJ$A=8XU8lbI->FGKX?27<(BDByts7H_~-9zny|Zh;!jU}AGLe?P2rPsvZf>- zZIE#>|DVCRCwumq{#oxDE#Lhs`1iN#diQ+vK)YG*#b>5m*!s|4m%6>O@2_8W%)9dI zrS_*f|8V7-2S0rET+{qTKhDWm-Xd>G_rz+wT0DE|Fjp*Rv7L0D}US@-L{Sj88K@3kwrC!j7vW;;MT+~eU3IA-ZLV+T9=oj zj;C%s@Yqw{FUIWr^Kyg7`WBphq*v}EZ~VPG{gwKwV)x#^;q-F}jd!oy)N=B@9U~K# zU5fbW?u$1)vAIj?_=g@E*Ep-ug74RVTXRoAnlKkt2|!GG)>XFoZf`Pi4!9vbuc#1CWNIhlVt&vogM51;=b{m|ky z?O!{Tb>*eVy|3Nq zp?XyEirwKCSI=ykyY%hE>340;T6t5mHNA%YzAI#4>fS?XUC-Xz_rhQOZfJbc(>*)y z!_IXU-LYUpdgmqmx>+;+81d%p%i+t%-w@S(^14LVE%lo2ANyUeEfq!$9$w|{jA~UA zryP&DuH9D09o|vFBZ6y&|5)Qh`5SkvyZ-De{hN1qs6zV{nfWPe@;BB?`EaoJ>mRB# z9eC+z!+CK}?Ek3E_&1|#HvS;T`u^Z!X}gbA>@)e}_a`NMwQ%-NU%dJLBVW%xmj3NC zg|XjPJ%9SAny)=p_+-wQUvFRD;LmrqoV^@+dEY&+7tC98+kuqK{4f5x^V3zYJ~(>A zqK99}ZNJX5`^v^=BXge#j+nmdtH#MY#<#q;Ah~EBK;xK2Vi$I_#c4ZKz0GL7r^t7aT5Fpr29el z4$@OV?Lj@EyBGL5=s5EM?EyuB3PHERho>C(AG}{tVmN;2(i*B>2~n=D(^u37+48 zz5~QI846iB;9~Ftk$xDs3pOsK=OFzgkpF`7KG;+Sj)txwWRC(zgMSd|$DrePeFlM; z$2jm`L(e|^0EuTR#BAd+SfIUYIIZ-mWO_|mQla1r<|un7hKB={ys zUkB_9`4FU^0cL`VKpdyR(0u@^1l_kl{;Nuk6WXT(7Xybu{wio3c<%Eo-$KYw0XgUHX;2f@E+iF=$P00uv-K?1D@aP?}{|Xst4(Z zkuHRM9EkG^Z8>jnEM5S`LH`HvJml*@T<%y2dIqvrLC-<|Ffa==8gv@80($yzKjYYA zpM4DM2ze^f6F}^%OW+qn{y5SXk>@_}?9XYCy#>B4(wQL6n=EH5$T)79@7th_NFRdF zo1mJ|zYRVb*bKU7fsES_I?h!?K&>DvA}kpBWq0sRNDX9Kx!=73hihWjVyH}2y{AuC{P;FsX(p9JFgb5M@- z9$-7@`$IMa_!4M4WS78Cho1Wy_y3ko)R zurcTWi19O_>i~)c9|XMz_z|!^=m>~?!}fjva_&3%pszspgC7gL2gLd1JJ6f3v%tq8 zoetu>$1>Ccu^gX(uL^n-)DCq{L>)&62#yiOETcNzD_z z@%_h+@%Ff7rYM>wB{lRlZ_%t(v+H1;bX{W0@> zq9khjduJH?v@_cNIToyxP20bJpRtd$^%~}%0oLNyq2?|XC&cEzk@8#)!;XR#$I=?k zaSM9TaU{Am9GoHUThY)iSI~s1GcBhbk`ang)twrLdo6+l4Pe^k9uF(09XtbSrz7YI zEIv9zg7T1+gO9g3S67<}JIB4q(z&Jv)4?I`b%2nN9Q?v_9s@HS5|WBvc)tQ~X^|cVYAe{q9bM!U}&2RzZJ<@~9aSz7FLH zx~!PU@b#!(&_9Z)8vYnE3A&;fuV+2WVA+a`_k0J}AX{^Zo<~shAcy8!dA3vM)Lg2E zUmOhz(p(SE5tJn;SaWF}{#WrJx8{a=IdiLl+cnS7h5~dM;ySIjE{#o(HNsJfm5%YIaB-VlMMM zLcf}J`FwCIJbZ&TD9$d==^@Lrl70zxD7#^kXDzuz&E>$_N z4r>a(eV(Qq1lQ?u=6N=;WY^mv$B^GUR>Wi$W=pxS9q5dzL63y6+Tl;Lp4(ItSmF1w z$sbiM5E72G74*1jfJpQ?&o)9r*w5v1@WVQk=b)sN9j>HjjkFS^k3;9CB$Bg`YiBjK zY@`!Et|xSQ6D(X$s&oan>t=A_iS|qwSFDAiTXscG$CjgFFw5eqsJ?v~QgJ+mkrmaK z=DZbiFq*8?iVM-2R%WHCXaKv?_ZR|>N-LppRpJ9*At=po=qslMC%L?+emGzI4^EEY zfV9G&hi`E6%FI6`Jf2Jo#dyM3LKJ+RVj{zN%nQC=`BV*mmu9V$#v9IuV}e^Nrd~L| zv=N-5nE3F^D0y((2=;1X_;@ny%eO`WT7~lgrQi7rHCL)rlX2On4p?&O+}LPmTILGV5093NrgayP7&11rZF{J0xc>(2Ct zlsDGtFVWKOCe>0YKgo2{YHSEcGWyA#P;CIx<<=k`cj2n+aGcsjVg|F^%gXVeZkOAP zpD#gbG+ePF_n-vsE#>)-8LJ)t%)Q?gj0Opx2G;#;62FAByP_&hriT7fO>B9*^PT{!#@P8qTXS_bF9^k>L$k&(lhi z9zGtsn)_=vOFbr>-wP0Cd^lgWcb`>elf%Op?OVlUgg?)+ol}gylkfgcF>}NDL0|We zidh)`AN0Tbd}J+HXVw_QHux#B85z6A)9jO9RCzKTH4d{t7nIkXjv5~_`fp0N!coJ; zh?f+%+EJq+xj&Uba?!i}!S44%2kZCZ2)hGPEwyqxyfk=302vJ~C5ttvsh$mRUN7w%$pJ zmV35VrFwqn0Gne+vaVfXeq_kGTGz!Dvzp_4o*lUW${wy5KHKP?ui4%qHD}JW+>7iA z9BOHvm`sk_OuGX2x1pYzlP9;Z+)M2W+!xb5G0$)?+^I`2-V+l<G2L0@HMZKDR!79l z;sDOFBeS7hT`ne>#%t}!-DGR&(SE-k-XGM`qkWxbYmL>TeZ3y-8M|U8vI-mY@Lu?A z%tLI`jhcPxP|Vw8H);07shEq*XtN#p8Zz<}#qcuAovo`-uPEju3;B>{J)ofx>OkeuuXtqUBOn>@5qS;nOF?>$Oy-l-ii(+`4*yHBNs=j@8rRep>}o)lLvQ44hCgVUe6sI4a(pO z1e`V4YsP>)^HzKirY;I<)#a|R*LLx9OtlLu*^8X60XWEdwnJ_&c2*!`c}LG0XW2`f z6-I#ziQzhmo$0K=09ln{UPraT*1cu7*~sQ-}Wt*>(n3UI3c~2_RyjqG<<&Qm%V~Q);E=TTDim8ucNUPrO)YY)d-2sOB->B!Zk@~Uf zh9MbpS2><>MdJD>iV5vn|4k&r(_&*F4hiAuUu-7Y!u7gC<Wp+DzGFs}v~Cb} zTFeg$x%NBCH$^bMd>{1yGa#pbhM_!G-IMrnT~Kk?UiH0|*}boQU!?dzv6~8@d}FiF zRIc_;<^0iA=f5~U&)GJ+@f(WygNl5D=8ikUaZ%Z}o#miVKkQy;dBlnBh&Bm5VwdB2 zoR=2N&5FAfPNApmh~^ZjbG!zJ;T2lT5z&pJR9eOU%yt-Kd&u2NF-xf$JKk#e2qN3j z!K%Bxa(!HvZrJSXeK2n{ng)%TvgS!_|g{7$s9A1sd}H^P1&6w9#PA>^7?ooJ5iAA?jh$J&ui#${Oc`JgcN zTR!w3fD-mew4v3p(1AFK_8^!h+5;W4p*=3zN8xgVXct2Mv&cu{(tNs-(>~F@(N0XX z`}1e0ooFS6OAF8pfhjk3Nj`Q~!>(v~`*cuHDvFdTu`wRiW@o>T9N289gX-#Lvl{ZV zefCl9kSY$>7dwo>-oyqusvW}64#A*iY92Tm)R=wS6N1hZ@?;8@Em9$T2!aPdy6KLY zrkk8JO7f^yQ<`Wps^Yw84?>**15q0X8pdik2S4@!U9iHLx~Dor#?8*IR6!T)Ku{gl zge!Zz1knXM5Y&hT+YXtEekQbj54 z?5Y7vi$Y`lxZ#}`S@vr|VJuC)6c=Swo1ML!#T_@svR@BUgP(T`I)a+>Lc)F{s1~Q7 z%@C{uwKygIf5FT2cF88PlaS>B`tH$L=7|eBShA#Z^Dhw2enE%-4(V?|I?ugY7>{Dt z1+_R_GEbe|Ku746tNnt3XkEv3d;2z>Y2;+xEj3VhZg%#4l})DOb^MixJrkrVKS5WX z{~2jMNEc+HHoO4AX$l*%R+F@44))Y+knXH0LE)*$#kn?TXr1#Mwo`+`nW1xS?$BhO zSK8CG#aXy;rcYK!qzo^VyOo zk5~z9r|AA_i;t~TfHTGx8?$&WX}ZX2y~qmj*6Y--UXys+imH_KFA21Xjg_u=-sx*4 z+#`{BsBNMn2d&K>y540a>=D&!%!{K-$y7~rj>Ra9UUkKVbO zdLAC8_xGVz!uw)Yv$kbj)@F_+7)7TD=)m-i`(2Ju|uU6)s#YYc3x z=InzmFAeP*8>`9jkeK#wGI~BPE#7x|GN7G{nQ=A<}?^hoqyzaB|`JzI_u0St{S1wCA{jZ5}K-s?MC_s?W~s zgif5}YROLQteSeBZfdLH0ylg*xI(EaoS+MO^@QZ@8fH|ax?&jU3MzUY)C{Aoqbp_r z91df|y#~^|dM8&*D(oIW{nvo>{M=a!Lr|<=DO5ul>q#7)e?WK^)LaeduG;cA@;w03 zv)=Y)XRysn3fnNyf)WL%o*jNK<#?>?QUCNr(}n$GIT z73`|ST}bz*Tl%wUF0!(JaR%p0Um`QL+1b2g(0lj=UD8butOs!qzo<+6DcB>lQzie^ zsY+fEyHq()^Jo_OH>avWKL~nJn8E>cNel0VUEl3Zz z_w?dRLkQ|qsApWKnsKK=a5E^S>Npux+^wez!^24s%BqJXcWa!YJt|6`n=}*ULYU}% zK4h`w;Wvh>TPe9dA+0VMHkxC-Q|+%dCrCZ`9&pxFgAcpq24_v~mL1jMc%!o>E8J0? z5p5Di9ey`!MvtW}PBlmCv6QXrWOePzu3hPj;F5*S^N&slztXAp`p&mn_G;a9R=3qG z)F@{Vvr4>Gx4>OUbF;HKNi|nzU!$A}yaCi87AFXxCbwI5y3@n;l83-<23ZZ8^9UKQ zW973V*aqU9gPWZ_u)c{E?`+IiU%}}UQ1YuBoQ<3w7ItzyJgEU<290$F8^C6Py5~8u zeuok@!3xI>PPK6V9pqnu5~>c?`EhmUS=g|{ZpUyAl{#_t1w9n%OqJKeunf);wHT=V zY%3Mf?dzP;wGpoUIH*R0hJt!h(_uPNzk!Z`+AYSRi1yh8?uVmf=b3?pkbpz>)#;G+d6wWd!s<_$JonfDO zC8Ika%>=289!KIakjm&IB;F&#jKWdMAdt#v1QJ77Y*nMP#Tl6toYZF5a)x!nE~aX< z4i0NUDx-Z!>;K!zE$2h$3qGP)Oul^~tb+c$Z1`7M(wZo01=VT(*g2jK7yNM-Z`65oMT zMirZ4rUt2u`XSMi35Rl z4kQ+mVMZS#@e#83^|#WHZSzj1`A+Jq(HoExMvNkF10NM$k@iT-4m$vPy~ zkYOfYBk>goTaSG3tz;&0sP$L7r8C+KY5UXoX@I_}2I|R`*$(F+ISuYrP_IA1oVrC9 zu$KepH7iDIrgu1)NZNZSZGi{JKpm=qnROk`%RwFDz=XF%`;ci4<_egvKpj%SjA(@% zK^^*lsoNTRC8)!2FmEBToy=`uoNe&DVG5X;V15AeDX7CzF!^oKjG#XEg6XgYKYYmU zS4cYS1d|2kUJ$l~ZwKj8XQGU)P$f>oAvak`AC1uR;%WGiW#yCyu8et`)_%(otd3Re zs7{#s-*PnO!KL%0B%D?_!gyQO>e4(2md`jU@(Ax_TX(FiB@HR*$a|bnx8yyZ&Qo!A z@vK9gAatI33)AX;Q0FNVuo(HQj$w7}fv|Q}$(zdp%)6?iQE}eYb>4mX1iZb`;qJ>P zHtZ>mh<>e}3`HuQNRPnG31=(GE&Qh|K=FEBKTbH#?h`x%w!7-j3yw`3>~u^B{d)@RJ>z3cJ4T(E}iT zUGTFOz6U`bh==Q6Y;``6+5y-4ptQr15e~b~u&g4SK63H4+YA=%s4j~oCW}}QY*3Z=QUv60R#~iHdwb5?KSZz}g z2h=>0O}f!;jx@#%E}xJ{=Kq1UH`}2chx;Jh17fZZ>RkT-`xB^d0mod9?P|9c2Znzn z*Q=>W#>8g7VK?lA613k2vx%K>`~z7%=rs67T~zGYY>fBphLeopS{SXNVZud;yZ|%z zYN)v@&9-hli6qXs2U!WdBnl07mtv4~&d0#t+v<8Jvz}n<-7XT7dq;JmH$e}9RtKq` zq+6p^Csui~W;&xursyWIy0>^_3uP5QO_rU%LUjNqePfFRQC345oF&bi0_=vE!7f z$}Lu#_FoQVtF3IpW_B3IcE8TIj#rGD2CRNsnd++qqm|YG{(mX^?_m2?gc*q9{9TP% zSc85If&6%|c~rB94Iwr=o6AjuVR*bQ4edcgCRq08YUcO^J@GDR2=o6!>8m@mor4TxvYUsg27RC|hu#XfET*eEx8G1F6;{Dra9pNLo#Jm)vW<|f z0u57V`kRz2zAKJ)pdq;Cc~G70=Yo5Z5|nz2+9!g#;msOIhVMtlnf-Ke9O^-6`-tl# zYS{i`XlBD~Ca7mFO4{KBBwN632H`ld8|++hwTn||HMQCKt_m<{|1y5wgu@$j8aY*J z-WXD~qaXiF@8~0QMbk}dT#KyadZIcgsxeySrYd%YE!vZ!&D7c;kIQl)HfN8thO$#2 zE42cC(=LvxReBJ!{Os^mHB^TWxE@2tUKVV#Nhn`dRm+>xXI8NNt;lDoejkNipQC!+ z8pKbs*;9h8p1K_?m?p^X+yq_2`)&4=n!H9mhekL98umvhWsNCo&>c&npcWD0F3S(t zYX{<5Go6;>)I+;oF$gb?|9)}&akUw14&vMn8dlj&ucn;b_kho(>QQ;$`mo(TN!iJDq(ndZwn7~r8QTsw9s|D6iawWjCgN+fHE3n zH@A{r7V#>aGN7EH&Z^5{fDJ)p5zUJlj^=EhD0O-l0&aG8IiBl%57kr@Y7D5u?_ka$ z@g*4-=798`*jYjCId#5{#H*lN$@JiiHBe&eUDsY>SKHDI#(khFgyC5b{t#;@Bnxgp z4}!*w1(N~k0N8ez2@|Ef`Y81XL@@8C;+6KkY^#?o3ou4 zBdWvQNHl|89B9mXFu9Q4$tVwiSqq5|zk`7Ig zdI`SI(BD$Wt^029FpbTms%jSZ^6YX&@K?vJCVkM|Agc#=qQ}L_p^W{l0g;(C`ZoVDWm;$at%mGqm~`*uV^kksyn2)y(JANJ7g zY82u*gd^fXrB+}_@?`` zD~QjLI0mvtbFC~-RxF-C&vCP}4EFNCjHn9~V;~mBke#ej~%o z=MKOg2U5lQ8HsN}JsGJ3^XZ3)t{12S^IL<&U7&>8k|o!92cb@E$Jvl4iJUXlR4v!* zyswHv-47Cltn+e>{YI?*^Qj4(JtoA;x+7yhdo^~_5Rv;X0i&V0x|w#HZh@J4&qqVQ z)EqTB0@Y;{_d8JgFTtD}gqN#8?Y{%_;b0v3Kikzl?B z^C@UtO)!qNR-Z<|KG*T5BYryc#m^hVa3d5no`u;Xg|V$%b_dp{+tW2?I2MgSDrk)n z$OWXbdk~2%GAu}?k+|gxQbinqL?1FNd@d5($go<2ZbG+!dPWAJ3@p+|;NAmuV9`QG z;hY52fkkYNL}O4N7B%H1DW1CL(PzAFIG(H5MU$}~i|@7FFG?XZSIm_Gn8d>aPBsmdczxvcfU=tBKk(hD%*Ye^R{Q9AUiM^63fkwd?F3501@dYA8;R{4AzGq-Jt%gMdD`+BqmV<(8;^&Ix=IaCYmh#x8 z@sVTvIBJK4I@7yGB8hDq$Yt>*8!2R-6f&{V|JjA)ixGB{YW0w#D&*Zr=tA0-8_kSU z!E&mUR5+@;QOcfD%61rTE^C~-xRkXqfY_A&uc}S+DYd-l)fCa>4X^*cnVs@p7aP-g zFEYY=T}%gs1c$6;@pL!1Rk}o9IKRP6ffu-5gjI-nfs2oRh5Ek06)G=qt)f+^yud{! zGITxq3omeysTwLTaFOwbnHRXo#fN=|U%tRaE-}o!z(uZA*mmmh0vEZ|F!KTzxgKHW z1uk-FVde!cazn$+3ta0^-t;i@0@r46#Js@8YKO`TTufV`@&XrIAS5)D z=H>;i;1KS4!6EEt4~GHk5W&GlDLY(A_Zw*?NH;-Oj*{|B;YBURjpRF2cc9ZlY*j$OB@(vZ>A#N2a?@;k2>eNtqhl*xBtO^7gRb--Ks`){!SoTVE(JJa8eFOrh zyhC*Y)pVYLSl*X%euybw-j{Ovyf5YCJcjqBSWKt9FU3JrS-tjD1CvxJFW&Lm6Vq0x zy!P}3vI@p?tCtuRW3RhOR+_;k73+@u9b1 zdckW?43JnwUVEaZRj9o7)BsFssJ!;n6ikm$dF_dsv`{V%;I$_P7#b?CJ+TBMLot0> z?$b(>9xAUr(QHg;7)$WAo6Pvor^uXDW|KqZwI^yaLglq5GBZOF%))C=Wafs-Yfoer zhRSPCTr*Pi%rbB-hWAY0wCBgcT<860h1dm>xZ zyQ+EZX%^Vt>!QtTPpiQW-5hORdm_8y*=Y0H)1zSb9l}U^5g7)Du(-h?ht=;z{CfDp z2PDCuP7AD8Y^0w1Al^5B*3a?dZtN{lqN5%f{WdmDXuh zH?KWifm)U6KgPAZ4)v|!gHV3Pu5p2TM|Iog>Ow`TD{_2Qr0(jERpUOI)wJ!FG*cGJ zw%E*y;rf9)C87rnQaNgBl*e(?UBR|TP{beP$wJrkefWJbm3Q*zeFUfllU*<@M{#XF ze{T-_VjTiYlnk-b;of0Fya1!;>BSJABXOLJ z>XtEBW(Q-{=McC@LfBRTL#%eV`TR@VNT{xZVJxTtHSyyhi5QEEdPw3kz$A~u?PCby z=Yx3xXIuAx;_n30dJ2jUioX}kVIsq=1VXWZpTMzK=I#$`2~p|$Xo)`WhSm8K=FKpA_&sm*V zwBFUk?jN)^PbG#1tv#p`!-Cf4BZ0=e8^JE!tz*o`_~iC53$q%EQ}giMDp34pFl*>`+WD;5i-cc3mHt5G>{Iq-TG@f%hGL$A6V@P&}tf7;cP zq4A$8ltCggfUPR&rGTgIHBJl-ChwJ&E31?Ec8rI=L9Ik#Q zoMRbeAQi3w67|V2TpuKQfh^TH7NXfj-Dkx2$f<&()U(T@1zrG!zF&esygw(@9N#o?}jK&ok6cj8hDr0UWTi3Vg? zmwrg}0ZCmD8#jpK+rrVmE{W`lL>g3cg!wD=wD;D-x*`~!wCmxBc*vAsCi0lUOgZgs zMq(owmf&?HUIkf=TA<3ga4f`PPW*LXI^Ttz2&(u_U}~+zeIigipU&uvL`RUS_-k8D zwgt?#l_R2Zc?9Q}7!R9qAeHSJBvz4Ow$CAv3(_H)=a>*&#XyMaLrjSO!01zYvE+Xv zQACCz>a4dC%OD-%f#MK+avl}w=#7LS+oIlT^fE|==!rykG7K>liOC=x zB7B<%Np1xU(b^Gls|m3VMr%PT#6BeUl3|FGNPGd(A(j@0h(rYtqWTUK!m$QMAQhqk z67|V2L~kT+0O=6F7l%mIAsT#VLQIFzGk<>h}U8CD!mxuYa~vQVTh3Xa7GEzAr2RZu+RnwQJpU*sERa&QDcw_ z(I1I4G7K>XiCG{WqU&R(6p1=SgH{zKL^g~bq!&x^CK7LuVTiLxoB`<&uM~$!*CARg zFd@RTa1{wsArg^jMus5|Azton)5bYchTTO@#Flq-48xmtdI>cke zArf_n7UQEN#A+C=1gQ|uBJm6vhB$`AQIHN%W49?qx(?BCSCoYK3r2r}R0!`z9Na-F zL{}s_gLH_s#UZj7qP-*HClg{KjKtOrsddLhx1 z3`6kWR!#-!5MLFC$Yh8Pj)-d{`AyRdSjy+9?8)4LsUJNlC ziJ4?riY-WN2I&w@pEIS%V2D&l#A*{F4@R%kiy^*2;%hPt5tfakJ4lCkv^YeL4pIHE z36TJ!rXUq!AQJt_FvL70=74mFYR{Weqwna&5RngK5e=k5T!%z+kPh)nafmD(qI#_w zFl1W{htW`aF~kxi7Lj2owj;3(q(j{Hf~iQJ4$Rk-2rPGjzzYWTu~M-sO0T(EP&XFR4#$% zQeLWK*1j9BIew68PlC6xJDAMZWJJ5v^-tj761YPCi+!&C?3jSIk! zEYX#+EiaA;c80^}7ou)h7i;$Dw;;K@Wvbd`JvgkL%;eO%Yeo9q}pQ_^*nYxY+ zE1wZ=ceoqYmO6GrsZv3zj*lX-6{PBTN}Mof;0R;tcoOQ*XwN!EZ^PaTQgs}FL_d(! zF_lj19PV3?lV2T`s+6*-I`UO#_|@M0Z$G69FS`Txac3Qw0#eQHlxzn66=YgN zsnxr5$uCIhm`!t$Bb&z8`|o~<#k*fime~F|*dB!! zIs6i#Qh5IM7j=iP)kLH!DcNms`6Wsx$0Avs$=3Wnll@CAB_7QH^>h+1HvST?EW#pa z(L|+(VAa{apmJ+HoSqj{z}A;kx{k8>gvGqjP^EuX@+6fWfb8sx+Lssi_C-~$lz67G zX31)$@It`0?Qq_2OW{ph+i81v*R~B8zf(S^x|*#jnKD8%l^H#SCs@#^N~Nep&}z0S zkJaW)de)(Syj_zw{8HL$roLkMcn~yA$+VqtE1GkHU6VH>tu|cy)}rNhv=(t;yKTla zwB=ztVk(%F+4Mhb*FFrFl$DyPPp0k6Dfqg|_EiRLN??HOQ2v ztYu}Kf6%I3$_H$+CXUL?E~P2MHFZ?xjlz^O)Fe16^M)ao8)(1+=sTMF#wSOo@a+re zJ2%)oY%>JeaI>>pV$5|w1?H+-ervbknh=yaZys)Zd3f{HiNj_`450<;uIV387J@or zC@m<@QjUHUXE&fuE)I=_%Idc5SfB!RoP#$?7b(%&$FL>@>e#hkC(B-}WUubP$v&tR zZ`IoyJiJxk$>Keyjp3}M>v0qj)JgUICe`)r!KZ*a^RD@^dQhq+-yXqsoe#xKP=hQ+ z8q7MsUXzML5WWrSbeYZeMomVqz7q#1P^Ve6%Tsn!z)t{m$(REnwsPthM)%O@fa=%B zVelvjTUR#U-7En%+sY5Z?}M%i5XN=J&sVTI32Hz^d>=?cp1_p~2z&Pj;>L3zOgPTj zIYH($D0m4U+;`!Gtt+#g7;N*v$K8Bl4Yix2KPIc4$7*?y7Nde~P9C%vr7W(;E<388 z8f)#3v(5v8bLZ+}20NHNMA89Ebj76mc}DD^1=INAx_J%^u|X z16iqK_IEHj1yaYeK2PH652TJ~_aJc>NJnThPiO74(wWg+a2>W642Az0BthNhl zEFcwO5E3_nbcDx?Bjhl`5Z6KzVJ&P{(TNexAW=Yu=MCPcuxt;~N91yHyW43MFv3uM z)-fFV!64(Qc_d*I_pHqJx*l(h^sLEU;Cf6GJsYsy ztd{8>1aB5>bB?ENGc_+;Jt|OMKR8cH0ZwgpHoKplP~WRN!Rq-YlswrBv3i=v5<{>^ zQUyDNwJjWS{VZZl>~DO4&i~u(qxxWo-Gahg>l5knb@cz{!{`%HQ1fAQrp*I%@=bL0 z0A0zip_?zDzX!SV7f7;IU&E7;So`2XmTyWc%tscH=xP23Nzn;W)5wmz5&e=jQ2zb(HP%=COg>^{S>psH=xO8c%scWpvlhkM61UL z@eODeYOW{Rd;_`#A}{nr^IVhPfS!UvEsTin&LZO*&>S4ABcf+vbn+X}iy&TIF4}wp z`d+fN^rL_H1~f;`2etI0fA|J8*;-@uqks4YG{;fKu4wZOXpW+V&qkYXK$CsyP&B)Q z-+(52;#9Qx2K2+o$Ws)3lv;cPnpLP*6m7l%O*XzLIuSnn1~l0wMbYLP&}0*fqWc2e zIa=GIDB64jn%Y)H(RZ;W@eOFQZHuDo+hFkxXtJqA(dHY_WV;kan{Pmq?NJnMz5z|P zcTx1?Y&v`cnrvE8^fq=1z5z{kATpvB-+(4Nv?w~B4U2C;lO0(U-GeN?0Zlf&D7rOS zd;^;7n4;+R9Ax+gG}-Y*(dHY_WGACFSY~_!nrucSjz5z{kW>K{H2K3X&e=d9( z8Q*{=n^_cXz5z`Z-+)$=35Tbd7Z`*iL+$W5kyVd5axf?ZJm$z% znl)?i0#+PA`n!J9%5$!q3w{*Hi&Od;;k3FQr%g-tLV`=I+m+u7wC7nkHSm1NM{ zxRd%8BB|@{SxWZWyI3v-)fs>w_G~5F^a1t_P#txxK1a!dj^G)Ad_+@MVsn+O_A#u` ze+s)s7-aT5CFB21Z3e27M%jENoAwnh2tjpTVlC}8`7e418 zdkTGNFH*7>&*P#H#!tYR`j~uo&15~FodfHy5WY6N$!h=BG`Dn{Km1s4-INSnM=QL|| zmy-1=XItMzKz1W*wOq+gR=jDZy|!)bss-5@ zj4k^fC94}}TX$fJsoR}nWRk<>&By6Hwz`Wb=mFW%uWYCGGl%-TTTes;O;N23hqouyQ>?bRQ|* z4Uo5|F7}I8OU76$c3&#Hld$8&1@?OWW_%Jeo4DiVs}Q_CBY^^ z*>(1_3q@nGj%StK2-pl$cAvagGG3C{ol|yq!DgAVt8}QO-7vBHUfDeho88K89WSA= znQQ%}Vs}B={RNvpmE8cz*VsKFcE2h+Z-Q;r0$H)2NWRAIh}d0Hc3ol9S=m+c%lA*Q z`$O4Hgw1%`)k{TRRY5Se#a~KyALMIPj88bd_>{e!*!`pI_Q2*jWw%cH%9Lpw67>wpT2;dKP({g%w;^eAy-Zd{o^r63#Yb-ZHOr##mXt zjvtz3X1itH4DtRa$@e%;&0OZyC@8kri~WqCnr}s=T}{T=%$r$0d@8E=MGhfbNqHlV z-SAK3LU=k#xZWY;K@z>e5?&c4Of!c`>={zsO)g>S5|10fSwS5jmrQY2D?R}*tS zZq|$8eO;azM*lbd&nRr?PKAw^xS6`tifLs%u4y2Pv(~L*(f2}rSQMvJTJBk7n`{d9DP4Gaz7D$7CAsbW`kpCsy{peU^(#qz zMfr%5s?~%2|L7o?VQ`?W3WE^Le>&P16VkC6+`o5QRL+=vVn*d7FkNf!@hXe_8aXGh14fOx)jdig&h>-^OuyOj)kaSIypJjlx%R6=cgB#FZcQIsxfN&fqXT^pn>*IV#4 z{-K}kgM$1+@0>%TyhC630*SBGlKEU#x%Z;Q-4ID6>C)F(Ce9nYGrgEpTNY^}yEE0) z)b2x`+b*@u*rL_72Uj&bw;*95ubv62VxI}DmD+u3$qo4~|3D1k|rS~IK>p$~qXO&MmIMbiK zd?KktoN?AM9o{Jg1p{W)6C_i@v0LqI{E?Fjg* z1}}CeZiZ5Lg?Xd2c>j3sHKK7yMLOuva2 zX;aV6%e>fT+*~`_*X$R6@JFsU<_)lq@nj*U(!ETIHu$z>XyxTz>;l|$uGQS=f^Ngx zi;K;Bk_`9Jhtqd41wP>0ocim;e9YRbI@;EtrF6F)wrEnS|$q zyu4eU56^myqw{`y4KL7|*h6v9;ln19&!X29vntoAAtRhLUi}hw%KC zm#@q7emoCe=f&>FC7;C8dA%3gic5YP&yRTdqC8*3GxB*l)%^+&Czx-lD`2|H=dQNaRocsA+mkX`yzOQ$_EKDOA)e1}!vcp(uEg`D?OyB? zxcT=o?_2tlG-3yY*jL62Uj?}=I8D^)cDM;{!ME|O?tqWr7W^xoqrAL9p3mU6 z=VN%b?tsnV7Q7$NBfLB$&pYuv$IE}nqfgh=cVZR7)vD6uZwYxhzCK*C5U%rbR`2%X zl4J2)u+xhz!6kKYp@Vt+>_uyhnbOI~?SFXBrr860%$vz^! zNRnrjY;hC5A5y|# ztlY!k#Vvgl&ypxV+3YX*7=dpf_VqZTKZ5t>D9wr}O+F(t`3WNaku)F1B|nE}-z{Ej zH!k@VJn!i7VsFJQ{Vtxnqx|VsCcj7EZ;AaijwVh6RaI5k$tZVGmGHKtnBRB*#${k( z#QrW&beW=OeKf*bMx5vqfw5V?j)En$=-mQ8mXSr=b?}MnAIO7B_`I9FaM!^P?PW{; zkstFS%htS`s~`l7g)^=JA>LPfTlSpY3;&e+H+s?gstepkzzqs~tx|r?1-_SnhjHg^ z{e^>_;_Ppt$~>;@-}KGS6-#-s-zdAM?BDWj>*Xv0t8uYegHirW1HVH9t2g}6mAVL` zyp|Fr;t#2%-a-VeyJ$C7{i&b3RLa}!Qu&2H@MFvJBH|W$US|=YXki9LU`7auRewA} zyb5?MUBGjGtolEq2+8{|x`+aQ`#p|!1cv0jw;?vGIMPLw5FiWuFAPf*PfTY8QmYNz z#U6S|de!aD+#R1JL4Sb>_^$XQ3HS?4uy@BNNw8mFvU^W_lF9B1RKhKh=Nt0$IM4F! zSFwuM8^xFuPsJxmim&)PCEFV})69xm=dpfX5r@KvF^RR}hc3p9ul3ky_r}e_TfbYc zvs8Qi?l$hC-y63r%k{ljf%mym>m~X2Ih~+>2NG{z+!l}PNxm;C{!1!;f4oplU$IJ_ z1Ci&YB9q%9&m;2O!RHN>>?cZgF!H=pF^8O|L40P#uN3{JxV44-!kM6Vq=UpTT&hPL zps@yx?-jbk!25t})QY!cdFuD?r{z)1N|!bAvA^M$nYjeO+Q0IyGB z-u{?FU#vk~z(PJAg{(B+CnBGlp$H8&2WfSF@oe+QW2P+MMnsr1V`QU9*@#w&Vx=i-=mgL`*l z>PBz;P&01w#t${4B}!&6-t3Jx7|~?6d8Y5yORH@4OslMKrPx-_b}H2O629FtEwa9s z@a^7cX_T?m{etZC;pLGv^G+rv`t#nX<9iqWjp+CDQ-t7Vc;0&4g|dZu&sbPx9}`F1 zh0iM8NelZt{!b{(c)+u^DfZsIOq_5Rn)?0)3;PNF@8i~(^8ckmO-}hl=e{-l=&{@b z?{w?Oy4S9cd0(~;Xx+yOK5i|2@?}$T=iTbX;<&YR&6jORO*`Plig0Ve$(OB9rrrjx z#;x5&h;fZAw^I&oZ4V*VS4Z(3QAjIv_hsWIO?TjxYZXerTqWXp2>&~A7yYxE`)>x+ z7x8~uVOkvZzG7h=2U#}4UG!f{_f^}!{x)p5oZ^CmeFPGzLl|T7U zguEBuQC#vFJa2t93x>GlSMl6AfR2nyeiu*C5vDLWno^Co`@0U1(8Gh#t$-k~Wh}XM=vIk$z+7iS*VPhrH25&^qIcH@SCHdRk28tTUbGW_w?6 zip@4-6YEW{*=Brey{R?Zj6bb6t!A6Cp+-deHq&Vu(P_4sO4BGUrqzmQlsIcOyGEm= zS*xiqji&Q#H`&t&liO~q?TtN4crBO2S#OF>o9Q*{O|NOU_XZ8s^`@fS6KNWO=AH0{K_uXNd*hdGYR^Ny@M?%m~a?@=D-fhaF& z751w_|7RKOS5-?sIqXlj_a>obMzwf$lh9IauZ_ITa%e+d%rXhmXzSXuTpuh}(X*Y% z-XIO*YY{;dvByh)-Wx?+3pNw=4~(2gaSK}U{O{L!u_tgFyYYBeEV!M=XZ{+FjobKg zg*9({tsYwzy_HAu5q|Pt&z>k;@;II=^@3aUk9Zd8d$F5T|F-Ac5J3_%>ZL#|P%+>7 z8&BWOyY#Yu% zdzzOM@(8qPM`5Az2(()t^kUcHk^=FXw<0re{9W40V+$@3yY!>L?2fF&-ovyoFZK&m z&}i{=63V+4PfI-{BY!_K7K=ONR6*3ew=r^y*ifArc>{s@X5e|+Gq_W=#9sCD|j(K-a~V=-1+Li^}og56>AS?`FcTz!lhb(MM_o%e(Nu6<286 zMIW^=Z%ct~?|jUBKPUDlxFYRpc~7A-Eq{j>TZk)y$lp_Tn3DbOvh-d|5wdmkkEn{cij zub-}V{44%v6=v=Dn<^DO_8~7e23KJ1c!PyqjsH?yp|$3X7Uneb3m`PuAwxLjMM)lfUGE4rAh3_=~n_Eg`4DvQb{>QpU z4^+is`WjTx0Va1X)}F=h!TyRXGKT2F-hux?Tx@h~I@qK%%h0x5K>vb>A1Z^6hq|DB z@AYCkajpy(=DiQYBw?}93n}CBbQ$ed#!W_U~9Kz{N`M*GW|V9>R^$n#R9C$JSXwPI)cCK2~Bi$a$c3 zZ;Usqq`b&4nN%{yE6XoM>5Ny#{E`(#^+gvHH8N@SXU2+(R*?ec61}3m2D4*|3`Y|Q z7dhX23HcOUFq=9G%RRrOsK}M18^elC&tMR!?X^pBa{3Z*k9Rdjs@|51Ns3TJ9tm;r1IBYNc&a$M{BB{Y`1GA_9vqH2>~06K!DP1QY%rt zhVa8mVi74WciqNL0(JkQa_jypi#*kQRRlGRtY(6P`Rb_k5pTODJ4L1+l=s@~gc^OD zBScxw2=~ny3|JLuI*Bl_B|?05j_We*HDnaI{=7aD8et&{zri(5@Z6XUX}Vi(%7%&6 z-rO`f?YTMWC@TWA3bNgr3w=)VZAlQH6VfW0V=IU25rNbusI&XD-N+JLb*Q&AGInGd zmQKeKWY$1aF)!A5XqeDd;&>9QB}*omJQ@-}X<38-${P|Dk~n-$#Bua6EiBM%U5OGd zPFN(C#@0oGLS6cYs0hA(ZWRfs!&{Zxlx!*M#H&eJwKCsH-NbOo%88Mown{t|=13y~ ziiYYy?xvAdoJLlO6X2Y!9V*A+tTb14jv11jWlnaMr)8(4Y?jCz8woTcf5B9l10;wW zmjfgLcrLLOrR0D3!IV(jJT}}o~rJjmK&Et?p4`r zG8*pFqXBK;MPW0B4}xkpPG)Ap8OvCmMhpaz{_HG1UgH?zoGf-e*WQ72-q4_%??#V? z;({!JSF03ifQn5zW?7f1QxQX~cVPxJ#0j$U49O6i>3US)5xW$V|u38wkzl42VYwfK}Nw<#gfd>CqIRZ*(E1GB8KLF?-S|S> zP$|z|L;rt@cccgU*j%kxJR{TNVj^e3GjdtQ#9U;%;XjOjq*du54wA)IrifKc%`GJ@ z=_74-T27}sf~h(KVWn02Y{KHCu(4cfl*Us%q)X0BliaMRsBFG7J0}bfYlg6!k91qIRUFCKo0zBLPvDmboS+&oK9bwk3QQ4~gU@*|K+O z+Jjge8p_LDV{LLNAkL45kg*vj9#MCOI34mZyOks5VK(-eHahW`BM+_U^h9BG_K?lN z@P$!5*(^yiQCN3jU|0e%Bda4sY2rAP$aT$&obK~Hk}(?w*XDKEl`~V!E)v6McCAbm zBLo>#%n?V-P&Qi60`8^}9nZ}1ta#8_%{0I8kLQKD6BXeXHi&5P8fxaP7jIFp+Pq$Yb=(f=L6+wFhkSSK6`E1)6={_K%t*XUEFu#ly#2;IS1)e|u3!WF`m6r!&!}4H!eUKM!2ucYF zy`U)3ALPg4d46~p6RDoH&c8CKG4F|BmY!pRQa#9Ip%DU^{%-iojyC~FGx z)(-@QpNx_OB)I8APc@E5lz2m#PpTHRPwsgrc+u) zLohu_*(-x`e1){q11#X_N~K{K_ri6N$KTtYPHbrjdTma?h!*69e&5Lm6Az~`;f4M^ zhZ1F=9U#U8`747;Fz1EMcn^pEzSD{k_DUKWnu9Q;yV4(b_wS5@)C&453`>H7g+aI? zD5ws?`N60;LFnJw0LCv5^3^gg$PfKu;oJ*G`;Q-L4hsC84Z^zrrI<(Jw;WPY6~W}t zA4_6?XH!t{s-Vy>N`-^o@un~pGznGZK^2&qR3A*N4<>C0s#XRQS5U~x@}LqBs&3GG zQ0%JP+aDBGn5QtjE*MSV*oL53bsjE1*?b}#3@ZIGq6)vDnaE22eD#H85C8Tk1zKE3 zN-Y=_`rEzL08OLHme80dNUBENRUXXdWlmF2+7L``BBUc2M?iu{J-(H}1bpLpY!0Tb z3MQ;jSh@96#reV18!d^70*oF=d@Kzd8x&q3e~Fqr&L1tX>Y|1mwuaD(IRjwbf8D_W z&_*E;`iWzt^S{Fo3jN>QA#|1p^TNuYv{0$NOEutU>iELu;PZ9G_hdCHlW4 zYl(mN!Bk2G;VU0MvS-5WX{?UE4}5eq1Y`XP5c6a7(}^aa^A7;;+Dv~G`t zfb+9@mRp17hsj`#1#F<})d>ec<4wf*y$wM=Dbqc8Uxa|W(g;vDo@zc}H8xRWJ1tXX z+5IRimJM2mcq^-dank~CrP}uJp+PTRQ|2A(4~oM5LE-s95#jX={V`!VZ!5wRL>#^_ z7_;2c?>gnhXP0?{{Q$WqD7c5-OEYcmq)ZEbD)E-DE)AoqEAczihlV@OC7q8Iw&y_6_EV0}Rs ze#)5b+oDjKs+!8dgXJ8~7ZSpZHwgYuvil^MW`e=Laxkd1H!!bfpYv`uk?R4dg;MlX zOV#cWgunQ?D9W!$1%^CIpjU`0Y;plm#u-BA-=74mMa`lA55hh4 zg1j0XRSJ6ehl7qreaU%90g^ua%!nRb(2wGN|gs4|_r|wyG4r z0FmKOJZ-rONhk4A7(Q;}chRa~EDRA+Qz*mgQ+EsvD`+;{OYr&rV+^fDD}(dfNP1mR zW(D-YYbf7uIYFR5vpp);l~f3mhCfJHr2{sktN7?0sq}!GGSJWzEb>20@!rn!gR_I@WYUBBJ4ak(x|HvID42}L_AQc02g3&^={c5bN92ODe^^FX9Bq$}f z1Xhvis%x$ShTi@Z4J)SSN2%j0{O{au?BX>jeFoAi$#Ik5L=ffA#`7TyA9WwEa33r2 z4BVnF6XkTpm64{jA$l@Q(n_Rz9#udz;-Z&enw6f;@^F-6__Hqx-x#$knI2l5O~2>R znv!^>urjHc@v*x~x|{!A@1z?Sw3x98W6Uo%k}HyyQfK|Us6irWqXrhNw}F24LKJ}? z#2hD%#?%+dedaMW>VAsy$4T+9p|S&#FE>vc7Gxrj^~f}}=g9r#NyE*gW2L&goXD9$hy z?T-4?1*NNkY3uQIP*8bLhmvs#p@79+6T_1MtPVBT)huSyMC}7XHF@TupNtRv7po-~47G!SKH6^(pny&? z)a*q<+`}}kBPgy9mW9aSbd&El+|G2vF(^)~bSMz}d3+njPD=F0 zY3evA95^MnZ=ea0|H73tJ%1&dZ`y!Jmlh^N6?p6gp;m#(2yW9wI0eNfu<3Rr*=A}nPJDo z$KQMcRQc8Ypwz$73#$F<1|#Hr|2m3KkH!9=!v9-@)6&qtBB#j=vDXY6Vi4sS7#X?T z5JP#&46(1fA-2GV*hG4a!KEn=Es1FPFi)X{sVUs1%s=w`SN2U;*-R=M4CeL)g^iM* zh0Il5#b8HLl(~;8di796Vx144u~Fh1S=?E<{cp!S26`scN55m{Rh7*FC%b8*JwiDK2Dpx*AhNe!MTf1jp zP=l6+S*3}T`^0zCDf-}C6TsO_#atudzoEQ*tR$2_6J^ie+(gh?3>0G{auDVmllziA zi^3gHH5{MmyE=~HH->uY)Jb&e6k6w4by0X<`n528v|Q16gb| zcMeHa=oCbXRSpBPLN((xz}$#$5>%pv&@;tvDY5A>HY89_{Sg`Sxe3%BfH#3^y!kle z;&MiVOiGbF9U2$EQ=ZQDn4QPxGW;4MLE3~bV(pXbL6C8%3~Ns_$)iz^XL@Fsyd7fg zHwl>$Gadxi7Y)IxDgQU0cTm|FhB2XGS%3M9naIRz%iu>Z4CC{PA14_E#7DA*wxBpO zdprXt31#q#py&rX$bhCu1`J{A3^G8KK0Z{bxEJd58Cdce>hxE5Xlzrky+ET)2$1k( zBtoWbMqp$_NFAc6DbQ~US%S_OYOKQ9#+@G42Mmfdy{Pr*`e%SdjBP|8EKuv~&b|-Q zbaL2@;B37NHX_EC8EOfsQ~v8gQfVX-v87f7caRh`($?yn#W&UP@WE86iO4qle zrnZv>y_pGUxxXJqkuE~y?=MNh0RY?aIBB~1*kGKVE#)`u7{7=<6T{3j z3}vcO4I3c5oDnKx(nNoJLom-z4T|e`H3=V04MBAsW*ZE^FY&zitTGSXXNvUNa{q$| zkI`^{LUT&#KLbpu_>40D?O2|e=zPzM&wvQdZAOZ1=FBtFOhjfzniaD5VE_=p=gvqm zn7SG1g5!dt0;o!Yyu^pCh5`My2NimdRS%S9i$W7U5|q^kwOCTI|0S9+8)?0xLN+Y= zSUS{UdBHT5K1IKJ!9qq`UPW`ehYd_pZ=8Ps^1dRN2@Bo8#D8xCLQin0|15r=3`|GN zw#NWbIF>XSTC+mavC;E!rBa>OS)Gd=7_ts(h`Hwxd|r8fReMsbVD$$H&_z-Xw#80 z2)n(7xtxqVu&^z`RLvug8rwu?F+RW&ge@PU&CQ|5VE-B!#qGhgzM!llnDz`^)L(8B z?Beig%QE@YKrn&TFUUPnra?T7o-z8X^_r`aNz5>|45-zoGSTqeLEcyaO4VAa9H${> zrYcA!6JTaH0>qieE5(R_RjSK|$cJR(3Gy0c=XVv>rUcLBq6mhKJwktxx`ti=4c*6& zn4zk0K#MJVPBz1or=&FD@cbKwmJahapvmu*jrkN^6>-6e#CLnL~ zLtOUmdx=e3_@6E}?9cUY6r+6_b}4Z)qhX*)hE#tub7$IR2AH6FLom1FXdv?rgM3P& z!Hn-}_*}nL{Nbm>(5rLwpd9*r{Ba9Xj%Ywz+Z}6(nqZt|SJLJ6{0HLJ>loc-AuPsI zbXnld)o)(-tb*x%4Zb270S5s8AmWDQP=6Hj)$p&)T!-i@VH%|_yq^?)uS6)ZelPgi zpj?|3kng9OF!f@mBn9GaG_k;u#|o_aGH;!Ew&?d;Q49;$hFGz#cqp2Pt0zYM7}tyg zW&wkXRS42R|0)%ZKWZ>7q{9b*_ddWxK4WKWmfU=sHP3qus_>PG6cYDSnxOiXgVB=G z6BZwd&+v81#|(OupzwFPI^vl+1i}=*#YEru(@NXl5ES`0HSabd?N2b>Z|b08Y`QN9 zn~g-hlyxPogd{$9hY3ijAEOavtF0kUJZcTx2%z5VA<1FRC!r2!y&Gg|vJ8LZh@@T9($seK@Y0F&k* zd5ISr432R)IUfR#&k;k4;N`zfmi? zW&xI!QUe{qG72rRkmYBwafuX3dF?EaT+e5LNt!^7EJIEKln7>4AAxal1Q;&bkuMA- z4V%GoDyTF2TJ^Kk`frNLW|dltL&j^pF0C0+HQjpcNv8`r>=uLx^m+)0C8macQyZ=x zM70$&@qMJ&JXgRXJtzR?(lXeb+JrZ!x?E{5uHsTZI6Psl?lB`uI4XSm@PrmM=-3`x zcrpq7(Z54mk*cW5M};>GD>E^6SU@Ba=r-l)jd&~rUf%MIz<_m>y44e-$XaOp3`*!3 z$I?O;t)0GF3q#71Xi;jDXbfLhq3A%Mn-_vgODuy23857>f1k8nulX_iRfedjT!eXk zC99UvfIA)J-x^dVHU{H*6Pr#2Gan2JZ-o}NF}W)bX1pAHJ&2Jp1OMn-nC(GIm$ErS84lz2Y7ffz#VSs1wBEHU6#QPUU*4DgbO&5X^3 z{|tz@h2^UpM7RxInwMp85OD{U+(eI*NRw)VR3%~Z!#C#!l=<5k^PzuU0-i02&l2J1 z`fOvEwv6Q+W-YcjaU$wIe{#Ryb^;#po5F+?LDG+5zYL4^#^XPmay))wR+MIU;{QL4 z;>N23938z19NsUX%0jkCLpwFRAD;|=N)i)vLEhcuX1~-X#*D>&D@-hr6cC(B7U?41 z)fBLk(BeS5(t7c!r`Wuv`Pb4Q?=A)mYxpTQnQ9Kk2sV!AS7#E#E1?WAn&X-#e2wyVu; z(TwQ|3O{z<+2-!q+O<79`*&w3`&ZAD{ZF&qw6%Npo}RYe-aq(`)7+h{guH0)y< zCxAf}6J0I+74vd)Fkxj-*97)1&@yv6yUn`CBvF=x)JlK845n-%qNHjHVNTwl1`tOB z7Ki?Pn&Ds5&&-oK5>Ops)U&&#nBlLY#F6ZV7v>gv3ojWkW#Urm@v9RRLGp1zHL~YJMqdsM<-Huu5QYR@}M3QZ87e=+$8Ain5jaqX#fL zjq%HA1N#SQHJ$RSgWA6V%VBj4abAl?Ungq_vyHq8tmt7Pc{*{t9iuCA>vGBi>Sm0k zg-K|fI%|66VQPX!5UYZ8>Jk|TnOLgN5rmp^QC6bqM56yR3tO3TO11TJ%u3Icu6}d)K*Be#GBv94$ z$`nU+8mKmA2Tq?pEv#%2yLJ0LyoW>oJ$Y8QL`(r&8N5cekKGp}JAzTN?zFNhT^Cfs z=2y@^%+SawT9Uaq7A6UP(BhWC6ZGnzP6s;J^Zm#2+Udm4+y?vc|5siTBKpj2?NN6U^cb2H`(;A^qqnI`!$euwkX4lH zpM3ub*jI`F@!QyCgzS7GPc-lm%h8{e+DJFw{|H@KLxE(e3o7dQZBtvVTl^2_d0WW* z@3*Tu*m<#MQk@OWJtT75F(uulot0>XMeH2D!e(A|*|;s(D5kSL-SNs4<8->oZP%a9 zu%0%sM^Ba@D8+x4861o}7!4|hk%3<=oj^2NcoMqt8!>z`g@j3;It;MSSxb586wqEG zb@GJ>#X6Spb$0!B>V=9*A~4=TrIpuL;iOiNaI*u$DikaA8f-?I>k~( z(84ex)^y@s$_4XwXoLLe#G$p7z*{GT@R|GRARe@fH{17V5pHf=?I zR=hJGyhsX-VOK^nm?R{vq)`N{>^T2D{|BXtuL?>!347VXbs{F6pf_)dnjllAd zZ`#RFcypMz3vq(@!{V$>XDf+@h{v&nGlSJI{{VJa_SXD+FfCCo@w5erQyz@&<<*@o zDP_a{jPP>AN_{Y+gA!`-QpM%|D6P+8T_dS>TJM6@vDxb?s!J?{U6uybt5}HW2`UAo zR05myAPr};(YAUuakoTq;cEo6?FSp}PqBR-t!xjQ+#k&FyZeI@O-K%#$Q}()z;O*PEhm;logRBZMvDK42kkfU!o4FFU5mF6>BCdf~p?}3olpG_s3VLS!$k6efXb` zdHyjrC{96CpkHVUAbNpT+;ms~-?uFFY*s^rwEN1-CpNI8$2!$So!<&(BGq|lOGb_D zMw06Njy#wS&SJvMT9(SuPor_UoH1X>_|wLl(e**arl3s5Mz=D>b6iBU@FWz`@HKSG z#E=aNH5iMR;@04b6Vro>*+BA7M#(|( z4QHqwmh%Npcoc@^o1ele60Z>#`XoKu2TR!;F)1YPog9Iit!{vAY4$ctdo3^(X}4(= zUF5i#W*KfPeIad$7Jk{nCJ`_y{5)Vj3WY2TO0?P8L<1(}ic5idc~Eqtk%i_O)ogsW znqZLZzCa~G!mzAZ>V=7uR52DgwYfIP$H)bf*BWLatNb&1(olpqB$BYyIs_Hd%NqMd zHR5bwzF(m2hyK3iNVTFxoT@v`lsa*O*&?jmZL69?{v{MVjma~i%(%5R?%GTZuQgGr zeJQlO1fs9-pSc}H+JCpN-Q}y)BcSbHZfEHDkFeZK{r_@%`|*>BJw5avqv#0{ zxs-w{&Gz!h%S10bZ&g-aTg5Nws9z~{wvRbXISbVOYvZ;6;(z;&_$A)yvrC@u-|eAk zp9Exo7lNcHTw+}e&GoVO&1YkOc2A!S{e|jDk4+2VIP6^h$4q_p63LTUYQHuaa3qZ5 zQBt}MN_KXH{)a#p3ch7&&d#9Gz&rtIrU}VP*RT!(0qb!YG8FHB{PskHXv_aFLC_st z`LWyE@mbe>^!8)fMGA)b#A&wrF_4)ll}$oVxNe(85Y~vHR zH!*un6`}P=%wfzlY|E{in#RIb!I)&tdGu z$;3dqy7Wvt-+!74Yy7_xnYtNE8hI-7DF?P%4iD)w^9xq!694@Gm=}I9*k#66Xxp<3FrBD-F_;VlsIyVp7DPL(2K%~#BX84cJB2~wY|bSnLUj( zo1Fhk;GX2)O*|;95k&_TZ5cy^NaGh21`Bcu;$I738KH{(`8o^ZU(H+yN;A;e?4Ex& zb{6F0OQB>A8|3--Q*yEYeV>UH?<|k`-vBwqVPb|2bbu}B*T6Y)JE<$Y0s1*(>=1+{ zhtp7Tz;&YkJ%B0kAD|#s5Qs+neAh>bOc(IN`D;exuQ{juOGo5qi{&}gzh*@KHRqIH zh*bN9NY{Sw2TIib0Yl&mw}0Y@{NV2#^4E;W5B|;}|I!ip!QVOLUo#><_&bOE#r|`K zzx%TB2TFy%SDzLBhUW)==a9cL;f`*@`Jx~$Y1RL!0>k@8-Jig z_~x)(h>Q=-#O%8Ga^6uJBR$m{tpd*1KIckCBommXNAAv z`N7{gTFch6bjZ+L$2cMkb$ zM$`}f&LRKO5&6O2Ipkk6B0u;$hy2Cguhpw75;|j2Y=^~zh*@J;O`vr zFCCE|{GCJoH6!wazjMf6?ElE{cW*ZSK#B18inGGs@ciKK9P-zUs2}{DL;j^B@`Jx~ z$iHSpe(-k=`HTG@8~*Oe#vdpV{$74o_#2)d{GCJoni2JbzjMgHbVPpecMkd2jK~lE z&LMxX{}aRCE3@$jN`$|cofZCu=Ldi1kiTX`{owC~^JB`@l%k%azENg6UmHH8y@S28 z&An!1Zg8jESO-~?d6`gBF>oSlp>NpqA-xW9o4Hpx58uKQPeW zA75O?PlEk5>ua>#$X$)lARN z^yjvAmiko#tw;O%Hny=Wgt2ggU)0{`r&1e^^4HO}(f(bw?a~b$dvDp;yM<+bRt=la zR32emCA6vJOnl>6A3@(`v{Z3ko%TVz6QTDQ$I z?k8~~NhY)Sm)`_Qh_>i53Qkg2-V?7|fT^cjbXxo1jKQFz=I411nXx(+7;t1v$ zq2$?M*0m9vGhDI~VD!V1qRz>yio_LGQA;r1p6QDHp5sh%bsfOKSh9ke;dD#JBp&fRq zj9;4GA06!+Ho$JMq{75v^PeBg)zcv?Lb7N#j;)^uBco7==dx9P>`gy;8jgAP=6-Bz zd|udVneq-RmOBdc(1vW@MYef%HX|?8h~-W%{c4O_IW~d|G^j=?=_nQJei9l~?p1(| z63OI?c=DCTDoNN|VnBX-RhonyJ!1P0@0IprbyO;AWoW+^DkxpNd6jjl-iCh0s9-LY zj(*A$BB~0NFirqZ6u@@A&ixp`?o|L!REcAinuTt4MWz2-Oj!Ag0ZLR;$-3HK6i|i! z`wXD7<}_Ih&vAa+&>Lslg$+<`oX$QRWGpofCzz**i2l=@hpkM9`p=E&j;LP6iZarI zNBcq3Y=HfY@-Yf$>)9TZ>A~8Bg|13V0bu9Q9k%IeQcgm-!o2@dc8RPE)m6U9L{(ul z?tYB;-0PV{kciy@lnt7(&ol}mw(EAw#lx2j<6lAT-v%Z31+^=*OqckgT`R@*hKgr{ zIeWD+eh$|PgpC5vAp3p6(|Acs2c7Q#b0SkDRl1MdPJa&95Dcf+FS|vRCVZol@*vF} z3B!VK;psMQ&oDt(m=gzd2j{#(|4zH$(5;K)p_sA^qXkOt{-nh^m#N-hqgl1?u;??L zVFFtZ-Re`5DY(BvmylMi4To{o8yD)CQ988ITz#J(ew(-7pTJd&xTxz;){^br5s^Ef zqFRjlSr`rd2e~1PH5+!S9!IF@0FM^g=A8;=u}N8b1-6(l8iyR&4C!ghEqjiN!;Od{ zwg(koNBLeTvf`jd=GSp};Xg|tB-DRgzouXNG2WYI{l@jP#6X|`JBS)sN18u09{t}F z307-@gM5^qEg728lHZ`)8t!xhP>VQ$afl3=EhkG{8+i3>49v@BEBWe;6g^Nh2QOVM z0+q6%9n*R}D-^NLL|Ui1I#m%dDYkI-STeQ|G#WTz*hk(!4!Tf~{Qo$}M3ox+v(-X> zCquNcni&*n1#~HO#8u&b6r?|Ch5Jy(bf_xMmW7<5^xtlEw%VPo?q}v7QN8^+^;QI$ zXk>;kw;##Nj%N#v#9HXpvG7_3FS$NUOtTG%`H5M7Qp6>$`IA=X_x>6CDL*mg&qgEv z-`35!_H|4!cXg34IF|2Z9a|HJcws7Ur_YY1<)aV*i4RuRw48}bwD{&HZ!gvYKm zr`N0qmKpG_ITgH{a0sNAI%zJgATV2v^K0f8NC$PdPDn|30b32RLnfMFl8&5z?S-rU zBb$kkO0V;e|2Mgv(_^`0)QI2~HPTd}G!f*AMH7dp7Auqvv1rNfGR)|Q`T2oU|4o2Y zPWEiz1pz4ZAHE~Ol?cWD#1qU!LT(F|%HwO2evam_p}9!5vLBfvOkro=qkyCNvc+g` zeX)*tgdUe7_8TQ|>BSe>NS`MVD$Vxdhi0DJsE~_Y1WNjNc|$ugJv`9Bf3f1%>!;1yE2d+ZKaGG)HN)aF=~eRv{pf-X zp9@*^K+$zj+7M3%{;o3jYU|^GZn(+!{{|bsSx`}}E}_WGTu8^M&G<)xM(7!K2U%CF4#xijGnQ2tC71%Wg`DJMNAS_0?7z&SqTRt$JA*QG z?ZR*$*Bi48^AiT{kK(5hci5UJ$rzGx4w=H7!Asgk_&W?>%?>SY+?}f;=8r)w6klPj z^4J~jYLWB&^^rauTNJbp8*M z%n+XJ?NWq9`*r^QP9+V#jO1MCxBjw~?`08Md&=4Voqfqi;ah$H_brEj(Ac_S?si?-1 zl?3G-D$m(?X~79wT#0&9!=2ugf|>5k3-rz|b3Ncb{wEF!Xq~S)Vywm{VVslXOb$uX znu=2-n)pc52~OaACm7EK4PmdH+LEDn4oQ7ZgXyM2Ez7A8pKTYC0rCq}pU!f6lrze* zalMjjAC!G=XE5dv=6z1*Xthyi(8ut3p;zP6#jv_>l4DE_0ry(ZZ4YL0+cxjopK(~L zf~qf66S4cwIoG>u}U3=RFu-TV@b?;S%EV2CbJlEFh@4071Yac?^&|osE^>b*&Rf zc{(+EG!U2I>kMK{apumI{%;SS3d$e0K`=|AuYt=G7AW?42ZGULdLVH5g(ZI8fl%V# zOjDobwD4|myKpZ|*DKhJ`@ZF-%TX8mmA<9|dRl#J|dUWT<3<4|ZI}I^+ z?Z;C(1T{muff~4Aq(7KHz;A-vdn>pEn2$4%u!k!(@V8gv>z8V`O%Q?$r(5X`BW!tiHy8x0q}%-*A$SZ2Q|C|(tm*~iv&D%%S? zyu)OVn>J|eazlm>qbQi;*m?}weKhg#nB%h1Sad8;@dNs?jL{|-ZaK9ehcSS$Rl~?6 z(E?ol=9KXkovvoCo;W6MMiwvB)GyCntDG4=3Q}zvLGI~fYP1w$XLAlvfWB_!>6Z6m zzNv?`A$-<=GVtIcy4$!otn6_Ja39UmwXG2zLN-}cN<)k{>8HV=fGQ&#h%v=q<9ud$ zfJaBoRBu5EmXMFInBo}PAhy-l_)5iZ){mj}O?o4@XfUp`?Jj33lb|u00x*CSmW6P~ zf)bj_dg`x$8`JgRrdmB5A+s`O7$;Of2mZvQ^ZVS#TpZp-7#nr$Hw#E@vx^|&qZrl} zIKHK7PQzh1;Fd%$p3h#o)MV|Y``VvxFWt6X-K{%&yL(c9n!BS;<$j7(o6#^_=vz`K zx}(td@uZNN++{jodu9ALo8E)Go6G$zpi<*i#Ns2PMd|Wec!Tr0Po4Q_TBV9j+hDk6 zWJ{DU&OJ_|KIL>Q4Yrb#Rvvdt)C4|ok>~F}70J}66ocj!bap$23DHRmyEz1F zHD2PKW2)1_b?LLe?3r2`6zDSO4{3L*w4X72M^KCRY*oNRKq+#0it$T2-1T95mvC9Fbj(GZ*B<%`Cy zq|4DzUBUG6gH1trFRH?mGH#l;(tmT?YsGLKE6^*Rq*ag2fqvP}(WuBI14&r&oCxk_?#P@wxu9tIZVTBIIn&p^9`Ip2m; z;H7LyTRBDP z)UjfEMkTn(LPb!0K~TC9DF*WRlwoNjBZnJS*px^k`PKkmy#keN_j?Hwz=igjR)xrr z?LUsjB4a{1%Dl02KsDw|ubQM&4cQqqz1Ig7)h%ew<8;lB-X7H@fWm=Jwt{Is{fGx> zh>-xR)F*LHJH~oEswyoy+?GV`G&1%}DOMxbVn#JP|5Fh}ZdAnAx&4isY>dXCW|0j- zL*tO?qg`zHp<_*HRB$Qu@4$rnL=Gy7L%?a9qQtWhVXMou#SmljU-l)@Prp8Ryu6`- zgf&FYb(bS80&&HBA2hmjZKzYnvIBEjWqJ@Z>n!GLhmIV>4~L0|j-iyYnuneZ=DFaW z39!Dxn$^7|Z_`av4@1JxIGcc}HcxggTD=8|ZQ|6hh?R?I*?{Caxa>MzcT?dm%+ZXQ zr3vY0D2^Ahb!XhlU=^1!pq;AsmeWJ*rLrQ6gNn=0M6c2TVONn~;ATh_ltI@r?N=pY z5~Huv1=eFUn_yB_sY*DY4h++|V~-0ARx;K$+b|>XdHumu?c>}*A;o+mmJPL6*}dJw z6(we&k?$Kg4i$#}e?rCDUg55=sbCh$kYjqrZQqa}*TCquLbj)HEn5L1KWy-tI5TiO z*&Yrwq|bq`_2F0WrP6S-=6chiB|hDxTLq;!Yhcm@`{ffo_B<7w&l3q@a<$Z{#cn{s zLKS5jnm*6hkh!wYE?}C)M`J)4>r;oCk+g=^3cmpI;|tS?GXJW?X?VY1kvRQP^^1Q| zb9lTt)xe<(tI_{PjB7>h)k$@)*Lk-n%%I~0y56}r13}dc8$w{c=a8Aql;(wi<>DM`q3)qm4-Ba^ z!B~AbLiSZQKxWXB(;E-F%*ZJ#V;BtE9sW0-RsHLR)vf}~M9{Az8!Dfz1?b`?fato3 z3hB^~>mwhUwlLymT57)arDuks62Jt~|ak6s1i23nRagX1c(Y znOaSObRW3-gH-260Fpx0a*c}~=~|tMPtEwV);f%$(+D$UqD>gSI!54eSi{^v*~1=w zrT6*XT{IN-j2H@x13m_XDJ&{`2n|t}8w49%&og<;Mp<13jvVl~O5MP8wt_f!pqrP^ zOWHGHPU+#vbz%y3#0>i7LGkwaPO|dJ_+j%|x6NF9)(wW?Q+uUF5&w+klK!sRPe%dv}0wu4*plT2TAX)t8B8z$UmNsP#W-v-=Oa+5P!& z$qL;=iE@r=BEv|n@b+U0`jRXJR*+_{;v%$x%Z(G&+@3ZWx?)l26c$>wF>$HVT=%Ml z3-D}2M=fZOj>G+P?v6cm#dK4mm}ZqW2cxbfg!L3%{8Xw*|MfD_>Koh@EATNl!afjw z)#ArL6->k`PQ$OifLyoPM5-|CxLcSa;Nf(+qh!B+*b1djHFtZ^mAdf{Tk8F1D)k-D z4{Ol|&OHQUT7j+(12qJJMUZ>DxKxb`s@Yg^_wA{`@#pr0j>NFWB27s1WS>hR3w`z0 zR8Ez|S@dCD*_8cq8m=`nF^@7L7Q!ekRj_8?1a~<5+mow%PgqhYy~B zSpCSzjRhg;7hGiCoI0WMD+y(xmft*~GcP=4lE(K7m@h7~NY^=9-4#Pcz&j2op6I8zd{QfA z1fp{Sql^WzK_P^aO5RcqUYV2uI*I-QY3pJ?Vl~9Bl8Ny5vn-OHW^lPB6--_f%();a6LaY>9<^o2#5fqt zPn#Io@u40p440HAZG#1Ma;;|_H159`Fo{ZAL4z4G{Iy%@b7(n|LwCdJ2pk_JqjYD% zykt{~GO{bk*8)SP7+I0{2xhQ2Z8-~%aP==1083NrOAHzx;iFzi-cl|U_9wCJ7wZK# zIQ$z%9zLWE`i>vetqQ=7*+b@^W*LgYlV>y&rT8czn@7TwnUhYX!ehzykv5|8#^Agg zgOZCk1QVBXUn<{Q;4+N!E({9Jr#^jgNZqzdhS|BinT0mzrNT~7^Nm@obk?} z5Yav6-e4JmgDmz%Yr^jh3OBJ?bj-S7G5A>BL_CD!Cg*dwB(NzN%+YRA%mVgYM%}AL zP!*@Rd^Jpk8&dT!(^|p7&eOIdsa_hF_V?R6X1@rJ5~X|=&%gCJH@Is|g#Od+d^3xR z8s`Mue@LUw^IPJxG}ytVel1K4!`A93gueSG4|NtGmFhDN`cy3l&iDHd4YE=|SugRK z*SK%vj7soP3ht|yo+HtmdFj(E*9@K^*A$AW%=AYg|@Mo zLc~`v2xnfPRC8|OQqVpYWmpc;cX^?7S*)cP&gQ6iQu|NOv0hWr%Po zv4!zj?)xK4VP*POcC%@~bv&1=T1I_*w$$^4Raz)1QYebGqx{2u{C=w-!A&ctdBgfG zL0JG<>*4mRnQ_O3j@LsK+7qrA`IqadQF7*=aL}F3{{sM|vnK`m9GRYA*SvMMyR`r^ z);zJ`PUk&rR+R#l1uW6wC=vR){HvY!8W;PR^SRzASnPcBOdNCNu`A$+^Fjg6{~;Bl zesVu&YQDZ2wN&5lDf|lQ&Oil(YM!U5N}hGDy%dPmuzyJVR5ctk(JVs`4ub!3&ikQX zy%kB5c%uzMH0aWW(W(xjgp3SZx6jpWVT`*4Xl+u^)}BHHvAzsYE;Yq{TednpKfP+o zSAH~RS)V9xraHCPw~s2b*sRH$uM^RF);cfCOY+q@U%m5T_Oqlcw?0tRQ29b=OpJW&p=!-p!>wudSxbOzWVR4XnH$bA4s8blG zTJB>^h&(l~)b1Y5GexHI3oY`SHG$P+bslI^OER-uEj`4+hy`NDH}7aSAzmHjWYNUs zv`IY$dN-n>oa6;_`w)QG`MIeizgG)A_eC)NXgG{A9|@*~da||8J;W{qu|YcKjDWgE zY>psgQcM>0ZW^Y=H$WZnIjm=B#X;5ZJ*qOpiRK7O#vVkQGVpCFi{=t#J)=lB3*ht1 z7Wai{McnN}(eA#HX;Ig&8$g_JF+kd4rF{reYE`A#T+`bVB9ci5J5y`Mytctw?vHkq zlmk#xc%x}K6Vz6+8y#xK5!GUZ#h2>kMI&>M*%sO8K*=o*rM9Xn9w3BzQ^=H-?!HvZ zp6=e*+Upj#Y&)*4K6A z#*16JxAnERq`Fn!9*VqV%~e;&T6%Y|wS|aSOXFoN+UnAhiYn@9+qym0-o2--YuVCR zsynrHR|{3_=v=ax3b(iQ^u!Ld?$}}ZRB&6@_9)}#p3YR;MZ3Ct+hQ#(t*QNc+FG`$ z=-9U2jh%bjVr1>=+Z}6f-__TXO zox4)Br`@WJ?dsg!nQpjMavALgZyjx^)>zl3t1pS#_M*(qS{Kvat$Vk2?y~-AytMIZ z(9+%0wtcOzc+r&?#Z+=7XVsu-}o~^Ar zV?AxDzMig@uI^M%tb5PaTlz?q+D@Bz^t5gT8FZ566SjN1`+8cr87o3TYad9trm-uv zXj#l}P+d5Odv0YnxQx}tVS9e!OmHqT}^>%i2wQaBJ>`KLUr`os1 zdfRrjwbGnTsrCrawOa+VtG&zGbNS^FQs|BDp6I=$Wle8yTTg0zOG`V*QE7WKr8#1u zrG0x^wyC_WJw1!`vp5C`T{;5Cja_t#BRvg*UENC-w{-8?PBB-}xoth5MFWIxY=scp zJ3(YO)X}~t*4o?B)pl!2eIpPq>1n&gwWDjDCTT?qk;G)KD2Q*?S#gA+itnK`zj$Q1*|PCy^D;ITzr)> zM}6YJYIi-|npLh44^g^d7Lm$E8%(V&I~NXNYY!ydb}JaR!Q0(KU5pKl>q{CpUVLT_ zb=9Ud8)=2un4`E&Ynp+6`>nCAZTnMgLZ{J0Y+rZJ&P%q6UJYE5wB5=;=)PnK^CEtwyw6G z&Q`ozds=s_ymk4q+GR_tYCEcGFI!wy+kScDMb<=PB90=q9k>KK%oa>rP`;L(SN{6F65& z4z$3awl8vz#qP1hJ(jx1c~Qyfp<_dL>o$>aS9ZY~!?AWpPBsQNF@j?4#%J4^MRmb& zOz6Z~_Sz>zTe{oZd)uHJu~j%cLIT+~#1srt6D1;f#=2oPA`lz?``a~E9J}4r*~LhZ z2x?Wm-94QhmqVG`4luyG+B-X1x_8o^-bGPs)OM2upnOkX7eh=PXv1F|SfK(rW>VC+ zCz9>Dh-BeESMA>o!NTp~$<_etMKLBgfkST^VX<}<8{6I41xI)CZhJ=9#Con4qkzOk z5*g}`wY!eYNN2;Y1Y=aV6K*!ZuhBS4Cb1FqPOPYH9X(t3>~L8wjkTIc z&Q$Fv#59JeP-|a?B|(2ZJ$-vp;=~y-858$Tcc^v9iw&U>3+NN8+q!)_wAR@pO~n-n zBwKgw*|9aNPu8`iuIaMm*}OySDmrX8ct@=Hvvjc93mTl-dq4{X=T$&4Iq-LbVN z))iIZq$iN}ru8H@+{Mx?uB{hN-nw;HYu_$7=8ys)=@J37Hlwv=f#OK=a!H8Rh{Ls{ zaS+Kib;H(OQkQHzcXmm0%Nouva!lIfhh!1szirRf9vEiZz6gB|BTm_B5%LjuLk)-O z+G1TsdQ`P-*Ve9`8V#`LwyjjEPQM6F66+x$KsU1xXQwga7e z7S}HNztp`6oLxngKYm|#XAgS}7#e7@urEmn7y*$TWDwtb{a(|Z?taZGLG~=jmhPbF zAo2ra;)n}gT!9&J5M^;h3=AqN<1~sGH9`x6W`xlwnISsS{J&LozE!uYPInra`F!Rd zrSGY4ovL%{RMofY*1PZBL*^c`P_~Tov(P2Q(l+XLK$#60X1m`CBDUvdeHb9{@#5u| zT$){cG51m@z2kUjB6vqEF#Cn&cJP4+!3JjYYdPnfrKXp&!mE>u??E;jp}q@Ed(B3; zynLD2s+qksjGcFWA2wX(zY{Q~90g=cuD-hOU5IO+*{>D*a;f3gGtF)pgJS8jx%2D= z6`3`@P>;!+e;D?F7oGq1voBxThwYZ#2Q684$>rE;UUD-0I2n6|rHeyl3l7hgT#SuA zwrrQ4hiz}i*%vRz@HR!}+m2m)&f8Jn32+%Sb-}X5OS4OlH*0bBPAt>eGHW1&^b&Bj z;cnaB6U?N#b7GP zVhnR6VUYMnnx%>z3hS5PPQXo4w-v&A1o}3+Y-!C280X8*Hhf_t9~=YN-HS1dpKJaqB0%xpDJw0}>(%&x`R+4GlQ zexBJrowNKrtZjBRy!4FAmYrxeVCO8xtjf+g$Bw^uzZ0x3YT5bcqO+GSw3GcLH2VtU z$U8w!=fH)EX}0Ol3ojM%oC`0o6<&Dhxl6HyI`u+S&}Vx0;>+62Jp&2>Gt2>+K*(_4 zg#Gb3E^)~v=bv|&ue|-jOD@0od>dHjM25=G2-zm$mmY5&U%L3hcj7kU>Z>oGXa3B$ z9u>+jzZ6jbWmzY|=*Hnwmet(?DBq;8zCmsAg>cj;Sj!hIgS#e}xLk9MZOAex8A3Br zKEn=(OHVx?u@7gk?>_&+3l@Wi42l_mF^Nfb+3C2svB$4h9%3)q2jyDI$`n5=P*b+d z>5TAq=wO#I!Bfq*&eEEzWh-fIn=B5uzuE1 z%6hbtACi*y$hDN!DSk&F=dV^c%UJvlU%W<<)s(Ud#bS-MT(2?IdAqN(LXj1fvMR-I zcaMKhHV%p5Dl&i2LY6yGh7Yd2Hx4T>W<&N_R&YKP3GZoC#wq>U7 z%~U9|Zp4QoD>h~-ikV7k<{YVbi8oMAl?>7*3I}<`I>osjs!^OL&}id{H69R(Q)D#= zA;n^i`gqz=>eu%0geX^4Y)?UhL6luunsdn%|DgUMRDzx`!ANoFu%@Wb(Y+xW~;x-@VK1O~o-~2v? zjt-ZyK8kc0Lxm!JhZa37Ug_<-y=zs9EQwa%)>$lL_bX-7cgdOgKCg5|s>IA&MQLWXB75@+{6xs?m9R`*60m28Qt2kAg zvbj0sFmgKR1}Cafqx>81TA3neE@mu6&RkQHau|ml9EV5A&@^h4**a`>C~`m=HOd@f zFj{P(k((lbt!9s#YAAMaEY0;q1-}b%I(1I2P#71bL6ggh5#dfd`gT-Z=EfAMRH!uk7NI(=>pT4RZLWt{| zm|dBzDNWou!^ieb6337edlu4{AL!&4}uwDvuTWK*^(qfE1gQ6-z*uoKkQw47o7 z%ss?yhS?VkhoZtPx@nA2W;ZCs7@3i;zmD89EXD@;p;2xUkwXM5M)8QCMe)rZ>Y#X{ zhsqS$q{4tYKWI^8;}jNa%GU1h8g{aHjJvs!TZ-pgZ03%5Ynu7@KDmPMD1LN5mjz=K z|HVUfiqCkcgW_`nnSor-nfjGitW$i+Lmd>4l19J}iuZdc*)cl@vn*{zjji~xx6w|K z9vS~?-oIdGWbzv^Xcd}cq)gqFoGAtiH>nhhPE@=Tj0_YhGBU14rWhP3Qe*?1B14m0 z{e62Hv})W6>><-8RJA5ll_pf7aY$ikVFD-dQdSj6(4{9;#Cu^iT)Ip9*A#c0FgR zh$dz_+JHk&VE(rpQKsd?`Nd+tW*tEimn=DebAH z?deV1Q%l=3;$D)ixY)O%LUEnt~6UU?20cfgnwy!JK5g1 z`w+KN>=I~vwiHK#GjpcT5`3b=XO(gymlSfY$YvrZjZr&e!w_K4&vvt2fKHS4vWb8~ zI|@>Bb0LwouPbd|BW+(l+Si)2ZvxP^el$F7L|58~E;fQaR?504hITd5b|p6r#U3+_ zW2>H(A!&||D6=h~e2VlIdp?RBmZoIvxxwf<{WKV5I*jTlhCWfrcBPDh56Kn2v9eP< zt*Is3q=j?k3Sy>sgg|Df*Ohe^pGGBxYg%FblbN(|MJueI&!mN`T48N_VEUKE5Adz- zq{wP8mM9hjq1;*xo9|h+b`N7A%VzEAu81hbIUeeuc#uFY$V{E<73&n+_F{D%6!#U# zm1U~WE7mEl_E5UCZPWW2y`Sx!YNtqljR&=ysrH~qvD-s6ihFsd+9|RLt~#cI_bDH3 z)B6g&r*o$6ig)z_?^lK5hdtCwag9Jt_;iIby>s<3#fW1EPLb|AMc0XizuRmFB5dycvj7sqTg5vDHfZcO{tf}V2kh4Mxliwz9LFny>}`h zJu2CQLG4AbeO#{N9)BNGnUJqfkTJRF}9+t}sOL!!ul#bCRjs1%)ET)?uw-YG3bDo#L`# ziUlvMSjv`5-Pg#~tgW$@OCKff{%RMO#+GNZh_nwVwmZ_s$kuVu_O7b;$`yn4n^NU> zy_GV>pLnR}aB0=izQJXR4G$&vW8tIG8>B7IZ0FnZg`J#82jF=94Gwzhjb7^}2@|^p zTE7#h5Co?l{u;w2{LlOgSIA~2;)|vRzerpOF4gGLL*g24iJld4;m)Rvsjb!!@xB02 z+({xfAzQlRn$m*SyiI`lK9seFh+hoQQPW-J>*NZ8ruYkiz>RA&CVubrI@@-2MQ@fX zPG>28!$Z|)McjWkrwuKNCknJ(w%mL&f9&bA_rEIJH{T%eT;CNHijR7zGwq#f+B?ao zJEhX`5_|T6GW9j3q^1^h2*@jgiJ0@HZ>rrk{S@I9V2y`fKU$gj}VZ!unP!_S3C!F z*AkDr<7OdUI$6}t^d+klgD)L%$x`Va(SOF5OIAxwNeu|=B5j#~P!9DcpP{-b6Bl*? zVeu!td$lJMkCPCafIK2|-&R0EPKB|eydQ0-Nz z(*%Tas6QE8E+BDX7Z4WT$*;l5#o!-4_PvWr}kTXQB;Y(I1246bkP-15+dpqv+)PST) zYCxzqS?V+ap&aT@oN!YnF6;ur;(JS#rEJlh#N(u&(ah3xQQOa#tWpfVBvS@=3ni!~z zF;`)O!kDXY%ze=ptWf-#hsuwM`0W5u3~j8WgSC=2yW*NP?5}U~iAiHS*x1mFjK(A2wmn1BSt;h*wvJQS~hm{~*_^4ajFY+indoW77W49N~_kV!P*pZQD4_kq(qLmKvF z-{x+LzYwT7yS9}3gr7_GW)UaL6?#oM6NdyniVK2XbIwFLfGs%_A&T{MSadUFVRZYG zI!3OPbyH*zaf?84y~NTsj0px7Mbi=0osOvFt_1OnV%sGF49)3Ho72nY1or9WC=cw@ z8~ctA@##5P2xE?7XiRU~m@#scZ_HUqGy2kI^syPCSNhnD;7woZO77RX#R9Yxep=ksxQ7Qm~lU-t$DeelIr+AZx z+9}>Dko(AosRx20#eeZoo#N9TO7`KwAG))LSFTZ{54f$ONC%8NwVWv$#K#R3gYD#4 zC$+tsw_Txlvxhn;(webdQEXRI+sY;?%l4A0*(Qurmi(c&nvB!nby+&_8o8naDL&|- zc8XsU$aNr7-wBEo|HVV~U@J)HNcKZsts|{WZEvUpUr(RtQVS=!D}1MTtw7FErv5G{ zQvBsGMW+5MC{o->Ty-@vb+B(ho#Ls(6pQ|9GTU&xw^*Y{uZ_i8&eX?)B1L-b6q%yq z7{?UpwNqs3O}-5^ip4hQPw9L@+_=xXQ(h?b9PR5HW!!yE`tEUGzT-P0J`*6e<&^+Y zWSg3@<#Q^!UH)IX9c~ViTFZ*@ZAUd?^L;}cODu2pcYPSqzdIy9`C^Wotl~eGPpSY0nK~rcU*WHH!2C-|eOt9MX0z^e3Z3 z4|<0x6zK)NwM3CF7>6o3Q}hBKDO02uC`&Ooq}{S74*i{Xs7jGuU}dA}<9sZ7DAEOt zJc@Jy1t|t^l5-O`*8VK^`($+CMu;N)XwFvblGDaY?@970fp1&(s8qVuH?B;Pm154N zRd%rU_jxO2ifoZGS(~y!@xD-d@Wx3^*}scYlT@zFvQqYhXt7Ggo~f`bQ?*^Lm|qmn z7RXJe*bkRx@g85iMzOb0yp}V?O2PhGjh9QID}8-+iq{tE(;x3-;ibNCjbgE|zHqSc zHNJ3#VzIFPc;~$bxyC#!S45HGRN+(QoEC>K@^7UWy;ZKJODXS!&zj6X%!W6L_zQa= zZlM=N{7ZoLlhOJXKWdZRVR#~XG|Rhq%N?|Qk~hK(N<{==}T7ENXGCmSMDzi2FhDJHZP~VgLk<`k*zStfs}d0%wx;m zB`q|=jq+NL&C4nOh>^%@UX-913qC+TP&IZO17*}G^9n~8G+qJ4!80Z8_*eeKQNbbI z9ukZ<`=E4xOxy}~yJI6L7*}7)SngHdtP%GLv=(CA9mf+Uo@W?+h24x3ZK;k>=_+3? zz4x_a3F9ZbP#S)f4?vyb*90;lrMxz%aYFNoDapz9vJ7&)GoF(=UiEb)RabfqdCyQ_OH`A47sVUT`?%e)MO5jZf z_8;!dDTb2CE{o0DvDHcMk}C!Y#d&+M!gh*B3FNjAOnogVvfA`YLzj9(HH!0n`3{P# z+HJj=TH+OJ6oc(#X$n51wkx!~&{x@@NNaAF%@hq{mrXI)P9FCg&32WxkMy?tDAJm- zUCo)ILF}n12HRseMo-({Ngw{fcSkQpS~Wg&Dn4}5hikq6y%gUkkSoj7>YzyR?qP~d zg;w>32o@yAiWay)9A`r?-zc&nxM!d^VVF6lrg*=q6!-T~??ocAxv)Ty&4mTFadg*Z znNOYegCQ91OAY&O4~F|v!`es~(XgKZ!Ehrr?8kaA+(->;!+%7>e%c4a9jReI!GqzB z)UY<^tzib5Tvnj9V78rRgN^poMzZ#qRe7q6jZj&cBl`<}1Zl@o*1H>I?B3xgUzuX4 zu!j}i?JMk|7zSHv!<-I9|L)k!0WZqc>;y#ojfdJPZW74M;d;*00eibTux?UZAdpjJ z>fWG8@sVMQOg$YGDL(6=I>l)-z1^r)?!%u5Oq*I`Q`r*ZZq2uAVjJtPQ9RIl(Ls@o zb7h(Oa!{oB4G+~Rvc0Y>Q*0l$$P`0U({VklSJOsTv_@8xMpoF!3w^u$DAG0KXeDQg z-eKXRNJpJw)C0r1CH1r#dx{T;?iyg<&^xSj6zPZ6V}hPQk0PD2dZYQ|@>0(_W6w*4;JKIZ< z?J&-EVh1E5&+wU+og!ZEXRnND&;@cQ=#aro7{^ep>vn{(io zas{za{F6ZFxQ7O^{TI37ZaL8r;0{swY*3~6OAmEYoGLRCb{`(tDv7{y=?PEf z{;k}{UB4n%^bEzX31r4gJ!dN0*A;*w#q9-hic+z9p|yv+wHig%Zz`#IYc1Ydjp8H^ zbx_>SLv@NppVAZh;vV(?iccj(%=~xfSbJonD6$*=sve;=b^|6l#o;|dYwQLnQe-z^ zvQlI>z$c2M_lP=N3gAjPto(O>Xj!K?b&}J=WTkkJKyE}b^=JQyeLKZ($+sw-B2%>; zeT@_!J~G1ObjnPRLl5GXRxZVoebr0<^^Mf&6vi*6XXl&zTHuxI3|eXFMJL@6A#r zBaT9^XN3Omjm5QLEDmphPuY_*ws5($>lPofx%pM{djTJmtLbsdtHW;zQ2e++%^4n> zWa1x#9>oWWdQ5yX=-n$b{abQ1X5S)nwJKMGQ9e(w$@rzFrCICb(^t19y=|Il{xkpF zwUo6$YC@8DR>DEPPay|4*f!5&OC&f9mhpn}O_Db)!^^px7q1>XxvBK(!Mnejz4!MYOv!)zC^CrlO4OKQ#(Vh zMvZcZU}gxc%35b#H*Zc(Y?0(m4S8^w=w(svHS^{mcc;CatvPa?j$heXHE2SK!4*0p zXZ~ETw_Md@{yeY8`i6CE{XT-od8YRXc6w`>D<&Q@)-UKgUryp^IeE!Bay z&m8M&e_pPpcFKPgY_b``==Zbc&&i4XN%E%JNx)p92OpQ&f7=&xVU0Km$5^9G!r|nN z2RHW%haT_hrrxkVh7Ffn`0EHJ{DlPKF=>CsXNU;&l$|3Z<6Uya#GrVoK;U2Wu_X8d zMW!8;zb|={@#7z69Njg(H7EA3QQn=%;|QGE=6p7FQJy7O8{U$Iy40Zw7TmKnr{=y= zV&=9=AW{#C?o)D|gnoW^);e*hH7CUTK4v}Fnm;ev|0!4FFXfKCGy886tV>OV7DZX8 z>0*I+os?b0QiPWIQZ5Unt`~^&tWb(mj?=B+24~s3WVRK1=gis8>#OBzT15FcnRS!l zo9WFzosQ*CZbNpFtI?-?uFSSpr=Ltq*IUkB_*;V5WRp$VM`euMDOXcFWil8}VcB_K zZ*$ccH8!$e8d+=zU&p0-Um8-drivG3uw3!!K_9MA%*d$j|4Q1|R;MH@o(YP>t z0hZ!>1j7CL+7&~xlATakslFhg`+;1IiTpU{2X8+NMw#~?Fzb}UUlY&5KR4q6G>LnM z`TbBQ#iKn`p?I8!Iw}5*K+V||1343QuUDZMLej~QZ1!566esy8E#en+xr9$N%!zO6 zw&p*Va6Bhhy8&e4c>!^JorXm{0x^$+xS@u}DwJMekF1oQL3cf|;uP5^oFP{WPLjpF zO|BN?ueq%&f}EEDJgD&3MR(@4iEht7F(-x10(TO*f#UjjXf% zAi8QGXW}9svp$O3`IvQ53|-hqkr8grP#Y893PmY~uI`HiigRSfmJzkJF~N}vJ&KI4 z)nkIehF-kUv3lCzj=KY8<9+}%Ec8)=w@u-mxhK76?n&99C%rrF;U4Sg4<~?(c~c-8GEfj&$^Pq^<8rM{fs5FDDRAXVcM}eA17BVaQAfEesQO0(Uv+1d3eU zF?83jU}A-=@1V`~ZsjJz(-*7G1h)l2ok(G$w0;E>9121GmonBk9PMyrf&QVd5ShajMsN&&_DS3u;{u-R)E zyV^f)?mGQOt4xtSF)8bJy|a5BN4t;}M?v|>Dh!jNC-i`OO2b!_xr4+GfMUfv+C}jK z57m~4$nk}b-01VxphYokCA%o@;CGibirkB%E{Ysr=<2~0am!5uiVZY!bE!0bJg)p< z&%0%#Xmly_x-0Gj=gqz{o4KZG^46_0W_{v~3uZ6HkJeA5!hcKQBSunO(;_v@YKrSv z(=sz>dG6Abu4-;-nlNFE{!Sn6hI97e)y;Hw&z(&KvTVT!dWpBb2IDMC2WOLq=9`M}p}Ui;>4ct6vUVf1HOZPm=zwXlhpmL_N!Ff( zRwh|(g#IDPnn~!HBx^RIl8nX>sC@|WXG22PeuU0UN*zGxJxSI7)OJF@)wOS;rFUPO^?C z^!_C4L_%LqvQ8$nKFK?1S!F_BNwTVho=vi99+Ka` z3o-1NB+!B+tCLV)lC_A?O-WV{q5G4p2BEb{)>(vJl&l?a!iyiIp4hgJW5u&vXv1G~ z=WwjtJikk>P54PU%KShFSbr!LBpzOdgUYUSQ`Z&rorK+#J&I@P2js*9D-Ol4d8kG) z*r=p7l69%M#2cGG`g@(^7AjRTzY!L@n`$W^Za0@`hsVpxeSE6al)Y84msZstJB74~ zp^f8eIka9b2h=# zzr1V0Kc-$ zjP0i#>`Lq-S7z*ZlK`KLGIq`maV2(^D@#nfQh*zyjOi~6@RulKw{s44RV|Y%tD3P+ zfZs$Jt!K=2CC-v7OYHf$0MA4jZAZ>?B~F(sOU%4ifXAYY+560QB^Jt+CHDEG0AGqS z_S^X|S7NqYS>k{j1^9TBanN4`*l~d?$r6Vw6X5+(#@ycsuqDcvf7aoyiY0PoRSTXG zU_+E~#OX)45)HYs#KOk}csj~Ba^ag?iPPlD5=VbYfVEM^F|!xC5=Y3DC64{L0AGwU zj^FXkuEb2avc!q+7vQ!iXPQ;&QpNsxzJz z;8#&b`Lv^5i5|JKM0KqIKa4VJN4&+AI90AJ(eXtA9*HtKXCC89ERZWpEV@mAzmGC{ zwtuTD(I!`xXxt#c-$fZ`{Yij7M;Yh1ii&@Ggwm!Q>rmysJ5_wuRmntddy2Q*wqnV=;*bB ztAW}&DsfFw&813;xs$}q=SDL}C9YJexl~Cp_jNHdLsl@gbyVW|r$%!fuZ zM+Bzz6tyayYN{YEX#LRW0nWGYS0IIoENinxt%=}?Ab5!EK zLN%8vDdr~0{$jCQ)nHPIyA{=3s-&135Hrt?W{yhS1F7axCB@u-ikX`1iPY9ni90LR zT&kp)yGYD@Z!~jM;(kpvmntddeko>-mHnIAIx2A&sG3Wa6mw^anFmHQMtqU5jciRZ`4Nkh_<6%2f>}m3S|tnoE@wb1THm`q9i$iFa74xl~Cp_llUQ z${m;5Ix6wLO*NM)DdsK|Gf#|Wj!L{6RL!MIin-^+%rSCzsJ4zuyvJ0{rAmsqx|sRu zXy&NIJ6F|Qs-&3vzL+^c?qt>0QHl4%s<~82F?XDpxnneQRN`H>YA#h$%snV(rpsNo z+Bz!n-d#19DkGEwbE%SI?p87L+tJKXiDx3Jxl~CpH%`t*&XcPeOe*oDMKzZyDdw&fGd~;69F=%} zqnb;V6m!29Gi5o?QCmkPo(ievQYFRQ1!CsgqnV=;&ze+osgh#u7h>jUIeSuDM?h}BYU`-P(>B#ys-&2EtC;!JXy&NIGd$H? zs-&2^U(8ICGd;C+RN~2?YA#h$%pE9ZZW_%Tm3ZE$noE@wbDtJ7nH)2!t)mi8F;#P^ zl45RGF>~1{<}xZ>?3KEbv%?aVcz~*WYM5pJPilD4*VLWVL7o6ZSE$GDXS1XM+#buRd zHoq>rTIr^2VdAvGg16ET#q!vE#%H!Tzka~fnXXriqAL;pBF8>L+$Yd2ay5@dQeG_>KJB3R zQGx8&3O^}{wQ|)SzmzOosP(u&ZP|61d7^LTyjCOdFP`_9doW%sFnyPtnoori*Rccy zl(2sbC7u<{-^vx9|4GDg5}|FIW%T|$<`QCJ3>PhAYar4yGX7EygHT~%d6wNh&0hSQ zjTR~XayTBiq4;;cy;qcSCfIJw9g6q+_Eso{sMHx1c0CMGoa94*uhKEGV*pDz6LWlA zDijY5dU%PHBp5W1WGQFjj8K>&18Bd*7mqR19L{0#!^CX)7R)Gov;>&hXyg(p4JHB=W1I}Tp?6{ozj#6q*xwd4h9$k?$b%dZ`nz%-%7<*~_XO)Ha zvG6GEGnQtHxdXk~E{bpQP_hFnW$Yjh73EQ*adt(ZBClp9Q|1O~5`H}4N__EpWou68 zOlc;w2GU>M2!S|D`f$1L%NoV|ey(t;3?dhFMMy#@JHQ{5)eWj%FjZNfWAIaai zES!srD*hIx%4-(yk`kzv;*Ua;DGq>U%s+7OhJGf#InjY`_sY~WQyhxuP;A}4sL0gv z>0XiIl3k06Oda0p6)C<|AZMDXv-k9h6jur46q)*RP^8GOlsiSH_V&)HYRk`XRYuIX+ofqFb(jz9HhE zT*qM{n>QmrN`~nva-D)F$S=>pk#mqqutPGp%a*pSY4O>FFO=*ZZ1&RGYf4gnl^h&A zC|3|L$}h?0vyIUY6?=c(|NC68ta8bUylQ&YoMQ zy69o0FOzZRGc62qJDc4XFf0pVe zNzO4lxiWtvSJ?QHh+hv7znga8&Q2Rzw}|+O0F`!exjV@<*uPeg56Bf8{Z}YXW0jTj zM7+X7<@F-I7$Cl``l2_ug2BpDg8VwkIaer)d}X>5-*s?9u6;LG(M58Fb3YRCmjQa) z8=V%vg%Qj?Dmg!qYsfinhAUH%YslGGc#ymZn}09-v|g@=F~#;aSI@BCeo??b$`xmG z6!X2Ez8!ggkVIK%4c{s!r+q}AVc|GSz8-M7T$>Q9H6njQuBe0JS`U>;WC!?f5n$k- zDT!-6;ngU<*MExudXGrr3As*y+4-}t$Yv7wX~-C`8Lo}t?;Eo>+V3}*t=V|PQuw!* zT+P1vVUf?4;bAb!9868wf}HXS88k+Z@>#Obp>w#(k&TU-Gdlb)m*SU&vg|J(FfnzU zQ&x_QOh#PR*hq_NH~PbU@F^LH*}0yj`wkYS{3p5Mizr;_oBc}P$JSo!1JJio#4v{Y zx@1^Ct{LLB7?Ga}W~^8xeOV;>vI9uMDScsUbhq+6*fuyG%Q$QJVqci5r;C8xGw13 zB;xaa%iGDtdX}uusEteYX9L7FdX`_2JAWbK3jyN#d#HNI>j%hoqS*UdjrI!_N4%k5tj;cqCs3^ z14VRBiWXUDrL@^eB6-OZNhgWql>l)qUg{U%POil-1&C|$xw7(_K#TZ7fVld03;99o zJ0kulK#%S22IBYS3N7BAT;bWQlj4U3vMVgvj#P)DWIIwFAhI2)4iMRnR0oJ`N2&uv zkvB4KhBHM1gd#<9p;Kgvv_f;T*7CQ`1>a`D0)7VmVv{ zMf{eB$`rpVko`=9iQjk-GnR?@vz-a^T0F{c5^Q^H56my_o!-(q-~4JQ@uSrIrkwck zQGVH$Z^};>ydhUC@D$Gx$U4l#WgdjX{5in)hr$$Z@_P7TNG5*aK@>h>j%(#9a>d?? z;@=2_UtcNZbxCk920e-|`J$ca{beV&V;}K5uuh7f7YM`na|7It@y-(ig(B}f?Wl-% zY6ungXy2DT8V)6v?dO{HWw~O9`;dr_dZ^Qj`*So^W{P-5fUXnqBLSj#_yMkDtyv*S1Ewwl&hVt&y&6jdX2mq-$FvUE3Pz+SW+d zwnnDtyv*S1Ewwl&@+ z3m6wNjIeYWYoyCqBVEQC=`z+xm$8PjjA5jw%UDBM#-NxkV+}52f&Ln#zk59qHOO5b z@~qSNM-c-zH7Js!KzKIlU7PE-3q;Y zG0@BPo?f~sa`$hRddlw@C+=tM6x#*DFM5^y9zL*8H_yPr4!b+uVRxr2)Sa?WcgjND zDGPO{EYzK{PIDJR^Q zcc+xool;JBN;%yr<#eZ%)16XIcSJVfP8p_K zVHgZ{G7L}rVOC)nD3VTiItIn}$+na`Tr(>ua}x(OiW~gC4$Vk6XWe8c9+a8t(%o6N zvOBv=*_|byJGbDq3V+4FF>y_?-k4`_pK69CMf1qXTFv0DRQ;oUEp)nmfG-f1+#-!xXn3o(HQ((3r0r8dH`-W7cwLOk56)cTl$1VnVZEOlht>36AV$ zRhi()fw(0n1Ux)&XiRtxjXBSuG3_}tWL{nc!Z`dCJuJZH^?YD#>)Kzp*zncaGEGhRte{ z6uD2cV3BT&JP!YRP5)jqskz!?YQxh}3a@=N@ES=AiWCcXXzM&#k(Z$NxR6rV8!bxr zMvG!TLcy4f0L4rMD5fDmF$V#P2?$WkK7eBC0TlBNpqO+3#f$?erW-&p*8qx%22jj0 zfMSXP6!Qz9m|XyoTSypy(!J55m@1$Z^8}!nBml(>0Vt*iKruG}A~A5*1EN?UfZGOQ z0)SpT{Q6 z^yJW(p&S~MltW{la%fCd4vpE$p)p}OH0CUa# zN_ON<$%cUm@}yH`s=%60^v4uw%f}>X!I&m3s1PLr6BDIXRj3lGq{_3}908yUD00)} z9%ORQq}XmFm;RIgKnBFgM3d~Q@XT&;S#K-4}Qv-F-dLPd?>IzikB*fho(w znJddC;D4|A-eG9yrh8G+s{`^9_ZijY$*kmU^nOgt-kctmIOZuVh*-e&Uo zNJQp_0fk0kOrg;m1{4~FszRec6&eMq&?r!aMu93c3RIy{pbCuwRcI8bLZd(x8U?D* zC{Tq)fhsf#RH0Fz3XK9)XcVZzm^Tb4j0shR1&y(k1%WCo2vlJ~pb85DRag+H!h%2* z76hsg9#DnwZWuUQo|#!CS37pUED6$?1(_h5fkja%Q``hvRfXH2N}l4WnN?Nz=Z0iA zXEnKxBjs2yCYFhKLlK^tkx$X$+)>kGrW{j?LOW|!+5xK24p2Vg(klB%`_?HY$SCI6 zk8*)sHuNj(f;!1A`-JC7H}oGUiFUby-zXljor?%UxuO3kNp#8;dK5`eR*#9orVpkS zwgRfK6;Oq(fGTVSRADQi3R?kH*b1n^RzMZD0;;eTP=&34Dr^N*VJn~tTLD$r3aG+X zKoz#y(66u+R28-|#!|Kds<0JMg{^=pYz0(dE1(Kn0ae%vsKQo26}H;YudvmIeub?z z^eb$IN)@)+(66u+R28<`;BQ9@yCpo-mhP4|^z-0~yCyS}$zY$8j~wlEVuG}WX&2Mf zq-+wPre?e`Mdqvhl(5gDC!aNstcF znH#ka4B)83jX)J{1gdZ&P=yZp33pDK~B$l^aQeb~?peHaU~WapR1U)31U0LL~|b zKB1BzP=y46=5o(lpt1EDjX{+())LrdeLoY^1jMR9u|PQMHNrua3gG}%2nVP_I6xJ` z0jdxVP=#=SDue@6AsnCz;Q&<#2dF|gKo!CPst^uPg>Zl>gacF|9H0u}tk(z!stVy4 zV=3VPRR{;DLO4Jb!U3uf4p4<~fGUIoR3RLo3gN8pzaqVLT(5Bp$}8NmUgH+1ezeWa z!^ih_R}jJaekPt45YvI;wc*rjeLoYt#e^PjFmLk*VP%SiUEF$&sn+*%$Hos1tTRj; zB#*?x2*p(%s#7cw+WP)LF;1G2$tQeq#%Sp=Q<_3!PpUKqRG~4T+{-->&c-P6I1C}# z($56X#_;vC{noThz2p6*Y)@@Vw?*SZ*drGfIBtu^aZpt_4yeL$KoyPys&E`oh2wxK z90ye4IG_s00aZ8-sKRkT6^;X{a2!yDo#&J+pIL;VLIS#18 zaX=N01FCQwP=(`wDjWw?;W(fQ#{pG1Zi}|5+M;c$wrIqMN)_VUq7ffdl}*(aZBw;H zqpB^QstSCwCE=T?nYjacO`k%JnQewsmcl)QD)#_YxCiJM&%)MeRD$B9k{RKiZ=JvA zEAY!YjbBh+;TNC^zW`PE1*pO=Kox!gs_+X?g6WUQ)f$i2MY`0w|cTdBqX{6L^WIBc6o>mzSsKRhS zm7By(8k<3tY*rwyO&W1QRUs~*3UL8dhzqDfTtF4#0;&)fP=&aFD#Qg;AugZ_aRF6` z3#dX|Ko#Nwst^}Yg}8t!#069#u1y+oK~*6xV=N^upbBvTRfr3yLR>%<;sUA=7f^+` zfGWfVR3WZS+Rfi4jiXRr;iyd-M?sZ0e?OJ`Jk0-1{lAdJKAw(h6c>2ff*yaiqQFs` zG>+QjIqCNUdVd>E=Qs7=EQtcoY)W`$`%J#~JrcA0mAJw%>r{pTsxS=DL(Qk5 z_*XcFTB$vm0M+=!$$XXe)54!T>mG;S-E47ChP^&^lKov3qs*n*-g^YkI zWCT3ZM#A09B|0s6rJ$6{-NLPz6whDu60f0aV$yJgn_opsMhPF_!WN zP=!B$D*ORd;SZn+e*jhZ1E|6uKo$M~s_@6d+5?^s_bU&0KHUFlVH%Q)9r#RePlJb` zV2P;$(>$#0aG=V&u)-$gVQrIwi6@&A-u_toyayuFSTH7$9W(jum^kA#q!l(9QrQHk z!X`i!LIBD=L*eNmpvv3_s?2?$%G?L4%zdEB+y|=6eW1$R2dd0{pvv3_s?2?$%G?L4 z%zdEB+y|=6eW1$R2dd0{pvpD@s4~q>z3DUus!VgB$}|V6Omm>hGzY3obD+vJ2dYeS zpvpAAS=$jnRayLj#e} z;)=^>UI0<#6E7f*&HgBq54S*%BKP-Jj|om#=*6=YP&`!u#q$(UJV^n?GZaufJpsjY z6Hq)c0mZWtP&_38#q$wRJQ)GSGZ9cc4FSb-5Kue;0deKM(Er#+M?4{+70*UfeKZvT z#q$tQJP85CGZ0Wb{Q$*t4^TYu0CCpwdlG=ojyBxt6k?eMS8H z06i$;k#ctrty7{KeLyKU^pG2VC7+2vYpaNV@ei8x>?)@jVaE5QGrlLC@jdB`?@4ET zPdej!(iz{A&iI~m#`mN%z9*gWJ?V_^NoRadI^%oN8Q+u6_?~pe_i)Bv5T75XM9gO<9pH>-;>Vx9%XuCP^Z(oN15JGOs98GI=y?+ z>D`k~@1A(>?vm{iL;oY`bZYl1Q~PCYYWGf(NjuHY?6>))|+Px7?yVCv9&!X?xR2+nY|> zUS-l^xTce~SDCa>Oebw`I%#{;N!y!F+T?XL(=z!P(bqav$9zT>PhZ@;Z&dGTfhza3 zKu?!v+Ly}}zpO}+yK-!rZ`6+1QJQn~^zcZ+jRQ<9@@sOHVvnrJwn`@Y{6bx&$a`w5 z#{`MMH8SP`hsJc^(3lY%8k2%UV_tA*Obrf=*}yGQ+`-@5vRx6ghf|FSM2tmSeTT+0;?S5$92%2}Lt{R1XiO;%jakK^ zBo^LhJCrHj71##Hgk!<@&cK2S4`G7DJY-cBCW30rL{^ntRCuuSM(r5?#(|ikZ1I?Q z-jKBS$nJirO8N*z(||>nRsVlB#KuA zM%vuZ#MOb3D3XK_*3H^+KTIo(1XN)ppb8@aRTv4V!bm_BMgpoZ5>SPafGUgxRAD5b z3L^nk7zwDtNI(@v0;(_)P=%3zDvY#QJMM?7!brwg%1A&JMgpoZ5>SPafGUgxRAD5b z3L^nk7zwDtNSn3it2S%TS8djwT|lJ@BW>1B_MxgU(q`>sf3tS7zu7;2z=I4sbz-8K zp2;t##~J@K=`r)x*v!TIE&SFqZ#y+SJTc;mrh_H#IXw;zLB%_A|lHDpBV( zLV@oIn=*<83S65|Ad2$CO1{>|njk4&6i9JxKNCv>DN^hYq`0=9iT4Lmq*x%uwFxQ0 z8SdD~jMf<@KI>mCP^U<)w0ca0_YKr3l0B^+6X7KUb&BLutH(rmGeMmq8P@7C@q&L{ zL7gHw*Xl75-eFLuNEWtwOoSI3)G3metsWEMZ3lIVWNNF&M0f>4og%s0>M;@Ci%_RX zHn)0AgqJ1My(srDRxc)d^eDX9uwge5Os=NpR67e;k^)bihS{n)#J+|_*+F5 zN2RCuq%+J3%IfMJFCjtIoO}BomFM+ z9PCfm&Z@F@4)&*OXH{7{2m8~tv#P9}gZ=5+Syk4~!TxmZtSW2gV1K%HR+Y7Lus>Zp ztIFCr*q^SQRb}lQ>`&LusXrZ5 z%v5;wQB_%F2bD#(nl7?cWs!x?$s$`-7TLl6bdjwpi|k;3y2w_QMHXW>d3#b-S!4(M z(?zzbEV6_B=^|TI7TLl6bdjwpi|k;(vd9khbCKm5igku!VL3&xWNj@hr-S{n=mbTih$w`}E?FviVkg~MZl%;LRFKsKsZRSuv6MSR`Bb4ImaGN>Q&jcUYfgZ)e zQaPk7l{ICl98#9bnzB?5DNAKdSt^H=rLv|hl|#x>SyPtEA!VtoDNE&$vQ*ZTrE*AF zDr?G8IixI=HD#$BQkKe^vQ!Q!OJz-2Du~!y$g(J6=*)44#wY7q+WP@%!FYrTE43s?s;*J*eETqpMS&;Fl$em&58XOhp_jWA@gY+;LY{S>)Q$*yn0Da)KR_=?0Bm zH%vBRzFgb=w)@iAYf5I3fI=LVEc-^Y!v^JQ+|?B2w?g@gOylJ4W&7-E`!?Js_B3z9 z-61DFRn6Z%C(ctmmVexq-#+J~*!*HroS!xz%jna;k8`M0<#Ln|WUS{n(Kcg+a=TzV zAf^N8wpR0+=bN|JM@(E121Q)Y&ZuWeHq%%2i4m%Dev-Yz%bChQZgW}uoC2J2%03P{ zN3JkS@gp88Q{-Egw=+L_XNKEbXAERBN03Pt{!-MDP|z*}eJO!7t0lY_q_IBVxCf4>-pzt!ff|3R*xaEgEQP?h4zdpqrk zmRno#7H=Y5QO>x0i6ATFiilHOEzo#ZP0sY~f}1y?v|WLK^C$ie4UwS84n?&T84Zxn zKoXjX3{4W4l511OMsAgMH)mIrawhf;t)R%JTRkQgiypvni6vubiySlY3m;?yruq91 zBe21}6P&kvKwa2?Nq!|oX9E=FTXX+a?gH@g+a30IRfgAhH~9MQ@YS7$(<%PlSME*u zp{nUk{eJ3|U0gYSpfIxLwW7(7C`Q)&ksLShKz(G*cG2Vk#mJhE%25K36x6No+eC>c z^s3TR^7#Wl-dB~%qQuWT6s1zOz3g4zCf8EdUhD)TV*q1D?(U2{!ZdHUL07&IpwyLQDmemTbvygA zy{ztY0ZOY=_Z(TaK)jpo%l5Ily8@I}*B3XoWWIdst2rZ9=KmAo4!lVOvdwoZ0R~|5+El- z-8X(_PW=7i)>NOr3~LHe`lHM`XZ98;{!elRBQt_;@e%A{1n&)y?zNkxF7GW;C0o** zt(ciJ5gaR1qzjYn#&bnBbJooK=TgV7I$4hw#e_o_gvOZ*vSASuUzHnf!(p|YskMSyRVJsuUSztH%U`?5s1zI9pXF7z?L5ywM}4(r|P#92|w%gi+)egyD_J zfW#hlOSgU18Dqx4Sal{Cm!M9By$*vEANFzTq{z@1w!L_wRxh^WR#u?qj>q2hSj7Bs_do%&H%9h{CJL2Imd*O!a>Yi6 z;u;TC9uV;{54BT#&O?=P^0_hJ9{|p!xSRh-8GEr~C2^8m&FY46J-&5;IVmdT#NVdo zH|50Jl_)@u+vKqzdo**j}X9(1sUDcfPBkKdaUOUAzJyfIE?TaoO$eHL9 za4NP6^Jg#3X4=D?8wLHKucb`!R$mKZ!^9_jEte0>pN%_3J1L$Ov_)73=egU9c!-B; z6ff~m&oU9OlIujA5959x!RB;4Snf-3Ah4l({Hm;V*4o|X&&l5^@ENi;MA?MTleV6+c&JQ~&voD+;bW3J7_|OP z#8(5vXFfjWCs3W@Ck1NCuF5EXCa66m;*$Y-Uc~B%t}(KTJ+08v;+TFlHTrzYQ7J zS!yNlJ;{JUia!>}-7d?G`$=+z9!1{MLvJ9zP4Yh_*WGZ|z3OqS;O=f^{_Ivu>_^VY zsquNyoH3Fn+^5c;M0ZbJcXHO!dZbw}b`tiPCs*_f#lr=%CuS)b)ksDc3Z2++GqJ>T zOqnA08CH)}#p|~Gq#ilUhL8yo7D7#t++~evGivDaS!O(HF-KE3c zBG+O11Z%!m>#^Npnv43wfowK*GqF}c3^a;`PTi<=>c(!RQ#Wdzx-se0qF<10c(_Ab z;n#%ndqn&|fGB>*L-jjF{E~;t6z}&?{V5UGd8kbBIS@4g}XKq4bS%hQKXxN zJutll6gvqh_7PC(A_FrlxMNaVn}oaM!_3<7HutnHA~enBV^j?JjSgFD!MIl}7`NDh zahokjgS_e;bGGl8UW)V#6DsYPO4>2Kv7KyEU)rdO_rH3HaGkCevcuLXYJqvd6jQxh2nbzvLCWCu{!8cyuYZ&#Df7G z$eCbo*czGO72rV5L}qXnbft~yVq>@lfS1$8baCqND!u+%8dKnc(-p%H%0bkb9QYhXCm}W zciI@w3Cn%Y_`O&d!V0^yS=yCz{Zj8?IUb_pvt>9pYRzvKmCwtSIMZJdeAnzs^O(!j zt@t+spXu0#%}fOxsb7mKVEXIZs^EE1_z$^aSC)pU{J6~UAN!eJrg)Y_ZeN^ZT%EOE zZT3BQuE!>@OJ^FQ``|9WSPIT$))*m z*{hn<8_L`Pnb(t0=5_*$-k`RG5BepXZL^w8uz>(KE@Fa&Yc<)_9m8?NU^f#B0=RL} zX_8>%u}P;Gh7`PvgJjK+BzV98f{KG?X^Kh))?Xhtue$2T5+68EiHUzH_k$u zb8A#%j${L;C1&AG^43tv%b28AeWm-rX*@a7NKX0<&b6TB{<|WQG%HSH~CCgsVzxxypZb~@TClV0^x3k zLLJPWBx;khkVkAE$(x3}CB;gtA?9)61*;lrX84~V95<0i_p({YwER>oxr zgElY#CpUkX!Nq~Wtxl_{Lszb>ZlM;tyftedMVngORZKG4s2&v&`ik!)mxb-d>K1|= z15->n6tbBF*A+`Lli<&MrZZZ>s|J2({X7?0xD!aPHRYve=&mK0D zv)`J9GPB>|*~6;Y`iZg2$AK46gh`Ho*A^9cR~QUdbf;7QCfi;fW8!>~B6qs_iKbQ^ zD`QE0>EzajM{l~;Us*q9)EMelHYX+=WAGp66l16#TAKgC0uLwgKoLa-t(0}f76570 z#qMHXAI@GGT?=ZZHD|_nXsT7GI1`RI3(k!GkRy*wSIRl=r~G+tjbf|3O#=1yv!gmW7lLBzGk z`KlqD2y7Np6T}n_VoEs^+j($#Dc?~NyyDP_;!$328{aiZdl$8^quHV8@Y}kXINoM`-pL60IsW%U>zcBciCpp;tVM2&|uI9EuOFjKwauKoya5ye7TioA~S4P;u~ z*;iJkxQB--u_LAIGm^;zMLgmZD`hP_RphC+(j-GY{CHxs)QKMw$SAkSQ5CT3Vgo2^ z&xd*1$j=p&r4361bAK;2?uj!}JBD#Whv)mv6Ek<=QONmoEI2c#-hYaI+vxh32-N(O zl$fcPFb`Wg8z>XE32FOr(RZZ|dX4x}q+`eH)z6F)X3?2rG=gXMY6dABFA2p|)@hj;DcBwMVISP45e7Nj?v3;O;oItzb*}ALbS(Gr| zOg~WLB+;BPk|v@+ozwhAJFV4));wmKwuwV*nv_34u9kn9pzC;itCTZAFON~Z!~NQ* z2jHz%!T7{_*pk;*UsDp1V-^4GtQ(_;+D-vqww5^Y=pSdd6d9l~dH_NOw& zOrfXc2_!yq2lMf>LCR^eGxu{TyH&23BoyE7pVM1b%F_zVvA<@{Wf?1cNh&nw_muhY zAlebvXVl^fvutm1fvzY^RY_4wR;9FNha4;!_z0TfkldJIw?**N!)*a#IgQ zio1KLPVs0DH7K4SkgJZV>x1G*-o`jx#^OnFz4yL{BKcw=iNt<&KYx+oT(kWUlodcD>ceeTr66yEK^tcvV9ck zy;B^?VdC@_qnIN7!Uk^LVkY+VhN={4$m+4ak*=&9%LPSNjq+Q(otfTFC&hxDEsIC0 z-{A~&yNn!Ey?ODOl33=4Q<-AHh0Ti@=@Y~STbPN{ykBLC>;tP8N8f^~v+}sUJjm}J zSma~%?DZf>~e~_#3iSkzjvkoxva{=Kf#eXa6aWLF0{H~1!&DW2$|Dwm^q^64YS#D9!; z4fvg00a4uKq4Ec1#N6!%Q~4zkUkwmN(iG~7!)DHP*rIod`?lMT5HEwb>3ufJhJTwS z@p)g%s;3t-!N_2Q59Evus|MFSy_lgmNJ3#j27@iPVBB^Kvh{zF)>|+*SCmTG{-VSw z*_=(L&H zO-u^TNsd849EKb}fY`+xlzJ&RX)c$!9?+p;eZ+WOr@p~R> zPuo|I11pn7_CfB4GmOp{S~)aHX=R12d_)>DttJ!a`VdqYyAYMicJg~f=gJkg5NV*2n?R0025bxgDhz|rpjA&SW`pP^$mWT~ zbo3j(l>p;DwVL$*zr}wGHVehg4pjHV;<#B>Qyl?Z$!+EsnpWuh=X{@bQDisbY2H%K z1VexiAmac4V)H{kb;a$3R@_QJaT@`}EgUI*t9X8wZ$X(N2kds(5ze1|o!LWQg}wii zqWN>VZf7@0KAZ5befF@@Z1yqI#Zl!9!99NTmMQ+TUScm90f+jLT&4JkK!=%a{uAJ* zR{M9=lSU+j6Y2sQo+y1>3jf;ITc-F2fu`8N7_!4qNV`Q@<8jMn=gwlOVVSSIPVqj0 zcE`Ccp5a~MF7Rtf;c-_wM^7+)X@6H4{D3I#E>Q3nvoanKlZFj{>!(a}E_1(=w7IvS z{EEls<@_qfxGM>~YcXIi zNx*ciI9$3`96wzv4ympc$5_`2!F7@hxB|Sbpks25A?VN=L(ri$hM+@>LFXt{8V4-~ zeWr|2U26B#=vng2gE3awXAcZjKBBG6WMmwaMD_5@pH z!MI%(EHptC7mDvk%XK_fvMaC#Gkr>E8^uPX%Jh|jPcjW$(_(62i!$FKWs2N)&>)+1 zx$melMYfWvaYIVkIx)={D<=wBc9g6J+~KO9XQ!h|Ih!yJu;)f$#=`VtFY42e4dmUL zu9Y@>jDBD(_Crddt5|^682nJyb+<^x@xbk6Y!pyzVZ@uzw7N!GT_de7xwW)Wb1wST zbiIs(-^&#zY7|eB!z}!)(RDc!rv-3D&KG(w3CCU(9}Ri~ITPRZdYw;;_{*Xm6C6m^ za@wqwtxw?6&HFk7eDV8d@4n?2LjQya+<0xa15Gw()@9(Aw9+%rV06+c_mpS9W>6K)sHgDmDo zWoAyTs%Y;ynl_#Qpx&9H-=^u?kL+#zqdvzlOX_%&Trn3ZvJppMP2$Z|;ZBMW+EYN0 za^Kj)8YWe;d8cb`&Y#123Y8EVscQT@SrW7}{wHf!f?U?>H$kSeug!m@Q_LV{ckm7u zD=9^W^RK$uwew@xpA)2aIEa)rn`53gvteJ?PVrMx%XHiaVSq37H$yfsGjryDM)b@> zJc=HoL5({_(>%m8T+;=6^v81EC8e*ID`>BjGeM`#!)PPldz+^+sY&+_OPrZMXOtSQ zw7*fu!fe@JQAtx0mctWIOjx$zOL{_Y#u{VAg9+SHQ)K%`J);;loNVI55_R^Wvc zP?rk-Y{3u7=X-bf&-v;U|4|_OEY(*e!Rs*aJ3+H4XX2RvHs?&d7{HdCiA@0fU-yNp6dxO2 zn91)2O^Qzq*JSdiL6hRpa7`vR1Wk&+8?MRZt3i|EUxsTkIbOOSjik7pK+*?Hz9DE* z>=p>0!B23%w{S(;XQsb)7R5FGSF5}JPQ)-Q)HCt4WM^73If2k^E=o%#n^C=FB`uk5 zs+*e~6PT@L@n50+Yz>%|;@%P(OtpzQ6AJ=3DQDu808Y-C;EYA_DSrCiD4H-s@t#n) zlr!UTFQH7cFGFzm zLT6%WWO6To(ViAxhTy{CWtcoVlo{vC5UdX`!(>+|Gv1dWSR82jUSWhmWd_?-(rR|X z1dP>r_{o}?1a23F?eJ}UXWC{HW=HsP1Re|Jq}yyc!t4xRj=--&Iq5oEjxamKmm@G$ zLIgjh`)oPF>=a*)!2Y3}bfGOrm>uKG5jZ)NlWw%-2(xp1IRfW~a?+Ky9AUDJFIVIU zBij=>_ZjFm|FUyA{U%^9X{`}hEy2bI3>4Y1=Hqguzd0*?RRkUiRZ(PLqbh9(aI*TU z2>c>cMUmZ)sdtcX~T&`;Hx6g8>*tnp@gbNA7L^W;t^)j_sRp3Kk<)q)+zqcA9t&pMwTo*9858k zOnx2B`M|P2^HwVqckxzxD6+cIp5{M%HeQZ?|p7f@?$ydmS-d&vVmk0CrOT*}cdFX-iUwotM6q}?*?9K*qCTI>@ zJ72#D@`;$+ml(`&4wjABY#|Dvwkkg>V|Ad)cQ3M9|;geHq}0o&&2nGo-q{vJ4@Q| z&M>Gbe%3=OBe3LRuU4ZNN+u)E*k{S*zGQ_WOO7`A)8bVY|BTd#pM4z2nJCtoPJdeh z;ZJMzPJP1rS)+KnH-xv8FhN7g!J?UPu?5q?vE$fl$328J+@s=v7&e6|-|GDII#5ju+R5yQn6A_a;SDNyV^XZC;7W|}nKNh3$enxd zhxRu!lgj+_zdHldADHwqf_bV7aGyWf9`gP}m^^UbXVq6H_^_lyM=#eWtw1yK>%&eT zsI@-Sc8SzTvp&SN)Q3y{nMI7{`lKN3XJ(-f6VPtv?QK&Po@is5IBmkJADXbGKK!S( z%u89^e+qa0^QpyH5}OZvYC>HRhP=&h=$|}1auemD{{N(F``>hJz4eRY>#WWD5oTRb zxtQjGt{F&Xs(sn6PkmhPLwy4DVMEB>;(y@DKYgL-fBJ%X<6P&bYx-X+y&ZKhm$P*_ zwX|Q}sW<7K`Ou_|^`YKwq^u$XcmLzk5oizRr42J2EAS0Hn2WE@?p6ed8=!G5N2NNGP##)MPCzZf6Lvl zK7IFr`&-thF+X(S#`-W068}S7fIid~NosEGm>0WYE^}3&Xl`>5Tbcw@0Eb)gAef_J6|C7#bOzja`+8OIC^agCRGxXLkiv6Rzux@wMfhf<1 z4%kv37W+Vr^kJC~6rc|qf1pPHi;f{jM>^9eHiR)B(zX6yq%)1kMx~?O54_&?e0_ZE zL(azf@azW)(1$5MjFXMEXX~J1lX+K(d+Q2cq5j{Q7yB^teIMr3NFQn?%we!TO!i^s zjr8F^^$GZIeg6AH57K|NCOT-EVNf6H;Qz1t!c%4PW{zUm{HKjILwzc1n?)bD{jdOy z^BE2O6Y$^qMA63X zy40HJW@tV^ubZxRSwr4@hP++qUt1xgL7oqzLQ8#E>;pB@hkBo=SvGz6&(6Eif9vv} z;hC+F%z8BS|KY&OyF|;ElY5NSVc8;QIYd-Jm^<%+dw0B+Bqn39(>(%@E7rd?-%UhRH`$@Lca{na}fZ%EbS@N!_j5SG-NWmD1sw z?1$2`0DbuZ!~T?mDMwL`ql`!*FZ_xR)9y(r&s(OJQokj3N(Om8hw>3+CcYnB{`$}V zf&7S*{?w=Dy-og-yslj|uh-YpbVpopiGtBn>lj+*uL^y%m2UT_jPWW z&t}Rklwp*QDdXpnxCE3*DMkPJUz=H*uONRaPFb4rKc8O4zoXnr8RjYX^ZYR7Ny=I= z3$;{ad{~9b$U(n!;0WR zYR2a=l!vRzAHpfU@fvrXcr9=6Twiw~n%8T*mioFnab-^Wy6e%rUgN$cUgPdX6R&Ye z*)M3^lW5{KPCuC4mDlM_wtaX$lv4Bj9ZkNG#2us5{nI&~d)rq%6Z@~MlqI6spOwX5 zQXXJGbfk)8zE2qzP5n+2e~$7pqgkHc$@hd(^J#g=lV9fg&;KuZ-8;(I+2n7{DZP3Ad8IsR zPh1dXT;```5}xbwdS5@2*UhI~NcoWR9cAoj@_O_2%qj9I`e`BV0%+(j8id4aNeK8deO>8(Wp+#A>5-y12<%Mf3gvNz=~ zlqV@KQF^o7z^mq$zto}(p!CMK!nafIraTx;{0Y2p0m)RHvI3 zGjJf3l`^j$77C5@2+A>(Q=*BVi$9@!p>c)1 zndNx`ygOxY%E8gZkH&wcyg_+Cn)v5<(;_mzR+Jqny|wCz|4ey;@>87L`mzDa%oM^H;-HP<~Ar8cqBTJY6x#l$kO&r8j>Od3cnIZc%5S5I--f3tBZ)Fn=A`tbcM9RtC}&eHi6(v}9CK-WA4)lrazZrmGx3L%PbuF-6CbCX%&{|N56b?O-uev3FHv5jyc13QpLjrd z$<&Op9i=yaH~b*wQOYyX#9zfLRFF(nDC<&s^EbgaQEsCQizfaEp0}c8Dnwa|(wo0B zzKn7u<%VeDzsFNml1%9-vr~HW7r>`b&ZJxvP5hVYl_gUg%A}Ou{AuyNlmjWpMH4?A zzeRbE^6zNk8zqoAddt0d!D{mN5|rNhX`FttL(jAHJlY$taibE-U&d4FovRg?PxWZ# zr*T@&;PnqEwVs;CJOA1LkMVDb?~zC{C8S;{qN$(89U)%JqdeEwWr*hW8n30ku4rPJ zzrHRv??4X!2`Zy(E&U0c8MXbIL$U&7CEH1Q%1o4b zDZTOM=m)=1?(&t0<(${%=R9p}9`7sV`77e95nq$C6=iqI{*>M)$m>EWw^8c1-+S|C%P3NWvWu@g?@lSt{`o&`CV8BhGCO4+ z%6}r|(RZ9jZ>Ky#nLVF3Ql9UPDdj23bCi1B_cxwDjwNwr*#5j<->Y9Rq+i6NUq<7d z>jm=Y*YJ72j?f#whWTx!45K_i>5bQKe$o1QzmmiIT^ZijcVN5M>zjIAQ^yByynaY_ z6WgG*asCt$O1d`iSVS4*9d)9i~j5O8#Dk zQuFAK+IfGJ*qdK}tl67CGJ5$S9$BFzeS|Kg6{o&cW=D@ z-q2&l5B;qn{c(G5{PFZ6rzp=+dVjc5f1}X*`ooNC4OovlE?i)o@Wwv|o>IP`eD5i_ ziOA6#ld{K<06)rRlzPLGzW+p;4~5=-lbP+@dwb1?KpyC=B;OG4y=lZ7uV3$cmw0_Y z=mF35Ue4@{3x1T%C_7Mgq4ehezdn!UWOE{hvz7cSI+o+>v>X_f$8hx1<^KvdxBF&y zoRFyEV>+QxoUFw%uW%~-JA*uq<-~S^qx3k=_MK71nPp0LM}xWpTO~r z$5Ge6{v6A`v+om?Cvsj+XEcfwpV)bMBq~qhJU+*$6)8Tc^D;^|vFD?T_i<)bjH;cJ zJ0X>$@)VBaAC;$c0&7I&shq$@QF+uyAh8^_+#LnCEsHgkN|q&jY1!o_r?rjnCer1^&qh@%H#6d_H-8 z$D80^;pJk=4D;jL@Xq*A{3pCfEQwDcg>wS05?kO9@%H98+denB`{6cz3ojo};&pxf ziBCx){yXup%udGU*<@FQnRI8E22Yem{2K9j@#{2XHuKz0HSrUDBz~l@(;mNMEh*Q@ApWTqnbeueW z@Oi_!!%_orTBc zSB|tk_AAluZXwfnw=iuXTBHk#p9YoF`K78uH&Siad&)9A?+V3X&n0v zpf?>2W|V0d?+*2n~Q7V>t2ZOWWGJ4$v+?(9~F&HjK*ghxAn=N zTpCQr?XU1!Da5-|pPl$dTu(FXO;R?`9bETEx9~1}5@S7i>_re8?~_XM>wCA!tKzv*OCH{fbz0&r@Cn5C!>{7gaQn5|QLW!e(fCaABK537{4?^j@DtY~{`Yu4Jg;;|Cusu7 zv$&|l>t}BA;9ZN0pCY~#UZ$jY1?F2FABaCS`!hSW#k=vTg9pOS0K92A$@852Q}8+! z#1G*sa34M`v5!3VyWwm*oWlRW&)~Z&OCJ54%O7}#syOlX8w+ioA$S`+J$?$$i~He! z!=I&Z{Z_X0DMO}$!vvD@yJ?o3> zml^EABN~a%A;0}D9Gky?V{u(CPw@5K#dW`*G*Q&sk@mw4gC)KS`O`%cpFJ8c6pd^C zwf2D4Oq$<*&xx)7J$x1Ot&PtZCGj2bmd5S)AACWs1Nh*5h<`-u?bbAh%y1x{9Y2h>CVw$JPYQ|eY@XZ6AJ3jk+#Y}1 zsWBdC57f=1dF<=#e1FI%zMlNU@J8IVecpYQ<4na51W5ca@-H@Sm&>^*>(QV1ZNwLT zChbrN{~2%N@vC?qd+p3jY#z=ZZvKQ$s#J1(C2PlV;+m&+zW&VD45#jt)wo@*Ufk_{ zOlI$tAU=?IJWf#6C-D<$pAq>(v>8P^@KQU3fhW1-L)nxIh{&JCc7h$Id-gdG0 zDg0Bs$P(hoGZ7DMDh=P9_(k~d?Zw%BI$z`S_;jT`PPNk>+^@XEXG^gIkikR5q*Po@Fj=xJQc~;1uomF_7ma?Gs_})%i@R&&@ z{yp&r@KDCRauV*G!CUgFl0wAa$H!k4ctky8n;n6z|G;bFzY(7rZw}}$29?6A+>^i_ z#J9%R*$W+JnveIwD?bu=f`5h=1>RDh1^6V!s~Pn3jd+?jlHe-+Aq;;?!<3*M&f`Pv z1r{?Mq~G2#ZqHxB(why?OgY{E9p^9NE5(=iEaXp+T-xX3L;@Z0EclN}1$y8`jJwwd zGDOZ_5% z{cxaN@2g9Tr)0hC#J86fA4>d5Ja0qsrT7!PGUGr$<{LYOJbCal z%_aXs;!EHa8Bf;X)s5SB_D?PCY@WDN6ZJHay#smXumY=)X9#{8?}$&wOLmg_+`~V| zvvwBOcOcf_rE$G}xCifr>o|WHpNm%~|7H9e&lViC@5{;koh7-6USuV=??JuGdd$;AV{@Xo!(8{)I^&3Gex6&|~f#B2RG;)C#U#P7ym;ZyK%d~9FIV=mXblfC)Iw�X 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²IX|K~*OFQfrG0;#G$;Q@OL}*` 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 z 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 z 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 QY1LhTS9Pc`28mz9eJH2WpR| zDse$Okyfj2=l{wXu+L`Rvs29*c65Y68Tou;lh{bJafakjXhq^VI*v5+407qTELz3j zv+?wriE6|&*M12FTbhZjpTLnLp0vNw%;2<5SL4eu73=USUwK#HYDRN-^M5|4dHc+= z1IFf?afaM5UK}HjkLjuK(GwPWZdLS@;YC-4QIA!rIIi^JxI%E;qHq-0IP%Pxsk&qh za?!36RJ%G57wRO994%^VA*C&pG~NCol=d{I1-9SEy_*4vb#b}d3@Fb@<~X!Rz_iV# z>qNpm3?&Ypik7G=%2LI_)2|N#nanB?i{C;KtSu15U*`WRyqE`Pl&~H&39pLXi{@#PpRPrfL$1l1D`n=kC1x7V^qKYcEQWaadifvNGS*nU96H&!KC{1}4x1b7Y zyRPFLtB$|7R>!YY$FE#Ri`21xxHRKJs^b=`j(xd~_NI=DtvVK^tpm>o&gM$KSLYP{y&Jd_VG}Dl){%mj zoPe%nt-H3FOYA9g55mI9n*_1X2BYoV{%!N`lJ@`eV(Ep|6NqTBILZ?>s{n3k*gk^4C_btbJ4U1Va8Z^YjI@BDUoJs$`eAt9#LFr6E6zANRa?)Ndq3R2;4%6 zv5qVu+~7R?G^vKr`%0QJ-7_}lvFf2Yzj7yw^QnD=(>@yVnbsj;gf!$-1L=H^1_efo zl?>ts2iK~j7qaU`UUF(`<=`ZykNQ6nC zNEO|q47>|0=x+cGVd5t+qFKC|O}}q?4XU&cm8AZLoKrNOotDN9!8Fo!SWM%bgiRy0m1$Bm-h$jf8qZ3l@yd8Gjgh9y zpbA8L=r#TBVBJ`9@vYW)`1;TuC4uXQWby~pC7a6Yv$WTI}khdRRzgrX~& zi*Z*yiIVTGdLz-%!g@23mmswU9F7x*$5OlWL*GXoan>2iD&AyM=B;aI)D>^7uBo&O zG`PBKySg(6pQGOur>U8Alk+kDG=&XM)GAZJJI8B>dS9_S8&!DTIUX>Cy3Sq@ne5h9 z1jk}~YP;E2+drCpwY@*sU)u(ENRQ>bFxlL5>Ye{6e~{g_kwD4@1bquZ%!LzMG9t~( zNxR^*gG9$VoM2u~dKN(u>!swKnCmnG`CdxSC7pvamg%MB5`-4{-N=o8HE{CSAR2u)kjz^(Bsc^FZkwuIk;FaV$)MFC{0g z1W;_?oBcIsexoYzzKwP9K#>>srR05);>?H4yZ*wvH`x9HX)yT1aROV$C;yZp<72S* zCh&Ez`-wV^03Too9QU*L&wa{2Yjlk?~i7j%EB6{E<<{&!ReF1HU>}bLI$DfmgJAWi8kF({l9Y8v>kkx>5hauF+|V|9n*6XLYjd$MDd1G8NH0IzjGsXy=s%=DMi-V z2pR)R|E2o2?QzmB;N=CJ>e9%z*bnt^3WP z#_ev%D%%Cfo1-N}M?-`dPl3wr1Xq5D_Kj4l`Isrqha$xdn4Ti?0!DB|snm&*`%T?2PvDbfaQ&ZB}_V*-IT8xDbAV zbH)iI6cl6vKllh|X>F8{VFz$G+GDX1r<_{KDAs@{^3?n0wa7uC2AVUXt8sFv98=xm z8d!)pB2Y?U5V+<5>X;Su0~E%BK*a#2&jYF+1Tj*qV&vclG4!hznHIB3Hkc7*|;Dx zLNlUj!Bodc2ZS5OUxdG!iUx%1#-EKd0t=P8G|y-J(7Ho#%MYrojZ$7Qm1|Nn#tWne z;z)`EK@*P|aUu^XwbX#*{nZTLJ6z3`3n@*aLrq1LOn1$rc|^%!f%QMhw_Xr47J`~T z@1B*F9bTJ!2d5;B;0+$ zU6>TbZUlv0q&8}pu^_JqjWR=stDsHs)}$! zcJgg~N=goBH=7k9dgG~VI2<1*tL#)1CD+B7us=L~;z(0btV=umEhD_d_%EQz=za zY@n1QD5Ow+5EGYEh&e7{yoXtbXYHDWmDSkqXZAIC_ihn$QDUfv2IlpV77ck=gzH@1 znd8%q^Uyl3l~Ow(6}4tH&aqS5BbC-e8*h`;oyvCsY&JqMn6+jlujk^Fv=fqOOG9$B zNot2AOop_AB;nk0He4YQ%FWN#!1dP>Trr0z({<{BxfGbQEJU{G?`+zO1P za*ctOiR(hF4827LCerK*8cDLiIs>rf&h-N0699J$OEoHk)SrB=NPX9{_3E+KM5q`p zkD@6^j6**7_Q>)-Pyv$a1mrvl^3-Z2mru*8zOUx*O!5%x z7E)xy_&Qv(o3RzWs9*sPO}F=0?2l@p8+3e#MP@gAQ-Gq36O@8(MHLa6!x77fYOsq9 z*!iL|zgNI42bK1E>Rk3m}h6tzH8JFX`NmEDT>=ViJqqxad1`Fc& zM0EEIaC|DXa}H&Pz9a)t%-;(xy=LT}6qVmH+ll@e;C7y>`$$qJlaz3Nk8h3%Dj=L* zBnY+D?`Krq|IP9H;i-yULCu1Fn6kb{5@oT0C*jB0HJ_^2bs)+}#YGV8diSJcP&=qU z7Wbp2XaU9zw^SU&ddYZ?$X8^H0~x*E#QtiOz`-}W;1dGIT7DY9yhy4jmpTsz;m!8! zg_J0DcPElAtHx?PeaA|=)AXIU^1Th9M0hP^A7|QU_YbcPRoqXCV3m7?n}k#GrE~_V zTKaaqaIXU)etkF%5cJfM2jo32M;$YjWqq~t0_|5Pm5dC@^??3GajhHe#|FSLKR1#D{)y9 zu%ermc9&M)k0Knft!VyT*}f^+HxM}#I>z#k$6jEgbmfPrfcDXp-GFkmu||ttcj3%H z6pn(yzA6u)2_=uSn^vvP|f*+r4zxykm`xcaFgye7MG32iesLgEO!oZ-`Baj{s zpt~kg{whJUnSb5+y5@UHn~1E zd@T|hj&sqxJA$q0Q-gWa3fdC~-*FGQu830jX7cfrLg#7XkPUAytM`6DZXjkP999(h~D9wN9=C=ok!n1T<37I6;Z@)DC~xqHhFE!>a45@ zd(j_X;SW3$i1ov~tO>Z>Yb}NADkiU;a{V4?7<{S{2n=p0C|x@vukl3in_!8CVaTTG z9~K*$vqN_r$Xd5{iPNE?VLv`MV#>yb$7ke0xhon5`7@>hDcv^11OVx!7SeX1J3c@b z3NCTFR5XPAWg8eNR~UphZH37jtx9&f`5LZZ_lky&{tB8@1*kkt1>0Xa@zmQPwA2vc z*H{e0Ft-WKBTaHduA^BM%~K{&@Z7=GKAfhJOj|n#JSvL3F_BDVL_IMoua!n(eC0{B zQu5%NMCJX`(2JF{&&IRIFkV#g##khF3RT@j7^65}9ThO%gGin=MOWjYiWLwx{*p-} zO`K{c9Iv4_!`PF7#0=_$c12M|gHS}Nk>$>xph~n1VoyilHso0-vcpZu$MknL0>D%8 zLG*I$XMJz^5HaybX!~h*&Wqr+ zQ8Jqmg2Uet{2j#=G?W%xu0+98xoUyuawxN-^`Wl*;hM7FO09~?SgsOd@@x~EcCyD$ z1ELnc4t^c{HsF`i>+y>YV;`1g*Y%-_L!rqGg|G3WKpT}sIq6Boi%9tKiph^>O&LP} zmdk1^=Fj6niKc?8YEYEy&y*-}qRRE3PVydNnX39(mOTA+C3UxgL>FZfu}lnpgNP|V z#sggky!B{O-T3ERq9jq+bNhOXFV)n5Nw;Yl>;@2Tz$>=p7Xwyf&kj4)jqhRDB+7|- z!qnc>T9W(*SViy}LoWSr@f)}};_;n&S`MNgOO25aUL z;)L@HJ5Rs}RJ4yatH>%K$wgYWqUjpZV=C!K!6Ht5dP<~E% z*7ERX+Imj`kPY*f3f#U5t}Eam2RiZ~93rC+lIk(y2k|(Schw(h-sxF1+EiYLQ4S(o z9ES$is?|TFv)I#nzUW|F^e4@){*Z!I<>%u&PIa&S2CByn8gpk5$c&Jh)k+_nf<6#E zLM8g3>M$e%2OVlr8qfW84JUgC9(O9fP9JJnc8c^{yPvomulc^^`a%MwDY*G1Q{1s?ETAOhG z{x$IirwF$eMe2&O;dQROc^T=T0IAn^dd2 zpiU(()i^&!@tq>6n}niQ&V=zMqu zfKNDAv#@D7%-7Z?{XX7<_VVuIz5RXP&f4*N(7pf?8q~{@Fw#?puU|`>6jb7M>QqgM zKq-y5p=f&1(WIW1!yY58QZU4-;kD+`ve;j{6OYETX9#0M7U{C`=u|=hle8rV;}Qp6@R)jgn%u{kwCp+`Mtwg&8aM#M9cbrk_~~$D7^qxm zl2?omdVM9~j7By$icTlcNjE;Bz*0C3S!(DF90frV2EcJ0oz)Om-c<-!15H=_BO>jy zpcp}!Q538Qox)?OaLJMOe_)+{1S_(VrD(q+m5>9Eze^B>+1jg4ae{*NO-`N|Lxc*VTX(QQt_m;{l z*YGM#0Wq3LI}(>ODh_)Gc6#@TTpqh7`=EBM7~)IAGEAL6(6&-!3q<~8k14pEa31)a z#tEn!HJNJX0bvdsLB*Rql!JV_<2{v|XG8cfd)8=<1P6>KlzJxcOhxKTC-}|;KK3^A zB=Ah&KB~}-DCC|A9E8>~*LYp9^)rE=4;2peCk%mS0_Q7;JprLL5qwBS(S5_TlnmK{1+rR zBjZ_>+i@S!cJAZ<1Lz7Qxb7qpJtFvRb5`Zjk6eO-_wjcY3cy*I<%4JwUI#TBkCxE# zAvd8XdsrrsYvlzMk`AOAf$#6Pl_Lvn=(9x-?5tja9V7s#+jhG>S( zHfL3iQG|QWs@wswG5h$30Uht-Kb6|e276pC#?sutvnm6qj@ZECOa&j;31__f_+RZT z^1>r7#)X744k^wqA$K3Yo(m{@xh|VdcH*UEgvN~Ado1d5crhwR>3%e8iL;*=0B0%6 z8C$^Rl)r)Q?jPO=51;S<==h7iwkH4QC@Ei@sa@J6wkl}we6DOl2Xs987P1_^S z>N^QvE&_CBq*S$Fh6#^E9LcchJo+-gN zgE7gS68<-iNiW4w5a(C2k{n@y+WZ%eNjoo~0&lM|!@&$XrB6(`AHS;CV>v&D{imC> zy|rgS5=+4=u=qoJQvS^(JcQ#tGBSWP3oWLByGf1eFMVkw%_pT_FiOi80$<1)+2dI1s7bilTjV9-_Po?VXvk2CKCMniw zV|vZSK<5?3az;Mfomu4cAztwe13w@w!s~A&Cj!q`s~92TiYO3Pip4~%xVzUj|0`9O z$c_ltr2ADZQUfN3M$-k#+#egu8Fi95N@^St?LB+iddO7OvtGHl55%xsEUmKTVh+)0 zq^OhgIC2B!;(h@7UAXv! zA5B| z(LF=&9t_V;nC6Ug>GH}qVGOu`U`%^&+;U}&FK+pIHqmOwE%!kcs*7Sd4-GVCJeD() zKXiX^t6}#WAdC3l%((`m3jRbtk(-REL^XV+K#zPf4j{`Ero$2X;OnDrfj`#$0N>j9 z>^Yai-I)1)fGj*$wViXW?~YAF@Ox;95M0_v6a3F*F2TWbuA5iMC8XR9(d20HMp95QGqX3X)fN6PowycS;D+pMjoXoOI4oNa z)G1agsXb9_SHiJYnAF!{Y|&565%N@&-`H zB-G6)*;TK!Xim&4+%@jxU=_s2A*3U*q9M=A6Hj~ImG&t4<9QK=1}PUxWdWMgg?pnt znuGOBY0j-02@PqA6<`v31uiyZP`*N{i5G-E%5^Os%Dp8j8VbG5%7YA%V~pKd&HIL` z2El8@`hZ@XkL8pP?3@*C-wrpL#kyUIzp*&k(trXBzCo~fQ5J%a=-$5lXetq!-X5iq zcQ_~GNvNDhU{pi%+P4Ek8);RP3O>^v1v}s$6x@286#PK)4nL3%byLC1tb)r`!7KAo zunYb{!8cXG*{a}l5@srRxK%Kw3XXpo1q<;H3f`s)UZM*A@o`mfBTSqom2TD|QrCCR z&RP`5KPWhy3(|v{TMvH{0X?p5u~mq?Ju37f_JS{(ihoe3hgImBbSo~f;+jgWLUUE2ccBoA3h)mKy~2e;(_@l%_+3ObF{FoEFgb;) zdLOrHEqVk0pwvxL)kV~(3L=?G{D2WbaUxkvB~EK3;_wejoGK-bpb~SxRV8Yy5_?xC ze^Z^zt4{7xo$Oql>{u<^RQbGs(Tx1aO*4{jTqZ zv7GmY!bp7+sXMqGL`G=|?>j?mUVpn*rvO%`9tu{E4JAE!f)6V|FCk~~-kL>Mj4B&X z25IBl@Rn&h7VCS-A>uf{@t18hc-hcnuNgIppqDFX3(=TS*TShyIM1pqvz9giXw*VK zTGSy_^%qo56h#ZW47_CIxWVPefp?aM-B`#P1{GOwG(Z;}g@1r}r@n#44m%yDPF|l? z)^Rb-?~*x-@h?e`h46QT@E956ql`(vWmAVYb5jbDwSpE z>gz#6&0AD<>G*4igcAXazGnYe?`E!nJMj{#t-;eY^dE0Bd5NGuJ3uWmA*)b@PuKQA z8Xu=xnNPuj_fV37pC@3Pe~gvBhe^v?Sx4kfz~nnpN4HPYMmv623cH$)@oXxYwpQ-> zd!v^2VMpf1`Da!Q|HNLx&(KJGSR{s)waln|j*_GDv?GjhWh0u1Zz)8J4cEetbN&cn zD2i0}L+2nnm0vGc| zQutyi%v;uCvRN}0Q#d#;)^`=WK;rMQf`HqMSx8HHbxZk-mh!3glfVR5PH?ydyOAE@ z2+ia6%P_u|VuR==bv41)9!AV%{&+LiBf}psfZ+fvv6zakI+EGb#GkX8=_ghxUl3Ii zR{(t@Kn()q(2vS_iPo4R>dk9;0XxR890QAh^NRoL00SMDn^f%K0Zu+Xt6uC}0@KFC zld!FD`ZDF^`Knn6Xd|LU){k>n;|)CC+U0r3`9h#OQNCp^#R6L9=JLOc5sZ!z8a(x4n|?a!p zb+m?eoJA&M%avMP;0>5zM;22Znc+{tSyNVYG%Vr#b6+|Kgm{m;=^k!$0mhirsRp)h z#ArE{J2JWc7jOrTB6q}U=Mo%Ns%UQEYo5g=T{aa1%F~hZ$3gOJY&NLILdOi;2Rjuz zP75dC-t5;gFZzGXeG8nG)B68RN=3{ZGO9-Z6tIsX@&D`+c7E-u8a?%+&Gw|NrN6wC8=_ zwVw5?XFcn=t!J$jc^xq4SG>T;X}qhfPXVjwJ{Z5d`7XxH-I8g--dGOiqwFStP6$1z zTg7W*;oj};J|>}WRbPp9^TO?_PG$*j_Apmp#;uo(s{ zbsmEb3rL3rLWj?k4oBmZTOu{KJLqtSScXWfbh19P!Ml#x}o z8U0)y`jP!Z3;AO(Zz}nBEdNqWZEUB=C^`nLqML`Xa>pD!ld2bGS0r%{9ex0(CGx^{ zpOXT4F|aL_??GiKg~^quuv6)^4Vl0wv%WL`s-qWGQv72^(Xm`>3dTTaYS=ro;b+-5 zn2bng476Ae*ecS*(Ul#e7cLJij|?54*S8 z!+|tmf_sR`j@f`UkuXk9^>p#GAA`Htvo38H2ZAa=U3^K=U1`w0HV0ii*3-od9ajh( zUoT(PYST=$V^Phu^+!N7SDC$R$V!G}o`X)#woa=@6bi+!sG+rG+s?`~h z>mW-@n|3G~f`78^eU0;|DHHR%sa?_Db+hm&<6Jmf;r?_G=FB903;xQ_;W|XD5IZ0u zIXJ8=7dQ`Su9hSC@VNk=$zP(;KL4trx&A!7mm1MPN=Rci ztUG2B)^mR*8L(!FjR~=QOgc7-$B5-N>g)gYb?BlT!2nkP37w*;1&y!1LlB%-GuNW! z9U|>{ii6ilF|;?E_l{!2%VWj0F|H3v!c)}%y+2?#0MaIy=2^wjdYP}xj9QGLmOYSg zWA;!(PE^w~cyAcxtnk=|a?&zdJS`fT3_V`1YP@7%G%n^9cF?-&nR7&#;-2Z4@}U*6 z!WFSH7R#&_`z};1vtrIPgz1Q7liCetXZjQI)NFX{p=F>L!wSB}>*&>5{~mGV-* z(&A+q5#W(h+)z4!DxmPR*ra73Nx$l39hFtqOPX8eX-@h9Zm_pZzI^cpo#I(#yP_~Z z#Pai?v+ikU9yv;9Jmj^|&VAo!CN+$bk9Gn93BzFcW)D3rZ5Bh*1uIn#Vmoe=ax}V@~ zM^5!@nu(Kr9;Z@AGN*@WB&`kFhE zB@xEvma>aB;D++oskmq*zg#iB0|qnRwGb!yl20z#jT~w3mBn1ulQkC7EsM@wFMf}B zV$nD~u)*q`!I!2xVkCT6U6H}?^39(}uNoX50z+7;#uQGhj6knK>kH`;p3CO<28fv88jeq4 zJHFOK&dn$zuwx6Y`jm%pl-fuH$S-bSGej`PJM49!%jwbs^x(AZp~PqcF$A}{;>iXP zqcdzzB}Udb9!;;6$AG8?2s@ZcQTMi&>9{t8&l2s5)*&LHTyrEFX1Xl}r#{_F3u_0TPy&jYw_=?1cElb!a(OMo7{3!%MypkAZ48-r+Q)#{ZZ%j-0;@0rKjdFzF=xIXhR#B;VvY6aLa27BuSMo;O(}9KiimjO=>#>I zbzcKYY4O^O$WE`5R&~8W9CSizMj)KZ*bI{pkrIn7E$r(f2eC+e1gMAa)xdWCV7iq$ z_V;YrV83SJKS?DVRRB!mWdy4#z;Z`5}XQh7e)u+LEhaW1oPVf}y$bnR!rxdYCzSy*-yL>Km@ z+Z3IfhaXuv@-S~Aw1NX5$N6|(CqE}bh_jNXX(V76%8rNq!+uq9@d_Lp&krmVmRJ3Rz|eEOuf&iWNPtuBLib)EU0|NHeq~u zS?|EtX;rRBj4L}FABh{DfI)O}*)e!g8d{Ml#^AEdx>Jd9dyoa z^9Qnvl?tZvxX_BM($O+&D`VpXUKD4&BCdh|A;>nh2bB8v(*Fgf{~AqLK>yEH<~~xy z_kh;xa3Ly!Hd(J>vSXsZ0!yWp8b|tT%qcB?g{Pavr-X%yuLMwW&Br1d4o0DYQfN*< zp_imkvdI^@9+3<5m?VW0h6j+753w?W(!pSKkDER{a^L~vhF}h0FsS5U`DMh)h@e)W z6i%ve87h>9s&t4JWY#@{BBi0q%(~n82hV;s;-NvrL%bHiFmMIKK_$4%pjm0HMtF!qzd0&q@8MJ@m9+ZdT4IE@Zi4Chl&~(v$3fBMgQ9E5-*F+fR(ra)v^q+wjp2`p!K0_Q zN;O`#t<^X|wAz|CL~zf^++}Q!$})$ zsa7LWZNP;CE^^Wka^bTzA%x5GP7r?E;U+|Su+!AHnX4~kas3|XVq;jA)y4h%0w)&P zaRLJZQr()zx$HpC19Zy{5c`cN%=ZxNQ)`#~Des!hd|yIIAog%U54L4b`gn&N6pppe zR0Vm~^Fnfqmde2KG@dM&jcY$54$}Ee+j3gnH50@@M-er4OnNkNQ zA0hj{eKkaN(FuUz3;FF3ju+&!AO&w+_HsBNV(sB6i?+^wSt(m0=^wk|KEeUAJ zJ+zkRx6i~PWrio1tE<|rs;N(ovZ`jgciS7$<_~IF5P4x&XrxZBbTY%9rq`jca`{7)#kFcCSUlKOsy$@q5TfG12 z__2;%4UD9TgmueD$T6A-U1blsy$_-kM-XL=yI--h^gL|(Uyj=VQeb?y-pCVcI7nWC zpWY(D&1pb?86byq;ULTW_UIy0JA803OV)naAR|yeksmp4-o_g@Q)X;~3b%zh9G$2v zq(EYEB?Zog{!F1{3Byjpj}!DS#2SdxlQPzp&SaI|B^}l`{ytp}tsn)#k7rNpWFV@f zxNtq>c`%Pj9f!>nf??KJ7m8itWd?if$R_D-9fe-ffGo-bX39|yKo^0d%qC&8$GI1n zjYPs8Raq&|n#_1WV{}#Ne=@UPE$C7D#qXWpE-!#90YYMZ-&xJCeO9kkmExseWX8Mf zrsaQ=@`g&f9KY1C1LjN*2}zmL8R8u_=6Ysv93a7}$Sd0#ZO@ZM8ZpK_5Jbc%{ny*EoTJ~~Re15U&OiX=p8&pDOrXw>klyR0UX zOt_2w5a($nWGC)mhREXY*D#6kUbt`Y2To`Vi)15EbrwF&isg?$z>t3-_BRScQwyr0 zA+VS%3b}setXRn_zz;i`vPz?hDC=Z{TC7nU_K2j$0y*l z@iV9|#4L)}b}TwBHe@XYBg`i~{(%32u}nZB-r**MRLFpO#tn?Ae07_ekYXZh1(yn@ zjU*f>gF|exN{$Jdb50WQy6`z}PuNN&hdIpyTy9U(N+Vb%mN9>q9HgV{jDNrtC*rJp zNCTV^JD~J_F|pJmCViv;^fa6 z9L-?b+k$T6hhl>Lvz20hLNUl>hLV{QT-33mGho+usOZ#k6Xjtn00BShWR%42xP}wRZF7&W09!(5i^#BP;l3bF`#p$3ngsC2!Of zSG2S4&eBTsr-X{2pr$k_At7SSV@V0n#+c87YmVv6wVo%Dn<2OP&V!l4MXs!I!!i57 z6KN;=9LNZr6_xWzxJ4uzI?@-1OzLXRIHqn2Ze<++tn}JVaJX9n7(WKmL-q+LXB*6+ zWC_P$RiD$zY)Fiqk{um@J!9zs&cfnCI)L~V46yFJ9ceRTw;F#e{aLR+wfZA5P&6D3 z&5-p#$i(zWq$AUxa3BukX;MJ4XmshdjhSf_8$oe-T=+s~Z_yK6w<~X<0*C1MPLV7e z@|PL1xRfE`B6(cTxMf{mG7Nk3u>4z7T3mzS{~CQoOm~}yzu(Tz@Iz|13WAfTp_=nG zGOD%aShfSomNxBo)8E=sxMn4yDbyq;sdmNIl8)Y_T7ELm7>b^y*VcgaH9nY|@%;|~~_oe(-58Y_Gl|J4jFK!GKApSrhS%wCnUh_|5# zt&a@r^7kN)kv9) z8TT$l*JQm|y#B#0&1A&TYIA^Za&;`FmoCZ7da;U0GttoG(&EV(x5L6*n{oT`rJ>aj zJFBsNh=!ywyVYsYC0c%BY4OC2+jm1L6j>Wh;IK=y2=iM883!24dt~b1FOuLc^ski> zeG_3#CBftsLdNVmE*OJ1WdDyyVzp$8Z>MJ~q3T#@25*}RRUH?4IP0$W!JhcL#Tl3+ z4lZNnPG|yR*<|h3DvN079N7`Q%H+y=D@_6UO+%SeKk(Z5zmu=G%y1ovSF379(9 z8-PaY$v1-Igq|Vz8n|r^cvNR1#N7fOn1~^L;W-)BI;bLDUD}s-#)cVO$-dp?v&AryS3J3s`JS z-5+X}7MVnR=)pE?Zmv?+jFm}Cp$6!D>i4n57Byhj-8;1xQ%ssR(ir4pD2^E-ZY2(#J@zNl1SuI5x@`*$1nbV^^JBMjh0bvLm!rPz)dKNjd zm2!81OaTTG2(Ui0ej-{u4oByYyO{GqSpo1s2!|M*S|i2*2in840UM$zpMn9^fM_jJ z_2UC1QKeGCBSPuGcD10=wZ^>}5Su?Sf&h3jK+ zvZBF7b;N;VxcnqAmnPE|M`@-RFhcobi)tqxxMfM<*ieiIjP5J zo#0+kqg3nqK|QvLmkMPv>zAODNRZO~Tu5Krsjdz=EO4y7_nc%qVimHJqkJrVFaV49 zzwwvO8CGw3Ojx}JY&1LWbrWm4^NN{w%n4?!-45Jk?n2i%o`|K z%dWm9@X@q=hzpKY0zZ6i%>y{liSZ3DtqK6s4F)g+nL9Li%2B-cl|Od|*%B6AZ`7Qp zBs>dmtx?h{smsj_I2%_k#$|G(EVq;@?g58MIZFq#SOln1+d+aiNAj8@J(?rA&5@ku z2u4trjvizo*xg2D+C+defQ=boeq58lgL!c)l(zfMP@x%#4&oz+{{v+4`}*slHVDT0 zShjLc$JtZ6+6Vw#QVt`sL%d`{DSJ#(sYD7#$|Jo2yVuZ(=Y>X3QnXkgI1P z58X~!g?Ms;f@~>G{oAtb`cu(tETf+A1i}<~c3@z9buT!f?{USinswQvQ{-zHElx>K zzYs_yd<%ny`J@Bh?o1hQGge?EALLg6i7m|cLUc+vlplKxj~5bFY>o_TjubRU!p)KV z=1AXQu6&GOOP3YcW0BNqZkD!s2!5S@q_(=V+p1205p8O`J)xH_8{sydN3npjo`gA( zVebtl;~JYj;;?LmaY);?sGnMaWC}}k2j0tRwVH^HrCik(r0<&MYWRJr#?G}(ne{IL z4uaKL>ogeWUn z;Y23uwb16vqwSD@U7b;MncGk`16{9WprK8{4WU4CLwIF36!kTP4{T@?8j|cCtZ*&# zM0vri-lL4n*_i1`e(L`+$$4asO9@cPP-0^+B~T!l5_n}(;*R+NB;V+eJfaP8&6;CH zveVP>5?#LO2z!cooAkW4o9*N@>-h+!zsVhf=aYs2Hou)Z!4c`;e`K`Nh(mtObsv*& zY=n$6lEf$ToEbOTrtbNE?mr=|1CXJ}vnsPB zC@?>k0GzI$mqMH(fV3--G`t@v?pkG zVCmt^PQg9%oaTgjs4Gb-jke7YhlLR%k!U+uTZQDlw$o8%Y(pMIPB^--22%!JI+LtT znshj3_7V%*?T8K`l}GpXVaw#baC0K}LZ9AKu@fc`{O9ar;QD~7fB*8k<~no##ECz2 z#;4vV%TNDv@niKQa#7~9Voz#3Gy`C=S#2uco9*CnrhyHaVMO~fe1U3$gXI)J`HrAD zSDG{**Ce|otljWh{Z|QUNIp5vkJtDaJpj86fRNi0msq*X9WX7+HhJAHEumxSd#$1- zc`WYRgE;7MJG+HBgT_)HAea^12AKL5M^z9)v@DDXf<#07%N<)~gXNEE<^UjO2miMS zyI=6zG@3Cy;1ACZ>W?bKZXuo7j$AskJ; zLhIvUteP}Nt1~MztNSgv3Hv7PHRG(;sxitOdga>s|8RGbyx@?WgCreitJhU^2@Zhy zs_FRN&GOB1Q%v(*CJHvs9VY)4;9ofyLd3oqvj5z)S!x#62hh8_7P$49w|BAIx5y zNRAcjK>3bxNvC%EC0@XjPyA5~h@DFB!u2e6Ln=;~`oi%nJQ!_@JZwv2pY9RZSUT~M zEMjwk8Uz`oQJUV&X{~{_U^z1tNL#ASNUfG;%-RBNb}F>CRQuQVReLVAS}N|YwsZ$9 z$;WtqPsg|5;6WS0a)Nm12}=-%NeKkqR8pdfVT>wiIP>Gh+1AzAMoq~c17lBV zQ@wkm0R)u7Z09hTqR3>HI?kuR;OFo&Pyz_g z~kym=&iPrd5KEwqEHeP5=DJC5L*;nAa;h<6)4krZ^(5D{@hbw_#FQZqq2b9BU z4%G4FSa3K?fWx(^-e;i!aQNkHCk!Hh!*i6wCD+zW(4~m$g2PL|;rdli>e2AbB%lWl z=P0zy+Inh_%it?mQ5gKs%HaB=qhuKTSi|5?)?k#zb5LSsI_y)}U>k!f!smT(9I7*`S56pNT<~LaK%Sa#ydW39h&xD7{(yHS=E~PS@Ve5xenXH!X%K1pEIB3X zYN?IqeNcr?8-dB8cnRwyn(GMB%Ry&Yp@5m+e_bs)b)0-4^;kBS;J%oK7VVzTW1)Yb zkdb?`!O+bYlFPnW>75lg!QyI+8V26G;-Q`ZrVzyb6^*ffm6!)zj_Q}%3Yp zCkR}e63Jil?l37%2b75!!_@AXMO_!2JA*&5De@FEC%{P?XRP$wJ%7iPfX1H7-*CKa z2!1LqoL6h2E-b=3L143RXz>*O95Hu8m`tXV*`uOvJ@PPg619OYP&^vE$@H3 z!~4Fy^ZrbfUtV?wn#8u$x%{;;xJEH}NiOe6Sk<`avF>|zkQlT_n-CwGDiZI#5ceKJ zT2$l5>O(^zX_I8{2erVzSl}AD^%KXd#6vS+o?;|m*O8|2GR8Qtc!^I=kSZ!)rbxuY z6i^##B|bz$7We@x>~iV_k}Kd#RN6EzUD{5?W2UF?xQ>na6!v(?YWcaiAxz2HV|nO( z;1PM>Cc_TvUgU32z4Z>-(rl>S~0HzBVC&j+dzSA_Ro!U{f+qxL6NR=HK*f3 zRIwvnlL#SNHV_c72N(aM*Anbv)GO;X92$p>|H^FGAgCR`0lT-Taue27K->dtAHc6K zTORs=Cvbd#55jY|X=f{OQYhGU^%yutf@J-Z5 zo|xup(sVV(`-6%cuA0WX78$O(1#Q&LwfTAiG6!@Z&cp~2uAD$hWS&Jq^UlZD_u>8W z(1+~Dhtj~l+Q9Cnfo^QzY;hPQI49hD3fe&wQ2zcK{tip55(_9ehPoP1-c=5J>o#VS z;9Vtn@?C5LH2m~$dB4ehZ^+$&II^UV7=I!$z^GU+voa!x@P0&Ud?d*BQe-bT>~#%p zH?4cdo?~N(S(Hvop3qxJyTAG-`UasOGbN~E6zK_AB>`*AeU|EzC zgrRi{G1;mzL)h3sz8@N09$G`bS|dYsiVoH5<~X(`??^Dy8+t^JLCS3v_M23D&#W3P zSx0iywyGwZ$8ZZ}%Bsd65!AG=R@Qda`WU%N2GBON^~847x;9NM<7~AwzGl5G9mRG}1G!~7 zf0na7eSaoRtv2)`$cV%+(tO=19D{Kd#s6Wd#bBGoV4Fo@t3_d}#bBGoV4Fo@t3_d} z(MF3Gd)rzYng=e_*5Ul~(4n%t{(^;uu+Cz|%2W{sAnRS`^l^@mRJm z%f1z(SXu&+f$R_CL``Galc2v_@sFATuI>_%S^n7$${O3**%7zxV{#fObRKXFgIdEt zrJ?9sK|cD)u?lPd#hbivKmS;Pw=vA{csQTY#k+(=32Op=gFOI#VaZ8O363{`G(x11 zwjgA}dd31>x$MlOuWj%E(1RFy5Jiuo=us?;UJMK489h3WJpn|=zhuif4*j@#f|lzg z;tef9M9sT3d`AWLM`Hts4mNPGN`TBXkYOSgYRj?STmoL1frg=;dq-Dw7Q!u-P&!@% z*SViaelJ!%^*JWoNYRQAAHH`MVw2-AI)>wV0FL!LfIu~(9GXd32Z(lHIqV!W<(jKe z?rkJb*_;Vgo>9N2-Bbx6)D?jt#iMV<(TqrHmlI=o$B?smRJeIme)Fil&7<;~NA+kP zm75w6dVyt`z6D(U)M~&GE9=XKSB?%xP}I=oKO;%ZV`ctEyXrUKzO~{CS|{92^#pJAr62&;r|9ag|n|VXEJQ>WUVr4aH8-8pd<#O;k&rfMtxcNY8lhgA`aF0_)a5V1B3T5(P6#!1$c5-T5juMR1Fi z32sXB*?W3u4sXf64_a0|DpqTUUo?T&N0x%@xZeU~FB4F4-dn2RxVj<^M7pEGo98wG ziRQVD@~(N9e6fND7=pp-dl#bUR$CuXnWwb&>AiDq$xBBh3v7XM1r(RO7f-FiWOFF zv!<;wns%O1ZhKaU&f{x{#?Tz|I;vTxRbCnGi9UIB*M7et4HV9H{e0`53l_u-s&Q}$t&J>{pCbf4gGK5(czAHxe7 z;7H3q)JjO!e~wvz_C@clea*2J!su3|dAGmu%9uf(?UznCwFX7%{^62Lqfn_y z=@`%d-dccejX}3Yp=+biwIW9g3X~2)y(&m!@7N_<4a20@3F|`q23rmMLc(3@lnAsM z&iazF>5sP>@(XYw8++84#DO`s3c|NqA~<(2uI_i_@mB$2^7HJ-hws(!X-q`9Cf%B`{(KQi#jy#u7gCy#D__t zJKs^|4e2Afx5=5y?^l5_=i!4`6=m8cOkRZFRYbUk#nUW$J<>x{42y|Gs1JbDT?J&@ zVpw$N&N6rL=1yWpN>hc5Drk#+aUrWfL4ZHE!M=DP%cJW&TE(?5ZpS%P?9MB%w`^Z@ zLHjM(7kvzvYXPPO`=S7c<_FmqO}NX6SR9G!wvGXZ1lkw7CB(is5I@%0D>-gK_C-l6 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 jD6h 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

    a6jo`NUZd-)EjXbnGtJL zzF9#WMg~CS@btocXD`J-A!8PKloSWWCtB4GsVG|(d^z+0TprCbC6b)d6%gr}L8cDs z{A6k~^<-qMI}uHE*6x5AJZXs(zfftM1acJeO_{~NITP&2#9n8!>X)zpbZ@OX-tRgw zku5O;S?zoX~?M@T?0fMoKcK z3*ZS!aI$wKj!}>#X})gg$3^r{Symley-+=l-8U0?R~?Q2

    #}eV|?Rzm48~YFE1IL>G5BQPxuYrbDm6= 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 Yci5aeuey)^VOrBOwF^prRe*B;1HBPQ(EtDd literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/Pillow.libs/liblcms2-035b9744.so.2.0.12 b/.venv/lib/python3.9/site-packages/Pillow.libs/liblcms2-035b9744.so.2.0.12 new file mode 100644 index 0000000000000000000000000000000000000000..f29c7651ef5131e487934c51c6054e602d9e2537 GIT binary patch literal 481912 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

    $3Z@}GU< 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ⅆ3gVFHxY`!3jsdTI~A|} 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

    ND4h*OlY2unYbc#H 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 C`PyLs literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/Pillow.libs/libtiff-9ffe9659.so.5.7.0 b/.venv/lib/python3.9/site-packages/Pillow.libs/libtiff-9ffe9659.so.5.7.0 new file mode 100644 index 0000000000000000000000000000000000000000..4c905698f0d21b4a8ce00bc5bcd4f832ec83a092 GIT binary patch literal 689944 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%0A?429p7HaDj!uRF&!hR`;Vhhn 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

    m{96y;SaR8=~D0xKV;425t_is=KKMZv5O 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

    tbr=t6PL0MX%D_+ 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

    |X@PgZ6pLigr`e#&cMqUfhs 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

    ?E;5B;pReI~p9~h);>!S2c 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%0A)U zRZYaZ?ys{$;63o{+6n&>k-G*E;BK0SjIZKQ_INs=#lnV6{c>;i4U!9lVn;FA3P;

    oJR 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/Pillow.libs/libwebpdemux-f117ddb4.so.2.0.8 b/.venv/lib/python3.9/site-packages/Pillow.libs/libwebpdemux-f117ddb4.so.2.0.8 new file mode 100644 index 0000000000000000000000000000000000000000..f8ad57aac64cd4a0cdd7a6fb351e5a288c4bf45d GIT binary patch literal 29456 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/Pillow.libs/libwebpmux-fe44437b.so.3.0.7 b/.venv/lib/python3.9/site-packages/Pillow.libs/libwebpmux-fe44437b.so.3.0.7 new file mode 100644 index 0000000000000000000000000000000000000000..86b595216a819f47e2787b7ecbd27c069556a762 GIT binary patch literal 54456 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 z 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�OHr5eE&b$TXCnHI8Vm;h! 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 EZx;|9rT_o{ literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/__pycache__/cycler.cpython-39.pyc b/.venv/lib/python3.9/site-packages/__pycache__/cycler.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..365efc6c12b7fba99dca6b04d5f9391beb32e46a GIT binary patch literal 14581 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 z zB(P`}I-u6#$~g{0_S4?WKrnTC%!!0C2+YbNJ}sK9gtJCLSEW%0=INK2w3$#k4sKRJ86dA>?3$CR28%*F$s73EaG{83c^ir086HtLA`Qb2GGbrFA<#~H zV@LSJa5Y^@Zi$3AMYFsRAlN!!(AUc!1`lweKZR4<#Z877?xU_2z(4 z4ukc+M?aQgHK7P%YYBv#pr0IaVOgk(n?0?vwo+j+bQqn9R7Ue9=1g08=J2i8RuD&Q_G5!f+W43qz&~>LkHp}Q@pI|Z zKmm>xCEJb}cgf=3>H~E0$qwQV4P;^p;V=lm)>=2tTI3 zn)hvNsvP7c{y&O2y7jr*DE|(Un5fC3S*Ho6$?&f}hq`aI>kTCpxd?oeFQHB@rgaaJ~P(O@I*KYDYrs>6JE}5bIEygM_BkM_6r8t-X z$Idb5&*9v;1$)8KJ7_K!ilJS^%f%JaFkv7|wrXEQj2GTAd}5q8SKJs|RtR=LN6Y4{ z*|PnyIk;c~CdThWZ3ahhI*zt%(Z7UYiP(G=ZJctp0aZCjnxHr_N&K-?m3}g&rqGvS zQzp2F;P20fDALsDA?JiCJ;3V7c^(m4qXbipkmx@uQl5=W0L%znPC&?6TDg(e!zqzhRuQ?C><9e67yw>#X<~OHRu_*YJNAM4IAhDo6QW2D2eUrjN@c zln?D{_GcK6XhA6Y-LzE=K={{gMB;gbLW literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/__pycache__/pylab.cpython-39.pyc b/.venv/lib/python3.9/site-packages/__pycache__/pylab.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..61cd1f7e32c180d942c079974d11e6b9dfd03464 GIT binary patch literal 245 zcmYe~<>g`k0@JOt6Qh9iV-N=!FabFZKwK;XBvKes7;_jxKr~YhLlk2wV-`~ua};w5 zQ!s-j^Gl!#22I9Wj9Px0EKvfvi6sR&`6W4-NqPm9If+S8TnLdURXN| zl8pR3V?9g#;>?m%-GapA?8NlcVxTzCKA^3)IBatBQ%ZAE?HGZk7lW+eVB}x~0E~t} AGynhq literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/INSTALLER b/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/INSTALLER new file mode 100644 index 00000000..a1b589e3 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/LICENSE b/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/LICENSE new file mode 100644 index 00000000..d41d8089 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2015, matplotlib project +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the matplotlib project nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/METADATA b/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/METADATA new file mode 100644 index 00000000..d6901101 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/METADATA @@ -0,0 +1,26 @@ +Metadata-Version: 2.1 +Name: cycler +Version: 0.11.0 +Summary: Composable style cycles +Home-page: https://github.com/matplotlib/cycler +Author: Thomas A Caswell +Author-email: matplotlib-users@python.org +License: BSD +Keywords: cycle kwargs +Platform: Cross platform (Linux +Platform: macOS +Platform: Windows) +Classifier: License :: OSI Approved :: BSD License +Classifier: Development Status :: 4 - Beta +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3 :: Only +Requires-Python: >=3.6 + +UNKNOWN + + diff --git a/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/RECORD b/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/RECORD new file mode 100644 index 00000000..d95679ac --- /dev/null +++ b/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/RECORD @@ -0,0 +1,8 @@ +__pycache__/cycler.cpython-39.pyc,, +cycler-0.11.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +cycler-0.11.0.dist-info/LICENSE,sha256=8SGBQ9dm2j_qZvEzlrfxXfRqgzA_Kb-Wum6Y601C9Ag,1497 +cycler-0.11.0.dist-info/METADATA,sha256=zQAWfiW6iWRaNH7P4681fDrNnJ72n0zYZjo-likNrBo,785 +cycler-0.11.0.dist-info/RECORD,, +cycler-0.11.0.dist-info/WHEEL,sha256=OqRkF0eY5GHssMorFjlbTIq072vpHpF60fIQA6lS9xA,92 +cycler-0.11.0.dist-info/top_level.txt,sha256=D8BVVDdAAelLb2FOEz7lDpc6-AL21ylKPrMhtG6yzyE,7 +cycler.py,sha256=HNLU4VZism2JQG6Rk03-lkmOcXccAvDjAXmOhGxpHrA,14519 diff --git a/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/WHEEL b/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/WHEEL new file mode 100644 index 00000000..385faab0 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.36.2) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/top_level.txt b/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/top_level.txt new file mode 100644 index 00000000..22546440 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/cycler-0.11.0.dist-info/top_level.txt @@ -0,0 +1 @@ +cycler diff --git a/.venv/lib/python3.9/site-packages/cycler.py b/.venv/lib/python3.9/site-packages/cycler.py new file mode 100644 index 00000000..f86b68de --- /dev/null +++ b/.venv/lib/python3.9/site-packages/cycler.py @@ -0,0 +1,501 @@ +""" +Cycler +====== + +Cycling through combinations of values, producing dictionaries. + +You can add cyclers:: + + from cycler import cycler + cc = (cycler(color=list('rgb')) + + cycler(linestyle=['-', '--', '-.'])) + for d in cc: + print(d) + +Results in:: + + {'color': 'r', 'linestyle': '-'} + {'color': 'g', 'linestyle': '--'} + {'color': 'b', 'linestyle': '-.'} + + +You can multiply cyclers:: + + from cycler import cycler + cc = (cycler(color=list('rgb')) * + cycler(linestyle=['-', '--', '-.'])) + for d in cc: + print(d) + +Results in:: + + {'color': 'r', 'linestyle': '-'} + {'color': 'r', 'linestyle': '--'} + {'color': 'r', 'linestyle': '-.'} + {'color': 'g', 'linestyle': '-'} + {'color': 'g', 'linestyle': '--'} + {'color': 'g', 'linestyle': '-.'} + {'color': 'b', 'linestyle': '-'} + {'color': 'b', 'linestyle': '--'} + {'color': 'b', 'linestyle': '-.'} +""" + + +import copy +from functools import reduce +from itertools import product, cycle +from operator import mul, add + +__version__ = '0.10.0' + + +def _process_keys(left, right): + """ + Helper function to compose cycler keys. + + Parameters + ---------- + left, right : iterable of dictionaries or None + The cyclers to be composed. + + Returns + ------- + keys : set + The keys in the composition of the two cyclers. + """ + l_peek = next(iter(left)) if left is not None else {} + r_peek = next(iter(right)) if right is not None else {} + l_key = set(l_peek.keys()) + r_key = set(r_peek.keys()) + if l_key & r_key: + raise ValueError("Can not compose overlapping cycles") + return l_key | r_key + + +def concat(left, right): + r""" + Concatenate `Cycler`\s, as if chained using `itertools.chain`. + + The keys must match exactly. + + Examples + -------- + >>> num = cycler('a', range(3)) + >>> let = cycler('a', 'abc') + >>> num.concat(let) + cycler('a', [0, 1, 2, 'a', 'b', 'c']) + + Returns + ------- + `Cycler` + The concatenated cycler. + """ + if left.keys != right.keys: + raise ValueError("Keys do not match:\n" + "\tIntersection: {both!r}\n" + "\tDisjoint: {just_one!r}".format( + both=left.keys & right.keys, + just_one=left.keys ^ right.keys)) + _l = left.by_key() + _r = right.by_key() + return reduce(add, (_cycler(k, _l[k] + _r[k]) for k in left.keys)) + + +class Cycler: + """ + Composable cycles. + + This class has compositions methods: + + ``+`` + for 'inner' products (zip) + + ``+=`` + in-place ``+`` + + ``*`` + for outer products (`itertools.product`) and integer multiplication + + ``*=`` + in-place ``*`` + + and supports basic slicing via ``[]``. + + Parameters + ---------- + left, right : Cycler or None + The 'left' and 'right' cyclers. + op : func or None + Function which composes the 'left' and 'right' cyclers. + """ + + def __call__(self): + return cycle(self) + + def __init__(self, left, right=None, op=None): + """ + Semi-private init. + + Do not use this directly, use `cycler` function instead. + """ + if isinstance(left, Cycler): + self._left = Cycler(left._left, left._right, left._op) + elif left is not None: + # Need to copy the dictionary or else that will be a residual + # mutable that could lead to strange errors + self._left = [copy.copy(v) for v in left] + else: + self._left = None + + if isinstance(right, Cycler): + self._right = Cycler(right._left, right._right, right._op) + elif right is not None: + # Need to copy the dictionary or else that will be a residual + # mutable that could lead to strange errors + self._right = [copy.copy(v) for v in right] + else: + self._right = None + + self._keys = _process_keys(self._left, self._right) + self._op = op + + def __contains__(self, k): + return k in self._keys + + @property + def keys(self): + """The keys this Cycler knows about.""" + return set(self._keys) + + def change_key(self, old, new): + """ + Change a key in this cycler to a new name. + Modification is performed in-place. + + Does nothing if the old key is the same as the new key. + Raises a ValueError if the new key is already a key. + Raises a KeyError if the old key isn't a key. + """ + if old == new: + return + if new in self._keys: + raise ValueError( + "Can't replace {old} with {new}, {new} is already a key" + .format(old=old, new=new) + ) + if old not in self._keys: + raise KeyError("Can't replace {old} with {new}, {old} is not a key" + .format(old=old, new=new)) + + self._keys.remove(old) + self._keys.add(new) + + if self._right is not None and old in self._right.keys: + self._right.change_key(old, new) + + # self._left should always be non-None + # if self._keys is non-empty. + elif isinstance(self._left, Cycler): + self._left.change_key(old, new) + else: + # It should be completely safe at this point to + # assume that the old key can be found in each + # iteration. + self._left = [{new: entry[old]} for entry in self._left] + + @classmethod + def _from_iter(cls, label, itr): + """ + Class method to create 'base' Cycler objects + that do not have a 'right' or 'op' and for which + the 'left' object is not another Cycler. + + Parameters + ---------- + label : str + The property key. + + itr : iterable + Finite length iterable of the property values. + + Returns + ------- + `Cycler` + New 'base' cycler. + """ + ret = cls(None) + ret._left = list({label: v} for v in itr) + ret._keys = {label} + return ret + + def __getitem__(self, key): + # TODO : maybe add numpy style fancy slicing + if isinstance(key, slice): + trans = self.by_key() + return reduce(add, (_cycler(k, v[key]) for k, v in trans.items())) + else: + raise ValueError("Can only use slices with Cycler.__getitem__") + + def __iter__(self): + if self._right is None: + for left in self._left: + yield dict(left) + else: + for a, b in self._op(self._left, self._right): + out = {} + out.update(a) + out.update(b) + yield out + + def __add__(self, other): + """ + Pair-wise combine two equal length cyclers (zip). + + Parameters + ---------- + other : Cycler + """ + if len(self) != len(other): + raise ValueError("Can only add equal length cycles, " + f"not {len(self)} and {len(other)}") + return Cycler(self, other, zip) + + def __mul__(self, other): + """ + Outer product of two cyclers (`itertools.product`) or integer + multiplication. + + Parameters + ---------- + other : Cycler or int + """ + if isinstance(other, Cycler): + return Cycler(self, other, product) + elif isinstance(other, int): + trans = self.by_key() + return reduce(add, (_cycler(k, v*other) for k, v in trans.items())) + else: + return NotImplemented + + def __rmul__(self, other): + return self * other + + def __len__(self): + op_dict = {zip: min, product: mul} + if self._right is None: + return len(self._left) + l_len = len(self._left) + r_len = len(self._right) + return op_dict[self._op](l_len, r_len) + + def __iadd__(self, other): + """ + In-place pair-wise combine two equal length cyclers (zip). + + Parameters + ---------- + other : Cycler + """ + if not isinstance(other, Cycler): + raise TypeError("Cannot += with a non-Cycler object") + # True shallow copy of self is fine since this is in-place + old_self = copy.copy(self) + self._keys = _process_keys(old_self, other) + self._left = old_self + self._op = zip + self._right = Cycler(other._left, other._right, other._op) + return self + + def __imul__(self, other): + """ + In-place outer product of two cyclers (`itertools.product`). + + Parameters + ---------- + other : Cycler + """ + if not isinstance(other, Cycler): + raise TypeError("Cannot *= with a non-Cycler object") + # True shallow copy of self is fine since this is in-place + old_self = copy.copy(self) + self._keys = _process_keys(old_self, other) + self._left = old_self + self._op = product + self._right = Cycler(other._left, other._right, other._op) + return self + + def __eq__(self, other): + if len(self) != len(other): + return False + if self.keys ^ other.keys: + return False + return all(a == b for a, b in zip(self, other)) + + def __ne__(self, other): + return not (self == other) + + __hash__ = None + + def __repr__(self): + op_map = {zip: '+', product: '*'} + if self._right is None: + lab = self.keys.pop() + itr = list(v[lab] for v in self) + return f"cycler({lab!r}, {itr!r})" + else: + op = op_map.get(self._op, '?') + msg = "({left!r} {op} {right!r})" + return msg.format(left=self._left, op=op, right=self._right) + + def _repr_html_(self): + # an table showing the value of each key through a full cycle + output = "" + sorted_keys = sorted(self.keys, key=repr) + for key in sorted_keys: + output += f"" + for d in iter(self): + output += "" + for k in sorted_keys: + output += f"" + output += "" + output += "
    {key!r}
    {d[k]!r}
    " + return output + + def by_key(self): + """ + Values by key. + + This returns the transposed values of the cycler. Iterating + over a `Cycler` yields dicts with a single value for each key, + this method returns a `dict` of `list` which are the values + for the given key. + + The returned value can be used to create an equivalent `Cycler` + using only `+`. + + Returns + ------- + transpose : dict + dict of lists of the values for each key. + """ + + # TODO : sort out if this is a bottle neck, if there is a better way + # and if we care. + + keys = self.keys + out = {k: list() for k in keys} + + for d in self: + for k in keys: + out[k].append(d[k]) + return out + + # for back compatibility + _transpose = by_key + + def simplify(self): + """ + Simplify the cycler into a sum (but no products) of cyclers. + + Returns + ------- + simple : Cycler + """ + # TODO: sort out if it is worth the effort to make sure this is + # balanced. Currently it is is + # (((a + b) + c) + d) vs + # ((a + b) + (c + d)) + # I would believe that there is some performance implications + trans = self.by_key() + return reduce(add, (_cycler(k, v) for k, v in trans.items())) + + concat = concat + + +def cycler(*args, **kwargs): + """ + Create a new `Cycler` object from a single positional argument, + a pair of positional arguments, or the combination of keyword arguments. + + cycler(arg) + cycler(label1=itr1[, label2=iter2[, ...]]) + cycler(label, itr) + + Form 1 simply copies a given `Cycler` object. + + Form 2 composes a `Cycler` as an inner product of the + pairs of keyword arguments. In other words, all of the + iterables are cycled simultaneously, as if through zip(). + + Form 3 creates a `Cycler` from a label and an iterable. + This is useful for when the label cannot be a keyword argument + (e.g., an integer or a name that has a space in it). + + Parameters + ---------- + arg : Cycler + Copy constructor for Cycler (does a shallow copy of iterables). + label : name + The property key. In the 2-arg form of the function, + the label can be any hashable object. In the keyword argument + form of the function, it must be a valid python identifier. + itr : iterable + Finite length iterable of the property values. + Can be a single-property `Cycler` that would + be like a key change, but as a shallow copy. + + Returns + ------- + cycler : Cycler + New `Cycler` for the given property + + """ + if args and kwargs: + raise TypeError("cyl() can only accept positional OR keyword " + "arguments -- not both.") + + if len(args) == 1: + if not isinstance(args[0], Cycler): + raise TypeError("If only one positional argument given, it must " + "be a Cycler instance.") + return Cycler(args[0]) + elif len(args) == 2: + return _cycler(*args) + elif len(args) > 2: + raise TypeError("Only a single Cycler can be accepted as the lone " + "positional argument. Use keyword arguments instead.") + + if kwargs: + return reduce(add, (_cycler(k, v) for k, v in kwargs.items())) + + raise TypeError("Must have at least a positional OR keyword arguments") + + +def _cycler(label, itr): + """ + Create a new `Cycler` object from a property name and iterable of values. + + Parameters + ---------- + label : hashable + The property key. + itr : iterable + Finite length iterable of the property values. + + Returns + ------- + cycler : Cycler + New `Cycler` for the given property + """ + if isinstance(itr, Cycler): + keys = itr.keys + if len(keys) != 1: + msg = "Can not create Cycler from a multi-property Cycler" + raise ValueError(msg) + + lab = keys.pop() + # Doesn't need to be a new list because + # _from_iter() will be creating that new list anyway. + itr = (v[lab] for v in itr) + + return Cycler._from_iter(label, itr) diff --git a/.venv/lib/python3.9/site-packages/fontTools/__init__.py b/.venv/lib/python3.9/site-packages/fontTools/__init__.py new file mode 100644 index 00000000..ef13e216 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/__init__.py @@ -0,0 +1,8 @@ +import logging +from fontTools.misc.loggingTools import configLogger + +log = logging.getLogger(__name__) + +version = __version__ = "4.28.2" + +__all__ = ["version", "log", "configLogger"] diff --git a/.venv/lib/python3.9/site-packages/fontTools/__main__.py b/.venv/lib/python3.9/site-packages/fontTools/__main__.py new file mode 100644 index 00000000..9b978aaa --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/__main__.py @@ -0,0 +1,34 @@ +import sys + + +def main(args=None): + if args is None: + args = sys.argv[1:] + + # TODO Handle library-wide options. Eg.: + # --unicodedata + # --verbose / other logging stuff + + # TODO Allow a way to run arbitrary modules? Useful for setting + # library-wide options and calling another library. Eg.: + # + # $ fonttools --unicodedata=... fontmake ... + # + # This allows for a git-like command where thirdparty commands + # can be added. Should we just try importing the fonttools + # module first and try without if it fails? + + if len(sys.argv) < 2: + sys.argv.append("help") + if sys.argv[1] == "-h" or sys.argv[1] == "--help": + sys.argv[1] = "help" + mod = 'fontTools.'+sys.argv[1] + sys.argv[1] = sys.argv[0] + ' ' + sys.argv[1] + del sys.argv[0] + + import runpy + runpy.run_module(mod, run_name='__main__') + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/.venv/lib/python3.9/site-packages/fontTools/__pycache__/__init__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..176ea9eb28311cb52541e0d20da0b0b5d5daca14 GIT binary patch literal 374 zcmYjMy-ve05VoDPNlW_#JV6FxsdNAdAqEBpgpi6DvYbrpx)zRI*&$MS6&7IQ0TA!v zm5Eni!YLKvr2Fni-`#h|rqeNsHh+I&A2ELR#eYj;aTeXrB5=g9MpYk)#to?mMgl!2 zB7MQtfF~)chE*mJPhWABbG$&s;499ds{)5fZOu~2ODm;tkHdL6J1S>I60%M>udE4) zw$hQvE=D1Xxl~40`%7!u8*8;M8|CYA*WY%w$={aqSz0K*yq;L^Cp^|yyTfSmw9 z$N-qu0B^|kZ*SrImNtSbMlYD-=T3EkUT;>dHFQz0qA)ExVLGbS9bIqQl{JUuG4-ky o2WwW}Gbud%yO9DYqgsG+y$ShAWBG#?r#MRaJVK5qWK44M1JTE4pa1{> literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/__pycache__/__main__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/__pycache__/__main__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c0b234177e96e24e5609f4088228c1e014ea2dd0 GIT binary patch literal 644 zcmYjO!EVz)5S`g|9OKfor&g5!aY8auvPf`2N)ZwqI8+f*Q4hITOLnQL{l87aXHz%9}FtM8hrDcmqEWiE|E-za~D6Cg>jj!|n1Y-%#40RF<@H4(6zW zD^#f9D?5P|RLtQURBQ_7nd@)4;%@VXcLMI6_H2hbq~JpF4IYB>w~u7b>4u_e3eEK%K4;WtK3fSl}&*3QJ5QE9wHXXQ2PC)a+z-}d3BBCkFa zMP>)a@&4lDCWzyiO!GL7a2%L<9_MnVBfsIcwv8vv<)Y!4&KqBrrOs8;Ax>G3Lr0wz zYM$wcw>;Z$!e)>5{sPl;>o3Git5k}2(x|s4U1;&XPO2go=aYm~h`~bV3z4NCMOjx# zkv|{26gI7Nzm$`yywq0g1dFZAL0LDRQ|$hZJ)!~_VDF%Z_wfOS*uzH{umH^=ofw}= pgrmqaT?gIFId&f7xbgJov}&c^DF-cQxbgPNeJ1O+1U!5g;6LLllu!Tw literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/__pycache__/afmLib.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/__pycache__/afmLib.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..671d406d3e86d46d70534cb2aaea412a60fac877 GIT binary patch literal 10903 zcmb_iOK=>=d7j5UW(Nyk@gM+Flr;hc2}=PBP$p>$q+mfHDUy;PMx;q`MS3~do&|>7 zodJ4gL0~-_RSem2m91DwrQ)ji0_GH6d`ab!a#eE3$(3UcsX3%7l}mKVB{yA^@9*9n zEFP?stFnvj>FMX+|NH+Nc7MOA;B)@(e`C9ED$0M-OYbLzmv`|C22@31N?Bnl)9Pwj zb<{nL>Ce=%E@~;%QlgedEiGyp)H0%$MJ>CgFyn93vhlvca?JcfVWyMY)ypQ{`&b_D zd8ZHWdDhPczEH~jY>XAy&=+cXz!_x2PqeR8Zi?Lt<$_b#8+xXchn-<+b@I;eu38>p zBjr(NWbcGC`b_2j;EXvV≥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
    LgFZl!>U;u#9Fr>Z)_--H~% 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 eA0NpVGGqJZ$IE!i{E literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/__pycache__/help.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/__pycache__/help.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2326d1bb5934cd19c82d160c4ca4bb92f919929b GIT binary patch literal 1224 zcmYjQO^+Kz5UuX{^e4&63XTNP3Xy{knOPv0NUK#4iv*V_Vi7Awgwd?K*B>DcW4A1*FBIKRLtZ33WRMjA+=A&N4> z=xb2c%r;SG-G>QbHgn$4V_1_lIffU%G_)Ejr>4qXgTk83oshNNSf`L5*r5DXMW8|8 zYIq9Y1M?dDCwmdxtn>CZb^r%ZJ+7@;Yu0X@+7Z9j^s0l^{A=S|#y7NfuDaLw{`*jq znjXR_ECQ_3TmAm7O7{kN5!@gzf|^|QuK^i9_yKVmN4>||HR7Gqd!X*j?y`5 zP_b^+KbaOU_ti9&`%|8kV^n50D6Y(uW)9HQ@S@w0n#|xk)O>;84l&3^@I0CG5!Ey} z(AKN==LWv*1Z6 zQ^g;Z$@n6fa2cK#x%w7UWoY;XCp_n`N^#UP#7vjjl>S@2KTpy;ILwN1lF6fB zmnF=bs`d^jzy@(k!OzoI+BSEdX{cI39Gi6N?nUebtAARyETKN`R>O9T(Xiv9x zINFcn68kKUwJQsuIMZHvF}YM}rh6}w>;g}>kI?NnPUj`&V6HdGiZf)W-7Qny`FeBo zr4WS><{zcKIA+DzqG_@?79W@koj6`{A@M;Nd0?_k!`(85z4i~W880(_WO_jEq4AOK_Sd!i Ip-%?nKOTuZXaE2J literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/__pycache__/merge.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/__pycache__/merge.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85c128a661f69dc34beb088f63117b955b726a8b GIT binary patch literal 34377 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 C*cy@m literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/__pycache__/tfmLib.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/__pycache__/tfmLib.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..973c77f46b761ea09a9499e2b6a3c34d9ff0927d GIT binary patch literal 11649 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/__pycache__/ttx.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/__pycache__/ttx.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b5c160f8026ad9cfdd962b8bf5850c411708e45 GIT binary patch literal 12314 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/afmLib.py b/.venv/lib/python3.9/site-packages/fontTools/afmLib.py new file mode 100644 index 00000000..49d99512 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/afmLib.py @@ -0,0 +1,430 @@ +"""Module for reading and writing AFM (Adobe Font Metrics) files. + +Note that this has been designed to read in AFM files generated by Fontographer +and has not been tested on many other files. In particular, it does not +implement the whole Adobe AFM specification [#f1]_ but, it should read most +"common" AFM files. + +Here is an example of using `afmLib` to read, modify and write an AFM file: + + >>> from fontTools.afmLib import AFM + >>> f = AFM("Tests/afmLib/data/TestAFM.afm") + >>> + >>> # Accessing a pair gets you the kern value + >>> f[("V","A")] + -60 + >>> + >>> # Accessing a glyph name gets you metrics + >>> f["A"] + (65, 668, (8, -25, 660, 666)) + >>> # (charnum, width, bounding box) + >>> + >>> # Accessing an attribute gets you metadata + >>> f.FontName + 'TestFont-Regular' + >>> f.FamilyName + 'TestFont' + >>> f.Weight + 'Regular' + >>> f.XHeight + 500 + >>> f.Ascender + 750 + >>> + >>> # Attributes and items can also be set + >>> f[("A","V")] = -150 # Tighten kerning + >>> f.FontName = "TestFont Squished" + >>> + >>> # And the font written out again (remove the # in front) + >>> #f.write("testfont-squished.afm") + +.. rubric:: Footnotes + +.. [#f1] `Adobe Technote 5004 `_, + Adobe Font Metrics File Format Specification. + +""" + + +import re + +# every single line starts with a "word" +identifierRE = re.compile(r"^([A-Za-z]+).*") + +# regular expression to parse char lines +charRE = re.compile( + r"(-?\d+)" # charnum + r"\s*;\s*WX\s+" # ; WX + r"(-?\d+)" # width + r"\s*;\s*N\s+" # ; N + r"([.A-Za-z0-9_]+)" # charname + r"\s*;\s*B\s+" # ; B + r"(-?\d+)" # left + r"\s+" + r"(-?\d+)" # bottom + r"\s+" + r"(-?\d+)" # right + r"\s+" + r"(-?\d+)" # top + r"\s*;\s*" # ; + ) + +# regular expression to parse kerning lines +kernRE = re.compile( + r"([.A-Za-z0-9_]+)" # leftchar + r"\s+" + r"([.A-Za-z0-9_]+)" # rightchar + r"\s+" + r"(-?\d+)" # value + r"\s*" + ) + +# regular expressions to parse composite info lines of the form: +# Aacute 2 ; PCC A 0 0 ; PCC acute 182 211 ; +compositeRE = re.compile( + r"([.A-Za-z0-9_]+)" # char name + r"\s+" + r"(\d+)" # number of parts + r"\s*;\s*" + ) +componentRE = re.compile( + r"PCC\s+" # PPC + r"([.A-Za-z0-9_]+)" # base char name + r"\s+" + r"(-?\d+)" # x offset + r"\s+" + r"(-?\d+)" # y offset + r"\s*;\s*" + ) + +preferredAttributeOrder = [ + "FontName", + "FullName", + "FamilyName", + "Weight", + "ItalicAngle", + "IsFixedPitch", + "FontBBox", + "UnderlinePosition", + "UnderlineThickness", + "Version", + "Notice", + "EncodingScheme", + "CapHeight", + "XHeight", + "Ascender", + "Descender", +] + + +class error(Exception): + pass + + +class AFM(object): + + _attrs = None + + _keywords = ['StartFontMetrics', + 'EndFontMetrics', + 'StartCharMetrics', + 'EndCharMetrics', + 'StartKernData', + 'StartKernPairs', + 'EndKernPairs', + 'EndKernData', + 'StartComposites', + 'EndComposites', + ] + + def __init__(self, path=None): + """AFM file reader. + + Instantiating an object with a path name will cause the file to be opened, + read, and parsed. Alternatively the path can be left unspecified, and a + file can be parsed later with the :meth:`read` method.""" + self._attrs = {} + self._chars = {} + self._kerning = {} + self._index = {} + self._comments = [] + self._composites = {} + if path is not None: + self.read(path) + + def read(self, path): + """Opens, reads and parses a file.""" + lines = readlines(path) + for line in lines: + if not line.strip(): + continue + m = identifierRE.match(line) + if m is None: + raise error("syntax error in AFM file: " + repr(line)) + + pos = m.regs[1][1] + word = line[:pos] + rest = line[pos:].strip() + if word in self._keywords: + continue + if word == "C": + self.parsechar(rest) + elif word == "KPX": + self.parsekernpair(rest) + elif word == "CC": + self.parsecomposite(rest) + else: + self.parseattr(word, rest) + + def parsechar(self, rest): + m = charRE.match(rest) + if m is None: + raise error("syntax error in AFM file: " + repr(rest)) + things = [] + for fr, to in m.regs[1:]: + things.append(rest[fr:to]) + charname = things[2] + del things[2] + charnum, width, l, b, r, t = (int(thing) for thing in things) + self._chars[charname] = charnum, width, (l, b, r, t) + + def parsekernpair(self, rest): + m = kernRE.match(rest) + if m is None: + raise error("syntax error in AFM file: " + repr(rest)) + things = [] + for fr, to in m.regs[1:]: + things.append(rest[fr:to]) + leftchar, rightchar, value = things + value = int(value) + self._kerning[(leftchar, rightchar)] = value + + def parseattr(self, word, rest): + if word == "FontBBox": + l, b, r, t = [int(thing) for thing in rest.split()] + self._attrs[word] = l, b, r, t + elif word == "Comment": + self._comments.append(rest) + else: + try: + value = int(rest) + except (ValueError, OverflowError): + self._attrs[word] = rest + else: + self._attrs[word] = value + + def parsecomposite(self, rest): + m = compositeRE.match(rest) + if m is None: + raise error("syntax error in AFM file: " + repr(rest)) + charname = m.group(1) + ncomponents = int(m.group(2)) + rest = rest[m.regs[0][1]:] + components = [] + while True: + m = componentRE.match(rest) + if m is None: + raise error("syntax error in AFM file: " + repr(rest)) + basechar = m.group(1) + xoffset = int(m.group(2)) + yoffset = int(m.group(3)) + components.append((basechar, xoffset, yoffset)) + rest = rest[m.regs[0][1]:] + if not rest: + break + assert len(components) == ncomponents + self._composites[charname] = components + + def write(self, path, sep='\r'): + """Writes out an AFM font to the given path.""" + import time + lines = [ "StartFontMetrics 2.0", + "Comment Generated by afmLib; at %s" % ( + time.strftime("%m/%d/%Y %H:%M:%S", + time.localtime(time.time())))] + + # write comments, assuming (possibly wrongly!) they should + # all appear at the top + for comment in self._comments: + lines.append("Comment " + comment) + + # write attributes, first the ones we know about, in + # a preferred order + attrs = self._attrs + for attr in preferredAttributeOrder: + if attr in attrs: + value = attrs[attr] + if attr == "FontBBox": + value = "%s %s %s %s" % value + lines.append(attr + " " + str(value)) + # then write the attributes we don't know about, + # in alphabetical order + items = sorted(attrs.items()) + for attr, value in items: + if attr in preferredAttributeOrder: + continue + lines.append(attr + " " + str(value)) + + # write char metrics + lines.append("StartCharMetrics " + repr(len(self._chars))) + items = [(charnum, (charname, width, box)) for charname, (charnum, width, box) in self._chars.items()] + + def myKey(a): + """Custom key function to make sure unencoded chars (-1) + end up at the end of the list after sorting.""" + if a[0] == -1: + a = (0xffff,) + a[1:] # 0xffff is an arbitrary large number + return a + items.sort(key=myKey) + + for charnum, (charname, width, (l, b, r, t)) in items: + lines.append("C %d ; WX %d ; N %s ; B %d %d %d %d ;" % + (charnum, width, charname, l, b, r, t)) + lines.append("EndCharMetrics") + + # write kerning info + lines.append("StartKernData") + lines.append("StartKernPairs " + repr(len(self._kerning))) + items = sorted(self._kerning.items()) + for (leftchar, rightchar), value in items: + lines.append("KPX %s %s %d" % (leftchar, rightchar, value)) + lines.append("EndKernPairs") + lines.append("EndKernData") + + if self._composites: + composites = sorted(self._composites.items()) + lines.append("StartComposites %s" % len(self._composites)) + for charname, components in composites: + line = "CC %s %s ;" % (charname, len(components)) + for basechar, xoffset, yoffset in components: + line = line + " PCC %s %s %s ;" % (basechar, xoffset, yoffset) + lines.append(line) + lines.append("EndComposites") + + lines.append("EndFontMetrics") + + writelines(path, lines, sep) + + def has_kernpair(self, pair): + """Returns `True` if the given glyph pair (specified as a tuple) exists + in the kerning dictionary.""" + return pair in self._kerning + + def kernpairs(self): + """Returns a list of all kern pairs in the kerning dictionary.""" + return list(self._kerning.keys()) + + def has_char(self, char): + """Returns `True` if the given glyph exists in the font.""" + return char in self._chars + + def chars(self): + """Returns a list of all glyph names in the font.""" + return list(self._chars.keys()) + + def comments(self): + """Returns all comments from the file.""" + return self._comments + + def addComment(self, comment): + """Adds a new comment to the file.""" + self._comments.append(comment) + + def addComposite(self, glyphName, components): + """Specifies that the glyph `glyphName` is made up of the given components. + The components list should be of the following form:: + + [ + (glyphname, xOffset, yOffset), + ... + ] + + """ + self._composites[glyphName] = components + + def __getattr__(self, attr): + if attr in self._attrs: + return self._attrs[attr] + else: + raise AttributeError(attr) + + def __setattr__(self, attr, value): + # all attrs *not* starting with "_" are consider to be AFM keywords + if attr[:1] == "_": + self.__dict__[attr] = value + else: + self._attrs[attr] = value + + def __delattr__(self, attr): + # all attrs *not* starting with "_" are consider to be AFM keywords + if attr[:1] == "_": + try: + del self.__dict__[attr] + except KeyError: + raise AttributeError(attr) + else: + try: + del self._attrs[attr] + except KeyError: + raise AttributeError(attr) + + def __getitem__(self, key): + if isinstance(key, tuple): + # key is a tuple, return the kernpair + return self._kerning[key] + else: + # return the metrics instead + return self._chars[key] + + def __setitem__(self, key, value): + if isinstance(key, tuple): + # key is a tuple, set kernpair + self._kerning[key] = value + else: + # set char metrics + self._chars[key] = value + + def __delitem__(self, key): + if isinstance(key, tuple): + # key is a tuple, del kernpair + del self._kerning[key] + else: + # del char metrics + del self._chars[key] + + def __repr__(self): + if hasattr(self, "FullName"): + return '' % self.FullName + else: + return '' % id(self) + + +def readlines(path): + with open(path, "r", encoding="ascii") as f: + data = f.read() + return data.splitlines() + +def writelines(path, lines, sep='\r'): + with open(path, "w", encoding="ascii", newline=sep) as f: + f.write("\n".join(lines) + "\n") + + +if __name__ == "__main__": + import EasyDialogs + path = EasyDialogs.AskFileForOpen() + if path: + afm = AFM(path) + char = 'A' + if afm.has_char(char): + print(afm[char]) # print charnum, width and boundingbox + pair = ('A', 'V') + if afm.has_kernpair(pair): + print(afm[pair]) # print kerning value for pair + print(afm.Version) # various other afm entries have become attributes + print(afm.Weight) + # afm.comments() returns a list of all Comment lines found in the AFM + print(afm.comments()) + #print afm.chars() + #print afm.kernpairs() + print(afm) + afm.write(path + ".muck") diff --git a/.venv/lib/python3.9/site-packages/fontTools/agl.py b/.venv/lib/python3.9/site-packages/fontTools/agl.py new file mode 100644 index 00000000..cc286e42 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/agl.py @@ -0,0 +1,5232 @@ +# -*- coding: utf-8 -*- +# The tables below are taken from +# https://github.com/adobe-type-tools/agl-aglfn/raw/4036a9ca80a62f64f9de4f7321a9a045ad0ecfd6/glyphlist.txt +# and +# https://github.com/adobe-type-tools/agl-aglfn/raw/4036a9ca80a62f64f9de4f7321a9a045ad0ecfd6/aglfn.txt +""" +Interface to the Adobe Glyph List + +This module exists to convert glyph names from the Adobe Glyph List +to their Unicode equivalents. Example usage: + + >>> from fontTools.agl import toUnicode + >>> toUnicode("nahiragana") + 'ãª' + +It also contains two dictionaries, ``UV2AGL`` and ``AGL2UV``, which map from +Unicode codepoints to AGL names and vice versa: + + >>> import fontTools + >>> fontTools.agl.UV2AGL[ord("?")] + 'question' + >>> fontTools.agl.AGL2UV["wcircumflex"] + 373 + +This is used by fontTools when it has to construct glyph names for a font which +doesn't include any (e.g. format 3.0 post tables). +""" + +from fontTools.misc.textTools import tostr +import re + + +_aglText = """\ +# ----------------------------------------------------------- +# Copyright 2002-2019 Adobe (http://www.adobe.com/). +# +# Redistribution and use in source and binary forms, with or +# without modification, are permitted provided that the +# following conditions are met: +# +# Redistributions of source code must retain the above +# copyright notice, this list of conditions and the following +# disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials +# provided with the distribution. +# +# Neither the name of Adobe nor the names of its contributors +# may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ----------------------------------------------------------- +# Name: Adobe Glyph List +# Table version: 2.0 +# Date: September 20, 2002 +# URL: https://github.com/adobe-type-tools/agl-aglfn +# +# Format: two semicolon-delimited fields: +# (1) glyph name--upper/lowercase letters and digits +# (2) Unicode scalar value--four uppercase hexadecimal digits +# +A;0041 +AE;00C6 +AEacute;01FC +AEmacron;01E2 +AEsmall;F7E6 +Aacute;00C1 +Aacutesmall;F7E1 +Abreve;0102 +Abreveacute;1EAE +Abrevecyrillic;04D0 +Abrevedotbelow;1EB6 +Abrevegrave;1EB0 +Abrevehookabove;1EB2 +Abrevetilde;1EB4 +Acaron;01CD +Acircle;24B6 +Acircumflex;00C2 +Acircumflexacute;1EA4 +Acircumflexdotbelow;1EAC +Acircumflexgrave;1EA6 +Acircumflexhookabove;1EA8 +Acircumflexsmall;F7E2 +Acircumflextilde;1EAA +Acute;F6C9 +Acutesmall;F7B4 +Acyrillic;0410 +Adblgrave;0200 +Adieresis;00C4 +Adieresiscyrillic;04D2 +Adieresismacron;01DE +Adieresissmall;F7E4 +Adotbelow;1EA0 +Adotmacron;01E0 +Agrave;00C0 +Agravesmall;F7E0 +Ahookabove;1EA2 +Aiecyrillic;04D4 +Ainvertedbreve;0202 +Alpha;0391 +Alphatonos;0386 +Amacron;0100 +Amonospace;FF21 +Aogonek;0104 +Aring;00C5 +Aringacute;01FA +Aringbelow;1E00 +Aringsmall;F7E5 +Asmall;F761 +Atilde;00C3 +Atildesmall;F7E3 +Aybarmenian;0531 +B;0042 +Bcircle;24B7 +Bdotaccent;1E02 +Bdotbelow;1E04 +Becyrillic;0411 +Benarmenian;0532 +Beta;0392 +Bhook;0181 +Blinebelow;1E06 +Bmonospace;FF22 +Brevesmall;F6F4 +Bsmall;F762 +Btopbar;0182 +C;0043 +Caarmenian;053E +Cacute;0106 +Caron;F6CA +Caronsmall;F6F5 +Ccaron;010C +Ccedilla;00C7 +Ccedillaacute;1E08 +Ccedillasmall;F7E7 +Ccircle;24B8 +Ccircumflex;0108 +Cdot;010A +Cdotaccent;010A +Cedillasmall;F7B8 +Chaarmenian;0549 +Cheabkhasiancyrillic;04BC +Checyrillic;0427 +Chedescenderabkhasiancyrillic;04BE +Chedescendercyrillic;04B6 +Chedieresiscyrillic;04F4 +Cheharmenian;0543 +Chekhakassiancyrillic;04CB +Cheverticalstrokecyrillic;04B8 +Chi;03A7 +Chook;0187 +Circumflexsmall;F6F6 +Cmonospace;FF23 +Coarmenian;0551 +Csmall;F763 +D;0044 +DZ;01F1 +DZcaron;01C4 +Daarmenian;0534 +Dafrican;0189 +Dcaron;010E +Dcedilla;1E10 +Dcircle;24B9 +Dcircumflexbelow;1E12 +Dcroat;0110 +Ddotaccent;1E0A +Ddotbelow;1E0C +Decyrillic;0414 +Deicoptic;03EE +Delta;2206 +Deltagreek;0394 +Dhook;018A +Dieresis;F6CB +DieresisAcute;F6CC +DieresisGrave;F6CD +Dieresissmall;F7A8 +Digammagreek;03DC +Djecyrillic;0402 +Dlinebelow;1E0E +Dmonospace;FF24 +Dotaccentsmall;F6F7 +Dslash;0110 +Dsmall;F764 +Dtopbar;018B +Dz;01F2 +Dzcaron;01C5 +Dzeabkhasiancyrillic;04E0 +Dzecyrillic;0405 +Dzhecyrillic;040F +E;0045 +Eacute;00C9 +Eacutesmall;F7E9 +Ebreve;0114 +Ecaron;011A +Ecedillabreve;1E1C +Echarmenian;0535 +Ecircle;24BA +Ecircumflex;00CA +Ecircumflexacute;1EBE +Ecircumflexbelow;1E18 +Ecircumflexdotbelow;1EC6 +Ecircumflexgrave;1EC0 +Ecircumflexhookabove;1EC2 +Ecircumflexsmall;F7EA +Ecircumflextilde;1EC4 +Ecyrillic;0404 +Edblgrave;0204 +Edieresis;00CB +Edieresissmall;F7EB +Edot;0116 +Edotaccent;0116 +Edotbelow;1EB8 +Efcyrillic;0424 +Egrave;00C8 +Egravesmall;F7E8 +Eharmenian;0537 +Ehookabove;1EBA +Eightroman;2167 +Einvertedbreve;0206 +Eiotifiedcyrillic;0464 +Elcyrillic;041B +Elevenroman;216A +Emacron;0112 +Emacronacute;1E16 +Emacrongrave;1E14 +Emcyrillic;041C +Emonospace;FF25 +Encyrillic;041D +Endescendercyrillic;04A2 +Eng;014A +Enghecyrillic;04A4 +Enhookcyrillic;04C7 +Eogonek;0118 +Eopen;0190 +Epsilon;0395 +Epsilontonos;0388 +Ercyrillic;0420 +Ereversed;018E +Ereversedcyrillic;042D +Escyrillic;0421 +Esdescendercyrillic;04AA +Esh;01A9 +Esmall;F765 +Eta;0397 +Etarmenian;0538 +Etatonos;0389 +Eth;00D0 +Ethsmall;F7F0 +Etilde;1EBC +Etildebelow;1E1A +Euro;20AC +Ezh;01B7 +Ezhcaron;01EE +Ezhreversed;01B8 +F;0046 +Fcircle;24BB +Fdotaccent;1E1E +Feharmenian;0556 +Feicoptic;03E4 +Fhook;0191 +Fitacyrillic;0472 +Fiveroman;2164 +Fmonospace;FF26 +Fourroman;2163 +Fsmall;F766 +G;0047 +GBsquare;3387 +Gacute;01F4 +Gamma;0393 +Gammaafrican;0194 +Gangiacoptic;03EA +Gbreve;011E +Gcaron;01E6 +Gcedilla;0122 +Gcircle;24BC +Gcircumflex;011C +Gcommaaccent;0122 +Gdot;0120 +Gdotaccent;0120 +Gecyrillic;0413 +Ghadarmenian;0542 +Ghemiddlehookcyrillic;0494 +Ghestrokecyrillic;0492 +Gheupturncyrillic;0490 +Ghook;0193 +Gimarmenian;0533 +Gjecyrillic;0403 +Gmacron;1E20 +Gmonospace;FF27 +Grave;F6CE +Gravesmall;F760 +Gsmall;F767 +Gsmallhook;029B +Gstroke;01E4 +H;0048 +H18533;25CF +H18543;25AA +H18551;25AB +H22073;25A1 +HPsquare;33CB +Haabkhasiancyrillic;04A8 +Hadescendercyrillic;04B2 +Hardsigncyrillic;042A +Hbar;0126 +Hbrevebelow;1E2A +Hcedilla;1E28 +Hcircle;24BD +Hcircumflex;0124 +Hdieresis;1E26 +Hdotaccent;1E22 +Hdotbelow;1E24 +Hmonospace;FF28 +Hoarmenian;0540 +Horicoptic;03E8 +Hsmall;F768 +Hungarumlaut;F6CF +Hungarumlautsmall;F6F8 +Hzsquare;3390 +I;0049 +IAcyrillic;042F +IJ;0132 +IUcyrillic;042E +Iacute;00CD +Iacutesmall;F7ED +Ibreve;012C +Icaron;01CF +Icircle;24BE +Icircumflex;00CE +Icircumflexsmall;F7EE +Icyrillic;0406 +Idblgrave;0208 +Idieresis;00CF +Idieresisacute;1E2E +Idieresiscyrillic;04E4 +Idieresissmall;F7EF +Idot;0130 +Idotaccent;0130 +Idotbelow;1ECA +Iebrevecyrillic;04D6 +Iecyrillic;0415 +Ifraktur;2111 +Igrave;00CC +Igravesmall;F7EC +Ihookabove;1EC8 +Iicyrillic;0418 +Iinvertedbreve;020A +Iishortcyrillic;0419 +Imacron;012A +Imacroncyrillic;04E2 +Imonospace;FF29 +Iniarmenian;053B +Iocyrillic;0401 +Iogonek;012E +Iota;0399 +Iotaafrican;0196 +Iotadieresis;03AA +Iotatonos;038A +Ismall;F769 +Istroke;0197 +Itilde;0128 +Itildebelow;1E2C +Izhitsacyrillic;0474 +Izhitsadblgravecyrillic;0476 +J;004A +Jaarmenian;0541 +Jcircle;24BF +Jcircumflex;0134 +Jecyrillic;0408 +Jheharmenian;054B +Jmonospace;FF2A +Jsmall;F76A +K;004B +KBsquare;3385 +KKsquare;33CD +Kabashkircyrillic;04A0 +Kacute;1E30 +Kacyrillic;041A +Kadescendercyrillic;049A +Kahookcyrillic;04C3 +Kappa;039A +Kastrokecyrillic;049E +Kaverticalstrokecyrillic;049C +Kcaron;01E8 +Kcedilla;0136 +Kcircle;24C0 +Kcommaaccent;0136 +Kdotbelow;1E32 +Keharmenian;0554 +Kenarmenian;053F +Khacyrillic;0425 +Kheicoptic;03E6 +Khook;0198 +Kjecyrillic;040C +Klinebelow;1E34 +Kmonospace;FF2B +Koppacyrillic;0480 +Koppagreek;03DE +Ksicyrillic;046E +Ksmall;F76B +L;004C +LJ;01C7 +LL;F6BF +Lacute;0139 +Lambda;039B +Lcaron;013D +Lcedilla;013B +Lcircle;24C1 +Lcircumflexbelow;1E3C +Lcommaaccent;013B +Ldot;013F +Ldotaccent;013F +Ldotbelow;1E36 +Ldotbelowmacron;1E38 +Liwnarmenian;053C +Lj;01C8 +Ljecyrillic;0409 +Llinebelow;1E3A +Lmonospace;FF2C +Lslash;0141 +Lslashsmall;F6F9 +Lsmall;F76C +M;004D +MBsquare;3386 +Macron;F6D0 +Macronsmall;F7AF +Macute;1E3E +Mcircle;24C2 +Mdotaccent;1E40 +Mdotbelow;1E42 +Menarmenian;0544 +Mmonospace;FF2D +Msmall;F76D +Mturned;019C +Mu;039C +N;004E +NJ;01CA +Nacute;0143 +Ncaron;0147 +Ncedilla;0145 +Ncircle;24C3 +Ncircumflexbelow;1E4A +Ncommaaccent;0145 +Ndotaccent;1E44 +Ndotbelow;1E46 +Nhookleft;019D +Nineroman;2168 +Nj;01CB +Njecyrillic;040A +Nlinebelow;1E48 +Nmonospace;FF2E +Nowarmenian;0546 +Nsmall;F76E +Ntilde;00D1 +Ntildesmall;F7F1 +Nu;039D +O;004F +OE;0152 +OEsmall;F6FA +Oacute;00D3 +Oacutesmall;F7F3 +Obarredcyrillic;04E8 +Obarreddieresiscyrillic;04EA +Obreve;014E +Ocaron;01D1 +Ocenteredtilde;019F +Ocircle;24C4 +Ocircumflex;00D4 +Ocircumflexacute;1ED0 +Ocircumflexdotbelow;1ED8 +Ocircumflexgrave;1ED2 +Ocircumflexhookabove;1ED4 +Ocircumflexsmall;F7F4 +Ocircumflextilde;1ED6 +Ocyrillic;041E +Odblacute;0150 +Odblgrave;020C +Odieresis;00D6 +Odieresiscyrillic;04E6 +Odieresissmall;F7F6 +Odotbelow;1ECC +Ogoneksmall;F6FB +Ograve;00D2 +Ogravesmall;F7F2 +Oharmenian;0555 +Ohm;2126 +Ohookabove;1ECE +Ohorn;01A0 +Ohornacute;1EDA +Ohorndotbelow;1EE2 +Ohorngrave;1EDC +Ohornhookabove;1EDE +Ohorntilde;1EE0 +Ohungarumlaut;0150 +Oi;01A2 +Oinvertedbreve;020E +Omacron;014C +Omacronacute;1E52 +Omacrongrave;1E50 +Omega;2126 +Omegacyrillic;0460 +Omegagreek;03A9 +Omegaroundcyrillic;047A +Omegatitlocyrillic;047C +Omegatonos;038F +Omicron;039F +Omicrontonos;038C +Omonospace;FF2F +Oneroman;2160 +Oogonek;01EA +Oogonekmacron;01EC +Oopen;0186 +Oslash;00D8 +Oslashacute;01FE +Oslashsmall;F7F8 +Osmall;F76F +Ostrokeacute;01FE +Otcyrillic;047E +Otilde;00D5 +Otildeacute;1E4C +Otildedieresis;1E4E +Otildesmall;F7F5 +P;0050 +Pacute;1E54 +Pcircle;24C5 +Pdotaccent;1E56 +Pecyrillic;041F +Peharmenian;054A +Pemiddlehookcyrillic;04A6 +Phi;03A6 +Phook;01A4 +Pi;03A0 +Piwrarmenian;0553 +Pmonospace;FF30 +Psi;03A8 +Psicyrillic;0470 +Psmall;F770 +Q;0051 +Qcircle;24C6 +Qmonospace;FF31 +Qsmall;F771 +R;0052 +Raarmenian;054C +Racute;0154 +Rcaron;0158 +Rcedilla;0156 +Rcircle;24C7 +Rcommaaccent;0156 +Rdblgrave;0210 +Rdotaccent;1E58 +Rdotbelow;1E5A +Rdotbelowmacron;1E5C +Reharmenian;0550 +Rfraktur;211C +Rho;03A1 +Ringsmall;F6FC +Rinvertedbreve;0212 +Rlinebelow;1E5E +Rmonospace;FF32 +Rsmall;F772 +Rsmallinverted;0281 +Rsmallinvertedsuperior;02B6 +S;0053 +SF010000;250C +SF020000;2514 +SF030000;2510 +SF040000;2518 +SF050000;253C +SF060000;252C +SF070000;2534 +SF080000;251C +SF090000;2524 +SF100000;2500 +SF110000;2502 +SF190000;2561 +SF200000;2562 +SF210000;2556 +SF220000;2555 +SF230000;2563 +SF240000;2551 +SF250000;2557 +SF260000;255D +SF270000;255C +SF280000;255B +SF360000;255E +SF370000;255F +SF380000;255A +SF390000;2554 +SF400000;2569 +SF410000;2566 +SF420000;2560 +SF430000;2550 +SF440000;256C +SF450000;2567 +SF460000;2568 +SF470000;2564 +SF480000;2565 +SF490000;2559 +SF500000;2558 +SF510000;2552 +SF520000;2553 +SF530000;256B +SF540000;256A +Sacute;015A +Sacutedotaccent;1E64 +Sampigreek;03E0 +Scaron;0160 +Scarondotaccent;1E66 +Scaronsmall;F6FD +Scedilla;015E +Schwa;018F +Schwacyrillic;04D8 +Schwadieresiscyrillic;04DA +Scircle;24C8 +Scircumflex;015C +Scommaaccent;0218 +Sdotaccent;1E60 +Sdotbelow;1E62 +Sdotbelowdotaccent;1E68 +Seharmenian;054D +Sevenroman;2166 +Shaarmenian;0547 +Shacyrillic;0428 +Shchacyrillic;0429 +Sheicoptic;03E2 +Shhacyrillic;04BA +Shimacoptic;03EC +Sigma;03A3 +Sixroman;2165 +Smonospace;FF33 +Softsigncyrillic;042C +Ssmall;F773 +Stigmagreek;03DA +T;0054 +Tau;03A4 +Tbar;0166 +Tcaron;0164 +Tcedilla;0162 +Tcircle;24C9 +Tcircumflexbelow;1E70 +Tcommaaccent;0162 +Tdotaccent;1E6A +Tdotbelow;1E6C +Tecyrillic;0422 +Tedescendercyrillic;04AC +Tenroman;2169 +Tetsecyrillic;04B4 +Theta;0398 +Thook;01AC +Thorn;00DE +Thornsmall;F7FE +Threeroman;2162 +Tildesmall;F6FE +Tiwnarmenian;054F +Tlinebelow;1E6E +Tmonospace;FF34 +Toarmenian;0539 +Tonefive;01BC +Tonesix;0184 +Tonetwo;01A7 +Tretroflexhook;01AE +Tsecyrillic;0426 +Tshecyrillic;040B +Tsmall;F774 +Twelveroman;216B +Tworoman;2161 +U;0055 +Uacute;00DA +Uacutesmall;F7FA +Ubreve;016C +Ucaron;01D3 +Ucircle;24CA +Ucircumflex;00DB +Ucircumflexbelow;1E76 +Ucircumflexsmall;F7FB +Ucyrillic;0423 +Udblacute;0170 +Udblgrave;0214 +Udieresis;00DC +Udieresisacute;01D7 +Udieresisbelow;1E72 +Udieresiscaron;01D9 +Udieresiscyrillic;04F0 +Udieresisgrave;01DB +Udieresismacron;01D5 +Udieresissmall;F7FC +Udotbelow;1EE4 +Ugrave;00D9 +Ugravesmall;F7F9 +Uhookabove;1EE6 +Uhorn;01AF +Uhornacute;1EE8 +Uhorndotbelow;1EF0 +Uhorngrave;1EEA +Uhornhookabove;1EEC +Uhorntilde;1EEE +Uhungarumlaut;0170 +Uhungarumlautcyrillic;04F2 +Uinvertedbreve;0216 +Ukcyrillic;0478 +Umacron;016A +Umacroncyrillic;04EE +Umacrondieresis;1E7A +Umonospace;FF35 +Uogonek;0172 +Upsilon;03A5 +Upsilon1;03D2 +Upsilonacutehooksymbolgreek;03D3 +Upsilonafrican;01B1 +Upsilondieresis;03AB +Upsilondieresishooksymbolgreek;03D4 +Upsilonhooksymbol;03D2 +Upsilontonos;038E +Uring;016E +Ushortcyrillic;040E +Usmall;F775 +Ustraightcyrillic;04AE +Ustraightstrokecyrillic;04B0 +Utilde;0168 +Utildeacute;1E78 +Utildebelow;1E74 +V;0056 +Vcircle;24CB +Vdotbelow;1E7E +Vecyrillic;0412 +Vewarmenian;054E +Vhook;01B2 +Vmonospace;FF36 +Voarmenian;0548 +Vsmall;F776 +Vtilde;1E7C +W;0057 +Wacute;1E82 +Wcircle;24CC +Wcircumflex;0174 +Wdieresis;1E84 +Wdotaccent;1E86 +Wdotbelow;1E88 +Wgrave;1E80 +Wmonospace;FF37 +Wsmall;F777 +X;0058 +Xcircle;24CD +Xdieresis;1E8C +Xdotaccent;1E8A +Xeharmenian;053D +Xi;039E +Xmonospace;FF38 +Xsmall;F778 +Y;0059 +Yacute;00DD +Yacutesmall;F7FD +Yatcyrillic;0462 +Ycircle;24CE +Ycircumflex;0176 +Ydieresis;0178 +Ydieresissmall;F7FF +Ydotaccent;1E8E +Ydotbelow;1EF4 +Yericyrillic;042B +Yerudieresiscyrillic;04F8 +Ygrave;1EF2 +Yhook;01B3 +Yhookabove;1EF6 +Yiarmenian;0545 +Yicyrillic;0407 +Yiwnarmenian;0552 +Ymonospace;FF39 +Ysmall;F779 +Ytilde;1EF8 +Yusbigcyrillic;046A +Yusbigiotifiedcyrillic;046C +Yuslittlecyrillic;0466 +Yuslittleiotifiedcyrillic;0468 +Z;005A +Zaarmenian;0536 +Zacute;0179 +Zcaron;017D +Zcaronsmall;F6FF +Zcircle;24CF +Zcircumflex;1E90 +Zdot;017B +Zdotaccent;017B +Zdotbelow;1E92 +Zecyrillic;0417 +Zedescendercyrillic;0498 +Zedieresiscyrillic;04DE +Zeta;0396 +Zhearmenian;053A +Zhebrevecyrillic;04C1 +Zhecyrillic;0416 +Zhedescendercyrillic;0496 +Zhedieresiscyrillic;04DC +Zlinebelow;1E94 +Zmonospace;FF3A +Zsmall;F77A +Zstroke;01B5 +a;0061 +aabengali;0986 +aacute;00E1 +aadeva;0906 +aagujarati;0A86 +aagurmukhi;0A06 +aamatragurmukhi;0A3E +aarusquare;3303 +aavowelsignbengali;09BE +aavowelsigndeva;093E +aavowelsigngujarati;0ABE +abbreviationmarkarmenian;055F +abbreviationsigndeva;0970 +abengali;0985 +abopomofo;311A +abreve;0103 +abreveacute;1EAF +abrevecyrillic;04D1 +abrevedotbelow;1EB7 +abrevegrave;1EB1 +abrevehookabove;1EB3 +abrevetilde;1EB5 +acaron;01CE +acircle;24D0 +acircumflex;00E2 +acircumflexacute;1EA5 +acircumflexdotbelow;1EAD +acircumflexgrave;1EA7 +acircumflexhookabove;1EA9 +acircumflextilde;1EAB +acute;00B4 +acutebelowcmb;0317 +acutecmb;0301 +acutecomb;0301 +acutedeva;0954 +acutelowmod;02CF +acutetonecmb;0341 +acyrillic;0430 +adblgrave;0201 +addakgurmukhi;0A71 +adeva;0905 +adieresis;00E4 +adieresiscyrillic;04D3 +adieresismacron;01DF +adotbelow;1EA1 +adotmacron;01E1 +ae;00E6 +aeacute;01FD +aekorean;3150 +aemacron;01E3 +afii00208;2015 +afii08941;20A4 +afii10017;0410 +afii10018;0411 +afii10019;0412 +afii10020;0413 +afii10021;0414 +afii10022;0415 +afii10023;0401 +afii10024;0416 +afii10025;0417 +afii10026;0418 +afii10027;0419 +afii10028;041A +afii10029;041B +afii10030;041C +afii10031;041D +afii10032;041E +afii10033;041F +afii10034;0420 +afii10035;0421 +afii10036;0422 +afii10037;0423 +afii10038;0424 +afii10039;0425 +afii10040;0426 +afii10041;0427 +afii10042;0428 +afii10043;0429 +afii10044;042A +afii10045;042B +afii10046;042C +afii10047;042D +afii10048;042E +afii10049;042F +afii10050;0490 +afii10051;0402 +afii10052;0403 +afii10053;0404 +afii10054;0405 +afii10055;0406 +afii10056;0407 +afii10057;0408 +afii10058;0409 +afii10059;040A +afii10060;040B +afii10061;040C +afii10062;040E +afii10063;F6C4 +afii10064;F6C5 +afii10065;0430 +afii10066;0431 +afii10067;0432 +afii10068;0433 +afii10069;0434 +afii10070;0435 +afii10071;0451 +afii10072;0436 +afii10073;0437 +afii10074;0438 +afii10075;0439 +afii10076;043A +afii10077;043B +afii10078;043C +afii10079;043D +afii10080;043E +afii10081;043F +afii10082;0440 +afii10083;0441 +afii10084;0442 +afii10085;0443 +afii10086;0444 +afii10087;0445 +afii10088;0446 +afii10089;0447 +afii10090;0448 +afii10091;0449 +afii10092;044A +afii10093;044B +afii10094;044C +afii10095;044D +afii10096;044E +afii10097;044F +afii10098;0491 +afii10099;0452 +afii10100;0453 +afii10101;0454 +afii10102;0455 +afii10103;0456 +afii10104;0457 +afii10105;0458 +afii10106;0459 +afii10107;045A +afii10108;045B +afii10109;045C +afii10110;045E +afii10145;040F +afii10146;0462 +afii10147;0472 +afii10148;0474 +afii10192;F6C6 +afii10193;045F +afii10194;0463 +afii10195;0473 +afii10196;0475 +afii10831;F6C7 +afii10832;F6C8 +afii10846;04D9 +afii299;200E +afii300;200F +afii301;200D +afii57381;066A +afii57388;060C +afii57392;0660 +afii57393;0661 +afii57394;0662 +afii57395;0663 +afii57396;0664 +afii57397;0665 +afii57398;0666 +afii57399;0667 +afii57400;0668 +afii57401;0669 +afii57403;061B +afii57407;061F +afii57409;0621 +afii57410;0622 +afii57411;0623 +afii57412;0624 +afii57413;0625 +afii57414;0626 +afii57415;0627 +afii57416;0628 +afii57417;0629 +afii57418;062A +afii57419;062B +afii57420;062C +afii57421;062D +afii57422;062E +afii57423;062F +afii57424;0630 +afii57425;0631 +afii57426;0632 +afii57427;0633 +afii57428;0634 +afii57429;0635 +afii57430;0636 +afii57431;0637 +afii57432;0638 +afii57433;0639 +afii57434;063A +afii57440;0640 +afii57441;0641 +afii57442;0642 +afii57443;0643 +afii57444;0644 +afii57445;0645 +afii57446;0646 +afii57448;0648 +afii57449;0649 +afii57450;064A +afii57451;064B +afii57452;064C +afii57453;064D +afii57454;064E +afii57455;064F +afii57456;0650 +afii57457;0651 +afii57458;0652 +afii57470;0647 +afii57505;06A4 +afii57506;067E +afii57507;0686 +afii57508;0698 +afii57509;06AF +afii57511;0679 +afii57512;0688 +afii57513;0691 +afii57514;06BA +afii57519;06D2 +afii57534;06D5 +afii57636;20AA +afii57645;05BE +afii57658;05C3 +afii57664;05D0 +afii57665;05D1 +afii57666;05D2 +afii57667;05D3 +afii57668;05D4 +afii57669;05D5 +afii57670;05D6 +afii57671;05D7 +afii57672;05D8 +afii57673;05D9 +afii57674;05DA +afii57675;05DB +afii57676;05DC +afii57677;05DD +afii57678;05DE +afii57679;05DF +afii57680;05E0 +afii57681;05E1 +afii57682;05E2 +afii57683;05E3 +afii57684;05E4 +afii57685;05E5 +afii57686;05E6 +afii57687;05E7 +afii57688;05E8 +afii57689;05E9 +afii57690;05EA +afii57694;FB2A +afii57695;FB2B +afii57700;FB4B +afii57705;FB1F +afii57716;05F0 +afii57717;05F1 +afii57718;05F2 +afii57723;FB35 +afii57793;05B4 +afii57794;05B5 +afii57795;05B6 +afii57796;05BB +afii57797;05B8 +afii57798;05B7 +afii57799;05B0 +afii57800;05B2 +afii57801;05B1 +afii57802;05B3 +afii57803;05C2 +afii57804;05C1 +afii57806;05B9 +afii57807;05BC +afii57839;05BD +afii57841;05BF +afii57842;05C0 +afii57929;02BC +afii61248;2105 +afii61289;2113 +afii61352;2116 +afii61573;202C +afii61574;202D +afii61575;202E +afii61664;200C +afii63167;066D +afii64937;02BD +agrave;00E0 +agujarati;0A85 +agurmukhi;0A05 +ahiragana;3042 +ahookabove;1EA3 +aibengali;0990 +aibopomofo;311E +aideva;0910 +aiecyrillic;04D5 +aigujarati;0A90 +aigurmukhi;0A10 +aimatragurmukhi;0A48 +ainarabic;0639 +ainfinalarabic;FECA +aininitialarabic;FECB +ainmedialarabic;FECC +ainvertedbreve;0203 +aivowelsignbengali;09C8 +aivowelsigndeva;0948 +aivowelsigngujarati;0AC8 +akatakana;30A2 +akatakanahalfwidth;FF71 +akorean;314F +alef;05D0 +alefarabic;0627 +alefdageshhebrew;FB30 +aleffinalarabic;FE8E +alefhamzaabovearabic;0623 +alefhamzaabovefinalarabic;FE84 +alefhamzabelowarabic;0625 +alefhamzabelowfinalarabic;FE88 +alefhebrew;05D0 +aleflamedhebrew;FB4F +alefmaddaabovearabic;0622 +alefmaddaabovefinalarabic;FE82 +alefmaksuraarabic;0649 +alefmaksurafinalarabic;FEF0 +alefmaksurainitialarabic;FEF3 +alefmaksuramedialarabic;FEF4 +alefpatahhebrew;FB2E +alefqamatshebrew;FB2F +aleph;2135 +allequal;224C +alpha;03B1 +alphatonos;03AC +amacron;0101 +amonospace;FF41 +ampersand;0026 +ampersandmonospace;FF06 +ampersandsmall;F726 +amsquare;33C2 +anbopomofo;3122 +angbopomofo;3124 +angkhankhuthai;0E5A +angle;2220 +anglebracketleft;3008 +anglebracketleftvertical;FE3F +anglebracketright;3009 +anglebracketrightvertical;FE40 +angleleft;2329 +angleright;232A +angstrom;212B +anoteleia;0387 +anudattadeva;0952 +anusvarabengali;0982 +anusvaradeva;0902 +anusvaragujarati;0A82 +aogonek;0105 +apaatosquare;3300 +aparen;249C +apostrophearmenian;055A +apostrophemod;02BC +apple;F8FF +approaches;2250 +approxequal;2248 +approxequalorimage;2252 +approximatelyequal;2245 +araeaekorean;318E +araeakorean;318D +arc;2312 +arighthalfring;1E9A +aring;00E5 +aringacute;01FB +aringbelow;1E01 +arrowboth;2194 +arrowdashdown;21E3 +arrowdashleft;21E0 +arrowdashright;21E2 +arrowdashup;21E1 +arrowdblboth;21D4 +arrowdbldown;21D3 +arrowdblleft;21D0 +arrowdblright;21D2 +arrowdblup;21D1 +arrowdown;2193 +arrowdownleft;2199 +arrowdownright;2198 +arrowdownwhite;21E9 +arrowheaddownmod;02C5 +arrowheadleftmod;02C2 +arrowheadrightmod;02C3 +arrowheadupmod;02C4 +arrowhorizex;F8E7 +arrowleft;2190 +arrowleftdbl;21D0 +arrowleftdblstroke;21CD +arrowleftoverright;21C6 +arrowleftwhite;21E6 +arrowright;2192 +arrowrightdblstroke;21CF +arrowrightheavy;279E +arrowrightoverleft;21C4 +arrowrightwhite;21E8 +arrowtableft;21E4 +arrowtabright;21E5 +arrowup;2191 +arrowupdn;2195 +arrowupdnbse;21A8 +arrowupdownbase;21A8 +arrowupleft;2196 +arrowupleftofdown;21C5 +arrowupright;2197 +arrowupwhite;21E7 +arrowvertex;F8E6 +asciicircum;005E +asciicircummonospace;FF3E +asciitilde;007E +asciitildemonospace;FF5E +ascript;0251 +ascriptturned;0252 +asmallhiragana;3041 +asmallkatakana;30A1 +asmallkatakanahalfwidth;FF67 +asterisk;002A +asteriskaltonearabic;066D +asteriskarabic;066D +asteriskmath;2217 +asteriskmonospace;FF0A +asterisksmall;FE61 +asterism;2042 +asuperior;F6E9 +asymptoticallyequal;2243 +at;0040 +atilde;00E3 +atmonospace;FF20 +atsmall;FE6B +aturned;0250 +aubengali;0994 +aubopomofo;3120 +audeva;0914 +augujarati;0A94 +augurmukhi;0A14 +aulengthmarkbengali;09D7 +aumatragurmukhi;0A4C +auvowelsignbengali;09CC +auvowelsigndeva;094C +auvowelsigngujarati;0ACC +avagrahadeva;093D +aybarmenian;0561 +ayin;05E2 +ayinaltonehebrew;FB20 +ayinhebrew;05E2 +b;0062 +babengali;09AC +backslash;005C +backslashmonospace;FF3C +badeva;092C +bagujarati;0AAC +bagurmukhi;0A2C +bahiragana;3070 +bahtthai;0E3F +bakatakana;30D0 +bar;007C +barmonospace;FF5C +bbopomofo;3105 +bcircle;24D1 +bdotaccent;1E03 +bdotbelow;1E05 +beamedsixteenthnotes;266C +because;2235 +becyrillic;0431 +beharabic;0628 +behfinalarabic;FE90 +behinitialarabic;FE91 +behiragana;3079 +behmedialarabic;FE92 +behmeeminitialarabic;FC9F +behmeemisolatedarabic;FC08 +behnoonfinalarabic;FC6D +bekatakana;30D9 +benarmenian;0562 +bet;05D1 +beta;03B2 +betasymbolgreek;03D0 +betdagesh;FB31 +betdageshhebrew;FB31 +bethebrew;05D1 +betrafehebrew;FB4C +bhabengali;09AD +bhadeva;092D +bhagujarati;0AAD +bhagurmukhi;0A2D +bhook;0253 +bihiragana;3073 +bikatakana;30D3 +bilabialclick;0298 +bindigurmukhi;0A02 +birusquare;3331 +blackcircle;25CF +blackdiamond;25C6 +blackdownpointingtriangle;25BC +blackleftpointingpointer;25C4 +blackleftpointingtriangle;25C0 +blacklenticularbracketleft;3010 +blacklenticularbracketleftvertical;FE3B +blacklenticularbracketright;3011 +blacklenticularbracketrightvertical;FE3C +blacklowerlefttriangle;25E3 +blacklowerrighttriangle;25E2 +blackrectangle;25AC +blackrightpointingpointer;25BA +blackrightpointingtriangle;25B6 +blacksmallsquare;25AA +blacksmilingface;263B +blacksquare;25A0 +blackstar;2605 +blackupperlefttriangle;25E4 +blackupperrighttriangle;25E5 +blackuppointingsmalltriangle;25B4 +blackuppointingtriangle;25B2 +blank;2423 +blinebelow;1E07 +block;2588 +bmonospace;FF42 +bobaimaithai;0E1A +bohiragana;307C +bokatakana;30DC +bparen;249D +bqsquare;33C3 +braceex;F8F4 +braceleft;007B +braceleftbt;F8F3 +braceleftmid;F8F2 +braceleftmonospace;FF5B +braceleftsmall;FE5B +bracelefttp;F8F1 +braceleftvertical;FE37 +braceright;007D +bracerightbt;F8FE +bracerightmid;F8FD +bracerightmonospace;FF5D +bracerightsmall;FE5C +bracerighttp;F8FC +bracerightvertical;FE38 +bracketleft;005B +bracketleftbt;F8F0 +bracketleftex;F8EF +bracketleftmonospace;FF3B +bracketlefttp;F8EE +bracketright;005D +bracketrightbt;F8FB +bracketrightex;F8FA +bracketrightmonospace;FF3D +bracketrighttp;F8F9 +breve;02D8 +brevebelowcmb;032E +brevecmb;0306 +breveinvertedbelowcmb;032F +breveinvertedcmb;0311 +breveinverteddoublecmb;0361 +bridgebelowcmb;032A +bridgeinvertedbelowcmb;033A +brokenbar;00A6 +bstroke;0180 +bsuperior;F6EA +btopbar;0183 +buhiragana;3076 +bukatakana;30D6 +bullet;2022 +bulletinverse;25D8 +bulletoperator;2219 +bullseye;25CE +c;0063 +caarmenian;056E +cabengali;099A +cacute;0107 +cadeva;091A +cagujarati;0A9A +cagurmukhi;0A1A +calsquare;3388 +candrabindubengali;0981 +candrabinducmb;0310 +candrabindudeva;0901 +candrabindugujarati;0A81 +capslock;21EA +careof;2105 +caron;02C7 +caronbelowcmb;032C +caroncmb;030C +carriagereturn;21B5 +cbopomofo;3118 +ccaron;010D +ccedilla;00E7 +ccedillaacute;1E09 +ccircle;24D2 +ccircumflex;0109 +ccurl;0255 +cdot;010B +cdotaccent;010B +cdsquare;33C5 +cedilla;00B8 +cedillacmb;0327 +cent;00A2 +centigrade;2103 +centinferior;F6DF +centmonospace;FFE0 +centoldstyle;F7A2 +centsuperior;F6E0 +chaarmenian;0579 +chabengali;099B +chadeva;091B +chagujarati;0A9B +chagurmukhi;0A1B +chbopomofo;3114 +cheabkhasiancyrillic;04BD +checkmark;2713 +checyrillic;0447 +chedescenderabkhasiancyrillic;04BF +chedescendercyrillic;04B7 +chedieresiscyrillic;04F5 +cheharmenian;0573 +chekhakassiancyrillic;04CC +cheverticalstrokecyrillic;04B9 +chi;03C7 +chieuchacirclekorean;3277 +chieuchaparenkorean;3217 +chieuchcirclekorean;3269 +chieuchkorean;314A +chieuchparenkorean;3209 +chochangthai;0E0A +chochanthai;0E08 +chochingthai;0E09 +chochoethai;0E0C +chook;0188 +cieucacirclekorean;3276 +cieucaparenkorean;3216 +cieuccirclekorean;3268 +cieuckorean;3148 +cieucparenkorean;3208 +cieucuparenkorean;321C +circle;25CB +circlemultiply;2297 +circleot;2299 +circleplus;2295 +circlepostalmark;3036 +circlewithlefthalfblack;25D0 +circlewithrighthalfblack;25D1 +circumflex;02C6 +circumflexbelowcmb;032D +circumflexcmb;0302 +clear;2327 +clickalveolar;01C2 +clickdental;01C0 +clicklateral;01C1 +clickretroflex;01C3 +club;2663 +clubsuitblack;2663 +clubsuitwhite;2667 +cmcubedsquare;33A4 +cmonospace;FF43 +cmsquaredsquare;33A0 +coarmenian;0581 +colon;003A +colonmonetary;20A1 +colonmonospace;FF1A +colonsign;20A1 +colonsmall;FE55 +colontriangularhalfmod;02D1 +colontriangularmod;02D0 +comma;002C +commaabovecmb;0313 +commaaboverightcmb;0315 +commaaccent;F6C3 +commaarabic;060C +commaarmenian;055D +commainferior;F6E1 +commamonospace;FF0C +commareversedabovecmb;0314 +commareversedmod;02BD +commasmall;FE50 +commasuperior;F6E2 +commaturnedabovecmb;0312 +commaturnedmod;02BB +compass;263C +congruent;2245 +contourintegral;222E +control;2303 +controlACK;0006 +controlBEL;0007 +controlBS;0008 +controlCAN;0018 +controlCR;000D +controlDC1;0011 +controlDC2;0012 +controlDC3;0013 +controlDC4;0014 +controlDEL;007F +controlDLE;0010 +controlEM;0019 +controlENQ;0005 +controlEOT;0004 +controlESC;001B +controlETB;0017 +controlETX;0003 +controlFF;000C +controlFS;001C +controlGS;001D +controlHT;0009 +controlLF;000A +controlNAK;0015 +controlRS;001E +controlSI;000F +controlSO;000E +controlSOT;0002 +controlSTX;0001 +controlSUB;001A +controlSYN;0016 +controlUS;001F +controlVT;000B +copyright;00A9 +copyrightsans;F8E9 +copyrightserif;F6D9 +cornerbracketleft;300C +cornerbracketlefthalfwidth;FF62 +cornerbracketleftvertical;FE41 +cornerbracketright;300D +cornerbracketrighthalfwidth;FF63 +cornerbracketrightvertical;FE42 +corporationsquare;337F +cosquare;33C7 +coverkgsquare;33C6 +cparen;249E +cruzeiro;20A2 +cstretched;0297 +curlyand;22CF +curlyor;22CE +currency;00A4 +cyrBreve;F6D1 +cyrFlex;F6D2 +cyrbreve;F6D4 +cyrflex;F6D5 +d;0064 +daarmenian;0564 +dabengali;09A6 +dadarabic;0636 +dadeva;0926 +dadfinalarabic;FEBE +dadinitialarabic;FEBF +dadmedialarabic;FEC0 +dagesh;05BC +dageshhebrew;05BC +dagger;2020 +daggerdbl;2021 +dagujarati;0AA6 +dagurmukhi;0A26 +dahiragana;3060 +dakatakana;30C0 +dalarabic;062F +dalet;05D3 +daletdagesh;FB33 +daletdageshhebrew;FB33 +dalethatafpatah;05D3 05B2 +dalethatafpatahhebrew;05D3 05B2 +dalethatafsegol;05D3 05B1 +dalethatafsegolhebrew;05D3 05B1 +dalethebrew;05D3 +dalethiriq;05D3 05B4 +dalethiriqhebrew;05D3 05B4 +daletholam;05D3 05B9 +daletholamhebrew;05D3 05B9 +daletpatah;05D3 05B7 +daletpatahhebrew;05D3 05B7 +daletqamats;05D3 05B8 +daletqamatshebrew;05D3 05B8 +daletqubuts;05D3 05BB +daletqubutshebrew;05D3 05BB +daletsegol;05D3 05B6 +daletsegolhebrew;05D3 05B6 +daletsheva;05D3 05B0 +daletshevahebrew;05D3 05B0 +dalettsere;05D3 05B5 +dalettserehebrew;05D3 05B5 +dalfinalarabic;FEAA +dammaarabic;064F +dammalowarabic;064F +dammatanaltonearabic;064C +dammatanarabic;064C +danda;0964 +dargahebrew;05A7 +dargalefthebrew;05A7 +dasiapneumatacyrilliccmb;0485 +dblGrave;F6D3 +dblanglebracketleft;300A +dblanglebracketleftvertical;FE3D +dblanglebracketright;300B +dblanglebracketrightvertical;FE3E +dblarchinvertedbelowcmb;032B +dblarrowleft;21D4 +dblarrowright;21D2 +dbldanda;0965 +dblgrave;F6D6 +dblgravecmb;030F +dblintegral;222C +dbllowline;2017 +dbllowlinecmb;0333 +dbloverlinecmb;033F +dblprimemod;02BA +dblverticalbar;2016 +dblverticallineabovecmb;030E +dbopomofo;3109 +dbsquare;33C8 +dcaron;010F +dcedilla;1E11 +dcircle;24D3 +dcircumflexbelow;1E13 +dcroat;0111 +ddabengali;09A1 +ddadeva;0921 +ddagujarati;0AA1 +ddagurmukhi;0A21 +ddalarabic;0688 +ddalfinalarabic;FB89 +dddhadeva;095C +ddhabengali;09A2 +ddhadeva;0922 +ddhagujarati;0AA2 +ddhagurmukhi;0A22 +ddotaccent;1E0B +ddotbelow;1E0D +decimalseparatorarabic;066B +decimalseparatorpersian;066B +decyrillic;0434 +degree;00B0 +dehihebrew;05AD +dehiragana;3067 +deicoptic;03EF +dekatakana;30C7 +deleteleft;232B +deleteright;2326 +delta;03B4 +deltaturned;018D +denominatorminusonenumeratorbengali;09F8 +dezh;02A4 +dhabengali;09A7 +dhadeva;0927 +dhagujarati;0AA7 +dhagurmukhi;0A27 +dhook;0257 +dialytikatonos;0385 +dialytikatonoscmb;0344 +diamond;2666 +diamondsuitwhite;2662 +dieresis;00A8 +dieresisacute;F6D7 +dieresisbelowcmb;0324 +dieresiscmb;0308 +dieresisgrave;F6D8 +dieresistonos;0385 +dihiragana;3062 +dikatakana;30C2 +dittomark;3003 +divide;00F7 +divides;2223 +divisionslash;2215 +djecyrillic;0452 +dkshade;2593 +dlinebelow;1E0F +dlsquare;3397 +dmacron;0111 +dmonospace;FF44 +dnblock;2584 +dochadathai;0E0E +dodekthai;0E14 +dohiragana;3069 +dokatakana;30C9 +dollar;0024 +dollarinferior;F6E3 +dollarmonospace;FF04 +dollaroldstyle;F724 +dollarsmall;FE69 +dollarsuperior;F6E4 +dong;20AB +dorusquare;3326 +dotaccent;02D9 +dotaccentcmb;0307 +dotbelowcmb;0323 +dotbelowcomb;0323 +dotkatakana;30FB +dotlessi;0131 +dotlessj;F6BE +dotlessjstrokehook;0284 +dotmath;22C5 +dottedcircle;25CC +doubleyodpatah;FB1F +doubleyodpatahhebrew;FB1F +downtackbelowcmb;031E +downtackmod;02D5 +dparen;249F +dsuperior;F6EB +dtail;0256 +dtopbar;018C +duhiragana;3065 +dukatakana;30C5 +dz;01F3 +dzaltone;02A3 +dzcaron;01C6 +dzcurl;02A5 +dzeabkhasiancyrillic;04E1 +dzecyrillic;0455 +dzhecyrillic;045F +e;0065 +eacute;00E9 +earth;2641 +ebengali;098F +ebopomofo;311C +ebreve;0115 +ecandradeva;090D +ecandragujarati;0A8D +ecandravowelsigndeva;0945 +ecandravowelsigngujarati;0AC5 +ecaron;011B +ecedillabreve;1E1D +echarmenian;0565 +echyiwnarmenian;0587 +ecircle;24D4 +ecircumflex;00EA +ecircumflexacute;1EBF +ecircumflexbelow;1E19 +ecircumflexdotbelow;1EC7 +ecircumflexgrave;1EC1 +ecircumflexhookabove;1EC3 +ecircumflextilde;1EC5 +ecyrillic;0454 +edblgrave;0205 +edeva;090F +edieresis;00EB +edot;0117 +edotaccent;0117 +edotbelow;1EB9 +eegurmukhi;0A0F +eematragurmukhi;0A47 +efcyrillic;0444 +egrave;00E8 +egujarati;0A8F +eharmenian;0567 +ehbopomofo;311D +ehiragana;3048 +ehookabove;1EBB +eibopomofo;311F +eight;0038 +eightarabic;0668 +eightbengali;09EE +eightcircle;2467 +eightcircleinversesansserif;2791 +eightdeva;096E +eighteencircle;2471 +eighteenparen;2485 +eighteenperiod;2499 +eightgujarati;0AEE +eightgurmukhi;0A6E +eighthackarabic;0668 +eighthangzhou;3028 +eighthnotebeamed;266B +eightideographicparen;3227 +eightinferior;2088 +eightmonospace;FF18 +eightoldstyle;F738 +eightparen;247B +eightperiod;248F +eightpersian;06F8 +eightroman;2177 +eightsuperior;2078 +eightthai;0E58 +einvertedbreve;0207 +eiotifiedcyrillic;0465 +ekatakana;30A8 +ekatakanahalfwidth;FF74 +ekonkargurmukhi;0A74 +ekorean;3154 +elcyrillic;043B +element;2208 +elevencircle;246A +elevenparen;247E +elevenperiod;2492 +elevenroman;217A +ellipsis;2026 +ellipsisvertical;22EE +emacron;0113 +emacronacute;1E17 +emacrongrave;1E15 +emcyrillic;043C +emdash;2014 +emdashvertical;FE31 +emonospace;FF45 +emphasismarkarmenian;055B +emptyset;2205 +enbopomofo;3123 +encyrillic;043D +endash;2013 +endashvertical;FE32 +endescendercyrillic;04A3 +eng;014B +engbopomofo;3125 +enghecyrillic;04A5 +enhookcyrillic;04C8 +enspace;2002 +eogonek;0119 +eokorean;3153 +eopen;025B +eopenclosed;029A +eopenreversed;025C +eopenreversedclosed;025E +eopenreversedhook;025D +eparen;24A0 +epsilon;03B5 +epsilontonos;03AD +equal;003D +equalmonospace;FF1D +equalsmall;FE66 +equalsuperior;207C +equivalence;2261 +erbopomofo;3126 +ercyrillic;0440 +ereversed;0258 +ereversedcyrillic;044D +escyrillic;0441 +esdescendercyrillic;04AB +esh;0283 +eshcurl;0286 +eshortdeva;090E +eshortvowelsigndeva;0946 +eshreversedloop;01AA +eshsquatreversed;0285 +esmallhiragana;3047 +esmallkatakana;30A7 +esmallkatakanahalfwidth;FF6A +estimated;212E +esuperior;F6EC +eta;03B7 +etarmenian;0568 +etatonos;03AE +eth;00F0 +etilde;1EBD +etildebelow;1E1B +etnahtafoukhhebrew;0591 +etnahtafoukhlefthebrew;0591 +etnahtahebrew;0591 +etnahtalefthebrew;0591 +eturned;01DD +eukorean;3161 +euro;20AC +evowelsignbengali;09C7 +evowelsigndeva;0947 +evowelsigngujarati;0AC7 +exclam;0021 +exclamarmenian;055C +exclamdbl;203C +exclamdown;00A1 +exclamdownsmall;F7A1 +exclammonospace;FF01 +exclamsmall;F721 +existential;2203 +ezh;0292 +ezhcaron;01EF +ezhcurl;0293 +ezhreversed;01B9 +ezhtail;01BA +f;0066 +fadeva;095E +fagurmukhi;0A5E +fahrenheit;2109 +fathaarabic;064E +fathalowarabic;064E +fathatanarabic;064B +fbopomofo;3108 +fcircle;24D5 +fdotaccent;1E1F +feharabic;0641 +feharmenian;0586 +fehfinalarabic;FED2 +fehinitialarabic;FED3 +fehmedialarabic;FED4 +feicoptic;03E5 +female;2640 +ff;FB00 +ffi;FB03 +ffl;FB04 +fi;FB01 +fifteencircle;246E +fifteenparen;2482 +fifteenperiod;2496 +figuredash;2012 +filledbox;25A0 +filledrect;25AC +finalkaf;05DA +finalkafdagesh;FB3A +finalkafdageshhebrew;FB3A +finalkafhebrew;05DA +finalkafqamats;05DA 05B8 +finalkafqamatshebrew;05DA 05B8 +finalkafsheva;05DA 05B0 +finalkafshevahebrew;05DA 05B0 +finalmem;05DD +finalmemhebrew;05DD +finalnun;05DF +finalnunhebrew;05DF +finalpe;05E3 +finalpehebrew;05E3 +finaltsadi;05E5 +finaltsadihebrew;05E5 +firsttonechinese;02C9 +fisheye;25C9 +fitacyrillic;0473 +five;0035 +fivearabic;0665 +fivebengali;09EB +fivecircle;2464 +fivecircleinversesansserif;278E +fivedeva;096B +fiveeighths;215D +fivegujarati;0AEB +fivegurmukhi;0A6B +fivehackarabic;0665 +fivehangzhou;3025 +fiveideographicparen;3224 +fiveinferior;2085 +fivemonospace;FF15 +fiveoldstyle;F735 +fiveparen;2478 +fiveperiod;248C +fivepersian;06F5 +fiveroman;2174 +fivesuperior;2075 +fivethai;0E55 +fl;FB02 +florin;0192 +fmonospace;FF46 +fmsquare;3399 +fofanthai;0E1F +fofathai;0E1D +fongmanthai;0E4F +forall;2200 +four;0034 +fourarabic;0664 +fourbengali;09EA +fourcircle;2463 +fourcircleinversesansserif;278D +fourdeva;096A +fourgujarati;0AEA +fourgurmukhi;0A6A +fourhackarabic;0664 +fourhangzhou;3024 +fourideographicparen;3223 +fourinferior;2084 +fourmonospace;FF14 +fournumeratorbengali;09F7 +fouroldstyle;F734 +fourparen;2477 +fourperiod;248B +fourpersian;06F4 +fourroman;2173 +foursuperior;2074 +fourteencircle;246D +fourteenparen;2481 +fourteenperiod;2495 +fourthai;0E54 +fourthtonechinese;02CB +fparen;24A1 +fraction;2044 +franc;20A3 +g;0067 +gabengali;0997 +gacute;01F5 +gadeva;0917 +gafarabic;06AF +gaffinalarabic;FB93 +gafinitialarabic;FB94 +gafmedialarabic;FB95 +gagujarati;0A97 +gagurmukhi;0A17 +gahiragana;304C +gakatakana;30AC +gamma;03B3 +gammalatinsmall;0263 +gammasuperior;02E0 +gangiacoptic;03EB +gbopomofo;310D +gbreve;011F +gcaron;01E7 +gcedilla;0123 +gcircle;24D6 +gcircumflex;011D +gcommaaccent;0123 +gdot;0121 +gdotaccent;0121 +gecyrillic;0433 +gehiragana;3052 +gekatakana;30B2 +geometricallyequal;2251 +gereshaccenthebrew;059C +gereshhebrew;05F3 +gereshmuqdamhebrew;059D +germandbls;00DF +gershayimaccenthebrew;059E +gershayimhebrew;05F4 +getamark;3013 +ghabengali;0998 +ghadarmenian;0572 +ghadeva;0918 +ghagujarati;0A98 +ghagurmukhi;0A18 +ghainarabic;063A +ghainfinalarabic;FECE +ghaininitialarabic;FECF +ghainmedialarabic;FED0 +ghemiddlehookcyrillic;0495 +ghestrokecyrillic;0493 +gheupturncyrillic;0491 +ghhadeva;095A +ghhagurmukhi;0A5A +ghook;0260 +ghzsquare;3393 +gihiragana;304E +gikatakana;30AE +gimarmenian;0563 +gimel;05D2 +gimeldagesh;FB32 +gimeldageshhebrew;FB32 +gimelhebrew;05D2 +gjecyrillic;0453 +glottalinvertedstroke;01BE +glottalstop;0294 +glottalstopinverted;0296 +glottalstopmod;02C0 +glottalstopreversed;0295 +glottalstopreversedmod;02C1 +glottalstopreversedsuperior;02E4 +glottalstopstroke;02A1 +glottalstopstrokereversed;02A2 +gmacron;1E21 +gmonospace;FF47 +gohiragana;3054 +gokatakana;30B4 +gparen;24A2 +gpasquare;33AC +gradient;2207 +grave;0060 +gravebelowcmb;0316 +gravecmb;0300 +gravecomb;0300 +gravedeva;0953 +gravelowmod;02CE +gravemonospace;FF40 +gravetonecmb;0340 +greater;003E +greaterequal;2265 +greaterequalorless;22DB +greatermonospace;FF1E +greaterorequivalent;2273 +greaterorless;2277 +greateroverequal;2267 +greatersmall;FE65 +gscript;0261 +gstroke;01E5 +guhiragana;3050 +guillemotleft;00AB +guillemotright;00BB +guilsinglleft;2039 +guilsinglright;203A +gukatakana;30B0 +guramusquare;3318 +gysquare;33C9 +h;0068 +haabkhasiancyrillic;04A9 +haaltonearabic;06C1 +habengali;09B9 +hadescendercyrillic;04B3 +hadeva;0939 +hagujarati;0AB9 +hagurmukhi;0A39 +haharabic;062D +hahfinalarabic;FEA2 +hahinitialarabic;FEA3 +hahiragana;306F +hahmedialarabic;FEA4 +haitusquare;332A +hakatakana;30CF +hakatakanahalfwidth;FF8A +halantgurmukhi;0A4D +hamzaarabic;0621 +hamzadammaarabic;0621 064F +hamzadammatanarabic;0621 064C +hamzafathaarabic;0621 064E +hamzafathatanarabic;0621 064B +hamzalowarabic;0621 +hamzalowkasraarabic;0621 0650 +hamzalowkasratanarabic;0621 064D +hamzasukunarabic;0621 0652 +hangulfiller;3164 +hardsigncyrillic;044A +harpoonleftbarbup;21BC +harpoonrightbarbup;21C0 +hasquare;33CA +hatafpatah;05B2 +hatafpatah16;05B2 +hatafpatah23;05B2 +hatafpatah2f;05B2 +hatafpatahhebrew;05B2 +hatafpatahnarrowhebrew;05B2 +hatafpatahquarterhebrew;05B2 +hatafpatahwidehebrew;05B2 +hatafqamats;05B3 +hatafqamats1b;05B3 +hatafqamats28;05B3 +hatafqamats34;05B3 +hatafqamatshebrew;05B3 +hatafqamatsnarrowhebrew;05B3 +hatafqamatsquarterhebrew;05B3 +hatafqamatswidehebrew;05B3 +hatafsegol;05B1 +hatafsegol17;05B1 +hatafsegol24;05B1 +hatafsegol30;05B1 +hatafsegolhebrew;05B1 +hatafsegolnarrowhebrew;05B1 +hatafsegolquarterhebrew;05B1 +hatafsegolwidehebrew;05B1 +hbar;0127 +hbopomofo;310F +hbrevebelow;1E2B +hcedilla;1E29 +hcircle;24D7 +hcircumflex;0125 +hdieresis;1E27 +hdotaccent;1E23 +hdotbelow;1E25 +he;05D4 +heart;2665 +heartsuitblack;2665 +heartsuitwhite;2661 +hedagesh;FB34 +hedageshhebrew;FB34 +hehaltonearabic;06C1 +heharabic;0647 +hehebrew;05D4 +hehfinalaltonearabic;FBA7 +hehfinalalttwoarabic;FEEA +hehfinalarabic;FEEA +hehhamzaabovefinalarabic;FBA5 +hehhamzaaboveisolatedarabic;FBA4 +hehinitialaltonearabic;FBA8 +hehinitialarabic;FEEB +hehiragana;3078 +hehmedialaltonearabic;FBA9 +hehmedialarabic;FEEC +heiseierasquare;337B +hekatakana;30D8 +hekatakanahalfwidth;FF8D +hekutaarusquare;3336 +henghook;0267 +herutusquare;3339 +het;05D7 +hethebrew;05D7 +hhook;0266 +hhooksuperior;02B1 +hieuhacirclekorean;327B +hieuhaparenkorean;321B +hieuhcirclekorean;326D +hieuhkorean;314E +hieuhparenkorean;320D +hihiragana;3072 +hikatakana;30D2 +hikatakanahalfwidth;FF8B +hiriq;05B4 +hiriq14;05B4 +hiriq21;05B4 +hiriq2d;05B4 +hiriqhebrew;05B4 +hiriqnarrowhebrew;05B4 +hiriqquarterhebrew;05B4 +hiriqwidehebrew;05B4 +hlinebelow;1E96 +hmonospace;FF48 +hoarmenian;0570 +hohipthai;0E2B +hohiragana;307B +hokatakana;30DB +hokatakanahalfwidth;FF8E +holam;05B9 +holam19;05B9 +holam26;05B9 +holam32;05B9 +holamhebrew;05B9 +holamnarrowhebrew;05B9 +holamquarterhebrew;05B9 +holamwidehebrew;05B9 +honokhukthai;0E2E +hookabovecomb;0309 +hookcmb;0309 +hookpalatalizedbelowcmb;0321 +hookretroflexbelowcmb;0322 +hoonsquare;3342 +horicoptic;03E9 +horizontalbar;2015 +horncmb;031B +hotsprings;2668 +house;2302 +hparen;24A3 +hsuperior;02B0 +hturned;0265 +huhiragana;3075 +huiitosquare;3333 +hukatakana;30D5 +hukatakanahalfwidth;FF8C +hungarumlaut;02DD +hungarumlautcmb;030B +hv;0195 +hyphen;002D +hypheninferior;F6E5 +hyphenmonospace;FF0D +hyphensmall;FE63 +hyphensuperior;F6E6 +hyphentwo;2010 +i;0069 +iacute;00ED +iacyrillic;044F +ibengali;0987 +ibopomofo;3127 +ibreve;012D +icaron;01D0 +icircle;24D8 +icircumflex;00EE +icyrillic;0456 +idblgrave;0209 +ideographearthcircle;328F +ideographfirecircle;328B +ideographicallianceparen;323F +ideographiccallparen;323A +ideographiccentrecircle;32A5 +ideographicclose;3006 +ideographiccomma;3001 +ideographiccommaleft;FF64 +ideographiccongratulationparen;3237 +ideographiccorrectcircle;32A3 +ideographicearthparen;322F +ideographicenterpriseparen;323D +ideographicexcellentcircle;329D +ideographicfestivalparen;3240 +ideographicfinancialcircle;3296 +ideographicfinancialparen;3236 +ideographicfireparen;322B +ideographichaveparen;3232 +ideographichighcircle;32A4 +ideographiciterationmark;3005 +ideographiclaborcircle;3298 +ideographiclaborparen;3238 +ideographicleftcircle;32A7 +ideographiclowcircle;32A6 +ideographicmedicinecircle;32A9 +ideographicmetalparen;322E +ideographicmoonparen;322A +ideographicnameparen;3234 +ideographicperiod;3002 +ideographicprintcircle;329E +ideographicreachparen;3243 +ideographicrepresentparen;3239 +ideographicresourceparen;323E +ideographicrightcircle;32A8 +ideographicsecretcircle;3299 +ideographicselfparen;3242 +ideographicsocietyparen;3233 +ideographicspace;3000 +ideographicspecialparen;3235 +ideographicstockparen;3231 +ideographicstudyparen;323B +ideographicsunparen;3230 +ideographicsuperviseparen;323C +ideographicwaterparen;322C +ideographicwoodparen;322D +ideographiczero;3007 +ideographmetalcircle;328E +ideographmooncircle;328A +ideographnamecircle;3294 +ideographsuncircle;3290 +ideographwatercircle;328C +ideographwoodcircle;328D +ideva;0907 +idieresis;00EF +idieresisacute;1E2F +idieresiscyrillic;04E5 +idotbelow;1ECB +iebrevecyrillic;04D7 +iecyrillic;0435 +ieungacirclekorean;3275 +ieungaparenkorean;3215 +ieungcirclekorean;3267 +ieungkorean;3147 +ieungparenkorean;3207 +igrave;00EC +igujarati;0A87 +igurmukhi;0A07 +ihiragana;3044 +ihookabove;1EC9 +iibengali;0988 +iicyrillic;0438 +iideva;0908 +iigujarati;0A88 +iigurmukhi;0A08 +iimatragurmukhi;0A40 +iinvertedbreve;020B +iishortcyrillic;0439 +iivowelsignbengali;09C0 +iivowelsigndeva;0940 +iivowelsigngujarati;0AC0 +ij;0133 +ikatakana;30A4 +ikatakanahalfwidth;FF72 +ikorean;3163 +ilde;02DC +iluyhebrew;05AC +imacron;012B +imacroncyrillic;04E3 +imageorapproximatelyequal;2253 +imatragurmukhi;0A3F +imonospace;FF49 +increment;2206 +infinity;221E +iniarmenian;056B +integral;222B +integralbottom;2321 +integralbt;2321 +integralex;F8F5 +integraltop;2320 +integraltp;2320 +intersection;2229 +intisquare;3305 +invbullet;25D8 +invcircle;25D9 +invsmileface;263B +iocyrillic;0451 +iogonek;012F +iota;03B9 +iotadieresis;03CA +iotadieresistonos;0390 +iotalatin;0269 +iotatonos;03AF +iparen;24A4 +irigurmukhi;0A72 +ismallhiragana;3043 +ismallkatakana;30A3 +ismallkatakanahalfwidth;FF68 +issharbengali;09FA +istroke;0268 +isuperior;F6ED +iterationhiragana;309D +iterationkatakana;30FD +itilde;0129 +itildebelow;1E2D +iubopomofo;3129 +iucyrillic;044E +ivowelsignbengali;09BF +ivowelsigndeva;093F +ivowelsigngujarati;0ABF +izhitsacyrillic;0475 +izhitsadblgravecyrillic;0477 +j;006A +jaarmenian;0571 +jabengali;099C +jadeva;091C +jagujarati;0A9C +jagurmukhi;0A1C +jbopomofo;3110 +jcaron;01F0 +jcircle;24D9 +jcircumflex;0135 +jcrossedtail;029D +jdotlessstroke;025F +jecyrillic;0458 +jeemarabic;062C +jeemfinalarabic;FE9E +jeeminitialarabic;FE9F +jeemmedialarabic;FEA0 +jeharabic;0698 +jehfinalarabic;FB8B +jhabengali;099D +jhadeva;091D +jhagujarati;0A9D +jhagurmukhi;0A1D +jheharmenian;057B +jis;3004 +jmonospace;FF4A +jparen;24A5 +jsuperior;02B2 +k;006B +kabashkircyrillic;04A1 +kabengali;0995 +kacute;1E31 +kacyrillic;043A +kadescendercyrillic;049B +kadeva;0915 +kaf;05DB +kafarabic;0643 +kafdagesh;FB3B +kafdageshhebrew;FB3B +kaffinalarabic;FEDA +kafhebrew;05DB +kafinitialarabic;FEDB +kafmedialarabic;FEDC +kafrafehebrew;FB4D +kagujarati;0A95 +kagurmukhi;0A15 +kahiragana;304B +kahookcyrillic;04C4 +kakatakana;30AB +kakatakanahalfwidth;FF76 +kappa;03BA +kappasymbolgreek;03F0 +kapyeounmieumkorean;3171 +kapyeounphieuphkorean;3184 +kapyeounpieupkorean;3178 +kapyeounssangpieupkorean;3179 +karoriisquare;330D +kashidaautoarabic;0640 +kashidaautonosidebearingarabic;0640 +kasmallkatakana;30F5 +kasquare;3384 +kasraarabic;0650 +kasratanarabic;064D +kastrokecyrillic;049F +katahiraprolongmarkhalfwidth;FF70 +kaverticalstrokecyrillic;049D +kbopomofo;310E +kcalsquare;3389 +kcaron;01E9 +kcedilla;0137 +kcircle;24DA +kcommaaccent;0137 +kdotbelow;1E33 +keharmenian;0584 +kehiragana;3051 +kekatakana;30B1 +kekatakanahalfwidth;FF79 +kenarmenian;056F +kesmallkatakana;30F6 +kgreenlandic;0138 +khabengali;0996 +khacyrillic;0445 +khadeva;0916 +khagujarati;0A96 +khagurmukhi;0A16 +khaharabic;062E +khahfinalarabic;FEA6 +khahinitialarabic;FEA7 +khahmedialarabic;FEA8 +kheicoptic;03E7 +khhadeva;0959 +khhagurmukhi;0A59 +khieukhacirclekorean;3278 +khieukhaparenkorean;3218 +khieukhcirclekorean;326A +khieukhkorean;314B +khieukhparenkorean;320A +khokhaithai;0E02 +khokhonthai;0E05 +khokhuatthai;0E03 +khokhwaithai;0E04 +khomutthai;0E5B +khook;0199 +khorakhangthai;0E06 +khzsquare;3391 +kihiragana;304D +kikatakana;30AD +kikatakanahalfwidth;FF77 +kiroguramusquare;3315 +kiromeetorusquare;3316 +kirosquare;3314 +kiyeokacirclekorean;326E +kiyeokaparenkorean;320E +kiyeokcirclekorean;3260 +kiyeokkorean;3131 +kiyeokparenkorean;3200 +kiyeoksioskorean;3133 +kjecyrillic;045C +klinebelow;1E35 +klsquare;3398 +kmcubedsquare;33A6 +kmonospace;FF4B +kmsquaredsquare;33A2 +kohiragana;3053 +kohmsquare;33C0 +kokaithai;0E01 +kokatakana;30B3 +kokatakanahalfwidth;FF7A +kooposquare;331E +koppacyrillic;0481 +koreanstandardsymbol;327F +koroniscmb;0343 +kparen;24A6 +kpasquare;33AA +ksicyrillic;046F +ktsquare;33CF +kturned;029E +kuhiragana;304F +kukatakana;30AF +kukatakanahalfwidth;FF78 +kvsquare;33B8 +kwsquare;33BE +l;006C +labengali;09B2 +lacute;013A +ladeva;0932 +lagujarati;0AB2 +lagurmukhi;0A32 +lakkhangyaothai;0E45 +lamaleffinalarabic;FEFC +lamalefhamzaabovefinalarabic;FEF8 +lamalefhamzaaboveisolatedarabic;FEF7 +lamalefhamzabelowfinalarabic;FEFA +lamalefhamzabelowisolatedarabic;FEF9 +lamalefisolatedarabic;FEFB +lamalefmaddaabovefinalarabic;FEF6 +lamalefmaddaaboveisolatedarabic;FEF5 +lamarabic;0644 +lambda;03BB +lambdastroke;019B +lamed;05DC +lameddagesh;FB3C +lameddageshhebrew;FB3C +lamedhebrew;05DC +lamedholam;05DC 05B9 +lamedholamdagesh;05DC 05B9 05BC +lamedholamdageshhebrew;05DC 05B9 05BC +lamedholamhebrew;05DC 05B9 +lamfinalarabic;FEDE +lamhahinitialarabic;FCCA +laminitialarabic;FEDF +lamjeeminitialarabic;FCC9 +lamkhahinitialarabic;FCCB +lamlamhehisolatedarabic;FDF2 +lammedialarabic;FEE0 +lammeemhahinitialarabic;FD88 +lammeeminitialarabic;FCCC +lammeemjeeminitialarabic;FEDF FEE4 FEA0 +lammeemkhahinitialarabic;FEDF FEE4 FEA8 +largecircle;25EF +lbar;019A +lbelt;026C +lbopomofo;310C +lcaron;013E +lcedilla;013C +lcircle;24DB +lcircumflexbelow;1E3D +lcommaaccent;013C +ldot;0140 +ldotaccent;0140 +ldotbelow;1E37 +ldotbelowmacron;1E39 +leftangleabovecmb;031A +lefttackbelowcmb;0318 +less;003C +lessequal;2264 +lessequalorgreater;22DA +lessmonospace;FF1C +lessorequivalent;2272 +lessorgreater;2276 +lessoverequal;2266 +lesssmall;FE64 +lezh;026E +lfblock;258C +lhookretroflex;026D +lira;20A4 +liwnarmenian;056C +lj;01C9 +ljecyrillic;0459 +ll;F6C0 +lladeva;0933 +llagujarati;0AB3 +llinebelow;1E3B +llladeva;0934 +llvocalicbengali;09E1 +llvocalicdeva;0961 +llvocalicvowelsignbengali;09E3 +llvocalicvowelsigndeva;0963 +lmiddletilde;026B +lmonospace;FF4C +lmsquare;33D0 +lochulathai;0E2C +logicaland;2227 +logicalnot;00AC +logicalnotreversed;2310 +logicalor;2228 +lolingthai;0E25 +longs;017F +lowlinecenterline;FE4E +lowlinecmb;0332 +lowlinedashed;FE4D +lozenge;25CA +lparen;24A7 +lslash;0142 +lsquare;2113 +lsuperior;F6EE +ltshade;2591 +luthai;0E26 +lvocalicbengali;098C +lvocalicdeva;090C +lvocalicvowelsignbengali;09E2 +lvocalicvowelsigndeva;0962 +lxsquare;33D3 +m;006D +mabengali;09AE +macron;00AF +macronbelowcmb;0331 +macroncmb;0304 +macronlowmod;02CD +macronmonospace;FFE3 +macute;1E3F +madeva;092E +magujarati;0AAE +magurmukhi;0A2E +mahapakhhebrew;05A4 +mahapakhlefthebrew;05A4 +mahiragana;307E +maichattawalowleftthai;F895 +maichattawalowrightthai;F894 +maichattawathai;0E4B +maichattawaupperleftthai;F893 +maieklowleftthai;F88C +maieklowrightthai;F88B +maiekthai;0E48 +maiekupperleftthai;F88A +maihanakatleftthai;F884 +maihanakatthai;0E31 +maitaikhuleftthai;F889 +maitaikhuthai;0E47 +maitholowleftthai;F88F +maitholowrightthai;F88E +maithothai;0E49 +maithoupperleftthai;F88D +maitrilowleftthai;F892 +maitrilowrightthai;F891 +maitrithai;0E4A +maitriupperleftthai;F890 +maiyamokthai;0E46 +makatakana;30DE +makatakanahalfwidth;FF8F +male;2642 +mansyonsquare;3347 +maqafhebrew;05BE +mars;2642 +masoracirclehebrew;05AF +masquare;3383 +mbopomofo;3107 +mbsquare;33D4 +mcircle;24DC +mcubedsquare;33A5 +mdotaccent;1E41 +mdotbelow;1E43 +meemarabic;0645 +meemfinalarabic;FEE2 +meeminitialarabic;FEE3 +meemmedialarabic;FEE4 +meemmeeminitialarabic;FCD1 +meemmeemisolatedarabic;FC48 +meetorusquare;334D +mehiragana;3081 +meizierasquare;337E +mekatakana;30E1 +mekatakanahalfwidth;FF92 +mem;05DE +memdagesh;FB3E +memdageshhebrew;FB3E +memhebrew;05DE +menarmenian;0574 +merkhahebrew;05A5 +merkhakefulahebrew;05A6 +merkhakefulalefthebrew;05A6 +merkhalefthebrew;05A5 +mhook;0271 +mhzsquare;3392 +middledotkatakanahalfwidth;FF65 +middot;00B7 +mieumacirclekorean;3272 +mieumaparenkorean;3212 +mieumcirclekorean;3264 +mieumkorean;3141 +mieumpansioskorean;3170 +mieumparenkorean;3204 +mieumpieupkorean;316E +mieumsioskorean;316F +mihiragana;307F +mikatakana;30DF +mikatakanahalfwidth;FF90 +minus;2212 +minusbelowcmb;0320 +minuscircle;2296 +minusmod;02D7 +minusplus;2213 +minute;2032 +miribaarusquare;334A +mirisquare;3349 +mlonglegturned;0270 +mlsquare;3396 +mmcubedsquare;33A3 +mmonospace;FF4D +mmsquaredsquare;339F +mohiragana;3082 +mohmsquare;33C1 +mokatakana;30E2 +mokatakanahalfwidth;FF93 +molsquare;33D6 +momathai;0E21 +moverssquare;33A7 +moverssquaredsquare;33A8 +mparen;24A8 +mpasquare;33AB +mssquare;33B3 +msuperior;F6EF +mturned;026F +mu;00B5 +mu1;00B5 +muasquare;3382 +muchgreater;226B +muchless;226A +mufsquare;338C +mugreek;03BC +mugsquare;338D +muhiragana;3080 +mukatakana;30E0 +mukatakanahalfwidth;FF91 +mulsquare;3395 +multiply;00D7 +mumsquare;339B +munahhebrew;05A3 +munahlefthebrew;05A3 +musicalnote;266A +musicalnotedbl;266B +musicflatsign;266D +musicsharpsign;266F +mussquare;33B2 +muvsquare;33B6 +muwsquare;33BC +mvmegasquare;33B9 +mvsquare;33B7 +mwmegasquare;33BF +mwsquare;33BD +n;006E +nabengali;09A8 +nabla;2207 +nacute;0144 +nadeva;0928 +nagujarati;0AA8 +nagurmukhi;0A28 +nahiragana;306A +nakatakana;30CA +nakatakanahalfwidth;FF85 +napostrophe;0149 +nasquare;3381 +nbopomofo;310B +nbspace;00A0 +ncaron;0148 +ncedilla;0146 +ncircle;24DD +ncircumflexbelow;1E4B +ncommaaccent;0146 +ndotaccent;1E45 +ndotbelow;1E47 +nehiragana;306D +nekatakana;30CD +nekatakanahalfwidth;FF88 +newsheqelsign;20AA +nfsquare;338B +ngabengali;0999 +ngadeva;0919 +ngagujarati;0A99 +ngagurmukhi;0A19 +ngonguthai;0E07 +nhiragana;3093 +nhookleft;0272 +nhookretroflex;0273 +nieunacirclekorean;326F +nieunaparenkorean;320F +nieuncieuckorean;3135 +nieuncirclekorean;3261 +nieunhieuhkorean;3136 +nieunkorean;3134 +nieunpansioskorean;3168 +nieunparenkorean;3201 +nieunsioskorean;3167 +nieuntikeutkorean;3166 +nihiragana;306B +nikatakana;30CB +nikatakanahalfwidth;FF86 +nikhahitleftthai;F899 +nikhahitthai;0E4D +nine;0039 +ninearabic;0669 +ninebengali;09EF +ninecircle;2468 +ninecircleinversesansserif;2792 +ninedeva;096F +ninegujarati;0AEF +ninegurmukhi;0A6F +ninehackarabic;0669 +ninehangzhou;3029 +nineideographicparen;3228 +nineinferior;2089 +ninemonospace;FF19 +nineoldstyle;F739 +nineparen;247C +nineperiod;2490 +ninepersian;06F9 +nineroman;2178 +ninesuperior;2079 +nineteencircle;2472 +nineteenparen;2486 +nineteenperiod;249A +ninethai;0E59 +nj;01CC +njecyrillic;045A +nkatakana;30F3 +nkatakanahalfwidth;FF9D +nlegrightlong;019E +nlinebelow;1E49 +nmonospace;FF4E +nmsquare;339A +nnabengali;09A3 +nnadeva;0923 +nnagujarati;0AA3 +nnagurmukhi;0A23 +nnnadeva;0929 +nohiragana;306E +nokatakana;30CE +nokatakanahalfwidth;FF89 +nonbreakingspace;00A0 +nonenthai;0E13 +nonuthai;0E19 +noonarabic;0646 +noonfinalarabic;FEE6 +noonghunnaarabic;06BA +noonghunnafinalarabic;FB9F +noonhehinitialarabic;FEE7 FEEC +nooninitialarabic;FEE7 +noonjeeminitialarabic;FCD2 +noonjeemisolatedarabic;FC4B +noonmedialarabic;FEE8 +noonmeeminitialarabic;FCD5 +noonmeemisolatedarabic;FC4E +noonnoonfinalarabic;FC8D +notcontains;220C +notelement;2209 +notelementof;2209 +notequal;2260 +notgreater;226F +notgreaternorequal;2271 +notgreaternorless;2279 +notidentical;2262 +notless;226E +notlessnorequal;2270 +notparallel;2226 +notprecedes;2280 +notsubset;2284 +notsucceeds;2281 +notsuperset;2285 +nowarmenian;0576 +nparen;24A9 +nssquare;33B1 +nsuperior;207F +ntilde;00F1 +nu;03BD +nuhiragana;306C +nukatakana;30CC +nukatakanahalfwidth;FF87 +nuktabengali;09BC +nuktadeva;093C +nuktagujarati;0ABC +nuktagurmukhi;0A3C +numbersign;0023 +numbersignmonospace;FF03 +numbersignsmall;FE5F +numeralsigngreek;0374 +numeralsignlowergreek;0375 +numero;2116 +nun;05E0 +nundagesh;FB40 +nundageshhebrew;FB40 +nunhebrew;05E0 +nvsquare;33B5 +nwsquare;33BB +nyabengali;099E +nyadeva;091E +nyagujarati;0A9E +nyagurmukhi;0A1E +o;006F +oacute;00F3 +oangthai;0E2D +obarred;0275 +obarredcyrillic;04E9 +obarreddieresiscyrillic;04EB +obengali;0993 +obopomofo;311B +obreve;014F +ocandradeva;0911 +ocandragujarati;0A91 +ocandravowelsigndeva;0949 +ocandravowelsigngujarati;0AC9 +ocaron;01D2 +ocircle;24DE +ocircumflex;00F4 +ocircumflexacute;1ED1 +ocircumflexdotbelow;1ED9 +ocircumflexgrave;1ED3 +ocircumflexhookabove;1ED5 +ocircumflextilde;1ED7 +ocyrillic;043E +odblacute;0151 +odblgrave;020D +odeva;0913 +odieresis;00F6 +odieresiscyrillic;04E7 +odotbelow;1ECD +oe;0153 +oekorean;315A +ogonek;02DB +ogonekcmb;0328 +ograve;00F2 +ogujarati;0A93 +oharmenian;0585 +ohiragana;304A +ohookabove;1ECF +ohorn;01A1 +ohornacute;1EDB +ohorndotbelow;1EE3 +ohorngrave;1EDD +ohornhookabove;1EDF +ohorntilde;1EE1 +ohungarumlaut;0151 +oi;01A3 +oinvertedbreve;020F +okatakana;30AA +okatakanahalfwidth;FF75 +okorean;3157 +olehebrew;05AB +omacron;014D +omacronacute;1E53 +omacrongrave;1E51 +omdeva;0950 +omega;03C9 +omega1;03D6 +omegacyrillic;0461 +omegalatinclosed;0277 +omegaroundcyrillic;047B +omegatitlocyrillic;047D +omegatonos;03CE +omgujarati;0AD0 +omicron;03BF +omicrontonos;03CC +omonospace;FF4F +one;0031 +onearabic;0661 +onebengali;09E7 +onecircle;2460 +onecircleinversesansserif;278A +onedeva;0967 +onedotenleader;2024 +oneeighth;215B +onefitted;F6DC +onegujarati;0AE7 +onegurmukhi;0A67 +onehackarabic;0661 +onehalf;00BD +onehangzhou;3021 +oneideographicparen;3220 +oneinferior;2081 +onemonospace;FF11 +onenumeratorbengali;09F4 +oneoldstyle;F731 +oneparen;2474 +oneperiod;2488 +onepersian;06F1 +onequarter;00BC +oneroman;2170 +onesuperior;00B9 +onethai;0E51 +onethird;2153 +oogonek;01EB +oogonekmacron;01ED +oogurmukhi;0A13 +oomatragurmukhi;0A4B +oopen;0254 +oparen;24AA +openbullet;25E6 +option;2325 +ordfeminine;00AA +ordmasculine;00BA +orthogonal;221F +oshortdeva;0912 +oshortvowelsigndeva;094A +oslash;00F8 +oslashacute;01FF +osmallhiragana;3049 +osmallkatakana;30A9 +osmallkatakanahalfwidth;FF6B +ostrokeacute;01FF +osuperior;F6F0 +otcyrillic;047F +otilde;00F5 +otildeacute;1E4D +otildedieresis;1E4F +oubopomofo;3121 +overline;203E +overlinecenterline;FE4A +overlinecmb;0305 +overlinedashed;FE49 +overlinedblwavy;FE4C +overlinewavy;FE4B +overscore;00AF +ovowelsignbengali;09CB +ovowelsigndeva;094B +ovowelsigngujarati;0ACB +p;0070 +paampssquare;3380 +paasentosquare;332B +pabengali;09AA +pacute;1E55 +padeva;092A +pagedown;21DF +pageup;21DE +pagujarati;0AAA +pagurmukhi;0A2A +pahiragana;3071 +paiyannoithai;0E2F +pakatakana;30D1 +palatalizationcyrilliccmb;0484 +palochkacyrillic;04C0 +pansioskorean;317F +paragraph;00B6 +parallel;2225 +parenleft;0028 +parenleftaltonearabic;FD3E +parenleftbt;F8ED +parenleftex;F8EC +parenleftinferior;208D +parenleftmonospace;FF08 +parenleftsmall;FE59 +parenleftsuperior;207D +parenlefttp;F8EB +parenleftvertical;FE35 +parenright;0029 +parenrightaltonearabic;FD3F +parenrightbt;F8F8 +parenrightex;F8F7 +parenrightinferior;208E +parenrightmonospace;FF09 +parenrightsmall;FE5A +parenrightsuperior;207E +parenrighttp;F8F6 +parenrightvertical;FE36 +partialdiff;2202 +paseqhebrew;05C0 +pashtahebrew;0599 +pasquare;33A9 +patah;05B7 +patah11;05B7 +patah1d;05B7 +patah2a;05B7 +patahhebrew;05B7 +patahnarrowhebrew;05B7 +patahquarterhebrew;05B7 +patahwidehebrew;05B7 +pazerhebrew;05A1 +pbopomofo;3106 +pcircle;24DF +pdotaccent;1E57 +pe;05E4 +pecyrillic;043F +pedagesh;FB44 +pedageshhebrew;FB44 +peezisquare;333B +pefinaldageshhebrew;FB43 +peharabic;067E +peharmenian;057A +pehebrew;05E4 +pehfinalarabic;FB57 +pehinitialarabic;FB58 +pehiragana;307A +pehmedialarabic;FB59 +pekatakana;30DA +pemiddlehookcyrillic;04A7 +perafehebrew;FB4E +percent;0025 +percentarabic;066A +percentmonospace;FF05 +percentsmall;FE6A +period;002E +periodarmenian;0589 +periodcentered;00B7 +periodhalfwidth;FF61 +periodinferior;F6E7 +periodmonospace;FF0E +periodsmall;FE52 +periodsuperior;F6E8 +perispomenigreekcmb;0342 +perpendicular;22A5 +perthousand;2030 +peseta;20A7 +pfsquare;338A +phabengali;09AB +phadeva;092B +phagujarati;0AAB +phagurmukhi;0A2B +phi;03C6 +phi1;03D5 +phieuphacirclekorean;327A +phieuphaparenkorean;321A +phieuphcirclekorean;326C +phieuphkorean;314D +phieuphparenkorean;320C +philatin;0278 +phinthuthai;0E3A +phisymbolgreek;03D5 +phook;01A5 +phophanthai;0E1E +phophungthai;0E1C +phosamphaothai;0E20 +pi;03C0 +pieupacirclekorean;3273 +pieupaparenkorean;3213 +pieupcieuckorean;3176 +pieupcirclekorean;3265 +pieupkiyeokkorean;3172 +pieupkorean;3142 +pieupparenkorean;3205 +pieupsioskiyeokkorean;3174 +pieupsioskorean;3144 +pieupsiostikeutkorean;3175 +pieupthieuthkorean;3177 +pieuptikeutkorean;3173 +pihiragana;3074 +pikatakana;30D4 +pisymbolgreek;03D6 +piwrarmenian;0583 +plus;002B +plusbelowcmb;031F +pluscircle;2295 +plusminus;00B1 +plusmod;02D6 +plusmonospace;FF0B +plussmall;FE62 +plussuperior;207A +pmonospace;FF50 +pmsquare;33D8 +pohiragana;307D +pointingindexdownwhite;261F +pointingindexleftwhite;261C +pointingindexrightwhite;261E +pointingindexupwhite;261D +pokatakana;30DD +poplathai;0E1B +postalmark;3012 +postalmarkface;3020 +pparen;24AB +precedes;227A +prescription;211E +primemod;02B9 +primereversed;2035 +product;220F +projective;2305 +prolongedkana;30FC +propellor;2318 +propersubset;2282 +propersuperset;2283 +proportion;2237 +proportional;221D +psi;03C8 +psicyrillic;0471 +psilipneumatacyrilliccmb;0486 +pssquare;33B0 +puhiragana;3077 +pukatakana;30D7 +pvsquare;33B4 +pwsquare;33BA +q;0071 +qadeva;0958 +qadmahebrew;05A8 +qafarabic;0642 +qaffinalarabic;FED6 +qafinitialarabic;FED7 +qafmedialarabic;FED8 +qamats;05B8 +qamats10;05B8 +qamats1a;05B8 +qamats1c;05B8 +qamats27;05B8 +qamats29;05B8 +qamats33;05B8 +qamatsde;05B8 +qamatshebrew;05B8 +qamatsnarrowhebrew;05B8 +qamatsqatanhebrew;05B8 +qamatsqatannarrowhebrew;05B8 +qamatsqatanquarterhebrew;05B8 +qamatsqatanwidehebrew;05B8 +qamatsquarterhebrew;05B8 +qamatswidehebrew;05B8 +qarneyparahebrew;059F +qbopomofo;3111 +qcircle;24E0 +qhook;02A0 +qmonospace;FF51 +qof;05E7 +qofdagesh;FB47 +qofdageshhebrew;FB47 +qofhatafpatah;05E7 05B2 +qofhatafpatahhebrew;05E7 05B2 +qofhatafsegol;05E7 05B1 +qofhatafsegolhebrew;05E7 05B1 +qofhebrew;05E7 +qofhiriq;05E7 05B4 +qofhiriqhebrew;05E7 05B4 +qofholam;05E7 05B9 +qofholamhebrew;05E7 05B9 +qofpatah;05E7 05B7 +qofpatahhebrew;05E7 05B7 +qofqamats;05E7 05B8 +qofqamatshebrew;05E7 05B8 +qofqubuts;05E7 05BB +qofqubutshebrew;05E7 05BB +qofsegol;05E7 05B6 +qofsegolhebrew;05E7 05B6 +qofsheva;05E7 05B0 +qofshevahebrew;05E7 05B0 +qoftsere;05E7 05B5 +qoftserehebrew;05E7 05B5 +qparen;24AC +quarternote;2669 +qubuts;05BB +qubuts18;05BB +qubuts25;05BB +qubuts31;05BB +qubutshebrew;05BB +qubutsnarrowhebrew;05BB +qubutsquarterhebrew;05BB +qubutswidehebrew;05BB +question;003F +questionarabic;061F +questionarmenian;055E +questiondown;00BF +questiondownsmall;F7BF +questiongreek;037E +questionmonospace;FF1F +questionsmall;F73F +quotedbl;0022 +quotedblbase;201E +quotedblleft;201C +quotedblmonospace;FF02 +quotedblprime;301E +quotedblprimereversed;301D +quotedblright;201D +quoteleft;2018 +quoteleftreversed;201B +quotereversed;201B +quoteright;2019 +quoterightn;0149 +quotesinglbase;201A +quotesingle;0027 +quotesinglemonospace;FF07 +r;0072 +raarmenian;057C +rabengali;09B0 +racute;0155 +radeva;0930 +radical;221A +radicalex;F8E5 +radoverssquare;33AE +radoverssquaredsquare;33AF +radsquare;33AD +rafe;05BF +rafehebrew;05BF +ragujarati;0AB0 +ragurmukhi;0A30 +rahiragana;3089 +rakatakana;30E9 +rakatakanahalfwidth;FF97 +ralowerdiagonalbengali;09F1 +ramiddlediagonalbengali;09F0 +ramshorn;0264 +ratio;2236 +rbopomofo;3116 +rcaron;0159 +rcedilla;0157 +rcircle;24E1 +rcommaaccent;0157 +rdblgrave;0211 +rdotaccent;1E59 +rdotbelow;1E5B +rdotbelowmacron;1E5D +referencemark;203B +reflexsubset;2286 +reflexsuperset;2287 +registered;00AE +registersans;F8E8 +registerserif;F6DA +reharabic;0631 +reharmenian;0580 +rehfinalarabic;FEAE +rehiragana;308C +rehyehaleflamarabic;0631 FEF3 FE8E 0644 +rekatakana;30EC +rekatakanahalfwidth;FF9A +resh;05E8 +reshdageshhebrew;FB48 +reshhatafpatah;05E8 05B2 +reshhatafpatahhebrew;05E8 05B2 +reshhatafsegol;05E8 05B1 +reshhatafsegolhebrew;05E8 05B1 +reshhebrew;05E8 +reshhiriq;05E8 05B4 +reshhiriqhebrew;05E8 05B4 +reshholam;05E8 05B9 +reshholamhebrew;05E8 05B9 +reshpatah;05E8 05B7 +reshpatahhebrew;05E8 05B7 +reshqamats;05E8 05B8 +reshqamatshebrew;05E8 05B8 +reshqubuts;05E8 05BB +reshqubutshebrew;05E8 05BB +reshsegol;05E8 05B6 +reshsegolhebrew;05E8 05B6 +reshsheva;05E8 05B0 +reshshevahebrew;05E8 05B0 +reshtsere;05E8 05B5 +reshtserehebrew;05E8 05B5 +reversedtilde;223D +reviahebrew;0597 +reviamugrashhebrew;0597 +revlogicalnot;2310 +rfishhook;027E +rfishhookreversed;027F +rhabengali;09DD +rhadeva;095D +rho;03C1 +rhook;027D +rhookturned;027B +rhookturnedsuperior;02B5 +rhosymbolgreek;03F1 +rhotichookmod;02DE +rieulacirclekorean;3271 +rieulaparenkorean;3211 +rieulcirclekorean;3263 +rieulhieuhkorean;3140 +rieulkiyeokkorean;313A +rieulkiyeoksioskorean;3169 +rieulkorean;3139 +rieulmieumkorean;313B +rieulpansioskorean;316C +rieulparenkorean;3203 +rieulphieuphkorean;313F +rieulpieupkorean;313C +rieulpieupsioskorean;316B +rieulsioskorean;313D +rieulthieuthkorean;313E +rieultikeutkorean;316A +rieulyeorinhieuhkorean;316D +rightangle;221F +righttackbelowcmb;0319 +righttriangle;22BF +rihiragana;308A +rikatakana;30EA +rikatakanahalfwidth;FF98 +ring;02DA +ringbelowcmb;0325 +ringcmb;030A +ringhalfleft;02BF +ringhalfleftarmenian;0559 +ringhalfleftbelowcmb;031C +ringhalfleftcentered;02D3 +ringhalfright;02BE +ringhalfrightbelowcmb;0339 +ringhalfrightcentered;02D2 +rinvertedbreve;0213 +rittorusquare;3351 +rlinebelow;1E5F +rlongleg;027C +rlonglegturned;027A +rmonospace;FF52 +rohiragana;308D +rokatakana;30ED +rokatakanahalfwidth;FF9B +roruathai;0E23 +rparen;24AD +rrabengali;09DC +rradeva;0931 +rragurmukhi;0A5C +rreharabic;0691 +rrehfinalarabic;FB8D +rrvocalicbengali;09E0 +rrvocalicdeva;0960 +rrvocalicgujarati;0AE0 +rrvocalicvowelsignbengali;09C4 +rrvocalicvowelsigndeva;0944 +rrvocalicvowelsigngujarati;0AC4 +rsuperior;F6F1 +rtblock;2590 +rturned;0279 +rturnedsuperior;02B4 +ruhiragana;308B +rukatakana;30EB +rukatakanahalfwidth;FF99 +rupeemarkbengali;09F2 +rupeesignbengali;09F3 +rupiah;F6DD +ruthai;0E24 +rvocalicbengali;098B +rvocalicdeva;090B +rvocalicgujarati;0A8B +rvocalicvowelsignbengali;09C3 +rvocalicvowelsigndeva;0943 +rvocalicvowelsigngujarati;0AC3 +s;0073 +sabengali;09B8 +sacute;015B +sacutedotaccent;1E65 +sadarabic;0635 +sadeva;0938 +sadfinalarabic;FEBA +sadinitialarabic;FEBB +sadmedialarabic;FEBC +sagujarati;0AB8 +sagurmukhi;0A38 +sahiragana;3055 +sakatakana;30B5 +sakatakanahalfwidth;FF7B +sallallahoualayhewasallamarabic;FDFA +samekh;05E1 +samekhdagesh;FB41 +samekhdageshhebrew;FB41 +samekhhebrew;05E1 +saraaathai;0E32 +saraaethai;0E41 +saraaimaimalaithai;0E44 +saraaimaimuanthai;0E43 +saraamthai;0E33 +saraathai;0E30 +saraethai;0E40 +saraiileftthai;F886 +saraiithai;0E35 +saraileftthai;F885 +saraithai;0E34 +saraothai;0E42 +saraueeleftthai;F888 +saraueethai;0E37 +saraueleftthai;F887 +sarauethai;0E36 +sarauthai;0E38 +sarauuthai;0E39 +sbopomofo;3119 +scaron;0161 +scarondotaccent;1E67 +scedilla;015F +schwa;0259 +schwacyrillic;04D9 +schwadieresiscyrillic;04DB +schwahook;025A +scircle;24E2 +scircumflex;015D +scommaaccent;0219 +sdotaccent;1E61 +sdotbelow;1E63 +sdotbelowdotaccent;1E69 +seagullbelowcmb;033C +second;2033 +secondtonechinese;02CA +section;00A7 +seenarabic;0633 +seenfinalarabic;FEB2 +seeninitialarabic;FEB3 +seenmedialarabic;FEB4 +segol;05B6 +segol13;05B6 +segol1f;05B6 +segol2c;05B6 +segolhebrew;05B6 +segolnarrowhebrew;05B6 +segolquarterhebrew;05B6 +segoltahebrew;0592 +segolwidehebrew;05B6 +seharmenian;057D +sehiragana;305B +sekatakana;30BB +sekatakanahalfwidth;FF7E +semicolon;003B +semicolonarabic;061B +semicolonmonospace;FF1B +semicolonsmall;FE54 +semivoicedmarkkana;309C +semivoicedmarkkanahalfwidth;FF9F +sentisquare;3322 +sentosquare;3323 +seven;0037 +sevenarabic;0667 +sevenbengali;09ED +sevencircle;2466 +sevencircleinversesansserif;2790 +sevendeva;096D +seveneighths;215E +sevengujarati;0AED +sevengurmukhi;0A6D +sevenhackarabic;0667 +sevenhangzhou;3027 +sevenideographicparen;3226 +seveninferior;2087 +sevenmonospace;FF17 +sevenoldstyle;F737 +sevenparen;247A +sevenperiod;248E +sevenpersian;06F7 +sevenroman;2176 +sevensuperior;2077 +seventeencircle;2470 +seventeenparen;2484 +seventeenperiod;2498 +seventhai;0E57 +sfthyphen;00AD +shaarmenian;0577 +shabengali;09B6 +shacyrillic;0448 +shaddaarabic;0651 +shaddadammaarabic;FC61 +shaddadammatanarabic;FC5E +shaddafathaarabic;FC60 +shaddafathatanarabic;0651 064B +shaddakasraarabic;FC62 +shaddakasratanarabic;FC5F +shade;2592 +shadedark;2593 +shadelight;2591 +shademedium;2592 +shadeva;0936 +shagujarati;0AB6 +shagurmukhi;0A36 +shalshelethebrew;0593 +shbopomofo;3115 +shchacyrillic;0449 +sheenarabic;0634 +sheenfinalarabic;FEB6 +sheeninitialarabic;FEB7 +sheenmedialarabic;FEB8 +sheicoptic;03E3 +sheqel;20AA +sheqelhebrew;20AA +sheva;05B0 +sheva115;05B0 +sheva15;05B0 +sheva22;05B0 +sheva2e;05B0 +shevahebrew;05B0 +shevanarrowhebrew;05B0 +shevaquarterhebrew;05B0 +shevawidehebrew;05B0 +shhacyrillic;04BB +shimacoptic;03ED +shin;05E9 +shindagesh;FB49 +shindageshhebrew;FB49 +shindageshshindot;FB2C +shindageshshindothebrew;FB2C +shindageshsindot;FB2D +shindageshsindothebrew;FB2D +shindothebrew;05C1 +shinhebrew;05E9 +shinshindot;FB2A +shinshindothebrew;FB2A +shinsindot;FB2B +shinsindothebrew;FB2B +shook;0282 +sigma;03C3 +sigma1;03C2 +sigmafinal;03C2 +sigmalunatesymbolgreek;03F2 +sihiragana;3057 +sikatakana;30B7 +sikatakanahalfwidth;FF7C +siluqhebrew;05BD +siluqlefthebrew;05BD +similar;223C +sindothebrew;05C2 +siosacirclekorean;3274 +siosaparenkorean;3214 +sioscieuckorean;317E +sioscirclekorean;3266 +sioskiyeokkorean;317A +sioskorean;3145 +siosnieunkorean;317B +siosparenkorean;3206 +siospieupkorean;317D +siostikeutkorean;317C +six;0036 +sixarabic;0666 +sixbengali;09EC +sixcircle;2465 +sixcircleinversesansserif;278F +sixdeva;096C +sixgujarati;0AEC +sixgurmukhi;0A6C +sixhackarabic;0666 +sixhangzhou;3026 +sixideographicparen;3225 +sixinferior;2086 +sixmonospace;FF16 +sixoldstyle;F736 +sixparen;2479 +sixperiod;248D +sixpersian;06F6 +sixroman;2175 +sixsuperior;2076 +sixteencircle;246F +sixteencurrencydenominatorbengali;09F9 +sixteenparen;2483 +sixteenperiod;2497 +sixthai;0E56 +slash;002F +slashmonospace;FF0F +slong;017F +slongdotaccent;1E9B +smileface;263A +smonospace;FF53 +sofpasuqhebrew;05C3 +softhyphen;00AD +softsigncyrillic;044C +sohiragana;305D +sokatakana;30BD +sokatakanahalfwidth;FF7F +soliduslongoverlaycmb;0338 +solidusshortoverlaycmb;0337 +sorusithai;0E29 +sosalathai;0E28 +sosothai;0E0B +sosuathai;0E2A +space;0020 +spacehackarabic;0020 +spade;2660 +spadesuitblack;2660 +spadesuitwhite;2664 +sparen;24AE +squarebelowcmb;033B +squarecc;33C4 +squarecm;339D +squarediagonalcrosshatchfill;25A9 +squarehorizontalfill;25A4 +squarekg;338F +squarekm;339E +squarekmcapital;33CE +squareln;33D1 +squarelog;33D2 +squaremg;338E +squaremil;33D5 +squaremm;339C +squaremsquared;33A1 +squareorthogonalcrosshatchfill;25A6 +squareupperlefttolowerrightfill;25A7 +squareupperrighttolowerleftfill;25A8 +squareverticalfill;25A5 +squarewhitewithsmallblack;25A3 +srsquare;33DB +ssabengali;09B7 +ssadeva;0937 +ssagujarati;0AB7 +ssangcieuckorean;3149 +ssanghieuhkorean;3185 +ssangieungkorean;3180 +ssangkiyeokkorean;3132 +ssangnieunkorean;3165 +ssangpieupkorean;3143 +ssangsioskorean;3146 +ssangtikeutkorean;3138 +ssuperior;F6F2 +sterling;00A3 +sterlingmonospace;FFE1 +strokelongoverlaycmb;0336 +strokeshortoverlaycmb;0335 +subset;2282 +subsetnotequal;228A +subsetorequal;2286 +succeeds;227B +suchthat;220B +suhiragana;3059 +sukatakana;30B9 +sukatakanahalfwidth;FF7D +sukunarabic;0652 +summation;2211 +sun;263C +superset;2283 +supersetnotequal;228B +supersetorequal;2287 +svsquare;33DC +syouwaerasquare;337C +t;0074 +tabengali;09A4 +tackdown;22A4 +tackleft;22A3 +tadeva;0924 +tagujarati;0AA4 +tagurmukhi;0A24 +taharabic;0637 +tahfinalarabic;FEC2 +tahinitialarabic;FEC3 +tahiragana;305F +tahmedialarabic;FEC4 +taisyouerasquare;337D +takatakana;30BF +takatakanahalfwidth;FF80 +tatweelarabic;0640 +tau;03C4 +tav;05EA +tavdages;FB4A +tavdagesh;FB4A +tavdageshhebrew;FB4A +tavhebrew;05EA +tbar;0167 +tbopomofo;310A +tcaron;0165 +tccurl;02A8 +tcedilla;0163 +tcheharabic;0686 +tchehfinalarabic;FB7B +tchehinitialarabic;FB7C +tchehmedialarabic;FB7D +tchehmeeminitialarabic;FB7C FEE4 +tcircle;24E3 +tcircumflexbelow;1E71 +tcommaaccent;0163 +tdieresis;1E97 +tdotaccent;1E6B +tdotbelow;1E6D +tecyrillic;0442 +tedescendercyrillic;04AD +teharabic;062A +tehfinalarabic;FE96 +tehhahinitialarabic;FCA2 +tehhahisolatedarabic;FC0C +tehinitialarabic;FE97 +tehiragana;3066 +tehjeeminitialarabic;FCA1 +tehjeemisolatedarabic;FC0B +tehmarbutaarabic;0629 +tehmarbutafinalarabic;FE94 +tehmedialarabic;FE98 +tehmeeminitialarabic;FCA4 +tehmeemisolatedarabic;FC0E +tehnoonfinalarabic;FC73 +tekatakana;30C6 +tekatakanahalfwidth;FF83 +telephone;2121 +telephoneblack;260E +telishagedolahebrew;05A0 +telishaqetanahebrew;05A9 +tencircle;2469 +tenideographicparen;3229 +tenparen;247D +tenperiod;2491 +tenroman;2179 +tesh;02A7 +tet;05D8 +tetdagesh;FB38 +tetdageshhebrew;FB38 +tethebrew;05D8 +tetsecyrillic;04B5 +tevirhebrew;059B +tevirlefthebrew;059B +thabengali;09A5 +thadeva;0925 +thagujarati;0AA5 +thagurmukhi;0A25 +thalarabic;0630 +thalfinalarabic;FEAC +thanthakhatlowleftthai;F898 +thanthakhatlowrightthai;F897 +thanthakhatthai;0E4C +thanthakhatupperleftthai;F896 +theharabic;062B +thehfinalarabic;FE9A +thehinitialarabic;FE9B +thehmedialarabic;FE9C +thereexists;2203 +therefore;2234 +theta;03B8 +theta1;03D1 +thetasymbolgreek;03D1 +thieuthacirclekorean;3279 +thieuthaparenkorean;3219 +thieuthcirclekorean;326B +thieuthkorean;314C +thieuthparenkorean;320B +thirteencircle;246C +thirteenparen;2480 +thirteenperiod;2494 +thonangmonthothai;0E11 +thook;01AD +thophuthaothai;0E12 +thorn;00FE +thothahanthai;0E17 +thothanthai;0E10 +thothongthai;0E18 +thothungthai;0E16 +thousandcyrillic;0482 +thousandsseparatorarabic;066C +thousandsseparatorpersian;066C +three;0033 +threearabic;0663 +threebengali;09E9 +threecircle;2462 +threecircleinversesansserif;278C +threedeva;0969 +threeeighths;215C +threegujarati;0AE9 +threegurmukhi;0A69 +threehackarabic;0663 +threehangzhou;3023 +threeideographicparen;3222 +threeinferior;2083 +threemonospace;FF13 +threenumeratorbengali;09F6 +threeoldstyle;F733 +threeparen;2476 +threeperiod;248A +threepersian;06F3 +threequarters;00BE +threequartersemdash;F6DE +threeroman;2172 +threesuperior;00B3 +threethai;0E53 +thzsquare;3394 +tihiragana;3061 +tikatakana;30C1 +tikatakanahalfwidth;FF81 +tikeutacirclekorean;3270 +tikeutaparenkorean;3210 +tikeutcirclekorean;3262 +tikeutkorean;3137 +tikeutparenkorean;3202 +tilde;02DC +tildebelowcmb;0330 +tildecmb;0303 +tildecomb;0303 +tildedoublecmb;0360 +tildeoperator;223C +tildeoverlaycmb;0334 +tildeverticalcmb;033E +timescircle;2297 +tipehahebrew;0596 +tipehalefthebrew;0596 +tippigurmukhi;0A70 +titlocyrilliccmb;0483 +tiwnarmenian;057F +tlinebelow;1E6F +tmonospace;FF54 +toarmenian;0569 +tohiragana;3068 +tokatakana;30C8 +tokatakanahalfwidth;FF84 +tonebarextrahighmod;02E5 +tonebarextralowmod;02E9 +tonebarhighmod;02E6 +tonebarlowmod;02E8 +tonebarmidmod;02E7 +tonefive;01BD +tonesix;0185 +tonetwo;01A8 +tonos;0384 +tonsquare;3327 +topatakthai;0E0F +tortoiseshellbracketleft;3014 +tortoiseshellbracketleftsmall;FE5D +tortoiseshellbracketleftvertical;FE39 +tortoiseshellbracketright;3015 +tortoiseshellbracketrightsmall;FE5E +tortoiseshellbracketrightvertical;FE3A +totaothai;0E15 +tpalatalhook;01AB +tparen;24AF +trademark;2122 +trademarksans;F8EA +trademarkserif;F6DB +tretroflexhook;0288 +triagdn;25BC +triaglf;25C4 +triagrt;25BA +triagup;25B2 +ts;02A6 +tsadi;05E6 +tsadidagesh;FB46 +tsadidageshhebrew;FB46 +tsadihebrew;05E6 +tsecyrillic;0446 +tsere;05B5 +tsere12;05B5 +tsere1e;05B5 +tsere2b;05B5 +tserehebrew;05B5 +tserenarrowhebrew;05B5 +tserequarterhebrew;05B5 +tserewidehebrew;05B5 +tshecyrillic;045B +tsuperior;F6F3 +ttabengali;099F +ttadeva;091F +ttagujarati;0A9F +ttagurmukhi;0A1F +tteharabic;0679 +ttehfinalarabic;FB67 +ttehinitialarabic;FB68 +ttehmedialarabic;FB69 +tthabengali;09A0 +tthadeva;0920 +tthagujarati;0AA0 +tthagurmukhi;0A20 +tturned;0287 +tuhiragana;3064 +tukatakana;30C4 +tukatakanahalfwidth;FF82 +tusmallhiragana;3063 +tusmallkatakana;30C3 +tusmallkatakanahalfwidth;FF6F +twelvecircle;246B +twelveparen;247F +twelveperiod;2493 +twelveroman;217B +twentycircle;2473 +twentyhangzhou;5344 +twentyparen;2487 +twentyperiod;249B +two;0032 +twoarabic;0662 +twobengali;09E8 +twocircle;2461 +twocircleinversesansserif;278B +twodeva;0968 +twodotenleader;2025 +twodotleader;2025 +twodotleadervertical;FE30 +twogujarati;0AE8 +twogurmukhi;0A68 +twohackarabic;0662 +twohangzhou;3022 +twoideographicparen;3221 +twoinferior;2082 +twomonospace;FF12 +twonumeratorbengali;09F5 +twooldstyle;F732 +twoparen;2475 +twoperiod;2489 +twopersian;06F2 +tworoman;2171 +twostroke;01BB +twosuperior;00B2 +twothai;0E52 +twothirds;2154 +u;0075 +uacute;00FA +ubar;0289 +ubengali;0989 +ubopomofo;3128 +ubreve;016D +ucaron;01D4 +ucircle;24E4 +ucircumflex;00FB +ucircumflexbelow;1E77 +ucyrillic;0443 +udattadeva;0951 +udblacute;0171 +udblgrave;0215 +udeva;0909 +udieresis;00FC +udieresisacute;01D8 +udieresisbelow;1E73 +udieresiscaron;01DA +udieresiscyrillic;04F1 +udieresisgrave;01DC +udieresismacron;01D6 +udotbelow;1EE5 +ugrave;00F9 +ugujarati;0A89 +ugurmukhi;0A09 +uhiragana;3046 +uhookabove;1EE7 +uhorn;01B0 +uhornacute;1EE9 +uhorndotbelow;1EF1 +uhorngrave;1EEB +uhornhookabove;1EED +uhorntilde;1EEF +uhungarumlaut;0171 +uhungarumlautcyrillic;04F3 +uinvertedbreve;0217 +ukatakana;30A6 +ukatakanahalfwidth;FF73 +ukcyrillic;0479 +ukorean;315C +umacron;016B +umacroncyrillic;04EF +umacrondieresis;1E7B +umatragurmukhi;0A41 +umonospace;FF55 +underscore;005F +underscoredbl;2017 +underscoremonospace;FF3F +underscorevertical;FE33 +underscorewavy;FE4F +union;222A +universal;2200 +uogonek;0173 +uparen;24B0 +upblock;2580 +upperdothebrew;05C4 +upsilon;03C5 +upsilondieresis;03CB +upsilondieresistonos;03B0 +upsilonlatin;028A +upsilontonos;03CD +uptackbelowcmb;031D +uptackmod;02D4 +uragurmukhi;0A73 +uring;016F +ushortcyrillic;045E +usmallhiragana;3045 +usmallkatakana;30A5 +usmallkatakanahalfwidth;FF69 +ustraightcyrillic;04AF +ustraightstrokecyrillic;04B1 +utilde;0169 +utildeacute;1E79 +utildebelow;1E75 +uubengali;098A +uudeva;090A +uugujarati;0A8A +uugurmukhi;0A0A +uumatragurmukhi;0A42 +uuvowelsignbengali;09C2 +uuvowelsigndeva;0942 +uuvowelsigngujarati;0AC2 +uvowelsignbengali;09C1 +uvowelsigndeva;0941 +uvowelsigngujarati;0AC1 +v;0076 +vadeva;0935 +vagujarati;0AB5 +vagurmukhi;0A35 +vakatakana;30F7 +vav;05D5 +vavdagesh;FB35 +vavdagesh65;FB35 +vavdageshhebrew;FB35 +vavhebrew;05D5 +vavholam;FB4B +vavholamhebrew;FB4B +vavvavhebrew;05F0 +vavyodhebrew;05F1 +vcircle;24E5 +vdotbelow;1E7F +vecyrillic;0432 +veharabic;06A4 +vehfinalarabic;FB6B +vehinitialarabic;FB6C +vehmedialarabic;FB6D +vekatakana;30F9 +venus;2640 +verticalbar;007C +verticallineabovecmb;030D +verticallinebelowcmb;0329 +verticallinelowmod;02CC +verticallinemod;02C8 +vewarmenian;057E +vhook;028B +vikatakana;30F8 +viramabengali;09CD +viramadeva;094D +viramagujarati;0ACD +visargabengali;0983 +visargadeva;0903 +visargagujarati;0A83 +vmonospace;FF56 +voarmenian;0578 +voicediterationhiragana;309E +voicediterationkatakana;30FE +voicedmarkkana;309B +voicedmarkkanahalfwidth;FF9E +vokatakana;30FA +vparen;24B1 +vtilde;1E7D +vturned;028C +vuhiragana;3094 +vukatakana;30F4 +w;0077 +wacute;1E83 +waekorean;3159 +wahiragana;308F +wakatakana;30EF +wakatakanahalfwidth;FF9C +wakorean;3158 +wasmallhiragana;308E +wasmallkatakana;30EE +wattosquare;3357 +wavedash;301C +wavyunderscorevertical;FE34 +wawarabic;0648 +wawfinalarabic;FEEE +wawhamzaabovearabic;0624 +wawhamzaabovefinalarabic;FE86 +wbsquare;33DD +wcircle;24E6 +wcircumflex;0175 +wdieresis;1E85 +wdotaccent;1E87 +wdotbelow;1E89 +wehiragana;3091 +weierstrass;2118 +wekatakana;30F1 +wekorean;315E +weokorean;315D +wgrave;1E81 +whitebullet;25E6 +whitecircle;25CB +whitecircleinverse;25D9 +whitecornerbracketleft;300E +whitecornerbracketleftvertical;FE43 +whitecornerbracketright;300F +whitecornerbracketrightvertical;FE44 +whitediamond;25C7 +whitediamondcontainingblacksmalldiamond;25C8 +whitedownpointingsmalltriangle;25BF +whitedownpointingtriangle;25BD +whiteleftpointingsmalltriangle;25C3 +whiteleftpointingtriangle;25C1 +whitelenticularbracketleft;3016 +whitelenticularbracketright;3017 +whiterightpointingsmalltriangle;25B9 +whiterightpointingtriangle;25B7 +whitesmallsquare;25AB +whitesmilingface;263A +whitesquare;25A1 +whitestar;2606 +whitetelephone;260F +whitetortoiseshellbracketleft;3018 +whitetortoiseshellbracketright;3019 +whiteuppointingsmalltriangle;25B5 +whiteuppointingtriangle;25B3 +wihiragana;3090 +wikatakana;30F0 +wikorean;315F +wmonospace;FF57 +wohiragana;3092 +wokatakana;30F2 +wokatakanahalfwidth;FF66 +won;20A9 +wonmonospace;FFE6 +wowaenthai;0E27 +wparen;24B2 +wring;1E98 +wsuperior;02B7 +wturned;028D +wynn;01BF +x;0078 +xabovecmb;033D +xbopomofo;3112 +xcircle;24E7 +xdieresis;1E8D +xdotaccent;1E8B +xeharmenian;056D +xi;03BE +xmonospace;FF58 +xparen;24B3 +xsuperior;02E3 +y;0079 +yaadosquare;334E +yabengali;09AF +yacute;00FD +yadeva;092F +yaekorean;3152 +yagujarati;0AAF +yagurmukhi;0A2F +yahiragana;3084 +yakatakana;30E4 +yakatakanahalfwidth;FF94 +yakorean;3151 +yamakkanthai;0E4E +yasmallhiragana;3083 +yasmallkatakana;30E3 +yasmallkatakanahalfwidth;FF6C +yatcyrillic;0463 +ycircle;24E8 +ycircumflex;0177 +ydieresis;00FF +ydotaccent;1E8F +ydotbelow;1EF5 +yeharabic;064A +yehbarreearabic;06D2 +yehbarreefinalarabic;FBAF +yehfinalarabic;FEF2 +yehhamzaabovearabic;0626 +yehhamzaabovefinalarabic;FE8A +yehhamzaaboveinitialarabic;FE8B +yehhamzaabovemedialarabic;FE8C +yehinitialarabic;FEF3 +yehmedialarabic;FEF4 +yehmeeminitialarabic;FCDD +yehmeemisolatedarabic;FC58 +yehnoonfinalarabic;FC94 +yehthreedotsbelowarabic;06D1 +yekorean;3156 +yen;00A5 +yenmonospace;FFE5 +yeokorean;3155 +yeorinhieuhkorean;3186 +yerahbenyomohebrew;05AA +yerahbenyomolefthebrew;05AA +yericyrillic;044B +yerudieresiscyrillic;04F9 +yesieungkorean;3181 +yesieungpansioskorean;3183 +yesieungsioskorean;3182 +yetivhebrew;059A +ygrave;1EF3 +yhook;01B4 +yhookabove;1EF7 +yiarmenian;0575 +yicyrillic;0457 +yikorean;3162 +yinyang;262F +yiwnarmenian;0582 +ymonospace;FF59 +yod;05D9 +yoddagesh;FB39 +yoddageshhebrew;FB39 +yodhebrew;05D9 +yodyodhebrew;05F2 +yodyodpatahhebrew;FB1F +yohiragana;3088 +yoikorean;3189 +yokatakana;30E8 +yokatakanahalfwidth;FF96 +yokorean;315B +yosmallhiragana;3087 +yosmallkatakana;30E7 +yosmallkatakanahalfwidth;FF6E +yotgreek;03F3 +yoyaekorean;3188 +yoyakorean;3187 +yoyakthai;0E22 +yoyingthai;0E0D +yparen;24B4 +ypogegrammeni;037A +ypogegrammenigreekcmb;0345 +yr;01A6 +yring;1E99 +ysuperior;02B8 +ytilde;1EF9 +yturned;028E +yuhiragana;3086 +yuikorean;318C +yukatakana;30E6 +yukatakanahalfwidth;FF95 +yukorean;3160 +yusbigcyrillic;046B +yusbigiotifiedcyrillic;046D +yuslittlecyrillic;0467 +yuslittleiotifiedcyrillic;0469 +yusmallhiragana;3085 +yusmallkatakana;30E5 +yusmallkatakanahalfwidth;FF6D +yuyekorean;318B +yuyeokorean;318A +yyabengali;09DF +yyadeva;095F +z;007A +zaarmenian;0566 +zacute;017A +zadeva;095B +zagurmukhi;0A5B +zaharabic;0638 +zahfinalarabic;FEC6 +zahinitialarabic;FEC7 +zahiragana;3056 +zahmedialarabic;FEC8 +zainarabic;0632 +zainfinalarabic;FEB0 +zakatakana;30B6 +zaqefgadolhebrew;0595 +zaqefqatanhebrew;0594 +zarqahebrew;0598 +zayin;05D6 +zayindagesh;FB36 +zayindageshhebrew;FB36 +zayinhebrew;05D6 +zbopomofo;3117 +zcaron;017E +zcircle;24E9 +zcircumflex;1E91 +zcurl;0291 +zdot;017C +zdotaccent;017C +zdotbelow;1E93 +zecyrillic;0437 +zedescendercyrillic;0499 +zedieresiscyrillic;04DF +zehiragana;305C +zekatakana;30BC +zero;0030 +zeroarabic;0660 +zerobengali;09E6 +zerodeva;0966 +zerogujarati;0AE6 +zerogurmukhi;0A66 +zerohackarabic;0660 +zeroinferior;2080 +zeromonospace;FF10 +zerooldstyle;F730 +zeropersian;06F0 +zerosuperior;2070 +zerothai;0E50 +zerowidthjoiner;FEFF +zerowidthnonjoiner;200C +zerowidthspace;200B +zeta;03B6 +zhbopomofo;3113 +zhearmenian;056A +zhebrevecyrillic;04C2 +zhecyrillic;0436 +zhedescendercyrillic;0497 +zhedieresiscyrillic;04DD +zihiragana;3058 +zikatakana;30B8 +zinorhebrew;05AE +zlinebelow;1E95 +zmonospace;FF5A +zohiragana;305E +zokatakana;30BE +zparen;24B5 +zretroflexhook;0290 +zstroke;01B6 +zuhiragana;305A +zukatakana;30BA +# END +""" + + +_aglfnText = """\ +# ----------------------------------------------------------- +# Copyright 2002-2019 Adobe (http://www.adobe.com/). +# +# Redistribution and use in source and binary forms, with or +# without modification, are permitted provided that the +# following conditions are met: +# +# Redistributions of source code must retain the above +# copyright notice, this list of conditions and the following +# disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials +# provided with the distribution. +# +# Neither the name of Adobe nor the names of its contributors +# may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ----------------------------------------------------------- +# Name: Adobe Glyph List For New Fonts +# Table version: 1.7 +# Date: November 6, 2008 +# URL: https://github.com/adobe-type-tools/agl-aglfn +# +# Description: +# +# AGLFN (Adobe Glyph List For New Fonts) provides a list of base glyph +# names that are recommended for new fonts, which are compatible with +# the AGL (Adobe Glyph List) Specification, and which should be used +# as described in Section 6 of that document. AGLFN comprises the set +# of glyph names from AGL that map via the AGL Specification rules to +# the semantically correct UV (Unicode Value). For example, "Asmall" +# is omitted because AGL maps this glyph name to the PUA (Private Use +# Area) value U+F761, rather than to the UV that maps from the glyph +# name "A." Also omitted is "ffi," because AGL maps this to the +# Alphabetic Presentation Forms value U+FB03, rather than decomposing +# it into the following sequence of three UVs: U+0066, U+0066, and +# U+0069. The name "arrowvertex" has been omitted because this glyph +# now has a real UV, and AGL is now incorrect in mapping it to the PUA +# value U+F8E6. If you do not find an appropriate name for your glyph +# in this list, then please refer to Section 6 of the AGL +# Specification. +# +# Format: three semicolon-delimited fields: +# (1) Standard UV or CUS UV--four uppercase hexadecimal digits +# (2) Glyph name--upper/lowercase letters and digits +# (3) Character names: Unicode character names for standard UVs, and +# descriptive names for CUS UVs--uppercase letters, hyphen, and +# space +# +# The records are sorted by glyph name in increasing ASCII order, +# entries with the same glyph name are sorted in decreasing priority +# order, the UVs and Unicode character names are provided for +# convenience, lines starting with "#" are comments, and blank lines +# should be ignored. +# +# Revision History: +# +# 1.7 [6 November 2008] +# - Reverted to the original 1.4 and earlier mappings for Delta, +# Omega, and mu. +# - Removed mappings for "afii" names. These should now be assigned +# "uni" names. +# - Removed mappings for "commaaccent" names. These should now be +# assigned "uni" names. +# +# 1.6 [30 January 2006] +# - Completed work intended in 1.5. +# +# 1.5 [23 November 2005] +# - Removed duplicated block at end of file. +# - Changed mappings: +# 2206;Delta;INCREMENT changed to 0394;Delta;GREEK CAPITAL LETTER DELTA +# 2126;Omega;OHM SIGN changed to 03A9;Omega;GREEK CAPITAL LETTER OMEGA +# 03BC;mu;MICRO SIGN changed to 03BC;mu;GREEK SMALL LETTER MU +# - Corrected statement above about why "ffi" is omitted. +# +# 1.4 [24 September 2003] +# - Changed version to 1.4, to avoid confusion with the AGL 1.3. +# - Fixed spelling errors in the header. +# - Fully removed "arrowvertex," as it is mapped only to a PUA Unicode +# value in some fonts. +# +# 1.1 [17 April 2003] +# - Renamed [Tt]cedilla back to [Tt]commaaccent. +# +# 1.0 [31 January 2003] +# - Original version. +# - Derived from the AGLv1.2 by: +# removing the PUA area codes; +# removing duplicate Unicode mappings; and +# renaming "tcommaaccent" to "tcedilla" and "Tcommaaccent" to "Tcedilla" +# +0041;A;LATIN CAPITAL LETTER A +00C6;AE;LATIN CAPITAL LETTER AE +01FC;AEacute;LATIN CAPITAL LETTER AE WITH ACUTE +00C1;Aacute;LATIN CAPITAL LETTER A WITH ACUTE +0102;Abreve;LATIN CAPITAL LETTER A WITH BREVE +00C2;Acircumflex;LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C4;Adieresis;LATIN CAPITAL LETTER A WITH DIAERESIS +00C0;Agrave;LATIN CAPITAL LETTER A WITH GRAVE +0391;Alpha;GREEK CAPITAL LETTER ALPHA +0386;Alphatonos;GREEK CAPITAL LETTER ALPHA WITH TONOS +0100;Amacron;LATIN CAPITAL LETTER A WITH MACRON +0104;Aogonek;LATIN CAPITAL LETTER A WITH OGONEK +00C5;Aring;LATIN CAPITAL LETTER A WITH RING ABOVE +01FA;Aringacute;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +00C3;Atilde;LATIN CAPITAL LETTER A WITH TILDE +0042;B;LATIN CAPITAL LETTER B +0392;Beta;GREEK CAPITAL LETTER BETA +0043;C;LATIN CAPITAL LETTER C +0106;Cacute;LATIN CAPITAL LETTER C WITH ACUTE +010C;Ccaron;LATIN CAPITAL LETTER C WITH CARON +00C7;Ccedilla;LATIN CAPITAL LETTER C WITH CEDILLA +0108;Ccircumflex;LATIN CAPITAL LETTER C WITH CIRCUMFLEX +010A;Cdotaccent;LATIN CAPITAL LETTER C WITH DOT ABOVE +03A7;Chi;GREEK CAPITAL LETTER CHI +0044;D;LATIN CAPITAL LETTER D +010E;Dcaron;LATIN CAPITAL LETTER D WITH CARON +0110;Dcroat;LATIN CAPITAL LETTER D WITH STROKE +2206;Delta;INCREMENT +0045;E;LATIN CAPITAL LETTER E +00C9;Eacute;LATIN CAPITAL LETTER E WITH ACUTE +0114;Ebreve;LATIN CAPITAL LETTER E WITH BREVE +011A;Ecaron;LATIN CAPITAL LETTER E WITH CARON +00CA;Ecircumflex;LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CB;Edieresis;LATIN CAPITAL LETTER E WITH DIAERESIS +0116;Edotaccent;LATIN CAPITAL LETTER E WITH DOT ABOVE +00C8;Egrave;LATIN CAPITAL LETTER E WITH GRAVE +0112;Emacron;LATIN CAPITAL LETTER E WITH MACRON +014A;Eng;LATIN CAPITAL LETTER ENG +0118;Eogonek;LATIN CAPITAL LETTER E WITH OGONEK +0395;Epsilon;GREEK CAPITAL LETTER EPSILON +0388;Epsilontonos;GREEK CAPITAL LETTER EPSILON WITH TONOS +0397;Eta;GREEK CAPITAL LETTER ETA +0389;Etatonos;GREEK CAPITAL LETTER ETA WITH TONOS +00D0;Eth;LATIN CAPITAL LETTER ETH +20AC;Euro;EURO SIGN +0046;F;LATIN CAPITAL LETTER F +0047;G;LATIN CAPITAL LETTER G +0393;Gamma;GREEK CAPITAL LETTER GAMMA +011E;Gbreve;LATIN CAPITAL LETTER G WITH BREVE +01E6;Gcaron;LATIN CAPITAL LETTER G WITH CARON +011C;Gcircumflex;LATIN CAPITAL LETTER G WITH CIRCUMFLEX +0120;Gdotaccent;LATIN CAPITAL LETTER G WITH DOT ABOVE +0048;H;LATIN CAPITAL LETTER H +25CF;H18533;BLACK CIRCLE +25AA;H18543;BLACK SMALL SQUARE +25AB;H18551;WHITE SMALL SQUARE +25A1;H22073;WHITE SQUARE +0126;Hbar;LATIN CAPITAL LETTER H WITH STROKE +0124;Hcircumflex;LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0049;I;LATIN CAPITAL LETTER I +0132;IJ;LATIN CAPITAL LIGATURE IJ +00CD;Iacute;LATIN CAPITAL LETTER I WITH ACUTE +012C;Ibreve;LATIN CAPITAL LETTER I WITH BREVE +00CE;Icircumflex;LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF;Idieresis;LATIN CAPITAL LETTER I WITH DIAERESIS +0130;Idotaccent;LATIN CAPITAL LETTER I WITH DOT ABOVE +2111;Ifraktur;BLACK-LETTER CAPITAL I +00CC;Igrave;LATIN CAPITAL LETTER I WITH GRAVE +012A;Imacron;LATIN CAPITAL LETTER I WITH MACRON +012E;Iogonek;LATIN CAPITAL LETTER I WITH OGONEK +0399;Iota;GREEK CAPITAL LETTER IOTA +03AA;Iotadieresis;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +038A;Iotatonos;GREEK CAPITAL LETTER IOTA WITH TONOS +0128;Itilde;LATIN CAPITAL LETTER I WITH TILDE +004A;J;LATIN CAPITAL LETTER J +0134;Jcircumflex;LATIN CAPITAL LETTER J WITH CIRCUMFLEX +004B;K;LATIN CAPITAL LETTER K +039A;Kappa;GREEK CAPITAL LETTER KAPPA +004C;L;LATIN CAPITAL LETTER L +0139;Lacute;LATIN CAPITAL LETTER L WITH ACUTE +039B;Lambda;GREEK CAPITAL LETTER LAMDA +013D;Lcaron;LATIN CAPITAL LETTER L WITH CARON +013F;Ldot;LATIN CAPITAL LETTER L WITH MIDDLE DOT +0141;Lslash;LATIN CAPITAL LETTER L WITH STROKE +004D;M;LATIN CAPITAL LETTER M +039C;Mu;GREEK CAPITAL LETTER MU +004E;N;LATIN CAPITAL LETTER N +0143;Nacute;LATIN CAPITAL LETTER N WITH ACUTE +0147;Ncaron;LATIN CAPITAL LETTER N WITH CARON +00D1;Ntilde;LATIN CAPITAL LETTER N WITH TILDE +039D;Nu;GREEK CAPITAL LETTER NU +004F;O;LATIN CAPITAL LETTER O +0152;OE;LATIN CAPITAL LIGATURE OE +00D3;Oacute;LATIN CAPITAL LETTER O WITH ACUTE +014E;Obreve;LATIN CAPITAL LETTER O WITH BREVE +00D4;Ocircumflex;LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00D6;Odieresis;LATIN CAPITAL LETTER O WITH DIAERESIS +00D2;Ograve;LATIN CAPITAL LETTER O WITH GRAVE +01A0;Ohorn;LATIN CAPITAL LETTER O WITH HORN +0150;Ohungarumlaut;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +014C;Omacron;LATIN CAPITAL LETTER O WITH MACRON +2126;Omega;OHM SIGN +038F;Omegatonos;GREEK CAPITAL LETTER OMEGA WITH TONOS +039F;Omicron;GREEK CAPITAL LETTER OMICRON +038C;Omicrontonos;GREEK CAPITAL LETTER OMICRON WITH TONOS +00D8;Oslash;LATIN CAPITAL LETTER O WITH STROKE +01FE;Oslashacute;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +00D5;Otilde;LATIN CAPITAL LETTER O WITH TILDE +0050;P;LATIN CAPITAL LETTER P +03A6;Phi;GREEK CAPITAL LETTER PHI +03A0;Pi;GREEK CAPITAL LETTER PI +03A8;Psi;GREEK CAPITAL LETTER PSI +0051;Q;LATIN CAPITAL LETTER Q +0052;R;LATIN CAPITAL LETTER R +0154;Racute;LATIN CAPITAL LETTER R WITH ACUTE +0158;Rcaron;LATIN CAPITAL LETTER R WITH CARON +211C;Rfraktur;BLACK-LETTER CAPITAL R +03A1;Rho;GREEK CAPITAL LETTER RHO +0053;S;LATIN CAPITAL LETTER S +250C;SF010000;BOX DRAWINGS LIGHT DOWN AND RIGHT +2514;SF020000;BOX DRAWINGS LIGHT UP AND RIGHT +2510;SF030000;BOX DRAWINGS LIGHT DOWN AND LEFT +2518;SF040000;BOX DRAWINGS LIGHT UP AND LEFT +253C;SF050000;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +252C;SF060000;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +2534;SF070000;BOX DRAWINGS LIGHT UP AND HORIZONTAL +251C;SF080000;BOX DRAWINGS LIGHT VERTICAL AND RIGHT +2524;SF090000;BOX DRAWINGS LIGHT VERTICAL AND LEFT +2500;SF100000;BOX DRAWINGS LIGHT HORIZONTAL +2502;SF110000;BOX DRAWINGS LIGHT VERTICAL +2561;SF190000;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE +2562;SF200000;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE +2556;SF210000;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE +2555;SF220000;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE +2563;SF230000;BOX DRAWINGS DOUBLE VERTICAL AND LEFT +2551;SF240000;BOX DRAWINGS DOUBLE VERTICAL +2557;SF250000;BOX DRAWINGS DOUBLE DOWN AND LEFT +255D;SF260000;BOX DRAWINGS DOUBLE UP AND LEFT +255C;SF270000;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE +255B;SF280000;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE +255E;SF360000;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE +255F;SF370000;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE +255A;SF380000;BOX DRAWINGS DOUBLE UP AND RIGHT +2554;SF390000;BOX DRAWINGS DOUBLE DOWN AND RIGHT +2569;SF400000;BOX DRAWINGS DOUBLE UP AND HORIZONTAL +2566;SF410000;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +2560;SF420000;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +2550;SF430000;BOX DRAWINGS DOUBLE HORIZONTAL +256C;SF440000;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +2567;SF450000;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE +2568;SF460000;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE +2564;SF470000;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE +2565;SF480000;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE +2559;SF490000;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE +2558;SF500000;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE +2552;SF510000;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE +2553;SF520000;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE +256B;SF530000;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE +256A;SF540000;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE +015A;Sacute;LATIN CAPITAL LETTER S WITH ACUTE +0160;Scaron;LATIN CAPITAL LETTER S WITH CARON +015E;Scedilla;LATIN CAPITAL LETTER S WITH CEDILLA +015C;Scircumflex;LATIN CAPITAL LETTER S WITH CIRCUMFLEX +03A3;Sigma;GREEK CAPITAL LETTER SIGMA +0054;T;LATIN CAPITAL LETTER T +03A4;Tau;GREEK CAPITAL LETTER TAU +0166;Tbar;LATIN CAPITAL LETTER T WITH STROKE +0164;Tcaron;LATIN CAPITAL LETTER T WITH CARON +0398;Theta;GREEK CAPITAL LETTER THETA +00DE;Thorn;LATIN CAPITAL LETTER THORN +0055;U;LATIN CAPITAL LETTER U +00DA;Uacute;LATIN CAPITAL LETTER U WITH ACUTE +016C;Ubreve;LATIN CAPITAL LETTER U WITH BREVE +00DB;Ucircumflex;LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC;Udieresis;LATIN CAPITAL LETTER U WITH DIAERESIS +00D9;Ugrave;LATIN CAPITAL LETTER U WITH GRAVE +01AF;Uhorn;LATIN CAPITAL LETTER U WITH HORN +0170;Uhungarumlaut;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +016A;Umacron;LATIN CAPITAL LETTER U WITH MACRON +0172;Uogonek;LATIN CAPITAL LETTER U WITH OGONEK +03A5;Upsilon;GREEK CAPITAL LETTER UPSILON +03D2;Upsilon1;GREEK UPSILON WITH HOOK SYMBOL +03AB;Upsilondieresis;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +038E;Upsilontonos;GREEK CAPITAL LETTER UPSILON WITH TONOS +016E;Uring;LATIN CAPITAL LETTER U WITH RING ABOVE +0168;Utilde;LATIN CAPITAL LETTER U WITH TILDE +0056;V;LATIN CAPITAL LETTER V +0057;W;LATIN CAPITAL LETTER W +1E82;Wacute;LATIN CAPITAL LETTER W WITH ACUTE +0174;Wcircumflex;LATIN CAPITAL LETTER W WITH CIRCUMFLEX +1E84;Wdieresis;LATIN CAPITAL LETTER W WITH DIAERESIS +1E80;Wgrave;LATIN CAPITAL LETTER W WITH GRAVE +0058;X;LATIN CAPITAL LETTER X +039E;Xi;GREEK CAPITAL LETTER XI +0059;Y;LATIN CAPITAL LETTER Y +00DD;Yacute;LATIN CAPITAL LETTER Y WITH ACUTE +0176;Ycircumflex;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0178;Ydieresis;LATIN CAPITAL LETTER Y WITH DIAERESIS +1EF2;Ygrave;LATIN CAPITAL LETTER Y WITH GRAVE +005A;Z;LATIN CAPITAL LETTER Z +0179;Zacute;LATIN CAPITAL LETTER Z WITH ACUTE +017D;Zcaron;LATIN CAPITAL LETTER Z WITH CARON +017B;Zdotaccent;LATIN CAPITAL LETTER Z WITH DOT ABOVE +0396;Zeta;GREEK CAPITAL LETTER ZETA +0061;a;LATIN SMALL LETTER A +00E1;aacute;LATIN SMALL LETTER A WITH ACUTE +0103;abreve;LATIN SMALL LETTER A WITH BREVE +00E2;acircumflex;LATIN SMALL LETTER A WITH CIRCUMFLEX +00B4;acute;ACUTE ACCENT +0301;acutecomb;COMBINING ACUTE ACCENT +00E4;adieresis;LATIN SMALL LETTER A WITH DIAERESIS +00E6;ae;LATIN SMALL LETTER AE +01FD;aeacute;LATIN SMALL LETTER AE WITH ACUTE +00E0;agrave;LATIN SMALL LETTER A WITH GRAVE +2135;aleph;ALEF SYMBOL +03B1;alpha;GREEK SMALL LETTER ALPHA +03AC;alphatonos;GREEK SMALL LETTER ALPHA WITH TONOS +0101;amacron;LATIN SMALL LETTER A WITH MACRON +0026;ampersand;AMPERSAND +2220;angle;ANGLE +2329;angleleft;LEFT-POINTING ANGLE BRACKET +232A;angleright;RIGHT-POINTING ANGLE BRACKET +0387;anoteleia;GREEK ANO TELEIA +0105;aogonek;LATIN SMALL LETTER A WITH OGONEK +2248;approxequal;ALMOST EQUAL TO +00E5;aring;LATIN SMALL LETTER A WITH RING ABOVE +01FB;aringacute;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +2194;arrowboth;LEFT RIGHT ARROW +21D4;arrowdblboth;LEFT RIGHT DOUBLE ARROW +21D3;arrowdbldown;DOWNWARDS DOUBLE ARROW +21D0;arrowdblleft;LEFTWARDS DOUBLE ARROW +21D2;arrowdblright;RIGHTWARDS DOUBLE ARROW +21D1;arrowdblup;UPWARDS DOUBLE ARROW +2193;arrowdown;DOWNWARDS ARROW +2190;arrowleft;LEFTWARDS ARROW +2192;arrowright;RIGHTWARDS ARROW +2191;arrowup;UPWARDS ARROW +2195;arrowupdn;UP DOWN ARROW +21A8;arrowupdnbse;UP DOWN ARROW WITH BASE +005E;asciicircum;CIRCUMFLEX ACCENT +007E;asciitilde;TILDE +002A;asterisk;ASTERISK +2217;asteriskmath;ASTERISK OPERATOR +0040;at;COMMERCIAL AT +00E3;atilde;LATIN SMALL LETTER A WITH TILDE +0062;b;LATIN SMALL LETTER B +005C;backslash;REVERSE SOLIDUS +007C;bar;VERTICAL LINE +03B2;beta;GREEK SMALL LETTER BETA +2588;block;FULL BLOCK +007B;braceleft;LEFT CURLY BRACKET +007D;braceright;RIGHT CURLY BRACKET +005B;bracketleft;LEFT SQUARE BRACKET +005D;bracketright;RIGHT SQUARE BRACKET +02D8;breve;BREVE +00A6;brokenbar;BROKEN BAR +2022;bullet;BULLET +0063;c;LATIN SMALL LETTER C +0107;cacute;LATIN SMALL LETTER C WITH ACUTE +02C7;caron;CARON +21B5;carriagereturn;DOWNWARDS ARROW WITH CORNER LEFTWARDS +010D;ccaron;LATIN SMALL LETTER C WITH CARON +00E7;ccedilla;LATIN SMALL LETTER C WITH CEDILLA +0109;ccircumflex;LATIN SMALL LETTER C WITH CIRCUMFLEX +010B;cdotaccent;LATIN SMALL LETTER C WITH DOT ABOVE +00B8;cedilla;CEDILLA +00A2;cent;CENT SIGN +03C7;chi;GREEK SMALL LETTER CHI +25CB;circle;WHITE CIRCLE +2297;circlemultiply;CIRCLED TIMES +2295;circleplus;CIRCLED PLUS +02C6;circumflex;MODIFIER LETTER CIRCUMFLEX ACCENT +2663;club;BLACK CLUB SUIT +003A;colon;COLON +20A1;colonmonetary;COLON SIGN +002C;comma;COMMA +2245;congruent;APPROXIMATELY EQUAL TO +00A9;copyright;COPYRIGHT SIGN +00A4;currency;CURRENCY SIGN +0064;d;LATIN SMALL LETTER D +2020;dagger;DAGGER +2021;daggerdbl;DOUBLE DAGGER +010F;dcaron;LATIN SMALL LETTER D WITH CARON +0111;dcroat;LATIN SMALL LETTER D WITH STROKE +00B0;degree;DEGREE SIGN +03B4;delta;GREEK SMALL LETTER DELTA +2666;diamond;BLACK DIAMOND SUIT +00A8;dieresis;DIAERESIS +0385;dieresistonos;GREEK DIALYTIKA TONOS +00F7;divide;DIVISION SIGN +2593;dkshade;DARK SHADE +2584;dnblock;LOWER HALF BLOCK +0024;dollar;DOLLAR SIGN +20AB;dong;DONG SIGN +02D9;dotaccent;DOT ABOVE +0323;dotbelowcomb;COMBINING DOT BELOW +0131;dotlessi;LATIN SMALL LETTER DOTLESS I +22C5;dotmath;DOT OPERATOR +0065;e;LATIN SMALL LETTER E +00E9;eacute;LATIN SMALL LETTER E WITH ACUTE +0115;ebreve;LATIN SMALL LETTER E WITH BREVE +011B;ecaron;LATIN SMALL LETTER E WITH CARON +00EA;ecircumflex;LATIN SMALL LETTER E WITH CIRCUMFLEX +00EB;edieresis;LATIN SMALL LETTER E WITH DIAERESIS +0117;edotaccent;LATIN SMALL LETTER E WITH DOT ABOVE +00E8;egrave;LATIN SMALL LETTER E WITH GRAVE +0038;eight;DIGIT EIGHT +2208;element;ELEMENT OF +2026;ellipsis;HORIZONTAL ELLIPSIS +0113;emacron;LATIN SMALL LETTER E WITH MACRON +2014;emdash;EM DASH +2205;emptyset;EMPTY SET +2013;endash;EN DASH +014B;eng;LATIN SMALL LETTER ENG +0119;eogonek;LATIN SMALL LETTER E WITH OGONEK +03B5;epsilon;GREEK SMALL LETTER EPSILON +03AD;epsilontonos;GREEK SMALL LETTER EPSILON WITH TONOS +003D;equal;EQUALS SIGN +2261;equivalence;IDENTICAL TO +212E;estimated;ESTIMATED SYMBOL +03B7;eta;GREEK SMALL LETTER ETA +03AE;etatonos;GREEK SMALL LETTER ETA WITH TONOS +00F0;eth;LATIN SMALL LETTER ETH +0021;exclam;EXCLAMATION MARK +203C;exclamdbl;DOUBLE EXCLAMATION MARK +00A1;exclamdown;INVERTED EXCLAMATION MARK +2203;existential;THERE EXISTS +0066;f;LATIN SMALL LETTER F +2640;female;FEMALE SIGN +2012;figuredash;FIGURE DASH +25A0;filledbox;BLACK SQUARE +25AC;filledrect;BLACK RECTANGLE +0035;five;DIGIT FIVE +215D;fiveeighths;VULGAR FRACTION FIVE EIGHTHS +0192;florin;LATIN SMALL LETTER F WITH HOOK +0034;four;DIGIT FOUR +2044;fraction;FRACTION SLASH +20A3;franc;FRENCH FRANC SIGN +0067;g;LATIN SMALL LETTER G +03B3;gamma;GREEK SMALL LETTER GAMMA +011F;gbreve;LATIN SMALL LETTER G WITH BREVE +01E7;gcaron;LATIN SMALL LETTER G WITH CARON +011D;gcircumflex;LATIN SMALL LETTER G WITH CIRCUMFLEX +0121;gdotaccent;LATIN SMALL LETTER G WITH DOT ABOVE +00DF;germandbls;LATIN SMALL LETTER SHARP S +2207;gradient;NABLA +0060;grave;GRAVE ACCENT +0300;gravecomb;COMBINING GRAVE ACCENT +003E;greater;GREATER-THAN SIGN +2265;greaterequal;GREATER-THAN OR EQUAL TO +00AB;guillemotleft;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +00BB;guillemotright;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +2039;guilsinglleft;SINGLE LEFT-POINTING ANGLE QUOTATION MARK +203A;guilsinglright;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0068;h;LATIN SMALL LETTER H +0127;hbar;LATIN SMALL LETTER H WITH STROKE +0125;hcircumflex;LATIN SMALL LETTER H WITH CIRCUMFLEX +2665;heart;BLACK HEART SUIT +0309;hookabovecomb;COMBINING HOOK ABOVE +2302;house;HOUSE +02DD;hungarumlaut;DOUBLE ACUTE ACCENT +002D;hyphen;HYPHEN-MINUS +0069;i;LATIN SMALL LETTER I +00ED;iacute;LATIN SMALL LETTER I WITH ACUTE +012D;ibreve;LATIN SMALL LETTER I WITH BREVE +00EE;icircumflex;LATIN SMALL LETTER I WITH CIRCUMFLEX +00EF;idieresis;LATIN SMALL LETTER I WITH DIAERESIS +00EC;igrave;LATIN SMALL LETTER I WITH GRAVE +0133;ij;LATIN SMALL LIGATURE IJ +012B;imacron;LATIN SMALL LETTER I WITH MACRON +221E;infinity;INFINITY +222B;integral;INTEGRAL +2321;integralbt;BOTTOM HALF INTEGRAL +2320;integraltp;TOP HALF INTEGRAL +2229;intersection;INTERSECTION +25D8;invbullet;INVERSE BULLET +25D9;invcircle;INVERSE WHITE CIRCLE +263B;invsmileface;BLACK SMILING FACE +012F;iogonek;LATIN SMALL LETTER I WITH OGONEK +03B9;iota;GREEK SMALL LETTER IOTA +03CA;iotadieresis;GREEK SMALL LETTER IOTA WITH DIALYTIKA +0390;iotadieresistonos;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +03AF;iotatonos;GREEK SMALL LETTER IOTA WITH TONOS +0129;itilde;LATIN SMALL LETTER I WITH TILDE +006A;j;LATIN SMALL LETTER J +0135;jcircumflex;LATIN SMALL LETTER J WITH CIRCUMFLEX +006B;k;LATIN SMALL LETTER K +03BA;kappa;GREEK SMALL LETTER KAPPA +0138;kgreenlandic;LATIN SMALL LETTER KRA +006C;l;LATIN SMALL LETTER L +013A;lacute;LATIN SMALL LETTER L WITH ACUTE +03BB;lambda;GREEK SMALL LETTER LAMDA +013E;lcaron;LATIN SMALL LETTER L WITH CARON +0140;ldot;LATIN SMALL LETTER L WITH MIDDLE DOT +003C;less;LESS-THAN SIGN +2264;lessequal;LESS-THAN OR EQUAL TO +258C;lfblock;LEFT HALF BLOCK +20A4;lira;LIRA SIGN +2227;logicaland;LOGICAL AND +00AC;logicalnot;NOT SIGN +2228;logicalor;LOGICAL OR +017F;longs;LATIN SMALL LETTER LONG S +25CA;lozenge;LOZENGE +0142;lslash;LATIN SMALL LETTER L WITH STROKE +2591;ltshade;LIGHT SHADE +006D;m;LATIN SMALL LETTER M +00AF;macron;MACRON +2642;male;MALE SIGN +2212;minus;MINUS SIGN +2032;minute;PRIME +00B5;mu;MICRO SIGN +00D7;multiply;MULTIPLICATION SIGN +266A;musicalnote;EIGHTH NOTE +266B;musicalnotedbl;BEAMED EIGHTH NOTES +006E;n;LATIN SMALL LETTER N +0144;nacute;LATIN SMALL LETTER N WITH ACUTE +0149;napostrophe;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +0148;ncaron;LATIN SMALL LETTER N WITH CARON +0039;nine;DIGIT NINE +2209;notelement;NOT AN ELEMENT OF +2260;notequal;NOT EQUAL TO +2284;notsubset;NOT A SUBSET OF +00F1;ntilde;LATIN SMALL LETTER N WITH TILDE +03BD;nu;GREEK SMALL LETTER NU +0023;numbersign;NUMBER SIGN +006F;o;LATIN SMALL LETTER O +00F3;oacute;LATIN SMALL LETTER O WITH ACUTE +014F;obreve;LATIN SMALL LETTER O WITH BREVE +00F4;ocircumflex;LATIN SMALL LETTER O WITH CIRCUMFLEX +00F6;odieresis;LATIN SMALL LETTER O WITH DIAERESIS +0153;oe;LATIN SMALL LIGATURE OE +02DB;ogonek;OGONEK +00F2;ograve;LATIN SMALL LETTER O WITH GRAVE +01A1;ohorn;LATIN SMALL LETTER O WITH HORN +0151;ohungarumlaut;LATIN SMALL LETTER O WITH DOUBLE ACUTE +014D;omacron;LATIN SMALL LETTER O WITH MACRON +03C9;omega;GREEK SMALL LETTER OMEGA +03D6;omega1;GREEK PI SYMBOL +03CE;omegatonos;GREEK SMALL LETTER OMEGA WITH TONOS +03BF;omicron;GREEK SMALL LETTER OMICRON +03CC;omicrontonos;GREEK SMALL LETTER OMICRON WITH TONOS +0031;one;DIGIT ONE +2024;onedotenleader;ONE DOT LEADER +215B;oneeighth;VULGAR FRACTION ONE EIGHTH +00BD;onehalf;VULGAR FRACTION ONE HALF +00BC;onequarter;VULGAR FRACTION ONE QUARTER +2153;onethird;VULGAR FRACTION ONE THIRD +25E6;openbullet;WHITE BULLET +00AA;ordfeminine;FEMININE ORDINAL INDICATOR +00BA;ordmasculine;MASCULINE ORDINAL INDICATOR +221F;orthogonal;RIGHT ANGLE +00F8;oslash;LATIN SMALL LETTER O WITH STROKE +01FF;oslashacute;LATIN SMALL LETTER O WITH STROKE AND ACUTE +00F5;otilde;LATIN SMALL LETTER O WITH TILDE +0070;p;LATIN SMALL LETTER P +00B6;paragraph;PILCROW SIGN +0028;parenleft;LEFT PARENTHESIS +0029;parenright;RIGHT PARENTHESIS +2202;partialdiff;PARTIAL DIFFERENTIAL +0025;percent;PERCENT SIGN +002E;period;FULL STOP +00B7;periodcentered;MIDDLE DOT +22A5;perpendicular;UP TACK +2030;perthousand;PER MILLE SIGN +20A7;peseta;PESETA SIGN +03C6;phi;GREEK SMALL LETTER PHI +03D5;phi1;GREEK PHI SYMBOL +03C0;pi;GREEK SMALL LETTER PI +002B;plus;PLUS SIGN +00B1;plusminus;PLUS-MINUS SIGN +211E;prescription;PRESCRIPTION TAKE +220F;product;N-ARY PRODUCT +2282;propersubset;SUBSET OF +2283;propersuperset;SUPERSET OF +221D;proportional;PROPORTIONAL TO +03C8;psi;GREEK SMALL LETTER PSI +0071;q;LATIN SMALL LETTER Q +003F;question;QUESTION MARK +00BF;questiondown;INVERTED QUESTION MARK +0022;quotedbl;QUOTATION MARK +201E;quotedblbase;DOUBLE LOW-9 QUOTATION MARK +201C;quotedblleft;LEFT DOUBLE QUOTATION MARK +201D;quotedblright;RIGHT DOUBLE QUOTATION MARK +2018;quoteleft;LEFT SINGLE QUOTATION MARK +201B;quotereversed;SINGLE HIGH-REVERSED-9 QUOTATION MARK +2019;quoteright;RIGHT SINGLE QUOTATION MARK +201A;quotesinglbase;SINGLE LOW-9 QUOTATION MARK +0027;quotesingle;APOSTROPHE +0072;r;LATIN SMALL LETTER R +0155;racute;LATIN SMALL LETTER R WITH ACUTE +221A;radical;SQUARE ROOT +0159;rcaron;LATIN SMALL LETTER R WITH CARON +2286;reflexsubset;SUBSET OF OR EQUAL TO +2287;reflexsuperset;SUPERSET OF OR EQUAL TO +00AE;registered;REGISTERED SIGN +2310;revlogicalnot;REVERSED NOT SIGN +03C1;rho;GREEK SMALL LETTER RHO +02DA;ring;RING ABOVE +2590;rtblock;RIGHT HALF BLOCK +0073;s;LATIN SMALL LETTER S +015B;sacute;LATIN SMALL LETTER S WITH ACUTE +0161;scaron;LATIN SMALL LETTER S WITH CARON +015F;scedilla;LATIN SMALL LETTER S WITH CEDILLA +015D;scircumflex;LATIN SMALL LETTER S WITH CIRCUMFLEX +2033;second;DOUBLE PRIME +00A7;section;SECTION SIGN +003B;semicolon;SEMICOLON +0037;seven;DIGIT SEVEN +215E;seveneighths;VULGAR FRACTION SEVEN EIGHTHS +2592;shade;MEDIUM SHADE +03C3;sigma;GREEK SMALL LETTER SIGMA +03C2;sigma1;GREEK SMALL LETTER FINAL SIGMA +223C;similar;TILDE OPERATOR +0036;six;DIGIT SIX +002F;slash;SOLIDUS +263A;smileface;WHITE SMILING FACE +0020;space;SPACE +2660;spade;BLACK SPADE SUIT +00A3;sterling;POUND SIGN +220B;suchthat;CONTAINS AS MEMBER +2211;summation;N-ARY SUMMATION +263C;sun;WHITE SUN WITH RAYS +0074;t;LATIN SMALL LETTER T +03C4;tau;GREEK SMALL LETTER TAU +0167;tbar;LATIN SMALL LETTER T WITH STROKE +0165;tcaron;LATIN SMALL LETTER T WITH CARON +2234;therefore;THEREFORE +03B8;theta;GREEK SMALL LETTER THETA +03D1;theta1;GREEK THETA SYMBOL +00FE;thorn;LATIN SMALL LETTER THORN +0033;three;DIGIT THREE +215C;threeeighths;VULGAR FRACTION THREE EIGHTHS +00BE;threequarters;VULGAR FRACTION THREE QUARTERS +02DC;tilde;SMALL TILDE +0303;tildecomb;COMBINING TILDE +0384;tonos;GREEK TONOS +2122;trademark;TRADE MARK SIGN +25BC;triagdn;BLACK DOWN-POINTING TRIANGLE +25C4;triaglf;BLACK LEFT-POINTING POINTER +25BA;triagrt;BLACK RIGHT-POINTING POINTER +25B2;triagup;BLACK UP-POINTING TRIANGLE +0032;two;DIGIT TWO +2025;twodotenleader;TWO DOT LEADER +2154;twothirds;VULGAR FRACTION TWO THIRDS +0075;u;LATIN SMALL LETTER U +00FA;uacute;LATIN SMALL LETTER U WITH ACUTE +016D;ubreve;LATIN SMALL LETTER U WITH BREVE +00FB;ucircumflex;LATIN SMALL LETTER U WITH CIRCUMFLEX +00FC;udieresis;LATIN SMALL LETTER U WITH DIAERESIS +00F9;ugrave;LATIN SMALL LETTER U WITH GRAVE +01B0;uhorn;LATIN SMALL LETTER U WITH HORN +0171;uhungarumlaut;LATIN SMALL LETTER U WITH DOUBLE ACUTE +016B;umacron;LATIN SMALL LETTER U WITH MACRON +005F;underscore;LOW LINE +2017;underscoredbl;DOUBLE LOW LINE +222A;union;UNION +2200;universal;FOR ALL +0173;uogonek;LATIN SMALL LETTER U WITH OGONEK +2580;upblock;UPPER HALF BLOCK +03C5;upsilon;GREEK SMALL LETTER UPSILON +03CB;upsilondieresis;GREEK SMALL LETTER UPSILON WITH DIALYTIKA +03B0;upsilondieresistonos;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03CD;upsilontonos;GREEK SMALL LETTER UPSILON WITH TONOS +016F;uring;LATIN SMALL LETTER U WITH RING ABOVE +0169;utilde;LATIN SMALL LETTER U WITH TILDE +0076;v;LATIN SMALL LETTER V +0077;w;LATIN SMALL LETTER W +1E83;wacute;LATIN SMALL LETTER W WITH ACUTE +0175;wcircumflex;LATIN SMALL LETTER W WITH CIRCUMFLEX +1E85;wdieresis;LATIN SMALL LETTER W WITH DIAERESIS +2118;weierstrass;SCRIPT CAPITAL P +1E81;wgrave;LATIN SMALL LETTER W WITH GRAVE +0078;x;LATIN SMALL LETTER X +03BE;xi;GREEK SMALL LETTER XI +0079;y;LATIN SMALL LETTER Y +00FD;yacute;LATIN SMALL LETTER Y WITH ACUTE +0177;ycircumflex;LATIN SMALL LETTER Y WITH CIRCUMFLEX +00FF;ydieresis;LATIN SMALL LETTER Y WITH DIAERESIS +00A5;yen;YEN SIGN +1EF3;ygrave;LATIN SMALL LETTER Y WITH GRAVE +007A;z;LATIN SMALL LETTER Z +017A;zacute;LATIN SMALL LETTER Z WITH ACUTE +017E;zcaron;LATIN SMALL LETTER Z WITH CARON +017C;zdotaccent;LATIN SMALL LETTER Z WITH DOT ABOVE +0030;zero;DIGIT ZERO +03B6;zeta;GREEK SMALL LETTER ZETA +# END +""" + + +class AGLError(Exception): + pass + +LEGACY_AGL2UV = {} +AGL2UV = {} +UV2AGL = {} + +def _builddicts(): + import re + + lines = _aglText.splitlines() + + parseAGL_RE = re.compile("([A-Za-z0-9]+);((?:[0-9A-F]{4})(?: (?:[0-9A-F]{4}))*)$") + + for line in lines: + if not line or line[:1] == '#': + continue + m = parseAGL_RE.match(line) + if not m: + raise AGLError("syntax error in glyphlist.txt: %s" % repr(line[:20])) + unicodes = m.group(2) + assert len(unicodes) % 5 == 4 + unicodes = [int(unicode, 16) for unicode in unicodes.split()] + glyphName = tostr(m.group(1)) + LEGACY_AGL2UV[glyphName] = unicodes + + lines = _aglfnText.splitlines() + + parseAGLFN_RE = re.compile("([0-9A-F]{4});([A-Za-z0-9]+);.*?$") + + for line in lines: + if not line or line[:1] == '#': + continue + m = parseAGLFN_RE.match(line) + if not m: + raise AGLError("syntax error in aglfn.txt: %s" % repr(line[:20])) + unicode = m.group(1) + assert len(unicode) == 4 + unicode = int(unicode, 16) + glyphName = tostr(m.group(2)) + AGL2UV[glyphName] = unicode + UV2AGL[unicode] = glyphName + +_builddicts() + + +def toUnicode(glyph, isZapfDingbats=False): + """Convert glyph names to Unicode, such as ``'longs_t.oldstyle'`` --> ``u'Å¿t'`` + + If ``isZapfDingbats`` is ``True``, the implementation recognizes additional + glyph names (as required by the AGL specification). + """ + # https://github.com/adobe-type-tools/agl-specification#2-the-mapping + # + # 1. Drop all the characters from the glyph name starting with + # the first occurrence of a period (U+002E; FULL STOP), if any. + glyph = glyph.split(".", 1)[0] + + # 2. Split the remaining string into a sequence of components, + # using underscore (U+005F; LOW LINE) as the delimiter. + components = glyph.split("_") + + # 3. Map each component to a character string according to the + # procedure below, and concatenate those strings; the result + # is the character string to which the glyph name is mapped. + result = [_glyphComponentToUnicode(c, isZapfDingbats) + for c in components] + return "".join(result) + + +def _glyphComponentToUnicode(component, isZapfDingbats): + # If the font is Zapf Dingbats (PostScript FontName: ZapfDingbats), + # and the component is in the ITC Zapf Dingbats Glyph List, then + # map it to the corresponding character in that list. + dingbat = _zapfDingbatsToUnicode(component) if isZapfDingbats else None + if dingbat: + return dingbat + + # Otherwise, if the component is in AGL, then map it + # to the corresponding character in that list. + uchars = LEGACY_AGL2UV.get(component) + if uchars: + return "".join(map(chr, uchars)) + + # Otherwise, if the component is of the form "uni" (U+0075, + # U+006E, and U+0069) followed by a sequence of uppercase + # hexadecimal digits (0–9 and A–F, meaning U+0030 through + # U+0039 and U+0041 through U+0046), if the length of that + # sequence is a multiple of four, and if each group of four + # digits represents a value in the ranges 0000 through D7FF + # or E000 through FFFF, then interpret each as a Unicode scalar + # value and map the component to the string made of those + # scalar values. Note that the range and digit-length + # restrictions mean that the "uni" glyph name prefix can be + # used only with UVs in the Basic Multilingual Plane (BMP). + uni = _uniToUnicode(component) + if uni: + return uni + + # Otherwise, if the component is of the form "u" (U+0075) + # followed by a sequence of four to six uppercase hexadecimal + # digits (0–9 and A–F, meaning U+0030 through U+0039 and + # U+0041 through U+0046), and those digits represents a value + # in the ranges 0000 through D7FF or E000 through 10FFFF, then + # interpret it as a Unicode scalar value and map the component + # to the string made of this scalar value. + uni = _uToUnicode(component) + if uni: + return uni + + # Otherwise, map the component to an empty string. + return '' + + +# https://github.com/adobe-type-tools/agl-aglfn/blob/master/zapfdingbats.txt +_AGL_ZAPF_DINGBATS = ( + " âœâœ‚✄☎✆âœâœžâœŸâœ âœ¡â˜›â˜žâœŒâœâœŽâœâœ‘✒✓✔✕✖✗✘✙✚✛✜✢✣✤✥✦✧★✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼✽✾✿â€" + "ââ‚âƒâ„â…â†â‡âˆâ‰âŠâ‹â—ââ– ââ‘▲▼◆■◗â˜â™âšâ¯â±â²â³â¨â©â¬â­âªâ«â´âµâ›âœââžâ¡â¢â£â¤âœâ¥â¦â§â™ â™¥â™¦â™£ ✉✈✇" + "①②③④⑤⑥⑦⑧⑨⑩â¶â·â¸â¹âºâ»â¼â½â¾â¿âž€âžâž‚➃➄➅➆➇➈➉➊➋➌âžâžŽâžâžâž‘➒➓➔→➣↔" + "↕➙➛➜âžâžžâžŸâž âž¡âž¢âž¤âž¥âž¦âž§âž¨âž©âž«âž­âž¯âž²âž³âžµâž¸âžºâž»âž¼âž½âž¾âžšâžªâž¶âž¹âž˜âž´âž·âž¬âž®âž±âœƒââ’â®â°") + + +def _zapfDingbatsToUnicode(glyph): + """Helper for toUnicode().""" + if len(glyph) < 2 or glyph[0] != 'a': + return None + try: + gid = int(glyph[1:]) + except ValueError: + return None + if gid < 0 or gid >= len(_AGL_ZAPF_DINGBATS): + return None + uchar = _AGL_ZAPF_DINGBATS[gid] + return uchar if uchar != ' ' else None + + +_re_uni = re.compile("^uni([0-9A-F]+)$") + + +def _uniToUnicode(component): + """Helper for toUnicode() to handle "uniABCD" components.""" + match = _re_uni.match(component) + if match is None: + return None + digits = match.group(1) + if len(digits) % 4 != 0: + return None + chars = [int(digits[i : i + 4], 16) + for i in range(0, len(digits), 4)] + if any(c >= 0xD800 and c <= 0xDFFF for c in chars): + # The AGL specification explicitly excluded surrogate pairs. + return None + return ''.join([chr(c) for c in chars]) + + +_re_u = re.compile("^u([0-9A-F]{4,6})$") + + +def _uToUnicode(component): + """Helper for toUnicode() to handle "u1ABCD" components.""" + match = _re_u.match(component) + if match is None: + return None + digits = match.group(1) + try: + value = int(digits, 16) + except ValueError: + return None + if ((value >= 0x0000 and value <= 0xD7FF) or + (value >= 0xE000 and value <= 0x10FFFF)): + return chr(value) + return None diff --git a/.venv/lib/python3.9/site-packages/fontTools/cffLib/__init__.py b/.venv/lib/python3.9/site-packages/fontTools/cffLib/__init__.py new file mode 100644 index 00000000..07d0d513 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/cffLib/__init__.py @@ -0,0 +1,3023 @@ +"""cffLib: read/write Adobe CFF fonts + +OpenType fonts with PostScript outlines contain a completely independent +font file, Adobe's *Compact Font Format*. So dealing with OpenType fonts +requires also dealing with CFF. This module allows you to read and write +fonts written in the CFF format. + +In 2016, OpenType 1.8 introduced the `CFF2 `_ +format which, along with other changes, extended the CFF format to deal with +the demands of variable fonts. This module parses both original CFF and CFF2. + +""" + +from fontTools.misc import sstruct +from fontTools.misc import psCharStrings +from fontTools.misc.arrayTools import unionRect, intRect +from fontTools.misc.textTools import bytechr, byteord, bytesjoin, tobytes, tostr, safeEval +from fontTools.ttLib import TTFont +from fontTools.ttLib.tables.otBase import OTTableWriter +from fontTools.ttLib.tables.otBase import OTTableReader +from fontTools.ttLib.tables import otTables as ot +from io import BytesIO +import struct +import logging +import re + +# mute cffLib debug messages when running ttx in verbose mode +DEBUG = logging.DEBUG - 1 +log = logging.getLogger(__name__) + +cffHeaderFormat = """ + major: B + minor: B + hdrSize: B +""" + +maxStackLimit = 513 +# maxstack operator has been deprecated. max stack is now always 513. + + +class StopHintCountEvent(Exception): + pass + + +class _DesubroutinizingT2Decompiler(psCharStrings.SimpleT2Decompiler): + stop_hintcount_ops = ("op_hintmask", "op_cntrmask", "op_rmoveto", "op_hmoveto", + "op_vmoveto") + + def __init__(self, localSubrs, globalSubrs, private=None): + psCharStrings.SimpleT2Decompiler.__init__(self, localSubrs, globalSubrs, + private) + + def execute(self, charString): + self.need_hintcount = True # until proven otherwise + for op_name in self.stop_hintcount_ops: + setattr(self, op_name, self.stop_hint_count) + + if hasattr(charString, '_desubroutinized'): + # If a charstring has already been desubroutinized, we will still + # need to execute it if we need to count hints in order to + # compute the byte length for mask arguments, and haven't finished + # counting hints pairs. + if self.need_hintcount and self.callingStack: + try: + psCharStrings.SimpleT2Decompiler.execute(self, charString) + except StopHintCountEvent: + del self.callingStack[-1] + return + + charString._patches = [] + psCharStrings.SimpleT2Decompiler.execute(self, charString) + desubroutinized = charString.program[:] + for idx, expansion in reversed(charString._patches): + assert idx >= 2 + assert desubroutinized[idx - 1] in ['callsubr', 'callgsubr'], desubroutinized[idx - 1] + assert type(desubroutinized[idx - 2]) == int + if expansion[-1] == 'return': + expansion = expansion[:-1] + desubroutinized[idx-2:idx] = expansion + if not self.private.in_cff2: + if 'endchar' in desubroutinized: + # Cut off after first endchar + desubroutinized = desubroutinized[:desubroutinized.index('endchar') + 1] + else: + if not len(desubroutinized) or desubroutinized[-1] != 'return': + desubroutinized.append('return') + + charString._desubroutinized = desubroutinized + del charString._patches + + def op_callsubr(self, index): + subr = self.localSubrs[self.operandStack[-1]+self.localBias] + psCharStrings.SimpleT2Decompiler.op_callsubr(self, index) + self.processSubr(index, subr) + + def op_callgsubr(self, index): + subr = self.globalSubrs[self.operandStack[-1]+self.globalBias] + psCharStrings.SimpleT2Decompiler.op_callgsubr(self, index) + self.processSubr(index, subr) + + def stop_hint_count(self, *args): + self.need_hintcount = False + for op_name in self.stop_hintcount_ops: + setattr(self, op_name, None) + cs = self.callingStack[-1] + if hasattr(cs, '_desubroutinized'): + raise StopHintCountEvent() + + def op_hintmask(self, index): + psCharStrings.SimpleT2Decompiler.op_hintmask(self, index) + if self.need_hintcount: + self.stop_hint_count() + + def processSubr(self, index, subr): + cs = self.callingStack[-1] + if not hasattr(cs, '_desubroutinized'): + cs._patches.append((index, subr._desubroutinized)) + + +class CFFFontSet(object): + """A CFF font "file" can contain more than one font, although this is + extremely rare (and not allowed within OpenType fonts). + + This class is the entry point for parsing a CFF table. To actually + manipulate the data inside the CFF font, you will want to access the + ``CFFFontSet``'s :class:`TopDict` object. To do this, a ``CFFFontSet`` + object can either be treated as a dictionary (with appropriate + ``keys()`` and ``values()`` methods) mapping font names to :class:`TopDict` + objects, or as a list. + + .. code:: python + + from fontTools import ttLib + tt = ttLib.TTFont("Tests/cffLib/data/LinLibertine_RBI.otf") + tt["CFF "].cff + # + tt["CFF "].cff[0] # Here's your actual font data + # + + """ + + def decompile(self, file, otFont, isCFF2=None): + """Parse a binary CFF file into an internal representation. ``file`` + should be a file handle object. ``otFont`` is the top-level + :py:class:`fontTools.ttLib.ttFont.TTFont` object containing this CFF file. + + If ``isCFF2`` is passed and set to ``True`` or ``False``, then the + library makes an assertion that the CFF header is of the appropriate + version. + """ + + self.otFont = otFont + sstruct.unpack(cffHeaderFormat, file.read(3), self) + if isCFF2 is not None: + # called from ttLib: assert 'major' as read from file matches the + # expected version + expected_major = (2 if isCFF2 else 1) + if self.major != expected_major: + raise ValueError( + "Invalid CFF 'major' version: expected %d, found %d" % + (expected_major, self.major)) + else: + # use 'major' version from file to determine if isCFF2 + assert self.major in (1, 2), "Unknown CFF format" + isCFF2 = self.major == 2 + if not isCFF2: + self.offSize = struct.unpack("B", file.read(1))[0] + file.seek(self.hdrSize) + self.fontNames = list(tostr(s) for s in Index(file, isCFF2=isCFF2)) + self.topDictIndex = TopDictIndex(file, isCFF2=isCFF2) + self.strings = IndexedStrings(file) + else: # isCFF2 + self.topDictSize = struct.unpack(">H", file.read(2))[0] + file.seek(self.hdrSize) + self.fontNames = ["CFF2Font"] + cff2GetGlyphOrder = otFont.getGlyphOrder + # in CFF2, offsetSize is the size of the TopDict data. + self.topDictIndex = TopDictIndex( + file, cff2GetGlyphOrder, self.topDictSize, isCFF2=isCFF2) + self.strings = None + self.GlobalSubrs = GlobalSubrsIndex(file, isCFF2=isCFF2) + self.topDictIndex.strings = self.strings + self.topDictIndex.GlobalSubrs = self.GlobalSubrs + + def __len__(self): + return len(self.fontNames) + + def keys(self): + return list(self.fontNames) + + def values(self): + return self.topDictIndex + + def __getitem__(self, nameOrIndex): + """ Return TopDict instance identified by name (str) or index (int + or any object that implements `__index__`). + """ + if hasattr(nameOrIndex, "__index__"): + index = nameOrIndex.__index__() + elif isinstance(nameOrIndex, str): + name = nameOrIndex + try: + index = self.fontNames.index(name) + except ValueError: + raise KeyError(nameOrIndex) + else: + raise TypeError(nameOrIndex) + return self.topDictIndex[index] + + def compile(self, file, otFont, isCFF2=None): + """Write the object back into binary representation onto the given file. + ``file`` should be a file handle object. ``otFont`` is the top-level + :py:class:`fontTools.ttLib.ttFont.TTFont` object containing this CFF file. + + If ``isCFF2`` is passed and set to ``True`` or ``False``, then the + library makes an assertion that the CFF header is of the appropriate + version. + """ + self.otFont = otFont + if isCFF2 is not None: + # called from ttLib: assert 'major' value matches expected version + expected_major = (2 if isCFF2 else 1) + if self.major != expected_major: + raise ValueError( + "Invalid CFF 'major' version: expected %d, found %d" % + (expected_major, self.major)) + else: + # use current 'major' value to determine output format + assert self.major in (1, 2), "Unknown CFF format" + isCFF2 = self.major == 2 + + if otFont.recalcBBoxes and not isCFF2: + for topDict in self.topDictIndex: + topDict.recalcFontBBox() + + if not isCFF2: + strings = IndexedStrings() + else: + strings = None + writer = CFFWriter(isCFF2) + topCompiler = self.topDictIndex.getCompiler(strings, self, isCFF2=isCFF2) + if isCFF2: + self.hdrSize = 5 + writer.add(sstruct.pack(cffHeaderFormat, self)) + # Note: topDictSize will most likely change in CFFWriter.toFile(). + self.topDictSize = topCompiler.getDataLength() + writer.add(struct.pack(">H", self.topDictSize)) + else: + self.hdrSize = 4 + self.offSize = 4 # will most likely change in CFFWriter.toFile(). + writer.add(sstruct.pack(cffHeaderFormat, self)) + writer.add(struct.pack("B", self.offSize)) + if not isCFF2: + fontNames = Index() + for name in self.fontNames: + fontNames.append(name) + writer.add(fontNames.getCompiler(strings, self, isCFF2=isCFF2)) + writer.add(topCompiler) + if not isCFF2: + writer.add(strings.getCompiler()) + writer.add(self.GlobalSubrs.getCompiler(strings, self, isCFF2=isCFF2)) + + for topDict in self.topDictIndex: + if not hasattr(topDict, "charset") or topDict.charset is None: + charset = otFont.getGlyphOrder() + topDict.charset = charset + children = topCompiler.getChildren(strings) + for child in children: + writer.add(child) + + writer.toFile(file) + + def toXML(self, xmlWriter): + """Write the object into XML representation onto the given + :class:`fontTools.misc.xmlWriter.XMLWriter`. + + .. code:: python + + writer = xmlWriter.XMLWriter(sys.stdout) + tt["CFF "].cff.toXML(writer) + + """ + + xmlWriter.simpletag("major", value=self.major) + xmlWriter.newline() + xmlWriter.simpletag("minor", value=self.minor) + xmlWriter.newline() + for fontName in self.fontNames: + xmlWriter.begintag("CFFFont", name=tostr(fontName)) + xmlWriter.newline() + font = self[fontName] + font.toXML(xmlWriter) + xmlWriter.endtag("CFFFont") + xmlWriter.newline() + xmlWriter.newline() + xmlWriter.begintag("GlobalSubrs") + xmlWriter.newline() + self.GlobalSubrs.toXML(xmlWriter) + xmlWriter.endtag("GlobalSubrs") + xmlWriter.newline() + + def fromXML(self, name, attrs, content, otFont=None): + """Reads data from the XML element into the ``CFFFontSet`` object.""" + self.otFont = otFont + + # set defaults. These will be replaced if there are entries for them + # in the XML file. + if not hasattr(self, "major"): + self.major = 1 + if not hasattr(self, "minor"): + self.minor = 0 + + if name == "CFFFont": + if self.major == 1: + if not hasattr(self, "offSize"): + # this will be recalculated when the cff is compiled. + self.offSize = 4 + if not hasattr(self, "hdrSize"): + self.hdrSize = 4 + if not hasattr(self, "GlobalSubrs"): + self.GlobalSubrs = GlobalSubrsIndex() + if not hasattr(self, "fontNames"): + self.fontNames = [] + self.topDictIndex = TopDictIndex() + fontName = attrs["name"] + self.fontNames.append(fontName) + topDict = TopDict(GlobalSubrs=self.GlobalSubrs) + topDict.charset = None # gets filled in later + elif self.major == 2: + if not hasattr(self, "hdrSize"): + self.hdrSize = 5 + if not hasattr(self, "GlobalSubrs"): + self.GlobalSubrs = GlobalSubrsIndex() + if not hasattr(self, "fontNames"): + self.fontNames = ["CFF2Font"] + cff2GetGlyphOrder = self.otFont.getGlyphOrder + topDict = TopDict( + GlobalSubrs=self.GlobalSubrs, + cff2GetGlyphOrder=cff2GetGlyphOrder) + self.topDictIndex = TopDictIndex(None, cff2GetGlyphOrder, None) + self.topDictIndex.append(topDict) + for element in content: + if isinstance(element, str): + continue + name, attrs, content = element + topDict.fromXML(name, attrs, content) + + if hasattr(topDict, "VarStore") and topDict.FDArray[0].vstore is None: + fdArray = topDict.FDArray + for fontDict in fdArray: + if hasattr(fontDict, "Private"): + fontDict.Private.vstore = topDict.VarStore + + elif name == "GlobalSubrs": + subrCharStringClass = psCharStrings.T2CharString + if not hasattr(self, "GlobalSubrs"): + self.GlobalSubrs = GlobalSubrsIndex() + for element in content: + if isinstance(element, str): + continue + name, attrs, content = element + subr = subrCharStringClass() + subr.fromXML(name, attrs, content) + self.GlobalSubrs.append(subr) + elif name == "major": + self.major = int(attrs['value']) + elif name == "minor": + self.minor = int(attrs['value']) + + def convertCFFToCFF2(self, otFont): + """Converts this object from CFF format to CFF2 format. This conversion + is done 'in-place'. The conversion cannot be reversed. + + This assumes a decompiled CFF table. (i.e. that the object has been + filled via :meth:`decompile`.)""" + self.major = 2 + cff2GetGlyphOrder = self.otFont.getGlyphOrder + topDictData = TopDictIndex(None, cff2GetGlyphOrder, None) + topDictData.items = self.topDictIndex.items + self.topDictIndex = topDictData + topDict = topDictData[0] + if hasattr(topDict, 'Private'): + privateDict = topDict.Private + else: + privateDict = None + opOrder = buildOrder(topDictOperators2) + topDict.order = opOrder + topDict.cff2GetGlyphOrder = cff2GetGlyphOrder + for entry in topDictOperators: + key = entry[1] + if key not in opOrder: + if key in topDict.rawDict: + del topDict.rawDict[key] + if hasattr(topDict, key): + delattr(topDict, key) + + if not hasattr(topDict, "FDArray"): + fdArray = topDict.FDArray = FDArrayIndex() + fdArray.strings = None + fdArray.GlobalSubrs = topDict.GlobalSubrs + topDict.GlobalSubrs.fdArray = fdArray + charStrings = topDict.CharStrings + if charStrings.charStringsAreIndexed: + charStrings.charStringsIndex.fdArray = fdArray + else: + charStrings.fdArray = fdArray + fontDict = FontDict() + fontDict.setCFF2(True) + fdArray.append(fontDict) + fontDict.Private = privateDict + privateOpOrder = buildOrder(privateDictOperators2) + for entry in privateDictOperators: + key = entry[1] + if key not in privateOpOrder: + if key in privateDict.rawDict: + # print "Removing private dict", key + del privateDict.rawDict[key] + if hasattr(privateDict, key): + delattr(privateDict, key) + # print "Removing privateDict attr", key + else: + # clean up the PrivateDicts in the fdArray + fdArray = topDict.FDArray + privateOpOrder = buildOrder(privateDictOperators2) + for fontDict in fdArray: + fontDict.setCFF2(True) + for key in fontDict.rawDict.keys(): + if key not in fontDict.order: + del fontDict.rawDict[key] + if hasattr(fontDict, key): + delattr(fontDict, key) + + privateDict = fontDict.Private + for entry in privateDictOperators: + key = entry[1] + if key not in privateOpOrder: + if key in privateDict.rawDict: + # print "Removing private dict", key + del privateDict.rawDict[key] + if hasattr(privateDict, key): + delattr(privateDict, key) + # print "Removing privateDict attr", key + # At this point, the Subrs and Charstrings are all still T2Charstring class + # easiest to fix this by compiling, then decompiling again + file = BytesIO() + self.compile(file, otFont, isCFF2=True) + file.seek(0) + self.decompile(file, otFont, isCFF2=True) + + def desubroutinize(self): + for fontName in self.fontNames: + font = self[fontName] + cs = font.CharStrings + for g in font.charset: + c, _ = cs.getItemAndSelector(g) + c.decompile() + subrs = getattr(c.private, "Subrs", []) + decompiler = _DesubroutinizingT2Decompiler(subrs, c.globalSubrs, c.private) + decompiler.execute(c) + c.program = c._desubroutinized + del c._desubroutinized + # Delete all the local subrs + if hasattr(font, 'FDArray'): + for fd in font.FDArray: + pd = fd.Private + if hasattr(pd, 'Subrs'): + del pd.Subrs + if 'Subrs' in pd.rawDict: + del pd.rawDict['Subrs'] + else: + pd = font.Private + if hasattr(pd, 'Subrs'): + del pd.Subrs + if 'Subrs' in pd.rawDict: + del pd.rawDict['Subrs'] + # as well as the global subrs + self.GlobalSubrs.clear() + + +class CFFWriter(object): + """Helper class for serializing CFF data to binary. Used by + :meth:`CFFFontSet.compile`.""" + def __init__(self, isCFF2): + self.data = [] + self.isCFF2 = isCFF2 + + def add(self, table): + self.data.append(table) + + def toFile(self, file): + lastPosList = None + count = 1 + while True: + log.log(DEBUG, "CFFWriter.toFile() iteration: %d", count) + count = count + 1 + pos = 0 + posList = [pos] + for item in self.data: + if hasattr(item, "getDataLength"): + endPos = pos + item.getDataLength() + if isinstance(item, TopDictIndexCompiler) and item.isCFF2: + self.topDictSize = item.getDataLength() + else: + endPos = pos + len(item) + if hasattr(item, "setPos"): + item.setPos(pos, endPos) + pos = endPos + posList.append(pos) + if posList == lastPosList: + break + lastPosList = posList + log.log(DEBUG, "CFFWriter.toFile() writing to file.") + begin = file.tell() + if self.isCFF2: + self.data[1] = struct.pack(">H", self.topDictSize) + else: + self.offSize = calcOffSize(lastPosList[-1]) + self.data[1] = struct.pack("B", self.offSize) + posList = [0] + for item in self.data: + if hasattr(item, "toFile"): + item.toFile(file) + else: + file.write(item) + posList.append(file.tell() - begin) + assert posList == lastPosList + + +def calcOffSize(largestOffset): + if largestOffset < 0x100: + offSize = 1 + elif largestOffset < 0x10000: + offSize = 2 + elif largestOffset < 0x1000000: + offSize = 3 + else: + offSize = 4 + return offSize + + +class IndexCompiler(object): + """Base class for writing CFF `INDEX data `_ + to binary.""" + + def __init__(self, items, strings, parent, isCFF2=None): + if isCFF2 is None and hasattr(parent, "isCFF2"): + isCFF2 = parent.isCFF2 + assert isCFF2 is not None + self.isCFF2 = isCFF2 + self.items = self.getItems(items, strings) + self.parent = parent + + def getItems(self, items, strings): + return items + + def getOffsets(self): + # An empty INDEX contains only the count field. + if self.items: + pos = 1 + offsets = [pos] + for item in self.items: + if hasattr(item, "getDataLength"): + pos = pos + item.getDataLength() + else: + pos = pos + len(item) + offsets.append(pos) + else: + offsets = [] + return offsets + + def getDataLength(self): + if self.isCFF2: + countSize = 4 + else: + countSize = 2 + + if self.items: + lastOffset = self.getOffsets()[-1] + offSize = calcOffSize(lastOffset) + dataLength = ( + countSize + # count + 1 + # offSize + (len(self.items) + 1) * offSize + # the offsets + lastOffset - 1 # size of object data + ) + else: + # count. For empty INDEX tables, this is the only entry. + dataLength = countSize + + return dataLength + + def toFile(self, file): + offsets = self.getOffsets() + if self.isCFF2: + writeCard32(file, len(self.items)) + else: + writeCard16(file, len(self.items)) + # An empty INDEX contains only the count field. + if self.items: + offSize = calcOffSize(offsets[-1]) + writeCard8(file, offSize) + offSize = -offSize + pack = struct.pack + for offset in offsets: + binOffset = pack(">l", offset)[offSize:] + assert len(binOffset) == -offSize + file.write(binOffset) + for item in self.items: + if hasattr(item, "toFile"): + item.toFile(file) + else: + data = tobytes(item, encoding="latin1") + file.write(data) + + +class IndexedStringsCompiler(IndexCompiler): + + def getItems(self, items, strings): + return items.strings + + +class TopDictIndexCompiler(IndexCompiler): + """Helper class for writing the TopDict to binary.""" + + def getItems(self, items, strings): + out = [] + for item in items: + out.append(item.getCompiler(strings, self)) + return out + + def getChildren(self, strings): + children = [] + for topDict in self.items: + children.extend(topDict.getChildren(strings)) + return children + + def getOffsets(self): + if self.isCFF2: + offsets = [0, self.items[0].getDataLength()] + return offsets + else: + return super(TopDictIndexCompiler, self).getOffsets() + + def getDataLength(self): + if self.isCFF2: + dataLength = self.items[0].getDataLength() + return dataLength + else: + return super(TopDictIndexCompiler, self).getDataLength() + + def toFile(self, file): + if self.isCFF2: + self.items[0].toFile(file) + else: + super(TopDictIndexCompiler, self).toFile(file) + + +class FDArrayIndexCompiler(IndexCompiler): + """Helper class for writing the + `Font DICT INDEX `_ + to binary.""" + + def getItems(self, items, strings): + out = [] + for item in items: + out.append(item.getCompiler(strings, self)) + return out + + def getChildren(self, strings): + children = [] + for fontDict in self.items: + children.extend(fontDict.getChildren(strings)) + return children + + def toFile(self, file): + offsets = self.getOffsets() + if self.isCFF2: + writeCard32(file, len(self.items)) + else: + writeCard16(file, len(self.items)) + offSize = calcOffSize(offsets[-1]) + writeCard8(file, offSize) + offSize = -offSize + pack = struct.pack + for offset in offsets: + binOffset = pack(">l", offset)[offSize:] + assert len(binOffset) == -offSize + file.write(binOffset) + for item in self.items: + if hasattr(item, "toFile"): + item.toFile(file) + else: + file.write(item) + + def setPos(self, pos, endPos): + self.parent.rawDict["FDArray"] = pos + + +class GlobalSubrsCompiler(IndexCompiler): + """Helper class for writing the `global subroutine INDEX `_ + to binary.""" + + def getItems(self, items, strings): + out = [] + for cs in items: + cs.compile(self.isCFF2) + out.append(cs.bytecode) + return out + + +class SubrsCompiler(GlobalSubrsCompiler): + """Helper class for writing the `local subroutine INDEX `_ + to binary.""" + + def setPos(self, pos, endPos): + offset = pos - self.parent.pos + self.parent.rawDict["Subrs"] = offset + + +class CharStringsCompiler(GlobalSubrsCompiler): + """Helper class for writing the `CharStrings INDEX `_ + to binary.""" + def getItems(self, items, strings): + out = [] + for cs in items: + cs.compile(self.isCFF2) + out.append(cs.bytecode) + return out + + def setPos(self, pos, endPos): + self.parent.rawDict["CharStrings"] = pos + + +class Index(object): + """This class represents what the CFF spec calls an INDEX (an array of + variable-sized objects). `Index` items can be addressed and set using + Python list indexing.""" + + compilerClass = IndexCompiler + + def __init__(self, file=None, isCFF2=None): + assert (isCFF2 is None) == (file is None) + self.items = [] + name = self.__class__.__name__ + if file is None: + return + self._isCFF2 = isCFF2 + log.log(DEBUG, "loading %s at %s", name, file.tell()) + self.file = file + if isCFF2: + count = readCard32(file) + else: + count = readCard16(file) + if count == 0: + return + self.items = [None] * count + offSize = readCard8(file) + log.log(DEBUG, " index count: %s offSize: %s", count, offSize) + assert offSize <= 4, "offSize too large: %s" % offSize + self.offsets = offsets = [] + pad = b'\0' * (4 - offSize) + for index in range(count + 1): + chunk = file.read(offSize) + chunk = pad + chunk + offset, = struct.unpack(">L", chunk) + offsets.append(int(offset)) + self.offsetBase = file.tell() - 1 + file.seek(self.offsetBase + offsets[-1]) # pretend we've read the whole lot + log.log(DEBUG, " end of %s at %s", name, file.tell()) + + def __len__(self): + return len(self.items) + + def __getitem__(self, index): + item = self.items[index] + if item is not None: + return item + offset = self.offsets[index] + self.offsetBase + size = self.offsets[index + 1] - self.offsets[index] + file = self.file + file.seek(offset) + data = file.read(size) + assert len(data) == size + item = self.produceItem(index, data, file, offset) + self.items[index] = item + return item + + def __setitem__(self, index, item): + self.items[index] = item + + def produceItem(self, index, data, file, offset): + return data + + def append(self, item): + """Add an item to an INDEX.""" + self.items.append(item) + + def getCompiler(self, strings, parent, isCFF2=None): + return self.compilerClass(self, strings, parent, isCFF2=isCFF2) + + def clear(self): + """Empty the INDEX.""" + del self.items[:] + + +class GlobalSubrsIndex(Index): + """This index contains all the global subroutines in the font. A global + subroutine is a set of ``CharString`` data which is accessible to any + glyph in the font, and are used to store repeated instructions - for + example, components may be encoded as global subroutines, but so could + hinting instructions. + + Remember that when interpreting a ``callgsubr`` instruction (or indeed + a ``callsubr`` instruction) that you will need to add the "subroutine + number bias" to number given: + + .. code:: python + + tt = ttLib.TTFont("Almendra-Bold.otf") + u = tt["CFF "].cff[0].CharStrings["udieresis"] + u.decompile() + + u.toXML(XMLWriter(sys.stdout)) + # + # -64 callgsubr <-- Subroutine which implements the dieresis mark + # + + tt["CFF "].cff[0].GlobalSubrs[-64] # <-- WRONG + # + + tt["CFF "].cff[0].GlobalSubrs[-64 + 107] # <-- RIGHT + # + + ("The bias applied depends on the number of subrs (gsubrs). If the number of + subrs (gsubrs) is less than 1240, the bias is 107. Otherwise if it is less + than 33900, it is 1131; otherwise it is 32768.", + `Subroutine Operators `) + """ + + compilerClass = GlobalSubrsCompiler + subrClass = psCharStrings.T2CharString + charStringClass = psCharStrings.T2CharString + + def __init__(self, file=None, globalSubrs=None, private=None, + fdSelect=None, fdArray=None, isCFF2=None): + super(GlobalSubrsIndex, self).__init__(file, isCFF2=isCFF2) + self.globalSubrs = globalSubrs + self.private = private + if fdSelect: + self.fdSelect = fdSelect + if fdArray: + self.fdArray = fdArray + + def produceItem(self, index, data, file, offset): + if self.private is not None: + private = self.private + elif hasattr(self, 'fdArray') and self.fdArray is not None: + if hasattr(self, 'fdSelect') and self.fdSelect is not None: + fdIndex = self.fdSelect[index] + else: + fdIndex = 0 + private = self.fdArray[fdIndex].Private + else: + private = None + return self.subrClass(data, private=private, globalSubrs=self.globalSubrs) + + def toXML(self, xmlWriter): + """Write the subroutines index into XML representation onto the given + :class:`fontTools.misc.xmlWriter.XMLWriter`. + + .. code:: python + + writer = xmlWriter.XMLWriter(sys.stdout) + tt["CFF "].cff[0].GlobalSubrs.toXML(writer) + + """ + xmlWriter.comment( + "The 'index' attribute is only for humans; " + "it is ignored when parsed.") + xmlWriter.newline() + for i in range(len(self)): + subr = self[i] + if subr.needsDecompilation(): + xmlWriter.begintag("CharString", index=i, raw=1) + else: + xmlWriter.begintag("CharString", index=i) + xmlWriter.newline() + subr.toXML(xmlWriter) + xmlWriter.endtag("CharString") + xmlWriter.newline() + + def fromXML(self, name, attrs, content): + if name != "CharString": + return + subr = self.subrClass() + subr.fromXML(name, attrs, content) + self.append(subr) + + def getItemAndSelector(self, index): + sel = None + if hasattr(self, 'fdSelect'): + sel = self.fdSelect[index] + return self[index], sel + + +class SubrsIndex(GlobalSubrsIndex): + """This index contains a glyph's local subroutines. A local subroutine is a + private set of ``CharString`` data which is accessible only to the glyph to + which the index is attached.""" + + compilerClass = SubrsCompiler + + +class TopDictIndex(Index): + """This index represents the array of ``TopDict`` structures in the font + (again, usually only one entry is present). Hence the following calls are + equivalent: + + .. code:: python + + tt["CFF "].cff[0] + # + tt["CFF "].cff.topDictIndex[0] + # + + """ + + compilerClass = TopDictIndexCompiler + + def __init__(self, file=None, cff2GetGlyphOrder=None, topSize=0, + isCFF2=None): + assert (isCFF2 is None) == (file is None) + self.cff2GetGlyphOrder = cff2GetGlyphOrder + if file is not None and isCFF2: + self._isCFF2 = isCFF2 + self.items = [] + name = self.__class__.__name__ + log.log(DEBUG, "loading %s at %s", name, file.tell()) + self.file = file + count = 1 + self.items = [None] * count + self.offsets = [0, topSize] + self.offsetBase = file.tell() + # pretend we've read the whole lot + file.seek(self.offsetBase + topSize) + log.log(DEBUG, " end of %s at %s", name, file.tell()) + else: + super(TopDictIndex, self).__init__(file, isCFF2=isCFF2) + + def produceItem(self, index, data, file, offset): + top = TopDict( + self.strings, file, offset, self.GlobalSubrs, + self.cff2GetGlyphOrder, isCFF2=self._isCFF2) + top.decompile(data) + return top + + def toXML(self, xmlWriter): + for i in range(len(self)): + xmlWriter.begintag("FontDict", index=i) + xmlWriter.newline() + self[i].toXML(xmlWriter) + xmlWriter.endtag("FontDict") + xmlWriter.newline() + + +class FDArrayIndex(Index): + + compilerClass = FDArrayIndexCompiler + + def toXML(self, xmlWriter): + for i in range(len(self)): + xmlWriter.begintag("FontDict", index=i) + xmlWriter.newline() + self[i].toXML(xmlWriter) + xmlWriter.endtag("FontDict") + xmlWriter.newline() + + def produceItem(self, index, data, file, offset): + fontDict = FontDict( + self.strings, file, offset, self.GlobalSubrs, isCFF2=self._isCFF2, + vstore=self.vstore) + fontDict.decompile(data) + return fontDict + + def fromXML(self, name, attrs, content): + if name != "FontDict": + return + fontDict = FontDict() + for element in content: + if isinstance(element, str): + continue + name, attrs, content = element + fontDict.fromXML(name, attrs, content) + self.append(fontDict) + + +class VarStoreData(object): + + def __init__(self, file=None, otVarStore=None): + self.file = file + self.data = None + self.otVarStore = otVarStore + self.font = TTFont() # dummy font for the decompile function. + + def decompile(self): + if self.file: + class GlobalState(object): + def __init__(self, tableType, cachingStats): + self.tableType = tableType + self.cachingStats = cachingStats + globalState = GlobalState(tableType="VarStore", cachingStats={}) + # read data in from file. Assume position is correct. + length = readCard16(self.file) + self.data = self.file.read(length) + globalState = {} + reader = OTTableReader(self.data, globalState) + self.otVarStore = ot.VarStore() + self.otVarStore.decompile(reader, self.font) + return self + + def compile(self): + writer = OTTableWriter() + self.otVarStore.compile(writer, self.font) + # Note that this omits the initial Card16 length from the CFF2 + # VarStore data block + self.data = writer.getAllData() + + def writeXML(self, xmlWriter, name): + self.otVarStore.toXML(xmlWriter, self.font) + + def xmlRead(self, name, attrs, content, parent): + self.otVarStore = ot.VarStore() + for element in content: + if isinstance(element, tuple): + name, attrs, content = element + self.otVarStore.fromXML(name, attrs, content, self.font) + else: + pass + return None + + def __len__(self): + return len(self.data) + + def getNumRegions(self, vsIndex): + varData = self.otVarStore.VarData[vsIndex] + numRegions = varData.VarRegionCount + return numRegions + + +class FDSelect(object): + + def __init__(self, file=None, numGlyphs=None, format=None): + if file: + # read data in from file + self.format = readCard8(file) + if self.format == 0: + from array import array + self.gidArray = array("B", file.read(numGlyphs)).tolist() + elif self.format == 3: + gidArray = [None] * numGlyphs + nRanges = readCard16(file) + fd = None + prev = None + for i in range(nRanges): + first = readCard16(file) + if prev is not None: + for glyphID in range(prev, first): + gidArray[glyphID] = fd + prev = first + fd = readCard8(file) + if prev is not None: + first = readCard16(file) + for glyphID in range(prev, first): + gidArray[glyphID] = fd + self.gidArray = gidArray + elif self.format == 4: + gidArray = [None] * numGlyphs + nRanges = readCard32(file) + fd = None + prev = None + for i in range(nRanges): + first = readCard32(file) + if prev is not None: + for glyphID in range(prev, first): + gidArray[glyphID] = fd + prev = first + fd = readCard16(file) + if prev is not None: + first = readCard32(file) + for glyphID in range(prev, first): + gidArray[glyphID] = fd + self.gidArray = gidArray + else: + assert False, "unsupported FDSelect format: %s" % format + else: + # reading from XML. Make empty gidArray, and leave format as passed in. + # format is None will result in the smallest representation being used. + self.format = format + self.gidArray = [] + + def __len__(self): + return len(self.gidArray) + + def __getitem__(self, index): + return self.gidArray[index] + + def __setitem__(self, index, fdSelectValue): + self.gidArray[index] = fdSelectValue + + def append(self, fdSelectValue): + self.gidArray.append(fdSelectValue) + + +class CharStrings(object): + """The ``CharStrings`` in the font represent the instructions for drawing + each glyph. This object presents a dictionary interface to the font's + CharStrings, indexed by glyph name: + + .. code:: python + + tt["CFF "].cff[0].CharStrings["a"] + # + + See :class:`fontTools.misc.psCharStrings.T1CharString` and + :class:`fontTools.misc.psCharStrings.T2CharString` for how to decompile, + compile and interpret the glyph drawing instructions in the returned objects. + + """ + + def __init__(self, file, charset, globalSubrs, private, fdSelect, fdArray, + isCFF2=None): + self.globalSubrs = globalSubrs + if file is not None: + self.charStringsIndex = SubrsIndex( + file, globalSubrs, private, fdSelect, fdArray, isCFF2=isCFF2) + self.charStrings = charStrings = {} + for i in range(len(charset)): + charStrings[charset[i]] = i + # read from OTF file: charStrings.values() are indices into + # charStringsIndex. + self.charStringsAreIndexed = 1 + else: + self.charStrings = {} + # read from ttx file: charStrings.values() are actual charstrings + self.charStringsAreIndexed = 0 + self.private = private + if fdSelect is not None: + self.fdSelect = fdSelect + if fdArray is not None: + self.fdArray = fdArray + + def keys(self): + return list(self.charStrings.keys()) + + def values(self): + if self.charStringsAreIndexed: + return self.charStringsIndex + else: + return list(self.charStrings.values()) + + def has_key(self, name): + return name in self.charStrings + + __contains__ = has_key + + def __len__(self): + return len(self.charStrings) + + def __getitem__(self, name): + charString = self.charStrings[name] + if self.charStringsAreIndexed: + charString = self.charStringsIndex[charString] + return charString + + def __setitem__(self, name, charString): + if self.charStringsAreIndexed: + index = self.charStrings[name] + self.charStringsIndex[index] = charString + else: + self.charStrings[name] = charString + + def getItemAndSelector(self, name): + if self.charStringsAreIndexed: + index = self.charStrings[name] + return self.charStringsIndex.getItemAndSelector(index) + else: + if hasattr(self, 'fdArray'): + if hasattr(self, 'fdSelect'): + sel = self.charStrings[name].fdSelectIndex + else: + sel = 0 + else: + sel = None + return self.charStrings[name], sel + + def toXML(self, xmlWriter): + names = sorted(self.keys()) + for name in names: + charStr, fdSelectIndex = self.getItemAndSelector(name) + if charStr.needsDecompilation(): + raw = [("raw", 1)] + else: + raw = [] + if fdSelectIndex is None: + xmlWriter.begintag("CharString", [('name', name)] + raw) + else: + xmlWriter.begintag( + "CharString", + [('name', name), ('fdSelectIndex', fdSelectIndex)] + raw) + xmlWriter.newline() + charStr.toXML(xmlWriter) + xmlWriter.endtag("CharString") + xmlWriter.newline() + + def fromXML(self, name, attrs, content): + for element in content: + if isinstance(element, str): + continue + name, attrs, content = element + if name != "CharString": + continue + fdID = -1 + if hasattr(self, "fdArray"): + try: + fdID = safeEval(attrs["fdSelectIndex"]) + except KeyError: + fdID = 0 + private = self.fdArray[fdID].Private + else: + private = self.private + + glyphName = attrs["name"] + charStringClass = psCharStrings.T2CharString + charString = charStringClass( + private=private, + globalSubrs=self.globalSubrs) + charString.fromXML(name, attrs, content) + if fdID >= 0: + charString.fdSelectIndex = fdID + self[glyphName] = charString + + +def readCard8(file): + return byteord(file.read(1)) + + +def readCard16(file): + value, = struct.unpack(">H", file.read(2)) + return value + + +def readCard32(file): + value, = struct.unpack(">L", file.read(4)) + return value + + +def writeCard8(file, value): + file.write(bytechr(value)) + + +def writeCard16(file, value): + file.write(struct.pack(">H", value)) + + +def writeCard32(file, value): + file.write(struct.pack(">L", value)) + + +def packCard8(value): + return bytechr(value) + + +def packCard16(value): + return struct.pack(">H", value) + + +def packCard32(value): + return struct.pack(">L", value) + + +def buildOperatorDict(table): + d = {} + for op, name, arg, default, conv in table: + d[op] = (name, arg) + return d + + +def buildOpcodeDict(table): + d = {} + for op, name, arg, default, conv in table: + if isinstance(op, tuple): + op = bytechr(op[0]) + bytechr(op[1]) + else: + op = bytechr(op) + d[name] = (op, arg) + return d + + +def buildOrder(table): + l = [] + for op, name, arg, default, conv in table: + l.append(name) + return l + + +def buildDefaults(table): + d = {} + for op, name, arg, default, conv in table: + if default is not None: + d[name] = default + return d + + +def buildConverters(table): + d = {} + for op, name, arg, default, conv in table: + d[name] = conv + return d + + +class SimpleConverter(object): + + def read(self, parent, value): + if not hasattr(parent, "file"): + return self._read(parent, value) + file = parent.file + pos = file.tell() + try: + return self._read(parent, value) + finally: + file.seek(pos) + + def _read(self, parent, value): + return value + + def write(self, parent, value): + return value + + def xmlWrite(self, xmlWriter, name, value): + xmlWriter.simpletag(name, value=value) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + return attrs["value"] + + +class ASCIIConverter(SimpleConverter): + + def _read(self, parent, value): + return tostr(value, encoding='ascii') + + def write(self, parent, value): + return tobytes(value, encoding='ascii') + + def xmlWrite(self, xmlWriter, name, value): + xmlWriter.simpletag(name, value=tostr(value, encoding="ascii")) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + return tobytes(attrs["value"], encoding=("ascii")) + + +class Latin1Converter(SimpleConverter): + + def _read(self, parent, value): + return tostr(value, encoding='latin1') + + def write(self, parent, value): + return tobytes(value, encoding='latin1') + + def xmlWrite(self, xmlWriter, name, value): + value = tostr(value, encoding="latin1") + if name in ['Notice', 'Copyright']: + value = re.sub(r"[\r\n]\s+", " ", value) + xmlWriter.simpletag(name, value=value) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + return tobytes(attrs["value"], encoding=("latin1")) + + +def parseNum(s): + try: + value = int(s) + except: + value = float(s) + return value + + +def parseBlendList(s): + valueList = [] + for element in s: + if isinstance(element, str): + continue + name, attrs, content = element + blendList = attrs["value"].split() + blendList = [eval(val) for val in blendList] + valueList.append(blendList) + if len(valueList) == 1: + valueList = valueList[0] + return valueList + + +class NumberConverter(SimpleConverter): + def xmlWrite(self, xmlWriter, name, value): + if isinstance(value, list): + xmlWriter.begintag(name) + xmlWriter.newline() + xmlWriter.indent() + blendValue = " ".join([str(val) for val in value]) + xmlWriter.simpletag(kBlendDictOpName, value=blendValue) + xmlWriter.newline() + xmlWriter.dedent() + xmlWriter.endtag(name) + xmlWriter.newline() + else: + xmlWriter.simpletag(name, value=value) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + valueString = attrs.get("value", None) + if valueString is None: + value = parseBlendList(content) + else: + value = parseNum(attrs["value"]) + return value + + +class ArrayConverter(SimpleConverter): + def xmlWrite(self, xmlWriter, name, value): + if value and isinstance(value[0], list): + xmlWriter.begintag(name) + xmlWriter.newline() + xmlWriter.indent() + for valueList in value: + blendValue = " ".join([str(val) for val in valueList]) + xmlWriter.simpletag(kBlendDictOpName, value=blendValue) + xmlWriter.newline() + xmlWriter.dedent() + xmlWriter.endtag(name) + xmlWriter.newline() + else: + value = " ".join([str(val) for val in value]) + xmlWriter.simpletag(name, value=value) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + valueString = attrs.get("value", None) + if valueString is None: + valueList = parseBlendList(content) + else: + values = valueString.split() + valueList = [parseNum(value) for value in values] + return valueList + + +class TableConverter(SimpleConverter): + + def xmlWrite(self, xmlWriter, name, value): + xmlWriter.begintag(name) + xmlWriter.newline() + value.toXML(xmlWriter) + xmlWriter.endtag(name) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + ob = self.getClass()() + for element in content: + if isinstance(element, str): + continue + name, attrs, content = element + ob.fromXML(name, attrs, content) + return ob + + +class PrivateDictConverter(TableConverter): + + def getClass(self): + return PrivateDict + + def _read(self, parent, value): + size, offset = value + file = parent.file + isCFF2 = parent._isCFF2 + try: + vstore = parent.vstore + except AttributeError: + vstore = None + priv = PrivateDict( + parent.strings, file, offset, isCFF2=isCFF2, vstore=vstore) + file.seek(offset) + data = file.read(size) + assert len(data) == size + priv.decompile(data) + return priv + + def write(self, parent, value): + return (0, 0) # dummy value + + +class SubrsConverter(TableConverter): + + def getClass(self): + return SubrsIndex + + def _read(self, parent, value): + file = parent.file + isCFF2 = parent._isCFF2 + file.seek(parent.offset + value) # Offset(self) + return SubrsIndex(file, isCFF2=isCFF2) + + def write(self, parent, value): + return 0 # dummy value + + +class CharStringsConverter(TableConverter): + + def _read(self, parent, value): + file = parent.file + isCFF2 = parent._isCFF2 + charset = parent.charset + globalSubrs = parent.GlobalSubrs + if hasattr(parent, "FDArray"): + fdArray = parent.FDArray + if hasattr(parent, "FDSelect"): + fdSelect = parent.FDSelect + else: + fdSelect = None + private = None + else: + fdSelect, fdArray = None, None + private = parent.Private + file.seek(value) # Offset(0) + charStrings = CharStrings( + file, charset, globalSubrs, private, fdSelect, fdArray, isCFF2=isCFF2) + return charStrings + + def write(self, parent, value): + return 0 # dummy value + + def xmlRead(self, name, attrs, content, parent): + if hasattr(parent, "FDArray"): + # if it is a CID-keyed font, then the private Dict is extracted from the + # parent.FDArray + fdArray = parent.FDArray + if hasattr(parent, "FDSelect"): + fdSelect = parent.FDSelect + else: + fdSelect = None + private = None + else: + # if it is a name-keyed font, then the private dict is in the top dict, + # and + # there is no fdArray. + private, fdSelect, fdArray = parent.Private, None, None + charStrings = CharStrings( + None, None, parent.GlobalSubrs, private, fdSelect, fdArray) + charStrings.fromXML(name, attrs, content) + return charStrings + + +class CharsetConverter(SimpleConverter): + def _read(self, parent, value): + isCID = hasattr(parent, "ROS") + if value > 2: + numGlyphs = parent.numGlyphs + file = parent.file + file.seek(value) + log.log(DEBUG, "loading charset at %s", value) + format = readCard8(file) + if format == 0: + charset = parseCharset0(numGlyphs, file, parent.strings, isCID) + elif format == 1 or format == 2: + charset = parseCharset(numGlyphs, file, parent.strings, isCID, format) + else: + raise NotImplementedError + assert len(charset) == numGlyphs + log.log(DEBUG, " charset end at %s", file.tell()) + # make sure glyph names are unique + allNames = {} + newCharset = [] + for glyphName in charset: + if glyphName in allNames: + # make up a new glyphName that's unique + n = allNames[glyphName] + while (glyphName + "#" + str(n)) in allNames: + n += 1 + allNames[glyphName] = n + 1 + glyphName = glyphName + "#" + str(n) + allNames[glyphName] = 1 + newCharset.append(glyphName) + charset = newCharset + else: # offset == 0 -> no charset data. + if isCID or "CharStrings" not in parent.rawDict: + # We get here only when processing fontDicts from the FDArray of + # CFF-CID fonts. Only the real topDict references the chrset. + assert value == 0 + charset = None + elif value == 0: + charset = cffISOAdobeStrings + elif value == 1: + charset = cffIExpertStrings + elif value == 2: + charset = cffExpertSubsetStrings + if charset and (len(charset) != parent.numGlyphs): + charset = charset[:parent.numGlyphs] + return charset + + def write(self, parent, value): + return 0 # dummy value + + def xmlWrite(self, xmlWriter, name, value): + # XXX only write charset when not in OT/TTX context, where we + # dump charset as a separate "GlyphOrder" table. + # # xmlWriter.simpletag("charset") + xmlWriter.comment("charset is dumped separately as the 'GlyphOrder' element") + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + pass + + +class CharsetCompiler(object): + + def __init__(self, strings, charset, parent): + assert charset[0] == '.notdef' + isCID = hasattr(parent.dictObj, "ROS") + data0 = packCharset0(charset, isCID, strings) + data = packCharset(charset, isCID, strings) + if len(data) < len(data0): + self.data = data + else: + self.data = data0 + self.parent = parent + + def setPos(self, pos, endPos): + self.parent.rawDict["charset"] = pos + + def getDataLength(self): + return len(self.data) + + def toFile(self, file): + file.write(self.data) + + +def getStdCharSet(charset): + # check to see if we can use a predefined charset value. + predefinedCharSetVal = None + predefinedCharSets = [ + (cffISOAdobeStringCount, cffISOAdobeStrings, 0), + (cffExpertStringCount, cffIExpertStrings, 1), + (cffExpertSubsetStringCount, cffExpertSubsetStrings, 2)] + lcs = len(charset) + for cnt, pcs, csv in predefinedCharSets: + if predefinedCharSetVal is not None: + break + if lcs > cnt: + continue + predefinedCharSetVal = csv + for i in range(lcs): + if charset[i] != pcs[i]: + predefinedCharSetVal = None + break + return predefinedCharSetVal + + +def getCIDfromName(name, strings): + return int(name[3:]) + + +def getSIDfromName(name, strings): + return strings.getSID(name) + + +def packCharset0(charset, isCID, strings): + fmt = 0 + data = [packCard8(fmt)] + if isCID: + getNameID = getCIDfromName + else: + getNameID = getSIDfromName + + for name in charset[1:]: + data.append(packCard16(getNameID(name, strings))) + return bytesjoin(data) + + +def packCharset(charset, isCID, strings): + fmt = 1 + ranges = [] + first = None + end = 0 + if isCID: + getNameID = getCIDfromName + else: + getNameID = getSIDfromName + + for name in charset[1:]: + SID = getNameID(name, strings) + if first is None: + first = SID + elif end + 1 != SID: + nLeft = end - first + if nLeft > 255: + fmt = 2 + ranges.append((first, nLeft)) + first = SID + end = SID + if end: + nLeft = end - first + if nLeft > 255: + fmt = 2 + ranges.append((first, nLeft)) + + data = [packCard8(fmt)] + if fmt == 1: + nLeftFunc = packCard8 + else: + nLeftFunc = packCard16 + for first, nLeft in ranges: + data.append(packCard16(first) + nLeftFunc(nLeft)) + return bytesjoin(data) + + +def parseCharset0(numGlyphs, file, strings, isCID): + charset = [".notdef"] + if isCID: + for i in range(numGlyphs - 1): + CID = readCard16(file) + charset.append("cid" + str(CID).zfill(5)) + else: + for i in range(numGlyphs - 1): + SID = readCard16(file) + charset.append(strings[SID]) + return charset + + +def parseCharset(numGlyphs, file, strings, isCID, fmt): + charset = ['.notdef'] + count = 1 + if fmt == 1: + nLeftFunc = readCard8 + else: + nLeftFunc = readCard16 + while count < numGlyphs: + first = readCard16(file) + nLeft = nLeftFunc(file) + if isCID: + for CID in range(first, first + nLeft + 1): + charset.append("cid" + str(CID).zfill(5)) + else: + for SID in range(first, first + nLeft + 1): + charset.append(strings[SID]) + count = count + nLeft + 1 + return charset + + +class EncodingCompiler(object): + + def __init__(self, strings, encoding, parent): + assert not isinstance(encoding, str) + data0 = packEncoding0(parent.dictObj.charset, encoding, parent.strings) + data1 = packEncoding1(parent.dictObj.charset, encoding, parent.strings) + if len(data0) < len(data1): + self.data = data0 + else: + self.data = data1 + self.parent = parent + + def setPos(self, pos, endPos): + self.parent.rawDict["Encoding"] = pos + + def getDataLength(self): + return len(self.data) + + def toFile(self, file): + file.write(self.data) + + +class EncodingConverter(SimpleConverter): + + def _read(self, parent, value): + if value == 0: + return "StandardEncoding" + elif value == 1: + return "ExpertEncoding" + else: + assert value > 1 + file = parent.file + file.seek(value) + log.log(DEBUG, "loading Encoding at %s", value) + fmt = readCard8(file) + haveSupplement = fmt & 0x80 + if haveSupplement: + raise NotImplementedError("Encoding supplements are not yet supported") + fmt = fmt & 0x7f + if fmt == 0: + encoding = parseEncoding0(parent.charset, file, haveSupplement, + parent.strings) + elif fmt == 1: + encoding = parseEncoding1(parent.charset, file, haveSupplement, + parent.strings) + return encoding + + def write(self, parent, value): + if value == "StandardEncoding": + return 0 + elif value == "ExpertEncoding": + return 1 + return 0 # dummy value + + def xmlWrite(self, xmlWriter, name, value): + if value in ("StandardEncoding", "ExpertEncoding"): + xmlWriter.simpletag(name, name=value) + xmlWriter.newline() + return + xmlWriter.begintag(name) + xmlWriter.newline() + for code in range(len(value)): + glyphName = value[code] + if glyphName != ".notdef": + xmlWriter.simpletag("map", code=hex(code), name=glyphName) + xmlWriter.newline() + xmlWriter.endtag(name) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + if "name" in attrs: + return attrs["name"] + encoding = [".notdef"] * 256 + for element in content: + if isinstance(element, str): + continue + name, attrs, content = element + code = safeEval(attrs["code"]) + glyphName = attrs["name"] + encoding[code] = glyphName + return encoding + + +def parseEncoding0(charset, file, haveSupplement, strings): + nCodes = readCard8(file) + encoding = [".notdef"] * 256 + for glyphID in range(1, nCodes + 1): + code = readCard8(file) + if code != 0: + encoding[code] = charset[glyphID] + return encoding + + +def parseEncoding1(charset, file, haveSupplement, strings): + nRanges = readCard8(file) + encoding = [".notdef"] * 256 + glyphID = 1 + for i in range(nRanges): + code = readCard8(file) + nLeft = readCard8(file) + for glyphID in range(glyphID, glyphID + nLeft + 1): + encoding[code] = charset[glyphID] + code = code + 1 + glyphID = glyphID + 1 + return encoding + + +def packEncoding0(charset, encoding, strings): + fmt = 0 + m = {} + for code in range(len(encoding)): + name = encoding[code] + if name != ".notdef": + m[name] = code + codes = [] + for name in charset[1:]: + code = m.get(name) + codes.append(code) + + while codes and codes[-1] is None: + codes.pop() + + data = [packCard8(fmt), packCard8(len(codes))] + for code in codes: + if code is None: + code = 0 + data.append(packCard8(code)) + return bytesjoin(data) + + +def packEncoding1(charset, encoding, strings): + fmt = 1 + m = {} + for code in range(len(encoding)): + name = encoding[code] + if name != ".notdef": + m[name] = code + ranges = [] + first = None + end = 0 + for name in charset[1:]: + code = m.get(name, -1) + if first is None: + first = code + elif end + 1 != code: + nLeft = end - first + ranges.append((first, nLeft)) + first = code + end = code + nLeft = end - first + ranges.append((first, nLeft)) + + # remove unencoded glyphs at the end. + while ranges and ranges[-1][0] == -1: + ranges.pop() + + data = [packCard8(fmt), packCard8(len(ranges))] + for first, nLeft in ranges: + if first == -1: # unencoded + first = 0 + data.append(packCard8(first) + packCard8(nLeft)) + return bytesjoin(data) + + +class FDArrayConverter(TableConverter): + + def _read(self, parent, value): + try: + vstore = parent.VarStore + except AttributeError: + vstore = None + file = parent.file + isCFF2 = parent._isCFF2 + file.seek(value) + fdArray = FDArrayIndex(file, isCFF2=isCFF2) + fdArray.vstore = vstore + fdArray.strings = parent.strings + fdArray.GlobalSubrs = parent.GlobalSubrs + return fdArray + + def write(self, parent, value): + return 0 # dummy value + + def xmlRead(self, name, attrs, content, parent): + fdArray = FDArrayIndex() + for element in content: + if isinstance(element, str): + continue + name, attrs, content = element + fdArray.fromXML(name, attrs, content) + return fdArray + + +class FDSelectConverter(SimpleConverter): + + def _read(self, parent, value): + file = parent.file + file.seek(value) + fdSelect = FDSelect(file, parent.numGlyphs) + return fdSelect + + def write(self, parent, value): + return 0 # dummy value + + # The FDSelect glyph data is written out to XML in the charstring keys, + # so we write out only the format selector + def xmlWrite(self, xmlWriter, name, value): + xmlWriter.simpletag(name, [('format', value.format)]) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + fmt = safeEval(attrs["format"]) + file = None + numGlyphs = None + fdSelect = FDSelect(file, numGlyphs, fmt) + return fdSelect + + +class VarStoreConverter(SimpleConverter): + + def _read(self, parent, value): + file = parent.file + file.seek(value) + varStore = VarStoreData(file) + varStore.decompile() + return varStore + + def write(self, parent, value): + return 0 # dummy value + + def xmlWrite(self, xmlWriter, name, value): + value.writeXML(xmlWriter, name) + + def xmlRead(self, name, attrs, content, parent): + varStore = VarStoreData() + varStore.xmlRead(name, attrs, content, parent) + return varStore + + +def packFDSelect0(fdSelectArray): + fmt = 0 + data = [packCard8(fmt)] + for index in fdSelectArray: + data.append(packCard8(index)) + return bytesjoin(data) + + +def packFDSelect3(fdSelectArray): + fmt = 3 + fdRanges = [] + lenArray = len(fdSelectArray) + lastFDIndex = -1 + for i in range(lenArray): + fdIndex = fdSelectArray[i] + if lastFDIndex != fdIndex: + fdRanges.append([i, fdIndex]) + lastFDIndex = fdIndex + sentinelGID = i + 1 + + data = [packCard8(fmt)] + data.append(packCard16(len(fdRanges))) + for fdRange in fdRanges: + data.append(packCard16(fdRange[0])) + data.append(packCard8(fdRange[1])) + data.append(packCard16(sentinelGID)) + return bytesjoin(data) + + +def packFDSelect4(fdSelectArray): + fmt = 4 + fdRanges = [] + lenArray = len(fdSelectArray) + lastFDIndex = -1 + for i in range(lenArray): + fdIndex = fdSelectArray[i] + if lastFDIndex != fdIndex: + fdRanges.append([i, fdIndex]) + lastFDIndex = fdIndex + sentinelGID = i + 1 + + data = [packCard8(fmt)] + data.append(packCard32(len(fdRanges))) + for fdRange in fdRanges: + data.append(packCard32(fdRange[0])) + data.append(packCard16(fdRange[1])) + data.append(packCard32(sentinelGID)) + return bytesjoin(data) + + +class FDSelectCompiler(object): + + def __init__(self, fdSelect, parent): + fmt = fdSelect.format + fdSelectArray = fdSelect.gidArray + if fmt == 0: + self.data = packFDSelect0(fdSelectArray) + elif fmt == 3: + self.data = packFDSelect3(fdSelectArray) + elif fmt == 4: + self.data = packFDSelect4(fdSelectArray) + else: + # choose smaller of the two formats + data0 = packFDSelect0(fdSelectArray) + data3 = packFDSelect3(fdSelectArray) + if len(data0) < len(data3): + self.data = data0 + fdSelect.format = 0 + else: + self.data = data3 + fdSelect.format = 3 + + self.parent = parent + + def setPos(self, pos, endPos): + self.parent.rawDict["FDSelect"] = pos + + def getDataLength(self): + return len(self.data) + + def toFile(self, file): + file.write(self.data) + + +class VarStoreCompiler(object): + + def __init__(self, varStoreData, parent): + self.parent = parent + if not varStoreData.data: + varStoreData.compile() + data = [ + packCard16(len(varStoreData.data)), + varStoreData.data + ] + self.data = bytesjoin(data) + + def setPos(self, pos, endPos): + self.parent.rawDict["VarStore"] = pos + + def getDataLength(self): + return len(self.data) + + def toFile(self, file): + file.write(self.data) + + +class ROSConverter(SimpleConverter): + + def xmlWrite(self, xmlWriter, name, value): + registry, order, supplement = value + xmlWriter.simpletag( + name, + [ + ('Registry', tostr(registry)), + ('Order', tostr(order)), + ('Supplement', supplement) + ]) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + return (attrs['Registry'], attrs['Order'], safeEval(attrs['Supplement'])) + +topDictOperators = [ +# opcode name argument type default converter + (25, 'maxstack', 'number', None, None), + ((12, 30), 'ROS', ('SID', 'SID', 'number'), None, ROSConverter()), + ((12, 20), 'SyntheticBase', 'number', None, None), + (0, 'version', 'SID', None, None), + (1, 'Notice', 'SID', None, Latin1Converter()), + ((12, 0), 'Copyright', 'SID', None, Latin1Converter()), + (2, 'FullName', 'SID', None, None), + ((12, 38), 'FontName', 'SID', None, None), + (3, 'FamilyName', 'SID', None, None), + (4, 'Weight', 'SID', None, None), + ((12, 1), 'isFixedPitch', 'number', 0, None), + ((12, 2), 'ItalicAngle', 'number', 0, None), + ((12, 3), 'UnderlinePosition', 'number', -100, None), + ((12, 4), 'UnderlineThickness', 'number', 50, None), + ((12, 5), 'PaintType', 'number', 0, None), + ((12, 6), 'CharstringType', 'number', 2, None), + ((12, 7), 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0], None), + (13, 'UniqueID', 'number', None, None), + (5, 'FontBBox', 'array', [0, 0, 0, 0], None), + ((12, 8), 'StrokeWidth', 'number', 0, None), + (14, 'XUID', 'array', None, None), + ((12, 21), 'PostScript', 'SID', None, None), + ((12, 22), 'BaseFontName', 'SID', None, None), + ((12, 23), 'BaseFontBlend', 'delta', None, None), + ((12, 31), 'CIDFontVersion', 'number', 0, None), + ((12, 32), 'CIDFontRevision', 'number', 0, None), + ((12, 33), 'CIDFontType', 'number', 0, None), + ((12, 34), 'CIDCount', 'number', 8720, None), + (15, 'charset', 'number', None, CharsetConverter()), + ((12, 35), 'UIDBase', 'number', None, None), + (16, 'Encoding', 'number', 0, EncodingConverter()), + (18, 'Private', ('number', 'number'), None, PrivateDictConverter()), + ((12, 37), 'FDSelect', 'number', None, FDSelectConverter()), + ((12, 36), 'FDArray', 'number', None, FDArrayConverter()), + (17, 'CharStrings', 'number', None, CharStringsConverter()), + (24, 'VarStore', 'number', None, VarStoreConverter()), +] + +topDictOperators2 = [ +# opcode name argument type default converter + (25, 'maxstack', 'number', None, None), + ((12, 7), 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0], None), + ((12, 37), 'FDSelect', 'number', None, FDSelectConverter()), + ((12, 36), 'FDArray', 'number', None, FDArrayConverter()), + (17, 'CharStrings', 'number', None, CharStringsConverter()), + (24, 'VarStore', 'number', None, VarStoreConverter()), +] + +# Note! FDSelect and FDArray must both preceed CharStrings in the output XML build order, +# in order for the font to compile back from xml. + +kBlendDictOpName = "blend" +blendOp = 23 + +privateDictOperators = [ +# opcode name argument type default converter + (22, "vsindex", 'number', None, None), + (blendOp, kBlendDictOpName, 'blendList', None, None), # This is for reading to/from XML: it not written to CFF. + (6, 'BlueValues', 'delta', None, None), + (7, 'OtherBlues', 'delta', None, None), + (8, 'FamilyBlues', 'delta', None, None), + (9, 'FamilyOtherBlues', 'delta', None, None), + ((12, 9), 'BlueScale', 'number', 0.039625, None), + ((12, 10), 'BlueShift', 'number', 7, None), + ((12, 11), 'BlueFuzz', 'number', 1, None), + (10, 'StdHW', 'number', None, None), + (11, 'StdVW', 'number', None, None), + ((12, 12), 'StemSnapH', 'delta', None, None), + ((12, 13), 'StemSnapV', 'delta', None, None), + ((12, 14), 'ForceBold', 'number', 0, None), + ((12, 15), 'ForceBoldThreshold', 'number', None, None), # deprecated + ((12, 16), 'lenIV', 'number', None, None), # deprecated + ((12, 17), 'LanguageGroup', 'number', 0, None), + ((12, 18), 'ExpansionFactor', 'number', 0.06, None), + ((12, 19), 'initialRandomSeed', 'number', 0, None), + (20, 'defaultWidthX', 'number', 0, None), + (21, 'nominalWidthX', 'number', 0, None), + (19, 'Subrs', 'number', None, SubrsConverter()), +] + +privateDictOperators2 = [ +# opcode name argument type default converter + (22, "vsindex", 'number', None, None), + (blendOp, kBlendDictOpName, 'blendList', None, None), # This is for reading to/from XML: it not written to CFF. + (6, 'BlueValues', 'delta', None, None), + (7, 'OtherBlues', 'delta', None, None), + (8, 'FamilyBlues', 'delta', None, None), + (9, 'FamilyOtherBlues', 'delta', None, None), + ((12, 9), 'BlueScale', 'number', 0.039625, None), + ((12, 10), 'BlueShift', 'number', 7, None), + ((12, 11), 'BlueFuzz', 'number', 1, None), + (10, 'StdHW', 'number', None, None), + (11, 'StdVW', 'number', None, None), + ((12, 12), 'StemSnapH', 'delta', None, None), + ((12, 13), 'StemSnapV', 'delta', None, None), + ((12, 17), 'LanguageGroup', 'number', 0, None), + ((12, 18), 'ExpansionFactor', 'number', 0.06, None), + (19, 'Subrs', 'number', None, SubrsConverter()), +] + + +def addConverters(table): + for i in range(len(table)): + op, name, arg, default, conv = table[i] + if conv is not None: + continue + if arg in ("delta", "array"): + conv = ArrayConverter() + elif arg == "number": + conv = NumberConverter() + elif arg == "SID": + conv = ASCIIConverter() + elif arg == 'blendList': + conv = None + else: + assert False + table[i] = op, name, arg, default, conv + + +addConverters(privateDictOperators) +addConverters(topDictOperators) + + +class TopDictDecompiler(psCharStrings.DictDecompiler): + operators = buildOperatorDict(topDictOperators) + + +class PrivateDictDecompiler(psCharStrings.DictDecompiler): + operators = buildOperatorDict(privateDictOperators) + + +class DictCompiler(object): + maxBlendStack = 0 + + def __init__(self, dictObj, strings, parent, isCFF2=None): + if strings: + assert isinstance(strings, IndexedStrings) + if isCFF2 is None and hasattr(parent, "isCFF2"): + isCFF2 = parent.isCFF2 + assert isCFF2 is not None + self.isCFF2 = isCFF2 + self.dictObj = dictObj + self.strings = strings + self.parent = parent + rawDict = {} + for name in dictObj.order: + value = getattr(dictObj, name, None) + if value is None: + continue + conv = dictObj.converters[name] + value = conv.write(dictObj, value) + if value == dictObj.defaults.get(name): + continue + rawDict[name] = value + self.rawDict = rawDict + + def setPos(self, pos, endPos): + pass + + def getDataLength(self): + return len(self.compile("getDataLength")) + + def compile(self, reason): + log.log(DEBUG, "-- compiling %s for %s", self.__class__.__name__, reason) + rawDict = self.rawDict + data = [] + for name in self.dictObj.order: + value = rawDict.get(name) + if value is None: + continue + op, argType = self.opcodes[name] + if isinstance(argType, tuple): + l = len(argType) + assert len(value) == l, "value doesn't match arg type" + for i in range(l): + arg = argType[i] + v = value[i] + arghandler = getattr(self, "arg_" + arg) + data.append(arghandler(v)) + else: + arghandler = getattr(self, "arg_" + argType) + data.append(arghandler(value)) + data.append(op) + data = bytesjoin(data) + return data + + def toFile(self, file): + data = self.compile("toFile") + file.write(data) + + def arg_number(self, num): + if isinstance(num, list): + data = [encodeNumber(val) for val in num] + data.append(encodeNumber(1)) + data.append(bytechr(blendOp)) + datum = bytesjoin(data) + else: + datum = encodeNumber(num) + return datum + + def arg_SID(self, s): + return psCharStrings.encodeIntCFF(self.strings.getSID(s)) + + def arg_array(self, value): + data = [] + for num in value: + data.append(self.arg_number(num)) + return bytesjoin(data) + + def arg_delta(self, value): + if not value: + return b"" + val0 = value[0] + if isinstance(val0, list): + data = self.arg_delta_blend(value) + else: + out = [] + last = 0 + for v in value: + out.append(v - last) + last = v + data = [] + for num in out: + data.append(encodeNumber(num)) + return bytesjoin(data) + + + def arg_delta_blend(self, value): + """A delta list with blend lists has to be *all* blend lists. + + The value is a list is arranged as follows:: + + [ + [V0, d0..dn] + [V1, d0..dn] + ... + [Vm, d0..dn] + ] + + ``V`` is the absolute coordinate value from the default font, and ``d0-dn`` + are the delta values from the *n* regions. Each ``V`` is an absolute + coordinate from the default font. + + We want to return a list:: + + [ + [v0, v1..vm] + [d0..dn] + ... + [d0..dn] + numBlends + blendOp + ] + + where each ``v`` is relative to the previous default font value. + """ + numMasters = len(value[0]) + numBlends = len(value) + numStack = (numBlends * numMasters) + 1 + if numStack > self.maxBlendStack: + # Figure out the max number of value we can blend + # and divide this list up into chunks of that size. + + numBlendValues = int((self.maxBlendStack - 1) / numMasters) + out = [] + while True: + numVal = min(len(value), numBlendValues) + if numVal == 0: + break + valList = value[0:numVal] + out1 = self.arg_delta_blend(valList) + out.extend(out1) + value = value[numVal:] + else: + firstList = [0] * numBlends + deltaList = [None] * numBlends + i = 0 + prevVal = 0 + while i < numBlends: + # For PrivateDict BlueValues, the default font + # values are absolute, not relative. + # Must convert these back to relative coordinates + # befor writing to CFF2. + defaultValue = value[i][0] + firstList[i] = defaultValue - prevVal + prevVal = defaultValue + deltaList[i] = value[i][1:] + i += 1 + + relValueList = firstList + for blendList in deltaList: + relValueList.extend(blendList) + out = [encodeNumber(val) for val in relValueList] + out.append(encodeNumber(numBlends)) + out.append(bytechr(blendOp)) + return out + + +def encodeNumber(num): + if isinstance(num, float): + return psCharStrings.encodeFloat(num) + else: + return psCharStrings.encodeIntCFF(num) + + +class TopDictCompiler(DictCompiler): + + opcodes = buildOpcodeDict(topDictOperators) + + def getChildren(self, strings): + isCFF2 = self.isCFF2 + children = [] + if self.dictObj.cff2GetGlyphOrder is None: + if hasattr(self.dictObj, "charset") and self.dictObj.charset: + if hasattr(self.dictObj, "ROS"): # aka isCID + charsetCode = None + else: + charsetCode = getStdCharSet(self.dictObj.charset) + if charsetCode is None: + children.append(CharsetCompiler(strings, self.dictObj.charset, self)) + else: + self.rawDict["charset"] = charsetCode + if hasattr(self.dictObj, "Encoding") and self.dictObj.Encoding: + encoding = self.dictObj.Encoding + if not isinstance(encoding, str): + children.append(EncodingCompiler(strings, encoding, self)) + else: + if hasattr(self.dictObj, "VarStore"): + varStoreData = self.dictObj.VarStore + varStoreComp = VarStoreCompiler(varStoreData, self) + children.append(varStoreComp) + if hasattr(self.dictObj, "FDSelect"): + # I have not yet supported merging a ttx CFF-CID font, as there are + # interesting issues about merging the FDArrays. Here I assume that + # either the font was read from XML, and the FDSelect indices are all + # in the charstring data, or the FDSelect array is already fully defined. + fdSelect = self.dictObj.FDSelect + # probably read in from XML; assume fdIndex in CharString data + if len(fdSelect) == 0: + charStrings = self.dictObj.CharStrings + for name in self.dictObj.charset: + fdSelect.append(charStrings[name].fdSelectIndex) + fdSelectComp = FDSelectCompiler(fdSelect, self) + children.append(fdSelectComp) + if hasattr(self.dictObj, "CharStrings"): + items = [] + charStrings = self.dictObj.CharStrings + for name in self.dictObj.charset: + items.append(charStrings[name]) + charStringsComp = CharStringsCompiler( + items, strings, self, isCFF2=isCFF2) + children.append(charStringsComp) + if hasattr(self.dictObj, "FDArray"): + # I have not yet supported merging a ttx CFF-CID font, as there are + # interesting issues about merging the FDArrays. Here I assume that the + # FDArray info is correct and complete. + fdArrayIndexComp = self.dictObj.FDArray.getCompiler(strings, self) + children.append(fdArrayIndexComp) + children.extend(fdArrayIndexComp.getChildren(strings)) + if hasattr(self.dictObj, "Private"): + privComp = self.dictObj.Private.getCompiler(strings, self) + children.append(privComp) + children.extend(privComp.getChildren(strings)) + return children + + +class FontDictCompiler(DictCompiler): + opcodes = buildOpcodeDict(topDictOperators) + + def __init__(self, dictObj, strings, parent, isCFF2=None): + super(FontDictCompiler, self).__init__(dictObj, strings, parent, isCFF2=isCFF2) + # + # We now take some effort to detect if there were any key/value pairs + # supplied that were ignored in the FontDict context, and issue a warning + # for those cases. + # + ignoredNames = [] + dictObj = self.dictObj + for name in sorted(set(dictObj.converters) - set(dictObj.order)): + if name in dictObj.rawDict: + # The font was directly read from binary. In this + # case, we want to report *all* "useless" key/value + # pairs that are in the font, not just the ones that + # are different from the default. + ignoredNames.append(name) + else: + # The font was probably read from a TTX file. We only + # warn about keys whos value is not the default. The + # ones that have the default value will not be written + # to binary anyway. + default = dictObj.defaults.get(name) + if default is not None: + conv = dictObj.converters[name] + default = conv.read(dictObj, default) + if getattr(dictObj, name, None) != default: + ignoredNames.append(name) + if ignoredNames: + log.warning( + "Some CFF FDArray/FontDict keys were ignored upon compile: " + + " ".join(sorted(ignoredNames))) + + def getChildren(self, strings): + children = [] + if hasattr(self.dictObj, "Private"): + privComp = self.dictObj.Private.getCompiler(strings, self) + children.append(privComp) + children.extend(privComp.getChildren(strings)) + return children + + +class PrivateDictCompiler(DictCompiler): + + maxBlendStack = maxStackLimit + opcodes = buildOpcodeDict(privateDictOperators) + + def setPos(self, pos, endPos): + size = endPos - pos + self.parent.rawDict["Private"] = size, pos + self.pos = pos + + def getChildren(self, strings): + children = [] + if hasattr(self.dictObj, "Subrs"): + children.append(self.dictObj.Subrs.getCompiler(strings, self)) + return children + + +class BaseDict(object): + + def __init__(self, strings=None, file=None, offset=None, isCFF2=None): + assert (isCFF2 is None) == (file is None) + self.rawDict = {} + self.skipNames = [] + self.strings = strings + if file is None: + return + self._isCFF2 = isCFF2 + self.file = file + if offset is not None: + log.log(DEBUG, "loading %s at %s", self.__class__.__name__, offset) + self.offset = offset + + def decompile(self, data): + log.log(DEBUG, " length %s is %d", self.__class__.__name__, len(data)) + dec = self.decompilerClass(self.strings, self) + dec.decompile(data) + self.rawDict = dec.getDict() + self.postDecompile() + + def postDecompile(self): + pass + + def getCompiler(self, strings, parent, isCFF2=None): + return self.compilerClass(self, strings, parent, isCFF2=isCFF2) + + def __getattr__(self, name): + if name[:2] == name[-2:] == "__": + # to make deepcopy() and pickle.load() work, we need to signal with + # AttributeError that dunder methods like '__deepcopy__' or '__getstate__' + # aren't implemented. For more details, see: + # https://github.com/fonttools/fonttools/pull/1488 + raise AttributeError(name) + value = self.rawDict.get(name, None) + if value is None: + value = self.defaults.get(name) + if value is None: + raise AttributeError(name) + conv = self.converters[name] + value = conv.read(self, value) + setattr(self, name, value) + return value + + def toXML(self, xmlWriter): + for name in self.order: + if name in self.skipNames: + continue + value = getattr(self, name, None) + # XXX For "charset" we never skip calling xmlWrite even if the + # value is None, so we always write the following XML comment: + # + # + # + # Charset is None when 'CFF ' table is imported from XML into an + # empty TTFont(). By writing this comment all the time, we obtain + # the same XML output whether roundtripping XML-to-XML or + # dumping binary-to-XML + if value is None and name != "charset": + continue + conv = self.converters[name] + conv.xmlWrite(xmlWriter, name, value) + ignoredNames = set(self.rawDict) - set(self.order) + if ignoredNames: + xmlWriter.comment( + "some keys were ignored: %s" % " ".join(sorted(ignoredNames))) + xmlWriter.newline() + + def fromXML(self, name, attrs, content): + conv = self.converters[name] + value = conv.xmlRead(name, attrs, content, self) + setattr(self, name, value) + + +class TopDict(BaseDict): + """The ``TopDict`` represents the top-level dictionary holding font + information. CFF2 tables contain a restricted set of top-level entries + as described `here `_, + but CFF tables may contain a wider range of information. This information + can be accessed through attributes or through the dictionary returned + through the ``rawDict`` property: + + .. code:: python + + font = tt["CFF "].cff[0] + font.FamilyName + # 'Linux Libertine O' + font.rawDict["FamilyName"] + # 'Linux Libertine O' + + More information is available in the CFF file's private dictionary, accessed + via the ``Private`` property: + + .. code:: python + + tt["CFF "].cff[0].Private.BlueValues + # [-15, 0, 515, 515, 666, 666] + + """ + + defaults = buildDefaults(topDictOperators) + converters = buildConverters(topDictOperators) + compilerClass = TopDictCompiler + order = buildOrder(topDictOperators) + decompilerClass = TopDictDecompiler + + def __init__(self, strings=None, file=None, offset=None, + GlobalSubrs=None, cff2GetGlyphOrder=None, isCFF2=None): + super(TopDict, self).__init__(strings, file, offset, isCFF2=isCFF2) + self.cff2GetGlyphOrder = cff2GetGlyphOrder + self.GlobalSubrs = GlobalSubrs + if isCFF2: + self.defaults = buildDefaults(topDictOperators2) + self.charset = cff2GetGlyphOrder() + self.order = buildOrder(topDictOperators2) + else: + self.defaults = buildDefaults(topDictOperators) + self.order = buildOrder(topDictOperators) + + def getGlyphOrder(self): + """Returns a list of glyph names in the CFF font.""" + return self.charset + + def postDecompile(self): + offset = self.rawDict.get("CharStrings") + if offset is None: + return + # get the number of glyphs beforehand. + self.file.seek(offset) + if self._isCFF2: + self.numGlyphs = readCard32(self.file) + else: + self.numGlyphs = readCard16(self.file) + + def toXML(self, xmlWriter): + if hasattr(self, "CharStrings"): + self.decompileAllCharStrings() + if hasattr(self, "ROS"): + self.skipNames = ['Encoding'] + if not hasattr(self, "ROS") or not hasattr(self, "CharStrings"): + # these values have default values, but I only want them to show up + # in CID fonts. + self.skipNames = [ + 'CIDFontVersion', 'CIDFontRevision', 'CIDFontType', 'CIDCount'] + BaseDict.toXML(self, xmlWriter) + + def decompileAllCharStrings(self): + # Make sure that all the Private Dicts have been instantiated. + for i, charString in enumerate(self.CharStrings.values()): + try: + charString.decompile() + except: + log.error("Error in charstring %s", i) + raise + + def recalcFontBBox(self): + fontBBox = None + for charString in self.CharStrings.values(): + bounds = charString.calcBounds(self.CharStrings) + if bounds is not None: + if fontBBox is not None: + fontBBox = unionRect(fontBBox, bounds) + else: + fontBBox = bounds + + if fontBBox is None: + self.FontBBox = self.defaults['FontBBox'][:] + else: + self.FontBBox = list(intRect(fontBBox)) + + +class FontDict(BaseDict): + # + # Since fonttools used to pass a lot of fields that are not relevant in the FDArray + # FontDict, there are 'ttx' files in the wild that contain all these. These got in + # the ttx files because fonttools writes explicit values for all the TopDict default + # values. These are not actually illegal in the context of an FDArray FontDict - you + # can legally, per spec, put any arbitrary key/value pair in a FontDict - but are + # useless since current major company CFF interpreters ignore anything but the set + # listed in this file. So, we just silently skip them. An exception is Weight: this + # is not used by any interpreter, but some foundries have asked that this be + # supported in FDArray FontDicts just to preserve information about the design when + # the font is being inspected. + # + # On top of that, there are fonts out there that contain such useless FontDict values. + # + # By subclassing TopDict, we *allow* all key/values from TopDict, both when reading + # from binary or when reading from XML, but by overriding `order` with a limited + # list of names, we ensure that only the useful names ever get exported to XML and + # ever get compiled into the binary font. + # + # We override compilerClass so we can warn about "useless" key/value pairs, either + # from the original binary font or from TTX input. + # + # See: + # - https://github.com/fonttools/fonttools/issues/740 + # - https://github.com/fonttools/fonttools/issues/601 + # - https://github.com/adobe-type-tools/afdko/issues/137 + # + defaults = {} + converters = buildConverters(topDictOperators) + compilerClass = FontDictCompiler + orderCFF = ['FontName', 'FontMatrix', 'Weight', 'Private'] + orderCFF2 = ['Private'] + decompilerClass = TopDictDecompiler + + def __init__(self, strings=None, file=None, offset=None, + GlobalSubrs=None, isCFF2=None, vstore=None): + super(FontDict, self).__init__(strings, file, offset, isCFF2=isCFF2) + self.vstore = vstore + self.setCFF2(isCFF2) + + def setCFF2(self, isCFF2): + # isCFF2 may be None. + if isCFF2: + self.order = self.orderCFF2 + self._isCFF2 = True + else: + self.order = self.orderCFF + self._isCFF2 = False + + +class PrivateDict(BaseDict): + defaults = buildDefaults(privateDictOperators) + converters = buildConverters(privateDictOperators) + order = buildOrder(privateDictOperators) + decompilerClass = PrivateDictDecompiler + compilerClass = PrivateDictCompiler + + def __init__(self, strings=None, file=None, offset=None, isCFF2=None, + vstore=None): + super(PrivateDict, self).__init__(strings, file, offset, isCFF2=isCFF2) + self.vstore = vstore + if isCFF2: + self.defaults = buildDefaults(privateDictOperators2) + self.order = buildOrder(privateDictOperators2) + # Provide dummy values. This avoids needing to provide + # an isCFF2 state in a lot of places. + self.nominalWidthX = self.defaultWidthX = None + else: + self.defaults = buildDefaults(privateDictOperators) + self.order = buildOrder(privateDictOperators) + + @property + def in_cff2(self): + return self._isCFF2 + + def getNumRegions(self, vi=None): # called from misc/psCharStrings.py + # if getNumRegions is being called, we can assume that VarStore exists. + if vi is None: + if hasattr(self, 'vsindex'): + vi = self.vsindex + else: + vi = 0 + numRegions = self.vstore.getNumRegions(vi) + return numRegions + + +class IndexedStrings(object): + + """SID -> string mapping.""" + + def __init__(self, file=None): + if file is None: + strings = [] + else: + strings = [ + tostr(s, encoding="latin1") + for s in Index(file, isCFF2=False) + ] + self.strings = strings + + def getCompiler(self): + return IndexedStringsCompiler(self, None, self, isCFF2=False) + + def __len__(self): + return len(self.strings) + + def __getitem__(self, SID): + if SID < cffStandardStringCount: + return cffStandardStrings[SID] + else: + return self.strings[SID - cffStandardStringCount] + + def getSID(self, s): + if not hasattr(self, "stringMapping"): + self.buildStringMapping() + s = tostr(s, encoding="latin1") + if s in cffStandardStringMapping: + SID = cffStandardStringMapping[s] + elif s in self.stringMapping: + SID = self.stringMapping[s] + else: + SID = len(self.strings) + cffStandardStringCount + self.strings.append(s) + self.stringMapping[s] = SID + return SID + + def getStrings(self): + return self.strings + + def buildStringMapping(self): + self.stringMapping = {} + for index in range(len(self.strings)): + self.stringMapping[self.strings[index]] = index + cffStandardStringCount + + +# The 391 Standard Strings as used in the CFF format. +# from Adobe Technical None #5176, version 1.0, 18 March 1998 + +cffStandardStrings = ['.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', + 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', + 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', + 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', + 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', + 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', + 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', + 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', + 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', + 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', + 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', + 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', + 'daggerdbl', 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', + 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', + 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', + 'dotaccent', 'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', + 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', + 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', + 'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', + 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', + 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', + 'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', + 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', + 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', + 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', + 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', + 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', + 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', + 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis', + 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave', + 'yacute', 'ydieresis', 'zcaron', 'exclamsmall', 'Hungarumlautsmall', + 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', + 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', + 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', + 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', + 'nineoldstyle', 'commasuperior', 'threequartersemdash', 'periodsuperior', + 'questionsmall', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', + 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', + 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'ffi', 'ffl', 'parenleftinferior', + 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', + 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', + 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', + 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', + 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', + 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', + 'Dieresissmall', 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', + 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', + 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', + 'onethird', 'twothirds', 'zerosuperior', 'foursuperior', 'fivesuperior', + 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', + 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', + 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', + 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', + 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', + 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', + 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', + 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', + 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', + 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', + 'Yacutesmall', 'Thornsmall', 'Ydieresissmall', '001.000', '001.001', '001.002', + '001.003', 'Black', 'Bold', 'Book', 'Light', 'Medium', 'Regular', 'Roman', + 'Semibold' +] + +cffStandardStringCount = 391 +assert len(cffStandardStrings) == cffStandardStringCount +# build reverse mapping +cffStandardStringMapping = {} +for _i in range(cffStandardStringCount): + cffStandardStringMapping[cffStandardStrings[_i]] = _i + +cffISOAdobeStrings = [".notdef", "space", "exclam", "quotedbl", "numbersign", +"dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", +"asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", +"three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", +"less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", +"H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", +"X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", +"underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", +"k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", +"braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", +"sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", +"quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", +"endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", +"quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", +"perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", +"macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", +"ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", +"ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", +"onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", +"Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", +"threequarters", "twosuperior", "registered", "minus", "eth", "multiply", +"threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", +"Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", +"Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", +"Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", +"Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", +"acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", +"ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", +"igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", +"scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", +"zcaron"] + +cffISOAdobeStringCount = 229 +assert len(cffISOAdobeStrings) == cffISOAdobeStringCount + +cffIExpertStrings = [".notdef", "space", "exclamsmall", "Hungarumlautsmall", +"dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", +"parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", +"comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", +"twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", +"sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", +"commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", +"asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", +"lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", +"tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", +"parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", +"Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", +"Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", +"Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", +"Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", +"exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", +"Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", +"figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", +"onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", +"threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", +"zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", +"fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", +"zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", +"fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", +"centinferior", "dollarinferior", "periodinferior", "commainferior", +"Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", +"Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", +"Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", +"Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", +"Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", +"Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", +"Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", +"Ydieresissmall"] + +cffExpertStringCount = 166 +assert len(cffIExpertStrings) == cffExpertStringCount + +cffExpertSubsetStrings = [".notdef", "space", "dollaroldstyle", +"dollarsuperior", "parenleftsuperior", "parenrightsuperior", "twodotenleader", +"onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", +"oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", +"sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", +"semicolon", "commasuperior", "threequartersemdash", "periodsuperior", +"asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", +"lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", +"tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", +"parenrightinferior", "hyphensuperior", "colonmonetary", "onefitted", "rupiah", +"centoldstyle", "figuredash", "hypheninferior", "onequarter", "onehalf", +"threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", +"onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", +"threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", +"eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", +"threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", +"eightinferior", "nineinferior", "centinferior", "dollarinferior", +"periodinferior", "commainferior"] + +cffExpertSubsetStringCount = 87 +assert len(cffExpertSubsetStrings) == cffExpertSubsetStringCount diff --git a/.venv/lib/python3.9/site-packages/fontTools/cffLib/__pycache__/__init__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/cffLib/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94869d400b26dc8bda92eb8019608ddad6a0644e GIT binary patch literal 83377 zcmeFa3!GfXRp;OD?&*1GG%t?^_=E8T~6C`W;QdIEobL)<(!4Hv-!C~xiHsL?wKo= zi*vo@-nqVV-&}vW-`?kD2jlhAhPjR9P4--z-8{FY zyv3e-XSbHOQhx9373C}JcUyT|<%*dXd3{?GtYeu=k}@JzxVR~G4GAMf1|yB4dF3wobb4Xj}o5nP7pp};nxzL z^gO~|<+bELO1R=p5uUQ}eS}YXrwE_2@co3Ry&1wY_WkP!pY~=6&su#S@aDWK^*H9u zduRAP?k#vezpwXdUY*|uy+!XVzYlqjd*}Fl*gNkn@%sky`4+E1J`KyKOnBLQg76bo z&LiHpdT%1#qu#f9PxAYicfos#-#2=1_TIwp80p{Yy^Zv5vwDsb{&w%}gx_x8PZ0hN z?;V8SVc`?rJH2=D-K6)gym#~KdGGPw%Ws8r|Jr*W>E37cm?Hds?*oKCVBwR5Kj?jk z@P{m)Q{H!a-{pO`_hGNMa_T~2D(iiZ_Ytqp`(AH_n0qYdqW68V(D!>E^?tznH{K6= zAM>8}KJNWn?}xm9=Y7Ka_a_tH4}TwHnmm5Q`%&+c7V~34%#VAY^8SPO6W&jHpZ0#r z`)TiIyw7+)>wT6oUT09F|G&e}cS+;Zg^?^nvFy zd%xlR7wiwD3?LMp9=JMQg z%0=I|e>qsLdVlVHnckkS%va_vB$Ek#r}azk{)Kmm-n|4}Ji~ZcAm%T z|4sORTR!Iq{~zxk3IAi|9N(WO{8jIt2>+9Xmk9r}_cg*_v+%bN{<`-J;b-jo#>vFH zlV0NclI3N7ljSEW-&$F|kgPm$I`!^c?Q{1go=i?B%5SQCTjhxh$wP_9hRRP?o~*p7 zvRrxcio|V+cjp#<)pAIY!v%6km!Bes3*_(=Ipk{@0_G zN|7VQTS<{Gzl{`cCB@q;#XU;l^&U&?DkKw$iI=4kiOH#{qthq$m;B0vcf;fUbiGo# z)0;n0DIGj~xHL6it=Edh`_5FV$IqXsxNzz5>H4YC{qwc@u}OdWOuaO}Sf8D)R%)e5 zl21%mOA|cJotdrFE3@ZI(^ap+_g! zME$yv(y{rHSD7H&ldib-Dir<7!s4_~krT7Ej+E4Uq;&k$bgeWu?=8+&NHRPBc&&7P zez8=aw|15$s$R+3YBj3abG=ffuBG~^u<5GFNU?aNTH3c~?=9DtqAKhixs{Z4pX?_q zo_#S+sryQ|ovPQ*)b`(SgEv1}8=0G)^yh2yQ}q#`aYLoLd$D#y{rs8vlm5h+Q|E7( z2Pgz9H`LBlCU2k{_T4@{MtxLl>G4z3lc%ny>hmE0=Bb!pnmjd8Jz1$;U#gs=zRVOI z^;HW6Hv?KxZSg8|w6<27pDLZ5@TVtE01@lfb|9UZ@N0nc1jUr*{ppj_RWcC@2vlku zkhmn)Y&hA>*J^ctak9>1|C!psQxpENx=&BlhEvU+#p?8Y^?}M{y_p9_dKk_%^C!;N zE0d>u_b~5!%^t&3t{{0?lk4obsE6+Qd}luCo)f5m48Sm z>c=7;0C6p%FkiP6HD2ZqDElM#ja~xJ6H6~G_RLMp%=`OGrP2YOr>oKPDbGJPy;Rvx z{B%;|L5+<6DT6z>YJJ=)i85onobr;#60~;cSbhG?J+$-S{9?6!*I9aWbU58CjEz+% z<|<=j&EnXY!$O|>#>N&FCuZH7rxX5W^0V7lAG=|$;!RK7aLWw3>xS<9Zb~A8JPk;|Ms7H^Jv?fGiJl`-j zHeH>rkByC-Iqwfq(6CxS^Ad%mg;zB*&AU64=w5EEW|q@1s%bCtRI;4$vR)2CoAvTu zf#00h;}!YMGl}%^Tk!h50e*WNt6MI5DS$N8ymIVNrM7s&hfGkXB@pHKzC#sJ2nc~c zoNe~bpBXy^5a%Xpr^^aVGPo>IB;e1@pRLsA%X&T)dp_%)M<+8>IQ-Ldj_V*-O#rSZ zW|AwZMxv2yq#Egq8QAy4vBc9!y2)3Q>B4D|s(6*ue-3)XnP#R|nVo7DXXhs;W{=T| zTC?}$?EHx^kUv9zO@NV6Z~9xv*5A%;FIP>qNhJG{sb`k1xhxfc750iF-m%j+-LGH=1jg91ZQ3x{JGkUx^IOfF> zx8hxThQCYd9)CTz;Z(T*R?G^y%RPEJsmEr{uhbWP2pbd{g6$7)Y7SH@70-}-Qk0@O zRD*D|!ejGiYLL}ReWDHlTo=6@bE)&ECTjMkPlYgmj@23XhQI!cs0byUt4uC}g&OLh z@0p4E@;bDC+*UnTo=x;m!GrF@S8B6Jz%t|&KBaOsLPGm#l#fU~~)ZfXs!+C!PKg~X7aG&YXI-}fU z6ym`2L@m}YM$7^XY4*|?la*RcROIQj0oA`z8D)euosfDZZywDECXUrpRNSG;-GJ*Vbb#*>b`lrrUM8*|eH*gCjHHpRD;WC%T!MtaUb4lW&E~SO|yp1H$R#((cPQxq}e2^{U8F zgwrJgt*K5Jt5*8k!QsqB=(}3xZzIugwuPSl6-4;fKGpE)R0}6NTcDJ4TtRmYFmj&* zHinb>q{d(Pr#eUV79go9J!Ufsvxerb+BJ>zOlk#++(^x2rc$EM);DQ40$tZ+V|}rk ze0&iW_saE(jV}Lo#onn~2MQW)5+Ah5`r}zfSZo9j!$S1>8!5l=e9MAhy!BEk1<_sr3!aOqGD;MWV@ZE z$%$$t3(n2^6@(OG=BrNfkXQp3yLj>x@rY^DwIUNn-LK3^T=XYMze`d_b-wOoH>4bi zoCs%;2xbz@FfvJxNqUpB6E$UI(hy9zf4+1E(E?d>-Y-eCksLW;^{h*XK=zq0A#}oy z&z_fTP@O)rI13wR8F&-*2?V^_wCBPSgH+)4CPO|xJ&SlXLFUL>6O*Fo`l{G7KHdV% z_&B2Neyi60@#FJn4oy$i$4m1kW{`)haBtok4=hUU-xYgYDg$DLW+U|>jRPL4=anW9 zc}pI-F}Y6A%v~moGhO@haH1qpJx*87*LDq$kDKr|K8`50SaA_^6(H}`hD&pNBA}>U zB~9ftVt!SP!^$9V0!S-+cDg31xMyU9F7_(>_m`YZLR8O`KR;(VnkZ6&v7YwcVS{)F;x`Zsf=iJ^sdn@~Hnta8c+gD}u$ezbaSC#Im_!T+~6#=a@ zv~Yk?mDVUK=+usK_U)P4JLRdIVo$qdB1T@#0HCJ5z_q{er}e z{`x=|M`&Gru;Jp@SC3lG{g!h&mh(_NXK&!7xA^S+(J`2!19QPqf)UY$c7uH$BsprTPHJh#xx6c)K29l-$4<$q}(C8c= zKkhG5bB)FE@x!RT2wX4XV`?ihnVmiX{XEa;J}uoCnmF=cEX^wcLqQ55m3qo_CTbLF zAw{+kkRFK&f)zPlN`tSX{#D#f=K1QrBUR|hv?+y3*P2%4+EVbre$-MZvqYy}>Rrze zTBPzX^*N#n)~hX?=kb%5}?EQ@7vKEU1I@-SFmS&S8hIsy1_rRcT|I>mWt<7v<_Qw9&cK{6|-|74|p_w4yIr|$DnoizvVZYeZeHodW!Q2xtk z*!ah2tAD>5JP`Kvm}}a4Ns)KQGwxuxnmrMm-$e#B2@#26F1ayTNcX`Er}$TRCiP4% zD}gU#!rykpo<0P>zGNYpOQn*{W9OSAAK|mg4z6qs2ZJ7VFP;DKw+``=?_iu8WnZ zcdLq1ORbffVQ6E-?I-;S70|7eoMQ`qHdfC1SUK)(o5UfmJ<>&;AfUnMC6S*X+$+h8 zNYK?o=%bQ#$yE0@lFR9(L24tJn#o}~^-yBr;Y^~QJAc$^o$7fF<|mVHAbwAxTBtK2 z1(R1#0|`w!)}=G02TYv;%Vvl!&a6IBorKhDO<{U!8gg^uyfHDQUEuq$=;O3TO=%ai z07Oi@OZ9v>RU0KVrQaOi*Gl73ypeirY#ffVr>EHyMGP06sCS0OHjC4+k*?@wnsN+p zoQ(0X-WOg|Iqybxj}}Yp(ZE0K#F28Z_^kVU8)AXvub57p>m3_oe4^f+8you^8P_CV zBr=juG%QldL59O%s*qgT9P6*xN0aKP@Na+zj3*p={2qwn_zvdTBs|8g@EDuD6g)=S zc#Nd+7{}}I9L8fL+jtCAYVa8M!eiuuZbH>)JVpv((}&aW)!is2`%ngESF#d47d+yh zsOK&umUC6OoaG$djxugJue39TMh=Bb+RMK)y^I>q|84k`#8^)wzf!FCuJoZMOk6Yp zuu)hUxG1h=oxK}e>GQ<9taERx`@EvQv-|okUn@U-)5|yOgB(!-)(+K&sF`xwK)nZ- zi;bR@jSb_7-kn_7uACY@@miX)P_d{O#jBCW2}_k*DO^lMZ{b;1edS$kG{RSxfen$R{> zx)PAJB+)-nr;BZk#OC!tmN>!83^ORCW zEP_9+^epcg-S#IH%Gt83UlujY}5cA_Vj zETmTP5Gf;>sSNM9P$OqhTMZGr86JWsI1l|6;W0LIm*ROVZ?}?GUlx)BskX^JD0bDH zsIIly_ftHuCSv+WbjzuCN)LyCCo*X9X~+!1U0b{(3I~>%Hxc48^;{!$0YclJMzf(r zxfNziBQeR9f<(Di{tLIXN?Jh}jK8DQp0+RB-gH7EV-H5?2cGky@#y#Ac2)62&Q_V3Ke4MAdH=LY}>u(No7f@Bb^l!sIYf+sQ+s zcMycrRRl2$_Un*Ph$z%v8jQ{MR{o?AFZ}E0A<{4GPl1S%tkEwtKu1)n%<_a&7KS~m zUBe8Y7(?^mWibs&`X2&GQku>EAF?z#(%kDYM~`JJTp(PwaMr>-gl9FYlOk_1MPi;} z*$}-#y~pBZ~|U`BRAGx^{i}`0IA1dRN9xkb>!75 zt+}eSzxD=AvjE31lb9J;&bz!Dd2jtYQ}7u*ema`0#6XHrQk{n`vhgBuI>|iZe{JLZ>29bYN-`iq^etagLX(YZ+nyW z`XL6JmR>EZidxAup{CUnb0AWH*_gOy$4n@)U3(d-PHZ4Ksow?>XrA!juA5CW=k%mG z%7%`ca5N-`lNJ%orH?DY1By<$bTd3R3lC};60LGGe}Ay{{x+q#!c9CjTiHZv1zT}e z(v)(u3C*UPaRn!IyO~=vA4nHA1KC99FX*LjF9iY(`268Rcl!Rs`DX4cOEZ4Of1lF4 zU$?Xp_8s4MFj^(`_YyVS?`B4|u9?*$E~~P#lLCmY!td4BPwHmP%Lfo{=BGSYmXQ&O z_~i{+C~OsQP+D)dzR^BI`X3~_5s{X&JS0*%ga^%YxnM@LXPe;^FJhx*R!3&^PDDtt zDTy0j&!v&U?QMqmq0|ohMk0v5)*F4PcbY*ZyAN`;&71-J+Gb7(Ceh3(g4J5Jn@MRc z7J>yqx{zitN>D(C9Fq+I1PO70HT-4Gl_)fkH4im1Gx_B#;zbJPTI2`ff?$zh*r&Mn z*2O&UN94$RS-vbZ5IfE${c(OXGyP{1{#*3hD7*^k6v7Fy^T$zC+7lwoxRnG+l(j*9 z-31n~80?v`LF(9pf--|LvuBJ;Ph%UnZ$yw_(EEQxTybXe*oJCOPh%VETNt=7_$ylj zyMrDW{9c=_vyEOzX`#N2+V|C8M2!!$)wu7hEEtBUb5?cc`8GWTwa%*6dQZLW*@(bU z^%K-)aJeVU*GSZNwbh_^rhjGo#RTQ;G061J6s@Eu8@vf}?+tQ)lHBdta#srAzGhuN z6RYcAbgAoS+Uoilh}KN~O5lUgH?yOGT3Mz>?}Pw1`d41;p+n#)F;j}aF_m!7(w`li zucC!SoHx~KAom#QV%kI%X=ZguIfV8F!N3BJ(HQ72;T%wjdRnNucDlOz%0*OwV%|Y^l`7?< zWSd2wadvv5v|o!g`^Te<#z%%tg*s}=Qb%=6ulgZI(s7eAhF{_cud(3b*8OqaMCP#X zK%-D|+`K4Ovv^_=F5amC*9S~G3vB)bl&yw62xfW}-w~z3&ezSnKk>L|QZw&WSUAIK zr7xh3PQ9Tz8OQHP?nhK$Z;N!*nwup11Zv7V{fd2sdCFic+Txl8Nj$D7L?v~fqu84Q z%PYN#ReNK%XuqoJXkpcVi*7Qk@K19K1s4OD=&uPT%2G0tk>xUW8)o9A*fN$c4q{mm z@bk?y`Z(XUE>?5@dzIBd@Zo*#6W^qxc1lfq9p2KePTMoDY!J<>XQfk-|v#i>Qd8F5P%% z{n~Voy{aacNk4zg1EW)PIWGa6dchlbCf2jtFj(qp42nbNH5XD%kO7|TMVv(7%D zj=E?j=V9Lrz0ac{$`cly%MpfJvrJ{oBQZr(Be0U=#f2TPdzv9&S;@bj{I3%W1|wMH zP0=)yA7~WE*D*sMgH$LLUaXs$3cN&5Bf1#_ zW5dVzicc!;2Xqtf(#%fIRR}JPT04Hyb{7Va7fsKAZ&Oc6}-bN=^=%CdatKqYUzp?&a~$#O9}UX zpu=9GiFzGV>9H{bkS_xhH&W;IB;LghS4m37)A&ECr=QlXHID3Qi{gZa=eTUW2os7; z#g`S*_HVHG>cW-9LxuY-%_M2s{@^|mcW~8qaceWAKrxC*D_n+`Gk(iW+9s;XM`Y&1J>N8StFCFt1WXG8_nF~ly4)Y*K1+#1cnCziI0IU&@qgU zwDC%+pDr6`B4Z|IF~Z=6%xWoE&uC^;l&#N%);#xOBpV+?GyXXG!-KQWVJ{e^Gj!JhUu}xCJePLmYwU zlJLB;@NXK~<q<<``@dE1Um1`fJyW=dNRH5*ye)x+>N;pyArR08 zEsd1YgRL}PI@YTFL8}nD;rU8VTvbh~Mf5;JftaiMS=o)kR#Q#GVNq+<6i#;3c7te@ zrFYb1wIyL|&<#$pw`;fr+W?mz6r3K$foR@{Lq6w#+^6bjhap zbXIlu@U8!C+=e$`YdU|jnLTvZf!E*d5XWerayQ|txiJvRj1h>mg@)0lx3tx}pHp&S z9Hy<6*;%K|d_v(~sZj58i>prVRJqNpYFAUi#rkps8OQ9+envr!W?uu!z#6Mmi!h2#{gG-`;DH*Y3YkLMs8`!` z-bQBjkyN^)(+Ph7u_{?D5lR!4lAL8zdKwBj-pYETHje2et0-mPkuPB(qqz?9%BsPQ;=Xm{J)6-fr z&P&vbeWXaBBoN|DU9hyd4aBWY5bDJ6PtV|#Yo^*OOtUG^5GgdKUg3?aM+Xl5XI>1e zbS`r0EHi9e+gMOB5onJSfEXwIqf9*DIfPiGTdeLrCZfP>)koh3dyBfCX(P!b!a}%K zIu&ANkBu2NRcx+iP8wqjieb=dBAjR*;9TLyf!&Cp(Knk+1B2FI;Jw+4Fj{K~MdbM~XX;1(~L}&ncVStgdw6z`XtaGgTlW)C3OMQAZc9q6jxn z2rNLvkZDD+|3x>AcQe`uaF1;l+D{>?mU2-qz%%=S^Xz2f&HD*=M_MQVsYMM!ehaV*Cz@ zUedCw<|!NVNjMi%eJ?z!{P}VZ98fR%FxhJSFw4lGtD)xySaQ#c-$jKk1HoXSd*K6S zft_;}*w{kN+H}**A^lHR_p;bhs8q2CW!gumw$3ur(QC8qL3Xy?xX+o}tN@c{D|+uO z)~n58lPl3pn{DOV@o@5KpEcO z!U4@HL#aW-0!h!BV}|%A30$&HA0|ibI1sFTBHQ$=Ju!>+IB?jIwpO$%Vox^D{VM6M zRBc2d&HTH79sv?lo7aM3+l{FI5)=}2SI+z!OOe@WQFxd)*2 z`JX4dr5jd>bm3I5C69nBl}TnG(Y1k8G&9e2kjv-`)E;WcklW0lO|LLXBRN41oE6Ff zRxcsIQ^v?*M8oQ3=j7TS;qDrF=YIX{~!Mg|KZO zXduzSz$Bn;b`tIh4|LU}Jb|={Kebsb1_refWOao5SUBF# zkF~^Rh9>$GBznUI8@qupYt#lxhk=+efhaCoSSymZ+-i{Q3z#-uyjCv+ll0o{5%*>7 z*~*=DJlC3zw$MJ;7XQ!HkobIQWA8lQ(daBl;5H13xze84>4PJt$aYRi=C9n z#3&<2Zz6{dYTfJ)dV3P-GVE~!o`KPjSrD$O3IXv>6>^1KU%oGIu%F~@+n+#n2bXEu zE=Rjs>LzHGc3KyqQN7KLaaDUr)|WnZIikh35NUKvhmIUPUUH(!H!G#=-LqR}4ZA(` z;(@>tg=@R9Ti-q9v3VK|Xon2*0#QrfG@hH<#i z((-ihivI5_`5)-kMUb)ze7}09L<*;OfIBp9a5ZnZ^rEi4=IBiux`)%1b=V*|ONWc` z3IzT(o0Nu;zoq?$;+Zu419}d23rqa-e@V9vg#S6>{(~xOxRG3=I!<9X3QRgUu@3rY zq*qzSim?KX*8Mdv-m9{TJiw@CMC%G0eZ{X$>9+E=JEfEK*W3`>a1ar+k6wdV%QLD|Xu^5TjtOjNK~3k+@3j*@#&*95sPQtlxGCx+|I!jfFCHDl=m% z+HnRj;}$%O9Wk9|!91t1(QXw#=>G}%ciq@3^7pf04>^8NTkDs$cL8!l|3+aR)0*kMh=ZyjVwx$;K{r6wK@2!XaKh^buLYnI!S4}F}aA2e9F!dUP z9D&{qaw*w9NgAAx*dVuot&twi9IcUVRH_Ak8-f~}zZ8OA&PA3swn1+s9O>P=bj_jt zcjWuUFkkCZ#jM?>CEj)))ZuCwgFD~c5L@?;I`|`(@8H-c|L+fL|8D@4|37u>=t&LL z-{>|}W9<(?77f*JY(f#PeN07vMYsRnr4qu2rYgb3RJXLPTj3!}<<_PWYvR>EknMj~ z0pifXt5hNHD{d8LX#m~9ReP9Q9J4AJ)?POR+Iv>x%n?yOa72VaZ;pt10!Ku}z!6ce zx6xb?CE3Dm-Zq0R?3>KYed%Is>v*&u0$*V9jgs=sg~1O#UbLIi@y%>bFHOh_kUas# zp3te*?ixBsFR*{C4YSYGWLS2N%IwB=b7L_ii+nbWlQ7)Zxv0JA#h&}ku~SJ~{@mUr zVn;^XdRoR7kzT>=AeOQpJu7z9- z3lsL!Nx1-GmvYwaPd*8Y$~V2(`?3t%z$ws1Ex)qJ>gBhf;50R+RE_;I^1y^6-{?VS z-cuh~S;uamo{OnRlbF-xRtD?q8#o*?9mFrX`g{4U%3J%5H!!)f@TtAcTWqm2s9Q1K zR^v2#N548aJ3k>^W$C5#Y@NHUY%aaH#NV{-9W%u;Yo6L8Yx^_xY+CB2O+gGAp!t$5 zVd>r9CF!7Gmu%|xqyA1pU)`V#F%#GRk+7)YjgE)Cq~w}&v4e11O#RO(>OboC^SYhV zOPt+Jcus-Zdft0WvnPzd)i~Q`7H2dkEB=G}(D>owdJ-35mZ;4lwPqA+4a*FmLL(9t z;uIi@dis)XrcwP3o|@@16Q0|w#%7Gg>S@O|caSm7cYme}aMXX{bv` z;@rX>h1u@THf5NGnCR3&uG(9;i9Zi*nY4=LZ5Pl(%KTbyhLSii?Y6)k;+p?k`Nr-b%sV702P7o94?yP|_ zbk$b6Q~K~h{$b?1-iRD=QU;MQuB2BIzDp=Dm-4XjW{E!%Od z$+k$a*A=pnOvA2>st~=Mlm<5Z)3eaWsvssU(p}nI4AtpRIhMx-x!{7b~9J4On!K?(W1sG zX&Qez&Ks(fdLyMfgA~P{n81y-^n`h*V0L38NMzAFKJE-5%#EqsOgKL|({es)XpZgM zNjV^hmw_)F=1IB#SrmgrI@@ER-Dl4Cjdowl?G4#dllS@#2McbUT1o38DA3}f}hk;uSwm+iY-47TF2SLPw}(;DBnr=5E^?WxVrRp{BpsVRBm zxvI4LmYa;jHVBq(+r7IaSvJt<1PG)qcANDDk+2SQw13)V>b&Cyxe~Ry88O|*BNQpG zKPu~?2ksla+vO48yHnZ~>RpD#9`4<9<4rg3_4eY}=ecBFdKq85JS^gYBX{3(yju}9 z+zm}uVg=kN4@Jcu{36jx^|Ac2%ua(3&V@3ps2h?&w=?R59JSIe1D>P~+{g$-Q35wy zTPZXcXPwI`CY!zcZrWoGWL#;yquwK>`^dt7d>UJ)=_%%>@Eh!qxR_e(&BJ z_r9`Z;CCNb>KpgH{FYlsc3#h_L##6+EB)u`D0#jvacu9cd(2z%r1nnN{i|v$FhCJ* z8oBBAaZqe@QVd-9r)N!knrCXaa;w{p$P1XGi`8PZhBAG34^DE2JHXe`O984EkS9DvO){h3iz8{LAHBaoV; z<>=)9m95&EP-2+8dgu1iA<;f|U(u>-A-%XSVxoo+iT2?hQ0Dcg7ID~Ddu2d@rcbiB z8xm=Av$-+%M(|M>@ginm2RkkCr{?eE6b(!J1ENA7 zBo8ND1QL)5|KF|H59@ZjZbqA01WMmD)F6rAS`(A02@4BbS2dv9hEG0h@%vX3kRiVW zc{5ZsD~CYLrf~?-sVN!ZQf(0vI?%|5J;y{vJn>X!JL~ylWPU;QEbyQO5Cij7t7;h- zC&hN^4ChAeZ+Nh)no}zrPEb%|{O{6D(8TLkgl~?BnIK`3gQ1K;Th;RaO1BnVZ3-~T zB`*CMRa!3r?Mp=Yb18(^X9kLe{=yX~O_gSntL=~S6L)ZRn1YqlrZg1{)6Jr$;hG`W z(kHu$0r1H1<2XU=Tw1A#_wS4}p1#-Q1;B8e)ovkKrv&B|P3qGApC0!8 zxcxuuN;QLwmf={hKhDP!$H+eh-k4fh?FzNVrSb8=J_S+0$ux^P%pxXm!39p7 z+qL1w*@;w2ZTAs)J1#gnrzMwq4Ts<8uu;k3RWk`ElU&Kibm9f}J;42;_0E~rn~A)U zJ}GVy?YL6%r0q8HDTS6f&^o)^w9O{Ut-7&po~+3LGAyh_Rb7kL)rhT zZufB;UT3>+{eM!#if)m{xSOKb**BO<(6oWZs*dY35u-MabcTqs9P`LNVtg)99& z4Wb=<2}RP7So8$sijQ;ez;jI+DWE~EBuqXLuC0NS4||{sdCZLOI2!p z!Y_Wp-kCGCDIBITMp@K_#)Iel5Ac<`V+!}f6tWTnZlxl(KWSt6 zj8zQx1b`{5$pj3by|-5?YCfCGk14E=T%HgY1W$S)|}zS`Qp7QU-Av)xIg1& zw~fqfdN;|{_J=af&1}1P2nll~&2~(-{b3KsQ4uJ^v>h{A5M;J1_&-SUHeKw$XeasG z1nU>+wtWq#|6+Hj$Bl*@E8IrnzKNlNCKry$gv{>*7z_$SBSF}0$TymzS8f};JL93- zps}s&-3HCCx7s9^gqdK_w6!TdXu?^RGEEPy)*a-kjdF`~v-JcXAXqJ7S#TG`8M0iL zXnM^8PV*x7JQ?R5-f_CT!Owj=udDW=+_z>g@NAx3Vq9;~;tsCY?DW1z$&HJ!n~j|h z68Af5v6Cys`icU|YpE7PmfB1*M*{Y@i>Z~Yq}-^naciSSdB@6Y6)HUbf(jMEWdDB( zSMYg<-9)tgk;)B~!#spT#lt@d`8>nSg)E2K-CTxqQa3w9o5jAQij;Zymoq zrhZ@F>-VoseyTobzzQQ(dIJEkqF1;1NundQiO zn7c39>;G$R;VO_NdvTZ1q^a!7AxLcF4*jsSDa=Xr?7oC38Z8vG`YL;78IH%{5I3VG zUaFqN)d1p?m!4*S5}RM_Xq_3vdt2N~fN(6}(XPz2awlb@>Sa8U>RKP*}*dPTG$CM5&U0l>0nkA4h8+9bKy`S{HHRmmQQgb++ zrBc6hc2)zz8qaiK8np{b(SoowL0^4MO%P4CCZv}(wpBV<4P1q1QI*wrDrpOx{6>f7 zxN)C$wKI|zALhoY7zu8#QL|v1!B|GfP(rxU+dj&}6sxApJXJZ!RXf0qZTLw87)lW) zlo2MBG!u%PM&TwYnog)O%kri=q4v3p(B*}Jg@G23^ZrXCOfyJpPQef0A}bSaR zP#ZS`HCj1;)+r}=a0#15mM~nxRqov7!gMrxyHS;Qh%32dX@Ew@d&|VX}pgY(`&*#LIcE0{c?2U}0F@im{e^ z$8J#*wm-zX0>)Y?-uB^b41Ye2UQTU$d!xvAR;%Uw!fcTGSHrK@`0BG-WEjgbOH}Wu*X{CqW_1qg1x#*=l`+t&8EwAW>gL*!H%}SX7QQ(X=CbCu<3SCF zyd0i2K7{!jPOgLFIrSLSq;YrKS@ycfc+82#1$myjW!mnvPFFvmN$$ z;I>S*X6!iqIz8UZImc%H4Z_j~Ev7zi=LQr`PCNgBZW1)z_CJ$=Esi!1*gUEAWIG6; z=I>Dsmd!q%@PYb(oiyryTA5~0HJvq?vYDNlX4wsAMp73ZITRZjHYzljwrfNl=Ygrj z90v6zw?WZl?Uk`vQMO=`JEfQnpPj3#Rto2)%FUrlt*zM`GmP)`AvhvF;u|7}%!4;k zGheM-(^TxWF@iW4D{r;6m43^?kr9K{S>o=Gm4po8hW0mQ zPvy%rG-Tm!q=;sJxHS2o4xi|(g=}1otx=1XNtN0d{^?o7>>!t8FoTIdTx)QXe#*7{ zW>SUB$14Q%4k+mTgR%10MNn`?O!!EEYOmU}VpQ8Gw7}>rb(B>sdn?EwEnk?NcNy$i zNfq~+Nlw~V{MvMSitHjfEg|YzPt~emtP>dEV6J1Qp%#PFP$4paZ4^@XK(>h-|Up<{|e zwXsZhv~`cESVzW~Rm&6(4`o*3G|AQawH(dWT1n#+DAUYCk~nX{DeiTEL06@6Pgg^U zSZ0sxoG>F2>@c3y@}lAlBaT%n(GgWG)wKDVZaar~RIhsbtY+T|Q>8qkt5wWOwz9r(pnULEUh`QNZ<8MmJ}9W5aFVH3^d zyPw5q>=~*f)0Ud4pOB8Vi*nqh;M zRQ!+Y)sN^FEu#8QD_GJkGJD{gX!3EMb}ftcL{4pGnRU}*YT(akEbA+|Hj$s&KF)=a z9%dlT`7p#ORu`wlL<@7ZwI_@;IT^sk%Q+5OTgO``#iaemc;i}F)l)ZCS})!dqhy2e zvb&z!5|z7yPc?J+a*hq7r&E1r(&EQdhn5(Ubx<{Mw`w%MR*m%Hf@MaJ5 zE~mVRy6ZA{*o-FWGjTSY(eTl%z6nWsH|b61)sE5NZ;t^Zz6od~c>la6ZbOW2;MZjE zuC+?+Cddf-QA@)f2$!I7YqO1ZBhWZ6mce|^#A+2VZL95URcX~ny*?D?R5my5jxZ}khWmkt%_+J$jQ;M#k(D5q1IDw13TVU zWyK(L)>s_D2U|5(efv_KHSW$DwAHx0y2e&tCvJe`P##>%UbqLl zqqNx?L8$_B`?RbALW=Ye)jqN{LKD*7T>r=PUVv-yK(;g$T5lK}90)|kIye)3{Sm>z z>3kg=#K+<|6?>wk9q~R~ZA;L$0wJYDq?q_H0Z|#LCQvVeV@OGFk(v=*4@$=HH0>3Z zg8Y4WMP;{uIgMg(0E8J%ADNAfIa-dKN@;nLrAG|eI0!HnudOz`#c0dD}dV5lSVizI)flk4Em^FebnD_ zU+)ZOdiA~*ee-@jm2?vobe1eO7k^Me>*iptwlUJO3;G`3mor%39kS1x&W?Lj=U8n~ zPj(}L%JXN{lQLYA-H=;0aSrD7?Do}bSZUhUL2z15Qg0*hwapyC%8DGyuIsuiX>x&0 z(KajYr%ug2wxwXnfH_4C2Ob?lgQ2hCt2Moag!W`4{A1Q;>c5Q#MAX5=GsVq_5V=B{ zH5vWpvGU(wJp8ITO(fBb2BsyhU1FmGVUxOnPT-J*DSXC9Hgj`oAmqX|}?T zqQY(EC|*;%m7@(iQhUk`&I-%U7n8Pu4#p8Sjs@k{@!lMXKb?;46MK-@r&F%@w<$$O z9ll1~AF2*&kG6Q3Ug7!I;vZGUIo<9M+T5vIN0I-`TWwot6{(muvZ{uwLe_ARX__nx zU%=ZbjDC@~zJS!Vtl#5>PG$;0tnjLmA`q*ht|S0VY0i_ANGA)g24G-o1=>cuC)O(U zcX{!ZSg8s>-%<^r2iJmSlbruHR+7SPoyUhQW=O1xP_@MXCmrbC%8QO}YWC=GDeX_Z z^&esd+(m|~3gEr#Dyb_&9KFbd?jImI=+^>Qw~~rsNqcYk$5>H!e`7@*BDsH9x677s zz&{Jz*E1x(kIdUMz)Sa%#!|nm#yyc zcy$lQt4pVAAvERhM*;!0HP6`-T(CK^OtCeXH;!uwng;vnnkI7<3U*urjPZh=hXrXH zcSrQpKE|8tg2w19X*H#wrifC?Y*S~6Y-38GL9e@PgRUVxt~MO}x5gU;)5BCRS`dRi zWcFshz$EIk{4|rZ{%ce9x9z>egOe|03x(v_rcuX|Zj%-i934^G$>tJK8Ge zgl_!YOQ;W_Xso*{xEsX!4Pu8JhSavHGGcBVyfn4?GD2LtI#V5{Ke_{|1;+t|`=d)x9} zFEdzQbKNmJuPZ8hGEH9LAJu3vdZPqDX{JKXrjn6}v?r`hVlwUa$8#6~t~oPHSRaS) z9s*xNV-nIu&wHHI0e#mLjVXi471=SZ3cG3Z=ZSYatAn-VUsHrlruxMH1>HIj>OtaO zCeS$(2Riqt;Hu6);x?R*9 zX6haMm=F?fT78cqY;0Rsv^T$52+wPKr7CB|LvNP0c0wUc*0$WtC+(A_qnVBkh)R39 zyM?{=NPBH;-SO2iC~fId4J{aVQHTqZ{09Yjf!cqAo@^PjRfIhmNBMf*4yzoIjzUU{ zmi){3ieG!oijqC|G0RvjHV5uJcJRoN?n70W8}+Z_2n0VFN&-QhvoTSdoSyc7TkScb zTQ|f~lkbXwY-4+gBi+$=&2s(6$d4@|5*E9bC+OaDnew{hal|U@yEm7;Yjdp zJb)Mh(xR>cIXF~jXB`tI85l}=L2PnHddakx3y>Nmc0i=_qb;Zmr<%FZ`TF!^g+pxT z&z$$CPoAnT^*r*Z|7i8GM{6(pYO-YfITNi=zM0~{zqB^KMfBZYYXCf=HtM5LX(W2y z3EFRR9JG4(vg6=H4BT6~RKW&&uB5Tj9!6DBVn2!WadTqlFhtIl!%_5{=v;)fv7Now0LY z&I*^LdoxXW6wXe^`8m}FJ1In>RzXI!IL2iLdh(BiK}u3w;f3UTQVY1fFwkR*k*Tm8 zf)M%|5;xO4$NIz|P`pj16nwdM80X<18%dO?d7yTVa3*dfkG!@Ann(lRi}+2`z+sSEoR(=4YLei~t6 zU|dO7j){*3f;pmT_S#@!Apz^{(^z|aHJlMFs~U_mleQa~ zV4R_YuyMxPLwuYq?77THyUy}q^FO3I9Is*k+~{k|$3`Cv0HDEvf&iqa@b9?~LBGy- zYYxB<0~tq_U)B!7XCHt6BK7(Hus;4G)nsqeyD9;@884{XQ6KqD8e(`I1|qjgi>Xq%{1MI3*kL#y0o z`~@Of`@b$Xo22GXbTibqN#xUN-2hpIM*6|lug$AlX!FS0*zm1j!;eJRAaAIOSsNR! zrp&cju~1jaxGXd`-rqW`wuKwy9{uTAm*IvGr5^Qmve_H^ysM4VoA~q#s=6pP+QKVi zA4KKJQ>{UMQb-v72{A;1tl$O@aQ?PV!i1rYPI6FLZi)TW>>$VoOY75o%1uV6>uqnwKCrKj5DD&Z;RWy0=v6{i)>q6?7Zp8 zs6)~2X7yN0P4GLhF795c=?X@lUgefS2oh7|v|4LV*5oHi@_7}YA#duNL0@q%$N(5H zPZtp?woOrLysmDjZ>}NMMEO6A!DCB%3Eh#M^sTve7Xd?Z@kWwp>@XdvNkT`pGU=2v zDiG5)xd$61|A`OXVbz9IGPOh>Vmw3(=~}4P0(OL2f2@iZ$VS_`bi8xqD%_4sulQ@| znA*T3^sxhG+}ySn()>jXNTEaWuoQje20Ui`kkk8mRAEA9osiMSDH3p3J! zO7JJ^n8-ZnEP=M}5=9by!V8wDkF!}LoW+<&VOg&2C!AX@n6(<)MwWZ316~^XR#?WV zE9O5vbUL~Y(I0#(vj+|8CEHvl*yizXtg~J4pYp#s_vm+yDA(#~Xuzf8p;-)% zdIz4PTX(6aTxWier|@9AZmjBa=qd55SwSZd!IwB^^T6CUD_VAlZ(cJxH2dE zuA=8HoxJjoVMmLezm*q%9UHqF*#W1xwa4!DwD#E<8n3`2FpIyyve-0ZYK%^!I=Ar_ zV$nr8tcTx6+4QK5Q`1tXPG{J}wUu$`)Jdj_a8{^{M&}V-EO45T`coQ5gjzPgm8E#n z@;rypr!Qod^VMCvVFOxihF=}{`~;&pO2KwGXhJnpFFu*n;fjHK=l6>L2+ARU9R{tk zFbXK36~*5>PQ&p zkJbkX?;z|p-Mz8Cp6~!+J3`u@tq(!p*evJ2J7_O3K1~_^yV;!}DvCE>89g@g^kUCw zGyTAQ$ISR_X;bKdeG+?gIu>V7ab{%x^aILo zXmV=m$g%tG^yW`goX)A%T(7vh&S8&J52H2{6~ru_pyVJv+&BNd5d#r*m6^=(D7{O$BQ7IRkg+GTHE`0pU??R#&ppZm6vUR7 zp`?RG9Z?{%;h4i{G0A3e0GcX)9NMiPK8yEayD@htG$)TAwcSZs%&Tp4Fg#V@t5xbL z0s5=?k?MRMTRQ*k1cNCU<2vchPt1r8V7C~M20Z4sLQcf{3|W|-C{!2-TyEEr4dC~Z zX*27wt9?&b$!nR7MihOx=9v5c( z+*e4k=IJh8424<)EhrfJ#F_T11SR2u6)U-&>68r^kvXXUGTPo%So&5HpNy4uWd~MB zT9PAxqvlg%m91+>TUV@D&0o=2VSVn4YO3|lU+Sra^F|84jkuXu4OX?+oys=)^eXcM zb(sHix~UbuGKyv18c^?}@eip48&Ii2uM7};#kK)aZ^eZg5F0!&x3cb7hcB5*%XO@m z;#a4!q^Hs+)2xcJQ2^cpjE5h%7ZsPYAZ1QwXWjwk@N*IqPiOq23)eSt<+{W`*PpF%lasqLz9_Ch6ckCoSk-{Qh%T{0GU^?b6Z76s93^ele?60V! zgx%qvo+IKESijhsl~@*m$aauvFMXLcUEgas;?u5v`s;i_k|WB`rp^B z+z8<{%1lek(KVqCGuh0kl`sew1=V&$Z>lKXg+;wJR@6sTl(G*0M1La*=w1SzjunUI zUeM+uXsy4sjvNH%D&AOTKX#Njc(@f_7-w6ey3ku>qzh(Qzp#sarW|2TRqv-TRyJht zZEf^bx?9zjWwx(z00}iJC7S8Du=Lbi-3Bo`NO0!?tZ1fzwY{1C2l?bX)HX*(S)^f0CJq%R?teg za<^D{7`{1M-3PZX9=wOKbxtxLN4vnUduc}Fl$T-5W?0hBHi}bDk#SDq^mp`*{{tk);gNFzaf?rrF-6hQrcfkW_yU`>1e<2<3BGq8V+XEz2UK{T^VQ`57vtVOjr zeWM;W9&BW6G9XJB__%WI7zFPi?q>wUA##%zM!b9>xt&2Ehtj^@x2^R_AdVpOeFO|L zZUDF=y|%^%0TT}l)kgvtX%H~iOJ(KHz>I0H8V7QDXe-U1%XScvbr+zR5fZYJ+=Al0 z)oZ$ZF@!Lym6}weH-KS-K@sH1FxhVFHvf)BfT|MQVopm;_%bo<6MEm*6@G5 ze~095sr5U_0)u`yzrCHfy`4mVq)u>aYXhuvOI~FoKcZDwi4aE5pG|HS!n`hj65?N~ zD(cq+iuam)U9sq5Balm8}G_Ufhve6s)D%A!S&?8!Lo zALhj$C<~F{(1_eu>iIz;EIM!nO2DF~%tsWHHo-?(p zHGEJ^*|Dr_`fw`w6ccM2wV6`_GJ`<>bogQJ4lPY){Wrp}g^jfNq&eWUM`7gB=1^G{ z#yDlzr8m*urR$MEqg zaD6N<$mAvSOa^ZRVeOtxFQt)ukjtIPy9R2Q4<07;AE!RXJNci|ld)1(<+YZ)`oX@y z;=xH8xCQ7^wbiOD8r@=31vxQ(GNu-0il|5Kq9e5y(g9qEI1rvJwyqf%Of?>7kJc3% z>`WKFf`4iM4&~*^Aq>+1aao-~5`MeDTb3-^@-xiLX_?pnVKDd(>Sl~iGd(wP2CHrM zB%&`96G-pBLvKx0W)_Ra`bc@&OrNTpbLNQMZJvHc@Rc$%Mp+CcWNWukP?Z&jP{PS@ z;seF&IISg0w{5EtpsUtRYd>xCsC;n)=s~A}VmRVJ!Ar}%T|=fOx3I>C-LVy=!Y@krJXw zWwvV@btV!FGeZlkxrdct2ZhkNVUG-!0wy0VT}bnr$5aEaRKNYr*}1$>iWssj=r8)Qwk zI?%}bXN4r}J(8yro}Fd*!lTeJXkA^B95XSB3l`UH>1>BlJf;2!HDl=ubpTty ziy68Q3dc0fQ8P!|cM?Po7?CY!J1B{Rb8p#_ZDO+Uogr(mH#i$>Yja$3&VgE^zL^za ztaVid{|MzC5!kOLp%Z}}F%$S@+S7+1SLDPmC-x%H>5H~bkU*zN!{)M$ynTM1fEEO- zL$u@js59yT(uMx#c-87e|6>Z?qTAED*%&fabH_mXQQnTLM{gzn&K{M5L+bue zvEh^&Ol4`7+~{S!$w;B0T-N55g)Gm$O3u7fXyT-@-6pjScc^E}^6rfU%*qZ1IIyxy zo-ajKcIj|`5Oxsg1?})+R>%W3Sp%ArDsWkYwAskvJx&a64*zjlA0b=v~xov&f!it;5?5NGT#fYz2G^F$qj z(pZu27T7+loAKxdMPn~IKq;o;{c4Px9kmDDF%(#gZCwSxh?jVqdbgF8JsBJKd0srJ z{6w>m4LJnYSKQjzE)n3_vAxYEByt5C2?1?ruQ@BtWhAr2gZN=owdt1B2NHwgT6C07 zFSL0!tTX9oMD3H#ZVj_Lvz=`_h)st!Y%(7Z449P{jpk*rlM= z;)nRRXi6^;Ko~H=S*x&eDRwbsqC!ertRxo5ugxC8A=rkj=gY5=|B&jWa^x&%Y1``N zKRdfF0w}eYm~EIx6!Ol;v$0lEYiUZ5G4B^tvy?C9+L_Mvthr&xRNIcOm@c+k4{9*{ zu&OUMP?rB9==9+gT^sQ%%kMu=X5Sm410x|<$gv-5fwVmyAS2NUR;Vg@LbmcMdZK8 zi=R+NqI96P+~4E(irBV=a6vR8HX{UJU4sp{EI#5}4`y#j%ib%Bg~vBZU`PVDEinE$ zpFnqv85eKvRunTWpN_`*xPfiF+Ko!o-e{+^4#)4FUs0{y=yp!XVYz>?v)+0i^~nzr zP`#04?9fWa3OX8OAlu7G3$8)(pnpvMLF$2B-cF0OD409xv@E&hj8-~K)XTF1B^f3u z3Z_Lp(K$&qrr$}C-!7PRdjkV*Y6p9xm^3jk(gB?Cp|9^H6DfsbkDW5&klhs=$pJ7sL0lJ?fH zonm=^_HI_N)Cpxy=(Ue8+YvYZraD4ZbUd{9VkeHu7)?HXC8H17hByD0|6l1K)_yP3 zK{0XkT$c{YckQ5i)G1Lf`M;##V}nN>gx1NpoqdA2h=ddI zg^j)-=lVe-_dI=S@8rIpXBQN-B*tS@4J6096C5SsQC`@#;b)_Vn|)^ko=+>4u}|8`lVSN)0&yr| z3Zr4Izn;m&xsPuer{AZVUKXc!$2+&_p4#h6kh>j+@My87&udhE%QYpD$<4&b!P>*x?$fKTbnJn*AOMbE`LR zzVx0rg&q!Gyh_aBL-Q_ zzY}@6W0z(Eu(5knI#uh}Rp+D=b=R^OKcwmeM0;ar@z1h1`Paz*<@#RT0vYS|6*HW@ zbOqsZVQ%7FjWfAVH*;0<{ld{KsY}vLU)sUV8Cs{EtY2Vp*{N%~K}IDagW7`4vTE&9<#vIK1dKN(7$_ zXT#F2QHF)Xcz%|7Vf5NeIm^Yv6LZtE=iA?Cx^Lzls>l~rls+t3JaoBlx^{T_T*bS8 zx;}Zz>TWfn{$aAKl&tqiePVWc^3Li>Ea3%%&Q#(q%IjZ`Zx??SwiyHLX`RGkX{SH@ z%rno#a#XF#Ls44J7oR*`t<-9k_|iV!#u7iS#69=p>$O^_B)=vncqzc7k;0?0Bf*+?W6P>A(H;*Pgil)vhmST*CivVG}J5Z0T1Kh1XZ7 z7ZzpMDG<<`s+{YQ0|(~MF@e~}?Y9V$m%u_G$=;dy)0Ky&y?Q&mFKHerXC8h%+23H< zx4zt@S4DtYKQ`%4pIOzHmozt(`-Fe1&?9WU)E4FbFo}8G!P>tvTb~fNhN)gms^$P@ zd&=j*0C&4|_@$B(t_u=AP&qqoSl%t=OO&!VNZINdK`B=7PNgc4%9&j&qv=5+M=!18 zja%waWUH!%n0dez8+MnZsF34Jz*clXB?Mx5p+Yf^m6r`PDbS@zX~>`sx^HCHDvEPEBLq zYS2){VrismEEkm5;l-sTmqg$oiT}?kCyR0VJr4!#Ch}`xay+1tfPgV}h&w8#l#KkJ?|4*eEiqafE>reF9X3o8RiXLeiAi*Vmh$9J?0EBE zz3wMI5r?Gmi$Senn$6sMhejbcqRcvMfX)ooO_cJ{p4KjC>1PgeVc zH~?{S+P5SXOo}W1Po`LY5*}kxiQ<3aJMQ4BX|fL)!AiOU(}n@4?WSn156+uERGAEH zUq?|)2@hi4K<`s6KT2G)XFhOt9zP1y>TkN`6h(es6;{zyOX25LtxYli8qZ#}PpGDTP;6>i;%(E?{yU)t#T7>FMe2>FH^W9+n^AMt&>SST?o+VH?S^ zDY_8tt|`F zp3O9!J;+BCDYDt>NyHN7etYO}qSj@D-!DN8=PNF%POO|+^?d__~avDgvppo|CIvTI>Oe`X;EUo+^8gu zF*TxH;ojUY^}Gme|KR?VNKD)NNCht|cr!9`>v^s^c&_fJF_e^jNlJEGT7TctMzz5w z-3oT?p{KkMek zeGYpR)bR(G>u31;TFc*Y-M7$&GSN>1)xUbkse(eXzu642Us+mP^_ z=JFZl@~~KGRGanlTE&I3h9X7n8&PaY;4dY0HgQ2Ac#aDA9PlDw%+)B>NZ6?VK2c6M z)L3+eO9zQ|0gc3J(Rvr!hg-&?YGYR+CYo#~^ri+YmYk`Ftb=)!$n-a*A?3j&*S#dS z7NGYD6NgG!-I`M$FZrvNJfNFzK^_}*!mKgP0;4pVg>!i4Y-cbE9g{N)+Z9$GZMw+F z_b6Q}{05XBzwP>&u?YUfSU9fPC)v_E;}%*Dr2JMz5-A%M{~_nzgZ`Y(PiWo60|R25 zezsfYm)$MOsad)*L~Dv$)C~%#MM<+ED!fW|S^aXSC|VOOXbOx8AFYe_6GKe(v^?!d zu`Sxv4rysOnG{n_mx$BvUv-O))+e9T1@5mT!d#U#DOKkh^Q2xDGx}KXWwER1p**J+ zIFV~UGr5y&Vsv)5a^naqrwrQuAmNaWANDNz`8`K#14__MD6x7(=iNLdgr59Mho}Qa zg=k@*4$+Lnl;u-SlF6S${1u4Grw~cUk6zSnrTEod?krImX4|dV$E`D)L}~U|Yssf+#q;37ON_s> zA`-tN+P$Ma@p*8s(_yO-%k$1|z174U$(1p|g`<3!jo~NUSoJcZ83kJDcwdo}PAMra z>lgNaL*X#V#AlGDxK3JTmh@?qnUkHd8^Mq&=e=$)smT>hxF27R_Hb7@GN6pP#D$_R zxP&)`p$w(Jr_Ha(=9f+V|8z5+QOTvG`M0OkznMs7Q*Cz~ ze3(>MhRjn-S~ZefNvlRAgdJ56XJxOul>xh-IJmWb6ie@w0olxJ1*|_Ct|Z=^({Dt5 z-+(6D{#t@tPS&2-$>&${Dl?MD^sGkd&GF(6wv3M7Ual9Tmn)f$*T)ZczSzp^_G(BQSoLhMvmbR!`wEeCpCl9%z3##+lz2Q*2 zoi#hy*BVRm2IF>4vchr&Nlh59upVmn|6%VL48t1c)k=HVsd)xp5L0kn=H}xVs8x(( zNGIwyW%rLj7LG{wZiS#FW77wm*Zu)%JA&1`_<2R?=}?0a-MCyV76WmS$hiH%85 zS<1v^T1xBG5-sJUi?`t@ycxjxw7z0#LE+MnXa}$KrDS8Nb#W;(Qwy3cyO6O@;M9b@ z(h#MsN5Y&hZA-3{Q>ECM#YBzKTU30?h44@2e)?YFCc(4Gu>`)$5Ch#Bg@R467Yv}M=`>;gUJ#q>*@_Cryy`a5c(vK+lziofNl|9UX##-lGYl6ZBcu@ii%J+5X|8FZT}eQJf1k1 zZmrfj3(}Wo2;Cj-NPo!Ee^_N_n}&C#wnnMtqSSm^x3$)&Z$_ipUr9ffR4+`5BONJb zEXCioJgq&dZ4^Xl{p!7mmnWXiPFcwxl_$Mp*3bGc)#zE@^h0~@)c84#X7$`?{M=~! zIUC^)?{>2k?|^QZf^Z84%qB&lK6CTtHl1g-!Ocya=5~j-G3GFEiy93=@8=-$KG zN4R0hTI&c1vNqYhg*j|96?TK&k8$_)T*F`^_yIwC=?Z7YTOZ);NrA@JCgRgdTy7rH zS!sCMxsqZnnp=4?=kqeG;X_RC%=cOTklSfL0 znTlE7nZ+Gfv=NJ(30rb)-eYX%0VVJj+VdScaqbLq;*5BAgOjco*JO#2(85eo=Lgfq zS&3(1lTUM!^ri7N-^2MN3zTqy;Ev0u_cU-^I&Gh;Y2Kk)->vaoj~e%83iMg!CrFEp z1P^f5&Uc$qr6oX7uf;D?HmT9Uds5%AlN2J2elEVzb)qnU!x&>zN4NLJG0YlSXPfPbrSPespC> z_M}_7QW*?>tCc@G%EulpXc%Nlfm3X#WSR`wvF*_pEN{7`u~02)kXrQ1I4+9Hpm?Bq zq**+S>{Oer%V@h&Tv}|@z0Rq+r5Mbp?j%5bQ|Sb!Q+w7uTI0Jyx3nRXw&_T5;~An@ zld~2$#5L4Q&Smzexci(S96DSM>TK0B~e!sT$^dmYAS-TZVVcUA#cF zHtCS7&p!dHSK7|jNGZNXsTnf5Jv&wQTEEtXDX@?DCfSy&dD{BK&S)%63s_*+2x#a8(?k9FqR|O??)sxpx9Vs5?{=##C98u~HJ#Fs(|VP(Hj&LlN|_4lsZ-(V zju{y^o;emA=t!CxBD|f%Hwe^9)dFo;EYl#>51qZbeLAxVi5Jq0oT=PMsb{oiB>Q!5;yGkZ=2|?Snt78!tp3%-U-ebhm$WZ(8NG=zMqdM>b>Ghi!yx{|Mq8c{L( zI2NWcfS?oTX8ttvxPB@M*n}3+l4MfN1*~CWt0swcLNzCp?Ia}S?gy7ZT1c6i_QIGL zLuO5f1(U78qk}DZ4-+X4;YIiua}|;hCo;yS#S(s`cWICZDTbNmftu~<)O0#UTQoVR zJ15lV{{>I_l{i-S7L%(^FlkqSl|3!`hm<|nor0aYCyeghQ46(JMTK)>jtCLcLvGiv zxl_@-7|quH|*{ zJG$~bO>)s6=P{k4sfNj6Ie>tIcp`q0hIeIvVW5W&=xs(i-nu4!D_umyW-UwprM#1$ zRr{klk;YKEJ=5MHZ%!{Lbul}A}Sf=o;lC@$A*&L4D6Nf0fZaG|Av?IP@W zsB7p;mBlUR9STrw8u;yGl854voVf0w_PDVD8gt_Ma2pO^Di$NB+QFp<)tcBfLWQCM zuXPft@?$CrJ!h@Wq)?@c6eEN*?T?(03`` zt0;0SEbhn+=Eee z{aN;OrMX`a_q6I`s}j&8o~5coc1%|@rEGQB&U4j~lKNE}a3Qp1N~3lPq3V3G zBEBwdbvZav#D0yb@fiv8*-WiI(+D&fuAAeGcP=Tm%F+}!HJ+)rWDi>`D^Y1E^}Kll zZxtIeQdCFjvVUT&Dh0E2`tsu;yU{5{n>5w(6?3iDVspzy7gZY5&GCiWbkJxvW?JLZ zjfIP<^-W97i!}A#m<`H{b4MHrz`JU4;=*iZ zYN=(zGM~$Z@{x|59tW>vbDJ~vq z%{A)GS5W@ND~qkxT^kr@Zn%3~UwzkRl>6KoZ<|`{%2~zpcGc=j_ZD}lfCJVH7WbSN z#q{sIYeV~y4J32ohq9TQG-~ZE3Z#bep>l1Wn%51R_#jVmzga!6sV}J=VgjX2M4B)0 zrIyVcs+H}5$w@C5{}aCbxQ`z9&yHgpYT9llEzT<5wdvx^E-Y&1<1&s0mtTJQg++nB zFq_#uP45u>aZamL%jj#~BREbIA(0YIgxNk}K#0hh3UmIi|0Fy~&|&MQ%>os^x-b2yJ0h`H25G=eJ!yW3lje zv6aN~_}*%3DX7PDc4|Vi^G6ovignZpU4#LFNJ8Xq8O*LxV$#Xl4OJS z{sGgS`64D2XZgBLC*

    hM|&k)azKMzMf*&b#Gswij@6Q@LKD}W!0f7VtZ6MP1^56 zR!u)tVp@;b7H+Jd%~ges6n?Dx&Oz!=i0O?HtRk$?+a*tjvdCxAN4VV$o#VZH$0v3R zp;iFI)*t7wK)6={CM!%~KPI_8Vav?8g1TM;p(cqnRI)f+d2JNCdG)Lu0zK{SGVE3N ze9W)4$DP{8l(H=M4 zm?+XyD0Hj$wF||$Rg=rPfo%WsNL24m&d`hFKk7QIpVjv@I^pw>caKRBlZdxjmS(c$ zSm@Jh;%hqkd*se(F7m;w!S-ceY1YlHAA9xwjBxNYRYB%9?4=-jAW{s zl&i9xg)5_m-fE5+oSJP=)>Vxl8tRw<*5$#D+&RugwBT-n zg91Mg&`Ni)0oJ4h6jLcRw5Gl!S5)cz?kc^oEdZ7M;1-+L<1gV2_EC_GXU1j!Px-JGk`rg>Cj|CYBV69 zCs*1%rMqw7D|lXG|5F*pV3i^h=S~Q>&dJWvzRXs-3TPs zt$dDBweqo^Y&1)e<8O;6KtWE zVA~XG1Z!k!Qv*h(_8rgtaF3eHd*Uk@gL{>w(Hj+l{x2H3Afqmyzcc9=Ow!K0`H|wNYLuk{g2n`6O5#~ zG%8d8KYP)*PJFlV%1F8hPE+fV$ffQ4)Vb)~3tMzY){X*95S*D{(ka*Nf|c$j-SQo1 z*ng-NV1L(}W#W9BEa&w0KD8uC3~E)lit13Uqf+0!w7^PaSy@S};g9kD>fXj>HAx6 zzFP6K`f;l{k+IiKx8rAjz?jdb03so7F1pbBLTdjXc%cy?Y*W%m_NS@j@+l{I@wBoS z|8dUeTWQkdt@R+gtIt81tp3L5DiQpp?w@eqrxo2899AYolxqIVr}ezLQ?cCpb{?^} z>m$7AY<{0movX}I_PfcD6LF0N-A#AAcwNtnCnhwdFfq|ZK)et_wwG?uiEQuL0HYv} z0+Ke}xQuJ-`v@5yw#*FJmPwlbGMDYHK5hN2Z4B6b-A&*`qm5tHNB36TA-#E+tW*5v z$XVN`9+!QUTum!Odp?2eLtyp^b)7^!uh|}dp>9_kVQ|Y_TgE%O`L;)6`!r!X}1|G!>h@<$*Kk>uwJSc zZ)j6r3giA)^AA?(Md05My!)Y#^XX1`u~ZwFH+_i@dEP2kmT3Dc+CZUa%f@ zp8eS@j&tND5tpIdJ^v9>c~TG#HnsIgHB43Sot`f*gz1Az4e4^H=0glyrA=(gXe3Nk zWRYDC!XfD_r=^MwGiB}n7&O&r!>m0K;NKz4XgkPieO@~lg;_gwm(yk+TWcN&lZ*39 zP24&!ER@64oYY5ErLLrEjf%3O^#F5Wa=98b!huG;8VbP^;B2In!7Qgfc*u zkxcDgMVIor9uAsoi7+V>m?|mHH|m=5txBV8r%9=+^~UPKCE3mn%?4G*_k5=G){-5< z{&Fi!Yzr89g^BH9;+inABTVcJ6W4}`>%zqKVd91`abuX+6((*96T8F2o-pyoFmZF3 z*c&Ep2^0Im#I0fCwlHyfn7AWM+!-cH;qX)-bK+{t3L-P5bN6LAf8CYJaJe~Mt4-H} z>7|7*t1-0-bXv;SFk>ZZ4=2iDVk-D;WiGgZ+DcTz#7yvM%j}#P28W6LVd6lrmkNCj zc(=uCgo(v4aWG5-0WCaC=qs0OsYRGL9477!6Gy_ta+o1UGM7_@4NR$mvle#w%Ub?g zVmQ?>>&T;0U!jGvAP;5e_wFghvUdr$&s__;to6^-!v2|gQLTCnkxZ&mo}E>- zX510-%{!tZud>Ff7-^PmIw4F=$-POn73SO7nUeWJJ4Y58iSp-OX<4ugx^TKWKVMsH z)|%SpQablJ*}>Bq^i__qtf&U{LXqoWd0MLtv?$iV;&tVkS}1GcLqt3!>u%M2 zr6EIfSH6{+@=f|l`{QmBZZJQhl}@EG^8Jms(+}F{_4hK!jf=om6$f3Z#GA zj&NAx))}<}YZ$3rjs#PC+_8VpjxeVP3##NL+@+`?RJBT%@^3b4VQSvTZ}|8Pl+NVBcILsE1kIQqv4*l&MPXkmhJ0O1USgLyxISRZUhUr~+2(5n}~DzA_>9(9VQ& zFJzTH=-x3<)yvZhOY^PT;`|Z+bo_vpUo0MRm6_V+YG`;{M-^qZ#Z{2n<|}fW)kSKX ztG)F0s8Ui|=0Oz?@90cmM>~NXE`ikbKHl}6@vd*jyWYp!?dfBWkH4og{+@RHJwE;( zA75@bj1F$~&)wSj+^y~BZuQUI>EdPXY~L#RB+5RCa%U3dc05{>5w|N7%@V>X(js3+ zs41-;u`;Q4CZL<1u2ZU75=hm2JkJZQePn9wcr_nS-Y|JXs^Q}|I@8s*Us1Zu8j^0q z$8Y)%TJp~=bw0P$es0M>cf`fZ9BJQLc1a97HrQOy%BFDDbsY`SUCO(DQgf)y))DbI zAC5^bA9tHBes&urwU9H!1D$l3mNMgH=fx1%B z)N#aRGE?zs4i*`QGL`men<-^#?W^f`W5*3UYAwDtx;H9b6TcvPEi~)yrMCIw)&98MAFuJp9san}AFuVt>-_P0 zf4spTZ}i7q{&ZQgtUvY80PcKf zn{S6Bkr?0;aD9Cgu+GE<3LVmcyONJZ1Rve?|52dx*$#=pKO2h;E}WLA!T*7Bk$eArV^BQQClDO*v8wW~*yBL+0Qa7nhE-jRXq%L04 zFt#+fw;?%J>sKTlPbqqh;qV2|yB(rl!?60b!0Ui5!0Ul4fGdHkfHweJfo;Imz;@so zUZw9(YvB6uoc0cd{@K(U|Rd3_$K_Ck}1pF-UFz^WQDDZaR z9l*~4?*twLeja!i@Hp@U@C(4Zf%gDU0#5<&1>Og|ANT<9i@*ng4*?$rehD}V90Q&P zo&lZ(J_39c_+{W@z^?$m3Va;+1n_IXCxL$k{Bz*ffqwz~2JoA}r-0uAJ`Maf@GpVS z0RIa3*TC-pzYF{x@Na<60?z@T1AZU)x4<6&e+c|L;Pb%02mT270`SMc7lAJUe*%0N z_z%FJ0$&0CBk-SqKLh?8_|HHHd=>Z_@E5>;0sa#BI`ChCzXHAi{5Rlv;IDyi0xtkB z0{13<4=&2uK4NAPWowIba0H1EWAe@Z$4o5Ep#3ga54J))=rFSOcsD)&Zvg z>w!~&(}3+{?iyeRV6=TYH_iZF0lX486DR_&0yY3=0cQg@^Xy*W9D?Tp=K<#f7XTZ9 zp8+leHUZ;-NC_5rs7w*j{UcK~++CEzaLO~Bp2 zJ-`Go36y~;U>c|ZRbU2~1?GSnuphA2Wi8H{(*dr{0}DVMXaI}AL4XD6uJKyivv$_x zS_@bL4grUOdx0asGH@TT0=yY`3vfU10Pt4eZNP)TL%`1h4+D`6;Fo}-z%k%y;2Gdq;3L3C z1uuS-Ms#~eBU;U^HNYvrdf-&xG~oYogZY2aR;-!y(5F#lo7#HF>;Fs2dhvE@?(Jr{ zRmx*FwoiHrjKXCyE?(qaFr3%*O5ruj%#>LYCrq+YA zNn$%^_W^$Zd=apj<=^M*+ramLzXg5(*lhR=XX{B|lCxh1Y(uJXu6>N)Pl2BRKL)-A zd=&_R9mKm9xDGG}qqcbQ7gC-^qtVZf%S-p-l% z9yrR`)4;R9dx7@>?*twL%oV|Ja>nMfw&|*E`e}PY+E#hCN0{xVB@`^>u|m5hUN7gYvywy{1aiQs!0A8{*Z@35svid) zBVZf&S+Q2+yn7(46QCXU=UZn_q z%?}8ZBlvVFB#Of5-z-!HG@sj_OeK?rVIhIt}oUanN jvT$KxmCCSOc(qFL((E=(1)C9*yzCS?&u%bWol5*8F0qPT literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/cffLib/__pycache__/specializer.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/cffLib/__pycache__/specializer.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f93643eb553da6b4c54e93da3c9e1786774f495 GIT binary patch literal 16535 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 1: raise ValueError(args) + if len(args) % 2 == 1: + yield ('rrcurveto', [args[1], args[0], args[2], args[3], args[4], 0]) + args = args[5:] + for args in _everyN(args, 4): + yield ('rrcurveto', [args[0], 0, args[1], args[2], args[3], 0]) + @staticmethod + def vvcurveto(args): + if len(args) < 4 or len(args) % 4 > 1: raise ValueError(args) + if len(args) % 2 == 1: + yield ('rrcurveto', [args[0], args[1], args[2], args[3], 0, args[4]]) + args = args[5:] + for args in _everyN(args, 4): + yield ('rrcurveto', [0, args[0], args[1], args[2], 0, args[3]]) + @staticmethod + def hvcurveto(args): + if len(args) < 4 or len(args) % 8 not in {0,1,4,5}: raise ValueError(args) + last_args = None + if len(args) % 2 == 1: + lastStraight = len(args) % 8 == 5 + args, last_args = args[:-5], args[-5:] + it = _everyN(args, 4) + try: + while True: + args = next(it) + yield ('rrcurveto', [args[0], 0, args[1], args[2], 0, args[3]]) + args = next(it) + yield ('rrcurveto', [0, args[0], args[1], args[2], args[3], 0]) + except StopIteration: + pass + if last_args: + args = last_args + if lastStraight: + yield ('rrcurveto', [args[0], 0, args[1], args[2], args[4], args[3]]) + else: + yield ('rrcurveto', [0, args[0], args[1], args[2], args[3], args[4]]) + @staticmethod + def vhcurveto(args): + if len(args) < 4 or len(args) % 8 not in {0,1,4,5}: raise ValueError(args) + last_args = None + if len(args) % 2 == 1: + lastStraight = len(args) % 8 == 5 + args, last_args = args[:-5], args[-5:] + it = _everyN(args, 4) + try: + while True: + args = next(it) + yield ('rrcurveto', [0, args[0], args[1], args[2], args[3], 0]) + args = next(it) + yield ('rrcurveto', [args[0], 0, args[1], args[2], 0, args[3]]) + except StopIteration: + pass + if last_args: + args = last_args + if lastStraight: + yield ('rrcurveto', [0, args[0], args[1], args[2], args[3], args[4]]) + else: + yield ('rrcurveto', [args[0], 0, args[1], args[2], args[4], args[3]]) + + @staticmethod + def rcurveline(args): + if len(args) < 8 or len(args) % 6 != 2: raise ValueError(args) + args, last_args = args[:-2], args[-2:] + for args in _everyN(args, 6): + yield ('rrcurveto', args) + yield ('rlineto', last_args) + @staticmethod + def rlinecurve(args): + if len(args) < 8 or len(args) % 2 != 0: raise ValueError(args) + args, last_args = args[:-6], args[-6:] + for args in _everyN(args, 2): + yield ('rlineto', args) + yield ('rrcurveto', last_args) + +def _convertBlendOpToArgs(blendList): + # args is list of blend op args. Since we are supporting + # recursive blend op calls, some of these args may also + # be a list of blend op args, and need to be converted before + # we convert the current list. + if any([isinstance(arg, list) for arg in blendList]): + args = [i for e in blendList for i in + (_convertBlendOpToArgs(e) if isinstance(e,list) else [e]) ] + else: + args = blendList + + # We now know that blendList contains a blend op argument list, even if + # some of the args are lists that each contain a blend op argument list. + # Convert from: + # [default font arg sequence x0,...,xn] + [delta tuple for x0] + ... + [delta tuple for xn] + # to: + # [ [x0] + [delta tuple for x0], + # ..., + # [xn] + [delta tuple for xn] ] + numBlends = args[-1] + # Can't use args.pop() when the args are being used in a nested list + # comprehension. See calling context + args = args[:-1] + + numRegions = len(args)//numBlends - 1 + if not (numBlends*(numRegions + 1) == len(args)): + raise ValueError(blendList) + + defaultArgs = [[arg] for arg in args[:numBlends]] + deltaArgs = args[numBlends:] + numDeltaValues = len(deltaArgs) + deltaList = [ deltaArgs[i:i + numRegions] for i in range(0, numDeltaValues, numRegions) ] + blend_args = [ a + b for a, b in zip(defaultArgs,deltaList)] + return blend_args + +def generalizeCommands(commands, ignoreErrors=False): + result = [] + mapping = _GeneralizerDecombinerCommandsMap + for op, args in commands: + # First, generalize any blend args in the arg list. + if any([isinstance(arg, list) for arg in args]): + try: + args = [n for arg in args for n in (_convertBlendOpToArgs(arg) if isinstance(arg, list) else [arg])] + except ValueError: + if ignoreErrors: + # Store op as data, such that consumers of commands do not have to + # deal with incorrect number of arguments. + result.append(('', args)) + result.append(('', [op])) + else: + raise + + func = getattr(mapping, op, None) + if not func: + result.append((op,args)) + continue + try: + for command in func(args): + result.append(command) + except ValueError: + if ignoreErrors: + # Store op as data, such that consumers of commands do not have to + # deal with incorrect number of arguments. + result.append(('', args)) + result.append(('', [op])) + else: + raise + return result + +def generalizeProgram(program, getNumRegions=None, **kwargs): + return commandsToProgram(generalizeCommands(programToCommands(program, getNumRegions), **kwargs)) + + +def _categorizeVector(v): + """ + Takes X,Y vector v and returns one of r, h, v, or 0 depending on which + of X and/or Y are zero, plus tuple of nonzero ones. If both are zero, + it returns a single zero still. + + >>> _categorizeVector((0,0)) + ('0', (0,)) + >>> _categorizeVector((1,0)) + ('h', (1,)) + >>> _categorizeVector((0,2)) + ('v', (2,)) + >>> _categorizeVector((1,2)) + ('r', (1, 2)) + """ + if not v[0]: + if not v[1]: + return '0', v[:1] + else: + return 'v', v[1:] + else: + if not v[1]: + return 'h', v[:1] + else: + return 'r', v + +def _mergeCategories(a, b): + if a == '0': return b + if b == '0': return a + if a == b: return a + return None + +def _negateCategory(a): + if a == 'h': return 'v' + if a == 'v': return 'h' + assert a in '0r' + return a + +def _convertToBlendCmds(args): + # return a list of blend commands, and + # the remaining non-blended args, if any. + num_args = len(args) + stack_use = 0 + new_args = [] + i = 0 + while i < num_args: + arg = args[i] + if not isinstance(arg, list): + new_args.append(arg) + i += 1 + stack_use += 1 + else: + prev_stack_use = stack_use + # The arg is a tuple of blend values. + # These are each (master 0,delta 1..delta n) + # Combine as many successive tuples as we can, + # up to the max stack limit. + num_sources = len(arg) + blendlist = [arg] + i += 1 + stack_use += 1 + num_sources # 1 for the num_blends arg + while (i < num_args) and isinstance(args[i], list): + blendlist.append(args[i]) + i += 1 + stack_use += num_sources + if stack_use + num_sources > maxStackLimit: + # if we are here, max stack is the CFF2 max stack. + # I use the CFF2 max stack limit here rather than + # the 'maxstack' chosen by the client, as the default + # maxstack may have been used unintentionally. For all + # the other operators, this just produces a little less + # optimization, but here it puts a hard (and low) limit + # on the number of source fonts that can be used. + break + # blendList now contains as many single blend tuples as can be + # combined without exceeding the CFF2 stack limit. + num_blends = len(blendlist) + # append the 'num_blends' default font values + blend_args = [] + for arg in blendlist: + blend_args.append(arg[0]) + for arg in blendlist: + blend_args.extend(arg[1:]) + blend_args.append(num_blends) + new_args.append(blend_args) + stack_use = prev_stack_use + num_blends + + return new_args + +def _addArgs(a, b): + if isinstance(b, list): + if isinstance(a, list): + if len(a) != len(b): + raise ValueError() + return [_addArgs(va, vb) for va,vb in zip(a, b)] + else: + a, b = b, a + if isinstance(a, list): + return [_addArgs(a[0], b)] + a[1:] + return a + b + + +def specializeCommands(commands, + ignoreErrors=False, + generalizeFirst=True, + preserveTopology=False, + maxstack=48): + + # We perform several rounds of optimizations. They are carefully ordered and are: + # + # 0. Generalize commands. + # This ensures that they are in our expected simple form, with each line/curve only + # having arguments for one segment, and using the generic form (rlineto/rrcurveto). + # If caller is sure the input is in this form, they can turn off generalization to + # save time. + # + # 1. Combine successive rmoveto operations. + # + # 2. Specialize rmoveto/rlineto/rrcurveto operators into horizontal/vertical variants. + # We specialize into some, made-up, variants as well, which simplifies following + # passes. + # + # 3. Merge or delete redundant operations, to the extent requested. + # OpenType spec declares point numbers in CFF undefined. As such, we happily + # change topology. If client relies on point numbers (in GPOS anchors, or for + # hinting purposes(what?)) they can turn this off. + # + # 4. Peephole optimization to revert back some of the h/v variants back into their + # original "relative" operator (rline/rrcurveto) if that saves a byte. + # + # 5. Combine adjacent operators when possible, minding not to go over max stack size. + # + # 6. Resolve any remaining made-up operators into real operators. + # + # I have convinced myself that this produces optimal bytecode (except for, possibly + # one byte each time maxstack size prohibits combining.) YMMV, but you'd be wrong. :-) + # A dynamic-programming approach can do the same but would be significantly slower. + # + # 7. For any args which are blend lists, convert them to a blend command. + + + # 0. Generalize commands. + if generalizeFirst: + commands = generalizeCommands(commands, ignoreErrors=ignoreErrors) + else: + commands = list(commands) # Make copy since we modify in-place later. + + # 1. Combine successive rmoveto operations. + for i in range(len(commands)-1, 0, -1): + if 'rmoveto' == commands[i][0] == commands[i-1][0]: + v1, v2 = commands[i-1][1], commands[i][1] + commands[i-1] = ('rmoveto', [v1[0]+v2[0], v1[1]+v2[1]]) + del commands[i] + + # 2. Specialize rmoveto/rlineto/rrcurveto operators into horizontal/vertical variants. + # + # We, in fact, specialize into more, made-up, variants that special-case when both + # X and Y components are zero. This simplifies the following optimization passes. + # This case is rare, but OCD does not let me skip it. + # + # After this round, we will have four variants that use the following mnemonics: + # + # - 'r' for relative, ie. non-zero X and non-zero Y, + # - 'h' for horizontal, ie. zero X and non-zero Y, + # - 'v' for vertical, ie. non-zero X and zero Y, + # - '0' for zeros, ie. zero X and zero Y. + # + # The '0' pseudo-operators are not part of the spec, but help simplify the following + # optimization rounds. We resolve them at the end. So, after this, we will have four + # moveto and four lineto variants: + # + # - 0moveto, 0lineto + # - hmoveto, hlineto + # - vmoveto, vlineto + # - rmoveto, rlineto + # + # and sixteen curveto variants. For example, a '0hcurveto' operator means a curve + # dx0,dy0,dx1,dy1,dx2,dy2,dx3,dy3 where dx0, dx1, and dy3 are zero but not dx3. + # An 'rvcurveto' means dx3 is zero but not dx0,dy0,dy3. + # + # There are nine different variants of curves without the '0'. Those nine map exactly + # to the existing curve variants in the spec: rrcurveto, and the four variants hhcurveto, + # vvcurveto, hvcurveto, and vhcurveto each cover two cases, one with an odd number of + # arguments and one without. Eg. an hhcurveto with an extra argument (odd number of + # arguments) is in fact an rhcurveto. The operators in the spec are designed such that + # all four of rhcurveto, rvcurveto, hrcurveto, and vrcurveto are encodable for one curve. + # + # Of the curve types with '0', the 00curveto is equivalent to a lineto variant. The rest + # of the curve types with a 0 need to be encoded as a h or v variant. Ie. a '0' can be + # thought of a "don't care" and can be used as either an 'h' or a 'v'. As such, we always + # encode a number 0 as argument when we use a '0' variant. Later on, we can just substitute + # the '0' with either 'h' or 'v' and it works. + # + # When we get to curve splines however, things become more complicated... XXX finish this. + # There's one more complexity with splines. If one side of the spline is not horizontal or + # vertical (or zero), ie. if it's 'r', then it limits which spline types we can encode. + # Only hhcurveto and vvcurveto operators can encode a spline starting with 'r', and + # only hvcurveto and vhcurveto operators can encode a spline ending with 'r'. + # This limits our merge opportunities later. + # + for i in range(len(commands)): + op,args = commands[i] + + if op in {'rmoveto', 'rlineto'}: + c, args = _categorizeVector(args) + commands[i] = c+op[1:], args + continue + + if op == 'rrcurveto': + c1, args1 = _categorizeVector(args[:2]) + c2, args2 = _categorizeVector(args[-2:]) + commands[i] = c1+c2+'curveto', args1+args[2:4]+args2 + continue + + # 3. Merge or delete redundant operations, to the extent requested. + # + # TODO + # A 0moveto that comes before all other path operations can be removed. + # though I find conflicting evidence for this. + # + # TODO + # "If hstem and vstem hints are both declared at the beginning of a + # CharString, and this sequence is followed directly by the hintmask or + # cntrmask operators, then the vstem hint operator (or, if applicable, + # the vstemhm operator) need not be included." + # + # "The sequence and form of a CFF2 CharString program may be represented as: + # {hs* vs* cm* hm* mt subpath}? {mt subpath}*" + # + # https://www.microsoft.com/typography/otspec/cff2charstr.htm#section3.1 + # + # For Type2 CharStrings the sequence is: + # w? {hs* vs* cm* hm* mt subpath}? {mt subpath}* endchar" + + + # Some other redundancies change topology (point numbers). + if not preserveTopology: + for i in range(len(commands)-1, -1, -1): + op, args = commands[i] + + # A 00curveto is demoted to a (specialized) lineto. + if op == '00curveto': + assert len(args) == 4 + c, args = _categorizeVector(args[1:3]) + op = c+'lineto' + commands[i] = op, args + # and then... + + # A 0lineto can be deleted. + if op == '0lineto': + del commands[i] + continue + + # Merge adjacent hlineto's and vlineto's. + # In CFF2 charstrings from variable fonts, each + # arg item may be a list of blendable values, one from + # each source font. + if (i and op in {'hlineto', 'vlineto'} and + (op == commands[i-1][0])): + _, other_args = commands[i-1] + assert len(args) == 1 and len(other_args) == 1 + try: + new_args = [_addArgs(args[0], other_args[0])] + except ValueError: + continue + commands[i-1] = (op, new_args) + del commands[i] + continue + + # 4. Peephole optimization to revert back some of the h/v variants back into their + # original "relative" operator (rline/rrcurveto) if that saves a byte. + for i in range(1, len(commands)-1): + op,args = commands[i] + prv,nxt = commands[i-1][0], commands[i+1][0] + + if op in {'0lineto', 'hlineto', 'vlineto'} and prv == nxt == 'rlineto': + assert len(args) == 1 + args = [0, args[0]] if op[0] == 'v' else [args[0], 0] + commands[i] = ('rlineto', args) + continue + + if op[2:] == 'curveto' and len(args) == 5 and prv == nxt == 'rrcurveto': + assert (op[0] == 'r') ^ (op[1] == 'r') + if op[0] == 'v': + pos = 0 + elif op[0] != 'r': + pos = 1 + elif op[1] == 'v': + pos = 4 + else: + pos = 5 + # Insert, while maintaining the type of args (can be tuple or list). + args = args[:pos] + type(args)((0,)) + args[pos:] + commands[i] = ('rrcurveto', args) + continue + + # 5. Combine adjacent operators when possible, minding not to go over max stack size. + for i in range(len(commands)-1, 0, -1): + op1,args1 = commands[i-1] + op2,args2 = commands[i] + new_op = None + + # Merge logic... + if {op1, op2} <= {'rlineto', 'rrcurveto'}: + if op1 == op2: + new_op = op1 + else: + if op2 == 'rrcurveto' and len(args2) == 6: + new_op = 'rlinecurve' + elif len(args2) == 2: + new_op = 'rcurveline' + + elif (op1, op2) in {('rlineto', 'rlinecurve'), ('rrcurveto', 'rcurveline')}: + new_op = op2 + + elif {op1, op2} == {'vlineto', 'hlineto'}: + new_op = op1 + + elif 'curveto' == op1[2:] == op2[2:]: + d0, d1 = op1[:2] + d2, d3 = op2[:2] + + if d1 == 'r' or d2 == 'r' or d0 == d3 == 'r': + continue + + d = _mergeCategories(d1, d2) + if d is None: continue + if d0 == 'r': + d = _mergeCategories(d, d3) + if d is None: continue + new_op = 'r'+d+'curveto' + elif d3 == 'r': + d0 = _mergeCategories(d0, _negateCategory(d)) + if d0 is None: continue + new_op = d0+'r'+'curveto' + else: + d0 = _mergeCategories(d0, d3) + if d0 is None: continue + new_op = d0+d+'curveto' + + # Make sure the stack depth does not exceed (maxstack - 1), so + # that subroutinizer can insert subroutine calls at any point. + if new_op and len(args1) + len(args2) < maxstack: + commands[i-1] = (new_op, args1+args2) + del commands[i] + + # 6. Resolve any remaining made-up operators into real operators. + for i in range(len(commands)): + op,args = commands[i] + + if op in {'0moveto', '0lineto'}: + commands[i] = 'h'+op[1:], args + continue + + if op[2:] == 'curveto' and op[:2] not in {'rr', 'hh', 'vv', 'vh', 'hv'}: + op0, op1 = op[:2] + if (op0 == 'r') ^ (op1 == 'r'): + assert len(args) % 2 == 1 + if op0 == '0': op0 = 'h' + if op1 == '0': op1 = 'h' + if op0 == 'r': op0 = op1 + if op1 == 'r': op1 = _negateCategory(op0) + assert {op0,op1} <= {'h','v'}, (op0, op1) + + if len(args) % 2: + if op0 != op1: # vhcurveto / hvcurveto + if (op0 == 'h') ^ (len(args) % 8 == 1): + # Swap last two args order + args = args[:-2]+args[-1:]+args[-2:-1] + else: # hhcurveto / vvcurveto + if op0 == 'h': # hhcurveto + # Swap first two args order + args = args[1:2]+args[:1]+args[2:] + + commands[i] = op0+op1+'curveto', args + continue + + # 7. For any series of args which are blend lists, convert the series to a single blend arg. + for i in range(len(commands)): + op, args = commands[i] + if any(isinstance(arg, list) for arg in args): + commands[i] = op, _convertToBlendCmds(args) + + return commands + +def specializeProgram(program, getNumRegions=None, **kwargs): + return commandsToProgram(specializeCommands(programToCommands(program, getNumRegions), **kwargs)) + + +if __name__ == '__main__': + import sys + if len(sys.argv) == 1: + import doctest + sys.exit(doctest.testmod().failed) + program = stringToProgram(sys.argv[1:]) + print("Program:"); print(programToString(program)) + commands = programToCommands(program) + print("Commands:"); print(commands) + program2 = commandsToProgram(commands) + print("Program from commands:"); print(programToString(program2)) + assert program == program2 + print("Generalized program:"); print(programToString(generalizeProgram(program))) + print("Specialized program:"); print(programToString(specializeProgram(program))) diff --git a/.venv/lib/python3.9/site-packages/fontTools/cffLib/width.py b/.venv/lib/python3.9/site-packages/fontTools/cffLib/width.py new file mode 100644 index 00000000..00b859bb --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/cffLib/width.py @@ -0,0 +1,183 @@ +# -*- coding: utf-8 -*- + +"""T2CharString glyph width optimizer. + +CFF glyphs whose width equals the CFF Private dictionary's ``defaultWidthX`` +value do not need to specify their width in their charstring, saving bytes. +This module determines the optimum ``defaultWidthX`` and ``nominalWidthX`` +values for a font, when provided with a list of glyph widths.""" + +from fontTools.ttLib import TTFont +from collections import defaultdict +from operator import add +from functools import reduce + + +class missingdict(dict): + def __init__(self, missing_func): + self.missing_func = missing_func + def __missing__(self, v): + return self.missing_func(v) + +def cumSum(f, op=add, start=0, decreasing=False): + + keys = sorted(f.keys()) + minx, maxx = keys[0], keys[-1] + + total = reduce(op, f.values(), start) + + if decreasing: + missing = lambda x: start if x > maxx else total + domain = range(maxx, minx - 1, -1) + else: + missing = lambda x: start if x < minx else total + domain = range(minx, maxx + 1) + + out = missingdict(missing) + + v = start + for x in domain: + v = op(v, f[x]) + out[x] = v + + return out + +def byteCost(widths, default, nominal): + + if not hasattr(widths, 'items'): + d = defaultdict(int) + for w in widths: + d[w] += 1 + widths = d + + cost = 0 + for w,freq in widths.items(): + if w == default: continue + diff = abs(w - nominal) + if diff <= 107: + cost += freq + elif diff <= 1131: + cost += freq * 2 + else: + cost += freq * 5 + return cost + + +def optimizeWidthsBruteforce(widths): + """Bruteforce version. Veeeeeeeeeeeeeeeeery slow. Only works for smallests of fonts.""" + + d = defaultdict(int) + for w in widths: + d[w] += 1 + + # Maximum number of bytes using default can possibly save + maxDefaultAdvantage = 5 * max(d.values()) + + minw, maxw = min(widths), max(widths) + domain = list(range(minw, maxw+1)) + + bestCostWithoutDefault = min(byteCost(widths, None, nominal) for nominal in domain) + + bestCost = len(widths) * 5 + 1 + for nominal in domain: + if byteCost(widths, None, nominal) > bestCost + maxDefaultAdvantage: + continue + for default in domain: + cost = byteCost(widths, default, nominal) + if cost < bestCost: + bestCost = cost + bestDefault = default + bestNominal = nominal + + return bestDefault, bestNominal + + +def optimizeWidths(widths): + """Given a list of glyph widths, or dictionary mapping glyph width to number of + glyphs having that, returns a tuple of best CFF default and nominal glyph widths. + + This algorithm is linear in UPEM+numGlyphs.""" + + if not hasattr(widths, 'items'): + d = defaultdict(int) + for w in widths: + d[w] += 1 + widths = d + + keys = sorted(widths.keys()) + minw, maxw = keys[0], keys[-1] + domain = list(range(minw, maxw+1)) + + # Cumulative sum/max forward/backward. + cumFrqU = cumSum(widths, op=add) + cumMaxU = cumSum(widths, op=max) + cumFrqD = cumSum(widths, op=add, decreasing=True) + cumMaxD = cumSum(widths, op=max, decreasing=True) + + # Cost per nominal choice, without default consideration. + nomnCostU = missingdict(lambda x: cumFrqU[x] + cumFrqU[x-108] + cumFrqU[x-1132]*3) + nomnCostD = missingdict(lambda x: cumFrqD[x] + cumFrqD[x+108] + cumFrqD[x+1132]*3) + nomnCost = missingdict(lambda x: nomnCostU[x] + nomnCostD[x] - widths[x]) + + # Cost-saving per nominal choice, by best default choice. + dfltCostU = missingdict(lambda x: max(cumMaxU[x], cumMaxU[x-108]*2, cumMaxU[x-1132]*5)) + dfltCostD = missingdict(lambda x: max(cumMaxD[x], cumMaxD[x+108]*2, cumMaxD[x+1132]*5)) + dfltCost = missingdict(lambda x: max(dfltCostU[x], dfltCostD[x])) + + # Combined cost per nominal choice. + bestCost = missingdict(lambda x: nomnCost[x] - dfltCost[x]) + + # Best nominal. + nominal = min(domain, key=lambda x: bestCost[x]) + + # Work back the best default. + bestC = bestCost[nominal] + dfltC = nomnCost[nominal] - bestCost[nominal] + ends = [] + if dfltC == dfltCostU[nominal]: + starts = [nominal, nominal-108, nominal-1131] + for start in starts: + while cumMaxU[start] and cumMaxU[start] == cumMaxU[start-1]: + start -= 1 + ends.append(start) + else: + starts = [nominal, nominal+108, nominal+1131] + for start in starts: + while cumMaxD[start] and cumMaxD[start] == cumMaxD[start+1]: + start += 1 + ends.append(start) + default = min(ends, key=lambda default: byteCost(widths, default, nominal)) + + return default, nominal + +def main(args=None): + """Calculate optimum defaultWidthX/nominalWidthX values""" + + import argparse + parser = argparse.ArgumentParser( + "fonttools cffLib.width", + description=main.__doc__, + ) + parser.add_argument('inputs', metavar='FILE', type=str, nargs='+', + help="Input TTF files") + parser.add_argument('-b', '--brute-force', dest="brute", action="store_true", + help="Use brute-force approach (VERY slow)") + + args = parser.parse_args(args) + + for fontfile in args.inputs: + font = TTFont(fontfile) + hmtx = font['hmtx'] + widths = [m[0] for m in hmtx.metrics.values()] + if args.brute: + default, nominal = optimizeWidthsBruteforce(widths) + else: + default, nominal = optimizeWidths(widths) + print("glyphs=%d default=%d nominal=%d byteCost=%d" % (len(widths), default, nominal, byteCost(widths, default, nominal))) + +if __name__ == '__main__': + import sys + if len(sys.argv) == 1: + import doctest + sys.exit(doctest.testmod().failed) + main() diff --git a/.venv/lib/python3.9/site-packages/fontTools/colorLib/__init__.py b/.venv/lib/python3.9/site-packages/fontTools/colorLib/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/.venv/lib/python3.9/site-packages/fontTools/colorLib/__pycache__/__init__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/colorLib/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..90e2a67d1c3d03314d3a8a9b17747bfe922bd157 GIT binary patch literal 186 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 CnN%tO literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/colorLib/__pycache__/geometry.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/colorLib/__pycache__/geometry.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9031bb765f7559f9ed7f3ef3a6c6baf26d68a90 GIT binary patch literal 3616 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 R#<5COn>}dh_#dow{tsej)Y1R| literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/colorLib/__pycache__/unbuilder.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/colorLib/__pycache__/unbuilder.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6a506829a09e1c324276aacbbd90eef424739a39 GIT binary patch literal 2575 zcma)7-)|d55Z>K8pU;l%{Ak)VP{33L>Z-L{!3$N0D%z$LMQ+ukMXadI#k)z)Ip4Xv z=cuuq7aT-+-~sViklM$-!~cR#yz$h30YSsep6w=0k+{>&-tErq&CK`Bj8`n?30xoj z_Sn1O67na$9K2wST!Eqg03nE=0clgtC=pCpfz`IT4bQg7>=B+3j>y97+#tdgxjiCs z1IDw`75Ocueuu9of?PYtbMOTbg&@!KFc*V~c7Yct>6K)@RTONV@X{9~JY^F(x$}q; zyk-8$lqfx=lzd4-c9F<}EDb21meXPq^k?Ku>zH6$MEz$s68 zjGQYFG5v$ZPs*G;IRG6|SRs{}=ini!(8P`6Rc|ej`Z-M(O6K)$xYqRpAyt#1;_$Ly z9u0jCUN*=s>l0P#lNLP1w9f|gd-5Gwr-BN$=k{rfT_Xbuf3)gN{KM$NV;vaBVCYjI ze9|ZPXLl)lLLQMPID<<+u?O}Fc?O^J+^3$FH-eqcW>V;;=H2%EFitXNs<4DrFLF!C z<}=E3Lk+1^1`hx0>snh1->ZG*DRE8t+p>0hXETn%+DdaXih^2oTZY@Uz+bC%cH+$_ z{IL3QP5ZID(D9mE-iFk*^(c&2K~>k9Q4pzRP#yoH+Sy6+3&L;4&8Xd3M3QM6gu~c= z@7#zTsObfIvHDWKVyP@>Co{|5j)aqSe0LOnK0Ef>czH)QBPB2z!AO@E z*G7TCPZP)NXydoa!MO_UNs5Qez@X?72tsYR9qQ6NvtKA&I)W3r(uAR_Ao}DQxqoJt z#-vYUI$-K_%=&aduLI3L1M)tw`}Cff1p(w}y<#PKU;Cksy|5`0J3u4d#(Lnzu?zt= zD}V(igVbWQ%vh{u;Askfi)l&FLOR9FDjIX>LN;B2q0fMjgi}E{GZZA;5|*$bQ6X)G zV-hzDbaYh#RFAM554ws6odwaSebOK?5D|veve$v@t&C5B=?*d-cC+ZDngnGyu?SPb zqBuo!!T`1uskRpgbz8vA{TBrkhw`dZuu<*nsJ&&&fC7 zd&_zPP(Ov-PW{g)1WO%9fpk`A1kVoLtT6QkzGpg^v#&ypl>nhLSwrX)?Y;9FOAkiu zkhN$jk_2bn0?~*1GY>Ym0J|-wXVK!=ifvPwpqB5sj{r%~vgc7Zm6>@mN4|xMj1>#- z5zfMaivCrfiR?U}ot_PE?#~Q}l&dFB3i6S>L10XMI{^#!6lxnB@s$2(Dw_#J zg(?gHgb1DB`Q|2+Uc-xL)I==}mr3LN0_Kk?GZ#SlWtmxgO~C$xV+U%`_%J@X zsY7q09(tutg20T^xJ2kIW0YY*q6O;g+xzSVjD5RMpf2m3`~QyCD-PyF=(S~|k>neV zb|kt1J{KB|2VE~ncN7xbKwu0xK+bV$nQDPnYDCJV?u2WbH9Wr!lx{SjnL3@00(RH& zadmYGI!5n&S3~=_T*mehWBVwN+DCOrXQ|3dx9Y1)HhmB9 hv|s@?Zs|Q2xB~;2RD!1|2AG)!!l2nfyZgs+{sm26XXgL_ literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/colorLib/builder.py b/.venv/lib/python3.9/site-packages/fontTools/colorLib/builder.py new file mode 100644 index 00000000..d2e35d81 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/colorLib/builder.py @@ -0,0 +1,673 @@ +""" +colorLib.builder: Build COLR/CPAL tables from scratch + +""" +import collections +import copy +import enum +from functools import partial +from math import ceil, log +from typing import ( + Any, + Dict, + Generator, + Iterable, + List, + Mapping, + Optional, + Sequence, + Tuple, + Type, + TypeVar, + Union, +) +from fontTools.misc.arrayTools import intRect +from fontTools.misc.fixedTools import fixedToFloat +from fontTools.ttLib.tables import C_O_L_R_ +from fontTools.ttLib.tables import C_P_A_L_ +from fontTools.ttLib.tables import _n_a_m_e +from fontTools.ttLib.tables import otTables as ot +from fontTools.ttLib.tables.otTables import ExtendMode, CompositeMode +from .errors import ColorLibError +from .geometry import round_start_circle_stable_containment +from .table_builder import BuildCallback, TableBuilder + + +# TODO move type aliases to colorLib.types? +T = TypeVar("T") +_Kwargs = Mapping[str, Any] +_PaintInput = Union[int, _Kwargs, ot.Paint, Tuple[str, "_PaintInput"]] +_PaintInputList = Sequence[_PaintInput] +_ColorGlyphsDict = Dict[str, Union[_PaintInputList, _PaintInput]] +_ColorGlyphsV0Dict = Dict[str, Sequence[Tuple[str, int]]] +_ClipBoxInput = Union[ + Tuple[int, int, int, int, int], # format 1, variable + Tuple[int, int, int, int], # format 0, non-variable + ot.ClipBox, +] + + +MAX_PAINT_COLR_LAYER_COUNT = 255 +_DEFAULT_ALPHA = 1.0 +_MAX_REUSE_LEN = 32 + + +def _beforeBuildPaintRadialGradient(paint, source): + x0 = source["x0"] + y0 = source["y0"] + r0 = source["r0"] + x1 = source["x1"] + y1 = source["y1"] + r1 = source["r1"] + + # TODO apparently no builder_test confirms this works (?) + + # avoid abrupt change after rounding when c0 is near c1's perimeter + c = round_start_circle_stable_containment((x0, y0), r0, (x1, y1), r1) + x0, y0 = c.centre + r0 = c.radius + + # update source to ensure paint is built with corrected values + source["x0"] = x0 + source["y0"] = y0 + source["r0"] = r0 + source["x1"] = x1 + source["y1"] = y1 + source["r1"] = r1 + + return paint, source + + +def _defaultColorStop(): + colorStop = ot.ColorStop() + colorStop.Alpha = _DEFAULT_ALPHA + return colorStop + + +def _defaultVarColorStop(): + colorStop = ot.VarColorStop() + colorStop.Alpha = _DEFAULT_ALPHA + return colorStop + + +def _defaultColorLine(): + colorLine = ot.ColorLine() + colorLine.Extend = ExtendMode.PAD + return colorLine + + +def _defaultVarColorLine(): + colorLine = ot.VarColorLine() + colorLine.Extend = ExtendMode.PAD + return colorLine + + +def _defaultPaintSolid(): + paint = ot.Paint() + paint.Alpha = _DEFAULT_ALPHA + return paint + + +def _buildPaintCallbacks(): + return { + ( + BuildCallback.BEFORE_BUILD, + ot.Paint, + ot.PaintFormat.PaintRadialGradient, + ): _beforeBuildPaintRadialGradient, + ( + BuildCallback.BEFORE_BUILD, + ot.Paint, + ot.PaintFormat.PaintVarRadialGradient, + ): _beforeBuildPaintRadialGradient, + (BuildCallback.CREATE_DEFAULT, ot.ColorStop): _defaultColorStop, + (BuildCallback.CREATE_DEFAULT, ot.VarColorStop): _defaultVarColorStop, + (BuildCallback.CREATE_DEFAULT, ot.ColorLine): _defaultColorLine, + (BuildCallback.CREATE_DEFAULT, ot.VarColorLine): _defaultVarColorLine, + ( + BuildCallback.CREATE_DEFAULT, + ot.Paint, + ot.PaintFormat.PaintSolid, + ): _defaultPaintSolid, + ( + BuildCallback.CREATE_DEFAULT, + ot.Paint, + ot.PaintFormat.PaintVarSolid, + ): _defaultPaintSolid, + } + + +def populateCOLRv0( + table: ot.COLR, + colorGlyphsV0: _ColorGlyphsV0Dict, + glyphMap: Optional[Mapping[str, int]] = None, +): + """Build v0 color layers and add to existing COLR table. + + Args: + table: a raw otTables.COLR() object (not ttLib's table_C_O_L_R_). + colorGlyphsV0: map of base glyph names to lists of (layer glyph names, + color palette index) tuples. Can be empty. + glyphMap: a map from glyph names to glyph indices, as returned from + TTFont.getReverseGlyphMap(), to optionally sort base records by GID. + """ + if glyphMap is not None: + colorGlyphItems = sorted( + colorGlyphsV0.items(), key=lambda item: glyphMap[item[0]] + ) + else: + colorGlyphItems = colorGlyphsV0.items() + baseGlyphRecords = [] + layerRecords = [] + for baseGlyph, layers in colorGlyphItems: + baseRec = ot.BaseGlyphRecord() + baseRec.BaseGlyph = baseGlyph + baseRec.FirstLayerIndex = len(layerRecords) + baseRec.NumLayers = len(layers) + baseGlyphRecords.append(baseRec) + + for layerGlyph, paletteIndex in layers: + layerRec = ot.LayerRecord() + layerRec.LayerGlyph = layerGlyph + layerRec.PaletteIndex = paletteIndex + layerRecords.append(layerRec) + + table.BaseGlyphRecordArray = table.LayerRecordArray = None + if baseGlyphRecords: + table.BaseGlyphRecordArray = ot.BaseGlyphRecordArray() + table.BaseGlyphRecordArray.BaseGlyphRecord = baseGlyphRecords + if layerRecords: + table.LayerRecordArray = ot.LayerRecordArray() + table.LayerRecordArray.LayerRecord = layerRecords + table.BaseGlyphRecordCount = len(baseGlyphRecords) + table.LayerRecordCount = len(layerRecords) + + +def buildCOLR( + colorGlyphs: _ColorGlyphsDict, + version: Optional[int] = None, + glyphMap: Optional[Mapping[str, int]] = None, + varStore: Optional[ot.VarStore] = None, + varIndexMap: Optional[ot.DeltaSetIndexMap] = None, + clipBoxes: Optional[Dict[str, _ClipBoxInput]] = None, +) -> C_O_L_R_.table_C_O_L_R_: + """Build COLR table from color layers mapping. + Args: + colorGlyphs: map of base glyph name to, either list of (layer glyph name, + color palette index) tuples for COLRv0; or a single Paint (dict) or + list of Paint for COLRv1. + version: the version of COLR table. If None, the version is determined + by the presence of COLRv1 paints or variation data (varStore), which + require version 1; otherwise, if all base glyphs use only simple color + layers, version 0 is used. + glyphMap: a map from glyph names to glyph indices, as returned from + TTFont.getReverseGlyphMap(), to optionally sort base records by GID. + varStore: Optional ItemVarationStore for deltas associated with v1 layer. + varIndexMap: Optional DeltaSetIndexMap for deltas associated with v1 layer. + clipBoxes: Optional map of base glyph name to clip box 4- or 5-tuples: + (xMin, yMin, xMax, yMax) or (xMin, yMin, xMax, yMax, varIndexBase). + Return: + A new COLR table. + """ + self = C_O_L_R_.table_C_O_L_R_() + + if varStore is not None and version == 0: + raise ValueError("Can't add VarStore to COLRv0") + + if version in (None, 0) and not varStore: + # split color glyphs into v0 and v1 and encode separately + colorGlyphsV0, colorGlyphsV1 = _split_color_glyphs_by_version(colorGlyphs) + if version == 0 and colorGlyphsV1: + raise ValueError("Can't encode COLRv1 glyphs in COLRv0") + else: + # unless explicitly requested for v1 or have variations, in which case + # we encode all color glyph as v1 + colorGlyphsV0, colorGlyphsV1 = {}, colorGlyphs + + colr = ot.COLR() + + populateCOLRv0(colr, colorGlyphsV0, glyphMap) + + colr.LayerList, colr.BaseGlyphList = buildColrV1(colorGlyphsV1, glyphMap) + + if version is None: + version = 1 if (varStore or colorGlyphsV1) else 0 + elif version not in (0, 1): + raise NotImplementedError(version) + self.version = colr.Version = version + + if version == 0: + self.ColorLayers = self._decompileColorLayersV0(colr) + else: + clipBoxes = { + name: clipBoxes[name] for name in clipBoxes or {} if name in colorGlyphsV1 + } + colr.ClipList = buildClipList(clipBoxes) if clipBoxes else None + colr.VarIndexMap = varIndexMap + colr.VarStore = varStore + self.table = colr + + return self + + +def buildClipList(clipBoxes: Dict[str, _ClipBoxInput]) -> ot.ClipList: + clipList = ot.ClipList() + clipList.Format = 1 + clipList.clips = {name: buildClipBox(box) for name, box in clipBoxes.items()} + return clipList + + +def buildClipBox(clipBox: _ClipBoxInput) -> ot.ClipBox: + if isinstance(clipBox, ot.ClipBox): + return clipBox + n = len(clipBox) + clip = ot.ClipBox() + if n not in (4, 5): + raise ValueError(f"Invalid ClipBox: expected 4 or 5 values, found {n}") + clip.xMin, clip.yMin, clip.xMax, clip.yMax = intRect(clipBox[:4]) + clip.Format = int(n == 5) + 1 + if n == 5: + clip.VarIndexBase = int(clipBox[4]) + return clip + + +class ColorPaletteType(enum.IntFlag): + USABLE_WITH_LIGHT_BACKGROUND = 0x0001 + USABLE_WITH_DARK_BACKGROUND = 0x0002 + + @classmethod + def _missing_(cls, value): + # enforce reserved bits + if isinstance(value, int) and (value < 0 or value & 0xFFFC != 0): + raise ValueError(f"{value} is not a valid {cls.__name__}") + return super()._missing_(value) + + +# None, 'abc' or {'en': 'abc', 'de': 'xyz'} +_OptionalLocalizedString = Union[None, str, Dict[str, str]] + + +def buildPaletteLabels( + labels: Iterable[_OptionalLocalizedString], nameTable: _n_a_m_e.table__n_a_m_e +) -> List[Optional[int]]: + return [ + nameTable.addMultilingualName(l, mac=False) + if isinstance(l, dict) + else C_P_A_L_.table_C_P_A_L_.NO_NAME_ID + if l is None + else nameTable.addMultilingualName({"en": l}, mac=False) + for l in labels + ] + + +def buildCPAL( + palettes: Sequence[Sequence[Tuple[float, float, float, float]]], + paletteTypes: Optional[Sequence[ColorPaletteType]] = None, + paletteLabels: Optional[Sequence[_OptionalLocalizedString]] = None, + paletteEntryLabels: Optional[Sequence[_OptionalLocalizedString]] = None, + nameTable: Optional[_n_a_m_e.table__n_a_m_e] = None, +) -> C_P_A_L_.table_C_P_A_L_: + """Build CPAL table from list of color palettes. + + Args: + palettes: list of lists of colors encoded as tuples of (R, G, B, A) floats + in the range [0..1]. + paletteTypes: optional list of ColorPaletteType, one for each palette. + paletteLabels: optional list of palette labels. Each lable can be either: + None (no label), a string (for for default English labels), or a + localized string (as a dict keyed with BCP47 language codes). + paletteEntryLabels: optional list of palette entry labels, one for each + palette entry (see paletteLabels). + nameTable: optional name table where to store palette and palette entry + labels. Required if either paletteLabels or paletteEntryLabels is set. + + Return: + A new CPAL v0 or v1 table, if custom palette types or labels are specified. + """ + if len({len(p) for p in palettes}) != 1: + raise ColorLibError("color palettes have different lengths") + + if (paletteLabels or paletteEntryLabels) and not nameTable: + raise TypeError( + "nameTable is required if palette or palette entries have labels" + ) + + cpal = C_P_A_L_.table_C_P_A_L_() + cpal.numPaletteEntries = len(palettes[0]) + + cpal.palettes = [] + for i, palette in enumerate(palettes): + colors = [] + for j, color in enumerate(palette): + if not isinstance(color, tuple) or len(color) != 4: + raise ColorLibError( + f"In palette[{i}][{j}]: expected (R, G, B, A) tuple, got {color!r}" + ) + if any(v > 1 or v < 0 for v in color): + raise ColorLibError( + f"palette[{i}][{j}] has invalid out-of-range [0..1] color: {color!r}" + ) + # input colors are RGBA, CPAL encodes them as BGRA + red, green, blue, alpha = color + colors.append( + C_P_A_L_.Color(*(round(v * 255) for v in (blue, green, red, alpha))) + ) + cpal.palettes.append(colors) + + if any(v is not None for v in (paletteTypes, paletteLabels, paletteEntryLabels)): + cpal.version = 1 + + if paletteTypes is not None: + if len(paletteTypes) != len(palettes): + raise ColorLibError( + f"Expected {len(palettes)} paletteTypes, got {len(paletteTypes)}" + ) + cpal.paletteTypes = [ColorPaletteType(t).value for t in paletteTypes] + else: + cpal.paletteTypes = [C_P_A_L_.table_C_P_A_L_.DEFAULT_PALETTE_TYPE] * len( + palettes + ) + + if paletteLabels is not None: + if len(paletteLabels) != len(palettes): + raise ColorLibError( + f"Expected {len(palettes)} paletteLabels, got {len(paletteLabels)}" + ) + cpal.paletteLabels = buildPaletteLabels(paletteLabels, nameTable) + else: + cpal.paletteLabels = [C_P_A_L_.table_C_P_A_L_.NO_NAME_ID] * len(palettes) + + if paletteEntryLabels is not None: + if len(paletteEntryLabels) != cpal.numPaletteEntries: + raise ColorLibError( + f"Expected {cpal.numPaletteEntries} paletteEntryLabels, " + f"got {len(paletteEntryLabels)}" + ) + cpal.paletteEntryLabels = buildPaletteLabels(paletteEntryLabels, nameTable) + else: + cpal.paletteEntryLabels = [ + C_P_A_L_.table_C_P_A_L_.NO_NAME_ID + ] * cpal.numPaletteEntries + else: + cpal.version = 0 + + return cpal + + +# COLR v1 tables +# See draft proposal at: https://github.com/googlefonts/colr-gradients-spec + + +def _is_colrv0_layer(layer: Any) -> bool: + # Consider as COLRv0 layer any sequence of length 2 (be it tuple or list) in which + # the first element is a str (the layerGlyph) and the second element is an int + # (CPAL paletteIndex). + # https://github.com/googlefonts/ufo2ft/issues/426 + try: + layerGlyph, paletteIndex = layer + except (TypeError, ValueError): + return False + else: + return isinstance(layerGlyph, str) and isinstance(paletteIndex, int) + + +def _split_color_glyphs_by_version( + colorGlyphs: _ColorGlyphsDict, +) -> Tuple[_ColorGlyphsV0Dict, _ColorGlyphsDict]: + colorGlyphsV0 = {} + colorGlyphsV1 = {} + for baseGlyph, layers in colorGlyphs.items(): + if all(_is_colrv0_layer(l) for l in layers): + colorGlyphsV0[baseGlyph] = layers + else: + colorGlyphsV1[baseGlyph] = layers + + # sanity check + assert set(colorGlyphs) == (set(colorGlyphsV0) | set(colorGlyphsV1)) + + return colorGlyphsV0, colorGlyphsV1 + + +def _reuse_ranges(num_layers: int) -> Generator[Tuple[int, int], None, None]: + # TODO feels like something itertools might have already + for lbound in range(num_layers): + # Reuse of very large #s of layers is relatively unlikely + # +2: we want sequences of at least 2 + # otData handles single-record duplication + for ubound in range( + lbound + 2, min(num_layers + 1, lbound + 2 + _MAX_REUSE_LEN) + ): + yield (lbound, ubound) + + +class LayerListBuilder: + slices: List[ot.Paint] + layers: List[ot.Paint] + reusePool: Mapping[Tuple[Any, ...], int] + tuples: Mapping[int, Tuple[Any, ...]] + keepAlive: List[ot.Paint] # we need id to remain valid + + def __init__(self): + self.slices = [] + self.layers = [] + self.reusePool = {} + self.tuples = {} + self.keepAlive = [] + + # We need to intercept construction of PaintColrLayers + callbacks = _buildPaintCallbacks() + callbacks[ + ( + BuildCallback.BEFORE_BUILD, + ot.Paint, + ot.PaintFormat.PaintColrLayers, + ) + ] = self._beforeBuildPaintColrLayers + self.tableBuilder = TableBuilder(callbacks) + + def _paint_tuple(self, paint: ot.Paint): + # start simple, who even cares about cyclic graphs or interesting field types + def _tuple_safe(value): + if isinstance(value, enum.Enum): + return value + elif hasattr(value, "__dict__"): + return tuple( + (k, _tuple_safe(v)) for k, v in sorted(value.__dict__.items()) + ) + elif isinstance(value, collections.abc.MutableSequence): + return tuple(_tuple_safe(e) for e in value) + return value + + # Cache the tuples for individual Paint instead of the whole sequence + # because the seq could be a transient slice + result = self.tuples.get(id(paint), None) + if result is None: + result = _tuple_safe(paint) + self.tuples[id(paint)] = result + self.keepAlive.append(paint) + return result + + def _as_tuple(self, paints: Sequence[ot.Paint]) -> Tuple[Any, ...]: + return tuple(self._paint_tuple(p) for p in paints) + + # COLR layers is unusual in that it modifies shared state + # so we need a callback into an object + def _beforeBuildPaintColrLayers(self, dest, source): + paint = ot.Paint() + paint.Format = int(ot.PaintFormat.PaintColrLayers) + self.slices.append(paint) + + # Sketchy gymnastics: a sequence input will have dropped it's layers + # into NumLayers; get it back + if isinstance(source.get("NumLayers", None), collections.abc.Sequence): + layers = source["NumLayers"] + else: + layers = source["Layers"] + + # Convert maps seqs or whatever into typed objects + layers = [self.buildPaint(l) for l in layers] + + # No reason to have a colr layers with just one entry + if len(layers) == 1: + return layers[0], {} + + # Look for reuse, with preference to longer sequences + # This may make the layer list smaller + found_reuse = True + while found_reuse: + found_reuse = False + + ranges = sorted( + _reuse_ranges(len(layers)), + key=lambda t: (t[1] - t[0], t[1], t[0]), + reverse=True, + ) + for lbound, ubound in ranges: + reuse_lbound = self.reusePool.get( + self._as_tuple(layers[lbound:ubound]), -1 + ) + if reuse_lbound == -1: + continue + new_slice = ot.Paint() + new_slice.Format = int(ot.PaintFormat.PaintColrLayers) + new_slice.NumLayers = ubound - lbound + new_slice.FirstLayerIndex = reuse_lbound + layers = layers[:lbound] + [new_slice] + layers[ubound:] + found_reuse = True + break + + # The layer list is now final; if it's too big we need to tree it + is_tree = len(layers) > MAX_PAINT_COLR_LAYER_COUNT + layers = _build_n_ary_tree(layers, n=MAX_PAINT_COLR_LAYER_COUNT) + + # We now have a tree of sequences with Paint leaves. + # Convert the sequences into PaintColrLayers. + def listToColrLayers(layer): + if isinstance(layer, collections.abc.Sequence): + return self.buildPaint( + { + "Format": ot.PaintFormat.PaintColrLayers, + "Layers": [listToColrLayers(l) for l in layer], + } + ) + return layer + + layers = [listToColrLayers(l) for l in layers] + + paint.NumLayers = len(layers) + paint.FirstLayerIndex = len(self.layers) + self.layers.extend(layers) + + # Register our parts for reuse provided we aren't a tree + # If we are a tree the leaves registered for reuse and that will suffice + if not is_tree: + for lbound, ubound in _reuse_ranges(len(layers)): + self.reusePool[self._as_tuple(layers[lbound:ubound])] = ( + lbound + paint.FirstLayerIndex + ) + + # we've fully built dest; empty source prevents generalized build from kicking in + return paint, {} + + def buildPaint(self, paint: _PaintInput) -> ot.Paint: + return self.tableBuilder.build(ot.Paint, paint) + + def build(self) -> Optional[ot.LayerList]: + if not self.layers: + return None + layers = ot.LayerList() + layers.LayerCount = len(self.layers) + layers.Paint = self.layers + return layers + + +def buildBaseGlyphPaintRecord( + baseGlyph: str, layerBuilder: LayerListBuilder, paint: _PaintInput +) -> ot.BaseGlyphList: + self = ot.BaseGlyphPaintRecord() + self.BaseGlyph = baseGlyph + self.Paint = layerBuilder.buildPaint(paint) + return self + + +def _format_glyph_errors(errors: Mapping[str, Exception]) -> str: + lines = [] + for baseGlyph, error in sorted(errors.items()): + lines.append(f" {baseGlyph} => {type(error).__name__}: {error}") + return "\n".join(lines) + + +def buildColrV1( + colorGlyphs: _ColorGlyphsDict, + glyphMap: Optional[Mapping[str, int]] = None, +) -> Tuple[Optional[ot.LayerList], ot.BaseGlyphList]: + if glyphMap is not None: + colorGlyphItems = sorted( + colorGlyphs.items(), key=lambda item: glyphMap[item[0]] + ) + else: + colorGlyphItems = colorGlyphs.items() + + errors = {} + baseGlyphs = [] + layerBuilder = LayerListBuilder() + for baseGlyph, paint in colorGlyphItems: + try: + baseGlyphs.append(buildBaseGlyphPaintRecord(baseGlyph, layerBuilder, paint)) + + except (ColorLibError, OverflowError, ValueError, TypeError) as e: + errors[baseGlyph] = e + + if errors: + failed_glyphs = _format_glyph_errors(errors) + exc = ColorLibError(f"Failed to build BaseGlyphList:\n{failed_glyphs}") + exc.errors = errors + raise exc from next(iter(errors.values())) + + layers = layerBuilder.build() + glyphs = ot.BaseGlyphList() + glyphs.BaseGlyphCount = len(baseGlyphs) + glyphs.BaseGlyphPaintRecord = baseGlyphs + return (layers, glyphs) + + +def _build_n_ary_tree(leaves, n): + """Build N-ary tree from sequence of leaf nodes. + + Return a list of lists where each non-leaf node is a list containing + max n nodes. + """ + if not leaves: + return [] + + assert n > 1 + + depth = ceil(log(len(leaves), n)) + + if depth <= 1: + return list(leaves) + + # Fully populate complete subtrees of root until we have enough leaves left + root = [] + unassigned = None + full_step = n ** (depth - 1) + for i in range(0, len(leaves), full_step): + subtree = leaves[i : i + full_step] + if len(subtree) < full_step: + unassigned = subtree + break + while len(subtree) > n: + subtree = [subtree[k : k + n] for k in range(0, len(subtree), n)] + root.append(subtree) + + if unassigned: + # Recurse to fill the last subtree, which is the only partially populated one + subtree = _build_n_ary_tree(unassigned, n) + if len(subtree) <= n - len(root): + # replace last subtree with its children if they can still fit + root.extend(subtree) + else: + root.append(subtree) + assert len(root) <= n + + return root diff --git a/.venv/lib/python3.9/site-packages/fontTools/colorLib/errors.py b/.venv/lib/python3.9/site-packages/fontTools/colorLib/errors.py new file mode 100644 index 00000000..a0bdda17 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/colorLib/errors.py @@ -0,0 +1,3 @@ + +class ColorLibError(Exception): + pass diff --git a/.venv/lib/python3.9/site-packages/fontTools/colorLib/geometry.py b/.venv/lib/python3.9/site-packages/fontTools/colorLib/geometry.py new file mode 100644 index 00000000..e62aead1 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/colorLib/geometry.py @@ -0,0 +1,145 @@ +"""Helpers for manipulating 2D points and vectors in COLR table.""" + +from math import copysign, cos, hypot, pi +from fontTools.misc.roundTools import otRound + + +def _vector_between(origin, target): + return (target[0] - origin[0], target[1] - origin[1]) + + +def _round_point(pt): + return (otRound(pt[0]), otRound(pt[1])) + + +def _unit_vector(vec): + length = hypot(*vec) + if length == 0: + return None + return (vec[0] / length, vec[1] / length) + + +# This is the same tolerance used by Skia's SkTwoPointConicalGradient.cpp to detect +# when a radial gradient's focal point lies on the end circle. +_NEARLY_ZERO = 1 / (1 << 12) # 0.000244140625 + + +# The unit vector's X and Y components are respectively +# U = (cos(α), sin(α)) +# where α is the angle between the unit vector and the positive x axis. +_UNIT_VECTOR_THRESHOLD = cos(3 / 8 * pi) # == sin(1/8 * pi) == 0.38268343236508984 + + +def _rounding_offset(direction): + # Return 2-tuple of -/+ 1.0 or 0.0 approximately based on the direction vector. + # We divide the unit circle in 8 equal slices oriented towards the cardinal + # (N, E, S, W) and intermediate (NE, SE, SW, NW) directions. To each slice we + # map one of the possible cases: -1, 0, +1 for either X and Y coordinate. + # E.g. Return (+1.0, -1.0) if unit vector is oriented towards SE, or + # (-1.0, 0.0) if it's pointing West, etc. + uv = _unit_vector(direction) + if not uv: + return (0, 0) + + result = [] + for uv_component in uv: + if -_UNIT_VECTOR_THRESHOLD <= uv_component < _UNIT_VECTOR_THRESHOLD: + # unit vector component near 0: direction almost orthogonal to the + # direction of the current axis, thus keep coordinate unchanged + result.append(0) + else: + # nudge coord by +/- 1.0 in direction of unit vector + result.append(copysign(1.0, uv_component)) + return tuple(result) + + +class Circle: + def __init__(self, centre, radius): + self.centre = centre + self.radius = radius + + def __repr__(self): + return f"Circle(centre={self.centre}, radius={self.radius})" + + def round(self): + return Circle(_round_point(self.centre), otRound(self.radius)) + + def inside(self, outer_circle): + dist = self.radius + hypot(*_vector_between(self.centre, outer_circle.centre)) + return ( + abs(outer_circle.radius - dist) <= _NEARLY_ZERO + or outer_circle.radius > dist + ) + + def concentric(self, other): + return self.centre == other.centre + + def move(self, dx, dy): + self.centre = (self.centre[0] + dx, self.centre[1] + dy) + + +def round_start_circle_stable_containment(c0, r0, c1, r1): + """Round start circle so that it stays inside/outside end circle after rounding. + + The rounding of circle coordinates to integers may cause an abrupt change + if the start circle c0 is so close to the end circle c1's perimiter that + it ends up falling outside (or inside) as a result of the rounding. + To keep the gradient unchanged, we nudge it in the right direction. + + See: + https://github.com/googlefonts/colr-gradients-spec/issues/204 + https://github.com/googlefonts/picosvg/issues/158 + """ + start, end = Circle(c0, r0), Circle(c1, r1) + + inside_before_round = start.inside(end) + + round_start = start.round() + round_end = end.round() + inside_after_round = round_start.inside(round_end) + + if inside_before_round == inside_after_round: + return round_start + elif inside_after_round: + # start was outside before rounding: we need to push start away from end + direction = _vector_between(round_end.centre, round_start.centre) + radius_delta = +1.0 + else: + # start was inside before rounding: we need to push start towards end + direction = _vector_between(round_start.centre, round_end.centre) + radius_delta = -1.0 + dx, dy = _rounding_offset(direction) + + # At most 2 iterations ought to be enough to converge. Before the loop, we + # know the start circle didn't keep containment after normal rounding; thus + # we continue adjusting by -/+ 1.0 until containment is restored. + # Normal rounding can at most move each coordinates -/+0.5; in the worst case + # both the start and end circle's centres and radii will be rounded in opposite + # directions, e.g. when they move along a 45 degree diagonal: + # c0 = (1.5, 1.5) ===> (2.0, 2.0) + # r0 = 0.5 ===> 1.0 + # c1 = (0.499, 0.499) ===> (0.0, 0.0) + # r1 = 2.499 ===> 2.0 + # In this example, the relative distance between the circles, calculated + # as r1 - (r0 + distance(c0, c1)) is initially 0.57437 (c0 is inside c1), and + # -1.82842 after rounding (c0 is now outside c1). Nudging c0 by -1.0 on both + # x and y axes moves it towards c1 by hypot(-1.0, -1.0) = 1.41421. Two of these + # moves cover twice that distance, which is enough to restore containment. + max_attempts = 2 + for _ in range(max_attempts): + if round_start.concentric(round_end): + # can't move c0 towards c1 (they are the same), so we change the radius + round_start.radius += radius_delta + assert round_start.radius >= 0 + else: + round_start.move(dx, dy) + if inside_before_round == round_start.inside(round_end): + break + else: # likely a bug + raise AssertionError( + f"Rounding circle {start} " + f"{'inside' if inside_before_round else 'outside'} " + f"{end} failed after {max_attempts} attempts!" + ) + + return round_start diff --git a/.venv/lib/python3.9/site-packages/fontTools/colorLib/table_builder.py b/.venv/lib/python3.9/site-packages/fontTools/colorLib/table_builder.py new file mode 100644 index 00000000..763115b9 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/colorLib/table_builder.py @@ -0,0 +1,225 @@ +""" +colorLib.table_builder: Generic helper for filling in BaseTable derivatives from tuples and maps and such. + +""" + +import collections +import enum +from fontTools.ttLib.tables.otBase import ( + BaseTable, + FormatSwitchingBaseTable, + UInt8FormatSwitchingBaseTable, +) +from fontTools.ttLib.tables.otConverters import ( + ComputedInt, + SimpleValue, + Struct, + Short, + UInt8, + UShort, + IntValue, + FloatValue, + OptionalValue, +) +from fontTools.misc.roundTools import otRound + + +class BuildCallback(enum.Enum): + """Keyed on (BEFORE_BUILD, class[, Format if available]). + Receives (dest, source). + Should return (dest, source), which can be new objects. + """ + + BEFORE_BUILD = enum.auto() + + """Keyed on (AFTER_BUILD, class[, Format if available]). + Receives (dest). + Should return dest, which can be a new object. + """ + AFTER_BUILD = enum.auto() + + """Keyed on (CREATE_DEFAULT, class[, Format if available]). + Receives no arguments. + Should return a new instance of class. + """ + CREATE_DEFAULT = enum.auto() + + +def _assignable(convertersByName): + return {k: v for k, v in convertersByName.items() if not isinstance(v, ComputedInt)} + + +def _isNonStrSequence(value): + return isinstance(value, collections.abc.Sequence) and not isinstance(value, str) + + +def _split_format(cls, source): + if _isNonStrSequence(source): + assert len(source) > 0, f"{cls} needs at least format from {source}" + fmt, remainder = source[0], source[1:] + elif isinstance(source, collections.abc.Mapping): + assert "Format" in source, f"{cls} needs at least Format from {source}" + remainder = source.copy() + fmt = remainder.pop("Format") + else: + raise ValueError(f"Not sure how to populate {cls} from {source}") + + assert isinstance( + fmt, collections.abc.Hashable + ), f"{cls} Format is not hashable: {fmt!r}" + assert ( + fmt in cls.convertersByName + ), f"{cls} invalid Format: {fmt!r}" + + return fmt, remainder + + +class TableBuilder: + """ + Helps to populate things derived from BaseTable from maps, tuples, etc. + + A table of lifecycle callbacks may be provided to add logic beyond what is possible + based on otData info for the target class. See BuildCallbacks. + """ + + def __init__(self, callbackTable=None): + if callbackTable is None: + callbackTable = {} + self._callbackTable = callbackTable + + def _convert(self, dest, field, converter, value): + enumClass = getattr(converter, "enumClass", None) + + if enumClass: + if isinstance(value, enumClass): + pass + elif isinstance(value, str): + try: + value = getattr(enumClass, value.upper()) + except AttributeError: + raise ValueError(f"{value} is not a valid {enumClass}") + else: + value = enumClass(value) + + elif isinstance(converter, IntValue): + value = otRound(value) + elif isinstance(converter, FloatValue): + value = float(value) + + elif isinstance(converter, Struct): + if converter.repeat: + if _isNonStrSequence(value): + value = [self.build(converter.tableClass, v) for v in value] + else: + value = [self.build(converter.tableClass, value)] + setattr(dest, converter.repeat, len(value)) + else: + value = self.build(converter.tableClass, value) + elif callable(converter): + value = converter(value) + + setattr(dest, field, value) + + def build(self, cls, source): + assert issubclass(cls, BaseTable) + + if isinstance(source, cls): + return source + + callbackKey = (cls,) + fmt = None + if issubclass(cls, FormatSwitchingBaseTable): + fmt, source = _split_format(cls, source) + callbackKey = (cls, fmt) + + dest = self._callbackTable.get( + (BuildCallback.CREATE_DEFAULT,) + callbackKey, lambda: cls() + )() + assert isinstance(dest, cls) + + convByName = _assignable(cls.convertersByName) + skippedFields = set() + + # For format switchers we need to resolve converters based on format + if issubclass(cls, FormatSwitchingBaseTable): + dest.Format = fmt + convByName = _assignable(convByName[dest.Format]) + skippedFields.add("Format") + + # Convert sequence => mapping so before thunk only has to handle one format + if _isNonStrSequence(source): + # Sequence (typically list or tuple) assumed to match fields in declaration order + assert len(source) <= len( + convByName + ), f"Sequence of {len(source)} too long for {cls}; expected <= {len(convByName)} values" + source = dict(zip(convByName.keys(), source)) + + dest, source = self._callbackTable.get( + (BuildCallback.BEFORE_BUILD,) + callbackKey, lambda d, s: (d, s) + )(dest, source) + + if isinstance(source, collections.abc.Mapping): + for field, value in source.items(): + if field in skippedFields: + continue + converter = convByName.get(field, None) + if not converter: + raise ValueError( + f"Unrecognized field {field} for {cls}; expected one of {sorted(convByName.keys())}" + ) + self._convert(dest, field, converter, value) + else: + # let's try as a 1-tuple + dest = self.build(cls, (source,)) + + for field, conv in convByName.items(): + if not hasattr(dest, field) and isinstance(conv, OptionalValue): + setattr(dest, field, conv.DEFAULT) + + dest = self._callbackTable.get( + (BuildCallback.AFTER_BUILD,) + callbackKey, lambda d: d + )(dest) + + return dest + + +class TableUnbuilder: + def __init__(self, callbackTable=None): + if callbackTable is None: + callbackTable = {} + self._callbackTable = callbackTable + + def unbuild(self, table): + assert isinstance(table, BaseTable) + + source = {} + + callbackKey = (type(table),) + if isinstance(table, FormatSwitchingBaseTable): + source["Format"] = int(table.Format) + callbackKey += (table.Format,) + + for converter in table.getConverters(): + if isinstance(converter, ComputedInt): + continue + value = getattr(table, converter.name) + + enumClass = getattr(converter, "enumClass", None) + if enumClass: + source[converter.name] = value.name.lower() + elif isinstance(converter, Struct): + if converter.repeat: + source[converter.name] = [self.unbuild(v) for v in value] + else: + source[converter.name] = self.unbuild(value) + elif isinstance(converter, SimpleValue): + # "simple" values (e.g. int, float, str) need no further un-building + source[converter.name] = value + else: + raise NotImplementedError( + "Don't know how unbuild {value!r} with {converter!r}" + ) + + source = self._callbackTable.get(callbackKey, lambda s: s)(source) + + return source diff --git a/.venv/lib/python3.9/site-packages/fontTools/colorLib/unbuilder.py b/.venv/lib/python3.9/site-packages/fontTools/colorLib/unbuilder.py new file mode 100644 index 00000000..fa229b09 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/colorLib/unbuilder.py @@ -0,0 +1,82 @@ +from fontTools.ttLib.tables import otTables as ot +from .table_builder import TableUnbuilder + + +def unbuildColrV1(layerList, baseGlyphList): + layers = [] + if layerList: + layers = layerList.Paint + unbuilder = LayerListUnbuilder(layers) + return { + rec.BaseGlyph: unbuilder.unbuildPaint(rec.Paint) + for rec in baseGlyphList.BaseGlyphPaintRecord + } + + +def _flatten(lst): + for el in lst: + if isinstance(el, list): + yield from _flatten(el) + else: + yield el + + +class LayerListUnbuilder: + def __init__(self, layers): + self.layers = layers + + callbacks = { + ( + ot.Paint, + ot.PaintFormat.PaintColrLayers, + ): self._unbuildPaintColrLayers, + } + self.tableUnbuilder = TableUnbuilder(callbacks) + + def unbuildPaint(self, paint): + assert isinstance(paint, ot.Paint) + return self.tableUnbuilder.unbuild(paint) + + def _unbuildPaintColrLayers(self, source): + assert source["Format"] == ot.PaintFormat.PaintColrLayers + + layers = list( + _flatten( + [ + self.unbuildPaint(childPaint) + for childPaint in self.layers[ + source["FirstLayerIndex"] : source["FirstLayerIndex"] + + source["NumLayers"] + ] + ] + ) + ) + + if len(layers) == 1: + return layers[0] + + return {"Format": source["Format"], "Layers": layers} + + +if __name__ == "__main__": + from pprint import pprint + import sys + from fontTools.ttLib import TTFont + + try: + fontfile = sys.argv[1] + except IndexError: + sys.exit("usage: fonttools colorLib.unbuilder FONTFILE") + + font = TTFont(fontfile) + colr = font["COLR"] + if colr.version < 1: + sys.exit(f"error: No COLR table version=1 found in {fontfile}") + + colorGlyphs = unbuildColrV1( + colr.table.LayerList, + colr.table.BaseGlyphList, + ignoreVarIdx=not colr.table.VarStore, + ) + + pprint(colorGlyphs) diff --git a/.venv/lib/python3.9/site-packages/fontTools/cu2qu/__init__.py b/.venv/lib/python3.9/site-packages/fontTools/cu2qu/__init__.py new file mode 100644 index 00000000..4ae6356e --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/cu2qu/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2016 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .cu2qu import * diff --git a/.venv/lib/python3.9/site-packages/fontTools/cu2qu/__main__.py b/.venv/lib/python3.9/site-packages/fontTools/cu2qu/__main__.py new file mode 100644 index 00000000..084bf8f9 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/cu2qu/__main__.py @@ -0,0 +1,6 @@ +import sys +from .cli import main + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/.venv/lib/python3.9/site-packages/fontTools/cu2qu/__pycache__/__init__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/cu2qu/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1082f2632aa430615bd104abf96a640a63c3e1f1 GIT binary patch literal 205 zcmYe~<>g`k0+X$?6SJ5Y7#@Q-$N(tD-~hzMJU}9aA%!uAA%r1?DVRZ%`6VMzNR#mv zqn4j0V-#z0sZn9+N`@k4peUI56{DY1ZmZ~36nNgCTryrc0k)NNV zuUD3uSEiqnnWSG(S(1^TXRK$bUz}Nzs#}nloSm4STCAUzpH~tBR9dVLHeEkHJ~J<~ bBtBlRpz;=nO>TZlX-=vgKhVO@K+FIDi%m6t literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/cu2qu/__pycache__/__main__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/cu2qu/__pycache__/__main__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..37a077f50933430559ce36677ee5525ea39b7bf8 GIT binary patch literal 285 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 bavn;Y)P|(e-qgyREjWd8scbvrXe<8%CCl=^ literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/cu2qu/__pycache__/cu2qu.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/cu2qu/__pycache__/cu2qu.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..75249b6d78bff09c2392197b2d5cc3f3791963e7 GIT binary patch literal 14716 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 atf{l+thr!Ln&*_q)-#Bx{+D&zH2)hAE^@E{ literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/cu2qu/cli.py b/.venv/lib/python3.9/site-packages/fontTools/cu2qu/cli.py new file mode 100644 index 00000000..34520fc0 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/cu2qu/cli.py @@ -0,0 +1,183 @@ +import os +import argparse +import logging +import shutil +import multiprocessing as mp +from contextlib import closing +from functools import partial + +import fontTools +from .ufo import font_to_quadratic, fonts_to_quadratic + +ufo_module = None +try: + import ufoLib2 as ufo_module +except ImportError: + try: + import defcon as ufo_module + except ImportError as e: + pass + + +logger = logging.getLogger("fontTools.cu2qu") + + +def _cpu_count(): + try: + return mp.cpu_count() + except NotImplementedError: # pragma: no cover + return 1 + + +def open_ufo(path): + if hasattr(ufo_module.Font, "open"): # ufoLib2 + return ufo_module.Font.open(path) + return ufo_module.Font(path) # defcon + + +def _font_to_quadratic(input_path, output_path=None, **kwargs): + ufo = open_ufo(input_path) + logger.info('Converting curves for %s', input_path) + if font_to_quadratic(ufo, **kwargs): + logger.info("Saving %s", output_path) + if output_path: + ufo.save(output_path) + else: + ufo.save() # save in-place + elif output_path: + _copytree(input_path, output_path) + + +def _samepath(path1, path2): + # TODO on python3+, there's os.path.samefile + path1 = os.path.normcase(os.path.abspath(os.path.realpath(path1))) + path2 = os.path.normcase(os.path.abspath(os.path.realpath(path2))) + return path1 == path2 + + +def _copytree(input_path, output_path): + if _samepath(input_path, output_path): + logger.debug("input and output paths are the same file; skipped copy") + return + if os.path.exists(output_path): + shutil.rmtree(output_path) + shutil.copytree(input_path, output_path) + + +def main(args=None): + """Convert a UFO font from cubic to quadratic curves""" + parser = argparse.ArgumentParser(prog="cu2qu") + parser.add_argument( + "--version", action="version", version=fontTools.__version__) + parser.add_argument( + "infiles", + nargs="+", + metavar="INPUT", + help="one or more input UFO source file(s).") + parser.add_argument("-v", "--verbose", action="count", default=0) + parser.add_argument( + "-e", + "--conversion-error", + type=float, + metavar="ERROR", + default=None, + help="maxiumum approximation error measured in EM (default: 0.001)") + parser.add_argument( + "--keep-direction", + dest="reverse_direction", + action="store_false", + help="do not reverse the contour direction") + + mode_parser = parser.add_mutually_exclusive_group() + mode_parser.add_argument( + "-i", + "--interpolatable", + action="store_true", + help="whether curve conversion should keep interpolation compatibility" + ) + mode_parser.add_argument( + "-j", + "--jobs", + type=int, + nargs="?", + default=1, + const=_cpu_count(), + metavar="N", + help="Convert using N multiple processes (default: %(default)s)") + + output_parser = parser.add_mutually_exclusive_group() + output_parser.add_argument( + "-o", + "--output-file", + default=None, + metavar="OUTPUT", + help=("output filename for the converted UFO. By default fonts are " + "modified in place. This only works with a single input.")) + output_parser.add_argument( + "-d", + "--output-dir", + default=None, + metavar="DIRECTORY", + help="output directory where to save converted UFOs") + + options = parser.parse_args(args) + + if ufo_module is None: + parser.error("Either ufoLib2 or defcon are required to run this script.") + + if not options.verbose: + level = "WARNING" + elif options.verbose == 1: + level = "INFO" + else: + level = "DEBUG" + logging.basicConfig(level=level) + + if len(options.infiles) > 1 and options.output_file: + parser.error("-o/--output-file can't be used with multile inputs") + + if options.output_dir: + output_dir = options.output_dir + if not os.path.exists(output_dir): + os.mkdir(output_dir) + elif not os.path.isdir(output_dir): + parser.error("'%s' is not a directory" % output_dir) + output_paths = [ + os.path.join(output_dir, os.path.basename(p)) + for p in options.infiles + ] + elif options.output_file: + output_paths = [options.output_file] + else: + # save in-place + output_paths = [None] * len(options.infiles) + + kwargs = dict(dump_stats=options.verbose > 0, + max_err_em=options.conversion_error, + reverse_direction=options.reverse_direction) + + if options.interpolatable: + logger.info('Converting curves compatibly') + ufos = [open_ufo(infile) for infile in options.infiles] + if fonts_to_quadratic(ufos, **kwargs): + for ufo, output_path in zip(ufos, output_paths): + logger.info("Saving %s", output_path) + if output_path: + ufo.save(output_path) + else: + ufo.save() + else: + for input_path, output_path in zip(options.infiles, output_paths): + if output_path: + _copytree(input_path, output_path) + else: + jobs = min(len(options.infiles), + options.jobs) if options.jobs > 1 else 1 + if jobs > 1: + func = partial(_font_to_quadratic, **kwargs) + logger.info('Running %d parallel processes', jobs) + with closing(mp.Pool(jobs)) as pool: + pool.starmap(func, zip(options.infiles, output_paths)) + else: + for input_path, output_path in zip(options.infiles, output_paths): + _font_to_quadratic(input_path, output_path, **kwargs) diff --git a/.venv/lib/python3.9/site-packages/fontTools/cu2qu/cu2qu.py b/.venv/lib/python3.9/site-packages/fontTools/cu2qu/cu2qu.py new file mode 100644 index 00000000..c9ce93ae --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/cu2qu/cu2qu.py @@ -0,0 +1,496 @@ +#cython: language_level=3 +#distutils: define_macros=CYTHON_TRACE_NOGIL=1 + +# Copyright 2015 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +try: + import cython +except ImportError: + # if cython not installed, use mock module with no-op decorators and types + from fontTools.misc import cython + +import math + +from .errors import Error as Cu2QuError, ApproxNotFoundError + + +__all__ = ['curve_to_quadratic', 'curves_to_quadratic'] + +MAX_N = 100 + +NAN = float("NaN") + + +if cython.compiled: + # Yep, I'm compiled. + COMPILED = True +else: + # Just a lowly interpreted script. + COMPILED = False + + +@cython.cfunc +@cython.inline +@cython.returns(cython.double) +@cython.locals(v1=cython.complex, v2=cython.complex) +def dot(v1, v2): + """Return the dot product of two vectors. + + Args: + v1 (complex): First vector. + v2 (complex): Second vector. + + Returns: + double: Dot product. + """ + return (v1 * v2.conjugate()).real + + +@cython.cfunc +@cython.inline +@cython.locals(a=cython.complex, b=cython.complex, c=cython.complex, d=cython.complex) +@cython.locals(_1=cython.complex, _2=cython.complex, _3=cython.complex, _4=cython.complex) +def calc_cubic_points(a, b, c, d): + _1 = d + _2 = (c / 3.0) + d + _3 = (b + c) / 3.0 + _2 + _4 = a + d + c + b + return _1, _2, _3, _4 + + +@cython.cfunc +@cython.inline +@cython.locals(p0=cython.complex, p1=cython.complex, p2=cython.complex, p3=cython.complex) +@cython.locals(a=cython.complex, b=cython.complex, c=cython.complex, d=cython.complex) +def calc_cubic_parameters(p0, p1, p2, p3): + c = (p1 - p0) * 3.0 + b = (p2 - p1) * 3.0 - c + d = p0 + a = p3 - d - c - b + return a, b, c, d + + +@cython.cfunc +@cython.locals(p0=cython.complex, p1=cython.complex, p2=cython.complex, p3=cython.complex) +def split_cubic_into_n_iter(p0, p1, p2, p3, n): + """Split a cubic Bezier into n equal parts. + + Splits the curve into `n` equal parts by curve time. + (t=0..1/n, t=1/n..2/n, ...) + + Args: + p0 (complex): Start point of curve. + p1 (complex): First handle of curve. + p2 (complex): Second handle of curve. + p3 (complex): End point of curve. + + Returns: + An iterator yielding the control points (four complex values) of the + subcurves. + """ + # Hand-coded special-cases + if n == 2: + return iter(split_cubic_into_two(p0, p1, p2, p3)) + if n == 3: + return iter(split_cubic_into_three(p0, p1, p2, p3)) + if n == 4: + a, b = split_cubic_into_two(p0, p1, p2, p3) + return iter(split_cubic_into_two(*a) + split_cubic_into_two(*b)) + if n == 6: + a, b = split_cubic_into_two(p0, p1, p2, p3) + return iter(split_cubic_into_three(*a) + split_cubic_into_three(*b)) + + return _split_cubic_into_n_gen(p0,p1,p2,p3,n) + + +@cython.locals(p0=cython.complex, p1=cython.complex, p2=cython.complex, p3=cython.complex, n=cython.int) +@cython.locals(a=cython.complex, b=cython.complex, c=cython.complex, d=cython.complex) +@cython.locals(dt=cython.double, delta_2=cython.double, delta_3=cython.double, i=cython.int) +@cython.locals(a1=cython.complex, b1=cython.complex, c1=cython.complex, d1=cython.complex) +def _split_cubic_into_n_gen(p0, p1, p2, p3, n): + a, b, c, d = calc_cubic_parameters(p0, p1, p2, p3) + dt = 1 / n + delta_2 = dt * dt + delta_3 = dt * delta_2 + for i in range(n): + t1 = i * dt + t1_2 = t1 * t1 + # calc new a, b, c and d + a1 = a * delta_3 + b1 = (3*a*t1 + b) * delta_2 + c1 = (2*b*t1 + c + 3*a*t1_2) * dt + d1 = a*t1*t1_2 + b*t1_2 + c*t1 + d + yield calc_cubic_points(a1, b1, c1, d1) + + +@cython.locals(p0=cython.complex, p1=cython.complex, p2=cython.complex, p3=cython.complex) +@cython.locals(mid=cython.complex, deriv3=cython.complex) +def split_cubic_into_two(p0, p1, p2, p3): + """Split a cubic Bezier into two equal parts. + + Splits the curve into two equal parts at t = 0.5 + + Args: + p0 (complex): Start point of curve. + p1 (complex): First handle of curve. + p2 (complex): Second handle of curve. + p3 (complex): End point of curve. + + Returns: + tuple: Two cubic Beziers (each expressed as a tuple of four complex + values). + """ + mid = (p0 + 3 * (p1 + p2) + p3) * .125 + deriv3 = (p3 + p2 - p1 - p0) * .125 + return ((p0, (p0 + p1) * .5, mid - deriv3, mid), + (mid, mid + deriv3, (p2 + p3) * .5, p3)) + + +@cython.locals(p0=cython.complex, p1=cython.complex, p2=cython.complex, p3=cython.complex, _27=cython.double) +@cython.locals(mid1=cython.complex, deriv1=cython.complex, mid2=cython.complex, deriv2=cython.complex) +def split_cubic_into_three(p0, p1, p2, p3, _27=1/27): + """Split a cubic Bezier into three equal parts. + + Splits the curve into three equal parts at t = 1/3 and t = 2/3 + + Args: + p0 (complex): Start point of curve. + p1 (complex): First handle of curve. + p2 (complex): Second handle of curve. + p3 (complex): End point of curve. + + Returns: + tuple: Three cubic Beziers (each expressed as a tuple of four complex + values). + """ + # we define 1/27 as a keyword argument so that it will be evaluated only + # once but still in the scope of this function + mid1 = (8*p0 + 12*p1 + 6*p2 + p3) * _27 + deriv1 = (p3 + 3*p2 - 4*p0) * _27 + mid2 = (p0 + 6*p1 + 12*p2 + 8*p3) * _27 + deriv2 = (4*p3 - 3*p1 - p0) * _27 + return ((p0, (2*p0 + p1) / 3.0, mid1 - deriv1, mid1), + (mid1, mid1 + deriv1, mid2 - deriv2, mid2), + (mid2, mid2 + deriv2, (p2 + 2*p3) / 3.0, p3)) + + +@cython.returns(cython.complex) +@cython.locals(t=cython.double, p0=cython.complex, p1=cython.complex, p2=cython.complex, p3=cython.complex) +@cython.locals(_p1=cython.complex, _p2=cython.complex) +def cubic_approx_control(t, p0, p1, p2, p3): + """Approximate a cubic Bezier using a quadratic one. + + Args: + t (double): Position of control point. + p0 (complex): Start point of curve. + p1 (complex): First handle of curve. + p2 (complex): Second handle of curve. + p3 (complex): End point of curve. + + Returns: + complex: Location of candidate control point on quadratic curve. + """ + _p1 = p0 + (p1 - p0) * 1.5 + _p2 = p3 + (p2 - p3) * 1.5 + return _p1 + (_p2 - _p1) * t + + +@cython.returns(cython.complex) +@cython.locals(a=cython.complex, b=cython.complex, c=cython.complex, d=cython.complex) +@cython.locals(ab=cython.complex, cd=cython.complex, p=cython.complex, h=cython.double) +def calc_intersect(a, b, c, d): + """Calculate the intersection of two lines. + + Args: + a (complex): Start point of first line. + b (complex): End point of first line. + c (complex): Start point of second line. + d (complex): End point of second line. + + Returns: + complex: Location of intersection if one present, ``complex(NaN,NaN)`` + if no intersection was found. + """ + ab = b - a + cd = d - c + p = ab * 1j + try: + h = dot(p, a - c) / dot(p, cd) + except ZeroDivisionError: + return complex(NAN, NAN) + return c + cd * h + + +@cython.cfunc +@cython.returns(cython.int) +@cython.locals(tolerance=cython.double, p0=cython.complex, p1=cython.complex, p2=cython.complex, p3=cython.complex) +@cython.locals(mid=cython.complex, deriv3=cython.complex) +def cubic_farthest_fit_inside(p0, p1, p2, p3, tolerance): + """Check if a cubic Bezier lies within a given distance of the origin. + + "Origin" means *the* origin (0,0), not the start of the curve. Note that no + checks are made on the start and end positions of the curve; this function + only checks the inside of the curve. + + Args: + p0 (complex): Start point of curve. + p1 (complex): First handle of curve. + p2 (complex): Second handle of curve. + p3 (complex): End point of curve. + tolerance (double): Distance from origin. + + Returns: + bool: True if the cubic Bezier ``p`` entirely lies within a distance + ``tolerance`` of the origin, False otherwise. + """ + # First check p2 then p1, as p2 has higher error early on. + if abs(p2) <= tolerance and abs(p1) <= tolerance: + return True + + # Split. + mid = (p0 + 3 * (p1 + p2) + p3) * .125 + if abs(mid) > tolerance: + return False + deriv3 = (p3 + p2 - p1 - p0) * .125 + return (cubic_farthest_fit_inside(p0, (p0+p1)*.5, mid-deriv3, mid, tolerance) and + cubic_farthest_fit_inside(mid, mid+deriv3, (p2+p3)*.5, p3, tolerance)) + + +@cython.cfunc +@cython.locals(tolerance=cython.double, _2_3=cython.double) +@cython.locals(q1=cython.complex, c0=cython.complex, c1=cython.complex, c2=cython.complex, c3=cython.complex) +def cubic_approx_quadratic(cubic, tolerance, _2_3=2/3): + """Approximate a cubic Bezier with a single quadratic within a given tolerance. + + Args: + cubic (sequence): Four complex numbers representing control points of + the cubic Bezier curve. + tolerance (double): Permitted deviation from the original curve. + + Returns: + Three complex numbers representing control points of the quadratic + curve if it fits within the given tolerance, or ``None`` if no suitable + curve could be calculated. + """ + # we define 2/3 as a keyword argument so that it will be evaluated only + # once but still in the scope of this function + + q1 = calc_intersect(*cubic) + if math.isnan(q1.imag): + return None + c0 = cubic[0] + c3 = cubic[3] + c1 = c0 + (q1 - c0) * _2_3 + c2 = c3 + (q1 - c3) * _2_3 + if not cubic_farthest_fit_inside(0, + c1 - cubic[1], + c2 - cubic[2], + 0, tolerance): + return None + return c0, q1, c3 + + +@cython.cfunc +@cython.locals(n=cython.int, tolerance=cython.double, _2_3=cython.double) +@cython.locals(i=cython.int) +@cython.locals(c0=cython.complex, c1=cython.complex, c2=cython.complex, c3=cython.complex) +@cython.locals(q0=cython.complex, q1=cython.complex, next_q1=cython.complex, q2=cython.complex, d1=cython.complex) +def cubic_approx_spline(cubic, n, tolerance, _2_3=2/3): + """Approximate a cubic Bezier curve with a spline of n quadratics. + + Args: + cubic (sequence): Four complex numbers representing control points of + the cubic Bezier curve. + n (int): Number of quadratic Bezier curves in the spline. + tolerance (double): Permitted deviation from the original curve. + + Returns: + A list of ``n+2`` complex numbers, representing control points of the + quadratic spline if it fits within the given tolerance, or ``None`` if + no suitable spline could be calculated. + """ + # we define 2/3 as a keyword argument so that it will be evaluated only + # once but still in the scope of this function + + if n == 1: + return cubic_approx_quadratic(cubic, tolerance) + + cubics = split_cubic_into_n_iter(cubic[0], cubic[1], cubic[2], cubic[3], n) + + # calculate the spline of quadratics and check errors at the same time. + next_cubic = next(cubics) + next_q1 = cubic_approx_control(0, *next_cubic) + q2 = cubic[0] + d1 = 0j + spline = [cubic[0], next_q1] + for i in range(1, n+1): + + # Current cubic to convert + c0, c1, c2, c3 = next_cubic + + # Current quadratic approximation of current cubic + q0 = q2 + q1 = next_q1 + if i < n: + next_cubic = next(cubics) + next_q1 = cubic_approx_control(i / (n-1), *next_cubic) + spline.append(next_q1) + q2 = (q1 + next_q1) * .5 + else: + q2 = c3 + + # End-point deltas + d0 = d1 + d1 = q2 - c3 + + if (abs(d1) > tolerance or + not cubic_farthest_fit_inside(d0, + q0 + (q1 - q0) * _2_3 - c1, + q2 + (q1 - q2) * _2_3 - c2, + d1, + tolerance)): + return None + spline.append(cubic[3]) + + return spline + + +@cython.locals(max_err=cython.double) +@cython.locals(n=cython.int) +def curve_to_quadratic(curve, max_err): + """Approximate a cubic Bezier curve with a spline of n quadratics. + + Args: + cubic (sequence): Four 2D tuples representing control points of + the cubic Bezier curve. + max_err (double): Permitted deviation from the original curve. + + Returns: + A list of 2D tuples, representing control points of the quadratic + spline if it fits within the given tolerance, or ``None`` if no + suitable spline could be calculated. + """ + + curve = [complex(*p) for p in curve] + + for n in range(1, MAX_N + 1): + spline = cubic_approx_spline(curve, n, max_err) + if spline is not None: + # done. go home + return [(s.real, s.imag) for s in spline] + + raise ApproxNotFoundError(curve) + + + +@cython.locals(l=cython.int, last_i=cython.int, i=cython.int) +def curves_to_quadratic(curves, max_errors): + """Return quadratic Bezier splines approximating the input cubic Beziers. + + Args: + curves: A sequence of *n* curves, each curve being a sequence of four + 2D tuples. + max_errors: A sequence of *n* floats representing the maximum permissible + deviation from each of the cubic Bezier curves. + + Example:: + + >>> curves_to_quadratic( [ + ... [ (50,50), (100,100), (150,100), (200,50) ], + ... [ (75,50), (120,100), (150,75), (200,60) ] + ... ], [1,1] ) + [[(50.0, 50.0), (75.0, 75.0), (125.0, 91.66666666666666), (175.0, 75.0), (200.0, 50.0)], [(75.0, 50.0), (97.5, 75.0), (135.41666666666666, 82.08333333333333), (175.0, 67.5), (200.0, 60.0)]] + + The returned splines have "implied oncurve points" suitable for use in + TrueType ``glif`` outlines - i.e. in the first spline returned above, + the first quadratic segment runs from (50,50) to + ( (75 + 125)/2 , (120 + 91.666..)/2 ) = (100, 83.333...). + + Returns: + A list of splines, each spline being a list of 2D tuples. + + Raises: + fontTools.cu2qu.Errors.ApproxNotFoundError: if no suitable approximation + can be found for all curves with the given parameters. + """ + + curves = [[complex(*p) for p in curve] for curve in curves] + assert len(max_errors) == len(curves) + + l = len(curves) + splines = [None] * l + last_i = i = 0 + n = 1 + while True: + spline = cubic_approx_spline(curves[i], n, max_errors[i]) + if spline is None: + if n == MAX_N: + break + n += 1 + last_i = i + continue + splines[i] = spline + i = (i + 1) % l + if i == last_i: + # done. go home + return [[(s.real, s.imag) for s in spline] for spline in splines] + + raise ApproxNotFoundError(curves) + + +if __name__ == '__main__': + import random + import timeit + + MAX_ERR = 5 + + def generate_curve(): + return [ + tuple(float(random.randint(0, 2048)) for coord in range(2)) + for point in range(4)] + + def setup_curve_to_quadratic(): + return generate_curve(), MAX_ERR + + def setup_curves_to_quadratic(): + num_curves = 3 + return ( + [generate_curve() for curve in range(num_curves)], + [MAX_ERR] * num_curves) + + def run_benchmark( + benchmark_module, module, function, setup_suffix='', repeat=5, number=1000): + setup_func = 'setup_' + function + if setup_suffix: + print('%s with %s:' % (function, setup_suffix), end='') + setup_func += '_' + setup_suffix + else: + print('%s:' % function, end='') + + def wrapper(function, setup_func): + function = globals()[function] + setup_func = globals()[setup_func] + def wrapped(): + return function(*setup_func()) + return wrapped + results = timeit.repeat(wrapper(function, setup_func), repeat=repeat, number=number) + print('\t%5.1fus' % (min(results) * 1000000. / number)) + + def main(): + run_benchmark('cu2qu.benchmark', 'cu2qu', 'curve_to_quadratic') + run_benchmark('cu2qu.benchmark', 'cu2qu', 'curves_to_quadratic') + + random.seed(1) + main() diff --git a/.venv/lib/python3.9/site-packages/fontTools/cu2qu/errors.py b/.venv/lib/python3.9/site-packages/fontTools/cu2qu/errors.py new file mode 100644 index 00000000..74c4c227 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/cu2qu/errors.py @@ -0,0 +1,76 @@ +# Copyright 2016 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +class Error(Exception): + """Base Cu2Qu exception class for all other errors.""" + + +class ApproxNotFoundError(Error): + def __init__(self, curve): + message = "no approximation found: %s" % curve + super().__init__(message) + self.curve = curve + + +class UnequalZipLengthsError(Error): + pass + + +class IncompatibleGlyphsError(Error): + def __init__(self, glyphs): + assert len(glyphs) > 1 + self.glyphs = glyphs + names = set(repr(g.name) for g in glyphs) + if len(names) > 1: + self.combined_name = "{%s}" % ", ".join(sorted(names)) + else: + self.combined_name = names.pop() + + def __repr__(self): + return "<%s %s>" % (type(self).__name__, self.combined_name) + + +class IncompatibleSegmentNumberError(IncompatibleGlyphsError): + def __str__(self): + return "Glyphs named %s have different number of segments" % ( + self.combined_name + ) + + +class IncompatibleSegmentTypesError(IncompatibleGlyphsError): + def __init__(self, glyphs, segments): + IncompatibleGlyphsError.__init__(self, glyphs) + self.segments = segments + + def __str__(self): + lines = [] + ndigits = len(str(max(self.segments))) + for i, tags in sorted(self.segments.items()): + lines.append( + "%s: (%s)" % (str(i).rjust(ndigits), ", ".join(repr(t) for t in tags)) + ) + return "Glyphs named %s have incompatible segment types:\n %s" % ( + self.combined_name, + "\n ".join(lines), + ) + + +class IncompatibleFontsError(Error): + def __init__(self, glyph_errors): + self.glyph_errors = glyph_errors + + def __str__(self): + return "fonts contains incompatible glyphs: %s" % ( + ", ".join(repr(g) for g in sorted(self.glyph_errors.keys())) + ) diff --git a/.venv/lib/python3.9/site-packages/fontTools/cu2qu/ufo.py b/.venv/lib/python3.9/site-packages/fontTools/cu2qu/ufo.py new file mode 100644 index 00000000..447de7bb --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/cu2qu/ufo.py @@ -0,0 +1,324 @@ +# Copyright 2015 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +"""Converts cubic bezier curves to quadratic splines. + +Conversion is performed such that the quadratic splines keep the same end-curve +tangents as the original cubics. The approach is iterative, increasing the +number of segments for a spline until the error gets below a bound. + +Respective curves from multiple fonts will be converted at once to ensure that +the resulting splines are interpolation-compatible. +""" + +import logging +from fontTools.pens.basePen import AbstractPen +from fontTools.pens.pointPen import PointToSegmentPen +from fontTools.pens.reverseContourPen import ReverseContourPen + +from . import curves_to_quadratic +from .errors import ( + UnequalZipLengthsError, IncompatibleSegmentNumberError, + IncompatibleSegmentTypesError, IncompatibleGlyphsError, + IncompatibleFontsError) + + +__all__ = ['fonts_to_quadratic', 'font_to_quadratic'] + +# The default approximation error below is a relative value (1/1000 of the EM square). +# Later on, we convert it to absolute font units by multiplying it by a font's UPEM +# (see fonts_to_quadratic). +DEFAULT_MAX_ERR = 0.001 +CURVE_TYPE_LIB_KEY = "com.github.googlei18n.cu2qu.curve_type" + +logger = logging.getLogger(__name__) + + +_zip = zip +def zip(*args): + """Ensure each argument to zip has the same length. Also make sure a list is + returned for python 2/3 compatibility. + """ + + if len(set(len(a) for a in args)) != 1: + raise UnequalZipLengthsError(*args) + return list(_zip(*args)) + + +class GetSegmentsPen(AbstractPen): + """Pen to collect segments into lists of points for conversion. + + Curves always include their initial on-curve point, so some points are + duplicated between segments. + """ + + def __init__(self): + self._last_pt = None + self.segments = [] + + def _add_segment(self, tag, *args): + if tag in ['move', 'line', 'qcurve', 'curve']: + self._last_pt = args[-1] + self.segments.append((tag, args)) + + def moveTo(self, pt): + self._add_segment('move', pt) + + def lineTo(self, pt): + self._add_segment('line', pt) + + def qCurveTo(self, *points): + self._add_segment('qcurve', self._last_pt, *points) + + def curveTo(self, *points): + self._add_segment('curve', self._last_pt, *points) + + def closePath(self): + self._add_segment('close') + + def endPath(self): + self._add_segment('end') + + def addComponent(self, glyphName, transformation): + pass + + +def _get_segments(glyph): + """Get a glyph's segments as extracted by GetSegmentsPen.""" + + pen = GetSegmentsPen() + # glyph.draw(pen) + # We can't simply draw the glyph with the pen, but we must initialize the + # PointToSegmentPen explicitly with outputImpliedClosingLine=True. + # By default PointToSegmentPen does not outputImpliedClosingLine -- unless + # last and first point on closed contour are duplicated. Because we are + # converting multiple glyphs at the same time, we want to make sure + # this function returns the same number of segments, whether or not + # the last and first point overlap. + # https://github.com/googlefonts/fontmake/issues/572 + # https://github.com/fonttools/fonttools/pull/1720 + pointPen = PointToSegmentPen(pen, outputImpliedClosingLine=True) + glyph.drawPoints(pointPen) + return pen.segments + + +def _set_segments(glyph, segments, reverse_direction): + """Draw segments as extracted by GetSegmentsPen back to a glyph.""" + + glyph.clearContours() + pen = glyph.getPen() + if reverse_direction: + pen = ReverseContourPen(pen) + for tag, args in segments: + if tag == 'move': + pen.moveTo(*args) + elif tag == 'line': + pen.lineTo(*args) + elif tag == 'curve': + pen.curveTo(*args[1:]) + elif tag == 'qcurve': + pen.qCurveTo(*args[1:]) + elif tag == 'close': + pen.closePath() + elif tag == 'end': + pen.endPath() + else: + raise AssertionError('Unhandled segment type "%s"' % tag) + + +def _segments_to_quadratic(segments, max_err, stats): + """Return quadratic approximations of cubic segments.""" + + assert all(s[0] == 'curve' for s in segments), 'Non-cubic given to convert' + + new_points = curves_to_quadratic([s[1] for s in segments], max_err) + n = len(new_points[0]) + assert all(len(s) == n for s in new_points[1:]), 'Converted incompatibly' + + spline_length = str(n - 2) + stats[spline_length] = stats.get(spline_length, 0) + 1 + + return [('qcurve', p) for p in new_points] + + +def _glyphs_to_quadratic(glyphs, max_err, reverse_direction, stats): + """Do the actual conversion of a set of compatible glyphs, after arguments + have been set up. + + Return True if the glyphs were modified, else return False. + """ + + try: + segments_by_location = zip(*[_get_segments(g) for g in glyphs]) + except UnequalZipLengthsError: + raise IncompatibleSegmentNumberError(glyphs) + if not any(segments_by_location): + return False + + # always modify input glyphs if reverse_direction is True + glyphs_modified = reverse_direction + + new_segments_by_location = [] + incompatible = {} + for i, segments in enumerate(segments_by_location): + tag = segments[0][0] + if not all(s[0] == tag for s in segments[1:]): + incompatible[i] = [s[0] for s in segments] + elif tag == 'curve': + segments = _segments_to_quadratic(segments, max_err, stats) + glyphs_modified = True + new_segments_by_location.append(segments) + + if glyphs_modified: + new_segments_by_glyph = zip(*new_segments_by_location) + for glyph, new_segments in zip(glyphs, new_segments_by_glyph): + _set_segments(glyph, new_segments, reverse_direction) + + if incompatible: + raise IncompatibleSegmentTypesError(glyphs, segments=incompatible) + return glyphs_modified + + +def glyphs_to_quadratic( + glyphs, max_err=None, reverse_direction=False, stats=None): + """Convert the curves of a set of compatible of glyphs to quadratic. + + All curves will be converted to quadratic at once, ensuring interpolation + compatibility. If this is not required, calling glyphs_to_quadratic with one + glyph at a time may yield slightly more optimized results. + + Return True if glyphs were modified, else return False. + + Raises IncompatibleGlyphsError if glyphs have non-interpolatable outlines. + """ + if stats is None: + stats = {} + + if not max_err: + # assume 1000 is the default UPEM + max_err = DEFAULT_MAX_ERR * 1000 + + if isinstance(max_err, (list, tuple)): + max_errors = max_err + else: + max_errors = [max_err] * len(glyphs) + assert len(max_errors) == len(glyphs) + + return _glyphs_to_quadratic(glyphs, max_errors, reverse_direction, stats) + + +def fonts_to_quadratic( + fonts, max_err_em=None, max_err=None, reverse_direction=False, + stats=None, dump_stats=False, remember_curve_type=True): + """Convert the curves of a collection of fonts to quadratic. + + All curves will be converted to quadratic at once, ensuring interpolation + compatibility. If this is not required, calling fonts_to_quadratic with one + font at a time may yield slightly more optimized results. + + Return True if fonts were modified, else return False. + + By default, cu2qu stores the curve type in the fonts' lib, under a private + key "com.github.googlei18n.cu2qu.curve_type", and will not try to convert + them again if the curve type is already set to "quadratic". + Setting 'remember_curve_type' to False disables this optimization. + + Raises IncompatibleFontsError if same-named glyphs from different fonts + have non-interpolatable outlines. + """ + + if remember_curve_type: + curve_types = {f.lib.get(CURVE_TYPE_LIB_KEY, "cubic") for f in fonts} + if len(curve_types) == 1: + curve_type = next(iter(curve_types)) + if curve_type == "quadratic": + logger.info("Curves already converted to quadratic") + return False + elif curve_type == "cubic": + pass # keep converting + else: + raise NotImplementedError(curve_type) + elif len(curve_types) > 1: + # going to crash later if they do differ + logger.warning("fonts may contain different curve types") + + if stats is None: + stats = {} + + if max_err_em and max_err: + raise TypeError('Only one of max_err and max_err_em can be specified.') + if not (max_err_em or max_err): + max_err_em = DEFAULT_MAX_ERR + + if isinstance(max_err, (list, tuple)): + assert len(max_err) == len(fonts) + max_errors = max_err + elif max_err: + max_errors = [max_err] * len(fonts) + + if isinstance(max_err_em, (list, tuple)): + assert len(fonts) == len(max_err_em) + max_errors = [f.info.unitsPerEm * e + for f, e in zip(fonts, max_err_em)] + elif max_err_em: + max_errors = [f.info.unitsPerEm * max_err_em for f in fonts] + + modified = False + glyph_errors = {} + for name in set().union(*(f.keys() for f in fonts)): + glyphs = [] + cur_max_errors = [] + for font, error in zip(fonts, max_errors): + if name in font: + glyphs.append(font[name]) + cur_max_errors.append(error) + try: + modified |= _glyphs_to_quadratic( + glyphs, cur_max_errors, reverse_direction, stats) + except IncompatibleGlyphsError as exc: + logger.error(exc) + glyph_errors[name] = exc + + if glyph_errors: + raise IncompatibleFontsError(glyph_errors) + + if modified and dump_stats: + spline_lengths = sorted(stats.keys()) + logger.info('New spline lengths: %s' % (', '.join( + '%s: %d' % (l, stats[l]) for l in spline_lengths))) + + if remember_curve_type: + for font in fonts: + curve_type = font.lib.get(CURVE_TYPE_LIB_KEY, "cubic") + if curve_type != "quadratic": + font.lib[CURVE_TYPE_LIB_KEY] = "quadratic" + modified = True + return modified + + +def glyph_to_quadratic(glyph, **kwargs): + """Convenience wrapper around glyphs_to_quadratic, for just one glyph. + Return True if the glyph was modified, else return False. + """ + + return glyphs_to_quadratic([glyph], **kwargs) + + +def font_to_quadratic(font, **kwargs): + """Convenience wrapper around fonts_to_quadratic, for just one font. + Return True if the font was modified, else return False. + """ + + return fonts_to_quadratic([font], **kwargs) diff --git a/.venv/lib/python3.9/site-packages/fontTools/designspaceLib/__init__.py b/.venv/lib/python3.9/site-packages/fontTools/designspaceLib/__init__.py new file mode 100644 index 00000000..b447a1b7 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/designspaceLib/__init__.py @@ -0,0 +1,1407 @@ +# -*- coding: utf-8 -*- + +from fontTools.misc.loggingTools import LogMixin +from fontTools.misc.textTools import tobytes, tostr +import collections +from io import BytesIO, StringIO +import os +import posixpath +from fontTools.misc import etree as ET +from fontTools.misc import plistlib + +""" + designSpaceDocument + + - read and write designspace files +""" + +__all__ = [ + 'DesignSpaceDocumentError', 'DesignSpaceDocument', 'SourceDescriptor', + 'InstanceDescriptor', 'AxisDescriptor', 'RuleDescriptor', 'BaseDocReader', + 'BaseDocWriter' +] + +# ElementTree allows to find namespace-prefixed elements, but not attributes +# so we have to do it ourselves for 'xml:lang' +XML_NS = "{http://www.w3.org/XML/1998/namespace}" +XML_LANG = XML_NS + "lang" + + +def posix(path): + """Normalize paths using forward slash to work also on Windows.""" + new_path = posixpath.join(*path.split(os.path.sep)) + if path.startswith('/'): + # The above transformation loses absolute paths + new_path = '/' + new_path + elif path.startswith(r'\\'): + # The above transformation loses leading slashes of UNC path mounts + new_path = '//' + new_path + return new_path + + +def posixpath_property(private_name): + def getter(self): + # Normal getter + return getattr(self, private_name) + + def setter(self, value): + # The setter rewrites paths using forward slashes + if value is not None: + value = posix(value) + setattr(self, private_name, value) + + return property(getter, setter) + + +class DesignSpaceDocumentError(Exception): + def __init__(self, msg, obj=None): + self.msg = msg + self.obj = obj + + def __str__(self): + return str(self.msg) + ( + ": %r" % self.obj if self.obj is not None else "") + + +class AsDictMixin(object): + + def asdict(self): + d = {} + for attr, value in self.__dict__.items(): + if attr.startswith("_"): + continue + if hasattr(value, "asdict"): + value = value.asdict() + elif isinstance(value, list): + value = [ + v.asdict() if hasattr(v, "asdict") else v for v in value + ] + d[attr] = value + return d + + +class SimpleDescriptor(AsDictMixin): + """ Containers for a bunch of attributes""" + + # XXX this is ugly. The 'print' is inappropriate here, and instead of + # assert, it should simply return True/False + def compare(self, other): + # test if this object contains the same data as the other + for attr in self._attrs: + try: + assert(getattr(self, attr) == getattr(other, attr)) + except AssertionError: + print("failed attribute", attr, getattr(self, attr), "!=", getattr(other, attr)) + + +class SourceDescriptor(SimpleDescriptor): + """Simple container for data related to the source""" + flavor = "source" + _attrs = ['filename', 'path', 'name', 'layerName', + 'location', 'copyLib', + 'copyGroups', 'copyFeatures', + 'muteKerning', 'muteInfo', + 'mutedGlyphNames', + 'familyName', 'styleName'] + + def __init__( + self, + *, + filename=None, + path=None, + font=None, + name=None, + location=None, + layerName=None, + familyName=None, + styleName=None, + copyLib=False, + copyInfo=False, + copyGroups=False, + copyFeatures=False, + muteKerning=False, + muteInfo=False, + mutedGlyphNames=None, + ): + self.filename = filename + """The original path as found in the document.""" + + self.path = path + """The absolute path, calculated from filename.""" + + self.font = font + """Any Python object. Optional. Points to a representation of this + source font that is loaded in memory, as a Python object (e.g. a + ``defcon.Font`` or a ``fontTools.ttFont.TTFont``). + + The default document reader will not fill-in this attribute, and the + default writer will not use this attribute. It is up to the user of + ``designspaceLib`` to either load the resource identified by + ``filename`` and store it in this field, or write the contents of + this field to the disk and make ```filename`` point to that. + """ + + self.name = name + self.location = location + self.layerName = layerName + self.familyName = familyName + self.styleName = styleName + + self.copyLib = copyLib + self.copyInfo = copyInfo + self.copyGroups = copyGroups + self.copyFeatures = copyFeatures + self.muteKerning = muteKerning + self.muteInfo = muteInfo + self.mutedGlyphNames = mutedGlyphNames or [] + + path = posixpath_property("_path") + filename = posixpath_property("_filename") + + +class RuleDescriptor(SimpleDescriptor): + """ + + + + + + + + + + + + """ + _attrs = ['name', 'conditionSets', 'subs'] # what do we need here + + def __init__(self, *, name=None, conditionSets=None, subs=None): + self.name = name + # list of lists of dict(name='aaaa', minimum=0, maximum=1000) + self.conditionSets = conditionSets or [] + # list of substitutions stored as tuples of glyphnames ("a", "a.alt") + self.subs = subs or [] + + +def evaluateRule(rule, location): + """ Return True if any of the rule's conditionsets matches the given location.""" + return any(evaluateConditions(c, location) for c in rule.conditionSets) + + +def evaluateConditions(conditions, location): + """ Return True if all the conditions matches the given location. + If a condition has no minimum, check for < maximum. + If a condition has no maximum, check for > minimum. + """ + for cd in conditions: + value = location[cd['name']] + if cd.get('minimum') is None: + if value > cd['maximum']: + return False + elif cd.get('maximum') is None: + if cd['minimum'] > value: + return False + elif not cd['minimum'] <= value <= cd['maximum']: + return False + return True + + +def processRules(rules, location, glyphNames): + """ Apply these rules at this location to these glyphnames + - rule order matters + """ + newNames = [] + for rule in rules: + if evaluateRule(rule, location): + for name in glyphNames: + swap = False + for a, b in rule.subs: + if name == a: + swap = True + break + if swap: + newNames.append(b) + else: + newNames.append(name) + glyphNames = newNames + newNames = [] + return glyphNames + + +class InstanceDescriptor(SimpleDescriptor): + """Simple container for data related to the instance""" + flavor = "instance" + _defaultLanguageCode = "en" + _attrs = ['path', + 'name', + 'location', + 'familyName', + 'styleName', + 'postScriptFontName', + 'styleMapFamilyName', + 'styleMapStyleName', + 'kerning', + 'info', + 'lib'] + + def __init__( + self, + *, + filename=None, + path=None, + font=None, + name=None, + location=None, + familyName=None, + styleName=None, + postScriptFontName=None, + styleMapFamilyName=None, + styleMapStyleName=None, + localisedFamilyName=None, + localisedStyleName=None, + localisedStyleMapFamilyName=None, + localisedStyleMapStyleName=None, + glyphs=None, + kerning=True, + info=True, + lib=None, + ): + # the original path as found in the document + self.filename = filename + # the absolute path, calculated from filename + self.path = path + # Same as in SourceDescriptor. + self.font = font + self.name = name + self.location = location + self.familyName = familyName + self.styleName = styleName + self.postScriptFontName = postScriptFontName + self.styleMapFamilyName = styleMapFamilyName + self.styleMapStyleName = styleMapStyleName + self.localisedFamilyName = localisedFamilyName or {} + self.localisedStyleName = localisedStyleName or {} + self.localisedStyleMapFamilyName = localisedStyleMapFamilyName or {} + self.localisedStyleMapStyleName = localisedStyleMapStyleName or {} + self.glyphs = glyphs or {} + self.kerning = kerning + self.info = info + + self.lib = lib or {} + """Custom data associated with this instance.""" + + path = posixpath_property("_path") + filename = posixpath_property("_filename") + + def setStyleName(self, styleName, languageCode="en"): + self.localisedStyleName[languageCode] = tostr(styleName) + + def getStyleName(self, languageCode="en"): + return self.localisedStyleName.get(languageCode) + + def setFamilyName(self, familyName, languageCode="en"): + self.localisedFamilyName[languageCode] = tostr(familyName) + + def getFamilyName(self, languageCode="en"): + return self.localisedFamilyName.get(languageCode) + + def setStyleMapStyleName(self, styleMapStyleName, languageCode="en"): + self.localisedStyleMapStyleName[languageCode] = tostr(styleMapStyleName) + + def getStyleMapStyleName(self, languageCode="en"): + return self.localisedStyleMapStyleName.get(languageCode) + + def setStyleMapFamilyName(self, styleMapFamilyName, languageCode="en"): + self.localisedStyleMapFamilyName[languageCode] = tostr(styleMapFamilyName) + + def getStyleMapFamilyName(self, languageCode="en"): + return self.localisedStyleMapFamilyName.get(languageCode) + + +def tagForAxisName(name): + # try to find or make a tag name for this axis name + names = { + 'weight': ('wght', dict(en = 'Weight')), + 'width': ('wdth', dict(en = 'Width')), + 'optical': ('opsz', dict(en = 'Optical Size')), + 'slant': ('slnt', dict(en = 'Slant')), + 'italic': ('ital', dict(en = 'Italic')), + } + if name.lower() in names: + return names[name.lower()] + if len(name) < 4: + tag = name + "*" * (4 - len(name)) + else: + tag = name[:4] + return tag, dict(en=name) + + +class AxisDescriptor(SimpleDescriptor): + """ Simple container for the axis data + Add more localisations? + """ + flavor = "axis" + _attrs = ['tag', 'name', 'maximum', 'minimum', 'default', 'map'] + + def __init__( + self, + *, + tag=None, + name=None, + labelNames=None, + minimum=None, + default=None, + maximum=None, + hidden=False, + map=None, + ): + # opentype tag for this axis + self.tag = tag + # name of the axis used in locations + self.name = name + # names for UI purposes, if this is not a standard axis, + self.labelNames = labelNames or {} + self.minimum = minimum + self.maximum = maximum + self.default = default + self.hidden = hidden + self.map = map or [] + + def serialize(self): + # output to a dict, used in testing + return dict( + tag=self.tag, + name=self.name, + labelNames=self.labelNames, + maximum=self.maximum, + minimum=self.minimum, + default=self.default, + hidden=self.hidden, + map=self.map, + ) + + def map_forward(self, v): + from fontTools.varLib.models import piecewiseLinearMap + + if not self.map: + return v + return piecewiseLinearMap(v, {k: v for k, v in self.map}) + + def map_backward(self, v): + from fontTools.varLib.models import piecewiseLinearMap + + if not self.map: + return v + return piecewiseLinearMap(v, {v: k for k, v in self.map}) + + +class BaseDocWriter(object): + _whiteSpace = " " + ruleDescriptorClass = RuleDescriptor + axisDescriptorClass = AxisDescriptor + sourceDescriptorClass = SourceDescriptor + instanceDescriptorClass = InstanceDescriptor + + @classmethod + def getAxisDecriptor(cls): + return cls.axisDescriptorClass() + + @classmethod + def getSourceDescriptor(cls): + return cls.sourceDescriptorClass() + + @classmethod + def getInstanceDescriptor(cls): + return cls.instanceDescriptorClass() + + @classmethod + def getRuleDescriptor(cls): + return cls.ruleDescriptorClass() + + def __init__(self, documentPath, documentObject): + self.path = documentPath + self.documentObject = documentObject + self.documentVersion = "4.1" + self.root = ET.Element("designspace") + self.root.attrib['format'] = self.documentVersion + self._axes = [] # for use by the writer only + self._rules = [] # for use by the writer only + + def write(self, pretty=True, encoding="UTF-8", xml_declaration=True): + if self.documentObject.axes: + self.root.append(ET.Element("axes")) + for axisObject in self.documentObject.axes: + self._addAxis(axisObject) + + if self.documentObject.rules: + if getattr(self.documentObject, "rulesProcessingLast", False): + attributes = {"processing": "last"} + else: + attributes = {} + self.root.append(ET.Element("rules", attributes)) + for ruleObject in self.documentObject.rules: + self._addRule(ruleObject) + + if self.documentObject.sources: + self.root.append(ET.Element("sources")) + for sourceObject in self.documentObject.sources: + self._addSource(sourceObject) + + if self.documentObject.instances: + self.root.append(ET.Element("instances")) + for instanceObject in self.documentObject.instances: + self._addInstance(instanceObject) + + if self.documentObject.lib: + self._addLib(self.documentObject.lib) + + tree = ET.ElementTree(self.root) + tree.write( + self.path, + encoding=encoding, + method='xml', + xml_declaration=xml_declaration, + pretty_print=pretty, + ) + + def _makeLocationElement(self, locationObject, name=None): + """ Convert Location dict to a locationElement.""" + locElement = ET.Element("location") + if name is not None: + locElement.attrib['name'] = name + validatedLocation = self.documentObject.newDefaultLocation() + for axisName, axisValue in locationObject.items(): + if axisName in validatedLocation: + # only accept values we know + validatedLocation[axisName] = axisValue + for dimensionName, dimensionValue in validatedLocation.items(): + dimElement = ET.Element('dimension') + dimElement.attrib['name'] = dimensionName + if type(dimensionValue) == tuple: + dimElement.attrib['xvalue'] = self.intOrFloat(dimensionValue[0]) + dimElement.attrib['yvalue'] = self.intOrFloat(dimensionValue[1]) + else: + dimElement.attrib['xvalue'] = self.intOrFloat(dimensionValue) + locElement.append(dimElement) + return locElement, validatedLocation + + def intOrFloat(self, num): + if int(num) == num: + return "%d" % num + return "%f" % num + + def _addRule(self, ruleObject): + # if none of the conditions have minimum or maximum values, do not add the rule. + self._rules.append(ruleObject) + ruleElement = ET.Element('rule') + if ruleObject.name is not None: + ruleElement.attrib['name'] = ruleObject.name + for conditions in ruleObject.conditionSets: + conditionsetElement = ET.Element('conditionset') + for cond in conditions: + if cond.get('minimum') is None and cond.get('maximum') is None: + # neither is defined, don't add this condition + continue + conditionElement = ET.Element('condition') + conditionElement.attrib['name'] = cond.get('name') + if cond.get('minimum') is not None: + conditionElement.attrib['minimum'] = self.intOrFloat(cond.get('minimum')) + if cond.get('maximum') is not None: + conditionElement.attrib['maximum'] = self.intOrFloat(cond.get('maximum')) + conditionsetElement.append(conditionElement) + if len(conditionsetElement): + ruleElement.append(conditionsetElement) + for sub in ruleObject.subs: + subElement = ET.Element('sub') + subElement.attrib['name'] = sub[0] + subElement.attrib['with'] = sub[1] + ruleElement.append(subElement) + if len(ruleElement): + self.root.findall('.rules')[0].append(ruleElement) + + def _addAxis(self, axisObject): + self._axes.append(axisObject) + axisElement = ET.Element('axis') + axisElement.attrib['tag'] = axisObject.tag + axisElement.attrib['name'] = axisObject.name + axisElement.attrib['minimum'] = self.intOrFloat(axisObject.minimum) + axisElement.attrib['maximum'] = self.intOrFloat(axisObject.maximum) + axisElement.attrib['default'] = self.intOrFloat(axisObject.default) + if axisObject.hidden: + axisElement.attrib['hidden'] = "1" + for languageCode, labelName in sorted(axisObject.labelNames.items()): + languageElement = ET.Element('labelname') + languageElement.attrib[XML_LANG] = languageCode + languageElement.text = labelName + axisElement.append(languageElement) + if axisObject.map: + for inputValue, outputValue in axisObject.map: + mapElement = ET.Element('map') + mapElement.attrib['input'] = self.intOrFloat(inputValue) + mapElement.attrib['output'] = self.intOrFloat(outputValue) + axisElement.append(mapElement) + self.root.findall('.axes')[0].append(axisElement) + + def _addInstance(self, instanceObject): + instanceElement = ET.Element('instance') + if instanceObject.name is not None: + instanceElement.attrib['name'] = instanceObject.name + if instanceObject.familyName is not None: + instanceElement.attrib['familyname'] = instanceObject.familyName + if instanceObject.styleName is not None: + instanceElement.attrib['stylename'] = instanceObject.styleName + # add localisations + if instanceObject.localisedStyleName: + languageCodes = list(instanceObject.localisedStyleName.keys()) + languageCodes.sort() + for code in languageCodes: + if code == "en": + continue # already stored in the element attribute + localisedStyleNameElement = ET.Element('stylename') + localisedStyleNameElement.attrib[XML_LANG] = code + localisedStyleNameElement.text = instanceObject.getStyleName(code) + instanceElement.append(localisedStyleNameElement) + if instanceObject.localisedFamilyName: + languageCodes = list(instanceObject.localisedFamilyName.keys()) + languageCodes.sort() + for code in languageCodes: + if code == "en": + continue # already stored in the element attribute + localisedFamilyNameElement = ET.Element('familyname') + localisedFamilyNameElement.attrib[XML_LANG] = code + localisedFamilyNameElement.text = instanceObject.getFamilyName(code) + instanceElement.append(localisedFamilyNameElement) + if instanceObject.localisedStyleMapStyleName: + languageCodes = list(instanceObject.localisedStyleMapStyleName.keys()) + languageCodes.sort() + for code in languageCodes: + if code == "en": + continue + localisedStyleMapStyleNameElement = ET.Element('stylemapstylename') + localisedStyleMapStyleNameElement.attrib[XML_LANG] = code + localisedStyleMapStyleNameElement.text = instanceObject.getStyleMapStyleName(code) + instanceElement.append(localisedStyleMapStyleNameElement) + if instanceObject.localisedStyleMapFamilyName: + languageCodes = list(instanceObject.localisedStyleMapFamilyName.keys()) + languageCodes.sort() + for code in languageCodes: + if code == "en": + continue + localisedStyleMapFamilyNameElement = ET.Element('stylemapfamilyname') + localisedStyleMapFamilyNameElement.attrib[XML_LANG] = code + localisedStyleMapFamilyNameElement.text = instanceObject.getStyleMapFamilyName(code) + instanceElement.append(localisedStyleMapFamilyNameElement) + + if instanceObject.location is not None: + locationElement, instanceObject.location = self._makeLocationElement(instanceObject.location) + instanceElement.append(locationElement) + if instanceObject.filename is not None: + instanceElement.attrib['filename'] = instanceObject.filename + if instanceObject.postScriptFontName is not None: + instanceElement.attrib['postscriptfontname'] = instanceObject.postScriptFontName + if instanceObject.styleMapFamilyName is not None: + instanceElement.attrib['stylemapfamilyname'] = instanceObject.styleMapFamilyName + if instanceObject.styleMapStyleName is not None: + instanceElement.attrib['stylemapstylename'] = instanceObject.styleMapStyleName + if instanceObject.glyphs: + if instanceElement.findall('.glyphs') == []: + glyphsElement = ET.Element('glyphs') + instanceElement.append(glyphsElement) + glyphsElement = instanceElement.findall('.glyphs')[0] + for glyphName, data in sorted(instanceObject.glyphs.items()): + glyphElement = self._writeGlyphElement(instanceElement, instanceObject, glyphName, data) + glyphsElement.append(glyphElement) + if instanceObject.kerning: + kerningElement = ET.Element('kerning') + instanceElement.append(kerningElement) + if instanceObject.info: + infoElement = ET.Element('info') + instanceElement.append(infoElement) + if instanceObject.lib: + libElement = ET.Element('lib') + libElement.append(plistlib.totree(instanceObject.lib, indent_level=4)) + instanceElement.append(libElement) + self.root.findall('.instances')[0].append(instanceElement) + + def _addSource(self, sourceObject): + sourceElement = ET.Element("source") + if sourceObject.filename is not None: + sourceElement.attrib['filename'] = sourceObject.filename + if sourceObject.name is not None: + if sourceObject.name.find("temp_master") != 0: + # do not save temporary source names + sourceElement.attrib['name'] = sourceObject.name + if sourceObject.familyName is not None: + sourceElement.attrib['familyname'] = sourceObject.familyName + if sourceObject.styleName is not None: + sourceElement.attrib['stylename'] = sourceObject.styleName + if sourceObject.layerName is not None: + sourceElement.attrib['layer'] = sourceObject.layerName + if sourceObject.copyLib: + libElement = ET.Element('lib') + libElement.attrib['copy'] = "1" + sourceElement.append(libElement) + if sourceObject.copyGroups: + groupsElement = ET.Element('groups') + groupsElement.attrib['copy'] = "1" + sourceElement.append(groupsElement) + if sourceObject.copyFeatures: + featuresElement = ET.Element('features') + featuresElement.attrib['copy'] = "1" + sourceElement.append(featuresElement) + if sourceObject.copyInfo or sourceObject.muteInfo: + infoElement = ET.Element('info') + if sourceObject.copyInfo: + infoElement.attrib['copy'] = "1" + if sourceObject.muteInfo: + infoElement.attrib['mute'] = "1" + sourceElement.append(infoElement) + if sourceObject.muteKerning: + kerningElement = ET.Element("kerning") + kerningElement.attrib["mute"] = '1' + sourceElement.append(kerningElement) + if sourceObject.mutedGlyphNames: + for name in sourceObject.mutedGlyphNames: + glyphElement = ET.Element("glyph") + glyphElement.attrib["name"] = name + glyphElement.attrib["mute"] = '1' + sourceElement.append(glyphElement) + locationElement, sourceObject.location = self._makeLocationElement(sourceObject.location) + sourceElement.append(locationElement) + self.root.findall('.sources')[0].append(sourceElement) + + def _addLib(self, dict): + libElement = ET.Element('lib') + libElement.append(plistlib.totree(dict, indent_level=2)) + self.root.append(libElement) + + def _writeGlyphElement(self, instanceElement, instanceObject, glyphName, data): + glyphElement = ET.Element('glyph') + if data.get('mute'): + glyphElement.attrib['mute'] = "1" + if data.get('unicodes') is not None: + glyphElement.attrib['unicode'] = " ".join([hex(u) for u in data.get('unicodes')]) + if data.get('instanceLocation') is not None: + locationElement, data['instanceLocation'] = self._makeLocationElement(data.get('instanceLocation')) + glyphElement.append(locationElement) + if glyphName is not None: + glyphElement.attrib['name'] = glyphName + if data.get('note') is not None: + noteElement = ET.Element('note') + noteElement.text = data.get('note') + glyphElement.append(noteElement) + if data.get('masters') is not None: + mastersElement = ET.Element("masters") + for m in data.get('masters'): + masterElement = ET.Element("master") + if m.get('glyphName') is not None: + masterElement.attrib['glyphname'] = m.get('glyphName') + if m.get('font') is not None: + masterElement.attrib['source'] = m.get('font') + if m.get('location') is not None: + locationElement, m['location'] = self._makeLocationElement(m.get('location')) + masterElement.append(locationElement) + mastersElement.append(masterElement) + glyphElement.append(mastersElement) + return glyphElement + + +class BaseDocReader(LogMixin): + ruleDescriptorClass = RuleDescriptor + axisDescriptorClass = AxisDescriptor + sourceDescriptorClass = SourceDescriptor + instanceDescriptorClass = InstanceDescriptor + + def __init__(self, documentPath, documentObject): + self.path = documentPath + self.documentObject = documentObject + tree = ET.parse(self.path) + self.root = tree.getroot() + self.documentObject.formatVersion = self.root.attrib.get("format", "3.0") + self._axes = [] + self.rules = [] + self.sources = [] + self.instances = [] + self.axisDefaults = {} + self._strictAxisNames = True + + @classmethod + def fromstring(cls, string, documentObject): + f = BytesIO(tobytes(string, encoding="utf-8")) + self = cls(f, documentObject) + self.path = None + return self + + def read(self): + self.readAxes() + self.readRules() + self.readSources() + self.readInstances() + self.readLib() + + def readRules(self): + # we also need to read any conditions that are outside of a condition set. + rules = [] + rulesElement = self.root.find(".rules") + if rulesElement is not None: + processingValue = rulesElement.attrib.get("processing", "first") + if processingValue not in {"first", "last"}: + raise DesignSpaceDocumentError( + " processing attribute value is not valid: %r, " + "expected 'first' or 'last'" % processingValue) + self.documentObject.rulesProcessingLast = processingValue == "last" + for ruleElement in self.root.findall(".rules/rule"): + ruleObject = self.ruleDescriptorClass() + ruleName = ruleObject.name = ruleElement.attrib.get("name") + # read any stray conditions outside a condition set + externalConditions = self._readConditionElements( + ruleElement, + ruleName, + ) + if externalConditions: + ruleObject.conditionSets.append(externalConditions) + self.log.info( + "Found stray rule conditions outside a conditionset. " + "Wrapped them in a new conditionset." + ) + # read the conditionsets + for conditionSetElement in ruleElement.findall('.conditionset'): + conditionSet = self._readConditionElements( + conditionSetElement, + ruleName, + ) + if conditionSet is not None: + ruleObject.conditionSets.append(conditionSet) + for subElement in ruleElement.findall('.sub'): + a = subElement.attrib['name'] + b = subElement.attrib['with'] + ruleObject.subs.append((a, b)) + rules.append(ruleObject) + self.documentObject.rules = rules + + def _readConditionElements(self, parentElement, ruleName=None): + cds = [] + for conditionElement in parentElement.findall('.condition'): + cd = {} + cdMin = conditionElement.attrib.get("minimum") + if cdMin is not None: + cd['minimum'] = float(cdMin) + else: + # will allow these to be None, assume axis.minimum + cd['minimum'] = None + cdMax = conditionElement.attrib.get("maximum") + if cdMax is not None: + cd['maximum'] = float(cdMax) + else: + # will allow these to be None, assume axis.maximum + cd['maximum'] = None + cd['name'] = conditionElement.attrib.get("name") + # # test for things + if cd.get('minimum') is None and cd.get('maximum') is None: + raise DesignSpaceDocumentError( + "condition missing required minimum or maximum in rule" + + (" '%s'" % ruleName if ruleName is not None else "")) + cds.append(cd) + return cds + + def readAxes(self): + # read the axes elements, including the warp map. + axisElements = self.root.findall(".axes/axis") + if not axisElements: + return + for axisElement in axisElements: + axisObject = self.axisDescriptorClass() + axisObject.name = axisElement.attrib.get("name") + axisObject.minimum = float(axisElement.attrib.get("minimum")) + axisObject.maximum = float(axisElement.attrib.get("maximum")) + if axisElement.attrib.get('hidden', False): + axisObject.hidden = True + axisObject.default = float(axisElement.attrib.get("default")) + axisObject.tag = axisElement.attrib.get("tag") + for mapElement in axisElement.findall('map'): + a = float(mapElement.attrib['input']) + b = float(mapElement.attrib['output']) + axisObject.map.append((a, b)) + for labelNameElement in axisElement.findall('labelname'): + # Note: elementtree reads the "xml:lang" attribute name as + # '{http://www.w3.org/XML/1998/namespace}lang' + for key, lang in labelNameElement.items(): + if key == XML_LANG: + axisObject.labelNames[lang] = tostr(labelNameElement.text) + self.documentObject.axes.append(axisObject) + self.axisDefaults[axisObject.name] = axisObject.default + + def readSources(self): + for sourceCount, sourceElement in enumerate(self.root.findall(".sources/source")): + filename = sourceElement.attrib.get('filename') + if filename is not None and self.path is not None: + sourcePath = os.path.abspath(os.path.join(os.path.dirname(self.path), filename)) + else: + sourcePath = None + sourceName = sourceElement.attrib.get('name') + if sourceName is None: + # add a temporary source name + sourceName = "temp_master.%d" % (sourceCount) + sourceObject = self.sourceDescriptorClass() + sourceObject.path = sourcePath # absolute path to the ufo source + sourceObject.filename = filename # path as it is stored in the document + sourceObject.name = sourceName + familyName = sourceElement.attrib.get("familyname") + if familyName is not None: + sourceObject.familyName = familyName + styleName = sourceElement.attrib.get("stylename") + if styleName is not None: + sourceObject.styleName = styleName + sourceObject.location = self.locationFromElement(sourceElement) + layerName = sourceElement.attrib.get('layer') + if layerName is not None: + sourceObject.layerName = layerName + for libElement in sourceElement.findall('.lib'): + if libElement.attrib.get('copy') == '1': + sourceObject.copyLib = True + for groupsElement in sourceElement.findall('.groups'): + if groupsElement.attrib.get('copy') == '1': + sourceObject.copyGroups = True + for infoElement in sourceElement.findall(".info"): + if infoElement.attrib.get('copy') == '1': + sourceObject.copyInfo = True + if infoElement.attrib.get('mute') == '1': + sourceObject.muteInfo = True + for featuresElement in sourceElement.findall(".features"): + if featuresElement.attrib.get('copy') == '1': + sourceObject.copyFeatures = True + for glyphElement in sourceElement.findall(".glyph"): + glyphName = glyphElement.attrib.get('name') + if glyphName is None: + continue + if glyphElement.attrib.get('mute') == '1': + sourceObject.mutedGlyphNames.append(glyphName) + for kerningElement in sourceElement.findall(".kerning"): + if kerningElement.attrib.get('mute') == '1': + sourceObject.muteKerning = True + self.documentObject.sources.append(sourceObject) + + def locationFromElement(self, element): + elementLocation = None + for locationElement in element.findall('.location'): + elementLocation = self.readLocationElement(locationElement) + break + return elementLocation + + def readLocationElement(self, locationElement): + """ Format 0 location reader """ + if self._strictAxisNames and not self.documentObject.axes: + raise DesignSpaceDocumentError("No axes defined") + loc = {} + for dimensionElement in locationElement.findall(".dimension"): + dimName = dimensionElement.attrib.get("name") + if self._strictAxisNames and dimName not in self.axisDefaults: + # In case the document contains no axis definitions, + self.log.warning("Location with undefined axis: \"%s\".", dimName) + continue + xValue = yValue = None + try: + xValue = dimensionElement.attrib.get('xvalue') + xValue = float(xValue) + except ValueError: + self.log.warning("KeyError in readLocation xValue %3.3f", xValue) + try: + yValue = dimensionElement.attrib.get('yvalue') + if yValue is not None: + yValue = float(yValue) + except ValueError: + pass + if yValue is not None: + loc[dimName] = (xValue, yValue) + else: + loc[dimName] = xValue + return loc + + def readInstances(self, makeGlyphs=True, makeKerning=True, makeInfo=True): + instanceElements = self.root.findall('.instances/instance') + for instanceElement in instanceElements: + self._readSingleInstanceElement(instanceElement, makeGlyphs=makeGlyphs, makeKerning=makeKerning, makeInfo=makeInfo) + + def _readSingleInstanceElement(self, instanceElement, makeGlyphs=True, makeKerning=True, makeInfo=True): + filename = instanceElement.attrib.get('filename') + if filename is not None and self.documentObject.path is not None: + instancePath = os.path.join(os.path.dirname(self.documentObject.path), filename) + else: + instancePath = None + instanceObject = self.instanceDescriptorClass() + instanceObject.path = instancePath # absolute path to the instance + instanceObject.filename = filename # path as it is stored in the document + name = instanceElement.attrib.get("name") + if name is not None: + instanceObject.name = name + familyname = instanceElement.attrib.get('familyname') + if familyname is not None: + instanceObject.familyName = familyname + stylename = instanceElement.attrib.get('stylename') + if stylename is not None: + instanceObject.styleName = stylename + postScriptFontName = instanceElement.attrib.get('postscriptfontname') + if postScriptFontName is not None: + instanceObject.postScriptFontName = postScriptFontName + styleMapFamilyName = instanceElement.attrib.get('stylemapfamilyname') + if styleMapFamilyName is not None: + instanceObject.styleMapFamilyName = styleMapFamilyName + styleMapStyleName = instanceElement.attrib.get('stylemapstylename') + if styleMapStyleName is not None: + instanceObject.styleMapStyleName = styleMapStyleName + # read localised names + for styleNameElement in instanceElement.findall('stylename'): + for key, lang in styleNameElement.items(): + if key == XML_LANG: + styleName = styleNameElement.text + instanceObject.setStyleName(styleName, lang) + for familyNameElement in instanceElement.findall('familyname'): + for key, lang in familyNameElement.items(): + if key == XML_LANG: + familyName = familyNameElement.text + instanceObject.setFamilyName(familyName, lang) + for styleMapStyleNameElement in instanceElement.findall('stylemapstylename'): + for key, lang in styleMapStyleNameElement.items(): + if key == XML_LANG: + styleMapStyleName = styleMapStyleNameElement.text + instanceObject.setStyleMapStyleName(styleMapStyleName, lang) + for styleMapFamilyNameElement in instanceElement.findall('stylemapfamilyname'): + for key, lang in styleMapFamilyNameElement.items(): + if key == XML_LANG: + styleMapFamilyName = styleMapFamilyNameElement.text + instanceObject.setStyleMapFamilyName(styleMapFamilyName, lang) + instanceLocation = self.locationFromElement(instanceElement) + if instanceLocation is not None: + instanceObject.location = instanceLocation + for glyphElement in instanceElement.findall('.glyphs/glyph'): + self.readGlyphElement(glyphElement, instanceObject) + for infoElement in instanceElement.findall("info"): + self.readInfoElement(infoElement, instanceObject) + for libElement in instanceElement.findall('lib'): + self.readLibElement(libElement, instanceObject) + self.documentObject.instances.append(instanceObject) + + def readLibElement(self, libElement, instanceObject): + """Read the lib element for the given instance.""" + instanceObject.lib = plistlib.fromtree(libElement[0]) + + def readInfoElement(self, infoElement, instanceObject): + """ Read the info element.""" + instanceObject.info = True + + def readKerningElement(self, kerningElement, instanceObject): + """ Read the kerning element.""" + kerningLocation = self.locationFromElement(kerningElement) + instanceObject.addKerning(kerningLocation) + + def readGlyphElement(self, glyphElement, instanceObject): + """ + Read the glyph element. + + + + + + + This is an instance from an anisotropic interpolation. + + + """ + glyphData = {} + glyphName = glyphElement.attrib.get('name') + if glyphName is None: + raise DesignSpaceDocumentError("Glyph object without name attribute") + mute = glyphElement.attrib.get("mute") + if mute == "1": + glyphData['mute'] = True + # unicode + unicodes = glyphElement.attrib.get('unicode') + if unicodes is not None: + try: + unicodes = [int(u, 16) for u in unicodes.split(" ")] + glyphData['unicodes'] = unicodes + except ValueError: + raise DesignSpaceDocumentError("unicode values %s are not integers" % unicodes) + + for noteElement in glyphElement.findall('.note'): + glyphData['note'] = noteElement.text + break + instanceLocation = self.locationFromElement(glyphElement) + if instanceLocation is not None: + glyphData['instanceLocation'] = instanceLocation + glyphSources = None + for masterElement in glyphElement.findall('.masters/master'): + fontSourceName = masterElement.attrib.get('source') + sourceLocation = self.locationFromElement(masterElement) + masterGlyphName = masterElement.attrib.get('glyphname') + if masterGlyphName is None: + # if we don't read a glyphname, use the one we have + masterGlyphName = glyphName + d = dict(font=fontSourceName, + location=sourceLocation, + glyphName=masterGlyphName) + if glyphSources is None: + glyphSources = [] + glyphSources.append(d) + if glyphSources is not None: + glyphData['masters'] = glyphSources + instanceObject.glyphs[glyphName] = glyphData + + def readLib(self): + """Read the lib element for the whole document.""" + for libElement in self.root.findall(".lib"): + self.documentObject.lib = plistlib.fromtree(libElement[0]) + + +class DesignSpaceDocument(LogMixin, AsDictMixin): + """ Read, write data from the designspace file""" + def __init__(self, readerClass=None, writerClass=None): + self.path = None + self.filename = None + """String, optional. When the document is read from the disk, this is + its original file name, i.e. the last part of its path. + + When the document is produced by a Python script and still only exists + in memory, the producing script can write here an indication of a + possible "good" filename, in case one wants to save the file somewhere. + """ + + self.formatVersion = None + self.sources = [] + self.instances = [] + self.axes = [] + self.rules = [] + self.rulesProcessingLast = False + self.default = None # name of the default master + + self.lib = {} + """Custom data associated with the whole document.""" + + # + if readerClass is not None: + self.readerClass = readerClass + else: + self.readerClass = BaseDocReader + if writerClass is not None: + self.writerClass = writerClass + else: + self.writerClass = BaseDocWriter + + @classmethod + def fromfile(cls, path, readerClass=None, writerClass=None): + self = cls(readerClass=readerClass, writerClass=writerClass) + self.read(path) + return self + + @classmethod + def fromstring(cls, string, readerClass=None, writerClass=None): + self = cls(readerClass=readerClass, writerClass=writerClass) + reader = self.readerClass.fromstring(string, self) + reader.read() + if self.sources: + self.findDefault() + return self + + def tostring(self, encoding=None): + if encoding is str or ( + encoding is not None and encoding.lower() == "unicode" + ): + f = StringIO() + xml_declaration = False + elif encoding is None or encoding == "utf-8": + f = BytesIO() + encoding = "UTF-8" + xml_declaration = True + else: + raise ValueError("unsupported encoding: '%s'" % encoding) + writer = self.writerClass(f, self) + writer.write(encoding=encoding, xml_declaration=xml_declaration) + return f.getvalue() + + def read(self, path): + if hasattr(path, "__fspath__"): # support os.PathLike objects + path = path.__fspath__() + self.path = path + self.filename = os.path.basename(path) + reader = self.readerClass(path, self) + reader.read() + if self.sources: + self.findDefault() + + def write(self, path): + if hasattr(path, "__fspath__"): # support os.PathLike objects + path = path.__fspath__() + self.path = path + self.filename = os.path.basename(path) + self.updatePaths() + writer = self.writerClass(path, self) + writer.write() + + def _posixRelativePath(self, otherPath): + relative = os.path.relpath(otherPath, os.path.dirname(self.path)) + return posix(relative) + + def updatePaths(self): + """ + Right before we save we need to identify and respond to the following situations: + In each descriptor, we have to do the right thing for the filename attribute. + + case 1. + descriptor.filename == None + descriptor.path == None + + -- action: + write as is, descriptors will not have a filename attr. + useless, but no reason to interfere. + + + case 2. + descriptor.filename == "../something" + descriptor.path == None + + -- action: + write as is. The filename attr should not be touched. + + + case 3. + descriptor.filename == None + descriptor.path == "~/absolute/path/there" + + -- action: + calculate the relative path for filename. + We're not overwriting some other value for filename, it should be fine + + + case 4. + descriptor.filename == '../somewhere' + descriptor.path == "~/absolute/path/there" + + -- action: + there is a conflict between the given filename, and the path. + So we know where the file is relative to the document. + Can't guess why they're different, we just choose for path to be correct and update filename. + + + """ + assert self.path is not None + for descriptor in self.sources + self.instances: + if descriptor.path is not None: + # case 3 and 4: filename gets updated and relativized + descriptor.filename = self._posixRelativePath(descriptor.path) + + def addSource(self, sourceDescriptor): + self.sources.append(sourceDescriptor) + + def addSourceDescriptor(self, **kwargs): + source = self.writerClass.sourceDescriptorClass(**kwargs) + self.addSource(source) + return source + + def addInstance(self, instanceDescriptor): + self.instances.append(instanceDescriptor) + + def addInstanceDescriptor(self, **kwargs): + instance = self.writerClass.instanceDescriptorClass(**kwargs) + self.addInstance(instance) + return instance + + def addAxis(self, axisDescriptor): + self.axes.append(axisDescriptor) + + def addAxisDescriptor(self, **kwargs): + axis = self.writerClass.axisDescriptorClass(**kwargs) + self.addAxis(axis) + return axis + + def addRule(self, ruleDescriptor): + self.rules.append(ruleDescriptor) + + def addRuleDescriptor(self, **kwargs): + rule = self.writerClass.ruleDescriptorClass(**kwargs) + self.addRule(rule) + return rule + + def newDefaultLocation(self): + """Return default location in design space.""" + # Without OrderedDict, output XML would be non-deterministic. + # https://github.com/LettError/designSpaceDocument/issues/10 + loc = collections.OrderedDict() + for axisDescriptor in self.axes: + loc[axisDescriptor.name] = axisDescriptor.map_forward( + axisDescriptor.default + ) + return loc + + def updateFilenameFromPath(self, masters=True, instances=True, force=False): + # set a descriptor filename attr from the path and this document path + # if the filename attribute is not None: skip it. + if masters: + for descriptor in self.sources: + if descriptor.filename is not None and not force: + continue + if self.path is not None: + descriptor.filename = self._posixRelativePath(descriptor.path) + if instances: + for descriptor in self.instances: + if descriptor.filename is not None and not force: + continue + if self.path is not None: + descriptor.filename = self._posixRelativePath(descriptor.path) + + def newAxisDescriptor(self): + # Ask the writer class to make us a new axisDescriptor + return self.writerClass.getAxisDecriptor() + + def newSourceDescriptor(self): + # Ask the writer class to make us a new sourceDescriptor + return self.writerClass.getSourceDescriptor() + + def newInstanceDescriptor(self): + # Ask the writer class to make us a new instanceDescriptor + return self.writerClass.getInstanceDescriptor() + + def getAxisOrder(self): + names = [] + for axisDescriptor in self.axes: + names.append(axisDescriptor.name) + return names + + def getAxis(self, name): + for axisDescriptor in self.axes: + if axisDescriptor.name == name: + return axisDescriptor + return None + + def findDefault(self): + """Set and return SourceDescriptor at the default location or None. + + The default location is the set of all `default` values in user space + of all axes. + """ + self.default = None + + # Convert the default location from user space to design space before comparing + # it against the SourceDescriptor locations (always in design space). + default_location_design = self.newDefaultLocation() + + for sourceDescriptor in self.sources: + if sourceDescriptor.location == default_location_design: + self.default = sourceDescriptor + return sourceDescriptor + + return None + + def normalizeLocation(self, location): + from fontTools.varLib.models import normalizeValue + + new = {} + for axis in self.axes: + if axis.name not in location: + # skipping this dimension it seems + continue + value = location[axis.name] + # 'anisotropic' location, take first coord only + if isinstance(value, tuple): + value = value[0] + triple = [ + axis.map_forward(v) for v in (axis.minimum, axis.default, axis.maximum) + ] + new[axis.name] = normalizeValue(value, triple) + return new + + def normalize(self): + # Normalise the geometry of this designspace: + # scale all the locations of all masters and instances to the -1 - 0 - 1 value. + # we need the axis data to do the scaling, so we do those last. + # masters + for item in self.sources: + item.location = self.normalizeLocation(item.location) + # instances + for item in self.instances: + # glyph masters for this instance + for _, glyphData in item.glyphs.items(): + glyphData['instanceLocation'] = self.normalizeLocation(glyphData['instanceLocation']) + for glyphMaster in glyphData['masters']: + glyphMaster['location'] = self.normalizeLocation(glyphMaster['location']) + item.location = self.normalizeLocation(item.location) + # the axes + for axis in self.axes: + # scale the map first + newMap = [] + for inputValue, outputValue in axis.map: + newOutputValue = self.normalizeLocation({axis.name: outputValue}).get(axis.name) + newMap.append((inputValue, newOutputValue)) + if newMap: + axis.map = newMap + # finally the axis values + minimum = self.normalizeLocation({axis.name: axis.minimum}).get(axis.name) + maximum = self.normalizeLocation({axis.name: axis.maximum}).get(axis.name) + default = self.normalizeLocation({axis.name: axis.default}).get(axis.name) + # and set them in the axis.minimum + axis.minimum = minimum + axis.maximum = maximum + axis.default = default + # now the rules + for rule in self.rules: + newConditionSets = [] + for conditions in rule.conditionSets: + newConditions = [] + for cond in conditions: + if cond.get('minimum') is not None: + minimum = self.normalizeLocation({cond['name']: cond['minimum']}).get(cond['name']) + else: + minimum = None + if cond.get('maximum') is not None: + maximum = self.normalizeLocation({cond['name']: cond['maximum']}).get(cond['name']) + else: + maximum = None + newConditions.append(dict(name=cond['name'], minimum=minimum, maximum=maximum)) + newConditionSets.append(newConditions) + rule.conditionSets = newConditionSets + + def loadSourceFonts(self, opener, **kwargs): + """Ensure SourceDescriptor.font attributes are loaded, and return list of fonts. + + Takes a callable which initializes a new font object (e.g. TTFont, or + defcon.Font, etc.) from the SourceDescriptor.path, and sets the + SourceDescriptor.font attribute. + If the font attribute is already not None, it is not loaded again. + Fonts with the same path are only loaded once and shared among SourceDescriptors. + + For example, to load UFO sources using defcon: + + designspace = DesignSpaceDocument.fromfile("path/to/my.designspace") + designspace.loadSourceFonts(defcon.Font) + + Or to load masters as FontTools binary fonts, including extra options: + + designspace.loadSourceFonts(ttLib.TTFont, recalcBBoxes=False) + + Args: + opener (Callable): takes one required positional argument, the source.path, + and an optional list of keyword arguments, and returns a new font object + loaded from the path. + **kwargs: extra options passed on to the opener function. + + Returns: + List of font objects in the order they appear in the sources list. + """ + # we load fonts with the same source.path only once + loaded = {} + fonts = [] + for source in self.sources: + if source.font is not None: # font already loaded + fonts.append(source.font) + continue + if source.path in loaded: + source.font = loaded[source.path] + else: + if source.path is None: + raise DesignSpaceDocumentError( + "Designspace source '%s' has no 'path' attribute" + % (source.name or "") + ) + source.font = opener(source.path, **kwargs) + loaded[source.path] = source.font + fonts.append(source.font) + return fonts diff --git a/.venv/lib/python3.9/site-packages/fontTools/designspaceLib/__pycache__/__init__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/designspaceLib/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b9752a63f1563b55a35935aee75191a27363cbf GIT binary patch literal 38428 zcmb__3wT_|b>7~6?_#ld5(Ghtx`arPkf{Yl$+AR)v`EpAWKobT!jip_3@>pnzy%k( zz}y8N>qVTHimkeqt0a!=q)rQ}j%(%Nx{2eYvC};3PoI;fd9?o0+cb~nWjBeFrfuR+ zPOSd_nfutgSn6S$;GLa2cV_OHnKS2{Ip@sWN`HSohJSbb^uMV5$sfgHf6SZCe<|GD zgUgvUVlgXb8MWA|Q8o<5su|9`{h|0@nX4X#Fk@L<~gH0U}ejL_Mny987mK2d8_ZKSb5kgSpE1Nxi4lF zt%0Xv)_^^FHBsJy`$206_e1s=?swvT*c!q8h`kf{i9qY&cCd$D~tCc;I0-d$y^n_2ma1Mwyh|RJP5+YqhG=tX0oVW!>@9wo_fM zpIxgg+NT?f8>@D``DUdW${p$P#2q}_*igu6JBzBi)~Hg+PVJ}hZ*q#d&oI<0M>yOXV%xrSP;)T%ApT&pzCJLZOi?lhMg>QY5nrcg|>FKGAn_Fu*)yu5KO|CSmbvNZ; z9GY&t;kZdjPB`|On@4Y|rgN#P36{kt^q$jr#Q2#q*6uZMt;Pu3wzS08g)7X`XM?Z!g_F?VxXOMaNyJEZffXQls9S zM^idH)Cz19lsh!|EA_5Rd6U-#Rx8k#06PnPsf<`d1DTUn_0G- zm1a{tZ@5Xvt}WrWu!iH{)nn zaleoEsf(4`hOO8$onRstz??>^lSU9j-)4=M2UQnAcVzu$OeNG!tam?ygA9l!`d!i+ z!`qvF3v%dJ8iiybt)_6lh%54sqj3)|hb^;XWpqF}Zl$fbm3Yc1V?eDGs9VzFWXY%; zGR-ZrjQ@{ucH_OcoIwN_`q)CO9Y=_|f-Z9ttIo2UXq;O?Q`lXK;K}Ierbv6FDOn#w z?`EBx?J*;5wD$F&Rzk;0e*T`QCV+8Fh-xbsRfKUFykUaVx$PpiU*`TFGPP z0p%jH>8<`1!P)SIF4stPiKv>ms;k_fGP#1fb1z34JA%5EV%iFh1G@y z5{h_XVPSovQqxb=VZN5g)A8=0t7JUx;>+1fStFm6lttV`{&9fr!R3r12nLxmH-;f5 z+ex~8C!N#P#ip>FNJp}2Ueb|IAW{_)yAs?$4&hRaKB{1*ij;<+b$U?Fb76Avqh!Sp$VhY4~)ls`pgSwLe z0dezHFc-~C!QAk!sidYIhUF#&zMGj>1~?pL7Cnv28AlK^lE$!+H{!VXmp0-rr4xCh zHM||lIaGfHMbvE!jxu0f9rcGVxg8Hq;gUvYMGLdVvr+>P7(L7Ed}37)!NL*FsbZ?5W=Lh?<*fG|$^g-GiJRy)4L; zAzoFK{dPPP-WLO>jT?K6g3%i9?yr)U8Dyes1YHmvtFgGSpk|{l35W6|9>^@wR3VvE zOxZS=q}KP~avnnv9n5la86r7E?i3h6^e<(Fe@QF-u>mV%WuJo zDpzbZ$7q)Pox|axgV(M=!g2GA+@~5FYmQrBeAccsHx%UOzExn^gSM(e#B;N}d7!@3 za0eK(?yFr{JI^{DH@{R_t=6u{3vy2LO3h|;Zua>B^#IzVg|;L`EcF)NlUk?;8L;2g zJcEZ2xLLlQ?@)70dzir^4BpD%Q3L^v8^8^RghWSB{v0Bm+!T~Dwh(V85hmIxgvoXq zVXB=$m~LkgX4*M~*>)abuHA<)-!35RYxg58w2KJ)+XHK5($0lqz@OFI@UE#r&6tB0 zDk8?qH&8v!EZ1vW*Ax(Db^!%M*ocj!6Zk8nLBixO9>mD*cXh8r0ygiaL{xTj3qER0 z<+~<{x({!0(@V9=#fDNOYnqW#1d_qi!x+-paPkmeE4UoWCs`2Nq>;_XF;TDk_t%Bn zAuhArwkgI5cn>bAtaFNCdc`rllHi5>i+@Z@T5(J`vg5QWqEzKCj96@D->tWrjWuF; zrFP6D(;&@sHqJTCYIB3>rh??)n77_~B5&f~jNIyYaBtRuz{e*ql5{~HE}g3=XEMwq z`7k@JDl3Hi8GRIeY_4JjvAVH(eDdh)kCcwcze#hoa#<(7p(9bh^^#p(KHr?2esz`J zcI3#U2kxb+)ja>|%XI*8M^Fd*4lVAkWoG*N&7DE-dJrsPwLEEZt#*8p@lvI>tsx!R ztwya@QGNk^*Ii_0nggW!LdP9_^L#=ko7*2icGhlU>BzAT*HH;z2JtGO6O`P2IN}9nlQ;CFrZA_TWDrgSvMQM?KZ%GZ)28G3cxz{Lg&)jD;OY^U z2}KOfy^c8-)*VhVV)t|Y3oyz0A#gA)!vEPoHk1t((Wlw5;-oB30rDyrCW+RA=A$-9 zeBGQ^8@5@6Oi{nWX+oC5-ahD%_XODO09%`j=P_xRVHxY|y6N+gQb3XMUg>25L2*cc zfXq3lWlpYJAA^Xo9`-SoY{NE}fnaI(2JgcHkwUs_EIw~&RuS}so10m->-Oa}b>j2L z@_%r}S~vPtu**9nO+P2(*#z3BIDUvH*}#r^--TqoL@snz^m9lS;Vu?eHsX=KW)pb{ z<9RP4ZAw~~Hz7*5A=dAT?Sc>w5g%mhnqeh2Ak=~##jWJ7*oCBOV|AQ58(U9Gj-;34 z?RXyF1wlWWL#HJ%tQQQ`^y)C2WIaxKP1j?kF{+u?=eCV%ttKNDj^)b@q)a_xRCr0EKa5-ZLVyP@-#v-n)7w$z&F;8S^&c!+xOfsf5M3y;* z9M^YlCb4KrLaz~5*>)T$r#4fTv6*fsIjf!=$C56ynT3#%xe$jIExwrsnx9%f)K05M zv80Q)v)2ryOh_DBHyz)M^9}2$QRd`3%#&+twJRJjN6$hBqBU--PB7U#u@BFeDSeS$ zI6>FnDpS{ND5wxQ&QPQ1hv>tE;IL3HtQObS?7B6Tb5ooOj`U?YFEvtbbIR1ONlaPj z2N{}j(z#SwbB&5?oa>^0R5>*kZO7sKbAAgYw7`;tD1a3gg@U4lX~YWg0>ZSR8pyYZ zEAnpyclY3OK8>JL0I=d@{^b+|fg}Whbca+O%GY5m4V6sF%6x3t%33){+Zj8nrEL86 zLE6qkJxxWpQSP&D5Jk9AE(=t~mDhE=sOTAU|tf-o2Ax?9U++mTp zAF8a)hEn*DpLW)l#@);XPmoVmDa0qB4V{~RemIoSyXDv5txBO;%3;t%;EsrnuEd3#J7b9ks!CUSx0yLBMH-aYIxg%aiH)G$KAvholaEj_@_f z{%fbIl<^_|ubq(?)&OgdNet_NwRcI3Yk?Js72AWzJ>tS^TrB#c;yBV|@Y%+*;NY_LZLFDg|%^^{Y?M%n<=Pwt$U#$hvnh*#oMr-$W zb44JmC@#L$I}k)DWdaGjr0Y2rTK`KKgQ}^Z6TryHB&8v~8k1{1w?IS12K4UtHbARF ziHFjZTYxwnV8S7Y^qLDBts8ql+L<@Pp@|v+jGUI#hHOFmaSalXua}k{K97gbYn`yRX8`uf4MbC)ru*yL$9e zKUyBve%mX663P56^%JLt-%lh?J%@1AM-xz>U?}hCfbn4O?vlKnWnO!)$<)1WuZ{Zn z()p4%yaHgo%6v7jRuvDI_(E zUm^V;LBxVRf!ge6j3q2@5Qj!a;%US)UObC<&Wq;}@AKk?kEO)?3@b$2xENDq@^IQD zc3~CXgiY+KVf9}C|7+7*paq4JZF1XennrT}e3wvvaYVWP-junPFiTK!fLzgkZ{p!!j5>wfeZ4HsRC zYAOk^;B!oBtb^srNy{=<8_Jf&4D@oMg?8Q~&tc6$e&|M?MYUSnvdq{L0ypDLAJ{}I zYjd+x*)W%zuT{?3HN940X7&9HSk_ISuUeK}S0BbrfWyRHc1;|Y;P4D0QOR*_SY$b0 zdZf-cDf;6;bG&wk=!!C-pwj`8`T^7^fD0HJAkGv4WGbgc!myoT_5gGhWbeWap%-N$ z#2_k+^;5v3NlX8=b`oboFOxuw3tG=YC>_h=lGYzWg!6_@AuE_~E0CL4pfO*8zI+8O zUxBWCC2JYaWHG1WbDdqU+Zl|~_I7>{b%!JM^4XQi%ppaSiI9Wgs4A`|icKCxmRLNF z)nnxEYpwCFW(UP0d?ta?oS4#X(p|b@&;x4|iWIam?u^l*3QIf`HdYcASEPx`jPxWm zM;PFBffZQQUbHV^^>YT+xrzekj`Xkpp0mg<`UhgulSQZq@FuETZ+?A84gienw2YG_pPg5Y##3X_dN~jES+}x!`mtz=DF$C)}NZgG=dRMZxS-f(6~K zIqC=bPR9LQ=cNqp#yF@8O7WGR3f>=eoW%aea`!{o|lMiZ{Q8Zb!#=cf0x_ zHa6Ns^)aOV)1a59do<}B9ERxW)T^7-53|aDwY^@qz^?O)zHeLK?S7dT^)}WhN){bj zmNd|vc7|-@+Gm>`^*&_dl+4tabK8~Q1 zrP#@G%1%?sQqI}=a-UtGMDP^2cex*N@rgmahge-t)46!42%~$kH3&gckDuoO z_yg=@G8nj6?e!e{v?m{(sv=om8&Es6l{cjD0+#yMcvCk}Bb08tJQIJg1Fn7B;Ofr( z+CbY`-RAUoec&jsZ(l3?a0hrdZ3Az6{?`WJ2vwc0rsswL92J>i-fJCz-M9^~Xx{6u z!)AzOV6%a<7vu25+)C0$fH+w$S#WA4Z6#))eMVYF!Yl=ispMQMaYyMkXe>hqMc8cV zj@g7*u@m*XMYuYM$Lho9R_w(lw3goeW6%ZD=pTRcyqkG*&8Al?EFp~sq*m=u0yA;t zGHm(j1@@HVtq0wLU&AACw^To|9o0l8`4M&zEmCwn;~y37uu6|byUX`Hn}0F&w)xpx z?^+~7_Ww~R$>6#dmote9(H9U*;HHFr*-A8%ThO^*!=JEgv1dJ5+=Q^Q1wFjz)F-7x zMy)hq++UGp$<>5gSjx&n%k!sLwH> zzyyE7i{=+zJV>ImN}q?k^YGlpI!qj-iTYrZ`&c%up;JGP8$}zCnd7(xRx(C?`f>nBr@jSR->P(8OrP;efjbQfmTknjjlM6zxL@bJbQ#JPv7| zN&&G`?IhONC3wMLJp&KIQX5lBa@4c|OX^Ju%E2>6*Vlxn%vGaF!`5>^(QG?wrFO+Y zu=qU9_eokNNXyQ|>OftlcH~N6QsrcdJOUI>${Ib_I!rG&`dFA}Jg+2^GApfImB8lZ z4R}e+RCC%Gm9wg#V5Ddwmb>Z8;!OM%j0aHQirfGr0yI?r4i5xV-C@|aPJ8+o@1=^g z*-bXDtO2E(8(7f7^RV80Sk2ZNm8M{{hhF6(jTZFz(5RuI$s^H&vOI)$SF!H3Ex$?S zED?}P)N+oo$LRJ98XtVK zsm?*jcmeo079YfKYch&&y(){y>l9>o30bDV<0<Km(FEm8jkwSAd@rxC$I0)V&1qu_R)BxeE$pKQau_Q?-{JEXQU7N!77VG%EPu-EFl z_0y6cyn&Mm`N+4^UY%h%LxBqb{k;?~PZIBCimuI2F9dmz;^o1l#FRvxGEq)9bM53+ zLmh>efZ=htqkx@U=Z?*czyhuVyE8lr;Wv==Ac0?@cb7+fEUT^0UqyZKtH!g2I*s1y z+bURnXcxsB;e-2se^hj5#Teql4=g1B)A1^oJ1s`DukT(qU4Zz zks(UXpk&%ZN4yW{$ae#U1tI%9Sb(T)>T)EICjudi)DtZi&G@!Lw3C?E-nPK~OcWR+17MZZDt@hyBR zs2F{hei58(73jLwWX&L}o5e1yg)=AT?gR6%FE{1=S_=9fc4xZ=JQN9jEnTSli>NdYN-fTlq^2bM1&Ag5OXF?~7qx{2 zTo6)#$ifi1WptqINx&LG*&);&(A#?w9U=&6EF8KZgqVy0z2KfH=%y*}ok%6+h1;g2 zVpAjXoM6IF5BIsRQ>Mp)Q-CtUNLFy(ypoo+X>K>4~(_Y=0I=_Ir2T`{r zbr1He`-BfS^4X(%SbK?!eDES3>!|*G<;iD+?K6!)Y z3Q0^jzjsFD4O#CE!Vj1mZy4ox;4NRpwB5n`YX&BCu5B!gN>7T=hV(JX7guS%KhIPP208gQx2 zyugAdzz8poRe;$i-`s1t@pJj4e zmTlFz1I)uUhhL~)kEnO+=Hzyc$djbS%`HfR|G4P+efjr&bpP^i^6&!l;@#5uub_YS zk)Qk!A~E3|nx}xTK;=)DKK|*ARpc~W`d%+BZzR1Mm`CU9NQ0ooOeEPt-zQQv70sz17icJYC9FIa^9hThQ+x|? zkM{Jb-;_KB(Ow0pva>_|t z15OV4(Ss<-m|s#j4!F}AsQ3^{f_j3g=fRPn0mJ(>7l^HlY>f(Kg-$}V|(p~MT(O>*ax zIN`Y|nPjbO$y26H?dYJALcao$(oJ$D)3Mj-LB5_Fo-|dQW9(rDk282HgGU%V%0LLB zkVaB3C6Z;ICSkvZ1h-!U;LlhBo{ zqwox(A7lc%wYztI6%VelcL)}HXVhrz*iMb0wp^tC&i_Y36f~sONr)iQVplLgR(o;m z0w*s;X{KR<3*k6prC=}+E1I898#P5=phSjuLi0HNT@z9olFr7A}eY}tewHWIhNN`oT(s5%#EpjQSy^SWhFminD`&q z%t<=Q5+*xJfaG{3ivE2&?-2n$2TAdsm*hF_<@pfc<8z8s`i<|BHhO7Z8*|n$^5ugz zW)TyzvHphwxd^~*x@a54gkF-wz`-M&66g6yh!|U|>Cgqn zzRa8+3HllnC`u{Ttp0&PKu+8~0^t#za?yjur%J}E+pm*+veZR={tlIWg7b^rsHqQW zhKXz3qbFR)k`9s5_-k6OYX>CfWiuy!vUp06R_QrgnGv@s;})E}h5bbU6=3 zHeIP7MP9LxtLGTwbXK2WP+;&$1a2S9C61#lDC$R;{BIaM&)~-x9A@wZ214FN=kQCs z{Y3^8z0@x=Ac;}zhYl2yUfRR7K?ENH<_bCV-TmMlLp@cZ^UCJ(2l6|zsq78eo!Pf$ zr?V+3yNL3Uf26VZ;Bwd=-^6bx%1Il}Z*~T|m2=oTp-)1fnO_`bXy%98Um9ljqIi$R zV0XMpjQTY0>jQ^|#I(-?h~$_d8206OAsF`ei)r70Y5#y2_l;L!+}~$S;%&RF9H#Ki zY5>4S46mG~yo6P}6Om5CD|K8{7lRg2&5*o?X)MN97+#^EMdPl~3~MZ8#rT?&FfU=B zgaz>r>j#DQ_5{N;t9~4BX(eti9hsjR(Azh}R?69gV`H#;6mt=lWm;UdhDatBr&muQ0*d{PzfJKoEG6&#PmFa3`VGzD&g!v-Lxf*)}o zhFAt(Ol>rmZoLbxm_Ls~Ffg+c#hRtVuyz0Ah+{9ioY17LHO7*bbfQhcf>||Ib-v$a zi?S#fgMEXdM<7mkZ3weo-(!GX13m&55QD$)K$YLP_nYv3fh*eZsy7heND_qun@-XI zn`4ZsUhJA@RNFHhx1To;c+L@yo8c`40%hWjT>}JrJRbf5+mpvr+7$I)YuF=UkK(zl zO3W5%OFwc45(PEN*jQ!|$2~hC#2|7@EL`F=rBg_{#xqDTeJ|pOrzVtZ?Zg=5i1%XW zjFrA1ZV1>T&l)lo_&j*{XT;PF^&E7=NvQ=~G#R5Q1bgQxf*4eKxfC)zh^Lo zZfia4Z3Z_(!+ChTg?W*dI}?7b;A*_7T0H&cu!;SsaJImq3+#vfMjfYRHC5$`-nAE4DjXB~UZ-l=W+mK%3Cl*wd|Ywk9*%xEZ?Brw zI-bLn8O_t`$4MBW$)=So(LD3t(LQKBWciRmGc{8u?UD0uG{yKC-g0rF`J2cPV+%yJ zd;JHeQIf5xem!LwFBilR66Owx zS$POC$GGhjIjN||Y?FC& z4mmTD6KZxZCl&5GCsq$AsZEgb29$}ZpM)$dwdgyc0-8?zs0Bra9Q2gg=}`r&BlMgq zwt3=0b`BcC0M$a%phoZ42T!oc*O3F_l)b)DRlr_vhcD-dx5byZ%+YV9%!3Dbqb=Bxpmh%;j^Dxf9`V>1_AsTjKRWWg=ShS{lcWbUn&{X; zpTRvHDB|IL419Rjcrpo<6b|X*Nl;W0c`jm!g%rFo^gYHNqn%jD1SuF}NfEUYNII#}^FAn6;8rBqcm!5JtP-&n>)VB~-{d=a2WpGEG*nXs z8d%zCkKTSn%3@^)OfC^0X;VbpgwiHUHBWN@hMV7S4njRN#COAy2`kX`-v_0J5@%%; zwP_VsVkM819moNt&^inVz_TLpj0U`ENR}^27k)n zj}c6bg%&w2um?D$tGg9r(Sg9Mv%5xF^~~^rD7BM}eVM@zF!%`upJi|Zs`5QW3LOSN zM}38lUtsW;3<5e;9t<`xco^&^phH(f%+*E1ZbIz`iK&!UXq$$l4@yLuL=zt!?ilJn z#1f=uqqy&u>PXZnv_$ZeZzQF<7ngGsq*Ct-0EGaRqK)|3_>&VDQ>se?oD>;?l0}(( zRwz-q373d1;3dMWgpdw+)Feikv@KbOR0vrjz+*aH2nA|cP~eP-i{4fqxGzRHNamn{ zz))Zu%~yi8s4bv;pTc=QX`IrdpU}8QA0@){0%eN@oZ$nPG7Eg$z!C8mdVda6nU$gp%AHk(#DRib_l6*cDqFqhoko~htUP>XbB4JeWbhD!IR>E$S2Vh!!WH`Q z2%ieA_&LNpD^$5pchkL)2b&6K{CaxpyiTUmZP|-cI8wjHN+oQ2YRJ*&Pe3F#MTNy=kyQHYRg!tTy2uK91GJ%LR%ta*}P>9sPkaZlID5qw` z=YSBtc?_;*lo{X)i?{g7FmI^*g99_RmJ`YYUc}GWQ~iBA`l-o&BJ+-c+EVtz3Ugny zRXzY6s1a#h28AiNNbA0e2qq8E5FtD!oH3rc$E6p%li6nR2gd~bRT5VaQFw!+)k!Hc zk3|+XWns}akKgPTcH_aa&mP%trLY)-n`dj>D@9V6YQhFYCjNM=ZsMH3zAGO#fG%9z zN@*x^S^6C~1oB9%WqKt+21Nu-frx$vH9!R2OrwTjso@1(gDwL>mARl+r9c3iJA_Pl zF2J|Li*fT*t~FuKil4f9Byj7*Np@V!nyrC3czc2ynb_us9aR<>e&7tL#mSreL6U=| zOst%APT6F5%$z*nOqS-L#t>D5tOJ6;RjAyaRQ=n;3TlHOAsJc@pceHbFd&ySU6m`g1Zy36-l9$N)Ucp$jj2 z%!BzwPBZ@>BAKT%0Ac|N$H1MrEg^-KG<=Mq;YkA7G_{AX=Sb)!Fzu_M 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 U9ZtTkh)GI(OMf^9|I&BxKbT5EJpcdz literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/encodings/__pycache__/StandardEncoding.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/encodings/__pycache__/StandardEncoding.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aa390f1d25c417f9cd0fbaa9788fe996ced09e86 GIT binary patch literal 1821 zcmd5-&2r>45O&Xx=Pya|80>-g02it#iiORxK-er~`Rki(_t;`&X(HK4W?zLHHy(hO z=_`-GZBMkNY-KC8M-J;MYt(YLzSgI&d(`pqI+N#ucJ2F|zk_;Ca}qiZG|!%BT*PSA*-RE)A~j(3RwaZY<}u zGe&t{?8#STdt9kbra{>n*D=EDrj_Nr@?;HddtAq9T3)KqlhdVTWMG0JQx*PoV_CNaOy1Kw7+pU?^{oVv#lGvjQW~*8uYEW)3rp;DMHVzwlwZ+ zoW)h3PN(V2P!L4A8kE6B<4H*><1s1p+F72cp5ZaWmkeJqJYhIvc*^iK!!w3&7`|or zj^Ui)dxqx>7Yr{Leqi{K;gaDc!%qx9GyKBvE5mOLh?~-@YDayfVO7dJo$KgsJ#n&8 zq0+k2z8X4Q54ILME9VJUkx0yAokUx^8_Tn(%jGCE zqiw^>t(-RA@boZhY-^m?mKTB2>arTVXtg@vCK4Vb$PgaA(SN+X<7UvtQ0LNRMl(9b zuP5WzXhsrwveojMn57hytwqgJI;v?zajWz@R@O<<`pX=yIdQdo0U4L#vH z>2ho6mgi9wn0Ko3Qd;xUOWDbBT(7Fcd9CFbf|Pce3C#^IDyoG#bqClEwo!iQj2e2( zT_eT4!+E8~9dqhNrlRNnIN;>*Swi19UvH%$j2+@#0GOZ03g!GFRqEv8438wJld2d* zP4A3Kdr#EEkGK?S#-^k1u`oAx2<{HS3CSXhPVS^MiMf0CID7sG@Po@<9F(umY~^a< z^{>pIkN+j(@VYHJAz2mA#NmmTzF53Cw7s*%Wz{-oic@Ki*M-q#u|J3a?8m2{7D4y) qk#zi>YA6(2XZx4p8Vad|2oQ>gkf-|tFF)&CJsA3Y><$0QoBaoJ`Ut-O literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/encodings/__pycache__/__init__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/encodings/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9acf60cc90caac39e35e5864354025608c4bfa4 GIT binary patch literal 267 zcmYjMF-inM5S+clL%2V5dV$-4CW45;34$O8XJj&tGjqF*v(w8=yD)ym7x(}_bE!`- zGji@QxPq#tpy{eMi^Zv`xcK@o_jP{n%`uv4ZYuM zcxRGZC7L|0OD`O8V|(U+?d0QxfnIPtq@1^xm`VKE|K*HZj`CPnGx})RQS34vmEFy+ O26k`3U+*9MsZ@Vx@lOu` literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/encodings/__pycache__/codecs.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/encodings/__pycache__/codecs.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4584591c769cca13090e96117b8672fab0664eed GIT binary patch literal 3510 zcmb_e&2JmW6`$E%E|;Vv%d+Z^v< zT?Owq%=+oyEq6Ts$mzHV>r~?l@x_O%;|YFP6W(LaS!`{v=B4ppZ|y6Q#=hzb|Mr3E zW~m=#v50bikj10E@IOpc*AM+I@u4qLEG6l74(?F-p%nfo7qOqD{;!52y>l=W{%dJC z5WWgG`=VLj94UX0wT=pV7 z+GPZ_h6lQSElwf@*AA~QLW|Ea*!Z)>k6O&TB!GPLk80 z^U`T2T)_cT{vP9O*CI1L;pBxmL&T~mw+TosA8sT*S19}_J{KN5-rpK<5#~% zt(gQ&=}?qw*PIw{#0cV~c}CJ1_2Ooji(qCAT^)qOAu>Q$V7Ec8t5WO0*GD^s0 zI@Vc&6DRj(2B$OUv^C?d`K|Jc_>EUjGebm1oIP|(s+%`3@=pPZ9rB{`m`_|~70#4T zs)aRW6R&XOC*#WqV+VnZubXDkNf7 z)O(dbT9+s_jO^4VnZhklV-e+z$pSbVhUOFtF(clIbCH?ol$j#Qvf z^|UAUqjFYBQc&f~#JW-j0{JNDhH2b~mouALz^)?Da@6vKWPiGfI!wuf1M z(rZqD&#qw8oRna^&OP|du`IrVna7u`m-zzTuki8mG5(`_Mrn%lT3XgAyJiAa^j<#muH6=Qjhz~qZJD}7C;j0Uo+ zd;_5Q$-tK11ewAszX+hXeu*yw&tv#zwu-18pFI{P6lq9e`2$GIUYssDTwp7qd z@}mOFNB0RnAUGs=0!S`@2k<=~N>)E7^FB3r-{9{J9vb|&!T%V1rk%}X`$tGRiY$4P z;1vc8#K7M3N4K_h64BeK?xH?)v*Iwbq!b7Ia6mrnW-jT*KP#$Ght^zl1c}DDPJG`q9&8 z&z^N0I$yJZ!+uBV?1gt<10_(h-3wHriX)D>k%am$XP8}FLVQWhSH zD0vBh%%D{Hs!Mm4j$Il~rinh2i%>@0U~7~{D#_A&kj|;VmaV`;@n5YiBULQEgn1pQ zRzuej!A&Q@MOFX+ literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/encodings/codecs.py b/.venv/lib/python3.9/site-packages/fontTools/encodings/codecs.py new file mode 100644 index 00000000..3b1a8256 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/encodings/codecs.py @@ -0,0 +1,119 @@ +"""Extend the Python codecs module with a few encodings that are used in OpenType (name table) +but missing from Python. See https://github.com/fonttools/fonttools/issues/236 for details.""" + +import codecs +import encodings + +class ExtendCodec(codecs.Codec): + + def __init__(self, name, base_encoding, mapping): + self.name = name + self.base_encoding = base_encoding + self.mapping = mapping + self.reverse = {v:k for k,v in mapping.items()} + self.max_len = max(len(v) for v in mapping.values()) + self.info = codecs.CodecInfo(name=self.name, encode=self.encode, decode=self.decode) + codecs.register_error(name, self.error) + + def _map(self, mapper, output_type, exc_type, input, errors): + base_error_handler = codecs.lookup_error(errors) + length = len(input) + out = output_type() + while input: + # first try to use self.error as the error handler + try: + part = mapper(input, self.base_encoding, errors=self.name) + out += part + break # All converted + except exc_type as e: + # else convert the correct part, handle error as requested and continue + out += mapper(input[:e.start], self.base_encoding, self.name) + replacement, pos = base_error_handler(e) + out += replacement + input = input[pos:] + return out, length + + def encode(self, input, errors='strict'): + return self._map(codecs.encode, bytes, UnicodeEncodeError, input, errors) + + def decode(self, input, errors='strict'): + return self._map(codecs.decode, str, UnicodeDecodeError, input, errors) + + def error(self, e): + if isinstance(e, UnicodeDecodeError): + for end in range(e.start + 1, e.end + 1): + s = e.object[e.start:end] + if s in self.mapping: + return self.mapping[s], end + elif isinstance(e, UnicodeEncodeError): + for end in range(e.start + 1, e.start + self.max_len + 1): + s = e.object[e.start:end] + if s in self.reverse: + return self.reverse[s], end + e.encoding = self.name + raise e + + +_extended_encodings = { + "x_mac_japanese_ttx": ("shift_jis", { + b"\xFC": chr(0x007C), + b"\x7E": chr(0x007E), + b"\x80": chr(0x005C), + b"\xA0": chr(0x00A0), + b"\xFD": chr(0x00A9), + b"\xFE": chr(0x2122), + b"\xFF": chr(0x2026), + }), + "x_mac_trad_chinese_ttx": ("big5", { + b"\x80": chr(0x005C), + b"\xA0": chr(0x00A0), + b"\xFD": chr(0x00A9), + b"\xFE": chr(0x2122), + b"\xFF": chr(0x2026), + }), + "x_mac_korean_ttx": ("euc_kr", { + b"\x80": chr(0x00A0), + b"\x81": chr(0x20A9), + b"\x82": chr(0x2014), + b"\x83": chr(0x00A9), + b"\xFE": chr(0x2122), + b"\xFF": chr(0x2026), + }), + "x_mac_simp_chinese_ttx": ("gb2312", { + b"\x80": chr(0x00FC), + b"\xA0": chr(0x00A0), + b"\xFD": chr(0x00A9), + b"\xFE": chr(0x2122), + b"\xFF": chr(0x2026), + }), +} + +_cache = {} + +def search_function(name): + name = encodings.normalize_encoding(name) # Rather undocumented... + if name in _extended_encodings: + if name not in _cache: + base_encoding, mapping = _extended_encodings[name] + assert(name[-4:] == "_ttx") + # Python 2 didn't have any of the encodings that we are implementing + # in this file. Python 3 added aliases for the East Asian ones, mapping + # them "temporarily" to the same base encoding as us, with a comment + # suggesting that full implementation will appear some time later. + # As such, try the Python version of the x_mac_... first, if that is found, + # use *that* as our base encoding. This would make our encoding upgrade + # to the full encoding when and if Python finally implements that. + # http://bugs.python.org/issue24041 + base_encodings = [name[:-4], base_encoding] + for base_encoding in base_encodings: + try: + codecs.lookup(base_encoding) + except LookupError: + continue + _cache[name] = ExtendCodec(name, base_encoding, mapping) + break + return _cache[name].info + + return None + +codecs.register(search_function) diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/__init__.py b/.venv/lib/python3.9/site-packages/fontTools/feaLib/__init__.py new file mode 100644 index 00000000..ae532cd3 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/feaLib/__init__.py @@ -0,0 +1,4 @@ +"""fontTools.feaLib -- a package for dealing with OpenType feature files.""" + +# The structure of OpenType feature files is defined here: +# http://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/__main__.py b/.venv/lib/python3.9/site-packages/fontTools/feaLib/__main__.py new file mode 100644 index 00000000..99c64231 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/feaLib/__main__.py @@ -0,0 +1,77 @@ +from fontTools.ttLib import TTFont +from fontTools.feaLib.builder import addOpenTypeFeatures, Builder +from fontTools.feaLib.error import FeatureLibError +from fontTools import configLogger +from fontTools.misc.cliTools import makeOutputFileName +import sys +import argparse +import logging + + +log = logging.getLogger("fontTools.feaLib") + + +def main(args=None): + """Add features from a feature file (.fea) into a OTF font""" + parser = argparse.ArgumentParser( + description="Use fontTools to compile OpenType feature files (*.fea)." + ) + parser.add_argument( + "input_fea", metavar="FEATURES", help="Path to the feature file" + ) + parser.add_argument( + "input_font", metavar="INPUT_FONT", help="Path to the input font" + ) + parser.add_argument( + "-o", + "--output", + dest="output_font", + metavar="OUTPUT_FONT", + help="Path to the output font.", + ) + parser.add_argument( + "-t", + "--tables", + metavar="TABLE_TAG", + choices=Builder.supportedTables, + nargs="+", + help="Specify the table(s) to be built.", + ) + parser.add_argument( + "-d", + "--debug", + action="store_true", + help="Add source-level debugging information to font.", + ) + parser.add_argument( + "-v", + "--verbose", + help="increase the logger verbosity. Multiple -v " "options are allowed.", + action="count", + default=0, + ) + parser.add_argument( + "--traceback", help="show traceback for exceptions.", action="store_true" + ) + options = parser.parse_args(args) + + levels = ["WARNING", "INFO", "DEBUG"] + configLogger(level=levels[min(len(levels) - 1, options.verbose)]) + + output_font = options.output_font or makeOutputFileName(options.input_font) + log.info("Compiling features to '%s'" % (output_font)) + + font = TTFont(options.input_font) + try: + addOpenTypeFeatures( + font, options.input_fea, tables=options.tables, debug=options.debug + ) + except FeatureLibError as e: + if options.traceback: + raise + log.error(e) + font.save(output_font) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/__init__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e008b1bdad93ac38db9b8046c39eb76976b4d254 GIT binary patch literal 266 zcmYjMF-`+95cH)XLdqZ9rZ{f_4HAk{AVh%xDXEZ<<(&6&D;(RhokPc0cmWUKDKu$$ z0v#2bfDj|ij7D3`teH%X1>^MX#k{kB?8ARl9OleCX0hU4*lHoBqvy*u__7SaW!0j& zrj@K~X=F6bqgkVDLy{JaBfpkUR62PZ(JzO{7c^y?*vVm5H`8i&q_qu=)~_Osxa1&T z53oT?2Chu97m0d=yP+$=!=mZ96;zMD2S+Q2L+OG)QD=~;VEwxw!{0#o83*x7V%njO3K z%0YRJel!rifiHgn4OTFUlo)vkiLn}~vF2&9?&(t2A|p0EQ;zk>ifzx9V<>@}l`SCRdkH%I1<=dtw)c?-CVZCrYRyec_^ou?}OnUs$gN%c^9C48DYO0Du5 zB2j9Ho9*^Sny{M6mwb%3GLp1M8QCB{8&HyS>)s%YFrlEiFr9o9cGoFQ#Z)ColU~?= zl=k~lWij@jlC1&D25cjYNXw5&tEl$CemhO0ywM{*><*CdJ$)?b1$g)2%fEvartBk( zuzG|J&=~EjSi?Ftuz92*Maq^)?v(66x)nT!=kdakG1aN!GkB3{`#N62XYsisfK%>W z#^>=0zJM=7NDOR?9wkM3T zJ@7IKPlf|!XvKv2L!WYek3<=Fru!i%&w1F|-fed_wp#6C`LqeCGYMR+r-fawr?Lon zdD3@8PF{Iyw>{hcUI-H{X`oTlxDE+0Dyou}p()fl6E>OOjY#g5+H3b7t#{gMn{Uu3 z#kHM`1YvI^Q;{00c}=9&C2kka4r|nOX^LCHUK$2)ri{d={rtoo5r@@qttUc_a_4J6R0bsNsG;h*+2bz4f7+O6GFcr^NN6D1An7gBw9QNEj7Ix28!K zbP2}X!ldWJ=AsM$Q9mGEKX_VP&G*u0?o5UdsY{**WMUbDeP;piww|m#Zar*ma{Xaz zV~ZOP*6;0ZzLu^KH)Qt3#rv}UMEbLOhTL!7$Zv|&C){vDg4C+5a2qhre3}zJzef9m zm?Uglh?H00p6kG>oTEA<;VtBYEK4aPxGg#6j@&A=a%ze+wKz<;7LkNoQ%LC?%u{iF z(TdanP`NItQN^UV^Jz&mmqc?}GzK)hG=qg3L|mj?&;22(SzH(XxG8;8ZcTacOo>1) z9dcc;%@O%sp$)M1=Er7CaOgL`^(lTp!y##IkM>xaG%@({-2ISUy|aLW{Z+<@BB<|#9sT~Y7( VGBg!bMHTtlfP}3%nse7i{{g50UylF) literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/ast.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/ast.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..027542500ede5204f62bdd6d6e9262e26b15f7a0 GIT binary patch literal 81234 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 FwJo^5MhgG{ literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/builder.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/builder.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..579b6b5d57a900300eb27698fe714dbc20998aad GIT binary patch literal 45635 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/lexer.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/lexer.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36f2fd17f91ca58a8df23b6fb5c0f2e2cdafcb9a GIT binary patch literal 8337 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/location.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/location.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fc4876a080f981f537b325f6481e5ed20ac9ee9a GIT binary patch literal 679 zcmZWn&5qMB5VqqaEoE0o99JB2?SWbXE}#l60s)6rg|y2h60*FpyEV9Wu$@X>abw@2 z;sJO7UdC5W@CbWioMxp;Of=v8WHRIV9DaN}K_Jh5?f74?zf*81IRvMmz5)ths*ls?vjBDO2%kxv!~~ zO3Rq3*;w7JO@m?log}{ieGTeQ0KTEmXa{EkiwB$S(2oMVoF@1#-)#3 z2>?syUh3sfk{m1#9Sev$9sx*+!ZT)#{SA+px0c>Fhc6 zD#*tzZ@%y=>FLs%Z~>*@Ne-*hyZvVEHjWtc!7+9pX88;N;p>zCX_*aW3t(-`n1Nei zEKV3(ThZy{A2If|<9c`lZG~+hO`v;xz!*2ihMr-cvdRRPM)o@%K>CSXy4XaDPtgSD p*%-r<_4&n=#4>DKWv*O0Zl648kT`ScyEvZj&-OCiNx#|=`3LbYrK|t| literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/lookupDebugInfo.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/lookupDebugInfo.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..937e41d21e0c089971c2af7256b34e90996ce0de GIT binary patch literal 678 zcmY*X!H&}~5VeyujjCOGfeT!GqzGapxFA(%LG6}mt7JvnmB__%Vz-Spi9_NPb+7Oj zd;uT8&*aL9U*N5=s zrLx-JNWMtp=;37;tX5&TSh7VJUaha$WcqeJo6Un+Vrre54bBCu`U!wU5f&)2*3esI zOGoyEHAdZT!|sCbjG;T|%58@WrEZ&YBI9N|FE;9KVzA1&PE|p8tQt)|?PMhhCs~(D z5+Fb}mCBzItw=11%ws8p6eNW&h#}H?nM%46ty4gH+Xqs*sbnzfw;p3A##lRGELWn* z%=wJ5j}6cM-1Hd}DuJ+F>#7|x#*0Gfu3`;QCrfMn4ORDmZU?^v1yxf{-|z8M3SChv@!);c0NgZr;4_D*PjJ YJPn~r>y3{By@o##)#m9l%Yk=)1NRlWHvj+t literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/parser.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/parser.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5739b9e7474db71ccbdfb2d78a745aac09b83ab GIT binary patch literal 54923 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/variableScalar.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/feaLib/__pycache__/variableScalar.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd979b91046fc895273cb4233b8a8f5f91cf9c8e GIT binary patch literal 4745 zcmai2&u<&Y6`q-0k}F!GWm%Ri+i8ioN=?V1(#B|;R#6i~ae9b_0CEkKsIgdcmh#HW zU3zAvNCb7MTr>rGDSGV1I{FXjAJXeyd&;>tUEJ@@kZY2nQ4%|xotWPDRU= zLOs2@HK;)Afwso(HJbr;u{xbz~5jAeYl zUWqey%1`+&d(C$mPF~6mdU2SSb*i#Z=A|eLySl-1Cr;b1nVQ4E^Y%tJlu@wpyFkfp z6&;2f-yT29(qv<|{VYx6jpkvP9B#zX(~aJ7_AE_4X@0t)G0{i8p#4193-v}PO|nPm zidqs}z=HSyo=c=2iuDPtKXTC#&)j;GUE7asj_pS(BIXdr25h9qlC=7>3QZ!D9#l0aU_eJljMiVgu&ek`Fj} zc$+<0{-Zb%Ck{OB48*`W1I1n}OSa1tjc>Sl*=`|sgQHNZ3L5jdKuX^<@Bcqj(SeemJBQ7GRA$2 z${srbZTHzLZp><0vn0&45i=0maPApDabdb6-GMuBI%0*LaTr{aC0TwY26(>8WMviR zH@uy5es5w;A{4E=i%Z`!YYr@c{6t7L-~&N3{$0FqF`oBJ>-w|x$QX?X63vfu5gaM9 zbsCN8W*q6PopyU$%Xs`>T&(}$1sqh^Q@-EaBy3~7h016Yt@Z2m=$zj<=k;^mXt-*D z)-mpK_d%Gv9Q1l&A{!+|QEr~7D^y#eV%DzUBfBDX(?+wn%a`~vzB9aJ`%WN6;zEcK za{3;M3>4hwssoxm(#V~lehLL&oF^S|?N~KDz&sb@$nB_e@wL}(WF1UE(Iv2n% zI!}n{gx+*84FnTrLr-|bPM{n^-FW~hg_!P(L$2;;j^w!GqzdFBY9Baj?8MEWLR1^L z`z2guT$PSvD3fy`{a3&ewWk<)cU#+{&n4$%jY}MkzeSn`#e0> z>O->sE)^7WEw39T2AzB!&JPaa%-o?pI5IVpI!Bs7ao)OG92R6Td8-s0Wx*chfJjd} za@n6Tg8ZO~CX81h8uKU@aS6Wsrt0=@Pq}&43={BEsL*A&|8rCzBw)Rf{81*mG0bFe z2Ebn$IQxKpAOPpm0P!%&XD;!_;za7GC^JGXO}r8SxdThp20b$2TZn}s0i(5tQs_Yn zJy_PiIc3ebTiWD?(TD1V74PGQB3LbgN{Aw&65J1pWZ3s9--N0ayEa5O8?XvSS+n81 z-Lw_)sr_C?r%!QdN|cmdtKuTtN11#g*hy+=vvg^ansJ>T<=9gQuWvTla3+{$I6HzNA@xg@QEX3`vV5 z966BaAZ+#{S;d_LA~!QvIz#mUG1lm8@{Y`Cw3)Ql;9VPO^ZtZ73-wdR2=CpXo)GZ3c0nQ$~IFnGF`~rC) zC3jxA_Fy~;#*z)ekI0DIwC7Tn-m+RNZfkrab(bGuon7RgS9v)O!Mu+pqYFl&Y3Wr9mOXcHk((y={P3B7I91`u02qc&RpX$Y>&If zXK>=r&`W)c0(Bd~&&OiR1n(-IKBjJlV0We*Xs{fkS8>FJBpBcf?zFQJW#&dHaG05j z09L<5uSd9sC#~zezdUQTnV^{*58HPk%x*`F3@oYNU}Wo(4zrOpxXEx_v{vR0h_8NuKErcF zYr#DApB_Z93{|UaZEJZW!|?Y(BEzHUIA5XH$}FX`w*B|QH}gEf%)>WCI!07^e|-vy z+2eK^OZ1wV1l`d0^Q!NIS_d)J=Y9XhK@bn0RD55iZM^GHx>A(wa<8Y-UZ}ET^#Qe+ zLlu$QW?;&z$_N=5tw>P})eKH*i*Da~*whT~@mCL{*DU=Ls&H4#m%WPMRTo#qTktAg z*(;&$*;db0G-9VwYONOki!^}^{ugPQDA9_-z#R0fq*DJ`OXuFEwS9{cyNQNH$8-M& DR*D~f literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/ast.py b/.venv/lib/python3.9/site-packages/fontTools/feaLib/ast.py new file mode 100644 index 00000000..1273343d --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/feaLib/ast.py @@ -0,0 +1,2128 @@ +from fontTools.feaLib.error import FeatureLibError +from fontTools.feaLib.location import FeatureLibLocation +from fontTools.misc.encodingTools import getEncoding +from fontTools.misc.textTools import byteord, tobytes +from collections import OrderedDict +import itertools + +SHIFT = " " * 4 + +__all__ = [ + "Element", + "FeatureFile", + "Comment", + "GlyphName", + "GlyphClass", + "GlyphClassName", + "MarkClassName", + "AnonymousBlock", + "Block", + "FeatureBlock", + "NestedBlock", + "LookupBlock", + "GlyphClassDefinition", + "GlyphClassDefStatement", + "MarkClass", + "MarkClassDefinition", + "AlternateSubstStatement", + "Anchor", + "AnchorDefinition", + "AttachStatement", + "AxisValueLocationStatement", + "BaseAxis", + "CVParametersNameStatement", + "ChainContextPosStatement", + "ChainContextSubstStatement", + "CharacterStatement", + "ConditionsetStatement", + "CursivePosStatement", + "ElidedFallbackName", + "ElidedFallbackNameID", + "Expression", + "FeatureNameStatement", + "FeatureReferenceStatement", + "FontRevisionStatement", + "HheaField", + "IgnorePosStatement", + "IgnoreSubstStatement", + "IncludeStatement", + "LanguageStatement", + "LanguageSystemStatement", + "LigatureCaretByIndexStatement", + "LigatureCaretByPosStatement", + "LigatureSubstStatement", + "LookupFlagStatement", + "LookupReferenceStatement", + "MarkBasePosStatement", + "MarkLigPosStatement", + "MarkMarkPosStatement", + "MultipleSubstStatement", + "NameRecord", + "OS2Field", + "PairPosStatement", + "ReverseChainSingleSubstStatement", + "ScriptStatement", + "SinglePosStatement", + "SingleSubstStatement", + "SizeParameters", + "Statement", + "STATAxisValueStatement", + "STATDesignAxisStatement", + "STATNameStatement", + "SubtableStatement", + "TableBlock", + "ValueRecord", + "ValueRecordDefinition", + "VheaField", +] + + +def deviceToString(device): + if device is None: + return "" + else: + return "" % ", ".join("%d %d" % t for t in device) + + +fea_keywords = set( + [ + "anchor", + "anchordef", + "anon", + "anonymous", + "by", + "contour", + "cursive", + "device", + "enum", + "enumerate", + "excludedflt", + "exclude_dflt", + "feature", + "from", + "ignore", + "ignorebaseglyphs", + "ignoreligatures", + "ignoremarks", + "include", + "includedflt", + "include_dflt", + "language", + "languagesystem", + "lookup", + "lookupflag", + "mark", + "markattachmenttype", + "markclass", + "nameid", + "null", + "parameters", + "pos", + "position", + "required", + "righttoleft", + "reversesub", + "rsub", + "script", + "sub", + "substitute", + "subtable", + "table", + "usemarkfilteringset", + "useextension", + "valuerecorddef", + "base", + "gdef", + "head", + "hhea", + "name", + "vhea", + "vmtx", + ] +) + + +def asFea(g): + if hasattr(g, "asFea"): + return g.asFea() + elif isinstance(g, tuple) and len(g) == 2: + return asFea(g[0]) + " - " + asFea(g[1]) # a range + elif g.lower() in fea_keywords: + return "\\" + g + else: + return g + + +class Element(object): + """A base class representing "something" in a feature file.""" + + def __init__(self, location=None): + #: location of this element as a `FeatureLibLocation` object. + if location and not isinstance(location, FeatureLibLocation): + location = FeatureLibLocation(*location) + self.location = location + + def build(self, builder): + pass + + def asFea(self, indent=""): + """Returns this element as a string of feature code. For block-type + elements (such as :class:`FeatureBlock`), the `indent` string is + added to the start of each line in the output.""" + raise NotImplementedError + + def __str__(self): + return self.asFea() + + +class Statement(Element): + pass + + +class Expression(Element): + pass + + +class Comment(Element): + """A comment in a feature file.""" + + def __init__(self, text, location=None): + super(Comment, self).__init__(location) + #: Text of the comment + self.text = text + + def asFea(self, indent=""): + return self.text + + +class NullGlyph(Expression): + """The NULL glyph, used in glyph deletion substitutions.""" + + def __init__(self, location=None): + Expression.__init__(self, location) + #: The name itself as a string + + def glyphSet(self): + """The glyphs in this class as a tuple of :class:`GlyphName` objects.""" + return () + + def asFea(self, indent=""): + return "NULL" + + +class GlyphName(Expression): + """A single glyph name, such as ``cedilla``.""" + + def __init__(self, glyph, location=None): + Expression.__init__(self, location) + #: The name itself as a string + self.glyph = glyph + + def glyphSet(self): + """The glyphs in this class as a tuple of :class:`GlyphName` objects.""" + return (self.glyph,) + + def asFea(self, indent=""): + return asFea(self.glyph) + + +class GlyphClass(Expression): + """A glyph class, such as ``[acute cedilla grave]``.""" + + def __init__(self, glyphs=None, location=None): + Expression.__init__(self, location) + #: The list of glyphs in this class, as :class:`GlyphName` objects. + self.glyphs = glyphs if glyphs is not None else [] + self.original = [] + self.curr = 0 + + def glyphSet(self): + """The glyphs in this class as a tuple of :class:`GlyphName` objects.""" + return tuple(self.glyphs) + + def asFea(self, indent=""): + if len(self.original): + if self.curr < len(self.glyphs): + self.original.extend(self.glyphs[self.curr :]) + self.curr = len(self.glyphs) + return "[" + " ".join(map(asFea, self.original)) + "]" + else: + return "[" + " ".join(map(asFea, self.glyphs)) + "]" + + def extend(self, glyphs): + """Add a list of :class:`GlyphName` objects to the class.""" + self.glyphs.extend(glyphs) + + def append(self, glyph): + """Add a single :class:`GlyphName` object to the class.""" + self.glyphs.append(glyph) + + def add_range(self, start, end, glyphs): + """Add a range (e.g. ``A-Z``) to the class. ``start`` and ``end`` + are either :class:`GlyphName` objects or strings representing the + start and end glyphs in the class, and ``glyphs`` is the full list of + :class:`GlyphName` objects in the range.""" + if self.curr < len(self.glyphs): + self.original.extend(self.glyphs[self.curr :]) + self.original.append((start, end)) + self.glyphs.extend(glyphs) + self.curr = len(self.glyphs) + + def add_cid_range(self, start, end, glyphs): + """Add a range to the class by glyph ID. ``start`` and ``end`` are the + initial and final IDs, and ``glyphs`` is the full list of + :class:`GlyphName` objects in the range.""" + if self.curr < len(self.glyphs): + self.original.extend(self.glyphs[self.curr :]) + self.original.append(("\\{}".format(start), "\\{}".format(end))) + self.glyphs.extend(glyphs) + self.curr = len(self.glyphs) + + def add_class(self, gc): + """Add glyphs from the given :class:`GlyphClassName` object to the + class.""" + if self.curr < len(self.glyphs): + self.original.extend(self.glyphs[self.curr :]) + self.original.append(gc) + self.glyphs.extend(gc.glyphSet()) + self.curr = len(self.glyphs) + + +class GlyphClassName(Expression): + """A glyph class name, such as ``@FRENCH_MARKS``. This must be instantiated + with a :class:`GlyphClassDefinition` object.""" + + def __init__(self, glyphclass, location=None): + Expression.__init__(self, location) + assert isinstance(glyphclass, GlyphClassDefinition) + self.glyphclass = glyphclass + + def glyphSet(self): + """The glyphs in this class as a tuple of :class:`GlyphName` objects.""" + return tuple(self.glyphclass.glyphSet()) + + def asFea(self, indent=""): + return "@" + self.glyphclass.name + + +class MarkClassName(Expression): + """A mark class name, such as ``@FRENCH_MARKS`` defined with ``markClass``. + This must be instantiated with a :class:`MarkClass` object.""" + + def __init__(self, markClass, location=None): + Expression.__init__(self, location) + assert isinstance(markClass, MarkClass) + self.markClass = markClass + + def glyphSet(self): + """The glyphs in this class as a tuple of :class:`GlyphName` objects.""" + return self.markClass.glyphSet() + + def asFea(self, indent=""): + return "@" + self.markClass.name + + +class AnonymousBlock(Statement): + """An anonymous data block.""" + + def __init__(self, tag, content, location=None): + Statement.__init__(self, location) + self.tag = tag #: string containing the block's "tag" + self.content = content #: block data as string + + def asFea(self, indent=""): + res = "anon {} {{\n".format(self.tag) + res += self.content + res += "}} {};\n\n".format(self.tag) + return res + + +class Block(Statement): + """A block of statements: feature, lookup, etc.""" + + def __init__(self, location=None): + Statement.__init__(self, location) + self.statements = [] #: Statements contained in the block + + def build(self, builder): + """When handed a 'builder' object of comparable interface to + :class:`fontTools.feaLib.builder`, walks the statements in this + block, calling the builder callbacks.""" + for s in self.statements: + s.build(builder) + + def asFea(self, indent=""): + indent += SHIFT + return ( + indent + + ("\n" + indent).join([s.asFea(indent=indent) for s in self.statements]) + + "\n" + ) + + +class FeatureFile(Block): + """The top-level element of the syntax tree, containing the whole feature + file in its ``statements`` attribute.""" + + def __init__(self): + Block.__init__(self, location=None) + self.markClasses = {} # name --> ast.MarkClass + + def asFea(self, indent=""): + return "\n".join(s.asFea(indent=indent) for s in self.statements) + + +class FeatureBlock(Block): + """A named feature block.""" + + def __init__(self, name, use_extension=False, location=None): + Block.__init__(self, location) + self.name, self.use_extension = name, use_extension + + def build(self, builder): + """Call the ``start_feature`` callback on the builder object, visit + all the statements in this feature, and then call ``end_feature``.""" + # TODO(sascha): Handle use_extension. + builder.start_feature(self.location, self.name) + # language exclude_dflt statements modify builder.features_ + # limit them to this block with temporary builder.features_ + features = builder.features_ + builder.features_ = {} + Block.build(self, builder) + for key, value in builder.features_.items(): + features.setdefault(key, []).extend(value) + builder.features_ = features + builder.end_feature() + + def asFea(self, indent=""): + res = indent + "feature %s " % self.name.strip() + if self.use_extension: + res += "useExtension " + res += "{\n" + res += Block.asFea(self, indent=indent) + res += indent + "} %s;\n" % self.name.strip() + return res + + +class NestedBlock(Block): + """A block inside another block, for example when found inside a + ``cvParameters`` block.""" + + def __init__(self, tag, block_name, location=None): + Block.__init__(self, location) + self.tag = tag + self.block_name = block_name + + def build(self, builder): + Block.build(self, builder) + if self.block_name == "ParamUILabelNameID": + builder.add_to_cv_num_named_params(self.tag) + + def asFea(self, indent=""): + res = "{}{} {{\n".format(indent, self.block_name) + res += Block.asFea(self, indent=indent) + res += "{}}};\n".format(indent) + return res + + +class LookupBlock(Block): + """A named lookup, containing ``statements``.""" + + def __init__(self, name, use_extension=False, location=None): + Block.__init__(self, location) + self.name, self.use_extension = name, use_extension + + def build(self, builder): + # TODO(sascha): Handle use_extension. + builder.start_lookup_block(self.location, self.name) + Block.build(self, builder) + builder.end_lookup_block() + + def asFea(self, indent=""): + res = "lookup {} ".format(self.name) + if self.use_extension: + res += "useExtension " + res += "{\n" + res += Block.asFea(self, indent=indent) + res += "{}}} {};\n".format(indent, self.name) + return res + + +class TableBlock(Block): + """A ``table ... { }`` block.""" + + def __init__(self, name, location=None): + Block.__init__(self, location) + self.name = name + + def asFea(self, indent=""): + res = "table {} {{\n".format(self.name.strip()) + res += super(TableBlock, self).asFea(indent=indent) + res += "}} {};\n".format(self.name.strip()) + return res + + +class GlyphClassDefinition(Statement): + """Example: ``@UPPERCASE = [A-Z];``.""" + + def __init__(self, name, glyphs, location=None): + Statement.__init__(self, location) + self.name = name #: class name as a string, without initial ``@`` + self.glyphs = glyphs #: a :class:`GlyphClass` object + + def glyphSet(self): + """The glyphs in this class as a tuple of :class:`GlyphName` objects.""" + return tuple(self.glyphs.glyphSet()) + + def asFea(self, indent=""): + return "@" + self.name + " = " + self.glyphs.asFea() + ";" + + +class GlyphClassDefStatement(Statement): + """Example: ``GlyphClassDef @UPPERCASE, [B], [C], [D];``. The parameters + must be either :class:`GlyphClass` or :class:`GlyphClassName` objects, or + ``None``.""" + + def __init__( + self, baseGlyphs, markGlyphs, ligatureGlyphs, componentGlyphs, location=None + ): + Statement.__init__(self, location) + self.baseGlyphs, self.markGlyphs = (baseGlyphs, markGlyphs) + self.ligatureGlyphs = ligatureGlyphs + self.componentGlyphs = componentGlyphs + + def build(self, builder): + """Calls the builder's ``add_glyphClassDef`` callback.""" + base = self.baseGlyphs.glyphSet() if self.baseGlyphs else tuple() + liga = self.ligatureGlyphs.glyphSet() if self.ligatureGlyphs else tuple() + mark = self.markGlyphs.glyphSet() if self.markGlyphs else tuple() + comp = self.componentGlyphs.glyphSet() if self.componentGlyphs else tuple() + builder.add_glyphClassDef(self.location, base, liga, mark, comp) + + def asFea(self, indent=""): + return "GlyphClassDef {}, {}, {}, {};".format( + self.baseGlyphs.asFea() if self.baseGlyphs else "", + self.ligatureGlyphs.asFea() if self.ligatureGlyphs else "", + self.markGlyphs.asFea() if self.markGlyphs else "", + self.componentGlyphs.asFea() if self.componentGlyphs else "", + ) + + +class MarkClass(object): + """One `or more` ``markClass`` statements for the same mark class. + + While glyph classes can be defined only once, the feature file format + allows expanding mark classes with multiple definitions, each using + different glyphs and anchors. The following are two ``MarkClassDefinitions`` + for the same ``MarkClass``:: + + markClass [acute grave] @FRENCH_ACCENTS; + markClass [cedilla] @FRENCH_ACCENTS; + + The ``MarkClass`` object is therefore just a container for a list of + :class:`MarkClassDefinition` statements. + """ + + def __init__(self, name): + self.name = name + self.definitions = [] + self.glyphs = OrderedDict() # glyph --> ast.MarkClassDefinitions + + def addDefinition(self, definition): + """Add a :class:`MarkClassDefinition` statement to this mark class.""" + assert isinstance(definition, MarkClassDefinition) + self.definitions.append(definition) + for glyph in definition.glyphSet(): + if glyph in self.glyphs: + otherLoc = self.glyphs[glyph].location + if otherLoc is None: + end = "" + else: + end = f" at {otherLoc}" + raise FeatureLibError( + "Glyph %s already defined%s" % (glyph, end), definition.location + ) + self.glyphs[glyph] = definition + + def glyphSet(self): + """The glyphs in this class as a tuple of :class:`GlyphName` objects.""" + return tuple(self.glyphs.keys()) + + def asFea(self, indent=""): + res = "\n".join(d.asFea() for d in self.definitions) + return res + + +class MarkClassDefinition(Statement): + """A single ``markClass`` statement. The ``markClass`` should be a + :class:`MarkClass` object, the ``anchor`` an :class:`Anchor` object, + and the ``glyphs`` parameter should be a `glyph-containing object`_ . + + Example: + + .. code:: python + + mc = MarkClass("FRENCH_ACCENTS") + mc.addDefinition( MarkClassDefinition(mc, Anchor(350, 800), + GlyphClass([ GlyphName("acute"), GlyphName("grave") ]) + ) ) + mc.addDefinition( MarkClassDefinition(mc, Anchor(350, -200), + GlyphClass([ GlyphName("cedilla") ]) + ) ) + + mc.asFea() + # markClass [acute grave] @FRENCH_ACCENTS; + # markClass [cedilla] @FRENCH_ACCENTS; + + """ + + def __init__(self, markClass, anchor, glyphs, location=None): + Statement.__init__(self, location) + assert isinstance(markClass, MarkClass) + assert isinstance(anchor, Anchor) and isinstance(glyphs, Expression) + self.markClass, self.anchor, self.glyphs = markClass, anchor, glyphs + + def glyphSet(self): + """The glyphs in this class as a tuple of :class:`GlyphName` objects.""" + return self.glyphs.glyphSet() + + def asFea(self, indent=""): + return "markClass {} {} @{};".format( + self.glyphs.asFea(), self.anchor.asFea(), self.markClass.name + ) + + +class AlternateSubstStatement(Statement): + """A ``sub ... from ...`` statement. + + ``prefix``, ``glyph``, ``suffix`` and ``replacement`` should be lists of + `glyph-containing objects`_. ``glyph`` should be a `one element list`.""" + + def __init__(self, prefix, glyph, suffix, replacement, location=None): + Statement.__init__(self, location) + self.prefix, self.glyph, self.suffix = (prefix, glyph, suffix) + self.replacement = replacement + + def build(self, builder): + """Calls the builder's ``add_alternate_subst`` callback.""" + glyph = self.glyph.glyphSet() + assert len(glyph) == 1, glyph + glyph = list(glyph)[0] + prefix = [p.glyphSet() for p in self.prefix] + suffix = [s.glyphSet() for s in self.suffix] + replacement = self.replacement.glyphSet() + builder.add_alternate_subst(self.location, prefix, glyph, suffix, replacement) + + def asFea(self, indent=""): + res = "sub " + if len(self.prefix) or len(self.suffix): + if len(self.prefix): + res += " ".join(map(asFea, self.prefix)) + " " + res += asFea(self.glyph) + "'" # even though we really only use 1 + if len(self.suffix): + res += " " + " ".join(map(asFea, self.suffix)) + else: + res += asFea(self.glyph) + res += " from " + res += asFea(self.replacement) + res += ";" + return res + + +class Anchor(Expression): + """An ``Anchor`` element, used inside a ``pos`` rule. + + If a ``name`` is given, this will be used in preference to the coordinates. + Other values should be integer. + """ + + def __init__( + self, + x, + y, + name=None, + contourpoint=None, + xDeviceTable=None, + yDeviceTable=None, + location=None, + ): + Expression.__init__(self, location) + self.name = name + self.x, self.y, self.contourpoint = x, y, contourpoint + self.xDeviceTable, self.yDeviceTable = xDeviceTable, yDeviceTable + + def asFea(self, indent=""): + if self.name is not None: + return "".format(self.name) + res = "" + exit = self.exitAnchor.asFea() if self.exitAnchor else "" + return "pos cursive {} {} {};".format(self.glyphclass.asFea(), entry, exit) + + +class FeatureReferenceStatement(Statement): + """Example: ``feature salt;``""" + + def __init__(self, featureName, location=None): + Statement.__init__(self, location) + self.location, self.featureName = (location, featureName) + + def build(self, builder): + """Calls the builder object's ``add_feature_reference`` callback.""" + builder.add_feature_reference(self.location, self.featureName) + + def asFea(self, indent=""): + return "feature {};".format(self.featureName) + + +class IgnorePosStatement(Statement): + """An ``ignore pos`` statement, containing `one or more` contexts to ignore. + + ``chainContexts`` should be a list of ``(prefix, glyphs, suffix)`` tuples, + with each of ``prefix``, ``glyphs`` and ``suffix`` being + `glyph-containing objects`_ .""" + + def __init__(self, chainContexts, location=None): + Statement.__init__(self, location) + self.chainContexts = chainContexts + + def build(self, builder): + """Calls the builder object's ``add_chain_context_pos`` callback on each + rule context.""" + for prefix, glyphs, suffix in self.chainContexts: + prefix = [p.glyphSet() for p in prefix] + glyphs = [g.glyphSet() for g in glyphs] + suffix = [s.glyphSet() for s in suffix] + builder.add_chain_context_pos(self.location, prefix, glyphs, suffix, []) + + def asFea(self, indent=""): + contexts = [] + for prefix, glyphs, suffix in self.chainContexts: + res = "" + if len(prefix) or len(suffix): + if len(prefix): + res += " ".join(map(asFea, prefix)) + " " + res += " ".join(g.asFea() + "'" for g in glyphs) + if len(suffix): + res += " " + " ".join(map(asFea, suffix)) + else: + res += " ".join(map(asFea, glyphs)) + contexts.append(res) + return "ignore pos " + ", ".join(contexts) + ";" + + +class IgnoreSubstStatement(Statement): + """An ``ignore sub`` statement, containing `one or more` contexts to ignore. + + ``chainContexts`` should be a list of ``(prefix, glyphs, suffix)`` tuples, + with each of ``prefix``, ``glyphs`` and ``suffix`` being + `glyph-containing objects`_ .""" + + def __init__(self, chainContexts, location=None): + Statement.__init__(self, location) + self.chainContexts = chainContexts + + def build(self, builder): + """Calls the builder object's ``add_chain_context_subst`` callback on + each rule context.""" + for prefix, glyphs, suffix in self.chainContexts: + prefix = [p.glyphSet() for p in prefix] + glyphs = [g.glyphSet() for g in glyphs] + suffix = [s.glyphSet() for s in suffix] + builder.add_chain_context_subst(self.location, prefix, glyphs, suffix, []) + + def asFea(self, indent=""): + contexts = [] + for prefix, glyphs, suffix in self.chainContexts: + res = "" + if len(prefix) or len(suffix): + if len(prefix): + res += " ".join(map(asFea, prefix)) + " " + res += " ".join(g.asFea() + "'" for g in glyphs) + if len(suffix): + res += " " + " ".join(map(asFea, suffix)) + else: + res += " ".join(map(asFea, glyphs)) + contexts.append(res) + return "ignore sub " + ", ".join(contexts) + ";" + + +class IncludeStatement(Statement): + """An ``include()`` statement.""" + + def __init__(self, filename, location=None): + super(IncludeStatement, self).__init__(location) + self.filename = filename #: String containing name of file to include + + def build(self): + # TODO: consider lazy-loading the including parser/lexer? + raise FeatureLibError( + "Building an include statement is not implemented yet. " + "Instead, use Parser(..., followIncludes=True) for building.", + self.location, + ) + + def asFea(self, indent=""): + return indent + "include(%s);" % self.filename + + +class LanguageStatement(Statement): + """A ``language`` statement within a feature.""" + + def __init__(self, language, include_default=True, required=False, location=None): + Statement.__init__(self, location) + assert len(language) == 4 + self.language = language #: A four-character language tag + self.include_default = include_default #: If false, "exclude_dflt" + self.required = required + + def build(self, builder): + """Call the builder object's ``set_language`` callback.""" + builder.set_language( + location=self.location, + language=self.language, + include_default=self.include_default, + required=self.required, + ) + + def asFea(self, indent=""): + res = "language {}".format(self.language.strip()) + if not self.include_default: + res += " exclude_dflt" + if self.required: + res += " required" + res += ";" + return res + + +class LanguageSystemStatement(Statement): + """A top-level ``languagesystem`` statement.""" + + def __init__(self, script, language, location=None): + Statement.__init__(self, location) + self.script, self.language = (script, language) + + def build(self, builder): + """Calls the builder object's ``add_language_system`` callback.""" + builder.add_language_system(self.location, self.script, self.language) + + def asFea(self, indent=""): + return "languagesystem {} {};".format(self.script, self.language.strip()) + + +class FontRevisionStatement(Statement): + """A ``head`` table ``FontRevision`` statement. ``revision`` should be a + number, and will be formatted to three significant decimal places.""" + + def __init__(self, revision, location=None): + Statement.__init__(self, location) + self.revision = revision + + def build(self, builder): + builder.set_font_revision(self.location, self.revision) + + def asFea(self, indent=""): + return "FontRevision {:.3f};".format(self.revision) + + +class LigatureCaretByIndexStatement(Statement): + """A ``GDEF`` table ``LigatureCaretByIndex`` statement. ``glyphs`` should be + a `glyph-containing object`_, and ``carets`` should be a list of integers.""" + + def __init__(self, glyphs, carets, location=None): + Statement.__init__(self, location) + self.glyphs, self.carets = (glyphs, carets) + + def build(self, builder): + """Calls the builder object's ``add_ligatureCaretByIndex_`` callback.""" + glyphs = self.glyphs.glyphSet() + builder.add_ligatureCaretByIndex_(self.location, glyphs, set(self.carets)) + + def asFea(self, indent=""): + return "LigatureCaretByIndex {} {};".format( + self.glyphs.asFea(), " ".join(str(x) for x in self.carets) + ) + + +class LigatureCaretByPosStatement(Statement): + """A ``GDEF`` table ``LigatureCaretByPos`` statement. ``glyphs`` should be + a `glyph-containing object`_, and ``carets`` should be a list of integers.""" + + def __init__(self, glyphs, carets, location=None): + Statement.__init__(self, location) + self.glyphs, self.carets = (glyphs, carets) + + def build(self, builder): + """Calls the builder object's ``add_ligatureCaretByPos_`` callback.""" + glyphs = self.glyphs.glyphSet() + builder.add_ligatureCaretByPos_(self.location, glyphs, set(self.carets)) + + def asFea(self, indent=""): + return "LigatureCaretByPos {} {};".format( + self.glyphs.asFea(), " ".join(str(x) for x in self.carets) + ) + + +class LigatureSubstStatement(Statement): + """A chained contextual substitution statement. + + ``prefix``, ``glyphs``, and ``suffix`` should be lists of + `glyph-containing objects`_; ``replacement`` should be a single + `glyph-containing object`_. + + If ``forceChain`` is True, this is expressed as a chaining rule + (e.g. ``sub f' i' by f_i``) even when no context is given.""" + + def __init__(self, prefix, glyphs, suffix, replacement, forceChain, location=None): + Statement.__init__(self, location) + self.prefix, self.glyphs, self.suffix = (prefix, glyphs, suffix) + self.replacement, self.forceChain = replacement, forceChain + + def build(self, builder): + prefix = [p.glyphSet() for p in self.prefix] + glyphs = [g.glyphSet() for g in self.glyphs] + suffix = [s.glyphSet() for s in self.suffix] + builder.add_ligature_subst( + self.location, prefix, glyphs, suffix, self.replacement, self.forceChain + ) + + def asFea(self, indent=""): + res = "sub " + if len(self.prefix) or len(self.suffix) or self.forceChain: + if len(self.prefix): + res += " ".join(g.asFea() for g in self.prefix) + " " + res += " ".join(g.asFea() + "'" for g in self.glyphs) + if len(self.suffix): + res += " " + " ".join(g.asFea() for g in self.suffix) + else: + res += " ".join(g.asFea() for g in self.glyphs) + res += " by " + res += asFea(self.replacement) + res += ";" + return res + + +class LookupFlagStatement(Statement): + """A ``lookupflag`` statement. The ``value`` should be an integer value + representing the flags in use, but not including the ``markAttachment`` + class and ``markFilteringSet`` values, which must be specified as + glyph-containing objects.""" + + def __init__( + self, value=0, markAttachment=None, markFilteringSet=None, location=None + ): + Statement.__init__(self, location) + self.value = value + self.markAttachment = markAttachment + self.markFilteringSet = markFilteringSet + + def build(self, builder): + """Calls the builder object's ``set_lookup_flag`` callback.""" + markAttach = None + if self.markAttachment is not None: + markAttach = self.markAttachment.glyphSet() + markFilter = None + if self.markFilteringSet is not None: + markFilter = self.markFilteringSet.glyphSet() + builder.set_lookup_flag(self.location, self.value, markAttach, markFilter) + + def asFea(self, indent=""): + res = [] + flags = ["RightToLeft", "IgnoreBaseGlyphs", "IgnoreLigatures", "IgnoreMarks"] + curr = 1 + for i in range(len(flags)): + if self.value & curr != 0: + res.append(flags[i]) + curr = curr << 1 + if self.markAttachment is not None: + res.append("MarkAttachmentType {}".format(self.markAttachment.asFea())) + if self.markFilteringSet is not None: + res.append("UseMarkFilteringSet {}".format(self.markFilteringSet.asFea())) + if not res: + res = ["0"] + return "lookupflag {};".format(" ".join(res)) + + +class LookupReferenceStatement(Statement): + """Represents a ``lookup ...;`` statement to include a lookup in a feature. + + The ``lookup`` should be a :class:`LookupBlock` object.""" + + def __init__(self, lookup, location=None): + Statement.__init__(self, location) + self.location, self.lookup = (location, lookup) + + def build(self, builder): + """Calls the builder object's ``add_lookup_call`` callback.""" + builder.add_lookup_call(self.lookup.name) + + def asFea(self, indent=""): + return "lookup {};".format(self.lookup.name) + + +class MarkBasePosStatement(Statement): + """A mark-to-base positioning rule. The ``base`` should be a + `glyph-containing object`_. The ``marks`` should be a list of + (:class:`Anchor`, :class:`MarkClass`) tuples.""" + + def __init__(self, base, marks, location=None): + Statement.__init__(self, location) + self.base, self.marks = base, marks + + def build(self, builder): + """Calls the builder object's ``add_mark_base_pos`` callback.""" + builder.add_mark_base_pos(self.location, self.base.glyphSet(), self.marks) + + def asFea(self, indent=""): + res = "pos base {}".format(self.base.asFea()) + for a, m in self.marks: + res += "\n" + indent + SHIFT + "{} mark @{}".format(a.asFea(), m.name) + res += ";" + return res + + +class MarkLigPosStatement(Statement): + """A mark-to-ligature positioning rule. The ``ligatures`` must be a + `glyph-containing object`_. The ``marks`` should be a list of lists: each + element in the top-level list represents a component glyph, and is made + up of a list of (:class:`Anchor`, :class:`MarkClass`) tuples representing + mark attachment points for that position. + + Example:: + + m1 = MarkClass("TOP_MARKS") + m2 = MarkClass("BOTTOM_MARKS") + # ... add definitions to mark classes... + + glyph = GlyphName("lam_meem_jeem") + marks = [ + [ (Anchor(625,1800), m1) ], # Attachments on 1st component (lam) + [ (Anchor(376,-378), m2) ], # Attachments on 2nd component (meem) + [ ] # No attachments on the jeem + ] + mlp = MarkLigPosStatement(glyph, marks) + + mlp.asFea() + # pos ligature lam_meem_jeem mark @TOP_MARKS + # ligComponent mark @BOTTOM_MARKS; + + """ + + def __init__(self, ligatures, marks, location=None): + Statement.__init__(self, location) + self.ligatures, self.marks = ligatures, marks + + def build(self, builder): + """Calls the builder object's ``add_mark_lig_pos`` callback.""" + builder.add_mark_lig_pos(self.location, self.ligatures.glyphSet(), self.marks) + + def asFea(self, indent=""): + res = "pos ligature {}".format(self.ligatures.asFea()) + ligs = [] + for l in self.marks: + temp = "" + if l is None or not len(l): + temp = "\n" + indent + SHIFT * 2 + "" + else: + for a, m in l: + temp += ( + "\n" + + indent + + SHIFT * 2 + + "{} mark @{}".format(a.asFea(), m.name) + ) + ligs.append(temp) + res += ("\n" + indent + SHIFT + "ligComponent").join(ligs) + res += ";" + return res + + +class MarkMarkPosStatement(Statement): + """A mark-to-mark positioning rule. The ``baseMarks`` must be a + `glyph-containing object`_. The ``marks`` should be a list of + (:class:`Anchor`, :class:`MarkClass`) tuples.""" + + def __init__(self, baseMarks, marks, location=None): + Statement.__init__(self, location) + self.baseMarks, self.marks = baseMarks, marks + + def build(self, builder): + """Calls the builder object's ``add_mark_mark_pos`` callback.""" + builder.add_mark_mark_pos(self.location, self.baseMarks.glyphSet(), self.marks) + + def asFea(self, indent=""): + res = "pos mark {}".format(self.baseMarks.asFea()) + for a, m in self.marks: + res += "\n" + indent + SHIFT + "{} mark @{}".format(a.asFea(), m.name) + res += ";" + return res + + +class MultipleSubstStatement(Statement): + """A multiple substitution statement. + + Args: + prefix: a list of `glyph-containing objects`_. + glyph: a single glyph-containing object. + suffix: a list of glyph-containing objects. + replacement: a list of glyph-containing objects. + forceChain: If true, the statement is expressed as a chaining rule + (e.g. ``sub f' i' by f_i``) even when no context is given. + """ + + def __init__( + self, prefix, glyph, suffix, replacement, forceChain=False, location=None + ): + Statement.__init__(self, location) + self.prefix, self.glyph, self.suffix = prefix, glyph, suffix + self.replacement = replacement + self.forceChain = forceChain + + def build(self, builder): + """Calls the builder object's ``add_multiple_subst`` callback.""" + prefix = [p.glyphSet() for p in self.prefix] + suffix = [s.glyphSet() for s in self.suffix] + if not self.replacement and hasattr(self.glyph, "glyphSet"): + for glyph in self.glyph.glyphSet(): + builder.add_multiple_subst( + self.location, + prefix, + glyph, + suffix, + self.replacement, + self.forceChain, + ) + else: + builder.add_multiple_subst( + self.location, + prefix, + self.glyph, + suffix, + self.replacement, + self.forceChain, + ) + + def asFea(self, indent=""): + res = "sub " + if len(self.prefix) or len(self.suffix) or self.forceChain: + if len(self.prefix): + res += " ".join(map(asFea, self.prefix)) + " " + res += asFea(self.glyph) + "'" + if len(self.suffix): + res += " " + " ".join(map(asFea, self.suffix)) + else: + res += asFea(self.glyph) + replacement = self.replacement or [NullGlyph()] + res += " by " + res += " ".join(map(asFea, replacement)) + res += ";" + return res + + +class PairPosStatement(Statement): + """A pair positioning statement. + + ``glyphs1`` and ``glyphs2`` should be `glyph-containing objects`_. + ``valuerecord1`` should be a :class:`ValueRecord` object; + ``valuerecord2`` should be either a :class:`ValueRecord` object or ``None``. + If ``enumerated`` is true, then this is expressed as an + `enumerated pair `_. + """ + + def __init__( + self, + glyphs1, + valuerecord1, + glyphs2, + valuerecord2, + enumerated=False, + location=None, + ): + Statement.__init__(self, location) + self.enumerated = enumerated + self.glyphs1, self.valuerecord1 = glyphs1, valuerecord1 + self.glyphs2, self.valuerecord2 = glyphs2, valuerecord2 + + def build(self, builder): + """Calls a callback on the builder object: + + * If the rule is enumerated, calls ``add_specific_pair_pos`` on each + combination of first and second glyphs. + * If the glyphs are both single :class:`GlyphName` objects, calls + ``add_specific_pair_pos``. + * Else, calls ``add_class_pair_pos``. + """ + if self.enumerated: + g = [self.glyphs1.glyphSet(), self.glyphs2.glyphSet()] + seen_pair = False + for glyph1, glyph2 in itertools.product(*g): + seen_pair = True + builder.add_specific_pair_pos( + self.location, glyph1, self.valuerecord1, glyph2, self.valuerecord2 + ) + if not seen_pair: + raise FeatureLibError( + "Empty glyph class in positioning rule", self.location + ) + return + + is_specific = isinstance(self.glyphs1, GlyphName) and isinstance( + self.glyphs2, GlyphName + ) + if is_specific: + builder.add_specific_pair_pos( + self.location, + self.glyphs1.glyph, + self.valuerecord1, + self.glyphs2.glyph, + self.valuerecord2, + ) + else: + builder.add_class_pair_pos( + self.location, + self.glyphs1.glyphSet(), + self.valuerecord1, + self.glyphs2.glyphSet(), + self.valuerecord2, + ) + + def asFea(self, indent=""): + res = "enum " if self.enumerated else "" + if self.valuerecord2: + res += "pos {} {} {} {};".format( + self.glyphs1.asFea(), + self.valuerecord1.asFea(), + self.glyphs2.asFea(), + self.valuerecord2.asFea(), + ) + else: + res += "pos {} {} {};".format( + self.glyphs1.asFea(), self.glyphs2.asFea(), self.valuerecord1.asFea() + ) + return res + + +class ReverseChainSingleSubstStatement(Statement): + """A reverse chaining substitution statement. You don't see those every day. + + Note the unusual argument order: ``suffix`` comes `before` ``glyphs``. + ``old_prefix``, ``old_suffix``, ``glyphs`` and ``replacements`` should be + lists of `glyph-containing objects`_. ``glyphs`` and ``replacements`` should + be one-item lists. + """ + + def __init__(self, old_prefix, old_suffix, glyphs, replacements, location=None): + Statement.__init__(self, location) + self.old_prefix, self.old_suffix = old_prefix, old_suffix + self.glyphs = glyphs + self.replacements = replacements + + def build(self, builder): + prefix = [p.glyphSet() for p in self.old_prefix] + suffix = [s.glyphSet() for s in self.old_suffix] + originals = self.glyphs[0].glyphSet() + replaces = self.replacements[0].glyphSet() + if len(replaces) == 1: + replaces = replaces * len(originals) + builder.add_reverse_chain_single_subst( + self.location, prefix, suffix, dict(zip(originals, replaces)) + ) + + def asFea(self, indent=""): + res = "rsub " + if len(self.old_prefix) or len(self.old_suffix): + if len(self.old_prefix): + res += " ".join(asFea(g) for g in self.old_prefix) + " " + res += " ".join(asFea(g) + "'" for g in self.glyphs) + if len(self.old_suffix): + res += " " + " ".join(asFea(g) for g in self.old_suffix) + else: + res += " ".join(map(asFea, self.glyphs)) + res += " by {};".format(" ".join(asFea(g) for g in self.replacements)) + return res + + +class SingleSubstStatement(Statement): + """A single substitution statement. + + Note the unusual argument order: ``prefix`` and suffix come `after` + the replacement ``glyphs``. ``prefix``, ``suffix``, ``glyphs`` and + ``replace`` should be lists of `glyph-containing objects`_. ``glyphs`` and + ``replace`` should be one-item lists. + """ + + def __init__(self, glyphs, replace, prefix, suffix, forceChain, location=None): + Statement.__init__(self, location) + self.prefix, self.suffix = prefix, suffix + self.forceChain = forceChain + self.glyphs = glyphs + self.replacements = replace + + def build(self, builder): + """Calls the builder object's ``add_single_subst`` callback.""" + prefix = [p.glyphSet() for p in self.prefix] + suffix = [s.glyphSet() for s in self.suffix] + originals = self.glyphs[0].glyphSet() + replaces = self.replacements[0].glyphSet() + if len(replaces) == 1: + replaces = replaces * len(originals) + builder.add_single_subst( + self.location, + prefix, + suffix, + OrderedDict(zip(originals, replaces)), + self.forceChain, + ) + + def asFea(self, indent=""): + res = "sub " + if len(self.prefix) or len(self.suffix) or self.forceChain: + if len(self.prefix): + res += " ".join(asFea(g) for g in self.prefix) + " " + res += " ".join(asFea(g) + "'" for g in self.glyphs) + if len(self.suffix): + res += " " + " ".join(asFea(g) for g in self.suffix) + else: + res += " ".join(asFea(g) for g in self.glyphs) + res += " by {};".format(" ".join(asFea(g) for g in self.replacements)) + return res + + +class ScriptStatement(Statement): + """A ``script`` statement.""" + + def __init__(self, script, location=None): + Statement.__init__(self, location) + self.script = script #: the script code + + def build(self, builder): + """Calls the builder's ``set_script`` callback.""" + builder.set_script(self.location, self.script) + + def asFea(self, indent=""): + return "script {};".format(self.script.strip()) + + +class SinglePosStatement(Statement): + """A single position statement. ``prefix`` and ``suffix`` should be + lists of `glyph-containing objects`_. + + ``pos`` should be a one-element list containing a (`glyph-containing object`_, + :class:`ValueRecord`) tuple.""" + + def __init__(self, pos, prefix, suffix, forceChain, location=None): + Statement.__init__(self, location) + self.pos, self.prefix, self.suffix = pos, prefix, suffix + self.forceChain = forceChain + + def build(self, builder): + """Calls the builder object's ``add_single_pos`` callback.""" + prefix = [p.glyphSet() for p in self.prefix] + suffix = [s.glyphSet() for s in self.suffix] + pos = [(g.glyphSet(), value) for g, value in self.pos] + builder.add_single_pos(self.location, prefix, suffix, pos, self.forceChain) + + def asFea(self, indent=""): + res = "pos " + if len(self.prefix) or len(self.suffix) or self.forceChain: + if len(self.prefix): + res += " ".join(map(asFea, self.prefix)) + " " + res += " ".join( + [ + asFea(x[0]) + "'" + ((" " + x[1].asFea()) if x[1] else "") + for x in self.pos + ] + ) + if len(self.suffix): + res += " " + " ".join(map(asFea, self.suffix)) + else: + res += " ".join( + [asFea(x[0]) + " " + (x[1].asFea() if x[1] else "") for x in self.pos] + ) + res += ";" + return res + + +class SubtableStatement(Statement): + """Represents a subtable break.""" + + def __init__(self, location=None): + Statement.__init__(self, location) + + def build(self, builder): + """Calls the builder objects's ``add_subtable_break`` callback.""" + builder.add_subtable_break(self.location) + + def asFea(self, indent=""): + return "subtable;" + + +class ValueRecord(Expression): + """Represents a value record.""" + + def __init__( + self, + xPlacement=None, + yPlacement=None, + xAdvance=None, + yAdvance=None, + xPlaDevice=None, + yPlaDevice=None, + xAdvDevice=None, + yAdvDevice=None, + vertical=False, + location=None, + ): + Expression.__init__(self, location) + self.xPlacement, self.yPlacement = (xPlacement, yPlacement) + self.xAdvance, self.yAdvance = (xAdvance, yAdvance) + self.xPlaDevice, self.yPlaDevice = (xPlaDevice, yPlaDevice) + self.xAdvDevice, self.yAdvDevice = (xAdvDevice, yAdvDevice) + self.vertical = vertical + + def __eq__(self, other): + return ( + self.xPlacement == other.xPlacement + and self.yPlacement == other.yPlacement + and self.xAdvance == other.xAdvance + and self.yAdvance == other.yAdvance + and self.xPlaDevice == other.xPlaDevice + and self.xAdvDevice == other.xAdvDevice + ) + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return ( + hash(self.xPlacement) + ^ hash(self.yPlacement) + ^ hash(self.xAdvance) + ^ hash(self.yAdvance) + ^ hash(self.xPlaDevice) + ^ hash(self.yPlaDevice) + ^ hash(self.xAdvDevice) + ^ hash(self.yAdvDevice) + ) + + def asFea(self, indent=""): + if not self: + return "" + + x, y = self.xPlacement, self.yPlacement + xAdvance, yAdvance = self.xAdvance, self.yAdvance + xPlaDevice, yPlaDevice = self.xPlaDevice, self.yPlaDevice + xAdvDevice, yAdvDevice = self.xAdvDevice, self.yAdvDevice + vertical = self.vertical + + # Try format A, if possible. + if x is None and y is None: + if xAdvance is None and vertical: + return str(yAdvance) + elif yAdvance is None and not vertical: + return str(xAdvance) + + # Make any remaining None value 0 to avoid generating invalid records. + x = x or 0 + y = y or 0 + xAdvance = xAdvance or 0 + yAdvance = yAdvance or 0 + + # Try format B, if possible. + if ( + xPlaDevice is None + and yPlaDevice is None + and xAdvDevice is None + and yAdvDevice is None + ): + return "<%s %s %s %s>" % (x, y, xAdvance, yAdvance) + + # Last resort is format C. + return "<%s %s %s %s %s %s %s %s>" % ( + x, + y, + xAdvance, + yAdvance, + deviceToString(xPlaDevice), + deviceToString(yPlaDevice), + deviceToString(xAdvDevice), + deviceToString(yAdvDevice), + ) + + def __bool__(self): + return any( + getattr(self, v) is not None + for v in [ + "xPlacement", + "yPlacement", + "xAdvance", + "yAdvance", + "xPlaDevice", + "yPlaDevice", + "xAdvDevice", + "yAdvDevice", + ] + ) + + __nonzero__ = __bool__ + + +class ValueRecordDefinition(Statement): + """Represents a named value record definition.""" + + def __init__(self, name, value, location=None): + Statement.__init__(self, location) + self.name = name #: Value record name as string + self.value = value #: :class:`ValueRecord` object + + def asFea(self, indent=""): + return "valueRecordDef {} {};".format(self.value.asFea(), self.name) + + +def simplify_name_attributes(pid, eid, lid): + if pid == 3 and eid == 1 and lid == 1033: + return "" + elif pid == 1 and eid == 0 and lid == 0: + return "1" + else: + return "{} {} {}".format(pid, eid, lid) + + +class NameRecord(Statement): + """Represents a name record. (`Section 9.e. `_)""" + + def __init__(self, nameID, platformID, platEncID, langID, string, location=None): + Statement.__init__(self, location) + self.nameID = nameID #: Name ID as integer (e.g. 9 for designer's name) + self.platformID = platformID #: Platform ID as integer + self.platEncID = platEncID #: Platform encoding ID as integer + self.langID = langID #: Language ID as integer + self.string = string #: Name record value + + def build(self, builder): + """Calls the builder object's ``add_name_record`` callback.""" + builder.add_name_record( + self.location, + self.nameID, + self.platformID, + self.platEncID, + self.langID, + self.string, + ) + + def asFea(self, indent=""): + def escape(c, escape_pattern): + # Also escape U+0022 QUOTATION MARK and U+005C REVERSE SOLIDUS + if c >= 0x20 and c <= 0x7E and c not in (0x22, 0x5C): + return chr(c) + else: + return escape_pattern % c + + encoding = getEncoding(self.platformID, self.platEncID, self.langID) + if encoding is None: + raise FeatureLibError("Unsupported encoding", self.location) + s = tobytes(self.string, encoding=encoding) + if encoding == "utf_16_be": + escaped_string = "".join( + [ + escape(byteord(s[i]) * 256 + byteord(s[i + 1]), r"\%04x") + for i in range(0, len(s), 2) + ] + ) + else: + escaped_string = "".join([escape(byteord(b), r"\%02x") for b in s]) + plat = simplify_name_attributes(self.platformID, self.platEncID, self.langID) + if plat != "": + plat += " " + return 'nameid {} {}"{}";'.format(self.nameID, plat, escaped_string) + + +class FeatureNameStatement(NameRecord): + """Represents a ``sizemenuname`` or ``name`` statement.""" + + def build(self, builder): + """Calls the builder object's ``add_featureName`` callback.""" + NameRecord.build(self, builder) + builder.add_featureName(self.nameID) + + def asFea(self, indent=""): + if self.nameID == "size": + tag = "sizemenuname" + else: + tag = "name" + plat = simplify_name_attributes(self.platformID, self.platEncID, self.langID) + if plat != "": + plat += " " + return '{} {}"{}";'.format(tag, plat, self.string) + + +class STATNameStatement(NameRecord): + """Represents a STAT table ``name`` statement.""" + + def asFea(self, indent=""): + plat = simplify_name_attributes(self.platformID, self.platEncID, self.langID) + if plat != "": + plat += " " + return 'name {}"{}";'.format(plat, self.string) + + +class SizeParameters(Statement): + """A ``parameters`` statement.""" + + def __init__(self, DesignSize, SubfamilyID, RangeStart, RangeEnd, location=None): + Statement.__init__(self, location) + self.DesignSize = DesignSize + self.SubfamilyID = SubfamilyID + self.RangeStart = RangeStart + self.RangeEnd = RangeEnd + + def build(self, builder): + """Calls the builder object's ``set_size_parameters`` callback.""" + builder.set_size_parameters( + self.location, + self.DesignSize, + self.SubfamilyID, + self.RangeStart, + self.RangeEnd, + ) + + def asFea(self, indent=""): + res = "parameters {:.1f} {}".format(self.DesignSize, self.SubfamilyID) + if self.RangeStart != 0 or self.RangeEnd != 0: + res += " {} {}".format(int(self.RangeStart * 10), int(self.RangeEnd * 10)) + return res + ";" + + +class CVParametersNameStatement(NameRecord): + """Represent a name statement inside a ``cvParameters`` block.""" + + def __init__( + self, nameID, platformID, platEncID, langID, string, block_name, location=None + ): + NameRecord.__init__( + self, nameID, platformID, platEncID, langID, string, location=location + ) + self.block_name = block_name + + def build(self, builder): + """Calls the builder object's ``add_cv_parameter`` callback.""" + item = "" + if self.block_name == "ParamUILabelNameID": + item = "_{}".format(builder.cv_num_named_params_.get(self.nameID, 0)) + builder.add_cv_parameter(self.nameID) + self.nameID = (self.nameID, self.block_name + item) + NameRecord.build(self, builder) + + def asFea(self, indent=""): + plat = simplify_name_attributes(self.platformID, self.platEncID, self.langID) + if plat != "": + plat += " " + return 'name {}"{}";'.format(plat, self.string) + + +class CharacterStatement(Statement): + """ + Statement used in cvParameters blocks of Character Variant features (cvXX). + The Unicode value may be written with either decimal or hexadecimal + notation. The value must be preceded by '0x' if it is a hexadecimal value. + The largest Unicode value allowed is 0xFFFFFF. + """ + + def __init__(self, character, tag, location=None): + Statement.__init__(self, location) + self.character = character + self.tag = tag + + def build(self, builder): + """Calls the builder object's ``add_cv_character`` callback.""" + builder.add_cv_character(self.character, self.tag) + + def asFea(self, indent=""): + return "Character {:#x};".format(self.character) + + +class BaseAxis(Statement): + """An axis definition, being either a ``VertAxis.BaseTagList/BaseScriptList`` + pair or a ``HorizAxis.BaseTagList/BaseScriptList`` pair.""" + + def __init__(self, bases, scripts, vertical, location=None): + Statement.__init__(self, location) + self.bases = bases #: A list of baseline tag names as strings + self.scripts = scripts #: A list of script record tuplets (script tag, default baseline tag, base coordinate) + self.vertical = vertical #: Boolean; VertAxis if True, HorizAxis if False + + def build(self, builder): + """Calls the builder object's ``set_base_axis`` callback.""" + builder.set_base_axis(self.bases, self.scripts, self.vertical) + + def asFea(self, indent=""): + direction = "Vert" if self.vertical else "Horiz" + scripts = [ + "{} {} {}".format(a[0], a[1], " ".join(map(str, a[2]))) + for a in self.scripts + ] + return "{}Axis.BaseTagList {};\n{}{}Axis.BaseScriptList {};".format( + direction, " ".join(self.bases), indent, direction, ", ".join(scripts) + ) + + +class OS2Field(Statement): + """An entry in the ``OS/2`` table. Most ``values`` should be numbers or + strings, apart from when the key is ``UnicodeRange``, ``CodePageRange`` + or ``Panose``, in which case it should be an array of integers.""" + + def __init__(self, key, value, location=None): + Statement.__init__(self, location) + self.key = key + self.value = value + + def build(self, builder): + """Calls the builder object's ``add_os2_field`` callback.""" + builder.add_os2_field(self.key, self.value) + + def asFea(self, indent=""): + def intarr2str(x): + return " ".join(map(str, x)) + + numbers = ( + "FSType", + "TypoAscender", + "TypoDescender", + "TypoLineGap", + "winAscent", + "winDescent", + "XHeight", + "CapHeight", + "WeightClass", + "WidthClass", + "LowerOpSize", + "UpperOpSize", + ) + ranges = ("UnicodeRange", "CodePageRange") + keywords = dict([(x.lower(), [x, str]) for x in numbers]) + keywords.update([(x.lower(), [x, intarr2str]) for x in ranges]) + keywords["panose"] = ["Panose", intarr2str] + keywords["vendor"] = ["Vendor", lambda y: '"{}"'.format(y)] + if self.key in keywords: + return "{} {};".format( + keywords[self.key][0], keywords[self.key][1](self.value) + ) + return "" # should raise exception + + +class HheaField(Statement): + """An entry in the ``hhea`` table.""" + + def __init__(self, key, value, location=None): + Statement.__init__(self, location) + self.key = key + self.value = value + + def build(self, builder): + """Calls the builder object's ``add_hhea_field`` callback.""" + builder.add_hhea_field(self.key, self.value) + + def asFea(self, indent=""): + fields = ("CaretOffset", "Ascender", "Descender", "LineGap") + keywords = dict([(x.lower(), x) for x in fields]) + return "{} {};".format(keywords[self.key], self.value) + + +class VheaField(Statement): + """An entry in the ``vhea`` table.""" + + def __init__(self, key, value, location=None): + Statement.__init__(self, location) + self.key = key + self.value = value + + def build(self, builder): + """Calls the builder object's ``add_vhea_field`` callback.""" + builder.add_vhea_field(self.key, self.value) + + def asFea(self, indent=""): + fields = ("VertTypoAscender", "VertTypoDescender", "VertTypoLineGap") + keywords = dict([(x.lower(), x) for x in fields]) + return "{} {};".format(keywords[self.key], self.value) + + +class STATDesignAxisStatement(Statement): + """A STAT table Design Axis + + Args: + tag (str): a 4 letter axis tag + axisOrder (int): an int + names (list): a list of :class:`STATNameStatement` objects + """ + + def __init__(self, tag, axisOrder, names, location=None): + Statement.__init__(self, location) + self.tag = tag + self.axisOrder = axisOrder + self.names = names + self.location = location + + def build(self, builder): + builder.addDesignAxis(self, self.location) + + def asFea(self, indent=""): + indent += SHIFT + res = f"DesignAxis {self.tag} {self.axisOrder} {{ \n" + res += ("\n" + indent).join([s.asFea(indent=indent) for s in self.names]) + "\n" + res += "};" + return res + + +class ElidedFallbackName(Statement): + """STAT table ElidedFallbackName + + Args: + names: a list of :class:`STATNameStatement` objects + """ + + def __init__(self, names, location=None): + Statement.__init__(self, location) + self.names = names + self.location = location + + def build(self, builder): + builder.setElidedFallbackName(self.names, self.location) + + def asFea(self, indent=""): + indent += SHIFT + res = "ElidedFallbackName { \n" + res += ("\n" + indent).join([s.asFea(indent=indent) for s in self.names]) + "\n" + res += "};" + return res + + +class ElidedFallbackNameID(Statement): + """STAT table ElidedFallbackNameID + + Args: + value: an int pointing to an existing name table name ID + """ + + def __init__(self, value, location=None): + Statement.__init__(self, location) + self.value = value + self.location = location + + def build(self, builder): + builder.setElidedFallbackName(self.value, self.location) + + def asFea(self, indent=""): + return f"ElidedFallbackNameID {self.value};" + + +class STATAxisValueStatement(Statement): + """A STAT table Axis Value Record + + Args: + names (list): a list of :class:`STATNameStatement` objects + locations (list): a list of :class:`AxisValueLocationStatement` objects + flags (int): an int + """ + + def __init__(self, names, locations, flags, location=None): + Statement.__init__(self, location) + self.names = names + self.locations = locations + self.flags = flags + + def build(self, builder): + builder.addAxisValueRecord(self, self.location) + + def asFea(self, indent=""): + res = "AxisValue {\n" + for location in self.locations: + res += location.asFea() + + for nameRecord in self.names: + res += nameRecord.asFea() + res += "\n" + + if self.flags: + flags = ["OlderSiblingFontAttribute", "ElidableAxisValueName"] + flagStrings = [] + curr = 1 + for i in range(len(flags)): + if self.flags & curr != 0: + flagStrings.append(flags[i]) + curr = curr << 1 + res += f"flag {' '.join(flagStrings)};\n" + res += "};" + return res + + +class AxisValueLocationStatement(Statement): + """ + A STAT table Axis Value Location + + Args: + tag (str): a 4 letter axis tag + values (list): a list of ints and/or floats + """ + + def __init__(self, tag, values, location=None): + Statement.__init__(self, location) + self.tag = tag + self.values = values + + def asFea(self, res=""): + res += f"location {self.tag} " + res += f"{' '.join(str(i) for i in self.values)};\n" + return res + + +class ConditionsetStatement(Statement): + """ + A variable layout conditionset + + Args: + name (str): the name of this conditionset + conditions (dict): a dictionary mapping axis tags to a + tuple of (min,max) userspace coordinates. + """ + + def __init__(self, name, conditions, location=None): + Statement.__init__(self, location) + self.name = name + self.conditions = conditions + + def build(self, builder): + builder.add_conditionset(self.name, self.conditions) + + def asFea(self, res="", indent=""): + res += indent + f"conditionset {self.name} " + "{\n" + for tag, (minvalue, maxvalue) in self.conditions.items(): + res += indent + SHIFT + f"{tag} {minvalue} {maxvalue};\n" + res += indent + "}" + f" {self.name};\n" + return res + + +class VariationBlock(Block): + """A variation feature block, applicable in a given set of conditions.""" + + def __init__(self, name, conditionset, use_extension=False, location=None): + Block.__init__(self, location) + self.name, self.conditionset, self.use_extension = ( + name, + conditionset, + use_extension, + ) + + def build(self, builder): + """Call the ``start_feature`` callback on the builder object, visit + all the statements in this feature, and then call ``end_feature``.""" + builder.start_feature(self.location, self.name) + if ( + self.conditionset != "NULL" + and self.conditionset not in builder.conditionsets_ + ): + raise FeatureLibError( + f"variation block used undefined conditionset {self.conditionset}", + self.location, + ) + + # language exclude_dflt statements modify builder.features_ + # limit them to this block with temporary builder.features_ + features = builder.features_ + builder.features_ = {} + Block.build(self, builder) + for key, value in builder.features_.items(): + items = builder.feature_variations_.setdefault(key, {}).setdefault( + self.conditionset, [] + ) + items.extend(value) + if key not in features: + features[key] = [] # Ensure we make a feature record + builder.features_ = features + builder.end_feature() + + def asFea(self, indent=""): + res = indent + "variation %s " % self.name.strip() + res += self.conditionset + " " + if self.use_extension: + res += "useExtension " + res += "{\n" + res += Block.asFea(self, indent=indent) + res += indent + "} %s;\n" % self.name.strip() + return res diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/builder.py b/.venv/lib/python3.9/site-packages/fontTools/feaLib/builder.py new file mode 100644 index 00000000..a1644875 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/feaLib/builder.py @@ -0,0 +1,1654 @@ +from fontTools.misc import sstruct +from fontTools.misc.textTools import Tag, tostr, binary2num, safeEval +from fontTools.feaLib.error import FeatureLibError +from fontTools.feaLib.lookupDebugInfo import ( + LookupDebugInfo, + LOOKUP_DEBUG_INFO_KEY, + LOOKUP_DEBUG_ENV_VAR, +) +from fontTools.feaLib.parser import Parser +from fontTools.feaLib.ast import FeatureFile +from fontTools.feaLib.variableScalar import VariableScalar +from fontTools.otlLib import builder as otl +from fontTools.otlLib.maxContextCalc import maxCtxFont +from fontTools.ttLib import newTable, getTableModule +from fontTools.ttLib.tables import otBase, otTables +from fontTools.otlLib.builder import ( + AlternateSubstBuilder, + ChainContextPosBuilder, + ChainContextSubstBuilder, + LigatureSubstBuilder, + MultipleSubstBuilder, + CursivePosBuilder, + MarkBasePosBuilder, + MarkLigPosBuilder, + MarkMarkPosBuilder, + ReverseChainSingleSubstBuilder, + SingleSubstBuilder, + ClassPairPosSubtableBuilder, + PairPosBuilder, + SinglePosBuilder, + ChainContextualRule, +) +from fontTools.otlLib.error import OpenTypeLibError +from fontTools.varLib.varStore import OnlineVarStoreBuilder +from fontTools.varLib.builder import buildVarDevTable +from fontTools.varLib.featureVars import addFeatureVariationsRaw +from fontTools.varLib.models import normalizeValue +from collections import defaultdict +import itertools +from io import StringIO +import logging +import warnings +import os + + +log = logging.getLogger(__name__) + + +def addOpenTypeFeatures(font, featurefile, tables=None, debug=False): + """Add features from a file to a font. Note that this replaces any features + currently present. + + Args: + font (feaLib.ttLib.TTFont): The font object. + featurefile: Either a path or file object (in which case we + parse it into an AST), or a pre-parsed AST instance. + tables: If passed, restrict the set of affected tables to those in the + list. + debug: Whether to add source debugging information to the font in the + ``Debg`` table + + """ + builder = Builder(font, featurefile) + builder.build(tables=tables, debug=debug) + + +def addOpenTypeFeaturesFromString( + font, features, filename=None, tables=None, debug=False +): + """Add features from a string to a font. Note that this replaces any + features currently present. + + Args: + font (feaLib.ttLib.TTFont): The font object. + features: A string containing feature code. + filename: The directory containing ``filename`` is used as the root of + relative ``include()`` paths; if ``None`` is provided, the current + directory is assumed. + tables: If passed, restrict the set of affected tables to those in the + list. + debug: Whether to add source debugging information to the font in the + ``Debg`` table + + """ + + featurefile = StringIO(tostr(features)) + if filename: + featurefile.name = filename + addOpenTypeFeatures(font, featurefile, tables=tables, debug=debug) + + +class Builder(object): + + supportedTables = frozenset( + Tag(tag) + for tag in [ + "BASE", + "GDEF", + "GPOS", + "GSUB", + "OS/2", + "head", + "hhea", + "name", + "vhea", + "STAT", + ] + ) + + def __init__(self, font, featurefile): + self.font = font + # 'featurefile' can be either a path or file object (in which case we + # parse it into an AST), or a pre-parsed AST instance + if isinstance(featurefile, FeatureFile): + self.parseTree, self.file = featurefile, None + else: + self.parseTree, self.file = None, featurefile + self.glyphMap = font.getReverseGlyphMap() + self.varstorebuilder = None + if "fvar" in font: + self.axes = font["fvar"].axes + self.varstorebuilder = OnlineVarStoreBuilder( + [ax.axisTag for ax in self.axes] + ) + self.default_language_systems_ = set() + self.script_ = None + self.lookupflag_ = 0 + self.lookupflag_markFilterSet_ = None + self.language_systems = set() + self.seen_non_DFLT_script_ = False + self.named_lookups_ = {} + self.cur_lookup_ = None + self.cur_lookup_name_ = None + self.cur_feature_name_ = None + self.lookups_ = [] + self.lookup_locations = {"GSUB": {}, "GPOS": {}} + self.features_ = {} # ('latn', 'DEU ', 'smcp') --> [LookupBuilder*] + self.required_features_ = {} # ('latn', 'DEU ') --> 'scmp' + self.feature_variations_ = {} + # for feature 'aalt' + self.aalt_features_ = [] # [(location, featureName)*], for 'aalt' + self.aalt_location_ = None + self.aalt_alternates_ = {} + # for 'featureNames' + self.featureNames_ = set() + self.featureNames_ids_ = {} + # for 'cvParameters' + self.cv_parameters_ = set() + self.cv_parameters_ids_ = {} + self.cv_num_named_params_ = {} + self.cv_characters_ = defaultdict(list) + # for feature 'size' + self.size_parameters_ = None + # for table 'head' + self.fontRevision_ = None # 2.71 + # for table 'name' + self.names_ = [] + # for table 'BASE' + self.base_horiz_axis_ = None + self.base_vert_axis_ = None + # for table 'GDEF' + self.attachPoints_ = {} # "a" --> {3, 7} + self.ligCaretCoords_ = {} # "f_f_i" --> {300, 600} + self.ligCaretPoints_ = {} # "f_f_i" --> {3, 7} + self.glyphClassDefs_ = {} # "fi" --> (2, (file, line, column)) + self.markAttach_ = {} # "acute" --> (4, (file, line, column)) + self.markAttachClassID_ = {} # frozenset({"acute", "grave"}) --> 4 + self.markFilterSets_ = {} # frozenset({"acute", "grave"}) --> 4 + # for table 'OS/2' + self.os2_ = {} + # for table 'hhea' + self.hhea_ = {} + # for table 'vhea' + self.vhea_ = {} + # for table 'STAT' + self.stat_ = {} + # for conditionsets + self.conditionsets_ = {} + + def build(self, tables=None, debug=False): + if self.parseTree is None: + self.parseTree = Parser(self.file, self.glyphMap).parse() + self.parseTree.build(self) + # by default, build all the supported tables + if tables is None: + tables = self.supportedTables + else: + tables = frozenset(tables) + unsupported = tables - self.supportedTables + if unsupported: + unsupported_string = ", ".join(sorted(unsupported)) + raise NotImplementedError( + "The following tables were requested but are unsupported: " + f"{unsupported_string}." + ) + if "GSUB" in tables: + self.build_feature_aalt_() + if "head" in tables: + self.build_head() + if "hhea" in tables: + self.build_hhea() + if "vhea" in tables: + self.build_vhea() + if "name" in tables: + self.build_name() + if "OS/2" in tables: + self.build_OS_2() + if "STAT" in tables: + self.build_STAT() + for tag in ("GPOS", "GSUB"): + if tag not in tables: + continue + table = self.makeTable(tag) + if self.feature_variations_: + self.makeFeatureVariations(table, tag) + if ( + table.ScriptList.ScriptCount > 0 + or table.FeatureList.FeatureCount > 0 + or table.LookupList.LookupCount > 0 + ): + fontTable = self.font[tag] = newTable(tag) + fontTable.table = table + elif tag in self.font: + del self.font[tag] + if any(tag in self.font for tag in ("GPOS", "GSUB")) and "OS/2" in self.font: + self.font["OS/2"].usMaxContext = maxCtxFont(self.font) + if "GDEF" in tables: + gdef = self.buildGDEF() + if gdef: + self.font["GDEF"] = gdef + elif "GDEF" in self.font: + del self.font["GDEF"] + elif self.varstorebuilder: + raise FeatureLibError("Must save GDEF when compiling a variable font") + if "BASE" in tables: + base = self.buildBASE() + if base: + self.font["BASE"] = base + elif "BASE" in self.font: + del self.font["BASE"] + if debug or os.environ.get(LOOKUP_DEBUG_ENV_VAR): + self.buildDebg() + + def get_chained_lookup_(self, location, builder_class): + result = builder_class(self.font, location) + result.lookupflag = self.lookupflag_ + result.markFilterSet = self.lookupflag_markFilterSet_ + self.lookups_.append(result) + return result + + def add_lookup_to_feature_(self, lookup, feature_name): + for script, lang in self.language_systems: + key = (script, lang, feature_name) + self.features_.setdefault(key, []).append(lookup) + + def get_lookup_(self, location, builder_class): + if ( + self.cur_lookup_ + and type(self.cur_lookup_) == builder_class + and self.cur_lookup_.lookupflag == self.lookupflag_ + and self.cur_lookup_.markFilterSet == self.lookupflag_markFilterSet_ + ): + return self.cur_lookup_ + if self.cur_lookup_name_ and self.cur_lookup_: + raise FeatureLibError( + "Within a named lookup block, all rules must be of " + "the same lookup type and flag", + location, + ) + self.cur_lookup_ = builder_class(self.font, location) + self.cur_lookup_.lookupflag = self.lookupflag_ + self.cur_lookup_.markFilterSet = self.lookupflag_markFilterSet_ + self.lookups_.append(self.cur_lookup_) + if self.cur_lookup_name_: + # We are starting a lookup rule inside a named lookup block. + self.named_lookups_[self.cur_lookup_name_] = self.cur_lookup_ + if self.cur_feature_name_: + # We are starting a lookup rule inside a feature. This includes + # lookup rules inside named lookups inside features. + self.add_lookup_to_feature_(self.cur_lookup_, self.cur_feature_name_) + return self.cur_lookup_ + + def build_feature_aalt_(self): + if not self.aalt_features_ and not self.aalt_alternates_: + return + alternates = {g: set(a) for g, a in self.aalt_alternates_.items()} + for location, name in self.aalt_features_ + [(None, "aalt")]: + feature = [ + (script, lang, feature, lookups) + for (script, lang, feature), lookups in self.features_.items() + if feature == name + ] + # "aalt" does not have to specify its own lookups, but it might. + if not feature and name != "aalt": + raise FeatureLibError( + "Feature %s has not been defined" % name, location + ) + for script, lang, feature, lookups in feature: + for lookuplist in lookups: + if not isinstance(lookuplist, list): + lookuplist = [lookuplist] + for lookup in lookuplist: + for glyph, alts in lookup.getAlternateGlyphs().items(): + alternates.setdefault(glyph, set()).update(alts) + single = { + glyph: list(repl)[0] for glyph, repl in alternates.items() if len(repl) == 1 + } + # TODO: Figure out the glyph alternate ordering used by makeotf. + # https://github.com/fonttools/fonttools/issues/836 + multi = { + glyph: sorted(repl, key=self.font.getGlyphID) + for glyph, repl in alternates.items() + if len(repl) > 1 + } + if not single and not multi: + return + self.features_ = { + (script, lang, feature): lookups + for (script, lang, feature), lookups in self.features_.items() + if feature != "aalt" + } + old_lookups = self.lookups_ + self.lookups_ = [] + self.start_feature(self.aalt_location_, "aalt") + if single: + single_lookup = self.get_lookup_(location, SingleSubstBuilder) + single_lookup.mapping = single + if multi: + multi_lookup = self.get_lookup_(location, AlternateSubstBuilder) + multi_lookup.alternates = multi + self.end_feature() + self.lookups_.extend(old_lookups) + + def build_head(self): + if not self.fontRevision_: + return + table = self.font.get("head") + if not table: # this only happens for unit tests + table = self.font["head"] = newTable("head") + table.decompile(b"\0" * 54, self.font) + table.tableVersion = 1.0 + table.created = table.modified = 3406620153 # 2011-12-13 11:22:33 + table.fontRevision = self.fontRevision_ + + def build_hhea(self): + if not self.hhea_: + return + table = self.font.get("hhea") + if not table: # this only happens for unit tests + table = self.font["hhea"] = newTable("hhea") + table.decompile(b"\0" * 36, self.font) + table.tableVersion = 0x00010000 + if "caretoffset" in self.hhea_: + table.caretOffset = self.hhea_["caretoffset"] + if "ascender" in self.hhea_: + table.ascent = self.hhea_["ascender"] + if "descender" in self.hhea_: + table.descent = self.hhea_["descender"] + if "linegap" in self.hhea_: + table.lineGap = self.hhea_["linegap"] + + def build_vhea(self): + if not self.vhea_: + return + table = self.font.get("vhea") + if not table: # this only happens for unit tests + table = self.font["vhea"] = newTable("vhea") + table.decompile(b"\0" * 36, self.font) + table.tableVersion = 0x00011000 + if "verttypoascender" in self.vhea_: + table.ascent = self.vhea_["verttypoascender"] + if "verttypodescender" in self.vhea_: + table.descent = self.vhea_["verttypodescender"] + if "verttypolinegap" in self.vhea_: + table.lineGap = self.vhea_["verttypolinegap"] + + def get_user_name_id(self, table): + # Try to find first unused font-specific name id + nameIDs = [name.nameID for name in table.names] + for user_name_id in range(256, 32767): + if user_name_id not in nameIDs: + return user_name_id + + def buildFeatureParams(self, tag): + params = None + if tag == "size": + params = otTables.FeatureParamsSize() + ( + params.DesignSize, + params.SubfamilyID, + params.RangeStart, + params.RangeEnd, + ) = self.size_parameters_ + if tag in self.featureNames_ids_: + params.SubfamilyNameID = self.featureNames_ids_[tag] + else: + params.SubfamilyNameID = 0 + elif tag in self.featureNames_: + if not self.featureNames_ids_: + # name table wasn't selected among the tables to build; skip + pass + else: + assert tag in self.featureNames_ids_ + params = otTables.FeatureParamsStylisticSet() + params.Version = 0 + params.UINameID = self.featureNames_ids_[tag] + elif tag in self.cv_parameters_: + params = otTables.FeatureParamsCharacterVariants() + params.Format = 0 + params.FeatUILabelNameID = self.cv_parameters_ids_.get( + (tag, "FeatUILabelNameID"), 0 + ) + params.FeatUITooltipTextNameID = self.cv_parameters_ids_.get( + (tag, "FeatUITooltipTextNameID"), 0 + ) + params.SampleTextNameID = self.cv_parameters_ids_.get( + (tag, "SampleTextNameID"), 0 + ) + params.NumNamedParameters = self.cv_num_named_params_.get(tag, 0) + params.FirstParamUILabelNameID = self.cv_parameters_ids_.get( + (tag, "ParamUILabelNameID_0"), 0 + ) + params.CharCount = len(self.cv_characters_[tag]) + params.Character = self.cv_characters_[tag] + return params + + def build_name(self): + if not self.names_: + return + table = self.font.get("name") + if not table: # this only happens for unit tests + table = self.font["name"] = newTable("name") + table.names = [] + for name in self.names_: + nameID, platformID, platEncID, langID, string = name + # For featureNames block, nameID is 'feature tag' + # For cvParameters blocks, nameID is ('feature tag', 'block name') + if not isinstance(nameID, int): + tag = nameID + if tag in self.featureNames_: + if tag not in self.featureNames_ids_: + self.featureNames_ids_[tag] = self.get_user_name_id(table) + assert self.featureNames_ids_[tag] is not None + nameID = self.featureNames_ids_[tag] + elif tag[0] in self.cv_parameters_: + if tag not in self.cv_parameters_ids_: + self.cv_parameters_ids_[tag] = self.get_user_name_id(table) + assert self.cv_parameters_ids_[tag] is not None + nameID = self.cv_parameters_ids_[tag] + table.setName(string, nameID, platformID, platEncID, langID) + + def build_OS_2(self): + if not self.os2_: + return + table = self.font.get("OS/2") + if not table: # this only happens for unit tests + table = self.font["OS/2"] = newTable("OS/2") + data = b"\0" * sstruct.calcsize(getTableModule("OS/2").OS2_format_0) + table.decompile(data, self.font) + version = 0 + if "fstype" in self.os2_: + table.fsType = self.os2_["fstype"] + if "panose" in self.os2_: + panose = getTableModule("OS/2").Panose() + ( + panose.bFamilyType, + panose.bSerifStyle, + panose.bWeight, + panose.bProportion, + panose.bContrast, + panose.bStrokeVariation, + panose.bArmStyle, + panose.bLetterForm, + panose.bMidline, + panose.bXHeight, + ) = self.os2_["panose"] + table.panose = panose + if "typoascender" in self.os2_: + table.sTypoAscender = self.os2_["typoascender"] + if "typodescender" in self.os2_: + table.sTypoDescender = self.os2_["typodescender"] + if "typolinegap" in self.os2_: + table.sTypoLineGap = self.os2_["typolinegap"] + if "winascent" in self.os2_: + table.usWinAscent = self.os2_["winascent"] + if "windescent" in self.os2_: + table.usWinDescent = self.os2_["windescent"] + if "vendor" in self.os2_: + table.achVendID = safeEval("'''" + self.os2_["vendor"] + "'''") + if "weightclass" in self.os2_: + table.usWeightClass = self.os2_["weightclass"] + if "widthclass" in self.os2_: + table.usWidthClass = self.os2_["widthclass"] + if "unicoderange" in self.os2_: + table.setUnicodeRanges(self.os2_["unicoderange"]) + if "codepagerange" in self.os2_: + pages = self.build_codepages_(self.os2_["codepagerange"]) + table.ulCodePageRange1, table.ulCodePageRange2 = pages + version = 1 + if "xheight" in self.os2_: + table.sxHeight = self.os2_["xheight"] + version = 2 + if "capheight" in self.os2_: + table.sCapHeight = self.os2_["capheight"] + version = 2 + if "loweropsize" in self.os2_: + table.usLowerOpticalPointSize = self.os2_["loweropsize"] + version = 5 + if "upperopsize" in self.os2_: + table.usUpperOpticalPointSize = self.os2_["upperopsize"] + version = 5 + + def checkattr(table, attrs): + for attr in attrs: + if not hasattr(table, attr): + setattr(table, attr, 0) + + table.version = max(version, table.version) + # this only happens for unit tests + if version >= 1: + checkattr(table, ("ulCodePageRange1", "ulCodePageRange2")) + if version >= 2: + checkattr( + table, + ( + "sxHeight", + "sCapHeight", + "usDefaultChar", + "usBreakChar", + "usMaxContext", + ), + ) + if version >= 5: + checkattr(table, ("usLowerOpticalPointSize", "usUpperOpticalPointSize")) + + def setElidedFallbackName(self, value, location): + # ElidedFallbackName is a convenience method for setting + # ElidedFallbackNameID so only one can be allowed + for token in ("ElidedFallbackName", "ElidedFallbackNameID"): + if token in self.stat_: + raise FeatureLibError( + f"{token} is already set.", + location, + ) + if isinstance(value, int): + self.stat_["ElidedFallbackNameID"] = value + elif isinstance(value, list): + self.stat_["ElidedFallbackName"] = value + else: + raise AssertionError(value) + + def addDesignAxis(self, designAxis, location): + if "DesignAxes" not in self.stat_: + self.stat_["DesignAxes"] = [] + if designAxis.tag in (r.tag for r in self.stat_["DesignAxes"]): + raise FeatureLibError( + f'DesignAxis already defined for tag "{designAxis.tag}".', + location, + ) + if designAxis.axisOrder in (r.axisOrder for r in self.stat_["DesignAxes"]): + raise FeatureLibError( + f"DesignAxis already defined for axis number {designAxis.axisOrder}.", + location, + ) + self.stat_["DesignAxes"].append(designAxis) + + def addAxisValueRecord(self, axisValueRecord, location): + if "AxisValueRecords" not in self.stat_: + self.stat_["AxisValueRecords"] = [] + # Check for duplicate AxisValueRecords + for record_ in self.stat_["AxisValueRecords"]: + if ( + {n.asFea() for n in record_.names} + == {n.asFea() for n in axisValueRecord.names} + and {n.asFea() for n in record_.locations} + == {n.asFea() for n in axisValueRecord.locations} + and record_.flags == axisValueRecord.flags + ): + raise FeatureLibError( + "An AxisValueRecord with these values is already defined.", + location, + ) + self.stat_["AxisValueRecords"].append(axisValueRecord) + + def build_STAT(self): + if not self.stat_: + return + + axes = self.stat_.get("DesignAxes") + if not axes: + raise FeatureLibError("DesignAxes not defined", None) + axisValueRecords = self.stat_.get("AxisValueRecords") + axisValues = {} + format4_locations = [] + for tag in axes: + axisValues[tag.tag] = [] + if axisValueRecords is not None: + for avr in axisValueRecords: + valuesDict = {} + if avr.flags > 0: + valuesDict["flags"] = avr.flags + if len(avr.locations) == 1: + location = avr.locations[0] + values = location.values + if len(values) == 1: # format1 + valuesDict.update({"value": values[0], "name": avr.names}) + if len(values) == 2: # format3 + valuesDict.update( + { + "value": values[0], + "linkedValue": values[1], + "name": avr.names, + } + ) + if len(values) == 3: # format2 + nominal, minVal, maxVal = values + valuesDict.update( + { + "nominalValue": nominal, + "rangeMinValue": minVal, + "rangeMaxValue": maxVal, + "name": avr.names, + } + ) + axisValues[location.tag].append(valuesDict) + else: + valuesDict.update( + { + "location": {i.tag: i.values[0] for i in avr.locations}, + "name": avr.names, + } + ) + format4_locations.append(valuesDict) + + designAxes = [ + { + "ordering": a.axisOrder, + "tag": a.tag, + "name": a.names, + "values": axisValues[a.tag], + } + for a in axes + ] + + nameTable = self.font.get("name") + if not nameTable: # this only happens for unit tests + nameTable = self.font["name"] = newTable("name") + nameTable.names = [] + + if "ElidedFallbackNameID" in self.stat_: + nameID = self.stat_["ElidedFallbackNameID"] + name = nameTable.getDebugName(nameID) + if not name: + raise FeatureLibError( + f"ElidedFallbackNameID {nameID} points " + "to a nameID that does not exist in the " + '"name" table', + None, + ) + elif "ElidedFallbackName" in self.stat_: + nameID = self.stat_["ElidedFallbackName"] + + otl.buildStatTable( + self.font, + designAxes, + locations=format4_locations, + elidedFallbackName=nameID, + ) + + def build_codepages_(self, pages): + pages2bits = { + 1252: 0, + 1250: 1, + 1251: 2, + 1253: 3, + 1254: 4, + 1255: 5, + 1256: 6, + 1257: 7, + 1258: 8, + 874: 16, + 932: 17, + 936: 18, + 949: 19, + 950: 20, + 1361: 21, + 869: 48, + 866: 49, + 865: 50, + 864: 51, + 863: 52, + 862: 53, + 861: 54, + 860: 55, + 857: 56, + 855: 57, + 852: 58, + 775: 59, + 737: 60, + 708: 61, + 850: 62, + 437: 63, + } + bits = [pages2bits[p] for p in pages if p in pages2bits] + pages = [] + for i in range(2): + pages.append("") + for j in range(i * 32, (i + 1) * 32): + if j in bits: + pages[i] += "1" + else: + pages[i] += "0" + return [binary2num(p[::-1]) for p in pages] + + def buildBASE(self): + if not self.base_horiz_axis_ and not self.base_vert_axis_: + return None + base = otTables.BASE() + base.Version = 0x00010000 + base.HorizAxis = self.buildBASEAxis(self.base_horiz_axis_) + base.VertAxis = self.buildBASEAxis(self.base_vert_axis_) + + result = newTable("BASE") + result.table = base + return result + + def buildBASEAxis(self, axis): + if not axis: + return + bases, scripts = axis + axis = otTables.Axis() + axis.BaseTagList = otTables.BaseTagList() + axis.BaseTagList.BaselineTag = bases + axis.BaseTagList.BaseTagCount = len(bases) + axis.BaseScriptList = otTables.BaseScriptList() + axis.BaseScriptList.BaseScriptRecord = [] + axis.BaseScriptList.BaseScriptCount = len(scripts) + for script in sorted(scripts): + record = otTables.BaseScriptRecord() + record.BaseScriptTag = script[0] + record.BaseScript = otTables.BaseScript() + record.BaseScript.BaseLangSysCount = 0 + record.BaseScript.BaseValues = otTables.BaseValues() + record.BaseScript.BaseValues.DefaultIndex = bases.index(script[1]) + record.BaseScript.BaseValues.BaseCoord = [] + record.BaseScript.BaseValues.BaseCoordCount = len(script[2]) + for c in script[2]: + coord = otTables.BaseCoord() + coord.Format = 1 + coord.Coordinate = c + record.BaseScript.BaseValues.BaseCoord.append(coord) + axis.BaseScriptList.BaseScriptRecord.append(record) + return axis + + def buildGDEF(self): + gdef = otTables.GDEF() + gdef.GlyphClassDef = self.buildGDEFGlyphClassDef_() + gdef.AttachList = otl.buildAttachList(self.attachPoints_, self.glyphMap) + gdef.LigCaretList = otl.buildLigCaretList( + self.ligCaretCoords_, self.ligCaretPoints_, self.glyphMap + ) + gdef.MarkAttachClassDef = self.buildGDEFMarkAttachClassDef_() + gdef.MarkGlyphSetsDef = self.buildGDEFMarkGlyphSetsDef_() + gdef.Version = 0x00010002 if gdef.MarkGlyphSetsDef else 0x00010000 + if self.varstorebuilder: + store = self.varstorebuilder.finish() + if store.VarData: + gdef.Version = 0x00010003 + gdef.VarStore = store + varidx_map = store.optimize() + + gdef.remap_device_varidxes(varidx_map) + if 'GPOS' in self.font: + self.font['GPOS'].table.remap_device_varidxes(varidx_map) + if any( + ( + gdef.GlyphClassDef, + gdef.AttachList, + gdef.LigCaretList, + gdef.MarkAttachClassDef, + gdef.MarkGlyphSetsDef, + ) + ) or hasattr(gdef, "VarStore"): + result = newTable("GDEF") + result.table = gdef + return result + else: + return None + + def buildGDEFGlyphClassDef_(self): + if self.glyphClassDefs_: + classes = {g: c for (g, (c, _)) in self.glyphClassDefs_.items()} + else: + classes = {} + for lookup in self.lookups_: + classes.update(lookup.inferGlyphClasses()) + for markClass in self.parseTree.markClasses.values(): + for markClassDef in markClass.definitions: + for glyph in markClassDef.glyphSet(): + classes[glyph] = 3 + if classes: + result = otTables.GlyphClassDef() + result.classDefs = classes + return result + else: + return None + + def buildGDEFMarkAttachClassDef_(self): + classDefs = {g: c for g, (c, _) in self.markAttach_.items()} + if not classDefs: + return None + result = otTables.MarkAttachClassDef() + result.classDefs = classDefs + return result + + def buildGDEFMarkGlyphSetsDef_(self): + sets = [] + for glyphs, id_ in sorted( + self.markFilterSets_.items(), key=lambda item: item[1] + ): + sets.append(glyphs) + return otl.buildMarkGlyphSetsDef(sets, self.glyphMap) + + def buildDebg(self): + if "Debg" not in self.font: + self.font["Debg"] = newTable("Debg") + self.font["Debg"].data = {} + self.font["Debg"].data[LOOKUP_DEBUG_INFO_KEY] = self.lookup_locations + + def buildLookups_(self, tag): + assert tag in ("GPOS", "GSUB"), tag + for lookup in self.lookups_: + lookup.lookup_index = None + lookups = [] + for lookup in self.lookups_: + if lookup.table != tag: + continue + lookup.lookup_index = len(lookups) + self.lookup_locations[tag][str(lookup.lookup_index)] = LookupDebugInfo( + location=str(lookup.location), + name=self.get_lookup_name_(lookup), + feature=None, + ) + lookups.append(lookup) + try: + otLookups = [l.build() for l in lookups] + except OpenTypeLibError as e: + raise FeatureLibError(str(e), e.location) from e + return otLookups + + def makeTable(self, tag): + table = getattr(otTables, tag, None)() + table.Version = 0x00010000 + table.ScriptList = otTables.ScriptList() + table.ScriptList.ScriptRecord = [] + table.FeatureList = otTables.FeatureList() + table.FeatureList.FeatureRecord = [] + table.LookupList = otTables.LookupList() + table.LookupList.Lookup = self.buildLookups_(tag) + + # Build a table for mapping (tag, lookup_indices) to feature_index. + # For example, ('liga', (2,3,7)) --> 23. + feature_indices = {} + required_feature_indices = {} # ('latn', 'DEU') --> 23 + scripts = {} # 'latn' --> {'DEU': [23, 24]} for feature #23,24 + # Sort the feature table by feature tag: + # https://github.com/fonttools/fonttools/issues/568 + sortFeatureTag = lambda f: (f[0][2], f[0][1], f[0][0], f[1]) + for key, lookups in sorted(self.features_.items(), key=sortFeatureTag): + script, lang, feature_tag = key + # l.lookup_index will be None when a lookup is not needed + # for the table under construction. For example, substitution + # rules will have no lookup_index while building GPOS tables. + lookup_indices = tuple( + [l.lookup_index for l in lookups if l.lookup_index is not None] + ) + + size_feature = tag == "GPOS" and feature_tag == "size" + force_feature = self.any_feature_variations(feature_tag, tag) + if len(lookup_indices) == 0 and not size_feature and not force_feature: + continue + + for ix in lookup_indices: + try: + self.lookup_locations[tag][str(ix)] = self.lookup_locations[tag][ + str(ix) + ]._replace(feature=key) + except KeyError: + warnings.warn( + "feaLib.Builder subclass needs upgrading to " + "stash debug information. See fonttools#2065." + ) + + feature_key = (feature_tag, lookup_indices) + feature_index = feature_indices.get(feature_key) + if feature_index is None: + feature_index = len(table.FeatureList.FeatureRecord) + frec = otTables.FeatureRecord() + frec.FeatureTag = feature_tag + frec.Feature = otTables.Feature() + frec.Feature.FeatureParams = self.buildFeatureParams(feature_tag) + frec.Feature.LookupListIndex = list(lookup_indices) + frec.Feature.LookupCount = len(lookup_indices) + table.FeatureList.FeatureRecord.append(frec) + feature_indices[feature_key] = feature_index + scripts.setdefault(script, {}).setdefault(lang, []).append(feature_index) + if self.required_features_.get((script, lang)) == feature_tag: + required_feature_indices[(script, lang)] = feature_index + + # Build ScriptList. + for script, lang_features in sorted(scripts.items()): + srec = otTables.ScriptRecord() + srec.ScriptTag = script + srec.Script = otTables.Script() + srec.Script.DefaultLangSys = None + srec.Script.LangSysRecord = [] + for lang, feature_indices in sorted(lang_features.items()): + langrec = otTables.LangSysRecord() + langrec.LangSys = otTables.LangSys() + langrec.LangSys.LookupOrder = None + + req_feature_index = required_feature_indices.get((script, lang)) + if req_feature_index is None: + langrec.LangSys.ReqFeatureIndex = 0xFFFF + else: + langrec.LangSys.ReqFeatureIndex = req_feature_index + + langrec.LangSys.FeatureIndex = [ + i for i in feature_indices if i != req_feature_index + ] + langrec.LangSys.FeatureCount = len(langrec.LangSys.FeatureIndex) + + if lang == "dflt": + srec.Script.DefaultLangSys = langrec.LangSys + else: + langrec.LangSysTag = lang + srec.Script.LangSysRecord.append(langrec) + srec.Script.LangSysCount = len(srec.Script.LangSysRecord) + table.ScriptList.ScriptRecord.append(srec) + + table.ScriptList.ScriptCount = len(table.ScriptList.ScriptRecord) + table.FeatureList.FeatureCount = len(table.FeatureList.FeatureRecord) + table.LookupList.LookupCount = len(table.LookupList.Lookup) + return table + + def makeFeatureVariations(self, table, table_tag): + feature_vars = {} + has_any_variations = False + # Sort out which lookups to build, gather their indices + for ( + script_, + language, + feature_tag, + ), variations in self.feature_variations_.items(): + feature_vars[feature_tag] = [] + for conditionset, builders in variations.items(): + raw_conditionset = self.conditionsets_[conditionset] + indices = [] + for b in builders: + if b.table != table_tag: + continue + assert b.lookup_index is not None + indices.append(b.lookup_index) + has_any_variations = True + feature_vars[feature_tag].append((raw_conditionset, indices)) + + if has_any_variations: + for feature_tag, conditions_and_lookups in feature_vars.items(): + addFeatureVariationsRaw( + self.font, table, conditions_and_lookups, feature_tag + ) + + def any_feature_variations(self, feature_tag, table_tag): + for (_, _, feature), variations in self.feature_variations_.items(): + if feature != feature_tag: + continue + for conditionset, builders in variations.items(): + if any(b.table == table_tag for b in builders): + return True + return False + + def get_lookup_name_(self, lookup): + rev = {v: k for k, v in self.named_lookups_.items()} + if lookup in rev: + return rev[lookup] + return None + + def add_language_system(self, location, script, language): + # OpenType Feature File Specification, section 4.b.i + if script == "DFLT" and language == "dflt" and self.default_language_systems_: + raise FeatureLibError( + 'If "languagesystem DFLT dflt" is present, it must be ' + "the first of the languagesystem statements", + location, + ) + if script == "DFLT": + if self.seen_non_DFLT_script_: + raise FeatureLibError( + 'languagesystems using the "DFLT" script tag must ' + "precede all other languagesystems", + location, + ) + else: + self.seen_non_DFLT_script_ = True + if (script, language) in self.default_language_systems_: + raise FeatureLibError( + '"languagesystem %s %s" has already been specified' + % (script.strip(), language.strip()), + location, + ) + self.default_language_systems_.add((script, language)) + + def get_default_language_systems_(self): + # OpenType Feature File specification, 4.b.i. languagesystem: + # If no "languagesystem" statement is present, then the + # implementation must behave exactly as though the following + # statement were present at the beginning of the feature file: + # languagesystem DFLT dflt; + if self.default_language_systems_: + return frozenset(self.default_language_systems_) + else: + return frozenset({("DFLT", "dflt")}) + + def start_feature(self, location, name): + self.language_systems = self.get_default_language_systems_() + self.script_ = "DFLT" + self.cur_lookup_ = None + self.cur_feature_name_ = name + self.lookupflag_ = 0 + self.lookupflag_markFilterSet_ = None + if name == "aalt": + self.aalt_location_ = location + + def end_feature(self): + assert self.cur_feature_name_ is not None + self.cur_feature_name_ = None + self.language_systems = None + self.cur_lookup_ = None + self.lookupflag_ = 0 + self.lookupflag_markFilterSet_ = None + + def start_lookup_block(self, location, name): + if name in self.named_lookups_: + raise FeatureLibError( + 'Lookup "%s" has already been defined' % name, location + ) + if self.cur_feature_name_ == "aalt": + raise FeatureLibError( + "Lookup blocks cannot be placed inside 'aalt' features; " + "move it out, and then refer to it with a lookup statement", + location, + ) + self.cur_lookup_name_ = name + self.named_lookups_[name] = None + self.cur_lookup_ = None + if self.cur_feature_name_ is None: + self.lookupflag_ = 0 + self.lookupflag_markFilterSet_ = None + + def end_lookup_block(self): + assert self.cur_lookup_name_ is not None + self.cur_lookup_name_ = None + self.cur_lookup_ = None + if self.cur_feature_name_ is None: + self.lookupflag_ = 0 + self.lookupflag_markFilterSet_ = None + + def add_lookup_call(self, lookup_name): + assert lookup_name in self.named_lookups_, lookup_name + self.cur_lookup_ = None + lookup = self.named_lookups_[lookup_name] + if lookup is not None: # skip empty named lookup + self.add_lookup_to_feature_(lookup, self.cur_feature_name_) + + def set_font_revision(self, location, revision): + self.fontRevision_ = revision + + def set_language(self, location, language, include_default, required): + assert len(language) == 4 + if self.cur_feature_name_ in ("aalt", "size"): + raise FeatureLibError( + "Language statements are not allowed " + 'within "feature %s"' % self.cur_feature_name_, + location, + ) + if self.cur_feature_name_ is None: + raise FeatureLibError( + "Language statements are not allowed " + "within standalone lookup blocks", + location, + ) + self.cur_lookup_ = None + + key = (self.script_, language, self.cur_feature_name_) + lookups = self.features_.get((key[0], "dflt", key[2])) + if (language == "dflt" or include_default) and lookups: + self.features_[key] = lookups[:] + else: + self.features_[key] = [] + self.language_systems = frozenset([(self.script_, language)]) + + if required: + key = (self.script_, language) + if key in self.required_features_: + raise FeatureLibError( + "Language %s (script %s) has already " + "specified feature %s as its required feature" + % ( + language.strip(), + self.script_.strip(), + self.required_features_[key].strip(), + ), + location, + ) + self.required_features_[key] = self.cur_feature_name_ + + def getMarkAttachClass_(self, location, glyphs): + glyphs = frozenset(glyphs) + id_ = self.markAttachClassID_.get(glyphs) + if id_ is not None: + return id_ + id_ = len(self.markAttachClassID_) + 1 + self.markAttachClassID_[glyphs] = id_ + for glyph in glyphs: + if glyph in self.markAttach_: + _, loc = self.markAttach_[glyph] + raise FeatureLibError( + "Glyph %s already has been assigned " + "a MarkAttachmentType at %s" % (glyph, loc), + location, + ) + self.markAttach_[glyph] = (id_, location) + return id_ + + def getMarkFilterSet_(self, location, glyphs): + glyphs = frozenset(glyphs) + id_ = self.markFilterSets_.get(glyphs) + if id_ is not None: + return id_ + id_ = len(self.markFilterSets_) + self.markFilterSets_[glyphs] = id_ + return id_ + + def set_lookup_flag(self, location, value, markAttach, markFilter): + value = value & 0xFF + if markAttach: + markAttachClass = self.getMarkAttachClass_(location, markAttach) + value = value | (markAttachClass << 8) + if markFilter: + markFilterSet = self.getMarkFilterSet_(location, markFilter) + value = value | 0x10 + self.lookupflag_markFilterSet_ = markFilterSet + else: + self.lookupflag_markFilterSet_ = None + self.lookupflag_ = value + + def set_script(self, location, script): + if self.cur_feature_name_ in ("aalt", "size"): + raise FeatureLibError( + "Script statements are not allowed " + 'within "feature %s"' % self.cur_feature_name_, + location, + ) + if self.cur_feature_name_ is None: + raise FeatureLibError( + "Script statements are not allowed " "within standalone lookup blocks", + location, + ) + if self.language_systems == {(script, "dflt")}: + # Nothing to do. + return + self.cur_lookup_ = None + self.script_ = script + self.lookupflag_ = 0 + self.lookupflag_markFilterSet_ = None + self.set_language(location, "dflt", include_default=True, required=False) + + def find_lookup_builders_(self, lookups): + """Helper for building chain contextual substitutions + + Given a list of lookup names, finds the LookupBuilder for each name. + If an input name is None, it gets mapped to a None LookupBuilder. + """ + lookup_builders = [] + for lookuplist in lookups: + if lookuplist is not None: + lookup_builders.append( + [self.named_lookups_.get(l.name) for l in lookuplist] + ) + else: + lookup_builders.append(None) + return lookup_builders + + def add_attach_points(self, location, glyphs, contourPoints): + for glyph in glyphs: + self.attachPoints_.setdefault(glyph, set()).update(contourPoints) + + def add_feature_reference(self, location, featureName): + if self.cur_feature_name_ != "aalt": + raise FeatureLibError( + 'Feature references are only allowed inside "feature aalt"', location + ) + self.aalt_features_.append((location, featureName)) + + def add_featureName(self, tag): + self.featureNames_.add(tag) + + def add_cv_parameter(self, tag): + self.cv_parameters_.add(tag) + + def add_to_cv_num_named_params(self, tag): + """Adds new items to ``self.cv_num_named_params_`` + or increments the count of existing items.""" + if tag in self.cv_num_named_params_: + self.cv_num_named_params_[tag] += 1 + else: + self.cv_num_named_params_[tag] = 1 + + def add_cv_character(self, character, tag): + self.cv_characters_[tag].append(character) + + def set_base_axis(self, bases, scripts, vertical): + if vertical: + self.base_vert_axis_ = (bases, scripts) + else: + self.base_horiz_axis_ = (bases, scripts) + + def set_size_parameters( + self, location, DesignSize, SubfamilyID, RangeStart, RangeEnd + ): + if self.cur_feature_name_ != "size": + raise FeatureLibError( + "Parameters statements are not allowed " + 'within "feature %s"' % self.cur_feature_name_, + location, + ) + self.size_parameters_ = [DesignSize, SubfamilyID, RangeStart, RangeEnd] + for script, lang in self.language_systems: + key = (script, lang, self.cur_feature_name_) + self.features_.setdefault(key, []) + + # GSUB rules + + # GSUB 1 + def add_single_subst(self, location, prefix, suffix, mapping, forceChain): + if self.cur_feature_name_ == "aalt": + for (from_glyph, to_glyph) in mapping.items(): + alts = self.aalt_alternates_.setdefault(from_glyph, set()) + alts.add(to_glyph) + return + if prefix or suffix or forceChain: + self.add_single_subst_chained_(location, prefix, suffix, mapping) + return + lookup = self.get_lookup_(location, SingleSubstBuilder) + for (from_glyph, to_glyph) in mapping.items(): + if from_glyph in lookup.mapping: + if to_glyph == lookup.mapping[from_glyph]: + log.info( + "Removing duplicate single substitution from glyph" + ' "%s" to "%s" at %s', + from_glyph, + to_glyph, + location, + ) + else: + raise FeatureLibError( + 'Already defined rule for replacing glyph "%s" by "%s"' + % (from_glyph, lookup.mapping[from_glyph]), + location, + ) + lookup.mapping[from_glyph] = to_glyph + + # GSUB 2 + def add_multiple_subst( + self, location, prefix, glyph, suffix, replacements, forceChain=False + ): + if prefix or suffix or forceChain: + chain = self.get_lookup_(location, ChainContextSubstBuilder) + sub = self.get_chained_lookup_(location, MultipleSubstBuilder) + sub.mapping[glyph] = replacements + chain.rules.append(ChainContextualRule(prefix, [{glyph}], suffix, [sub])) + return + lookup = self.get_lookup_(location, MultipleSubstBuilder) + if glyph in lookup.mapping: + if replacements == lookup.mapping[glyph]: + log.info( + "Removing duplicate multiple substitution from glyph" + ' "%s" to %s%s', + glyph, + replacements, + f" at {location}" if location else "", + ) + else: + raise FeatureLibError( + 'Already defined substitution for glyph "%s"' % glyph, location + ) + lookup.mapping[glyph] = replacements + + # GSUB 3 + def add_alternate_subst(self, location, prefix, glyph, suffix, replacement): + if self.cur_feature_name_ == "aalt": + alts = self.aalt_alternates_.setdefault(glyph, set()) + alts.update(replacement) + return + if prefix or suffix: + chain = self.get_lookup_(location, ChainContextSubstBuilder) + lookup = self.get_chained_lookup_(location, AlternateSubstBuilder) + chain.rules.append(ChainContextualRule(prefix, [{glyph}], suffix, [lookup])) + else: + lookup = self.get_lookup_(location, AlternateSubstBuilder) + if glyph in lookup.alternates: + raise FeatureLibError( + 'Already defined alternates for glyph "%s"' % glyph, location + ) + # We allow empty replacement glyphs here. + lookup.alternates[glyph] = replacement + + # GSUB 4 + def add_ligature_subst( + self, location, prefix, glyphs, suffix, replacement, forceChain + ): + if prefix or suffix or forceChain: + chain = self.get_lookup_(location, ChainContextSubstBuilder) + lookup = self.get_chained_lookup_(location, LigatureSubstBuilder) + chain.rules.append(ChainContextualRule(prefix, glyphs, suffix, [lookup])) + else: + lookup = self.get_lookup_(location, LigatureSubstBuilder) + + if not all(glyphs): + raise FeatureLibError("Empty glyph class in substitution", location) + + # OpenType feature file syntax, section 5.d, "Ligature substitution": + # "Since the OpenType specification does not allow ligature + # substitutions to be specified on target sequences that contain + # glyph classes, the implementation software will enumerate + # all specific glyph sequences if glyph classes are detected" + for g in sorted(itertools.product(*glyphs)): + lookup.ligatures[g] = replacement + + # GSUB 5/6 + def add_chain_context_subst(self, location, prefix, glyphs, suffix, lookups): + if not all(glyphs) or not all(prefix) or not all(suffix): + raise FeatureLibError("Empty glyph class in contextual substitution", location) + lookup = self.get_lookup_(location, ChainContextSubstBuilder) + lookup.rules.append( + ChainContextualRule( + prefix, glyphs, suffix, self.find_lookup_builders_(lookups) + ) + ) + + def add_single_subst_chained_(self, location, prefix, suffix, mapping): + if not mapping or not all(prefix) or not all(suffix): + raise FeatureLibError("Empty glyph class in contextual substitution", location) + # https://github.com/fonttools/fonttools/issues/512 + chain = self.get_lookup_(location, ChainContextSubstBuilder) + sub = chain.find_chainable_single_subst(set(mapping.keys())) + if sub is None: + sub = self.get_chained_lookup_(location, SingleSubstBuilder) + sub.mapping.update(mapping) + chain.rules.append( + ChainContextualRule(prefix, [list(mapping.keys())], suffix, [sub]) + ) + + # GSUB 8 + def add_reverse_chain_single_subst(self, location, old_prefix, old_suffix, mapping): + if not mapping: + raise FeatureLibError("Empty glyph class in substitution", location) + lookup = self.get_lookup_(location, ReverseChainSingleSubstBuilder) + lookup.rules.append((old_prefix, old_suffix, mapping)) + + # GPOS rules + + # GPOS 1 + def add_single_pos(self, location, prefix, suffix, pos, forceChain): + if prefix or suffix or forceChain: + self.add_single_pos_chained_(location, prefix, suffix, pos) + else: + lookup = self.get_lookup_(location, SinglePosBuilder) + for glyphs, value in pos: + if not glyphs: + raise FeatureLibError("Empty glyph class in positioning rule", location) + otValueRecord = self.makeOpenTypeValueRecord(location, value, pairPosContext=False) + for glyph in glyphs: + try: + lookup.add_pos(location, glyph, otValueRecord) + except OpenTypeLibError as e: + raise FeatureLibError(str(e), e.location) from e + + # GPOS 2 + def add_class_pair_pos(self, location, glyphclass1, value1, glyphclass2, value2): + if not glyphclass1 or not glyphclass2: + raise FeatureLibError( + "Empty glyph class in positioning rule", location + ) + lookup = self.get_lookup_(location, PairPosBuilder) + v1 = self.makeOpenTypeValueRecord(location, value1, pairPosContext=True) + v2 = self.makeOpenTypeValueRecord(location, value2, pairPosContext=True) + lookup.addClassPair(location, glyphclass1, v1, glyphclass2, v2) + + def add_specific_pair_pos(self, location, glyph1, value1, glyph2, value2): + if not glyph1 or not glyph2: + raise FeatureLibError("Empty glyph class in positioning rule", location) + lookup = self.get_lookup_(location, PairPosBuilder) + v1 = self.makeOpenTypeValueRecord(location, value1, pairPosContext=True) + v2 = self.makeOpenTypeValueRecord(location, value2, pairPosContext=True) + lookup.addGlyphPair(location, glyph1, v1, glyph2, v2) + + # GPOS 3 + def add_cursive_pos(self, location, glyphclass, entryAnchor, exitAnchor): + if not glyphclass: + raise FeatureLibError("Empty glyph class in positioning rule", location) + lookup = self.get_lookup_(location, CursivePosBuilder) + lookup.add_attachment( + location, + glyphclass, + self.makeOpenTypeAnchor(location, entryAnchor), + self.makeOpenTypeAnchor(location, exitAnchor), + ) + + # GPOS 4 + def add_mark_base_pos(self, location, bases, marks): + builder = self.get_lookup_(location, MarkBasePosBuilder) + self.add_marks_(location, builder, marks) + if not bases: + raise FeatureLibError("Empty glyph class in positioning rule", location) + for baseAnchor, markClass in marks: + otBaseAnchor = self.makeOpenTypeAnchor(location, baseAnchor) + for base in bases: + builder.bases.setdefault(base, {})[markClass.name] = otBaseAnchor + + # GPOS 5 + def add_mark_lig_pos(self, location, ligatures, components): + builder = self.get_lookup_(location, MarkLigPosBuilder) + componentAnchors = [] + if not ligatures: + raise FeatureLibError("Empty glyph class in positioning rule", location) + for marks in components: + anchors = {} + self.add_marks_(location, builder, marks) + for ligAnchor, markClass in marks: + anchors[markClass.name] = self.makeOpenTypeAnchor(location, ligAnchor) + componentAnchors.append(anchors) + for glyph in ligatures: + builder.ligatures[glyph] = componentAnchors + + # GPOS 6 + def add_mark_mark_pos(self, location, baseMarks, marks): + builder = self.get_lookup_(location, MarkMarkPosBuilder) + self.add_marks_(location, builder, marks) + if not baseMarks: + raise FeatureLibError("Empty glyph class in positioning rule", location) + for baseAnchor, markClass in marks: + otBaseAnchor = self.makeOpenTypeAnchor(location, baseAnchor) + for baseMark in baseMarks: + builder.baseMarks.setdefault(baseMark, {})[ + markClass.name + ] = otBaseAnchor + + # GPOS 7/8 + def add_chain_context_pos(self, location, prefix, glyphs, suffix, lookups): + if not all(glyphs) or not all(prefix) or not all(suffix): + raise FeatureLibError("Empty glyph class in contextual positioning rule", location) + lookup = self.get_lookup_(location, ChainContextPosBuilder) + lookup.rules.append( + ChainContextualRule( + prefix, glyphs, suffix, self.find_lookup_builders_(lookups) + ) + ) + + def add_single_pos_chained_(self, location, prefix, suffix, pos): + if not pos or not all(prefix) or not all(suffix): + raise FeatureLibError("Empty glyph class in contextual positioning rule", location) + # https://github.com/fonttools/fonttools/issues/514 + chain = self.get_lookup_(location, ChainContextPosBuilder) + targets = [] + for _, _, _, lookups in chain.rules: + targets.extend(lookups) + subs = [] + for glyphs, value in pos: + if value is None: + subs.append(None) + continue + otValue = self.makeOpenTypeValueRecord(location, value, pairPosContext=False) + sub = chain.find_chainable_single_pos(targets, glyphs, otValue) + if sub is None: + sub = self.get_chained_lookup_(location, SinglePosBuilder) + targets.append(sub) + for glyph in glyphs: + sub.add_pos(location, glyph, otValue) + subs.append(sub) + assert len(pos) == len(subs), (pos, subs) + chain.rules.append( + ChainContextualRule(prefix, [g for g, v in pos], suffix, subs) + ) + + def add_marks_(self, location, lookupBuilder, marks): + """Helper for add_mark_{base,liga,mark}_pos.""" + for _, markClass in marks: + for markClassDef in markClass.definitions: + for mark in markClassDef.glyphs.glyphSet(): + if mark not in lookupBuilder.marks: + otMarkAnchor = self.makeOpenTypeAnchor(location, markClassDef.anchor) + lookupBuilder.marks[mark] = (markClass.name, otMarkAnchor) + else: + existingMarkClass = lookupBuilder.marks[mark][0] + if markClass.name != existingMarkClass: + raise FeatureLibError( + "Glyph %s cannot be in both @%s and @%s" + % (mark, existingMarkClass, markClass.name), + location, + ) + + def add_subtable_break(self, location): + self.cur_lookup_.add_subtable_break(location) + + def setGlyphClass_(self, location, glyph, glyphClass): + oldClass, oldLocation = self.glyphClassDefs_.get(glyph, (None, None)) + if oldClass and oldClass != glyphClass: + raise FeatureLibError( + "Glyph %s was assigned to a different class at %s" + % (glyph, oldLocation), + location, + ) + self.glyphClassDefs_[glyph] = (glyphClass, location) + + def add_glyphClassDef( + self, location, baseGlyphs, ligatureGlyphs, markGlyphs, componentGlyphs + ): + for glyph in baseGlyphs: + self.setGlyphClass_(location, glyph, 1) + for glyph in ligatureGlyphs: + self.setGlyphClass_(location, glyph, 2) + for glyph in markGlyphs: + self.setGlyphClass_(location, glyph, 3) + for glyph in componentGlyphs: + self.setGlyphClass_(location, glyph, 4) + + def add_ligatureCaretByIndex_(self, location, glyphs, carets): + for glyph in glyphs: + if glyph not in self.ligCaretPoints_: + self.ligCaretPoints_[glyph] = carets + + def add_ligatureCaretByPos_(self, location, glyphs, carets): + for glyph in glyphs: + if glyph not in self.ligCaretCoords_: + self.ligCaretCoords_[glyph] = carets + + def add_name_record(self, location, nameID, platformID, platEncID, langID, string): + self.names_.append([nameID, platformID, platEncID, langID, string]) + + def add_os2_field(self, key, value): + self.os2_[key] = value + + def add_hhea_field(self, key, value): + self.hhea_[key] = value + + def add_vhea_field(self, key, value): + self.vhea_[key] = value + + def add_conditionset(self, key, value): + if not "fvar" in self.font: + raise FeatureLibError( + "Cannot add feature variations to a font without an 'fvar' table" + ) + + # Normalize + axisMap = { + axis.axisTag: (axis.minValue, axis.defaultValue, axis.maxValue) + for axis in self.axes + } + + value = { + tag: ( + normalizeValue(bottom, axisMap[tag]), + normalizeValue(top, axisMap[tag]), + ) + for tag, (bottom, top) in value.items() + } + + self.conditionsets_[key] = value + + def makeOpenTypeAnchor(self, location, anchor): + """ast.Anchor --> otTables.Anchor""" + if anchor is None: + return None + variable = False + deviceX, deviceY = None, None + if anchor.xDeviceTable is not None: + deviceX = otl.buildDevice(dict(anchor.xDeviceTable)) + if anchor.yDeviceTable is not None: + deviceY = otl.buildDevice(dict(anchor.yDeviceTable)) + for dim in ("x", "y"): + if not isinstance(getattr(anchor, dim), VariableScalar): + continue + if getattr(anchor, dim+"DeviceTable") is not None: + raise FeatureLibError("Can't define a device coordinate and variable scalar", location) + if not self.varstorebuilder: + raise FeatureLibError("Can't define a variable scalar in a non-variable font", location) + varscalar = getattr(anchor,dim) + varscalar.axes = self.axes + default, index = varscalar.add_to_variation_store(self.varstorebuilder) + setattr(anchor, dim, default) + if index is not None and index != 0xFFFFFFFF: + if dim == "x": + deviceX = buildVarDevTable(index) + else: + deviceY = buildVarDevTable(index) + variable = True + + otlanchor = otl.buildAnchor(anchor.x, anchor.y, anchor.contourpoint, deviceX, deviceY) + if variable: + otlanchor.Format = 3 + return otlanchor + + _VALUEREC_ATTRS = { + name[0].lower() + name[1:]: (name, isDevice) + for _, name, isDevice, _ in otBase.valueRecordFormat + if not name.startswith("Reserved") + } + + + def makeOpenTypeValueRecord(self, location, v, pairPosContext): + """ast.ValueRecord --> otBase.ValueRecord""" + if not v: + return None + + vr = {} + variable = False + for astName, (otName, isDevice) in self._VALUEREC_ATTRS.items(): + val = getattr(v, astName, None) + if not val: + continue + if isDevice: + vr[otName] = otl.buildDevice(dict(val)) + elif isinstance(val, VariableScalar): + otDeviceName = otName[0:4] + "Device" + feaDeviceName = otDeviceName[0].lower() + otDeviceName[1:] + if getattr(v, feaDeviceName): + raise FeatureLibError("Can't define a device coordinate and variable scalar", location) + if not self.varstorebuilder: + raise FeatureLibError("Can't define a variable scalar in a non-variable font", location) + val.axes = self.axes + default, index = val.add_to_variation_store(self.varstorebuilder) + vr[otName] = default + if index is not None and index != 0xFFFFFFFF: + vr[otDeviceName] = buildVarDevTable(index) + variable = True + else: + vr[otName] = val + + if pairPosContext and not vr: + vr = {"YAdvance": 0} if v.vertical else {"XAdvance": 0} + valRec = otl.buildValue(vr) + return valRec diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/error.py b/.venv/lib/python3.9/site-packages/fontTools/feaLib/error.py new file mode 100644 index 00000000..a2c5f9db --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/feaLib/error.py @@ -0,0 +1,22 @@ +class FeatureLibError(Exception): + def __init__(self, message, location): + Exception.__init__(self, message) + self.location = location + + def __str__(self): + message = Exception.__str__(self) + if self.location: + return f"{self.location}: {message}" + else: + return message + + +class IncludedFeaNotFound(FeatureLibError): + def __str__(self): + assert self.location is not None + + message = ( + "The following feature file should be included but cannot be found: " + f"{Exception.__str__(self)}" + ) + return f"{self.location}: {message}" diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/lexer.py b/.venv/lib/python3.9/site-packages/fontTools/feaLib/lexer.py new file mode 100644 index 00000000..140fbd82 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/feaLib/lexer.py @@ -0,0 +1,285 @@ +from fontTools.feaLib.error import FeatureLibError, IncludedFeaNotFound +from fontTools.feaLib.location import FeatureLibLocation +import re +import os + + +class Lexer(object): + NUMBER = "NUMBER" + HEXADECIMAL = "HEXADECIMAL" + OCTAL = "OCTAL" + NUMBERS = (NUMBER, HEXADECIMAL, OCTAL) + FLOAT = "FLOAT" + STRING = "STRING" + NAME = "NAME" + FILENAME = "FILENAME" + GLYPHCLASS = "GLYPHCLASS" + CID = "CID" + SYMBOL = "SYMBOL" + COMMENT = "COMMENT" + NEWLINE = "NEWLINE" + ANONYMOUS_BLOCK = "ANONYMOUS_BLOCK" + + CHAR_WHITESPACE_ = " \t" + CHAR_NEWLINE_ = "\r\n" + CHAR_SYMBOL_ = ",;:-+'{}[]<>()=" + CHAR_DIGIT_ = "0123456789" + CHAR_HEXDIGIT_ = "0123456789ABCDEFabcdef" + CHAR_LETTER_ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + CHAR_NAME_START_ = CHAR_LETTER_ + "_+*:.^~!\\" + CHAR_NAME_CONTINUATION_ = CHAR_LETTER_ + CHAR_DIGIT_ + "_.+*:^~!/-" + + RE_GLYPHCLASS = re.compile(r"^[A-Za-z_0-9.\-]+$") + + MODE_NORMAL_ = "NORMAL" + MODE_FILENAME_ = "FILENAME" + + def __init__(self, text, filename): + self.filename_ = filename + self.line_ = 1 + self.pos_ = 0 + self.line_start_ = 0 + self.text_ = text + self.text_length_ = len(text) + self.mode_ = Lexer.MODE_NORMAL_ + + def __iter__(self): + return self + + def next(self): # Python 2 + return self.__next__() + + def __next__(self): # Python 3 + while True: + token_type, token, location = self.next_() + if token_type != Lexer.NEWLINE: + return (token_type, token, location) + + def location_(self): + column = self.pos_ - self.line_start_ + 1 + return FeatureLibLocation(self.filename_ or "", self.line_, column) + + def next_(self): + self.scan_over_(Lexer.CHAR_WHITESPACE_) + location = self.location_() + start = self.pos_ + text = self.text_ + limit = len(text) + if start >= limit: + raise StopIteration() + cur_char = text[start] + next_char = text[start + 1] if start + 1 < limit else None + + if cur_char == "\n": + self.pos_ += 1 + self.line_ += 1 + self.line_start_ = self.pos_ + return (Lexer.NEWLINE, None, location) + if cur_char == "\r": + self.pos_ += 2 if next_char == "\n" else 1 + self.line_ += 1 + self.line_start_ = self.pos_ + return (Lexer.NEWLINE, None, location) + if cur_char == "#": + self.scan_until_(Lexer.CHAR_NEWLINE_) + return (Lexer.COMMENT, text[start : self.pos_], location) + + if self.mode_ is Lexer.MODE_FILENAME_: + if cur_char != "(": + raise FeatureLibError("Expected '(' before file name", location) + self.scan_until_(")") + cur_char = text[self.pos_] if self.pos_ < limit else None + if cur_char != ")": + raise FeatureLibError("Expected ')' after file name", location) + self.pos_ += 1 + self.mode_ = Lexer.MODE_NORMAL_ + return (Lexer.FILENAME, text[start + 1 : self.pos_ - 1], location) + + if cur_char == "\\" and next_char in Lexer.CHAR_DIGIT_: + self.pos_ += 1 + self.scan_over_(Lexer.CHAR_DIGIT_) + return (Lexer.CID, int(text[start + 1 : self.pos_], 10), location) + if cur_char == "@": + self.pos_ += 1 + self.scan_over_(Lexer.CHAR_NAME_CONTINUATION_) + glyphclass = text[start + 1 : self.pos_] + if len(glyphclass) < 1: + raise FeatureLibError("Expected glyph class name", location) + if len(glyphclass) > 63: + raise FeatureLibError( + "Glyph class names must not be longer than 63 characters", location + ) + if not Lexer.RE_GLYPHCLASS.match(glyphclass): + raise FeatureLibError( + "Glyph class names must consist of letters, digits, " + "underscore, period or hyphen", + location, + ) + return (Lexer.GLYPHCLASS, glyphclass, location) + if cur_char in Lexer.CHAR_NAME_START_: + self.pos_ += 1 + self.scan_over_(Lexer.CHAR_NAME_CONTINUATION_) + token = text[start : self.pos_] + if token == "include": + self.mode_ = Lexer.MODE_FILENAME_ + return (Lexer.NAME, token, location) + if cur_char == "0" and next_char in "xX": + self.pos_ += 2 + self.scan_over_(Lexer.CHAR_HEXDIGIT_) + return (Lexer.HEXADECIMAL, int(text[start : self.pos_], 16), location) + if cur_char == "0" and next_char in Lexer.CHAR_DIGIT_: + self.scan_over_(Lexer.CHAR_DIGIT_) + return (Lexer.OCTAL, int(text[start : self.pos_], 8), location) + if cur_char in Lexer.CHAR_DIGIT_: + self.scan_over_(Lexer.CHAR_DIGIT_) + if self.pos_ >= limit or text[self.pos_] != ".": + return (Lexer.NUMBER, int(text[start : self.pos_], 10), location) + self.scan_over_(".") + self.scan_over_(Lexer.CHAR_DIGIT_) + return (Lexer.FLOAT, float(text[start : self.pos_]), location) + if cur_char == "-" and next_char in Lexer.CHAR_DIGIT_: + self.pos_ += 1 + self.scan_over_(Lexer.CHAR_DIGIT_) + if self.pos_ >= limit or text[self.pos_] != ".": + return (Lexer.NUMBER, int(text[start : self.pos_], 10), location) + self.scan_over_(".") + self.scan_over_(Lexer.CHAR_DIGIT_) + return (Lexer.FLOAT, float(text[start : self.pos_]), location) + if cur_char in Lexer.CHAR_SYMBOL_: + self.pos_ += 1 + return (Lexer.SYMBOL, cur_char, location) + if cur_char == '"': + self.pos_ += 1 + self.scan_until_('"') + if self.pos_ < self.text_length_ and self.text_[self.pos_] == '"': + self.pos_ += 1 + # strip newlines embedded within a string + string = re.sub("[\r\n]", "", text[start + 1 : self.pos_ - 1]) + return (Lexer.STRING, string, location) + else: + raise FeatureLibError("Expected '\"' to terminate string", location) + raise FeatureLibError("Unexpected character: %r" % cur_char, location) + + def scan_over_(self, valid): + p = self.pos_ + while p < self.text_length_ and self.text_[p] in valid: + p += 1 + self.pos_ = p + + def scan_until_(self, stop_at): + p = self.pos_ + while p < self.text_length_ and self.text_[p] not in stop_at: + p += 1 + self.pos_ = p + + def scan_anonymous_block(self, tag): + location = self.location_() + tag = tag.strip() + self.scan_until_(Lexer.CHAR_NEWLINE_) + self.scan_over_(Lexer.CHAR_NEWLINE_) + regexp = r"}\s*" + tag + r"\s*;" + split = re.split(regexp, self.text_[self.pos_ :], maxsplit=1) + if len(split) != 2: + raise FeatureLibError( + "Expected '} %s;' to terminate anonymous block" % tag, location + ) + self.pos_ += len(split[0]) + return (Lexer.ANONYMOUS_BLOCK, split[0], location) + + +class IncludingLexer(object): + """A Lexer that follows include statements. + + The OpenType feature file specification states that due to + historical reasons, relative imports should be resolved in this + order: + + 1. If the source font is UFO format, then relative to the UFO's + font directory + 2. relative to the top-level include file + 3. relative to the parent include file + + We only support 1 (via includeDir) and 2. + """ + + def __init__(self, featurefile, *, includeDir=None): + """Initializes an IncludingLexer. + + Behavior: + If includeDir is passed, it will be used to determine the top-level + include directory to use for all encountered include statements. If it is + not passed, ``os.path.dirname(featurefile)`` will be considered the + include directory. + """ + + self.lexers_ = [self.make_lexer_(featurefile)] + self.featurefilepath = self.lexers_[0].filename_ + self.includeDir = includeDir + + def __iter__(self): + return self + + def next(self): # Python 2 + return self.__next__() + + def __next__(self): # Python 3 + while self.lexers_: + lexer = self.lexers_[-1] + try: + token_type, token, location = next(lexer) + except StopIteration: + self.lexers_.pop() + continue + if token_type is Lexer.NAME and token == "include": + fname_type, fname_token, fname_location = lexer.next() + if fname_type is not Lexer.FILENAME: + raise FeatureLibError("Expected file name", fname_location) + # semi_type, semi_token, semi_location = lexer.next() + # if semi_type is not Lexer.SYMBOL or semi_token != ";": + # raise FeatureLibError("Expected ';'", semi_location) + if os.path.isabs(fname_token): + path = fname_token + else: + if self.includeDir is not None: + curpath = self.includeDir + elif self.featurefilepath is not None: + curpath = os.path.dirname(self.featurefilepath) + else: + # if the IncludingLexer was initialized from an in-memory + # file-like stream, it doesn't have a 'name' pointing to + # its filesystem path, therefore we fall back to using the + # current working directory to resolve relative includes + curpath = os.getcwd() + path = os.path.join(curpath, fname_token) + if len(self.lexers_) >= 5: + raise FeatureLibError("Too many recursive includes", fname_location) + try: + self.lexers_.append(self.make_lexer_(path)) + except FileNotFoundError as err: + raise IncludedFeaNotFound(fname_token, fname_location) from err + else: + return (token_type, token, location) + raise StopIteration() + + @staticmethod + def make_lexer_(file_or_path): + if hasattr(file_or_path, "read"): + fileobj, closing = file_or_path, False + else: + filename, closing = file_or_path, True + fileobj = open(filename, "r", encoding="utf-8") + data = fileobj.read() + filename = getattr(fileobj, "name", None) + if closing: + fileobj.close() + return Lexer(data, filename) + + def scan_anonymous_block(self, tag): + return self.lexers_[-1].scan_anonymous_block(tag) + + +class NonIncludingLexer(IncludingLexer): + """Lexer that does not follow `include` statements, emits them as-is.""" + + def __next__(self): # Python 3 + return next(self.lexers_[0]) diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/location.py b/.venv/lib/python3.9/site-packages/fontTools/feaLib/location.py new file mode 100644 index 00000000..50f761d2 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/feaLib/location.py @@ -0,0 +1,12 @@ +from typing import NamedTuple + + +class FeatureLibLocation(NamedTuple): + """A location in a feature file""" + + file: str + line: int + column: int + + def __str__(self): + return f"{self.file}:{self.line}:{self.column}" diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/lookupDebugInfo.py b/.venv/lib/python3.9/site-packages/fontTools/feaLib/lookupDebugInfo.py new file mode 100644 index 00000000..876cadff --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/feaLib/lookupDebugInfo.py @@ -0,0 +1,11 @@ +from typing import NamedTuple + +LOOKUP_DEBUG_INFO_KEY = "com.github.fonttools.feaLib" +LOOKUP_DEBUG_ENV_VAR = "FONTTOOLS_LOOKUP_DEBUGGING" + +class LookupDebugInfo(NamedTuple): + """Information about where a lookup came from, to be embedded in a font""" + + location: str + name: str + feature: list diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/parser.py b/.venv/lib/python3.9/site-packages/fontTools/feaLib/parser.py new file mode 100644 index 00000000..fd53573d --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/feaLib/parser.py @@ -0,0 +1,2356 @@ +from fontTools.feaLib.error import FeatureLibError +from fontTools.feaLib.lexer import Lexer, IncludingLexer, NonIncludingLexer +from fontTools.feaLib.variableScalar import VariableScalar +from fontTools.misc.encodingTools import getEncoding +from fontTools.misc.textTools import bytechr, tobytes, tostr +import fontTools.feaLib.ast as ast +import logging +import os +import re + + +log = logging.getLogger(__name__) + + +class Parser(object): + """Initializes a Parser object. + + Example: + + .. code:: python + + from fontTools.feaLib.parser import Parser + parser = Parser(file, font.getReverseGlyphMap()) + parsetree = parser.parse() + + Note: the ``glyphNames`` iterable serves a double role to help distinguish + glyph names from ranges in the presence of hyphens and to ensure that glyph + names referenced in a feature file are actually part of a font's glyph set. + If the iterable is left empty, no glyph name in glyph set checking takes + place, and all glyph tokens containing hyphens are treated as literal glyph + names, not as ranges. (Adding a space around the hyphen can, in any case, + help to disambiguate ranges from glyph names containing hyphens.) + + By default, the parser will follow ``include()`` statements in the feature + file. To turn this off, pass ``followIncludes=False``. Pass a directory string as + ``includeDir`` to explicitly declare a directory to search included feature files + in. + """ + + extensions = {} + ast = ast + SS_FEATURE_TAGS = {"ss%02d" % i for i in range(1, 20 + 1)} + CV_FEATURE_TAGS = {"cv%02d" % i for i in range(1, 99 + 1)} + + def __init__( + self, featurefile, glyphNames=(), followIncludes=True, includeDir=None, **kwargs + ): + + if "glyphMap" in kwargs: + from fontTools.misc.loggingTools import deprecateArgument + + deprecateArgument("glyphMap", "use 'glyphNames' (iterable) instead") + if glyphNames: + raise TypeError( + "'glyphNames' and (deprecated) 'glyphMap' are " "mutually exclusive" + ) + glyphNames = kwargs.pop("glyphMap") + if kwargs: + raise TypeError( + "unsupported keyword argument%s: %s" + % ("" if len(kwargs) == 1 else "s", ", ".join(repr(k) for k in kwargs)) + ) + + self.glyphNames_ = set(glyphNames) + self.doc_ = self.ast.FeatureFile() + self.anchors_ = SymbolTable() + self.glyphclasses_ = SymbolTable() + self.lookups_ = SymbolTable() + self.valuerecords_ = SymbolTable() + self.symbol_tables_ = {self.anchors_, self.valuerecords_} + self.next_token_type_, self.next_token_ = (None, None) + self.cur_comments_ = [] + self.next_token_location_ = None + lexerClass = IncludingLexer if followIncludes else NonIncludingLexer + self.lexer_ = lexerClass(featurefile, includeDir=includeDir) + self.advance_lexer_(comments=True) + + def parse(self): + """Parse the file, and return a :class:`fontTools.feaLib.ast.FeatureFile` + object representing the root of the abstract syntax tree containing the + parsed contents of the file.""" + statements = self.doc_.statements + while self.next_token_type_ is not None or self.cur_comments_: + self.advance_lexer_(comments=True) + if self.cur_token_type_ is Lexer.COMMENT: + statements.append( + self.ast.Comment(self.cur_token_, location=self.cur_token_location_) + ) + elif self.is_cur_keyword_("include"): + statements.append(self.parse_include_()) + elif self.cur_token_type_ is Lexer.GLYPHCLASS: + statements.append(self.parse_glyphclass_definition_()) + elif self.is_cur_keyword_(("anon", "anonymous")): + statements.append(self.parse_anonymous_()) + elif self.is_cur_keyword_("anchorDef"): + statements.append(self.parse_anchordef_()) + elif self.is_cur_keyword_("languagesystem"): + statements.append(self.parse_languagesystem_()) + elif self.is_cur_keyword_("lookup"): + statements.append(self.parse_lookup_(vertical=False)) + elif self.is_cur_keyword_("markClass"): + statements.append(self.parse_markClass_()) + elif self.is_cur_keyword_("feature"): + statements.append(self.parse_feature_block_()) + elif self.is_cur_keyword_("conditionset"): + statements.append(self.parse_conditionset_()) + elif self.is_cur_keyword_("variation"): + statements.append(self.parse_feature_block_(variation=True)) + elif self.is_cur_keyword_("table"): + statements.append(self.parse_table_()) + elif self.is_cur_keyword_("valueRecordDef"): + statements.append(self.parse_valuerecord_definition_(vertical=False)) + elif ( + self.cur_token_type_ is Lexer.NAME + and self.cur_token_ in self.extensions + ): + statements.append(self.extensions[self.cur_token_](self)) + elif self.cur_token_type_ is Lexer.SYMBOL and self.cur_token_ == ";": + continue + else: + raise FeatureLibError( + "Expected feature, languagesystem, lookup, markClass, " + 'table, or glyph class definition, got {} "{}"'.format( + self.cur_token_type_, self.cur_token_ + ), + self.cur_token_location_, + ) + return self.doc_ + + def parse_anchor_(self): + # Parses an anchor in any of the four formats given in the feature + # file specification (2.e.vii). + self.expect_symbol_("<") + self.expect_keyword_("anchor") + location = self.cur_token_location_ + + if self.next_token_ == "NULL": # Format D + self.expect_keyword_("NULL") + self.expect_symbol_(">") + return None + + if self.next_token_type_ == Lexer.NAME: # Format E + name = self.expect_name_() + anchordef = self.anchors_.resolve(name) + if anchordef is None: + raise FeatureLibError( + 'Unknown anchor "%s"' % name, self.cur_token_location_ + ) + self.expect_symbol_(">") + return self.ast.Anchor( + anchordef.x, + anchordef.y, + name=name, + contourpoint=anchordef.contourpoint, + xDeviceTable=None, + yDeviceTable=None, + location=location, + ) + + x, y = self.expect_number_(variable=True), self.expect_number_(variable=True) + + contourpoint = None + if self.next_token_ == "contourpoint": # Format B + self.expect_keyword_("contourpoint") + contourpoint = self.expect_number_() + + if self.next_token_ == "<": # Format C + xDeviceTable = self.parse_device_() + yDeviceTable = self.parse_device_() + else: + xDeviceTable, yDeviceTable = None, None + + self.expect_symbol_(">") + return self.ast.Anchor( + x, + y, + name=None, + contourpoint=contourpoint, + xDeviceTable=xDeviceTable, + yDeviceTable=yDeviceTable, + location=location, + ) + + def parse_anchor_marks_(self): + # Parses a sequence of ``[ mark @MARKCLASS]*.`` + anchorMarks = [] # [(self.ast.Anchor, markClassName)*] + while self.next_token_ == "<": + anchor = self.parse_anchor_() + if anchor is None and self.next_token_ != "mark": + continue # without mark, eg. in GPOS type 5 + self.expect_keyword_("mark") + markClass = self.expect_markClass_reference_() + anchorMarks.append((anchor, markClass)) + return anchorMarks + + def parse_anchordef_(self): + # Parses a named anchor definition (`section 2.e.viii `_). + assert self.is_cur_keyword_("anchorDef") + location = self.cur_token_location_ + x, y = self.expect_number_(), self.expect_number_() + contourpoint = None + if self.next_token_ == "contourpoint": + self.expect_keyword_("contourpoint") + contourpoint = self.expect_number_() + name = self.expect_name_() + self.expect_symbol_(";") + anchordef = self.ast.AnchorDefinition( + name, x, y, contourpoint=contourpoint, location=location + ) + self.anchors_.define(name, anchordef) + return anchordef + + def parse_anonymous_(self): + # Parses an anonymous data block (`section 10 `_). + assert self.is_cur_keyword_(("anon", "anonymous")) + tag = self.expect_tag_() + _, content, location = self.lexer_.scan_anonymous_block(tag) + self.advance_lexer_() + self.expect_symbol_("}") + end_tag = self.expect_tag_() + assert tag == end_tag, "bad splitting in Lexer.scan_anonymous_block()" + self.expect_symbol_(";") + return self.ast.AnonymousBlock(tag, content, location=location) + + def parse_attach_(self): + # Parses a GDEF Attach statement (`section 9.b `_) + assert self.is_cur_keyword_("Attach") + location = self.cur_token_location_ + glyphs = self.parse_glyphclass_(accept_glyphname=True) + contourPoints = {self.expect_number_()} + while self.next_token_ != ";": + contourPoints.add(self.expect_number_()) + self.expect_symbol_(";") + return self.ast.AttachStatement(glyphs, contourPoints, location=location) + + def parse_enumerate_(self, vertical): + # Parse an enumerated pair positioning rule (`section 6.b.ii `_). + assert self.cur_token_ in {"enumerate", "enum"} + self.advance_lexer_() + return self.parse_position_(enumerated=True, vertical=vertical) + + def parse_GlyphClassDef_(self): + # Parses 'GlyphClassDef @BASE, @LIGATURES, @MARKS, @COMPONENTS;' + assert self.is_cur_keyword_("GlyphClassDef") + location = self.cur_token_location_ + if self.next_token_ != ",": + baseGlyphs = self.parse_glyphclass_(accept_glyphname=False) + else: + baseGlyphs = None + self.expect_symbol_(",") + if self.next_token_ != ",": + ligatureGlyphs = self.parse_glyphclass_(accept_glyphname=False) + else: + ligatureGlyphs = None + self.expect_symbol_(",") + if self.next_token_ != ",": + markGlyphs = self.parse_glyphclass_(accept_glyphname=False) + else: + markGlyphs = None + self.expect_symbol_(",") + if self.next_token_ != ";": + componentGlyphs = self.parse_glyphclass_(accept_glyphname=False) + else: + componentGlyphs = None + self.expect_symbol_(";") + return self.ast.GlyphClassDefStatement( + baseGlyphs, markGlyphs, ligatureGlyphs, componentGlyphs, location=location + ) + + def parse_glyphclass_definition_(self): + # Parses glyph class definitions such as '@UPPERCASE = [A-Z];' + location, name = self.cur_token_location_, self.cur_token_ + self.expect_symbol_("=") + glyphs = self.parse_glyphclass_(accept_glyphname=False) + self.expect_symbol_(";") + glyphclass = self.ast.GlyphClassDefinition(name, glyphs, location=location) + self.glyphclasses_.define(name, glyphclass) + return glyphclass + + def split_glyph_range_(self, name, location): + # Since v1.20, the OpenType Feature File specification allows + # for dashes in glyph names. A sequence like "a-b-c-d" could + # therefore mean a single glyph whose name happens to be + # "a-b-c-d", or it could mean a range from glyph "a" to glyph + # "b-c-d", or a range from glyph "a-b" to glyph "c-d", or a + # range from glyph "a-b-c" to glyph "d".Technically, this + # example could be resolved because the (pretty complex) + # definition of glyph ranges renders most of these splits + # invalid. But the specification does not say that a compiler + # should try to apply such fancy heuristics. To encourage + # unambiguous feature files, we therefore try all possible + # splits and reject the feature file if there are multiple + # splits possible. It is intentional that we don't just emit a + # warning; warnings tend to get ignored. To fix the problem, + # font designers can trivially add spaces around the intended + # split point, and we emit a compiler error that suggests + # how exactly the source should be rewritten to make things + # unambiguous. + parts = name.split("-") + solutions = [] + for i in range(len(parts)): + start, limit = "-".join(parts[0:i]), "-".join(parts[i:]) + if start in self.glyphNames_ and limit in self.glyphNames_: + solutions.append((start, limit)) + if len(solutions) == 1: + start, limit = solutions[0] + return start, limit + elif len(solutions) == 0: + raise FeatureLibError( + '"%s" is not a glyph in the font, and it can not be split ' + "into a range of known glyphs" % name, + location, + ) + else: + ranges = " or ".join(['"%s - %s"' % (s, l) for s, l in solutions]) + raise FeatureLibError( + 'Ambiguous glyph range "%s"; ' + "please use %s to clarify what you mean" % (name, ranges), + location, + ) + + def parse_glyphclass_(self, accept_glyphname, accept_null=False): + # Parses a glyph class, either named or anonymous, or (if + # ``bool(accept_glyphname)``) a glyph name. If ``bool(accept_null)`` then + # also accept the special NULL glyph. + if accept_glyphname and self.next_token_type_ in (Lexer.NAME, Lexer.CID): + if accept_null and self.next_token_ == "NULL": + # If you want a glyph called NULL, you should escape it. + self.advance_lexer_() + return self.ast.NullGlyph(location=self.cur_token_location_) + glyph = self.expect_glyph_() + self.check_glyph_name_in_glyph_set(glyph) + return self.ast.GlyphName(glyph, location=self.cur_token_location_) + if self.next_token_type_ is Lexer.GLYPHCLASS: + self.advance_lexer_() + gc = self.glyphclasses_.resolve(self.cur_token_) + if gc is None: + raise FeatureLibError( + "Unknown glyph class @%s" % self.cur_token_, + self.cur_token_location_, + ) + if isinstance(gc, self.ast.MarkClass): + return self.ast.MarkClassName(gc, location=self.cur_token_location_) + else: + return self.ast.GlyphClassName(gc, location=self.cur_token_location_) + + self.expect_symbol_("[") + location = self.cur_token_location_ + glyphs = self.ast.GlyphClass(location=location) + while self.next_token_ != "]": + if self.next_token_type_ is Lexer.NAME: + glyph = self.expect_glyph_() + location = self.cur_token_location_ + if "-" in glyph and self.glyphNames_ and glyph not in self.glyphNames_: + start, limit = self.split_glyph_range_(glyph, location) + self.check_glyph_name_in_glyph_set(start, limit) + glyphs.add_range( + start, limit, self.make_glyph_range_(location, start, limit) + ) + elif self.next_token_ == "-": + start = glyph + self.expect_symbol_("-") + limit = self.expect_glyph_() + self.check_glyph_name_in_glyph_set(start, limit) + glyphs.add_range( + start, limit, self.make_glyph_range_(location, start, limit) + ) + else: + if "-" in glyph and not self.glyphNames_: + log.warning( + str( + FeatureLibError( + f"Ambiguous glyph name that looks like a range: {glyph!r}", + location, + ) + ) + ) + self.check_glyph_name_in_glyph_set(glyph) + glyphs.append(glyph) + elif self.next_token_type_ is Lexer.CID: + glyph = self.expect_glyph_() + if self.next_token_ == "-": + range_location = self.cur_token_location_ + range_start = self.cur_token_ + self.expect_symbol_("-") + range_end = self.expect_cid_() + self.check_glyph_name_in_glyph_set( + f"cid{range_start:05d}", f"cid{range_end:05d}", + ) + glyphs.add_cid_range( + range_start, + range_end, + self.make_cid_range_(range_location, range_start, range_end), + ) + else: + glyph_name = f"cid{self.cur_token_:05d}" + self.check_glyph_name_in_glyph_set(glyph_name) + glyphs.append(glyph_name) + elif self.next_token_type_ is Lexer.GLYPHCLASS: + self.advance_lexer_() + gc = self.glyphclasses_.resolve(self.cur_token_) + if gc is None: + raise FeatureLibError( + "Unknown glyph class @%s" % self.cur_token_, + self.cur_token_location_, + ) + if isinstance(gc, self.ast.MarkClass): + gc = self.ast.MarkClassName(gc, location=self.cur_token_location_) + else: + gc = self.ast.GlyphClassName(gc, location=self.cur_token_location_) + glyphs.add_class(gc) + else: + raise FeatureLibError( + "Expected glyph name, glyph range, " + f"or glyph class reference, found {self.next_token_!r}", + self.next_token_location_, + ) + self.expect_symbol_("]") + return glyphs + + def parse_glyph_pattern_(self, vertical): + # Parses a glyph pattern, including lookups and context, e.g.:: + # + # a b + # a b c' d e + # a b c' lookup ChangeC d e + prefix, glyphs, lookups, values, suffix = ([], [], [], [], []) + hasMarks = False + while self.next_token_ not in {"by", "from", ";", ","}: + gc = self.parse_glyphclass_(accept_glyphname=True) + marked = False + if self.next_token_ == "'": + self.expect_symbol_("'") + hasMarks = marked = True + if marked: + if suffix: + # makeotf also reports this as an error, while FontForge + # silently inserts ' in all the intervening glyphs. + # https://github.com/fonttools/fonttools/pull/1096 + raise FeatureLibError( + "Unsupported contextual target sequence: at most " + "one run of marked (') glyph/class names allowed", + self.cur_token_location_, + ) + glyphs.append(gc) + elif glyphs: + suffix.append(gc) + else: + prefix.append(gc) + + if self.is_next_value_(): + values.append(self.parse_valuerecord_(vertical)) + else: + values.append(None) + + lookuplist = None + while self.next_token_ == "lookup": + if lookuplist is None: + lookuplist = [] + self.expect_keyword_("lookup") + if not marked: + raise FeatureLibError( + "Lookups can only follow marked glyphs", + self.cur_token_location_, + ) + lookup_name = self.expect_name_() + lookup = self.lookups_.resolve(lookup_name) + if lookup is None: + raise FeatureLibError( + 'Unknown lookup "%s"' % lookup_name, self.cur_token_location_ + ) + lookuplist.append(lookup) + if marked: + lookups.append(lookuplist) + + if not glyphs and not suffix: # eg., "sub f f i by" + assert lookups == [] + return ([], prefix, [None] * len(prefix), values, [], hasMarks) + else: + if any(values[: len(prefix)]): + raise FeatureLibError( + "Positioning cannot be applied in the bactrack glyph sequence, " + "before the marked glyph sequence.", + self.cur_token_location_, + ) + marked_values = values[len(prefix) : len(prefix) + len(glyphs)] + if any(marked_values): + if any(values[len(prefix) + len(glyphs) :]): + raise FeatureLibError( + "Positioning values are allowed only in the marked glyph " + "sequence, or after the final glyph node when only one glyph " + "node is marked.", + self.cur_token_location_, + ) + values = marked_values + elif values and values[-1]: + if len(glyphs) > 1 or any(values[:-1]): + raise FeatureLibError( + "Positioning values are allowed only in the marked glyph " + "sequence, or after the final glyph node when only one glyph " + "node is marked.", + self.cur_token_location_, + ) + values = values[-1:] + elif any(values): + raise FeatureLibError( + "Positioning values are allowed only in the marked glyph " + "sequence, or after the final glyph node when only one glyph " + "node is marked.", + self.cur_token_location_, + ) + return (prefix, glyphs, lookups, values, suffix, hasMarks) + + def parse_chain_context_(self): + location = self.cur_token_location_ + prefix, glyphs, lookups, values, suffix, hasMarks = self.parse_glyph_pattern_( + vertical=False + ) + chainContext = [(prefix, glyphs, suffix)] + hasLookups = any(lookups) + while self.next_token_ == ",": + self.expect_symbol_(",") + ( + prefix, + glyphs, + lookups, + values, + suffix, + hasMarks, + ) = self.parse_glyph_pattern_(vertical=False) + chainContext.append((prefix, glyphs, suffix)) + hasLookups = hasLookups or any(lookups) + self.expect_symbol_(";") + return chainContext, hasLookups + + def parse_ignore_(self): + # Parses an ignore sub/pos rule. + assert self.is_cur_keyword_("ignore") + location = self.cur_token_location_ + self.advance_lexer_() + if self.cur_token_ in ["substitute", "sub"]: + chainContext, hasLookups = self.parse_chain_context_() + if hasLookups: + raise FeatureLibError( + 'No lookups can be specified for "ignore sub"', location + ) + return self.ast.IgnoreSubstStatement(chainContext, location=location) + if self.cur_token_ in ["position", "pos"]: + chainContext, hasLookups = self.parse_chain_context_() + if hasLookups: + raise FeatureLibError( + 'No lookups can be specified for "ignore pos"', location + ) + return self.ast.IgnorePosStatement(chainContext, location=location) + raise FeatureLibError( + 'Expected "substitute" or "position"', self.cur_token_location_ + ) + + def parse_include_(self): + assert self.cur_token_ == "include" + location = self.cur_token_location_ + filename = self.expect_filename_() + # self.expect_symbol_(";") + return ast.IncludeStatement(filename, location=location) + + def parse_language_(self): + assert self.is_cur_keyword_("language") + location = self.cur_token_location_ + language = self.expect_language_tag_() + include_default, required = (True, False) + if self.next_token_ in {"exclude_dflt", "include_dflt"}: + include_default = self.expect_name_() == "include_dflt" + if self.next_token_ == "required": + self.expect_keyword_("required") + required = True + self.expect_symbol_(";") + return self.ast.LanguageStatement( + language, include_default, required, location=location + ) + + def parse_ligatureCaretByIndex_(self): + assert self.is_cur_keyword_("LigatureCaretByIndex") + location = self.cur_token_location_ + glyphs = self.parse_glyphclass_(accept_glyphname=True) + carets = [self.expect_number_()] + while self.next_token_ != ";": + carets.append(self.expect_number_()) + self.expect_symbol_(";") + return self.ast.LigatureCaretByIndexStatement(glyphs, carets, location=location) + + def parse_ligatureCaretByPos_(self): + assert self.is_cur_keyword_("LigatureCaretByPos") + location = self.cur_token_location_ + glyphs = self.parse_glyphclass_(accept_glyphname=True) + carets = [self.expect_number_()] + while self.next_token_ != ";": + carets.append(self.expect_number_()) + self.expect_symbol_(";") + return self.ast.LigatureCaretByPosStatement(glyphs, carets, location=location) + + def parse_lookup_(self, vertical): + # Parses a ``lookup`` - either a lookup block, or a lookup reference + # inside a feature. + assert self.is_cur_keyword_("lookup") + location, name = self.cur_token_location_, self.expect_name_() + + if self.next_token_ == ";": + lookup = self.lookups_.resolve(name) + if lookup is None: + raise FeatureLibError( + 'Unknown lookup "%s"' % name, self.cur_token_location_ + ) + self.expect_symbol_(";") + return self.ast.LookupReferenceStatement(lookup, location=location) + + use_extension = False + if self.next_token_ == "useExtension": + self.expect_keyword_("useExtension") + use_extension = True + + block = self.ast.LookupBlock(name, use_extension, location=location) + self.parse_block_(block, vertical) + self.lookups_.define(name, block) + return block + + def parse_lookupflag_(self): + # Parses a ``lookupflag`` statement, either specified by number or + # in words. + assert self.is_cur_keyword_("lookupflag") + location = self.cur_token_location_ + + # format B: "lookupflag 6;" + if self.next_token_type_ == Lexer.NUMBER: + value = self.expect_number_() + self.expect_symbol_(";") + return self.ast.LookupFlagStatement(value, location=location) + + # format A: "lookupflag RightToLeft MarkAttachmentType @M;" + value_seen = False + value, markAttachment, markFilteringSet = 0, None, None + flags = { + "RightToLeft": 1, + "IgnoreBaseGlyphs": 2, + "IgnoreLigatures": 4, + "IgnoreMarks": 8, + } + seen = set() + while self.next_token_ != ";": + if self.next_token_ in seen: + raise FeatureLibError( + "%s can be specified only once" % self.next_token_, + self.next_token_location_, + ) + seen.add(self.next_token_) + if self.next_token_ == "MarkAttachmentType": + self.expect_keyword_("MarkAttachmentType") + markAttachment = self.parse_glyphclass_(accept_glyphname=False) + elif self.next_token_ == "UseMarkFilteringSet": + self.expect_keyword_("UseMarkFilteringSet") + markFilteringSet = self.parse_glyphclass_(accept_glyphname=False) + elif self.next_token_ in flags: + value_seen = True + value = value | flags[self.expect_name_()] + else: + raise FeatureLibError( + '"%s" is not a recognized lookupflag' % self.next_token_, + self.next_token_location_, + ) + self.expect_symbol_(";") + + if not any([value_seen, markAttachment, markFilteringSet]): + raise FeatureLibError( + "lookupflag must have a value", self.next_token_location_ + ) + + return self.ast.LookupFlagStatement( + value, + markAttachment=markAttachment, + markFilteringSet=markFilteringSet, + location=location, + ) + + def parse_markClass_(self): + assert self.is_cur_keyword_("markClass") + location = self.cur_token_location_ + glyphs = self.parse_glyphclass_(accept_glyphname=True) + if not glyphs.glyphSet(): + raise FeatureLibError("Empty glyph class in mark class definition", location) + anchor = self.parse_anchor_() + name = self.expect_class_name_() + self.expect_symbol_(";") + markClass = self.doc_.markClasses.get(name) + if markClass is None: + markClass = self.ast.MarkClass(name) + self.doc_.markClasses[name] = markClass + self.glyphclasses_.define(name, markClass) + mcdef = self.ast.MarkClassDefinition( + markClass, anchor, glyphs, location=location + ) + markClass.addDefinition(mcdef) + return mcdef + + def parse_position_(self, enumerated, vertical): + assert self.cur_token_ in {"position", "pos"} + if self.next_token_ == "cursive": # GPOS type 3 + return self.parse_position_cursive_(enumerated, vertical) + elif self.next_token_ == "base": # GPOS type 4 + return self.parse_position_base_(enumerated, vertical) + elif self.next_token_ == "ligature": # GPOS type 5 + return self.parse_position_ligature_(enumerated, vertical) + elif self.next_token_ == "mark": # GPOS type 6 + return self.parse_position_mark_(enumerated, vertical) + + location = self.cur_token_location_ + prefix, glyphs, lookups, values, suffix, hasMarks = self.parse_glyph_pattern_( + vertical + ) + self.expect_symbol_(";") + + if any(lookups): + # GPOS type 8: Chaining contextual positioning; explicit lookups + if any(values): + raise FeatureLibError( + 'If "lookup" is present, no values must be specified', location + ) + return self.ast.ChainContextPosStatement( + prefix, glyphs, suffix, lookups, location=location + ) + + # Pair positioning, format A: "pos V 10 A -10;" + # Pair positioning, format B: "pos V A -20;" + if not prefix and not suffix and len(glyphs) == 2 and not hasMarks: + if values[0] is None: # Format B: "pos V A -20;" + values.reverse() + return self.ast.PairPosStatement( + glyphs[0], + values[0], + glyphs[1], + values[1], + enumerated=enumerated, + location=location, + ) + + if enumerated: + raise FeatureLibError( + '"enumerate" is only allowed with pair positionings', location + ) + return self.ast.SinglePosStatement( + list(zip(glyphs, values)), + prefix, + suffix, + forceChain=hasMarks, + location=location, + ) + + def parse_position_cursive_(self, enumerated, vertical): + location = self.cur_token_location_ + self.expect_keyword_("cursive") + if enumerated: + raise FeatureLibError( + '"enumerate" is not allowed with ' "cursive attachment positioning", + location, + ) + glyphclass = self.parse_glyphclass_(accept_glyphname=True) + entryAnchor = self.parse_anchor_() + exitAnchor = self.parse_anchor_() + self.expect_symbol_(";") + return self.ast.CursivePosStatement( + glyphclass, entryAnchor, exitAnchor, location=location + ) + + def parse_position_base_(self, enumerated, vertical): + location = self.cur_token_location_ + self.expect_keyword_("base") + if enumerated: + raise FeatureLibError( + '"enumerate" is not allowed with ' + "mark-to-base attachment positioning", + location, + ) + base = self.parse_glyphclass_(accept_glyphname=True) + marks = self.parse_anchor_marks_() + self.expect_symbol_(";") + return self.ast.MarkBasePosStatement(base, marks, location=location) + + def parse_position_ligature_(self, enumerated, vertical): + location = self.cur_token_location_ + self.expect_keyword_("ligature") + if enumerated: + raise FeatureLibError( + '"enumerate" is not allowed with ' + "mark-to-ligature attachment positioning", + location, + ) + ligatures = self.parse_glyphclass_(accept_glyphname=True) + marks = [self.parse_anchor_marks_()] + while self.next_token_ == "ligComponent": + self.expect_keyword_("ligComponent") + marks.append(self.parse_anchor_marks_()) + self.expect_symbol_(";") + return self.ast.MarkLigPosStatement(ligatures, marks, location=location) + + def parse_position_mark_(self, enumerated, vertical): + location = self.cur_token_location_ + self.expect_keyword_("mark") + if enumerated: + raise FeatureLibError( + '"enumerate" is not allowed with ' + "mark-to-mark attachment positioning", + location, + ) + baseMarks = self.parse_glyphclass_(accept_glyphname=True) + marks = self.parse_anchor_marks_() + self.expect_symbol_(";") + return self.ast.MarkMarkPosStatement(baseMarks, marks, location=location) + + def parse_script_(self): + assert self.is_cur_keyword_("script") + location, script = self.cur_token_location_, self.expect_script_tag_() + self.expect_symbol_(";") + return self.ast.ScriptStatement(script, location=location) + + def parse_substitute_(self): + assert self.cur_token_ in {"substitute", "sub", "reversesub", "rsub"} + location = self.cur_token_location_ + reverse = self.cur_token_ in {"reversesub", "rsub"} + ( + old_prefix, + old, + lookups, + values, + old_suffix, + hasMarks, + ) = self.parse_glyph_pattern_(vertical=False) + if any(values): + raise FeatureLibError( + "Substitution statements cannot contain values", location + ) + new = [] + if self.next_token_ == "by": + keyword = self.expect_keyword_("by") + while self.next_token_ != ";": + gc = self.parse_glyphclass_(accept_glyphname=True, accept_null=True) + new.append(gc) + elif self.next_token_ == "from": + keyword = self.expect_keyword_("from") + new = [self.parse_glyphclass_(accept_glyphname=False)] + else: + keyword = None + self.expect_symbol_(";") + if len(new) == 0 and not any(lookups): + raise FeatureLibError( + 'Expected "by", "from" or explicit lookup references', + self.cur_token_location_, + ) + + # GSUB lookup type 3: Alternate substitution. + # Format: "substitute a from [a.1 a.2 a.3];" + if keyword == "from": + if reverse: + raise FeatureLibError( + 'Reverse chaining substitutions do not support "from"', location + ) + if len(old) != 1 or len(old[0].glyphSet()) != 1: + raise FeatureLibError('Expected a single glyph before "from"', location) + if len(new) != 1: + raise FeatureLibError( + 'Expected a single glyphclass after "from"', location + ) + return self.ast.AlternateSubstStatement( + old_prefix, old[0], old_suffix, new[0], location=location + ) + + num_lookups = len([l for l in lookups if l is not None]) + + is_deletion = False + if len(new) == 1 and isinstance(new[0], ast.NullGlyph): + new = [] # Deletion + is_deletion = True + + # GSUB lookup type 1: Single substitution. + # Format A: "substitute a by a.sc;" + # Format B: "substitute [one.fitted one.oldstyle] by one;" + # Format C: "substitute [a-d] by [A.sc-D.sc];" + if not reverse and len(old) == 1 and len(new) == 1 and num_lookups == 0: + glyphs = list(old[0].glyphSet()) + replacements = list(new[0].glyphSet()) + if len(replacements) == 1: + replacements = replacements * len(glyphs) + if len(glyphs) != len(replacements): + raise FeatureLibError( + 'Expected a glyph class with %d elements after "by", ' + "but found a glyph class with %d elements" + % (len(glyphs), len(replacements)), + location, + ) + return self.ast.SingleSubstStatement( + old, new, old_prefix, old_suffix, forceChain=hasMarks, location=location + ) + + # Glyph deletion, built as GSUB lookup type 2: Multiple substitution + # with empty replacement. + if is_deletion and len(old) == 1 and num_lookups == 0: + return self.ast.MultipleSubstStatement( + old_prefix, + old[0], + old_suffix, + (), + forceChain=hasMarks, + location=location, + ) + + # GSUB lookup type 2: Multiple substitution. + # Format: "substitute f_f_i by f f i;" + if ( + not reverse + and len(old) == 1 + and len(old[0].glyphSet()) == 1 + and len(new) > 1 + and max([len(n.glyphSet()) for n in new]) == 1 + and num_lookups == 0 + ): + for n in new: + if not list(n.glyphSet()): + raise FeatureLibError("Empty class in replacement", location) + return self.ast.MultipleSubstStatement( + old_prefix, + tuple(old[0].glyphSet())[0], + old_suffix, + tuple([list(n.glyphSet())[0] for n in new]), + forceChain=hasMarks, + location=location, + ) + + # GSUB lookup type 4: Ligature substitution. + # Format: "substitute f f i by f_f_i;" + if ( + not reverse + and len(old) > 1 + and len(new) == 1 + and len(new[0].glyphSet()) == 1 + and num_lookups == 0 + ): + return self.ast.LigatureSubstStatement( + old_prefix, + old, + old_suffix, + list(new[0].glyphSet())[0], + forceChain=hasMarks, + location=location, + ) + + # GSUB lookup type 8: Reverse chaining substitution. + if reverse: + if len(old) != 1: + raise FeatureLibError( + "In reverse chaining single substitutions, " + "only a single glyph or glyph class can be replaced", + location, + ) + if len(new) != 1: + raise FeatureLibError( + "In reverse chaining single substitutions, " + 'the replacement (after "by") must be a single glyph ' + "or glyph class", + location, + ) + if num_lookups != 0: + raise FeatureLibError( + "Reverse chaining substitutions cannot call named lookups", location + ) + glyphs = sorted(list(old[0].glyphSet())) + replacements = sorted(list(new[0].glyphSet())) + if len(replacements) == 1: + replacements = replacements * len(glyphs) + if len(glyphs) != len(replacements): + raise FeatureLibError( + 'Expected a glyph class with %d elements after "by", ' + "but found a glyph class with %d elements" + % (len(glyphs), len(replacements)), + location, + ) + return self.ast.ReverseChainSingleSubstStatement( + old_prefix, old_suffix, old, new, location=location + ) + + if len(old) > 1 and len(new) > 1: + raise FeatureLibError( + "Direct substitution of multiple glyphs by multiple glyphs " + "is not supported", + location, + ) + + # If there are remaining glyphs to parse, this is an invalid GSUB statement + if len(new) != 0 or is_deletion: + raise FeatureLibError("Invalid substitution statement", location) + + # GSUB lookup type 6: Chaining contextual substitution. + rule = self.ast.ChainContextSubstStatement( + old_prefix, old, old_suffix, lookups, location=location + ) + return rule + + def parse_subtable_(self): + assert self.is_cur_keyword_("subtable") + location = self.cur_token_location_ + self.expect_symbol_(";") + return self.ast.SubtableStatement(location=location) + + def parse_size_parameters_(self): + # Parses a ``parameters`` statement used in ``size`` features. See + # `section 8.b `_. + assert self.is_cur_keyword_("parameters") + location = self.cur_token_location_ + DesignSize = self.expect_decipoint_() + SubfamilyID = self.expect_number_() + RangeStart = 0.0 + RangeEnd = 0.0 + if self.next_token_type_ in (Lexer.NUMBER, Lexer.FLOAT) or SubfamilyID != 0: + RangeStart = self.expect_decipoint_() + RangeEnd = self.expect_decipoint_() + + self.expect_symbol_(";") + return self.ast.SizeParameters( + DesignSize, SubfamilyID, RangeStart, RangeEnd, location=location + ) + + def parse_size_menuname_(self): + assert self.is_cur_keyword_("sizemenuname") + location = self.cur_token_location_ + platformID, platEncID, langID, string = self.parse_name_() + return self.ast.FeatureNameStatement( + "size", platformID, platEncID, langID, string, location=location + ) + + def parse_table_(self): + assert self.is_cur_keyword_("table") + location, name = self.cur_token_location_, self.expect_tag_() + table = self.ast.TableBlock(name, location=location) + self.expect_symbol_("{") + handler = { + "GDEF": self.parse_table_GDEF_, + "head": self.parse_table_head_, + "hhea": self.parse_table_hhea_, + "vhea": self.parse_table_vhea_, + "name": self.parse_table_name_, + "BASE": self.parse_table_BASE_, + "OS/2": self.parse_table_OS_2_, + "STAT": self.parse_table_STAT_, + }.get(name) + if handler: + handler(table) + else: + raise FeatureLibError( + '"table %s" is not supported' % name.strip(), location + ) + self.expect_symbol_("}") + end_tag = self.expect_tag_() + if end_tag != name: + raise FeatureLibError( + 'Expected "%s"' % name.strip(), self.cur_token_location_ + ) + self.expect_symbol_(";") + return table + + def parse_table_GDEF_(self, table): + statements = table.statements + while self.next_token_ != "}" or self.cur_comments_: + self.advance_lexer_(comments=True) + if self.cur_token_type_ is Lexer.COMMENT: + statements.append( + self.ast.Comment(self.cur_token_, location=self.cur_token_location_) + ) + elif self.is_cur_keyword_("Attach"): + statements.append(self.parse_attach_()) + elif self.is_cur_keyword_("GlyphClassDef"): + statements.append(self.parse_GlyphClassDef_()) + elif self.is_cur_keyword_("LigatureCaretByIndex"): + statements.append(self.parse_ligatureCaretByIndex_()) + elif self.is_cur_keyword_("LigatureCaretByPos"): + statements.append(self.parse_ligatureCaretByPos_()) + elif self.cur_token_ == ";": + continue + else: + raise FeatureLibError( + "Expected Attach, LigatureCaretByIndex, " "or LigatureCaretByPos", + self.cur_token_location_, + ) + + def parse_table_head_(self, table): + statements = table.statements + while self.next_token_ != "}" or self.cur_comments_: + self.advance_lexer_(comments=True) + if self.cur_token_type_ is Lexer.COMMENT: + statements.append( + self.ast.Comment(self.cur_token_, location=self.cur_token_location_) + ) + elif self.is_cur_keyword_("FontRevision"): + statements.append(self.parse_FontRevision_()) + elif self.cur_token_ == ";": + continue + else: + raise FeatureLibError("Expected FontRevision", self.cur_token_location_) + + def parse_table_hhea_(self, table): + statements = table.statements + fields = ("CaretOffset", "Ascender", "Descender", "LineGap") + while self.next_token_ != "}" or self.cur_comments_: + self.advance_lexer_(comments=True) + if self.cur_token_type_ is Lexer.COMMENT: + statements.append( + self.ast.Comment(self.cur_token_, location=self.cur_token_location_) + ) + elif self.cur_token_type_ is Lexer.NAME and self.cur_token_ in fields: + key = self.cur_token_.lower() + value = self.expect_number_() + statements.append( + self.ast.HheaField(key, value, location=self.cur_token_location_) + ) + if self.next_token_ != ";": + raise FeatureLibError( + "Incomplete statement", self.next_token_location_ + ) + elif self.cur_token_ == ";": + continue + else: + raise FeatureLibError( + "Expected CaretOffset, Ascender, " "Descender or LineGap", + self.cur_token_location_, + ) + + def parse_table_vhea_(self, table): + statements = table.statements + fields = ("VertTypoAscender", "VertTypoDescender", "VertTypoLineGap") + while self.next_token_ != "}" or self.cur_comments_: + self.advance_lexer_(comments=True) + if self.cur_token_type_ is Lexer.COMMENT: + statements.append( + self.ast.Comment(self.cur_token_, location=self.cur_token_location_) + ) + elif self.cur_token_type_ is Lexer.NAME and self.cur_token_ in fields: + key = self.cur_token_.lower() + value = self.expect_number_() + statements.append( + self.ast.VheaField(key, value, location=self.cur_token_location_) + ) + if self.next_token_ != ";": + raise FeatureLibError( + "Incomplete statement", self.next_token_location_ + ) + elif self.cur_token_ == ";": + continue + else: + raise FeatureLibError( + "Expected VertTypoAscender, " + "VertTypoDescender or VertTypoLineGap", + self.cur_token_location_, + ) + + def parse_table_name_(self, table): + statements = table.statements + while self.next_token_ != "}" or self.cur_comments_: + self.advance_lexer_(comments=True) + if self.cur_token_type_ is Lexer.COMMENT: + statements.append( + self.ast.Comment(self.cur_token_, location=self.cur_token_location_) + ) + elif self.is_cur_keyword_("nameid"): + statement = self.parse_nameid_() + if statement: + statements.append(statement) + elif self.cur_token_ == ";": + continue + else: + raise FeatureLibError("Expected nameid", self.cur_token_location_) + + def parse_name_(self): + """Parses a name record. See `section 9.e `_.""" + platEncID = None + langID = None + if self.next_token_type_ in Lexer.NUMBERS: + platformID = self.expect_any_number_() + location = self.cur_token_location_ + if platformID not in (1, 3): + raise FeatureLibError("Expected platform id 1 or 3", location) + if self.next_token_type_ in Lexer.NUMBERS: + platEncID = self.expect_any_number_() + langID = self.expect_any_number_() + else: + platformID = 3 + location = self.cur_token_location_ + + if platformID == 1: # Macintosh + platEncID = platEncID or 0 # Roman + langID = langID or 0 # English + else: # 3, Windows + platEncID = platEncID or 1 # Unicode + langID = langID or 0x0409 # English + + string = self.expect_string_() + self.expect_symbol_(";") + + encoding = getEncoding(platformID, platEncID, langID) + if encoding is None: + raise FeatureLibError("Unsupported encoding", location) + unescaped = self.unescape_string_(string, encoding) + return platformID, platEncID, langID, unescaped + + def parse_stat_name_(self): + platEncID = None + langID = None + if self.next_token_type_ in Lexer.NUMBERS: + platformID = self.expect_any_number_() + location = self.cur_token_location_ + if platformID not in (1, 3): + raise FeatureLibError("Expected platform id 1 or 3", location) + if self.next_token_type_ in Lexer.NUMBERS: + platEncID = self.expect_any_number_() + langID = self.expect_any_number_() + else: + platformID = 3 + location = self.cur_token_location_ + + if platformID == 1: # Macintosh + platEncID = platEncID or 0 # Roman + langID = langID or 0 # English + else: # 3, Windows + platEncID = platEncID or 1 # Unicode + langID = langID or 0x0409 # English + + string = self.expect_string_() + encoding = getEncoding(platformID, platEncID, langID) + if encoding is None: + raise FeatureLibError("Unsupported encoding", location) + unescaped = self.unescape_string_(string, encoding) + return platformID, platEncID, langID, unescaped + + def parse_nameid_(self): + assert self.cur_token_ == "nameid", self.cur_token_ + location, nameID = self.cur_token_location_, self.expect_any_number_() + if nameID > 32767: + raise FeatureLibError( + "Name id value cannot be greater than 32767", self.cur_token_location_ + ) + if 1 <= nameID <= 6: + log.warning( + "Name id %d cannot be set from the feature file. " + "Ignoring record" % nameID + ) + self.parse_name_() # skip to the next record + return None + + platformID, platEncID, langID, string = self.parse_name_() + return self.ast.NameRecord( + nameID, platformID, platEncID, langID, string, location=location + ) + + def unescape_string_(self, string, encoding): + if encoding == "utf_16_be": + s = re.sub(r"\\[0-9a-fA-F]{4}", self.unescape_unichr_, string) + else: + unescape = lambda m: self.unescape_byte_(m, encoding) + s = re.sub(r"\\[0-9a-fA-F]{2}", unescape, string) + # We now have a Unicode string, but it might contain surrogate pairs. + # We convert surrogates to actual Unicode by round-tripping through + # Python's UTF-16 codec in a special mode. + utf16 = tobytes(s, "utf_16_be", "surrogatepass") + return tostr(utf16, "utf_16_be") + + @staticmethod + def unescape_unichr_(match): + n = match.group(0)[1:] + return chr(int(n, 16)) + + @staticmethod + def unescape_byte_(match, encoding): + n = match.group(0)[1:] + return bytechr(int(n, 16)).decode(encoding) + + def parse_table_BASE_(self, table): + statements = table.statements + while self.next_token_ != "}" or self.cur_comments_: + self.advance_lexer_(comments=True) + if self.cur_token_type_ is Lexer.COMMENT: + statements.append( + self.ast.Comment(self.cur_token_, location=self.cur_token_location_) + ) + elif self.is_cur_keyword_("HorizAxis.BaseTagList"): + horiz_bases = self.parse_base_tag_list_() + elif self.is_cur_keyword_("HorizAxis.BaseScriptList"): + horiz_scripts = self.parse_base_script_list_(len(horiz_bases)) + statements.append( + self.ast.BaseAxis( + horiz_bases, + horiz_scripts, + False, + location=self.cur_token_location_, + ) + ) + elif self.is_cur_keyword_("VertAxis.BaseTagList"): + vert_bases = self.parse_base_tag_list_() + elif self.is_cur_keyword_("VertAxis.BaseScriptList"): + vert_scripts = self.parse_base_script_list_(len(vert_bases)) + statements.append( + self.ast.BaseAxis( + vert_bases, + vert_scripts, + True, + location=self.cur_token_location_, + ) + ) + elif self.cur_token_ == ";": + continue + + def parse_table_OS_2_(self, table): + statements = table.statements + numbers = ( + "FSType", + "TypoAscender", + "TypoDescender", + "TypoLineGap", + "winAscent", + "winDescent", + "XHeight", + "CapHeight", + "WeightClass", + "WidthClass", + "LowerOpSize", + "UpperOpSize", + ) + ranges = ("UnicodeRange", "CodePageRange") + while self.next_token_ != "}" or self.cur_comments_: + self.advance_lexer_(comments=True) + if self.cur_token_type_ is Lexer.COMMENT: + statements.append( + self.ast.Comment(self.cur_token_, location=self.cur_token_location_) + ) + elif self.cur_token_type_ is Lexer.NAME: + key = self.cur_token_.lower() + value = None + if self.cur_token_ in numbers: + value = self.expect_number_() + elif self.is_cur_keyword_("Panose"): + value = [] + for i in range(10): + value.append(self.expect_number_()) + elif self.cur_token_ in ranges: + value = [] + while self.next_token_ != ";": + value.append(self.expect_number_()) + elif self.is_cur_keyword_("Vendor"): + value = self.expect_string_() + statements.append( + self.ast.OS2Field(key, value, location=self.cur_token_location_) + ) + elif self.cur_token_ == ";": + continue + + def parse_STAT_ElidedFallbackName(self): + assert self.is_cur_keyword_("ElidedFallbackName") + self.expect_symbol_("{") + names = [] + while self.next_token_ != "}" or self.cur_comments_: + self.advance_lexer_() + if self.is_cur_keyword_("name"): + platformID, platEncID, langID, string = self.parse_stat_name_() + nameRecord = self.ast.STATNameStatement( + "stat", + platformID, + platEncID, + langID, + string, + location=self.cur_token_location_, + ) + names.append(nameRecord) + else: + if self.cur_token_ != ";": + raise FeatureLibError( + f"Unexpected token {self.cur_token_} " f"in ElidedFallbackName", + self.cur_token_location_, + ) + self.expect_symbol_("}") + if not names: + raise FeatureLibError('Expected "name"', self.cur_token_location_) + return names + + def parse_STAT_design_axis(self): + assert self.is_cur_keyword_("DesignAxis") + names = [] + axisTag = self.expect_tag_() + if ( + axisTag not in ("ital", "opsz", "slnt", "wdth", "wght") + and not axisTag.isupper() + ): + log.warning(f"Unregistered axis tag {axisTag} should be uppercase.") + axisOrder = self.expect_number_() + self.expect_symbol_("{") + while self.next_token_ != "}" or self.cur_comments_: + self.advance_lexer_() + if self.cur_token_type_ is Lexer.COMMENT: + continue + elif self.is_cur_keyword_("name"): + location = self.cur_token_location_ + platformID, platEncID, langID, string = self.parse_stat_name_() + name = self.ast.STATNameStatement( + "stat", platformID, platEncID, langID, string, location=location + ) + names.append(name) + elif self.cur_token_ == ";": + continue + else: + raise FeatureLibError( + f'Expected "name", got {self.cur_token_}', self.cur_token_location_ + ) + + self.expect_symbol_("}") + return self.ast.STATDesignAxisStatement( + axisTag, axisOrder, names, self.cur_token_location_ + ) + + def parse_STAT_axis_value_(self): + assert self.is_cur_keyword_("AxisValue") + self.expect_symbol_("{") + locations = [] + names = [] + flags = 0 + while self.next_token_ != "}" or self.cur_comments_: + self.advance_lexer_(comments=True) + if self.cur_token_type_ is Lexer.COMMENT: + continue + elif self.is_cur_keyword_("name"): + location = self.cur_token_location_ + platformID, platEncID, langID, string = self.parse_stat_name_() + name = self.ast.STATNameStatement( + "stat", platformID, platEncID, langID, string, location=location + ) + names.append(name) + elif self.is_cur_keyword_("location"): + location = self.parse_STAT_location() + locations.append(location) + elif self.is_cur_keyword_("flag"): + flags = self.expect_stat_flags() + elif self.cur_token_ == ";": + continue + else: + raise FeatureLibError( + f"Unexpected token {self.cur_token_} " f"in AxisValue", + self.cur_token_location_, + ) + self.expect_symbol_("}") + if not names: + raise FeatureLibError('Expected "Axis Name"', self.cur_token_location_) + if not locations: + raise FeatureLibError('Expected "Axis location"', self.cur_token_location_) + if len(locations) > 1: + for location in locations: + if len(location.values) > 1: + raise FeatureLibError( + "Only one value is allowed in a " + "Format 4 Axis Value Record, but " + f"{len(location.values)} were found.", + self.cur_token_location_, + ) + format4_tags = [] + for location in locations: + tag = location.tag + if tag in format4_tags: + raise FeatureLibError( + f"Axis tag {tag} already " "defined.", self.cur_token_location_ + ) + format4_tags.append(tag) + + return self.ast.STATAxisValueStatement( + names, locations, flags, self.cur_token_location_ + ) + + def parse_STAT_location(self): + values = [] + tag = self.expect_tag_() + if len(tag.strip()) != 4: + raise FeatureLibError( + f"Axis tag {self.cur_token_} must be 4 " "characters", + self.cur_token_location_, + ) + + while self.next_token_ != ";": + if self.next_token_type_ is Lexer.FLOAT: + value = self.expect_float_() + values.append(value) + elif self.next_token_type_ is Lexer.NUMBER: + value = self.expect_number_() + values.append(value) + else: + raise FeatureLibError( + f'Unexpected value "{self.next_token_}". ' + "Expected integer or float.", + self.next_token_location_, + ) + if len(values) == 3: + nominal, min_val, max_val = values + if nominal < min_val or nominal > max_val: + raise FeatureLibError( + f"Default value {nominal} is outside " + f"of specified range " + f"{min_val}-{max_val}.", + self.next_token_location_, + ) + return self.ast.AxisValueLocationStatement(tag, values) + + def parse_table_STAT_(self, table): + statements = table.statements + design_axes = [] + while self.next_token_ != "}" or self.cur_comments_: + self.advance_lexer_(comments=True) + if self.cur_token_type_ is Lexer.COMMENT: + statements.append( + self.ast.Comment(self.cur_token_, location=self.cur_token_location_) + ) + elif self.cur_token_type_ is Lexer.NAME: + if self.is_cur_keyword_("ElidedFallbackName"): + names = self.parse_STAT_ElidedFallbackName() + statements.append(self.ast.ElidedFallbackName(names)) + elif self.is_cur_keyword_("ElidedFallbackNameID"): + value = self.expect_number_() + statements.append(self.ast.ElidedFallbackNameID(value)) + self.expect_symbol_(";") + elif self.is_cur_keyword_("DesignAxis"): + designAxis = self.parse_STAT_design_axis() + design_axes.append(designAxis.tag) + statements.append(designAxis) + self.expect_symbol_(";") + elif self.is_cur_keyword_("AxisValue"): + axisValueRecord = self.parse_STAT_axis_value_() + for location in axisValueRecord.locations: + if location.tag not in design_axes: + # Tag must be defined in a DesignAxis before it + # can be referenced + raise FeatureLibError( + "DesignAxis not defined for " f"{location.tag}.", + self.cur_token_location_, + ) + statements.append(axisValueRecord) + self.expect_symbol_(";") + else: + raise FeatureLibError( + f"Unexpected token {self.cur_token_}", self.cur_token_location_ + ) + elif self.cur_token_ == ";": + continue + + def parse_base_tag_list_(self): + # Parses BASE table entries. (See `section 9.a `_) + assert self.cur_token_ in ( + "HorizAxis.BaseTagList", + "VertAxis.BaseTagList", + ), self.cur_token_ + bases = [] + while self.next_token_ != ";": + bases.append(self.expect_script_tag_()) + self.expect_symbol_(";") + return bases + + def parse_base_script_list_(self, count): + assert self.cur_token_ in ( + "HorizAxis.BaseScriptList", + "VertAxis.BaseScriptList", + ), self.cur_token_ + scripts = [(self.parse_base_script_record_(count))] + while self.next_token_ == ",": + self.expect_symbol_(",") + scripts.append(self.parse_base_script_record_(count)) + self.expect_symbol_(";") + return scripts + + def parse_base_script_record_(self, count): + script_tag = self.expect_script_tag_() + base_tag = self.expect_script_tag_() + coords = [self.expect_number_() for i in range(count)] + return script_tag, base_tag, coords + + def parse_device_(self): + result = None + self.expect_symbol_("<") + self.expect_keyword_("device") + if self.next_token_ == "NULL": + self.expect_keyword_("NULL") + else: + result = [(self.expect_number_(), self.expect_number_())] + while self.next_token_ == ",": + self.expect_symbol_(",") + result.append((self.expect_number_(), self.expect_number_())) + result = tuple(result) # make it hashable + self.expect_symbol_(">") + return result + + def is_next_value_(self): + return ( + self.next_token_type_ is Lexer.NUMBER + or self.next_token_ == "<" + or self.next_token_ == "(" + ) + + def parse_valuerecord_(self, vertical): + if ( + self.next_token_type_ is Lexer.SYMBOL and self.next_token_ == "(" + ) or self.next_token_type_ is Lexer.NUMBER: + number, location = ( + self.expect_number_(variable=True), + self.cur_token_location_, + ) + if vertical: + val = self.ast.ValueRecord( + yAdvance=number, vertical=vertical, location=location + ) + else: + val = self.ast.ValueRecord( + xAdvance=number, vertical=vertical, location=location + ) + return val + self.expect_symbol_("<") + location = self.cur_token_location_ + if self.next_token_type_ is Lexer.NAME: + name = self.expect_name_() + if name == "NULL": + self.expect_symbol_(">") + return self.ast.ValueRecord() + vrd = self.valuerecords_.resolve(name) + if vrd is None: + raise FeatureLibError( + 'Unknown valueRecordDef "%s"' % name, self.cur_token_location_ + ) + value = vrd.value + xPlacement, yPlacement = (value.xPlacement, value.yPlacement) + xAdvance, yAdvance = (value.xAdvance, value.yAdvance) + else: + xPlacement, yPlacement, xAdvance, yAdvance = ( + self.expect_number_(variable=True), + self.expect_number_(variable=True), + self.expect_number_(variable=True), + self.expect_number_(variable=True), + ) + + if self.next_token_ == "<": + xPlaDevice, yPlaDevice, xAdvDevice, yAdvDevice = ( + self.parse_device_(), + self.parse_device_(), + self.parse_device_(), + self.parse_device_(), + ) + allDeltas = sorted( + [ + delta + for size, delta in (xPlaDevice if xPlaDevice else ()) + + (yPlaDevice if yPlaDevice else ()) + + (xAdvDevice if xAdvDevice else ()) + + (yAdvDevice if yAdvDevice else ()) + ] + ) + if allDeltas[0] < -128 or allDeltas[-1] > 127: + raise FeatureLibError( + "Device value out of valid range (-128..127)", + self.cur_token_location_, + ) + else: + xPlaDevice, yPlaDevice, xAdvDevice, yAdvDevice = (None, None, None, None) + + self.expect_symbol_(">") + return self.ast.ValueRecord( + xPlacement, + yPlacement, + xAdvance, + yAdvance, + xPlaDevice, + yPlaDevice, + xAdvDevice, + yAdvDevice, + vertical=vertical, + location=location, + ) + + def parse_valuerecord_definition_(self, vertical): + # Parses a named value record definition. (See section `2.e.v `_) + assert self.is_cur_keyword_("valueRecordDef") + location = self.cur_token_location_ + value = self.parse_valuerecord_(vertical) + name = self.expect_name_() + self.expect_symbol_(";") + vrd = self.ast.ValueRecordDefinition(name, value, location=location) + self.valuerecords_.define(name, vrd) + return vrd + + def parse_languagesystem_(self): + assert self.cur_token_ == "languagesystem" + location = self.cur_token_location_ + script = self.expect_script_tag_() + language = self.expect_language_tag_() + self.expect_symbol_(";") + return self.ast.LanguageSystemStatement(script, language, location=location) + + def parse_feature_block_(self, variation=False): + if variation: + assert self.cur_token_ == "variation" + else: + assert self.cur_token_ == "feature" + location = self.cur_token_location_ + tag = self.expect_tag_() + vertical = tag in {"vkrn", "vpal", "vhal", "valt"} + + stylisticset = None + cv_feature = None + size_feature = False + if tag in self.SS_FEATURE_TAGS: + stylisticset = tag + elif tag in self.CV_FEATURE_TAGS: + cv_feature = tag + elif tag == "size": + size_feature = True + + if variation: + conditionset = self.expect_name_() + + use_extension = False + if self.next_token_ == "useExtension": + self.expect_keyword_("useExtension") + use_extension = True + + if variation: + block = self.ast.VariationBlock( + tag, conditionset, use_extension=use_extension, location=location + ) + else: + block = self.ast.FeatureBlock( + tag, use_extension=use_extension, location=location + ) + self.parse_block_(block, vertical, stylisticset, size_feature, cv_feature) + return block + + def parse_feature_reference_(self): + assert self.cur_token_ == "feature", self.cur_token_ + location = self.cur_token_location_ + featureName = self.expect_tag_() + self.expect_symbol_(";") + return self.ast.FeatureReferenceStatement(featureName, location=location) + + def parse_featureNames_(self, tag): + """Parses a ``featureNames`` statement found in stylistic set features. + See section `8.c `_.""" + assert self.cur_token_ == "featureNames", self.cur_token_ + block = self.ast.NestedBlock( + tag, self.cur_token_, location=self.cur_token_location_ + ) + self.expect_symbol_("{") + for symtab in self.symbol_tables_: + symtab.enter_scope() + while self.next_token_ != "}" or self.cur_comments_: + self.advance_lexer_(comments=True) + if self.cur_token_type_ is Lexer.COMMENT: + block.statements.append( + self.ast.Comment(self.cur_token_, location=self.cur_token_location_) + ) + elif self.is_cur_keyword_("name"): + location = self.cur_token_location_ + platformID, platEncID, langID, string = self.parse_name_() + block.statements.append( + self.ast.FeatureNameStatement( + tag, platformID, platEncID, langID, string, location=location + ) + ) + elif self.cur_token_ == ";": + continue + else: + raise FeatureLibError('Expected "name"', self.cur_token_location_) + self.expect_symbol_("}") + for symtab in self.symbol_tables_: + symtab.exit_scope() + self.expect_symbol_(";") + return block + + def parse_cvParameters_(self, tag): + # Parses a ``cvParameters`` block found in Character Variant features. + # See section `8.d `_. + assert self.cur_token_ == "cvParameters", self.cur_token_ + block = self.ast.NestedBlock( + tag, self.cur_token_, location=self.cur_token_location_ + ) + self.expect_symbol_("{") + for symtab in self.symbol_tables_: + symtab.enter_scope() + + statements = block.statements + while self.next_token_ != "}" or self.cur_comments_: + self.advance_lexer_(comments=True) + if self.cur_token_type_ is Lexer.COMMENT: + statements.append( + self.ast.Comment(self.cur_token_, location=self.cur_token_location_) + ) + elif self.is_cur_keyword_( + { + "FeatUILabelNameID", + "FeatUITooltipTextNameID", + "SampleTextNameID", + "ParamUILabelNameID", + } + ): + statements.append(self.parse_cvNameIDs_(tag, self.cur_token_)) + elif self.is_cur_keyword_("Character"): + statements.append(self.parse_cvCharacter_(tag)) + elif self.cur_token_ == ";": + continue + else: + raise FeatureLibError( + "Expected statement: got {} {}".format( + self.cur_token_type_, self.cur_token_ + ), + self.cur_token_location_, + ) + + self.expect_symbol_("}") + for symtab in self.symbol_tables_: + symtab.exit_scope() + self.expect_symbol_(";") + return block + + def parse_cvNameIDs_(self, tag, block_name): + assert self.cur_token_ == block_name, self.cur_token_ + block = self.ast.NestedBlock(tag, block_name, location=self.cur_token_location_) + self.expect_symbol_("{") + for symtab in self.symbol_tables_: + symtab.enter_scope() + while self.next_token_ != "}" or self.cur_comments_: + self.advance_lexer_(comments=True) + if self.cur_token_type_ is Lexer.COMMENT: + block.statements.append( + self.ast.Comment(self.cur_token_, location=self.cur_token_location_) + ) + elif self.is_cur_keyword_("name"): + location = self.cur_token_location_ + platformID, platEncID, langID, string = self.parse_name_() + block.statements.append( + self.ast.CVParametersNameStatement( + tag, + platformID, + platEncID, + langID, + string, + block_name, + location=location, + ) + ) + elif self.cur_token_ == ";": + continue + else: + raise FeatureLibError('Expected "name"', self.cur_token_location_) + self.expect_symbol_("}") + for symtab in self.symbol_tables_: + symtab.exit_scope() + self.expect_symbol_(";") + return block + + def parse_cvCharacter_(self, tag): + assert self.cur_token_ == "Character", self.cur_token_ + location, character = self.cur_token_location_, self.expect_any_number_() + self.expect_symbol_(";") + if not (0xFFFFFF >= character >= 0): + raise FeatureLibError( + "Character value must be between " + "{:#x} and {:#x}".format(0, 0xFFFFFF), + location, + ) + return self.ast.CharacterStatement(character, tag, location=location) + + def parse_FontRevision_(self): + # Parses a ``FontRevision`` statement found in the head table. See + # `section 9.c `_. + assert self.cur_token_ == "FontRevision", self.cur_token_ + location, version = self.cur_token_location_, self.expect_float_() + self.expect_symbol_(";") + if version <= 0: + raise FeatureLibError("Font revision numbers must be positive", location) + return self.ast.FontRevisionStatement(version, location=location) + + def parse_conditionset_(self): + name = self.expect_name_() + + conditions = {} + self.expect_symbol_("{") + + while self.next_token_ != "}": + self.advance_lexer_() + if self.cur_token_type_ is not Lexer.NAME: + raise FeatureLibError("Expected an axis name", self.cur_token_location_) + + axis = self.cur_token_ + if axis in conditions: + raise FeatureLibError( + f"Repeated condition for axis {axis}", self.cur_token_location_ + ) + + if self.next_token_type_ is Lexer.FLOAT: + min_value = self.expect_float_() + elif self.next_token_type_ is Lexer.NUMBER: + min_value = self.expect_number_(variable=False) + + if self.next_token_type_ is Lexer.FLOAT: + max_value = self.expect_float_() + elif self.next_token_type_ is Lexer.NUMBER: + max_value = self.expect_number_(variable=False) + self.expect_symbol_(";") + + conditions[axis] = (min_value, max_value) + + self.expect_symbol_("}") + + finalname = self.expect_name_() + if finalname != name: + raise FeatureLibError('Expected "%s"' % name, self.cur_token_location_) + return self.ast.ConditionsetStatement(name, conditions) + + def parse_block_( + self, block, vertical, stylisticset=None, size_feature=False, cv_feature=None + ): + self.expect_symbol_("{") + for symtab in self.symbol_tables_: + symtab.enter_scope() + + statements = block.statements + while self.next_token_ != "}" or self.cur_comments_: + self.advance_lexer_(comments=True) + if self.cur_token_type_ is Lexer.COMMENT: + statements.append( + self.ast.Comment(self.cur_token_, location=self.cur_token_location_) + ) + elif self.cur_token_type_ is Lexer.GLYPHCLASS: + statements.append(self.parse_glyphclass_definition_()) + elif self.is_cur_keyword_("anchorDef"): + statements.append(self.parse_anchordef_()) + elif self.is_cur_keyword_({"enum", "enumerate"}): + statements.append(self.parse_enumerate_(vertical=vertical)) + elif self.is_cur_keyword_("feature"): + statements.append(self.parse_feature_reference_()) + elif self.is_cur_keyword_("ignore"): + statements.append(self.parse_ignore_()) + elif self.is_cur_keyword_("language"): + statements.append(self.parse_language_()) + elif self.is_cur_keyword_("lookup"): + statements.append(self.parse_lookup_(vertical)) + elif self.is_cur_keyword_("lookupflag"): + statements.append(self.parse_lookupflag_()) + elif self.is_cur_keyword_("markClass"): + statements.append(self.parse_markClass_()) + elif self.is_cur_keyword_({"pos", "position"}): + statements.append( + self.parse_position_(enumerated=False, vertical=vertical) + ) + elif self.is_cur_keyword_("script"): + statements.append(self.parse_script_()) + elif self.is_cur_keyword_({"sub", "substitute", "rsub", "reversesub"}): + statements.append(self.parse_substitute_()) + elif self.is_cur_keyword_("subtable"): + statements.append(self.parse_subtable_()) + elif self.is_cur_keyword_("valueRecordDef"): + statements.append(self.parse_valuerecord_definition_(vertical)) + elif stylisticset and self.is_cur_keyword_("featureNames"): + statements.append(self.parse_featureNames_(stylisticset)) + elif cv_feature and self.is_cur_keyword_("cvParameters"): + statements.append(self.parse_cvParameters_(cv_feature)) + elif size_feature and self.is_cur_keyword_("parameters"): + statements.append(self.parse_size_parameters_()) + elif size_feature and self.is_cur_keyword_("sizemenuname"): + statements.append(self.parse_size_menuname_()) + elif ( + self.cur_token_type_ is Lexer.NAME + and self.cur_token_ in self.extensions + ): + statements.append(self.extensions[self.cur_token_](self)) + elif self.cur_token_ == ";": + continue + else: + raise FeatureLibError( + "Expected glyph class definition or statement: got {} {}".format( + self.cur_token_type_, self.cur_token_ + ), + self.cur_token_location_, + ) + + self.expect_symbol_("}") + for symtab in self.symbol_tables_: + symtab.exit_scope() + + name = self.expect_name_() + if name != block.name.strip(): + raise FeatureLibError( + 'Expected "%s"' % block.name.strip(), self.cur_token_location_ + ) + self.expect_symbol_(";") + + # A multiple substitution may have a single destination, in which case + # it will look just like a single substitution. So if there are both + # multiple and single substitutions, upgrade all the single ones to + # multiple substitutions. + + # Check if we have a mix of non-contextual singles and multiples. + has_single = False + has_multiple = False + for s in statements: + if isinstance(s, self.ast.SingleSubstStatement): + has_single = not any([s.prefix, s.suffix, s.forceChain]) + elif isinstance(s, self.ast.MultipleSubstStatement): + has_multiple = not any([s.prefix, s.suffix, s.forceChain]) + + # Upgrade all single substitutions to multiple substitutions. + if has_single and has_multiple: + statements = [] + for s in block.statements: + if isinstance(s, self.ast.SingleSubstStatement): + glyphs = s.glyphs[0].glyphSet() + replacements = s.replacements[0].glyphSet() + if len(replacements) == 1: + replacements *= len(glyphs) + for i, glyph in enumerate(glyphs): + statements.append( + self.ast.MultipleSubstStatement( + s.prefix, + glyph, + s.suffix, + [replacements[i]], + s.forceChain, + location=s.location, + ) + ) + else: + statements.append(s) + block.statements = statements + + def is_cur_keyword_(self, k): + if self.cur_token_type_ is Lexer.NAME: + if isinstance(k, type("")): # basestring is gone in Python3 + return self.cur_token_ == k + else: + return self.cur_token_ in k + return False + + def expect_class_name_(self): + self.advance_lexer_() + if self.cur_token_type_ is not Lexer.GLYPHCLASS: + raise FeatureLibError("Expected @NAME", self.cur_token_location_) + return self.cur_token_ + + def expect_cid_(self): + self.advance_lexer_() + if self.cur_token_type_ is Lexer.CID: + return self.cur_token_ + raise FeatureLibError("Expected a CID", self.cur_token_location_) + + def expect_filename_(self): + self.advance_lexer_() + if self.cur_token_type_ is not Lexer.FILENAME: + raise FeatureLibError("Expected file name", self.cur_token_location_) + return self.cur_token_ + + def expect_glyph_(self): + self.advance_lexer_() + if self.cur_token_type_ is Lexer.NAME: + self.cur_token_ = self.cur_token_.lstrip("\\") + if len(self.cur_token_) > 63: + raise FeatureLibError( + "Glyph names must not be longer than 63 characters", + self.cur_token_location_, + ) + return self.cur_token_ + elif self.cur_token_type_ is Lexer.CID: + return "cid%05d" % self.cur_token_ + raise FeatureLibError("Expected a glyph name or CID", self.cur_token_location_) + + def check_glyph_name_in_glyph_set(self, *names): + """Raises if glyph name (just `start`) or glyph names of a + range (`start` and `end`) are not in the glyph set. + + If no glyph set is present, does nothing. + """ + if self.glyphNames_: + missing = [name for name in names if name not in self.glyphNames_] + if missing: + raise FeatureLibError( + "The following glyph names are referenced but are missing from the " + f"glyph set: {', '.join(missing)}", + self.cur_token_location_, + ) + + def expect_markClass_reference_(self): + name = self.expect_class_name_() + mc = self.glyphclasses_.resolve(name) + if mc is None: + raise FeatureLibError( + "Unknown markClass @%s" % name, self.cur_token_location_ + ) + if not isinstance(mc, self.ast.MarkClass): + raise FeatureLibError( + "@%s is not a markClass" % name, self.cur_token_location_ + ) + return mc + + def expect_tag_(self): + self.advance_lexer_() + if self.cur_token_type_ is not Lexer.NAME: + raise FeatureLibError("Expected a tag", self.cur_token_location_) + if len(self.cur_token_) > 4: + raise FeatureLibError( + "Tags cannot be longer than 4 characters", self.cur_token_location_ + ) + return (self.cur_token_ + " ")[:4] + + def expect_script_tag_(self): + tag = self.expect_tag_() + if tag == "dflt": + raise FeatureLibError( + '"dflt" is not a valid script tag; use "DFLT" instead', + self.cur_token_location_, + ) + return tag + + def expect_language_tag_(self): + tag = self.expect_tag_() + if tag == "DFLT": + raise FeatureLibError( + '"DFLT" is not a valid language tag; use "dflt" instead', + self.cur_token_location_, + ) + return tag + + def expect_symbol_(self, symbol): + self.advance_lexer_() + if self.cur_token_type_ is Lexer.SYMBOL and self.cur_token_ == symbol: + return symbol + raise FeatureLibError("Expected '%s'" % symbol, self.cur_token_location_) + + def expect_keyword_(self, keyword): + self.advance_lexer_() + if self.cur_token_type_ is Lexer.NAME and self.cur_token_ == keyword: + return self.cur_token_ + raise FeatureLibError('Expected "%s"' % keyword, self.cur_token_location_) + + def expect_name_(self): + self.advance_lexer_() + if self.cur_token_type_ is Lexer.NAME: + return self.cur_token_ + raise FeatureLibError("Expected a name", self.cur_token_location_) + + def expect_number_(self, variable=False): + self.advance_lexer_() + if self.cur_token_type_ is Lexer.NUMBER: + return self.cur_token_ + if variable and self.cur_token_type_ is Lexer.SYMBOL and self.cur_token_ == "(": + return self.expect_variable_scalar_() + raise FeatureLibError("Expected a number", self.cur_token_location_) + + def expect_variable_scalar_(self): + self.advance_lexer_() # "(" + scalar = VariableScalar() + while True: + if self.cur_token_type_ == Lexer.SYMBOL and self.cur_token_ == ")": + break + location, value = self.expect_master_() + scalar.add_value(location, value) + return scalar + + def expect_master_(self): + location = {} + while True: + if self.cur_token_type_ is not Lexer.NAME: + raise FeatureLibError("Expected an axis name", self.cur_token_location_) + axis = self.cur_token_ + self.advance_lexer_() + if not (self.cur_token_type_ is Lexer.SYMBOL and self.cur_token_ == "="): + raise FeatureLibError( + "Expected an equals sign", self.cur_token_location_ + ) + value = self.expect_number_() + location[axis] = value + if self.next_token_type_ is Lexer.NAME and self.next_token_[0] == ":": + # Lexer has just read the value as a glyph name. We'll correct it later + break + self.advance_lexer_() + if not (self.cur_token_type_ is Lexer.SYMBOL and self.cur_token_ == ","): + raise FeatureLibError( + "Expected an comma or an equals sign", self.cur_token_location_ + ) + self.advance_lexer_() + self.advance_lexer_() + value = int(self.cur_token_[1:]) + self.advance_lexer_() + return location, value + + def expect_any_number_(self): + self.advance_lexer_() + if self.cur_token_type_ in Lexer.NUMBERS: + return self.cur_token_ + raise FeatureLibError( + "Expected a decimal, hexadecimal or octal number", self.cur_token_location_ + ) + + def expect_float_(self): + self.advance_lexer_() + if self.cur_token_type_ is Lexer.FLOAT: + return self.cur_token_ + raise FeatureLibError( + "Expected a floating-point number", self.cur_token_location_ + ) + + def expect_decipoint_(self): + if self.next_token_type_ == Lexer.FLOAT: + return self.expect_float_() + elif self.next_token_type_ is Lexer.NUMBER: + return self.expect_number_() / 10 + else: + raise FeatureLibError( + "Expected an integer or floating-point number", self.cur_token_location_ + ) + + def expect_stat_flags(self): + value = 0 + flags = { + "OlderSiblingFontAttribute": 1, + "ElidableAxisValueName": 2, + } + while self.next_token_ != ";": + if self.next_token_ in flags: + name = self.expect_name_() + value = value | flags[name] + else: + raise FeatureLibError( + f"Unexpected STAT flag {self.cur_token_}", self.cur_token_location_ + ) + return value + + def expect_stat_values_(self): + if self.next_token_type_ == Lexer.FLOAT: + return self.expect_float_() + elif self.next_token_type_ is Lexer.NUMBER: + return self.expect_number_() + else: + raise FeatureLibError( + "Expected an integer or floating-point number", self.cur_token_location_ + ) + + def expect_string_(self): + self.advance_lexer_() + if self.cur_token_type_ is Lexer.STRING: + return self.cur_token_ + raise FeatureLibError("Expected a string", self.cur_token_location_) + + def advance_lexer_(self, comments=False): + if comments and self.cur_comments_: + self.cur_token_type_ = Lexer.COMMENT + self.cur_token_, self.cur_token_location_ = self.cur_comments_.pop(0) + return + else: + self.cur_token_type_, self.cur_token_, self.cur_token_location_ = ( + self.next_token_type_, + self.next_token_, + self.next_token_location_, + ) + while True: + try: + ( + self.next_token_type_, + self.next_token_, + self.next_token_location_, + ) = next(self.lexer_) + except StopIteration: + self.next_token_type_, self.next_token_ = (None, None) + if self.next_token_type_ != Lexer.COMMENT: + break + self.cur_comments_.append((self.next_token_, self.next_token_location_)) + + @staticmethod + def reverse_string_(s): + """'abc' --> 'cba'""" + return "".join(reversed(list(s))) + + def make_cid_range_(self, location, start, limit): + """(location, 999, 1001) --> ["cid00999", "cid01000", "cid01001"]""" + result = list() + if start > limit: + raise FeatureLibError( + "Bad range: start should be less than limit", location + ) + for cid in range(start, limit + 1): + result.append("cid%05d" % cid) + return result + + def make_glyph_range_(self, location, start, limit): + """(location, "a.sc", "d.sc") --> ["a.sc", "b.sc", "c.sc", "d.sc"]""" + result = list() + if len(start) != len(limit): + raise FeatureLibError( + 'Bad range: "%s" and "%s" should have the same length' % (start, limit), + location, + ) + + rev = self.reverse_string_ + prefix = os.path.commonprefix([start, limit]) + suffix = rev(os.path.commonprefix([rev(start), rev(limit)])) + if len(suffix) > 0: + start_range = start[len(prefix) : -len(suffix)] + limit_range = limit[len(prefix) : -len(suffix)] + else: + start_range = start[len(prefix) :] + limit_range = limit[len(prefix) :] + + if start_range >= limit_range: + raise FeatureLibError( + "Start of range must be smaller than its end", location + ) + + uppercase = re.compile(r"^[A-Z]$") + if uppercase.match(start_range) and uppercase.match(limit_range): + for c in range(ord(start_range), ord(limit_range) + 1): + result.append("%s%c%s" % (prefix, c, suffix)) + return result + + lowercase = re.compile(r"^[a-z]$") + if lowercase.match(start_range) and lowercase.match(limit_range): + for c in range(ord(start_range), ord(limit_range) + 1): + result.append("%s%c%s" % (prefix, c, suffix)) + return result + + digits = re.compile(r"^[0-9]{1,3}$") + if digits.match(start_range) and digits.match(limit_range): + for i in range(int(start_range, 10), int(limit_range, 10) + 1): + number = ("000" + str(i))[-len(start_range) :] + result.append("%s%s%s" % (prefix, number, suffix)) + return result + + raise FeatureLibError('Bad range: "%s-%s"' % (start, limit), location) + + +class SymbolTable(object): + def __init__(self): + self.scopes_ = [{}] + + def enter_scope(self): + self.scopes_.append({}) + + def exit_scope(self): + self.scopes_.pop() + + def define(self, name, item): + self.scopes_[-1][name] = item + + def resolve(self, name): + for scope in reversed(self.scopes_): + item = scope.get(name) + if item: + return item + return None diff --git a/.venv/lib/python3.9/site-packages/fontTools/feaLib/variableScalar.py b/.venv/lib/python3.9/site-packages/fontTools/feaLib/variableScalar.py new file mode 100644 index 00000000..a286568e --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/feaLib/variableScalar.py @@ -0,0 +1,97 @@ +from fontTools.varLib.models import VariationModel, normalizeValue + + +def Location(loc): + return tuple(sorted(loc.items())) + + +class VariableScalar: + """A scalar with different values at different points in the designspace.""" + + def __init__(self, location_value={}): + self.values = {} + self.axes = {} + for location, value in location_value.items(): + self.add_value(location, value) + + def __repr__(self): + items = [] + for location, value in self.values.items(): + loc = ",".join(["%s=%i" % (ax, loc) for ax, loc in location]) + items.append("%s:%i" % (loc, value)) + return "(" + (" ".join(items)) + ")" + + @property + def does_vary(self): + values = list(self.values.values()) + return any(v != values[0] for v in values[1:]) + + @property + def axes_dict(self): + if not self.axes: + raise ValueError( + ".axes must be defined on variable scalar before interpolating" + ) + return {ax.axisTag: ax for ax in self.axes} + + def _normalized_location(self, location): + location = self.fix_location(location) + normalized_location = {} + for axtag in location.keys(): + if axtag not in self.axes_dict: + raise ValueError("Unknown axis %s in %s" % (axtag, location)) + axis = self.axes_dict[axtag] + normalized_location[axtag] = normalizeValue( + location[axtag], (axis.minValue, axis.defaultValue, axis.maxValue) + ) + + return Location(normalized_location) + + def fix_location(self, location): + location = dict(location) + for tag, axis in self.axes_dict.items(): + if tag not in location: + location[tag] = axis.defaultValue + return location + + def add_value(self, location, value): + if self.axes: + location = self.fix_location(location) + + self.values[Location(location)] = value + + def fix_all_locations(self): + self.values = { + Location(self.fix_location(l)): v for l, v in self.values.items() + } + + @property + def default(self): + self.fix_all_locations() + key = Location({ax.axisTag: ax.defaultValue for ax in self.axes}) + if key not in self.values: + raise ValueError("Default value could not be found") + # I *guess* we could interpolate one, but I don't know how. + return self.values[key] + + def value_at_location(self, location): + loc = location + if loc in self.values.keys(): + return self.values[loc] + values = list(self.values.values()) + return self.model.interpolateFromMasters(loc, values) + + @property + def model(self): + locations = [dict(self._normalized_location(k)) for k in self.values.keys()] + return VariationModel(locations) + + def get_deltas_and_supports(self): + values = list(self.values.values()) + return self.model.getDeltasAndSupports(values) + + def add_to_variation_store(self, store_builder): + deltas, supports = self.get_deltas_and_supports() + store_builder.setSupports(supports) + index = store_builder.storeDeltas(deltas) + return int(self.default), index diff --git a/.venv/lib/python3.9/site-packages/fontTools/fontBuilder.py b/.venv/lib/python3.9/site-packages/fontTools/fontBuilder.py new file mode 100644 index 00000000..bf3b31b7 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/fontBuilder.py @@ -0,0 +1,959 @@ +__all__ = ["FontBuilder"] + +""" +This module is *experimental*, meaning it still may evolve and change. + +The `FontBuilder` class is a convenient helper to construct working TTF or +OTF fonts from scratch. + +Note that the various setup methods cannot be called in arbitrary order, +due to various interdependencies between OpenType tables. Here is an order +that works: + + fb = FontBuilder(...) + fb.setupGlyphOrder(...) + fb.setupCharacterMap(...) + fb.setupGlyf(...) --or-- fb.setupCFF(...) + fb.setupHorizontalMetrics(...) + fb.setupHorizontalHeader() + fb.setupNameTable(...) + fb.setupOS2() + fb.addOpenTypeFeatures(...) + fb.setupPost() + fb.save(...) + +Here is how to build a minimal TTF: + +```python +from fontTools.fontBuilder import FontBuilder +from fontTools.pens.ttGlyphPen import TTGlyphPen + + +def drawTestGlyph(pen): + pen.moveTo((100, 100)) + pen.lineTo((100, 1000)) + pen.qCurveTo((200, 900), (400, 900), (500, 1000)) + pen.lineTo((500, 100)) + pen.closePath() + + +fb = FontBuilder(1024, isTTF=True) +fb.setupGlyphOrder([".notdef", ".null", "space", "A", "a"]) +fb.setupCharacterMap({32: "space", 65: "A", 97: "a"}) +advanceWidths = {".notdef": 600, "space": 500, "A": 600, "a": 600, ".null": 0} + +familyName = "HelloTestFont" +styleName = "TotallyNormal" +version = "0.1" + +nameStrings = dict( + familyName=dict(en=familyName, nl="HalloTestFont"), + styleName=dict(en=styleName, nl="TotaalNormaal"), + uniqueFontIdentifier="fontBuilder: " + familyName + "." + styleName, + fullName=familyName + "-" + styleName, + psName=familyName + "-" + styleName, + version="Version " + version, +) + +pen = TTGlyphPen(None) +drawTestGlyph(pen) +glyph = pen.glyph() +glyphs = {".notdef": glyph, "space": glyph, "A": glyph, "a": glyph, ".null": glyph} +fb.setupGlyf(glyphs) +metrics = {} +glyphTable = fb.font["glyf"] +for gn, advanceWidth in advanceWidths.items(): + metrics[gn] = (advanceWidth, glyphTable[gn].xMin) +fb.setupHorizontalMetrics(metrics) +fb.setupHorizontalHeader(ascent=824, descent=-200) +fb.setupNameTable(nameStrings) +fb.setupOS2(sTypoAscender=824, usWinAscent=824, usWinDescent=200) +fb.setupPost() +fb.save("test.ttf") +``` + +And here's how to build a minimal OTF: + +```python +from fontTools.fontBuilder import FontBuilder +from fontTools.pens.t2CharStringPen import T2CharStringPen + + +def drawTestGlyph(pen): + pen.moveTo((100, 100)) + pen.lineTo((100, 1000)) + pen.curveTo((200, 900), (400, 900), (500, 1000)) + pen.lineTo((500, 100)) + pen.closePath() + + +fb = FontBuilder(1024, isTTF=False) +fb.setupGlyphOrder([".notdef", ".null", "space", "A", "a"]) +fb.setupCharacterMap({32: "space", 65: "A", 97: "a"}) +advanceWidths = {".notdef": 600, "space": 500, "A": 600, "a": 600, ".null": 0} + +familyName = "HelloTestFont" +styleName = "TotallyNormal" +version = "0.1" + +nameStrings = dict( + familyName=dict(en=familyName, nl="HalloTestFont"), + styleName=dict(en=styleName, nl="TotaalNormaal"), + uniqueFontIdentifier="fontBuilder: " + familyName + "." + styleName, + fullName=familyName + "-" + styleName, + psName=familyName + "-" + styleName, + version="Version " + version, +) + +pen = T2CharStringPen(600, None) +drawTestGlyph(pen) +charString = pen.getCharString() +charStrings = { + ".notdef": charString, + "space": charString, + "A": charString, + "a": charString, + ".null": charString, +} +fb.setupCFF(nameStrings["psName"], {"FullName": nameStrings["psName"]}, charStrings, {}) +lsb = {gn: cs.calcBounds(None)[0] for gn, cs in charStrings.items()} +metrics = {} +for gn, advanceWidth in advanceWidths.items(): + metrics[gn] = (advanceWidth, lsb[gn]) +fb.setupHorizontalMetrics(metrics) +fb.setupHorizontalHeader(ascent=824, descent=200) +fb.setupNameTable(nameStrings) +fb.setupOS2(sTypoAscender=824, usWinAscent=824, usWinDescent=200) +fb.setupPost() +fb.save("test.otf") +``` +""" + +from .ttLib import TTFont, newTable +from .ttLib.tables._c_m_a_p import cmap_classes +from .misc.timeTools import timestampNow +import struct +from collections import OrderedDict + + +_headDefaults = dict( + tableVersion=1.0, + fontRevision=1.0, + checkSumAdjustment=0, + magicNumber=0x5F0F3CF5, + flags=0x0003, + unitsPerEm=1000, + created=0, + modified=0, + xMin=0, + yMin=0, + xMax=0, + yMax=0, + macStyle=0, + lowestRecPPEM=3, + fontDirectionHint=2, + indexToLocFormat=0, + glyphDataFormat=0, +) + +_maxpDefaultsTTF = dict( + tableVersion=0x00010000, + numGlyphs=0, + maxPoints=0, + maxContours=0, + maxCompositePoints=0, + maxCompositeContours=0, + maxZones=2, + maxTwilightPoints=0, + maxStorage=0, + maxFunctionDefs=0, + maxInstructionDefs=0, + maxStackElements=0, + maxSizeOfInstructions=0, + maxComponentElements=0, + maxComponentDepth=0, +) +_maxpDefaultsOTF = dict( + tableVersion=0x00005000, + numGlyphs=0, +) + +_postDefaults = dict( + formatType=3.0, + italicAngle=0, + underlinePosition=0, + underlineThickness=0, + isFixedPitch=0, + minMemType42=0, + maxMemType42=0, + minMemType1=0, + maxMemType1=0, +) + +_hheaDefaults = dict( + tableVersion=0x00010000, + ascent=0, + descent=0, + lineGap=0, + advanceWidthMax=0, + minLeftSideBearing=0, + minRightSideBearing=0, + xMaxExtent=0, + caretSlopeRise=1, + caretSlopeRun=0, + caretOffset=0, + reserved0=0, + reserved1=0, + reserved2=0, + reserved3=0, + metricDataFormat=0, + numberOfHMetrics=0, +) + +_vheaDefaults = dict( + tableVersion=0x00010000, + ascent=0, + descent=0, + lineGap=0, + advanceHeightMax=0, + minTopSideBearing=0, + minBottomSideBearing=0, + yMaxExtent=0, + caretSlopeRise=0, + caretSlopeRun=0, + reserved0=0, + reserved1=0, + reserved2=0, + reserved3=0, + reserved4=0, + metricDataFormat=0, + numberOfVMetrics=0, +) + +_nameIDs = dict( + copyright=0, + familyName=1, + styleName=2, + uniqueFontIdentifier=3, + fullName=4, + version=5, + psName=6, + trademark=7, + manufacturer=8, + designer=9, + description=10, + vendorURL=11, + designerURL=12, + licenseDescription=13, + licenseInfoURL=14, + # reserved = 15, + typographicFamily=16, + typographicSubfamily=17, + compatibleFullName=18, + sampleText=19, + postScriptCIDFindfontName=20, + wwsFamilyName=21, + wwsSubfamilyName=22, + lightBackgroundPalette=23, + darkBackgroundPalette=24, + variationsPostScriptNamePrefix=25, +) + +# to insert in setupNameTable doc string: +# print("\n".join(("%s (nameID %s)" % (k, v)) for k, v in sorted(_nameIDs.items(), key=lambda x: x[1]))) + +_panoseDefaults = dict( + bFamilyType=0, + bSerifStyle=0, + bWeight=0, + bProportion=0, + bContrast=0, + bStrokeVariation=0, + bArmStyle=0, + bLetterForm=0, + bMidline=0, + bXHeight=0, +) + +_OS2Defaults = dict( + version=3, + xAvgCharWidth=0, + usWeightClass=400, + usWidthClass=5, + fsType=0x0004, # default: Preview & Print embedding + ySubscriptXSize=0, + ySubscriptYSize=0, + ySubscriptXOffset=0, + ySubscriptYOffset=0, + ySuperscriptXSize=0, + ySuperscriptYSize=0, + ySuperscriptXOffset=0, + ySuperscriptYOffset=0, + yStrikeoutSize=0, + yStrikeoutPosition=0, + sFamilyClass=0, + panose=_panoseDefaults, + ulUnicodeRange1=0, + ulUnicodeRange2=0, + ulUnicodeRange3=0, + ulUnicodeRange4=0, + achVendID="????", + fsSelection=0, + usFirstCharIndex=0, + usLastCharIndex=0, + sTypoAscender=0, + sTypoDescender=0, + sTypoLineGap=0, + usWinAscent=0, + usWinDescent=0, + ulCodePageRange1=0, + ulCodePageRange2=0, + sxHeight=0, + sCapHeight=0, + usDefaultChar=0, # .notdef + usBreakChar=32, # space + usMaxContext=0, + usLowerOpticalPointSize=0, + usUpperOpticalPointSize=0, +) + + +class FontBuilder(object): + def __init__(self, unitsPerEm=None, font=None, isTTF=True): + """Initialize a FontBuilder instance. + + If the `font` argument is not given, a new `TTFont` will be + constructed, and `unitsPerEm` must be given. If `isTTF` is True, + the font will be a glyf-based TTF; if `isTTF` is False it will be + a CFF-based OTF. + + If `font` is given, it must be a `TTFont` instance and `unitsPerEm` + must _not_ be given. The `isTTF` argument will be ignored. + """ + if font is None: + self.font = TTFont(recalcTimestamp=False) + self.isTTF = isTTF + now = timestampNow() + assert unitsPerEm is not None + self.setupHead(unitsPerEm=unitsPerEm, created=now, modified=now) + self.setupMaxp() + else: + assert unitsPerEm is None + self.font = font + self.isTTF = "glyf" in font + + def save(self, file): + """Save the font. The 'file' argument can be either a pathname or a + writable file object. + """ + self.font.save(file) + + def _initTableWithValues(self, tableTag, defaults, values): + table = self.font[tableTag] = newTable(tableTag) + for k, v in defaults.items(): + setattr(table, k, v) + for k, v in values.items(): + setattr(table, k, v) + return table + + def _updateTableWithValues(self, tableTag, values): + table = self.font[tableTag] + for k, v in values.items(): + setattr(table, k, v) + + def setupHead(self, **values): + """Create a new `head` table and initialize it with default values, + which can be overridden by keyword arguments. + """ + self._initTableWithValues("head", _headDefaults, values) + + def updateHead(self, **values): + """Update the head table with the fields and values passed as + keyword arguments. + """ + self._updateTableWithValues("head", values) + + def setupGlyphOrder(self, glyphOrder): + """Set the glyph order for the font.""" + self.font.setGlyphOrder(glyphOrder) + + def setupCharacterMap(self, cmapping, uvs=None, allowFallback=False): + """Build the `cmap` table for the font. The `cmapping` argument should + be a dict mapping unicode code points as integers to glyph names. + + The `uvs` argument, when passed, must be a list of tuples, describing + Unicode Variation Sequences. These tuples have three elements: + (unicodeValue, variationSelector, glyphName) + `unicodeValue` and `variationSelector` are integer code points. + `glyphName` may be None, to indicate this is the default variation. + Text processors will then use the cmap to find the glyph name. + Each Unicode Variation Sequence should be an officially supported + sequence, but this is not policed. + """ + subTables = [] + highestUnicode = max(cmapping) + if highestUnicode > 0xFFFF: + cmapping_3_1 = dict((k, v) for k, v in cmapping.items() if k < 0x10000) + subTable_3_10 = buildCmapSubTable(cmapping, 12, 3, 10) + subTables.append(subTable_3_10) + else: + cmapping_3_1 = cmapping + format = 4 + subTable_3_1 = buildCmapSubTable(cmapping_3_1, format, 3, 1) + try: + subTable_3_1.compile(self.font) + except struct.error: + # format 4 overflowed, fall back to format 12 + if not allowFallback: + raise ValueError( + "cmap format 4 subtable overflowed; sort glyph order by unicode to fix." + ) + format = 12 + subTable_3_1 = buildCmapSubTable(cmapping_3_1, format, 3, 1) + subTables.append(subTable_3_1) + subTable_0_3 = buildCmapSubTable(cmapping_3_1, format, 0, 3) + subTables.append(subTable_0_3) + + if uvs is not None: + uvsDict = {} + for unicodeValue, variationSelector, glyphName in uvs: + if cmapping.get(unicodeValue) == glyphName: + # this is a default variation + glyphName = None + if variationSelector not in uvsDict: + uvsDict[variationSelector] = [] + uvsDict[variationSelector].append((unicodeValue, glyphName)) + uvsSubTable = buildCmapSubTable({}, 14, 0, 5) + uvsSubTable.uvsDict = uvsDict + subTables.append(uvsSubTable) + + self.font["cmap"] = newTable("cmap") + self.font["cmap"].tableVersion = 0 + self.font["cmap"].tables = subTables + + def setupNameTable(self, nameStrings, windows=True, mac=True): + """Create the `name` table for the font. The `nameStrings` argument must + be a dict, mapping nameIDs or descriptive names for the nameIDs to name + record values. A value is either a string, or a dict, mapping language codes + to strings, to allow localized name table entries. + + By default, both Windows (platformID=3) and Macintosh (platformID=1) name + records are added, unless any of `windows` or `mac` arguments is False. + + The following descriptive names are available for nameIDs: + + copyright (nameID 0) + familyName (nameID 1) + styleName (nameID 2) + uniqueFontIdentifier (nameID 3) + fullName (nameID 4) + version (nameID 5) + psName (nameID 6) + trademark (nameID 7) + manufacturer (nameID 8) + designer (nameID 9) + description (nameID 10) + vendorURL (nameID 11) + designerURL (nameID 12) + licenseDescription (nameID 13) + licenseInfoURL (nameID 14) + typographicFamily (nameID 16) + typographicSubfamily (nameID 17) + compatibleFullName (nameID 18) + sampleText (nameID 19) + postScriptCIDFindfontName (nameID 20) + wwsFamilyName (nameID 21) + wwsSubfamilyName (nameID 22) + lightBackgroundPalette (nameID 23) + darkBackgroundPalette (nameID 24) + variationsPostScriptNamePrefix (nameID 25) + """ + nameTable = self.font["name"] = newTable("name") + nameTable.names = [] + + for nameName, nameValue in nameStrings.items(): + if isinstance(nameName, int): + nameID = nameName + else: + nameID = _nameIDs[nameName] + if isinstance(nameValue, str): + nameValue = dict(en=nameValue) + nameTable.addMultilingualName( + nameValue, ttFont=self.font, nameID=nameID, windows=windows, mac=mac + ) + + def setupOS2(self, **values): + """Create a new `OS/2` table and initialize it with default values, + which can be overridden by keyword arguments. + """ + if "xAvgCharWidth" not in values: + gs = self.font.getGlyphSet() + widths = [ + gs[glyphName].width + for glyphName in gs.keys() + if gs[glyphName].width > 0 + ] + values["xAvgCharWidth"] = int(round(sum(widths) / float(len(widths)))) + self._initTableWithValues("OS/2", _OS2Defaults, values) + if not ( + "ulUnicodeRange1" in values + or "ulUnicodeRange2" in values + or "ulUnicodeRange3" in values + or "ulUnicodeRange3" in values + ): + assert ( + "cmap" in self.font + ), "the 'cmap' table must be setup before the 'OS/2' table" + self.font["OS/2"].recalcUnicodeRanges(self.font) + + def setupCFF(self, psName, fontInfo, charStringsDict, privateDict): + from .cffLib import ( + CFFFontSet, + TopDictIndex, + TopDict, + CharStrings, + GlobalSubrsIndex, + PrivateDict, + ) + + assert not self.isTTF + self.font.sfntVersion = "OTTO" + fontSet = CFFFontSet() + fontSet.major = 1 + fontSet.minor = 0 + fontSet.otFont = self.font + fontSet.fontNames = [psName] + fontSet.topDictIndex = TopDictIndex() + + globalSubrs = GlobalSubrsIndex() + fontSet.GlobalSubrs = globalSubrs + private = PrivateDict() + for key, value in privateDict.items(): + setattr(private, key, value) + fdSelect = None + fdArray = None + + topDict = TopDict() + topDict.charset = self.font.getGlyphOrder() + topDict.Private = private + topDict.GlobalSubrs = fontSet.GlobalSubrs + for key, value in fontInfo.items(): + setattr(topDict, key, value) + if "FontMatrix" not in fontInfo: + scale = 1 / self.font["head"].unitsPerEm + topDict.FontMatrix = [scale, 0, 0, scale, 0, 0] + + charStrings = CharStrings( + None, topDict.charset, globalSubrs, private, fdSelect, fdArray + ) + for glyphName, charString in charStringsDict.items(): + charString.private = private + charString.globalSubrs = globalSubrs + charStrings[glyphName] = charString + topDict.CharStrings = charStrings + + fontSet.topDictIndex.append(topDict) + + self.font["CFF "] = newTable("CFF ") + self.font["CFF "].cff = fontSet + + def setupCFF2(self, charStringsDict, fdArrayList=None, regions=None): + from .cffLib import ( + CFFFontSet, + TopDictIndex, + TopDict, + CharStrings, + GlobalSubrsIndex, + PrivateDict, + FDArrayIndex, + FontDict, + ) + + assert not self.isTTF + self.font.sfntVersion = "OTTO" + fontSet = CFFFontSet() + fontSet.major = 2 + fontSet.minor = 0 + + cff2GetGlyphOrder = self.font.getGlyphOrder + fontSet.topDictIndex = TopDictIndex(None, cff2GetGlyphOrder, None) + + globalSubrs = GlobalSubrsIndex() + fontSet.GlobalSubrs = globalSubrs + + if fdArrayList is None: + fdArrayList = [{}] + fdSelect = None + fdArray = FDArrayIndex() + fdArray.strings = None + fdArray.GlobalSubrs = globalSubrs + for privateDict in fdArrayList: + fontDict = FontDict() + fontDict.setCFF2(True) + private = PrivateDict() + for key, value in privateDict.items(): + setattr(private, key, value) + fontDict.Private = private + fdArray.append(fontDict) + + topDict = TopDict() + topDict.cff2GetGlyphOrder = cff2GetGlyphOrder + topDict.FDArray = fdArray + scale = 1 / self.font["head"].unitsPerEm + topDict.FontMatrix = [scale, 0, 0, scale, 0, 0] + + private = fdArray[0].Private + charStrings = CharStrings(None, None, globalSubrs, private, fdSelect, fdArray) + for glyphName, charString in charStringsDict.items(): + charString.private = private + charString.globalSubrs = globalSubrs + charStrings[glyphName] = charString + topDict.CharStrings = charStrings + + fontSet.topDictIndex.append(topDict) + + self.font["CFF2"] = newTable("CFF2") + self.font["CFF2"].cff = fontSet + + if regions: + self.setupCFF2Regions(regions) + + def setupCFF2Regions(self, regions): + from .varLib.builder import buildVarRegionList, buildVarData, buildVarStore + from .cffLib import VarStoreData + + assert "fvar" in self.font, "fvar must to be set up first" + assert "CFF2" in self.font, "CFF2 must to be set up first" + axisTags = [a.axisTag for a in self.font["fvar"].axes] + varRegionList = buildVarRegionList(regions, axisTags) + varData = buildVarData(list(range(len(regions))), None, optimize=False) + varStore = buildVarStore(varRegionList, [varData]) + vstore = VarStoreData(otVarStore=varStore) + topDict = self.font["CFF2"].cff.topDictIndex[0] + topDict.VarStore = vstore + for fontDict in topDict.FDArray: + fontDict.Private.vstore = vstore + + def setupGlyf(self, glyphs, calcGlyphBounds=True): + """Create the `glyf` table from a dict, that maps glyph names + to `fontTools.ttLib.tables._g_l_y_f.Glyph` objects, for example + as made by `fontTools.pens.ttGlyphPen.TTGlyphPen`. + + If `calcGlyphBounds` is True, the bounds of all glyphs will be + calculated. Only pass False if your glyph objects already have + their bounding box values set. + """ + assert self.isTTF + self.font["loca"] = newTable("loca") + self.font["glyf"] = newTable("glyf") + self.font["glyf"].glyphs = glyphs + if hasattr(self.font, "glyphOrder"): + self.font["glyf"].glyphOrder = self.font.glyphOrder + if calcGlyphBounds: + self.calcGlyphBounds() + + def setupFvar(self, axes, instances): + """Adds an font variations table to the font. + + Args: + axes (list): See below. + instances (list): See below. + + ``axes`` should be a list of axes, with each axis either supplied as + a py:class:`.designspaceLib.AxisDescriptor` object, or a tuple in the + format ```tupletag, minValue, defaultValue, maxValue, name``. + The ``name`` is either a string, or a dict, mapping language codes + to strings, to allow localized name table entries. + + ```instances`` should be a list of instances, with each instance either + supplied as a py:class:`.designspaceLib.InstanceDescriptor` object, or a + dict with keys ``location`` (mapping of axis tags to float values), + ``stylename`` and (optionally) ``postscriptfontname``. + The ``stylename`` is either a string, or a dict, mapping language codes + to strings, to allow localized name table entries. + """ + + addFvar(self.font, axes, instances) + + def setupAvar(self, axes): + """Adds an axis variations table to the font. + + Args: + axes (list): A list of py:class:`.designspaceLib.AxisDescriptor` objects. + """ + from .varLib import _add_avar + + _add_avar(self.font, OrderedDict(enumerate(axes))) # Only values are used + + def setupGvar(self, variations): + gvar = self.font["gvar"] = newTable("gvar") + gvar.version = 1 + gvar.reserved = 0 + gvar.variations = variations + + def calcGlyphBounds(self): + """Calculate the bounding boxes of all glyphs in the `glyf` table. + This is usually not called explicitly by client code. + """ + glyphTable = self.font["glyf"] + for glyph in glyphTable.glyphs.values(): + glyph.recalcBounds(glyphTable) + + def setupHorizontalMetrics(self, metrics): + """Create a new `hmtx` table, for horizontal metrics. + + The `metrics` argument must be a dict, mapping glyph names to + `(width, leftSidebearing)` tuples. + """ + self.setupMetrics("hmtx", metrics) + + def setupVerticalMetrics(self, metrics): + """Create a new `vmtx` table, for horizontal metrics. + + The `metrics` argument must be a dict, mapping glyph names to + `(height, topSidebearing)` tuples. + """ + self.setupMetrics("vmtx", metrics) + + def setupMetrics(self, tableTag, metrics): + """See `setupHorizontalMetrics()` and `setupVerticalMetrics()`.""" + assert tableTag in ("hmtx", "vmtx") + mtxTable = self.font[tableTag] = newTable(tableTag) + roundedMetrics = {} + for gn in metrics: + w, lsb = metrics[gn] + roundedMetrics[gn] = int(round(w)), int(round(lsb)) + mtxTable.metrics = roundedMetrics + + def setupHorizontalHeader(self, **values): + """Create a new `hhea` table initialize it with default values, + which can be overridden by keyword arguments. + """ + self._initTableWithValues("hhea", _hheaDefaults, values) + + def setupVerticalHeader(self, **values): + """Create a new `vhea` table initialize it with default values, + which can be overridden by keyword arguments. + """ + self._initTableWithValues("vhea", _vheaDefaults, values) + + def setupVerticalOrigins(self, verticalOrigins, defaultVerticalOrigin=None): + """Create a new `VORG` table. The `verticalOrigins` argument must be + a dict, mapping glyph names to vertical origin values. + + The `defaultVerticalOrigin` argument should be the most common vertical + origin value. If omitted, this value will be derived from the actual + values in the `verticalOrigins` argument. + """ + if defaultVerticalOrigin is None: + # find the most frequent vorg value + bag = {} + for gn in verticalOrigins: + vorg = verticalOrigins[gn] + if vorg not in bag: + bag[vorg] = 1 + else: + bag[vorg] += 1 + defaultVerticalOrigin = sorted( + bag, key=lambda vorg: bag[vorg], reverse=True + )[0] + self._initTableWithValues( + "VORG", + {}, + dict(VOriginRecords={}, defaultVertOriginY=defaultVerticalOrigin), + ) + vorgTable = self.font["VORG"] + vorgTable.majorVersion = 1 + vorgTable.minorVersion = 0 + for gn in verticalOrigins: + vorgTable[gn] = verticalOrigins[gn] + + def setupPost(self, keepGlyphNames=True, **values): + """Create a new `post` table and initialize it with default values, + which can be overridden by keyword arguments. + """ + isCFF2 = "CFF2" in self.font + postTable = self._initTableWithValues("post", _postDefaults, values) + if (self.isTTF or isCFF2) and keepGlyphNames: + postTable.formatType = 2.0 + postTable.extraNames = [] + postTable.mapping = {} + else: + postTable.formatType = 3.0 + + def setupMaxp(self): + """Create a new `maxp` table. This is called implicitly by FontBuilder + itself and is usually not called by client code. + """ + if self.isTTF: + defaults = _maxpDefaultsTTF + else: + defaults = _maxpDefaultsOTF + self._initTableWithValues("maxp", defaults, {}) + + def setupDummyDSIG(self): + """This adds an empty DSIG table to the font to make some MS applications + happy. This does not properly sign the font. + """ + values = dict( + ulVersion=1, + usFlag=0, + usNumSigs=0, + signatureRecords=[], + ) + self._initTableWithValues("DSIG", {}, values) + + def addOpenTypeFeatures(self, features, filename=None, tables=None): + """Add OpenType features to the font from a string containing + Feature File syntax. + + The `filename` argument is used in error messages and to determine + where to look for "include" files. + + The optional `tables` argument can be a list of OTL tables tags to + build, allowing the caller to only build selected OTL tables. See + `fontTools.feaLib` for details. + """ + from .feaLib.builder import addOpenTypeFeaturesFromString + + addOpenTypeFeaturesFromString( + self.font, features, filename=filename, tables=tables + ) + + def addFeatureVariations(self, conditionalSubstitutions, featureTag="rvrn"): + """Add conditional substitutions to a Variable Font. + + See `fontTools.varLib.featureVars.addFeatureVariations`. + """ + from .varLib import featureVars + + if "fvar" not in self.font: + raise KeyError("'fvar' table is missing; can't add FeatureVariations.") + + featureVars.addFeatureVariations( + self.font, conditionalSubstitutions, featureTag=featureTag + ) + + def setupCOLR( + self, + colorLayers, + version=None, + varStore=None, + varIndexMap=None, + clipBoxes=None, + ): + """Build new COLR table using color layers dictionary. + + Cf. `fontTools.colorLib.builder.buildCOLR`. + """ + from fontTools.colorLib.builder import buildCOLR + + glyphMap = self.font.getReverseGlyphMap() + self.font["COLR"] = buildCOLR( + colorLayers, + version=version, + glyphMap=glyphMap, + varStore=varStore, + varIndexMap=varIndexMap, + clipBoxes=clipBoxes, + ) + + def setupCPAL( + self, + palettes, + paletteTypes=None, + paletteLabels=None, + paletteEntryLabels=None, + ): + """Build new CPAL table using list of palettes. + + Optionally build CPAL v1 table using paletteTypes, paletteLabels and + paletteEntryLabels. + + Cf. `fontTools.colorLib.builder.buildCPAL`. + """ + from fontTools.colorLib.builder import buildCPAL + + self.font["CPAL"] = buildCPAL( + palettes, + paletteTypes=paletteTypes, + paletteLabels=paletteLabels, + paletteEntryLabels=paletteEntryLabels, + nameTable=self.font.get("name"), + ) + + def setupStat(self, axes, locations=None, elidedFallbackName=2): + """Build a new 'STAT' table. + + See `fontTools.otlLib.builder.buildStatTable` for details about + the arguments. + """ + from .otlLib.builder import buildStatTable + + buildStatTable(self.font, axes, locations, elidedFallbackName) + + +def buildCmapSubTable(cmapping, format, platformID, platEncID): + subTable = cmap_classes[format](format) + subTable.cmap = cmapping + subTable.platformID = platformID + subTable.platEncID = platEncID + subTable.language = 0 + return subTable + + +def addFvar(font, axes, instances): + from .ttLib.tables._f_v_a_r import Axis, NamedInstance + + assert axes + + fvar = newTable("fvar") + nameTable = font["name"] + + for axis_def in axes: + axis = Axis() + + if isinstance(axis_def, tuple): + ( + axis.axisTag, + axis.minValue, + axis.defaultValue, + axis.maxValue, + name, + ) = axis_def + else: + (axis.axisTag, axis.minValue, axis.defaultValue, axis.maxValue, name) = ( + axis_def.tag, + axis_def.minimum, + axis_def.default, + axis_def.maximum, + axis_def.name, + ) + + if isinstance(name, str): + name = dict(en=name) + + axis.axisNameID = nameTable.addMultilingualName(name, ttFont=font) + fvar.axes.append(axis) + + for instance in instances: + if isinstance(instance, dict): + coordinates = instance["location"] + name = instance["stylename"] + psname = instance.get("postscriptfontname") + else: + coordinates = instance.location + name = instance.localisedStyleName or instance.styleName + psname = instance.postScriptFontName + + if isinstance(name, str): + name = dict(en=name) + + inst = NamedInstance() + inst.subfamilyNameID = nameTable.addMultilingualName(name, ttFont=font) + if psname is not None: + inst.postscriptNameID = nameTable.addName(psname) + inst.coordinates = coordinates + fvar.instances.append(inst) + + font["fvar"] = fvar diff --git a/.venv/lib/python3.9/site-packages/fontTools/help.py b/.venv/lib/python3.9/site-packages/fontTools/help.py new file mode 100644 index 00000000..4334e500 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/help.py @@ -0,0 +1,35 @@ +import pkgutil +import sys +import fontTools +import importlib +import os +from pathlib import Path + + +def main(): + """Show this help""" + path = fontTools.__path__ + descriptions = {} + for pkg in sorted( + mod.name + for mod in pkgutil.walk_packages([fontTools.__path__[0]], prefix="fontTools.") + ): + try: + imports = __import__(pkg, globals(), locals(), ["main"]) + except ImportError as e: + continue + try: + description = imports.main.__doc__ + if description: + pkg = pkg.replace("fontTools.", "").replace(".__main__", "") + # show the docstring's first line only + descriptions[pkg] = description.splitlines()[0] + except AttributeError as e: + pass + for pkg, description in descriptions.items(): + print("fonttools %-12s %s" % (pkg, description), file=sys.stderr) + + +if __name__ == "__main__": + print("fonttools v%s\n" % fontTools.__version__, file=sys.stderr) + main() diff --git a/.venv/lib/python3.9/site-packages/fontTools/merge.py b/.venv/lib/python3.9/site-packages/fontTools/merge.py new file mode 100644 index 00000000..fc2242b1 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/merge.py @@ -0,0 +1,1282 @@ +# Copyright 2013 Google, Inc. All Rights Reserved. +# +# Google Author(s): Behdad Esfahbod, Roozbeh Pournader + +from fontTools.misc.timeTools import timestampNow +from fontTools import ttLib, cffLib +from fontTools.ttLib.tables import otTables, _h_e_a_d +from fontTools.ttLib.tables.DefaultTable import DefaultTable +from fontTools.misc.loggingTools import Timer +from fontTools.pens.recordingPen import DecomposingRecordingPen +from functools import reduce +import sys +import time +import operator +import logging +import os + + +log = logging.getLogger("fontTools.merge") +timer = Timer(logger=logging.getLogger(__name__+".timer"), level=logging.INFO) + + +def _add_method(*clazzes, **kwargs): + """Returns a decorator function that adds a new method to one or + more classes.""" + allowDefault = kwargs.get('allowDefaultTable', False) + def wrapper(method): + done = [] + for clazz in clazzes: + if clazz in done: continue # Support multiple names of a clazz + done.append(clazz) + assert allowDefault or clazz != DefaultTable, 'Oops, table class not found.' + assert method.__name__ not in clazz.__dict__, \ + "Oops, class '%s' has method '%s'." % (clazz.__name__, method.__name__) + setattr(clazz, method.__name__, method) + return None + return wrapper + +# General utility functions for merging values from different fonts + +def equal(lst): + lst = list(lst) + t = iter(lst) + first = next(t) + assert all(item == first for item in t), "Expected all items to be equal: %s" % lst + return first + +def first(lst): + return next(iter(lst)) + +def recalculate(lst): + return NotImplemented + +def current_time(lst): + return timestampNow() + +def bitwise_and(lst): + return reduce(operator.and_, lst) + +def bitwise_or(lst): + return reduce(operator.or_, lst) + +def avg_int(lst): + lst = list(lst) + return sum(lst) // len(lst) + +def onlyExisting(func): + """Returns a filter func that when called with a list, + only calls func on the non-NotImplemented items of the list, + and only so if there's at least one item remaining. + Otherwise returns NotImplemented.""" + + def wrapper(lst): + items = [item for item in lst if item is not NotImplemented] + return func(items) if items else NotImplemented + + return wrapper + +def sumLists(lst): + l = [] + for item in lst: + l.extend(item) + return l + +def sumDicts(lst): + d = {} + for item in lst: + d.update(item) + return d + +def mergeObjects(lst): + lst = [item for item in lst if item is not NotImplemented] + if not lst: + return NotImplemented + lst = [item for item in lst if item is not None] + if not lst: + return None + + clazz = lst[0].__class__ + assert all(type(item) == clazz for item in lst), lst + + logic = clazz.mergeMap + returnTable = clazz() + returnDict = {} + + allKeys = set.union(set(), *(vars(table).keys() for table in lst)) + for key in allKeys: + try: + mergeLogic = logic[key] + except KeyError: + try: + mergeLogic = logic['*'] + except KeyError: + raise Exception("Don't know how to merge key %s of class %s" % + (key, clazz.__name__)) + if mergeLogic is NotImplemented: + continue + value = mergeLogic(getattr(table, key, NotImplemented) for table in lst) + if value is not NotImplemented: + returnDict[key] = value + + returnTable.__dict__ = returnDict + + return returnTable + +def mergeBits(bitmap): + + def wrapper(lst): + lst = list(lst) + returnValue = 0 + for bitNumber in range(bitmap['size']): + try: + mergeLogic = bitmap[bitNumber] + except KeyError: + try: + mergeLogic = bitmap['*'] + except KeyError: + raise Exception("Don't know how to merge bit %s" % bitNumber) + shiftedBit = 1 << bitNumber + mergedValue = mergeLogic(bool(item & shiftedBit) for item in lst) + returnValue |= mergedValue << bitNumber + return returnValue + + return wrapper + + +@_add_method(DefaultTable, allowDefaultTable=True) +def merge(self, m, tables): + if not hasattr(self, 'mergeMap'): + log.info("Don't know how to merge '%s'.", self.tableTag) + return NotImplemented + + logic = self.mergeMap + + if isinstance(logic, dict): + return m.mergeObjects(self, self.mergeMap, tables) + else: + return logic(tables) + + +ttLib.getTableClass('maxp').mergeMap = { + '*': max, + 'tableTag': equal, + 'tableVersion': equal, + 'numGlyphs': sum, + 'maxStorage': first, + 'maxFunctionDefs': first, + 'maxInstructionDefs': first, + # TODO When we correctly merge hinting data, update these values: + # maxFunctionDefs, maxInstructionDefs, maxSizeOfInstructions +} + +headFlagsMergeBitMap = { + 'size': 16, + '*': bitwise_or, + 1: bitwise_and, # Baseline at y = 0 + 2: bitwise_and, # lsb at x = 0 + 3: bitwise_and, # Force ppem to integer values. FIXME? + 5: bitwise_and, # Font is vertical + 6: lambda bit: 0, # Always set to zero + 11: bitwise_and, # Font data is 'lossless' + 13: bitwise_and, # Optimized for ClearType + 14: bitwise_and, # Last resort font. FIXME? equal or first may be better + 15: lambda bit: 0, # Always set to zero +} + +ttLib.getTableClass('head').mergeMap = { + 'tableTag': equal, + 'tableVersion': max, + 'fontRevision': max, + 'checkSumAdjustment': lambda lst: 0, # We need *something* here + 'magicNumber': equal, + 'flags': mergeBits(headFlagsMergeBitMap), + 'unitsPerEm': equal, + 'created': current_time, + 'modified': current_time, + 'xMin': min, + 'yMin': min, + 'xMax': max, + 'yMax': max, + 'macStyle': first, + 'lowestRecPPEM': max, + 'fontDirectionHint': lambda lst: 2, + 'indexToLocFormat': first, + 'glyphDataFormat': equal, +} + +ttLib.getTableClass('hhea').mergeMap = { + '*': equal, + 'tableTag': equal, + 'tableVersion': max, + 'ascent': max, + 'descent': min, + 'lineGap': max, + 'advanceWidthMax': max, + 'minLeftSideBearing': min, + 'minRightSideBearing': min, + 'xMaxExtent': max, + 'caretSlopeRise': first, + 'caretSlopeRun': first, + 'caretOffset': first, + 'numberOfHMetrics': recalculate, +} + +ttLib.getTableClass('vhea').mergeMap = { + '*': equal, + 'tableTag': equal, + 'tableVersion': max, + 'ascent': max, + 'descent': min, + 'lineGap': max, + 'advanceHeightMax': max, + 'minTopSideBearing': min, + 'minBottomSideBearing': min, + 'yMaxExtent': max, + 'caretSlopeRise': first, + 'caretSlopeRun': first, + 'caretOffset': first, + 'numberOfVMetrics': recalculate, +} + +os2FsTypeMergeBitMap = { + 'size': 16, + '*': lambda bit: 0, + 1: bitwise_or, # no embedding permitted + 2: bitwise_and, # allow previewing and printing documents + 3: bitwise_and, # allow editing documents + 8: bitwise_or, # no subsetting permitted + 9: bitwise_or, # no embedding of outlines permitted +} + +def mergeOs2FsType(lst): + lst = list(lst) + if all(item == 0 for item in lst): + return 0 + + # Compute least restrictive logic for each fsType value + for i in range(len(lst)): + # unset bit 1 (no embedding permitted) if either bit 2 or 3 is set + if lst[i] & 0x000C: + lst[i] &= ~0x0002 + # set bit 2 (allow previewing) if bit 3 is set (allow editing) + elif lst[i] & 0x0008: + lst[i] |= 0x0004 + # set bits 2 and 3 if everything is allowed + elif lst[i] == 0: + lst[i] = 0x000C + + fsType = mergeBits(os2FsTypeMergeBitMap)(lst) + # unset bits 2 and 3 if bit 1 is set (some font is "no embedding") + if fsType & 0x0002: + fsType &= ~0x000C + return fsType + + +ttLib.getTableClass('OS/2').mergeMap = { + '*': first, + 'tableTag': equal, + 'version': max, + 'xAvgCharWidth': avg_int, # Apparently fontTools doesn't recalc this + 'fsType': mergeOs2FsType, # Will be overwritten + 'panose': first, # FIXME: should really be the first Latin font + 'ulUnicodeRange1': bitwise_or, + 'ulUnicodeRange2': bitwise_or, + 'ulUnicodeRange3': bitwise_or, + 'ulUnicodeRange4': bitwise_or, + 'fsFirstCharIndex': min, + 'fsLastCharIndex': max, + 'sTypoAscender': max, + 'sTypoDescender': min, + 'sTypoLineGap': max, + 'usWinAscent': max, + 'usWinDescent': max, + # Version 1 + 'ulCodePageRange1': onlyExisting(bitwise_or), + 'ulCodePageRange2': onlyExisting(bitwise_or), + # Version 2, 3, 4 + 'sxHeight': onlyExisting(max), + 'sCapHeight': onlyExisting(max), + 'usDefaultChar': onlyExisting(first), + 'usBreakChar': onlyExisting(first), + 'usMaxContext': onlyExisting(max), + # version 5 + 'usLowerOpticalPointSize': onlyExisting(min), + 'usUpperOpticalPointSize': onlyExisting(max), +} + +@_add_method(ttLib.getTableClass('OS/2')) +def merge(self, m, tables): + DefaultTable.merge(self, m, tables) + if self.version < 2: + # bits 8 and 9 are reserved and should be set to zero + self.fsType &= ~0x0300 + if self.version >= 3: + # Only one of bits 1, 2, and 3 may be set. We already take + # care of bit 1 implications in mergeOs2FsType. So unset + # bit 2 if bit 3 is already set. + if self.fsType & 0x0008: + self.fsType &= ~0x0004 + return self + +ttLib.getTableClass('post').mergeMap = { + '*': first, + 'tableTag': equal, + 'formatType': max, + 'isFixedPitch': min, + 'minMemType42': max, + 'maxMemType42': lambda lst: 0, + 'minMemType1': max, + 'maxMemType1': lambda lst: 0, + 'mapping': onlyExisting(sumDicts), + 'extraNames': lambda lst: [], +} + +ttLib.getTableClass('vmtx').mergeMap = ttLib.getTableClass('hmtx').mergeMap = { + 'tableTag': equal, + 'metrics': sumDicts, +} + +ttLib.getTableClass('name').mergeMap = { + 'tableTag': equal, + 'names': first, # FIXME? Does mixing name records make sense? +} + +ttLib.getTableClass('loca').mergeMap = { + '*': recalculate, + 'tableTag': equal, +} + +ttLib.getTableClass('glyf').mergeMap = { + 'tableTag': equal, + 'glyphs': sumDicts, + 'glyphOrder': sumLists, +} + +@_add_method(ttLib.getTableClass('glyf')) +def merge(self, m, tables): + for i,table in enumerate(tables): + for g in table.glyphs.values(): + if i: + # Drop hints for all but first font, since + # we don't map functions / CVT values. + g.removeHinting() + # Expand composite glyphs to load their + # composite glyph names. + if g.isComposite(): + g.expand(table) + return DefaultTable.merge(self, m, tables) + +ttLib.getTableClass('prep').mergeMap = lambda self, lst: first(lst) +ttLib.getTableClass('fpgm').mergeMap = lambda self, lst: first(lst) +ttLib.getTableClass('cvt ').mergeMap = lambda self, lst: first(lst) +ttLib.getTableClass('gasp').mergeMap = lambda self, lst: first(lst) # FIXME? Appears irreconcilable + +@_add_method(ttLib.getTableClass('CFF ')) +def merge(self, m, tables): + if any(hasattr(table, "FDSelect") for table in tables): + raise NotImplementedError( + "Merging CID-keyed CFF tables is not supported yet" + ) + + newcff = tables[0] + newfont = newcff.cff[0] + private = newfont.Private + storedNamesStrings = [] + glyphOrderStrings = [] + glyphOrder = set(newfont.getGlyphOrder()) + for name in newfont.strings.strings: + if name not in glyphOrder: + storedNamesStrings.append(name) + else: + glyphOrderStrings.append(name) + chrset = list(newfont.charset) + newcs = newfont.CharStrings + log.debug("FONT 0 CharStrings: %d.", len(newcs)) + for i, table in enumerate(tables[1:], start=1): + font = table.cff[0] + font.Private = private + fontGlyphOrder = set(font.getGlyphOrder()) + for name in font.strings.strings: + if name in fontGlyphOrder: + glyphOrderStrings.append(name) + cs = font.CharStrings + gs = table.cff.GlobalSubrs + log.debug("Font %d CharStrings: %d.", i, len(cs)) + chrset.extend(font.charset) + if newcs.charStringsAreIndexed: + for i, name in enumerate(cs.charStrings, start=len(newcs)): + newcs.charStrings[name] = i + newcs.charStringsIndex.items.append(None) + for name in cs.charStrings: + newcs[name] = cs[name] + + newfont.charset = chrset + newfont.numGlyphs = len(chrset) + newfont.strings.strings = glyphOrderStrings + storedNamesStrings + + return newcff + +def _glyphsAreSame(glyphSet1, glyphSet2, glyph1, glyph2): + pen1 = DecomposingRecordingPen(glyphSet1) + pen2 = DecomposingRecordingPen(glyphSet2) + g1 = glyphSet1[glyph1] + g2 = glyphSet2[glyph2] + g1.draw(pen1) + g2.draw(pen2) + return (pen1.value == pen2.value and + g1.width == g2.width and + (not hasattr(g1, 'height') or g1.height == g2.height)) + +# Valid (format, platformID, platEncID) triplets for cmap subtables containing +# Unicode BMP-only and Unicode Full Repertoire semantics. +# Cf. OpenType spec for "Platform specific encodings": +# https://docs.microsoft.com/en-us/typography/opentype/spec/name +class CmapUnicodePlatEncodings: + BMP = {(4, 3, 1), (4, 0, 3), (4, 0, 4), (4, 0, 6)} + FullRepertoire = {(12, 3, 10), (12, 0, 4), (12, 0, 6)} + +@_add_method(ttLib.getTableClass('cmap')) +def merge(self, m, tables): + # TODO Handle format=14. + # Only merge format 4 and 12 Unicode subtables, ignores all other subtables + # If there is a format 12 table for the same font, ignore the format 4 table + cmapTables = [] + for fontIdx,table in enumerate(tables): + format4 = None + format12 = None + for subtable in table.tables: + properties = (subtable.format, subtable.platformID, subtable.platEncID) + if properties in CmapUnicodePlatEncodings.BMP: + format4 = subtable + elif properties in CmapUnicodePlatEncodings.FullRepertoire: + format12 = subtable + else: + log.warning( + "Dropped cmap subtable from font [%s]:\t" + "format %2s, platformID %2s, platEncID %2s", + fontIdx, subtable.format, subtable.platformID, subtable.platEncID + ) + if format12 is not None: + cmapTables.append((format12, fontIdx)) + elif format4 is not None: + cmapTables.append((format4, fontIdx)) + + # Build a unicode mapping, then decide which format is needed to store it. + cmap = {} + fontIndexForGlyph = {} + glyphSets = [None for f in m.fonts] if hasattr(m, 'fonts') else None + for table,fontIdx in cmapTables: + # handle duplicates + for uni,gid in table.cmap.items(): + oldgid = cmap.get(uni, None) + if oldgid is None: + cmap[uni] = gid + fontIndexForGlyph[gid] = fontIdx + elif oldgid != gid: + # Char previously mapped to oldgid, now to gid. + # Record, to fix up in GSUB 'locl' later. + if m.duplicateGlyphsPerFont[fontIdx].get(oldgid) is None: + if glyphSets is not None: + oldFontIdx = fontIndexForGlyph[oldgid] + for idx in (fontIdx, oldFontIdx): + if glyphSets[idx] is None: + glyphSets[idx] = m.fonts[idx].getGlyphSet() + if _glyphsAreSame(glyphSets[oldFontIdx], glyphSets[fontIdx], oldgid, gid): + continue + m.duplicateGlyphsPerFont[fontIdx][oldgid] = gid + elif m.duplicateGlyphsPerFont[fontIdx][oldgid] != gid: + # Char previously mapped to oldgid but oldgid is already remapped to a different + # gid, because of another Unicode character. + # TODO: Try harder to do something about these. + log.warning("Dropped mapping from codepoint %#06X to glyphId '%s'", uni, gid) + + cmapBmpOnly = {uni: gid for uni,gid in cmap.items() if uni <= 0xFFFF} + self.tables = [] + module = ttLib.getTableModule('cmap') + if len(cmapBmpOnly) != len(cmap): + # format-12 required. + cmapTable = module.cmap_classes[12](12) + cmapTable.platformID = 3 + cmapTable.platEncID = 10 + cmapTable.language = 0 + cmapTable.cmap = cmap + self.tables.append(cmapTable) + # always create format-4 + cmapTable = module.cmap_classes[4](4) + cmapTable.platformID = 3 + cmapTable.platEncID = 1 + cmapTable.language = 0 + cmapTable.cmap = cmapBmpOnly + # ordered by platform then encoding + self.tables.insert(0, cmapTable) + self.tableVersion = 0 + self.numSubTables = len(self.tables) + return self + + +def mergeLookupLists(lst): + # TODO Do smarter merge. + return sumLists(lst) + +def mergeFeatures(lst): + assert lst + self = otTables.Feature() + self.FeatureParams = None + self.LookupListIndex = mergeLookupLists([l.LookupListIndex for l in lst if l.LookupListIndex]) + self.LookupCount = len(self.LookupListIndex) + return self + +def mergeFeatureLists(lst): + d = {} + for l in lst: + for f in l: + tag = f.FeatureTag + if tag not in d: + d[tag] = [] + d[tag].append(f.Feature) + ret = [] + for tag in sorted(d.keys()): + rec = otTables.FeatureRecord() + rec.FeatureTag = tag + rec.Feature = mergeFeatures(d[tag]) + ret.append(rec) + return ret + +def mergeLangSyses(lst): + assert lst + + # TODO Support merging ReqFeatureIndex + assert all(l.ReqFeatureIndex == 0xFFFF for l in lst) + + self = otTables.LangSys() + self.LookupOrder = None + self.ReqFeatureIndex = 0xFFFF + self.FeatureIndex = mergeFeatureLists([l.FeatureIndex for l in lst if l.FeatureIndex]) + self.FeatureCount = len(self.FeatureIndex) + return self + +def mergeScripts(lst): + assert lst + + if len(lst) == 1: + return lst[0] + langSyses = {} + for sr in lst: + for lsr in sr.LangSysRecord: + if lsr.LangSysTag not in langSyses: + langSyses[lsr.LangSysTag] = [] + langSyses[lsr.LangSysTag].append(lsr.LangSys) + lsrecords = [] + for tag, langSys_list in sorted(langSyses.items()): + lsr = otTables.LangSysRecord() + lsr.LangSys = mergeLangSyses(langSys_list) + lsr.LangSysTag = tag + lsrecords.append(lsr) + + self = otTables.Script() + self.LangSysRecord = lsrecords + self.LangSysCount = len(lsrecords) + dfltLangSyses = [s.DefaultLangSys for s in lst if s.DefaultLangSys] + if dfltLangSyses: + self.DefaultLangSys = mergeLangSyses(dfltLangSyses) + else: + self.DefaultLangSys = None + return self + +def mergeScriptRecords(lst): + d = {} + for l in lst: + for s in l: + tag = s.ScriptTag + if tag not in d: + d[tag] = [] + d[tag].append(s.Script) + ret = [] + for tag in sorted(d.keys()): + rec = otTables.ScriptRecord() + rec.ScriptTag = tag + rec.Script = mergeScripts(d[tag]) + ret.append(rec) + return ret + +otTables.ScriptList.mergeMap = { + 'ScriptCount': lambda lst: None, # TODO + 'ScriptRecord': mergeScriptRecords, +} +otTables.BaseScriptList.mergeMap = { + 'BaseScriptCount': lambda lst: None, # TODO + # TODO: Merge duplicate entries + 'BaseScriptRecord': lambda lst: sorted(sumLists(lst), key=lambda s: s.BaseScriptTag), +} + +otTables.FeatureList.mergeMap = { + 'FeatureCount': sum, + 'FeatureRecord': lambda lst: sorted(sumLists(lst), key=lambda s: s.FeatureTag), +} + +otTables.LookupList.mergeMap = { + 'LookupCount': sum, + 'Lookup': sumLists, +} + +otTables.Coverage.mergeMap = { + 'Format': min, + 'glyphs': sumLists, +} + +otTables.ClassDef.mergeMap = { + 'Format': min, + 'classDefs': sumDicts, +} + +otTables.LigCaretList.mergeMap = { + 'Coverage': mergeObjects, + 'LigGlyphCount': sum, + 'LigGlyph': sumLists, +} + +otTables.AttachList.mergeMap = { + 'Coverage': mergeObjects, + 'GlyphCount': sum, + 'AttachPoint': sumLists, +} + +# XXX Renumber MarkFilterSets of lookups +otTables.MarkGlyphSetsDef.mergeMap = { + 'MarkSetTableFormat': equal, + 'MarkSetCount': sum, + 'Coverage': sumLists, +} + +otTables.Axis.mergeMap = { + '*': mergeObjects, +} + +# XXX Fix BASE table merging +otTables.BaseTagList.mergeMap = { + 'BaseTagCount': sum, + 'BaselineTag': sumLists, +} + +otTables.GDEF.mergeMap = \ +otTables.GSUB.mergeMap = \ +otTables.GPOS.mergeMap = \ +otTables.BASE.mergeMap = \ +otTables.JSTF.mergeMap = \ +otTables.MATH.mergeMap = \ +{ + '*': mergeObjects, + 'Version': max, +} + +ttLib.getTableClass('GDEF').mergeMap = \ +ttLib.getTableClass('GSUB').mergeMap = \ +ttLib.getTableClass('GPOS').mergeMap = \ +ttLib.getTableClass('BASE').mergeMap = \ +ttLib.getTableClass('JSTF').mergeMap = \ +ttLib.getTableClass('MATH').mergeMap = \ +{ + 'tableTag': onlyExisting(equal), # XXX clean me up + 'table': mergeObjects, +} + +@_add_method(ttLib.getTableClass('GSUB')) +def merge(self, m, tables): + + assert len(tables) == len(m.duplicateGlyphsPerFont) + for i,(table,dups) in enumerate(zip(tables, m.duplicateGlyphsPerFont)): + if not dups: continue + assert (table is not None and table is not NotImplemented), "Have duplicates to resolve for font %d but no GSUB: %s" % (i + 1, dups) + synthFeature = None + synthLookup = None + for script in table.table.ScriptList.ScriptRecord: + if script.ScriptTag == 'DFLT': continue # XXX + for langsys in [script.Script.DefaultLangSys] + [l.LangSys for l in script.Script.LangSysRecord]: + if langsys is None: continue # XXX Create! + feature = [v for v in langsys.FeatureIndex if v.FeatureTag == 'locl'] + assert len(feature) <= 1 + if feature: + feature = feature[0] + else: + if not synthFeature: + synthFeature = otTables.FeatureRecord() + synthFeature.FeatureTag = 'locl' + f = synthFeature.Feature = otTables.Feature() + f.FeatureParams = None + f.LookupCount = 0 + f.LookupListIndex = [] + langsys.FeatureIndex.append(synthFeature) + langsys.FeatureIndex.sort(key=lambda v: v.FeatureTag) + table.table.FeatureList.FeatureRecord.append(synthFeature) + table.table.FeatureList.FeatureCount += 1 + feature = synthFeature + + if not synthLookup: + subtable = otTables.SingleSubst() + subtable.mapping = dups + synthLookup = otTables.Lookup() + synthLookup.LookupFlag = 0 + synthLookup.LookupType = 1 + synthLookup.SubTableCount = 1 + synthLookup.SubTable = [subtable] + if table.table.LookupList is None: + # mtiLib uses None as default value for LookupList, + # while feaLib points to an empty array with count 0 + # TODO: make them do the same + table.table.LookupList = otTables.LookupList() + table.table.LookupList.Lookup = [] + table.table.LookupList.LookupCount = 0 + table.table.LookupList.Lookup.append(synthLookup) + table.table.LookupList.LookupCount += 1 + + feature.Feature.LookupListIndex[:0] = [synthLookup] + feature.Feature.LookupCount += 1 + + DefaultTable.merge(self, m, tables) + return self + +@_add_method(otTables.SingleSubst, + otTables.MultipleSubst, + otTables.AlternateSubst, + otTables.LigatureSubst, + otTables.ReverseChainSingleSubst, + otTables.SinglePos, + otTables.PairPos, + otTables.CursivePos, + otTables.MarkBasePos, + otTables.MarkLigPos, + otTables.MarkMarkPos) +def mapLookups(self, lookupMap): + pass + +# Copied and trimmed down from subset.py +@_add_method(otTables.ContextSubst, + otTables.ChainContextSubst, + otTables.ContextPos, + otTables.ChainContextPos) +def __merge_classify_context(self): + + class ContextHelper(object): + def __init__(self, klass, Format): + if klass.__name__.endswith('Subst'): + Typ = 'Sub' + Type = 'Subst' + else: + Typ = 'Pos' + Type = 'Pos' + if klass.__name__.startswith('Chain'): + Chain = 'Chain' + else: + Chain = '' + ChainTyp = Chain+Typ + + self.Typ = Typ + self.Type = Type + self.Chain = Chain + self.ChainTyp = ChainTyp + + self.LookupRecord = Type+'LookupRecord' + + if Format == 1: + self.Rule = ChainTyp+'Rule' + self.RuleSet = ChainTyp+'RuleSet' + elif Format == 2: + self.Rule = ChainTyp+'ClassRule' + self.RuleSet = ChainTyp+'ClassSet' + + if self.Format not in [1, 2, 3]: + return None # Don't shoot the messenger; let it go + if not hasattr(self.__class__, "_merge__ContextHelpers"): + self.__class__._merge__ContextHelpers = {} + if self.Format not in self.__class__._merge__ContextHelpers: + helper = ContextHelper(self.__class__, self.Format) + self.__class__._merge__ContextHelpers[self.Format] = helper + return self.__class__._merge__ContextHelpers[self.Format] + + +@_add_method(otTables.ContextSubst, + otTables.ChainContextSubst, + otTables.ContextPos, + otTables.ChainContextPos) +def mapLookups(self, lookupMap): + c = self.__merge_classify_context() + + if self.Format in [1, 2]: + for rs in getattr(self, c.RuleSet): + if not rs: continue + for r in getattr(rs, c.Rule): + if not r: continue + for ll in getattr(r, c.LookupRecord): + if not ll: continue + ll.LookupListIndex = lookupMap[ll.LookupListIndex] + elif self.Format == 3: + for ll in getattr(self, c.LookupRecord): + if not ll: continue + ll.LookupListIndex = lookupMap[ll.LookupListIndex] + else: + assert 0, "unknown format: %s" % self.Format + +@_add_method(otTables.ExtensionSubst, + otTables.ExtensionPos) +def mapLookups(self, lookupMap): + if self.Format == 1: + self.ExtSubTable.mapLookups(lookupMap) + else: + assert 0, "unknown format: %s" % self.Format + +@_add_method(otTables.Lookup) +def mapLookups(self, lookupMap): + for st in self.SubTable: + if not st: continue + st.mapLookups(lookupMap) + +@_add_method(otTables.LookupList) +def mapLookups(self, lookupMap): + for l in self.Lookup: + if not l: continue + l.mapLookups(lookupMap) + +@_add_method(otTables.Feature) +def mapLookups(self, lookupMap): + self.LookupListIndex = [lookupMap[i] for i in self.LookupListIndex] + +@_add_method(otTables.FeatureList) +def mapLookups(self, lookupMap): + for f in self.FeatureRecord: + if not f or not f.Feature: continue + f.Feature.mapLookups(lookupMap) + +@_add_method(otTables.DefaultLangSys, + otTables.LangSys) +def mapFeatures(self, featureMap): + self.FeatureIndex = [featureMap[i] for i in self.FeatureIndex] + if self.ReqFeatureIndex != 65535: + self.ReqFeatureIndex = featureMap[self.ReqFeatureIndex] + +@_add_method(otTables.Script) +def mapFeatures(self, featureMap): + if self.DefaultLangSys: + self.DefaultLangSys.mapFeatures(featureMap) + for l in self.LangSysRecord: + if not l or not l.LangSys: continue + l.LangSys.mapFeatures(featureMap) + +@_add_method(otTables.ScriptList) +def mapFeatures(self, featureMap): + for s in self.ScriptRecord: + if not s or not s.Script: continue + s.Script.mapFeatures(featureMap) + + +class Options(object): + + class UnknownOptionError(Exception): + pass + + def __init__(self, **kwargs): + + self.verbose = False + self.timing = False + + self.set(**kwargs) + + def set(self, **kwargs): + for k,v in kwargs.items(): + if not hasattr(self, k): + raise self.UnknownOptionError("Unknown option '%s'" % k) + setattr(self, k, v) + + def parse_opts(self, argv, ignore_unknown=[]): + ret = [] + opts = {} + for a in argv: + orig_a = a + if not a.startswith('--'): + ret.append(a) + continue + a = a[2:] + i = a.find('=') + op = '=' + if i == -1: + if a.startswith("no-"): + k = a[3:] + v = False + else: + k = a + v = True + else: + k = a[:i] + if k[-1] in "-+": + op = k[-1]+'=' # Ops is '-=' or '+=' now. + k = k[:-1] + v = a[i+1:] + ok = k + k = k.replace('-', '_') + if not hasattr(self, k): + if ignore_unknown is True or ok in ignore_unknown: + ret.append(orig_a) + continue + else: + raise self.UnknownOptionError("Unknown option '%s'" % a) + + ov = getattr(self, k) + if isinstance(ov, bool): + v = bool(v) + elif isinstance(ov, int): + v = int(v) + elif isinstance(ov, list): + vv = v.split(',') + if vv == ['']: + vv = [] + vv = [int(x, 0) if len(x) and x[0] in "0123456789" else x for x in vv] + if op == '=': + v = vv + elif op == '+=': + v = ov + v.extend(vv) + elif op == '-=': + v = ov + for x in vv: + if x in v: + v.remove(x) + else: + assert 0 + + opts[k] = v + self.set(**opts) + + return ret + +class _AttendanceRecordingIdentityDict(object): + """A dictionary-like object that records indices of items actually accessed + from a list.""" + + def __init__(self, lst): + self.l = lst + self.d = {id(v):i for i,v in enumerate(lst)} + self.s = set() + + def __getitem__(self, v): + self.s.add(self.d[id(v)]) + return v + +class _GregariousIdentityDict(object): + """A dictionary-like object that welcomes guests without reservations and + adds them to the end of the guest list.""" + + def __init__(self, lst): + self.l = lst + self.s = set(id(v) for v in lst) + + def __getitem__(self, v): + if id(v) not in self.s: + self.s.add(id(v)) + self.l.append(v) + return v + +class _NonhashableDict(object): + """A dictionary-like object mapping objects to values.""" + + def __init__(self, keys, values=None): + if values is None: + self.d = {id(v):i for i,v in enumerate(keys)} + else: + self.d = {id(k):v for k,v in zip(keys, values)} + + def __getitem__(self, k): + return self.d[id(k)] + + def __setitem__(self, k, v): + self.d[id(k)] = v + + def __delitem__(self, k): + del self.d[id(k)] + +class Merger(object): + """Font merger. + + This class merges multiple files into a single OpenType font, taking into + account complexities such as OpenType layout (``GSUB``/``GPOS``) tables and + cross-font metrics (e.g. ``hhea.ascent`` is set to the maximum value across + all the fonts). + + If multiple glyphs map to the same Unicode value, and the glyphs are considered + sufficiently different (that is, they differ in any of paths, widths, or + height), then subsequent glyphs are renamed and a lookup in the ``locl`` + feature will be created to disambiguate them. For example, if the arguments + are an Arabic font and a Latin font and both contain a set of parentheses, + the Latin glyphs will be renamed to ``parenleft#1`` and ``parenright#1``, + and a lookup will be inserted into the to ``locl`` feature (creating it if + necessary) under the ``latn`` script to substitute ``parenleft`` with + ``parenleft#1`` etc. + + Restrictions: + + - All fonts must currently have TrueType outlines (``glyf`` table). + Merging fonts with CFF outlines is not supported. + - All fonts must have the same units per em. + - If duplicate glyph disambiguation takes place as described above then the + fonts must have a ``GSUB`` table. + + Attributes: + options: Currently unused. + """ + + def __init__(self, options=None): + + if not options: + options = Options() + + self.options = options + + def merge(self, fontfiles): + """Merges fonts together. + + Args: + fontfiles: A list of file names to be merged + + Returns: + A :class:`fontTools.ttLib.TTFont` object. Call the ``save`` method on + this to write it out to an OTF file. + """ + # + # Settle on a mega glyph order. + # + fonts = [ttLib.TTFont(fontfile) for fontfile in fontfiles] + glyphOrders = [font.getGlyphOrder() for font in fonts] + megaGlyphOrder = self._mergeGlyphOrders(glyphOrders) + + # Take first input file sfntVersion + sfntVersion = fonts[0].sfntVersion + + cffTables = [None] * len(fonts) + if sfntVersion == "OTTO": + for i, font in enumerate(fonts): + font['CFF '].cff.desubroutinize() + cffTables[i] = font['CFF '] + + # Reload fonts and set new glyph names on them. + # TODO Is it necessary to reload font? I think it is. At least + # it's safer, in case tables were loaded to provide glyph names. + fonts = [ttLib.TTFont(fontfile) for fontfile in fontfiles] + for font, glyphOrder, cffTable in zip(fonts, glyphOrders, cffTables): + font.setGlyphOrder(glyphOrder) + if cffTable: + # Rename CFF CharStrings to match the new glyphOrder. + # Using cffTable from before reloading the fonts, because reasons. + self._renameCFFCharStrings(glyphOrder, cffTable) + font['CFF '] = cffTable + + mega = ttLib.TTFont(sfntVersion=sfntVersion) + mega.setGlyphOrder(megaGlyphOrder) + + for font in fonts: + self._preMerge(font) + + self.fonts = fonts + self.duplicateGlyphsPerFont = [{} for _ in fonts] + + allTags = reduce(set.union, (list(font.keys()) for font in fonts), set()) + allTags.remove('GlyphOrder') + + # Make sure we process cmap before GSUB as we have a dependency there. + if 'GSUB' in allTags: + allTags.remove('GSUB') + allTags = ['GSUB'] + list(allTags) + if 'cmap' in allTags: + allTags.remove('cmap') + allTags = ['cmap'] + list(allTags) + + for tag in allTags: + with timer("merge '%s'" % tag): + tables = [font.get(tag, NotImplemented) for font in fonts] + + log.info("Merging '%s'.", tag) + clazz = ttLib.getTableClass(tag) + table = clazz(tag).merge(self, tables) + # XXX Clean this up and use: table = mergeObjects(tables) + + if table is not NotImplemented and table is not False: + mega[tag] = table + log.info("Merged '%s'.", tag) + else: + log.info("Dropped '%s'.", tag) + + del self.duplicateGlyphsPerFont + del self.fonts + + self._postMerge(mega) + + return mega + + def _mergeGlyphOrders(self, glyphOrders): + """Modifies passed-in glyphOrders to reflect new glyph names. + Returns glyphOrder for the merged font.""" + mega = {} + for glyphOrder in glyphOrders: + for i,glyphName in enumerate(glyphOrder): + if glyphName in mega: + n = mega[glyphName] + while (glyphName + "#" + repr(n)) in mega: + n += 1 + mega[glyphName] = n + glyphName += "#" + repr(n) + glyphOrder[i] = glyphName + mega[glyphName] = 1 + return list(mega.keys()) + + def _renameCFFCharStrings(self, glyphOrder, cffTable): + """Rename topDictIndex charStrings based on glyphOrder.""" + td = cffTable.cff.topDictIndex[0] + charStrings = {} + for i, v in enumerate(td.CharStrings.charStrings.values()): + glyphName = glyphOrder[i] + charStrings[glyphName] = v + cffTable.cff.topDictIndex[0].CharStrings.charStrings = charStrings + + def mergeObjects(self, returnTable, logic, tables): + # Right now we don't use self at all. Will use in the future + # for options and logging. + + allKeys = set.union(set(), *(vars(table).keys() for table in tables if table is not NotImplemented)) + for key in allKeys: + try: + mergeLogic = logic[key] + except KeyError: + try: + mergeLogic = logic['*'] + except KeyError: + raise Exception("Don't know how to merge key %s of class %s" % + (key, returnTable.__class__.__name__)) + if mergeLogic is NotImplemented: + continue + value = mergeLogic(getattr(table, key, NotImplemented) for table in tables) + if value is not NotImplemented: + setattr(returnTable, key, value) + + return returnTable + + def _preMerge(self, font): + + # Map indices to references + + GDEF = font.get('GDEF') + GSUB = font.get('GSUB') + GPOS = font.get('GPOS') + + for t in [GSUB, GPOS]: + if not t: continue + + if t.table.LookupList: + lookupMap = {i:v for i,v in enumerate(t.table.LookupList.Lookup)} + t.table.LookupList.mapLookups(lookupMap) + t.table.FeatureList.mapLookups(lookupMap) + + if t.table.FeatureList and t.table.ScriptList: + featureMap = {i:v for i,v in enumerate(t.table.FeatureList.FeatureRecord)} + t.table.ScriptList.mapFeatures(featureMap) + + # TODO GDEF/Lookup MarkFilteringSets + # TODO FeatureParams nameIDs + + def _postMerge(self, font): + + # Map references back to indices + + GDEF = font.get('GDEF') + GSUB = font.get('GSUB') + GPOS = font.get('GPOS') + + for t in [GSUB, GPOS]: + if not t: continue + + if t.table.FeatureList and t.table.ScriptList: + + # Collect unregistered (new) features. + featureMap = _GregariousIdentityDict(t.table.FeatureList.FeatureRecord) + t.table.ScriptList.mapFeatures(featureMap) + + # Record used features. + featureMap = _AttendanceRecordingIdentityDict(t.table.FeatureList.FeatureRecord) + t.table.ScriptList.mapFeatures(featureMap) + usedIndices = featureMap.s + + # Remove unused features + t.table.FeatureList.FeatureRecord = [f for i,f in enumerate(t.table.FeatureList.FeatureRecord) if i in usedIndices] + + # Map back to indices. + featureMap = _NonhashableDict(t.table.FeatureList.FeatureRecord) + t.table.ScriptList.mapFeatures(featureMap) + + t.table.FeatureList.FeatureCount = len(t.table.FeatureList.FeatureRecord) + + if t.table.LookupList: + + # Collect unregistered (new) lookups. + lookupMap = _GregariousIdentityDict(t.table.LookupList.Lookup) + t.table.FeatureList.mapLookups(lookupMap) + t.table.LookupList.mapLookups(lookupMap) + + # Record used lookups. + lookupMap = _AttendanceRecordingIdentityDict(t.table.LookupList.Lookup) + t.table.FeatureList.mapLookups(lookupMap) + t.table.LookupList.mapLookups(lookupMap) + usedIndices = lookupMap.s + + # Remove unused lookups + t.table.LookupList.Lookup = [l for i,l in enumerate(t.table.LookupList.Lookup) if i in usedIndices] + + # Map back to indices. + lookupMap = _NonhashableDict(t.table.LookupList.Lookup) + t.table.FeatureList.mapLookups(lookupMap) + t.table.LookupList.mapLookups(lookupMap) + + t.table.LookupList.LookupCount = len(t.table.LookupList.Lookup) + + # TODO GDEF/Lookup MarkFilteringSets + # TODO FeatureParams nameIDs + + +__all__ = [ + 'Options', + 'Merger', + 'main' +] + +@timer("make one with everything (TOTAL TIME)") +def main(args=None): + """Merge multiple fonts into one""" + from fontTools import configLogger + + if args is None: + args = sys.argv[1:] + + options = Options() + args = options.parse_opts(args, ignore_unknown=['output-file']) + outfile = 'merged.ttf' + fontfiles = [] + for g in args: + if g.startswith('--output-file='): + outfile = g[14:] + continue + fontfiles.append(g) + + if len(args) < 1: + print("usage: pyftmerge font...", file=sys.stderr) + return 1 + + configLogger(level=logging.INFO if options.verbose else logging.WARNING) + if options.timing: + timer.logger.setLevel(logging.DEBUG) + else: + timer.logger.disabled = True + + merger = Merger(options=options) + font = merger.merge(fontfiles) + with timer("compile and save font"): + font.save(outfile) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__init__.py b/.venv/lib/python3.9/site-packages/fontTools/misc/__init__.py new file mode 100644 index 00000000..156cb232 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/__init__.py @@ -0,0 +1 @@ +"""Empty __init__.py file to signal Python this directory is a package.""" diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/__init__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b692960434874b892bd09c5c70b0417565557388 GIT binary patch literal 262 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/bezierTools.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/bezierTools.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1379cc6767110363f6eaead88c8409b25c212b16 GIT binary patch literal 34516 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 S$h)bt$pgs@o|Ce#UH^YA+ux}G literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/classifyTools.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/classifyTools.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d08acad8b21cbdd03f6b947f2d62c742452fe42 GIT binary patch literal 5236 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/dictTools.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/dictTools.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33a6d8b665a37fa550683c88d6b8d458423fb758 GIT binary patch literal 2920 zcmcImTW{P%6!zHO&1Rchue6AZi3-Wm)b6GPl_*(NY7t0?fRu`dKx9oklU=7?+nt$B z$tHP#^k49jeasKw&-j(6{smsbIkU0%(o_PWjx{&WIo~;RZZ@5st{Tw3`123?+oWOq zg`44K!{#w``4J4v*fJPtk}dL$!AwS8!H%0J)|SPrO`~Ra=e`eR;IJ@Ij!Ke9x>=<~ zWeZ;fz(3MV*gb|WTQG2AivT)c0+z|FSH_mjY*vD~#L8>}<}$0WNth>Cm0f|k!lu|X z%#&<}&B9z|bL=Y2SJ*Xn9p))^gWZIAn%!dW!92rmgN}Cu0daH49n`@%=nR?xP=N z-^T$)QQmNkdGZ9hoP$9biX0iIX3sbwCuGw&BO5g}6{*edxx1n-BaC#Ii4x-)sCxccagd!bVLUUy-^$f&LaOx#WyMqSOiK68q;c92wj5 z$B_D`Xfndc9RN}$tV~?>%%2QmynuqB%gY4dt^@9CU^HH%+0m|LNX|A@nI)CTY{64e zGc(hDkdaW^v_C*`GqTCGCXe~Asc3uxTZxymiFt058|U4-LzX}g-*?xd1R_&5+=8uE z5>pz;_XCJm>HAs5_hZ`Tu(J1(FwSQD97tPKl!1O+58&yG_!!mD6_`}vDW8|myH|65 za7mwP#DsWl3%d3SDx=T`1Y>Q}5NKeyzKs~-CT!j&9|?RPy_$!@u-yJ>fO7JN>mtf; z!A4;`K%DQHdsYwP{C998#JaiBy$gPF7}O~zP81Z;G=-3NFy5hn%CH$@i9NHk$!7;C z*NLsIDy{*lxDG?j5*Q_!1<{(7_G#4N<0ib~`;sff^!?9(R-&B^QU)7#Zwy(mAPRKE zBM~%Q|BK6rJ3uGihoNR_jl>7|0^?>Vsz4RSqrNINIC`5Z1<@P+{7d{gVaVnO^ zqz|%NACJh*{rLm(yxpGz6P#T*#ipVuv-0zoIFH-HN|V$Z(_*S{2OR!C9R%j>xXcNF zMe8q*$(xK9M%{$Pb+({W#{Lz^7*+P2%d?fsH-#0p9S7?^DKn zzcEm)LZ(P};Fk-6joPeE`>g8w?SyqAtfo`G|Dr>qi`qH?IhF)a5Oqz%a22Sxz~54V zRa7`QU_BF`;(#?l>niTyYLK#eg4Z1I;RH{Tno}PD@N|+bUcC0IR-;tpET3 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/eexec.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/eexec.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9f4fd2c0681532a2878a22a190d81971c017d24 GIT binary patch literal 3445 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 Ly5Id@Y9IX#qOqpD literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/etree.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/etree.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0fcb12704a76d2841c214d003ec702d4e8fd6bc1 GIT binary patch literal 9736 zcmb_iTZ|jmd7d*j4rjU4YAx&Hi#%RiTG8H%>^QDtuVu@UWh=E;vL)YWyX-8_P|IC% zNSzt3w9K$Dys9l1u_L6n0PTYm7)9JZv?$V|=tGpg1buBDieet}&;kVvG{{4rDg<@E z|DPe3D>-i+V$Pg7_w%3s|NhI+pPY0xTu=PnpZPam(6s-cm+@-?FVEwS{!M6_)T){k zQg4a2Ue$#rjjC}$ljaXa)$C8B#%fvTHECDvx3p^_{M^)n!Zoq^bD`0%zn@z;Xdz^w zRcyOeS7>i(;XTxDvzxWzHpTPWJ6fn8)udCkQBrJ8R40OowUTt#t?FdI#AW4b8NK&% z@4w7@7pvv0XRs@n?EW|?Z;9&EyOZyhgDLg1V0U#oq`niayV`rI(?SdG4)zB7wsiIH z!QSeAt}9_>$P4WyO-{=46-}0d{aZ$LZ!o>3HH6$Hr>=kr9$ zZ;0x{q09OEC@=4q2QkYb?sd3&I5@mED<6>F6%G43g3<@E+Df&8vzU<&q2(j;VR;D8 zN9AETi|3p?A}e^#%SYs+crM7Ja!$@;C5t(Qi|4e;WB!*o-gB$Xw%6{+UMui|%iWHO zo8bj7#?m6c9e6Lcf_4zb=T#7R$IqVj8Xe`eF1K5rA4(U`g&?M?6~De7gfd!i-M3bQ zFl*9`yk;21eybJ8IjJl_n*2G3Tv z;GPM+vzzg1C-fd)_^ml^T_0axz6;FqHRE=BDwywbclXXtSoaG-)RaLqMg-sMh0R72 zt80dFpc;NXpjl}bt*GP4pwSGuL#%wS(F^NwvlB)xC=~Tp>McKtP&?eu4oVIy=Y^~s2ni)aoyjF8P@Xjb1fMh3|^_Y*tk7Lzb>BT`b zM;njh&01Gs#e76fEc}w+T3>L#BnhvG)QUS%tojcvJx9j~vPW3;v$Kya9G&%ou-=h4 z|7T|pMYGQxtL#Y&Cpv9nfYg+|b~i2Lq)R8pXqdVU)oEi;^i0d!`BpQE(_%9UG9E$} zi|P6*3Q{Y3xM%6@MWs3_)z6+z?>?(K^&pBc&}ndv>M==E>$PR@V(OmjtqkXPco#Hb zX_({bCWupC01tsisqyx!ucSpJJdH}HRd4}o3REq`cu^Mz3WA77&R2xm1L~YwuIOJH z$b4yMw3-;BHQHDxt>fNtnfY6E7@0t;3aM3fDXKoz{w1gzqVv%TD`gJ`KH-yk) zV@pf4nwjY8NTRKo*R4dS^2AV2L7Kpg3AzyFGO0b)tJ$1wJ)?=Z!fk3+4L7*_LV%T znj695+0E6s6E2>suXZ}E#f6O^+*oWiR~9oN{l>z#79%jsJWgrdzYs)=jSg@KO{2wj zGpa8#@GNvU)qR-sJnpE3L=#iO5vC~N?oZ|PT^MeoQlKr-;bTi~t(GAM@}*ksV$W~o zHHBJDcIvg7x*r4b_~~T6mwM1@q2dr#aPko4=;)bZuOSoBp?VJsOO(Cq^2 zD^_Y}W2gsF%xAA?PiY}v!x)vAKvSrE4|hb;rI~w#D-@OO;ApBNGSzWM)H>0n*3-IE zOe%d{9~j_WXu(8mX#CU~`kSyc678h+{(S=z{BIITw+y_y11qtp_TtjTIrMv5>Pg<7 zIo?Dks{&2pwXJ8_0nkVqI4=QXlBC zo)}|$H4~Hfx*&Bhj?w??;~r~gQUI)8pPITu%yLq7y3pdD3c4-8EUA!@?U30F3qu-j zcT)SX>*b1}ig>1l3lQ;6CuV|Gtm>|ut!f=rqiw0j(JJFTIwSQ>N?0a2A(l&>;Upp6 zqB0WAa)hlr3=&g9J%th?_>PNCf-V-(aY&ao!?`Ifz`4nAZh_JTMO^F8z?{m3hqTbP zP-SXe$_P?7rl4m@LwmD;ns~Dt%#H}|s|!6M7<52~)xhi}g?-F=?Euz~+@{xw9&D#D zhN%Gghwww9J+>SG;bh6dav^(-Gzp9qzt@WS=%PS1{Z_LNGprMiW}VGOpPl1Xg&o)r zWaZERGpljCH3Mzr&BOrrnYrPx`J56ba{)XhM}y@HU-8j`b-?zbmrvCTOx-LY&E?=G zn2cb6Yl#U>WrD{c zDW(OOuCV2T{?fVZv?H!3j>>DiHfa?)XBAxR1;_&gShBZ=I|cP_9Y1&C^y$9!#`#n8 zPo*XvPxYNQ&dqbNBAiNvTbWe%BFA!&TFkDg)#_Y=5$3+>w|cpaXMrzKRDe|>!MLea zBLPn*Y7q4r_fqLDtf6-D#S^a_fBpFR(`S~Ur{hk(X0#kxZc$pU4LLce5n(2jN2{4? zG+P0I1U;#_dYYE@3?*bDrG;GL($cszR(JCP#;K`}Q*-+w&zZX0Q>%w)uo28~yN^&5 z!JF2!Vo7&}p8bAp+orw;u#fkzOv4nmaP++e69{DLrta!ws7&D=8ZC}q7X960FtWhQ zs#wdXmX}XKAI;L#M<}UK@(3lgPW31y+xW*zBoO37`8{M9|1gi6bC%HlhwJKuUc-xI zljQLP?uZDN2-Y`KG3%eu##4tLvSWj^)0&ysL)lC$NT*FQLGr~KXzc`;4EkkuXr#}M z93{XK)KQOoq)tx_t&SbQImZfS1S;dF1#o4E+r}03EEZd_ZaZxCDoWKdRoSWD?4-^) z_ES!uNeeG*LJgii!!*c_+5sPK5W51>S*PseobAC<8{SFa-=X<;W1@e;9g#bsP3*_9 z=8QnkTehR9Mf0n#rnKHPa_?&M&cuAFJpaJ2ZvJHcS2u6I-#f6Q_?Oo|nE&O?o5R{V z0CIFuesom7ic>)Vq1-_U0d}Km`YE4O}so<@4d+dBd=@0~w z^)LoIS)b9N_Sm9eFd4a@G7|PY@hY(0hy*yP_3-N;t6(CuMv4SW?ZVh|450o$d&H=Ioe%%nM8KAS_1mYNP(| zFqh>!h`c&LmQ{4VJnxQyy*HpUhx^Hh6|ughecaKy|ITp`Vc3izeI;NRuXoyAU_Rmp zPkV1<%78RDk1z+Kc*}3R@=8u$l+$`tr!__;$bb%}N~iPQC;2qlSyzM(X*qKV5qZcw z_UruhEqZfYIYVlGew1L6#@R^N83}(XZMY(U$k<%75NiA` zjCd=2FE6oC@}tL4eTW`5qNwuv9h;t|Bmt}hUEytlDwCe zQ*nubwQu#}2K4`K93M#m0(ZG-uigfsPn{=n@3;t^&f#WvSPG1$FP|Sfw$WWipwwb8VEfG^7NS(V5FwS*ZoU*c2xBiS=}miNCEqhqtuCl zV4ZVj47WR-JP&L5^qIF5dBiHUWf1#d=Yo2LrssvxLQ>JFPG)tr6`nRV@JtJrvW{a! zVb*^MeP9S`(d)=)h7Px}q-SabY!8dV7IUVfJFq57uqVj5v`vRnp&Jg~sgx}a5)!n> z2&lJ(`@fVb8Xq!O-nOM`ZNIxiwU9+XUXX!1f=UNFNUbS85l!tA?PKj@(a=fFTyX|a z4A-?A2Ub}iR=xmAA^ zE$klk)8hg?VTbE%Q)}0YJliQ)(gs8fUIEYbBM2)CE|2&Rn9rd0sD~J0u4{>zujLx* zkf+*<*RW!9V4;=8t!5G{Z#9Ef$aAZitKur624vAJ?;sOLdO)JPh)h32(*KLhX(v*E zWa9Vr0~+JPpR-=p=>58oh7>n+YyiZ%3Ui7=b%Z(WrX;a(TZxorY+i+i-phdi%z&+N zdkaodk{DNkK1&qR`@Xc{Bq5r#SG$UXS<)_kP9&xr1rV|v(1WzUwfWN=2chX{n;D9* z+!vPV(*PLvJE<7-%`iG7)wgJS)}iR>LlHQfU^lf@)NM5pJ0VY9QHcSIJ1w4vJDceV z3gD0r!6tNS^i(qoq1dqH8qLd4mS@pIouPyQfw7>7pm>eDyhLI^Q6~)oKoOMvU~^)1 zN0ix#C$o8)&FGToAKd2XXd5s_gH>D(*QhLJ(4aYYAxR<3m$3;bB}M$MCMltnrxpO9 z9l>%mDfXbqh|bn;tOuK^#ipYAfJ%As1Ip13)VGlwqqS3%M>8R+diel}rHfw{4RW!U zEG7h(0KYvfwv=-3I`P)g(SY?3Hyf<0!@Wg#R|@DCoA`vz6CdM# zf;tm*Cs7BH+)?*K(k|dQq25FdY`hSGwgWUOm1+5&IxiZcMBf_*9Dwn8;&#H;>jL%r=}8@<`_(bCCtZp$i+l5 zfw@*NS7|UAmy=SwYfDG#=dsJu8g?=$g%0H@hx*C9UIJ>2WRhBd3X^D4OeWE05^Hop ztI`22nH;Y1nz-mCHc=0&`T^F6UYO$-Xgk5Qvhnt}cTjK7?bO3Ke~&&TqMe+`=tq(& zF*8woZ3^T3n#VytI|r7~@^Zhp^x*vbp=f^oSl?cH?ojmHv0Gwk2RxAslWD|im^=jx zjLoqsRuSHrZOQz)e7g=>LG4xaSESeb-pHn7PkURohRPTpN3NjZE%9`J(u0Wr#E71q zITX$CG=0a*UvG(HeSK-MuP+{}?9Sxy1N6(}jxa?Lt0USTM0LL#)an#wRK)f$7CEA& zKBSlOutD}UA`3oWrW%uCX<6WYT*49du9P#gU<=JM#3AfS?e$9txMiW;OqQRZ2H&A1 zp#~Ps5oPm=^;B%!PAgj81_}F{$Y>C966ig2>m=f&r72IIzAj2%l@0Rt_fk9kKHgS40B9^JI~StLq{(F#m!0A=OWIVHzzjc!7+DN4ZRne;x$@fK zy5`F3mNR zM6H9!WV(AusqrUMjoR+;;0zRuSo`~U$-J~Z8Z?HU(T_CKnoti@O5vzz0fwW#4@^=6 zi>(>z7^Pfu64U*^`WQR~mL*5N&gP@i$#)!XZs$;{=9 z5W43v#3ArR@WWC=pOjRyt3IQG7m+}`2y_q;#W$B$Dw?-57d849BG-OoG$2K07)&ve zOo6o=#1ONgboC^fEF&I>>lAPo-L%S4jssTrkG_#E&^OWrGHm#hDSPtjWi&XE#?0# zfZyNfRL!&ReB;R~zP)xgyPNplYOdfzZgr|A5izMXBSdTQp*xWHmjMbGz0-+$2Y(#N z{!^hS2%s3xi7^TbXv~yZ9l}PXvH2B8@z0)F*s+)K?tCTq4}`Jj`L=Ajl5)0mSb*oV%3ShxrrQ)I(2r+_JCgoqu3Ldm2c$ZkZ)7)pb}%eGn4 zrzXmdUrREgHSns$Y>jqBW&!+hpvMrIQJvQ9XCQJbIkG`YI8kqkXsh^-N@QRa1;al!4B{5lc})$HfKSL1wAe- z8Ckd!M!XwJFXSVW>juWj+52~{-C*Zf*yFa_a&4FdKD*e7qTW)Y(f85D9f~H{{D9k0 zJrL~%h8#jGZ1h{fxrWSvPiA4`()*^-6TtwHP=Aa+uqb^L52VL)7xwK=mO%10%kFnv zv{-|{bwcKP9&cNoVRtNH*%5l2Wr8EI1MbL7$ONO&>TbGi2R%&XJvpb@uC0czx zQC&fHviRa|ql-`7YP@9$=ZbI#ym51<69sS&rnHU#6OfKf6cj;+#`A^)6D4}>nqj95}4MCa4$}vc%C|=?3Pt2CyGt;GrA}YLT))%T+G8D)qW9~NWfigIs$Sc*$gexQiE zPJUSOr(?*3>03F`i%U-af&z`=UNJ5a=5D|3l=dL+t3xF!$N95LTsW%?%kW-|%j8}9 z)?;N)cXInGdYBm+u|Xaq1HF8XNDM?^#5#N$(&t~C9DM5JGuC3n7w4cc5l@g+tPYe< zRG~!^G3t1q+s)HE%tqPTMG99^L=WW(2dIv*oJ9dd`m!YQ03)!5wg4cuCAfS^z%{}x zfctmFEkl1Ia6RVfXyDSDqK#Fr>l8SBU91{LqP8UQ!S#Fn= z$1W6M88TWp61zR`afnR8w~lUlg16iUOYEk6QXV!rLt~Ho4sa4O?V5+urt4w9B~5P2 zXJ%pnw7(RN(h35U_dSQgZF8UY zO74)StLc^%E&)1q{nDjN@)M9=gKOxKYSkHQrpA_+8JR9{g zvGn;^pC7}$HBv|A=*X>6FxIhRvFer=jS?g4M|aUYWYaW{ZPXlh1f!-2=~!K@j>4m^ zR?TBr^=Bx;^>LC(IL^GRn{Q<{>!$hE@hmzA7M){^Co)F{R6Bb7*UW3?^{k6)CIs{P zapG#3Ez`}+()!U|H7&azar2#e2>LXNvT0_mX4ZVPpSmAJ4sT_>o0)X99XRR8hN?#! zVC&BeR?Hjb+Hvv%$A`XMb0i+!7ZwR9;wV6p$oL@0hgITo1Iz1=34V&?U7~5gD~kcr z!3pb+XirbndZL;_M|Dk{LRqUMh8qIMBg?mWl7n($yhH9Jy-0GPnaQb)V6Tk#siYv; za#Bp8ILUtyxX|lb4@R)J%KdiKNeW@lbED+ch>nk5he@S_4a(yyM6DMPMtQUeCFRjR zlN8e(BPpiaKvGHN%y%ViO{I+~>>Hr|+_{r&W{E!DSCfg*b8S9~sb`5OO!D+d%B{ZV z5l$bXNW_kk)1!FS$58$f+QaiGl*@)%*2-!*H>FN#d08)N6}7BZR0Gcn+9pvS$&>1& zCT3yxHF7m3!+*zHkgJqRfrdybl_$EjtAdsk&fvg&2GnaSFK)(PYabRPH7TSFG-Io{uoaT%iEv&Mi=`Ksc6^z*T)9VUqU=)?OuDI^i8U`7wwe;||GI zc@aRSo>iwMT;&PQ)YAa3ikesR1ah*hXo5l4#tI)_Wzq!YfK-eN5|BDEogRx4;55Jyo&N}elz}SN|_2S>>k)~Qnm8b}}@NJw(7A4y1%SRnt%)XHC3{Tn)HRz`Zts7kgb7GN$G zsd&MP5&u<&Y72YLjiM#%7*|A-_#T0H3QIJScQe2x&a%*yz znHgH5A@^cm(|@2ByEp#q3-u)ma8R2*>QrPm9bpza(=vd?|a|- zW*i(p?mPHf`})rT|B>VTlOD2vc|80Qm--_Z8`kNU);?ipV{>IEH6HFHhu1KANQmDC_je#F@Bt%!2LKs$xq>af}iGR za6ifC_*vXf@pJqg+)wlK`~vQ0c;UWNx)?moIgY>47OehxPedDoo?xmc8eubR1Uif( z_CZ_go~l(UJZ`9RH*CmQ#Z6sq#NCRBminrq2fer@gI;@3i7^HqMTN$w#JbtM!UG*F z(L1$X-}1R=hLKQA@5HPb?h3xti^E7WYQ;>en(x=^cj%{j-S=*?)s>~~P%{;_BEiS{ zME&lzkZdQ^Z5FWVRYvVFuv&s`y^iR@7T@azttixeE*QOyBfMlm#HoE#1`S$c(4nrX zOcSr%{(PglW~Z)R{dQBYyyeVm2WR#-Vy61NUMw|}BH&@vGFI-$P}6tgAG1>37D{CN zwa9ckRID5Gen+sLj30(vD8Jc{%-R%d#u7`99tvqj+7^08h$!pHMb_-Zfpv@0lID}5 zCoxZ?4G7>Gzg#wx)@tmto4?&k{N(!{VW%7HhTVRbJq$X10edi3BZ!#NVW)$MGz%lF zhM`let7~O8UoBt9-|DsNSJ$qst^WM|lK;|0Hk5M1*;wC;`w<^ribMbt^k@B!4iU}! zZTJSy_h8vev~}*5{Nd4zEyH65P#f_bS`41(h9`p3a4!2aYI1t~<$W!Oelmvn4quG= zpWgpI>OChS)tBN6Ar&z6iTX5-TEi1?Gd(8#T4d;7U%k4~K$@k0^qpAX7A|!RAA8_{ zJ$K!?sN@ZUStRv)mK9FC#P29kPy~WE0%X z3mADH?*^2ds)j`Oy!G{U79uSHd(7ER-Za^V)}qAM^Gns`>gx5y{Ta!i536gXqyzOW zhpN$um6&fXvZdwn)#|lttM9L^U015&t>dV2ztN84PNfXTKdf}Z?MiQ;+i|p7zFtwG7E8UL z@gQgkRcXc%5EyqRK3AXTD?hWJ&CR)Iy3^dM|=L0Y)pn-wODSXi>P|i9}Tmuz8 z0TlxYi;fJtCdl}1P%$tASf&T``+)>7#K0L#$9ZQuUW`FWg3TX@^mLF|0FB_4VTREF zYp?HTQR7OAm84kg<3!HU<19XI;2K4fp2wn@#|yelG%w(bP5H+;it1jDBD$AL2;fhc zCQAUXjVcwhZ6J;XtssoZWgiW)giq99T*iP41HnZmiDD@^L%nF~Or}79u4y>mqvmF2 zGjLL8q|I=a(9cAIE4I@P8*PSyBz93;I|C$KT1vK2pbp_0-@6-YQM0vdVIfot3ru|3 z50Ro&uwhEQo}`b#;rti~Od^*`^*XJ7g6T{{z?bS&81?$vE^5N?@5^>(7CVWSL8OR7 zAy+6i#@F~hjR6lOz$zFpf%e)6wJXGm8R(|uXvyvn1QWwHtL&%fyONTi;oWi4TzNBV z%Cms&i@ZFIn>>S$;Stq9fF^UHh@UoaDPk|@V$qfK=0G;2+;$nij%ULqhvz68c>b## zc&-qQg&aKujH66-A@Yp#2qGJ#n25v`NzwiMAmP#u>?@V%jkI?< zsMW>u)UP7~1&x_j-mI`2&C0_T>Pm^`y#pzRyrBArbc#n=O38F^L8O`3O1TQPXbSQo z>nqf+dVQ>3p$OLN`?WO55y+R<*39=t*m`f|4LAhjYCT}86Ym(U4Ee>$N?NEwkw*6N z@S&9zFojbtk7p$%p!XZdQ-z8S5esm12A~88ltJ8Qk+1_QA;X{(J`xQ6=pkZAa0?VZrIBYG#(1R>bc*6>pe^Ev`&Nnw+xSKOgFl;Pe zxH6Ad@*I7n>cv(i+KGON%Vy#QWFoyeJQJxdQ9XL%qAsBx*{n>}#?x`NF=_UcY_mQ% z7};znl40g?2TvdL#*|@yuzb3EEGm6guq}Zxfx1@t>b9xlO4(oK^lZMJG94u zbO8Yw_h!aSx!6oL!IkxTmY=u7D3AkC8qsqyve8jArtevsQ%z;;14$Yp9MC$cKD4R8 zgO4nCjS8~qItrLJr%BIx3 zg`6QvQblAs@5^;0&jGHp$8_I5A-{8hH+pwWCEq78GI{(whcKeEJ9YIY)4rYA}y4bWruckv}sh5xFP1 z$F6pt<#--DSob-OuJ_!>Xk!%nEINN|PRKx(+6cGgY>ak?I1TJa$(e2k2WP}p=>hb3 zYb&nNMGA;#@P;Do36%~GhBSa692?2^=$uzVrb7EeLS<(%i2z0R2Qc=?7-H~rfTTef z#nShZ7G-Q5Ve#ld75f1#8eq9FBhM%swqZzW*=TfYyzh15_yP76G13=1kq*w%%E&nk zi<2rB27=S=Be|tC3Z;dY16&WSEMx0?Pt*{;oOggTxBx zbe4xWQ^sNKSY)iZ6NSTQqMK7&B8y_B!fmMhMl5k0sI9`!i?TkN9FD-HEuW6QhmE??U%<;`)+FyDz=!`YocMu>GO zXEe`dF%mmp&^h!ZJ0HjV|G=fl5a(pk_1%J-a|{0| zAhn_zGt49Y@)F(~AC=sx(((j;|AsteN}qR`N*}!|%?)R_w(ws^TU(pH(R=1R)Sjb} zdxx_KVhiybdM%+p#djfx#jUL<=!&f^`4iJ*YYRDpC*mS=PHN(BP8H0C#^_j6Y7K`O zL(TLV447I?M|H#E2lhWp)+xk_>Uv@Blv~XCx#EdJzIYD*eq6jVN^TiAQ1-QpH Awg3PC literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/intTools.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/intTools.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b75036e0e94b90f9d23e3a65da375309ede48007 GIT binary patch literal 837 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/macRes.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/macRes.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..82840f0003af8f96d1a17dca15069bd6bf5fcb12 GIT binary patch literal 8722 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/psCharStrings.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/psCharStrings.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..65b4cbf258e4b4ce70f475120bc02c9486dd0910 GIT binary patch literal 40984 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/psLib.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/psLib.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..688e8022ece28e0af58b57f1931871ae0b803913 GIT binary patch literal 10200 zcmb7KOKcoRdhX{;PtR~jQ4~p0vfZ{UStCoL);1jPLaVi7OKS%Pt%!=(+oD7dr+UaC z=cVeVWYWWIVmdi&vdLmM2$D?@PzYea0dfft z%L=WQ9oj7?bXsocn(VWhxmG^Rqiidu>9q=Bq2-5us~8qrrLfeR2q#+Qu-uvqCtFkD zRO?uHtTi1@w~mL$TQlKI>qK~>H5<;#TyAqNoWq>C=6vg9cv9N(&4t#f@KnG5ba*;C zeehKD^dmETMtNZn%^f@&*{TqoQvSNVZ=(G<)Qf|9ct$YJp#6E4R0*ZCY9c(R$_Fn* z=MK(4GSG5Pu+E`W>CZTc8K(L(Uihw|j;ZNS4K*FTxNnCSQ9rI`P@j?dCDc!-S=48v z%jjQ3eNN4zJ|7iOzoJg6g-?y}8|rCwT0Qlt8NQ_4Wux-UV^Y21runs@?bGKIup$b(2n<=!%)TQS?z%dyK;|D&@3zbNRh)q^n6s$LaBIyt(eJ8twJeLt|Cz>Q3sTwASe~qblY_Sv6{jG&b5vv>s_GHya72YYIZEs<))juC}7I zh#{T+x6%?SUEQfgYFlSrtPKa~2vZb*gEeCjOIWw}X0_R@t~Dc+{f8U)Ox&&3qPT#K zoUdHHcIWQLduPAkw(i6h;N1&xiIsbI@0_oEym$55;@LQlhO>9>`4i}@qwE(}&ijP| zp9~c4+&f>ndm#vd6+9Stmt7Tt-jhfx=ZVxGu_9Oml?wn_Gd@u9zrdFaS<}@!vZgDS zzWK(b8`VqoyBDt2*m?AiJ9r(BU`9r0DkHR%i4(Wd(#_@Dovo;SUF(is`rJ;v)m74V zbv5-@S6dym-DJ76x_W=R+RS=BH*|pM1bq3yVk=UO>f+lt;kR_-L9}>tXCvvf7nf@r zIN8O^52E&i#b#q|vAdIOblNXp{^nu~QeOh8x2o$=yjbtFliNUz7h8?Ew%Co|ZLD4H z?&wqa#;g3!0s(9Pubt&@E@zw4r#U_t1<$hj9KbKIAYWkZi7yOwk3#Q|cE_n*AUC#} zQ8|@I$x)svK&IR%7v&>wvk>`sig-$!g?di;stBx!sEnGaN@@bNNmW*p7&E1&)G@pv z(>Rk8lpr~i#%`o#X{lR{YmG+D#u^5HER!kU#1mfzNQ|DjZ|<2rvuCWDiNzX9IA}my zS%6ND&{YOLV=rm)#f?f%yLhMe+IBs)n^8NpyPY`A)ta3+QmGg9rM6Ds8XDTr z6@p+0NKJB1quoeWSFfTbyk=OQnKOMnIdgaB$gVCAP#^yn{%YLE;LkyUdy{?LLZN4D z8oHdA3j6s4yHnP-5kHN$y=CZg=(YB&_H<&SP@!`qcM>o=^E#-1&EcX~GV z?(F{At*EMkY7(@d!-5yuF9f2~g1YXsf@C8KK#h8&F9sbQG^02U8g*%g7EusI=!!VF z{@#sXEvk2P6m-^-D)!!9Kb-0^(B7#_y%7iPXuX<1I5=OY)ku;^T?{x`02LIdYElih z+exD-lL8-IwT(z|lHJqqEWQ_HYOc{~2l$_zO;B$%qwExMi0477)PKL)+>V6p^*J`! ztwvkFfRY?r#nBhoYPQ2%J9@}-Hud;1I$YLupv6-FhMO}zbISCrX+Rv~)X`%kYK?3( z_+xp*Y@x`{1^{ zLa)%X9vDA1^-QmzP|`P*z32A|d&Tx&qs7^>bWgcxkx~2BLGF>UV(pdoCOAuPLO8G3 z{(a!)fctZm2d>RNaA>(#R>roWKTGloEwlJ0_`CcybKJrlg)Iwffil4?&e$yfidl;P z>ntT;l?GVt5OYq*oG+;|=FD+UH92Q+b?vg68nhj*7T7|Obv=sB0KHj@?H}zF#HSR{WMztws_pG$kI;~dJPNe00 zS|E;?@ZE(q$WK|#;5S&$ld^Ifrc_aF$kN*_$ht=^RyC>P5&=`()$!v?V zn7%WjJ*+t;!%`Dg{In2nHM-(MWa38Y%NU#DpsCTIKfBeo7&1*h&W28AEHBbZcc{Pr zu$V2nRZVIeVR^XftX}HVL~7L0N=k>4o;svPT9EA|JKc!h8g`bNt7*O+eUymox5g!{ zv>qkw72NM*jWIQ_QSi)?>4?}(L7jV2CY(0QQe#^Q|H|lf1Vd_8*?c)mQbm#d0uvlU*oXxa31Gqaovfm-<$cCxqhc^0YRN#AH z!~0eYjh1OtZj}1Iuj}=@z=8{r->AmbB+*jO4(cWJjIXf}Cop)7Dt?CEn8IcVYkA`b zGQfi-$-KDdfm$*3MZTu>Q+R2vP(MTPBEdHZUM3JBeFLS`%cSkr_0-K|syLK5v=#c| zhGGe_)~P2Ou=TgD>vuS|IOGbnkb(3P!A*i-6bO%4;Y<-e}zv&(s8a&<8a_PrOef zEcCrkKPpD02%c#)S$D+~HQ|v?tK;I4&ZrZ3Pperqhxc(cuTJ7UqZZUDyiZ8{XoRzf zB%eWjP6g^&yyw+(>I~i|)$`!ubLqs*<#!O#>8_3dHP7e?K_9veuc5bL>{)nhab^v; zZuYuJ%DPBU=F%q4K5LL1noLII_?Fdoi1MOcVJ#3*g5hghshhnDj0&64gQ%%z@F4`F zgD9~Kf2tYp#7WfRsJ`CF=J5~PLvK5dG%=2xt{g16>re4yj*}eb!21Q?La>g|VCVsl z2-b)uNibEWN#MSkiMbCYL-+S;_O`DIEfPc`z;gEC@GIx4k+{l*9x+u;%G4>Q%A=f1 z@>2Ft_8M?D&|csi2L(~9{v)eTLqDV8m*$<+Vf_51c{j6nPNKJAN$S;R9EDR)#Pt(5 z5XrsO&`}Ms|4yZ-Kfn$&y-2-EFbyCkxmDeYBmtlqPwOH9)sUVb#zeeb+Zu%Raavei ztu?E0yt>-gY5FcvgCP*wub}$pc>1*W&3U-1G(!BhdwP`iqX#__R^>1UW$aDPwE+Ot zX6>7A8Fzni&rV=|dN!OP2jP{IprpN?t)Tj-+m!_uk98=$EaXTKZuI12dN{57UeDTe zG1JtZ@GPkAlIHhs3Fq2Nk8OM}wBZC)@~I8wp5|d1sV-B$5jWak;C3z2bHK`I3DT@p z;|QeD5gK6}=-vx`Qg@3)OC3p+IGiLb5LswBPCbtPD?D)-zyQU3a{-XXe)rTU?M4n~ zgmgScK0>;`M}ZNkm^I6xDAOX?@Un$nNrFvxFSmOe1ftKJ-}8E2{ObLUUS2OTRudnY z9=Hcj+;4mIv03W*@S06Tez~5%Z-RX1diFp8@EhMV+V7iC2jb}?)&TC`Ciw%8N@LU7 zEC}?KHBaHPHvP;jANCCT=j0F{*{1P{@qMFhUC9)Ty|jxIMF1_<(ckhf1xNn*XJh}` zwQGDGX$>wtrip_%oWZNFmc+r5_+Cti2R}9Q&n7mIEJMnrv$hE_5;KLUytAIVDq7oK zKlE)dpTu$wgGb%q)LjD3r|%PJg0~2+1JLwxW}W8xa|i4aKnY3<%(;n%{yD1g6#xTH z0b}=^X^A6869q>OQN4#ZAL=*9v~mmP!oNF(-MLX-8O}JO?5X6)>B1*X6hLt!zSlE1 zO@Wp&x2%52+OqXUs3;hMP3MthH#SXu4J~dD$yJ>G26|+KzD+}L*m{tsQE2;zxP388 zCx&T4dd6XCplevGcsj(A()=Ln=!o}R(ox)LK8PeYmbwoZW~WYfJKjjkHH7d-GLK$; zyIo5VsehiiVEQ5E8y7g9%|GFZsT1jE(mT$XC6F19H7;}`Off=CI)y`G($OI?k^BHL zp=nBz_COvQger0S`j>zLJu1Ah$8tX<;E*QLoI1$PjYkIh2f+O|Ji`banqf?lUctl;?k~XN+0d-8 zYzR~lGRv{{J!SFxc1u)xeGv^RuGpc})zvmq%Hs1qhb5#oe7=E^Z=oSWGaKV))kEJG zc>11l4yJ|P^6tVYvmfP ze(xU-d;ccug%&eGmcQtk2jF^0gtvQvvniwJQIlaDau(3Lp0ehku|&HSV6ynFbHmyG zB%2Lc1bit6{Wf@(jVlH;EnJ1emiE*r-ZJ%J8F;w?p0xObk;?;3`K5VA90$Z?m$2`2 z;=Kovt~WamB}0`u^+sD&{LE;HjT&YvS7~^@XT7%7N2pCY@mZjIG4)G#3P4C79L8Ge0?C}T>bcR zn7hVBQkJJTB<4Np0OE7~u;Pgi4n>8&6RqgLrPwz!7ncDMf*f*{{vCo~2*ev=1{U{K z|HG&I>h1sZX-S~Ur;#+~r?cqF)Uzyq)%WSbpFZ;aF}r}RXYtm^=Uogc;1N(BORK&OzO+!@q!9$PM~LkvtDi1EF@}COJri({q%Q*>r{M z+kR#}uE{rS%xfokxOSwkx1_&~uOII8F_|DWuSmlDG0&vprH)*Nxp5bi%#_Nf#L88> zU4)3Kjq5Z0Lry~?K?l)Tiy;nk2rZZ4j(G?}s&MMG{!R7;Lm)@U2=N(`kl&+)C`qPe z#(WN}Jg$2{&|$nfLQ`^*jYnwu+bEEi;HEB60aHW3W1=#~zR_c&XAQK3_r>fA6fv{v z#Q)a)8$AnF7?cu^OGeX!!f5Njp`}F%15}lHm>2D0WKL=>YQKh@A;OYngdQq4RNDEa z)ciOLEzCWA56jaZ0_-{)+Z*4h6vPtiJ80pZL|6YFOL>jhO+)yPqn5=LqA7SkG|=WE zjh_%339#;0x;y$6;*-9jEF^!$Ot%B)hN^;L1Kk{6U;tXoSdB?OHs%zT*Air)s{XK{>H zJUzTPfqj*05V}wHCQQTwl+X*op%GwP-RdWyf%|PlIuHhDX?IcrXWUPyOnGNEHlSaG zJBr%Y#UT0!MOl(pP^Bkm6>cJFvLOM`C=Op?sBx^amL621$^4 zNIAHfJPkUavpADor2mhe2l!)zB0L0AL>T`X3Sesl0K5VqUHWW2fB$(J(w-%34P$s< zla+zTivUn%^w@HmtIC*;%&7m6fQKb9EX*9G9Jh76+}1y1doToYunN_8xhonr;|RAQ zK``b|K&FRr^2pXO{LmyZfJUB;4~$E+s&%RWfHEkaE}+omzgG$ zQ<2d8B@7;4;mc@4{M65YT8_DUe3a61)q?AD$>LNNzB0weXk0?lEHL?qRdG4#Mrt}# znQr_omPQSI7Q4`PYFaV<8UdA|NNh%IIR%n3OXCGB9ReZr_t5qTPka#oNjBf}y+SGQ z%AV_aOt#6t|MX9Lw*2$G6L=RrUvuOLy_pgivJ#J-*-j>FdDogS=zoprDz=e*;KI%z zo<*DsC)I&q!GT5aAGALJHg(|-m9cKZCdnK#7@6b;HAytg?ztF=-kwW;4&z;nzlRoB zM2!D2Zd0IXaqB5_kexHHU2Rn}6c*?{2@U-(mE zy2*AIzk|r>eb%g`%Ugnnf@*I?J2Kr@nyCZeuaI39P+*QWyB5HOAv`Unlo>DPOijEe z^L}(DhNS%rl?2L?f%+p};9B}Lj0Y>HA zBZQDiqgD-G33xPt+U^F6gWtsj;|aB(yA6~GUNUZ(+etth2vQrm1`rm8v*AZK7Jl-Q zi;+~TZKUqH?re93kF`kN2OL9&(3FVO!GXqd_GwOws=&=uM`y_fIVc3d+eEJr(42%G z7r>pSMY!mLL~fX8GZIx{URNKo92N$M@t8y+#g4Qddz)mJ%+shQFnsG66&9O?HxBG{_xWSRNgc-IU;WL+=fK zqNM3^X4yx{LsFqi9x{tP#Koo|&(su+QRaEfu*AqD^Mc8|>13_bY{C*E_>V7F*J_fg z!@0Sq=oAr)uJw!lHE9p8Ggv_GX&IfnNX6%N6so>^;v+_yPEy{ uhmJ`06O+?8n%AeYt3J>6EytRXD?i_M%DDQoW~?c5%AQ)E`hjuPoBD4!h1|&i literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/psOperators.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/psOperators.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..499bd27759851e5933efc47ab98bd44cab0d0fa5 GIT binary patch literal 19046 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 D@gR)p literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/roundTools.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/roundTools.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f91b5b9c56447d48cb4bb02e07633065f81f0be7 GIT binary patch literal 3103 zcmaJ@PjB4D73YxLzm^=gO)97MVPM0J7L|6TL~az-RU5=Lnj&=!$?ai*KpK&=yR5jJ z^~~(bD^NfY`Ivr!_F(r=z#pKue2AP`6e!R`(XWtGes9Q?`~|FihV70>%OEiOMH7Qe)6QVg-z_hJ_NDeE&g`+eWdK|hee^HA1auzr2$#lc@$ zzY&LV?U~na#`U;?xg}cz7B}P8GuCfAx*cBueMK(eZ#iE2OAs%|SD%IbtFgcDb>29= z-TuAMiJBU&)ijIOty)hqD~D3^kxVC2n{NBRFw1+`35!Oi_UNmkp=?RC$6|gYOS1yg_`XhNviE2{ zvMTHCMwsqDS(2R)Nmxjqrmu^39z8>q}a#;2w?PE6EuM!9u& zGS@y7eV+^=!eegzKi1Z8jjWxRon9|ik?D?;NGqcTwi~H&PiE^=)3fu5 z8fq~a&3g)}v6MYh-BWfZw3bgh>1dI%6NfMwOfPasf^d%c9(yg@reLOG);x( ziFJ`l21%u4pwd*GkQkR$B8=5AbU5EZOk1RMpoNQ{NEccVw2kgv4k!318IGi0<5nC? zXLcr^+G=-^v!7Lh6q4~B;=rs?;!s+qF)@6AwM&_^s*H!L3m8~>RuzbdA{W{rm5LpK zbzy$Hh3rqXg!e9;m*Qur81Vh&K*8A$_0a6V)UxzeoxaWvr@BhA$<$ti{IUgP@}9I) zof-0yYPV!@mLq#kTDRT$54DHq{p%N{ z7Fi^VnzOjys0{zMHKc3}uLB&9HJPTJ$aOskdWgR0^ldDt$B#XI&3dta&OT>u?dzKs zJr6oKuIberwDtcG*f95U7KeX=t)1FKO#pX#dyl}8s`A24KAr*%jwI?HCeLmDCf3+6rf+mkQy;5lx<7woK&H}d+iXTBuf zxR%%R#&r)mNGE3Gs4i}y_*{ahnHD%bo~AaLq>_-ejE}>KGDO^rl(q!tv5XSnFh_#| z-T|GiNzqLl&tqz2x}D4drre!iN4Oa1B*lRyr2^IPN*!VS5EYRv6rYTeR62_T! zx5586fv=L7R0{ZddhTkPW$^ouWN>Fl$ zJk^pYtLegdI8_-{q595+VB9P_{6pNqWBfA0MQRaF+?%fzFvWxvIEAH6r@=;d!-3Rk zc&EEPC|LKje&9h*-#cCeiy{}oN!04V8Bn; zi7EV475*qGg2C7pEa}(r^DHq)$ literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/sstruct.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/sstruct.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4db9abfb4f95d99be01207026104d09f9e116da9 GIT binary patch literal 5959 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 Or(E(Jzfo;g?f(KBPHDOT literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/symfont.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/symfont.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..81bab9a6c5480675d3083da306a9e804aa902c3d GIT binary patch literal 8009 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 Cik&3@ literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/testTools.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/testTools.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a589d8d1df1ad524e415576c342fc53aab28c8be GIT binary patch literal 8726 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/vector.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/vector.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0bd2c06fc305ed39a155e1a67e91ec87146a291e GIT binary patch literal 6014 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/xmlReader.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/__pycache__/xmlReader.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fdcfb11545474c0be6956cf565fa7473a45ba97c GIT binary patch literal 4821 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/arrayTools.py b/.venv/lib/python3.9/site-packages/fontTools/misc/arrayTools.py new file mode 100644 index 00000000..01ccbe82 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/arrayTools.py @@ -0,0 +1,379 @@ +"""Routines for calculating bounding boxes, point in rectangle calculations and +so on. +""" + +from fontTools.misc.roundTools import otRound +from fontTools.misc.vector import Vector as _Vector +import math +import warnings + + +def calcBounds(array): + """Calculate the bounding rectangle of a 2D points array. + + Args: + array: A sequence of 2D tuples. + + Returns: + A four-item tuple representing the bounding rectangle ``(xMin, yMin, xMax, yMax)``. + """ + if not array: + return 0, 0, 0, 0 + xs = [x for x, y in array] + ys = [y for x, y in array] + return min(xs), min(ys), max(xs), max(ys) + +def calcIntBounds(array, round=otRound): + """Calculate the integer bounding rectangle of a 2D points array. + + Values are rounded to closest integer towards ``+Infinity`` using the + :func:`fontTools.misc.fixedTools.otRound` function by default, unless + an optional ``round`` function is passed. + + Args: + array: A sequence of 2D tuples. + round: A rounding function of type ``f(x: float) -> int``. + + Returns: + A four-item tuple of integers representing the bounding rectangle: + ``(xMin, yMin, xMax, yMax)``. + """ + return tuple(round(v) for v in calcBounds(array)) + + +def updateBounds(bounds, p, min=min, max=max): + """Add a point to a bounding rectangle. + + Args: + bounds: A bounding rectangle expressed as a tuple + ``(xMin, yMin, xMax, yMax)``. + p: A 2D tuple representing a point. + min,max: functions to compute the minimum and maximum. + + Returns: + The updated bounding rectangle ``(xMin, yMin, xMax, yMax)``. + """ + (x, y) = p + xMin, yMin, xMax, yMax = bounds + return min(xMin, x), min(yMin, y), max(xMax, x), max(yMax, y) + +def pointInRect(p, rect): + """Test if a point is inside a bounding rectangle. + + Args: + p: A 2D tuple representing a point. + rect: A bounding rectangle expressed as a tuple + ``(xMin, yMin, xMax, yMax)``. + + Returns: + ``True`` if the point is inside the rectangle, ``False`` otherwise. + """ + (x, y) = p + xMin, yMin, xMax, yMax = rect + return (xMin <= x <= xMax) and (yMin <= y <= yMax) + +def pointsInRect(array, rect): + """Determine which points are inside a bounding rectangle. + + Args: + array: A sequence of 2D tuples. + rect: A bounding rectangle expressed as a tuple + ``(xMin, yMin, xMax, yMax)``. + + Returns: + A list containing the points inside the rectangle. + """ + if len(array) < 1: + return [] + xMin, yMin, xMax, yMax = rect + return [(xMin <= x <= xMax) and (yMin <= y <= yMax) for x, y in array] + +def vectorLength(vector): + """Calculate the length of the given vector. + + Args: + vector: A 2D tuple. + + Returns: + The Euclidean length of the vector. + """ + x, y = vector + return math.sqrt(x**2 + y**2) + +def asInt16(array): + """Round a list of floats to 16-bit signed integers. + + Args: + array: List of float values. + + Returns: + A list of rounded integers. + """ + return [int(math.floor(i+0.5)) for i in array] + + +def normRect(rect): + """Normalize a bounding box rectangle. + + This function "turns the rectangle the right way up", so that the following + holds:: + + xMin <= xMax and yMin <= yMax + + Args: + rect: A bounding rectangle expressed as a tuple + ``(xMin, yMin, xMax, yMax)``. + + Returns: + A normalized bounding rectangle. + """ + (xMin, yMin, xMax, yMax) = rect + return min(xMin, xMax), min(yMin, yMax), max(xMin, xMax), max(yMin, yMax) + +def scaleRect(rect, x, y): + """Scale a bounding box rectangle. + + Args: + rect: A bounding rectangle expressed as a tuple + ``(xMin, yMin, xMax, yMax)``. + x: Factor to scale the rectangle along the X axis. + Y: Factor to scale the rectangle along the Y axis. + + Returns: + A scaled bounding rectangle. + """ + (xMin, yMin, xMax, yMax) = rect + return xMin * x, yMin * y, xMax * x, yMax * y + +def offsetRect(rect, dx, dy): + """Offset a bounding box rectangle. + + Args: + rect: A bounding rectangle expressed as a tuple + ``(xMin, yMin, xMax, yMax)``. + dx: Amount to offset the rectangle along the X axis. + dY: Amount to offset the rectangle along the Y axis. + + Returns: + An offset bounding rectangle. + """ + (xMin, yMin, xMax, yMax) = rect + return xMin+dx, yMin+dy, xMax+dx, yMax+dy + +def insetRect(rect, dx, dy): + """Inset a bounding box rectangle on all sides. + + Args: + rect: A bounding rectangle expressed as a tuple + ``(xMin, yMin, xMax, yMax)``. + dx: Amount to inset the rectangle along the X axis. + dY: Amount to inset the rectangle along the Y axis. + + Returns: + An inset bounding rectangle. + """ + (xMin, yMin, xMax, yMax) = rect + return xMin+dx, yMin+dy, xMax-dx, yMax-dy + +def sectRect(rect1, rect2): + """Test for rectangle-rectangle intersection. + + Args: + rect1: First bounding rectangle, expressed as tuples + ``(xMin, yMin, xMax, yMax)``. + rect2: Second bounding rectangle. + + Returns: + A boolean and a rectangle. + If the input rectangles intersect, returns ``True`` and the intersecting + rectangle. Returns ``False`` and ``(0, 0, 0, 0)`` if the input + rectangles don't intersect. + """ + (xMin1, yMin1, xMax1, yMax1) = rect1 + (xMin2, yMin2, xMax2, yMax2) = rect2 + xMin, yMin, xMax, yMax = (max(xMin1, xMin2), max(yMin1, yMin2), + min(xMax1, xMax2), min(yMax1, yMax2)) + if xMin >= xMax or yMin >= yMax: + return False, (0, 0, 0, 0) + return True, (xMin, yMin, xMax, yMax) + +def unionRect(rect1, rect2): + """Determine union of bounding rectangles. + + Args: + rect1: First bounding rectangle, expressed as tuples + ``(xMin, yMin, xMax, yMax)``. + rect2: Second bounding rectangle. + + Returns: + The smallest rectangle in which both input rectangles are fully + enclosed. + """ + (xMin1, yMin1, xMax1, yMax1) = rect1 + (xMin2, yMin2, xMax2, yMax2) = rect2 + xMin, yMin, xMax, yMax = (min(xMin1, xMin2), min(yMin1, yMin2), + max(xMax1, xMax2), max(yMax1, yMax2)) + return (xMin, yMin, xMax, yMax) + +def rectCenter(rect): + """Determine rectangle center. + + Args: + rect: Bounding rectangle, expressed as tuples + ``(xMin, yMin, xMax, yMax)``. + + Returns: + A 2D tuple representing the point at the center of the rectangle. + """ + (xMin, yMin, xMax, yMax) = rect + return (xMin+xMax)/2, (yMin+yMax)/2 + +def rectArea(rect): + """Determine rectangle area. + + Args: + rect: Bounding rectangle, expressed as tuples + ``(xMin, yMin, xMax, yMax)``. + + Returns: + The area of the rectangle. + """ + (xMin, yMin, xMax, yMax) = rect + return (yMax - yMin) * (xMax - xMin) + +def intRect(rect): + """Round a rectangle to integer values. + + Guarantees that the resulting rectangle is NOT smaller than the original. + + Args: + rect: Bounding rectangle, expressed as tuples + ``(xMin, yMin, xMax, yMax)``. + + Returns: + A rounded bounding rectangle. + """ + (xMin, yMin, xMax, yMax) = rect + xMin = int(math.floor(xMin)) + yMin = int(math.floor(yMin)) + xMax = int(math.ceil(xMax)) + yMax = int(math.ceil(yMax)) + return (xMin, yMin, xMax, yMax) + + +class Vector(_Vector): + + def __init__(self, *args, **kwargs): + warnings.warn( + "fontTools.misc.arrayTools.Vector has been deprecated, please use " + "fontTools.misc.vector.Vector instead.", + DeprecationWarning, + ) + + +def pairwise(iterable, reverse=False): + """Iterate over current and next items in iterable. + + Args: + iterable: An iterable + reverse: If true, iterate in reverse order. + + Returns: + A iterable yielding two elements per iteration. + + Example: + + >>> tuple(pairwise([])) + () + >>> tuple(pairwise([], reverse=True)) + () + >>> tuple(pairwise([0])) + ((0, 0),) + >>> tuple(pairwise([0], reverse=True)) + ((0, 0),) + >>> tuple(pairwise([0, 1])) + ((0, 1), (1, 0)) + >>> tuple(pairwise([0, 1], reverse=True)) + ((1, 0), (0, 1)) + >>> tuple(pairwise([0, 1, 2])) + ((0, 1), (1, 2), (2, 0)) + >>> tuple(pairwise([0, 1, 2], reverse=True)) + ((2, 1), (1, 0), (0, 2)) + >>> tuple(pairwise(['a', 'b', 'c', 'd'])) + (('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', 'a')) + >>> tuple(pairwise(['a', 'b', 'c', 'd'], reverse=True)) + (('d', 'c'), ('c', 'b'), ('b', 'a'), ('a', 'd')) + """ + if not iterable: + return + if reverse: + it = reversed(iterable) + else: + it = iter(iterable) + first = next(it, None) + a = first + for b in it: + yield (a, b) + a = b + yield (a, first) + + +def _test(): + """ + >>> import math + >>> calcBounds([]) + (0, 0, 0, 0) + >>> calcBounds([(0, 40), (0, 100), (50, 50), (80, 10)]) + (0, 10, 80, 100) + >>> updateBounds((0, 0, 0, 0), (100, 100)) + (0, 0, 100, 100) + >>> pointInRect((50, 50), (0, 0, 100, 100)) + True + >>> pointInRect((0, 0), (0, 0, 100, 100)) + True + >>> pointInRect((100, 100), (0, 0, 100, 100)) + True + >>> not pointInRect((101, 100), (0, 0, 100, 100)) + True + >>> list(pointsInRect([(50, 50), (0, 0), (100, 100), (101, 100)], (0, 0, 100, 100))) + [True, True, True, False] + >>> vectorLength((3, 4)) + 5.0 + >>> vectorLength((1, 1)) == math.sqrt(2) + True + >>> list(asInt16([0, 0.1, 0.5, 0.9])) + [0, 0, 1, 1] + >>> normRect((0, 10, 100, 200)) + (0, 10, 100, 200) + >>> normRect((100, 200, 0, 10)) + (0, 10, 100, 200) + >>> scaleRect((10, 20, 50, 150), 1.5, 2) + (15.0, 40, 75.0, 300) + >>> offsetRect((10, 20, 30, 40), 5, 6) + (15, 26, 35, 46) + >>> insetRect((10, 20, 50, 60), 5, 10) + (15, 30, 45, 50) + >>> insetRect((10, 20, 50, 60), -5, -10) + (5, 10, 55, 70) + >>> intersects, rect = sectRect((0, 10, 20, 30), (0, 40, 20, 50)) + >>> not intersects + True + >>> intersects, rect = sectRect((0, 10, 20, 30), (5, 20, 35, 50)) + >>> intersects + 1 + >>> rect + (5, 20, 20, 30) + >>> unionRect((0, 10, 20, 30), (0, 40, 20, 50)) + (0, 10, 20, 50) + >>> rectCenter((0, 0, 100, 200)) + (50.0, 100.0) + >>> rectCenter((0, 0, 100, 199.0)) + (50.0, 99.5) + >>> intRect((0.9, 2.9, 3.1, 4.1)) + (0, 2, 4, 5) + """ + +if __name__ == "__main__": + import sys + import doctest + sys.exit(doctest.testmod().failed) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/bezierTools.py b/.venv/lib/python3.9/site-packages/fontTools/misc/bezierTools.py new file mode 100644 index 00000000..25e5c548 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/bezierTools.py @@ -0,0 +1,1225 @@ +# -*- coding: utf-8 -*- +"""fontTools.misc.bezierTools.py -- tools for working with Bezier path segments. +""" + +from fontTools.misc.arrayTools import calcBounds, sectRect, rectArea +from fontTools.misc.transform import Identity +import math +from collections import namedtuple + +Intersection = namedtuple("Intersection", ["pt", "t1", "t2"]) + + +__all__ = [ + "approximateCubicArcLength", + "approximateCubicArcLengthC", + "approximateQuadraticArcLength", + "approximateQuadraticArcLengthC", + "calcCubicArcLength", + "calcCubicArcLengthC", + "calcQuadraticArcLength", + "calcQuadraticArcLengthC", + "calcCubicBounds", + "calcQuadraticBounds", + "splitLine", + "splitQuadratic", + "splitCubic", + "splitQuadraticAtT", + "splitCubicAtT", + "solveQuadratic", + "solveCubic", + "quadraticPointAtT", + "cubicPointAtT", + "linePointAtT", + "segmentPointAtT", + "lineLineIntersections", + "curveLineIntersections", + "curveCurveIntersections", + "segmentSegmentIntersections", +] + + +def calcCubicArcLength(pt1, pt2, pt3, pt4, tolerance=0.005): + """Calculates the arc length for a cubic Bezier segment. + + Whereas :func:`approximateCubicArcLength` approximates the length, this + function calculates it by "measuring", recursively dividing the curve + until the divided segments are shorter than ``tolerance``. + + Args: + pt1,pt2,pt3,pt4: Control points of the Bezier as 2D tuples. + tolerance: Controls the precision of the calcuation. + + Returns: + Arc length value. + """ + return calcCubicArcLengthC( + complex(*pt1), complex(*pt2), complex(*pt3), complex(*pt4), tolerance + ) + + +def _split_cubic_into_two(p0, p1, p2, p3): + mid = (p0 + 3 * (p1 + p2) + p3) * 0.125 + deriv3 = (p3 + p2 - p1 - p0) * 0.125 + return ( + (p0, (p0 + p1) * 0.5, mid - deriv3, mid), + (mid, mid + deriv3, (p2 + p3) * 0.5, p3), + ) + + +def _calcCubicArcLengthCRecurse(mult, p0, p1, p2, p3): + arch = abs(p0 - p3) + box = abs(p0 - p1) + abs(p1 - p2) + abs(p2 - p3) + if arch * mult >= box: + return (arch + box) * 0.5 + else: + one, two = _split_cubic_into_two(p0, p1, p2, p3) + return _calcCubicArcLengthCRecurse(mult, *one) + _calcCubicArcLengthCRecurse( + mult, *two + ) + + +def calcCubicArcLengthC(pt1, pt2, pt3, pt4, tolerance=0.005): + """Calculates the arc length for a cubic Bezier segment. + + Args: + pt1,pt2,pt3,pt4: Control points of the Bezier as complex numbers. + tolerance: Controls the precision of the calcuation. + + Returns: + Arc length value. + """ + mult = 1.0 + 1.5 * tolerance # The 1.5 is a empirical hack; no math + return _calcCubicArcLengthCRecurse(mult, pt1, pt2, pt3, pt4) + + +epsilonDigits = 6 +epsilon = 1e-10 + + +def _dot(v1, v2): + return (v1 * v2.conjugate()).real + + +def _intSecAtan(x): + # In : sympy.integrate(sp.sec(sp.atan(x))) + # Out: x*sqrt(x**2 + 1)/2 + asinh(x)/2 + return x * math.sqrt(x ** 2 + 1) / 2 + math.asinh(x) / 2 + + +def calcQuadraticArcLength(pt1, pt2, pt3): + """Calculates the arc length for a quadratic Bezier segment. + + Args: + pt1: Start point of the Bezier as 2D tuple. + pt2: Handle point of the Bezier as 2D tuple. + pt3: End point of the Bezier as 2D tuple. + + Returns: + Arc length value. + + Example:: + + >>> calcQuadraticArcLength((0, 0), (0, 0), (0, 0)) # empty segment + 0.0 + >>> calcQuadraticArcLength((0, 0), (50, 0), (80, 0)) # collinear points + 80.0 + >>> calcQuadraticArcLength((0, 0), (0, 50), (0, 80)) # collinear points vertical + 80.0 + >>> calcQuadraticArcLength((0, 0), (50, 20), (100, 40)) # collinear points + 107.70329614269008 + >>> calcQuadraticArcLength((0, 0), (0, 100), (100, 0)) + 154.02976155645263 + >>> calcQuadraticArcLength((0, 0), (0, 50), (100, 0)) + 120.21581243984076 + >>> calcQuadraticArcLength((0, 0), (50, -10), (80, 50)) + 102.53273816445825 + >>> calcQuadraticArcLength((0, 0), (40, 0), (-40, 0)) # collinear points, control point outside + 66.66666666666667 + >>> calcQuadraticArcLength((0, 0), (40, 0), (0, 0)) # collinear points, looping back + 40.0 + """ + return calcQuadraticArcLengthC(complex(*pt1), complex(*pt2), complex(*pt3)) + + +def calcQuadraticArcLengthC(pt1, pt2, pt3): + """Calculates the arc length for a quadratic Bezier segment. + + Args: + pt1: Start point of the Bezier as a complex number. + pt2: Handle point of the Bezier as a complex number. + pt3: End point of the Bezier as a complex number. + + Returns: + Arc length value. + """ + # Analytical solution to the length of a quadratic bezier. + # I'll explain how I arrived at this later. + d0 = pt2 - pt1 + d1 = pt3 - pt2 + d = d1 - d0 + n = d * 1j + scale = abs(n) + if scale == 0.0: + return abs(pt3 - pt1) + origDist = _dot(n, d0) + if abs(origDist) < epsilon: + if _dot(d0, d1) >= 0: + return abs(pt3 - pt1) + a, b = abs(d0), abs(d1) + return (a * a + b * b) / (a + b) + x0 = _dot(d, d0) / origDist + x1 = _dot(d, d1) / origDist + Len = abs(2 * (_intSecAtan(x1) - _intSecAtan(x0)) * origDist / (scale * (x1 - x0))) + return Len + + +def approximateQuadraticArcLength(pt1, pt2, pt3): + """Calculates the arc length for a quadratic Bezier segment. + + Uses Gauss-Legendre quadrature for a branch-free approximation. + See :func:`calcQuadraticArcLength` for a slower but more accurate result. + + Args: + pt1: Start point of the Bezier as 2D tuple. + pt2: Handle point of the Bezier as 2D tuple. + pt3: End point of the Bezier as 2D tuple. + + Returns: + Approximate arc length value. + """ + return approximateQuadraticArcLengthC(complex(*pt1), complex(*pt2), complex(*pt3)) + + +def approximateQuadraticArcLengthC(pt1, pt2, pt3): + """Calculates the arc length for a quadratic Bezier segment. + + Uses Gauss-Legendre quadrature for a branch-free approximation. + See :func:`calcQuadraticArcLength` for a slower but more accurate result. + + Args: + pt1: Start point of the Bezier as a complex number. + pt2: Handle point of the Bezier as a complex number. + pt3: End point of the Bezier as a complex number. + + Returns: + Approximate arc length value. + """ + # This, essentially, approximates the length-of-derivative function + # to be integrated with the best-matching fifth-degree polynomial + # approximation of it. + # + # https://en.wikipedia.org/wiki/Gaussian_quadrature#Gauss.E2.80.93Legendre_quadrature + + # abs(BezierCurveC[2].diff(t).subs({t:T})) for T in sorted(.5, .5±sqrt(3/5)/2), + # weighted 5/18, 8/18, 5/18 respectively. + v0 = abs( + -0.492943519233745 * pt1 + 0.430331482911935 * pt2 + 0.0626120363218102 * pt3 + ) + v1 = abs(pt3 - pt1) * 0.4444444444444444 + v2 = abs( + -0.0626120363218102 * pt1 - 0.430331482911935 * pt2 + 0.492943519233745 * pt3 + ) + + return v0 + v1 + v2 + + +def calcQuadraticBounds(pt1, pt2, pt3): + """Calculates the bounding rectangle for a quadratic Bezier segment. + + Args: + pt1: Start point of the Bezier as a 2D tuple. + pt2: Handle point of the Bezier as a 2D tuple. + pt3: End point of the Bezier as a 2D tuple. + + Returns: + A four-item tuple representing the bounding rectangle ``(xMin, yMin, xMax, yMax)``. + + Example:: + + >>> calcQuadraticBounds((0, 0), (50, 100), (100, 0)) + (0, 0, 100, 50.0) + >>> calcQuadraticBounds((0, 0), (100, 0), (100, 100)) + (0.0, 0.0, 100, 100) + """ + (ax, ay), (bx, by), (cx, cy) = calcQuadraticParameters(pt1, pt2, pt3) + ax2 = ax * 2.0 + ay2 = ay * 2.0 + roots = [] + if ax2 != 0: + roots.append(-bx / ax2) + if ay2 != 0: + roots.append(-by / ay2) + points = [ + (ax * t * t + bx * t + cx, ay * t * t + by * t + cy) + for t in roots + if 0 <= t < 1 + ] + [pt1, pt3] + return calcBounds(points) + + +def approximateCubicArcLength(pt1, pt2, pt3, pt4): + """Approximates the arc length for a cubic Bezier segment. + + Uses Gauss-Lobatto quadrature with n=5 points to approximate arc length. + See :func:`calcCubicArcLength` for a slower but more accurate result. + + Args: + pt1,pt2,pt3,pt4: Control points of the Bezier as 2D tuples. + + Returns: + Arc length value. + + Example:: + + >>> approximateCubicArcLength((0, 0), (25, 100), (75, 100), (100, 0)) + 190.04332968932817 + >>> approximateCubicArcLength((0, 0), (50, 0), (100, 50), (100, 100)) + 154.8852074945903 + >>> approximateCubicArcLength((0, 0), (50, 0), (100, 0), (150, 0)) # line; exact result should be 150. + 149.99999999999991 + >>> approximateCubicArcLength((0, 0), (50, 0), (100, 0), (-50, 0)) # cusp; exact result should be 150. + 136.9267662156362 + >>> approximateCubicArcLength((0, 0), (50, 0), (100, -50), (-50, 0)) # cusp + 154.80848416537057 + """ + return approximateCubicArcLengthC( + complex(*pt1), complex(*pt2), complex(*pt3), complex(*pt4) + ) + + +def approximateCubicArcLengthC(pt1, pt2, pt3, pt4): + """Approximates the arc length for a cubic Bezier segment. + + Args: + pt1,pt2,pt3,pt4: Control points of the Bezier as complex numbers. + + Returns: + Arc length value. + """ + # This, essentially, approximates the length-of-derivative function + # to be integrated with the best-matching seventh-degree polynomial + # approximation of it. + # + # https://en.wikipedia.org/wiki/Gaussian_quadrature#Gauss.E2.80.93Lobatto_rules + + # abs(BezierCurveC[3].diff(t).subs({t:T})) for T in sorted(0, .5±(3/7)**.5/2, .5, 1), + # weighted 1/20, 49/180, 32/90, 49/180, 1/20 respectively. + v0 = abs(pt2 - pt1) * 0.15 + v1 = abs( + -0.558983582205757 * pt1 + + 0.325650248872424 * pt2 + + 0.208983582205757 * pt3 + + 0.024349751127576 * pt4 + ) + v2 = abs(pt4 - pt1 + pt3 - pt2) * 0.26666666666666666 + v3 = abs( + -0.024349751127576 * pt1 + - 0.208983582205757 * pt2 + - 0.325650248872424 * pt3 + + 0.558983582205757 * pt4 + ) + v4 = abs(pt4 - pt3) * 0.15 + + return v0 + v1 + v2 + v3 + v4 + + +def calcCubicBounds(pt1, pt2, pt3, pt4): + """Calculates the bounding rectangle for a quadratic Bezier segment. + + Args: + pt1,pt2,pt3,pt4: Control points of the Bezier as 2D tuples. + + Returns: + A four-item tuple representing the bounding rectangle ``(xMin, yMin, xMax, yMax)``. + + Example:: + + >>> calcCubicBounds((0, 0), (25, 100), (75, 100), (100, 0)) + (0, 0, 100, 75.0) + >>> calcCubicBounds((0, 0), (50, 0), (100, 50), (100, 100)) + (0.0, 0.0, 100, 100) + >>> print("%f %f %f %f" % calcCubicBounds((50, 0), (0, 100), (100, 100), (50, 0))) + 35.566243 0.000000 64.433757 75.000000 + """ + (ax, ay), (bx, by), (cx, cy), (dx, dy) = calcCubicParameters(pt1, pt2, pt3, pt4) + # calc first derivative + ax3 = ax * 3.0 + ay3 = ay * 3.0 + bx2 = bx * 2.0 + by2 = by * 2.0 + xRoots = [t for t in solveQuadratic(ax3, bx2, cx) if 0 <= t < 1] + yRoots = [t for t in solveQuadratic(ay3, by2, cy) if 0 <= t < 1] + roots = xRoots + yRoots + + points = [ + ( + ax * t * t * t + bx * t * t + cx * t + dx, + ay * t * t * t + by * t * t + cy * t + dy, + ) + for t in roots + ] + [pt1, pt4] + return calcBounds(points) + + +def splitLine(pt1, pt2, where, isHorizontal): + """Split a line at a given coordinate. + + Args: + pt1: Start point of line as 2D tuple. + pt2: End point of line as 2D tuple. + where: Position at which to split the line. + isHorizontal: Direction of the ray splitting the line. If true, + ``where`` is interpreted as a Y coordinate; if false, then + ``where`` is interpreted as an X coordinate. + + Returns: + A list of two line segments (each line segment being two 2D tuples) + if the line was successfully split, or a list containing the original + line. + + Example:: + + >>> printSegments(splitLine((0, 0), (100, 100), 50, True)) + ((0, 0), (50, 50)) + ((50, 50), (100, 100)) + >>> printSegments(splitLine((0, 0), (100, 100), 100, True)) + ((0, 0), (100, 100)) + >>> printSegments(splitLine((0, 0), (100, 100), 0, True)) + ((0, 0), (0, 0)) + ((0, 0), (100, 100)) + >>> printSegments(splitLine((0, 0), (100, 100), 0, False)) + ((0, 0), (0, 0)) + ((0, 0), (100, 100)) + >>> printSegments(splitLine((100, 0), (0, 0), 50, False)) + ((100, 0), (50, 0)) + ((50, 0), (0, 0)) + >>> printSegments(splitLine((0, 100), (0, 0), 50, True)) + ((0, 100), (0, 50)) + ((0, 50), (0, 0)) + """ + pt1x, pt1y = pt1 + pt2x, pt2y = pt2 + + ax = pt2x - pt1x + ay = pt2y - pt1y + + bx = pt1x + by = pt1y + + a = (ax, ay)[isHorizontal] + + if a == 0: + return [(pt1, pt2)] + t = (where - (bx, by)[isHorizontal]) / a + if 0 <= t < 1: + midPt = ax * t + bx, ay * t + by + return [(pt1, midPt), (midPt, pt2)] + else: + return [(pt1, pt2)] + + +def splitQuadratic(pt1, pt2, pt3, where, isHorizontal): + """Split a quadratic Bezier curve at a given coordinate. + + Args: + pt1,pt2,pt3: Control points of the Bezier as 2D tuples. + where: Position at which to split the curve. + isHorizontal: Direction of the ray splitting the curve. If true, + ``where`` is interpreted as a Y coordinate; if false, then + ``where`` is interpreted as an X coordinate. + + Returns: + A list of two curve segments (each curve segment being three 2D tuples) + if the curve was successfully split, or a list containing the original + curve. + + Example:: + + >>> printSegments(splitQuadratic((0, 0), (50, 100), (100, 0), 150, False)) + ((0, 0), (50, 100), (100, 0)) + >>> printSegments(splitQuadratic((0, 0), (50, 100), (100, 0), 50, False)) + ((0, 0), (25, 50), (50, 50)) + ((50, 50), (75, 50), (100, 0)) + >>> printSegments(splitQuadratic((0, 0), (50, 100), (100, 0), 25, False)) + ((0, 0), (12.5, 25), (25, 37.5)) + ((25, 37.5), (62.5, 75), (100, 0)) + >>> printSegments(splitQuadratic((0, 0), (50, 100), (100, 0), 25, True)) + ((0, 0), (7.32233, 14.6447), (14.6447, 25)) + ((14.6447, 25), (50, 75), (85.3553, 25)) + ((85.3553, 25), (92.6777, 14.6447), (100, -7.10543e-15)) + >>> # XXX I'm not at all sure if the following behavior is desirable: + >>> printSegments(splitQuadratic((0, 0), (50, 100), (100, 0), 50, True)) + ((0, 0), (25, 50), (50, 50)) + ((50, 50), (50, 50), (50, 50)) + ((50, 50), (75, 50), (100, 0)) + """ + a, b, c = calcQuadraticParameters(pt1, pt2, pt3) + solutions = solveQuadratic( + a[isHorizontal], b[isHorizontal], c[isHorizontal] - where + ) + solutions = sorted(t for t in solutions if 0 <= t < 1) + if not solutions: + return [(pt1, pt2, pt3)] + return _splitQuadraticAtT(a, b, c, *solutions) + + +def splitCubic(pt1, pt2, pt3, pt4, where, isHorizontal): + """Split a cubic Bezier curve at a given coordinate. + + Args: + pt1,pt2,pt3,pt4: Control points of the Bezier as 2D tuples. + where: Position at which to split the curve. + isHorizontal: Direction of the ray splitting the curve. If true, + ``where`` is interpreted as a Y coordinate; if false, then + ``where`` is interpreted as an X coordinate. + + Returns: + A list of two curve segments (each curve segment being four 2D tuples) + if the curve was successfully split, or a list containing the original + curve. + + Example:: + + >>> printSegments(splitCubic((0, 0), (25, 100), (75, 100), (100, 0), 150, False)) + ((0, 0), (25, 100), (75, 100), (100, 0)) + >>> printSegments(splitCubic((0, 0), (25, 100), (75, 100), (100, 0), 50, False)) + ((0, 0), (12.5, 50), (31.25, 75), (50, 75)) + ((50, 75), (68.75, 75), (87.5, 50), (100, 0)) + >>> printSegments(splitCubic((0, 0), (25, 100), (75, 100), (100, 0), 25, True)) + ((0, 0), (2.29379, 9.17517), (4.79804, 17.5085), (7.47414, 25)) + ((7.47414, 25), (31.2886, 91.6667), (68.7114, 91.6667), (92.5259, 25)) + ((92.5259, 25), (95.202, 17.5085), (97.7062, 9.17517), (100, 1.77636e-15)) + """ + a, b, c, d = calcCubicParameters(pt1, pt2, pt3, pt4) + solutions = solveCubic( + a[isHorizontal], b[isHorizontal], c[isHorizontal], d[isHorizontal] - where + ) + solutions = sorted(t for t in solutions if 0 <= t < 1) + if not solutions: + return [(pt1, pt2, pt3, pt4)] + return _splitCubicAtT(a, b, c, d, *solutions) + + +def splitQuadraticAtT(pt1, pt2, pt3, *ts): + """Split a quadratic Bezier curve at one or more values of t. + + Args: + pt1,pt2,pt3: Control points of the Bezier as 2D tuples. + *ts: Positions at which to split the curve. + + Returns: + A list of curve segments (each curve segment being three 2D tuples). + + Examples:: + + >>> printSegments(splitQuadraticAtT((0, 0), (50, 100), (100, 0), 0.5)) + ((0, 0), (25, 50), (50, 50)) + ((50, 50), (75, 50), (100, 0)) + >>> printSegments(splitQuadraticAtT((0, 0), (50, 100), (100, 0), 0.5, 0.75)) + ((0, 0), (25, 50), (50, 50)) + ((50, 50), (62.5, 50), (75, 37.5)) + ((75, 37.5), (87.5, 25), (100, 0)) + """ + a, b, c = calcQuadraticParameters(pt1, pt2, pt3) + return _splitQuadraticAtT(a, b, c, *ts) + + +def splitCubicAtT(pt1, pt2, pt3, pt4, *ts): + """Split a cubic Bezier curve at one or more values of t. + + Args: + pt1,pt2,pt3,pt4: Control points of the Bezier as 2D tuples. + *ts: Positions at which to split the curve. + + Returns: + A list of curve segments (each curve segment being four 2D tuples). + + Examples:: + + >>> printSegments(splitCubicAtT((0, 0), (25, 100), (75, 100), (100, 0), 0.5)) + ((0, 0), (12.5, 50), (31.25, 75), (50, 75)) + ((50, 75), (68.75, 75), (87.5, 50), (100, 0)) + >>> printSegments(splitCubicAtT((0, 0), (25, 100), (75, 100), (100, 0), 0.5, 0.75)) + ((0, 0), (12.5, 50), (31.25, 75), (50, 75)) + ((50, 75), (59.375, 75), (68.75, 68.75), (77.3438, 56.25)) + ((77.3438, 56.25), (85.9375, 43.75), (93.75, 25), (100, 0)) + """ + a, b, c, d = calcCubicParameters(pt1, pt2, pt3, pt4) + return _splitCubicAtT(a, b, c, d, *ts) + + +def _splitQuadraticAtT(a, b, c, *ts): + ts = list(ts) + segments = [] + ts.insert(0, 0.0) + ts.append(1.0) + ax, ay = a + bx, by = b + cx, cy = c + for i in range(len(ts) - 1): + t1 = ts[i] + t2 = ts[i + 1] + delta = t2 - t1 + # calc new a, b and c + delta_2 = delta * delta + a1x = ax * delta_2 + a1y = ay * delta_2 + b1x = (2 * ax * t1 + bx) * delta + b1y = (2 * ay * t1 + by) * delta + t1_2 = t1 * t1 + c1x = ax * t1_2 + bx * t1 + cx + c1y = ay * t1_2 + by * t1 + cy + + pt1, pt2, pt3 = calcQuadraticPoints((a1x, a1y), (b1x, b1y), (c1x, c1y)) + segments.append((pt1, pt2, pt3)) + return segments + + +def _splitCubicAtT(a, b, c, d, *ts): + ts = list(ts) + ts.insert(0, 0.0) + ts.append(1.0) + segments = [] + ax, ay = a + bx, by = b + cx, cy = c + dx, dy = d + for i in range(len(ts) - 1): + t1 = ts[i] + t2 = ts[i + 1] + delta = t2 - t1 + + delta_2 = delta * delta + delta_3 = delta * delta_2 + t1_2 = t1 * t1 + t1_3 = t1 * t1_2 + + # calc new a, b, c and d + a1x = ax * delta_3 + a1y = ay * delta_3 + b1x = (3 * ax * t1 + bx) * delta_2 + b1y = (3 * ay * t1 + by) * delta_2 + c1x = (2 * bx * t1 + cx + 3 * ax * t1_2) * delta + c1y = (2 * by * t1 + cy + 3 * ay * t1_2) * delta + d1x = ax * t1_3 + bx * t1_2 + cx * t1 + dx + d1y = ay * t1_3 + by * t1_2 + cy * t1 + dy + pt1, pt2, pt3, pt4 = calcCubicPoints( + (a1x, a1y), (b1x, b1y), (c1x, c1y), (d1x, d1y) + ) + segments.append((pt1, pt2, pt3, pt4)) + return segments + + +# +# Equation solvers. +# + +from math import sqrt, acos, cos, pi + + +def solveQuadratic(a, b, c, sqrt=sqrt): + """Solve a quadratic equation. + + Solves *a*x*x + b*x + c = 0* where a, b and c are real. + + Args: + a: coefficient of *x²* + b: coefficient of *x* + c: constant term + + Returns: + A list of roots. Note that the returned list is neither guaranteed to + be sorted nor to contain unique values! + """ + if abs(a) < epsilon: + if abs(b) < epsilon: + # We have a non-equation; therefore, we have no valid solution + roots = [] + else: + # We have a linear equation with 1 root. + roots = [-c / b] + else: + # We have a true quadratic equation. Apply the quadratic formula to find two roots. + DD = b * b - 4.0 * a * c + if DD >= 0.0: + rDD = sqrt(DD) + roots = [(-b + rDD) / 2.0 / a, (-b - rDD) / 2.0 / a] + else: + # complex roots, ignore + roots = [] + return roots + + +def solveCubic(a, b, c, d): + """Solve a cubic equation. + + Solves *a*x*x*x + b*x*x + c*x + d = 0* where a, b, c and d are real. + + Args: + a: coefficient of *x³* + b: coefficient of *x²* + c: coefficient of *x* + d: constant term + + Returns: + A list of roots. Note that the returned list is neither guaranteed to + be sorted nor to contain unique values! + + Examples:: + + >>> solveCubic(1, 1, -6, 0) + [-3.0, -0.0, 2.0] + >>> solveCubic(-10.0, -9.0, 48.0, -29.0) + [-2.9, 1.0, 1.0] + >>> solveCubic(-9.875, -9.0, 47.625, -28.75) + [-2.911392, 1.0, 1.0] + >>> solveCubic(1.0, -4.5, 6.75, -3.375) + [1.5, 1.5, 1.5] + >>> solveCubic(-12.0, 18.0, -9.0, 1.50023651123) + [0.5, 0.5, 0.5] + >>> solveCubic( + ... 9.0, 0.0, 0.0, -7.62939453125e-05 + ... ) == [-0.0, -0.0, -0.0] + True + """ + # + # adapted from: + # CUBIC.C - Solve a cubic polynomial + # public domain by Ross Cottrell + # found at: http://www.strangecreations.com/library/snippets/Cubic.C + # + if abs(a) < epsilon: + # don't just test for zero; for very small values of 'a' solveCubic() + # returns unreliable results, so we fall back to quad. + return solveQuadratic(b, c, d) + a = float(a) + a1 = b / a + a2 = c / a + a3 = d / a + + Q = (a1 * a1 - 3.0 * a2) / 9.0 + R = (2.0 * a1 * a1 * a1 - 9.0 * a1 * a2 + 27.0 * a3) / 54.0 + + R2 = R * R + Q3 = Q * Q * Q + R2 = 0 if R2 < epsilon else R2 + Q3 = 0 if abs(Q3) < epsilon else Q3 + + R2_Q3 = R2 - Q3 + + if R2 == 0.0 and Q3 == 0.0: + x = round(-a1 / 3.0, epsilonDigits) + return [x, x, x] + elif R2_Q3 <= epsilon * 0.5: + # The epsilon * .5 above ensures that Q3 is not zero. + theta = acos(max(min(R / sqrt(Q3), 1.0), -1.0)) + rQ2 = -2.0 * sqrt(Q) + a1_3 = a1 / 3.0 + x0 = rQ2 * cos(theta / 3.0) - a1_3 + x1 = rQ2 * cos((theta + 2.0 * pi) / 3.0) - a1_3 + x2 = rQ2 * cos((theta + 4.0 * pi) / 3.0) - a1_3 + x0, x1, x2 = sorted([x0, x1, x2]) + # Merge roots that are close-enough + if x1 - x0 < epsilon and x2 - x1 < epsilon: + x0 = x1 = x2 = round((x0 + x1 + x2) / 3.0, epsilonDigits) + elif x1 - x0 < epsilon: + x0 = x1 = round((x0 + x1) / 2.0, epsilonDigits) + x2 = round(x2, epsilonDigits) + elif x2 - x1 < epsilon: + x0 = round(x0, epsilonDigits) + x1 = x2 = round((x1 + x2) / 2.0, epsilonDigits) + else: + x0 = round(x0, epsilonDigits) + x1 = round(x1, epsilonDigits) + x2 = round(x2, epsilonDigits) + return [x0, x1, x2] + else: + x = pow(sqrt(R2_Q3) + abs(R), 1 / 3.0) + x = x + Q / x + if R >= 0.0: + x = -x + x = round(x - a1 / 3.0, epsilonDigits) + return [x] + + +# +# Conversion routines for points to parameters and vice versa +# + + +def calcQuadraticParameters(pt1, pt2, pt3): + x2, y2 = pt2 + x3, y3 = pt3 + cx, cy = pt1 + bx = (x2 - cx) * 2.0 + by = (y2 - cy) * 2.0 + ax = x3 - cx - bx + ay = y3 - cy - by + return (ax, ay), (bx, by), (cx, cy) + + +def calcCubicParameters(pt1, pt2, pt3, pt4): + x2, y2 = pt2 + x3, y3 = pt3 + x4, y4 = pt4 + dx, dy = pt1 + cx = (x2 - dx) * 3.0 + cy = (y2 - dy) * 3.0 + bx = (x3 - x2) * 3.0 - cx + by = (y3 - y2) * 3.0 - cy + ax = x4 - dx - cx - bx + ay = y4 - dy - cy - by + return (ax, ay), (bx, by), (cx, cy), (dx, dy) + + +def calcQuadraticPoints(a, b, c): + ax, ay = a + bx, by = b + cx, cy = c + x1 = cx + y1 = cy + x2 = (bx * 0.5) + cx + y2 = (by * 0.5) + cy + x3 = ax + bx + cx + y3 = ay + by + cy + return (x1, y1), (x2, y2), (x3, y3) + + +def calcCubicPoints(a, b, c, d): + ax, ay = a + bx, by = b + cx, cy = c + dx, dy = d + x1 = dx + y1 = dy + x2 = (cx / 3.0) + dx + y2 = (cy / 3.0) + dy + x3 = (bx + cx) / 3.0 + x2 + y3 = (by + cy) / 3.0 + y2 + x4 = ax + dx + cx + bx + y4 = ay + dy + cy + by + return (x1, y1), (x2, y2), (x3, y3), (x4, y4) + + +# +# Point at time +# + + +def linePointAtT(pt1, pt2, t): + """Finds the point at time `t` on a line. + + Args: + pt1, pt2: Coordinates of the line as 2D tuples. + t: The time along the line. + + Returns: + A 2D tuple with the coordinates of the point. + """ + return ((pt1[0] * (1 - t) + pt2[0] * t), (pt1[1] * (1 - t) + pt2[1] * t)) + + +def quadraticPointAtT(pt1, pt2, pt3, t): + """Finds the point at time `t` on a quadratic curve. + + Args: + pt1, pt2, pt3: Coordinates of the curve as 2D tuples. + t: The time along the curve. + + Returns: + A 2D tuple with the coordinates of the point. + """ + x = (1 - t) * (1 - t) * pt1[0] + 2 * (1 - t) * t * pt2[0] + t * t * pt3[0] + y = (1 - t) * (1 - t) * pt1[1] + 2 * (1 - t) * t * pt2[1] + t * t * pt3[1] + return (x, y) + + +def cubicPointAtT(pt1, pt2, pt3, pt4, t): + """Finds the point at time `t` on a cubic curve. + + Args: + pt1, pt2, pt3, pt4: Coordinates of the curve as 2D tuples. + t: The time along the curve. + + Returns: + A 2D tuple with the coordinates of the point. + """ + x = ( + (1 - t) * (1 - t) * (1 - t) * pt1[0] + + 3 * (1 - t) * (1 - t) * t * pt2[0] + + 3 * (1 - t) * t * t * pt3[0] + + t * t * t * pt4[0] + ) + y = ( + (1 - t) * (1 - t) * (1 - t) * pt1[1] + + 3 * (1 - t) * (1 - t) * t * pt2[1] + + 3 * (1 - t) * t * t * pt3[1] + + t * t * t * pt4[1] + ) + return (x, y) + + +def segmentPointAtT(seg, t): + if len(seg) == 2: + return linePointAtT(*seg, t) + elif len(seg) == 3: + return quadraticPointAtT(*seg, t) + elif len(seg) == 4: + return cubicPointAtT(*seg, t) + raise ValueError("Unknown curve degree") + + +# +# Intersection finders +# + + +def _line_t_of_pt(s, e, pt): + sx, sy = s + ex, ey = e + px, py = pt + if abs(sx - ex) < epsilon and abs(sy - ey) < epsilon: + # Line is a point! + return -1 + # Use the largest + if abs(sx - ex) > abs(sy - ey): + return (px - sx) / (ex - sx) + else: + return (py - sy) / (ey - sy) + + +def _both_points_are_on_same_side_of_origin(a, b, origin): + xDiff = (a[0] - origin[0]) * (b[0] - origin[0]) + yDiff = (a[1] - origin[1]) * (b[1] - origin[1]) + return not (xDiff <= 0.0 and yDiff <= 0.0) + + +def lineLineIntersections(s1, e1, s2, e2): + """Finds intersections between two line segments. + + Args: + s1, e1: Coordinates of the first line as 2D tuples. + s2, e2: Coordinates of the second line as 2D tuples. + + Returns: + A list of ``Intersection`` objects, each object having ``pt``, ``t1`` + and ``t2`` attributes containing the intersection point, time on first + segment and time on second segment respectively. + + Examples:: + + >>> a = lineLineIntersections( (310,389), (453, 222), (289, 251), (447, 367)) + >>> len(a) + 1 + >>> intersection = a[0] + >>> intersection.pt + (374.44882952482897, 313.73458370177315) + >>> (intersection.t1, intersection.t2) + (0.45069111555824465, 0.5408153767394238) + """ + s1x, s1y = s1 + e1x, e1y = e1 + s2x, s2y = s2 + e2x, e2y = e2 + if ( + math.isclose(s2x, e2x) and math.isclose(s1x, e1x) and not math.isclose(s1x, s2x) + ): # Parallel vertical + return [] + if ( + math.isclose(s2y, e2y) and math.isclose(s1y, e1y) and not math.isclose(s1y, s2y) + ): # Parallel horizontal + return [] + if math.isclose(s2x, e2x) and math.isclose(s2y, e2y): # Line segment is tiny + return [] + if math.isclose(s1x, e1x) and math.isclose(s1y, e1y): # Line segment is tiny + return [] + if math.isclose(e1x, s1x): + x = s1x + slope34 = (e2y - s2y) / (e2x - s2x) + y = slope34 * (x - s2x) + s2y + pt = (x, y) + return [ + Intersection( + pt=pt, t1=_line_t_of_pt(s1, e1, pt), t2=_line_t_of_pt(s2, e2, pt) + ) + ] + if math.isclose(s2x, e2x): + x = s2x + slope12 = (e1y - s1y) / (e1x - s1x) + y = slope12 * (x - s1x) + s1y + pt = (x, y) + return [ + Intersection( + pt=pt, t1=_line_t_of_pt(s1, e1, pt), t2=_line_t_of_pt(s2, e2, pt) + ) + ] + + slope12 = (e1y - s1y) / (e1x - s1x) + slope34 = (e2y - s2y) / (e2x - s2x) + if math.isclose(slope12, slope34): + return [] + x = (slope12 * s1x - s1y - slope34 * s2x + s2y) / (slope12 - slope34) + y = slope12 * (x - s1x) + s1y + pt = (x, y) + if _both_points_are_on_same_side_of_origin( + pt, e1, s1 + ) and _both_points_are_on_same_side_of_origin(pt, s2, e2): + return [ + Intersection( + pt=pt, t1=_line_t_of_pt(s1, e1, pt), t2=_line_t_of_pt(s2, e2, pt) + ) + ] + return [] + + +def _alignment_transformation(segment): + # Returns a transformation which aligns a segment horizontally at the + # origin. Apply this transformation to curves and root-find to find + # intersections with the segment. + start = segment[0] + end = segment[-1] + angle = math.atan2(end[1] - start[1], end[0] - start[0]) + return Identity.rotate(-angle).translate(-start[0], -start[1]) + + +def _curve_line_intersections_t(curve, line): + aligned_curve = _alignment_transformation(line).transformPoints(curve) + if len(curve) == 3: + a, b, c = calcQuadraticParameters(*aligned_curve) + intersections = solveQuadratic(a[1], b[1], c[1]) + elif len(curve) == 4: + a, b, c, d = calcCubicParameters(*aligned_curve) + intersections = solveCubic(a[1], b[1], c[1], d[1]) + else: + raise ValueError("Unknown curve degree") + return sorted(i for i in intersections if 0.0 <= i <= 1) + + +def curveLineIntersections(curve, line): + """Finds intersections between a curve and a line. + + Args: + curve: List of coordinates of the curve segment as 2D tuples. + line: List of coordinates of the line segment as 2D tuples. + + Returns: + A list of ``Intersection`` objects, each object having ``pt``, ``t1`` + and ``t2`` attributes containing the intersection point, time on first + segment and time on second segment respectively. + + Examples:: + >>> curve = [ (100, 240), (30, 60), (210, 230), (160, 30) ] + >>> line = [ (25, 260), (230, 20) ] + >>> intersections = curveLineIntersections(curve, line) + >>> len(intersections) + 3 + >>> intersections[0].pt + (84.9000930760723, 189.87306176459828) + """ + if len(curve) == 3: + pointFinder = quadraticPointAtT + elif len(curve) == 4: + pointFinder = cubicPointAtT + else: + raise ValueError("Unknown curve degree") + intersections = [] + for t in _curve_line_intersections_t(curve, line): + pt = pointFinder(*curve, t) + # Back-project the point onto the line, to avoid problems with + # numerical accuracy in the case of vertical and horizontal lines + line_t = _line_t_of_pt(*line, pt) + pt = linePointAtT(*line, line_t) + intersections.append(Intersection(pt=pt, t1=t, t2=line_t)) + return intersections + + +def _curve_bounds(c): + if len(c) == 3: + return calcQuadraticBounds(*c) + elif len(c) == 4: + return calcCubicBounds(*c) + raise ValueError("Unknown curve degree") + + +def _split_segment_at_t(c, t): + if len(c) == 2: + s, e = c + midpoint = linePointAtT(s, e, t) + return [(s, midpoint), (midpoint, e)] + if len(c) == 3: + return splitQuadraticAtT(*c, t) + elif len(c) == 4: + return splitCubicAtT(*c, t) + raise ValueError("Unknown curve degree") + + +def _curve_curve_intersections_t( + curve1, curve2, precision=1e-3, range1=None, range2=None +): + bounds1 = _curve_bounds(curve1) + bounds2 = _curve_bounds(curve2) + + if not range1: + range1 = (0.0, 1.0) + if not range2: + range2 = (0.0, 1.0) + + # If bounds don't intersect, go home + intersects, _ = sectRect(bounds1, bounds2) + if not intersects: + return [] + + def midpoint(r): + return 0.5 * (r[0] + r[1]) + + # If they do overlap but they're tiny, approximate + if rectArea(bounds1) < precision and rectArea(bounds2) < precision: + return [(midpoint(range1), midpoint(range2))] + + c11, c12 = _split_segment_at_t(curve1, 0.5) + c11_range = (range1[0], midpoint(range1)) + c12_range = (midpoint(range1), range1[1]) + + c21, c22 = _split_segment_at_t(curve2, 0.5) + c21_range = (range2[0], midpoint(range2)) + c22_range = (midpoint(range2), range2[1]) + + found = [] + found.extend( + _curve_curve_intersections_t( + c11, c21, precision, range1=c11_range, range2=c21_range + ) + ) + found.extend( + _curve_curve_intersections_t( + c12, c21, precision, range1=c12_range, range2=c21_range + ) + ) + found.extend( + _curve_curve_intersections_t( + c11, c22, precision, range1=c11_range, range2=c22_range + ) + ) + found.extend( + _curve_curve_intersections_t( + c12, c22, precision, range1=c12_range, range2=c22_range + ) + ) + + unique_key = lambda ts: (int(ts[0] / precision), int(ts[1] / precision)) + seen = set() + unique_values = [] + + for ts in found: + key = unique_key(ts) + if key in seen: + continue + seen.add(key) + unique_values.append(ts) + + return unique_values + + +def curveCurveIntersections(curve1, curve2): + """Finds intersections between a curve and a curve. + + Args: + curve1: List of coordinates of the first curve segment as 2D tuples. + curve2: List of coordinates of the second curve segment as 2D tuples. + + Returns: + A list of ``Intersection`` objects, each object having ``pt``, ``t1`` + and ``t2`` attributes containing the intersection point, time on first + segment and time on second segment respectively. + + Examples:: + >>> curve1 = [ (10,100), (90,30), (40,140), (220,220) ] + >>> curve2 = [ (5,150), (180,20), (80,250), (210,190) ] + >>> intersections = curveCurveIntersections(curve1, curve2) + >>> len(intersections) + 3 + >>> intersections[0].pt + (81.7831487395506, 109.88904552375288) + """ + intersection_ts = _curve_curve_intersections_t(curve1, curve2) + return [ + Intersection(pt=segmentPointAtT(curve1, ts[0]), t1=ts[0], t2=ts[1]) + for ts in intersection_ts + ] + + +def segmentSegmentIntersections(seg1, seg2): + """Finds intersections between two segments. + + Args: + seg1: List of coordinates of the first segment as 2D tuples. + seg2: List of coordinates of the second segment as 2D tuples. + + Returns: + A list of ``Intersection`` objects, each object having ``pt``, ``t1`` + and ``t2`` attributes containing the intersection point, time on first + segment and time on second segment respectively. + + Examples:: + >>> curve1 = [ (10,100), (90,30), (40,140), (220,220) ] + >>> curve2 = [ (5,150), (180,20), (80,250), (210,190) ] + >>> intersections = segmentSegmentIntersections(curve1, curve2) + >>> len(intersections) + 3 + >>> intersections[0].pt + (81.7831487395506, 109.88904552375288) + >>> curve3 = [ (100, 240), (30, 60), (210, 230), (160, 30) ] + >>> line = [ (25, 260), (230, 20) ] + >>> intersections = segmentSegmentIntersections(curve3, line) + >>> len(intersections) + 3 + >>> intersections[0].pt + (84.9000930760723, 189.87306176459828) + + """ + # Arrange by degree + swapped = False + if len(seg2) > len(seg1): + seg2, seg1 = seg1, seg2 + swapped = True + if len(seg1) > 2: + if len(seg2) > 2: + intersections = curveCurveIntersections(seg1, seg2) + else: + intersections = curveLineIntersections(seg1, seg2) + elif len(seg1) == 2 and len(seg2) == 2: + intersections = lineLineIntersections(*seg1, *seg2) + else: + raise ValueError("Couldn't work out which intersection function to use") + if not swapped: + return intersections + return [Intersection(pt=i.pt, t1=i.t2, t2=i.t1) for i in intersections] + + +def _segmentrepr(obj): + """ + >>> _segmentrepr([1, [2, 3], [], [[2, [3, 4], [0.1, 2.2]]]]) + '(1, (2, 3), (), ((2, (3, 4), (0.1, 2.2))))' + """ + try: + it = iter(obj) + except TypeError: + return "%g" % obj + else: + return "(%s)" % ", ".join(_segmentrepr(x) for x in it) + + +def printSegments(segments): + """Helper for the doctests, displaying each segment in a list of + segments on a single line as a tuple. + """ + for segment in segments: + print(_segmentrepr(segment)) + + +if __name__ == "__main__": + import sys + import doctest + + sys.exit(doctest.testmod().failed) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/classifyTools.py b/.venv/lib/python3.9/site-packages/fontTools/misc/classifyTools.py new file mode 100644 index 00000000..ae88a8f7 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/classifyTools.py @@ -0,0 +1,171 @@ +""" fontTools.misc.classifyTools.py -- tools for classifying things. +""" + + +class Classifier(object): + + """ + Main Classifier object, used to classify things into similar sets. + """ + + def __init__(self, sort=True): + + self._things = set() # set of all things known so far + self._sets = [] # list of class sets produced so far + self._mapping = {} # map from things to their class set + self._dirty = False + self._sort = sort + + def add(self, set_of_things): + """ + Add a set to the classifier. Any iterable is accepted. + """ + if not set_of_things: + return + + self._dirty = True + + things, sets, mapping = self._things, self._sets, self._mapping + + s = set(set_of_things) + intersection = s.intersection(things) # existing things + s.difference_update(intersection) # new things + difference = s + del s + + # Add new class for new things + if difference: + things.update(difference) + sets.append(difference) + for thing in difference: + mapping[thing] = difference + del difference + + while intersection: + # Take one item and process the old class it belongs to + old_class = mapping[next(iter(intersection))] + old_class_intersection = old_class.intersection(intersection) + + # Update old class to remove items from new set + old_class.difference_update(old_class_intersection) + + # Remove processed items from todo list + intersection.difference_update(old_class_intersection) + + # Add new class for the intersection with old class + sets.append(old_class_intersection) + for thing in old_class_intersection: + mapping[thing] = old_class_intersection + del old_class_intersection + + def update(self, list_of_sets): + """ + Add a a list of sets to the classifier. Any iterable of iterables is accepted. + """ + for s in list_of_sets: + self.add(s) + + def _process(self): + if not self._dirty: + return + + # Do any deferred processing + sets = self._sets + self._sets = [s for s in sets if s] + + if self._sort: + self._sets = sorted(self._sets, key=lambda s: (-len(s), sorted(s))) + + self._dirty = False + + # Output methods + + def getThings(self): + """Returns the set of all things known so far. + + The return value belongs to the Classifier object and should NOT + be modified while the classifier is still in use. + """ + self._process() + return self._things + + def getMapping(self): + """Returns the mapping from things to their class set. + + The return value belongs to the Classifier object and should NOT + be modified while the classifier is still in use. + """ + self._process() + return self._mapping + + def getClasses(self): + """Returns the list of class sets. + + The return value belongs to the Classifier object and should NOT + be modified while the classifier is still in use. + """ + self._process() + return self._sets + + +def classify(list_of_sets, sort=True): + """ + Takes a iterable of iterables (list of sets from here on; but any + iterable works.), and returns the smallest list of sets such that + each set, is either a subset, or is disjoint from, each of the input + sets. + + In other words, this function classifies all the things present in + any of the input sets, into similar classes, based on which sets + things are a member of. + + If sort=True, return class sets are sorted by decreasing size and + their natural sort order within each class size. Otherwise, class + sets are returned in the order that they were identified, which is + generally not significant. + + >>> classify([]) == ([], {}) + True + >>> classify([[]]) == ([], {}) + True + >>> classify([[], []]) == ([], {}) + True + >>> classify([[1]]) == ([{1}], {1: {1}}) + True + >>> classify([[1,2]]) == ([{1, 2}], {1: {1, 2}, 2: {1, 2}}) + True + >>> classify([[1],[2]]) == ([{1}, {2}], {1: {1}, 2: {2}}) + True + >>> classify([[1,2],[2]]) == ([{1}, {2}], {1: {1}, 2: {2}}) + True + >>> classify([[1,2],[2,4]]) == ([{1}, {2}, {4}], {1: {1}, 2: {2}, 4: {4}}) + True + >>> classify([[1,2],[2,4,5]]) == ( + ... [{4, 5}, {1}, {2}], {1: {1}, 2: {2}, 4: {4, 5}, 5: {4, 5}}) + True + >>> classify([[1,2],[2,4,5]], sort=False) == ( + ... [{1}, {4, 5}, {2}], {1: {1}, 2: {2}, 4: {4, 5}, 5: {4, 5}}) + True + >>> classify([[1,2,9],[2,4,5]], sort=False) == ( + ... [{1, 9}, {4, 5}, {2}], {1: {1, 9}, 2: {2}, 4: {4, 5}, 5: {4, 5}, + ... 9: {1, 9}}) + True + >>> classify([[1,2,9,15],[2,4,5]], sort=False) == ( + ... [{1, 9, 15}, {4, 5}, {2}], {1: {1, 9, 15}, 2: {2}, 4: {4, 5}, + ... 5: {4, 5}, 9: {1, 9, 15}, 15: {1, 9, 15}}) + True + >>> classes, mapping = classify([[1,2,9,15],[2,4,5],[15,5]], sort=False) + >>> set([frozenset(c) for c in classes]) == set( + ... [frozenset(s) for s in ({1, 9}, {4}, {2}, {5}, {15})]) + True + >>> mapping == {1: {1, 9}, 2: {2}, 4: {4}, 5: {5}, 9: {1, 9}, 15: {15}} + True + """ + classifier = Classifier(sort=sort) + classifier.update(list_of_sets) + return classifier.getClasses(), classifier.getMapping() + + +if __name__ == "__main__": + import sys, doctest + sys.exit(doctest.testmod(optionflags=doctest.ELLIPSIS).failed) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/cliTools.py b/.venv/lib/python3.9/site-packages/fontTools/misc/cliTools.py new file mode 100644 index 00000000..e8c17677 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/cliTools.py @@ -0,0 +1,46 @@ +"""Collection of utilities for command-line interfaces and console scripts.""" +import os +import re + + +numberAddedRE = re.compile(r"#\d+$") + + +def makeOutputFileName(input, outputDir=None, extension=None, overWrite=False): + """Generates a suitable file name for writing output. + + Often tools will want to take a file, do some kind of transformation to it, + and write it out again. This function determines an appropriate name for the + output file, through one or more of the following steps: + + - changing the output directory + - replacing the file extension + - suffixing the filename with a number (``#1``, ``#2``, etc.) to avoid + overwriting an existing file. + + Args: + input: Name of input file. + outputDir: Optionally, a new directory to write the file into. + extension: Optionally, a replacement for the current file extension. + overWrite: Overwriting an existing file is permitted if true; if false + and the proposed filename exists, a new name will be generated by + adding an appropriate number suffix. + + Returns: + str: Suitable output filename + """ + dirName, fileName = os.path.split(input) + fileName, ext = os.path.splitext(fileName) + if outputDir: + dirName = outputDir + fileName = numberAddedRE.split(fileName)[0] + if extension is None: + extension = os.path.splitext(input)[1] + output = os.path.join(dirName, fileName + extension) + n = 1 + if not overWrite: + while os.path.exists(output): + output = os.path.join( + dirName, fileName + "#" + repr(n) + extension) + n += 1 + return output diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/cython.py b/.venv/lib/python3.9/site-packages/fontTools/misc/cython.py new file mode 100644 index 00000000..0ba659f6 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/cython.py @@ -0,0 +1,25 @@ +""" Exports a no-op 'cython' namespace similar to +https://github.com/cython/cython/blob/master/Cython/Shadow.py + +This allows to optionally compile @cython decorated functions +(when cython is available at built time), or run the same code +as pure-python, without runtime dependency on cython module. + +We only define the symbols that we use. E.g. see fontTools.cu2qu +""" + +from types import SimpleNamespace + +def _empty_decorator(x): + return x + +compiled = False + +for name in ("double", "complex", "int"): + globals()[name] = None + +for name in ("cfunc", "inline"): + globals()[name] = _empty_decorator + +locals = lambda **_: _empty_decorator +returns = lambda _: _empty_decorator diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/dictTools.py b/.venv/lib/python3.9/site-packages/fontTools/misc/dictTools.py new file mode 100644 index 00000000..ae7932c9 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/dictTools.py @@ -0,0 +1,66 @@ +"""Misc dict tools.""" + + +__all__ = ['hashdict'] + +# https://stackoverflow.com/questions/1151658/python-hashable-dicts +class hashdict(dict): + """ + hashable dict implementation, suitable for use as a key into + other dicts. + + >>> h1 = hashdict({"apples": 1, "bananas":2}) + >>> h2 = hashdict({"bananas": 3, "mangoes": 5}) + >>> h1+h2 + hashdict(apples=1, bananas=3, mangoes=5) + >>> d1 = {} + >>> d1[h1] = "salad" + >>> d1[h1] + 'salad' + >>> d1[h2] + Traceback (most recent call last): + ... + KeyError: hashdict(bananas=3, mangoes=5) + + based on answers from + http://stackoverflow.com/questions/1151658/python-hashable-dicts + + """ + def __key(self): + return tuple(sorted(self.items())) + def __repr__(self): + return "{0}({1})".format(self.__class__.__name__, + ", ".join("{0}={1}".format( + str(i[0]),repr(i[1])) for i in self.__key())) + + def __hash__(self): + return hash(self.__key()) + def __setitem__(self, key, value): + raise TypeError("{0} does not support item assignment" + .format(self.__class__.__name__)) + def __delitem__(self, key): + raise TypeError("{0} does not support item assignment" + .format(self.__class__.__name__)) + def clear(self): + raise TypeError("{0} does not support item assignment" + .format(self.__class__.__name__)) + def pop(self, *args, **kwargs): + raise TypeError("{0} does not support item assignment" + .format(self.__class__.__name__)) + def popitem(self, *args, **kwargs): + raise TypeError("{0} does not support item assignment" + .format(self.__class__.__name__)) + def setdefault(self, *args, **kwargs): + raise TypeError("{0} does not support item assignment" + .format(self.__class__.__name__)) + def update(self, *args, **kwargs): + raise TypeError("{0} does not support item assignment" + .format(self.__class__.__name__)) + # update is not ok because it mutates the object + # __add__ is ok because it creates a new object + # while the new object is under construction, it's ok to mutate it + def __add__(self, right): + result = hashdict(self) + dict.update(result, right) + return result + diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/eexec.py b/.venv/lib/python3.9/site-packages/fontTools/misc/eexec.py new file mode 100644 index 00000000..d1d4bb6a --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/eexec.py @@ -0,0 +1,113 @@ +""" +PostScript Type 1 fonts make use of two types of encryption: charstring +encryption and ``eexec`` encryption. Charstring encryption is used for +the charstrings themselves, while ``eexec`` is used to encrypt larger +sections of the font program, such as the ``Private`` and ``CharStrings`` +dictionaries. Despite the different names, the algorithm is the same, +although ``eexec`` encryption uses a fixed initial key R=55665. + +The algorithm uses cipher feedback, meaning that the ciphertext is used +to modify the key. Because of this, the routines in this module return +the new key at the end of the operation. + +""" + +from fontTools.misc.textTools import bytechr, bytesjoin, byteord + + +def _decryptChar(cipher, R): + cipher = byteord(cipher) + plain = ( (cipher ^ (R>>8)) ) & 0xFF + R = ( (cipher + R) * 52845 + 22719 ) & 0xFFFF + return bytechr(plain), R + +def _encryptChar(plain, R): + plain = byteord(plain) + cipher = ( (plain ^ (R>>8)) ) & 0xFF + R = ( (cipher + R) * 52845 + 22719 ) & 0xFFFF + return bytechr(cipher), R + + +def decrypt(cipherstring, R): + r""" + Decrypts a string using the Type 1 encryption algorithm. + + Args: + cipherstring: String of ciphertext. + R: Initial key. + + Returns: + decryptedStr: Plaintext string. + R: Output key for subsequent decryptions. + + Examples:: + + >>> testStr = b"\0\0asdadads asds\265" + >>> decryptedStr, R = decrypt(testStr, 12321) + >>> decryptedStr == b'0d\nh\x15\xe8\xc4\xb2\x15\x1d\x108\x1a<6\xa1' + True + >>> R == 36142 + True + """ + plainList = [] + for cipher in cipherstring: + plain, R = _decryptChar(cipher, R) + plainList.append(plain) + plainstring = bytesjoin(plainList) + return plainstring, int(R) + +def encrypt(plainstring, R): + r""" + Encrypts a string using the Type 1 encryption algorithm. + + Note that the algorithm as described in the Type 1 specification requires the + plaintext to be prefixed with a number of random bytes. (For ``eexec`` the + number of random bytes is set to 4.) This routine does *not* add the random + prefix to its input. + + Args: + plainstring: String of plaintext. + R: Initial key. + + Returns: + cipherstring: Ciphertext string. + R: Output key for subsequent encryptions. + + Examples:: + + >>> testStr = b"\0\0asdadads asds\265" + >>> decryptedStr, R = decrypt(testStr, 12321) + >>> decryptedStr == b'0d\nh\x15\xe8\xc4\xb2\x15\x1d\x108\x1a<6\xa1' + True + >>> R == 36142 + True + + >>> testStr = b'0d\nh\x15\xe8\xc4\xb2\x15\x1d\x108\x1a<6\xa1' + >>> encryptedStr, R = encrypt(testStr, 12321) + >>> encryptedStr == b"\0\0asdadads asds\265" + True + >>> R == 36142 + True + """ + cipherList = [] + for plain in plainstring: + cipher, R = _encryptChar(plain, R) + cipherList.append(cipher) + cipherstring = bytesjoin(cipherList) + return cipherstring, int(R) + + +def hexString(s): + import binascii + return binascii.hexlify(s) + +def deHexString(h): + import binascii + h = bytesjoin(h.split()) + return binascii.unhexlify(h) + + +if __name__ == "__main__": + import sys + import doctest + sys.exit(doctest.testmod().failed) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/encodingTools.py b/.venv/lib/python3.9/site-packages/fontTools/misc/encodingTools.py new file mode 100644 index 00000000..eccf951d --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/encodingTools.py @@ -0,0 +1,71 @@ +"""fontTools.misc.encodingTools.py -- tools for working with OpenType encodings. +""" + +import fontTools.encodings.codecs + +# Map keyed by platformID, then platEncID, then possibly langID +_encodingMap = { + 0: { # Unicode + 0: 'utf_16_be', + 1: 'utf_16_be', + 2: 'utf_16_be', + 3: 'utf_16_be', + 4: 'utf_16_be', + 5: 'utf_16_be', + 6: 'utf_16_be', + }, + 1: { # Macintosh + # See + # https://github.com/fonttools/fonttools/issues/236 + 0: { # Macintosh, platEncID==0, keyed by langID + 15: "mac_iceland", + 17: "mac_turkish", + 18: "mac_croatian", + 24: "mac_latin2", + 25: "mac_latin2", + 26: "mac_latin2", + 27: "mac_latin2", + 28: "mac_latin2", + 36: "mac_latin2", + 37: "mac_romanian", + 38: "mac_latin2", + 39: "mac_latin2", + 40: "mac_latin2", + Ellipsis: 'mac_roman', # Other + }, + 1: 'x_mac_japanese_ttx', + 2: 'x_mac_trad_chinese_ttx', + 3: 'x_mac_korean_ttx', + 6: 'mac_greek', + 7: 'mac_cyrillic', + 25: 'x_mac_simp_chinese_ttx', + 29: 'mac_latin2', + 35: 'mac_turkish', + 37: 'mac_iceland', + }, + 2: { # ISO + 0: 'ascii', + 1: 'utf_16_be', + 2: 'latin1', + }, + 3: { # Microsoft + 0: 'utf_16_be', + 1: 'utf_16_be', + 2: 'shift_jis', + 3: 'gb2312', + 4: 'big5', + 5: 'euc_kr', + 6: 'johab', + 10: 'utf_16_be', + }, +} + +def getEncoding(platformID, platEncID, langID, default=None): + """Returns the Python encoding name for OpenType platformID/encodingID/langID + triplet. If encoding for these values is not known, by default None is + returned. That can be overriden by passing a value to the default argument. + """ + encoding = _encodingMap.get(platformID, {}).get(platEncID, default) + if isinstance(encoding, dict): + encoding = encoding.get(langID, encoding[Ellipsis]) + return encoding diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/etree.py b/.venv/lib/python3.9/site-packages/fontTools/misc/etree.py new file mode 100644 index 00000000..cd4df365 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/etree.py @@ -0,0 +1,479 @@ +"""Shim module exporting the same ElementTree API for lxml and +xml.etree backends. + +When lxml is installed, it is automatically preferred over the built-in +xml.etree module. +On Python 2.7, the cElementTree module is preferred over the pure-python +ElementTree module. + +Besides exporting a unified interface, this also defines extra functions +or subclasses built-in ElementTree classes to add features that are +only availble in lxml, like OrderedDict for attributes, pretty_print and +iterwalk. +""" +from fontTools.misc.textTools import tostr + + +XML_DECLARATION = """""" + +__all__ = [ + # public symbols + "Comment", + "dump", + "Element", + "ElementTree", + "fromstring", + "fromstringlist", + "iselement", + "iterparse", + "parse", + "ParseError", + "PI", + "ProcessingInstruction", + "QName", + "SubElement", + "tostring", + "tostringlist", + "TreeBuilder", + "XML", + "XMLParser", + "register_namespace", +] + +try: + from lxml.etree import * + + _have_lxml = True +except ImportError: + try: + from xml.etree.cElementTree import * + + # the cElementTree version of XML function doesn't support + # the optional 'parser' keyword argument + from xml.etree.ElementTree import XML + except ImportError: # pragma: no cover + from xml.etree.ElementTree import * + _have_lxml = False + + import sys + + # dict is always ordered in python >= 3.6 and on pypy + PY36 = sys.version_info >= (3, 6) + try: + import __pypy__ + except ImportError: + __pypy__ = None + _dict_is_ordered = bool(PY36 or __pypy__) + del PY36, __pypy__ + + if _dict_is_ordered: + _Attrib = dict + else: + from collections import OrderedDict as _Attrib + + if isinstance(Element, type): + _Element = Element + else: + # in py27, cElementTree.Element cannot be subclassed, so + # we need to import the pure-python class + from xml.etree.ElementTree import Element as _Element + + class Element(_Element): + """Element subclass that keeps the order of attributes.""" + + def __init__(self, tag, attrib=_Attrib(), **extra): + super(Element, self).__init__(tag) + self.attrib = _Attrib() + if attrib: + self.attrib.update(attrib) + if extra: + self.attrib.update(extra) + + def SubElement(parent, tag, attrib=_Attrib(), **extra): + """Must override SubElement as well otherwise _elementtree.SubElement + fails if 'parent' is a subclass of Element object. + """ + element = parent.__class__(tag, attrib, **extra) + parent.append(element) + return element + + def _iterwalk(element, events, tag): + include = tag is None or element.tag == tag + if include and "start" in events: + yield ("start", element) + for e in element: + for item in _iterwalk(e, events, tag): + yield item + if include: + yield ("end", element) + + def iterwalk(element_or_tree, events=("end",), tag=None): + """A tree walker that generates events from an existing tree as + if it was parsing XML data with iterparse(). + Drop-in replacement for lxml.etree.iterwalk. + """ + if iselement(element_or_tree): + element = element_or_tree + else: + element = element_or_tree.getroot() + if tag == "*": + tag = None + for item in _iterwalk(element, events, tag): + yield item + + _ElementTree = ElementTree + + class ElementTree(_ElementTree): + """ElementTree subclass that adds 'pretty_print' and 'doctype' + arguments to the 'write' method. + Currently these are only supported for the default XML serialization + 'method', and not also for "html" or "text", for these are delegated + to the base class. + """ + + def write( + self, + file_or_filename, + encoding=None, + xml_declaration=False, + method=None, + doctype=None, + pretty_print=False, + ): + if method and method != "xml": + # delegate to super-class + super(ElementTree, self).write( + file_or_filename, + encoding=encoding, + xml_declaration=xml_declaration, + method=method, + ) + return + + if encoding is not None and encoding.lower() == "unicode": + if xml_declaration: + raise ValueError( + "Serialisation to unicode must not request an XML declaration" + ) + write_declaration = False + encoding = "unicode" + elif xml_declaration is None: + # by default, write an XML declaration only for non-standard encodings + write_declaration = encoding is not None and encoding.upper() not in ( + "ASCII", + "UTF-8", + "UTF8", + "US-ASCII", + ) + else: + write_declaration = xml_declaration + + if encoding is None: + encoding = "ASCII" + + if pretty_print: + # NOTE this will modify the tree in-place + _indent(self._root) + + with _get_writer(file_or_filename, encoding) as write: + if write_declaration: + write(XML_DECLARATION % encoding.upper()) + if pretty_print: + write("\n") + if doctype: + write(_tounicode(doctype)) + if pretty_print: + write("\n") + + qnames, namespaces = _namespaces(self._root) + _serialize_xml(write, self._root, qnames, namespaces) + + import io + + def tostring( + element, + encoding=None, + xml_declaration=None, + method=None, + doctype=None, + pretty_print=False, + ): + """Custom 'tostring' function that uses our ElementTree subclass, with + pretty_print support. + """ + stream = io.StringIO() if encoding == "unicode" else io.BytesIO() + ElementTree(element).write( + stream, + encoding=encoding, + xml_declaration=xml_declaration, + method=method, + doctype=doctype, + pretty_print=pretty_print, + ) + return stream.getvalue() + + # serialization support + + import re + + # Valid XML strings can include any Unicode character, excluding control + # characters, the surrogate blocks, FFFE, and FFFF: + # Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] + # Here we reversed the pattern to match only the invalid characters. + # For the 'narrow' python builds supporting only UCS-2, which represent + # characters beyond BMP as UTF-16 surrogate pairs, we need to pass through + # the surrogate block. I haven't found a more elegant solution... + UCS2 = sys.maxunicode < 0x10FFFF + if UCS2: + _invalid_xml_string = re.compile( + "[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uFFFE-\uFFFF]" + ) + else: + _invalid_xml_string = re.compile( + "[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE-\uFFFF]" + ) + + def _tounicode(s): + """Test if a string is valid user input and decode it to unicode string + using ASCII encoding if it's a bytes string. + Reject all bytes/unicode input that contains non-XML characters. + Reject all bytes input that contains non-ASCII characters. + """ + try: + s = tostr(s, encoding="ascii", errors="strict") + except UnicodeDecodeError: + raise ValueError( + "Bytes strings can only contain ASCII characters. " + "Use unicode strings for non-ASCII characters.") + except AttributeError: + _raise_serialization_error(s) + if s and _invalid_xml_string.search(s): + raise ValueError( + "All strings must be XML compatible: Unicode or ASCII, " + "no NULL bytes or control characters" + ) + return s + + import contextlib + + @contextlib.contextmanager + def _get_writer(file_or_filename, encoding): + # returns text write method and release all resources after using + try: + write = file_or_filename.write + except AttributeError: + # file_or_filename is a file name + f = open( + file_or_filename, + "w", + encoding="utf-8" if encoding == "unicode" else encoding, + errors="xmlcharrefreplace", + ) + with f: + yield f.write + else: + # file_or_filename is a file-like object + # encoding determines if it is a text or binary writer + if encoding == "unicode": + # use a text writer as is + yield write + else: + # wrap a binary writer with TextIOWrapper + detach_buffer = False + if isinstance(file_or_filename, io.BufferedIOBase): + buf = file_or_filename + elif isinstance(file_or_filename, io.RawIOBase): + buf = io.BufferedWriter(file_or_filename) + detach_buffer = True + else: + # This is to handle passed objects that aren't in the + # IOBase hierarchy, but just have a write method + buf = io.BufferedIOBase() + buf.writable = lambda: True + buf.write = write + try: + # TextIOWrapper uses this methods to determine + # if BOM (for UTF-16, etc) should be added + buf.seekable = file_or_filename.seekable + buf.tell = file_or_filename.tell + except AttributeError: + pass + wrapper = io.TextIOWrapper( + buf, + encoding=encoding, + errors="xmlcharrefreplace", + newline="\n", + ) + try: + yield wrapper.write + finally: + # Keep the original file open when the TextIOWrapper and + # the BufferedWriter are destroyed + wrapper.detach() + if detach_buffer: + buf.detach() + + from xml.etree.ElementTree import _namespace_map + + def _namespaces(elem): + # identify namespaces used in this tree + + # maps qnames to *encoded* prefix:local names + qnames = {None: None} + + # maps uri:s to prefixes + namespaces = {} + + def add_qname(qname): + # calculate serialized qname representation + try: + qname = _tounicode(qname) + if qname[:1] == "{": + uri, tag = qname[1:].rsplit("}", 1) + prefix = namespaces.get(uri) + if prefix is None: + prefix = _namespace_map.get(uri) + if prefix is None: + prefix = "ns%d" % len(namespaces) + else: + prefix = _tounicode(prefix) + if prefix != "xml": + namespaces[uri] = prefix + if prefix: + qnames[qname] = "%s:%s" % (prefix, tag) + else: + qnames[qname] = tag # default element + else: + qnames[qname] = qname + except TypeError: + _raise_serialization_error(qname) + + # populate qname and namespaces table + for elem in elem.iter(): + tag = elem.tag + if isinstance(tag, QName): + if tag.text not in qnames: + add_qname(tag.text) + elif isinstance(tag, str): + if tag not in qnames: + add_qname(tag) + elif tag is not None and tag is not Comment and tag is not PI: + _raise_serialization_error(tag) + for key, value in elem.items(): + if isinstance(key, QName): + key = key.text + if key not in qnames: + add_qname(key) + if isinstance(value, QName) and value.text not in qnames: + add_qname(value.text) + text = elem.text + if isinstance(text, QName) and text.text not in qnames: + add_qname(text.text) + return qnames, namespaces + + def _serialize_xml(write, elem, qnames, namespaces, **kwargs): + tag = elem.tag + text = elem.text + if tag is Comment: + write("" % _tounicode(text)) + elif tag is ProcessingInstruction: + write("" % _tounicode(text)) + else: + tag = qnames[_tounicode(tag) if tag is not None else None] + if tag is None: + if text: + write(_escape_cdata(text)) + for e in elem: + _serialize_xml(write, e, qnames, None) + else: + write("<" + tag) + if namespaces: + for uri, prefix in sorted( + namespaces.items(), key=lambda x: x[1] + ): # sort on prefix + if prefix: + prefix = ":" + prefix + write(' xmlns%s="%s"' % (prefix, _escape_attrib(uri))) + attrs = elem.attrib + if attrs: + # try to keep existing attrib order + if len(attrs) <= 1 or type(attrs) is _Attrib: + items = attrs.items() + else: + # if plain dict, use lexical order + items = sorted(attrs.items()) + for k, v in items: + if isinstance(k, QName): + k = _tounicode(k.text) + else: + k = _tounicode(k) + if isinstance(v, QName): + v = qnames[_tounicode(v.text)] + else: + v = _escape_attrib(v) + write(' %s="%s"' % (qnames[k], v)) + if text is not None or len(elem): + write(">") + if text: + write(_escape_cdata(text)) + for e in elem: + _serialize_xml(write, e, qnames, None) + write("") + else: + write("/>") + if elem.tail: + write(_escape_cdata(elem.tail)) + + def _raise_serialization_error(text): + raise TypeError( + "cannot serialize %r (type %s)" % (text, type(text).__name__) + ) + + def _escape_cdata(text): + # escape character data + try: + text = _tounicode(text) + # it's worth avoiding do-nothing calls for short strings + if "&" in text: + text = text.replace("&", "&") + if "<" in text: + text = text.replace("<", "<") + if ">" in text: + text = text.replace(">", ">") + return text + except (TypeError, AttributeError): + _raise_serialization_error(text) + + def _escape_attrib(text): + # escape attribute value + try: + text = _tounicode(text) + if "&" in text: + text = text.replace("&", "&") + if "<" in text: + text = text.replace("<", "<") + if ">" in text: + text = text.replace(">", ">") + if '"' in text: + text = text.replace('"', """) + if "\n" in text: + text = text.replace("\n", " ") + return text + except (TypeError, AttributeError): + _raise_serialization_error(text) + + def _indent(elem, level=0): + # From http://effbot.org/zone/element-lib.htm#prettyprint + i = "\n" + level * " " + if len(elem): + if not elem.text or not elem.text.strip(): + elem.text = i + " " + if not elem.tail or not elem.tail.strip(): + elem.tail = i + for elem in elem: + _indent(elem, level + 1) + if not elem.tail or not elem.tail.strip(): + elem.tail = i + else: + if level and (not elem.tail or not elem.tail.strip()): + elem.tail = i diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/filenames.py b/.venv/lib/python3.9/site-packages/fontTools/misc/filenames.py new file mode 100644 index 00000000..0f010008 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/filenames.py @@ -0,0 +1,242 @@ +""" +This module implements the algorithm for converting between a "user name" - +something that a user can choose arbitrarily inside a font editor - and a file +name suitable for use in a wide range of operating systems and filesystems. + +The `UFO 3 specification `_ +provides an example of an algorithm for such conversion, which avoids illegal +characters, reserved file names, ambiguity between upper- and lower-case +characters, and clashes with existing files. + +This code was originally copied from +`ufoLib `_ +by Tal Leming and is copyright (c) 2005-2016, The RoboFab Developers: + +- Erik van Blokland +- Tal Leming +- Just van Rossum +""" + + +illegalCharacters = r"\" * + / : < > ? [ \ ] | \0".split(" ") +illegalCharacters += [chr(i) for i in range(1, 32)] +illegalCharacters += [chr(0x7F)] +reservedFileNames = "CON PRN AUX CLOCK$ NUL A:-Z: COM1".lower().split(" ") +reservedFileNames += "LPT1 LPT2 LPT3 COM2 COM3 COM4".lower().split(" ") +maxFileNameLength = 255 + + +class NameTranslationError(Exception): + pass + + +def userNameToFileName(userName, existing=[], prefix="", suffix=""): + """Converts from a user name to a file name. + + Takes care to avoid illegal characters, reserved file names, ambiguity between + upper- and lower-case characters, and clashes with existing files. + + Args: + userName (str): The input file name. + existing: A case-insensitive list of all existing file names. + prefix: Prefix to be prepended to the file name. + suffix: Suffix to be appended to the file name. + + Returns: + A suitable filename. + + Raises: + NameTranslationError: If no suitable name could be generated. + + Examples:: + + >>> userNameToFileName("a") == "a" + True + >>> userNameToFileName("A") == "A_" + True + >>> userNameToFileName("AE") == "A_E_" + True + >>> userNameToFileName("Ae") == "A_e" + True + >>> userNameToFileName("ae") == "ae" + True + >>> userNameToFileName("aE") == "aE_" + True + >>> userNameToFileName("a.alt") == "a.alt" + True + >>> userNameToFileName("A.alt") == "A_.alt" + True + >>> userNameToFileName("A.Alt") == "A_.A_lt" + True + >>> userNameToFileName("A.aLt") == "A_.aL_t" + True + >>> userNameToFileName(u"A.alT") == "A_.alT_" + True + >>> userNameToFileName("T_H") == "T__H_" + True + >>> userNameToFileName("T_h") == "T__h" + True + >>> userNameToFileName("t_h") == "t_h" + True + >>> userNameToFileName("F_F_I") == "F__F__I_" + True + >>> userNameToFileName("f_f_i") == "f_f_i" + True + >>> userNameToFileName("Aacute_V.swash") == "A_acute_V_.swash" + True + >>> userNameToFileName(".notdef") == "_notdef" + True + >>> userNameToFileName("con") == "_con" + True + >>> userNameToFileName("CON") == "C_O_N_" + True + >>> userNameToFileName("con.alt") == "_con.alt" + True + >>> userNameToFileName("alt.con") == "alt._con" + True + """ + # the incoming name must be a str + if not isinstance(userName, str): + raise ValueError("The value for userName must be a string.") + # establish the prefix and suffix lengths + prefixLength = len(prefix) + suffixLength = len(suffix) + # replace an initial period with an _ + # if no prefix is to be added + if not prefix and userName[0] == ".": + userName = "_" + userName[1:] + # filter the user name + filteredUserName = [] + for character in userName: + # replace illegal characters with _ + if character in illegalCharacters: + character = "_" + # add _ to all non-lower characters + elif character != character.lower(): + character += "_" + filteredUserName.append(character) + userName = "".join(filteredUserName) + # clip to 255 + sliceLength = maxFileNameLength - prefixLength - suffixLength + userName = userName[:sliceLength] + # test for illegal files names + parts = [] + for part in userName.split("."): + if part.lower() in reservedFileNames: + part = "_" + part + parts.append(part) + userName = ".".join(parts) + # test for clash + fullName = prefix + userName + suffix + if fullName.lower() in existing: + fullName = handleClash1(userName, existing, prefix, suffix) + # finished + return fullName + +def handleClash1(userName, existing=[], prefix="", suffix=""): + """ + existing should be a case-insensitive list + of all existing file names. + + >>> prefix = ("0" * 5) + "." + >>> suffix = "." + ("0" * 10) + >>> existing = ["a" * 5] + + >>> e = list(existing) + >>> handleClash1(userName="A" * 5, existing=e, + ... prefix=prefix, suffix=suffix) == ( + ... '00000.AAAAA000000000000001.0000000000') + True + + >>> e = list(existing) + >>> e.append(prefix + "aaaaa" + "1".zfill(15) + suffix) + >>> handleClash1(userName="A" * 5, existing=e, + ... prefix=prefix, suffix=suffix) == ( + ... '00000.AAAAA000000000000002.0000000000') + True + + >>> e = list(existing) + >>> e.append(prefix + "AAAAA" + "2".zfill(15) + suffix) + >>> handleClash1(userName="A" * 5, existing=e, + ... prefix=prefix, suffix=suffix) == ( + ... '00000.AAAAA000000000000001.0000000000') + True + """ + # if the prefix length + user name length + suffix length + 15 is at + # or past the maximum length, silce 15 characters off of the user name + prefixLength = len(prefix) + suffixLength = len(suffix) + if prefixLength + len(userName) + suffixLength + 15 > maxFileNameLength: + l = (prefixLength + len(userName) + suffixLength + 15) + sliceLength = maxFileNameLength - l + userName = userName[:sliceLength] + finalName = None + # try to add numbers to create a unique name + counter = 1 + while finalName is None: + name = userName + str(counter).zfill(15) + fullName = prefix + name + suffix + if fullName.lower() not in existing: + finalName = fullName + break + else: + counter += 1 + if counter >= 999999999999999: + break + # if there is a clash, go to the next fallback + if finalName is None: + finalName = handleClash2(existing, prefix, suffix) + # finished + return finalName + +def handleClash2(existing=[], prefix="", suffix=""): + """ + existing should be a case-insensitive list + of all existing file names. + + >>> prefix = ("0" * 5) + "." + >>> suffix = "." + ("0" * 10) + >>> existing = [prefix + str(i) + suffix for i in range(100)] + + >>> e = list(existing) + >>> handleClash2(existing=e, prefix=prefix, suffix=suffix) == ( + ... '00000.100.0000000000') + True + + >>> e = list(existing) + >>> e.remove(prefix + "1" + suffix) + >>> handleClash2(existing=e, prefix=prefix, suffix=suffix) == ( + ... '00000.1.0000000000') + True + + >>> e = list(existing) + >>> e.remove(prefix + "2" + suffix) + >>> handleClash2(existing=e, prefix=prefix, suffix=suffix) == ( + ... '00000.2.0000000000') + True + """ + # calculate the longest possible string + maxLength = maxFileNameLength - len(prefix) - len(suffix) + maxValue = int("9" * maxLength) + # try to find a number + finalName = None + counter = 1 + while finalName is None: + fullName = prefix + str(counter) + suffix + if fullName.lower() not in existing: + finalName = fullName + break + else: + counter += 1 + if counter >= maxValue: + break + # raise an error if nothing has been found + if finalName is None: + raise NameTranslationError("No unique name could be found.") + # finished + return finalName + +if __name__ == "__main__": + import doctest + import sys + sys.exit(doctest.testmod().failed) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/fixedTools.py b/.venv/lib/python3.9/site-packages/fontTools/misc/fixedTools.py new file mode 100644 index 00000000..f87e3322 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/fixedTools.py @@ -0,0 +1,251 @@ +""" +The `OpenType specification `_ +defines two fixed-point data types: + +``Fixed`` + A 32-bit signed fixed-point number with a 16 bit twos-complement + magnitude component and 16 fractional bits. +``F2DOT14`` + A 16-bit signed fixed-point number with a 2 bit twos-complement + magnitude component and 14 fractional bits. + +To support reading and writing data with these data types, this module provides +functions for converting between fixed-point, float and string representations. + +.. data:: MAX_F2DOT14 + + The maximum value that can still fit in an F2Dot14. (1.99993896484375) +""" + +from .roundTools import otRound, nearestMultipleShortestRepr +import logging + +log = logging.getLogger(__name__) + +__all__ = [ + "MAX_F2DOT14", + "fixedToFloat", + "floatToFixed", + "floatToFixedToFloat", + "floatToFixedToStr", + "fixedToStr", + "strToFixed", + "strToFixedToFloat", + "ensureVersionIsLong", + "versionToFixed", +] + + +MAX_F2DOT14 = 0x7FFF / (1 << 14) + + +def fixedToFloat(value, precisionBits): + """Converts a fixed-point number to a float given the number of + precision bits. + + Args: + value (int): Number in fixed-point format. + precisionBits (int): Number of precision bits. + + Returns: + Floating point value. + + Examples:: + + >>> import math + >>> f = fixedToFloat(-10139, precisionBits=14) + >>> math.isclose(f, -0.61883544921875) + True + """ + return value / (1 << precisionBits) + + +def floatToFixed(value, precisionBits): + """Converts a float to a fixed-point number given the number of + precision bits. + + Args: + value (float): Floating point value. + precisionBits (int): Number of precision bits. + + Returns: + int: Fixed-point representation. + + Examples:: + + >>> floatToFixed(-0.61883544921875, precisionBits=14) + -10139 + >>> floatToFixed(-0.61884, precisionBits=14) + -10139 + """ + return otRound(value * (1 << precisionBits)) + + +def floatToFixedToFloat(value, precisionBits): + """Converts a float to a fixed-point number and back again. + + By converting the float to fixed, rounding it, and converting it back + to float again, this returns a floating point values which is exactly + representable in fixed-point format. + + Note: this **is** equivalent to ``fixedToFloat(floatToFixed(value))``. + + Args: + value (float): The input floating point value. + precisionBits (int): Number of precision bits. + + Returns: + float: The transformed and rounded value. + + Examples:: + >>> import math + >>> f1 = -0.61884 + >>> f2 = floatToFixedToFloat(-0.61884, precisionBits=14) + >>> f1 != f2 + True + >>> math.isclose(f2, -0.61883544921875) + True + """ + scale = 1 << precisionBits + return otRound(value * scale) / scale + + +def fixedToStr(value, precisionBits): + """Converts a fixed-point number to a string representing a decimal float. + + This chooses the float that has the shortest decimal representation (the least + number of fractional decimal digits). + + For example, to convert a fixed-point number in a 2.14 format, use + ``precisionBits=14``:: + + >>> fixedToStr(-10139, precisionBits=14) + '-0.61884' + + This is pretty slow compared to the simple division used in ``fixedToFloat``. + Use sporadically when you need to serialize or print the fixed-point number in + a human-readable form. + It uses nearestMultipleShortestRepr under the hood. + + Args: + value (int): The fixed-point value to convert. + precisionBits (int): Number of precision bits, *up to a maximum of 16*. + + Returns: + str: A string representation of the value. + """ + scale = 1 << precisionBits + return nearestMultipleShortestRepr(value/scale, factor=1.0/scale) + + +def strToFixed(string, precisionBits): + """Converts a string representing a decimal float to a fixed-point number. + + Args: + string (str): A string representing a decimal float. + precisionBits (int): Number of precision bits, *up to a maximum of 16*. + + Returns: + int: Fixed-point representation. + + Examples:: + + >>> ## to convert a float string to a 2.14 fixed-point number: + >>> strToFixed('-0.61884', precisionBits=14) + -10139 + """ + value = float(string) + return otRound(value * (1 << precisionBits)) + + +def strToFixedToFloat(string, precisionBits): + """Convert a string to a decimal float with fixed-point rounding. + + This first converts string to a float, then turns it into a fixed-point + number with ``precisionBits`` fractional binary digits, then back to a + float again. + + This is simply a shorthand for fixedToFloat(floatToFixed(float(s))). + + Args: + string (str): A string representing a decimal float. + precisionBits (int): Number of precision bits. + + Returns: + float: The transformed and rounded value. + + Examples:: + + >>> import math + >>> s = '-0.61884' + >>> bits = 14 + >>> f = strToFixedToFloat(s, precisionBits=bits) + >>> math.isclose(f, -0.61883544921875) + True + >>> f == fixedToFloat(floatToFixed(float(s), precisionBits=bits), precisionBits=bits) + True + """ + value = float(string) + scale = 1 << precisionBits + return otRound(value * scale) / scale + + +def floatToFixedToStr(value, precisionBits): + """Convert float to string with fixed-point rounding. + + This uses the shortest decimal representation (ie. the least + number of fractional decimal digits) to represent the equivalent + fixed-point number with ``precisionBits`` fractional binary digits. + It uses nearestMultipleShortestRepr under the hood. + + >>> floatToFixedToStr(-0.61883544921875, precisionBits=14) + '-0.61884' + + Args: + value (float): The float value to convert. + precisionBits (int): Number of precision bits, *up to a maximum of 16*. + + Returns: + str: A string representation of the value. + + """ + scale = 1 << precisionBits + return nearestMultipleShortestRepr(value, factor=1.0/scale) + + +def ensureVersionIsLong(value): + """Ensure a table version is an unsigned long. + + OpenType table version numbers are expressed as a single unsigned long + comprising of an unsigned short major version and unsigned short minor + version. This function detects if the value to be used as a version number + looks too small (i.e. is less than ``0x10000``), and converts it to + fixed-point using :func:`floatToFixed` if so. + + Args: + value (Number): a candidate table version number. + + Returns: + int: A table version number, possibly corrected to fixed-point. + """ + if value < 0x10000: + newValue = floatToFixed(value, 16) + log.warning( + "Table version value is a float: %.4f; " + "fix to use hex instead: 0x%08x", value, newValue) + value = newValue + return value + + +def versionToFixed(value): + """Ensure a table version number is fixed-point. + + Args: + value (str): a candidate table version number. + + Returns: + int: A table version number, possibly corrected to fixed-point. + """ + value = int(value, 0) if value.startswith("0") else float(value) + value = ensureVersionIsLong(value) + return value diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/intTools.py b/.venv/lib/python3.9/site-packages/fontTools/misc/intTools.py new file mode 100644 index 00000000..6ba03e16 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/intTools.py @@ -0,0 +1,25 @@ +__all__ = ["popCount"] + + +try: + bit_count = int.bit_count +except AttributeError: + + def bit_count(v): + return bin(v).count("1") + + +"""Return number of 1 bits (population count) of the absolute value of an integer. + +See https://docs.python.org/3.10/library/stdtypes.html#int.bit_count +""" +popCount = bit_count + + +def bit_indices(v): + """Return list of indices where bits are set, 0 being the index of the least significant bit. + + >>> bit_indices(0b101) + [0, 2] + """ + return [i for i, b in enumerate(bin(v)[::-1]) if b == "1"] diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/loggingTools.py b/.venv/lib/python3.9/site-packages/fontTools/misc/loggingTools.py new file mode 100644 index 00000000..d1baa839 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/loggingTools.py @@ -0,0 +1,536 @@ +import sys +import logging +import timeit +from functools import wraps +from collections.abc import Mapping, Callable +import warnings +from logging import PercentStyle + + +# default logging level used by Timer class +TIME_LEVEL = logging.DEBUG + +# per-level format strings used by the default formatter +# (the level name is not printed for INFO and DEBUG messages) +DEFAULT_FORMATS = { + "*": "%(levelname)s: %(message)s", + "INFO": "%(message)s", + "DEBUG": "%(message)s", + } + + +class LevelFormatter(logging.Formatter): + """Log formatter with level-specific formatting. + + Formatter class which optionally takes a dict of logging levels to + format strings, allowing to customise the log records appearance for + specific levels. + + + Attributes: + fmt: A dictionary mapping logging levels to format strings. + The ``*`` key identifies the default format string. + datefmt: As per py:class:`logging.Formatter` + style: As per py:class:`logging.Formatter` + + >>> import sys + >>> handler = logging.StreamHandler(sys.stdout) + >>> formatter = LevelFormatter( + ... fmt={ + ... '*': '[%(levelname)s] %(message)s', + ... 'DEBUG': '%(name)s [%(levelname)s] %(message)s', + ... 'INFO': '%(message)s', + ... }) + >>> handler.setFormatter(formatter) + >>> log = logging.getLogger('test') + >>> log.setLevel(logging.DEBUG) + >>> log.addHandler(handler) + >>> log.debug('this uses a custom format string') + test [DEBUG] this uses a custom format string + >>> log.info('this also uses a custom format string') + this also uses a custom format string + >>> log.warning("this one uses the default format string") + [WARNING] this one uses the default format string + """ + + def __init__(self, fmt=None, datefmt=None, style="%"): + if style != '%': + raise ValueError( + "only '%' percent style is supported in both python 2 and 3") + if fmt is None: + fmt = DEFAULT_FORMATS + if isinstance(fmt, str): + default_format = fmt + custom_formats = {} + elif isinstance(fmt, Mapping): + custom_formats = dict(fmt) + default_format = custom_formats.pop("*", None) + else: + raise TypeError('fmt must be a str or a dict of str: %r' % fmt) + super(LevelFormatter, self).__init__(default_format, datefmt) + self.default_format = self._fmt + self.custom_formats = {} + for level, fmt in custom_formats.items(): + level = logging._checkLevel(level) + self.custom_formats[level] = fmt + + def format(self, record): + if self.custom_formats: + fmt = self.custom_formats.get(record.levelno, self.default_format) + if self._fmt != fmt: + self._fmt = fmt + # for python >= 3.2, _style needs to be set if _fmt changes + if PercentStyle: + self._style = PercentStyle(fmt) + return super(LevelFormatter, self).format(record) + + +def configLogger(**kwargs): + """A more sophisticated logging system configuation manager. + + This is more or less the same as :py:func:`logging.basicConfig`, + with some additional options and defaults. + + The default behaviour is to create a ``StreamHandler`` which writes to + sys.stderr, set a formatter using the ``DEFAULT_FORMATS`` strings, and add + the handler to the top-level library logger ("fontTools"). + + A number of optional keyword arguments may be specified, which can alter + the default behaviour. + + Args: + + logger: Specifies the logger name or a Logger instance to be + configured. (Defaults to "fontTools" logger). Unlike ``basicConfig``, + this function can be called multiple times to reconfigure a logger. + If the logger or any of its children already exists before the call is + made, they will be reset before the new configuration is applied. + filename: Specifies that a ``FileHandler`` be created, using the + specified filename, rather than a ``StreamHandler``. + filemode: Specifies the mode to open the file, if filename is + specified. (If filemode is unspecified, it defaults to ``a``). + format: Use the specified format string for the handler. This + argument also accepts a dictionary of format strings keyed by + level name, to allow customising the records appearance for + specific levels. The special ``'*'`` key is for 'any other' level. + datefmt: Use the specified date/time format. + level: Set the logger level to the specified level. + stream: Use the specified stream to initialize the StreamHandler. Note + that this argument is incompatible with ``filename`` - if both + are present, ``stream`` is ignored. + handlers: If specified, this should be an iterable of already created + handlers, which will be added to the logger. Any handler in the + list which does not have a formatter assigned will be assigned the + formatter created in this function. + filters: If specified, this should be an iterable of already created + filters. If the ``handlers`` do not already have filters assigned, + these filters will be added to them. + propagate: All loggers have a ``propagate`` attribute which determines + whether to continue searching for handlers up the logging hierarchy. + If not provided, the "propagate" attribute will be set to ``False``. + """ + # using kwargs to enforce keyword-only arguments in py2. + handlers = kwargs.pop("handlers", None) + if handlers is None: + if "stream" in kwargs and "filename" in kwargs: + raise ValueError("'stream' and 'filename' should not be " + "specified together") + else: + if "stream" in kwargs or "filename" in kwargs: + raise ValueError("'stream' or 'filename' should not be " + "specified together with 'handlers'") + if handlers is None: + filename = kwargs.pop("filename", None) + mode = kwargs.pop("filemode", 'a') + if filename: + h = logging.FileHandler(filename, mode) + else: + stream = kwargs.pop("stream", None) + h = logging.StreamHandler(stream) + handlers = [h] + # By default, the top-level library logger is configured. + logger = kwargs.pop("logger", "fontTools") + if not logger or isinstance(logger, str): + # empty "" or None means the 'root' logger + logger = logging.getLogger(logger) + # before (re)configuring, reset named logger and its children (if exist) + _resetExistingLoggers(parent=logger.name) + # use DEFAULT_FORMATS if 'format' is None + fs = kwargs.pop("format", None) + dfs = kwargs.pop("datefmt", None) + # XXX: '%' is the only format style supported on both py2 and 3 + style = kwargs.pop("style", '%') + fmt = LevelFormatter(fs, dfs, style) + filters = kwargs.pop("filters", []) + for h in handlers: + if h.formatter is None: + h.setFormatter(fmt) + if not h.filters: + for f in filters: + h.addFilter(f) + logger.addHandler(h) + if logger.name != "root": + # stop searching up the hierarchy for handlers + logger.propagate = kwargs.pop("propagate", False) + # set a custom severity level + level = kwargs.pop("level", None) + if level is not None: + logger.setLevel(level) + if kwargs: + keys = ', '.join(kwargs.keys()) + raise ValueError('Unrecognised argument(s): %s' % keys) + + +def _resetExistingLoggers(parent="root"): + """ Reset the logger named 'parent' and all its children to their initial + state, if they already exist in the current configuration. + """ + root = logging.root + # get sorted list of all existing loggers + existing = sorted(root.manager.loggerDict.keys()) + if parent == "root": + # all the existing loggers are children of 'root' + loggers_to_reset = [parent] + existing + elif parent not in existing: + # nothing to do + return + elif parent in existing: + loggers_to_reset = [parent] + # collect children, starting with the entry after parent name + i = existing.index(parent) + 1 + prefixed = parent + "." + pflen = len(prefixed) + num_existing = len(existing) + while i < num_existing: + if existing[i][:pflen] == prefixed: + loggers_to_reset.append(existing[i]) + i += 1 + for name in loggers_to_reset: + if name == "root": + root.setLevel(logging.WARNING) + for h in root.handlers[:]: + root.removeHandler(h) + for f in root.filters[:]: + root.removeFilters(f) + root.disabled = False + else: + logger = root.manager.loggerDict[name] + logger.level = logging.NOTSET + logger.handlers = [] + logger.filters = [] + logger.propagate = True + logger.disabled = False + + +class Timer(object): + """ Keeps track of overall time and split/lap times. + + >>> import time + >>> timer = Timer() + >>> time.sleep(0.01) + >>> print("First lap:", timer.split()) + First lap: ... + >>> time.sleep(0.02) + >>> print("Second lap:", timer.split()) + Second lap: ... + >>> print("Overall time:", timer.time()) + Overall time: ... + + Can be used as a context manager inside with-statements. + + >>> with Timer() as t: + ... time.sleep(0.01) + >>> print("%0.3f seconds" % t.elapsed) + 0... seconds + + If initialised with a logger, it can log the elapsed time automatically + upon exiting the with-statement. + + >>> import logging + >>> log = logging.getLogger("my-fancy-timer-logger") + >>> configLogger(logger=log, level="DEBUG", format="%(message)s", stream=sys.stdout) + >>> with Timer(log, 'do something'): + ... time.sleep(0.01) + Took ... to do something + + The same Timer instance, holding a reference to a logger, can be reused + in multiple with-statements, optionally with different messages or levels. + + >>> timer = Timer(log) + >>> with timer(): + ... time.sleep(0.01) + elapsed time: ...s + >>> with timer('redo it', level=logging.INFO): + ... time.sleep(0.02) + Took ... to redo it + + It can also be used as a function decorator to log the time elapsed to run + the decorated function. + + >>> @timer() + ... def test1(): + ... time.sleep(0.01) + >>> @timer('run test 2', level=logging.INFO) + ... def test2(): + ... time.sleep(0.02) + >>> test1() + Took ... to run 'test1' + >>> test2() + Took ... to run test 2 + """ + + # timeit.default_timer choses the most accurate clock for each platform + _time = timeit.default_timer + default_msg = "elapsed time: %(time).3fs" + default_format = "Took %(time).3fs to %(msg)s" + + def __init__(self, logger=None, msg=None, level=None, start=None): + self.reset(start) + if logger is None: + for arg in ('msg', 'level'): + if locals().get(arg) is not None: + raise ValueError( + "'%s' can't be specified without a 'logger'" % arg) + self.logger = logger + self.level = level if level is not None else TIME_LEVEL + self.msg = msg + + def reset(self, start=None): + """ Reset timer to 'start_time' or the current time. """ + if start is None: + self.start = self._time() + else: + self.start = start + self.last = self.start + self.elapsed = 0.0 + + def time(self): + """ Return the overall time (in seconds) since the timer started. """ + return self._time() - self.start + + def split(self): + """ Split and return the lap time (in seconds) in between splits. """ + current = self._time() + self.elapsed = current - self.last + self.last = current + return self.elapsed + + def formatTime(self, msg, time): + """ Format 'time' value in 'msg' and return formatted string. + If 'msg' contains a '%(time)' format string, try to use that. + Otherwise, use the predefined 'default_format'. + If 'msg' is empty or None, fall back to 'default_msg'. + """ + if not msg: + msg = self.default_msg + if msg.find("%(time)") < 0: + msg = self.default_format % {"msg": msg, "time": time} + else: + try: + msg = msg % {"time": time} + except (KeyError, ValueError): + pass # skip if the format string is malformed + return msg + + def __enter__(self): + """ Start a new lap """ + self.last = self._time() + self.elapsed = 0.0 + return self + + def __exit__(self, exc_type, exc_value, traceback): + """ End the current lap. If timer has a logger, log the time elapsed, + using the format string in self.msg (or the default one). + """ + time = self.split() + if self.logger is None or exc_type: + # if there's no logger attached, or if any exception occurred in + # the with-statement, exit without logging the time + return + message = self.formatTime(self.msg, time) + # Allow log handlers to see the individual parts to facilitate things + # like a server accumulating aggregate stats. + msg_parts = { 'msg': self.msg, 'time': time } + self.logger.log(self.level, message, msg_parts) + + def __call__(self, func_or_msg=None, **kwargs): + """ If the first argument is a function, return a decorator which runs + the wrapped function inside Timer's context manager. + Otherwise, treat the first argument as a 'msg' string and return an updated + Timer instance, referencing the same logger. + A 'level' keyword can also be passed to override self.level. + """ + if isinstance(func_or_msg, Callable): + func = func_or_msg + # use the function name when no explicit 'msg' is provided + if not self.msg: + self.msg = "run '%s'" % func.__name__ + + @wraps(func) + def wrapper(*args, **kwds): + with self: + return func(*args, **kwds) + return wrapper + else: + msg = func_or_msg or kwargs.get("msg") + level = kwargs.get("level", self.level) + return self.__class__(self.logger, msg, level) + + def __float__(self): + return self.elapsed + + def __int__(self): + return int(self.elapsed) + + def __str__(self): + return "%.3f" % self.elapsed + + +class ChannelsFilter(logging.Filter): + """Provides a hierarchical filter for log entries based on channel names. + + Filters out records emitted from a list of enabled channel names, + including their children. It works the same as the ``logging.Filter`` + class, but allows the user to specify multiple channel names. + + >>> import sys + >>> handler = logging.StreamHandler(sys.stdout) + >>> handler.setFormatter(logging.Formatter("%(message)s")) + >>> filter = ChannelsFilter("A.B", "C.D") + >>> handler.addFilter(filter) + >>> root = logging.getLogger() + >>> root.addHandler(handler) + >>> root.setLevel(level=logging.DEBUG) + >>> logging.getLogger('A.B').debug('this record passes through') + this record passes through + >>> logging.getLogger('A.B.C').debug('records from children also pass') + records from children also pass + >>> logging.getLogger('C.D').debug('this one as well') + this one as well + >>> logging.getLogger('A.B.').debug('also this one') + also this one + >>> logging.getLogger('A.F').debug('but this one does not!') + >>> logging.getLogger('C.DE').debug('neither this one!') + """ + + def __init__(self, *names): + self.names = names + self.num = len(names) + self.lengths = {n: len(n) for n in names} + + def filter(self, record): + if self.num == 0: + return True + for name in self.names: + nlen = self.lengths[name] + if name == record.name: + return True + elif (record.name.find(name, 0, nlen) == 0 + and record.name[nlen] == "."): + return True + return False + + +class CapturingLogHandler(logging.Handler): + def __init__(self, logger, level): + super(CapturingLogHandler, self).__init__(level=level) + self.records = [] + if isinstance(logger, str): + self.logger = logging.getLogger(logger) + else: + self.logger = logger + + def __enter__(self): + self.original_disabled = self.logger.disabled + self.original_level = self.logger.level + self.original_propagate = self.logger.propagate + + self.logger.addHandler(self) + self.logger.setLevel(self.level) + self.logger.disabled = False + self.logger.propagate = False + + return self + + def __exit__(self, type, value, traceback): + self.logger.removeHandler(self) + self.logger.setLevel(self.original_level) + self.logger.disabled = self.original_disabled + self.logger.propagate = self.original_propagate + + return self + + def emit(self, record): + self.records.append(record) + + def assertRegex(self, regexp, msg=None): + import re + pattern = re.compile(regexp) + for r in self.records: + if pattern.search(r.getMessage()): + return True + if msg is None: + msg = "Pattern '%s' not found in logger records" % regexp + assert 0, msg + + +class LogMixin(object): + """ Mixin class that adds logging functionality to another class. + + You can define a new class that subclasses from ``LogMixin`` as well as + other base classes through multiple inheritance. + All instances of that class will have a ``log`` property that returns + a ``logging.Logger`` named after their respective ``.``. + + For example: + + >>> class BaseClass(object): + ... pass + >>> class MyClass(LogMixin, BaseClass): + ... pass + >>> a = MyClass() + >>> isinstance(a.log, logging.Logger) + True + >>> print(a.log.name) + fontTools.misc.loggingTools.MyClass + >>> class AnotherClass(MyClass): + ... pass + >>> b = AnotherClass() + >>> isinstance(b.log, logging.Logger) + True + >>> print(b.log.name) + fontTools.misc.loggingTools.AnotherClass + """ + + @property + def log(self): + if not hasattr(self, "_log"): + name = ".".join( + (self.__class__.__module__, self.__class__.__name__) + ) + self._log = logging.getLogger(name) + return self._log + + +def deprecateArgument(name, msg, category=UserWarning): + """ Raise a warning about deprecated function argument 'name'. """ + warnings.warn( + "%r is deprecated; %s" % (name, msg), category=category, stacklevel=3) + + +def deprecateFunction(msg, category=UserWarning): + """ Decorator to raise a warning when a deprecated function is called. """ + def decorator(func): + @wraps(func) + def wrapper(*args, **kwargs): + warnings.warn( + "%r is deprecated; %s" % (func.__name__, msg), + category=category, stacklevel=2) + return func(*args, **kwargs) + return wrapper + return decorator + + +if __name__ == "__main__": + import doctest + sys.exit(doctest.testmod(optionflags=doctest.ELLIPSIS).failed) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/macCreatorType.py b/.venv/lib/python3.9/site-packages/fontTools/misc/macCreatorType.py new file mode 100644 index 00000000..6b191054 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/macCreatorType.py @@ -0,0 +1,54 @@ +from fontTools.misc.textTools import Tag, bytesjoin, strjoin +try: + import xattr +except ImportError: + xattr = None + + +def _reverseString(s): + s = list(s) + s.reverse() + return strjoin(s) + + +def getMacCreatorAndType(path): + """Returns file creator and file type codes for a path. + + Args: + path (str): A file path. + + Returns: + A tuple of two :py:class:`fontTools.textTools.Tag` objects, the first + representing the file creator and the second representing the + file type. + """ + if xattr is not None: + try: + finderInfo = xattr.getxattr(path, 'com.apple.FinderInfo') + except (KeyError, IOError): + pass + else: + fileType = Tag(finderInfo[:4]) + fileCreator = Tag(finderInfo[4:8]) + return fileCreator, fileType + return None, None + + +def setMacCreatorAndType(path, fileCreator, fileType): + """Set file creator and file type codes for a path. + + Note that if the ``xattr`` module is not installed, no action is + taken but no error is raised. + + Args: + path (str): A file path. + fileCreator: A four-character file creator tag. + fileType: A four-character file type tag. + + """ + if xattr is not None: + from fontTools.misc.textTools import pad + if not all(len(s) == 4 for s in (fileCreator, fileType)): + raise TypeError('arg must be string of 4 chars') + finderInfo = pad(bytesjoin([fileType, fileCreator]), 32) + xattr.setxattr(path, 'com.apple.FinderInfo', finderInfo) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/macRes.py b/.venv/lib/python3.9/site-packages/fontTools/misc/macRes.py new file mode 100644 index 00000000..895ca1b8 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/macRes.py @@ -0,0 +1,259 @@ +from io import BytesIO +import struct +from fontTools.misc import sstruct +from fontTools.misc.textTools import bytesjoin, tostr +from collections import OrderedDict +from collections.abc import MutableMapping + + +class ResourceError(Exception): + pass + + +class ResourceReader(MutableMapping): + """Reader for Mac OS resource forks. + + Parses a resource fork and returns resources according to their type. + If run on OS X, this will open the resource fork in the filesystem. + Otherwise, it will open the file itself and attempt to read it as + though it were a resource fork. + + The returned object can be indexed by type and iterated over, + returning in each case a list of py:class:`Resource` objects + representing all the resources of a certain type. + + """ + def __init__(self, fileOrPath): + """Open a file + + Args: + fileOrPath: Either an object supporting a ``read`` method, an + ``os.PathLike`` object, or a string. + """ + self._resources = OrderedDict() + if hasattr(fileOrPath, 'read'): + self.file = fileOrPath + else: + try: + # try reading from the resource fork (only works on OS X) + self.file = self.openResourceFork(fileOrPath) + self._readFile() + return + except (ResourceError, IOError): + # if it fails, use the data fork + self.file = self.openDataFork(fileOrPath) + self._readFile() + + @staticmethod + def openResourceFork(path): + if hasattr(path, "__fspath__"): # support os.PathLike objects + path = path.__fspath__() + with open(path + '/..namedfork/rsrc', 'rb') as resfork: + data = resfork.read() + infile = BytesIO(data) + infile.name = path + return infile + + @staticmethod + def openDataFork(path): + with open(path, 'rb') as datafork: + data = datafork.read() + infile = BytesIO(data) + infile.name = path + return infile + + def _readFile(self): + self._readHeaderAndMap() + self._readTypeList() + + def _read(self, numBytes, offset=None): + if offset is not None: + try: + self.file.seek(offset) + except OverflowError: + raise ResourceError("Failed to seek offset ('offset' is too large)") + if self.file.tell() != offset: + raise ResourceError('Failed to seek offset (reached EOF)') + try: + data = self.file.read(numBytes) + except OverflowError: + raise ResourceError("Cannot read resource ('numBytes' is too large)") + if len(data) != numBytes: + raise ResourceError('Cannot read resource (not enough data)') + return data + + def _readHeaderAndMap(self): + self.file.seek(0) + headerData = self._read(ResourceForkHeaderSize) + sstruct.unpack(ResourceForkHeader, headerData, self) + # seek to resource map, skip reserved + mapOffset = self.mapOffset + 22 + resourceMapData = self._read(ResourceMapHeaderSize, mapOffset) + sstruct.unpack(ResourceMapHeader, resourceMapData, self) + self.absTypeListOffset = self.mapOffset + self.typeListOffset + self.absNameListOffset = self.mapOffset + self.nameListOffset + + def _readTypeList(self): + absTypeListOffset = self.absTypeListOffset + numTypesData = self._read(2, absTypeListOffset) + self.numTypes, = struct.unpack('>H', numTypesData) + absTypeListOffset2 = absTypeListOffset + 2 + for i in range(self.numTypes + 1): + resTypeItemOffset = absTypeListOffset2 + ResourceTypeItemSize * i + resTypeItemData = self._read(ResourceTypeItemSize, resTypeItemOffset) + item = sstruct.unpack(ResourceTypeItem, resTypeItemData) + resType = tostr(item['type'], encoding='mac-roman') + refListOffset = absTypeListOffset + item['refListOffset'] + numRes = item['numRes'] + 1 + resources = self._readReferenceList(resType, refListOffset, numRes) + self._resources[resType] = resources + + def _readReferenceList(self, resType, refListOffset, numRes): + resources = [] + for i in range(numRes): + refOffset = refListOffset + ResourceRefItemSize * i + refData = self._read(ResourceRefItemSize, refOffset) + res = Resource(resType) + res.decompile(refData, self) + resources.append(res) + return resources + + def __getitem__(self, resType): + return self._resources[resType] + + def __delitem__(self, resType): + del self._resources[resType] + + def __setitem__(self, resType, resources): + self._resources[resType] = resources + + def __len__(self): + return len(self._resources) + + def __iter__(self): + return iter(self._resources) + + def keys(self): + return self._resources.keys() + + @property + def types(self): + """A list of the types of resources in the resource fork.""" + return list(self._resources.keys()) + + def countResources(self, resType): + """Return the number of resources of a given type.""" + try: + return len(self[resType]) + except KeyError: + return 0 + + def getIndices(self, resType): + """Returns a list of indices of resources of a given type.""" + numRes = self.countResources(resType) + if numRes: + return list(range(1, numRes+1)) + else: + return [] + + def getNames(self, resType): + """Return list of names of all resources of a given type.""" + return [res.name for res in self.get(resType, []) if res.name is not None] + + def getIndResource(self, resType, index): + """Return resource of given type located at an index ranging from 1 + to the number of resources for that type, or None if not found. + """ + if index < 1: + return None + try: + res = self[resType][index-1] + except (KeyError, IndexError): + return None + return res + + def getNamedResource(self, resType, name): + """Return the named resource of given type, else return None.""" + name = tostr(name, encoding='mac-roman') + for res in self.get(resType, []): + if res.name == name: + return res + return None + + def close(self): + if not self.file.closed: + self.file.close() + + +class Resource(object): + """Represents a resource stored within a resource fork. + + Attributes: + type: resource type. + data: resource data. + id: ID. + name: resource name. + attr: attributes. + """ + + def __init__(self, resType=None, resData=None, resID=None, resName=None, + resAttr=None): + self.type = resType + self.data = resData + self.id = resID + self.name = resName + self.attr = resAttr + + def decompile(self, refData, reader): + sstruct.unpack(ResourceRefItem, refData, self) + # interpret 3-byte dataOffset as (padded) ULONG to unpack it with struct + self.dataOffset, = struct.unpack('>L', bytesjoin([b"\0", self.dataOffset])) + absDataOffset = reader.dataOffset + self.dataOffset + dataLength, = struct.unpack(">L", reader._read(4, absDataOffset)) + self.data = reader._read(dataLength) + if self.nameOffset == -1: + return + absNameOffset = reader.absNameListOffset + self.nameOffset + nameLength, = struct.unpack('B', reader._read(1, absNameOffset)) + name, = struct.unpack('>%ss' % nameLength, reader._read(nameLength)) + self.name = tostr(name, encoding='mac-roman') + + +ResourceForkHeader = """ + > # big endian + dataOffset: L + mapOffset: L + dataLen: L + mapLen: L +""" + +ResourceForkHeaderSize = sstruct.calcsize(ResourceForkHeader) + +ResourceMapHeader = """ + > # big endian + attr: H + typeListOffset: H + nameListOffset: H +""" + +ResourceMapHeaderSize = sstruct.calcsize(ResourceMapHeader) + +ResourceTypeItem = """ + > # big endian + type: 4s + numRes: H + refListOffset: H +""" + +ResourceTypeItemSize = sstruct.calcsize(ResourceTypeItem) + +ResourceRefItem = """ + > # big endian + id: h + nameOffset: h + attr: B + dataOffset: 3s + reserved: L +""" + +ResourceRefItemSize = sstruct.calcsize(ResourceRefItem) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/plistlib/__init__.py b/.venv/lib/python3.9/site-packages/fontTools/misc/plistlib/__init__.py new file mode 100644 index 00000000..04ca5326 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/plistlib/__init__.py @@ -0,0 +1,677 @@ +import collections.abc +import re +from typing import ( + Any, + Callable, + Dict, + List, + Mapping, + MutableMapping, + Optional, + Sequence, + Type, + Union, + IO, +) +import warnings +from io import BytesIO +from datetime import datetime +from base64 import b64encode, b64decode +from numbers import Integral +from types import SimpleNamespace +from functools import singledispatch + +from fontTools.misc import etree + +from fontTools.misc.textTools import tostr + + +# By default, we +# - deserialize elements as bytes and +# - serialize bytes as elements. +# Before, on Python 2, we +# - deserialized elements as plistlib.Data objects, in order to +# distinguish them from the built-in str type (which is bytes on python2) +# - serialized bytes as elements (they must have only contained +# ASCII characters in this case) +# You can pass use_builtin_types=[True|False] to the load/dump etc. functions +# to enforce a specific treatment. +# NOTE that unicode type always maps to element, and plistlib.Data +# always maps to element, regardless of use_builtin_types. +USE_BUILTIN_TYPES = True + +XML_DECLARATION = b"""""" + +PLIST_DOCTYPE = ( + b'' +) + + +# Date should conform to a subset of ISO 8601: +# YYYY '-' MM '-' DD 'T' HH ':' MM ':' SS 'Z' +_date_parser = re.compile( + r"(?P\d\d\d\d)" + r"(?:-(?P\d\d)" + r"(?:-(?P\d\d)" + r"(?:T(?P\d\d)" + r"(?::(?P\d\d)" + r"(?::(?P\d\d))" + r"?)?)?)?)?Z", + re.ASCII, +) + + +def _date_from_string(s: str) -> datetime: + order = ("year", "month", "day", "hour", "minute", "second") + m = _date_parser.match(s) + if m is None: + raise ValueError(f"Expected ISO 8601 date string, but got '{s:r}'.") + gd = m.groupdict() + lst = [] + for key in order: + val = gd[key] + if val is None: + break + lst.append(int(val)) + # NOTE: mypy doesn't know that lst is 6 elements long. + return datetime(*lst) # type:ignore + + +def _date_to_string(d: datetime) -> str: + return "%04d-%02d-%02dT%02d:%02d:%02dZ" % ( + d.year, + d.month, + d.day, + d.hour, + d.minute, + d.second, + ) + + +class Data: + """Represents binary data when ``use_builtin_types=False.`` + + This class wraps binary data loaded from a plist file when the + ``use_builtin_types`` argument to the loading function (:py:func:`fromtree`, + :py:func:`load`, :py:func:`loads`) is false. + + The actual binary data is retrieved using the ``data`` attribute. + """ + + def __init__(self, data: bytes) -> None: + if not isinstance(data, bytes): + raise TypeError("Expected bytes, found %s" % type(data).__name__) + self.data = data + + @classmethod + def fromBase64(cls, data: Union[bytes, str]) -> "Data": + return cls(b64decode(data)) + + def asBase64(self, maxlinelength: int = 76, indent_level: int = 1) -> bytes: + return _encode_base64( + self.data, maxlinelength=maxlinelength, indent_level=indent_level + ) + + def __eq__(self, other: Any) -> bool: + if isinstance(other, self.__class__): + return self.data == other.data + elif isinstance(other, bytes): + return self.data == other + else: + return NotImplemented + + def __repr__(self) -> str: + return "%s(%s)" % (self.__class__.__name__, repr(self.data)) + + +def _encode_base64( + data: bytes, maxlinelength: Optional[int] = 76, indent_level: int = 1 +) -> bytes: + data = b64encode(data) + if data and maxlinelength: + # split into multiple lines right-justified to 'maxlinelength' chars + indent = b"\n" + b" " * indent_level + max_length = max(16, maxlinelength - len(indent)) + chunks = [] + for i in range(0, len(data), max_length): + chunks.append(indent) + chunks.append(data[i : i + max_length]) + chunks.append(indent) + data = b"".join(chunks) + return data + + +# Mypy does not support recursive type aliases as of 0.782, Pylance does. +# https://github.com/python/mypy/issues/731 +# https://devblogs.microsoft.com/python/pylance-introduces-five-new-features-that-enable-type-magic-for-python-developers/#1-support-for-recursive-type-aliases +PlistEncodable = Union[ + bool, + bytes, + Data, + datetime, + float, + int, + Mapping[str, Any], + Sequence[Any], + str, +] + + +class PlistTarget: + """Event handler using the ElementTree Target API that can be + passed to a XMLParser to produce property list objects from XML. + It is based on the CPython plistlib module's _PlistParser class, + but does not use the expat parser. + + >>> from fontTools.misc import etree + >>> parser = etree.XMLParser(target=PlistTarget()) + >>> result = etree.XML( + ... "" + ... " something" + ... " blah" + ... "", + ... parser=parser) + >>> result == {"something": "blah"} + True + + Links: + https://github.com/python/cpython/blob/master/Lib/plistlib.py + http://lxml.de/parsing.html#the-target-parser-interface + """ + + def __init__( + self, + use_builtin_types: Optional[bool] = None, + dict_type: Type[MutableMapping[str, Any]] = dict, + ) -> None: + self.stack: List[PlistEncodable] = [] + self.current_key: Optional[str] = None + self.root: Optional[PlistEncodable] = None + if use_builtin_types is None: + self._use_builtin_types = USE_BUILTIN_TYPES + else: + if use_builtin_types is False: + warnings.warn( + "Setting use_builtin_types to False is deprecated and will be " + "removed soon.", + DeprecationWarning, + ) + self._use_builtin_types = use_builtin_types + self._dict_type = dict_type + + def start(self, tag: str, attrib: Mapping[str, str]) -> None: + self._data: List[str] = [] + handler = _TARGET_START_HANDLERS.get(tag) + if handler is not None: + handler(self) + + def end(self, tag: str) -> None: + handler = _TARGET_END_HANDLERS.get(tag) + if handler is not None: + handler(self) + + def data(self, data: str) -> None: + self._data.append(data) + + def close(self) -> PlistEncodable: + if self.root is None: + raise ValueError("No root set.") + return self.root + + # helpers + + def add_object(self, value: PlistEncodable) -> None: + if self.current_key is not None: + stack_top = self.stack[-1] + if not isinstance(stack_top, collections.abc.MutableMapping): + raise ValueError("unexpected element: %r" % stack_top) + stack_top[self.current_key] = value + self.current_key = None + elif not self.stack: + # this is the root object + self.root = value + else: + stack_top = self.stack[-1] + if not isinstance(stack_top, list): + raise ValueError("unexpected element: %r" % stack_top) + stack_top.append(value) + + def get_data(self) -> str: + data = "".join(self._data) + self._data = [] + return data + + +# event handlers + + +def start_dict(self: PlistTarget) -> None: + d = self._dict_type() + self.add_object(d) + self.stack.append(d) + + +def end_dict(self: PlistTarget) -> None: + if self.current_key: + raise ValueError("missing value for key '%s'" % self.current_key) + self.stack.pop() + + +def end_key(self: PlistTarget) -> None: + if self.current_key or not isinstance(self.stack[-1], collections.abc.Mapping): + raise ValueError("unexpected key") + self.current_key = self.get_data() + + +def start_array(self: PlistTarget) -> None: + a: List[PlistEncodable] = [] + self.add_object(a) + self.stack.append(a) + + +def end_array(self: PlistTarget) -> None: + self.stack.pop() + + +def end_true(self: PlistTarget) -> None: + self.add_object(True) + + +def end_false(self: PlistTarget) -> None: + self.add_object(False) + + +def end_integer(self: PlistTarget) -> None: + self.add_object(int(self.get_data())) + + +def end_real(self: PlistTarget) -> None: + self.add_object(float(self.get_data())) + + +def end_string(self: PlistTarget) -> None: + self.add_object(self.get_data()) + + +def end_data(self: PlistTarget) -> None: + if self._use_builtin_types: + self.add_object(b64decode(self.get_data())) + else: + self.add_object(Data.fromBase64(self.get_data())) + + +def end_date(self: PlistTarget) -> None: + self.add_object(_date_from_string(self.get_data())) + + +_TARGET_START_HANDLERS: Dict[str, Callable[[PlistTarget], None]] = { + "dict": start_dict, + "array": start_array, +} + +_TARGET_END_HANDLERS: Dict[str, Callable[[PlistTarget], None]] = { + "dict": end_dict, + "array": end_array, + "key": end_key, + "true": end_true, + "false": end_false, + "integer": end_integer, + "real": end_real, + "string": end_string, + "data": end_data, + "date": end_date, +} + + +# functions to build element tree from plist data + + +def _string_element(value: str, ctx: SimpleNamespace) -> etree.Element: + el = etree.Element("string") + el.text = value + return el + + +def _bool_element(value: bool, ctx: SimpleNamespace) -> etree.Element: + if value: + return etree.Element("true") + return etree.Element("false") + + +def _integer_element(value: int, ctx: SimpleNamespace) -> etree.Element: + if -1 << 63 <= value < 1 << 64: + el = etree.Element("integer") + el.text = "%d" % value + return el + raise OverflowError(value) + + +def _real_element(value: float, ctx: SimpleNamespace) -> etree.Element: + el = etree.Element("real") + el.text = repr(value) + return el + + +def _dict_element(d: Mapping[str, PlistEncodable], ctx: SimpleNamespace) -> etree.Element: + el = etree.Element("dict") + items = d.items() + if ctx.sort_keys: + items = sorted(items) # type: ignore + ctx.indent_level += 1 + for key, value in items: + if not isinstance(key, str): + if ctx.skipkeys: + continue + raise TypeError("keys must be strings") + k = etree.SubElement(el, "key") + k.text = tostr(key, "utf-8") + el.append(_make_element(value, ctx)) + ctx.indent_level -= 1 + return el + + +def _array_element(array: Sequence[PlistEncodable], ctx: SimpleNamespace) -> etree.Element: + el = etree.Element("array") + if len(array) == 0: + return el + ctx.indent_level += 1 + for value in array: + el.append(_make_element(value, ctx)) + ctx.indent_level -= 1 + return el + + +def _date_element(date: datetime, ctx: SimpleNamespace) -> etree.Element: + el = etree.Element("date") + el.text = _date_to_string(date) + return el + + +def _data_element(data: bytes, ctx: SimpleNamespace) -> etree.Element: + el = etree.Element("data") + # NOTE: mypy is confused about whether el.text should be str or bytes. + el.text = _encode_base64( # type: ignore + data, + maxlinelength=(76 if ctx.pretty_print else None), + indent_level=ctx.indent_level, + ) + return el + + +def _string_or_data_element(raw_bytes: bytes, ctx: SimpleNamespace) -> etree.Element: + if ctx.use_builtin_types: + return _data_element(raw_bytes, ctx) + else: + try: + string = raw_bytes.decode(encoding="ascii", errors="strict") + except UnicodeDecodeError: + raise ValueError( + "invalid non-ASCII bytes; use unicode string instead: %r" % raw_bytes + ) + return _string_element(string, ctx) + + +# The following is probably not entirely correct. The signature should take `Any` +# and return `NoReturn`. At the time of this writing, neither mypy nor Pyright +# can deal with singledispatch properly and will apply the signature of the base +# function to all others. Being slightly dishonest makes it type-check and return +# usable typing information for the optimistic case. +@singledispatch +def _make_element(value: PlistEncodable, ctx: SimpleNamespace) -> etree.Element: + raise TypeError("unsupported type: %s" % type(value)) + + +_make_element.register(str)(_string_element) +_make_element.register(bool)(_bool_element) +_make_element.register(Integral)(_integer_element) +_make_element.register(float)(_real_element) +_make_element.register(collections.abc.Mapping)(_dict_element) +_make_element.register(list)(_array_element) +_make_element.register(tuple)(_array_element) +_make_element.register(datetime)(_date_element) +_make_element.register(bytes)(_string_or_data_element) +_make_element.register(bytearray)(_data_element) +_make_element.register(Data)(lambda v, ctx: _data_element(v.data, ctx)) + + +# Public functions to create element tree from plist-compatible python +# data structures and viceversa, for use when (de)serializing GLIF xml. + + +def totree( + value: PlistEncodable, + sort_keys: bool = True, + skipkeys: bool = False, + use_builtin_types: Optional[bool] = None, + pretty_print: bool = True, + indent_level: int = 1, +) -> etree.Element: + """Convert a value derived from a plist into an XML tree. + + Args: + value: Any kind of value to be serialized to XML. + sort_keys: Whether keys of dictionaries should be sorted. + skipkeys (bool): Whether to silently skip non-string dictionary + keys. + use_builtin_types (bool): If true, byte strings will be + encoded in Base-64 and wrapped in a ``data`` tag; if + false, they will be either stored as ASCII strings or an + exception raised if they cannot be decoded as such. Defaults + to ``True`` if not present. Deprecated. + pretty_print (bool): Whether to indent the output. + indent_level (int): Level of indentation when serializing. + + Returns: an ``etree`` ``Element`` object. + + Raises: + ``TypeError`` + if non-string dictionary keys are serialized + and ``skipkeys`` is false. + ``ValueError`` + if non-ASCII binary data is present + and `use_builtin_types` is false. + """ + if use_builtin_types is None: + use_builtin_types = USE_BUILTIN_TYPES + else: + use_builtin_types = use_builtin_types + context = SimpleNamespace( + sort_keys=sort_keys, + skipkeys=skipkeys, + use_builtin_types=use_builtin_types, + pretty_print=pretty_print, + indent_level=indent_level, + ) + return _make_element(value, context) + + +def fromtree( + tree: etree.Element, + use_builtin_types: Optional[bool] = None, + dict_type: Type[MutableMapping[str, Any]] = dict, +) -> Any: + """Convert an XML tree to a plist structure. + + Args: + tree: An ``etree`` ``Element``. + use_builtin_types: If True, binary data is deserialized to + bytes strings. If False, it is wrapped in :py:class:`Data` + objects. Defaults to True if not provided. Deprecated. + dict_type: What type to use for dictionaries. + + Returns: An object (usually a dictionary). + """ + target = PlistTarget(use_builtin_types=use_builtin_types, dict_type=dict_type) + for action, element in etree.iterwalk(tree, events=("start", "end")): + if action == "start": + target.start(element.tag, element.attrib) + elif action == "end": + # if there are no children, parse the leaf's data + if not len(element): + # always pass str, not None + target.data(element.text or "") + target.end(element.tag) + return target.close() + + +# python3 plistlib API + + +def load( + fp: IO[bytes], + use_builtin_types: Optional[bool] = None, + dict_type: Type[MutableMapping[str, Any]] = dict, +) -> Any: + """Load a plist file into an object. + + Args: + fp: An opened file. + use_builtin_types: If True, binary data is deserialized to + bytes strings. If False, it is wrapped in :py:class:`Data` + objects. Defaults to True if not provided. Deprecated. + dict_type: What type to use for dictionaries. + + Returns: + An object (usually a dictionary) representing the top level of + the plist file. + """ + + if not hasattr(fp, "read"): + raise AttributeError("'%s' object has no attribute 'read'" % type(fp).__name__) + target = PlistTarget(use_builtin_types=use_builtin_types, dict_type=dict_type) + parser = etree.XMLParser(target=target) + result = etree.parse(fp, parser=parser) + # lxml returns the target object directly, while ElementTree wraps + # it as the root of an ElementTree object + try: + return result.getroot() + except AttributeError: + return result + + +def loads( + value: bytes, + use_builtin_types: Optional[bool] = None, + dict_type: Type[MutableMapping[str, Any]] = dict, +) -> Any: + """Load a plist file from a string into an object. + + Args: + value: A bytes string containing a plist. + use_builtin_types: If True, binary data is deserialized to + bytes strings. If False, it is wrapped in :py:class:`Data` + objects. Defaults to True if not provided. Deprecated. + dict_type: What type to use for dictionaries. + + Returns: + An object (usually a dictionary) representing the top level of + the plist file. + """ + + fp = BytesIO(value) + return load(fp, use_builtin_types=use_builtin_types, dict_type=dict_type) + + +def dump( + value: PlistEncodable, + fp: IO[bytes], + sort_keys: bool = True, + skipkeys: bool = False, + use_builtin_types: Optional[bool] = None, + pretty_print: bool = True, +) -> None: + """Write a Python object to a plist file. + + Args: + value: An object to write. + fp: A file opened for writing. + sort_keys (bool): Whether keys of dictionaries should be sorted. + skipkeys (bool): Whether to silently skip non-string dictionary + keys. + use_builtin_types (bool): If true, byte strings will be + encoded in Base-64 and wrapped in a ``data`` tag; if + false, they will be either stored as ASCII strings or an + exception raised if they cannot be represented. Defaults + pretty_print (bool): Whether to indent the output. + indent_level (int): Level of indentation when serializing. + + Raises: + ``TypeError`` + if non-string dictionary keys are serialized + and ``skipkeys`` is false. + ``ValueError`` + if non-representable binary data is present + and `use_builtin_types` is false. + """ + + if not hasattr(fp, "write"): + raise AttributeError("'%s' object has no attribute 'write'" % type(fp).__name__) + root = etree.Element("plist", version="1.0") + el = totree( + value, + sort_keys=sort_keys, + skipkeys=skipkeys, + use_builtin_types=use_builtin_types, + pretty_print=pretty_print, + ) + root.append(el) + tree = etree.ElementTree(root) + # we write the doctype ourselves instead of using the 'doctype' argument + # of 'write' method, becuse lxml will force adding a '\n' even when + # pretty_print is False. + if pretty_print: + header = b"\n".join((XML_DECLARATION, PLIST_DOCTYPE, b"")) + else: + header = XML_DECLARATION + PLIST_DOCTYPE + fp.write(header) + tree.write( # type: ignore + fp, + encoding="utf-8", + pretty_print=pretty_print, + xml_declaration=False, + ) + + +def dumps( + value: PlistEncodable, + sort_keys: bool = True, + skipkeys: bool = False, + use_builtin_types: Optional[bool] = None, + pretty_print: bool = True, +) -> bytes: + """Write a Python object to a string in plist format. + + Args: + value: An object to write. + sort_keys (bool): Whether keys of dictionaries should be sorted. + skipkeys (bool): Whether to silently skip non-string dictionary + keys. + use_builtin_types (bool): If true, byte strings will be + encoded in Base-64 and wrapped in a ``data`` tag; if + false, they will be either stored as strings or an + exception raised if they cannot be represented. Defaults + pretty_print (bool): Whether to indent the output. + indent_level (int): Level of indentation when serializing. + + Returns: + string: A plist representation of the Python object. + + Raises: + ``TypeError`` + if non-string dictionary keys are serialized + and ``skipkeys`` is false. + ``ValueError`` + if non-representable binary data is present + and `use_builtin_types` is false. + """ + fp = BytesIO() + dump( + value, + fp, + sort_keys=sort_keys, + skipkeys=skipkeys, + use_builtin_types=use_builtin_types, + pretty_print=pretty_print, + ) + return fp.getvalue() diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/plistlib/__pycache__/__init__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/misc/plistlib/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..71e83866850a3852daee5e199b401265479cd85c GIT binary patch literal 18334 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", data[index:index+2]) + return value, index+2 + +def read_longInt(self, b0, data, index): + value, = struct.unpack(">l", data[index:index+4]) + return value, index+4 + +def read_fixed1616(self, b0, data, index): + value, = struct.unpack(">l", data[index:index+4]) + return fixedToFloat(value, precisionBits=16), index+4 + +def read_reserved(self, b0, data, index): + assert NotImplementedError + return NotImplemented, index + +def read_realNumber(self, b0, data, index): + number = '' + while True: + b = byteord(data[index]) + index = index + 1 + nibble0 = (b & 0xf0) >> 4 + nibble1 = b & 0x0f + if nibble0 == 0xf: + break + number = number + realNibbles[nibble0] + if nibble1 == 0xf: + break + number = number + realNibbles[nibble1] + return float(number), index + + +t1OperandEncoding = [None] * 256 +t1OperandEncoding[0:32] = (32) * [read_operator] +t1OperandEncoding[32:247] = (247 - 32) * [read_byte] +t1OperandEncoding[247:251] = (251 - 247) * [read_smallInt1] +t1OperandEncoding[251:255] = (255 - 251) * [read_smallInt2] +t1OperandEncoding[255] = read_longInt +assert len(t1OperandEncoding) == 256 + +t2OperandEncoding = t1OperandEncoding[:] +t2OperandEncoding[28] = read_shortInt +t2OperandEncoding[255] = read_fixed1616 + +cffDictOperandEncoding = t2OperandEncoding[:] +cffDictOperandEncoding[29] = read_longInt +cffDictOperandEncoding[30] = read_realNumber +cffDictOperandEncoding[255] = read_reserved + + +realNibbles = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + '.', 'E', 'E-', None, '-'] +realNibblesDict = {v:i for i,v in enumerate(realNibbles)} + +maxOpStack = 193 + + +def buildOperatorDict(operatorList): + oper = {} + opc = {} + for item in operatorList: + if len(item) == 2: + oper[item[0]] = item[1] + else: + oper[item[0]] = item[1:] + if isinstance(item[0], tuple): + opc[item[1]] = item[0] + else: + opc[item[1]] = (item[0],) + return oper, opc + + +t2Operators = [ +# opcode name + (1, 'hstem'), + (3, 'vstem'), + (4, 'vmoveto'), + (5, 'rlineto'), + (6, 'hlineto'), + (7, 'vlineto'), + (8, 'rrcurveto'), + (10, 'callsubr'), + (11, 'return'), + (14, 'endchar'), + (15, 'vsindex'), + (16, 'blend'), + (18, 'hstemhm'), + (19, 'hintmask'), + (20, 'cntrmask'), + (21, 'rmoveto'), + (22, 'hmoveto'), + (23, 'vstemhm'), + (24, 'rcurveline'), + (25, 'rlinecurve'), + (26, 'vvcurveto'), + (27, 'hhcurveto'), +# (28, 'shortint'), # not really an operator + (29, 'callgsubr'), + (30, 'vhcurveto'), + (31, 'hvcurveto'), + ((12, 0), 'ignore'), # dotsection. Yes, there a few very early OTF/CFF + # fonts with this deprecated operator. Just ignore it. + ((12, 3), 'and'), + ((12, 4), 'or'), + ((12, 5), 'not'), + ((12, 8), 'store'), + ((12, 9), 'abs'), + ((12, 10), 'add'), + ((12, 11), 'sub'), + ((12, 12), 'div'), + ((12, 13), 'load'), + ((12, 14), 'neg'), + ((12, 15), 'eq'), + ((12, 18), 'drop'), + ((12, 20), 'put'), + ((12, 21), 'get'), + ((12, 22), 'ifelse'), + ((12, 23), 'random'), + ((12, 24), 'mul'), + ((12, 26), 'sqrt'), + ((12, 27), 'dup'), + ((12, 28), 'exch'), + ((12, 29), 'index'), + ((12, 30), 'roll'), + ((12, 34), 'hflex'), + ((12, 35), 'flex'), + ((12, 36), 'hflex1'), + ((12, 37), 'flex1'), +] + +def getIntEncoder(format): + if format == "cff": + fourByteOp = bytechr(29) + elif format == "t1": + fourByteOp = bytechr(255) + else: + assert format == "t2" + fourByteOp = None + + def encodeInt(value, fourByteOp=fourByteOp, bytechr=bytechr, + pack=struct.pack, unpack=struct.unpack): + if -107 <= value <= 107: + code = bytechr(value + 139) + elif 108 <= value <= 1131: + value = value - 108 + code = bytechr((value >> 8) + 247) + bytechr(value & 0xFF) + elif -1131 <= value <= -108: + value = -value - 108 + code = bytechr((value >> 8) + 251) + bytechr(value & 0xFF) + elif fourByteOp is None: + # T2 only supports 2 byte ints + if -32768 <= value <= 32767: + code = bytechr(28) + pack(">h", value) + else: + # Backwards compatible hack: due to a previous bug in FontTools, + # 16.16 fixed numbers were written out as 4-byte ints. When + # these numbers were small, they were wrongly written back as + # small ints instead of 4-byte ints, breaking round-tripping. + # This here workaround doesn't do it any better, since we can't + # distinguish anymore between small ints that were supposed to + # be small fixed numbers and small ints that were just small + # ints. Hence the warning. + log.warning("4-byte T2 number got passed to the " + "IntType handler. This should happen only when reading in " + "old XML files.\n") + code = bytechr(255) + pack(">l", value) + else: + code = fourByteOp + pack(">l", value) + return code + + return encodeInt + + +encodeIntCFF = getIntEncoder("cff") +encodeIntT1 = getIntEncoder("t1") +encodeIntT2 = getIntEncoder("t2") + +def encodeFixed(f, pack=struct.pack): + """For T2 only""" + value = floatToFixed(f, precisionBits=16) + if value & 0xFFFF == 0: # check if the fractional part is zero + return encodeIntT2(value >> 16) # encode only the integer part + else: + return b"\xff" + pack(">l", value) # encode the entire fixed point value + + +realZeroBytes = bytechr(30) + bytechr(0xf) + +def encodeFloat(f): + # For CFF only, used in cffLib + if f == 0.0: # 0.0 == +0.0 == -0.0 + return realZeroBytes + # Note: 14 decimal digits seems to be the limitation for CFF real numbers + # in macOS. However, we use 8 here to match the implementation of AFDKO. + s = "%.8G" % f + if s[:2] == "0.": + s = s[1:] + elif s[:3] == "-0.": + s = "-" + s[2:] + nibbles = [] + while s: + c = s[0] + s = s[1:] + if c == "E": + c2 = s[:1] + if c2 == "-": + s = s[1:] + c = "E-" + elif c2 == "+": + s = s[1:] + nibbles.append(realNibblesDict[c]) + nibbles.append(0xf) + if len(nibbles) % 2: + nibbles.append(0xf) + d = bytechr(30) + for i in range(0, len(nibbles), 2): + d = d + bytechr(nibbles[i] << 4 | nibbles[i+1]) + return d + + +class CharStringCompileError(Exception): pass + + +class SimpleT2Decompiler(object): + + def __init__(self, localSubrs, globalSubrs, private=None): + self.localSubrs = localSubrs + self.localBias = calcSubrBias(localSubrs) + self.globalSubrs = globalSubrs + self.globalBias = calcSubrBias(globalSubrs) + self.private = private + self.reset() + + def reset(self): + self.callingStack = [] + self.operandStack = [] + self.hintCount = 0 + self.hintMaskBytes = 0 + self.numRegions = 0 + + def execute(self, charString): + self.callingStack.append(charString) + needsDecompilation = charString.needsDecompilation() + if needsDecompilation: + program = [] + pushToProgram = program.append + else: + pushToProgram = lambda x: None + pushToStack = self.operandStack.append + index = 0 + while True: + token, isOperator, index = charString.getToken(index) + if token is None: + break # we're done! + pushToProgram(token) + if isOperator: + handlerName = "op_" + token + handler = getattr(self, handlerName, None) + if handler is not None: + rv = handler(index) + if rv: + hintMaskBytes, index = rv + pushToProgram(hintMaskBytes) + else: + self.popall() + else: + pushToStack(token) + if needsDecompilation: + charString.setProgram(program) + del self.callingStack[-1] + + def pop(self): + value = self.operandStack[-1] + del self.operandStack[-1] + return value + + def popall(self): + stack = self.operandStack[:] + self.operandStack[:] = [] + return stack + + def push(self, value): + self.operandStack.append(value) + + def op_return(self, index): + if self.operandStack: + pass + + def op_endchar(self, index): + pass + + def op_ignore(self, index): + pass + + def op_callsubr(self, index): + subrIndex = self.pop() + subr = self.localSubrs[subrIndex+self.localBias] + self.execute(subr) + + def op_callgsubr(self, index): + subrIndex = self.pop() + subr = self.globalSubrs[subrIndex+self.globalBias] + self.execute(subr) + + def op_hstem(self, index): + self.countHints() + def op_vstem(self, index): + self.countHints() + def op_hstemhm(self, index): + self.countHints() + def op_vstemhm(self, index): + self.countHints() + + def op_hintmask(self, index): + if not self.hintMaskBytes: + self.countHints() + self.hintMaskBytes = (self.hintCount + 7) // 8 + hintMaskBytes, index = self.callingStack[-1].getBytes(index, self.hintMaskBytes) + return hintMaskBytes, index + + op_cntrmask = op_hintmask + + def countHints(self): + args = self.popall() + self.hintCount = self.hintCount + len(args) // 2 + + # misc + def op_and(self, index): + raise NotImplementedError + def op_or(self, index): + raise NotImplementedError + def op_not(self, index): + raise NotImplementedError + def op_store(self, index): + raise NotImplementedError + def op_abs(self, index): + raise NotImplementedError + def op_add(self, index): + raise NotImplementedError + def op_sub(self, index): + raise NotImplementedError + def op_div(self, index): + raise NotImplementedError + def op_load(self, index): + raise NotImplementedError + def op_neg(self, index): + raise NotImplementedError + def op_eq(self, index): + raise NotImplementedError + def op_drop(self, index): + raise NotImplementedError + def op_put(self, index): + raise NotImplementedError + def op_get(self, index): + raise NotImplementedError + def op_ifelse(self, index): + raise NotImplementedError + def op_random(self, index): + raise NotImplementedError + def op_mul(self, index): + raise NotImplementedError + def op_sqrt(self, index): + raise NotImplementedError + def op_dup(self, index): + raise NotImplementedError + def op_exch(self, index): + raise NotImplementedError + def op_index(self, index): + raise NotImplementedError + def op_roll(self, index): + raise NotImplementedError + + # TODO(behdad): move to T2OutlineExtractor and add a 'setVariation' + # method that takes VarStoreData and a location + def op_blend(self, index): + if self.numRegions == 0: + self.numRegions = self.private.getNumRegions() + numBlends = self.pop() + numOps = numBlends * (self.numRegions + 1) + del self.operandStack[-(numOps-numBlends):] # Leave the default operands on the stack. + + def op_vsindex(self, index): + vi = self.pop() + self.numRegions = self.private.getNumRegions(vi) + + +t1Operators = [ +# opcode name + (1, 'hstem'), + (3, 'vstem'), + (4, 'vmoveto'), + (5, 'rlineto'), + (6, 'hlineto'), + (7, 'vlineto'), + (8, 'rrcurveto'), + (9, 'closepath'), + (10, 'callsubr'), + (11, 'return'), + (13, 'hsbw'), + (14, 'endchar'), + (21, 'rmoveto'), + (22, 'hmoveto'), + (30, 'vhcurveto'), + (31, 'hvcurveto'), + ((12, 0), 'dotsection'), + ((12, 1), 'vstem3'), + ((12, 2), 'hstem3'), + ((12, 6), 'seac'), + ((12, 7), 'sbw'), + ((12, 12), 'div'), + ((12, 16), 'callothersubr'), + ((12, 17), 'pop'), + ((12, 33), 'setcurrentpoint'), +] + + +class T2WidthExtractor(SimpleT2Decompiler): + + def __init__(self, localSubrs, globalSubrs, nominalWidthX, defaultWidthX, private=None): + SimpleT2Decompiler.__init__(self, localSubrs, globalSubrs, private) + self.nominalWidthX = nominalWidthX + self.defaultWidthX = defaultWidthX + + def reset(self): + SimpleT2Decompiler.reset(self) + self.gotWidth = 0 + self.width = 0 + + def popallWidth(self, evenOdd=0): + args = self.popall() + if not self.gotWidth: + if evenOdd ^ (len(args) % 2): + # For CFF2 charstrings, this should never happen + assert self.defaultWidthX is not None, "CFF2 CharStrings must not have an initial width value" + self.width = self.nominalWidthX + args[0] + args = args[1:] + else: + self.width = self.defaultWidthX + self.gotWidth = 1 + return args + + def countHints(self): + args = self.popallWidth() + self.hintCount = self.hintCount + len(args) // 2 + + def op_rmoveto(self, index): + self.popallWidth() + + def op_hmoveto(self, index): + self.popallWidth(1) + + def op_vmoveto(self, index): + self.popallWidth(1) + + def op_endchar(self, index): + self.popallWidth() + + +class T2OutlineExtractor(T2WidthExtractor): + + def __init__(self, pen, localSubrs, globalSubrs, nominalWidthX, defaultWidthX, private=None): + T2WidthExtractor.__init__( + self, localSubrs, globalSubrs, nominalWidthX, defaultWidthX, private) + self.pen = pen + + def reset(self): + T2WidthExtractor.reset(self) + self.currentPoint = (0, 0) + self.sawMoveTo = 0 + + def _nextPoint(self, point): + x, y = self.currentPoint + point = x + point[0], y + point[1] + self.currentPoint = point + return point + + def rMoveTo(self, point): + self.pen.moveTo(self._nextPoint(point)) + self.sawMoveTo = 1 + + def rLineTo(self, point): + if not self.sawMoveTo: + self.rMoveTo((0, 0)) + self.pen.lineTo(self._nextPoint(point)) + + def rCurveTo(self, pt1, pt2, pt3): + if not self.sawMoveTo: + self.rMoveTo((0, 0)) + nextPoint = self._nextPoint + self.pen.curveTo(nextPoint(pt1), nextPoint(pt2), nextPoint(pt3)) + + def closePath(self): + if self.sawMoveTo: + self.pen.closePath() + self.sawMoveTo = 0 + + def endPath(self): + # In T2 there are no open paths, so always do a closePath when + # finishing a sub path. + self.closePath() + + # + # hint operators + # + #def op_hstem(self, index): + # self.countHints() + #def op_vstem(self, index): + # self.countHints() + #def op_hstemhm(self, index): + # self.countHints() + #def op_vstemhm(self, index): + # self.countHints() + #def op_hintmask(self, index): + # self.countHints() + #def op_cntrmask(self, index): + # self.countHints() + + # + # path constructors, moveto + # + def op_rmoveto(self, index): + self.endPath() + self.rMoveTo(self.popallWidth()) + def op_hmoveto(self, index): + self.endPath() + self.rMoveTo((self.popallWidth(1)[0], 0)) + def op_vmoveto(self, index): + self.endPath() + self.rMoveTo((0, self.popallWidth(1)[0])) + def op_endchar(self, index): + self.endPath() + args = self.popallWidth() + if args: + from fontTools.encodings.StandardEncoding import StandardEncoding + # endchar can do seac accent bulding; The T2 spec says it's deprecated, + # but recent software that shall remain nameless does output it. + adx, ady, bchar, achar = args + baseGlyph = StandardEncoding[bchar] + self.pen.addComponent(baseGlyph, (1, 0, 0, 1, 0, 0)) + accentGlyph = StandardEncoding[achar] + self.pen.addComponent(accentGlyph, (1, 0, 0, 1, adx, ady)) + + # + # path constructors, lines + # + def op_rlineto(self, index): + args = self.popall() + for i in range(0, len(args), 2): + point = args[i:i+2] + self.rLineTo(point) + + def op_hlineto(self, index): + self.alternatingLineto(1) + def op_vlineto(self, index): + self.alternatingLineto(0) + + # + # path constructors, curves + # + def op_rrcurveto(self, index): + """{dxa dya dxb dyb dxc dyc}+ rrcurveto""" + args = self.popall() + for i in range(0, len(args), 6): + dxa, dya, dxb, dyb, dxc, dyc, = args[i:i+6] + self.rCurveTo((dxa, dya), (dxb, dyb), (dxc, dyc)) + + def op_rcurveline(self, index): + """{dxa dya dxb dyb dxc dyc}+ dxd dyd rcurveline""" + args = self.popall() + for i in range(0, len(args)-2, 6): + dxb, dyb, dxc, dyc, dxd, dyd = args[i:i+6] + self.rCurveTo((dxb, dyb), (dxc, dyc), (dxd, dyd)) + self.rLineTo(args[-2:]) + + def op_rlinecurve(self, index): + """{dxa dya}+ dxb dyb dxc dyc dxd dyd rlinecurve""" + args = self.popall() + lineArgs = args[:-6] + for i in range(0, len(lineArgs), 2): + self.rLineTo(lineArgs[i:i+2]) + dxb, dyb, dxc, dyc, dxd, dyd = args[-6:] + self.rCurveTo((dxb, dyb), (dxc, dyc), (dxd, dyd)) + + def op_vvcurveto(self, index): + "dx1? {dya dxb dyb dyc}+ vvcurveto" + args = self.popall() + if len(args) % 2: + dx1 = args[0] + args = args[1:] + else: + dx1 = 0 + for i in range(0, len(args), 4): + dya, dxb, dyb, dyc = args[i:i+4] + self.rCurveTo((dx1, dya), (dxb, dyb), (0, dyc)) + dx1 = 0 + + def op_hhcurveto(self, index): + """dy1? {dxa dxb dyb dxc}+ hhcurveto""" + args = self.popall() + if len(args) % 2: + dy1 = args[0] + args = args[1:] + else: + dy1 = 0 + for i in range(0, len(args), 4): + dxa, dxb, dyb, dxc = args[i:i+4] + self.rCurveTo((dxa, dy1), (dxb, dyb), (dxc, 0)) + dy1 = 0 + + def op_vhcurveto(self, index): + """dy1 dx2 dy2 dx3 {dxa dxb dyb dyc dyd dxe dye dxf}* dyf? vhcurveto (30) + {dya dxb dyb dxc dxd dxe dye dyf}+ dxf? vhcurveto + """ + args = self.popall() + while args: + args = self.vcurveto(args) + if args: + args = self.hcurveto(args) + + def op_hvcurveto(self, index): + """dx1 dx2 dy2 dy3 {dya dxb dyb dxc dxd dxe dye dyf}* dxf? + {dxa dxb dyb dyc dyd dxe dye dxf}+ dyf? + """ + args = self.popall() + while args: + args = self.hcurveto(args) + if args: + args = self.vcurveto(args) + + # + # path constructors, flex + # + def op_hflex(self, index): + dx1, dx2, dy2, dx3, dx4, dx5, dx6 = self.popall() + dy1 = dy3 = dy4 = dy6 = 0 + dy5 = -dy2 + self.rCurveTo((dx1, dy1), (dx2, dy2), (dx3, dy3)) + self.rCurveTo((dx4, dy4), (dx5, dy5), (dx6, dy6)) + def op_flex(self, index): + dx1, dy1, dx2, dy2, dx3, dy3, dx4, dy4, dx5, dy5, dx6, dy6, fd = self.popall() + self.rCurveTo((dx1, dy1), (dx2, dy2), (dx3, dy3)) + self.rCurveTo((dx4, dy4), (dx5, dy5), (dx6, dy6)) + def op_hflex1(self, index): + dx1, dy1, dx2, dy2, dx3, dx4, dx5, dy5, dx6 = self.popall() + dy3 = dy4 = 0 + dy6 = -(dy1 + dy2 + dy3 + dy4 + dy5) + + self.rCurveTo((dx1, dy1), (dx2, dy2), (dx3, dy3)) + self.rCurveTo((dx4, dy4), (dx5, dy5), (dx6, dy6)) + def op_flex1(self, index): + dx1, dy1, dx2, dy2, dx3, dy3, dx4, dy4, dx5, dy5, d6 = self.popall() + dx = dx1 + dx2 + dx3 + dx4 + dx5 + dy = dy1 + dy2 + dy3 + dy4 + dy5 + if abs(dx) > abs(dy): + dx6 = d6 + dy6 = -dy + else: + dx6 = -dx + dy6 = d6 + self.rCurveTo((dx1, dy1), (dx2, dy2), (dx3, dy3)) + self.rCurveTo((dx4, dy4), (dx5, dy5), (dx6, dy6)) + + # misc + def op_and(self, index): + raise NotImplementedError + def op_or(self, index): + raise NotImplementedError + def op_not(self, index): + raise NotImplementedError + def op_store(self, index): + raise NotImplementedError + def op_abs(self, index): + raise NotImplementedError + def op_add(self, index): + raise NotImplementedError + def op_sub(self, index): + raise NotImplementedError + def op_div(self, index): + num2 = self.pop() + num1 = self.pop() + d1 = num1//num2 + d2 = num1/num2 + if d1 == d2: + self.push(d1) + else: + self.push(d2) + def op_load(self, index): + raise NotImplementedError + def op_neg(self, index): + raise NotImplementedError + def op_eq(self, index): + raise NotImplementedError + def op_drop(self, index): + raise NotImplementedError + def op_put(self, index): + raise NotImplementedError + def op_get(self, index): + raise NotImplementedError + def op_ifelse(self, index): + raise NotImplementedError + def op_random(self, index): + raise NotImplementedError + def op_mul(self, index): + raise NotImplementedError + def op_sqrt(self, index): + raise NotImplementedError + def op_dup(self, index): + raise NotImplementedError + def op_exch(self, index): + raise NotImplementedError + def op_index(self, index): + raise NotImplementedError + def op_roll(self, index): + raise NotImplementedError + + # + # miscellaneous helpers + # + def alternatingLineto(self, isHorizontal): + args = self.popall() + for arg in args: + if isHorizontal: + point = (arg, 0) + else: + point = (0, arg) + self.rLineTo(point) + isHorizontal = not isHorizontal + + def vcurveto(self, args): + dya, dxb, dyb, dxc = args[:4] + args = args[4:] + if len(args) == 1: + dyc = args[0] + args = [] + else: + dyc = 0 + self.rCurveTo((0, dya), (dxb, dyb), (dxc, dyc)) + return args + + def hcurveto(self, args): + dxa, dxb, dyb, dyc = args[:4] + args = args[4:] + if len(args) == 1: + dxc = args[0] + args = [] + else: + dxc = 0 + self.rCurveTo((dxa, 0), (dxb, dyb), (dxc, dyc)) + return args + +class T1OutlineExtractor(T2OutlineExtractor): + + def __init__(self, pen, subrs): + self.pen = pen + self.subrs = subrs + self.reset() + + def reset(self): + self.flexing = 0 + self.width = 0 + self.sbx = 0 + T2OutlineExtractor.reset(self) + + def endPath(self): + if self.sawMoveTo: + self.pen.endPath() + self.sawMoveTo = 0 + + def popallWidth(self, evenOdd=0): + return self.popall() + + def exch(self): + stack = self.operandStack + stack[-1], stack[-2] = stack[-2], stack[-1] + + # + # path constructors + # + def op_rmoveto(self, index): + if self.flexing: + return + self.endPath() + self.rMoveTo(self.popall()) + def op_hmoveto(self, index): + if self.flexing: + # We must add a parameter to the stack if we are flexing + self.push(0) + return + self.endPath() + self.rMoveTo((self.popall()[0], 0)) + def op_vmoveto(self, index): + if self.flexing: + # We must add a parameter to the stack if we are flexing + self.push(0) + self.exch() + return + self.endPath() + self.rMoveTo((0, self.popall()[0])) + def op_closepath(self, index): + self.closePath() + def op_setcurrentpoint(self, index): + args = self.popall() + x, y = args + self.currentPoint = x, y + + def op_endchar(self, index): + self.endPath() + + def op_hsbw(self, index): + sbx, wx = self.popall() + self.width = wx + self.sbx = sbx + self.currentPoint = sbx, self.currentPoint[1] + def op_sbw(self, index): + self.popall() # XXX + + # + def op_callsubr(self, index): + subrIndex = self.pop() + subr = self.subrs[subrIndex] + self.execute(subr) + def op_callothersubr(self, index): + subrIndex = self.pop() + nArgs = self.pop() + #print nArgs, subrIndex, "callothersubr" + if subrIndex == 0 and nArgs == 3: + self.doFlex() + self.flexing = 0 + elif subrIndex == 1 and nArgs == 0: + self.flexing = 1 + # ignore... + def op_pop(self, index): + pass # ignore... + + def doFlex(self): + finaly = self.pop() + finalx = self.pop() + self.pop() # flex height is unused + + p3y = self.pop() + p3x = self.pop() + bcp4y = self.pop() + bcp4x = self.pop() + bcp3y = self.pop() + bcp3x = self.pop() + p2y = self.pop() + p2x = self.pop() + bcp2y = self.pop() + bcp2x = self.pop() + bcp1y = self.pop() + bcp1x = self.pop() + rpy = self.pop() + rpx = self.pop() + + # call rrcurveto + self.push(bcp1x+rpx) + self.push(bcp1y+rpy) + self.push(bcp2x) + self.push(bcp2y) + self.push(p2x) + self.push(p2y) + self.op_rrcurveto(None) + + # call rrcurveto + self.push(bcp3x) + self.push(bcp3y) + self.push(bcp4x) + self.push(bcp4y) + self.push(p3x) + self.push(p3y) + self.op_rrcurveto(None) + + # Push back final coords so subr 0 can find them + self.push(finalx) + self.push(finaly) + + def op_dotsection(self, index): + self.popall() # XXX + def op_hstem3(self, index): + self.popall() # XXX + def op_seac(self, index): + "asb adx ady bchar achar seac" + from fontTools.encodings.StandardEncoding import StandardEncoding + asb, adx, ady, bchar, achar = self.popall() + baseGlyph = StandardEncoding[bchar] + self.pen.addComponent(baseGlyph, (1, 0, 0, 1, 0, 0)) + accentGlyph = StandardEncoding[achar] + adx = adx + self.sbx - asb # seac weirdness + self.pen.addComponent(accentGlyph, (1, 0, 0, 1, adx, ady)) + def op_vstem3(self, index): + self.popall() # XXX + +class T2CharString(object): + + operandEncoding = t2OperandEncoding + operators, opcodes = buildOperatorDict(t2Operators) + decompilerClass = SimpleT2Decompiler + outlineExtractor = T2OutlineExtractor + + def __init__(self, bytecode=None, program=None, private=None, globalSubrs=None): + if program is None: + program = [] + self.bytecode = bytecode + self.program = program + self.private = private + self.globalSubrs = globalSubrs if globalSubrs is not None else [] + self._cur_vsindex = None + + def getNumRegions(self, vsindex=None): + pd = self.private + assert(pd is not None) + if vsindex is not None: + self._cur_vsindex = vsindex + elif self._cur_vsindex is None: + self._cur_vsindex = pd.vsindex if hasattr(pd, 'vsindex') else 0 + return pd.getNumRegions(self._cur_vsindex) + + def __repr__(self): + if self.bytecode is None: + return "<%s (source) at %x>" % (self.__class__.__name__, id(self)) + else: + return "<%s (bytecode) at %x>" % (self.__class__.__name__, id(self)) + + def getIntEncoder(self): + return encodeIntT2 + + def getFixedEncoder(self): + return encodeFixed + + def decompile(self): + if not self.needsDecompilation(): + return + subrs = getattr(self.private, "Subrs", []) + decompiler = self.decompilerClass(subrs, self.globalSubrs, self.private) + decompiler.execute(self) + + def draw(self, pen): + subrs = getattr(self.private, "Subrs", []) + extractor = self.outlineExtractor(pen, subrs, self.globalSubrs, + self.private.nominalWidthX, self.private.defaultWidthX, + self.private) + extractor.execute(self) + self.width = extractor.width + + def calcBounds(self, glyphSet): + boundsPen = BoundsPen(glyphSet) + self.draw(boundsPen) + return boundsPen.bounds + + def compile(self, isCFF2=False): + if self.bytecode is not None: + return + opcodes = self.opcodes + program = self.program + + if isCFF2: + # If present, remove return and endchar operators. + if program and program[-1] in ("return", "endchar"): + program = program[:-1] + elif program and not isinstance(program[-1], str): + raise CharStringCompileError( + "T2CharString or Subr has items on the stack after last operator." + ) + + bytecode = [] + encodeInt = self.getIntEncoder() + encodeFixed = self.getFixedEncoder() + i = 0 + end = len(program) + while i < end: + token = program[i] + i = i + 1 + if isinstance(token, str): + try: + bytecode.extend(bytechr(b) for b in opcodes[token]) + except KeyError: + raise CharStringCompileError("illegal operator: %s" % token) + if token in ('hintmask', 'cntrmask'): + bytecode.append(program[i]) # hint mask + i = i + 1 + elif isinstance(token, int): + bytecode.append(encodeInt(token)) + elif isinstance(token, float): + bytecode.append(encodeFixed(token)) + else: + assert 0, "unsupported type: %s" % type(token) + try: + bytecode = bytesjoin(bytecode) + except TypeError: + log.error(bytecode) + raise + self.setBytecode(bytecode) + + def needsDecompilation(self): + return self.bytecode is not None + + def setProgram(self, program): + self.program = program + self.bytecode = None + + def setBytecode(self, bytecode): + self.bytecode = bytecode + self.program = None + + def getToken(self, index, + len=len, byteord=byteord, isinstance=isinstance): + if self.bytecode is not None: + if index >= len(self.bytecode): + return None, 0, 0 + b0 = byteord(self.bytecode[index]) + index = index + 1 + handler = self.operandEncoding[b0] + token, index = handler(self, b0, self.bytecode, index) + else: + if index >= len(self.program): + return None, 0, 0 + token = self.program[index] + index = index + 1 + isOperator = isinstance(token, str) + return token, isOperator, index + + def getBytes(self, index, nBytes): + if self.bytecode is not None: + newIndex = index + nBytes + bytes = self.bytecode[index:newIndex] + index = newIndex + else: + bytes = self.program[index] + index = index + 1 + assert len(bytes) == nBytes + return bytes, index + + def handle_operator(self, operator): + return operator + + def toXML(self, xmlWriter, ttFont=None): + from fontTools.misc.textTools import num2binary + if self.bytecode is not None: + xmlWriter.dumphex(self.bytecode) + else: + index = 0 + args = [] + while True: + token, isOperator, index = self.getToken(index) + if token is None: + break + if isOperator: + if token in ('hintmask', 'cntrmask'): + hintMask, isOperator, index = self.getToken(index) + bits = [] + for byte in hintMask: + bits.append(num2binary(byteord(byte), 8)) + hintMask = strjoin(bits) + line = ' '.join(args + [token, hintMask]) + else: + line = ' '.join(args + [token]) + xmlWriter.write(line) + xmlWriter.newline() + args = [] + else: + if isinstance(token, float): + token = floatToFixedToStr(token, precisionBits=16) + else: + token = str(token) + args.append(token) + if args: + # NOTE: only CFF2 charstrings/subrs can have numeric arguments on + # the stack after the last operator. Compiling this would fail if + # this is part of CFF 1.0 table. + line = ' '.join(args) + xmlWriter.write(line) + + def fromXML(self, name, attrs, content): + from fontTools.misc.textTools import binary2num, readHex + if attrs.get("raw"): + self.setBytecode(readHex(content)) + return + content = strjoin(content) + content = content.split() + program = [] + end = len(content) + i = 0 + while i < end: + token = content[i] + i = i + 1 + try: + token = int(token) + except ValueError: + try: + token = strToFixedToFloat(token, precisionBits=16) + except ValueError: + program.append(token) + if token in ('hintmask', 'cntrmask'): + mask = content[i] + maskBytes = b"" + for j in range(0, len(mask), 8): + maskBytes = maskBytes + bytechr(binary2num(mask[j:j+8])) + program.append(maskBytes) + i = i + 1 + else: + program.append(token) + else: + program.append(token) + self.setProgram(program) + +class T1CharString(T2CharString): + + operandEncoding = t1OperandEncoding + operators, opcodes = buildOperatorDict(t1Operators) + + def __init__(self, bytecode=None, program=None, subrs=None): + super().__init__(bytecode, program) + self.subrs = subrs + + def getIntEncoder(self): + return encodeIntT1 + + def getFixedEncoder(self): + def encodeFixed(value): + raise TypeError("Type 1 charstrings don't support floating point operands") + + def decompile(self): + if self.bytecode is None: + return + program = [] + index = 0 + while True: + token, isOperator, index = self.getToken(index) + if token is None: + break + program.append(token) + self.setProgram(program) + + def draw(self, pen): + extractor = T1OutlineExtractor(pen, self.subrs) + extractor.execute(self) + self.width = extractor.width + +class DictDecompiler(object): + + operandEncoding = cffDictOperandEncoding + + def __init__(self, strings, parent=None): + self.stack = [] + self.strings = strings + self.dict = {} + self.parent = parent + + def getDict(self): + assert len(self.stack) == 0, "non-empty stack" + return self.dict + + def decompile(self, data): + index = 0 + lenData = len(data) + push = self.stack.append + while index < lenData: + b0 = byteord(data[index]) + index = index + 1 + handler = self.operandEncoding[b0] + value, index = handler(self, b0, data, index) + if value is not None: + push(value) + def pop(self): + value = self.stack[-1] + del self.stack[-1] + return value + + def popall(self): + args = self.stack[:] + del self.stack[:] + return args + + def handle_operator(self, operator): + operator, argType = operator + if isinstance(argType, tuple): + value = () + for i in range(len(argType)-1, -1, -1): + arg = argType[i] + arghandler = getattr(self, "arg_" + arg) + value = (arghandler(operator),) + value + else: + arghandler = getattr(self, "arg_" + argType) + value = arghandler(operator) + if operator == "blend": + self.stack.extend(value) + else: + self.dict[operator] = value + + def arg_number(self, name): + if isinstance(self.stack[0], list): + out = self.arg_blend_number(self.stack) + else: + out = self.pop() + return out + + def arg_blend_number(self, name): + out = [] + blendArgs = self.pop() + numMasters = len(blendArgs) + out.append(blendArgs) + out.append("blend") + dummy = self.popall() + return blendArgs + + def arg_SID(self, name): + return self.strings[self.pop()] + def arg_array(self, name): + return self.popall() + def arg_blendList(self, name): + """ + There may be non-blend args at the top of the stack. We first calculate + where the blend args start in the stack. These are the last + numMasters*numBlends) +1 args. + The blend args starts with numMasters relative coordinate values, the BlueValues in the list from the default master font. This is followed by + numBlends list of values. Each of value in one of these lists is the + Variable Font delta for the matching region. + + We re-arrange this to be a list of numMaster entries. Each entry starts with the corresponding default font relative value, and is followed by + the delta values. We then convert the default values, the first item in each entry, to an absolute value. + """ + vsindex = self.dict.get('vsindex', 0) + numMasters = self.parent.getNumRegions(vsindex) + 1 # only a PrivateDict has blended ops. + numBlends = self.pop() + args = self.popall() + numArgs = len(args) + # The spec says that there should be no non-blended Blue Values,. + assert(numArgs == numMasters * numBlends) + value = [None]*numBlends + numDeltas = numMasters-1 + i = 0 + prevVal = 0 + while i < numBlends: + newVal = args[i] + prevVal + prevVal = newVal + masterOffset = numBlends + (i* numDeltas) + blendList = [newVal] + args[masterOffset:masterOffset+numDeltas] + value[i] = blendList + i += 1 + return value + + def arg_delta(self, name): + valueList = self.popall() + out = [] + if valueList and isinstance(valueList[0], list): + # arg_blendList() has already converted these to absolute values. + out = valueList + else: + current = 0 + for v in valueList: + current = current + v + out.append(current) + return out + + +def calcSubrBias(subrs): + nSubrs = len(subrs) + if nSubrs < 1240: + bias = 107 + elif nSubrs < 33900: + bias = 1131 + else: + bias = 32768 + return bias diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/psLib.py b/.venv/lib/python3.9/site-packages/fontTools/misc/psLib.py new file mode 100644 index 00000000..c97c418a --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/psLib.py @@ -0,0 +1,384 @@ +from fontTools.misc.textTools import bytechr, byteord, bytesjoin, tobytes, tostr +from fontTools.misc import eexec +from .psOperators import ( + PSOperators, + ps_StandardEncoding, + ps_array, + ps_boolean, + ps_dict, + ps_integer, + ps_literal, + ps_mark, + ps_name, + ps_operator, + ps_procedure, + ps_procmark, + ps_real, + ps_string, +) +import re +from collections.abc import Callable +from string import whitespace +import logging + + +log = logging.getLogger(__name__) + +ps_special = b'()<>[]{}%' # / is one too, but we take care of that one differently + +skipwhiteRE = re.compile(bytesjoin([b"[", whitespace, b"]*"])) +endofthingPat = bytesjoin([b"[^][(){}<>/%", whitespace, b"]*"]) +endofthingRE = re.compile(endofthingPat) +commentRE = re.compile(b"%[^\n\r]*") + +# XXX This not entirely correct as it doesn't allow *nested* embedded parens: +stringPat = br""" + \( + ( + ( + [^()]* \ [()] + ) + | + ( + [^()]* \( [^()]* \) + ) + )* + [^()]* + \) +""" +stringPat = b"".join(stringPat.split()) +stringRE = re.compile(stringPat) + +hexstringRE = re.compile(bytesjoin([b"<[", whitespace, b"0-9A-Fa-f]*>"])) + +class PSTokenError(Exception): pass +class PSError(Exception): pass + + +class PSTokenizer(object): + + def __init__(self, buf=b'', encoding="ascii"): + # Force self.buf to be a byte string + buf = tobytes(buf) + self.buf = buf + self.len = len(buf) + self.pos = 0 + self.closed = False + self.encoding = encoding + + def read(self, n=-1): + """Read at most 'n' bytes from the buffer, or less if the read + hits EOF before obtaining 'n' bytes. + If 'n' is negative or omitted, read all data until EOF is reached. + """ + if self.closed: + raise ValueError("I/O operation on closed file") + if n is None or n < 0: + newpos = self.len + else: + newpos = min(self.pos+n, self.len) + r = self.buf[self.pos:newpos] + self.pos = newpos + return r + + def close(self): + if not self.closed: + self.closed = True + del self.buf, self.pos + + def getnexttoken(self, + # localize some stuff, for performance + len=len, + ps_special=ps_special, + stringmatch=stringRE.match, + hexstringmatch=hexstringRE.match, + commentmatch=commentRE.match, + endmatch=endofthingRE.match): + + self.skipwhite() + if self.pos >= self.len: + return None, None + pos = self.pos + buf = self.buf + char = bytechr(byteord(buf[pos])) + if char in ps_special: + if char in b'{}[]': + tokentype = 'do_special' + token = char + elif char == b'%': + tokentype = 'do_comment' + _, nextpos = commentmatch(buf, pos).span() + token = buf[pos:nextpos] + elif char == b'(': + tokentype = 'do_string' + m = stringmatch(buf, pos) + if m is None: + raise PSTokenError('bad string at character %d' % pos) + _, nextpos = m.span() + token = buf[pos:nextpos] + elif char == b'<': + tokentype = 'do_hexstring' + m = hexstringmatch(buf, pos) + if m is None: + raise PSTokenError('bad hexstring at character %d' % pos) + _, nextpos = m.span() + token = buf[pos:nextpos] + else: + raise PSTokenError('bad token at character %d' % pos) + else: + if char == b'/': + tokentype = 'do_literal' + m = endmatch(buf, pos+1) + else: + tokentype = '' + m = endmatch(buf, pos) + if m is None: + raise PSTokenError('bad token at character %d' % pos) + _, nextpos = m.span() + token = buf[pos:nextpos] + self.pos = pos + len(token) + token = tostr(token, encoding=self.encoding) + return tokentype, token + + def skipwhite(self, whitematch=skipwhiteRE.match): + _, nextpos = whitematch(self.buf, self.pos).span() + self.pos = nextpos + + def starteexec(self): + self.pos = self.pos + 1 + self.dirtybuf = self.buf[self.pos:] + self.buf, R = eexec.decrypt(self.dirtybuf, 55665) + self.len = len(self.buf) + self.pos = 4 + + def stopeexec(self): + if not hasattr(self, 'dirtybuf'): + return + self.buf = self.dirtybuf + del self.dirtybuf + + +class PSInterpreter(PSOperators): + + def __init__(self, encoding="ascii"): + systemdict = {} + userdict = {} + self.encoding = encoding + self.dictstack = [systemdict, userdict] + self.stack = [] + self.proclevel = 0 + self.procmark = ps_procmark() + self.fillsystemdict() + + def fillsystemdict(self): + systemdict = self.dictstack[0] + systemdict['['] = systemdict['mark'] = self.mark = ps_mark() + systemdict[']'] = ps_operator(']', self.do_makearray) + systemdict['true'] = ps_boolean(1) + systemdict['false'] = ps_boolean(0) + systemdict['StandardEncoding'] = ps_array(ps_StandardEncoding) + systemdict['FontDirectory'] = ps_dict({}) + self.suckoperators(systemdict, self.__class__) + + def suckoperators(self, systemdict, klass): + for name in dir(klass): + attr = getattr(self, name) + if isinstance(attr, Callable) and name[:3] == 'ps_': + name = name[3:] + systemdict[name] = ps_operator(name, attr) + for baseclass in klass.__bases__: + self.suckoperators(systemdict, baseclass) + + def interpret(self, data, getattr=getattr): + tokenizer = self.tokenizer = PSTokenizer(data, self.encoding) + getnexttoken = tokenizer.getnexttoken + do_token = self.do_token + handle_object = self.handle_object + try: + while 1: + tokentype, token = getnexttoken() + if not token: + break + if tokentype: + handler = getattr(self, tokentype) + object = handler(token) + else: + object = do_token(token) + if object is not None: + handle_object(object) + tokenizer.close() + self.tokenizer = None + except: + if self.tokenizer is not None: + log.debug( + 'ps error:\n' + '- - - - - - -\n' + '%s\n' + '>>>\n' + '%s\n' + '- - - - - - -', + self.tokenizer.buf[self.tokenizer.pos-50:self.tokenizer.pos], + self.tokenizer.buf[self.tokenizer.pos:self.tokenizer.pos+50]) + raise + + def handle_object(self, object): + if not (self.proclevel or object.literal or object.type == 'proceduretype'): + if object.type != 'operatortype': + object = self.resolve_name(object.value) + if object.literal: + self.push(object) + else: + if object.type == 'proceduretype': + self.call_procedure(object) + else: + object.function() + else: + self.push(object) + + def call_procedure(self, proc): + handle_object = self.handle_object + for item in proc.value: + handle_object(item) + + def resolve_name(self, name): + dictstack = self.dictstack + for i in range(len(dictstack)-1, -1, -1): + if name in dictstack[i]: + return dictstack[i][name] + raise PSError('name error: ' + str(name)) + + def do_token(self, token, + int=int, + float=float, + ps_name=ps_name, + ps_integer=ps_integer, + ps_real=ps_real): + try: + num = int(token) + except (ValueError, OverflowError): + try: + num = float(token) + except (ValueError, OverflowError): + if '#' in token: + hashpos = token.find('#') + try: + base = int(token[:hashpos]) + num = int(token[hashpos+1:], base) + except (ValueError, OverflowError): + return ps_name(token) + else: + return ps_integer(num) + else: + return ps_name(token) + else: + return ps_real(num) + else: + return ps_integer(num) + + def do_comment(self, token): + pass + + def do_literal(self, token): + return ps_literal(token[1:]) + + def do_string(self, token): + return ps_string(token[1:-1]) + + def do_hexstring(self, token): + hexStr = "".join(token[1:-1].split()) + if len(hexStr) % 2: + hexStr = hexStr + '0' + cleanstr = [] + for i in range(0, len(hexStr), 2): + cleanstr.append(chr(int(hexStr[i:i+2], 16))) + cleanstr = "".join(cleanstr) + return ps_string(cleanstr) + + def do_special(self, token): + if token == '{': + self.proclevel = self.proclevel + 1 + return self.procmark + elif token == '}': + proc = [] + while 1: + topobject = self.pop() + if topobject == self.procmark: + break + proc.append(topobject) + self.proclevel = self.proclevel - 1 + proc.reverse() + return ps_procedure(proc) + elif token == '[': + return self.mark + elif token == ']': + return ps_name(']') + else: + raise PSTokenError('huh?') + + def push(self, object): + self.stack.append(object) + + def pop(self, *types): + stack = self.stack + if not stack: + raise PSError('stack underflow') + object = stack[-1] + if types: + if object.type not in types: + raise PSError('typecheck, expected %s, found %s' % (repr(types), object.type)) + del stack[-1] + return object + + def do_makearray(self): + array = [] + while 1: + topobject = self.pop() + if topobject == self.mark: + break + array.append(topobject) + array.reverse() + self.push(ps_array(array)) + + def close(self): + """Remove circular references.""" + del self.stack + del self.dictstack + + +def unpack_item(item): + tp = type(item.value) + if tp == dict: + newitem = {} + for key, value in item.value.items(): + newitem[key] = unpack_item(value) + elif tp == list: + newitem = [None] * len(item.value) + for i in range(len(item.value)): + newitem[i] = unpack_item(item.value[i]) + if item.type == 'proceduretype': + newitem = tuple(newitem) + else: + newitem = item.value + return newitem + +def suckfont(data, encoding="ascii"): + m = re.search(br"/FontName\s+/([^ \t\n\r]+)\s+def", data) + if m: + fontName = m.group(1) + else: + fontName = None + interpreter = PSInterpreter(encoding=encoding) + interpreter.interpret(b"/Helvetica 4 dict dup /Encoding StandardEncoding put definefont pop") + interpreter.interpret(data) + fontdir = interpreter.dictstack[0]['FontDirectory'].value + if fontName in fontdir: + rawfont = fontdir[fontName] + else: + # fall back, in case fontName wasn't found + fontNames = list(fontdir.keys()) + if len(fontNames) > 1: + fontNames.remove("Helvetica") + fontNames.sort() + rawfont = fontdir[fontNames[0]] + interpreter.close() + return unpack_item(rawfont) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/psOperators.py b/.venv/lib/python3.9/site-packages/fontTools/misc/psOperators.py new file mode 100644 index 00000000..3b378f59 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/psOperators.py @@ -0,0 +1,537 @@ +_accessstrings = {0: "", 1: "readonly", 2: "executeonly", 3: "noaccess"} + + +class ps_object(object): + + literal = 1 + access = 0 + value = None + + def __init__(self, value): + self.value = value + self.type = self.__class__.__name__[3:] + "type" + + def __repr__(self): + return "<%s %s>" % (self.__class__.__name__[3:], repr(self.value)) + + +class ps_operator(ps_object): + + literal = 0 + + def __init__(self, name, function): + self.name = name + self.function = function + self.type = self.__class__.__name__[3:] + "type" + def __repr__(self): + return "" % self.name + +class ps_procedure(ps_object): + literal = 0 + def __repr__(self): + return "" + def __str__(self): + psstring = '{' + for i in range(len(self.value)): + if i: + psstring = psstring + ' ' + str(self.value[i]) + else: + psstring = psstring + str(self.value[i]) + return psstring + '}' + +class ps_name(ps_object): + literal = 0 + def __str__(self): + if self.literal: + return '/' + self.value + else: + return self.value + +class ps_literal(ps_object): + def __str__(self): + return '/' + self.value + +class ps_array(ps_object): + def __str__(self): + psstring = '[' + for i in range(len(self.value)): + item = self.value[i] + access = _accessstrings[item.access] + if access: + access = ' ' + access + if i: + psstring = psstring + ' ' + str(item) + access + else: + psstring = psstring + str(item) + access + return psstring + ']' + def __repr__(self): + return "" + +_type1_pre_eexec_order = [ + "FontInfo", + "FontName", + "Encoding", + "PaintType", + "FontType", + "FontMatrix", + "FontBBox", + "UniqueID", + "Metrics", + "StrokeWidth" + ] + +_type1_fontinfo_order = [ + "version", + "Notice", + "FullName", + "FamilyName", + "Weight", + "ItalicAngle", + "isFixedPitch", + "UnderlinePosition", + "UnderlineThickness" + ] + +_type1_post_eexec_order = [ + "Private", + "CharStrings", + "FID" + ] + +def _type1_item_repr(key, value): + psstring = "" + access = _accessstrings[value.access] + if access: + access = access + ' ' + if key == 'CharStrings': + psstring = psstring + "/%s %s def\n" % (key, _type1_CharString_repr(value.value)) + elif key == 'Encoding': + psstring = psstring + _type1_Encoding_repr(value, access) + else: + psstring = psstring + "/%s %s %sdef\n" % (str(key), str(value), access) + return psstring + +def _type1_Encoding_repr(encoding, access): + encoding = encoding.value + psstring = "/Encoding 256 array\n0 1 255 {1 index exch /.notdef put} for\n" + for i in range(256): + name = encoding[i].value + if name != '.notdef': + psstring = psstring + "dup %d /%s put\n" % (i, name) + return psstring + access + "def\n" + +def _type1_CharString_repr(charstrings): + items = sorted(charstrings.items()) + return 'xxx' + +class ps_font(ps_object): + def __str__(self): + psstring = "%d dict dup begin\n" % len(self.value) + for key in _type1_pre_eexec_order: + try: + value = self.value[key] + except KeyError: + pass + else: + psstring = psstring + _type1_item_repr(key, value) + items = sorted(self.value.items()) + for key, value in items: + if key not in _type1_pre_eexec_order + _type1_post_eexec_order: + psstring = psstring + _type1_item_repr(key, value) + psstring = psstring + "currentdict end\ncurrentfile eexec\ndup " + for key in _type1_post_eexec_order: + try: + value = self.value[key] + except KeyError: + pass + else: + psstring = psstring + _type1_item_repr(key, value) + return psstring + 'dup/FontName get exch definefont pop\nmark currentfile closefile\n' + \ + 8 * (64 * '0' + '\n') + 'cleartomark' + '\n' + def __repr__(self): + return '' + +class ps_file(ps_object): + pass + +class ps_dict(ps_object): + def __str__(self): + psstring = "%d dict dup begin\n" % len(self.value) + items = sorted(self.value.items()) + for key, value in items: + access = _accessstrings[value.access] + if access: + access = access + ' ' + psstring = psstring + "/%s %s %sdef\n" % (str(key), str(value), access) + return psstring + 'end ' + def __repr__(self): + return "" + +class ps_mark(ps_object): + def __init__(self): + self.value = 'mark' + self.type = self.__class__.__name__[3:] + "type" + +class ps_procmark(ps_object): + def __init__(self): + self.value = 'procmark' + self.type = self.__class__.__name__[3:] + "type" + +class ps_null(ps_object): + def __init__(self): + self.type = self.__class__.__name__[3:] + "type" + +class ps_boolean(ps_object): + def __str__(self): + if self.value: + return 'true' + else: + return 'false' + +class ps_string(ps_object): + def __str__(self): + return "(%s)" % repr(self.value)[1:-1] + +class ps_integer(ps_object): + def __str__(self): + return repr(self.value) + +class ps_real(ps_object): + def __str__(self): + return repr(self.value) + + +class PSOperators(object): + + def ps_def(self): + obj = self.pop() + name = self.pop() + self.dictstack[-1][name.value] = obj + + def ps_bind(self): + proc = self.pop('proceduretype') + self.proc_bind(proc) + self.push(proc) + + def proc_bind(self, proc): + for i in range(len(proc.value)): + item = proc.value[i] + if item.type == 'proceduretype': + self.proc_bind(item) + else: + if not item.literal: + try: + obj = self.resolve_name(item.value) + except: + pass + else: + if obj.type == 'operatortype': + proc.value[i] = obj + + def ps_exch(self): + if len(self.stack) < 2: + raise RuntimeError('stack underflow') + obj1 = self.pop() + obj2 = self.pop() + self.push(obj1) + self.push(obj2) + + def ps_dup(self): + if not self.stack: + raise RuntimeError('stack underflow') + self.push(self.stack[-1]) + + def ps_exec(self): + obj = self.pop() + if obj.type == 'proceduretype': + self.call_procedure(obj) + else: + self.handle_object(obj) + + def ps_count(self): + self.push(ps_integer(len(self.stack))) + + def ps_eq(self): + any1 = self.pop() + any2 = self.pop() + self.push(ps_boolean(any1.value == any2.value)) + + def ps_ne(self): + any1 = self.pop() + any2 = self.pop() + self.push(ps_boolean(any1.value != any2.value)) + + def ps_cvx(self): + obj = self.pop() + obj.literal = 0 + self.push(obj) + + def ps_matrix(self): + matrix = [ps_real(1.0), ps_integer(0), ps_integer(0), ps_real(1.0), ps_integer(0), ps_integer(0)] + self.push(ps_array(matrix)) + + def ps_string(self): + num = self.pop('integertype').value + self.push(ps_string('\0' * num)) + + def ps_type(self): + obj = self.pop() + self.push(ps_string(obj.type)) + + def ps_store(self): + value = self.pop() + key = self.pop() + name = key.value + for i in range(len(self.dictstack)-1, -1, -1): + if name in self.dictstack[i]: + self.dictstack[i][name] = value + break + self.dictstack[-1][name] = value + + def ps_where(self): + name = self.pop() + # XXX + self.push(ps_boolean(0)) + + def ps_systemdict(self): + self.push(ps_dict(self.dictstack[0])) + + def ps_userdict(self): + self.push(ps_dict(self.dictstack[1])) + + def ps_currentdict(self): + self.push(ps_dict(self.dictstack[-1])) + + def ps_currentfile(self): + self.push(ps_file(self.tokenizer)) + + def ps_eexec(self): + f = self.pop('filetype').value + f.starteexec() + + def ps_closefile(self): + f = self.pop('filetype').value + f.skipwhite() + f.stopeexec() + + def ps_cleartomark(self): + obj = self.pop() + while obj != self.mark: + obj = self.pop() + + def ps_readstring(self, + ps_boolean=ps_boolean, + len=len): + s = self.pop('stringtype') + oldstr = s.value + f = self.pop('filetype') + #pad = file.value.read(1) + # for StringIO, this is faster + f.value.pos = f.value.pos + 1 + newstr = f.value.read(len(oldstr)) + s.value = newstr + self.push(s) + self.push(ps_boolean(len(oldstr) == len(newstr))) + + def ps_known(self): + key = self.pop() + d = self.pop('dicttype', 'fonttype') + self.push(ps_boolean(key.value in d.value)) + + def ps_if(self): + proc = self.pop('proceduretype') + if self.pop('booleantype').value: + self.call_procedure(proc) + + def ps_ifelse(self): + proc2 = self.pop('proceduretype') + proc1 = self.pop('proceduretype') + if self.pop('booleantype').value: + self.call_procedure(proc1) + else: + self.call_procedure(proc2) + + def ps_readonly(self): + obj = self.pop() + if obj.access < 1: + obj.access = 1 + self.push(obj) + + def ps_executeonly(self): + obj = self.pop() + if obj.access < 2: + obj.access = 2 + self.push(obj) + + def ps_noaccess(self): + obj = self.pop() + if obj.access < 3: + obj.access = 3 + self.push(obj) + + def ps_not(self): + obj = self.pop('booleantype', 'integertype') + if obj.type == 'booleantype': + self.push(ps_boolean(not obj.value)) + else: + self.push(ps_integer(~obj.value)) + + def ps_print(self): + str = self.pop('stringtype') + print('PS output --->', str.value) + + def ps_anchorsearch(self): + seek = self.pop('stringtype') + s = self.pop('stringtype') + seeklen = len(seek.value) + if s.value[:seeklen] == seek.value: + self.push(ps_string(s.value[seeklen:])) + self.push(seek) + self.push(ps_boolean(1)) + else: + self.push(s) + self.push(ps_boolean(0)) + + def ps_array(self): + num = self.pop('integertype') + array = ps_array([None] * num.value) + self.push(array) + + def ps_astore(self): + array = self.pop('arraytype') + for i in range(len(array.value)-1, -1, -1): + array.value[i] = self.pop() + self.push(array) + + def ps_load(self): + name = self.pop() + self.push(self.resolve_name(name.value)) + + def ps_put(self): + obj1 = self.pop() + obj2 = self.pop() + obj3 = self.pop('arraytype', 'dicttype', 'stringtype', 'proceduretype') + tp = obj3.type + if tp == 'arraytype' or tp == 'proceduretype': + obj3.value[obj2.value] = obj1 + elif tp == 'dicttype': + obj3.value[obj2.value] = obj1 + elif tp == 'stringtype': + index = obj2.value + obj3.value = obj3.value[:index] + chr(obj1.value) + obj3.value[index+1:] + + def ps_get(self): + obj1 = self.pop() + if obj1.value == "Encoding": + pass + obj2 = self.pop('arraytype', 'dicttype', 'stringtype', 'proceduretype', 'fonttype') + tp = obj2.type + if tp in ('arraytype', 'proceduretype'): + self.push(obj2.value[obj1.value]) + elif tp in ('dicttype', 'fonttype'): + self.push(obj2.value[obj1.value]) + elif tp == 'stringtype': + self.push(ps_integer(ord(obj2.value[obj1.value]))) + else: + assert False, "shouldn't get here" + + def ps_getinterval(self): + obj1 = self.pop('integertype') + obj2 = self.pop('integertype') + obj3 = self.pop('arraytype', 'stringtype') + tp = obj3.type + if tp == 'arraytype': + self.push(ps_array(obj3.value[obj2.value:obj2.value + obj1.value])) + elif tp == 'stringtype': + self.push(ps_string(obj3.value[obj2.value:obj2.value + obj1.value])) + + def ps_putinterval(self): + obj1 = self.pop('arraytype', 'stringtype') + obj2 = self.pop('integertype') + obj3 = self.pop('arraytype', 'stringtype') + tp = obj3.type + if tp == 'arraytype': + obj3.value[obj2.value:obj2.value + len(obj1.value)] = obj1.value + elif tp == 'stringtype': + newstr = obj3.value[:obj2.value] + newstr = newstr + obj1.value + newstr = newstr + obj3.value[obj2.value + len(obj1.value):] + obj3.value = newstr + + def ps_cvn(self): + self.push(ps_name(self.pop('stringtype').value)) + + def ps_index(self): + n = self.pop('integertype').value + if n < 0: + raise RuntimeError('index may not be negative') + self.push(self.stack[-1-n]) + + def ps_for(self): + proc = self.pop('proceduretype') + limit = self.pop('integertype', 'realtype').value + increment = self.pop('integertype', 'realtype').value + i = self.pop('integertype', 'realtype').value + while 1: + if increment > 0: + if i > limit: + break + else: + if i < limit: + break + if type(i) == type(0.0): + self.push(ps_real(i)) + else: + self.push(ps_integer(i)) + self.call_procedure(proc) + i = i + increment + + def ps_forall(self): + proc = self.pop('proceduretype') + obj = self.pop('arraytype', 'stringtype', 'dicttype') + tp = obj.type + if tp == 'arraytype': + for item in obj.value: + self.push(item) + self.call_procedure(proc) + elif tp == 'stringtype': + for item in obj.value: + self.push(ps_integer(ord(item))) + self.call_procedure(proc) + elif tp == 'dicttype': + for key, value in obj.value.items(): + self.push(ps_name(key)) + self.push(value) + self.call_procedure(proc) + + def ps_definefont(self): + font = self.pop('dicttype') + name = self.pop() + font = ps_font(font.value) + self.dictstack[0]['FontDirectory'].value[name.value] = font + self.push(font) + + def ps_findfont(self): + name = self.pop() + font = self.dictstack[0]['FontDirectory'].value[name.value] + self.push(font) + + def ps_pop(self): + self.pop() + + def ps_dict(self): + self.pop('integertype') + self.push(ps_dict({})) + + def ps_begin(self): + self.dictstack.append(self.pop('dicttype').value) + + def ps_end(self): + if len(self.dictstack) > 2: + del self.dictstack[-1] + else: + raise RuntimeError('dictstack underflow') + +notdef = '.notdef' +from fontTools.encodings.StandardEncoding import StandardEncoding +ps_StandardEncoding = list(map(ps_name, StandardEncoding)) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/py23.py b/.venv/lib/python3.9/site-packages/fontTools/misc/py23.py new file mode 100644 index 00000000..29f634d6 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/py23.py @@ -0,0 +1,96 @@ +"""Python 2/3 compat layer leftovers.""" + +import decimal as _decimal +import math as _math +import warnings +from contextlib import redirect_stderr, redirect_stdout +from io import BytesIO +from io import StringIO as UnicodeIO +from types import SimpleNamespace + +from .textTools import Tag, bytechr, byteord, bytesjoin, strjoin, tobytes, tostr + +warnings.warn( + "The py23 module has been deprecated and will be removed in a future release. " + "Please update your code.", + DeprecationWarning, +) + +__all__ = [ + "basestring", + "bytechr", + "byteord", + "BytesIO", + "bytesjoin", + "open", + "Py23Error", + "range", + "RecursionError", + "round", + "SimpleNamespace", + "StringIO", + "strjoin", + "Tag", + "tobytes", + "tostr", + "tounicode", + "unichr", + "unicode", + "UnicodeIO", + "xrange", + "zip", +] + + +class Py23Error(NotImplementedError): + pass + + +RecursionError = RecursionError +StringIO = UnicodeIO + +basestring = str +isclose = _math.isclose +isfinite = _math.isfinite +open = open +range = range +round = round3 = round +unichr = chr +unicode = str +zip = zip + +tounicode = tostr + + +def xrange(*args, **kwargs): + raise Py23Error("'xrange' is not defined. Use 'range' instead.") + + +def round2(number, ndigits=None): + """ + Implementation of Python 2 built-in round() function. + Rounds a number to a given precision in decimal digits (default + 0 digits). The result is a floating point number. Values are rounded + to the closest multiple of 10 to the power minus ndigits; if two + multiples are equally close, rounding is done away from 0. + ndigits may be negative. + See Python 2 documentation: + https://docs.python.org/2/library/functions.html?highlight=round#round + """ + if ndigits is None: + ndigits = 0 + + if ndigits < 0: + exponent = 10 ** (-ndigits) + quotient, remainder = divmod(number, exponent) + if remainder >= exponent // 2 and number >= 0: + quotient += 1 + return float(quotient * exponent) + else: + exponent = _decimal.Decimal("10") ** (-ndigits) + + d = _decimal.Decimal.from_float(number).quantize( + exponent, rounding=_decimal.ROUND_HALF_UP + ) + + return float(d) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/roundTools.py b/.venv/lib/python3.9/site-packages/fontTools/misc/roundTools.py new file mode 100644 index 00000000..6f4aa634 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/roundTools.py @@ -0,0 +1,105 @@ +""" +Various round-to-integer helpers. +""" + +import math +import functools +import logging + +log = logging.getLogger(__name__) + +__all__ = [ + "noRound", + "otRound", + "maybeRound", + "roundFunc", +] + +def noRound(value): + return value + +def otRound(value): + """Round float value to nearest integer towards ``+Infinity``. + + The OpenType spec (in the section on `"normalization" of OpenType Font Variations `_) + defines the required method for converting floating point values to + fixed-point. In particular it specifies the following rounding strategy: + + for fractional values of 0.5 and higher, take the next higher integer; + for other fractional values, truncate. + + This function rounds the floating-point value according to this strategy + in preparation for conversion to fixed-point. + + Args: + value (float): The input floating-point value. + + Returns + float: The rounded value. + """ + # See this thread for how we ended up with this implementation: + # https://github.com/fonttools/fonttools/issues/1248#issuecomment-383198166 + return int(math.floor(value + 0.5)) + +def maybeRound(v, tolerance, round=otRound): + rounded = round(v) + return rounded if abs(rounded - v) <= tolerance else v + +def roundFunc(tolerance, round=otRound): + if tolerance < 0: + raise ValueError("Rounding tolerance must be positive") + + if tolerance == 0: + return noRound + + if tolerance >= .5: + return round + + return functools.partial(maybeRound, tolerance=tolerance, round=round) + + +def nearestMultipleShortestRepr(value: float, factor: float) -> str: + """Round to nearest multiple of factor and return shortest decimal representation. + + This chooses the float that is closer to a multiple of the given factor while + having the shortest decimal representation (the least number of fractional decimal + digits). + + For example, given the following: + + >>> nearestMultipleShortestRepr(-0.61883544921875, 1.0/(1<<14)) + '-0.61884' + + Useful when you need to serialize or print a fixed-point number (or multiples + thereof, such as F2Dot14 fractions of 180 degrees in COLRv1 PaintRotate) in + a human-readable form. + + Args: + value (value): The value to be rounded and serialized. + factor (float): The value which the result is a close multiple of. + + Returns: + str: A compact string representation of the value. + """ + if not value: + return "0.0" + + value = otRound(value / factor) * factor + eps = .5 * factor + lo = value - eps + hi = value + eps + # If the range of valid choices spans an integer, return the integer. + if int(lo) != int(hi): + return str(float(round(value))) + + fmt = "%.8f" + lo = fmt % lo + hi = fmt % hi + assert len(lo) == len(hi) and lo != hi + for i in range(len(lo)): + if lo[i] != hi[i]: + break + period = lo.find('.') + assert period < i + fmt = "%%.%df" % (i - period) + return fmt % value diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/sstruct.py b/.venv/lib/python3.9/site-packages/fontTools/misc/sstruct.py new file mode 100644 index 00000000..6db8b515 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/sstruct.py @@ -0,0 +1,216 @@ +"""sstruct.py -- SuperStruct + +Higher level layer on top of the struct module, enabling to +bind names to struct elements. The interface is similar to +struct, except the objects passed and returned are not tuples +(or argument lists), but dictionaries or instances. + +Just like struct, we use fmt strings to describe a data +structure, except we use one line per element. Lines are +separated by newlines or semi-colons. Each line contains +either one of the special struct characters ('@', '=', '<', +'>' or '!') or a 'name:formatchar' combo (eg. 'myFloat:f'). +Repetitions, like the struct module offers them are not useful +in this context, except for fixed length strings (eg. 'myInt:5h' +is not allowed but 'myString:5s' is). The 'x' fmt character +(pad byte) is treated as 'special', since it is by definition +anonymous. Extra whitespace is allowed everywhere. + +The sstruct module offers one feature that the "normal" struct +module doesn't: support for fixed point numbers. These are spelled +as "n.mF", where n is the number of bits before the point, and m +the number of bits after the point. Fixed point numbers get +converted to floats. + +pack(fmt, object): + 'object' is either a dictionary or an instance (or actually + anything that has a __dict__ attribute). If it is a dictionary, + its keys are used for names. If it is an instance, it's + attributes are used to grab struct elements from. Returns + a string containing the data. + +unpack(fmt, data, object=None) + If 'object' is omitted (or None), a new dictionary will be + returned. If 'object' is a dictionary, it will be used to add + struct elements to. If it is an instance (or in fact anything + that has a __dict__ attribute), an attribute will be added for + each struct element. In the latter two cases, 'object' itself + is returned. + +unpack2(fmt, data, object=None) + Convenience function. Same as unpack, except data may be longer + than needed. The returned value is a tuple: (object, leftoverdata). + +calcsize(fmt) + like struct.calcsize(), but uses our own fmt strings: + it returns the size of the data in bytes. +""" + +from fontTools.misc.fixedTools import fixedToFloat as fi2fl, floatToFixed as fl2fi +from fontTools.misc.textTools import tobytes, tostr +import struct +import re + +__version__ = "1.2" +__copyright__ = "Copyright 1998, Just van Rossum " + + +class Error(Exception): + pass + +def pack(fmt, obj): + formatstring, names, fixes = getformat(fmt, keep_pad_byte=True) + elements = [] + if not isinstance(obj, dict): + obj = obj.__dict__ + for name in names: + value = obj[name] + if name in fixes: + # fixed point conversion + value = fl2fi(value, fixes[name]) + elif isinstance(value, str): + value = tobytes(value) + elements.append(value) + data = struct.pack(*(formatstring,) + tuple(elements)) + return data + +def unpack(fmt, data, obj=None): + if obj is None: + obj = {} + data = tobytes(data) + formatstring, names, fixes = getformat(fmt) + if isinstance(obj, dict): + d = obj + else: + d = obj.__dict__ + elements = struct.unpack(formatstring, data) + for i in range(len(names)): + name = names[i] + value = elements[i] + if name in fixes: + # fixed point conversion + value = fi2fl(value, fixes[name]) + elif isinstance(value, bytes): + try: + value = tostr(value) + except UnicodeDecodeError: + pass + d[name] = value + return obj + +def unpack2(fmt, data, obj=None): + length = calcsize(fmt) + return unpack(fmt, data[:length], obj), data[length:] + +def calcsize(fmt): + formatstring, names, fixes = getformat(fmt) + return struct.calcsize(formatstring) + + +# matches "name:formatchar" (whitespace is allowed) +_elementRE = re.compile( + r"\s*" # whitespace + r"([A-Za-z_][A-Za-z_0-9]*)" # name (python identifier) + r"\s*:\s*" # whitespace : whitespace + r"([xcbB?hHiIlLqQfd]|" # formatchar... + r"[0-9]+[ps]|" # ...formatchar... + r"([0-9]+)\.([0-9]+)(F))" # ...formatchar + r"\s*" # whitespace + r"(#.*)?$" # [comment] + end of string + ) + +# matches the special struct fmt chars and 'x' (pad byte) +_extraRE = re.compile(r"\s*([x@=<>!])\s*(#.*)?$") + +# matches an "empty" string, possibly containing whitespace and/or a comment +_emptyRE = re.compile(r"\s*(#.*)?$") + +_fixedpointmappings = { + 8: "b", + 16: "h", + 32: "l"} + +_formatcache = {} + +def getformat(fmt, keep_pad_byte=False): + fmt = tostr(fmt, encoding="ascii") + try: + formatstring, names, fixes = _formatcache[fmt] + except KeyError: + lines = re.split("[\n;]", fmt) + formatstring = "" + names = [] + fixes = {} + for line in lines: + if _emptyRE.match(line): + continue + m = _extraRE.match(line) + if m: + formatchar = m.group(1) + if formatchar != 'x' and formatstring: + raise Error("a special fmt char must be first") + else: + m = _elementRE.match(line) + if not m: + raise Error("syntax error in fmt: '%s'" % line) + name = m.group(1) + formatchar = m.group(2) + if keep_pad_byte or formatchar != "x": + names.append(name) + if m.group(3): + # fixed point + before = int(m.group(3)) + after = int(m.group(4)) + bits = before + after + if bits not in [8, 16, 32]: + raise Error("fixed point must be 8, 16 or 32 bits long") + formatchar = _fixedpointmappings[bits] + assert m.group(5) == "F" + fixes[name] = after + formatstring = formatstring + formatchar + _formatcache[fmt] = formatstring, names, fixes + return formatstring, names, fixes + +def _test(): + fmt = """ + # comments are allowed + > # big endian (see documentation for struct) + # empty lines are allowed: + + ashort: h + along: l + abyte: b # a byte + achar: c + astr: 5s + afloat: f; adouble: d # multiple "statements" are allowed + afixed: 16.16F + abool: ? + apad: x + """ + + print('size:', calcsize(fmt)) + + class foo(object): + pass + + i = foo() + + i.ashort = 0x7fff + i.along = 0x7fffffff + i.abyte = 0x7f + i.achar = "a" + i.astr = "12345" + i.afloat = 0.5 + i.adouble = 0.5 + i.afixed = 1.5 + i.abool = True + + data = pack(fmt, i) + print('data:', repr(data)) + print(unpack(fmt, data)) + i2 = foo() + unpack(fmt, data, i2) + print(vars(i2)) + +if __name__ == "__main__": + _test() diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/symfont.py b/.venv/lib/python3.9/site-packages/fontTools/misc/symfont.py new file mode 100644 index 00000000..a1a87300 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/symfont.py @@ -0,0 +1,192 @@ +from fontTools.pens.basePen import BasePen +from functools import partial +from itertools import count +import sympy as sp +import sys + +n = 3 # Max Bezier degree; 3 for cubic, 2 for quadratic + +t, x, y = sp.symbols('t x y', real=True) +c = sp.symbols('c', real=False) # Complex representation instead of x/y + +X = tuple(sp.symbols('x:%d'%(n+1), real=True)) +Y = tuple(sp.symbols('y:%d'%(n+1), real=True)) +P = tuple(zip(*(sp.symbols('p:%d[%s]'%(n+1,w), real=True) for w in '01'))) +C = tuple(sp.symbols('c:%d'%(n+1), real=False)) + +# Cubic Bernstein basis functions +BinomialCoefficient = [(1, 0)] +for i in range(1, n+1): + last = BinomialCoefficient[-1] + this = tuple(last[j-1]+last[j] for j in range(len(last)))+(0,) + BinomialCoefficient.append(this) +BinomialCoefficient = tuple(tuple(item[:-1]) for item in BinomialCoefficient) +del last, this + +BernsteinPolynomial = tuple( + tuple(c * t**i * (1-t)**(n-i) for i,c in enumerate(coeffs)) + for n,coeffs in enumerate(BinomialCoefficient)) + +BezierCurve = tuple( + tuple(sum(P[i][j]*bernstein for i,bernstein in enumerate(bernsteins)) + for j in range(2)) + for n,bernsteins in enumerate(BernsteinPolynomial)) +BezierCurveC = tuple( + sum(C[i]*bernstein for i,bernstein in enumerate(bernsteins)) + for n,bernsteins in enumerate(BernsteinPolynomial)) + + +def green(f, curveXY): + f = -sp.integrate(sp.sympify(f), y) + f = f.subs({x:curveXY[0], y:curveXY[1]}) + f = sp.integrate(f * sp.diff(curveXY[0], t), (t, 0, 1)) + return f + + +class _BezierFuncsLazy(dict): + + def __init__(self, symfunc): + self._symfunc = symfunc + self._bezfuncs = {} + + def __missing__(self, i): + args = ['p%d'%d for d in range(i+1)] + f = green(self._symfunc, BezierCurve[i]) + f = sp.gcd_terms(f.collect(sum(P,()))) # Optimize + return sp.lambdify(args, f) + +class GreenPen(BasePen): + + _BezierFuncs = {} + + @classmethod + def _getGreenBezierFuncs(celf, func): + funcstr = str(func) + if not funcstr in celf._BezierFuncs: + celf._BezierFuncs[funcstr] = _BezierFuncsLazy(func) + return celf._BezierFuncs[funcstr] + + def __init__(self, func, glyphset=None): + BasePen.__init__(self, glyphset) + self._funcs = self._getGreenBezierFuncs(func) + self.value = 0 + + def _moveTo(self, p0): + self.__startPoint = p0 + + def _closePath(self): + p0 = self._getCurrentPoint() + if p0 != self.__startPoint: + self._lineTo(self.__startPoint) + + def _endPath(self): + p0 = self._getCurrentPoint() + if p0 != self.__startPoint: + # Green theorem is not defined on open contours. + raise NotImplementedError + + def _lineTo(self, p1): + p0 = self._getCurrentPoint() + self.value += self._funcs[1](p0, p1) + + def _qCurveToOne(self, p1, p2): + p0 = self._getCurrentPoint() + self.value += self._funcs[2](p0, p1, p2) + + def _curveToOne(self, p1, p2, p3): + p0 = self._getCurrentPoint() + self.value += self._funcs[3](p0, p1, p2, p3) + +# Sample pens. +# Do not use this in real code. +# Use fontTools.pens.momentsPen.MomentsPen instead. +AreaPen = partial(GreenPen, func=1) +MomentXPen = partial(GreenPen, func=x) +MomentYPen = partial(GreenPen, func=y) +MomentXXPen = partial(GreenPen, func=x*x) +MomentYYPen = partial(GreenPen, func=y*y) +MomentXYPen = partial(GreenPen, func=x*y) + + +def printGreenPen(penName, funcs, file=sys.stdout): + + print( +'''from fontTools.pens.basePen import BasePen + +class %s(BasePen): + + def __init__(self, glyphset=None): + BasePen.__init__(self, glyphset) +'''%penName, file=file) + for name,f in funcs: + print(' self.%s = 0' % name, file=file) + print(''' + def _moveTo(self, p0): + self.__startPoint = p0 + + def _closePath(self): + p0 = self._getCurrentPoint() + if p0 != self.__startPoint: + self._lineTo(self.__startPoint) + + def _endPath(self): + p0 = self._getCurrentPoint() + if p0 != self.__startPoint: + # Green theorem is not defined on open contours. + raise NotImplementedError +''', end='', file=file) + + for n in (1, 2, 3): + + if n == 1: + print(''' + def _lineTo(self, p1): + x0,y0 = self._getCurrentPoint() + x1,y1 = p1 +''', file=file) + elif n == 2: + print(''' + def _qCurveToOne(self, p1, p2): + x0,y0 = self._getCurrentPoint() + x1,y1 = p1 + x2,y2 = p2 +''', file=file) + elif n == 3: + print(''' + def _curveToOne(self, p1, p2, p3): + x0,y0 = self._getCurrentPoint() + x1,y1 = p1 + x2,y2 = p2 + x3,y3 = p3 +''', file=file) + subs = {P[i][j]: [X, Y][j][i] for i in range(n+1) for j in range(2)} + greens = [green(f, BezierCurve[n]) for name,f in funcs] + greens = [sp.gcd_terms(f.collect(sum(P,()))) for f in greens] # Optimize + greens = [f.subs(subs) for f in greens] # Convert to p to x/y + defs, exprs = sp.cse(greens, + optimizations='basic', + symbols=(sp.Symbol('r%d'%i) for i in count())) + for name,value in defs: + print(' %s = %s' % (name, value), file=file) + print(file=file) + for name,value in zip([f[0] for f in funcs], exprs): + print(' self.%s += %s' % (name, value), file=file) + + print(''' +if __name__ == '__main__': + from fontTools.misc.symfont import x, y, printGreenPen + printGreenPen('%s', ['''%penName, file=file) + for name,f in funcs: + print(" ('%s', %s)," % (name, str(f)), file=file) + print(' ])', file=file) + + +if __name__ == '__main__': + pen = AreaPen() + pen.moveTo((100,100)) + pen.lineTo((100,200)) + pen.lineTo((200,200)) + pen.curveTo((200,250),(300,300),(250,350)) + pen.lineTo((200,100)) + pen.closePath() + print(pen.value) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/testTools.py b/.venv/lib/python3.9/site-packages/fontTools/misc/testTools.py new file mode 100644 index 00000000..db316a82 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/testTools.py @@ -0,0 +1,198 @@ +"""Helpers for writing unit tests.""" + +from collections.abc import Iterable +from io import BytesIO +import os +import shutil +import sys +import tempfile +from unittest import TestCase as _TestCase +from fontTools.misc.textTools import tobytes +from fontTools.misc.xmlWriter import XMLWriter + + +def parseXML(xmlSnippet): + """Parses a snippet of XML. + + Input can be either a single string (unicode or UTF-8 bytes), or a + a sequence of strings. + + The result is in the same format that would be returned by + XMLReader, but the parser imposes no constraints on the root + element so it can be called on small snippets of TTX files. + """ + # To support snippets with multiple elements, we add a fake root. + reader = TestXMLReader_() + xml = b"" + if isinstance(xmlSnippet, bytes): + xml += xmlSnippet + elif isinstance(xmlSnippet, str): + xml += tobytes(xmlSnippet, 'utf-8') + elif isinstance(xmlSnippet, Iterable): + xml += b"".join(tobytes(s, 'utf-8') for s in xmlSnippet) + else: + raise TypeError("expected string or sequence of strings; found %r" + % type(xmlSnippet).__name__) + xml += b"" + reader.parser.Parse(xml, 0) + return reader.root[2] + + +def parseXmlInto(font, parseInto, xmlSnippet): + parsed_xml = [e for e in parseXML(xmlSnippet.strip()) if not isinstance(e, str)] + for name, attrs, content in parsed_xml: + parseInto.fromXML(name, attrs, content, font) + parseInto.populateDefaults() + return parseInto + + +class FakeFont: + def __init__(self, glyphs): + self.glyphOrder_ = glyphs + self.reverseGlyphOrderDict_ = {g: i for i, g in enumerate(glyphs)} + self.lazy = False + self.tables = {} + + def __getitem__(self, tag): + return self.tables[tag] + + def __setitem__(self, tag, table): + self.tables[tag] = table + + def get(self, tag, default=None): + return self.tables.get(tag, default) + + def getGlyphID(self, name): + return self.reverseGlyphOrderDict_[name] + + def getGlyphIDMany(self, lst): + return [self.getGlyphID(gid) for gid in lst] + + def getGlyphName(self, glyphID): + if glyphID < len(self.glyphOrder_): + return self.glyphOrder_[glyphID] + else: + return "glyph%.5d" % glyphID + def getGlyphNameMany(self, lst): + return [self.getGlyphName(gid) for gid in lst] + + def getGlyphOrder(self): + return self.glyphOrder_ + + def getReverseGlyphMap(self): + return self.reverseGlyphOrderDict_ + + def getGlyphNames(self): + return sorted(self.getGlyphOrder()) + + +class TestXMLReader_(object): + def __init__(self): + from xml.parsers.expat import ParserCreate + self.parser = ParserCreate() + self.parser.StartElementHandler = self.startElement_ + self.parser.EndElementHandler = self.endElement_ + self.parser.CharacterDataHandler = self.addCharacterData_ + self.root = None + self.stack = [] + + def startElement_(self, name, attrs): + element = (name, attrs, []) + if self.stack: + self.stack[-1][2].append(element) + else: + self.root = element + self.stack.append(element) + + def endElement_(self, name): + self.stack.pop() + + def addCharacterData_(self, data): + self.stack[-1][2].append(data) + + +def makeXMLWriter(newlinestr='\n'): + # don't write OS-specific new lines + writer = XMLWriter(BytesIO(), newlinestr=newlinestr) + # erase XML declaration + writer.file.seek(0) + writer.file.truncate() + return writer + + +def getXML(func, ttFont=None): + """Call the passed toXML function and return the written content as a + list of lines (unicode strings). + Result is stripped of XML declaration and OS-specific newline characters. + """ + writer = makeXMLWriter() + func(writer, ttFont) + xml = writer.file.getvalue().decode("utf-8") + # toXML methods must always end with a writer.newline() + assert xml.endswith("\n") + return xml.splitlines() + + +class MockFont(object): + """A font-like object that automatically adds any looked up glyphname + to its glyphOrder.""" + + def __init__(self): + self._glyphOrder = ['.notdef'] + + class AllocatingDict(dict): + def __missing__(reverseDict, key): + self._glyphOrder.append(key) + gid = len(reverseDict) + reverseDict[key] = gid + return gid + self._reverseGlyphOrder = AllocatingDict({'.notdef': 0}) + self.lazy = False + + def getGlyphID(self, glyph): + gid = self._reverseGlyphOrder[glyph] + return gid + + def getReverseGlyphMap(self): + return self._reverseGlyphOrder + + def getGlyphName(self, gid): + return self._glyphOrder[gid] + + def getGlyphOrder(self): + return self._glyphOrder + + +class TestCase(_TestCase): + + def __init__(self, methodName): + _TestCase.__init__(self, methodName) + # Python 3 renamed assertRaisesRegexp to assertRaisesRegex, + # and fires deprecation warnings if a program uses the old name. + if not hasattr(self, "assertRaisesRegex"): + self.assertRaisesRegex = self.assertRaisesRegexp + + +class DataFilesHandler(TestCase): + + def setUp(self): + self.tempdir = None + self.num_tempfiles = 0 + + def tearDown(self): + if self.tempdir: + shutil.rmtree(self.tempdir) + + def getpath(self, testfile): + folder = os.path.dirname(sys.modules[self.__module__].__file__) + return os.path.join(folder, "data", testfile) + + def temp_dir(self): + if not self.tempdir: + self.tempdir = tempfile.mkdtemp() + + def temp_font(self, font_path, file_name): + self.temp_dir() + temppath = os.path.join(self.tempdir, file_name) + shutil.copy2(font_path, temppath) + return temppath diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/textTools.py b/.venv/lib/python3.9/site-packages/fontTools/misc/textTools.py new file mode 100644 index 00000000..bf75bcbd --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/textTools.py @@ -0,0 +1,154 @@ +"""fontTools.misc.textTools.py -- miscellaneous routines.""" + + +import ast +import string + + +# alias kept for backward compatibility +safeEval = ast.literal_eval + + +class Tag(str): + @staticmethod + def transcode(blob): + if isinstance(blob, bytes): + blob = blob.decode("latin-1") + return blob + + def __new__(self, content): + return str.__new__(self, self.transcode(content)) + + def __ne__(self, other): + return not self.__eq__(other) + + def __eq__(self, other): + return str.__eq__(self, self.transcode(other)) + + def __hash__(self): + return str.__hash__(self) + + def tobytes(self): + return self.encode("latin-1") + + +def readHex(content): + """Convert a list of hex strings to binary data.""" + return deHexStr(strjoin(chunk for chunk in content if isinstance(chunk, str))) + + +def deHexStr(hexdata): + """Convert a hex string to binary data.""" + hexdata = strjoin(hexdata.split()) + if len(hexdata) % 2: + hexdata = hexdata + "0" + data = [] + for i in range(0, len(hexdata), 2): + data.append(bytechr(int(hexdata[i:i+2], 16))) + return bytesjoin(data) + + +def hexStr(data): + """Convert binary data to a hex string.""" + h = string.hexdigits + r = '' + for c in data: + i = byteord(c) + r = r + h[(i >> 4) & 0xF] + h[i & 0xF] + return r + + +def num2binary(l, bits=32): + items = [] + binary = "" + for i in range(bits): + if l & 0x1: + binary = "1" + binary + else: + binary = "0" + binary + l = l >> 1 + if not ((i+1) % 8): + items.append(binary) + binary = "" + if binary: + items.append(binary) + items.reverse() + assert l in (0, -1), "number doesn't fit in number of bits" + return ' '.join(items) + + +def binary2num(bin): + bin = strjoin(bin.split()) + l = 0 + for digit in bin: + l = l << 1 + if digit != "0": + l = l | 0x1 + return l + + +def caselessSort(alist): + """Return a sorted copy of a list. If there are only strings + in the list, it will not consider case. + """ + + try: + return sorted(alist, key=lambda a: (a.lower(), a)) + except TypeError: + return sorted(alist) + + +def pad(data, size): + r""" Pad byte string 'data' with null bytes until its length is a + multiple of 'size'. + + >>> len(pad(b'abcd', 4)) + 4 + >>> len(pad(b'abcde', 2)) + 6 + >>> len(pad(b'abcde', 4)) + 8 + >>> pad(b'abcdef', 4) == b'abcdef\x00\x00' + True + """ + data = tobytes(data) + if size > 1: + remainder = len(data) % size + if remainder: + data += b"\0" * (size - remainder) + return data + + +def tostr(s, encoding="ascii", errors="strict"): + if not isinstance(s, str): + return s.decode(encoding, errors) + else: + return s + + +def tobytes(s, encoding="ascii", errors="strict"): + if isinstance(s, str): + return s.encode(encoding, errors) + else: + return bytes(s) + + +def bytechr(n): + return bytes([n]) + + +def byteord(c): + return c if isinstance(c, int) else ord(c) + + +def strjoin(iterable, joiner=""): + return tostr(joiner).join(iterable) + + +def bytesjoin(iterable, joiner=b""): + return tobytes(joiner).join(tobytes(item) for item in iterable) + + +if __name__ == "__main__": + import doctest, sys + sys.exit(doctest.testmod().failed) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/timeTools.py b/.venv/lib/python3.9/site-packages/fontTools/misc/timeTools.py new file mode 100644 index 00000000..f4b84f6e --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/timeTools.py @@ -0,0 +1,68 @@ +"""fontTools.misc.timeTools.py -- tools for working with OpenType timestamps. +""" + +import os +import time +from datetime import datetime, timezone +import calendar + + +epoch_diff = calendar.timegm((1904, 1, 1, 0, 0, 0, 0, 0, 0)) + +DAYNAMES = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] +MONTHNAMES = [None, "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + + +def asctime(t=None): + """ + Convert a tuple or struct_time representing a time as returned by gmtime() + or localtime() to a 24-character string of the following form: + + >>> asctime(time.gmtime(0)) + 'Thu Jan 1 00:00:00 1970' + + If t is not provided, the current time as returned by localtime() is used. + Locale information is not used by asctime(). + + This is meant to normalise the output of the built-in time.asctime() across + different platforms and Python versions. + In Python 3.x, the day of the month is right-justified, whereas on Windows + Python 2.7 it is padded with zeros. + + See https://github.com/fonttools/fonttools/issues/455 + """ + if t is None: + t = time.localtime() + s = "%s %s %2s %s" % ( + DAYNAMES[t.tm_wday], MONTHNAMES[t.tm_mon], t.tm_mday, + time.strftime("%H:%M:%S %Y", t)) + return s + + +def timestampToString(value): + return asctime(time.gmtime(max(0, value + epoch_diff))) + +def timestampFromString(value): + wkday, mnth = value[:7].split() + t = datetime.strptime(value[7:], ' %d %H:%M:%S %Y') + t = t.replace(month=MONTHNAMES.index(mnth), tzinfo=timezone.utc) + wkday_idx = DAYNAMES.index(wkday) + assert t.weekday() == wkday_idx, '"' + value + '" has inconsistent weekday' + return int(t.timestamp()) - epoch_diff + +def timestampNow(): + # https://reproducible-builds.org/specs/source-date-epoch/ + source_date_epoch = os.environ.get("SOURCE_DATE_EPOCH") + if source_date_epoch is not None: + return int(source_date_epoch) - epoch_diff + return int(time.time() - epoch_diff) + +def timestampSinceEpoch(value): + return int(value - epoch_diff) + + +if __name__ == "__main__": + import sys + import doctest + sys.exit(doctest.testmod().failed) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/transform.py b/.venv/lib/python3.9/site-packages/fontTools/misc/transform.py new file mode 100644 index 00000000..22ad776a --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/transform.py @@ -0,0 +1,378 @@ +"""Affine 2D transformation matrix class. + +The Transform class implements various transformation matrix operations, +both on the matrix itself, as well as on 2D coordinates. + +Transform instances are effectively immutable: all methods that operate on the +transformation itself always return a new instance. This has as the +interesting side effect that Transform instances are hashable, ie. they can be +used as dictionary keys. + +This module exports the following symbols: + + Transform -- this is the main class + Identity -- Transform instance set to the identity transformation + Offset -- Convenience function that returns a translating transformation + Scale -- Convenience function that returns a scaling transformation + +Examples: + + >>> t = Transform(2, 0, 0, 3, 0, 0) + >>> t.transformPoint((100, 100)) + (200, 300) + >>> t = Scale(2, 3) + >>> t.transformPoint((100, 100)) + (200, 300) + >>> t.transformPoint((0, 0)) + (0, 0) + >>> t = Offset(2, 3) + >>> t.transformPoint((100, 100)) + (102, 103) + >>> t.transformPoint((0, 0)) + (2, 3) + >>> t2 = t.scale(0.5) + >>> t2.transformPoint((100, 100)) + (52.0, 53.0) + >>> import math + >>> t3 = t2.rotate(math.pi / 2) + >>> t3.transformPoint((0, 0)) + (2.0, 3.0) + >>> t3.transformPoint((100, 100)) + (-48.0, 53.0) + >>> t = Identity.scale(0.5).translate(100, 200).skew(0.1, 0.2) + >>> t.transformPoints([(0, 0), (1, 1), (100, 100)]) + [(50.0, 100.0), (50.550167336042726, 100.60135501775433), (105.01673360427253, 160.13550177543362)] + >>> +""" + +from typing import NamedTuple + + +__all__ = ["Transform", "Identity", "Offset", "Scale"] + + +_EPSILON = 1e-15 +_ONE_EPSILON = 1 - _EPSILON +_MINUS_ONE_EPSILON = -1 + _EPSILON + + +def _normSinCos(v): + if abs(v) < _EPSILON: + v = 0 + elif v > _ONE_EPSILON: + v = 1 + elif v < _MINUS_ONE_EPSILON: + v = -1 + return v + + +class Transform(NamedTuple): + + """2x2 transformation matrix plus offset, a.k.a. Affine transform. + Transform instances are immutable: all transforming methods, eg. + rotate(), return a new Transform instance. + + Examples: + >>> t = Transform() + >>> t + + >>> t.scale(2) + + >>> t.scale(2.5, 5.5) + + >>> + >>> t.scale(2, 3).transformPoint((100, 100)) + (200, 300) + + Transform's constructor takes six arguments, all of which are + optional, and can be used as keyword arguments: + >>> Transform(12) + + >>> Transform(dx=12) + + >>> Transform(yx=12) + + + Transform instances also behave like sequences of length 6: + >>> len(Identity) + 6 + >>> list(Identity) + [1, 0, 0, 1, 0, 0] + >>> tuple(Identity) + (1, 0, 0, 1, 0, 0) + + Transform instances are comparable: + >>> t1 = Identity.scale(2, 3).translate(4, 6) + >>> t2 = Identity.translate(8, 18).scale(2, 3) + >>> t1 == t2 + 1 + + But beware of floating point rounding errors: + >>> t1 = Identity.scale(0.2, 0.3).translate(0.4, 0.6) + >>> t2 = Identity.translate(0.08, 0.18).scale(0.2, 0.3) + >>> t1 + + >>> t2 + + >>> t1 == t2 + 0 + + Transform instances are hashable, meaning you can use them as + keys in dictionaries: + >>> d = {Scale(12, 13): None} + >>> d + {: None} + + But again, beware of floating point rounding errors: + >>> t1 = Identity.scale(0.2, 0.3).translate(0.4, 0.6) + >>> t2 = Identity.translate(0.08, 0.18).scale(0.2, 0.3) + >>> t1 + + >>> t2 + + >>> d = {t1: None} + >>> d + {: None} + >>> d[t2] + Traceback (most recent call last): + File "", line 1, in ? + KeyError: + """ + + xx: float = 1 + xy: float = 0 + yx: float = 0 + yy: float = 1 + dx: float = 0 + dy: float = 0 + + def transformPoint(self, p): + """Transform a point. + + Example: + >>> t = Transform() + >>> t = t.scale(2.5, 5.5) + >>> t.transformPoint((100, 100)) + (250.0, 550.0) + """ + (x, y) = p + xx, xy, yx, yy, dx, dy = self + return (xx*x + yx*y + dx, xy*x + yy*y + dy) + + def transformPoints(self, points): + """Transform a list of points. + + Example: + >>> t = Scale(2, 3) + >>> t.transformPoints([(0, 0), (0, 100), (100, 100), (100, 0)]) + [(0, 0), (0, 300), (200, 300), (200, 0)] + >>> + """ + xx, xy, yx, yy, dx, dy = self + return [(xx*x + yx*y + dx, xy*x + yy*y + dy) for x, y in points] + + def transformVector(self, v): + """Transform an (dx, dy) vector, treating translation as zero. + + Example: + >>> t = Transform(2, 0, 0, 2, 10, 20) + >>> t.transformVector((3, -4)) + (6, -8) + >>> + """ + (dx, dy) = v + xx, xy, yx, yy = self[:4] + return (xx*dx + yx*dy, xy*dx + yy*dy) + + def transformVectors(self, vectors): + """Transform a list of (dx, dy) vector, treating translation as zero. + + Example: + >>> t = Transform(2, 0, 0, 2, 10, 20) + >>> t.transformVectors([(3, -4), (5, -6)]) + [(6, -8), (10, -12)] + >>> + """ + xx, xy, yx, yy = self[:4] + return [(xx*dx + yx*dy, xy*dx + yy*dy) for dx, dy in vectors] + + def translate(self, x=0, y=0): + """Return a new transformation, translated (offset) by x, y. + + Example: + >>> t = Transform() + >>> t.translate(20, 30) + + >>> + """ + return self.transform((1, 0, 0, 1, x, y)) + + def scale(self, x=1, y=None): + """Return a new transformation, scaled by x, y. The 'y' argument + may be None, which implies to use the x value for y as well. + + Example: + >>> t = Transform() + >>> t.scale(5) + + >>> t.scale(5, 6) + + >>> + """ + if y is None: + y = x + return self.transform((x, 0, 0, y, 0, 0)) + + def rotate(self, angle): + """Return a new transformation, rotated by 'angle' (radians). + + Example: + >>> import math + >>> t = Transform() + >>> t.rotate(math.pi / 2) + + >>> + """ + import math + c = _normSinCos(math.cos(angle)) + s = _normSinCos(math.sin(angle)) + return self.transform((c, s, -s, c, 0, 0)) + + def skew(self, x=0, y=0): + """Return a new transformation, skewed by x and y. + + Example: + >>> import math + >>> t = Transform() + >>> t.skew(math.pi / 4) + + >>> + """ + import math + return self.transform((1, math.tan(y), math.tan(x), 1, 0, 0)) + + def transform(self, other): + """Return a new transformation, transformed by another + transformation. + + Example: + >>> t = Transform(2, 0, 0, 3, 1, 6) + >>> t.transform((4, 3, 2, 1, 5, 6)) + + >>> + """ + xx1, xy1, yx1, yy1, dx1, dy1 = other + xx2, xy2, yx2, yy2, dx2, dy2 = self + return self.__class__( + xx1*xx2 + xy1*yx2, + xx1*xy2 + xy1*yy2, + yx1*xx2 + yy1*yx2, + yx1*xy2 + yy1*yy2, + xx2*dx1 + yx2*dy1 + dx2, + xy2*dx1 + yy2*dy1 + dy2) + + def reverseTransform(self, other): + """Return a new transformation, which is the other transformation + transformed by self. self.reverseTransform(other) is equivalent to + other.transform(self). + + Example: + >>> t = Transform(2, 0, 0, 3, 1, 6) + >>> t.reverseTransform((4, 3, 2, 1, 5, 6)) + + >>> Transform(4, 3, 2, 1, 5, 6).transform((2, 0, 0, 3, 1, 6)) + + >>> + """ + xx1, xy1, yx1, yy1, dx1, dy1 = self + xx2, xy2, yx2, yy2, dx2, dy2 = other + return self.__class__( + xx1*xx2 + xy1*yx2, + xx1*xy2 + xy1*yy2, + yx1*xx2 + yy1*yx2, + yx1*xy2 + yy1*yy2, + xx2*dx1 + yx2*dy1 + dx2, + xy2*dx1 + yy2*dy1 + dy2) + + def inverse(self): + """Return the inverse transformation. + + Example: + >>> t = Identity.translate(2, 3).scale(4, 5) + >>> t.transformPoint((10, 20)) + (42, 103) + >>> it = t.inverse() + >>> it.transformPoint((42, 103)) + (10.0, 20.0) + >>> + """ + if self == Identity: + return self + xx, xy, yx, yy, dx, dy = self + det = xx*yy - yx*xy + xx, xy, yx, yy = yy/det, -xy/det, -yx/det, xx/det + dx, dy = -xx*dx - yx*dy, -xy*dx - yy*dy + return self.__class__(xx, xy, yx, yy, dx, dy) + + def toPS(self): + """Return a PostScript representation: + >>> t = Identity.scale(2, 3).translate(4, 5) + >>> t.toPS() + '[2 0 0 3 8 15]' + >>> + """ + return "[%s %s %s %s %s %s]" % self + + def __bool__(self): + """Returns True if transform is not identity, False otherwise. + >>> bool(Identity) + False + >>> bool(Transform()) + False + >>> bool(Scale(1.)) + False + >>> bool(Scale(2)) + True + >>> bool(Offset()) + False + >>> bool(Offset(0)) + False + >>> bool(Offset(2)) + True + """ + return self != Identity + + def __repr__(self): + return "<%s [%g %g %g %g %g %g]>" % ((self.__class__.__name__,) + self) + + +Identity = Transform() + +def Offset(x=0, y=0): + """Return the identity transformation offset by x, y. + + Example: + >>> Offset(2, 3) + + >>> + """ + return Transform(1, 0, 0, 1, x, y) + +def Scale(x, y=None): + """Return the identity transformation scaled by x, y. The 'y' argument + may be None, which implies to use the x value for y as well. + + Example: + >>> Scale(2, 3) + + >>> + """ + if y is None: + y = x + return Transform(x, 0, 0, y, 0, 0) + + +if __name__ == "__main__": + import sys + import doctest + sys.exit(doctest.testmod().failed) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/vector.py b/.venv/lib/python3.9/site-packages/fontTools/misc/vector.py new file mode 100644 index 00000000..81c14841 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/vector.py @@ -0,0 +1,143 @@ +from numbers import Number +import math +import operator +import warnings + + +__all__ = ["Vector"] + + +class Vector(tuple): + + """A math-like vector. + + Represents an n-dimensional numeric vector. ``Vector`` objects support + vector addition and subtraction, scalar multiplication and division, + negation, rounding, and comparison tests. + """ + + __slots__ = () + + def __new__(cls, values, keep=False): + if keep is not False: + warnings.warn( + "the 'keep' argument has been deprecated", + DeprecationWarning, + ) + if type(values) == Vector: + # No need to create a new object + return values + return super().__new__(cls, values) + + def __repr__(self): + return f"{self.__class__.__name__}({super().__repr__()})" + + def _vectorOp(self, other, op): + if isinstance(other, Vector): + assert len(self) == len(other) + return self.__class__(op(a, b) for a, b in zip(self, other)) + if isinstance(other, Number): + return self.__class__(op(v, other) for v in self) + raise NotImplementedError() + + def _scalarOp(self, other, op): + if isinstance(other, Number): + return self.__class__(op(v, other) for v in self) + raise NotImplementedError() + + def _unaryOp(self, op): + return self.__class__(op(v) for v in self) + + def __add__(self, other): + return self._vectorOp(other, operator.add) + + __radd__ = __add__ + + def __sub__(self, other): + return self._vectorOp(other, operator.sub) + + def __rsub__(self, other): + return self._vectorOp(other, _operator_rsub) + + def __mul__(self, other): + return self._scalarOp(other, operator.mul) + + __rmul__ = __mul__ + + def __truediv__(self, other): + return self._scalarOp(other, operator.truediv) + + def __rtruediv__(self, other): + return self._scalarOp(other, _operator_rtruediv) + + def __pos__(self): + return self._unaryOp(operator.pos) + + def __neg__(self): + return self._unaryOp(operator.neg) + + def __round__(self, *, round=round): + return self._unaryOp(round) + + def __eq__(self, other): + if isinstance(other, list): + # bw compat Vector([1, 2, 3]) == [1, 2, 3] + other = tuple(other) + return super().__eq__(other) + + def __ne__(self, other): + return not self.__eq__(other) + + def __bool__(self): + return any(self) + + __nonzero__ = __bool__ + + def __abs__(self): + return math.sqrt(sum(x * x for x in self)) + + def length(self): + """Return the length of the vector. Equivalent to abs(vector).""" + return abs(self) + + def normalized(self): + """Return the normalized vector of the vector.""" + return self / abs(self) + + def dot(self, other): + """Performs vector dot product, returning the sum of + ``a[0] * b[0], a[1] * b[1], ...``""" + assert len(self) == len(other) + return sum(a * b for a, b in zip(self, other)) + + # Deprecated methods/properties + + def toInt(self): + warnings.warn( + "the 'toInt' method has been deprecated, use round(vector) instead", + DeprecationWarning, + ) + return self.__round__() + + @property + def values(self): + warnings.warn( + "the 'values' attribute has been deprecated, use " + "the vector object itself instead", + DeprecationWarning, + ) + return list(self) + + @values.setter + def values(self, values): + raise AttributeError( + "can't set attribute, the 'values' attribute has been deprecated", + ) + + +def _operator_rsub(a, b): + return operator.sub(b, a) + + +def _operator_rtruediv(a, b): + return operator.truediv(b, a) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/xmlReader.py b/.venv/lib/python3.9/site-packages/fontTools/misc/xmlReader.py new file mode 100644 index 00000000..6ec50de4 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/xmlReader.py @@ -0,0 +1,171 @@ +from fontTools import ttLib +from fontTools.misc.textTools import safeEval +from fontTools.ttLib.tables.DefaultTable import DefaultTable +import sys +import os +import logging + + +log = logging.getLogger(__name__) + +class TTXParseError(Exception): pass + +BUFSIZE = 0x4000 + + +class XMLReader(object): + + def __init__(self, fileOrPath, ttFont, progress=None, quiet=None, contentOnly=False): + if fileOrPath == '-': + fileOrPath = sys.stdin + if not hasattr(fileOrPath, "read"): + self.file = open(fileOrPath, "rb") + self._closeStream = True + else: + # assume readable file object + self.file = fileOrPath + self._closeStream = False + self.ttFont = ttFont + self.progress = progress + if quiet is not None: + from fontTools.misc.loggingTools import deprecateArgument + deprecateArgument("quiet", "configure logging instead") + self.quiet = quiet + self.root = None + self.contentStack = [] + self.contentOnly = contentOnly + self.stackSize = 0 + + def read(self, rootless=False): + if rootless: + self.stackSize += 1 + if self.progress: + self.file.seek(0, 2) + fileSize = self.file.tell() + self.progress.set(0, fileSize // 100 or 1) + self.file.seek(0) + self._parseFile(self.file) + if self._closeStream: + self.close() + if rootless: + self.stackSize -= 1 + + def close(self): + self.file.close() + + def _parseFile(self, file): + from xml.parsers.expat import ParserCreate + parser = ParserCreate() + parser.StartElementHandler = self._startElementHandler + parser.EndElementHandler = self._endElementHandler + parser.CharacterDataHandler = self._characterDataHandler + + pos = 0 + while True: + chunk = file.read(BUFSIZE) + if not chunk: + parser.Parse(chunk, 1) + break + pos = pos + len(chunk) + if self.progress: + self.progress.set(pos // 100) + parser.Parse(chunk, 0) + + def _startElementHandler(self, name, attrs): + if self.stackSize == 1 and self.contentOnly: + # We already know the table we're parsing, skip + # parsing the table tag and continue to + # stack '2' which begins parsing content + self.contentStack.append([]) + self.stackSize = 2 + return + stackSize = self.stackSize + self.stackSize = stackSize + 1 + subFile = attrs.get("src") + if subFile is not None: + if hasattr(self.file, 'name'): + # if file has a name, get its parent directory + dirname = os.path.dirname(self.file.name) + else: + # else fall back to using the current working directory + dirname = os.getcwd() + subFile = os.path.join(dirname, subFile) + if not stackSize: + if name != "ttFont": + raise TTXParseError("illegal root tag: %s" % name) + if self.ttFont.reader is None and not self.ttFont.tables: + sfntVersion = attrs.get("sfntVersion") + if sfntVersion is not None: + if len(sfntVersion) != 4: + sfntVersion = safeEval('"' + sfntVersion + '"') + self.ttFont.sfntVersion = sfntVersion + self.contentStack.append([]) + elif stackSize == 1: + if subFile is not None: + subReader = XMLReader(subFile, self.ttFont, self.progress) + subReader.read() + self.contentStack.append([]) + return + tag = ttLib.xmlToTag(name) + msg = "Parsing '%s' table..." % tag + if self.progress: + self.progress.setLabel(msg) + log.info(msg) + if tag == "GlyphOrder": + tableClass = ttLib.GlyphOrder + elif "ERROR" in attrs or ('raw' in attrs and safeEval(attrs['raw'])): + tableClass = DefaultTable + else: + tableClass = ttLib.getTableClass(tag) + if tableClass is None: + tableClass = DefaultTable + if tag == 'loca' and tag in self.ttFont: + # Special-case the 'loca' table as we need the + # original if the 'glyf' table isn't recompiled. + self.currentTable = self.ttFont[tag] + else: + self.currentTable = tableClass(tag) + self.ttFont[tag] = self.currentTable + self.contentStack.append([]) + elif stackSize == 2 and subFile is not None: + subReader = XMLReader(subFile, self.ttFont, self.progress, contentOnly=True) + subReader.read() + self.contentStack.append([]) + self.root = subReader.root + elif stackSize == 2: + self.contentStack.append([]) + self.root = (name, attrs, self.contentStack[-1]) + else: + l = [] + self.contentStack[-1].append((name, attrs, l)) + self.contentStack.append(l) + + def _characterDataHandler(self, data): + if self.stackSize > 1: + self.contentStack[-1].append(data) + + def _endElementHandler(self, name): + self.stackSize = self.stackSize - 1 + del self.contentStack[-1] + if not self.contentOnly: + if self.stackSize == 1: + self.root = None + elif self.stackSize == 2: + name, attrs, content = self.root + self.currentTable.fromXML(name, attrs, content, self.ttFont) + self.root = None + + +class ProgressPrinter(object): + + def __init__(self, title, maxval=100): + print(title) + + def set(self, val, maxval=None): + pass + + def increment(self, val=1): + pass + + def setLabel(self, text): + print(text) diff --git a/.venv/lib/python3.9/site-packages/fontTools/misc/xmlWriter.py b/.venv/lib/python3.9/site-packages/fontTools/misc/xmlWriter.py new file mode 100644 index 00000000..9e30fa33 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/misc/xmlWriter.py @@ -0,0 +1,194 @@ +"""xmlWriter.py -- Simple XML authoring class""" + +from fontTools.misc.textTools import byteord, strjoin, tobytes, tostr +import sys +import os +import string + +INDENT = " " + + +class XMLWriter(object): + + def __init__(self, fileOrPath, indentwhite=INDENT, idlefunc=None, encoding="utf_8", + newlinestr="\n"): + if encoding.lower().replace('-','').replace('_','') != 'utf8': + raise Exception('Only UTF-8 encoding is supported.') + if fileOrPath == '-': + fileOrPath = sys.stdout + if not hasattr(fileOrPath, "write"): + self.filename = fileOrPath + self.file = open(fileOrPath, "wb") + self._closeStream = True + else: + self.filename = None + # assume writable file object + self.file = fileOrPath + self._closeStream = False + + # Figure out if writer expects bytes or unicodes + try: + # The bytes check should be first. See: + # https://github.com/fonttools/fonttools/pull/233 + self.file.write(b'') + self.totype = tobytes + except TypeError: + # This better not fail. + self.file.write('') + self.totype = tostr + self.indentwhite = self.totype(indentwhite) + if newlinestr is None: + self.newlinestr = self.totype(os.linesep) + else: + self.newlinestr = self.totype(newlinestr) + self.indentlevel = 0 + self.stack = [] + self.needindent = 1 + self.idlefunc = idlefunc + self.idlecounter = 0 + self._writeraw('') + self.newline() + + def __enter__(self): + return self + + def __exit__(self, exception_type, exception_value, traceback): + self.close() + + def close(self): + if self._closeStream: + self.file.close() + + def write(self, string, indent=True): + """Writes text.""" + self._writeraw(escape(string), indent=indent) + + def writecdata(self, string): + """Writes text in a CDATA section.""" + self._writeraw("") + + def write8bit(self, data, strip=False): + """Writes a bytes() sequence into the XML, escaping + non-ASCII bytes. When this is read in xmlReader, + the original bytes can be recovered by encoding to + 'latin-1'.""" + self._writeraw(escape8bit(data), strip=strip) + + def write_noindent(self, string): + """Writes text without indentation.""" + self._writeraw(escape(string), indent=False) + + def _writeraw(self, data, indent=True, strip=False): + """Writes bytes, possibly indented.""" + if indent and self.needindent: + self.file.write(self.indentlevel * self.indentwhite) + self.needindent = 0 + s = self.totype(data, encoding="utf_8") + if (strip): + s = s.strip() + self.file.write(s) + + def newline(self): + self.file.write(self.newlinestr) + self.needindent = 1 + idlecounter = self.idlecounter + if not idlecounter % 100 and self.idlefunc is not None: + self.idlefunc() + self.idlecounter = idlecounter + 1 + + def comment(self, data): + data = escape(data) + lines = data.split("\n") + self._writeraw("") + + def simpletag(self, _TAG_, *args, **kwargs): + attrdata = self.stringifyattrs(*args, **kwargs) + data = "<%s%s/>" % (_TAG_, attrdata) + self._writeraw(data) + + def begintag(self, _TAG_, *args, **kwargs): + attrdata = self.stringifyattrs(*args, **kwargs) + data = "<%s%s>" % (_TAG_, attrdata) + self._writeraw(data) + self.stack.append(_TAG_) + self.indent() + + def endtag(self, _TAG_): + assert self.stack and self.stack[-1] == _TAG_, "nonmatching endtag" + del self.stack[-1] + self.dedent() + data = "" % _TAG_ + self._writeraw(data) + + def dumphex(self, data): + linelength = 16 + hexlinelength = linelength * 2 + chunksize = 8 + for i in range(0, len(data), linelength): + hexline = hexStr(data[i:i+linelength]) + line = "" + white = "" + for j in range(0, hexlinelength, chunksize): + line = line + white + hexline[j:j+chunksize] + white = " " + self._writeraw(line) + self.newline() + + def indent(self): + self.indentlevel = self.indentlevel + 1 + + def dedent(self): + assert self.indentlevel > 0 + self.indentlevel = self.indentlevel - 1 + + def stringifyattrs(self, *args, **kwargs): + if kwargs: + assert not args + attributes = sorted(kwargs.items()) + elif args: + assert len(args) == 1 + attributes = args[0] + else: + return "" + data = "" + for attr, value in attributes: + if not isinstance(value, (bytes, str)): + value = str(value) + data = data + ' %s="%s"' % (attr, escapeattr(value)) + return data + + +def escape(data): + data = tostr(data, 'utf_8') + data = data.replace("&", "&") + data = data.replace("<", "<") + data = data.replace(">", ">") + data = data.replace("\r", " ") + return data + +def escapeattr(data): + data = escape(data) + data = data.replace('"', """) + return data + +def escape8bit(data): + """Input is Unicode string.""" + def escapechar(c): + n = ord(c) + if 32 <= n <= 127 and c not in "<&>": + return c + else: + return "&#" + repr(n) + ";" + return strjoin(map(escapechar, data.decode('latin-1'))) + +def hexStr(s): + h = string.hexdigits + r = '' + for c in s: + i = byteord(c) + r = r + h[(i >> 4) & 0xF] + h[i & 0xF] + return r diff --git a/.venv/lib/python3.9/site-packages/fontTools/mtiLib/__init__.py b/.venv/lib/python3.9/site-packages/fontTools/mtiLib/__init__.py new file mode 100644 index 00000000..667a216d --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/mtiLib/__init__.py @@ -0,0 +1,1230 @@ +#!/usr/bin/python + +# FontDame-to-FontTools for OpenType Layout tables +# +# Source language spec is available at: +# http://monotype.github.io/OpenType_Table_Source/otl_source.html +# https://github.com/Monotype/OpenType_Table_Source/ + +from fontTools import ttLib +from fontTools.ttLib.tables._c_m_a_p import cmap_classes +from fontTools.ttLib.tables import otTables as ot +from fontTools.ttLib.tables.otBase import ValueRecord, valueRecordFormatDict +from fontTools.otlLib import builder as otl +from contextlib import contextmanager +from operator import setitem +import logging + +class MtiLibError(Exception): pass +class ReferenceNotFoundError(MtiLibError): pass +class FeatureNotFoundError(ReferenceNotFoundError): pass +class LookupNotFoundError(ReferenceNotFoundError): pass + + +log = logging.getLogger("fontTools.mtiLib") + + +def makeGlyph(s): + if s[:2] in ['U ', 'u ']: + return ttLib.TTFont._makeGlyphName(int(s[2:], 16)) + elif s[:2] == '# ': + return "glyph%.5d" % int(s[2:]) + assert s.find(' ') < 0, "Space found in glyph name: %s" % s + assert s, "Glyph name is empty" + return s + +def makeGlyphs(l): + return [makeGlyph(g) for g in l] + +def mapLookup(sym, mapping): + # Lookups are addressed by name. So resolved them using a map if available. + # Fallback to parsing as lookup index if a map isn't provided. + if mapping is not None: + try: + idx = mapping[sym] + except KeyError: + raise LookupNotFoundError(sym) + else: + idx = int(sym) + return idx + +def mapFeature(sym, mapping): + # Features are referenced by index according the spec. So, if symbol is an + # integer, use it directly. Otherwise look up in the map if provided. + try: + idx = int(sym) + except ValueError: + try: + idx = mapping[sym] + except KeyError: + raise FeatureNotFoundError(sym) + return idx + +def setReference(mapper, mapping, sym, setter, collection, key): + try: + mapped = mapper(sym, mapping) + except ReferenceNotFoundError as e: + try: + if mapping is not None: + mapping.addDeferredMapping(lambda ref: setter(collection, key, ref), sym, e) + return + except AttributeError: + pass + raise + setter(collection, key, mapped) + +class DeferredMapping(dict): + + def __init__(self): + self._deferredMappings = [] + + def addDeferredMapping(self, setter, sym, e): + log.debug("Adding deferred mapping for symbol '%s' %s", sym, type(e).__name__) + self._deferredMappings.append((setter,sym, e)) + + def applyDeferredMappings(self): + for setter,sym,e in self._deferredMappings: + log.debug("Applying deferred mapping for symbol '%s' %s", sym, type(e).__name__) + try: + mapped = self[sym] + except KeyError: + raise e + setter(mapped) + log.debug("Set to %s", mapped) + self._deferredMappings = [] + + +def parseScriptList(lines, featureMap=None): + self = ot.ScriptList() + records = [] + with lines.between('script table'): + for line in lines: + while len(line) < 4: + line.append('') + scriptTag, langSysTag, defaultFeature, features = line + log.debug("Adding script %s language-system %s", scriptTag, langSysTag) + + langSys = ot.LangSys() + langSys.LookupOrder = None + if defaultFeature: + setReference(mapFeature, featureMap, defaultFeature, setattr, langSys, 'ReqFeatureIndex') + else: + langSys.ReqFeatureIndex = 0xFFFF + syms = stripSplitComma(features) + langSys.FeatureIndex = theList = [3] * len(syms) + for i,sym in enumerate(syms): + setReference(mapFeature, featureMap, sym, setitem, theList, i) + langSys.FeatureCount = len(langSys.FeatureIndex) + + script = [s for s in records if s.ScriptTag == scriptTag] + if script: + script = script[0].Script + else: + scriptRec = ot.ScriptRecord() + scriptRec.ScriptTag = scriptTag + scriptRec.Script = ot.Script() + records.append(scriptRec) + script = scriptRec.Script + script.DefaultLangSys = None + script.LangSysRecord = [] + script.LangSysCount = 0 + + if langSysTag == 'default': + script.DefaultLangSys = langSys + else: + langSysRec = ot.LangSysRecord() + langSysRec.LangSysTag = langSysTag + ' '*(4 - len(langSysTag)) + langSysRec.LangSys = langSys + script.LangSysRecord.append(langSysRec) + script.LangSysCount = len(script.LangSysRecord) + + for script in records: + script.Script.LangSysRecord = sorted(script.Script.LangSysRecord, key=lambda rec: rec.LangSysTag) + self.ScriptRecord = sorted(records, key=lambda rec: rec.ScriptTag) + self.ScriptCount = len(self.ScriptRecord) + return self + +def parseFeatureList(lines, lookupMap=None, featureMap=None): + self = ot.FeatureList() + self.FeatureRecord = [] + with lines.between('feature table'): + for line in lines: + name, featureTag, lookups = line + if featureMap is not None: + assert name not in featureMap, "Duplicate feature name: %s" % name + featureMap[name] = len(self.FeatureRecord) + # If feature name is integer, make sure it matches its index. + try: + assert int(name) == len(self.FeatureRecord), "%d %d" % (name, len(self.FeatureRecord)) + except ValueError: + pass + featureRec = ot.FeatureRecord() + featureRec.FeatureTag = featureTag + featureRec.Feature = ot.Feature() + self.FeatureRecord.append(featureRec) + feature = featureRec.Feature + feature.FeatureParams = None + syms = stripSplitComma(lookups) + feature.LookupListIndex = theList = [None] * len(syms) + for i,sym in enumerate(syms): + setReference(mapLookup, lookupMap, sym, setitem, theList, i) + feature.LookupCount = len(feature.LookupListIndex) + + self.FeatureCount = len(self.FeatureRecord) + return self + +def parseLookupFlags(lines): + flags = 0 + filterset = None + allFlags = [ + 'righttoleft', + 'ignorebaseglyphs', + 'ignoreligatures', + 'ignoremarks', + 'markattachmenttype', + 'markfiltertype', + ] + while lines.peeks()[0].lower() in allFlags: + line = next(lines) + flag = { + 'righttoleft': 0x0001, + 'ignorebaseglyphs': 0x0002, + 'ignoreligatures': 0x0004, + 'ignoremarks': 0x0008, + }.get(line[0].lower()) + if flag: + assert line[1].lower() in ['yes', 'no'], line[1] + if line[1].lower() == 'yes': + flags |= flag + continue + if line[0].lower() == 'markattachmenttype': + flags |= int(line[1]) << 8 + continue + if line[0].lower() == 'markfiltertype': + flags |= 0x10 + filterset = int(line[1]) + return flags, filterset + +def parseSingleSubst(lines, font, _lookupMap=None): + mapping = {} + for line in lines: + assert len(line) == 2, line + line = makeGlyphs(line) + mapping[line[0]] = line[1] + return otl.buildSingleSubstSubtable(mapping) + +def parseMultiple(lines, font, _lookupMap=None): + mapping = {} + for line in lines: + line = makeGlyphs(line) + mapping[line[0]] = line[1:] + return otl.buildMultipleSubstSubtable(mapping) + +def parseAlternate(lines, font, _lookupMap=None): + mapping = {} + for line in lines: + line = makeGlyphs(line) + mapping[line[0]] = line[1:] + return otl.buildAlternateSubstSubtable(mapping) + +def parseLigature(lines, font, _lookupMap=None): + mapping = {} + for line in lines: + assert len(line) >= 2, line + line = makeGlyphs(line) + mapping[tuple(line[1:])] = line[0] + return otl.buildLigatureSubstSubtable(mapping) + +def parseSinglePos(lines, font, _lookupMap=None): + values = {} + for line in lines: + assert len(line) == 3, line + w = line[0].title().replace(' ', '') + assert w in valueRecordFormatDict + g = makeGlyph(line[1]) + v = int(line[2]) + if g not in values: + values[g] = ValueRecord() + assert not hasattr(values[g], w), (g, w) + setattr(values[g], w, v) + return otl.buildSinglePosSubtable(values, font.getReverseGlyphMap()) + +def parsePair(lines, font, _lookupMap=None): + self = ot.PairPos() + self.ValueFormat1 = self.ValueFormat2 = 0 + typ = lines.peeks()[0].split()[0].lower() + if typ in ('left', 'right'): + self.Format = 1 + values = {} + for line in lines: + assert len(line) == 4, line + side = line[0].split()[0].lower() + assert side in ('left', 'right'), side + what = line[0][len(side):].title().replace(' ', '') + mask = valueRecordFormatDict[what][0] + glyph1, glyph2 = makeGlyphs(line[1:3]) + value = int(line[3]) + if not glyph1 in values: values[glyph1] = {} + if not glyph2 in values[glyph1]: values[glyph1][glyph2] = (ValueRecord(),ValueRecord()) + rec2 = values[glyph1][glyph2] + if side == 'left': + self.ValueFormat1 |= mask + vr = rec2[0] + else: + self.ValueFormat2 |= mask + vr = rec2[1] + assert not hasattr(vr, what), (vr, what) + setattr(vr, what, value) + self.Coverage = makeCoverage(set(values.keys()), font) + self.PairSet = [] + for glyph1 in self.Coverage.glyphs: + values1 = values[glyph1] + pairset = ot.PairSet() + records = pairset.PairValueRecord = [] + for glyph2 in sorted(values1.keys(), key=font.getGlyphID): + values2 = values1[glyph2] + pair = ot.PairValueRecord() + pair.SecondGlyph = glyph2 + pair.Value1 = values2[0] + pair.Value2 = values2[1] if self.ValueFormat2 else None + records.append(pair) + pairset.PairValueCount = len(pairset.PairValueRecord) + self.PairSet.append(pairset) + self.PairSetCount = len(self.PairSet) + elif typ.endswith('class'): + self.Format = 2 + classDefs = [None, None] + while lines.peeks()[0].endswith("class definition begin"): + typ = lines.peek()[0][:-len("class definition begin")].lower() + idx,klass = { + 'first': (0,ot.ClassDef1), + 'second': (1,ot.ClassDef2), + }[typ] + assert classDefs[idx] is None + classDefs[idx] = parseClassDef(lines, font, klass=klass) + self.ClassDef1, self.ClassDef2 = classDefs + self.Class1Count, self.Class2Count = (1+max(c.classDefs.values()) for c in classDefs) + self.Class1Record = [ot.Class1Record() for i in range(self.Class1Count)] + for rec1 in self.Class1Record: + rec1.Class2Record = [ot.Class2Record() for j in range(self.Class2Count)] + for rec2 in rec1.Class2Record: + rec2.Value1 = ValueRecord() + rec2.Value2 = ValueRecord() + for line in lines: + assert len(line) == 4, line + side = line[0].split()[0].lower() + assert side in ('left', 'right'), side + what = line[0][len(side):].title().replace(' ', '') + mask = valueRecordFormatDict[what][0] + class1, class2, value = (int(x) for x in line[1:4]) + rec2 = self.Class1Record[class1].Class2Record[class2] + if side == 'left': + self.ValueFormat1 |= mask + vr = rec2.Value1 + else: + self.ValueFormat2 |= mask + vr = rec2.Value2 + assert not hasattr(vr, what), (vr, what) + setattr(vr, what, value) + for rec1 in self.Class1Record: + for rec2 in rec1.Class2Record: + rec2.Value1 = ValueRecord(self.ValueFormat1, rec2.Value1) + rec2.Value2 = ValueRecord(self.ValueFormat2, rec2.Value2) \ + if self.ValueFormat2 else None + + self.Coverage = makeCoverage(set(self.ClassDef1.classDefs.keys()), font) + else: + assert 0, typ + return self + +def parseKernset(lines, font, _lookupMap=None): + typ = lines.peeks()[0].split()[0].lower() + if typ in ('left', 'right'): + with lines.until(("firstclass definition begin", "secondclass definition begin")): + return parsePair(lines, font) + return parsePair(lines, font) + +def makeAnchor(data, klass=ot.Anchor): + assert len(data) <= 2 + anchor = klass() + anchor.Format = 1 + anchor.XCoordinate,anchor.YCoordinate = intSplitComma(data[0]) + if len(data) > 1 and data[1] != '': + anchor.Format = 2 + anchor.AnchorPoint = int(data[1]) + return anchor + +def parseCursive(lines, font, _lookupMap=None): + records = {} + for line in lines: + assert len(line) in [3,4], line + idx,klass = { + 'entry': (0,ot.EntryAnchor), + 'exit': (1,ot.ExitAnchor), + }[line[0]] + glyph = makeGlyph(line[1]) + if glyph not in records: + records[glyph] = [None,None] + assert records[glyph][idx] is None, (glyph, idx) + records[glyph][idx] = makeAnchor(line[2:], klass) + return otl.buildCursivePosSubtable(records, font.getReverseGlyphMap()) + +def makeMarkRecords(data, coverage, c): + records = [] + for glyph in coverage.glyphs: + klass, anchor = data[glyph] + record = c.MarkRecordClass() + record.Class = klass + setattr(record, c.MarkAnchor, anchor) + records.append(record) + return records + +def makeBaseRecords(data, coverage, c, classCount): + records = [] + idx = {} + for glyph in coverage.glyphs: + idx[glyph] = len(records) + record = c.BaseRecordClass() + anchors = [None] * classCount + setattr(record, c.BaseAnchor, anchors) + records.append(record) + for (glyph,klass),anchor in data.items(): + record = records[idx[glyph]] + anchors = getattr(record, c.BaseAnchor) + assert anchors[klass] is None, (glyph, klass) + anchors[klass] = anchor + return records + +def makeLigatureRecords(data, coverage, c, classCount): + records = [None] * len(coverage.glyphs) + idx = {g:i for i,g in enumerate(coverage.glyphs)} + + for (glyph,klass,compIdx,compCount),anchor in data.items(): + record = records[idx[glyph]] + if record is None: + record = records[idx[glyph]] = ot.LigatureAttach() + record.ComponentCount = compCount + record.ComponentRecord = [ot.ComponentRecord() for i in range(compCount)] + for compRec in record.ComponentRecord: + compRec.LigatureAnchor = [None] * classCount + assert record.ComponentCount == compCount, (glyph, record.ComponentCount, compCount) + + anchors = record.ComponentRecord[compIdx - 1].LigatureAnchor + assert anchors[klass] is None, (glyph, compIdx, klass) + anchors[klass] = anchor + return records + +def parseMarkToSomething(lines, font, c): + self = c.Type() + self.Format = 1 + markData = {} + baseData = {} + Data = { + 'mark': (markData, c.MarkAnchorClass), + 'base': (baseData, c.BaseAnchorClass), + 'ligature': (baseData, c.BaseAnchorClass), + } + maxKlass = 0 + for line in lines: + typ = line[0] + assert typ in ('mark', 'base', 'ligature') + glyph = makeGlyph(line[1]) + data, anchorClass = Data[typ] + extraItems = 2 if typ == 'ligature' else 0 + extras = tuple(int(i) for i in line[2:2+extraItems]) + klass = int(line[2+extraItems]) + anchor = makeAnchor(line[3+extraItems:], anchorClass) + if typ == 'mark': + key,value = glyph,(klass,anchor) + else: + key,value = ((glyph,klass)+extras),anchor + assert key not in data, key + data[key] = value + maxKlass = max(maxKlass, klass) + + # Mark + markCoverage = makeCoverage(set(markData.keys()), font, c.MarkCoverageClass) + markArray = c.MarkArrayClass() + markRecords = makeMarkRecords(markData, markCoverage, c) + setattr(markArray, c.MarkRecord, markRecords) + setattr(markArray, c.MarkCount, len(markRecords)) + setattr(self, c.MarkCoverage, markCoverage) + setattr(self, c.MarkArray, markArray) + self.ClassCount = maxKlass + 1 + + # Base + self.classCount = 0 if not baseData else 1+max(k[1] for k,v in baseData.items()) + baseCoverage = makeCoverage(set([k[0] for k in baseData.keys()]), font, c.BaseCoverageClass) + baseArray = c.BaseArrayClass() + if c.Base == 'Ligature': + baseRecords = makeLigatureRecords(baseData, baseCoverage, c, self.classCount) + else: + baseRecords = makeBaseRecords(baseData, baseCoverage, c, self.classCount) + setattr(baseArray, c.BaseRecord, baseRecords) + setattr(baseArray, c.BaseCount, len(baseRecords)) + setattr(self, c.BaseCoverage, baseCoverage) + setattr(self, c.BaseArray, baseArray) + + return self + +class MarkHelper(object): + def __init__(self): + for Which in ('Mark', 'Base'): + for What in ('Coverage', 'Array', 'Count', 'Record', 'Anchor'): + key = Which + What + if Which == 'Mark' and What in ('Count', 'Record', 'Anchor'): + value = key + else: + value = getattr(self, Which) + What + if value == 'LigatureRecord': + value = 'LigatureAttach' + setattr(self, key, value) + if What != 'Count': + klass = getattr(ot, value) + setattr(self, key+'Class', klass) + +class MarkToBaseHelper(MarkHelper): + Mark = 'Mark' + Base = 'Base' + Type = ot.MarkBasePos +class MarkToMarkHelper(MarkHelper): + Mark = 'Mark1' + Base = 'Mark2' + Type = ot.MarkMarkPos +class MarkToLigatureHelper(MarkHelper): + Mark = 'Mark' + Base = 'Ligature' + Type = ot.MarkLigPos + +def parseMarkToBase(lines, font, _lookupMap=None): + return parseMarkToSomething(lines, font, MarkToBaseHelper()) +def parseMarkToMark(lines, font, _lookupMap=None): + return parseMarkToSomething(lines, font, MarkToMarkHelper()) +def parseMarkToLigature(lines, font, _lookupMap=None): + return parseMarkToSomething(lines, font, MarkToLigatureHelper()) + +def stripSplitComma(line): + return [s.strip() for s in line.split(',')] if line else [] + +def intSplitComma(line): + return [int(i) for i in line.split(',')] if line else [] + +# Copied from fontTools.subset +class ContextHelper(object): + def __init__(self, klassName, Format): + if klassName.endswith('Subst'): + Typ = 'Sub' + Type = 'Subst' + else: + Typ = 'Pos' + Type = 'Pos' + if klassName.startswith('Chain'): + Chain = 'Chain' + InputIdx = 1 + DataLen = 3 + else: + Chain = '' + InputIdx = 0 + DataLen = 1 + ChainTyp = Chain+Typ + + self.Typ = Typ + self.Type = Type + self.Chain = Chain + self.ChainTyp = ChainTyp + self.InputIdx = InputIdx + self.DataLen = DataLen + + self.LookupRecord = Type+'LookupRecord' + + if Format == 1: + Coverage = lambda r: r.Coverage + ChainCoverage = lambda r: r.Coverage + ContextData = lambda r:(None,) + ChainContextData = lambda r:(None, None, None) + SetContextData = None + SetChainContextData = None + RuleData = lambda r:(r.Input,) + ChainRuleData = lambda r:(r.Backtrack, r.Input, r.LookAhead) + def SetRuleData(r, d): + (r.Input,) = d + (r.GlyphCount,) = (len(x)+1 for x in d) + def ChainSetRuleData(r, d): + (r.Backtrack, r.Input, r.LookAhead) = d + (r.BacktrackGlyphCount,r.InputGlyphCount,r.LookAheadGlyphCount,) = (len(d[0]),len(d[1])+1,len(d[2])) + elif Format == 2: + Coverage = lambda r: r.Coverage + ChainCoverage = lambda r: r.Coverage + ContextData = lambda r:(r.ClassDef,) + ChainContextData = lambda r:(r.BacktrackClassDef, + r.InputClassDef, + r.LookAheadClassDef) + def SetContextData(r, d): + (r.ClassDef,) = d + def SetChainContextData(r, d): + (r.BacktrackClassDef, + r.InputClassDef, + r.LookAheadClassDef) = d + RuleData = lambda r:(r.Class,) + ChainRuleData = lambda r:(r.Backtrack, r.Input, r.LookAhead) + def SetRuleData(r, d): + (r.Class,) = d + (r.GlyphCount,) = (len(x)+1 for x in d) + def ChainSetRuleData(r, d): + (r.Backtrack, r.Input, r.LookAhead) = d + (r.BacktrackGlyphCount,r.InputGlyphCount,r.LookAheadGlyphCount,) = (len(d[0]),len(d[1])+1,len(d[2])) + elif Format == 3: + Coverage = lambda r: r.Coverage[0] + ChainCoverage = lambda r: r.InputCoverage[0] + ContextData = None + ChainContextData = None + SetContextData = None + SetChainContextData = None + RuleData = lambda r: r.Coverage + ChainRuleData = lambda r:(r.BacktrackCoverage + + r.InputCoverage + + r.LookAheadCoverage) + def SetRuleData(r, d): + (r.Coverage,) = d + (r.GlyphCount,) = (len(x) for x in d) + def ChainSetRuleData(r, d): + (r.BacktrackCoverage, r.InputCoverage, r.LookAheadCoverage) = d + (r.BacktrackGlyphCount,r.InputGlyphCount,r.LookAheadGlyphCount,) = (len(x) for x in d) + else: + assert 0, "unknown format: %s" % Format + + if Chain: + self.Coverage = ChainCoverage + self.ContextData = ChainContextData + self.SetContextData = SetChainContextData + self.RuleData = ChainRuleData + self.SetRuleData = ChainSetRuleData + else: + self.Coverage = Coverage + self.ContextData = ContextData + self.SetContextData = SetContextData + self.RuleData = RuleData + self.SetRuleData = SetRuleData + + if Format == 1: + self.Rule = ChainTyp+'Rule' + self.RuleCount = ChainTyp+'RuleCount' + self.RuleSet = ChainTyp+'RuleSet' + self.RuleSetCount = ChainTyp+'RuleSetCount' + self.Intersect = lambda glyphs, c, r: [r] if r in glyphs else [] + elif Format == 2: + self.Rule = ChainTyp+'ClassRule' + self.RuleCount = ChainTyp+'ClassRuleCount' + self.RuleSet = ChainTyp+'ClassSet' + self.RuleSetCount = ChainTyp+'ClassSetCount' + self.Intersect = lambda glyphs, c, r: (c.intersect_class(glyphs, r) if c + else (set(glyphs) if r == 0 else set())) + + self.ClassDef = 'InputClassDef' if Chain else 'ClassDef' + self.ClassDefIndex = 1 if Chain else 0 + self.Input = 'Input' if Chain else 'Class' + +def parseLookupRecords(items, klassName, lookupMap=None): + klass = getattr(ot, klassName) + lst = [] + for item in items: + rec = klass() + item = stripSplitComma(item) + assert len(item) == 2, item + idx = int(item[0]) + assert idx > 0, idx + rec.SequenceIndex = idx - 1 + setReference(mapLookup, lookupMap, item[1], setattr, rec, 'LookupListIndex') + lst.append(rec) + return lst + +def makeClassDef(classDefs, font, klass=ot.Coverage): + if not classDefs: return None + self = klass() + self.classDefs = dict(classDefs) + return self + +def parseClassDef(lines, font, klass=ot.ClassDef): + classDefs = {} + with lines.between('class definition'): + for line in lines: + glyph = makeGlyph(line[0]) + assert glyph not in classDefs, glyph + classDefs[glyph] = int(line[1]) + return makeClassDef(classDefs, font, klass) + +def makeCoverage(glyphs, font, klass=ot.Coverage): + if not glyphs: return None + if isinstance(glyphs, set): + glyphs = sorted(glyphs) + coverage = klass() + coverage.glyphs = sorted(set(glyphs), key=font.getGlyphID) + return coverage + +def parseCoverage(lines, font, klass=ot.Coverage): + glyphs = [] + with lines.between('coverage definition'): + for line in lines: + glyphs.append(makeGlyph(line[0])) + return makeCoverage(glyphs, font, klass) + +def bucketizeRules(self, c, rules, bucketKeys): + buckets = {} + for seq,recs in rules: + buckets.setdefault(seq[c.InputIdx][0], []).append((tuple(s[1 if i==c.InputIdx else 0:] for i,s in enumerate(seq)), recs)) + + rulesets = [] + for firstGlyph in bucketKeys: + if firstGlyph not in buckets: + rulesets.append(None) + continue + thisRules = [] + for seq,recs in buckets[firstGlyph]: + rule = getattr(ot, c.Rule)() + c.SetRuleData(rule, seq) + setattr(rule, c.Type+'Count', len(recs)) + setattr(rule, c.LookupRecord, recs) + thisRules.append(rule) + + ruleset = getattr(ot, c.RuleSet)() + setattr(ruleset, c.Rule, thisRules) + setattr(ruleset, c.RuleCount, len(thisRules)) + rulesets.append(ruleset) + + setattr(self, c.RuleSet, rulesets) + setattr(self, c.RuleSetCount, len(rulesets)) + +def parseContext(lines, font, Type, lookupMap=None): + self = getattr(ot, Type)() + typ = lines.peeks()[0].split()[0].lower() + if typ == 'glyph': + self.Format = 1 + log.debug("Parsing %s format %s", Type, self.Format) + c = ContextHelper(Type, self.Format) + rules = [] + for line in lines: + assert line[0].lower() == 'glyph', line[0] + while len(line) < 1+c.DataLen: line.append('') + seq = tuple(makeGlyphs(stripSplitComma(i)) for i in line[1:1+c.DataLen]) + recs = parseLookupRecords(line[1+c.DataLen:], c.LookupRecord, lookupMap) + rules.append((seq, recs)) + + firstGlyphs = set(seq[c.InputIdx][0] for seq,recs in rules) + self.Coverage = makeCoverage(firstGlyphs, font) + bucketizeRules(self, c, rules, self.Coverage.glyphs) + elif typ.endswith('class'): + self.Format = 2 + log.debug("Parsing %s format %s", Type, self.Format) + c = ContextHelper(Type, self.Format) + classDefs = [None] * c.DataLen + while lines.peeks()[0].endswith("class definition begin"): + typ = lines.peek()[0][:-len("class definition begin")].lower() + idx,klass = { + 1: { + '': (0,ot.ClassDef), + }, + 3: { + 'backtrack': (0,ot.BacktrackClassDef), + '': (1,ot.InputClassDef), + 'lookahead': (2,ot.LookAheadClassDef), + }, + }[c.DataLen][typ] + assert classDefs[idx] is None, idx + classDefs[idx] = parseClassDef(lines, font, klass=klass) + c.SetContextData(self, classDefs) + rules = [] + for line in lines: + assert line[0].lower().startswith('class'), line[0] + while len(line) < 1+c.DataLen: line.append('') + seq = tuple(intSplitComma(i) for i in line[1:1+c.DataLen]) + recs = parseLookupRecords(line[1+c.DataLen:], c.LookupRecord, lookupMap) + rules.append((seq, recs)) + firstClasses = set(seq[c.InputIdx][0] for seq,recs in rules) + firstGlyphs = set(g for g,c in classDefs[c.InputIdx].classDefs.items() if c in firstClasses) + self.Coverage = makeCoverage(firstGlyphs, font) + bucketizeRules(self, c, rules, range(max(firstClasses) + 1)) + elif typ.endswith('coverage'): + self.Format = 3 + log.debug("Parsing %s format %s", Type, self.Format) + c = ContextHelper(Type, self.Format) + coverages = tuple([] for i in range(c.DataLen)) + while lines.peeks()[0].endswith("coverage definition begin"): + typ = lines.peek()[0][:-len("coverage definition begin")].lower() + idx,klass = { + 1: { + '': (0,ot.Coverage), + }, + 3: { + 'backtrack': (0,ot.BacktrackCoverage), + 'input': (1,ot.InputCoverage), + 'lookahead': (2,ot.LookAheadCoverage), + }, + }[c.DataLen][typ] + coverages[idx].append(parseCoverage(lines, font, klass=klass)) + c.SetRuleData(self, coverages) + lines = list(lines) + assert len(lines) == 1 + line = lines[0] + assert line[0].lower() == 'coverage', line[0] + recs = parseLookupRecords(line[1:], c.LookupRecord, lookupMap) + setattr(self, c.Type+'Count', len(recs)) + setattr(self, c.LookupRecord, recs) + else: + assert 0, typ + return self + +def parseContextSubst(lines, font, lookupMap=None): + return parseContext(lines, font, "ContextSubst", lookupMap=lookupMap) +def parseContextPos(lines, font, lookupMap=None): + return parseContext(lines, font, "ContextPos", lookupMap=lookupMap) +def parseChainedSubst(lines, font, lookupMap=None): + return parseContext(lines, font, "ChainContextSubst", lookupMap=lookupMap) +def parseChainedPos(lines, font, lookupMap=None): + return parseContext(lines, font, "ChainContextPos", lookupMap=lookupMap) + +def parseReverseChainedSubst(lines, font, _lookupMap=None): + self = ot.ReverseChainSingleSubst() + self.Format = 1 + coverages = ([], []) + while lines.peeks()[0].endswith("coverage definition begin"): + typ = lines.peek()[0][:-len("coverage definition begin")].lower() + idx,klass = { + 'backtrack': (0,ot.BacktrackCoverage), + 'lookahead': (1,ot.LookAheadCoverage), + }[typ] + coverages[idx].append(parseCoverage(lines, font, klass=klass)) + self.BacktrackCoverage = coverages[0] + self.BacktrackGlyphCount = len(self.BacktrackCoverage) + self.LookAheadCoverage = coverages[1] + self.LookAheadGlyphCount = len(self.LookAheadCoverage) + mapping = {} + for line in lines: + assert len(line) == 2, line + line = makeGlyphs(line) + mapping[line[0]] = line[1] + self.Coverage = makeCoverage(set(mapping.keys()), font) + self.Substitute = [mapping[k] for k in self.Coverage.glyphs] + self.GlyphCount = len(self.Substitute) + return self + +def parseLookup(lines, tableTag, font, lookupMap=None): + line = lines.expect('lookup') + _, name, typ = line + log.debug("Parsing lookup type %s %s", typ, name) + lookup = ot.Lookup() + lookup.LookupFlag,filterset = parseLookupFlags(lines) + if filterset is not None: + lookup.MarkFilteringSet = filterset + lookup.LookupType, parseLookupSubTable = { + 'GSUB': { + 'single': (1, parseSingleSubst), + 'multiple': (2, parseMultiple), + 'alternate': (3, parseAlternate), + 'ligature': (4, parseLigature), + 'context': (5, parseContextSubst), + 'chained': (6, parseChainedSubst), + 'reversechained':(8, parseReverseChainedSubst), + }, + 'GPOS': { + 'single': (1, parseSinglePos), + 'pair': (2, parsePair), + 'kernset': (2, parseKernset), + 'cursive': (3, parseCursive), + 'mark to base': (4, parseMarkToBase), + 'mark to ligature':(5, parseMarkToLigature), + 'mark to mark': (6, parseMarkToMark), + 'context': (7, parseContextPos), + 'chained': (8, parseChainedPos), + }, + }[tableTag][typ] + + with lines.until('lookup end'): + subtables = [] + + while lines.peek(): + with lines.until(('% subtable', 'subtable end')): + while lines.peek(): + subtable = parseLookupSubTable(lines, font, lookupMap) + assert lookup.LookupType == subtable.LookupType + subtables.append(subtable) + if lines.peeks()[0] in ('% subtable', 'subtable end'): + next(lines) + lines.expect('lookup end') + + lookup.SubTable = subtables + lookup.SubTableCount = len(lookup.SubTable) + if lookup.SubTableCount == 0: + # Remove this return when following is fixed: + # https://github.com/fonttools/fonttools/issues/789 + return None + return lookup + +def parseGSUBGPOS(lines, font, tableTag): + container = ttLib.getTableClass(tableTag)() + lookupMap = DeferredMapping() + featureMap = DeferredMapping() + assert tableTag in ('GSUB', 'GPOS') + log.debug("Parsing %s", tableTag) + self = getattr(ot, tableTag)() + self.Version = 0x00010000 + fields = { + 'script table begin': + ('ScriptList', + lambda lines: parseScriptList (lines, featureMap)), + 'feature table begin': + ('FeatureList', + lambda lines: parseFeatureList (lines, lookupMap, featureMap)), + 'lookup': + ('LookupList', + None), + } + for attr,parser in fields.values(): + setattr(self, attr, None) + while lines.peek() is not None: + typ = lines.peek()[0].lower() + if typ not in fields: + log.debug('Skipping %s', lines.peek()) + next(lines) + continue + attr,parser = fields[typ] + if typ == 'lookup': + if self.LookupList is None: + self.LookupList = ot.LookupList() + self.LookupList.Lookup = [] + _, name, _ = lines.peek() + lookup = parseLookup(lines, tableTag, font, lookupMap) + if lookupMap is not None: + assert name not in lookupMap, "Duplicate lookup name: %s" % name + lookupMap[name] = len(self.LookupList.Lookup) + else: + assert int(name) == len(self.LookupList.Lookup), "%d %d" % (name, len(self.Lookup)) + self.LookupList.Lookup.append(lookup) + else: + assert getattr(self, attr) is None, attr + setattr(self, attr, parser(lines)) + if self.LookupList: + self.LookupList.LookupCount = len(self.LookupList.Lookup) + if lookupMap is not None: + lookupMap.applyDeferredMappings() + if featureMap is not None: + featureMap.applyDeferredMappings() + container.table = self + return container + +def parseGSUB(lines, font): + return parseGSUBGPOS(lines, font, 'GSUB') +def parseGPOS(lines, font): + return parseGSUBGPOS(lines, font, 'GPOS') + +def parseAttachList(lines, font): + points = {} + with lines.between('attachment list'): + for line in lines: + glyph = makeGlyph(line[0]) + assert glyph not in points, glyph + points[glyph] = [int(i) for i in line[1:]] + return otl.buildAttachList(points, font.getReverseGlyphMap()) + +def parseCaretList(lines, font): + carets = {} + with lines.between('carets'): + for line in lines: + glyph = makeGlyph(line[0]) + assert glyph not in carets, glyph + num = int(line[1]) + thisCarets = [int(i) for i in line[2:]] + assert num == len(thisCarets), line + carets[glyph] = thisCarets + return otl.buildLigCaretList(carets, {}, font.getReverseGlyphMap()) + +def makeMarkFilteringSets(sets, font): + self = ot.MarkGlyphSetsDef() + self.MarkSetTableFormat = 1 + self.MarkSetCount = 1 + max(sets.keys()) + self.Coverage = [None] * self.MarkSetCount + for k,v in sorted(sets.items()): + self.Coverage[k] = makeCoverage(set(v), font) + return self + +def parseMarkFilteringSets(lines, font): + sets = {} + with lines.between('set definition'): + for line in lines: + assert len(line) == 2, line + glyph = makeGlyph(line[0]) + # TODO accept set names + st = int(line[1]) + if st not in sets: + sets[st] = [] + sets[st].append(glyph) + return makeMarkFilteringSets(sets, font) + +def parseGDEF(lines, font): + container = ttLib.getTableClass('GDEF')() + log.debug("Parsing GDEF") + self = ot.GDEF() + fields = { + 'class definition begin': + ('GlyphClassDef', + lambda lines, font: parseClassDef(lines, font, klass=ot.GlyphClassDef)), + 'attachment list begin': + ('AttachList', parseAttachList), + 'carets begin': + ('LigCaretList', parseCaretList), + 'mark attachment class definition begin': + ('MarkAttachClassDef', + lambda lines, font: parseClassDef(lines, font, klass=ot.MarkAttachClassDef)), + 'markfilter set definition begin': + ('MarkGlyphSetsDef', parseMarkFilteringSets), + } + for attr,parser in fields.values(): + setattr(self, attr, None) + while lines.peek() is not None: + typ = lines.peek()[0].lower() + if typ not in fields: + log.debug('Skipping %s', typ) + next(lines) + continue + attr,parser = fields[typ] + assert getattr(self, attr) is None, attr + setattr(self, attr, parser(lines, font)) + self.Version = 0x00010000 if self.MarkGlyphSetsDef is None else 0x00010002 + container.table = self + return container + +def parseCmap(lines, font): + container = ttLib.getTableClass('cmap')() + log.debug("Parsing cmap") + tables = [] + while lines.peek() is not None: + lines.expect('cmap subtable %d' % len(tables)) + platId, encId, fmt, lang = [ + parseCmapId(lines, field) + for field in ('platformID', 'encodingID', 'format', 'language')] + table = cmap_classes[fmt](fmt) + table.platformID = platId + table.platEncID = encId + table.language = lang + table.cmap = {} + line = next(lines) + while line[0] != 'end subtable': + table.cmap[int(line[0], 16)] = line[1] + line = next(lines) + tables.append(table) + container.tableVersion = 0 + container.tables = tables + return container + +def parseCmapId(lines, field): + line = next(lines) + assert field == line[0] + return int(line[1]) + +def parseTable(lines, font, tableTag=None): + log.debug("Parsing table") + line = lines.peeks() + tag = None + if line[0].split()[0] == 'FontDame': + tag = line[0].split()[1] + elif ' '.join(line[0].split()[:3]) == 'Font Chef Table': + tag = line[0].split()[3] + if tag is not None: + next(lines) + tag = tag.ljust(4) + if tableTag is None: + tableTag = tag + else: + assert tableTag == tag, (tableTag, tag) + + assert tableTag is not None, "Don't know what table to parse and data doesn't specify" + + return { + 'GSUB': parseGSUB, + 'GPOS': parseGPOS, + 'GDEF': parseGDEF, + 'cmap': parseCmap, + }[tableTag](lines, font) + +class Tokenizer(object): + + def __init__(self, f): + # TODO BytesIO / StringIO as needed? also, figure out whether we work on bytes or unicode + lines = iter(f) + try: + self.filename = f.name + except: + self.filename = None + self.lines = iter(lines) + self.line = '' + self.lineno = 0 + self.stoppers = [] + self.buffer = None + + def __iter__(self): + return self + + def _next_line(self): + self.lineno += 1 + line = self.line = next(self.lines) + line = [s.strip() for s in line.split('\t')] + if len(line) == 1 and not line[0]: + del line[0] + if line and not line[-1]: + log.warning('trailing tab found on line %d: %s' % (self.lineno, self.line)) + while line and not line[-1]: + del line[-1] + return line + + def _next_nonempty(self): + while True: + line = self._next_line() + # Skip comments and empty lines + if line and line[0] and (line[0][0] != '%' or line[0] == '% subtable'): + return line + + def _next_buffered(self): + if self.buffer: + ret = self.buffer + self.buffer = None + return ret + else: + return self._next_nonempty() + + def __next__(self): + line = self._next_buffered() + if line[0].lower() in self.stoppers: + self.buffer = line + raise StopIteration + return line + + def next(self): + return self.__next__() + + def peek(self): + if not self.buffer: + try: + self.buffer = self._next_nonempty() + except StopIteration: + return None + if self.buffer[0].lower() in self.stoppers: + return None + return self.buffer + + def peeks(self): + ret = self.peek() + return ret if ret is not None else ('',) + + @contextmanager + def between(self, tag): + start = tag + ' begin' + end = tag + ' end' + self.expectendswith(start) + self.stoppers.append(end) + yield + del self.stoppers[-1] + self.expect(tag + ' end') + + @contextmanager + def until(self, tags): + if type(tags) is not tuple: + tags = (tags,) + self.stoppers.extend(tags) + yield + del self.stoppers[-len(tags):] + + def expect(self, s): + line = next(self) + tag = line[0].lower() + assert tag == s, "Expected '%s', got '%s'" % (s, tag) + return line + + def expectendswith(self, s): + line = next(self) + tag = line[0].lower() + assert tag.endswith(s), "Expected '*%s', got '%s'" % (s, tag) + return line + +def build(f, font, tableTag=None): + """Convert a Monotype font layout file to an OpenType layout object + + A font object must be passed, but this may be a "dummy" font; it is only + used for sorting glyph sets when making coverage tables and to hold the + OpenType layout table while it is being built. + + Args: + f: A file object. + font (TTFont): A font object. + tableTag (string): If provided, asserts that the file contains data for the + given OpenType table. + + Returns: + An object representing the table. (e.g. ``table_G_S_U_B_``) + """ + lines = Tokenizer(f) + return parseTable(lines, font, tableTag=tableTag) + + +def main(args=None, font=None): + """Convert a FontDame OTL file to TTX XML. + + Writes XML output to stdout. + + Args: + args: Command line arguments (``--font``, ``--table``, input files). + """ + import sys + from fontTools import configLogger + from fontTools.misc.testTools import MockFont + + if args is None: + args = sys.argv[1:] + + # configure the library logger (for >= WARNING) + configLogger() + # comment this out to enable debug messages from mtiLib's logger + # log.setLevel(logging.DEBUG) + + import argparse + parser = argparse.ArgumentParser( + "fonttools mtiLib", + description=main.__doc__, + ) + + parser.add_argument('--font', '-f', metavar='FILE', dest="font", + help="Input TTF files (used for glyph classes and sorting coverage tables)") + parser.add_argument('--table', '-t', metavar='TABLE', dest="tableTag", + help="Table to fill (sniffed from input file if not provided)") + parser.add_argument('inputs', metavar='FILE', type=str, nargs='+', + help="Input FontDame .txt files") + + args = parser.parse_args(args) + + if font is None: + if args.font: + font = ttLib.TTFont(args.font) + else: + font = MockFont() + + for f in args.inputs: + log.debug("Processing %s", f) + with open(f, 'rt', encoding="utf-8") as f: + table = build(f, font, tableTag=args.tableTag) + blob = table.compile(font) # Make sure it compiles + decompiled = table.__class__() + decompiled.decompile(blob, font) # Make sure it decompiles! + + #continue + from fontTools.misc import xmlWriter + tag = table.tableTag + writer = xmlWriter.XMLWriter(sys.stdout) + writer.begintag(tag) + writer.newline() + #table.toXML(writer, font) + decompiled.toXML(writer, font) + writer.endtag(tag) + writer.newline() + + +if __name__ == '__main__': + import sys + sys.exit(main()) diff --git a/.venv/lib/python3.9/site-packages/fontTools/mtiLib/__main__.py b/.venv/lib/python3.9/site-packages/fontTools/mtiLib/__main__.py new file mode 100644 index 00000000..fe6b638b --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/mtiLib/__main__.py @@ -0,0 +1,5 @@ +import sys +from fontTools.mtiLib import main + +if __name__ == '__main__': + sys.exit(main()) diff --git a/.venv/lib/python3.9/site-packages/fontTools/mtiLib/__pycache__/__init__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/mtiLib/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ed02edb7ee119d4e59fb635447af76ecf854cd3 GIT binary patch literal 40428 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/otlLib/__init__.py b/.venv/lib/python3.9/site-packages/fontTools/otlLib/__init__.py new file mode 100644 index 00000000..12e414fc --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/otlLib/__init__.py @@ -0,0 +1 @@ +"""OpenType Layout-related functionality.""" diff --git a/.venv/lib/python3.9/site-packages/fontTools/otlLib/__pycache__/__init__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/otlLib/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac904921186980fa2b506cc84f4043089f93ca95 GIT binary patch literal 234 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 KbS^*%yZ;-!z>ALn literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/otlLib/__pycache__/error.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/otlLib/__pycache__/error.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cfbdb07bab95d82400601b175ca81d522c8c0820 GIT binary patch literal 717 zcmZuu&2AGh5FUFs$u?@G9uT5Z4?VI6;sabj2vsT-98ijso^r9=wM!N@>&12>5-lhC z7EvX7>;v#Jd*u@|W zyF@kcEtxXSCy*xvzWgH`qeE1`kH!Gz!IW#vzJzI_6P@Cj>K@kiyWNw<)ThhFyerR+ zowKe;u;^CErwxu!{X;YXzOxoucFh^IyamZMU>`QllWyzyOJSN&+Pcf6EbB5z*=3b2 z6y0G$>P>at4d%vs^}#r5d;@NP$M30_8(k{#RyqCJl?x-@FK5BlVp7bkt;A?y>V>Gv zGtn%=%+^mw&xJ38dD5uj6E^eW+}7a~Q@yaELNLM*no+ZK1cE5>G!WP}TkZW1dUU&Q zfq(EY}T7@nE^u;YBxYNJ5Y0t-@6T!D>5g+vuqKuQZ$C{bMyEJe}AyGiV9cI}z5 z%+HKP!A+gcS&igs<&ig#$1oQJ1 zhUe06KLl!yvA;-o_OT#*fT7;P6tW%evyg}Ei1|Dep@p{yE1?s*N8GogBNRC+<;MTu@pk`i4%Mop|Ha{GGoi;pmGeBP|Nxub)vIPxp&X}Z_% zuD6x;-D2&RoBgfZWX%_fZ-#ur`}RRMLJFJG=WgMXTRPa04z|kO*yPNG(!Vl^KCnlv z#(osGgT^O;46n-eAZlzJ?CLaWG+VoA8aL{LC>b>3_Ew{Npm)>c-TM0t)z;D5-JrD> z>_njB&!o)0_m+>cfg}a#N@Lu9AvQHoC92IOj z=Oa4fA>R|Snu$>C3FSeyAlD(=119U5Wh@kjV$AOHWM$&L4yyyNbz^lV*2*OI2v!%? zBkJ~#;wOeKFH^tquAm^mGbqIyYhJ9#+C`aR-GsNv^Hp8Jr?$a5d~V3{@X`aPUU zfY?K8%#wQ(-2-^eBJ$5k@G=$oh5J%QV;Kt-XKCSKsFcCr&k zUI8D^K+anUlF%S}2#CU7@$jJc1>S3QBTH)QG4)>(#cP&aAcdfb6!H|Uj8lnL2By|V zs&Wh1J|_Ae6B>MHZ8vBq$1_;xrCZS;k}9grHzncT#s2gU|8 zKSAlt=*oYiv{l?XXtB2)89;byazWM&?nbj0)CEQDYexF!s63Sn3P*D!uEl{;u#V=R zNaQc8IMKT8N~7CrupSDoH2)H+@48E dzkre`nU`1h(-8Gvp{q(!4X#zLmM>P${R5*RFb@C# literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/otlLib/builder.py b/.venv/lib/python3.9/site-packages/fontTools/otlLib/builder.py new file mode 100644 index 00000000..6e98e4b2 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/otlLib/builder.py @@ -0,0 +1,2853 @@ +from collections import namedtuple, OrderedDict +import os +from fontTools.misc.fixedTools import fixedToFloat +from fontTools import ttLib +from fontTools.ttLib.tables import otTables as ot +from fontTools.ttLib.tables.otBase import ( + ValueRecord, + valueRecordFormatDict, + OTTableWriter, + CountReference, +) +from fontTools.ttLib.tables import otBase +from fontTools.feaLib.ast import STATNameStatement +from fontTools.otlLib.optimize.gpos import GPOS_COMPACT_MODE_DEFAULT, GPOS_COMPACT_MODE_ENV_KEY, compact_lookup +from fontTools.otlLib.error import OpenTypeLibError +from functools import reduce +import logging +import copy + + +log = logging.getLogger(__name__) + + +def buildCoverage(glyphs, glyphMap): + """Builds a coverage table. + + Coverage tables (as defined in the `OpenType spec `_) + are used in all OpenType Layout lookups apart from the Extension type, and + define the glyphs involved in a layout subtable. This allows shaping engines + to compare the glyph stream with the coverage table and quickly determine + whether a subtable should be involved in a shaping operation. + + This function takes a list of glyphs and a glyphname-to-ID map, and + returns a ``Coverage`` object representing the coverage table. + + Example:: + + glyphMap = font.getReverseGlyphMap() + glyphs = [ "A", "B", "C" ] + coverage = buildCoverage(glyphs, glyphMap) + + Args: + glyphs: a sequence of glyph names. + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + + Returns: + An ``otTables.Coverage`` object or ``None`` if there are no glyphs + supplied. + """ + + if not glyphs: + return None + self = ot.Coverage() + self.glyphs = sorted(set(glyphs), key=glyphMap.__getitem__) + return self + + +LOOKUP_FLAG_RIGHT_TO_LEFT = 0x0001 +LOOKUP_FLAG_IGNORE_BASE_GLYPHS = 0x0002 +LOOKUP_FLAG_IGNORE_LIGATURES = 0x0004 +LOOKUP_FLAG_IGNORE_MARKS = 0x0008 +LOOKUP_FLAG_USE_MARK_FILTERING_SET = 0x0010 + + +def buildLookup(subtables, flags=0, markFilterSet=None): + """Turns a collection of rules into a lookup. + + A Lookup (as defined in the `OpenType Spec `_) + wraps the individual rules in a layout operation (substitution or + positioning) in a data structure expressing their overall lookup type - + for example, single substitution, mark-to-base attachment, and so on - + as well as the lookup flags and any mark filtering sets. You may import + the following constants to express lookup flags: + + - ``LOOKUP_FLAG_RIGHT_TO_LEFT`` + - ``LOOKUP_FLAG_IGNORE_BASE_GLYPHS`` + - ``LOOKUP_FLAG_IGNORE_LIGATURES`` + - ``LOOKUP_FLAG_IGNORE_MARKS`` + - ``LOOKUP_FLAG_USE_MARK_FILTERING_SET`` + + Args: + subtables: A list of layout subtable objects (e.g. + ``MultipleSubst``, ``PairPos``, etc.) or ``None``. + flags (int): This lookup's flags. + markFilterSet: Either ``None`` if no mark filtering set is used, or + an integer representing the filtering set to be used for this + lookup. If a mark filtering set is provided, + `LOOKUP_FLAG_USE_MARK_FILTERING_SET` will be set on the lookup's + flags. + + Returns: + An ``otTables.Lookup`` object or ``None`` if there are no subtables + supplied. + """ + if subtables is None: + return None + subtables = [st for st in subtables if st is not None] + if not subtables: + return None + assert all( + t.LookupType == subtables[0].LookupType for t in subtables + ), "all subtables must have the same LookupType; got %s" % repr( + [t.LookupType for t in subtables] + ) + self = ot.Lookup() + self.LookupType = subtables[0].LookupType + self.LookupFlag = flags + self.SubTable = subtables + self.SubTableCount = len(self.SubTable) + if markFilterSet is not None: + self.LookupFlag |= LOOKUP_FLAG_USE_MARK_FILTERING_SET + assert isinstance(markFilterSet, int), markFilterSet + self.MarkFilteringSet = markFilterSet + else: + assert (self.LookupFlag & LOOKUP_FLAG_USE_MARK_FILTERING_SET) == 0, ( + "if markFilterSet is None, flags must not set " + "LOOKUP_FLAG_USE_MARK_FILTERING_SET; flags=0x%04x" % flags + ) + return self + + +class LookupBuilder(object): + SUBTABLE_BREAK_ = "SUBTABLE_BREAK" + + def __init__(self, font, location, table, lookup_type): + self.font = font + self.glyphMap = font.getReverseGlyphMap() + self.location = location + self.table, self.lookup_type = table, lookup_type + self.lookupflag = 0 + self.markFilterSet = None + self.lookup_index = None # assigned when making final tables + assert table in ("GPOS", "GSUB") + + def equals(self, other): + return ( + isinstance(other, self.__class__) + and self.table == other.table + and self.lookupflag == other.lookupflag + and self.markFilterSet == other.markFilterSet + ) + + def inferGlyphClasses(self): + """Infers glyph glasses for the GDEF table, such as {"cedilla":3}.""" + return {} + + def getAlternateGlyphs(self): + """Helper for building 'aalt' features.""" + return {} + + def buildLookup_(self, subtables): + return buildLookup(subtables, self.lookupflag, self.markFilterSet) + + def buildMarkClasses_(self, marks): + """{"cedilla": ("BOTTOM", ast.Anchor), ...} --> {"BOTTOM":0, "TOP":1} + + Helper for MarkBasePostBuilder, MarkLigPosBuilder, and + MarkMarkPosBuilder. Seems to return the same numeric IDs + for mark classes as the AFDKO makeotf tool. + """ + ids = {} + for mark in sorted(marks.keys(), key=self.font.getGlyphID): + markClassName, _markAnchor = marks[mark] + if markClassName not in ids: + ids[markClassName] = len(ids) + return ids + + def setBacktrackCoverage_(self, prefix, subtable): + subtable.BacktrackGlyphCount = len(prefix) + subtable.BacktrackCoverage = [] + for p in reversed(prefix): + coverage = buildCoverage(p, self.glyphMap) + subtable.BacktrackCoverage.append(coverage) + + def setLookAheadCoverage_(self, suffix, subtable): + subtable.LookAheadGlyphCount = len(suffix) + subtable.LookAheadCoverage = [] + for s in suffix: + coverage = buildCoverage(s, self.glyphMap) + subtable.LookAheadCoverage.append(coverage) + + def setInputCoverage_(self, glyphs, subtable): + subtable.InputGlyphCount = len(glyphs) + subtable.InputCoverage = [] + for g in glyphs: + coverage = buildCoverage(g, self.glyphMap) + subtable.InputCoverage.append(coverage) + + def setCoverage_(self, glyphs, subtable): + subtable.GlyphCount = len(glyphs) + subtable.Coverage = [] + for g in glyphs: + coverage = buildCoverage(g, self.glyphMap) + subtable.Coverage.append(coverage) + + def build_subst_subtables(self, mapping, klass): + substitutions = [{}] + for key in mapping: + if key[0] == self.SUBTABLE_BREAK_: + substitutions.append({}) + else: + substitutions[-1][key] = mapping[key] + subtables = [klass(s) for s in substitutions] + return subtables + + def add_subtable_break(self, location): + """Add an explicit subtable break. + + Args: + location: A string or tuple representing the location in the + original source which produced this break, or ``None`` if + no location is provided. + """ + log.warning( + OpenTypeLibError( + 'unsupported "subtable" statement for lookup type', location + ) + ) + + +class AlternateSubstBuilder(LookupBuilder): + """Builds an Alternate Substitution (GSUB3) lookup. + + Users are expected to manually add alternate glyph substitutions to + the ``alternates`` attribute after the object has been initialized, + e.g.:: + + builder.alternates["A"] = ["A.alt1", "A.alt2"] + + Attributes: + font (``fontTools.TTLib.TTFont``): A font object. + location: A string or tuple representing the location in the original + source which produced this lookup. + alternates: An ordered dictionary of alternates, mapping glyph names + to a list of names of alternates. + lookupflag (int): The lookup's flag + markFilterSet: Either ``None`` if no mark filtering set is used, or + an integer representing the filtering set to be used for this + lookup. If a mark filtering set is provided, + `LOOKUP_FLAG_USE_MARK_FILTERING_SET` will be set on the lookup's + flags. + """ + + def __init__(self, font, location): + LookupBuilder.__init__(self, font, location, "GSUB", 3) + self.alternates = OrderedDict() + + def equals(self, other): + return LookupBuilder.equals(self, other) and self.alternates == other.alternates + + def build(self): + """Build the lookup. + + Returns: + An ``otTables.Lookup`` object representing the alternate + substitution lookup. + """ + subtables = self.build_subst_subtables( + self.alternates, buildAlternateSubstSubtable + ) + return self.buildLookup_(subtables) + + def getAlternateGlyphs(self): + return self.alternates + + def add_subtable_break(self, location): + self.alternates[(self.SUBTABLE_BREAK_, location)] = self.SUBTABLE_BREAK_ + + +class ChainContextualRule( + namedtuple("ChainContextualRule", ["prefix", "glyphs", "suffix", "lookups"]) +): + @property + def is_subtable_break(self): + return self.prefix == LookupBuilder.SUBTABLE_BREAK_ + + +class ChainContextualRuleset: + def __init__(self): + self.rules = [] + + def addRule(self, rule): + self.rules.append(rule) + + @property + def hasPrefixOrSuffix(self): + # Do we have any prefixes/suffixes? If this is False for all + # rulesets, we can express the whole lookup as GPOS5/GSUB7. + for rule in self.rules: + if len(rule.prefix) > 0 or len(rule.suffix) > 0: + return True + return False + + @property + def hasAnyGlyphClasses(self): + # Do we use glyph classes anywhere in the rules? If this is False + # we can express this subtable as a Format 1. + for rule in self.rules: + for coverage in (rule.prefix, rule.glyphs, rule.suffix): + if any(len(x) > 1 for x in coverage): + return True + return False + + def format2ClassDefs(self): + PREFIX, GLYPHS, SUFFIX = 0, 1, 2 + classDefBuilders = [] + for ix in [PREFIX, GLYPHS, SUFFIX]: + context = [] + for r in self.rules: + context.append(r[ix]) + classes = self._classBuilderForContext(context) + if not classes: + return None + classDefBuilders.append(classes) + return classDefBuilders + + def _classBuilderForContext(self, context): + classdefbuilder = ClassDefBuilder(useClass0=False) + for position in context: + for glyphset in position: + glyphs = set(glyphset) + if not classdefbuilder.canAdd(glyphs): + return None + classdefbuilder.add(glyphs) + return classdefbuilder + + +class ChainContextualBuilder(LookupBuilder): + def equals(self, other): + return LookupBuilder.equals(self, other) and self.rules == other.rules + + def rulesets(self): + # Return a list of ChainContextRuleset objects, taking explicit + # subtable breaks into account + ruleset = [ChainContextualRuleset()] + for rule in self.rules: + if rule.is_subtable_break: + ruleset.append(ChainContextualRuleset()) + continue + ruleset[-1].addRule(rule) + # Squish any empty subtables + return [x for x in ruleset if len(x.rules) > 0] + + def getCompiledSize_(self, subtables): + size = 0 + for st in subtables: + w = OTTableWriter() + w["LookupType"] = CountReference( + {"LookupType": st.LookupType}, "LookupType" + ) + # We need to make a copy here because compiling + # modifies the subtable (finalizing formats etc.) + copy.deepcopy(st).compile(w, self.font) + size += len(w.getAllData()) + return size + + def build(self): + """Build the lookup. + + Returns: + An ``otTables.Lookup`` object representing the chained + contextual positioning lookup. + """ + subtables = [] + chaining = False + rulesets = self.rulesets() + chaining = any(ruleset.hasPrefixOrSuffix for ruleset in rulesets) + for ruleset in rulesets: + # Determine format strategy. We try to build formats 1, 2 and 3 + # subtables and then work out which is best. candidates list holds + # the subtables in each format for this ruleset (including a dummy + # "format 0" to make the addressing match the format numbers). + + # We can always build a format 3 lookup by accumulating each of + # the rules into a list, so start with that. + candidates = [None, None, None, []] + for rule in ruleset.rules: + candidates[3].append(self.buildFormat3Subtable(rule, chaining)) + + # Can we express the whole ruleset as a format 2 subtable? + classdefs = ruleset.format2ClassDefs() + if classdefs: + candidates[2] = [ + self.buildFormat2Subtable(ruleset, classdefs, chaining) + ] + + if not ruleset.hasAnyGlyphClasses: + candidates[1] = [self.buildFormat1Subtable(ruleset, chaining)] + + for i in [1, 2, 3]: + if candidates[i]: + try: + self.getCompiledSize_(candidates[i]) + except Exception as e: + log.warning( + "Contextual format %i at %s overflowed (%s)" + % (i, str(self.location), e) + ) + candidates[i] = None + + candidates = [x for x in candidates if x is not None] + if not candidates: + raise OpenTypeLibError("All candidates overflowed", self.location) + + winner = min(candidates, key=self.getCompiledSize_) + subtables.extend(winner) + + # If we are not chaining, lookup type will be automatically fixed by + # buildLookup_ + return self.buildLookup_(subtables) + + def buildFormat1Subtable(self, ruleset, chaining=True): + st = self.newSubtable_(chaining=chaining) + st.Format = 1 + st.populateDefaults() + coverage = set() + rulesetsByFirstGlyph = {} + ruleAttr = self.ruleAttr_(format=1, chaining=chaining) + + for rule in ruleset.rules: + ruleAsSubtable = self.newRule_(format=1, chaining=chaining) + + if chaining: + ruleAsSubtable.BacktrackGlyphCount = len(rule.prefix) + ruleAsSubtable.LookAheadGlyphCount = len(rule.suffix) + ruleAsSubtable.Backtrack = [list(x)[0] for x in reversed(rule.prefix)] + ruleAsSubtable.LookAhead = [list(x)[0] for x in rule.suffix] + + ruleAsSubtable.InputGlyphCount = len(rule.glyphs) + else: + ruleAsSubtable.GlyphCount = len(rule.glyphs) + + ruleAsSubtable.Input = [list(x)[0] for x in rule.glyphs[1:]] + + self.buildLookupList(rule, ruleAsSubtable) + + firstGlyph = list(rule.glyphs[0])[0] + if firstGlyph not in rulesetsByFirstGlyph: + coverage.add(firstGlyph) + rulesetsByFirstGlyph[firstGlyph] = [] + rulesetsByFirstGlyph[firstGlyph].append(ruleAsSubtable) + + st.Coverage = buildCoverage(coverage, self.glyphMap) + ruleSets = [] + for g in st.Coverage.glyphs: + ruleSet = self.newRuleSet_(format=1, chaining=chaining) + setattr(ruleSet, ruleAttr, rulesetsByFirstGlyph[g]) + setattr(ruleSet, f"{ruleAttr}Count", len(rulesetsByFirstGlyph[g])) + ruleSets.append(ruleSet) + + setattr(st, self.ruleSetAttr_(format=1, chaining=chaining), ruleSets) + setattr( + st, self.ruleSetAttr_(format=1, chaining=chaining) + "Count", len(ruleSets) + ) + + return st + + def buildFormat2Subtable(self, ruleset, classdefs, chaining=True): + st = self.newSubtable_(chaining=chaining) + st.Format = 2 + st.populateDefaults() + + if chaining: + ( + st.BacktrackClassDef, + st.InputClassDef, + st.LookAheadClassDef, + ) = [c.build() for c in classdefs] + else: + st.ClassDef = classdefs[1].build() + + inClasses = classdefs[1].classes() + + classSets = [] + for _ in inClasses: + classSet = self.newRuleSet_(format=2, chaining=chaining) + classSets.append(classSet) + + coverage = set() + classRuleAttr = self.ruleAttr_(format=2, chaining=chaining) + + for rule in ruleset.rules: + ruleAsSubtable = self.newRule_(format=2, chaining=chaining) + if chaining: + ruleAsSubtable.BacktrackGlyphCount = len(rule.prefix) + ruleAsSubtable.LookAheadGlyphCount = len(rule.suffix) + # The glyphs in the rule may be list, tuple, odict_keys... + # Order is not important anyway because they are guaranteed + # to be members of the same class. + ruleAsSubtable.Backtrack = [ + st.BacktrackClassDef.classDefs[list(x)[0]] + for x in reversed(rule.prefix) + ] + ruleAsSubtable.LookAhead = [ + st.LookAheadClassDef.classDefs[list(x)[0]] for x in rule.suffix + ] + + ruleAsSubtable.InputGlyphCount = len(rule.glyphs) + ruleAsSubtable.Input = [ + st.InputClassDef.classDefs[list(x)[0]] for x in rule.glyphs[1:] + ] + setForThisRule = classSets[ + st.InputClassDef.classDefs[list(rule.glyphs[0])[0]] + ] + else: + ruleAsSubtable.GlyphCount = len(rule.glyphs) + ruleAsSubtable.Class = [ # The spec calls this InputSequence + st.ClassDef.classDefs[list(x)[0]] for x in rule.glyphs[1:] + ] + setForThisRule = classSets[ + st.ClassDef.classDefs[list(rule.glyphs[0])[0]] + ] + + self.buildLookupList(rule, ruleAsSubtable) + coverage |= set(rule.glyphs[0]) + + getattr(setForThisRule, classRuleAttr).append(ruleAsSubtable) + setattr( + setForThisRule, + f"{classRuleAttr}Count", + getattr(setForThisRule, f"{classRuleAttr}Count") + 1, + ) + setattr(st, self.ruleSetAttr_(format=2, chaining=chaining), classSets) + setattr( + st, self.ruleSetAttr_(format=2, chaining=chaining) + "Count", len(classSets) + ) + st.Coverage = buildCoverage(coverage, self.glyphMap) + return st + + def buildFormat3Subtable(self, rule, chaining=True): + st = self.newSubtable_(chaining=chaining) + st.Format = 3 + if chaining: + self.setBacktrackCoverage_(rule.prefix, st) + self.setLookAheadCoverage_(rule.suffix, st) + self.setInputCoverage_(rule.glyphs, st) + else: + self.setCoverage_(rule.glyphs, st) + self.buildLookupList(rule, st) + return st + + def buildLookupList(self, rule, st): + for sequenceIndex, lookupList in enumerate(rule.lookups): + if lookupList is not None: + if not isinstance(lookupList, list): + # Can happen with synthesised lookups + lookupList = [lookupList] + for l in lookupList: + if l.lookup_index is None: + if isinstance(self, ChainContextPosBuilder): + other = "substitution" + else: + other = "positioning" + raise OpenTypeLibError( + "Missing index of the specified " + f"lookup, might be a {other} lookup", + self.location, + ) + rec = self.newLookupRecord_(st) + rec.SequenceIndex = sequenceIndex + rec.LookupListIndex = l.lookup_index + + def add_subtable_break(self, location): + self.rules.append( + ChainContextualRule( + self.SUBTABLE_BREAK_, + self.SUBTABLE_BREAK_, + self.SUBTABLE_BREAK_, + [self.SUBTABLE_BREAK_], + ) + ) + + def newSubtable_(self, chaining=True): + subtablename = f"Context{self.subtable_type}" + if chaining: + subtablename = "Chain" + subtablename + st = getattr(ot, subtablename)() # ot.ChainContextPos()/ot.ChainSubst()/etc. + setattr(st, f"{self.subtable_type}Count", 0) + setattr(st, f"{self.subtable_type}LookupRecord", []) + return st + + # Format 1 and format 2 GSUB5/GSUB6/GPOS7/GPOS8 rulesets and rules form a family: + # + # format 1 ruleset format 1 rule format 2 ruleset format 2 rule + # GSUB5 SubRuleSet SubRule SubClassSet SubClassRule + # GSUB6 ChainSubRuleSet ChainSubRule ChainSubClassSet ChainSubClassRule + # GPOS7 PosRuleSet PosRule PosClassSet PosClassRule + # GPOS8 ChainPosRuleSet ChainPosRule ChainPosClassSet ChainPosClassRule + # + # The following functions generate the attribute names and subtables according + # to this naming convention. + def ruleSetAttr_(self, format=1, chaining=True): + if format == 1: + formatType = "Rule" + elif format == 2: + formatType = "Class" + else: + raise AssertionError(formatType) + subtablename = f"{self.subtable_type[0:3]}{formatType}Set" # Sub, not Subst. + if chaining: + subtablename = "Chain" + subtablename + return subtablename + + def ruleAttr_(self, format=1, chaining=True): + if format == 1: + formatType = "" + elif format == 2: + formatType = "Class" + else: + raise AssertionError(formatType) + subtablename = f"{self.subtable_type[0:3]}{formatType}Rule" # Sub, not Subst. + if chaining: + subtablename = "Chain" + subtablename + return subtablename + + def newRuleSet_(self, format=1, chaining=True): + st = getattr( + ot, self.ruleSetAttr_(format, chaining) + )() # ot.ChainPosRuleSet()/ot.SubRuleSet()/etc. + st.populateDefaults() + return st + + def newRule_(self, format=1, chaining=True): + st = getattr( + ot, self.ruleAttr_(format, chaining) + )() # ot.ChainPosClassRule()/ot.SubClassRule()/etc. + st.populateDefaults() + return st + + def attachSubtableWithCount_( + self, st, subtable_name, count_name, existing=None, index=None, chaining=False + ): + if chaining: + subtable_name = "Chain" + subtable_name + count_name = "Chain" + count_name + + if not hasattr(st, count_name): + setattr(st, count_name, 0) + setattr(st, subtable_name, []) + + if existing: + new_subtable = existing + else: + # Create a new, empty subtable from otTables + new_subtable = getattr(ot, subtable_name)() + + setattr(st, count_name, getattr(st, count_name) + 1) + + if index: + getattr(st, subtable_name).insert(index, new_subtable) + else: + getattr(st, subtable_name).append(new_subtable) + + return new_subtable + + def newLookupRecord_(self, st): + return self.attachSubtableWithCount_( + st, + f"{self.subtable_type}LookupRecord", + f"{self.subtable_type}Count", + chaining=False, + ) # Oddly, it isn't ChainSubstLookupRecord + + +class ChainContextPosBuilder(ChainContextualBuilder): + """Builds a Chained Contextual Positioning (GPOS8) lookup. + + Users are expected to manually add rules to the ``rules`` attribute after + the object has been initialized, e.g.:: + + # pos [A B] [C D] x' lookup lu1 y' z' lookup lu2 E; + + prefix = [ ["A", "B"], ["C", "D"] ] + suffix = [ ["E"] ] + glyphs = [ ["x"], ["y"], ["z"] ] + lookups = [ [lu1], None, [lu2] ] + builder.rules.append( (prefix, glyphs, suffix, lookups) ) + + Attributes: + font (``fontTools.TTLib.TTFont``): A font object. + location: A string or tuple representing the location in the original + source which produced this lookup. + rules: A list of tuples representing the rules in this lookup. + lookupflag (int): The lookup's flag + markFilterSet: Either ``None`` if no mark filtering set is used, or + an integer representing the filtering set to be used for this + lookup. If a mark filtering set is provided, + `LOOKUP_FLAG_USE_MARK_FILTERING_SET` will be set on the lookup's + flags. + """ + + def __init__(self, font, location): + LookupBuilder.__init__(self, font, location, "GPOS", 8) + self.rules = [] + self.subtable_type = "Pos" + + def find_chainable_single_pos(self, lookups, glyphs, value): + """Helper for add_single_pos_chained_()""" + res = None + for lookup in lookups[::-1]: + if lookup == self.SUBTABLE_BREAK_: + return res + if isinstance(lookup, SinglePosBuilder) and all( + lookup.can_add(glyph, value) for glyph in glyphs + ): + res = lookup + return res + + +class ChainContextSubstBuilder(ChainContextualBuilder): + """Builds a Chained Contextual Substitution (GSUB6) lookup. + + Users are expected to manually add rules to the ``rules`` attribute after + the object has been initialized, e.g.:: + + # sub [A B] [C D] x' lookup lu1 y' z' lookup lu2 E; + + prefix = [ ["A", "B"], ["C", "D"] ] + suffix = [ ["E"] ] + glyphs = [ ["x"], ["y"], ["z"] ] + lookups = [ [lu1], None, [lu2] ] + builder.rules.append( (prefix, glyphs, suffix, lookups) ) + + Attributes: + font (``fontTools.TTLib.TTFont``): A font object. + location: A string or tuple representing the location in the original + source which produced this lookup. + rules: A list of tuples representing the rules in this lookup. + lookupflag (int): The lookup's flag + markFilterSet: Either ``None`` if no mark filtering set is used, or + an integer representing the filtering set to be used for this + lookup. If a mark filtering set is provided, + `LOOKUP_FLAG_USE_MARK_FILTERING_SET` will be set on the lookup's + flags. + """ + + def __init__(self, font, location): + LookupBuilder.__init__(self, font, location, "GSUB", 6) + self.rules = [] # (prefix, input, suffix, lookups) + self.subtable_type = "Subst" + + def getAlternateGlyphs(self): + result = {} + for rule in self.rules: + if rule.is_subtable_break: + continue + for lookups in rule.lookups: + if not isinstance(lookups, list): + lookups = [lookups] + for lookup in lookups: + if lookup is not None: + alts = lookup.getAlternateGlyphs() + for glyph, replacements in alts.items(): + result.setdefault(glyph, set()).update(replacements) + return result + + def find_chainable_single_subst(self, glyphs): + """Helper for add_single_subst_chained_()""" + res = None + for rule in self.rules[::-1]: + if rule.is_subtable_break: + return res + for sub in rule.lookups: + if isinstance(sub, SingleSubstBuilder) and not any( + g in glyphs for g in sub.mapping.keys() + ): + res = sub + return res + + +class LigatureSubstBuilder(LookupBuilder): + """Builds a Ligature Substitution (GSUB4) lookup. + + Users are expected to manually add ligatures to the ``ligatures`` + attribute after the object has been initialized, e.g.:: + + # sub f i by f_i; + builder.ligatures[("f","f","i")] = "f_f_i" + + Attributes: + font (``fontTools.TTLib.TTFont``): A font object. + location: A string or tuple representing the location in the original + source which produced this lookup. + ligatures: An ordered dictionary mapping a tuple of glyph names to the + ligature glyphname. + lookupflag (int): The lookup's flag + markFilterSet: Either ``None`` if no mark filtering set is used, or + an integer representing the filtering set to be used for this + lookup. If a mark filtering set is provided, + `LOOKUP_FLAG_USE_MARK_FILTERING_SET` will be set on the lookup's + flags. + """ + + def __init__(self, font, location): + LookupBuilder.__init__(self, font, location, "GSUB", 4) + self.ligatures = OrderedDict() # {('f','f','i'): 'f_f_i'} + + def equals(self, other): + return LookupBuilder.equals(self, other) and self.ligatures == other.ligatures + + def build(self): + """Build the lookup. + + Returns: + An ``otTables.Lookup`` object representing the ligature + substitution lookup. + """ + subtables = self.build_subst_subtables( + self.ligatures, buildLigatureSubstSubtable + ) + return self.buildLookup_(subtables) + + def add_subtable_break(self, location): + self.ligatures[(self.SUBTABLE_BREAK_, location)] = self.SUBTABLE_BREAK_ + + +class MultipleSubstBuilder(LookupBuilder): + """Builds a Multiple Substitution (GSUB2) lookup. + + Users are expected to manually add substitutions to the ``mapping`` + attribute after the object has been initialized, e.g.:: + + # sub uni06C0 by uni06D5.fina hamza.above; + builder.mapping["uni06C0"] = [ "uni06D5.fina", "hamza.above"] + + Attributes: + font (``fontTools.TTLib.TTFont``): A font object. + location: A string or tuple representing the location in the original + source which produced this lookup. + mapping: An ordered dictionary mapping a glyph name to a list of + substituted glyph names. + lookupflag (int): The lookup's flag + markFilterSet: Either ``None`` if no mark filtering set is used, or + an integer representing the filtering set to be used for this + lookup. If a mark filtering set is provided, + `LOOKUP_FLAG_USE_MARK_FILTERING_SET` will be set on the lookup's + flags. + """ + + def __init__(self, font, location): + LookupBuilder.__init__(self, font, location, "GSUB", 2) + self.mapping = OrderedDict() + + def equals(self, other): + return LookupBuilder.equals(self, other) and self.mapping == other.mapping + + def build(self): + subtables = self.build_subst_subtables(self.mapping, buildMultipleSubstSubtable) + return self.buildLookup_(subtables) + + def add_subtable_break(self, location): + self.mapping[(self.SUBTABLE_BREAK_, location)] = self.SUBTABLE_BREAK_ + + +class CursivePosBuilder(LookupBuilder): + """Builds a Cursive Positioning (GPOS3) lookup. + + Attributes: + font (``fontTools.TTLib.TTFont``): A font object. + location: A string or tuple representing the location in the original + source which produced this lookup. + attachments: An ordered dictionary mapping a glyph name to a two-element + tuple of ``otTables.Anchor`` objects. + lookupflag (int): The lookup's flag + markFilterSet: Either ``None`` if no mark filtering set is used, or + an integer representing the filtering set to be used for this + lookup. If a mark filtering set is provided, + `LOOKUP_FLAG_USE_MARK_FILTERING_SET` will be set on the lookup's + flags. + """ + + def __init__(self, font, location): + LookupBuilder.__init__(self, font, location, "GPOS", 3) + self.attachments = {} + + def equals(self, other): + return ( + LookupBuilder.equals(self, other) and self.attachments == other.attachments + ) + + def add_attachment(self, location, glyphs, entryAnchor, exitAnchor): + """Adds attachment information to the cursive positioning lookup. + + Args: + location: A string or tuple representing the location in the + original source which produced this lookup. (Unused.) + glyphs: A list of glyph names sharing these entry and exit + anchor locations. + entryAnchor: A ``otTables.Anchor`` object representing the + entry anchor, or ``None`` if no entry anchor is present. + exitAnchor: A ``otTables.Anchor`` object representing the + exit anchor, or ``None`` if no exit anchor is present. + """ + for glyph in glyphs: + self.attachments[glyph] = (entryAnchor, exitAnchor) + + def build(self): + """Build the lookup. + + Returns: + An ``otTables.Lookup`` object representing the cursive + positioning lookup. + """ + st = buildCursivePosSubtable(self.attachments, self.glyphMap) + return self.buildLookup_([st]) + + +class MarkBasePosBuilder(LookupBuilder): + """Builds a Mark-To-Base Positioning (GPOS4) lookup. + + Users are expected to manually add marks and bases to the ``marks`` + and ``bases`` attributes after the object has been initialized, e.g.:: + + builder.marks["acute"] = (0, a1) + builder.marks["grave"] = (0, a1) + builder.marks["cedilla"] = (1, a2) + builder.bases["a"] = {0: a3, 1: a5} + builder.bases["b"] = {0: a4, 1: a5} + + Attributes: + font (``fontTools.TTLib.TTFont``): A font object. + location: A string or tuple representing the location in the original + source which produced this lookup. + marks: An dictionary mapping a glyph name to a two-element + tuple containing a mark class ID and ``otTables.Anchor`` object. + bases: An dictionary mapping a glyph name to a dictionary of + mark class IDs and ``otTables.Anchor`` object. + lookupflag (int): The lookup's flag + markFilterSet: Either ``None`` if no mark filtering set is used, or + an integer representing the filtering set to be used for this + lookup. If a mark filtering set is provided, + `LOOKUP_FLAG_USE_MARK_FILTERING_SET` will be set on the lookup's + flags. + """ + + def __init__(self, font, location): + LookupBuilder.__init__(self, font, location, "GPOS", 4) + self.marks = {} # glyphName -> (markClassName, anchor) + self.bases = {} # glyphName -> {markClassName: anchor} + + def equals(self, other): + return ( + LookupBuilder.equals(self, other) + and self.marks == other.marks + and self.bases == other.bases + ) + + def inferGlyphClasses(self): + result = {glyph: 1 for glyph in self.bases} + result.update({glyph: 3 for glyph in self.marks}) + return result + + def build(self): + """Build the lookup. + + Returns: + An ``otTables.Lookup`` object representing the mark-to-base + positioning lookup. + """ + markClasses = self.buildMarkClasses_(self.marks) + marks = {} + for mark, (mc, anchor) in self.marks.items(): + if mc not in markClasses: + raise ValueError("Mark class %s not found for mark glyph %s" % (mc, mark)) + marks[mark] = (markClasses[mc], anchor) + bases = {} + for glyph, anchors in self.bases.items(): + bases[glyph] = {} + for mc, anchor in anchors.items(): + if mc not in markClasses: + raise ValueError("Mark class %s not found for base glyph %s" % (mc, mark)) + bases[glyph][markClasses[mc]] = anchor + subtables = buildMarkBasePos(marks, bases, self.glyphMap) + return self.buildLookup_(subtables) + + +class MarkLigPosBuilder(LookupBuilder): + """Builds a Mark-To-Ligature Positioning (GPOS5) lookup. + + Users are expected to manually add marks and bases to the ``marks`` + and ``ligatures`` attributes after the object has been initialized, e.g.:: + + builder.marks["acute"] = (0, a1) + builder.marks["grave"] = (0, a1) + builder.marks["cedilla"] = (1, a2) + builder.ligatures["f_i"] = [ + { 0: a3, 1: a5 }, # f + { 0: a4, 1: a5 } # i + ] + + Attributes: + font (``fontTools.TTLib.TTFont``): A font object. + location: A string or tuple representing the location in the original + source which produced this lookup. + marks: An dictionary mapping a glyph name to a two-element + tuple containing a mark class ID and ``otTables.Anchor`` object. + ligatures: An dictionary mapping a glyph name to an array with one + element for each ligature component. Each array element should be + a dictionary mapping mark class IDs to ``otTables.Anchor`` objects. + lookupflag (int): The lookup's flag + markFilterSet: Either ``None`` if no mark filtering set is used, or + an integer representing the filtering set to be used for this + lookup. If a mark filtering set is provided, + `LOOKUP_FLAG_USE_MARK_FILTERING_SET` will be set on the lookup's + flags. + """ + + def __init__(self, font, location): + LookupBuilder.__init__(self, font, location, "GPOS", 5) + self.marks = {} # glyphName -> (markClassName, anchor) + self.ligatures = {} # glyphName -> [{markClassName: anchor}, ...] + + def equals(self, other): + return ( + LookupBuilder.equals(self, other) + and self.marks == other.marks + and self.ligatures == other.ligatures + ) + + def inferGlyphClasses(self): + result = {glyph: 2 for glyph in self.ligatures} + result.update({glyph: 3 for glyph in self.marks}) + return result + + def build(self): + """Build the lookup. + + Returns: + An ``otTables.Lookup`` object representing the mark-to-ligature + positioning lookup. + """ + markClasses = self.buildMarkClasses_(self.marks) + marks = { + mark: (markClasses[mc], anchor) for mark, (mc, anchor) in self.marks.items() + } + ligs = {} + for lig, components in self.ligatures.items(): + ligs[lig] = [] + for c in components: + ligs[lig].append({markClasses[mc]: a for mc, a in c.items()}) + subtables = buildMarkLigPos(marks, ligs, self.glyphMap) + return self.buildLookup_(subtables) + + +class MarkMarkPosBuilder(LookupBuilder): + """Builds a Mark-To-Mark Positioning (GPOS6) lookup. + + Users are expected to manually add marks and bases to the ``marks`` + and ``baseMarks`` attributes after the object has been initialized, e.g.:: + + builder.marks["acute"] = (0, a1) + builder.marks["grave"] = (0, a1) + builder.marks["cedilla"] = (1, a2) + builder.baseMarks["acute"] = {0: a3} + + Attributes: + font (``fontTools.TTLib.TTFont``): A font object. + location: A string or tuple representing the location in the original + source which produced this lookup. + marks: An dictionary mapping a glyph name to a two-element + tuple containing a mark class ID and ``otTables.Anchor`` object. + baseMarks: An dictionary mapping a glyph name to a dictionary + containing one item: a mark class ID and a ``otTables.Anchor`` object. + lookupflag (int): The lookup's flag + markFilterSet: Either ``None`` if no mark filtering set is used, or + an integer representing the filtering set to be used for this + lookup. If a mark filtering set is provided, + `LOOKUP_FLAG_USE_MARK_FILTERING_SET` will be set on the lookup's + flags. + """ + + def __init__(self, font, location): + LookupBuilder.__init__(self, font, location, "GPOS", 6) + self.marks = {} # glyphName -> (markClassName, anchor) + self.baseMarks = {} # glyphName -> {markClassName: anchor} + + def equals(self, other): + return ( + LookupBuilder.equals(self, other) + and self.marks == other.marks + and self.baseMarks == other.baseMarks + ) + + def inferGlyphClasses(self): + result = {glyph: 3 for glyph in self.baseMarks} + result.update({glyph: 3 for glyph in self.marks}) + return result + + def build(self): + """Build the lookup. + + Returns: + An ``otTables.Lookup`` object representing the mark-to-mark + positioning lookup. + """ + markClasses = self.buildMarkClasses_(self.marks) + markClassList = sorted(markClasses.keys(), key=markClasses.get) + marks = { + mark: (markClasses[mc], anchor) for mark, (mc, anchor) in self.marks.items() + } + + st = ot.MarkMarkPos() + st.Format = 1 + st.ClassCount = len(markClasses) + st.Mark1Coverage = buildCoverage(marks, self.glyphMap) + st.Mark2Coverage = buildCoverage(self.baseMarks, self.glyphMap) + st.Mark1Array = buildMarkArray(marks, self.glyphMap) + st.Mark2Array = ot.Mark2Array() + st.Mark2Array.Mark2Count = len(st.Mark2Coverage.glyphs) + st.Mark2Array.Mark2Record = [] + for base in st.Mark2Coverage.glyphs: + anchors = [self.baseMarks[base].get(mc) for mc in markClassList] + st.Mark2Array.Mark2Record.append(buildMark2Record(anchors)) + return self.buildLookup_([st]) + + +class ReverseChainSingleSubstBuilder(LookupBuilder): + """Builds a Reverse Chaining Contextual Single Substitution (GSUB8) lookup. + + Users are expected to manually add substitutions to the ``substitutions`` + attribute after the object has been initialized, e.g.:: + + # reversesub [a e n] d' by d.alt; + prefix = [ ["a", "e", "n"] ] + suffix = [] + mapping = { "d": "d.alt" } + builder.substitutions.append( (prefix, suffix, mapping) ) + + Attributes: + font (``fontTools.TTLib.TTFont``): A font object. + location: A string or tuple representing the location in the original + source which produced this lookup. + substitutions: A three-element tuple consisting of a prefix sequence, + a suffix sequence, and a dictionary of single substitutions. + lookupflag (int): The lookup's flag + markFilterSet: Either ``None`` if no mark filtering set is used, or + an integer representing the filtering set to be used for this + lookup. If a mark filtering set is provided, + `LOOKUP_FLAG_USE_MARK_FILTERING_SET` will be set on the lookup's + flags. + """ + + def __init__(self, font, location): + LookupBuilder.__init__(self, font, location, "GSUB", 8) + self.rules = [] # (prefix, suffix, mapping) + + def equals(self, other): + return LookupBuilder.equals(self, other) and self.rules == other.rules + + def build(self): + """Build the lookup. + + Returns: + An ``otTables.Lookup`` object representing the chained + contextual substitution lookup. + """ + subtables = [] + for prefix, suffix, mapping in self.rules: + st = ot.ReverseChainSingleSubst() + st.Format = 1 + self.setBacktrackCoverage_(prefix, st) + self.setLookAheadCoverage_(suffix, st) + st.Coverage = buildCoverage(mapping.keys(), self.glyphMap) + st.GlyphCount = len(mapping) + st.Substitute = [mapping[g] for g in st.Coverage.glyphs] + subtables.append(st) + return self.buildLookup_(subtables) + + def add_subtable_break(self, location): + # Nothing to do here, each substitution is in its own subtable. + pass + + +class SingleSubstBuilder(LookupBuilder): + """Builds a Single Substitution (GSUB1) lookup. + + Users are expected to manually add substitutions to the ``mapping`` + attribute after the object has been initialized, e.g.:: + + # sub x by y; + builder.mapping["x"] = "y" + + Attributes: + font (``fontTools.TTLib.TTFont``): A font object. + location: A string or tuple representing the location in the original + source which produced this lookup. + mapping: A dictionary mapping a single glyph name to another glyph name. + lookupflag (int): The lookup's flag + markFilterSet: Either ``None`` if no mark filtering set is used, or + an integer representing the filtering set to be used for this + lookup. If a mark filtering set is provided, + `LOOKUP_FLAG_USE_MARK_FILTERING_SET` will be set on the lookup's + flags. + """ + + def __init__(self, font, location): + LookupBuilder.__init__(self, font, location, "GSUB", 1) + self.mapping = OrderedDict() + + def equals(self, other): + return LookupBuilder.equals(self, other) and self.mapping == other.mapping + + def build(self): + """Build the lookup. + + Returns: + An ``otTables.Lookup`` object representing the multiple + substitution lookup. + """ + subtables = self.build_subst_subtables(self.mapping, buildSingleSubstSubtable) + return self.buildLookup_(subtables) + + def getAlternateGlyphs(self): + return {glyph: set([repl]) for glyph, repl in self.mapping.items()} + + def add_subtable_break(self, location): + self.mapping[(self.SUBTABLE_BREAK_, location)] = self.SUBTABLE_BREAK_ + + +class ClassPairPosSubtableBuilder(object): + """Builds class-based Pair Positioning (GPOS2 format 2) subtables. + + Note that this does *not* build a GPOS2 ``otTables.Lookup`` directly, + but builds a list of ``otTables.PairPos`` subtables. It is used by the + :class:`PairPosBuilder` below. + + Attributes: + builder (PairPosBuilder): A pair positioning lookup builder. + """ + + def __init__(self, builder): + self.builder_ = builder + self.classDef1_, self.classDef2_ = None, None + self.values_ = {} # (glyphclass1, glyphclass2) --> (value1, value2) + self.forceSubtableBreak_ = False + self.subtables_ = [] + + def addPair(self, gc1, value1, gc2, value2): + """Add a pair positioning rule. + + Args: + gc1: A set of glyph names for the "left" glyph + value1: An ``otTables.ValueRecord`` object for the left glyph's + positioning. + gc2: A set of glyph names for the "right" glyph + value2: An ``otTables.ValueRecord`` object for the right glyph's + positioning. + """ + mergeable = ( + not self.forceSubtableBreak_ + and self.classDef1_ is not None + and self.classDef1_.canAdd(gc1) + and self.classDef2_ is not None + and self.classDef2_.canAdd(gc2) + ) + if not mergeable: + self.flush_() + self.classDef1_ = ClassDefBuilder(useClass0=True) + self.classDef2_ = ClassDefBuilder(useClass0=False) + self.values_ = {} + self.classDef1_.add(gc1) + self.classDef2_.add(gc2) + self.values_[(gc1, gc2)] = (value1, value2) + + def addSubtableBreak(self): + """Add an explicit subtable break at this point.""" + self.forceSubtableBreak_ = True + + def subtables(self): + """Return the list of ``otTables.PairPos`` subtables constructed.""" + self.flush_() + return self.subtables_ + + def flush_(self): + if self.classDef1_ is None or self.classDef2_ is None: + return + st = buildPairPosClassesSubtable(self.values_, self.builder_.glyphMap) + if st.Coverage is None: + return + self.subtables_.append(st) + self.forceSubtableBreak_ = False + + +class PairPosBuilder(LookupBuilder): + """Builds a Pair Positioning (GPOS2) lookup. + + Attributes: + font (``fontTools.TTLib.TTFont``): A font object. + location: A string or tuple representing the location in the original + source which produced this lookup. + pairs: An array of class-based pair positioning tuples. Usually + manipulated with the :meth:`addClassPair` method below. + glyphPairs: A dictionary mapping a tuple of glyph names to a tuple + of ``otTables.ValueRecord`` objects. Usually manipulated with the + :meth:`addGlyphPair` method below. + lookupflag (int): The lookup's flag + markFilterSet: Either ``None`` if no mark filtering set is used, or + an integer representing the filtering set to be used for this + lookup. If a mark filtering set is provided, + `LOOKUP_FLAG_USE_MARK_FILTERING_SET` will be set on the lookup's + flags. + """ + + def __init__(self, font, location): + LookupBuilder.__init__(self, font, location, "GPOS", 2) + self.pairs = [] # [(gc1, value1, gc2, value2)*] + self.glyphPairs = {} # (glyph1, glyph2) --> (value1, value2) + self.locations = {} # (gc1, gc2) --> (filepath, line, column) + + def addClassPair(self, location, glyphclass1, value1, glyphclass2, value2): + """Add a class pair positioning rule to the current lookup. + + Args: + location: A string or tuple representing the location in the + original source which produced this rule. Unused. + glyphclass1: A set of glyph names for the "left" glyph in the pair. + value1: A ``otTables.ValueRecord`` for positioning the left glyph. + glyphclass2: A set of glyph names for the "right" glyph in the pair. + value2: A ``otTables.ValueRecord`` for positioning the right glyph. + """ + self.pairs.append((glyphclass1, value1, glyphclass2, value2)) + + def addGlyphPair(self, location, glyph1, value1, glyph2, value2): + """Add a glyph pair positioning rule to the current lookup. + + Args: + location: A string or tuple representing the location in the + original source which produced this rule. + glyph1: A glyph name for the "left" glyph in the pair. + value1: A ``otTables.ValueRecord`` for positioning the left glyph. + glyph2: A glyph name for the "right" glyph in the pair. + value2: A ``otTables.ValueRecord`` for positioning the right glyph. + """ + key = (glyph1, glyph2) + oldValue = self.glyphPairs.get(key, None) + if oldValue is not None: + # the Feature File spec explicitly allows specific pairs generated + # by an 'enum' rule to be overridden by preceding single pairs + otherLoc = self.locations[key] + log.debug( + "Already defined position for pair %s %s at %s; " + "choosing the first value", + glyph1, + glyph2, + otherLoc, + ) + else: + self.glyphPairs[key] = (value1, value2) + self.locations[key] = location + + def add_subtable_break(self, location): + self.pairs.append( + ( + self.SUBTABLE_BREAK_, + self.SUBTABLE_BREAK_, + self.SUBTABLE_BREAK_, + self.SUBTABLE_BREAK_, + ) + ) + + def equals(self, other): + return ( + LookupBuilder.equals(self, other) + and self.glyphPairs == other.glyphPairs + and self.pairs == other.pairs + ) + + def build(self): + """Build the lookup. + + Returns: + An ``otTables.Lookup`` object representing the pair positioning + lookup. + """ + builders = {} + builder = None + for glyphclass1, value1, glyphclass2, value2 in self.pairs: + if glyphclass1 is self.SUBTABLE_BREAK_: + if builder is not None: + builder.addSubtableBreak() + continue + valFormat1, valFormat2 = 0, 0 + if value1: + valFormat1 = value1.getFormat() + if value2: + valFormat2 = value2.getFormat() + builder = builders.get((valFormat1, valFormat2)) + if builder is None: + builder = ClassPairPosSubtableBuilder(self) + builders[(valFormat1, valFormat2)] = builder + builder.addPair(glyphclass1, value1, glyphclass2, value2) + subtables = [] + if self.glyphPairs: + subtables.extend(buildPairPosGlyphs(self.glyphPairs, self.glyphMap)) + for key in sorted(builders.keys()): + subtables.extend(builders[key].subtables()) + lookup = self.buildLookup_(subtables) + + # Compact the lookup + # This is a good moment to do it because the compaction should create + # smaller subtables, which may prevent overflows from happening. + mode = os.environ.get(GPOS_COMPACT_MODE_ENV_KEY, GPOS_COMPACT_MODE_DEFAULT) + if mode and mode != "0": + log.info("Compacting GPOS...") + compact_lookup(self.font, mode, lookup) + + return lookup + + +class SinglePosBuilder(LookupBuilder): + """Builds a Single Positioning (GPOS1) lookup. + + Attributes: + font (``fontTools.TTLib.TTFont``): A font object. + location: A string or tuple representing the location in the original + source which produced this lookup. + mapping: A dictionary mapping a glyph name to a ``otTables.ValueRecord`` + objects. Usually manipulated with the :meth:`add_pos` method below. + lookupflag (int): The lookup's flag + markFilterSet: Either ``None`` if no mark filtering set is used, or + an integer representing the filtering set to be used for this + lookup. If a mark filtering set is provided, + `LOOKUP_FLAG_USE_MARK_FILTERING_SET` will be set on the lookup's + flags. + """ + + def __init__(self, font, location): + LookupBuilder.__init__(self, font, location, "GPOS", 1) + self.locations = {} # glyph -> (filename, line, column) + self.mapping = {} # glyph -> ot.ValueRecord + + def add_pos(self, location, glyph, otValueRecord): + """Add a single positioning rule. + + Args: + location: A string or tuple representing the location in the + original source which produced this lookup. + glyph: A glyph name. + otValueRection: A ``otTables.ValueRecord`` used to position the + glyph. + """ + if not self.can_add(glyph, otValueRecord): + otherLoc = self.locations[glyph] + raise OpenTypeLibError( + 'Already defined different position for glyph "%s" at %s' + % (glyph, otherLoc), + location, + ) + if otValueRecord: + self.mapping[glyph] = otValueRecord + self.locations[glyph] = location + + def can_add(self, glyph, value): + assert isinstance(value, ValueRecord) + curValue = self.mapping.get(glyph) + return curValue is None or curValue == value + + def equals(self, other): + return LookupBuilder.equals(self, other) and self.mapping == other.mapping + + def build(self): + """Build the lookup. + + Returns: + An ``otTables.Lookup`` object representing the single positioning + lookup. + """ + subtables = buildSinglePos(self.mapping, self.glyphMap) + return self.buildLookup_(subtables) + + +# GSUB + + +def buildSingleSubstSubtable(mapping): + """Builds a single substitution (GSUB1) subtable. + + Note that if you are implementing a layout compiler, you may find it more + flexible to use + :py:class:`fontTools.otlLib.lookupBuilders.SingleSubstBuilder` instead. + + Args: + mapping: A dictionary mapping input glyph names to output glyph names. + + Returns: + An ``otTables.SingleSubst`` object, or ``None`` if the mapping dictionary + is empty. + """ + if not mapping: + return None + self = ot.SingleSubst() + self.mapping = dict(mapping) + return self + + +def buildMultipleSubstSubtable(mapping): + """Builds a multiple substitution (GSUB2) subtable. + + Note that if you are implementing a layout compiler, you may find it more + flexible to use + :py:class:`fontTools.otlLib.lookupBuilders.MultipleSubstBuilder` instead. + + Example:: + + # sub uni06C0 by uni06D5.fina hamza.above + # sub uni06C2 by uni06C1.fina hamza.above; + + subtable = buildMultipleSubstSubtable({ + "uni06C0": [ "uni06D5.fina", "hamza.above"], + "uni06C2": [ "uni06D1.fina", "hamza.above"] + }) + + Args: + mapping: A dictionary mapping input glyph names to a list of output + glyph names. + + Returns: + An ``otTables.MultipleSubst`` object or ``None`` if the mapping dictionary + is empty. + """ + if not mapping: + return None + self = ot.MultipleSubst() + self.mapping = dict(mapping) + return self + + +def buildAlternateSubstSubtable(mapping): + """Builds an alternate substitution (GSUB3) subtable. + + Note that if you are implementing a layout compiler, you may find it more + flexible to use + :py:class:`fontTools.otlLib.lookupBuilders.AlternateSubstBuilder` instead. + + Args: + mapping: A dictionary mapping input glyph names to a list of output + glyph names. + + Returns: + An ``otTables.AlternateSubst`` object or ``None`` if the mapping dictionary + is empty. + """ + if not mapping: + return None + self = ot.AlternateSubst() + self.alternates = dict(mapping) + return self + + +def _getLigatureKey(components): + # Computes a key for ordering ligatures in a GSUB Type-4 lookup. + + # When building the OpenType lookup, we need to make sure that + # the longest sequence of components is listed first, so we + # use the negative length as the primary key for sorting. + # To make buildLigatureSubstSubtable() deterministic, we use the + # component sequence as the secondary key. + + # For example, this will sort (f,f,f) < (f,f,i) < (f,f) < (f,i) < (f,l). + return (-len(components), components) + + +def buildLigatureSubstSubtable(mapping): + """Builds a ligature substitution (GSUB4) subtable. + + Note that if you are implementing a layout compiler, you may find it more + flexible to use + :py:class:`fontTools.otlLib.lookupBuilders.LigatureSubstBuilder` instead. + + Example:: + + # sub f f i by f_f_i; + # sub f i by f_i; + + subtable = buildLigatureSubstSubtable({ + ("f", "f", "i"): "f_f_i", + ("f", "i"): "f_i", + }) + + Args: + mapping: A dictionary mapping tuples of glyph names to output + glyph names. + + Returns: + An ``otTables.LigatureSubst`` object or ``None`` if the mapping dictionary + is empty. + """ + + if not mapping: + return None + self = ot.LigatureSubst() + # The following single line can replace the rest of this function + # with fontTools >= 3.1: + # self.ligatures = dict(mapping) + self.ligatures = {} + for components in sorted(mapping.keys(), key=_getLigatureKey): + ligature = ot.Ligature() + ligature.Component = components[1:] + ligature.CompCount = len(ligature.Component) + 1 + ligature.LigGlyph = mapping[components] + firstGlyph = components[0] + self.ligatures.setdefault(firstGlyph, []).append(ligature) + return self + + +# GPOS + + +def buildAnchor(x, y, point=None, deviceX=None, deviceY=None): + """Builds an Anchor table. + + This determines the appropriate anchor format based on the passed parameters. + + Args: + x (int): X coordinate. + y (int): Y coordinate. + point (int): Index of glyph contour point, if provided. + deviceX (``otTables.Device``): X coordinate device table, if provided. + deviceY (``otTables.Device``): Y coordinate device table, if provided. + + Returns: + An ``otTables.Anchor`` object. + """ + self = ot.Anchor() + self.XCoordinate, self.YCoordinate = x, y + self.Format = 1 + if point is not None: + self.AnchorPoint = point + self.Format = 2 + if deviceX is not None or deviceY is not None: + assert ( + self.Format == 1 + ), "Either point, or both of deviceX/deviceY, must be None." + self.XDeviceTable = deviceX + self.YDeviceTable = deviceY + self.Format = 3 + return self + + +def buildBaseArray(bases, numMarkClasses, glyphMap): + """Builds a base array record. + + As part of building mark-to-base positioning rules, you will need to define + a ``BaseArray`` record, which "defines for each base glyph an array of + anchors, one for each mark class." This function builds the base array + subtable. + + Example:: + + bases = {"a": {0: a3, 1: a5}, "b": {0: a4, 1: a5}} + basearray = buildBaseArray(bases, 2, font.getReverseGlyphMap()) + + Args: + bases (dict): A dictionary mapping anchors to glyphs; the keys being + glyph names, and the values being dictionaries mapping mark class ID + to the appropriate ``otTables.Anchor`` object used for attaching marks + of that class. + numMarkClasses (int): The total number of mark classes for which anchors + are defined. + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + + Returns: + An ``otTables.BaseArray`` object. + """ + self = ot.BaseArray() + self.BaseRecord = [] + for base in sorted(bases, key=glyphMap.__getitem__): + b = bases[base] + anchors = [b.get(markClass) for markClass in range(numMarkClasses)] + self.BaseRecord.append(buildBaseRecord(anchors)) + self.BaseCount = len(self.BaseRecord) + return self + + +def buildBaseRecord(anchors): + # [otTables.Anchor, otTables.Anchor, ...] --> otTables.BaseRecord + self = ot.BaseRecord() + self.BaseAnchor = anchors + return self + + +def buildComponentRecord(anchors): + """Builds a component record. + + As part of building mark-to-ligature positioning rules, you will need to + define ``ComponentRecord`` objects, which contain "an array of offsets... + to the Anchor tables that define all the attachment points used to attach + marks to the component." This function builds the component record. + + Args: + anchors: A list of ``otTables.Anchor`` objects or ``None``. + + Returns: + A ``otTables.ComponentRecord`` object or ``None`` if no anchors are + supplied. + """ + if not anchors: + return None + self = ot.ComponentRecord() + self.LigatureAnchor = anchors + return self + + +def buildCursivePosSubtable(attach, glyphMap): + """Builds a cursive positioning (GPOS3) subtable. + + Cursive positioning lookups are made up of a coverage table of glyphs, + and a set of ``EntryExitRecord`` records containing the anchors for + each glyph. This function builds the cursive positioning subtable. + + Example:: + + subtable = buildCursivePosSubtable({ + "AlifIni": (None, buildAnchor(0, 50)), + "BehMed": (buildAnchor(500,250), buildAnchor(0,50)), + # ... + }, font.getReverseGlyphMap()) + + Args: + attach (dict): A mapping between glyph names and a tuple of two + ``otTables.Anchor`` objects representing entry and exit anchors. + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + + Returns: + An ``otTables.CursivePos`` object, or ``None`` if the attachment + dictionary was empty. + """ + if not attach: + return None + self = ot.CursivePos() + self.Format = 1 + self.Coverage = buildCoverage(attach.keys(), glyphMap) + self.EntryExitRecord = [] + for glyph in self.Coverage.glyphs: + entryAnchor, exitAnchor = attach[glyph] + rec = ot.EntryExitRecord() + rec.EntryAnchor = entryAnchor + rec.ExitAnchor = exitAnchor + self.EntryExitRecord.append(rec) + self.EntryExitCount = len(self.EntryExitRecord) + return self + + +def buildDevice(deltas): + """Builds a Device record as part of a ValueRecord or Anchor. + + Device tables specify size-specific adjustments to value records + and anchors to reflect changes based on the resolution of the output. + For example, one could specify that an anchor's Y position should be + increased by 1 pixel when displayed at 8 pixels per em. This routine + builds device records. + + Args: + deltas: A dictionary mapping pixels-per-em sizes to the delta + adjustment in pixels when the font is displayed at that size. + + Returns: + An ``otTables.Device`` object if any deltas were supplied, or + ``None`` otherwise. + """ + if not deltas: + return None + self = ot.Device() + keys = deltas.keys() + self.StartSize = startSize = min(keys) + self.EndSize = endSize = max(keys) + assert 0 <= startSize <= endSize + self.DeltaValue = deltaValues = [ + deltas.get(size, 0) for size in range(startSize, endSize + 1) + ] + maxDelta = max(deltaValues) + minDelta = min(deltaValues) + assert minDelta > -129 and maxDelta < 128 + if minDelta > -3 and maxDelta < 2: + self.DeltaFormat = 1 + elif minDelta > -9 and maxDelta < 8: + self.DeltaFormat = 2 + else: + self.DeltaFormat = 3 + return self + + +def buildLigatureArray(ligs, numMarkClasses, glyphMap): + """Builds a LigatureArray subtable. + + As part of building a mark-to-ligature lookup, you will need to define + the set of anchors (for each mark class) on each component of the ligature + where marks can be attached. For example, for an Arabic divine name ligature + (lam lam heh), you may want to specify mark attachment positioning for + superior marks (fatha, etc.) and inferior marks (kasra, etc.) on each glyph + of the ligature. This routine builds the ligature array record. + + Example:: + + buildLigatureArray({ + "lam-lam-heh": [ + { 0: superiorAnchor1, 1: inferiorAnchor1 }, # attach points for lam1 + { 0: superiorAnchor2, 1: inferiorAnchor2 }, # attach points for lam2 + { 0: superiorAnchor3, 1: inferiorAnchor3 }, # attach points for heh + ] + }, 2, font.getReverseGlyphMap()) + + Args: + ligs (dict): A mapping of ligature names to an array of dictionaries: + for each component glyph in the ligature, an dictionary mapping + mark class IDs to anchors. + numMarkClasses (int): The number of mark classes. + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + + Returns: + An ``otTables.LigatureArray`` object if deltas were supplied. + """ + self = ot.LigatureArray() + self.LigatureAttach = [] + for lig in sorted(ligs, key=glyphMap.__getitem__): + anchors = [] + for component in ligs[lig]: + anchors.append([component.get(mc) for mc in range(numMarkClasses)]) + self.LigatureAttach.append(buildLigatureAttach(anchors)) + self.LigatureCount = len(self.LigatureAttach) + return self + + +def buildLigatureAttach(components): + # [[Anchor, Anchor], [Anchor, Anchor, Anchor]] --> LigatureAttach + self = ot.LigatureAttach() + self.ComponentRecord = [buildComponentRecord(c) for c in components] + self.ComponentCount = len(self.ComponentRecord) + return self + + +def buildMarkArray(marks, glyphMap): + """Builds a mark array subtable. + + As part of building mark-to-* positioning rules, you will need to define + a MarkArray subtable, which "defines the class and the anchor point + for a mark glyph." This function builds the mark array subtable. + + Example:: + + mark = { + "acute": (0, buildAnchor(300,712)), + # ... + } + markarray = buildMarkArray(marks, font.getReverseGlyphMap()) + + Args: + marks (dict): A dictionary mapping anchors to glyphs; the keys being + glyph names, and the values being a tuple of mark class number and + an ``otTables.Anchor`` object representing the mark's attachment + point. + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + + Returns: + An ``otTables.MarkArray`` object. + """ + self = ot.MarkArray() + self.MarkRecord = [] + for mark in sorted(marks.keys(), key=glyphMap.__getitem__): + markClass, anchor = marks[mark] + markrec = buildMarkRecord(markClass, anchor) + self.MarkRecord.append(markrec) + self.MarkCount = len(self.MarkRecord) + return self + + +def buildMarkBasePos(marks, bases, glyphMap): + """Build a list of MarkBasePos (GPOS4) subtables. + + This routine turns a set of marks and bases into a list of mark-to-base + positioning subtables. Currently the list will contain a single subtable + containing all marks and bases, although at a later date it may return the + optimal list of subtables subsetting the marks and bases into groups which + save space. See :func:`buildMarkBasePosSubtable` below. + + Note that if you are implementing a layout compiler, you may find it more + flexible to use + :py:class:`fontTools.otlLib.lookupBuilders.MarkBasePosBuilder` instead. + + Example:: + + # a1, a2, a3, a4, a5 = buildAnchor(500, 100), ... + + marks = {"acute": (0, a1), "grave": (0, a1), "cedilla": (1, a2)} + bases = {"a": {0: a3, 1: a5}, "b": {0: a4, 1: a5}} + markbaseposes = buildMarkBasePos(marks, bases, font.getReverseGlyphMap()) + + Args: + marks (dict): A dictionary mapping anchors to glyphs; the keys being + glyph names, and the values being a tuple of mark class number and + an ``otTables.Anchor`` object representing the mark's attachment + point. (See :func:`buildMarkArray`.) + bases (dict): A dictionary mapping anchors to glyphs; the keys being + glyph names, and the values being dictionaries mapping mark class ID + to the appropriate ``otTables.Anchor`` object used for attaching marks + of that class. (See :func:`buildBaseArray`.) + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + + Returns: + A list of ``otTables.MarkBasePos`` objects. + """ + # TODO: Consider emitting multiple subtables to save space. + # Partition the marks and bases into disjoint subsets, so that + # MarkBasePos rules would only access glyphs from a single + # subset. This would likely lead to smaller mark/base + # matrices, so we might be able to omit many of the empty + # anchor tables that we currently produce. Of course, this + # would only work if the MarkBasePos rules of real-world fonts + # allow partitioning into multiple subsets. We should find out + # whether this is the case; if so, implement the optimization. + # On the other hand, a very large number of subtables could + # slow down layout engines; so this would need profiling. + return [buildMarkBasePosSubtable(marks, bases, glyphMap)] + + +def buildMarkBasePosSubtable(marks, bases, glyphMap): + """Build a single MarkBasePos (GPOS4) subtable. + + This builds a mark-to-base lookup subtable containing all of the referenced + marks and bases. See :func:`buildMarkBasePos`. + + Args: + marks (dict): A dictionary mapping anchors to glyphs; the keys being + glyph names, and the values being a tuple of mark class number and + an ``otTables.Anchor`` object representing the mark's attachment + point. (See :func:`buildMarkArray`.) + bases (dict): A dictionary mapping anchors to glyphs; the keys being + glyph names, and the values being dictionaries mapping mark class ID + to the appropriate ``otTables.Anchor`` object used for attaching marks + of that class. (See :func:`buildBaseArray`.) + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + + Returns: + A ``otTables.MarkBasePos`` object. + """ + self = ot.MarkBasePos() + self.Format = 1 + self.MarkCoverage = buildCoverage(marks, glyphMap) + self.MarkArray = buildMarkArray(marks, glyphMap) + self.ClassCount = max([mc for mc, _ in marks.values()]) + 1 + self.BaseCoverage = buildCoverage(bases, glyphMap) + self.BaseArray = buildBaseArray(bases, self.ClassCount, glyphMap) + return self + + +def buildMarkLigPos(marks, ligs, glyphMap): + """Build a list of MarkLigPos (GPOS5) subtables. + + This routine turns a set of marks and ligatures into a list of mark-to-ligature + positioning subtables. Currently the list will contain a single subtable + containing all marks and ligatures, although at a later date it may return + the optimal list of subtables subsetting the marks and ligatures into groups + which save space. See :func:`buildMarkLigPosSubtable` below. + + Note that if you are implementing a layout compiler, you may find it more + flexible to use + :py:class:`fontTools.otlLib.lookupBuilders.MarkLigPosBuilder` instead. + + Example:: + + # a1, a2, a3, a4, a5 = buildAnchor(500, 100), ... + marks = { + "acute": (0, a1), + "grave": (0, a1), + "cedilla": (1, a2) + } + ligs = { + "f_i": [ + { 0: a3, 1: a5 }, # f + { 0: a4, 1: a5 } # i + ], + # "c_t": [{...}, {...}] + } + markligposes = buildMarkLigPos(marks, ligs, + font.getReverseGlyphMap()) + + Args: + marks (dict): A dictionary mapping anchors to glyphs; the keys being + glyph names, and the values being a tuple of mark class number and + an ``otTables.Anchor`` object representing the mark's attachment + point. (See :func:`buildMarkArray`.) + ligs (dict): A mapping of ligature names to an array of dictionaries: + for each component glyph in the ligature, an dictionary mapping + mark class IDs to anchors. (See :func:`buildLigatureArray`.) + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + + Returns: + A list of ``otTables.MarkLigPos`` objects. + + """ + # TODO: Consider splitting into multiple subtables to save space, + # as with MarkBasePos, this would be a trade-off that would need + # profiling. And, depending on how typical fonts are structured, + # it might not be worth doing at all. + return [buildMarkLigPosSubtable(marks, ligs, glyphMap)] + + +def buildMarkLigPosSubtable(marks, ligs, glyphMap): + """Build a single MarkLigPos (GPOS5) subtable. + + This builds a mark-to-base lookup subtable containing all of the referenced + marks and bases. See :func:`buildMarkLigPos`. + + Args: + marks (dict): A dictionary mapping anchors to glyphs; the keys being + glyph names, and the values being a tuple of mark class number and + an ``otTables.Anchor`` object representing the mark's attachment + point. (See :func:`buildMarkArray`.) + ligs (dict): A mapping of ligature names to an array of dictionaries: + for each component glyph in the ligature, an dictionary mapping + mark class IDs to anchors. (See :func:`buildLigatureArray`.) + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + + Returns: + A ``otTables.MarkLigPos`` object. + """ + self = ot.MarkLigPos() + self.Format = 1 + self.MarkCoverage = buildCoverage(marks, glyphMap) + self.MarkArray = buildMarkArray(marks, glyphMap) + self.ClassCount = max([mc for mc, _ in marks.values()]) + 1 + self.LigatureCoverage = buildCoverage(ligs, glyphMap) + self.LigatureArray = buildLigatureArray(ligs, self.ClassCount, glyphMap) + return self + + +def buildMarkRecord(classID, anchor): + assert isinstance(classID, int) + assert isinstance(anchor, ot.Anchor) + self = ot.MarkRecord() + self.Class = classID + self.MarkAnchor = anchor + return self + + +def buildMark2Record(anchors): + # [otTables.Anchor, otTables.Anchor, ...] --> otTables.Mark2Record + self = ot.Mark2Record() + self.Mark2Anchor = anchors + return self + + +def _getValueFormat(f, values, i): + # Helper for buildPairPos{Glyphs|Classes}Subtable. + if f is not None: + return f + mask = 0 + for value in values: + if value is not None and value[i] is not None: + mask |= value[i].getFormat() + return mask + + +def buildPairPosClassesSubtable(pairs, glyphMap, valueFormat1=None, valueFormat2=None): + """Builds a class pair adjustment (GPOS2 format 2) subtable. + + Kerning tables are generally expressed as pair positioning tables using + class-based pair adjustments. This routine builds format 2 PairPos + subtables. + + Note that if you are implementing a layout compiler, you may find it more + flexible to use + :py:class:`fontTools.otlLib.lookupBuilders.ClassPairPosSubtableBuilder` + instead, as this takes care of ensuring that the supplied pairs can be + formed into non-overlapping classes and emitting individual subtables + whenever the non-overlapping requirement means that a new subtable is + required. + + Example:: + + pairs = {} + + pairs[( + [ "K", "X" ], + [ "W", "V" ] + )] = ( buildValue(xAdvance=+5), buildValue() ) + # pairs[(... , ...)] = (..., ...) + + pairpos = buildPairPosClassesSubtable(pairs, font.getReverseGlyphMap()) + + Args: + pairs (dict): Pair positioning data; the keys being a two-element + tuple of lists of glyphnames, and the values being a two-element + tuple of ``otTables.ValueRecord`` objects. + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + valueFormat1: Force the "left" value records to the given format. + valueFormat2: Force the "right" value records to the given format. + + Returns: + A ``otTables.PairPos`` object. + """ + coverage = set() + classDef1 = ClassDefBuilder(useClass0=True) + classDef2 = ClassDefBuilder(useClass0=False) + for gc1, gc2 in sorted(pairs): + coverage.update(gc1) + classDef1.add(gc1) + classDef2.add(gc2) + self = ot.PairPos() + self.Format = 2 + valueFormat1 = self.ValueFormat1 = _getValueFormat(valueFormat1, pairs.values(), 0) + valueFormat2 = self.ValueFormat2 = _getValueFormat(valueFormat2, pairs.values(), 1) + self.Coverage = buildCoverage(coverage, glyphMap) + self.ClassDef1 = classDef1.build() + self.ClassDef2 = classDef2.build() + classes1 = classDef1.classes() + classes2 = classDef2.classes() + self.Class1Record = [] + for c1 in classes1: + rec1 = ot.Class1Record() + rec1.Class2Record = [] + self.Class1Record.append(rec1) + for c2 in classes2: + rec2 = ot.Class2Record() + val1, val2 = pairs.get((c1, c2), (None, None)) + rec2.Value1 = ValueRecord(src=val1, valueFormat=valueFormat1) if valueFormat1 else None + rec2.Value2 = ValueRecord(src=val2, valueFormat=valueFormat2) if valueFormat2 else None + rec1.Class2Record.append(rec2) + self.Class1Count = len(self.Class1Record) + self.Class2Count = len(classes2) + return self + + +def buildPairPosGlyphs(pairs, glyphMap): + """Builds a list of glyph-based pair adjustment (GPOS2 format 1) subtables. + + This organises a list of pair positioning adjustments into subtables based + on common value record formats. + + Note that if you are implementing a layout compiler, you may find it more + flexible to use + :py:class:`fontTools.otlLib.lookupBuilders.PairPosBuilder` + instead. + + Example:: + + pairs = { + ("K", "W"): ( buildValue(xAdvance=+5), buildValue() ), + ("K", "V"): ( buildValue(xAdvance=+5), buildValue() ), + # ... + } + + subtables = buildPairPosGlyphs(pairs, font.getReverseGlyphMap()) + + Args: + pairs (dict): Pair positioning data; the keys being a two-element + tuple of glyphnames, and the values being a two-element + tuple of ``otTables.ValueRecord`` objects. + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + + Returns: + A list of ``otTables.PairPos`` objects. + """ + + p = {} # (formatA, formatB) --> {(glyphA, glyphB): (valA, valB)} + for (glyphA, glyphB), (valA, valB) in pairs.items(): + formatA = valA.getFormat() if valA is not None else 0 + formatB = valB.getFormat() if valB is not None else 0 + pos = p.setdefault((formatA, formatB), {}) + pos[(glyphA, glyphB)] = (valA, valB) + return [ + buildPairPosGlyphsSubtable(pos, glyphMap, formatA, formatB) + for ((formatA, formatB), pos) in sorted(p.items()) + ] + + +def buildPairPosGlyphsSubtable(pairs, glyphMap, valueFormat1=None, valueFormat2=None): + """Builds a single glyph-based pair adjustment (GPOS2 format 1) subtable. + + This builds a PairPos subtable from a dictionary of glyph pairs and + their positioning adjustments. See also :func:`buildPairPosGlyphs`. + + Note that if you are implementing a layout compiler, you may find it more + flexible to use + :py:class:`fontTools.otlLib.lookupBuilders.PairPosBuilder` instead. + + Example:: + + pairs = { + ("K", "W"): ( buildValue(xAdvance=+5), buildValue() ), + ("K", "V"): ( buildValue(xAdvance=+5), buildValue() ), + # ... + } + + pairpos = buildPairPosGlyphsSubtable(pairs, font.getReverseGlyphMap()) + + Args: + pairs (dict): Pair positioning data; the keys being a two-element + tuple of glyphnames, and the values being a two-element + tuple of ``otTables.ValueRecord`` objects. + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + valueFormat1: Force the "left" value records to the given format. + valueFormat2: Force the "right" value records to the given format. + + Returns: + A ``otTables.PairPos`` object. + """ + self = ot.PairPos() + self.Format = 1 + valueFormat1 = self.ValueFormat1 = _getValueFormat(valueFormat1, pairs.values(), 0) + valueFormat2 = self.ValueFormat2 = _getValueFormat(valueFormat2, pairs.values(), 1) + p = {} + for (glyphA, glyphB), (valA, valB) in pairs.items(): + p.setdefault(glyphA, []).append((glyphB, valA, valB)) + self.Coverage = buildCoverage({g for g, _ in pairs.keys()}, glyphMap) + self.PairSet = [] + for glyph in self.Coverage.glyphs: + ps = ot.PairSet() + ps.PairValueRecord = [] + self.PairSet.append(ps) + for glyph2, val1, val2 in sorted(p[glyph], key=lambda x: glyphMap[x[0]]): + pvr = ot.PairValueRecord() + pvr.SecondGlyph = glyph2 + pvr.Value1 = ValueRecord(src=val1, valueFormat=valueFormat1) if valueFormat1 else None + pvr.Value2 = ValueRecord(src=val2, valueFormat=valueFormat2) if valueFormat2 else None + ps.PairValueRecord.append(pvr) + ps.PairValueCount = len(ps.PairValueRecord) + self.PairSetCount = len(self.PairSet) + return self + + +def buildSinglePos(mapping, glyphMap): + """Builds a list of single adjustment (GPOS1) subtables. + + This builds a list of SinglePos subtables from a dictionary of glyph + names and their positioning adjustments. The format of the subtables are + determined to optimize the size of the resulting subtables. + See also :func:`buildSinglePosSubtable`. + + Note that if you are implementing a layout compiler, you may find it more + flexible to use + :py:class:`fontTools.otlLib.lookupBuilders.SinglePosBuilder` instead. + + Example:: + + mapping = { + "V": buildValue({ "xAdvance" : +5 }), + # ... + } + + subtables = buildSinglePos(pairs, font.getReverseGlyphMap()) + + Args: + mapping (dict): A mapping between glyphnames and + ``otTables.ValueRecord`` objects. + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + + Returns: + A list of ``otTables.SinglePos`` objects. + """ + result, handled = [], set() + # In SinglePos format 1, the covered glyphs all share the same ValueRecord. + # In format 2, each glyph has its own ValueRecord, but these records + # all have the same properties (eg., all have an X but no Y placement). + coverages, masks, values = {}, {}, {} + for glyph, value in mapping.items(): + key = _getSinglePosValueKey(value) + coverages.setdefault(key, []).append(glyph) + masks.setdefault(key[0], []).append(key) + values[key] = value + + # If a ValueRecord is shared between multiple glyphs, we generate + # a SinglePos format 1 subtable; that is the most compact form. + for key, glyphs in coverages.items(): + # 5 ushorts is the length of introducing another sublookup + if len(glyphs) * _getSinglePosValueSize(key) > 5: + format1Mapping = {g: values[key] for g in glyphs} + result.append(buildSinglePosSubtable(format1Mapping, glyphMap)) + handled.add(key) + + # In the remaining ValueRecords, look for those whose valueFormat + # (the set of used properties) is shared between multiple records. + # These will get encoded in format 2. + for valueFormat, keys in masks.items(): + f2 = [k for k in keys if k not in handled] + if len(f2) > 1: + format2Mapping = {} + for k in f2: + format2Mapping.update((g, values[k]) for g in coverages[k]) + result.append(buildSinglePosSubtable(format2Mapping, glyphMap)) + handled.update(f2) + + # The remaining ValueRecords are only used by a few glyphs, normally + # one. We encode these in format 1 again. + for key, glyphs in coverages.items(): + if key not in handled: + for g in glyphs: + st = buildSinglePosSubtable({g: values[key]}, glyphMap) + result.append(st) + + # When the OpenType layout engine traverses the subtables, it will + # stop after the first matching subtable. Therefore, we sort the + # resulting subtables by decreasing coverage size; this increases + # the chance that the layout engine can do an early exit. (Of course, + # this would only be true if all glyphs were equally frequent, which + # is not really the case; but we do not know their distribution). + # If two subtables cover the same number of glyphs, we sort them + # by glyph ID so that our output is deterministic. + result.sort(key=lambda t: _getSinglePosTableKey(t, glyphMap)) + return result + + +def buildSinglePosSubtable(values, glyphMap): + """Builds a single adjustment (GPOS1) subtable. + + This builds a list of SinglePos subtables from a dictionary of glyph + names and their positioning adjustments. The format of the subtable is + determined to optimize the size of the output. + See also :func:`buildSinglePos`. + + Note that if you are implementing a layout compiler, you may find it more + flexible to use + :py:class:`fontTools.otlLib.lookupBuilders.SinglePosBuilder` instead. + + Example:: + + mapping = { + "V": buildValue({ "xAdvance" : +5 }), + # ... + } + + subtable = buildSinglePos(pairs, font.getReverseGlyphMap()) + + Args: + mapping (dict): A mapping between glyphnames and + ``otTables.ValueRecord`` objects. + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + + Returns: + A ``otTables.SinglePos`` object. + """ + self = ot.SinglePos() + self.Coverage = buildCoverage(values.keys(), glyphMap) + valueFormat = self.ValueFormat = reduce(int.__or__, [v.getFormat() for v in values.values()], 0) + valueRecords = [ValueRecord(src=values[g], valueFormat=valueFormat) for g in self.Coverage.glyphs] + if all(v == valueRecords[0] for v in valueRecords): + self.Format = 1 + if self.ValueFormat != 0: + self.Value = valueRecords[0] + else: + self.Value = None + else: + self.Format = 2 + self.Value = valueRecords + self.ValueCount = len(self.Value) + return self + + +def _getSinglePosTableKey(subtable, glyphMap): + assert isinstance(subtable, ot.SinglePos), subtable + glyphs = subtable.Coverage.glyphs + return (-len(glyphs), glyphMap[glyphs[0]]) + + +def _getSinglePosValueKey(valueRecord): + # otBase.ValueRecord --> (2, ("YPlacement": 12)) + assert isinstance(valueRecord, ValueRecord), valueRecord + valueFormat, result = 0, [] + for name, value in valueRecord.__dict__.items(): + if isinstance(value, ot.Device): + result.append((name, _makeDeviceTuple(value))) + else: + result.append((name, value)) + valueFormat |= valueRecordFormatDict[name][0] + result.sort() + result.insert(0, valueFormat) + return tuple(result) + + +_DeviceTuple = namedtuple("_DeviceTuple", "DeltaFormat StartSize EndSize DeltaValue") + + +def _makeDeviceTuple(device): + # otTables.Device --> tuple, for making device tables unique + return _DeviceTuple( + device.DeltaFormat, + device.StartSize, + device.EndSize, + () if device.DeltaFormat & 0x8000 else tuple(device.DeltaValue), + ) + + +def _getSinglePosValueSize(valueKey): + # Returns how many ushorts this valueKey (short form of ValueRecord) takes up + count = 0 + for _, v in valueKey[1:]: + if isinstance(v, _DeviceTuple): + count += len(v.DeltaValue) + 3 + else: + count += 1 + return count + + +def buildValue(value): + """Builds a positioning value record. + + Value records are used to specify coordinates and adjustments for + positioning and attaching glyphs. Many of the positioning functions + in this library take ``otTables.ValueRecord`` objects as arguments. + This function builds value records from dictionaries. + + Args: + value (dict): A dictionary with zero or more of the following keys: + - ``xPlacement`` + - ``yPlacement`` + - ``xAdvance`` + - ``yAdvance`` + - ``xPlaDevice`` + - ``yPlaDevice`` + - ``xAdvDevice`` + - ``yAdvDevice`` + + Returns: + An ``otTables.ValueRecord`` object. + """ + self = ValueRecord() + for k, v in value.items(): + setattr(self, k, v) + return self + + +# GDEF + + +def buildAttachList(attachPoints, glyphMap): + """Builds an AttachList subtable. + + A GDEF table may contain an Attachment Point List table (AttachList) + which stores the contour indices of attachment points for glyphs with + attachment points. This routine builds AttachList subtables. + + Args: + attachPoints (dict): A mapping between glyph names and a list of + contour indices. + + Returns: + An ``otTables.AttachList`` object if attachment points are supplied, + or ``None`` otherwise. + """ + if not attachPoints: + return None + self = ot.AttachList() + self.Coverage = buildCoverage(attachPoints.keys(), glyphMap) + self.AttachPoint = [buildAttachPoint(attachPoints[g]) for g in self.Coverage.glyphs] + self.GlyphCount = len(self.AttachPoint) + return self + + +def buildAttachPoint(points): + # [4, 23, 41] --> otTables.AttachPoint + # Only used by above. + if not points: + return None + self = ot.AttachPoint() + self.PointIndex = sorted(set(points)) + self.PointCount = len(self.PointIndex) + return self + + +def buildCaretValueForCoord(coord): + # 500 --> otTables.CaretValue, format 1 + self = ot.CaretValue() + self.Format = 1 + self.Coordinate = coord + return self + + +def buildCaretValueForPoint(point): + # 4 --> otTables.CaretValue, format 2 + self = ot.CaretValue() + self.Format = 2 + self.CaretValuePoint = point + return self + + +def buildLigCaretList(coords, points, glyphMap): + """Builds a ligature caret list table. + + Ligatures appear as a single glyph representing multiple characters; however + when, for example, editing text containing a ``f_i`` ligature, the user may + want to place the cursor between the ``f`` and the ``i``. The ligature caret + list in the GDEF table specifies the position to display the "caret" (the + character insertion indicator, typically a flashing vertical bar) "inside" + the ligature to represent an insertion point. The insertion positions may + be specified either by coordinate or by contour point. + + Example:: + + coords = { + "f_f_i": [300, 600] # f|fi cursor at 300 units, ff|i cursor at 600. + } + points = { + "c_t": [28] # c|t cursor appears at coordinate of contour point 28. + } + ligcaretlist = buildLigCaretList(coords, points, font.getReverseGlyphMap()) + + Args: + coords: A mapping between glyph names and a list of coordinates for + the insertion point of each ligature component after the first one. + points: A mapping between glyph names and a list of contour points for + the insertion point of each ligature component after the first one. + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + + Returns: + A ``otTables.LigCaretList`` object if any carets are present, or + ``None`` otherwise.""" + glyphs = set(coords.keys()) if coords else set() + if points: + glyphs.update(points.keys()) + carets = {g: buildLigGlyph(coords.get(g), points.get(g)) for g in glyphs} + carets = {g: c for g, c in carets.items() if c is not None} + if not carets: + return None + self = ot.LigCaretList() + self.Coverage = buildCoverage(carets.keys(), glyphMap) + self.LigGlyph = [carets[g] for g in self.Coverage.glyphs] + self.LigGlyphCount = len(self.LigGlyph) + return self + + +def buildLigGlyph(coords, points): + # ([500], [4]) --> otTables.LigGlyph; None for empty coords/points + carets = [] + if coords: + carets.extend([buildCaretValueForCoord(c) for c in sorted(coords)]) + if points: + carets.extend([buildCaretValueForPoint(p) for p in sorted(points)]) + if not carets: + return None + self = ot.LigGlyph() + self.CaretValue = carets + self.CaretCount = len(self.CaretValue) + return self + + +def buildMarkGlyphSetsDef(markSets, glyphMap): + """Builds a mark glyph sets definition table. + + OpenType Layout lookups may choose to use mark filtering sets to consider + or ignore particular combinations of marks. These sets are specified by + setting a flag on the lookup, but the mark filtering sets are defined in + the ``GDEF`` table. This routine builds the subtable containing the mark + glyph set definitions. + + Example:: + + set0 = set("acute", "grave") + set1 = set("caron", "grave") + + markglyphsets = buildMarkGlyphSetsDef([set0, set1], font.getReverseGlyphMap()) + + Args: + + markSets: A list of sets of glyphnames. + glyphMap: a glyph name to ID map, typically returned from + ``font.getReverseGlyphMap()``. + + Returns + An ``otTables.MarkGlyphSetsDef`` object. + """ + if not markSets: + return None + self = ot.MarkGlyphSetsDef() + self.MarkSetTableFormat = 1 + self.Coverage = [buildCoverage(m, glyphMap) for m in markSets] + self.MarkSetCount = len(self.Coverage) + return self + + +class ClassDefBuilder(object): + """Helper for building ClassDef tables.""" + + def __init__(self, useClass0): + self.classes_ = set() + self.glyphs_ = {} + self.useClass0_ = useClass0 + + def canAdd(self, glyphs): + if isinstance(glyphs, (set, frozenset)): + glyphs = sorted(glyphs) + glyphs = tuple(glyphs) + if glyphs in self.classes_: + return True + for glyph in glyphs: + if glyph in self.glyphs_: + return False + return True + + def add(self, glyphs): + if isinstance(glyphs, (set, frozenset)): + glyphs = sorted(glyphs) + glyphs = tuple(glyphs) + if glyphs in self.classes_: + return + self.classes_.add(glyphs) + for glyph in glyphs: + if glyph in self.glyphs_: + raise OpenTypeLibError( + f"Glyph {glyph} is already present in class.", None + ) + self.glyphs_[glyph] = glyphs + + def classes(self): + # In ClassDef1 tables, class id #0 does not need to be encoded + # because zero is the default. Therefore, we use id #0 for the + # glyph class that has the largest number of members. However, + # in other tables than ClassDef1, 0 means "every other glyph" + # so we should not use that ID for any real glyph classes; + # we implement this by inserting an empty set at position 0. + # + # TODO: Instead of counting the number of glyphs in each class, + # we should determine the encoded size. If the glyphs in a large + # class form a contiguous range, the encoding is actually quite + # compact, whereas a non-contiguous set might need a lot of bytes + # in the output file. We don't get this right with the key below. + result = sorted(self.classes_, key=lambda s: (len(s), s), reverse=True) + if not self.useClass0_: + result.insert(0, frozenset()) + return result + + def build(self): + glyphClasses = {} + for classID, glyphs in enumerate(self.classes()): + if classID == 0: + continue + for glyph in glyphs: + glyphClasses[glyph] = classID + classDef = ot.ClassDef() + classDef.classDefs = glyphClasses + return classDef + + +AXIS_VALUE_NEGATIVE_INFINITY = fixedToFloat(-0x80000000, 16) +AXIS_VALUE_POSITIVE_INFINITY = fixedToFloat(0x7FFFFFFF, 16) + + +def buildStatTable(ttFont, axes, locations=None, elidedFallbackName=2): + """Add a 'STAT' table to 'ttFont'. + + 'axes' is a list of dictionaries describing axes and their + values. + + Example:: + + axes = [ + dict( + tag="wght", + name="Weight", + ordering=0, # optional + values=[ + dict(value=100, name='Thin'), + dict(value=300, name='Light'), + dict(value=400, name='Regular', flags=0x2), + dict(value=900, name='Black'), + ], + ) + ] + + Each axis dict must have 'tag' and 'name' items. 'tag' maps + to the 'AxisTag' field. 'name' can be a name ID (int), a string, + or a dictionary containing multilingual names (see the + addMultilingualName() name table method), and will translate to + the AxisNameID field. + + An axis dict may contain an 'ordering' item that maps to the + AxisOrdering field. If omitted, the order of the axes list is + used to calculate AxisOrdering fields. + + The axis dict may contain a 'values' item, which is a list of + dictionaries describing AxisValue records belonging to this axis. + + Each value dict must have a 'name' item, which can be a name ID + (int), a string, or a dictionary containing multilingual names, + like the axis name. It translates to the ValueNameID field. + + Optionally the value dict can contain a 'flags' item. It maps to + the AxisValue Flags field, and will be 0 when omitted. + + The format of the AxisValue is determined by the remaining contents + of the value dictionary: + + If the value dict contains a 'value' item, an AxisValue record + Format 1 is created. If in addition to the 'value' item it contains + a 'linkedValue' item, an AxisValue record Format 3 is built. + + If the value dict contains a 'nominalValue' item, an AxisValue + record Format 2 is built. Optionally it may contain 'rangeMinValue' + and 'rangeMaxValue' items. These map to -Infinity and +Infinity + respectively if omitted. + + You cannot specify Format 4 AxisValue tables this way, as they are + not tied to a single axis, and specify a name for a location that + is defined by multiple axes values. Instead, you need to supply the + 'locations' argument. + + The optional 'locations' argument specifies AxisValue Format 4 + tables. It should be a list of dicts, where each dict has a 'name' + item, which works just like the value dicts above, an optional + 'flags' item (defaulting to 0x0), and a 'location' dict. A + location dict key is an axis tag, and the associated value is the + location on the specified axis. They map to the AxisIndex and Value + fields of the AxisValueRecord. + + Example:: + + locations = [ + dict(name='Regular ABCD', location=dict(wght=300, ABCD=100)), + dict(name='Bold ABCD XYZ', location=dict(wght=600, ABCD=200)), + ] + + The optional 'elidedFallbackName' argument can be a name ID (int), + a string, a dictionary containing multilingual names, or a list of + STATNameStatements. It translates to the ElidedFallbackNameID field. + + The 'ttFont' argument must be a TTFont instance that already has a + 'name' table. If a 'STAT' table already exists, it will be + overwritten by the newly created one. + """ + ttFont["STAT"] = ttLib.newTable("STAT") + statTable = ttFont["STAT"].table = ot.STAT() + nameTable = ttFont["name"] + statTable.ElidedFallbackNameID = _addName(nameTable, elidedFallbackName) + + # 'locations' contains data for AxisValue Format 4 + axisRecords, axisValues = _buildAxisRecords(axes, nameTable) + if not locations: + statTable.Version = 0x00010001 + else: + # We'll be adding Format 4 AxisValue records, which + # requires a higher table version + statTable.Version = 0x00010002 + multiAxisValues = _buildAxisValuesFormat4(locations, axes, nameTable) + axisValues = multiAxisValues + axisValues + + # Store AxisRecords + axisRecordArray = ot.AxisRecordArray() + axisRecordArray.Axis = axisRecords + # XXX these should not be hard-coded but computed automatically + statTable.DesignAxisRecordSize = 8 + statTable.DesignAxisRecord = axisRecordArray + statTable.DesignAxisCount = len(axisRecords) + + if axisValues: + # Store AxisValueRecords + axisValueArray = ot.AxisValueArray() + axisValueArray.AxisValue = axisValues + statTable.AxisValueArray = axisValueArray + statTable.AxisValueCount = len(axisValues) + + +def _buildAxisRecords(axes, nameTable): + axisRecords = [] + axisValues = [] + for axisRecordIndex, axisDict in enumerate(axes): + axis = ot.AxisRecord() + axis.AxisTag = axisDict["tag"] + axis.AxisNameID = _addName(nameTable, axisDict["name"], 256) + axis.AxisOrdering = axisDict.get("ordering", axisRecordIndex) + axisRecords.append(axis) + + for axisVal in axisDict.get("values", ()): + axisValRec = ot.AxisValue() + axisValRec.AxisIndex = axisRecordIndex + axisValRec.Flags = axisVal.get("flags", 0) + axisValRec.ValueNameID = _addName(nameTable, axisVal["name"]) + + if "value" in axisVal: + axisValRec.Value = axisVal["value"] + if "linkedValue" in axisVal: + axisValRec.Format = 3 + axisValRec.LinkedValue = axisVal["linkedValue"] + else: + axisValRec.Format = 1 + elif "nominalValue" in axisVal: + axisValRec.Format = 2 + axisValRec.NominalValue = axisVal["nominalValue"] + axisValRec.RangeMinValue = axisVal.get( + "rangeMinValue", AXIS_VALUE_NEGATIVE_INFINITY + ) + axisValRec.RangeMaxValue = axisVal.get( + "rangeMaxValue", AXIS_VALUE_POSITIVE_INFINITY + ) + else: + raise ValueError("Can't determine format for AxisValue") + + axisValues.append(axisValRec) + return axisRecords, axisValues + + +def _buildAxisValuesFormat4(locations, axes, nameTable): + axisTagToIndex = {} + for axisRecordIndex, axisDict in enumerate(axes): + axisTagToIndex[axisDict["tag"]] = axisRecordIndex + + axisValues = [] + for axisLocationDict in locations: + axisValRec = ot.AxisValue() + axisValRec.Format = 4 + axisValRec.ValueNameID = _addName(nameTable, axisLocationDict["name"]) + axisValRec.Flags = axisLocationDict.get("flags", 0) + axisValueRecords = [] + for tag, value in axisLocationDict["location"].items(): + avr = ot.AxisValueRecord() + avr.AxisIndex = axisTagToIndex[tag] + avr.Value = value + axisValueRecords.append(avr) + axisValueRecords.sort(key=lambda avr: avr.AxisIndex) + axisValRec.AxisCount = len(axisValueRecords) + axisValRec.AxisValueRecord = axisValueRecords + axisValues.append(axisValRec) + return axisValues + + +def _addName(nameTable, value, minNameID=0): + if isinstance(value, int): + # Already a nameID + return value + if isinstance(value, str): + names = dict(en=value) + elif isinstance(value, dict): + names = value + elif isinstance(value, list): + nameID = nameTable._findUnusedNameID() + for nameRecord in value: + if isinstance(nameRecord, STATNameStatement): + nameTable.setName( + nameRecord.string, + nameID, + nameRecord.platformID, + nameRecord.platEncID, + nameRecord.langID, + ) + else: + raise TypeError("value must be a list of STATNameStatements") + return nameID + else: + raise TypeError("value must be int, str, dict or list") + return nameTable.addMultilingualName(names, minNameID=minNameID) diff --git a/.venv/lib/python3.9/site-packages/fontTools/otlLib/error.py b/.venv/lib/python3.9/site-packages/fontTools/otlLib/error.py new file mode 100644 index 00000000..1cbef578 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/otlLib/error.py @@ -0,0 +1,11 @@ +class OpenTypeLibError(Exception): + def __init__(self, message, location): + Exception.__init__(self, message) + self.location = location + + def __str__(self): + message = Exception.__str__(self) + if self.location: + return f"{self.location}: {message}" + else: + return message diff --git a/.venv/lib/python3.9/site-packages/fontTools/otlLib/maxContextCalc.py b/.venv/lib/python3.9/site-packages/fontTools/otlLib/maxContextCalc.py new file mode 100644 index 00000000..03e7561b --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/otlLib/maxContextCalc.py @@ -0,0 +1,96 @@ +__all__ = ["maxCtxFont"] + + +def maxCtxFont(font): + """Calculate the usMaxContext value for an entire font.""" + + maxCtx = 0 + for tag in ("GSUB", "GPOS"): + if tag not in font: + continue + table = font[tag].table + if not table.LookupList: + continue + for lookup in table.LookupList.Lookup: + for st in lookup.SubTable: + maxCtx = maxCtxSubtable(maxCtx, tag, lookup.LookupType, st) + return maxCtx + + +def maxCtxSubtable(maxCtx, tag, lookupType, st): + """Calculate usMaxContext based on a single lookup table (and an existing + max value). + """ + + # single positioning, single / multiple substitution + if (tag == "GPOS" and lookupType == 1) or ( + tag == "GSUB" and lookupType in (1, 2, 3) + ): + maxCtx = max(maxCtx, 1) + + # pair positioning + elif tag == "GPOS" and lookupType == 2: + maxCtx = max(maxCtx, 2) + + # ligatures + elif tag == "GSUB" and lookupType == 4: + for ligatures in st.ligatures.values(): + for ligature in ligatures: + maxCtx = max(maxCtx, ligature.CompCount) + + # context + elif (tag == "GPOS" and lookupType == 7) or (tag == "GSUB" and lookupType == 5): + maxCtx = maxCtxContextualSubtable(maxCtx, st, "Pos" if tag == "GPOS" else "Sub") + + # chained context + elif (tag == "GPOS" and lookupType == 8) or (tag == "GSUB" and lookupType == 6): + maxCtx = maxCtxContextualSubtable( + maxCtx, st, "Pos" if tag == "GPOS" else "Sub", "Chain" + ) + + # extensions + elif (tag == "GPOS" and lookupType == 9) or (tag == "GSUB" and lookupType == 7): + maxCtx = maxCtxSubtable(maxCtx, tag, st.ExtensionLookupType, st.ExtSubTable) + + # reverse-chained context + elif tag == "GSUB" and lookupType == 8: + maxCtx = maxCtxContextualRule(maxCtx, st, "Reverse") + + return maxCtx + + +def maxCtxContextualSubtable(maxCtx, st, ruleType, chain=""): + """Calculate usMaxContext based on a contextual feature subtable.""" + + if st.Format == 1: + for ruleset in getattr(st, "%s%sRuleSet" % (chain, ruleType)): + if ruleset is None: + continue + for rule in getattr(ruleset, "%s%sRule" % (chain, ruleType)): + if rule is None: + continue + maxCtx = maxCtxContextualRule(maxCtx, rule, chain) + + elif st.Format == 2: + for ruleset in getattr(st, "%s%sClassSet" % (chain, ruleType)): + if ruleset is None: + continue + for rule in getattr(ruleset, "%s%sClassRule" % (chain, ruleType)): + if rule is None: + continue + maxCtx = maxCtxContextualRule(maxCtx, rule, chain) + + elif st.Format == 3: + maxCtx = maxCtxContextualRule(maxCtx, st, chain) + + return maxCtx + + +def maxCtxContextualRule(maxCtx, st, chain): + """Calculate usMaxContext based on a contextual feature rule.""" + + if not chain: + return max(maxCtx, st.GlyphCount) + elif chain == "Reverse": + return max(maxCtx, st.GlyphCount + st.LookAheadGlyphCount) + return max(maxCtx, st.InputGlyphCount + st.LookAheadGlyphCount) diff --git a/.venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__init__.py b/.venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__init__.py new file mode 100644 index 00000000..5c007e89 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__init__.py @@ -0,0 +1,68 @@ +from argparse import RawTextHelpFormatter +from textwrap import dedent + +from fontTools.ttLib import TTFont +from fontTools.otlLib.optimize.gpos import compact, GPOS_COMPACT_MODE_DEFAULT + +def main(args=None): + """Optimize the layout tables of an existing font.""" + from argparse import ArgumentParser + from fontTools import configLogger + + parser = ArgumentParser(prog="otlLib.optimize", description=main.__doc__, formatter_class=RawTextHelpFormatter) + parser.add_argument("font") + parser.add_argument( + "-o", metavar="OUTPUTFILE", dest="outfile", default=None, help="output file" + ) + parser.add_argument( + "--gpos-compact-mode", + help=dedent( + f"""\ + GPOS Lookup type 2 (PairPos) compaction mode: + 0 = do not attempt to compact PairPos lookups; + 1 to 8 = create at most 1 to 8 new subtables for each existing + subtable, provided that it would yield a 50%% file size saving; + 9 = create as many new subtables as needed to yield a file size saving. + Default: {GPOS_COMPACT_MODE_DEFAULT}. + + This compaction aims to save file size, by splitting large class + kerning subtables (Format 2) that contain many zero values into + smaller and denser subtables. It's a trade-off between the overhead + of several subtables versus the sparseness of one big subtable. + + See the pull request: https://github.com/fonttools/fonttools/pull/2326 + """ + ), + default=int(GPOS_COMPACT_MODE_DEFAULT), + choices=list(range(10)), + type=int, + ) + logging_group = parser.add_mutually_exclusive_group(required=False) + logging_group.add_argument( + "-v", "--verbose", action="store_true", help="Run more verbosely." + ) + logging_group.add_argument( + "-q", "--quiet", action="store_true", help="Turn verbosity off." + ) + options = parser.parse_args(args) + + configLogger( + level=("DEBUG" if options.verbose else "ERROR" if options.quiet else "INFO") + ) + + font = TTFont(options.font) + # TODO: switch everything to have type(mode) = int when using the Config class + compact(font, str(options.gpos_compact_mode)) + font.save(options.outfile or options.font) + + + +if __name__ == "__main__": + import sys + + if len(sys.argv) > 1: + sys.exit(main()) + import doctest + + sys.exit(doctest.testmod().failed) + diff --git a/.venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__main__.py b/.venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__main__.py new file mode 100644 index 00000000..03027ecd --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__main__.py @@ -0,0 +1,6 @@ +import sys +from fontTools.otlLib.optimize import main + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/.venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__pycache__/__init__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85937bd790221cfc78f6a3a7becdbfa8b9e46923 GIT binary patch literal 2456 zcmZWrNpBlB6xJ-7(dI37wl-;b2^s;BlsZk(xC@fTb`rp`4O_nGGN43C8k;kmkQ_M@ zY@mR1>B08`K>_F3A5fs@{*1Zy6!g|(F6kpB$96KtJdtn6kMDhNq4CsIDF@Ftf4;_V zin-iBdUF18Ve$}O`3eNd5sT#_t7TbwY%@D@T8%}Cz~7F z!Q+kRn~xqhgXbH|E5Y*0>Z6^t=6c7{z>~*^U;RFYSH1&5Ebte6Kh*YF#L>PV+E(ts zBCc|G^U5RnW9QI0a87*UX=@LhU7z@*K#IUYnN*H}9iy941v0IQuXAMPcjw4bB~=7j zRuwXPWa&AXo2;E8m&p9Fb?6?rfVDs_lPlyZxpwRVlGa=&pMmD{iN-mZJ^=m>^9S}p zes@OvMQ+3u7|n{m$<5d%Uyv`4!7eoix=Tmap{M2#JhcF`%W$st#XGqIv#ZH}dWB)U z1dO9mVC&(+l)%Yy9mdKz6_-b;~we);dP;@gaAxG61_BnU~FO` zO>in59(Tju8t?U}7|n3S*1~q3PvEOg<|cyovNEBvBSKK~IGgF7MmOj%EM?~ELq>Lu zw@Mp3&CQ+W>a(?#%m<^oA*1V~GK>iuC5C(z%Uhco+SM z2uCqjNGEBO0D1g$8=BxCX5i)bpKSkHul^1&I)Y+F0RzsF3QhDe-A6KQPr?CQA&NWw z4-xqUPMdVP{tg1V2O(4pL>6#Eh4y*M2pWbIBu4k|-nwOYL{f)e;sFHtQxhMYvreK2 z$3t|{EG$6*bqVM258ygJ=W**7Y+W9QX$j%qAR6`3g^$gCC{G#G#N#lM8X63wXZGGf z?IDs03zf-DhDDDelS3E4_Na(;?w+zD(d}_VL5tNfFOanghY(-w*@y~`2AHLg{b8*5 z1uPk1#;AarAPCwJWc?Xz9X(TDNnlk8OlXaFyQodoKBcj#D?Xsm2Qj&T2jwLxe8B7s z2f#D?jf%$?_{(TN_)M`)qx60}RMBppaFsWd+CpLzvLby;anHHnpFkpiOrp z2y*5J0pXn>5VqD;Fd+eKGkr`rpc0Vkz>p#za=e@V*JkZ*@Q1ca*tUw1hxqUKc}WBZlj9q6TJWg&$x=%IHtpe7OKZ Tvr@5U?b7{%Rj{Y63dsKf{J_r7 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__pycache__/__main__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__pycache__/__main__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..623303a45d991191180ccd06c2693473744ea3bb GIT binary patch literal 312 zcmYjLJ5Izf5Vf5E5n>O(4Oj^>1vE$qQBY7IgtS|wvApY9Vy!<>Y$8I-F=(LV09+<5 z6<45Q0$RkA<~_}5-n>zh$u1+Dygw@>{TQ47$f&uXiibp+X>M6Hs<7ONN^pjm&eozm zK=zWOcw(=d)7Fel^G|ZHn<*c1r;Hy8DMyuZx;136kJbJv_%si}#xf*(Z5Cx{l5yq{ zTS3mz;FUuuha4YFdSmSljeqEC1rD`QaHU#(*_saFwy#t0Fk9Ai5y}pI2i7d0=~Es2 uad`^SBs^-=a;@$#!e2Q2hQlTtHh-2)KNM#!=zELjoTB44QNj1Jf`0>P!&a#P literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__pycache__/gpos.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/__pycache__/gpos.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7d741d7d7c22bf7eac579acee00547af6241a114 GIT binary patch literal 10928 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 U&rcIKIrr_6!ndhS|D9j{4^6hBX#fBK literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/gpos.py b/.venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/gpos.py new file mode 100644 index 00000000..79873fad --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/otlLib/optimize/gpos.py @@ -0,0 +1,439 @@ +import logging +from collections import defaultdict, namedtuple +from functools import reduce +from itertools import chain +from math import log2 +from typing import DefaultDict, Dict, Iterable, List, Sequence, Tuple + +from fontTools.misc.intTools import bit_count, bit_indices +from fontTools.ttLib import TTFont +from fontTools.ttLib.tables import otBase, otTables + +# NOTE: activating this optimization via the environment variable is +# experimental and may not be supported once an alternative mechanism +# is in place. See: https://github.com/fonttools/fonttools/issues/2349 +GPOS_COMPACT_MODE_ENV_KEY = "FONTTOOLS_GPOS_COMPACT_MODE" +GPOS_COMPACT_MODE_DEFAULT = "0" + +log = logging.getLogger("fontTools.otlLib.optimize.gpos") + + +def compact(font: TTFont, mode: str) -> TTFont: + # Ideal plan: + # 1. Find lookups of Lookup Type 2: Pair Adjustment Positioning Subtable + # https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#lookup-type-2-pair-adjustment-positioning-subtable + # 2. Extract glyph-glyph kerning and class-kerning from all present subtables + # 3. Regroup into different subtable arrangements + # 4. Put back into the lookup + # + # Actual implementation: + # 2. Only class kerning is optimized currently + # 3. If the input kerning is already in several subtables, the subtables + # are not grouped together first; instead each subtable is treated + # independently, so currently this step is: + # Split existing subtables into more smaller subtables + gpos = font["GPOS"] + for lookup in gpos.table.LookupList.Lookup: + if lookup.LookupType == 2: + compact_lookup(font, mode, lookup) + elif lookup.LookupType == 9 and lookup.SubTable[0].ExtensionLookupType == 2: + compact_ext_lookup(font, mode, lookup) + return font + + +def compact_lookup(font: TTFont, mode: str, lookup: otTables.Lookup) -> None: + new_subtables = compact_pair_pos(font, mode, lookup.SubTable) + lookup.SubTable = new_subtables + lookup.SubTableCount = len(new_subtables) + + +def compact_ext_lookup(font: TTFont, mode: str, lookup: otTables.Lookup) -> None: + new_subtables = compact_pair_pos( + font, mode, [ext_subtable.ExtSubTable for ext_subtable in lookup.SubTable] + ) + new_ext_subtables = [] + for subtable in new_subtables: + ext_subtable = otTables.ExtensionPos() + ext_subtable.Format = 1 + ext_subtable.ExtSubTable = subtable + new_ext_subtables.append(ext_subtable) + lookup.SubTable = new_ext_subtables + lookup.SubTableCount = len(new_ext_subtables) + + +def compact_pair_pos( + font: TTFont, mode: str, subtables: Sequence[otTables.PairPos] +) -> Sequence[otTables.PairPos]: + new_subtables = [] + for subtable in subtables: + if subtable.Format == 1: + # Not doing anything to Format 1 (yet?) + new_subtables.append(subtable) + elif subtable.Format == 2: + new_subtables.extend(compact_class_pairs(font, mode, subtable)) + return new_subtables + + +def compact_class_pairs( + font: TTFont, mode: str, subtable: otTables.PairPos +) -> List[otTables.PairPos]: + from fontTools.otlLib.builder import buildPairPosClassesSubtable + + subtables = [] + classes1: DefaultDict[int, List[str]] = defaultdict(list) + for g in subtable.Coverage.glyphs: + classes1[subtable.ClassDef1.classDefs.get(g, 0)].append(g) + classes2: DefaultDict[int, List[str]] = defaultdict(list) + for g, i in subtable.ClassDef2.classDefs.items(): + classes2[i].append(g) + all_pairs = {} + for i, class1 in enumerate(subtable.Class1Record): + for j, class2 in enumerate(class1.Class2Record): + if is_really_zero(class2): + continue + all_pairs[(tuple(sorted(classes1[i])), tuple(sorted(classes2[j])))] = ( + getattr(class2, "Value1", None), + getattr(class2, "Value2", None), + ) + + if len(mode) == 1 and mode in "123456789": + grouped_pairs = cluster_pairs_by_class2_coverage_custom_cost( + font, all_pairs, int(mode) + ) + for pairs in grouped_pairs: + subtables.append( + buildPairPosClassesSubtable(pairs, font.getReverseGlyphMap()) + ) + else: + raise ValueError(f"Bad {GPOS_COMPACT_MODE_ENV_KEY}={mode}") + return subtables + + +def is_really_zero(class2: otTables.Class2Record) -> bool: + v1 = getattr(class2, "Value1", None) + v2 = getattr(class2, "Value2", None) + return (v1 is None or v1.getEffectiveFormat() == 0) and ( + v2 is None or v2.getEffectiveFormat() == 0 + ) + + +Pairs = Dict[ + Tuple[Tuple[str, ...], Tuple[str, ...]], + Tuple[otBase.ValueRecord, otBase.ValueRecord], +] + +# Adapted from https://github.com/fonttools/fonttools/blob/f64f0b42f2d1163b2d85194e0979def539f5dca3/Lib/fontTools/ttLib/tables/otTables.py#L935-L958 +def _getClassRanges(glyphIDs: Iterable[int]): + glyphIDs = sorted(glyphIDs) + last = glyphIDs[0] + ranges = [[last]] + for glyphID in glyphIDs[1:]: + if glyphID != last + 1: + ranges[-1].append(last) + ranges.append([glyphID]) + last = glyphID + ranges[-1].append(last) + return ranges, glyphIDs[0], glyphIDs[-1] + + +# Adapted from https://github.com/fonttools/fonttools/blob/f64f0b42f2d1163b2d85194e0979def539f5dca3/Lib/fontTools/ttLib/tables/otTables.py#L960-L989 +def _classDef_bytes( + class_data: List[Tuple[List[Tuple[int, int]], int, int]], + class_ids: List[int], + coverage=False, +): + if not class_ids: + return 0 + first_ranges, min_glyph_id, max_glyph_id = class_data[class_ids[0]] + range_count = len(first_ranges) + for i in class_ids[1:]: + data = class_data[i] + range_count += len(data[0]) + min_glyph_id = min(min_glyph_id, data[1]) + max_glyph_id = max(max_glyph_id, data[2]) + glyphCount = max_glyph_id - min_glyph_id + 1 + # https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#class-definition-table-format-1 + format1_bytes = 6 + glyphCount * 2 + # https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#class-definition-table-format-2 + format2_bytes = 4 + range_count * 6 + return min(format1_bytes, format2_bytes) + + +ClusteringContext = namedtuple( + "ClusteringContext", + [ + "lines", + "all_class1", + "all_class1_data", + "all_class2_data", + "valueFormat1_bytes", + "valueFormat2_bytes", + ], +) + + +class Cluster: + # TODO(Python 3.7): Turn this into a dataclass + # ctx: ClusteringContext + # indices: int + # Caches + # TODO(Python 3.8): use functools.cached_property instead of the + # manually cached properties, and remove the cache fields listed below. + # _indices: Optional[List[int]] = None + # _column_indices: Optional[List[int]] = None + # _cost: Optional[int] = None + + __slots__ = "ctx", "indices_bitmask", "_indices", "_column_indices", "_cost" + + def __init__(self, ctx: ClusteringContext, indices_bitmask: int): + self.ctx = ctx + self.indices_bitmask = indices_bitmask + self._indices = None + self._column_indices = None + self._cost = None + + @property + def indices(self): + if self._indices is None: + self._indices = bit_indices(self.indices_bitmask) + return self._indices + + @property + def column_indices(self): + if self._column_indices is None: + # Indices of columns that have a 1 in at least 1 line + # => binary OR all the lines + bitmask = reduce(int.__or__, (self.ctx.lines[i] for i in self.indices)) + self._column_indices = bit_indices(bitmask) + return self._column_indices + + @property + def width(self): + # Add 1 because Class2=0 cannot be used but needs to be encoded. + return len(self.column_indices) + 1 + + @property + def cost(self): + if self._cost is None: + self._cost = ( + # 2 bytes to store the offset to this subtable in the Lookup table above + 2 + # Contents of the subtable + # From: https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#pair-adjustment-positioning-format-2-class-pair-adjustment + # uint16 posFormat Format identifier: format = 2 + + 2 + # Offset16 coverageOffset Offset to Coverage table, from beginning of PairPos subtable. + + 2 + + self.coverage_bytes + # uint16 valueFormat1 ValueRecord definition — for the first glyph of the pair (may be zero). + + 2 + # uint16 valueFormat2 ValueRecord definition — for the second glyph of the pair (may be zero). + + 2 + # Offset16 classDef1Offset Offset to ClassDef table, from beginning of PairPos subtable — for the first glyph of the pair. + + 2 + + self.classDef1_bytes + # Offset16 classDef2Offset Offset to ClassDef table, from beginning of PairPos subtable — for the second glyph of the pair. + + 2 + + self.classDef2_bytes + # uint16 class1Count Number of classes in classDef1 table — includes Class 0. + + 2 + # uint16 class2Count Number of classes in classDef2 table — includes Class 0. + + 2 + # Class1Record class1Records[class1Count] Array of Class1 records, ordered by classes in classDef1. + + (self.ctx.valueFormat1_bytes + self.ctx.valueFormat2_bytes) + * len(self.indices) + * self.width + ) + return self._cost + + @property + def coverage_bytes(self): + format1_bytes = ( + # From https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#coverage-format-1 + # uint16 coverageFormat Format identifier — format = 1 + # uint16 glyphCount Number of glyphs in the glyph array + 4 + # uint16 glyphArray[glyphCount] Array of glyph IDs — in numerical order + + sum(len(self.ctx.all_class1[i]) for i in self.indices) * 2 + ) + ranges = sorted( + chain.from_iterable(self.ctx.all_class1_data[i][0] for i in self.indices) + ) + merged_range_count = 0 + last = None + for (start, end) in ranges: + if last is not None and start != last + 1: + merged_range_count += 1 + last = end + format2_bytes = ( + # From https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#coverage-format-2 + # uint16 coverageFormat Format identifier — format = 2 + # uint16 rangeCount Number of RangeRecords + 4 + # RangeRecord rangeRecords[rangeCount] Array of glyph ranges — ordered by startGlyphID. + # uint16 startGlyphID First glyph ID in the range + # uint16 endGlyphID Last glyph ID in the range + # uint16 startCoverageIndex Coverage Index of first glyph ID in range + + merged_range_count * 6 + ) + return min(format1_bytes, format2_bytes) + + @property + def classDef1_bytes(self): + # We can skip encoding one of the Class1 definitions, and use + # Class1=0 to represent it instead, because Class1 is gated by the + # Coverage definition. Use Class1=0 for the highest byte savings. + # Going through all options takes too long, pick the biggest class + # = what happens in otlLib.builder.ClassDefBuilder.classes() + biggest_index = max(self.indices, key=lambda i: len(self.ctx.all_class1[i])) + return _classDef_bytes( + self.ctx.all_class1_data, [i for i in self.indices if i != biggest_index] + ) + + @property + def classDef2_bytes(self): + # All Class2 need to be encoded because we can't use Class2=0 + return _classDef_bytes(self.ctx.all_class2_data, self.column_indices) + + +def cluster_pairs_by_class2_coverage_custom_cost( + font: TTFont, + pairs: Pairs, + compression: int = 5, +) -> List[Pairs]: + if not pairs: + # The subtable was actually empty? + return [pairs] + + # Sorted for reproducibility/determinism + all_class1 = sorted(set(pair[0] for pair in pairs)) + all_class2 = sorted(set(pair[1] for pair in pairs)) + + # Use Python's big ints for binary vectors representing each line + lines = [ + sum( + 1 << i if (class1, class2) in pairs else 0 + for i, class2 in enumerate(all_class2) + ) + for class1 in all_class1 + ] + + # Map glyph names to ids and work with ints throughout for ClassDef formats + name_to_id = font.getReverseGlyphMap() + # Each entry in the arrays below is (range_count, min_glyph_id, max_glyph_id) + all_class1_data = [ + _getClassRanges(name_to_id[name] for name in cls) for cls in all_class1 + ] + all_class2_data = [ + _getClassRanges(name_to_id[name] for name in cls) for cls in all_class2 + ] + + format1 = 0 + format2 = 0 + for pair, value in pairs.items(): + format1 |= value[0].getEffectiveFormat() if value[0] else 0 + format2 |= value[1].getEffectiveFormat() if value[1] else 0 + valueFormat1_bytes = bit_count(format1) * 2 + valueFormat2_bytes = bit_count(format2) * 2 + + ctx = ClusteringContext( + lines, + all_class1, + all_class1_data, + all_class2_data, + valueFormat1_bytes, + valueFormat2_bytes, + ) + + cluster_cache: Dict[int, Cluster] = {} + + def make_cluster(indices: int) -> Cluster: + cluster = cluster_cache.get(indices, None) + if cluster is not None: + return cluster + cluster = Cluster(ctx, indices) + cluster_cache[indices] = cluster + return cluster + + def merge(cluster: Cluster, other: Cluster) -> Cluster: + return make_cluster(cluster.indices_bitmask | other.indices_bitmask) + + # Agglomerative clustering by hand, checking the cost gain of the new + # cluster against the previously separate clusters + # Start with 1 cluster per line + # cluster = set of lines = new subtable + clusters = [make_cluster(1 << i) for i in range(len(lines))] + + # Cost of 1 cluster with everything + # `(1 << len) - 1` gives a bitmask full of 1's of length `len` + cost_before_splitting = make_cluster((1 << len(lines)) - 1).cost + log.debug(f" len(clusters) = {len(clusters)}") + + while len(clusters) > 1: + lowest_cost_change = None + best_cluster_index = None + best_other_index = None + best_merged = None + for i, cluster in enumerate(clusters): + for j, other in enumerate(clusters[i + 1 :]): + merged = merge(cluster, other) + cost_change = merged.cost - cluster.cost - other.cost + if lowest_cost_change is None or cost_change < lowest_cost_change: + lowest_cost_change = cost_change + best_cluster_index = i + best_other_index = i + 1 + j + best_merged = merged + assert lowest_cost_change is not None + assert best_cluster_index is not None + assert best_other_index is not None + assert best_merged is not None + + # If the best merge we found is still taking down the file size, then + # there's no question: we must do it, because it's beneficial in both + # ways (lower file size and lower number of subtables). However, if the + # best merge we found is not reducing file size anymore, then we need to + # look at the other stop criteria = the compression factor. + if lowest_cost_change > 0: + # Stop critera: check whether we should keep merging. + # Compute size reduction brought by splitting + cost_after_splitting = sum(c.cost for c in clusters) + # size_reduction so that after = before * (1 - size_reduction) + # E.g. before = 1000, after = 800, 1 - 800/1000 = 0.2 + size_reduction = 1 - cost_after_splitting / cost_before_splitting + + # Force more merging by taking into account the compression number. + # Target behaviour: compression number = 1 to 9, default 5 like gzip + # - 1 = accept to add 1 subtable to reduce size by 50% + # - 5 = accept to add 5 subtables to reduce size by 50% + # See https://github.com/harfbuzz/packtab/blob/master/Lib/packTab/__init__.py#L690-L691 + # Given the size reduction we have achieved so far, compute how many + # new subtables are acceptable. + max_new_subtables = -log2(1 - size_reduction) * compression + log.debug( + f" len(clusters) = {len(clusters):3d} size_reduction={size_reduction:5.2f} max_new_subtables={max_new_subtables}", + ) + if compression == 9: + # Override level 9 to mean: create any number of subtables + max_new_subtables = len(clusters) + + # If we have managed to take the number of new subtables below the + # threshold, then we can stop. + if len(clusters) <= max_new_subtables + 1: + break + + # No reason to stop yet, do the merge and move on to the next. + del clusters[best_other_index] + clusters[best_cluster_index] = best_merged + + # All clusters are final; turn bitmasks back into the "Pairs" format + pairs_by_class1: Dict[Tuple[str, ...], Pairs] = defaultdict(dict) + for pair, values in pairs.items(): + pairs_by_class1[pair[0]][pair] = values + pairs_groups: List[Pairs] = [] + for cluster in clusters: + pairs_group: Pairs = dict() + for i in cluster.indices: + class1 = all_class1[i] + pairs_group.update(pairs_by_class1[class1]) + pairs_groups.append(pairs_group) + return pairs_groups diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/__init__.py b/.venv/lib/python3.9/site-packages/fontTools/pens/__init__.py new file mode 100644 index 00000000..156cb232 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/__init__.py @@ -0,0 +1 @@ +"""Empty __init__.py file to signal Python this directory is a package.""" diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/__init__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b8b462ddce3175f8116fa7031cefd15c2a478249 GIT binary patch literal 262 zcmYjMK}rKb5S+~=LC7EanuFU1y$B*65)cFl#FHL|ac7ckoShzK#)a`KzQ70gnOuE> zH&1qghZIyb1x;7Ana|IZ;PUIk+{^qvm{T-jZiRU!V%3wf%|=L z6}IFZ6oyQ@U_7jA={Z2@DTAfty27b~7z5FCuV&}kheflWYHhjG`ctKeL>%S!83$*{ z;GIc!nP_ylu6^Nvo33Z}*p4oY=;;OHG3BDY!c4`T|6k6y1x*aYo_zdlXUw;WV9mf8o z#eB1|c#NLChe5IylU$0J_e4u@Cap8xvc6%`mexzGBJs1;vZZs(>h9InK^V8s<1ml5 z^G>uKswmt}Pq)MEvv|<&G;XmUtMgImi!h6hqGVM192OATq?m6O7LU=huQ5cd#Q{Ue zWhrndj>qB7ONL`zS;Fi{PnI#e(w7y?C0UgVm_4~DmoS$l2fPQ0c0FthjFUz(xqE<~ zJ;ac+Yp$8*ugFzMfshQ}ibKVrty_w|7sN|Qbdl5B{2Aw=jn#b)MU-4Lyha17^jNCqgSP%mtI6q(j_c1LoB~q znt~{FuVJ8#kaGowPatUajQt>nVrXfO*&aF?5qZY7t;IUij<(iV4WX#9kC*^XO+i6c znxLFv1GGOL0V3tJqOI%h1n%xgT<(m-0R0m3VD~=!xSIg}3O>uoA;x{~@vV6$3X3)o zH)(X#)QKOlASd8}CHV%!C^i7qxWdgF8;;-#LFcTK#vPWlm}T8CjqTQTAC6~2jQ3&dU3rjegBZky~RW3&Zyx)&w| ze}iC{v$b8YF=oygy5Nhr1Ycw3T*F*x=#7~pO~G8DDG&WI|D-W7(1oTltd2P?X}`jB zbsY(%%i5Ect`fU7w#IbDtbLNHOM9Ad#JFV`x2B9c1>>p)7j7x<&-P9G{gI+7QeT+S zt=90OCHnhsIM@n0bp{}Gn>+j9_% z)oCzh-?k}3CXHlD7847CpxHIWgBxGj3G(a2lm%6W5~Yt4Nm0Qu$#ugEA1R!36~PbM zaf<35=AB(=X0>T$hG$}M4-PSD;JgiiQiI?;x72bje!{&!!TNPb=F$_S(duEEf7k2B zQ7=mJNPeYMs?qC^tB524Jc9-(v!d%k#%4eBU|KGpgp>_w>cet>Ex&tsCS zLGa={j0=sa#ENpe;AoR1azRm?)HV$>nv6un#{7?nTXUB@;oF|&xt{MWdG=x5L2(Ua v+75!&!|6YuLH~fp)8hA8{EJ`}#&Hms-Tv>Gk@sl<`!kBT@z@qs%eDRkU15mM literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/basePen.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/basePen.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9082aae729cf822787a06eac4b51fb70844731ab GIT binary patch literal 14826 zcmb_jYmeO4c_ulW8+Wu?t!^vHNf;T)?xd@cB|C1TB(`;NVmZ!6u{LNkNU`D$IlJ`E zk|UBMX$P~tM7f|rkQN0B^b(+U+Yfa=wkS{p=pV?(eh7*QP!tH-LO}mOilXlGyocm) zW_M*L&aCDP$-{Gduh09QBj?yLOT*`dfBXyQ&!5+{pYf*nsp94peB&iu(_F2sxw>og z^j)KE=)5lVO1oy;)U_?mHUCO)m%pgFWw-Jz&8>Kq$E9`^_f@xs``TlpUBg}7wQy&7 zHPqH|Kj$`Z-|$R4G20fN9CPRKWZs*@8x7nacNcKK;90mohWiulBJLNxW4NDpPr9eR zrL~W{r`{-@zx%Xq+v3Gp*5_Z$q?PS|Y>^MQ!PUQMSc8b;yojrRye8>SVx{>qn zq8$#Bo*#JeHOo(I>1fw?-JWOfI)T0EB@aCeh|BannX6;7tsiW)?Axe8$C3RojNC~l zXtEh6k<&^1FtEE}l(oqEiB~ZIro3gxgUC~}&4x%9Y`I~uoY;Zqxt#A#z8dDHC?X zI3dUUj@@^X#ESxwF4^`$0jr+2YjL<0aIk6H&)UoB(`A`eZ2L*<^}wwFOIyZE%a#S! z#&$=@ZVzI$>c|URP&c0n-X;y=P6WQJLP`?b>BV>$+MO@}$p@Xp3cShWTlTA9Q-Ohs zy4g6J;2wmBQ*}1M^|W>c!m#at#+EFiY43W;cIY;3JbUQ%di-@nI@LO^*?Zx@{*(yq zr;4KuVlo2jvs4e67++7t18Y`N54LtGhq63A?WaNx8G~T%_Iuv07bFL-V4{!-&@R182X88hfmfh!chIv$GQ-Y*T{|MH{Xx`6FLBGh zJJ=L`Z=x8`(*c(z+_qOp zm2{FRmz5Y|#;LUc{YVza4$$iZ&)$lh{(nN@cX zh;49sezKR_0+9KE7wy@e6NAjD5ww(`$wa|3FaVNHLSXVr8?caqxU7XqYEb;Hh-F69 zY)-54bVH25h8<$W$ai7zaJ3$;Kt^Z~)s>fYT1sX%@@i{iy57F)iQ%!cCA(n<<{~12 zM81^0f+9}%o=pYTPYD^MfmUXQ=df^r8cUL<1f1bbHO-5+>C2X>)r_rO~ii>vlS z9|ph;ThP(*=}1zdPqTL&;PT)ka# z4LIXcM9?yP_DzrLSC#~-$Qjt~K$z9{f&ffwt-WiGYa1JZv+HeajI9l@-W~LK-PqW; z4>G1T)eXo{XJg}CEjo_ArTCxrR#bXe}^I?gI5BQGP}k(L25rV+>&d4%WRhqJSR#s+m)&3RlHww>v�@Z56e@Vo}h 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 K!*Z;}ul@yNY9pTj literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/cocoaPen.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/cocoaPen.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf2f4be32581af09eb24b1945a8fb0d3f09f4080 GIT binary patch literal 1307 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 UqUJjb=*G@=6FQHry1AJC51ZuNxc~qF literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/filterPen.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/filterPen.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a93979bc244fb44839850d5ba1a254a2a28664cb GIT binary patch literal 6511 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 bwDBu_1%8jzLIuYblFC+jvv%SA3vc}gOuYwx literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/hashPointPen.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/hashPointPen.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9e73ada5d4884362022178ac107762d6660308bf GIT binary patch literal 3215 zcmZ`*&u<&Y72a7ce~6Y;CzYKlX@RZW!XhFs-84Bgu!RiMj z|LdH;#O&YnXZi8)=Z|>x#~6eoSn7oI>!xhzhAyLdEv*f`&|}V1M|h%s=7_rVUf069 zV9%XS<1KbNy$&nx{5jD&$p)Y0!%?2e%zUm?uJGaZpANNAJTeD)l9>aUMYLu4xpLzx ztV$!Kl=XU=ODHpIK4CDzVZ*c5GX>&yvT;^$&RY+_|iY>A(V z+nBXQ4es43)}L`5SC;wTVXE!pc@ZbtAIZ#*c;+8Uf2^hOP3}jrjE?=}$mjkbosQ!B z+K=+gARO)Q=3|p4nZ(9)tgV`;3RZXgn4d`O=h;Atplv^2VWEAlq|b$b6|Q{~OFvi1 zAjx>@FSJ^vzT{C1i-1rkM&2*20KH5f!~lK~Y?WmazH((bfqM&>CiyrO{z&DA{4kyRLw>yC z<^nn(oMbl8MRNAbK>f%5_$dD-<3st%itbwk`$W9QE12zCV1h{^OuR>%It%%7T_`@W zB-Xo>0#Z;37$dmhP*+N($zd>%W_M>aK1`D+FyMm$AA%%96^>lkrrBW=(H%v6jAOc7>UjP1I2;I~BpkbOq1T~oDaO*l)^6>~Y z9PCu_%2dlGV@rWqYL~^D2rwrB$@Xl7Rh7a~7%AhJ8J0vc^m}6b!;Q9 zOI9m}cGrt)ORbRR)D1twtAB}M?#`V)8na<@CfwKVU1z|s;tB`dt=5~>Cco8h*C5!b z6)lU1mZqqye4L5GBWB=(r)7E+w(aMa#IUdweJ;%pj-n&tvfmv_k?`&_uEZ0SoXGCM zG&XtGeICVmo_2#1nVob&uI^}R;yn9(@P{sSs0Sk+9rJ9~r3wwo+y<#3C1c(i>NGfgTTcb%=XEjD{+B|4Ic zD4Ob_Y*VCP;4CEL3Qvq_O+9_4{dc|Z+%`r zcSK_en`TdKz}^Z6h%V&abG&*B!vOnVtyAp?=iK{;`<(|KuuJw~$xF9zgNFq(H!*2H zN)v79TCo2VTKWwr@NCwQ_*#T}Xv@uiAD%Z95?J4rFE_4d1)*akRL=D{2{5&5!v}v>ugF?o(d0 KB|A05+W!FIAXdTv literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/momentsPen.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/momentsPen.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7ca6f0bdef2a840dc670e98bf920277afc0a3d54 GIT binary patch literal 10234 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 Cy~;TN literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/perimeterPen.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/perimeterPen.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53fd99e542d06e3cf56e049b1d1537fdc2177933 GIT binary patch literal 2822 zcmb_eO>-MH7?$?KUOP@dk~AL$T0=v@1K6~M0cJY15SaGBgwXcD?17!lN{u&N@4DJ` zrU`~idhUfIm*$uYH*Wlry)hh^{)L`+UajqT-SmcL^h$aqtsXt^ht{8;uQQZS{`}n+ zRmT3I!E~`OxQ&|LgAmMRf(s+!J;OCP_07oaS+3QyUAtFtE4`{))p{#(Tu0bD+^va< zs6J(G{SFh*JY~X`#-ZuX3F|&<)ef#~_)##3{7g2pu59+D3VSk>s+l}&`punazu#@Y zz~QXL^Xk`rDz{|ZvhquQzps)fVGkRB82Cc@Sr~k!g70L!lXW-pl>nbTZQ|n8#*M*t zY11NYno(}%jjb^z932>hWmKqNLES)2*C8_YoDadv8XIzws|+JUk04jsk%2p#n~G!Y z3lc3Ow{V4SZg=FiK=kW+M*`vXe(k) zG|*PXyf}l_5og6Yv^8;FETFB6MX`i-PFxVnXd8lqq*VoXWSjr~y!6MNzYnro0UbUr z)F;o}KuzyL6ub}lk@m_V^NgVZX$}oxJhIi*A=|ZL3(|(R0<8({O^mBr>p)u*498l9 zZFXM%y8Bo5+mE+Kox8VMbw$+Vj^~AOn0a1q@A=U{=Cv$|q$2+EMb8&PyU)n+21@1& z6XiV_3{(meg7fjhe1*CbKb_q-nfUgJA7uG_X>rTUtyD%2T}MYrDl@eRh}v%oafXKH zA*iN0(s_edc*S1k2N$N@x;?(uEB;Nl);!bpA-vl|9=Okr`6dE#&71y+=fROwwv~i& zc5JAN*r4V}kSCuY%Bx;4*^>{FH=!Om+`-cHhuWhB0for85D+rF2J;R&L-w2jDbVFh0!d?x)($VvJHas zGNx0CbH*KB=Laigtdn&m?g*-ls^K=#8NmfW3lKB%P=089#th~mkS1Uiou(E@P!P7v zf=3F@)5ug!Oi=1cDIf^oES1F_13gVkP^dr2TVy7UiDg8kF*FZNjcSTQqX0zvjx7x+ zHv;6T;2P@n8S2z3mc5TUw(aFIU(*h+{rZ2wMtm!Bi&-=)(0wq4X8rYOPQtI0Zc21r z#ivH5G|`eF&1VdfYiT@VM`p?U3WKg;TV4&4UO$pgS_OxSjEZD`{WQbo4ev2rmg405 zShnc`+Jt1`wel6F)&=Bp<3fE0b;I-wlfg$rIG#X5<1 zAz=6$vs7Pz{yOUG4X?A~BoV%XmU6yEOYvED%As{=%_1GSCEZiCNR$(eT7vFV)G?lB znYVEgo-(_p7(1xYXD5I@#9(B0(5B69mCar_!jW}~@t3h#k>j*RRO)Dc4+_`l-#FF! za~>Xxk?}vr!V}}KmM?L#tYvJfb9Bf&y;8B?lX#`-9&)J|MAUD1-s6EE6*Kx>P?xY? zy-lJ?f+AN@z$l7eMfTJrDhi+}b~VrXbs>T%Po>1QW7Ovy)3F^3(kx`FfjsMpB=9_U zdGasPrhk$4cJVu>Usm_x$z(4~gZ8#O2&K}0E=mVC*+ywwYuBt{NT2qj$n$ir)V~a; Zq0F6|1qol$Ba#yPmeJs=+%YQv`X9NpXy^a{ literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/pointInsidePen.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/pointInsidePen.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7ca8243380c22ec68cc1aaace50b9746470064b GIT binary patch literal 5169 zcma)A&2QYs6(_meT`sj+eOT7FZ8mKaZ7Z$h52THoI8Gcpb&$$#q@V!NfZ*;>yR;~B zJ>=Tj#Vk9K?&yBzR#T5&R@-O;0{pk3(jW@mt!W3I!D$@e>NV7GS%7vhCq}%#Y(Jta! zZ>x6cQ-u|o{x!Zl?ODMtv(lbYFAu&vh{9w)ih{V&^+J%y50m?0>@)A77g}3e7BT;* z8+b=vnD}AadP~Y!z7%@PO1zk=&4Y+ramVd?al?EKwUoM=mOpl58mF$MwKxi%c)#ws zjJt{7N=^BFr`JTe_VCQCE$V&xDd6Ka-Z%j96kElTHKy7Hw#o`vlxpj24a+N`RAgml ze683eR$(T1nN6`OxWT4b4ZOl;*etlo=GZ*=6uZC{z^m*cTLhnGOKcgu##UgUbza1j z?oCZm_B(!T!A2*>h`+-WH?1U+X0e`jyrkoCv*KE9{|WkLrVD&8&h2NRJu{oN(G1+y zVcmiqqh3NDur{7{{KTs_%nDqRxM2(Zq674SDy_hcLEX@5dKULu{Z`FM;R`&Z{zvTuHcH7=fR8+_U zA6RD{w$Tpy-OiquY+4&vcXl?dYdbsjI)t%~zz@9!eExI;J*m!*v+%+wsA;sl6EH{L{uvQp_TLX_rTTlIvA@a6(FTg@i33Bhm zNgiuh`{)(8N#b!@IE}%)0~d2{T5;EF`3HThl=nP~Vwjp~_6IaMZ}%wd$>@&bhkoKX zw2okUT|O=BPXO4N=fOVw4ATxmBOnS z?ej9`spF01qSdN8SUMXmjnP6{l-Hw&%Cye0Sp?anByf}O(K`K^WlYukG7x+At$??*1xqIz$jw@-2OJJJta#|Uy z`U`Z8DH;^rfTvB(R0qrFt(mQ>MKg~cDw9EFv~Qw7u8vKi@>KzJcm!kq46)#-VQuvN zbNNl6P}g=}%h1(MDX&Sl+vPS4)c&$Nsr0PlGIsw|MBl@tqbN{kwZWAMy(i_*sXvZX z!Z1>QB2s1glDb*6YBE~+EQITsu4z#^b5hf?a}+)C_M^{FDM(?uIH_PJc1AA>`Z2b? zzz6B|TWzQf3t0xCtPhJq1uqTDLKoVh!mo)^#z|XI6b01X6XlGL>x$f#b>OnDB=luv zXrQhLUJ(W2qOzt8O<@RgK@s|rGMo}qa_m3KK7{U&Kh$5U8NQD)nSv;tbr4y1dYog& zk&ER^sIFJDgeE{p)#Fs{r`qw=RO{nCz6Oq$9pmk%YLaUH@p*&N9=spzVSv~ILEZzF z4Q*D{)%?{A)j%C;QFq?d*#Kv@F&c=VUPka|2!`C$WL^nYxrxct2F#;@n=nTKygHnQ z$#t0d3z#b7X3nb_m*yf;`+A@yD3(9Z? zGL@_>X5hM6$fAwPViwi9%muKK@pYT^e4% z8ZP8xF9)w7A3SUL1%>6x>#qWLtR&fmxh;RnMV32E6W~`%X*wh zLh5oA(kHTFZeo;0v4%M=(tMa@A)oC6#<(J`kcTkCx0$ZYc%nSluti;duEih2_qw=D z;T`UX6;{EjG~N)GK(n?>vTZ?J5|`zQ-#zI;mz@pR~t1A?Cj!P0#Q0!hb%LY4S=-wZ;zrAzCKW z#(Y2U_il~T zIf1`T)K#^0;@FZ)vIUg3=hg3a z;F;qn9i_-q65hHfSK5-4oh+;DPtEPc&h;UOMo~-OyzJ;1stF(s!0852`ke8 zgelrNo)rKiwH#Dx5>#rU76+67G70oi5-8s@36fJukh~!Yq#Np*J#XLr;(_z4`@3K6 zId>oK-T(Z-u08u;_pbBs^OG7*={4avPN%-VQvFXs1~(^7`51dwo(xVeJiv7+?%?|M zhP)UZx+&cGHW5mc`b-w)1qAr_h;P0_9j}6S zL1%iqlx?_t4j+@tF`e;&|Lo zkk$m{igx~Ln9E?~d-Oj;*WS=Q@*F2M9h?jq?)oTK9p`b+4f2+<EV)X6k0yC>v8o33S2u(3mrd zyLE$qf_8gxd@as?Mr&rjd&!%-y?WAk(;N66mp{76xR*emViCByVi7d+n^a1T U_p|liBIn6Frmh1V3#G#U0qauHy#N3J literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/pointPen.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/pointPen.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50ac756253b75f138c6d6a4076e3dc354f46a4ca GIT binary patch literal 13248 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/qtPen.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/qtPen.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e9066740e08a349ddae6a229e566b6e5bf704d0 GIT binary patch literal 1400 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 fugQhF%p;-#KhQ!>UzT literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/roundingPen.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/roundingPen.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27bd74c349fd3cbe4ccadbbc14a50d862fe15b69 GIT binary patch literal 4727 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 bd0SdOB!B8gXCdHS!!g%CbZ@)93kClN5H2ej literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/svgPathPen.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/svgPathPen.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9d6cb511548e1f3b7b3a8cb7da347af9c9ecec9 GIT binary patch literal 4699 zcmcgw-EY%Y6u;MY9FwL{zS)N+Z!l;!NCM?+5~~!kfNe%%w#d*fyMo$JI&N~_Vb%~8(1*Y{lCzRrJA9%*yz8EvaZaad9krCd$8 z8`55qytrRkc7$tJZrY)^9=fYeWp-^b4*beoV=)N4N_o}sS1X?Tpwe867XyE){81%x zW9LlMZalOXoTxG%`0-t^MwO=HN0n%GVb+cp@rLE*T2i>;xl!B*mYdT#?D;4Dto3d) zaB0n49J>BO`HB}bY%iKdr_T$4wIwj2RhscY+|a=KWPD^jy-P$uFdmMBHmEy%(cD%1 zqq`sut8)Qm3N92VRTZkx&_c07N1GFQVW8E;9#KG>7h|G`))3=jFWNm~pO`>f5c|ae zv}58R6muvk%-y@ud+mml1zXWY{Y)_x$%KdFeERHNy#a~+Lo9MLJ608+|a0ETxRfHmKUL|{N{ZcS{*YxzX z3HvZVHU~RQ)&k!tZDuJi2dmEAU~;m0+N_qgpFWHEvs*D_AZ1Vf`qb^SRWP5rpWRCM z?dN~ts+H6b(SU^$Ac@)xn$LJh9{7^cS&IPPb3XCm7;;HOie*NDw~h_osXW3qVhaRY z2Hiyr+N{eq7y<;3Il1c*)=>bW(pB3jh!|N~n}0)X4u4%pSnYezLiQ&A9g@>V>S}7mCfmX(p)H-y#2@@8ny&RyqgCH;Kolx@Uf@>r8u%x@TwEp(I)?1S76PG`1Nay#k? zq=@YPWubJmSZS;4yp!{2Se-djE|FGHQl_ZC?`j3Dc9B8IyrvNS}CS+lBi_ZU*Huo`#Elkm8R!5?AS477|&*Q zVaMBs0MGSh2-%ilOH=R1h)ks8=Bg9M5Y{v4iP`=CO4OZr38L9)^VGc&XE|;nG`TG# ziFQ2&s-`ZDj#E-3^9IV7;r99B#Cy@cPC;VPs!k?>myL)^+@Q%FTu8n37{l3^^Q ztPQ52p!GQ6Yl+%e7In25N8ww*;Rv*;onFVuUnyu39>6PEMhBUiL1ackxv%ZwA^sS2d@qSZrRX zV&OrkxrFZ4}QdJSu+5zK1rDjMSc{RH>!ZV15AknbUcZMYQJ(K2lV+xk0$Zc(3TQ1&D9EsCtGOEh8(x5eD2{5A zuZCBB2&9D9Yo**EoNThv@E9SrDS{NNY{#DoA{~U~WgT>Q7@CZ0dtlzd%0clAAOMgA zMOv6FJCv5c8&FW*?Gln2OyvyZdKD-PtGCauSkME4qUGrEtH-lF3{-K_hXSeqV#T9=(Xt+` z*j_p#50z=nOvP?^f=G$TheRYeW$IOk46H-;=wKgGgrZJF3CvK8yfJ1RHLe-^@EbG6 zk?iY3nZ7=hk<01hiaa={k(8bpRzdIyWGzbaB51@;6epVV*o~7s m_3=81K5x68BeoJNF|MR9JWYpR>Door&?dfPCk-SxgZ~Yg=I+)2 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/t2CharStringPen.cpython-39.pyc b/.venv/lib/python3.9/site-packages/fontTools/pens/__pycache__/t2CharStringPen.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..009f02abeae5aa13cf6c1f54f3d7efc24bed8fd9 GIT binary patch literal 3018 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 None: + """Begin a new sub path, set the current point to 'pt'. You must + end each sub path with a call to pen.closePath() or pen.endPath(). + """ + raise NotImplementedError + + def lineTo(self, pt: Tuple[float, float]) -> None: + """Draw a straight line from the current point to 'pt'.""" + raise NotImplementedError + + def curveTo(self, *points: Tuple[float, float]) -> None: + """Draw a cubic bezier with an arbitrary number of control points. + + The last point specified is on-curve, all others are off-curve + (control) points. If the number of control points is > 2, the + segment is split into multiple bezier segments. This works + like this: + + Let n be the number of control points (which is the number of + arguments to this call minus 1). If n==2, a plain vanilla cubic + bezier is drawn. If n==1, we fall back to a quadratic segment and + if n==0 we draw a straight line. It gets interesting when n>2: + n-1 PostScript-style cubic segments will be drawn as if it were + one curve. See decomposeSuperBezierSegment(). + + The conversion algorithm used for n>2 is inspired by NURB + splines, and is conceptually equivalent to the TrueType "implied + points" principle. See also decomposeQuadraticSegment(). + """ + raise NotImplementedError + + def qCurveTo(self, *points: Tuple[float, float]) -> None: + """Draw a whole string of quadratic curve segments. + + The last point specified is on-curve, all others are off-curve + points. + + This method implements TrueType-style curves, breaking up curves + using 'implied points': between each two consequtive off-curve points, + there is one implied point exactly in the middle between them. See + also decomposeQuadraticSegment(). + + The last argument (normally the on-curve point) may be None. + This is to support contours that have NO on-curve points (a rarely + seen feature of TrueType outlines). + """ + raise NotImplementedError + + def closePath(self) -> None: + """Close the current sub path. You must call either pen.closePath() + or pen.endPath() after each sub path. + """ + pass + + def endPath(self) -> None: + """End the current sub path, but don't close it. You must call + either pen.closePath() or pen.endPath() after each sub path. + """ + pass + + def addComponent( + self, + glyphName: str, + transformation: Tuple[float, float, float, float, float, float] + ) -> None: + """Add a sub glyph. The 'transformation' argument must be a 6-tuple + containing an affine transformation, or a Transform object from the + fontTools.misc.transform module. More precisely: it should be a + sequence containing 6 numbers. + """ + raise NotImplementedError + + +class NullPen(AbstractPen): + + """A pen that does nothing. + """ + + def moveTo(self, pt): + pass + + def lineTo(self, pt): + pass + + def curveTo(self, *points): + pass + + def qCurveTo(self, *points): + pass + + def closePath(self): + pass + + def endPath(self): + pass + + def addComponent(self, glyphName, transformation): + pass + + +class LoggingPen(LogMixin, AbstractPen): + """A pen with a `log` property (see fontTools.misc.loggingTools.LogMixin) + """ + pass + + +class MissingComponentError(KeyError): + """Indicates a component pointing to a non-existent glyph in the glyphset.""" + + +class DecomposingPen(LoggingPen): + + """ Implements a 'addComponent' method that decomposes components + (i.e. draws them onto self as simple contours). + It can also be used as a mixin class (e.g. see ContourRecordingPen). + + You must override moveTo, lineTo, curveTo and qCurveTo. You may + additionally override closePath, endPath and addComponent. + + By default a warning message is logged when a base glyph is missing; + set the class variable ``skipMissingComponents`` to False if you want + to raise a :class:`MissingComponentError` exception. + """ + + skipMissingComponents = True + + def __init__(self, glyphSet): + """ Takes a single 'glyphSet' argument (dict), in which the glyphs + that are referenced as components are looked up by their name. + """ + super(DecomposingPen, self).__init__() + self.glyphSet = glyphSet + + def addComponent(self, glyphName, transformation): + """ Transform the points of the base glyph and draw it onto self. + """ + from fontTools.pens.transformPen import TransformPen + try: + glyph = self.glyphSet[glyphName] + except KeyError: + if not self.skipMissingComponents: + raise MissingComponentError(glyphName) + self.log.warning( + "glyph '%s' is missing from glyphSet; skipped" % glyphName) + else: + tPen = TransformPen(self, transformation) + glyph.draw(tPen) + + +class BasePen(DecomposingPen): + + """Base class for drawing pens. You must override _moveTo, _lineTo and + _curveToOne. You may additionally override _closePath, _endPath, + addComponent and/or _qCurveToOne. You should not override any other + methods. + """ + + def __init__(self, glyphSet=None): + super(BasePen, self).__init__(glyphSet) + self.__currentPoint = None + + # must override + + def _moveTo(self, pt): + raise NotImplementedError + + def _lineTo(self, pt): + raise NotImplementedError + + def _curveToOne(self, pt1, pt2, pt3): + raise NotImplementedError + + # may override + + def _closePath(self): + pass + + def _endPath(self): + pass + + def _qCurveToOne(self, pt1, pt2): + """This method implements the basic quadratic curve type. The + default implementation delegates the work to the cubic curve + function. Optionally override with a native implementation. + """ + pt0x, pt0y = self.__currentPoint + pt1x, pt1y = pt1 + pt2x, pt2y = pt2 + mid1x = pt0x + 0.66666666666666667 * (pt1x - pt0x) + mid1y = pt0y + 0.66666666666666667 * (pt1y - pt0y) + mid2x = pt2x + 0.66666666666666667 * (pt1x - pt2x) + mid2y = pt2y + 0.66666666666666667 * (pt1y - pt2y) + self._curveToOne((mid1x, mid1y), (mid2x, mid2y), pt2) + + # don't override + + def _getCurrentPoint(self): + """Return the current point. This is not part of the public + interface, yet is useful for subclasses. + """ + return self.__currentPoint + + def closePath(self): + self._closePath() + self.__currentPoint = None + + def endPath(self): + self._endPath() + self.__currentPoint = None + + def moveTo(self, pt): + self._moveTo(pt) + self.__currentPoint = pt + + def lineTo(self, pt): + self._lineTo(pt) + self.__currentPoint = pt + + def curveTo(self, *points): + n = len(points) - 1 # 'n' is the number of control points + assert n >= 0 + if n == 2: + # The common case, we have exactly two BCP's, so this is a standard + # cubic bezier. Even though decomposeSuperBezierSegment() handles + # this case just fine, we special-case it anyway since it's so + # common. + self._curveToOne(*points) + self.__currentPoint = points[-1] + elif n > 2: + # n is the number of control points; split curve into n-1 cubic + # bezier segments. The algorithm used here is inspired by NURB + # splines and the TrueType "implied point" principle, and ensures + # the smoothest possible connection between two curve segments, + # with no disruption in the curvature. It is practical since it + # allows one to construct multiple bezier segments with a much + # smaller amount of points. + _curveToOne = self._curveToOne + for pt1, pt2, pt3 in decomposeSuperBezierSegment(points): + _curveToOne(pt1, pt2, pt3) + self.__currentPoint = pt3 + elif n == 1: + self.qCurveTo(*points) + elif n == 0: + self.lineTo(points[0]) + else: + raise AssertionError("can't get there from here") + + def qCurveTo(self, *points): + n = len(points) - 1 # 'n' is the number of control points + assert n >= 0 + if points[-1] is None: + # Special case for TrueType quadratics: it is possible to + # define a contour with NO on-curve points. BasePen supports + # this by allowing the final argument (the expected on-curve + # point) to be None. We simulate the feature by making the implied + # on-curve point between the last and the first off-curve points + # explicit. + x, y = points[-2] # last off-curve point + nx, ny = points[0] # first off-curve point + impliedStartPoint = (0.5 * (x + nx), 0.5 * (y + ny)) + self.__currentPoint = impliedStartPoint + self._moveTo(impliedStartPoint) + points = points[:-1] + (impliedStartPoint,) + if n > 0: + # Split the string of points into discrete quadratic curve + # segments. Between any two consecutive off-curve points + # there's an implied on-curve point exactly in the middle. + # This is where the segment splits. + _qCurveToOne = self._qCurveToOne + for pt1, pt2 in decomposeQuadraticSegment(points): + _qCurveToOne(pt1, pt2) + self.__currentPoint = pt2 + else: + self.lineTo(points[0]) + + +def decomposeSuperBezierSegment(points): + """Split the SuperBezier described by 'points' into a list of regular + bezier segments. The 'points' argument must be a sequence with length + 3 or greater, containing (x, y) coordinates. The last point is the + destination on-curve point, the rest of the points are off-curve points. + The start point should not be supplied. + + This function returns a list of (pt1, pt2, pt3) tuples, which each + specify a regular curveto-style bezier segment. + """ + n = len(points) - 1 + assert n > 1 + bezierSegments = [] + pt1, pt2, pt3 = points[0], None, None + for i in range(2, n+1): + # calculate points in between control points. + nDivisions = min(i, 3, n-i+2) + for j in range(1, nDivisions): + factor = j / nDivisions + temp1 = points[i-1] + temp2 = points[i-2] + temp = (temp2[0] + factor * (temp1[0] - temp2[0]), + temp2[1] + factor * (temp1[1] - temp2[1])) + if pt2 is None: + pt2 = temp + else: + pt3 = (0.5 * (pt2[0] + temp[0]), + 0.5 * (pt2[1] + temp[1])) + bezierSegments.append((pt1, pt2, pt3)) + pt1, pt2, pt3 = temp, None, None + bezierSegments.append((pt1, points[-2], points[-1])) + return bezierSegments + + +def decomposeQuadraticSegment(points): + """Split the quadratic curve segment described by 'points' into a list + of "atomic" quadratic segments. The 'points' argument must be a sequence + with length 2 or greater, containing (x, y) coordinates. The last point + is the destination on-curve point, the rest of the points are off-curve + points. The start point should not be supplied. + + This function returns a list of (pt1, pt2) tuples, which each specify a + plain quadratic bezier segment. + """ + n = len(points) - 1 + assert n > 0 + quadSegments = [] + for i in range(n - 1): + x, y = points[i] + nx, ny = points[i+1] + impliedPt = (0.5 * (x + nx), 0.5 * (y + ny)) + quadSegments.append((points[i], impliedPt)) + quadSegments.append((points[-2], points[-1])) + return quadSegments + + +class _TestPen(BasePen): + """Test class that prints PostScript to stdout.""" + def _moveTo(self, pt): + print("%s %s moveto" % (pt[0], pt[1])) + def _lineTo(self, pt): + print("%s %s lineto" % (pt[0], pt[1])) + def _curveToOne(self, bcp1, bcp2, pt): + print("%s %s %s %s %s %s curveto" % (bcp1[0], bcp1[1], + bcp2[0], bcp2[1], pt[0], pt[1])) + def _closePath(self): + print("closepath") + + +if __name__ == "__main__": + pen = _TestPen(None) + pen.moveTo((0, 0)) + pen.lineTo((0, 100)) + pen.curveTo((50, 75), (60, 50), (50, 25), (0, 0)) + pen.closePath() + + pen = _TestPen(None) + # testing the "no on-curve point" scenario + pen.qCurveTo((0, 0), (0, 100), (100, 100), (100, 0), None) + pen.closePath() diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/boundsPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/boundsPen.py new file mode 100644 index 00000000..810715ca --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/boundsPen.py @@ -0,0 +1,96 @@ +from fontTools.misc.arrayTools import updateBounds, pointInRect, unionRect +from fontTools.misc.bezierTools import calcCubicBounds, calcQuadraticBounds +from fontTools.pens.basePen import BasePen + + +__all__ = ["BoundsPen", "ControlBoundsPen"] + + +class ControlBoundsPen(BasePen): + + """Pen to calculate the "control bounds" of a shape. This is the + bounding box of all control points, so may be larger than the + actual bounding box if there are curves that don't have points + on their extremes. + + When the shape has been drawn, the bounds are available as the + 'bounds' attribute of the pen object. It's a 4-tuple: + (xMin, yMin, xMax, yMax). + + If 'ignoreSinglePoints' is True, single points are ignored. + """ + + def __init__(self, glyphSet, ignoreSinglePoints=False): + BasePen.__init__(self, glyphSet) + self.ignoreSinglePoints = ignoreSinglePoints + self.init() + + def init(self): + self.bounds = None + self._start = None + + def _moveTo(self, pt): + self._start = pt + if not self.ignoreSinglePoints: + self._addMoveTo() + + def _addMoveTo(self): + if self._start is None: + return + bounds = self.bounds + if bounds: + self.bounds = updateBounds(bounds, self._start) + else: + x, y = self._start + self.bounds = (x, y, x, y) + self._start = None + + def _lineTo(self, pt): + self._addMoveTo() + self.bounds = updateBounds(self.bounds, pt) + + def _curveToOne(self, bcp1, bcp2, pt): + self._addMoveTo() + bounds = self.bounds + bounds = updateBounds(bounds, bcp1) + bounds = updateBounds(bounds, bcp2) + bounds = updateBounds(bounds, pt) + self.bounds = bounds + + def _qCurveToOne(self, bcp, pt): + self._addMoveTo() + bounds = self.bounds + bounds = updateBounds(bounds, bcp) + bounds = updateBounds(bounds, pt) + self.bounds = bounds + + +class BoundsPen(ControlBoundsPen): + + """Pen to calculate the bounds of a shape. It calculates the + correct bounds even when the shape contains curves that don't + have points on their extremes. This is somewhat slower to compute + than the "control bounds". + + When the shape has been drawn, the bounds are available as the + 'bounds' attribute of the pen object. It's a 4-tuple: + (xMin, yMin, xMax, yMax) + """ + + def _curveToOne(self, bcp1, bcp2, pt): + self._addMoveTo() + bounds = self.bounds + bounds = updateBounds(bounds, pt) + if not pointInRect(bcp1, bounds) or not pointInRect(bcp2, bounds): + bounds = unionRect(bounds, calcCubicBounds( + self._getCurrentPoint(), bcp1, bcp2, pt)) + self.bounds = bounds + + def _qCurveToOne(self, bcp, pt): + self._addMoveTo() + bounds = self.bounds + bounds = updateBounds(bounds, pt) + if not pointInRect(bcp, bounds): + bounds = unionRect(bounds, calcQuadraticBounds( + self._getCurrentPoint(), bcp, pt)) + self.bounds = bounds diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/cocoaPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/cocoaPen.py new file mode 100644 index 00000000..67482b4d --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/cocoaPen.py @@ -0,0 +1,26 @@ +from fontTools.pens.basePen import BasePen + + +__all__ = ["CocoaPen"] + + +class CocoaPen(BasePen): + + def __init__(self, glyphSet, path=None): + BasePen.__init__(self, glyphSet) + if path is None: + from AppKit import NSBezierPath + path = NSBezierPath.bezierPath() + self.path = path + + def _moveTo(self, p): + self.path.moveToPoint_(p) + + def _lineTo(self, p): + self.path.lineToPoint_(p) + + def _curveToOne(self, p1, p2, p3): + self.path.curveToPoint_controlPoint1_controlPoint2_(p3, p1, p2) + + def _closePath(self): + self.path.closePath() diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/cu2quPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/cu2quPen.py new file mode 100644 index 00000000..497585bc --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/cu2quPen.py @@ -0,0 +1,257 @@ +# Copyright 2016 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from fontTools.cu2qu import curve_to_quadratic +from fontTools.pens.basePen import AbstractPen, decomposeSuperBezierSegment +from fontTools.pens.reverseContourPen import ReverseContourPen +from fontTools.pens.pointPen import BasePointToSegmentPen +from fontTools.pens.pointPen import ReverseContourPointPen + + +class Cu2QuPen(AbstractPen): + """ A filter pen to convert cubic bezier curves to quadratic b-splines + using the FontTools SegmentPen protocol. + + other_pen: another SegmentPen used to draw the transformed outline. + max_err: maximum approximation error in font units. For optimal results, + if you know the UPEM of the font, we recommend setting this to a + value equal, or close to UPEM / 1000. + reverse_direction: flip the contours' direction but keep starting point. + stats: a dictionary counting the point numbers of quadratic segments. + ignore_single_points: don't emit contours containing only a single point + + NOTE: The "ignore_single_points" argument is deprecated since v1.3.0, + which dropped Robofab subpport. It's no longer needed to special-case + UFO2-style anchors (aka "named points") when using ufoLib >= 2.0, + as these are no longer drawn onto pens as single-point contours, + but are handled separately as anchors. + """ + + def __init__(self, other_pen, max_err, reverse_direction=False, + stats=None, ignore_single_points=False): + if reverse_direction: + self.pen = ReverseContourPen(other_pen) + else: + self.pen = other_pen + self.max_err = max_err + self.stats = stats + if ignore_single_points: + import warnings + warnings.warn("ignore_single_points is deprecated and " + "will be removed in future versions", + UserWarning, stacklevel=2) + self.ignore_single_points = ignore_single_points + self.start_pt = None + self.current_pt = None + + def _check_contour_is_open(self): + if self.current_pt is None: + raise AssertionError("moveTo is required") + + def _check_contour_is_closed(self): + if self.current_pt is not None: + raise AssertionError("closePath or endPath is required") + + def _add_moveTo(self): + if self.start_pt is not None: + self.pen.moveTo(self.start_pt) + self.start_pt = None + + def moveTo(self, pt): + self._check_contour_is_closed() + self.start_pt = self.current_pt = pt + if not self.ignore_single_points: + self._add_moveTo() + + def lineTo(self, pt): + self._check_contour_is_open() + self._add_moveTo() + self.pen.lineTo(pt) + self.current_pt = pt + + def qCurveTo(self, *points): + self._check_contour_is_open() + n = len(points) + if n == 1: + self.lineTo(points[0]) + elif n > 1: + self._add_moveTo() + self.pen.qCurveTo(*points) + self.current_pt = points[-1] + else: + raise AssertionError("illegal qcurve segment point count: %d" % n) + + def _curve_to_quadratic(self, pt1, pt2, pt3): + curve = (self.current_pt, pt1, pt2, pt3) + quadratic = curve_to_quadratic(curve, self.max_err) + if self.stats is not None: + n = str(len(quadratic) - 2) + self.stats[n] = self.stats.get(n, 0) + 1 + self.qCurveTo(*quadratic[1:]) + + def curveTo(self, *points): + self._check_contour_is_open() + n = len(points) + if n == 3: + # this is the most common case, so we special-case it + self._curve_to_quadratic(*points) + elif n > 3: + for segment in decomposeSuperBezierSegment(points): + self._curve_to_quadratic(*segment) + elif n == 2: + self.qCurveTo(*points) + elif n == 1: + self.lineTo(points[0]) + else: + raise AssertionError("illegal curve segment point count: %d" % n) + + def closePath(self): + self._check_contour_is_open() + if self.start_pt is None: + # if 'start_pt' is _not_ None, we are ignoring single-point paths + self.pen.closePath() + self.current_pt = self.start_pt = None + + def endPath(self): + self._check_contour_is_open() + if self.start_pt is None: + self.pen.endPath() + self.current_pt = self.start_pt = None + + def addComponent(self, glyphName, transformation): + self._check_contour_is_closed() + self.pen.addComponent(glyphName, transformation) + + +class Cu2QuPointPen(BasePointToSegmentPen): + """ A filter pen to convert cubic bezier curves to quadratic b-splines + using the RoboFab PointPen protocol. + + other_point_pen: another PointPen used to draw the transformed outline. + max_err: maximum approximation error in font units. For optimal results, + if you know the UPEM of the font, we recommend setting this to a + value equal, or close to UPEM / 1000. + reverse_direction: reverse the winding direction of all contours. + stats: a dictionary counting the point numbers of quadratic segments. + """ + + def __init__(self, other_point_pen, max_err, reverse_direction=False, + stats=None): + BasePointToSegmentPen.__init__(self) + if reverse_direction: + self.pen = ReverseContourPointPen(other_point_pen) + else: + self.pen = other_point_pen + self.max_err = max_err + self.stats = stats + + def _flushContour(self, segments): + assert len(segments) >= 1 + closed = segments[0][0] != "move" + new_segments = [] + prev_points = segments[-1][1] + prev_on_curve = prev_points[-1][0] + for segment_type, points in segments: + if segment_type == 'curve': + for sub_points in self._split_super_bezier_segments(points): + on_curve, smooth, name, kwargs = sub_points[-1] + bcp1, bcp2 = sub_points[0][0], sub_points[1][0] + cubic = [prev_on_curve, bcp1, bcp2, on_curve] + quad = curve_to_quadratic(cubic, self.max_err) + if self.stats is not None: + n = str(len(quad) - 2) + self.stats[n] = self.stats.get(n, 0) + 1 + new_points = [(pt, False, None, {}) for pt in quad[1:-1]] + new_points.append((on_curve, smooth, name, kwargs)) + new_segments.append(["qcurve", new_points]) + prev_on_curve = sub_points[-1][0] + else: + new_segments.append([segment_type, points]) + prev_on_curve = points[-1][0] + if closed: + # the BasePointToSegmentPen.endPath method that calls _flushContour + # rotates the point list of closed contours so that they end with + # the first on-curve point. We restore the original starting point. + new_segments = new_segments[-1:] + new_segments[:-1] + self._drawPoints(new_segments) + + def _split_super_bezier_segments(self, points): + sub_segments = [] + # n is the number of control points + n = len(points) - 1 + if n == 2: + # a simple bezier curve segment + sub_segments.append(points) + elif n > 2: + # a "super" bezier; decompose it + on_curve, smooth, name, kwargs = points[-1] + num_sub_segments = n - 1 + for i, sub_points in enumerate(decomposeSuperBezierSegment([ + pt for pt, _, _, _ in points])): + new_segment = [] + for point in sub_points[:-1]: + new_segment.append((point, False, None, {})) + if i == (num_sub_segments - 1): + # the last on-curve keeps its original attributes + new_segment.append((on_curve, smooth, name, kwargs)) + else: + # on-curves of sub-segments are always "smooth" + new_segment.append((sub_points[-1], True, None, {})) + sub_segments.append(new_segment) + else: + raise AssertionError( + "expected 2 control points, found: %d" % n) + return sub_segments + + def _drawPoints(self, segments): + pen = self.pen + pen.beginPath() + last_offcurves = [] + for i, (segment_type, points) in enumerate(segments): + if segment_type in ("move", "line"): + assert len(points) == 1, ( + "illegal line segment point count: %d" % len(points)) + pt, smooth, name, kwargs = points[0] + pen.addPoint(pt, segment_type, smooth, name, **kwargs) + elif segment_type == "qcurve": + assert len(points) >= 2, ( + "illegal qcurve segment point count: %d" % len(points)) + offcurves = points[:-1] + if offcurves: + if i == 0: + # any off-curve points preceding the first on-curve + # will be appended at the end of the contour + last_offcurves = offcurves + else: + for (pt, smooth, name, kwargs) in offcurves: + pen.addPoint(pt, None, smooth, name, **kwargs) + pt, smooth, name, kwargs = points[-1] + if pt is None: + # special quadratic contour with no on-curve points: + # we need to skip the "None" point. See also the Pen + # protocol's qCurveTo() method and fontTools.pens.basePen + pass + else: + pen.addPoint(pt, segment_type, smooth, name, **kwargs) + else: + # 'curve' segments must have been converted to 'qcurve' by now + raise AssertionError( + "unexpected segment type: %r" % segment_type) + for (pt, smooth, name, kwargs) in last_offcurves: + pen.addPoint(pt, None, smooth, name, **kwargs) + pen.endPath() + + def addComponent(self, baseGlyphName, transformation): + assert self.currentPath is None + self.pen.addComponent(baseGlyphName, transformation) diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/filterPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/filterPen.py new file mode 100644 index 00000000..4355ba41 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/filterPen.py @@ -0,0 +1,158 @@ +from fontTools.pens.basePen import AbstractPen +from fontTools.pens.pointPen import AbstractPointPen +from fontTools.pens.recordingPen import RecordingPen + + +class _PassThruComponentsMixin(object): + + def addComponent(self, glyphName, transformation, **kwargs): + self._outPen.addComponent(glyphName, transformation, **kwargs) + + +class FilterPen(_PassThruComponentsMixin, AbstractPen): + + """ Base class for pens that apply some transformation to the coordinates + they receive and pass them to another pen. + + You can override any of its methods. The default implementation does + nothing, but passes the commands unmodified to the other pen. + + >>> from fontTools.pens.recordingPen import RecordingPen + >>> rec = RecordingPen() + >>> pen = FilterPen(rec) + >>> v = iter(rec.value) + + >>> pen.moveTo((0, 0)) + >>> next(v) + ('moveTo', ((0, 0),)) + + >>> pen.lineTo((1, 1)) + >>> next(v) + ('lineTo', ((1, 1),)) + + >>> pen.curveTo((2, 2), (3, 3), (4, 4)) + >>> next(v) + ('curveTo', ((2, 2), (3, 3), (4, 4))) + + >>> pen.qCurveTo((5, 5), (6, 6), (7, 7), (8, 8)) + >>> next(v) + ('qCurveTo', ((5, 5), (6, 6), (7, 7), (8, 8))) + + >>> pen.closePath() + >>> next(v) + ('closePath', ()) + + >>> pen.moveTo((9, 9)) + >>> next(v) + ('moveTo', ((9, 9),)) + + >>> pen.endPath() + >>> next(v) + ('endPath', ()) + + >>> pen.addComponent('foo', (1, 0, 0, 1, 0, 0)) + >>> next(v) + ('addComponent', ('foo', (1, 0, 0, 1, 0, 0))) + """ + + def __init__(self, outPen): + self._outPen = outPen + + def moveTo(self, pt): + self._outPen.moveTo(pt) + + def lineTo(self, pt): + self._outPen.lineTo(pt) + + def curveTo(self, *points): + self._outPen.curveTo(*points) + + def qCurveTo(self, *points): + self._outPen.qCurveTo(*points) + + def closePath(self): + self._outPen.closePath() + + def endPath(self): + self._outPen.endPath() + + +class ContourFilterPen(_PassThruComponentsMixin, RecordingPen): + """A "buffered" filter pen that accumulates contour data, passes + it through a ``filterContour`` method when the contour is closed or ended, + and finally draws the result with the output pen. + + Components are passed through unchanged. + """ + + def __init__(self, outPen): + super(ContourFilterPen, self).__init__() + self._outPen = outPen + + def closePath(self): + super(ContourFilterPen, self).closePath() + self._flushContour() + + def endPath(self): + super(ContourFilterPen, self).endPath() + self._flushContour() + + def _flushContour(self): + result = self.filterContour(self.value) + if result is not None: + self.value = result + self.replay(self._outPen) + self.value = [] + + def filterContour(self, contour): + """Subclasses must override this to perform the filtering. + + The contour is a list of pen (operator, operands) tuples. + Operators are strings corresponding to the AbstractPen methods: + "moveTo", "lineTo", "curveTo", "qCurveTo", "closePath" and + "endPath". The operands are the positional arguments that are + passed to each method. + + If the method doesn't return a value (i.e. returns None), it's + assumed that the argument was modified in-place. + Otherwise, the return value is drawn with the output pen. + """ + return # or return contour + + +class FilterPointPen(_PassThruComponentsMixin, AbstractPointPen): + """ Baseclass for point pens that apply some transformation to the + coordinates they receive and pass them to another point pen. + + You can override any of its methods. The default implementation does + nothing, but passes the commands unmodified to the other pen. + + >>> from fontTools.pens.recordingPen import RecordingPointPen + >>> rec = RecordingPointPen() + >>> pen = FilterPointPen(rec) + >>> v = iter(rec.value) + >>> pen.beginPath(identifier="abc") + >>> next(v) + ('beginPath', (), {'identifier': 'abc'}) + >>> pen.addPoint((1, 2), "line", False) + >>> next(v) + ('addPoint', ((1, 2), 'line', False, None), {}) + >>> pen.addComponent("a", (2, 0, 0, 2, 10, -10), identifier="0001") + >>> next(v) + ('addComponent', ('a', (2, 0, 0, 2, 10, -10)), {'identifier': '0001'}) + >>> pen.endPath() + >>> next(v) + ('endPath', (), {}) + """ + + def __init__(self, outPointPen): + self._outPen = outPointPen + + def beginPath(self, **kwargs): + self._outPen.beginPath(**kwargs) + + def endPath(self): + self._outPen.endPath() + + def addPoint(self, pt, segmentType=None, smooth=False, name=None, **kwargs): + self._outPen.addPoint(pt, segmentType, smooth, name, **kwargs) diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/hashPointPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/hashPointPen.py new file mode 100644 index 00000000..9aef5d87 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/hashPointPen.py @@ -0,0 +1,77 @@ +# Modified from https://github.com/adobe-type-tools/psautohint/blob/08b346865710ed3c172f1eb581d6ef243b203f99/python/psautohint/ufoFont.py#L800-L838 +import hashlib + +from fontTools.pens.basePen import MissingComponentError +from fontTools.pens.pointPen import AbstractPointPen + + +class HashPointPen(AbstractPointPen): + """ + This pen can be used to check if a glyph's contents (outlines plus + components) have changed. + + Components are added as the original outline plus each composite's + transformation. + + Example: You have some TrueType hinting code for a glyph which you want to + compile. The hinting code specifies a hash value computed with HashPointPen + that was valid for the glyph's outlines at the time the hinting code was + written. Now you can calculate the hash for the glyph's current outlines to + check if the outlines have changed, which would probably make the hinting + code invalid. + + > glyph = ufo[name] + > hash_pen = HashPointPen(glyph.width, ufo) + > glyph.drawPoints(hash_pen) + > ttdata = glyph.lib.get("public.truetype.instructions", None) + > stored_hash = ttdata.get("id", None) # The hash is stored in the "id" key + > if stored_hash is None or stored_hash != hash_pen.hash: + > logger.error(f"Glyph hash mismatch, glyph '{name}' will have no instructions in font.") + > else: + > # The hash values are identical, the outline has not changed. + > # Compile the hinting code ... + > pass + """ + + def __init__(self, glyphWidth=0, glyphSet=None): + self.glyphset = glyphSet + self.data = ["w%s" % round(glyphWidth, 9)] + + @property + def hash(self): + data = "".join(self.data) + if len(data) >= 128: + data = hashlib.sha512(data.encode("ascii")).hexdigest() + return data + + def beginPath(self, identifier=None, **kwargs): + pass + + def endPath(self): + self.data.append("|") + + def addPoint( + self, + pt, + segmentType=None, + smooth=False, + name=None, + identifier=None, + **kwargs, + ): + if segmentType is None: + pt_type = "o" # offcurve + else: + pt_type = segmentType[0] + self.data.append(f"{pt_type}{pt[0]:g}{pt[1]:+g}") + + def addComponent( + self, baseGlyphName, transformation, identifier=None, **kwargs + ): + tr = "".join([f"{t:+}" for t in transformation]) + self.data.append("[") + try: + self.glyphset[baseGlyphName].drawPoints(self) + except KeyError: + raise MissingComponentError(baseGlyphName) + self.data.append(f"({tr})]") diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/momentsPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/momentsPen.py new file mode 100644 index 00000000..8c90f70a --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/momentsPen.py @@ -0,0 +1,297 @@ +"""Pen calculating 0th, 1st, and 2nd moments of area of glyph shapes. +This is low-level, autogenerated pen. Use statisticsPen instead.""" +from fontTools.pens.basePen import BasePen + + +__all__ = ["MomentsPen"] + + +class OpenContourError(NotImplementedError): + pass + + +class MomentsPen(BasePen): + + def __init__(self, glyphset=None): + BasePen.__init__(self, glyphset) + + self.area = 0 + self.momentX = 0 + self.momentY = 0 + self.momentXX = 0 + self.momentXY = 0 + self.momentYY = 0 + + def _moveTo(self, p0): + self.__startPoint = p0 + + def _closePath(self): + p0 = self._getCurrentPoint() + if p0 != self.__startPoint: + self._lineTo(self.__startPoint) + + def _endPath(self): + p0 = self._getCurrentPoint() + if p0 != self.__startPoint: + raise OpenContourError( + "Green theorem is not defined on open contours." + ) + + def _lineTo(self, p1): + x0,y0 = self._getCurrentPoint() + x1,y1 = p1 + + r0 = x1*y0 + r1 = x1*y1 + r2 = x1**2 + r3 = x0**2 + r4 = 2*y0 + r5 = y0 - y1 + r6 = r5*x0 + r7 = y0**2 + r8 = y1**2 + r9 = x1**3 + r10 = r4*y1 + r11 = y0**3 + r12 = y1**3 + + self.area += -r0/2 - r1/2 + x0*(y0 + y1)/2 + self.momentX += -r2*y0/6 - r2*y1/3 + r3*(r4 + y1)/6 - r6*x1/6 + self.momentY += -r0*y1/6 - r7*x1/6 - r8*x1/6 + x0*(r7 + r8 + y0*y1)/6 + self.momentXX += -r2*r6/12 - r3*r5*x1/12 - r9*y0/12 - r9*y1/4 + x0**3*(3*y0 + y1)/12 + self.momentXY += -r10*r2/24 - r2*r7/24 - r2*r8/8 + r3*(r10 + 3*r7 + r8)/24 - x0*x1*(r7 - r8)/12 + self.momentYY += -r0*r8/12 - r1*r7/12 - r11*x1/12 - r12*x1/12 + x0*(r11 + r12 + r7*y1 + r8*y0)/12 + + def _qCurveToOne(self, p1, p2): + x0,y0 = self._getCurrentPoint() + x1,y1 = p1 + x2,y2 = p2 + + r0 = 2*x1 + r1 = r0*y2 + r2 = 2*y1 + r3 = r2*x2 + r4 = 3*y2 + r5 = r4*x2 + r6 = 3*y0 + r7 = x1**2 + r8 = 2*y2 + r9 = x2**2 + r10 = 4*y1 + r11 = 10*y2 + r12 = r0*x2 + r13 = x0**2 + r14 = 10*y0 + r15 = x2*y2 + r16 = r0*y1 + r15 + r17 = 4*x1 + r18 = x2*y0 + r19 = r10*r15 + r20 = y1**2 + r21 = 2*r20 + r22 = y2**2 + r23 = r22*x2 + r24 = 5*r23 + r25 = y0**2 + r26 = y0*y2 + r27 = 5*r25 + r28 = 8*x1**3 + r29 = x2**3 + r30 = 30*y1 + r31 = 6*y1 + r32 = 10*r9*x1 + r33 = 4*r7 + r34 = 5*y2 + r35 = 12*r7 + r36 = r5 + 20*x1*y1 + r37 = 30*x1 + r38 = 12*x1 + r39 = 20*r7 + r40 = 8*r7*y1 + r41 = r34*r9 + r42 = 60*y1 + r43 = 20*r20 + r44 = 4*r20 + r45 = 15*r22 + r46 = r38*x2 + r47 = y1*y2 + r48 = 8*r20*x1 + r24 + r49 = 6*x1 + r50 = 8*y1**3 + r51 = y2**3 + r52 = y0**3 + r53 = 10*y1 + r54 = 12*y1 + r55 = 12*r20 + + self.area += r1/6 - r3/6 - r5/6 + x0*(r2 + r6 + y2)/6 - y0*(r0 + x2)/6 + self.momentX += -r10*r9/30 - r11*r9/30 - r12*(-r8 + y1)/30 + r13*(r10 + r14 + y2)/30 + r7*r8/30 + x0*(r1 + r16 - r17*y0 - r18)/30 - y0*(r12 + 2*r7 + r9)/30 + self.momentY += r1*(r8 + y1)/30 - r19/30 - r21*x2/30 - r24/30 - r25*(r17 + x2)/30 + x0*(r10*y0 + r2*y2 + r21 + r22 + r26 + r27)/30 - y0*(r16 + r3)/30 + self.momentXX += r13*(r11*x1 - 5*r18 + r3 + r36 - r37*y0)/420 + r28*y2/420 - r29*r30/420 - r29*y2/4 - r32*(r2 - r4)/420 - r33*x2*(r2 - r34)/420 + x0**3*(r31 + 21*y0 + y2)/84 - x0*(-r15*r38 + r18*r38 + r2*r9 - r35*y2 + r39*y0 - r40 - r41 + r6*r9)/420 - y0*(r28 + 5*r29 + r32 + r35*x2)/420 + self.momentXY += r13*(r14*y2 + 3*r22 + 105*r25 + r42*y0 + r43 + 12*r47)/840 - r17*x2*(r44 - r45)/840 - r22*r9/8 - r25*(r39 + r46 + 3*r9)/840 + r33*y2*(r10 + r34)/840 - r42*r9*y2/840 - r43*r9/840 + x0*(-r10*r18 + r17*r26 + r19 + r22*r49 - r25*r37 - r27*x2 + r38*r47 + r48)/420 - y0*(r15*r17 + r31*r9 + r40 + r41 + r46*y1)/420 + self.momentYY += r1*(r11*y1 + r44 + r45)/420 - r15*r43/420 - r23*r30/420 - r25*(r1 + r36 + r53*x2)/420 - r50*x2/420 - r51*x2/12 - r52*(r49 + x2)/84 + x0*(r22*r53 + r22*r6 + r25*r30 + r25*r34 + r26*r54 + r43*y0 + r50 + 5*r51 + 35*r52 + r55*y2)/420 - y0*(-r0*r22 + r15*r54 + r48 + r55*x2)/420 + + def _curveToOne(self, p1, p2, p3): + x0,y0 = self._getCurrentPoint() + x1,y1 = p1 + x2,y2 = p2 + x3,y3 = p3 + + r0 = 6*x2 + r1 = r0*y3 + r2 = 6*y2 + r3 = 10*y3 + r4 = r3*x3 + r5 = 3*x1 + r6 = 3*y1 + r7 = 6*x1 + r8 = 3*x2 + r9 = 6*y1 + r10 = 3*y2 + r11 = x2**2 + r12 = r11*y3 + r13 = 45*r12 + r14 = x3**2 + r15 = r14*y2 + r16 = r14*y3 + r17 = x2*x3 + r18 = 15*r17 + r19 = 7*y3 + r20 = x1**2 + r21 = 9*r20 + r22 = x0**2 + r23 = 21*y1 + r24 = 9*r11 + r25 = 9*x2 + r26 = x2*y3 + r27 = 15*r26 + r28 = -r25*y1 + r27 + r29 = r25*y2 + r30 = r9*x3 + r31 = 45*x1 + r32 = x1*x3 + r33 = 45*r20 + r34 = 5*r14 + r35 = x2*y2 + r36 = 18*r35 + r37 = 5*x3 + r38 = r37*y3 + r39 = r31*y1 + r36 + r38 + r40 = x1*y0 + r41 = x1*y3 + r42 = x2*y0 + r43 = x3*y1 + r44 = r10*x3 + r45 = x3*y2*y3 + r46 = y2**2 + r47 = 45*r46 + r48 = r47*x3 + r49 = y3**2 + r50 = r49*x3 + r51 = y1**2 + r52 = 9*r51 + r53 = y0**2 + r54 = 21*x1 + r55 = x3*y2 + r56 = 15*r55 + r57 = 9*y2 + r58 = y2*y3 + r59 = 15*r58 + r60 = 9*r46 + r61 = 3*y3 + r62 = 45*y1 + r63 = r8*y3 + r64 = y0*y1 + r65 = y0*y2 + r66 = 30*r65 + r67 = 5*y3 + r68 = y1*y3 + r69 = 45*r51 + r70 = 5*r49 + r71 = x2**3 + r72 = x3**3 + r73 = 126*x3 + r74 = x1**3 + r75 = r14*x2 + r76 = 63*r11 + r77 = r76*x3 + r78 = 15*r35 + r79 = r19*x3 + r80 = x1*y1 + r81 = 63*r35 + r82 = r38 + 378*r80 + r81 + r83 = x1*y2 + r84 = x2*y1 + r85 = x3*y0 + r86 = x2*x3*y1 + r87 = x2*x3*y3 + r88 = r11*y2 + r89 = 27*r88 + r90 = 42*y3 + r91 = r14*r90 + r92 = 90*x1*x2 + r93 = 189*x2 + r94 = 30*x1*x3 + r95 = 14*r16 + 126*r20*y1 + 45*r88 + r94*y2 + r96 = x1*x2 + r97 = 252*r96 + r98 = x1*x2*y2 + r99 = 42*r32 + r100 = x1*x3*y1 + r101 = 30*r17 + r102 = 18*r17 + r103 = 378*r20 + r104 = 189*y2 + r105 = r20*y3 + r106 = r11*y1 + r107 = r14*y1 + r108 = 378*r46 + r109 = 252*y2 + r110 = y1*y2 + r111 = x2*x3*y2 + r112 = y0*y3 + r113 = 378*r51 + r114 = 63*r46 + r115 = 27*x2 + r116 = r115*r46 + 42*r50 + r117 = x2*y1*y3 + r118 = x3*y1*y2 + r119 = r49*x2 + r120 = r51*x3 + r121 = x3*y3 + r122 = 14*x3 + r123 = 30*r117 + r122*r49 + r47*x2 + 126*r51*x1 + r124 = x1*y1*y3 + r125 = x1*y2*y3 + r126 = x2*y1*y2 + r127 = 54*y3 + r128 = 21*r55 + r129 = 630*r53 + r130 = r46*x1 + r131 = r49*x1 + r132 = 126*r53 + r133 = y2**3 + r134 = y3**3 + r135 = 630*r49 + r136 = y1**3 + r137 = y0**3 + r138 = r114*y3 + r23*r49 + r139 = r49*y2 + + self.area += r1/20 - r2*x3/20 - r4/20 + r5*(y2 + y3)/20 - r6*(x2 + x3)/20 + x0*(r10 + r9 + 10*y0 + y3)/20 - y0*(r7 + r8 + x3)/20 + self.momentX += r13/840 - r15/8 - r16/3 - r18*(r10 - r19)/840 + r21*(r10 + 2*y3)/840 + r22*(r2 + r23 + 56*y0 + y3)/168 + r5*(r28 + r29 - r30 + r4)/840 - r6*(10*r14 + r18 + r24)/840 + x0*(12*r26 + r31*y2 - r37*y0 + r39 - 105*r40 + 15*r41 - 30*r42 - 3*r43 + r44)/840 - y0*(18*r11 + r18 + r31*x2 + 12*r32 + r33 + r34)/840 + self.momentY += r27*(r10 + r19)/840 - r45/8 - r48/840 + r5*(10*r49 + r57*y1 + r59 + r60 + r9*y3)/840 - r50/6 - r52*(r8 + 2*x3)/840 - r53*(r0 + r54 + x3)/168 - r6*(r29 + r4 + r56)/840 + x0*(18*r46 + 140*r53 + r59 + r62*y2 + 105*r64 + r66 + r67*y0 + 12*r68 + r69 + r70)/840 - y0*(r39 + 15*r43 + 12*r55 - r61*x1 + r62*x2 + r63)/840 + self.momentXX += -r11*r73*(-r61 + y2)/9240 + r21*(r28 - r37*y1 + r44 + r78 + r79)/9240 + r22*(21*r26 - 630*r40 + 42*r41 - 126*r42 + r57*x3 + r82 + 210*r83 + 42*r84 - 14*r85)/9240 - r5*(r11*r62 + r14*r23 + 14*r15 - r76*y3 + 54*r86 - 84*r87 - r89 - r91)/9240 - r6*(27*r71 + 42*r72 + 70*r75 + r77)/9240 + 3*r71*y3/220 - 3*r72*y2/44 - r72*y3/4 + 3*r74*(r57 + r67)/3080 - r75*(378*y2 - 630*y3)/9240 + x0**3*(r57 + r62 + 165*y0 + y3)/660 + x0*(-18*r100 - r101*y0 - r101*y1 + r102*y2 - r103*y0 + r104*r20 + 63*r105 - 27*r106 - 9*r107 + r13 - r34*y0 - r76*y0 + 42*r87 + r92*y3 + r94*y3 + r95 - r97*y0 + 162*r98 - r99*y0)/9240 - y0*(135*r11*x1 + r14*r54 + r20*r93 + r33*x3 + 45*r71 + 14*r72 + 126*r74 + 42*r75 + r77 + r92*x3)/9240 + self.momentXY += -r108*r14/18480 + r12*(r109 + 378*y3)/18480 - r14*r49/8 - 3*r14*r58/44 - r17*(252*r46 - 1260*r49)/18480 + r21*(18*r110 + r3*y1 + 15*r46 + 7*r49 + 18*r58)/18480 + r22*(252*r110 + 28*r112 + r113 + r114 + 2310*r53 + 30*r58 + 1260*r64 + 252*r65 + 42*r68 + r70)/18480 - r52*(r102 + 15*r11 + 7*r14)/18480 - r53*(r101 + r103 + r34 + r76 + r97 + r99)/18480 + r7*(-r115*r51 + r116 + 18*r117 - 18*r118 + 42*r119 - 15*r120 + 28*r45 + r81*y3)/18480 - r9*(63*r111 + 42*r15 + 28*r87 + r89 + r91)/18480 + x0*(r1*y0 + r104*r80 + r112*r54 + 21*r119 - 9*r120 - r122*r53 + r123 + 54*r124 + 60*r125 + 54*r126 + r127*r35 + r128*y3 - r129*x1 + 81*r130 + 15*r131 - r132*x2 - r2*r85 - r23*r85 + r30*y3 + 84*r40*y2 - 84*r42*y1 + r60*x3)/9240 - y0*(54*r100 - 9*r105 + 81*r106 + 15*r107 + 54*r111 + r121*r7 + 21*r15 + r24*y3 + 60*r86 + 21*r87 + r95 + 189*r96*y1 + 54*r98)/9240 + self.momentYY += -r108*r121/9240 - r133*r73/9240 - r134*x3/12 - r135*r55/9240 - 3*r136*(r25 + r37)/3080 - r137*(r25 + r31 + x3)/660 + r26*(r135 + 126*r46 + 378*y2*y3)/9240 + r5*(r110*r127 + 27*r133 + 42*r134 + r138 + 70*r139 + r46*r62 + 27*r51*y2 + 15*r51*y3)/9240 - r52*(r56 + r63 + r78 + r79)/9240 - r53*(r128 + r25*y3 + 42*r43 + r82 + 42*r83 + 210*r84)/9240 - r6*(r114*x3 + r116 - 14*r119 + 84*r45)/9240 + x0*(r104*r51 + r109*r64 + 90*r110*y3 + r113*y0 + r114*y0 + r129*y1 + r132*y2 + 45*r133 + 14*r134 + 126*r136 + 770*r137 + r138 + 42*r139 + 135*r46*y1 + 14*r53*y3 + r64*r90 + r66*y3 + r69*y3 + r70*y0)/9240 - y0*(90*r118 + 63*r120 + r123 - 18*r124 - 30*r125 + 162*r126 - 27*r130 - 9*r131 + r36*y3 + 30*r43*y3 + 42*r45 + r48 + r51*r93)/9240 + +if __name__ == '__main__': + from fontTools.misc.symfont import x, y, printGreenPen + printGreenPen('MomentsPen', [ + ('area', 1), + ('momentX', x), + ('momentY', y), + ('momentXX', x**2), + ('momentXY', x*y), + ('momentYY', y**2), + ]) diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/perimeterPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/perimeterPen.py new file mode 100644 index 00000000..9a09cb8f --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/perimeterPen.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +"""Calculate the perimeter of a glyph.""" + +from fontTools.pens.basePen import BasePen +from fontTools.misc.bezierTools import approximateQuadraticArcLengthC, calcQuadraticArcLengthC, approximateCubicArcLengthC, calcCubicArcLengthC +import math + + +__all__ = ["PerimeterPen"] + + +def _distance(p0, p1): + return math.hypot(p0[0] - p1[0], p0[1] - p1[1]) + +class PerimeterPen(BasePen): + + def __init__(self, glyphset=None, tolerance=0.005): + BasePen.__init__(self, glyphset) + self.value = 0 + self.tolerance = tolerance + + # Choose which algorithm to use for quadratic and for cubic. + # Quadrature is faster but has fixed error characteristic with no strong + # error bound. The cutoff points are derived empirically. + self._addCubic = self._addCubicQuadrature if tolerance >= 0.0015 else self._addCubicRecursive + self._addQuadratic = self._addQuadraticQuadrature if tolerance >= 0.00075 else self._addQuadraticExact + + def _moveTo(self, p0): + self.__startPoint = p0 + + def _closePath(self): + p0 = self._getCurrentPoint() + if p0 != self.__startPoint: + self._lineTo(self.__startPoint) + + def _lineTo(self, p1): + p0 = self._getCurrentPoint() + self.value += _distance(p0, p1) + + def _addQuadraticExact(self, c0, c1, c2): + self.value += calcQuadraticArcLengthC(c0, c1, c2) + + def _addQuadraticQuadrature(self, c0, c1, c2): + self.value += approximateQuadraticArcLengthC(c0, c1, c2) + + def _qCurveToOne(self, p1, p2): + p0 = self._getCurrentPoint() + self._addQuadratic(complex(*p0), complex(*p1), complex(*p2)) + + def _addCubicRecursive(self, c0, c1, c2, c3): + self.value += calcCubicArcLengthC(c0, c1, c2, c3, self.tolerance) + + def _addCubicQuadrature(self, c0, c1, c2, c3): + self.value += approximateCubicArcLengthC(c0, c1, c2, c3) + + def _curveToOne(self, p1, p2, p3): + p0 = self._getCurrentPoint() + self._addCubic(complex(*p0), complex(*p1), complex(*p2), complex(*p3)) diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/pointInsidePen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/pointInsidePen.py new file mode 100644 index 00000000..34597f40 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/pointInsidePen.py @@ -0,0 +1,190 @@ +"""fontTools.pens.pointInsidePen -- Pen implementing "point inside" testing +for shapes. +""" + +from fontTools.pens.basePen import BasePen +from fontTools.misc.bezierTools import solveQuadratic, solveCubic + + +__all__ = ["PointInsidePen"] + + +class PointInsidePen(BasePen): + + """This pen implements "point inside" testing: to test whether + a given point lies inside the shape (black) or outside (white). + Instances of this class can be recycled, as long as the + setTestPoint() method is used to set the new point to test. + + Typical usage: + + pen = PointInsidePen(glyphSet, (100, 200)) + outline.draw(pen) + isInside = pen.getResult() + + Both the even-odd algorithm and the non-zero-winding-rule + algorithm are implemented. The latter is the default, specify + True for the evenOdd argument of __init__ or setTestPoint + to use the even-odd algorithm. + """ + + # This class implements the classical "shoot a ray from the test point + # to infinity and count how many times it intersects the outline" (as well + # as the non-zero variant, where the counter is incremented if the outline + # intersects the ray in one direction and decremented if it intersects in + # the other direction). + # I found an amazingly clear explanation of the subtleties involved in + # implementing this correctly for polygons here: + # http://graphics.cs.ucdavis.edu/~okreylos/TAship/Spring2000/PointInPolygon.html + # I extended the principles outlined on that page to curves. + + def __init__(self, glyphSet, testPoint, evenOdd=False): + BasePen.__init__(self, glyphSet) + self.setTestPoint(testPoint, evenOdd) + + def setTestPoint(self, testPoint, evenOdd=False): + """Set the point to test. Call this _before_ the outline gets drawn.""" + self.testPoint = testPoint + self.evenOdd = evenOdd + self.firstPoint = None + self.intersectionCount = 0 + + def getWinding(self): + if self.firstPoint is not None: + # always make sure the sub paths are closed; the algorithm only works + # for closed paths. + self.closePath() + return self.intersectionCount + + def getResult(self): + """After the shape has been drawn, getResult() returns True if the test + point lies within the (black) shape, and False if it doesn't. + """ + winding = self.getWinding() + if self.evenOdd: + result = winding % 2 + else: # non-zero + result = self.intersectionCount != 0 + return not not result + + def _addIntersection(self, goingUp): + if self.evenOdd or goingUp: + self.intersectionCount += 1 + else: + self.intersectionCount -= 1 + + def _moveTo(self, point): + if self.firstPoint is not None: + # always make sure the sub paths are closed; the algorithm only works + # for closed paths. + self.closePath() + self.firstPoint = point + + def _lineTo(self, point): + x, y = self.testPoint + x1, y1 = self._getCurrentPoint() + x2, y2 = point + + if x1 < x and x2 < x: + return + if y1 < y and y2 < y: + return + if y1 >= y and y2 >= y: + return + + dx = x2 - x1 + dy = y2 - y1 + t = (y - y1) / dy + ix = dx * t + x1 + if ix < x: + return + self._addIntersection(y2 > y1) + + def _curveToOne(self, bcp1, bcp2, point): + x, y = self.testPoint + x1, y1 = self._getCurrentPoint() + x2, y2 = bcp1 + x3, y3 = bcp2 + x4, y4 = point + + if x1 < x and x2 < x and x3 < x and x4 < x: + return + if y1 < y and y2 < y and y3 < y and y4 < y: + return + if y1 >= y and y2 >= y and y3 >= y and y4 >= y: + return + + dy = y1 + cy = (y2 - dy) * 3.0 + by = (y3 - y2) * 3.0 - cy + ay = y4 - dy - cy - by + solutions = sorted(solveCubic(ay, by, cy, dy - y)) + solutions = [t for t in solutions if -0. <= t <= 1.] + if not solutions: + return + + dx = x1 + cx = (x2 - dx) * 3.0 + bx = (x3 - x2) * 3.0 - cx + ax = x4 - dx - cx - bx + + above = y1 >= y + lastT = None + for t in solutions: + if t == lastT: + continue + lastT = t + t2 = t * t + t3 = t2 * t + + direction = 3*ay*t2 + 2*by*t + cy + incomingGoingUp = outgoingGoingUp = direction > 0.0 + if direction == 0.0: + direction = 6*ay*t + 2*by + outgoingGoingUp = direction > 0.0 + incomingGoingUp = not outgoingGoingUp + if direction == 0.0: + direction = ay + incomingGoingUp = outgoingGoingUp = direction > 0.0 + + xt = ax*t3 + bx*t2 + cx*t + dx + if xt < x: + continue + + if t in (0.0, -0.0): + if not outgoingGoingUp: + self._addIntersection(outgoingGoingUp) + elif t == 1.0: + if incomingGoingUp: + self._addIntersection(incomingGoingUp) + else: + if incomingGoingUp == outgoingGoingUp: + self._addIntersection(outgoingGoingUp) + #else: + # we're not really intersecting, merely touching + + def _qCurveToOne_unfinished(self, bcp, point): + # XXX need to finish this, for now doing it through a cubic + # (BasePen implements _qCurveTo in terms of a cubic) will + # have to do. + x, y = self.testPoint + x1, y1 = self._getCurrentPoint() + x2, y2 = bcp + x3, y3 = point + c = y1 + b = (y2 - c) * 2.0 + a = y3 - c - b + solutions = sorted(solveQuadratic(a, b, c - y)) + solutions = [t for t in solutions if ZERO_MINUS_EPSILON <= t <= ONE_PLUS_EPSILON] + if not solutions: + return + # XXX + + def _closePath(self): + if self._getCurrentPoint() != self.firstPoint: + self.lineTo(self.firstPoint) + self.firstPoint = None + + def _endPath(self): + """Insideness is not defined for open contours.""" + raise NotImplementedError diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/pointPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/pointPen.py new file mode 100644 index 00000000..4c3148bf --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/pointPen.py @@ -0,0 +1,493 @@ +""" +========= +PointPens +========= + +Where **SegmentPens** have an intuitive approach to drawing +(if you're familiar with postscript anyway), the **PointPen** +is geared towards accessing all the data in the contours of +the glyph. A PointPen has a very simple interface, it just +steps through all the points in a call from glyph.drawPoints(). +This allows the caller to provide more data for each point. +For instance, whether or not a point is smooth, and its name. +""" + +import math +from typing import Any, Optional, Tuple + +from fontTools.pens.basePen import AbstractPen, PenError + +__all__ = [ + "AbstractPointPen", + "BasePointToSegmentPen", + "PointToSegmentPen", + "SegmentToPointPen", + "GuessSmoothPointPen", + "ReverseContourPointPen", +] + + +class AbstractPointPen: + """Baseclass for all PointPens.""" + + def beginPath(self, identifier: Optional[str] = None, **kwargs: Any) -> None: + """Start a new sub path.""" + raise NotImplementedError + + def endPath(self) -> None: + """End the current sub path.""" + raise NotImplementedError + + def addPoint( + self, + pt: Tuple[float, float], + segmentType: Optional[str] = None, + smooth: bool = False, + name: Optional[str] = None, + identifier: Optional[str] = None, + **kwargs: Any + ) -> None: + """Add a point to the current sub path.""" + raise NotImplementedError + + def addComponent( + self, + baseGlyphName: str, + transformation: Tuple[float, float, float, float, float, float], + identifier: Optional[str] = None, + **kwargs: Any + ) -> None: + """Add a sub glyph.""" + raise NotImplementedError + + +class BasePointToSegmentPen(AbstractPointPen): + """ + Base class for retrieving the outline in a segment-oriented + way. The PointPen protocol is simple yet also a little tricky, + so when you need an outline presented as segments but you have + as points, do use this base implementation as it properly takes + care of all the edge cases. + """ + + def __init__(self): + self.currentPath = None + + def beginPath(self, identifier=None, **kwargs): + if self.currentPath is not None: + raise PenError("Path already begun.") + self.currentPath = [] + + def _flushContour(self, segments): + """Override this method. + + It will be called for each non-empty sub path with a list + of segments: the 'segments' argument. + + The segments list contains tuples of length 2: + (segmentType, points) + + segmentType is one of "move", "line", "curve" or "qcurve". + "move" may only occur as the first segment, and it signifies + an OPEN path. A CLOSED path does NOT start with a "move", in + fact it will not contain a "move" at ALL. + + The 'points' field in the 2-tuple is a list of point info + tuples. The list has 1 or more items, a point tuple has + four items: + (point, smooth, name, kwargs) + 'point' is an (x, y) coordinate pair. + + For a closed path, the initial moveTo point is defined as + the last point of the last segment. + + The 'points' list of "move" and "line" segments always contains + exactly one point tuple. + """ + raise NotImplementedError + + def endPath(self): + if self.currentPath is None: + raise PenError("Path not begun.") + points = self.currentPath + self.currentPath = None + if not points: + return + if len(points) == 1: + # Not much more we can do than output a single move segment. + pt, segmentType, smooth, name, kwargs = points[0] + segments = [("move", [(pt, smooth, name, kwargs)])] + self._flushContour(segments) + return + segments = [] + if points[0][1] == "move": + # It's an open contour, insert a "move" segment for the first + # point and remove that first point from the point list. + pt, segmentType, smooth, name, kwargs = points[0] + segments.append(("move", [(pt, smooth, name, kwargs)])) + points.pop(0) + else: + # It's a closed contour. Locate the first on-curve point, and + # rotate the point list so that it _ends_ with an on-curve + # point. + firstOnCurve = None + for i in range(len(points)): + segmentType = points[i][1] + if segmentType is not None: + firstOnCurve = i + break + if firstOnCurve is None: + # Special case for quadratics: a contour with no on-curve + # points. Add a "None" point. (See also the Pen protocol's + # qCurveTo() method and fontTools.pens.basePen.py.) + points.append((None, "qcurve", None, None, None)) + else: + points = points[firstOnCurve+1:] + points[:firstOnCurve+1] + + currentSegment = [] + for pt, segmentType, smooth, name, kwargs in points: + currentSegment.append((pt, smooth, name, kwargs)) + if segmentType is None: + continue + segments.append((segmentType, currentSegment)) + currentSegment = [] + + self._flushContour(segments) + + def addPoint(self, pt, segmentType=None, smooth=False, name=None, + identifier=None, **kwargs): + if self.currentPath is None: + raise PenError("Path not begun") + self.currentPath.append((pt, segmentType, smooth, name, kwargs)) + + +class PointToSegmentPen(BasePointToSegmentPen): + """ + Adapter class that converts the PointPen protocol to the + (Segment)Pen protocol. + + NOTE: The segment pen does not support and will drop point names, identifiers + and kwargs. + """ + + def __init__(self, segmentPen, outputImpliedClosingLine=False): + BasePointToSegmentPen.__init__(self) + self.pen = segmentPen + self.outputImpliedClosingLine = outputImpliedClosingLine + + def _flushContour(self, segments): + if not segments: + raise PenError("Must have at least one segment.") + pen = self.pen + if segments[0][0] == "move": + # It's an open path. + closed = False + points = segments[0][1] + if len(points) != 1: + raise PenError(f"Illegal move segment point count: {len(points)}") + movePt, _, _ , _ = points[0] + del segments[0] + else: + # It's a closed path, do a moveTo to the last + # point of the last segment. + closed = True + segmentType, points = segments[-1] + movePt, _, _ , _ = points[-1] + if movePt is None: + # quad special case: a contour with no on-curve points contains + # one "qcurve" segment that ends with a point that's None. We + # must not output a moveTo() in that case. + pass + else: + pen.moveTo(movePt) + outputImpliedClosingLine = self.outputImpliedClosingLine + nSegments = len(segments) + lastPt = movePt + for i in range(nSegments): + segmentType, points = segments[i] + points = [pt for pt, _, _ , _ in points] + if segmentType == "line": + if len(points) != 1: + raise PenError(f"Illegal line segment point count: {len(points)}") + pt = points[0] + # For closed contours, a 'lineTo' is always implied from the last oncurve + # point to the starting point, thus we can omit it when the last and + # starting point don't overlap. + # However, when the last oncurve point is a "line" segment and has same + # coordinates as the starting point of a closed contour, we need to output + # the closing 'lineTo' explicitly (regardless of the value of the + # 'outputImpliedClosingLine' option) in order to disambiguate this case from + # the implied closing 'lineTo', otherwise the duplicate point would be lost. + # See https://github.com/googlefonts/fontmake/issues/572. + if ( + i + 1 != nSegments + or outputImpliedClosingLine + or not closed + or pt == lastPt + ): + pen.lineTo(pt) + lastPt = pt + elif segmentType == "curve": + pen.curveTo(*points) + lastPt = points[-1] + elif segmentType == "qcurve": + pen.qCurveTo(*points) + lastPt = points[-1] + else: + raise PenError(f"Illegal segmentType: {segmentType}") + if closed: + pen.closePath() + else: + pen.endPath() + + def addComponent(self, glyphName, transform, identifier=None, **kwargs): + del identifier # unused + del kwargs # unused + self.pen.addComponent(glyphName, transform) + + +class SegmentToPointPen(AbstractPen): + """ + Adapter class that converts the (Segment)Pen protocol to the + PointPen protocol. + """ + + def __init__(self, pointPen, guessSmooth=True): + if guessSmooth: + self.pen = GuessSmoothPointPen(pointPen) + else: + self.pen = pointPen + self.contour = None + + def _flushContour(self): + pen = self.pen + pen.beginPath() + for pt, segmentType in self.contour: + pen.addPoint(pt, segmentType=segmentType) + pen.endPath() + + def moveTo(self, pt): + self.contour = [] + self.contour.append((pt, "move")) + + def lineTo(self, pt): + if self.contour is None: + raise PenError("Contour missing required initial moveTo") + self.contour.append((pt, "line")) + + def curveTo(self, *pts): + if not pts: + raise TypeError("Must pass in at least one point") + if self.contour is None: + raise PenError("Contour missing required initial moveTo") + for pt in pts[:-1]: + self.contour.append((pt, None)) + self.contour.append((pts[-1], "curve")) + + def qCurveTo(self, *pts): + if not pts: + raise TypeError("Must pass in at least one point") + if pts[-1] is None: + self.contour = [] + else: + if self.contour is None: + raise PenError("Contour missing required initial moveTo") + for pt in pts[:-1]: + self.contour.append((pt, None)) + if pts[-1] is not None: + self.contour.append((pts[-1], "qcurve")) + + def closePath(self): + if self.contour is None: + raise PenError("Contour missing required initial moveTo") + if len(self.contour) > 1 and self.contour[0][0] == self.contour[-1][0]: + self.contour[0] = self.contour[-1] + del self.contour[-1] + else: + # There's an implied line at the end, replace "move" with "line" + # for the first point + pt, tp = self.contour[0] + if tp == "move": + self.contour[0] = pt, "line" + self._flushContour() + self.contour = None + + def endPath(self): + if self.contour is None: + raise PenError("Contour missing required initial moveTo") + self._flushContour() + self.contour = None + + def addComponent(self, glyphName, transform): + if self.contour is not None: + raise PenError("Components must be added before or after contours") + self.pen.addComponent(glyphName, transform) + + +class GuessSmoothPointPen(AbstractPointPen): + """ + Filtering PointPen that tries to determine whether an on-curve point + should be "smooth", ie. that it's a "tangent" point or a "curve" point. + """ + + def __init__(self, outPen, error=0.05): + self._outPen = outPen + self._error = error + self._points = None + + def _flushContour(self): + if self._points is None: + raise PenError("Path not begun") + points = self._points + nPoints = len(points) + if not nPoints: + return + if points[0][1] == "move": + # Open path. + indices = range(1, nPoints - 1) + elif nPoints > 1: + # Closed path. To avoid having to mod the contour index, we + # simply abuse Python's negative index feature, and start at -1 + indices = range(-1, nPoints - 1) + else: + # closed path containing 1 point (!), ignore. + indices = [] + for i in indices: + pt, segmentType, _, name, kwargs = points[i] + if segmentType is None: + continue + prev = i - 1 + next = i + 1 + if points[prev][1] is not None and points[next][1] is not None: + continue + # At least one of our neighbors is an off-curve point + pt = points[i][0] + prevPt = points[prev][0] + nextPt = points[next][0] + if pt != prevPt and pt != nextPt: + dx1, dy1 = pt[0] - prevPt[0], pt[1] - prevPt[1] + dx2, dy2 = nextPt[0] - pt[0], nextPt[1] - pt[1] + a1 = math.atan2(dy1, dx1) + a2 = math.atan2(dy2, dx2) + if abs(a1 - a2) < self._error: + points[i] = pt, segmentType, True, name, kwargs + + for pt, segmentType, smooth, name, kwargs in points: + self._outPen.addPoint(pt, segmentType, smooth, name, **kwargs) + + def beginPath(self, identifier=None, **kwargs): + if self._points is not None: + raise PenError("Path already begun") + self._points = [] + if identifier is not None: + kwargs["identifier"] = identifier + self._outPen.beginPath(**kwargs) + + def endPath(self): + self._flushContour() + self._outPen.endPath() + self._points = None + + def addPoint(self, pt, segmentType=None, smooth=False, name=None, + identifier=None, **kwargs): + if self._points is None: + raise PenError("Path not begun") + if identifier is not None: + kwargs["identifier"] = identifier + self._points.append((pt, segmentType, False, name, kwargs)) + + def addComponent(self, glyphName, transformation, identifier=None, **kwargs): + if self._points is not None: + raise PenError("Components must be added before or after contours") + if identifier is not None: + kwargs["identifier"] = identifier + self._outPen.addComponent(glyphName, transformation, **kwargs) + + +class ReverseContourPointPen(AbstractPointPen): + """ + This is a PointPen that passes outline data to another PointPen, but + reversing the winding direction of all contours. Components are simply + passed through unchanged. + + Closed contours are reversed in such a way that the first point remains + the first point. + """ + + def __init__(self, outputPointPen): + self.pen = outputPointPen + # a place to store the points for the current sub path + self.currentContour = None + + def _flushContour(self): + pen = self.pen + contour = self.currentContour + if not contour: + pen.beginPath(identifier=self.currentContourIdentifier) + pen.endPath() + return + + closed = contour[0][1] != "move" + if not closed: + lastSegmentType = "move" + else: + # Remove the first point and insert it at the end. When + # the list of points gets reversed, this point will then + # again be at the start. In other words, the following + # will hold: + # for N in range(len(originalContour)): + # originalContour[N] == reversedContour[-N] + contour.append(contour.pop(0)) + # Find the first on-curve point. + firstOnCurve = None + for i in range(len(contour)): + if contour[i][1] is not None: + firstOnCurve = i + break + if firstOnCurve is None: + # There are no on-curve points, be basically have to + # do nothing but contour.reverse(). + lastSegmentType = None + else: + lastSegmentType = contour[firstOnCurve][1] + + contour.reverse() + if not closed: + # Open paths must start with a move, so we simply dump + # all off-curve points leading up to the first on-curve. + while contour[0][1] is None: + contour.pop(0) + pen.beginPath(identifier=self.currentContourIdentifier) + for pt, nextSegmentType, smooth, name, kwargs in contour: + if nextSegmentType is not None: + segmentType = lastSegmentType + lastSegmentType = nextSegmentType + else: + segmentType = None + pen.addPoint(pt, segmentType=segmentType, smooth=smooth, name=name, **kwargs) + pen.endPath() + + def beginPath(self, identifier=None, **kwargs): + if self.currentContour is not None: + raise PenError("Path already begun") + self.currentContour = [] + self.currentContourIdentifier = identifier + self.onCurve = [] + + def endPath(self): + if self.currentContour is None: + raise PenError("Path not begun") + self._flushContour() + self.currentContour = None + + def addPoint(self, pt, segmentType=None, smooth=False, name=None, identifier=None, **kwargs): + if self.currentContour is None: + raise PenError("Path not begun") + if identifier is not None: + kwargs["identifier"] = identifier + self.currentContour.append((pt, segmentType, smooth, name, kwargs)) + + def addComponent(self, glyphName, transform, identifier=None, **kwargs): + if self.currentContour is not None: + raise PenError("Components must be added before or after contours") + self.pen.addComponent(glyphName, transform, identifier=identifier, **kwargs) diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/qtPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/qtPen.py new file mode 100644 index 00000000..34736453 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/qtPen.py @@ -0,0 +1,29 @@ +from fontTools.pens.basePen import BasePen + + +__all__ = ["QtPen"] + + +class QtPen(BasePen): + + def __init__(self, glyphSet, path=None): + BasePen.__init__(self, glyphSet) + if path is None: + from PyQt5.QtGui import QPainterPath + path = QPainterPath() + self.path = path + + def _moveTo(self, p): + self.path.moveTo(*p) + + def _lineTo(self, p): + self.path.lineTo(*p) + + def _curveToOne(self, p1, p2, p3): + self.path.cubicTo(*p1+p2+p3) + + def _qCurveToOne(self, p1, p2): + self.path.quadTo(*p1+p2) + + def _closePath(self): + self.path.closeSubpath() diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/quartzPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/quartzPen.py new file mode 100644 index 00000000..16b9c2d8 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/quartzPen.py @@ -0,0 +1,45 @@ +from fontTools.pens.basePen import BasePen + +from Quartz.CoreGraphics import CGPathCreateMutable, CGPathMoveToPoint +from Quartz.CoreGraphics import CGPathAddLineToPoint, CGPathAddCurveToPoint +from Quartz.CoreGraphics import CGPathAddQuadCurveToPoint, CGPathCloseSubpath + + +__all__ = ["QuartzPen"] + + +class QuartzPen(BasePen): + + """A pen that creates a CGPath + + Parameters + - path: an optional CGPath to add to + - xform: an optional CGAffineTransform to apply to the path + """ + + def __init__(self, glyphSet, path=None, xform=None): + BasePen.__init__(self, glyphSet) + if path is None: + path = CGPathCreateMutable() + self.path = path + self.xform = xform + + def _moveTo(self, pt): + x, y = pt + CGPathMoveToPoint(self.path, self.xform, x, y) + + def _lineTo(self, pt): + x, y = pt + CGPathAddLineToPoint(self.path, self.xform, x, y) + + def _curveToOne(self, p1, p2, p3): + (x1, y1), (x2, y2), (x3, y3) = p1, p2, p3 + CGPathAddCurveToPoint(self.path, self.xform, x1, y1, x2, y2, x3, y3) + + def _qCurveToOne(self, p1, p2): + (x1, y1), (x2, y2) = p1, p2 + CGPathAddQuadCurveToPoint(self.path, self.xform, x1, y1, x2, y2) + + def _closePath(self): + CGPathCloseSubpath(self.path) + diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/recordingPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/recordingPen.py new file mode 100644 index 00000000..203082a4 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/recordingPen.py @@ -0,0 +1,155 @@ +"""Pen recording operations that can be accessed or replayed.""" +from fontTools.pens.basePen import AbstractPen, DecomposingPen +from fontTools.pens.pointPen import AbstractPointPen + + +__all__ = [ + "replayRecording", + "RecordingPen", + "DecomposingRecordingPen", + "RecordingPointPen", +] + + +def replayRecording(recording, pen): + """Replay a recording, as produced by RecordingPen or DecomposingRecordingPen, + to a pen. + + Note that recording does not have to be produced by those pens. + It can be any iterable of tuples of method name and tuple-of-arguments. + Likewise, pen can be any objects receiving those method calls. + """ + for operator,operands in recording: + getattr(pen, operator)(*operands) + + +class RecordingPen(AbstractPen): + """Pen recording operations that can be accessed or replayed. + + The recording can be accessed as pen.value; or replayed using + pen.replay(otherPen). + + Usage example: + ============== + from fontTools.ttLib import TTFont + from fontTools.pens.recordingPen import RecordingPen + + glyph_name = 'dollar' + font_path = 'MyFont.otf' + + font = TTFont(font_path) + glyphset = font.getGlyphSet() + glyph = glyphset[glyph_name] + + pen = RecordingPen() + glyph.draw(pen) + print(pen.value) + """ + + def __init__(self): + self.value = [] + def moveTo(self, p0): + self.value.append(('moveTo', (p0,))) + def lineTo(self, p1): + self.value.append(('lineTo', (p1,))) + def qCurveTo(self, *points): + self.value.append(('qCurveTo', points)) + def curveTo(self, *points): + self.value.append(('curveTo', points)) + def closePath(self): + self.value.append(('closePath', ())) + def endPath(self): + self.value.append(('endPath', ())) + def addComponent(self, glyphName, transformation): + self.value.append(('addComponent', (glyphName, transformation))) + def replay(self, pen): + replayRecording(self.value, pen) + + +class DecomposingRecordingPen(DecomposingPen, RecordingPen): + """ Same as RecordingPen, except that it doesn't keep components + as references, but draws them decomposed as regular contours. + + The constructor takes a single 'glyphSet' positional argument, + a dictionary of glyph objects (i.e. with a 'draw' method) keyed + by thir name. + + >>> class SimpleGlyph(object): + ... def draw(self, pen): + ... pen.moveTo((0, 0)) + ... pen.curveTo((1, 1), (2, 2), (3, 3)) + ... pen.closePath() + >>> class CompositeGlyph(object): + ... def draw(self, pen): + ... pen.addComponent('a', (1, 0, 0, 1, -1, 1)) + >>> glyphSet = {'a': SimpleGlyph(), 'b': CompositeGlyph()} + >>> for name, glyph in sorted(glyphSet.items()): + ... pen = DecomposingRecordingPen(glyphSet) + ... glyph.draw(pen) + ... print("{}: {}".format(name, pen.value)) + a: [('moveTo', ((0, 0),)), ('curveTo', ((1, 1), (2, 2), (3, 3))), ('closePath', ())] + b: [('moveTo', ((-1, 1),)), ('curveTo', ((0, 2), (1, 3), (2, 4))), ('closePath', ())] + """ + # raises KeyError if base glyph is not found in glyphSet + skipMissingComponents = False + + +class RecordingPointPen(AbstractPointPen): + """PointPen recording operations that can be accessed or replayed. + + The recording can be accessed as pen.value; or replayed using + pointPen.replay(otherPointPen). + + Usage example: + ============== + from defcon import Font + from fontTools.pens.recordingPen import RecordingPointPen + + glyph_name = 'a' + font_path = 'MyFont.ufo' + + font = Font(font_path) + glyph = font[glyph_name] + + pen = RecordingPointPen() + glyph.drawPoints(pen) + print(pen.value) + + new_glyph = font.newGlyph('b') + pen.replay(new_glyph.getPointPen()) + """ + + def __init__(self): + self.value = [] + + def beginPath(self, identifier=None, **kwargs): + if identifier is not None: + kwargs["identifier"] = identifier + self.value.append(("beginPath", (), kwargs)) + + def endPath(self): + self.value.append(("endPath", (), {})) + + def addPoint(self, pt, segmentType=None, smooth=False, name=None, identifier=None, **kwargs): + if identifier is not None: + kwargs["identifier"] = identifier + self.value.append(("addPoint", (pt, segmentType, smooth, name), kwargs)) + + def addComponent(self, baseGlyphName, transformation, identifier=None, **kwargs): + if identifier is not None: + kwargs["identifier"] = identifier + self.value.append(("addComponent", (baseGlyphName, transformation), kwargs)) + + def replay(self, pointPen): + for operator, args, kwargs in self.value: + getattr(pointPen, operator)(*args, **kwargs) + + +if __name__ == "__main__": + pen = RecordingPen() + pen.moveTo((0, 0)) + pen.lineTo((0, 100)) + pen.curveTo((50, 75), (60, 50), (50, 25)) + pen.closePath() + from pprint import pprint + pprint(pen.value) diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/reportLabPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/reportLabPen.py new file mode 100644 index 00000000..c0a4610b --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/reportLabPen.py @@ -0,0 +1,73 @@ +from fontTools.pens.basePen import BasePen +from reportlab.graphics.shapes import Path + + +__all__ = ["ReportLabPen"] + + +class ReportLabPen(BasePen): + + """A pen for drawing onto a reportlab.graphics.shapes.Path object.""" + + def __init__(self, glyphSet, path=None): + BasePen.__init__(self, glyphSet) + if path is None: + path = Path() + self.path = path + + def _moveTo(self, p): + (x,y) = p + self.path.moveTo(x,y) + + def _lineTo(self, p): + (x,y) = p + self.path.lineTo(x,y) + + def _curveToOne(self, p1, p2, p3): + (x1,y1) = p1 + (x2,y2) = p2 + (x3,y3) = p3 + self.path.curveTo(x1, y1, x2, y2, x3, y3) + + def _closePath(self): + self.path.closePath() + + +if __name__=="__main__": + import sys + if len(sys.argv) < 3: + print("Usage: reportLabPen.py []") + print(" If no image file name is created, by default .png is created.") + print(" example: reportLabPen.py Arial.TTF R test.png") + print(" (The file format will be PNG, regardless of the image file name supplied)") + sys.exit(0) + + from fontTools.ttLib import TTFont + from reportlab.lib import colors + + path = sys.argv[1] + glyphName = sys.argv[2] + if (len(sys.argv) > 3): + imageFile = sys.argv[3] + else: + imageFile = "%s.png" % glyphName + + font = TTFont(path) # it would work just as well with fontTools.t1Lib.T1Font + gs = font.getGlyphSet() + pen = ReportLabPen(gs, Path(fillColor=colors.red, strokeWidth=5)) + g = gs[glyphName] + g.draw(pen) + + w, h = g.width, 1000 + from reportlab.graphics import renderPM + from reportlab.graphics.shapes import Group, Drawing, scale + + # Everything is wrapped in a group to allow transformations. + g = Group(pen.path) + g.translate(0, 200) + g.scale(0.3, 0.3) + + d = Drawing(w, h) + d.add(g) + + renderPM.drawToFile(d, imageFile, fmt="PNG") diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/reverseContourPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/reverseContourPen.py new file mode 100644 index 00000000..9b3241b6 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/reverseContourPen.py @@ -0,0 +1,95 @@ +from fontTools.misc.arrayTools import pairwise +from fontTools.pens.filterPen import ContourFilterPen + + +__all__ = ["reversedContour", "ReverseContourPen"] + + +class ReverseContourPen(ContourFilterPen): + """Filter pen that passes outline data to another pen, but reversing + the winding direction of all contours. Components are simply passed + through unchanged. + + Closed contours are reversed in such a way that the first point remains + the first point. + """ + + def filterContour(self, contour): + return reversedContour(contour) + + +def reversedContour(contour): + """ Generator that takes a list of pen's (operator, operands) tuples, + and yields them with the winding direction reversed. + """ + if not contour: + return # nothing to do, stop iteration + + # valid contours must have at least a starting and ending command, + # can't have one without the other + assert len(contour) > 1, "invalid contour" + + # the type of the last command determines if the contour is closed + contourType = contour.pop()[0] + assert contourType in ("endPath", "closePath") + closed = contourType == "closePath" + + firstType, firstPts = contour.pop(0) + assert firstType in ("moveTo", "qCurveTo"), ( + "invalid initial segment type: %r" % firstType) + firstOnCurve = firstPts[-1] + if firstType == "qCurveTo": + # special case for TrueType paths contaning only off-curve points + assert firstOnCurve is None, ( + "off-curve only paths must end with 'None'") + assert not contour, ( + "only one qCurveTo allowed per off-curve path") + firstPts = ((firstPts[0],) + tuple(reversed(firstPts[1:-1])) + + (None,)) + + if not contour: + # contour contains only one segment, nothing to reverse + if firstType == "moveTo": + closed = False # single-point paths can't be closed + else: + closed = True # off-curve paths are closed by definition + yield firstType, firstPts + else: + lastType, lastPts = contour[-1] + lastOnCurve = lastPts[-1] + if closed: + # for closed paths, we keep the starting point + yield firstType, firstPts + if firstOnCurve != lastOnCurve: + # emit an implied line between the last and first points + yield "lineTo", (lastOnCurve,) + contour[-1] = (lastType, + tuple(lastPts[:-1]) + (firstOnCurve,)) + + if len(contour) > 1: + secondType, secondPts = contour[0] + else: + # contour has only two points, the second and last are the same + secondType, secondPts = lastType, lastPts + # if a lineTo follows the initial moveTo, after reversing it + # will be implied by the closePath, so we don't emit one; + # unless the lineTo and moveTo overlap, in which case we keep the + # duplicate points + if secondType == "lineTo" and firstPts != secondPts: + del contour[0] + if contour: + contour[-1] = (lastType, + tuple(lastPts[:-1]) + secondPts) + else: + # for open paths, the last point will become the first + yield firstType, (lastOnCurve,) + contour[-1] = (lastType, tuple(lastPts[:-1]) + (firstOnCurve,)) + + # we iterate over all segment pairs in reverse order, and yield + # each one with the off-curve points reversed (if any), and + # with the on-curve point of the following segment + for (curType, curPts), (_, nextPts) in pairwise( + contour, reverse=True): + yield curType, tuple(reversed(curPts[:-1])) + (nextPts[-1],) + + yield "closePath" if closed else "endPath", () diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/roundingPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/roundingPen.py new file mode 100644 index 00000000..2a7c476c --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/roundingPen.py @@ -0,0 +1,112 @@ +from fontTools.misc.roundTools import otRound +from fontTools.misc.transform import Transform +from fontTools.pens.filterPen import FilterPen, FilterPointPen + + +__all__ = ["RoundingPen", "RoundingPointPen"] + + +class RoundingPen(FilterPen): + """ + Filter pen that rounds point coordinates and component XY offsets to integer. + + >>> from fontTools.pens.recordingPen import RecordingPen + >>> recpen = RecordingPen() + >>> roundpen = RoundingPen(recpen) + >>> roundpen.moveTo((0.4, 0.6)) + >>> roundpen.lineTo((1.6, 2.5)) + >>> roundpen.qCurveTo((2.4, 4.6), (3.3, 5.7), (4.9, 6.1)) + >>> roundpen.curveTo((6.4, 8.6), (7.3, 9.7), (8.9, 10.1)) + >>> roundpen.addComponent("a", (1.5, 0, 0, 1.5, 10.5, -10.5)) + >>> recpen.value == [ + ... ('moveTo', ((0, 1),)), + ... ('lineTo', ((2, 3),)), + ... ('qCurveTo', ((2, 5), (3, 6), (5, 6))), + ... ('curveTo', ((6, 9), (7, 10), (9, 10))), + ... ('addComponent', ('a', (1.5, 0, 0, 1.5, 11, -10))), + ... ] + True + """ + + def __init__(self, outPen, roundFunc=otRound): + super().__init__(outPen) + self.roundFunc = roundFunc + + def moveTo(self, pt): + self._outPen.moveTo((self.roundFunc(pt[0]), self.roundFunc(pt[1]))) + + def lineTo(self, pt): + self._outPen.lineTo((self.roundFunc(pt[0]), self.roundFunc(pt[1]))) + + def curveTo(self, *points): + self._outPen.curveTo( + *((self.roundFunc(x), self.roundFunc(y)) for x, y in points) + ) + + def qCurveTo(self, *points): + self._outPen.qCurveTo( + *((self.roundFunc(x), self.roundFunc(y)) for x, y in points) + ) + + def addComponent(self, glyphName, transformation): + self._outPen.addComponent( + glyphName, + Transform( + *transformation[:4], + self.roundFunc(transformation[4]), + self.roundFunc(transformation[5]), + ), + ) + + +class RoundingPointPen(FilterPointPen): + """ + Filter point pen that rounds point coordinates and component XY offsets to integer. + + >>> from fontTools.pens.recordingPen import RecordingPointPen + >>> recpen = RecordingPointPen() + >>> roundpen = RoundingPointPen(recpen) + >>> roundpen.beginPath() + >>> roundpen.addPoint((0.4, 0.6), 'line') + >>> roundpen.addPoint((1.6, 2.5), 'line') + >>> roundpen.addPoint((2.4, 4.6)) + >>> roundpen.addPoint((3.3, 5.7)) + >>> roundpen.addPoint((4.9, 6.1), 'qcurve') + >>> roundpen.endPath() + >>> roundpen.addComponent("a", (1.5, 0, 0, 1.5, 10.5, -10.5)) + >>> recpen.value == [ + ... ('beginPath', (), {}), + ... ('addPoint', ((0, 1), 'line', False, None), {}), + ... ('addPoint', ((2, 3), 'line', False, None), {}), + ... ('addPoint', ((2, 5), None, False, None), {}), + ... ('addPoint', ((3, 6), None, False, None), {}), + ... ('addPoint', ((5, 6), 'qcurve', False, None), {}), + ... ('endPath', (), {}), + ... ('addComponent', ('a', (1.5, 0, 0, 1.5, 11, -10)), {}), + ... ] + True + """ + + def __init__(self, outPen, roundFunc=otRound): + super().__init__(outPen) + self.roundFunc = roundFunc + + def addPoint(self, pt, segmentType=None, smooth=False, name=None, **kwargs): + self._outPen.addPoint( + (self.roundFunc(pt[0]), self.roundFunc(pt[1])), + segmentType=segmentType, + smooth=smooth, + name=name, + **kwargs, + ) + + def addComponent(self, baseGlyphName, transformation, **kwargs): + self._outPen.addComponent( + baseGlyphName, + Transform( + *transformation[:4], + self.roundFunc(transformation[4]), + self.roundFunc(transformation[5]), + ), + **kwargs, + ) diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/statisticsPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/statisticsPen.py new file mode 100644 index 00000000..abd6ff5e --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/statisticsPen.py @@ -0,0 +1,100 @@ +"""Pen calculating area, center of mass, variance and standard-deviation, +covariance and correlation, and slant, of glyph shapes.""" +import math +from fontTools.pens.momentsPen import MomentsPen + +__all__ = ["StatisticsPen"] + + +class StatisticsPen(MomentsPen): + + """Pen calculating area, center of mass, variance and + standard-deviation, covariance and correlation, and slant, + of glyph shapes. + + Note that all the calculated values are 'signed'. Ie. if the + glyph shape is self-intersecting, the values are not correct + (but well-defined). As such, area will be negative if contour + directions are clockwise. Moreover, variance might be negative + if the shapes are self-intersecting in certain ways.""" + + def __init__(self, glyphset=None): + MomentsPen.__init__(self, glyphset=glyphset) + self.__zero() + + def _closePath(self): + MomentsPen._closePath(self) + self.__update() + + def __zero(self): + self.meanX = 0 + self.meanY = 0 + self.varianceX = 0 + self.varianceY = 0 + self.stddevX = 0 + self.stddevY = 0 + self.covariance = 0 + self.correlation = 0 + self.slant = 0 + + def __update(self): + + area = self.area + if not area: + self.__zero() + return + + # Center of mass + # https://en.wikipedia.org/wiki/Center_of_mass#A_continuous_volume + self.meanX = meanX = self.momentX / area + self.meanY = meanY = self.momentY / area + + # Var(X) = E[X^2] - E[X]^2 + self.varianceX = varianceX = self.momentXX / area - meanX**2 + self.varianceY = varianceY = self.momentYY / area - meanY**2 + + self.stddevX = stddevX = math.copysign(abs(varianceX)**.5, varianceX) + self.stddevY = stddevY = math.copysign(abs(varianceY)**.5, varianceY) + + # Covariance(X,Y) = ( E[X.Y] - E[X]E[Y] ) + self.covariance = covariance = self.momentXY / area - meanX*meanY + + # Correlation(X,Y) = Covariance(X,Y) / ( stddev(X) * stddev(Y) ) + # https://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient + correlation = covariance / (stddevX * stddevY) + self.correlation = correlation if abs(correlation) > 1e-3 else 0 + + slant = covariance / varianceY + self.slant = slant if abs(slant) > 1e-3 else 0 + + +def _test(glyphset, upem, glyphs): + from fontTools.pens.transformPen import TransformPen + from fontTools.misc.transform import Scale + + print('upem', upem) + + for glyph_name in glyphs: + print() + print("glyph:", glyph_name) + glyph = glyphset[glyph_name] + pen = StatisticsPen(glyphset=glyphset) + transformer = TransformPen(pen, Scale(1./upem)) + glyph.draw(transformer) + for item in ['area', 'momentX', 'momentY', 'momentXX', 'momentYY', 'momentXY', 'meanX', 'meanY', 'varianceX', 'varianceY', 'stddevX', 'stddevY', 'covariance', 'correlation', 'slant']: + if item[0] == '_': continue + print ("%s: %g" % (item, getattr(pen, item))) + +def main(args): + if not args: + return + filename, glyphs = args[0], args[1:] + if not glyphs: + glyphs = ['e', 'o', 'I', 'slash', 'E', 'zero', 'eight', 'minus', 'equal'] + from fontTools.ttLib import TTFont + font = TTFont(filename) + _test(font.getGlyphSet(), font['head'].unitsPerEm, glyphs) + +if __name__ == '__main__': + import sys + main(sys.argv[1:]) diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/svgPathPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/svgPathPen.py new file mode 100644 index 00000000..4352ba47 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/svgPathPen.py @@ -0,0 +1,176 @@ +from fontTools.pens.basePen import BasePen + + +def pointToString(pt): + return " ".join([str(i) for i in pt]) + + +class SVGPathPen(BasePen): + + def __init__(self, glyphSet): + BasePen.__init__(self, glyphSet) + self._commands = [] + self._lastCommand = None + self._lastX = None + self._lastY = None + + def _handleAnchor(self): + """ + >>> pen = SVGPathPen(None) + >>> pen.moveTo((0, 0)) + >>> pen.moveTo((10, 10)) + >>> pen._commands + ['M10 10'] + """ + if self._lastCommand == "M": + self._commands.pop(-1) + + def _moveTo(self, pt): + """ + >>> pen = SVGPathPen(None) + >>> pen.moveTo((0, 0)) + >>> pen._commands + ['M0 0'] + + >>> pen = SVGPathPen(None) + >>> pen.moveTo((10, 0)) + >>> pen._commands + ['M10 0'] + + >>> pen = SVGPathPen(None) + >>> pen.moveTo((0, 10)) + >>> pen._commands + ['M0 10'] + """ + self._handleAnchor() + t = "M%s" % (pointToString(pt)) + self._commands.append(t) + self._lastCommand = "M" + self._lastX, self._lastY = pt + + def _lineTo(self, pt): + """ + # duplicate point + >>> pen = SVGPathPen(None) + >>> pen.moveTo((10, 10)) + >>> pen.lineTo((10, 10)) + >>> pen._commands + ['M10 10'] + + # vertical line + >>> pen = SVGPathPen(None) + >>> pen.moveTo((10, 10)) + >>> pen.lineTo((10, 0)) + >>> pen._commands + ['M10 10', 'V0'] + + # horizontal line + >>> pen = SVGPathPen(None) + >>> pen.moveTo((10, 10)) + >>> pen.lineTo((0, 10)) + >>> pen._commands + ['M10 10', 'H0'] + + # basic + >>> pen = SVGPathPen(None) + >>> pen.lineTo((70, 80)) + >>> pen._commands + ['L70 80'] + + # basic following a moveto + >>> pen = SVGPathPen(None) + >>> pen.moveTo((0, 0)) + >>> pen.lineTo((10, 10)) + >>> pen._commands + ['M0 0', ' 10 10'] + """ + x, y = pt + # duplicate point + if x == self._lastX and y == self._lastY: + return + # vertical line + elif x == self._lastX: + cmd = "V" + pts = str(y) + # horizontal line + elif y == self._lastY: + cmd = "H" + pts = str(x) + # previous was a moveto + elif self._lastCommand == "M": + cmd = None + pts = " " + pointToString(pt) + # basic + else: + cmd = "L" + pts = pointToString(pt) + # write the string + t = "" + if cmd: + t += cmd + self._lastCommand = cmd + t += pts + self._commands.append(t) + # store for future reference + self._lastX, self._lastY = pt + + def _curveToOne(self, pt1, pt2, pt3): + """ + >>> pen = SVGPathPen(None) + >>> pen.curveTo((10, 20), (30, 40), (50, 60)) + >>> pen._commands + ['C10 20 30 40 50 60'] + """ + t = "C" + t += pointToString(pt1) + " " + t += pointToString(pt2) + " " + t += pointToString(pt3) + self._commands.append(t) + self._lastCommand = "C" + self._lastX, self._lastY = pt3 + + def _qCurveToOne(self, pt1, pt2): + """ + >>> pen = SVGPathPen(None) + >>> pen.qCurveTo((10, 20), (30, 40)) + >>> pen._commands + ['Q10 20 30 40'] + """ + assert pt2 is not None + t = "Q" + t += pointToString(pt1) + " " + t += pointToString(pt2) + self._commands.append(t) + self._lastCommand = "Q" + self._lastX, self._lastY = pt2 + + def _closePath(self): + """ + >>> pen = SVGPathPen(None) + >>> pen.closePath() + >>> pen._commands + ['Z'] + """ + self._commands.append("Z") + self._lastCommand = "Z" + self._lastX = self._lastY = None + + def _endPath(self): + """ + >>> pen = SVGPathPen(None) + >>> pen.endPath() + >>> pen._commands + ['Z'] + """ + self._closePath() + self._lastCommand = None + self._lastX = self._lastY = None + + def getCommands(self): + return "".join(self._commands) + + +if __name__ == "__main__": + import sys + import doctest + sys.exit(doctest.testmod().failed) diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/t2CharStringPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/t2CharStringPen.py new file mode 100644 index 00000000..0fddec1a --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/t2CharStringPen.py @@ -0,0 +1,65 @@ +# Copyright (c) 2009 Type Supply LLC +# Author: Tal Leming + +from fontTools.misc.roundTools import otRound, roundFunc +from fontTools.misc.psCharStrings import T2CharString +from fontTools.pens.basePen import BasePen +from fontTools.cffLib.specializer import specializeCommands, commandsToProgram + + +class T2CharStringPen(BasePen): + """Pen to draw Type 2 CharStrings. + + The 'roundTolerance' argument controls the rounding of point coordinates. + It is defined as the maximum absolute difference between the original + float and the rounded integer value. + The default tolerance of 0.5 means that all floats are rounded to integer; + a value of 0 disables rounding; values in between will only round floats + which are close to their integral part within the tolerated range. + """ + + def __init__(self, width, glyphSet, roundTolerance=0.5, CFF2=False): + super(T2CharStringPen, self).__init__(glyphSet) + self.round = roundFunc(roundTolerance) + self._CFF2 = CFF2 + self._width = width + self._commands = [] + self._p0 = (0,0) + + def _p(self, pt): + p0 = self._p0 + pt = self._p0 = (self.round(pt[0]), self.round(pt[1])) + return [pt[0]-p0[0], pt[1]-p0[1]] + + def _moveTo(self, pt): + self._commands.append(('rmoveto', self._p(pt))) + + def _lineTo(self, pt): + self._commands.append(('rlineto', self._p(pt))) + + def _curveToOne(self, pt1, pt2, pt3): + _p = self._p + self._commands.append(('rrcurveto', _p(pt1)+_p(pt2)+_p(pt3))) + + def _closePath(self): + pass + + def _endPath(self): + pass + + def getCharString(self, private=None, globalSubrs=None, optimize=True): + commands = self._commands + if optimize: + maxstack = 48 if not self._CFF2 else 513 + commands = specializeCommands(commands, + generalizeFirst=False, + maxstack=maxstack) + program = commandsToProgram(commands) + if self._width is not None: + assert not self._CFF2, "CFF2 does not allow encoding glyph width in CharString." + program.insert(0, otRound(self._width)) + if not self._CFF2: + program.append('endchar') + charString = T2CharString( + program=program, private=private, globalSubrs=globalSubrs) + return charString diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/teePen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/teePen.py new file mode 100644 index 00000000..2f30e922 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/teePen.py @@ -0,0 +1,46 @@ +"""Pen multiplexing drawing to one or more pens.""" +from fontTools.pens.basePen import AbstractPen + + +__all__ = ["TeePen"] + + +class TeePen(AbstractPen): + """Pen multiplexing drawing to one or more pens. + + Use either as TeePen(pen1, pen2, ...) or TeePen(iterableOfPens).""" + + def __init__(self, *pens): + if len(pens) == 1: + pens = pens[0] + self.pens = pens + def moveTo(self, p0): + for pen in self.pens: + pen.moveTo(p0) + def lineTo(self, p1): + for pen in self.pens: + pen.lineTo(p1) + def qCurveTo(self, *points): + for pen in self.pens: + pen.qCurveTo(*points) + def curveTo(self, *points): + for pen in self.pens: + pen.curveTo(*points) + def closePath(self): + for pen in self.pens: + pen.closePath() + def endPath(self): + for pen in self.pens: + pen.endPath() + def addComponent(self, glyphName, transformation): + for pen in self.pens: + pen.addComponent(glyphName, transformation) + + +if __name__ == "__main__": + from fontTools.pens.basePen import _TestPen + pen = TeePen(_TestPen(), _TestPen()) + pen.moveTo((0, 0)) + pen.lineTo((0, 100)) + pen.curveTo((50, 75), (60, 50), (50, 25)) + pen.closePath() diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/transformPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/transformPen.py new file mode 100644 index 00000000..93d19191 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/transformPen.py @@ -0,0 +1,108 @@ +from fontTools.pens.filterPen import FilterPen, FilterPointPen + + +__all__ = ["TransformPen", "TransformPointPen"] + + +class TransformPen(FilterPen): + + """Pen that transforms all coordinates using a Affine transformation, + and passes them to another pen. + """ + + def __init__(self, outPen, transformation): + """The 'outPen' argument is another pen object. It will receive the + transformed coordinates. The 'transformation' argument can either + be a six-tuple, or a fontTools.misc.transform.Transform object. + """ + super(TransformPen, self).__init__(outPen) + if not hasattr(transformation, "transformPoint"): + from fontTools.misc.transform import Transform + transformation = Transform(*transformation) + self._transformation = transformation + self._transformPoint = transformation.transformPoint + self._stack = [] + + def moveTo(self, pt): + self._outPen.moveTo(self._transformPoint(pt)) + + def lineTo(self, pt): + self._outPen.lineTo(self._transformPoint(pt)) + + def curveTo(self, *points): + self._outPen.curveTo(*self._transformPoints(points)) + + def qCurveTo(self, *points): + if points[-1] is None: + points = self._transformPoints(points[:-1]) + [None] + else: + points = self._transformPoints(points) + self._outPen.qCurveTo(*points) + + def _transformPoints(self, points): + transformPoint = self._transformPoint + return [transformPoint(pt) for pt in points] + + def closePath(self): + self._outPen.closePath() + + def endPath(self): + self._outPen.endPath() + + def addComponent(self, glyphName, transformation): + transformation = self._transformation.transform(transformation) + self._outPen.addComponent(glyphName, transformation) + + +class TransformPointPen(FilterPointPen): + """PointPen that transforms all coordinates using a Affine transformation, + and passes them to another PointPen. + + >>> from fontTools.pens.recordingPen import RecordingPointPen + >>> rec = RecordingPointPen() + >>> pen = TransformPointPen(rec, (2, 0, 0, 2, -10, 5)) + >>> v = iter(rec.value) + >>> pen.beginPath(identifier="contour-0") + >>> next(v) + ('beginPath', (), {'identifier': 'contour-0'}) + >>> pen.addPoint((100, 100), "line") + >>> next(v) + ('addPoint', ((190, 205), 'line', False, None), {}) + >>> pen.endPath() + >>> next(v) + ('endPath', (), {}) + >>> pen.addComponent("a", (1, 0, 0, 1, -10, 5), identifier="component-0") + >>> next(v) + ('addComponent', ('a', ), {'identifier': 'component-0'}) + """ + + def __init__(self, outPointPen, transformation): + """The 'outPointPen' argument is another point pen object. + It will receive the transformed coordinates. + The 'transformation' argument can either be a six-tuple, or a + fontTools.misc.transform.Transform object. + """ + super().__init__(outPointPen) + if not hasattr(transformation, "transformPoint"): + from fontTools.misc.transform import Transform + transformation = Transform(*transformation) + self._transformation = transformation + self._transformPoint = transformation.transformPoint + + def addPoint(self, pt, segmentType=None, smooth=False, name=None, **kwargs): + self._outPen.addPoint( + self._transformPoint(pt), segmentType, smooth, name, **kwargs + ) + + def addComponent(self, baseGlyphName, transformation, **kwargs): + transformation = self._transformation.transform(transformation) + self._outPen.addComponent(baseGlyphName, transformation, **kwargs) + + +if __name__ == "__main__": + from fontTools.pens.basePen import _TestPen + pen = TransformPen(_TestPen(None), (2, 0, 0.5, 2, -10, 0)) + pen.moveTo((0, 0)) + pen.lineTo((0, 100)) + pen.curveTo((50, 75), (60, 50), (50, 25), (0, 0)) + pen.closePath() diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/ttGlyphPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/ttGlyphPen.py new file mode 100644 index 00000000..5087e158 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/ttGlyphPen.py @@ -0,0 +1,285 @@ +from array import array +from typing import Any, Dict, Optional, Tuple +from fontTools.misc.fixedTools import MAX_F2DOT14, floatToFixedToFloat +from fontTools.misc.loggingTools import LogMixin +from fontTools.pens.pointPen import AbstractPointPen +from fontTools.misc.roundTools import otRound +from fontTools.pens.basePen import LoggingPen, PenError +from fontTools.pens.transformPen import TransformPen, TransformPointPen +from fontTools.ttLib.tables import ttProgram +from fontTools.ttLib.tables._g_l_y_f import Glyph +from fontTools.ttLib.tables._g_l_y_f import GlyphComponent +from fontTools.ttLib.tables._g_l_y_f import GlyphCoordinates + + +__all__ = ["TTGlyphPen", "TTGlyphPointPen"] + + +class _TTGlyphBasePen: + def __init__( + self, + glyphSet: Optional[Dict[str, Any]], + handleOverflowingTransforms: bool = True, + ) -> None: + """ + Construct a new pen. + + Args: + glyphSet (Dict[str, Any]): A glyphset object, used to resolve components. + handleOverflowingTransforms (bool): See below. + + If ``handleOverflowingTransforms`` is True, the components' transform values + are checked that they don't overflow the limits of a F2Dot14 number: + -2.0 <= v < +2.0. If any transform value exceeds these, the composite + glyph is decomposed. + + An exception to this rule is done for values that are very close to +2.0 + (both for consistency with the -2.0 case, and for the relative frequency + these occur in real fonts). When almost +2.0 values occur (and all other + values are within the range -2.0 <= x <= +2.0), they are clamped to the + maximum positive value that can still be encoded as an F2Dot14: i.e. + 1.99993896484375. + + If False, no check is done and all components are translated unmodified + into the glyf table, followed by an inevitable ``struct.error`` once an + attempt is made to compile them. + + If both contours and components are present in a glyph, the components + are decomposed. + """ + self.glyphSet = glyphSet + self.handleOverflowingTransforms = handleOverflowingTransforms + self.init() + + def _decompose( + self, + glyphName: str, + transformation: Tuple[float, float, float, float, float, float], + ): + tpen = self.transformPen(self, transformation) + getattr(self.glyphSet[glyphName], self.drawMethod)(tpen) + + def _isClosed(self): + """ + Check if the current path is closed. + """ + raise NotImplementedError + + def init(self) -> None: + self.points = [] + self.endPts = [] + self.types = [] + self.components = [] + + def addComponent( + self, + baseGlyphName: str, + transformation: Tuple[float, float, float, float, float, float], + identifier: Optional[str] = None, + **kwargs: Any, + ) -> None: + """ + Add a sub glyph. + """ + self.components.append((baseGlyphName, transformation)) + + def _buildComponents(self, componentFlags): + if self.handleOverflowingTransforms: + # we can't encode transform values > 2 or < -2 in F2Dot14, + # so we must decompose the glyph if any transform exceeds these + overflowing = any( + s > 2 or s < -2 + for (glyphName, transformation) in self.components + for s in transformation[:4] + ) + components = [] + for glyphName, transformation in self.components: + if glyphName not in self.glyphSet: + self.log.warning(f"skipped non-existing component '{glyphName}'") + continue + if self.points or (self.handleOverflowingTransforms and overflowing): + # can't have both coordinates and components, so decompose + self._decompose(glyphName, transformation) + continue + + component = GlyphComponent() + component.glyphName = glyphName + component.x, component.y = (otRound(v) for v in transformation[4:]) + # quantize floats to F2Dot14 so we get same values as when decompiled + # from a binary glyf table + transformation = tuple( + floatToFixedToFloat(v, 14) for v in transformation[:4] + ) + if transformation != (1, 0, 0, 1): + if self.handleOverflowingTransforms and any( + MAX_F2DOT14 < s <= 2 for s in transformation + ): + # clamp values ~= +2.0 so we can keep the component + transformation = tuple( + MAX_F2DOT14 if MAX_F2DOT14 < s <= 2 else s + for s in transformation + ) + component.transform = (transformation[:2], transformation[2:]) + component.flags = componentFlags + components.append(component) + return components + + def glyph(self, componentFlags: int = 0x4) -> Glyph: + """ + Returns a :py:class:`~._g_l_y_f.Glyph` object representing the glyph. + """ + if not self._isClosed(): + raise PenError("Didn't close last contour.") + components = self._buildComponents(componentFlags) + + glyph = Glyph() + glyph.coordinates = GlyphCoordinates(self.points) + glyph.coordinates.toInt() + glyph.endPtsOfContours = self.endPts + glyph.flags = array("B", self.types) + self.init() + + if components: + # If both components and contours were present, they have by now + # been decomposed by _buildComponents. + glyph.components = components + glyph.numberOfContours = -1 + else: + glyph.numberOfContours = len(glyph.endPtsOfContours) + glyph.program = ttProgram.Program() + glyph.program.fromBytecode(b"") + + return glyph + + +class TTGlyphPen(_TTGlyphBasePen, LoggingPen): + """ + Pen used for drawing to a TrueType glyph. + + This pen can be used to construct or modify glyphs in a TrueType format + font. After using the pen to draw, use the ``.glyph()`` method to retrieve + a :py:class:`~._g_l_y_f.Glyph` object representing the glyph. + """ + + drawMethod = "draw" + transformPen = TransformPen + + def _addPoint(self, pt: Tuple[float, float], onCurve: int) -> None: + self.points.append(pt) + self.types.append(onCurve) + + def _popPoint(self) -> None: + self.points.pop() + self.types.pop() + + def _isClosed(self) -> bool: + return (not self.points) or ( + self.endPts and self.endPts[-1] == len(self.points) - 1 + ) + + def lineTo(self, pt: Tuple[float, float]) -> None: + self._addPoint(pt, 1) + + def moveTo(self, pt: Tuple[float, float]) -> None: + if not self._isClosed(): + raise PenError('"move"-type point must begin a new contour.') + self._addPoint(pt, 1) + + def curveTo(self, *points) -> None: + raise NotImplementedError + + def qCurveTo(self, *points) -> None: + assert len(points) >= 1 + for pt in points[:-1]: + self._addPoint(pt, 0) + + # last point is None if there are no on-curve points + if points[-1] is not None: + self._addPoint(points[-1], 1) + + def closePath(self) -> None: + endPt = len(self.points) - 1 + + # ignore anchors (one-point paths) + if endPt == 0 or (self.endPts and endPt == self.endPts[-1] + 1): + self._popPoint() + return + + # if first and last point on this path are the same, remove last + startPt = 0 + if self.endPts: + startPt = self.endPts[-1] + 1 + if self.points[startPt] == self.points[endPt]: + self._popPoint() + endPt -= 1 + + self.endPts.append(endPt) + + def endPath(self) -> None: + # TrueType contours are always "closed" + self.closePath() + + +class TTGlyphPointPen(_TTGlyphBasePen, LogMixin, AbstractPointPen): + """ + Point pen used for drawing to a TrueType glyph. + + This pen can be used to construct or modify glyphs in a TrueType format + font. After using the pen to draw, use the ``.glyph()`` method to retrieve + a :py:class:`~._g_l_y_f.Glyph` object representing the glyph. + """ + + drawMethod = "drawPoints" + transformPen = TransformPointPen + + def init(self) -> None: + super().init() + self._currentContourStartIndex = None + + def _isClosed(self) -> bool: + return self._currentContourStartIndex is None + + def beginPath(self, identifier: Optional[str] = None, **kwargs: Any) -> None: + """ + Start a new sub path. + """ + if not self._isClosed(): + raise PenError("Didn't close previous contour.") + self._currentContourStartIndex = len(self.points) + + def endPath(self) -> None: + """ + End the current sub path. + """ + # TrueType contours are always "closed" + if self._isClosed(): + raise PenError("Contour is already closed.") + if self._currentContourStartIndex == len(self.points): + raise PenError("Tried to end an empty contour.") + self.endPts.append(len(self.points) - 1) + self._currentContourStartIndex = None + + def addPoint( + self, + pt: Tuple[float, float], + segmentType: Optional[str] = None, + smooth: bool = False, + name: Optional[str] = None, + identifier: Optional[str] = None, + **kwargs: Any, + ) -> None: + """ + Add a point to the current sub path. + """ + if self._isClosed(): + raise PenError("Can't add a point to a closed contour.") + if segmentType is None: + self.types.append(0) # offcurve + elif segmentType in ("qcurve", "line", "move"): + self.types.append(1) # oncurve + elif segmentType == "curve": + raise NotImplementedError("cubic curves are not supported") + else: + raise AssertionError(segmentType) + + self.points.append(pt) diff --git a/.venv/lib/python3.9/site-packages/fontTools/pens/wxPen.py b/.venv/lib/python3.9/site-packages/fontTools/pens/wxPen.py new file mode 100644 index 00000000..1504f089 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/pens/wxPen.py @@ -0,0 +1,29 @@ +from fontTools.pens.basePen import BasePen + + +__all__ = ["WxPen"] + + +class WxPen(BasePen): + + def __init__(self, glyphSet, path=None): + BasePen.__init__(self, glyphSet) + if path is None: + import wx + path = wx.GraphicsRenderer.GetDefaultRenderer().CreatePath() + self.path = path + + def _moveTo(self, p): + self.path.MoveToPoint(*p) + + def _lineTo(self, p): + self.path.AddLineToPoint(*p) + + def _curveToOne(self, p1, p2, p3): + self.path.AddCurveToPoint(*p1+p2+p3) + + def _qCurveToOne(self, p1, p2): + self.path.AddQuadCurveToPoint(*p1+p2) + + def _closePath(self): + self.path.CloseSubpath() diff --git a/.venv/lib/python3.9/site-packages/fontTools/subset/__init__.py b/.venv/lib/python3.9/site-packages/fontTools/subset/__init__.py new file mode 100644 index 00000000..8fb732f3 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/fontTools/subset/__init__.py @@ -0,0 +1,3130 @@ +# Copyright 2013 Google, Inc. All Rights Reserved. +# +# Google Author(s): Behdad Esfahbod + +from fontTools.misc.roundTools import otRound +from fontTools import ttLib +from fontTools.ttLib.tables import otTables +from fontTools.otlLib.maxContextCalc import maxCtxFont +from fontTools.pens.basePen import NullPen +from fontTools.misc.loggingTools import Timer +from fontTools.subset.util import _add_method, _uniq_sort +from fontTools.subset.cff import * +from fontTools.subset.svg import * +import sys +import struct +import array +import logging +from collections import Counter, defaultdict +from functools import reduce +from types import MethodType + +__usage__ = "pyftsubset font-file [glyph...] [--option=value]..." + +__doc__="""\ +pyftsubset -- OpenType font subsetter and optimizer + + pyftsubset is an OpenType font subsetter and optimizer, based on fontTools. + It accepts any TT- or CFF-flavored OpenType (.otf or .ttf) or WOFF (.woff) + font file. The subsetted glyph set is based on the specified glyphs + or characters, and specified OpenType layout features. + + The tool also performs some size-reducing optimizations, aimed for using + subset fonts as webfonts. Individual optimizations can be enabled or + disabled, and are enabled by default when they are safe. + +Usage: + """+__usage__+""" + + At least one glyph or one of --gids, --gids-file, --glyphs, --glyphs-file, + --text, --text-file, --unicodes, or --unicodes-file, must be specified. + +Arguments: + font-file + The input font file. + glyph + Specify one or more glyph identifiers to include in the subset. Must be + PS glyph names, or the special string '*' to keep the entire glyph set. + +Initial glyph set specification: + These options populate the initial glyph set. Same option can appear + multiple times, and the results are accummulated. + --gids=[,...] + Specify comma/whitespace-separated list of glyph IDs or ranges as + decimal numbers. For example, --gids=10-12,14 adds glyphs with + numbers 10, 11, 12, and 14. + --gids-file= + Like --gids but reads from a file. Anything after a '#' on any line + is ignored as comments. + --glyphs=[,...] + Specify comma/whitespace-separated PS glyph names to add to the subset. + Note that only PS glyph names are accepted, not gidNNN, U+XXXX, etc + that are accepted on the command line. The special string '*' will keep + the entire glyph set. + --glyphs-file= + Like --glyphs but reads from a file. Anything after a '#' on any line + is ignored as comments. + --text= + Specify characters to include in the subset, as UTF-8 string. + --text-file= + Like --text but reads from a file. Newline character are not added to + the subset. + --unicodes=[,...] + Specify comma/whitespace-separated list of Unicode codepoints or + ranges as hex numbers, optionally prefixed with 'U+', 'u', etc. + For example, --unicodes=41-5a,61-7a adds ASCII letters, so does + the more verbose --unicodes=U+0041-005A,U+0061-007A. + The special strings '*' will choose all Unicode characters mapped + by the font. + --unicodes-file= + Like --unicodes, but reads from a file. Anything after a '#' on any + line in the file is ignored as comments. + --ignore-missing-glyphs + Do not fail if some requested glyphs or gids are not available in + the font. + --no-ignore-missing-glyphs + Stop and fail if some requested glyphs or gids are not available + in the font. [default] + --ignore-missing-unicodes [default] + Do not fail if some requested Unicode characters (including those + indirectly specified using --text or --text-file) are not available + in the font. + --no-ignore-missing-unicodes + Stop and fail if some requested Unicode characters are not available + in the font. + Note the default discrepancy between ignoring missing glyphs versus + unicodes. This is for historical reasons and in the future + --no-ignore-missing-unicodes might become default. + +Other options: + For the other options listed below, to see the current value of the option, + pass a value of '?' to it, with or without a '='. + Examples: + $ pyftsubset --glyph-names? + Current setting for 'glyph-names' is: False + $ ./pyftsubset --name-IDs=? + Current setting for 'name-IDs' is: [0, 1, 2, 3, 4, 5, 6] + $ ./pyftsubset --hinting? --no-hinting --hinting? + Current setting for 'hinting' is: True + Current setting for 'hinting' is: False + +Output options: + --output-file= + The output font file. If not specified, the subsetted font + will be saved in as font-file.subset. + --flavor= + Specify flavor of output font file. May be 'woff' or 'woff2'. + Note that WOFF2 requires the Brotli Python extension, available + at https://github.com/google/brotli + --with-zopfli + Use the Google Zopfli algorithm to compress WOFF. The output is 3-8 % + smaller than pure zlib, but the compression speed is much slower. + The Zopfli Python bindings are available at: + https://pypi.python.org/pypi/zopfli + +Glyph set expansion: + These options control how additional glyphs are added to the subset. + --retain-gids + Retain glyph indices; just empty glyphs not needed in-place. + --notdef-glyph + Add the '.notdef' glyph to the subset (ie, keep it). [default] + --no-notdef-glyph + Drop the '.notdef' glyph unless specified in the glyph set. This + saves a few bytes, but is not possible for Postscript-flavored + fonts, as those require '.notdef'. For TrueType-flavored fonts, + this works fine as long as no unsupported glyphs are requested + from the font. + --notdef-outline + Keep the outline of '.notdef' glyph. The '.notdef' glyph outline is + used when glyphs not supported by the font are to be shown. It is not + needed otherwise. + --no-notdef-outline + When including a '.notdef' glyph, remove its outline. This saves + a few bytes. [default] + --recommended-glyphs + Add glyphs 0, 1, 2, and 3 to the subset, as recommended for + TrueType-flavored fonts: '.notdef', 'NULL' or '.null', 'CR', 'space'. + Some legacy software might require this, but no modern system does. + --no-recommended-glyphs + Do not add glyphs 0, 1, 2, and 3 to the subset, unless specified in + glyph set. [default] + --no-layout-closure + Do not expand glyph set to add glyphs produced by OpenType layout + features. Instead, OpenType layout features will be subset to only + rules that are relevant to the otherwise-specified glyph set. + --layout-features[+|-]=[,...] + Specify (=), add to (+=) or exclude from (-=) the comma-separated + set of OpenType layout feature tags that will be preserved. + Glyph variants used by the preserved features are added to the + specified subset glyph set. By default, 'calt', 'ccmp', 'clig', 'curs', + 'dnom', 'frac', 'kern', 'liga', 'locl', 'mark', 'mkmk', 'numr', 'rclt', + 'rlig', 'rvrn', and all features required for script shaping are + preserved. To see the full list, try '--layout-features=?'. + Use '*' to keep all features. + Multiple --layout-features options can be provided if necessary. + Examples: + --layout-features+=onum,pnum,ss01 + * Keep the default set of features and 'onum', 'pnum', 'ss01'. + --layout-features-='mark','mkmk' + * Keep the default set of features but drop 'mark' and 'mkmk'. + --layout-features='kern' + * Only keep the 'kern' feature, drop all others. + --layout-features='' + * Drop all features. + --layout-features='*' + * Keep all features. + --layout-features+=aalt --layout-features-=vrt2 + * Keep default set of features plus 'aalt', but drop 'vrt2'. + --layout-scripts[+|-]= +""" + + +# Style definitions for the HTML template +STYLE_INCLUDE = """ + +""" + + +# HTML template for HTMLWriter +DISPLAY_TEMPLATE = """ +

    + + + +""" + + +INCLUDED_FRAMES = """ + for (var i=0; i<{Nframes}; i++){{ + frames[i] = "{frame_dir}/frame" + ("0000000" + i).slice(-7) + + ".{frame_format}"; + }} +""" diff --git a/.venv/lib/python3.9/site-packages/matplotlib/_api/__init__.py b/.venv/lib/python3.9/site-packages/matplotlib/_api/__init__.py new file mode 100644 index 00000000..43b25908 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/matplotlib/_api/__init__.py @@ -0,0 +1,299 @@ +""" +Helper functions for managing the Matplotlib API. + +This documentation is only relevant for Matplotlib developers, not for users. + +.. warning: + + This module and its submodules are for internal use only. Do not use them + in your own code. We may change the API at any time with no warning. + +""" + +import functools +import itertools +import re +import sys +import warnings + +from .deprecation import ( + deprecated, warn_deprecated, + rename_parameter, delete_parameter, make_keyword_only, + deprecate_method_override, deprecate_privatize_attribute, + suppress_matplotlib_deprecation_warning, + MatplotlibDeprecationWarning) + + +class classproperty: + """ + Like `property`, but also triggers on access via the class, and it is the + *class* that's passed as argument. + + Examples + -------- + :: + + class C: + @classproperty + def foo(cls): + return cls.__name__ + + assert C.foo == "C" + """ + + def __init__(self, fget, fset=None, fdel=None, doc=None): + self._fget = fget + if fset is not None or fdel is not None: + raise ValueError('classproperty only implements fget.') + self.fset = fset + self.fdel = fdel + # docs are ignored for now + self._doc = doc + + def __get__(self, instance, owner): + return self._fget(owner) + + @property + def fget(self): + return self._fget + + +# In the following check_foo() functions, the first parameter starts with an +# underscore because it is intended to be positional-only (e.g., so that +# `_api.check_isinstance([...], types=foo)` doesn't fail. + +def check_isinstance(_types, **kwargs): + """ + For each *key, value* pair in *kwargs*, check that *value* is an instance + of one of *_types*; if not, raise an appropriate TypeError. + + As a special case, a ``None`` entry in *_types* is treated as NoneType. + + Examples + -------- + >>> _api.check_isinstance((SomeClass, None), arg=arg) + """ + types = _types + none_type = type(None) + types = ((types,) if isinstance(types, type) else + (none_type,) if types is None else + tuple(none_type if tp is None else tp for tp in types)) + + def type_name(tp): + return ("None" if tp is none_type + else tp.__qualname__ if tp.__module__ == "builtins" + else f"{tp.__module__}.{tp.__qualname__}") + + for k, v in kwargs.items(): + if not isinstance(v, types): + names = [*map(type_name, types)] + if "None" in names: # Move it to the end for better wording. + names.remove("None") + names.append("None") + raise TypeError( + "{!r} must be an instance of {}, not a {}".format( + k, + ", ".join(names[:-1]) + " or " + names[-1] + if len(names) > 1 else names[0], + type_name(type(v)))) + + +def check_in_list(_values, *, _print_supported_values=True, **kwargs): + """ + For each *key, value* pair in *kwargs*, check that *value* is in *_values*. + + Parameters + ---------- + _values : iterable + Sequence of values to check on. + _print_supported_values : bool, default: True + Whether to print *_values* when raising ValueError. + **kwargs : dict + *key, value* pairs as keyword arguments to find in *_values*. + + Raises + ------ + ValueError + If any *value* in *kwargs* is not found in *_values*. + + Examples + -------- + >>> _api.check_in_list(["foo", "bar"], arg=arg, other_arg=other_arg) + """ + values = _values + for key, val in kwargs.items(): + if val not in values: + msg = f"{val!r} is not a valid value for {key}" + if _print_supported_values: + msg += f"; supported values are {', '.join(map(repr, values))}" + raise ValueError(msg) + + +def check_shape(_shape, **kwargs): + """ + For each *key, value* pair in *kwargs*, check that *value* has the shape + *_shape*, if not, raise an appropriate ValueError. + + *None* in the shape is treated as a "free" size that can have any length. + e.g. (None, 2) -> (N, 2) + + The values checked must be numpy arrays. + + Examples + -------- + To check for (N, 2) shaped arrays + + >>> _api.check_shape((None, 2), arg=arg, other_arg=other_arg) + """ + target_shape = _shape + for k, v in kwargs.items(): + data_shape = v.shape + + if len(target_shape) != len(data_shape) or any( + t not in [s, None] + for t, s in zip(target_shape, data_shape) + ): + dim_labels = iter(itertools.chain( + 'MNLIJKLH', + (f"D{i}" for i in itertools.count()))) + text_shape = ", ".join((str(n) + if n is not None + else next(dim_labels) + for n in target_shape)) + + raise ValueError( + f"{k!r} must be {len(target_shape)}D " + f"with shape ({text_shape}). " + f"Your input has shape {v.shape}." + ) + + +def check_getitem(_mapping, **kwargs): + """ + *kwargs* must consist of a single *key, value* pair. If *key* is in + *_mapping*, return ``_mapping[value]``; else, raise an appropriate + ValueError. + + Examples + -------- + >>> _api.check_getitem({"foo": "bar"}, arg=arg) + """ + mapping = _mapping + if len(kwargs) != 1: + raise ValueError("check_getitem takes a single keyword argument") + (k, v), = kwargs.items() + try: + return mapping[v] + except KeyError: + raise ValueError( + "{!r} is not a valid value for {}; supported values are {}" + .format(v, k, ', '.join(map(repr, mapping)))) from None + + +def caching_module_getattr(cls): + """ + Helper decorator for implementing module-level ``__getattr__`` as a class. + + This decorator must be used at the module toplevel as follows:: + + @caching_module_getattr + class __getattr__: # The class *must* be named ``__getattr__``. + @property # Only properties are taken into account. + def name(self): ... + + The ``__getattr__`` class will be replaced by a ``__getattr__`` + function such that trying to access ``name`` on the module will + resolve the corresponding property (which may be decorated e.g. with + ``_api.deprecated`` for deprecating module globals). The properties are + all implicitly cached. Moreover, a suitable AttributeError is generated + and raised if no property with the given name exists. + """ + + assert cls.__name__ == "__getattr__" + # Don't accidentally export cls dunders. + props = {name: prop for name, prop in vars(cls).items() + if isinstance(prop, property)} + instance = cls() + + @functools.lru_cache(None) + def __getattr__(name): + if name in props: + return props[name].__get__(instance) + raise AttributeError( + f"module {cls.__module__!r} has no attribute {name!r}") + + return __getattr__ + + +def select_matching_signature(funcs, *args, **kwargs): + """ + Select and call the function that accepts ``*args, **kwargs``. + + *funcs* is a list of functions which should not raise any exception (other + than `TypeError` if the arguments passed do not match their signature). + + `select_matching_signature` tries to call each of the functions in *funcs* + with ``*args, **kwargs`` (in the order in which they are given). Calls + that fail with a `TypeError` are silently skipped. As soon as a call + succeeds, `select_matching_signature` returns its return value. If no + function accepts ``*args, **kwargs``, then the `TypeError` raised by the + last failing call is re-raised. + + Callers should normally make sure that any ``*args, **kwargs`` can only + bind a single *func* (to avoid any ambiguity), although this is not checked + by `select_matching_signature`. + + Notes + ----- + `select_matching_signature` is intended to help implementing + signature-overloaded functions. In general, such functions should be + avoided, except for back-compatibility concerns. A typical use pattern is + :: + + def my_func(*args, **kwargs): + params = select_matching_signature( + [lambda old1, old2: locals(), lambda new: locals()], + *args, **kwargs) + if "old1" in params: + warn_deprecated(...) + old1, old2 = params.values() # note that locals() is ordered. + else: + new, = params.values() + # do things with params + + which allows *my_func* to be called either with two parameters (*old1* and + *old2*) or a single one (*new*). Note that the new signature is given + last, so that callers get a `TypeError` corresponding to the new signature + if the arguments they passed in do not match any signature. + """ + # Rather than relying on locals() ordering, one could have just used func's + # signature (``bound = inspect.signature(func).bind(*args, **kwargs); + # bound.apply_defaults(); return bound``) but that is significantly slower. + for i, func in enumerate(funcs): + try: + return func(*args, **kwargs) + except TypeError: + if i == len(funcs) - 1: + raise + + +def warn_external(message, category=None): + """ + `warnings.warn` wrapper that sets *stacklevel* to "outside Matplotlib". + + The original emitter of the warning can be obtained by patching this + function back to `warnings.warn`, i.e. ``_api.warn_external = + warnings.warn`` (or ``functools.partial(warnings.warn, stacklevel=2)``, + etc.). + """ + frame = sys._getframe() + for stacklevel in itertools.count(1): # lgtm[py/unused-loop-variable] + if frame is None: + # when called in embedded context may hit frame is None + break + if not re.match(r"\A(matplotlib|mpl_toolkits)(\Z|\.(?!tests\.))", + # Work around sphinx-gallery not setting __name__. + frame.f_globals.get("__name__", "")): + break + frame = frame.f_back + warnings.warn(message, category, stacklevel) diff --git a/.venv/lib/python3.9/site-packages/matplotlib/_api/__pycache__/__init__.cpython-39.pyc b/.venv/lib/python3.9/site-packages/matplotlib/_api/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..224b7241746dfcf8df61f422e6f40da98e1d7be5 GIT binary patch literal 10319 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": + name = set_name + + def finalize(_, new_doc): + return _deprecated_property( + fget=obj.fget, fset=obj.fset, fdel=obj.fdel, doc=new_doc) + + else: + if obj_type is None: + obj_type = "function" + func = obj + name = name or obj.__name__ + old_doc = func.__doc__ + + def finalize(wrapper, new_doc): + wrapper = functools.wraps(func)(wrapper) + wrapper.__doc__ = new_doc + return wrapper + + def emit_warning(): + warn_deprecated( + since, message=message, name=name, alternative=alternative, + pending=pending, obj_type=obj_type, addendum=addendum, + removal=removal) + + def wrapper(*args, **kwargs): + emit_warning() + return func(*args, **kwargs) + + old_doc = inspect.cleandoc(old_doc or '').strip('\n') + + notes_header = '\nNotes\n-----' + new_doc = (f"[*Deprecated*] {old_doc}\n" + f"{notes_header if notes_header not in old_doc else ''}\n" + f".. deprecated:: {since}\n" + f" {message.strip()}") + + if not old_doc: + # This is to prevent a spurious 'unexpected unindent' warning from + # docutils when the original docstring was blank. + new_doc += r'\ ' + + return finalize(wrapper, new_doc) + + return deprecate + + +class deprecate_privatize_attribute: + """ + Helper to deprecate public access to an attribute (or method). + + This helper should only be used at class scope, as follows:: + + class Foo: + attr = _deprecate_privatize_attribute(*args, **kwargs) + + where *all* parameters are forwarded to `deprecated`. This form makes + ``attr`` a property which forwards read and write access to ``self._attr`` + (same name but with a leading underscore), with a deprecation warning. + Note that the attribute name is derived from *the name this helper is + assigned to*. This helper also works for deprecating methods. + """ + + def __init__(self, *args, **kwargs): + self.deprecator = deprecated(*args, **kwargs) + + def __set_name__(self, owner, name): + setattr(owner, name, self.deprecator( + property(lambda self: getattr(self, f"_{name}"), + lambda self, value: setattr(self, f"_{name}", value)), + name=name)) + + +# Used by _copy_docstring_and_deprecators to redecorate pyplot wrappers and +# boilerplate.py to retrieve original signatures. It may seem natural to store +# this information as an attribute on the wrapper, but if the wrapper gets +# itself functools.wraps()ed, then such attributes are silently propagated to +# the outer wrapper, which is not desired. +DECORATORS = {} + + +def rename_parameter(since, old, new, func=None): + """ + Decorator indicating that parameter *old* of *func* is renamed to *new*. + + The actual implementation of *func* should use *new*, not *old*. If *old* + is passed to *func*, a DeprecationWarning is emitted, and its value is + used, even if *new* is also passed by keyword (this is to simplify pyplot + wrapper functions, which always pass *new* explicitly to the Axes method). + If *new* is also passed but positionally, a TypeError will be raised by the + underlying function during argument binding. + + Examples + -------- + :: + + @_api.rename_parameter("3.1", "bad_name", "good_name") + def func(good_name): ... + """ + + decorator = functools.partial(rename_parameter, since, old, new) + + if func is None: + return decorator + + signature = inspect.signature(func) + assert old not in signature.parameters, ( + f"Matplotlib internal error: {old!r} cannot be a parameter for " + f"{func.__name__}()") + assert new in signature.parameters, ( + f"Matplotlib internal error: {new!r} must be a parameter for " + f"{func.__name__}()") + + @functools.wraps(func) + def wrapper(*args, **kwargs): + if old in kwargs: + warn_deprecated( + since, message=f"The {old!r} parameter of {func.__name__}() " + f"has been renamed {new!r} since Matplotlib {since}; support " + f"for the old name will be dropped %(removal)s.") + kwargs[new] = kwargs.pop(old) + return func(*args, **kwargs) + + # wrapper() must keep the same documented signature as func(): if we + # instead made both *old* and *new* appear in wrapper()'s signature, they + # would both show up in the pyplot function for an Axes method as well and + # pyplot would explicitly pass both arguments to the Axes method. + + DECORATORS[wrapper] = decorator + return wrapper + + +class _deprecated_parameter_class: + def __repr__(self): + return "" + + +_deprecated_parameter = _deprecated_parameter_class() + + +def delete_parameter(since, name, func=None, **kwargs): + """ + Decorator indicating that parameter *name* of *func* is being deprecated. + + The actual implementation of *func* should keep the *name* parameter in its + signature, or accept a ``**kwargs`` argument (through which *name* would be + passed). + + Parameters that come after the deprecated parameter effectively become + keyword-only (as they cannot be passed positionally without triggering the + DeprecationWarning on the deprecated parameter), and should be marked as + such after the deprecation period has passed and the deprecated parameter + is removed. + + Parameters other than *since*, *name*, and *func* are keyword-only and + forwarded to `.warn_deprecated`. + + Examples + -------- + :: + + @_api.delete_parameter("3.1", "unused") + def func(used_arg, other_arg, unused, more_args): ... + """ + + decorator = functools.partial(delete_parameter, since, name, **kwargs) + + if func is None: + return decorator + + signature = inspect.signature(func) + # Name of `**kwargs` parameter of the decorated function, typically + # "kwargs" if such a parameter exists, or None if the decorated function + # doesn't accept `**kwargs`. + kwargs_name = next((param.name for param in signature.parameters.values() + if param.kind == inspect.Parameter.VAR_KEYWORD), None) + if name in signature.parameters: + kind = signature.parameters[name].kind + is_varargs = kind is inspect.Parameter.VAR_POSITIONAL + is_varkwargs = kind is inspect.Parameter.VAR_KEYWORD + if not is_varargs and not is_varkwargs: + name_idx = ( + # Deprecated parameter can't be passed positionally. + math.inf if kind is inspect.Parameter.KEYWORD_ONLY + # If call site has no more than this number of parameters, the + # deprecated parameter can't have been passed positionally. + else [*signature.parameters].index(name)) + func.__signature__ = signature = signature.replace(parameters=[ + param.replace(default=_deprecated_parameter) + if param.name == name else param + for param in signature.parameters.values()]) + else: + name_idx = -1 # Deprecated parameter can always have been passed. + else: + is_varargs = is_varkwargs = False + # Deprecated parameter can't be passed positionally. + name_idx = math.inf + assert kwargs_name, ( + f"Matplotlib internal error: {name!r} must be a parameter for " + f"{func.__name__}()") + + addendum = kwargs.pop('addendum', None) + + @functools.wraps(func) + def wrapper(*inner_args, **inner_kwargs): + if len(inner_args) <= name_idx and name not in inner_kwargs: + # Early return in the simple, non-deprecated case (much faster than + # calling bind()). + return func(*inner_args, **inner_kwargs) + arguments = signature.bind(*inner_args, **inner_kwargs).arguments + if is_varargs and arguments.get(name): + warn_deprecated( + since, message=f"Additional positional arguments to " + f"{func.__name__}() are deprecated since %(since)s and " + f"support for them will be removed %(removal)s.") + elif is_varkwargs and arguments.get(name): + warn_deprecated( + since, message=f"Additional keyword arguments to " + f"{func.__name__}() are deprecated since %(since)s and " + f"support for them will be removed %(removal)s.") + # We cannot just check `name not in arguments` because the pyplot + # wrappers always pass all arguments explicitly. + elif any(name in d and d[name] != _deprecated_parameter + for d in [arguments, arguments.get(kwargs_name, {})]): + deprecation_addendum = ( + f"If any parameter follows {name!r}, they should be passed as " + f"keyword, not positionally.") + warn_deprecated( + since, + name=repr(name), + obj_type=f"parameter of {func.__name__}()", + addendum=(addendum + " " + deprecation_addendum) if addendum + else deprecation_addendum, + **kwargs) + return func(*inner_args, **inner_kwargs) + + DECORATORS[wrapper] = decorator + return wrapper + + +def make_keyword_only(since, name, func=None): + """ + Decorator indicating that passing parameter *name* (or any of the following + ones) positionally to *func* is being deprecated. + + When used on a method that has a pyplot wrapper, this should be the + outermost decorator, so that :file:`boilerplate.py` can access the original + signature. + """ + + decorator = functools.partial(make_keyword_only, since, name) + + if func is None: + return decorator + + signature = inspect.signature(func) + POK = inspect.Parameter.POSITIONAL_OR_KEYWORD + KWO = inspect.Parameter.KEYWORD_ONLY + assert (name in signature.parameters + and signature.parameters[name].kind == POK), ( + f"Matplotlib internal error: {name!r} must be a positional-or-keyword " + f"parameter for {func.__name__}()") + names = [*signature.parameters] + name_idx = names.index(name) + kwonly = [name for name in names[name_idx:] + if signature.parameters[name].kind == POK] + + @functools.wraps(func) + def wrapper(*args, **kwargs): + # Don't use signature.bind here, as it would fail when stacked with + # rename_parameter and an "old" argument name is passed in + # (signature.bind would fail, but the actual call would succeed). + if len(args) > name_idx: + warn_deprecated( + since, message="Passing the %(name)s %(obj_type)s " + "positionally is deprecated since Matplotlib %(since)s; the " + "parameter will become keyword-only %(removal)s.", + name=name, obj_type=f"parameter of {func.__name__}()") + return func(*args, **kwargs) + + # Don't modify *func*'s signature, as boilerplate.py needs it. + wrapper.__signature__ = signature.replace(parameters=[ + param.replace(kind=KWO) if param.name in kwonly else param + for param in signature.parameters.values()]) + DECORATORS[wrapper] = decorator + return wrapper + + +def deprecate_method_override(method, obj, *, allow_empty=False, **kwargs): + """ + Return ``obj.method`` with a deprecation if it was overridden, else None. + + Parameters + ---------- + method + An unbound method, i.e. an expression of the form + ``Class.method_name``. Remember that within the body of a method, one + can always use ``__class__`` to refer to the class that is currently + being defined. + obj + Either an object of the class where *method* is defined, or a subclass + of that class. + allow_empty : bool, default: False + Whether to allow overrides by "empty" methods without emitting a + warning. + **kwargs + Additional parameters passed to `warn_deprecated` to generate the + deprecation warning; must at least include the "since" key. + """ + + def empty(): pass + def empty_with_docstring(): """doc""" + + name = method.__name__ + bound_child = getattr(obj, name) + bound_base = ( + method # If obj is a class, then we need to use unbound methods. + if isinstance(bound_child, type(empty)) and isinstance(obj, type) + else method.__get__(obj)) + if (bound_child != bound_base + and (not allow_empty + or (getattr(getattr(bound_child, "__code__", None), + "co_code", None) + not in [empty.__code__.co_code, + empty_with_docstring.__code__.co_code]))): + warn_deprecated(**{"name": name, "obj_type": "method", **kwargs}) + return bound_child + return None + + +@contextlib.contextmanager +def suppress_matplotlib_deprecation_warning(): + with warnings.catch_warnings(): + warnings.simplefilter("ignore", MatplotlibDeprecationWarning) + yield diff --git a/.venv/lib/python3.9/site-packages/matplotlib/_blocking_input.py b/.venv/lib/python3.9/site-packages/matplotlib/_blocking_input.py new file mode 100644 index 00000000..45f07757 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/matplotlib/_blocking_input.py @@ -0,0 +1,30 @@ +def blocking_input_loop(figure, event_names, timeout, handler): + """ + Run *figure*'s event loop while listening to interactive events. + + The events listed in *event_names* are passed to *handler*. + + This function is used to implement `.Figure.waitforbuttonpress`, + `.Figure.ginput`, and `.Axes.clabel`. + + Parameters + ---------- + figure : `~matplotlib.figure.Figure` + event_names : list of str + The names of the events passed to *handler*. + timeout : float + If positive, the event loop is stopped after *timeout* seconds. + handler : Callable[[Event], Any] + Function called for each event; it can force an early exit of the event + loop by calling ``canvas.stop_event_loop()``. + """ + if figure.canvas.manager: + figure.show() # Ensure that the figure is shown if we are managing it. + # Connect the events to the on_event function call. + cids = [figure.canvas.mpl_connect(name, handler) for name in event_names] + try: + figure.canvas.start_event_loop(timeout) # Start event loop. + finally: # Run even on exception like ctrl-c. + # Disconnect the callbacks. + for cid in cids: + figure.canvas.mpl_disconnect(cid) diff --git a/.venv/lib/python3.9/site-packages/matplotlib/_c_internal_utils.cpython-39-x86_64-linux-gnu.so b/.venv/lib/python3.9/site-packages/matplotlib/_c_internal_utils.cpython-39-x86_64-linux-gnu.so new file mode 100644 index 0000000000000000000000000000000000000000..07af37fa21e33a9ba27d1299c0ee731457239fd1 GIT binary patch literal 23679 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 ZW4&VIm9L_*uk`xL#4}X&HnY6w{{h<%F!}%h literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/matplotlib/_cm.py b/.venv/lib/python3.9/site-packages/matplotlib/_cm.py new file mode 100644 index 00000000..586417d5 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/matplotlib/_cm.py @@ -0,0 +1,1440 @@ +""" +Nothing here but dictionaries for generating LinearSegmentedColormaps, +and a dictionary of these dictionaries. + +Documentation for each is in pyplot.colormaps(). Please update this +with the purpose and type of your colormap if you add data for one here. +""" + +from functools import partial + +import numpy as np + +_binary_data = { + 'red': ((0., 1., 1.), (1., 0., 0.)), + 'green': ((0., 1., 1.), (1., 0., 0.)), + 'blue': ((0., 1., 1.), (1., 0., 0.)) + } + +_autumn_data = {'red': ((0., 1.0, 1.0), (1.0, 1.0, 1.0)), + 'green': ((0., 0., 0.), (1.0, 1.0, 1.0)), + 'blue': ((0., 0., 0.), (1.0, 0., 0.))} + +_bone_data = {'red': ((0., 0., 0.), + (0.746032, 0.652778, 0.652778), + (1.0, 1.0, 1.0)), + 'green': ((0., 0., 0.), + (0.365079, 0.319444, 0.319444), + (0.746032, 0.777778, 0.777778), + (1.0, 1.0, 1.0)), + 'blue': ((0., 0., 0.), + (0.365079, 0.444444, 0.444444), + (1.0, 1.0, 1.0))} + +_cool_data = {'red': ((0., 0., 0.), (1.0, 1.0, 1.0)), + 'green': ((0., 1., 1.), (1.0, 0., 0.)), + 'blue': ((0., 1., 1.), (1.0, 1., 1.))} + +_copper_data = {'red': ((0., 0., 0.), + (0.809524, 1.000000, 1.000000), + (1.0, 1.0, 1.0)), + 'green': ((0., 0., 0.), + (1.0, 0.7812, 0.7812)), + 'blue': ((0., 0., 0.), + (1.0, 0.4975, 0.4975))} + +def _flag_red(x): return 0.75 * np.sin((x * 31.5 + 0.25) * np.pi) + 0.5 +def _flag_green(x): return np.sin(x * 31.5 * np.pi) +def _flag_blue(x): return 0.75 * np.sin((x * 31.5 - 0.25) * np.pi) + 0.5 +_flag_data = {'red': _flag_red, 'green': _flag_green, 'blue': _flag_blue} + +def _prism_red(x): return 0.75 * np.sin((x * 20.9 + 0.25) * np.pi) + 0.67 +def _prism_green(x): return 0.75 * np.sin((x * 20.9 - 0.25) * np.pi) + 0.33 +def _prism_blue(x): return -1.1 * np.sin((x * 20.9) * np.pi) +_prism_data = {'red': _prism_red, 'green': _prism_green, 'blue': _prism_blue} + +def _ch_helper(gamma, s, r, h, p0, p1, x): + """Helper function for generating picklable cubehelix colormaps.""" + # Apply gamma factor to emphasise low or high intensity values + xg = x ** gamma + # Calculate amplitude and angle of deviation from the black to white + # diagonal in the plane of constant perceived intensity. + a = h * xg * (1 - xg) / 2 + phi = 2 * np.pi * (s / 3 + r * x) + return xg + a * (p0 * np.cos(phi) + p1 * np.sin(phi)) + +def cubehelix(gamma=1.0, s=0.5, r=-1.5, h=1.0): + """ + Return custom data dictionary of (r, g, b) conversion functions, which can + be used with :func:`register_cmap`, for the cubehelix color scheme. + + Unlike most other color schemes cubehelix was designed by D.A. Green to + be monotonically increasing in terms of perceived brightness. + Also, when printed on a black and white postscript printer, the scheme + results in a greyscale with monotonically increasing brightness. + This color scheme is named cubehelix because the (r, g, b) values produced + can be visualised as a squashed helix around the diagonal in the + (r, g, b) color cube. + + For a unit color cube (i.e. 3D coordinates for (r, g, b) each in the + range 0 to 1) the color scheme starts at (r, g, b) = (0, 0, 0), i.e. black, + and finishes at (r, g, b) = (1, 1, 1), i.e. white. For some fraction *x*, + between 0 and 1, the color is the corresponding grey value at that + fraction along the black to white diagonal (x, x, x) plus a color + element. This color element is calculated in a plane of constant + perceived intensity and controlled by the following parameters. + + Parameters + ---------- + gamma : float, default: 1 + Gamma factor emphasizing either low intensity values (gamma < 1), or + high intensity values (gamma > 1). + s : float, default: 0.5 (purple) + The starting color. + r : float, default: -1.5 + The number of r, g, b rotations in color that are made from the start + to the end of the color scheme. The default of -1.5 corresponds to -> + B -> G -> R -> B. + h : float, default: 1 + The hue, i.e. how saturated the colors are. If this parameter is zero + then the color scheme is purely a greyscale. + """ + return {'red': partial(_ch_helper, gamma, s, r, h, -0.14861, 1.78277), + 'green': partial(_ch_helper, gamma, s, r, h, -0.29227, -0.90649), + 'blue': partial(_ch_helper, gamma, s, r, h, 1.97294, 0.0)} + +_cubehelix_data = cubehelix() + +_bwr_data = ((0.0, 0.0, 1.0), (1.0, 1.0, 1.0), (1.0, 0.0, 0.0)) +_brg_data = ((0.0, 0.0, 1.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0)) + +# Gnuplot palette functions +def _g0(x): return 0 +def _g1(x): return 0.5 +def _g2(x): return 1 +def _g3(x): return x +def _g4(x): return x ** 2 +def _g5(x): return x ** 3 +def _g6(x): return x ** 4 +def _g7(x): return np.sqrt(x) +def _g8(x): return np.sqrt(np.sqrt(x)) +def _g9(x): return np.sin(x * np.pi / 2) +def _g10(x): return np.cos(x * np.pi / 2) +def _g11(x): return np.abs(x - 0.5) +def _g12(x): return (2 * x - 1) ** 2 +def _g13(x): return np.sin(x * np.pi) +def _g14(x): return np.abs(np.cos(x * np.pi)) +def _g15(x): return np.sin(x * 2 * np.pi) +def _g16(x): return np.cos(x * 2 * np.pi) +def _g17(x): return np.abs(np.sin(x * 2 * np.pi)) +def _g18(x): return np.abs(np.cos(x * 2 * np.pi)) +def _g19(x): return np.abs(np.sin(x * 4 * np.pi)) +def _g20(x): return np.abs(np.cos(x * 4 * np.pi)) +def _g21(x): return 3 * x +def _g22(x): return 3 * x - 1 +def _g23(x): return 3 * x - 2 +def _g24(x): return np.abs(3 * x - 1) +def _g25(x): return np.abs(3 * x - 2) +def _g26(x): return (3 * x - 1) / 2 +def _g27(x): return (3 * x - 2) / 2 +def _g28(x): return np.abs((3 * x - 1) / 2) +def _g29(x): return np.abs((3 * x - 2) / 2) +def _g30(x): return x / 0.32 - 0.78125 +def _g31(x): return 2 * x - 0.84 +def _g32(x): + ret = np.zeros(len(x)) + m = (x < 0.25) + ret[m] = 4 * x[m] + m = (x >= 0.25) & (x < 0.92) + ret[m] = -2 * x[m] + 1.84 + m = (x >= 0.92) + ret[m] = x[m] / 0.08 - 11.5 + return ret +def _g33(x): return np.abs(2 * x - 0.5) +def _g34(x): return 2 * x +def _g35(x): return 2 * x - 0.5 +def _g36(x): return 2 * x - 1 + +gfunc = {i: globals()["_g{}".format(i)] for i in range(37)} + +_gnuplot_data = { + 'red': gfunc[7], + 'green': gfunc[5], + 'blue': gfunc[15], +} + +_gnuplot2_data = { + 'red': gfunc[30], + 'green': gfunc[31], + 'blue': gfunc[32], +} + +_ocean_data = { + 'red': gfunc[23], + 'green': gfunc[28], + 'blue': gfunc[3], +} + +_afmhot_data = { + 'red': gfunc[34], + 'green': gfunc[35], + 'blue': gfunc[36], +} + +_rainbow_data = { + 'red': gfunc[33], + 'green': gfunc[13], + 'blue': gfunc[10], +} + +_seismic_data = ( + (0.0, 0.0, 0.3), (0.0, 0.0, 1.0), + (1.0, 1.0, 1.0), (1.0, 0.0, 0.0), + (0.5, 0.0, 0.0)) + +_terrain_data = ( + (0.00, (0.2, 0.2, 0.6)), + (0.15, (0.0, 0.6, 1.0)), + (0.25, (0.0, 0.8, 0.4)), + (0.50, (1.0, 1.0, 0.6)), + (0.75, (0.5, 0.36, 0.33)), + (1.00, (1.0, 1.0, 1.0))) + +_gray_data = {'red': ((0., 0, 0), (1., 1, 1)), + 'green': ((0., 0, 0), (1., 1, 1)), + 'blue': ((0., 0, 0), (1., 1, 1))} + +_hot_data = {'red': ((0., 0.0416, 0.0416), + (0.365079, 1.000000, 1.000000), + (1.0, 1.0, 1.0)), + 'green': ((0., 0., 0.), + (0.365079, 0.000000, 0.000000), + (0.746032, 1.000000, 1.000000), + (1.0, 1.0, 1.0)), + 'blue': ((0., 0., 0.), + (0.746032, 0.000000, 0.000000), + (1.0, 1.0, 1.0))} + +_hsv_data = {'red': ((0., 1., 1.), + (0.158730, 1.000000, 1.000000), + (0.174603, 0.968750, 0.968750), + (0.333333, 0.031250, 0.031250), + (0.349206, 0.000000, 0.000000), + (0.666667, 0.000000, 0.000000), + (0.682540, 0.031250, 0.031250), + (0.841270, 0.968750, 0.968750), + (0.857143, 1.000000, 1.000000), + (1.0, 1.0, 1.0)), + 'green': ((0., 0., 0.), + (0.158730, 0.937500, 0.937500), + (0.174603, 1.000000, 1.000000), + (0.507937, 1.000000, 1.000000), + (0.666667, 0.062500, 0.062500), + (0.682540, 0.000000, 0.000000), + (1.0, 0., 0.)), + 'blue': ((0., 0., 0.), + (0.333333, 0.000000, 0.000000), + (0.349206, 0.062500, 0.062500), + (0.507937, 1.000000, 1.000000), + (0.841270, 1.000000, 1.000000), + (0.857143, 0.937500, 0.937500), + (1.0, 0.09375, 0.09375))} + +_jet_data = {'red': ((0.00, 0, 0), + (0.35, 0, 0), + (0.66, 1, 1), + (0.89, 1, 1), + (1.00, 0.5, 0.5)), + 'green': ((0.000, 0, 0), + (0.125, 0, 0), + (0.375, 1, 1), + (0.640, 1, 1), + (0.910, 0, 0), + (1.000, 0, 0)), + 'blue': ((0.00, 0.5, 0.5), + (0.11, 1, 1), + (0.34, 1, 1), + (0.65, 0, 0), + (1.00, 0, 0))} + +_pink_data = {'red': ((0., 0.1178, 0.1178), (0.015873, 0.195857, 0.195857), + (0.031746, 0.250661, 0.250661), + (0.047619, 0.295468, 0.295468), + (0.063492, 0.334324, 0.334324), + (0.079365, 0.369112, 0.369112), + (0.095238, 0.400892, 0.400892), + (0.111111, 0.430331, 0.430331), + (0.126984, 0.457882, 0.457882), + (0.142857, 0.483867, 0.483867), + (0.158730, 0.508525, 0.508525), + (0.174603, 0.532042, 0.532042), + (0.190476, 0.554563, 0.554563), + (0.206349, 0.576204, 0.576204), + (0.222222, 0.597061, 0.597061), + (0.238095, 0.617213, 0.617213), + (0.253968, 0.636729, 0.636729), + (0.269841, 0.655663, 0.655663), + (0.285714, 0.674066, 0.674066), + (0.301587, 0.691980, 0.691980), + (0.317460, 0.709441, 0.709441), + (0.333333, 0.726483, 0.726483), + (0.349206, 0.743134, 0.743134), + (0.365079, 0.759421, 0.759421), + (0.380952, 0.766356, 0.766356), + (0.396825, 0.773229, 0.773229), + (0.412698, 0.780042, 0.780042), + (0.428571, 0.786796, 0.786796), + (0.444444, 0.793492, 0.793492), + (0.460317, 0.800132, 0.800132), + (0.476190, 0.806718, 0.806718), + (0.492063, 0.813250, 0.813250), + (0.507937, 0.819730, 0.819730), + (0.523810, 0.826160, 0.826160), + (0.539683, 0.832539, 0.832539), + (0.555556, 0.838870, 0.838870), + (0.571429, 0.845154, 0.845154), + (0.587302, 0.851392, 0.851392), + (0.603175, 0.857584, 0.857584), + (0.619048, 0.863731, 0.863731), + (0.634921, 0.869835, 0.869835), + (0.650794, 0.875897, 0.875897), + (0.666667, 0.881917, 0.881917), + (0.682540, 0.887896, 0.887896), + (0.698413, 0.893835, 0.893835), + (0.714286, 0.899735, 0.899735), + (0.730159, 0.905597, 0.905597), + (0.746032, 0.911421, 0.911421), + (0.761905, 0.917208, 0.917208), + (0.777778, 0.922958, 0.922958), + (0.793651, 0.928673, 0.928673), + (0.809524, 0.934353, 0.934353), + (0.825397, 0.939999, 0.939999), + (0.841270, 0.945611, 0.945611), + (0.857143, 0.951190, 0.951190), + (0.873016, 0.956736, 0.956736), + (0.888889, 0.962250, 0.962250), + (0.904762, 0.967733, 0.967733), + (0.920635, 0.973185, 0.973185), + (0.936508, 0.978607, 0.978607), + (0.952381, 0.983999, 0.983999), + (0.968254, 0.989361, 0.989361), + (0.984127, 0.994695, 0.994695), (1.0, 1.0, 1.0)), + 'green': ((0., 0., 0.), (0.015873, 0.102869, 0.102869), + (0.031746, 0.145479, 0.145479), + (0.047619, 0.178174, 0.178174), + (0.063492, 0.205738, 0.205738), + (0.079365, 0.230022, 0.230022), + (0.095238, 0.251976, 0.251976), + (0.111111, 0.272166, 0.272166), + (0.126984, 0.290957, 0.290957), + (0.142857, 0.308607, 0.308607), + (0.158730, 0.325300, 0.325300), + (0.174603, 0.341178, 0.341178), + (0.190476, 0.356348, 0.356348), + (0.206349, 0.370899, 0.370899), + (0.222222, 0.384900, 0.384900), + (0.238095, 0.398410, 0.398410), + (0.253968, 0.411476, 0.411476), + (0.269841, 0.424139, 0.424139), + (0.285714, 0.436436, 0.436436), + (0.301587, 0.448395, 0.448395), + (0.317460, 0.460044, 0.460044), + (0.333333, 0.471405, 0.471405), + (0.349206, 0.482498, 0.482498), + (0.365079, 0.493342, 0.493342), + (0.380952, 0.517549, 0.517549), + (0.396825, 0.540674, 0.540674), + (0.412698, 0.562849, 0.562849), + (0.428571, 0.584183, 0.584183), + (0.444444, 0.604765, 0.604765), + (0.460317, 0.624669, 0.624669), + (0.476190, 0.643958, 0.643958), + (0.492063, 0.662687, 0.662687), + (0.507937, 0.680900, 0.680900), + (0.523810, 0.698638, 0.698638), + (0.539683, 0.715937, 0.715937), + (0.555556, 0.732828, 0.732828), + (0.571429, 0.749338, 0.749338), + (0.587302, 0.765493, 0.765493), + (0.603175, 0.781313, 0.781313), + (0.619048, 0.796819, 0.796819), + (0.634921, 0.812029, 0.812029), + (0.650794, 0.826960, 0.826960), + (0.666667, 0.841625, 0.841625), + (0.682540, 0.856040, 0.856040), + (0.698413, 0.870216, 0.870216), + (0.714286, 0.884164, 0.884164), + (0.730159, 0.897896, 0.897896), + (0.746032, 0.911421, 0.911421), + (0.761905, 0.917208, 0.917208), + (0.777778, 0.922958, 0.922958), + (0.793651, 0.928673, 0.928673), + (0.809524, 0.934353, 0.934353), + (0.825397, 0.939999, 0.939999), + (0.841270, 0.945611, 0.945611), + (0.857143, 0.951190, 0.951190), + (0.873016, 0.956736, 0.956736), + (0.888889, 0.962250, 0.962250), + (0.904762, 0.967733, 0.967733), + (0.920635, 0.973185, 0.973185), + (0.936508, 0.978607, 0.978607), + (0.952381, 0.983999, 0.983999), + (0.968254, 0.989361, 0.989361), + (0.984127, 0.994695, 0.994695), (1.0, 1.0, 1.0)), + 'blue': ((0., 0., 0.), (0.015873, 0.102869, 0.102869), + (0.031746, 0.145479, 0.145479), + (0.047619, 0.178174, 0.178174), + (0.063492, 0.205738, 0.205738), + (0.079365, 0.230022, 0.230022), + (0.095238, 0.251976, 0.251976), + (0.111111, 0.272166, 0.272166), + (0.126984, 0.290957, 0.290957), + (0.142857, 0.308607, 0.308607), + (0.158730, 0.325300, 0.325300), + (0.174603, 0.341178, 0.341178), + (0.190476, 0.356348, 0.356348), + (0.206349, 0.370899, 0.370899), + (0.222222, 0.384900, 0.384900), + (0.238095, 0.398410, 0.398410), + (0.253968, 0.411476, 0.411476), + (0.269841, 0.424139, 0.424139), + (0.285714, 0.436436, 0.436436), + (0.301587, 0.448395, 0.448395), + (0.317460, 0.460044, 0.460044), + (0.333333, 0.471405, 0.471405), + (0.349206, 0.482498, 0.482498), + (0.365079, 0.493342, 0.493342), + (0.380952, 0.503953, 0.503953), + (0.396825, 0.514344, 0.514344), + (0.412698, 0.524531, 0.524531), + (0.428571, 0.534522, 0.534522), + (0.444444, 0.544331, 0.544331), + (0.460317, 0.553966, 0.553966), + (0.476190, 0.563436, 0.563436), + (0.492063, 0.572750, 0.572750), + (0.507937, 0.581914, 0.581914), + (0.523810, 0.590937, 0.590937), + (0.539683, 0.599824, 0.599824), + (0.555556, 0.608581, 0.608581), + (0.571429, 0.617213, 0.617213), + (0.587302, 0.625727, 0.625727), + (0.603175, 0.634126, 0.634126), + (0.619048, 0.642416, 0.642416), + (0.634921, 0.650600, 0.650600), + (0.650794, 0.658682, 0.658682), + (0.666667, 0.666667, 0.666667), + (0.682540, 0.674556, 0.674556), + (0.698413, 0.682355, 0.682355), + (0.714286, 0.690066, 0.690066), + (0.730159, 0.697691, 0.697691), + (0.746032, 0.705234, 0.705234), + (0.761905, 0.727166, 0.727166), + (0.777778, 0.748455, 0.748455), + (0.793651, 0.769156, 0.769156), + (0.809524, 0.789314, 0.789314), + (0.825397, 0.808969, 0.808969), + (0.841270, 0.828159, 0.828159), + (0.857143, 0.846913, 0.846913), + (0.873016, 0.865261, 0.865261), + (0.888889, 0.883229, 0.883229), + (0.904762, 0.900837, 0.900837), + (0.920635, 0.918109, 0.918109), + (0.936508, 0.935061, 0.935061), + (0.952381, 0.951711, 0.951711), + (0.968254, 0.968075, 0.968075), + (0.984127, 0.984167, 0.984167), (1.0, 1.0, 1.0))} + +_spring_data = {'red': ((0., 1., 1.), (1.0, 1.0, 1.0)), + 'green': ((0., 0., 0.), (1.0, 1.0, 1.0)), + 'blue': ((0., 1., 1.), (1.0, 0.0, 0.0))} + + +_summer_data = {'red': ((0., 0., 0.), (1.0, 1.0, 1.0)), + 'green': ((0., 0.5, 0.5), (1.0, 1.0, 1.0)), + 'blue': ((0., 0.4, 0.4), (1.0, 0.4, 0.4))} + + +_winter_data = {'red': ((0., 0., 0.), (1.0, 0.0, 0.0)), + 'green': ((0., 0., 0.), (1.0, 1.0, 1.0)), + 'blue': ((0., 1., 1.), (1.0, 0.5, 0.5))} + +_nipy_spectral_data = { + 'red': [ + (0.0, 0.0, 0.0), (0.05, 0.4667, 0.4667), + (0.10, 0.5333, 0.5333), (0.15, 0.0, 0.0), + (0.20, 0.0, 0.0), (0.25, 0.0, 0.0), + (0.30, 0.0, 0.0), (0.35, 0.0, 0.0), + (0.40, 0.0, 0.0), (0.45, 0.0, 0.0), + (0.50, 0.0, 0.0), (0.55, 0.0, 0.0), + (0.60, 0.0, 0.0), (0.65, 0.7333, 0.7333), + (0.70, 0.9333, 0.9333), (0.75, 1.0, 1.0), + (0.80, 1.0, 1.0), (0.85, 1.0, 1.0), + (0.90, 0.8667, 0.8667), (0.95, 0.80, 0.80), + (1.0, 0.80, 0.80), + ], + 'green': [ + (0.0, 0.0, 0.0), (0.05, 0.0, 0.0), + (0.10, 0.0, 0.0), (0.15, 0.0, 0.0), + (0.20, 0.0, 0.0), (0.25, 0.4667, 0.4667), + (0.30, 0.6000, 0.6000), (0.35, 0.6667, 0.6667), + (0.40, 0.6667, 0.6667), (0.45, 0.6000, 0.6000), + (0.50, 0.7333, 0.7333), (0.55, 0.8667, 0.8667), + (0.60, 1.0, 1.0), (0.65, 1.0, 1.0), + (0.70, 0.9333, 0.9333), (0.75, 0.8000, 0.8000), + (0.80, 0.6000, 0.6000), (0.85, 0.0, 0.0), + (0.90, 0.0, 0.0), (0.95, 0.0, 0.0), + (1.0, 0.80, 0.80), + ], + 'blue': [ + (0.0, 0.0, 0.0), (0.05, 0.5333, 0.5333), + (0.10, 0.6000, 0.6000), (0.15, 0.6667, 0.6667), + (0.20, 0.8667, 0.8667), (0.25, 0.8667, 0.8667), + (0.30, 0.8667, 0.8667), (0.35, 0.6667, 0.6667), + (0.40, 0.5333, 0.5333), (0.45, 0.0, 0.0), + (0.5, 0.0, 0.0), (0.55, 0.0, 0.0), + (0.60, 0.0, 0.0), (0.65, 0.0, 0.0), + (0.70, 0.0, 0.0), (0.75, 0.0, 0.0), + (0.80, 0.0, 0.0), (0.85, 0.0, 0.0), + (0.90, 0.0, 0.0), (0.95, 0.0, 0.0), + (1.0, 0.80, 0.80), + ], +} + + +# 34 colormaps based on color specifications and designs +# developed by Cynthia Brewer (https://colorbrewer2.org/). +# The ColorBrewer palettes have been included under the terms +# of an Apache-stype license (for details, see the file +# LICENSE_COLORBREWER in the license directory of the matplotlib +# source distribution). + +# RGB values taken from Brewer's Excel sheet, divided by 255 + +_Blues_data = ( + (0.96862745098039216, 0.98431372549019602, 1.0 ), + (0.87058823529411766, 0.92156862745098034, 0.96862745098039216), + (0.77647058823529413, 0.85882352941176465, 0.93725490196078431), + (0.61960784313725492, 0.792156862745098 , 0.88235294117647056), + (0.41960784313725491, 0.68235294117647061, 0.83921568627450982), + (0.25882352941176473, 0.5725490196078431 , 0.77647058823529413), + (0.12941176470588237, 0.44313725490196076, 0.70980392156862748), + (0.03137254901960784, 0.31764705882352939, 0.61176470588235299), + (0.03137254901960784, 0.18823529411764706, 0.41960784313725491) + ) + +_BrBG_data = ( + (0.32941176470588235, 0.18823529411764706, 0.0196078431372549 ), + (0.5490196078431373 , 0.31764705882352939, 0.0392156862745098 ), + (0.74901960784313726, 0.50588235294117645, 0.17647058823529413), + (0.87450980392156863, 0.76078431372549016, 0.49019607843137253), + (0.96470588235294119, 0.90980392156862744, 0.76470588235294112), + (0.96078431372549022, 0.96078431372549022, 0.96078431372549022), + (0.7803921568627451 , 0.91764705882352937, 0.89803921568627454), + (0.50196078431372548, 0.80392156862745101, 0.75686274509803919), + (0.20784313725490197, 0.59215686274509804, 0.5607843137254902 ), + (0.00392156862745098, 0.4 , 0.36862745098039218), + (0.0 , 0.23529411764705882, 0.18823529411764706) + ) + +_BuGn_data = ( + (0.96862745098039216, 0.9882352941176471 , 0.99215686274509807), + (0.89803921568627454, 0.96078431372549022, 0.97647058823529409), + (0.8 , 0.92549019607843142, 0.90196078431372551), + (0.6 , 0.84705882352941175, 0.78823529411764703), + (0.4 , 0.76078431372549016, 0.64313725490196083), + (0.25490196078431371, 0.68235294117647061, 0.46274509803921571), + (0.13725490196078433, 0.54509803921568623, 0.27058823529411763), + (0.0 , 0.42745098039215684, 0.17254901960784313), + (0.0 , 0.26666666666666666, 0.10588235294117647) + ) + +_BuPu_data = ( + (0.96862745098039216, 0.9882352941176471 , 0.99215686274509807), + (0.8784313725490196 , 0.92549019607843142, 0.95686274509803926), + (0.74901960784313726, 0.82745098039215681, 0.90196078431372551), + (0.61960784313725492, 0.73725490196078436, 0.85490196078431369), + (0.5490196078431373 , 0.58823529411764708, 0.77647058823529413), + (0.5490196078431373 , 0.41960784313725491, 0.69411764705882351), + (0.53333333333333333, 0.25490196078431371, 0.61568627450980395), + (0.50588235294117645, 0.05882352941176471, 0.48627450980392156), + (0.30196078431372547, 0.0 , 0.29411764705882354) + ) + +_GnBu_data = ( + (0.96862745098039216, 0.9882352941176471 , 0.94117647058823528), + (0.8784313725490196 , 0.95294117647058818, 0.85882352941176465), + (0.8 , 0.92156862745098034, 0.77254901960784317), + (0.6588235294117647 , 0.8666666666666667 , 0.70980392156862748), + (0.4823529411764706 , 0.8 , 0.7686274509803922 ), + (0.30588235294117649, 0.70196078431372544, 0.82745098039215681), + (0.16862745098039217, 0.5490196078431373 , 0.74509803921568629), + (0.03137254901960784, 0.40784313725490196, 0.67450980392156867), + (0.03137254901960784, 0.25098039215686274, 0.50588235294117645) + ) + +_Greens_data = ( + (0.96862745098039216, 0.9882352941176471 , 0.96078431372549022), + (0.89803921568627454, 0.96078431372549022, 0.8784313725490196 ), + (0.7803921568627451 , 0.9137254901960784 , 0.75294117647058822), + (0.63137254901960782, 0.85098039215686272, 0.60784313725490191), + (0.45490196078431372, 0.7686274509803922 , 0.46274509803921571), + (0.25490196078431371, 0.6705882352941176 , 0.36470588235294116), + (0.13725490196078433, 0.54509803921568623, 0.27058823529411763), + (0.0 , 0.42745098039215684, 0.17254901960784313), + (0.0 , 0.26666666666666666, 0.10588235294117647) + ) + +_Greys_data = ( + (1.0 , 1.0 , 1.0 ), + (0.94117647058823528, 0.94117647058823528, 0.94117647058823528), + (0.85098039215686272, 0.85098039215686272, 0.85098039215686272), + (0.74117647058823533, 0.74117647058823533, 0.74117647058823533), + (0.58823529411764708, 0.58823529411764708, 0.58823529411764708), + (0.45098039215686275, 0.45098039215686275, 0.45098039215686275), + (0.32156862745098042, 0.32156862745098042, 0.32156862745098042), + (0.14509803921568629, 0.14509803921568629, 0.14509803921568629), + (0.0 , 0.0 , 0.0 ) + ) + +_Oranges_data = ( + (1.0 , 0.96078431372549022, 0.92156862745098034), + (0.99607843137254903, 0.90196078431372551, 0.80784313725490198), + (0.99215686274509807, 0.81568627450980391, 0.63529411764705879), + (0.99215686274509807, 0.68235294117647061, 0.41960784313725491), + (0.99215686274509807, 0.55294117647058827, 0.23529411764705882), + (0.94509803921568625, 0.41176470588235292, 0.07450980392156863), + (0.85098039215686272, 0.28235294117647058, 0.00392156862745098), + (0.65098039215686276, 0.21176470588235294, 0.01176470588235294), + (0.49803921568627452, 0.15294117647058825, 0.01568627450980392) + ) + +_OrRd_data = ( + (1.0 , 0.96862745098039216, 0.92549019607843142), + (0.99607843137254903, 0.90980392156862744, 0.78431372549019607), + (0.99215686274509807, 0.83137254901960789, 0.61960784313725492), + (0.99215686274509807, 0.73333333333333328, 0.51764705882352946), + (0.9882352941176471 , 0.55294117647058827, 0.34901960784313724), + (0.93725490196078431, 0.396078431372549 , 0.28235294117647058), + (0.84313725490196079, 0.18823529411764706, 0.12156862745098039), + (0.70196078431372544, 0.0 , 0.0 ), + (0.49803921568627452, 0.0 , 0.0 ) + ) + +_PiYG_data = ( + (0.55686274509803924, 0.00392156862745098, 0.32156862745098042), + (0.77254901960784317, 0.10588235294117647, 0.49019607843137253), + (0.87058823529411766, 0.46666666666666667, 0.68235294117647061), + (0.94509803921568625, 0.71372549019607845, 0.85490196078431369), + (0.99215686274509807, 0.8784313725490196 , 0.93725490196078431), + (0.96862745098039216, 0.96862745098039216, 0.96862745098039216), + (0.90196078431372551, 0.96078431372549022, 0.81568627450980391), + (0.72156862745098038, 0.88235294117647056, 0.52549019607843139), + (0.49803921568627452, 0.73725490196078436, 0.25490196078431371), + (0.30196078431372547, 0.5725490196078431 , 0.12941176470588237), + (0.15294117647058825, 0.39215686274509803, 0.09803921568627451) + ) + +_PRGn_data = ( + (0.25098039215686274, 0.0 , 0.29411764705882354), + (0.46274509803921571, 0.16470588235294117, 0.51372549019607838), + (0.6 , 0.4392156862745098 , 0.6705882352941176 ), + (0.76078431372549016, 0.6470588235294118 , 0.81176470588235294), + (0.90588235294117647, 0.83137254901960789, 0.90980392156862744), + (0.96862745098039216, 0.96862745098039216, 0.96862745098039216), + (0.85098039215686272, 0.94117647058823528, 0.82745098039215681), + (0.65098039215686276, 0.85882352941176465, 0.62745098039215685), + (0.35294117647058826, 0.68235294117647061, 0.38039215686274508), + (0.10588235294117647, 0.47058823529411764, 0.21568627450980393), + (0.0 , 0.26666666666666666, 0.10588235294117647) + ) + +_PuBu_data = ( + (1.0 , 0.96862745098039216, 0.98431372549019602), + (0.92549019607843142, 0.90588235294117647, 0.94901960784313721), + (0.81568627450980391, 0.81960784313725488, 0.90196078431372551), + (0.65098039215686276, 0.74117647058823533, 0.85882352941176465), + (0.45490196078431372, 0.66274509803921566, 0.81176470588235294), + (0.21176470588235294, 0.56470588235294117, 0.75294117647058822), + (0.0196078431372549 , 0.4392156862745098 , 0.69019607843137254), + (0.01568627450980392, 0.35294117647058826, 0.55294117647058827), + (0.00784313725490196, 0.2196078431372549 , 0.34509803921568627) + ) + +_PuBuGn_data = ( + (1.0 , 0.96862745098039216, 0.98431372549019602), + (0.92549019607843142, 0.88627450980392153, 0.94117647058823528), + (0.81568627450980391, 0.81960784313725488, 0.90196078431372551), + (0.65098039215686276, 0.74117647058823533, 0.85882352941176465), + (0.40392156862745099, 0.66274509803921566, 0.81176470588235294), + (0.21176470588235294, 0.56470588235294117, 0.75294117647058822), + (0.00784313725490196, 0.50588235294117645, 0.54117647058823526), + (0.00392156862745098, 0.42352941176470588, 0.34901960784313724), + (0.00392156862745098, 0.27450980392156865, 0.21176470588235294) + ) + +_PuOr_data = ( + (0.49803921568627452, 0.23137254901960785, 0.03137254901960784), + (0.70196078431372544, 0.34509803921568627, 0.02352941176470588), + (0.8784313725490196 , 0.50980392156862742, 0.07843137254901961), + (0.99215686274509807, 0.72156862745098038, 0.38823529411764707), + (0.99607843137254903, 0.8784313725490196 , 0.71372549019607845), + (0.96862745098039216, 0.96862745098039216, 0.96862745098039216), + (0.84705882352941175, 0.85490196078431369, 0.92156862745098034), + (0.69803921568627447, 0.6705882352941176 , 0.82352941176470584), + (0.50196078431372548, 0.45098039215686275, 0.67450980392156867), + (0.32941176470588235, 0.15294117647058825, 0.53333333333333333), + (0.17647058823529413, 0.0 , 0.29411764705882354) + ) + +_PuRd_data = ( + (0.96862745098039216, 0.95686274509803926, 0.97647058823529409), + (0.90588235294117647, 0.88235294117647056, 0.93725490196078431), + (0.83137254901960789, 0.72549019607843135, 0.85490196078431369), + (0.78823529411764703, 0.58039215686274515, 0.7803921568627451 ), + (0.87450980392156863, 0.396078431372549 , 0.69019607843137254), + (0.90588235294117647, 0.16078431372549021, 0.54117647058823526), + (0.80784313725490198, 0.07058823529411765, 0.33725490196078434), + (0.59607843137254901, 0.0 , 0.2627450980392157 ), + (0.40392156862745099, 0.0 , 0.12156862745098039) + ) + +_Purples_data = ( + (0.9882352941176471 , 0.98431372549019602, 0.99215686274509807), + (0.93725490196078431, 0.92941176470588238, 0.96078431372549022), + (0.85490196078431369, 0.85490196078431369, 0.92156862745098034), + (0.73725490196078436, 0.74117647058823533, 0.86274509803921573), + (0.61960784313725492, 0.60392156862745094, 0.78431372549019607), + (0.50196078431372548, 0.49019607843137253, 0.72941176470588232), + (0.41568627450980394, 0.31764705882352939, 0.63921568627450975), + (0.32941176470588235, 0.15294117647058825, 0.5607843137254902 ), + (0.24705882352941178, 0.0 , 0.49019607843137253) + ) + +_RdBu_data = ( + (0.40392156862745099, 0.0 , 0.12156862745098039), + (0.69803921568627447, 0.09411764705882353, 0.16862745098039217), + (0.83921568627450982, 0.37647058823529411, 0.30196078431372547), + (0.95686274509803926, 0.6470588235294118 , 0.50980392156862742), + (0.99215686274509807, 0.85882352941176465, 0.7803921568627451 ), + (0.96862745098039216, 0.96862745098039216, 0.96862745098039216), + (0.81960784313725488, 0.89803921568627454, 0.94117647058823528), + (0.5725490196078431 , 0.77254901960784317, 0.87058823529411766), + (0.2627450980392157 , 0.57647058823529407, 0.76470588235294112), + (0.12941176470588237, 0.4 , 0.67450980392156867), + (0.0196078431372549 , 0.18823529411764706, 0.38039215686274508) + ) + +_RdGy_data = ( + (0.40392156862745099, 0.0 , 0.12156862745098039), + (0.69803921568627447, 0.09411764705882353, 0.16862745098039217), + (0.83921568627450982, 0.37647058823529411, 0.30196078431372547), + (0.95686274509803926, 0.6470588235294118 , 0.50980392156862742), + (0.99215686274509807, 0.85882352941176465, 0.7803921568627451 ), + (1.0 , 1.0 , 1.0 ), + (0.8784313725490196 , 0.8784313725490196 , 0.8784313725490196 ), + (0.72941176470588232, 0.72941176470588232, 0.72941176470588232), + (0.52941176470588236, 0.52941176470588236, 0.52941176470588236), + (0.30196078431372547, 0.30196078431372547, 0.30196078431372547), + (0.10196078431372549, 0.10196078431372549, 0.10196078431372549) + ) + +_RdPu_data = ( + (1.0 , 0.96862745098039216, 0.95294117647058818), + (0.99215686274509807, 0.8784313725490196 , 0.86666666666666667), + (0.9882352941176471 , 0.77254901960784317, 0.75294117647058822), + (0.98039215686274506, 0.62352941176470589, 0.70980392156862748), + (0.96862745098039216, 0.40784313725490196, 0.63137254901960782), + (0.86666666666666667, 0.20392156862745098, 0.59215686274509804), + (0.68235294117647061, 0.00392156862745098, 0.49411764705882355), + (0.47843137254901963, 0.00392156862745098, 0.46666666666666667), + (0.28627450980392155, 0.0 , 0.41568627450980394) + ) + +_RdYlBu_data = ( + (0.6470588235294118 , 0.0 , 0.14901960784313725), + (0.84313725490196079, 0.18823529411764706 , 0.15294117647058825), + (0.95686274509803926, 0.42745098039215684 , 0.2627450980392157 ), + (0.99215686274509807, 0.68235294117647061 , 0.38039215686274508), + (0.99607843137254903, 0.8784313725490196 , 0.56470588235294117), + (1.0 , 1.0 , 0.74901960784313726), + (0.8784313725490196 , 0.95294117647058818 , 0.97254901960784312), + (0.6705882352941176 , 0.85098039215686272 , 0.9137254901960784 ), + (0.45490196078431372, 0.67843137254901964 , 0.81960784313725488), + (0.27058823529411763, 0.45882352941176469 , 0.70588235294117652), + (0.19215686274509805, 0.21176470588235294 , 0.58431372549019611) + ) + +_RdYlGn_data = ( + (0.6470588235294118 , 0.0 , 0.14901960784313725), + (0.84313725490196079, 0.18823529411764706 , 0.15294117647058825), + (0.95686274509803926, 0.42745098039215684 , 0.2627450980392157 ), + (0.99215686274509807, 0.68235294117647061 , 0.38039215686274508), + (0.99607843137254903, 0.8784313725490196 , 0.54509803921568623), + (1.0 , 1.0 , 0.74901960784313726), + (0.85098039215686272, 0.93725490196078431 , 0.54509803921568623), + (0.65098039215686276, 0.85098039215686272 , 0.41568627450980394), + (0.4 , 0.74117647058823533 , 0.38823529411764707), + (0.10196078431372549, 0.59607843137254901 , 0.31372549019607843), + (0.0 , 0.40784313725490196 , 0.21568627450980393) + ) + +_Reds_data = ( + (1.0 , 0.96078431372549022 , 0.94117647058823528), + (0.99607843137254903, 0.8784313725490196 , 0.82352941176470584), + (0.9882352941176471 , 0.73333333333333328 , 0.63137254901960782), + (0.9882352941176471 , 0.5725490196078431 , 0.44705882352941179), + (0.98431372549019602, 0.41568627450980394 , 0.29019607843137257), + (0.93725490196078431, 0.23137254901960785 , 0.17254901960784313), + (0.79607843137254897, 0.094117647058823528, 0.11372549019607843), + (0.6470588235294118 , 0.058823529411764705, 0.08235294117647058), + (0.40392156862745099, 0.0 , 0.05098039215686274) + ) + +_Spectral_data = ( + (0.61960784313725492, 0.003921568627450980, 0.25882352941176473), + (0.83529411764705885, 0.24313725490196078 , 0.30980392156862746), + (0.95686274509803926, 0.42745098039215684 , 0.2627450980392157 ), + (0.99215686274509807, 0.68235294117647061 , 0.38039215686274508), + (0.99607843137254903, 0.8784313725490196 , 0.54509803921568623), + (1.0 , 1.0 , 0.74901960784313726), + (0.90196078431372551, 0.96078431372549022 , 0.59607843137254901), + (0.6705882352941176 , 0.8666666666666667 , 0.64313725490196083), + (0.4 , 0.76078431372549016 , 0.6470588235294118 ), + (0.19607843137254902, 0.53333333333333333 , 0.74117647058823533), + (0.36862745098039218, 0.30980392156862746 , 0.63529411764705879) + ) + +_YlGn_data = ( + (1.0 , 1.0 , 0.89803921568627454), + (0.96862745098039216, 0.9882352941176471 , 0.72549019607843135), + (0.85098039215686272, 0.94117647058823528 , 0.63921568627450975), + (0.67843137254901964, 0.8666666666666667 , 0.55686274509803924), + (0.47058823529411764, 0.77647058823529413 , 0.47450980392156861), + (0.25490196078431371, 0.6705882352941176 , 0.36470588235294116), + (0.13725490196078433, 0.51764705882352946 , 0.2627450980392157 ), + (0.0 , 0.40784313725490196 , 0.21568627450980393), + (0.0 , 0.27058823529411763 , 0.16078431372549021) + ) + +_YlGnBu_data = ( + (1.0 , 1.0 , 0.85098039215686272), + (0.92941176470588238, 0.97254901960784312 , 0.69411764705882351), + (0.7803921568627451 , 0.9137254901960784 , 0.70588235294117652), + (0.49803921568627452, 0.80392156862745101 , 0.73333333333333328), + (0.25490196078431371, 0.71372549019607845 , 0.7686274509803922 ), + (0.11372549019607843, 0.56862745098039214 , 0.75294117647058822), + (0.13333333333333333, 0.36862745098039218 , 0.6588235294117647 ), + (0.14509803921568629, 0.20392156862745098 , 0.58039215686274515), + (0.03137254901960784, 0.11372549019607843 , 0.34509803921568627) + ) + +_YlOrBr_data = ( + (1.0 , 1.0 , 0.89803921568627454), + (1.0 , 0.96862745098039216 , 0.73725490196078436), + (0.99607843137254903, 0.8901960784313725 , 0.56862745098039214), + (0.99607843137254903, 0.7686274509803922 , 0.30980392156862746), + (0.99607843137254903, 0.6 , 0.16078431372549021), + (0.92549019607843142, 0.4392156862745098 , 0.07843137254901961), + (0.8 , 0.29803921568627451 , 0.00784313725490196), + (0.6 , 0.20392156862745098 , 0.01568627450980392), + (0.4 , 0.14509803921568629 , 0.02352941176470588) + ) + +_YlOrRd_data = ( + (1.0 , 1.0 , 0.8 ), + (1.0 , 0.92941176470588238 , 0.62745098039215685), + (0.99607843137254903, 0.85098039215686272 , 0.46274509803921571), + (0.99607843137254903, 0.69803921568627447 , 0.29803921568627451), + (0.99215686274509807, 0.55294117647058827 , 0.23529411764705882), + (0.9882352941176471 , 0.30588235294117649 , 0.16470588235294117), + (0.8901960784313725 , 0.10196078431372549 , 0.10980392156862745), + (0.74117647058823533, 0.0 , 0.14901960784313725), + (0.50196078431372548, 0.0 , 0.14901960784313725) + ) + + +# ColorBrewer's qualitative maps, implemented using ListedColormap +# for use with mpl.colors.NoNorm + +_Accent_data = ( + (0.49803921568627452, 0.78823529411764703, 0.49803921568627452), + (0.74509803921568629, 0.68235294117647061, 0.83137254901960789), + (0.99215686274509807, 0.75294117647058822, 0.52549019607843139), + (1.0, 1.0, 0.6 ), + (0.2196078431372549, 0.42352941176470588, 0.69019607843137254), + (0.94117647058823528, 0.00784313725490196, 0.49803921568627452), + (0.74901960784313726, 0.35686274509803922, 0.09019607843137254), + (0.4, 0.4, 0.4 ), + ) + +_Dark2_data = ( + (0.10588235294117647, 0.61960784313725492, 0.46666666666666667), + (0.85098039215686272, 0.37254901960784315, 0.00784313725490196), + (0.45882352941176469, 0.4392156862745098, 0.70196078431372544), + (0.90588235294117647, 0.16078431372549021, 0.54117647058823526), + (0.4, 0.65098039215686276, 0.11764705882352941), + (0.90196078431372551, 0.6705882352941176, 0.00784313725490196), + (0.65098039215686276, 0.46274509803921571, 0.11372549019607843), + (0.4, 0.4, 0.4 ), + ) + +_Paired_data = ( + (0.65098039215686276, 0.80784313725490198, 0.8901960784313725 ), + (0.12156862745098039, 0.47058823529411764, 0.70588235294117652), + (0.69803921568627447, 0.87450980392156863, 0.54117647058823526), + (0.2, 0.62745098039215685, 0.17254901960784313), + (0.98431372549019602, 0.60392156862745094, 0.6 ), + (0.8901960784313725, 0.10196078431372549, 0.10980392156862745), + (0.99215686274509807, 0.74901960784313726, 0.43529411764705883), + (1.0, 0.49803921568627452, 0.0 ), + (0.792156862745098, 0.69803921568627447, 0.83921568627450982), + (0.41568627450980394, 0.23921568627450981, 0.60392156862745094), + (1.0, 1.0, 0.6 ), + (0.69411764705882351, 0.34901960784313724, 0.15686274509803921), + ) + +_Pastel1_data = ( + (0.98431372549019602, 0.70588235294117652, 0.68235294117647061), + (0.70196078431372544, 0.80392156862745101, 0.8901960784313725 ), + (0.8, 0.92156862745098034, 0.77254901960784317), + (0.87058823529411766, 0.79607843137254897, 0.89411764705882357), + (0.99607843137254903, 0.85098039215686272, 0.65098039215686276), + (1.0, 1.0, 0.8 ), + (0.89803921568627454, 0.84705882352941175, 0.74117647058823533), + (0.99215686274509807, 0.85490196078431369, 0.92549019607843142), + (0.94901960784313721, 0.94901960784313721, 0.94901960784313721), + ) + +_Pastel2_data = ( + (0.70196078431372544, 0.88627450980392153, 0.80392156862745101), + (0.99215686274509807, 0.80392156862745101, 0.67450980392156867), + (0.79607843137254897, 0.83529411764705885, 0.90980392156862744), + (0.95686274509803926, 0.792156862745098, 0.89411764705882357), + (0.90196078431372551, 0.96078431372549022, 0.78823529411764703), + (1.0, 0.94901960784313721, 0.68235294117647061), + (0.94509803921568625, 0.88627450980392153, 0.8 ), + (0.8, 0.8, 0.8 ), + ) + +_Set1_data = ( + (0.89411764705882357, 0.10196078431372549, 0.10980392156862745), + (0.21568627450980393, 0.49411764705882355, 0.72156862745098038), + (0.30196078431372547, 0.68627450980392157, 0.29019607843137257), + (0.59607843137254901, 0.30588235294117649, 0.63921568627450975), + (1.0, 0.49803921568627452, 0.0 ), + (1.0, 1.0, 0.2 ), + (0.65098039215686276, 0.33725490196078434, 0.15686274509803921), + (0.96862745098039216, 0.50588235294117645, 0.74901960784313726), + (0.6, 0.6, 0.6), + ) + +_Set2_data = ( + (0.4, 0.76078431372549016, 0.6470588235294118 ), + (0.9882352941176471, 0.55294117647058827, 0.3843137254901961 ), + (0.55294117647058827, 0.62745098039215685, 0.79607843137254897), + (0.90588235294117647, 0.54117647058823526, 0.76470588235294112), + (0.65098039215686276, 0.84705882352941175, 0.32941176470588235), + (1.0, 0.85098039215686272, 0.18431372549019609), + (0.89803921568627454, 0.7686274509803922, 0.58039215686274515), + (0.70196078431372544, 0.70196078431372544, 0.70196078431372544), + ) + +_Set3_data = ( + (0.55294117647058827, 0.82745098039215681, 0.7803921568627451 ), + (1.0, 1.0, 0.70196078431372544), + (0.74509803921568629, 0.72941176470588232, 0.85490196078431369), + (0.98431372549019602, 0.50196078431372548, 0.44705882352941179), + (0.50196078431372548, 0.69411764705882351, 0.82745098039215681), + (0.99215686274509807, 0.70588235294117652, 0.3843137254901961 ), + (0.70196078431372544, 0.87058823529411766, 0.41176470588235292), + (0.9882352941176471, 0.80392156862745101, 0.89803921568627454), + (0.85098039215686272, 0.85098039215686272, 0.85098039215686272), + (0.73725490196078436, 0.50196078431372548, 0.74117647058823533), + (0.8, 0.92156862745098034, 0.77254901960784317), + (1.0, 0.92941176470588238, 0.43529411764705883), + ) + + +# The next 7 palettes are from the Yorick scientific visualization package, +# an evolution of the GIST package, both by David H. Munro. +# They are released under a BSD-like license (see LICENSE_YORICK in +# the license directory of the matplotlib source distribution). +# +# Most palette functions have been reduced to simple function descriptions +# by Reinier Heeres, since the rgb components were mostly straight lines. +# gist_earth_data and gist_ncar_data were simplified by a script and some +# manual effort. + +_gist_earth_data = \ +{'red': ( +(0.0, 0.0, 0.0000), +(0.2824, 0.1882, 0.1882), +(0.4588, 0.2714, 0.2714), +(0.5490, 0.4719, 0.4719), +(0.6980, 0.7176, 0.7176), +(0.7882, 0.7553, 0.7553), +(1.0000, 0.9922, 0.9922), +), 'green': ( +(0.0, 0.0, 0.0000), +(0.0275, 0.0000, 0.0000), +(0.1098, 0.1893, 0.1893), +(0.1647, 0.3035, 0.3035), +(0.2078, 0.3841, 0.3841), +(0.2824, 0.5020, 0.5020), +(0.5216, 0.6397, 0.6397), +(0.6980, 0.7171, 0.7171), +(0.7882, 0.6392, 0.6392), +(0.7922, 0.6413, 0.6413), +(0.8000, 0.6447, 0.6447), +(0.8078, 0.6481, 0.6481), +(0.8157, 0.6549, 0.6549), +(0.8667, 0.6991, 0.6991), +(0.8745, 0.7103, 0.7103), +(0.8824, 0.7216, 0.7216), +(0.8902, 0.7323, 0.7323), +(0.8980, 0.7430, 0.7430), +(0.9412, 0.8275, 0.8275), +(0.9569, 0.8635, 0.8635), +(0.9647, 0.8816, 0.8816), +(0.9961, 0.9733, 0.9733), +(1.0000, 0.9843, 0.9843), +), 'blue': ( +(0.0, 0.0, 0.0000), +(0.0039, 0.1684, 0.1684), +(0.0078, 0.2212, 0.2212), +(0.0275, 0.4329, 0.4329), +(0.0314, 0.4549, 0.4549), +(0.2824, 0.5004, 0.5004), +(0.4667, 0.2748, 0.2748), +(0.5451, 0.3205, 0.3205), +(0.7843, 0.3961, 0.3961), +(0.8941, 0.6651, 0.6651), +(1.0000, 0.9843, 0.9843), +)} + +_gist_gray_data = { + 'red': gfunc[3], + 'green': gfunc[3], + 'blue': gfunc[3], +} + +def _gist_heat_red(x): return 1.5 * x +def _gist_heat_green(x): return 2 * x - 1 +def _gist_heat_blue(x): return 4 * x - 3 +_gist_heat_data = { + 'red': _gist_heat_red, 'green': _gist_heat_green, 'blue': _gist_heat_blue} + +_gist_ncar_data = \ +{'red': ( +(0.0, 0.0, 0.0000), +(0.3098, 0.0000, 0.0000), +(0.3725, 0.3993, 0.3993), +(0.4235, 0.5003, 0.5003), +(0.5333, 1.0000, 1.0000), +(0.7922, 1.0000, 1.0000), +(0.8471, 0.6218, 0.6218), +(0.8980, 0.9235, 0.9235), +(1.0000, 0.9961, 0.9961), +), 'green': ( +(0.0, 0.0, 0.0000), +(0.0510, 0.3722, 0.3722), +(0.1059, 0.0000, 0.0000), +(0.1569, 0.7202, 0.7202), +(0.1608, 0.7537, 0.7537), +(0.1647, 0.7752, 0.7752), +(0.2157, 1.0000, 1.0000), +(0.2588, 0.9804, 0.9804), +(0.2706, 0.9804, 0.9804), +(0.3176, 1.0000, 1.0000), +(0.3686, 0.8081, 0.8081), +(0.4275, 1.0000, 1.0000), +(0.5216, 1.0000, 1.0000), +(0.6314, 0.7292, 0.7292), +(0.6863, 0.2796, 0.2796), +(0.7451, 0.0000, 0.0000), +(0.7922, 0.0000, 0.0000), +(0.8431, 0.1753, 0.1753), +(0.8980, 0.5000, 0.5000), +(1.0000, 0.9725, 0.9725), +), 'blue': ( +(0.0, 0.5020, 0.5020), +(0.0510, 0.0222, 0.0222), +(0.1098, 1.0000, 1.0000), +(0.2039, 1.0000, 1.0000), +(0.2627, 0.6145, 0.6145), +(0.3216, 0.0000, 0.0000), +(0.4157, 0.0000, 0.0000), +(0.4745, 0.2342, 0.2342), +(0.5333, 0.0000, 0.0000), +(0.5804, 0.0000, 0.0000), +(0.6314, 0.0549, 0.0549), +(0.6902, 0.0000, 0.0000), +(0.7373, 0.0000, 0.0000), +(0.7922, 0.9738, 0.9738), +(0.8000, 1.0000, 1.0000), +(0.8431, 1.0000, 1.0000), +(0.8980, 0.9341, 0.9341), +(1.0000, 0.9961, 0.9961), +)} + +_gist_rainbow_data = ( + (0.000, (1.00, 0.00, 0.16)), + (0.030, (1.00, 0.00, 0.00)), + (0.215, (1.00, 1.00, 0.00)), + (0.400, (0.00, 1.00, 0.00)), + (0.586, (0.00, 1.00, 1.00)), + (0.770, (0.00, 0.00, 1.00)), + (0.954, (1.00, 0.00, 1.00)), + (1.000, (1.00, 0.00, 0.75)) +) + +_gist_stern_data = { + 'red': ( + (0.000, 0.000, 0.000), (0.0547, 1.000, 1.000), + (0.250, 0.027, 0.250), # (0.2500, 0.250, 0.250), + (1.000, 1.000, 1.000)), + 'green': ((0, 0, 0), (1, 1, 1)), + 'blue': ( + (0.000, 0.000, 0.000), (0.500, 1.000, 1.000), + (0.735, 0.000, 0.000), (1.000, 1.000, 1.000)) +} + +def _gist_yarg(x): return 1 - x +_gist_yarg_data = {'red': _gist_yarg, 'green': _gist_yarg, 'blue': _gist_yarg} + +# This bipolar colormap was generated from CoolWarmFloat33.csv of +# "Diverging Color Maps for Scientific Visualization" by Kenneth Moreland. +# +_coolwarm_data = { + 'red': [ + (0.0, 0.2298057, 0.2298057), + (0.03125, 0.26623388, 0.26623388), + (0.0625, 0.30386891, 0.30386891), + (0.09375, 0.342804478, 0.342804478), + (0.125, 0.38301334, 0.38301334), + (0.15625, 0.424369608, 0.424369608), + (0.1875, 0.46666708, 0.46666708), + (0.21875, 0.509635204, 0.509635204), + (0.25, 0.552953156, 0.552953156), + (0.28125, 0.596262162, 0.596262162), + (0.3125, 0.639176211, 0.639176211), + (0.34375, 0.681291281, 0.681291281), + (0.375, 0.722193294, 0.722193294), + (0.40625, 0.761464949, 0.761464949), + (0.4375, 0.798691636, 0.798691636), + (0.46875, 0.833466556, 0.833466556), + (0.5, 0.865395197, 0.865395197), + (0.53125, 0.897787179, 0.897787179), + (0.5625, 0.924127593, 0.924127593), + (0.59375, 0.944468518, 0.944468518), + (0.625, 0.958852946, 0.958852946), + (0.65625, 0.96732803, 0.96732803), + (0.6875, 0.969954137, 0.969954137), + (0.71875, 0.966811177, 0.966811177), + (0.75, 0.958003065, 0.958003065), + (0.78125, 0.943660866, 0.943660866), + (0.8125, 0.923944917, 0.923944917), + (0.84375, 0.89904617, 0.89904617), + (0.875, 0.869186849, 0.869186849), + (0.90625, 0.834620542, 0.834620542), + (0.9375, 0.795631745, 0.795631745), + (0.96875, 0.752534934, 0.752534934), + (1.0, 0.705673158, 0.705673158)], + 'green': [ + (0.0, 0.298717966, 0.298717966), + (0.03125, 0.353094838, 0.353094838), + (0.0625, 0.406535296, 0.406535296), + (0.09375, 0.458757618, 0.458757618), + (0.125, 0.50941904, 0.50941904), + (0.15625, 0.558148092, 0.558148092), + (0.1875, 0.604562568, 0.604562568), + (0.21875, 0.648280772, 0.648280772), + (0.25, 0.688929332, 0.688929332), + (0.28125, 0.726149107, 0.726149107), + (0.3125, 0.759599947, 0.759599947), + (0.34375, 0.788964712, 0.788964712), + (0.375, 0.813952739, 0.813952739), + (0.40625, 0.834302879, 0.834302879), + (0.4375, 0.849786142, 0.849786142), + (0.46875, 0.860207984, 0.860207984), + (0.5, 0.86541021, 0.86541021), + (0.53125, 0.848937047, 0.848937047), + (0.5625, 0.827384882, 0.827384882), + (0.59375, 0.800927443, 0.800927443), + (0.625, 0.769767752, 0.769767752), + (0.65625, 0.734132809, 0.734132809), + (0.6875, 0.694266682, 0.694266682), + (0.71875, 0.650421156, 0.650421156), + (0.75, 0.602842431, 0.602842431), + (0.78125, 0.551750968, 0.551750968), + (0.8125, 0.49730856, 0.49730856), + (0.84375, 0.439559467, 0.439559467), + (0.875, 0.378313092, 0.378313092), + (0.90625, 0.312874446, 0.312874446), + (0.9375, 0.24128379, 0.24128379), + (0.96875, 0.157246067, 0.157246067), + (1.0, 0.01555616, 0.01555616)], + 'blue': [ + (0.0, 0.753683153, 0.753683153), + (0.03125, 0.801466763, 0.801466763), + (0.0625, 0.84495867, 0.84495867), + (0.09375, 0.883725899, 0.883725899), + (0.125, 0.917387822, 0.917387822), + (0.15625, 0.945619588, 0.945619588), + (0.1875, 0.968154911, 0.968154911), + (0.21875, 0.98478814, 0.98478814), + (0.25, 0.995375608, 0.995375608), + (0.28125, 0.999836203, 0.999836203), + (0.3125, 0.998151185, 0.998151185), + (0.34375, 0.990363227, 0.990363227), + (0.375, 0.976574709, 0.976574709), + (0.40625, 0.956945269, 0.956945269), + (0.4375, 0.931688648, 0.931688648), + (0.46875, 0.901068838, 0.901068838), + (0.5, 0.865395561, 0.865395561), + (0.53125, 0.820880546, 0.820880546), + (0.5625, 0.774508472, 0.774508472), + (0.59375, 0.726736146, 0.726736146), + (0.625, 0.678007945, 0.678007945), + (0.65625, 0.628751763, 0.628751763), + (0.6875, 0.579375448, 0.579375448), + (0.71875, 0.530263762, 0.530263762), + (0.75, 0.481775914, 0.481775914), + (0.78125, 0.434243684, 0.434243684), + (0.8125, 0.387970225, 0.387970225), + (0.84375, 0.343229596, 0.343229596), + (0.875, 0.300267182, 0.300267182), + (0.90625, 0.259301199, 0.259301199), + (0.9375, 0.220525627, 0.220525627), + (0.96875, 0.184115123, 0.184115123), + (1.0, 0.150232812, 0.150232812)] + } + +# Implementation of Carey Rappaport's CMRmap. +# See `A Color Map for Effective Black-and-White Rendering of Color-Scale +# Images' by Carey Rappaport +# https://www.mathworks.com/matlabcentral/fileexchange/2662-cmrmap-m +_CMRmap_data = {'red': ((0.000, 0.00, 0.00), + (0.125, 0.15, 0.15), + (0.250, 0.30, 0.30), + (0.375, 0.60, 0.60), + (0.500, 1.00, 1.00), + (0.625, 0.90, 0.90), + (0.750, 0.90, 0.90), + (0.875, 0.90, 0.90), + (1.000, 1.00, 1.00)), + 'green': ((0.000, 0.00, 0.00), + (0.125, 0.15, 0.15), + (0.250, 0.15, 0.15), + (0.375, 0.20, 0.20), + (0.500, 0.25, 0.25), + (0.625, 0.50, 0.50), + (0.750, 0.75, 0.75), + (0.875, 0.90, 0.90), + (1.000, 1.00, 1.00)), + 'blue': ((0.000, 0.00, 0.00), + (0.125, 0.50, 0.50), + (0.250, 0.75, 0.75), + (0.375, 0.50, 0.50), + (0.500, 0.15, 0.15), + (0.625, 0.00, 0.00), + (0.750, 0.10, 0.10), + (0.875, 0.50, 0.50), + (1.000, 1.00, 1.00))} + + +# An MIT licensed, colorblind-friendly heatmap from Wistia: +# https://github.com/wistia/heatmap-palette +# https://wistia.com/learn/culture/heatmaps-for-colorblindness +# +# >>> import matplotlib.colors as c +# >>> colors = ["#e4ff7a", "#ffe81a", "#ffbd00", "#ffa000", "#fc7f00"] +# >>> cm = c.LinearSegmentedColormap.from_list('wistia', colors) +# >>> _wistia_data = cm._segmentdata +# >>> del _wistia_data['alpha'] +# +_wistia_data = { + 'red': [(0.0, 0.8941176470588236, 0.8941176470588236), + (0.25, 1.0, 1.0), + (0.5, 1.0, 1.0), + (0.75, 1.0, 1.0), + (1.0, 0.9882352941176471, 0.9882352941176471)], + 'green': [(0.0, 1.0, 1.0), + (0.25, 0.9098039215686274, 0.9098039215686274), + (0.5, 0.7411764705882353, 0.7411764705882353), + (0.75, 0.6274509803921569, 0.6274509803921569), + (1.0, 0.4980392156862745, 0.4980392156862745)], + 'blue': [(0.0, 0.47843137254901963, 0.47843137254901963), + (0.25, 0.10196078431372549, 0.10196078431372549), + (0.5, 0.0, 0.0), + (0.75, 0.0, 0.0), + (1.0, 0.0, 0.0)], +} + + +# Categorical palettes from Vega: +# https://github.com/vega/vega/wiki/Scales +# (divided by 255) +# + +_tab10_data = ( + (0.12156862745098039, 0.4666666666666667, 0.7058823529411765 ), # 1f77b4 + (1.0, 0.4980392156862745, 0.054901960784313725), # ff7f0e + (0.17254901960784313, 0.6274509803921569, 0.17254901960784313 ), # 2ca02c + (0.8392156862745098, 0.15294117647058825, 0.1568627450980392 ), # d62728 + (0.5803921568627451, 0.403921568627451, 0.7411764705882353 ), # 9467bd + (0.5490196078431373, 0.33725490196078434, 0.29411764705882354 ), # 8c564b + (0.8901960784313725, 0.4666666666666667, 0.7607843137254902 ), # e377c2 + (0.4980392156862745, 0.4980392156862745, 0.4980392156862745 ), # 7f7f7f + (0.7372549019607844, 0.7411764705882353, 0.13333333333333333 ), # bcbd22 + (0.09019607843137255, 0.7450980392156863, 0.8117647058823529), # 17becf +) + +_tab20_data = ( + (0.12156862745098039, 0.4666666666666667, 0.7058823529411765 ), # 1f77b4 + (0.6823529411764706, 0.7803921568627451, 0.9098039215686274 ), # aec7e8 + (1.0, 0.4980392156862745, 0.054901960784313725), # ff7f0e + (1.0, 0.7333333333333333, 0.47058823529411764 ), # ffbb78 + (0.17254901960784313, 0.6274509803921569, 0.17254901960784313 ), # 2ca02c + (0.596078431372549, 0.8745098039215686, 0.5411764705882353 ), # 98df8a + (0.8392156862745098, 0.15294117647058825, 0.1568627450980392 ), # d62728 + (1.0, 0.596078431372549, 0.5882352941176471 ), # ff9896 + (0.5803921568627451, 0.403921568627451, 0.7411764705882353 ), # 9467bd + (0.7725490196078432, 0.6901960784313725, 0.8352941176470589 ), # c5b0d5 + (0.5490196078431373, 0.33725490196078434, 0.29411764705882354 ), # 8c564b + (0.7686274509803922, 0.611764705882353, 0.5803921568627451 ), # c49c94 + (0.8901960784313725, 0.4666666666666667, 0.7607843137254902 ), # e377c2 + (0.9686274509803922, 0.7137254901960784, 0.8235294117647058 ), # f7b6d2 + (0.4980392156862745, 0.4980392156862745, 0.4980392156862745 ), # 7f7f7f + (0.7803921568627451, 0.7803921568627451, 0.7803921568627451 ), # c7c7c7 + (0.7372549019607844, 0.7411764705882353, 0.13333333333333333 ), # bcbd22 + (0.8588235294117647, 0.8588235294117647, 0.5529411764705883 ), # dbdb8d + (0.09019607843137255, 0.7450980392156863, 0.8117647058823529 ), # 17becf + (0.6196078431372549, 0.8549019607843137, 0.8980392156862745), # 9edae5 +) + +_tab20b_data = ( + (0.2235294117647059, 0.23137254901960785, 0.4745098039215686 ), # 393b79 + (0.3215686274509804, 0.32941176470588235, 0.6392156862745098 ), # 5254a3 + (0.4196078431372549, 0.43137254901960786, 0.8117647058823529 ), # 6b6ecf + (0.611764705882353, 0.6196078431372549, 0.8705882352941177 ), # 9c9ede + (0.38823529411764707, 0.4745098039215686, 0.2235294117647059 ), # 637939 + (0.5490196078431373, 0.6352941176470588, 0.3215686274509804 ), # 8ca252 + (0.7098039215686275, 0.8117647058823529, 0.4196078431372549 ), # b5cf6b + (0.807843137254902, 0.8588235294117647, 0.611764705882353 ), # cedb9c + (0.5490196078431373, 0.42745098039215684, 0.19215686274509805), # 8c6d31 + (0.7411764705882353, 0.6196078431372549, 0.2235294117647059 ), # bd9e39 + (0.9058823529411765, 0.7294117647058823, 0.3215686274509804 ), # e7ba52 + (0.9058823529411765, 0.796078431372549, 0.5803921568627451 ), # e7cb94 + (0.5176470588235295, 0.23529411764705882, 0.2235294117647059 ), # 843c39 + (0.6784313725490196, 0.28627450980392155, 0.2901960784313726 ), # ad494a + (0.8392156862745098, 0.3803921568627451, 0.4196078431372549 ), # d6616b + (0.9058823529411765, 0.5882352941176471, 0.611764705882353 ), # e7969c + (0.4823529411764706, 0.2549019607843137, 0.45098039215686275), # 7b4173 + (0.6470588235294118, 0.3176470588235294, 0.5803921568627451 ), # a55194 + (0.807843137254902, 0.42745098039215684, 0.7411764705882353 ), # ce6dbd + (0.8705882352941177, 0.6196078431372549, 0.8392156862745098 ), # de9ed6 +) + +_tab20c_data = ( + (0.19215686274509805, 0.5098039215686274, 0.7411764705882353 ), # 3182bd + (0.4196078431372549, 0.6823529411764706, 0.8392156862745098 ), # 6baed6 + (0.6196078431372549, 0.792156862745098, 0.8823529411764706 ), # 9ecae1 + (0.7764705882352941, 0.8588235294117647, 0.9372549019607843 ), # c6dbef + (0.9019607843137255, 0.3333333333333333, 0.050980392156862744), # e6550d + (0.9921568627450981, 0.5529411764705883, 0.23529411764705882 ), # fd8d3c + (0.9921568627450981, 0.6823529411764706, 0.4196078431372549 ), # fdae6b + (0.9921568627450981, 0.8156862745098039, 0.6352941176470588 ), # fdd0a2 + (0.19215686274509805, 0.6392156862745098, 0.32941176470588235 ), # 31a354 + (0.4549019607843137, 0.7686274509803922, 0.4627450980392157 ), # 74c476 + (0.6313725490196078, 0.8509803921568627, 0.6078431372549019 ), # a1d99b + (0.7803921568627451, 0.9137254901960784, 0.7529411764705882 ), # c7e9c0 + (0.4588235294117647, 0.4196078431372549, 0.6941176470588235 ), # 756bb1 + (0.6196078431372549, 0.6039215686274509, 0.7843137254901961 ), # 9e9ac8 + (0.7372549019607844, 0.7411764705882353, 0.8627450980392157 ), # bcbddc + (0.8549019607843137, 0.8549019607843137, 0.9215686274509803 ), # dadaeb + (0.38823529411764707, 0.38823529411764707, 0.38823529411764707 ), # 636363 + (0.5882352941176471, 0.5882352941176471, 0.5882352941176471 ), # 969696 + (0.7411764705882353, 0.7411764705882353, 0.7411764705882353 ), # bdbdbd + (0.8509803921568627, 0.8509803921568627, 0.8509803921568627 ), # d9d9d9 +) + + +datad = { + 'Blues': _Blues_data, + 'BrBG': _BrBG_data, + 'BuGn': _BuGn_data, + 'BuPu': _BuPu_data, + 'CMRmap': _CMRmap_data, + 'GnBu': _GnBu_data, + 'Greens': _Greens_data, + 'Greys': _Greys_data, + 'OrRd': _OrRd_data, + 'Oranges': _Oranges_data, + 'PRGn': _PRGn_data, + 'PiYG': _PiYG_data, + 'PuBu': _PuBu_data, + 'PuBuGn': _PuBuGn_data, + 'PuOr': _PuOr_data, + 'PuRd': _PuRd_data, + 'Purples': _Purples_data, + 'RdBu': _RdBu_data, + 'RdGy': _RdGy_data, + 'RdPu': _RdPu_data, + 'RdYlBu': _RdYlBu_data, + 'RdYlGn': _RdYlGn_data, + 'Reds': _Reds_data, + 'Spectral': _Spectral_data, + 'Wistia': _wistia_data, + 'YlGn': _YlGn_data, + 'YlGnBu': _YlGnBu_data, + 'YlOrBr': _YlOrBr_data, + 'YlOrRd': _YlOrRd_data, + 'afmhot': _afmhot_data, + 'autumn': _autumn_data, + 'binary': _binary_data, + 'bone': _bone_data, + 'brg': _brg_data, + 'bwr': _bwr_data, + 'cool': _cool_data, + 'coolwarm': _coolwarm_data, + 'copper': _copper_data, + 'cubehelix': _cubehelix_data, + 'flag': _flag_data, + 'gist_earth': _gist_earth_data, + 'gist_gray': _gist_gray_data, + 'gist_heat': _gist_heat_data, + 'gist_ncar': _gist_ncar_data, + 'gist_rainbow': _gist_rainbow_data, + 'gist_stern': _gist_stern_data, + 'gist_yarg': _gist_yarg_data, + 'gnuplot': _gnuplot_data, + 'gnuplot2': _gnuplot2_data, + 'gray': _gray_data, + 'hot': _hot_data, + 'hsv': _hsv_data, + 'jet': _jet_data, + 'nipy_spectral': _nipy_spectral_data, + 'ocean': _ocean_data, + 'pink': _pink_data, + 'prism': _prism_data, + 'rainbow': _rainbow_data, + 'seismic': _seismic_data, + 'spring': _spring_data, + 'summer': _summer_data, + 'terrain': _terrain_data, + 'winter': _winter_data, + # Qualitative + 'Accent': {'listed': _Accent_data}, + 'Dark2': {'listed': _Dark2_data}, + 'Paired': {'listed': _Paired_data}, + 'Pastel1': {'listed': _Pastel1_data}, + 'Pastel2': {'listed': _Pastel2_data}, + 'Set1': {'listed': _Set1_data}, + 'Set2': {'listed': _Set2_data}, + 'Set3': {'listed': _Set3_data}, + 'tab10': {'listed': _tab10_data}, + 'tab20': {'listed': _tab20_data}, + 'tab20b': {'listed': _tab20b_data}, + 'tab20c': {'listed': _tab20c_data}, +} diff --git a/.venv/lib/python3.9/site-packages/matplotlib/_cm_listed.py b/.venv/lib/python3.9/site-packages/matplotlib/_cm_listed.py new file mode 100644 index 00000000..a331ad74 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/matplotlib/_cm_listed.py @@ -0,0 +1,2071 @@ +from .colors import ListedColormap + +_magma_data = [[0.001462, 0.000466, 0.013866], + [0.002258, 0.001295, 0.018331], + [0.003279, 0.002305, 0.023708], + [0.004512, 0.003490, 0.029965], + [0.005950, 0.004843, 0.037130], + [0.007588, 0.006356, 0.044973], + [0.009426, 0.008022, 0.052844], + [0.011465, 0.009828, 0.060750], + [0.013708, 0.011771, 0.068667], + [0.016156, 0.013840, 0.076603], + [0.018815, 0.016026, 0.084584], + [0.021692, 0.018320, 0.092610], + [0.024792, 0.020715, 0.100676], + [0.028123, 0.023201, 0.108787], + [0.031696, 0.025765, 0.116965], + [0.035520, 0.028397, 0.125209], + [0.039608, 0.031090, 0.133515], + [0.043830, 0.033830, 0.141886], + [0.048062, 0.036607, 0.150327], + [0.052320, 0.039407, 0.158841], + [0.056615, 0.042160, 0.167446], + [0.060949, 0.044794, 0.176129], + [0.065330, 0.047318, 0.184892], + [0.069764, 0.049726, 0.193735], + [0.074257, 0.052017, 0.202660], + [0.078815, 0.054184, 0.211667], + [0.083446, 0.056225, 0.220755], + [0.088155, 0.058133, 0.229922], + [0.092949, 0.059904, 0.239164], + [0.097833, 0.061531, 0.248477], + [0.102815, 0.063010, 0.257854], + [0.107899, 0.064335, 0.267289], + [0.113094, 0.065492, 0.276784], + [0.118405, 0.066479, 0.286321], + [0.123833, 0.067295, 0.295879], + [0.129380, 0.067935, 0.305443], + [0.135053, 0.068391, 0.315000], + [0.140858, 0.068654, 0.324538], + [0.146785, 0.068738, 0.334011], + [0.152839, 0.068637, 0.343404], + [0.159018, 0.068354, 0.352688], + [0.165308, 0.067911, 0.361816], + [0.171713, 0.067305, 0.370771], + [0.178212, 0.066576, 0.379497], + [0.184801, 0.065732, 0.387973], + [0.191460, 0.064818, 0.396152], + [0.198177, 0.063862, 0.404009], + [0.204935, 0.062907, 0.411514], + [0.211718, 0.061992, 0.418647], + [0.218512, 0.061158, 0.425392], + [0.225302, 0.060445, 0.431742], + [0.232077, 0.059889, 0.437695], + [0.238826, 0.059517, 0.443256], + [0.245543, 0.059352, 0.448436], + [0.252220, 0.059415, 0.453248], + [0.258857, 0.059706, 0.457710], + [0.265447, 0.060237, 0.461840], + [0.271994, 0.060994, 0.465660], + [0.278493, 0.061978, 0.469190], + [0.284951, 0.063168, 0.472451], + [0.291366, 0.064553, 0.475462], + [0.297740, 0.066117, 0.478243], + [0.304081, 0.067835, 0.480812], + [0.310382, 0.069702, 0.483186], + [0.316654, 0.071690, 0.485380], + [0.322899, 0.073782, 0.487408], + [0.329114, 0.075972, 0.489287], + [0.335308, 0.078236, 0.491024], + [0.341482, 0.080564, 0.492631], + [0.347636, 0.082946, 0.494121], + [0.353773, 0.085373, 0.495501], + [0.359898, 0.087831, 0.496778], + [0.366012, 0.090314, 0.497960], + [0.372116, 0.092816, 0.499053], + [0.378211, 0.095332, 0.500067], + [0.384299, 0.097855, 0.501002], + [0.390384, 0.100379, 0.501864], + [0.396467, 0.102902, 0.502658], + [0.402548, 0.105420, 0.503386], + [0.408629, 0.107930, 0.504052], + [0.414709, 0.110431, 0.504662], + [0.420791, 0.112920, 0.505215], + [0.426877, 0.115395, 0.505714], + [0.432967, 0.117855, 0.506160], + [0.439062, 0.120298, 0.506555], + [0.445163, 0.122724, 0.506901], + [0.451271, 0.125132, 0.507198], + [0.457386, 0.127522, 0.507448], + [0.463508, 0.129893, 0.507652], + [0.469640, 0.132245, 0.507809], + [0.475780, 0.134577, 0.507921], + [0.481929, 0.136891, 0.507989], + [0.488088, 0.139186, 0.508011], + [0.494258, 0.141462, 0.507988], + [0.500438, 0.143719, 0.507920], + [0.506629, 0.145958, 0.507806], + [0.512831, 0.148179, 0.507648], + [0.519045, 0.150383, 0.507443], + [0.525270, 0.152569, 0.507192], + [0.531507, 0.154739, 0.506895], + [0.537755, 0.156894, 0.506551], + [0.544015, 0.159033, 0.506159], + [0.550287, 0.161158, 0.505719], + [0.556571, 0.163269, 0.505230], + [0.562866, 0.165368, 0.504692], + [0.569172, 0.167454, 0.504105], + [0.575490, 0.169530, 0.503466], + [0.581819, 0.171596, 0.502777], + [0.588158, 0.173652, 0.502035], + [0.594508, 0.175701, 0.501241], + [0.600868, 0.177743, 0.500394], + [0.607238, 0.179779, 0.499492], + [0.613617, 0.181811, 0.498536], + [0.620005, 0.183840, 0.497524], + [0.626401, 0.185867, 0.496456], + [0.632805, 0.187893, 0.495332], + [0.639216, 0.189921, 0.494150], + [0.645633, 0.191952, 0.492910], + [0.652056, 0.193986, 0.491611], + [0.658483, 0.196027, 0.490253], + [0.664915, 0.198075, 0.488836], + [0.671349, 0.200133, 0.487358], + [0.677786, 0.202203, 0.485819], + [0.684224, 0.204286, 0.484219], + [0.690661, 0.206384, 0.482558], + [0.697098, 0.208501, 0.480835], + [0.703532, 0.210638, 0.479049], + [0.709962, 0.212797, 0.477201], + [0.716387, 0.214982, 0.475290], + [0.722805, 0.217194, 0.473316], + [0.729216, 0.219437, 0.471279], + [0.735616, 0.221713, 0.469180], + [0.742004, 0.224025, 0.467018], + [0.748378, 0.226377, 0.464794], + [0.754737, 0.228772, 0.462509], + [0.761077, 0.231214, 0.460162], + [0.767398, 0.233705, 0.457755], + [0.773695, 0.236249, 0.455289], + [0.779968, 0.238851, 0.452765], + [0.786212, 0.241514, 0.450184], + [0.792427, 0.244242, 0.447543], + [0.798608, 0.247040, 0.444848], + [0.804752, 0.249911, 0.442102], + [0.810855, 0.252861, 0.439305], + [0.816914, 0.255895, 0.436461], + [0.822926, 0.259016, 0.433573], + [0.828886, 0.262229, 0.430644], + [0.834791, 0.265540, 0.427671], + [0.840636, 0.268953, 0.424666], + [0.846416, 0.272473, 0.421631], + [0.852126, 0.276106, 0.418573], + [0.857763, 0.279857, 0.415496], + [0.863320, 0.283729, 0.412403], + [0.868793, 0.287728, 0.409303], + [0.874176, 0.291859, 0.406205], + [0.879464, 0.296125, 0.403118], + [0.884651, 0.300530, 0.400047], + [0.889731, 0.305079, 0.397002], + [0.894700, 0.309773, 0.393995], + [0.899552, 0.314616, 0.391037], + [0.904281, 0.319610, 0.388137], + [0.908884, 0.324755, 0.385308], + [0.913354, 0.330052, 0.382563], + [0.917689, 0.335500, 0.379915], + [0.921884, 0.341098, 0.377376], + [0.925937, 0.346844, 0.374959], + [0.929845, 0.352734, 0.372677], + [0.933606, 0.358764, 0.370541], + [0.937221, 0.364929, 0.368567], + [0.940687, 0.371224, 0.366762], + [0.944006, 0.377643, 0.365136], + [0.947180, 0.384178, 0.363701], + [0.950210, 0.390820, 0.362468], + [0.953099, 0.397563, 0.361438], + [0.955849, 0.404400, 0.360619], + [0.958464, 0.411324, 0.360014], + [0.960949, 0.418323, 0.359630], + [0.963310, 0.425390, 0.359469], + [0.965549, 0.432519, 0.359529], + [0.967671, 0.439703, 0.359810], + [0.969680, 0.446936, 0.360311], + [0.971582, 0.454210, 0.361030], + [0.973381, 0.461520, 0.361965], + [0.975082, 0.468861, 0.363111], + [0.976690, 0.476226, 0.364466], + [0.978210, 0.483612, 0.366025], + [0.979645, 0.491014, 0.367783], + [0.981000, 0.498428, 0.369734], + [0.982279, 0.505851, 0.371874], + [0.983485, 0.513280, 0.374198], + [0.984622, 0.520713, 0.376698], + [0.985693, 0.528148, 0.379371], + [0.986700, 0.535582, 0.382210], + [0.987646, 0.543015, 0.385210], + [0.988533, 0.550446, 0.388365], + [0.989363, 0.557873, 0.391671], + [0.990138, 0.565296, 0.395122], + [0.990871, 0.572706, 0.398714], + [0.991558, 0.580107, 0.402441], + [0.992196, 0.587502, 0.406299], + [0.992785, 0.594891, 0.410283], + [0.993326, 0.602275, 0.414390], + [0.993834, 0.609644, 0.418613], + [0.994309, 0.616999, 0.422950], + [0.994738, 0.624350, 0.427397], + [0.995122, 0.631696, 0.431951], + [0.995480, 0.639027, 0.436607], + [0.995810, 0.646344, 0.441361], + [0.996096, 0.653659, 0.446213], + [0.996341, 0.660969, 0.451160], + [0.996580, 0.668256, 0.456192], + [0.996775, 0.675541, 0.461314], + [0.996925, 0.682828, 0.466526], + [0.997077, 0.690088, 0.471811], + [0.997186, 0.697349, 0.477182], + [0.997254, 0.704611, 0.482635], + [0.997325, 0.711848, 0.488154], + [0.997351, 0.719089, 0.493755], + [0.997351, 0.726324, 0.499428], + [0.997341, 0.733545, 0.505167], + [0.997285, 0.740772, 0.510983], + [0.997228, 0.747981, 0.516859], + [0.997138, 0.755190, 0.522806], + [0.997019, 0.762398, 0.528821], + [0.996898, 0.769591, 0.534892], + [0.996727, 0.776795, 0.541039], + [0.996571, 0.783977, 0.547233], + [0.996369, 0.791167, 0.553499], + [0.996162, 0.798348, 0.559820], + [0.995932, 0.805527, 0.566202], + [0.995680, 0.812706, 0.572645], + [0.995424, 0.819875, 0.579140], + [0.995131, 0.827052, 0.585701], + [0.994851, 0.834213, 0.592307], + [0.994524, 0.841387, 0.598983], + [0.994222, 0.848540, 0.605696], + [0.993866, 0.855711, 0.612482], + [0.993545, 0.862859, 0.619299], + [0.993170, 0.870024, 0.626189], + [0.992831, 0.877168, 0.633109], + [0.992440, 0.884330, 0.640099], + [0.992089, 0.891470, 0.647116], + [0.991688, 0.898627, 0.654202], + [0.991332, 0.905763, 0.661309], + [0.990930, 0.912915, 0.668481], + [0.990570, 0.920049, 0.675675], + [0.990175, 0.927196, 0.682926], + [0.989815, 0.934329, 0.690198], + [0.989434, 0.941470, 0.697519], + [0.989077, 0.948604, 0.704863], + [0.988717, 0.955742, 0.712242], + [0.988367, 0.962878, 0.719649], + [0.988033, 0.970012, 0.727077], + [0.987691, 0.977154, 0.734536], + [0.987387, 0.984288, 0.742002], + [0.987053, 0.991438, 0.749504]] + +_inferno_data = [[0.001462, 0.000466, 0.013866], + [0.002267, 0.001270, 0.018570], + [0.003299, 0.002249, 0.024239], + [0.004547, 0.003392, 0.030909], + [0.006006, 0.004692, 0.038558], + [0.007676, 0.006136, 0.046836], + [0.009561, 0.007713, 0.055143], + [0.011663, 0.009417, 0.063460], + [0.013995, 0.011225, 0.071862], + [0.016561, 0.013136, 0.080282], + [0.019373, 0.015133, 0.088767], + [0.022447, 0.017199, 0.097327], + [0.025793, 0.019331, 0.105930], + [0.029432, 0.021503, 0.114621], + [0.033385, 0.023702, 0.123397], + [0.037668, 0.025921, 0.132232], + [0.042253, 0.028139, 0.141141], + [0.046915, 0.030324, 0.150164], + [0.051644, 0.032474, 0.159254], + [0.056449, 0.034569, 0.168414], + [0.061340, 0.036590, 0.177642], + [0.066331, 0.038504, 0.186962], + [0.071429, 0.040294, 0.196354], + [0.076637, 0.041905, 0.205799], + [0.081962, 0.043328, 0.215289], + [0.087411, 0.044556, 0.224813], + [0.092990, 0.045583, 0.234358], + [0.098702, 0.046402, 0.243904], + [0.104551, 0.047008, 0.253430], + [0.110536, 0.047399, 0.262912], + [0.116656, 0.047574, 0.272321], + [0.122908, 0.047536, 0.281624], + [0.129285, 0.047293, 0.290788], + [0.135778, 0.046856, 0.299776], + [0.142378, 0.046242, 0.308553], + [0.149073, 0.045468, 0.317085], + [0.155850, 0.044559, 0.325338], + [0.162689, 0.043554, 0.333277], + [0.169575, 0.042489, 0.340874], + [0.176493, 0.041402, 0.348111], + [0.183429, 0.040329, 0.354971], + [0.190367, 0.039309, 0.361447], + [0.197297, 0.038400, 0.367535], + [0.204209, 0.037632, 0.373238], + [0.211095, 0.037030, 0.378563], + [0.217949, 0.036615, 0.383522], + [0.224763, 0.036405, 0.388129], + [0.231538, 0.036405, 0.392400], + [0.238273, 0.036621, 0.396353], + [0.244967, 0.037055, 0.400007], + [0.251620, 0.037705, 0.403378], + [0.258234, 0.038571, 0.406485], + [0.264810, 0.039647, 0.409345], + [0.271347, 0.040922, 0.411976], + [0.277850, 0.042353, 0.414392], + [0.284321, 0.043933, 0.416608], + [0.290763, 0.045644, 0.418637], + [0.297178, 0.047470, 0.420491], + [0.303568, 0.049396, 0.422182], + [0.309935, 0.051407, 0.423721], + [0.316282, 0.053490, 0.425116], + [0.322610, 0.055634, 0.426377], + [0.328921, 0.057827, 0.427511], + [0.335217, 0.060060, 0.428524], + [0.341500, 0.062325, 0.429425], + [0.347771, 0.064616, 0.430217], + [0.354032, 0.066925, 0.430906], + [0.360284, 0.069247, 0.431497], + [0.366529, 0.071579, 0.431994], + [0.372768, 0.073915, 0.432400], + [0.379001, 0.076253, 0.432719], + [0.385228, 0.078591, 0.432955], + [0.391453, 0.080927, 0.433109], + [0.397674, 0.083257, 0.433183], + [0.403894, 0.085580, 0.433179], + [0.410113, 0.087896, 0.433098], + [0.416331, 0.090203, 0.432943], + [0.422549, 0.092501, 0.432714], + [0.428768, 0.094790, 0.432412], + [0.434987, 0.097069, 0.432039], + [0.441207, 0.099338, 0.431594], + [0.447428, 0.101597, 0.431080], + [0.453651, 0.103848, 0.430498], + [0.459875, 0.106089, 0.429846], + [0.466100, 0.108322, 0.429125], + [0.472328, 0.110547, 0.428334], + [0.478558, 0.112764, 0.427475], + [0.484789, 0.114974, 0.426548], + [0.491022, 0.117179, 0.425552], + [0.497257, 0.119379, 0.424488], + [0.503493, 0.121575, 0.423356], + [0.509730, 0.123769, 0.422156], + [0.515967, 0.125960, 0.420887], + [0.522206, 0.128150, 0.419549], + [0.528444, 0.130341, 0.418142], + [0.534683, 0.132534, 0.416667], + [0.540920, 0.134729, 0.415123], + [0.547157, 0.136929, 0.413511], + [0.553392, 0.139134, 0.411829], + [0.559624, 0.141346, 0.410078], + [0.565854, 0.143567, 0.408258], + [0.572081, 0.145797, 0.406369], + [0.578304, 0.148039, 0.404411], + [0.584521, 0.150294, 0.402385], + [0.590734, 0.152563, 0.400290], + [0.596940, 0.154848, 0.398125], + [0.603139, 0.157151, 0.395891], + [0.609330, 0.159474, 0.393589], + [0.615513, 0.161817, 0.391219], + [0.621685, 0.164184, 0.388781], + [0.627847, 0.166575, 0.386276], + [0.633998, 0.168992, 0.383704], + [0.640135, 0.171438, 0.381065], + [0.646260, 0.173914, 0.378359], + [0.652369, 0.176421, 0.375586], + [0.658463, 0.178962, 0.372748], + [0.664540, 0.181539, 0.369846], + [0.670599, 0.184153, 0.366879], + [0.676638, 0.186807, 0.363849], + [0.682656, 0.189501, 0.360757], + [0.688653, 0.192239, 0.357603], + [0.694627, 0.195021, 0.354388], + [0.700576, 0.197851, 0.351113], + [0.706500, 0.200728, 0.347777], + [0.712396, 0.203656, 0.344383], + [0.718264, 0.206636, 0.340931], + [0.724103, 0.209670, 0.337424], + [0.729909, 0.212759, 0.333861], + [0.735683, 0.215906, 0.330245], + [0.741423, 0.219112, 0.326576], + [0.747127, 0.222378, 0.322856], + [0.752794, 0.225706, 0.319085], + [0.758422, 0.229097, 0.315266], + [0.764010, 0.232554, 0.311399], + [0.769556, 0.236077, 0.307485], + [0.775059, 0.239667, 0.303526], + [0.780517, 0.243327, 0.299523], + [0.785929, 0.247056, 0.295477], + [0.791293, 0.250856, 0.291390], + [0.796607, 0.254728, 0.287264], + [0.801871, 0.258674, 0.283099], + [0.807082, 0.262692, 0.278898], + [0.812239, 0.266786, 0.274661], + [0.817341, 0.270954, 0.270390], + [0.822386, 0.275197, 0.266085], + [0.827372, 0.279517, 0.261750], + [0.832299, 0.283913, 0.257383], + [0.837165, 0.288385, 0.252988], + [0.841969, 0.292933, 0.248564], + [0.846709, 0.297559, 0.244113], + [0.851384, 0.302260, 0.239636], + [0.855992, 0.307038, 0.235133], + [0.860533, 0.311892, 0.230606], + [0.865006, 0.316822, 0.226055], + [0.869409, 0.321827, 0.221482], + [0.873741, 0.326906, 0.216886], + [0.878001, 0.332060, 0.212268], + [0.882188, 0.337287, 0.207628], + [0.886302, 0.342586, 0.202968], + [0.890341, 0.347957, 0.198286], + [0.894305, 0.353399, 0.193584], + [0.898192, 0.358911, 0.188860], + [0.902003, 0.364492, 0.184116], + [0.905735, 0.370140, 0.179350], + [0.909390, 0.375856, 0.174563], + [0.912966, 0.381636, 0.169755], + [0.916462, 0.387481, 0.164924], + [0.919879, 0.393389, 0.160070], + [0.923215, 0.399359, 0.155193], + [0.926470, 0.405389, 0.150292], + [0.929644, 0.411479, 0.145367], + [0.932737, 0.417627, 0.140417], + [0.935747, 0.423831, 0.135440], + [0.938675, 0.430091, 0.130438], + [0.941521, 0.436405, 0.125409], + [0.944285, 0.442772, 0.120354], + [0.946965, 0.449191, 0.115272], + [0.949562, 0.455660, 0.110164], + [0.952075, 0.462178, 0.105031], + [0.954506, 0.468744, 0.099874], + [0.956852, 0.475356, 0.094695], + [0.959114, 0.482014, 0.089499], + [0.961293, 0.488716, 0.084289], + [0.963387, 0.495462, 0.079073], + [0.965397, 0.502249, 0.073859], + [0.967322, 0.509078, 0.068659], + [0.969163, 0.515946, 0.063488], + [0.970919, 0.522853, 0.058367], + [0.972590, 0.529798, 0.053324], + [0.974176, 0.536780, 0.048392], + [0.975677, 0.543798, 0.043618], + [0.977092, 0.550850, 0.039050], + [0.978422, 0.557937, 0.034931], + [0.979666, 0.565057, 0.031409], + [0.980824, 0.572209, 0.028508], + [0.981895, 0.579392, 0.026250], + [0.982881, 0.586606, 0.024661], + [0.983779, 0.593849, 0.023770], + [0.984591, 0.601122, 0.023606], + [0.985315, 0.608422, 0.024202], + [0.985952, 0.615750, 0.025592], + [0.986502, 0.623105, 0.027814], + [0.986964, 0.630485, 0.030908], + [0.987337, 0.637890, 0.034916], + [0.987622, 0.645320, 0.039886], + [0.987819, 0.652773, 0.045581], + [0.987926, 0.660250, 0.051750], + [0.987945, 0.667748, 0.058329], + [0.987874, 0.675267, 0.065257], + [0.987714, 0.682807, 0.072489], + [0.987464, 0.690366, 0.079990], + [0.987124, 0.697944, 0.087731], + [0.986694, 0.705540, 0.095694], + [0.986175, 0.713153, 0.103863], + [0.985566, 0.720782, 0.112229], + [0.984865, 0.728427, 0.120785], + [0.984075, 0.736087, 0.129527], + [0.983196, 0.743758, 0.138453], + [0.982228, 0.751442, 0.147565], + [0.981173, 0.759135, 0.156863], + [0.980032, 0.766837, 0.166353], + [0.978806, 0.774545, 0.176037], + [0.977497, 0.782258, 0.185923], + [0.976108, 0.789974, 0.196018], + [0.974638, 0.797692, 0.206332], + [0.973088, 0.805409, 0.216877], + [0.971468, 0.813122, 0.227658], + [0.969783, 0.820825, 0.238686], + [0.968041, 0.828515, 0.249972], + [0.966243, 0.836191, 0.261534], + [0.964394, 0.843848, 0.273391], + [0.962517, 0.851476, 0.285546], + [0.960626, 0.859069, 0.298010], + [0.958720, 0.866624, 0.310820], + [0.956834, 0.874129, 0.323974], + [0.954997, 0.881569, 0.337475], + [0.953215, 0.888942, 0.351369], + [0.951546, 0.896226, 0.365627], + [0.950018, 0.903409, 0.380271], + [0.948683, 0.910473, 0.395289], + [0.947594, 0.917399, 0.410665], + [0.946809, 0.924168, 0.426373], + [0.946392, 0.930761, 0.442367], + [0.946403, 0.937159, 0.458592], + [0.946903, 0.943348, 0.474970], + [0.947937, 0.949318, 0.491426], + [0.949545, 0.955063, 0.507860], + [0.951740, 0.960587, 0.524203], + [0.954529, 0.965896, 0.540361], + [0.957896, 0.971003, 0.556275], + [0.961812, 0.975924, 0.571925], + [0.966249, 0.980678, 0.587206], + [0.971162, 0.985282, 0.602154], + [0.976511, 0.989753, 0.616760], + [0.982257, 0.994109, 0.631017], + [0.988362, 0.998364, 0.644924]] + +_plasma_data = [[0.050383, 0.029803, 0.527975], + [0.063536, 0.028426, 0.533124], + [0.075353, 0.027206, 0.538007], + [0.086222, 0.026125, 0.542658], + [0.096379, 0.025165, 0.547103], + [0.105980, 0.024309, 0.551368], + [0.115124, 0.023556, 0.555468], + [0.123903, 0.022878, 0.559423], + [0.132381, 0.022258, 0.563250], + [0.140603, 0.021687, 0.566959], + [0.148607, 0.021154, 0.570562], + [0.156421, 0.020651, 0.574065], + [0.164070, 0.020171, 0.577478], + [0.171574, 0.019706, 0.580806], + [0.178950, 0.019252, 0.584054], + [0.186213, 0.018803, 0.587228], + [0.193374, 0.018354, 0.590330], + [0.200445, 0.017902, 0.593364], + [0.207435, 0.017442, 0.596333], + [0.214350, 0.016973, 0.599239], + [0.221197, 0.016497, 0.602083], + [0.227983, 0.016007, 0.604867], + [0.234715, 0.015502, 0.607592], + [0.241396, 0.014979, 0.610259], + [0.248032, 0.014439, 0.612868], + [0.254627, 0.013882, 0.615419], + [0.261183, 0.013308, 0.617911], + [0.267703, 0.012716, 0.620346], + [0.274191, 0.012109, 0.622722], + [0.280648, 0.011488, 0.625038], + [0.287076, 0.010855, 0.627295], + [0.293478, 0.010213, 0.629490], + [0.299855, 0.009561, 0.631624], + [0.306210, 0.008902, 0.633694], + [0.312543, 0.008239, 0.635700], + [0.318856, 0.007576, 0.637640], + [0.325150, 0.006915, 0.639512], + [0.331426, 0.006261, 0.641316], + [0.337683, 0.005618, 0.643049], + [0.343925, 0.004991, 0.644710], + [0.350150, 0.004382, 0.646298], + [0.356359, 0.003798, 0.647810], + [0.362553, 0.003243, 0.649245], + [0.368733, 0.002724, 0.650601], + [0.374897, 0.002245, 0.651876], + [0.381047, 0.001814, 0.653068], + [0.387183, 0.001434, 0.654177], + [0.393304, 0.001114, 0.655199], + [0.399411, 0.000859, 0.656133], + [0.405503, 0.000678, 0.656977], + [0.411580, 0.000577, 0.657730], + [0.417642, 0.000564, 0.658390], + [0.423689, 0.000646, 0.658956], + [0.429719, 0.000831, 0.659425], + [0.435734, 0.001127, 0.659797], + [0.441732, 0.001540, 0.660069], + [0.447714, 0.002080, 0.660240], + [0.453677, 0.002755, 0.660310], + [0.459623, 0.003574, 0.660277], + [0.465550, 0.004545, 0.660139], + [0.471457, 0.005678, 0.659897], + [0.477344, 0.006980, 0.659549], + [0.483210, 0.008460, 0.659095], + [0.489055, 0.010127, 0.658534], + [0.494877, 0.011990, 0.657865], + [0.500678, 0.014055, 0.657088], + [0.506454, 0.016333, 0.656202], + [0.512206, 0.018833, 0.655209], + [0.517933, 0.021563, 0.654109], + [0.523633, 0.024532, 0.652901], + [0.529306, 0.027747, 0.651586], + [0.534952, 0.031217, 0.650165], + [0.540570, 0.034950, 0.648640], + [0.546157, 0.038954, 0.647010], + [0.551715, 0.043136, 0.645277], + [0.557243, 0.047331, 0.643443], + [0.562738, 0.051545, 0.641509], + [0.568201, 0.055778, 0.639477], + [0.573632, 0.060028, 0.637349], + [0.579029, 0.064296, 0.635126], + [0.584391, 0.068579, 0.632812], + [0.589719, 0.072878, 0.630408], + [0.595011, 0.077190, 0.627917], + [0.600266, 0.081516, 0.625342], + [0.605485, 0.085854, 0.622686], + [0.610667, 0.090204, 0.619951], + [0.615812, 0.094564, 0.617140], + [0.620919, 0.098934, 0.614257], + [0.625987, 0.103312, 0.611305], + [0.631017, 0.107699, 0.608287], + [0.636008, 0.112092, 0.605205], + [0.640959, 0.116492, 0.602065], + [0.645872, 0.120898, 0.598867], + [0.650746, 0.125309, 0.595617], + [0.655580, 0.129725, 0.592317], + [0.660374, 0.134144, 0.588971], + [0.665129, 0.138566, 0.585582], + [0.669845, 0.142992, 0.582154], + [0.674522, 0.147419, 0.578688], + [0.679160, 0.151848, 0.575189], + [0.683758, 0.156278, 0.571660], + [0.688318, 0.160709, 0.568103], + [0.692840, 0.165141, 0.564522], + [0.697324, 0.169573, 0.560919], + [0.701769, 0.174005, 0.557296], + [0.706178, 0.178437, 0.553657], + [0.710549, 0.182868, 0.550004], + [0.714883, 0.187299, 0.546338], + [0.719181, 0.191729, 0.542663], + [0.723444, 0.196158, 0.538981], + [0.727670, 0.200586, 0.535293], + [0.731862, 0.205013, 0.531601], + [0.736019, 0.209439, 0.527908], + [0.740143, 0.213864, 0.524216], + [0.744232, 0.218288, 0.520524], + [0.748289, 0.222711, 0.516834], + [0.752312, 0.227133, 0.513149], + [0.756304, 0.231555, 0.509468], + [0.760264, 0.235976, 0.505794], + [0.764193, 0.240396, 0.502126], + [0.768090, 0.244817, 0.498465], + [0.771958, 0.249237, 0.494813], + [0.775796, 0.253658, 0.491171], + [0.779604, 0.258078, 0.487539], + [0.783383, 0.262500, 0.483918], + [0.787133, 0.266922, 0.480307], + [0.790855, 0.271345, 0.476706], + [0.794549, 0.275770, 0.473117], + [0.798216, 0.280197, 0.469538], + [0.801855, 0.284626, 0.465971], + [0.805467, 0.289057, 0.462415], + [0.809052, 0.293491, 0.458870], + [0.812612, 0.297928, 0.455338], + [0.816144, 0.302368, 0.451816], + [0.819651, 0.306812, 0.448306], + [0.823132, 0.311261, 0.444806], + [0.826588, 0.315714, 0.441316], + [0.830018, 0.320172, 0.437836], + [0.833422, 0.324635, 0.434366], + [0.836801, 0.329105, 0.430905], + [0.840155, 0.333580, 0.427455], + [0.843484, 0.338062, 0.424013], + [0.846788, 0.342551, 0.420579], + [0.850066, 0.347048, 0.417153], + [0.853319, 0.351553, 0.413734], + [0.856547, 0.356066, 0.410322], + [0.859750, 0.360588, 0.406917], + [0.862927, 0.365119, 0.403519], + [0.866078, 0.369660, 0.400126], + [0.869203, 0.374212, 0.396738], + [0.872303, 0.378774, 0.393355], + [0.875376, 0.383347, 0.389976], + [0.878423, 0.387932, 0.386600], + [0.881443, 0.392529, 0.383229], + [0.884436, 0.397139, 0.379860], + [0.887402, 0.401762, 0.376494], + [0.890340, 0.406398, 0.373130], + [0.893250, 0.411048, 0.369768], + [0.896131, 0.415712, 0.366407], + [0.898984, 0.420392, 0.363047], + [0.901807, 0.425087, 0.359688], + [0.904601, 0.429797, 0.356329], + [0.907365, 0.434524, 0.352970], + [0.910098, 0.439268, 0.349610], + [0.912800, 0.444029, 0.346251], + [0.915471, 0.448807, 0.342890], + [0.918109, 0.453603, 0.339529], + [0.920714, 0.458417, 0.336166], + [0.923287, 0.463251, 0.332801], + [0.925825, 0.468103, 0.329435], + [0.928329, 0.472975, 0.326067], + [0.930798, 0.477867, 0.322697], + [0.933232, 0.482780, 0.319325], + [0.935630, 0.487712, 0.315952], + [0.937990, 0.492667, 0.312575], + [0.940313, 0.497642, 0.309197], + [0.942598, 0.502639, 0.305816], + [0.944844, 0.507658, 0.302433], + [0.947051, 0.512699, 0.299049], + [0.949217, 0.517763, 0.295662], + [0.951344, 0.522850, 0.292275], + [0.953428, 0.527960, 0.288883], + [0.955470, 0.533093, 0.285490], + [0.957469, 0.538250, 0.282096], + [0.959424, 0.543431, 0.278701], + [0.961336, 0.548636, 0.275305], + [0.963203, 0.553865, 0.271909], + [0.965024, 0.559118, 0.268513], + [0.966798, 0.564396, 0.265118], + [0.968526, 0.569700, 0.261721], + [0.970205, 0.575028, 0.258325], + [0.971835, 0.580382, 0.254931], + [0.973416, 0.585761, 0.251540], + [0.974947, 0.591165, 0.248151], + [0.976428, 0.596595, 0.244767], + [0.977856, 0.602051, 0.241387], + [0.979233, 0.607532, 0.238013], + [0.980556, 0.613039, 0.234646], + [0.981826, 0.618572, 0.231287], + [0.983041, 0.624131, 0.227937], + [0.984199, 0.629718, 0.224595], + [0.985301, 0.635330, 0.221265], + [0.986345, 0.640969, 0.217948], + [0.987332, 0.646633, 0.214648], + [0.988260, 0.652325, 0.211364], + [0.989128, 0.658043, 0.208100], + [0.989935, 0.663787, 0.204859], + [0.990681, 0.669558, 0.201642], + [0.991365, 0.675355, 0.198453], + [0.991985, 0.681179, 0.195295], + [0.992541, 0.687030, 0.192170], + [0.993032, 0.692907, 0.189084], + [0.993456, 0.698810, 0.186041], + [0.993814, 0.704741, 0.183043], + [0.994103, 0.710698, 0.180097], + [0.994324, 0.716681, 0.177208], + [0.994474, 0.722691, 0.174381], + [0.994553, 0.728728, 0.171622], + [0.994561, 0.734791, 0.168938], + [0.994495, 0.740880, 0.166335], + [0.994355, 0.746995, 0.163821], + [0.994141, 0.753137, 0.161404], + [0.993851, 0.759304, 0.159092], + [0.993482, 0.765499, 0.156891], + [0.993033, 0.771720, 0.154808], + [0.992505, 0.777967, 0.152855], + [0.991897, 0.784239, 0.151042], + [0.991209, 0.790537, 0.149377], + [0.990439, 0.796859, 0.147870], + [0.989587, 0.803205, 0.146529], + [0.988648, 0.809579, 0.145357], + [0.987621, 0.815978, 0.144363], + [0.986509, 0.822401, 0.143557], + [0.985314, 0.828846, 0.142945], + [0.984031, 0.835315, 0.142528], + [0.982653, 0.841812, 0.142303], + [0.981190, 0.848329, 0.142279], + [0.979644, 0.854866, 0.142453], + [0.977995, 0.861432, 0.142808], + [0.976265, 0.868016, 0.143351], + [0.974443, 0.874622, 0.144061], + [0.972530, 0.881250, 0.144923], + [0.970533, 0.887896, 0.145919], + [0.968443, 0.894564, 0.147014], + [0.966271, 0.901249, 0.148180], + [0.964021, 0.907950, 0.149370], + [0.961681, 0.914672, 0.150520], + [0.959276, 0.921407, 0.151566], + [0.956808, 0.928152, 0.152409], + [0.954287, 0.934908, 0.152921], + [0.951726, 0.941671, 0.152925], + [0.949151, 0.948435, 0.152178], + [0.946602, 0.955190, 0.150328], + [0.944152, 0.961916, 0.146861], + [0.941896, 0.968590, 0.140956], + [0.940015, 0.975158, 0.131326]] + +_viridis_data = [[0.267004, 0.004874, 0.329415], + [0.268510, 0.009605, 0.335427], + [0.269944, 0.014625, 0.341379], + [0.271305, 0.019942, 0.347269], + [0.272594, 0.025563, 0.353093], + [0.273809, 0.031497, 0.358853], + [0.274952, 0.037752, 0.364543], + [0.276022, 0.044167, 0.370164], + [0.277018, 0.050344, 0.375715], + [0.277941, 0.056324, 0.381191], + [0.278791, 0.062145, 0.386592], + [0.279566, 0.067836, 0.391917], + [0.280267, 0.073417, 0.397163], + [0.280894, 0.078907, 0.402329], + [0.281446, 0.084320, 0.407414], + [0.281924, 0.089666, 0.412415], + [0.282327, 0.094955, 0.417331], + [0.282656, 0.100196, 0.422160], + [0.282910, 0.105393, 0.426902], + [0.283091, 0.110553, 0.431554], + [0.283197, 0.115680, 0.436115], + [0.283229, 0.120777, 0.440584], + [0.283187, 0.125848, 0.444960], + [0.283072, 0.130895, 0.449241], + [0.282884, 0.135920, 0.453427], + [0.282623, 0.140926, 0.457517], + [0.282290, 0.145912, 0.461510], + [0.281887, 0.150881, 0.465405], + [0.281412, 0.155834, 0.469201], + [0.280868, 0.160771, 0.472899], + [0.280255, 0.165693, 0.476498], + [0.279574, 0.170599, 0.479997], + [0.278826, 0.175490, 0.483397], + [0.278012, 0.180367, 0.486697], + [0.277134, 0.185228, 0.489898], + [0.276194, 0.190074, 0.493001], + [0.275191, 0.194905, 0.496005], + [0.274128, 0.199721, 0.498911], + [0.273006, 0.204520, 0.501721], + [0.271828, 0.209303, 0.504434], + [0.270595, 0.214069, 0.507052], + [0.269308, 0.218818, 0.509577], + [0.267968, 0.223549, 0.512008], + [0.266580, 0.228262, 0.514349], + [0.265145, 0.232956, 0.516599], + [0.263663, 0.237631, 0.518762], + [0.262138, 0.242286, 0.520837], + [0.260571, 0.246922, 0.522828], + [0.258965, 0.251537, 0.524736], + [0.257322, 0.256130, 0.526563], + [0.255645, 0.260703, 0.528312], + [0.253935, 0.265254, 0.529983], + [0.252194, 0.269783, 0.531579], + [0.250425, 0.274290, 0.533103], + [0.248629, 0.278775, 0.534556], + [0.246811, 0.283237, 0.535941], + [0.244972, 0.287675, 0.537260], + [0.243113, 0.292092, 0.538516], + [0.241237, 0.296485, 0.539709], + [0.239346, 0.300855, 0.540844], + [0.237441, 0.305202, 0.541921], + [0.235526, 0.309527, 0.542944], + [0.233603, 0.313828, 0.543914], + [0.231674, 0.318106, 0.544834], + [0.229739, 0.322361, 0.545706], + [0.227802, 0.326594, 0.546532], + [0.225863, 0.330805, 0.547314], + [0.223925, 0.334994, 0.548053], + [0.221989, 0.339161, 0.548752], + [0.220057, 0.343307, 0.549413], + [0.218130, 0.347432, 0.550038], + [0.216210, 0.351535, 0.550627], + [0.214298, 0.355619, 0.551184], + [0.212395, 0.359683, 0.551710], + [0.210503, 0.363727, 0.552206], + [0.208623, 0.367752, 0.552675], + [0.206756, 0.371758, 0.553117], + [0.204903, 0.375746, 0.553533], + [0.203063, 0.379716, 0.553925], + [0.201239, 0.383670, 0.554294], + [0.199430, 0.387607, 0.554642], + [0.197636, 0.391528, 0.554969], + [0.195860, 0.395433, 0.555276], + [0.194100, 0.399323, 0.555565], + [0.192357, 0.403199, 0.555836], + [0.190631, 0.407061, 0.556089], + [0.188923, 0.410910, 0.556326], + [0.187231, 0.414746, 0.556547], + [0.185556, 0.418570, 0.556753], + [0.183898, 0.422383, 0.556944], + [0.182256, 0.426184, 0.557120], + [0.180629, 0.429975, 0.557282], + [0.179019, 0.433756, 0.557430], + [0.177423, 0.437527, 0.557565], + [0.175841, 0.441290, 0.557685], + [0.174274, 0.445044, 0.557792], + [0.172719, 0.448791, 0.557885], + [0.171176, 0.452530, 0.557965], + [0.169646, 0.456262, 0.558030], + [0.168126, 0.459988, 0.558082], + [0.166617, 0.463708, 0.558119], + [0.165117, 0.467423, 0.558141], + [0.163625, 0.471133, 0.558148], + [0.162142, 0.474838, 0.558140], + [0.160665, 0.478540, 0.558115], + [0.159194, 0.482237, 0.558073], + [0.157729, 0.485932, 0.558013], + [0.156270, 0.489624, 0.557936], + [0.154815, 0.493313, 0.557840], + [0.153364, 0.497000, 0.557724], + [0.151918, 0.500685, 0.557587], + [0.150476, 0.504369, 0.557430], + [0.149039, 0.508051, 0.557250], + [0.147607, 0.511733, 0.557049], + [0.146180, 0.515413, 0.556823], + [0.144759, 0.519093, 0.556572], + [0.143343, 0.522773, 0.556295], + [0.141935, 0.526453, 0.555991], + [0.140536, 0.530132, 0.555659], + [0.139147, 0.533812, 0.555298], + [0.137770, 0.537492, 0.554906], + [0.136408, 0.541173, 0.554483], + [0.135066, 0.544853, 0.554029], + [0.133743, 0.548535, 0.553541], + [0.132444, 0.552216, 0.553018], + [0.131172, 0.555899, 0.552459], + [0.129933, 0.559582, 0.551864], + [0.128729, 0.563265, 0.551229], + [0.127568, 0.566949, 0.550556], + [0.126453, 0.570633, 0.549841], + [0.125394, 0.574318, 0.549086], + [0.124395, 0.578002, 0.548287], + [0.123463, 0.581687, 0.547445], + [0.122606, 0.585371, 0.546557], + [0.121831, 0.589055, 0.545623], + [0.121148, 0.592739, 0.544641], + [0.120565, 0.596422, 0.543611], + [0.120092, 0.600104, 0.542530], + [0.119738, 0.603785, 0.541400], + [0.119512, 0.607464, 0.540218], + [0.119423, 0.611141, 0.538982], + [0.119483, 0.614817, 0.537692], + [0.119699, 0.618490, 0.536347], + [0.120081, 0.622161, 0.534946], + [0.120638, 0.625828, 0.533488], + [0.121380, 0.629492, 0.531973], + [0.122312, 0.633153, 0.530398], + [0.123444, 0.636809, 0.528763], + [0.124780, 0.640461, 0.527068], + [0.126326, 0.644107, 0.525311], + [0.128087, 0.647749, 0.523491], + [0.130067, 0.651384, 0.521608], + [0.132268, 0.655014, 0.519661], + [0.134692, 0.658636, 0.517649], + [0.137339, 0.662252, 0.515571], + [0.140210, 0.665859, 0.513427], + [0.143303, 0.669459, 0.511215], + [0.146616, 0.673050, 0.508936], + [0.150148, 0.676631, 0.506589], + [0.153894, 0.680203, 0.504172], + [0.157851, 0.683765, 0.501686], + [0.162016, 0.687316, 0.499129], + [0.166383, 0.690856, 0.496502], + [0.170948, 0.694384, 0.493803], + [0.175707, 0.697900, 0.491033], + [0.180653, 0.701402, 0.488189], + [0.185783, 0.704891, 0.485273], + [0.191090, 0.708366, 0.482284], + [0.196571, 0.711827, 0.479221], + [0.202219, 0.715272, 0.476084], + [0.208030, 0.718701, 0.472873], + [0.214000, 0.722114, 0.469588], + [0.220124, 0.725509, 0.466226], + [0.226397, 0.728888, 0.462789], + [0.232815, 0.732247, 0.459277], + [0.239374, 0.735588, 0.455688], + [0.246070, 0.738910, 0.452024], + [0.252899, 0.742211, 0.448284], + [0.259857, 0.745492, 0.444467], + [0.266941, 0.748751, 0.440573], + [0.274149, 0.751988, 0.436601], + [0.281477, 0.755203, 0.432552], + [0.288921, 0.758394, 0.428426], + [0.296479, 0.761561, 0.424223], + [0.304148, 0.764704, 0.419943], + [0.311925, 0.767822, 0.415586], + [0.319809, 0.770914, 0.411152], + [0.327796, 0.773980, 0.406640], + [0.335885, 0.777018, 0.402049], + [0.344074, 0.780029, 0.397381], + [0.352360, 0.783011, 0.392636], + [0.360741, 0.785964, 0.387814], + [0.369214, 0.788888, 0.382914], + [0.377779, 0.791781, 0.377939], + [0.386433, 0.794644, 0.372886], + [0.395174, 0.797475, 0.367757], + [0.404001, 0.800275, 0.362552], + [0.412913, 0.803041, 0.357269], + [0.421908, 0.805774, 0.351910], + [0.430983, 0.808473, 0.346476], + [0.440137, 0.811138, 0.340967], + [0.449368, 0.813768, 0.335384], + [0.458674, 0.816363, 0.329727], + [0.468053, 0.818921, 0.323998], + [0.477504, 0.821444, 0.318195], + [0.487026, 0.823929, 0.312321], + [0.496615, 0.826376, 0.306377], + [0.506271, 0.828786, 0.300362], + [0.515992, 0.831158, 0.294279], + [0.525776, 0.833491, 0.288127], + [0.535621, 0.835785, 0.281908], + [0.545524, 0.838039, 0.275626], + [0.555484, 0.840254, 0.269281], + [0.565498, 0.842430, 0.262877], + [0.575563, 0.844566, 0.256415], + [0.585678, 0.846661, 0.249897], + [0.595839, 0.848717, 0.243329], + [0.606045, 0.850733, 0.236712], + [0.616293, 0.852709, 0.230052], + [0.626579, 0.854645, 0.223353], + [0.636902, 0.856542, 0.216620], + [0.647257, 0.858400, 0.209861], + [0.657642, 0.860219, 0.203082], + [0.668054, 0.861999, 0.196293], + [0.678489, 0.863742, 0.189503], + [0.688944, 0.865448, 0.182725], + [0.699415, 0.867117, 0.175971], + [0.709898, 0.868751, 0.169257], + [0.720391, 0.870350, 0.162603], + [0.730889, 0.871916, 0.156029], + [0.741388, 0.873449, 0.149561], + [0.751884, 0.874951, 0.143228], + [0.762373, 0.876424, 0.137064], + [0.772852, 0.877868, 0.131109], + [0.783315, 0.879285, 0.125405], + [0.793760, 0.880678, 0.120005], + [0.804182, 0.882046, 0.114965], + [0.814576, 0.883393, 0.110347], + [0.824940, 0.884720, 0.106217], + [0.835270, 0.886029, 0.102646], + [0.845561, 0.887322, 0.099702], + [0.855810, 0.888601, 0.097452], + [0.866013, 0.889868, 0.095953], + [0.876168, 0.891125, 0.095250], + [0.886271, 0.892374, 0.095374], + [0.896320, 0.893616, 0.096335], + [0.906311, 0.894855, 0.098125], + [0.916242, 0.896091, 0.100717], + [0.926106, 0.897330, 0.104071], + [0.935904, 0.898570, 0.108131], + [0.945636, 0.899815, 0.112838], + [0.955300, 0.901065, 0.118128], + [0.964894, 0.902323, 0.123941], + [0.974417, 0.903590, 0.130215], + [0.983868, 0.904867, 0.136897], + [0.993248, 0.906157, 0.143936]] + +_cividis_data = [[0.000000, 0.135112, 0.304751], + [0.000000, 0.138068, 0.311105], + [0.000000, 0.141013, 0.317579], + [0.000000, 0.143951, 0.323982], + [0.000000, 0.146877, 0.330479], + [0.000000, 0.149791, 0.337065], + [0.000000, 0.152673, 0.343704], + [0.000000, 0.155377, 0.350500], + [0.000000, 0.157932, 0.357521], + [0.000000, 0.160495, 0.364534], + [0.000000, 0.163058, 0.371608], + [0.000000, 0.165621, 0.378769], + [0.000000, 0.168204, 0.385902], + [0.000000, 0.170800, 0.393100], + [0.000000, 0.173420, 0.400353], + [0.000000, 0.176082, 0.407577], + [0.000000, 0.178802, 0.414764], + [0.000000, 0.181610, 0.421859], + [0.000000, 0.184550, 0.428802], + [0.000000, 0.186915, 0.435532], + [0.000000, 0.188769, 0.439563], + [0.000000, 0.190950, 0.441085], + [0.000000, 0.193366, 0.441561], + [0.003602, 0.195911, 0.441564], + [0.017852, 0.198528, 0.441248], + [0.032110, 0.201199, 0.440785], + [0.046205, 0.203903, 0.440196], + [0.058378, 0.206629, 0.439531], + [0.068968, 0.209372, 0.438863], + [0.078624, 0.212122, 0.438105], + [0.087465, 0.214879, 0.437342], + [0.095645, 0.217643, 0.436593], + [0.103401, 0.220406, 0.435790], + [0.110658, 0.223170, 0.435067], + [0.117612, 0.225935, 0.434308], + [0.124291, 0.228697, 0.433547], + [0.130669, 0.231458, 0.432840], + [0.136830, 0.234216, 0.432148], + [0.142852, 0.236972, 0.431404], + [0.148638, 0.239724, 0.430752], + [0.154261, 0.242475, 0.430120], + [0.159733, 0.245221, 0.429528], + [0.165113, 0.247965, 0.428908], + [0.170362, 0.250707, 0.428325], + [0.175490, 0.253444, 0.427790], + [0.180503, 0.256180, 0.427299], + [0.185453, 0.258914, 0.426788], + [0.190303, 0.261644, 0.426329], + [0.195057, 0.264372, 0.425924], + [0.199764, 0.267099, 0.425497], + [0.204385, 0.269823, 0.425126], + [0.208926, 0.272546, 0.424809], + [0.213431, 0.275266, 0.424480], + [0.217863, 0.277985, 0.424206], + [0.222264, 0.280702, 0.423914], + [0.226598, 0.283419, 0.423678], + [0.230871, 0.286134, 0.423498], + [0.235120, 0.288848, 0.423304], + [0.239312, 0.291562, 0.423167], + [0.243485, 0.294274, 0.423014], + [0.247605, 0.296986, 0.422917], + [0.251675, 0.299698, 0.422873], + [0.255731, 0.302409, 0.422814], + [0.259740, 0.305120, 0.422810], + [0.263738, 0.307831, 0.422789], + [0.267693, 0.310542, 0.422821], + [0.271639, 0.313253, 0.422837], + [0.275513, 0.315965, 0.422979], + [0.279411, 0.318677, 0.423031], + [0.283240, 0.321390, 0.423211], + [0.287065, 0.324103, 0.423373], + [0.290884, 0.326816, 0.423517], + [0.294669, 0.329531, 0.423716], + [0.298421, 0.332247, 0.423973], + [0.302169, 0.334963, 0.424213], + [0.305886, 0.337681, 0.424512], + [0.309601, 0.340399, 0.424790], + [0.313287, 0.343120, 0.425120], + [0.316941, 0.345842, 0.425512], + [0.320595, 0.348565, 0.425889], + [0.324250, 0.351289, 0.426250], + [0.327875, 0.354016, 0.426670], + [0.331474, 0.356744, 0.427144], + [0.335073, 0.359474, 0.427605], + [0.338673, 0.362206, 0.428053], + [0.342246, 0.364939, 0.428559], + [0.345793, 0.367676, 0.429127], + [0.349341, 0.370414, 0.429685], + [0.352892, 0.373153, 0.430226], + [0.356418, 0.375896, 0.430823], + [0.359916, 0.378641, 0.431501], + [0.363446, 0.381388, 0.432075], + [0.366923, 0.384139, 0.432796], + [0.370430, 0.386890, 0.433428], + [0.373884, 0.389646, 0.434209], + [0.377371, 0.392404, 0.434890], + [0.380830, 0.395164, 0.435653], + [0.384268, 0.397928, 0.436475], + [0.387705, 0.400694, 0.437305], + [0.391151, 0.403464, 0.438096], + [0.394568, 0.406236, 0.438986], + [0.397991, 0.409011, 0.439848], + [0.401418, 0.411790, 0.440708], + [0.404820, 0.414572, 0.441642], + [0.408226, 0.417357, 0.442570], + [0.411607, 0.420145, 0.443577], + [0.414992, 0.422937, 0.444578], + [0.418383, 0.425733, 0.445560], + [0.421748, 0.428531, 0.446640], + [0.425120, 0.431334, 0.447692], + [0.428462, 0.434140, 0.448864], + [0.431817, 0.436950, 0.449982], + [0.435168, 0.439763, 0.451134], + [0.438504, 0.442580, 0.452341], + [0.441810, 0.445402, 0.453659], + [0.445148, 0.448226, 0.454885], + [0.448447, 0.451053, 0.456264], + [0.451759, 0.453887, 0.457582], + [0.455072, 0.456718, 0.458976], + [0.458366, 0.459552, 0.460457], + [0.461616, 0.462405, 0.461969], + [0.464947, 0.465241, 0.463395], + [0.468254, 0.468083, 0.464908], + [0.471501, 0.470960, 0.466357], + [0.474812, 0.473832, 0.467681], + [0.478186, 0.476699, 0.468845], + [0.481622, 0.479573, 0.469767], + [0.485141, 0.482451, 0.470384], + [0.488697, 0.485318, 0.471008], + [0.492278, 0.488198, 0.471453], + [0.495913, 0.491076, 0.471751], + [0.499552, 0.493960, 0.472032], + [0.503185, 0.496851, 0.472305], + [0.506866, 0.499743, 0.472432], + [0.510540, 0.502643, 0.472550], + [0.514226, 0.505546, 0.472640], + [0.517920, 0.508454, 0.472707], + [0.521643, 0.511367, 0.472639], + [0.525348, 0.514285, 0.472660], + [0.529086, 0.517207, 0.472543], + [0.532829, 0.520135, 0.472401], + [0.536553, 0.523067, 0.472352], + [0.540307, 0.526005, 0.472163], + [0.544069, 0.528948, 0.471947], + [0.547840, 0.531895, 0.471704], + [0.551612, 0.534849, 0.471439], + [0.555393, 0.537807, 0.471147], + [0.559181, 0.540771, 0.470829], + [0.562972, 0.543741, 0.470488], + [0.566802, 0.546715, 0.469988], + [0.570607, 0.549695, 0.469593], + [0.574417, 0.552682, 0.469172], + [0.578236, 0.555673, 0.468724], + [0.582087, 0.558670, 0.468118], + [0.585916, 0.561674, 0.467618], + [0.589753, 0.564682, 0.467090], + [0.593622, 0.567697, 0.466401], + [0.597469, 0.570718, 0.465821], + [0.601354, 0.573743, 0.465074], + [0.605211, 0.576777, 0.464441], + [0.609105, 0.579816, 0.463638], + [0.612977, 0.582861, 0.462950], + [0.616852, 0.585913, 0.462237], + [0.620765, 0.588970, 0.461351], + [0.624654, 0.592034, 0.460583], + [0.628576, 0.595104, 0.459641], + [0.632506, 0.598180, 0.458668], + [0.636412, 0.601264, 0.457818], + [0.640352, 0.604354, 0.456791], + [0.644270, 0.607450, 0.455886], + [0.648222, 0.610553, 0.454801], + [0.652178, 0.613664, 0.453689], + [0.656114, 0.616780, 0.452702], + [0.660082, 0.619904, 0.451534], + [0.664055, 0.623034, 0.450338], + [0.668008, 0.626171, 0.449270], + [0.671991, 0.629316, 0.448018], + [0.675981, 0.632468, 0.446736], + [0.679979, 0.635626, 0.445424], + [0.683950, 0.638793, 0.444251], + [0.687957, 0.641966, 0.442886], + [0.691971, 0.645145, 0.441491], + [0.695985, 0.648334, 0.440072], + [0.700008, 0.651529, 0.438624], + [0.704037, 0.654731, 0.437147], + [0.708067, 0.657942, 0.435647], + [0.712105, 0.661160, 0.434117], + [0.716177, 0.664384, 0.432386], + [0.720222, 0.667618, 0.430805], + [0.724274, 0.670859, 0.429194], + [0.728334, 0.674107, 0.427554], + [0.732422, 0.677364, 0.425717], + [0.736488, 0.680629, 0.424028], + [0.740589, 0.683900, 0.422131], + [0.744664, 0.687181, 0.420393], + [0.748772, 0.690470, 0.418448], + [0.752886, 0.693766, 0.416472], + [0.756975, 0.697071, 0.414659], + [0.761096, 0.700384, 0.412638], + [0.765223, 0.703705, 0.410587], + [0.769353, 0.707035, 0.408516], + [0.773486, 0.710373, 0.406422], + [0.777651, 0.713719, 0.404112], + [0.781795, 0.717074, 0.401966], + [0.785965, 0.720438, 0.399613], + [0.790116, 0.723810, 0.397423], + [0.794298, 0.727190, 0.395016], + [0.798480, 0.730580, 0.392597], + [0.802667, 0.733978, 0.390153], + [0.806859, 0.737385, 0.387684], + [0.811054, 0.740801, 0.385198], + [0.815274, 0.744226, 0.382504], + [0.819499, 0.747659, 0.379785], + [0.823729, 0.751101, 0.377043], + [0.827959, 0.754553, 0.374292], + [0.832192, 0.758014, 0.371529], + [0.836429, 0.761483, 0.368747], + [0.840693, 0.764962, 0.365746], + [0.844957, 0.768450, 0.362741], + [0.849223, 0.771947, 0.359729], + [0.853515, 0.775454, 0.356500], + [0.857809, 0.778969, 0.353259], + [0.862105, 0.782494, 0.350011], + [0.866421, 0.786028, 0.346571], + [0.870717, 0.789572, 0.343333], + [0.875057, 0.793125, 0.339685], + [0.879378, 0.796687, 0.336241], + [0.883720, 0.800258, 0.332599], + [0.888081, 0.803839, 0.328770], + [0.892440, 0.807430, 0.324968], + [0.896818, 0.811030, 0.320982], + [0.901195, 0.814639, 0.317021], + [0.905589, 0.818257, 0.312889], + [0.910000, 0.821885, 0.308594], + [0.914407, 0.825522, 0.304348], + [0.918828, 0.829168, 0.299960], + [0.923279, 0.832822, 0.295244], + [0.927724, 0.836486, 0.290611], + [0.932180, 0.840159, 0.285880], + [0.936660, 0.843841, 0.280876], + [0.941147, 0.847530, 0.275815], + [0.945654, 0.851228, 0.270532], + [0.950178, 0.854933, 0.265085], + [0.954725, 0.858646, 0.259365], + [0.959284, 0.862365, 0.253563], + [0.963872, 0.866089, 0.247445], + [0.968469, 0.869819, 0.241310], + [0.973114, 0.873550, 0.234677], + [0.977780, 0.877281, 0.227954], + [0.982497, 0.881008, 0.220878], + [0.987293, 0.884718, 0.213336], + [0.992218, 0.888385, 0.205468], + [0.994847, 0.892954, 0.203445], + [0.995249, 0.898384, 0.207561], + [0.995503, 0.903866, 0.212370], + [0.995737, 0.909344, 0.217772]] + +_twilight_data = [ + [0.88575015840754434, 0.85000924943067835, 0.8879736506427196], + [0.88378520195539056, 0.85072940540310626, 0.88723222096949894], + [0.88172231059285788, 0.85127594077653468, 0.88638056925514819], + [0.8795410528270573, 0.85165675407495722, 0.8854143767924102], + [0.87724880858965482, 0.85187028338870274, 0.88434120381311432], + [0.87485347508575972, 0.85191526123023187, 0.88316926967613829], + [0.87233134085124076, 0.85180165478080894, 0.88189704355001619], + [0.86970474853509816, 0.85152403004797894, 0.88053883390003362], + [0.86696015505333579, 0.8510896085314068, 0.87909766977173343], + [0.86408985081463996, 0.85050391167507788, 0.87757925784892632], + [0.86110245436899846, 0.84976754857001258, 0.87599242923439569], + [0.85798259245670372, 0.84888934810281835, 0.87434038553446281], + [0.85472593189256985, 0.84787488124672816, 0.8726282980930582], + [0.85133714570857189, 0.84672735796116472, 0.87086081657350445], + [0.84780710702577922, 0.8454546229209523, 0.86904036783694438], + [0.8441261828674842, 0.84406482711037389, 0.86716973322690072], + [0.84030420805957784, 0.8425605950855084, 0.865250882410458], + [0.83634031809191178, 0.84094796518951942, 0.86328528001070159], + [0.83222705712934408, 0.83923490627754482, 0.86127563500427884], + [0.82796894316013536, 0.83742600751395202, 0.85922399451306786], + [0.82357429680252847, 0.83552487764795436, 0.85713191328514948], + [0.81904654677937527, 0.8335364929949034, 0.85500206287010105], + [0.81438982121143089, 0.83146558694197847, 0.85283759062147024], + [0.8095999819094809, 0.82931896673505456, 0.85064441601050367], + [0.80469164429814577, 0.82709838780560663, 0.84842449296974021], + [0.79967075421267997, 0.82480781812080928, 0.84618210029578533], + [0.79454305089231114, 0.82245116226304615, 0.84392184786827984], + [0.78931445564608915, 0.82003213188702007, 0.8416486380471222], + [0.78399101042764918, 0.81755426400533426, 0.83936747464036732], + [0.77857892008227592, 0.81502089378742548, 0.8370834463093898], + [0.77308416590170936, 0.81243524735466011, 0.83480172950579679], + [0.76751108504417864, 0.8098007598713145, 0.83252816638059668], + [0.76186907937980286, 0.80711949387647486, 0.830266486168872], + [0.75616443584381976, 0.80439408733477935, 0.82802138994719998], + [0.75040346765406696, 0.80162699008965321, 0.82579737851082424], + [0.74459247771890169, 0.79882047719583249, 0.82359867586156521], + [0.73873771700494939, 0.79597665735031009, 0.82142922780433014], + [0.73284543645523459, 0.79309746468844067, 0.81929263384230377], + [0.72692177512829703, 0.7901846863592763, 0.81719217466726379], + [0.72097280665536778, 0.78723995923452639, 0.81513073920879264], + [0.71500403076252128, 0.78426487091581187, 0.81311116559949914], + [0.70902078134539304, 0.78126088716070907, 0.81113591855117928], + [0.7030297722540817, 0.77822904973358131, 0.80920618848056969], + [0.6970365443886174, 0.77517050008066057, 0.80732335380063447], + [0.69104641009309098, 0.77208629460678091, 0.80548841690679074], + [0.68506446154395928, 0.7689774029354699, 0.80370206267176914], + [0.67909554499882152, 0.76584472131395898, 0.8019646617300199], + [0.67314422559426212, 0.76268908733890484, 0.80027628545809526], + [0.66721479803752815, 0.7595112803730375, 0.79863674654537764], + [0.6613112930078745, 0.75631202708719025, 0.7970456043491897], + [0.65543692326454717, 0.75309208756768431, 0.79550271129031047], + [0.64959573004253479, 0.74985201221941766, 0.79400674021499107], + [0.6437910831099849, 0.7465923800833657, 0.79255653201306053], + [0.63802586828545982, 0.74331376714033193, 0.79115100459573173], + [0.6323027138710603, 0.74001672160131404, 0.78978892762640429], + [0.62662402022604591, 0.73670175403699445, 0.78846901316334561], + [0.62099193064817548, 0.73336934798923203, 0.78718994624696581], + [0.61540846411770478, 0.73001995232739691, 0.78595022706750484], + [0.60987543176093062, 0.72665398759758293, 0.78474835732694714], + [0.60439434200274855, 0.7232718614323369, 0.78358295593535587], + [0.5989665814482068, 0.71987394892246725, 0.78245259899346642], + [0.59359335696837223, 0.7164606049658685, 0.78135588237640097], + [0.58827579780555495, 0.71303214646458135, 0.78029141405636515], + [0.58301487036932409, 0.70958887676997473, 0.77925781820476592], + [0.5778116438998202, 0.70613106157153982, 0.77825345121025524], + [0.5726668948158774, 0.7026589535425779, 0.77727702680911992], + [0.56758117853861967, 0.69917279302646274, 0.77632748534275298], + [0.56255515357219343, 0.69567278381629649, 0.77540359142309845], + [0.55758940419605174, 0.69215911458254054, 0.7745041337932782], + [0.55268450589347129, 0.68863194515166382, 0.7736279426902245], + [0.54784098153018634, 0.68509142218509878, 0.77277386473440868], + [0.54305932424018233, 0.68153767253065878, 0.77194079697835083], + [0.53834015575176275, 0.67797081129095405, 0.77112734439057717], + [0.53368389147728401, 0.67439093705212727, 0.7703325054879735], + [0.529090861832473, 0.67079812302806219, 0.76955552292313134], + [0.52456151470593582, 0.66719242996142225, 0.76879541714230948], + [0.52009627392235558, 0.66357391434030388, 0.76805119403344102], + [0.5156955988596057, 0.65994260812897998, 0.76732191489596169], + [0.51135992541601927, 0.65629853981831865, 0.76660663780645333], + [0.50708969576451657, 0.65264172403146448, 0.76590445660835849], + [0.5028853540415561, 0.64897216734095264, 0.76521446718174913], + [0.49874733661356069, 0.6452898684900934, 0.76453578734180083], + [0.4946761847863938, 0.64159484119504429, 0.76386719002130909], + [0.49067224938561221, 0.63788704858847078, 0.76320812763163837], + [0.4867359599430568, 0.63416646251100506, 0.76255780085924041], + [0.4828677867260272, 0.6304330455306234, 0.76191537149895305], + [0.47906816236197386, 0.62668676251860134, 0.76128000375662419], + [0.47533752394906287, 0.62292757283835809, 0.76065085571817748], + [0.47167629518877091, 0.61915543242884641, 0.76002709227883047], + [0.46808490970531597, 0.61537028695790286, 0.75940789891092741], + [0.46456376716303932, 0.61157208822864151, 0.75879242623025811], + [0.46111326647023881, 0.607760777169989, 0.75817986436807139], + [0.45773377230160567, 0.60393630046586455, 0.75756936901859162], + [0.45442563977552913, 0.60009859503858665, 0.75696013660606487], + [0.45118918687617743, 0.59624762051353541, 0.75635120643246645], + [0.44802470933589172, 0.59238331452146575, 0.75574176474107924], + [0.44493246854215379, 0.5885055998308617, 0.7551311041857901], + [0.44191271766696399, 0.58461441100175571, 0.75451838884410671], + [0.43896563958048396, 0.58070969241098491, 0.75390276208285945], + [0.43609138958356369, 0.57679137998186081, 0.7532834105961016], + [0.43329008867358393, 0.57285941625606673, 0.75265946532566674], + [0.43056179073057571, 0.56891374572457176, 0.75203008099312696], + [0.42790652284925834, 0.5649543060909209, 0.75139443521914839], + [0.42532423665011354, 0.56098104959950301, 0.75075164989005116], + [0.42281485675772662, 0.55699392126996583, 0.75010086988227642], + [0.42037822361396326, 0.55299287158108168, 0.7494412559451894], + [0.41801414079233629, 0.54897785421888889, 0.74877193167001121], + [0.4157223260454232, 0.54494882715350401, 0.74809204459000522], + [0.41350245743314729, 0.54090574771098476, 0.74740073297543086], + [0.41135414697304568, 0.53684857765005933, 0.74669712855065784], + [0.4092768899914751, 0.53277730177130322, 0.74598030635707824], + [0.40727018694219069, 0.52869188011057411, 0.74524942637581271], + [0.40533343789303178, 0.52459228174983119, 0.74450365836708132], + [0.40346600333905397, 0.52047847653840029, 0.74374215223567086], + [0.40166714010896104, 0.51635044969688759, 0.7429640345324835], + [0.39993606933454834, 0.51220818143218516, 0.74216844571317986], + [0.3982719152586337, 0.50805166539276136, 0.74135450918099721], + [0.39667374905665609, 0.50388089053847973, 0.74052138580516735], + [0.39514058808207631, 0.49969585326377758, 0.73966820211715711], + [0.39367135736822567, 0.49549655777451179, 0.738794102296364], + [0.39226494876209317, 0.49128300332899261, 0.73789824784475078], + [0.39092017571994903, 0.48705520251223039, 0.73697977133881254], + [0.38963580160340855, 0.48281316715123496, 0.73603782546932739], + [0.38841053300842432, 0.47855691131792805, 0.73507157641157261], + [0.38724301459330251, 0.47428645933635388, 0.73408016787854391], + [0.38613184178892102, 0.4700018340988123, 0.7330627749243106], + [0.38507556793651387, 0.46570306719930193, 0.73201854033690505], + [0.38407269378943537, 0.46139018782416635, 0.73094665432902683], + [0.38312168084402748, 0.45706323581407199, 0.72984626791353258], + [0.38222094988570376, 0.45272225034283325, 0.72871656144003782], + [0.38136887930454161, 0.44836727669277859, 0.72755671317141346], + [0.38056380696565623, 0.44399837208633719, 0.72636587045135315], + [0.37980403744848751, 0.43961558821222629, 0.72514323778761092], + [0.37908789283110761, 0.43521897612544935, 0.72388798691323131], + [0.378413635091359, 0.43080859411413064, 0.72259931993061044], + [0.37777949753513729, 0.4263845142616835, 0.72127639993530235], + [0.37718371844251231, 0.42194680223454828, 0.71991841524475775], + [0.37662448930806297, 0.41749553747893614, 0.71852454736176108], + [0.37610001286385814, 0.41303079952477062, 0.71709396919920232], + [0.37560846919442398, 0.40855267638072096, 0.71562585091587549], + [0.37514802505380473, 0.4040612609993941, 0.7141193695725726], + [0.37471686019302231, 0.3995566498711684, 0.71257368516500463], + [0.37431313199312338, 0.39503894828283309, 0.71098796522377461], + [0.37393499330475782, 0.39050827529375831, 0.70936134293478448], + [0.3735806215098284, 0.38596474386057539, 0.70769297607310577], + [0.37324816143326384, 0.38140848555753937, 0.70598200974806036], + [0.37293578646665032, 0.37683963835219841, 0.70422755780589941], + [0.37264166757849604, 0.37225835004836849, 0.7024287314570723], + [0.37236397858465387, 0.36766477862108266, 0.70058463496520773], + [0.37210089702443822, 0.36305909736982378, 0.69869434615073722], + [0.3718506155898596, 0.35844148285875221, 0.69675695810256544], + [0.37161133234400479, 0.3538121372967869, 0.69477149919380887], + [0.37138124223736607, 0.34917126878479027, 0.69273703471928827], + [0.37115856636209105, 0.34451911410230168, 0.69065253586464992], + [0.37094151551337329, 0.33985591488818123, 0.68851703379505125], + [0.37072833279422668, 0.33518193808489577, 0.68632948169606767], + [0.37051738634484427, 0.33049741244307851, 0.68408888788857214], + [0.37030682071842685, 0.32580269697872455, 0.68179411684486679], + [0.37009487130772695, 0.3210981375964933, 0.67944405399056851], + [0.36987980329025361, 0.31638410101153364, 0.67703755438090574], + [0.36965987626565955, 0.31166098762951971, 0.67457344743419545], + [0.36943334591276228, 0.30692923551862339, 0.67205052849120617], + [0.36919847837592484, 0.30218932176507068, 0.66946754331614522], + [0.36895355306596778, 0.29744175492366276, 0.66682322089824264], + [0.36869682231895268, 0.29268709856150099, 0.66411625298236909], + [0.36842655638020444, 0.28792596437778462, 0.66134526910944602], + [0.36814101479899719, 0.28315901221182987, 0.65850888806972308], + [0.36783843696531082, 0.27838697181297761, 0.65560566838453704], + [0.36751707094367697, 0.27361063317090978, 0.65263411711618635], + [0.36717513650699446, 0.26883085667326956, 0.64959272297892245], + [0.36681085540107988, 0.26404857724525643, 0.64647991652908243], + [0.36642243251550632, 0.25926481158628106, 0.64329409140765537], + [0.36600853966739794, 0.25448043878086224, 0.64003361803368586], + [0.36556698373538982, 0.24969683475296395, 0.63669675187488584], + [0.36509579845886808, 0.24491536803550484, 0.63328173520055586], + [0.36459308890125008, 0.24013747024823828, 0.62978680155026101], + [0.36405693022088509, 0.23536470386204195, 0.62621013451953023], + [0.36348537610385145, 0.23059876218396419, 0.62254988622392882], + [0.36287643560041027, 0.22584149293287031, 0.61880417410823019], + [0.36222809558295926, 0.22109488427338303, 0.61497112346096128], + [0.36153829010998356, 0.21636111429594002, 0.61104880679640927], + [0.36080493826624654, 0.21164251793458128, 0.60703532172064711], + [0.36002681809096376, 0.20694122817889948, 0.60292845431916875], + [0.35920088560930186, 0.20226037920758122, 0.5987265295935138], + [0.35832489966617809, 0.197602942459778, 0.59442768517501066], + [0.35739663292915563, 0.19297208197842461, 0.59003011251063131], + [0.35641381143126327, 0.18837119869242164, 0.5855320765920552], + [0.35537415306906722, 0.18380392577704466, 0.58093191431832802], + [0.35427534960663759, 0.17927413271618647, 0.57622809660668717], + [0.35311574421123737, 0.17478570377561287, 0.57141871523555288], + [0.35189248608873791, 0.17034320478524959, 0.56650284911216653], + [0.35060304441931012, 0.16595129984720861, 0.56147964703993225], + [0.34924513554955644, 0.16161477763045118, 0.55634837474163779], + [0.34781653238777782, 0.15733863511152979, 0.55110853452703257], + [0.34631507175793091, 0.15312802296627787, 0.5457599924248665], + [0.34473901574536375, 0.14898820589826409, 0.54030245920406539], + [0.34308600291572294, 0.14492465359918028, 0.53473704282067103], + [0.34135411074506483, 0.1409427920655632, 0.52906500940336754], + [0.33954168752669694, 0.13704801896718169, 0.52328797535085236], + [0.33764732090671112, 0.13324562282438077, 0.51740807573979475], + [0.33566978565015315, 0.12954074251271822, 0.51142807215168951], + [0.33360804901486002, 0.12593818301005921, 0.50535164796654897], + [0.33146154891145124, 0.12244245263391232, 0.49918274588431072], + [0.32923005203231409, 0.11905764321981127, 0.49292595612342666], + [0.3269137124539796, 0.1157873496841953, 0.48658646495697461], + [0.32451307931207785, 0.11263459791730848, 0.48017007211645196], + [0.32202882276069322, 0.10960114111258401, 0.47368494725726878], + [0.31946262395497965, 0.10668879882392659, 0.46713728801395243], + [0.31681648089023501, 0.10389861387653518, 0.46053414662739794], + [0.31409278414755532, 0.10123077676403242, 0.45388335612058467], + [0.31129434479712365, 0.098684771934052201, 0.44719313715161618], + [0.30842444457210105, 0.096259385340577736, 0.44047194882050544], + [0.30548675819945936, 0.093952764840823738, 0.43372849999361113], + [0.30248536364574252, 0.091761187397303601, 0.42697404043749887], + [0.29942483960214772, 0.089682253716750038, 0.42021619665853854], + [0.29631000388905288, 0.087713250960463951, 0.41346259134143476], + [0.29314593096985248, 0.085850656889620708, 0.40672178082365834], + [0.28993792445176608, 0.08409078829085731, 0.40000214725256295], + [0.28669151388283165, 0.082429873848480689, 0.39331182532243375], + [0.28341239797185225, 0.080864153365499375, 0.38665868550105914], + [0.28010638576975472, 0.079389994802261526, 0.38005028528138707], + [0.27677939615815589, 0.078003941033788216, 0.37349382846504675], + [0.27343739342450812, 0.076702800237496066, 0.36699616136347685], + [0.27008637749114051, 0.075483675584275545, 0.36056376228111864], + [0.26673233211995284, 0.074344018028546205, 0.35420276066240958], + [0.26338121807151404, 0.073281657939897077, 0.34791888996380105], + [0.26003895187439957, 0.072294781043362205, 0.3417175669546984], + [0.25671191651083902, 0.071380106242082242, 0.33560648984600089], + [0.25340685873736807, 0.070533582926851829, 0.3295945757321303], + [0.25012845306199383, 0.069758206429106989, 0.32368100685760637], + [0.24688226237958999, 0.069053639449204451, 0.31786993834254956], + [0.24367372557466271, 0.068419855150922693, 0.31216524050888372], + [0.24050813332295939, 0.067857103814855602, 0.30657054493678321], + [0.23739062429054825, 0.067365888050555517, 0.30108922184065873], + [0.23433055727563878, 0.066935599661639394, 0.29574009929867601], + [0.23132955273021344, 0.066576186939090592, 0.29051361067988485], + [0.2283917709422868, 0.06628997924139618, 0.28541074411068496], + [0.22552164337737857, 0.066078173119395595, 0.28043398847505197], + [0.22272706739121817, 0.065933790675651943, 0.27559714652053702], + [0.22001251100779617, 0.065857918918907604, 0.27090279994325861], + [0.21737845072382705, 0.065859661233562045, 0.26634209349669508], + [0.21482843531473683, 0.065940385613778491, 0.26191675992376573], + [0.21237411048541005, 0.066085024661758446, 0.25765165093569542], + [0.21001214221188125, 0.066308573918947178, 0.2535289048041211], + [0.2077442377448806, 0.06661453200418091, 0.24954644291943817], + [0.20558051999470117, 0.066990462397868739, 0.24572497420147632], + [0.20352007949514977, 0.067444179612424215, 0.24205576625191821], + [0.20156133764129841, 0.067983271026200248, 0.23852974228695395], + [0.19971571438603364, 0.068592710553704722, 0.23517094067076993], + [0.19794834061899208, 0.069314066071660657, 0.23194647381302336], + [0.1960826032659409, 0.070321227242423623, 0.22874673279569585], + [0.19410351363791453, 0.071608304856891569, 0.22558727307410353], + [0.19199449184606268, 0.073182830649273306, 0.22243385243433622], + [0.18975853639094634, 0.075019861862143766, 0.2193005075652994], + [0.18739228342697645, 0.077102096899588329, 0.21618875376309582], + [0.18488035509396164, 0.079425730279723883, 0.21307651648984993], + [0.18774482037046955, 0.077251588468039312, 0.21387448578597812], + [0.19049578401722037, 0.075311278416787641, 0.2146562337112265], + [0.1931548636579131, 0.073606819040117955, 0.21542362939081539], + [0.19571853588267552, 0.072157781039602742, 0.21617499187076789], + [0.19819343656336558, 0.070974625252738788, 0.21690975060032436], + [0.20058760685133747, 0.070064576149984209, 0.21762721310371608], + [0.20290365333558247, 0.069435248580458964, 0.21833167885096033], + [0.20531725273301316, 0.068919592266397572, 0.21911516689288835], + [0.20785704662965598, 0.068484398797025281, 0.22000133917653536], + [0.21052882914958676, 0.06812195249816172, 0.22098759107715404], + [0.2133313859647627, 0.067830148426026665, 0.22207043213024291], + [0.21625279838647882, 0.067616330270516389, 0.22324568672294431], + [0.21930503925136402, 0.067465786362940039, 0.22451023616807558], + [0.22247308588973624, 0.067388214053092838, 0.22585960379408354], + [0.2257539681670791, 0.067382132300147474, 0.22728984778098055], + [0.22915620278592841, 0.067434730871152565, 0.22879681433956656], + [0.23266299920501882, 0.067557104388479783, 0.23037617493752832], + [0.23627495835774248, 0.06774359820987802, 0.23202360805926608], + [0.23999586188690308, 0.067985029964779953, 0.23373434258507808], + [0.24381149720247919, 0.068289851529011875, 0.23550427698321885], + [0.24772092990501099, 0.068653337909486523, 0.2373288009471749], + [0.25172899728289466, 0.069064630826035506, 0.23920260612763083], + [0.25582135547481771, 0.06953231029187984, 0.24112190491594204], + [0.25999463887892144, 0.070053855603861875, 0.24308218808684579], + [0.26425512207060942, 0.070616595622995437, 0.24507758869355967], + [0.26859095948172862, 0.071226716277922458, 0.24710443563450618], + [0.27299701518897301, 0.071883555446163511, 0.24915847093232929], + [0.27747150809142801, 0.072582969899254779, 0.25123493995942769], + [0.28201746297366942, 0.073315693214040967, 0.25332800295084507], + [0.28662309235899847, 0.074088460826808866, 0.25543478673717029], + [0.29128515387578635, 0.074899049847466703, 0.25755101595750435], + [0.2960004726065818, 0.075745336000958424, 0.25967245030364566], + [0.30077276812918691, 0.076617824336164764, 0.26179294097819672], + [0.30559226007249934, 0.077521963107537312, 0.26391006692119662], + [0.31045520848595526, 0.078456871676182177, 0.2660200572779356], + [0.31535870009205808, 0.079420997315243186, 0.26811904076941961], + [0.32029986557994061, 0.080412994737554838, 0.27020322893039511], + [0.32527888860401261, 0.081428390076546092, 0.27226772884656186], + [0.33029174471181438, 0.08246763389003825, 0.27430929404579435], + [0.33533353224455448, 0.083532434119003962, 0.27632534356790039], + [0.34040164359597463, 0.084622236191702671, 0.27831254595259397], + [0.34549355713871799, 0.085736654965126335, 0.28026769921081435], + [0.35060678246032478, 0.08687555176033529, 0.28218770540182386], + [0.35573889947341125, 0.088038974350243354, 0.2840695897279818], + [0.36088752387578377, 0.089227194362745205, 0.28591050458531014], + [0.36605031412464006, 0.090440685427697898, 0.2877077458811747], + [0.37122508431309342, 0.091679997480262732, 0.28945865397633169], + [0.3764103053221462, 0.092945198093777909, 0.29116024157313919], + [0.38160247377467543, 0.094238731263712183, 0.29281107506269488], + [0.38679939079544168, 0.09556181960083443, 0.29440901248173756], + [0.39199887556812907, 0.09691583650296684, 0.29595212005509081], + [0.39719876876325577, 0.098302320968278623, 0.29743856476285779], + [0.40239692379737496, 0.099722930314950553, 0.29886674369733968], + [0.40759120392688708, 0.10117945586419633, 0.30023519507728602], + [0.41277985630360303, 0.1026734006932461, 0.30154226437468967], + [0.41796105205173684, 0.10420644885760968, 0.30278652039631843], + [0.42313214269556043, 0.10578120994917611, 0.3039675809469457], + [0.42829101315789753, 0.1073997763055258, 0.30508479060294547], + [0.4334355841041439, 0.1090642347484701, 0.30613767928289148], + [0.43856378187931538, 0.11077667828375456, 0.30712600062348083], + [0.44367358645071275, 0.11253912421257944, 0.30804973095465449], + [0.44876299173174822, 0.11435355574622549, 0.30890905921943196], + [0.45383005086999889, 0.11622183788331528, 0.30970441249844921], + [0.45887288947308297, 0.11814571137706886, 0.31043636979038808], + [0.46389102840284874, 0.12012561256850712, 0.31110343446582983], + [0.46888111384598413, 0.12216445576414045, 0.31170911458932665], + [0.473841437035254, 0.12426354237989065, 0.31225470169927194], + [0.47877034239726296, 0.12642401401409453, 0.31274172735821959], + [0.48366628618847957, 0.12864679022013889, 0.31317188565991266], + [0.48852847371852987, 0.13093210934893723, 0.31354553695453014], + [0.49335504375145617, 0.13328091630401023, 0.31386561956734976], + [0.49814435462074153, 0.13569380302451714, 0.314135190862664], + [0.50289524974970612, 0.13817086581280427, 0.31435662153833671], + [0.50760681181053691, 0.14071192654913128, 0.31453200120082569], + [0.51227835105321762, 0.14331656120063752, 0.3146630922831542], + [0.51690848800544464, 0.14598463068714407, 0.31475407592280041], + [0.52149652863229956, 0.14871544765633712, 0.31480767954534428], + [0.52604189625477482, 0.15150818660835483, 0.31482653406646727], + [0.53054420489856446, 0.15436183633886777, 0.31481299789187128], + [0.5350027976174474, 0.15727540775107324, 0.31477085207396532], + [0.53941736649199057, 0.16024769309971934, 0.31470295028655965], + [0.54378771313608565, 0.16327738551419116, 0.31461204226295625], + [0.54811370033467621, 0.1663630904279047, 0.31450102990914708], + [0.55239521572711914, 0.16950338809328983, 0.31437291554615371], + [0.55663229034969341, 0.17269677158182117, 0.31423043195101424], + [0.56082499039117173, 0.17594170887918095, 0.31407639883970623], + [0.56497343529017696, 0.17923664950367169, 0.3139136046337036], + [0.56907784784011428, 0.18258004462335425, 0.31374440956796529], + [0.57313845754107873, 0.18597036007065024, 0.31357126868520002], + [0.57715550812992045, 0.18940601489760422, 0.31339704333572083], + [0.58112932761586555, 0.19288548904692518, 0.31322399394183942], + [0.58506024396466882, 0.19640737049066315, 0.31305401163732732], + [0.58894861935544707, 0.19997020971775276, 0.31288922211590126], + [0.59279480536520257, 0.20357251410079796, 0.31273234839304942], + [0.59659918109122367, 0.207212956082026, 0.31258523031121233], + [0.60036213010411577, 0.21089030138947745, 0.31244934410414688], + [0.60408401696732739, 0.21460331490206347, 0.31232652641170694], + [0.60776523994818654, 0.21835070166659282, 0.31221903291870201], + [0.6114062072731884, 0.22213124697023234, 0.31212881396435238], + [0.61500723236391375, 0.22594402043981826, 0.31205680685765741], + [0.61856865258877192, 0.22978799249179921, 0.31200463838728931], + [0.62209079821082613, 0.2336621873300741, 0.31197383273627388], + [0.62557416500434959, 0.23756535071152696, 0.31196698314912269], + [0.62901892016985872, 0.24149689191922535, 0.31198447195645718], + [0.63242534854210275, 0.24545598775548677, 0.31202765974624452], + [0.6357937104834237, 0.24944185818822678, 0.31209793953300591], + [0.6391243387840212, 0.25345365461983138, 0.31219689612063978], + [0.642417577481186, 0.257490519876798, 0.31232631707560987], + [0.64567349382645434, 0.26155203161615281, 0.31248673753935263], + [0.64889230169458245, 0.26563755336209077, 0.31267941819570189], + [0.65207417290277303, 0.26974650525236699, 0.31290560605819168], + [0.65521932609327127, 0.27387826652410152, 0.3131666792687211], + [0.6583280801134499, 0.27803210957665631, 0.3134643447952643], + [0.66140037532601781, 0.28220778870555907, 0.31379912926498488], + [0.66443632469878844, 0.28640483614256179, 0.31417223403606975], + [0.66743603766369131, 0.29062280081258873, 0.31458483752056837], + [0.67039959547676198, 0.29486126309253047, 0.31503813956872212], + [0.67332725564817331, 0.29911962764489264, 0.31553372323982209], + [0.67621897924409746, 0.30339762792450425, 0.3160724937230589], + [0.67907474028157344, 0.30769497879760166, 0.31665545668946665], + [0.68189457150944521, 0.31201133280550686, 0.31728380489244951], + [0.68467850942494535, 0.31634634821222207, 0.31795870784057567], + [0.68742656435169625, 0.32069970535138104, 0.31868137622277692], + [0.6901389321505248, 0.32507091815606004, 0.31945332332898302], + [0.69281544846764931, 0.32945984647042675, 0.3202754315314667], + [0.69545608346891119, 0.33386622163232865, 0.32114884306985791], + [0.6980608153581771, 0.33828976326048621, 0.32207478855218091], + [0.70062962477242097, 0.34273019305341756, 0.32305449047765694], + [0.70316249458814151, 0.34718723719597999, 0.32408913679491225], + [0.70565951122610093, 0.35166052978120937, 0.32518014084085567], + [0.70812059568420482, 0.35614985523380299, 0.32632861885644465], + [0.7105456546582587, 0.36065500290840113, 0.32753574162788762], + [0.71293466839773467, 0.36517570519856757, 0.3288027427038317], + [0.71528760614847287, 0.36971170225223449, 0.3301308728723546], + [0.71760444908133847, 0.37426272710686193, 0.33152138620958932], + [0.71988521490549851, 0.37882848839337313, 0.33297555200245399], + [0.7221299918421461, 0.38340864508963057, 0.33449469983585844], + [0.72433865647781592, 0.38800301593162145, 0.33607995965691828], + [0.72651122900227549, 0.3926113126792577, 0.3377325942005665], + [0.72864773856716547, 0.39723324476747235, 0.33945384341064017], + [0.73074820754845171, 0.401868526884681, 0.3412449533046818], + [0.73281270506268747, 0.4065168468778026, 0.34310715173410822], + [0.73484133598564938, 0.41117787004519513, 0.34504169470809071], + [0.73683422173585866, 0.41585125850290111, 0.34704978520758401], + [0.73879140024599266, 0.42053672992315327, 0.34913260148542435], + [0.74071301619506091, 0.4252339389526239, 0.35129130890802607], + [0.7425992159973317, 0.42994254036133867, 0.35352709245374592], + [0.74445018676570673, 0.43466217184617112, 0.35584108091122535], + [0.74626615789163442, 0.43939245044973502, 0.35823439142300639], + [0.74804739275559562, 0.44413297780351974, 0.36070813602540136], + [0.74979420547170472, 0.44888333481548809, 0.36326337558360278], + [0.75150685045891663, 0.45364314496866825, 0.36590112443835765], + [0.75318566369046569, 0.45841199172949604, 0.36862236642234769], + [0.75483105066959544, 0.46318942799460555, 0.3714280448394211], + [0.75644341577140706, 0.46797501437948458, 0.37431909037543515], + [0.75802325538455839, 0.4727682731566229, 0.37729635531096678], + [0.75957111105340058, 0.47756871222057079, 0.380360657784311], + [0.7610876378057071, 0.48237579130289127, 0.38351275723852291], + [0.76257333554052609, 0.48718906673415824, 0.38675335037837993], + [0.76402885609288662, 0.49200802533379656, 0.39008308392311997], + [0.76545492593330511, 0.49683212909727231, 0.39350254000115381], + [0.76685228950643891, 0.5016608471009063, 0.39701221751773474], + [0.76822176599735303, 0.50649362371287909, 0.40061257089416885], + [0.7695642334401418, 0.5113298901696085, 0.40430398069682483], + [0.77088091962302474, 0.51616892643469103, 0.40808667584648967], + [0.77217257229605551, 0.5210102658711383, 0.41196089987122869], + [0.77344021829889886, 0.52585332093451564, 0.41592679539764366], + [0.77468494746063199, 0.53069749384776732, 0.41998440356963762], + [0.77590790730685699, 0.53554217882461186, 0.42413367909988375], + [0.7771103295521099, 0.54038674910561235, 0.42837450371258479], + [0.77829345807633121, 0.54523059488426595, 0.432706647838971], + [0.77945862731506643, 0.55007308413977274, 0.43712979856444761], + [0.78060774749483774, 0.55491335744890613, 0.44164332426364639], + [0.78174180478981836, 0.55975098052594863, 0.44624687186865436], + [0.78286225264440912, 0.56458533111166875, 0.45093985823706345], + [0.78397060836414478, 0.56941578326710418, 0.45572154742892063], + [0.78506845019606841, 0.5742417003617839, 0.46059116206904965], + [0.78615737132332963, 0.5790624629815756, 0.46554778281918402], + [0.78723904108188347, 0.58387743744557208, 0.47059039582133383], + [0.78831514045623963, 0.58868600173562435, 0.47571791879076081], + [0.78938737766251943, 0.5934875421745599, 0.48092913815357724], + [0.79045776847727878, 0.59828134277062461, 0.48622257801969754], + [0.79152832843475607, 0.60306670593147205, 0.49159667021646397], + [0.79260034304237448, 0.60784322087037024, 0.49705020621532009], + [0.79367559698664958, 0.61261029334072192, 0.50258161291269432], + [0.79475585972654039, 0.61736734400220705, 0.50818921213102985], + [0.79584292379583765, 0.62211378808451145, 0.51387124091909786], + [0.79693854719951607, 0.62684905679296699, 0.5196258425240281], + [0.79804447815136637, 0.63157258225089552, 0.52545108144834785], + [0.7991624518501963, 0.63628379372029187, 0.53134495942561433], + [0.80029415389753977, 0.64098213306749863, 0.53730535185141037], + [0.80144124292560048, 0.64566703459218766, 0.5433300863249918], + [0.80260531146112946, 0.65033793748103852, 0.54941691584603647], + [0.80378792531077625, 0.65499426549472628, 0.55556350867083815], + [0.80499054790810298, 0.65963545027564163, 0.56176745110546977], + [0.80621460526927058, 0.66426089585282289, 0.56802629178649788], + [0.8074614045096935, 0.6688700095398864, 0.57433746373459582], + [0.80873219170089694, 0.67346216702194517, 0.58069834805576737], + [0.81002809466520687, 0.67803672673971815, 0.58710626908082753], + [0.81135014011763329, 0.68259301546243389, 0.59355848909050757], + [0.81269922039881493, 0.68713033714618876, 0.60005214820435104], + [0.81407611046993344, 0.69164794791482131, 0.6065843782630862], + [0.81548146627279483, 0.69614505508308089, 0.61315221209322646], + [0.81691575775055891, 0.70062083014783982, 0.61975260637257923], + [0.81837931164498223, 0.70507438189635097, 0.62638245478933297], + [0.81987230650455289, 0.70950474978787481, 0.63303857040067113], + [0.8213947205565636, 0.7139109141951604, 0.63971766697672761], + [0.82294635110428427, 0.71829177331290062, 0.6464164243818421], + [0.8245268129450285, 0.72264614312088882, 0.65313137915422603], + [0.82613549710580259, 0.72697275518238258, 0.65985900156216504], + [0.8277716072353446, 0.73127023324078089, 0.66659570204682972], + [0.82943407816481474, 0.7355371221572935, 0.67333772009301907], + [0.83112163529096306, 0.73977184647638616, 0.68008125203631464], + [0.83283277185777982, 0.74397271817459876, 0.68682235874648545], + [0.8345656905566583, 0.7481379479992134, 0.69355697649863846], + [0.83631898844737929, 0.75226548952875261, 0.70027999028864962], + [0.83809123476131964, 0.75635314860808633, 0.70698561390212977], + [0.83987839884120874, 0.76039907199779677, 0.71367147811129228], + [0.84167750766845151, 0.76440101200982946, 0.72033299387284622], + [0.84348529222933699, 0.76835660399870176, 0.72696536998972039], + [0.84529810731955113, 0.77226338601044719, 0.73356368240541492], + [0.84711195507965098, 0.77611880236047159, 0.74012275762807056], + [0.84892245563117641, 0.77992021407650147, 0.74663719293664366], + [0.85072697023178789, 0.78366457342383888, 0.7530974636118285], + [0.85251907207708444, 0.78734936133548439, 0.7594994148789691], + [0.85429219611470464, 0.79097196777091994, 0.76583801477914104], + [0.85604022314725403, 0.79452963601550608, 0.77210610037674143], + [0.85775662943504905, 0.79801963142713928, 0.77829571667247499], + [0.8594346370300241, 0.8014392309950078, 0.78439788751383921], + [0.86107117027565516, 0.80478517909812231, 0.79039529663736285], + [0.86265601051127572, 0.80805523804261525, 0.796282666437655], + [0.86418343723941027, 0.81124644224653542, 0.80204612696863953], + [0.86564934325605325, 0.81435544067514909, 0.80766972324164554], + [0.86705314907048503, 0.81737804041911244, 0.81313419626911398], + [0.86839954695818633, 0.82030875512181523, 0.81841638963128993], + [0.86969131502613806, 0.82314158859569164, 0.82350476683173168], + [0.87093846717297507, 0.82586857889438514, 0.82838497261149613], + [0.87215331978454325, 0.82848052823709672, 0.8330486712880828], + [0.87335171360916275, 0.83096715251272624, 0.83748851001197089], + [0.87453793320260187, 0.83331972948645461, 0.84171925358069011], + [0.87571458709961403, 0.8355302318472394, 0.84575537519027078], + [0.87687848451614692, 0.83759238071186537, 0.84961373549150254], + [0.87802298436649007, 0.83950165618540074, 0.85330645352458923], + [0.87913244240792765, 0.84125554884475906, 0.85685572291039636], + [0.88019293315695812, 0.84285224824778615, 0.86027399927156634], + [0.88119169871341951, 0.84429066717717349, 0.86356595168669881], + [0.88211542489401606, 0.84557007254559347, 0.86673765046233331], + [0.88295168595448525, 0.84668970275699273, 0.86979617048190971], + [0.88369127145898041, 0.84764891761519268, 0.87274147101441557], + [0.88432713054113543, 0.84844741572055415, 0.87556785228242973], + [0.88485138159908572, 0.84908426422893801, 0.87828235285372469], + [0.88525897972630474, 0.84955892810989209, 0.88088414794024839], + [0.88554714811952384, 0.84987174283631584, 0.88336206121170946], + [0.88571155122845646, 0.85002186115856315, 0.88572538990087124]] + +_twilight_shifted_data = (_twilight_data[len(_twilight_data)//2:] + + _twilight_data[:len(_twilight_data)//2]) +_twilight_shifted_data.reverse() +_turbo_data = [[0.18995, 0.07176, 0.23217], + [0.19483, 0.08339, 0.26149], + [0.19956, 0.09498, 0.29024], + [0.20415, 0.10652, 0.31844], + [0.20860, 0.11802, 0.34607], + [0.21291, 0.12947, 0.37314], + [0.21708, 0.14087, 0.39964], + [0.22111, 0.15223, 0.42558], + [0.22500, 0.16354, 0.45096], + [0.22875, 0.17481, 0.47578], + [0.23236, 0.18603, 0.50004], + [0.23582, 0.19720, 0.52373], + [0.23915, 0.20833, 0.54686], + [0.24234, 0.21941, 0.56942], + [0.24539, 0.23044, 0.59142], + [0.24830, 0.24143, 0.61286], + [0.25107, 0.25237, 0.63374], + [0.25369, 0.26327, 0.65406], + [0.25618, 0.27412, 0.67381], + [0.25853, 0.28492, 0.69300], + [0.26074, 0.29568, 0.71162], + [0.26280, 0.30639, 0.72968], + [0.26473, 0.31706, 0.74718], + [0.26652, 0.32768, 0.76412], + [0.26816, 0.33825, 0.78050], + [0.26967, 0.34878, 0.79631], + [0.27103, 0.35926, 0.81156], + [0.27226, 0.36970, 0.82624], + [0.27334, 0.38008, 0.84037], + [0.27429, 0.39043, 0.85393], + [0.27509, 0.40072, 0.86692], + [0.27576, 0.41097, 0.87936], + [0.27628, 0.42118, 0.89123], + [0.27667, 0.43134, 0.90254], + [0.27691, 0.44145, 0.91328], + [0.27701, 0.45152, 0.92347], + [0.27698, 0.46153, 0.93309], + [0.27680, 0.47151, 0.94214], + [0.27648, 0.48144, 0.95064], + [0.27603, 0.49132, 0.95857], + [0.27543, 0.50115, 0.96594], + [0.27469, 0.51094, 0.97275], + [0.27381, 0.52069, 0.97899], + [0.27273, 0.53040, 0.98461], + [0.27106, 0.54015, 0.98930], + [0.26878, 0.54995, 0.99303], + [0.26592, 0.55979, 0.99583], + [0.26252, 0.56967, 0.99773], + [0.25862, 0.57958, 0.99876], + [0.25425, 0.58950, 0.99896], + [0.24946, 0.59943, 0.99835], + [0.24427, 0.60937, 0.99697], + [0.23874, 0.61931, 0.99485], + [0.23288, 0.62923, 0.99202], + [0.22676, 0.63913, 0.98851], + [0.22039, 0.64901, 0.98436], + [0.21382, 0.65886, 0.97959], + [0.20708, 0.66866, 0.97423], + [0.20021, 0.67842, 0.96833], + [0.19326, 0.68812, 0.96190], + [0.18625, 0.69775, 0.95498], + [0.17923, 0.70732, 0.94761], + [0.17223, 0.71680, 0.93981], + [0.16529, 0.72620, 0.93161], + [0.15844, 0.73551, 0.92305], + [0.15173, 0.74472, 0.91416], + [0.14519, 0.75381, 0.90496], + [0.13886, 0.76279, 0.89550], + [0.13278, 0.77165, 0.88580], + [0.12698, 0.78037, 0.87590], + [0.12151, 0.78896, 0.86581], + [0.11639, 0.79740, 0.85559], + [0.11167, 0.80569, 0.84525], + [0.10738, 0.81381, 0.83484], + [0.10357, 0.82177, 0.82437], + [0.10026, 0.82955, 0.81389], + [0.09750, 0.83714, 0.80342], + [0.09532, 0.84455, 0.79299], + [0.09377, 0.85175, 0.78264], + [0.09287, 0.85875, 0.77240], + [0.09267, 0.86554, 0.76230], + [0.09320, 0.87211, 0.75237], + [0.09451, 0.87844, 0.74265], + [0.09662, 0.88454, 0.73316], + [0.09958, 0.89040, 0.72393], + [0.10342, 0.89600, 0.71500], + [0.10815, 0.90142, 0.70599], + [0.11374, 0.90673, 0.69651], + [0.12014, 0.91193, 0.68660], + [0.12733, 0.91701, 0.67627], + [0.13526, 0.92197, 0.66556], + [0.14391, 0.92680, 0.65448], + [0.15323, 0.93151, 0.64308], + [0.16319, 0.93609, 0.63137], + [0.17377, 0.94053, 0.61938], + [0.18491, 0.94484, 0.60713], + [0.19659, 0.94901, 0.59466], + [0.20877, 0.95304, 0.58199], + [0.22142, 0.95692, 0.56914], + [0.23449, 0.96065, 0.55614], + [0.24797, 0.96423, 0.54303], + [0.26180, 0.96765, 0.52981], + [0.27597, 0.97092, 0.51653], + [0.29042, 0.97403, 0.50321], + [0.30513, 0.97697, 0.48987], + [0.32006, 0.97974, 0.47654], + [0.33517, 0.98234, 0.46325], + [0.35043, 0.98477, 0.45002], + [0.36581, 0.98702, 0.43688], + [0.38127, 0.98909, 0.42386], + [0.39678, 0.99098, 0.41098], + [0.41229, 0.99268, 0.39826], + [0.42778, 0.99419, 0.38575], + [0.44321, 0.99551, 0.37345], + [0.45854, 0.99663, 0.36140], + [0.47375, 0.99755, 0.34963], + [0.48879, 0.99828, 0.33816], + [0.50362, 0.99879, 0.32701], + [0.51822, 0.99910, 0.31622], + [0.53255, 0.99919, 0.30581], + [0.54658, 0.99907, 0.29581], + [0.56026, 0.99873, 0.28623], + [0.57357, 0.99817, 0.27712], + [0.58646, 0.99739, 0.26849], + [0.59891, 0.99638, 0.26038], + [0.61088, 0.99514, 0.25280], + [0.62233, 0.99366, 0.24579], + [0.63323, 0.99195, 0.23937], + [0.64362, 0.98999, 0.23356], + [0.65394, 0.98775, 0.22835], + [0.66428, 0.98524, 0.22370], + [0.67462, 0.98246, 0.21960], + [0.68494, 0.97941, 0.21602], + [0.69525, 0.97610, 0.21294], + [0.70553, 0.97255, 0.21032], + [0.71577, 0.96875, 0.20815], + [0.72596, 0.96470, 0.20640], + [0.73610, 0.96043, 0.20504], + [0.74617, 0.95593, 0.20406], + [0.75617, 0.95121, 0.20343], + [0.76608, 0.94627, 0.20311], + [0.77591, 0.94113, 0.20310], + [0.78563, 0.93579, 0.20336], + [0.79524, 0.93025, 0.20386], + [0.80473, 0.92452, 0.20459], + [0.81410, 0.91861, 0.20552], + [0.82333, 0.91253, 0.20663], + [0.83241, 0.90627, 0.20788], + [0.84133, 0.89986, 0.20926], + [0.85010, 0.89328, 0.21074], + [0.85868, 0.88655, 0.21230], + [0.86709, 0.87968, 0.21391], + [0.87530, 0.87267, 0.21555], + [0.88331, 0.86553, 0.21719], + [0.89112, 0.85826, 0.21880], + [0.89870, 0.85087, 0.22038], + [0.90605, 0.84337, 0.22188], + [0.91317, 0.83576, 0.22328], + [0.92004, 0.82806, 0.22456], + [0.92666, 0.82025, 0.22570], + [0.93301, 0.81236, 0.22667], + [0.93909, 0.80439, 0.22744], + [0.94489, 0.79634, 0.22800], + [0.95039, 0.78823, 0.22831], + [0.95560, 0.78005, 0.22836], + [0.96049, 0.77181, 0.22811], + [0.96507, 0.76352, 0.22754], + [0.96931, 0.75519, 0.22663], + [0.97323, 0.74682, 0.22536], + [0.97679, 0.73842, 0.22369], + [0.98000, 0.73000, 0.22161], + [0.98289, 0.72140, 0.21918], + [0.98549, 0.71250, 0.21650], + [0.98781, 0.70330, 0.21358], + [0.98986, 0.69382, 0.21043], + [0.99163, 0.68408, 0.20706], + [0.99314, 0.67408, 0.20348], + [0.99438, 0.66386, 0.19971], + [0.99535, 0.65341, 0.19577], + [0.99607, 0.64277, 0.19165], + [0.99654, 0.63193, 0.18738], + [0.99675, 0.62093, 0.18297], + [0.99672, 0.60977, 0.17842], + [0.99644, 0.59846, 0.17376], + [0.99593, 0.58703, 0.16899], + [0.99517, 0.57549, 0.16412], + [0.99419, 0.56386, 0.15918], + [0.99297, 0.55214, 0.15417], + [0.99153, 0.54036, 0.14910], + [0.98987, 0.52854, 0.14398], + [0.98799, 0.51667, 0.13883], + [0.98590, 0.50479, 0.13367], + [0.98360, 0.49291, 0.12849], + [0.98108, 0.48104, 0.12332], + [0.97837, 0.46920, 0.11817], + [0.97545, 0.45740, 0.11305], + [0.97234, 0.44565, 0.10797], + [0.96904, 0.43399, 0.10294], + [0.96555, 0.42241, 0.09798], + [0.96187, 0.41093, 0.09310], + [0.95801, 0.39958, 0.08831], + [0.95398, 0.38836, 0.08362], + [0.94977, 0.37729, 0.07905], + [0.94538, 0.36638, 0.07461], + [0.94084, 0.35566, 0.07031], + [0.93612, 0.34513, 0.06616], + [0.93125, 0.33482, 0.06218], + [0.92623, 0.32473, 0.05837], + [0.92105, 0.31489, 0.05475], + [0.91572, 0.30530, 0.05134], + [0.91024, 0.29599, 0.04814], + [0.90463, 0.28696, 0.04516], + [0.89888, 0.27824, 0.04243], + [0.89298, 0.26981, 0.03993], + [0.88691, 0.26152, 0.03753], + [0.88066, 0.25334, 0.03521], + [0.87422, 0.24526, 0.03297], + [0.86760, 0.23730, 0.03082], + [0.86079, 0.22945, 0.02875], + [0.85380, 0.22170, 0.02677], + [0.84662, 0.21407, 0.02487], + [0.83926, 0.20654, 0.02305], + [0.83172, 0.19912, 0.02131], + [0.82399, 0.19182, 0.01966], + [0.81608, 0.18462, 0.01809], + [0.80799, 0.17753, 0.01660], + [0.79971, 0.17055, 0.01520], + [0.79125, 0.16368, 0.01387], + [0.78260, 0.15693, 0.01264], + [0.77377, 0.15028, 0.01148], + [0.76476, 0.14374, 0.01041], + [0.75556, 0.13731, 0.00942], + [0.74617, 0.13098, 0.00851], + [0.73661, 0.12477, 0.00769], + [0.72686, 0.11867, 0.00695], + [0.71692, 0.11268, 0.00629], + [0.70680, 0.10680, 0.00571], + [0.69650, 0.10102, 0.00522], + [0.68602, 0.09536, 0.00481], + [0.67535, 0.08980, 0.00449], + [0.66449, 0.08436, 0.00424], + [0.65345, 0.07902, 0.00408], + [0.64223, 0.07380, 0.00401], + [0.63082, 0.06868, 0.00401], + [0.61923, 0.06367, 0.00410], + [0.60746, 0.05878, 0.00427], + [0.59550, 0.05399, 0.00453], + [0.58336, 0.04931, 0.00486], + [0.57103, 0.04474, 0.00529], + [0.55852, 0.04028, 0.00579], + [0.54583, 0.03593, 0.00638], + [0.53295, 0.03169, 0.00705], + [0.51989, 0.02756, 0.00780], + [0.50664, 0.02354, 0.00863], + [0.49321, 0.01963, 0.00955], + [0.47960, 0.01583, 0.01055]] + + +cmaps = { + name: ListedColormap(data, name=name) for name, data in [ + ('magma', _magma_data), + ('inferno', _inferno_data), + ('plasma', _plasma_data), + ('viridis', _viridis_data), + ('cividis', _cividis_data), + ('twilight', _twilight_data), + ('twilight_shifted', _twilight_shifted_data), + ('turbo', _turbo_data), + ]} diff --git a/.venv/lib/python3.9/site-packages/matplotlib/_color_data.py b/.venv/lib/python3.9/site-packages/matplotlib/_color_data.py new file mode 100644 index 00000000..44f97adb --- /dev/null +++ b/.venv/lib/python3.9/site-packages/matplotlib/_color_data.py @@ -0,0 +1,1141 @@ +BASE_COLORS = { + 'b': (0, 0, 1), # blue + 'g': (0, 0.5, 0), # green + 'r': (1, 0, 0), # red + 'c': (0, 0.75, 0.75), # cyan + 'm': (0.75, 0, 0.75), # magenta + 'y': (0.75, 0.75, 0), # yellow + 'k': (0, 0, 0), # black + 'w': (1, 1, 1), # white +} + + +# These colors are from Tableau +TABLEAU_COLORS = { + 'tab:blue': '#1f77b4', + 'tab:orange': '#ff7f0e', + 'tab:green': '#2ca02c', + 'tab:red': '#d62728', + 'tab:purple': '#9467bd', + 'tab:brown': '#8c564b', + 'tab:pink': '#e377c2', + 'tab:gray': '#7f7f7f', + 'tab:olive': '#bcbd22', + 'tab:cyan': '#17becf', +} + + +# This mapping of color names -> hex values is taken from +# a survey run by Randall Munroe see: +# https://blog.xkcd.com/2010/05/03/color-survey-results/ +# for more details. The results are hosted at +# https://xkcd.com/color/rgb/ +# and also available as a text file at +# https://xkcd.com/color/rgb.txt +# +# License: https://creativecommons.org/publicdomain/zero/1.0/ +XKCD_COLORS = { + 'cloudy blue': '#acc2d9', + 'dark pastel green': '#56ae57', + 'dust': '#b2996e', + 'electric lime': '#a8ff04', + 'fresh green': '#69d84f', + 'light eggplant': '#894585', + 'nasty green': '#70b23f', + 'really light blue': '#d4ffff', + 'tea': '#65ab7c', + 'warm purple': '#952e8f', + 'yellowish tan': '#fcfc81', + 'cement': '#a5a391', + 'dark grass green': '#388004', + 'dusty teal': '#4c9085', + 'grey teal': '#5e9b8a', + 'macaroni and cheese': '#efb435', + 'pinkish tan': '#d99b82', + 'spruce': '#0a5f38', + 'strong blue': '#0c06f7', + 'toxic green': '#61de2a', + 'windows blue': '#3778bf', + 'blue blue': '#2242c7', + 'blue with a hint of purple': '#533cc6', + 'booger': '#9bb53c', + 'bright sea green': '#05ffa6', + 'dark green blue': '#1f6357', + 'deep turquoise': '#017374', + 'green teal': '#0cb577', + 'strong pink': '#ff0789', + 'bland': '#afa88b', + 'deep aqua': '#08787f', + 'lavender pink': '#dd85d7', + 'light moss green': '#a6c875', + 'light seafoam green': '#a7ffb5', + 'olive yellow': '#c2b709', + 'pig pink': '#e78ea5', + 'deep lilac': '#966ebd', + 'desert': '#ccad60', + 'dusty lavender': '#ac86a8', + 'purpley grey': '#947e94', + 'purply': '#983fb2', + 'candy pink': '#ff63e9', + 'light pastel green': '#b2fba5', + 'boring green': '#63b365', + 'kiwi green': '#8ee53f', + 'light grey green': '#b7e1a1', + 'orange pink': '#ff6f52', + 'tea green': '#bdf8a3', + 'very light brown': '#d3b683', + 'egg shell': '#fffcc4', + 'eggplant purple': '#430541', + 'powder pink': '#ffb2d0', + 'reddish grey': '#997570', + 'baby shit brown': '#ad900d', + 'liliac': '#c48efd', + 'stormy blue': '#507b9c', + 'ugly brown': '#7d7103', + 'custard': '#fffd78', + 'darkish pink': '#da467d', + 'deep brown': '#410200', + 'greenish beige': '#c9d179', + 'manilla': '#fffa86', + 'off blue': '#5684ae', + 'battleship grey': '#6b7c85', + 'browny green': '#6f6c0a', + 'bruise': '#7e4071', + 'kelley green': '#009337', + 'sickly yellow': '#d0e429', + 'sunny yellow': '#fff917', + 'azul': '#1d5dec', + 'darkgreen': '#054907', + 'green/yellow': '#b5ce08', + 'lichen': '#8fb67b', + 'light light green': '#c8ffb0', + 'pale gold': '#fdde6c', + 'sun yellow': '#ffdf22', + 'tan green': '#a9be70', + 'burple': '#6832e3', + 'butterscotch': '#fdb147', + 'toupe': '#c7ac7d', + 'dark cream': '#fff39a', + 'indian red': '#850e04', + 'light lavendar': '#efc0fe', + 'poison green': '#40fd14', + 'baby puke green': '#b6c406', + 'bright yellow green': '#9dff00', + 'charcoal grey': '#3c4142', + 'squash': '#f2ab15', + 'cinnamon': '#ac4f06', + 'light pea green': '#c4fe82', + 'radioactive green': '#2cfa1f', + 'raw sienna': '#9a6200', + 'baby purple': '#ca9bf7', + 'cocoa': '#875f42', + 'light royal blue': '#3a2efe', + 'orangeish': '#fd8d49', + 'rust brown': '#8b3103', + 'sand brown': '#cba560', + 'swamp': '#698339', + 'tealish green': '#0cdc73', + 'burnt siena': '#b75203', + 'camo': '#7f8f4e', + 'dusk blue': '#26538d', + 'fern': '#63a950', + 'old rose': '#c87f89', + 'pale light green': '#b1fc99', + 'peachy pink': '#ff9a8a', + 'rosy pink': '#f6688e', + 'light bluish green': '#76fda8', + 'light bright green': '#53fe5c', + 'light neon green': '#4efd54', + 'light seafoam': '#a0febf', + 'tiffany blue': '#7bf2da', + 'washed out green': '#bcf5a6', + 'browny orange': '#ca6b02', + 'nice blue': '#107ab0', + 'sapphire': '#2138ab', + 'greyish teal': '#719f91', + 'orangey yellow': '#fdb915', + 'parchment': '#fefcaf', + 'straw': '#fcf679', + 'very dark brown': '#1d0200', + 'terracota': '#cb6843', + 'ugly blue': '#31668a', + 'clear blue': '#247afd', + 'creme': '#ffffb6', + 'foam green': '#90fda9', + 'grey/green': '#86a17d', + 'light gold': '#fddc5c', + 'seafoam blue': '#78d1b6', + 'topaz': '#13bbaf', + 'violet pink': '#fb5ffc', + 'wintergreen': '#20f986', + 'yellow tan': '#ffe36e', + 'dark fuchsia': '#9d0759', + 'indigo blue': '#3a18b1', + 'light yellowish green': '#c2ff89', + 'pale magenta': '#d767ad', + 'rich purple': '#720058', + 'sunflower yellow': '#ffda03', + 'green/blue': '#01c08d', + 'leather': '#ac7434', + 'racing green': '#014600', + 'vivid purple': '#9900fa', + 'dark royal blue': '#02066f', + 'hazel': '#8e7618', + 'muted pink': '#d1768f', + 'booger green': '#96b403', + 'canary': '#fdff63', + 'cool grey': '#95a3a6', + 'dark taupe': '#7f684e', + 'darkish purple': '#751973', + 'true green': '#089404', + 'coral pink': '#ff6163', + 'dark sage': '#598556', + 'dark slate blue': '#214761', + 'flat blue': '#3c73a8', + 'mushroom': '#ba9e88', + 'rich blue': '#021bf9', + 'dirty purple': '#734a65', + 'greenblue': '#23c48b', + 'icky green': '#8fae22', + 'light khaki': '#e6f2a2', + 'warm blue': '#4b57db', + 'dark hot pink': '#d90166', + 'deep sea blue': '#015482', + 'carmine': '#9d0216', + 'dark yellow green': '#728f02', + 'pale peach': '#ffe5ad', + 'plum purple': '#4e0550', + 'golden rod': '#f9bc08', + 'neon red': '#ff073a', + 'old pink': '#c77986', + 'very pale blue': '#d6fffe', + 'blood orange': '#fe4b03', + 'grapefruit': '#fd5956', + 'sand yellow': '#fce166', + 'clay brown': '#b2713d', + 'dark blue grey': '#1f3b4d', + 'flat green': '#699d4c', + 'light green blue': '#56fca2', + 'warm pink': '#fb5581', + 'dodger blue': '#3e82fc', + 'gross green': '#a0bf16', + 'ice': '#d6fffa', + 'metallic blue': '#4f738e', + 'pale salmon': '#ffb19a', + 'sap green': '#5c8b15', + 'algae': '#54ac68', + 'bluey grey': '#89a0b0', + 'greeny grey': '#7ea07a', + 'highlighter green': '#1bfc06', + 'light light blue': '#cafffb', + 'light mint': '#b6ffbb', + 'raw umber': '#a75e09', + 'vivid blue': '#152eff', + 'deep lavender': '#8d5eb7', + 'dull teal': '#5f9e8f', + 'light greenish blue': '#63f7b4', + 'mud green': '#606602', + 'pinky': '#fc86aa', + 'red wine': '#8c0034', + 'shit green': '#758000', + 'tan brown': '#ab7e4c', + 'darkblue': '#030764', + 'rosa': '#fe86a4', + 'lipstick': '#d5174e', + 'pale mauve': '#fed0fc', + 'claret': '#680018', + 'dandelion': '#fedf08', + 'orangered': '#fe420f', + 'poop green': '#6f7c00', + 'ruby': '#ca0147', + 'dark': '#1b2431', + 'greenish turquoise': '#00fbb0', + 'pastel red': '#db5856', + 'piss yellow': '#ddd618', + 'bright cyan': '#41fdfe', + 'dark coral': '#cf524e', + 'algae green': '#21c36f', + 'darkish red': '#a90308', + 'reddy brown': '#6e1005', + 'blush pink': '#fe828c', + 'camouflage green': '#4b6113', + 'lawn green': '#4da409', + 'putty': '#beae8a', + 'vibrant blue': '#0339f8', + 'dark sand': '#a88f59', + 'purple/blue': '#5d21d0', + 'saffron': '#feb209', + 'twilight': '#4e518b', + 'warm brown': '#964e02', + 'bluegrey': '#85a3b2', + 'bubble gum pink': '#ff69af', + 'duck egg blue': '#c3fbf4', + 'greenish cyan': '#2afeb7', + 'petrol': '#005f6a', + 'royal': '#0c1793', + 'butter': '#ffff81', + 'dusty orange': '#f0833a', + 'off yellow': '#f1f33f', + 'pale olive green': '#b1d27b', + 'orangish': '#fc824a', + 'leaf': '#71aa34', + 'light blue grey': '#b7c9e2', + 'dried blood': '#4b0101', + 'lightish purple': '#a552e6', + 'rusty red': '#af2f0d', + 'lavender blue': '#8b88f8', + 'light grass green': '#9af764', + 'light mint green': '#a6fbb2', + 'sunflower': '#ffc512', + 'velvet': '#750851', + 'brick orange': '#c14a09', + 'lightish red': '#fe2f4a', + 'pure blue': '#0203e2', + 'twilight blue': '#0a437a', + 'violet red': '#a50055', + 'yellowy brown': '#ae8b0c', + 'carnation': '#fd798f', + 'muddy yellow': '#bfac05', + 'dark seafoam green': '#3eaf76', + 'deep rose': '#c74767', + 'dusty red': '#b9484e', + 'grey/blue': '#647d8e', + 'lemon lime': '#bffe28', + 'purple/pink': '#d725de', + 'brown yellow': '#b29705', + 'purple brown': '#673a3f', + 'wisteria': '#a87dc2', + 'banana yellow': '#fafe4b', + 'lipstick red': '#c0022f', + 'water blue': '#0e87cc', + 'brown grey': '#8d8468', + 'vibrant purple': '#ad03de', + 'baby green': '#8cff9e', + 'barf green': '#94ac02', + 'eggshell blue': '#c4fff7', + 'sandy yellow': '#fdee73', + 'cool green': '#33b864', + 'pale': '#fff9d0', + 'blue/grey': '#758da3', + 'hot magenta': '#f504c9', + 'greyblue': '#77a1b5', + 'purpley': '#8756e4', + 'baby shit green': '#889717', + 'brownish pink': '#c27e79', + 'dark aquamarine': '#017371', + 'diarrhea': '#9f8303', + 'light mustard': '#f7d560', + 'pale sky blue': '#bdf6fe', + 'turtle green': '#75b84f', + 'bright olive': '#9cbb04', + 'dark grey blue': '#29465b', + 'greeny brown': '#696006', + 'lemon green': '#adf802', + 'light periwinkle': '#c1c6fc', + 'seaweed green': '#35ad6b', + 'sunshine yellow': '#fffd37', + 'ugly purple': '#a442a0', + 'medium pink': '#f36196', + 'puke brown': '#947706', + 'very light pink': '#fff4f2', + 'viridian': '#1e9167', + 'bile': '#b5c306', + 'faded yellow': '#feff7f', + 'very pale green': '#cffdbc', + 'vibrant green': '#0add08', + 'bright lime': '#87fd05', + 'spearmint': '#1ef876', + 'light aquamarine': '#7bfdc7', + 'light sage': '#bcecac', + 'yellowgreen': '#bbf90f', + 'baby poo': '#ab9004', + 'dark seafoam': '#1fb57a', + 'deep teal': '#00555a', + 'heather': '#a484ac', + 'rust orange': '#c45508', + 'dirty blue': '#3f829d', + 'fern green': '#548d44', + 'bright lilac': '#c95efb', + 'weird green': '#3ae57f', + 'peacock blue': '#016795', + 'avocado green': '#87a922', + 'faded orange': '#f0944d', + 'grape purple': '#5d1451', + 'hot green': '#25ff29', + 'lime yellow': '#d0fe1d', + 'mango': '#ffa62b', + 'shamrock': '#01b44c', + 'bubblegum': '#ff6cb5', + 'purplish brown': '#6b4247', + 'vomit yellow': '#c7c10c', + 'pale cyan': '#b7fffa', + 'key lime': '#aeff6e', + 'tomato red': '#ec2d01', + 'lightgreen': '#76ff7b', + 'merlot': '#730039', + 'night blue': '#040348', + 'purpleish pink': '#df4ec8', + 'apple': '#6ecb3c', + 'baby poop green': '#8f9805', + 'green apple': '#5edc1f', + 'heliotrope': '#d94ff5', + 'yellow/green': '#c8fd3d', + 'almost black': '#070d0d', + 'cool blue': '#4984b8', + 'leafy green': '#51b73b', + 'mustard brown': '#ac7e04', + 'dusk': '#4e5481', + 'dull brown': '#876e4b', + 'frog green': '#58bc08', + 'vivid green': '#2fef10', + 'bright light green': '#2dfe54', + 'fluro green': '#0aff02', + 'kiwi': '#9cef43', + 'seaweed': '#18d17b', + 'navy green': '#35530a', + 'ultramarine blue': '#1805db', + 'iris': '#6258c4', + 'pastel orange': '#ff964f', + 'yellowish orange': '#ffab0f', + 'perrywinkle': '#8f8ce7', + 'tealish': '#24bca8', + 'dark plum': '#3f012c', + 'pear': '#cbf85f', + 'pinkish orange': '#ff724c', + 'midnight purple': '#280137', + 'light urple': '#b36ff6', + 'dark mint': '#48c072', + 'greenish tan': '#bccb7a', + 'light burgundy': '#a8415b', + 'turquoise blue': '#06b1c4', + 'ugly pink': '#cd7584', + 'sandy': '#f1da7a', + 'electric pink': '#ff0490', + 'muted purple': '#805b87', + 'mid green': '#50a747', + 'greyish': '#a8a495', + 'neon yellow': '#cfff04', + 'banana': '#ffff7e', + 'carnation pink': '#ff7fa7', + 'tomato': '#ef4026', + 'sea': '#3c9992', + 'muddy brown': '#886806', + 'turquoise green': '#04f489', + 'buff': '#fef69e', + 'fawn': '#cfaf7b', + 'muted blue': '#3b719f', + 'pale rose': '#fdc1c5', + 'dark mint green': '#20c073', + 'amethyst': '#9b5fc0', + 'blue/green': '#0f9b8e', + 'chestnut': '#742802', + 'sick green': '#9db92c', + 'pea': '#a4bf20', + 'rusty orange': '#cd5909', + 'stone': '#ada587', + 'rose red': '#be013c', + 'pale aqua': '#b8ffeb', + 'deep orange': '#dc4d01', + 'earth': '#a2653e', + 'mossy green': '#638b27', + 'grassy green': '#419c03', + 'pale lime green': '#b1ff65', + 'light grey blue': '#9dbcd4', + 'pale grey': '#fdfdfe', + 'asparagus': '#77ab56', + 'blueberry': '#464196', + 'purple red': '#990147', + 'pale lime': '#befd73', + 'greenish teal': '#32bf84', + 'caramel': '#af6f09', + 'deep magenta': '#a0025c', + 'light peach': '#ffd8b1', + 'milk chocolate': '#7f4e1e', + 'ocher': '#bf9b0c', + 'off green': '#6ba353', + 'purply pink': '#f075e6', + 'lightblue': '#7bc8f6', + 'dusky blue': '#475f94', + 'golden': '#f5bf03', + 'light beige': '#fffeb6', + 'butter yellow': '#fffd74', + 'dusky purple': '#895b7b', + 'french blue': '#436bad', + 'ugly yellow': '#d0c101', + 'greeny yellow': '#c6f808', + 'orangish red': '#f43605', + 'shamrock green': '#02c14d', + 'orangish brown': '#b25f03', + 'tree green': '#2a7e19', + 'deep violet': '#490648', + 'gunmetal': '#536267', + 'blue/purple': '#5a06ef', + 'cherry': '#cf0234', + 'sandy brown': '#c4a661', + 'warm grey': '#978a84', + 'dark indigo': '#1f0954', + 'midnight': '#03012d', + 'bluey green': '#2bb179', + 'grey pink': '#c3909b', + 'soft purple': '#a66fb5', + 'blood': '#770001', + 'brown red': '#922b05', + 'medium grey': '#7d7f7c', + 'berry': '#990f4b', + 'poo': '#8f7303', + 'purpley pink': '#c83cb9', + 'light salmon': '#fea993', + 'snot': '#acbb0d', + 'easter purple': '#c071fe', + 'light yellow green': '#ccfd7f', + 'dark navy blue': '#00022e', + 'drab': '#828344', + 'light rose': '#ffc5cb', + 'rouge': '#ab1239', + 'purplish red': '#b0054b', + 'slime green': '#99cc04', + 'baby poop': '#937c00', + 'irish green': '#019529', + 'pink/purple': '#ef1de7', + 'dark navy': '#000435', + 'greeny blue': '#42b395', + 'light plum': '#9d5783', + 'pinkish grey': '#c8aca9', + 'dirty orange': '#c87606', + 'rust red': '#aa2704', + 'pale lilac': '#e4cbff', + 'orangey red': '#fa4224', + 'primary blue': '#0804f9', + 'kermit green': '#5cb200', + 'brownish purple': '#76424e', + 'murky green': '#6c7a0e', + 'wheat': '#fbdd7e', + 'very dark purple': '#2a0134', + 'bottle green': '#044a05', + 'watermelon': '#fd4659', + 'deep sky blue': '#0d75f8', + 'fire engine red': '#fe0002', + 'yellow ochre': '#cb9d06', + 'pumpkin orange': '#fb7d07', + 'pale olive': '#b9cc81', + 'light lilac': '#edc8ff', + 'lightish green': '#61e160', + 'carolina blue': '#8ab8fe', + 'mulberry': '#920a4e', + 'shocking pink': '#fe02a2', + 'auburn': '#9a3001', + 'bright lime green': '#65fe08', + 'celadon': '#befdb7', + 'pinkish brown': '#b17261', + 'poo brown': '#885f01', + 'bright sky blue': '#02ccfe', + 'celery': '#c1fd95', + 'dirt brown': '#836539', + 'strawberry': '#fb2943', + 'dark lime': '#84b701', + 'copper': '#b66325', + 'medium brown': '#7f5112', + 'muted green': '#5fa052', + "robin's egg": '#6dedfd', + 'bright aqua': '#0bf9ea', + 'bright lavender': '#c760ff', + 'ivory': '#ffffcb', + 'very light purple': '#f6cefc', + 'light navy': '#155084', + 'pink red': '#f5054f', + 'olive brown': '#645403', + 'poop brown': '#7a5901', + 'mustard green': '#a8b504', + 'ocean green': '#3d9973', + 'very dark blue': '#000133', + 'dusty green': '#76a973', + 'light navy blue': '#2e5a88', + 'minty green': '#0bf77d', + 'adobe': '#bd6c48', + 'barney': '#ac1db8', + 'jade green': '#2baf6a', + 'bright light blue': '#26f7fd', + 'light lime': '#aefd6c', + 'dark khaki': '#9b8f55', + 'orange yellow': '#ffad01', + 'ocre': '#c69c04', + 'maize': '#f4d054', + 'faded pink': '#de9dac', + 'british racing green': '#05480d', + 'sandstone': '#c9ae74', + 'mud brown': '#60460f', + 'light sea green': '#98f6b0', + 'robin egg blue': '#8af1fe', + 'aqua marine': '#2ee8bb', + 'dark sea green': '#11875d', + 'soft pink': '#fdb0c0', + 'orangey brown': '#b16002', + 'cherry red': '#f7022a', + 'burnt yellow': '#d5ab09', + 'brownish grey': '#86775f', + 'camel': '#c69f59', + 'purplish grey': '#7a687f', + 'marine': '#042e60', + 'greyish pink': '#c88d94', + 'pale turquoise': '#a5fbd5', + 'pastel yellow': '#fffe71', + 'bluey purple': '#6241c7', + 'canary yellow': '#fffe40', + 'faded red': '#d3494e', + 'sepia': '#985e2b', + 'coffee': '#a6814c', + 'bright magenta': '#ff08e8', + 'mocha': '#9d7651', + 'ecru': '#feffca', + 'purpleish': '#98568d', + 'cranberry': '#9e003a', + 'darkish green': '#287c37', + 'brown orange': '#b96902', + 'dusky rose': '#ba6873', + 'melon': '#ff7855', + 'sickly green': '#94b21c', + 'silver': '#c5c9c7', + 'purply blue': '#661aee', + 'purpleish blue': '#6140ef', + 'hospital green': '#9be5aa', + 'shit brown': '#7b5804', + 'mid blue': '#276ab3', + 'amber': '#feb308', + 'easter green': '#8cfd7e', + 'soft blue': '#6488ea', + 'cerulean blue': '#056eee', + 'golden brown': '#b27a01', + 'bright turquoise': '#0ffef9', + 'red pink': '#fa2a55', + 'red purple': '#820747', + 'greyish brown': '#7a6a4f', + 'vermillion': '#f4320c', + 'russet': '#a13905', + 'steel grey': '#6f828a', + 'lighter purple': '#a55af4', + 'bright violet': '#ad0afd', + 'prussian blue': '#004577', + 'slate green': '#658d6d', + 'dirty pink': '#ca7b80', + 'dark blue green': '#005249', + 'pine': '#2b5d34', + 'yellowy green': '#bff128', + 'dark gold': '#b59410', + 'bluish': '#2976bb', + 'darkish blue': '#014182', + 'dull red': '#bb3f3f', + 'pinky red': '#fc2647', + 'bronze': '#a87900', + 'pale teal': '#82cbb2', + 'military green': '#667c3e', + 'barbie pink': '#fe46a5', + 'bubblegum pink': '#fe83cc', + 'pea soup green': '#94a617', + 'dark mustard': '#a88905', + 'shit': '#7f5f00', + 'medium purple': '#9e43a2', + 'very dark green': '#062e03', + 'dirt': '#8a6e45', + 'dusky pink': '#cc7a8b', + 'red violet': '#9e0168', + 'lemon yellow': '#fdff38', + 'pistachio': '#c0fa8b', + 'dull yellow': '#eedc5b', + 'dark lime green': '#7ebd01', + 'denim blue': '#3b5b92', + 'teal blue': '#01889f', + 'lightish blue': '#3d7afd', + 'purpley blue': '#5f34e7', + 'light indigo': '#6d5acf', + 'swamp green': '#748500', + 'brown green': '#706c11', + 'dark maroon': '#3c0008', + 'hot purple': '#cb00f5', + 'dark forest green': '#002d04', + 'faded blue': '#658cbb', + 'drab green': '#749551', + 'light lime green': '#b9ff66', + 'snot green': '#9dc100', + 'yellowish': '#faee66', + 'light blue green': '#7efbb3', + 'bordeaux': '#7b002c', + 'light mauve': '#c292a1', + 'ocean': '#017b92', + 'marigold': '#fcc006', + 'muddy green': '#657432', + 'dull orange': '#d8863b', + 'steel': '#738595', + 'electric purple': '#aa23ff', + 'fluorescent green': '#08ff08', + 'yellowish brown': '#9b7a01', + 'blush': '#f29e8e', + 'soft green': '#6fc276', + 'bright orange': '#ff5b00', + 'lemon': '#fdff52', + 'purple grey': '#866f85', + 'acid green': '#8ffe09', + 'pale lavender': '#eecffe', + 'violet blue': '#510ac9', + 'light forest green': '#4f9153', + 'burnt red': '#9f2305', + 'khaki green': '#728639', + 'cerise': '#de0c62', + 'faded purple': '#916e99', + 'apricot': '#ffb16d', + 'dark olive green': '#3c4d03', + 'grey brown': '#7f7053', + 'green grey': '#77926f', + 'true blue': '#010fcc', + 'pale violet': '#ceaefa', + 'periwinkle blue': '#8f99fb', + 'light sky blue': '#c6fcff', + 'blurple': '#5539cc', + 'green brown': '#544e03', + 'bluegreen': '#017a79', + 'bright teal': '#01f9c6', + 'brownish yellow': '#c9b003', + 'pea soup': '#929901', + 'forest': '#0b5509', + 'barney purple': '#a00498', + 'ultramarine': '#2000b1', + 'purplish': '#94568c', + 'puke yellow': '#c2be0e', + 'bluish grey': '#748b97', + 'dark periwinkle': '#665fd1', + 'dark lilac': '#9c6da5', + 'reddish': '#c44240', + 'light maroon': '#a24857', + 'dusty purple': '#825f87', + 'terra cotta': '#c9643b', + 'avocado': '#90b134', + 'marine blue': '#01386a', + 'teal green': '#25a36f', + 'slate grey': '#59656d', + 'lighter green': '#75fd63', + 'electric green': '#21fc0d', + 'dusty blue': '#5a86ad', + 'golden yellow': '#fec615', + 'bright yellow': '#fffd01', + 'light lavender': '#dfc5fe', + 'umber': '#b26400', + 'poop': '#7f5e00', + 'dark peach': '#de7e5d', + 'jungle green': '#048243', + 'eggshell': '#ffffd4', + 'denim': '#3b638c', + 'yellow brown': '#b79400', + 'dull purple': '#84597e', + 'chocolate brown': '#411900', + 'wine red': '#7b0323', + 'neon blue': '#04d9ff', + 'dirty green': '#667e2c', + 'light tan': '#fbeeac', + 'ice blue': '#d7fffe', + 'cadet blue': '#4e7496', + 'dark mauve': '#874c62', + 'very light blue': '#d5ffff', + 'grey purple': '#826d8c', + 'pastel pink': '#ffbacd', + 'very light green': '#d1ffbd', + 'dark sky blue': '#448ee4', + 'evergreen': '#05472a', + 'dull pink': '#d5869d', + 'aubergine': '#3d0734', + 'mahogany': '#4a0100', + 'reddish orange': '#f8481c', + 'deep green': '#02590f', + 'vomit green': '#89a203', + 'purple pink': '#e03fd8', + 'dusty pink': '#d58a94', + 'faded green': '#7bb274', + 'camo green': '#526525', + 'pinky purple': '#c94cbe', + 'pink purple': '#db4bda', + 'brownish red': '#9e3623', + 'dark rose': '#b5485d', + 'mud': '#735c12', + 'brownish': '#9c6d57', + 'emerald green': '#028f1e', + 'pale brown': '#b1916e', + 'dull blue': '#49759c', + 'burnt umber': '#a0450e', + 'medium green': '#39ad48', + 'clay': '#b66a50', + 'light aqua': '#8cffdb', + 'light olive green': '#a4be5c', + 'brownish orange': '#cb7723', + 'dark aqua': '#05696b', + 'purplish pink': '#ce5dae', + 'dark salmon': '#c85a53', + 'greenish grey': '#96ae8d', + 'jade': '#1fa774', + 'ugly green': '#7a9703', + 'dark beige': '#ac9362', + 'emerald': '#01a049', + 'pale red': '#d9544d', + 'light magenta': '#fa5ff7', + 'sky': '#82cafc', + 'light cyan': '#acfffc', + 'yellow orange': '#fcb001', + 'reddish purple': '#910951', + 'reddish pink': '#fe2c54', + 'orchid': '#c875c4', + 'dirty yellow': '#cdc50a', + 'orange red': '#fd411e', + 'deep red': '#9a0200', + 'orange brown': '#be6400', + 'cobalt blue': '#030aa7', + 'neon pink': '#fe019a', + 'rose pink': '#f7879a', + 'greyish purple': '#887191', + 'raspberry': '#b00149', + 'aqua green': '#12e193', + 'salmon pink': '#fe7b7c', + 'tangerine': '#ff9408', + 'brownish green': '#6a6e09', + 'red brown': '#8b2e16', + 'greenish brown': '#696112', + 'pumpkin': '#e17701', + 'pine green': '#0a481e', + 'charcoal': '#343837', + 'baby pink': '#ffb7ce', + 'cornflower': '#6a79f7', + 'blue violet': '#5d06e9', + 'chocolate': '#3d1c02', + 'greyish green': '#82a67d', + 'scarlet': '#be0119', + 'green yellow': '#c9ff27', + 'dark olive': '#373e02', + 'sienna': '#a9561e', + 'pastel purple': '#caa0ff', + 'terracotta': '#ca6641', + 'aqua blue': '#02d8e9', + 'sage green': '#88b378', + 'blood red': '#980002', + 'deep pink': '#cb0162', + 'grass': '#5cac2d', + 'moss': '#769958', + 'pastel blue': '#a2bffe', + 'bluish green': '#10a674', + 'green blue': '#06b48b', + 'dark tan': '#af884a', + 'greenish blue': '#0b8b87', + 'pale orange': '#ffa756', + 'vomit': '#a2a415', + 'forrest green': '#154406', + 'dark lavender': '#856798', + 'dark violet': '#34013f', + 'purple blue': '#632de9', + 'dark cyan': '#0a888a', + 'olive drab': '#6f7632', + 'pinkish': '#d46a7e', + 'cobalt': '#1e488f', + 'neon purple': '#bc13fe', + 'light turquoise': '#7ef4cc', + 'apple green': '#76cd26', + 'dull green': '#74a662', + 'wine': '#80013f', + 'powder blue': '#b1d1fc', + 'off white': '#ffffe4', + 'electric blue': '#0652ff', + 'dark turquoise': '#045c5a', + 'blue purple': '#5729ce', + 'azure': '#069af3', + 'bright red': '#ff000d', + 'pinkish red': '#f10c45', + 'cornflower blue': '#5170d7', + 'light olive': '#acbf69', + 'grape': '#6c3461', + 'greyish blue': '#5e819d', + 'purplish blue': '#601ef9', + 'yellowish green': '#b0dd16', + 'greenish yellow': '#cdfd02', + 'medium blue': '#2c6fbb', + 'dusty rose': '#c0737a', + 'light violet': '#d6b4fc', + 'midnight blue': '#020035', + 'bluish purple': '#703be7', + 'red orange': '#fd3c06', + 'dark magenta': '#960056', + 'greenish': '#40a368', + 'ocean blue': '#03719c', + 'coral': '#fc5a50', + 'cream': '#ffffc2', + 'reddish brown': '#7f2b0a', + 'burnt sienna': '#b04e0f', + 'brick': '#a03623', + 'sage': '#87ae73', + 'grey green': '#789b73', + 'white': '#ffffff', + "robin's egg blue": '#98eff9', + 'moss green': '#658b38', + 'steel blue': '#5a7d9a', + 'eggplant': '#380835', + 'light yellow': '#fffe7a', + 'leaf green': '#5ca904', + 'light grey': '#d8dcd6', + 'puke': '#a5a502', + 'pinkish purple': '#d648d7', + 'sea blue': '#047495', + 'pale purple': '#b790d4', + 'slate blue': '#5b7c99', + 'blue grey': '#607c8e', + 'hunter green': '#0b4008', + 'fuchsia': '#ed0dd9', + 'crimson': '#8c000f', + 'pale yellow': '#ffff84', + 'ochre': '#bf9005', + 'mustard yellow': '#d2bd0a', + 'light red': '#ff474c', + 'cerulean': '#0485d1', + 'pale pink': '#ffcfdc', + 'deep blue': '#040273', + 'rust': '#a83c09', + 'light teal': '#90e4c1', + 'slate': '#516572', + 'goldenrod': '#fac205', + 'dark yellow': '#d5b60a', + 'dark grey': '#363737', + 'army green': '#4b5d16', + 'grey blue': '#6b8ba4', + 'seafoam': '#80f9ad', + 'puce': '#a57e52', + 'spring green': '#a9f971', + 'dark orange': '#c65102', + 'sand': '#e2ca76', + 'pastel green': '#b0ff9d', + 'mint': '#9ffeb0', + 'light orange': '#fdaa48', + 'bright pink': '#fe01b1', + 'chartreuse': '#c1f80a', + 'deep purple': '#36013f', + 'dark brown': '#341c02', + 'taupe': '#b9a281', + 'pea green': '#8eab12', + 'puke green': '#9aae07', + 'kelly green': '#02ab2e', + 'seafoam green': '#7af9ab', + 'blue green': '#137e6d', + 'khaki': '#aaa662', + 'burgundy': '#610023', + 'dark teal': '#014d4e', + 'brick red': '#8f1402', + 'royal purple': '#4b006e', + 'plum': '#580f41', + 'mint green': '#8fff9f', + 'gold': '#dbb40c', + 'baby blue': '#a2cffe', + 'yellow green': '#c0fb2d', + 'bright purple': '#be03fd', + 'dark red': '#840000', + 'pale blue': '#d0fefe', + 'grass green': '#3f9b0b', + 'navy': '#01153e', + 'aquamarine': '#04d8b2', + 'burnt orange': '#c04e01', + 'neon green': '#0cff0c', + 'bright blue': '#0165fc', + 'rose': '#cf6275', + 'light pink': '#ffd1df', + 'mustard': '#ceb301', + 'indigo': '#380282', + 'lime': '#aaff32', + 'sea green': '#53fca1', + 'periwinkle': '#8e82fe', + 'dark pink': '#cb416b', + 'olive green': '#677a04', + 'peach': '#ffb07c', + 'pale green': '#c7fdb5', + 'light brown': '#ad8150', + 'hot pink': '#ff028d', + 'black': '#000000', + 'lilac': '#cea2fd', + 'navy blue': '#001146', + 'royal blue': '#0504aa', + 'beige': '#e6daa6', + 'salmon': '#ff796c', + 'olive': '#6e750e', + 'maroon': '#650021', + 'bright green': '#01ff07', + 'dark purple': '#35063e', + 'mauve': '#ae7181', + 'forest green': '#06470c', + 'aqua': '#13eac9', + 'cyan': '#00ffff', + 'tan': '#d1b26f', + 'dark blue': '#00035b', + 'lavender': '#c79fef', + 'turquoise': '#06c2ac', + 'dark green': '#033500', + 'violet': '#9a0eea', + 'light purple': '#bf77f6', + 'lime green': '#89fe05', + 'grey': '#929591', + 'sky blue': '#75bbfd', + 'yellow': '#ffff14', + 'magenta': '#c20078', + 'light green': '#96f97b', + 'orange': '#f97306', + 'teal': '#029386', + 'light blue': '#95d0fc', + 'red': '#e50000', + 'brown': '#653700', + 'pink': '#ff81c0', + 'blue': '#0343df', + 'green': '#15b01a', + 'purple': '#7e1e9c'} + +# Normalize name to "xkcd:" to avoid name collisions. +XKCD_COLORS = {'xkcd:' + name: value for name, value in XKCD_COLORS.items()} + + +# https://drafts.csswg.org/css-color-4/#named-colors +CSS4_COLORS = { + 'aliceblue': '#F0F8FF', + 'antiquewhite': '#FAEBD7', + 'aqua': '#00FFFF', + 'aquamarine': '#7FFFD4', + 'azure': '#F0FFFF', + 'beige': '#F5F5DC', + 'bisque': '#FFE4C4', + 'black': '#000000', + 'blanchedalmond': '#FFEBCD', + 'blue': '#0000FF', + 'blueviolet': '#8A2BE2', + 'brown': '#A52A2A', + 'burlywood': '#DEB887', + 'cadetblue': '#5F9EA0', + 'chartreuse': '#7FFF00', + 'chocolate': '#D2691E', + 'coral': '#FF7F50', + 'cornflowerblue': '#6495ED', + 'cornsilk': '#FFF8DC', + 'crimson': '#DC143C', + 'cyan': '#00FFFF', + 'darkblue': '#00008B', + 'darkcyan': '#008B8B', + 'darkgoldenrod': '#B8860B', + 'darkgray': '#A9A9A9', + 'darkgreen': '#006400', + 'darkgrey': '#A9A9A9', + 'darkkhaki': '#BDB76B', + 'darkmagenta': '#8B008B', + 'darkolivegreen': '#556B2F', + 'darkorange': '#FF8C00', + 'darkorchid': '#9932CC', + 'darkred': '#8B0000', + 'darksalmon': '#E9967A', + 'darkseagreen': '#8FBC8F', + 'darkslateblue': '#483D8B', + 'darkslategray': '#2F4F4F', + 'darkslategrey': '#2F4F4F', + 'darkturquoise': '#00CED1', + 'darkviolet': '#9400D3', + 'deeppink': '#FF1493', + 'deepskyblue': '#00BFFF', + 'dimgray': '#696969', + 'dimgrey': '#696969', + 'dodgerblue': '#1E90FF', + 'firebrick': '#B22222', + 'floralwhite': '#FFFAF0', + 'forestgreen': '#228B22', + 'fuchsia': '#FF00FF', + 'gainsboro': '#DCDCDC', + 'ghostwhite': '#F8F8FF', + 'gold': '#FFD700', + 'goldenrod': '#DAA520', + 'gray': '#808080', + 'green': '#008000', + 'greenyellow': '#ADFF2F', + 'grey': '#808080', + 'honeydew': '#F0FFF0', + 'hotpink': '#FF69B4', + 'indianred': '#CD5C5C', + 'indigo': '#4B0082', + 'ivory': '#FFFFF0', + 'khaki': '#F0E68C', + 'lavender': '#E6E6FA', + 'lavenderblush': '#FFF0F5', + 'lawngreen': '#7CFC00', + 'lemonchiffon': '#FFFACD', + 'lightblue': '#ADD8E6', + 'lightcoral': '#F08080', + 'lightcyan': '#E0FFFF', + 'lightgoldenrodyellow': '#FAFAD2', + 'lightgray': '#D3D3D3', + 'lightgreen': '#90EE90', + 'lightgrey': '#D3D3D3', + 'lightpink': '#FFB6C1', + 'lightsalmon': '#FFA07A', + 'lightseagreen': '#20B2AA', + 'lightskyblue': '#87CEFA', + 'lightslategray': '#778899', + 'lightslategrey': '#778899', + 'lightsteelblue': '#B0C4DE', + 'lightyellow': '#FFFFE0', + 'lime': '#00FF00', + 'limegreen': '#32CD32', + 'linen': '#FAF0E6', + 'magenta': '#FF00FF', + 'maroon': '#800000', + 'mediumaquamarine': '#66CDAA', + 'mediumblue': '#0000CD', + 'mediumorchid': '#BA55D3', + 'mediumpurple': '#9370DB', + 'mediumseagreen': '#3CB371', + 'mediumslateblue': '#7B68EE', + 'mediumspringgreen': '#00FA9A', + 'mediumturquoise': '#48D1CC', + 'mediumvioletred': '#C71585', + 'midnightblue': '#191970', + 'mintcream': '#F5FFFA', + 'mistyrose': '#FFE4E1', + 'moccasin': '#FFE4B5', + 'navajowhite': '#FFDEAD', + 'navy': '#000080', + 'oldlace': '#FDF5E6', + 'olive': '#808000', + 'olivedrab': '#6B8E23', + 'orange': '#FFA500', + 'orangered': '#FF4500', + 'orchid': '#DA70D6', + 'palegoldenrod': '#EEE8AA', + 'palegreen': '#98FB98', + 'paleturquoise': '#AFEEEE', + 'palevioletred': '#DB7093', + 'papayawhip': '#FFEFD5', + 'peachpuff': '#FFDAB9', + 'peru': '#CD853F', + 'pink': '#FFC0CB', + 'plum': '#DDA0DD', + 'powderblue': '#B0E0E6', + 'purple': '#800080', + 'rebeccapurple': '#663399', + 'red': '#FF0000', + 'rosybrown': '#BC8F8F', + 'royalblue': '#4169E1', + 'saddlebrown': '#8B4513', + 'salmon': '#FA8072', + 'sandybrown': '#F4A460', + 'seagreen': '#2E8B57', + 'seashell': '#FFF5EE', + 'sienna': '#A0522D', + 'silver': '#C0C0C0', + 'skyblue': '#87CEEB', + 'slateblue': '#6A5ACD', + 'slategray': '#708090', + 'slategrey': '#708090', + 'snow': '#FFFAFA', + 'springgreen': '#00FF7F', + 'steelblue': '#4682B4', + 'tan': '#D2B48C', + 'teal': '#008080', + 'thistle': '#D8BFD8', + 'tomato': '#FF6347', + 'turquoise': '#40E0D0', + 'violet': '#EE82EE', + 'wheat': '#F5DEB3', + 'white': '#FFFFFF', + 'whitesmoke': '#F5F5F5', + 'yellow': '#FFFF00', + 'yellowgreen': '#9ACD32'} diff --git a/.venv/lib/python3.9/site-packages/matplotlib/_constrained_layout.py b/.venv/lib/python3.9/site-packages/matplotlib/_constrained_layout.py new file mode 100644 index 00000000..d360eb66 --- /dev/null +++ b/.venv/lib/python3.9/site-packages/matplotlib/_constrained_layout.py @@ -0,0 +1,713 @@ +""" +Adjust subplot layouts so that there are no overlapping axes or axes +decorations. All axes decorations are dealt with (labels, ticks, titles, +ticklabels) and some dependent artists are also dealt with (colorbar, +suptitle). + +Layout is done via `~matplotlib.gridspec`, with one constraint per gridspec, +so it is possible to have overlapping axes if the gridspecs overlap (i.e. +using `~matplotlib.gridspec.GridSpecFromSubplotSpec`). Axes placed using +``figure.subplots()`` or ``figure.add_subplots()`` will participate in the +layout. Axes manually placed via ``figure.add_axes()`` will not. + +See Tutorial: :doc:`/tutorials/intermediate/constrainedlayout_guide` +""" + +import logging + +import numpy as np + +from matplotlib import _api +import matplotlib.transforms as mtransforms +import matplotlib._layoutgrid as mlayoutgrid + + +_log = logging.getLogger(__name__) + +""" +General idea: +------------- + +First, a figure has a gridspec that divides the figure into nrows and ncols, +with heights and widths set by ``height_ratios`` and ``width_ratios``, +often just set to 1 for an equal grid. + +Subplotspecs that are derived from this gridspec can contain either a +``SubPanel``, a ``GridSpecFromSubplotSpec``, or an axes. The ``SubPanel`` and +``GridSpecFromSubplotSpec`` are dealt with recursively and each contain an +analogous layout. + +Each ``GridSpec`` has a ``_layoutgrid`` attached to it. The ``_layoutgrid`` +has the same logical layout as the ``GridSpec``. Each row of the grid spec +has a top and bottom "margin" and each column has a left and right "margin". +The "inner" height of each row is constrained to be the same (or as modified +by ``height_ratio``), and the "inner" width of each column is +constrained to be the same (as modified by ``width_ratio``), where "inner" +is the width or height of each column/row minus the size of the margins. + +Then the size of the margins for each row and column are determined as the +max width of the decorators on each axes that has decorators in that margin. +For instance, a normal axes would have a left margin that includes the +left ticklabels, and the ylabel if it exists. The right margin may include a +colorbar, the bottom margin the xaxis decorations, and the top margin the +title. + +With these constraints, the solver then finds appropriate bounds for the +columns and rows. It's possible that the margins take up the whole figure, +in which case the algorithm is not applied and a warning is raised. + +See the tutorial doc:`/tutorials/intermediate/constrainedlayout_guide` +for more discussion of the algorithm with examples. +""" + + +###################################################### +def do_constrained_layout(fig, renderer, h_pad, w_pad, + hspace=None, wspace=None): + """ + Do the constrained_layout. Called at draw time in + ``figure.constrained_layout()`` + + Parameters + ---------- + fig : Figure + ``Figure`` instance to do the layout in. + + renderer : Renderer + Renderer to use. + + h_pad, w_pad : float + Padding around the axes elements in figure-normalized units. + + hspace, wspace : float + Fraction of the figure to dedicate to space between the + axes. These are evenly spread between the gaps between the axes. + A value of 0.2 for a three-column layout would have a space + of 0.1 of the figure width between each column. + If h/wspace < h/w_pad, then the pads are used instead. + + Returns + ------- + layoutgrid : private debugging structure + """ + + # make layoutgrid tree... + layoutgrids = make_layoutgrids(fig, None) + if not layoutgrids['hasgrids']: + _api.warn_external('There are no gridspecs with layoutgrids. ' + 'Possibly did not call parent GridSpec with the' + ' "figure" keyword') + return + + for _ in range(2): + # do the algorithm twice. This has to be done because decorations + # change size after the first re-position (i.e. x/yticklabels get + # larger/smaller). This second reposition tends to be much milder, + # so doing twice makes things work OK. + + # make margins for all the axes and subfigures in the + # figure. Add margins for colorbars... + make_layout_margins(layoutgrids, fig, renderer, h_pad=h_pad, + w_pad=w_pad, hspace=hspace, wspace=wspace) + make_margin_suptitles(layoutgrids, fig, renderer, h_pad=h_pad, + w_pad=w_pad) + + # if a layout is such that a columns (or rows) margin has no + # constraints, we need to make all such instances in the grid + # match in margin size. + match_submerged_margins(layoutgrids, fig) + + # update all the variables in the layout. + layoutgrids[fig].update_variables() + + if check_no_collapsed_axes(layoutgrids, fig): + reposition_axes(layoutgrids, fig, renderer, h_pad=h_pad, + w_pad=w_pad, hspace=hspace, wspace=wspace) + else: + _api.warn_external('constrained_layout not applied because ' + 'axes sizes collapsed to zero. Try making ' + 'figure larger or axes decorations smaller.') + reset_margins(layoutgrids, fig) + return layoutgrids + + +def make_layoutgrids(fig, layoutgrids): + """ + Make the layoutgrid tree. + + (Sub)Figures get a layoutgrid so we can have figure margins. + + Gridspecs that are attached to axes get a layoutgrid so axes + can have margins. + """ + + if layoutgrids is None: + layoutgrids = dict() + layoutgrids['hasgrids'] = False + if not hasattr(fig, '_parent'): + # top figure + layoutgrids[fig] = mlayoutgrid.LayoutGrid(parent=None, name='figlb') + else: + # subfigure + gs = fig._subplotspec.get_gridspec() + # it is possible the gridspec containing this subfigure hasn't + # been added to the tree yet: + layoutgrids = make_layoutgrids_gs(layoutgrids, gs) + # add the layoutgrid for the subfigure: + parentlb = layoutgrids[gs] + layoutgrids[fig] = mlayoutgrid.LayoutGrid( + parent=parentlb, + name='panellb', + parent_inner=True, + nrows=1, ncols=1, + parent_pos=(fig._subplotspec.rowspan, + fig._subplotspec.colspan)) + # recursively do all subfigures in this figure... + for sfig in fig.subfigs: + layoutgrids = make_layoutgrids(sfig, layoutgrids) + + # for each axes at the local level add its gridspec: + for ax in fig._localaxes.as_list(): + if hasattr(ax, 'get_subplotspec'): + gs = ax.get_subplotspec().get_gridspec() + layoutgrids = make_layoutgrids_gs(layoutgrids, gs) + + return layoutgrids + + +def make_layoutgrids_gs(layoutgrids, gs): + """ + Make the layoutgrid for a gridspec (and anything nested in the gridspec) + """ + + if gs in layoutgrids or gs.figure is None: + return layoutgrids + # in order to do constrained_layout there has to be at least *one* + # gridspec in the tree: + layoutgrids['hasgrids'] = True + if not hasattr(gs, '_subplot_spec'): + # normal gridspec + parent = layoutgrids[gs.figure] + layoutgrids[gs] = mlayoutgrid.LayoutGrid( + parent=parent, + parent_inner=True, + name='gridspec', + ncols=gs._ncols, nrows=gs._nrows, + width_ratios=gs.get_width_ratios(), + height_ratios=gs.get_height_ratios()) + else: + # this is a gridspecfromsubplotspec: + subplot_spec = gs._subplot_spec + parentgs = subplot_spec.get_gridspec() + # if a nested gridspec it is possible the parent is not in there yet: + if parentgs not in layoutgrids: + layoutgrids = make_layoutgrids_gs(layoutgrids, parentgs) + subspeclb = layoutgrids[parentgs] + # gridspecfromsubplotspec need an outer container: + if f'{gs}top' not in layoutgrids: + layoutgrids[f'{gs}top'] = mlayoutgrid.LayoutGrid( + parent=subspeclb, + name='top', + nrows=1, ncols=1, + parent_pos=(subplot_spec.rowspan, subplot_spec.colspan)) + layoutgrids[gs] = mlayoutgrid.LayoutGrid( + parent=layoutgrids[f'{gs}top'], + name='gridspec', + nrows=gs._nrows, ncols=gs._ncols, + width_ratios=gs.get_width_ratios(), + height_ratios=gs.get_height_ratios()) + return layoutgrids + + +def check_no_collapsed_axes(layoutgrids, fig): + """ + Check that no axes have collapsed to zero size. + """ + for sfig in fig.subfigs: + ok = check_no_collapsed_axes(layoutgrids, sfig) + if not ok: + return False + + for ax in fig.axes: + if hasattr(ax, 'get_subplotspec'): + gs = ax.get_subplotspec().get_gridspec() + if gs in layoutgrids: + lg = layoutgrids[gs] + for i in range(gs.nrows): + for j in range(gs.ncols): + bb = lg.get_inner_bbox(i, j) + if bb.width <= 0 or bb.height <= 0: + return False + return True + + +def get_margin_from_padding(obj, *, w_pad=0, h_pad=0, + hspace=0, wspace=0): + + ss = obj._subplotspec + gs = ss.get_gridspec() + + if hasattr(gs, 'hspace'): + _hspace = (gs.hspace if gs.hspace is not None else hspace) + _wspace = (gs.wspace if gs.wspace is not None else wspace) + else: + _hspace = (gs._hspace if gs._hspace is not None else hspace) + _wspace = (gs._wspace if gs._wspace is not None else wspace) + + _wspace = _wspace / 2 + _hspace = _hspace / 2 + + nrows, ncols = gs.get_geometry() + # there are two margins for each direction. The "cb" + # margins are for pads and colorbars, the non-"cb" are + # for the axes decorations (labels etc). + margin = {'leftcb': w_pad, 'rightcb': w_pad, + 'bottomcb': h_pad, 'topcb': h_pad, + 'left': 0, 'right': 0, + 'top': 0, 'bottom': 0} + if _wspace / ncols > w_pad: + if ss.colspan.start > 0: + margin['leftcb'] = _wspace / ncols + if ss.colspan.stop < ncols: + margin['rightcb'] = _wspace / ncols + if _hspace / nrows > h_pad: + if ss.rowspan.stop < nrows: + margin['bottomcb'] = _hspace / nrows + if ss.rowspan.start > 0: + margin['topcb'] = _hspace / nrows + + return margin + + +def make_layout_margins(layoutgrids, fig, renderer, *, w_pad=0, h_pad=0, + hspace=0, wspace=0): + """ + For each axes, make a margin between the *pos* layoutbox and the + *axes* layoutbox be a minimum size that can accommodate the + decorations on the axis. + + Then make room for colorbars. + """ + for sfig in fig.subfigs: # recursively make child panel margins + ss = sfig._subplotspec + make_layout_margins(layoutgrids, sfig, renderer, + w_pad=w_pad, h_pad=h_pad, + hspace=hspace, wspace=wspace) + + margins = get_margin_from_padding(sfig, w_pad=0, h_pad=0, + hspace=hspace, wspace=wspace) + layoutgrids[sfig].parent.edit_outer_margin_mins(margins, ss) + + for ax in fig._localaxes.as_list(): + if not hasattr(ax, 'get_subplotspec') or not ax.get_in_layout(): + continue + + ss = ax.get_subplotspec() + gs = ss.get_gridspec() + + if gs not in layoutgrids: + return + + margin = get_margin_from_padding(ax, w_pad=w_pad, h_pad=h_pad, + hspace=hspace, wspace=wspace) + pos, bbox = get_pos_and_bbox(ax, renderer) + # the margin is the distance between the bounding box of the axes + # and its position (plus the padding from above) + margin['left'] += pos.x0 - bbox.x0 + margin['right'] += bbox.x1 - pos.x1 + # remember that rows are ordered from top: + margin['bottom'] += pos.y0 - bbox.y0 + margin['top'] += bbox.y1 - pos.y1 + + # make margin for colorbars. These margins go in the + # padding margin, versus the margin for axes decorators. + for cbax in ax._colorbars: + # note pad is a fraction of the parent width... + pad = colorbar_get_pad(layoutgrids, cbax) + # colorbars can be child of more than one subplot spec: + cbp_rspan, cbp_cspan = get_cb_parent_spans(cbax) + loc = cbax._colorbar_info['location'] + cbpos, cbbbox = get_pos_and_bbox(cbax, renderer) + if loc == 'right': + if cbp_cspan.stop == ss.colspan.stop: + # only increase if the colorbar is on the right edge + margin['rightcb'] += cbbbox.width + pad + elif loc == 'left': + if cbp_cspan.start == ss.colspan.start: + # only increase if the colorbar is on the left edge + margin['leftcb'] += cbbbox.width + pad + elif loc == 'top': + if cbp_rspan.start == ss.rowspan.start: + margin['topcb'] += cbbbox.height + pad + else: + if cbp_rspan.stop == ss.rowspan.stop: + margin['bottomcb'] += cbbbox.height + pad + # If the colorbars are wider than the parent box in the + # cross direction + if loc in ['top', 'bottom']: + if (cbp_cspan.start == ss.colspan.start and + cbbbox.x0 < bbox.x0): + margin['left'] += bbox.x0 - cbbbox.x0 + if (cbp_cspan.stop == ss.colspan.stop and + cbbbox.x1 > bbox.x1): + margin['right'] += cbbbox.x1 - bbox.x1 + # or taller: + if loc in ['left', 'right']: + if (cbp_rspan.stop == ss.rowspan.stop and + cbbbox.y0 < bbox.y0): + margin['bottom'] += bbox.y0 - cbbbox.y0 + if (cbp_rspan.start == ss.rowspan.start and + cbbbox.y1 > bbox.y1): + margin['top'] += cbbbox.y1 - bbox.y1 + # pass the new margins down to the layout grid for the solution... + layoutgrids[gs].edit_outer_margin_mins(margin, ss) + + +def make_margin_suptitles(layoutgrids, fig, renderer, *, w_pad=0, h_pad=0): + # Figure out how large the suptitle is and make the + # top level figure margin larger. + + inv_trans_fig = fig.transFigure.inverted().transform_bbox + # get the h_pad and w_pad as distances in the local subfigure coordinates: + padbox = mtransforms.Bbox([[0, 0], [w_pad, h_pad]]) + padbox = (fig.transFigure - + fig.transSubfigure).transform_bbox(padbox) + h_pad_local = padbox.height + w_pad_local = padbox.width + + for sfig in fig.subfigs: + make_margin_suptitles(layoutgrids, sfig, renderer, + w_pad=w_pad, h_pad=h_pad) + + if fig._suptitle is not None and fig._suptitle.get_in_layout(): + p = fig._suptitle.get_position() + if getattr(fig._suptitle, '_autopos', False): + fig._suptitle.set_position((p[0], 1 - h_pad_local)) + bbox = inv_trans_fig(fig._suptitle.get_tightbbox(renderer)) + layoutgrids[fig].edit_margin_min('top', bbox.height + 2 * h_pad) + + if fig._supxlabel is not None and fig._supxlabel.get_in_layout(): + p = fig._supxlabel.get_position() + if getattr(fig._supxlabel, '_autopos', False): + fig._supxlabel.set_position((p[0], h_pad_local)) + bbox = inv_trans_fig(fig._supxlabel.get_tightbbox(renderer)) + layoutgrids[fig].edit_margin_min('bottom', + bbox.height + 2 * h_pad) + + if fig._supylabel is not None and fig._supylabel.get_in_layout(): + p = fig._supylabel.get_position() + if getattr(fig._supylabel, '_autopos', False): + fig._supylabel.set_position((w_pad_local, p[1])) + bbox = inv_trans_fig(fig._supylabel.get_tightbbox(renderer)) + layoutgrids[fig].edit_margin_min('left', bbox.width + 2 * w_pad) + + +def match_submerged_margins(layoutgrids, fig): + """ + Make the margins that are submerged inside an Axes the same size. + + This allows axes that span two columns (or rows) that are offset + from one another to have the same size. + + This gives the proper layout for something like:: + fig = plt.figure(constrained_layout=True) + axs = fig.subplot_mosaic("AAAB\nCCDD") + + Without this routine, the axes D will be wider than C, because the + margin width between the two columns in C has no width by default, + whereas the margins between the two columns of D are set by the + width of the margin between A and B. However, obviously the user would + like C and D to be the same size, so we need to add constraints to these + "submerged" margins. + + This routine makes all the interior margins the same, and the spacing + between the three columns in A and the two column in C are all set to the + margins between the two columns of D. + + See test_constrained_layout::test_constrained_layout12 for an example. + """ + + for sfig in fig.subfigs: + match_submerged_margins(layoutgrids, sfig) + + axs = [a for a in fig.get_axes() if (hasattr(a, 'get_subplotspec') + and a.get_in_layout())] + + for ax1 in axs: + ss1 = ax1.get_subplotspec() + if ss1.get_gridspec() not in layoutgrids: + axs.remove(ax1) + continue + lg1 = layoutgrids[ss1.get_gridspec()] + + # interior columns: + if len(ss1.colspan) > 1: + maxsubl = np.max( + lg1.margin_vals['left'][ss1.colspan[1:]] + + lg1.margin_vals['leftcb'][ss1.colspan[1:]] + ) + maxsubr = np.max( + lg1.margin_vals['right'][ss1.colspan[:-1]] + + lg1.margin_vals['rightcb'][ss1.colspan[:-1]] + ) + for ax2 in axs: + ss2 = ax2.get_subplotspec() + lg2 = layoutgrids[ss2.get_gridspec()] + if lg2 is not None and len(ss2.colspan) > 1: + maxsubl2 = np.max( + lg2.margin_vals['left'][ss2.colspan[1:]] + + lg2.margin_vals['leftcb'][ss2.colspan[1:]]) + if maxsubl2 > maxsubl: + maxsubl = maxsubl2 + maxsubr2 = np.max( + lg2.margin_vals['right'][ss2.colspan[:-1]] + + lg2.margin_vals['rightcb'][ss2.colspan[:-1]]) + if maxsubr2 > maxsubr: + maxsubr = maxsubr2 + for i in ss1.colspan[1:]: + lg1.edit_margin_min('left', maxsubl, cell=i) + for i in ss1.colspan[:-1]: + lg1.edit_margin_min('right', maxsubr, cell=i) + + # interior rows: + if len(ss1.rowspan) > 1: + maxsubt = np.max( + lg1.margin_vals['top'][ss1.rowspan[1:]] + + lg1.margin_vals['topcb'][ss1.rowspan[1:]] + ) + maxsubb = np.max( + lg1.margin_vals['bottom'][ss1.rowspan[:-1]] + + lg1.margin_vals['bottomcb'][ss1.rowspan[:-1]] + ) + + for ax2 in axs: + ss2 = ax2.get_subplotspec() + lg2 = layoutgrids[ss2.get_gridspec()] + if lg2 is not None: + if len(ss2.rowspan) > 1: + maxsubt = np.max([np.max( + lg2.margin_vals['top'][ss2.rowspan[1:]] + + lg2.margin_vals['topcb'][ss2.rowspan[1:]] + ), maxsubt]) + maxsubb = np.max([np.max( + lg2.margin_vals['bottom'][ss2.rowspan[:-1]] + + lg2.margin_vals['bottomcb'][ss2.rowspan[:-1]] + ), maxsubb]) + for i in ss1.rowspan[1:]: + lg1.edit_margin_min('top', maxsubt, cell=i) + for i in ss1.rowspan[:-1]: + lg1.edit_margin_min('bottom', maxsubb, cell=i) + + +def get_cb_parent_spans(cbax): + """ + Figure out which subplotspecs this colorbar belongs to: + """ + rowstart = np.inf + rowstop = -np.inf + colstart = np.inf + colstop = -np.inf + for parent in cbax._colorbar_info['parents']: + ss = parent.get_subplotspec() + rowstart = min(ss.rowspan.start, rowstart) + rowstop = max(ss.rowspan.stop, rowstop) + colstart = min(ss.colspan.start, colstart) + colstop = max(ss.colspan.stop, colstop) + + rowspan = range(rowstart, rowstop) + colspan = range(colstart, colstop) + return rowspan, colspan + + +def get_pos_and_bbox(ax, renderer): + """ + Get the position and the bbox for the axes. + + Parameters + ---------- + ax + renderer + + Returns + ------- + pos : Bbox + Position in figure coordinates. + bbox : Bbox + Tight bounding box in figure coordinates. + + """ + fig = ax.figure + pos = ax.get_position(original=True) + # pos is in panel co-ords, but we need in figure for the layout + pos = pos.transformed(fig.transSubfigure - fig.transFigure) + try: + tightbbox = ax.get_tightbbox(renderer=renderer, for_layout_only=True) + except TypeError: + tightbbox = ax.get_tightbbox(renderer=renderer) + + if tightbbox is None: + bbox = pos + else: + bbox = tightbbox.transformed(fig.transFigure.inverted()) + return pos, bbox + + +def reposition_axes(layoutgrids, fig, renderer, *, + w_pad=0, h_pad=0, hspace=0, wspace=0): + """ + Reposition all the axes based on the new inner bounding box. + """ + trans_fig_to_subfig = fig.transFigure - fig.transSubfigure + for sfig in fig.subfigs: + bbox = layoutgrids[sfig].get_outer_bbox() + sfig._redo_transform_rel_fig( + bbox=bbox.transformed(trans_fig_to_subfig)) + reposition_axes(layoutgrids, sfig, renderer, + w_pad=w_pad, h_pad=h_pad, + wspace=wspace, hspace=hspace) + + for ax in fig._localaxes.as_list(): + if not hasattr(ax, 'get_subplotspec') or not ax.get_in_layout(): + continue + + # grid bbox is in Figure coordinates, but we specify in panel + # coordinates... + ss = ax.get_subplotspec() + gs = ss.get_gridspec() + nrows, ncols = gs.get_geometry() + if gs not in layoutgrids: + return + + bbox = layoutgrids[gs].get_inner_bbox(rows=ss.rowspan, + cols=ss.colspan) + + # transform from figure to panel for set_position: + newbbox = trans_fig_to_subfig.transform_bbox(bbox) + ax._set_position(newbbox) + + # move the colorbars: + # we need to keep track of oldw and oldh if there is more than + # one colorbar: + offset = {'left': 0, 'right': 0, 'bottom': 0, 'top': 0} + for nn, cbax in enumerate(ax._colorbars[::-1]): + if ax == cbax._colorbar_info['parents'][0]: + reposition_colorbar(layoutgrids, cbax, renderer, + offset=offset) + + +def reposition_colorbar(layoutgrids, cbax, renderer, *, offset=None): + """ + Place the colorbar in its new place. + + Parameters + ---------- + cbax : Axes + Axes for the colorbar + + renderer : + w_pad, h_pad : float + width and height padding (in fraction of figure) + hspace, wspace : float + width and height padding as fraction of figure size divided by + number of columns or rows + margin : array-like + offset the colorbar needs to be pushed to in order to + account for multiple colorbars + """ + + parents = cbax._colorbar_info['parents'] + gs = parents[0].get_gridspec() + fig = cbax.figure + trans_fig_to_subfig = fig.transFigure - fig.transSubfigure + + cb_rspans, cb_cspans = get_cb_parent_spans(cbax) + bboxparent = layoutgrids[gs].get_bbox_for_cb(rows=cb_rspans, + cols=cb_cspans) + pb = layoutgrids[gs].get_inner_bbox(rows=cb_rspans, cols=cb_cspans) + + location = cbax._colorbar_info['location'] + anchor = cbax._colorbar_info['anchor'] + fraction = cbax._colorbar_info['fraction'] + aspect = cbax._colorbar_info['aspect'] + shrink = cbax._colorbar_info['shrink'] + + cbpos, cbbbox = get_pos_and_bbox(cbax, renderer) + + # Colorbar gets put at extreme edge of outer bbox of the subplotspec + # It needs to be moved in by: 1) a pad 2) its "margin" 3) by + # any colorbars already added at this location: + cbpad = colorbar_get_pad(layoutgrids, cbax) + if location in ('left', 'right'): + # fraction and shrink are fractions of parent + pbcb = pb.shrunk(fraction, shrink).anchored(anchor, pb) + # The colorbar is at the left side of the parent. Need + # to translate to right (or left) + if location == 'right': + lmargin = cbpos.x0 - cbbbox.x0 + dx = bboxparent.x1 - pbcb.x0 + offset['right'] + dx += cbpad + lmargin + offset['right'] += cbbbox.width + cbpad + pbcb = pbcb.translated(dx, 0) + else: + lmargin = cbpos.x0 - cbbbox.x0 + dx = bboxparent.x0 - pbcb.x0 # edge of parent + dx += -cbbbox.width - cbpad + lmargin - offset['left'] + offset['left'] += cbbbox.width + cbpad + pbcb = pbcb.translated(dx, 0) + else: # horizontal axes: + pbcb = pb.shrunk(shrink, fraction).anchored(anchor, pb) + if location == 'top': + bmargin = cbpos.y0 - cbbbox.y0 + dy = bboxparent.y1 - pbcb.y0 + offset['top'] + dy += cbpad + bmargin + offset['top'] += cbbbox.height + cbpad + pbcb = pbcb.translated(0, dy) + else: + bmargin = cbpos.y0 - cbbbox.y0 + dy = bboxparent.y0 - pbcb.y0 + dy += -cbbbox.height - cbpad + bmargin - offset['bottom'] + offset['bottom'] += cbbbox.height + cbpad + pbcb = pbcb.translated(0, dy) + + pbcb = trans_fig_to_subfig.transform_bbox(pbcb) + cbax.set_transform(fig.transSubfigure) + cbax._set_position(pbcb) + cbax.set_anchor(anchor) + if location in ['bottom', 'top']: + aspect = 1 / aspect + cbax.set_box_aspect(aspect) + cbax.set_aspect('auto') + return offset + + +def reset_margins(layoutgrids, fig): + """ + Reset the margins in the layoutboxes of fig. + + Margins are usually set as a minimum, so if the figure gets smaller + the minimum needs to be zero in order for it to grow again. + """ + for sfig in fig.subfigs: + reset_margins(layoutgrids, sfig) + for ax in fig.axes: + if hasattr(ax, 'get_subplotspec') and ax.get_in_layout(): + ss = ax.get_subplotspec() + gs = ss.get_gridspec() + if gs in layoutgrids: + layoutgrids[gs].reset_margins() + layoutgrids[fig].reset_margins() + + +def colorbar_get_pad(layoutgrids, cax): + parents = cax._colorbar_info['parents'] + gs = parents[0].get_gridspec() + + cb_rspans, cb_cspans = get_cb_parent_spans(cax) + bboxouter = layoutgrids[gs].get_inner_bbox(rows=cb_rspans, cols=cb_cspans) + + if cax._colorbar_info['location'] in ['right', 'left']: + size = bboxouter.width + else: + size = bboxouter.height + + return cax._colorbar_info['pad'] * size diff --git a/.venv/lib/python3.9/site-packages/matplotlib/_contour.cpython-39-x86_64-linux-gnu.so b/.venv/lib/python3.9/site-packages/matplotlib/_contour.cpython-39-x86_64-linux-gnu.so new file mode 100644 index 0000000000000000000000000000000000000000..b9b8463cbcca9339921dc2210e835d67359c6e50 GIT binary patch literal 699121 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, or run `JoinStyle.demo`. + + Lines in Matplotlib are typically defined by a 1D `~.path.Path` and a + finite ``linewidth``, where the underlying 1D `~.path.Path` represents the + center of the stroked line. + + By default, `~.backend_bases.GraphicsContextBase` defines the boundaries of + a stroked line to simply be every point within some radius, + ``linewidth/2``, away from any point of the center line. However, this + results in corners appearing "rounded", which may not be the desired + behavior if you are drawing, for example, a polygon or pointed star. + + **Supported values:** + + .. rst-class:: value-list + + 'miter' + the "arrow-tip" style. Each boundary of the filled-in area will + extend in a straight line parallel to the tangent vector of the + centerline at the point it meets the corner, until they meet in a + sharp point. + 'round' + stokes every point within a radius of ``linewidth/2`` of the center + lines. + 'bevel' + the "squared-off" style. It can be thought of as a rounded corner + where the "circular" part of the corner has been cut off. + + .. note:: + + Very long miter tips are cut off (to form a *bevel*) after a + backend-dependent limit called the "miter limit", which specifies the + maximum allowed ratio of miter length to line width. For example, the + PDF backend uses the default value of 10 specified by the PDF standard, + while the SVG backend does not even specify the miter limit, resulting + in a default value of 4 per the SVG specification. Matplotlib does not + currently allow the user to adjust this parameter. + + A more detailed description of the effect of a miter limit can be found + in the `Mozilla Developer Docs + `_ + + .. plot:: + :alt: Demo of possible JoinStyle's + + from matplotlib._enums import JoinStyle + JoinStyle.demo() + + """ + + miter = auto() + round = auto() + bevel = auto() + + @staticmethod + def demo(): + """Demonstrate how each JoinStyle looks for various join angles.""" + import numpy as np + import matplotlib.pyplot as plt + + def plot_angle(ax, x, y, angle, style): + phi = np.radians(angle) + xx = [x + .5, x, x + .5*np.cos(phi)] + yy = [y, y, y + .5*np.sin(phi)] + ax.plot(xx, yy, lw=12, color='tab:blue', solid_joinstyle=style) + ax.plot(xx, yy, lw=1, color='black') + ax.plot(xx[1], yy[1], 'o', color='tab:red', markersize=3) + + fig, ax = plt.subplots(figsize=(5, 4), constrained_layout=True) + ax.set_title('Join style') + for x, style in enumerate(['miter', 'round', 'bevel']): + ax.text(x, 5, style) + for y, angle in enumerate([20, 45, 60, 90, 120]): + plot_angle(ax, x, y, angle, style) + if x == 0: + ax.text(-1.3, y, f'{angle} degrees') + ax.set_xlim(-1.5, 2.75) + ax.set_ylim(-.5, 5.5) + ax.set_axis_off() + fig.show() + + +JoinStyle.input_description = "{" \ + + ", ".join([f"'{js.name}'" for js in JoinStyle]) \ + + "}" + + +class CapStyle(str, _AutoStringNameEnum): + r""" + Define how the two endpoints (caps) of an unclosed line are drawn. + + How to draw the start and end points of lines that represent a closed curve + (i.e. that end in a `~.path.Path.CLOSEPOLY`) is controlled by the line's + `JoinStyle`. For all other lines, how the start and end points are drawn is + controlled by the *CapStyle*. + + For a visual impression of each *CapStyle*, `view these docs online + ` or run `CapStyle.demo`. + + **Supported values:** + + .. rst-class:: value-list + + 'butt' + the line is squared off at its endpoint. + 'projecting' + the line is squared off as in *butt*, but the filled in area + extends beyond the endpoint a distance of ``linewidth/2``. + 'round' + like *butt*, but a semicircular cap is added to the end of the + line, of radius ``linewidth/2``. + + .. plot:: + :alt: Demo of possible CapStyle's + + from matplotlib._enums import CapStyle + CapStyle.demo() + + """ + butt = 'butt' + projecting = 'projecting' + round = 'round' + + @staticmethod + def demo(): + """Demonstrate how each CapStyle looks for a thick line segment.""" + import matplotlib.pyplot as plt + + fig = plt.figure(figsize=(4, 1.2)) + ax = fig.add_axes([0, 0, 1, 0.8]) + ax.set_title('Cap style') + + for x, style in enumerate(['butt', 'round', 'projecting']): + ax.text(x+0.25, 0.85, style, ha='center') + xx = [x, x+0.5] + yy = [0, 0] + ax.plot(xx, yy, lw=12, color='tab:blue', solid_capstyle=style) + ax.plot(xx, yy, lw=1, color='black') + ax.plot(xx, yy, 'o', color='tab:red', markersize=3) + ax.text(2.25, 0.55, '(default)', ha='center') + + ax.set_ylim(-.5, 1.5) + ax.set_axis_off() + fig.show() + + +CapStyle.input_description = "{" \ + + ", ".join([f"'{cs.name}'" for cs in CapStyle]) \ + + "}" + +docstring.interpd.update({'JoinStyle': JoinStyle.input_description, + 'CapStyle': CapStyle.input_description}) diff --git a/.venv/lib/python3.9/site-packages/matplotlib/_image.cpython-39-x86_64-linux-gnu.so b/.venv/lib/python3.9/site-packages/matplotlib/_image.cpython-39-x86_64-linux-gnu.so new file mode 100644 index 0000000000000000000000000000000000000000..396d0e850632a310dc5b5ed62dce1d2b888fb510 GIT binary patch literal 2402280 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

    +3qN%LxfHj+87j1heF8@S(?uX zzmT;~=zdV#{|M#J8$uSPczQtEZ|yx!`hn1kLirb}knlso$CIV-ub&`)`AOodyuxr>%F85GWA=tK=B@N zAF1Y7MOhJAx1Un-{no?6VbCf1eMx`t9x?p&1$-%VBBG=5{QogI*WPDZ)83y5UuXx= zkVOvOwhEo_DW%0fBV}wWen=p6Gbr9Q2`vd}$d>9-v=e;m&xsiq>P&lS*wNa0>%A_Q2vMmNJ;k;WY@1K9VK+0Q2rke z{t-$(MnU1P|Ay%j-;$OG#q-B^q>Q}{S+5H{1B$yHq5M?`o{A)WMvxzUPw6G0xqe`p zztqF?hfwnI{2_cs?Be-DXgyHe`3U8YJMjD=>3T@xiTx+iPC|zZ<=^)3Y$233s8(vvR-v3;{Gp+pEBOj)rB=CSa?#7+GVsn@ z7b?a>-7)?pqygWAU4U^^c+!3xA5g7vft4dVf)BaOwXbU8#j{1z>$ zuZp<$Ll2R|1D>B+7#grdafx%^?SrrqAhxBd8s_MjQbu5M19-Lo;`;d340GhKv5#KU39gz@@Q)% z=Ut?d7sKT%lrMI0*k`M?&sHkVH>%veLXae4Tcs+38Y>kiDZ%GaQ*7ErOsS>n;>TDR zHH!180nSveQ2bS~uOEa9)M)!J!|?I_<#35dfIHq%z!Y*_!wmHjHH-2E;H=CfU!jgs z^e)&>tKP81LbSM*_uhdLh+x?z9V2SP!HpW%@wr5jct(OLvX)y zGVt?8738rIIDqsLb)29-!ASi7Xgl+Gt)}mfKl?s)n^cdfG!RW@X;7k&gpf)lNu^0b zqevu*G9=OXD7X7mqEhBcDrAaM3CS3J4HZI2GWC0Z);{~(DPDemxUbh*ckT6Ad#$zi znfBRdpYvQD+AhgWbiHp#9MV*~2;#6vJfJpMBK0a&qxwxRr~WBu+r;%HQGZxs|8=&9 zr55rIVcOj&%U)muV@pZ2Z>iyv27}*@=Drx01U`^g1=H>s;SZsCq7a_rt{MvT4r=XT z$r)$O`UdKZb17h+EcFyt(Qdh_*obH^i3q+QcGsIYp?5< zNN$jR2JH(HaZE?g+)1iA?ghEM7)R#kizwI)!_f9dds7@tk`MNm8Kov!{m*1M6>N&~ zDB}#vafjT9`mvy{9MpG8{c2F3?A2-ar_}GF{s!_#s3d1TTX?Hf#=16_r})XefVKJs zQ%Tg~)n&U=L^IB|giEBz? zbH8GEr%~V&(d5RsB=DaNA13^1G%pmw)9$b_K!=mriMoG5-|Q?54tr_n%yeG>Hh)yCeMmz0;J*ib0?GaGM zoe0O*w(e*pH-Wq_N%-n*$MR>r!P}te2xZ(AaB3ab3$5hAkgp|)T6bBkH-wKtGa<$$ zflmg{apTohkE5CB`g0%_uicje5x?aW?RoU?#`VnaMAtV_?7qlobq|a_$6!xvWGNRg z+O7;r4rJC7@)=qNW;8zXv}q7V$79d{%DComlBmJpBq_Ny|`DV7iekQypnqe_6 ziKCw+z3Wsfv(&<@Jwwg zPLe=}>nwOW>hoi$8>a*ZbenRx6m=gc0uvT$nVK zA@4?#chf#{^KgCbfPK{5697+zGVVO%9pGSD!ldaAc{h^0n?8}7r|M@hARjuCHMuMN zfP4%#jFU7VU*QMjQ{B(aSathRaV?BYKAneuWcX~i`6$NoA6a#rHQvs;;q}F}7BKlv zp7HwPS|keI;8j*qZuIz1dHBYFpK~@ViQg!`mJ>?yz#(xmZ+JZIw9GSE9pDnkx62Mn zpES!ob(b;QwbL5LW!s0k6<4%QB_v-(lm3$85 z<4R(?)wQ$rqZ;RQM$-ezxIu7gZP#HU`DV!1l0>cN>+2BPvlIM&G&7)#TWI`QIM~}i zfJyTzXNqc_%7Yt^G@C6|MIElJdx$Ru^z{k0anI+~-Qj5`^Q z_B>`ClakMZd@V`TTG&$~mYLszUx6lEk8MS2G>&Mb{pmWu;ZVknh2yf-|IkXF1$mdY zKjq&SbKJLb`~nuiu|8iDF7%Cd0DhbgToZ$7_uc#4ntucMBb4E*i5B&s_s~i%3;C#$ zXvnQi)%+?Q$m$3*$H%xN@H6WP@A@ftGc=dRxFk2*bs3SJDECA$YjbLXIUC2i)ntF* zF|n~Ec3>G-sp)MWv3>UyR-z`Sfj$jo+)KvS8vnrfmv9nz`$z1A{s{R7Na9+0?ckn? zTD5mmnB<1O$NLCJ{$cXGCB+i8j=GA&Es@%;gXMd%T^6i3X|N*kCKU61GbrLQ3vioPNb3?-KkPy<;6-6I>(LDE>oVzHer9- z%oQw*0iV?Q<1oNlP{uWYlf^2XKO~EaA8?OS# zj@Nk-Nuftk_E9CpQIDq(qSiAxf7BHU__Ej=7Ii{(yq%3%Hz?!!8y{wTwDJ4lM7{b5 z?1avMd{jvxYX8|3!uFeMvfq9SkrSypoM%%fiJdCux8GWAzxCi@`(-g_6t>?Soyj)? zehG2@mz%U(rZc(ZGB<}T>`Y#8`~BDmtIAl^hcfO=)$4z%QIu|Y5f0;l2aKFsDp8TYL5myNGC{t+Czs!gyHx()JCCB;#9 zPzX_fG&z6N?F#t4*e;7Yra9iSNATl+P{y5Lys_~X#@oV)+U-p2gm#5|R7oLf|DF`W z_Pf$#zy10lCsLg+CSZ55K4O0R9r7J6$AgFMXN%aP3&jJvrp^GI17+MZa+7wC>zXQg z4dk=1Yihym_thm>eTc zN>0P#X^88e@wLW3F#aVRZv%#6C-g_idy^E}RC_mt(35|doWCcRbfzUM#9oG_T|d?! zB~v50{y|*-j5jyl+IVL;b~oLOozN>GA5~HuwI78Lb+F0#qn>&h0h@`P153M|x8rRL zX1Ng8KjTY{ziNB~9J|%GVJCDm|K^4=tcHq~B2A@t;Olk@lFCtYdD=VIGoY4<}e-rmA&JH++Rc=9&M<&9T? zWA|4Mc0!M$?4wGGqaIHoM6G9X{;1u%5wMR~KUmrgVVz9!Y|OerT>p#@Gd|k*{c!AB zJ%pXm8IX@EDMal*n?l%rb4~W!Zy_>|=oIh+u}{VP_S>WFw;ntke<$a={!Ls6xEb(E zi0hx+q}@D?_$8OQJ!D}c{({@D4{JG+m9eM~as4yi%6KQ^z2SJf?pf@F4u*W2B!xEB z9!eqfz~{(o2+{;$!j2= zh247<+z55 zBNp{WRvRQ=!|YRt>!0yG#*5z}&Hiwrwqq4TQs`lneN;&yYX2G(!uC7LWWW86M^2>5 zUO~VE#VUzu`=wp8OSuth27WG-aUEruc8f1YE4e4+14-hpaRYaxY1g|e_)s(>po|*_ zNBg0CNq#_NPv0d`E4!X*jcW_O5Y5sUx96HbbNF;h@^#c(p^W>*xVuwwIpbA~9|gzy zuD7w4O+(5)kR(04s@pA5yt>U+PI1HX7jCGRAIU2uQl~VvXB66zFTqRLkrU(`2I4oX zy?p@tLm787oHUlJy^<$E`Py4>NA4u6*;venGHxlHx@q;WgOz_U#AVm!-1zm88_efBI7R^ zUvKfpcdQhIFgIWKDE zR`qQq)U{&hjR@+lZf$`2j2PM;LH8~IYK^*c3`wHLyV&sZap42d+*AlpyA{s>-Hm!m z3`wHuZ8oymEPOti#f5O@sF>nUzKVK73`wGD4p-K+Ya;whG&>97Y4`1Npu|0Vh!^s` zDv7EqdZ}vJ72t=XIj#_%b{QQ%r=mV5hV1yE)>fTgE=D~thV1;}mwpsK&OZ&oa5;}1 z+$|W5jSVFcULVcNag}w(dl-$@cT{RuSKBV_M(em+gmy<5U?%ed(9>dwL$>K8nD9sfSfd=QJdv6Un`=N>zKTqt}w zn(TXn7sIExzP)Zplsm)@Ha+tzSIMbq92`N^hUniTQLc*F%ya{>LUWl696ucBTCXSn5bGS4ibssIZ)LjqwSrlNPx6^OtYXv zs5d+IVzZ!HGg9SfWvVqaUeaoop8a|ysvK))4r)Kyp4v}Q^ZB^8pO9rzQqWq|9~6NO z60{BV&qbj2f|BD|@CW&g5gZN?bQtPmia;aO`HfLu6hrwtzozfBwELcaI@Sc7O-@Ttf0XG$UhN5_qlF!ngbaJ{ir-7?%Xz+VF$b zaf{HbiE--_YxAn8gEspx>J%A0_7+CnFc=dXNn(ugT{D-cuv8Z#oisk;%N!M!sl>JE zN;|sKms52b#t+9;2U>o-P|IkFv-$=MUI9E~0t2}d4&*o7(fci7CsCdNT$8A+%{>g+YAoL3hzrl-DmuPm-W%q3Ljb{ z^Fk+5N;SKrmeKKyUr!P)#rqYI&&r+<0R1KCI@BX$ND`Z7m2KbVe}PX%Gc(2|fq!H8 z>&4k;7ok}hu))NIO~szqZm)8bggJx5VO9Fq|aHnbSZ_wSU^(jpm{lmjpiD2BPIp0lxyx;24(#{;J_W zHU%GpW=})iJW%Fo&mlR&Dt231m4{6C(Z%if@VjIO9KDY z@LlJEyU9HNgM6zcfhRj!(=?5I1e)Vx+@^;KtrxeGO;Dd3Lz1Yfx4BuL(ut~?>79auHX-%nH%FaM~v$ay8$gh{c;RRqH0^45U$o8d=r|_ zV_XvWb%sB5CHQVM$tj`LlEC-BRH<+83tkaTjTn~%ev;uWG&$P{P4gJHNmr`s72V`T zsJq6HB&zCN+O%tYBUJ~Z84=@>z;_rv;wJD3XlBH?B=CwhSK9U#@Tbr`ALBOjit84) z0L9Cn_ek&^X!gXoB=E_GA9)ve*{S>zGUWFKN#J$6DD`XZ20tE6;~19& z-ofzKHRag~O{W;QsZ6TsmCWRosE5RmB&zD&Ne(?_tpQHXhh9psSs#PsJ3p|--`~&$`O9EeJ`22a`HPF8=d^PdCniDp2I+XNw1^*Ua11nRqEND@``-W=;ymr->F zn)xv<3H zT(8>#R33Ge7?MQQ4OaEQ&%x`UIW@*5f$uW>iLb$1qv;&ulECk0$}H`6eFHuK%}p^b z349TFjw`LZt~8ng3td@Pu3NPy3hUGEhE0qVUO>MF^82p8MM}F$p8$P``llF*7G~)C z!R0#ng&BN#|5Ox1uHzXtDy0%^wK&=POX;{(OPKeaX*ppNrzr*u5nBt0`k_9w-QZ0nNr3 zw>2~Q7OAG4J{p(&0)xXJ3^__-Qs#ZWb%v^Gb#aEKb-={_+Quj$=i1sm$6^l`bg z%iT`U26#9l_9uy?ZZo`_@b+jfFNAYI3mSm>rXtWSg6>8=r3iGVZZ+nhelmu_twxod zKrfl=jN4j}0vkYI2TS(GU}kJ2DQ^R4&B?#o0Q!m;yLNekF2cjg*q z56XdWM6;z3o_0$G{eb$9BG4W|Wo9t`gM3$bubgo-V6Kh2UJQi+bN3oR%}}?BAxY%Y z%|?|E*97m5reBOp0>91h>yHK>iDq1kO9KDh@MXehqFEB-wpgP;2kVnk$=5K*$_=SY z%Ijb)3i($ZtWQsI192ijE8wAe>`xL&ozp@1+B)D3(VSTb=U@}m7Il{*&<;V@puV99 zv{+;BJ5W!Ip)mIDa2C)k)Q`oGByt&hv2vN#0{kU3>tb9I_~V9ObsqTt(0mu;lEC@? zI`tnHo|WOVuaMvDwwj_q2hYYdc_aosVI?}=tujN5XD0v)W+)+F!5;FZ`& zQeFpZS;fEVV13>u?d};w(D(81MeI)!Nj+fr1;T$tQ*2gfw8we8DCj`c)rvsZ2s#1v zDMg@Kx+7?bx+c8egr;{PoFh)q5Y)F8fxZ_s9`*Dh&|KYI%tyUAhQiH7^M`?6MZF=0B#}$< za^-sGBj8`6*%{-K!1+}L@LmhRi$BCi{2_k?NCM9_e4g-HXiklBTQE?dgUffPgU`cY zOl%}6uYU`;$ac9~gd-@aNFHRtQhKdV)5h-cke_Ea(T+ ze-wd^)qP5tIb8oB-wWYB<+ay&pwtM={tM8%fIRV67bZR~@V`G^E|ZeC#0kJ040r z9NH_1r1luT@on%bXpSs|GwK!85cQcwpk0F6qV7@zdQ7)G*Py;3hQcjR%dJ3npq>~* zlE|g$70UJAZQzffc{;`=fp<5&d~Nz>6`FNW#(e^(*0P#tC2xoP7L`P;m+Q#uk+s49 zL{sb$)jAN4_6OCHd<>MYR>6leeM@207>hF?o`S-ud%m=iuYi1ANd;dH-$?KrS9J$X zx(%?vtxnpV)RAXH6VNY?T|^W5J-ZJ~6#KZZ-70kDXQ{l5s}0}cYF%MhIc~`J=)Wqg zPrFV$lW@DxSDG8Lv}Y0%-QR>ryBB_9oP8AL4dN=2=t^f(vY!e+7ft&@c-p-@0;nhI z;ZVknH9p1oOydjS^qspIJE2P<-*@(Ah&{?Xtefsk5bGtpILS?ITOyLFTv_p7r{cSD z<#3CzLViC-{e2AiH%`*->)(O?LS1@Z2zlj=YE{}DA*d4SS}`Pv2G6qwHxu3%O^ZT! z+P$NDlJ=;F#E{*S=$`V>&id&JJxK5pk%s?<`E8hvkIh38-PEcXsOQI!@Ab61MbJ{z zuNHxF1-*;FrP3%ppI3n(-~GP9T!01DLS45AYuCRrL$hKg3YDd)ch%_`RshJQ}hI)A0ujs*JjJ3`rv3Mhke7@Key7 zT?kLRfmMJypza<+!RrIcWgzO|G31-Ut(l;)sHYZzJ`nUU>Zgi8ixg`m>a{WC(@eXK zf<8vQtq8PB&~DVp1)<%cR*gn%paW3ro4*-%6r9cWsWztM29V!ulIRWHTIIN>wAtFC zDYV&kG(>+n`fK8PlBjpH-AR?zjnA!U?kR+)-MOkd9rYtI6z+-M*7JhJs9%bq@Vuau zpbe-$i6Kb@bap#*wD6s1{w#zu3~BP*t6a=9xlx+FhcmFQZ-`L&57v<+2&| z*D>Uq!EL0VJ*bO6Ua*Cn2?ZU5`tTx9j$+k8eQFH(G+DnR=seUH7lA$z)Eo7nBG8E2 z*+93Vz60X@KRBCh)JU|FXFyTWJmNa!QfTVp6Z68dHa z&@ZU7o(hRdBH*xYc0Z%470^^Kgs0uvs#+Iy(-;a~Z&5B6puQxAd^4Cb7SspzwMC#8 z1dT#{ZxLv$V&$No7ehYHw0l(0v#4Jw0<97B4(d;fKs}ZMeTVwD7?MQ0%lA;bM+qfJ@4a!Mon85X!fzTG~}v^zo2 z5vY$Z0$nJm3F>o;K#kAkNa%>VE0l5l;B@bb=4d4kgM1iC^oDL-bKKFoUzviY(DCu* z2k7UZe=@EoiF$Q0%GsJ|!zZ4mSm>b*sv%u#Hha*MeLKp9sPPDhogg;w&3 zkl$>Q=nXwM%5h_K``HRjq0Kf=%Zo2VKRm7{iEpR+Te(E3wvzm!%9MWfIqhcML!JAu zdLgbO$yOMa8I>I#PsO4hPf^fKF?+*>axrugF5aP1){>B}q<`mPRa?2(`5-PTP^m@i zLejr;@l$)bxOxsQI#KD)*oCBj=c1MkvX(By#e-B@6T6UPE=tyNp)X=leL=zZMGL#& zZ(D?mPpMSy+0Yk~{+)}f?c#IxYq+RRrM9sPN&n8pXq&35_&hFpQ)yD{Lejr;F{hWh zvsi6h%%##Zu?tD;gU_)Krd=)JucLXl5Y9*QPU1G_%%$2r2PVq4sKHLcM91Jn*|YUi zR)~G_#2%42$!Ud~x6l&Q?uoK3$6-B#Ps@}&&r4K0-%HfGK#~rYv+p92wnV!N@&}6~ z+B!H;~2gK~=NlPC7b6T1hIRW`OK@46dbIn;h3_7xor0~2M=&X$o@=pxF1*P>D6 zxH^q!Z@uS2dzZ0CNA1;51V!zQM7399Xs_hZ-k*_ud%dLgdP(h-r1n<1pB$SJZ5R}t z(~&}Z^|j5Yy&A^G&dJlz` zuI_ho-bWEnPM*VL13Bi%@0VB{v@GP9=eJ>Y?6+aI3})ME%rXt5lZt|*-HU4GQJ@WC z7izGsBMT1T^w%8qBQYe&_U;k`W9~YZ~<|)NP@RyWIHIaH_pi6HJ;x zkaufSum`Bj=L71<_vlg>jYcs6%D9=v7s!C|hcIcDLf(PRs7~a2pWPFuT`P4W^^y6x zy9%~zQG5{F`mdL!-I-;9wxRyH5cH5cp)^zeDVNM%k(DS5Wn48l-zI7q0V+0xd~`_# z=W}nat42JmM9%|k3(*U3v=yY4d<~Q@eW0pG0NsRo6qIrI!_jU|p_M!r@)aZ%jChwt zd{mz%Sq}JmY#Ls`xLwdD)Vm8pnu0v|bzM1ZEwf4N6p6N&mwjG41+Q6LR2LlWS8dSN z2->!hcBQnfOxrzCsg<<)Y*&zaMpA;`L)fWr@&1nQwEIcxWCl^I%nNkp6MTV0dfz^& zc+@et`?ZNm6H^q(l9x9o@9fdQ+mp2wywL?U2(i zg44;t=}mgT@Du8aFNWsW1BOZVj#jbl>dHyZ9x#|p59D^HN^Q)~i>ufJgMX+psXbLX zVg7Mk#dc1;NszmeHwh+X9aE2UrrW-Um+dBJok+pnNjZ3mEjF4-x(81+@ex;PX^F(a zbF47eEym$Y_S1vs`c+AD-D)(CxQ(NVB@SMarFfh%qw>nEEh=-0IE(sJn-X^D$i=SCnKGYn~CFDtIZ8 zx}~)m`tD%rY{u&AxQ_p_EDPC{#~#!Nz7+bv^3b)0Oo~U>npy5gjsA1oQr#Lf$Cmd* zl%-v4=SEkz{)zqOhTZFeNf=&);gHzzynpPsBlcrAy$$2JaRo{L)FZp?n*8kLL|TsN z>v2W@hD6%^Q3{`%P=6mol6dc;&9TYE;fHA-XZ=PSbyDfKaFcwQ^&gNwyzLzgpw%3I z$-__|QwSPR^3W@^lQgPCoO1!YL51GIuyz0T4o0;tf)gou;p6IWCgA!(!yH%qN4}iD zLUnaY6cRgWIBa+Egsd1ja%QZy*zBh0oet!er~|-Ig2F2E-V1JTV5F`>;$`P*I{XoT zhhn$BflDS@2g}zM!67&O&|!`{Oj%5Eb3vwp%wZG#T++Ot!VJ--?lLEvxEE%e2o-x+>v@xat*aOP);uv9VjOzy~u%bV$ycLv^(@DT6Q~z(-orN z`#bhxM$|IFp=J6Z#~k;BTK1D_?R&40RopV!g_iwla@4Xv&2QfJ$xzO9-AlW~;fEv- ze2qykDC3TWqrbuHRcZwJEoa9R8?~7}L3lRmR#3)W21h%h8(PU%LcT(H!|Hkt;N(!$ zw?i2>(fABF)k+JKW&z}@Rn_h~+wRHu-J$)GX4i|OCAkcnmmtQ!aB5$-8m;6{AYa?g z?LbQfeT(|2RRti1FV|g>DAicsAD-lfAIVQ)H})67OXnAl<$>p9BS#m9x@lZB!p&Jw z#Gb`MD%pY8J8BDQtp{hFehF17+NF;}6Rq?fzE=Oq!=5 z@5hdmNiMr(B2iEi5>KJ`o_fp(+hca#; z9PO|V&`KT-`2e;m8)%21v8Wdogml3z*DtAoroF-HMJk;7Ar+Qmym=oLhUZoAqAF-f z_zsM--zX4#wzDPSJ^hmKv}^i3b_Zi~6qIp|jGt-zLO7nz(<`jfUkdqVL?7~Nx42lM z%HdK^bbQsi%HiEqBejrgchg?Qt#IF;K=$Hl8uQ0FL)hv^Aw)3VH96xFYJ4 ze%0$gPr-ktqI!duky)(F)=PB}>uKAuI@gWlCZMmOjN4E)=(5)kZEGmwx*G3m{5sTvd=&gCzC42^HYC+W$B&g+052utDvKMwre=Y5MRh@&Jy{( z5mIq0vx>gJ$HPe{?K)~$)(n^Jp^WQkyua}q;aKGSiiPxdKt2UY^t8TOTC>JI6ehXf z8DG_`c|S5A6=Lv~x>jtM4dc$QOgGK}dKSvKRmR^oz8Ox8J=!4Be*^g#lHxt)2MS@2 z*@esN?mpwwjXz@iX*fZ?R2o8GgnW=_tm5|=sly)gs>yzjS&htUymkbv zA$Bw@?XJI;uHOvwCB*lSWR!N7X;f_T+7Kgw#8ijAiOF)w!^zL-BDfimtH<1ZLr11IjE)v=KNeaOdcHN$o&f9OgbHpC~YlIkt@enV{2cxorw((B~D zlJT0xPc+^HPLTGp6WS8;L89T7-w;xV4RN8#enYfF=Ck$+I9_Zrj8#9i@YVR7s&rt7WaC6m{w0S#Mgwy7Y*w4HS6aR553YJtF42v?Sx9 z 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 ^F(KtXv9C@6Dq z3<;a<_1>IMXeKP5;<|nx&L?Ho#ze9RLx$SlIEachAP7n;JvP>3T^!w9;(ZDng2J@Y zZU#w%y&_cdTvGc(ERO5C8f{ADC(5)O#@rf15Rx7^zN==g0;Z~XL^njuhP<{;vjR4iKw1DIY zuEWwE=)(R)-GBxt>Id{Z&}xZ6{yx(*W?EgI96}c>LGT4A*g{8ghSb9KD!Ju@B6>dQ zojZXYlrcyT%5WTw^pO=L{%eprj*O5(N~$#gC0?)A&Zy^F>`XgX=yZxT&OOUvcC^_` zroAe%Lw(!{!4Q}V$|j(YyoTemH0^XIn@*5A@$zd#=ckBHP<6nc0o7^7FCf2?G|={c z4uXrWXSL4(N&zzVY+u47U{{uY5%#nQdqWZXX=5jmT~Ve)*hRK~aBP-#v9VLht}0o| zW@%6JJXbzI@@vM=B)=Ly-}>3On3E%@04U)G_>aHMaz5I#t<`youlu&>ZYdCS2MwPN z0o|qO8lX9fIsj!Wx)kVJAl3)F-bgc2Kp&Qt88rOVu2=a+nq=2&sfb5ACxwgX}F4yvx({fTSW?b_YqyWO3N*zHyU zx$yLvHvJYZR*?m_(nU7%FQ7z+bd&#R&@nJ}nxpB|iI+DcI ze1`NU@Lfp%zcVJhRhPTlpvdbBGWNS% zxf|{bH(Dxb&zA|}<89{pG>!w2Ye*gedJ1T@P70|;50ai-`nx;0H_C}Y2H|lFoC{Qm z@mX^a)ft~XfwG11$>+ohpo(X#kzV@5nH_#`+h=yIK`_?q#@g7igpz>Om(Hf_8pF(3NlU+$#Dw`cbhP%%5 zrL)Y=^P6$g$gM1cPve#yqF#_2W5voO7c0ioxE&mq9jCH!3&^c1IsfFbn+fU|JFyV# zYLcxpfegyld4Okj7a1Oz0vifzT*qXvcZVRBEA;V{UZL) zV9_GpurA_>Ba3)mL>BR7Va*ot4(cM_L0!ZXauI*S7g)bpP0zo;4LA)@5#8X4d^wK8 z=5SC}A}J(efDS8~1k_>}(;fmEq3CI#(zi10MWDez*^&vQi})8TkF9oo752lD2l2}w zVl?3m!vPZ}qsesWqwR$Zsk$vkTk;aRW*|cbWBkK(D`@J)n!nwZOUm>PAa_=$|3n4f>cmK zQUJ76(H@{r73}~z<4#I*fVwNn0-6G}TBZYeqxm!%BT0AB=mH3w(R3ghMd2Cx4a|l3 zbaBb~JhHZXJMJck>3*X)s1!z1w#;XO!KIMyqNjsJL9t2y;Ndcc2mT-Oasc+xYQ-~Z(Ou<5|H5~#U!TypG^|DsJWhF znGI`?2ACLKcb=R^a_7IalSh@-%@RFrJrgFWV?!8>uHd!s&?bP}jX2WI|1bgkY!y*R zdzIvV^^noeH8h8R86Szylg3T_9o#CCsa*CjRvP=)`QT#Z4Ro{9;^6w94E-mz8}u(Ub_&^C zr?Z!Eea<1DXZ8?Vr*pJ_&dRvn&bm(LXkYC<)(A)Y%M@|6zg`hX`w5CT+Ghdj-#p2F z9E;{3;opFJ{W{%#>*ar6r}ypoKdsaGyD?m+&$|qF3QLh4ALgvo{yZe(4K$+zl{!p; z1n{;ZIM|?jH@IWCmseNnpueoRN%#vhL94+Z8o4p&0~By4a*(c*II8j2W>V{pc@s<0Gg|4F3?#IP#Odp0+cNwAYFg2vphbw^CjcC{?38;6%a8naIJsBgz0EX zU4OTM7w@Xci-FFZNaJ;ZdMY{t=oKJ*4g?gGzhELHY>qo8aloUQuv`P#Tew~=53Y%c zWD)oS(K5SC;65s*LxA@}>T#(a7vSjD-`=ODRPgKX|Ghrt~>glnu9$VrV*eIUnGj&=1tVWq-t*JiCWJSz!rXpsU3v{}T zux57xvan{^c^VP39j=I3?*iiAX1NMimtW)>I@!(@xP+VtL6zyuel*afif#iMpy+0x z`xW&DdL9VxlMzPE7&DS+{SnK^#EGXyPFNKgIrzC-WWdO236!gmbFUdFbdeL%sCf`# zJY`P zYlH?|)Z7W<_;XS7bg|Ok*T-3a$h*5Jw5u@hJhh5a5 z&K|?1S4~FM=t}5$B;wN-9NT~ylI1{m1FhB$=ILpqCzp=Z;h8-wN6B=&^dnTG;}v@tVn4ZHx_w=H z#$>$C3S>#n7Iq5hoh|GVe9aX*g!H2g?1eq_4CdGYDC$Q1yS=a&?2gF)XD{sA-v84a z`!;BtWB+c+ml#a;bL>VW+Z=lY5}RWUa*ieRbF9Ps8bxG|y>uhYHg>^s`z7wY9(B|N zImnvn>`)y+SwEXi*AwWtq8otPKgP77K=&%T8|W`ZlYqKB&N=oGAf02+usmAWc`odS zWj@5|AR^>ApZ79hCW1ic*hNTu4RUofMg%m3IIkxT-%wHdR z0xEfq-MazLPFjJ|sr*ElHB*?|R}h4xG>ZPLnmLKRr02FwVYKMSYDcT2gm!f>23`N_3_5-bwY?${(1AlYGyz4>Q+=X;!GY^P1 zH_IZtc=#=I;Gmr=UJ;9jtspq#DQ5c;5Xl?yQWFf%fkEp3*Kr0n}3G|hskAcp4ni;(d)E6jEyp_Y2;bHinA!XrphE&tzIeKisa%>b& z^O;(fYE-jSq**G`ET4&F33R%Rux9rNWcVT}ve~bQ*l5dStyb6m}}B4^rJ z=iiYKd=DCCG@xqF5)A;lOwqMK*DJab=y4!!;V_~$n2{v3ALiair}>BqYDD3YU68U= zmC^JyP_9OkS4^d1Qt6;ZQcxI0E`nOjrw@#vI}|a3UQomc`UuEHkT;a65tKfa4lsg( z!syA>$k}0D7J`GQ!Bb#}hoD9bK0`&Ki;$Bria!@2L7-EJw1i= zHL^@zxfq|xHJ4TxWBF0gQw{M=7c0TmrY=xtz{7qpDP?D|5An_QnJ=)W)&o^pO!PX? z4xl&WRiLu8#XsEsq3Xl38;L0|^1(ySv{TG}7_!RCvLzpB<&SsmT*@ioBLpNc2i)YS z`scWQ8S0yb6_Q`fy~_Qu-%y7B_0QJgOW!=Xz**fEpSZ~|BdU}&w>Bmd?tk~SYh zk#VoIbLFNo0CaqA4PnhCae=MU-bCl&)$+JOC_fwbFP5~_Yju!kRI4t89iSDG1fU01 z|9K;|r~Wocwae>pxe7{rU4G1@Kp;z|MoBdF0aVInnFmk4uyX%s=gM8MzJC#dwa6k% zd@^0s*YB4PRCN`KW_=U1d^266xog%>q1Fg3Di1%*!hQnErx|g9?eY~+(rU?Mg6R~p zscwpUNCP0xnCs=D$72HD80B|6SN;NT&O>@gI^o!MDZ9oNDg79>YmM=zXWkUIN)1+p z@EsCyeCzafRCZ=v7&cnr z!_XT`rmBVlHcEj>yP9cyo(ox))UoSvu2&4IKWE+K zpUXCz(-nuae`;3t!kZu8a^iwlI@AL`aQ_)AyBsL&a5f4)xB?Pd=wECSBG~yb%W?_C zz=v&1BR(X(LLVY|7xQ7_sXi1py-rTtg=b*R^iy`Ovh{5>9~gyc5azLXAZ@jYH+kB& zkdX2vDVzjGCE}ektjV+R@8%97;jdWS9;mX#O&0OvWBE%rPY=Xx-Ng_Oijb4>S}l1} ze)|jGN||{%Og<^|zrm*$iuns99R@@4ke_p=4uyqOXwQmR7!7w|VbYxvh?}guc~AoF z8Bku0(Au6x+bMM*U4Y*l$+Q}~ysHb88lkwrUdZIC#~3K|xW-CGcx#}siaG-w0$L+U zXq>S0#dV!m89Xdop&3kvtm>mL&gRDo6Ohg+gWkuENnEr})~Di;L}UJC=eVgO!N%wS z*<-L5k~e^|fVPU~Xs^nVy%6}MFfxjpmMsU6CjGM{-b&(oN8H4~rS(y}Il_wb(n7j7 zJ6jf;Ypk)@G4XJ11lqo~*=T6zxT$5eI;KMQfx31t&~NIR=csGzosYaT)Dq=p!$YVZ)471Ce^zI z0@XL_MIf+CWO^ek`7aR)6K$C4+R`=YIhk<*dG|@(lZutVn=&#`t(h`Mtm5*IEnU}i zf*@3DA+dAF=0#ZgL%ajTunY#Onng4UC=F<}9337L=w`}=;8)*Vs@dag#Xlg3eT~D_ zIup;e=`v;oe|A}s=1@M=9q})Cnidv=G&z*BAQRB=J?B8*&}&U zbDK0btz~d!8&o*%mW#dOC*0ccZyVl=?esQ*aMTF!7rcJuVh0rQyyKsMS0!Byfsp=l z#E|#zI0%N_D>&yUXy-QUrheal+??+J|j8Mz|;_@O@ z+JROWMOz%9%`zGY6)Ya;^Xn19;G#lZU{=WnU$8HKjjE$#)7uz zX)BT*TmD2WEDbl}^&q}(L~Dg|u}_%qT7ztpSEATI6lc$mW;X--jVN}VCtNH=Y`+-I zZVvYTD0YwH?3bh2Ex`UMiant?J3E?vDcJFsx;kemR}^RGMzb#iyKxlz!{Y3%(d?FB zca36~np>=tZ%4CRfju;e-J&@AgJ|~UV5dc~2Nh@Uk7l<9`?)CgbOTXm%U0_e8P3EzbTan%x%c!YFnvjH?JB-?z)fo{VO*Uskk!$=2yooE>)}su#Bh z`+_L;*y8MR(d-UjcZy=aSe#uonw^A!I3^v}rc)cGd9ahX7pO@VjV`HbwiKuajf&p6;QAK00Nq;)cQ zES|hDQXe~49l20hGa>sEto6EX=vs^wmm1VHgIg~=u$t=yZ$T$zO#KUC!KdY8XsS9A zchX2(1a^*2`TfmmpcIx9sUhK1Uv3RoA)M+*0lg)Ij3dr0*4nN62Lh>I5G;HP7pND| zR#{{m^=7@~L6GfDd-X@~Vk)GMR@GfVPphhT!4+hkTt5rDI;QiM*PWfH1(*ogdT8P4 zJ)kYcSaGx1<3*3-GGfw}-~6>r72z>|>pw5F)zgxM$*((V8|M}5yX%PDLDSf$^4 z)GGbHVgp;Cz&O4I=E<)&sUi~2~wW7k23-Z)^Mh6n6U(}r4ZKpKEja%cb z_{BXlH@ce}K~s^*9@vpr=CRUSf>v=On=W94%k6vx{sUCL8p(fU^G9wUh68m1-!cw_GHj=tn4>HtGbC*^)Ap1 zAiQ-Gp>P(YVJSe`Nu-74JD>;ih<*hs1j6fh!5g!HywXp^1bT!itp=2@=p3L9oB4R& z1wgAL8G6ginZ(i(sBz>7+z81XNFNIxzHkq;6$slIkcVYFt}AcheV@~Q`x;k-6l(w2 zaK6_b0FKi>0)*|*h<5YWoi+n2zPr;-r}lT*s-2JYW#EKl8_+IAY@zCJaAeqnn}@Sa ztG1o1&U;KXzksY8SRpwIG!+Q(L4{UEY~vLc2ZiLI5_vOZwsVcYp^bEMv!yfl2>8+PPTkM_;gT|e zWFy|v!$r}JFf|K(L=HaBy62AWjXUWBH+$CuVQ&{6xV^RByZqi-u$Y+=_tw5HMp}X_ z+}_$u7&>)t?U->-+8KLmEz~3K?dF2MRem)Q?|p4=w~dvetDUj8Hb%8Ll6?g&x3^aL zP3m_xl8$8Cq`qBpZ*4Y|bWNjsyRD)mnp(8C`)rHwyUmbAmiT0UdmiiecIU}o z*WrHb2jo*}p&tZwrr}2a();5A37?6dUqZQf&8LNiNhW9NjgES(0g@NChXgtq;9C*<*qq>^xX2fK~Jo6wxt906u7WKI#3< zU8J-*kiD(;y<}uX{cYTSF>`u(<*+IF)=0?R59Ms3a_pSsMOpH`F-}q5CIc;bK1QMw zP+@5$3G451Cg@i;CQu(uYSn-fb^{unC|cXc%;^cb_r7j@e0$u}-KGFHMYhRHW-k{R z4J;x+vf3n{KyqJ{1QBbJ@7*wYoo=tZE%*Hf}*M-cDC1>Tjr#*SnHC-NHaa`XtI5%XnkJMhZJP&;-`{{3&tJ)=?s z3FTs*L_#m{cFU4G(b(nH((9V=^Gi^vpa~W8xta;|a(+xOf8NwZLqc_ZzG%}lyCcS+3Rh`Hw?=JM2Bak4XaP|a%BTx<5<@cFdE3nW>IZ9#E0Fc4^?6eqeora*>2*B~ved7C1`gru0O zk*Bkj5wW!o2(L>7!RgoEOZ{ARrNCTBq54hcMi&sA87nqP8ql7%CP$a2_L%E>-c7YgpVA&uLzEB9!U7uQa$9|#4ytL zQ9umIeur;m`llWv{WIbPQnfOQQsC0jYZNVzvg{w0IuvbU$v@UcOdoKHU$g~9@j@9n zYG?$H9)?b;>0BDjN8x^1EP-^Z_-zARKRbr1c@c${G9fkr>)_x=tjBDi_dX`d0~)%I zXcy2O`-wgP+OMbp=-{Wi5=VU(zQQTzd!+UFoGa|#fPN_;Duqm*IY?9$X!{pLwSjtl zNpvC5Aw?~KHhsmk4nS)T5nTf`;V@BupdE?^0|mZj+Fd}u0pUj=F-l+D+Z8OnJnA!E zvX-$}-$C%$5juVl=#_7XJ_Ks|Eoatm@iI=YmP)lv!cm`HwPRdoa^`PmUKTRDx7;*OX`b{m$=!CodMRDu95)kk z%yC=?eA~|o+25TL^15j`xfXay&HU%OQyEnucWZ&SA$My5&uLnLp(h)V6J8#VX?UwV zWa?4tfUqU~ZfC3meplbP4u~ye8MzK<2((oW8p+lHId)mXIv`*o{uobW9dHedWXXjl zDz*;TCi|?|oNNc9V3Eo8xCuDfK4F5$hHLa>8#`y^WaRLt@j2T@P0Uc?p9`q4HAFfc zyhN70I%gliKNf85T$PerZi4`R$7SQQ$d=m0+Pj z!pOx(!CF&~ih}PgshwFw6a+L=M!~x<>Z0IBpsiBhNE!uO<&fzz3TzdaZSE&CbH56# z@e^DBQxg?yeYeQ-4Hs|2SVHb}^@8iPwyN$Wew`LO=hex6mG^{cWkj@Jk7y56Z7(@h zdz&;c4X(aEg^mRcR$s$S!kGNoB)R~cYy!q)0|bStxE0;03qXy@ZSt`38IxT+-+jKs zxWsehM<n=g-?s4r8sY($ZL;yWGGv9VLoJ9Ku?hU>b)o7sVXH7{#>1QPc-aChZ(@ zBiaGgVZ1;2vybB*zxV;vYZPkE^6^@^iFcznc2Ha5<)%M!-Mg;tEj zDkz5U9aT@VcVwHWSntS_cr(|;&NI{x&L6Fyh(Nt8Do__e$Pm&%y*4UP-!;L%4W0v{ z0@dOWr+zkg!pGG{h}?E?SluCCU^_P7L?7Jl2B;h1+eKJ`NaHP7cF5(J+x5ozl|OjD z!6j3Y{$}~zfAX5kFL(XEUUPZnt}pvb<&o>%M_fxYku$vL>vy1la2B5=0ryypJYSjByEI^woseI40amMn6qBx0Fi&<2p_F8wtB* z|BBLqgaMjxZD}TS$HtZ=%q&9{tN^c9`LMFQ)U}*TXk3m7y3lh8<;&B8t^!@cYZaKF z>q(bzToZID=@K5SOolEZUBdJ6rBF?osHS5pSxrMwOtis`+T{6_5ewM@LuA9N?1@~B{Rum6QXEl@h?D1t>ZNQo=G7A8 zp|bz2cgnKmMSxq>4C0rh>37yX=Wz~>$ zi*q28<(VNJvV1iJYI|QsDWWew0J%k}SBtO8Y8apC$JD{+`f6~9)zGGnuLft6)j*pV zQy2OXVl-Fhr>8O9P3fO4>^{&^a$IzX!$7+REICI*7Zn@^7!{Eb`B57S zQ)nnl-dW?LBSSSAMGYJJ=m-P3p~$P{YyPpTsl}Y{ynx&yL?4D-u(ID2h+; zL(#y-Br&^#Uhn&l{#?-`BV#L>g6Fw;4fRQX&^H0Ok+qV@BN0Z<~Bq+Z$0f(cNCiu7I-7({r zJRGgo9i?+_beSd5!MEhTO$-a}2z{ev<}MM}GblaK;!8@Q4!N7;c9#Y;ql7z7y_%Qe zGzBAW@8}m?yS<}pFD2sM(cqRu+&kK&hP6X>I2z>I(Zttxl1?acHnpPp5j`gIY%RjkciV$saaS&L8Gj-5_^;V>IM$p!S?F zEfmOcl<$YZN);@Wovz-w_Qg12Jax;R4q1! z7t#seH;%zbmNbZ(Eg1f>?(?H<5{MeG=fj6c->4ZiVDB=)zx9oJ|2AOTnlEULkXQ>2 zULu#|_+U!t>|6I)MGU60S97`!f_iwP=RJ%x7j!2TkvE`=j{n!8F zcAm9?7IlP#+(yWwHhv^iJ#VsRsw1SD_2s)Ty*K~2P3bMMvYysXw)&!HDI{G z$RXx_>9sz0XOp?pCI+KSsJp=^OG(V`ydFNgKY-j|G~PRi-zV~6NGaYwV3KS*SIPBZ zczw@E7%sOCo=o+;$~u2A3@3n+Cw_t+YE#i(m~dgZ3UW6Xc}^NF6v$*yd>EEDwWu&` zVM)F0j4;eozZiyxVbq0TgI7Zfex87_KNf-0wj?Jtm-aWV>rXQSjq4X_~o7cQb zT5YK8`cWH)p_GrBsU+m}4wJ$VY6wc6%&_^)&snt~cOi5OVr)xoUV7@+_<6CoE?*%jDu#r%{A2A?=-zesW~5kL#0x4=HW3j zAm}{@gi7vZElWKJOsBW&w?4De^q|s~egrBo6>>QZx%_azCcc1&Y6pXdzIxq7^`?{h5{x)OY|<9#Dnr+3SBn z(0pq-CLs`OJ^v*#3rP$Z-++-LndtvN8Y4&szBtVvA8&U9IwUMq0<+Q`&e!-vTB!Fr zyVIFSciIUi4O80NX}@dQ%)h?Llj~ADMYWl~({AjwDYd*y-N?MxY2H_PZ9CU`{v}wz ztE^$64S4Id1XmYlnIHdAOL=mK$w%AyW7x=$eAvj4{d)Xbk3ZpvQ7*n7Crei2gD~K# z_6tRXf>>v4##y^GyX;qGavCErqO|Y zK(6AGeX*cf>-9x%_=2|@=$pS=DUMsuOR%T4K;h;FR3`JD?qe$&%?=RIhbc(3;9pu&06;bUl5Zaiz zHO5m!{A+3FTHy&1)%Jrq57AM4GZDuLxVFGDj?NJ*IT0l2eo6lyr+5X21R*yQSJ97 z#p+2P(zp(a7-6o9{Si-nu9O_pQ&}V(F3*$8KfqHhvp_$0JD%st#1{-s;(0FjFn2dT z06$ko4;mAw^%muLu)8^6={P)VM2mplxs~W8po7DCLzRrmJoYyG?nb1AWgCva-ocKu8>syV?N&e) zM-m+d`b5!jpuKmMg5IA%c#{XRUMIidDb**rkB_ddU5jMzv?|fJvVODN_AyRrry_; zclx63((G8Yx?`C!T^tVtHM-fv)Y7PSq_e8gw|A9Xgy?0daS^pOrj|*y!UrO1?Lcvb zbBJnVsOH9v{igP%oogLi8*%g{Ri&ec717Zv?~Ro2g}Yt(0v901-;YMr=7Zvz?gvFw z>pDK-=xS4IO0|>c?_#yEREt1~Ms)N8s=3x{FxusoLbZx=OGK~IeO}KY>UBgKo>Sz& z*u(U$vvaKq@~rA|EWTfLS;Do7=xWvbHBajPY&!YOvzqLV=-mO1E8@$FsP|5h-bvF7 zTnN4DQtD0L^bIF?z2QKoL}z8|)lI2$hO|>1*2^QRQ-oN)%}BF)xzhAfsFxsP|5fi- z>TQ!Oi)b#WmO+6-q}@&7d)2raTI${a-ai1;hj0DZCI_N4zAZ^(a71HhY4-*LDEEf4 z+Q4(<+oakk*MiKo;#QiIR9MVTCneSzlcYOE|-t}t2TfdRhKV4m!L z2j7>diz&S${@udl5qt?w_$I>|w@WjS_|tp_p^)}DmNb1pz9*t^<9()3d2L*6yhwuz z1_PtYCgRsycF6qQc;v*|bLKeLB)M>HDXd7%53o8~kY74Lu6y=Gop@?;slXl?HzrVH z5h>-<9dyxp|E@D?F)2vG1B(Z;l;eV_Q6tEBn=rkG*Dv+HP*>M z_a(Sefv?#zpuTxs8eOHQ1R&MhYNKcp2X(McQU4<8PHbp2t;$ zv!2)(`YRrLpG(<1q~q2H$HVH`3ZMZ~>ElA6Pk>fS0+82Dqwb@Uyqn*zs1Jek#kM07 z{Z*EXu%_b8u6Dtq$Kd#Nkagz8K06n{RJ0%GO=Ir#<7!3p<949U(gmovc8!^+hY=7s zwLuZJ{-%~C+byFK{aLMR(}*uD-4q##s=-eIBFr9D7a9ZYRm7-IoX$#VhDpw=B{qTD zNLltC)%tUG2L->N0(7gQB%p_Y5P6_F&Z`m5dlAkFpd4MXdeiyf*TOeyxl*OntyG;Z zSE|&--xdv{->syVjkPekQz~mw7)NK%@Nwj6i5J6dA4e3sIP&6Th1_ygPUbX{&@on70>yi3HAW zGzrpd8IJT*Y~G>?Q8qcAm7B>r4dEMYN#;`$Y*gNW*J|Y;aTvtW=yRlP*0eo9IcNkne!;?N=OoLx#Wg`qHnlW_!Gy&u$zPzVC~h7->+%j|br@1eK5${e&Wx zx!pq=b84LB&5_zTKIH2U>1SVzmy988448Nq5YR?N7X!sUOzm{A!qOYpt#NIC@f^u_ z$Zh$7K)N;4^!r`VO#`a~MqX*Z-#-+n1M`0#@ngvn(+IM^r+fDXW=AUVssI9ag39aUE90ZnKG~JXsM9>{CP|-yj-MR?O=K zmT@v{CXA0+{t^A-2Yoc1Cx4pwoO@k0%z=MSUiWd-zk6yc_C6;J(nj8sACkiD^G=}T z$;&4F)y_9V9@eiE-VeFkKKC5H(hl3_rPKt!Mvw{0R>?Khs4evUmUPI@*h25DTHHb} zgqGVvKO>#`o@86-ADK>M3!UHFbRP*Pnkdi=j`%I~Rxpw!jZIYI7J4&_w@!9W$la~p za0~qwRreCV2_E&0!BkW7L7R|U8O;#=jlrqLI7NAzRIz0J{0AzW;B+&*feHBePk$4* zZR!%gG3dSL$3ORadh|C2Z!~+{sppsMZ83{l8DX#THFSeLz%DS8#^Tx-F zi}HxRG*n1P{sQGKMLz;1%;AVX6;1BdQlS?2Ehb;2IgRImoW>JC)YyoHj*C4XL5@EZ zvXGEJOA+}m1Fh4i{wA8vOgqONNK@Y!I{C`ygMU8(Z57Ya&{?nFe|^f-7JKzC+}B@g zKEW{YsXk1~KM?P}Ox~it4p*zCCaU0Ss~f&nFd;o=&nK*#b`bP}k&rY4TA-)_&{se? zatLMcYJ967>!#vzuMq%p8YjS`2EO>#oZ|#Jm(HbCa;{fI&IBO*6wR!dz%^Eoe!f5l z($ycna3iREzHs9WpsnILRv+)cP>QLgdUe#t$4Ea61-wSkQX};-u6TX)!50HltUglU zGQLhocO^UD0cu!YLT!IS0v@D*Cm$j)LvoO~TC?bDay1}gh4plM`t1aH9^_bp`P%JPh(g$0X>?!LnpVGW&q)TV;c> z_;qjoq0+5aMm`b3T{33Kow$cdH__y2uH#(xbSZox4>ROFU)w!Q(#NOV!_0gpat}kw zAzVh^!*rgfp@sq!-NQ^mTG2hsb@Pkg!|Qs7WzIZ3fwPI_@V#C|#13sU^K<(IdfPyJ9bLO^ z(Y0;|lU?OG56eX5=z7=PoOCf+D)XNr4<2R{@a812oSE|GWZ{ZZs3YE-NMCnr;*~O~ zG*YhmoJzbkY5Ovjcxy6H5pPYV0O3nKm-$zMf-t9W;2bS+$5|f;wLu=YfAd$W~Jp;ev+%6 zTKTKhC*BW_g@y~d1&SDSd)C4ew;vxel~g*KAm6JVcd370N4+A%{p!T^s>eO`gQk~H zy=rp)LDm8H;;#qC?Ws>t#69(mMS6!#FVGr#)#ZkWUbPKg?=qlM_S8?BPE+cfA#+rx z$g?6uAIC!5%J%JKR~;$Tt0+4odLhk=dJa+VeW%B=os;JDGO1TV0wF5fV{q${8&a(5)Zj^Mbuyj2nNTUw;|k?EyU zFGeyVdS~T&y>>vS)a7B*2~sCkKK)l8Cqf(Z4?oU&?Lk*3`P4gk#+R%T7HG9*RfJfy zeN=OwOMPW($Lw6|_wG;)YNWW5Ro_HkS+c%BmfMagF1My_kXzxDNNz7FnYlT{-140o z8}1KNOQ+hg^{U30ESu-+W0)f5mH}kBEt%?a3sdb#VI;SMN@i{jF}Jc|Rby@+np$F8 zsC|9jSErUM2}D<}G^%WqsTRfDrtc22-j(RbG`um#m3?q=lSM6glS<;@vyLF&Ev+i} zg3mU2GD_w3l2is4sX%+4Y4>&y3fX5v+oOzpd72UAGSotcj@3L=LII*oo6WA)>{Pkt zA5@B!<-sVG$4gTAU&?Zk1p@QkQj(F=UA-kr<%`o)Q2ZrPgg6Y}r?wvm-7OxNX{*x+ zpr4W{8ZJv}+hUh0r`jt{$0t4DPq%?S@>v5P8pq!j-EvH^<-@af#uoIKx(?#DV=kg_ zqugGM;dr@ z+>fSOmaP3(XHew$P*02kGU$guAkAv=uj#HI<3X|oxFe8)Z}4*t`i0xAga90~}^`X9vr*=zznj!r*N^zrm|;=z;Joh%iwGvO-TUz}=ACu8)e-EP_uF6g<(SpIl67RUORty_)d zk7xJe}fBA>bV`qEx4vtE}*uU)l6D#zYJF0Q)uy9b=V^152FOyfzn}Dgi=7t zI`!==tH>+tT)SgERHfSkeRvyNntPyY6w#xDKpUmFmh-Ok_9E}vo4uyYx>IMh$tUbq zk>d(*y-`v~={!6_d3A?U`eCc!Hlw7I(j`MFuOPkFPI~qNP+LV$0}TWU$|FEnVN!XL zDHl+=Ye=X#C8C%SQQT3a$WQaO9K?rn$Bcw9a8xO=lz{5xp#P>(mZN%V1ZpV+o%q=jnBx0s|4Ft3^Q?GR$GgGg% zH{%h_)N4&Me1-m3*iNmNL?Z#b52zD;+uA$ufnuM-0UU4slE+w- z8+z0X*Q-9B<<8%tX5@GwZptsNjz^XLgNN0|{!%JH<(AjX$8WMjzva(sB|sB< zWXy;_oo7jJ_a?jCXgFBs*{zp>y>&vqD&mFns{GFc9d5>s9gyUN3lod0YV9ItyRh)+6yM>sWkms|!`GSE8dh7G<) zj5FWPaZ_ii?G(tyD!(7l^FUkWDdXt2SB_k^2EW&1N%?RqZdyo^kQN3RPfMGmXv-_$ zwg8*!7T_vjaHm_T0!b*<@*!v#d?t(ZUo_`dK)2@8=O#cwMRkE#D&D3yPfNG!;6HG{yjK&Eh$Db&sb!P+Wl9m z?_WUH@&j1H`%wYC*c+-n0BRUn_3&5vBYE+x-Ssd2qSx^NI)~8sH+k5NL+P>)VGNunXW>^8W6%B} zHqaOU?#Yh_@#fvgB=G+KHVGWSkHN6xLG030dz}rP)%EfZI0}M%d#eDhaV!Q(_rc!KaJfDKU zQDuky!I|R-W{v`@*YKmRCk;n!%Z6Y6`^-TTHgk}^;gh17BM;X<;@Zy~Z{WJoK3=<- zV<)a3#`PKrbo{58V+-WbGspM1#w$X=e-_%@E_PExkNu}k4RdiFJvIEM*F{sqC7*JT zsfcPlXeCeS#6k3mpE>khjr2KSgrqId_dr2u4iu6GI8rwxjGBg@(F$Y7TZ!+?0d(^T za%Us`9x(8VcA&2m-3Qe4bEb_1>Z^!>^BvFz2}AoO=w`?Qq^*(#7*V|Chc<;bhh^;$t_)$fQ6Vx)boyq!Qz4^WpuH694x`2{O12XMUr z*ZB4`&_0zUb)n=Wt_K{{!3JJ&Sij?87bmHZ*X!6;%gbT?ez2m4^(`Wz zeCVF{_fnK7dRYIJ`M6(U<7sw6k(OQvV{Z%D$ zfOm+)I+gvf{O3JJ8_4j@ybr;B4am zE2)X6tfbszHO4$`3UxnOWoWL!s^|)eI9XNwnx1g78l{MnRR&N{I9Y{+6IH1r%yxxk z`@c+7Y*w@@*TZL7^`_F1g>Eg}4hHd8d>-R`fL~#b!Rq}}G(*C#etP&0(|TkE>yZ3E z-Np?08#7pam}v8xH#7fC%wR9-s=eOxF->5HQw|`P-kfqGQ14`(*B9|}{<-zGK)uB= zG_*{z69a*IOH^fxY8Nqh=CR%~yLhHenLxeecF~nOuf&XN!C$vr zCVlWr9rf0lEL;v3>+B*_1NJuB#R8hhv5TL3#Rcl++QrxpV*>Ry+lAhAZHeg)S84o4 z++f$+rZUazFsQrqlJy^`%z~4vuWjWbA_uiLPkuRsx=TU&2>iQ6#M2lv@EdGp_lRJE zZSgw>QHzJWpKyJ892!-I2Jjmr|K-+AuTCd#%I|kQx z<9dw*5l$uFnyr95dV<}9>vbB66=yq78`-(e!tTE_#(8_z@;ij&8cDk*`u1!T5~FX= ze!z9~96b7aUKh>5$8hZimEo2}N_P$_!%q4^<-()}=zlZ|AtF4b(OVl}*a$pmGRkt9VY-pwh(D(&3gLRLUJ=?`~_7$e=Rr zltBfhLXVtkr3$lD%Xj|GQk6v)OM(eJy8_1jihcshR`fLxYXt)-(AkBoANFf+Dg9cm zE|S&K|8e*2aXMAe-_M>i7>R~*E5f*>P?JPT8A&&(sYIlj6q01zQW8^26dB2_!l+y- zqcL(PkI|rV8KkQ+x=3`HN}hxiC<7SL?B0RQowiw-VyA<_@K)i}Qj@nQEK&@@3G0qqc(uYtnuXZ*k7FgeG7 zmI^9|o8)I8Jk!EW()?MiWVNryIAUE)|GxsXr5s4;ARK_00 zC}j%gg>Qmq1Be->J?#b(uZ8kV#{tAKP%>lyk?A;iX#R&EJVZ-G1`iJ)TIYmB8IFSo zKX903N#rq!5H@xe8Zr-LK18gY>_S_Pu{=&k-VY&kvAYqd)OgK%8sZZ^iMbP$OviR4 z=}%HP+w_zIQ0kuSwoCC8rf@fiVCKID_YPB*cq5qQ-0zatpAa#coYgW-K5CqF>%gTnZ&bV-&-*dN{5$kIU3xF5twJd8-#iR~;$ z5cnFR;iiuud>ADsCbV1V%$KJZ(B@K@Z!=FZe@SA@7bn_l(ybER1eHHSC1=^Kz|rBD zkKSXnnw?IQJBY)vm#Jx$%(8uSGPL-i*lEWkp=_6H_p%>~m6}jMPi;ROt3AOkC1gt) zj*WsI9ggi3#35C^;~b9dGRb3h{QE4sD|jk98z?dy(}7E}iDe;SKX54!0S;Um;KhM( zP6X;Ehy$0&f;e!=6U2c_q9c!kmtjEI@&24<=Wm0Td68N6L3KjENeco~@mpgjq>bQv z3jaP*VZS)lJ&ukncnV$80{m$=`NdFllU)6L=iySJ`lC2yebK$PEeO?riZ~RS<9eML z3O(n7HIUg8kxRisw&Q4|#&ga)TNn&|;!?2I8M+)h{wx<$CTVWoLf%~MSiS~z6qiE- zDIB2lVu@w~Ed^TP3Q(A3g~zbgr9AH$L6rRnXt8{nG|Li6z8M!_h5IOm>iOYOb`AP5 z(k_DdfzqWwSSJNlKSmm0$D@9X^zid)V+P_Xj%_Ad_%YI!U}VbYNV@^)=SYtlx3uLe zcH~jVRQWm5$Ar(%kwuDU7oy;|&u=ns zI85XxNryrp+xbv$qF>}$?0&|m_j|h-i7>I&O7}{@VhK&h3M_uyw-?`cC7WbJ0SVFhV@T0UIz3B5MB;wqyf0o zWLb=x^|IXz3+9KdBv@WL(NR9Uk?mfx(yFo3gt&)!s{6VW?$h&7{d?h0@6)x>Yhn|V zPiRK*b}ZC92oloJ`j>{o(=6~-jFEshPm!}G}Q@BEk;K97sv@m`7%3bWpOg2xYSN$64BaDWa5!z zC!<ornLM-J_TZWZ3n7??t`9HBUyf zw6pww&jhH#W&))5D_=VDkmggI&%?Q2YTJ$Td^y*dz}GmhR)O_6qvJo#1djB#V0RPHZ1)NNhuvQMZ-|!xgx#+|{RM?k z`@ROk;OFW%Hz6UH_=^Ki3 zUFn++gmK#xt&T(NsH=X}YiXCRqxG25`up z40XjQ?)WrhEqb8*JrmI-za5rBvJj6-8F0j&RJ$}pxa6lJ_VGB^<-TZ%$Ov@Yle^*R*bQs1LM98`0J-eRhjNj|6v-D66f#7n{v`ZkbsgzhQHw?W&< z?jaP3J`*|^(O4}38g-O@rzuP)yPSJT*c{PbN{)`wFPUbEDo01@-4U;&^ihI1O5Y8n zWe_bADTAP{F9Ss!rBfKcHEy&Sf(D)ep&`gx*xiW=*$`r@9Y^Y(6Wxjgjh(z@UuxhPL zIDR!|ix;%?5+3%G4sdkR;VG4kQnS+-(J7M-YSJ}eAMG_oCLU)=xn;ZXWKF_PJos_| zKkK;7bf=@lOPqB;iOw9tf;j8=18AlD!6Z+yKIreWj>Lvu_7R}StV7ppI+{^oBwTB5 zWpod^2)rKD;_EflEs1nH`t_Pq&z1zR2;3Y<*J~OZ=XyKFj{HzM39i@NCVZ~fj0DPc zmm4Q)y{3}|6~HXNUNZ;eY}emn{IKz)qU$v}ml|n>Qu}t~%AQz$E~#=Zb?P~^mvgCW z1aU4kQV{1-s|9f`RkIO!oJ;iv!uzx>X+M{Wosd34-T+o=Le>e)rk2ZE++piEt6IVP zrQsz=0>9!*!w=#H?*Gq1dCj&#<8JB z9YY7|^1E%_W(1*_A;AhfbZpb4Gy?j}F3kXHyZBrNG@tE!K+p3SkdgzV9tsvfWW5B$ zv@OK|imXf|qbf#O7Er!v>Ck8HP$o=zIAF>#6VNZG;3C$?N!cIofUZY_`OV;ytO*>tWuJQdv10eWuh z2c2VrZrG($w$@DOc_wIo7-iw^84X2~gT|-CV#PAOf1dmEZD^YkoF)PJgY(?QE5Vo= za4$|UA#G5et8_Jr=Y`-RVWdIimGMyiQn292l zUPU@C3`*pOid4heIOqc2Fsy=EK+9a-XuPJ!(o3GM=~wC1Tll5N;Em$K{}U|bH+>3I zedE7u$I3GgiJ6@dcS(9RUK;}ADUX?*d(VT-P3saKxWPH21q!6&3G zm-iF+Xm4cYm-QV5Z7yW4m$_;%*2ldO$;fA->QcnL1|B{X4yB%zW~}N%P&CNkH(=mN za|Bh0AQwTuL!O$r9-ntRyJgGFdWhIvU85{6^BaraD zJD|ZA5d}a;1s#G|!;2aAJy4xXplq>w8P~kE=}Mul7lK}*>tjUh0w>dL2CCmm*exJ< zqp{P;o*L{Fb~i+vekreXIZW$&8D+Q~D~?>fv`p6%;ZKqR z+x8;i9Tpe91F6jnf>W8#8kK|4T97hbMWA7=#kO++KQnd#*%`r8!oCL)b&|;L0<<1z zp{w^aHWC>*`A&>&4&E-@t_V-QoZK6L`m}}SRYI;XQ_DLnWK3}oJr~hRjJrZD=9SrN zYC|co;gw*A=;f8U0wldMJKGWQ%G`b>5wFa`tB81I=3OoMVeZFTswvbpJ8-A@+_$)f zZ03F!5X$O7z~_yfPWGH&sIccF;{I#No&|IiXu0bP<2`wy36(iJ)9pfdL3?ty0-bst zQ4Y|^4n&J1=yjm22xG#bjaX{OV4S}&6MiF@Rhed9hKM@XQ?Mye>fL==`Iz56; z0Xq9e4!!x35wEKDUFfJTb`3=p-LFW|H;i~nGAaJe5R6v$t2Sm#I-&PXxr67&Nt*bF<)Myz(+ynuA(m_cNp~ZStRPp?*p7&i z(3j~p0DUWH70}5YS=^J(!p2AwONUs6;QM-oKad(3Eha|NASKe=#Ues;RSk`#Fq|HdPFPCPb!PQr33_E|h^sJHzqg%&Sp5dK z$}vvAy!{ShR=Xb{mo(4rRmycj?JtA+bLXuTJc{UPKx^EiuPf<78vrIChx+C1t%wi1 z1jv-?QX2EQG`zTQtg)xs5#Qc^vl@$p-`+k4H0+bLD2~-3brM`#f3={pmIl7P{gX)X z+uJum3SM(S!$kfsBg@2Kz1w1^d{aYN*e2_sxIo$NKvWDvV<+rOMUt!CRM>L6<-LG; z_g~(gi3GCU7>n|giO83?rDlGC>)7;VEtA?kanTnAugFC|jEG#Z^#`EuMAZ-@#*L2D zbLP49yBN|~RJt9}4(t{^*CX=euFUi0Ko1CN0W<*!)@2%h=+?-pF7Iv09Ken0?aqdz z+N)}1O*_Uc4Q@cQqm9XK(aXj}5gU_oxAFRTIvW$a6MYcBX%w?8I4D|pC$@ovHWz&b zv64Rrq?O!@r9&*zT&RdtauH$0S7BCi3gb?MK;%vwfTseMgTFNwc>@ZYi|dRO-wQ@A z4_-LK--(|{I=mB)38InByLltMSSrLK%|#bPYjdH(G*X3WB!yul1iX=HgR|XpB^znA z&KKn*VsNz%&2f@tL)AbbnlM2fZUr6+uxs;*}pT~pR7)=ba+%4A|z z25oAvAXqzNZ)dJpI~xLJJ5MT7I~Tk5AndbFD3xYr22YBPR7A9g@U5snh={Ks zzucXPM^*(!Df5cf;s72ZZ4rLk9hyQCM1QM=3E+#bV+yu6xZpxe+@8h4eayE3SJKM{ zpCWu;a7}4`H2lwom~`zA#$AHVw&-N?+>j5E^7lcqPRlTH<3f7O55dnc1$JV>w50~* ze+>STfN=l0uEikCHp``ldBZtv>{<&ZO4eh`1$%8ny$C7nBS1uAmh_eedFh zaYOOyvnT}#3Aiw~Ay9>H08-($Kq`C@5QUk3MGQ2Xn0WksNWUPs8D)&cdqjK-5*&|! z&g)Lp0;mVj8n9JKr=0#yrWvlxtStYg(MPxUz^#Py{1>Fr4e-EqjK-#`%)3ZGB$p1b=7j3MxnLjL!q^ zHq$%fi{Qr?-WhTuaW zOnM9W?(dlVU=|`Zm&e3x=CW=NspN^(g3!fw8Pdq!6WmdU?6HV=3LLz!18BaW0YLFR z8P*GEFwkl@1T{8VLBdp2@@)uI;angUUJj(f3xFt$U6^R4yl@z)*B_MWzCoDEegdSj zn}Jj|2Z*xx<+uf~BF~Kf+Kw?_1}{hken;dBV(fmPV}f=A)$Il899JH7b@nf zAYWvAA#wnCxLtwP3c3NP{=E#l0%$Z4>gcH^$!!o)ukE3)cuL%;L+Bj$##XFzSPk+6 zfta6zv8Wf=Esn^w(6-!tI{5Fj;Ji$C9N~L~@gv&Yko6{BQEVzcztJDVl-{)M2pH!B z<+=*Slc5=NOe=cZpw6!#!irPTGrT2M1n9)nisH23ytl-P*a`UqW-fO$V^A?o-i(eB zGaeQ*h8xe!K+|Cbaqb0HWcr53SR{@jUEvb@xKQ&3{*HM+_<@Uw(wA%s=m1f6Iu{c+ z2P5E4VtvV0>r3*m8Yj2Vw&H!s_TW-vGpaAy5nLky1?WqfA3;a;L2wHKv@a zwRKhO+Ur9N7XS?x)DS4)e%>GKL88SHF4PX>CB$Nd1F#-RkuV# z_ao7r!SnT*m9nU(oRGdA@UCqmF2XZGg7Iq+mEUA(^kUf_7 z5;~A4E$U@E#%v4z5?k4UTmuX7a#o;qg4lul1*9E_7k$n|eFvgkHm&5c1Gx>?agDKd z`Gj_$19=4zE&4H$DR!yR-U7XZFg`F$nxpmaqPco}rJ=ta)&{we+aV{QC#l{J>w=oU z^LCKhpIf{GSsz@78!D;;*$~_+0eJ(g_HPXCL4bB1KJ_G4ncUzDL}=%6Kune{lDFz& z_cm6p+L^6DB8NhJnd^>j&eH;;RqXq$u%1HPBCxQ8kG|)KDf2A$J=~D@2^g7<8}g0;DD2<&LC>%p1N|Dwr5Z~_tRYkhVG}kA1K%P_(%ua1cl`TYx;an z3C=o)CD{p);~}@p`6wwOZUf74A7b?AgByFvUxG}LJdVhXVqH(n^orB?_~#jfD}#R0 z38ug+qWyfR`=i*;hq|W@ru{y?i2avZciqm8czX10#Qx@x+vR*zG5dY+onG>npl>7Q zoc4Et)l~L-ok6~D&b+M6%P&_^{WG1 z4cg^=0ZX(_bh=q;Mc)1w-v&DR#SL$TPl>u#ad}n_PahnIhKS?Q@IH9_KEl5r zp(<#Pg0eV5Yc)}5`kIBuZaSgegvU>Xns=b0Toa$#a;$kd|C)u~rpCWq0p3aW!iADv zvp^->ns?)A+?u!PWd8rKEdO5$b2q!)cnIo;qgCJ34sSoMf(tb*zDn#{-{5?S%SSI#vcpczhl*~~yBg=}u(Qdo zS%DpE%{YpDs>9CfU_osnp6M6vyP<1P0QP%z=}@a66*T(K1klzZ5Y+yHVH!uNxVHVCNvBh11t z7$&}FoDb|6JMyD*sk`hWSX2co)BOcjSD;+yIdZS9a*w}`#@58LU=}xkj6>L?AZNRM z7US1!BO5?2sK*Xrp<^v>Wx2{{uIBYPpDE8n_*;_l44@wcJrC4y7_Au%#8Sz0tm5Ml zw$QPnw=qre4{(2CebMw2!rv9CZ-B0Plv1AojS#dI=rcjA<#!F|_#n-+EXvdpEC)UK z77*eWxj-PPisRJUkYP+lG%RKupa}`(a*&yc_{- zySzKW1brFS>}=7TDi5@*`OQ_O;KD$!4(tcQrt!B;G%;1TS3Qcb3^yA8u@4CUUqW86 zHy^0tV?;fGMgdX2*-CUPR_9V6&;3NtAnbc#4hKqjoHG4^ZWVM7&~t*i0BsUi~Rj48whWM)dR}=qA z#|7mbn)C{1qLDotH~L-p(ELaM6Fa&s1UUGwCr;7PikraDEBSefvBN=L6+j z+vmq{{szvmjT+aq2 z<6QSMzb-NP62mta#Ez4yzudKZ4PUaz*6PyJj`c3jbiEO-N!$sfNpu9FVQdB2*6ztt zx%feBYwJi+v8_D|$}^;`&2(&M2jU!KbD*t2+Jbu7RLIsnJ_Uslz5DshXOW6F%KI&m zFo_|TE5*h}`C)K$d-6`QwY{COP)({mm};Zj+r;stv%S49-M6>V>=N5s3gM^i?K0Dy z4Bh?(2TPz!+gu-;j@X)=x=UejW9xA+tld3k3MyGS`;D#FPmoly-F22%-}drTP}cDJ zYm*1{+}B#X;hhd0+VEC-j))EKQ$V~{9G!e=H%RC~j!xcc!D__O$#>xR(Mi6IPOe>~ zg_vhYKRRhXk(xO==>nvqldi@YZO7P=gGDz-C&Pu$(a9X3T=$@HqDCj4t{u{PGNVlPs7lid@S9GZcZI(#XZlCesk(aNC3a$JwrybNM(e^9juhI@gApT~P6BORuKiW~hn0x1bC3h?miczPEsi{+GPB zAh?)&dH?&p1+CG8k{fw%K^97Fs_TC;%B~v1>)}r?!93h0>}EG6u$vvoZq~ZjX)CP# zn~ZLDW72_W(&?Fh>T06#${6ez8hUQk` zv!O`?%5|O-)zI8zVtFvjH#Dz+obB$im`Fo2(B4~cflY%(;Z{0qxe7hR@x{5g7@01N z@J}V>B|xXWM4RUWT`wpDh^3P0ctROfKVzl)oJo0>LI?~f&1$xkva}W z-|3V(2vlnZ(YHXm1@WdncP1+VrNgc|1#4fNI_@>jK|6vM zJ)XG-OtpO}&|1g&V{wrZ?WZ7qD_w0<{E{6pW<)+d6K&n!i3$1m_7;yf6J)slh$s~G zQDHY6;T2z}AhZR6vUB7xlBrPtapduyAdWn$EMQyoytPGs z`XY+JLV^Vq}xFpp&)Hq||dPA52k7OPSl-=)nMhA!>j-ZAir+l1>G z^AN`IX3^5sT3&aeiVhd!o{_vdcH7VyO3J~#Vw*3Ul`C62u_=z>I(z1ajq{6sAe{1AgY{YpHC!$rOzii0_8f-vF?N~4DdmDNQ&JF zUl=e14mWX+q#5_LW_)_>ofJ!f> zd7dNY=?eq8nAlxj++G-PHU!Y)S*SO$@Pz?4VYqqnO1;vFFcB{d_&_ekU5L02!mC`< z;uO3vpbf&_kl0Zjr})Q{Bf6aMPtAsj2wWapXtQ%SLNXY$%^y zA8O`8#jJK-P0p6Wp?rgwOh1(OZwbI6zlSBhFhGa$_QC*a{onDzfO06$esOj2f3sWt zCu)&h?>4!5fj8j_x;H!g_Yj;aYzR*JnJWs1;BVo)GtT`Gd^yg?%efB0-^Td{oG)=1 zsG%hf!H*+8dI)~bO16cGBV6cdNEfbjjYW9$N>_zdMaS3U<-BmE>*UpJ)6OWgYYZCfJ;BnL_tGj7m8Iv=QhF3TqaI^IG0VV8ukQ3wmW4nT(lbp@KVo?*R!wh9^qRCWWy9s_C&q%REc zc?vy-K}Cz0SFUEJxX88!6kTL1vyq64Y&QVuBAXXWg;>3|eME|jY%0Y?HkINc+d4?$ zVHB9U$kyszn!(qDjsRNe286Xr&aq2507*mp`m}osgBBqzfUShWuBUjxVojHMr1l} zy>YE-%A=<4F_}nA$E_bg!(!1;DMu-_N6NVMYN2pkcLWq0w{|ejZFVd+ZcW(4;^#Wt zU?3g078faT+)6?Gbbe9E3O5CY;H?Xjt}SVPF-?-<{G!5UUTHqL@q%II;P@#bSNQU< z+rdK$B>rwGBs~FQ$h9oSTt=qOFG^XtWsq59esSs+pVyv1`iv)m}}uxjiCrJR;FP4{7LNf4edBQAUwB13Z9u9qjw)+D~$@KT~vZu>U(X z=tHYocCU1{qaX06Zv#d4A-}D4(+~J{RHLK)Y!ga>{*p%f=WJ)W@UhiQK^*O$wu6dw zQDcnhPKSK0xxYxG%hl6X;1plf8266a;jC-&iyC9V)z#DaK)R@rVcZ-$#*SPhy1A&a zP54~YI0BUGmKY~$QR6)e3d1bFs8Qnsj%B{F7(c`-_H0+@Fjb9Iz+Bnt>CF(=)zdM8 zIEPsyh;x`Df;fk{U?+K;!weV1Im~-N*)GxY{Xdz*=;CP|EA1pZ`o+_#AIhaJzIZwp z?I9fSe@(Coe~k?#n+X#?&`XgFLASq;IN;yZB+3E*cX-pk{82Fn{1-ni=77K9 zlPCxLFCcPU0-_x74}MzA0sqQfQ4aV_Ssd^aM`5J}C*A@7)aHc__=3#=pBpGja==e2 zhj4Si=iUnMfd51C2{_z*j^Ed_{D?S40PVYU09j#wdUPC(IH~yAanhyB;jB?zL z6-PD|79H@*?t>}KpR*%?9H&9rR}BKClj>0SgHwV$0P9q>IlaWuvq2fq-_^sA5mo?JTMH~ImZ z)d7FJY0eO`I^g$0v=V2LXji6}F$=(i1Aa%bfmh~pq4UZ-@Dl}jWqudLD|7A74C9rl z{)^;?xv%i9mQczV=$aioF1ncedEjX7JNzo_WeBWd>~yl{1b+(qM?`!M4nFSz)b}8( zCmrxT`2rL24)}NdMy@#E|4t+h_=kwZ0bh_f-~%zsp^Y)2Wu_y{gx?4fZeg*D1O8zO ziUa-;B0Auw|3O3td_{D?kN=Y+WIEt`RkfcM2mIGMQWYKWNl^!UPe~@lJK!@~9q`wg zG3ki*4)~K0i=R5+yZ5wE^C=&3z!yu!0beYo1HRfv2Yf|zz(4ya)1d?Yxuz!RnL-DA z#x8LTQ3w19IOlJTTV?DYH)-O}cKJtVd{0e-8aU%$(wRj-XZ+RBrq1|^=s)`%!qoFM zTC769K%L^1NYB@k|DrJ6yETkXr4+_~2Qin9@`>Q6d$(7XhdA%v-Agp&!b@A_7^m*t z6A`2C-CmBb(~r1!Gg{rdDYydH*@cdE;#90M{C$@qR$aPdj&V0SUAn!REmmr9>3#+R z>e78NXxVPPMfnjLJf`D0BByV6!uwjt7ugZM-S3MyeY;a2uD;z*17Ux#kz`!B-W@l+ z^zHr@LR`s$KTs;uJl&{_lNBy*Y*pXxOD!sc8TY>3nPTY!78PY_MX43|rw;uO86ywE zcr`-4Tygq3?+{z*pnF^p9duh9_gCDDC5}Uy{?!O7!YketM6CrX%qvb|ytNww-iQRS^!i65c@?ZA?=w<9gz;*GuOmjD5-J08Y2;OcXyia3d=|?@{^shu z@9(b8p1aIs;E3NCH?q1qPZq^=bzUKgJ*kMRvpV9hHTi8`&s)L0qKA(7pNk$k;LDG-ZPT@_*d7$_pF6)MbHLE$AX z0|LHQ@U0%>%;3LO-RQS^Of^zIja(kIxy>6nMbe>>s|3-=gFtGe7fVWys=8J2<}7VT zRhUMqFpZ=zjD&zUl5YB6lx(DKsgKm%J;n-6fR!tPjEI$&NRqU2pdeZ~6DZr&+NxK% z*ySpX_UdnL`ks59$-qs2pCmyy{Txxuy1Q2tds4BwOE>-dtbtr&N4Op|>&615tA5$o zGFX$MtG=hbVYG<5J}F#~OF}mHbpJBh zvZXYIEQr2(r}rt_8@#~jqPgpH9oxI>UwYQRx$AF}=@p%lxr`0(_zaj5LShF91C(XgpBOIM(d7j}%oP?)qooiKYsl0;IwL zkP07$2!)yc94u-*VCnO1=y2DMK^eof4G~j7f@>SlZb6%XD&vbPcsb~Hy`10J@xUEk zraj_SW{4olya1Hr?gyG<{B3r`6R1TZIv$a$Mc@gbe4uRSNtsyDu>Ki`lKs-WV)~_R zhDP6?XS-dNRPhH^>c!I3?$RO;tkhk9s};-lc7(frA1NAoTb_Ipvq^8uQG)1g83s~s zOE0?1M7_7Aa_NgmE|-Wu#D%P4HZ-v#UKx?;&V*agAELSv5HA;At^;&uISQ_EzU1?F z=#^M}m%lT11;ZkD#^(VyS$TK;FY89R>*vaiz}HmBjj$(Jfy_mDTYed=mw<4gyZ&|w z@b3EFg79;wHu*tv3abELO0WPX;yrgjJ80};S88)iXun;C0h`bg|JXHZ&Am}Zi9hA;-UjllWEnfDk zV7$n-!lh5BK-ol~{(|ZO?G#iU=%Q1g1#fRLNp3=rdi{^?`WIUb^1}r<%3p#uS>5&f zLz_Cv7pHl5{mH_hpZw*;6w#ZF?)t01PlcVx^*AI&VOlKYQy^R)Rbq5s%!#qyIK;jRCM zWRv~Jm9S9zkFX&2AAbO8|KUY_5_tJbIgE;KqCX?XWgz9Jw8G0{SX?Z~e~IBK=2hP^|x0AN+yLMfD#W zg3>+Zb}01LuY>^g*7vFBvC8BIV-cZ!$38KcIV@jQYV|#sE=@99LzBQ>AK?A|V9!TH ze{eEg2GCAHlYlO+<{SNJG1h7}`gbB0um1;9SvLAA%SNBFtktQgL(?tMBqsW9Pz~jS z={F)qii%f&-V`($Xgkmv*T~A!m#K@${1%a^Q=JA-<_e%3mk4x?$@RA*YW2I4$D0w^ zO9ZY4dKw5Xsy0&HCXrhDkG0w>X084T8VhUnFw;_Ut*&daMQZh0w-Ln~Yf)#~QM~oz z(F!dQJ7a-ZifEoeE_FJ~Q@!<@TX|k)M@%#pN%_#n`7#jI$GJEy;^Rz8w)4_OeVo-> z-^X?LDNGGs?9Ho2Z~Y+z{cBwbNVwR+I7!YUgIQE5J~1{oX*i&c{dkS9ArG zKBIs4)}QJU&&Ia8V^CM+e!s1*c?o{{doKd5J}9?GXg58N=X&a3U#C&#EhprU^J_Dx zxgRPPMbuohE21W$x3u=wdyUi|c_!gj}z-tx>cI33XAfl#e!nK&PSbH6(-8|Safx$cfz zit{gV4&MayA0_XOJH1w!BD>?-;anY5zBh~GcdEs;X1v;$)tnA0bHRezFw_=qpvy;K z^ai@_wW+%Bi#uP*xo)6a1=CXMl)+=OUq8b7sU;CVnR_|jet^l8{}^+2Fy3-8KEcHAxkN*`RQg_5pe>2Rv(};;v zbr07rgkhID{ttyt_}~EbK8rJR`dLJ?OWeanA^g;D^kLJT0^LRZ^nFYQVrq7J4uw#} zPk*fm`Z6ryr$5mO*l%|#^wVF8-PpTLG#{F|;pq#6Ww`I~ADbZXe-`qB_x}M^X-Kpl z=oui|{0MH6`>Zy`Pt&bI+Y$D&Fmr*_vO#(Xq9P*w9dK4(z zHT_sC!(A!=4}SW~QHSE!@Lw+em5w`vR&1(^X^lp98>)TT0lrDkjBcwNbvmK8`jktc zrW#b-8Bx>!^QgAEx~Vy_wwg-VR^J7!{o*=Y#`gI}w9iRa4s}1*@>q=0ai>4@-|aJ1 zSo=(R8GQNKx6ie3o`iGXKG(zfLvpU|^VvAh!a25v;+mG+KJP<(^zP+To0P%YK_2+O z4T;{pJQ(58jqf3xM>oC?oy+sW#`iazFLXJ$I+t6{lV4ynHR?g$xknLx-g&GkzW@yr zv=3;Bpj|+eM{NbFnMh5%#$Hnxn(8#UQZ%(icxN#1jY*)-1f2)e@_dHX1zIVH7x>(! z%v<7%E_5DbXS*8_rhfWfGr!K0(E8Isw2@ngZ-j(yA)Y3PTZs1n=@w!yRRF1aZC@5C zZXs4FZXs4FZXvFEfn0}|`22Yf&hNpwZXsSOFhho+{kCCE zg4>2Q32qyvVcfmQw)Xc=R4yNC6WYEzm>FVQ+YHJxq^-q1U!14m9DO0sE+E}6>t&Os zvteuv*=RrgMi(L#ZIq8&BIzWCTwh6rjq)gP)KC9QvR65_w+lX1lL|y_hAV7uFKtdb z+uJ@Ze0v+sF0s9(khER=^zBB|U3&)GTRiJR*iz`yt)@OU1+g_doh0>!TTMe3L4|HL zjrZkiN59qd22!{_d57iIx4q`4&xY4un+&Kgso|Xg9oq1o+LDM3?`R-iD~?VM*$t8h z`C4!qLflAj3VzV*X)tqTR`EE6GHNbEhf06L$%%WOvd+5WADU zg4mtR6~yjjk05p@9a~X?-AM*ewmaFH&%bpiC+?@8VZ|M`qu*-!F%rN}x0)9AI6crv zz)AcHbP|`MJspfcb?#X(Gtx=aX*A`;`kMA_pymmvc=2JcX3ZB+6Y?8(X&`6kTCsR=qfvrFNm(Tlfk%R32W^{T#s^MnCBDl(=Q$ODoSap>w!)_ z$b!tONLe*SJH>8wRaIt8xAk z&V9Gq0p}mcxpu2J;r!&*GVMX#F1cI10`bw^YCoJWly8`gF^da$U(A>?ly^I)JlnuP zPhC4BddhQBQqf*_F3zKS-G*(7_PVoizR;bE3O3G?$%4LG^YVr>nR^kw8;neM2T=9P zi8=z^Ea++=%H!SHKsyn((6P3AO^LJE>!ypQY=kGYC3h}RhM<>#Qm^1`>TtoCJP&Yx}k}c>Ud4e1+{xLxnfSO**9y|#@g-?k$t9XQtR&jsw!((hFumu@IMjN>X-1k^je`VX>P9R4ZTe zpNM#PurGa-*75H9LMZel`o<`!puofDCZW(1D7XpA*GeZ}W{;|=Y)A0~Dzv>ZnA+2i z08&q&;vyy5PeJ^axC|s7c4J`JD+t0ry{y$r;c(ja3nDc3|u%;s(+~^kU@%hs5j^+ z)@Qq}UudKsMMQb1b0qP&$>u?}q>;p9(4!-X-vx0b(dQQG){(?-cGHLEa3nEj1g|02 zIVOVRM-qGy2S*Zvzfx1av!fqLvoJC*-LbDB+(EoUFS#!%5^i0 z6E%{^wxC3q<<~g|f}HI(TTEmm;a|j|>l`|g_})q-g}Jhk#OsnOM-ushIFhK+nU-)Q zkt~QKiKhi|B(Yx*M-t6%Wzsdj*8KaCL7R{DBLj|z1F|G-aq*X>d-nDN;0E5f2+oggsE=RNM6S`KzXn$bGQuXn4oun zM%~6HF#~0@Sa=Mp(9QF@3Zm>BAa%V@wL~y(pzHm}$ElvK_rD04uJ;XZrvkd(j{;ia zNLAPS?KoH0`(=C8#$?1*9Gm|bwb1oG?heY*^}Z31y56rc?s_}Mj+`faK5R%9K3@$y z2q@Qij#VJK-us|5B*h9u*ZV0TXS+{Kp|3ziUGIHt7EK(7w?e|G6_OlX?>`4p*ZTve z<+q4=S4pApX+_MP%nn`e8vx}x&k^&~_5O&7xo@>ZXyVKL@W=}S+0KW06ANAM7hwcB z-!4WzOoZ$G4RQ^05OF_*SGkGBDR8}i8DZ~BY-iN5Xa#h=XWgrk!iz?gVK)%xcj7$k zMgU!O7q!y$-pkdVSLk}b8L{emU%5LGUGHxP%5~>h*3|X>s;DzI%Xs?L9#t&K%Hd`^ z;t}5z$ejpm%|?ohRkswvjb_b*{g|WQ#wu)7WlST1B4OO?8{D!cF%Xk~;MX zf7AUCy%Kcb#75_Hu7sKdsHpLzS5qm!aCF`v<`X|U_x|?(<$AB9b923?*8d%@_s3BX z{o<;kR5!bCFv?D`>wU*hTEV}^6?6&X{(F>76*kHy{jz%sN7-lLdi*qbqf&bUo=*6q~2#;R8I=5%hVf34FUbuMGxEC8a zw!1G`&XZrm?KyA!Gi>BaqlWYZ1It)oEE4n!&<}$40#P1swFT;UFEz1RdQD+ys?+2K z(UgqvXTd=83skE&(ZxV31vLR`eILVECzk;&ag@df%5nY~&cm(`P{IRcFr0Y^XtsM2 z|HJM%{6B!uu$u|gtRK;QpvQo)0QR~IwLtn|w-R9m61x#-P%3#lfllsE^d-=hf_?&e zQ_xYM?Lg{!@AH%njc~oMG@8Z3b+cOs(Co!P8G^WOwhu_x&AeCv#Ok&E^eIYl-Atvp zZl+RPH@jw_RDm~`ZLXUwz`3rQ{VXx*62o<~frDg_rR!#$e$bkFw;lbunI^$?Gfjf) zW;9GTOhHvDvJiIVaHmd&IvrkK{hjLK3#G-~UWb=FMW2Y_<%Yqea(L;fiSvsMFBi)o zyW9cQl!|D$+t(PwoO6(U`hzS|YIw&eS=3O@EtMkWAiFgvHpo6~oYLQ`x?+Rud%@H} z_DUcfWEU4Haga?x{B%O}zRxvny*eiD>5?WyyCo@3h}sO{)uk7`7sS(Y%v^>ekI~DA z>EIy+65rmh=7$!57;^KaG&prS0FF+GIy?lnE+1|-b}HFLCPec<()|7jq>pQ&*(K(c zLipvlUNF9b738UQgvxvh`j1ys(%=0B9KW`HD(Pj(KF`$h{TeJM9k2LglE?A z61`$(L?r5ir)l&rl<>?3UgF-Eyoki}5s7?C=!3$WLvy=t{0wF%DO?AAd7oZ1KZEfu_nf|rGoko5OP;>88^&Dn3DgQf zoW7j*C>87UKXd!Px|=}TvDiceqq{-}01>yrHRh$H1l}ZM4Wz&}j zAg&9cuL|PyrG4jp((_*pj z{jo9#i2COJlE)bk_09V)M=~HKC&Vw>$3W!rCm0ara^K=f21I@He$1#ch2Okq%HndL zkAkj@6Yp|Av;}-9?3?$3&E=kZAxd(&Z`K&$=5o(%65i#$dPnH_uW#PhewOE<-YM~-mH0}u_M;f z%P-JcRi)SM!l%o<^67G~e7fAn8?UJyE6+S2X42*U8EA!Ce)HZ(cZ|>~iCVhc7buM` z_oFTPEl-=(QfPF!zhw-xsmr~O_C|V_`_-f%MY`PkxJ!Qa8QChT=yG5GY1x7YrJfaU zEbnrE7Z~btuZS-9is*8$h%Wck#C5UcERII#a{roysLTB-)0&Q0xZF3Hz>=q9cl&3k zo{rr=k0qjG_e0}|=-B=0vqW_4o<1Jx7rPC(=9^7dK6Ski+$OsILd31>gK&d!#mN4jUpZgrNsJnfoU$pGbwxf5qcN3ZG z#jf0EC<}{AWlA%HUqw$FL|h6Ib_N3-CVjEH8L+ppGsw;ehCIg-8H0%F&yzhI=<-Rl zknZ-LjP@4p_8o*vcl%9~$)&sfw^N{5-R)oUb_iMB?dwkU#3z7g17CzN$e3AR!rgwI z=;c)j3!PWx#uq5atMZ8;UX>;2x--af2x4+2L6hMvt-aTWNIEJXZeS^7@E~jOSvFBpyKf2i8W6Cl> zgNuFqB$gmOV{d{6b+K1O&)6jh%XS}`NHJH-fA);sWda3EBP&=eY0zK#xTHaM&b#L^ zHM(<-22!U}FP4Ob!a~nj5us=7HW8uIsS4BSl)~_rhJbfErDtsE-?ZHS)ibuDk@6u7 zr|zzkSr9a`=4&*KMqVz6M)m?yBfVJSQZtgKWeJf^-6~8YRhULn81EW@fH#ugyYKo> zMn-?{{s|-HK^RWmH{iOekw+y(8u`TQz9jbnsgcoQQj#=Ci8S~8Hz-1LRSk`#FrIZF zov?iG{!wuBg$Q0*;xgpezIVS%H1LH8D#ti|Awtr88o}?~=l!WyA(e9ed-tCqT3?7z zIg^|H${$lwt{p2Ohx&4a_J|M5_wFA9%8{2N)G$^;PxUYA2*eTz8a0Ehrn{c*!Br1lX=F+V1 zMEJq-p258PcOsmzfOk`MEQImr2m62j-u>JDqC*&N_7mlz(^a_*6zCVldx)ywcU4u) zRhi$rKiQ&c*b(2m-zs|OW6vmwhfykYRcR;*rIrv+15&gaU4~!J1k;{XpU+{P0Es_q694d%L zW&`P+=*4Q|k*OF-({>7x_n!*$?o?qKNnscX0dFK7=}$kb#a+zEVvh7Rjg=2+IMRO? zvGRx{Nh{A^$a0~Tw*zIn+f1Zb>t5pb?mf4U$-t5R{1;getet71n2z+XiegVHQakl~ z_k*m1sJ#+qW(I>r2c76QKvKVV?%ZD%_X)p1lE1|A06m#uu2@J`j3N;L_Hno z@66_)gx|X#W|WC`^bYhNfx#3CAo|S=@8-2Pa2FLi&~r7~JJ6qhb;Rqjgzw#7p;NNK z5eND`FeS?C@yFl?35ar_KY{>tpwBeZYOg{r4g~XGVnNe^{_I7(g7kX4TM)e--xNfz z$8QDE>+yoO$fMU|XCP>uw;S^!)0#@HKLm}ZQ)?_9PizzRAyCRKrrds@c7k>TeFwDK zJ@#l(1>!*e83I*!E07AW15)8-Kon;B%`vuLZs~`aenHR{Wt`~-BjWBQOtm-A8-lt4 z?EzZj?ywefu^k&nWU4OpGHnG>rYBI2JBkNH!;C-6j(CoAP_kPKv@s%Z8qj>8Z0AW0 zu|8pqJPsv0(0j#n6{`Sa3Oj}QmQ?Y_PU=`P%-WD5kDb(kzPd#!(|<8UwB4oHPt0;%x1Konl(%0&sMB6WW6 zz6ZiI;VwWb+W|;rF9)J5emQQ(7q~)J$b;+%2l}Ta183kqtg@0BI0a~^pje=pK#*+; z=w)Vj*{^~;ksXW3A4MV!=+afxG6-mvpx!{StDz;^y<(EwN+9+6A06nQuo~nC0&ra) zHj4$#@7-StZR$W@oaSBEy9tl;4qJtS7=tqO0uIrgVx$Xty$yKWOHzO}%#&2Rq1>>0+*>1WuX@B#e=cldFm*lT@p$4=4 z9rJ#$GIGak3b-xbd(ii49qCI-@Src&muwH3Ae&Kr$&R3<1Vnkzw?lyTC6lbfj(;0B zL|$+h5!#njdz)p`P_{Vqfy1Aoe8*Ysh0?awQP7*7zKY$)+`hTDJ#%U!m4} z5D^yktw4VW>Hst&%=?2qNVFJzjoE=zTTA`yKvb3;h|019p)3>q37e2+S)y4?bZ79y zt4#D<)YfECflX(jse&p4Z2?;2e6!^z8+{`(u{lhZGKqpHb2CtmTa2W(*u8MXj_5!x z6w!|n`Jf1F2AT$x?L4W^fJle%j~$3t%nsxRXe{hNVvlJHTXF}|`-sMt(1DbE12JH1g+c{)6 z+J*I9Vb=ocm`l0SfR+Pks~;`KTFqAf3*oWVS6R0DD$7=%vP`rK>d@zwXbKa3H|UD; z!8d0S5wo62jRiVa&7^wXe_MNt1PLKYxUh0TclR6byuNyudt{)>?j`e z;}LNotb-$=U4cyZ5YQ6{W4A!Rdr$zjZNy&Czx~Si= zdeHm0={|+2!RPaM)#yS0JH*w4-qW5jTE)J@g+&kg^EUDpT#hdAF^lyq_C4Ixb_*El zK|d5I*ZFwud(?y8hj~N12mN%>P7nHtrrk5BoqN*OiFWQu+b7z6e58Y=2fYuR?ejS$ zsQMc7Ne}dL@6rR^N67_O5Bfhbdi23>dC6ab=^|Ng53VdE@wVk*f2YaYmJzND`p3R* z3cMoP&xfw}L5J=c9S@Z2e0&l6H(QIk(~fv@^ijnAY_Z=*6|>(5|Kufq32uL#Ij8+Q zBlZ`kdHas^c8aY;~jEB-~7p=bm>(zI6X-7tnfvGBZNEcaqTbOZU5PJt42mZ*PH`1yJ!@ zL`{`_5j6=dH<+3e^U9RHo{AZl|O>PHqe)cAw>n67&IKK<$SPDn~QSv6Y zX^4+@C3y$u>OtS_xOU2EcC0mH?|fEsx|1~6j5ZZ}K%utKgZ@qgM(=~$gY#&2lI~l0 zuKVDQ!L;2tU+A`d6%$%&NhF53H6yfu$s9m<^{w2Rkq@LE^yj0XueAakZAWg+Xpiuo z;AT43pfNzp+yG3zx*F#mJI0P&n@Qbc5Vt`1j{T+O=yInH#?Av`gUmW~FxPtb6nR|O3KVyR?0 zR`GJ%SU#-i+e}j)G}UQxifH--;qAb{@EGWQLAgM|c7`nnx>FEq`8Pmo+yx=6dhMJZ ze|wXA`o2Z{LbnzhkbHdnTI}y>`yyg9-A@RQ+d+-r03`|f45$}ShRXxe-Bw;U4YJs6 zRYiok+bTp=TH;M9C? zxG1~CEm;)8Pd(_rGu>&>UDSi#$Al46v(pDKuZRcz`Brwm42yWsqdjC2A-{X6(1X5O z2434`q9N?Wr~5@~gk`vE@gE;h!T;JjS4DPlP;o`eY$2 z74ezw6`(nSCIjsfGzO^3M~oc~lq_feX3 zztV9B(27lUzu$>Q_SA*3q4xOGCVgFWTYY<%6Kbo2Zcx(|DrQC0-0)pgTixE&oLE~; zC2Xs2f!2O;ZD8VN_b}S$EGvhJW%L?0`xxzWx26BxK2wFY&!ms~q_BOy3+HQa?%U^{ zI6oxk+CKNe`FWqReNM$SExCQ}h4|?9`8k|p9UA-=kS=U|4Ot={XCW@3 zb&a=ZBX@zb5a@08N&ve%A&C$J{Loxqv|cLLKeZboEV+Y>v`mGj$g%Q04_I2>AQSN7nWRZxk z*-5dnQ7-irwX#vZ3kdBC+uJiO3-KF^x3{Z=&h~cy*S@`tW|!FBQV2h7Z!a?4Nzm;* z=$n7T3~}eEk4-~t%}&=zVQ}Z@2ry92q@FDHBFs!sqCu!9I>oem8E^=%l<);@!g0$u%HnyK^n( zA4VtIom}B9g}Cod(jczg$r3^APQDk!?xewYjAeI{B8c6|4ngcrYVBvz!z}5)btfn8 zK_4Gz5hmKv?;P!n1n|?HqlG=rTr?7J=k9?{Vgy>mrTEjn=9F2HPNGhucTcRZY26)a z)sCqs@<3s?`ZUhZ_`a}P9gp*yQ2p>J69gCbx?>O+-Rm~^v1qS5 zSI!H2-FiPUnN(D;zbu(NCNr*1rpo}DDrhp$c0o@AQ667^0qR&lO|0!+ zQ}X-lb+@mkrh^Ed1xBX(4ye}8L|*`H6SNIz{x1w;RgeFbMMdeb3vekfz@MHtJmckCW5+Uq2iM=0a#$n1n4D^GbQ9#!o zVc0~VDS|S9;{IS*CQxUf#nNF8E2|YKX%l*obulehvDagd8Qoi6_$M>P-tuuE?Jd1v z9t83I_mxF^%T?f6Z+Y!WnnLPk=`BA8Q$6U9iB|TO?T>=3z2&XO&L_Lb>|`8BxRx;D zy}x{K8O<)Sx1ImY~d1vK8$#h_2abvfK+CNmK~M@xpN=aox#UN?}sWgMK2TIf{5MP9qCvaFK7kb0o3Y zWD6i$(n#V*=+TkH-HwPOiI0K&NTP?Subsz{#6G#{Ig$v)#6?CD^q}WRVtRQsrJ}W* zek9QWTpdZI0_jL1%edR^7(4Pc(an*>B;j);u^I>t(8h@xNqlNSeCeuR=g0>++x=!S zk&%S=px1Q{9Z8&Kq%`KrCZ<&bTFHrN2SFT3j1?{@sKA?r$(vT~I2NVnz+As28UI zrn(C2crT6t<*U-n!(^a7Wr$t|`W0w}3!`if<&ej)N8&thgCNSDS~d>1Ivr9Gf6o=s`ai z4E3O&3Zx$NyNtWnjuZ2!m!}*(=)GJLSpMVn7gu1}yocDw1<`~4 zJ)m57tz}I;=zB$-v0=m0ud`9bQtV<3v?CtzeIog}j`i;p>TUzn94Om)QY=P5vWBld z^21HG_%l0=9cHCfKL0~L3?)(Ph$#m>GCKbsdC*hq{|*oOUr`YK;>w{^H_KM(G`rsM)%9-cf-C4!H~sf0n<{LS zP5K-0aX8i2^A5)O*Esi!S3_}Lqax3Blsy9H9dV9D6V%X>N7-W$A3e%migPSpf!`j| zg~RCTmEwvFqhG{%^pk@cr}DgT7(ET=3#HwC)pDM?1GneA&);LCbv0_p4luBc1yuVq zqGmu{1vLbsJUqjI)*@`7W3}{}_+5oMO{R;c=MesPRKZ*3i z?k|Mhhp@0a33c-`K~;eU)?`>cpiDvM164VbVV4251X2%rpQkKnga>`f1{M$3&E|um z9`pwVaowy{Ef&R_SmE+wxYk%VYba7&H&ZFDo2eAn&89;Nvj;GB-7Kay&EUuD+X1a~ zZBElFImC|o@%jyj!%x@H8dg=xg?997Xqp_?&@?%&q0vYVlhcsk+b}HbIv~gUp-zXI zJx^6#d59NpdL3%=REL@e>X6Ezrl%%;SZt`N1MWJNRZ}{m;Z1+vMwT51+?OS=c&TBT zQSzvvoGT?14!G|I#RlBp8|M!@78`Jn1ycvyyMc7TU0kHZ0XGHl)5+0Cmh1SBVC&T} zo!%{Jaun2MQk)$10Mf~k7fgp>-Q$~(f#{{gx4=URTyy-uE?@1BK@7P+B&%FXJf$AB za&puk2z?i48DAMYo$Ml$qfJ8R@gEkS~ z^b^0u6UhgI`0ilX$RKo%UW)M$bQgaw-t;SA4Ju@}@7H z$bgg_%v>J|LJ+x30;0U>FF2o!C~x`!P2&o^>6x;4)5FYAU7UDt`g1Nqp_wz*Gfz8}380AghNdo@On|`P;{>_`dsW37MKVaWo z0{+dL{xV@idDCAj0Vn27pSl-2|Lp2^wm|I-Dm==^|vqh`EW=}qs+6HeD!Ri)P(Tgj(4z4GZzuY7vb zuQmI=vSa0$Erm~S`XSH?we+U<(WOjn<(Vl$qc{BqrO}(drA7Dfv{_FHjo$QCFN8Mr zruWg_NbgPGn-ru-Z+aj1eIz3_CFAs_UkRRmz}~ag8q0gr9|A+Y=@rqNUJP??|5fS~i^90dv`@@zDqu=({ zi=k|>n~iHe+;riNqc{C)qU$q6Jbek-c|bdWz@|5Sy0H_8EluzyGz3B&#!rFyIE7j0ErZc6PK^sY_*0vF1_h*Z41rn zP2a)WA!PNYe;(0F+(M#VmHNia0~6l#6}Pi&cvViif^>S*KhcheSEbICM7%29uOi}A z>2kH?hq-^xbn&&q@TPAqx|sWY;Arm0T_fy=5xCvhDP+$HmI?b!MAW>N>{o#@fz+Gc zlYcTH?@d3eJ-PIze@76#>1%ah7`^Eg(VM;x!kA@x(+{d?7l{eK5$xWZ)lhCxO&7O9 zA|;X01xXBYH#Me6E+1nU>7phjDl{Z?!H|>+zxR8swV!$BG0N}t{pb6g*NgK$d%xG( zYwxqq-us-h*Lvtpe|`t9kon{FUR4fM!JEFfsG>JLDe6t{DRH|Zyy=;(-txcPqBHC&q^XB!q*(aJ z>y@}3-k`fgn7*Q#Mh{U6<55h^<&W1F=)^{(XQ)?}j6CnF-2k}=5`&LV%jewXDP^Wsh1SP`eAb{&YTqjq;SX#BbUh)V_qkg>pI%6b57;z5X{F+ysj>~h!R(jih zA&B0#Megud+>3<}BslE2tRlSP)j?FpWfkTXr|@!@00Hk4%pb4+%*v1Q35HY9W4vwD zyZQ?wr9&8T4w`TCMz)u7XyiaaG;$h{c1tf7yT^>AX={YY&Zxq4TvlNkNnscXfv}N? zb5POloHLE&USTsb-bkqsMx29LVIy}-i8S((E^HPW*%BztJzyf|;VJ|V z=(pTg6w_~cyeRghJbud=j$ZY{O@4yc^IlLH144?USN%JphhFt1yV6v8)n5k$Tm9&9 zhF3j)V-+1T;>YXbuGCIf+m7(6e^*N2Kr%}7^2h5HaUj`;v^3}GQH^o-5FK71hYh|W zxbqv|E3UbdwzI)s5yS>x0i?aci`DueqU)*%`-i*BcU=``ub?niLJ;u1f+0HYu=<_R zDu(Xh1qpgm_||sJgB}T{3IM;FCD+~RIDqD<>Te?#N$9HD0@0Q_A^qzx6#7 z{0D-gfY!Q`S1V~*6+JFT4RsD!fqb0<4gu*LP|R2t+Yxg>3uzM00TCoRxFDjdn-`2p46}jsF$EMKt=B7 z4b<%Eyb2^5!W&3b;fX*hJQ_%ahX7HS<(I;PLRBk2c0bC`2|A#SQxMV`pU^?Vn@*rl z1T_S55Abfh@hZJWZ`!e8Sf(EGRpx#{lz9#)!+nd7ecg@!f*tWquz-l3MCL*fI12PB zP@40k2l0N%ZYLb_kA~nC^NaT7(3pGsy=p~8e?n9zp<`C}Jf9FX8p4Z~wZM)AehpTN zt#oGnQ*5O(>tnrGVLG!e0a9mHFFMsky)&zF>C8$lU)sm~ihI;phkZeehR_xn`$Tn9 zAYQH%cRkRpy(zfX`Ib+N(D|Jvo1=M}rky)Z2W$y*LM^Hzgb%I&}ReBIw(%h>i$!#Ihug@9{ z;UDWkegTI#1mn;zG#bJ^(5BH4qG>)F!YE-d8bXXMC%hs$3o;tQ0x&ch!e*dMccJlQ z5@d}T4dEx7@ci3fSWyx)gO7%gm8e!k)AEUia4brbHzOx(M(O@Eu+U5qHdoK`Tj!aR2Uv z1aPFWUOZ!d;vD>RFReiYn=_DOMrkkLt0JP7oL zpnHJ609xz(=;K#s&BHS1J{#*%9+VQ4x&;ZKw#82AU3( z<~*tRlJK~G)_K4y<~&dd8gu7?V^&oD^FXmmI*jI-2iCdDX!3*BEaw?T+`k_}#wM|| z2M}8kyElPqJi_)|>k3y^eXZm5IO~A#Y@Y=E!=3HZfc`u_^hURY@WLgZ&>K+;mo32p zR4-!T@@4RzBt(SXNJoN(-tgwc{)9`L6+FI=mzH6ihQVH4xXcp7h0C{sxNtcwhzpnc ziR5wN(j5p||3YPpStS#wbxUwSv^M_<;WLC?7wAVp)qoyfNC}LF@Fv7H8iJ?QG+N1r#tVzl5WWUW zqajqXT+ia%!wri6fT7V4Dh%Y@0Is4;-T*)HUs%LG9dM_#hbi z3q2D>yU!0#u#AS_6I=UwP6;ai%$8&{gfz(Qa6U_VmPSMP2CGM(+|^4S4Hk=JfrI#| z0B^w5b30Su714fvG%q=b_Vc58U7$?o^Yhrhri%82OgrMs-;ZJY z?}FS8=d+^h_sQRT$)iF4Us!Y6KMax|INBdg^Y$x)_J3>&ydrP^?6CbGiv3?1FKj=f zA$TFbf#A5FW6(h|v&Y z@gduq2Zub-5PSnmwm#_Wu+s92hH!Cz>~y>h>U!g!ZkU{n54A2T8p0hpk_5x91E-2^;=j?eEt2VCcb`sj2*AIp&^e3^m-V$A5yU&vB@Lc zm6$ew|0fUS-o&m9_)t~5*7G&=SbQ*c9(;TxdT%0yCGY{|CGY`N*xp3a?;Dc4H}P|v zPsO?4oA?#Zv*cX&CVqqS!bAC1EE{uD{(BRfB0q9(Vt<@#;DfeiaiSf|&-nfzdo;a( zHiHGVwSJED0xI-m-tCKHaUQvSvB*=o+ZT7iwC8ZX)J;2#-&VCEMnYft`6mvsnD>yL z4#s?>Xo3q<)f%v`9l49TdlHLs|DAf z#wjit>D#2_$v`EC)8_F&w+b2w#8yGfN1!yMEp_bE>r7MJFWi)QIER|{BmGyA+6na7 z2ughkv`Em0K!u)W8awn*pr!6v?7_OSns&bgXo_z#L^P!#eY$WL0DUEB2GHL?$?g>( z-TdZd(; zA#DP*rMQQHhCM@iPaxeP7s)PM0bVh`r{jXi|0ym6{S?LDQt^@5ZMxH;JHF*s7?CVL zS*;t(d~WC#-GJPSL>++c z6VwuDw;*22KI5tBjdfVxn@vg36o2EkW3-7|u*ZR+Td=nX;uh>nCs2x8u)S0cq$;(T zDN@{mty0{Aty0{A-5yf-N|nR!IQ$W_H*v08uyZ6QRdN`*pv_A%Oz5`jNwu_lEVrZI zcCAHl+qD+KZPzr6!wW~!me;5pe_JHJ$;RJVA&#UEL3y&{NSfj}ihh7|-0wi8C$d@` zAH8g?BOD)ZfNbP`;|IXAA@?>bWF(0p_n?%*k#sFMy5IP+B(PUIj;4jI3fZDoN7F&b z*3tB>NqI-pNOr!XDMiDhX`JbfJ<8Ga8tDliz!NbCT6IMAjP_uZ>vFy@IHERq8ESM? zZD&e)*wJs*9ZL#EskdutoBEN}q8D&j^_M3J+VdM$w?Tytt8HH);;_07h?k2?j8>*P z9rESpcgLNkON@%I<}NW9y?{%MX|>gixH@*UB}O8+y2N+|NS7FkjJw^AF{8_gZZ0ua z2%k%gY#{g?8Yg0jvD1=rV3uEE1g~+#K4m#)Sz_p9QOZdC6%jvKG=#WL7Kws5SF-2iu5Vnshc~WaLk|T zc8tLk&=^DLK>X9?e&X!#6i}hsPvunl_X9|g#j z{A8}=J(Q(<*#cb4Pjj?dU%M0{_Ms?vF{z^M(O_}%tgRaFJc{ks6td6|emX}@xCw1&3r4004Zzpe1MO`~NetS$P zzMh>7+=lO;jqHTKe;R*70oK_^FNkj{c~TZ$$Hw0zr!b$9e=Zo!$$Rg^XscAntPZ!; z3XCLtcDV{yW3&4OGijprhqZV=$iFtYhzO%qFjTkZML}r(y`fOufqxVXo%!rS6*iNS zK7DHLOj;l3TXF7Z(#AM1{(7!oRdbxT#QAcUfWDpoOgbF-k>I~FL zP-`H{r#N=xtw>wy*qyzm(C?f{`-!GBq+j_ax$}XN1x*L)ID=^ufm+NYVqbn4XgQV$ zoZZ&pd>PKu-DaRmlZn0s>MUqK(3^se0i^@Ybq-fI-Ic)qKj3_&OM;%;U_-hqhqUUm zsG%y*RzdZED$QovO+c>->Hu_1(7iwp%wcYSpshg5WI}9#{qOwCf$sRm1+xC(ti~BJ zayIPr7AwTrFd0Z^Lob+goU>sYk>ebv^V_%J*=$(kdM%+ALS17vd?Jc@`CKq{CM;u2 zM&GV@T4%z0k*zb~8}stcgpurgXF`hN4zE7z1pz_pI?}%w6}*P@!eo3R|tba(G`NvPDXaQE;ZyH;0oazD$%e6D@;Q+DHfLCmW5JA znwy4!lYf4Bpg$Oogw>8qgtGNCJNB>qmk1v~k1i2vE+XO*VGfXAB3y6kn?k<){HIU* zCBi4*__q-B<>3;cxDAER*wMd*xOg!&^DRUpAYCHF8K=1&V@5X>-CQCh2%k%Yu|S!w zu5luk2yHAW5oY-%!eWrqTrbNBFA;oL0(}diON3{wRgzgNd!F1QrSf_5;w7|~ON845 zafvWi5SIuUg1AJuGKD-Y5grD@O3jKsV~LRb^s6y=yVp^#4bYu2ll~lmZ<|;GzBmbQ zj_T+|`qhqpVK5JB@fW=?;IuRqKbMSIstd;S;rOQugI&*HmiqT-1=Wur*m;LgDBWz` z)<}!~9!0s;K|xfgBPd(mktP7TJC&$E&>kS%?P#*O!eiQlOFeJ7Aj%d<<4wq~B{^0| z)4$QoE8XJ-sGiXZZUaT56+A15(F*neA%+g98m*w_ySzmht)RZyn1sBNH!TCh=GBu%;n#$Fh0kaOqkuA<=ZJY4tzf8$ zJ>$hKTESchq&c7JP0Wo}Fc2%o>J9Wt$NhtgvC1`(YxpcOHbHo`yCa%{Xax@-?W$$W zZG}D-sesW6*!LboE<#K|CAPuid=<{q-6KG+E~gx$6?nM>uza+FD(|yx7_Hz@L5x=L z0Z^t}WL48>1s_J7@m9dssiQe~2ij2U@}(W|t?zlMPigkQ71Ui6s4`HR^P~*iHu8>L z;}PsK+31gVn!CfgZk~^KQ(cP}aMOK)qJkKI(_JzpVm03Qo^yJyQ*JEOTnH8agw?G0 zBX>3auB!$;vKoKag;(Pq%4+;w7r7dT%hmH-jmvuX14pg4G+!mW`R_#=g1!vCAy^`~7Z+pceRbG@Lgam8GpV*kC0rV3j{lRoW(+*R}d zoPUXPzlweo=jX4?T}2PVc?+B)1{iu|{;TMxkRQ2e|6qf^jMrPm2o!a2CZ=tbe3Q6RZ$LV$I-Dez<_rU&;@IV_5j@?=xZR#r#N=N zRHQ9+?1o-b2u~#yYP>3%nj-zANL>%~(*Gz`6{zZ3qH;iQ3t}IVNXM&bV&>zF?gXpo@kKaZ{mEx;0mEx z$fXG z!wdf<;OOJf>9C!;@Q)VB*H((-FT))~P1~CC&UTDH=t|4IS>#Jt_Av`O4ca3>_N4HX zG1FPQV|W(flfui$*Cz#^orCOhUAl@cJ}Dfd27QxOtpVx*TEcbyE z{ismAx!RFzNB^jB?PhA`qe2%TeN<>-oE~ZSM#g6`$21w++3hiXH^XRiAUI0_C93Zdq0zld`CZ@DGP?f=m)Bi#PW zL1dvMM7aIW_$tcnKWA%%+doSdxBnc-K7|wS_WvzbV&3gvu(|#7&02nL|L;D8baVUX zh5_&PKlpCw`7gKsUd6Grn?!f}zyAk&rUdOI;osc;9~H*Gx&2oW24e|)eLI>zIk-y_ z{>|B+y9ahyd!%ebI8}+d-LevGils= zGa2b*aQLU&zgH0#152g^@v&4xxBsr&*s1CE{|b=0{d;nco3#8geP&-kKHdJ6Pq%;N z)9rtf+4rs;OV6w&e7gM~g;uDg+rQ7=8m4s>8r}Z8ZWkKe{)hM8T&0$)a}1nOB*GT3%CEr!~i;&r-7sn=6CKOqJ#MgL3A+RyOU{j zFyFZg%9go@an0MCt{m!`79@+Vw~#UQd$L~#+6@FY-Tr$TJFXzuQ-cyEc@63I|8+L6 zG~ND(7-gazOOF0obkggLJoO~||cpMRKKy8f>bMA!csN0>&}e?@ftABr><9NL6! zhON}hkt}#|@a;vcGF|^a5kb2CzkQS{==$IA7!h6n718y7CDPRO->b@oD!Bgl5LI;j zCq-TVJtejwlx;QZAl{&$sP3(`xs4>YK|zao0+zJjzgcTa0=^mF#o?P&tZEF(2I zC1udTe7ThIAtE}@Duf7IS>mwn5zg~ORIvY4(2LM*HQ}OeO*y(I2PB^ zU=qD_$6NXT>ZLoyNJ$WegZZ4&YzP{8o0LN%9~VR;rvj;wUMvS<;a|pHB}97ZsxZBD zRhULn82ca2&oz=>@Vl-2GmMP%g5PVTR0zYtya2AN8u`7HNF&Ss$!4LEEr8P8mAB-3 zwF*tjNjzS-Hr_pTc6Io8KzC5jtz$B9FmEG8&?U6DD5gv3I8p3LQ7)l{K7yyK$=~Yr zycawtdTv8zis)$$bioOlN(b{gK(Mv1@y~ED|1;OYT)S;*8?99i8{++7#>Kwdjuf4A zE?2~Ey98-^wIapBQ7V+kF7>$x^SWsouNH+7`x)h=OPBf$=jyHOmBkgqr8jTos(-Oc z^j20m=Bc-G7vz|?vf19Aa^72++3KxKL45c_W)IX#J(QnBu6ihE0%f?7)9}kUrY6IV z@K8Qfmd!v9<&&VLxs{gXA0{HBRFt_@Td=wvOEhscr4=hoz(n&mttk!E4k**b8A%>t zHoD(TFI|<}K!|TJ@%2EWRFp6(^W@DYcMq$pa&5~>XT`m%av};yb3H99!qTWH6@846 z17W!Ox46W2{mEi0yMBfscK!W8dd0n1)8cl2^6IJxuXxdaSW(`eD$FZRVZ4WffFDG% z5CGzDEC0;-QDI;Y=7_R<5g^jE!<;u}jZ|S8 zN#W&gBm}&XboFoBRxfIlk$P=p)=WXcw;L-9(s1=}eW`ECEm9<{EP9gdLM!V6rMU?v z5;f)*LJWa3MiI|_(`4XSo+L$Z6uCmokD_oPYt($trkpy_tetM*y8k_y80B`nQq@b z1<`xzZ9(*&Iv|MNQ`em)kKR*v0zqrWF?fob){)e@C5VU9Exs}QjxS}xJ_Sm#P!Xj4 z29yf4+PP=)ip5`t-GNA}>d3ntNM&09scd~9%CgYO_{{Nw6`I9Dw+4;TuqkdUGJ1-N zkAM~lS`Cy9wALkd&bdGmkBvn}X7D^R)N^$x z%u~OrYL^RswwjwA#IhcWsek?A1RaEk}6Y z0IBR|AeGGkqO3efpbyosLPxUDkAjQPJ}IsVGD;OD?6>rz}5AhsfQEdxzP8pqpIwBd<( zK5;C3A7L}M2c;0liP4;vxz9hviw2t(azI1o+tSnweMk&@#yQ>f6(W z9t?sjsdW)DS`?**H-Ux=N&JZfp!eSGA{^|GRwj; z+krCN928a8_&w~1+u#$a?nY$(Edr~6t|-piz>^B&jq!io23|35gCC(W_cj<{Mdg1R z9JjjXxeau1f5oy=?TA1gqotZ0+}prHb&cI1h=cnnARXMjXtIg=!Cko=+{xwO{wXfx zx5hf+3t}LTQh&mGx&#X;48+To;!cA6Cek>#`e;&e##O2;Uhy18(y4fjpW$ z7arWRgQ&rMcd!MOix}MZ1iK_5B9O<=lHdb*cnfM>h;EY|^sU5hvjTPdRm^5BOI{$I z{BKN3PugWjAbWRE8RlZPI*tHt;H0=VK+^;@20A6E4$%Fv?Bs*dVPk7-}l+HjNoF`P4^MuNBo={oN6O_eYh8qei;yP$|zs`;bkVhdK`n@9hxiXN) zUt-${Fv?$41doWNj3ZpA+~+;#OPCt8xSA!b0C(`mi>esOFpz$?4VzHE3nkB z{J|&|+k#uk9s)!C%3lV`bY6?Lh5D8IG;fIaD_+S)p6cT z&ehAYHqM9Q91h?Y;hPTJXUb3K*1hfSgQn-<*CN?`OOYSBt853()vtV*S)6Rg@-ymH zXJ4XU`Hh!gKEnGasLkDYHW-PKj*usC9=Y-C$xC^z?i+Ps+8;Py>iYbR2V^TE3;N2> z?@)uqJcIPwmleS_jX^-_S3U*T_-<>!sdnTxjipE*0WRW*0L=ng;f`Y3f6zEj*fD1G zg`&I2r~;vl!aoVtAs`Hw#*rIpwYzsIJ~dfVsFZHg=!dkDm-7}GYdQXXWq6y$wdPmO z4*RRssusk{FL?eM*6L5Bw}y%ocL->dpuIq=1#JgntE4#g=8EOmKJ3#+Oj9B>RjAQQ zG&Mo`JzyZJ8_*AessUYg1=Gp{4Hm=>{WH)~*YZnzzw4ykFBO{Nn`G6bO^+kJczH_o z18OPgKA-_W$*wby?z!@^v86GXhup0q%-vbbgvdQtD22PT=6BLklE^&$M3_k3VZZWH zP<+^kIYPwtYowhL18M>tj3d1wkZ#P1WaqotiK6V&;#Xdzvl>yW4653)1{y8WuiWP* zBDY+Z;*!gqOPFZrSKh#c+u1SFue_oe?Kdpt`jvk>8=wA7A{C0cWy#IK+e%jq|EIXJ z_`h-mw)8PDrwRHA=z=S0_iA_eFFXU7d^Y5{x#wo|{(;Cx;{YudR2^uypz=VMRb*}{ zpgRN=0oo+!6!ev<#15Ng9kzbw{{z2rj*GD!`QM%RuTbF=7_8u$mW*NZR@~2{@lOZo z!;z!!oO2s}k57l1m!ab0u$sN0fH6ckh{xBTbZ(>XHLzy0`-oc>t;(<5t^J@a8p1tR z_rFJ6s<084^cj_NN8G_U--dI)k9Qc(FNo*4j=0a@ycN!||GezkM%<^7A35SK!ud*< z41POE=MJaEuF5-{zJ&A0;q-#5^A4xuagN&$t(RdnkGq%y&#voulMh1rMlkR>9_XSf zL_LAp3F-nwdF-47dJkz!9WSTXlmtx`YRnK#Ymk0Oq}~O3tSY4z0%Zw$6R2Y~rtw;C z2U5RsuPJm1?#3Ihxt2C@^X%WkT?W*mI;FUI_C+AwJnN+rAXTZwA9X0j&9f@S&9f@S z&9mzug&%YUQ#a3+s8IxnKkd~62v_7%=FqQv70&Ue8)jGCsoi6r9sPz`ErJ_nwFqvQ zrC}UiIFb(Rs&eh2HonOf(li`NcR_iwjHK9vhx4j6SuKvD&jIQ9=w*{3Tk-U(XpBg| z@~z<6kUPQ($ssZ1GNjo!lHr)zNgn5ILHbuAO%@jb!IL zno?A%%U`l>ZMu`8JHF-fQeEx^?E$U27t}Md!6?_|eqnG#T?B@Ws)J3*i+1#TK~Io^ zQEFEgZBsw8nqN7GReyQnF3*2hZC!^A!eModAP%c_uBBRCVhlFb?IB-&{(IN6Cvl1K zDmZ?LLBDb?F+RS_F74fV^h=E0;OY`1<~qN`_|~|EjT6H! z1aY!>Q4lAKQ-U~Iw5iLYhgs2QOcv+vR~~20-PDeLE9fW`fIr;|nmeCx%%AG+n};dj zH4K8A@lR)xFEC@;6i}hs1qtW0j&CprYIZ=yZ}q&IIt4J3g#F4-Vk!|&7Vk{{Uw-Ak z&i;SKubg#0C%^KS(MnTYA57sv;razbrSMOid?>~WKD#WM%bE0|5SB02ABy$R`(YI> zqI>bi|DH*y!e&y^i`UPcNt1AXGtT`?`Wnth$hpp>({R2V=h%CJzMcQG%OT`P&ZL(# z;7mFa;m>+QI(H_03h9v#CKor%JCnXH=eZ9iWg2lzdk#Hlfz>?r3eKdiF-MJbq_+nH zVS<3h30eZQK~ORfRwXsUTv0CN}um`!WQ)_uh<%9ual)gcjG*0M{zIV(^gw>v{hyT>C=|Fmqd%? z+cFgApZb;0H0{|m)ccjM2Sry1KD$;$t`Nq^J-`)0>@9NP_}uloX-Fi+{L1?tBY9gtrl^fL8XkS{-fo80VNBK!o7 zUn0=2oJ)jun2Pwf&W?VGQ1@19=39unfb=ayf^kOK5&plTn@fZd!silU9#EzmWSod4 z!Z=F`Rmxo=d<1fun`=4YC4%=W*S8S5MEKlVr542f5+T%<0*e$qzN%e!d<`h~#;sKsCO!hqA#RCg!lk>G8N z>09wnXQ>&ZF-!fsU-^lD@NRxBo>qHkQCB^n$CD_^m1@qrr2I+j61bgJs}3}zJyCt2 zPzT=GiD&TmspBkH5Az5tZmF|Q_GYezh^KGF~-}zgo1=uY433>Q_D&Nd3yk8+WoDV@BsRVX6EW@Uige zSAGa6(|L~dEBclDr1mJv`<0jM%!|9w6#9OZ*RR~?j--j^SAHGj)UUiNkouLcGA)^5 z^Cn7l_%&ge@cA_%87R|vj+m!@zw%6^wY-D5GttK)70|DoeJ=^Qh!+Qy>24LyzrlIB`w%Ft3+3on z?&Wg8@_yy5y0UHPS3Xe?{mQoiWxBua*Nd%w&Zs2o;@Mcr{~!+|~HIt^@SQYTP@M zV>Rw!zJBGMpfT)MPOblU`jwx6nU54MiB{a~?g`G*#Ft zn)DTS<*uSv;QR>A{VIA5&a2#=`#vfI=RI(aw;%CmTSdQ){K!@G2At!46!Q(4Zs8zx8+t@G7%A>1pc?lOH3aG- zs3s8QQye?sXGmM>*bTj=BxtHoBfB*{UWFw(CGV_RuyQCpn5>@4>0W}pj&{{uiV!u5gOrF-sWajim%32gQ9-rF};ZR zYOF1gz8dplSrDt#;zE()t1*@0t1*@0tFhN1g^xg0SZ#(}JdJaGHP*a0a}p(ouf{gu z9Dn+1Y-m62sju15zZ%mb_-agx;Hxnj#&tSZzSs6rx#TLS(T{ElY)f{!`el-?e)pp! z^(FW8*s6I~zxr75LT^=;h+O!Rk8YLUV@1P0Y#=^XOb61(3NM&VwWm*r5xKtPzkmmG z`L&{ZA1xuF8i*lx6-rQF@|*ioD_^oL0J2Am{>IKC+g`E-{Yd1aMHisRPZp8vd>7CZ zm4@R&Kh1Q0gWgVE>_>~_Yb(X^m*L(I=^@=bsR~FF79%d@s&{ z{`?*fE*?Oe`37-b^AU+r&=fYMyN&2j$m z;Qzlb`6O%YR6F|Tgo253siU70?#7S`U-DhWO zqK19RnU?fu5hO(Xg!~JSF(Kk77X}-C9=nZd=u5tCFuON>$xi~Q zFS#dwF+h7&nLdZwkxyT8<JRyfBuK^SOMVQzT`JO!z)c+@&iUWZO4+M>k5m$7tiI%R$9iHSkiRm0jF|u? ze97+=8+c`w2%T4^^Ee9f%IpxtE7M{;(|BbXPLTSr_9f6@{7a{OFL`jT%FLHd#xf0ZiYfj)hWh`!{C=u6&qGS_JQ z8F{a2BviqdJf#Cw(U+VQ^(FU|R8qVzIkVN5e7$c4WP4xoFOZ8r^(A+SYHiaxkoUgi zYU$S~NG+u=x!Olxaz)F4dQD+D^d+xpYLcPG`;s#kL8y?TzT}&6&OgLiMB1O7>DiI5 zFL_T>7JDsP@SR|;v><)SPe6nEk}IN9Zsn<5Cu}y6D8It9|Kjr&UvHL?8no%erlp&9 zYv|Koe11X@eHUK`QV&ZnmISe|FS&})*K)Op(8E%N>0wD>{2&ViyoV)y$^WtPqdY9> zXwEj$A1goaQN1{|u7i{4q* znAc6yc(o{uZ+IvtU3|&UpU(S`SIH|&N1pd3Z;o8`C09A-sW16F7?_a$ex z`jS%+KUq;1%XidDeaVj^H{D(NTo7vfCY^EUOYYUwv8I48c|&Oi`jQU>EzMQ6EdMYO z=}Z2c#j+wSjq)YmW{e~V!2$i%n^b9 zuDOcvir1e>VcwrA%qvb|ym+Y>aeu;>y#Ev09OPj8;R$kCgp^^sE*6Sq>Nc>g>GDZPKDi~JfR z+5Pj9o$~(q3PS!qNpp)Ma`di>_}TbgR`;f?yN|`N76qiaNtTuW{lhpRaRaqY5+Mxl z{)gqFb6o#XY~{FKWG+?pGGf%Yek%wM`iazza8+0-dg$F>9n$LE?`eyT7WVEZg=>;z z*s$gvJWiW;|0g*2-u>Lj>Am}JnHBa0&Bwcct2};2c=vCBEfKz;Uj|u{5aHdw0}1L2 zdeEktEH+10FtHmiIDJ9igN^D7dPop`K^x9v8ht^Z5JX?lbV2k5-3tV*6S492h-r;$ z2(4R!nC{fN4H@^&r-n~}rV2_2x?urthIM#j6e&hO=*vc9(*bhvI0dA#0g%f62?@%w z(EITf>4X)U$U?UUm!V-(+-zhV5*3qy>Mo?R7k~x;t##SfUHpv_6PB4ROv-!~mN^2H z;i@3*l*v`GZi??(pGqCuBD2&Y7Sar;9#ER|q^w%u9*!=ZzaO+$%&)ThpfUH3xXy}- z{tTv$C>f7wug>!sOdUXbTh?eh!n^-jsU{sj?-yI?-M>>19YD)2<|E3eLD-38B9GhA zJAf*eu94*O&Fycvj>*Pa;|rp9e=YhJWuvg!TJ{l>; zUOg9S!;p(0aX>0N0Z3&>0a2EPZvGpuW314)Mkw^7;K+S6u^2j6vZx3FeJbcTkPic` zbuU_5`ZoPGEOX)8ES54i3ZhI8pbYm4&_a{@!j9K&#f|6V=Xa`W`+b#5h^_W{cqVMp=qhpSEKOR@8~U4az$3(%GC zusv70_Ko1K)0@wL`Fi&!*@&M68oc|*qbuT_`ls+)hP-ED~ zv>pt0i`K!&_*~cz0u@Q4+&w@o1a$=3541+c_DBWd-Os^Yg*mvZFb8)P=HO0YmcIy_ zRsOQ_lUROE@Mllf>L+CMc$cN_1X?I43+Q{GweFW8I;6B5s>j`7nbPlhnP!40^8iqW zO9U!n{MvTJZLm;8UqR;cA}|(c5m1`*qy)Ufw{Csb+rTU4ZLl61b8mwitf>5NgAFzW zi>(~o+b?5sNu`}RSTfH-O1skxB zI?E0I+Jy>aM-T41gH%*5VsPIRtd@ib@BU4a;Jy331zGGi*}=^Zux&WN4}pm~z`sdj zm$^-tl-k&32sH*9m4msMt+@UAeX`2}#S1D5G)~ZIh#dx6fQgT^&mg@!mqwI#$@&GZv<`XS07FDe)S2$pkMu0QHtnoOz-~Zz)-*X#Xy;E zkMZQ8gEgji|K-DUQ1D;aV8#1kD?STb5l!<}{1&$2swhR?ic3~`D{chJbhV9VR={7x zMzk}$`?C;>4p!19`eR#4ZShO0l%PQ$wiUhmdqA)HL`T!YKGCG$rGiQ4^@+}KpTmLQ z=NBc5bG|$y%1M+cSbMA!TQd|;HsrBsW&)~u= z9-)nwV@GbFc?0Qf!2lQN5ug<=4b%TB<9uw#n9+Yq6+S}VtHNIcv>FH-jg2D%!)mu@ z6($Hv;!lcj1IOh?XJ^gwjR*1a3qE{=wc3O9G8<^=cAznW zJ_A}SCr~DA-*An{DbtrMClQrTAQeTA5dQ)_2IwGq*5V;O=c=@s&o-`zVRhxsi zLfrd3YooEsb-74b+;8?GwdsB{pY4_T{bt`vfoU$r#KYUoo`xN(U8A?q{ML7xHq+f^ zJ&~5|9>V|lJxBaso5R6jnUzK{L|sS;Oi0N_?mMY$A_+g znvGC#Dy-(zl@a6k;&U6v)6zM19|>Wzy;XDjD7}H!pzPXCpn*)A4}F zo%}Wkm4EBqItXU|Mc%>rS)4C*iD*j*mhubY26D()g!Fx2q_||D=3Cg;CIh9o zarmFI*wz3v3^_|3FQwO#*n&gY{3pmgg7lBTz*7%U!!L<;0*w*$1<(RPypGMjq9*>@ zme&-z2}9V8l^&-iZi*fUhHi@9B1nFRek-5<_+wjMsy(DCwa{1rjggBWv&bDIh#R6e z17VK?Sh^uP2j{vWy4Kgs$&nmxh+cwo{^`IvZKU>#xRxAP%S-(@uzn6!P=*qb8;*2hGM1M6!-)q(ZGXSC{!D9OM0mPt~54y-G| z(}C5q8W^iwmjS}!z?wsC7G5PvnIBlIenZ>R+#l8(!viaS6G{ixhfFj9CUYBa^x*ga zROrB(B8Y?I72k4T-C>d;ySdMl?F^pE&IAe%th#)eZ8jyLVC?^uJA})ZpGAnvm$>iz z^5uLhVyYee@?`)Rx_p@kq|29!jdPnFvHw?ebNP}cd@f(U2Fi5xjT5na@nY#P%P(I} zfSl$YH*$FSGCWl5H2yBt<;!Zv>0+EUN)Bsf(?zWvw35?BZ$X?crVHY9@s}V@7qxb> zkvLuGRFQ=9GAfvMhyPzG5r0F ze>#WMnHw>ORJs40o&{E~hnk{;;bA?*t7%&ab4WN^Kw0P!|Dp7BmMokMTL`FNcBIkW}NH^{lpp{;TL56+jn1azPL=g{l2^Uk67;anq~Rl)tmzt(mv zKcm7>&NqApS_c-?#8=&d8|>%A-U;YgK?y*s1U&>4bAY)|0^KO+d7vSJUIj`9TIsUdV0#Vh zNOyCP_LJnM0(Ja}vTK0G1I=|G1Esrd_&@e%=IjNUE9eN&cRv z?V*V6K{fcpramZ7cNd@Z9{~PasH}&l*18?_hztOM zcan_0bpLbOX!GqD4z6(9VZZY7lrcsr*JYnHEmvN%z_OK>&-R-9%Ig#&7oQi_|LS?%MaG_G-C`GwYxk(TgDkB7Op|U~{7b?MT0Lj zo-Ty&`=!FTV#i{PQOw5wqF(Zw}KV6vIi>~1Q zJzBv<wvlfJ8jqla$wq(4*W6;(T6wEiT5zz{$_5aRj1;bGBM+(1+ z|2MlaSjETM@Ut&TFKEG27>4G*_}{B|s<2f&>0M9fuHu*AJPGH16~7eco8(+q@yl@@ z3Kd1aO-7H*e-&RJ`H^2S?#KB`H?kuld_y|-O;{$XMz({dNf&LP70O&ewgGYQWAj;#H2!NI&ZK-27^qOKj zb1^&X1!}q(={X|R2Uf7jxFA49e zt#v2r{Ih#wEKTC7dLu}>R`!&UpkS>WBNVQcf1(}@h48Ma$tI_mt0NpXL5T}|sda#C zWj*I5Ylgc-qqad;VX_St31S<32Bd8eDH3jjqe5gGDB{YRYNU2tNndOQwMRh+C~*L0 zB|BYBGb!D1HC;BAg>W_P>8Z3UVl|!N9tCfwDcfzw_=E0Jxiw!x=7UgzEfGM=fo%1C z;Y6)x7dwW77kmSbz4x@N>+D#r%LAg5tM4Wyp-JC+`fRVsufCU(!qs;z>$`sStt$n6 z^ZAtNj=ekorFX>(X*-wR_Xy(BdkWAhSKJ2iYwURD(mOjWTkRrtL(1Y$Us`Oio3|+n zEBj{R71WDU}Zt>jm+F;)EbR zP+VJ@Ht~VtAwhhg*er+-6ql4?(Oa!(d!UGTjwm?km_9&s)JLkwM~M&gJG`~?^LF&F zL3=|p{-U2Y3S%*Wm`2+7 zNQj7e@bkq?h=_SmyyM9hP%%Zuj5JYdNZ^B@~d+!7}~ z=E2Vmv2oF29tgIW2iy~pU(ACK-bT8`Jm7W-AM@b-1nBv%m zmI~wFVjlDpMnuem*CpZKVjc_>MnuemXC&d=VjjfB1)I)UT-Ey%pH zTv3cMJF%5Jn#Mgs1%}|4Bf;P}&zJ{ZMQk_pohd=@iB!Xw2lcLC7iY|a$AL8FfhRxu zvX)<_&z_gaXUqfTGv&-*l7kG3J3H#yn8Omo|r^~>BHxaRFlS2}e~3$jJmi^%v9oD??_sAgqhGv+~m zW9N`PHMlK_*N`y}D#r6lGv>kbMwwy9lB25%i!l%0x(b>!=7G;%7N#M<0w~#}z_!;> z@FB~K>yFZ92E#`x!u6XQg(ae|!i>r~#mmK(lmNO#X4j&dciB#5;1y#B1SLx9%;V0Q>?(I(19Qezes^> z?%LN;kj?!y5ULv5gg6ARStlfWad6=)Z0;M8(ffL`8S7wiT_VOhc(6VZV;v}Btb?DC zrm+sZsw}8Ntb^BIrYgodAVp&xcuMHLh*$^A)>sE!&6uXh_OT8gX~3#MejYTvW`rcl z`&b8RDPtX|rHpl;_A%ChBE~uh8nPV5I><0JIZ)$c9WWQ43y`9*4*KJqe|UY3sb%kL zXN`4m+>|ANhFAxaqy_0TJ_Q;y)`22Ajju-0*3lvRYjwRejM{cTm4zO@v_%c35+9>9!s zkYweD-IT@P&Us@UykVq~5Js$n@4`lokaB3`96>a46ObC|#j+t5c2oXEh;;i^VH&Bz zG?Ky?ReRjZ7tfu69wepR1 z;JI~82C)uCNfGpkoh*v!6T4Crds5gZmV3rB9Ah0cG5OoQp7(!3+v z8qHV-J%M2B0OS96tb-L(wN}||i1&l9r?4T|ZBs?(RzsCyjm1S_zaYjF0l?4;#^}Lcx4Q1>fN=oMMEaMu2qhC>aKlL6B=<4IbNfwx)oKcDytLV;x-7l-EAPvi#!%Uf0C( z8qrs~-0RwcHSJiUiR&%m^wsVKarM=n2$borGLk&BY;=E_UixZ}f)L+%sy}_2D{WNf z$-7YQpVn9h^(`xv75Bc{X<}(V%ZjixD%Qcn#>j>+VjVm+)pz}vX0(-Ezpo&6{Ru#N ze|j+nEe#JMD#9!NwTSTkRAF9m3NLpfArOv5f>;Ly(5n19V-U%Th;>lVNLdg@tb+=# zdn2!G?u~p@5RF_2q(*wNxL#%?O*<+?4k9W{BUPA2QW!g$A>fTp+RL_i+&Q=211YlET;yh;sDiS&MVMdAzc? z-l+0?xQ3wTU(u2pc=MdRm+lmI2 z25JbD>Dn2|?w>2{l=nzFg#3My<{Cxh=v@^N>)>~*dlKvJ@1J{6K$@!%VIbvjr$^jB zyKo)f_ZJ<)h;?wcTy&1>qs3N^>+?m`KSqoi*BR^Jlr0w8*fa#klX;?tu?{|lw8lE{ zv?fLi$2uT|Ymyw;uyBU=|NA7U*2w$+eHw5Bs*iQ>DR$S|?_TE<>)<1K?2L$YkP2HO zJY&BMR!c%etb_> zl$|8LkD;OD6Y$9r0Ccg^2b>W||0e1KJ9d<~%9p(Qpq(*X)c? zrZ{vcFr0^u1^6*+qw|XC4!Z>!*@yAH8d^43QPCgK)Geor%|v-VqNzLVU)C&Tje=MQ ziPAKTb>P~unskSKN)X*)mjS6etQS4cM7=w#a_J6BF5jvauNZ``Ggb#*5Mv$OfsDhV z`W7HwEhnc+mbcLM*^VAh~6Ai_q5uWhIn60(Q z-WY6DHZrQ;PWBR@Btf%)eg|6Z&PN}O6l1UMg|tiCQ{pZlm2C&4vdw`g%R=|#E#w3% zG?9gV6zoiP!vK0?ijR7-+Yk0YGE!;DUu?d!z!1b-=-0 zg*mvZFb8)P=HO0YmcId8T_#!i*(^UN*gJ={3h)->G)M>|3QDUkL_Y%!2U_cf&d|%b z)sCCPGVcnLGT(<~3UuXdFb-)`jK9u~xD8$t(G+A>1`RtwfLa4#bF`64;N87->$Bbl zUNLWjcc3x%Hu%)E);8om4o{sK^)w#zS9rx zUi7r7@PoT@Ik=O{!Tnua$OcwG7he!#9sG@qo*?1ZiR@aZxV=Chir`x3Ti!2Lr_A$r z#*Uygj)isa04I}t_eh8ohQ6-GD>Hx1I`m#Fy{%C!2FiJH;(PW||l~9jHt0m!%kz|dF+tAR3|*P?Bqu?~EiH^j#}_+GRRco@5uO}l4MJ9qOHypP(so3AQR zrt|sX>rGF7pZKyV!AG)IQcrsFw}adc=d-N)vW3RR2O*z4%S#>&HjCs^WIhMU58UUY z@oC4hJ&j-Kjv-wcbZedx#i0HCGQLFY=a=y>#D1?KY(HZi_(%9L){XGUdCel<6OKVn zdqOlV+!IJib6z^SC$NPknC91f2~&c8QUY73Yyw-zXGOJ;PxdzpVjUb7Nw!c!NNNj3 z(|ijlgDo`8iuQ_p3nf5@?j0Bdl$J zcAvWfAwLARnyc%j1!!aUYijh)KnhEI1IkN$1FEo{fu#S{qbN=v!*4~EfBgu~ukBeh zyfg4P&il)`?hO1J=W}olN1Xm=+Zp&B@*{T!7P_CK5nanJpRJZQwPX1iE`|33{d@X? z#W#Xbo4a{%77`;j4_162@8-d`~7o`yEc6ZN_?!MZMcn>Ql6U%{F+$!?|(i(xB<}S7z{{}g{Ri=)`IADhzZ?%dW zz%7v-a53;z66udY1=dGEO9Z_Qv`^4%Ahrqum;klw!}ejHo@AO5ps7NQlA@^yI_dLZ z;Ac?5DBhRocc7Mnegc{$h#k6AKWh5qD{K`rP07#{-(=c5wCM!W>w$pDHuMla3Wr>25$>`MpHzj&&2=b+t|+bM=ru|t^Yo2jB6TOrE>^oV8B9VP5TC7BdyNm}Ihe7?@P_x+xsPoMAS@%!WVo5y4BeVy}qzFy~b_SZf4p7XAU);|yY zrK%FBPlYN8Dpx=gi@d`3w0Ix>h))XZHQF(x1)KElL*F|{Th)o7Mha? zbapU8W6Q>+k>Oi5I4;H&;iUvFKK~62R@mNn3d3f8^ylXI*MoEdR&~A6_p3+$tI_wb zub}23sCd~^b0Riu^!>=F`IphR8m#$P6|!;koXK+hVx9G;Q4p%m+J7H$sltr7gztGG zG~zZuSPck`xQ!96C1E|{HbZzI!gxE5>bv!~*o(jqA90T&j9<;fmmmco9U4xn56nKC zu0uHdTkKj-G8`IC*C4!H`A~XoOwKPsXR(C~SF@9+A^s8&_`VfX-9ebe&u2e-naon{{r1*1fT8bY*YbkyNeF0L~QU;{{ z2)gDF_ao>@pim>i;pqh5A&fu$b8Su8>G9X!+})pR(@F5>+H?~9xi%Wc;e{h<-5hgd~{_8KsNctBajW>3wQ%KGvwwriDVLJ zsmYQGhuluXsFg$R8c=35-Qt=wh-&p{n)ew3Ihr;bo_#b8N8fTZrKn_=d+ClD-L0Uz zRHN3?5;&T^2CaHTbrC$OzG#PXg5Z#u1%w$@eWr{Ho4flVZ-o&|X@%+4XY!eLJzCI2*qKw_p?;1U5qHB+8Rt3W8@lE7hQ~fz_>0(mT@tfqN@3K z$lP5Qqrga}K^LPoDD7f&GMEYG9x7 zLM=0#e{eDMWO3LOWEbYjOctjkRZbQKM$ukQ7R`m?WHDYSP8QpQ;$%^EG;y3PMuWo7 zb(o}Ynk;_MpW@=!n$TqNy|=&bm`oP>qudNL1RXMW_oLi(NC1EOqukJZ!ZClAdh{%& zfX)~MU&FtiNoJzjyqV-)yvh47emk}Pw@~vgRBT@7s!7d_nZ!Grpa%5FZlwSAY=X<* z{Qu@`0_OR@I-6h?N@g3m4)XE>8~$4r`JX3*#i-7kJdC93XQ z|9vK<3Nw=ue%JG%nY1^;BM^3XHT6Sym4x+7`Xs_XAdFp2Xxq1*NlT8&K9jaYSU5=rc|ChPpIw#%1+_emKQ!5%M`ZZ3%lNU`CtLpu*(ci<5Y_|BS0;&c=)>=y zZ*T{etw6W~3xEHd&n|O6&;@wP+}(jCcAPt~Q~;$1mJEa0VD9++bJ5L#rJdk8u#5n; zQ@NP1fn~c9I|Q@bfn^@RI6vEPyn)62{d4!(r4_o)HIpj~Yq!M~?%BdzO+@@>lJaO! zapP(8)1aCP^%y9Y%2LH1ydQDP75lNZMCW+`G!-v5K{Opjyl(=rdqIsAY7409FEVa9 zs9%I)CvG^Ajeydb>KlX~ML1La1Zs{@e}Vc;sAx3dVw1?d4OBx=3sf?wOjQxrM-j%y z0MOG9He{;$h+8J;`#{}4nQ|RL%@C?5C^dy~gFv+qYBZ>8LQMhHekwoaq$hCFeJlj0He|8h}I8PZyI#PVIeo*j_Cx_4d^{1yBiRWzNH&LQT)M0g}xXmyE({zI`pho zJ3yT>>1BYAvk5-fOzSwNoD&H57QM7oXMjfqV;5CZfp8a9?w6o^n>-6{GMIhlF2BFZ z2f`Y_Xxk@((hr3C_g8a@+|quE;}1Rl8MdJ%Fl-s3Hmh8p+SWJ5_5t9@X#<53iRLEI z(x4+|63RTdQ2um7`2HwB(h0eLsXTBdzbw|TP}NNeik_Q8Ox7BSN0U5b*V5=Tf2QNqi#|J&B^Pl1oqGexc||tQCr$g!3B5ng}yv z+~i4w4!|=$1-AEuJc(=n@Yu;oYL90 zNu^in!oCxRsvowq%@&Bpr~j`rS0zEM5vn4ndb2rn@PyJ&1;@Buh|{>>8>A@v2q=A0 zK$=M;ou#=!y}gak-U3YdtnJ}F?r3e#=C%RAW;Ej%e8 z69|1$z&D`uNdc1$_EmF_7_%pnsq%r#KbLr(6i^n_PUT|Ee8H0f+^D2y^?bpT0$KvR zLM<{1-T5N>NdYdm73A_x!Ao11_oO7plLB4=rB4djXteC~%6 zf|CNqBW{dvhoFsxE8s~1Yu zhw}kG7K$eY55D38^&F@b zD%pU(MYoX^cYgk~LX|hsIp2e8Zdp@W+1`WCQv1)N)BTC0s_bw(-Gj5keDk?I|1018 z-E&aW5Gu-k=&E@(Pslf4sU|^>_~!rZNdX<9@jdk&b~lw;uc-C^n-#Z#9ap zW$ZoI|6|> z`=HJX)d|$Ng^X(sDrONWw!tx=aIz4jGu0@B-$gi6O#*cZ)B-gN)B?2t*G#nn*Zzyi z-wJB2Q2Rj@Simus4YVM3aZchjI+@`-xewls9%LD0;=Fr z&Kz7P^YR3ZI4Pj~Zf1%LWto8Jg);v#Qd}r&1!}n*;pvK{J;#NztGg)0g)%M0g)%M0 zg|fMjTB9<6)C*;VsddeLm)I?bAH?(U+QPL7La zIyo+y(MUS7bhoOk(sGxOIJTq@NAA*a^bC>&+c+*zk8ywGaX!< zSkP?zk8TLXNg+9{8o4cf%LokfeL?_5stp4-%3#_IQrPTjP4|Skb;v6;-#(A$6gPV zKB?f5wYqEv00Q56nHWnS`)exFKK3ModEMMSA3JKLYiB1=;XZawkz3kIar|vpRZ)NQ zjq-QR9Y+N;5_?;NIZ_g83~C=`^g&%m4YGx4PTo-gKLVqV3UDEL4Wwv?X`+)Zbe&bu zq~F`PY*&-(M!!Y~C%^8d1-foDJ`l#A_MzR@oPiR&l@EOxO0*B%Yc(nQ&?i8-YmC2} zku3}I#ojwDBOBKkBi7u!6fkVPuB{)<-CYW34Xj>c91Kb?1xz-WW#%3+=55iAEPm9&_*`7i8mqH)!xS{#U?r)?*uTZ2a%OF~`RL zb(_LA{!>lC&5Q`!_#fE9h_H?SPi+m`_}>E}vhja3O8OoI+>QUWYvWzC+4wKC+4#?o z1#Y$Rzs^C#n~necj=*Ee_XvdZTx>p zBL36H|Nepq+xY*CMErLf|Nq9**Z@wbK`&M9r8IEBwSRM(d2IY?+%3C_^&B$ z{MQsW{%eXG|EYY?Eul|Kph9AH~zce0RSgoIVf0e z{O@sySZ@4Z_z5)YjsK6ib_iH+{Qnkg4QzB+Tg;9B4GofqB4Xozqfb~qteNKk(lwKM zloV@bw@|E^N}n-~HIwqWGw2MW-*tWv zbR9B)!K?&o#20LyJSM;eM{m&u990Gt%qcmRN=cmTj}h|>oExT@07mv8{U z?88*W0{{ro2LQN`0feOD=R58+Y<&R0>&BQ2u-yXyMr6@g$nyYz&kevrF1!N(w52=% zKwHWK0JMEP068iAxqNF&3kag;^N z0{~h>pWeH>S}1NfJq}85i*>~YK+M~_t3|lsH2E6}b6czy=7v)WW5X!~+-M>ux4S z9sZ?L&fU6O?koklb+;F&t?K$-4O+TS-(N-!^&a@S;OnisM?h_tJ@ByxRnXkAb+@<_ z3HQKX18k?tZ&-AwA;qolgG|(mu2g;1RiwCeH|cvC#I3tcLG4t}8jyJJyHpDk}d6FA-)>(s68>6vinZNJlr#r1Ngmbd_}h&uyCbgR7gSmLpF$%`xEUrs>K} zr<~g~$<|Gif;d1O%(BRpZjSGPtDECxP`Wv~YD$=*KyzGwjK#p_n0kS=UD&X~YTG-K z;c3I0?26Y{zl%8AWh;p5cKHmboociJnReOM1lcb0!^ltz#5X))Jh#1?b~(eatZ8BG za;{jq-LS$e4ck(_6qUH!ASyx_M>6C-?hZyf#8wVQKMBRbDBllmjk{u_ndV4G4?J3g zHC_WiJ*;bC);NW+EC>N_#Ke&d5AM({?&c9Q>_~=33@B+jj9l-m@{D{?(xH)~g`$z` zK`gtKsH7#%wb&%(?|+q?ty@7B#&fx|JFvD(Se zrCXFYBuQFX<42YYt?UkJh5FHm1cyyq7rq ze8jbwFfs0Uz8#Ma&A`QWIZ#?Q07}c+peV~kcShl)b0eL_ME5!ezoLl|cy%;JR9pk( zBcU#UQa^LHOvgaYKX=w#=gHInACm---G!peI8fWwBv4z7+&Oc{JFC$mx(v)kBJeh- z{h(GT7nJh8H{G#y;f)?{t@U<(cOSp2m|Hz(L!&#~tWZ}>QaN97=`ANqP2RJ;;@YNG zpm?Vm)q(_8Yc0`G}J$5n-oIR7Zr~o9vpC^b)G}kaG?Uy*K%N z*sJ#@esMBN4Fmx7u0KiPh>jMDV8_474?j8V; z>zYoX3q;3%>vpm;&Ni=;optzr)I9*8(gm-R-Qoa%9G&b(XADdU>tq+5X%Z230KglF z(4B0YF>N|?alvVE+U;Zy!$#f7UK5I)>>HtY06@a;~C6_{Y?wAziDCiHwrWT`B*c3 z$)wLy9dQ7_ci%8qr@(j(prz_lP$z}j11kSt>~AeF8S`&}xgYRknt`unh6qKO*`T(o z-k=^g_!;Jo{`RVfP6BhY2#f}m1!{$IK{c_4|8M=xRm}dD0ga*lHpe7&>;Be$r_RVN z`rBnwEO`tB2LQA{^V0_a#9n7M+26(q#r~EFO7}Nc^oCL4_BV}Xe;73giHQyyM}q3NR9s7XBST zEqoCag|*w{3SUC%JOF@hla{61q-E(gX<52Wl*Qk6RS)*GGM+^bbH@PyWl`SvC8z=~DsD3}f&9<&uXVNQir>c&%8dz_K=@VU|M zBB-5T>9qkup8zmKw7Yz-!nwcQjXdY(^EKyQ$tU->&xYIy<+4osWeN3+b1XOdnk#wP zIVh6Tz&s+>O?v??%CKD+U)QZdyhd=-@5LMl+Rr!Tzl;5RQ=S;f(s4C-_Om6pD}k#` zGr}`xrSon}XaG6g5^}=4mOu!8{?AC~YzZu(&4#zrP2n}CucW{d>H+Z+%4Ov!AvfCX zEjR(-XOUzHjfdoV#S+R1b4y4gSVH?u(yk)6gqA`FcJ%>q7}QR6)Zk1B?NVdRD+Qha z5Wov+8i+oMj=bRIbe;3XAX zPFcYkC-1@chF78bWp(4eC`5ehw?J3k83B4l1GF#ohMKzsu6%uR-caSqNvn=M2ydvT zXF#GUe?an0HNXlsE9%&Ywd&!Ny>=Qs^|WOLA7&!66~B!OHh&&m(nGCa3)1|1MMdL; zseBiellO;6e5v@v00yYR`bza1gGBnNj^NzU&bp9H^B#H=2KA%bmsOYTNW##+EhTnj z9c}iuYcTbRzWJHNSL&CF$ZtROme$jz-2bX)Y#M$}r=L2f^*nOFf<~99uz%wfcr{Rwr9OsR930McoEcd|veco65FVk!mk{o`9wN``@aUmgO4{m3 zwpHMV9#e-XKbmd2pg$Kr`#eJV=NR50;jMLH((?@GiOz-eo@wO6&pOe3XU6oQ%hiEW znDk5zGhtP5YY9tEx zfk)73RW8#jn6XZ+ zL`oHmU=?!@?l~=1?4%XTRUZ_A%j!bidz!%}IJ=173EgmZLEV!(7uKT5&r~lX{5ZmE zRXQj%mywz3eNZWRa)G-JRNFXG+d-`q>Hw$`d6|>FgYjP87?Q=*nx6iJsrljk^aWz6 zx(-B2kg283Vrm7z$wC-U&){q}veUs!nXe9Arf_XAddE|^9H>h|l>jv~AJq_=sqRI% zV*Xt8M3CC(&9Y7Ml@_eEfri-s)#G{_JOj8So-GIw>V^Ym&!D0%tnS+Yd!5%O_anJhOyZziHbEbQJa#8 zb}kuv5wTTOGG#r%+>@^Gjob;e*u^k)qiSX1N0~dm`UdY5vtfGX+lJE$c@5s*5%PNI zNh`p5@6_NHJyUn-%SLcI1-riF3BD+TZNf?w1<_tUV_m08p+7{LL8p+p2YVIxm8muZ zZ!3hi$-tHqm9hk5A_uk$0%22#$)U&_+;SJB?XG@raATY0w_`No17n{%e+7HJ1tV68 z5iys~eGnyBV@pmjY*{6?sE70bzBY$8&yq@F$)TKup)J{^dYFb(2b*a2Abpe+TK>#m z!&*Muid#p7MPhuD0@Yt_L_3d!p`)ESp->y1PH;*cG4)i~2%?XEqkb}x`rKjG4s@cM z;d*oLQ{yng&M~UeU6oHx zgvO<60eI(uN>{T$8L$g_#|01Em<_yCz_|+}Pdk;Xc_s>NmpWiXhQ~%)-$6(Q6`G9V z{mivN7jJtxlLA?04{@`4(M__jy7L+had{~R@aQ?fSW=QwGAnxt36=C3OeH34R1|7V?~Tw z^*gI=0hrE=^k>u6>!6mZDY(u?k{eY{kxaD`yv^Y0YTIp8e&i$_Q9T;F6lsNVa7 zS*`{qrO<&7q}t!^nkSrr;}mS+N$Ez2%whYKF~ zXg09U@>-o`SF_IYk49wGN0HVv2$?KrjYO7zHN2cz=3|nZ)r)SHbF0~ZGRr@LiKSj- z`4lKD*W-FzvYb-{+kn8k?q&G{qiUtA^2yTBsIy$9NRBMKptUY|-~-vfI?MM%44u=} zth0Q|h-{n`X*~}iljYIO@;SrHo@HGn)yza+%iMz}cY8@blheMt4d^}>eCC=5-UYC> zFIZFtL_SaFX{g(dbC+pDSI+;%^2{&gnKe9JMN4^J2lhdTZB#iWGF37VBf-=5<}(@# zntSlcA<(GHa}`k8nve@B;(`Y*%m&u>9;3ZGm8)5oXJaEWc7KF*7(#9n8jkX8VR$*q zlPeK!PJeTA{PT(H%<;$M%@~awZv%zzXL0>ga-35FyW_x1OmuVXH=1HyjZgN0MxEn! zKxNCZ3yO2W17~Lg>l_b-7;@}t);X?iM5<4Tus(#4+k%+mhK83j$6Uj4b9&)!Q^yw% z{LLJ{03JrhXVTR$P)k)mT;D*#8&ysT>^@yQ3FQRnzd&K$d-2p2qX zayGEealvAeV^_1zad{)Mqj`k220|vs>CYg?)eSFaj=7%Y=Cp$GsDkG+Z!pJo!NYtw zEL~Lsg_kC{-id@as+iHi>q^WK^(_7H@BE_L(Tl>pHGQ^d zXKU)5p zAwY8jpbcF-z?-2Y8ku?{;5iSlFr?vm1E3A_J%HtAbA_54ra>F{fvXGxW6jzS> zSa~w~0ELz84p?yhRxO3Usxpd5lvO!V-@inIRvC^D3rZ*9Pp>iTOLWKEsom-VBGq^5 z8g4gktWz}ZdxI%#ROI>N70Bb0O{6>}i5=4^s+GG4d_D@^dhnL37JY0h$?%hAW0h`Y z9g*&c_)8)^-EgzaJzbH9voB5fX;cXcv}^K=Ciwnu#sjz{T&d(Q^U$>IzoxujzXa%0 z&*WQnoG6M*Z+-|MR)e@+_g+9W32XOy*~39Il+9Z2Gl;xyh()-~QuKH6m0B%f2Q zg_kGg3WnIVI>IVD%?<5N$1$njG{(CEg#w;2 z9BX+Ic7Hrc5&HEdpVczIW}Z<$Eynt6TQ10vcOJ{DtsZbg6=Nf;R^8mtp?OhOt3hsP zXaoE>{7fCnJscJ_k1(w)()wPVn5?YU6(%AIi~ssB=iPK~3mK3mgnLZ0U z+S)OH(axc|I_KZ3SBKyr#Q{|#eb#6rc+<_*F;QytFxYpQ7d0zE+3+utT*wJ8U zx-m5OKz#Ar1y)MOIs%nzMzHZtU5ZI7u5M?*zKd< zPqM5z(f9xY=c;JV4=SR#W&Kr~O5En~qZ(2QOIp*TtRK}_Pz@JEfVu)|@<380OJi5m zwn$K2L7i;t1JxhY^JoJ!m zI&B|LgsF^Be3KU3<3};4s(0}zcH6Gk08spnT1#A1s!3^|1}nC5i4OKgu?0CESwATp z6*|OfH=A!y6d(G6q~u~XP)|(oS@~ut^&S~)YF1M<_kk#@eR*kjTwVyW+!4JSjXK|N z63qct(3;mwo!yOZzys=X_V}i1#g~rNvUn!s7028#nWpON2sHg=qOWW=-Z=ckHY}J2MI3 z`kpQ$;)7Fgu~3M$SKFo#mlMF=2KBd<#QDbl2DtvL)E^5Vu8w>1nSca4v24KHT_g%j zP7JzUE-UrW-S|8N{|cYUy3t69wop_l9@P?Nic}XeEmzdpTB zN`Xr{p^}s;K#|?0E*!@vm62GqgmNzKxb-=1v14^CF46RTv?xumnyYbNT2`l#e2=J_ zsp5b8tWKj8-J77iT5PJmdK-mbMr7$qXjxhz$p#nW#SPN#rRr~su=1T0T(CFUyja#B zQOd$bs%n@RRbPD26Vcq9y-R_0Q(~_oLf$Rtg7TadKXmK{;2T?*vdbw z077=uj(FT6q9#kEZ@5H8K9qzxw^}M*ik2M;p@@jcKK%znHnQ5RD9f4i14e-9qrh-h zX5eke43bdH?{OpjPG6`Bu4SChzlI#;dmd_?`+vl1x=ax(@I1!K@<+goiU)ZtU#v<; z4*Wm=gn>VRH@=Wcw*0=m=p#XuAwj?Y)e#8Bn_!%O(s)!*J`*hHZ(a>AhVz?Xl7G}g z;NE6}DgLB*1Php8MSrE|kWfJrtm%(=z_RicGQl)|4T2L)u!;W-)OfxkCfLfq@IlN~ zMNRMl|9gdzZZWkJP1jED;{Sa)j4ZA`l3;KDm}vkfn;Z@B$KZRCe5Flru)oDaFr$nb zCm9^-FWME=UQV?}&`BPx{J+)&y1eQv;pdgV%3|;B@hJ;d@MYq4NL6a1#^GQ2xIezE`?{le|v( zyKIfJ@--9do#af|gRP+Xnya&t{)cF1BgWw8Nb9j)qk9aEu<~|QC|E1TpTBwhTlg^# zRB^6|{H;#o9=rc4Hcqx)Lh_!I%F5q{Tr2QO>nJOK3)27sTQLRYZ@U8=J2}G2&DMl3 z@2os?K;V$G{7{;|-CD4He*8?56-R*2Ul^p%|F+OIK<90UOORnJzRSB&R>9jWG#x7t zcu`rmS+o$1EfD+$KOAF15rHG=5eQMnPWA`BgRks{;xH;qLpdyuSL+`K0ixIa>VMB95I%LN$hWKY`m49qCU<+ zZ-cPnM3XC9LD67zu^bqWbh?50;R)N9&teS<#<-_QF?$Ib>OdC+d(t@N}%tDm+PtVgn1$136iT;sOuhtNp@LbSPh7CVE-nsXA0Ja5zF) zg{SFIkwD#V!JDo_Nr6>&BlVdw$|R=*&fO7V6@HnOY$sQ=ocrK5I1P)z%7V2=+jt^K z*cQNO8F=$EG5tQpub9di5b7G7Fl>3x=!@X=riH3@Wn7NPx3;8xhltpdRhq4U5Z;XM%8 zh~q924!00qm%ulRVA+v&66zhO_ZsAmc9PJ5z=GSrJGM&Xh6WZ*2Jeeq$OFfNz_*x^ z5{^@;lRN>xNBAzdU-psUbQLIm0*Rb>Q-ZTpp!9Fhbg~QdI?3rO5bTNqIL$WVBrjBf zKaU}o-?BWM zSW26fZu<|ySxitWRrm{S|6{CITXmLjhV5^e0lcHCNqC*@f3+d-5vr)ZOtLuU!)I`k22w7wtxC%=<}O!7UoI}P6^Q_{5|xQfb}sZe987_ z;FHFLT#5}1dAI#p4S5!+WcQ!7wr2|o3BoD2+J7y;OYo%`D2(vMvurl2#Zdk-AZK}mKKXK)?CT7ltx zF^WH>^~71uqd+-N-vg%eH6oq2$AR?uC*zu*1;PIyFNmZH=fqf`-gzIS&%Xj!L9zV` zN<*DWO)zjR_(VXTyC9Zx2xO3T@Kol!`==lk8mEkeaUcwTNnZ5*_Yx4{^A{(dmRAh% zYyATL!aIfEfPC88-sK00ww$i`%->nuML<0X;;=I+8^|PAqBP3t{fUB{?jjd?$WUoG z?-xZmEL$bW4KDIPHl*dmr9#~YUkK==3t}JCq`QYIWkv_kX>C^&+C>8xQr zI@RzEyR&wb;9nq~#lul1gg2Tyy#x3<7LT(CPcY7Uwif3w7G0eUTSa~+mjVFbVedpR9jwV{a6e^RnoS$pMs7<1DQ5)3RW+9IR(VDifH90AtA*romK=mmg zGle{R5MtZX(9eDT#<)s`ISd5ZLqe%oPW8{Bb^Bw29N;3ydPr$5@q2gptX2s%??68+ z)a|LBRzfWnKjxT1Pjq|CN~leP(d`O7jvon1xRWw=a$KM&=a@P=R4@=cj=o;co!-i= zLeH+RLnQQ^A?7H^BsL_ClaW;B86SGl69jY0aP!~h`T{@H&SZ)J(x3;AT zvdXla;r)?NBWA&w4YxJno_nCl=WmXy)MHN&x&(xha`yQvA=a5z5EeHXBKT)<&C8J| zgvGCgv_yhUX9?gaBq!ON37w}o9a$^9RSroY+{FaoO z6?g*&awa^bL;k?RmypA!bto?I3@sX>Lj?nqGEq)LbtowiSqvpJj3W(8E%h++`pj?% zRScYb5uxEaR5Osi7UT2?9ZCyq#sf^kvmAWvh2HDiY@GMoWolmGI`S-1rPJ58BAD8Hk?8fuFwI3u!PXokH}@=fIIpc#DHR``O!6 zIA4e0=Ox0Hw{@RL3e<&9pYRTcf3}g0bCKl*npZJUb}8!NU5@2;a?QYM=3${uAuW&} zpByJF(mI=1&K_8mu=oeG-I#(2?^pR4o8xI?<%>Wqb#2U-jBGD+ZG4Z}`har^Y{ZZX znS_k#kb;I4?XX}T9S02)XF_JBZhclD*SoNGl@9p>v1cK&T8E&a17s4`9Hxf2gmsNK z;MXdt;gb}|tgnOOV>vaL4}BXRmyq9bngErsF&}U~KhyL1+5dcgmaxyyJox<768}}H zC@ZN*GJUpy^POcCDM>$(8oOeRv&ijL;h(YOf5Ovxky3ixiVIwR4!cxSG_oL6^@MoB zUGN;0&%c~%|9(wbDMfS9*$eofwrH$TTd3EggRP>0&RT7uK@8=7OhR#mdOXqHDw@Zr z4SaAfw%f&-3PmEDq1flA^Y0Yk!(eAV9@-I+o$*la^OuGWXGuBO9IsuHMu?DMsv`(J zmQfd=yx~#A`*&z3Z&0J99J1FUk0J2-azBiPh&*}4eo(w!+q6}!}A-k z@RRuITEL1%Bz~UA$5*WF7UQpzl&KgsJvCNjF0^dhjxtgkxeIauL62&{; zd#^PXq2ire-fJ;B$dJA;h&@W1j)r6e&-f5tguDwDSNfh}ih1q%l49CwNawc+Py-Q@ zeCcYGB$WKCA%dQ;P)PB)??h&NKgbB4l;BAOvtRJo&y}WP4WjOXxzS@6fo>SZ=eGEK z*I-GW$0Oq{tE9TJKFZ27K%J!x*RiIMBh}m0Bfknjn44-N9q(dUrION$ptwpUP2%D~ zsiY}+9^q|jX}L{nB)93kOtxxIN&Zs~cuQ0}b?a+`mj+};^1xA$I^+v3e~d;g@|mi;BSj6z*0 zxBO1It+-!qD+kGK)ik-SULvqfctmE^Xejoda4lG~_z@mmN_6Rrh0=f@ zk1-`4tz_vDrt&;xmFTHM{uDLyG?oMsqMlKb=kE_v)vPu6FfVvHe*(71T*ImDqtl z?1-}VGpD;Dcz~J@OTG>Nsh=)JS=Lq zj4r-M5clX!@yI{o#(VLSp3Xl;i~-WwlB>XBU{zajgHZjce<3#oV-Lp^M^j`3+Jo)P zzXMC$U$bw@&=Gr*`IDg|HfvTbkQ_Qbozs$GNtSaevbQ$#kVtaU; z;CX2vB@kgSrGXiN;7cJ)0g%B<02=fv6i{WYvAR-=z+D{zU!}sz>NFZ~?3;M22hLHC z>ou1Khoh|M^eP*otiNdBk3jtHp@O2LiVA#)Zgo=C#n`6uVE zEFs|k7O1>V;muK27Ex7!NFz#$L~ORItIC)$V+%OZC>LAZ4|ew)kZP*yU@JD&S%@5J6=Fn7C?f)5x-Q(=sYgFw9;((_LITJuj{Hl*p^F5e9 zd1?TN!?RoL{Z4hb!(t3Sz=^}ZHpT^XcJBPpXh;RK5&>>QIPoK=Bj;0i*;`pG&A@CE zu0a4#J1t?uJ^~&Gb5KY_6_txNyx^392K6EsuXxfj4p>!`y#o1MB~isGrwR58sPMGfp%XB`iDC zGJux^P!G(O*#V*uBhyNbknJK=SFrnqARLFl-St@nJdX%93Y>8s*Q%+;!6%B{6k)5^ z5xdyqgpEYC)CZ@K@8h=G1op=v2nT7M;hO3?X3^;N%2rw6UkzcTP(rz_uDUG&u%7A& zAJ0~SB+E*~ziE&Hrn70)R;BjCu9}fkQI{0ARW0C}5*z9S!NLx()m8Viz&4JY1n0z7 zU4iLGoNnZ7Daij6Gj5LpXPn2y#PSCQM@%fQA@0pk{GDndYw(E(irZ=nI7jg>4{@Bl z!g^4UVYygww6wBTi5cVqB!2UB>e2re^KG4Oc%7;0v_}V2ar2N~{9ow!s^o??oDY8h zU2@AZ*IO^Sbu7w9=Gl^&EUM(HaQ_%*#Xr8AVjpm{(_$+_Vync-=k#21H9dO~W1N+m zwnt|AUMZOAJC(^c)B7KXDn2B{p1cB%ndvJuG#133s!dYQ^o>aBnZE5^AoWbYq7g_v z)9=0mq@L+NCVA6LKMNLkGkr=4c%Aq!^ZF3*`b`v3Xr`YD?z|9q2^EHB`sLtk@wjHDuc7ozznsP$0r#Yb2pV}a%d4Nk zf%9ZC67)>Lh-YT_RJ8F=VUa2VSh5Fo0m=5SCom)uzz^5%CSWbo4bAY)QAMKR5ilPO zY4B$FX;+MfQDBY>Y4B$F)|gDLGKq9B-wSE*X80y}w7o#UHZb>uYcMl>X{?HfhSOl4 z3)f&~_#$|m5)DpCEcM~v?e#yB$kn_}4`uHiu^TkJoWrs|9wW91wSgk3VQqdjx>T z2nw^wo#E@iZIQ&r05C0wCU1s6waBPi1Vo0X3OO?~{OAKl%|0+c@zeldX87ftpP8u( zU|tT_Ab`$J0oRb&QW&-H?==K7!?%C~wTK$ZfmxLRJqT1)W`+--wXPzd1(@wa8oU`k z4#U0b3&s#nTKa!zhW~+U4^zN>*+Y0Ud{y|v(w&xqx5eWJ8Rx1oGkgt96Y3}+=X1b9 z{oI}5MdJ;?a+P*-BpSULUI0m8R>}_0sL%|57uYRB5RO3@uiP2FD>%J9Zuks89I=x< zPS{8kn&ICB`-2cfW_XU9P~*+;+rd8;!bqWna_i0T1K@4j>L&m#jO(UB3b+v!dNX|H zDwH6{NRaN0IfHgC-UdBAi zdKq(#QeZf~+(udE+Kx%qUFPEKeFvGCiQHu_#vvGJAj@1jH@RER9G-Sg$7>yf?88?>ZExJ}5oy9uiFjlHMvrgk0N6#}V4c`)}#473rRMm?}tfqbiA+L{& zmdK$f!KiQAD!@vpQe_2JQWXIa4kOBnT7xf*RHCh#YgmN3>sGM%f?wh7RAQImVAhXF z?AF@_DHz^%fHe;n}dV6-Hfy1PvV`KD)~ucirsz*PW}|ix1Pm5D^GOY*7D?B$AY98E z=v>fpIHZLSHLjK^@P=kl%NA-ON9Ti7xRyw|Re8Gn1=Q{89k@t&dMJ5fV#1-)22t&7cou&(-p_-5KG9vw55n2-xVMsrj$wN*< zwGke0?z?G;ddn4I=oSX*f@<QIX<=fmKkN`7$}g1WB0yc_yW`J9*n;5x9>*SP#s z`QUX&Zsxk=7d0z*TE3_q(lQ;Z@PAWFN$}+*p)O@En|h_JtU8q%Q;WKYhrK+{sLlX~ za?QNzGAgMaIs(AUYHBz@S}m7v1*9*lAcI=Sg(i^e*hgbwz)FY+663NJWRzU+o;LDRKsiZJ})W2O-Q{RM53+OQPTNm_jsNZ+J>BGtDt zZ+-ud>PxBws7H~#M9q9v>%EB8rH$=D`=!XXg#$uG7J{21tNCM;RjPtCsZ$UUBb_lf`GO#kod(^NUQAuhN#4&R-0mCO64NX$rZdOmIs27_(K|P)& zsnoTQ-maxzg|sx&f02p9A`E17|952=3S}dE7e*nR#VZJul6V>y+-!J-4ZtR}UQ7#& zQe~=#m(ss~hm)i}hmV6&67@|XEu|E$zUUGFT50tY{?F?7U=+Z}A;xW@dX5|n{o|)W zcc~ZPfK;fu2Cka2?q0VA{$Zng;Ei-yFmA=yi_HG5I{xHp{htIN0r*VUfQpwZ$Io2o)-&U!lYx;u}Wj;u;<%5*? zF?cnG1o&x(NkB`Q1We#RCm=3w>SjDytC-p&YQZ<*!fZ@kW<=J0W9qZQABgkSbmN0_zy-7MJ_vPC1;8lj zF};T%6~wP>ckB+|WC5gAT_ElyYCcs5HzE!Xhyr@}I>y%wg1Q0FKLpyPL0d85#&qxX ziP1D3fLR2Ik-^yj1*@Xe@sUPd3<@#*uEHHtOM%!DLeU0+B2g|$#tdu*FPF0FbD+K^ zQY?d(I)6r3G0&xQN&XkaN1$L$TB1cJ+j43f3Ml48!DD+${~JAqOx$2i6gik6kHCLW6BYA-HRtoGaF0BQ;w&v zVa8#A79;>(HH$XotMPlIENW6!$(PTG($sa7cS_bMj8TkGEj?CawG=Ky%IRT8p|P*0 zQ6@6|ol(m9$%vM9lavd2ZsUMvK7D|#&tVu(`CP34!ix^s6qMQueIaqr1$;^94}55I zENyZC4pU&acpi9;w4?bj7uYZ1Xg&`H4%(04!8n?w88~DQCe3#$flur{pew7dG2R4@ zVEyY(ECS=d%o>i9c%31P&upctA+~|X32p)(>#cW3Vcq1kJr0i1&oEp)2t+rcc8h#f zwHTj(2hP~X(N?Y#Fapdm;ee9(^fqwbK8%;UA5&&7nC}pvEvTvl@UuM@0GWfffVs~D z1c$;77_v4B>0GtjqA`e?Z-KbrpYHMNUqi@gari_67ufN5%b zw?tWsDdVq)-JSS17I;lYstlObJb>FqOj8?q(5Pt%LU(Jq1V(Z z{A6?mP^pFRuM0sZTUD8+)-1#5sscoPqQZ=;s!UVcz9GtDC8>@;bn#GVYFkd3rZxz% zqsWoU)>SG^jqN7X)Z%D(96L(T8h8u)F%9*?zVUSqz?x6-U#8g**n)Z4_&R40ciD>%wgwkW{`(wSCR28=!vmaDNy?rbB(+;|fTVUyz96aHlBFPB zw}kH*)DT>PTqFs$0u^#gUiRV%(@fVbc@^`N%E$)r+>+cVU20MvkuPs-T(=|{&Ltz% z8IR?1x(AC_b&lLBT10<;C* z{Lmf%wheVJnC(4)JFuJi;dzvVsCfd2r#)0?ey9h4sF@Dt91q~CG4sQUb0$A)fY?ry z0mWHp*fpsbN5j_E4A~c4LYZS7at)=aHjRkt+3`v1NYX ziyf=ZVmM|hj!7n|C(b~4v_o%9{Q%jUU6SjxV&0YnR7c}j-h(9;r8GK|ZY)h)q6{_zoQeK&eEAquILC0c* zx&}Z52m_*^RZA7aDM*oXZFL(sMadmQ6<|adMg>Gx4>6Lb&%-ZHQ#NiY6gsyRwXCS2 zO%ZN7x{i-ISU3~tJII9XDn)I@p6kdZY6xOSQqPN$Kv}g&$4?5ySxtl3lW9dnKG&#; zR|wMp4=V%)Q3w%UA>=RMSgnz~ItE4GQrSEvki8I^zKhu(JarwHXec)z3WgOz0yrhe zT_85rQgu(`5FV6HRYcwyVn`u~Y#cM&G#PIkVfKa@fZV~Du$*sJ0}(rv!b?PJb5*23 zgcZ5DjL*S0prLpx^{eHGi9B--aV;KyYA}B5t`%)|RGNCWJw(ps9*rNgWQFenMCUL~ zO)nc|MP7ViudQ=IUw zB1`fNy>gEqhzd_it?*Ja_>fOpsZ}bWFp={@y{y!#n)Vm!W~ElsbX=jXR%&%k7fewU zPOYV;LhUQ~FSA?<$HdoB?;>uS7av*$4^ePuL`RxB4BR&%>{@8jM^jahZ&Fh4ipP&H zZKnRefO61SO==a?8SL>)ZJL4ObA(?6yyS3xDG^q#Ce94uLE8akMAZTpibjj zM#|17)fIr=1nrP4RgfcxQo9Vh*Cg^BcoRG&@Nzn%+*140ZesXvfw$D-yNL{ogQdfZ zZo#(zRJ#j+k3A5SOn(;TIpsii+hRSdGvNJ3z8Dc?oU4hCuBoq`MWYZ+aj3o`_}66; zWa&X&DRjit^f6CIXizl(8iYWsMXRMc=R{eli*L-2)M=)v6}zE&>86Xuh$kT-sp_O# z=?cqGYIJs0nhlo}R5 zaEOysXmE&=lA@@*?8B5)rAWTRu=%y)!a2MNM=p}sY#Qv} zH2@Fa8Z>VTCI->;GyvnXgCt?7Tk=wrRd)Uk*Sd6|-VY%u4G_nOvI}s8nO3(GfKP4$ zJj(Z&T;1>jB(1ak`0oRwW& zbJ~ITU^u@LIAzxqa%*HTc*8^da_W8>vEefmp_-2PIpk%rT?NnR{NhUmt86A*ZJpoM z0BrLVNK1wl9Hh$b&2UpW4#1fZ$YdoG#ZmTPE4Mk`03cVZocX<*$$d5jAPy|5Bmfl& z(l!}QEeQImI4Vj&_X5!VCeZIp?wbJWT|oT-c*+C8<}U0<=ldfi@kOVCH{0U}O-etr zcrVRB#sstyfUP+|;pRTY2cw`>758o3hGQ6REzLVd)lD69^+#rOvh zxiA@o)vBxTekx2<%C+luz{+}1e6-t^HBwA{i=3&3V6^p^Qqa1ztEjRpfF$)7OQ#PY z&)gbTm&ILN)rDnhIv{V|3RYH4L{q~Yvy5ClzgTf>RZ;hT1kWofK~+LUw;fu^iYlfm zAxSu2ZHI-0{B4I;4)NmJ4hstvjBZ~XniADUXs@iMo>f*hqqy96voq9eA>8Gm8Oz0JW=Xe5EoCUg_x`@+kqADw? z;Q0UL0^BSju8HaG)P?7er!>vH3Pu#-H8W&6bX*z>qZ?^hQ9?p6 zNd^8c3)hNcNkw15(rHvbDYb^`tJ;p`dzxI;5mLG}wO3VgBe6_AqAML`<)%meEFf~8 z;0-(p@;MKu7dGaVZhmewPK%E&9)b@+K0hBPe11CYK0p1V4u1OE9fbA?jiW~p;`@6CVB{n^RJ&uVz;gya?cFW>?OzVLN z`_#mXIAf&)tS;CHxk>E%ENve(TXH`cJo`K5EP6sk{P;{gRRzeX8M7j+B>QgF9|8Zk zd_K!=q}~OMj_0p}BU|jo>U|0N{mhPr^0#+mP4}LYfGE0DB=0DYBnc2M{F(v781W2dT)#iryLz z8%C;&zdafc#~k@cC>=E4uxYD8b2UD)|(9k9@ua*B7d@qW`Rpq^78qF6a|ai5TSt zQAmu4p8N>%GfjO1Sl-wNvgP7dIn#+O>V|56NfiV>Zw*f<2VO(pzygT4=uYV*>3~wmB!zKXWUp>3&-uF&O86{55bp z+G`+eCl~bZ8-V+RCRoVN9|*F$m|$W5WgHu1cQe5R|C|+&?O_iU*&_a)FG6!q6HM|? zI|13=CRozH>Hdi{|#jeV=NBAP*?@=fcEc zf21CeFwP?WdLKAwW-<$B)muYe|Qt}U#kHUKBW9H z9L&B|PfPfi@*mCu{(>4I;Vk7J%RczCdS1fcEB`SZ4s2gj6C`{|`6u^8dN*=&DLc9{fwm+&)f z|J_W#h`nFJIBql_4m_}n+J_~K<3_g^hW*9tV-m)3qw^kv{Ym!M63(*y@3ckv6t};X zFpeATl#Xy|Tj&3hZRNfX9RABloDW@{BMnaFL)G~F9EN><4z@VRQ?4BNe0~mZKL6)( z>;btm5yO8kcArSF3H$uan$ORE@AIch3>&J? z&o&sHf@WfuvDv_)R$s(KYEO|~@8=S|J=Lx)-P-c=d_;Si>DD~!^r~n*k8AWC3}E&o zn}Zn+_<}%GIgA&r?78+)1oV*hrZ=Q@4tnej<|8QJg}Uzm($sEXDJ$^sAU8l?S6{{ynzD*JnI0 zkV*$INtJjAXKa6G^T;#BbFzY@L{#IF)Y@Os!9UaTJVGnTHv%s6kF`+#gXBl?V67nE zAh^t#cfcY&d@CNeCGoCVb>9H9pO)kyT$)MoPB81j2R2#^%4G72iiLTZAsT zBvpsCF-nW}CsSIA$TNs+^4#*}F zd+!})MbWg4PwgzrE*n@u6a{n@6%-{1C?ZKjK*2|HP!Ld2BrY6vj|#GY%VHu(R1rZ@ zF(E4EggGlJ=7bTm7#@Ahzx%GPo|$u&=Y5~=``*8P*L$w(%+z#ORabXcS67GWxzC|} zK(t6!kCD>_m0ayG{)jM)d;z+*26wqgOw1d(MLvHscpvJjfk&&k&RW%0E55tTJrd-X zsL~H5g33q1YMad5fuF)p+2NdR-{Qcz|*-j$O{PbD}XRhIiz;Lp-j&D2%0%cqGIwex{OR;eFNf}=d__LJfhA;@+3wmSzc4tUyd#n@!+~dWOuoMk>9F} zJk2hVOQZhfMzB6GXC_%6Mhw*~J>-#D2meKXqBdG{Hv#ti?Es^@47nQ^`eAS3>3E4m zw4}%jIEf z6q(G!fIC6mDTn*Qb=S5dw_4t`9GbXR3Ud+3vjyWw-@)vKfp>$OG2dz7}{yr#fbsU}!b5Hrjw>^wcl6N&xV+EZS9J zS4Q*PvO%X~3B8A4A#A?_^#2$Ygnedg$DB_y_n05{xf}D{x%&^(aw-k`bhr|+2e`+b z!#=lSr$}yV&b?t28umF6I~8-=(B8mj3!4j*$!#b9I1Q8F`0vlOx&KVVyU3{sn-zs8 z&Uqz6Hz{Vgz2#EiU9$sR&+Rzbh}carMjq1Q@-N<-$URYBM#TG3r0r(wD?Ir&cWguK z9ZLgSegQ_kabD0J3S>0r7rbsXEr8!?2Q-+*Kdl`~_JR{ope!&M46IXQ%;ePifrY?a zwcDeZTRRsR)iD++!Kx$6{hGF()oLJIPoyF((N=OBD`MT@*p{jjp_>r*R5E@vYvz{A zuvVhI!B)g=OUAFn9=6=ux8eN?r4OJOwegSm=VHHG?%j3qqR}50p`^`1{6TLFpS%$phA7dcQRH!9L@mfipIP`NM8b0UG!ysv~!kJGnhS44=ll zWA0-lYA&S8eL}7RyX(lZo+;EV41Y@QM%d#~cxEj>{}RSATFdVN=AX$1O$p$|x=vB|rR~8?-6; z?gD(B1x;RZN^|-lS{}sZapH9(k6^UC*#ml|QSuhTKVzKow-Op7mtzuL5cbw(m6e&VYzC~fGT@{9kv1x$8xPyBEXUwX{T=c%$edHLKQJ|zE9qEP4Z@|P=$3+CGz zVN(=IX-{q$Jm$mOuvu10dykj`?fm2^gb(xDS%N|+9qzTWHlL1ny@Hw7N;BpK4 zzT%xwMWrKLT!-CG9#bBap154qzfE(@j!50_!iOr~L)gkYDzh|0NzzXA=vX;;R6^ZNuYu3ZP%-d7qL` zpse`7P)_l8IBuhK5}PJxznTkkS=vY5o{U9j{P$;W*%xnR_#pWKVSh*ArUk9!LMA!o zsduekXb7S`@i*$j9M`i#X@kJdQAE9y00yV%@nfYGlkgDAaapmbluuAUL-NNVqSS%B zhCB5MgM)YGM_NjcWM=-DEkWDv3U z(s1Sx{>(QDD&)Ak_K)If1kJUiqG<|*xITo?< zATG~jq6K4*7!urvrEpuPJoO(vv@e8_?gq?WAL7M($v;#ULuM!D;X?UM%+5~CT@Z30 z{`-HJnZBE=Hr%6}tlfb(jJVr&jH?14D?d@-$-p}&6ZhWkNP=F^KzYmZPtw9{ z!91`R?foJ4mgSEV@67fdbvjD?baAtY`C;!hn@~*S?YT7UeGPo={0a7D!G__%!ZOM~ z1LyZmL+#+d|1%UHtJWHEj>zr^Y!O8`7m=;rqs$WNjOe3dl$XH4$6hFM0%FdJV=1Z| z;OksIFCKZZ$UGn}$wc*Y1(Ya60} zj8N*Sr0vxy&VNA8-CdkBSe(MjC;qN15?OAKJ;sxQ{O@G(ZW2&mr327<5cM6hcb<wD`0;w|L2FL|$J5 zVV9ipTjAai;SoeWO$1ke?PTAUsQJb@Ps3B9qbVOD@{1(G6f7R+H_iDFDJepTR$2#t z<8YeLF6B4Rxf3HP_*H?lK%^@Sy2SW~=+UcD@NIJ*`NI(UW+K#RdY$_J3O1!`C#Jx^ zraB*pa%({i|DRRo%@E}cX675#i&r72^A`yGEs99gt!X^ex#&!M=nsEKTkl73@C=~N z2O#FCIQG9*=b=D6ITP8lf;yjxm|1abmO3v+%<3pMTb+MpzV1TwqY;XeG*ai6;g{&x z=3QWX6JxQm>uC#))cMP=YddwWeHNTt{P+Kx?6cJQB)pfT>Uurde2<@Et$s*%0&F z=*Z>epVN)qef{o)-E~EChVT%(A^C*y4I733)~kbg1Y2G{Pw~RiSqozFoU^=qx^6@A zdBiFP0(yN_V;PQbeFDb*88jp;wds}3Y)Jmeka0*p;XH-&^4Zw1gGNJ`gCY5BgK$d# z=P8_*Pv;{qpYN0m$=?;FRZ1T{FaMsS7~p~*?ZFTZnug?aWS6Jc)4SXQ4`#81!$CD3 z-8^7cM=+ra_R)lHWhPvN$cbFSM*tW2C)UR>2r!eKG?}aS;S_xcg46d~j&G}7DdCNt z;TmIDF$;@T59+aH;nR#9Gi@3J2t%3|aVzB-)`Xvqz&h$XwP>%yKO@9<6mjDF*z1l+ z(gYLU+lYt9YSFxfjn4KgAFIVi9!!y*XeRP7QKcVZ%kTJ!&&*!=&u~8FVG>T7$_@DP z2)FLzZGVnE+Z2YQfqyFgsk3kirg5~2P(ECQ{}~-Z2gn)UzJaApj>m&ij##J2{?Pb# zlT@VJfvShcojGb$xdjGi>6gjdrNU<72P2~_&x&9Oxt#>Ak8U^@N0zqfPX4D z2iWP(m;(w47UHjx5J38z>PT}FUbqJW_Q5}OFfO3zi!g$n@mC50pm+vJra2uF_CvrB z{8Ojk5~Mjz6%srf|2U0AZquBs3ab(QPzFl*ZcQ=GFjfnBCT4>S)ajqGG&bcr)1zN^ z3DTSk37-dpk316sawfl6#V@d2}pab z?Eyei9@1U~;kTuvJ?9|G4}YT;z!ZGvGs^+6{3lI)A$;-6}ROOWRKQX#=k_-kbn zK=t!2sWe{|3Xem;VEj`j;}WF#a#2WdGX6?I02F+ssDhgW!)gSac~($+la_wEd1Hhv zMc8Wmm4W~$c+B{O!|>`#&P%n}VTO+(+%^4|Tsxi6?g@AkuesO{quAFhwpUM#XP&9G z0dj?ZN3qYi*fgEPuy{rgbirTKB_NsrTtqGDfpmKw(5;b^&N*XJd655*I^eK3biUGb z9mD=0JJs_bAmdM`=hy-12Bq{C)ASp|vk|o_18>q~^$!2E1VHtdqhd|IjKQn?@1z!3Qg&Gp0JZ{5}5eQj~eN8XJ=w|$#H~f zx)3M_~BI?!*y#KO5uEG4H6uEqT z4l-9DMJ``mF!O*&moLuHNl6YRVu6f6H!u4*!o9Gp=Lq+4geCAp5a|f-=2&q*BTVyS zP+=<&bj3e)EH6WOISH2_%}+>$44jO=78mDa1O|Hyz7@qlfF}V=5xtb7T)m`uN=-Ny zf!BLN0wgTQfi*mwrhMKa?r_@~BCS~O#V=5HHV z4p7gzDP_^5c?MCqGq76WpUr6!Ik^Le($6*oVrL+o=n)CHYAd?woLx1Y$@mNr&ut1y zUm8b4-*P(JK5+vo{o(DMsg6;DF?upOdybf{%TmsW^9 zF&SH)hh|y#98N`+H^4~Gfk6e&#SE7vF(a*YBuiov1?v$xaFwzi;)XZic_aRsSuN`z z-F`PjJc_`l@lU;uOOWPgr9y&V;U6O>3v^N$P<}=9-}tAB=a7t_777XOjlYr+$S9Cc zScm*pP1qh$-8`P_pVB-*Kl}#*hx-Tu&~%=jJ&lvprH#YMjKe>5J}$vD&QT+j50^29 z-k`c8NojeELwG%+AM_{$%s^Bv>IO!oJW-;8M<|3JBhJ}@w+*C*^LPSGr~)fJo$P)F z)=uYJiV1d;$j%)%k>=UM;hsS1<`D^a4d;2rNGI0tYKpMyL7+JSXywX)h!Ts$WNC>kElRl)P7!UYI$V!uZ)DCK!l=@)lJ)YW*t1%E9a0wCm9%+g1*DmEd2 zN1|%1tBN7{=fQ)i;7P0D?}$=OI}%JafxUrR0P1f&5T(KmmT$o1Oh)1BGeM z-{7D69hV@@PrZc%^X3||wWzseh}ao{yW^i~j!Td}h)siFTl|%?HjN<7<88tt5ZD+0 z)bYHWf=iI*QAQ!3r{b>^1S0c&7LiJM`b{a1%1O^@1oR6KxWuDdo8srS!mAN@OJ+pH zNb1>R2sAz8C^bl5P1SxGq3?Qh0#FwokW#UM&EppYn4S^Df&`+{JXkxdQypM~n8`~3 zgqJY3#Xg8_j)1m4*0t>P0H${Y0!R1=-;}5=bGxA_ar=Id=4syHcpz1JMBkJmZK>!? zOZyVyYo3%kkw(?Nt~!xc)x(G5B@Tlpox{dhxT~IRhTQVd;P5-L^JfB2WRt|PklH3I z_=0fQdmi3n{x6OMb_u)lgI&S~Yr+nmG`R}v$%RMe@WezU%wvYbabTR4aG52{gM`C7 z{-cE5$-*vSgEe6X2Nl;)3!VWh(*iD+1r_}CYq*U9?BG!0im6O~rwbCX)@518m(wg(McJKgZ zw1JS7vF7p2;jd&} zXiUQH579N|iU*HE^r?u78hUhg*~AVn=z%eeotTGVW$~ zPjIi`Y0=?B2t;XT9si6`Mw%x?qlN;&XL~qEb3Z}&Jcz#W+|-XM*G(5Kh+qEK%~;@7 zFi7)^&hU4j=3RnLYiC~ez$Hk3aVR4Aybt~=l{x_R_!yM(jMOwga2pqnqr{2HKTV0;@NmUAOF;)ysTtwnqRIB`MeH)<)D4Iaws~U zfkEje$WT#0>-`v>o#lJiS*+)FLTDM*o@##Y+o{4a!fgaj6%1BYaGwgFRB!~&S1Rl) zJhRaHlVc?p{P3&bcf`XPo;lk}bONzw&Opyx;T~+DWK7 zp3xW{i-2L7v1y*V7@mqio~5K@>I-4=oSQi+zGf@B8ByAbGEM+=t>{pVb*-pFcpET- zQnJ!Z1;5Y`%0jbs>;R*Inwd?8nb}m3dD@}bEAN& z5B#;z6Ylw3y63J<&1HO0`aTqQ8g~X^Ft*bo>>tHHbs#T?;1W#Zz92*~q!a$iQ0+@S zJ_e=SER=qf-r#X~F83(j8{|X|2Ua$b!+1wi(Gnk7MLn?pkA<4={ysOH<`g=ULTx=Po&S@p;Kn6Vt-0&&6{92?YQBW@(>^@k$7>qqlsoz-82=vPv&l$wDtMxP`09U@usdSkC2X)J?BJk+XYYqQFGC({9HH+dcc<(-1_mnw2M6ir zX`c25gM;wba-34Bt|9hp1mWQb?CB#2pfBWy0f*>vaYZAH2gA7t*2ch6jm|Fg{vl(% ze|QmKOl0Azmvr+3K)wo(H{h>n>zEminREWnSA;ypy7aYf214ff(oHb@*ASZJp5T=yKFnBJ9 zaL~l=>-Q?e^3MuPJ;)kF|Axm(xfxK~y$gd`l51#<>^@uWLflNm&5;5Ny8}BM4g`nu zMFxjI%HW_%>RHsYh~kpzt(ze0B$agvFkOL7^0Mk8w#hmrrPBm6DN>nn8DRJ4kgPn5 zh)OvY*VCF()?t8F1Hz}|J*{3k5mi>+F4G0m*hQs7U#D-b&M9of{{5zN?|)_YGB)RS53` zlxmq{vENyBA1*KKCd?Z|2^JJ*=%&Z%VDk zy1wYjauLLon^s18(^~ar5ngAxP;|Aiwd&1o2eFpQQ9u`ot~(wq+#9h5!B8alta6wx z8NZ2u#adbAme3h?mo9Sc6~4CGwe+=B2`E@1o58srq?o+)G}J*?VWltDI=tKH@ArJV z%E!uwmG}&)mug-3_+Skf^p;9t4StRIDrsnWWeo0F-DAeihK&h7I zCTC=orXwfLD!p%n+dcml2WUP>oL1s*EGC0^j+9&QVNj1AAVCQahA~2yd5OjJL(Eto zGed1tPJTBacwwgk;Sz@ct$HOQ|x1 zb0K{&+6X?h`xVHJRIFyd(}bPeT=qMqhq2!Y*_7t8NgR#mxv~Mpc$uhgGmjKGi~3zA z>fc;Yt&iO<6ZLT}WJ2Mh4Ku6d1xto%&BCCU;N;wx6So&|Lg0X$Mcr^4mQw-ppoE?j z`RXwqVNgP*%l&f>d($H@CoXA*Z}-LUvMZdW5Lk{~!(4S?7no+Q>U3nTzQ>*iNi$bR z;u*d}oU3y(b9HWJuBOMi8fnSY%+-zmO|D>}R${lQtWXP8X?$L>`vOQLr(PYvAnlGl ze!!yK?;!L-c?{nTL;wYEhQ1#z$ThT3e0N4JS0V;qE_??~t`NQiaVQn+B8sOa2iWQH=B;IxUJ+qQ|4U{yCSzEB3yLO%+&P&mdi?9 zWyEq>#QTZMg}YE?GLmGcBYiRbD+?=nT^*t#_ONJ3t(1N z2+wct7;miMaX7uZ$3t_4SCin--N$$i2ge+)G(1iijEM1|f$J>B%@?c|egL4XC))+~ zJ@#_BQhtPC zCbzoo#j)M60Mh;z$ zLf9n;bJGT&8S8G>!V>qI4-7Yg`~w)((!vtVu;I=@FSV#W?Jh^&84>T<2br8BFB|U< z@+5c{k*eHh@iqt^Id1(i{=Z5-@@-Ik@xgBRIf$-yFiW}_d!O|bGq+qb#!i8mW+%a7 zkRdhES7>(UNFOg{Z3)Jp;4(!)BN%1~O@M&kOuk$&+QMqT?uxxTvL&D0%py7&(ZBX( z5l;p*>sUf(11k6jq4NPP0<=UbQLN)ZF57v+ROt+wY+Mv zJ1F*hEb1w{%kTpu;+sH>VxM7Av{A<*GAplF$$UeA0oFKYEv&#lw@9Dq<(e-Uxmdh(g3GrJo_C?Y@g9 zL(KUR=2L)NZ$HSePO*FLD{tOHvFJ7i1AT8lJPRx8?VAFnN<6Xe?KzYlXCxCn<1K$H zV-BTzf(i<8hD9|)QCgKTcrOd?nhXwR$-WkTq}^TF%>*x3cJ~0PiM2w@uv)qr6?;-7 zhK{Y=cO%Ft#s|~rbU&|d^+Llv;Uz6WQScRzs$7oc})d&vcMd3LBw<2_zu;nc`wyRlvo8>l4%{x7;6Z$#yt6Vc9jZ?`wVLh9M zLKJngWQb}ASnLOS*8(RYY=KVh-(yK^wz~{_{8m;cr{CWNmYb5VHejo^S1qX|P@KW8znUv*Y9z>8%3mDpWI@~v-Ya!){7)#76^+J3d%Y|PlGH3?@& z3!+TZSZ;sIac}sxyE~h79{9S#x=|sv-xm~8D+Z`0rEkN38%KeLt%jsKPP$5pEJbU| zt`>dKw!R*Xt~GyTBV z+wg;cpRq5Td*qW z(=zD}7T446GV-A)={Coc+Q(#7Ua=9>sJxX?!$K8U5jL=<K?nYmEKWXZ$yaP_4Y?Nr4LX_w} zKue_cx}4ygJACDZBYd~#nU*77hW`SYQtb7rFe>$S;Or`V6gXFl zkI5jOBgZF7eFR7{vVVgw`D&SJc*|Eutrw_+I6Oh&`s(l&&f6hB-*uIBjOZX)5_Lk) z84)ZH_K?{;d)%RPC2e+8LEccTW?8;0kKM^aVYSRgp*WR!Rw0U&JCb3P zr!OEZRe-1iD4bQCjWA~w_cy!L-P@;OZ)?TVDt@m#xKP>RM5wDo>uW$ zaL}?((JFSf7-too6Y5h7a8jgt`JM;cZFC&%|#8%V;C7MwqQPP-)G`x%&S!gns;v`XdRYu(F zYvdM9o$aaa$&`%}4ONH|T?J@~bOX`L_xKul4Pgs~%StyH({eH$mI8)bMH+evIdNs_ zUO-oh$NS0f4^>`VTOww)d~M-=lGlbt1z~b&DQ9{^_Ec9;x&5~?NuLhfq6V;&4y;*7yC0!-&8J?-Z9J$HtKON7@ zvkC7onNg_y3qrqigQo%E^i4X*HENF2-^`|dD3kgl=aU$@NPCz2vV?vngW7Lb zaMVvT?On|~W7>nVsb9^Y_Ujyu`g2luPEcQ(P5og8wcn`WsJBw`lM~dNv#Gz#p!SOh zmNuy`NKlvDpOx=lGpPLnen3u27rk>* zrI3GkPO2fz!8)J1-JLD^O_Qb&dz{V&mW>tJgt^iUQn@T00aTaG3Wb>UTL4wdo5nmE zt74iGMaS3aeUVLi&ozXPK_E{&%%a%iSuGz~nz4|T zW>LsxCeKeOx3X&Tfs_7AFp*y$W&J;b=r7C3{RKdWOl1q$fOKaecDB5Yu!j(~On6Sj zCB|ku;$`QYX3C%)B6?0EgXVzFQ;26oYz2fxcA(CdBk(*RKtxwbEz4`N1+;$O<-d{~w@Th4z6D$W zl4@y~Ac00CTfhdR+-P^SfDTH{7Vt2rT?_aakhOs44D%gN@u^&@6wJYHXZjYfISVby zMJJ$CiKkAsfDer1W6yb;+^3w`0!D!hE#PJ=n3oX2tY`~(!UE9(a!_}cMcjM~XbU*G z^n_86r4cJvMhj>Q4O=PGQN3LZ@npNpE;%V4-!V(FV`j@zgwKJTaoi}Qnk`o&?tA6| zKMWpFQBFr2oaJ@&a6m3*h3e;G83dYf#-ZG&zkAMGs-Gtzk|dQf5l}TC)bxDAinFyY z*=BfnNSP_a3tOGe+yqKF=t*kKZ-~CBf-Li9;v>R zhIlzJ=LDcs3foNWv&n#MrmI41Giv~$y926gGxg8$ZDxkCskA%vZ~bGw&CCXxwV8`8 zz8pNzYXpxIhZ^@ja9ppk$WT@TCDOK?&!x8AX?abynXQJtnH;xDN9D*~;~0=s%hL%G zXiu`ujJBv#><*bHDmB|oC8%ASSqsS8%(;enk*D}no{VzvHt<}pQJIAn<>F7EREeif zwwVP+veke_dSHGb`M?WF2bp zT{6I_pr}JFZgHG6x$Jp-%CmE=Eug~-4f6Az*o^m?)7kGnclQ*8SOj+R&zJBC2;pfk z`hwb(=X3AdCok6y3cAWyyP>%v-~!>x&S43a@0IVd98D@IGE5)#oX35H3$e?!V7NSt+8w6>AK^{^ zg5xz{6#|y2Y4uDuvkZsIk3S=6!CPGFYe$$NT1@B8xkSe3H)6&|m1t>y9^BI^7wbFn3u`UKDTEt57E z9HkJ8U>u;8S_Iil{!KBg)MBWCT%#yvNjAU%=X1J8`hC$%S~6B0f4Sj zs28B;0IiWcKr;;8lNGJ66dqmot>W$vXr~2Ca}PkB0ab~|yacU-KX(#fY7cZ}`J3@l z1^(KV`PZV;K~Yu6(4cht1n4*hjNC1)vqYoKQMlq0*XfK#3X;DC69;mdB5_y7z(w4Q zzv3wpT>~~3;~54Cx;S6>1qgYK?}hGsX(3)Y;KxSfjW)mv7cHE5nM`{h&u@}TxM=mv z`EnG`blk>I)~p2neEE}m!N275zwnHelG}5Faj#zr}95WZ4)K2LUBA*OTX7eq8)37_RF0G09qu5x3p`0a zAV=~C5Fb_&9{!U-ax+NoN1#jPRzQyA8Y98P9psrUPviL)Wx>OVGFY%U1|hJ~DvH+| zkYmva(5VP>EIgyh2)zKI_FJI-!Go6f?Y`DuT=fR(X23;kQ*@Q2zdB3Hh2D}3aE?MY zRmlzC}fA$bQHEg#95M!=NyG!5a%3)r%m2>?C$-k-LGO%(4QIr$o-bcR+MBj zw6LiwaTa>P{TwGOl(#QMQ#JC^J5luy-1ru&o`;>B3F1_JYH4j;D&=>C{erN$Ld@Ax zhS2KO?CR)@doJA&hf_{wzey50<787Q^u|fNRz326T9V~NHgEh!uyWpb-Wo!5$GZTU zBlXRO&?TP+zOYh*x$&t=ymfit5ax2F@bIDC4ZFA9i_XlglnW4Xzp|YHh*DR|R6y@* z*jPZ})pQqm5K=Y+RBWZRHL_H50I4Rp%#v)xHF6h}K0CDJ%u4wj;Y>939)L=D1=r?C zuO^Gx@)P1tLfis%nVVZC4!1k1SnG#w^9o?OYTgV8I>CdZJYrW*a7?A}?5O-}ye1Hn zKBF(60ft%duyYyP0kcx*G7eRUF5?_P&SgB-usxM`8Lv}Zx{S{#M3?cOfU3k}n#;IW zEpv$}z-sE;Jhb&%kfX0$ICoig7os;@pb~Am*Su8 zbsi!NH5S_&g2g&KKjbkJhdJG$XRTIDtp}XqcmDlRCk=A+j2AmSQ(-;o#DzzvXTEkI zlEr62nuA>@X``^s&90xia9y7Tm$d^-^LYyR`N1yO4N&`1$CBORaSkFLdab04f=(WA@Ntf#r z6GcS6_y)SlTTySfe}c7HKRKk|VT0$eOwL>s1lL(|{q92b_K>gMr`FFy#5*^#j#mL1 zeG{R@fF1|5R*uLbqeIHGupGrH5ykL`LIB-u32i_^b!JxzPunWHnVfml*71PW%1~7L z1BSO9c%_XY3&IvE9u??WK+EJ-G-{96?QR&R4)WZ46r3l5<=#T3JRq!#LOdGm3_uHH z0yW&#n9e-BwT3Xqm}*MIwQ5y8-fH6AnW8;) zwv@=umX7|~Rq0lutV?lX!6jH0zwNtf>(3ui{@V$yr^ znJLA#5|qVvAW6*bELCIsi{+ymaXP_H($M}>6Q-fveLZX*?QDuBcBz`zBuQji6)`fc zSkwZ)wQ5c?(9M)8c5F)fBNa#D%;#!6JM&rkmCIODyO;ENSXGhc^L1c3^I38$>cyE) zkJ!u;nEC8Ul<2oisC$D9ryR0kdUV)_EO;v5G$1<#+yclc;4nkp1Z1y(`)wc|6>uRS zr+^->>|QPOj$6F~7T!i=D&Uz4Q2}oPv``h$lU0(edhG|KqVhQ^Dj#tn3ze_hWa&m^ zQ$EL(%11<}d>(HD@si3%WH+_8+AE*kGZb*Y+bJ^p@nZm0%cBVeROQo6H(uQ)n^ap} z&QCS(1%7 zTaHKE7)_O(Yj%7gXTN_y#AQIi-ZMb2D)crW3cDkge1b^eD&0{I+~dems?bBe<-QuV&XoqZQ!i0^Zh~ZrlMz(P|jf*AYP! z=d>MVY525?R;M`4=lr$cF3L`SttBAmuN{+3us+2ZzDl91)?W$es?7vcC7!FF-9rs9 zgT8whX5B==agd9dyIPZB=CV7#bvIi@%QOuWbRv_xy&`b+h?v% zHbF9TU4d4qQG&rD{aF;JNL6oYd=vLiKEZ zFm_m284p$|ei=e9C{Qk}`1s#FUguh{0f<-#R`H5Te;5dl65J2ThRH)@cQ(Q+WfHD$ z0v}lzf%T_dzRA(HGMb3P<-pH~GaeDc?g!5^0IU(7Vej$E44-2-9%KJ3&?;pJpl=oG z1E}5uEd54?N#}#9(M#ON!WJ^MF|ywmOpRXRp&)Ty;v9wOCGPVeyCr&wNiy#xItqG; zj)GpIqhL?n&Jx;+guIuy8vI-*{kL+am+0|YKM;4)V;&+NJL#tZInT)Btp*-Eqk?TH z&v@O-b>y8a&CL!c?{j93o@9rI$&elSRe<#1*@fCIdx~xkvRi%+Or2k-XzZC?uk6uQ z6D`>*6VJJXPi=SA7(4`&q)Yg@rp+F?Y!h9=FAR~j@;nlBW|J@Cyy$X^-gp>LExL@0cU=GXceYwHtY7lSTctB1ir8EXhW6Bk$}` zKk`=Uxc|NnDc5A-`tpKDd|$r8M8C=IC4GL=Dr8^Y6uKfa^QTegmNCk20aPfW88>RCwZUl9nr3XCSOn z#^LJdMgVej{Qx<-uh9rH=s2aZM?_LTBFQ%rOu<65wZhSB1|eLc^AP5eN&#|7jRREj z7)=`KX3K?mo`L6uvJpuK7@P995OF1awth{4-$D3pk28Cl0bK}at$Ni3hPxHGbq6|! z`gg_Sh;HZ;#A916HoVpk$8Gfv#JaY+>yzH0_IL|{hqijR(NI7oB2Y>mWqEz;w5+mzKJiR@Zr+8WwIq9j}7#o*$6YmtJz}*du%e44 zNavb447z677~VBI4?LV}mW>g)W<+tW+2|}mGF-EJfaYAYPn3X5%VV<%lCD|p=SV=m zvn`-1@!5-AGZcE2lo*dk&^uK{rTMHrr7iA5^(RYj(Xu)^T2@C#%bG#wEvqA;WpyO9tR%rEcZlXJYX+fNR!2w6 z>gZ@$V>)M9&jBB^tlyc#_6RNOUOynWG_203egiZ!s)n`!Xmtnbne@*0>GMKlPYoq_ zl=f7oSe+?d0u<-c6#K-00`u|ycBDp2>a6I;z=K)G^MNl$R@5jqkz(GRAaE{?!=)7^ zu31sTEqx5QNxz23&Wf%!<2afqNh^9TxHv0%2cS9fXu^uFMXIqCz05`d8CJB+l0MY# zMb-K_jY^>brG(yqHZ+8V6rh9Te7^$&dV=As_RPEi{X&JL0WEo{rUA_+iwvkDCk$vd zqBEe`q27Qhb!=UHGm-zR5tY(NdM+7p-o z?MM{=a|U#@Rlowfm-JhNHtG!MsX%uIbS0o!l8x&OXm+SKppKdb^mR}>16pCJ%(c5W zpnJXS4QLGvGoTLRD;Ush3~xY(gNHMq*%*-lC5khk)3XH0FrbTp<_ze=N{wTi*`amMOR*n>zl-a|%9?%PwvjBg<1xUfltSQ6Rww{;6`(5dm`)I<6t|hOd}sH9=`#8kQ;HOIB1Ls@s*sJF zsS4S#P8G64GgRSG%?wrHWlR1OyL(mmO);nnH84yS90pY(8^f!@!LNB$$i|3NfhbND z-p&#vLlq_h&9&wgO2F3qK{i2B74BC8s=_uvRpPU^BUSJri+&Tkw}}7Z!A^R# z?SXG|saSVr?xg2sy@voCKMvREbKqX&wrAE?!ujtM;t;LLf$S#SR@wDkeV^y?oZxO? zUd`>6jWnVH5!l^{h>P5Q%f_1276e}|1w3cEiTIUf=p-gDe>Pcn`qaq`1o@ph$stzO=5_B6=znwOHA&`Y zUL6HzUL6HzUL6HzUdLKOt)Gl%UMGN`8+~k4&YaEhc$L6o-ONMSpNhws*W0~?Q5NxbC1hRAMU)6KME6H$@_n|a{k1~!`j z&5==t$O+pS$e1?x8MGz7vD&}}7Ll8w9yS>Rql*?ze^$mEj5PYF=3pe7EE(c%8^Cgdk-8s8gAtFo z%@f#Qq!&@5U$xA$GT}BGEk`}>6Dyy5a(kNH0$-^i?rwK!A$R^w)!-Uf3S8X+UpAWW zpOyi`^-tLtQU62~*FV)nNi6U^05s=We5nNNpBiKdhps(d;4A)w1oSKp2UI0K2T}jz zGU$!c?LLEh$+AE!gC~O0WiT7fXK*<%Tn4i-q6`wnWpJIP;nT|KfFA^!%ivc^zzp7! zO_0oB$)`Spod8vd=bDwl$Bf5&K7%c!0zHqb!BL=e8O%oW8JrCam%(g|D1$_C8GJ4) zt&9w=1Dea=>q@{3Zq6o1X7E=fU=23=j2V2*kfRL3Z!kSy3!AV4xl&!$gQ#`wyIKx1 zgnc$g&IfP?xn28n!+g7K@2aNjVSAr&@d|W_TQV`EN~v7kFMTxE%F! zB-ji8R4ZI2t&onmA?{Sf>yup0nJ_?@)Bx!!_31_jLDT zPyq5oC|C!XxEyn!7QG!dQwHX&k_rUMI+=sp-+wQVTHrn2a4t6%wSK!1^p!#({s23? zWS513SNRavd>d!5cue$ai!XZ`XEfh2K&g2a^eAA=l2YS4+U|Bt^pW=HkBM%o2ShLG z_kVaw^jekRd6S?YCD>RgO#KB--KXkvXQ^M1nR@mK(b)Vgw-^dl1;-EdZ0brl2yT=q z4fBHf^PdY*mU5#s`zSZ4zra5|wYpXie!O!n#@!@~&c)l!xjCKk9qRtC)DGI~7rRKf z`6@i6__hq6(nr(^+AnrbB}XE$4!Pn!*ikFES>C-^f{-=XNl7m{`)pzhb^0(z+{rckC5`Ww)?M`{7;)D7d%fq8(A1~j{8t)RQy zh7F`0+O&Zb!q-&lv5JBbG8G@!Xup%zSDAeEb{K@UbYviOJRQ;okty@?@S2H8E?xt1 zf&0idw8r+u!q-hSsNU|ZvhMQz#@fMQ&EWamOR_S9~?N<3Sr3$?x7cUfrbu zUU5DARHfmI-pa~dIsg@P@8{+Q?boZA{LD>~X_-v8uXfOBdXC2OlsC`ysqK*Z7Y%0n zjEREVM9QaB1YIuI^5B8s^$6(&sSPNe39qcL9bCi0W2aD0w=?&Y61Ye0M(x!UFR8I(s7HjL zOh$i#M5PabP4RZDg3Jbd+2+h_&XjkrG66SX-JiJiq%913DF*QlFG{Y6VBvZ&!p3j|76CD2Z~i zAr;4g)!j;tuJ4IUGQxdm-6*tH26kyixX0cp3RRh)HT$U`=n9iL+_^DAJJdNCo@j%J zqLyc}OJ)!bxrnH>92%k=G~1rXZV^FYBqMg+W`uSsVgWU3=Zdfvv)vel*cbuE%LO#4 zi|S(8?NMsLo+3wU>6YyUsarwjy;@4I`elW#%=fMpv;lfk^a&_T7XCf}t)6hYnLQxI zAlQ$Dhu89?%?e?To5v#IrA8u9bGqd%@2(Ob5HrhxHnm_fP6zmSV4)1oW5y0LE)bpJ zEfbH(WvdHj3skd>W~23mvn9x>v#2{F+V}{({LQ4v*(HBUeG{N9Q)I@-w_RLZd~6T$ zfP8TXRukL?K$>BN!?l(UWw{WkLm~!!=3$9Plx0We0FHS(!|v2B=vALJ)7e!YDzsgZ ztGq68g|hmX?XHzxRIMLIgc5|76uV~O4; zwsL)wsEj+-r5*(TP`P2Zj`Kn=x}PsZHL7)@T=w_1kpqeWRuQz_cpR8PlNZqpifCXj z2PbIoI3%t)n%tpr?eK9JtqoZZXBn~?9iPY}9#2SQ3y&jMFK8&fCtyxSYCV9*iCK}> zO^ot7;E61JvM>x zd>?YUHWAe6c-I(_C-!8nflgr4!ueWJl#iI?LSoFx`=Mi*lG&dB2f7-yIO&i9TO zCKl*nWV9zgP)ay(8I2(^s#48#9c(IBY)W4}050v5- z7CCTn`_iC{!IWjP-o@Ur0M=;A)Y54?p=Zg8fPdviA-*;47i%acf0KPr+&wh++PHtV zo*v*DK?~st|_z4#JOgZRmaM?MdaAlw}WM-p!|$==0+KGPBD& zx_%s!==h8YMp>DrVs}dz&B%@T5(6urYU8MQGHq0ojBt;QUJ-UXd(ek=o(PT0FCKfT zg>i)%54_?*ly;yQ2_|#e)Z43l;z8fOkqW3$+|N`%bE-xmG5CthtT{NL(V`DEby5R! zKx|Q4L^(;;%z;ics7?3eo!v^jo0fuWCb}LQ*Q}VI3?PYn<%Ij?fqYpumqA-uC|^c9D)t$b&&bzl8XB>>m#-2P6@hv4Kfc1`LYL=-`AI z9pe4Gp;1A`l44jEJBY*iVBHAJ^6}nWpAgq2%{7K*JGAv9{Sfa&-?fcmIdE*`M_}dw zj`5OGY(M_8xRc|;W@4u}RO@EO#)`p6jJ;G~)CC_;i>ro@;}WDy=yczojQ9QH1n(zK z^c|&*yVTe6p5kQZDNb?C2vI(w+=ax0w5j`{Cz_Ul_y7B@Nqc}=)Ebs?z3jfoPXeNL zvnK(Q7BA65#nv;?L1~4=F`2zo9R7dRMjqIdGPH?w1kI~&(EvAran>ddam^Kc!L z@5W*tiM}Zg+&i|{$ab7L4D!shyPh+S*~fQS`^FvCeo@z~71J#4bDAq3HO}DgMZ~l} zxyOCZ0a0?vKF4)fY9*AIm2TaYvmCA)iaRXrVu+RKt*oo^og)W?X71f6fZdZBA{UV8 zo?LI#*7rv3d~ej=H|j%tTRxO_%Jom2H`ENXLphB7Q%6e^dI_i2VY-*ah4q8s1a#4yXLbBKQV z19ON`CzR}@VoA^`#hF0YWB|6NCoD0{SZ^z|go08J6fmuvdVYL%*_v9^-^4pD^(wGJA}XzQ@3T$GaEWv1F84 z++$!Am`+(w*fspl;TX4Ml8 zM%=`(yVIN%G_eMzE2aRuBpwlq@lb+AtZ@w^7O45%TwCMfl=;HchemNz!$u_Mqr^iV zB=>(jy_%dkt>v^N&*wGXPNpr=*ArA#x05A@Vs+|^?nmS3gNjM6*SN#`g*K*EEh&IdTIuD_F|)~8`y5EU8uRc0x#c5!ju~-Sv26?%_ag- zP)vJw2(57@bffyHLzZCU2AXISWfoEIf#`fj@0r|-R~8SVnc`l4FW%l!xE5a1Nayu& zA1ehdOKxk6_lZQSHT!v;k9US-&ceE}p$=*}Fx1^(S$a;9GRKClGi~7qp^4$3A6&-6 zK`b@-wXMW}FlsJjo|wW!xMz{*&l928U*g4c@*bQyAJI0c8Z4A{N}&3mk!bsvQ9Q0b z#E(!9jYrQNVnmYzBg&{IRFyi$I?=U=+%Uq7stz)ALWSmYb7g00hf}Q}=&}Qgg1OH) zdn`8$H;uV9nIj?$R5D8sgH9s>hA+G$GXsg&BT7#3I0E$+&8q}<_Q!NqS|shIq1tmL zssf$@64p?kET%`3vcOS@0@SdOS)Vw_WdJUN&vTrCVps9&uU=vON}rV^uV~v+_K7`*kHJT!C7>%;ta`%iNl9R;Vk1ge3*uNS$**h zkM+pSoxwq2rsFx96OsWsGwTZ_(#?@cePIhYF-ptVv+EB>IbNL4iUk`T2l^EfY@mrb z#5IIraw2Vy%pyNIo|HNzLUN_ggorXW3imQ$09_-DwQ^b%YKkx}3LvRtce?3;w#M;D z9%Fuv$!%QCEG7kwW5p&ARhCIc){pCIloa64*4wJu!Au&!C;B~Zo zY%D#zupxv#L%~`E&s0VBZO8SlXGMyIl4o&LxMY!JT-9mRquS-8>${Q2*%p9uZ~^B; z!g}Q*uXE#2U)s~-AXf~;n-R4zD;saGi%wm$<#@U{1mdBrY->S>~g?t8fvb zwHszZ5dUJCi#e$6iXd|wLMJXDvhBuei*tMJUQ#R z#^b3ZS4&HHi)B#sYrOm#jyG+cFB|0-YOWo&$p=9baB^9V$6e6J|r>t+n@#k zxi@`s7XMaenOG*?PLxPgUKaO`Pmvh}$9GLcoC^smXF*)6c|UsgrD`lbkUExUeCInU z5ZHZa?3me)3|`#54j(^`AA{f%W!|pH)ul216tZEd7pnAGg01V9w)qgq?Lt2HAt(#( zKKQ~vD+crSr4Io{*CK{|g^*s5)R&w#Y!*?#kESu|bw!><9%TC+> zy;1pj_8;sS{C&`WKgsS#jx?XS`?y!F@P5_*j(wqPEab+?!EKY+Z`#8TZ1;@4rmQVI z)V{s^z;f@TwIE||)Y0uV@rx4XP{w0l9e(W>`(n*vUo0N%0?Bpa*z4*#&jT`tbS>fm zVAk*!JNY89oRjD{+2}TQ;4+7`vEv*MY)Kxw-to{DBRfB4J~&D%8q>FpgFx>y;>Nk^ zFd{Tg&5d)_EM|mbGmp2#8B$<&+qajPNjwHl3>6NGG2={N=TCxd(&@&UtB*+rck=FK z=g7lDuhPZ)f7FMrUW541En?$5HP_6Kh<*NeJPcFfVvme%fR-2r!%08&sBFhN9tFD! zX1cv1{m?$XckG?Jq1w^0Cwq*dMsq%WV)hQz4S3Z|WmL(r8Che+Vrdq{X3+f9!f_e7 zVIK9J4_|9ecQEjchqIJFG3Jf6YoKw58Rlfxphy4&c*RN#dRrPygPK;i?%3|o67+IVek96a4YAq9+QsS);@1n4pumtQLUAH|x zc35<*>QPAV$>GQ&_bEsQ#2|9>WZ`wUN` zQaufNV6!66csASsw{3Zjc`9zz(&f}|&|1HgqzH(x^*nbg#%OAR(p zZE=!Zo8c18Dp8jv8NpLqmhnuC<*sbe^jBz!;(H!R@eqEwe?}3}0lOmMP_E2K8=oFe z3_VsUXU@S~6$=~$t5Hz?W#eebvL?v~6jw9NMCrTnCbg6WxHg#!U~{zTO(f&5V}YB= z0b&%Lx@)+>aj&+#S$ z0kXh2-t_&R>y2)6Ats^=yFJTIy+aNONWJm@WA941QhoabX-Zn!Ic#Eg%%Wbl!CZRabJtexQtWW zm+}8Q=e=yDKtY*r=KJFe&As=%ch_^yJ=;CkC}*0*qGmje;st!jC_!WTD@iXP=mRbY z1J)rLTld587jb2f!T$^AdkV|uq~{kEoqXz$@`^d>78OmOQMjO_uxxsMS%JBrw3O@RQcqd_obu`UZgYyGjb!cjiy@-y`+*InJBc0SaMD8FR-IP;Dy~3)yr*-Y9;Z_IPRhvRb2EEi%v(YRk z^=$g3j=D6c(|TIh%M0b|2<3d5A38^?7*AP2wX(PB>|J-!7A?JTeUW!&Zh1~cPNB=C zHI{qVx^jwWuoL|=Yw6`BBo&E!A!=$|Z3ox^{q(!)PeAkSl| zv-yE`7ytc=|I|zVOZj^g|IOt;QuAa^otK!EK0VH5lladB{)3M5k2E9&)zL@VNKR_f z{aQ}S80gqbyZOvRw)C^hPM>$ja#)MlS=2h!EFrmbIKD* zedAOA097DerZk}Z8(%0c9h5Y`k8=7bNgc{>4seb}rK+~dr1CGFW=0SjPS}I|vxxtU zj69Pfo-UQgqiS1>cmIr5xnT6d+zc%7(4xYk4ah4rL+iIn5>uM_=M4T+nc_~NG|fX5 zt@7xx8u|SvH75mWToawBZUTbx)K#dr8L11@e<%v_lNEIxqBJSPj$xd>7ie*CaJs-- zR#8|UkI(sKW%-pcL}tW|*)7SA47v`JHyUdbg5V=+drsZ4RjB zo^-rsrh98b)Kwj)csJK$5nD(-UeVIGQ5QE=Sg5lFHBo1O9hT;$Dhm~av_O{YK6OB9 zmPgWH#%W^$Ts1u{=6rWaczHeLxDHH))>2Y-HC-_9at; zq%C;&C6m9NN?YSA3Lz7%=$p0`wIoy&mWup(MRioFo~FcC#T|@RwO@V0)LiLnRfqPV zV>BC<)SOc?wYV*!v>x=Z&vM-blfBy~ZAppJgRIsH#^5wmSuOiN?p^+U0G-V^U|WI z3lwXH>l+=89`w>-mU=3)+(KQ<0#^<780**&O~8gTkO6aQsy3uZHKTDg?a06{MXtp~ zoKR0m)pE5tngf-NY6-+3i@)FHYmh#}b`jTS%|X}IXdVo2d9^z?%avJFgm;%wYq9nM zYFVo!R6`dv1+IxeyTI#MhL9dD@hi#;9$itbcN^$X2Po};M-a6D&g#&QtqV0z5$|MI z@n3Z2UYJ$zcvn&a2sS0Oa&p^N(h^(Ip*f_t0%+E3@jd=Eb)kb#`!t(6^l0?`rz*`O zeZH6k6Te43Cl{>(6MIODj0eEPU(+IbZ;9)@I+*b(HsNj2Q9Ua%6*>-TX1u;`A^O8p z?qp(g$3k_ylKO3`>%OBv8PCSQbNSch0)=#)3%GSozd09QEmPDC-qn8a`H{O=X+ruZ zUl8dfibc}q5AO?PgH5sIOtDXxGIatiuyJ)+u5+_9v&Yu0a^+D;gZ3pIqpnqz)LC2V z>ZlU<0!}Km{!&NYiS}A=@p)(DFg2DS@Mf{0)pT54zU33v=KPM;=XnB<_Hzzme+_C3^ z3RN2m(blxP!(^h%=$|@$HyU59ia%Gie+8Ea~ZR6`GdyUk)6vg#u z1VOMJxVbv{%f$V=g%&Saw0?oC#x?43soDaD_b+_S2B7;Dtc_59j6a_8w|Ifdaim~n zRRf4Xg90jG-)vXYd!q3z)B+L`Z97~~&Umb31c<`Ov^LlhO29}bUR}4)p!{|!ZALz_ zg{UVa0Gpb&8+tpGLcD*kv5Tl?#ZH|8H3=i&J*(BO6W3aWHw4+VdH{6%h4Q3-Jdv2P#5Ij7ZD1Rjb#$JKDs(b|Dme3{kcca)EUp~nKqOG(RZ=^M2NR6i zDhn7)?duNFi#NeUx?1;}S}+yRsYRGK{*_g&|69~zPy)5kK5h#pquT=$@T~gI1j2Ee zkkja3m~b@glW=(O{jb_%g>amxv#GynWxoyK_^Ap4A#c~zEzBGCLSw_8E*tjwfJ^G) z6j8)^bM7Q;qPdz~9h9mLIsydNM0eG+04m;2V!D1y4eyn2Cz)TRZfd4-HgEO#XV0BD z<$}r7%}sMGF2~gDv3XPTa(FBAy7MN`e9t*~Qzo4=GjHsQajw-_d1&61mp!>)=ZCe= z(KOABo#`MsyZ!If3(nwsmF>f)bV-r@^e z==WwSGB*5vyy0K0LUN`bs(CpsR-27YexRp#krXgD@Kd!pb3>+9f`Wh=q{FyuiO=mt z{zrv(VdSs$*>W#(ehe%IGD>k`UEsaoG6EwI+U zKCoEClR*$q9ENzZ23;N=0=q(PeN)kqj5`tS^`07L6ne=NVz%{i2rk;I>VTtFAB!|A z?b?t4G;g1Z{PS@VH}EKR)_N3W?8Muve6syP%qc1?F62pGhJ9fjs(V0b$?$GN!COA9 zfvc(fq;B69nvKPRmO@;c1NB@HgB~dr61rNWg(t-kZ zeh9Y6vlxSSb`x7Vv_SffAJ0TGIZY6_I#iD?t%SVzwnyAVbm-f?_CaR_e|PgBLVBoP~stmcV&fAi+gXTD0bcCTfiKtAVwD#L+ zj?GZ19N~0nE10xR18LJ-Z`Ec`hSnfAXT=o9Re80GUFxu-bmd92!IXitvF7Xhsuu9E zjJ59(q~$-b7Grj*_D|?7Qh%{)Io`#t?M3yALH@MOE;Wk@#bug9ClrC0RKs{S)(tYl znvkBT<90B^^2EfEb6^7w7z!CM`UQALUE0PL?pD6K)CmlC&&DNlkO*r zrqV`}=KQszkP5*EW6`C;2BCD8?X#8T{DFOl)6^B8h=xsirWNF_0(Q@sL~E396F=t_IWkU&~gx9!2lLR(U$gR-LSf63dYIbhe6@f!Qk8quLq2 z8C#|Al-jS^y@h5%;qu?jR&|hNh>?&zuy(&yJ;tW_YZm5ziLJsd2#V4PjsF$zQ@U2KNp|-V>wlS$DekZn5wxz}_t!ekAZxN`rnujm*j zT^N4aM6g4va4>)lLQ-pMEd0Bi|16rI4X7A01kZm;3ZsTgYl7oOJ!O2dEeR63eDZJ& z;7(HCCN-sC3re9YYBXEpy(m*s*rHA;=q&%zD7_t`GsQ*0zQmdVT^@g&5>8nmzrmD$ zP%#V=X69LgVX)rOk1 z>Y#x_f)mWXonzvx=OS%8oR@uGcGSPFUy`ig~mB)5SS*K)dDbsR_awk1UF6XHTdG4aekcX>V-yIi2V%}}Vb zlY04ShJ}XMXcC*1K9`EG@o{?3bHQxXUwlyW@?0<=T<2@z%*VnSz36k+PRVsSCXb(z zy@M_cQBNmjI;p>nrrT(^jV^TFl;?6ynl{Bz62l6qNTq zt7=C28cBaH=@pXxLek46{SQgkO8U#H=2fgXU#2KpU}bHV{ptX^`Y#`A^8K+M&&vUcUzuP$0^FJx)-U%qDQ(S$cXRn#;d z_?l{7N^)!tXOW ze!DQFT8={Y9+g{psoGOlr%m`Uqt28<&7xnv2d3i`S|mo|i>q0Uj_ggui2Zg|80mGy z1n)J0_2*0?L^ePUBzoG!Hu;8ymf{f(Wbaljreu1!8cH|hwx~Ab9;vpm$&)?mwBTYF z%9onh`{hU2S~=ZBB_UVTyP`$ou)C-b&q5I4QpEN~x*Jc5=t((a(arrS;>JS+Hy-xB zK}TVLB}k{zX;?oc&Fu8w7P49Rg(S9v--Df!x;xRgGIb!!qrJJmiZ;1_p_Pub!8kwH zy`y60Q1~+P4wnK09)2l>PHo^{7zE^JzWCsYpWiuBP-%l=6!kw=qcN}#Zw=(2jqTXS zK?bm`B-58Z%NYAKTHu~IIV+1gGkLiZn8Oda-$BqWPP?ON_Fj4TG}QS4UPz{uvhjQX z!2+2e44aNDMzw$Wn$ioYZv*Aq29>_9tyryHxT@|ERI)~OQ;CfRLZJZKR?YMAFU3hi zK#UaH4wNTaizVYUo8bSY@bvh7t&QHgjm(ZfC=RjTqjD9Uu9;7UCBs>F8<>ab1Yb{O zNgX6weAX%?_bSjMPV4e;xYm_Xq$UH$af4ZBb?AczxWAC3e6?<`uu|lWz={|3Ej6*< z#*YiRdrM6%R1);UKgjSqgS{6Ix5~rYO|4#Xy9Ho)oSWgw6$dZ602_lBw*AMzh2foT z{|qh=*OLJ*u;+A-^nTMrM(;mKQob3iihXda4!zwE1_ z?Ue7Ne#{aoG{c_@k1P3#!R+B`>3BQ%i&vJKSOFDT5q1XnV40T*ES{pCGWuwk4kKHN+?@gh! zYpQHZ>NHoyV0%`POFga^zTH9~mHhc#Rkl%*=gb3D41U|m#{ z9+yxfw=XG_@h^HS*@ozYr=baqz%;WQV%?1cYHeC3J2S?h8ctD*6Dm(d$WnvesR4}2lQ^+ zjX$^74Y;!z{U}w>;2PM-BZJ~@vIUGYmT%frrnR&)B)zI&oeV$=)@ilI!VKbt*%(=v zhxCQnD2u#F7G{gSFzeec%=+lUY>v)9%HkL1>F9%o-*#bS;T0?e)<^9Vf$xcr8}N-Q zYpJUS9~mdCyXVt|HvF7JUK@3V&z5FBABb^VjlQ(6C-Js+YYn3dxHZY$R@0K>Qcp@< z?9vu#A4Ab!2U~ap9HX81b=u*%k5})8P2f{H#*D8Q)r5Fnf5FF~=c+p$nQOoy5PhmL zuXnBN6`!g$tKqqcvRZlm50!b6+G<`&q$jaQXC0N90a}I|7gu}-zQ-^p>8d{s8XNV-MJS@d~T3DMyVbawL;I@!+>^)Y@bu+cFdDlpSAO-Q4~4^^1+qGVE_ z7)?=06Ll4gl+M*xn_UIjc>85Fn1PztRhu1fIYL3R>STOaTW!u|g7KmXtvo10HM2P{ z8{aZ6ysToI2c}pq$K(5C+|Pm0;WStCJRTp$eO^<|K>C(^`B#}TJc`W(BN@*Gvq_pc zuHWootv|R&WyE0LBf*kT0+xt%JBImt;eR|l>1(T-*P)s>Wd+wryOFN(%DyQhU?G6J z%%jn}{Fd6plE-Qp+B-aQR&iV>qkcz*w%SOums9k$No<|JRi1n-Z(T1nf2`VE0EY-k zYY+Pk$JyAxbjR7)R;`mX9sfOS!#Bsx5t|p{NC_xYn`u)2%q9)4jT?Un_8!SZDP*bY z)G3ob=jthm^&P)keG}WQPd39SE1`~LZWtR%RRYyJ@b$!~{qdt7k=V=h-FkUmn_l*i zQN#TqN{~mz4;$9mxLGtzYH>>z9;kVZ<3lR&UV2HnUyy+ zi;-(8L)eM#9C3C9mg~~zYibaJ0?3!hqVK6rnjduKp3D0XPItV4<2n}p=gOIggGDx1 zmR4sxqOQ%EBd4O?SHOK@2Zoh~Xqyt$M*HY6GnE4)1@Lac!~1-UbI*Zm>%v%ihrIh7 zI9PtfW7wf!^;Ei3IPx7}+d0j6@hZ4u{y=b62{BoO5fu-b6tLe`jS=Mm;oY}IYQM|q ziF3@Elk7TKSSxjHS8Vp(2;;XtGjBKKuW7+ArL?5bDA<#?z$;i=4$D*zv<0T0d$G8N zd$CAi?eij0IR28vv{^4_(#>h^+#X59MrO-BEnQyOFCn`7#;J8}bg?@YmCyY2U2s5gqU@YHcsFX~jMS&kEr!77V}>VG(uVN1TS@%%o`UJ^ zq82dMvra(fCB>KyLg}?Cq#LMngiOa z5>WyG#3XYW`RY;$rtMyHrwcjgS!G_-0csh(xjExZuO=KU( zI=sZE4Ap7aJTAa-Vm0YwY#s;4mZWRwX6Ba{$EyT?8|`0t@my#P=S(k6ILa5-;vN-( z?-`rr|0vXj!T1uBn#KCM?;-PAk509(x@k#ZS?W6b5Y6h+ruV$G4sKY^JVFRHk`)X03{r$`&cITnap%sA~{ftyEP1ji{2Y@P#(9CJ?G6(FA@1o-G+n zKkI?60|Tql%_f#Sp~~QcGpx$sjJtS51+uK}Ga1SZ9K`_NXo{%&u#f8MJ{1ZBW}AP6 znu60%W;C&FU1E1$Azr%=7HD=%X%Qs|y);FC%( zsJvA`ASjcJO`h0rAVKS2n`JUhFs0<1OlO-?#+XdgSj&aEVmByOt;A-k1z)XR$eZ9Q zRs0jzv)+##nR#_yO48h|7t7hZbPCsmSFEOIliYNFjqngD&R|Mq9s7|%8;`d`KFd_E zHITW^#ix&P^r=RU&I$t+sL*<4IO+!%GXU*C9gpM4?4SH^(gJ_Q)bY8iGaQA5O9YI# zY9(bA|J}}iq%Lg>Cuyk0>QIFy%1bn~g{HX6vu8Sn2VCpQi(Q2Q2X(;$;T@ufnTcUb zB7`4bSbmT8(1rdbl*+TWQcP{H_^^Q=?txQSGi^)q>vA!*r%T*3AVQaD03r({tV`tS z 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

    +t&^GJcv{?Q?kQ@MUggPrW~*Q&)m! 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 !$6Y?MpSL&UHYe%rYk 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%0Agy{nS-puXJ7G;Ix{%NRYITFNVP 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 H^85b+JlU8z literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/Pillow.libs/libwebp-d8a3db66.so.7.1.2 b/.venv/lib/python3.9/site-packages/Pillow.libs/libwebp-d8a3db66.so.7.1.2 new file mode 100644 index 0000000000000000000000000000000000000000..7b9bb2bead31c2f8e8ad7f1d74fe85ed6bb3e1f7 GIT binary patch literal 641712 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�QsyVf}uX!c11&**^0eFij^b-xkQX(@;~( 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 R-&(!#wJ(Ro$Ff7@{{yottYZKG literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.9/site-packages/Pillow.libs/libpng16-213e245f.so.16.37.0 b/.venv/lib/python3.9/site-packages/Pillow.libs/libpng16-213e245f.so.16.37.0 new file mode 100644 index 0000000000000000000000000000000000000000..b9ed0f162fdb5116d338158cf32a1933950205c8 GIT binary patch literal 283968 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�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

    ;99O7@g1yhAjc0v+E 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 z zhjPy#a3@E%R-*`0OIP!q0vhT&gU#l%c~aEK#K-rI|7KXV+u$$Hk4&V7Io=(ftBicy zytIR9it>tV>%7XQKIb*(Jo>lLWb#D7X+rd1H1i-d<7+^e$-9qC3g)BTtCYun2ljMc zxp=Al%$17o;UhTcU@xAFKbc8p{gUs*u&ziMACQq>7oO>eKn7w-&ZpbA>Z_LhJaYm?4Z$i-^ z{wkQR?Nqw>b}}@c4zyy~g4A<3q>J2g2vRBg7b#w&=taCNitgrR)fj_IV|%l(gwqAP zewV)b!V@$pEV3Gph`|~BG?~X!hx`enN_#nV`3V<csqcf=YmIl!~)So(vmiS*UaRAMj?ZT#hbfk(3kzHXz9 zj=cq__MbQwkHWw2KqHq+sx-MrV8rUp)4N7n`WGT<+MK5MoMkIo6#5GYu<=TlkyKTm zQ_M3vF+b-SF}>W3ctO)=#I-;e58ls}MyA3-Via*t8%#{4uYQ`E57*Y3yfrgmq_L-+|}32ni|w(v{yeaFR3oi z=+fcSft*t_8J5TUrHk1c%%PU5mN(zdq1iO|lcp|Uk5I|>m9jIPUDI4HJ~PwRnJ&>*D~etuo6=%#}(d+Hh5+_cTURENvcvHjI0&yQ1dxZG~+^_nR;TYu7OCDv6y z!AH(i@V+Sck1zNUPRLO1+=s!dhOmLbGN35t$}>6OUYo6B@^{5^C=his(XIOu-3gpy zad$8q*Zwu?#f1YgtiuCdzb$rA`X4_pPWQf4oeLQ7_W&)ok7^P02Ry8;kfon)om;>_ z?2=0^8%mGqOvc(H7YT-uJs(hkhe`q_6&SkA3gf;r9%k zVzFC)D?R!L#5O*{A2uq-?K(4R`Bgw-XJV2Z4VD6fA}jdD0c^X`(P+qM< z+uF9Qe$F=?w&=pK9qLv_Cg1p5J#V?lx8YwJp!9A0PwDQN?K7YK_Gnk$Za$Uz8Mc(H z%G$`qCbAn8{|P#cVy;5=(5=;PR+y2DxT??1$`f79#(|3#rjnWDkPjcFYy1r` z#U772!Qt@OHc(E|3`c`(NUJ*6Vn3O_^$*-kn8bsxRe`1HP5zC1b$vE-bbd3qG;!O zFED!*1g(8lY3^@U+bVWWXZ(5?J_5~H&GUh5{_9BP% z36KCwei)DRzV(6t*LSruhSl1Rl^)u7^^9x3n=Z-`M_hZK?BCMG*3qyR?thUP_<&o^Un403FFYyJrf0e=lpKU zH9yD>{qv!@(%`eqf48-bQVtdGR7iq0`WgR8>vDj?YndC8p-2L@&LcpJBmE(uj(%zP z5nVPdw@bxGm_NC(VoKgQ#-9GR8&;;ibhi3jo(0w)=KdtVUpf9;^qeS`VO|8mZ}clF z<-9PtcKq=o` z)la49KjSlkX{^}yH%c?@!z<4xrczYy+04Zx$D#b-YZSBs^QuKQ53WP7x+@w(SV49U z4Vs;vf5mgJ`dH}%YT@`?r#EB8UTaO7Halk=AR1Fde}n{w1BEP-EuBShe9gd63nH-U z$HrEwoEwkUMJ9jrPryRiN>M4g4!@%L%K>(%dB$HR=$;}kgP~G}gIe8q&^w=M2gS~q z2{xMn%5me^c!8QQ&BCZzCHv>!`byQ7uF`V52Whhq`r=ul&zn%2F+*;&i~-rkBC$%t zzn^)IxaJzAjunN=+tzJQaLLL`MS(U3l}xT&?BA@8Bl_EokREVp-`wVizxxf<9zPI& zSN7RBn}Nf8=bdRjUu=2C_Sryo5y11E0GvRat&fe*ksVMIbn;@d#r>Rx>Vp%^#%IJ8 zFjk((T~=*vR52OaSZ7=+#Ljh}DvC1IPZW-;8KpW&P0kimWDtnh9*1^)Ku-VtM6+*F zQ=JUq1q$mK`P= zX<$c0$z|zQGK?b**RHrkS$KPQMb`%1&W$Rlpl2UOsx#*9_{&i4%l`iE=cQT3Dh{T5>4i z-`P?n(}xAK&Nm2V`gIx>lkUL;t|P5AJ)@grHB0686B?o>{R-~_yYkyj_>dM7Ia?NIM z=dZ41R;d7Xb(8%RFHkK1X0uuhQ;n5Ya-SO0>4jZPx4YpJWy@Q!zZU_ zJqm6`nVsS8VS2pBPV}dn7oY=8Z9iS&_5}0XxsSmoLV-PDZ!q#ak}+>sJ`?L`0mB+H zY&2+gey;Ia@j_V*Jiaz|{w!_$!%{tacWCuO>lwSFrF)i?YPH9!c7zA<>O-|?;h`mjOwfx8fsUe&p91-8feo(Bonk$d~o$kRl z>3H1|+*Z#L`XJGy3Pdw@6e0O+k**w=o>Y)&(CD|tyvFva9*KJ8Z!$%H^h%3U71Zo; z|Ef4vgi8KKN&tW@WXI`rK}*Ki__Qk0l3|P4IG@PVV#`{`s{MTDJLPqLPTumkDl>3i zNbA@dR&$l>z9L{q&SP_CKirQMgXb3H76Cm>-g=Z*KrWs4#YfkuIv%^MX2QYr=(SF9 z^Z*_aj;hoLg|u~HirbHS6c{;ShOR`;q)NpPSdQdOEFVPBR`iC0aw=nw6i|mb&=Ag8 ziN1HXu*ZsH1AKJ<>F9Xyal>c#EPsX)E4-aN=cb+G7$!@u#BQQjnJcN+ehkf1y7>3< zW9wTJTXbBwx%IGZf)n@jx1y3lju;+4lzo)vIDgs$`x3*Hj!#=H$Oe&H%7vMA11}kP z>A=eda<{#F;1vU}9C+0L@zYpXqPeQBAK0L*1W~tMg>Z}^t6uQ314^iCwthZsD;3K* z)`KhG2)N`y`(GKZ`C@>#z<8&59agVivbxPV#V{91qn_F(=es{J^s7GVwW#muxVSslc5U7w_h+8#j5FJh+A`6l zG@Jpp>GEdYZMiXJS16_tgnH?^Ak?>JUaKi-PNBX;iUz3#&bx%=?2J#~1q$##Uy~S( zLrS|}tcbctw9=!;+iIm;G7lZMoK^@uYS6SG5F*3cqgHAD6>-qBz_0mnt|A3i@v_@z+eM{nVRv6aTm_ zIm@)BsMKC{wyOWC1xyp5l+*o@xpnDl@o}R4+uVG5?_cWEi}b<_2Xcj4)#tbX?+Z!% z3Xw(hU-e>uW?gR5b(PbrA^4Q#*avNzBw5O{bb_g2<@l z#g)(ul(ClRfae4f=KLAfd5|DKXjBx|fDN)ydaWe*p4dH*J;l;-{YVdh5%K(OP-Kq( zTL9#I{=coCF#op<5a$2eRuks`mUW2X>Q+5WciY!K+17&)FD@H)7XJ?KA5ZueNnQ{% zFSw@&LAlC!jV%bD5MLjdsr$l_eLnV6yQ^U51V}lv8VPG>K zwuyp~|2ESCC(>Qh8mq(7n>?+HDE&1W3?`g4%>_fk&jpg04nw1Lo?uN3Fyg<&j zKk#Aw$Yh9UkpSqKT%d`TUoPPJCBJacW}%NLw_WOMo=<+t#ATEDZ@1+XhbcIyLwi9! z{3V+oa;qf_J++`@_u4(jjlQt72Mrc`mgH?LY)S5fI?B45c$dddU%OBmuYR#UM^o6a zI!E0sTFao5?P@eB=GhvXL2lsd`GHemE1;^HW1}Y^;*DM}IGZl)9|BfWz=RT+-X^ZY zq5x#cNNcpqhwiLWzW(>mXEJ)^9KY>G;Cvt{gOwldXKqgyk2onQL#y$14+vZB^yuv# z3fbwPj-IS!kGXC9c*xz^%(oYB=24A~lv3%^)~KpmGspV{Gl&<0Ab+@?CbFddD1Ae= zKGN3}!$KRvUIMMc&L~H+j_`7iL>~V0jAeT74~0#MVq+)!Zq!I|a9zZ~8517n+I*}m z@UjgDcF5pRM7*A*CBIWgK!i4zV210$cb@O{;hT9oIKX$Z-4>jFQM+4?m8H`zB}2P9 zj35-ZtM8~?eYe%FlX`2=@-jWrd!FY!56LQ?0K^_~q16fGIA0po#Q_LnlF^$)*ba`U zCoNiDo{RVRcuuBo^@}4KcfDbIjigDMR1NDu(p37I&v}d!SlI)Nb9cFGe={n_>ow_7 zX{o%E2FC<&OaRB(9z7A@Xr+t46k&=z&WTLW3Iy6AKQ^fPeJ3A}R zP!ptanMlLmGwP;}?KG~I=3I&fm}4{Cx3 z>5AV407I?AJ_aq$ANiD_$GLvYN4r-rr)Sf$GLwtzh31O=q;DD2=-Se-{$RS8^J;9y zrKRHaTwEo*b1qi$&e4xKmj>r3JO};O(_>Hdq6#gf$BqjX`IITHQGN`r%6qq>{+&@4IrW~g1>&rjFcfB3!Xp8r6YbCgutD#mJd z_S?2lVSHM={xmyM@p^0rlmoa#a4-=}-*Qn;NrVt*NZ)$V3cG9=leI%PVHADQeavE! zy4CmYzlEFiqFnIWLmd|}@obmTf+uP*?Qg!AKGt9tKmyH8;z!G0*ExOCXKL0iv zXvJCC?+3!_Dyi|OH<3pw7KV$gG`TdGwx}D)o zO_PH3lAR27OGuaqnPm4L8uX|4lzF{nb}8bILoX!w+tCl}a2Hb;hpfk)DU7SGuy#kw z^v+-O$S_5NdyI&wn1>U~>Xirn6SJIR#)r;+HfG01WLh%;hOjQ%JfHys>u@csA5r$b$qv|P!pbC#oKI0OnFNXy@))N=|^*TV`}GfP+?#Zw&PS~ z^@@GVI!(o)`1)w+nbDS`6veLPJ;t##kJ{Z+yU z{{>ws|AC&TD`IEc>?}G}cKgzG>yAoshtS)#?JRZH;VLcj-%!)mcLlU}Z8$sYi)I`G zi>6z4Ca$-0mX^(X8YmHpwW3e)Ic4SYpuBuw=5Ox4`)&;E4n#+M(xKG;2>>T-Y!F=r z(%0B}hfZ(+R5pHJ1RgDn8pqCIQsY-5;vXw5t@<&?H<}ZZjFQd6@M3Qiv%)7>_Ih=V zu|CZ&Sc8TEWYVswSjv7feM|QGSMxJ^$Y%_@q!gQ`c{Px$z!WiGWUZigKRP@2621=R z)_m1!wtRD*Z!2_YJ_I@$DaBjd+QcB)S4F3D&0Y(+6+)sRDv29nZz~6&rn?akj_P^i z_v1%3gJbqwnlSHVoX8s1bepO4ltqiLuDor{aK?Jbnl8%R7R zeJQzO8L;bJj4tiur(eYI`O+}RZ=IUdu^LN-DpR=6!{c^T=u!P4DyP#!j~Y-Eqv(pr zdL`e_t{g{VL6F3lVFf&PqxMzqX3M`kDzEbIy(p%W{&`Pyo zp21Y92OcSpKZk$`Ew%+A5Fasj%0f^>XE1P-cF4|;BC^OyvazoWpX$8Hb$jP_1KZ?UE4k-&=Oj=1*;61W`_`l+NgRKOUTSF z;R?+15|fnp#Mdo;hcIvP{LXY;%8WXOdzJGzGa?;2GsTBM;Hn`UBr((LKGSQehYam- z$X*z^t7q|~`6ty?$qSc-+Dg_gJ=-+XI8E{{gOIvPI<*<|{$%xN@yn0=Qwn3eJ456*P26oCQ6}pHprp% z_qMB=s3-1{jSkd7iIcqE`KO~)Wn*qkHAB@^4IIXDuIfTF;sHZeWZQ%PI>gClhr;~7Xw96^Fup{&!_LYnR4KHD~OsiC1sWQv9x6t}iWAdBIl-Y7#_{%Gs&HcDMFO zi!4jpN{>QUWNzq!JzD1u4{s|3lZdWJ{*@w%q zy^fcbGEozlW2VI_|GsEbo7DW8@Q_o^dT5){>^;{Uly`8OQG>CzH(rA$a-4JlcL}(0 zUg66y8#|$zLKDd;@pdA{9b_yjBrTprOsOm87Yh5elK0?#ky>7*0egYIUZSsOcO{~n z#t>DB9IdFaQhs)v8!wjRu2vfq?rVM7PTqada^EuZvydJbKdkP`%OTH7%UIYdvMBR7-m7 zr;bgPC1hF;ub0qwJxvN)LSdfHc?W7t22M}7@(G<{X_da_R?jV%YP(KpXde;v3j~QH zL7i*K?IIMHM2*4~=lvGfTEn-)*50L;Dy9Mx^6EHd<{MP#tCJeYeKib#l8bZu6b zX07!yLMDbV-<21v@OHHeT=k?u6>(j}%S;}rKV_%Lvi=l0(o8Gj2O}cDIx;JJT_#Qs zJRTbBq8+qMXLuw;U~)i23<8dcGuWr=G|5P2l+9U)FDjF*JG+nx)SU2I-oKt!%QwHA zzm=l?c8R~fi-+Fqh#=@>!cV3@)+kwwSnDyQ;l;Y8NK9qs0Z633Ih6f|n5UX& zCl2^g-?VaCC0+r~z{)#Ql@aOVHw*xho$aLj*8Yq(JXUqIoi-PUFF|`jJDX=JhGY69 zgiC*sm5DV#BrCC9lhh*SP*ea1{R!({eTzX9X#pOTaDCX35VZVM- z!zW59(!X4> zb{Izw^BN!KOQ|Kd*5?EMW3({L{LjiS-&X&0<(K{9r75Vqw+Mb~O=L7%z2k>)I%Quc zr;ATZ#1FG@Ml)xVC$PF{*K0pPTw+7EIn#0`vsp}>&HQnp+wqw- z;VPIIs7P0|4rOSv`HYKBcsjy2F7Ma z1NX@p#1a!7Z#_LrkomTcH~=!?O#sl?<73(dL%MiLh=s!PG?M4Hq$7ib5U9P=skjFy zZBaCu)2+;(%kOPIecUqUlgo%QX7kFJ4=UDe_X@^DL5b{9V!H5v6H8p}>E8cM0F%T) z?IAo8eA)9xg||g{OWk>IQr=+mmQUZxh}+v$I_tBJ1-fKGV443d1Fa%+4u9^-lq#i! z9+G8P0P_Z{XN6)QV2y`#l`TcuSG(L=)0R5P2JH(gP?e9JdYm#^Lrd|a_rs5xwhbBY zGX9u)44aJwYURI#25n2QV*x1OWL5=}{6)$$wtl2$=L#b?q=q#BQ_(H}nSc11MEBT{ zVjQh)ZNoHCdXX-V!piD%mW*wN+VZ=ghXs7v+@sKE-kV$n}Ms%&e4ZSw@J7iH4 z{C2pc$tS8=FxL#`=vYCpVn`;&R12Wj5}?-v`im^F!r^OIUIjg`_dt1xQakEF&3aIa zT5XobL*f!Wc!yRjcI#WnB1s=#k!PrTykRL2aM5%m0yF|tg!y_nThkA)jo7J zS7q70Z}^qU93S+2qhT6ezoF**-1fk=+rVNfka*Acj4#F2Kr^8l>L=4|eQ&ZF36re< z^J>U!+e0jbOoDtC(yW7ZAu}~cF(Y^G2&=7cAg9yh;s$@2buO=5nsfpsw?93 z)w0q{6nV{Ay5!K7&aP+YD4ZvWvX8!iEyW4pIjN4WyKn^gVx$eO8Awi*G$0PZx@V|^ z8egMyqHVjXaKC4>Uxh_gO79E#MJfspB(;8pBabnt4`Kxy4(*0fv35cK?dQ|iZ1LxUJ9Q8YFJt$GSv1X&#wBjm=INVk=0K2w)h?A|dRH&N9v+zd|hPm-DE3`V?xe9W}n@#|CcDZemx+W``URgcG zS4BSg#yEX~bpB_0IsD+216%A>ps&zADP7zVg(Fo#-X6!xJO}Q7JZ(C2@bd7d#=ip_ z71o1W{2FNFKe+KRy(FcJX!7X*8J;iif4)Oh^IYd%uNc9pI)ojq1h-aS@aWm8)NA!; z_!*0HK!D-{W1FvIGK8jV#rQH!iT!w6zivR;yWOygD=#>z>HUiE$cDHsFr<_c_!A8<0M_`4-&~ z>`aVJ|0yD{8=6C}(&J0UT6|XEJV5T%I&%Un5)lvUCA+_x$}_Oxe%XdAZeV=HnZjJ{ zx2cmJy+Ly`nCiR6Si(oL;zg6~omA7EK@66dMAP3*Rec>kI%5I?blKenPsF<*n++Vd zI;iR?ir>ALX=S!|i({T~Zu?m}Z7zd|TFfY0R3g4_f(7-(3yY>V{B>Nam9r@ku06}~w*t0H zmLI~zamo9z*je{Pj4R)J!75HQ9g;TJGZMP*3a~M`Q$l=<`d0Ql|qkcvtLGl-F zir14mK-A?fGP&M7cz&E-Bc1<@4Xj3cQ38hNg~}$HIiP01sXfb>^_KMic%73G{ff&xr11_4z36nHaAXkSV~)eXvfTXhdR8DO^l5e^ zDg7@p&Rx_qXKUn!gWK>*d6+AesfL~|<-FtEA>M6#h&x(^_FK#c961NU_+4(Im{>=s zl40@n|0}9FH@5233u4SHiMg9zAEyg*b7C9OSg>zk9OYr|$)a+Dk)LQB)qBb?wT$== z6NI#l;lHdM5&vNk|2=}miN6lDgil6cFca$Nvw{Dx=c7{Fz0pz6Yoqe$J$leRONB$f z6H3__Ykx$EXfFACd(0dGW5V>?erzMt7DgyvXg@mqI+Blt#>k>>+Sgjc%Gmjkj;Q_A zxmeDmnwfYC9FC8F+vVYhoc{ucGg&Dh2x#CQiU;nJ1NC%sl?jo)GYGo^CWv@?L*hFV zLHoB)+Gj@wQ=i!+R;aIyS1iqj*fg3HI;YEIBUh-^Xz7T`NTO_Y%5^%uOea z7_ya4uE@V)>FipznKUcpjL<1X22i$kKEh4SN6ek`Y4p|!YdW7Ux8fKTWL2%6K7_H8dIkm%%-5I8Oj~Xl5 z@pCx8SlWo;m=$130r1QLXuA2jrPFUS`n9pi}KwaN3xCWZVC$4D)o}(*3tV zX2yIp_wY}JT|=IC>GBsrY<2_IrtC4Xw+QiHcEoF{2D~;ubZnf!yWYH94pCJ0A-hid z5c2R+fLJ${qO3)LU1`e`1i~YBeGp8ncF3?C!4`+1tIc!aj(xNyfs_SJ$EWT>*=_nN z+p-li^v@#3Ok+ZE+p8_iW>%g;&!Z#J1>@DIwpL^x;e)6uh8Aw522t*u%bTambNFkU#9!M)DSIPNI@2kMYjyh-k!zd%q+Ktk zUDm0L-bG6nFZ8jQ$>HKe9afqf;?B%wPCc2jjkO_*t465iR1K;|O1TNz#o78Z?Y6SKkxQ zW=|eHu3KnAYSMYsz+m`xN~&;wgL1RVQ70EWN6QIlx(FOZOv(E zw4uG5cv`ffjhe|E-OLLkRBXPlJb0?t1$te-E3|hHZBJF}Rcz-quMph0aWfssV@o=u zDzMn9Z$X^n_We!ik5^4w-xYU#RTt@lkd#armQg9K;`DBM=t`@qqGO5kr?}xboh!2t zZGraA2ib3{a^bO$a6jQW!T^#RAiSFJ0^u6rb%fUwt`lw%&JfOVBNS2`9OP&rI*w&W zb@gkt;79bTp8FO18ENaI=n2TZZe$F4+)BxvJ4fCBEtahS;t%Ix|Fmy0J ztZ`ezm{ozSy$g5YM<6E1`$)`J`#L(tZ2Pv=rzVW>|Du8JLsFR8x5tJ?537blK@Hh@AW)BO}HlugvOq9UdKhnjorSaOR28 z7U>A2z5KQ!mFV|1pNO7~U*V>TzNiYgL-c9PM771UHma9skj zY^TC?QPGaGDC%}+QKB73XEVBNoE&N&RJ(-M>iUsCpcnYCh z0)*L&_#I^9Y58?0DVT`Ri%lUyeGsQA7vJ1zilb5YI#bxM*xoA{SgQ+S$=J&ColbQu zJ~rMVhwTIdQ0sfi*3iAYidFB|E7JdCGEv&7W}jgtCY)j34)*o}k$7?Zc@}DqbV16J zo~eup$jUxDaUa{S@u0Xc7r4Km&?0m0_e8_qR{7ja#fDBxP5+aDa9;uec5$@mxXG-T zz>{!StCh^^Bz`VV;zw5l(#3B482QHdfp`OcR$mNckBJ}hNB9ZzAc-HN`3OHJ7HaJ- zNWss#$HY%0_&m3f#1C%1gi7`1Cr>&GKdb3Pgde|xr6DX2zBrEen4^4U=bi^yOK?ojbe0A?vhXxV|ruL z#YHg}d!B(%F{BM252h@Zr;>TGICu}84|#~`mIh)MNV1PHQ6Re8Vgw!Rso@B*pO0#} z_!{z7_UUh#hhJCd_16^#>Q9Pq@);tGi@?qUUL=PgW^{u6Oj>*9JALQo`xl9x<%8sl zA%gGuy2(3TE>?y_R?^117!5JHLzxxmMD%-{ereaAYT?KvIy=kwVX9(u=TS&kL!MW+ zI!^jCaDeC)ymQ*oZJSX5!&)>WwT{*)vt)=$Q?ZKw^%tVzHZpN>D9wuduMeT4h?>%O z^3u6Rfps&0yx<@^J!w_!$`g8_Oj6`vl%e;Iaecss?gV^q4L#WnmN{+fNtrn$y4uu= zR8vOm`gDA8AFqob0T=eP zB}}@cdiMzSY7y2Xgd?1owEHtqnvTp7FS9La?#&-2t=iN`?-`Rlb|uV0mJ>5p3={4( zwAs;dnW$a%+olm@CYsOi+Sn~Nm9z@NiVrkuLRwaoB8Iu%zX1Q^A+t_uZ(u&w_pMoAQn4+ zGfz>oxj@r+$HA zbF9z0G|3!m1eM4nnzbj~eRYh!S2p{=xnBELjHb)Q!w?HD4f*TXD-Fts30xZj#+xtd zPF&F)?8?<`irhT~F*V_VMIBWYF+-tK}#GP3$ zQd~Z#gbyGMzTs(65Lb1{O5 zhi4qTcs%clhAKIppIa2ECHC}S*0TiEjSofnZ!yBx<;)fGVh~)7C=4A8S5@}0X`ugc z(?Fl)G(Qx}Fpzi8fl^g?)VQ`-_Dz-OG{kVW$f_E>Dz{C1H<1yI0eY0)e;%*Fm)qy9 zslsf^v-Qt&ehrR>Lt~7efwuhkS+b9xcOt=Nt^bT)vZu;UB8Bd0k70nYo3r}k;A&X>d@@EpXJ~$~X56jf3 zTN#7+6DeZ^IR6cBy3BFLGQLMZi1l>dUOFvar}Zspt(sEj(J7PUr#X)0{)UW=6qNx9 zhz$0vrFfF>seq(u@X$wCco@*HEk|w~9iEWZ9i&OSJ_%N>vR3medR-(jbJ6ha`90_| zGSFoNQBNmfnggb}ZkVbGm}dB{QmD=^^TA-M1Ji24ZdB?UgkUdP2c{W=i2?>weOZ{o zK{K8mF_Q}(@WnHTzS5Fnp zvs!BV3(1!cBg!vSzLq*Tdu823a-`|TKlnZofq+d%T*ne zjtx#x)F(jDQZAFzZ+rq-4Ja2x zi_v_RRaA{pCK9J@I*ExwtM$!|22Ki2RJ}E%tZ*ih@NGYp-t%+>-SMuI5m@AK&5Xk} zFz(chU+$ZLXPaFus2l%XmryU6Val>~YLj(6zb!X`hh*4Fb>y(@!nSXb$^mM1@Nt)^ zUGXibK0fN$ivD{F=q7<~0-Gk_X3=3KNnia@7sVz55Ts<*qjK2UPZqKYI%cfjjRG{j z6|YRbK6n9mUx;5v{DPHnHa^d{uC}Vbb9~S94U(AXM!nhjaMh8M#$n+FFu}_vzG&H6 zY4NRPuWpxDnO7Vd32%z4?a+l*v}=mUh%ocpZYRgbBHv+0*GQ} zb@c3Sn9b`9(GJHpuWMO2&LMp<9KS@|jL~Gvj9TgmzpwZFF~lgv8BH2@JO;3%j9_e_ zcdzPy%*2wNkR)<3CLZyAnRdQa~ADC)I?dyLg2SjsT z#K=c-$6WgAr+8)wChRbumwgD{bAo}@{MLBLKGR&41a$6lxl7@*&z*^JhA!Xlb`m1`PMXChnTP3lB79Bj+0b`w@< zS>`SmVTY=)JgjV1)pIbz`b%wJot+WUn?)g~4Yp$~)#8eZJWwUCdR-2<=|0C_ayP~%LPm8ifLasCJez?oS?DAJiwtf~q9?!GB z&PgE*MCkKYe=rlhbi}h$1LYB{u!dnU40l;K4D??^KaAPTBaFjW|2obdU1U+-pV`mw z?jv~=`bf*Am(kVo&3XM)ivF|2<4C9dv!yHdZ02I&k=z!_w=PhSh_T|hYH$B~|~-O9M7>oSic8E$;= zdewxPI*xuloPvlm8~PGYfPCUmY;T_~e$Fxm4BP8M$rq6-N_7O@w)LY4%Ym!@N&<_a z8is{7)dq@1#!lyZK%jkdJRg7e+h}S_V=N;%%iOwN+;zcAIy{@N@PVrH9sxX*y zOTCEnEV9KfB1xYU3=z9tL>h-oa{eNcjfAaMQ@Q`bi%3sCLszN7gHwYvE5kpBKRE1< z@5ViH7LEIstryy;>ASMrK0GXR|1Z6WB&uL;J+2p#K6F@Ti2nLgc8Wu>&XYldQrkSn zb4W{$V+n+oDoZ?vq@fnwCKaiX170YAUBdrQ&mrx&H|Emik$Yjj9C5n6wY{z7_SW+M z0?Q7j)v<{*aKqkGl}x5kJ086eFUl;J$Jt-2`P^e=F*O2=zMVM0THMAjE}0zUndUDn zlWH}yjIh|rUDzT+@X&@P#4_ON2(V)aPX6T$!AZ33O_w3~ovt8sb6*U>?@jOd6j71- zOj?^QW^TEEO3pyAi!q-dMGLK}iDi`IV{uDT#CqQw>PJshnb(%!yCpgS99xwdjGmxk zwp)eJA@8;vocY7&zy1&Gq{&_m(<85CcQHFw>^ILvcJk2p3_KOgp|68_$5!>dI;wBc z^HgXR=8ek+jYQ)en1me4ei5&nNHzX~aQtA^&DOKAv6IzMI zFBiROwa(MlTUzv{RfbSuzYefc>Eg_jaEx|q@wvqLn^vDCf)=g1vYma;X78dux@$8j z+|OpK{&TzkNO_u?E#5_a`Zt@MP(>_jNP5hB6?)qbjI#jMC&E`6cIe!K}}$Fb8L-)J37 zU&H%~k2W|Df1;r8{MkV7!11_2@AP&F(76D$(FSwq6vKVh2aX3B*z5YYS@mC6$WG{8 zE72vEwG-*R|Bfkv#wcBSl&z&MQY|%3;x;p)hwNSD?5O?CLpLH}F9Oj-Rv+_EXrepH(}#@VsNp=8vv;M7zreRfBU{>-y?q4F#wF`z)p}m~*?YNk(VwN4CDTfW zQB}1^_p;7S!UU*1xWHy{c>v0!cWG$9g9_O_BIygjoNhcU(1WIU7%=>{{T8aX+1q46OO zc7iT`sR}Z^m3`{{(nN9*o+p>2l89YwJ4V$Qwk}_@k>BHFCA;Fze8G0XKGpo>;VAr{ z5sj5_Uf3^;r>;6VitG$ZL?lR^fk;?b`?|aHm<04m5l{q3Y?2wT(~pgTFagJ@2TrUX z-q};FuQuXL7r$)sL(wvXIl1?n9H-#61yKdAeQCWQs5Dmxk0g6(gQ&O*b3^Gl8zgrwDC=}Fq* zMS9@Uhv-PLFt|L{dU?pqC4LBcs=Y_Pp>8Ef7v^vFj2Pa! z>ug|}rbpYS;@b4uf!)+Wij3`3Nhl9b9t>xl3MG=@~rWw5{>f28u%VwTMpvl7kPDL12>YQ8!;8uvM{ z^i;qa*v{6=yp@Z7pkSdMpzKt=!Q!_4c~>NJQ2BiV7P!CHX}F;mxH=0jhl;qJKseNBHx45!_B@#o8gQ^kXPkrkuOlwM`FKQGSgD;PeNV=0- zn<1zK%YvJnC6J=4<`$ja^HeI5xl*d(SCCy@Lzii*-`nz^Odm0QikUSNB$eUK`(O`i zZgo5v_HW0P=ElnCX+5QI4scL!lezg)S9b0roXa7GrD*U%dnhI>YRAXyWtoIMLgC0( z&ax&@mHzzSw^PeEXLXeb)t6aN`DXBP)xvm+SS6* z;uT*^`ZC&mqzcV&(ziuaRK8i1Ti$m8e+&EdH#I!K=sP`|c*Ln^6l9`d2l0!Y2&hqq z{!#jX(*5~x&K?pc1J;(Md$Kf7kbdtH3N1BRd6Ztm{(nRq~U-CObQ<2+F+X8mDDcFgr;n z7FLs`Ffy4M!spx#*w0+~6b{u_U19$CUrriBOQmky;jbc05R|FSM0)h)fa8PMlP;cV zuqpQ@WdW1sgy$c=U=}FQh(U%9Tq*}n00ZVQ0$&buHLFph*3rQ&pSvD%KfKUY;AmuC z19a}|tzAAK!!48g{2iJV+ePqK$w*|mEdPXG3)+}4^WEh#-9{!GkrMA|l=2K;DK*TH znB`HMUno$-))zh@w87rweDG0J78$FCK{X4Y0hO4M#E~G zrnW-+%w1igm3mzopCV68K2Ji+5Fl@Sg@j|wlo^{TzG)6^hJZKu+Nc9qGU-gn6TKf> z#e}>c_G#!1Nbs~Ur`p2-3yUfdvkH~OpJqsGu_iRwyV({Dx7Tbr^g{M}cBp`sIuB@< z)E;x#O(b3Iz%$xXjk9-_)&a+HQ#K<#i%f?i?S$SUAv7}QuU^lQE!8|t5og(hD02gf z(4?Nr@U^I1)FF6A{M1PTZKA(`8oiPY?IaRcheUPUA54xq9+O9256szHO{-ZhqA_0e zc*Z!Jhf?x}RD{;_s5%zMARMPhzeEgYG5k$6_VGt<%*sm&kIV%z*ywgU6P?35L_BRk z-$F0q2npS}5CN%ZiULLkXDtPGJ!owE)1#1ex7xYvrgRoB6 zFIrNUmAmC)n9PR94@IM*DmFl|KtRZ&6I5wEjIv04l`Le9RWjXXfo@e1Nw)^TG0tQA zXel>V)McUD25BU=ut!jIO(@x6*Q5vw7%)m!qGG8v9OzAcI^cNijf6G}c z@hpeCap08zl^@;_BgPCM=VQ>9xvR}WXf)iWbW>)T2;CW((Nj_J@=SxyZO861+4A4L_6BZuA>RXMez9Mwve4u+jH1;r@#bl zm$)}i4CBO*n%!fSX_RAlr|H&g){anNRnx*Rzf-9KV=S@O{qYGenP0;}Ty=wu_VD{DR9z;Gy^~BO{ftDP)^$h2(nZYWxAJ9#u4bQA zu+b_QTG9OSc%s5X#a#f0KzBRB;)h+VRmpWUI0bSUWBZZzOmDth00mm~$wQJm6Y*14 zwHYmk%hmpaoH)W(zyo$dOn2>0|3{)&W0r=ww00rsWTyZ zUg}hxHy}fN-s)o@>?!(t%~O39Y7;S~i+gpKQ&2Y3SEgvbEw_ zQL_AG4(1Tizzo7Jb50i@wCt%k_wQF&{8})#C;>AGsOU)?-0N_$=d}zP% zLJX>DDncKRSqL2>c)Rm>tz%Lmi>YZvP!@1Pvk4dxngtU3mWZ-!YC>5YnQK0B^<9)T z=v6vpSpYMBvS^-?1}0YPXdye1j1V2p@l#Dlrb)zHt!?NyOrm`@ z_+d9;Qz_XONXL2dS|^fwY!4BEzp`<|&qhr?%_9*0pPR?~9R7ewCidHUI}X$!khk?G z9HgQnsCFRqBIA#?l+4#HGT)+zVJi@EWoupmdw zdHB@){#_Ko;OYa=sIOf(=3?zCZZe`>ZV??i1$wJG>n2a}bSH6d|Fv~?k~^OnU~qZM zRh=I+zU7s&SV$-v3y2;Y0FY252+VK5rwgvAb-0r*zSLQskII;&!d&GOIsHU#?ZyT@ za*IVq&h5r7_Sj23cEDZSjY)c>g6$s5>MTchV|kA)d2Ghr-5KU8o9`_RN=fPf7+Eu_ z$zU#C&{?Hf#}I+Uc0pLU8n5N-l*Q7P zIhs-Jswq$QycTOlo{5`M>1dpWe=h=zbu}>6uBs(3sDno>jH<)VNt8-SF~mht(E@qN ztQ>?bLw7-hYTWxD?0Mpo3z%C!qt7AXzjtV$!e%&}G!^!@Xx1LAb0L2jyKQ%G&@&%= zDO0?zkqmAR%GR~UH$e zs&YvuaqDZ{OyZulDP<-oU<;HUi6dL+E{w{31_fV2qALe`M6ac(6he^KT($0zVXb3m zQO(^Td*)ELRVt8=#)aoIax)|^jSIoSE>#oEKEssTU}K)X`ZSW+#p}4Y<7(2pEt)E) ze6wsza%HQ1H zTrraZnUR|vd`A;#17yM$&DefS*A8d1E$7v~B>S%2HMdyHYq*NlTsp@QC^xdCkk?fd z)SLK~_epHT2ZE5(w5&sr@o6ao9k;5ivNg8AB)$08>{2|p& zlF#UoR_>QlT8DxTYqwp2?>m##PA1uN+5$IU#xk&7gKjIJzOXc}TJcHhookAJyM7Rs zX}o%l-zm#cvONxab%-HeIO?`=Y%o#8OfHDnCxJ6;`3Z6+5{2)$#ZpA&D(B@pMu|g#NN&=?{5P^`R0fCTPf;qmpctV+m9xqDFEZMH&4^l3Bp>4 zFn64BU3N4jc43$e0NpP(z#9WxAo&wepk(ev_sjS5DcnFTdD>% zB0-C}3}5g)fI*P!SzAohlWc19T2lJjm%GfV z*p(h@@TB)XJ4%3$;LK_CNg)ie+l#BukLsF$vC7|$<^!5Kne^v297yl|N8pbhbGXK! z4I{_dO!ja$6Yub5JEiIKUJ0lb?sPyg6399}`E(F~_Y-@Xlh&nc%hpGL%JdCv&!wGi ziS?~NXya>@a?_*vOg%tLKJf`O*&DKl(|g~k7R@2By;GmQWz$ch;?9c$EUgR1%nl@1 zG3`pIWmEaU>-}ZcZ*Ye-Jm{4!{+-Luz0`f%7BCR2Q=j!=yI!aS@YZs*OQ_d^@Pjy* zzU88xl6upLx%HwI?lmf+85`9V6GkpCe|w-Kt6oOTQl#wj#zGw!sQMXDE41I=d@22f z^-BT7;g36!B%A>h1F7HB9Xwa$!(UqBTwI+u>xJ~5>x_AIXzzZF`)sz#57g?zAAf7E zi2``ESspp6i!edB3loF`Cd?XW5gJZ3Fe64KCbG_I->;w4(7MoLh;O;x8Y8emNzr<> z*K6@?YRpOg6p-a$4lRIZ@#LO0pE|#e2UuK8ajbXBx*^*d{uVe`~41J>*(S{Xi$sgc*ry)vUMoj>4k8x z-ZB?PCQ|mC&6Ls4JQ-1|b+MQdI4wCPl~hm6kMI~|tZ6QCB8p5=7|DCqJX!M)U1>xP zOUDgvpfmp@aVUcCxnu#R&G2_g-?Dtk@RaTf5kOW?=~}TU$2uZgRCv^g@;t4rtJ$eT zJQ5`r0Xv`LwhcS5l)@O)YLz5Rz#r&!OoVY!K#q`yPF4m4iuE??i>M^M=YA%5QzCxn z(JoLwQZEnRCzmPQq7Sw*z8=-Eu8H1Ve34(TU#O5(LQ8qJ{%s6YyYj!|VauPaersg@ zM4^e?D!ImH_~r=l-w@H(_hZZ@#C3@Pww)NyMHVeHl;poEoNl~H3tV`>;ZXJgk^Hpb zYn)kAK49)L5i7aIQy(}`UuC>@?kzA4h7Qij;xS-L^TGhAi|%57iAB&F87ocm86HUq z4oU52j?!R1J5|xStR3&}@sYAO5KI8Seg`3y1g40oEZP@rG{yR&W^(CnXJ zLHyZQXa8jQr2NQdm^07!y5)h5<$hk3<|@5fxy`i=hma%lPR2@e1h|#Rz1&)}zA9lJ z`d%18-=qULts7K>fI?%RDP^Y{wW5YghH0;Q13E0iNF@_%s5ASxyC)f|A_vrMJK5!5$CJWV>RKGeu z@_;`gVO=iF*-=Hdtx1OSjxCl|{+jk&&)kV+@aPc&JqRN}Dj5bra~oH{T8MrAobV}{ zwB*4-kG4~9vJ9$Xve`*J;qjU*yF9Aji;UMhQ3Hx%ilf_8CV$VCnHe5ML*KUoK0b2f zI9>_bqz9!!c%_9`5bhbm*!#$FLrPz%bW7>AlxJ8hT5XyRbDAONtFajH2bFrM^SRWOi52V#S)-B|O%tW5%3L6JNLZ z9lcRJzcaDJrtR>qDY^Rz{+iC?aOb@8roCih)&;Wwy>@j&mmwd}8MB%r-vo`d12=)K z_oT1m$O$d(U8*B`np(EaX(Hy*x8!ACH0oXzCmO$iRv40Pr>>Incp^NxL3L!Z%d)n- z#`VaY`gFUWS*%7pD6g?{##H=MBDqags43&A%E&S8?veJL)Rw;HlQ2*Yaa<_Cd)r9+ z4ZBWbJlh$Pn`uS7YL_-IZ7nVW7p4s_8@)`Nmtfetwsm~@?L*~aJ0UD|Sx$#%nS zRd-hU+83)VRj#AThN;8@JiFdR?slPewpaDuc9jzK6L+!IV+4EfY5N0pkvN$TF;h=! z{BwwSg-5)yG4Dw5>}G}-EFdX1k=luSqLJ~`uBTY&s_hoK>Vwn|DKecGnIg(%#)(&= zQbZ(RH{X0M;a|A&RWrW`O=gOi^Al%SLhy@VC$2DStvB zx7rt1^;L~l7{=&v@R(#+jE1}w6KBC4SBhfYB4V8QriEu6Q$sQxYb!mrIAVz( zStt)5W~$EN45&&X|Bc&1a)}4fRZNr$I`x}KX{n5sz4Mr%O7$g>0y03_+^$eNyd+yb zaE@;lzo~mDBJ@s;keWoasu=rH21>?ZIcE_KJ9JbHt*tp|ULwSsDCi7GMoE{7g3J3S zSh~tLU&r4{QGdG?JxUeFar-0N1%%B2%$&_jV%s4y>QcXUcJ7juJgb7Z2Ek{om}p zf1KP`RsTPmAMLgTW~oJk6xdSKgzzKE4-*^gv@&(T2G?pZB7V#VGzPU8+TAwQZnEiQ zamVSjt2VkI=&Ds$tshoD1=fC=vI(`jmO?jDWi7RgkPprU+3KWe!pjT z6I#K?_xs1Uk8bAuzVCa_J@?#m&OP_sbMJL5AZ$|snW9xkHO%H02xg z7kA>qRN`3i2@cqj2{XGfVQgET_w#D!&5RLf9iJ9K4-pY45!o?cHKvLkTbXP8 znN$inMeztk?WDeXPX05izMeP`8apj1o;&`7V#UBl>c9_rIM0#}{PmDZOX)aYL@6K9 zS_)^pmWz+}G_SQBae2iYR$IXt`W;rbWoSQcTf&@CBHE&PbE5!R9Qx>@GndK-*#lfE z{~@@^>P#d*vL1A|0|UA$zP$1umsjTh(pUr1%`y3*HB*9LwkwMY2jsY(?3e6tnudOf zgd*kJL&~@6*Yo~l{%msA(mYe-nR1mp#drBxriL}Xv9THhsn^SB_z59b+1+DLEV|pBRU0Wh(_8jyn$-(f zeMW9Lv!#uX5FBNf;NM+RE^@MDInTwWW-u_j7rYQEgJB5$Zz7j{c{<4?6po2(HE2?v7*>yX zmTvqfgJzREyHuyIcN!Os!6B*tWXCuk_X5}%DXug6x=+S;qQ#*RbJz(Bcxl{R@?Mg< z!Wt=c9sS~E;%>+t*=f9sof1N%8I3BQ%P9tHHTM}s{=dxuf2_^C2?rQwWjikrC2$^8 zf-Yg{S+QW*emERh*;tiq5lrNpxXvwhNh1Ab^pb@+0?cKdrWl2B9poNhXoh@6Uq-GC zW|v&AEV79f4a(Tw;~3~J%lvz4aOKGGXL4Z`%x$uUop>!fg;=iNnQh4jhoqXl*7fcE zTk~BhqeINOtTp3>u+nPCATrcDWvTZ zhll-}-xJG~XLpjeN4Nz@YiB&)u58+RO(J8MR0t)O0t_WHIXkpXJW-FR;4i4W+BR_o{7{B7Um3Tvk!rH%|p(8slPxdahjHzr4*$1oHx z#HUT3Vj9X4&DsgUU*7+0fJ)ze916uZmp1ucXcY>*G4vy3H~O!gRks+=9JYjm$1EjQ zDG3NU=S9n|oR-p+Q*~wrF+<5%KSd6e-=9I2)vooK*YX2v$X_0QG&l4tq_hr0{j=5U zNXV{w(B7kU;-g4@bXuvt zg%BnIzESQ4Xtm};>R+=DH-uVx6QyMOI<*cM;}fIakG8iZ)fT5R*h6+yWD9Qj&kCTl zGkj#3O5JnarzEN-!6pD(NHYL>SPH;aLj^z|0npFSwGJSJ-5SjN&5M${Bow!iFDnSI zyIj8fzq4sj|2@B#Nif1XP+1=Ma@R+I88y@V-AqM(g1Vu$r1VCO#Qs56O$2KqV!g4q zH%Z;sTdK568#^He@S-7BCuGcIPhP%;?$&b1GTrTIaKl#X;QV|3$cU_rvpcgakw0{%L5ISs znL&s9gO?0C={MaY{Phhwf)xg{GYvYIFb9LdliPmrHCKk&f;&{#8V%l!1q5-CHuLU> zG5<=kOp_n|8Pm3$Z7`y%RLz?=#N0`9&e;K`j%}XXrJ6Jjd$ab!T*Z1ahiUxZ45a=g zknkD~U2Bly0?dlAD8+a)*LZ&x)~CHgz`Rfp0Tg6rz6UMYePs6Aa)n$D@LaKH4)oZv zj{pO&6oqrG>v1yWY^OxFZG+!Ja?j8XH6u1zh`vEvRY`LS-T5!r=h=k8_by2|`MxCy z=lvdgK#2_#`2B~LP<;0UIw!fRC$pN?haU<-91>+Zckcu5Bx>NqUPTQQ!D>f4>mTx^ z1azeLZxW;uAxZvt#f=u%h1v{^1Z>9Srh^>9Lnpu`DgYeeK`~lkSCA6 zM_7xc+Ve(kL@`#z>!6yh+o=&k)gzJpF}c{7WWU)sUTtvjq}wbOCdh7ivl={3FlkK~ z^Zn#Yspf2&8`h&JPOtG+miej5Bm`gxMbYp0h}(R+MUC!e|_3`X!xH=L%X%RV35N-t0F zamGuFjUv=Y&fV~Z*E6#=2Vssj`obEcGPn6;=!%yn48fzItbPE&h8LWW0zLG{md={^ zN=Vk%8Isc!6q0>rAxs;RTO*QFAW3OMGC*FAyKt#x7Ea>Uul%_@ca87xBNLBy`pWgZb>h4$CJIW2YoX$;{p{cXgPlCTX#?+@ zc_(cr&u`kodx3Y-w3FcK5{j(=;x<(c=eL+=9W;WYdCrVAkfnblXjsypteen|bL;cdrICV%HV z%dbq{0}~)Pu~bdm{Lw^BjN?%B+}=?hutloVyr1H{usR;X#yIg^ux&JZ>UayCA40)u zmR|k9di$)I+Ri@OCp(wT8nTxmF$CNR$l7L4HM_D>+Cb`NugHxsdc|rbF(6l*id810 z>7%I!?eNo{4cHfdFbzGv8oZ;%%%KaNst@hfY5rkD%3`m&N44wN*B=iVC2@2PX4+ni zD^22z1G1?%DvDlRMyCElvpRewAXxLffrxf^$2P!wDYV*vJPyao8a2ZOMDtgK2fqt$*}RE z65KSDuTnmExhp;mt$FA_T=dzWvtw;E|FH^c1Eo^@YTD|zuQ6$yt&WUCq}Tua;LtDR zN4J^FGt;2Kmq!3qMH)D)YN2F){w_84zvvLCGbJM|W~^8=f|4Sc5XD`dD~=*GdBBwP z?XQNstRWc;)Qfq8T(J%836L{j_L4Nqh^kdcM%4VFitF5Q0NTt{w&^%yBy@^Qhx*>P zo@+d&s-rG#+~e|<${gcm!b;=#^%GXgANqjn{V9wFIweHz*$)~JX3O8|-v8oMv=MQ; z=12W#nvfmIOTwWsofKPornRz~Zs!WV&;?5EF}Vs<7ZsNKR>Ek#*K!tmDYVlIg_J&0 z20X=nHU&dLgJgha9cFNF8s#l>F8T8A9{z8IT0cD=7z zgI(c^5O+2&XeuQT&jjiVLf*;(M5W6w=~d)ouc7 z8%<`hIV{dSsdW!49gFG5^$dIC%}X`-C0TYt#gbDoG-MAc1y8XLE46zk04&c+AG@)0 z=x0XI;UwRMW7CG~EQ&aElUML7j?hrw^}o>(L9CUbs9x*eAWzV_M7yh6;P*`r4){LwAWJd)hVKNfjar1xqXL`;%SgZ z@TK2(Wt3@El(DWyPf35)*FejmSEjV=tsa(Q_CC4dT~9s5z%3zCSJR1Gcug&oVB*6; zVFbDQ6>$VnLk6s>xe>9g{tK^SRQ=bYT3NYF2*wZC=_Q^`k*-)&Jxb^Ju?9DG-JLhEf&(MJGL*&>#7xa^> ze^Gd(S3{y%`(X$$`=1cy^|(fu!@{d;aE)H;ot{Rt;gmnU z#!h0>*DZv=dD^y0@%{c(Q0#Wuu8_^yiZ_$@n;5W{fe%tzW)x zlj{r3Bbn15nJu?peD{k%v~ql-#C1NCwDB0Lxt#Q09=_!j`=3)SzCQx3b8-|}4Q#`} zo_tvVTdx-H@@(vw8SY2^^(Kay4>Q6)dAkv6vAGH=ae88sJ6{_C4^kB1r8@_vHWjDs zbpK+b^05Fn3uzaSD#t2|8?jVIv}iZ@7OD1k5F^Ne^z%~YXht(rhkjC(0%RFFFAzF@ zQ)Y87VnBRh1|y9oC~gur74MA4=}&GdPDQiFQL{#5QTr>DTtLmva1SRj5B_A;j^r1P zZU}*9JmlRm{rLX~m`*Jv+`FYX1E%*Ir9y{jZ&FQ1TN$SB-&DNAO)Dlvn>Z(8^yh6% za7?XnSxjG$!E_H9<4Gt#5KJy%Y5;_(G9)y;IAS`v6w^5k9FA#=JJChIiKTgdUwJGV zddCdh!DwN_$}KkLWWBNY_!>*yb!8nmeD2I8YO{{gftg1Zc>!RX*S0k1<;;w6xhb5C z?@rvK>~@VI_GmX;gZ3?Y=o)zF9{XvU=pMTA@M$dydA52waSNV>sE=n(78i?X_P#y&7ES8ox~pzf5DD;Wl#QHIyb!X$EUM*SyGQ z9fC-!#)50F_5I+G@rC`vUnG;<5!y21>rG>JsOox4kVSs}5OXsEnF%c>i0Z{5ls5zB zHzFA5_S@Yx{8HvqK?xap_>xULoB&^pb$D%`k<7$?hA48pnzmd)7;+*~O zJwr7g|8c4bB5so;z+({*JQm-!^{-f&o%&yM#1I<`8wqWbShP9ov3QR?;D2RYQxfx2 z8^d^7=VKU8eLjZqbfJ%7JaKsF9bV!h#xR}Ov2Qmayt#e5%ENc&_Pte`Zub31d3Ywb z@68IH+K0DnD!1jGJTDj&9i+3D&DMPD*u@Ag})7kCe zf`h|T_Hf?8;YmI050re&`bsQ+Ph~)%&^*ofZSFkXRk4Hcc$)S@$#}ZcPQ_EcDc@Yg z(;bz8ZC-W~8&K@>9)lZM{+<8fT>9xBGnW6E$fbppO|Tt`^Trm5%kTMbHO)6mlV@=d zs)G9q{kfJ_e)ZI&(KWK!0*Ra(W|D$q1sqyyXK?D~LNM;Zlk!xcBgfE@BN#m5{$w3M zGZoi})+HwaM(5Ba8vRE~wb%Y7SGh|OJ zY-rwBov}o_w*=6C|D&$Nf5$(yF=Sr~+3C56otR+3wB5WdFwHafSz~F4)+!#9(CZ1k zNrH6tf&?w*5WPw0OA@p^OTvXof>b^U>yrdXq=btqtLU2+L!$NipFi$&e6e9}>s8wP z+i$y(BGQXwUgT)$e;U)c*UfcZSIfd+IO1!s|8wF`8z-tyJeBNI5tlLaY88%s8HM$4 zaSHKx(Tl>P_}#z0RPyVO8^)8zmxtI2%546oB=t3A^rh$BlBRBZA>L9?Edbs(&4m3W ztg)pFX#KAyA3ORV)Y$r=w*4G#@KdRs;9nL9>ii^9G-?^EnmtfV@+6TM9r=Wco7M7x zpXIT3*ivevc5$VD_~FlMU>LP3;OgoT0j^ptTzF@2J%5OD-}+C+eL#00bB#v?Ayzim z_!(-VI}#FiZ27YS=g*H7PuP?rZSj&0JBcdWr=i>|Q@?_@QcHnt zQIX^sTD@p@1mP&;#<+}AJCvkA{;j_e)LCpV`79uAcn&@g-g6vv z+<9^9YNcyGs--i;T6(_qJ>wlP%71KY~Og)>PtbCT&(Z5B%AXam`8X z!O9JNvZ;836|q7nhua6P-%HKyh*2Y8)OL*85hJaE35T{}B>uBE$Ef`@Flv{tX@C(X z>L*ibg)K*n&H2$Eleu6!khR>im@fQI`x3BS04<@Z2mX59TVzXEUQ;0CGvw)ju1y&T z+fco-gUdp+ z+iN69qB7Kw9%qJtluy`wl|k0of^(Tm3esXLhuTC096Geqmolg^FR6BcrG5)*dKRpq zm>(RPtC3rVh??F`Ka!u1U7I%p%x=X*jpo!sL7A9#-qMkorX_V&Q;b#6EB*12Fk*0x6&+-FapPl5082fbE@|BdQP{jn4Xlqb(-(IplM{0eTSf< z&CB(#It6^)stxuq&{O4W*fGed0-J3x{#3lNl*_s|Bignm_)gw@9Z{il+?iK*^TY82APk z!M|b0avrIjyVb4m^A^lH1&&`|?xcnEGG^Fk!Do<(`g`IE}hdV^6@ z<0d-ZG)~yRPlEw7LLQoTN%1u8c&?5h2RY}F12pdV@M)dcj99Q8GINSd`Q)yp>K6H& zqA+JP(eJ4Ao>}~*H48PGdSm7I<)*yNaeA-#NizA9SBrnO=jsZ^WlH7l6-S#qr)7IX*>|d}D%M>hXR5nDl>ht>C3SBI1fJPM>0%m^H1o$G-!8=f1j*YVac!>MgGG^)lI?TY>I)=LK7 z)+e$6A2rrl7v6{Vn#m0o$uScE*7Y3aj2iJgVC%Q&Y>VXqTNid_jR9bt$WWXBk5O>m z>z)@+4!*_`)N^x1+pfh$FQ{E|If(0sD%0MYYVpxai>I&sd~3D4K^7C<6hBPCo0H3U zb23AUNn!hF*k})UO3XFxXa7xL*XEx=%4fi_gtLh2q!R3!iMS&zs00WFfuwQJ0Yls8 zig&52G;td$#7{vPFq@JN$!fg` zTC8GWH#4z@v2u1ttxcbknS$gNU%IK5c|Pg5GA2at)Id40Vy;=Ln03or{dUupo>i0U zIQ=l78enEYas^2G1ZS*b)sI2Fp1bi^acF5;PE)rQPvmdeNlTKg>cLr6Ss3H&NU|4f zr)RyO2K_Go0IVS~;kWL)Q#)j1&#~{amLQqf$tXt z-?0mXpJw@ivgffGSIV~ss=Q7KFFwG&+hYCv)&{-3*56)dA(x)Z5h>61hi#Dc`%396WEq^b;1NLT(Vn9^3MP-{%v*V>5 z7cdbJqWKSxJV+1Xq8DTFr=e}62p>q=K}q$duWerGA4f@pb1&rdS46V; z0E%{n8b9e^lN#k>2*^C-$aI-gzGt4Qq&p)b(w2ScjaY>F$sbHm6cNM?k)2F)ei5{TjhA=SmP2VX&$Fo?yMfXl79}| zKybm}x#iBP!G5+uhdMV&yF?0zRLvVP-~sGTIY(Z}Z(lJvf~mR_FDwGaQhiO^GapG% z=!YWHh|)AWU1zP~#p%d03Y2k9w7ZL#-&xaGbCA;hZUz;2X4;eyW!7*M<$^H?ijOS8 z=V3~ajY-B?laYXFf2YMJDCV~E1k!^h&0H1oZnaiOss?E$?3i;bU79L-`|J$j+AxoeQ_pq~GbI1buntu^8=k{wC zEeb19IAg})0$`FF_0R~}#!wufC54F)SQb?g0n59DNWYFP&b<>1nl^s-(fl3J zKIvyq^Ht~A_m-ym%k@GDyY|I~OWYopbf}OM6^Wms&hF1ie|kshqnHvUKYv#2++q*t zNs_wNSz<12##~~INoKdehAkpxiw)UHr&|5==7JewHb8;IT;pCGdU1xqREZhJBgtqT zE{qE%So57|i1Yxq360Zk&SD-dP?PE>7Xw5jsf}Rg~5lw!LGiUOL z;_0PSu$ff&tVH{QOfGoS6!&Idwj^KXkvu|5b&|$>ZtxEKZgZ?;c!m2lw(-N?r9|Z& z`c)eW1<0!6OQx!6ufnR*m$a%W({WbSRBrGCkaY^qC;!kqWfnx&8Y^`S6VC7Zq_%~x zuM|x4t9DHBs{*3MBEO6LiVi$m*LfO<4xJ0#K{e+e4OcQQ!IkWWtG=8G*Y~c3>p!ym z%Zh|n9rA~CVRW^4$E%C?agP_{tk1E7S*yu}k^+MK^2}Ur=+i4_jJ<3v1F8?4UG4XC z5guoD*ovDNv;qe_#jI{Ep3dL=%M1<~rbNtOcIWW*kgQ|RwSj&7cEU3Hv;Wm7&XT1O zD<(hA-U}~jb0d;Xbv;=$&qsq9S9DHLftjH(%V*Lo(Z$h7b|f^?37lXo@n0;4Ikx6_ zRKCbjv2gRNdDsZ6h?sCgNQ29jM(qj;Pn{C0bk^Sf_3+(dZr`~x2w4uFGena&Ubo5M zb6t|X!9^L82(pvyDYA=$d^VjJtEnHP(4SElu#$10aKp_&sG}^3BEFT2fT32jX{ULK z%EJ%mhAt+BZs@ZQzG%d&&p$CbwzQ-(vniXq3v7{>Qr?=9JRN=Jue>dB*<{@{DO#Wy zQ5H7{Wxe-7zIs$yqabStz9{Ma-2_zb?2sfKQh>(`SxAf&2C0^X6i;MT`zmUM8tv?9b8w<=bJt^IItf}*o@9PMV6gi6LRBlV|ekW)K8fYt_PfD@qB9ctahmF;a)FL?8NZn*!1tUoGh1){{1*K$AGfb|lZB#Z&NG$NARFRg z6Q-OkTX1Tjf=Y^us8Q)FeU(qvI%k@URL*jA_8xWy-kt|aRl9_p<@6Ow6na-Kay6$N zsoy5(5dMmjVLbRgE#r!ei?*md#bjYQ4mgdEmyZ4;v+!;N#x<}nDm5B9^0fRpU zso8k+F|D$O`lVX&Bja>}G=n-)%ihAVp2UZ&Z~dSW*<#S|zlDoArkKE0r4=sTwq{6H zys8+-Kncy9YizY8-$8acE(2(X8kb>%$T8*xzqu#NF!5A!>I@nuOis0=U@3{R`c+yJ zb5-UVzpL{{f^}ZQP>GLL&}{bF-t{qmd3JNDI*h_%9G+`D)YN!4V!A}v@4AU!EA2@h z2X-cpdn5Wx8}?;@{7MFh+tD}*sL9Of8)86VNMWKoqo|9`m=BTY@mKi z8rQybgTk4x48EPSN!hNP!6w>AF-S+d|ANHO>NXG5jv**T&-l0`U{P@kKQ& z!y?uw-Eg0igcP%g0a4%<45u#T4ST`S*`s8i@a&{?XBP#R!WbroRMvY}PTe7HNUa+& zLJ<#fkv2vxE3NA?mX#jXLZg~A@}M89YsJs!^pkOC&|pE}oHu*;;}9^hAj&5$H4lu@^if^g9vc+Z=E&5)c9vSxsY7j24S!$7os@}swAMsETlbYYyq zAJl#f8@xTWdRVnS@yON%?V`?pk+phxnso7sAe5Q`q0qDdTwgSrvFeaN^at<`l6k42 zkRR3F*k}j5pJxsJsTW%Yo3qI{#2$xX%t;yS?XjRr*fYvm%i^gqKL;pHKQ?@2z{3Qh zPyK9YnM~M|^`ITMyyS!FUgE2oZ^n(Mp%~mQE#l_i37MK(N%RXwo>)}>j&2|!p8ESi zYsskdO`7l-RC6H8Dqcp4=B{7e3J*mb`SmXTk&SPo%(`}rcV^|4knVqMqJs(nkr5PD!$N69J8 zFDaf>S?}gHpW+$_E0Gs!g_gXi$Jos?ydf}M-8`MPm|uAa>_aCZ2u z6q;S$!0$_GI`ZHddKA7nO9NZnU7fbB1Q7yARI4_d54|(AskP%w4VnVCDHFyk}Wi_c)9 zGIV>DOAZnIZo}Vw1QTMNIErYz@L{3@YK#GeE#^ZD?J5u7t_W+`RMT+H#w*yVxGWeK zHmDBPS!QjW1(rLr~WBn0LShiRedURT$KN`C58HPeWIE z1AJ;gwKn`t3WVqi$$IVCtNQ9crd8cZRhBPQ^(?a_MU0A>RS{Ob_1!?I1I>;)kjY$^ zSk^fcSR;_X&702V7>m+xg8hfHMy;E+?$$%Vx6yo=sWLl^rhnV2 z!3})W!8HBbp7c}0%-UXMtAk3vc-xct(J#Ov$``R=E*(+;yBT%^X?i2Do$73puo!rz z)0~POURdXvEG&yIs91Gm^SWH_iA9%{{4Kv6GaEs}=O9Y;13#)FtggL=GVEJsy-g5a z&RdW*g%fn>jedR`2wOqFLOc+z;ntrg^_#3JseDb_;#2S*w-LNI)9c8kpqJM6GLkKC z9Or{9@mHmV;%(tPu(tTh!Ig=K0x7 zSaoDlx5rHUVk(*^#PdJmq^2&LIfS7oS{PbgpUoZ6`Vl2}_VVj%Z+_rMYmos$5ePa5 z%HjQr!<*OmB~3qj6V}y|>T4IR$^bg5?_|%cnnZB5Ju67M!4#_$#)BTmVo5`IXgrpsH@=suTYaeChLnru`vC219G6sxV!t!BY zmb&Aca6&)nS9SSRctuSdTcWjn=lNUxyBb>j;oIn)lubToEoi}1sj?WkWp|=ip*}suB4U@9$5{(3!FZz`BAw657ByK zHYCC3#{2v2TXmpgzc}d1*DM&XX$j(n`(5iGEOt_n8mp9Sd-FHT)ktY0PxDS!=m}Cx zaFP`KEjpQ=gCWd~(yx1~t_xqgT`l?1A5Tg_X$)M`tw8laq5PrmO}>-zpVn3K+sqXo zR3EoqRxLibloZPvf8aUg;)58J4_;b4aqTB*Sb6xt+)y}kl3plEC)UM6N}b_HZKizuF`6d!E8>MXgs`|GB4BEdb&lIbBMj;K3QxkF4aHn6T6$M%(ErnEW37r z%~qJEw*W>@LmcKJcZ@pH8f3yr0*t0GrSJS3=&bodSgTVDHRl8PY)dZISya!0op>V6 zVx?!3(qBIArDaapSPD`wQ5Qo0r}+Zc4picx4WWYc{X7+L7o8>N57`|PHU^?)XzkFd z*7=q}YV)t{$t?pbW?J8Koq!$9=Oq5)qqzFmf$#A|UNr1@r3IcRlT4e$PN+&RRKOCO zdMjVWn)N?Fpq$6i6srRHL964rZn`t+jPQKkC;1hvorzH+9nkpp%KuY}yM|WX_ z>8-){L)yZT9tX6uJ9dG6vHpAaLhOM_A7I9{A=XQB#Q06yz(EbhIFYfj1cKx?8#i=` zpfOEES~;3n(f4DQ*hQ&Ks~}JQ$a1OxiGcZ%3bR(nr70jpW87>HR(WWn^4> z{+dT^s?w)JSo5QI>p;fw)DS_Kcex#+)nNAPOxw@lDSj%oJM>ZuXIGm*>a&&uIsZoY zyx7U^td8k`xv(YQPamrZ04sq8wdznMya>hjvF8SX4){3t)@j&=Fl$jW{C(}Dp=OLs zYBYMv1v04KL;c2Us(F%(Q^TyF6X%3?Vkwni80W8(@*T#|jwS+Xlk(X$f+csFFnG2ua5)IK&Y#Tk9>+N396 zJ0EvIC{Y+Dpp(?U$A$jGtPP@ICT2WUF}u6Mu! zz4GgMC`4q5aLV8MRr&$xip~Dre*kRp(IlX1Ak5R)W1B?GGWANlIT#Wc6G3D(Z5KJQ zTW2NR;tw%2JT8kP;d6Ie-v{~m;2o{)I~r)_KMvWUwH35^8bDAL34hD10OkNjZ?SCw z{jGh=pxi7d=u>l!P`d$Yqyd3R6d+O42M%b`OeRxE4FfMD!WW?%E7Tl!5qQx5&0&Mi z4@0ThO1pwzh+T5pwsBQu`{bByj>f^~+g~hDzb#>G{u;b_fAJyCZ~WKX&^aUQeIC@L zZJG*KX_?-UpVs51Vxz(=K{D!uU4#bM719q})J&mFfml8%B;}yqpwKBR^pGUcI<587 zJh8C_)9I$SCyzs#f)dDvwKA`H(Ty*_oZ3g_Vd0W9%UG#@P}@5oEl7$)Fwl2WcZ<+ZrD84(>hmPRIz`#IK8HP%?!7) z&0rS&l)JXj4A9kN%zt7m?A?bojXLAuA8}QD!*Ji$hDfqi4;Ki*hrCyUAlWdT={ zT;o2D$6V5X(!@V*xoig=vjVtB3`yrcm>axN^#&GcFlQhDuJx0;7VUb*0tASaXNzZQ zRD0!8^2oIY+_ANIpIuGTsP4Eg?z9n=8x?ayHGCsXqnb05kJR4sHFt<18Zg8ixuM^( z_{1A1(GJz4M1g-t>nE)GO?;_q{mC9aG!&w+Zd37=id4^nH;$xUBuX%w zimlQYqm&Ljke7KA+r99_X$E@qi!bh3INsS>yk$Q#+%zGuw&=TKktp|pbyXuARrI#{ zN#j~LBb^eg0)`v|eM{wvbtYI!O))W~N8gPdwY+d7F>MuzWlWjfQn`TaiQBh)a*wzg z*Y6~|btkY>ZGDODu#d7AJ?74#iVrF1;MRX#;Xs!?E)uCH7&mInYrh|^X9g;$UZ zbHgTIyG~+K=W3jE`}eODBi(=CvzDJ&rg8au<0|QQ)9>tiSvB}d{d>a}{>=^c@^8=J zy4K6A%?xHO&5@AfD6baFmr8k?>-g+@l=E?3BiZYEw&AgPkFyKNk!I6Aje86C#c>b2 z+P*LVZ6HUIZ=E${YNdSrnS4Hs9$YD#jOun$%a=43>LfGgWZ zD)C{>dGvc=8!g~MB!ZnkioT4*)JA&|P$%s}E*II9Of!n5&yaD}-vZHQc$*E{U{TMa z*@MkLcbd(FFAIE`F%1@1dKOLi7hFZz$Ulu4oZhw++C6PF{Hc$L87@0;1z-SWWM(+D zU%iW*de^Vs`@*|^^{$5L`})>5m9Jr|yAN@=oJVb?2VW0KixBETlC=062*oPa=OI*- zws3xYWnni%eXvPeZ^VvNfS!C$IqK0mE`z%`ncbVZnL|nQN;)caOxdq+%Gg(S6tjlXs^Dlhp;){z3cOITwRqJ(^{>; zrfbS&UFEV&x6;s!*)?``+I-h~%;HUZNNc+d7C!YXFnAoe)WTb}{z7uH{<3&L{sg+W zJnumuGd2XbLr2U&_}*5!lhfHzi=ENGgDn?jbV&>oLuy6R|~AS zXhy?D@2DhSlUmxSpY=wW?U*jO$bo-`W(_CJ@{6dKH>)o;>l)vzogaNy(ya7A2GlH3 z-(}sItFg0TZX~T&!9;1)_S}f3ochl`jA+7pD~S?q#MS>*LE8nqQm&?JhaRSGfZWR@p&Wm##QNM!sw$ z?StjuMefQ)?Yr$n1p{1DVzBBbjuDbKt}vF=A;zH9{V$G z=93$G)SxHDBy>`C3jrbL_IXm~gVqr<37wl0bn1pqJ)rY@q=Pk#O12M=$Shb9out%? z=!9Ysoq0oN@(tC(O@e!sAHNCw!g=`*izJh!+FmiCl6t8ROL4JO`%9Z(mQVKnY>vAz zw^tSj(X4!_a)0A81s#^}>r;sg(47Iovr?ejLelvw0PX1p`b8$E0=j#ycz+K>-*Lan zmTILg#44YJ6;>0DfX=!@`pe~+GOY-ZZV#CV)h;sA zzW<{Qc(3v13(V^=V^~%TdvR{hl=5%pA7cS@`}j_=E{&+#Zi>aq_^u>D9YMk#PvBS% z+Z;-7tAJh=?~r-jkcytZZcbk(kN_&{LoSjD_ZAcH%1}MtE5gJ=Tqr|aLeb%wKc7pp zxNDbhD8YQs#E=ZiOd$cQxiW6MSp5}6HXaVlX(Y3UZ^rRpz@z*v0l&Bu{JhoZ%%d_W}>zzo#>fYY!_Ky5hwc%6Lxfo`x8e2qzd-6g> zUY09*aZAYQO0EXMHcaM7NW`H45^&nkf=&;L(V1~t0$iCVCv}#FDzQoF$!pR6I~EAh zQIfAPaqOt}2gz2@CTgT~`Pl~SF=(ulqapaM65EK)K1LbJ@z^UOS!K*3?1DOt5Z2eo zaXfM9>>cr&eNUq!sDnP~Q*~$U69|8_v6|M=Gx2#z{}6okH2WtC?nTd8+CR?)MrN71 ztD9ii%8-FDJy;BME&}+i#h?GD~kGRM1B1kMBM~V<+S7JEb?v4gkq{oJ$7*uG_(0{ zKXx!2fk#u!;tciNR1w)hjxbTFS0RRYK;oRF8#{r}Y_m(b48Sxfs-f8m2Ul*N!9A6D3B zjx%WGlMTVp$A@is%@XS*S`GMV@jJ}qhJM4Re5p7=l`z3Ir7Y6k*G*c}@9GhBwm#3U z@L9-`#ag9tmvSc!T-jXjLXmA{f{1MVm7i0Jq!oKgc9FK~EA2#&pyRi%OA5Uk2=P|B^3%6b(;J6Vk2Y`SNslbzR7_ zC}iRDsv*-Av0EBclMH;e8coz`ADPt$=ZS+GwgJ^5T}6KLTIGf~RfJQ7K-1YijI|^} zoK3}XEmQcu_5E1<+o>7d|3gyBlZgCOsd{-I&(nB9;NUL87)LKK{aLRXf-v5Fj;^0F zugQv;*R3M+B$S#eReHF?rkB@g?z2%tK&Un#(`^EcWM`M9EFXjEa9@+m&@P&HYkyl5%FHM>YeWuquOk0|>iqbt(blh(`cSvV zsn)`W8e3^$m(2a6roLt`z|9-0O9vmIXm(Z$Np!xc0?@EHYWgB}RJSOo#y*k9hR-dku5<#}4g?n{`G z;}eSy&xJ4|#jFl$P@bJr%%i%>v|C#bLEs{D*=d6)L5>5o)539Jvlg>3_^nz_6UIza z*C7`y<*@mseeH3>*&bhS;A*mFAchY>-;C!V^w-e4RUGupy5fOl4`0{Oq(I_;U&9FB z;28imhkO@26ai=@ly9Q)DF?rr)0N`a_4v$a=LM|kk#81BilNF`n#Rtr?5J0^KMF}X zXY90CO|Ywl{$zqzb5q)DvFpU5=o=e0h&??u(^VpIAHqS?@YK5`Tr{sUTmRUQbR z&GUr}?O&$Fpncy_-7c=nz&V!YX`Pqu!^={vUxF|5zp|s@wC#8k-;R0#nxwv;UnIij z&{tw}B%-3i>Q4T0G+!dMbk6;L`2#$;#4o0jff)_S83Q*QKAM`feL@XE6eBOW__KBT zaYxQ)ZcEC9*-Q$Xsq85`PmB74Ct;@}p!bq=W{LL{%o5oI0cNM#89Vwun2F;Odai%A z4ox7?1)B(ATz2@T>&nG6)S}bUJ|+ZGlv0!2G0B)aXD>Y9cQbpjlbr5Y`HFD+IJjw^ zjD0mIpPU)DxX~{la9Bpke4kXsfk}kbyXNvAQIP%s^qWzTKI5Hsqq!K&gogCG?J(mA z)j9sp+H_aarn@*oJ*#-v1pPmgwu#o@>i6rwMt>LhF;?^EP_PfG*R_Fsl}Du&r=WGO zRX5kTJBJUCQ(`Z#+y{)Qka|Z*HA;xzaXc&%m-B|o=R}8(nI3gJ^D-RCYWoyzZ>-vX z8>(4ugCPu=;ZPFZnQMGLL%a2MO_QAGP|8qek^mhQKycr{k6-?_XrH-fi9w`Gd(i(w z*HJ8RyZTTA7RNPN$c2P`y?Rh4n~D0*rgqYh4`(%Qe9Go1r8x!-yVEIlh$A;S2)jhy z&dip7?47$96_IG?JqxxdE-X9OFsU_MMb;4$=cKlC!d*x`@ zuk`thmeyVq_V(@D%t+TTqKn$>Z2z~*EA!zvQe?dG!L-a^-pLKyT7$ZeZ;fq&OXr1k zV9&3kK@aOno#ngER(dTn~+j zdi;mYX>Z$@D?#jJ;3n(N$ z>cSI2Ro9+3AnU}90YE}lkuUPmNSNwkP1WqP*fl_?Ll#738-}mX9cJ-~RLG zET6m#acd~D(?-oD&b84+H47(~6ur5zG9E8=%tyZ(Y0j#!idJs_t2SjcxpXvoW;rG4 zray``a6?9$1toG;J*O9|-eSeV$BhqkL0XlC^wCnSrW&f&;%e6>9}wz=PM&?EPa5*K zt)?&HLN_DH8M^kT|2^s28`S8uYyZuAD|YRT{xx>(E4#b)%l^6{bo@VmYH8Psd84H) z4PjxRn8AuDve96lRty)bc0174;>lr!a`5^f-Grrk(+l)ks*dNx0($hDf0~+{hff{r z?UT?joTTH{3_#``NQ9|ZW@N3^l16hSbW)*4&#FEmMWu3e=JuhmLrfN;q^#5W#JE>E z(opR_WPs7H*sEIx;A;1`var>@_PNTQNcBrPMsh4sH?%V@?Tn)vltlVAJ>p$}_P_@f z)Ub3(AVH>&_d?_;tgT5D@dSmZK*F|$9qsfwTF^$1QUg=f5d{;9O}{DodLm!@$F)XO zax8d`;gG{$IZF4VAqN%osYeW|toliR)PSPe_3_)xfnrY8h)_tPjmi}+w506D1?UUu zEY&b)#_g#KHl3*tt%D|PJjx&X1WN);DA;82d<}$VTTi*|J;vm@`9h(nL(1}_cJqX? z=5N&!^;~f#u#xbolTt0Q#}Ot+eCS~Fo4{N+@Lv}CHw*`8uAQ(;akw^%!)>gAN=fTB07;WYx7Z6^ke)l* zaHP9?_r1Gs5kr&1i;Ov?Yrl{ z%#lx{X*i9sUoyPe{258C{9>6N@y3kZoyFL~BUf&<^;ZI;N6}OFxJ<3ocmF;81*)OH zaC|g>%`p#$Ojvhu23X1X$LO1F83>c(8;@2>>odsUzhJStNaaWWDUrwg=w~$8qCJCR zyocwB@I3S1f~k)qP(ZPtQ32}}TV`CEH?_J3Bng!x^9o?Dd}!8w4(q};Hd9z)7y~M! z{jw2~MAP4u(G8wx<*=tTm*g7zY+|7|q^|c=haI!#vWZF7UQadP8hp?zhD;dLj%h#D zsKHzDE5^pCfmrFQPAhS=yT97#cWjvBCs%?TzHVO`a`;MQ$l=f+r)MDj;n1FtDAF}w zV`J>$KvXNGxKyW|h95ktXr%X+zEh(n2l&b#de|ru8fV#!2+OiFs+x(=Vb9UTaIg5y zfZ+Ek9AG6RAXMu@)*M^oOrn|-HiVr*rsyUjcFp%_W$~Y#T9vA>Z4YgCNT$Q=~_-FWB{$Ee$#_<>cash-npM*mxhccd;NkdYqB@Q@GQ_{(D#WK9>2ev)3XMQgnpy1bzKN z%3@srd)lahMp_`8zq&%1v=S>*2YI8;(Rx21Fyey>wO3j1-Hg$?8lA&tWHa{(sMf-w z?>e@@**Dp8JqEcjR64+v>4+(%N6fKofBol|(*7En3a&OqEvbN=+eoZj`PeR-<*l+* zn_TH5ldD`hyALTOTFL(8V>?ZWA2%l-8{y*sq->Oqk-^!Pb8Wguy!C(9nV2xW;(!r1suoiY&@ns(fg{eh$yu zPija1Pse4t@nUxdS`0W;?47;_x`oOfCHU~R~Ju`-57 zQl`I@l<^NqneZjN+wRp-Yf3br#F}`<2B3QU;6{}7Doq0AXp*R4V(eUF1!HHgnB`3& zi+A{nS#*t=+D7$fs3>2%1xi}B&7iu`bhz@1C%hR!0pOIat#dA6y%(#>b^rxpn0_!b3&Y~|BQ!66+w&4w z#zq-nyq^^s-;u^8;O>t!%dinxo)r*i%`O9V;DA#k!*uGYvjP%ED?rj-*g!`8N;;gH zW(HRNITg39#SR-TSxDX7x?tQ&RpuHu;8|A4&E}?zt~i~@1WS++of6D^)u2~!u^9r| zQyMhzDPQ%ZS$N%t=s#!yoi|e($pl8P3}7~aG5cQWYV#hPRjaIOEXSN>t>e+8#;{sbpQ=idqn-0`H?Xd8 zN%3JqTUI}@1b8h~Z4-2>1L_^os zesFwsuDWIw$kd+q`#e+XDV3?CFbUUT|NoBDL>c{eB+weOK8TTPc@Tlnl>MlG=e-R_ zmCM!)pZnP3=~gKAGOamUKhI48?ZJXZa(df+9D_S3+cudG-NDsomlLG)w5e$2!_lH5 zWF!KV)CLwirwukO^o3q0{qgK*TNCWKa6c60 zEJDi-fj()DIivW#+r&2Bm(x5>nR1MiV>gEdSp9M^ zpQs$)c&5y^dS>|%a3J&zG5A>HuBwjgG(8hYGqy`_H9PaYI&=!=QMVc zy`|yr?MCCcQ-uo?3ovEnNa>@pX-4%E$900i!n;s}i($}BTv+MOI>HBcker;*$WYB0 zVApRkqe$~+238h2<s1{+wmZuc8iPAZ>m7^Hn?2+?^c4b`s0}Td5gNiI!{%Tr2wC|xmnc(@WXD5%% zzUh5d!c*7zA4_XSnn!V??FVhxmW6D&FC0qWd#N(2zemlp54=~GE&Z@=xF^Wv3p zTbqu+2-ETPbD?Pmby&8fu??G1i3Fix0d0;M8DFHK7F^>+Eb8(Th>gX*+J&%+@*Lt& zw}81Ta0VKd!2>o#P_Pi9;~J8LRm4j&g=nm4T~7J853Xf}thMv_u-QqRHYJ&9m6%Y# zf(dOwK39RL{Ptlr*`!S*4gJ8OI{EVZv2*CLOX;y&UdnUE($@Kd6UHe=_V5Ll!Y=)A zDx3Xi-lU!kuVN^IYb|SzBgz!!)x1{R?Ku=jrkhdt^iBHoqxvKZi-Zf6aHZu1r*P<* z;sANkiDw7GiD#FDELd#oSzR1_wzXBWB7qA&7ICRjYCNDhYr$^gd&Dx zJgjYxL5`#YlB6%bZs8Tx6JHCJ(JfD9DUBnu(3LPy8Qs>Eu(LAy1`?Vd7Xo&iQRo5J z21LUZ)ffpu_agHBDewidk*Ig#bymV*Y;csO9&W-VL8*MDN}b zAbMpR)VRAJ_(>?;zdsa$e z!y^J?=rP$M>z>MV|Ax6VyFd3+lKs-6fO7Mil%~tQFM=%SeUBLvu{lp2&uG)i@S~L> zsOWnkfH!ZBIRZo^IcBs(H$tQJBYfAfDk!kZLeDIQiXCRskjdgr;wxuER*H|e6nw;{ zRg1-8L#doft2tBUaRhUBWyj+>F!CQrTwq7rB57~}DZi6kOLOq#wAxoWVpBA9yy#T1 zdyW3&f?fy5q|?9YHKg_6nqfARv|^eg_s5;ssTTF7IlQKaILqK zQV6_W7XfRprgtt3Z`9lu)^c?0bU327O)T?!SRp0leJdH$1WUW zUdOY437!G4ni7w&bFff>0Fa7L=OgLbZtjQBw}K-6rMHiOs+Y-O7_Sdzz4E;@4rq;h_> zy@S=UEyj@VhEo}9mY`ale}w_fnVvALmp1Wi{Qg2mCh)KZhj;$X zTXyW&Q9Am?{-d22Z;YhM@M2##lfnQ&Tvi&GdYSFj23BLzmX00m_<2zCG)6IF?(Rlc zadTWa_l)7Eu!e0y<=NiaKt7aOgL{<&cb;ToqSdT0oG~&z*|U&=?IRoOqyWkJo?=ZS z8;s-foi&a&dKv7WPWg@hR(W8oPZglV7#g4SQVf$@i%*6d1(uA19=`DO#==uJj0Lsh z9m||l$6UP_cGbY4A=xGv$sLp$uzg8FDy<&a+I(=UUjNjAT<-ewZR*yngz15#llX^p zNPVl#ymapM(-=}&8(K1|#+0bfz#D`9ziVK{E+hW?)zG~oC7xYFG7Fki1fnY$^AUqZ z3P;|V`n4Z}M(!*=%aE(kVXup=+o7(3)y!W?@GEO!EJ|x+@07B&uAE_M{U1!N`;~@~ z%Hg+J7hy>0L_xVVa-sK2Yu)tqIk9rBozPeBcW;yI7_@$zi6rO582dzv+}iI(`8ukw z3E4?zzU3pT8^hZldIn$Q532{C=MQTJmEUI9_t;F?2d(PJ2Dl5#`^}^!C<7(4hfpC^m)6@ zJoAU1AKz@h;i2>6E5`^32eHUIF!s5Hl@aodmE*ow(A{**@GhPguGmeLD^Ow&qiseX z$VktbP=27tm7xT+Iz9_pW}I(aI9fjkon}^b=!W~2f7Fo5nGuC=-FD8<2E#I^a!VDj zpLwVuh?7yYM}sCid>uw!J|cSM26fK1o+KkZV&Cva!!6q|hf|)5YH8;Nb@o1WcdeuL zAAS6($P1iLF6#FT*-?8ijooW9_!1+KEvC9OdB1!MOQ|f4Hh-H23c19(ku)taZB`V* zB}T`?tsf06ID`(gjnfTU<1+~}qTl;vtFiT}z@bC9>{iP62HP|Ia4X&NOvl=tl7rm+V(aF^6RMbb~01w#A$-aWz9SMQQ4gjCoxspXKaTO z&;dFud7Ts5P6jX@)yV)CzKGOTzvqy2+f$*hKY6?mk+9TiE(r@$Cf{(uoOsP~--{78 zo-5^O=NwmhoYR}}D}YdCVazOl7;R)sfT67Ry7R7B8mYw$Ng#9TA{#553nMllu8$O^vzC0e|&o8F}3~ zdza>D?x|ISSGBIoK+At5Y{K*Gtw7tLZi#;lO zf8m#0bp%4#@F%#PK}GZ%324cS&Xuo4CrIj zo{$I)N?4Sngc%XT?)J_V`oVq)`jklciRVaY<}d^5L^+)I)%@Trx@})qwSl=WP-2$3 zTjqLR-WBP#*ll*IiJSwAG@@U>)xtK02Cdh~)?ZK?bt1H%_qp#SC=vz~>~b>2v#X_k zSmR-!AoSs3&3g9j`C9q*Um0K|m#xaW1_lQC3SU^bc~}GBD#A4w93nn9-mThhe3v%> z8L!!OUW-s|Lugd^r8_uLO(a_EB9VxzHal$>D+6pg=pqJGh|4t*2OE&0%cP&m+qkug~)BN6kj1J5Rd)4sV4z!W4~ve>X-m<7w^6eRN!NBskdei-1RL{5hvM;bdl^2;bq0hI04YXk zknR5;HjM;F*G)qDkYtq8Gukdo`jC`-hArY}ah*O7&>bEdZnECl=(>9xdNDf|i*|_64)#$EiAF9EdbRk@0YumY|RE zjGn}&t;5~yCiyYutRpvRRc(SNcF&tkHUHeFG)fy82LIxS7iE64V}@4-R5Ks{@FVz? zdWw@IO(AXUKVS;!d>qO?Osx*Bxh3$tj(jj)z7s9A-zjli|#J;pl zJDy$gvgGSn=Bo-Xh1k%EEc>_F0&zPoWqwNPR`3gJ2xzkizphp-eArv1$eh*&>6f)`-3VAnUWQ0|k7^zd)L8^IzQ&XhuHc1?IhBP>vPV z*7x!@3k^|V0I^YPO)wpw%h#MBg6u@@z&)fuDxEJl zusJ&tlus6xt{Nf_9Nx8^sxX#5T=>PYqEMSnWz41y3zZ0TXP-0W7I$lvlWF2swx zjpuKx``Zi*VrI)F3fa+s&mS4~_wqCzQYQFq@UEg0!?F~W(rHe(X(|}*^)xHc7tj;H z7YnYWW6^L{x`{XD&nHRk2sWeoCv$dNH}^!FXg!hn=s1oK8Lk;@vQ%`b6dk{V9`NbR=)q0{n?{l5dM$dtvh&_Y7 z8I&1nw+FA^U&-j;OWn1xNNz%@&gKQTfUAR808rkDYO83ixEA1aa?G8>?S-HKsPCxd+Kje06oR2=E9jkiqsS$)aNc!M}Jp3 z`UN6ycEDm^DpkMBR!BsJj@2l)xdfr|>Cz?)S_B=1BByrRBee^^lP*bX*9<{5Ku1$a zbWy9wtF?7VVb-EVPZtbTU%g;y&#nMdckazz>l057!OP$J`?3$u8IMa2X?Luk8RCiC zgcD>G1LUPYq}|kPezIeA=GmlI)C*&E@~K~HkWy%;Rr~!s6OGnx?)k`_l+9?NRO7fl zLgQ?w%ekD$;}SXJ>5Uawk{fJre*M>UjbXd2d0iT)9}Pq;X`n`RMABaFtjZs%z`=U> zWo;E_uKXO%)5;%O?e-?jk1ms2W#I{@H6<0X#5rBI@A) z{#^<9*DeFU;~9hZInRqYoS(5kha~@3Q2PoSRMhgn166PN`vM}7+WA|Ls2PC&22k8_ z{#ou)1m~UKAfU;qIIpnA4EA|L6t$HKYbWwr&*1s++2Ho(?Mbut?G+|hRZDxa7?rAf zcj`nmWTkECjLbi(?u-{@Fbe#jRn>Z@mwSeA{(@cb8ry+$zQegV^?c#bt_%bUDYj~0 zS60g$JUOyPyme&C4o&*dr2QP8u%FsEKUc9|U2nC~X-l-RR^g=m_=c@iwXiczUAt0u zC9_C7yl~WEucC=6-bZn-<_ak&sB>7=xjxmK)#{2ZonX4npm)k6hi+St-JTa55bZG= ztd8PcI3QO^ofO#4t%w#y?MW&6(&kszL&xS8dTQ^Nx`tYFjUQ->xWz_)^LA%wgUSU3 z8dG(|eeW~-?NF+`YJPKj2p8s_L$TTN#YjqC^+M5=Rx_`T;d$kj_DwA z;S~lsyTtWNfmV)mFp2TQ)K2R6OS>zFPw}w3Vn>6}HhpGxqzMAtGoJs5e@Nz<_`LAEg-g&&L0mLm66a&U^OCC>AMd3O2N?a9?eGSE zRwkOMhR}7kQzK?W?pzfxvtX=YQA^SCHsX>n+gNMDrw$vlg~lY?>dNR%R98Ntf3fwa zP}lx~*Zl)NoH(n*`m7^7*h%%Q*5SG=Gl#|<4o$U&RlH%GR@c{h6ZVI<)^iGDLS4Ri znfUB@C!wGh2_##d$tcBEbi#zMVT4X#8jdzHMF1gXSMxX4!r~UAgUz7{=gN&|@kM5w zH@+u7`W$4P%;@5$$Lpqn$^A50iXDrApXBST)Be5ceT`bC%wx0^dWg_>JO9u--Zfd# z6i|LNPve?*$>4kjsM-laUf^kBJ1U-x2)~@(c2*6MPWF`+SYiyHu*6naE!HHxd{Bz% zY#s4T+Q5KfEqAwoBqR&(7I>xkO8!Yi=N-m9hrKBEE$8H%b$6%(G?wS+wH!zM$BuSdic=Ps14OC_ zm(|Xwtfq;wzQ;D|gmgy%L9CK4#kW87P=ZEBmw+%tXXj96t$0 zCC6w2i~!}Yay08}l@+Awb`aG{$PiuN%7%IMQ$rJ}59&K$c%K*h=+J@|#!pu{KLP7Z zaBP15Pw-TjS8r{-Bca93Z_{Za)u6fqXF3M1?%rZLrKa&M0A&u-I19OFK)R40zkL%!5 z49B2E@HIK$>HZ-vW1f9y<`O`m^XZN)BpahmZCiqGhq76f5ti@%%OhX;V0D5MkgS}tziu~WD6Hb z%OoK{#EyBG*jhZDzvXjg|C5)#{fmFdf_%P%uvJGPrS*sWuj_`3Bo3lO7B-1N!|e4v zz#3Yx!ru4f5{=s=k!<9)jgce}s#9#-)Xx_pK4*K$?@7tq<%JHD_3_)oCjP z$vr=D*P=OnxoF0y)MUNyL~F?obuN+{N; z{2SB32iQ_~ilsP^RN)fg{!~jv*KF!L>6f2aI zfWoQ83V95sJJ($i^NAa7CKW0rMvs8wo}^sDAPH9N{9QG8IRK||8BmcV&OmXXX?VWS zRtgSiExsc^3MW&mvo0-84+bu>#?AZko!xg3pS=t7W9PbtWczgC3N#1&-pSX#MDrmV z(S^N9d^?q=dD=HgX~hKhRzyM)oj6fp52P^h=M%zD*ZFCKFz01*ZRS|Vuc20!E zCrExoaN*VgcCEM)f_r%0$iTyDv)~c8 z$c&51$9m2$J~Fnd73P9{tonTBCB;Y16E%U8cJ88e?mV44OXqUs;r3}d*J9X{zBDU! zse)Wk#{n%-nU|Q03RWfAyII}S$lv;tKI+Y6nMHI`N%z?{#4Iu|M?Xwn8oze%fd0+j z_Q(FdW^e=VYx1|f*WYu4&*Hsj@W+~C4jjQ@rP{(lxu^=@v&153Kuu@s77Pf%av|T)%X5n5a z89;{d;+Cef-E@F9Go(=rXc!mVp8YWDVW=Bqzd(N2ORWs@y?j*r{dQmB+`58(|2o?} z?sA~8AnQT9lZ+e7fZXvlaY&U2#<81v$!K)vS2EciI!7t3H35Kghb^ZM>)B)k=K7qT z5eFXYRN2n$E0B^xF1CktqSK;8LnQi~Od#82#Y_F(5f>u6+g7_MZu8#iLKH`oxYK|S zEd~Bls$cTD6qn_7R=7~TSid_|i7=mcf92nn;->9et-kRkCTJ>R9SZPAWB7H23;&@J zZ4g?bY?tWk6v~;kuxU!Odd{kJXXv6%e)N!&D=J4OX(+#a?*_N|>c}J?jek3^<@Ik< zqKy_GDc-kRq1b*h1sOGJ&xEB-5x+VtW1#eX&M+}CRr zhJnF{fjUXkAX#6Aq}YVJ)|Mh!f7(daZRdT8q$PTC#I;D*pej9?_HU{u8?FZvJ^2}bPxR!+{XNx_cRTPdJ&6*6;I1dB*!C-FkAW4UZy8sX`PhOlTtq#1)@Y@YaF|_mxQmSE~8W$!+b5tgMGRr?+i?B zN>Fj(5gTFFmgvZY62rfw_-VP2B>a|bNlStv&5zw2Go*UL;9R3p-ym$4iQri^YgCU1 zPns28IkHd2eN7>4bB)j8EaiDj&wuC7BYJ*7&#VucUnB|2Pf`Z{X8%rqFVt@wMqz<^zxB zKf3*~kZSH1j${FKNXZ%{u6}P286V^1J>wyddsB;g6BLI2&f3H_W;Ri?Cno?jWb(KE zm3b*6A^X#hrWq~pl{))0>OTgD=0|T&3)q&7*m3O2Xzp{Dry z??RVU=(63WR4FYl`!_KKgH)W+^y1iH!;ujj7V`b3ZQ{+C&s!qAWQo5@A|s|q-{qxny$HK_ZD zi7S<8ey9qH_2y5xIwT>-JG9jLgdUMkUb*jiKODi6FGHY7{}dOltCm4wO0SB%#IiH8FC76z~5X;P>RDoRIblLt5{CxY`S!IV!4CT$dG zB)!5s^Zn)F_y0fay$zh5Rdw%wCL}N*dPW5uyi^7R8^o7EK!czh(St`JI=)0xUsDyt z+gekY2|=A?U@|bLha=Og(fCrER_Z^cv`sbONFh!_ni*}X1JXM6ru9gpoa0IBw5D>b zY4iX7*4q1do-;EE0rh|H|9);hpUm0MeqDR*wbx#I?X}ll)UVAyy<7o|T?FZ+Y!npa z!c#9;K=oAo4qGBH_MPU7L-kjB;25Xg2^TMk>5eXj&bXEa3QUx-DW5Z^H`@1iGShr;sM}_H~kf4vhN=3E(Jby z5(XZGjaoVh#~k@vo?u#haWkgl`M@$8V2Qj&i>|Jowo&ZWG6BdE=fGd_DOx#-O2}pu z{;Y*63Bv`C$=|vLn`rZD=REZ&y1aLtI~i(xjFB1xq&6}(^R2o~)c(sz)R2-dmyTl2 z>74QCR60DPeM}9y>{xoP!wh78!xh4=IUpNp6bL7VEL+vAdl@RvmN%|~q|0`5e01c! zgo9=`93)8y57*#D^?p8nwU|M<@9N6P+Z8%ep4Fi^LXY@%DA^l=uy7$EzkQ=x4v{`W zPc@sOer{8T=9dk(-rX-xe5wQStg(ZV4&_A#$3QmmHYHl$9LSDoF6y#Z;X$;%jxx`D zZ}Qag$L)MlDh{;Cc6iq4NMR|3D{gSk(?Zi)Z{ON7UFL}?G|d;q>w0US?LeVdDH~j- z_O5KOc0vok&v=ZDtLus7e2>}sGw>CAt?w+6gE9HK4t#O(4Iss2OE zt(rmZIy1!7v=o%XOi@!B1MdR2IWM(bl`*3}Ra)*VDatoqBNOYSONHuV>}CoJg*(zr zMt?hekC`d2oUY2jG~S#OY$pa1pRAvN{+Z=P_b2;183&u2USXXqXXOyk!Gx~3sF#;} z4>J9JgU4k0{Z&aQZT-HKLyLL+o&ykrX#mM@YXk_-kq3iIl2qp%#lNio`RJrV%sNO- zbKT|r<%kT~Mc;ClcLx1w!8Sosmjyw^XN;(ARbhXQefv?n&U@-8bw6I$d2(I3?B(kG zy;IwTr#mO~!`l}26S-ITBpVP8TUNQFTm{-18$q5ePSHQ*21PJpETM~Vs%Gz0^O5yW z`RgGI3(8^rQ@%7)&13dY>D=1DMqO`??{x-{M&Mu*i(7L6@}LGk>k9HdMKGF35@D*E zLymZ@OY=s_0H1XQS@me<2vgczVs63(=4N&&46?bz+`{)(O7(z7t)bKqvQ}4X_{+cN zt65TDhytUbz*wm|GHpXNQvWY9hp#2M0?-6&E8>&{Iq7ZoHt&vIW_NFN2g)mj)ee{F z@JP=1xQYa{?H2o#up0iCxmH~HVeW?=rEA4g2Oq0z#ZRxJc7&be{H(=@p)x&;YsLS$ zA$6_zzmp@Jy-XkXC9)_I`gO2V=71y$7S2cYb#wRdg~6?VwXEAi#2(IQT+gZE7xWLtR-*DpBldB^0$3D5b6 z`C8Y3hjd-V8l1jo{jvP*SdZT&bLHCD2JX$>PI1=lEE<1kqrtYddco{-y{7NMc0jpK zj;$s;Gs|!Eo4B*1V;d;alx9kW{wfr@V@{#^u&(c>g+^3pSt#_$Q0O`@B#twMwk*+R zulUjE*i9-R@9%P%gNTwysC^)23dBt4=rqL%QHB$ar!F`x)cTRfEzj{J(~5%N4f|`#SH5?dt>Aa|@>AaUT>GfXE^e|Y;-V%u zN6q>^Q{Ig4v&rI&}4JNDDw5?)tHMZ?3 zG}HK37K7n?1?UosG*M`;uMh^gFQ zJY$ii;&0b8n;k?AtEz4ut5#h)SIn+c+xS|*?b_`h%C1w}bYSQbaj;zWg?Aoq;yNXK zRfcw{TY>|Z#`?9gWm}oTM`dUt=9zL&Dw%vriun%b!p$188f~YWUGA*6S$Aw2Fn7o1 zLl;jzIB8akVH(CkEN-UzT(!1IIa<6ed}&^e7XK)G zX=;uZzrYuSuSHY8wqjZnwl~*`xy=pwxZ)cYP4#}xqM4yobZ&?D0r-bDz-^0Ww&=W( zbsvC_Wzl@!HCi;cC9J&{){dlrcYt4*d-9W3AH57c^V^SAhJLdT_0h`EpF~KAUf+Md z4Ttu#rVS{&^>O*mE(W^1@k9|^*=(ER^YD?~hD#RF2jw(;cM7V?#XU8@HT#ZNFtoz? zdCylFCrFMJ*Rc^n^1eI(%fr~0cgvYxs~tVjDtsCdcPX8kG#(Zvc?1i^ zFfb;Qd_(y1Nj}0CIJIdl+)5BO{*z4Wd*ZaF-TcUt4Ljk6%>4ZgoWU(+gOd3>Yi#vm zz!TwDqZYSDHjgtAarFxIFCSxny{S|l-6UEmZ`!P%3eR3tc=n<^y2WE%owi~t3Mg?| zc(M^j%HL~&zbiW7@1AFZ0=5R=-?u#NXG&JQY%D$0by#q1K`~p)%_Yw`3^D`zj#i@Pl5j^p__NC%1%5TFOj0#RL6}}JuF_zT2?L62o=&KS0~KhF zEgBM=XTVX_mAEVVfLX>AuG>-C@qtz+$*n}5?@4%@7lhB*5x}*YTLM8Xd`k8n=Mgwt zt+F8)Y#nbpr*(OLTI=yD0)#Slv)JpOQo3QVHN>YUDC7y~p!EdL_z>tmdm8IZK8GiU zu+qg|?GZ;nxiyM$>|Mo!k4z^) z625h&XNuhJix2f5PtlIX8Zux_m0L^7zKe=`2Mba^t$PV50;Z*@A+Ij4lI4>?h5r8JgQ zzIUZ~&z*15UsK+ct5* zO7cBwXNsFa@enhKHO|#x(!<=xhdQ$T`2XIKD^J$1*O?Hff#n(T(aMT3W2bCtTpLwA zRr7i@=Du9HH{p)x7-Ba&J7*Nzs~6T|foHT=?=FzVu(fR(D|z*sV($HV_;*hAZN$)cZU|bmWuV@;ifK(MMQkM+=T}Qt%~VO}+Il3mFcZG% zc1VZIassZLF1cy3Q_d-`!B#NhY$5vLZ)hQEyF!Y@r;P>|<_CW*tasQ}($ltFpdV$5 zHgVkApi}a*qTJ=(ahhDss+4%I}nN(A=%BIUZ z3<(GXs`WP2x(T?=$7X1ddf3>}edXcW2>Rk%8-9W;QLuO;hY8E1qzVrESdpiYbjdg+ixEZ`sdxXebiHwn53I#A zrr~A6#%qWUCtZ!_ge+{;unFC#XZ7lmX=O-0RatG-R!W^-JLhR~-Kxc}dhsHjog?$h zIbGjfKNZ|-&Aypt+e@ZJtba3BGN~rUo!VC0=XJfT{0f-Y8#7IYybKE0Tq?M0mtVg7 zOFO=|1O!pn(V}#s3%=-`2umMl=r8jB`0(Y)+pP~p{Pw99vsc}%j5S@PGjY| z)6cq5)R14U8RgK7TU?yA6^YR(jPh#i&cP)62R!>I%<~y6_euPUdDR4|*N88zE5>RF z%R6`c@H96asIzQlK4rx^B&u?bFv{+si!fZTXf5jvj#h^}OmP?eHb|-QH!iddfhD(8 zB6MQ8c!%`>rBHE;h0q}17G8;Myv@k5#n9v$mk{RA7E;_QQf!G7*$-_FRF@eqWoI=F z?sUW6V|SsO;;nP&6I!g|fph3hahu#{=10Fvepui|Tz;v3i}3K^He$bKvD+>x-j=Th z?@UABbb$MLIKRE^oZ>b=<7PmZAUhGVnqA%(NN}6SP;0gCIJQoDyyO_cJuA3BOZ=yH z{P0(B-dj6PtYTbSQ35PU#m|~O379k!`O)Gh*&HUm*UMZo`2;e?C(kH;0zkNw!oTJc zJN3^XLkj{7b857&dw21ZIZiWNuxW9*CV$JFMxO_uc3xY&BY(@M_-?$&r@If&9?JXh zz#$+o4bLtMF+3A-c>WongLK}IBPbu9J<0Igqis({A~qJTiS}5AXYGIu&91=@Xjs<1 z54DY!g?9kEKfAQhXHl&0iQ{>2fm(# zlNsjG^K3P8QJpn5r^_>gYv^UmchzPoP(wdeho{x3Z%0jT1GNxoWnEFHu}l=^99n!Q z>wDj2+q_w7N~%50KQJqk#+K)lv`|w;sr+(S((AiYRgwB565xN1hE&UxO<)+AF}HHD z4hcXzxrQE=2PYQZLFy<%N_(JE$k0zIb^hljF``+7p5#5rZpaK8pRB7t zF?sG)|f#u=GAgy4)=luIT{R>EFUO zV6PO9zO4UDc(?e~%v(QViJbKT(jsTQi?DN6#8Ze=Q%Ssd91BU_(hUq2K43ExtpWXC zYnE{`$TfGcQ%qgh#=IihUtPTJy5q(*nwVl~yhn=kj3V>f_20SQ-}An_B*smr;AdKKJHtIfL&uu4&^Z^?Q6C zKGpfu4rlT8wRf3HG+2D;Qe?|n7#z*GSqtU{-V&V~-vcnbM|x22w=QXB)o`olI?*Ie67IN8 zc?^`ddLAy`*`89jC?QN+vpDQsA+oE_e+OxY4Tbd;N|2)14W#WBX5y_vmHNKi`qAk& zT*y#j_rJGNKZzw*RhkK6wfiNuhrCNUT`-M8V#L);EZd#sLvF-XD)3$6dyMZ*lsSU?)qHhb>Vxf>ARs0TRi5EfI4(VR+lcEL)Fsi*0eqa#l2B6{z| zZ&_)l&UE?i5o26vVi}XvMx$o*bHGOb2FQd_KA={%_vr&HeC_SodA5qQ=#yZsh|PC5 zg(Q0Sgx{s%w>SJQ3%`Z%Te9DDz9M&}Q+9ZN7vTG}72EHB5%BUb&I^EH)_J?V_CmPJ zz;aBy_niQ&94={6Wpd1SROn#2FmyEEk>H{SFolbI-x158&zRT^ne!^ znquNh-(hHq{PpppsV_kjn_)xKC*GPxlZNZCXfmNwV9`;|J+M1zr+{84K-_L7m)|g~ z>Vp)^6v8szC0d&g>i3M0<;+rdU?G(^CwS7-5uUmOp7hOXVDoiN8=j~|0L8?UMgOWh zkkeva1xYB%;d751(>5I8Ff&RIfmF5rsu#wyr*o-H@_MjG-;-f^1ENVVkRISl2ygFN zzjRgxZg~;+^@I#t^!N>(Sdn*wIpqRi-jWge+P5Q9%>N0}CjxlBV1p4gg4wY4UHO92w#QTQYlo~;8ALZxp1WoF^EL3Y1* zN1@U1678`vA!~#?A7nR|NbMCYee?=EM{K;%Gr#qvM`-=4!j1v^bG6C*0P&3Z7ukido=L7>V9viF_@0H{|C4$XqJ=l zQh1S=?0S*dn>PR1bYfm5bAc7BzO>W972k~TiqPf&oFoHrOg<9Gs`lt$4gf3+^rfBA zT3FJeL<95g4Lcj&xhlanDMF|c`ORQE#KgpQY%7tNnAn??Wbmk~+Sg|onU6)(n_$ZG z6fDm|io-h84Wn zxCJ!Car2f9S4lEZ#N^pfBT-2*wa4Vx^FFe{FWU&!#`4k8W7!UepQMf>BS_hf4nrvo zMb8s{G*{mE5z|GO@*#@Lc1|Z%jx-V(@$V0uKMy%hSmBGC(Ku}Z2a4(jJzd0YC2l;# zEhUagD(M`pT2=Wc>-Qldy93%q>#nPqU+47bjdx}IGWr;E&-NAdg=m_ z!S{(VQ(BjPL+QqMU|-l1tk~o^Y?E|5SJ#u;?<521W0~~d$);~odS$uF10x8C zI~R+ZAZjYJhHgrC0ID%0hrP~nMb#()6(y_gSW*JRN!eN07NAI0M@@ydhip?os@q=Z zMniBjnhIM-ah)v4bN5OU<=Q(btTIFXuQudvv=PNhM!URXl%`FMl@2^`3a2qTjy+>8 z8i~=%Ac@|DOoHctXBtW9$YRmDLBG=7P7;!RXjBv*Zhc<|HBss?CR>? zxfMLX@)ikWG36l)b8C_0GxDgQ2~No4?~OddPy}!+*Ol2^Qf!wh)wKY~5Cb?Ui*yoW zw-P&^4!mFGiu*;^2Wo?2nF7JY*f}&~WRQ@JRTQbkNF`htGy5!iyGryEJ8H;13<+&k zH{6{-WDikGJRHadqsVaAELvgsuKIF25|7u=IvMlXOio1G=w6m+;~Z#f+;+P0AtO5` zh700cK5@xW=diYEcsUt#0&frTyt(m0<*ypsL7KI}nBi5EWXSIE`o@{H(|7k-m+WE4 zzqyR#LpwRplod{FpFGvj;V&Q439Ae9ETGI1B7ukLU~%1{D?S&hVtRLqi&7VW-G6tF zwLMw?ZQm+4WU2gk+KIC$%(=Fa#Dy`P{OS^rK^v-&s7x9ZVIcN3nSQ||-RORKyrJhI#!|dKR@wu7L zkUGTYmNa#gpbCsFw8sLu65^0dIRw$Khv+EVubIDsuz3u^qJ&%$V$Jf5oV5VwA!J^yE!3`SzF`ShP-p zP7o!9HC57oEXup?G0k#YnwJY%Fpl5x&IJ1_)D28mX6}$R0%A~7$v&dIdFB4O9R*z_GhiU&U z;;&zB42O2r-w;OxkMS8^`UZI>AqzNpXBpUDD(Ah@~p)GfVkQTJh;~Xo=`x zMCmrO7Ns+5Uz(K6thVXv#YkHUkLqFQdxhV!KNONAb~}If%PHmXD#C~XUkSkb1&{Ei zNHRUGw(5ybDZ!R(n0r*c?J${c!RNg4e2|Hw|j6&a2bHEsz` z5bq(usMm83S?<>oiRGtJg3UggFgbN5mUgl^tG)E7mF~)vPN!R^l^(H5Y&LqZGGYlH zlg$&}TuCOMJqQzW2N(WHnmxi&^{0jC>`fOL)7c8J^6xn__*@IQHZE|f(E3JeGCb2! z-gvclk?Wxu6cu*RZ{Y$l&=66BK>3Qf92L(k~C z9bz0)T^LNP?e(OE(yhaljR7YH&jK7-{C=Znb*~`{@?Qt(VfyuD2K%Ne^-x{XPEGGPCee=cSo#KpVb9Q2nHuu025l}jE>z~FXcn~Xj zT(3QdTeJs{$=~#!*yd>>I(~v5$k)tYL?j9;WhRebNS%DG?Oa~ z?@A*Tv)vc1I76j##y=ouELCTNk+#gn%p6}eTV~OjFk#O+wP$`nnbT!sf=m-eEv&2M zF1kK3e-TjzEh4s7JTqATdCEu>k}{(F;N8keyymKRuW*7|z0NhrvyH$(QlanydQWBe?z z-k4m$eR>+zx}!RL-BJF`y7OZ!CFy|DZQVI0U3X^Eq;%cs5vr2a!$3>doi0!8){oao z!DXyFz07Oler0DmNn%`-W@(>lTl%StSPywj(;|IZmN$k8Xl+#dtsY;H%C?-qohp7u zl4V4*-x-NbrXju@sA{KRn^$hB#fEYQgq71mWE~C!lU?4dJKU~MT8|Q!Kh+f2bhd;w z-Ckm?V=DB?nwkS!V9yEs4yi4~nU=5idaQ!@E{?`C<(VA}Gm5~Q#IBnOHCCxaR|LiLP8#s4pNA$-@i3nYl^n0r#w7n`v?0e=` zm7w<3nW~JoY;4B8Dw=huf~4SZJ&ht+scFK;bMwMw9Ds+$V;Qw9@xa>IVr3ki3rPTB zC>-kxND!7#*%-1J0v1?lO+xUjBi6G8@)#G`1Y>b5y0pANKC8>obNIR>Aq1EVD+|>l z2_e9=MOauMPm~bGkP!HfSmhGJ#V;}mVZxTlwUQ7f5(#0C%L03l1@<5zbh(7^4Uhc> zvEM*KcnIYR_07cL6?FxoyYS0_=xTF`?le;76J4){b8b~W=KpfnoT?I{dyte^RZ4Wr ztSWoo(a62Pw}}rm@Y60nd@NLLn+?lcika*4GGC?4sjM;1R2(z9b2qoLl9;z)RffaJ z8di3WtRYYtPXU^4q&+h3ngmyxCU8sDuzj1XZ&_}#hLtE!)<30B-)~vxgk)oQpSjaf zYMUlY64ESbNJ*K!t${gL*1(971zLs@vqnp(huE^a!woEdk6<}*4TD?{azhdA=5=qC zX7f0iLY&&fxM$|s7PG+o z8GncGRrZcG$9te>4Z1H+{RdJR8I`s}&7km*iLYn4$1|u>b2?!lR`eDS!bu8q4<~5CEfj;pn!SwKkbXd!lh3iKXhsFqbC|tu7r}T{yIQ*`d|FhgL5= zw7Tce>h43UyAG}HJk(p_V&~uPrTfFX`e@e54A(E=)H7@8P}wL9x~9pi^?m;E#N3=H z8hmtoMF^9|c)^jYwJbp?@u=07Y`~ni6vrDqCI&h8DBja}M5=^I6J(rfO#cvqeH7*2 zdNQo!SFyWIwgI2!_G)t9BW+C9yJ7d`;w^!KdKp$1YniJ9`TSi5HdhJa z-bh`;5em{DhJv^5XNr;MEF!sf@Kj*qs=;l#@NkbVJZx(|9ogob;<#V($|P{tZVqW{ zJ<;tdt}t|Q0kUwo9Cl>xJFdz`VK>olJBaAN8*c`z!Y&O@WkX`+>GMwTTBA z-11{+XqfAJjK8PY+)>KcNnv0o;2R~_k;@myIO2MP=O4OpZO8t0LUAoJ`{*&l#XSt`9`UGKB$y5t_w&79-07Bg z@ZIcCS@tSgldRmQpU;{U>~Y~LZPy_RT8~%El$Srq8)s996*bP&q7Wg%g(lzjkQkC% z8ZYHxfT_yz2fc}b8Ulqq{rgCHcm3p6k`Ex-R(@H1*~%}fFIV5hUsir2%JRLM4`n-z zm@IA}qb&baK)-&j7d;IQhqJCzSo~EuXO7&B=P;;d7|61iYdnX)jE|hbj~2hY+XBpd zcVAJlbr=MN&m8n_yW^Byt8TlJrUlwQv_OZ6(CiY*!7o+VWWnGElk|ZGqu}zvj@lwE zgo%K#!O7MHgkO7(2?*nr;syx_pBHEffynkz3lx{QU+@}-?el~u1=Tvfib z`{*)rLx1#Ay^~=>rM1Kduu~G-jw97kJ#`TRTo&VBS*r1Q1y|l|e2x!jWiFniBXrQu zG*PiIIWGHKi1!$^(Vm5C(bx?v8hD!PTg_>N(KswI*Th%O!UZ}8p6&&-+MhU?mN>z~ z0fb0;qXtHLF^2hSV$Tu#jAIF#fu-QCw_+=jt3{K^ycf=2E^Y{DSc2GNO__0tPT}LB zBjlETvJpw4|INeq@zjNqCgnvx*Suh%G{@yL7D}2#uO5N(={Q`h!x8ItIk{oWU6|?G zEB0v>6?p`~c~kV+@dT=glj%p)$Sv!*Zq>DJ;c@Oh*1w&shr2Wi&1=JT&BIMMY>Qnk z3l0cAru+*LNyorbb=fn2*NTrVD}F5hik(~qZ9bVO?tpsKWkl^9F7BdRyXe+OMpUs@ ze6|UQU!nBQWt1Q**6Lr*^*<+*#~{F!L}dlVFkkSc1=fD&mwZVH2xCcE0&3)RgYMgs z($JEUc|RIn$GsLgX`7;X7GqmtUaVOYxwT2n8$Jb&h6nfCu581v^U=7OKLNwdw`nMk zz^mLaJ61pQtB)L+Z6&_((y{-@?*Zd@2F8z3NnBaL*q8m85(vC)K}2YecM#nAJXoW1 zo9)IY8J*SAtF*IJU*FzIzqC%SJJVP@S7~RN?uWffJNsC#(z4<21FCT@ASJh{#nSzn zO`X;?H@BMDmR`G=ws^a~m0nPEdnx%5p+t=-&`Bxmrn&2E9!^f8P-DcC^*+xmwf7;W=AwFJx9$Epc;yK5C)j`fSO9=40J4#_jTCh(|LI4q>9p+|s7 zl_3lZxmP?(H#~L;Y&InC9o4-g3tl-|{92GVVda_=FhL{Afhn;tlUwp5U$D9?o%$^O zroYLgm%S}jeibs^xvITXS*D*#X%(bI%>&$S-IH+09=r~P>if@azVXoulu?XCIjV>3 zdRx5z8KtTOwaNM$fOgJ9nTZJX==WCd677Y_6|dC=LZ&5pY!=Wpenqn_w>~f{DP1Aq zohI*otJ2p?`YeJCchS}=Yo$;6aAHm+<|>OREQ1O@F1dney*0RT;@oMFR!UL_&a_~k z?sk&rOp2c4F$IrV8m_ugy-Ja%mzc!xA86!GdE-Phj2hlwVhT*z9Xz-CB}~7xlW`5b z=EDr*#DDeIM)*(82?S)fbY9a{s=T$kR4y$ol~>Zu*DwfgC0ts@H*me7m*t`4l4thH zFww!2yU|v0HkFS-Cbjw1Lq^dgyi1Kz_Z#n%Pq3P1g+0=8lEpp2;y@gxdiCd|@Z?86>EuLujv|0& zFbN==!CvAk-6=rtCkxqzHc_x*55&Lp+Wz;yyT5yW{BQOTd~iTi8uQz<_W{2w1wuC| zZMtuzkIg4CX4)FeweWL4BH(#|;bTcl@!p~Z;^KTMc;9uX&22@nw>y#+DfpOar(GO9 z3=KY<>(`@WQ{-+1f_(T_wJ|9^oLqeEV$ey%qk>*1Q^x8Ar+;V(SevZ>_1Ve0PB-lD z5vMHQ+bPMVd}ofI^2URv45&&cz;4Qv)A8=q@V$yPrtX*07rR-K=?^AB1hoy{t0KAn zCm|7eVUMo_ixb*&g`Y>TSVSiTmO*Z(f+K?P-Q~xh?j;*|bCc$AQMIOeHySfF#f~~U z4Q)64t9D%JT$G5C%-9Se)KoTJp)k&Pj=`f7XH7d?MZ{z}wPN*Rxc$(Q4hm@l_!|>1 zJ(p};8d7u0?Jts1euA(&9s%@sv2mw_Q9?s$>%S zI)?`jphMo~lKezi`!`X`CRE7&cGsq|jB0~M9(y340iz)01^_ zBe}_V$h=OV-Z5Vn&(f6$tq^0ltC(PkxmGh-i5(N1V-cksjBQgM*fNE*X|{8`8RD6j z#ykkqdN|zoA6ADAH=6Viq6^$|ERGKRD)9FJVyRjcq~IPydwcDGXAOs#R=nMbHdDrl zmQ5FPSU8%W8be{A5^}QlyCR`qW}lj;S?}nT`VrisSuX=To~*$zC|Mi7K@=P>6V?C1 zn4I{FPEu{b)9npn+|EL!jgZHTdHX(*3f2ls)@n50vly!~Hr{_}Qj2GDZhO@QFw|eQ zHyx|?h6JS8Ye*j$HT1#6wx43Oh(ag=>!OGg9pi&pr+_pnWNynpGi2SjR#8UJ->!d! z`5@{YcsY?RWS3>s<(g0|i2@fpi#X$A?f^kK(IT87ViO&9JE84@@K$!q z%F4?@$m_d_HJy0bwd$3T7BwXnCRX5o2@@4=OrLZFCi>xjS9c;4Rf+$vndsME`13K* z-#Gsl&P0FM^M9G>FK}V_KZA*$-uviG^m;bbEa*QM6YW250VZmkikTU?l$fY-siS40 zS?5Bj1bgU%F2Npu+T)R6UGEav>|E(IO13AAOP+6>GGDI!KU{v@QI|8ZM-gIwrq_}a z{wuNfaQxTpMSk%@?5pv_$+}x-6Z~2Oqx>yY?k>_^==kF)2@a5HoZ9+G6^K%JkLcuf3Wh z@$yf(xSkx1zO0kuDYIm{l+wIy*njL;<5X8ghAIz88|Y#!$dZ~z>|-2VDh}{2CuW?c zF$hu9$iJuC=^6VKiB;*q=h!U9w>rjeH_ek#!u@qq zi^U!oZ5(JW9{#`qnKmsjCQZC=_^2cl?Vl*^zMmG^n-1d?vHaISgt5VuGY}Zr(t@G) zzpSX4WdPTT13c>cDjYLNsd%{Q;ELwD$brI4A?=4w-)Z5XY(9;TY=)?GhH9j9R=I4l z(^H~)ZjsD?(cdiehXYhz&mnkGv94R~ZCGf2OZ245GX2COMdG)XDP|oNT5Bj|JNSpceVILH#-Gf)<8Z_5wZm zFHc(uUXB^wd2Fe&7)~I3>3^w*`W2>^I-Wgrzuo*(XAAhCoALt#wWf^3#*FnJ=t!om zZ2ckg-eJ`)Yfn0Ke+plh9j_VvanTFPn}cn`aA8$|v7S(8eX_9lI44w%WoMVd?$WuH zIPU(6V(;dEF5z=;KE`Gp9TcC7PSfLK1u~t!FU8sh2WT>bL&r2Yf|XNqKifkg{t%H5}8=n_5a$Il; z0Hwp%V^bmy5`B*)8di;$YDvdh0~})suTnUL zp^b!OQJN<8CNoyIZw&pAtvjiyR|;1fhn-~Nk;Y${jZlrxSlmC z3|v-Ofr5v(>}|j3WJGXdw;WMrme}x=kmaxYs>xUOVX&d$M)R|N%|6lq3SJ=!d@xX8FaQ~6%aS@fCCi+d=3Iaw zpo+OxD4Oj8k;=K-uycSLdotYWRaAx7)OHT=yaGXc=d4vJoo~H7OgU(>G?LQJcR-51vqP0vECuF$i5!I?7g<9d_149^3j7P>~#uKU8K(W^Rtc)j= zJ!3pE1&8_NbjVa8)+Ke~&osIwF*C?!%;7!P-1VLW;|ZV6G0Kc5QcDM+Dk)%#Y&4$m zJR*GS4HUi-tZt!6uAo|bn=Nd7I;kCtym+Z^b6{M{IK*q78LTC&*6NBOnEnLCVO^8; zkF_|ZiCSjMfVGiS#`zK6Ma_|IE5?{kq-ReLx7M!-^sL);b5eE19ft&87aPid88(#v z@&q%N*QTL9Dm;}UVeTj+VS2#d76~k+|B3sjn}2E7k~g+84)7v^~c5Y7?H?W#<7C4F#}NcecOx z$NzpPIGze=9>47o!3X0xTm@sHg3nNax|%^@c{gk_VCvtDVVAGq?T6ICY5LN5t2}Uk zr3D&NTm1T((9(`It_Q)0s?PEp{V2CC|n| zhV_M4Guw?HnU&FSHyADhH5QISUs-p|^0bL-yui${1 zT#F>H-B-?{B<>+~r%3NLS=G6)NWLu>W> zYVPsjP1Bmv~LZN%3b5-S=Y?k6N&Ywd&llPsxszijXbf!|<>?;K3x- z&zzX7gLA1TF1?9hBw8#iV-wkbs`XMIG}!g8M(TPoXIUVHnq$Evs7c#8w+U6({bV7b zsw)9C9_>3Vy(>dY!~0i}Yn%>kWq`NP4F3znA&f)@Q(du#_}T3R4H)pP__2vvT$I=Y zt&EH++6KwSVk_l4DKC(d=ipT7YW^2Um}X#VmF0U$52np;@m3-Snd;g zhJqrK&mhI5HI0{by3SO0i|6BCDg)>KOPkkIzuKAMcZPjJS>gZzjPI}4jSB@InJH~* z%E(+FTrQFWlHrM!g06WX(JC)I*4X(yr;{Sp=cmRBvPHeIaIJE<-9Ct>`~owO)R#gY&~PeKIQ2@kj+E$9htkE+hR zgL)&ob$=a>K1NC?7LZm-R5(1*O}I`R|GNaXi}A_KsQb<%i1KTc(J@2JiE!WdT8!3; z^LqvE z)SKnhBrcC8@Xeh#yQQPA?r zX}=?FKTiI1+-u3`N!>Be{y*9A^g%P=BJ4};EF-)L6^_iCJ_E+1W?VW#_9?$gbmN^i~ewED=^~W;-OR0p+n019uQ&TQI7tmrU(xJ|}|h`T0+<(>t?t(1`(Q zrob34wNIu(8%H@T0ck*CFD?(&uc!?5xva|qZBri_!)>L(OR(1<4BUR-@Zi3jUps=F zq41&2!Y7MmB=IB;O26X=$d|=^3BmO&FxhJX3Bbhk5M0&YF%*<}B<6w#Y+$}w|2PXc za3~WbK3U)SaIzYA1AwOm@g=f|BNG@`wB}wgIRb$}J!Tnqbd)tAh@7&n(K`4`rK}5% zv+gsVk49PJ0;`>}zSB9MvKYbQT*}gv3vWjwZcgFXVB(7Mawb@KRw!r!PN#*&(?mMM zgI&o>Z2@=xrRGJHf$*#Lw({)umCDbUe(Z-)g4r(#=C8?)H_zMvZjT<+F@qc^>touq zqBf^H0br`|#A5<&m=egz#OS*-gkcuOjUgYVZFwxAcU@*JM_Pyc#|=d$cC0{>de9|R zqr_FOT9T_j2oYGF)p4WIBq!&EG;+V?{K;kHyxnt(qFc;T&ZM&H(O#RVLRx;qBN?>N z?+p(p-zKrm3T2fcsWh~Y)uCBXg~gK~ziQfl2`Nn1zCQcqB5;$)i!s zNNSl}JWb_@;0M_#l~){Ocl2qsGHHz}NnfQUJ}W2d74I4`hAl?!`WTbw|KXca|8H9S z2*Z0Eh8fkGJ*VpeAuQV3wfQz8Y3*UNMP=qEt^I9?arIowJNHf~BwJw?!|BDjAXcb5 zuFB_EOU=$}uBUO%B<0Nuj2q^m7Mi`NILpJh&U!k7CeP+JQBwVLd3U{Tq)`*O9hmd> z*=7aaPn30vyWR8Jyzck?;+(U`HzE<1zyf6C3)^IIFKCqlz(>pvy6hEPsVeguUgz^{ zoZu@J)bf!^`BP3a!>zoWbnRVDRgGtQwh6K=b-x%vls6&ssSn%yt8;p;`8TV^jihvi zuWw}t!>{{Rg)kL?nzwdx-LsqPo;_Uugy4^K9rQK5q%R|XiTqBfHYNL3Q{_};Ok}Rg z%Y9e#L;bD?fIS>~zz_CWYMvjGmMNzt1xg1t6Nmq^o>F@Ax#S8pS6|bikMd|}W~%%^ zsrnk`kp$_Jrl2223(E-If7 zwRtI#t<2~oq@#0{8B27~Ti=sz+w28Id-eXOkVwB!WXO2r!E5d^R+65A_CPa0&*pwu zXFTt))~ln=$W&6x=zcU*y2Q4esS}mzXDFvD)t!^rj^FV2;vcwz-EtTg;C$$sZ>IAr z?zWA#FYu|OQBk+TarLazALdynhlDfmj|DX3(kWR~EJWxHX}NU9T&#=%W3wJMjYKD5 zz7_5wSR*I~8-nl|lueRFl#t0o(5wU)8H-MvpRp~NjixuRc5zwSe=W64XCNS~4Afu% zfONI03awSb5nkH1_NP4y(TH>2K9xjx6^vj(0?Lx;xZ=*R4J-;IO9J6X0cKj{GhmzA zAO|-!5{hmOh{DyTIuTIuMhJp zeBcc|^naNuAv+j1@l|2rr7+eu!@9H<*cgI18#D&k=rVXrAsRfeOzq8>vsft_An#=T zi*3r30u}lw`$oGJKnDQ@(gYK0YM1>jEJpKs<9*&Y6ab60ByS6!)^3>D%FTDLWZ%o| zqZ(o5zUa5>pOfTD9y^V+yz2AvY2pA;4A+lu5ewAB-^3=`Yxz;ArIK?c=8Vyt8a55p zs~id`W^8#;9|E!t-QUzcR9U;7*YD?ZHtYj`^?MmvYv9ew81y_8I0B${D}DyOsiq+< zSy#_@O%ac%yOkC|`pQP0DaM$5u+ja^SBYr2u`ujb%D}aOf9^jSL$`rz{_$b< z6An}@0Ci_D0*IKa$JuH_-lB14u47S<@L`bfYqUu_KDOyQ57@0#Xmko$HTz(Xd}S88=y0EOV`atn=3I45R{w23StXTj#UP3vE;yWg7=o| z5SfW4hk1ygpztwWTCz#JC>*tB{6^$QN?w9&Lqp0V=bJlP$C7u#N>+wO+oQ*cp2ErN zU7V9`voQ3qO}DI`#pL*i5|D;H+VGQ-~a@$YolG>v+&hta;2t=r6S)T zQZauF#F%H1M+t-&bqrDF!kik7rTW_}d`SO1mA|VG4{S;MLm0@r(IF#!btC3p! zSoS*COaEjan@mrBV*E6fH@q@`*Bd(WcRc`ips6C$pv#oQgb%ubQvXYv@i0(jcjq)o zYr6{_q6bV#{0u5;;tT*uD?>qu$tsUmG0Dc6WLxK)l5h?f^b!?6?U0ekR%VBIGVDh* zUs%omLPGR@R!e-}O44T{^DP(m;4eJa--#OQqT-%w*h=lvuB`F*{DJH3B6EHFgvg^j zS-=19VHhT=@6rxRVgu!dYqLxyPCm|I>rtF#pV_qrHO6e0s(?#6=39>V@8K7cIynQK zMPQ2Chcg%+9gCJQ0{3HuV3Gh=1cBNx*!E!dn!lqky;!{xVNLaXg+>gv_u7c!Yzff% zc~@-(x!{e?{7xq^;!L|B-~N!wblsIKw_?n&%Yho`78VH`L*`qIO>ry*R;z6&-+Z_O z8x_{!3X6+Efw${yt0q)7Ur8(#u}Xy9o~~mZ3nMUNH?2kcSulJpn#H*k1n0|9N3k~i zfrA~Kwaj*#w)8G)swH~8)pTGB9oS3oW1*%LEv6Yn-v& z8Z9Nc;gV4ks{I~C8W-OixHzW(aPe#B`&}9>9@3lV`3=E~7t5wySgYy6T5<1TIQujW z@ZXS;A34T3(RBW<+{K6TBL|Fzid&?KkjcH+&z4|>xQRk5>CF_AVX@~UYV}HNsVB7|h1C@AJ$l9+PbJXVWx#staKL^TWdDZn8MIYV?gVqz%-b{me61}5RTOo^Jb0W@ViOfI0gK> znn2KG|SM4ftXLY z>T(J0Gk4n%I+J+X-Pv5{LK5I(|HY>b2rvJ9ab=*J-+#HdbD)dgA2Fb3)u^Aj1pAsr zs>n4?a59?NE@q~Nul0sQ{^1(?p8i+T^I5eWxWvEj{0XlrvECvH8hkp!cWcv_<+*L} zf1329#!hNHdrpl%o}fkv2M`T44t&rQ3X7UE*ghHH!!-`w<`ugq7URZ;id`g$uD`9= zB8urWW@bBrhV}4w$5W&=PaMnoU!;~~BsC^Jl99>zQDVkH8AH$Druqar-$hem4a@kY zv@N{#(vmTFe5pE?(~l*LZSD!dN*XMWZHlpzLt_N>Pp}78L|c>fuR*^-7|)NGgr*ir zc;w5FmIT-GjV683nNs!Sr)uNK)|zVcxxzn7d`2*tEq#4TPWSR0g^d}=Dr9|{{mN>= zQa$ALb-j{sl!@zVXX0(mjSy_1+QLqEt(@yzKtu z45vUz^;oicDHHBX!wSVL-7%bkj)hK7h?Nx(2)EpX6;eS(o6;f`<&*j6`zS%ibQ}w4 z1W4O_e&r6d`h+Xp7SZvymNn#HX0>%;n(%|yL z3H0ghYeOP=vO!TJ&81 ziqWlY8Yt?T?EJ{@#U4~rI2_RN6(lvrlUhvR1VillkXv*Yg-WoNQ?+Y4P2La+H0KA9 zNDTK$*D_T$uNE|=iUDOSVfB0o(;#s)V3@IDGy2W?-QVzGDEU^f5q1o`CW`z>y1hYsfW|B@2 z$mDTyAomr-ju4l#fN>_x@eHJyZDQ374V7s+Kd8I%~KMDaZ< zX;&^7u{7pvYO%NNv>760vM$Lopl+bE@f(sT5L>fcr(jEKG_H{c!gNc(Y_fU73Gno_ z$#B$7KsE_8KcXkt&nP1P)j zv!dlD9J%0`2RF-5zk!M8QtY%w)-Kd{?TrW0eL7~Wp{ zO%sk@oNfum0%EbJtC(e1!8u|TWP&i3HO5RpLq}$N71F~>G{x$e zbf(uRr;S>Wy`72~5cZJOKHs)D^ndy1Kha`%A)<{5YN1m-_X3>>Ht4_lo!eRe+C-{# z6c!Xo>!Mr6nIpgmfzJK#j;Ya+AK(Xh*#a?M{y&~-O>f zeolA|w_IICBX~kx$qz2AlqJ`H5+NC%`$JKy6^a%zKUG!kupZnG5mZSof)G+hA~z+L z=xnh!V}5njzgheQ!8<%iU)}6qO37+*D2kysu0;%efk8W2zt@&XH$FVh>~osylzF>v zl_u*4cSP&N4h&RD5p_@Q{`W(s8+bPB8AEWW8MGm89gn0IGJcMXzQ`QpY_~w8&C@9O zGd@nx$5Z(DPd+462E%}48uvtwn2h$v|3p%x0Xy&#w&4H4xYh6W&52R<%kM}toWl0! zKiJQ8^82%ke^2|i!${Y?)==bi;)X7;XhPPVKBE|>bGI&{Ye*8yEIHYy%+iHY+dd`t zWDTRL7)yfXu@+Qjv6DllzEUw;|0e6l*eJUtI5LGPh?w!l;4jC1%_uHCw(bIM!H85T zL3*-&A9?IMonPz*XdsCeo-Om;vhvs!bkZ=zJW+4P*pm5?)r|5h0LkU^?4= zGI-QDYBkQ4(xy$|n5JP#7@3AMB18a1i5hkCWfGH^voSxr2EJdnK8bWVL`Te*_9}KO z+8360hLQSaeLw@^Dz}=L^tH!_&e@qxrp>yGjlx7|v(9VK)9^>k!fwu@q7YHR`p;TA zPxiCo$bR|Z5vML%F?ueYBUoLes|CW?**a7-XfMk_^{ z&bSTaW+H1|h`e#HTIjwHEtT~nRD9&3!xZu!F%#}4` zk72$n)*U+foDCMJ?}n55xF@1!=wOBv(k{ml$|Q!K%ra(kMa?g^iJC8ik+f-NXg8IQ zGPAw_-#DVE`MbWrwhVAb+du7UTjlF-wjHVXhTX8lH>eagzF$&8 z<0n2!2%6xU(>}(xvlM3FjbzpyN~P%YkTBg8w!Rs5#JL zRBAeTeGU0&2QoHc*I3O&rWrd6$f9WCz7$2xK1!*jR*>CLIV4ht!mtBl2!s{#)u4Lv zR+H{bQ4YI1x!|9@wg#jJy~$XbnMMBzXpL9M)630C29QbL<=8+uBI8|W$XUdoAP$t0D{~~xa2JJT7D1d2Z zZY2m4G^rxxJ}bGq(Bsqrg&t(eaFiIJnxLXETOc$lavsWNfuZHLu#N7Ft^p5EbZVg* zzOr>3HKW($+_k)d6CkwAXz#gp_^tma%O`@#Wakhe#d7Ox6T6OE^X$VFdZ;{oJgSyr ztCQ2CP6>zo=O}Ni_~3S-kJ^7wo_%EcbRK?GQx7r0j#q2^CW2pPRM!T;!(q7w%r-XQ z1X4Dh9oNN>#Rs3cW{dG`>3$fI>8HH&i$em%3#&CKr5kpRY7{P<9?M~)pr-HuyLF-{xZw7#)e2ajKZygiw_&MFeg$}adOJD z91;&?JkUHIO4(6g)Dg}Qb>zAHp!dM|Vd#OB(&|B1+JlwG8DkG#=P2kS_MjcE29-|V zDph8EDUk+0;VSwLk0`7PThZI^@qXDPxH{XVAl|0VQP5CFtp>qU0Za3t73M{YvD4CE zag&9$Y4GAO(OS-7qv2xP#s6aK?iorXYs9y{Y+wPt)`&42#_(Nc0Mt9#=CA-%Kj_63-o@J#sZ2OBRrdeWVlzkQ83BGzea_+h-dyT9QNT*EU zQsy#1T(#L#R|;4_9-ug(F!2cWG2bD18C~DVHq(;zCS88RgHW0RH~%*AOpqt>+FX9a zwalQ#yF$*ef+a^%L%%20QGVn-?dj|eziS*h5ZUv8pUJ1%MqWZjwuIl+8Ex&fvM6;5 zEklSpYl!~F$nzcY-Zs{raAis@3mJx6UHO~$0ldB^3z6LD>-oU8aRS!r%@o30jaJT9 z5b|gRk#Rf0i`$w?R}qrJDl+A(2dL%Z_mOD_UXP4kPBwL|vNSaK_QJRSIpj0NC4t=@siXbTr|oEI_$dlYSlq)sv3P-*xQhqEHeZnUpje zmHd};c3LcK8^UgWD?EZ+$+S8G8vc}l6B& z!bAK0n77qjI@Ua8togLD=2OR-U1M{eMN{6%91|qh+}1A4aMz(M+lcAXd-(fcxDYLV z9;OF4L~Mx4Z(HtrIWi4AGd)@Fg442s49wc9q?zmt{&hOQ4t330K~h~tJz3i>-<0af zE`?RH$id-ZjJd!rTbT@}!x~!`UuuRBKfU;^rcnEji?4nh3bn^|{(p5BP_^mR*7n#` ztCuQcNw7S&I>t^8T}@E`=+z7;tnphDC;L9DX3!rdr_i+oDKGkDij+Z$=*<7czUva7 z*XJ7lEbvL|W}$#=VDvJ_1i+wHAtO$dRQyX?nt5Iat6SUIf1Y77%87P;NKy$6^(2yj zY2X-j8+p9aVFhL3#G!&ns!&jCA-C&&-pw&qNUk=)W5RyjdTqAwcNB5v>3|9Whc#L37yM3gC;L zE=ue4rXGtGK+@YxmCbj1J%&~wM^7KE07_Sr1UoSkfG_`<$-Zh?Sz+xGlZ0}8#_!nAcGNO z7^X21wD6UTR2nn?=>Kgg)*k24zctr(^uHfPp(8w(&mR59oQXO%K>E0j{?n0L7-~(TW$K-muh2|wU(pZ z$ET0|AtI3pTeh~?&h3pl|4uhuzX*NoPkw>=*wvg9Ll~wnIGjHAeOp`wU{Z}Ar@KCO zNMy})eijFNOof)!vYUF zyw9-fj>;=31>qzy2=7jW6UOPqv?%Bz_1gA5Rvr#D9h}MX$S5V$8$=|FC zK-&7Aq@zIybII&m7v(C87Xd}}vR4+JIf5_ikZ=(X{95{#3f^Ba9^%}6_p}ebwlmzPgGcacu0mWgqbdCEJiO@wC1pB zt$#BqxoCZ+mUVAxia@QNZ`m25)ek#sEKucNC`VGIPKq3uMeDmln1V~1cbk(+x%|K` z-Av-7@|hJCog;Wei96FnDTqkL(>dN_tSYs_Y{;vHPmg$1RbBG4MN8=F;zjwpRJaZ^ zUAA-J1I;Vv=KIzH`Ot@7u3^EIwB}q|=@&v~2C>GdLeEC9@A{lki9N#oE5RM_tJiIe zq5MbR1wXYalf7VX>_cLh7ngo_17F+Tqp@Q6ZoVz9nFk;++Bnd>O6ULvFk@Q^!r|93 zMbb1$hPALP2nPnW2e$G%UcNqYzeVfS?;J9JGKCsPlU!TE)XEaER zpW>rhe8D)6^y*exFlI6^RTKs|@+&Y`yZ@CRJ=udcq1pWu98-oo&_s16;@Io{GvjW(*-tNrTbJiIoJpDjH^0^b%le-)+*+2uxnN%>Ux)tv zr2O#T(nbT71v#Id-=HIu#%cQUGg9>i*B1HelZX?z7^?$E?rQ_Yy_ZwXBW8_k+6dRb;FU%as+oE}ZT^k?~Ci)ye6SG0;C1C?Yw~`;3x&VvzceFlRo4}kwL zb3r$E=}KRi3s0hs5F_%PHgcLj7y3*{*h(7pv+_4z@1ZlV#d7h%r(KulFO%YXG}d^hC!LWWd6PoP zgy^#g@e1P9A($*bQ3x~XYszPV$eLN;KVv>8Hao9tBmazM7H5%wtE+~K@*mxoodQ$b zG_@Hpg)xRe_cyBpU-bz=(uvLMlW-^5&KP(Cl`S4%f!Gpgg;~Ne(}~T#I6)u)8>z~Q zZ9YM^Wk=e^aJTogP%2fQm}mQVcN~p#HsPufICD*#MNB^%(_|LCQFg=<0(};}^HFC} zxLFcJ+_3sJZl?v{)^wN+T<%!o6pU(>G~;rAVu1_#pFP~VAb+!N;S9G3+luXd^GH;7r!C)hhbyPFmFq{&cy^+NW%k6vcZr)HKfjT;p@9Q(_KGB6Rhq)HvKaH-GbY!4w=P z-JSgR*QUFZcM|s9iJQxhhSKkcNX7ELNntmc-|%S<+PU>d3Dd>n)b>3V9S z_kf>3)!Y0n91l`f!#xcc5xFNqg-EE!j5V)y=RTu%vm?tn7{|g(!kJC~^WaB~ovOeJ zPu5-O=mz1J8QnHMPjWoZn@d%7H;i|x%8z`9s^>4*hM!8`GJYc?`Pa`RGU_s_SM%(^ z3Na}Dp2>Y*nmZo8kh?GDW=Bdlf@qqxn~;XmW=?V{xV!kH-0tGPs6DyUn#d2|u7SpM z0-c0@&WwBh&lmyVJB%ys&okd^7Cc8cPeLpcTcaCT{Alq<*>hTEPw>w%zlxw%SVn0H z6zfZ$Dm@}4M6uTPIXznZZo}`9c#A#x4G+*@1mKDJ4fka}Pe@!sS&PT#<3X`~o`@`* zX4dNsH)lWBek9atMjY!+u`qo3BIeWLuF>K@4h{ZeZtbs?^4p95h_&MQy4RB1uG7iO zpoa$XoNE5#ON!rJ$7T6{>9CjAW>MF%BWG!|lD1G|IRWohYc>Eko(2Z^Vx+VW>KYpS z7aUu#mF8~$q4h(9Kg#tlEc7C^w=NpnU3{4TKj8oOHT*Ie-I~9t8_uP# zltwLh&cK_J*ts==YIEJ*4^W1~vzL5lUcoT%dm9Zh+FYayMpZul-Xbm=)h?X30Z=STiq_;g(sTQ5B= z8v$iH{4Ddybl9KyWIBi+$IMKJZ)8514qr__H66CLeUAP?`k9#$t8q5uQ{vl0gWt}r zUB}^}pV;=fw4IA~b6uSvbS(lIa5MiPyw-sA*;yoYO(jixP z&`WzEBfN=-fPmVq`I~e-X|nbid>5SeTI52_j( z`~jP~-?Gs62@Mcx4pL!D7|Y*kjwOr>v|$ZK5s