From 08a9bdbcd65059159fe4e518ce7f878557852980 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20J=C3=B8rgen=20Solberg?= Date: Wed, 2 Jul 2014 21:27:52 +0200 Subject: [PATCH 001/311] Fix dispose calculations - use correct dispose mode - only apply the dispose on extent of the previous frame --- PIL/GifImagePlugin.py | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/PIL/GifImagePlugin.py b/PIL/GifImagePlugin.py index ec8301973..c53a61c94 100644 --- a/PIL/GifImagePlugin.py +++ b/PIL/GifImagePlugin.py @@ -96,6 +96,7 @@ class GifImageFile(ImageFile.ImageFile): # 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) @@ -114,12 +115,12 @@ class GifImageFile(ImageFile.ImageFile): self.__offset = 0 if self.dispose: - self.im = self.dispose - self.dispose = None + self.im.paste(self.dispose, self.dispose_extent) from copy import copy self.palette = copy(self.global_palette) + disposal_method = 0 while True: s = self.fp.read(1) @@ -140,17 +141,10 @@ class GifImageFile(ImageFile.ImageFile): if flags & 1: self.info["transparency"] = i8(block[3]) self.info["duration"] = i16(block[1:3]) * 10 - try: - # disposal methods - if flags & 8: - # replace with background colour - self.dispose = Image.core.fill("P", self.size, - self.info["background"]) - elif flags & 16: - # replace with previous contents - self.dispose = self.im.copy() - except (AttributeError, KeyError): - pass + + # disposal method - find the value of bits 4 - 6 + disposal_method = 0b00011100 & flags + disposal_method = disposal_method >> 2 elif i8(s) == 255: # # application extension @@ -172,6 +166,7 @@ class GifImageFile(ImageFile.ImageFile): # extent x0, y0 = i16(s[0:]), i16(s[2:]) x1, y1 = x0 + i16(s[4:]), y0 + i16(s[6:]) + self.dispose_extent = x0, y0, x1, y1 flags = i8(s[8]) interlace = (flags & 64) != 0 @@ -194,6 +189,26 @@ class GifImageFile(ImageFile.ImageFile): pass # raise IOError, "illegal GIF tag `%x`" % i8(s) + try: + if disposal_method < 2: + # do not dispose or none specified + self.dispose = None + elif disposal_method == 2: + # replace with background colour + self.dispose = Image.core.fill("P", self.size, + self.info["background"]) + else: + # replace with previous contents + if self.im: + self.dispose = self.im.copy() + + # only dispose the extent in this frame + if self.dispose: + self.dispose = self.dispose.crop(self.dispose_extent) + except (AttributeError, KeyError): + pass + + if not self.tile: # self.__fp = None raise EOFError("no more images in GIF file") From f88a355c6c3bc0bced52bc14ec3b4bad99c261e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20J=C3=B8rgen=20Solberg?= Date: Thu, 3 Jul 2014 18:48:12 +0200 Subject: [PATCH 002/311] Handle transparency between frames for animated GIFs Show the previous frame for transparent pixels when the disposal method is 'do not dispose'. This fixes issue 634. --- PIL/GifImagePlugin.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/PIL/GifImagePlugin.py b/PIL/GifImagePlugin.py index c53a61c94..7eeaae646 100644 --- a/PIL/GifImagePlugin.py +++ b/PIL/GifImagePlugin.py @@ -99,6 +99,8 @@ class GifImageFile(ImageFile.ImageFile): self.dispose_extent = [0, 0, 0, 0] #x0, y0, x1, y1 self.__frame = -1 self.__fp.seek(self.__rewind) + self._prev_im = None + self.disposal_method = 0 if frame != self.__frame + 1: raise ValueError("cannot seek to frame %d" % frame) @@ -120,7 +122,6 @@ class GifImageFile(ImageFile.ImageFile): from copy import copy self.palette = copy(self.global_palette) - disposal_method = 0 while True: s = self.fp.read(1) @@ -143,8 +144,8 @@ class GifImageFile(ImageFile.ImageFile): self.info["duration"] = i16(block[1:3]) * 10 # disposal method - find the value of bits 4 - 6 - disposal_method = 0b00011100 & flags - disposal_method = disposal_method >> 2 + self.disposal_method = 0b00011100 & flags + self.disposal_method = self.disposal_method >> 2 elif i8(s) == 255: # # application extension @@ -190,10 +191,10 @@ class GifImageFile(ImageFile.ImageFile): # raise IOError, "illegal GIF tag `%x`" % i8(s) try: - if disposal_method < 2: + if self.disposal_method < 2: # do not dispose or none specified self.dispose = None - elif disposal_method == 2: + elif self.disposal_method == 2: # replace with background colour self.dispose = Image.core.fill("P", self.size, self.info["background"]) @@ -220,6 +221,18 @@ class GifImageFile(ImageFile.ImageFile): def tell(self): return self.__frame + def load_end(self): + ImageFile.ImageFile.load_end(self) + + # if the disposal method is 'do not dispose', transparent + # pixels should show the content of the previous frame + if self._prev_im and self.disposal_method == 1: + # we do this by pasting the updated area onto the previous + # frame which we then use as the current image content + updated = self.im.crop(self.dispose_extent) + self._prev_im.paste(updated, self.dispose_extent, updated.convert('RGBA')) + self.im = self._prev_im + self._prev_im = self.im.copy() # -------------------------------------------------------------------- # Write GIF files From 047832c6c667c473cd5013e2fba1ab3f5bd291bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20J=C3=B8rgen=20Solberg?= Date: Thu, 3 Jul 2014 19:01:18 +0200 Subject: [PATCH 003/311] only update the disposal_method if it not 'unspecified' --- PIL/GifImagePlugin.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/PIL/GifImagePlugin.py b/PIL/GifImagePlugin.py index 7eeaae646..cb96b9c95 100644 --- a/PIL/GifImagePlugin.py +++ b/PIL/GifImagePlugin.py @@ -144,8 +144,14 @@ class GifImageFile(ImageFile.ImageFile): self.info["duration"] = i16(block[1:3]) * 10 # disposal method - find the value of bits 4 - 6 - self.disposal_method = 0b00011100 & flags - self.disposal_method = self.disposal_method >> 2 + 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 i8(s) == 255: # # application extension From 65593a3827dfef5f5c8e92bfbb1a8ff0c2c64af4 Mon Sep 17 00:00:00 2001 From: hugovk Date: Sat, 5 Jul 2014 00:04:19 +0300 Subject: [PATCH 004/311] More tests for ImageFont.py --- .coveragerc | 4 ++- Tests/test_imagefont.py | 74 +++++++++++++++++++++++++++++++++-------- 2 files changed, 63 insertions(+), 15 deletions(-) diff --git a/.coveragerc b/.coveragerc index 87e3e968f..39ae20ac6 100644 --- a/.coveragerc +++ b/.coveragerc @@ -11,4 +11,6 @@ exclude_lines = if __name__ == .__main__.: # Don't complain about debug code if Image.DEBUG: - if DEBUG: \ No newline at end of file + if DEBUG: + # Don't complain about Windows code as Travis is Linux + if sys.platform == "win32": diff --git a/Tests/test_imagefont.py b/Tests/test_imagefont.py index 927c80bee..ea1b13cc6 100644 --- a/Tests/test_imagefont.py +++ b/Tests/test_imagefont.py @@ -5,8 +5,8 @@ from PIL import ImageDraw from io import BytesIO import os -font_path = "Tests/fonts/FreeMono.ttf" -font_size = 20 +FONT_PATH = "Tests/fonts/FreeMono.ttf" +FONT_SIZE = 20 try: @@ -20,17 +20,17 @@ try: ImageFont.core.freetype2_version, "\d+\.\d+\.\d+$") def test_font_with_name(self): - ImageFont.truetype(font_path, font_size) - self._render(font_path) + ImageFont.truetype(FONT_PATH, FONT_SIZE) + self._render(FONT_PATH) self._clean() def _font_as_bytes(self): - with open(font_path, 'rb') as f: + with open(FONT_PATH, 'rb') as f: font_bytes = BytesIO(f.read()) return font_bytes def test_font_with_filelike(self): - ImageFont.truetype(self._font_as_bytes(), font_size) + ImageFont.truetype(self._font_as_bytes(), FONT_SIZE) self._render(self._font_as_bytes()) # Usage note: making two fonts from the same buffer fails. # shared_bytes = self._font_as_bytes() @@ -39,18 +39,18 @@ try: self._clean() def test_font_with_open_file(self): - with open(font_path, 'rb') as f: + with open(FONT_PATH, 'rb') as f: self._render(f) self._clean() def test_font_old_parameters(self): self.assert_warning( DeprecationWarning, - lambda: ImageFont.truetype(filename=font_path, size=font_size)) + lambda: ImageFont.truetype(filename=FONT_PATH, size=FONT_SIZE)) def _render(self, font): txt = "Hello World!" - ttf = ImageFont.truetype(font, font_size) + ttf = ImageFont.truetype(font, FONT_SIZE) w, h = ttf.getsize(txt) img = Image.new("RGB", (256, 64), "white") d = ImageDraw.Draw(img) @@ -63,8 +63,8 @@ try: os.unlink('font.png') def test_render_equal(self): - img_path = self._render(font_path) - with open(font_path, 'rb') as f: + img_path = self._render(FONT_PATH) + with open(FONT_PATH, 'rb') as f: font_filelike = BytesIO(f.read()) img_filelike = self._render(font_filelike) @@ -74,7 +74,7 @@ try: def test_render_multiline(self): im = Image.new(mode='RGB', size=(300, 100)) draw = ImageDraw.Draw(im) - ttf = ImageFont.truetype(font_path, font_size) + ttf = ImageFont.truetype(FONT_PATH, FONT_SIZE) line_spacing = draw.textsize('A', font=ttf)[1] + 8 lines = ['hey you', 'you are awesome', 'this looks awkward'] y = 0 @@ -94,7 +94,7 @@ try: img_grey = Image.new("L", (100, 100)) draw = ImageDraw.Draw(img_grey) word = "testing" - font = ImageFont.truetype(font_path, font_size) + font = ImageFont.truetype(FONT_PATH, FONT_SIZE) orientation = Image.ROTATE_90 transposed_font = ImageFont.TransposedFont( @@ -116,7 +116,7 @@ try: img_grey = Image.new("L", (100, 100)) draw = ImageDraw.Draw(img_grey) word = "testing" - font = ImageFont.truetype(font_path, font_size) + font = ImageFont.truetype(FONT_PATH, FONT_SIZE) orientation = None transposed_font = ImageFont.TransposedFont( @@ -133,6 +133,52 @@ try: # Check boxes a and b are same size self.assertEqual(box_size_a, box_size_b) + def test_free_type_font_get_name(self): + # Arrange + font = ImageFont.truetype(FONT_PATH, FONT_SIZE) + + # Act + name = font.getname() + + # Assert + self.assertEqual(('FreeMono', 'Regular'), name) + + def test_free_type_font_get_metrics(self): + # Arrange + font = ImageFont.truetype(FONT_PATH, FONT_SIZE) + + # Act + ascent, descent = font.getmetrics() + + # Assert + self.assertIsInstance(ascent, int) + self.assertIsInstance(descent, int) + self.assertEqual((ascent, descent), (16, 4)) # too exact check? + + def test_load_path_not_found(self): + # Arrange + filename = "somefilenamethatdoesntexist.ttf" + + # Act/Assert + self.assertRaises(IOError, lambda: ImageFont.load_path(filename)) + + def test_default_font(self): + # Arrange + txt = 'This is a "better than nothing" default font.' + im = Image.new(mode='RGB', size=(300, 100)) + draw = ImageDraw.Draw(im) + + target = 'Tests/images/default_font.png' + target_img = Image.open(target) + + # Act + default_font = ImageFont.load_default() + draw.text((10, 10), txt, font=default_font) + + # Assert + self.assert_image_equal(im, target_img) + + except ImportError: class TestImageFont(PillowTestCase): def test_skip(self): From ff6a0b9b8c9f97954814fdd0adf2a9c32171c7c6 Mon Sep 17 00:00:00 2001 From: hugovk Date: Sat, 5 Jul 2014 00:18:52 +0300 Subject: [PATCH 005/311] Add test image using ImageFont's default font --- Tests/images/default_font.png | Bin 0 -> 586 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/default_font.png diff --git a/Tests/images/default_font.png b/Tests/images/default_font.png new file mode 100644 index 0000000000000000000000000000000000000000..bb4862b996fe733cc94fb396ecc9209e9fbbedcf GIT binary patch literal 586 zcmeAS@N?(olHy`uVBq!ia0y~yVAKJ!Q#hD_uc6 zKy~{6|I;r!U*_p%;Lb6>`?7j@8^fdy!_?bAEl}`7_uI;Q{l_0$=B#J0s}sF#EPSpn zieqA@(Bz$3dyD4P*oAw#?SH@h#1xy|I_v*Eosh!GZGUhr|Eu|jZ!C2b`n^wo$qutu z7oJb5JF8Baa%Y4T=)*Ln5Fn_pFPc!H-sEpCwEY5?WR?6$Fdh!_50cVukZ-d{@o=PUA6ewe&0FI4d(wi zzF^MHT}fZ=g`b@%UY2mva&ls^Dc@Hu+3zRU)TBK#Rx?YC`}yun{?s!oo_t$f7I^-R znOu*T+ndPhwR`RsU488J|MJy{veRmJ{?(@YygmGJMfQLB8~cxFgnrqy)Ld)vc9HwV zwSO)9zgF;`Uw`b%?f-9${pW~YWxTsbdt0*1UC#48vuxkZnr&nDEo#>Fmb=QJ0!x@1e#g8Q+<_y)dj`?{B`D@u%(7Qr}9jz~YAz b`oT-)*Xv};1n&#bP0l+XkKI4k`b literal 0 HcmV?d00001 From 770ef9312be9c6e10e9d3b31d27c12b4f8d7cf1a Mon Sep 17 00:00:00 2001 From: hugovk Date: Sat, 5 Jul 2014 01:02:46 +0300 Subject: [PATCH 006/311] flake8 and fix path in __main__ --- PIL/ImageFont.py | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/PIL/ImageFont.py b/PIL/ImageFont.py index 18d09b871..25993007d 100644 --- a/PIL/ImageFont.py +++ b/PIL/ImageFont.py @@ -29,13 +29,15 @@ from __future__ import print_function from PIL import Image from PIL._util import isDirectory, isPath -import os, sys +import os +import sys try: import warnings except ImportError: warnings = None + class _imagingft_not_installed: # module placeholder def __getattr__(self, id): @@ -90,8 +92,8 @@ class ImageFont: # read PILfont header if file.readline() != b"PILfont\n": raise SyntaxError("Not a PILfont file") - d = file.readline().split(b";") - self.info = [] # FIXME: should be a dictionary + file.readline().split(b";") + self.info = [] # FIXME: should be a dictionary while True: s = file.readline() if not s or s == b"DATA\n": @@ -113,6 +115,7 @@ class ImageFont: self.getsize = self.font.getsize self.getmask = self.font.getmask + ## # Wrapper for FreeType fonts. Application code should use the # truetype factory function to create font objects. @@ -124,14 +127,18 @@ class FreeTypeFont: # FIXME: use service provider instead if file: if warnings: - warnings.warn('file parameter deprecated, please use font parameter instead.', DeprecationWarning) + warnings.warn( + 'file parameter deprecated, ' + 'please use font parameter instead.', + DeprecationWarning) font = file if isPath(font): self.font = core.getfont(font, size, index, encoding) else: self.font_bytes = font.read() - self.font = core.getfont("", size, index, encoding, self.font_bytes) + self.font = core.getfont( + "", size, index, encoding, self.font_bytes) def getname(self): return self.font.family, self.font.style @@ -151,7 +158,7 @@ class FreeTypeFont: def getmask2(self, text, mode="", fill=Image.core.fill): size, offset = self.font.getsize(text) im = fill("L", size, 0) - self.font.render(text, im.id, mode=="1") + self.font.render(text, im.id, mode == "1") return im, offset ## @@ -163,12 +170,13 @@ class FreeTypeFont: # be one of Image.FLIP_LEFT_RIGHT, Image.FLIP_TOP_BOTTOM, # Image.ROTATE_90, Image.ROTATE_180, or Image.ROTATE_270. + class TransposedFont: "Wrapper for writing rotated or mirrored text" def __init__(self, font, orientation=None): self.font = font - self.orientation = orientation # any 'transpose' argument, or None + self.orientation = orientation # any 'transpose' argument, or None def getsize(self, text): w, h = self.font.getsize(text) @@ -221,7 +229,10 @@ def truetype(font=None, size=10, index=0, encoding="", filename=None): if filename: if warnings: - warnings.warn('filename parameter deprecated, please use font parameter instead.', DeprecationWarning) + warnings.warn( + 'filename parameter deprecated, ' + 'please use font parameter instead.', + DeprecationWarning) font = filename try: @@ -272,8 +283,8 @@ def load_default(): import base64 f = ImageFont() f._load_pilfont_data( - # courB08 - BytesIO(base64.decodestring(b''' + # courB08 + BytesIO(base64.decodestring(b''' UElMZm9udAo7Ozs7OzsxMDsKREFUQQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -395,8 +406,8 @@ w7IkEbzhVQAAAABJRU5ErkJggg== if __name__ == "__main__": # create font data chunk for embedding - import base64, os, sys - font = "../Tests/images/courB08" + import base64 + font = "Tests/images/courB08" print(" f._load_pilfont_data(") print(" # %s" % os.path.basename(font)) print(" BytesIO(base64.decodestring(b'''") From 8a4081c5bc0c6fc12756109b87b6ac0f2b5ac5c9 Mon Sep 17 00:00:00 2001 From: hugovk Date: Sat, 5 Jul 2014 12:08:35 +0300 Subject: [PATCH 007/311] More tests for ImageMath --- Tests/test_imagemath.py | 84 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/Tests/test_imagemath.py b/Tests/test_imagemath.py index 35d75dbbd..a03b25cce 100644 --- a/Tests/test_imagemath.py +++ b/Tests/test_imagemath.py @@ -14,9 +14,13 @@ def pixel(im): A = Image.new("L", (1, 1), 1) B = Image.new("L", (1, 1), 2) +Z = Image.new("L", (1, 1), 0) # Z for zero F = Image.new("F", (1, 1), 3) I = Image.new("I", (1, 1), 4) +A2 = A.resize((2, 2)) +B2 = B.resize((2, 2)) + images = {"A": A, "B": B, "F": F, "I": I} @@ -71,6 +75,86 @@ class TestImageMath(PillowTestCase): self.assertEqual(pixel(ImageMath.eval("A == 1", images)), "I 1") self.assertEqual(pixel(ImageMath.eval("A == 2", images)), "I 0") + def test_one_image_larger(self): + self.assertEqual(pixel(ImageMath.eval("A+B", A=A2, B=B)), "I 3") + self.assertEqual(pixel(ImageMath.eval("A+B", A=A, B=B2)), "I 3") + + def test_abs(self): + self.assertEqual(pixel(ImageMath.eval("abs(A)", A=A)), "I 1") + self.assertEqual(pixel(ImageMath.eval("abs(B)", B=B)), "I 2") + + def test_bitwise_invert(self): + self.assertEqual(pixel(ImageMath.eval("~Z", Z=Z)), "I -1") + self.assertEqual(pixel(ImageMath.eval("~A", A=A)), "I -2") + self.assertEqual(pixel(ImageMath.eval("~B", B=B)), "I -3") + + def test_bitwise_and(self): + self.assertEqual(pixel(ImageMath.eval("Z&Z", A=A, Z=Z)), "I 0") + self.assertEqual(pixel(ImageMath.eval("Z&A", A=A, Z=Z)), "I 0") + self.assertEqual(pixel(ImageMath.eval("A&Z", A=A, Z=Z)), "I 0") + self.assertEqual(pixel(ImageMath.eval("A&A", A=A, Z=Z)), "I 1") + + def test_bitwise_or(self): + self.assertEqual(pixel(ImageMath.eval("Z|Z", A=A, Z=Z)), "I 0") + self.assertEqual(pixel(ImageMath.eval("Z|A", A=A, Z=Z)), "I 1") + self.assertEqual(pixel(ImageMath.eval("A|Z", A=A, Z=Z)), "I 1") + self.assertEqual(pixel(ImageMath.eval("A|A", A=A, Z=Z)), "I 1") + + def test_bitwise_xor(self): + self.assertEqual(pixel(ImageMath.eval("Z^Z", A=A, Z=Z)), "I 0") + self.assertEqual(pixel(ImageMath.eval("Z^A", A=A, Z=Z)), "I 1") + self.assertEqual(pixel(ImageMath.eval("A^Z", A=A, Z=Z)), "I 1") + self.assertEqual(pixel(ImageMath.eval("A^A", A=A, Z=Z)), "I 0") + + def test_bitwise_leftshift(self): + self.assertEqual(pixel(ImageMath.eval("Z<<0", Z=Z)), "I 0") + self.assertEqual(pixel(ImageMath.eval("Z<<1", Z=Z)), "I 0") + self.assertEqual(pixel(ImageMath.eval("A<<0", A=A)), "I 1") + self.assertEqual(pixel(ImageMath.eval("A<<1", A=A)), "I 2") + + def test_bitwise_rightshift(self): + self.assertEqual(pixel(ImageMath.eval("Z>>0", Z=Z)), "I 0") + self.assertEqual(pixel(ImageMath.eval("Z>>1", Z=Z)), "I 0") + self.assertEqual(pixel(ImageMath.eval("A>>0", A=A)), "I 1") + self.assertEqual(pixel(ImageMath.eval("A>>1", A=A)), "I 0") + + def test_logical_eq(self): + self.assertEqual(pixel(ImageMath.eval("A==A", A=A)), "I 1") + self.assertEqual(pixel(ImageMath.eval("B==B", B=B)), "I 1") + self.assertEqual(pixel(ImageMath.eval("A==B", A=A, B=B)), "I 0") + self.assertEqual(pixel(ImageMath.eval("B==A", A=A, B=B)), "I 0") + + def test_logical_ne(self): + self.assertEqual(pixel(ImageMath.eval("A!=A", A=A)), "I 0") + self.assertEqual(pixel(ImageMath.eval("B!=B", B=B)), "I 0") + self.assertEqual(pixel(ImageMath.eval("A!=B", A=A, B=B)), "I 1") + self.assertEqual(pixel(ImageMath.eval("B!=A", A=A, B=B)), "I 1") + + def test_logical_lt(self): + self.assertEqual(pixel(ImageMath.eval("AA", A=A)), "I 0") + self.assertEqual(pixel(ImageMath.eval("B>B", B=B)), "I 0") + self.assertEqual(pixel(ImageMath.eval("A>B", A=A, B=B)), "I 0") + self.assertEqual(pixel(ImageMath.eval("B>A", A=A, B=B)), "I 1") + + def test_logical_ge(self): + self.assertEqual(pixel(ImageMath.eval("A>=A", A=A)), "I 1") + self.assertEqual(pixel(ImageMath.eval("B>=B", B=B)), "I 1") + self.assertEqual(pixel(ImageMath.eval("A>=B", A=A, B=B)), "I 0") + self.assertEqual(pixel(ImageMath.eval("B>=A", A=A, B=B)), "I 1") + + if __name__ == '__main__': unittest.main() From 5f2138d91588f792624ca5ebf599698be88f8879 Mon Sep 17 00:00:00 2001 From: hugovk Date: Sat, 5 Jul 2014 12:13:43 +0300 Subject: [PATCH 008/311] flake8 ImageMath.py --- PIL/ImageMath.py | 53 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/PIL/ImageMath.py b/PIL/ImageMath.py index adfcc4f6f..4dcc5125c 100644 --- a/PIL/ImageMath.py +++ b/PIL/ImageMath.py @@ -26,9 +26,11 @@ except ImportError: VERBOSE = 0 + def _isconstant(v): return isinstance(v, int) or isinstance(v, float) + class _Operand: # wraps an image operand, providing standard operators @@ -68,20 +70,25 @@ class _Operand: 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 != "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) + 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() + im1.load() + im2.load() try: op = getattr(_imagingmath, op+"_"+im1.mode) except AttributeError: @@ -101,34 +108,47 @@ class _Operand: 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) @@ -142,54 +162,77 @@ class _Operand: # 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)) From 1aee9bfdef1d73007d8e35ab883c8c936c1da602 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 5 Jul 2014 23:16:14 +1000 Subject: [PATCH 009/311] Added class checking to __eq__ function --- PIL/Image.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PIL/Image.py b/PIL/Image.py index 787e60270..ea8cc6155 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -573,6 +573,8 @@ class Image: return file def __eq__(self, other): + if self.__class__.__name__ != other.__class__.__name__: + return False a = (self.mode == other.mode) b = (self.size == other.size) c = (self.getpalette() == other.getpalette()) From f6f80e3a774f569010f56a061500c5c3b9a21e2f Mon Sep 17 00:00:00 2001 From: hugovk Date: Sat, 5 Jul 2014 16:29:40 +0300 Subject: [PATCH 010/311] Test case for #774 --- Tests/test_image.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Tests/test_image.py b/Tests/test_image.py index ec82eb419..e41447e42 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -44,6 +44,17 @@ class TestImage(PillowTestCase): file = self.tempfile("temp.ppm") im._dump(file) + def test_comparison_with_other_type(self): + # Arrange + item = Image.new('RGB', (25, 25), '#000') + num = 12 + + # Act/Assert + # Shouldn't cause AttributeError (#774) + self.assertFalse(item is None) + self.assertFalse(item == None) + self.assertFalse(item == num) + if __name__ == '__main__': unittest.main() From 318b405889ae4911a69ff45b3fa07cc246c16607 Mon Sep 17 00:00:00 2001 From: hugovk Date: Sat, 5 Jul 2014 21:32:09 +0300 Subject: [PATCH 011/311] Don't exclude Windows code --- .coveragerc | 2 -- 1 file changed, 2 deletions(-) diff --git a/.coveragerc b/.coveragerc index 39ae20ac6..ea79190ae 100644 --- a/.coveragerc +++ b/.coveragerc @@ -12,5 +12,3 @@ exclude_lines = # Don't complain about debug code if Image.DEBUG: if DEBUG: - # Don't complain about Windows code as Travis is Linux - if sys.platform == "win32": From d306d01c5edfa6fce6ce372ae207917d063238d6 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Sat, 5 Jul 2014 11:50:37 -0700 Subject: [PATCH 012/311] Document environment variable method for pip, #720 [ci skip] --- docs/installation.rst | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 8abbd6679..a61213e15 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -79,15 +79,21 @@ Many of Pillow's features require external libraries: * Pillow has been tested with openjpeg **2.0.0** and **2.1.0**. -If the prerequisites are installed in the standard library locations for your -machine (e.g. :file:`/usr` or :file:`/usr/local`), no additional configuration -should be required. If they are installed in a non-standard location, you may -need to configure setuptools to use those locations (i.e. by editing -:file:`setup.py` and/or :file:`setup.cfg`). Once you have installed the -prerequisites, run:: +Once you have installed the prerequisites,run:: $ pip install Pillow +If the prerequisites are installed in the standard library locations +for your machine (e.g. :file:`/usr` or :file:`/usr/local`), no +additional configuration should be required. If they are installed in +a non-standard location, you may need to configure setuptools to use +those locations by editing :file:`setup.py` or +:file:`setup.cfg`, or by adding environment variables on the command +line:: + + $ CFLAGS="-I/usr/pkg/include" pip install pillow + + Linux installation ------------------ From 01c0cc941757716dfb4162817cfa8a37362c62a1 Mon Sep 17 00:00:00 2001 From: hugovk Date: Sat, 5 Jul 2014 23:02:34 +0300 Subject: [PATCH 013/311] Remove unused WIP save2() from pre-fork days --- PIL/FontFile.py | 39 ++++++--------------------------------- 1 file changed, 6 insertions(+), 33 deletions(-) diff --git a/PIL/FontFile.py b/PIL/FontFile.py index 7c5704c9d..26ddff0ac 100644 --- a/PIL/FontFile.py +++ b/PIL/FontFile.py @@ -17,8 +17,6 @@ import os from PIL import Image, _binary -import marshal - try: import zlib except ImportError: @@ -26,6 +24,7 @@ except ImportError: WIDTH = 800 + def puti16(fp, values): # write network order (big-endian) 16-bit sequence for v in values: @@ -33,6 +32,7 @@ def puti16(fp, values): v += 65536 fp.write(_binary.o16be(v)) + ## # Base class for raster font file handlers. @@ -95,9 +95,8 @@ class FontFile: # print chr(i), dst, s self.metrics[i] = d, dst, s - - def save1(self, filename): - "Save font in version 1 format" + def save(self, filename): + "Save font" self.compile() @@ -107,7 +106,7 @@ class FontFile: # font metrics fp = open(os.path.splitext(filename)[0] + ".pil", "wb") fp.write(b"PILfont\n") - fp.write((";;;;;;%d;\n" % self.ysize).encode('ascii')) # HACK!!! + fp.write((";;;;;;%d;\n" % self.ysize).encode('ascii')) # HACK!!! fp.write(b"DATA\n") for id in range(256): m = self.metrics[id] @@ -117,30 +116,4 @@ class FontFile: puti16(fp, m[0] + m[1] + m[2]) fp.close() - - def save2(self, filename): - "Save font in version 2 format" - - # THIS IS WORK IN PROGRESS - - self.compile() - - data = marshal.dumps((self.metrics, self.info)) - - if zlib: - data = b"z" + zlib.compress(data, 9) - else: - data = b"u" + data - - fp = open(os.path.splitext(filename)[0] + ".pil", "wb") - - fp.write(b"PILfont2\n" + self.name + "\n" + "DATA\n") - - fp.write(data) - - self.bitmap.save(fp, "PNG") - - fp.close() - - - save = save1 # for now +# End of file From b7f56409eba64468d0d3feca3ac401d1413bdc12 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Sat, 5 Jul 2014 14:30:34 -0700 Subject: [PATCH 014/311] Multiplication needs to be 64bit, to handle overflow regardless of the bittedness of the machine, fixes #771# --- libImaging/Storage.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libImaging/Storage.c b/libImaging/Storage.c index d31db5cb2..c6d2e5c5e 100644 --- a/libImaging/Storage.c +++ b/libImaging/Storage.c @@ -379,7 +379,7 @@ ImagingNew(const char* mode, int xsize, int ysize) } else bytes = strlen(mode); /* close enough */ - if ((Py_ssize_t) xsize * ysize * bytes <= THRESHOLD) { + if ((int64_t) xsize * (int64_t) ysize * bytes <= THRESHOLD) { im = ImagingNewBlock(mode, xsize, ysize); if (im) return im; From 1008d6a993655d702ce0555f91c1a77ae10baa01 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Sat, 5 Jul 2014 15:06:17 -0700 Subject: [PATCH 015/311] Windows compatibility --- libImaging/ImPlatform.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libImaging/ImPlatform.h b/libImaging/ImPlatform.h index be1f20f3f..70ee63119 100644 --- a/libImaging/ImPlatform.h +++ b/libImaging/ImPlatform.h @@ -69,4 +69,6 @@ #define FLOAT32 float #define FLOAT64 double - +#ifdef _MSC_VER +typedef signed __int64 int64_t; +#endif From f5931e82315a622eead063e1eb3eb26572ebe322 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Sat, 5 Jul 2014 15:08:11 -0700 Subject: [PATCH 016/311] Test for #771, hangs in nose --- Tests/32bit_segfault_test.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Tests/32bit_segfault_test.py diff --git a/Tests/32bit_segfault_test.py b/Tests/32bit_segfault_test.py new file mode 100644 index 000000000..06fba80e1 --- /dev/null +++ b/Tests/32bit_segfault_test.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +import helper + +from PIL import Image + + +im = Image.new('L', (999999, 999999), 0) + + From e5d07eff05f952582e569c76844c74678014fe21 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Sat, 5 Jul 2014 15:23:38 -0700 Subject: [PATCH 017/311] remove extra import --- Tests/32bit_segfault_test.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/Tests/32bit_segfault_test.py b/Tests/32bit_segfault_test.py index 06fba80e1..958bc6b3c 100644 --- a/Tests/32bit_segfault_test.py +++ b/Tests/32bit_segfault_test.py @@ -1,10 +1,7 @@ #!/usr/bin/env python -import helper - from PIL import Image - im = Image.new('L', (999999, 999999), 0) From 691671624c10cd23a3b48a2942998e80cae2c34e Mon Sep 17 00:00:00 2001 From: hugovk Date: Sun, 6 Jul 2014 01:47:30 +0300 Subject: [PATCH 018/311] Test _util.py --- Tests/test_util.py | 80 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Tests/test_util.py diff --git a/Tests/test_util.py b/Tests/test_util.py new file mode 100644 index 000000000..8cf73f47f --- /dev/null +++ b/Tests/test_util.py @@ -0,0 +1,80 @@ +from helper import unittest, PillowTestCase, tearDownModule + +from PIL import _util + + +class TestUtil(PillowTestCase): + + def test_is_string_type(self): + # Arrange + text = "abc" + + # Act + it_is = _util.isStringType(text) + + # Assert + self.assertTrue(it_is) + + def test_is_not_string_type(self): + # Arrange + integer = 123 + + # Act + it_is_not = _util.isStringType(integer) + + # Assert + self.assertFalse(it_is_not) + + def test_is_path(self): + # Arrange + text = "abc" + + # Act + it_is = _util.isStringType(text) + + # Assert + self.assertTrue(it_is) + + def test_is_not_path(self): + # Arrange + integer = 123 + + # Act + it_is_not = _util.isPath(integer) + + # Assert + self.assertFalse(it_is_not) + + def test_is_directory(self): + # Arrange + directory = "Tests" + + # Act + it_is = _util.isDirectory(directory) + + # Assert + self.assertTrue(it_is) + + def test_is_not_directory(self): + # Arrange + text = "abc" + + # Act + it_is_not = _util.isDirectory(text) + + # Assert + self.assertFalse(it_is_not) + + def test_deferred_error(self): + # Arrange + + # Act + thing = _util.deferred_error(ValueError("Some error text")) + + # Assert + self.assertRaises(ValueError, lambda: thing.some_attr) + +if __name__ == '__main__': + unittest.main() + +# End of file From 302978e4644269f87f1259458819e4d59efb4117 Mon Sep 17 00:00:00 2001 From: hugovk Date: Sun, 6 Jul 2014 01:50:24 +0300 Subject: [PATCH 019/311] flake8 --- PIL/_util.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/PIL/_util.py b/PIL/_util.py index eb5c2c242..51c6f6887 100644 --- a/PIL/_util.py +++ b/PIL/_util.py @@ -3,20 +3,25 @@ import os if bytes is str: def isStringType(t): return isinstance(t, basestring) + def isPath(f): return isinstance(f, basestring) else: def isStringType(t): return isinstance(t, str) + def isPath(f): return isinstance(f, (bytes, str)) + # Checks if an object is a string, and that it points to a directory. def isDirectory(f): return isPath(f) and os.path.isdir(f) + class deferred_error(object): def __init__(self, ex): self.ex = ex + def __getattr__(self, elt): raise self.ex From 60628c77b356d0617932887453c3783307aa682a Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Mon, 7 Jul 2014 14:42:46 +0900 Subject: [PATCH 020/311] Fix return value of FreeTypeFont.textsize() does not include font offsets --- PIL/ImageFont.py | 3 ++- Tests/images/rectangle_surrounding_text.png | Bin 0 -> 1520 bytes Tests/test_imagefont.py | 16 +++++++++++++++- 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 Tests/images/rectangle_surrounding_text.png diff --git a/PIL/ImageFont.py b/PIL/ImageFont.py index 18d09b871..34fe510bd 100644 --- a/PIL/ImageFont.py +++ b/PIL/ImageFont.py @@ -140,7 +140,8 @@ class FreeTypeFont: return self.font.ascent, self.font.descent def getsize(self, text): - return self.font.getsize(text)[0] + size, offset = self.font.getsize(text) + return (size[0] + offset[0], size[1] + offset[1]) def getoffset(self, text): return self.font.getsize(text)[1] diff --git a/Tests/images/rectangle_surrounding_text.png b/Tests/images/rectangle_surrounding_text.png new file mode 100644 index 0000000000000000000000000000000000000000..2b75a5e9c7ae1fc828125e2903ea6136d52cd2eb GIT binary patch literal 1520 zcmcJP`#;lr9LFUc^q`wdij?CJ=9ZS_vYaU6tPRtWVJ^AldZr!ruxWKdE)Pjf?&QvN zNG{8aC6YoKF>^g5cQYojG0wO1!}$-+^M}vp{nPvPcs$?l$2-vx36no~@}Pu-guK1o z6_kX;K7F9}m5~JAx?9;95)ub!_E#=nC*<-*J?)&sRo<*cnFZk8AH+jkW%~Cbo*j=o zY6p(}yl73=wbn~4QEk>q35!Hucl04A*eVmysz`d4{gEP;qDZ=5uddV(Lf46i7WDOQ zH>;%7nnjtq&XB7=-nU!^!fW0HR z1ixaXWavJxCbw8^IVnlhN8w&T@QJ4>C=VB7m22SF48~Z9X+T)eP3qg4dt9!!uHTs> z2_5Z5Wn3=zfIoIC^BdUI^rO|IQx?jH)XgG(ImRFf1)h2aD0i2lHYyd{6yc|lm3Hc9 z=?lB_hN}dlFolB}V_{J^9F7DuW)jw>_=8F(g5Emn;1~K!<9s`h)spzK%$V)QuyOhp z!O4l$)z!r;aG+WjI_fB5mR-;6H{rxKG&IzBGV`;uMZ)y}80_IYpATMwK=Ztnt+i?O zR2UjyTO>l}TV^c|F(&z`U~c=v!~F5)xD;b!W0Ph9t>c8yM#*B)%({?T zRpp$G!eaA#{nv#gXJ_Z|2}WgQWmdrI*49PDYyCi`T4-3<%F0T0MTPOnl(@LKa%7%J zw6T;AB|h;VLP0S|R~;-sk2!Kn*aT3Q;Y&??mjfmGGhLIMMgv#$C1`5_R95q2qisQ^lx#hcSYNBxae z040mRUqlvM%9~FV5G-M->Vr>Ca17|O(^unpKL{zJ#r4>He>QU>n@-%b= zG5qDr7Y?VAy;S@lx@C7^pnR^cz#;p5(W_U2+1?!M1i%cfzJ9Ff&fJ^(`>hjZXJ@HY zDmchqSNf-)BA18LCg`8?EZ8j8Q3cY@7OvbkT>KURi=FuP4d0)8R45dR#bWD(wzjr(kjw1c9Fx3i5*(g9 z$?scMd#PhG5E~jAYMNuPTe1eZbZu;8B$_wUkQtLUHa51zuAwzHmQjKtBfozxv;${GxF8TIR4Tdn1`2R=+|WHi7Rw-(czOdKckjh%xFw6ikZZ!oB>Rolx1A(CGsogV4oXhsqy1Mo545KvKa(h&?L%yYb z&5)!KjQzrOdL#NYH2OLQL)A%o=YzYb7R8@HP#T+?i6jz(!LV#GI};pxcyV|*lVYMG zXFJ911KW}xBV?RBJj6S~^~6M3G#Xf!YHSPLyFETL_Ab+Ew(Oh;VU}_WZ|(u$={d=t zWTMeLKEI}_3O@ZJm^Ny4cSj}9R7Gxr{s(9fqp7KRPT{+dv^Mjky4%-e{57tfzuDK* zLui>eAMj}&Z>~F&o6!n|LV-KrKbfrEV@oPn-HYcd{J5|GBlk*ItTyw)`%x9)**{|J MuOhEhTYLTa52+5~l>h($ literal 0 HcmV?d00001 diff --git a/Tests/test_imagefont.py b/Tests/test_imagefont.py index 927c80bee..2fa679404 100644 --- a/Tests/test_imagefont.py +++ b/Tests/test_imagefont.py @@ -71,11 +71,25 @@ try: self.assert_image_equal(img_path, img_filelike) self._clean() + def test_textsize_equal(self): + im = Image.new(mode='RGB', size=(300, 100)) + draw = ImageDraw.Draw(im) + ttf = ImageFont.truetype(font_path, font_size) + + txt = "Hello World!" + size = draw.textsize(txt, ttf) + draw.text((10, 10), txt, font=ttf) + draw.rectangle((10, 10, 10 + size[0], 10 + size[1])) + + target = 'Tests/images/rectangle_surrounding_text.png' + target_img = Image.open(target) + self.assert_image_equal(im, target_img) + def test_render_multiline(self): im = Image.new(mode='RGB', size=(300, 100)) draw = ImageDraw.Draw(im) ttf = ImageFont.truetype(font_path, font_size) - line_spacing = draw.textsize('A', font=ttf)[1] + 8 + line_spacing = draw.textsize('A', font=ttf)[1] + 4 lines = ['hey you', 'you are awesome', 'this looks awkward'] y = 0 for line in lines: From 487bf172fb6586a5868e52a6d589e8e154ef81c0 Mon Sep 17 00:00:00 2001 From: Hugo Date: Mon, 7 Jul 2014 19:24:26 +0300 Subject: [PATCH 021/311] Update CHANGES.rst [CI skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 0bf1a7ee5..610764b0b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -6,6 +6,9 @@ Changelog (Pillow) - Test PalmImagePlugin and method to skip known bad tests [hugovk, wiredfool] + +- Added class checking to Image __eq__ function + [radarhere, hugovk] 2.5.0 (2014-07-01) From 7dc2975cea033c83cd9a0803d3424d3a4a937492 Mon Sep 17 00:00:00 2001 From: Hugo Date: Mon, 7 Jul 2014 19:27:29 +0300 Subject: [PATCH 022/311] Update CHANGES.rst [CI skip] --- CHANGES.rst | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 610764b0b..4cf38ea20 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,12 +4,15 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ -- Test PalmImagePlugin and method to skip known bad tests - [hugovk, wiredfool] - -- Added class checking to Image __eq__ function +- 32bit mult overflow fix #782 + [wiredfool] + +- Added class checking to Image __eq__ function #775 [radarhere, hugovk] +- Test PalmImagePlugin and method to skip known bad tests #776 + [hugovk, wiredfool] + 2.5.0 (2014-07-01) ------------------ From cf04a9a0d2617d644a5ff5de60c064d2d7a71461 Mon Sep 17 00:00:00 2001 From: hugovk Date: Mon, 7 Jul 2014 20:03:50 +0300 Subject: [PATCH 023/311] Remove unused tearDownModule --- Tests/helper.py | 29 +++++++++++++++-------------- Tests/test_000_sanity.py | 2 +- Tests/test_bmp_reference.py | 2 +- Tests/test_cffi.py | 2 +- Tests/test_decompression_bomb.py | 2 +- Tests/test_file_bmp.py | 2 +- Tests/test_file_eps.py | 2 +- Tests/test_file_fli.py | 2 +- Tests/test_file_gif.py | 2 +- Tests/test_file_icns.py | 2 +- Tests/test_file_ico.py | 2 +- Tests/test_file_jpeg.py | 2 +- Tests/test_file_jpeg2k.py | 2 +- Tests/test_file_libtiff.py | 2 +- Tests/test_file_libtiff_small.py | 2 +- Tests/test_file_msp.py | 2 +- Tests/test_file_palm.py | 2 +- Tests/test_file_pcx.py | 2 +- Tests/test_file_pdf.py | 2 +- Tests/test_file_png.py | 2 +- Tests/test_file_ppm.py | 2 +- Tests/test_file_psd.py | 2 +- Tests/test_file_spider.py | 2 +- Tests/test_file_tar.py | 2 +- Tests/test_file_tiff.py | 2 +- Tests/test_file_tiff_metadata.py | 2 +- Tests/test_file_webp.py | 2 +- Tests/test_file_webp_alpha.py | 2 +- Tests/test_file_webp_lossless.py | 2 +- Tests/test_file_webp_metadata.py | 2 +- Tests/test_file_xbm.py | 2 +- Tests/test_file_xpm.py | 2 +- Tests/test_font_bdf.py | 2 +- Tests/test_font_pcf.py | 2 +- Tests/test_format_lab.py | 2 +- Tests/test_image.py | 2 +- Tests/test_image_array.py | 2 +- Tests/test_image_convert.py | 2 +- Tests/test_image_copy.py | 2 +- Tests/test_image_crop.py | 2 +- Tests/test_image_draft.py | 2 +- Tests/test_image_filter.py | 2 +- Tests/test_image_frombytes.py | 2 +- Tests/test_image_getbands.py | 2 +- Tests/test_image_getbbox.py | 2 +- Tests/test_image_getcolors.py | 2 +- Tests/test_image_getdata.py | 2 +- Tests/test_image_getextrema.py | 2 +- Tests/test_image_getim.py | 2 +- Tests/test_image_getpalette.py | 2 +- Tests/test_image_getpixel.py | 2 +- Tests/test_image_getprojection.py | 2 +- Tests/test_image_histogram.py | 2 +- Tests/test_image_load.py | 2 +- Tests/test_image_mode.py | 2 +- Tests/test_image_offset.py | 2 +- Tests/test_image_point.py | 2 +- Tests/test_image_putalpha.py | 2 +- Tests/test_image_putdata.py | 2 +- Tests/test_image_putpalette.py | 2 +- Tests/test_image_putpixel.py | 2 +- Tests/test_image_quantize.py | 2 +- Tests/test_image_resize.py | 2 +- Tests/test_image_rotate.py | 2 +- Tests/test_image_split.py | 2 +- Tests/test_image_thumbnail.py | 2 +- Tests/test_image_tobitmap.py | 2 +- Tests/test_image_transform.py | 2 +- Tests/test_image_transpose.py | 2 +- Tests/test_imagechops.py | 2 +- Tests/test_imagecms.py | 2 +- Tests/test_imagecolor.py | 2 +- Tests/test_imagedraw.py | 2 +- Tests/test_imageenhance.py | 2 +- Tests/test_imagefile.py | 2 +- Tests/test_imagefileio.py | 2 +- Tests/test_imagefilter.py | 2 +- Tests/test_imagefont.py | 2 +- Tests/test_imagegrab.py | 2 +- Tests/test_imagemath.py | 2 +- Tests/test_imagemode.py | 2 +- Tests/test_imageops.py | 2 +- Tests/test_imageops_usm.py | 2 +- Tests/test_imagepalette.py | 2 +- Tests/test_imagepath.py | 2 +- Tests/test_imageqt.py | 2 +- Tests/test_imagesequence.py | 2 +- Tests/test_imageshow.py | 2 +- Tests/test_imagestat.py | 2 +- Tests/test_imagetk.py | 2 +- Tests/test_imagetransform.py | 2 +- Tests/test_imagewin.py | 2 +- Tests/test_lib_image.py | 2 +- Tests/test_lib_pack.py | 2 +- Tests/test_locale.py | 2 +- Tests/test_mode_i16.py | 2 +- Tests/test_numpy.py | 2 +- Tests/test_olefileio.py | 2 +- Tests/test_pickle.py | 2 +- Tests/test_shell_injection.py | 2 +- 100 files changed, 114 insertions(+), 113 deletions(-) diff --git a/Tests/helper.py b/Tests/helper.py index 7f0aaa73c..c00e105e4 100644 --- a/Tests/helper.py +++ b/Tests/helper.py @@ -5,22 +5,19 @@ from __future__ import print_function import sys import tempfile import os -import glob if sys.version_info[:2] <= (2, 6): import unittest2 as unittest else: import unittest -def tearDownModule(): - #remove me later - pass class PillowTestCase(unittest.TestCase): def __init__(self, *args, **kwargs): unittest.TestCase.__init__(self, *args, **kwargs) - self.currentResult = None # holds last result object passed to run method + # holds last result object passed to run method: + self.currentResult = None def run(self, result=None): self.currentResult = result # remember result for use later @@ -40,7 +37,7 @@ class PillowTestCase(unittest.TestCase): except OSError: pass # report? else: - print("=== orphaned temp file: %s" %path) + print("=== orphaned temp file: %s" % path) def assert_almost_equal(self, a, b, msg=None, eps=1e-6): self.assertLess( @@ -134,7 +131,7 @@ class PillowTestCase(unittest.TestCase): if platform is not None: skip = sys.platform.startswith(platform) if travis is not None: - skip = skip and (travis == bool(os.environ.get('TRAVIS',False))) + skip = skip and (travis == bool(os.environ.get('TRAVIS', False))) if skip: self.skipTest(msg or "Known Bad Test") @@ -142,8 +139,8 @@ class PillowTestCase(unittest.TestCase): assert template[:5] in ("temp.", "temp_") (fd, path) = tempfile.mkstemp(template[4:], template[:4]) os.close(fd) - - self.addCleanup(self.delete_tempfile, path) + + self.addCleanup(self.delete_tempfile, path) return path def open_withImagemagick(self, f): @@ -155,8 +152,8 @@ class PillowTestCase(unittest.TestCase): from PIL import Image return Image.open(outfile) raise IOError() - - + + # helpers import sys @@ -210,17 +207,21 @@ def command_succeeds(cmd): return False return True + def djpeg_available(): return command_succeeds(['djpeg', '--help']) + def cjpeg_available(): return command_succeeds(['cjpeg', '--help']) + def netpbm_available(): - return command_succeeds(["ppmquant", "--help"]) and \ - command_succeeds(["ppmtogif", "--help"]) + return (command_succeeds(["ppmquant", "--help"]) and + command_succeeds(["ppmtogif", "--help"])) + def imagemagick_available(): return command_succeeds(['convert', '-version']) - + # End of file diff --git a/Tests/test_000_sanity.py b/Tests/test_000_sanity.py index 1ad76cc50..22e582ec3 100644 --- a/Tests/test_000_sanity.py +++ b/Tests/test_000_sanity.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase import PIL import PIL.Image diff --git a/Tests/test_bmp_reference.py b/Tests/test_bmp_reference.py index c8d93983b..b45ea76f6 100644 --- a/Tests/test_bmp_reference.py +++ b/Tests/test_bmp_reference.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image import os diff --git a/Tests/test_cffi.py b/Tests/test_cffi.py index 8ff4e817f..b9f99976d 100644 --- a/Tests/test_cffi.py +++ b/Tests/test_cffi.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena try: import cffi diff --git a/Tests/test_decompression_bomb.py b/Tests/test_decompression_bomb.py index 4c09bd9e3..0803732ce 100644 --- a/Tests/test_decompression_bomb.py +++ b/Tests/test_decompression_bomb.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_file_bmp.py b/Tests/test_file_bmp.py index 2870aba04..e04f3642c 100644 --- a/Tests/test_file_bmp.py +++ b/Tests/test_file_bmp.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image import io diff --git a/Tests/test_file_eps.py b/Tests/test_file_eps.py index 6a1a1b5e2..0ca4249a3 100644 --- a/Tests/test_file_eps.py +++ b/Tests/test_file_eps.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image, EpsImagePlugin import io diff --git a/Tests/test_file_fli.py b/Tests/test_file_fli.py index a98a80b78..0c1d6e36a 100644 --- a/Tests/test_file_fli.py +++ b/Tests/test_file_fli.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py index e31779df0..84f34efb3 100644 --- a/Tests/test_file_gif.py +++ b/Tests/test_file_gif.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena, netpbm_available +from helper import unittest, PillowTestCase, lena, netpbm_available from PIL import Image from PIL import GifImagePlugin diff --git a/Tests/test_file_icns.py b/Tests/test_file_icns.py index f19eb16b7..99f6da9e3 100644 --- a/Tests/test_file_icns.py +++ b/Tests/test_file_icns.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_file_ico.py b/Tests/test_file_ico.py index 165d10225..c3bf7a992 100644 --- a/Tests/test_file_ico.py +++ b/Tests/test_file_ico.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_file_jpeg.py b/Tests/test_file_jpeg.py index 283c48eb7..69c07d2dc 100644 --- a/Tests/test_file_jpeg.py +++ b/Tests/test_file_jpeg.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena, py3 +from helper import unittest, PillowTestCase, lena, py3 from helper import djpeg_available, cjpeg_available import random diff --git a/Tests/test_file_jpeg2k.py b/Tests/test_file_jpeg2k.py index 23564c434..a0e7dfb53 100644 --- a/Tests/test_file_jpeg2k.py +++ b/Tests/test_file_jpeg2k.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image from io import BytesIO diff --git a/Tests/test_file_libtiff.py b/Tests/test_file_libtiff.py index 1afeee488..60eea8b3b 100644 --- a/Tests/test_file_libtiff.py +++ b/Tests/test_file_libtiff.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena, py3 +from helper import unittest, PillowTestCase, lena, py3 import os diff --git a/Tests/test_file_libtiff_small.py b/Tests/test_file_libtiff_small.py index acc2390c9..043ecaf3f 100644 --- a/Tests/test_file_libtiff_small.py +++ b/Tests/test_file_libtiff_small.py @@ -1,4 +1,4 @@ -from helper import unittest, tearDownModule +from helper import unittest from PIL import Image diff --git a/Tests/test_file_msp.py b/Tests/test_file_msp.py index 2444879d1..a64faad10 100644 --- a/Tests/test_file_msp.py +++ b/Tests/test_file_msp.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_file_palm.py b/Tests/test_file_palm.py index c1947ff37..388df0237 100644 --- a/Tests/test_file_palm.py +++ b/Tests/test_file_palm.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena, imagemagick_available +from helper import unittest, PillowTestCase, lena, imagemagick_available import os.path diff --git a/Tests/test_file_pcx.py b/Tests/test_file_pcx.py index d0800e203..f278bd91d 100644 --- a/Tests/test_file_pcx.py +++ b/Tests/test_file_pcx.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_file_pdf.py b/Tests/test_file_pdf.py index 089168393..689302bb5 100644 --- a/Tests/test_file_pdf.py +++ b/Tests/test_file_pdf.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena import os.path diff --git a/Tests/test_file_png.py b/Tests/test_file_png.py index 145eff327..de96fdf3e 100644 --- a/Tests/test_file_png.py +++ b/Tests/test_file_png.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from io import BytesIO diff --git a/Tests/test_file_ppm.py b/Tests/test_file_ppm.py index d9e4e0674..e1f1537d2 100644 --- a/Tests/test_file_ppm.py +++ b/Tests/test_file_ppm.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_file_psd.py b/Tests/test_file_psd.py index 007646901..ee903ce5c 100644 --- a/Tests/test_file_psd.py +++ b/Tests/test_file_psd.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_file_spider.py b/Tests/test_file_spider.py index e0731ca8c..622bfd624 100644 --- a/Tests/test_file_spider.py +++ b/Tests/test_file_spider.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image from PIL import SpiderImagePlugin diff --git a/Tests/test_file_tar.py b/Tests/test_file_tar.py index 7e36f35fc..7010973ce 100644 --- a/Tests/test_file_tar.py +++ b/Tests/test_file_tar.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image, TarIO diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py index ed3d1e9cd..72156bb39 100644 --- a/Tests/test_file_tiff.py +++ b/Tests/test_file_tiff.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena, py3 +from helper import unittest, PillowTestCase, lena, py3 from PIL import Image diff --git a/Tests/test_file_tiff_metadata.py b/Tests/test_file_tiff_metadata.py index 2019f3455..e0805b525 100644 --- a/Tests/test_file_tiff_metadata.py +++ b/Tests/test_file_tiff_metadata.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image, TiffImagePlugin, TiffTags diff --git a/Tests/test_file_webp.py b/Tests/test_file_webp.py index 1eeea57d3..ffaf7c673 100644 --- a/Tests/test_file_webp.py +++ b/Tests/test_file_webp.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_file_webp_alpha.py b/Tests/test_file_webp_alpha.py index 0df3143bb..5f8f653cf 100644 --- a/Tests/test_file_webp_alpha.py +++ b/Tests/test_file_webp_alpha.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_file_webp_lossless.py b/Tests/test_file_webp_lossless.py index 9f8e339de..662ad1117 100644 --- a/Tests/test_file_webp_lossless.py +++ b/Tests/test_file_webp_lossless.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_file_webp_metadata.py b/Tests/test_file_webp_metadata.py index 2470f4c49..6aadf9c7e 100644 --- a/Tests/test_file_webp_metadata.py +++ b/Tests/test_file_webp_metadata.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_file_xbm.py b/Tests/test_file_xbm.py index d520ef460..02aec70b1 100644 --- a/Tests/test_file_xbm.py +++ b/Tests/test_file_xbm.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_file_xpm.py b/Tests/test_file_xpm.py index e6e750298..d79f5fbda 100644 --- a/Tests/test_file_xpm.py +++ b/Tests/test_file_xpm.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_font_bdf.py b/Tests/test_font_bdf.py index ce5a371e0..0df8e866b 100644 --- a/Tests/test_font_bdf.py +++ b/Tests/test_font_bdf.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import FontFile, BdfFontFile diff --git a/Tests/test_font_pcf.py b/Tests/test_font_pcf.py index 8c4c04cd4..5e9e02c8c 100644 --- a/Tests/test_font_pcf.py +++ b/Tests/test_font_pcf.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image, FontFile, PcfFontFile from PIL import ImageFont, ImageDraw diff --git a/Tests/test_format_lab.py b/Tests/test_format_lab.py index 188b0d1fa..53468db5f 100644 --- a/Tests/test_format_lab.py +++ b/Tests/test_format_lab.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_image.py b/Tests/test_image.py index e41447e42..174964ce7 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_image_array.py b/Tests/test_image_array.py index dce2fa106..a0f5f29e1 100644 --- a/Tests/test_image_array.py +++ b/Tests/test_image_array.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_image_convert.py b/Tests/test_image_convert.py index 1415bae3a..01a80732b 100644 --- a/Tests/test_image_convert.py +++ b/Tests/test_image_convert.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_image_copy.py b/Tests/test_image_copy.py index 205118e47..a7882db94 100644 --- a/Tests/test_image_copy.py +++ b/Tests/test_image_copy.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_image_crop.py b/Tests/test_image_crop.py index f7ea48c95..da93fe7c8 100644 --- a/Tests/test_image_crop.py +++ b/Tests/test_image_crop.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_image_draft.py b/Tests/test_image_draft.py index 252e60376..a76b8d266 100644 --- a/Tests/test_image_draft.py +++ b/Tests/test_image_draft.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, fromstring, tostring +from helper import unittest, PillowTestCase, fromstring, tostring from PIL import Image diff --git a/Tests/test_image_filter.py b/Tests/test_image_filter.py index 8c04ebb1d..4a85b0a2e 100644 --- a/Tests/test_image_filter.py +++ b/Tests/test_image_filter.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image from PIL import ImageFilter diff --git a/Tests/test_image_frombytes.py b/Tests/test_image_frombytes.py index abba18852..aad8046a1 100644 --- a/Tests/test_image_frombytes.py +++ b/Tests/test_image_frombytes.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_image_getbands.py b/Tests/test_image_getbands.py index 6aadaa502..e803abb02 100644 --- a/Tests/test_image_getbands.py +++ b/Tests/test_image_getbands.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_image_getbbox.py b/Tests/test_image_getbbox.py index f89dcf7ca..8d78195bd 100644 --- a/Tests/test_image_getbbox.py +++ b/Tests/test_image_getbbox.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_image_getcolors.py b/Tests/test_image_getcolors.py index 7011c3443..d3e5a4989 100644 --- a/Tests/test_image_getcolors.py +++ b/Tests/test_image_getcolors.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena class TestImageGetColors(PillowTestCase): diff --git a/Tests/test_image_getdata.py b/Tests/test_image_getdata.py index 71416c4b9..ff6659595 100644 --- a/Tests/test_image_getdata.py +++ b/Tests/test_image_getdata.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena class TestImageGetData(PillowTestCase): diff --git a/Tests/test_image_getextrema.py b/Tests/test_image_getextrema.py index 7d896c821..af7f7698a 100644 --- a/Tests/test_image_getextrema.py +++ b/Tests/test_image_getextrema.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena class TestImageGetExtrema(PillowTestCase): diff --git a/Tests/test_image_getim.py b/Tests/test_image_getim.py index 6141877cd..d498d3923 100644 --- a/Tests/test_image_getim.py +++ b/Tests/test_image_getim.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena, py3 +from helper import unittest, PillowTestCase, lena, py3 class TestImageGetIm(PillowTestCase): diff --git a/Tests/test_image_getpalette.py b/Tests/test_image_getpalette.py index 8b6804a5a..0c399c432 100644 --- a/Tests/test_image_getpalette.py +++ b/Tests/test_image_getpalette.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena class TestImageGetPalette(PillowTestCase): diff --git a/Tests/test_image_getpixel.py b/Tests/test_image_getpixel.py index 20be3bdec..965233f94 100644 --- a/Tests/test_image_getpixel.py +++ b/Tests/test_image_getpixel.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_image_getprojection.py b/Tests/test_image_getprojection.py index 8c340847c..262a21d4b 100644 --- a/Tests/test_image_getprojection.py +++ b/Tests/test_image_getprojection.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_image_histogram.py b/Tests/test_image_histogram.py index 6fd203758..70f78a1fb 100644 --- a/Tests/test_image_histogram.py +++ b/Tests/test_image_histogram.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena class TestImageHistogram(PillowTestCase): diff --git a/Tests/test_image_load.py b/Tests/test_image_load.py index 14cb76fdb..786cd6ad8 100644 --- a/Tests/test_image_load.py +++ b/Tests/test_image_load.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_image_mode.py b/Tests/test_image_mode.py index ba5e0810a..25c35c607 100644 --- a/Tests/test_image_mode.py +++ b/Tests/test_image_mode.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_image_offset.py b/Tests/test_image_offset.py index 1b45fec4a..09f12266f 100644 --- a/Tests/test_image_offset.py +++ b/Tests/test_image_offset.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena class TestImageOffset(PillowTestCase): diff --git a/Tests/test_image_point.py b/Tests/test_image_point.py index 1f3aaf446..7b6cd4fc7 100644 --- a/Tests/test_image_point.py +++ b/Tests/test_image_point.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena import sys diff --git a/Tests/test_image_putalpha.py b/Tests/test_image_putalpha.py index bb36b335e..85c7ac262 100644 --- a/Tests/test_image_putalpha.py +++ b/Tests/test_image_putalpha.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_image_putdata.py b/Tests/test_image_putdata.py index d792adfe6..c7c3115aa 100644 --- a/Tests/test_image_putdata.py +++ b/Tests/test_image_putdata.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena import sys diff --git a/Tests/test_image_putpalette.py b/Tests/test_image_putpalette.py index 26ad09800..a77c1e565 100644 --- a/Tests/test_image_putpalette.py +++ b/Tests/test_image_putpalette.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import ImagePalette diff --git a/Tests/test_image_putpixel.py b/Tests/test_image_putpixel.py index 1afc013c0..a7f5dc2bb 100644 --- a/Tests/test_image_putpixel.py +++ b/Tests/test_image_putpixel.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_image_quantize.py b/Tests/test_image_quantize.py index 63fe0cb21..2cbdac225 100644 --- a/Tests/test_image_quantize.py +++ b/Tests/test_image_quantize.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_image_resize.py b/Tests/test_image_resize.py index a200b17b4..6c9932e45 100644 --- a/Tests/test_image_resize.py +++ b/Tests/test_image_resize.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena class TestImageResize(PillowTestCase): diff --git a/Tests/test_image_rotate.py b/Tests/test_image_rotate.py index bb24ddf4f..531fdd63f 100644 --- a/Tests/test_image_rotate.py +++ b/Tests/test_image_rotate.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena class TestImageRotate(PillowTestCase): diff --git a/Tests/test_image_split.py b/Tests/test_image_split.py index 284acd87c..343f4bf8e 100644 --- a/Tests/test_image_split.py +++ b/Tests/test_image_split.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_image_thumbnail.py b/Tests/test_image_thumbnail.py index 6b33da318..ee49be43e 100644 --- a/Tests/test_image_thumbnail.py +++ b/Tests/test_image_thumbnail.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena class TestImageThumbnail(PillowTestCase): diff --git a/Tests/test_image_tobitmap.py b/Tests/test_image_tobitmap.py index 93f01c9de..56b5ef001 100644 --- a/Tests/test_image_tobitmap.py +++ b/Tests/test_image_tobitmap.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena, fromstring +from helper import unittest, PillowTestCase, lena, fromstring class TestImageToBitmap(PillowTestCase): diff --git a/Tests/test_image_transform.py b/Tests/test_image_transform.py index b36344416..1873ee9a4 100644 --- a/Tests/test_image_transform.py +++ b/Tests/test_image_transform.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_image_transpose.py b/Tests/test_image_transpose.py index ec83aa3a6..f13e54ee7 100644 --- a/Tests/test_image_transpose.py +++ b/Tests/test_image_transpose.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_imagechops.py b/Tests/test_imagechops.py index fe377f864..552314fd1 100644 --- a/Tests/test_imagechops.py +++ b/Tests/test_imagechops.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image from PIL import ImageChops diff --git a/Tests/test_imagecms.py b/Tests/test_imagecms.py index f3f0791e5..152241f90 100644 --- a/Tests/test_imagecms.py +++ b/Tests/test_imagecms.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_imagecolor.py b/Tests/test_imagecolor.py index fce64876b..5d8944852 100644 --- a/Tests/test_imagecolor.py +++ b/Tests/test_imagecolor.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image from PIL import ImageColor diff --git a/Tests/test_imagedraw.py b/Tests/test_imagedraw.py index 4610e2b0b..b632da73b 100644 --- a/Tests/test_imagedraw.py +++ b/Tests/test_imagedraw.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image from PIL import ImageColor diff --git a/Tests/test_imageenhance.py b/Tests/test_imageenhance.py index eec26d768..433c49cf6 100644 --- a/Tests/test_imageenhance.py +++ b/Tests/test_imageenhance.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image from PIL import ImageEnhance diff --git a/Tests/test_imagefile.py b/Tests/test_imagefile.py index 849767195..d7f7f2a56 100644 --- a/Tests/test_imagefile.py +++ b/Tests/test_imagefile.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena, fromstring, tostring +from helper import unittest, PillowTestCase, lena, fromstring, tostring from io import BytesIO diff --git a/Tests/test_imagefileio.py b/Tests/test_imagefileio.py index 791207dca..32ee0bc5e 100644 --- a/Tests/test_imagefileio.py +++ b/Tests/test_imagefileio.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena, tostring +from helper import unittest, PillowTestCase, lena, tostring from PIL import Image from PIL import ImageFileIO diff --git a/Tests/test_imagefilter.py b/Tests/test_imagefilter.py index 3dcb1d14f..f7edb409a 100644 --- a/Tests/test_imagefilter.py +++ b/Tests/test_imagefilter.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import ImageFilter diff --git a/Tests/test_imagefont.py b/Tests/test_imagefont.py index 927c80bee..17cb38cc2 100644 --- a/Tests/test_imagefont.py +++ b/Tests/test_imagefont.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image from PIL import ImageDraw diff --git a/Tests/test_imagegrab.py b/Tests/test_imagegrab.py index a6c50fb31..2275d34a1 100644 --- a/Tests/test_imagegrab.py +++ b/Tests/test_imagegrab.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase try: from PIL import ImageGrab diff --git a/Tests/test_imagemath.py b/Tests/test_imagemath.py index 35d75dbbd..17d43d25a 100644 --- a/Tests/test_imagemath.py +++ b/Tests/test_imagemath.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image from PIL import ImageMath diff --git a/Tests/test_imagemode.py b/Tests/test_imagemode.py index 7febc697e..2c5730d74 100644 --- a/Tests/test_imagemode.py +++ b/Tests/test_imagemode.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import ImageMode diff --git a/Tests/test_imageops.py b/Tests/test_imageops.py index 299a7c618..a4a94ca4d 100644 --- a/Tests/test_imageops.py +++ b/Tests/test_imageops.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import ImageOps diff --git a/Tests/test_imageops_usm.py b/Tests/test_imageops_usm.py index 486b201ab..be7a669da 100644 --- a/Tests/test_imageops_usm.py +++ b/Tests/test_imageops_usm.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image from PIL import ImageOps diff --git a/Tests/test_imagepalette.py b/Tests/test_imagepalette.py index 3ee7ee869..be82f4dcb 100644 --- a/Tests/test_imagepalette.py +++ b/Tests/test_imagepalette.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import ImagePalette diff --git a/Tests/test_imagepath.py b/Tests/test_imagepath.py index c293e4225..cd221b5ca 100644 --- a/Tests/test_imagepath.py +++ b/Tests/test_imagepath.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import ImagePath diff --git a/Tests/test_imageqt.py b/Tests/test_imageqt.py index 549fc7fd6..fd50bf320 100644 --- a/Tests/test_imageqt.py +++ b/Tests/test_imageqt.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena try: from PIL import ImageQt diff --git a/Tests/test_imagesequence.py b/Tests/test_imagesequence.py index 7f8838207..fd10e5989 100644 --- a/Tests/test_imagesequence.py +++ b/Tests/test_imagesequence.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import ImageSequence diff --git a/Tests/test_imageshow.py b/Tests/test_imageshow.py index 08b3ff183..e94ae2d0a 100644 --- a/Tests/test_imageshow.py +++ b/Tests/test_imageshow.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image from PIL import ImageShow diff --git a/Tests/test_imagestat.py b/Tests/test_imagestat.py index 7eded56cf..4d30ff023 100644 --- a/Tests/test_imagestat.py +++ b/Tests/test_imagestat.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image from PIL import ImageStat diff --git a/Tests/test_imagetk.py b/Tests/test_imagetk.py index b868096b2..87a07e288 100644 --- a/Tests/test_imagetk.py +++ b/Tests/test_imagetk.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase class TestImageTk(PillowTestCase): diff --git a/Tests/test_imagetransform.py b/Tests/test_imagetransform.py index dfffafe54..f5741df32 100644 --- a/Tests/test_imagetransform.py +++ b/Tests/test_imagetransform.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image from PIL import ImageTransform diff --git a/Tests/test_imagewin.py b/Tests/test_imagewin.py index f22babbb3..69dbdbe82 100644 --- a/Tests/test_imagewin.py +++ b/Tests/test_imagewin.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image from PIL import ImageWin diff --git a/Tests/test_lib_image.py b/Tests/test_lib_image.py index c7ea4c701..e0a903b00 100644 --- a/Tests/test_lib_image.py +++ b/Tests/test_lib_image.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_lib_pack.py b/Tests/test_lib_pack.py index c8ed39c40..102835b58 100644 --- a/Tests/test_lib_pack.py +++ b/Tests/test_lib_pack.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, py3 +from helper import unittest, PillowTestCase, py3 from PIL import Image diff --git a/Tests/test_locale.py b/Tests/test_locale.py index 0465fb207..9ef136bf9 100644 --- a/Tests/test_locale.py +++ b/Tests/test_locale.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_mode_i16.py b/Tests/test_mode_i16.py index d8e205b66..b7dc76fb4 100644 --- a/Tests/test_mode_i16.py +++ b/Tests/test_mode_i16.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_numpy.py b/Tests/test_numpy.py index c3c0f7e90..07c3e0c21 100644 --- a/Tests/test_numpy.py +++ b/Tests/test_numpy.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule, lena +from helper import unittest, PillowTestCase, lena from PIL import Image diff --git a/Tests/test_olefileio.py b/Tests/test_olefileio.py index f31302db1..1cff273a1 100644 --- a/Tests/test_olefileio.py +++ b/Tests/test_olefileio.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase import datetime diff --git a/Tests/test_pickle.py b/Tests/test_pickle.py index 304baf964..eae5eb671 100644 --- a/Tests/test_pickle.py +++ b/Tests/test_pickle.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import Image diff --git a/Tests/test_shell_injection.py b/Tests/test_shell_injection.py index eff03fd59..ef80bfc98 100644 --- a/Tests/test_shell_injection.py +++ b/Tests/test_shell_injection.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from helper import djpeg_available, cjpeg_available, netpbm_available import sys From 8d5a1c2a19d5ac4e1047b052cc6a1fbdd703f398 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 7 Jul 2014 11:21:46 -0700 Subject: [PATCH 024/311] Renamed to avoid test runner --- Tests/{32bit_segfault_test.py => 32bit_segfault_check.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Tests/{32bit_segfault_test.py => 32bit_segfault_check.py} (100%) diff --git a/Tests/32bit_segfault_test.py b/Tests/32bit_segfault_check.py similarity index 100% rename from Tests/32bit_segfault_test.py rename to Tests/32bit_segfault_check.py From 0a160e44d8f345d89527995bf565101a4f89fba8 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 7 Jul 2014 11:22:11 -0700 Subject: [PATCH 025/311] Guard to prevent 64 bit machines from crashing --- Tests/32bit_segfault_check.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Tests/32bit_segfault_check.py b/Tests/32bit_segfault_check.py index 958bc6b3c..822d524fd 100644 --- a/Tests/32bit_segfault_check.py +++ b/Tests/32bit_segfault_check.py @@ -1,7 +1,10 @@ #!/usr/bin/env python from PIL import Image +import sys -im = Image.new('L', (999999, 999999), 0) + +if sys.maxsize < 2**32: + im = Image.new('L', (999999, 999999), 0) From 925277cbfcf881f04a5ace69f88a8b3f4ff5b992 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20J=C3=B8rgen=20Solberg?= Date: Mon, 7 Jul 2014 20:46:54 +0200 Subject: [PATCH 026/311] ensure that the prevous frame was loaded when seek()ing --- PIL/GifImagePlugin.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/PIL/GifImagePlugin.py b/PIL/GifImagePlugin.py index cb96b9c95..4107c6ba3 100644 --- a/PIL/GifImagePlugin.py +++ b/PIL/GifImagePlugin.py @@ -101,6 +101,10 @@ class GifImageFile(ImageFile.ImageFile): self.__fp.seek(self.__rewind) self._prev_im = None self.disposal_method = 0 + else: + # ensure that the previous frame was loaded + if not self.im: + self.load() if frame != self.__frame + 1: raise ValueError("cannot seek to frame %d" % frame) From 5fa2794386f4cf44997e19cf2d89c156349fd381 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20J=C3=B8rgen=20Solberg?= Date: Mon, 7 Jul 2014 20:47:18 +0200 Subject: [PATCH 027/311] Tests dispose and transparency for animated gifs --- Tests/images/dispose_bgnd.gif | Bin 0 -> 1450 bytes Tests/images/dispose_none.gif | Bin 0 -> 1450 bytes Tests/images/dispose_prev.gif | Bin 0 -> 1450 bytes Tests/images/iss634.gif | Bin 0 -> 277517 bytes Tests/test_file_gif.py | 44 ++++++++++++++++++++++++++++++++++ 5 files changed, 44 insertions(+) create mode 100644 Tests/images/dispose_bgnd.gif create mode 100644 Tests/images/dispose_none.gif create mode 100644 Tests/images/dispose_prev.gif create mode 100644 Tests/images/iss634.gif diff --git a/Tests/images/dispose_bgnd.gif b/Tests/images/dispose_bgnd.gif new file mode 100644 index 0000000000000000000000000000000000000000..d68504010fe1248b656d15ee84172da4ab402219 GIT binary patch literal 1450 zcmYk*dpOg390%~Drc~ z%-Iz$W>&3$+SY`PXz7U!Q~KtU``ig>i5p6lQFeuJ`lA3cRA6#wv@Ry}Ug$M`1ATit zD~#I=yMKnAT-&ZJ$YspM9QezeH({0VrMhWTk~4r(;`mLbmn?bo;qmVwo`~9zpG-_h zFKf7ius2&!c?XDt*JoVTN`+qabKVPR;>H7qxS>JZ zS{xAPF&dTCfl@IHhs)_=)g4RW!5?+iVYnG2kwPLedNL7qxD@Eh;S16V~VNT4n;G|)uo{&rKD(KfUe z&5lTEg%17+3-@h)ns#0%`3}8W((p5={-9c=B`3GFV=(@*3fXf&&VFT~(QzRP6)fET zh)dCtcQbSLk2NDJxuJ{_A_8rcY$Fq>#ZItzyh3mh9uXgN#UkFYFv5lvinWI+U{j2+ zF&bCT<|k+0tKfF%N-4J%mGwAd^Go`BesQHG5wj**d2fCnwEO!tB zJr0)uTdQAxJrI7$w%fWBHuHR}J~Nhxc%}y#B8v6l%w?%9R=S!9ZPa>3p_kRvNz3wn zwEV@UOA6j7*2yCkcG&?~RT+0GAVo?|Rgk-Fg*hQkjw4Vk&3?X$29tB+@HBLEmWONZ z%`lo4BBC&fUP7hBA_$3DH!JhXC}@WC9d>Cvvw%TpF)WE~z&A0ud94rH^Q$;r{_%IZ z%T*XO-f(?C;Xb9eu5(0_@oxD&v{WMYa+wbIzJ$Uu`8e$iC$@64D(%#%wcMK4$7WC zk>@27kloi$d%v1mH0D#a1;?;ytgSS6m5%8Br*obLI0_2*m|$G+?-w8)>slY^TG-%c zIuH$CW2DK8vFeQL2WtXt@k&!g1s6-y*>!W=A4=|ozGGpEiueZSB5kMH;M`RDt3-XB|gjIoJd01yDY0{~U( zZu%1eVjBz&00027EA4FK=4xeuwLu#o#XzDbebEuMimLl|a`I{)ugTplZ=23;o$VIN zQReN6molqXL2c`TMzr+grYU{v$$jpmw8Rai$|$=+IQ>xo8Ok>~G*%ZAdN1@EuYoQU zW`%K^VfW9llWW_R`MHewm;-;AcTQR*e5r2QlH?4clsJA<=_Sh^{doL)h$o^pVE z=Wmn1D#s0-Ui&9MaAijvdF4I&L+)|&9`DFVD_Y9OQCX|)M%5E)(Vo{_^8UDZnvnpM{B_YW^lD`+G`pG#(WAM&TRuXz&`aiq zmaf4@?7V`s!h=s%Ke=U=`1uRea5-}y@Gq*qI3NY6i#B(Z&wO89~_-=vMu|xLk2gc-4iydAZps7xUhtOEKoYchPx|{i^GBqKz_%7KGP?wdF zm>F8^&A{0DZ1Nd(OX-9^>gqgYgi(etm}28RqdxH56ytI49RJON-s}={d4=Ed zaK>4%##7PVaNhd3iP%>2{4_D8jZ{LN76+-;Z@8%S$jOWH_brF|ntd8FLiQY#vtM0obX<%=1q*~9 zaVa|TZf4H@v1Vi?HE*! zM&s(){N(I=72FP8DdpCpvR-Fwe#t=ZFYeYCMn+wHvIb?693M{hT~I`h&#>2%N>M3 zPrxO>*6P<^4~Ac|?Xm8H%|0Km&x|D^p6Nk`iDLaYb6IMOm98d28?}*9=w&s1(z1L2 zEq}4;l7csib@E7sU3LIgRmPnPNRd)g736MPVNQsX;|LT>v!Ab`!Q|XHJPjS4<>8up zGmNH%h$u{=mryCO2ts1k&C0wo3YsB(hg}-aEMO2?3`=4g@J&o^Uh9MQ{3=ejfBc=E zauo)xbEJNNaG%mw*EOoicsRxz-aj^lpN{QMn?sB(KVI+~G#HxC^KJi)x#=eBH2bp9 zX=RYYHA9Qg%2OfW9^_Y07Y4XqD!Eo|^J z9f*dnG1BD4cy-40gEfJ+c%|v0f)&?=(g~fyx})wd6(zXE83zYfmI*6mhgJt9n(-B7 b%E*yZ1O;iw&90#_6P@8>Mz6lO0)Xk?ykLfe literal 0 HcmV?d00001 diff --git a/Tests/images/dispose_prev.gif b/Tests/images/dispose_prev.gif new file mode 100644 index 0000000000000000000000000000000000000000..0de7760e98e27e622490a8221b7f4074d6853fc8 GIT binary patch literal 1450 zcmYk*dpOg390%~6ScX` zCD&%;iQ^%nVu>V9n1jVBok%*ItR$R2 z0b&~r284y!lXkXobG5R-+Mo@PVjy8lU(^>31N(M!@@gNi$=xk)o6c^X?cR~2%-a<& zWmc_%+SUb)Xz9sKQ~K7E`<;{05;v48qwEUd^hW_?DBtAJSY1r$z0hmC2KvrUR#;~< z?EV>cQf<33KbJ8dbKoy??xa=xm+Gc1NzNcjiQ_kwUb5`bPawR9cp_>;eljshd0Epr z1bed$m3M$RczwoYtybt&Kj*%HCTyNz2ZcJCma!SbVU(R6Mg4A@%i;JOIIDZ)`P)RW z%5g)d*ZxTlT-gyvUU`rHkbB&`$2&68ikAFwRMu*{QT2pcwC6RKygx49PLZpqymF41 zHU&ayhrl6eiEaF-PsnL_FpgTQqqX1xGq_|Ogh!+u&90_G^k{DHmXDAv^pZM5OV?l{ zc3weR;lU@XpWHG_`1}QGxSY8U5TeQm*#LcUKnhS79l)M6)C96=$th=7QTxndD#SQuf$3dP#P6tKxg*cgqg zXY-S??^Sem=t?QK7M1lnWAjS}dVg`ZzA!TC;*&Kflj!(xvhRW-a(sqmT{$CTN#HNN z=B^5^c!bpmJQl^fmx6wULH~C!2hjgH2>&nK)^7;vEp^}GBDO1ZFbBG!{49460zCnj z09&hHe?1s}$+pM33pV?Fygn08LOj!h43otAaptnr7Asv%gf?m;qtMH0`lMy~09yWH z(@D4 z8h50AfOwzMSJySF$#^)%8{R)QMVQ9-r_CY8mLD(p4H^v1=lQn(#@uw1b((!y=(IA( z^hTyQrusrQbA74OFV-groU8rqnF?%UHyY@>&`1HNzhb5Q6Bm|fzxHu*@{F5D=LQ^p z^wRb(u02ckhD-WXb+C%6%jdl)Q#Fy{X0{ki{MxsyJ7sGrPBXgMAo`bUIP3C#Y z1Z4LQ(B7}57LEH|LL5k0gn6v9wrzU{QCt+$A;Dix)wJ0nGQt5 z*BEK?V!S%z`oWq&TY}PbQNfDqLg|D~Vck*pmx>ad#Tf?&SC)w@WrtP=B$^2oWy;8r YQ$z)6$IY&xF%zBPV@9vOxB`Ib-{1y@KmY&$ literal 0 HcmV?d00001 diff --git a/Tests/images/iss634.gif b/Tests/images/iss634.gif new file mode 100644 index 0000000000000000000000000000000000000000..ba4e4566fa40e80bbf63ba5ddf2b42b75b93a2f4 GIT binary patch literal 277517 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%0A2vEb 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 HNDBW4E_Em2 literal 0 HcmV?d00001 diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py index e31779df0..2aa7f1f3b 100644 --- a/Tests/test_file_gif.py +++ b/Tests/test_file_gif.py @@ -106,6 +106,50 @@ class TestFileGif(PillowTestCase): GifImagePlugin._save_netpbm(img, 0, tempfile) self.assert_image_similar(img, Image.open(tempfile).convert("L"), 0) + def test_seek(self): + img = Image.open("Tests/images/dispose_none.gif") + framecount = 0 + try: + while True: + framecount += 1 + img.seek(img.tell() +1) + except EOFError: + assert(framecount == 5) + + def test_dispose_none(self): + img = Image.open("Tests/images/dispose_none.gif") + try: + while True: + img.seek(img.tell() +1) + assert(img.disposal_method == 1) + except EOFError: + pass + + def test_dispose_background(self): + img = Image.open("Tests/images/dispose_bgnd.gif") + try: + while True: + img.seek(img.tell() +1) + assert(img.disposal_method == 2) + except EOFError: + pass + + def test_dispose_previous(self): + img = Image.open("Tests/images/dispose_prev.gif") + try: + while True: + img.seek(img.tell() +1) + assert(img.disposal_method == 3) + except EOFError: + pass + + def test_iss634(self): + img = Image.open("Tests/images/iss634.gif") + # seek to the second frame + img.seek(img.tell() +1) + # all transparent pixels should be replaced with the color from the first frame + assert(img.histogram()[img.info['transparency']] == 0) + if __name__ == '__main__': unittest.main() From add45b494a6a99cdc9084f6b0ef8dafa66b20a8c Mon Sep 17 00:00:00 2001 From: hugovk Date: Mon, 7 Jul 2014 22:31:20 +0300 Subject: [PATCH 028/311] Extract __main__ section of PIL/ImageFont.py into Scripts/createfontdatachunk.py --- PIL/ImageFont.py | 13 +------------ Scripts/createfontdatachunk.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 12 deletions(-) create mode 100644 Scripts/createfontdatachunk.py diff --git a/PIL/ImageFont.py b/PIL/ImageFont.py index 25993007d..036a42eb9 100644 --- a/PIL/ImageFont.py +++ b/PIL/ImageFont.py @@ -403,15 +403,4 @@ w7IkEbzhVQAAAABJRU5ErkJggg== ''')))) return f - -if __name__ == "__main__": - # create font data chunk for embedding - import base64 - font = "Tests/images/courB08" - print(" f._load_pilfont_data(") - print(" # %s" % os.path.basename(font)) - print(" BytesIO(base64.decodestring(b'''") - base64.encode(open(font + ".pil", "rb"), sys.stdout) - print("''')), Image.open(BytesIO(base64.decodestring(b'''") - base64.encode(open(font + ".pbm", "rb"), sys.stdout) - print("'''))))") +# End of file diff --git a/Scripts/createfontdatachunk.py b/Scripts/createfontdatachunk.py new file mode 100644 index 000000000..0c860701a --- /dev/null +++ b/Scripts/createfontdatachunk.py @@ -0,0 +1,16 @@ +import base64 +import os +import sys + +if __name__ == "__main__": + # create font data chunk for embedding + font = "Tests/images/courB08" + print(" f._load_pilfont_data(") + print(" # %s" % os.path.basename(font)) + print(" BytesIO(base64.decodestring(b'''") + base64.encode(open(font + ".pil", "rb"), sys.stdout) + print("''')), Image.open(BytesIO(base64.decodestring(b'''") + base64.encode(open(font + ".pbm", "rb"), sys.stdout) + print("'''))))") + +# End of file From e24cd3652cc615ba05629f6c8df190259d151064 Mon Sep 17 00:00:00 2001 From: hugovk Date: Mon, 7 Jul 2014 22:34:34 +0300 Subject: [PATCH 029/311] Try travis_retry to avoid spurious pyroma installation failure --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b4b98e784..c9c1e75a1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,8 @@ python: install: - "sudo apt-get -qq install libfreetype6-dev liblcms2-dev python-qt4 ghostscript libffi-dev libjpeg-turbo-progs cmake imagemagick" - "pip install cffi" - - "pip install coveralls nose pyroma" + - "pip install coveralls nose" + - travis_retry pip install pyroma - if [ "$TRAVIS_PYTHON_VERSION" == "2.6" ]; then pip install unittest2; fi # webp From 9e5f2f92497d067bfa2be0c6cb6167d133cefcb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20J=C3=B8rgen=20Solberg?= Date: Mon, 7 Jul 2014 21:49:45 +0200 Subject: [PATCH 030/311] use assertEqual for test cases --- Tests/test_file_gif.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py index 2aa7f1f3b..c5da0910b 100644 --- a/Tests/test_file_gif.py +++ b/Tests/test_file_gif.py @@ -114,14 +114,14 @@ class TestFileGif(PillowTestCase): framecount += 1 img.seek(img.tell() +1) except EOFError: - assert(framecount == 5) + self.assertEqual(framecount, 5) def test_dispose_none(self): img = Image.open("Tests/images/dispose_none.gif") try: while True: img.seek(img.tell() +1) - assert(img.disposal_method == 1) + self.assertEqual(img.disposal_method, 1) except EOFError: pass @@ -130,7 +130,7 @@ class TestFileGif(PillowTestCase): try: while True: img.seek(img.tell() +1) - assert(img.disposal_method == 2) + self.assertEqual(img.disposal_method, 2) except EOFError: pass @@ -139,7 +139,7 @@ class TestFileGif(PillowTestCase): try: while True: img.seek(img.tell() +1) - assert(img.disposal_method == 3) + self.assertEqual(img.disposal_method, 3) except EOFError: pass @@ -148,7 +148,7 @@ class TestFileGif(PillowTestCase): # seek to the second frame img.seek(img.tell() +1) # all transparent pixels should be replaced with the color from the first frame - assert(img.histogram()[img.info['transparency']] == 0) + self.assertEqual(img.histogram()[img.info['transparency']], 0) if __name__ == '__main__': From ef3ba5bfafd674929b77061089da0f69dc5c9003 Mon Sep 17 00:00:00 2001 From: Hugo Date: Mon, 7 Jul 2014 23:06:33 +0300 Subject: [PATCH 031/311] Update CHANGES.rst [CI skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 4cf38ea20..b3a59927b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Fix dispose calculations for animated GIFs #765 + [larsjsol] + - 32bit mult overflow fix #782 [wiredfool] From 73223fcb238959986f90635932d67c441d10a448 Mon Sep 17 00:00:00 2001 From: hugovk Date: Mon, 7 Jul 2014 23:40:37 +0300 Subject: [PATCH 032/311] Test isStringType and isPath in similar way to production code --- Tests/test_util.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Tests/test_util.py b/Tests/test_util.py index 8cf73f47f..a87a7833c 100644 --- a/Tests/test_util.py +++ b/Tests/test_util.py @@ -7,40 +7,41 @@ class TestUtil(PillowTestCase): def test_is_string_type(self): # Arrange - text = "abc" + color = "red" # Act - it_is = _util.isStringType(text) + it_is = _util.isStringType(color) # Assert self.assertTrue(it_is) def test_is_not_string_type(self): # Arrange - integer = 123 + color = (255, 0, 0) # Act - it_is_not = _util.isStringType(integer) + it_is_not = _util.isStringType(color) # Assert self.assertFalse(it_is_not) def test_is_path(self): # Arrange - text = "abc" + fp = "filename.ext" # Act - it_is = _util.isStringType(text) + it_is = _util.isStringType(fp) # Assert self.assertTrue(it_is) def test_is_not_path(self): # Arrange - integer = 123 + filename = self.tempfile("temp.ext") + fp = open(filename, 'w').close() # Act - it_is_not = _util.isPath(integer) + it_is_not = _util.isPath(fp) # Assert self.assertFalse(it_is_not) From 3d71e3fdb22c9cb3f59f05cd474263fbe2dca380 Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 8 Jul 2014 07:59:17 +0300 Subject: [PATCH 033/311] Remove unused tearDownModule --- Tests/test_util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_util.py b/Tests/test_util.py index a87a7833c..a547c6bd6 100644 --- a/Tests/test_util.py +++ b/Tests/test_util.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase from PIL import _util From 37e6a57351b5f164f610e2719daa22543244645e Mon Sep 17 00:00:00 2001 From: Alex Clark Date: Tue, 8 Jul 2014 05:16:12 -0400 Subject: [PATCH 034/311] Update --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index b3a59927b..e32adbad9 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Fix return value of FreeTypeFont.textsize() does not include font offsets + [tk0miya] + - Fix dispose calculations for animated GIFs #765 [larsjsol] From b5c3eb58307f948932e214dc958de003da8aec8e Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 8 Jul 2014 10:37:27 -0700 Subject: [PATCH 035/311] ucase(font_path,font_size) --- Tests/test_imagefont.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_imagefont.py b/Tests/test_imagefont.py index ed3715ed9..ed2439e7c 100644 --- a/Tests/test_imagefont.py +++ b/Tests/test_imagefont.py @@ -74,7 +74,7 @@ try: def test_textsize_equal(self): im = Image.new(mode='RGB', size=(300, 100)) draw = ImageDraw.Draw(im) - ttf = ImageFont.truetype(font_path, font_size) + ttf = ImageFont.truetype(FONT_PATH, FONT_SIZE) txt = "Hello World!" size = draw.textsize(txt, ttf) From 33e8480c8f42a1162902525f11a4a84b10122395 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 8 Jul 2014 10:55:56 -0700 Subject: [PATCH 036/311] Updated Changes.rst [ci skip] --- CHANGES.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index e32adbad9..a51d8b451 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -3,6 +3,8 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- More tests for ImageFont and _util + [hugovk] - Fix return value of FreeTypeFont.textsize() does not include font offsets [tk0miya] From 1f0d3e9b001528d4588ec5e028cc58d311187c06 Mon Sep 17 00:00:00 2001 From: Eric Soroos Date: Wed, 9 Jul 2014 10:12:43 -0700 Subject: [PATCH 037/311] Don't install mp_compile if multiprocessing.Pool() fails, or if 1 process is going to be used --- mp_compile.py | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/mp_compile.py b/mp_compile.py index 71b4089e1..b7c3e7ce4 100644 --- a/mp_compile.py +++ b/mp_compile.py @@ -5,6 +5,11 @@ from multiprocessing import Pool, cpu_count from distutils.ccompiler import CCompiler import os +try: + MAX_PROCS = int(os.environ.get('MAX_CONCURRENCY', cpu_count())) +except: + MAX_PROCS = None + # hideous monkeypatching. but. but. but. def _mp_compile_one(tp): @@ -31,22 +36,27 @@ def _mp_compile(self, sources, output_dir=None, macros=None, output_dir, macros, include_dirs, sources, depends, extra_postargs) cc_args = self._get_cc_args(pp_opts, debug, extra_preargs) - try: - max_procs = int(os.environ.get('MAX_CONCURRENCY', cpu_count())) - except: - max_procs = None - pool = Pool(max_procs) + pool = Pool(MAX_PROCS) try: print ("Building using %d processes" % pool._processes) except: pass - arr = [ - (self, obj, build, cc_args, extra_postargs, pp_opts) for obj in objects - ] + arr = [(self, obj, build, cc_args, extra_postargs, pp_opts) + for obj in objects] pool.map_async(_mp_compile_one, arr) pool.close() pool.join() # Return *all* object filenames, not just the ones we just built. return objects -CCompiler.compile = _mp_compile +# explicitly don't enable if environment says 1 processor +if MAX_PROCS != 1: + try: + # bug, only enable if we can make a Pool. see issue #790 and + # http://stackoverflow.com/questions/6033599/oserror-38-errno-38-with-multiprocessing + pool = Pool(2) + CCompiler.compile = _mp_compile + except Exception as msg: + print("Exception installing mp_compile, proceeding without: %s" %msg) +else: + print("Single threaded build, not installing mp_compile: %s processes" %MAX_PROCS) From 919315eb9d55955a1b3cedadcdf111aca7af9762 Mon Sep 17 00:00:00 2001 From: Eric Soroos Date: Wed, 9 Jul 2014 10:13:02 -0700 Subject: [PATCH 038/311] More agressive make clean --- Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 0637e901f..3dcfe8d13 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,9 @@ pre: clean: python setup.py clean rm PIL/*.so || true - find . -name __pycache__ | xargs rm -r + rm -r build || true + find . -name __pycache__ | xargs rm -r || true + install: python setup.py install From e3911facbc84e2d17f04b190afb2f22091e4430b Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 9 Jul 2014 21:53:13 +0300 Subject: [PATCH 039/311] Test ImageMath's mod, imagemath_equal and imagemath_notequal --- Tests/test_imagemath.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/Tests/test_imagemath.py b/Tests/test_imagemath.py index a03b25cce..562a2f8f6 100644 --- a/Tests/test_imagemath.py +++ b/Tests/test_imagemath.py @@ -83,6 +83,14 @@ class TestImageMath(PillowTestCase): self.assertEqual(pixel(ImageMath.eval("abs(A)", A=A)), "I 1") self.assertEqual(pixel(ImageMath.eval("abs(B)", B=B)), "I 2") + def test_binary_mod(self): + self.assertEqual(pixel(ImageMath.eval("A%A", A=A)), "I 0") + self.assertEqual(pixel(ImageMath.eval("B%B", B=B)), "I 0") + self.assertEqual(pixel(ImageMath.eval("A%B", A=A, B=B)), "I 1") + self.assertEqual(pixel(ImageMath.eval("B%A", A=A, B=B)), "I 0") + self.assertEqual(pixel(ImageMath.eval("Z%A", A=A, Z=Z)), "I 0") + self.assertEqual(pixel(ImageMath.eval("Z%B", B=B, Z=Z)), "I 0") + def test_bitwise_invert(self): self.assertEqual(pixel(ImageMath.eval("~Z", Z=Z)), "I -1") self.assertEqual(pixel(ImageMath.eval("~A", A=A)), "I -2") @@ -154,6 +162,24 @@ class TestImageMath(PillowTestCase): self.assertEqual(pixel(ImageMath.eval("A>=B", A=A, B=B)), "I 0") self.assertEqual(pixel(ImageMath.eval("B>=A", A=A, B=B)), "I 1") + def test_logical_equal(self): + self.assertEqual(pixel(ImageMath.eval("equal(A, A)", A=A)), "I 1") + self.assertEqual(pixel(ImageMath.eval("equal(B, B)", B=B)), "I 1") + self.assertEqual(pixel(ImageMath.eval("equal(Z, Z)", Z=Z)), "I 1") + self.assertEqual(pixel(ImageMath.eval("equal(A, B)", A=A, B=B)), "I 0") + self.assertEqual(pixel(ImageMath.eval("equal(B, A)", A=A, B=B)), "I 0") + self.assertEqual(pixel(ImageMath.eval("equal(A, Z)", A=A, Z=Z)), "I 0") + + def test_logical_not_equal(self): + self.assertEqual(pixel(ImageMath.eval("notequal(A, A)", A=A)), "I 0") + self.assertEqual(pixel(ImageMath.eval("notequal(B, B)", B=B)), "I 0") + self.assertEqual(pixel(ImageMath.eval("notequal(Z, Z)", Z=Z)), "I 0") + self.assertEqual( + pixel(ImageMath.eval("notequal(A, B)", A=A, B=B)), "I 1") + self.assertEqual( + pixel(ImageMath.eval("notequal(B, A)", A=A, B=B)), "I 1") + self.assertEqual( + pixel(ImageMath.eval("notequal(A, Z)", A=A, Z=Z)), "I 1") if __name__ == '__main__': From b12c8b5045c0d4e79ca71fdc03826fe9effe8be8 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 9 Jul 2014 13:15:53 -0700 Subject: [PATCH 040/311] Update CHANGES.rst [ci skip] --- CHANGES.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index a51d8b451..625dcd0bc 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -3,6 +3,10 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ + +- Fixed install issue if Multiprocessing.Pool is not available + [wiredfool] + - More tests for ImageFont and _util [hugovk] From 1141e636d9af3b2310fb9d70f872dac53cd0a957 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 10 Jul 2014 02:00:26 +0300 Subject: [PATCH 041/311] More tests for Image.py --- Tests/test_image.py | 49 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/Tests/test_image.py b/Tests/test_image.py index 174964ce7..c1c2c3d86 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase +from helper import unittest, PillowTestCase, lena from PIL import Image @@ -55,6 +55,53 @@ class TestImage(PillowTestCase): self.assertFalse(item == None) self.assertFalse(item == num) + def test_expand_x(self): + # Arrange + im = lena() + orig_size = im.size + xmargin = 5 + + # Act + im = im._expand(xmargin) + + # Assert + self.assertEqual(im.size[0], orig_size[0] + 2*xmargin) + self.assertEqual(im.size[1], orig_size[1] + 2*xmargin) + + def test_expand_xy(self): + # Arrange + im = lena() + orig_size = im.size + xmargin = 5 + ymargin = 3 + + # Act + im = im._expand(xmargin, ymargin) + + # Assert + self.assertEqual(im.size[0], orig_size[0] + 2*xmargin) + self.assertEqual(im.size[1], orig_size[1] + 2*ymargin) + + def test_getbands(self): + # Arrange + im = lena() + + # Act + bands = im.getbands() + + # Assert + self.assertEqual(bands, ('R', 'G', 'B')) + + def test_getbbox(self): + # Arrange + im = lena() + + # Act + bbox = im.getbbox() + + # Assert + self.assertEqual(bbox, (0, 0, 128, 128)) + if __name__ == '__main__': unittest.main() From ee29b0812b415cd8d6ee5f92e9827006e6e165ed Mon Sep 17 00:00:00 2001 From: wiredfool Date: Thu, 10 Jul 2014 10:15:10 -0700 Subject: [PATCH 042/311] Updated Changes.rst [ci skip] --- CHANGES.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 625dcd0bc..342a99119 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -7,7 +7,7 @@ Changelog (Pillow) - Fixed install issue if Multiprocessing.Pool is not available [wiredfool] -- More tests for ImageFont and _util +- More tests for ImageFont, ImageMath, and _util [hugovk] - Fix return value of FreeTypeFont.textsize() does not include font offsets From 0b278f33760b29fc597a16189a0c993a87614e60 Mon Sep 17 00:00:00 2001 From: Michael Nagy Date: Sat, 12 Jul 2014 10:44:27 -0500 Subject: [PATCH 043/311] Added docs for previously-undocumented ExifTags module. --- docs/reference/ExifTags.rst | 26 ++++++++++++++++++++++++++ docs/reference/index.rst | 1 + 2 files changed, 27 insertions(+) create mode 100644 docs/reference/ExifTags.rst diff --git a/docs/reference/ExifTags.rst b/docs/reference/ExifTags.rst new file mode 100644 index 000000000..9fc7cd13b --- /dev/null +++ b/docs/reference/ExifTags.rst @@ -0,0 +1,26 @@ +.. py:module:: PIL.ExifTags +.. py:currentmodule:: PIL.ExifTags + +:py:mod:`ExifTags` Module +========================== + +The :py:mod:`ExifTags` module exposes two dictionaries which +provide constants and clear-text names for various well-known EXIF tags. + +.. py:class:: PIL.ExifTags.TAGS + + The TAG dictionary maps 16-bit integer EXIF tag enumerations to + descriptive string names. For instance: + + >>> from PIL.ExifTags import TAGS + >>> TAGS[0x010e] + 'ImageDescription' + +.. py:class:: PIL.ExifTags.GPSTAGS + + The GPSTAGS dictionary maps 8-bit integer EXIF gps enumerations to + descriptive string names. For instance: + + >>> from PIL.ExifTags import GPSTAGS + >>> GPSTAGS[20] + 'GPSDestLatitude' diff --git a/docs/reference/index.rst b/docs/reference/index.rst index 2d57e37be..563e03acf 100644 --- a/docs/reference/index.rst +++ b/docs/reference/index.rst @@ -4,6 +4,7 @@ Reference .. toctree:: :maxdepth: 2 + ExifTags Image ImageChops ImageColor From c9fccf8ba8ce919766070778f7084cba282a95e6 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Sat, 12 Jul 2014 09:35:38 -0700 Subject: [PATCH 044/311] Reducing priority of exiftags docs --- docs/reference/index.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/reference/index.rst b/docs/reference/index.rst index 563e03acf..66310e3e7 100644 --- a/docs/reference/index.rst +++ b/docs/reference/index.rst @@ -4,7 +4,7 @@ Reference .. toctree:: :maxdepth: 2 - ExifTags + Image ImageChops ImageColor @@ -23,5 +23,6 @@ Reference ImageStat ImageTk ImageWin + ExifTags PSDraw ../PIL From 8edab8b9393a2199fc3e7dcb358d01bb3d11c2f3 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Sat, 12 Jul 2014 09:37:27 -0700 Subject: [PATCH 045/311] Removed autodoc for ExifTag --- docs/PIL.rst | 8 -------- 1 file changed, 8 deletions(-) diff --git a/docs/PIL.rst b/docs/PIL.rst index 6726f661f..0a6ccd62a 100644 --- a/docs/PIL.rst +++ b/docs/PIL.rst @@ -20,14 +20,6 @@ can be found here. :undoc-members: :show-inheritance: -:mod:`ExifTags` Module ----------------------- - -.. automodule:: PIL.ExifTags - :members: - :undoc-members: - :show-inheritance: - :mod:`FontFile` Module ---------------------- From 5d3f8343852ca9c7fefe913f2f1ef1b6d936ab19 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Sat, 12 Jul 2014 09:41:34 -0700 Subject: [PATCH 046/311] including ImageMorph autodoc --- docs/PIL.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/PIL.rst b/docs/PIL.rst index 0a6ccd62a..3b4706511 100644 --- a/docs/PIL.rst +++ b/docs/PIL.rst @@ -78,6 +78,14 @@ can be found here. :undoc-members: :show-inheritance: +:mod:`ImageMorph` Module +------------------------ + +.. automodule:: PIL.ImageMorph + :members: + :undoc-members: + :show-inheritance: + :mod:`ImageShow` Module ----------------------- From b6b36543ceb8d3e7dc9cb5e2b5d5181795eb625e Mon Sep 17 00:00:00 2001 From: wiredfool Date: Sat, 12 Jul 2014 09:52:04 -0700 Subject: [PATCH 047/311] Autodoc formatting --- PIL/ImageMorph.py | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/PIL/ImageMorph.py b/PIL/ImageMorph.py index b24dd134f..3f15621a6 100644 --- a/PIL/ImageMorph.py +++ b/PIL/ImageMorph.py @@ -15,19 +15,19 @@ LUT_SIZE = 1 << 9 class LutBuilder: """A class for building a MorphLut from a descriptive language - The input patterns is a list of a strings sequences like these: + The input patterns is a list of a strings sequences like these:: - 4:(... - .1. - 111)->1 + 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 + - . or X - Ignore + - 1 - Pixel is on + - 0 - Pixel is off The result of the operation is described after "->" string. @@ -35,15 +35,16 @@ class LutBuilder: 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 + + - 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() + Example:: + + lb = LutBuilder(patterns = ["4:(... .1. 111)->1"]) + lut = lb.build_lut() """ def __init__(self, patterns=None, op_name=None): From f0fa458ca8b300d535680ea744e38486bce75269 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Sat, 12 Jul 2014 09:57:38 -0700 Subject: [PATCH 048/311] Updated Changes.rst [ci skip] --- CHANGES.rst | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 342a99119..3dcc553f4 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,8 +4,8 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ -- Fixed install issue if Multiprocessing.Pool is not available - [wiredfool] +- Added docs for ExifTags + [Wintermute3] - More tests for ImageFont, ImageMath, and _util [hugovk] @@ -16,15 +16,20 @@ Changelog (Pillow) - Fix dispose calculations for animated GIFs #765 [larsjsol] -- 32bit mult overflow fix #782 - [wiredfool] - - Added class checking to Image __eq__ function #775 [radarhere, hugovk] - Test PalmImagePlugin and method to skip known bad tests #776 [hugovk, wiredfool] +2.5.1 (2014-07-10) +------------------ + +- Fixed install issue if Multiprocessing.Pool is not available + [wiredfool] + +- 32bit mult overflow fix #782 + [wiredfool] 2.5.0 (2014-07-01) ------------------ From 123fe38ef73e5dc7485e14d1d35a47e93fa680b0 Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 15 Jul 2014 00:42:31 +0300 Subject: [PATCH 049/311] Test Image's __ne__ and alpha_composite --- Tests/test_image.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/Tests/test_image.py b/Tests/test_image.py index c1c2c3d86..85b0bba0e 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -102,6 +102,44 @@ class TestImage(PillowTestCase): # Assert self.assertEqual(bbox, (0, 0, 128, 128)) + def test_ne(self): + # Arrange + im1 = Image.new('RGB', (25, 25), 'black') + im2 = Image.new('RGB', (25, 25), 'white') + + # Act / Assert + self.assertTrue(im1 != im2) + + def test_alpha_composite(self): + # http://stackoverflow.com/questions/3374878 + # Arrange + import ImageDraw + + expected_colors = sorted([ + (1122, (128, 127, 0, 255)), + (1089, (0, 255, 0, 255)), + (3300, (255, 0, 0, 255)), + (1156, (170, 85, 0, 192)), + (1122, (0, 255, 0, 128)), + (1122, (255, 0, 0, 128)), + (1089, (0, 255, 0, 0))]) + + dst = Image.new('RGBA', size=(100, 100), color=(0, 255, 0, 255)) + draw = ImageDraw.Draw(dst) + draw.rectangle((0, 33, 100, 66), fill=(0, 255, 0, 128)) + draw.rectangle((0, 67, 100, 100), fill=(0, 255, 0, 0)) + src = Image.new('RGBA', size=(100, 100), color=(255, 0, 0, 255)) + draw = ImageDraw.Draw(src) + draw.rectangle((33, 0, 66, 100), fill=(255, 0, 0, 128)) + draw.rectangle((67, 0, 100, 100), fill=(255, 0, 0, 0)) + + # Act + img = Image.alpha_composite(dst, src) + + # Assert + img_colors = sorted(img.getcolors()) + self.assertEqual(img_colors, expected_colors) + if __name__ == '__main__': unittest.main() From 42032b3286ab7305ad53491ddec19014b37deb0a Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Tue, 15 Jul 2014 00:44:12 +0300 Subject: [PATCH 050/311] Fix `ImageStat.mean` docs The docs referred to `ImageStat.pixel`, which isn't a thing at all. In addition, make it absolutely clear that all of the attributes return per-band data. --- docs/reference/ImageStat.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/reference/ImageStat.rst b/docs/reference/ImageStat.rst index c8dfe3062..b8925bf8c 100644 --- a/docs/reference/ImageStat.rst +++ b/docs/reference/ImageStat.rst @@ -22,32 +22,32 @@ for a region of an image. .. py:attribute:: count - Total number of pixels. + Total number of pixels for each band in the image. .. py:attribute:: sum - Sum of all pixels. + Sum of all pixels for each band in the image. .. py:attribute:: sum2 - Squared sum of all pixels. + Squared sum of all pixels for each band in the image. - .. py:attribute:: pixel + .. py:attribute:: mean - Average pixel level. + Average (arithmetic mean) pixel level for each band in the image. .. py:attribute:: median - Median pixel level. + Median pixel level for each band in the image. .. py:attribute:: rms - RMS (root-mean-square). + RMS (root-mean-square) for each band in the image. .. py:attribute:: var - Variance. + Variance for each band in the image. .. py:attribute:: stddev - Standard deviation. + Standard deviation for each band in the image. From 45319bd028c99fdab9fb496340c65a46c8927aba Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 15 Jul 2014 00:48:01 +0300 Subject: [PATCH 051/311] Fix import --- Tests/test_image.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_image.py b/Tests/test_image.py index 85b0bba0e..cd46c9713 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -113,7 +113,7 @@ class TestImage(PillowTestCase): def test_alpha_composite(self): # http://stackoverflow.com/questions/3374878 # Arrange - import ImageDraw + from PIL import ImageDraw expected_colors = sorted([ (1122, (128, 127, 0, 255)), From 8c74cde6f8643edb1daf91a9154dd848b5a55b38 Mon Sep 17 00:00:00 2001 From: Alex Clark Date: Mon, 14 Jul 2014 17:51:18 -0400 Subject: [PATCH 052/311] Update --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 3dcc553f4..95ccd414d 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Fix `ImageStat` docs + [akx] + - Added docs for ExifTags [Wintermute3] From 529ef12f1fb163992b4c787371aa25acd6b487a3 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 14 Jul 2014 21:02:12 -0700 Subject: [PATCH 053/311] Doc targets + help for makefile --- Makefile | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 3dcfe8d13..98e0c647a 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,16 @@ +.PHONY: pre clean install test inplace coverage test-dep help docs livedocs +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " clean remove build products" + @echo " install make and install" + @echo " test run tests on installed pillow" + @echo " inplace make inplace extension" + @echo " coverage run coverage test (in progress)" + @echo " docs make html docs" + @echo " docserver run an http server on the docs directory" + @echo " test-dep install coveraget and test dependencies" pre: virtualenv . @@ -18,12 +30,11 @@ clean: rm -r build || true find . -name __pycache__ | xargs rm -r || true - install: python setup.py install python selftest.py --installed -test: install +test: python test-installed.py inplace: clean @@ -42,3 +53,9 @@ coverage: test-dep: pip install coveralls nose nose-cov pep8 pyflakes + +docs: + $(MAKE) -C docs html + +docserver: + cd docs/_build/html && python -mSimpleHTTPServer 2> /dev/null& \ No newline at end of file From a0cfa466d96fff20feb204f623770bbd3a049083 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 14 Jul 2014 21:11:00 -0700 Subject: [PATCH 054/311] Fixing warnings when building docs --- PIL/ImageCms.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PIL/ImageCms.py b/PIL/ImageCms.py index fc176952e..c62bffee2 100644 --- a/PIL/ImageCms.py +++ b/PIL/ImageCms.py @@ -637,7 +637,7 @@ 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, + If profile isn't a valid CmsProfile object or filename to a profile, a PyCMSError is raised If an error occurs while trying to obtain the name tag, a PyCMSError is raised. @@ -876,7 +876,7 @@ def isIntentSupported(profile, intent, direction): 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 + 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 PyCMSError that will occur if they don't support the modes From d80eef46ce8e07333d80e10a6f9730b22bdf5728 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 14 Jul 2014 21:13:01 -0700 Subject: [PATCH 055/311] Fixing warnings when building docs --- docs/PIL.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/PIL.rst b/docs/PIL.rst index 3b4706511..07d45810e 100644 --- a/docs/PIL.rst +++ b/docs/PIL.rst @@ -61,6 +61,7 @@ can be found here. :show-inheritance: .. intentionally skipped documenting this because it's not documented anywhere + :mod:`ImageDraw2` Module ------------------------ @@ -70,6 +71,7 @@ can be found here. :show-inheritance: .. intentionally skipped documenting this because it's deprecated + :mod:`ImageFileIO` Module ------------------------- From a0d6cf01ce275d66fa26de7c8ea7743a18011219 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 14 Jul 2014 21:24:54 -0700 Subject: [PATCH 056/311] Fixing doc warnings, reformatting docstring comments --- PIL/OleFileIO.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/PIL/OleFileIO.py b/PIL/OleFileIO.py index 8a3c77be4..e5ecc6e56 100644 --- a/PIL/OleFileIO.py +++ b/PIL/OleFileIO.py @@ -15,8 +15,11 @@ Improved version of the OleFileIO module from PIL library v1.1.6 See: http://www.pythonware.com/products/pil/index.htm The Python Imaging Library (PIL) is + Copyright (c) 1997-2005 by Secret Labs AB + Copyright (c) 1995-2005 by Fredrik Lundh + OleFileIO_PL changes are Copyright (c) 2005-2014 by Philippe Lagadec See source code and LICENSE.txt for information on usage and redistribution. @@ -1701,10 +1704,12 @@ class OleFileIO: Open a stream as a read-only file object (BytesIO). filename: path of stream in storage tree (except root entry), either: + - a string using Unix path syntax, for example: 'storage_1/storage_1.2/stream' - a list of storage filenames, path to the desired stream/storage. Example: ['storage_1', 'storage_1.2', 'stream'] + return: file object (read-only) raise IOError if filename not found, or if this is not a stream. """ @@ -1722,6 +1727,7 @@ class OleFileIO: filename: path of stream in storage tree. (see openstream for syntax) return: False if object does not exist, its entry type (>0) otherwise: + - STGTY_STREAM: a stream - STGTY_STORAGE: a storage - STGTY_ROOT: the root entry @@ -1812,7 +1818,7 @@ class OleFileIO: filename: path of stream in storage tree (see openstream for syntax) convert_time: bool, if True timestamps will be converted to Python datetime no_conversion: None or list of int, timestamps not to be converted - (for example total editing time is not a real timestamp) + (for example total editing time is not a real timestamp) return: a dictionary of values indexed by id (integer) """ # make sure no_conversion is a list, just to simplify code below: From 5e12c490343457e16109edacd87f3e39020e26c8 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 14 Jul 2014 21:32:14 -0700 Subject: [PATCH 057/311] Fixing doc warning --- PIL/PSDraw.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/PIL/PSDraw.py b/PIL/PSDraw.py index 88593bb9d..26fdb74ea 100644 --- a/PIL/PSDraw.py +++ b/PIL/PSDraw.py @@ -73,9 +73,8 @@ class PSDraw: def setink(self, ink): """ - .. warning:: + .. warning:: This has been in the PIL API for ages but was never implemented. - This has been in the PIL API for ages but was never implemented. """ print("*** NOT YET IMPLEMENTED ***") From 551cdedb45d890a42850a78d2a1d6bae98b5da7c Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 14 Jul 2014 21:57:58 -0700 Subject: [PATCH 058/311] Pulled ImageCms into it's own docpage --- docs/PIL.rst | 8 -------- docs/reference/ImageCms.rst | 13 +++++++++++++ docs/reference/index.rst | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 docs/reference/ImageCms.rst diff --git a/docs/PIL.rst b/docs/PIL.rst index 07d45810e..537b2fd8f 100644 --- a/docs/PIL.rst +++ b/docs/PIL.rst @@ -52,14 +52,6 @@ can be found here. :undoc-members: :show-inheritance: -:mod:`ImageCms` Module ----------------------- - -.. automodule:: PIL.ImageCms - :members: - :undoc-members: - :show-inheritance: - .. intentionally skipped documenting this because it's not documented anywhere :mod:`ImageDraw2` Module diff --git a/docs/reference/ImageCms.rst b/docs/reference/ImageCms.rst new file mode 100644 index 000000000..2d5bb1388 --- /dev/null +++ b/docs/reference/ImageCms.rst @@ -0,0 +1,13 @@ +.. py:module:: PIL.ImageCms +.. py:currentmodule:: PIL.ImageCms + +:py:mod:`ImageCms` Module +========================= + +The :py:mod:`ImageCms` module provides color profile management +support using the LittleCMS2 color management engine, based on Kevin +Cazabon's PyCMS library. + +.. automodule:: PIL.ImageCms + :members: + :noindex: diff --git a/docs/reference/index.rst b/docs/reference/index.rst index 66310e3e7..fca2b387b 100644 --- a/docs/reference/index.rst +++ b/docs/reference/index.rst @@ -8,6 +8,7 @@ Reference Image ImageChops ImageColor + ImageCms ImageDraw ImageEnhance ImageFile From 6a928ff6e2bd66cfb14089f9755a272765a42f76 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 14 Jul 2014 21:59:42 -0700 Subject: [PATCH 059/311] Removed leading docstring --- PIL/ImageCms.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/PIL/ImageCms.py b/PIL/ImageCms.py index c62bffee2..456bcbb96 100644 --- a/PIL/ImageCms.py +++ b/PIL/ImageCms.py @@ -1,19 +1,18 @@ -""" -The Python Imaging Library. -$Id$ +## The Python Imaging Library. +## $Id$ -Optional color managment support, based on Kevin Cazabon's PyCMS -library. +## Optional color managment support, based on Kevin Cazabon's PyCMS +## library. -History: -2009-03-08 fl Added to PIL. +## History: -Copyright (C) 2002-2003 Kevin Cazabon -Copyright (c) 2009 by Fredrik Lundh +## 2009-03-08 fl Added to PIL. -See the README file for information on usage and redistribution. See -below for the original description. -""" +## Copyright (C) 2002-2003 Kevin Cazabon +## Copyright (c) 2009 by Fredrik Lundh + +## See the README file for information on usage and redistribution. See +## below for the original description. from __future__ import print_function From 5eef39f3fb93635d4aaf55d593d0bb683d21366e Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 14 Jul 2014 22:00:29 -0700 Subject: [PATCH 060/311] Asserting copyright over lcms2 port --- PIL/ImageCms.py | 1 + _imagingcms.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/PIL/ImageCms.py b/PIL/ImageCms.py index 456bcbb96..4ea6409d6 100644 --- a/PIL/ImageCms.py +++ b/PIL/ImageCms.py @@ -10,6 +10,7 @@ ## 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. diff --git a/_imagingcms.c b/_imagingcms.c index df26e1a2d..1b7ef49e1 100644 --- a/_imagingcms.c +++ b/_imagingcms.c @@ -6,6 +6,8 @@ * http://www.cazabon.com * Adapted/reworked for PIL by Fredrik Lundh * Copyright (c) 2009 Fredrik Lundh + * Updated to LCMS2 + * Copyright (c) 2013 Eric Soroos * * pyCMS home page: http://www.cazabon.com/pyCMS * littleCMS home page: http://www.littlecms.com From 4a5d73cb1e1dbc0e781d03d24e62f31d73f14291 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 14 Jul 2014 22:25:02 -0700 Subject: [PATCH 061/311] Fixing errors when compiling docs --- docs/reference/Image.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/reference/Image.rst b/docs/reference/Image.rst index bf64c835d..11666dd0b 100644 --- a/docs/reference/Image.rst +++ b/docs/reference/Image.rst @@ -49,7 +49,10 @@ Functions .. autofunction:: open - .. warning:: > To protect against potential DOS attacks caused by "`decompression bombs`_" (i.e. malicious files which decompress into a huge amount of data and are designed to crash or cause disruption by using up a lot of memory), Pillow will issue a `DecompressionBombWarning` if the image is over a certain limit. If desired, the warning can be turned into an error with `warnings.simplefilter('error', Image.DecompressionBombWarning)` or suppressed entirely with `warnings.simplefilter('ignore', Image.DecompressionBombWarning)`. See also `the logging documentation`_ to have warnings output to the logging facility instead of stderr. + .. warning:: To protect against potential DOS attacks caused by "`decompression bombs`_" (i.e. malicious files which decompress into a huge amount of data and are designed to crash or cause disruption by using up a lot of memory), Pillow will issue a `DecompressionBombWarning` if the image is over a certain limit. If desired, the warning can be turned into an error with `warnings.simplefilter('error', Image.DecompressionBombWarning)` or suppressed entirely with `warnings.simplefilter('ignore', Image.DecompressionBombWarning)`. See also `the logging documentation`_ to have warnings output to the logging facility instead of stderr. + + .. _decompression bombs: https://en.wikipedia.org/wiki/Zip_bomb + .. _the logging documentation: https://docs.python.org/2/library/logging.html?highlight=logging#integration-with-the-warnings-module Image processing ^^^^^^^^^^^^^^^^ From 11ac1e34cf1f5bdbe17951f102e25fc283723570 Mon Sep 17 00:00:00 2001 From: Alex Clark Date: Tue, 15 Jul 2014 04:18:39 -0400 Subject: [PATCH 062/311] Update [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 95ccd414d..6aaf8536c 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Doc cleanup + [wiredfool] + - Fix `ImageStat` docs [akx] From 6c9940e9d1f3051a93d896d8efe7911442c600fe Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 15 Jul 2014 12:23:02 +0300 Subject: [PATCH 063/311] More tests for SpiderImagePlugin.py --- Tests/test_file_spider.py | 49 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/Tests/test_file_spider.py b/Tests/test_file_spider.py index 622bfd624..65e4d2782 100644 --- a/Tests/test_file_spider.py +++ b/Tests/test_file_spider.py @@ -3,13 +3,13 @@ from helper import unittest, PillowTestCase, lena from PIL import Image from PIL import SpiderImagePlugin -test_file = "Tests/images/lena.spider" +TEST_FILE = "Tests/images/lena.spider" class TestImageSpider(PillowTestCase): def test_sanity(self): - im = Image.open(test_file) + im = Image.open(TEST_FILE) im.load() self.assertEqual(im.mode, "F") self.assertEqual(im.size, (128, 128)) @@ -30,7 +30,50 @@ class TestImageSpider(PillowTestCase): self.assertEqual(im2.format, "SPIDER") def test_isSpiderImage(self): - self.assertTrue(SpiderImagePlugin.isSpiderImage(test_file)) + self.assertTrue(SpiderImagePlugin.isSpiderImage(TEST_FILE)) + + def test_tell(self): + # Arrange + im = Image.open(TEST_FILE) + + # Act + index = im.tell() + + # Assert + self.assertEqual(index, 0) + + def test_loadImageSeries(self): + # Arrange + not_spider_file = "Tests/images/lena.ppm" + file_list = [TEST_FILE, not_spider_file, "path/not_found.ext"] + + # Act + img_list = SpiderImagePlugin.loadImageSeries(file_list) + + # Assert + self.assertEqual(len(img_list), 1) + self.assertIsInstance(img_list[0], Image.Image) + self.assertEqual(img_list[0].size, (128, 128)) + + def test_loadImageSeries_no_input(self): + # Arrange + file_list = None + + # Act + img_list = SpiderImagePlugin.loadImageSeries(file_list) + + # Assert + self.assertEqual(img_list, None) + + def test_isInt_not_a_number(self): + # Arrange + not_a_number = "a" + + # Act + ret = SpiderImagePlugin.isInt(not_a_number) + + # Assert + self.assertEqual(ret, 0) if __name__ == '__main__': From 94ac5319606565f53f6a0fcadd3345cb918af6bd Mon Sep 17 00:00:00 2001 From: Alex Clark Date: Tue, 15 Jul 2014 06:01:37 -0400 Subject: [PATCH 064/311] Update [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 6aaf8536c..21166f1b4 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- More tests for SpiderImagePlugin.py + [hugovk] + - Doc cleanup [wiredfool] From 4fe5d520fbd7668df0c5998753be3ed158af32b0 Mon Sep 17 00:00:00 2001 From: Alex Clark Date: Tue, 15 Jul 2014 06:02:34 -0400 Subject: [PATCH 065/311] Bump Though I hate the 'dev' designation I want something to indicate master is where development for the next major version happens. I think we've previously disagreed on simply 'X.X.X' so I'm going with 'X.X.Xdev' to see if that is more palatable. :-) --- PIL/__init__.py | 2 +- _imaging.c | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/PIL/__init__.py b/PIL/__init__.py index d446aa19b..8702d24cd 100644 --- a/PIL/__init__.py +++ b/PIL/__init__.py @@ -12,7 +12,7 @@ # ;-) VERSION = '1.1.7' # PIL version -PILLOW_VERSION = '2.5.0' # Pillow +PILLOW_VERSION = '2.6.0dev' # Pillow _plugins = ['BmpImagePlugin', 'BufrStubImagePlugin', diff --git a/_imaging.c b/_imaging.c index 92258032f..de2603cbc 100644 --- a/_imaging.c +++ b/_imaging.c @@ -71,7 +71,7 @@ * See the README file for information on usage and redistribution. */ -#define PILLOW_VERSION "2.5.0" +#define PILLOW_VERSION "2.6.0dev" #include "Python.h" diff --git a/setup.py b/setup.py index e94e34d28..5017b56e9 100644 --- a/setup.py +++ b/setup.py @@ -90,7 +90,7 @@ except (ImportError, OSError): NAME = 'Pillow' -PILLOW_VERSION = '2.5.0' +PILLOW_VERSION = '2.6.0dev' TCL_ROOT = None JPEG_ROOT = None JPEG2K_ROOT = None From 4b40839970b76e00921b0beef3a1403fde229a55 Mon Sep 17 00:00:00 2001 From: Alex Clark Date: Tue, 15 Jul 2014 06:15:31 -0400 Subject: [PATCH 066/311] Revert "Bump" This reverts commit 4fe5d520fbd7668df0c5998753be3ed158af32b0. Hah, foiled by PEP8 --- PIL/__init__.py | 2 +- _imaging.c | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/PIL/__init__.py b/PIL/__init__.py index 8702d24cd..d446aa19b 100644 --- a/PIL/__init__.py +++ b/PIL/__init__.py @@ -12,7 +12,7 @@ # ;-) VERSION = '1.1.7' # PIL version -PILLOW_VERSION = '2.6.0dev' # Pillow +PILLOW_VERSION = '2.5.0' # Pillow _plugins = ['BmpImagePlugin', 'BufrStubImagePlugin', diff --git a/_imaging.c b/_imaging.c index de2603cbc..92258032f 100644 --- a/_imaging.c +++ b/_imaging.c @@ -71,7 +71,7 @@ * See the README file for information on usage and redistribution. */ -#define PILLOW_VERSION "2.6.0dev" +#define PILLOW_VERSION "2.5.0" #include "Python.h" diff --git a/setup.py b/setup.py index 5017b56e9..e94e34d28 100644 --- a/setup.py +++ b/setup.py @@ -90,7 +90,7 @@ except (ImportError, OSError): NAME = 'Pillow' -PILLOW_VERSION = '2.6.0dev' +PILLOW_VERSION = '2.5.0' TCL_ROOT = None JPEG_ROOT = None JPEG2K_ROOT = None From 0dddff63d93961e4ad85b03b68992fe03c33acd6 Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Tue, 15 Jul 2014 10:21:17 -0400 Subject: [PATCH 067/311] Added two sample MPO image files for testing. Both MPO files represent 3D images and thus have a left image and a right image. Both were taken with a Nintendo 3DS in Breakheart Reservation in Saugus, MA. --- Images/frozenpond.mpo | Bin 0 -> 166209 bytes Images/sugarshack.mpo | Bin 0 -> 120198 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Images/frozenpond.mpo create mode 100644 Images/sugarshack.mpo diff --git a/Images/frozenpond.mpo b/Images/frozenpond.mpo new file mode 100644 index 0000000000000000000000000000000000000000..2dfe44ac1212b6868a40d851a6c33a39895eab25 GIT binary patch literal 166209 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�h=*25=Vs(}6D+*1^WQb$otX;}o5=17J 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

e)Wjx6s zC(@-xQdccmv!tI(xLZ&m;|Hkpt2$&iQQJIBhZ*IKPc5|)ce*q6D+r@zxhO_G>&-Pa zH5muTXfyF!9#=u2}UpGLN_DC<7pNU!eGp?*}^!uppEMhXNE+vc;fJbmUR|~CN&NUME5VEX-Wk|!ZOfi8d8u^mGUr*kh7CT} zNhW>>q^Zg->~ME?Lp7ZPQPN+`yMcsA!5N1@YQ!Q*F>9OD_SB^HXOQ<*bw z#XcgozG)}7j!5n%RSK*)z&&dU7^2q%afX^s4?>Z0Ophz zyj4eSj=$lKpqg%?X1tFmQ(~4Jb>_WJ<63LAg6~hx_NFV zhj*M#;!jH6@Rq0jlO3g;n|ztqhxhlZmF1~1ae5=T(+UfJE<86Zay#=$sWU{PAgb3> ze6gth5$bCBu443M>uUwlZJ=1b;-B6zt}0*1=G2t(04%HA`WjKu*$P)~=(T5c9JkJ1KoT@iqtN4;l4+HELZurXWFwq) zH4WL=a=f=4uXutB9X-X;Z8*Td>U}Gp@YbIUw?Er@p2pNJ#^eNX8uk>@v(y^2ZjQ51 zygT7UL=rmSalj^+G^-yWk>DO=gDod~({EC5rlus*n?p1UF-(2cJml1RrRWV}1T500 zJ4bWV`qIB*)`N8zF5dDPByTmK#DOuwjPv?d=bSHY_uHI^>g=Bcv;zsc{n{lVccerSaH{EUrAI`6p$q^T3LbJ;?)Hc@_FR>&Wk-91L ztv?ei7PcCcumZ0PV;fJcW$0~kzl4YOSBIjzw2`+m=HdqKPdWW+&xmIGcY^MtjNs#T z=I`{a8tBCv-&4m@d7(hkfIu8zSEqPdN4onisi?9xL%y-1v@NO%XF16-ekZ$Gl{ zE+#ArNSHZ4tz@L*E@Mh}w<|U@4baVVJmFSLjJi4RTQ}l0(}YlgBTK`}+O&_nwcOrv zQF<3Nn;SM;b(RG(k(`dXqfyc&xVxHp4%ng_MtTEE%+KO?GHzzLwXuohZ#XmH0ywL1 zD%_PbM#|-L><7}HE49R~v^m`a5bC;%%L$V+VHkf871Y~Z{_0ssoZ#V4TvBmzK_{(> zV^Y5_xvp58@DB$SYH6;SR%oPUlz(vNch-c4-zqHGUtBZpy^N^oypEN#1Tj6E$b>Vo z-Jfc-tYqEvJr-w<+7L(#dUI8vg(g09;4uCb>?^IVq~7x7W6&$e{!)b}qk2|uqoZc+ zFRVxxDfg80lj};|$$mt0T_X=J^#pFdqm0#w-3&4Qn)e-2qRFL@*$ZMhqyKy$as;rLXRwdL zg33rj%IK_{R~Twd*`~tJRF5-8c8xdSkhrNWZexYZ2ZA1th*ES--iCCGuIk*@)sW zdRA1Ub+mU^vU!uNiWNcO254`oF?P_tvxymHWp6Ex5PH^>7bwmnD#-n_-ja9K1BzWo zGX{{PfE6PhE6siuY_rw;WQw3e74OOiLDsF^qGR0YwL6=sXR$GjkvzLtW2)fuTK4ey znt^1(q)W68+|r1e)Sl+bNs}XQ9Q4Ii7FQ9W*u%^mk9w{27}<3wt?f{%?=fji`Lk=~-$W4)!JH-YbC{{Vyr-fMzG+ABoh_9{rlV_sRct);d5 z$mV;=fe{0YgGxR{DXwDtwvlOT4DQHWpWY!k6wOajvp!YKW!d5x!1Sq;WvfYD84WV) zmoIZJ-?2r?fzg=OvP98Hk}M>MVjL01aaS9?%w@fqdq#-K7u#+LGfADHx+wOo1|*#B z$>~Mz8*XE2@DDASwhe?gnb7fAu**4^+(-*T$7E&4-3FG8g4F3Pq*oKl;AJDh_pHAU zY6)c}+!p{w&J3~V_=Oj+pT%Mw0^KzoLh}CMOGsO6V2%JC=$$M z=%Xw-_pEE%V`*&}kOpTNAl6)}_cVe}W2V*Is@tvrK3K@~t?QeFO&2Y0fU58ZKx+OQ zvne~hjc*Ev@>YK-cM;W(@~byj(9LHwa)u1dOA%Uh+-mmJ=6pWi+7|Z@JZfRJkfH

y;wtyCVGj&f?n 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 C`?!z* literal 0 HcmV?d00001 diff --git a/Images/sugarshack.mpo b/Images/sugarshack.mpo new file mode 100644 index 0000000000000000000000000000000000000000..85346fcc996d8dfee3af746814eb694f908d4c10 GIT binary patch literal 120198 zcmeFYWmFu^+BQ0aySux)50>Bzu7eZY-6aq#5MYoQT!T9#0}L9H5Zv9}gC=MK3{=i|Bds3TmaO6lt0x13jf0%<0)ST6!`}x zd%`s+r2lP`;0i$dhdluB0RTYJ(sA_)aP)HU1_1trm_(HgpDX|X_5ZT_$5lv3L`V!E zA|xy(EhH)}B*OFrge9d#K>z?wIskzAWQ!&wA|jNI`mcV0(&=db#yT+IKW%_0r~vrO zf8eGk#&#wDsw*rcR08}jo=>AJLHQR?l&BKae_`Nu3HrY<3ei)a|64}?Tb3xq|LjTc zsn;mtf3kW0gs1;*oc3roy6M{xkn? zjQV8!cO0M@fTW(L>A(E@7ojp^?oVuCpOF^LF>000<3)c^A1 zQzZO%+@R$DcifG8!02E>% zDlzcS8XyjUgNccSiGhQKg@ucQgG)d~M1YS^Ku=CVOvTE`&c?#X!py-dDagSs#?8zk zq#!H?l988}XBSWgE6J)$%E`+Bad2@7@CoRMi0EXvSh!^VkJF!iVA<1v(SiR+|K$FZ zM?pnH$H2tG#=(6GuYcZqI{)+bf82a})_|y}C}^nY=x9$*2r%OBNJS$?Ct(&=z#!GP z#bog%6N!eEVzDYBddUrDzO#wi`Nd%4P*74))39@Ja&hyBiAzXIfuxm`RaDi~!5W4} z#t;)zGjn?fM<-_&S2zEFz@Xre(6HFJ*YOE&5|iK=nOWI6xq10z$6Mt#?*XVo)`J-qI%BD1QGNr2_hN%w|WtdHeBNTUC z_MW-Hpf3kHQ;m*5*xqt5YfdEVDu`l-Y z98$EaYlvZymFG3T&sXj;W$A_a5Q*&Z+@<3GC7a&GtNES<{bU)abN$vX%+G(?DL;KB z+E-?*`v861D(C%CdmB$Z&wIM4t09Z)$MVo*;f|iz*)P8R&`Lw zXNFrtnY@DeYlCG*Rkx-0YSjmO!DdDvXX629y_GI$LU1G@l1CXnC*6&1E7{!cYo9r9H zx34F`a*y`(B9TaNJ=P!|ju18V$jGV2i@+`v@T&Sy$@U+Bp}ud7Oba)?1&`=l6_+bp z7FnE}i0^IH>if~=Hk`u3Fyh5*ne4b6XqHU~bC%A6Ja;xBU{gP3^QGSv(sVkV*bS9jYClue^acscy z<5$cuOPewbU>_iKJ8Uv3i%w-1A+wP!#~U%b_ftkZ#{kYLA{5 zp1QH?oYg>v9~~>bhofsgQMLJ6kY(IM%Z1$7q}g*-CQ|O?BD-y7t0q)7_b^F4U)7G1 zGm8_t$Amif&cmoQEPVs!_NX;8`Z-<8L1=jIUD#B{kJkY7WML|ljOj3VxypXq@EuVf zU+C!^MkUy44?VAl%!Xn=U{Lg2$*GB3ZF~Xwee<0^?YPG(ZJ^$u>m>=g+|}~%gH!#+ zn%Rn32jy;f#%P7mp~$mMy9Vh$0RQ$dB)!0}rUf-Z>m6y%=y@Q3^n~yyjsPdNs0VB& zgo#k6{6?J6CQO9**(%UZXJ>t``J+}WW~#z*esS!2jLI?))cc#rPesA!aR$@5>SVD6T3c45R(rfDn^xF#|wj^q1Rsgjq(fp=Y>2oi74v(LhN8%DBUvz zs~m>AJif>Us65r(=SnM?4~JgoK<=kh!@7fkD-BTyDX#0s#OzT;vzg(aA)3Hc{xLASY_S+hhK+X=ZME8G;l(Z(0Ag(>F2k>{D^VffklW+k;{WaK(N15u6qX8tW6 zwi69=n6z-2q7P{pGILXff1Jy@*A*L~#-bhpO^t2V4Ju(nPCkSORSkDHt`n%s3Fq4( zAap~V*igERW9^Ry0_*$X8M?m9vo_6LEJuR#1oFsgQZZ73ljnHyNZ~Nc)%@w{+1t>U zG7Sn57-krfb$f!;tbV`W=3?{&-ZpYv%y7o)BVh_AR7FM)do{gx^4m+wfuM?p;dg@7 z^BxXX{H0k1`z{5wr=7u=w7R9gLYs8K@$Q})7Tgz=u{!E;CK6X@KBn1%OKi-;FLI!< z8Pj?{ND#H}%#ORNiqMfmV?rxTn16Y=(6Z;f`OGImRgAH#Fg$Yom;&MFc{r3~igOgC zvxZQE0=%l(qFZk`52-Qn+#DTi=Du3$(iJ`HYjm!XHnnbuYd#n3aQJJW*N81}SiY~6 zN-~mn!Liw$>fNCQ*tBIZiPb=T-v>BIsM~!Gp6mltC(>q{vEh;Vk)e*;1^^Q!d`Xx z7MFhj5h4rj8j~QNisR}dFEW8spMFLn zYwvd*5-R+!^&O%o>dP?vx7{sBDGnEJhdQv#OEjrxxB2XI@v z(Fpt^vhKe=xLizn^>F@J{b1x8Fg?t`aWx|Ebc^m6c618XfgmPEO^bhDT_0s%nS}sC zn?(aax3@K`27QONu~GhOr{K0P1DXY8?95mokVn{G;eWZga~O_{34v}a#-N5Oc^sA) zlRGP6PPG$3^(?jbYD;1;{p9>0=?Ts!=PuKPu~(%yqL%%d8y&v_UFcv9&1T8-xobKx zX%6@2u~!L^oPmFgrhSHtMx-x@ZCn_2{LI_s&Ha!wfARiRlGLo|eGNu)(@Xujji!-{ zcV48k?%Cc)`CjE>dPytP=fS)V6<8IwocXH7XYWRd7;W|T*XZL3+l2qxFZcEVkmF`s z`w$RfmXgh#IW74O&kMrW91N+9Thcq8H5zn;IzD$S+Gl;d(0L|p!XaouNHHDvqUd@n zU$xbt)%iXto61gz&^oh#&cZ`eroG*f09!AFZJ$uz+)vu7tU&+=n%>N?b<{pvWs$*k z%gpzEKPo}i(}n;OY0e_E?0{8ITIhfp1sbWG7HBX@>gUCHRamTR3HBo~t*&RJ}e_OK9WIPISx(4%a6}zeLzPL!j-y_RP zRCZ6zJTEI6#V?CqT8tJ}-(Gxqzw8TvR&o0fL1T+~I6;Y>+W~inuqnbfXi-Gv8OJ94 z<_ey|P!b{0L4`j6P{jnZ`!aK}WcyVRYk%Yw#WT(>=pR7g{Ppus4$8dHT+Q*OGs>Enr%pnnl=xqm2bdmJ#^|K$aD^4l&);0HVacL7l?uJz9r8gsi zQ~Qxsb=(prvSrW|lise$G`|`ChNT&v3rUH#D>2ifpKaeG+__c5MBY~7n=a_=*EOka z{G}q}egp(R;7yx|keB<8Kv3xi#0WJo12CDKYQ{rYYN;nO#2i^oa1`5_ibc3bhy%R< zv{XmGQFL!gtJ;NA_jz%}+(bU4?&Dn>t}tQyG7k~&0j_^6Rt*+uCi}2{A=6tvjS_zQ z2Vl&r^YWv*hc9fiv>c;hv@+7hemi42pWougBz5co7AvOM4Z^i5>4$#nzLZrpCbe9* zafqiAfhp9!6py=}38K=m%}LvqZJ8Q6)%ojGait-+G=GB5N%lMlu!HlqOU*zjLWNRH z+j<~b6C~(`v)aqk%G>jHat{mOKYW^Q!FXC~@%~n`MaC(pqwPkY;S&<|0qAT(qi&W+7u<8+LC>NB3x*2*LYMAGvns4WCSjrOV(&;B>Mxr!;eRfPTSuKl$9^hrG7FNkA*^##9&@aN^Rk*wtQ z+BecE_Uj4XYSa5(2e7T>N6aUoVehYUSn&`VK5aK>F~8^`1htRXizVXO_`Q!+rO!~c zEOG3R2PCrg`;Upup^U{)zOu>ixP|1&k5gn6qm#Hpp4@`#<8p5j+&RnTyvLcM#bZ@3R5&+;E&XK#*d7*+n~%05lf+Mlc>$rqI7#=?(pxqI(cg9N#qz* zkI`v%FtL_9Q_Egq$X7QS*{>G|BP1%f2}##hKLjmNMOvlI@(%SSRDGZ#0lx~uW zSSPw}0w1x}Tk<>tkvxQ>849r}kDWH5ziKO9b9XPFwl*?+xr}S{r#)wVsjrT0360uJ zSi5a1LyPA!=AR)Ep3$>0&{UEDs|XWKxZ<5Aycm5itFZm`wg988t^1Kx5)vRnP~Nt) zCinQ;hWbIb&w@A9F~aURP;b1ECRa;A2z+!X(=v4M%?c_pZK22Koc@BB2p!I&hnNZq0(Z2PTy3qmLf=C{q>Z&9l{OQJ>2N(d^?qF zGH5VbH6oUAX^)%Xy z)-!IXgsKEw`1sgTwX@RwLGq$}j$^(t+MszYW8?}C#3j;q;1yXEfo+vVS<4uWJhj4A zEAo0bOO_q6{bp6+$Mchtz3Q-2rk}|>iFC@Vx!1z0*cg#{mT$jgEyT}xT=#Gq=MV0( z(iJ=S77FG{O4mLUGW^B%82rt;w)|&?&Vq@9NL^QSrhn|*Yzq`Vld3+`-qY3{YJjaA zPqDg>8Wq_?xMR3jWvc=p(*yqJDfIWJ?<0(XLkZ3l2G0J^`*^mL*1m>3m|)lbwC|T_ zA(nU@m@d8cd=~X*)sEpvM3UB6DkLR}*fDW`kGvFpW85E`k=^&o^QFzh<%H8rWP;&N zO62b1Z)SggmcH1lJgOS|={EN{zFXSx&-HXQvt(OHosiqQ*soeJ2YXJ;Q%!TC|3Qe1 z81@|SXXVc>pjcZ^^}khj)c60PLcjmF8VW#p|4-$W=}9eo5>^2QOelY=uP4s`R1crd z|Hz**006Ux|0qL4{C90&Gupp&RRFLV9f0#>@we{yrWxbk`hEJ}wf_9i^tZwa+(wD| z9||kRlaPsyhJo=UXJTSt;Sk~AU}NKu5fI`LQIb(nQIb(m(9p9p($KQfQBW}PF|l%R za`SLgGx7`Za|y9?adQDNF)?wla7b}*NV#YzXt@55)Bmrq{(ntjeW*$TaFw7W0qScs zrY-VF;Yfy3zQn55nxGCn*Jwi{xNk+gDvOOM%v5xPeXzJcDu;JHxRD}8{Dya2_{PLMr>b;6^xzNRjs4s&GmHYk@y2v7>L@CDf0LJ?4Q84<-Q6kj zrt6#+ecY4UFL=WcG8HdRn@%MC2991l%QgB{zWSb2uSfvxQe&n#b{RtQ&N+ZCKD(e% zW9hlJ&!Cu0F7&Xg$bLxDJUhQFhHBi6aD3=c+^x&)45EgI7?dQP46XM$4PIP?n=AMn zqe96UM-hhL&B4Mt^{Kr4oj!H{)SDYUqSVfsjE|LT3YA~DamvN*P&gIe71gH}ok&|^ zHnVUr<8*)?7B6!4@U3ScAa+4Y95Os|hQZcKW2MTG0>3Z@#11b={2bJDm%;ZkW|`wd z_h5Kq;7Ga4C2!zvQp$~r`D3oc%s5zqn^}e?>>GP*jE=k12}ffYyDC=qWo&8|sYdz) zT?K{B3hQE>ph3o0SGgM#QAOtVwc^hG{C4`I<%_IU3V{z%Dn=C(#_Am}$;yad|N6KnLTS+ssVkOPx1YZaFRM<~6@X z7n|b_FrB!~-Hx6$Y*8O>c$v%lj1=?4HCS&bLWvh^M=u800$Y;npJ7d8n>br~(YLIA zs5b%2_H$v`4ytgRorx0|u17KwH-_L&d{lw&it~Qn2Cnv?@Jnx=_N7~zrU~rX;EW1^ z8_(ybiuj?4&L3JKZ5`O`)4geO1Af0*5!YD^PA+dTC-$I5BmC2bGr7`uZMB}k-m-7I z?XRABmcwj)Xm%j4SUVeUU+K(Ca5NAVFw^&Rk33xlKaKwk+1_ zLvyEggV6`aPjQQm=L@^ut@)}hnSaejzWCCdqRp2=W0ChF=#X!_#v}ji7kiz8XQ1Eb zGuR|i(qe|bXmK}mUc4%1Uz;wv$@sePrV+NgQvFRwbOUd)u2Ln_)<00o+)7~JP z^ZSy#z?C|cg%+BhNJ)9IoQG&f$%DRiQ!j9dd_7~Os-O?%7*W+7Rsl%3YUGX<#>>^& z50~IP{^;ZLBg|94TsP1v+nvH5X2~UEH+U{HGG%<%!0OR5eh07C~=Vh%Bnq8g=b=K@D?fI)GRAPX0@$-;4wPn$9l1JlG;{h@2cU7$X$#^7<|4 zwj=OTpU3r5!9!8;6B`2YI9O%qO8T)jud8U`L)$hliACLBrQ@5uz}3iaNFU?%6$>Zg z!R)h5)9vqWppCvXzG7W~Q6rIf&Ciu$zH|jTx&;tBjLjNgeKTL&i;$MzNhgqV-PKEJ zg=18-zswO@9dCFJOs6BYnDq%4ahSCr2}zYX z*ZJZMS0fgnwSOB{FeDsmO*d1;LzUO=i|@Hu`qHZ z?yd4^Az&>Uwcn`~5Y-Smu{}sfZh4&_=+sU|dy@LNGug2!pB!HO{qm!koI=xH??-`o z`SCWe$DDM;0P6kX_j*ct{lcb=x#@)j%^ba$hd%%atRz!nXHvrM!&?7uuJD@G0W*s+ zJG9z$h+h~5e4|H4bJANv96d_bxss-_Bk7Fj9A1(d2GM~iHS3(g(EIZ}HeE!0J0f@q zK>oi%JOavVH3pJHt+sqnapxZwRz&XHnxinl6CB-yO41g3ZSSPKihA6N>RXOFCUklf z|H4I)$oj%U;q8`m1!7*Ex<>shW?7LzjW;NuaYSF&I?~zRlKBFulFf(-Vy$rZvImO8Q*s`CFBlsxGrj zRt__DOoj!Flm@p?E0ByKuhe0Al zIMFlW#WUdU8w^L{hZJ^dta5JWjiZANK|5){9&T0Ln%0kHmcuR0S(ZVZo#O2M*XDh6 zI)pjDr0Nda2F_Z!#(W%X!1rnZXQ>)z+fPi_=W4B<=?h4*C{KsF+Ty^S^w*Xg{*puvnKEgr-*nk-zLB4IfiALN1&; zwmO4Hb+Nx~HiblZygwtOy@AHbGG}wUckxH2HvgeugMWq zPn2ahd7GK#I7~l9o}tm}HTb%5+>c^v?A$<9ty5h#X+-r*;B_uG$OI5(R~sq%bl7___?H{01tD|GbC6c%d&mh z=QoXVJTCkztH)7Rxq6|Ml|!C*W64=gHifFXzKb=Ma6>t6F>Dv3WIy8Gbvbthr}a9N zS|gbV+svS6=C^+UxU0wCSE#VIU^(``_}s(9mh=j5It>RzDjUmd3$TE+ znANpSD7{FlNHkOD6v*;rc}tdX|Z588<2kM!_OiF}znYE-;^l+dQ5FJWnSVn5mo4rPoy(83ny3v|AI z@iCamU1AWQzc~7ky6a>C_6rgW+uvE81A&GbrIBO}F#YOvqlXcnx=uUd-c+^ID$KaRdM$ATr=*u zpP&DPM~HKOj=4@_t{s}zim_Kz{%YauSFOba&)x8qKY*6?&|;6t?mXIynkG&CB?ewB z+Z1zdy_enLa|I?eVP<(8CdI2@4v%kVx?!W)`^mv?NT(FcB)SN#<26z06!Y^XY1ODF zH0g5mF|D!b4&S~CSi&p0Y(cW|k~w%pilxCn=-t@dauj_r<#SWLUM+c@N}w>{O44qg zJ|$fd1%yY`1!~z8cQovexUD6HIRw<~dkCU(lpP2heN`b}wKMAOGG)yi?J%}Hl5;Qa zTJmI{W8f-UNnm@xnHBn2=1FH6HagI#!m88gk>JC2Q2%L8+<6}2TER>b+&Ohn@<({X;S>!@|@<0+em~*z{1CHbaTR=VTt4`K!$`Roq(7 z4V1-NHmwX+N}+KfAmpsN$MjLmoiJZ_GK67);&2{WHa|1n8iK?&+t0H%md)6FXKCJu zTwATZX3_7o3>I4~$lT5JGE2s0oCHp3G=`N7Km({JINcLjDiNfm20`zu-t%r@iY?ia z7sA1luG3lrMm*41=%Obcf-j2u8Zb;>S1%)s>5o2j0Olq1TkIz$%x#g>cozfJR&1 z?#v2QCIS-k42*5X_=*!BPde9y)@ig?Aqwt|+Rtd}EKcGE`|F9qj_6EeY5|MiM~G16 z)GG~r=aNLd99FJUE!vS>GG@AsPOi-q({J|O6EVU{7%~@MY?7#xEyF$W=MM73vBoX$ z)>4u4?v(9BYbC+=Y_t~hj2do`H@uCLcHp+6o{_!PB2NxBY8!>^*>#%f7Ha;=QL=!@ zjoMW>wudL;N75^EEng2=5Sp(W_gy?I?@y<)g|qV1pZw)ssxoin6zbdFkQv@my(eZM z#GIaEPpLv95=nkdF1u*IoJxO4uA@3P!8SRpsxahla8ToxVW-)u+N?GrS4Y1#G;tL@ zh%eVG1LL#NP-4tM+?Eb=Vt%jH7!F<>2sYW6Fl|#MpjK1Luef3U1rZl(<@n}9yMNm9 zxG;Mv@oJSq@o`7%K?LS%yl5;t4s$vQ6Pwyae*9_8Mjqs|-Q z$m50~q;AA!Lu9WF^!a86^|2n8_vaViQ?oc9Ph$4C#QNiWy$_2{_PsZ?fj}KQcQf0t z-EHX$!aR^kL?L0kor;~W!$KZCbbVS1g@v{0(+K7f^)Li0N1k~%3r*-W|UMl$C zS*$>b&R*`L4)TWgb=?luyTC>`6bq?_00x;zvLKn@Is1+lQDt8)L)fV$`>%4{PA898 znwR&xbx*(TI%$2g3A20JdNB^(!s@3)*)^9E#0nV1iJgB~9CZt7r})X$`}use zwq|v|yGP&PcXiF1p@>ko{&1SnQ=g+??$*hatHQ8_;ju9yC#&9icBEN08ok+FjB8S zMwIho|Ml=T;UYY#XSuL5Sh_on+75QaV8w1 z%Ja>lfPr|1V;482cZc*U!#Y6Yxxg7v#37soQL zF%G7}28vzDH<>f2zRGbGd@MzC7A-ncrF}52I2t2Pne>Gno2~AKo$1&T$58D%bF>^d zlTd72WyHvFpPAd2WGeA!^&ij?r*<@I8|ptAz!4b~+rg5Sb6w`x?S9ETqovVDWPQXC zG?>Pn(jouaa16B_Xnj3j^M|dwdkb3lU#_dW-UhrD2^PzF2~Tg5x3X1@9GkgRbypZ& zu)JI?)=Z+6uP)uh16-a%0%3OLS?g^}2C<{RJ(B9L9`XU~rov?T?>QrIE@f725@ z1E{IQOm&qF{jc|nf8i~}sTCF2eV4x0Eqz*{V=D`8=(nle`gqwN1bS4`ZH0*b$4a-0!DM_ z<-D_8ZBPG!r>2N4KeQ2+6hMhjrktv9ZsG}aYjRM<%TF5ph2R7=GL53!eG4ZD(^TYU zL`x4HP-R=+aLe`Xd|*@wq)uO#Mq^QYekcAVBuXyjVT=?3#=t%`p+}oJw3dpYJuN%< z(ETRI$M&=DZ}Ea{&G$K1U$)c4ju@g0;3hpoZE*Y4n7j4vf(E9dz6$_ zhfYIz2d~+~j8%WNle&tQ{ET2nF0{IR7lS^3J~eF;Sog~L7{aom7oQhJixGPI)@_0V zG{WvrX}ENQuSk7!T#X%IXsgtF{6g&KlFIMVc`Nodd+IUXntR4v-UBPr)0%vA(t?#unsFBtxP1b4icqRJ4teKZrD6A2;op^94 z3m7$GBPIUUFCEOs;Mw(tvP6HRK6aYrmPb2`r3c9LhRG70wK8z-58w+wV_cc$gi2hU zh_Zth=O(gJcU6X2!_!hb@<*?0r6RxIQVIjH@6vq!9^bbz$_5zbBghi4A*#_p7vRW~ zSZ}(N43_kma66%;Uz;7|{I(X8dp97q^5K)f%eK?v zTMB!Kh`?U$C~S6X+U4^Cy*9PD`nlnbxLF8HZ>pJjJGPU=cEz57D( zY^^D~jh65OG93}yyt1i`GJd!Q;Ys-!W&pijXan=Q1_?edF(w1 zhnz^v#5zmvr4Y<%Chj8((YydVHdFo#df?k05y7Giz%9*t77;X z`WbX)m*Zggr)IGtmP->3wAI5=&iybigDO8ME(+ID`-B}uYiq0`Ml73VvJy?(c~={^ zEGIKqTkT!-uSt!^(8c_vx5z17e4-aB~w7!c~ByXHziY6=nSJh+D6IL}*`2jbV~s}D0ubwnG#B(f@-Hf#rY>pwgIc=P0={*} z4CUts+GDNuOSMe~eY5K7{3Llb!raXnKXp@|BhOxZvQYLRuX++|qxgNKm^*`4idi<`ktFrH^m~6!tctV%Bak)BYnc>CIROROJ^py;y1#= zR&_g=uMEw9aXD^W-FWFgdjf*H<$B$)6c1l8Ew20(`=h%6LiT`_6&ZaN%fRl_wiU~t{k}w zBmId~1dOoN^6U#&tN5TM5WuK4v1gD=pXeSj#ghNSqrb|;TWb!YjI2c)Sd`^Ny`S&0 z+N`V|#jp5A0sZr+mv_C5t2t;}TcC z`Nx5jzN#W^HN%VIR+>f`9*c2bLK!7lFY93R^|6HTpW8>E1~)L`s*;Xhl* zpg?7F6mo9HFV2o^5xn>Ko>H42wJthfQphD0h(@4(Q`#dYrm4tete-lt0^K$~$58eZ zd7$v>;F04>EmPs9V?9U72-;DNZb9Iwo1ZJ9X3QTpYEp+wrX6w0AWVF8HHlp>9R2ZX zuV6zp^{a@<3|AI`Lj(PqAe&Y$SAh7#%iPHju@?20_mZjAi|}B4kLS#M)a7iF)~-xu zZ)~C0BNO~YUQ$}veZTsu@WFg#?3O8=UximQl6d&p^!be73ccsb&3SG6Ho%{A2blVZ zX8h5P$(aH6PoxAD!F3ie_WAsS_nm_mZYTrsYA-ajB-zr~@YfA<@%#%7*IUI(Mt3^c za2%I4L)%0dn|QqK=rT2F%t$7LREJlF>rAFvndtC#o0Mkiv(Vy_Q0erbBf78QpTX@UFtFR}Z za}l~-e_xV257kGruc zMYsAzoW9NKU9aD835+C~5xh{DXo9f}PG2cSOv|07T&CtlMAVM9k0YjN3OgPf&^>8V z2I|SSGeDtdUIE=$;7H3i7`{m?>(&*Oo)hGk z2L1N&v;pmwDFb1Pj8KlGUHbqh{vMndd~b?^4{AXhsV!e9-f#Y-0nz&m|F-@PI@)Yf z!GlnAh|upbNrcwI+e&4u`zdJ}5Nkt}#g@fB+DbGcqP}Y zz`BN#ujpO#dRh63G-Hh%59bGd?&Z>DRaRU94B^F+;o-k6`|<%2CmBPzj;I~d{!+_U zl+?43TCUjLVN+=bmV{dX90>Zvb9OaDS-RR?zwC4Z=yvNg>u?40z!!vtMwhV9cXhKu z7k(7YejVr2Wrn`g50?gQ_ImyM41@8*V6VY1jSKD2>&4{iDZozmta%otA9|1j@5nD+ zwZ4Y#cO(iUx;f%ON-N}rgrWi~OxFVv2a4O}KA|<{!ZJOk7LqwakrjdUi&D8`MJxI+ z^RU-VN#P#~%DHJf_Ho+rVC$wjonP0YrZiYCXo;42*@u@q?5F2mw>mU;|2hjxnl$ir zN=G(WB9WU7Y*JqVJRDFbc`e{)cXSh(mQFJaZ^pYFP37hKf1FWD^?|$@OtR`^I}C(P8^QBIBFU zt;?|b_fR^dWzkH7)eRSED{8UKydX21&2A+#u~=~3TPdC5*PD{&k4tG0KHAhgbRI=evr4`9xFM@Zva z9M@ye+pr}xBCM~WP4Nm@5ie<++9?dzOZJ-yo=IQ7dlTID<7tJq<4`C=?pde1t152z z96}^QLe``|Ou36Z(H-ify2b#SfXsLu%m|EGDr;&1ftY9}qOL9zl-&)winHELVl(&y z4fXq5J8Y;>(r;D?@h|yag85I~E4n>7;7-T%ig75Vv46G%jumY5bY9$2v`|8Jz;m zCPIKsJ?PF=#od+$JWd?`-$%i>hk#ZfayxVi-vCw%x33s`sON zpnlgZ`q&b+fZuO0KrI~a;iq_8DkskA&qFKhH^Iu+4c9|GvhaUF40Ey8`wj zw6yQBWGk-~_UoJpq3q|b`WbQN1a{D84uD}izpJ)#GqCQ~WaB^2`dlr&1W|dE*pgu> zb}XKXoataFIw8M`0wyw=59O6^J|ymE+I{|JI9HtcdciF2ZGxQJt;5BIUYC1-=SdL! zX@^+_mHyHvs@hMAbF<@9>2X2#ek!VU7ubNpz^b_Pveli!eIclydi?|BEnkixB7Pbq zC#*YMU}0~)JG#1p*W%y4)#$ixDLX?Jg*AP{*=RUt=oWClSyh~{3*x&uL=?+PyjntC zY?$)n#O{Vcn{+j**~NI??`J0~X7x4X2$wUsZfd#m0*8+$>=AT#)6iz_u_(ZCQpz4B zrcVay`ysNk#Ga9IMMRWEpprkXCmRzj#4j!JT4pTM>;HDm)f$_$|wPX37wH z_^#B|w3n?5YDmFC5OS>lKK*lCyPTV2nj19mM=5wcj~~n`_1M4LwDR%Bg9OxQhvZpO z3I7aS@0lbdCzYau!IJXGJ#hq9o<4}!96V2BT%g?<{$~?7Mwb#f!GUF)@lg_B`$C3} z0hh1xV#Xa5VI%5Tw5)a^uYUIgyVfRW8pt^3vR4O#=WeI8i zD;mMTF_{*d*Y;psL|sETMKQ-h;{X4-OR?QM4rY`&4iJiW>6T-dpDD& zI+gy{zytr+125peree@rIqB$<*w$7sMcoEm@y3Cfyus+96Z+ZnqqqaiYEu*4Roqs$ z9Cz#4VsLTVwREXfcS!G-5}WOGpP^YJ4wRRwiG0KZRXhh&c%Ww*NKMTP zgRF&_qq``NQ7@M%Oq4tsAwk^1Iz_1Nb7D%Wr`nR*f7d*Q*0`R;6$Ky(Fii!;uu zcl)Jxh^T^mbAfpNEk=SZC+bBklF8gh;_?jM!BTI;#PoQ_>8*oq)b}ar)p2WWe?|? z>ggZ^UJ%|lR!fP`x}*4z4pZ_>bu~Ja*!;<*FhU2DqV!(~zmFBhKCge+1k{_ef@FFy zYCO^xoTP%(4&k`3uquknI!%>NaOoThZyULVJW+<9qlYgdJj)6TgnEtl?&tkSf%?Tf z9+dM5&FSF*Tc+T?sZL zmKl7rVmnt`(i6hP^y9~r3f!B+I~lV@)5siF!$h`6O_;Rjb?QTnIfsz+1i~H zTHaxDO>OzTT8_7iU)(+?%Z#)3RG#9pW&vk_e0V*H5^zL5{!42%Z$CWuAQao6|Lu;P zt1G+hbUnd6BYF6R&Lz24Io7PA=fYHC_9~f^5 z@BL-XyYvw=BwtRTx3w04buF4mx2-C7N;NvG-kNV-^rHXMo1lEJJn^dh!O#OsYF1e; zIrsSQ7u7wUOX{s%>7&oW#zQ#TY6WyE2Cn6Z{s0mgs3nU@+>xnN-mDRmdcVfyct02K zoNtuBEDvKqPVR0tw0DwfTmf`J+dzFyvfc$0M9`7Tev)Pc%J@uc>TbwJrK++*%9;+h zmODAj)$YEaQZll%YVSPIxY>q-?<>Ye?ypG*J3KW? z?cXyX0X-ZWX+^=(Ds(S9@PMpqiW|K6 z5p{bq*jH8Fzj)!JYlC*-1u#!k#nC|sDkl`@_SsLhxdBa|)u0jw9PFzKy7!!gkw&{! z$YkDvJkvcvS$>R++RSWQFI{Znqr;)FgFvusm4AnnD)XB&R}I*csnQ`-3hzz<0?D9y^QZT=6xxCXAsWP(f+vUT~z5tD)Tw2Rh-?C!Rx*_@h+ik<5AS)!wd+Q0Z-s7fYlOf zqO!NmAkSX)&t9t9CtV6|+LbM45~+@UtJB)8>7_=aZtA0IxXG+}PwMQcnz~XSe?Vo&zV|xplZ=xqeCGnoU`gCQ7ryU}a_- zkLguryl0QfDsVg0Nh|6#pF+7X)(z*T#m}(Oa)G(Ijgfn9j&7(fxWmS(J3dPDi&rv!>|}ZgX>TWhgk6; zCbW%_p5XTaIMf{Eo~EsNqDTgEaw|mA&!V8om*`)HJUUz}kCm6EF^> z{LlW_p z6_46xyvoU%J{`8Twvt!9DdwIPPimUqQZ^U2Rxw5zX-^H<&DGHJoiK- zD#Lqq`E$*7niq~dEumN~zLH*Rg#e5%e)X+7e9xL>b2OS;j??@_sA|{O21_WVhJW>I zzl?gHdh?xs;qIk#sa{PLq^q|s$BurL6O)#RaZ*b1E9gEFv(_vi`#s|=+;V>LanlsK z$A<=w<2y*MXWS)($c&v1J!QtG=${49;Tc2lfF_4y2;CD)~Z*Ys^KHR_$T3C{cFf z2iCEhyEKlv7y$BAGZq;*0|WD|4Hg+zb&-&SQPhv?TRA5i9g(zb*!@oA8kjsPev2Le~*6PJ=Z}UobIqE$tH+Dtb5jBKss$7U|ZEj^_ zkRB-6fIftZ>hzz69x&9|e2YZ4w>zc;i;_b8DqtA$=`F*PQ@Fme7SYUy%ye4 zXozC04?NJ3jv_qKxxeC}BgbuX82MT;lUaIP&c;|<7;*CbYOLEhlCrtb+WCLjtf~i^ zk&wsUxiXAFB!Wq#_prAbs!72VED{+RM*#E9OYDS-h9{0fthn~8R_N@RL~p=Rupv7z7LfRl2!Xwt~y3pC@QgB~#b2 zs#i_+hDMYE%UGqUPI_3s{h^gcgl!;TgH&!<$a9m|rD+so<)w;@-AysjIO*1%x{0y3 zHtJPK+)g#NO(SzLestNOLX*A`+Je(@oist=iumus1@4Ux03{qL@G z#X}ZW{iG=%L*K3`sI;{dt#Zb@cX4$DcG1r1YDg?SezkML8g`hMa!D&~bX=}@2Bo<< zTcG1;vRQR`biGbiwSCZr-V_{kuG>%e-KP;87usa4Gbuvxjrr}^S41ZWuXu>koSl}U z{2kLY`@ax~J9zf%_^{!*awp+d-zLc^_JoYhcT&Wx$LC?~r7Ex_= zF1;x!DBR+;R=m@%C$wEcYhvSb#|*o2eR1no{6D2fs@fSA_7frCiC^ZTbtO3R7Ya(l zH718nm8>9+N4!IUA{>EHUt3-zPxhB-rjjzCIly0fo@Y-(B^bAMU(>V;Ht_IEZDuIt zRNpGP;|ISr&Ra^*+e!&6GD4N;ed-!*UPVet>`!Srg+&T{!Ol-gvhkUNc`^X!v8dMM zq?sEdf~s%`>r#+aIua^d4pN2Mg+C}Np0ryi1Qg^STByq5ZshYv9EZ#)nG@5kK_$ey zzEA@C5z><`O-bBSG%ku-AoB`#oF!Ri3cv!OMc7>$Uy-8)#}vLi>-Z;l3kugXI-S9x_b({ zZ3%YIK)lf9bDb_$PFe^KWg&&B>ozd??c4(tI7K z*$X*fnmC7;WsIq2?s9t9X(q{Tl6cH=458{hX^(3ITNn&US*FE4WZ3(l@+*;^dE~egGZ7#^FSSC{);5;sMWt#9c$*wzRUG^K z)2^X0lO!M#265|7_G5bctlhY{TmJwJ*+~Os;~QOj)+{l*NU|$z+T%Xd-kPJ&n&oz9 zTLe%G3-8`8=@Wxotg#d)3>impQzY+kH6C3Ah!9H<3XZjV8{sl4@%*VXIPYSs$Ttn7 zwoWrv?dK87u#>bkK4)!9MY$meMoA&6mzXT&ZBPKVN4!Rtw0W2kVRZ|CP{2Hqt5Nz zah&?p3BvR1!KY?O?ZA!=TDNRPuxE-Q)$9Zp5UT*pP6cL593-ESiS{(!`VH-=1gN3F z3HA1;BuliM5NW5-9-9{7iF*u#&1-3FRZc#Jk5M&p4QCRt&)&~9&Pno(}?KXzkH6J(GE z+~TD$krrZb=elE>+RFAhlI}wYXY&MrD(&xG?}9!W-T0QsUoGrb)`aaCUCe!cl`>k` zs%jVJk?4A7!H*2VvP|I3Vg@$t(Kb^UG8Swcq7AC6SULl){;s_ z3o_)^4yW*g!ME~xhfFr_*EaGLqs-D3r412-bMPC(tYtQrx`n&DZrmI(2l1xA!5dqR zziijIOItF1F|J+gLi*iQ=CQUL+dc zi8KYi!UoG0Pvr$V%P)$lEG6@8#(YDv!8x5z>@men`nAF3{k)L|aSS1-E z4b5`9Rd=g?l||x~7r`4qY;#na=t_%QleA444vq^qr9pKRmnZihZz<%s}`LbsDK6ZhsL__66;Wqo${vtZ?72P!K%lhVlF2%MeR*yF|k1P`TM zeA_^UAP&Uin&EdlDoHI2t!gMPVaZsby3TzvE1H@Tj5lNIC|5;6x4BuKNTpd}C1hSj zby{8EzK3xEWCP|}wvBwkM0gpR0#qNoIs;EsmPJ+_8-vXevfSmwQ*YizrId2TXhSlc zrwfC@syA>-b0c80AG)-j=Pk6eDgO0eA~S*cRMB1l31uL3BhrPb9}dDw@ook-`EgOa zm;jDQ=B+EDuc>!Wx{^zw=C(%ODm#V@=0y35^`zB?uGtev%-jMGu&Zk9G3EiBbDFDz zT}rdURz(B?tb6vQkfpf@q<$2WMK(kvB;@t?q2vXzz&*26%-?cYN`tmg7&m`PY>Kgs zyGPC5movE5i&B#-DZt0nRjW+yY;niuR-z3J)C!<0(Cw^IkOn$pvTfW>%~(?ViOw@m ziyLx4&0e-2E|(;ZWZbH!CpCXdB*`KZ$Q%l#exh->`?MniRPytPJ4nAQ(6{c&r=LR&5?fA&&aQ^@riq}@Nxnip)mgD$j8%g}>sJE~?BJw&& zGK{P}j%$GUmEcbe>y~MItSpwvXiTN8FpVL`06cT_rF&|@Jr5r7y`PCZ9F`Y88otyt zy)xu%!{SbVhamK=y))tuh%}uQCD!d>xj?{q*D;*2^&P4EWhnBs^Dt3yZNu(68$D-7 z)VwnKh2E2=+D&rVDRCCjAntc`6~t(_T78watv!~T4ENBMWw)3DlEv7e{Qm$dn?&|RO zteY6~-;-L)4=Dct5Ahr%o|7{5{{RE(XHSCpVU4A5Jmgm!RG&jw7B)9pJ@kutYVZ;; z2^=@j)+#c-s8UM)>nz;6s*nRZlg0*V&_#4!IYphrr?Q$$PK82O(X&q4-s#I2E$4X8 zbzI}?Pto+74Np^w8C@Y}ZMh?8r=vP84kpcA-8tPuA|{+ zh^;Q~Z+tr~oN(W1Y*8fGKY1Tx^{$F>ahG&w0%BTTX~pGEJ#0g z7Z~}6zAMnLJT;?TOw-S&+Zjp8lVHw$b5$s+iqcyOE>!hTaMN`SCJEO}v%8K-hDbzh z*k+{-x4SBH}1<#ZKCe^ zEr$|HM|Sr1qisu!dEY8$nmn&^<;W`-;S}~2BnU~s9czkmyFFMzQ;BV)NY2o&#WG_g zvXIY+i277n*yEP7xm)b^N)McmI0HMgkyyHdTR9@yHjf9XJQ_)MJ1NDzdKuD3#ws+L zOKBD3IFWg)v8zW_XLlB%YOaKD$ILwq46hT7hcS{jDDP0)Gj`=^n%2`SHccD1&Q5BR z+{mlWe=e0c?1v2vF(BbNEmPFHcyPPIf#)3J9$ zhB*hdD{FH!?oS%JG2C*b@kP-ng^0?pS_btYig=uW4l`FIe3kiz0PRZ6vR0dsFe=$^ z^?tQIyQ?tT!yj6;CN@W^kZp?|SxsX|M_f?Q;;urVyPgje7GiLso$M(}%ybb*&%Xo( zt(_R4om`)th6pq%Uviw4iyD~0W9&_H7q;yzhht+sN$*L%qJz@I1+YwHhi znR%^!GV5+3VhZEs2DP_ix%M{@B(}|IE&{(QeHyTsGCQMyO7V)?J6W8yVbrd;Jw<3} z`m^Xdt)8g@mYUi3WBbd{kIIIQWbLXxv+%aPW#T;=4M$IrUMUA4AG&*kTJ=H-C<8P5 zNuj+k-l9PpzQ`E9OrPOebO|u3T8^1%sH%&&L+$&gBoX+E6R^)c@mGSica;`_CcNN$8lR?w9Z3x+4TPxcpAIltc_p6*767wQ5Qq=-!x;~|( zL#G=k=F`;&?%jA?bQR-Y5wsf%&x=|vk)n?xR~?$EJGMH{;!E*H+b!_G-%>pC8Y*QS$@nJ*uF& zAN~c!)SH5Exy$>&ADKKa8sV#(Fnz@ zQN80kYFV}LHotvwX?LjW`lYqBCwjyHI}c%w^+(5^7S}uzB)%^2#-Rk$Al-Kz+T(cj z81Gc(zaeCR~l}gEyz*ktSsdQI(Dy1(EJnPvEq$7{{UFm zV!hK9OG_MKl({3nJu6RZ8AUp1x>l!tX4^e8Pto-KK1Pzt(kNtZtfP}yemC*XkKrp; zHssWf}e41JmE@T$^v2 zPc~n?duKSTYEMfYm}+)zY?B}^SmW4K*77+`te_6q>s-pr+N|5r5M4--ox);YINA*| z<4|dkBB4{zwt9*f=u+laWn>;$`527)8jeNIIOd@3OHB&W#Z_JsPrV7WJ6LVBvRKX} zjQqLzm$9y;CG(+46Ckhzk4k=LEqQXG<;-eb$!}cLZz8$eykvK(IJqpjh@6l{Y0$>^ z8@#YcUZ)f`$y?YXh?d&ue=3vg;#R`A-Pw8?wP0)#{RkaGga2QBG}462YMXaE9}MQDo2b>4` z_VuA^NcFRXlIJ}0k4g&sfGFaxZOe8NSHQ+HDl2wRw5sjKLofLF5s^HO}8Zm2-oTF;4o}arlU5l&M|c#4~|V2VsuAYND0GDO~K9 z24Gu1FReu)C}s;MAa|~HaBXag#zsTCG?tK?jY2VjjP5l{La8r!=pA?OC#E=~{#(b6 z$2Do4n;V*S>~~SA-TTGsQff=)Mdu=b!-g2^T13XLy&IV=j>45$Sw3LZXAQMI1K<~m zVDRR*f23c^VzIp|BnA2`oaB3CSJKKuC}kjmG6<^%tSuA>$MHUo9$a`Hea#C`$8BiSa$&r)djXk*3ESlHN*26@XGg z=f5;0uX1I3Ssp{B3!5`>t6RL0StM*#Q2y~j>5lbdz`ihj66vM!R8RVo8F`*_wZIw(jfUlYJ?v?vtY zKsN0hx%?|BQJYsfZ5c(l=vS9U`vThP8it)Myv%n-B}{H2y5A4Qq+e+o)z+aQH^Ks9 zPTeXgIVWK&SlIY4s@OsB_g?s^jqsb6MeS#qy=ZgNvv+UOe7TWMnLCkFwL@2xs<=8clD>Pfp?^RFKKZok#G#qjqL!5a}J-NJqB ze{^T1c@DR$-QQj`_g7}`P?+Xfh~N|0dQz(;7}*g@E~J`eDB)7&iOU|Pxipf_u!amW z>)0CLPWzqdTSGQWiDr=xJM(~|wqdcB8$}XHwnuJB=M-(QRB1-tOz9$6=U^Lf9sOv* zJvw)(I~T%*65E!+nFD=lRVc*yax3Gm4HAuv)b+5EMhfsc)kcVx+6Gvh3{r`scPF>8 zSXrgKTowDMd(;zZaz!u;84-@79Yt1$9FnOnR%_eM9n=BiY_2&Onm zCiiwL=RNtR!gkz5>M%j1mG%u$u<7U9$s2sWhOywXcy4z-03C;Vr+esC-HMvA#pV=t z2PUecvoKIOK9x7rdf30DD~7oZ_Xx&4>ZY9v#i`_tw~E z-4$ewR5s!Y)cQjCaZ52=Za7YQinVraOS!NkBFHg0W6dO>DT}dTiqbN+=IwVP)2B-( zd026~kUNU$Br50#KPwEHyX&AmRf-qZ;@&_(B^#kNO_@M%n;5NAy1D1cS&&@9w{bL5 zNK|7Wj-d9%eLwIoTANt#1(?0MTZ_A5(7S&Y0pmY~G}$iJJqn7VO#NE!drN)sSiR8C z%&Nc;J!&lrRD)8sX`xn#1}f3FVh=RLW{FOVyk3l`b0^ImPP4+E7qjsut7&;8raeB+5RYu9<(d6Y zwRwNW`^Y5twQr>9*03d<7Nc^+pazkS266PRSwb;RS1wYON2#xI@b*;FENrgaLvwJ! zplIUBQ^ytWx_^dklf%~9ecG&!u_{X7V7UUdr*yA<%$iqm=q9n^Js-mGM{glw%D7k| zUCr&qP}A1?#R(p&%X6m2kGk3!lm{anTaJg)wt`TzYUOIRInRrFt=;c|^(_H`vevIb zf)E=bRXlD}^!%$EMeufu;B6~SiUqnl)xElTscL>_a0XcRKb2=CeG?jPI@@y-#agzx zdvvE(f*EwXfMbG5q5?>UIb)79_*Pz%Z>HF2_p78R)CZK{+_4-Tr;K8`RNQ2)byB30 z*H(=0gt}#KCxJ-K7EPmQ{z6bty(7NF65uQ-<@h`S5ilIiyr27`^)MpqH9BiR9yO<>~^wE5M?1_ZgP87fGyxuQG? z51APRH|a#x^+!v6ivC%(xl(`C9trfV81(BY7>O92-u-Hpt5cG!Z7cUC(Clqsf>t1q zuYeCcRb4@mWt74W(s<+AuH8;qXsku1xbxX&X2~36RfZd{8YA~W%9@Ml2`dON<{?4d?1cq5z&RdMB&KaD4F zZtmn4F~_xV<#F1b0g6Sy`IvR8Q4+CUT3}H@5^rr|thZl0|+-`up zTclpUAk9Ss%XHER;JAD)M#z}|07~1~&ft~y6Z<;<08wqJrD_c6z&~evAJVn7UjX>8 zR3GSi70;EQy(DFSoeGRpz2LJ-(q`R{!T$gq29cjlNYM1ljMf&T;2#s{nunczrO45N zozV@#ioB3|8%8jl?#fb5@yEV+UNfFUDFjwdqP}A*U=<_~-j$1L=B#fRr9@WgEu1uuan=3P6e~FGW>s#@{Q6Ygx%%EqA z-Dq?{+BzD{ghR0N^8R&SP*6-5m4hf{AgLJyccrETH$p=Z@`hj2J!_NHEp=PPp3*BXC3^YF`*%}YlO*~Y zIz9Zt*X%PL+Jq~QnCEcy_p8v)r~#QFLO&{P4Lg{6uzgbG!+RDWjOA5EcN+7(bHLsu z*0nfqKhex_NtBI-K3>^9&1F(4+d`o(S932_*RMP+X{hO!_9iK(Bg~fE71+P*kwQ7av!(fQDia#2mXR_2 zE3MMJWv1$uSF^$;g{^+_+#y4pWMehDNg+n=?U)}9bURz+y4LkE=js#Ow1Jt43ctbt z`eMBhvVqG0KC~;9DL11yzZ65I>eCDDRH3rd3lzg)neo>noL4hqd`qS1S6a@GZ62oA zPFW(KbIOtS0Oy`NRL)$g_PAZz$mBd*;{7LH(5GA7Cs4Q4Y?ow7B!)A;)UT#%%5?p0 zVA7|te=-T!mfVDZeX43nCams>r|x^ta-Ei`s9D+GSz6q@HkX4F?BKZc&!sZdzMjG0 z0ZNP<_a4=Qn~_}ap#Y7wJyXh$dlwlExP}MVjzxFA7?kNz$ESFsQJ+zQcLLw-QyD(b zkFRRl4eUz4Lqo=%C-9?K+<0EfCz|eJHs0V68`#&6-6*ux=8QO#?CdkR^{S|&AB3pg z$6kk6+P$QDYB?pi`B$l~Zu;(P`GYe75XsmpIm+6aQc3DmX4-H70+8GmOhyUqkyx6_ z&5yT;y5?5eGlT0|R#x^*-!@&BoRdk}=r<<56k3w%H3bxdA8oZydlJFHWjx?g+dBKK^h8-&QXbjQX$kC2>R>y}ldxe@C=8;i( z8&6u=RZ-_lO^(6lJ3xqx8f~6qb}V-SdybWhXsUGFtjSDwSkA!l`hi&2>Aks4jo*&7 zn$@0!Iey8TELbN8p4?Gkb0w79mn9G0Us|~Nl=M1ijCXMf7nMD!vAWwxqCndi_4KEH zhE*fZv^7ylT*Tv_$kbEWIKga<+?)*1_OZa?+OZsV>XIulJAv*onoGNgt%%w)A?ST7 z)LYpJb|~NKQL6=clNbcx^G&q7OSsvsT*?9D1tivrlS=GqHuf~W%`-t8C9T7p^R_0* z{4rKz(zQ#6QEj7NO5TeJ6r&Djp>7R5S+gI2ykDxSl+f;N$4}mE8U1Nu_*dhnn8p2+ z6&Lu7gPL-OE7ww8wrtRUf_^i(F`-$g$A?+_=J*vdy4$gN{# zvL&>Ru0PrT0K;vuuI{epan$t9ZrXem@J+J@8d!D%1haLka%@VYPUz??yeHvZA}=m0 z8yJ*-e;?L~Zu}voe9u0UZ~p)TN=gmA3A-|G{w8=EPs)u_$&aK!9M?H}@%zG7+m_lp zskZ+Bay$cF5yI4ajxm(ok}+<-Xx%YWHu^o|pZ16!*0Hp|+7`y=P%&#db3<(*z&sp% zYW}F6m(;1#l{oV=xJf(-<0~Q|mdTz$j#vg6uR8H(!6`{I_;N=bp-NNw5fD;T{+ zxM`6Y^))0Ck#c^u(A$z{GC9E{f%(?nXH_V)jRwI$df;`ccSjSz58;Y^4Q+h}I_BQt z7;}u$g3D$$vE!W5uvpZ!lgzhFH_kg!>XxlEKWvFh5HT(~k9yLZv$HX+8^-1Yk&to+ zUey%vtnjpKxzDF>deq}qJtM+@7j^9mN4C>tw)A9OtJ0i9B$NP9>K24RwbAmP!Dp-CzTHIVh)7m=1oRQFz^s1FL6?>8IJq~MJ z_=#<*Yb&YQ-A`q88U4{xaHHv6w}$>WX-{Zj)m}k59lM!+_q}AAld>93Y>vM~@&19T zOTH=NBm2d%it6CkG}+fNUP8csv?`r9(0s{mc;CeziM|%nH5n|H)(gAKld?&P2g@F{ zz*%_4)5DJxKMv-3uC8Bg)6V;mRP)E7>sUHTNObDCU0XzYJOry*mAJJjFvAey$)d4{J3ak99j`ex`TXAD?_8$%3+dZ@q z0$tAFPoSa{xtBbOihlw;SH>Fdr{eu|Uh1Ya5M@+CHs|Z>T=_VNU`DHhyFYJ zTO@uSx+vXz#t192{{V$Y<14iR^thuPetG`@`qfUCSeQzrAon#iPlEn3`PTLH*poje z&c`2KE2FUZ52(ne`%A=NWbhz^p!`i#A^gbZomgGj8aAJ^?v#@WFE!mt;|Du%sw-MQ zfgTYuhq(J}=h3CWKai~~*TU>`^I6>++JC~22H5TL^k`g;^8D4%Sol{#umDvr5kLrplmDahTY2^9$)-aL&(*FQTBL?w;^uVV;&QZ$YpZ{pC$pW|1I?ofdw7UYlM=DGbx;t!0k z)QL6AnDf`m;-}hCj>_hd!lk<~t~D)Q>;68qOWBWo(s!)(ws~{*iCw|xB$G?)@{W-< zj8f?UiaQW73 zCAXSHb?6Y|n)D9`d}G)AGM+`yd)NsW^B<5a(xF@0`;{5TQiAxY=+5f*$6gij{j$q^ z;>P+Bk&)EbEpes8b8+R^T&pYeV0+gkTrVWDUqpbWp7Ni+DbE$75ZD0xYSyUkwV7{nh>kj9sZQCE1_uX&O(ML-W4zpv{o0T& zZGaqQX>|+So&aM3m!}!6jV^VD=}Y|9&+@wadetXl8{HUQDURDo)dW9jjgnRK5QgXp z=xZIW;Q;>iKL!=ix#!L;7p$%mcHumD^v-KkGE9X;@s{)?b)>Y=99@k2xCC$f1pfdK z9qK6URlZ0c^BjAyMD&m?TKTS#J*38nFdcNx-D#V`_0tU5t1x zi47K4+cfcyv#*|1P5f+oj@0hA3XTs%RdTue*;*DrK-5l+-H%-y)O3$M~c_SUdStH5)YpRN}xaxC3s~zpFv{0}X+C8Kvu~<}p zD$$a8?c!-}7T!2eWt%v_tt^?9+uZZ3-x6vbCGiN-w2RAlVb0`{2Ik;o_pbB9w%V<< z4!X6}bK?OvrVc&MYGUq7jMTT#)p_Df@0K;ks{vFe*L0h9D>kEOgmyBDwHEY6q~69Q z_rz}sSp(+lHq1v+8Qom{@5b*2TPZ7daWV9cEY`lleNjrB+qH~)?~nQnFSgfBzqsRr z!iwf~FWLi9kh1AoHM$YrcPAf}SF(a$^o`+#l(%O)sC;PgocuvGm9Xpb!dv;8=QR%= z_@eq#B>LUpJ$A%G59Dfou}T^!+|$@owx(^?yQ|-f-Rf7a2=6KWl|i0o1j#ElM^<9T z^{n10?HvtLj8=%Q@JAw%CLcbu$gSav8x#-1v3Qz~Mkgz)4%(r(8Sl*ssykw`Yd8`$o`mW>PVpD$;us%E)Hb zE%FvKxS!Ih7vIV6M0X|aW;Bp-lS)FjCm)qv>`nR=CALu}^!ZC3aZiTk^2OEdCn>Ok zGwWRts`R+I6Gi2akOG|NwOcu9B7uJM;1TIuOL`zBU=DISRf~A!F<_}ap7h!t#mH@@#tMP#YEL1OGrNy! zMDEUG#Fj99qA4A7BLX_sGg%-5fs@-6QmFQ0L``D5a1J@`#WdM%Y^1C^}P520maYI`S&)vao?loG~4J=+@($ z6_+Vn%#utOIU=O{Lx+uV^7q9T)P%d1!{lwwGBKLZxJQZC4V?Ehxw;FNTOw#>!5|#5 z;<9gU^|(lAUlEc96as3aB^FmLw>B-zs~7r2q1^O1$LCCD8;;x>B>IV6vQ}&+2Tq=~idyCg*_`3}5Pd1Ajxn~ZhT=e5BLw39k(WFbtPn?M8I%IQFL9!rL5%-U+PK31M zp!}2tg5}$;D?cEDBL{Hg;8TeCZd$dKRuHcmvHEnW7VZx$0{ADO2dy^mv5z}W$rMuP z$t$l#&Or32H9{t~W0mt47+m$LQPA6x@wuNC@)UGl;;ky6ws3H&d(zQ84C%(x)b_sw z{8aFFg>-vcNbMKxOB#tKSV1L#=bG4?_KCAcCfdT{c=N&91$r>1xo>kx(5oq3EePB8 zjFM&xr}%Z}BkvcJZYz=T*TnsA#gGeq!%wwgwc&}gyV#nVl7v?Jna+2s~6!l_Xr#v3E(Yg<(D_l&OG`Tili9g4)M9)BTG8vMH0(u@=zES1i7ZBtpg zX8T^Ldn|9+r*G(Lq?YQ#=Vol2ozBhA;%iA_+t}@bj9K`N2(HxnG@@~l&o-JyB2DJwR@xYV~l<@ zC2hg3aj}1RQ!&dykgG{P^Srq-8JJ zb5w3;!=T0%nq7-ap!JY827fA%a>s$6dMrm>O98TjaUU-fgJii`3CCV>DXj#>9yM!3DxfIV+w;VP4GdD`ocq#aen1b+Juc7sq;f;+Stg>dGAt=^(AvnZ&1P++Y;{KeX3Yw2-$3XN$FE(a~hE49B$p!(KL(G75LN$*WN z?s`#&Atk-pP9$IkI*OgHRj?N%W33i4bbafgiV@fip_umTT9%qyl03xnko$6Kx!hHe ztm=Cx>RXhHQ{_Z9ratiFH3*eJCw@8SajCu8%#xGlV^a1jcMfHZM?;fQzNu@~u46u& z)`~6eZlkTzA#HNaatw^be{@tY;tPI}#Ul~lr3-s8tJq=j2>u&cKNC<(uUxk&5-1(L zX}y7YksV_EkV7K-ZKg?ocBCmnHoR31)S|Dv&!R7J7 z{&b-RIa~^xbrsm)gswpAPFTqp?^MMR!XTU8~cjNg|X{#Wa#*TNQ~` zVU;w^faC#9s~MH$fE?qF)l8$sz&|LaoyonVb`DEMR1!h0jS9|1wN*?4$0sA2#CT<+ zxzNL8UQ|G&wHy9k6R*)=X%_^Xr@^M9m`}Z&YL4c(YQUD;bJ4Ja;vjJ@w7TeEXL<>H)<$M#9k$ ze7ng#52>UqGwo5RC$6Mr)jACQDrjZ-g-LpDL#gd)5RsA=s-acSq3ce?KIpXrOEWBR zZX}#-2dJ*D!YPt7_LkVApl?cxSmdnJ+(|UMX~RndgQq;?8p+gbF74G!EEx~p1GP_E zn8v3@U(j@UZysRXv;=~UNYU$JKFGFZIPo^hJWw7Q-ln5Jm=b;T?4tqR;^(#s@`B=Q%2 zo2s`3z5VKlQf*j3yyLw;%Wb@MschDiT$wyeD>ulXk73PTw}S3vV-35yj=c1&)RoSu zzD1#<4wtzDToze+?H#Fnl*Y)%B=fk{>$^CrRdOncN=T~UZ9~ATcFrd<#z?_jfzp<& z&F)e~5i1OB!RHlJ-rMAm{{WpWPRuk@)M2@V{{YKH=~>rT3WV+CdetO%N@*gSUT_B9 zz3Tpwv+7fMagB;Uim9y(9Zz=WPKg$q4r3vu92Q~LsXgSZrLt_cO(}4^c3R<9lf}$+=bMUAo)SXE5HU00j9f@kiJMK ziVPrj6v3{egne)*5a5yrT5jUIu;U**fBLDxI|0Q^mBnkJ{#YGHGMrsAo_YuN6X)cCsm)QyGV)Q`F}~ZbM{xRcXj7 zPB0Btz|MorbpvAX4;9&1+^jGwF^zZ}lUc`o38N=wSH1B~jkCX-cBQ)n9V-g&#}MxS z07rqPC-|7+v_{(*7d|i5A0pT+Kdoe3>Y9z_1;x~@?VJi}t7s){$S#)=jxu`HV*7eh zT7n4XJ;(-?r@`xrZs4ARtj7b9LAmE{MJri}*$5;(YD;-v&rE@W)iOw=@1itySi&;n z89d|CvgG^T)RQUfIvHe%!^GuWbRxENtxiez!*uU1M+eYSdYMisqfbWP4bz1RZO(I( zT2tFK<7BszM`6feP?9+%9ZL51_ZGLyZ0e|ojyu+flX)I{BPMtaP}*-n+p0PJOKB-H%`9iv&{ZpGV)M`Mv!6jyz3t7S zx!Y+Pu)`5RM&{3cm1f^hwwmfVi@NSS?yE^OM3X{lIyAFP-c*}Z91Na9e z>b$n&&{XqWsHI_=pkby?szySNmChh!1D@0*jO4Y@WU>;c2Lh{^2pra%5z1M%4=LLc zm&Ye)&0bqugFGl>HrToa3KLWNNP1V}t8WJqnC^GG$dN z{{T40PHR1)3JyT})Hzw6jvfvujG*j4N`);VYmM$V0nXD+Xv(dmZf-%P+1%_h+aLjQ zr#-67o=vo72zJJUoDL0A)bpn%jGKwKLgSO@NvL9S2I4pZje3>J@1a&<=Sa*{1MN^4 zPI;uBr*u`4M2Qc#=T8tQ=}o;$)R0BTPATF(^e3%`hX~GUMT~{*^{ReBvlJl5J!xHd zAJerf4J(gTz{lxGR}`;d?1k7tzyg%0-OW3SC{Un|1sg{vwHF&2qmGh> zPG_SSM}!!?T8o{ITXt~`Q(^1lHru`ib-j6M+M8w&YnF{H3;Nb&zC3}AMH@O zjJEBvXvC4f%6lGY3}aHH<}3WjMTRaTL(r+{eLi9xralXrYY z=JTmQ_$LUxl&__5saU`&S_(X<#39>UffjJ^dV7uJF?U1=gcKY zF`s^FRkydXS4qf`q&eG;g0Drn#ZtSPvMK9cXoVUV#6W$))Kv>R!Lg&bVnZLid7|3r zR3NHTZ>lA|00m?q@z7OuKQA<2Lt0SNQB)3sml$rCH5NBY$dE776yP}P)3p&UI+7}$ zGfr{Oy&Xl$I03~xecTGSaIl!~ON^RV4Tk}bttL6oT14(B&q`0uor)KwGwz-R2@9a( zkPidtKp!tEGfikD7#neq#*+Y1)Hz3jO7Yf&Cmfv6;ww9Y4AL(d6-!};RJ0;mEen?R^2su)#BxPzwv{9>0%pv; z(-jx!g)J4zvaZrMboHoNM{$}HT}ge%tZSc2mvm%=+5!G`4(;emcPU&|cD9?Mg@#YfkF8@}#91;riaD&#r|^{mkIxZcAWZG zM+L)L+AO8^I{-l*wS`r76@BQd79!W~E?zj@44C6M>st3LF&@pUF&}rasgh{sl{Eso z!z9I{xVKWI{q^G&TJK6&vGzrFJx=3Ey9vtM6&BgU06|hc>VGeJ8;9dVmG>H#R#u+W zM&Pk58=8VNP~`MpwP~6uIU?PmDTx%3^sQErS&^k+5xeK1q00IbYns!=8^J0WG9*lA zt}6~r9!O#T07Z6~{{VHksJmJb&1b1SmY%lplGyWHWQG~X<4w8>$im`6fc9Q#$5Fyb zvZOJh#;FRBgSqQkXzo--qXQhZChknOC|%tTG)4n#9qHy&DjRlv38i#RnACKdW{y+) zwjVF1YMsPGZ`tm6{v~1BtJLYG7j$O`FxYNJeJaGWi2Ses=ZYV_vDH>Q$kAp2IqE6a z#oe-_o|vH-IQxawZ?eQzT<#}zLo+SXG0qDP4ti5KW$|ccTQrEymq$GCPjOW)ZN}zk zhDV^M(CVc=SqzM}+-~BPFkh+7E1mXM(3EgbJX4fmvz{nTTT!LdkPP%4Dd?lUNS1@s z+oeAQl1~&RW>aE-DcH%Xy~%7w8OABV3Ir<=K&7yQ98t+W)NVVAjyltE?^Up_C@1Sj zYDfe*z$3LH^1yLTiuM(|Vw7@6wKVhu?mwu-FaeqdhY|--ny+z|LPa$7GLk5sGw;@; zbLcANsfSV*T#WvepL&Oqy(u{f>~0&qy9UCb4&AC`xoJ?4ibg$osEWSq=UZH_alipr zAB9yX2L#oq+&P5|Ndb8#pE8)nO7q^6&=V_87~A~B5^A-!RQgi6*!~khN+ZTkCZD`* z>q18@`-zZyk|}!}QoFf(j*2Lp2f3SMYt%1OTJTzE^Ay=E4T%Pt|$qK9zUn z+{RH$Q=gUxf@vdlD#&niOx{RP#fTj;YPU5_Su|UMRzfyNRF6v7w!M;a&n5=NS^(&^YijM;)KSuC0JY`NXR3cXNr+6u8pCM;{y$q=QJj+ zXr&g7`$tHV_oLt)) z1I$+Esp-WpQAikLnpyw_Aq1YZ*5Vz2I8&Nv$Q;pog~FEy2NY}r4&mQ4qpv(u-4L}L zeGk@@bmJ5xRge;RIqBAgJ^ImWg@L+ss`n&?;~A=ou`((Ud-G90P%75PF0I^&^PYMN zr8ygipfs5>yDqB-Vdgdmb5>*75j#NZ)}q>(bg=0hXNsja%;#w8YV}5GTwo(gbgpJwF=gE$*))WjA-_WM&&;MF;S!aZ*G-c^Y?`8tRB-^E{?J zGY?whbsZw=#`P`A6h<4i!7G-+@m~!=~$ODv6O&GaB$nHd`wp7lDOzlmgHa) z&0ex~ON0aNXC|p4Dn5pyJR$HQj05T`GFxYeyTt0i_9m9*3EOdPYAB|g0LN!5< zbDU$+noQBf7IIwik`HWE8RjnKHsfjPDA-oea!HP-fz4TlUHtz54l|l8W|pKcd*+e? z6;OCN>s2IRxh^(?PTkEMY%*ft6)lA$r9`+Vlfa~n{hzosBE7M^DC!bu)$1 zv1@3i2X?wT2P60badwDJ6@ux(nziGka# zNGY-|JvgN}BQ-2qin#-W%`X|q{A!k=EfAn*ImJ0~>p;@5xfGc+hCNBgYD0oSrmTbm z+K`h&+;#wPIiyl~#RN;R-lH_`NFKBaTytP`^rahqm1ttHJORk2sl_F6+)z2^rB%8+ zSDu-nHl2v5^eaizij1B(t!>ogT9HUdQ(5<0h{!!DCvnQ@7fI|uAa=z|8Qj2n)=1}l z$t6;U2dzNa&Pg46R)i$(K{i8CyMebO)|IY}lO>l8XiDS04N!$kNHdOUEe@+bR9$5| zeo@Y86rP8z4V<=jyA|9HIn4tMoq5k{OG2%7FDDoxqzi=kxc;=8vC#x=YuOeso|qt3 zD@^bm%1@~Sy-U|qX0H=g()LT0+qVeAk_IUzj4HDdL0&=4Qf%{Di%_ZOB8| z)=4WBIjMWc6xxQME^yPhWF#E=Rc|m0mVdvVlv*DH2<>Y3-CxxVugSRz{DRh}2u+P0hZXtKtVH-i@ zsphIHQKXyD=rs9b^0x$Gf#0oXtU(>jtNi zSKI+3idhwAPn)poRii3Uab{Z0BtBxqKvzFDM>N>@IOpqB?PIMyG$v9r?M_pZj@2DU zeF>90Y2c5>nrEpW!RykPKH?1ar!IS*XdzruKfE~} zv?pFFu7>v>$Bbtc8en&(gQ%yTI(=#x*!g_+r({g+Ym}UW+wrDWy$*Cn*%`p9cLR=` z)S_jE09&e4t4YbCLjHIu`3sCkRAtM>OYSe>JLA?#T3N`6L8T+uoUOPD8w7~F>L zq|(S_ISQefxF^t5*vDpO-)Yv@3%W@dNQ0stwaT)TcNjZC;F`4~wv5_VVxh?9rH)2J zl_Va-Q}s7qW!P@#01esWxXG)YW&lJ;@_EYuX+ zSlgYT_9CTPFGD->Jq`Of3))1Flyw}M$&pw|AR(Iv8TG448c~wJFj<|p%7hR>G?O?v z#xvRPZ@Z~?L*Y4RY*YMH2`vb=@rjh(6kj=*U=71348`V*sU1h zI2(s2tt(i~$rFGF1Eo{cp?9~DVo#fb2vwW;XBNvonK zd~`JNC{fq7HDYG2jQI}cEZP468bC>=hZ04>saK{bda>Tjl}{XXsYeu;uW?l7rCb5; z?@4Y8aY4>bX~O_#ll^M+8yrs*gXzz`7f(SFcFrj6+uo2dK~c$|oDq&i1N0w}M^nWi zH(}pHQRlJb3Sii|BzB}EZpWnoaS6e~@j&Ag$&(z-h8d+&2;-#*0(yre9`w~++3G5` zDYPi(BhsO{<#{yBr1U8^X`p0Qk7J(W7>rd*jsX2?64a*2-<}N#oxG4LnaSosB%d%C z%{@-@ihyDeK{&-Pn8O1U?V+qyiywN@PJVKy0Rx7mV089l0GgP~ofRp9Vy{4>GigE4PxR5hV=^k-Xl4YkIX z8p$Te%8W5J%<6h`MQ+a&%PNfY^rKsw%5E;kAZ)J$3XT;_`CTDP{hy^O!_B4O{=wxc9kh)jjJ#^ctB zCWPg6%E%W=ou!T9bl~Ki)w}yhq_;NnLZ>4+1E;-2Tey^(Icc(hCMb z`{oFJxvRd1SGQIiZR3ybO}W05;cf;PKh5t+G9^)yZf&7Ngk!MpOB1^P06u%uaZ6Gz znV^?aAXY#NAH9)PV8=2-4qol$^2To=rH+-1&{1cc*o*G@hh$ z&$j_sZamPpp%j+qifEMwBD}Xo<%?~{9CJ{=C$4E*Q_!OxSfntXaZ#}y2RWqoE?W>v z$B)W@dK#+{6=CQ`>UeSp&p%2{6p7-&=aKDC=A|nD@Nt||#xOm5(?|yciUVN#RU|7k zNuHG9j@@Wh7`^Zh6bfMV7e17%#BoWXEeD~<=dB^ZIi;{%aKRNA;B(f2%VB!0H@;6a z&|5*+rjj~PiCTwz(t}s9G&!3f1KN>JJJg66^O}ZsC4CRQG=(LhNsd9{lRH+lkOf^`%zYdVVyU)Gj!=AYk)O zScy3~2i}HS)t0SS_cI0ug(vZ>)F*H_sOojc;Vh7G^O}pwQh2LO=4#AV8$rP1)~iV_ z$`U2&I@3^=)<9AypFP}U*GFr8X!4?5c@hS|Dyh)_qFY#1{ZN{GHik2^$$?}%VMwaI(aR~cmBRKD z4p77M5s>1jh+L)_fzM+}Xhq%2nq8bxJdL@S^&r%jSdLItN~xhf>UvXAn2hsU+d{9*?mSA%pL&uvDn|3g3c)1$8yZX^?f~tRfxT8e9FLKKe(Pj>A^-NfCsDnn&!5kG0T62JFQRkec66uR3f zJx1!Oc>`~%8uBrG;Z$}CI#r~8o%rUWT?&1Hut!ckYLvu+bN5eb9;HP#SCoQsM@kd- zpD7>%PUT5*jE*;oQh`{XKq^rb?e}e^$NQ#>YIMS)<+&7*G)=NaD#xB`HW)k(MJ}d^ z-%}O+d(r_zXX!ya@zRS0hXaM&+&-07C=bji zz@S?(X+fX>^vwu)&T&P68-bHi&yOUY`J{x_jHtj=Z}(1XbCoWPia;<dx2Cq9^@?#f9$MA`;>3Xxwe*OA3Gu2d6Dy=I`r zFR4S2D-}-AeT_;-TrA>E9_ca9T9CzsIW(_h2YZ#JWl#owV^t;V>T5*wCQDJ7%K_4@ z*(_3As>?BfK?isg?WTbjq3Kdw#|EDn^B!HGZ8)s&v8Fw7W00+%giFc|}JhyE1Qxfu6>tvn8Uqu!#`-_$+-n zr%$<=9oOaT4Hg86BttL`-ztuxppNxyQ{YHj#^ zj26;)psN<(Rco0xU6vpRan$yt)|V;nMSm=*4&ui>2+d`gT#OfDJrNk!cY z1*Nc&m_?O5V2sondc|*a;gNi&1V~Zefo2tes!MzAn(CX*GQU_9%eKlglMX)YEZYK~`7Q7*NUPs3?q2 zemYcxAmFLV^%XuxMTvI+a7{bR$9|rb4FV)b$fs{T=;}7f17vmSN*Hvfb_2t7rQ9j4 zN_!6kH&IR)^rXZTjsps4sJjS*98%+))3`C+y{U{3<48zdrySEZeA%jQ!*2T$0m;QT zy-2!>X+3BGdB!Oe0p6=i06!peQOfGkmBw?@k|I*Jg+04i(mpo&)479IAaS3iR+EM4 zR%Y}xk|b<^NcvGcYNRMQ;o%H2VsYGLOB|hLzZL;+2-=N+}Q$dJ|0`(-TRE z6rO7Rs_C*qR_$j=KfH$^(amC9TUs80Y_X=3674RbFf-n=W_42RMgZp?)r{L}<`R|N znMNsMncaer=Zuk7Z0yz5h?pvW6XPXmr)ZhB>}y*?Y__bnVZArF#!szMk{g>-`^F5X z`@JeG*fyU+Ic}B}Qv3HY#sygtEZw;54_a0Nc1L(f0Q|#@RzoGkZWY16^r}xw3szZ*^K&)Gt0Re^scQv0Y z1#nB^rRr%0Y-kF%7L0tug=);zB6;;yNWjP(6WXbJyOiZ}!rPy-OtMTQkc{!$6_bFZ zbGtO+)7VR5DWuwJoY%Wf-lX=bQM(e{k{h7QouD6X^=)-fs-cjbymh6>Q+(PMhOZMY z)h?$UhHCT#GD5=Vd2n(KB&8k6bnH*Hhz*gqq2{Yd`_OrzCT%x>8Fhh)n z6;?Am!^WQo{1K|#Pjv(l>DNFO^KA~ppP;Xh^+}Dr{l&1K?GQ&JEOM~HWgQJ+HD->w zQ|9=X$fiNnQ2j+nWP!#_vM;zb4l4IF=64(gsUIrH4_>t8js|Q8VaIySr?~l~mZFPg zVU(MXVM=XVZ~DQX%Btvm_F9e>leqbIx6so4mgHx2dHNjFOH!3Y#1T!mn3!kUg$@VI zj0Fu8q>!b8oDo4`fzC5apf)D%*`s&^CzG0`sBgI-ZYeX*G>WkG?Z*@^2Pg70gdy*M z0Hg{D;;1iS%DL@GM<*V&7Su_JkF6qg)Z;Rc#E@yVSiKuPgR0QArAd0_UYlmGmDm9Fdeb$7&HuqqiR@%~g>uPWC+>+=;w349>-JnKQY zKegL3+pfpY8;&Tww?LIj#on zsylV59F>ugej+ytQB*M>HYyGmlUm2jEui(Bzse3*-mD^%*MZuef{7;6<+nX64sy~+ z+pqvUXNnr?ii)|=cw96vG6D*do@uvhjcYx&8kswqUeVB*fR5aWFgFqbu3}|tX&yE? z+IT+Hpk|fIttz=HNzGOANqnA_vUVtYf};ZgY8|BJsXar* zd59qcZR_5NGg!OoZr^4b3wTtynSfvb&lN?r8@z$L_{pbyzdFK>zrK&XLOxTOYI-_h^Zrqs0*um%pbao#V{6%kT94mSIv}}y^tLKv3 z&C*gjyKjzK(L|2o7#NYmDH%1;=>Gs57t1m08hnnYp^WoXs=lUjqiu_l{6+BIq~)c! zyt52*f~Pgj>Yg3=W8!PSwCXzK;(TCj%3yvJDv`dTcmfy~v{NgT2PEv(99-$NQ#~#bD`=CPf~`m^UQGn`<{1 zj#(r6jML7Y9zjcyk8wrX=stN|KEQLu#C02K^M=Chaq0~Vy9ZSwHnW{jmyZBbRtbRS zCg-OV-*jIxlF&yErwpt;IHs-u`M9J?dI2ExJW>J)>rAm9BoI29uOP}EC}NhyW6<$Y z6O|lQ+~y%{o}5)#PC*q(^b(1GW(Pc)k`w{5c*SRORfkC9j8j#K%`GkotBC&qFVdxg z-P~n?RmW39P3%6GEojh%zLNv^IjlRd7VdTEH&D^N6`?hVgU|i(ZH0e^rVSd&Ce%AR z4aTL#+#Z?{V-b_-P=F2_6s>JcoyV{a+fP3ASgzENV>M_XncwNe9|ft|$V_uw{hGDH zt4WYC&1GYHj>}V8+ADYY9B!1JIluz0K8%+TI@(A}dK2=4^{IR4a8z2|j)ueRfGy0+ zyB~COijGG}kddCbCW|(Sx@;|PAlTSqeT7J}4TaDX?NXy*+S?VH;Z&WglixKQh$I<@ z=3e>jMcuS6_uRvEVxDRB!Ob=T?9Us0-rm)A(AF`!Bt?x6&5}JTd9IO@0Z73d(^0;x zl^YP7hYUzz#UxY2(h+eIx}N^^Piq<^x*M8O!lkwq2s;XcQMXv`R$xqmKvxUeu#}QU zPU_@s7U)qJ9iZpySso>|Wu6HTk1AEc&tfX+Sj}BNQzRm&!0YQsa5KooXlT`u41fXe zQTGR?YSrviW7NN+NU`24%5b4upTd#mWr3m#fMnmhG&N&Qi<))(w_1g{m2h+A{G&W# znJgbX{AX*CnsU@?7u1dj{QIaj%%Y)jh-CKliv_;!J8DGOU zy1P7{TrzAyjty70(zPG7Y1Z>wG$T-Out@zIH9AjYMQdtpU3fQKi^gNaaa%_%@0aFh zb_Ow?rm4ZC>g|81Tg7E5lE9UmuRAf;n~y?Zl!`XDbIBaHDkl)B!IY^hpRG-AsYt=3 z3=YtKW?T$bE-$HEtDyDNiMR7YBObgO)V9_og4j3jHXMAQqxpy(%QgCJY_IxT1!?;phGRDg((DEjQXLai$~I&kqnZ?Pki*MQgT`Xaus|z z5O0%GZhJ7L{=mB&M|%?v!KtRYmg*P=x1S0@NyWh(A1x4m<$OCs=qddk<)RlJg2xP z+zLF_;O#^8QAA>a**gyN!CW=EWcA{j#sYF}!1@|FUG9nIaTCh6Zi>V4s9Mh1^1frP zJN2b*qzb}?Yu6e3*XxIBm5h?cF zLP$KzI|o)h>3AHR)@+1`9e{k1){$5ea1J{PM3NSHIc{;sN@IDgkY#edg!H0Jtr4f7 z!zyY3GXjik^IG)EuGK&iPo&w4f@YzB4^N99PV`?0(66uJhM z7{}%VJkk`%e__~D>7b)yywH)Q@PJJ6$Ur8rq?Rja))-FqUJs>bX2&$-?1C{ovSvQN z%C#bjOJvBE^PKQ_%@Vclb5!g@YkJc(zi7sD!Rl%)M&UvT;^dwW6q_>T?pLskMHArU zlg(U)=Ll6B<~?dw&@;2P6C zaQNHnS7{ z!56wTs{U-#7L9<&#}%)t>jp#NINB0hPIP?aayb703b^~5hq8>iokpwTU_LCvtt3A$ z*>*DLoRQL-;13X5!LE4Gua$?}l(OJtb4kw9Z4~LLXpD^x^G%1~{;{G-v|mXpnD-7& zNyaJ-Z&lK7d;_Lw*4Bucgc}T)9FRKGjGWe`a;RCNuZz~gYh6Fdv|CtE29PgtRIV+f zlE-uh_gDmR+NN3y+B%-|GU0(lG6G0Fs@>L!acOHC%n4Z+a*#Nud!hLmHbhGl*y@1h zp9p`mmEK2w4GCXCE%hX{Gl1ks`@qN~_Ni>{?%F1aA`>ckC|={6EI?|U9s4Tm;Mq&X4xXf!1M)b64PN>B1hD0rcfn<3?AEQ zC67myKY41PkM2`aYpAv6+^+h5k10^Ta$t69YiSlPpv8FWk5g8XTMwI3DKu@^@^93U z{o_e-q}_}dXN8BRXje=wuW}h}uj5ioVVAZlGA_2{!2bZ1H)XKz)EY@4Po5S8`if#* zt0~NG2&;;3P~BWrxmNo68hDXU8@Z<0D^YyK2LlG2TXLKVQ()GYLKBiYW`-C%=RUNP z3jrh!3H<0gzlE{uPTGUlLmdfY>q{d1v@~JO*sU@)Gmey~89?CuaZ_R>i6IWz*rbnY zaf$QE$Kyjv#cpiqFcsAx1cl!BoVM3ITcY_YBtDT84^_tn@Jhwty$Wad0J;H5)YU!QYxN= zUtJF4ONI~Z0@lJo5+N!ZuS(+W)X1gFC?xl+d2DS-HFnJyL&G85eo_Y_t4Sr%)po3p zWA+60Uk`>BC!94q=$S_wOqZmmjZt10N+ zX`xYI`T6y#ayr!2v>Awhi+0}FH5*&mZuzH`8@Cjq>?J8*LrX%95?2W!aKL9GpRUgF zENLGhk2IZ|6usrCjIqrrX(T+3{dF$?+(yM@f=v4gmfG4~ptKK;+*Zlya-5?*OOS8D4IA<8QzE|`QTgqP z&ASdQ50>6{Aeh*m+*P}15ddjH-Z}bIw)Q4-va&3^al39gX2)Yiydl_&fC6IxccLpp zILu@)fo~*aX9p^3MMqK@i3c1U)ivyMYoB_ zz+y-oR?efPKA8lzlPO7JP^Ar1j+Y!GWoBe9lC9t^Pg)WYBo`|NJ&k&I#Qg!Ze*x%M zk0P`)#F>0!1gJDh39F$evEq6H<@FHV&lN71nQ1}igHwANStoJ!YCp7OPx@!ls@O9f zW638VfHk3ly2Un z^6ED7EW-?>{JEu>Sn2NQ*yF8RO5ojv(^f$N%!j9Q?NHj!JN&OJFv;spJ2D(nVIr^Z)Gejz5g+xTm+RJu&2}X>a-IFf)ti9J8OY+92BP4G zk~|FZYLdIS`I2@!9S`A0iSIW_s4QA!dv{`P7!P`i%i*58beGK)#1h8?5gdf$ek-NX zit2Hz{grc(3jTDkD*3X+#T#JAC)%|1Zwz>k#1Y)Sm8VH8R@^%gg<9uSTb8WRNp&N* zv71W*EkY!T$-&%kDI-V^Ik(&D7#!3|a=lP1bS>!@0rlH-2$%rlZDDwu_kJV00CL0{ z&r_xr(64G$E+S@K;Z92W)~)uWC6&Z5Dx)qkR01ibeHk-XWm_w`Ev@B-Fqm>!lh&%u zdhKntd5aFi6;{51qAl9#`kteyTiP3Uj(3mDPcUuVzM`*qQ$f}B#nu|m2_;J%!e1z7 zBnqWTtr?S&zq)o>b+X0aojOF_nc*(`y>VW30A0g*A#zE@LsnKtT{&|`=+$&bKvG6* z4gsv|lRE0qxDDlS4mwoDy^d(B%ictKX$yaMpW^2}m2Ivt1{5<6Y9yWX6xTDb$Gd4r zW;w@TDa|tg0=7A)D5E}GXo=^Q9((Zs@OVD!wHjHp;HcglF_nqN0QaRYBU(!1-0wz39YzQhrQtE;-7p*iyJ~M^ zYgnPETg)#ZyNnWu`(GV_tqc7$-FPSF8MgW*-CmF6sfqme~it z$y&!@)J`%|G5#v}LrBs*7o>QW(k~|J;@&vr3-?Y`AL?txbS4jXa=2i5JgFF{apse^ zLZc~4Jl&sp(ZXrTA^g2d`JNubDynX_pzq7A81v4OyCpB^s7j?)uch6nnok*F1033?1si{`!#@Zsf32sArxzU4l$2As^rhOi4_BgFHvmX1CXjqat)c*hr zarskiQyy^R@9~q-`XXFqnD~N=)agsadnia&;uvy|w=y8==tzii>d3R%!T0z|v}WsT?T{tWaakDghvUYtwvxd1c_g zhj+HRQZz3z;1wLP?th(U4rx72C1kF7_MPIb15mT_JV~b8>Hx*^LQ`?gVoC6H_`c$O zLqoG)4{55o5wQE-hN?4+uNF&|tCw>+FNGS8hY8dq)}WRs4nl3gYV$u8}@Wtt|N-t7cw#z2X6!l-LUZ9p?#<|p;Sp0A2Esarl9R{w`XH>;pc($ z&3D6^-TtpTneC)_)m5+*4)wDig`?3v9qBr)j0tgS@+7mDKwoJ*^IBdqg`>F>c4+pG z80ngQ$HiX+-Zh**WoubdM%VxfRPE2>T(*U&=zbCLH^fV5rnR)OF^52;0l23%O8loI zi<3OJLe&>k@OGaBY)Q6=qm$CO6a*Jum}Aztsw+JYN|lsSL;liWBLrme&03mV%Bh2c z&T~<8XH{9<6`(N-*+)k!$j21O040L*G1iN-HtaoP2nk*XdX80RU`Bd$q-T9@FPGfycXLfZlSXe+3e z-)Qp#Lgf^F>a_k;@)mfCupfUNXtP0kYKipYvC5=?f_h_`wW%;&tXC=OPkK%3s3&tK zd8UyH1PgeA-4M3RZ8+tJ7PCMM2-s2K? z&Iu%eoS#a$7Np`O3^y_098;7`)il|qZEzI>NrFJ;m+k8;VZlW?z!e0_ouoy1BFMX! zI0|!FuohiD0;d2u$n~bQTAD>AWNRTIgANa^GAokyE_2-el~zb?U6yU6SAjPS{GzRb zs#SB0j-Ird6jvztvR%UCik2z<%*h}eZo_lhr_{MEE^p~k$2FFr8x7e_!|<#6Ma)0& zto2<#Z~8$}3H)e^YeA-7@g>VY!hZ+G*&++5PJWCk*N@mq;wj|nS~TzNRPWTNMJYC6 zPlfnL;&3=0ZG@lJy+7ls?)V4c$up3q-2VXMmC+p{D%P?k_~3K!CqQ)>!o&Xnpo(|J zJtoIb_$ym<^Y_H)BxOGxRa4>>A zR~YQT)>DE{L$aK?ktvKXidV7QkF8jLlV2eJ0C$SY=7g7j@$x?kk5^CtCjg!)tCE(a z7X$tzgp-8>pL(z1;0}>E$mNd}OjjlF=v>Y@Bp$Tv0PlhPRJ9V^lI?dShpLsT(SX`a zY)(!{q9s2v4J02vVhCm{#wpe-w*LSh#exl6vw9O3dzPgDULYeSyVbj8%JJK+W}U&e z@R4c}jf0R$teb(3GuxVRKt6o7n-cWgdeNr<`fcIr*u`3HF|_PscwiB$fKEPB)~V}c z$EZpN-QQYUV<|pZvungDof^^9{J017s`_G&_(rBU=O>zk^kUt`pKILse$^h@4T>PQ z8@7SLu1{J9?&1Fcv2EkGwu>T0+qZEQ(CyIR_oQ6#rld5;m&y_B+w-<@lUSb@{7qq~ zX!f?(E#;h?F*wP^Dsgwzxhtz2cfm+B%dZeE=BFYy3NY^>TgU?Rrd zy^pnJ2Bjv-aZyUlPh1BeU`p!q&)R7(aV7w!S&lA-j215$AaPz0NrTv4WIQ*6AsG&6PB76l)q)j-hF$ zv1l%f8Np2QYHK}f#kX1)kphdS-nxpi%QaDr7&FwY|v-hQ>Lo8{G$CX|y$Md6($eJ4kn-sy*%xwm4t z(~~TNoPukUQ?d@~&@?L#^Y0%=^hrZh{i&axl{Ph6g8en9T}6y&;-ZV&`P*mtV!cPQXWz*1`H)}6YVULUx5uUTaI zhTacK(${#i1bx-!v*k&Il8eyhncK_NwJ*(o43_B>`OAzJ z_o|oLQoL%bKhC_2iXzl^FmiC&7`HIJw7y)U2OYXotz+Jb$DcvzS0{CINW1D?b}Jc7 zXV#&&+9N^LbHz&7Nv7;rjmcuTIHpX2ErNlX`#Mg*p5xr>Rg*?8}`*p9uU|gkx>YB>uJO-x|~(+0R5`akVY+kN0b6ZDTsoOWqyv znOVPQy%B~uiVTzf=&f&y$>x5}kQMD|0sjEUD$&R0V0g94e#{yq$&JZr86TB$l6)f% z;LR7t7B^%+*%Eo;Vbm1_;XJyvIyn(oWllHPMBj<#p5}(2B3G#s;Bq2lunhYt6Bg zmgwEq#?_jNgUC=%Zjo`*}9jAT3@yK5fJLQ$>O;ic`r?) z!XPn>?ssGNtEH=}9(^|Lc4D1U9Tq#goklk{hm-+w4S7DNX{r1{@euyahF`NuFUy{h zuYaXS!ijI9J#Ri9M6MZ6wh04%b%bL(9_&HG$m#WTuHsvHDO;_XjJ*7Yc_w4E;E36)9`W7-J%R8pyEwJlBO9)6~7g>x>KVR3H; zoRb-(FS*A|)1sSIh6ITsi6S4sM--(u(C6fedyxtCc&=V}U1FE9LHB-?*Spu|VROnwPF(J#POUOk}@To z8L$97Pe3X1_Z6(PEX{cvmsG$(z}wu_Z#=IeiD|iqBkDwxJN06D;-(6A<$)iCOI?LH zsG9s%Vwc&=YLb&~74Y){Yzn+s1mM>BwG6fkR~{mo$5=iu1=mok4E}yCC}+ z*x%iA$@);8)`doP*n&}pVA)q4K@}P<)Bq2ZbgM&-_auyx#{!mL-bO&<(xt6Iw8yS~ z*KEf*3PJrU+YCo31Y;Q<^fM%`SDoAYEhHQqfOA_rl=*1KBn+t(a;xfVXJj_qk*Qq- z$=rH+RhEseEiNNvIU^aRWVH>;`eo19E#QstRff`k3hX=|;rnfG!Tuz=zJty%LgqXk zgaca9jBjysIK{H+qR;y+Ln4A?g6((*o*Y(ow=teroMV_!{*+aUy~?E9jmpJ@p9y?r z({P?1KRWdP0E{cY_G;3I>LRy4`01@7wuW`KL%uD5-?NU6%rl5B&VS${wf-k4f7!Y` zaz4QcANREu=Br~A_epUeS7FG;YT%MdinP7i#w=yq5~o3vSr?uNy4F4*Uid#somH*Wu$Dp83aKcxk#U{dZ)9QX-W1jJ z{{Rrh;M;iCeO6z(bA`q_*2jy!9AEr4@YEMq*DEc>;Rsbn3e>qGlaW5s^5tP~@UO%= zK7%ia?p`S@|pBf$!jFG zQmYGyfk#j>K^03!8?=)ic~W|eR!%Qk)oK>IxqANq z9&}I8bj?|`E4?|6ADQd{wNz#bU0B*Fp56up` za`~8=K>q-V>R^w&bM&bEP6zg^yq=9oZOh@ioxe61^zBc$ z;;&=tS?q2kxcf{9T``}S;2MJE?qgsskhE>t2Nl=XL(i17*ysFXq}*#-LRwflMu^*+ z%d#|JaaSPmcZetPIJXxzrZEl(By(8%Rd$eZ$E8Hw(y`S}DI#d4c*rP-$J|w< zylmm2!S>>#Wua1q_809@mih9&)bO!Qj)y+=I@;{P!^nEuZTqUffz2n`Uz4zaYEo=V z%vk2tBNOcvNL^tXPBOY)V zBA#rei~y`2F3t}GRWxYZT8t_|BQ!1*a90_mkqPxAOl}N6I+aT}Do+@s%Z|iSM&H@y zB2Nab%H&IF`F$#u!&kYYEhn~j)Co@}X;cqTI#+3~=n>lZmq@V}E#>L}Ww1DIa2;6ZB4F4>T;j6ug~yTRgXLaIR15K_E`aZ z8?HhLJ8xth{xxx06NvsRD1OZ!FN-{D9_|Ie!uoP*zlB%I{i*duAH{0t^%Z=*%-yxI z4~cUJ?MtPezHC??+#1~dtr5TB4X}}U3veHhBL4iD*Cg z?Q{PCvcs!i?_qoJ;E7NVSzC3uc(@=pYjR|nC$OMy3{iD1; zVWMhUK+_>hRJ?7D5CA&Um%AGx>9S0r4yQE;l7=8-Y7GFh^J-Sq$9Qju5vyfJ>!2SSgu8q08H+ZYmXEdKsPvJ=Wdf~03w-Lg7U}CxLM6_TQ zaktXC?v65r#ofFRlA|Q{1Cv~}<0SWcj9a7cxK!-DWpEtLk~TVGSw(N8EVg`Q&2cz%f z$07PXR_i5MZaJ*1h_^HEQ(WzKOf_iU=OOX@K)9GSW-2`$C)CmYjo zG&;GQN@s1PBNQ|^k>qE((4W{X*kZpdPQ&wi&DOXKEgF>zKJ9g+d+V? z7g8gE+?#M2fm71K!{*>JyvU2WjQMDwd}uCtv!!Je^W&ts5sRWfFRDEiNKH@(jLo1&<~!fq{9Po|M@}*UM%>T|FP-sxMS! zqLE19>*OT-m@u@SPR5=E?ug_z0NHkp@ZYvrzC7!5lqcql2>RDZc(iUvqDVrDW zY6$iiB<^t_q6I7K{P90k9J%FTb+>jtmMo$DM8fL@G`y`Cmtx#r9U%J({l)c|v94~}@2B$M=(X8z!ARN)s<^BSMp29vd;GW;@ zdCRZiyb|^$AQO75vDR5anEe)!I3T0)2VfD;hThb=$+dOErn^aRk#TR^hM>4xHqZfn zx0(J%EiSi0b6}#6opP@f1PIV&6=qzry!wsd2h|9O3$#cE8~mpizM4w}ocrX|oz0{_ zN>$e3{ic3zF}>Hb;3tjBNMOl-$}T^%)ZMiRJUig_6TKb_oHKr%;E;wDUah^3+CSGr zoo)8b0=0Xce>QB+kEGnfjf;DSZ4b=gY@IC!lo3a^M z94K9qBuE={nJ9l_{JxoM_F$&C`Z2^$O4$>F9+Lqz5Ug_{2`wn5~`@ zoH)D;iO;4CqFX8pUj(YDk%VL`5D=thT`d%xHX|h~TiMkW8lbAW2+~toNGt$_CV&{z znI(kgqO0ZoMl5Kp7rsE-8Y1caZlmujT3PiU#Xh+BXnu0aTWGdbjHxwb?|NHxz6N@yQxbY6LMRoOUcSuK9I>qrfU z@PZd;xW&GO3lX;Hp&r`Y+#OiW-8jF1`lQ^JL6EN$I9r=rTobA4priL-&mh}4Yp)6h z7D|9m77Hq_f2dkeSpP{|0;P@q?WW>6W@4TbnfjHq)q1fB^X;g&^sAV);3VNdAbdB| z4xx+@aDs99ZG{ZaypHsm=4{u~B#|Yur7c;6H^Kb$aY2WDCjDfB;liu5F(ZKZdwRcq zix;!$ZmIgWh{lqIT?Y!KSD%htZjh<0J677*tPO`fC4FKY7nGsiH&2=1Gx{enO~pMH z4z~T}cP;>*9}CU2a%fzSdB1o*`Ec3^@Htm#NO-PeRibyj#T<+;pwqDR-RDHk8S2+i|fS zlHBoGHU3)BZpZT^RfDcmu4cDLH- zVcT;>+IQ|d+{$KCe}cBWEU;Cf){U^3SH7-|k`nNJ&nKXm2TgC(Z_8>m#LZmqdTY`U=5kuHcd-eA^G-5DfH zFm$7 z+-hcHeN5dL89>^MU-!e1kEU<6wP*ms>ZW(Wcs-8%o2`$FUT4-MGRUMXdSdkPqg5l+ zzPBmGT=rRu?QfPJv__v$8_7r?Caj8Dl4BpSUsCOAO;heIqI-yuZU za?|B={OS1{cb3TSScNUPhx^X;cvL961Hi9WMo;#i6m!FON$2O9rq$J4QyBc9L~#c$ z34&)bi2{FAvK|PpX2JhJw%dA7(`~|OA$x3>H*AIrHG?Be5b7p43AEwuo{CUy4LFMl zXyM`vpP;Lnpz!TSzE2EEKm7wxKL7rB?hJmdN`ctUHTn38Ta&DjzCWSEZeXDl@(1Ah zB4-RHBKn91oH=`OCY+qMtwz<{N<}&6;JPz$bLXy893Wbt>(Qd-=h=m zr|L=J>s{>*A&*FymuO**jCxVW7ga^Pw_7{Z^720bt3jwC?!5#g3W~*;#B9pBfag!y z$_P2v22U^C)~#*d(DLNQy-EXlLnaFrX4)7mS^_W^Sw689>x;}xl)*40?V>bD@ehFAq;UIS zZ6Aj6eEqrY9i!0M3xCd1nA?U)cQBn_Pl;0Dpvf$1Zm~G~Y?MLrFv}~$V7_I7{em!- z2a!FgUD%_$adAqs#T@?kz?a{@ons~gZst3cR=%sbkm8;Y`1b}cP>XInFM(be6Ha%S zW)k}5#+rkJI@nBAJ&jPd~S#HQvHzl6dd3z<7BM((RuvzMImG(DlNd8p!RifP-+s(Q$%hJF;%tBqRX*r4H1H7kj*M>)N@wvKyDV)3nN&)St zi4SWgW^42YuiVqMVQXZ*8Wj5!4YeMJTX!d&gvcUziA)E~y!U0r>zEm0=~Y|fbqJ$G zjT?+JiXLvgu;n(~oAUB&u^)*QOgU3#a?$)|y7)>$`1asy`L}Xzv8T04lO6Hg84k*O z8R_J*R}t)hzf_vL$Z6KAy`bX|n3>FFu*oS7KYsCD^z@j|RqGIHF(=L~F%>=*Cqjv+ zH=obLUEwqeJ=R1VH&wTgBPm87Qk+&~_0^OB9kYD0_w*aL_nLG6jlfAqXwKkny{}BADCI$(Cu6aN@;)yaidx6 zn8H5RAaF>uzmFd6JUJ=zBn_9fQ4*Drq`wgq-s0(xM>rK}TXbxmcyQ@r{~Gm#*uE9_ zV)89$&P`X48VSAWau`A9{Ui_TT>j(i!XGCDI#CBfvWR!vA<-lhLYxI zTYT>czGyXa;12`hCE1qu3|q<=)@oDeU29>nZNrzJ#C);fD28hJL^PS*4P5XSzLh+x8JbubA~@*>)SsG$ zg?~YHxVXDKCaRQx>7i$A1 zQK`D$X<`qc&RO1U92Sz)6T8O@;hBY|uGI!6zeZeWfe}j%j%dz_O$AVU2ov{pnCwiO z%>DofvnU?hwh@04F&1FzJDw9VdKx0s#>syeOV00Wth%zXl~^rNFpR9Feq^%Ef4VUW zq~8rR=VL4L3L)pitdWeO|;~9lM?ir>S5($u(8eXTCoBu<@ zC$HGnvdKn)R+FL}uEt+<3k(cnErdB^G}|m^*48HS0ji2r)i=AnE4plcqo`U`0)V9q zAp!Ve>-}j*oF(Hp!A9UwP7Jrz+gKj|t1GA)41j9H%N3HYD&gYSM}X$dnVCtIDK})| z`T4Z3O@5KOu1H75qe;Qq@#7f+0$(<{%E5Y_P`*jtdpqxKL(wN-d5PB7-)S!vr{2t}Au&|$=j3kLD&ywq#IZo=p_q^B; z3+(xsGjDD`@p2hP!f{QK{c(x;{G3v99f?%<_n?L_OwBnX^0zu~SI(^cks({HUM7RR zj-H}wmv0o0Ql(81vvriM&OuU}upR!6+W{4p1VUfk+T;Un+Se3Tj$-0vbk+DtBj4$O zq{;)IKiffV#P6E3o zy#Wp0VA@K$7XR=G*T}>H0{1Z8ft8%Zt`O<_8U@V$Z>-nnvkGO)qc9O(9pG?1U#L+K zf#2j%f+C_CI6L?&kv{rCigu^%6V=`&5yG85X78$GuANE35JuP`V?m0}Dw{@h+Iky5 zo;_IzYtm48ff0aT4aijTI!uzrL&snz4GX6?Zzj{di$_d{l;nngDklPi1yB(|PR5X6 zAg`i3>n9Iamp~|>PY6N)6joVvdek{wop3u%Ca`)IPhSanE63sP)t2US8h&BtfZ>wC(2*KC=n+U{51o$)vYO`^`7pe#J!w5y zD26P{^H~`2GSlzlXXxZT_TWcNz89`dM1h_F8Uun|GL&`om9|0-o2mISN9L(j^)e#K z>puWBeYkVYRwejV`%lpv$*WD8)_To7`=+fe&MbY>Ka7-?MW$Y1+fi4TuD8z>ab8CG zMjj@3K$2*I9Trk?nY!<@*&Mf%foa0`=_p*MaENJEKPFtihrC-nG({Hf(Hy9992<(g zkKfQ;)$G~0Mo+k@JZf{j6Xq>Qz~QNYI|E|tMtdZ*kU^Oqu*|p4k1BhxW@=t&!c-H2 zo4qvMEYtEeJ%Nf%5^mxnKDM*wdNg;7fInidk4NSyXI6U$oWNR;P)KJG;0VS}r1`H~ z$lvZGSYeRxpJD*v1$cdV961Ca!Gic$`}MN&(#&j*+G+~(4Z>7Gk42bQOp3UiE$2Zw z{h(sk4`lp(hgX$yl;!c6SN;U~Of6;?&fhp2aPI3|3Gp^=23TsmiIO(C_T-5o#Xj)u z`7XLMPJHyuULpt!A6}(N4&tRmh>`p1f|fyv83&c}q`{WZ%4zMOl3U!lfw633;7TO< zDIFql-ym&^GzjD5m*sr7zB{GU+ii2y?s1ClPzJ>Ure>BlweM79H+s<#Lo8u{GuTPm zja63yf|^pDrUDAThS}0Ay0T|KhsPN!3j*#N9n#L75@2m)@;FozhW6qiVIG1n^1X?i4+{p;)-0fr&+Sm`T7}@#pu=-#*f>+xZ zyQ#{G&a)xNhOgu13--k7g1h;ttWnZzv=d}*hIM{5w}i}MgOk)Ha2-{$(sgjF#(Z9r zJloCINe=&O4E}8({$rtvo;(3i?V5FanREXh0+U*7Q%c~GE`=E+l!Cni`}nO zb6&=57_bor*zd%DuWyMyU*i*H)?=B?{sZ{XZS7vl6%PJXmu_pq)=)HcTjdh=jneiU ze{4S8A^=xoQ9Jhl`VDr5}!9BapQ9E1r!1?V#<>Lk?zef;-gjhq$_s} zrwo}(=%0gl7TZCj8{gGhrnGb$_NwM)drt4oa>-{{iq}~!CfsH;74R1Vb_M&-*#iA6 zN;Ea_q0uE0Y!Q+1Vt+xj6MHh*z9zzfFd@J3()| zGrQ^oj7)J{cGDK#S(SyxGL2^mQdOq-^0oJPSk1zlK`kN_`mc6kGt!VT0NR58>H_K9 zP-5;bN?s?v+Lh%+Jo|=}@Rh(eYA;2kD_IRX))MSSmK`8pK00ig*_bi#PTJtlqn%~c zhFH(cw>DQ}ymG?5irj}x7Xq8aIpA)r{Uw934kNvC1JS3oYx_-Vz(XhJC&3OoE^%Z> zxe$Xbnto5SkNu7uKEAu;6mb{BYURcW1YbxhFQYo)n^pZ+D_y%b6wN< zfEjioVV@pLPv$Kd-eK&TjP%ewp|RNG3?7yVNm|pn~)(&BC#Q{xcaF#jySqqh*@k zt)W#$aTY=O+jR85y?}xnd?#$arp{oh=?gkztxJ&b>)1_<44}Sx>t}6EznJnwhF=$( z=eJSZr!furW*&l%Jcc(y%04MhKJ<;y3bvr6dNJekaiIFC<-?Bm$G zb~`nuo6P%%ekNmFK&+5i)NjhP(tB35Tx z=WONnsmWhm#8sl&<4Kx`ry4Wxz!-6`4dA~m^#8XbY>P%f`e0j~1i+QxGN@airV8<# z8;7a)qm%9UtN&H3#PluUxsoIkQu2`EjJHb{SO8&e*7$aN7&bzyJUfa@9`g>?y*+u;h4&arBb8^lwEVitP51m~8FX9f zQ$fUPOpj^>(D!@nR^N-d^nY7lsMN{!~xK3bPs@vu`3HUp_;P>LzALme%Nn?lK)zTB1r z_opl5R)yK7cJQm2kz8M=?}#Vd2t3M+t3(R5br*DNZFz?)WCW5 z7quXM8;KOR>&@Dn`C^-<>E=dHm6rgw$f(pciGLK9O@k~uRt&9$SEh?6p&ZV9vdc)i zTG^mIYOqX`eh_76NnG#>%C%(=&R8!*Dsy|SUmjGkn5HQPuX$@Ns9 zyLtMhBz_A1vei1X-_wpEvQ2A70&`6^Hyjj2%wY2zvvDT7(4wF;*b6|fG&y%>PTSy@ zj+oyQj!FW3_)wMC#gEJ}lI2tF)fY$~tRK-g7D(}Vv9m>K#*`tmY4_MN0;&05JgBYf zO4-*(GRjY66{LLDM;hWv1 zi=V8ggx$=5aoHcp zc?ZYhMyAFF@NlkHW;|8Iwi*%yD$Hx(&8UcZJt4qySY$N zY`fZ;K@N&763h2?UTjLS-auep%gf)ci&Bw3hVD0O9~Zc4S=04Ob1*e^Y*>)mgsX8= zshcV$SJp>C9Bd;vi~<2?8KRiZA%-WtY!)8@VRdwH^JLZr7WTK5&!V@DZCvfGDX zd3R%Uip2hx)fWCBgf6vurnus44B55q9p-A`ML_SE`=@T*cuf1G%1UHbxaU=9ZyVrH zHj32d@KOlYONdq814hy{$wy;mV7z?2Y$l&)*!J*(+%VHa@I+T%m{~qf&JEfP`_M{1 z+e6~fC`&YHzZD!&%NW+!ZX_M&zvc5qYw@z8g!wfeXn}V;$aY6tvk<0`-(Wu(5yCbBhbT@u)2CzMXNddNR*tVsC0b%#jzBH;yx#vB#X$?b6D*xgbU zwUW^mz+X__7+Z5Uos+st%9K}Irth%d^qCw6`D6o{{xQY+_sQ1(l!8Q0jtQ|^ep^S? z%eF!dGs!h^;%1uy8N3ASsbHMrQ#dVM}lRRp%~s?bgf(c(lv$Up>+0w*HWU?q7rOiOT#y#%p-EFk0;u)v zz_mxZ{T|je%CsnZ3t2Z<@m5QAOlSv{6K4VXWqiX`DM+|2KXiaENA6b>oKV!mFVHs5 z)IC$mTiZ!cBX6^LFqC(cTyC4lEq-Jx*2?j}I-LJ{xQnsF7oY~ON=gbuQu<%Ys%Mx0 z;hD6(iHSzj)N?N&BsTZ1THMnXf{YN8fp9iBVJ$9a8es5zF%Gu#)pRBnvj|P4uE}3M zUqjQ6J-kXT5jf#z|?90OdY5 zoYnE)kxzJZa4wr<^Z7uaWal1CWnvrO5SX~|QAgtg`$gG{bdl?w*%)G(bp2#M-@wMl-nvNt8iZNU} zk%9&!?n%-k*Dz8@^o^C5(hahi(>~x(sm+=20(uM52Vr8c%uP*pH7{}-6`SfzNEIew zj|dPLwQz2Ba?(4EgZj|=JLVk3ViQNttk!U4l#a~Wa#k{O7=DXAQ&r_Zi>#wD9l{VD zV?;JivVhU2(*3kQ#79wIRv)Xm?+&fIlmMKg)l%aib)>tStZl1qA>-004joe1Jd&K!T|c;GYi!+TUnoFdYU# z0Du9nA;3Q%1mQpFYzSHa)ZhLG9|ghoxB9T)?IH;FztLD=x*QVo-|IwL1EBv_9{}hE z03hWRtsUIV9n2g7fPYYA9G}&|H2?tVf2;SmH7hGSD<^=Rm5r01m4ly^oeWH{@$hr- z0RRX|0011gE;K7UJ8KfuKiY-hPlEm@t(Xk)_c{=ePynFc-{@K}$0h~;IF^l-wE*JZ z_yk{N0pvgUgbXTx`UefMRRHr38WIiM=6}l3f665!`rlhp2Dci7{&#Lf!1VNAXZcI4 z|Caf9V0VDjzSnoBmC{ zU>Sig`mg^nz$^a0YRf81NRj=eL}VJ~E@bS?>;M2P1k}ID5v&RSt~Zd`|E@QXMgOWd zkP!crX(i-8<&L%Z*ZINa|I!1n*8TvX!vnkk1yB$l0g&hrQ0NeU)&OAu1UNW&I9LRD zcz8qv1Vj`(G!$fH6k==~bUX@DDoS!v@{iOEJS^07oOB<_Sw-16`2>W7gs7N5%ZPuH z<`EPUfIvV*L_tO&LPH}Gpe3gj_-~g#0}w^v3xb;c&tG{K|w-8!N5R+M+k)fUz!Sy4ukQLO%xVW#Tbs<8H+tQxe%U0tf3cM zb>@na!^9=z0|E{%9zFpTH4QBtJtr484=*3T_-6@8DQOv5wJ+)#np)aAre@|AmR8m_ zu5Rugo?hNQp<&?>kx|hxz?9Uq^o-1`?4sfl5IAL8MP*}Cb4zPmdq-zq|G?nT@W|-c z?A-jq;?nZU>h{j=-u}Vi(ecUk&F|a0`-jJ;XLK;jkkHUj&~SgT3<2r+*Ttek!+d0e z#Sm42Gj_%#XAg$Q5=$;@=>0&!p?ZaF;xdDPL&>>Kb^RCDe`ET;#&gL3i0Oaw{7;tu ztOAgrz^aW7g$@t~-0S=`#UtlIk8t1YO2Nm!s~)Yx*`6WGXXb~&JfxcmrF(!YYdh?X*E!i){_&u|j|RJfvQyw1oR=SN$=6Z@-I;dK zk#3>UZn7^q$mkkQ%pfP9v@%7!IQXPQ-%l9fV@YJu*u|n!C!G7KR#dOyqc<;H!K*Mr zUf;d0_09?%YI~4cTwu=3M7geb@waRia$3sIOqB8ytzte%&%t@2!OM$WLnRZQP;AWg zyC1(MpnjkGb*eK8j3-63@woTEW!0BP$7*_tJfNU*D)ha<14n7(1r%3+&i4D#A}7Wo zs1i^&r{;sKU9E&lRmLkeWplOy+zBHLbE7u$yr)i;$HXc4a@DWnZY12~?@vLDszbH< zc=k7AX?{VdOLe@YHLA<<_t^|$va_2dhI|xbdpNfgEex9?OeJ5blHqgQ1~2{ z?(9tTxmuO~{g&DVE8kJJ#3)1>X{I=VPi1&_vp%(j3By0v{*SB=4~4TwRMPK9sziOCTBj-auH~wuSy->5c#qQ6PoPcUl!uyf+Tj ztk1y7sRK+Byw;1n4&ixqYu$aCvU2j+V7w&QU9#k*&3vl$6yDVQENKef^SLKAdHHAN zrn_8+e$fWos;2?l$w8u~d3rx#4-}nQQ_Njb7NUWX>E;`oiUPC{yMk9rfb(>2< z2)l)R7@??#!mB~Hm6~~#DqW7HxpCKsoX9D{#50ZWy>ThY*?MuE*Kk-erqY7v2YTj{bSz1^Z zr^%cUE5R)}LgtHRag29SDQ-##ZJ3JnTXR6fv2FRjr*YG>9hl81Fb{rLD$;H+J+K(l7fqJVrX0tf`zJ~g1L&xo$w41gO$03?@OAU4}8uG5* zz-Fyg?gknF354)$txA2Hrucr66p>vDHq-nYe?XYJs|%HV+zQ`mkT6NwS51@l#}G%v zoOC=QC;G0THMv6s6xiLx*ku9*l8!n*l{wBe4IJm@C4b1#peX;5Pj7H#Dh8rer>hy! zEO`gd+g~a09r~vsrhQR;&Qg>$bhCP0yKWiiu_D<%f72oYiZVTVU~_?*>HT&9nxt-d zX_FV}5la{L%VQ69&J@XA6t*zUao}f$Y0w?%80I<+YeWB z)JK60o8w#dLS8YW{=VP6oXPQa&5iKP>_w+0mg>g%PICn1wp*&5N68jmONQ=WWQiMD z57~vb!3YV@orh9bqa72du$uym=n6f{Nkn}IIK4(5oflK?coSos6iG_2JDKQ5lkxl<-eSdXH?jXP6!GcxQzh zBX|9W(A?kzG7~RZmM9jR_B|VlfGU;>+rsc`r7iYc3ma+kkSwesD7)1ATW7{V00mi) z=%Bk0$2D_S;jxQ0OoDD(+%ORW#7!{XC~*X;;;RQ=&FsET)+x0&^c-$nQ|l}&mWR?* zMfJG$DqV=IYiOE>aN&Ke$Hj$*D6=k8JRE+r#19zlhGB!;K>8@*OSp>+K|cIq*Q}#q z4h9BrGWIx>qN4S$PU=w)C)T0t3nbQ1V*`5!HNAu%Lg{f3ryy$;&zh@aZ+PvJ`$@VY z$qOwY$z0fZpL`cTXBcU;#88X=w#*6OdvEb}0M&QKJkPwg#rIdC43O@h-_;b|aaNJK z-TSj>wk|gF)}haFNc=8+>(VX6KjE9=JZ1qU_V)# zfY9I|_>)0JNl6*skm)Th&be;k3P!8OPnB4WS4x}EV6S4h;5CXI*9o2a>s(M8XrdqP zeJ108iE&H3omN>aoDzt_Z<^TMlHKS*xI7v=tTWiDH)`*eJnkbWi$R4%NRzWmwi`U@ zdv{Q8AQub%LX#)0?_v^`k^3!xh zmPiIE`@Nd>n%vip<|pNmLze?O-2)ngjl>pxl`t4Xx3BeBTd1Y{2RWKz^h2vf%UADJ zJQFA>f#lx;tj^8MU$0}j?6(ZjWxwvsGNXXQ(3!Z0pV?rW_bixl%16!MLG45k8bC0< z6?!lf5$o_>^@@v~soZauAIVGjJL!u&zPoVRVH_4ZcGKDmQj}*_|Cz zrw11~w%rMK4px#Z8r~|yHJ{=q(-+yJCrdJ}e&X-)d33HL6NA_~C*CfW89yD)^T+Gz zu?tZW>TA8EA3;U zRi*(YNH2G905DF5y^AUmZnAFqJG^~_@b#9hLEy(q&&S-KUHK%ZOTZ753tWKyckj`C zs7GeFV{IOvmWkJI_G6?Y0TzOf+5PEkxCv$xS@!+2yD8OtWav%A58bZdzt##rv0W+l-dfly1877p)sviY18S4;e8c*D@DKh zuE4Oo4;4CAX3ZYvQL=gks$b2>67Y7*K$$ zO=tGBA&%jt*BuZxUWY(~0sMj|d)0MPbvHurK6?`Uk0Dlmh$H%VjKfSyx+8jHg5YTt zSKp7@63jElB51_{S8l>;G0mTK)pOX}V-vi1_$UuGUTOUHSbUw0Sh*&LV=sl#ov5BRKxIqWXmeUjv+gL*rihGAQt?0Yn zy}N1o)WmN<^^Wg+vBuSCn%jl01Py!znFyQ%oR_|NfgQElqPj@~x1)O2|S(hZkc} z_Lx#08YSt}Tao*rh)=3rkL!=s%@t0*_|J{)lD=% zKoJX8HV5%-b|5EUB_NBj#}Xux>kkn@%0YzimFfr6vsapq+tFPnxIQnqb9&I0uzv_9 zi!UR)dsZ)LWvnbKAB9ewds@(AF?V?b>WGrJOf>y0Os$te*mF&O{Z652r2R1qXXav{ z5B($C7+W&B=^90;e~@E2b6z@=P?3VIr;CHbO28cbI6)Vu@kZMRlpW_h92%Nsb=s9L z44m}6^^%AvUH*RntDs6+LpJzv3Gz6HCnC2Y-%wcx3h2!40sM=?@9BaP@KW6hV3#_C zUu*WU67}ZDxr;{>e5B{psHcj}SNV~*a%o-7v&ypk0$oB=r8`dk?=6dW>$@E$_g}i} zfqZ9++s^Mb4J}c7{uct8*wx4P(&Z^ggLoTU%_5Z2#n3?jA~!yw*Ka*2K^D4$#Wtg^ z+*OuXR=WO`6!1TlgFN<1Q6;uzDBwzMBU{_(US{l}YpF;Xzgb$s@j?+g!Bg-ZG$uEb z#LdLKpMOkPv1hVhg82|Jm#&c{U_PEQ58yol)OxXzF-uO1?peZ?DxS?y8CmSohb@_YRz0k)EOi2ppE(7OkcyqpXnS+l=Pi;4Y?F zcqD7xf7+eHdcbJi@AAg>a&Ur`CffT0xH}D$#NgLA3cA+OaEirKRDGF01#%EKD%;J{ z6vam)$jiogD+-iYeiJ_I7C%uk&JOaj)rsH%DhRd~GB4{E5aN9Ffh5-YYOa3<>{#7TwO(8uq8Sx{5Xbv`&?NiZq-aTu4)X`lFNh;D z<>>BjJA{p+JW}=!{Xsa_yY~ClZ^Ky&v-%I^1F+(feLSzq`TZfT&&peQKTZU+_J<;O z@YPt#CLDMmI;~a&US8(5ukxC_*Pu`G8GvI;P@=@NKQi|Pqv}9p@^T)tjUo8Rb<)>!wfzb=)?U>k zLYG(qPniCI&um>eKQ+GiP3I2)*H!0c1u<`*!4cUjyf1l7o5q`Pq+gSbN(Uh9}_%kQ?a+t5yVQyP{9peu`7bp!7rbM?F zewf1<_Pf3vq^?C2Z=P!wWRVUhZ)i#&i)|*+ZaC7~%gbvao{Dt)+JTg!LucaR(O|e| z9W#Kli8jsjk+ru>vfPZ_2>6Q)kJ9XVn8>3ly^}fx`~rp3X%CJXXT2Flh;*zNQh+eI z!$P7hKDv0+ zJj7e26f0JB6srM?f6cbUcCy2S=D21#0bV;zCcDtw8uc0O4>M|6-<>55#?A zutLg;{s~IoK~k!nIcewd6NSc{QWOQm^uUpsJmrk%oG;5I~ z~3QAFQUZVB;hVG%PIGLw{})L>+>_s`Nf1*z@~CdtIlc2 z?08{}OM1^IlYg`r^t;>1N8@_VOzK82Hjj4DnmgQ|pDeOpo@}}vs1`dck|~G~-}JX^NLBDO_!F{TYoSLI(Dg`QeoTf5?o#GNQ!5r$ztI1~ znKd_j;>2&Z+iI5evf7f7Xs1GS?)JSF$O*Lf-w*jpvNmf7%rCj$BktZ{H}MMI$Jxeu zh#Mk=?pCy$2|y*Y=PH0F*&(mHnlxGoEBO-v65k!dl2{dwmX{bOW7E0KCY^h2tq8Vbv77_iqdn~;X}vFl}b5(L188 z+456WJG$?Knj;-N^5{Fd!qii2UE*^=gY%gfd+dAcaVdJ{X$u!$cNiiX=Lqf!?AYr$ zQ}em@8}b=!#$CInyUk%sW_9H(S~1W>O&=tT9%D7q7qU0ZWVVv-#2>6ui|^s^WM1X> z9kOIC1$wGLzfBYSem5VPm;{m0Tp~=;Wsgf{?XRW|5rVQHo}~Ryx(Oa)8N6EZ;U%i1 zGSiZ!4W5Wkwkw-HXlwT*9O&9Uy7}q`({@Dl@i6lpYoTvymz4ApCF_MgDDXa|Q2A>N zvBcOrnkCb0>NVyT1b%p4)X4C5E#N`U79}TqYn1h1Ft66$43suoF$RT8&#vR0oK3x`7h)=aVEZ4#6p1zpgI)|Dd z>sFsA-8h!?@1EF;Tv09crWC>GdWY?TRpzkGR6OLRS=(6ioKFrHc;2-rf(qW*%XoLX zQ9~-*NoPXs)qCsIKvJ$<)AKO~)&Hm8jA^@S!9z*5D1qe?NC5D@u7*M>DK#vQE)7o! z!PwnC#rxy(3vrt+{Fq*btdo5(o)3}j~ia4hrP z2Q$v1D(j9(uJFrLqfwCaX4!8ziPK{>>VY+}s(K3EVdrB}65~-`lIBY{*(DcgGqj*g z2jATqEmiIM-bj+vw9ahFQA}}!ri$Irb1%Vv6 zSQ^~t>b6DJBJH{{6rTk-@1?WB%=is9*-Dw0qOKL76eHZ5Rqs7E@w_Kx7P&bZI5Ct- z$z=uTvQT2ra%dkS(pYCP*->kycZfk_RV0>;k=(c^719>;If9O9p%os5hYKrhv(!~5 z*D-<_CZc+Y`}ZKFbiw(A!0_tbdxg~qxnTp{x@^vp#mJ<>=17IByDQ9FPi}0Xw+TvD zM)08V(e$Q7)d_}oumhaRN`=Dru=e&fv7y*1>j%uY4Alri?|icSK)ofp9opiCZ`r(f z-Jj#Z#s}FUkRWFCmtVi}iCp#d7jAh1(1olB7eowesFqzWoOte)ygFiuS^ZBJ zg>X-t#J6I5=wDpM33fQ*4r};bWR~rjR@SZGSsTEp#2R=r{rY4#uisu(nA4n2kc7 zG1I*39oY9#sZ_Qhk+EayOdCs00u7XjfrI^LW1P-&w;fl4}O5ODgN-Jv?s-(9$w%B=} zC2b6wnd8|_12Kbzlzr&ihnm#ec|~MF#AnAC`x>`Xy^?T|<-LkwlDq!LZ&nvvYUS4Z z8XT|Wr9}ra_b~p6bw^cb{~-cGMFc4ss+J#pdO^dTjlN@YZfZ6ga)wu>4G-Hu3TB~5 zm~HEgt^@{|@Jqyw?N=9JZ%j1Tn8cqf zJWJw3n=-8(n<5h$JdJoB7;+wzOPpVsRvK-63;JQ22KA!*(-D4Lk5;!alrKihK@L-@ znGwpUzkHjwA;2Ph045b&+*KtPC>QhDshC8WxobXsvp5e`3Xh^pQMZK+f5Dggi5Mi7 z0AmwU&CzDf#U3Bbxv}CfhUop}lG4b83g;VN*+ z+C>kX5Wa(%f4LKkI-<9|o_xfiD#dAuK#9`+(wyxt<9PCxEp5Ho;5s*}|2Tl!@ti?7c1>H}h8s?T2JV&ap>2oB{K6iwQCKD6+X4pg zXc)%b`(qn_+Sg2wG`f5~Wze%{t>u^bVxSTu-A$2WN>6IG2+43)(*r_|Tpenzg(hBk=vyR;T7v`+#FDj`i|?h+w_o!T}D|u`%JBoH-pGGiS5%ae>=bEu$r`=v$ZG}sN&@XBw zZOc)!OxF7ckuZV4SyPkrtJcV_BrI{XQEdz4*66KpNE?*ldy0#lfR1zd)TP{)p%j5z z8;1k6Rd18-_cSyosX9v%@JT;PbEG7P49kwflT2%{-?d2cY(NTQ@u?)p9Q4LI(st-K z8(glNA$;fX&32v|wv}KPPQw6YRGzh@BdLpu>UTOmqcBM_#o~3^NNhBJO5{9Gtj8G; z+g%rzpPQ-0bvF5QAtiFBgtZxAxE9+LmAM3t^?SsRCAI$fB3Snh0IZ$2>S&vOhckWz zN|Glb&wkZS*+UR9k?mQ@6|xZ>L$h@>u}>_IA(^rQ;X$butVbj+PAT3WVEV*TMoN@9 z#&Nj%QBB%cVK%lqZEIUlWrxdX-Qxrwdg7(IQz0wzzeDd@&D=?O4Yyz=9rNC-Fbk(; zMo44)>o$={X0sY35JA@nALiIe-Mt}9N$IHb75*z(6x zdsRhrCAN*L?K0lfL8#cqWLVoSr?B;_xBBg^(KtULj0N;lSGJ9bzHN++LQ8XOJh$B7 z0#>uw=SX=_oQK8*MY@Br_SF@+Aw>WbPys~%6i@+002ELGRd20D#7q^oF;X`QY1j?} zP}9wnW;rJFRGvsZE6*?Qp|iPc+%$k5LXMu*bG?kCB$?Ofo+d$J%ciR!VapL(R~DBS zQLW2L&&Mn6N);MbDsZ~GIO!ucy0Xia8P8tT(D-uUFIstG0x7e#T=X>CVy3jQ)!11i zf=I7#5w|bhTnglTQ$C}i>9gM1T_anA7D;l>642riK!Di}7sHC}t zW7x8d$Gv9a#_Cxax3dOKsxyxDTGr#s1$ZOe)pR0G?6Jg%N_?mDsANp9azHejG)qf` zn2&1iIe$+|mOuthIHBAxpsO+MPv3AyOjOIrIf)|E?dO#hfKi@FHQhYA zW}l(JAS!0Y9d~EzT2sGMIYl&b`mU=IUV(08*jH#!O-tdu9j~vPNF7y1;>B~tU&Qoc zwU(ztsY5QBVVN!bwT}!OkG+b@@eSkZ5=PPx%uhReQd<>wb0X^EH{WW?ccIF$tfy>B z!B2G==mr}>59-o9?{c14rnKLVcMI7x3kE| z*@}-#x)JLT00<|7am5QqamwhmsU7;Hk+3_Ji5c{!NhC6|jfHlc8g5q_-%yqYicArO zJdD)^nGu-+k^$-}3VJd(QsJ9xZR<=jp^PEqgGw(_C2^sO##DAW6P%r@7A%%PNxxc8>C+?LLZOw_HTd&_Cq zD#*Vlr%L8wDH_~GFy|zx9+hofXiRT=lqO<${_g;8@VKAu2Cgs2q>g5rbydIxuF5W>+aUK z*_9QdZkRvLynn_v5=E#3ZllVO{J?f5v~J`^Hzx3<*Ohwqj1&Md!S7zFr}@!o@;hL} zs7YdLHDv5txy5+Atdj?}3aZf(bI0N;=YpY2yBL-3Jf)0h2r@~kmYRfhx!xv$6{VEd z6V19t0HI@ydsJGsmv4WgNfO9~oj3)7=BYN(GHYghv*MjLeKS{h%?ASFR?4?=qi)0dl8JL=+d6YRK`%92#` z6k%9%nxG-Lk=-^w%g4*pFo2Fo8Sl+W zJf2`(x#O?3CdJakwrHM9VEn_A#XoSsVaUf6wH4ALk-;4s@HF!_QDJx58vp}O(3|V2 zuVbV%*U+qSw2TKN4u-v-!=4+C!$+RuQFZerL$n?ZZ%#c>uV!Q1-B{|Ekm=WcU^2($ zs8OAyR}Gr(w6Dud3Tc{hbuC zE*(Gs`qp$rq7KHc!rNj=Bn-J7dx}K)U5savF@sCcYgcjlu71UBB0nHwVI69&T^%MX zwYr0vYfzQmh5O5-n)O(=9H=?RT64tLHxRT#49o$f!4c{gQvIXLARjE_IqE8`PK_($ z1GyA1yKH{)P7461jw-p0Vhtm71EH+a*Fv1S5f?11!FmkwRaws5j`epLqocByXrxsj zj-+*}(`}08MeUkPdy=H34N0P0I5`~CX4sPn4hd7!)~j$<+*uh}ixP3$J*pEnSYRGF zrn?E~hRDO5b57Fa2I0XZ0<>ST5^baI+AE|2iU25}0+7%JS#FdtP{WgeYCG7))uf9e zoT$iQR2wpPGLV?z# zwYrYv6A=YRLOa%OHq^VKNhL`C0M;F=>Uvip;(rqTor+oh@DA!}#dj2)wlKBLV%^}k zlK%h+41fSZUYNoW*e(6Srnh8%1q+W5+sfjDftFC6pYf9D-?c zb4tRDn$?!|e~ec5Q;4-ocJh?&M2wMx?_6G?+s zb=YvgiqZ1DiC0>p2|{_TkOJeTD;ey(+sAOqu%192YAk8Z)t0TIjuC{&ZloHLZKyC< zf_cYkK@vDJ-*^o6BCO^(hwpk+Noq+1*Bh}67z)ReOa7^XwtTf1$f0&Kmg8i)M_rL{ z0qcsPGnJS!f><^(d8U^x<;CAas_>VLZnRs^Iy-RkAC$C%BE3r2#Sm&y#d)Y*#*s$5 zjC=dnT{)(#jHP?n=CxgZ#XMfRg{{nDJZFQzHIL%I7e}nzNg0sr1LR=5Q72_)%^}$> z&U8A&o?;#C?kXR&F>TGy*R^uAn<=GxvRLK?!b!kk#wueNLU|ODu};>xT2xgemc}{b zsHWT}nQi{CgN{2?x2RvCr)4+WJU=Gy^^h=JR%yT|2C3>M4#~5oThgIPnPl|`r?oW6 zv1aj{*&}6lA?Q2PBOhysg>RV$dZ_4I+Q_%B1s2vaj1AH4I2h)s=+Zd7LL8mE<25(d zz~!J^NM({oKPfGonyTT!+`l){saXqK5|%aqCHNS>#er7|%6HXiKpBX-QzY2hyE595Wt!Q@x2# zu?&(i0I&sp0jH?Sg1tM^yD6X&`WsD(K1#`guwb5zwt;L*e-xwp_w4TI4SmgElfu-I$$DFy`a5`3Oy0bm) zx0ixhaDD4bCmXXZd8~~Vm`P)ECIEfdz^$JR1dhYaY=#*GR&v_LiR*Jl?IOIhaVrrC z9YuNEx-pMYWZLF8J5Z6uOnVpRa9%gkFCn{oNTq9lgK+@xwdZdmNc)+KY;H5!vZ*$f zgMv-AZ)uQRU&P;Jx+ti5W7yY2qg>xWCWc6!?m)QS4hi}S&Jyl9Byrw1g|GDldpl;1 zV5B@)=j&Xhp_bhF?GX{F!6b3`Rm#_}v})x$+k~EGU4t3OYOd;;h{-iEb=M;RTPrE6$fd+J&`PMAqDcPZ#GS=6)G zud;MDDdj*Wbp~V@3!V)*^;>v>hwSR1xnr7fN+c;hh7PB3XE;M{hjSmBJ*ze`1eXe! z0C(fHIoqHo)t7EQ$P|=OxO1AK_ZHKV88ATL*FD%p>tePDC(GmxL8|gd#D4LMdsDsl z2cseq;gl+Y>T%MRdEa2pGJSn1=tHx2BDP{AT(0E@HLfkg$>xj*&p5?9+^bxg&O1Ou zPFRfOk6P$-jXOw~Gf8aZNZV8wI2Ei@T}I@R)Xvr|trFr0;xO zijB_bg7w?do`#Cs8afPR?e5SL02_$)swgtY833O2HWq2>EZ;71$)&Vq7a4E6k4g}l z)VpsQ&XSyi8uG)vRkZ>Oi5ojmu2j{lUgLIaLfenDX!~F0^56N@eLP1M#^f0xPZbYF zD6WGZ)<#(zFf4zDt|gnge&_(9a8G*8)HQIv#W|z^ljlySf@!O6 z5!{72OrDh>m<|Gr3a0x4mb#63Ks;dmDHcX|M&ocf6kLX{x%agd)B!~R6i@+8UhWoi-aYKXI8&YOa4U4V(VoolkBA=@ZZEH8w$UPu;`^;T zbSK)K@VmzG%XR&qt&nCXFv-{tO1jaEER)pAjY&CkOJmq{>7l!ZNdW>9_`vV)T^^WV zkjT-n*f3iiD-M@8>T487k8S}^N~wD_swsv^Qa4~ioN_94WgboOF3qfT*~X6EW6VE! zE`Dn9E11o_ppxS#54H)SufmfugGx@t-w4fb0?#$mxJ}qZCmf$z^h+&BXje&i(6ozk zq9}>%$Dyux!&79EcSgEsKk$)j(=D19t|Nozaz0(h*0_&|9t6}hdmDQTso`5`ro>a@ z0JaIits@S06LyQ{c0988PFp2-$pS<;VozVCV@bL|SwSG20a?#SsOhE3nkTo>?-@e} zRR@x-)Kz(O>&1|rnFG?6jg>gulG{!W>*r176YbKppFp@%`@5Lr9YG6<$=%4Lv?pyP zgb@T}ifsJMPIFgnw7C4mYm1a&-=1m8ZLV07lvbvd?VKV6`!s-{?Vhz&9IQnE=e0ss z(T0~Q-c7w39aVV9Em*eD$s=w_m2i92#aI=$G<-p3!%MPvpUjn;4o9VRUk+~Vn?s#$ zoTTXI2+e|4wd9vl?5&|=Rn)C6E<;*K%eR8Kz%`e4xMg73-O$!^m9#Up^&o}@Af7UM zd(?5qwp_})Tc88drLnis5|s=J_CKX(7}hp@{otKlIhPw|9YPLF&W0F_B%91E-oSnn+scm5M zS+c+?_4TCPkSB8PndEP{jxgMzCnv3Bp%NxB&uWD3h-%ESroI;wNcwaZRU!0b2&m6u6-z# z>?0~8&*#NPy$jK;Oq-@zWGtf{h^Vd=Kms$nHBnbN-mc@~F^D{{xF@R<>E5)D zW;bqy%`PD{ueT!$)~np3KpS!Be>zdJb_TkllFR$AT=uBLat=?@t?0-eWKG5iZjXQ?cQ zFdecERCYQRxdyRrL^*|{7;sNRS`tBL^35tncJyZEmZc}9&oA+>h9uQ>DKE5LOd{hA zZJrO(yobixX0bKMy1dfliptpWwEgUNs+Yd3%;RV)El7MkH2q>Z1fRRQJSy}63g~t1 zTu)&H7K)-fDHcI1Hg_`i0=eT0y?PqE^4WDgci_gLHBS#udni$LG`Wxg(;X|a*7SP~ zZpE!NJ9M4~?8Bk;9)`49Y$-)G%Jn{K_^I%VQ`04FLrR&htXCt+KYR-E6t%oYK3qg? zI3SO^ipsQ-)sBTeMQfI=-sgK8kV|Kd)o0H!M$FBc!cy#N%BJQyitdl)&PlENZD|%H zg&>JzQH-8VG}2m`&iw~nNo)XU(d1_2p2D+O!@QMH3F(@K(|1C@kpQnk@)NqeZ9 z#Tr!c*;~jXF)V!J@T=bobVIL8aTL(5_=#f7agZxmrc!BaTJbbiHjdG0*78RTb$XZrL4vmxPo|QVw=0wkroE~Zrlj<@>EgvL~{ zjmv*ZPUBCx9rVFL1QN%A?NuU+&cM$-Ni}vU+UBO5v0Oir=&_XKkq*%WrFZpi7OPV&@Zpb4~es6=fEFKT?Z zJe+r^T5NVyf|9YNZ*Z*|5%Rxv_o(1~m!vZ1fAJbOJf}4YSe4`(nH9eg+N;eY0f0$v z)FcW+;hS*J;A+C)u6++mrE-;+o==-D;3VYg=hW~Zjo^Sxmmp7xIWzV>sB=x ze2b}9kV(p&qz0l(m0gWNy-HY@&n&?0VMP9NE>Vgh9FS^v(9X`xx1h8_^c0gWRH<5| z)}?Qb$0bquT3nW6PUydDwkyPPMh^f};7=xNzy<~g6kKT}tYS@XAYv9gr>LZ0NWokj zQ%x{KBaN0|`;HG^dbJ{9cPQu3R5pSuQLwCT518zxnaIRoifnx3h* z3kg#p;~-M4Rn3{uq06z7U5PI2S%$Ecd6<|9MQ4VTEi>bt1Eu+ z07DA&Z-#z4e-6zprm*jE6!-}v{{YKBZ>3x+C!xhwpR<+w9VN!0sM~mk3!!|AXDfr{ z!g2DG-o0Ai#p!iyE$zZH0k<8EHtz0dp=EUUJj2J*>biB@cacmZE65S_{A#pc6klG` zUrp5Q;dvNs+`Mz|M>^_CjFLR^IhNB@o;hN|mLzRB;;c+y2O|GvW`1yG9%;Bg-wzMH>LVz)VdR5C?qEXV_LjW>K>L@AgV#TbiA>Q-2L&w&vLwRp2BFc)Y zPB&(U9W)_bXk3_E`AOxz18@j6T4-4jNF0BA)`)4iUfPq{3z*TGNj^c)dQ`E<_V;n! z+NmxNIOdvmcQmprU+S~!c6SlaG8p=*w^3Gp8(QDoc)lntBna&j5CagW1HEa_cVrQ# z?w$VtiL^WYR?=9W);2JV?zbHca+X>R^V&L2k-G-qlgJe^eJoN+$=w|N)Nw;IAWjGK zsuIY{kbr?%S)yem(Oy~0LQ!0m>&-IVpo`{YV0~(v5?9z;=+VSwNyClDHC`EFw>T$p zKAkAPa+hF0?=wn^f;*bNE@FVI%RUQrSkGE%np3BJSv`f+SJS$zPIiyIAG{gG*F5)#Sft{9(s-c+MbHj$iaRH-cw zExf#)E{l_$+~9N+l1|sbTO~GdR30md>U314$gWSJ{_9zRlhgxSnyVxloUyh&c&6Ug zIhEV7RLZeDZgN!eD`xRyihJ%s4G3U;@kcG#*7iBIx!iC!1sz6d)ktW4V|?5swPMcds3>V7E>cu$#W{ z>(-o|(41O#xx1_g5#U%eA#w9LJk{MROjecNY@N6vbJnq)*2SlFsjFwGEsf*J42C9% z?u}FUO)rUWul!XVq?bXSP~a;yTq-!|XC=<8dLM-J%^OD3P1db>1lKY0z~C_UrZToOWw%MCbv3;(_ojw!bOFxBaUcGHITPr~E~^(CyIPr6n4~>_%YHTl|~87u#rJ*YgLEM}xsWkazj7cHiz+=rhvu7m)%9j(5 zB(y}aCxhupX71#n$tM6B&9~6v=J&46NUaQASwZWHl3P+^^P_O;y}QtxdW7vcXj{|m zZ?z@~W2fBQ9DmC+;8$g${3r2NsRK0dTj}b0dB-h}Tvp1R)ym~bUT0~cd?3*59x>uQ zS?{L=VkIIq`eAuB-^mAsJR52yHoAR+0hMiv82%@k)-+eCjY^T-XpbN9m&J`|QNEH7 z4>-26Q-LPjm-<%|e)k%ith$`iO&}RNnB(%Uk7%H|QO>U^U!k3Us9M0DRk|URaBZDy?qiKZU!B$C&7=3&gQ#WQy)4jDn$t>{j24 z*e0g3Du1m-A-#C2ZCLZ0ac<^ytb*p&c!?%dF>cjm zy4;{DoMcwo+`|fph9BkO{U}ShSJvpry1A9)IbuarEE}rfznwU%XhfaQ&>AbyG73UK z87BZx2bp|E_^YS*aT?Q2+jprGjiCIg?rY}n6ZnTw*Yy^=)ovbFCm{=E5PAV#gdnI> z=6kcxsa4gf%C<)`*R;uz_H?OS?omh+AB z4UuDm(AOm8bE$i}mgbTO2bXLC!TE{rRqiZ4*%^`%k_RG`Q%dX<`J1_gGzAXF7$DVW zM+9Rz2O_mnRt34y*f!`86=3-Eu8YI4G#Z>2QmjTe+axf_toh93tt+FjxxBNz^E}2m zAdREau&sW@XLAyyAnrK98L4t@=q_t+Xljzc3?e9#BdH^$QivHx(Ci(X`!r!55|}kb)QhYl`@PqCL-zHLWrUz=d-) zuqTbA@ml*Q6q^(!89SLj6k@wi6KVF>BrVOTIVw3htlcZe8sCNGxwg|S?O02OEi(MT z`qPw>V(FoQJ&oSEJ;tGMiqpv3q-e*=NvVVfOWVJ1+Y<$1$5HQCUzxczpw^DaZmF(a zY64iVqeyM`5~!n+YE3`G`iy!ccaLShNn;F{IVin(A4(r8S``~DBxOS@m1HMiLP7O4 zW& zh4j#t85xn4%My6V?MVzV+c|yxK^*s|Bpoh@fr?pw)s)W!ib)`bJd~B2C!wP6psl8) zva>#u<(SR^Ay2I>m8i6Z9waS0u1-dHsgrFN6kc6A>hd5+^0D8hX|mWPc{cvIChEAsikCYfGGSnw!wG4ZARGu26IWuEQGJBR=uF zA9l08x(%eFO{8hJ8pf|6YkH!aJD=8IodOKY`-9 zp-nY*j8nF#?5(YB?Nep65kkI^pi%l!brVk$MzXX)h6^WO!nP#Hx$y0|vX(nHYkQZ+ z`cK|`=dMm`$i6daT6U9VYYc*G?Mh?2&$*Df9^ey!_M%N9YX|)lKv#NM-n&wDu z@DIz3)LLcJO{_*2<{`QEt4iAuP7YE#dz()wH@F2@XE^U!L=z{W&IN9@)sr~c@}Xpb z;2Du{Nx(RyL>^l)907u8aZFLv>U=xk-w|pMCB~O!G*Lb_$(^8&TI=mT3Tjuk9)7W` zssq+IkR1Lra<;5$xgd0Qp96d&8!VTRTwTgJ%#xe~>@&r6x-WsWEf-LV_QKT1bsB70 z3zByFa%*_W#yq#s$;$lzw zU>sn66%IEXWy_(6-v+gfE(cu;UQ!t3M>Kp7#8wsO!VehDboWN*PkGw_{XaUK_RFPj_evTiQh;FF`JMpU%Ah096|Pi+v`Wd2==rtn%bj8-jO8YsCT@oGOYg?Ho*L8+h%D`8k* z)TMoi_(|kdA1ND;O3j@V$?^;kIRck0h0u;UofLowCydm?J3>ym9Y$)M+7xel6s}%W zm9Rf{I&o3SamaN41#j z_pF<-E$pt4!p^zns(Gw*RBM-%!?}uEd3?K=+&TN9yVaXp30;)PyA$56yQ7Z9hLR{3 zY-Efcxu|suD~orDrw$^JWeM&nTE=(odmq5>0Kuur7PEaUS2jt?Lc=(3TKXjsQ9`1H zQP2U3?TTqxlgh7jI*MRJd2o-?uWKB*PWvNU$K!I546 z0FT^JWoeQqVThyG7=+G3efv z%WC#=!*tH>(y8diu~OGUxszsFN1U8;YR;8IJmRffZP}JcR%XLvHJ>%OneyO<>56S!HztZT zfD9kI+|ctYPmkgC?MbU_O@>MXxn=EBY>reT8(4G2Q@dITJ2UBszAQ?r-)zyPh_756 z)^@A$-%PcMlG@GWy6lADX1$oJ9^`*iKbIt5NAUWpm|Z4@%peC1a5%C#e~R zTXVK}${$1Ct1}Y$0~JxUmCLn@77)tw?tqM`=O(vg$jRG>Ba@D`&s%cSx*utlR&IcC zlUDE*1F<~xtU$`XxB@pPgPd_v_%a6l-OFUVH#w_{vbm)NW_m4*;O@7$IavY0Jp)#5 zpcdX=Bn-=sn32VA6q?Y>5Uk44Ok-A4mdMA=&MGn;k&rhBsO?p;mF$nAehYY|HO&Cn zN)<0GFpQvME7*$kYS34{p+x``Py<_VIT*)!sTQFVIZ0LFe@O;7rj^5D;2?~G2=x_< z;!g}|9wW7q9ahdMOQAt7FzP*%)xH^OejnCMx*n>w`Y8kVa=9+e>GY~+ z;~uYLsKhx$!&9W84WW2?MJxn zRs3J@-@>|9hYil1E#gRG-mDyuezbcSrOnW95r1)RXGh^*4O&=OL#kcgeWLV*idact zN$tmapHTQ;JY+VI&2<1$U7c|2?TY4fY_A*Caol-5>Q6MIj*3)NHns%%#GcYqGdOt(W#lO} zc4v8^F^BTmM=YEXO4oWD$@{iq>7E?C)n9%jx!N!?dHgG>)BFTs(q-0sK=WE@kV&>! zoE_wMKDAMU=TR``gcYRESMb-v?*!cVWZdZXk=;dbh2yw?nf-_-rD1q#J3ky;UHETZ z)1qj!Rc4lb z%&LgT)~ejtu!WiKkYsW*kx9D~R;EL$-mk-k{iWz>D|TGWDH_?H%Jh6fm;_Bg5~85LgOHU(}2nnn&<6^JTIs6P3mi*7%7Shwj^OKt8s0~Wy_ja{)HypVy9l#@>7ZJ|=e zT#1HBUH$u2_!d51LC;w#7qUpU@8rOLTH~&6gj<-C zwYlBg*QY1Sta;H*%b3Qz)fwMxO^|w%S@oHP;YMZ<7lh0UiW3#?60CB)k>)A>?-Q&6EO1B5soqq8cAqn ze#ENpCItC^OpcX_s$1;3EUIwBCytbdEmSa%<|D2vL8nb&;xgrQ(zDQ>!uoFz_`<_h*CDsG)2$Tw5xasz_F`*OT<~U( z;y)JJ>XP|y9^JT&ffC?%#b;KUdM%2Jgr1Dd@i)UAD(}S_Rm3H2ZB@Q_mw@DUt=(I| zx_+rBOKaKSw?VR4V|=UQpdzN$)Tl02@2$@ik4)EY^}FpeO}j>qOurinCny2yUbUup zj^-6>ZCWq1UMzT7Ex|rv?Vn2D+-}KOgr{b{;}2i3(seyP`a4SrFLj-{l3REABXjTS zE0@u}FKRv?)PBd}YdJ3%{vsOn#lRO1 z`dZmZ#oolO!eYseXu z)B%;pt!C(U8a}Dvn~N(ub1t;Rx049m<$43hKyh6Z=tet|>NO8{&PqQL^Ayky4fSIOLs4Xhm~; z&i?@D?tH$vs;@DaeCh{$6-ilY7v|L&<&`FoDBzk@X<9Zs z?WbpJl_6QY)mCr4OmLFI!HD4T#V4^g1z2K5W+1T?(K@mD4&mPvC)9c+Zlb!2mD*0+ zbUuce_6Lpk`Pt+1s!yvWl`r)biLwUbdau1=+)E|L-eZjByDBm$r7wAqpeo!0&1gj# z+0PZrEsmw8#G42n{`91j`kG5p*2J;M&xHw+JqHH5T{3v$iFd-m@!5E&tD*%Y^ksv4 z461lz?0Bs7iU*mQ%c!XLk&8)4ltUOK`G;xXR8vTR7>~`Krxeth8;fe_mNbqib|)v+ zqA*DLDyxp%(^9_VuQDkXNRK$rv8dW|3lL*9XdvW+f53) zmys(lA1~`zo*MC1qv0(M{_je)wriJhwkb&*cfhWQPCT}j#$1t%xud!2Uk|)NsQA{- z8FjxV&Ra&@>W2lJ{42fG+se@H+Q5dB%3&E(oVger{c9)Wv@LDSc~`=%GH(WHdac%` z#$8WQxY+=dZE57^r?L zk-vZ=Y2&y<=j8l}@Aa=GxbXGuwySpf>Q88@#LFzGaLw#`Rx{D+R98b5<|wXFj@Mgq z*p0|Pol9e6wvukVxoe~gh+~nm0X^$Dwx_1WEj31_y`r^;gl)A}llSsWRHtq^73{bF z0A_y$cynCTWERp}!mMLN`G_8$=e=zTHg{n4Pn5{F`jd;DHr+1mRYcD! zox>v|X(N$aHyVg(^0E&JZu<>oprM{!9THD=1 zyQ8-<0hT>0mGF%EFN9^c`(5FKQL~)EC};UtXBo$(YYKH9`w=Wn8g5A*@Y;o%*o(%w zg>6XP=9d9+^{*ZAkH-isby+mc2Tzjyh$^>AM#XPh&qVbHKF5S>n*ODz>eF4{-AQwF z#Qf4WM0xDKg0dk=3%s*7`5U?IT-9fN4%|Fkbz`TQVO`F{9+gRMqDS- zZS`gQpS1nRQ{_?1WD3vaj$Ml%Q&A&KDvq`sxg;v_ikXqJ2*IUeqhS=EK)tAaAz3{;B*g6UHv1{tKA zLVob^7nkNl?Z;773{s4dw1My1ixq7yHbrJ!5<#eAERz612oE?NX{3p_F@82ykmM1b zoK=@b7y~AoMrrprd>4F@N%g6si;k7NuFj5C(2_W|zE675iAezCio#mxQd$cj+6c!_ zN`>>sy*TVUXj`&vq~K$Bde+k}405rTETC~&OI8gn%irktuEkKMJNnaQwAr+)fB@$; z3A@)kf}M6<24?&*M#_NKIPIEvF=4#zx-Rtt4n>x7?1ZDJd`&hqIYnnc{8 z_ylLMJX1>Hduq)HT^$FO!IW{4O}cp_w|9m=Hb62E9A=MDI053n7k_MALcSOCEuzQW zlm`84JH#It?L0fG$78N&I<2!vqYvfpT%Orniq*mv_gN5fYV91Si|5n4O|EFoWjqn- z^GvhJ1ZR)|&RllQr`J<`fx9T-t z6W&3m3xX}DXkk=x3y^Sgjo&w9UoCDxzdO*dE8ZYQ{&L$ca3-zvq^82l?(S`N+V zYbpCZmCVls>y~!+^USw0S|!usRoZ^&1NK@dx5Yg>d6d_hC)aW zP&3rkd^)BnB|B(v&8I^yq_@|%a@^`9iFdq&o;~XAr4;nmq7-ij@@z%NON?pr@ zRBo(8tuC#1Z3VUVsdCy}18jEdCJ{%ts#kie$sgJ6`BB42M{2oExaw(5YT6)(Y*CS% z(n~(nAxJJd3gm3;ZFDI~8%*jLuHtylt!wGl=E^sGhm?*-_)&cca?-+FB=VM$LL-ch zgRN349^I?FzHm6=hVN?~6k1XDOs#iN`vQnzAk5>RYUktCE|G!X`3{w=X{jr+D^;`5 z-|+sZW@fjzW@mGiWBjXqZRM4KR6BdtbBjil>MLEBqql|^a~K(}4+~#7=pqvqn)v2Uk0tLM66_yxV`f&q`+}4yWfC6s>buzJyWRNX`%Nlk-wbXu-)`dje_fEp{0Ni@T8L zAFWQdj~V&M+v!fq+KW_JWz1nyfIHL^Z;ilVOL8Qh=N}YV`qb)&JpNUqeGa9fCi3tH z=~m%fMhN73R(9$%hPsyAIL$#SVMgkA=rVgiFgjq>gDxB@j12arC8;*h(6_ln1ZTZW zZqSV3kEKJ0Q#y+8-6LrN4i_2iO_37d4d8G%soSXv=!SFwln#R#&0UTNwg*6Y9<`jL z(P~9&$;zSI)DG33D|x|V1{%y2>G%%IRGY$d85wg@%ZLJS6wbO2YwD0dO zwCkv&WXV)R&$dSbx}AH+vS~gLhQmbE)*H09+a!~9SI0r`Q3=NFJ&jxxW6a*C5AcpH zH^cVntX;FuegiNCau}Yc>t6NXyWIk2mssa{ncN`&_8F;!9_2a4OO$Zw;KNdhV*-z9V1_Y zNc9(QHLh+`s<1h+FG3|PmrZ+bS!PA zghm;dMUx)4k-7Mop_Di17WveNk3( z^AWXu54CjH?P;es+Aymz;~C9m7`tj(T*oVUdoA>*c2Xh8QQn~v58(#_vy`rM#yqj} z31>I~c*k0N5KStETyxx-ixr~O(6-ZK3?`ZPd4D$1Qrz4|PUU6i_;Z6&kvH~|vMS2{ zVs0k~rqX$==3=+VH#b6YMfx4kjiF&0(j%4M4Nge zwu~8#bqEYXoxpS=sk~=*QV8Twk<}&K+0r!wAo6Y)2OIJMFc!xRC(PRwh5vwp1r=Q4a0sM{0E&jEFSNLyrFdXMgakcD^6+CaZKI zve5Mwml-ACWgnTP?5(RQ!AD6ml(diK0F1Y-IpW&cAcLMO8@rp@`k}-Sc{My)+mbO! zuw8)@=gV}dRiRKk(4(K??@;v;(?e3%?1y1RMkl!KM7CDaOvSebKAov+7jh)s^dXwY zHACe)0y`RoqiB_T`r@fc%SJ?`KYmnq_oSGzt|Q=@iv_Q#2bj*gUm59BTL(p9xSv5z zQP7uU$RsYL?$6Ss(bLVoc^Q6KhZ*&&M$}cE&Fdlamtnx^S7iCIo&{SwIuz$BZ@BB_ z;-i`|P^yR3GrQygT-fDod!CcOce|jFCL#QG7|zrjGReuG%Yg`C?Jk zy-jkuAH)eX>$!!@*0(k+<;EBdi&@QbE1AW)PWxE&%Wo9uch+&s4b`?KT&N5)R&=pp zIc8FhGxtp`&CNTAt=`f|z>QF;`A0bPZ zX&3w@;+;QB)Zp-X#b^RGc`ty0!Bh6at43<5@Q1vfjrNRM;Nyg~5? zTD;UQ?2r_+gcLqr13C5jR+Ktth&7R=-D;Nzu|zkdWbmM41dm#$Ei^%AE!i)M{9~iZ zrClbkp*8FYnBHK3<%g#^uL0Jz6MZz&+D2m2xDY_Yl@-TYq0qZY87iAsqYmb#ftTkb zat9vfv(!&xKK=~T2wmO1Azx0bG$VtLJM>ouY?Nu-e(v!2wfi7%M>;;m+Th7WXpf3FpX zw0fIUN*a$boM#+;YA@aA_l5S3pj2+ODb%@aLvJqMvcn=aG7F9kU$)Y|(yChILf(Y; zsJlo}cle2KET*@KVGb~QxI7xHEVeOrk!0z@iluuM6qC9d(C#MzK&p+W%=arN$+rY& zJt|`pwl$Jkkip@rdwus45j*bO0LBGaxw3~)j@Yy)p%|0KI2E#QbB1zKY<2C*#;TBj z*z3(tW`;->SpYy!T1jbf!K>Mli-nFsfB*-kbDCStLNWr)m0O=}i{&lP<->HpM zp0_t(_+#UX_=BA)3w}QAvoG{Dqhs(x#WFZ+o4XhWIZ(y0e=4}sjrF<4?DsE6`#$P( zTnTRcLkjwc;wH9jKWBXuznQ4&mzNFw(ZbfM(fC2nOCzJO_#@!kSb{yAvty?Btyq2( z_&OvCGMPq(?Pqa}s04QAv+jhEw#lPp=c(vw;?pJ0E!eeZ zapa%}k?UH}Oh^t_f;i1YqJmc%(xG$M`_);VMhsJx2a0RV$t5LW!YN%LJ8 z0AQSRO4nnKhJ56JyG}o)NegYkB%Q*kt01|hS(vd@WH-Mg`VvoIV)cx^8^9vHN9jfJ^+wwWac@(xAHZAR!Rkv$4 z!rY+U6P}0KxjTWfXNms$5(pl(v?ZazU0PZd!(ia!HGbA1ARc5(&q90EIoniXmoYWg zn;(yE{ignucXqvJQ6i12v6Gt&5b5%{(&* z;+jC94up-rO4+yZCy1>gNbGfKqaLmERYI-4EsXhjyp0==A9%`3C$#%|7~OW6InU)> zAK332d1t)6mP?oFz~Z!>SiNGbH3;)_JxvP>tBp1M%LfYG95*|v{CfVNCJv=n4Zp7$ z`c_`j>g=gT&gkoO&x-o~l-ppiw~-%)aM&iVN%6B=w|vj1qejCYD}qIAs#B7?2OTVq zLg&V^N+%Zf>?gQw&fb+Io;>j!`e&7QsY@T0!D8};K3_vo?UHsx^0xIVw}~$0wl-dT zl3D%YjqBXid9GDsKok<(;C8M$lICWLGFz3*o@$WfvBkVKMsnjjZx2M`i0?1@=U6*glI#ql}Y~ya@o~PQA zozS1X@Q#w<5Q5M0R7P}n`CBRLS-Xx&qIZ`A0lxuOEp5%>x&iY6$vjfnsK)B((~c&$ ziZy5LjCxbl64^!s4%F@_EpEu}9okMo>Chf3i%Bc63UH&ZH12B{^Js|#gCO!prA0N| zigpA99x+L7Z^*4?IK*QajF2(TO+c#P@a21BHA_WfhH1BSH0_#Ail8@2+3?1Xb+6t@ zV`+dQAj$J|&!t>fHi2i$%zKuB@O#1UXA|mkUEExi8`n4h_pYl;_-o)hDFL_9{PzR? zS_0;`jVn9c*XwhPc_Q>RZhSA`+Y4E4rSSctENWQph*uq@9Vb-PTKh=wouvAC0diGU zzav|6+`@R8i)X3m)_xSwrG`1B&}^ZVfF%rSO8Zu&ri-Roj9TgTv46V|6%8Qgl$F_W zV2OV0NIr@wvQGpf_mamL{{U%#rk7wSU3iB_wK%xdEYSKHmawmWCU`>7H<_+mGcQ$4 zvHn$}r8m$=F{pfW@Vq%&CA+(je|9~f{wBHW@7e_fZT2k&VtNLWRRXm3DST2oBZiwf z`Tjikibnm_g@jR`R%T)PRyFskRwW$IxA&z{;eDCbGM!_@g3P~4ztV_TZ&pb^@y;-8S zL{+nmSY@-vYHijxj8`Ju$+Xc~jt>T|TFAwB6Ow7T+?Uw9ZY3?dc0lc#l5DvGSc3uU z%|ePYl3St_w6*gYiN<-^=~GQKX@CxJF~@2exYWCpT0nSTTA3x-M&ZDrqF1`EG48T9 zudXQx%KFn<5zTg0x&6-8JnrWe8cJjZSL^hvYU<^tnJjS`=ZfAwyMZU#x~Z_Nse^247fRJ(8 zkT#yhsO6RtvPQ*SdJ$YcsckaqHw@FenHzDTJ1aCxf|Jyy$uDVKemSQ{HS9wRaL3S| z)kRPf*{{SBd-M(>GtuAB@y7KNaN$3Hj=W<;icg)oaCXHG-(Y=Ymsy9)- z2$ev`LJeanE1c4Wo~+2dHxU#oh65&~7tQ3UAo-c+jw<5NxjBZNQb^giAqq#zPkM$c zvoordBPThbwu@AB(4OMtK>WsqNybU2pqDc8eo`|<^d+_M^({ek8JTf_I(yPw10sBz zcLSbHLRt{jnMGU6k+KKOdWx|m=@q$l8`*n%RVnMKr!C!zHoEMOGTRFf3C|_D$K_gG zBOQqyJt&(^=uKGiy~e9;IUJt&rI?^>zXP=-!CkEhVv!^q=O^^4ml8U&kd1{rQEP`Q zv0UA=ppAh^3H#luznD@@+qX3W-hWZN(VlDPG& zA_ze3lhhMb*$Q6Gj+8?TOu!6#4r;V_2;(76JLGkxsvDE3sxq}7GAUJqFj6uz&{G4M zup1+e$EmFnR=Jd}otb{Z*j!)P+qAw~OyOP0#s{uz=x9pV`E_o{{XgGi2W-9>*DW?FB59t#RspI7x_H~18y@`;nSW#HlZjwl5tbM#L8AhyIUw@ zEM7?X<8E_8x*#D?6WE$8mg0=MkxTp2gU5a=kk;z8 zN#p5Q-%z@4#5{qWz~+#!C#GuKLu%R*q?yA8+k@9NwIs34YPfET`I?OmD)BQNl~|}^ zPTcY;yUG}hbnBX08AWy;BvpUjVV9>Pr4F%1-eJJ*Jt?~~<0iByJ1p~%N!mMhsn>2W zF~{px^i~F}5jNSf3CBvXcw&1}7bc8k*5*KEM;QYpaZ77&h4UtCC#4Qr3)(AK6(TaT zq5wd^J?b;_%&J@FZUssvI=je{L^iS&eprr!sHT?O20_ogQu8);PeC6ja56o`SazN( zXLpPk{moX51^G^X;$gV<$*9zm%_d}}b}I6Dt5E^cgpRstC38-~M2bShbI=1<=5-J9 zo?f(z%O# z?57*eB9QVB4>+lJ?G1*(1GQ7J*G8R|hHTdpK17aLbJG<(4y>Sz4`OJJ)-J6y^%i+N z!MArG%BrohGmPZt+}5y{A+0rKsjF$GdCXc>2^x-1b5~W-5n{Gbu@Aa&$)xKxtYuPC zld@xEB$6a-=dNm4W)Z~77XAIWT)iuzGwJS6~J;HxF zg|(YB=_4@q6r}7HcF=+K+fe@iD$2*$aZw$AmJ0#)$)W60L~?60oNbA5>7JDv>bI;9 z2&33h7Y?XaSJZ*8Zlpgnq;|lj%Pju@C=)kKQ*B>DG)~B4ZzJY*C+kfSmKb1hOK`pP z5I{4Xpm9%FPI={hJt%I&Z=tIRB}gq2?;;~>`6qFGu)x;7qR z_2(2frHS2WG%du3JNJDm%zMLOzEhl3N%kd0CMDxWi@6`?>CIUc(@AStND|08Q z4aAJ`l6wx_>VQ))03D#7O=++t(6QusNyBdU6&RIOhnh(l>*-BvsO()U-4hEk_%hT09K4(W)Z?*xY?9ZW~5+!nRMQI5l>*$D^{jBHN;}v6`fjGBTy{6^*kn-XwBAgPO>>@s?SZC>tYy zb57S342!=J>NhM;m?IzTj%zipW@j$)voY#TCas}zvsM%B4UQeL^`sXr0X}1&UTLKp zTEywlk{Q|95Kaed)k~|1M9f5tGwD*S-HVDEml6SkBa`cz)3MZUjl^R)PT&fe#ygWJ z#hYy#+{S|#e#WRxr{2PV5)VB^X4%6QqRh*S$)j@=pr+pEy=up4b}huBCz3W?<&Ofb z*%sBcDl8)+K_h2Bbkmx6k+9jv`!#LfVK>e=>M)VAHE>THinOjs86%}+)9O@{L*d6e zpK6{>K3kM^+En0orEBP5*HRKCaD0wPrHTH|>e5EWQ~X_pX#${=)OXrG({d5UC1Jts zQR*^1vOp>1I_WON{zef3>2FlR`{Qbua0W%cx%d-r+I2mO#72c=o`DxRe?dkT>8|a5;@=xr6$LA zI9rp>c&CU*<3ywb)(jEBsXUB~f%(*2Ic^CM1fHJMzDdqaG=!qis|W`*A%$=-C{Iwc zLM$UWBLbb|j1VcdEyqT1z*5crv3ba=YQ_zrq~jGVKpf|%UTHmrv7>1C1c?YZ^{b#e zkCC!{eJeLDOsCwZc@%-cBoo+FBO@cztvI`o-h_rA(UQ5x^QakBKvlqg)HVsER-RT= z+xgT!UgPuUZ){Ms)DzQDBN2(P2>^68a@tSy*ipJM!K;?KiAlDO*2$uYQ;dK+)RJmZ z+U1MHzMz_Lea}J3wPOzR#aey4^Dg3gZCcB?@z%w0ZEw8)010EoYs#LcP3gIfdE(7d z=yKvUC!!DQS$DS+%E!%>m}esMe4vSkqV=fS$yWNq9ES`5yHfI~1F>%Fe?b>g|T8_ECWx zYV1F~O~&SOcTF2FsI}FYc;CyDZy*l!tEJs}_A1u_gD)L9tmPXm4o4J<_i?j=^Fkin za!Be$Xjtmv=F@5;Y)_Q0YgUQWHTHKk) z&PKq&ClwU(oPY-z#WmcU+(6t^h(Y9Mif=;HZzPMlWGQ)a$i##}lY!Q{I4muuiIhX~ zgUQWApHy#BT$>tJ@j`$j1q!1X#b#bi8Qm0Q4*t}R6x-B-J+ec$c7LU3gYy)89CgQf zXr-$ri_8&~M;>4IaZubuBtjpN)MA{ZZAv$mg;5%XAQPI5MZ*om1MgDXx#&FxTj@}| z+wLYLW2P$QzlN>kK46%%VDd3qIcRWHt;;5nsWUB{F~w>7lpT2MS$C4OtficuDs6Xj z9o@!mP=v4`o(3yEc#E97vtxmpw9c$NTGfmY4CM3pRLKa&NU4*#(QAq!QHqsdQh3EA z$IETUtUw+B%{)h+@Tx^_hb%z<0QISSupi!(n27=o0X=EK06f&#s|d&m1a+qb$j9+h zxiVH_Y#mJmVEnYk)`5YFcFc7=deeF$5-JRq^%qnuCv>|zJRy;6ZJ785= zCd`1bC9}b+ASKR;@o-b?OJxaUA(fWW_%u_J!)k(k$T;hrqL|~p@DT!KIlDanbV?a z_Nj3nx#p6n?Xk@&jx2NOcEL$kln^_b$J#ezJm(c^cQl0gosB&v5H3L=oQ!AEnW?E4 z@&VHTQnlIB6jXB%TyvU-Ki%Zfc4qWC4K~;%m}1#xq7fggX4{-rDe@_b5xHr zX4RaMTrPgjL?nIV(wp{ccom)kRI$&NO+uG5GHTj0FIBm9e<>to2dz_ygn2KM#cHC9 zj)kZ%W0Y+|xHW8xbPllaWwJK2k!KZ$ZsU*r>&{Z9}A4jX7>6l5N0cfH?dqW4w+90?OHT z`p7a(OHHi;7jEXotbSx-Qwl*V51Zbtf-S&}bB6oe)@iX+yLu7aU5KUJkGzgHR%^=5 zBf9P6^0ihnf_EcV5pR9`07(@>-tAAW|a7<4RnzD zI`F!!MTQ5IHqp>$>qwR}o-xn+My1H;ok*heRxm=y%=_35R30-~x4NCpy~{*UBz=^6 zde)rRRy@TOIlB^>MZ`+$o}JB6lYC}(sbZ3cw^@D3_v z9P?83G(*4{>G)HC&om@8uH%CC6#bwMY2AsfM<^KJQi0A*Pg{U6=9B<)nl1|B0fWUn zat%JBVk(TBigp(r^GeNwmB#fQu|VfFO@h>^8NnF!>q{Wy;~A@aoK~=aocdFN!0Ev> z(jDwrf;N6gI2C3n;eoR6mOaSnS;}c_9K`cF0Jvg(Dko+D5lZ(*G`Ap{;hnaYz{em| zEgUQ`jCUVuadtve=srb<$tq!7V+Yo<9@Z6&vh1Yt2Vqss)d{3#$(23$si2xib%}E9 z-4?XbtFofHmuIz}0lCuz_6DmuobtG-PePkr2+EPi6zJj`vIpZs5_jC3#DRtzE9+U; ztMiSc>rFFSZ6W%24Y&|;D`w6_izJMfd2ih1YUpkWWEVL46JU%v50dS2rz=Sw`yQ zH|7<5&u-HIc-g@f2ljeiCT!#}k=0}ws}putDN6~rkgJ{Eha6OplelB1Dz2Db`ja{{ z2J-&(XEY@NR^<1keNAc2MH1Vf5rLnVrYmPmpJZ)r!ze~n8Z;(O`Ur-??s^bOyMV|e(xpIg$^0r?HfUTB4>d66p2$pi7{SLB@H5hc z#c|m7r6Y~rQRoo2n zYbfexYivU)k9HBb#}xy)0~yGx*ok*5Zc-S7jQZ3L;2saaCANxcGw$5BL;_7&VoXPeH;0>eEsRHiGCGD~$N)x~Hy*_GJf`_oK~ zl>ify+LIqOv_#B&yb^ftnx}b>l&R}T=%;3cv~!jV)Yag?bvP&1oRFr{97x9|qw7a8 zlhk-Ta4JhnC%Bg$ba5#>?>M7QrjU)zdwms_P|@7SAydc|kFBYW{{U>r%G*E(v8ao? zXG9uEpvfLXG3nZ)DGAQli!taIty*l#rSG6!X|ursPvuClF!{F*m0lNU+&q0pBCDF^ zMYg@-X1IA}-yzF% zFKm&Hl?^0t&YNE%wbj%N<|$P%pS(JXtW_k>lOQXe{2EEH_;y5dOkfzm-P=9tqqvhK zfJvsFqUKkys}Oym2?QQNr^zIdsC5J~kTNN@YSE<&x7yZBvgC7virGmbSe98BmII)v z+==a>N^A00F^#L9nC7E1Jc;r))$g83rE3{ON2y+WXL6)`{{T~0k|>ox5dbO6$hk|Q zPU_?{2;vK~+OwxmCS_>2Bd?_=wxPDfW_M>Lx@U}4h-MKsK|J*omWNFyq^v^fGRM@^ zXMw?^cd6ErO2jtv2(Q9+f6|`c*ezxQ7L~^v@K%xcsRu>{1$e=8z9sYRE2BEz=)#(_D~16w^5#tePlY z&H(0>p_n!TKVG7%nQY0rPg2YV>NAav&jcERcwHE?j=bWhL{5leyAnN%Ez@uY9yQz7b-i75q!F84BY@fT0tL}{{Scfi0ehn z)yt8Ph!vQz$9jTbyNT*?LMfuNI6SW-){+?tNC^WXf>o|dGl>8vo_bYV_1hd=bI(d> z>8BP$Z6?5YqA6TT9T81X;pz7R(?dKs1t$5T8}Ry=0+{`s!vT#qjb%^ z26tJ41M-f!tvjhwcQIV5$fwmu6_+jEg*#a1HJu?L#MUlkUZqLSK9vTCaxLX~B7@Gm z{v7rdqFM`@@zm;m-!`FWw%Uv^;!X}9EHhXdzJ+satt3$?g-_oD98}uIN_v>^K_s*J zam3Fd{uSo0>H2KfH{uER+X2+Dr@7JXBf4itsQ6_huqk12zF3BKde$|B_ZAlNK{RZV zmg;*7T-sR}C(Rdfw6_7DsXirT`OO_^`nnQIHt;aif2fyb_C8Qoh z3v@nc;1X(E)aG_iLZ0IZ0#zz%<-4l<+2r;#-l!XIV(67vU=hC**=H*oG@05v0aAq1 zDTx7c@twfch~ymPQ@zmnSzt^OGb0=*s?*&0s&+9Pew5I1Us93-yLWZ;rd&wOMtgLs zljbc(?1(N-d*-E$I321`<9N$L)C!{vKqsd)E38<_je2$!Ehg?aQdiu}cn!>(LJW@h z#cKyC07&?3V75C@(B|&d%7Rx{`A!M_X>T0)9Z4sxQn9MEtYyEaW6mlmrY^;gCatve zIxL&GfwR`6M!>0XMyU^01k|AVnmQ8n9E1W+Ij4sCxExTCOSvF^!>v4Y$?rzD6IVmJ zV}NJ`=BrB$A>f14r8jmP>Dr)%$Ag9K^rRFdS3p)780Mdvwyq|DGtDm|m4(zZySKF` zhfMp~bX&c{{1O9W$3Bz_uW5p2< zUS?6ByJEa$bld*`w?zZEZdnjxZCFiGDWr&AAQQJLanstSR!kIAT-``@JIOSqYs+;E z@_d9IfK~*$yw}VAkcwZOt~(04dg^UToz=<~?HEjONfkMqYzhYh^{QpKHj9>X#}t1t zJJ|3APjNrl;W#JEZb7WtzQz)To}?DnFCsUewTS3(PG(Z4aQS_!NUmMVRzk%jZ88;q zoOWSacb~h`URe2d;1Nn)!{U0Bb>c8@u9$no^6FA#vKByO~AZ z`=xt}bBv9kw{uixwR?6AkmKBOR;`s>qS7|&Rm=zm19r>)(EwN8jK`dfZoCP&p z!m4mzkELjpiQ8gC5yYgXOA*aic|-DgQGH5Dy~Z@S9A_Ss!SfPvR@&UOtcNUPJkfqO zz^5drtlPUcp&q4MGxGp{IaI1FyUNXvgF`%!SaQZWTvr(h^HUT5?I*nQ<`Sik~MQm2Dk% z(?Z3(-ciU<$I#X2t`_8kmNA3rQq}cGJxX`fP?o`)YREer8hb$ygK&_5M?+Hip5{wL zRJHR3+#exjEz4t!R`#G~iq=L#Hm^@=xh2qTrp%XPJOIjm@CPQWI|*aQ;fjkkX*k(k z6{YzXXkVBLgO=-7i09O;Dlw5r832xIb1IDO#^L(ZHDjmRD8}M>>{I|Sderbr&%jU* zN^Z#JbLY^v3`Bk4MNG+<_6`B1)X8pSU0lfwtL27Kj2f93;QNlXqp{yjEyOL(GffZk zan_+dOK`d$G=ZWafX7PB83vn1a9p|yGEGVV{Ayb^ACgBr)QiB)3FuQCrlkbcI}q6Y z**Nb?Gny2viX5jcz|B9C#}xM^js%Kaob=5gPeH?vU!@>El!k|A7|lHN>BUmiLq>Cs z)Dy=enp*=DXQ`&YOw&Uu5_s=W9G1a2t9C~mwPlNG5-9_14OWh!BQU~%D>>7gBEgg|cJnp4^>$r^b#Xh9eT9KE+SFV!qbwd8o5xT-wrOR=$O#o-|>|8P01<#C8(REOJCcDvTBNscEC8 zocUI#F?zDwxLFjTHChQ?83Tu5&p175)~F|GYKo{xC1S7Lf#S6-Qt~O3tg7(ifYh3>OKnXVo#u#(afj)Sf~i4l_YUiO z33O49n0Ku2VpO?NOIFdNUUcLEhg21f_G^&XXk25j6{KZ-+0#aJG*?khtZ$(`x1St@xX$jiERvGPD4}}~T2fbfGdVRRNoyt@NK6uO^sDmD zk8aU0+(!pJDLEq;t2>#q0)vlEl^d4Xf!EYi=yka#605NTo_*>+GX{g5D}Zpvlf^|M zVnS0a4KX{*LdCtSwpu_?8owGv0_9Y*W0GoCriv=pL)vnA3rHvZ=F^UxlS^YMD?1=* z?bUZo0Y3cIA2)VL?^AZptTY zl`RJ2qajXuikuQh7|jf5dbTOqB>GcJK{QOKDkyB^cBRxF!@2EF&U$b?>7k3CmY%0H z*m92gnl}N`q-;WX%}6=}RS^sg&UpY+_heJ_4aVo3^Ti!{^rg@?D6^d7xTYQ3z0Fa> zsH#BgPA$i;y%JgtvTIzp0I<$@?N*F)M*jePcH@u@N^4>!`;oEz-zO%bV*7K0ifqi0 zLj}p=n=*|2_;iB=+$0D=yFl#)sWT@O8Kku6>5RVrKQQOgUd8CJpXLn#nW%oqST zsD5DC=7!MJwH>@D>yt{vxZ{CTnRdRT5N9NH6=}wF;K%q!2BumwN-EMRTDBw`vd67j zW(mgbb7Elvp(&S#<_X^0(j?N@B()8=J}T0F9zxj4lQHL3;VbUI#_ zVLj3`OktKUn`Z3ht?T~)YFQ$CeZ@x%2YSnz`c*jC2ljYdW&dv5O+v%3kM&3+iNEt2E(`R6ctrlNAVA5=vJ8sI;TC})Op&vQV zYTC88D{74_xqNk`+b5kk>JZB4Ljz&Q3`*;OxNRdFxL0 z4UpuM7%V_J#w%J&cS~oOXA8~;aZcI^Yq3F}bbeqNTysoxatH9_QZ7!#d7`+HOi;wk zI_?7i)N$#r{{Sx&2%8z&IW<( z$Oh0$W1jU5SaElDDzt}x9X)EfcHf-wPR5QF)MUY(GuPUi1BFa6!5z&O=xs_`*m;l= zRZd9jifQMbaYc>W7~uA*Tn z_o`YUCvnQyr>V)Q+#3Oqc_yUBMt@2Z7d3%1>56d5=e}y0NsE)~(vTi`qQLePf<;Il zibzR~$f20yr%GtM>7dYkGfrd1PAEjTa+)dHJNwn^TSz6_<}-qN_7qL&q06UI!P4!W zPmt$xaZ$~r$ru}@0CdJGd7pD0Ze7aLTRb@!+yKcVu&Wks-dNtdKq)EbbkWvETyN#DB$|<#q&WoV(y1<`R$7v%Z1bL!$%w`~)O9)8M4j3EsxcqU zk&u0jZLt=)()dy_d9O^txWXNn^h)!7azv)wRn zn%+_0lr^P1EZ(UzPi-EAkX^+f3Jx36t)K@O=QR~6xVtjc(^o_K0qIg9J^EBNp=sS} zII%q`%ag%0($Gl~E;EkxAR$lmq?V&%t9CdG!uE*4i{oZMJk<{_&L*Bl2H7;^Hluwn{ufHdsVGgrY?z`?l(OP|-S_jn}Xv=tNbRb;SZEI3SZn(nb0S zD&e@Oc9wh-fm0W7Oc)e=cJ-$S44K6Z>NKt~qG%;5`RSZh$kkg!cHm$dFVyI!?94*B z0OyL49H%%HO`6U(Vl~4MKm!MwftiT!nn_s`C=n1(S_j@4I2q*nRiZ!F>P!WWg>yFgm>^RGmzh_}2 zvH4uqa!1|*qElC~l%(9563-?u#D*MF$2@V!Rh>f)YDU=j z!o9-IPs~OJMK@4)Sk$VPT=D?TH0)0{niLXmFoH%ur8Y@+D;)GR0xK(?h zAYy=(Ey<rJ~3+@*gpgDG}g6W+Q7NfzHEhEAfHw>F16 zZt}g$`6|!z9OIzoq||N55z0v4jigocSy`E=#6N+O_)AW>)wKOZF05i* z?HsFz{OdVF?(Ei`M;#9wQ*R+=*>H zNMw>WJ9i-muOgz2V#!#{Xgi$Nv5Q-Vwk<&rDY#0%hk99BFoi(m`&4ek*HV<@E5{#7 zr6?Ka8TF@TOVyEX$67{^V?C;(ox#}^-ST)Ob5kUnea#LfZa04R&N1ywD0h;2Q5d9O zE`yr`lhTEem2!vjs=bF>Eh^CEjTLnsz0OqCWX+>F>3zk7rMF#lU zi6aLX^`za7iOaAw0Z_2X#Wcmrmf$xW8Z~IoTM;xQw;0<@WdU$h=hmq{hHaNLRuNt# zjh>(i?{%lxkZ$2kOqQdmX0CI00jHS9fFoY{=B17zn?fE3y-m(ZE1ey-nr1|K0)@s@ z4uY&Y#)_fl22Pn%(z0nV)fl>(P9`l3Z6f-CRpYl0x>be4^*e?s**(KfQp6u1`Hth) zCanXXym67a}fM4h%YQFbxxIJaV> z_>OV)qg9E8s}(;m!;fkdQJc}&#FB568ml`rk(OM3CbUSn#`=|Gjmv!F0;DWKArDHs zl=Wm}Fze1vY4J%cWXgqx!^;lT`BN@3H8jiX$u8nXVEd0b;N#Y>Y8sQ<-R&4E7dQvK zXDB4>WhlFl9d1@pz7^T%PI;#dP7r^2Ya3^{TF==vvowqpR^{C;{>s-;hVWU&&k@`M zbT!>rd{4TxxkgiH=euCPMpWsa*cg9y^Q!X@8{LE(B~AQ;|p@6AfHN;w2nsG-V|xW06}vxN4iEV%@-As)h=mCVwz0p&L)EKsq) zPt2GfUX^xZ)f0W6PHv4NpQT1DZHs)DC4b%&uCHObjUqB-eSAkN>(3M3l#GXb4CZ9n;_aKl% zjer5}dsIitakP*~=}PR@>ti1z5K7)q!>k z_3291E0)B!7a%qh4T09Hy~b3Bk9K(A)g`6aa_ew{*4A?VT#_qw+C_90(Vwsk0$Xkd zPg<6`lH}8~MpO~BKu6{xzD`%E6*Q3fvy=Vh+ln`LA+Be0lARHw!-lj4sDv&eiUU?VN5()h#ZFl&xexO}Dw!rf9UtWVn_!-y)#wIR11 zB1ZZSmh2iEndA2~#_;rEkC&-&jyEl6+F=<PrfyZxpU+k?}W8x)|y#W;D z)wD0#c@fEPsKh{P37B^)gGdbO*lT%IbvasA6L%PIBUTDa0)149mfl$1mTco8LMOGfBrCDQcj-;PMLW^3E$6**_ij=)|P+U>4uR8<+1P$))4DRkWXmEEO zd~gfF-8Bpz+=k#zaF^gtaEIW*LLTqFTkqYv@0?TT{IP7fzx z@kW-hGvyv-Y;f4M67ZZryj=` z)X#wkm$-&fqL$EuIAmF~6$V%gL+;*+Rf-q)RLNBM7HmW4HAja4@4}MVJ}Fd7oJgK3 zO&r#9dJ+wk$S@E(yZS8@TQ+m(Hw+7w=DV51N=?i@RyDHEFMz(vR8IbU(s&cWC<=`Y z(@uL=dq$L^i_@7j%4PKM&;#du*aff&WNoCV5-gz&{lwCt2pMXWyr@tPLWa zQ{uFYb2@WZY0$80hW^0>p3?FFXJHhU?Q97qDqv?TW6WhZGY>{21{h0e^q;omGG zDZPn`m-kD{{SE5NS=!J?2Ej)o5krqrk0DoiO{~XmDa@tEw2TDqj9VD?{x%MvHNP#c zbeb-W6eL!Kl9pfa3NSc?fbJF8p-yXkzV>C@2#sCgKY&q?EfU!vuSblR^RWC@uBKw+ zLs88-cAbHmm9}dRKKVlWwv*h{T+b`d_hfN@h&ydkO6S(@3vZBYF&A>l z53)S9?-bpKgC?JFU!=Du;Y8eR z!DuP*ECT~!jxYUXyz%~}tEFusd<_CE@p3&IDv$-R;*5}1#vrTB8rG1UJ2XN`zf5ly zGxzHr+@MwZ;27N=w?Tch5}VMoCS8hl41auf>YykIT`I|G8vOXG8blLRwLa)TT11-~ zQtb9wcF(U<;o@in*NXX@! zUNIxz`k9Tc0h|PXTkkem%DK~2Sfx+0-b@*%AVX5DwY#@GxZqR6G~@~EFR#D)qayc8 z-nJ>yv78myIHy#w3%sSulwQEPAsILkMl25;ttig6Y8JRd(24n!f@I0@w|@vCcUCYm z+(yCKjWp& zNGabmPs;1}Sw9Sz(U9Kc-F{VLr~Pw~ZHIRz%N&0iIz0PkKp9iPAooc!khcMp*g8}N z`*C&{*RY-_QPiRGO6SN!Z=+rs4<0Y4X_@*lH)~RoFr1VHVr)jWt#Y&pBzL15)DtygTI%`nK98f*o)Kx6x1{XP}+x zC>(J!GHeerQl6;~H`_ev_ecB8L>sI&Ns}S27<=lD_!}7G*ssr1If#|7!5fJ8dG#TU5L+N|C2e&Z=VRWvi4-?Yz}EN>6-$s%aADVZH?;F zN)aa)yR?xNoo;`!qMIucZ^oZi+8VbB^-x=q-PB3+(6a7}m}SB;=b$L3ag`F~-=oq) zOe~nI9*>6g&olGRz4j4?eCB`rY@(=Xm|I_%7s3gz>wz+!tqlHbYVLy~)2^9n(Ryrt z8b&o|*i9E=C-*x{7APyzHA-Sd5K?;C;eAlm9sMGiONHW0>P<*@ymF{+p4NohNHqqB zs(le2J~B)Z(dinYXAc^~biNT%UD$OEEYxs&P@me!{d!dwZRXxwqD|7zIF^1Uyr_CA z<=gZuye)Sx zt55~mPld2Y=J5r~6v<@BxO@fp;<>9l=Fv0UF0t_ zeWeyEBE4<=skd?!#DbOuqB0);J?YLpKua0!QY!S>ArD4&v^Y?4!v_T_b{mBV%z{WS zD?@2t@fu2fGza+a>!)2x73zkUCLdJ(!hX*3jQmOSw zhc43%*l|5~Yf5BLSrCkq+b8*XRyfq*2Q*vzXK5G5=zJ;?7?cQyv6cBydtcAHtcsl* z#O3wZH^nwPK-dzjIGq~6Qjg(kM)$nSKC^TxhywKrDg_iKKzis;SFod-L4fLY1U6dv z6yaS}KG$f(Uq)R#-&Hvg_bjNjRshMwK{AfhHx1pisDq9YvqL%bB_mQ-dNvI z&~8DV=KY;!ynTIcM@(<4L@ez2;sq>z4|H7@tLP71`$ z#(Nh`O#19msq!r?TB;Ie`KfFP?_(>Fo`O85F^@Rt0iV%>1p+rFeKD3t_s_?PKEQ;4x<$lqjFb7?sJne|55|+4-ye+ zYX=m%day$s=iEN5{Fn@lB+aHtq+#HyV$LWo1-}bba(9=#|8RJ-Ui}{+VP5?N9Icco zt-F&E4c=j21%hUp(0^HXGzs@zr8al|*!dBb+Dnk>$E8dgWuvEex9SHkt)omOd_6=@ zpWAHAjD#d&HD?(`#%1}s!W-TJm2Wduknrf}QT3TtO{a(i@bO146JrC@4K+TK@q=$l z1Gni*n^evK&&w4msjT|?NxnVsFWMO8BAIB&Lw*Y_%O-_YaAY}L<>TKgOhliUN!`|= ztn1mobnxwdSPzTD)ZkUFa-k2lkV30|X+XttX1~~~Vf4iQEpzwu@{e%DoNd><)a(rz zk%C$z-UlCa*+%=*CLi)MREew&n<6+@*P`VS$CtD~{s=reWPE=x+&PYA2FK#h^?IHD zo~=&_yYs_A0(P4({Xh-SwTY*_x3qxiCmr4nYKHbeccrSEak%Pw%(_nKB6T|T?I8}E zKkug_ej$0Rp*lFpn}ki4Cw^rTVPEWW+Z>u*;p=t5bvUYgFV!xwF*?q?g^lQ^<-!$# z(#rl)QB1>N+)SW@!A6~+A&J6w(E0i$LI|U<3^xzX#glx_6X3z3)_L|Gs|qZ#w?aG;EN9`+31MTZf777t^?d!QH}soS#WHR=C!A z{{E42T;Qcps%LVzk-6q!se=%MA?Lc*! zcj%Xod(YF~#wGq#wUTwGH?IRT^==US;kttt()QevC_U}`O8k%_12sk%_qO^0IS>X> z73oq4OU5V#6uA(W0ymO42Wzi|wBNgfi#liqi4ha#sgYAMIe2XwCULYG zd2^ab^X0U=S5l_JZ-(Hi*J4A7)51jx{4tsubwc8_a>u;POTT{G6+EcfEQoVN&xHR` zqM4o>Z|kr^xanTp_NEsB1^#CG!?%Npgu8m8ROVs)?0SW$cJnW69pZ4c-^X?21gF8rliJeP57e@;adq@&@2E%H*r{jku_pN^Je<=tC0KLd+% zoD0RJ)3VBO*D=9!%LZ-TNP97)43;p`^xZU?X$HSXM0EeOr!n8+;Gwf=Xc>;i)qUr! z-2~!^MJ?&8do+6G*?IKhX)F*4?-$ZY1q?riOTlq?UH)rpy#4vO&=a^zM+cW)w z*bjk@PmFo>xMy1N za-3Uu+H58IWqpdCA1YW9*7DRS)4z>IH#sCJ@EPB|iZNqiF>1xZ_0mEeYfTP zOQZ;B>=POvkX{rdX%2cxwME$>iqlfYBF^_=1E1OlW9VVe6_$r`mfR zrgZCAaaNy_aGhWQgUlDGo~N3$Gv!nx=%>mGjSW(DL7a14ZshcQmJ`t5pHgtudvpeQ zqV4~xi8Non9dmaLK$`~cS)PmH*Qg-J1}P6VD=rXMl+}T+>lnySb8aeUTH5Ie3>r;_ zz_xEQH4S#dV(t{#47I!)52l}5W*wE$s`<7;Pt^sgj<8N#e~`Pd)><_|H_gV;{KveX z7F^Sb#i_P7Y-AzEPbQfoZkE+ zJKFDfj}uL6w1X8V9zSQvK6hYlL`zeYI#jh>iAH3XZ;ZOQd;nRh6xV79E#Vk7*p`eF zNjTNUS(sv+@?kn6WKQWTfAN&>lEqBCu)LHZr^s0PlFBvFfHchPhRA79g5S74hFcS8 zvG5Nt@DK2D(;g~T#)7|T1KlswD0?3@d|g&M;6iL~LOf@b}qL-t#9@$qIw7L(x<5M%3IBXNX;1&e#!)>hr%xd{p& zy#Cm6)+8^m*y6;Ct5?wC2aS99K{>gctcR4YM45+vlLjfb6-39`lxbAttz86FhB4`a zMAgt4vY6bW^Z`xMd|J^E-Ox>Tq$`#do2KFb!kRnPKL*1jWAr;=un|L+UXxOFLps%= z^fC;|b#sTRf~pAUWBL98L`pEn-{>Q=QmiXUb!LK7%w!osjj~D+Yu@&7LtDPE;9nCn zmXRry8%NDhl+}3XQO!ZR^O;fc)%E8OwbEBsZ>$qi5>JOKe_unp~hukS%#|>#v zYF3OAcVScyGh2euGy!ipjqARKSJC5PjfaxL<79#O-nlZ6|RHKx#j7%~4pH!|f6kH4%z@Y(J z!MOv_eoc8?X}=EkVTvK-%1wr`K@!U@jRri}S#+(c2V*gcpz=Yc(nLGbMHQeS%@VVs4B;Wo((E z?O=aCBRSLY_v+v78f0~)BU)Qp2B}8K4bF%XqdO(e{LK+~T{Ca=D$Y#O5T6Q5Q?Z4x zm@&A!s;1}-+&l+`OPW#hVnlPy>vP*7m5%eq^ZTngBqT%Cq1^=rC$i zMU^*Uh^i5$Hu2g1+gTKNTw1f=kM&1nK`Xg?eM19an96~Fz+j$5$! zck5=XbfQDK&Fla&Y-X3Gf3cy4myu=$^+Xdl1>2Va;px+oj;2G}HM+`OKA}&sfuY<4 zK`?_^?v2Thtu8V452r3=JoQ<8h%r(=Q$ku=>S|KQW2c)!xAXgL3kZKurjjmW%6=1% zKa_DzZ|Ah9)6H+SsM>GS(-(ObUf(@EdM{B)?q3Dp)yiIqhXsgZtBJ?dIvqr(@h}s{ zk#7Y#eBdee(@0Sl?DChNt@cE{Dp~(c!N5YNQ(070<)?b_d!gk~XMf zW@uWSCJNO8yZ%-lR4R9qsysZ0Qu-}A3vC`$PFp66urt6PgK!wX^7(lbwH0;H*0sc! zdAWz9j^feI^+{FBFdexo=@Y4*!CLf?TxyNxl&dFO?_NF5Eu2aQtwp#YpF(f8<~=!c zB7rzLKar=WQ;+PrvcPNV32k(vPnz0auhjsTc77q=-WDdtkHNls-jg!*L{i6TNGlG-_l`K6Ehiq%I4(^p9~{Fanp-;1k%5|B=|+DQ$Y}{+ads4^X1|?T!Iz zO1+|Rn$%j7RBxZmoZne6tE90}YbmQm!I_lgTT<7SqJ#&=I9!($n?FdM4_LJWd49+< z6#RG{mV)WG;!teJWG5C+0=$$vd2f%ws~P1!wqrw_wswcTjJzc3>Jq zQ8i$V)cFOd(`ISj#It9A~KuCNw5$71H4m^JkSQb z;<0UQjGH!v>`Km94J$QKlvjUA6vD_Z4iK2*WffWk`d6Si&k&-;ATxPd=p*bzVMD%tl}MJi#_S|~;c7Cz~% zFkfvEDU~t#576XwevOl24_|8EO+Jg@HA~J&6JU&XH+xV(Ozaklz!Kjq83ZEFJ&6ms-m$3kO6ZyU4&}Vdd=|>Kq-0ya zGP0MY#cpr3PGvwr!ZlTSZ_`3;iCcMJqVgk9)FJjEt89Iv>zlrQLm!6z++rzHiw%>1 z)ktQaZu2Yt%t~=E`Ti70++QrKQumcV#bFP6KV#mAL{gVYGut3nW3ostM)gL#TI0K+ zN-|7LqmHxO{NCwQ{SV;mfT-k<6<%P3{3oEJ3w*-}oeS+Q6Um68+q8_onNJ?AVj_dq z{c`Ad)WOiTl}@x6Ftu36v(Wwn90cu4cBUhLAl%X#QxPTtaoF+47f|$Qij4^(@Qb)B zp0O7UHEM8-Ad_0f*uaXO$+b=TgH`WsZZ*0iNl&If%AUqp>C}(nC=fD9&ym?DYdGP2 zhRO%iPEkB}H>Mb#BY%k%5Swp1FU0V+Ab}jjT{2rmTRtXW)}5=29cZRElW=2T5>_fp z@{-#KC#nYt?Bcy2*hYr00b)Y;ZQIr%c})GTgzKD}**|COnwU&Db(u+GVu+9fO&Vi< zdUqFZ+5vxJ2I%TBkYTD{C1ngOfYI5@*7#rQ*f>kCT$&fe}VkCGlW8( z?mZH7fkU4+>?&yY_2xn6TJAcx2}p^is&%_ZESVtZ+Py#=Lp$0-c>G&K4q!8^sqG&h zK6Ti#iU=~#pDLsLTaR>0NMBOJreU2eh-$Pk@Z*y>%EDztmgxDs4x(tP0%3UI%bdC+ zZJKsgMcGkH=2JqE?K|qG;Qqb4-6r!Bh;h{3j|3vIv7#|w&K}BzO4i8snUi1GiYk}# z{nza5q%)+uFm#iLY1c#D%kZlnP5T0h^2+QZ6=9<-UY2%6$*q{v+eZU&>=$m=z_Xa9 z9Fr1lRVC@~57o-1jr?!5yBzNlr-~n-UV$@#Z(>F{f$8mnCkA5!6piL!B(c6 zgrV1U@Q*sl*>NzL61(HBsegd&zxRc_>zPaE-JE@lc*lG#+(yk?gm7y-g-#QDIUc;9 z>Lm2cyO`#YrF*I$&$Bj)dyzy%!G+vF&5)x~^TfkfY-Uk*P&-tO@0rBE%Dd8PrP*Q9 z@K=X$FQ8u~%LR4L*{}+$@w+>AddcSxiBISZifwDPh6&xF-?mqBoD?bB^^w zNy#1zhKjbY>H`xVSmHQ3peY}i?KuyUw|^t52-H+dntv%U7Wmi+X?w*#HK?+*WmC3c z;vP0QIBahaGBO}xODIblQGaU!Oq8B?VZdM2u3pL{ODA|*kYYAO*K&|Eae?z$SD+Rn z%E@?T{RjAKpZMvLA-?e;tp35`cmQI6@d?B~ew07B;7Eb9BLuipr2r5U~p0krw zHRMBPNAR9tUwR2jy@H)DM`JXZpBDU}B?r<^IM{lt@gDob(bY^S?J~}3egU31(`z7I z@WaqJ05%qw>(|T5Ia`{zao?4+<+CO|I%5MNG#s>le*&3LwgipK1P*y-TV)O11Z=e2 zrns1BJAG+s0}8zEs`gt!r-g79lNqB=b6UCU&a_^Y3ZUg2y3s^2pUgxf_*Vg`~ z6WeY9M>xo}Pp&{j=saDck~%+GM0JkBztJ~`kFT%2Vr~PJ)iT`b`>gNF_Wh>QHkzR7LCq>wDb~bCoMGdY)4$vtS^%aq;om;ohbAsD@B9 z)-I))M-rokG2q;d=MzJehJ`z&E9!U9s8Pq|me>mR2~lf&onEzy&ppw+<(ZDvjra$U zyv)+PkwvlkbHt>jJ71~Nrl0c`8H?D84myLEh!#7s_t2Y{;A#KbGmRP@Ij`m(4#pO@ zJuGZhY+GCD6Nu*;Jyg;EO3XvD2JA?1Kj=!yc7D=-Cf}doL+S7&rQmo4Zq^rf1x{Z zcxVdvwK633>*y_BQf#~Y{vi;)FRbdzw-JFSVpu8oxxD9ZCbAgv6{%t|LRZq~K!dVp z4ysV2t2p%BzRS8NY>29ub=k!zUZ;mh{;H{jE2Il(cwevi4}d%rPkGW(^%uxM_M!Nf zknk7WRQ}%4ane*X?tg%QCDv#9Br!a>+{FWbJ&bc`_iYURAG_OOnR4UVh?zhaaI=R9i=wvvYw`KDXz zO}Wj(Q4$_&U(`CCOL8k#$~(>}ZfzvEYcIzAOod|%edt)EB>=28PT#bi=G}qya_>1; zpFqW5nE9|$N6463%GVHnww;b#Fgg{qTkGFG!h&3tP;z)0TB z5|Y@XkR8;|-Fvz;yXbtTScWXtVK&^!33sXGvEZ5nssM%x{SDd_7WaWRA~Nt3QsfJ0 zhXR`|etYCCvz|qWjfGSpS{_Ed*+C+d^L@_!=+_%T6W-H-WEm!+U7KCyTIN{|3>t1W zgo&kJ5YtDO9c4s2m9EipmJdmcQ&gNd=rhW$<_!_J=o4#c1sfa;%^oYXHHDb@Mbn_a zoaS{ueBM@CFc%9qQ}U$#h;C%dcs5KV&@n6>vl#f^hi^MB<7(63M==2!+zYpf=dSo$ zji6Qv?-#Ta|71jET~p2%bZo_<&KT`OJcnQN*Ww=^ga^e4G*%BXhE`P3F83oBzrWva zVAIj2ZadL*4V0B@v@HUvln-!+5LbdK%8iO`8Ri!Qr<6PHDV;P_CE^&57YiI#?qBM$ z446SUQ&Hq#(tr!YC7#L6CiNJG+`2&TX^o=WQa4Ox?G;C0^Tn{$m8PT%Z-3yqfcSt9 zUMjKG&V>AHvt;rMb>{T-5NneBg&=)u`mL(M38L@BRS&)p-V5EfH@FCa>)m0^w_^UX2wj=e| zk~%PWmL{<7K++vTbYnWaFY|Zk%0I6fVHX_k2R6+S6C2kXJ9!8iOQ}dpcPcq)OdSmE z%W-H01xD2BJtP?VIJ2DBzFS>KQz8$%v)X2C(3_9tM~b0uy)5#v9gVM^f4%q=Xug@h zLuQYzD>vshVbRVI_0oP`v3XOzIaJ>xc+XUH-gAfRh^ky>IjH zs6z1)ffr@Ew=D>KGI^i4(x&>hEnwg6lsu3s=fiE?h#!U(JuYOK%EVEud^+skWRAO^ zCwbJOXc+(6P5rRBd`NA!{9*t#_xd)YyHj={Zl{Ja8FwK7i@dK+{1RME^4wzYz}W4u zejMkx^}K%STnD){WyoE%`v>^xko-4gogxyu?22{0=pTTbx5Yg}`PwSgd?WN0&zJpx z896I?7#`ZEOt>X#4x|J&aCyWRBxF6AjJl4xU5OLn$@Kczv#=o@i-M$1u3uZ zK}ESFTk%@HTgCIeF5^MXE;<=aN;`FTyrX{U%@#sOKzIXg&H_^q zd9LMB*pwycO00o|S)or0z6b+im?0)m&p>cL^bQj}512CbM_vhZ;+GgC!pac8P}(rr z6#>VOmhVGxvDED&+_(BA+@lvd7=O`9Ks zbU~JGi84=U4u|{hnenZBl4wVtI>~%KF4R=yVf@~|uKNe{kNmvOfCBg4`?13(b+>?- zeRBE-@ts^m!aRi6pTBadQ9!0OuF#VB*L3mJN_`avDk4;7Jb}XA)uZx}QY+PAUKgci z{v{?9L}p(LVU%c56a(&pe}J$+Mm;9EWHq8mlf+)-MY$tDU4n$;jlQ6`RNmkzCfvAp z2|@A-ZR&%%&%5unB3NH6ww>VxL_+dHV5&3i9HD6*wz^ySk*L-3o+5)q%RlJ1e=bh` z>8o-%yNh?BB?$X_CqVe*QAWaB(IQe~Wh;3(t=!gV_4>2*S=sg=ReZMI6El42O8x-+ z$HF}?juQ$7E=LN|V2dL>#I1kD$Zt*X_M$n}abj^ko2kAi`SR};Km95 zC538tkhg82m;Eat4GQykuEX~Z;U2cfuU=J~fGjv#@A?%(S>qa(yrpnVlY}SqEjPDn$Qe6Ey`b*k*ak~G{kRI!~MI!7xv~01h z%T)TBm$3Rwn>I#m2VMYAbpq7XHtq0)x^e=xYZ%1Jw6DU{a99(;c@{s~lpzpm8XVl; zMrE!`3M#9WG?n38on?Ohv@TS%cRPI za&g6LcDw+-tNd^VOV&7Oe1aQ&xFCf(s1N%HOf+hD&uIm{KkI5L&GKcP-Q`4{k~M0Y z3ov)S9P1`r2sk1Xk&#iwtYI`SYg-VME>141ddMFnAXp77*~uk8X80~#v;k-I*QcV% zh5Q)$JDNw-<~VSeEUsu$&RL;`LD8Py(zQ(8<>yg1vrnYTB1}Z^bLlAm%A&P9uws>f zCTB5!$YI<`@`YElW`G}&aLJA(HxE-M|iH9Lfz+iXMlb()%==-s4NI&J_;7uE}zzt^FKBH|a~?t9LT zdd9%_ZS|Sm8^E!rO<@^lDaWSD6bua%_r>Qhs^7ys~(!rO$i(Y;6$q{1_=uhY)+)@~4Wps=j) zVRUqenW)nmugE2-Ed8yKx$1zsDGn3=VP{Fbfnz1Y7ZXrE>AT#z5Di%4kns29)mU)G zU=@a5p5hpWYmy)iQ^q(xv zLNupP)(TuORs=9z(WbuC*n$UfK%Bv)vvw=7%~iKiAQQe}csAR6NLU z?U%&_C{uQ{r?VuvBr%C!p_NssOM3sGc&e=j>9Gj4px0)GWkS6C2!w1@A0^WcASX><>5}T2Ku}OR(dZf znC<9RCniL5o~P*TlW_zZOxsox5EWrZX;6;*3-dGz>+`5sCgHfH9R>UTY}rB}`LTup zi=TnK4czlckVRV8Ig$O*Q1_*5UT*0GtF>*%FgCx)qFi}{?Dk*_R0J1b<#$k5o+8_) zax}4Bxeh|`;;eWpcpRT2zw74tN>yiVb8`?tU@IuDR>JJZs+iKjFxNysXURE4Fg`s| zG`Cu?(5afd*4m;x;&Twmre1zST^8;s31P|JHO+=0DP|8qa}S_2ZFPEi8(h{p0z0ML zY4@ZB-(tL8ITxI_LFXde6)HGxv&kE#XVzwWwh8&tYO z|1{Ebhv~#Q7hWdnw7Jfi4x>1Yq6lsnh5rNe*W&1{H*!QB#Qg&h+6PWLGEQzDidTXC zrZTxD%MFxYF2_C~W|w6@BXNy8K@c3d$37B&`&17m9&+~2)yZ{ZZGw>7|IMrqCGncTxvL!j-Q#5_c;o|I_UK8W?{bJScN+;7r* zk~>NrSt6X~R9v5rk(t9jJFLFoU3Nbivu&zqT-*J=6q#mk5k+*cn@j6D{xIrp=dELk z6u`mut*fn(dws~gU57RGG}I*ArL3g#eG34<0R$_a3=H8foQz`?y&ty>^w->DDWbG` z)*}AcOT|T6_?T$Wr0^~|jiVnRUs!-_+1MOCKInoXcrq45oEOv-RT{!HL?2B{9#^o$ zRQ1Ap8CY9Rcm5h`$=a85I7TS0z6o_gDs1_@eNO$_f2Ql_S)Ebng*;&i@I$#V#eKo} z`Mc;>0mWHWl6yPn@V+ie0*y*h=#_lmk0>sE5~TUvh1&s&4iM%9y7fb?=2iX+wQYa< zVWf4!I(tS77R(1ehSXBH^^PxIkFRZ%<(1Cv>V-eGuf^5K;8#>Y3D=Mo&Z#kbZ?2|n z^=2W831uqt6#U0Gj({s~vkLV_KNODR%U3QDnDt5QK z%~6$KhD1F28&_Agih`&*#jusbm#A*Sv=nXY-w(RF&k`H4(-96tMigm>m({zM9p1cd z4#^~WD4h{%A@`@rgULpLc%y-1Y;x(fQfeFBNr_VxRSJW^(y{x+WVviF_7bC5=OOj@ zt}6V9yyC=<=BcB@np%aS=k6(A7Rp=<*v=RSP4=&BKTtqiMVZwaufZR*ZODRq->W|R%_rL&iIV(|$?%hkk@h>z{y=RJ&MN0s2~j)MUFTSTHGhr zEEOIp=U1=y)zlS@k`F}1w|~FYii!5w8*~@2EJWfTwe4~J)v-booe1j4Jv&aBk~^2wtxydw>+B55K|y;Lp`4W z>Y!_89_Ej*L-XXcJJN#$6Q{7QIf_p+>|4RbuTvRr7+z!Wp?%~-k|LvC0J7aixKJS^%s+{u7 z+=BZj&3G|mJw;W;k(q^V3O$ow!~V4INTMD!a@^Iyd1$Q!vuBL48zWQpx!Kg}pHY|I z(khL{Zlv}Vw6!bg&AZpt8^C+NOV9KX=mAn2;P2>i>t7WOh%pLi`OX0yN9}u~0;`in z0xf`1d+5DU#D?YhEqOYdE^&;^d=uS!TtJXz2`d2i6P)b-9F}C0z1ky8rMM*sS8KyP zRJ0Yk=bTFZFmfBw7hN*+>bmpH=rwf?9C|3rf{E)Bf*QT$d3`T+jpkeo4*R;_Dqbz4 zroU9c%zUJGOv5{6+F{vc(v_wH)S&cM8qvQeI~9tcGtC;Hm=h>KzbHWZDzL1~)V`aL zW7MuEC;>y>?>La|?+^V;P4MNBUySj$gzq_47+K%63i0fO6LVEy(F7vM_!JQ#Q&*j_ z13{57swj8oM$>1%A#^2+O{6a2{AjM2UCKq^mvB_Kkww)&Q`WW%dlz7lB^YMInx*k~ zFJ@uQ7pbL7#Vp%N?!!h*<^eBB#tzXCVXB5JqTVcG)5joPX0^7m_dN*tQ`u%0Or#-5 zhjM|Aa8Q+Z#zXJ6hyQ?H?4_4Nr~MR1-j2=7x!gW8%}OO8Zl}nXXb-b0oO=MXdxrYB zPUmPL#+Z>WSUmMC?Zq+WWna?{c^l1I=no55*Q6a#23?4UiEp(DE6P8rOT4{?|95~x zXs#Rm6I`hY_9aY^8+P?ArH_h?JX<5T$PoQ|%qAjOHWr4gt;&HeoH|ltIUQhGym=JW z!ol@bvRCIHfcWYkAUe|7=BFZ;pI&_vc*F{U|0^KE?>)@miLESKKp9 zNeSfgsvJh5vQO~(c-_~bcen`ZGZHV1aPwcM4FCp=fNw!4|JlH_32xRcANO=XD~!O{ z$2(jd?pyQsweGx3pF7q~Sj*D95d4GZnjPE5#+0+X>}?r*zL_JY^*f=jZN_WyY;>{Z zb0RPZKIn^3n==HPEAC2BaVO3|mm%t9Adr_{a#T$Q(Pl~q!2vhu9J&EVr)Tam#KI;W^Ho;#o5bWS?Zq2P7;8M1*J^glM*|81x$ zUp749t99`v9>s~nqv6%(Q6k(@NI||Ycyue+fqKyma=DzX*+|gG@DD$WXon&w2cs!` z@_6rq%eOqQK?@HLU&2Zi{=XQ~|7TMF)fGAX{X^O|GGq+^_336&wMZ4efKGep#AgLk z=h@EXcBaG#j`I4eWKHGbaGVqz&X($apIh(1=l7#9wRcybcF9_zFi?|h)@)sBJk@1l zozN$bA;>+AEJ_sg{jRx#hB^DPxn?G7kEyWwEBL zlcS$np>0U(pdB}Ly?5}NsH%T)8jDkK9;fa(L(=N+RwKOI-#TZqa(Ss;`iOoNP6 zV(kxYI+cQ`0&^y;-g`w1yQ@!n*k|l5)G|I)zNv3MA zw;w@Avyap~H)*(_XMcP_*={j06WX)u?bm`|tS_a6Md`T;0@1gC-8DfU(c(5ymqdXBz};xKxY2J*Qv6R-*NP6mz=h3`EQnR+E;gZsED3 z*}){(Y$X0X8nb@c!}&=p{g@o}azc!_Q5Sm2+e5m46LTDgEzbk{RXB4b)NlgLmf7=F zfaKi4M)}U+Ai)M){PUjw@f!Hwmc)Pe=j9JB(ZYrlpPh8Y)<=b5W$2(-A)P;uJ2@`_ z;`De60>GEL^P0qHJeu~gW6z?|ABC&)3`gG=O;52ifjR6MnUb`n$tu2DQ-3%sLWjJ- zyL>b;P|ghlqHPoH)?J;sKeUC+uvps6j2BjqM;1i}=5^PCDYSfSaH9K;wE3=vb|xw+ zoIi{w1=DVNW*Y4cNHzwV+kEK10^X zX%*e5{>u7l37ZHTj5bB^zO{NT*`+Bl;Ia|_yHqBeS4WWkXJD;itWQsWWf{D9F!YN@28t}VifDR z{V`51Sz9l@EE+vv1r@Wv|JuPEA6Q zqIs(3^;0f5L{U*z({;L5a0HBv$=I^WFfyTmLQ|8@ONP+G8cu3Fk zxPYW-((!f%G|@@}fP*a!?#ch-F8_CJ^gn(MGp(_K*eKxHtFC9zi|_dp+oxSJ2PU@i zDnmD4T5HJ7yY8>wB|CHZc*raGFM=7M|0i>G;h@Dg4-H8FffK- zxzvfDa~Z@yYFVPy89Hv3)eoHnIZg_){D%BQUeNVBkbIG<#$x8MqVR7kUv6#$Ztge7 zeO3i$M5DRcI8Bt*U#WD#XJ%_nW~QuAA}808)w^qNx8~Xm=xd)bTUH{bu#l9ZHysj@ zeiW=B+>deUK$`qTU8-~Pp`?z@D?|N{+Pk7y{A;(r=BM=U z;aXNgIaely#SeL7JMS}a(nN0zHDTTOwgM$}VpTgn=T5|Wg|=n_Mt8MTOV(GW(Y#Ry zdL<1ZG#$<_5#;G}*0i=Bi6)m}Zn2E zxuag8N(!Wv%(l(&NnSCdiGpn?w{b2vQ7En!&VAl*;h0W$FI~cc$XQVTjL%7mstIx3 zvPN8Wk?p)#pS9F8UJx~>qS_ku6e3&dvhnaoy`4iUsX%n}khiAbVd`L2hyN^_a9dtP zr_$XZzK{Rs>Hb5OlY?Ezf^uTg2l#g#`KUgT&u(~G5_%GQdBsbzLhBbp8j;LGl1j#i z=CS}hjl)kZEorhe`5Z}n!P7i&&i^x({Ev01M)Tp#=RM%c)Q?gk zm?ydc>8s;OmZSy;H#=xX>pzCKcR-&-Hb#l3au{0^06e7&Dd<>vTzmh5QwZvR>J&+?Py z8`Q#|759cNo`aEydZ;^qzD|^3Yb<7RMbNBOAxc->HWU8=lz?&xz`5pTl(R)R1QKB( zQ11V}+MqG-{XA>u2!9c&BiZRjfFQQM-jLIr{onJfV}tEqQq1(#Qz@HI_qH<8c=B!w zO+>;HZm7FCx+Y!9-j+uN@4n8+O_3!lCB(_|0G|Fculv8{+raNOuH?{As0uGmhA+$q z^@APD{m1N?*-A5&WWc>8ChG`Xzfv$aQ4KyGHShioS-uz+tWfcw{%t8o;#1TUj|(>h z7_uLyE}*>~MqzaNR-LS&l>)go$Gr*>T2L|QH5rnmnjT-QWKokI|Lxe>0;UR16!n^W z$J_IFd5t>ZMQe&U6S2k;s13597W^POv^uR9nw+9=TY?)r_JnfzsLmupaV%3yKmyly zx0Bm}V}&y!QeS{ZVPM5pY(`}bpK)6djnrHnCpE*H^AM)l7D^ z*s1Gx@8dh}jmo1@GS2({^fQPv4An!I2l=F7930 zZ@A4WZQT=3)s-iAALJI);PL#Y9P-@b?&(7d-M1#)_PM2L8yNJAr|BlkJmZ(4YMWD~ zFK(Cj3DsO3ArpJlJ9Q#w(ShH=3)?&%Rm@pG<@n^jLN8z5Q@3XssxIA=pp)|M`|1m) z1zjBs#FvW-l}mY9a~gWeJYfSa4$@fck}UP`z>*s$*Dg*|Tt1OO7C5FO@?cRq%X3p* zZKkSeYp)z);3=q7x%%4rrB1%mEV09y&+mj8cc*ndFI`r#@7|}BruSMqnV-GL-ZDLG z(!DdaT?*lnC!Tk`UaXgzJa0**sm6;sg)91|8IL<7nC?8kwAWF_K&I#W(Y!rpF7Mj$ y`1P$7zJ)4hg6^ct`UVN>+!;T-M& literal 0 HcmV?d00001 From 17223001df8d849a92cd552ba9b3f4fa700c5a3d Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 15 Jul 2014 18:38:10 +0300 Subject: [PATCH 068/311] flake8 --- PIL/ImagePalette.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/PIL/ImagePalette.py b/PIL/ImagePalette.py index 59886827a..ee3c22544 100644 --- a/PIL/ImagePalette.py +++ b/PIL/ImagePalette.py @@ -23,13 +23,13 @@ from PIL import Image, ImageColor class ImagePalette: "Color palette for palette mapped images" - def __init__(self, mode = "RGB", palette = None, size = 0): + def __init__(self, mode="RGB", palette=None, size=0): self.mode = mode - self.rawmode = None # if set, palette contains raw data + self.rawmode = None # if set, palette contains raw data self.palette = palette or list(range(256))*len(self.mode) self.colors = {} self.dirty = None - if ((size == 0 and len(self.mode)*256 != len(self.palette)) or + if ((size == 0 and len(self.mode)*256 != len(self.palette)) or (size != 0 and size != len(self.palette))): raise ValueError("wrong palette size") @@ -55,7 +55,7 @@ class ImagePalette: return self.palette arr = array.array("B", self.palette) if hasattr(arr, 'tobytes'): - #py3k has a tobytes, tostring is deprecated. + # py3k has a tobytes, tostring is deprecated. return arr.tobytes() return arr.tostring() @@ -109,6 +109,7 @@ class ImagePalette: fp.write("\n") fp.close() + # -------------------------------------------------------------------- # Internal @@ -119,6 +120,7 @@ def raw(rawmode, data): palette.dirty = 1 return palette + # -------------------------------------------------------------------- # Factories @@ -128,23 +130,27 @@ def _make_linear_lut(black, white): for i in range(256): lut.append(white*i//255) else: - raise NotImplementedError # FIXME + raise NotImplementedError # FIXME return lut + def _make_gamma_lut(exp, mode="RGB"): lut = [] for i in range(256): lut.append(int(((i / 255.0) ** exp) * 255.0 + 0.5)) return lut + def new(mode, data): return Image.core.new_palette(mode, data) + def negative(mode="RGB"): palette = list(range(256)) palette.reverse() return ImagePalette(mode, palette * len(mode)) + def random(mode="RGB"): from random import randint palette = [] @@ -152,6 +158,7 @@ def random(mode="RGB"): palette.append(randint(0, 255)) return ImagePalette(mode, palette) + def sepia(white="#fff0c0"): r, g, b = ImageColor.getrgb(white) r = _make_linear_lut(0, r) @@ -159,9 +166,11 @@ def sepia(white="#fff0c0"): b = _make_linear_lut(0, b) return ImagePalette("RGB", r + g + b) + def wedge(mode="RGB"): return ImagePalette(mode, list(range(256)) * len(mode)) + def load(filename): # FIXME: supports GIMP gradients only @@ -177,8 +186,8 @@ def load(filename): p = GimpPaletteFile.GimpPaletteFile(fp) lut = p.getpalette() except (SyntaxError, ValueError): - #import traceback - #traceback.print_exc() + # import traceback + # traceback.print_exc() pass if not lut: @@ -188,8 +197,8 @@ def load(filename): p = GimpGradientFile.GimpGradientFile(fp) lut = p.getpalette() except (SyntaxError, ValueError): - #import traceback - #traceback.print_exc() + # import traceback + # traceback.print_exc() pass if not lut: @@ -206,4 +215,4 @@ def load(filename): if not lut: raise IOError("cannot load palette") - return lut # data, rawmode + return lut # data, rawmode From 2609a24221e3bbb2993d8fb28e86d3ba4daffcac Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Tue, 15 Jul 2014 17:43:31 -0400 Subject: [PATCH 069/311] Moved images to correct place. Accidentally uploaded images to their initial test location, not the proper location used by other tests. --- {Images => Tests/images}/frozenpond.mpo | Bin {Images => Tests/images}/sugarshack.mpo | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename {Images => Tests/images}/frozenpond.mpo (100%) rename {Images => Tests/images}/sugarshack.mpo (100%) diff --git a/Images/frozenpond.mpo b/Tests/images/frozenpond.mpo similarity index 100% rename from Images/frozenpond.mpo rename to Tests/images/frozenpond.mpo diff --git a/Images/sugarshack.mpo b/Tests/images/sugarshack.mpo similarity index 100% rename from Images/sugarshack.mpo rename to Tests/images/sugarshack.mpo From 7dfec434fa9b89c0788e9704dad99652f71cfd31 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 15 Jul 2014 16:20:20 -0700 Subject: [PATCH 070/311] Pulled ImageMorph into its own page --- docs/PIL.rst | 7 ------- docs/reference/ImageMorph.rst | 13 +++++++++++++ docs/reference/index.rst | 1 + 3 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 docs/reference/ImageMorph.rst diff --git a/docs/PIL.rst b/docs/PIL.rst index 537b2fd8f..5b429dc4b 100644 --- a/docs/PIL.rst +++ b/docs/PIL.rst @@ -72,13 +72,6 @@ can be found here. :undoc-members: :show-inheritance: -:mod:`ImageMorph` Module ------------------------- - -.. automodule:: PIL.ImageMorph - :members: - :undoc-members: - :show-inheritance: :mod:`ImageShow` Module ----------------------- diff --git a/docs/reference/ImageMorph.rst b/docs/reference/ImageMorph.rst new file mode 100644 index 000000000..eaf3b1c5e --- /dev/null +++ b/docs/reference/ImageMorph.rst @@ -0,0 +1,13 @@ +.. py:module:: PIL.ImageMorph +.. py:currentmodule:: PIL.ImageMorph + +:py:mod:`ImageMorph` Module +=========================== + +The :py:mod:`ImageMorph` module provides morphology operations on images. + +.. automodule:: PIL.ImageMorph + :members: + :undoc-members: + :show-inheritance: + :noindex: diff --git a/docs/reference/index.rst b/docs/reference/index.rst index fca2b387b..d6baf216e 100644 --- a/docs/reference/index.rst +++ b/docs/reference/index.rst @@ -16,6 +16,7 @@ Reference ImageFont ImageGrab ImageMath + ImageMorph ImageOps ImagePalette ImagePath From b6c33596b3bd4058877b4ca9eb7bdc46a20da5e6 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 15 Jul 2014 16:56:59 -0700 Subject: [PATCH 071/311] Broke out OleFileIO into its own page, Added docs from the readme --- PIL/OleFileIO.py | 34 ++-- docs/PIL.rst | 8 - docs/reference/OleFileIO.rst | 364 +++++++++++++++++++++++++++++++++++ docs/reference/index.rst | 1 + 4 files changed, 381 insertions(+), 26 deletions(-) create mode 100644 docs/reference/OleFileIO.rst diff --git a/PIL/OleFileIO.py b/PIL/OleFileIO.py index e5ecc6e56..57c9c349e 100644 --- a/PIL/OleFileIO.py +++ b/PIL/OleFileIO.py @@ -1,31 +1,29 @@ #!/usr/local/bin/python # -*- coding: latin-1 -*- -""" -OleFileIO_PL: -Module to read Microsoft OLE2 files (also called Structured Storage or -Microsoft Compound Document File Format), such as Microsoft Office -documents, Image Composer and FlashPix files, Outlook messages, ... -This version is compatible with Python 2.6+ and 3.x +## OleFileIO_PL: +## Module to read Microsoft OLE2 files (also called Structured Storage or +## Microsoft Compound Document File Format), such as Microsoft Office +## documents, Image Composer and FlashPix files, Outlook messages, ... +## This version is compatible with Python 2.6+ and 3.x -version 0.30 2014-02-04 Philippe Lagadec - http://www.decalage.info +## version 0.30 2014-02-04 Philippe Lagadec - http://www.decalage.info -Project website: http://www.decalage.info/python/olefileio +## Project website: http://www.decalage.info/python/olefileio -Improved version of the OleFileIO module from PIL library v1.1.6 -See: http://www.pythonware.com/products/pil/index.htm +## Improved version of the OleFileIO module from PIL library v1.1.6 +## See: http://www.pythonware.com/products/pil/index.htm -The Python Imaging Library (PIL) is +## The Python Imaging Library (PIL) is - Copyright (c) 1997-2005 by Secret Labs AB - - Copyright (c) 1995-2005 by Fredrik Lundh +## Copyright (c) 1997-2005 by Secret Labs AB +## Copyright (c) 1995-2005 by Fredrik Lundh -OleFileIO_PL changes are Copyright (c) 2005-2014 by Philippe Lagadec +## OleFileIO_PL changes are Copyright (c) 2005-2014 by Philippe Lagadec -See source code and LICENSE.txt for information on usage and redistribution. +## See source code and LICENSE.txt for information on usage and redistribution. + +## WARNING: THIS IS (STILL) WORK IN PROGRESS. -WARNING: THIS IS (STILL) WORK IN PROGRESS. -""" # Starting with OleFileIO_PL v0.30, only Python 2.6+ and 3.x is supported # This import enables print() as a function rather than a keyword diff --git a/docs/PIL.rst b/docs/PIL.rst index 5b429dc4b..8bf89c685 100644 --- a/docs/PIL.rst +++ b/docs/PIL.rst @@ -97,14 +97,6 @@ can be found here. :undoc-members: :show-inheritance: -:mod:`OleFileIO` Module ------------------------ - -.. automodule:: PIL.OleFileIO - :members: - :undoc-members: - :show-inheritance: - :mod:`PaletteFile` Module ------------------------- diff --git a/docs/reference/OleFileIO.rst b/docs/reference/OleFileIO.rst new file mode 100644 index 000000000..74c4b7b36 --- /dev/null +++ b/docs/reference/OleFileIO.rst @@ -0,0 +1,364 @@ +.. py:module:: PIL.OleFileIO +.. py:currentmodule:: PIL.OleFileIO + +:py:mod:`OleFileIO` Module +=========================== + +The :py:mod:`OleFileIO` module reads Microsoft OLE2 files (also called +Structured Storage or Microsoft Compound Document File Format), such +as Microsoft Office documents, Image Composer and FlashPix files, and +Outlook messages. + +This module is the `OleFileIO\_PL`_ project by Philippe Lagadec, v0.30, +merged back into Pillow. + +.. _OleFileIO\_PL: http://www.decalage.info/python/olefileio + +How to use this module +---------------------- + +For more information, see also the file **PIL/OleFileIO.py**, sample +code at the end of the module itself, and docstrings within the code. + +About the structure of OLE files +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +An OLE file can be seen as a mini file system or a Zip archive: It +contains **streams** of data that look like files embedded within the +OLE file. Each stream has a name. For example, the main stream of a MS +Word document containing its text is named "WordDocument". + +An OLE file can also contain **storages**. A storage is a folder that +contains streams or other storages. For example, a MS Word document with +VBA macros has a storage called "Macros". + +Special streams can contain **properties**. A property is a specific +value that can be used to store information such as the metadata of a +document (title, author, creation date, etc). Property stream names +usually start with the character '05'. + +For example, a typical MS Word document may look like this: + +:: + + \x05DocumentSummaryInformation (stream) + \x05SummaryInformation (stream) + WordDocument (stream) + Macros (storage) + PROJECT (stream) + PROJECTwm (stream) + VBA (storage) + Module1 (stream) + ThisDocument (stream) + _VBA_PROJECT (stream) + dir (stream) + ObjectPool (storage) + +Test if a file is an OLE container +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Use isOleFile to check if the first bytes of the file contain the Magic +for OLE files, before opening it. isOleFile returns True if it is an OLE +file, False otherwise. + +.. code-block:: python + + assert OleFileIO.isOleFile('myfile.doc') + +Open an OLE file from disk +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Create an OleFileIO object with the file path as parameter: + +.. code-block:: python + + ole = OleFileIO.OleFileIO('myfile.doc') + +Open an OLE file from a file-like object +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This is useful if the file is not on disk, e.g. already stored in a +string or as a file-like object. + +.. code-block:: python + + ole = OleFileIO.OleFileIO(f) + +For example the code below reads a file into a string, then uses BytesIO +to turn it into a file-like object. + +.. code-block:: python + + data = open('myfile.doc', 'rb').read() + f = io.BytesIO(data) # or StringIO.StringIO for Python 2.x + ole = OleFileIO.OleFileIO(f) + +How to handle malformed OLE files +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +By default, the parser is configured to be as robust and permissive as +possible, allowing to parse most malformed OLE files. Only fatal errors +will raise an exception. It is possible to tell the parser to be more +strict in order to raise exceptions for files that do not fully conform +to the OLE specifications, using the raise\_defect option: + +.. code-block:: python + + ole = OleFileIO.OleFileIO('myfile.doc', raise_defects=DEFECT_INCORRECT) + +When the parsing is done, the list of non-fatal issues detected is +available as a list in the parsing\_issues attribute of the OleFileIO +object: + +.. code-block:: python + + print('Non-fatal issues raised during parsing:') + if ole.parsing_issues: + for exctype, msg in ole.parsing_issues: + print('- %s: %s' % (exctype.__name__, msg)) + else: + print('None') + +Syntax for stream and storage path +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Two different syntaxes are allowed for methods that need or return the +path of streams and storages: + +1) Either a **list of strings** including all the storages from the root + up to the stream/storage name. For example a stream called + "WordDocument" at the root will have ['WordDocument'] as full path. A + stream called "ThisDocument" located in the storage "Macros/VBA" will + be ['Macros', 'VBA', 'ThisDocument']. This is the original syntax + from PIL. While hard to read and not very convenient, this syntax + works in all cases. + +2) Or a **single string with slashes** to separate storage and stream + names (similar to the Unix path syntax). The previous examples would + be 'WordDocument' and 'Macros/VBA/ThisDocument'. This syntax is + easier, but may fail if a stream or storage name contains a slash. + +Both are case-insensitive. + +Switching between the two is easy: + +.. code-block:: python + + slash_path = '/'.join(list_path) + list_path = slash_path.split('/') + +Get the list of streams +~~~~~~~~~~~~~~~~~~~~~~~ + +listdir() returns a list of all the streams contained in the OLE file, +including those stored in storages. Each stream is listed itself as a +list, as described above. + +.. code-block:: python + + print(ole.listdir()) + +Sample result: + +.. code-block:: python + + [['\x01CompObj'], ['\x05DocumentSummaryInformation'], ['\x05SummaryInformation'] + , ['1Table'], ['Macros', 'PROJECT'], ['Macros', 'PROJECTwm'], ['Macros', 'VBA', + 'Module1'], ['Macros', 'VBA', 'ThisDocument'], ['Macros', 'VBA', '_VBA_PROJECT'] + , ['Macros', 'VBA', 'dir'], ['ObjectPool'], ['WordDocument']] + +As an option it is possible to choose if storages should also be listed, +with or without streams: + +.. code-block:: python + + ole.listdir (streams=False, storages=True) + +Test if known streams/storages exist: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +exists(path) checks if a given stream or storage exists in the OLE file. + +.. code-block:: python + + if ole.exists('worddocument'): + print("This is a Word document.") + if ole.exists('macros/vba'): + print("This document seems to contain VBA macros.") + +Read data from a stream +~~~~~~~~~~~~~~~~~~~~~~~ + +openstream(path) opens a stream as a file-like object. + +The following example extracts the "Pictures" stream from a PPT file: + +.. code-block:: python + + pics = ole.openstream('Pictures') + data = pics.read() + + +Get information about a stream/storage +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Several methods can provide the size, type and timestamps of a given +stream/storage: + +get\_size(path) returns the size of a stream in bytes: + +.. code-block:: python + + s = ole.get_size('WordDocument') + +get\_type(path) returns the type of a stream/storage, as one of the +following constants: STGTY\_STREAM for a stream, STGTY\_STORAGE for a +storage, STGTY\_ROOT for the root entry, and False for a non existing +path. + +.. code-block:: python + + t = ole.get_type('WordDocument') + +get\_ctime(path) and get\_mtime(path) return the creation and +modification timestamps of a stream/storage, as a Python datetime object +with UTC timezone. Please note that these timestamps are only present if +the application that created the OLE file explicitly stored them, which +is rarely the case. When not present, these methods return None. + +.. code-block:: python + + c = ole.get_ctime('WordDocument') + m = ole.get_mtime('WordDocument') + +The root storage is a special case: You can get its creation and +modification timestamps using the OleFileIO.root attribute: + +.. code-block:: python + + c = ole.root.getctime() + m = ole.root.getmtime() + +Extract metadata +~~~~~~~~~~~~~~~~ + +get\_metadata() will check if standard property streams exist, parse all +the properties they contain, and return an OleMetadata object with the +found properties as attributes. + +.. code-block:: python + + meta = ole.get_metadata() + print('Author:', meta.author) + print('Title:', meta.title) + print('Creation date:', meta.create_time) + # print all metadata: + meta.dump() + +Available attributes include: + +:: + + codepage, title, subject, author, keywords, comments, template, + last_saved_by, revision_number, total_edit_time, last_printed, create_time, + last_saved_time, num_pages, num_words, num_chars, thumbnail, + creating_application, security, codepage_doc, category, presentation_target, + bytes, lines, paragraphs, slides, notes, hidden_slides, mm_clips, + scale_crop, heading_pairs, titles_of_parts, manager, company, links_dirty, + chars_with_spaces, unused, shared_doc, link_base, hlinks, hlinks_changed, + version, dig_sig, content_type, content_status, language, doc_version + +See the source code of the OleMetadata class for more information. + +Parse a property stream +~~~~~~~~~~~~~~~~~~~~~~~ + +get\_properties(path) can be used to parse any property stream that is +not handled by get\_metadata. It returns a dictionary indexed by +integers. Each integer is the index of the property, pointing to its +value. For example in the standard property stream +'05SummaryInformation', the document title is property #2, and the +subject is #3. + +.. code-block:: python + + p = ole.getproperties('specialprops') + +By default as in the original PIL version, timestamp properties are +converted into a number of seconds since Jan 1,1601. With the option +convert\_time, you can obtain more convenient Python datetime objects +(UTC timezone). If some time properties should not be converted (such as +total editing time in '05SummaryInformation'), the list of indexes can +be passed as no\_conversion: + +.. code-block:: python + + p = ole.getproperties('specialprops', convert_time=True, no_conversion=[10]) + +Close the OLE file +~~~~~~~~~~~~~~~~~~ + +Unless your application is a simple script that terminates after +processing an OLE file, do not forget to close each OleFileIO object +after parsing to close the file on disk. + +.. code-block:: python + + ole.close() + +Use OleFileIO as a script +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +OleFileIO can also be used as a script from the command-line to +display the structure of an OLE file and its metadata, for example: + +:: + + PIL/OleFileIO.py myfile.doc + +You can use the option -c to check that all streams can be read fully, +and -d to generate very verbose debugging information. + +How to contribute +----------------- + +The code is available in `a Mercurial repository on +bitbucket `_. You may use +it to submit enhancements or to report any issue. + +If you would like to help us improve this module, or simply provide +feedback, please `contact me `_. You can +help in many ways: + +- test this module on different platforms / Python versions +- find and report bugs +- improve documentation, code samples, docstrings +- write unittest test cases +- provide tricky malformed files + +How to report bugs +------------------ + +To report a bug, for example a normal file which is not parsed +correctly, please use the `issue reporting +page `_, +or if you prefer to do it privately, use this `contact +form `_. Please provide all the +information about the context and how to reproduce the bug. + +If possible please join the debugging output of OleFileIO. For this, +launch the following command : + +:: + + PIL/OleFileIO.py -d -c file >debug.txt + + +Classes and Methods +------------------- + +.. automodule:: PIL.OleFileIO + :members: + :undoc-members: + :show-inheritance: + :noindex: diff --git a/docs/reference/index.rst b/docs/reference/index.rst index d6baf216e..2f10b861d 100644 --- a/docs/reference/index.rst +++ b/docs/reference/index.rst @@ -26,5 +26,6 @@ Reference ImageTk ImageWin ExifTags + OleFileIO PSDraw ../PIL From 09b0d1cfa6ce30fea5ce8adbfea009085e955c7e Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 15 Jul 2014 21:24:52 -0700 Subject: [PATCH 072/311] converted to current docutils format --- PIL/OleFileIO.py | 159 +++++++++++++++++++++++++---------------------- 1 file changed, 84 insertions(+), 75 deletions(-) diff --git a/PIL/OleFileIO.py b/PIL/OleFileIO.py index 57c9c349e..e35bfa679 100644 --- a/PIL/OleFileIO.py +++ b/PIL/OleFileIO.py @@ -371,8 +371,9 @@ for key in list(vars().keys()): def isOleFile (filename): """ Test if file is an OLE container (according to its header). - filename: file name or path (str, unicode) - return: True if OLE, False otherwise. + + :param filename: file name or path (str, unicode) + :returns: True if OLE, False otherwise. """ f = open(filename, 'rb') header = f.read(len(MAGIC)) @@ -398,8 +399,8 @@ def i16(c, o = 0): """ Converts a 2-bytes (16 bits) string to an integer. - c: string containing bytes to convert - o: offset of bytes to convert in string + :param c: string containing bytes to convert + :param o: offset of bytes to convert in string """ return i8(c[o]) | (i8(c[o+1])<<8) @@ -408,8 +409,8 @@ def i32(c, o = 0): """ Converts a 4-bytes (32 bits) string to an integer. - c: string containing bytes to convert - o: offset of bytes to convert in string + :param c: string containing bytes to convert + :param o: offset of bytes to convert in string """ ## return int(ord(c[o])+(ord(c[o+1])<<8)+(ord(c[o+2])<<16)+(ord(c[o+3])<<24)) ## # [PL]: added int() because "<<" gives long int since Python 2.4 @@ -420,7 +421,8 @@ def i32(c, o = 0): def _clsid(clsid): """ Converts a CLSID to a human-readable string. - clsid: string of length 16. + + :param clsid: string of length 16. """ assert len(clsid) == 16 # if clsid is only made of null bytes, return an empty string: @@ -440,8 +442,8 @@ def _unicode(s, errors='replace'): """ Map unicode string to Latin 1. (Python with Unicode support) - s: UTF-16LE unicode string to convert to Latin-1 - errors: 'replace', 'ignore' or 'strict'. + :param s: UTF-16LE unicode string to convert to Latin-1 + :param errors: 'replace', 'ignore' or 'strict'. """ #TODO: test if it OleFileIO works with Unicode strings, instead of # converting to Latin-1. @@ -651,14 +653,14 @@ class _OleStream(io.BytesIO): """ Constructor for _OleStream class. - fp : file object, the OLE container or the MiniFAT stream - sect : sector index of first sector in the stream - size : total size of the stream - offset : offset in bytes for the first FAT or MiniFAT sector - sectorsize: size of one sector - fat : array/list of sector indexes (FAT or MiniFAT) - filesize : size of OLE file (for debugging) - return : a BytesIO instance containing the OLE stream + :param fp : file object, the OLE container or the MiniFAT stream + :param sect : sector index of first sector in the stream + :param size : total size of the stream + :param offset : offset in bytes for the first FAT or MiniFAT sector + :param sectorsize: size of one sector + :param fat : array/list of sector indexes (FAT or MiniFAT) + :param filesize : size of OLE file (for debugging) + :returns : a BytesIO instance containing the OLE stream """ debug('_OleStream.__init__:') debug(' sect=%d (%X), size=%d, offset=%d, sectorsize=%d, len(fat)=%d, fp=%s' @@ -794,9 +796,9 @@ class _OleDirectoryEntry: Constructor for an _OleDirectoryEntry object. Parses a 128-bytes entry from the OLE Directory stream. - entry : string (must be 128 bytes long) - sid : index of this directory entry in the OLE file directory - olefile: OleFileIO containing this directory entry + :param entry : string (must be 128 bytes long) + :param sid : index of this directory entry in the OLE file directory + :param olefile: OleFileIO containing this directory entry """ self.sid = sid # ref to olefile is stored for future use @@ -990,7 +992,7 @@ class _OleDirectoryEntry: """ Return modification time of a directory entry. - return: None if modification time is null, a python datetime object + :returns: None if modification time is null, a python datetime object otherwise (UTC timezone) new in version 0.26 @@ -1004,7 +1006,7 @@ class _OleDirectoryEntry: """ Return creation time of a directory entry. - return: None if modification time is null, a python datetime object + :returns: None if modification time is null, a python datetime object otherwise (UTC timezone) new in version 0.26 @@ -1021,7 +1023,8 @@ class OleFileIO: OLE container object This class encapsulates the interface to an OLE 2 structured - storage file. Use the {@link listdir} and {@link openstream} methods to + storage file. Use the :py:meth:`~PIL.OleFileIO.OleFileIO.listdir` and + :py:meth:`~PIL.OleFileIO.OleFileIO.openstream` methods to access the contents of this file. Object names are given as a list of strings, one for each subentry @@ -1049,8 +1052,8 @@ class OleFileIO: """ Constructor for OleFileIO class. - filename: file to open. - raise_defects: minimal level for defects to be raised as exceptions. + :param filename: file to open. + :param raise_defects: minimal level for defects to be raised as exceptions. (use DEFECT_FATAL for a typical application, DEFECT_INCORRECT for a security-oriented application, see source code for details) """ @@ -1069,13 +1072,13 @@ class OleFileIO: It may raise an IOError exception according to the minimal level chosen for the OleFileIO object. - defect_level: defect level, possible values are: + :param defect_level: defect level, possible values are: DEFECT_UNSURE : a case which looks weird, but not sure it's a defect DEFECT_POTENTIAL : a potential defect DEFECT_INCORRECT : an error according to specifications, but parsing can go on DEFECT_FATAL : an error which cannot be ignored, parsing is impossible - message: string describing the defect, used with raised exception. - exception_type: exception class to be raised, IOError by default + :param message: string describing the defect, used with raised exception. + :param exception_type: exception class to be raised, IOError by default """ # added by [PL] if defect_level >= self._raise_defects_level: @@ -1090,7 +1093,7 @@ class OleFileIO: Open an OLE2 file. Reads the header, FAT and directory. - filename: string-like or file-like object + :param filename: string-like or file-like object """ #[PL] check if filename is a string-like or file-like object: # (it is better to check for a read() method) @@ -1277,8 +1280,8 @@ class OleFileIO: Checks if a stream has not been already referenced elsewhere. This method should only be called once for each known stream, and only if stream size is not null. - first_sect: index of first sector of the stream in FAT - minifat: if True, stream is located in the MiniFAT, else in the FAT + :param first_sect: index of first sector of the stream in FAT + :param minifat: if True, stream is located in the MiniFAT, else in the FAT """ if minifat: debug('_check_duplicate_stream: sect=%d in MiniFAT' % first_sect) @@ -1372,8 +1375,9 @@ class OleFileIO: def loadfat_sect(self, sect): """ Adds the indexes of the given sector to the FAT - sect: string containing the first FAT sector, or array of long integers - return: index of last FAT sector. + + :param sect: string containing the first FAT sector, or array of long integers + :returns: index of last FAT sector. """ # a FAT sector is an array of ulong integers. if isinstance(sect, array.array): @@ -1506,8 +1510,9 @@ class OleFileIO: def getsect(self, sect): """ Read given sector from file on disk. - sect: sector index - returns a string containing the sector data. + + :param sect: sector index + :returns: a string containing the sector data. """ # [PL] this original code was wrong when sectors are 4KB instead of # 512 bytes: @@ -1531,7 +1536,8 @@ class OleFileIO: def loaddirectory(self, sect): """ Load the directory. - sect: sector index of directory stream. + + :param sect: sector index of directory stream. """ # The directory is stored in a standard # substream, independent of its size. @@ -1568,9 +1574,10 @@ class OleFileIO: Load a directory entry from the directory. This method should only be called once for each storage/stream when loading the directory. - sid: index of storage/stream in the directory. - return: a _OleDirectoryEntry object - raise: IOError if the entry has always been referenced. + + :param sid: index of storage/stream in the directory. + :returns: a _OleDirectoryEntry object + :exception IOError: if the entry has always been referenced. """ # check if SID is OK: if sid<0 or sid>=len(self.direntries): @@ -1599,9 +1606,9 @@ class OleFileIO: Open a stream, either in FAT or MiniFAT according to its size. (openstream helper) - start: index of first sector - size: size of stream (or nothing if size is unknown) - force_FAT: if False (default), stream will be opened in FAT or MiniFAT + :param start: index of first sector + :param size: size of stream (or nothing if size is unknown) + :param force_FAT: if False (default), stream will be opened in FAT or MiniFAT according to size. If True, it will always be opened in FAT. """ debug('OleFileIO.open(): sect=%d, size=%d, force_FAT=%s' % @@ -1631,11 +1638,11 @@ class OleFileIO: def _list(self, files, prefix, node, streams=True, storages=False): """ (listdir helper) - files: list of files to fill in - prefix: current location in storage tree (list of names) - node: current node (_OleDirectoryEntry object) - streams: bool, include streams if True (True by default) - new in v0.26 - storages: bool, include storages if True (False by default) - new in v0.26 + :param files: list of files to fill in + :param prefix: current location in storage tree (list of names) + :param node: current node (_OleDirectoryEntry object) + :param streams: bool, include streams if True (True by default) - new in v0.26 + :param storages: bool, include storages if True (False by default) - new in v0.26 (note: the root storage is never included) """ prefix = prefix + [node.name] @@ -1658,9 +1665,9 @@ class OleFileIO: """ Return a list of streams stored in this file - streams: bool, include streams if True (True by default) - new in v0.26 - storages: bool, include storages if True (False by default) - new in v0.26 - (note: the root storage is never included) + :param streams: bool, include streams if True (True by default) - new in v0.26 + :param storages: bool, include storages if True (False by default) - new in v0.26 + (note: the root storage is never included) """ files = [] self._list(files, [], self.root, streams, storages) @@ -1672,12 +1679,13 @@ class OleFileIO: Returns directory entry of given filename. (openstream helper) Note: this method is case-insensitive. - filename: path of stream in storage tree (except root entry), either: + :param filename: path of stream in storage tree (except root entry), either: + - a string using Unix path syntax, for example: 'storage_1/storage_1.2/stream' - a list of storage filenames, path to the desired stream/storage. Example: ['storage_1', 'storage_1.2', 'stream'] - return: sid of requested filename + :returns: sid of requested filename raise IOError if file not found """ @@ -1701,15 +1709,15 @@ class OleFileIO: """ Open a stream as a read-only file object (BytesIO). - filename: path of stream in storage tree (except root entry), either: + :param filename: path of stream in storage tree (except root entry), either: - a string using Unix path syntax, for example: 'storage_1/storage_1.2/stream' - a list of storage filenames, path to the desired stream/storage. Example: ['storage_1', 'storage_1.2', 'stream'] - return: file object (read-only) - raise IOError if filename not found, or if this is not a stream. + :returns: file object (read-only) + :exception IOError: if filename not found, or if this is not a stream. """ sid = self._find(filename) entry = self.direntries[sid] @@ -1723,8 +1731,8 @@ class OleFileIO: Test if given filename exists as a stream or a storage in the OLE container, and return its type. - filename: path of stream in storage tree. (see openstream for syntax) - return: False if object does not exist, its entry type (>0) otherwise: + :param filename: path of stream in storage tree. (see openstream for syntax) + :returns: False if object does not exist, its entry type (>0) otherwise: - STGTY_STREAM: a stream - STGTY_STORAGE: a storage @@ -1742,10 +1750,10 @@ class OleFileIO: """ Return modification time of a stream/storage. - filename: path of stream/storage in storage tree. (see openstream for - syntax) - return: None if modification time is null, a python datetime object - otherwise (UTC timezone) + :param filename: path of stream/storage in storage tree. (see openstream for + syntax) + :returns: None if modification time is null, a python datetime object + otherwise (UTC timezone) new in version 0.26 """ @@ -1758,10 +1766,10 @@ class OleFileIO: """ Return creation time of a stream/storage. - filename: path of stream/storage in storage tree. (see openstream for - syntax) - return: None if creation time is null, a python datetime object - otherwise (UTC timezone) + :param filename: path of stream/storage in storage tree. (see openstream for + syntax) + :returns: None if creation time is null, a python datetime object + otherwise (UTC timezone) new in version 0.26 """ @@ -1775,8 +1783,8 @@ class OleFileIO: Test if given filename exists as a stream or a storage in the OLE container. - filename: path of stream in storage tree. (see openstream for syntax) - return: True if object exist, else False. + :param filename: path of stream in storage tree. (see openstream for syntax) + :returns: True if object exist, else False. """ try: sid = self._find(filename) @@ -1789,9 +1797,10 @@ class OleFileIO: """ Return size of a stream in the OLE container, in bytes. - filename: path of stream in storage tree (see openstream for syntax) - return: size in bytes (long integer) - raise: IOError if file not found, TypeError if this is not a stream. + :param filename: path of stream in storage tree (see openstream for syntax) + :returns: size in bytes (long integer) + :exception IOError: if file not found + :exception TypeError: if this is not a stream """ sid = self._find(filename) entry = self.direntries[sid] @@ -1813,11 +1822,11 @@ class OleFileIO: """ Return properties described in substream. - filename: path of stream in storage tree (see openstream for syntax) - convert_time: bool, if True timestamps will be converted to Python datetime - no_conversion: None or list of int, timestamps not to be converted - (for example total editing time is not a real timestamp) - return: a dictionary of values indexed by id (integer) + :param filename: path of stream in storage tree (see openstream for syntax) + :param convert_time: bool, if True timestamps will be converted to Python datetime + :param no_conversion: None or list of int, timestamps not to be converted + (for example total editing time is not a real timestamp) + :returns: a dictionary of values indexed by id (integer) """ # make sure no_conversion is a list, just to simplify code below: if no_conversion == None: From 5db868e0602385319c75375bd9756e4fd71ab0fc Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 16 Jul 2014 14:20:15 +0300 Subject: [PATCH 073/311] Created with ImageMagick: convert lena.ppm lena.ras --- Tests/images/lena.ras | Bin 0 -> 49184 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/lena.ras diff --git a/Tests/images/lena.ras b/Tests/images/lena.ras new file mode 100644 index 0000000000000000000000000000000000000000..b5893e758a88b7fa8f358cb2ee1a4d4fc28c57bc GIT binary patch literal 49184 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 z Date: Wed, 16 Jul 2014 14:24:23 +0300 Subject: [PATCH 074/311] Sanity test for SunImagePlugin.py --- Tests/test_file_sun.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Tests/test_file_sun.py diff --git a/Tests/test_file_sun.py b/Tests/test_file_sun.py new file mode 100644 index 000000000..c52564f91 --- /dev/null +++ b/Tests/test_file_sun.py @@ -0,0 +1,23 @@ +from helper import unittest, PillowTestCase + +from PIL import Image + + +class TestFileSun(PillowTestCase): + + def test_sanity(self): + # Arrange + # Created with ImageMagick: convert lena.ppm lena.ras + test_file = "Tests/images/lena.ras" + + # Act + im = Image.open(test_file) + + # Assert + self.assertEqual(im.size, (128, 128)) + + +if __name__ == '__main__': + unittest.main() + +# End of file From 43dab9113e0088921cddec263d6621089a7c5114 Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 16 Jul 2014 14:26:30 +0300 Subject: [PATCH 075/311] flake8 --- PIL/SunImagePlugin.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/PIL/SunImagePlugin.py b/PIL/SunImagePlugin.py index 0db02ad25..e0a7aa6ee 100644 --- a/PIL/SunImagePlugin.py +++ b/PIL/SunImagePlugin.py @@ -29,6 +29,7 @@ i32 = _binary.i32be def _accept(prefix): return i32(prefix) == 0x59a66a95 + ## # Image plugin for Sun raster files. @@ -70,9 +71,9 @@ class SunImageFile(ImageFile.ImageFile): stride = (((self.size[0] * depth + 7) // 8) + 3) & (~3) if compression == 1: - self.tile = [("raw", (0,0)+self.size, offset, (rawmode, stride))] + self.tile = [("raw", (0, 0)+self.size, offset, (rawmode, stride))] elif compression == 2: - self.tile = [("sun_rle", (0,0)+self.size, offset, rawmode)] + self.tile = [("sun_rle", (0, 0)+self.size, offset, rawmode)] # # registry From 53b7f6294b157e5b54267132e5678aaaee9b949f Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Wed, 16 Jul 2014 11:36:56 -0400 Subject: [PATCH 076/311] First steps toward MPO support. Allows Pillow to distinguish between JPEGs and MPOs, and provides some MPO metadata handling. Does not yet handle multiple frames. --- PIL/Image.py | 13 ++++++++ PIL/JpegImagePlugin.py | 51 ++++++++++++++++++++++++------ PIL/MpoImagePlugin.py | 70 +++++++++++++++++++++++++++++++++++++++++ PIL/TiffTags.py | 32 +++++++++++++++++++ PIL/__init__.py | 1 + Tests/test_file_jpeg.py | 4 +++ Tests/test_file_mpo.py | 61 +++++++++++++++++++++++++++++++++++ 7 files changed, 222 insertions(+), 10 deletions(-) create mode 100644 PIL/MpoImagePlugin.py create mode 100644 Tests/test_file_mpo.py diff --git a/PIL/Image.py b/PIL/Image.py index ea8cc6155..2aa2a1f31 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -2233,6 +2233,19 @@ def open(fp, mode="r"): fp.seek(0) im = factory(fp, filename) _decompression_bomb_check(im.size) + if i == 'JPEG': + # Things are more complicated for JPEGs; we need to parse + # more deeply than 16 characters and check the contents of + # a potential MP header block to be sure. + mpheader = im._getmp() + try: + if mpheader[45057] > 1: + # It's actually an MPO + factory, accept = OPEN['MPO'] + im = factory(fp, filename) + except (TypeError, IndexError): + # It is really a JPEG + pass return im except (SyntaxError, IndexError, TypeError): # import traceback diff --git a/PIL/JpegImagePlugin.py b/PIL/JpegImagePlugin.py index a434c5581..7dfdfa308 100644 --- a/PIL/JpegImagePlugin.py +++ b/PIL/JpegImagePlugin.py @@ -36,7 +36,8 @@ __version__ = "0.6" import array import struct -from PIL import Image, ImageFile, _binary +import io +from PIL import Image, ImageFile, TiffImagePlugin, _binary from PIL.JpegPresets import presets from PIL._util import isStringType @@ -110,6 +111,9 @@ def APP(self, marker): 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:] def COM(self, marker): @@ -380,18 +384,22 @@ class JpegImageFile(ImageFile.ImageFile): def _getexif(self): return _getexif(self) + def _getmp(self): + return _getmp(self) + + +def _fixup(value): + # Helper function for _getexif() and _getmp() + if len(value) == 1: + return value[0] + return value + def _getexif(self): # Extract EXIF information. This method is highly experimental, # and is likely to be replaced with something better in a future # version. - from PIL import TiffImagePlugin - import io - def fixup(value): - if len(value) == 1: - return value[0] - return value # The EXIF record consists of a TIFF file embedded in a JPEG # application marker (!). try: @@ -405,7 +413,7 @@ def _getexif(self): info = TiffImagePlugin.ImageFileDirectory(head) info.load(file) for key, value in info.items(): - exif[key] = fixup(value) + exif[key] = _fixup(value) # get exif extension try: file.seek(exif[0x8769]) @@ -415,7 +423,7 @@ def _getexif(self): info = TiffImagePlugin.ImageFileDirectory(head) info.load(file) for key, value in info.items(): - exif[key] = fixup(value) + exif[key] = _fixup(value) # get gpsinfo extension try: file.seek(exif[0x8825]) @@ -426,9 +434,32 @@ def _getexif(self): info.load(file) exif[0x8825] = gps = {} for key, value in info.items(): - gps[key] = fixup(value) + gps[key] = _fixup(value) return exif + +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 plug-in. + + # 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 = io.BytesIO(data) + head = file.read(8) + mp = {} + # process dictionary + info = TiffImagePlugin.ImageFileDirectory(head) + info.load(file) + for key, value in info.items(): + mp[key] = _fixup(value) + return mp + + # -------------------------------------------------------------------- # stuff to save JPEG files diff --git a/PIL/MpoImagePlugin.py b/PIL/MpoImagePlugin.py new file mode 100644 index 000000000..18f32bd48 --- /dev/null +++ b/PIL/MpoImagePlugin.py @@ -0,0 +1,70 @@ +# +# 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. +# + +__version__ = "0.1" + +from PIL import Image, JpegImagePlugin + +def _accept(prefix): + return JpegImagePlugin._accept(prefix) + +def _save(im, fp, filename): + return JpegImagePlugin._save(im, fp, filename) + +## +# Image plugin for MPO images. + +class MpoImageFile(JpegImagePlugin.JpegImageFile): + + format = "MPO" + format_description = "MPO (CIPA DC-007)" + + def _open(self): + JpegImagePlugin.JpegImageFile._open(self) + self.__fp = self.fp # FIXME: hack + self.__rewind = self.fp.tell() + self.seek(0) # get ready to read first frame + + def seek(self, frame): + + if frame == 0: + # rewind + self.__offset = 0 + self.dispose = None + self.__frame = -1 + self.__fp.seek(self.__rewind) + + if frame != self.__frame + 1: + raise ValueError("cannot seek to frame %d" % frame) + self.__frame = frame + + def tell(self): + return self.__frame + + +# -------------------------------------------------------------------q- +# Registry stuff + +Image.register_open("MPO", MpoImageFile, _accept) +Image.register_save("MPO", _save) + +Image.register_extension("MPO", ".mpo") + +Image.register_mime("MPO", "image/mpo") diff --git a/PIL/TiffTags.py b/PIL/TiffTags.py index 92a4b5afc..ccbd56507 100644 --- a/PIL/TiffTags.py +++ b/PIL/TiffTags.py @@ -147,6 +147,38 @@ TAGS = { # ICC Profile 34675: "ICCProfile", + # Additional Exif Info + 36864: "ExifVersion", + 36867: "DateTimeOriginal", + 36868: "DateTImeDigitized", + 37121: "ComponentsConfiguration", + 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", + 40960: "FlashPixVersion", + 40961: "ColorSpace", + 40962: "PixelXDimension", + 40963: "PixelYDimension", + 40965: "InteroperabilityIFDPointer", + 42016: "ImageUniqueID", + + # MP Info + 45056: "MPFVersion", + 45057: "NumberOfImages", + 45058: "MPEntry", + 45059: "ImageUIDList", + 45060: "TotalFrames", + # Adobe DNG 50706: "DNGVersion", 50707: "DNGBackwardVersion", diff --git a/PIL/__init__.py b/PIL/__init__.py index d446aa19b..56edaf247 100644 --- a/PIL/__init__.py +++ b/PIL/__init__.py @@ -36,6 +36,7 @@ _plugins = ['BmpImagePlugin', 'McIdasImagePlugin', 'MicImagePlugin', 'MpegImagePlugin', + 'MpoImagePlugin', 'MspImagePlugin', 'PalmImagePlugin', 'PcdImagePlugin', diff --git a/Tests/test_file_jpeg.py b/Tests/test_file_jpeg.py index 69c07d2dc..3bf757332 100644 --- a/Tests/test_file_jpeg.py +++ b/Tests/test_file_jpeg.py @@ -216,6 +216,10 @@ class TestFileJpeg(PillowTestCase): info = im._getexif() self.assertEqual(info[305], 'Adobe Photoshop CS Macintosh') + def test_mp(self): + im = Image.open("Tests/images/pil_sample_rgb.jpg") + self.assertIsNone(im._getmp()) + def test_quality_keep(self): im = Image.open("Tests/images/lena.jpg") f = self.tempfile('temp.jpg') diff --git a/Tests/test_file_mpo.py b/Tests/test_file_mpo.py new file mode 100644 index 000000000..17f9a66fb --- /dev/null +++ b/Tests/test_file_mpo.py @@ -0,0 +1,61 @@ +from helper import unittest, PillowTestCase +from io import BytesIO +from PIL import Image + + +test_files = ["Tests/images/sugarshack.mpo", "Tests/images/frozenpond.mpo"] + + +class TestFileMpo(PillowTestCase): + + def setUp(self): + codecs = dir(Image.core) + if "jpeg_encoder" not in codecs or "jpeg_decoder" not in codecs: + self.skipTest("jpeg support not available") + + def roundtrip(self, im, **options): + out = BytesIO() + im.save(out, "MPO", **options) + bytes = out.tell() + out.seek(0) + im = Image.open(out) + im.bytes = bytes # for testing only + return im + + def test_sanity(self): + for test_file in test_files: + im = Image.open(test_file) + im.load() + self.assertEqual(im.mode, "RGB") + self.assertEqual(im.size, (640, 480)) + self.assertEqual(im.format, "MPO") + + def test_app(self): + for test_file in test_files: + # Test APP/COM reader (@PIL135) + im = Image.open(test_file) + self.assertEqual(im.applist[0][0], 'APP1') + self.assertEqual(im.applist[1][0], 'APP2') + self.assertEqual(im.applist[1][1][:16], + b'MPF\x00MM\x00*\x00\x00\x00\x08\x00\x03\xb0\x00') + self.assertEqual(len(im.applist), 2) + + def test_exif(self): + for test_file in test_files: + im = Image.open(test_file) + info = im._getexif() + self.assertEqual(info[272], 'Nintendo 3DS') + self.assertEqual(info[296], 2) + self.assertEqual(info[34665], 188) + + def test_mp(self): + for test_file in test_files: + im = Image.open(test_file) + info = im._getmp() + self.assertEqual(info[45056], '0100') + self.assertEqual(info[45057], 2) + +if __name__ == '__main__': + unittest.main() + +# End of file From cc27e8d532e2ef603fa283d68ec1b56896d7d858 Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 16 Jul 2014 21:26:47 +0300 Subject: [PATCH 077/311] Created with ImageMagick then renamed: convert lena.ppm lena.sgi --- Tests/images/lena.rgb | Bin 0 -> 54179 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/lena.rgb diff --git a/Tests/images/lena.rgb b/Tests/images/lena.rgb new file mode 100644 index 0000000000000000000000000000000000000000..82552c7586247c2bceaff3562e247bd097c8fe9d GIT binary patch literal 54179 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 H((eBO+M#Kh literal 0 HcmV?d00001 From e29c2d49c0f94afaf801b3e96ed80c6113f5fe9d Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 16 Jul 2014 21:27:06 +0300 Subject: [PATCH 078/311] Created with ImageMagick then renamed: convert lena.ppm -monochrome lena.sgi --- Tests/images/lena.bw | Bin 0 -> 8507 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/lena.bw diff --git a/Tests/images/lena.bw b/Tests/images/lena.bw new file mode 100644 index 0000000000000000000000000000000000000000..e2981ef5c3174ad1f8dccec0ec30944cdec596ab GIT binary patch literal 8507 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 Date: Wed, 16 Jul 2014 21:27:31 +0300 Subject: [PATCH 079/311] Created with ImageMagick: convert transparent.png transparent.sgi --- Tests/images/transparent.sgi | Bin 0 -> 43896 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/transparent.sgi diff --git a/Tests/images/transparent.sgi b/Tests/images/transparent.sgi new file mode 100644 index 0000000000000000000000000000000000000000..482572df5561858412faa3e2980ad57548206cf7 GIT binary patch literal 43896 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 literal 0 HcmV?d00001 From 2b3d655833140972659d8077fdf91f4033a2a239 Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 16 Jul 2014 21:28:17 +0300 Subject: [PATCH 080/311] Sanity tests for SgiImagePlugin.py --- Tests/test_file_sgi.py | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Tests/test_file_sgi.py diff --git a/Tests/test_file_sgi.py b/Tests/test_file_sgi.py new file mode 100644 index 000000000..395b3b10d --- /dev/null +++ b/Tests/test_file_sgi.py @@ -0,0 +1,52 @@ +from helper import unittest, PillowTestCase + +from PIL import Image + + +class TestFileSgi(PillowTestCase): + + def sanity(self, filename, expected_mode, expected_size=(128, 128)): + # Act + im = Image.open(filename) + + # Assert + self.assertEqual(im.mode, expected_mode) + self.assertEqual(im.size, expected_size) + print filename, im.mode + + def test_rgb(self): + # Arrange + # Created with ImageMagick then renamed: + # convert lena.ppm lena.sgi + test_file = "Tests/images/lena.rgb" + expected_mode = "RGB" + + # Act / Assert + self.sanity(test_file, expected_mode) + + def test_l(self): + # Arrange + # Created with ImageMagick then renamed: + # convert lena.ppm -monochrome lena.sgi + test_file = "Tests/images/lena.bw" + expected_mode = "L" + + # Act / Assert + self.sanity(test_file, expected_mode) + + def test_rgba(self): + # Arrange + # Created with ImageMagick: + # convert transparent.png transparent.sgi + test_file = "Tests/images/transparent.sgi" + expected_mode = "RGBA" + expected_size = (200, 150) + + # Act / Assert + self.sanity(test_file, expected_mode, expected_size) + + +if __name__ == '__main__': + unittest.main() + +# End of file From 3322bfbad0ed8eb137cbe5635c263f700fff2146 Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 16 Jul 2014 21:30:41 +0300 Subject: [PATCH 081/311] flake8 --- PIL/SgiImagePlugin.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/PIL/SgiImagePlugin.py b/PIL/SgiImagePlugin.py index b60df473c..bf3c18a43 100644 --- a/PIL/SgiImagePlugin.py +++ b/PIL/SgiImagePlugin.py @@ -31,6 +31,7 @@ i32 = _binary.i32be def _accept(prefix): return i16(prefix) == 474 + ## # Image plugin for SGI images. @@ -65,17 +66,18 @@ class SgiImageFile(ImageFile.ImageFile): # size self.size = i16(s[6:]), i16(s[8:]) - # decoder info if compression == 0: offset = 512 pagesize = self.size[0]*self.size[1]*layout[0] self.tile = [] for layer in self.mode: - self.tile.append(("raw", (0,0)+self.size, offset, (layer,0,-1))) + self.tile.append( + ("raw", (0, 0)+self.size, offset, (layer, 0, -1))) offset = offset + pagesize elif compression == 1: - self.tile = [("sgi_rle", (0,0)+self.size, 512, (self.mode, 0, -1))] + self.tile = [ + ("sgi_rle", (0, 0)+self.size, 512, (self.mode, 0, -1))] # # registry @@ -86,4 +88,4 @@ Image.register_extension("SGI", ".bw") Image.register_extension("SGI", ".rgb") Image.register_extension("SGI", ".rgba") -Image.register_extension("SGI", ".sgi") # really? +Image.register_extension("SGI", ".sgi") From bc34bda2b8d89db7d13d11ec47ac63919e34775e Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 16 Jul 2014 21:35:43 +0300 Subject: [PATCH 082/311] Remove stray print --- Tests/test_file_sgi.py | 1 - 1 file changed, 1 deletion(-) diff --git a/Tests/test_file_sgi.py b/Tests/test_file_sgi.py index 395b3b10d..e94f0d989 100644 --- a/Tests/test_file_sgi.py +++ b/Tests/test_file_sgi.py @@ -12,7 +12,6 @@ class TestFileSgi(PillowTestCase): # Assert self.assertEqual(im.mode, expected_mode) self.assertEqual(im.size, expected_size) - print filename, im.mode def test_rgb(self): # Arrange From 1ff695873f1dc9cf880007df2b9b0f17c63a1281 Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 16 Jul 2014 23:44:35 +0300 Subject: [PATCH 083/311] Cursor image by Miss Mycroft, 'Released under the Release to Public Domain license' http://www.rw-designer.com/cursor-detail/61757 --- Tests/images/deerstalker.cur | Bin 0 -> 4286 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/deerstalker.cur diff --git a/Tests/images/deerstalker.cur b/Tests/images/deerstalker.cur new file mode 100644 index 0000000000000000000000000000000000000000..16e4bfa52e6c870feba0582df6812b668edf2ed3 GIT binary patch literal 4286 zcmeHJSxj727`{joTKj-jOVvby)>>-X#1|Wv)Im*4fxs{@Fw8K+Y|K9FGQ%<~Qn00z zrB-NC2BF3l($*IrTyPMONEm#u1vOf&vS^!-v=o$WxcC14=fD`+R46#{iJN?L)_eZ% zeE)KXVIE@qn2->LKJAY%Oc3_M5Fv0QJ25fw zhOarG#(@{w&yQFv1~8h^5Lz%<^q|vgz+}>cTAfO{BqWHyX3M)hG&H32B?r%fC#s;x z206JIkezFVtZXZ!XP6LXw5GG(570W1f^1rK1f2pBtw!!4AIe%5E*%dtExIa^;K`r2OiJ-3;%@& z&vPLytxoP}MJbe(JHVEo4QABeduOdy4KkU8`ar2tKw@G%gonQd3F3H&h&T+zCB^ey zU0qcepF7se!`1n@n`lsZtPJvOS&R0yDr#4yR#5Hbav5#KViDRsgt{nD6B*?ZD~yG@ z`r2P_-2B6W@f3>iTML(w(cgsir%tjJm8DSRuv7bby%vZM$o=JVDM%zFCsHT}p)dwi zDvV2v2@P4t`M9`PP+`0@InT1=Rs1G&FiqX4tn00u)E1<^r; zd1y4~(2fjsms0)pxSo}rLHCl_XlOh=P3ouj%(b@ouArvw1m@VHU2->_PK(f>-U`Zr z+@EMe^3rNGK}Mz(ELJ1U)k~Kz_F)ZQlkb;v#9Y|ce(}P%HQh*kPxLpN7yE>V0q>8s z5dC8Y6Y4|m{#ITN-6KBMF8QCtKhZb^eVmbLfjoOI zjT6Fy=uuc?pPQV#b6_Q#PcqCkToD1ur?D*&b@(!?QPOrw{$De+%pRBFo@@zSvH)tU~A&%BPQM?d@aWP;o z$e}Sp=E?Z|mgb-F`;FII^#ODcJk2m3+zA9rn%wmw-eYrbZ;y-QVrG^Fq_QM9bofnL zcf!J+gM$ZOftOxBfVD?Ne9yW%UBg$deEad}*vNL6|@!sBDBcsEK&Sq!dnKKPHk5-gVz1MJhw)I>~&*0Eim3PlN+ke&k-t$mXKLBnM z4;;}ITXx-b#e4Qrtc82W|91-y_}mEq;28jxDTO&kfCxnRBN&`xf|nrRv6f&G5#XN( crc{6k?q Date: Wed, 16 Jul 2014 23:45:18 +0300 Subject: [PATCH 084/311] Sanity test for CurImagePlugin.py --- Tests/test_file_cur.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Tests/test_file_cur.py diff --git a/Tests/test_file_cur.py b/Tests/test_file_cur.py new file mode 100644 index 000000000..5dc096968 --- /dev/null +++ b/Tests/test_file_cur.py @@ -0,0 +1,23 @@ +from helper import unittest, PillowTestCase + +from PIL import Image, CurImagePlugin + + +class TestFileCur(PillowTestCase): + + def test_sanity(self): + # Arrange + test_file = "Tests/images/deerstalker.cur" + + # Act + im = Image.open(test_file) + + # Assert + self.assertEqual(im.size, (32, 32)) + self.assertIsInstance(im, CurImagePlugin.CurImageFile) + + +if __name__ == '__main__': + unittest.main() + +# End of file From 9acbaa4aeecd7a6fed957a7e20c27cda5bd88caf Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 17 Jul 2014 00:12:54 +0300 Subject: [PATCH 085/311] Flake8 and fix typo --- PIL/CurImagePlugin.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/PIL/CurImagePlugin.py b/PIL/CurImagePlugin.py index 4cf2882e2..0178957ee 100644 --- a/PIL/CurImagePlugin.py +++ b/PIL/CurImagePlugin.py @@ -33,6 +33,7 @@ i32 = _binary.i32le def _accept(prefix): return prefix[:4] == b"\0\0\2\0" + ## # Image plugin for Windows Cursor files. @@ -48,7 +49,7 @@ class CurImageFile(BmpImagePlugin.BmpImageFile): # check magic s = self.fp.read(6) if not _accept(s): - raise SyntaxError("not an CUR file") + raise SyntaxError("not a CUR file") # pick the largest cursor in the file m = b"" @@ -58,14 +59,14 @@ class CurImageFile(BmpImagePlugin.BmpImageFile): m = s elif i8(s[0]) > i8(m[0]) and i8(s[1]) > i8(m[1]): m = s - #print "width", i8(s[0]) - #print "height", i8(s[1]) - #print "colors", i8(s[2]) - #print "reserved", i8(s[3]) - #print "hotspot x", i16(s[4:]) - #print "hotspot y", i16(s[6:]) - #print "bytes", i32(s[8:]) - #print "offset", i32(s[12:]) + # print "width", i8(s[0]) + # print "height", i8(s[1]) + # print "colors", i8(s[2]) + # print "reserved", i8(s[3]) + # print "hotspot x", i16(s[4:]) + # print "hotspot y", i16(s[6:]) + # print "bytes", i32(s[8:]) + # print "offset", i32(s[12:]) # load as bitmap self._bitmap(i32(m[12:]) + offset) @@ -73,7 +74,7 @@ class CurImageFile(BmpImagePlugin.BmpImageFile): # 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 + self.tile[0] = d, (0, 0)+self.size, o, a return From 84b13ff1ae8156e248d76a8e5637504056106666 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 17 Jul 2014 01:19:52 +0300 Subject: [PATCH 086/311] Created with ImageMagick: convert lena.ppm lena.dcx --- Tests/images/lena.dcx | Bin 0 -> 62138 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/lena.dcx diff --git a/Tests/images/lena.dcx b/Tests/images/lena.dcx new file mode 100644 index 0000000000000000000000000000000000000000..d05370be8e42bc69430ce6ced5f4757c700215b1 GIT binary patch literal 62138 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 Date: Thu, 17 Jul 2014 01:20:19 +0300 Subject: [PATCH 087/311] Tests for DcxImagePlugin.dcx --- Tests/test_file_dcx.py | 45 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Tests/test_file_dcx.py diff --git a/Tests/test_file_dcx.py b/Tests/test_file_dcx.py new file mode 100644 index 000000000..9a6183651 --- /dev/null +++ b/Tests/test_file_dcx.py @@ -0,0 +1,45 @@ +from helper import unittest, PillowTestCase, lena + +from PIL import Image, DcxImagePlugin + +# Created with ImageMagick: convert lena.ppm lena.dcx +TEST_FILE = "Tests/images/lena.dcx" + + +class TestFileDcx(PillowTestCase): + + def test_sanity(self): + # Arrange + + # Act + im = Image.open(TEST_FILE) + + # Assert + self.assertEqual(im.size, (128, 128)) + self.assertIsInstance(im, DcxImagePlugin.DcxImageFile) + orig = lena() + self.assert_image_equal(im, orig) + + def test_tell(self): + # Arrange + im = Image.open(TEST_FILE) + + # Act + frame = im.tell() + + # Assert + self.assertEqual(frame, 0) + + def test_seek_too_far(self): + # Arrange + im = Image.open(TEST_FILE) + frame = 999 # too big on purpose + + # Act / Assert + self.assertRaises(EOFError, lambda: im.seek(frame)) + + +if __name__ == '__main__': + unittest.main() + +# End of file From 3c8f858aadbad93dc02aae611fd96e0ce8ecf02f Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 17 Jul 2014 01:21:56 +0300 Subject: [PATCH 088/311] flake8 --- PIL/DcxImagePlugin.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/PIL/DcxImagePlugin.py b/PIL/DcxImagePlugin.py index 631875e68..0940b3935 100644 --- a/PIL/DcxImagePlugin.py +++ b/PIL/DcxImagePlugin.py @@ -27,13 +27,15 @@ from PIL import Image, _binary from PIL.PcxImagePlugin import PcxImageFile -MAGIC = 0x3ADE68B1 # QUIZ: what's this value, then? +MAGIC = 0x3ADE68B1 # QUIZ: what's this value, then? i32 = _binary.i32le + def _accept(prefix): return i32(prefix) == MAGIC + ## # Image plugin for the Intel DCX format. From 665293e9b9ddf19264f55e26498fc7092d9c96be Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 17 Jul 2014 02:38:57 +0300 Subject: [PATCH 089/311] More tests for XpmImagePlugin.py --- Tests/test_file_xpm.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Tests/test_file_xpm.py b/Tests/test_file_xpm.py index d79f5fbda..7eef04676 100644 --- a/Tests/test_file_xpm.py +++ b/Tests/test_file_xpm.py @@ -16,6 +16,17 @@ class TestFileXpm(PillowTestCase): self.assertEqual(im.size, (128, 128)) self.assertEqual(im.format, "XPM") + def test_load_read(self): + # Arrange + im = Image.open(file) + dummy_bytes = 1 + + # Act + data = im.load_read(dummy_bytes) + + # Assert + self.assertEqual(len(data), 16384) + if __name__ == '__main__': unittest.main() From 8db043b35f7d587d4a5db23e72db3a335dc88eae Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 17 Jul 2014 02:40:14 +0300 Subject: [PATCH 090/311] flake8 --- PIL/XpmImagePlugin.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/PIL/XpmImagePlugin.py b/PIL/XpmImagePlugin.py index 701a23b64..517580895 100644 --- a/PIL/XpmImagePlugin.py +++ b/PIL/XpmImagePlugin.py @@ -29,6 +29,7 @@ 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. @@ -86,9 +87,9 @@ class XpmImageFile(ImageFile.ImageFile): 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) + palette[c] = (o8((rgb >> 16) & 255) + + o8((rgb >> 8) & 255) + + o8(rgb & 255)) else: # unknown colour raise ValueError("cannot read this XPM file") From 1e24dcd3170193ff3485f6053a217cb000f27af3 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 17 Jul 2014 10:42:43 +0300 Subject: [PATCH 091/311] Check some pixel colors to ensure image is loaded properly --- Tests/test_file_cur.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Tests/test_file_cur.py b/Tests/test_file_cur.py index 5dc096968..54bfe84fe 100644 --- a/Tests/test_file_cur.py +++ b/Tests/test_file_cur.py @@ -15,6 +15,10 @@ class TestFileCur(PillowTestCase): # Assert self.assertEqual(im.size, (32, 32)) self.assertIsInstance(im, CurImagePlugin.CurImageFile) + # Check some pixel colors to ensure image is loaded properly + self.assertEqual(im.getpixel((10, 1)), (0, 0, 0)) + self.assertEqual(im.getpixel((11, 1)), (253, 254, 254)) + self.assertEqual(im.getpixel((16, 16)), (84, 87, 86)) if __name__ == '__main__': From 5857053be40a3f0f8dd9802497b8c037b9b38821 Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Thu, 17 Jul 2014 12:30:45 -0400 Subject: [PATCH 092/311] Activated MPO detection. Added MPO to the list to be checked. Removed the superfluous second os import. Added OS X & Komodo work files to .gitignore. --- .gitignore | 6 ++++++ PIL/Image.py | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a0ba1b4c1..95ed4bac5 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,9 @@ docs/_build/ \#*# .#* +#Komodo +*.komodoproject + +#OS +.DS_Store + diff --git a/PIL/Image.py b/PIL/Image.py index 2aa2a1f31..b4aa11e20 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -352,6 +352,10 @@ def preinit(): from PIL import JpegImagePlugin except ImportError: pass + try: + from PIL import MpoImagePlugin + except ImportError: + pass try: from PIL import PpmImagePlugin except ImportError: @@ -554,7 +558,6 @@ class Image: self.readonly = 0 def _dump(self, file=None, format=None): - import os import tempfile suffix = '' if format: @@ -2228,6 +2231,7 @@ def open(fp, mode="r"): for i in ID: try: + print(ID) factory, accept = OPEN[i] if not accept or accept(prefix): fp.seek(0) From cf8f191c54aaec0d39938edbb12f3fd37b16aef6 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Thu, 17 Jul 2014 09:51:44 -0700 Subject: [PATCH 093/311] Updated Changes.rst [ci skip] --- CHANGES.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 21166f1b4..4ea730cf6 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,7 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ -- More tests for SpiderImagePlugin.py +- More tests for SpiderImagePlugin, CurImagePlugin, DcxImagePlugin [hugovk] - Doc cleanup From 14d1ac6389fc47f9c44210991cce990f68d0b185 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 17 Jul 2014 23:23:50 +0300 Subject: [PATCH 094/311] Rename bad variable name 'file' to 'TEST_FILE', remove unused 'data' variable --- Tests/test_file_xpm.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Tests/test_file_xpm.py b/Tests/test_file_xpm.py index 7eef04676..16a811a4c 100644 --- a/Tests/test_file_xpm.py +++ b/Tests/test_file_xpm.py @@ -3,14 +3,13 @@ from helper import unittest, PillowTestCase from PIL import Image # sample ppm stream -file = "Tests/images/lena.xpm" -data = open(file, "rb").read() +TEST_FILE = "Tests/images/lena.xpm" class TestFileXpm(PillowTestCase): def test_sanity(self): - im = Image.open(file) + im = Image.open(TEST_FILE) im.load() self.assertEqual(im.mode, "P") self.assertEqual(im.size, (128, 128)) @@ -18,7 +17,7 @@ class TestFileXpm(PillowTestCase): def test_load_read(self): # Arrange - im = Image.open(file) + im = Image.open(TEST_FILE) dummy_bytes = 1 # Act From d30eb007ef26dff16d788b2070737f3bb0f2c2b3 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Fri, 18 Jul 2014 10:40:08 -0700 Subject: [PATCH 095/311] Fix scrambled XPM image, don't mmap when load_read/load_seek is defined. Fixes #806 --- PIL/ImageFile.py | 34 +++++++++++++++++++--------------- Tests/test_file_xpm.py | 5 ++++- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/PIL/ImageFile.py b/PIL/ImageFile.py index adb27f2bd..5e4745d76 100644 --- a/PIL/ImageFile.py +++ b/PIL/ImageFile.py @@ -133,11 +133,27 @@ class ImageFile(Image.Image): 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 - if self.filename and len(self.tile) == 1 and not hasattr(sys, 'pypy_version_info'): - # As of pypy 2.1.0, memory mapping was failing here. + # 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 d, e, o, a = self.tile[0] if d == "raw" and a[0] == self.mode and a[0] in Image._MAPMODES: @@ -165,19 +181,7 @@ class ImageFile(Image.Image): self.load_prepare() - # look for read/seek overrides - try: - read = self.load_read - except AttributeError: - read = self.fp.read - - try: - seek = self.load_seek - except AttributeError: - seek = self.fp.seek - if not self.map: - # sort tiles in file order self.tile.sort(key=_tilesort) diff --git a/Tests/test_file_xpm.py b/Tests/test_file_xpm.py index 16a811a4c..4fc393808 100644 --- a/Tests/test_file_xpm.py +++ b/Tests/test_file_xpm.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase +from helper import unittest, PillowTestCase, lena from PIL import Image @@ -15,6 +15,9 @@ class TestFileXpm(PillowTestCase): self.assertEqual(im.size, (128, 128)) self.assertEqual(im.format, "XPM") + #large error due to quantization->44 colors. + self.assert_image_similar(im.convert('RGB'), lena('RGB'), 60) + def test_load_read(self): # Arrange im = Image.open(TEST_FILE) From 31f8da78b7395b64bee8077a81a6d30b3084cf2c Mon Sep 17 00:00:00 2001 From: Hugo Date: Sat, 19 Jul 2014 00:31:43 +0300 Subject: [PATCH 096/311] Update CHANGES.rst [CI skip] --- CHANGES.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 4ea730cf6..da7ffcb84 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,8 +4,8 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ -- More tests for SpiderImagePlugin, CurImagePlugin, DcxImagePlugin - [hugovk] +- Fix Scrambled XPM #808 + [wiredfool] - Doc cleanup [wiredfool] @@ -16,7 +16,7 @@ Changelog (Pillow) - Added docs for ExifTags [Wintermute3] -- More tests for ImageFont, ImageMath, and _util +- More tests for CurImagePlugin, DcxImagePlugin, ImageFont, ImageMath, SpiderImagePlugin, XpmImagePlugin and _util [hugovk] - Fix return value of FreeTypeFont.textsize() does not include font offsets From 3c39a44f6e5331432a86d486449d7019f90728a3 Mon Sep 17 00:00:00 2001 From: hugovk Date: Sat, 19 Jul 2014 01:45:57 +0300 Subject: [PATCH 097/311] Make _make_gamma_lut() public --- PIL/ImagePalette.py | 2 +- Tests/test_imagepalette.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/PIL/ImagePalette.py b/PIL/ImagePalette.py index ee3c22544..67bf593e6 100644 --- a/PIL/ImagePalette.py +++ b/PIL/ImagePalette.py @@ -134,7 +134,7 @@ def _make_linear_lut(black, white): return lut -def _make_gamma_lut(exp, mode="RGB"): +def make_gamma_lut(exp): lut = [] for i in range(256): lut.append(int(((i / 255.0) ** exp) * 255.0 + 0.5)) diff --git a/Tests/test_imagepalette.py b/Tests/test_imagepalette.py index be82f4dcb..af742edd1 100644 --- a/Tests/test_imagepalette.py +++ b/Tests/test_imagepalette.py @@ -44,6 +44,25 @@ class TestImagePalette(PillowTestCase): self.assertIsInstance(p, ImagePalette) self.assertEqual(p.palette, palette.tobytes()) + def test_make_gamma_lut(self): + # Arrange + from PIL.ImagePalette import make_gamma_lut + exp = 5 + + # Act + lut = make_gamma_lut(exp) + + # Assert + self.assertIsInstance(lut, list) + self.assertEqual(len(lut), 256) + # Check a few values + self.assertEqual(lut[0], 0) + self.assertEqual(lut[63], 0) + self.assertEqual(lut[127], 8) + self.assertEqual(lut[191], 60) + self.assertEqual(lut[255], 255) + + if __name__ == '__main__': unittest.main() From 098e4c36d6da27f73ebe0fbf3770a3150f6ca5a3 Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Fri, 18 Jul 2014 22:02:14 -0400 Subject: [PATCH 098/311] Further populated Exif values in TiffTags. Added lots more of the possible Exif values per the EXIF specifications. --- PIL/TiffTags.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/PIL/TiffTags.py b/PIL/TiffTags.py index ccbd56507..f4420aacc 100644 --- a/PIL/TiffTags.py +++ b/PIL/TiffTags.py @@ -148,10 +148,24 @@ TAGS = { 34675: "ICCProfile", # Additional Exif Info + 33434: "ExposureTime", + 33437: "FNumber", + 34850: "ExposureProgram", + 34852: "SpectralSensitivity", + 34853: "GPSInfoIFD", + 34855: "ISOSpeedRatings", + 34856: "OECF", + 34864: "SensitivityType", + 34865: "StandardOutputSensitivity", + 34866: "RecommendedExposureIndex", + 34867: "ISOSpeed", + 34868: "ISOSpeedLatitudeyyy", + 34869: "ISOSpeedLatitudezzz", 36864: "ExifVersion", 36867: "DateTimeOriginal", 36868: "DateTImeDigitized", 37121: "ComponentsConfiguration", + 37122: "CompressedBitsPerPixel", 37377: "ShutterSpeedValue", 37378: "ApertureValue", 37379: "BrightnessValue", @@ -165,12 +179,46 @@ TAGS = { 37396: "SubjectArea", 37500: "MakerNote", 37510: "UserComment", + 37520: "SubSec", + 37521: "SubSecTimeOriginal", + 37522: "SubsecTimeDigitized", 40960: "FlashPixVersion", 40961: "ColorSpace", 40962: "PixelXDimension", 40963: "PixelYDimension", - 40965: "InteroperabilityIFDPointer", + 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", + 42240: "Gamma", # MP Info 45056: "MPFVersion", From 65cbdae4492061f824bdbb45ed9450d91ad85162 Mon Sep 17 00:00:00 2001 From: hugovk Date: Sat, 19 Jul 2014 18:46:12 +0300 Subject: [PATCH 099/311] Run nose in verbose mode so we can see the tests being run/skipped. Override __str__ in PillowTestCase for nicer output, and make sure all tests are derived from PillowTestCase. --- .travis.yml | 4 ++-- Tests/helper.py | 4 ++++ Tests/test_image_tobytes.py | 4 ++-- Tests/test_pyroma.py | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index c9c1e75a1..942ee95c9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,11 +33,11 @@ script: # Don't cover PyPy: it fails intermittently and is x5.8 slower (#640) - if [ "$TRAVIS_PYTHON_VERSION" == "pypy" ]; then time python selftest.py; fi - - if [ "$TRAVIS_PYTHON_VERSION" == "pypy" ]; then time nosetests Tests/test_*.py; fi + - if [ "$TRAVIS_PYTHON_VERSION" == "pypy" ]; then time nosetests -v Tests/test_*.py; fi # Cover the others - if [ "$TRAVIS_PYTHON_VERSION" != "pypy" ]; then time coverage run --append --include=PIL/* selftest.py; fi - - if [ "$TRAVIS_PYTHON_VERSION" != "pypy" ]; then time coverage run --append --include=PIL/* -m nose Tests/test_*.py; fi + - if [ "$TRAVIS_PYTHON_VERSION" != "pypy" ]; then time coverage run --append --include=PIL/* -m nose -v Tests/test_*.py; fi after_success: - coverage report diff --git a/Tests/helper.py b/Tests/helper.py index c00e105e4..64f29bd5d 100644 --- a/Tests/helper.py +++ b/Tests/helper.py @@ -19,6 +19,10 @@ class PillowTestCase(unittest.TestCase): # holds last result object passed to run method: self.currentResult = None + # Nicer output for --verbose + def __str__(self): + return self.__class__.__name__ + "." + self._testMethodName + def run(self, result=None): self.currentResult = result # remember result for use later unittest.TestCase.run(self, result) # call superclass run method diff --git a/Tests/test_image_tobytes.py b/Tests/test_image_tobytes.py index 3be9128c1..6dbf7d6f2 100644 --- a/Tests/test_image_tobytes.py +++ b/Tests/test_image_tobytes.py @@ -1,7 +1,7 @@ -from helper import unittest, lena +from helper import unittest, PillowTestCase, lena -class TestImageToBytes(unittest.TestCase): +class TestImageToBytes(PillowTestCase): def test_sanity(self): data = lena().tobytes() diff --git a/Tests/test_pyroma.py b/Tests/test_pyroma.py index c10156cc0..295ef1057 100644 --- a/Tests/test_pyroma.py +++ b/Tests/test_pyroma.py @@ -7,7 +7,7 @@ except ImportError: pass -class TestPyroma(unittest.TestCase): +class TestPyroma(PillowTestCase): def setUp(self): try: From 64bf7d466f20e0036cc6a45d8bbbee0f9a0f03ac Mon Sep 17 00:00:00 2001 From: hugovk Date: Sat, 19 Jul 2014 18:57:21 +0300 Subject: [PATCH 100/311] Fail fast: -x to stop running tests after the first error or failure --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 942ee95c9..09e523c39 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,11 +33,11 @@ script: # Don't cover PyPy: it fails intermittently and is x5.8 slower (#640) - if [ "$TRAVIS_PYTHON_VERSION" == "pypy" ]; then time python selftest.py; fi - - if [ "$TRAVIS_PYTHON_VERSION" == "pypy" ]; then time nosetests -v Tests/test_*.py; fi + - if [ "$TRAVIS_PYTHON_VERSION" == "pypy" ]; then time nosetests -vx Tests/test_*.py; fi # Cover the others - if [ "$TRAVIS_PYTHON_VERSION" != "pypy" ]; then time coverage run --append --include=PIL/* selftest.py; fi - - if [ "$TRAVIS_PYTHON_VERSION" != "pypy" ]; then time coverage run --append --include=PIL/* -m nose -v Tests/test_*.py; fi + - if [ "$TRAVIS_PYTHON_VERSION" != "pypy" ]; then time coverage run --append --include=PIL/* -m nose -vx Tests/test_*.py; fi after_success: - coverage report From 0c12058e37fdc9decf8aa98bcced71cbdfada55c Mon Sep 17 00:00:00 2001 From: hugovk Date: Sat, 19 Jul 2014 20:21:18 +0300 Subject: [PATCH 101/311] Use unique class names to match filenames --- Tests/test_image_array.py | 2 +- Tests/test_imagefile.py | 2 +- Tests/test_imagegrab.py | 4 ++-- Tests/test_lib_image.py | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Tests/test_image_array.py b/Tests/test_image_array.py index a0f5f29e1..c5e49fc39 100644 --- a/Tests/test_image_array.py +++ b/Tests/test_image_array.py @@ -5,7 +5,7 @@ from PIL import Image im = lena().resize((128, 100)) -class TestImageCrop(PillowTestCase): +class TestImageArray(PillowTestCase): def test_toarray(self): def test(mode): diff --git a/Tests/test_imagefile.py b/Tests/test_imagefile.py index d7f7f2a56..78fb3427f 100644 --- a/Tests/test_imagefile.py +++ b/Tests/test_imagefile.py @@ -14,7 +14,7 @@ MAXBLOCK = ImageFile.MAXBLOCK SAFEBLOCK = ImageFile.SAFEBLOCK -class TestImagePutData(PillowTestCase): +class TestImageFile(PillowTestCase): def test_parser(self): diff --git a/Tests/test_imagegrab.py b/Tests/test_imagegrab.py index 2275d34a1..13affe6b9 100644 --- a/Tests/test_imagegrab.py +++ b/Tests/test_imagegrab.py @@ -3,7 +3,7 @@ from helper import unittest, PillowTestCase try: from PIL import ImageGrab - class TestImageCopy(PillowTestCase): + class TestImageGrab(PillowTestCase): def test_grab(self): im = ImageGrab.grab() @@ -14,7 +14,7 @@ try: self.assert_image(im, im.mode, im.size) except ImportError: - class TestImageCopy(PillowTestCase): + class TestImageGrab(PillowTestCase): def test_skip(self): self.skipTest("ImportError") diff --git a/Tests/test_lib_image.py b/Tests/test_lib_image.py index e0a903b00..1a16deff2 100644 --- a/Tests/test_lib_image.py +++ b/Tests/test_lib_image.py @@ -3,7 +3,7 @@ from helper import unittest, PillowTestCase from PIL import Image -class TestSanity(PillowTestCase): +class TestLibImage(PillowTestCase): def test_setmode(self): From 15c92359ccf750d79b3474b95aa815149564f15f Mon Sep 17 00:00:00 2001 From: hugovk Date: Sun, 20 Jul 2014 00:51:26 +0300 Subject: [PATCH 102/311] Merge some similar tests to a single file --- Tests/test_image_filter.py | 4 ++++ Tests/test_image_mode.py | 21 ++++++++++++++++++++ Tests/test_image_transform.py | 16 +++++++++++++++ Tests/test_imagefilter.py | 37 ----------------------------------- Tests/test_imagemode.py | 32 ------------------------------ Tests/test_imagetransform.py | 27 ------------------------- 6 files changed, 41 insertions(+), 96 deletions(-) delete mode 100644 Tests/test_imagefilter.py delete mode 100644 Tests/test_imagemode.py delete mode 100644 Tests/test_imagetransform.py diff --git a/Tests/test_image_filter.py b/Tests/test_image_filter.py index 4a85b0a2e..2452479cc 100644 --- a/Tests/test_image_filter.py +++ b/Tests/test_image_filter.py @@ -29,6 +29,10 @@ class TestImageFilter(PillowTestCase): filter(ImageFilter.MinFilter) filter(ImageFilter.ModeFilter) filter(ImageFilter.Kernel((3, 3), list(range(9)))) + filter(ImageFilter.GaussianBlur) + filter(ImageFilter.GaussianBlur(5)) + filter(ImageFilter.UnsharpMask) + filter(ImageFilter.UnsharpMask(10)) self.assertRaises(TypeError, lambda: filter("hello")) diff --git a/Tests/test_image_mode.py b/Tests/test_image_mode.py index 25c35c607..74ed9b7aa 100644 --- a/Tests/test_image_mode.py +++ b/Tests/test_image_mode.py @@ -10,6 +10,27 @@ class TestImageMode(PillowTestCase): im = lena() im.mode + from PIL import ImageMode + + ImageMode.getmode("1") + ImageMode.getmode("L") + ImageMode.getmode("P") + ImageMode.getmode("RGB") + ImageMode.getmode("I") + ImageMode.getmode("F") + + m = ImageMode.getmode("1") + self.assertEqual(m.mode, "1") + self.assertEqual(m.bands, ("1",)) + self.assertEqual(m.basemode, "L") + self.assertEqual(m.basetype, "L") + + m = ImageMode.getmode("RGB") + self.assertEqual(m.mode, "RGB") + self.assertEqual(m.bands, ("R", "G", "B")) + self.assertEqual(m.basemode, "RGB") + self.assertEqual(m.basetype, "L") + def test_properties(self): def check(mode, *result): signature = ( diff --git a/Tests/test_image_transform.py b/Tests/test_image_transform.py index 1873ee9a4..42a3d78f3 100644 --- a/Tests/test_image_transform.py +++ b/Tests/test_image_transform.py @@ -5,6 +5,22 @@ from PIL import Image class TestImageTransform(PillowTestCase): + def test_sanity(self): + from PIL import ImageTransform + + im = Image.new("L", (100, 100)) + + seq = tuple(range(10)) + + transform = ImageTransform.AffineTransform(seq[:6]) + im.transform((100, 100), transform) + transform = ImageTransform.ExtentTransform(seq[:4]) + im.transform((100, 100), transform) + transform = ImageTransform.QuadTransform(seq[:8]) + im.transform((100, 100), transform) + transform = ImageTransform.MeshTransform([(seq[:4], seq[:8])]) + im.transform((100, 100), transform) + def test_extent(self): im = lena('RGB') (w, h) = im.size diff --git a/Tests/test_imagefilter.py b/Tests/test_imagefilter.py deleted file mode 100644 index f7edb409a..000000000 --- a/Tests/test_imagefilter.py +++ /dev/null @@ -1,37 +0,0 @@ -from helper import unittest, PillowTestCase - -from PIL import ImageFilter - - -class TestImageFilter(PillowTestCase): - - def test_sanity(self): - # see test_image_filter for more tests - - # Check these run. Exceptions cause failures. - ImageFilter.MaxFilter - ImageFilter.MedianFilter - ImageFilter.MinFilter - ImageFilter.ModeFilter - ImageFilter.Kernel((3, 3), list(range(9))) - ImageFilter.GaussianBlur - ImageFilter.GaussianBlur(5) - ImageFilter.UnsharpMask - ImageFilter.UnsharpMask(10) - - ImageFilter.BLUR - ImageFilter.CONTOUR - ImageFilter.DETAIL - ImageFilter.EDGE_ENHANCE - ImageFilter.EDGE_ENHANCE_MORE - ImageFilter.EMBOSS - ImageFilter.FIND_EDGES - ImageFilter.SMOOTH - ImageFilter.SMOOTH_MORE - ImageFilter.SHARPEN - - -if __name__ == '__main__': - unittest.main() - -# End of file diff --git a/Tests/test_imagemode.py b/Tests/test_imagemode.py deleted file mode 100644 index 2c5730d74..000000000 --- a/Tests/test_imagemode.py +++ /dev/null @@ -1,32 +0,0 @@ -from helper import unittest, PillowTestCase - -from PIL import ImageMode - - -class TestImageMode(PillowTestCase): - - def test_sanity(self): - ImageMode.getmode("1") - ImageMode.getmode("L") - ImageMode.getmode("P") - ImageMode.getmode("RGB") - ImageMode.getmode("I") - ImageMode.getmode("F") - - m = ImageMode.getmode("1") - self.assertEqual(m.mode, "1") - self.assertEqual(m.bands, ("1",)) - self.assertEqual(m.basemode, "L") - self.assertEqual(m.basetype, "L") - - m = ImageMode.getmode("RGB") - self.assertEqual(m.mode, "RGB") - self.assertEqual(m.bands, ("R", "G", "B")) - self.assertEqual(m.basemode, "RGB") - self.assertEqual(m.basetype, "L") - - -if __name__ == '__main__': - unittest.main() - -# End of file diff --git a/Tests/test_imagetransform.py b/Tests/test_imagetransform.py deleted file mode 100644 index f5741df32..000000000 --- a/Tests/test_imagetransform.py +++ /dev/null @@ -1,27 +0,0 @@ -from helper import unittest, PillowTestCase - -from PIL import Image -from PIL import ImageTransform - - -class TestImageTransform(PillowTestCase): - - def test_sanity(self): - im = Image.new("L", (100, 100)) - - seq = tuple(range(10)) - - transform = ImageTransform.AffineTransform(seq[:6]) - im.transform((100, 100), transform) - transform = ImageTransform.ExtentTransform(seq[:4]) - im.transform((100, 100), transform) - transform = ImageTransform.QuadTransform(seq[:8]) - im.transform((100, 100), transform) - transform = ImageTransform.MeshTransform([(seq[:4], seq[:8])]) - im.transform((100, 100), transform) - - -if __name__ == '__main__': - unittest.main() - -# End of file From fef3ceb2c02ef241a508ee020fe2617e10e33e42 Mon Sep 17 00:00:00 2001 From: hugovk Date: Sun, 20 Jul 2014 01:50:05 +0300 Subject: [PATCH 103/311] If we can't read a file due to unsupported compression, raise an error --- PIL/SgiImagePlugin.py | 10 +++++----- Tests/test_file_sgi.py | 18 +++--------------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/PIL/SgiImagePlugin.py b/PIL/SgiImagePlugin.py index bf3c18a43..2b8fcd8e4 100644 --- a/PIL/SgiImagePlugin.py +++ b/PIL/SgiImagePlugin.py @@ -45,7 +45,7 @@ class SgiImageFile(ImageFile.ImageFile): # HEAD s = self.fp.read(512) if i16(s) != 474: - raise SyntaxError("not an SGI image file") + raise ValueError("Not an SGI image file") # relevant header entries compression = i8(s[2]) @@ -61,7 +61,7 @@ class SgiImageFile(ImageFile.ImageFile): elif layout == (1, 3, 4): self.mode = "RGBA" else: - raise SyntaxError("unsupported SGI image mode") + raise ValueError("Unsupported SGI image mode") # size self.size = i16(s[6:]), i16(s[8:]) @@ -76,8 +76,7 @@ class SgiImageFile(ImageFile.ImageFile): ("raw", (0, 0)+self.size, offset, (layer, 0, -1))) offset = offset + pagesize elif compression == 1: - self.tile = [ - ("sgi_rle", (0, 0)+self.size, 512, (self.mode, 0, -1))] + raise ValueError("SGI RLE encoding not supported") # # registry @@ -87,5 +86,6 @@ Image.register_open("SGI", SgiImageFile, _accept) Image.register_extension("SGI", ".bw") Image.register_extension("SGI", ".rgb") Image.register_extension("SGI", ".rgba") - Image.register_extension("SGI", ".sgi") + +# End of file diff --git a/Tests/test_file_sgi.py b/Tests/test_file_sgi.py index e94f0d989..84b184b63 100644 --- a/Tests/test_file_sgi.py +++ b/Tests/test_file_sgi.py @@ -5,44 +5,32 @@ from PIL import Image class TestFileSgi(PillowTestCase): - def sanity(self, filename, expected_mode, expected_size=(128, 128)): - # Act - im = Image.open(filename) - - # Assert - self.assertEqual(im.mode, expected_mode) - self.assertEqual(im.size, expected_size) - def test_rgb(self): # Arrange # Created with ImageMagick then renamed: # convert lena.ppm lena.sgi test_file = "Tests/images/lena.rgb" - expected_mode = "RGB" # Act / Assert - self.sanity(test_file, expected_mode) + self.assertRaises(ValueError, lambda: Image.open(test_file)) def test_l(self): # Arrange # Created with ImageMagick then renamed: # convert lena.ppm -monochrome lena.sgi test_file = "Tests/images/lena.bw" - expected_mode = "L" # Act / Assert - self.sanity(test_file, expected_mode) + self.assertRaises(ValueError, lambda: Image.open(test_file)) def test_rgba(self): # Arrange # Created with ImageMagick: # convert transparent.png transparent.sgi test_file = "Tests/images/transparent.sgi" - expected_mode = "RGBA" - expected_size = (200, 150) # Act / Assert - self.sanity(test_file, expected_mode, expected_size) + self.assertRaises(ValueError, lambda: Image.open(test_file)) if __name__ == '__main__': From 6381d6250375f290b02a249d8b01e7836abab46a Mon Sep 17 00:00:00 2001 From: wiredfool Date: Sat, 19 Jul 2014 21:25:25 -0700 Subject: [PATCH 104/311] Update CHANGES.rst [ci skip] --- CHANGES.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index da7ffcb84..5652479a1 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -16,7 +16,7 @@ Changelog (Pillow) - Added docs for ExifTags [Wintermute3] -- More tests for CurImagePlugin, DcxImagePlugin, ImageFont, ImageMath, SpiderImagePlugin, XpmImagePlugin and _util +- More tests for CurImagePlugin, DcxImagePlugin, ImageFont, ImageMath, SpiderImagePlugin, SgiImagePlugin, XpmImagePlugin and _util [hugovk] - Fix return value of FreeTypeFont.textsize() does not include font offsets From 37691bc1e4d3f2bbf444e53510db4fecf81fe7b1 Mon Sep 17 00:00:00 2001 From: hugovk Date: Sun, 20 Jul 2014 10:13:26 +0300 Subject: [PATCH 105/311] Make _make_linear_lut public and issue deprecation warnings from old private methods --- PIL/ImagePalette.py | 21 ++++++++++++++++ Tests/test_imagepalette.py | 49 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/PIL/ImagePalette.py b/PIL/ImagePalette.py index 67bf593e6..3b9e96172 100644 --- a/PIL/ImagePalette.py +++ b/PIL/ImagePalette.py @@ -17,6 +17,7 @@ # import array +import warnings from PIL import Image, ImageColor @@ -125,6 +126,26 @@ def raw(rawmode, data): # Factories def _make_linear_lut(black, white): + warnings.warn( + '_make_linear_lut() is deprecated. ' + 'Please call make_linear_lut() instead.', + DeprecationWarning, + stacklevel=2 + ) + return make_linear_lut(black, white) + + +def _make_gamma_lut(exp): + warnings.warn( + '_make_gamma_lut() is deprecated. ' + 'Please call make_gamma_lut() instead.', + DeprecationWarning, + stacklevel=2 + ) + return make_gamma_lut(exp) + + +def make_linear_lut(black, white): lut = [] if black == 0: for i in range(256): diff --git a/Tests/test_imagepalette.py b/Tests/test_imagepalette.py index af742edd1..8356b5d60 100644 --- a/Tests/test_imagepalette.py +++ b/Tests/test_imagepalette.py @@ -44,6 +44,34 @@ class TestImagePalette(PillowTestCase): self.assertIsInstance(p, ImagePalette) self.assertEqual(p.palette, palette.tobytes()) + def test_make_linear_lut(self): + # Arrange + from PIL.ImagePalette import make_linear_lut + black = 0 + white = 255 + + # Act + lut = make_linear_lut(black, white) + + # Assert + self.assertIsInstance(lut, list) + self.assertEqual(len(lut), 256) + # Check values + for i in range(0, len(lut)): + self.assertEqual(lut[i], i) + + def test_make_linear_lut_not_yet_implemented(self): + # Update after FIXME + # Arrange + from PIL.ImagePalette import make_linear_lut + black = 1 + white = 255 + + # Act + self.assertRaises( + NotImplementedError, + lambda: make_linear_lut(black, white)) + def test_make_gamma_lut(self): # Arrange from PIL.ImagePalette import make_gamma_lut @@ -62,6 +90,27 @@ class TestImagePalette(PillowTestCase): self.assertEqual(lut[191], 60) self.assertEqual(lut[255], 255) + def test_private_make_linear_lut_warning(self): + # Arrange + from PIL.ImagePalette import _make_linear_lut + black = 0 + white = 255 + + # Act / Assert + self.assert_warning( + DeprecationWarning, + lambda: _make_linear_lut(black, white)) + + def test_private_make_gamma_lut_warning(self): + # Arrange + from PIL.ImagePalette import _make_gamma_lut + exp = 5 + + # Act / Assert + self.assert_warning( + DeprecationWarning, + lambda: _make_gamma_lut(exp)) + if __name__ == '__main__': unittest.main() From 751f67205838f37e55fb3865f9b6410d7f5e89b1 Mon Sep 17 00:00:00 2001 From: hugovk Date: Sun, 20 Jul 2014 21:08:14 +0300 Subject: [PATCH 106/311] Call public, non-warning versions internally --- PIL/ImagePalette.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PIL/ImagePalette.py b/PIL/ImagePalette.py index 3b9e96172..e59e7a88a 100644 --- a/PIL/ImagePalette.py +++ b/PIL/ImagePalette.py @@ -182,9 +182,9 @@ def random(mode="RGB"): def sepia(white="#fff0c0"): r, g, b = ImageColor.getrgb(white) - r = _make_linear_lut(0, r) - g = _make_linear_lut(0, g) - b = _make_linear_lut(0, b) + r = make_linear_lut(0, r) + g = make_linear_lut(0, g) + b = make_linear_lut(0, b) return ImagePalette("RGB", r + g + b) From 8c60de375d8b76d487f99964edbf26e7596ea2aa Mon Sep 17 00:00:00 2001 From: hugovk Date: Mon, 21 Jul 2014 12:15:23 +0300 Subject: [PATCH 107/311] Workaround to test PyQt: https://github.com/travis-ci/travis-ci/issues/2219#issuecomment-41804942 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 09e523c39..b37588843 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,7 @@ python: - "pypy" - 2.6 - 2.7 + - "2.7_with_system_site_packages" # For PyQt4 - 3.2 - 3.3 - 3.4 From d06735b49eba1e10e8e498755414ceb0ce778168 Mon Sep 17 00:00:00 2001 From: hugovk Date: Mon, 21 Jul 2014 23:18:46 +0300 Subject: [PATCH 108/311] More ImagePalette.py tests and remove unused and uncallable new() --- PIL/ImagePalette.py | 6 +----- Tests/test_imagepalette.py | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/PIL/ImagePalette.py b/PIL/ImagePalette.py index e59e7a88a..62f8814f1 100644 --- a/PIL/ImagePalette.py +++ b/PIL/ImagePalette.py @@ -18,7 +18,7 @@ import array import warnings -from PIL import Image, ImageColor +from PIL import ImageColor class ImagePalette: @@ -162,10 +162,6 @@ def make_gamma_lut(exp): return lut -def new(mode, data): - return Image.core.new_palette(mode, data) - - def negative(mode="RGB"): palette = list(range(256)) palette.reverse() diff --git a/Tests/test_imagepalette.py b/Tests/test_imagepalette.py index 8356b5d60..e56c61390 100644 --- a/Tests/test_imagepalette.py +++ b/Tests/test_imagepalette.py @@ -111,6 +111,41 @@ class TestImagePalette(PillowTestCase): DeprecationWarning, lambda: _make_gamma_lut(exp)) + def test_rawmode_valueerrors(self): + # Arrange + from PIL.ImagePalette import raw + palette = raw("RGB", list(range(256))*3) + + # Act / Assert + self.assertRaises(ValueError, lambda: palette.tobytes()) + self.assertRaises(ValueError, lambda: palette.getcolor((1, 2, 3))) + f = self.tempfile("temp.lut") + self.assertRaises(ValueError, lambda: palette.save(f)) + + def test_getdata(self): + # Arrange + data_in = list(range(256))*3 + palette = ImagePalette("RGB", data_in) + + # Act + mode, data_out = palette.getdata() + + # Assert + self.assertEqual(mode, "RGB;L") + + def test_rawmode_getdata(self): + # Arrange + from PIL.ImagePalette import raw + data_in = list(range(256))*3 + palette = raw("RGB", data_in) + + # Act + rawmode, data_out = palette.getdata() + + # Assert + self.assertEqual(rawmode, "RGB") + self.assertEqual(data_in, data_out) + if __name__ == '__main__': unittest.main() From d5909e49467e471b3c746cfe6a93872d88bd72cf Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Tue, 22 Jul 2014 13:31:51 -0400 Subject: [PATCH 109/311] Basic MPO reading works, seek is partially there. --- PIL/Image.py | 1 - PIL/JpegImagePlugin.py | 20 ++++++++++++++++++++ PIL/MpoImagePlugin.py | 31 +++++++++++++++++++------------ Tests/test_file_mpo.py | 20 ++++++++++++++++++++ 4 files changed, 59 insertions(+), 13 deletions(-) diff --git a/PIL/Image.py b/PIL/Image.py index b4aa11e20..eb08fab9e 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -2231,7 +2231,6 @@ def open(fp, mode="r"): for i in ID: try: - print(ID) factory, accept = OPEN[i] if not accept or accept(prefix): fp.seek(0) diff --git a/PIL/JpegImagePlugin.py b/PIL/JpegImagePlugin.py index 7dfdfa308..ce225ddc1 100644 --- a/PIL/JpegImagePlugin.py +++ b/PIL/JpegImagePlugin.py @@ -37,6 +37,7 @@ __version__ = "0.6" import array import struct import io +from struct import unpack from PIL import Image, ImageFile, TiffImagePlugin, _binary from PIL.JpegPresets import presets from PIL._util import isStringType @@ -114,6 +115,7 @@ def APP(self, marker): elif marker == 0xFFE2 and s[:4] == b"MPF\0": # extract MPO information self.info["mp"] = s[4:] + self.info["mpoffset"] = self.fp.tell() def COM(self, marker): @@ -451,12 +453,30 @@ def _getmp(self): return None file = io.BytesIO(data) head = file.read(8) + endianness = '>' if head[:4] == b'\x4d\x4d\x00\x2a' else '<' mp = {} # process dictionary info = TiffImagePlugin.ImageFileDirectory(head) info.load(file) for key, value in info.items(): mp[key] = _fixup(value) + # it's an error not to have a number of images + try: + quant = mp[0xB001] + except KeyError: + raise SyntaxError("malformed MP Index (no number of images)") + # get MP entries + try: + mpentries = [] + for entrynum in range(0, quant): + rawmpentry = mp[0xB002][entrynum * 16:(entrynum + 1) * 16] + unpackedentry = unpack('{0}LLLHH'.format(endianness), rawmpentry) + labels = ('Attribute', 'Size', 'DataOffset', 'EntryNo1', 'EntryNo2') + mpentry = dict(zip(labels, unpackedentry)) + mpentries.append(mpentry) + mp[0xB002] = mpentries + except KeyError: + raise SyntaxError("malformed MP Index (bad MP Entry)") return mp diff --git a/PIL/MpoImagePlugin.py b/PIL/MpoImagePlugin.py index 18f32bd48..6accf5110 100644 --- a/PIL/MpoImagePlugin.py +++ b/PIL/MpoImagePlugin.py @@ -38,21 +38,28 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile): def _open(self): JpegImagePlugin.JpegImageFile._open(self) + self.mpinfo = self._getmp() + self.__framecount = self.mpinfo[0xB001] + self.__mpoffsets = [mpent['DataOffset'] + self.info['mpoffset'] \ + for mpent in self.mpinfo[0xB002]] + assert self.__framecount == len(self.__mpoffsets) + del self.info['mpoffset'] # no longer needed self.__fp = self.fp # FIXME: hack - self.__rewind = self.fp.tell() - self.seek(0) # get ready to read first frame + self.__fp.seek(self.__mpoffsets[0]) # get ready to read first frame + self.__frame = 0 + self.offset = 0 def seek(self, frame): - - if frame == 0: - # rewind - self.__offset = 0 - self.dispose = None - self.__frame = -1 - self.__fp.seek(self.__rewind) - - if frame != self.__frame + 1: - raise ValueError("cannot seek to frame %d" % frame) + if frame < 0 or frame >= self.__framecount: + raise EOFError("no more images in MPO file") + else: + self.fp = self.__fp + self.fp.seek(self.__mpoffsets[frame]) + self.offset = self.__mpoffsets[frame] + rawmode = self.mode + if self.mode == "CMYK": + rawmode = "CMYK;I" # assume adobe conventions + self.tile = [("jpeg", (0, 0) + self.size, 0, (rawmode, ""))] self.__frame = frame def tell(self): diff --git a/Tests/test_file_mpo.py b/Tests/test_file_mpo.py index 17f9a66fb..a0bcf6f40 100644 --- a/Tests/test_file_mpo.py +++ b/Tests/test_file_mpo.py @@ -54,6 +54,26 @@ class TestFileMpo(PillowTestCase): info = im._getmp() self.assertEqual(info[45056], '0100') self.assertEqual(info[45057], 2) + + def test_seek(self): + for test_file in test_files: + im = Image.open(test_file) + self.assertEqual(im.tell(), 0) + # prior to first image raises an error, both blatant and borderline + self.assertRaises(EOFError, im.seek, -1) + self.assertRaises(EOFError, im.seek, -523) + # after the final image raises an error, both blatant and borderline + self.assertRaises(EOFError, im.seek, 2) + self.assertRaises(EOFError, im.seek, 523) + # bad calls shouldn't change the frame + self.assertEqual(im.tell(), 0) + # this one will work + im.seek(1) + self.assertEqual(im.tell(), 1) + # and this one, too + im.seek(0) + self.assertEqual(im.tell(), 0) + if __name__ == '__main__': unittest.main() From 1d3fe7ff4544b0670d4fdeddba117cac56c77d80 Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Tue, 22 Jul 2014 18:23:45 -0400 Subject: [PATCH 110/311] Corrected offset for MPO frames. --- PIL/JpegImagePlugin.py | 3 ++- PIL/MpoImagePlugin.py | 5 +---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/PIL/JpegImagePlugin.py b/PIL/JpegImagePlugin.py index ce225ddc1..bedc42373 100644 --- a/PIL/JpegImagePlugin.py +++ b/PIL/JpegImagePlugin.py @@ -115,7 +115,8 @@ def APP(self, marker): elif marker == 0xFFE2 and s[:4] == b"MPF\0": # extract MPO information self.info["mp"] = s[4:] - self.info["mpoffset"] = self.fp.tell() + # offset is current location minus buffer size plus constant header size + self.info["mpoffset"] = self.fp.tell() - n + 4 def COM(self, marker): diff --git a/PIL/MpoImagePlugin.py b/PIL/MpoImagePlugin.py index 6accf5110..6594b74b0 100644 --- a/PIL/MpoImagePlugin.py +++ b/PIL/MpoImagePlugin.py @@ -42,6 +42,7 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile): self.__framecount = self.mpinfo[0xB001] self.__mpoffsets = [mpent['DataOffset'] + self.info['mpoffset'] \ for mpent in self.mpinfo[0xB002]] + self.__mpoffsets[0] = 0 assert self.__framecount == len(self.__mpoffsets) del self.info['mpoffset'] # no longer needed self.__fp = self.fp # FIXME: hack @@ -56,10 +57,6 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile): self.fp = self.__fp self.fp.seek(self.__mpoffsets[frame]) self.offset = self.__mpoffsets[frame] - rawmode = self.mode - if self.mode == "CMYK": - rawmode = "CMYK;I" # assume adobe conventions - self.tile = [("jpeg", (0, 0) + self.size, 0, (rawmode, ""))] self.__frame = frame def tell(self): From d34fd8868b8fe86d197a88c717b86c8ba37c1d80 Mon Sep 17 00:00:00 2001 From: hugovk Date: Mon, 21 Jul 2014 12:15:23 +0300 Subject: [PATCH 111/311] Workaround to test PyQt: https://github.com/travis-ci/travis-ci/issues/2219#issuecomment-41804942 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 09e523c39..b37588843 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,7 @@ python: - "pypy" - 2.6 - 2.7 + - "2.7_with_system_site_packages" # For PyQt4 - 3.2 - 3.3 - 3.4 From ee4793a806f34c428f059f0e4256c61bad351f60 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 21 Jul 2014 22:29:38 -0700 Subject: [PATCH 112/311] More detail when assert_image_similar fails --- Tests/helper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/helper.py b/Tests/helper.py index 64f29bd5d..082fb93f9 100644 --- a/Tests/helper.py +++ b/Tests/helper.py @@ -100,7 +100,7 @@ class PillowTestCase(unittest.TestCase): ave_diff = float(diff)/(a.size[0]*a.size[1]) self.assertGreaterEqual( epsilon, ave_diff, - msg or "average pixel value difference %.4f > epsilon %.4f" % ( + (msg or '') + " average pixel value difference %.4f > epsilon %.4f" % ( ave_diff, epsilon)) def assert_warning(self, warn_class, func): From 625ff24358b3705791450fd68b0f9ad8e8afca98 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 21 Jul 2014 22:31:32 -0700 Subject: [PATCH 113/311] Storage, packing and access for HSV format images --- PIL/Image.py | 1 + PIL/PyAccess.py | 1 + Tests/make_hash.py | 1 + libImaging/Access.c | 5 +++-- libImaging/Pack.c | 6 ++++++ libImaging/Storage.c | 7 +++++++ libImaging/Unpack.c | 6 ++++++ 7 files changed, 25 insertions(+), 2 deletions(-) diff --git a/PIL/Image.py b/PIL/Image.py index ea8cc6155..a61aaa62b 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -220,6 +220,7 @@ _MODEINFO = { "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")), # Experimental modes include I;16, I;16L, I;16B, RGBa, BGR;15, and # BGR;24. Use these modes only if you know exactly what you're diff --git a/PIL/PyAccess.py b/PIL/PyAccess.py index f76beb820..7ccc313eb 100644 --- a/PIL/PyAccess.py +++ b/PIL/PyAccess.py @@ -261,6 +261,7 @@ mode_map = {'1': _PyAccess8, 'PA': _PyAccess32_2, 'RGB': _PyAccess32_3, 'LAB': _PyAccess32_3, + 'HSV': _PyAccess32_3, 'YCbCr': _PyAccess32_3, 'RGBA': _PyAccess32_4, 'RGBa': _PyAccess32_4, diff --git a/Tests/make_hash.py b/Tests/make_hash.py index 32196e9f8..88bb2994b 100644 --- a/Tests/make_hash.py +++ b/Tests/make_hash.py @@ -9,6 +9,7 @@ modes = [ "RGB", "RGBA", "RGBa", "RGBX", "CMYK", "YCbCr", + "LAB", "HSV", ] diff --git a/libImaging/Access.c b/libImaging/Access.c index 62c97f3a3..97474a0b8 100644 --- a/libImaging/Access.c +++ b/libImaging/Access.c @@ -13,8 +13,8 @@ #include "Imaging.h" /* use Tests/make_hash.py to calculate these values */ -#define ACCESS_TABLE_SIZE 21 -#define ACCESS_TABLE_HASH 30197 +#define ACCESS_TABLE_SIZE 27 +#define ACCESS_TABLE_HASH 3078 static struct ImagingAccessInstance access_table[ACCESS_TABLE_SIZE]; @@ -238,6 +238,7 @@ ImagingAccessInit() ADD("CMYK", line_32, get_pixel_32, put_pixel_32); ADD("YCbCr", line_32, get_pixel_32, put_pixel_32); ADD("LAB", line_32, get_pixel_32, put_pixel_32); + ADD("HSV", line_32, get_pixel_32, put_pixel_32); } ImagingAccess diff --git a/libImaging/Pack.c b/libImaging/Pack.c index 1cc1f3a94..fecafbde4 100644 --- a/libImaging/Pack.c +++ b/libImaging/Pack.c @@ -566,6 +566,12 @@ static struct { {"LAB", "A", 8, band1}, {"LAB", "B", 8, band2}, + /* HSV */ + {"HSV", "HSV", 24, ImagingPackRGB}, + {"HSV", "H", 8, band0}, + {"HSV", "S", 8, band1}, + {"HSV", "V", 8, band2}, + /* integer */ {"I", "I", 32, copy4}, {"I", "I;16B", 16, packI16B}, diff --git a/libImaging/Storage.c b/libImaging/Storage.c index c6d2e5c5e..d65de1c0a 100644 --- a/libImaging/Storage.c +++ b/libImaging/Storage.c @@ -186,6 +186,13 @@ ImagingNewPrologueSubtype(const char *mode, unsigned xsize, unsigned ysize, im->pixelsize = 4; im->linesize = xsize * 4; + } else if (strcmp(mode, "HSV") == 0) { + /* 24-bit color, luminance, + 2 color channels */ + /* L is uint8, a,b are int8 */ + im->bands = 3; + im->pixelsize = 4; + im->linesize = xsize * 4; + } else { free(im); return (Imaging) ImagingError_ValueError("unrecognized mode"); diff --git a/libImaging/Unpack.c b/libImaging/Unpack.c index 552c759b9..7c453dbfd 100644 --- a/libImaging/Unpack.c +++ b/libImaging/Unpack.c @@ -1159,6 +1159,12 @@ static struct { {"LAB", "A", 8, band1}, {"LAB", "B", 8, band2}, + /* HSV Color */ + {"HSV", "HSV", 24, ImagingUnpackRGB}, + {"HSV", "H", 8, band0}, + {"HSV", "S", 8, band1}, + {"HSV", "V", 8, band2}, + /* integer variations */ {"I", "I", 32, copy4}, {"I", "I;8", 8, unpackI8}, From 0bb1cd398fc5ba14e69795eb26f709a7b0bf2436 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 21 Jul 2014 22:36:40 -0700 Subject: [PATCH 114/311] Conversion between RGB and HSV images --- Tests/test_format_hsv.py | 177 +++++++++++++++++++++++++++++++++++++++ libImaging/Convert.c | 126 ++++++++++++++++++++++++++++ 2 files changed, 303 insertions(+) create mode 100644 Tests/test_format_hsv.py diff --git a/Tests/test_format_hsv.py b/Tests/test_format_hsv.py new file mode 100644 index 000000000..1a9c46bd7 --- /dev/null +++ b/Tests/test_format_hsv.py @@ -0,0 +1,177 @@ +from helper import unittest, PillowTestCase, lena + +from PIL import Image + +import colorsys, itertools + +class TestFormatHSV(PillowTestCase): + + def int_to_float(self, i): + return float(i)/255.0 + def str_to_float(self, i): + return float(ord(i))/255.0 + def to_int(self, f): + return int(f*255.0) + + def test_sanity(self): + im = Image.new('HSV', (100,100)) + + def wedge(self): + w =Image._wedge() + w90 = w.rotate(90) + + (px, h) = w.size + + r = Image.new('L', (px*3,h)) + g = r.copy() + b = r.copy() + + r.paste(w, (0,0)) + r.paste(w90, (px,0)) + + g.paste(w90, (0,0)) + g.paste(w, (2*px,0)) + + b.paste(w, (px,0)) + b.paste(w90, (2*px,0)) + + img = Image.merge('RGB',(r,g,b)) + + #print (("%d, %d -> "% (int(1.75*px),int(.25*px))) + \ + # "(%s, %s, %s)"%img.getpixel((1.75*px, .25*px))) + #print (("%d, %d -> "% (int(.75*px),int(.25*px))) + \ + # "(%s, %s, %s)"%img.getpixel((.75*px, .25*px))) + return img + + def to_xxx_colorsys(self, im, func, mode): + # convert the hard way using the library colorsys routines. + + (r,g,b) = im.split() + + if bytes is str: + f_r = map(self.str_to_float,r.tobytes()) + f_g = map(self.str_to_float,g.tobytes()) + f_b = map(self.str_to_float,b.tobytes()) + else: + f_r = map(self.int_to_float,r.tobytes()) + f_g = map(self.int_to_float,g.tobytes()) + f_b = map(self.int_to_float,b.tobytes()) + + f_h = []; + f_s = []; + f_v = []; + + if hasattr(itertools, 'izip'): + iter_helper = itertools.izip + else: + iter_helper = itertools.zip_longest + + for (_r, _g, _b) in iter_helper(f_r, f_g, f_b): + _h, _s, _v = func(_r, _g, _b) + f_h.append(_h) + f_s.append(_s) + f_v.append(_v) + + h = Image.new('L', r.size) + h.putdata(list(map(self.to_int, f_h))) + s = Image.new('L', r.size) + s.putdata(list(map(self.to_int, f_s))) + v = Image.new('L', r.size) + v.putdata(list(map(self.to_int, f_v))) + + hsv = Image.merge(mode, (h, s, v)) + + return hsv + + def to_hsv_colorsys(self, im): + return self.to_xxx_colorsys(im, colorsys.rgb_to_hsv, 'HSV') + + def to_rgb_colorsys(self, im): + return self.to_xxx_colorsys(im, colorsys.hsv_to_rgb, 'RGB') + + def test_wedge(self): + im = self.wedge().convert('HSV') + comparable = self.to_hsv_colorsys(self.wedge()) + + #print (im.getpixel((448, 64))) + #print (comparable.getpixel((448, 64))) + + #print(im.split()[0].histogram()) + #print(comparable.split()[0].histogram()) + + #im.split()[0].show() + #comparable.split()[0].show() + + self.assert_image_similar(im.split()[0], comparable.split()[0], + 1, "Hue conversion is wrong") + self.assert_image_similar(im.split()[1], comparable.split()[1], + 1, "Saturation conversion is wrong") + self.assert_image_similar(im.split()[2], comparable.split()[2], + 1, "Value conversion is wrong") + + #print (im.getpixel((192, 64))) + + comparable = self.wedge() + im = im.convert('RGB') + + #im.split()[0].show() + #comparable.split()[0].show() + #print (im.getpixel((192, 64))) + #print (comparable.getpixel((192, 64))) + + self.assert_image_similar(im.split()[0], comparable.split()[0], + 3, "R conversion is wrong") + self.assert_image_similar(im.split()[1], comparable.split()[1], + 3, "G conversion is wrong") + self.assert_image_similar(im.split()[2], comparable.split()[2], + 3, "B conversion is wrong") + + + def test_convert(self): + im = lena('RGB').convert('HSV') + comparable = self.to_hsv_colorsys(lena('RGB')) + +# print ([ord(x) for x in im.split()[0].tobytes()[:80]]) +# print ([ord(x) for x in comparable.split()[0].tobytes()[:80]]) + +# print(im.split()[0].histogram()) +# print(comparable.split()[0].histogram()) + + self.assert_image_similar(im.split()[0], comparable.split()[0], + 1, "Hue conversion is wrong") + self.assert_image_similar(im.split()[1], comparable.split()[1], + 1, "Saturation conversion is wrong") + self.assert_image_similar(im.split()[2], comparable.split()[2], + 1, "Value conversion is wrong") + + + def test_hsv_to_rgb(self): + comparable = self.to_hsv_colorsys(lena('RGB')) + converted = comparable.convert('RGB') + comparable = self.to_rgb_colorsys(comparable) + + # print(converted.split()[1].histogram()) + # print(target.split()[1].histogram()) + + # print ([ord(x) for x in target.split()[1].tobytes()[:80]]) + # print ([ord(x) for x in converted.split()[1].tobytes()[:80]]) + + + self.assert_image_similar(converted.split()[0], comparable.split()[0], + 3, "R conversion is wrong") + self.assert_image_similar(converted.split()[1], comparable.split()[1], + 3, "G conversion is wrong") + self.assert_image_similar(converted.split()[2], comparable.split()[2], + 3, "B conversion is wrong") + + + + + + + + +if __name__ == '__main__': + unittest.main() + +# End of file diff --git a/libImaging/Convert.c b/libImaging/Convert.c index 631263b31..4eb106c27 100644 --- a/libImaging/Convert.c +++ b/libImaging/Convert.c @@ -35,6 +35,9 @@ #include "Imaging.h" +#define MAX(a, b) (a)>(b) ? (a) : (b) +#define MIN(a, b) (a)<(b) ? (a) : (b) + #define CLIP(v) ((v) <= 0 ? 0 : (v) >= 255 ? 255 : (v)) #define CLIP16(v) ((v) <= -32768 ? -32768 : (v) >= 32767 ? 32767 : (v)) @@ -236,6 +239,126 @@ rgb2bgr24(UINT8* out, const UINT8* in, int xsize) } } +static void +rgb2hsv(UINT8* out, const UINT8* in, int xsize) +{ // following colorsys.py + float h,s,rc,gc,bc,cr; + UINT8 maxc,minc; + UINT8 r, g, b; + UINT8 uh,us,uv; + int x; + + for (x = 0; x < xsize; x++, in += 4) { + r = in[0]; + g = in[1]; + b = in[2]; + + maxc = MAX(r,MAX(g,b)); + minc = MIN(r,MIN(g,b)); + uv = maxc; + if (minc == maxc){ + *out++ = 0; + *out++ = 0; + *out++ = uv; + } else { + cr = (float)(maxc-minc); + s = cr/(float)maxc; + rc = ((float)(maxc-r))/cr; + gc = ((float)(maxc-g))/cr; + bc = ((float)(maxc-b))/cr; + if (r == maxc) { + h = bc-gc; + } else if (g == maxc) { + h = 2.0 + rc-bc; + } else { + h = 4.0 + gc-rc; + } + // incorrect hue happens if h/6 is negative. + h = fmod((h/6.0 + 1.0), 1.0); + + uh = (UINT8)CLIP((int)(h*255.0)); + us = (UINT8)CLIP((int)(s*255.0)); + + *out++ = uh; + *out++ = us; + *out++ = uv; + + } + *out++ = in[3]; + } +} + +static void +hsv2rgb(UINT8* out, const UINT8* in, int xsize) +{ // following colorsys.py + + int p,q,t; + uint up,uq,ut; + int i, x; + float f, fs; + uint h,s,v; + + for (x = 0; x < xsize; x++, in += 4) { + h = in[0]; + s = in[1]; + v = in[2]; + + if (s==0){ + *out++ = v; + *out++ = v; + *out++ = v; + } else { + i = floor((float)h * 6.0 / 255.0); // 0 - 6 + f = (float)h * 6.0 / 255.0 - (float)i; // 0-1 : remainder. + fs = ((float)s)/255.0; + + p = round((float)v * (1.0-fs)); + q = round((float)v * (1.0-fs*f)); + t = round((float)v * (1.0-fs*(1.0-f))); + up = (UINT8)CLIP(p); + uq = (UINT8)CLIP(q); + ut = (UINT8)CLIP(t); + + switch (i%6) { + case 0: + *out++ = v; + *out++ = ut; + *out++ = up; + break; + case 1: + *out++ = uq; + *out++ = v; + *out++ = up; + break; + case 2: + *out++ = up; + *out++ = v; + *out++ = ut; + break; + case 3: + *out++ = up; + *out++ = uq; + *out++ = v; + break; + case 4: + *out++ = ut; + *out++ = up; + *out++ = v; + break; + case 5: + *out++ = v; + *out++ = up; + *out++ = uq; + break; + + } + } + *out++ = in[3]; + } +} + + + /* ---------------- */ /* RGBA conversions */ /* ---------------- */ @@ -658,6 +781,7 @@ static struct { { "RGB", "RGBX", rgb2rgba }, { "RGB", "CMYK", rgb2cmyk }, { "RGB", "YCbCr", ImagingConvertRGB2YCbCr }, + { "RGB", "HSV", rgb2hsv }, { "RGBA", "1", rgb2bit }, { "RGBA", "L", rgb2l }, @@ -687,6 +811,8 @@ static struct { { "YCbCr", "L", ycbcr2l }, { "YCbCr", "RGB", ImagingConvertYCbCr2RGB }, + { "HSV", "RGB", hsv2rgb }, + { "I", "I;16", I_I16L }, { "I;16", "I", I16L_I }, { "L", "I;16", L_I16L }, From 55792f8927263e9935469e375c3fbc0ed1fe15b0 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 22 Jul 2014 16:22:28 -0700 Subject: [PATCH 115/311] Updated Changes.rst [ci skip] --- CHANGES.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 5652479a1..c93572cbd 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Removed unusable ImagePalette.new() + [hugovk] + - Fix Scrambled XPM #808 [wiredfool] @@ -16,7 +19,7 @@ Changelog (Pillow) - Added docs for ExifTags [Wintermute3] -- More tests for CurImagePlugin, DcxImagePlugin, ImageFont, ImageMath, SpiderImagePlugin, SgiImagePlugin, XpmImagePlugin and _util +- More tests for CurImagePlugin, DcxImagePlugin, ImageFont, ImageMath, ImagePalette, SpiderImagePlugin, SgiImagePlugin, XpmImagePlugin and _util [hugovk] - Fix return value of FreeTypeFont.textsize() does not include font offsets From 1b170dad680ae0769dfb94bb720fe3807d899041 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 22 Jul 2014 16:43:08 -0700 Subject: [PATCH 116/311] Partial opacity text example, parameters on ImageDraw.Draw [ci skip] --- docs/reference/ImageDraw.rst | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/docs/reference/ImageDraw.rst b/docs/reference/ImageDraw.rst index 30aa15a9b..c24a9dd99 100644 --- a/docs/reference/ImageDraw.rst +++ b/docs/reference/ImageDraw.rst @@ -74,6 +74,34 @@ To load a OpenType/TrueType font, use the truetype function in the :py:mod:`~PIL.ImageFont` module. Note that this function depends on third-party libraries, and may not available in all PIL builds. +Example: Draw Partial Opacity Text +---------------------------------- + +.. code-block:: python + + from PIL import Image, ImageDraw, ImageFont + # get an image + base = Image.open('Pillow/Tests/images/lena.png').convert('RGBA') + + # make a blank image for the text, initialized to transparent text color + txt = Image.new('RGBA', base.size, (255,255,255,0)) + + # get a font + fnt = ImageFont.truetype('Pillow/Tests/fonts/FreeMono.ttf', 40) + # get a drawing context + d = ImageDraw.Draw(txt) + + # draw text, half opacity + d.text((10,10), "Hello", font=fnt, fill=(255,255,255,128)) + # draw text, full opacity + d.text((10,60), "World", font=fnt, fill=(255,255,255,255)) + + out = Image.alpha_composite(base, txt) + + out.show() + + + Functions --------- @@ -83,6 +111,13 @@ Functions Note that the image will be modified in place. + :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. + Methods ------- From c469dd9ae56961c3f7ee7289a380c43d90ad57d5 Mon Sep 17 00:00:00 2001 From: Fredrik Tolf Date: Wed, 23 Jul 2014 00:24:18 -0700 Subject: [PATCH 117/311] Added support for encoding and decoding iTXt chunks. --- PIL/PngImagePlugin.py | 67 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/PIL/PngImagePlugin.py b/PIL/PngImagePlugin.py index e794ef702..34fff1a31 100644 --- a/PIL/PngImagePlugin.py +++ b/PIL/PngImagePlugin.py @@ -147,6 +147,17 @@ class ChunkStream: return cids +# -------------------------------------------------------------------- +# Subclass of string to allow iTXt chunks to look like strings while +# keeping their extra information + +class iTXt(str): + @staticmethod + def __new__(cls, text, lang, tkey): + self = str.__new__(cls, text) + self.lang = lang + self.tkey = tkey + return self # -------------------------------------------------------------------- # PNG chunk container (for use with save(pnginfo=)) @@ -159,7 +170,26 @@ class PngInfo: def add(self, cid, data): self.chunks.append((cid, data)) + def add_itxt(self, key, value, lang="", tkey="", zip=False): + 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: + import zlib + 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=0): + if isinstance(value, iTXt): + return self.add_itxt(key, value, value.lang, value.tkey, bool(zip)) + # The tEXt chunk stores latin-1 text if not isinstance(key, bytes): key = key.encode('latin-1', 'strict') @@ -329,6 +359,43 @@ class PngStream(ChunkStream): self.im_info[k] = self.im_text[k] = 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 = i8(r[0]), i8(r[1]), r[2:] + try: + lang, tk, v = r.split(b"\0", 2) + except ValueError: + return s + if cf != 0: + if cm == 0: + import zlib + try: + v = zlib.decompress(v) + except zlib.error: + return s + else: + return s + if bytes is not str: + 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) + + return s + # -------------------------------------------------------------------- # PNG reader From 2b4d91ed531f7b4a4cd9b266d98ad9d32796c333 Mon Sep 17 00:00:00 2001 From: Fredrik Tolf Date: Wed, 23 Jul 2014 01:09:06 -0700 Subject: [PATCH 118/311] Added iTXt tests. --- Tests/test_file_png.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/Tests/test_file_png.py b/Tests/test_file_png.py index de96fdf3e..9d20ba2ab 100644 --- a/Tests/test_file_png.py +++ b/Tests/test_file_png.py @@ -129,6 +129,39 @@ class TestFilePng(PillowTestCase): HEAD + chunk(b'zTXt', b'spam\0\0' + zlib.compress(b'egg')) + TAIL) self.assertEqual(im.info, {'spam': 'egg'}) + def test_bad_itxt(self): + + im = load(HEAD + chunk(b'iTXt') + TAIL) + self.assertEqual(im.info, {}) + + im = load(HEAD + chunk(b'iTXt', b'spam') + TAIL) + self.assertEqual(im.info, {}) + + im = load(HEAD + chunk(b'iTXt', b'spam\0') + TAIL) + self.assertEqual(im.info, {}) + + im = load(HEAD + chunk(b'iTXt', b'spam\0\x02') + TAIL) + self.assertEqual(im.info, {}) + + im = load(HEAD + chunk(b'iTXt', b'spam\0\0\0foo\0') + TAIL) + self.assertEqual(im.info, {}) + + im = load(HEAD + chunk(b'iTXt', b'spam\0\0\0en\0Spam\0egg') + TAIL) + self.assertEqual(im.info, {"spam": "egg"}) + self.assertEqual(im.info["spam"].lang, "en") + self.assertEqual(im.info["spam"].tkey, "Spam") + + im = load(HEAD + chunk(b'iTXt', b'spam\0\1\0en\0Spam\0' + zlib.compress(b"egg")[:1]) + TAIL) + self.assertEqual(im.info, {}) + + im = load(HEAD + chunk(b'iTXt', b'spam\0\1\1en\0Spam\0' + zlib.compress(b"egg")) + TAIL) + self.assertEqual(im.info, {}) + + im = load(HEAD + chunk(b'iTXt', b'spam\0\1\0en\0Spam\0' + zlib.compress(b"egg")) + TAIL) + self.assertEqual(im.info, {"spam": "egg"}) + self.assertEqual(im.info["spam"].lang, "en") + self.assertEqual(im.info["spam"].tkey, "Spam") + def test_interlace(self): file = "Tests/images/pil123p.png" From 823d377e4751335be16fcf03dc85236360725c7f Mon Sep 17 00:00:00 2001 From: Fredrik Tolf Date: Wed, 23 Jul 2014 07:27:51 -0700 Subject: [PATCH 119/311] Added tests for iTXt saving. --- Tests/test_file_png.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Tests/test_file_png.py b/Tests/test_file_png.py index 9d20ba2ab..fbccfb9f6 100644 --- a/Tests/test_file_png.py +++ b/Tests/test_file_png.py @@ -265,6 +265,22 @@ class TestFilePng(PillowTestCase): self.assertEqual(im.info, {'TXT': 'VALUE', 'ZIP': 'VALUE'}) self.assertEqual(im.text, {'TXT': 'VALUE', 'ZIP': 'VALUE'}) + def test_roundtrip_itxt(self): + # Check iTXt roundtripping + + im = Image.new("RGB", (32, 32)) + info = PngImagePlugin.PngInfo() + info.add_itxt("spam", "Eggs", "en", "Spam") + info.add_text("eggs", PngImagePlugin.iTXt("Spam", "en", "Eggs"), zip=True) + + im = roundtrip(im, pnginfo=info) + self.assertEqual(im.info, {"spam": "Eggs", "eggs": "Spam"}) + self.assertEqual(im.text, {"spam": "Eggs", "eggs": "Spam"}) + self.assertEqual(im.text["spam"].lang, "en") + self.assertEqual(im.text["spam"].tkey, "Spam") + self.assertEqual(im.text["eggs"].lang, "en") + self.assertEqual(im.text["eggs"].tkey, "Eggs") + def test_scary(self): # Check reading of evil PNG file. For information, see: # http://scary.beasts.org/security/CESA-2004-001.txt From a9f4e30641d9c2d0348d0de1721877998bd7cfaa Mon Sep 17 00:00:00 2001 From: Fredrik Tolf Date: Wed, 23 Jul 2014 07:43:52 -0700 Subject: [PATCH 120/311] Save detected non-Latin1 characters as iTXt to preserve them. --- PIL/PngImagePlugin.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/PIL/PngImagePlugin.py b/PIL/PngImagePlugin.py index 34fff1a31..4dbedb783 100644 --- a/PIL/PngImagePlugin.py +++ b/PIL/PngImagePlugin.py @@ -191,12 +191,15 @@ class PngInfo: return self.add_itxt(key, value, value.lang, value.tkey, bool(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=bool(zip)) + if not isinstance(key, bytes): key = key.encode('latin-1', 'strict') - if not isinstance(value, bytes): - value = value.encode('latin-1', 'replace') - if zip: import zlib self.add(b"zTXt", key + b"\0\0" + zlib.compress(value)) From 2687b5cb8deea43995aa3dc48579a273e32ea1c3 Mon Sep 17 00:00:00 2001 From: Fredrik Tolf Date: Wed, 23 Jul 2014 08:17:11 -0700 Subject: [PATCH 121/311] Test unicode preservation in text chunks. --- Tests/test_file_png.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/Tests/test_file_png.py b/Tests/test_file_png.py index fbccfb9f6..8ef166347 100644 --- a/Tests/test_file_png.py +++ b/Tests/test_file_png.py @@ -281,6 +281,34 @@ class TestFilePng(PillowTestCase): self.assertEqual(im.text["eggs"].lang, "en") self.assertEqual(im.text["eggs"].tkey, "Eggs") + def test_nonunicode_text(self): + # Check so that non-Unicode text is saved as a tEXt rather than iTXt + + im = Image.new("RGB", (32, 32)) + info = PngImagePlugin.PngInfo() + info.add_text("Text", "Ascii") + im = roundtrip(im, pnginfo=info) + self.assertEqual(type(im.info["Text"]), str) + + def test_unicode_text(self): + # Check preservation of non-ASCII characters on Python3 + # This cannot really be meaningfully tested on Python2, + # since it didn't preserve charsets to begin with. + + def rt_text(value): + im = Image.new("RGB", (32, 32)) + info = PngImagePlugin.PngInfo() + info.add_text("Text", value) + im = roundtrip(im, pnginfo=info) + self.assertEqual(im.info, {"Text": value}) + + if str is not bytes: + rt_text(" Aa" + chr(0xa0) + chr(0xc4) + chr(0xff)) # Latin1 + rt_text(chr(0x400) + chr(0x472) + chr(0x4ff)) # Cyrillic + rt_text(chr(0x4e00) + chr(0x66f0) + # CJK + chr(0x9fba) + chr(0x3042) + chr(0xac00)) + rt_text("A" + chr(0xc4) + chr(0x472) + chr(0x3042)) # Combined + def test_scary(self): # Check reading of evil PNG file. For information, see: # http://scary.beasts.org/security/CESA-2004-001.txt From 832e11bed50d66e38e0bae5ac2ff8c9219388fc1 Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Wed, 23 Jul 2014 11:27:46 -0400 Subject: [PATCH 122/311] Enabled seeking in MPO files. Note to self: either put the offset in the load_seek() definition or the tile definition, not both. --- PIL/MpoImagePlugin.py | 9 ++++++++- Tests/test_file_mpo.py | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/PIL/MpoImagePlugin.py b/PIL/MpoImagePlugin.py index 6594b74b0..6dda2e513 100644 --- a/PIL/MpoImagePlugin.py +++ b/PIL/MpoImagePlugin.py @@ -49,14 +49,21 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile): 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 frame < 0 or frame >= self.__framecount: raise EOFError("no more images in MPO file") else: self.fp = self.__fp - self.fp.seek(self.__mpoffsets[frame]) self.offset = self.__mpoffsets[frame] + self.tile = [ + ("jpeg", (0, 0) + self.size, self.offset, (self.mode, "")) + ] self.__frame = frame def tell(self): diff --git a/Tests/test_file_mpo.py b/Tests/test_file_mpo.py index a0bcf6f40..b4ab38733 100644 --- a/Tests/test_file_mpo.py +++ b/Tests/test_file_mpo.py @@ -73,6 +73,20 @@ class TestFileMpo(PillowTestCase): # and this one, too im.seek(0) self.assertEqual(im.tell(), 0) + + def test_image_grab(self): + for test_file in test_files: + im = Image.open(test_file) + self.assertEqual(im.tell(), 0) + im0 = im.tobytes() + im.seek(1) + self.assertEqual(im.tell(), 1) + im1 = im.tobytes() + im.seek(0) + self.assertEqual(im.tell(), 0) + im0 = im.tobytes() + self.assertEqual(im0, im02) + self.assertNotEqual(im0, im1) if __name__ == '__main__': From 8d7266afc546ff134a59005611ad58c29f6b1c2b Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Wed, 23 Jul 2014 11:36:23 -0400 Subject: [PATCH 123/311] Fixed typo in new MPO unit test. --- Tests/test_file_mpo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_file_mpo.py b/Tests/test_file_mpo.py index b4ab38733..9cd59bffd 100644 --- a/Tests/test_file_mpo.py +++ b/Tests/test_file_mpo.py @@ -84,7 +84,7 @@ class TestFileMpo(PillowTestCase): im1 = im.tobytes() im.seek(0) self.assertEqual(im.tell(), 0) - im0 = im.tobytes() + im02 = im.tobytes() self.assertEqual(im0, im02) self.assertNotEqual(im0, im1) From ffe8887cc6ab2d45bf366b2b039f73e7aa8a5d5f Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 23 Jul 2014 08:48:55 -0700 Subject: [PATCH 124/311] profiler for testing --- profile-installed.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100755 profile-installed.py diff --git a/profile-installed.py b/profile-installed.py new file mode 100755 index 000000000..485792f51 --- /dev/null +++ b/profile-installed.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python +import nose +import os +import sys +import glob + +import profile + +# monkey with the path, removing the local directory but adding the Tests/ +# directory for helper.py and the other local imports there. + +del(sys.path[0]) +sys.path.insert(0, os.path.abspath('./Tests')) + +# if there's no test selected (mostly) choose a working default. +# Something is required, because if we import the tests from the local +# directory, once again, we've got the non-installed PIL in the way +if len(sys.argv) == 1: + sys.argv.extend(glob.glob('Tests/test*.py')) + +# Make sure that nose doesn't muck with our paths. +if ('--no-path-adjustment' not in sys.argv) and ('-P' not in sys.argv): + sys.argv.insert(1, '--no-path-adjustment') + +if 'NOSE_PROCESSES' not in os.environ: + for arg in sys.argv: + if '--processes' in arg: + break + else: # for + sys.argv.insert(1, '--processes=-1') # -1 == number of cores + sys.argv.insert(1, '--process-timeout=30') + +if __name__ == '__main__': + profile.run("nose.main()", sort=2) From 67c235b7c084c8fed6284cd1b7f43f8d67754d19 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 23 Jul 2014 08:49:19 -0700 Subject: [PATCH 125/311] Don't DOS pypy --- Tests/test_format_hsv.py | 48 ++++++++++++++++------------------------ 1 file changed, 19 insertions(+), 29 deletions(-) diff --git a/Tests/test_format_hsv.py b/Tests/test_format_hsv.py index 1a9c46bd7..be9c86e1c 100644 --- a/Tests/test_format_hsv.py +++ b/Tests/test_format_hsv.py @@ -12,7 +12,10 @@ class TestFormatHSV(PillowTestCase): return float(ord(i))/255.0 def to_int(self, f): return int(f*255.0) - + def tuple_to_ints(self, tp): + x,y,z = tp + return (int(x*255.0), int(y*255.0), int(z*255.0)) + def test_sanity(self): im = Image.new('HSV', (100,100)) @@ -49,38 +52,24 @@ class TestFormatHSV(PillowTestCase): (r,g,b) = im.split() if bytes is str: - f_r = map(self.str_to_float,r.tobytes()) - f_g = map(self.str_to_float,g.tobytes()) - f_b = map(self.str_to_float,b.tobytes()) + conv_func = self.str_to_float else: - f_r = map(self.int_to_float,r.tobytes()) - f_g = map(self.int_to_float,g.tobytes()) - f_b = map(self.int_to_float,b.tobytes()) - - f_h = []; - f_s = []; - f_v = []; + conv_func = self.int_to_float if hasattr(itertools, 'izip'): iter_helper = itertools.izip else: iter_helper = itertools.zip_longest + + + converted = [self.tuple_to_ints(func(conv_func(_r), conv_func(_g), conv_func(_b))) + for (_r, _g, _b) in iter_helper(r.tobytes(), g.tobytes(), b.tobytes())] + + + new_bytes = b''.join(chr(h)+chr(s)+chr(v) for (h,s,v) in converted) + + hsv = Image.frombytes(mode,r.size, new_bytes) - for (_r, _g, _b) in iter_helper(f_r, f_g, f_b): - _h, _s, _v = func(_r, _g, _b) - f_h.append(_h) - f_s.append(_s) - f_v.append(_v) - - h = Image.new('L', r.size) - h.putdata(list(map(self.to_int, f_h))) - s = Image.new('L', r.size) - s.putdata(list(map(self.to_int, f_s))) - v = Image.new('L', r.size) - v.putdata(list(map(self.to_int, f_v))) - - hsv = Image.merge(mode, (h, s, v)) - return hsv def to_hsv_colorsys(self, im): @@ -90,8 +79,9 @@ class TestFormatHSV(PillowTestCase): return self.to_xxx_colorsys(im, colorsys.hsv_to_rgb, 'RGB') def test_wedge(self): - im = self.wedge().convert('HSV') - comparable = self.to_hsv_colorsys(self.wedge()) + src = self.wedge().resize((3*32,32),Image.BILINEAR) + im = src.convert('HSV') + comparable = self.to_hsv_colorsys(src) #print (im.getpixel((448, 64))) #print (comparable.getpixel((448, 64))) @@ -111,7 +101,7 @@ class TestFormatHSV(PillowTestCase): #print (im.getpixel((192, 64))) - comparable = self.wedge() + comparable = src im = im.convert('RGB') #im.split()[0].show() From e14e3593d98056fb86811e4613f221009320d5fe Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 23 Jul 2014 09:08:28 -0700 Subject: [PATCH 126/311] And now for something completely different. Py3 compatibility --- Tests/test_format_hsv.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Tests/test_format_hsv.py b/Tests/test_format_hsv.py index be9c86e1c..03603aa9b 100644 --- a/Tests/test_format_hsv.py +++ b/Tests/test_format_hsv.py @@ -65,8 +65,10 @@ class TestFormatHSV(PillowTestCase): converted = [self.tuple_to_ints(func(conv_func(_r), conv_func(_g), conv_func(_b))) for (_r, _g, _b) in iter_helper(r.tobytes(), g.tobytes(), b.tobytes())] - - new_bytes = b''.join(chr(h)+chr(s)+chr(v) for (h,s,v) in converted) + if str is bytes: + new_bytes = b''.join(chr(h)+chr(s)+chr(v) for (h,s,v) in converted) + else: + new_bytes = b''.join(bytes(chr(h)+chr(s)+chr(v), 'latin-1') for (h,s,v) in converted) hsv = Image.frombytes(mode,r.size, new_bytes) From 75dac32a0a1c6755e41735c9098d4932c001e405 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 23 Jul 2014 14:30:55 -0700 Subject: [PATCH 127/311] single threaded for profile-installed.py --- profile-installed.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/profile-installed.py b/profile-installed.py index 485792f51..be9a960d2 100755 --- a/profile-installed.py +++ b/profile-installed.py @@ -21,14 +21,6 @@ if len(sys.argv) == 1: # Make sure that nose doesn't muck with our paths. if ('--no-path-adjustment' not in sys.argv) and ('-P' not in sys.argv): sys.argv.insert(1, '--no-path-adjustment') - -if 'NOSE_PROCESSES' not in os.environ: - for arg in sys.argv: - if '--processes' in arg: - break - else: # for - sys.argv.insert(1, '--processes=-1') # -1 == number of cores - sys.argv.insert(1, '--process-timeout=30') if __name__ == '__main__': profile.run("nose.main()", sort=2) From 94ca2b10763bd6ed127fba85b976dff703a64f3b Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 23 Jul 2014 14:31:49 -0700 Subject: [PATCH 128/311] using skip known bad --- Tests/helper.py | 5 ++++- Tests/test_image_point.py | 11 ++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Tests/helper.py b/Tests/helper.py index 082fb93f9..3f7913b11 100644 --- a/Tests/helper.py +++ b/Tests/helper.py @@ -124,7 +124,8 @@ class PillowTestCase(unittest.TestCase): self.assertTrue(found) return result - def skipKnownBadTest(self, msg=None, platform=None, travis=None): + def skipKnownBadTest(self, msg=None, platform=None, + travis=None, interpreter=None): # Skip if platform/travis matches, and # PILLOW_RUN_KNOWN_BAD is not true in the environment. if bool(os.environ.get('PILLOW_RUN_KNOWN_BAD', False)): @@ -136,6 +137,8 @@ class PillowTestCase(unittest.TestCase): skip = sys.platform.startswith(platform) if travis is not None: skip = skip and (travis == bool(os.environ.get('TRAVIS', False))) + if interpreter is not None: + skip = skip and (interpreter == 'pypy' and hasattr(sys, 'pypy_version_info')) if skip: self.skipTest(msg or "Known Bad Test") diff --git a/Tests/test_image_point.py b/Tests/test_image_point.py index 7b6cd4fc7..aa134fcc6 100644 --- a/Tests/test_image_point.py +++ b/Tests/test_image_point.py @@ -5,12 +5,6 @@ import sys class TestImagePoint(PillowTestCase): - def setUp(self): - if hasattr(sys, 'pypy_version_info'): - # This takes _forever_ on PyPy. Open Bug, - # see https://github.com/python-pillow/Pillow/issues/484 - self.skipTest("Too slow on PyPy") - def test_sanity(self): im = lena() @@ -29,7 +23,10 @@ class TestImagePoint(PillowTestCase): def test_16bit_lut(self): """ Tests for 16 bit -> 8 bit lut for converting I->L images see https://github.com/python-pillow/Pillow/issues/440 - """ + """ + # This takes _forever_ on PyPy. Open Bug, + # see https://github.com/python-pillow/Pillow/issues/484 + self.skipKnownBadTest(msg="Too Slow on pypy", interpreter='pypy') im = lena("I") im.point(list(range(256))*256, 'L') From a5aea42bc9d82a351d75e0e73f52f294cb48039b Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 23 Jul 2014 14:37:04 -0700 Subject: [PATCH 129/311] Use PySequence_Fast* to iterate over the list Pre commit: $ NOSE_PROCESSES=0 PILLOW_RUN_KNOWN_BAD=1 time ./test-installed.py Tests/test_image_point.py .. ---------------------------------------------------------------------- Ran 2 tests in 132.056s OK 131.63user 0.62system 2:12.28elapsed 99%CPU (0avgtext+0avgdata 292176maxresident)k 264inputs+0outputs (2major+451088minor)pagefaults 0swaps Post: $ NOSE_PROCESSES=0 PILLOW_RUN_KNOWN_BAD=1 time ./test-installed.py Tests/test_image_point.py .. ---------------------------------------------------------------------- Ran 2 tests in 0.338s OK 0.52user 0.06system 0:00.59elapsed 98%CPU (0avgtext+0avgdata 257584maxresident)k 176inputs+32outputs (2major+18033minor)pagefaults 0swaps $ python --version Python 2.7.6 (2.3.1+dfsg-1~ppa1, Jun 20 2014, 09:27:47) [PyPy 2.3.1 with GCC 4.6.3] --- _imaging.c | 86 +++++++++++++++++++----------------------------------- 1 file changed, 30 insertions(+), 56 deletions(-) diff --git a/_imaging.c b/_imaging.c index 92258032f..7d0bcba04 100644 --- a/_imaging.c +++ b/_imaging.c @@ -365,9 +365,12 @@ getbands(const char* mode) static void* getlist(PyObject* arg, int* length, const char* wrong_length, int type) { - int i, n; + int i, n, itemp; + double dtemp; void* list; - + PyObject* seq; + PyObject* op; + if (!PySequence_Check(arg)) { PyErr_SetString(PyExc_TypeError, must_be_sequence); return NULL; @@ -383,70 +386,41 @@ getlist(PyObject* arg, int* length, const char* wrong_length, int type) if (!list) return PyErr_NoMemory(); + seq = PySequence_Fast(arg, must_be_sequence); + if (!seq) { + free(list); + PyErr_SetString(PyExc_TypeError, must_be_sequence); + return NULL; + } + switch (type) { case TYPE_UINT8: - if (PyList_Check(arg)) { - for (i = 0; i < n; i++) { - PyObject *op = PyList_GET_ITEM(arg, i); - int temp = PyInt_AsLong(op); - ((UINT8*)list)[i] = CLIP(temp); - } - } else { - for (i = 0; i < n; i++) { - PyObject *op = PySequence_GetItem(arg, i); - int temp = PyInt_AsLong(op); - Py_XDECREF(op); - ((UINT8*)list)[i] = CLIP(temp); - } + for (i = 0; i < n; i++) { + op = PySequence_Fast_GET_ITEM(seq, i); + itemp = PyInt_AsLong(op); + ((UINT8*)list)[i] = CLIP(itemp); } break; case TYPE_INT32: - if (PyList_Check(arg)) { - for (i = 0; i < n; i++) { - PyObject *op = PyList_GET_ITEM(arg, i); - int temp = PyInt_AsLong(op); - ((INT32*)list)[i] = temp; - } - } else { - for (i = 0; i < n; i++) { - PyObject *op = PySequence_GetItem(arg, i); - int temp = PyInt_AsLong(op); - Py_XDECREF(op); - ((INT32*)list)[i] = temp; - } + for (i = 0; i < n; i++) { + op = PySequence_Fast_GET_ITEM(seq, i); + itemp = PyInt_AsLong(op); + ((INT32*)list)[i] = itemp; } break; case TYPE_FLOAT32: - if (PyList_Check(arg)) { - for (i = 0; i < n; i++) { - PyObject *op = PyList_GET_ITEM(arg, i); - double temp = PyFloat_AsDouble(op); - ((FLOAT32*)list)[i] = (FLOAT32) temp; - } - } else { - for (i = 0; i < n; i++) { - PyObject *op = PySequence_GetItem(arg, i); - double temp = PyFloat_AsDouble(op); - Py_XDECREF(op); - ((FLOAT32*)list)[i] = (FLOAT32) temp; - } - } + for (i = 0; i < n; i++) { + op = PySequence_Fast_GET_ITEM(seq, i); + dtemp = PyFloat_AsDouble(op); + ((FLOAT32*)list)[i] = (FLOAT32) dtemp; + } break; case TYPE_DOUBLE: - if (PyList_Check(arg)) { - for (i = 0; i < n; i++) { - PyObject *op = PyList_GET_ITEM(arg, i); - double temp = PyFloat_AsDouble(op); - ((double*)list)[i] = temp; - } - } else { - for (i = 0; i < n; i++) { - PyObject *op = PySequence_GetItem(arg, i); - double temp = PyFloat_AsDouble(op); - Py_XDECREF(op); - ((double*)list)[i] = temp; - } - } + for (i = 0; i < n; i++) { + op = PySequence_Fast_GET_ITEM(seq, i); + dtemp = PyFloat_AsDouble(op); + ((double*)list)[i] = (double) dtemp; + } break; } From 5def1010c72bde10cebc2aafbb7cf6a30ae070c7 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 23 Jul 2014 15:16:23 -0700 Subject: [PATCH 130/311] DRY, moved case inside loop --- _imaging.c | 39 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/_imaging.c b/_imaging.c index 7d0bcba04..7c55f633b 100644 --- a/_imaging.c +++ b/_imaging.c @@ -393,35 +393,28 @@ getlist(PyObject* arg, int* length, const char* wrong_length, int type) return NULL; } - switch (type) { - case TYPE_UINT8: - for (i = 0; i < n; i++) { - op = PySequence_Fast_GET_ITEM(seq, i); + for (i = 0; i < n; i++) { + op = PySequence_Fast_GET_ITEM(seq, i); + // DRY, branch prediction is going to work _really_ well + // on this switch. And 3 fewer loops to copy/paste. + switch (type) { + case TYPE_UINT8: itemp = PyInt_AsLong(op); ((UINT8*)list)[i] = CLIP(itemp); - } - break; - case TYPE_INT32: - for (i = 0; i < n; i++) { - op = PySequence_Fast_GET_ITEM(seq, i); + break; + case TYPE_INT32: itemp = PyInt_AsLong(op); ((INT32*)list)[i] = itemp; - } - break; - case TYPE_FLOAT32: - for (i = 0; i < n; i++) { - op = PySequence_Fast_GET_ITEM(seq, i); - dtemp = PyFloat_AsDouble(op); - ((FLOAT32*)list)[i] = (FLOAT32) dtemp; - } - break; - case TYPE_DOUBLE: - for (i = 0; i < n; i++) { - op = PySequence_Fast_GET_ITEM(seq, i); + break; + case TYPE_FLOAT32: + dtemp = PyFloat_AsDouble(op); + ((FLOAT32*)list)[i] = (FLOAT32) dtemp; + break; + case TYPE_DOUBLE: dtemp = PyFloat_AsDouble(op); ((double*)list)[i] = (double) dtemp; - } - break; + break; + } } if (length) From 06d21bc709e80ffb97429ed85dde5530d3888526 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 23 Jul 2014 15:29:10 -0700 Subject: [PATCH 131/311] pypy performance test --- Tests/test_image_putdata.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Tests/test_image_putdata.py b/Tests/test_image_putdata.py index c7c3115aa..036ee285f 100644 --- a/Tests/test_image_putdata.py +++ b/Tests/test_image_putdata.py @@ -42,6 +42,10 @@ class TestImagePutData(PillowTestCase): self.assertEqual(put(sys.maxsize), (255, 255, 255, 127)) + def test_pypy_performance(self): + im = Image.new('L', (256,256)) + im.putdata(list(range(256))*256) + if __name__ == '__main__': unittest.main() From c9c80f9da5fe120181deb970e43efef903156bda Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 23 Jul 2014 15:38:11 -0700 Subject: [PATCH 132/311] Use PySequence_Fast for Image.putdata Pre-Commit: $ NOSE_PROCESSES=0 time ./test-installed.py Tests/test_image_putdata.py ... ---------------------------------------------------------------------- Ran 3 tests in 131.623s OK 131.77user 0.18system 2:14.04elapsed 98%CPU (0avgtext+0avgdata 325632maxresident)k 87376inputs+8outputs (314major+47333minor)pagefaults 0swaps Post: $ NOSE_PROCESSES=0 time ./test-installed.py Tests/test_image_putdata.py ... ---------------------------------------------------------------------- Ran 3 tests in 0.534s OK 0.77user 0.05system 0:00.83elapsed 99%CPU (0avgtext+0avgdata 296352maxresident)k 0inputs+0outputs (0major+21462minor)pagefaults 0swaps --- _imaging.c | 91 +++++++++++++++++++++++++----------------------------- 1 file changed, 42 insertions(+), 49 deletions(-) diff --git a/_imaging.c b/_imaging.c index 7c55f633b..c28bd4d93 100644 --- a/_imaging.c +++ b/_imaging.c @@ -1220,6 +1220,8 @@ _putdata(ImagingObject* self, PyObject* args) Py_ssize_t n, i, x, y; PyObject* data; + PyObject* seq; + PyObject* op; double scale = 1.0; double offset = 0.0; @@ -1259,69 +1261,61 @@ _putdata(ImagingObject* self, PyObject* args) x = 0, y++; } } else { - if (scale == 1.0 && offset == 0.0) { - /* Clipped data */ - if (PyList_Check(data)) { - for (i = x = y = 0; i < n; i++) { - PyObject *op = PyList_GET_ITEM(data, i); - image->image8[y][x] = (UINT8) CLIP(PyInt_AsLong(op)); - if (++x >= (int) image->xsize) - x = 0, y++; - } - } else { - for (i = x = y = 0; i < n; i++) { - PyObject *op = PySequence_GetItem(data, i); - image->image8[y][x] = (UINT8) CLIP(PyInt_AsLong(op)); - Py_XDECREF(op); - if (++x >= (int) image->xsize) - x = 0, y++; - } - } + seq = PySequence_Fast(data, must_be_sequence); + if (!seq) { + PyErr_SetString(PyExc_TypeError, must_be_sequence); + return NULL; + } + if (scale == 1.0 && offset == 0.0) { + /* Clipped data */ + for (i = x = y = 0; i < n; i++) { + op = PySequence_Fast_GET_ITEM(data, i); + image->image8[y][x] = (UINT8) CLIP(PyInt_AsLong(op)); + if (++x >= (int) image->xsize){ + x = 0, y++; + } + } + } else { - if (PyList_Check(data)) { - /* Scaled and clipped data */ - for (i = x = y = 0; i < n; i++) { - PyObject *op = PyList_GET_ITEM(data, i); - image->image8[y][x] = CLIP( - (int) (PyFloat_AsDouble(op) * scale + offset)); - if (++x >= (int) image->xsize) - x = 0, y++; - } - } else { - for (i = x = y = 0; i < n; i++) { - PyObject *op = PySequence_GetItem(data, i); - image->image8[y][x] = CLIP( - (int) (PyFloat_AsDouble(op) * scale + offset)); - Py_XDECREF(op); - if (++x >= (int) image->xsize) - x = 0, y++; - } - } - } - PyErr_Clear(); /* Avoid weird exceptions */ + /* Scaled and clipped data */ + for (i = x = y = 0; i < n; i++) { + PyObject *op = PySequence_Fast_GET_ITEM(data, i); + image->image8[y][x] = CLIP( + (int) (PyFloat_AsDouble(op) * scale + offset)); + if (++x >= (int) image->xsize){ + x = 0, y++; + } + } + } + PyErr_Clear(); /* Avoid weird exceptions */ } } else { /* 32-bit images */ + seq = PySequence_Fast(data, must_be_sequence); + if (!seq) { + PyErr_SetString(PyExc_TypeError, must_be_sequence); + return NULL; + } switch (image->type) { case IMAGING_TYPE_INT32: for (i = x = y = 0; i < n; i++) { - PyObject *op = PySequence_GetItem(data, i); + op = PySequence_Fast_GET_ITEM(data, i); IMAGING_PIXEL_INT32(image, x, y) = (INT32) (PyFloat_AsDouble(op) * scale + offset); - Py_XDECREF(op); - if (++x >= (int) image->xsize) + if (++x >= (int) image->xsize){ x = 0, y++; + } } PyErr_Clear(); /* Avoid weird exceptions */ break; case IMAGING_TYPE_FLOAT32: for (i = x = y = 0; i < n; i++) { - PyObject *op = PySequence_GetItem(data, i); + op = PySequence_Fast_GET_ITEM(data, i); IMAGING_PIXEL_FLOAT32(image, x, y) = (FLOAT32) (PyFloat_AsDouble(op) * scale + offset); - Py_XDECREF(op); - if (++x >= (int) image->xsize) + if (++x >= (int) image->xsize){ x = 0, y++; + } } PyErr_Clear(); /* Avoid weird exceptions */ break; @@ -1332,16 +1326,15 @@ _putdata(ImagingObject* self, PyObject* args) INT32 inkint; } u; - PyObject *op = PySequence_GetItem(data, i); + op = PySequence_Fast_GET_ITEM(data, i); if (!op || !getink(op, image, u.ink)) { - Py_DECREF(op); return NULL; } /* FIXME: what about scale and offset? */ image->image32[y][x] = u.inkint; - Py_XDECREF(op); - if (++x >= (int) image->xsize) + if (++x >= (int) image->xsize){ x = 0, y++; + } } PyErr_Clear(); /* Avoid weird exceptions */ break; From 2d13dbda6a3d9ddc8ac93e839162353bb7d9811d Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 23 Jul 2014 16:01:06 -0700 Subject: [PATCH 133/311] enable test_16bit_lut on pypy --- Tests/test_image_point.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_image_point.py b/Tests/test_image_point.py index aa134fcc6..63fb6fc38 100644 --- a/Tests/test_image_point.py +++ b/Tests/test_image_point.py @@ -26,7 +26,7 @@ class TestImagePoint(PillowTestCase): """ # This takes _forever_ on PyPy. Open Bug, # see https://github.com/python-pillow/Pillow/issues/484 - self.skipKnownBadTest(msg="Too Slow on pypy", interpreter='pypy') + #self.skipKnownBadTest(msg="Too Slow on pypy", interpreter='pypy') im = lena("I") im.point(list(range(256))*256, 'L') From ea0a31d9fe9b4088423bebb3ba259098268e2102 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 23 Jul 2014 17:02:57 -0700 Subject: [PATCH 134/311] 2.8 million pyaccesses take a while, nomatter what --- Tests/test_mode_i16.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Tests/test_mode_i16.py b/Tests/test_mode_i16.py index b7dc76fb4..0cd5dba0f 100644 --- a/Tests/test_mode_i16.py +++ b/Tests/test_mode_i16.py @@ -5,18 +5,22 @@ from PIL import Image class TestModeI16(PillowTestCase): + original = lena().resize((32,32)).convert('I') + def verify(self, im1): - im2 = lena("I") + im2 = self.original.copy() self.assertEqual(im1.size, im2.size) pix1 = im1.load() pix2 = im2.load() for y in range(im1.size[1]): for x in range(im1.size[0]): xy = x, y + p1 = pix1[xy] + p2 = pix2[xy] self.assertEqual( - pix1[xy], pix2[xy], + p1, p2, ("got %r from mode %s at %s, expected %r" % - (pix1[xy], im1.mode, xy, pix2[xy]))) + (p1, im1.mode, xy, p2))) def test_basic(self): # PIL 1.1 has limited support for 16-bit image data. Check that @@ -24,7 +28,7 @@ class TestModeI16(PillowTestCase): def basic(mode): - imIn = lena("I").convert(mode) + imIn = self.original.convert(mode) self.verify(imIn) w, h = imIn.size @@ -92,7 +96,7 @@ class TestModeI16(PillowTestCase): def test_convert(self): - im = lena("I") + im = self.original.copy() self.verify(im.convert("I;16")) self.verify(im.convert("I;16").convert("L")) From 13bd1d6006cf93c0b3f016a3efd502c8dcef3b95 Mon Sep 17 00:00:00 2001 From: Hugo Date: Thu, 24 Jul 2014 09:21:09 +0300 Subject: [PATCH 135/311] Update CHANGES.rst [CI skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index c93572cbd..a0253def0 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- HSV Support #816 + [wiredfool] + - Removed unusable ImagePalette.new() [hugovk] From dcd171c1b8485eb4234344194727e55ea090b85f Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Thu, 24 Jul 2014 11:16:12 -0400 Subject: [PATCH 136/311] Minor refactoring per discussion and MPO docs. --- PIL/Image.py | 13 ------------- PIL/JpegImagePlugin.py | 19 ++++++++++++++++++- PIL/MpoImagePlugin.py | 3 ++- docs/handbook/image-file-formats.rst | 14 ++++++++++++++ 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/PIL/Image.py b/PIL/Image.py index eb08fab9e..3a42e308b 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -2236,19 +2236,6 @@ def open(fp, mode="r"): fp.seek(0) im = factory(fp, filename) _decompression_bomb_check(im.size) - if i == 'JPEG': - # Things are more complicated for JPEGs; we need to parse - # more deeply than 16 characters and check the contents of - # a potential MP header block to be sure. - mpheader = im._getmp() - try: - if mpheader[45057] > 1: - # It's actually an MPO - factory, accept = OPEN['MPO'] - im = factory(fp, filename) - except (TypeError, IndexError): - # It is really a JPEG - pass return im except (SyntaxError, IndexError, TypeError): # import traceback diff --git a/PIL/JpegImagePlugin.py b/PIL/JpegImagePlugin.py index bedc42373..fbb855362 100644 --- a/PIL/JpegImagePlugin.py +++ b/PIL/JpegImagePlugin.py @@ -663,10 +663,27 @@ def _save_cjpeg(im, fp, filename): except: pass + +## +# Factory for making JPEG and MPO instances +def jpeg_factory(fp=None, filename=None): + im = JpegImageFile(fp, filename) + mpheader = im._getmp() + try: + if mpheader[45057] > 1: + # It's actually an MPO + from MpoImagePlugin import MpoImageFile + im = MpoImageFile(fp, filename) + except (TypeError, IndexError): + # It is really a JPEG + pass + return im + + # -------------------------------------------------------------------q- # Registry stuff -Image.register_open("JPEG", JpegImageFile, _accept) +Image.register_open("JPEG", jpeg_factory, _accept) Image.register_save("JPEG", _save) Image.register_extension("JPEG", ".jfif") diff --git a/PIL/MpoImagePlugin.py b/PIL/MpoImagePlugin.py index 6dda2e513..3c5bc35d4 100644 --- a/PIL/MpoImagePlugin.py +++ b/PIL/MpoImagePlugin.py @@ -37,6 +37,7 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile): format_description = "MPO (CIPA DC-007)" def _open(self): + self.fp.seek(0) # prep the fp in order to pass the JPEG test JpegImagePlugin.JpegImageFile._open(self) self.mpinfo = self._getmp() self.__framecount = self.mpinfo[0xB001] @@ -73,7 +74,7 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile): # -------------------------------------------------------------------q- # Registry stuff -Image.register_open("MPO", MpoImageFile, _accept) +Image.register_open("MPO", JpegImagePlugin.jpeg_factory, _accept) Image.register_save("MPO", _save) Image.register_extension("MPO", ".mpo") diff --git a/docs/handbook/image-file-formats.rst b/docs/handbook/image-file-formats.rst index 03e55f35a..bfc94058a 100644 --- a/docs/handbook/image-file-formats.rst +++ b/docs/handbook/image-file-formats.rst @@ -588,6 +588,20 @@ PIL identifies and reads Microsoft Image Composer (MIC) files. When opened, the first sprite in the file is loaded. You can use :py:meth:`~file.seek` and :py:meth:`~file.tell` to read other sprites from the file. +MPO +^^^ + +PIL identifies and reads Multi Picture Object (MPO) files, loading the primary +image when first opened. The :py:meth:`~file.seek` and :py:meth:`~file.tell` +methods may be used to read other pictures from the file. The pictures are +zero-indexed and random access is supported. + +MIC (read only) + +PIL identifies and reads Microsoft Image Composer (MIC) files. When opened, the +first sprite in the file is loaded. You can use :py:meth:`~file.seek` and +:py:meth:`~file.tell` to read other sprites from the file. + PCD ^^^ From a5683ab574ef6a356445b7a29c5dc2da2a1abc6f Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Thu, 24 Jul 2014 15:00:19 -0400 Subject: [PATCH 137/311] Implemented MP attribute breakdown with tests. --- PIL/JpegImagePlugin.py | 27 +++++++++++++++++++++++++++ PIL/TiffTags.py | 14 ++++++++++++++ Tests/test_file_mpo.py | 25 ++++++++++++++++++++++--- 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/PIL/JpegImagePlugin.py b/PIL/JpegImagePlugin.py index fbb855362..511208267 100644 --- a/PIL/JpegImagePlugin.py +++ b/PIL/JpegImagePlugin.py @@ -474,10 +474,37 @@ def _getmp(self): unpackedentry = unpack('{0}LLLHH'.format(endianness), rawmpentry) 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: raise SyntaxError("malformed MP Index (bad MP Entry)") + # 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 diff --git a/PIL/TiffTags.py b/PIL/TiffTags.py index f4420aacc..966779ce9 100644 --- a/PIL/TiffTags.py +++ b/PIL/TiffTags.py @@ -226,6 +226,20 @@ TAGS = { 45058: "MPEntry", 45059: "ImageUIDList", 45060: "TotalFrames", + 45313: "MPIndividualNum", + 45569: "PanOrientation", + 45570: "PanOverlap_H", + 45571: "PanOverlap_V", + 45572: "BaseViewpointNum", + 45573: "ConvergenceAngle", + 45574: "BaselineLength", + 45575: "VerticalDivergence", + 45576: "AxisDistance_X", + 45577: "AxisDistance_Y", + 45578: "AxisDistance_Z", + 45579: "YawAngle", + 45580: "PitchAngle", + 45581: "RollAngle", # Adobe DNG 50706: "DNGVersion", diff --git a/Tests/test_file_mpo.py b/Tests/test_file_mpo.py index 9cd59bffd..3ae26ff91 100644 --- a/Tests/test_file_mpo.py +++ b/Tests/test_file_mpo.py @@ -51,10 +51,29 @@ class TestFileMpo(PillowTestCase): def test_mp(self): for test_file in test_files: im = Image.open(test_file) - info = im._getmp() - self.assertEqual(info[45056], '0100') - self.assertEqual(info[45057], 2) + mpinfo = im._getmp() + self.assertEqual(mpinfo[45056], '0100') + self.assertEqual(mpinfo[45057], 2) + def test_mp_attribute(self): + for test_file in test_files: + im = Image.open(test_file) + mpinfo = im._getmp() + frameNumber = 0 + for mpentry in mpinfo[45058]: + mpattr = mpentry['Attribute'] + if frameNumber: + self.assertFalse(mpattr['RepresentativeImageFlag']) + else: + self.assertTrue(mpattr['RepresentativeImageFlag']) + self.assertFalse(mpattr['DependentParentImageFlag']) + self.assertFalse(mpattr['DependentChildImageFlag']) + self.assertEqual(mpattr['ImageDataFormat'], 'JPEG') + self.assertEqual(mpattr['MPType'], + 'Multi-Frame Image: (Disparity)') + self.assertEqual(mpattr['Reserved'], 0) + frameNumber += 1 + def test_seek(self): for test_file in test_files: im = Image.open(test_file) From 14976346a874ba4765a0af660ba1a01c1ee4232d Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Fri, 25 Jul 2014 11:50:21 -0400 Subject: [PATCH 138/311] Fixed import for Python 3. Fixed the trivial import bug that prevented the Python 3 version of MPO from running. On the way fixed the trivial C bug that prevented Convert.c from compiling properly in a Mac OS X environment for a Python 3 target. --- PIL/JpegImagePlugin.py | 2 +- libImaging/Convert.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/PIL/JpegImagePlugin.py b/PIL/JpegImagePlugin.py index 511208267..9cbab6b61 100644 --- a/PIL/JpegImagePlugin.py +++ b/PIL/JpegImagePlugin.py @@ -699,7 +699,7 @@ def jpeg_factory(fp=None, filename=None): try: if mpheader[45057] > 1: # It's actually an MPO - from MpoImagePlugin import MpoImageFile + from .MpoImagePlugin import MpoImageFile im = MpoImageFile(fp, filename) except (TypeError, IndexError): # It is really a JPEG diff --git a/libImaging/Convert.c b/libImaging/Convert.c index 4eb106c27..607441191 100644 --- a/libImaging/Convert.c +++ b/libImaging/Convert.c @@ -49,6 +49,10 @@ #define L(rgb)\ ((INT32) (rgb)[0]*299 + (INT32) (rgb)[1]*587 + (INT32) (rgb)[2]*114) +#ifndef uint +#define uint UINT32 +#endif + /* ------------------- */ /* 1 (bit) conversions */ /* ------------------- */ From 023ec0a2fc3d92fc12c1eeb60a8539662582add6 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Fri, 25 Jul 2014 10:32:55 -0700 Subject: [PATCH 139/311] Incorrect type -- fails on OSX --- libImaging/Convert.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libImaging/Convert.c b/libImaging/Convert.c index 4eb106c27..46a6cfb72 100644 --- a/libImaging/Convert.c +++ b/libImaging/Convert.c @@ -293,10 +293,10 @@ hsv2rgb(UINT8* out, const UINT8* in, int xsize) { // following colorsys.py int p,q,t; - uint up,uq,ut; + UINT8 up,uq,ut; int i, x; float f, fs; - uint h,s,v; + UINT8 h,s,v; for (x = 0; x < xsize; x++, in += 4) { h = in[0]; From 3b3f58d1bcaba0a4fd346ff65d679693480c7f32 Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Fri, 25 Jul 2014 14:47:07 -0400 Subject: [PATCH 140/311] Changed PIL to Pillow for newly supported formats. --- Tests/test_file_mpo.py | 2 +- docs/handbook/image-file-formats.rst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Tests/test_file_mpo.py b/Tests/test_file_mpo.py index 3ae26ff91..20589539b 100644 --- a/Tests/test_file_mpo.py +++ b/Tests/test_file_mpo.py @@ -52,7 +52,7 @@ class TestFileMpo(PillowTestCase): for test_file in test_files: im = Image.open(test_file) mpinfo = im._getmp() - self.assertEqual(mpinfo[45056], '0100') + self.assertEqual(mpinfo[45056], b'0100') self.assertEqual(mpinfo[45057], 2) def test_mp_attribute(self): diff --git a/docs/handbook/image-file-formats.rst b/docs/handbook/image-file-formats.rst index bfc94058a..8c9bb36ec 100644 --- a/docs/handbook/image-file-formats.rst +++ b/docs/handbook/image-file-formats.rst @@ -591,14 +591,14 @@ first sprite in the file is loaded. You can use :py:meth:`~file.seek` and MPO ^^^ -PIL identifies and reads Multi Picture Object (MPO) files, loading the primary +Pillow identifies and reads Multi Picture Object (MPO) files, loading the primary image when first opened. The :py:meth:`~file.seek` and :py:meth:`~file.tell` methods may be used to read other pictures from the file. The pictures are zero-indexed and random access is supported. MIC (read only) -PIL identifies and reads Microsoft Image Composer (MIC) files. When opened, the +Pillow identifies and reads Microsoft Image Composer (MIC) files. When opened, the first sprite in the file is loaded. You can use :py:meth:`~file.seek` and :py:meth:`~file.tell` to read other sprites from the file. From d54fe7fa1abe85e340a673e4f8f8873e80f98daf Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Fri, 25 Jul 2014 16:55:50 -0400 Subject: [PATCH 141/311] Removed unnecessary uint definition. --- libImaging/Convert.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/libImaging/Convert.c b/libImaging/Convert.c index 10c4c104a..46a6cfb72 100644 --- a/libImaging/Convert.c +++ b/libImaging/Convert.c @@ -49,10 +49,6 @@ #define L(rgb)\ ((INT32) (rgb)[0]*299 + (INT32) (rgb)[1]*587 + (INT32) (rgb)[2]*114) -#ifndef uint -#define uint UINT32 -#endif - /* ------------------- */ /* 1 (bit) conversions */ /* ------------------- */ From f234264959a93e9697f0eab7fabcd672c74ad287 Mon Sep 17 00:00:00 2001 From: Hugo Date: Sat, 26 Jul 2014 10:31:15 +0300 Subject: [PATCH 142/311] Update CHANGES.rst [CI skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index a0253def0..16f8234c7 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Added support for encoding and decoding iTXt chunks #818 + [dolda2000] + - HSV Support #816 [wiredfool] From 0dabb8ea1c1c66388a020025a076a531e3219f70 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Sat, 26 Jul 2014 09:59:33 -0700 Subject: [PATCH 143/311] Image Mode Docs --- docs/handbook/concepts.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/handbook/concepts.rst b/docs/handbook/concepts.rst index 93f964e41..b5e5e44c1 100644 --- a/docs/handbook/concepts.rst +++ b/docs/handbook/concepts.rst @@ -27,6 +27,8 @@ image. The current release supports the following standard modes: * ``RGBA`` (4x8-bit pixels, true color with transparency mask) * ``CMYK`` (4x8-bit pixels, color separation) * ``YCbCr`` (3x8-bit pixels, color video format) + * ``LAB`` (3x8-bit pixels, the L*a*b color space) + * ``HSV`` (3x8-bit pixels, Hue, Saturation, Value color space) * ``I`` (32-bit signed integer pixels) * ``F`` (32-bit floating point pixels) @@ -34,7 +36,7 @@ PIL also provides limited support for a few special modes, including ``LA`` (L with alpha), ``RGBX`` (true color with padding) and ``RGBa`` (true color with premultiplied alpha). However, PIL doesn’t support user-defined modes; if you to handle band combinations that are not listed above, use a sequence of Image -objects. +objects. You can read the mode of an image through the :py:attr:`~PIL.Image.Image.mode` attribute. This is a string containing one of the above values. From a63901f028ebe1b69d85a6e12ef095f70d94fb9d Mon Sep 17 00:00:00 2001 From: hugovk Date: Sun, 27 Jul 2014 13:14:28 +0300 Subject: [PATCH 144/311] Add CONTRIBUTING.md [CI skip] --- CONTRIBUTING.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..e6f4c3f9d --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,7 @@ +When reporting bugs, please include example code that reproduces the issue, and if possible a problem image. + +Let us know: + + * What is the expected output? What do you see instead? + + * What versions of Pillow and Python are you using? From 659b8c2f6f7ed8aceb011cb88ef5ba0fbd1e5a08 Mon Sep 17 00:00:00 2001 From: hugovk Date: Sun, 27 Jul 2014 22:18:42 +0300 Subject: [PATCH 145/311] More tests for TiffImagePlugin.py --- Tests/test_file_tiff.py | 131 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py index 72156bb39..9c832c206 100644 --- a/Tests/test_file_tiff.py +++ b/Tests/test_file_tiff.py @@ -141,6 +141,137 @@ class TestFileTiff(PillowTestCase): self.assertEqual( im.getextrema(), (-3.140936851501465, 3.140684127807617)) + def test___str__(self): + # Arrange + file = "Tests/images/pil136.tiff" + im = Image.open(file) + + # Act + ret = str(im.ifd) + + # Assert + self.assertIsInstance(ret, str) + self.assertEqual( + ret, + '{256: (55,), 257: (43,), 258: (8, 8, 8, 8), 259: (1,), ' + '262: (2,), 296: (2,), 273: (8,), 338: (1,), 277: (4,), ' + '279: (9460,), 282: ((720000, 10000),), ' + '283: ((720000, 10000),), 284: (1,)}') + + def test__delitem__(self): + # Arrange + file = "Tests/images/pil136.tiff" + im = Image.open(file) + len_before = len(im.ifd.as_dict()) + + # Act + del im.ifd[256] + + # Assert + len_after = len(im.ifd.as_dict()) + self.assertEqual(len_before, len_after + 1) + + def test_load_byte(self): + # Arrange + from PIL import TiffImagePlugin + ifd = TiffImagePlugin.ImageFileDirectory() + data = b"abc" + + # Act + ret = ifd.load_byte(data) + + # Assert + self.assertEqual(ret, b"abc") + + def test_load_string(self): + # Arrange + from PIL import TiffImagePlugin + ifd = TiffImagePlugin.ImageFileDirectory() + data = b"abc\0" + + # Act + ret = ifd.load_string(data) + + # Assert + self.assertEqual(ret, "abc") + + def test_load_float(self): + # Arrange + from PIL import TiffImagePlugin + ifd = TiffImagePlugin.ImageFileDirectory() + data = b"abcdabcd" + + # Act + ret = ifd.load_float(data) + + # Assert + self.assertEqual(ret, (1.6777999408082104e+22, 1.6777999408082104e+22)) + + def test_load_double(self): + # Arrange + from PIL import TiffImagePlugin + ifd = TiffImagePlugin.ImageFileDirectory() + data = b"abcdefghabcdefgh" + + # Act + ret = ifd.load_double(data) + + # Assert + self.assertEqual(ret, (8.540883223036124e+194, 8.540883223036124e+194)) + + def test_seek(self): + # Arrange + file = "Tests/images/pil136.tiff" + im = Image.open(file) + + # Act + im.seek(-1) + + # Assert + self.assertEqual(im.tell(), 0) + + def test_seek_eof(self): + # Arrange + file = "Tests/images/pil136.tiff" + im = Image.open(file) + self.assertEqual(im.tell(), 0) + + # Act / Assert + self.assertRaises(EOFError, lambda: im.seek(1)) + + def test__cvt_res_int(self): + # Arrange + from PIL.TiffImagePlugin import _cvt_res + value = 34 + + # Act + ret = _cvt_res(value) + + # Assert + self.assertEqual(ret, (34, 1)) + + def test__cvt_res_float(self): + # Arrange + from PIL.TiffImagePlugin import _cvt_res + value = 22.3 + + # Act + ret = _cvt_res(value) + + # Assert + self.assertEqual(ret, (1461452, 65536)) + + def test__cvt_res_sequence(self): + # Arrange + from PIL.TiffImagePlugin import _cvt_res + value = [0, 1] + + # Act + ret = _cvt_res(value) + + # Assert + self.assertEqual(ret, [0, 1]) + if __name__ == '__main__': unittest.main() From c97d1a5601bd5695eeaca31b82c7bc97b1ce8692 Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Mon, 28 Jul 2014 11:14:38 -0400 Subject: [PATCH 146/311] Updates to MPO handler based on review. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Took out the explicit reference to the MPO Plug-in in Image as it’s now indirectly referenced via the JPEG Plug-in. Removed the direct MPO Plug-in registration as it’s now shared with the JPEG Plug-in. Commented on assertion. --- PIL/Image.py | 4 ---- PIL/MpoImagePlugin.py | 6 +++++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/PIL/Image.py b/PIL/Image.py index 489b59b92..480410eff 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -353,10 +353,6 @@ def preinit(): from PIL import JpegImagePlugin except ImportError: pass - try: - from PIL import MpoImagePlugin - except ImportError: - pass try: from PIL import PpmImagePlugin except ImportError: diff --git a/PIL/MpoImagePlugin.py b/PIL/MpoImagePlugin.py index 3c5bc35d4..520e683d4 100644 --- a/PIL/MpoImagePlugin.py +++ b/PIL/MpoImagePlugin.py @@ -44,6 +44,8 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile): 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.__framecount == len(self.__mpoffsets) del self.info['mpoffset'] # no longer needed self.__fp = self.fp # FIXME: hack @@ -74,7 +76,9 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile): # -------------------------------------------------------------------q- # Registry stuff -Image.register_open("MPO", JpegImagePlugin.jpeg_factory, _accept) +# Note that since MPO shares a factory with JPEG, we do not need to do a +# separate registration for it here. +#Image.register_open("MPO", JpegImagePlugin.jpeg_factory, _accept) Image.register_save("MPO", _save) Image.register_extension("MPO", ".mpo") From 70528dd539fecb578a4f671015863351133c5820 Mon Sep 17 00:00:00 2001 From: hugovk Date: Mon, 28 Jul 2014 19:00:06 +0300 Subject: [PATCH 147/311] flake8 --- PIL/TiffImagePlugin.py | 228 +++++++++++++++++++++++------------------ 1 file changed, 127 insertions(+), 101 deletions(-) diff --git a/PIL/TiffImagePlugin.py b/PIL/TiffImagePlugin.py index 2e49931f7..faa7ff6cf 100644 --- a/PIL/TiffImagePlugin.py +++ b/PIL/TiffImagePlugin.py @@ -49,17 +49,18 @@ from PIL import _binary from PIL._util import isStringType import warnings -import array, sys +import array +import sys import collections import itertools import os # Set these to true to force use of libtiff for reading or writing. READ_LIBTIFF = False -WRITE_LIBTIFF= False +WRITE_LIBTIFF = False -II = b"II" # little-endian (intel-style) -MM = b"MM" # big-endian (motorola-style) +II = b"II" # little-endian (Intel style) +MM = b"MM" # big-endian (Motorola style) i8 = _binary.i8 o8 = _binary.o8 @@ -109,8 +110,8 @@ EXTRASAMPLES = 338 SAMPLEFORMAT = 339 JPEGTABLES = 347 COPYRIGHT = 33432 -IPTC_NAA_CHUNK = 33723 # newsphoto properties -PHOTOSHOP_CHUNK = 34377 # photoshop properties +IPTC_NAA_CHUNK = 33723 # newsphoto properties +PHOTOSHOP_CHUNK = 34377 # photoshop properties ICCPROFILE = 34675 EXIFIFD = 34665 XMP = 700 @@ -126,10 +127,10 @@ COMPRESSION_INFO = { 3: "group3", 4: "group4", 5: "tiff_lzw", - 6: "tiff_jpeg", # obsolete + 6: "tiff_jpeg", # obsolete 7: "jpeg", 8: "tiff_adobe_deflate", - 32771: "tiff_raw_16", # 16-bit padding + 32771: "tiff_raw_16", # 16-bit padding 32773: "packbits", 32809: "tiff_thunderscan", 32946: "tiff_deflate", @@ -137,7 +138,7 @@ COMPRESSION_INFO = { 34677: "tiff_sgilog24", } -COMPRESSION_INFO_REV = dict([(v,k) for (k,v) in COMPRESSION_INFO.items()]) +COMPRESSION_INFO_REV = dict([(v, k) for (k, v) in COMPRESSION_INFO.items()]) OPEN_INFO = { # (ByteOrder, PhotoInterpretation, SampleFormat, FillOrder, BitsPerSample, @@ -150,7 +151,7 @@ OPEN_INFO = { (II, 1, 1, 1, (1,), ()): ("1", "1"), (II, 1, 1, 2, (1,), ()): ("1", "1;R"), (II, 1, 1, 1, (8,), ()): ("L", "L"), - (II, 1, 1, 1, (8,8), (2,)): ("LA", "LA"), + (II, 1, 1, 1, (8, 8), (2,)): ("LA", "LA"), (II, 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"), @@ -158,13 +159,13 @@ OPEN_INFO = { (II, 1, 1, 1, (32,), ()): ("I", "I;32N"), (II, 1, 2, 1, (32,), ()): ("I", "I;32S"), (II, 1, 3, 1, (32,), ()): ("F", "F;32F"), - (II, 2, 1, 1, (8,8,8), ()): ("RGB", "RGB"), - (II, 2, 1, 2, (8,8,8), ()): ("RGB", "RGB;R"), - (II, 2, 1, 1, (8,8,8,8), ()): ("RGBA", "RGBA"), # missing ExtraSamples - (II, 2, 1, 1, (8,8,8,8), (0,)): ("RGBX", "RGBX"), - (II, 2, 1, 1, (8,8,8,8), (1,)): ("RGBA", "RGBa"), - (II, 2, 1, 1, (8,8,8,8), (2,)): ("RGBA", "RGBA"), - (II, 2, 1, 1, (8,8,8,8), (999,)): ("RGBA", "RGBA"), # corel draw 10 + (II, 2, 1, 1, (8, 8, 8), ()): ("RGB", "RGB"), + (II, 2, 1, 2, (8, 8, 8), ()): ("RGB", "RGB;R"), + (II, 2, 1, 1, (8, 8, 8, 8), ()): ("RGBA", "RGBA"), # missing ExtraSamples + (II, 2, 1, 1, (8, 8, 8, 8), (0,)): ("RGBX", "RGBX"), + (II, 2, 1, 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"), + (II, 2, 1, 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"), + (II, 2, 1, 1, (8, 8, 8, 8), (999,)): ("RGBA", "RGBA"), # Corel Draw 10 (II, 3, 1, 1, (1,), ()): ("P", "P;1"), (II, 3, 1, 2, (1,), ()): ("P", "P;1R"), (II, 3, 1, 1, (2,), ()): ("P", "P;2"), @@ -172,11 +173,11 @@ OPEN_INFO = { (II, 3, 1, 1, (4,), ()): ("P", "P;4"), (II, 3, 1, 2, (4,), ()): ("P", "P;4R"), (II, 3, 1, 1, (8,), ()): ("P", "P"), - (II, 3, 1, 1, (8,8), (2,)): ("PA", "PA"), + (II, 3, 1, 1, (8, 8), (2,)): ("PA", "PA"), (II, 3, 1, 2, (8,), ()): ("P", "P;R"), - (II, 5, 1, 1, (8,8,8,8), ()): ("CMYK", "CMYK"), - (II, 6, 1, 1, (8,8,8), ()): ("YCbCr", "YCbCr"), - (II, 8, 1, 1, (8,8,8), ()): ("LAB", "LAB"), + (II, 5, 1, 1, (8, 8, 8, 8), ()): ("CMYK", "CMYK"), + (II, 6, 1, 1, (8, 8, 8), ()): ("YCbCr", "YCbCr"), + (II, 8, 1, 1, (8, 8, 8), ()): ("LAB", "LAB"), (MM, 0, 1, 1, (1,), ()): ("1", "1;I"), (MM, 0, 1, 2, (1,), ()): ("1", "1;IR"), @@ -185,18 +186,18 @@ OPEN_INFO = { (MM, 1, 1, 1, (1,), ()): ("1", "1"), (MM, 1, 1, 2, (1,), ()): ("1", "1;R"), (MM, 1, 1, 1, (8,), ()): ("L", "L"), - (MM, 1, 1, 1, (8,8), (2,)): ("LA", "LA"), + (MM, 1, 1, 1, (8, 8), (2,)): ("LA", "LA"), (MM, 1, 1, 2, (8,), ()): ("L", "L;R"), (MM, 1, 1, 1, (16,), ()): ("I;16B", "I;16B"), (MM, 1, 2, 1, (16,), ()): ("I;16BS", "I;16BS"), (MM, 1, 2, 1, (32,), ()): ("I;32BS", "I;32BS"), (MM, 1, 3, 1, (32,), ()): ("F", "F;32BF"), - (MM, 2, 1, 1, (8,8,8), ()): ("RGB", "RGB"), - (MM, 2, 1, 2, (8,8,8), ()): ("RGB", "RGB;R"), - (MM, 2, 1, 1, (8,8,8,8), (0,)): ("RGBX", "RGBX"), - (MM, 2, 1, 1, (8,8,8,8), (1,)): ("RGBA", "RGBa"), - (MM, 2, 1, 1, (8,8,8,8), (2,)): ("RGBA", "RGBA"), - (MM, 2, 1, 1, (8,8,8,8), (999,)): ("RGBA", "RGBA"), # corel draw 10 + (MM, 2, 1, 1, (8, 8, 8), ()): ("RGB", "RGB"), + (MM, 2, 1, 2, (8, 8, 8), ()): ("RGB", "RGB;R"), + (MM, 2, 1, 1, (8, 8, 8, 8), (0,)): ("RGBX", "RGBX"), + (MM, 2, 1, 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"), + (MM, 2, 1, 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"), + (MM, 2, 1, 1, (8, 8, 8, 8), (999,)): ("RGBA", "RGBA"), # Corel Draw 10 (MM, 3, 1, 1, (1,), ()): ("P", "P;1"), (MM, 3, 1, 2, (1,), ()): ("P", "P;1R"), (MM, 3, 1, 1, (2,), ()): ("P", "P;2"), @@ -204,19 +205,21 @@ OPEN_INFO = { (MM, 3, 1, 1, (4,), ()): ("P", "P;4"), (MM, 3, 1, 2, (4,), ()): ("P", "P;4R"), (MM, 3, 1, 1, (8,), ()): ("P", "P"), - (MM, 3, 1, 1, (8,8), (2,)): ("PA", "PA"), + (MM, 3, 1, 1, (8, 8), (2,)): ("PA", "PA"), (MM, 3, 1, 2, (8,), ()): ("P", "P;R"), - (MM, 5, 1, 1, (8,8,8,8), ()): ("CMYK", "CMYK"), - (MM, 6, 1, 1, (8,8,8), ()): ("YCbCr", "YCbCr"), - (MM, 8, 1, 1, (8,8,8), ()): ("LAB", "LAB"), + (MM, 5, 1, 1, (8, 8, 8, 8), ()): ("CMYK", "CMYK"), + (MM, 6, 1, 1, (8, 8, 8), ()): ("YCbCr", "YCbCr"), + (MM, 8, 1, 1, (8, 8, 8), ()): ("LAB", "LAB"), } PREFIXES = [b"MM\000\052", b"II\052\000", b"II\xBC\000"] + def _accept(prefix): return prefix[:4] in PREFIXES + ## # Wrapper for TIFF IFDs. @@ -276,7 +279,7 @@ class ImageFileDirectory(collections.MutableMapping): #: For a complete dictionary, use the as_dict method. self.tags = {} self.tagdata = {} - self.tagtype = {} # added 2008-06-05 by Florian Hoech + self.tagtype = {} # added 2008-06-05 by Florian Hoech self.next = None def __str__(self): @@ -287,7 +290,9 @@ class ImageFileDirectory(collections.MutableMapping): return dict(self.items()) def named(self): - """Returns the complete tag dictionary, with named tags where posible.""" + """ + Returns the complete tag dictionary, with named tags where posible. + """ from PIL import TiffTags result = {} for tag_code, value in self.items(): @@ -295,7 +300,6 @@ class ImageFileDirectory(collections.MutableMapping): result[tag_name] = value return result - # dictionary API def __len__(self): @@ -305,7 +309,7 @@ class ImageFileDirectory(collections.MutableMapping): try: return self.tags[tag] except KeyError: - data = self.tagdata[tag] # unpack on the fly + data = self.tagdata[tag] # unpack on the fly type = self.tagtype[tag] size, handler = self.load_dispatch[type] self.tags[tag] = data = handler(self, data) @@ -319,7 +323,7 @@ class ImageFileDirectory(collections.MutableMapping): if tag == SAMPLEFORMAT: # work around broken (?) matrox library # (from Ted Wright, via Bob Klimek) - raise KeyError # use default + raise KeyError # use default raise ValueError("not a scalar") return value[0] except KeyError: @@ -433,7 +437,7 @@ class ImageFileDirectory(collections.MutableMapping): except KeyError: if Image.DEBUG: print("- unsupported type", typ) - continue # ignore unsupported type + continue # ignore unsupported type size, handler = dispatch @@ -449,14 +453,19 @@ class ImageFileDirectory(collections.MutableMapping): data = ifd[8:8+size] if len(data) != size: - warnings.warn("Possibly corrupt EXIF data. Expecting to read %d bytes but only got %d. Skipping tag %s" % (size, len(data), tag)) + warnings.warn( + "Possibly corrupt EXIF data. " + "Expecting to read %d bytes but only got %d. " + "Skipping tag %s" % (size, len(data), tag)) continue self.tagdata[tag] = data self.tagtype[tag] = typ if Image.DEBUG: - if tag in (COLORMAP, IPTC_NAA_CHUNK, PHOTOSHOP_CHUNK, ICCPROFILE, XMP): + if tag in ( + COLORMAP, IPTC_NAA_CHUNK, + PHOTOSHOP_CHUNK, ICCPROFILE, XMP): print("- value: " % size) else: print("- value:", self[tag]) @@ -518,8 +527,8 @@ class ImageFileDirectory(collections.MutableMapping): # integer data if tag == STRIPOFFSETS: stripoffsets = len(directory) - typ = 4 # to avoid catch-22 - elif tag in (X_RESOLUTION, Y_RESOLUTION) or typ==5: + typ = 4 # to avoid catch-22 + elif tag in (X_RESOLUTION, Y_RESOLUTION) or typ == 5: # identify rational data fields typ = 5 if isinstance(value[0], tuple): @@ -541,7 +550,9 @@ class ImageFileDirectory(collections.MutableMapping): typname = TiffTags.TYPES.get(typ, "unknown") print("save: %s (%d)" % (tagname, tag), end=' ') print("- type: %s (%d)" % (typname, typ), end=' ') - if tag in (COLORMAP, IPTC_NAA_CHUNK, PHOTOSHOP_CHUNK, ICCPROFILE, XMP): + if tag in ( + COLORMAP, IPTC_NAA_CHUNK, + PHOTOSHOP_CHUNK, ICCPROFILE, XMP): size = len(data) print("- value: " % size) else: @@ -576,7 +587,7 @@ class ImageFileDirectory(collections.MutableMapping): fp.write(o16(tag) + o16(typ) + o32(count) + value) # -- overwrite here for multi-page -- - fp.write(b"\0\0\0\0") # end of directory + fp.write(b"\0\0\0\0") # end of directory # pass 3: write auxiliary data to file for tag, typ, count, value, data in directory: @@ -586,6 +597,7 @@ class ImageFileDirectory(collections.MutableMapping): return offset + ## # Image plugin for TIFF files. @@ -616,7 +628,7 @@ class TiffImageFile(ImageFile.ImageFile): print ("- __first:", self.__first) print ("- ifh: ", ifh) - # and load the first frame + # and load the first frame self._seek(0) def seek(self, frame): @@ -694,9 +706,11 @@ class TiffImageFile(ImageFile.ImageFile): if not len(self.tile) == 1: raise IOError("Not exactly one tile") - # (self._compression, (extents tuple), 0, (rawmode, self._compression, fp)) + # (self._compression, (extents tuple), + # 0, (rawmode, self._compression, fp)) ignored, extents, ignored_2, args = self.tile[0] - decoder = Image._getdecoder(self.mode, 'libtiff', args, self.decoderconfig) + decoder = Image._getdecoder( + self.mode, 'libtiff', args, self.decoderconfig) try: decoder.setimage(self.im, extents) except ValueError: @@ -706,35 +720,35 @@ class TiffImageFile(ImageFile.ImageFile): # 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. + # 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 IOError if there's no underlying fp. Easier to deal - # with here by reordering. + # that returns an IOError if there's no underlying fp. Easier to + # dea. with here by reordering. if Image.DEBUG: print ("have getvalue. just sending in a string from getvalue") - n,err = decoder.decode(self.fp.getvalue()) + n, err = decoder.decode(self.fp.getvalue()) elif hasattr(self.fp, "fileno"): # we've got a actual file on disk, pass in the fp. if Image.DEBUG: print ("have fileno, calling fileno version of the decoder.") self.fp.seek(0) - n,err = decoder.decode(b"fpfp") # 4 bytes, otherwise the trace might error out + # 4 bytes, otherwise the trace might error out + n, err = decoder.decode(b"fpfp") else: # we have something else. if Image.DEBUG: print ("don't have fileno or getvalue. just reading") # UNDONE -- so much for that buffer size thing. - n,err = decoder.decode(self.fp.read()) - + n, err = decoder.decode(self.fp.read()) self.tile = [] self.readonly = 0 # libtiff closed the fp in a, we need to close self.fp, if possible if hasattr(self.fp, 'close'): self.fp.close() - self.fp = None # might be shared + self.fp = None # might be shared if err < 0: raise IOError(err) @@ -810,11 +824,11 @@ class TiffImageFile(ImageFile.ImageFile): xres = xres[0] / (xres[1] or 1) yres = yres[0] / (yres[1] or 1) resunit = getscalar(RESOLUTION_UNIT, 1) - if resunit == 2: # dots per inch + if resunit == 2: # dots per inch self.info["dpi"] = xres, yres - elif resunit == 3: # dots per centimeter. convert to dpi + elif resunit == 3: # dots per centimeter. convert to dpi self.info["dpi"] = xres * 2.54, yres * 2.54 - else: # No absolute unit of measurement + else: # No absolute unit of measurement self.info["resolution"] = xres, yres # build tile descriptors @@ -825,13 +839,14 @@ class TiffImageFile(ImageFile.ImageFile): offsets = self.tag[STRIPOFFSETS] h = getscalar(ROWSPERSTRIP, ysize) w = self.size[0] - if READ_LIBTIFF or self._compression in ["tiff_ccitt", "group3", "group4", - "tiff_jpeg", "tiff_adobe_deflate", - "tiff_thunderscan", "tiff_deflate", - "tiff_sgilog", "tiff_sgilog24", - "tiff_raw_16"]: - ## if Image.DEBUG: - ## print "Activating g4 compression for whole file" + if READ_LIBTIFF or self._compression in [ + "tiff_ccitt", "group3", "group4", + "tiff_jpeg", "tiff_adobe_deflate", + "tiff_thunderscan", "tiff_deflate", + "tiff_sgilog", "tiff_sgilog24", + "tiff_raw_16"]: + # if Image.DEBUG: + # print "Activating g4 compression for whole file" # Decoder expects entire file as one tile. # There's a buffer size limit in load (64k) @@ -850,7 +865,8 @@ class TiffImageFile(ImageFile.ImageFile): # libtiff closes the file descriptor, so pass in a dup. try: - fp = hasattr(self.fp, "fileno") and os.dup(self.fp.fileno()) + fp = hasattr(self.fp, "fileno") and \ + os.dup(self.fp.fileno()) except IOError: # io.BytesIO have a fileno, but returns an IOError if # it doesn't use a file descriptor. @@ -881,7 +897,7 @@ class TiffImageFile(ImageFile.ImageFile): # 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, fp ) + a = (rawmode, self._compression, fp) self.tile.append( (self._compression, (0, 0, w, ysize), @@ -893,8 +909,8 @@ class TiffImageFile(ImageFile.ImageFile): a = self._decoder(rawmode, l, i) self.tile.append( (self._compression, - (0, min(y, ysize), w, min(y+h, ysize)), - offsets[i], a)) + (0, min(y, ysize), w, min(y+h, ysize)), + offsets[i], a)) if Image.DEBUG: print ("tiles: ", self.tile) y = y + h @@ -914,8 +930,8 @@ class TiffImageFile(ImageFile.ImageFile): # is not a multiple of the tile size... self.tile.append( (self._compression, - (x, y, x+w, y+h), - o, a)) + (x, y, x+w, y+h), + o, a)) x = x + w if x >= self.size[0]: x, y = 0, y + h @@ -937,25 +953,27 @@ class TiffImageFile(ImageFile.ImageFile): # -------------------------------------------------------------------- # Write TIFF files -# little endian is default except for image modes with explict big endian byte-order +# little endian is default except for image modes with +# explict big endian byte-order SAVE_INFO = { - # mode => rawmode, byteorder, photometrics, sampleformat, bitspersample, extra + # 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), + "LA": ("LA", II, 1, 1, (8, 8), 2), "P": ("P", II, 3, 1, (8,), None), - "PA": ("PA", II, 3, 1, (8,8), 2), + "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), + "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), @@ -963,6 +981,7 @@ SAVE_INFO = { "F;32BF": ("F;32BF", MM, 1, 3, (32,), None), } + def _cvt_res(value): # convert value to TIFF rational number -- (numerator, denominator) if isinstance(value, collections.Sequence): @@ -973,6 +992,7 @@ def _cvt_res(value): value = float(value) return (int(value * 65536), 65536) + def _save(im, fp, filename): try: @@ -982,7 +1002,8 @@ def _save(im, fp, filename): ifd = ImageFileDirectory(prefix) - compression = im.encoderinfo.get('compression',im.info.get('compression','raw')) + compression = im.encoderinfo.get( + 'compression', im.info.get('compression', 'raw')) libtiff = WRITE_LIBTIFF or compression != 'raw' @@ -999,17 +1020,16 @@ def _save(im, fp, filename): ifd[IMAGELENGTH] = im.size[1] # write any arbitrary tags passed in as an ImageFileDirectory - info = im.encoderinfo.get("tiffinfo",{}) + info = im.encoderinfo.get("tiffinfo", {}) if Image.DEBUG: - print ("Tiffinfo Keys: %s"% info.keys) + print("Tiffinfo Keys: %s" % info.keys) keys = list(info.keys()) for key in keys: ifd[key] = info.get(key) try: ifd.tagtype[key] = info.tagtype[key] except: - pass # might not be an IFD, Might not have populated type - + 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 @@ -1030,7 +1050,7 @@ def _save(im, fp, filename): ifd[IMAGEDESCRIPTION] = im.encoderinfo["description"] if "resolution" in im.encoderinfo: ifd[X_RESOLUTION] = ifd[Y_RESOLUTION] \ - = _cvt_res(im.encoderinfo["resolution"]) + = _cvt_res(im.encoderinfo["resolution"]) if "x resolution" in im.encoderinfo: ifd[X_RESOLUTION] = _cvt_res(im.encoderinfo["x resolution"]) if "y resolution" in im.encoderinfo: @@ -1077,8 +1097,9 @@ def _save(im, fp, filename): stride = len(bits) * ((im.size[0]*bits[0]+7)//8) ifd[ROWSPERSTRIP] = im.size[1] ifd[STRIPBYTECOUNTS] = stride * im.size[1] - ifd[STRIPOFFSETS] = 0 # this is adjusted by IFD writer - ifd[COMPRESSION] = COMPRESSION_INFO_REV.get(compression,1) # no compression by default + ifd[STRIPOFFSETS] = 0 # this is adjusted by IFD writer + # no compression by default: + ifd[COMPRESSION] = COMPRESSION_INFO_REV.get(compression, 1) if libtiff: if Image.DEBUG: @@ -1089,23 +1110,27 @@ def _save(im, fp, filename): fp.seek(0) _fp = os.dup(fp.fileno()) - blocklist = [STRIPOFFSETS, STRIPBYTECOUNTS, ROWSPERSTRIP, ICCPROFILE] # ICC Profile crashes. - atts={} + # ICC Profile crashes. + blocklist = [STRIPOFFSETS, STRIPBYTECOUNTS, ROWSPERSTRIP, ICCPROFILE] + 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. - for k,v in itertools.chain(ifd.items(), getattr(im, 'ifd', {}).items()): + for k, v in itertools.chain( + ifd.items(), getattr(im, 'ifd', {}).items()): if k not in atts and k not in blocklist: if type(v[0]) == tuple and len(v) > 1: # A tuple of more than one rational tuples - # flatten to floats, following tiffcp.c->cpTag->TIFF_RATIONAL + # flatten to floats, + # following tiffcp.c->cpTag->TIFF_RATIONAL atts[k] = [float(elt[0])/float(elt[1]) for elt in v] continue if type(v[0]) == tuple and len(v) == 1: # A tuple of one rational tuples - # flatten to floats, following tiffcp.c->cpTag->TIFF_RATIONAL + # flatten to floats, + # following tiffcp.c->cpTag->TIFF_RATIONAL atts[k] = float(v[0][0])/float(v[0][1]) continue if type(v) == tuple and len(v) > 2: @@ -1115,7 +1140,8 @@ def _save(im, fp, filename): continue if type(v) == tuple and len(v) == 2: # one rational tuple - # flatten to float, following tiffcp.c->cpTag->TIFF_RATIONAL + # flatten to float, + # following tiffcp.c->cpTag->TIFF_RATIONAL atts[k] = float(v[0])/float(v[1]) continue if type(v) == tuple and len(v) == 1: @@ -1141,9 +1167,10 @@ def _save(im, fp, filename): a = (rawmode, compression, _fp, filename, atts) # print (im.mode, compression, a, im.encoderconfig) e = Image._getencoder(im.mode, 'libtiff', a, im.encoderconfig) - e.setimage(im.im, (0,0)+im.size) + e.setimage(im.im, (0, 0)+im.size) while True: - l, s, d = e.encode(16*1024) # undone, change to self.decodermaxblock + # undone, change to self.decodermaxblock: + l, s, d = e.encode(16*1024) if not _fp: fp.write(d) if s: @@ -1155,13 +1182,12 @@ def _save(im, fp, filename): offset = ifd.save(fp) ImageFile._save(im, fp, [ - ("raw", (0,0)+im.size, offset, (rawmode, stride, 1)) + ("raw", (0, 0)+im.size, offset, (rawmode, stride, 1)) ]) - # -- helper for multi-page save -- if "_debug_multipage" in im.encoderinfo: - #just to access o32 and o16 (using correct byte order) + # just to access o32 and o16 (using correct byte order) im._debug_multipage = ifd # From bfb482dc66432d83b5da894c83886ec5c973c499 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 28 Jul 2014 21:26:39 -0700 Subject: [PATCH 148/311] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 16f8234c7..2da2c77c6 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Added support for reading MPO files + [Feneric] + - Added support for encoding and decoding iTXt chunks #818 [dolda2000] From 78d26180647956b41372800eff223a3b5ca871d6 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 28 Jul 2014 21:49:11 -0700 Subject: [PATCH 149/311] Image.point tests for Float LUT --- Tests/test_image_point.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Tests/test_image_point.py b/Tests/test_image_point.py index 63fb6fc38..04054fa84 100644 --- a/Tests/test_image_point.py +++ b/Tests/test_image_point.py @@ -31,6 +31,16 @@ class TestImagePoint(PillowTestCase): im = lena("I") im.point(list(range(256))*256, 'L') + def test_f_lut(self): + """ Tests for floating point lut of 8bit gray image """ + im = lena('L') + lut = [0.5 * float(x) for x in range(256)] + + out = im.point(lut, 'F') + + int_lut = [x//2 for x in range(256)] + self.assert_image_equal(out.convert('L'), im.point(int_lut, 'L')) + if __name__ == '__main__': unittest.main() From 1a245a577bcc5a0fb2b73e0d2ca2b6827b31274e Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 28 Jul 2014 22:09:52 -0700 Subject: [PATCH 150/311] Mode F and I tests for Image.putdata --- Tests/test_image_putdata.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Tests/test_image_putdata.py b/Tests/test_image_putdata.py index 036ee285f..acea0d62a 100644 --- a/Tests/test_image_putdata.py +++ b/Tests/test_image_putdata.py @@ -46,6 +46,26 @@ class TestImagePutData(PillowTestCase): im = Image.new('L', (256,256)) im.putdata(list(range(256))*256) + def test_mode_i(self): + src = lena('L') + data = list(src.getdata()) + im = Image.new('I', src.size, 0) + im.putdata(data, 2, 256) + + target = [2* elt + 256 for elt in data] + self.assertEqual(list(im.getdata()), target) + + def test_mode_F(self): + src = lena('L') + data = list(src.getdata()) + im = Image.new('F', src.size, 0) + im.putdata(data, 2.0, 256.0) + + target = [2.0* float(elt) + 256.0 for elt in data] + self.assertEqual(list(im.getdata()), target) + + + if __name__ == '__main__': unittest.main() From e2a8a7a6a1c958eb8b400503029e05b447f83f22 Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 29 Jul 2014 13:27:13 +0300 Subject: [PATCH 151/311] Update CHANGES.rst [CI skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 2da2c77c6..87bc452c0 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- PyPy performance improvements #821 + [wiredfool] + - Added support for reading MPO files [Feneric] From 56404f6888d9ab19563b6a2103c1018a6db93519 Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 29 Jul 2014 23:00:38 +0300 Subject: [PATCH 152/311] Change wrapping to include some context on first line; plus typo fix --- PIL/TiffImagePlugin.py | 43 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/PIL/TiffImagePlugin.py b/PIL/TiffImagePlugin.py index faa7ff6cf..9bef30ebe 100644 --- a/PIL/TiffImagePlugin.py +++ b/PIL/TiffImagePlugin.py @@ -453,19 +453,17 @@ class ImageFileDirectory(collections.MutableMapping): data = ifd[8:8+size] if len(data) != size: - warnings.warn( - "Possibly corrupt EXIF data. " - "Expecting to read %d bytes but only got %d. " - "Skipping tag %s" % (size, len(data), tag)) + warnings.warn("Possibly corrupt EXIF data. " + "Expecting to read %d bytes but only got %d. " + "Skipping tag %s" % (size, len(data), tag)) continue self.tagdata[tag] = data self.tagtype[tag] = typ if Image.DEBUG: - if tag in ( - COLORMAP, IPTC_NAA_CHUNK, - PHOTOSHOP_CHUNK, ICCPROFILE, XMP): + if tag in (COLORMAP, IPTC_NAA_CHUNK, PHOTOSHOP_CHUNK, + ICCPROFILE, XMP): print("- value: " % size) else: print("- value:", self[tag]) @@ -550,9 +548,8 @@ class ImageFileDirectory(collections.MutableMapping): typname = TiffTags.TYPES.get(typ, "unknown") print("save: %s (%d)" % (tagname, tag), end=' ') print("- type: %s (%d)" % (typname, typ), end=' ') - if tag in ( - COLORMAP, IPTC_NAA_CHUNK, - PHOTOSHOP_CHUNK, ICCPROFILE, XMP): + if tag in (COLORMAP, IPTC_NAA_CHUNK, PHOTOSHOP_CHUNK, + ICCPROFILE, XMP): size = len(data) print("- value: " % size) else: @@ -709,8 +706,8 @@ class TiffImageFile(ImageFile.ImageFile): # (self._compression, (extents tuple), # 0, (rawmode, self._compression, fp)) ignored, extents, ignored_2, args = self.tile[0] - decoder = Image._getdecoder( - self.mode, 'libtiff', args, self.decoderconfig) + decoder = Image._getdecoder(self.mode, 'libtiff', args, + self.decoderconfig) try: decoder.setimage(self.im, extents) except ValueError: @@ -839,12 +836,14 @@ class TiffImageFile(ImageFile.ImageFile): offsets = self.tag[STRIPOFFSETS] h = getscalar(ROWSPERSTRIP, ysize) w = self.size[0] - if READ_LIBTIFF or self._compression in [ - "tiff_ccitt", "group3", "group4", - "tiff_jpeg", "tiff_adobe_deflate", - "tiff_thunderscan", "tiff_deflate", - "tiff_sgilog", "tiff_sgilog24", - "tiff_raw_16"]: + if READ_LIBTIFF or self._compression in ["tiff_ccitt", "group3", + "group4", "tiff_jpeg", + "tiff_adobe_deflate", + "tiff_thunderscan", + "tiff_deflate", + "tiff_sgilog", + "tiff_sgilog24", + "tiff_raw_16"]: # if Image.DEBUG: # print "Activating g4 compression for whole file" @@ -1002,8 +1001,8 @@ def _save(im, fp, filename): ifd = ImageFileDirectory(prefix) - compression = im.encoderinfo.get( - 'compression', im.info.get('compression', 'raw')) + compression = im.encoderinfo.get('compression', im.info.get('compression', + 'raw')) libtiff = WRITE_LIBTIFF or compression != 'raw' @@ -1118,8 +1117,8 @@ def _save(im, fp, filename): # 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. - for k, v in itertools.chain( - ifd.items(), getattr(im, 'ifd', {}).items()): + for k, v in itertools.chain(ifd.items(), + getattr(im, 'ifd', {}).items()): if k not in atts and k not in blocklist: if type(v[0]) == tuple and len(v) > 1: # A tuple of more than one rational tuples From 13eb3d667afb8df8b4ac9a68a4fb936b1f8f3e7e Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 29 Jul 2014 20:44:17 -0700 Subject: [PATCH 153/311] Added profile.tobytes() for ImageCms Profiles --- PIL/ImageCms.py | 2 ++ Tests/test_imagecms.py | 17 +++++++++++++++ _imagingcms.c | 47 +++++++++++++++++++++++++++++++++++++++++- 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/PIL/ImageCms.py b/PIL/ImageCms.py index 4ea6409d6..9848e5ba2 100644 --- a/PIL/ImageCms.py +++ b/PIL/ImageCms.py @@ -169,6 +169,8 @@ class ImageCmsProfile: self.product_name = None self.product_info = None + def tobytes(self): + return core.profile_tobytes(self.profile) class ImageCmsTransform(Image.ImagePointHandler): diff --git a/Tests/test_imagecms.py b/Tests/test_imagecms.py index 152241f90..74eef3037 100644 --- a/Tests/test_imagecms.py +++ b/Tests/test_imagecms.py @@ -210,6 +210,23 @@ class TestImageCms(PillowTestCase): self.assert_image_similar(lena(), out, 2) + def test_profile_tobytes(self): + from io import BytesIO + i = Image.open("Tests/images/rgb.jpg") + p = ImageCms.getOpenProfile(BytesIO(i.info["icc_profile"])) + + p2 = ImageCms.getOpenProfile(BytesIO(p.tobytes())) + + # not the same bytes as the original icc_profile, + # but it does roundtrip + self.assertEqual(p.tobytes(),p2.tobytes()) + self.assertEqual(ImageCms.getProfileName(p), + ImageCms.getProfileName(p2)) + self.assertEqual(ImageCms.getProfileDescription(p), + ImageCms.getProfileDescription(p2)) + + + if __name__ == '__main__': unittest.main() diff --git a/_imagingcms.c b/_imagingcms.c index 1b7ef49e1..3b822006a 100644 --- a/_imagingcms.c +++ b/_imagingcms.c @@ -49,7 +49,8 @@ http://www.cazabon.com\n\ /* known to-do list with current version: - Verify that PILmode->littleCMStype conversion in findLCMStype is correct for all PIL modes (it probably isn't for the more obscure ones) + Verify that PILmode->littleCMStype conversion in findLCMStype is correct for all + PIL modes (it probably isn't for the more obscure ones) Add support for creating custom RGB profiles on the fly Add support for checking presence of a specific tag in a profile @@ -134,6 +135,49 @@ cms_profile_fromstring(PyObject* self, PyObject* args) return cms_profile_new(hProfile); } +static PyObject* +cms_profile_tobytes(PyObject* self, PyObject* args) +{ + char *pProfile =NULL; + cmsUInt32Number nProfile; + PyObject* CmsProfile; + + cmsHPROFILE *profile; + + PyObject* ret; + if (!PyArg_ParseTuple(args, "O", &CmsProfile)){ + return NULL; + } + + profile = ((CmsProfileObject*)CmsProfile)->profile; + + if (!cmsSaveProfileToMem(profile, pProfile, &nProfile)) { + PyErr_SetString(PyExc_IOError, "Could not determine profile size"); + return NULL; + } + + pProfile = (char*)malloc(nProfile); + if (!pProfile) { + PyErr_SetString(PyExc_IOError, "Out of Memory"); + return NULL; + } + + if (!cmsSaveProfileToMem(profile, pProfile, &nProfile)) { + PyErr_SetString(PyExc_IOError, "Could not get profile"); + free(pProfile); + return NULL; + } + +#if PY_VERSION_HEX >= 0x03000000 + ret = PyBytes_FromStringAndSize(pProfile, (Py_ssize_t)nProfile); +#else + ret = PyString_FromStringAndSize(pProfile, (Py_ssize_t)nProfile); +#endif + + free(pProfile); + return ret; +} + static void cms_profile_dealloc(CmsProfileObject* self) { @@ -485,6 +529,7 @@ static PyMethodDef pyCMSdll_methods[] = { {"profile_open", cms_profile_open, 1}, {"profile_frombytes", cms_profile_fromstring, 1}, {"profile_fromstring", cms_profile_fromstring, 1}, + {"profile_tobytes", cms_profile_tobytes, 1}, /* profile and transform functions */ {"buildTransform", buildTransform, 1}, From 5966278643e356957986c52679184add492bf553 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 29 Jul 2014 21:20:11 -0700 Subject: [PATCH 154/311] Added im.info['icc_profile'] to results for ImageCms.applyTransform --- PIL/ImageCms.py | 4 ++++ Tests/test_imagecms.py | 14 +++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/PIL/ImageCms.py b/PIL/ImageCms.py index 9848e5ba2..e708d1dad 100644 --- a/PIL/ImageCms.py +++ b/PIL/ImageCms.py @@ -199,6 +199,8 @@ class ImageCmsTransform(Image.ImagePointHandler): 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) @@ -207,6 +209,7 @@ class ImageCmsTransform(Image.ImagePointHandler): 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): @@ -214,6 +217,7 @@ class ImageCmsTransform(Image.ImagePointHandler): 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 diff --git a/Tests/test_imagecms.py b/Tests/test_imagecms.py index 74eef3037..e731c8945 100644 --- a/Tests/test_imagecms.py +++ b/Tests/test_imagecms.py @@ -2,8 +2,11 @@ from helper import unittest, PillowTestCase, lena from PIL import Image +from io import BytesIO + try: from PIL import ImageCms + from PIL.ImageCms import ImageCmsProfile ImageCms.core.profile_open except ImportError as v: # Skipped via setUp() @@ -118,7 +121,7 @@ class TestImageCms(PillowTestCase): def test_extensions(self): # extensions - from io import BytesIO + i = Image.open("Tests/images/rgb.jpg") p = ImageCms.getOpenProfile(BytesIO(i.info["icc_profile"])) self.assertEqual( @@ -196,6 +199,11 @@ class TestImageCms(PillowTestCase): # img_srgb.save('temp.srgb.tif') # visually verified vs ps. self.assert_image_similar(lena(), img_srgb, 30) + self.assertTrue(img_srgb.info['icc_profile']) + + profile = ImageCmsProfile(BytesIO(img_srgb.info['icc_profile'])) + self.assertTrue('sRGB' in ImageCms.getProfileDescription(profile)) + def test_lab_roundtrip(self): # check to see if we're at least internally consistent. @@ -205,6 +213,10 @@ class TestImageCms(PillowTestCase): t2 = ImageCms.buildTransform(pLab, SRGB, "LAB", "RGB") i = ImageCms.applyTransform(lena(), t) + + self.assertEqual(i.info['icc_profile'], + ImageCmsProfile(pLab).tobytes()) + out = ImageCms.applyTransform(i, t2) self.assert_image_similar(lena(), out, 2) From c7a6f162caeea7bdcff2a2ece641eedf58cf9aa3 Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 30 Jul 2014 11:30:46 +0300 Subject: [PATCH 155/311] Add new pypy3: http://blog.travis-ci.com/2014-07-24-upcoming-build-environment-updates/ --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index b37588843..0dfb1c199 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,7 @@ env: MAX_CONCURRENCY=4 python: - "pypy" + - "pypy3" - 2.6 - 2.7 - "2.7_with_system_site_packages" # For PyQt4 From a5302dcea908fa4e9ad8662cb7d08852b6368981 Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 30 Jul 2014 12:04:04 +0300 Subject: [PATCH 156/311] Cover pypy --- .travis.yml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0dfb1c199..934d8ebf7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,18 +33,12 @@ script: - python setup.py clean - python setup.py build_ext --inplace - # Don't cover PyPy: it fails intermittently and is x5.8 slower (#640) - - if [ "$TRAVIS_PYTHON_VERSION" == "pypy" ]; then time python selftest.py; fi - - if [ "$TRAVIS_PYTHON_VERSION" == "pypy" ]; then time nosetests -vx Tests/test_*.py; fi - - # Cover the others - - if [ "$TRAVIS_PYTHON_VERSION" != "pypy" ]; then time coverage run --append --include=PIL/* selftest.py; fi - - if [ "$TRAVIS_PYTHON_VERSION" != "pypy" ]; then time coverage run --append --include=PIL/* -m nose -vx Tests/test_*.py; fi + - time coverage run --append --include=PIL/* selftest.py + - coverage run --append --include=PIL/* -m nose -vx Tests/test_*.py after_success: - coverage report - # No need to send empty coverage to Coveralls for PyPy - - if [ "$TRAVIS_PYTHON_VERSION" != "pypy" ]; then coveralls; fi + - coveralls - pip install pep8 pyflakes - pep8 --statistics --count PIL/*.py From b46f5c6b1e87e19866baad6b40098134d602b392 Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Wed, 30 Jul 2014 10:14:09 -0400 Subject: [PATCH 157/311] Better documented limited MPO save feature. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit At present it’s only possible to save the current frame of an MPO, not the MPO in its entirety. Added testing verifying as much. --- PIL/MpoImagePlugin.py | 3 ++- Tests/test_file_mpo.py | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/PIL/MpoImagePlugin.py b/PIL/MpoImagePlugin.py index 520e683d4..0d1185205 100644 --- a/PIL/MpoImagePlugin.py +++ b/PIL/MpoImagePlugin.py @@ -25,7 +25,8 @@ from PIL import Image, JpegImagePlugin def _accept(prefix): return JpegImagePlugin._accept(prefix) -def _save(im, fp, filename): +def _save(im, fp, filename, **options): + # Note that we can only save the current frame at present return JpegImagePlugin._save(im, fp, filename) ## diff --git a/Tests/test_file_mpo.py b/Tests/test_file_mpo.py index 20589539b..a221eec15 100644 --- a/Tests/test_file_mpo.py +++ b/Tests/test_file_mpo.py @@ -13,7 +13,8 @@ class TestFileMpo(PillowTestCase): if "jpeg_encoder" not in codecs or "jpeg_decoder" not in codecs: self.skipTest("jpeg support not available") - def roundtrip(self, im, **options): + def frame_roundtrip(self, im, **options): + # Note that for now, there is no MPO saving functionality out = BytesIO() im.save(out, "MPO", **options) bytes = out.tell() @@ -106,7 +107,19 @@ class TestFileMpo(PillowTestCase): im02 = im.tobytes() self.assertEqual(im0, im02) self.assertNotEqual(im0, im1) - + + def test_save(self): + # Note that only individual frames can be saved at present + for test_file in test_files: + im = Image.open(test_file) + self.assertEqual(im.tell(), 0) + jpg0 = self.frame_roundtrip(im) + self.assert_image_similar(im, jpg0, 30) + im.seek(1) + self.assertEqual(im.tell(), 1) + jpg1 = self.frame_roundtrip(im) + self.assert_image_similar(im, jpg1, 30) + if __name__ == '__main__': unittest.main() From 3f0ff0177e973c67efd756c73128b9d0a701a171 Mon Sep 17 00:00:00 2001 From: "Eric W. Brown" Date: Wed, 30 Jul 2014 10:16:51 -0400 Subject: [PATCH 158/311] Dropped unused "options" from MPO save. --- PIL/MpoImagePlugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PIL/MpoImagePlugin.py b/PIL/MpoImagePlugin.py index 0d1185205..d053d9026 100644 --- a/PIL/MpoImagePlugin.py +++ b/PIL/MpoImagePlugin.py @@ -25,7 +25,7 @@ from PIL import Image, JpegImagePlugin def _accept(prefix): return JpegImagePlugin._accept(prefix) -def _save(im, fp, filename, **options): +def _save(im, fp, filename): # Note that we can only save the current frame at present return JpegImagePlugin._save(im, fp, filename) From e49e689c70eb243322e57e9213df9f804c85d762 Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 30 Jul 2014 19:33:04 +0300 Subject: [PATCH 159/311] Add JPEG with IPTC data. My image, permission given to distribute under MIT licence --- Tests/images/iptc.jpg | Bin 0 -> 21019 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/iptc.jpg diff --git a/Tests/images/iptc.jpg b/Tests/images/iptc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4d49caa182b1a5db367629b2d2719db86566188 GIT binary patch literal 21019 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�Pv1_zh0eX(_Y5>3|X}u4a8%_zsvc0VXx9a^uWRg6WEmupKSiX{4nWY-^NX?T~ znJR}qX|yokcTaNcqv)~&M+q<~f3g=^tk)M4zaQK#$_)Oi7!UuKn*9L)Fh&R0RQ3#m zyNJM=e2xNmM&f<-!FqlP%PcJsPl8xjVOeq-sZ8zknO;zNg&u%z$ebAfLll!Z9Krt{ zxf$6Foub%H=8~qqQNyX;7FJAq(V%e^Fd+1vdgxB(?%20aKC@d|&+$V{JTPNS#fGKm z_AC;>{h`uEiYQ=gFeS6u2()PlIK0O1?nnke&W(~3^POawUKKpA&Ayhq=pk-E>`=E0 zqN6Y*jV@>|n-w!4zTWEqSu}&C_xq%^Or~t2fG!17EPOe90}XoRTZDhN z18^QAHkk(ZFwA6ZC%;sC7UXf||LWL`g3>y(IR0HwQDY%pZ#S3)!DhB%JJUkFJF6&q zi4#FW^ole4z+@OB9R>Ggm84Zz<0Wd_Wf@E=Qw>$TRj_epZTp~2^1y`b6qD=>;ff6D zCSBW!8I?F4YanV|*X~K*?hA7{ch32r|98IMng0Aa^V0egh*@GOY~@p^9Uami0x=mC zZycqX78D;P-E4^xMiY`Cq|$6v3yO8NB%QA;+I^KV97%$b7BUjpr%G&55hZ`@$`V7# z9LP{i3|O{LhfG!5!Q5!lUqrQwi3?Vj%`Y*A$`zsI5Z6V~#l3T^gokU&)bo2aoOxRs=jVrr&s9VD}6 zYV?*4>13ET)i9}hiAd6te~yTr0d=!NS1{@ye0gC8b*p5|x%!@&lDuF&-2)$n zBTD&e;Ca#CD?Ty;PE_rHV7nWpzp)5!Mx{jVyFjj}05r>Os5U&aV3pCL8O&A1VhtlH za){?2Z%%BJya#h|T+8qL;|=kr|KQ6$OZ@qq#@O@xwG%jn7y8;n6%6e#2q#jGWprTq zNt*@QX+dIG*h8kS@g={5;)vFO9;$l~lpYJA|GIKYZS@s98RleMVkYzab{5$D6(_IX z-l)tlZNsxuG&jm|=9g=dPFGp&1QIoaGDW$Fl@eE1UmrX2=zEBvIblHeWd|v`W94%C zIl~=44>Reb^B>G`E)r&cFT=g5l0~Jz9eJ@Vl$h(!a0+&(L#XKPZUAO@1R6}AhQM-U zDR}S2Dfb%vrtx!aSk)O0-nhfhuKJld=eNXO;JL;sn;wK~mpSKa{B@qj15&^7yTkL2 zHYkvXfczl6Q}frj(6AF#WS2sEVZnfcw}2zeGhaMm!IZ~a;BGpEioLm*K8$hjWd>F`r43Z)xjL@ru||J~X8wpD2mcEm?ZFXgR>KM5c?%+n(~%qw%Haf%RkSwn6iOP}3F&BeqrMGH zjd!0x!rRRM%04zFSb^=O5dDG{FGrr=fo(93V`-c%(ZKFcmw&$FYiNOSuR+*n)uc!i z1Q5IQo8BPD>D=7Upla(rprAZ#DLPh-i^Y8HNN0ij$croYmm#)Gy2 zA5v`uMEe-8G8GZeq6^S4j(S5?Ea$>L ztHHx{o&>WGk{&7r)eVBYNqaSP1(pDZM(;rPWmXP#Kva&{b8cX^w*`Qrf;D zd7)}MQU;EX-xcA0MWBEIBp{FLtAY>Z1!TvjLZV2>U!o&7i+no8VCkjSY3Ij8tSI zC4cw#2-1)XjD%+&~_1jF$-3dy`Z_6*`Znk(o5 z<52E?JUUKcF=Gz7MPiGxyAoY%R(u^;%{>EubpgF?tzeMHeu#%;n9|oAQSfKXSuA#a zd3+l-q1?ea%ik8lm(EC)^ z-ZF|+1Y--*!fVsj6pWJeYQObedz;f`^Usd~?qypU7+9gPD-V3Urq6IlR$m=C#AH@+ zG%!5(4kTu!h}D?M!MFS~-U2=p-9g2a6YbW*a=@S&yqjb~xc-Lo$lelouB7+UDS6>` z;0>C8V8}qG47l_@gcSv=DNg$U$>+KB{>+C(Q5m$2t*976JSCZvgHBNxZApQHNw_bX z1O$Bnf#~=xOqR$~uCXIiV&EB*z4-%iH8uP%8lN? cU4}lQG0le!Jpt&#_BwxP1Lceo;a~p!e=a%16951J literal 0 HcmV?d00001 From 4c5a5c1f0eddef0d384f18d46657c92e954b5075 Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 30 Jul 2014 19:34:20 +0300 Subject: [PATCH 160/311] Tests for IptcImagePlugin.py --- Tests/test_file_iptc.py | 71 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 Tests/test_file_iptc.py diff --git a/Tests/test_file_iptc.py b/Tests/test_file_iptc.py new file mode 100644 index 000000000..4ae85c66b --- /dev/null +++ b/Tests/test_file_iptc.py @@ -0,0 +1,71 @@ +from helper import unittest, PillowTestCase, lena + +from PIL import Image, IptcImagePlugin + +TEST_FILE = "Tests/images/iptc.jpg" + + +class TestFileIptc(PillowTestCase): + + # Helpers + + def dummy_IptcImagePlugin(self): + # Create an IptcImagePlugin object without initializing it + class FakeImage: + pass + im = FakeImage() + im.__class__ = IptcImagePlugin.IptcImageFile + return im + + # Tests + + def test_getiptcinfo_jpg_none(self): + # Arrange + im = lena() + + # Act + iptc = IptcImagePlugin.getiptcinfo(im) + + # Assert + self.assertIsNone(iptc) + + def test_getiptcinfo_jpg_found(self): + # Arrange + im = Image.open(TEST_FILE) + + # Act + iptc = IptcImagePlugin.getiptcinfo(im) + + # Assert + self.assertIsInstance(iptc, dict) + self.assertEqual(iptc[(2, 90)], "Budapest") + self.assertEqual(iptc[(2, 101)], "Hungary") + + # _FIXME: is_raw() is disabled. Should we remove it? + def test__is_raw_equal_zero(self): + # Arrange + im = self.dummy_IptcImagePlugin() + offset = 0 + size = 4 + + # Act + ret = im._is_raw(offset, size) + + # Assert + self.assertEqual(ret, 0) + + def test_i(self): + # Arrange + c = "a" + + # Act + ret = IptcImagePlugin.i(c) + + # Assert + self.assertEqual(ret, 97) + + +if __name__ == '__main__': + unittest.main() + +# End of file From 515bb6e14dc95824133cd7fac56208233880caa3 Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 30 Jul 2014 19:39:11 +0300 Subject: [PATCH 161/311] flake8 --- PIL/IptcImagePlugin.py | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/PIL/IptcImagePlugin.py b/PIL/IptcImagePlugin.py index 85575612c..955afbbeb 100644 --- a/PIL/IptcImagePlugin.py +++ b/PIL/IptcImagePlugin.py @@ -21,7 +21,8 @@ __version__ = "0.3" from PIL import Image, ImageFile, _binary -import os, tempfile +import os +import tempfile i8 = _binary.i8 i16 = _binary.i16be @@ -35,17 +36,20 @@ COMPRESSION = { 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. @@ -112,7 +116,7 @@ class IptcImageFile(ImageFile.ImageFile): while True: offset = self.fp.tell() tag, size = self.field() - if not tag or tag == (8,10): + if not tag or tag == (8, 10): break if size: tagdata = self.fp.read(size) @@ -129,10 +133,10 @@ class IptcImageFile(ImageFile.ImageFile): # print tag, self.info[tag] # 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 + 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: @@ -143,16 +147,16 @@ class IptcImageFile(ImageFile.ImageFile): self.mode = "CMYK"[id] # size - self.size = self.getint((3,20)), self.getint((3,30)) + self.size = self.getint((3, 20)), self.getint((3, 30)) # compression try: - compression = COMPRESSION[self.getint((3,120))] + compression = COMPRESSION[self.getint((3, 120))] except KeyError: raise IOError("Unknown IPTC image compression") # tile - if tag == (8,10): + if tag == (8, 10): if compression == "raw" and self._is_raw(offset, self.size): self.tile = [(compression, (offset, size + 5, -1), (0, 0, self.size[0], self.size[1]))] @@ -200,14 +204,17 @@ class IptcImageFile(ImageFile.ImageFile): im.load() self.im = im.im finally: - try: os.unlink(outfile) - except: pass + try: + os.unlink(outfile) + except: + pass Image.register_open("IPTC", IptcImageFile) Image.register_extension("IPTC", ".iim") + ## # Get IPTC information from TIFF, JPEG, or IPTC file. # @@ -267,7 +274,7 @@ def getiptcinfo(im): pass if data is None: - return None # no properties + return None # no properties # create an IptcImagePlugin object without initializing it class FakeImage: @@ -282,6 +289,6 @@ def getiptcinfo(im): try: im._open() except (IndexError, KeyError): - pass # expected failure + pass # expected failure return im.info From f5440cc3e1b0523b156a98ff311af61e003e95f9 Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 30 Jul 2014 20:43:34 +0300 Subject: [PATCH 162/311] Fixes for Python 3 --- PIL/IptcImagePlugin.py | 4 ++-- Tests/test_file_iptc.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/PIL/IptcImagePlugin.py b/PIL/IptcImagePlugin.py index 955afbbeb..a94fc7524 100644 --- a/PIL/IptcImagePlugin.py +++ b/PIL/IptcImagePlugin.py @@ -237,11 +237,11 @@ def getiptcinfo(im): # extract the IPTC/NAA resource try: app = im.app["APP13"] - if app[:14] == "Photoshop 3.0\x00": + if app[:14] == b"Photoshop 3.0\x00": app = app[14:] # parse the image resource block offset = 0 - while app[offset:offset+4] == "8BIM": + while app[offset:offset+4] == b"8BIM": offset += 4 # resource code code = JpegImagePlugin.i16(app, offset) diff --git a/Tests/test_file_iptc.py b/Tests/test_file_iptc.py index 4ae85c66b..fd68e88b6 100644 --- a/Tests/test_file_iptc.py +++ b/Tests/test_file_iptc.py @@ -38,8 +38,8 @@ class TestFileIptc(PillowTestCase): # Assert self.assertIsInstance(iptc, dict) - self.assertEqual(iptc[(2, 90)], "Budapest") - self.assertEqual(iptc[(2, 101)], "Hungary") + self.assertEqual(iptc[(2, 90)], b"Budapest") + self.assertEqual(iptc[(2, 101)], b"Hungary") # _FIXME: is_raw() is disabled. Should we remove it? def test__is_raw_equal_zero(self): @@ -56,7 +56,7 @@ class TestFileIptc(PillowTestCase): def test_i(self): # Arrange - c = "a" + c = b"a" # Act ret = IptcImagePlugin.i(c) From c216c6a71ecfbd1d6e3743cf28855ee781f219cd Mon Sep 17 00:00:00 2001 From: wiredfool Date: Thu, 31 Jul 2014 12:18:09 -0700 Subject: [PATCH 163/311] Adding coverage support for C code --- .travis.yml | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 934d8ebf7..62fc372a5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,9 +16,10 @@ python: - 3.4 install: - - "sudo apt-get -qq install libfreetype6-dev liblcms2-dev python-qt4 ghostscript libffi-dev libjpeg-turbo-progs cmake imagemagick" + - "sudo apt-get -qq install libfreetype6-dev liblcms2-dev python-qt4 ghostscript libffi-dev libjpeg-turbo-progs cmake imagemagick lcov" - "pip install cffi" - - "pip install coveralls nose" + - "pip install coveralls nose coveralls-merge" + - "gem install coveralls-lcov" - travis_retry pip install pyroma - if [ "$TRAVIS_PYTHON_VERSION" == "2.6" ]; then pip install unittest2; fi @@ -31,14 +32,22 @@ install: script: - coverage erase - python setup.py clean - - python setup.py build_ext --inplace + - CFLAGS="-coverage" python setup.py build_ext --inplace - time coverage run --append --include=PIL/* selftest.py - coverage run --append --include=PIL/* -m nose -vx Tests/test_*.py after_success: + # gather the coverage data + - lcov --capture --directory . -b . --output-file coverage.info + # filter to remove system headers + - lcov --remove coverage.info '/usr/*' -o coverage.filtered.info + # convert to json + - coveralls-lcov -v -n coverage.filtered.info > coverage.c.json + - coverage report - - coveralls + - coveralls-merge coverage.c.json + - pip install pep8 pyflakes - pep8 --statistics --count PIL/*.py From a0aff1a87faa72373010d0e5c71667c7dcc34e19 Mon Sep 17 00:00:00 2001 From: hugovk Date: Fri, 1 Aug 2014 11:12:47 +0300 Subject: [PATCH 164/311] Remove disabled _is_raw() --- PIL/IptcImagePlugin.py | 30 ++---------------------------- Tests/test_file_iptc.py | 13 ------------- 2 files changed, 2 insertions(+), 41 deletions(-) diff --git a/PIL/IptcImagePlugin.py b/PIL/IptcImagePlugin.py index a94fc7524..dc8607591 100644 --- a/PIL/IptcImagePlugin.py +++ b/PIL/IptcImagePlugin.py @@ -88,28 +88,6 @@ class IptcImageFile(ImageFile.ImageFile): return tag, size - def _is_raw(self, offset, size): - # - # check if the file can be mapped - - # DISABLED: the following only slows things down... - return 0 - - self.fp.seek(offset) - t, sz = self.field() - if sz != size[0]: - return 0 - y = 1 - while True: - self.fp.seek(sz, 1) - t, s = self.field() - if t != (8, 10): - break - if s != sz: - return 0 - y += 1 - return y == size[1] - def _open(self): # load descriptive fields @@ -157,12 +135,8 @@ class IptcImageFile(ImageFile.ImageFile): # tile if tag == (8, 10): - if compression == "raw" and self._is_raw(offset, self.size): - self.tile = [(compression, (offset, size + 5, -1), - (0, 0, self.size[0], self.size[1]))] - else: - self.tile = [("iptc", (compression, offset), - (0, 0, self.size[0], self.size[1]))] + self.tile = [("iptc", (compression, offset), + (0, 0, self.size[0], self.size[1]))] def load(self): diff --git a/Tests/test_file_iptc.py b/Tests/test_file_iptc.py index fd68e88b6..3c04b7413 100644 --- a/Tests/test_file_iptc.py +++ b/Tests/test_file_iptc.py @@ -41,19 +41,6 @@ class TestFileIptc(PillowTestCase): self.assertEqual(iptc[(2, 90)], b"Budapest") self.assertEqual(iptc[(2, 101)], b"Hungary") - # _FIXME: is_raw() is disabled. Should we remove it? - def test__is_raw_equal_zero(self): - # Arrange - im = self.dummy_IptcImagePlugin() - offset = 0 - size = 4 - - # Act - ret = im._is_raw(offset, size) - - # Assert - self.assertEqual(ret, 0) - def test_i(self): # Arrange c = b"a" From 35838da803253db7ecb5e47ae635d5dcb150ccdb Mon Sep 17 00:00:00 2001 From: hugovk Date: Fri, 1 Aug 2014 11:56:21 +0300 Subject: [PATCH 165/311] Test dump() --- Tests/test_file_iptc.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Tests/test_file_iptc.py b/Tests/test_file_iptc.py index 3c04b7413..57c2011b6 100644 --- a/Tests/test_file_iptc.py +++ b/Tests/test_file_iptc.py @@ -51,6 +51,27 @@ class TestFileIptc(PillowTestCase): # Assert self.assertEqual(ret, 97) + def test_dump(self): + # Arrange + c = b"abc" + # Temporarily redirect stdout + try: + from cStringIO import StringIO + except ImportError: + from io import StringIO + import sys + old_stdout = sys.stdout + sys.stdout = mystdout = StringIO() + + # Act + IptcImagePlugin.dump(c) + + # Reset stdout + sys.stdout = old_stdout + + # Assert + self.assertEqual(mystdout.getvalue(), b"61 62 63 \n") + if __name__ == '__main__': unittest.main() From 805184fcbb0579589cce02e86aa3fd51ad76680d Mon Sep 17 00:00:00 2001 From: hugovk Date: Fri, 1 Aug 2014 12:11:03 +0300 Subject: [PATCH 166/311] Fi xffor Python 3 --- Tests/test_file_iptc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_file_iptc.py b/Tests/test_file_iptc.py index 57c2011b6..bd331e5b2 100644 --- a/Tests/test_file_iptc.py +++ b/Tests/test_file_iptc.py @@ -70,7 +70,7 @@ class TestFileIptc(PillowTestCase): sys.stdout = old_stdout # Assert - self.assertEqual(mystdout.getvalue(), b"61 62 63 \n") + self.assertEqual(mystdout.getvalue(), "61 62 63 \n") if __name__ == '__main__': From 243b59930aaff68910b9da00bfb126412fdb29b3 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Fri, 1 Aug 2014 10:12:47 -0700 Subject: [PATCH 167/311] Updated Changes.rst [ci skip] --- CHANGES.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 87bc452c0..0581dc196 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -31,7 +31,7 @@ Changelog (Pillow) - Added docs for ExifTags [Wintermute3] -- More tests for CurImagePlugin, DcxImagePlugin, ImageFont, ImageMath, ImagePalette, SpiderImagePlugin, SgiImagePlugin, XpmImagePlugin and _util +- More tests for CurImagePlugin, DcxImagePlugin, ImageFont, ImageMath, ImagePalette, IptcImagePlugin, SpiderImagePlugin, SgiImagePlugin, XpmImagePlugin and _util [hugovk] - Fix return value of FreeTypeFont.textsize() does not include font offsets From e5bceac912cf9065a6079575cfb2b7ff8ffe3e8d Mon Sep 17 00:00:00 2001 From: Mat Moore Date: Sat, 2 Aug 2014 12:17:57 +0100 Subject: [PATCH 168/311] Changed docstring to refer to the correct function --- PIL/ImageOps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PIL/ImageOps.py b/PIL/ImageOps.py index 64c35cca1..9f84eff86 100644 --- a/PIL/ImageOps.py +++ b/PIL/ImageOps.py @@ -392,7 +392,7 @@ def solarize(image, threshold=128): """ Invert all pixel values above a threshold. - :param image: The image to posterize. + :param image: The image to solarize. :param threshold: All pixels above this greyscale level are inverted. :return: An image. """ From 6538d971e2da1032241ddeece122d1b14e0c9edc Mon Sep 17 00:00:00 2001 From: wiredfool Date: Sat, 2 Aug 2014 21:22:51 -0700 Subject: [PATCH 169/311] Docs for profile additions --- PIL/ImageCms.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/PIL/ImageCms.py b/PIL/ImageCms.py index e708d1dad..04a3f7f61 100644 --- a/PIL/ImageCms.py +++ b/PIL/ImageCms.py @@ -150,8 +150,13 @@ for flag in FLAGS.values(): class ImageCmsProfile: def __init__(self, profile): - # accepts a string (filename), a file-like object, or a low-level - # profile object + """ + :param profile: Either a string representing a filename, + a file like object containing a profile or a + low-level profile object + + """ + if isStringType(profile): self._set(core.profile_open(profile), profile) elif hasattr(profile, "read"): @@ -170,13 +175,22 @@ class ImageCmsProfile: 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 Image.point() method. - """ + # Transform. This can be used with the procedural API, or with the + # standard 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, @@ -576,7 +590,7 @@ def applyTransform(im, transform, inPlace=0): with the transform applied is returned (and im is not changed). The default is False. :returns: Either None, or a new PIL Image object, depending on the value of - inPlace + inPlace. The profile will be returned in the image's info['icc_profile']. :exception PyCMSError: """ From 2181ff906bf9f64d03e24ba8cf6e9af734d48390 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Sun, 3 Aug 2014 22:05:32 -0700 Subject: [PATCH 170/311] Update contributing.md [ci skip] --- CONTRIBUTING.md | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e6f4c3f9d..71bd92ada 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,7 +1,25 @@ -When reporting bugs, please include example code that reproduces the issue, and if possible a problem image. +# Contributing + +## Fixes, Features and Changes + +Send a pull request. We'll generally want documentation and tests for new features. Tests or documentation on their own are also welcomed. Feel free to ask questions as an issue or on irc (irc.freenode.net, #pil) + +- Fork the repo +- Make a branch +- Add your changes + Tests +- Run the test suite. Try to run on both Python 2.x and 3.x, or you'll get tripped up. You can enable Travis-ci on your repo to catch test failures prior to the pull request. +- Push to your fork, and make a pull request. + +A few guidelines: +- Try to keep any code commits clean and separate from reformatting commits. +- All new code is going to need tests. + +## Bugs + +When reporting bugs, please include example code that reproduces the issue, and if possible a problem image. The best reproductions are self contained scripts that pull in as few dependencies as possible. An entire django stack is harder to handle. Let us know: - - * What is the expected output? What do you see instead? - - * What versions of Pillow and Python are you using? +- What did you do? +- What did you expect to happen? +- What actually happened? +- What versions of Pillow and Python are you using? From 3ce164b59437c084a6391fa5a75d0ea173428129 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Sun, 3 Aug 2014 22:09:04 -0700 Subject: [PATCH 171/311] Update contributing.md [ci skip] --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 71bd92ada..e179ce017 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,6 +13,7 @@ Send a pull request. We'll generally want documentation and tests for new featur A few guidelines: - Try to keep any code commits clean and separate from reformatting commits. - All new code is going to need tests. +- Try to follow PEP8. ## Bugs From 5c0395b933feb93525363ca1f247396cbf5cb825 Mon Sep 17 00:00:00 2001 From: Hugo Date: Mon, 4 Aug 2014 10:16:15 +0300 Subject: [PATCH 172/311] Update CHANGES.rst [CI skip] --- CHANGES.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 0581dc196..9a554012a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,15 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Return Profile with Transformed Images #837 + [wiredfool] + +- Changed docstring to refer to the correct function #836 + [MatMoore] + +- Adding coverage support for C code tests #833 + [wiredfool] + - PyPy performance improvements #821 [wiredfool] From 7113721ad0be7bbe2df2511b490dfd201fa8e1a3 Mon Sep 17 00:00:00 2001 From: Hugo Date: Mon, 4 Aug 2014 10:35:07 +0300 Subject: [PATCH 173/311] Update CONTRIBUTING.md [CI skip] --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e179ce017..46b897822 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,12 +2,12 @@ ## Fixes, Features and Changes -Send a pull request. We'll generally want documentation and tests for new features. Tests or documentation on their own are also welcomed. Feel free to ask questions as an issue or on irc (irc.freenode.net, #pil) +Send a pull request. We'll generally want documentation and tests for new features. Tests or documentation on their own are also welcomed. Feel free to ask questions as an [issue](https://github.com/python-pillow/Pillow/issues/new) or on IRC (irc.freenode.net, #pil) - Fork the repo - Make a branch - Add your changes + Tests -- Run the test suite. Try to run on both Python 2.x and 3.x, or you'll get tripped up. You can enable Travis-ci on your repo to catch test failures prior to the pull request. +- Run the test suite. Try to run on both Python 2.x and 3.x, or you'll get tripped up. You can enable [Travis CI on your repo](https://travis-ci.org/profile/) to catch test failures prior to the pull request. - Push to your fork, and make a pull request. A few guidelines: @@ -17,7 +17,7 @@ A few guidelines: ## Bugs -When reporting bugs, please include example code that reproduces the issue, and if possible a problem image. The best reproductions are self contained scripts that pull in as few dependencies as possible. An entire django stack is harder to handle. +When reporting bugs, please include example code that reproduces the issue, and if possible a problem image. The best reproductions are self contained scripts that pull in as few dependencies as possible. An entire Django stack is harder to handle. Let us know: - What did you do? From 368b1dce94b8d5482c19f6ad502db77a1d67740a Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 5 Aug 2014 12:27:07 +0300 Subject: [PATCH 174/311] Link to contribution guide [CI skip] --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 224f98f03..855212ce8 100644 --- a/README.rst +++ b/README.rst @@ -3,7 +3,7 @@ Pillow *Python Imaging Library (Fork)* -Pillow is the "friendly" PIL fork by Alex Clark and Contributors. PIL is the Python Imaging Library by Fredrik Lundh and Contributors. For more information, please `read the documentation `_. +Pillow is the "friendly" PIL fork by `Alex Clark and Contributors `_. PIL is the Python Imaging Library by Fredrik Lundh and Contributors. For more information, please `read the documentation `_ and `find out how to contribute `_. .. image:: https://travis-ci.org/python-pillow/Pillow.svg?branch=master :target: https://travis-ci.org/python-pillow/Pillow From 408e7335b3943742c9b1eefba371ea884757c531 Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 5 Aug 2014 12:35:27 +0300 Subject: [PATCH 175/311] Link to testing guide [CI skip] --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 46b897822..a31c9ee09 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ ## Fixes, Features and Changes -Send a pull request. We'll generally want documentation and tests for new features. Tests or documentation on their own are also welcomed. Feel free to ask questions as an [issue](https://github.com/python-pillow/Pillow/issues/new) or on IRC (irc.freenode.net, #pil) +Send a pull request. We'll generally want documentation and [tests](Tests/README.rst) for new features. Tests or documentation on their own are also welcomed. Feel free to ask questions as an [issue](https://github.com/python-pillow/Pillow/issues/new) or on IRC (irc.freenode.net, #pil) - Fork the repo - Make a branch @@ -17,7 +17,7 @@ A few guidelines: ## Bugs -When reporting bugs, please include example code that reproduces the issue, and if possible a problem image. The best reproductions are self contained scripts that pull in as few dependencies as possible. An entire Django stack is harder to handle. +When reporting bugs, please include example code that reproduces the issue, and if possible a problem image. The best reproductions are self-contained scripts that pull in as few dependencies as possible. An entire Django stack is harder to handle. Let us know: - What did you do? From 97e111d079c23d3d287ceb627287fe3decdded90 Mon Sep 17 00:00:00 2001 From: Nikita Uvarov Date: Thu, 7 Aug 2014 16:23:08 +0300 Subject: [PATCH 176/311] Fixed wrong mode of gif image. In case of L mode and small image. --- PIL/GifImagePlugin.py | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/PIL/GifImagePlugin.py b/PIL/GifImagePlugin.py index 4107c6ba3..640af9efc 100644 --- a/PIL/GifImagePlugin.py +++ b/PIL/GifImagePlugin.py @@ -268,10 +268,9 @@ def _save(im, fp, filename): except IOError: pass # write uncompressed file - try: - rawmode = RAWMODE[im.mode] + if im.mode in RAWMODE: imOut = im - except KeyError: + else: # convert on the fly (EXPERIMENTAL -- I'm not sure PIL # should automatically convert images on save...) if Image.getmodebase(im.mode) == "RGB": @@ -279,10 +278,8 @@ def _save(im, fp, filename): if im.palette: palette_size = len(im.palette.getdata()[1]) // 3 imOut = im.convert("P", palette=1, colors=palette_size) - rawmode = "P" else: imOut = im.convert("L") - rawmode = "L" # header try: @@ -290,12 +287,6 @@ def _save(im, fp, filename): except KeyError: palette = None im.encoderinfo["optimize"] = im.encoderinfo.get("optimize", True) - if im.encoderinfo["optimize"]: - # When the mode is L, and we optimize, we end up with - # im.mode == P and rawmode = L, which fails. - # If we're optimizing the palette, we're going to be - # in a rawmode of P anyway. - rawmode = 'P' header, usedPaletteColors = getheader(imOut, palette, im.encoderinfo) for s in header: @@ -352,7 +343,7 @@ def _save(im, fp, filename): o8(8)) # bits imOut.encoderconfig = (8, interlace) - ImageFile._save(imOut, fp, [("gif", (0,0)+im.size, 0, rawmode)]) + ImageFile._save(imOut, fp, [("gif", (0,0)+im.size, 0, RAWMODE[imOut.mode])]) fp.write(b"\0") # end of image data From 884280d0e5351ada6275c28dd9b84135601073c8 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Fri, 8 Aug 2014 13:51:06 +0300 Subject: [PATCH 177/311] Update test instructions [CI skip] --- Tests/README.rst | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Tests/README.rst b/Tests/README.rst index 1eaa4f3a2..96aed10bc 100644 --- a/Tests/README.rst +++ b/Tests/README.rst @@ -3,17 +3,21 @@ Pillow Tests Test scripts are named ``test_xxx.py`` and use the ``unittest`` module. A base class and helper functions can be found in ``helper.py``. +Depedencies +----------- + + pip install coverage nose + + Execution --------- Run the tests from the root of the Pillow source distribution:: - python selftest.py nosetests Tests/test_*.py Or with coverage:: - coverage run --append --include=PIL/* selftest.py coverage run --append --include=PIL/* -m nose Tests/test_*.py coverage report coverage html @@ -22,3 +26,4 @@ Or with coverage:: To run an individual test:: python Tests/test_image.py + From ae641c3d0f0efef1714bfda5a856ae904e00679f Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Fri, 8 Aug 2014 13:54:14 +0300 Subject: [PATCH 178/311] RST code formatting [CI skip] --- Tests/README.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Tests/README.rst b/Tests/README.rst index 96aed10bc..58c1efb9f 100644 --- a/Tests/README.rst +++ b/Tests/README.rst @@ -6,6 +6,8 @@ Test scripts are named ``test_xxx.py`` and use the ``unittest`` module. A base c Depedencies ----------- +Install:: + pip install coverage nose From 3bde04b263d4bc45aab851722468c68049d953a2 Mon Sep 17 00:00:00 2001 From: David Cook Date: Mon, 11 Aug 2014 01:14:07 -0500 Subject: [PATCH 179/311] setup.py: Close open file handle before deleting When installing Pillow onto a Vagrant virtual machine with Linux as the guest OS, and Windows as the host OS, setup.py fails with the error "Text file busy." The temporary installation directory is a shared folder from the host OS, mounted in the guest OS, and the underlying Windows file system doesn't allow deleting the "multiarch" temporary file while a file handle for it is still open. This change closes the file handle once it is no longer being used, but before the file itself is unlinked. --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index e94e34d28..980519151 100644 --- a/setup.py +++ b/setup.py @@ -706,6 +706,7 @@ class pil_build_ext(build_ext): if ret >> 8 == 0: fp = open(tmpfile, 'r') multiarch_path_component = fp.readline().strip() + fp.close() _add_directory( self.compiler.library_dirs, '/usr/lib/' + multiarch_path_component) From 6eb00f605fb3b5956214c944abfa94101549c93d Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Mon, 11 Aug 2014 10:05:19 +0300 Subject: [PATCH 180/311] Update CHANGES.rst [CI skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 9a554012a..f07fcd90f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- setup.py: Close open file handle before deleting #844 + [divergentdave] + - Return Profile with Transformed Images #837 [wiredfool] From cc6610e4f3fae0e4954238b54bbf263c83c78f10 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Tue, 12 Aug 2014 16:37:49 +0300 Subject: [PATCH 181/311] Detail test-installed.py [CI skip] --- Tests/README.rst | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/Tests/README.rst b/Tests/README.rst index 58c1efb9f..1b11a45b1 100644 --- a/Tests/README.rst +++ b/Tests/README.rst @@ -14,18 +14,32 @@ Install:: Execution --------- -Run the tests from the root of the Pillow source distribution:: - - nosetests Tests/test_*.py - -Or with coverage:: - - coverage run --append --include=PIL/* -m nose Tests/test_*.py - coverage report - coverage html - open htmlcov/index.html +**If Pillow has been built in-place** To run an individual test:: python Tests/test_image.py +Run all the tests from the root of the Pillow source distribution:: + + nosetests -vx Tests/test_*.py + +Or with coverage:: + + coverage run --append --include=PIL/* -m nose -vx Tests/test_*.py + coverage report + coverage html + open htmlcov/index.html + +**If Pillow has been installed** + +To run an individual test:: + + ./test-installed.py Tests/test_image.py + +Run all the tests from the root of the Pillow source distribution:: + + ./test-installed.py + + + From 205e056f8f9b06ed7b925cf8aa0874bc4aaf8a7d Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 6 Aug 2014 16:42:43 -0700 Subject: [PATCH 182/311] Icns DOS fix -- CVE-2014-3589 Found and reported by Andrew Drake of dropbox.com --- PIL/IcnsImagePlugin.py | 2 ++ Tests/check_icns_dos.py | 10 ++++++++++ 2 files changed, 12 insertions(+) create mode 100644 Tests/check_icns_dos.py diff --git a/PIL/IcnsImagePlugin.py b/PIL/IcnsImagePlugin.py index 6951c9325..ca7a14931 100644 --- a/PIL/IcnsImagePlugin.py +++ b/PIL/IcnsImagePlugin.py @@ -179,6 +179,8 @@ class IcnsFile: 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) diff --git a/Tests/check_icns_dos.py b/Tests/check_icns_dos.py new file mode 100644 index 000000000..ce6338a71 --- /dev/null +++ b/Tests/check_icns_dos.py @@ -0,0 +1,10 @@ +# Tests potential DOS of IcnsImagePlugin with 0 length block. +# Run from anywhere that PIL is importable. + +from PIL import Image +from io import BytesIO + +if bytes is str: + Image.open(BytesIO(bytes('icns\x00\x00\x00\x10hang\x00\x00\x00\x00'))) +else: + Image.open(BytesIO(bytes('icns\x00\x00\x00\x10hang\x00\x00\x00\x00', 'latin-1'))) From 2e26bd454f398131d69b49b2d090291663a18dcf Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 13 Aug 2014 09:49:50 -0700 Subject: [PATCH 183/311] Update Changes.rst [ci skip] --- CHANGES.rst | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index f07fcd90f..6539c5d11 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Fixed CVE-2014-3589, a DOS in the IcnsImagePlugin + [Andrew Drake] + - setup.py: Close open file handle before deleting #844 [divergentdave] @@ -57,7 +60,14 @@ Changelog (Pillow) - Test PalmImagePlugin and method to skip known bad tests #776 [hugovk, wiredfool] - + + 2.5.2 (2014-08-13) +------------------ + +- Fixed CVE-2014-3589, a DOS in the IcnsImagePlugin (backport) + [Andrew Drake] + + 2.5.1 (2014-07-10) ------------------ @@ -286,6 +296,12 @@ Changelog (Pillow) - Prefer homebrew freetype over X11 freetype (but still allow both) [dmckeone] +2.3.2 (2014-08-13) +------------------ + +- Fixed CVE-2014-3589, a DOS in the IcnsImagePlugin (backport) + [Andrew Drake] + 2.3.1 (2014-03-14) ------------------ From e51b7ad7bf7ccdb241c14990ec5ba3c7d1992de6 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 13 Aug 2014 09:51:05 -0700 Subject: [PATCH 184/311] Updated Changes.rst [ci skip] formatting --- CHANGES.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 6539c5d11..141d5c715 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -61,7 +61,8 @@ Changelog (Pillow) - Test PalmImagePlugin and method to skip known bad tests #776 [hugovk, wiredfool] - 2.5.2 (2014-08-13) + +2.5.2 (2014-08-13) ------------------ - Fixed CVE-2014-3589, a DOS in the IcnsImagePlugin (backport) From 99cb19b671a4d0a76b845d090b1a491e9cb5e732 Mon Sep 17 00:00:00 2001 From: Hugo Date: Fri, 15 Aug 2014 13:58:54 +0300 Subject: [PATCH 185/311] Remove a rogue "=" from the end of a line It wasn't there in the original PIL handbook: http://effbot.org/imagingbook/format-jpeg.htm [CI skip] --- docs/handbook/image-file-formats.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/handbook/image-file-formats.rst b/docs/handbook/image-file-formats.rst index 8c9bb36ec..97caea722 100644 --- a/docs/handbook/image-file-formats.rst +++ b/docs/handbook/image-file-formats.rst @@ -136,7 +136,7 @@ The :py:meth:`~PIL.Image.Image.save` method supports the following options: **quality** The image quality, on a scale from 1 (worst) to 95 (best). The default is 75. Values above 95 should be avoided; 100 disables portions of the JPEG - compression algorithm, and results in large files with hardly any gain in = + compression algorithm, and results in large files with hardly any gain in image quality. **optimize** From 616d8cd4c00757be02ed93c700cf6b8926673e5f Mon Sep 17 00:00:00 2001 From: Hugo Date: Sat, 16 Aug 2014 18:12:31 +0300 Subject: [PATCH 186/311] Pyroma installation is slow on Py3, so just do it for Py2 --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 62fc372a5..1b046d4e6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,10 @@ install: - "pip install cffi" - "pip install coveralls nose coveralls-merge" - "gem install coveralls-lcov" - - travis_retry pip install pyroma + + # Pyroma installation is slow on Py3, so just do it for Py2. + - if [ ${TRAVIS_PYTHON_VERSION:0:1} == "2" ]; then travis_retry pip install pyroma; fi + - if [ "$TRAVIS_PYTHON_VERSION" == "2.6" ]; then pip install unittest2; fi # webp From ce89d19691ca15b954c69235f6c1b1cc56bd642e Mon Sep 17 00:00:00 2001 From: Hugo Date: Sat, 16 Aug 2014 18:45:36 +0300 Subject: [PATCH 187/311] No need to time now Travis has time tags http://blog.travis-ci.com/2014-08-13-per-command-time-tags --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 62fc372a5..4d6a6fba9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ env: MAX_CONCURRENCY=4 python: - "pypy" - - "pypy3" + - "pypy3"t - 2.6 - 2.7 - "2.7_with_system_site_packages" # For PyQt4 @@ -34,7 +34,7 @@ script: - python setup.py clean - CFLAGS="-coverage" python setup.py build_ext --inplace - - time coverage run --append --include=PIL/* selftest.py + - coverage run --append --include=PIL/* selftest.py - coverage run --append --include=PIL/* -m nose -vx Tests/test_*.py after_success: From 30979d4dd4bd9b88e1cbcef307a585b37c76ef4e Mon Sep 17 00:00:00 2001 From: Hugo Date: Sun, 17 Aug 2014 23:34:12 +0300 Subject: [PATCH 188/311] Fix typo --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 4d6a6fba9..7635334a0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ env: MAX_CONCURRENCY=4 python: - "pypy" - - "pypy3"t + - "pypy3" - 2.6 - 2.7 - "2.7_with_system_site_packages" # For PyQt4 From 81e3379834141cb742b8b9137b89590213fca833 Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 19 Aug 2014 10:53:31 +0300 Subject: [PATCH 189/311] Link to CHANGES from README And use absolute URLs for GitHub links so they work from PyPI. [CI skip] --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 855212ce8..482a1e2ec 100644 --- a/README.rst +++ b/README.rst @@ -3,7 +3,7 @@ Pillow *Python Imaging Library (Fork)* -Pillow is the "friendly" PIL fork by `Alex Clark and Contributors `_. PIL is the Python Imaging Library by Fredrik Lundh and Contributors. For more information, please `read the documentation `_ and `find out how to contribute `_. +Pillow is the "friendly" PIL fork by `Alex Clark and Contributors `_. PIL is the Python Imaging Library by Fredrik Lundh and Contributors. For more information, please `read the documentation `_, `check the changelog `_ and `find out how to contribute `_. .. image:: https://travis-ci.org/python-pillow/Pillow.svg?branch=master :target: https://travis-ci.org/python-pillow/Pillow From b56043c036a7a89db13ee6e80c4769dbefc1b9b9 Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 19 Aug 2014 11:03:08 +0300 Subject: [PATCH 190/311] Remove 2,505-line changelog from description It made the PyPI listing page very long and requires a lot of scrolling to get down to the files, annoying for downstream packagers. Instead it's linked from the README. [CI skip] --- setup.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 980519151..ac3bc3ea8 100644 --- a/setup.py +++ b/setup.py @@ -721,9 +721,7 @@ setup( name=NAME, version=PILLOW_VERSION, description='Python Imaging Library (Fork)', - long_description=( - _read('README.rst') + b'\n' + - _read('CHANGES.rst')).decode('utf-8'), + long_description=_read('README.rst').decode('utf-8'), author='Alex Clark (fork author)', author_email='aclark@aclark.net', url='http://python-pillow.github.io/', From 9604cf814bdb210a1ed2e684e2910875a40df6c7 Mon Sep 17 00:00:00 2001 From: Nikita Uvarov Date: Tue, 19 Aug 2014 12:24:44 +0300 Subject: [PATCH 191/311] Added test case for gif image (mode L): optimization turned on, but not needed. --- Tests/test_file_gif.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py index 93b826fd6..0111d3965 100644 --- a/Tests/test_file_gif.py +++ b/Tests/test_file_gif.py @@ -35,6 +35,14 @@ class TestFileGif(PillowTestCase): self.assertEqual(test(0), 800) self.assertEqual(test(1), 38) + def test_optimize_full_L(self): + from io import BytesIO + + im = Image.frombytes("L", (16, 16), bytes(range(256))) + file = BytesIO() + im.save(file, "GIF", optimize=optimize) + self.assertEqual(im.mode, "L") + def test_roundtrip(self): out = self.tempfile('temp.gif') im = lena() From 78081a24989469ef43d3b5d31265ab0c73f80d08 Mon Sep 17 00:00:00 2001 From: Nikita Uvarov Date: Tue, 19 Aug 2014 12:32:52 +0300 Subject: [PATCH 192/311] Fixed test_optimize_full_l gif file test case. --- Tests/test_file_gif.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py index 0111d3965..12e12b2f3 100644 --- a/Tests/test_file_gif.py +++ b/Tests/test_file_gif.py @@ -35,12 +35,12 @@ class TestFileGif(PillowTestCase): self.assertEqual(test(0), 800) self.assertEqual(test(1), 38) - def test_optimize_full_L(self): + def test_optimize_full_l(self): from io import BytesIO im = Image.frombytes("L", (16, 16), bytes(range(256))) file = BytesIO() - im.save(file, "GIF", optimize=optimize) + im.save(file, "GIF", optimize=True) self.assertEqual(im.mode, "L") def test_roundtrip(self): From 778768c9bc333ecba88b1080512e2b384c6f5b3c Mon Sep 17 00:00:00 2001 From: Nikita Uvarov Date: Tue, 19 Aug 2014 15:00:15 +0300 Subject: [PATCH 193/311] Fixed test_optimize_full_l test case for python2. --- Tests/test_file_gif.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py index 12e12b2f3..bd4a6e76c 100644 --- a/Tests/test_file_gif.py +++ b/Tests/test_file_gif.py @@ -38,7 +38,7 @@ class TestFileGif(PillowTestCase): def test_optimize_full_l(self): from io import BytesIO - im = Image.frombytes("L", (16, 16), bytes(range(256))) + im = Image.frombytes("L", (16, 16), bytes(bytearray(range(256)))) file = BytesIO() im.save(file, "GIF", optimize=True) self.assertEqual(im.mode, "L") From 735d45b17574f575043eb16abeb5f8a205b0e8ab Mon Sep 17 00:00:00 2001 From: Alex Clark Date: Tue, 19 Aug 2014 08:52:24 -0400 Subject: [PATCH 194/311] Fix MANIFEST include *.md recursive-include Scripts *.sh recursive-include Tests *.bw recursive-include Tests *.cur recursive-include Tests *.dcx recursive-include Tests *.mpo recursive-include Tests *.ras recursive-include Tests *.rgb recursive-include Tests *.sgi --- MANIFEST.in | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index 00c132d47..643e8056c 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,7 @@ + include *.c include *.h +include *.md include *.py include *.rst include *.txt @@ -25,14 +27,20 @@ recursive-include Images *.xpm recursive-include PIL *.md recursive-include Sane *.c recursive-include Sane *.py +recursive-include Sane *.rst recursive-include Sane *.txt recursive-include Sane CHANGES recursive-include Sane README recursive-include Scripts *.py +recursive-include Scripts *.rst +recursive-include Scripts *.sh recursive-include Scripts README recursive-include Tests *.bdf recursive-include Tests *.bin recursive-include Tests *.bmp +recursive-include Tests *.bw +recursive-include Tests *.cur +recursive-include Tests *.dcx recursive-include Tests *.doc recursive-include Tests *.eps recursive-include Tests *.fli @@ -46,6 +54,7 @@ recursive-include Tests *.j2k recursive-include Tests *.jp2 recursive-include Tests *.jpg recursive-include Tests *.lut +recursive-include Tests *.mpo recursive-include Tests *.pbm recursive-include Tests *.pcf recursive-include Tests *.pcx @@ -55,7 +64,10 @@ recursive-include Tests *.png recursive-include Tests *.ppm recursive-include Tests *.psd recursive-include Tests *.py +recursive-include Tests *.ras +recursive-include Tests *.rgb recursive-include Tests *.rst +recursive-include Tests *.sgi recursive-include Tests *.spider recursive-include Tests *.tar recursive-include Tests *.tif @@ -65,22 +77,20 @@ recursive-include Tests *.txt recursive-include Tests *.webp recursive-include Tests *.xpm recursive-include Tk *.c -recursive-include Tk *.txt recursive-include Tk *.rst -recursive-include depends *.sh +recursive-include Tk *.txt recursive-include depends *.rst +recursive-include depends *.sh recursive-include docs *.bat recursive-include docs *.gitignore recursive-include docs *.html recursive-include docs *.py recursive-include docs *.rst recursive-include docs *.txt -recursive-include docs Guardfile -recursive-include docs Makefile recursive-include docs BUILDME recursive-include docs COPYING +recursive-include docs Guardfile recursive-include docs LICENSE +recursive-include docs Makefile recursive-include libImaging *.c recursive-include libImaging *.h -recursive-include Sane *.rst -recursive-include Scripts *.rst From 1bd4919a359e87e82a92dc02c1852e6c3d6df036 Mon Sep 17 00:00:00 2001 From: Alexey Buzanov Date: Tue, 19 Aug 2014 17:53:51 +0400 Subject: [PATCH 195/311] Fix tga files with image ID field --- PIL/TgaImagePlugin.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/PIL/TgaImagePlugin.py b/PIL/TgaImagePlugin.py index 55790db08..049fb2dbb 100644 --- a/PIL/TgaImagePlugin.py +++ b/PIL/TgaImagePlugin.py @@ -19,6 +19,7 @@ __version__ = "0.3" +import os from PIL import Image, ImageFile, ImagePalette, _binary @@ -42,9 +43,6 @@ MODES = { } -def _accept(prefix): - return prefix[0:1] == b"\0" - ## # Image plugin for Targa files. @@ -58,7 +56,7 @@ class TgaImageFile(ImageFile.ImageFile): # process header s = self.fp.read(18) - id = i8(s[0]) + idlen = i8(s[0]) colormaptype = i8(s[1]) imagetype = i8(s[2]) @@ -70,7 +68,7 @@ class TgaImageFile(ImageFile.ImageFile): self.size = i16(s[12:]), i16(s[14:]) # validate header fields - if id != 0 or colormaptype not in (0, 1) or\ + 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") @@ -103,6 +101,9 @@ class TgaImageFile(ImageFile.ImageFile): if imagetype & 8: self.info["compression"] = "tga_rle" + if idlen: + self.fp.seek(idlen, os.SEEK_CUR) + if colormaptype: # read palette start, size, mapdepth = i16(s[3:]), i16(s[5:]), i16(s[7:]) @@ -191,7 +192,7 @@ def _save(im, fp, filename, check=0): # -------------------------------------------------------------------- # Registry -Image.register_open("TGA", TgaImageFile, _accept) +Image.register_open("TGA", TgaImageFile) Image.register_save("TGA", _save) Image.register_extension("TGA", ".tga") From 347a1d8d956f9e64af4463ee25311b60cdd5657d Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 12 Aug 2014 12:31:37 -0700 Subject: [PATCH 196/311] J2k DOS fix -- CVE-2014-3598 Found and reported by Andrew Drake of dropbox.com --- PIL/Jpeg2KImagePlugin.py | 3 +++ Tests/check_j2k_dos.py | 11 +++++++++++ 2 files changed, 14 insertions(+) create mode 100644 Tests/check_j2k_dos.py diff --git a/PIL/Jpeg2KImagePlugin.py b/PIL/Jpeg2KImagePlugin.py index 0a7a6e297..53b10ca1a 100644 --- a/PIL/Jpeg2KImagePlugin.py +++ b/PIL/Jpeg2KImagePlugin.py @@ -70,6 +70,9 @@ def _parse_jp2_header(fp): else: hlen = 8 + if lbox < hlen: + raise SyntaxError('Invalid JP2 header length') + if tbox == b'jp2h': header = fp.read(lbox - hlen) break diff --git a/Tests/check_j2k_dos.py b/Tests/check_j2k_dos.py new file mode 100644 index 000000000..68f065bbc --- /dev/null +++ b/Tests/check_j2k_dos.py @@ -0,0 +1,11 @@ +# Tests potential DOS of Jpeg2kImagePlugin with 0 length block. +# Run from anywhere that PIL is importable. + +from PIL import Image +from io import BytesIO + +if bytes is str: + Image.open(BytesIO(bytes('\x00\x00\x00\x0cjP\x20\x20\x0d\x0a\x87\x0a\x00\x00\x00\x00hang'))) +else: + Image.open(BytesIO(bytes('\x00\x00\x00\x0cjP\x20\x20\x0d\x0a\x87\x0a\x00\x00\x00\x00hang', 'latin-1'))) + From 2d634d3019472ce09fb0aadbb4ec4d20fd8d7d47 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 12 Aug 2014 12:40:15 -0700 Subject: [PATCH 197/311] Bump Version/Changelog --- CHANGES.rst | 9 +++++++++ PIL/__init__.py | 2 +- _imaging.c | 2 +- setup.py | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 141d5c715..47df8c176 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Fixed CVE-2014-3598, a DOS in the Jpeg2KImagePlugin (backport) + [Andrew Drake] + - Fixed CVE-2014-3589, a DOS in the IcnsImagePlugin [Andrew Drake] @@ -61,6 +64,12 @@ Changelog (Pillow) - Test PalmImagePlugin and method to skip known bad tests #776 [hugovk, wiredfool] +2.5.3 (2014-08-18) +------------------ + +- Fixed CVE-2014-3598, a DOS in the Jpeg2KImagePlugin (backport) + [Andrew Drake] + 2.5.2 (2014-08-13) ------------------ diff --git a/PIL/__init__.py b/PIL/__init__.py index 56edaf247..7b4b8abfa 100644 --- a/PIL/__init__.py +++ b/PIL/__init__.py @@ -12,7 +12,7 @@ # ;-) VERSION = '1.1.7' # PIL version -PILLOW_VERSION = '2.5.0' # Pillow +PILLOW_VERSION = '2.5.3' # Pillow _plugins = ['BmpImagePlugin', 'BufrStubImagePlugin', diff --git a/_imaging.c b/_imaging.c index c28bd4d93..ec8205dd4 100644 --- a/_imaging.c +++ b/_imaging.c @@ -71,7 +71,7 @@ * See the README file for information on usage and redistribution. */ -#define PILLOW_VERSION "2.5.0" +#define PILLOW_VERSION "2.5.3" #include "Python.h" diff --git a/setup.py b/setup.py index ac3bc3ea8..5cf0e5e65 100644 --- a/setup.py +++ b/setup.py @@ -90,7 +90,7 @@ except (ImportError, OSError): NAME = 'Pillow' -PILLOW_VERSION = '2.5.0' +PILLOW_VERSION = '2.5.3' TCL_ROOT = None JPEG_ROOT = None JPEG2K_ROOT = None From cd092e184647d4ebb3f054f26da453b41c97b53d Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 19 Aug 2014 08:56:46 -0700 Subject: [PATCH 198/311] Update CHANGES.rst --- CHANGES.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 47df8c176..75629cf2b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,7 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ -- Fixed CVE-2014-3598, a DOS in the Jpeg2KImagePlugin (backport) +- Fixed CVE-2014-3598, a DOS in the Jpeg2KImagePlugin [Andrew Drake] - Fixed CVE-2014-3589, a DOS in the IcnsImagePlugin From 74f45d4e12e3a5b9b74a1038de6fd8af600860ac Mon Sep 17 00:00:00 2001 From: Hugo Date: Wed, 20 Aug 2014 00:13:30 +0300 Subject: [PATCH 199/311] Use tempfile() instead of /tmp/ --- Tests/test_file_jpeg2k.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Tests/test_file_jpeg2k.py b/Tests/test_file_jpeg2k.py index a0e7dfb53..fcd4b9d4d 100644 --- a/Tests/test_file_jpeg2k.py +++ b/Tests/test_file_jpeg2k.py @@ -52,7 +52,8 @@ class TestFileJpeg2k(PillowTestCase): def test_lossless(self): im = Image.open('Tests/images/test-card-lossless.jp2') im.load() - im.save('/tmp/test-card.png') + outfile = self.tempfile('test-card.png') + im.save(outfile) self.assert_image_similar(im, test_card, 1.0e-3) def test_lossy_tiled(self): From 7ff78e518d419c1ae4b3488a1a21fececfeb9473 Mon Sep 17 00:00:00 2001 From: Hugo Date: Wed, 20 Aug 2014 00:23:49 +0300 Subject: [PATCH 200/311] Update CHANGES.rst [CI skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 75629cf2b..eb1aa1b2f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Fixed wrong P-mode of small, unoptimized L-mode GIF #843 + [uvNikita] + - Fixed CVE-2014-3598, a DOS in the Jpeg2KImagePlugin [Andrew Drake] From 8922104a093986c041950bbe1f9e2b7e818f53a7 Mon Sep 17 00:00:00 2001 From: Hugo Date: Wed, 20 Aug 2014 00:36:29 +0300 Subject: [PATCH 201/311] Need 'temp_' or 'temp.' in filename --- Tests/test_file_jpeg2k.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_file_jpeg2k.py b/Tests/test_file_jpeg2k.py index fcd4b9d4d..db67e9551 100644 --- a/Tests/test_file_jpeg2k.py +++ b/Tests/test_file_jpeg2k.py @@ -52,7 +52,7 @@ class TestFileJpeg2k(PillowTestCase): def test_lossless(self): im = Image.open('Tests/images/test-card-lossless.jp2') im.load() - outfile = self.tempfile('test-card.png') + outfile = self.tempfile('temp_test-card.png') im.save(outfile) self.assert_image_similar(im, test_card, 1.0e-3) From f94b6b4025e3ed7ab46841fd3f253d5244ff7162 Mon Sep 17 00:00:00 2001 From: Alexey Buzanov Date: Wed, 20 Aug 2014 10:32:06 +0400 Subject: [PATCH 202/311] flake8 and tests --- PIL/TgaImagePlugin.py | 25 +++++++++++++------------ Tests/images/tga_id_field.tga | Bin 0 -> 30050 bytes Tests/test_file_tga.py | 22 ++++++++++++++++++++++ 3 files changed, 35 insertions(+), 12 deletions(-) create mode 100644 Tests/images/tga_id_field.tga create mode 100644 Tests/test_file_tga.py diff --git a/PIL/TgaImagePlugin.py b/PIL/TgaImagePlugin.py index 049fb2dbb..46eafe8d0 100644 --- a/PIL/TgaImagePlugin.py +++ b/PIL/TgaImagePlugin.py @@ -19,7 +19,6 @@ __version__ = "0.3" -import os from PIL import Image, ImageFile, ImagePalette, _binary @@ -77,7 +76,7 @@ class TgaImageFile(ImageFile.ImageFile): if imagetype in (3, 11): self.mode = "L" if depth == 1: - self.mode = "1" # ??? + self.mode = "1" # ??? elif imagetype in (1, 9): self.mode = "P" elif imagetype in (2, 10): @@ -102,24 +101,24 @@ class TgaImageFile(ImageFile.ImageFile): self.info["compression"] = "tga_rle" if idlen: - self.fp.seek(idlen, os.SEEK_CUR) + self.info["id_section"] = self.fp.read(idlen) if colormaptype: # read palette start, size, mapdepth = i16(s[3:]), i16(s[5:]), i16(s[7:]) if mapdepth == 16: - self.palette = ImagePalette.raw("BGR;16", - b"\0"*2*start + self.fp.read(2*size)) + self.palette = ImagePalette.raw( + "BGR;16", 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)) + 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)) + self.palette = ImagePalette.raw( + "BGRA", b"\0"*4*start + self.fp.read(4*size)) # setup tile descriptor try: - rawmode = MODES[(imagetype&7, depth)] + rawmode = MODES[(imagetype & 7, depth)] if imagetype & 8: # compressed self.tile = [("tga_rle", (0, 0)+self.size, @@ -128,7 +127,7 @@ class TgaImageFile(ImageFile.ImageFile): self.tile = [("raw", (0, 0)+self.size, self.fp.tell(), (rawmode, 0, orientation))] except KeyError: - pass # cannot decode + pass # cannot decode # # -------------------------------------------------------------------- @@ -146,6 +145,7 @@ SAVE = { "RGBA": ("BGRA", 32, 0, 2), } + def _save(im, fp, filename, check=0): try: @@ -186,7 +186,8 @@ def _save(im, fp, filename, check=0): if colormaptype: fp.write(im.im.getpalette("RGB", "BGR")) - ImageFile._save(im, fp, [("raw", (0,0)+im.size, 0, (rawmode, 0, orientation))]) + ImageFile._save( + im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, 0, orientation))]) # # -------------------------------------------------------------------- diff --git a/Tests/images/tga_id_field.tga b/Tests/images/tga_id_field.tga new file mode 100644 index 0000000000000000000000000000000000000000..a3d666848d1833725ed3078782a676bcaa44bc0e GIT binary patch literal 30050 zcmeI)F-ikL6b9hM!ZX;X)*GaZ5D*1d#a0R125fSJ+#n~&1#*BKU=NT!efre;$xOw?Tja0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zATYGR>2#V-r<2KKv)R;jz1!^$heK}n`+dnLC^cq6`45SvX@;(PnDw{YZ3IHJTCEZU zDkDL-j>ltp8qX5MEphV0)H?L4*?u8PA$_a!`CLj%cLgfFl)f6e*x}a?MYk}v16ZQJ#F9nZ|^J~hrD2svmO@rgk32~IN6E6KR!80I#~%pWII z*>zsmAu4gPN}Mk0lKpAjtE?o)eC@2pjBw%J(_^Fk26Z8kX#@xmAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7csf&UW7Z=`?6%k%5(ZC=lx9&g|8=MS^H F>IX^pF_8cO literal 0 HcmV?d00001 diff --git a/Tests/test_file_tga.py b/Tests/test_file_tga.py new file mode 100644 index 000000000..6affba780 --- /dev/null +++ b/Tests/test_file_tga.py @@ -0,0 +1,22 @@ +from helper import unittest, PillowTestCase + +from PIL import Image + + +class TestFileSun(PillowTestCase): + + def test_sanity(self): + # tga file with id field + test_file = "Tests/images/tga_id_field.tga" + + # Act + im = Image.open(test_file) + + # Assert + self.assertEqual(im.size, (100, 100)) + + +if __name__ == '__main__': + unittest.main() + +# End of file From 5dd0d377c9437e4251f85590dda17dceb83d2f10 Mon Sep 17 00:00:00 2001 From: Alexey Buzanov Date: Wed, 20 Aug 2014 10:39:11 +0400 Subject: [PATCH 203/311] rename test --- Tests/test_file_tga.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Tests/test_file_tga.py b/Tests/test_file_tga.py index 6affba780..ea94dee64 100644 --- a/Tests/test_file_tga.py +++ b/Tests/test_file_tga.py @@ -3,9 +3,9 @@ from helper import unittest, PillowTestCase from PIL import Image -class TestFileSun(PillowTestCase): +class TestFileTga(PillowTestCase): - def test_sanity(self): + def test_id_field(self): # tga file with id field test_file = "Tests/images/tga_id_field.tga" @@ -18,5 +18,3 @@ class TestFileSun(PillowTestCase): if __name__ == '__main__': unittest.main() - -# End of file From 75a51275063cc910346aaa2445eff555d7cbc71a Mon Sep 17 00:00:00 2001 From: Hugo Date: Wed, 20 Aug 2014 10:00:38 +0300 Subject: [PATCH 204/311] Update CHANGES.rst [CI skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index eb1aa1b2f..97bbd5d86 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Fix TGA files with image ID field #856 + [megabuz] + - Fixed wrong P-mode of small, unoptimized L-mode GIF #843 [uvNikita] From 70cf8c9431ee3c7b31e27d6684dd6dd8028dfe74 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 21 Aug 2014 13:46:58 +0300 Subject: [PATCH 205/311] Update WebP from 0.4.0 to 0.4.1 --- depends/install_webp.sh | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/depends/install_webp.sh b/depends/install_webp.sh index 5f5963712..14758f6b8 100755 --- a/depends/install_webp.sh +++ b/depends/install_webp.sh @@ -1,18 +1,15 @@ #!/bin/bash # install webp - -if [ ! -f libwebp-0.4.0.tar.gz ]; then - wget 'https://webp.googlecode.com/files/libwebp-0.4.0.tar.gz' +if [ ! -f libwebp-0.4.1.tar.gz ]; then + wget 'http://downloads.webmproject.org/releases/webp/libwebp-0.4.1.tar.gz' fi -rm -r libwebp-0.4.0 -tar -xvzf libwebp-0.4.0.tar.gz +rm -r libwebp-0.4.1 +tar -xvzf libwebp-0.4.1.tar.gz - -pushd libwebp-0.4.0 +pushd libwebp-0.4.1 ./configure --prefix=/usr --enable-libwebpmux --enable-libwebpdemux && make && sudo make install popd - From 30680bb384368425e03ed4e7bd8a7fba9f63e819 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 21 Aug 2014 14:02:48 +0300 Subject: [PATCH 206/311] Make WebP with 4 job slots - ~2.4 times faster --- depends/install_webp.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depends/install_webp.sh b/depends/install_webp.sh index 14758f6b8..7810159cc 100755 --- a/depends/install_webp.sh +++ b/depends/install_webp.sh @@ -10,6 +10,6 @@ tar -xvzf libwebp-0.4.1.tar.gz pushd libwebp-0.4.1 -./configure --prefix=/usr --enable-libwebpmux --enable-libwebpdemux && make && sudo make install +./configure --prefix=/usr --enable-libwebpmux --enable-libwebpdemux && make -j4 && sudo make -j4 install popd From 4b8b91965a72ed1eb37847092a2a26330822d0b8 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 21 Aug 2014 14:11:35 +0300 Subject: [PATCH 207/311] Make OpenJPEG with 4 job slots - ~2.2 times faster --- depends/install_openjpeg.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/depends/install_openjpeg.sh b/depends/install_openjpeg.sh index b3a6ccc4d..ddff45c1e 100755 --- a/depends/install_openjpeg.sh +++ b/depends/install_openjpeg.sh @@ -11,9 +11,9 @@ rm -r openjpeg-2.1.0 tar -xvzf openjpeg-2.1.0.tar.gz -pushd openjpeg-2.1.0 +pushd openjpeg-2.1.0 -cmake -DCMAKE_INSTALL_PREFIX=/usr . && make && sudo make install +cmake -DCMAKE_INSTALL_PREFIX=/usr . && make -j 4 && sudo make -j 4 install popd From d0ec73602b08edad601544fd44b5cf87230ada83 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 21 Aug 2014 14:50:11 +0300 Subject: [PATCH 208/311] Make OpenJPEG with 4 job slots - ~2.2 times faster (take 2) --- depends/install_openjpeg.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depends/install_openjpeg.sh b/depends/install_openjpeg.sh index ddff45c1e..83620f4b8 100755 --- a/depends/install_openjpeg.sh +++ b/depends/install_openjpeg.sh @@ -13,7 +13,7 @@ tar -xvzf openjpeg-2.1.0.tar.gz pushd openjpeg-2.1.0 -cmake -DCMAKE_INSTALL_PREFIX=/usr . && make -j 4 && sudo make -j 4 install +cmake -DCMAKE_INSTALL_PREFIX=/usr . && make -j4 && sudo make -j4 install popd From 9d00686f53296e7aafa9bd66789e7dce7367cc96 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Fri, 22 Aug 2014 16:14:48 -0700 Subject: [PATCH 209/311] backup implementation of Round for windows platforms --- libImaging/Convert.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libImaging/Convert.c b/libImaging/Convert.c index 46a6cfb72..3d9119c7f 100644 --- a/libImaging/Convert.c +++ b/libImaging/Convert.c @@ -49,6 +49,12 @@ #define L(rgb)\ ((INT32) (rgb)[0]*299 + (INT32) (rgb)[1]*587 + (INT32) (rgb)[2]*114) +#ifndef round +double round(double x) { + return floor(x+0.5); +} +#endif + /* ------------------- */ /* 1 (bit) conversions */ /* ------------------- */ From 1d58e711fede7059a9299a21f6121b9d41d44380 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Fri, 22 Aug 2014 16:15:22 -0700 Subject: [PATCH 210/311] mp is a little twitchy on windows --- mp_compile.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mp_compile.py b/mp_compile.py index b7c3e7ce4..adbac7c19 100644 --- a/mp_compile.py +++ b/mp_compile.py @@ -3,7 +3,7 @@ from multiprocessing import Pool, cpu_count from distutils.ccompiler import CCompiler -import os +import os, sys try: MAX_PROCS = int(os.environ.get('MAX_CONCURRENCY', cpu_count())) @@ -50,7 +50,7 @@ def _mp_compile(self, sources, output_dir=None, macros=None, return objects # explicitly don't enable if environment says 1 processor -if MAX_PROCS != 1: +if MAX_PROCS != 1 and not sys.platform.startswith('win'): try: # bug, only enable if we can make a Pool. see issue #790 and # http://stackoverflow.com/questions/6033599/oserror-38-errno-38-with-multiprocessing From 136345a5a57afb76d15090e4ec9296659e59e003 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Fri, 22 Aug 2014 17:04:26 -0700 Subject: [PATCH 211/311] allowing for libwebp* library names --- setup.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 5cf0e5e65..8c46d7a0e 100644 --- a/setup.py +++ b/setup.py @@ -487,6 +487,8 @@ class pil_build_ext(build_ext): # In Google's precompiled zip it is call "libwebp": if _find_library_file(self, "webp"): feature.webp = "webp" + elif _find_library_file(self, "libwebp"): + feature.webp = "libwebp" if feature.want('webpmux'): if (_find_include_file(self, "webp/mux.h") and @@ -494,6 +496,9 @@ class pil_build_ext(build_ext): if (_find_library_file(self, "webpmux") and _find_library_file(self, "webpdemux")): feature.webpmux = "webpmux" + if (_find_library_file(self, "libwebpmux") and + _find_library_file(self, "libwebpdemux")): + feature.webpmux = "libwebpmux" for f in feature: if not getattr(feature, f) and feature.require(f): @@ -559,13 +564,13 @@ class pil_build_ext(build_ext): libraries=["lcms2"] + extra)) if os.path.isfile("_webp.c") and feature.webp: - libs = ["webp"] + libs = [feature.webp] defs = [] if feature.webpmux: defs.append(("HAVE_WEBPMUX", None)) - libs.append("webpmux") - libs.append("webpdemux") + libs.append(feature.webpmux) + libs.append(feature.webpmux.replace('pmux','pdemux')) exts.append(Extension( "PIL._webp", ["_webp.c"], libraries=libs, define_macros=defs)) From 566448fbf0b2bb296c00664b65919039945c5c34 Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 26 Aug 2014 09:17:54 +0300 Subject: [PATCH 212/311] Update CHANGES.rst [CI skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 97bbd5d86..c068013a6 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Windows fixes #871 + [wiredfool] + - Fix TGA files with image ID field #856 [megabuz] From 674fd9744df001de0bd3a978a211ed424dd78f57 Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 26 Aug 2014 11:45:28 +0300 Subject: [PATCH 213/311] Tests for GimpGradientFile and a sample .ggr by me --- Tests/images/gimp_gradient.ggr | 6 ++ Tests/test_file_gimpgradient.py | 103 ++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 Tests/images/gimp_gradient.ggr create mode 100644 Tests/test_file_gimpgradient.py diff --git a/Tests/images/gimp_gradient.ggr b/Tests/images/gimp_gradient.ggr new file mode 100644 index 000000000..4644e5537 --- /dev/null +++ b/Tests/images/gimp_gradient.ggr @@ -0,0 +1,6 @@ +GIMP Gradient +4 +0.000000 0.351923 0.534893 1.000000 1.000000 1.000000 0.910000 0.730303 0.510606 1.000000 0.480000 1 0 +0.501504 0.611002 0.637730 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 1 0 +0.931891 0.951264 1.000000 0.531255 0.316078 1.031173 1.000000 0.000000 0.000000 0.000000 1.000000 0 0 +0.810551 0.881217 0.921883 0.717576 0.441331 0.081217 1.000000 0.751576 0.410331 0.081217 1.000000 0 0 \ No newline at end of file diff --git a/Tests/test_file_gimpgradient.py b/Tests/test_file_gimpgradient.py new file mode 100644 index 000000000..e024c0903 --- /dev/null +++ b/Tests/test_file_gimpgradient.py @@ -0,0 +1,103 @@ +from helper import unittest, PillowTestCase + +from PIL import GimpGradientFile + +TEST_FILE = "Tests/images/gimp_gradient.ggr" + + +class TestImage(PillowTestCase): + + def test_linear_pos_le_middle(self): + # Arrange + middle = 0.5 + pos = 0.25 + + # Act + ret = GimpGradientFile.linear(middle, pos) + + # Assert + self.assertEqual(ret, 0.25) + + def test_linear_pos_le_small_middle(self): + # Arrange + middle = 1e-11 + pos = 1e-12 + + # Act + ret = GimpGradientFile.linear(middle, pos) + + # Assert + self.assertEqual(ret, 0.0) + + def test_linear_pos_gt_middle(self): + # Arrange + middle = 0.5 + pos = 0.75 + + # Act + ret = GimpGradientFile.linear(middle, pos) + + # Assert + self.assertEqual(ret, 0.75) + + def test_linear_pos_gt_small_middle(self): + # Arrange + middle = 1 - 1e-11 + pos = 1 - 1e-12 + + # Act + ret = GimpGradientFile.linear(middle, pos) + + # Assert + self.assertEqual(ret, 1.0) + + def test_curved(self): + # Arrange + middle = 0.5 + pos = 0.75 + + # Act + ret = GimpGradientFile.curved(middle, pos) + + # Assert + self.assertEqual(ret, 0.75) + + def test_sphere_increasing(self): + # Arrange + middle = 0.5 + pos = 0.75 + + # Act + ret = GimpGradientFile.sphere_increasing(middle, pos) + + # Assert + self.assertEqual(ret, 0.9682458365518543) + + def test_sphere_decreasing(self): + # Arrange + middle = 0.5 + pos = 0.75 + + # Act + ret = GimpGradientFile.sphere_decreasing(middle, pos) + + # Assert + self.assertEqual(ret, 0.3385621722338523) + + def test_load_via_imagepalette(self): + # Arrange + from PIL import ImagePalette + + # Act + palette = ImagePalette.load(TEST_FILE) + + # Assert + # load returns raw palette information + self.assertEqual(len(palette[0]), 1024) + self.assertEqual(palette[1], "RGBA") + + +if __name__ == '__main__': + unittest.main() + +# End of file From dbf0ee3631c51aa376693311475d1425b1fbb9fa Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 26 Aug 2014 12:04:04 +0300 Subject: [PATCH 214/311] Add (failing) test for GIMP 1.3 gradient files and .ggr by me --- Tests/images/gimp_gradient_with_name.ggr | 7 +++++++ Tests/test_file_gimpgradient.py | 20 +++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 Tests/images/gimp_gradient_with_name.ggr diff --git a/Tests/images/gimp_gradient_with_name.ggr b/Tests/images/gimp_gradient_with_name.ggr new file mode 100644 index 000000000..ab1c1d734 --- /dev/null +++ b/Tests/images/gimp_gradient_with_name.ggr @@ -0,0 +1,7 @@ +GIMP Gradient +Name: A GIMP 1.3 gradient file +4 +0.000000 0.351923 0.534893 1.000000 1.000000 1.000000 0.910000 0.730303 0.510606 1.000000 0.480000 1 0 +0.501504 0.611002 0.637730 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 1 0 +0.931891 0.951264 1.000000 0.531255 0.316078 1.031173 1.000000 0.000000 0.000000 0.000000 1.000000 0 0 +0.810551 0.881217 0.921883 0.717576 0.441331 0.081217 1.000000 0.751576 0.410331 0.081217 1.000000 0 0 \ No newline at end of file diff --git a/Tests/test_file_gimpgradient.py b/Tests/test_file_gimpgradient.py index e024c0903..ef941c0eb 100644 --- a/Tests/test_file_gimpgradient.py +++ b/Tests/test_file_gimpgradient.py @@ -2,8 +2,6 @@ from helper import unittest, PillowTestCase from PIL import GimpGradientFile -TEST_FILE = "Tests/images/gimp_gradient.ggr" - class TestImage(PillowTestCase): @@ -87,9 +85,25 @@ class TestImage(PillowTestCase): def test_load_via_imagepalette(self): # Arrange from PIL import ImagePalette + test_file = "Tests/images/gimp_gradient.ggr" # Act - palette = ImagePalette.load(TEST_FILE) + palette = ImagePalette.load(test_file) + + # Assert + # load returns raw palette information + self.assertEqual(len(palette[0]), 1024) + self.assertEqual(palette[1], "RGBA") + + + def test_load_1_3_via_imagepalette(self): + # Arrange + from PIL import ImagePalette + # GIMP 1.3 gradient files contain a name field + test_file = "Tests/images/gimp_gradient_with_name.ggr" + + # Act + palette = ImagePalette.load(test_file) # Assert # load returns raw palette information From 6b5871a484057e82ff00907d4b84cfde2837a0ad Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 26 Aug 2014 12:14:58 +0300 Subject: [PATCH 215/311] Fix for GIMP 1.3 gradient files --- PIL/GimpGradientFile.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/PIL/GimpGradientFile.py b/PIL/GimpGradientFile.py index 7c88addae..e37de361a 100644 --- a/PIL/GimpGradientFile.py +++ b/PIL/GimpGradientFile.py @@ -99,7 +99,13 @@ class GimpGradientFile(GradientFile): if fp.readline()[:13] != b"GIMP Gradient": raise SyntaxError("not a GIMP gradient file") - count = int(fp.readline()) + line = fp.readline() + + # GIMP 1.2 gradient files don't contain a name, but GIMP 1.3 files do + if line.startswith("Name: "): + line = fp.readline().strip() + + count = int(line) gradient = [] From 08499d35470013094cedc194fe079ab9589baef8 Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 26 Aug 2014 12:16:32 +0300 Subject: [PATCH 216/311] flake8 --- PIL/GimpGradientFile.py | 21 ++++++++++++++------- Tests/test_file_gimpgradient.py | 1 - 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/PIL/GimpGradientFile.py b/PIL/GimpGradientFile.py index e37de361a..6e99aba1e 100644 --- a/PIL/GimpGradientFile.py +++ b/PIL/GimpGradientFile.py @@ -24,6 +24,7 @@ from PIL._binary import o8 EPSILON = 1e-10 + def linear(middle, pos): if pos <= middle: if middle < EPSILON: @@ -38,25 +39,30 @@ def linear(middle, pos): 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 ] +SEGMENTS = [linear, curved, sine, sphere_increasing, sphere_decreasing] + class GradientFile: gradient = None - def getpalette(self, entries = 256): + def getpalette(self, entries=256): palette = [] @@ -89,6 +95,7 @@ class GradientFile: return b"".join(palette), "RGBA" + ## # File handler for GIMP's gradient format. @@ -114,13 +121,13 @@ class GimpGradientFile(GradientFile): 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] + 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]) + cspace = int(s[12]) if cspace != 0: raise IOError("cannot handle HSV colour space") diff --git a/Tests/test_file_gimpgradient.py b/Tests/test_file_gimpgradient.py index ef941c0eb..e1be5cd4f 100644 --- a/Tests/test_file_gimpgradient.py +++ b/Tests/test_file_gimpgradient.py @@ -95,7 +95,6 @@ class TestImage(PillowTestCase): self.assertEqual(len(palette[0]), 1024) self.assertEqual(palette[1], "RGBA") - def test_load_1_3_via_imagepalette(self): # Arrange from PIL import ImagePalette From 0a3b25ef9ec73dec0c83a6d6e3887b7406fcb2cc Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 26 Aug 2014 12:21:08 +0300 Subject: [PATCH 217/311] Test GimpGradientFile.sine() --- Tests/test_file_gimpgradient.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Tests/test_file_gimpgradient.py b/Tests/test_file_gimpgradient.py index e1be5cd4f..c64deb79d 100644 --- a/Tests/test_file_gimpgradient.py +++ b/Tests/test_file_gimpgradient.py @@ -60,6 +60,17 @@ class TestImage(PillowTestCase): # Assert self.assertEqual(ret, 0.75) + def test_sine(self): + # Arrange + middle = 0.5 + pos = 0.75 + + # Act + ret = GimpGradientFile.sine(middle, pos) + + # Assert + self.assertEqual(ret, 0.8535533905932737) + def test_sphere_increasing(self): # Arrange middle = 0.5 From 998955b024fbd98255bf806f17e24dde639dc1a9 Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 26 Aug 2014 12:23:12 +0300 Subject: [PATCH 218/311] Fix for Python 3 --- PIL/GimpGradientFile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PIL/GimpGradientFile.py b/PIL/GimpGradientFile.py index 6e99aba1e..696f425f1 100644 --- a/PIL/GimpGradientFile.py +++ b/PIL/GimpGradientFile.py @@ -109,7 +109,7 @@ class GimpGradientFile(GradientFile): line = fp.readline() # GIMP 1.2 gradient files don't contain a name, but GIMP 1.3 files do - if line.startswith("Name: "): + if line.startswith(b"Name: "): line = fp.readline().strip() count = int(line) From 952d1d5bf515f57a62b11eb0e3d12da71e4fbbf0 Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 26 Aug 2014 15:51:37 +0300 Subject: [PATCH 219/311] Remove duplicate tag caused by typo in spec: http://www.asmail.be/msg0055321032.html --- PIL/TiffTags.py | 6 +++--- Tests/test_file_tiff_metadata.py | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/PIL/TiffTags.py b/PIL/TiffTags.py index 966779ce9..2caf9622f 100644 --- a/PIL/TiffTags.py +++ b/PIL/TiffTags.py @@ -240,7 +240,7 @@ TAGS = { 45579: "YawAngle", 45580: "PitchAngle", 45581: "RollAngle", - + # Adobe DNG 50706: "DNGVersion", 50707: "DNGBackwardVersion", @@ -255,7 +255,6 @@ TAGS = { 50716: "BlackLevelDeltaV", 50717: "WhiteLevel", 50718: "DefaultScale", - 50741: "BestQualityScale", # FIXME! Dictionary contains duplicate keys 50741 50719: "DefaultCropOrigin", 50720: "DefaultCropSize", 50778: "CalibrationIlluminant1", @@ -279,7 +278,8 @@ TAGS = { 50737: "ChromaBlurRadius", 50738: "AntiAliasStrength", 50740: "DNGPrivateData", - 50741: "MakerNoteSafety", # FIXME! Dictionary contains duplicate keys 50741 + 50741: "MakerNoteSafety", + 50780: "BestQualityScale", #ImageJ 50838: "ImageJMetaDataByteCounts", # private tag registered with Adobe diff --git a/Tests/test_file_tiff_metadata.py b/Tests/test_file_tiff_metadata.py index e0805b525..4cebb56e2 100644 --- a/Tests/test_file_tiff_metadata.py +++ b/Tests/test_file_tiff_metadata.py @@ -8,7 +8,7 @@ tag_ids = dict(zip(TiffTags.TAGS.values(), TiffTags.TAGS.keys())) class TestFileTiffMetadata(PillowTestCase): def test_rt_metadata(self): - """ Test writing arbitray metadata into the tiff image directory + """ Test writing arbitrary metadata into the tiff image directory Use case is ImageJ private tags, one numeric, one arbitrary data. https://github.com/python-pillow/Pillow/issues/291 """ @@ -86,6 +86,10 @@ class TestFileTiffMetadata(PillowTestCase): self.assertEqual( value, reloaded[tag], "%s didn't roundtrip" % tag) + def test_no_duplicate_50741_tag(self): + self.assertEqual(tag_ids['MakerNoteSafety'], 50741) + self.assertEqual(tag_ids['BestQualityScale'], 50780) + if __name__ == '__main__': unittest.main() From ec2a225fff881be1bb89edd7fff398fdb196b313 Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 26 Aug 2014 15:52:37 +0300 Subject: [PATCH 220/311] flake8 --- PIL/TiffTags.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/PIL/TiffTags.py b/PIL/TiffTags.py index 2caf9622f..d15aa7ebe 100644 --- a/PIL/TiffTags.py +++ b/PIL/TiffTags.py @@ -46,8 +46,8 @@ TAGS = { (262, 5): "CMYK", (262, 6): "YCbCr", (262, 8): "CieLAB", - (262, 32803): "CFA", # TIFF/EP, Adobe DNG - (262, 32892): "LinearRaw", # Adobe DNG + (262, 32803): "CFA", # TIFF/EP, Adobe DNG + (262, 32892): "LinearRaw", # Adobe DNG 263: "Thresholding", 264: "CellWidth", @@ -281,9 +281,9 @@ TAGS = { 50741: "MakerNoteSafety", 50780: "BestQualityScale", - #ImageJ - 50838: "ImageJMetaDataByteCounts", # private tag registered with Adobe - 50839: "ImageJMetaData", # private tag registered with Adobe + # ImageJ + 50838: "ImageJMetaDataByteCounts", # private tag registered with Adobe + 50839: "ImageJMetaData", # private tag registered with Adobe } ## From 3e361d800d99f056324e502c869f957076237f18 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 26 Aug 2014 09:57:15 -0700 Subject: [PATCH 221/311] Refactor inheritance tree of test_file_libtiff_small --- Tests/test_file_libtiff.py | 5 +++-- Tests/test_file_libtiff_small.py | 6 ++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Tests/test_file_libtiff.py b/Tests/test_file_libtiff.py index 60eea8b3b..b5df39d04 100644 --- a/Tests/test_file_libtiff.py +++ b/Tests/test_file_libtiff.py @@ -4,8 +4,7 @@ import os from PIL import Image, TiffImagePlugin - -class TestFileLibTiff(PillowTestCase): +class LibTiffTestCase(PillowTestCase): def setUp(self): codecs = dir(Image.core) @@ -32,6 +31,8 @@ class TestFileLibTiff(PillowTestCase): out = self.tempfile("temp.png") im.save(out) +class TestFileLibTiff(LibTiffTestCase): + def test_g4_tiff(self): """Test the ordinary file path load path""" diff --git a/Tests/test_file_libtiff_small.py b/Tests/test_file_libtiff_small.py index 043ecaf3f..9c73ee5c2 100644 --- a/Tests/test_file_libtiff_small.py +++ b/Tests/test_file_libtiff_small.py @@ -2,12 +2,10 @@ from helper import unittest from PIL import Image -from test_file_libtiff import TestFileLibTiff +from test_file_libtiff import LibTiffTestCase -class TestFileLibTiffSmall(TestFileLibTiff): - - # Inherits TestFileLibTiff's setUp() and self._assert_noerr() +class TestFileLibTiffSmall(LibTiffTestCase): """ The small lena image was failing on open in the libtiff decoder because the file pointer was set to the wrong place From 8b2e7ee48ac9317b79bb7f0053a9201ada8d7d08 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 26 Aug 2014 14:48:17 -0700 Subject: [PATCH 222/311] Additional dependencies [ci skip] --- Tests/README.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Tests/README.rst b/Tests/README.rst index 1b11a45b1..6fd770f55 100644 --- a/Tests/README.rst +++ b/Tests/README.rst @@ -10,6 +10,9 @@ Install:: pip install coverage nose +If you're using Python 2.6, there's one additional dependency:: + + pip install unittest2 Execution --------- From d866a29bd8345e9877bd84f66cd995029cc32125 Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 27 Aug 2014 10:46:34 +0300 Subject: [PATCH 223/311] Correct duplicate EXIF tags: http://www.exiv2.org/tags.html --- PIL/ExifTags.py | 4 ++-- Tests/test_file_jpeg.py | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/PIL/ExifTags.py b/PIL/ExifTags.py index 25cd08068..afc02b3c8 100644 --- a/PIL/ExifTags.py +++ b/PIL/ExifTags.py @@ -67,8 +67,8 @@ TAGS = { 0x0213: "YCbCrPositioning", 0x0214: "ReferenceBlackWhite", 0x1000: "RelatedImageFileFormat", - 0x1001: "RelatedImageLength", # FIXME / Dictionary contains duplicate keys - 0x1001: "RelatedImageWidth", # FIXME \ Dictionary contains duplicate keys + 0x1001: "RelatedImageLength", + 0x1002: "RelatedImageWidth", 0x828d: "CFARepeatPatternDim", 0x828e: "CFAPattern", 0x828f: "BatteryLevel", diff --git a/Tests/test_file_jpeg.py b/Tests/test_file_jpeg.py index 3bf757332..194a953d1 100644 --- a/Tests/test_file_jpeg.py +++ b/Tests/test_file_jpeg.py @@ -295,6 +295,15 @@ class TestFileJpeg(PillowTestCase): # Default save quality is 75%, so a tiny bit of difference is alright self.assert_image_similar(img, Image.open(tempfile), 1) + def test_no_duplicate_0x1001_tag(self): + # Arrange + from PIL import ExifTags + tag_ids = dict(zip(ExifTags.TAGS.values(), ExifTags.TAGS.keys())) + + # Assert + self.assertEqual(tag_ids['RelatedImageLength'], 0x1001) + self.assertEqual(tag_ids['RelatedImageWidth'], 0x1002) + if __name__ == '__main__': unittest.main() From a428321bee180ee5c253bd49eb577f0a40066ee9 Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 27 Aug 2014 10:57:40 +0300 Subject: [PATCH 224/311] flake8 --- Tests/test_file_jpeg.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/Tests/test_file_jpeg.py b/Tests/test_file_jpeg.py index 194a953d1..36c8837d7 100644 --- a/Tests/test_file_jpeg.py +++ b/Tests/test_file_jpeg.py @@ -60,7 +60,8 @@ class TestFileJpeg(PillowTestCase): self.assertGreater(y, 0.8) self.assertEqual(k, 0.0) # the opposite corner is black - c, m, y, k = [x / 255.0 for x in im.getpixel((im.size[0]-1, im.size[1]-1))] + c, m, y, k = [x / 255.0 for x in im.getpixel(( + im.size[0]-1, im.size[1]-1))] self.assertGreater(k, 0.9) # roundtrip, and check again im = self.roundtrip(im) @@ -69,7 +70,8 @@ class TestFileJpeg(PillowTestCase): self.assertGreater(m, 0.8) self.assertGreater(y, 0.8) self.assertEqual(k, 0.0) - c, m, y, k = [x / 255.0 for x in im.getpixel((im.size[0]-1, im.size[1]-1))] + c, m, y, k = [x / 255.0 for x in im.getpixel(( + im.size[0]-1, im.size[1]-1))] self.assertGreater(k, 0.9) def test_dpi(self): @@ -150,7 +152,8 @@ class TestFileJpeg(PillowTestCase): if py3: a = bytes(random.randint(0, 255) for _ in range(256 * 256 * 3)) else: - a = b''.join(chr(random.randint(0, 255)) for _ in range(256 * 256 * 3)) + a = b''.join(chr(random.randint(0, 255)) for _ in range( + 256 * 256 * 3)) im = Image.frombuffer("RGB", (256, 256), a, "raw", "RGB", 0, 1) # this requires more bytes than pixels in the image im.save(f, format="JPEG", progressive=True, quality=100) @@ -235,11 +238,13 @@ class TestFileJpeg(PillowTestCase): qtables = im.quantization reloaded = self.roundtrip(im, qtables=qtables, subsampling=0) self.assertEqual(im.quantization, reloaded.quantization) - self.assert_image_similar(im, self.roundtrip(im, qtables='web_low'), 30) - self.assert_image_similar(im, self.roundtrip(im, qtables='web_high'), 30) + self.assert_image_similar(im, self.roundtrip(im, qtables='web_low'), + 30) + self.assert_image_similar(im, self.roundtrip(im, qtables='web_high'), + 30) self.assert_image_similar(im, self.roundtrip(im, qtables='keep'), 30) - #values from wizard.txt in jpeg9-a src package. + # values from wizard.txt in jpeg9-a src package. standard_l_qtable = [int(s) for s in """ 16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 @@ -251,7 +256,7 @@ class TestFileJpeg(PillowTestCase): 72 92 95 98 112 100 103 99 """.split(None)] - standard_chrominance_qtable= [int(s) for s in """ + standard_chrominance_qtable = [int(s) for s in """ 17 18 24 47 99 99 99 99 18 21 26 66 99 99 99 99 24 26 56 99 99 99 99 99 @@ -276,8 +281,8 @@ class TestFileJpeg(PillowTestCase): # dict of qtable lists self.assert_image_similar(im, self.roundtrip(im, - qtables={0:standard_l_qtable, - 1:standard_chrominance_qtable}), + qtables={0: standard_l_qtable, + 1: standard_chrominance_qtable}), 30) @unittest.skipUnless(djpeg_available(), "djpeg not available") From c2f09036275861d08382d82feba11532f9dd941d Mon Sep 17 00:00:00 2001 From: hugovk Date: Wed, 27 Aug 2014 11:06:34 +0300 Subject: [PATCH 225/311] Correct the correction: RelatedImageWidth=0x1001, RelatedImageLength=0x1002 --- PIL/ExifTags.py | 4 ++-- Tests/test_file_jpeg.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/PIL/ExifTags.py b/PIL/ExifTags.py index afc02b3c8..52e145f62 100644 --- a/PIL/ExifTags.py +++ b/PIL/ExifTags.py @@ -67,8 +67,8 @@ TAGS = { 0x0213: "YCbCrPositioning", 0x0214: "ReferenceBlackWhite", 0x1000: "RelatedImageFileFormat", - 0x1001: "RelatedImageLength", - 0x1002: "RelatedImageWidth", + 0x1001: "RelatedImageWidth", + 0x1002: "RelatedImageLength", 0x828d: "CFARepeatPatternDim", 0x828e: "CFAPattern", 0x828f: "BatteryLevel", diff --git a/Tests/test_file_jpeg.py b/Tests/test_file_jpeg.py index 36c8837d7..922a48c10 100644 --- a/Tests/test_file_jpeg.py +++ b/Tests/test_file_jpeg.py @@ -306,8 +306,8 @@ class TestFileJpeg(PillowTestCase): tag_ids = dict(zip(ExifTags.TAGS.values(), ExifTags.TAGS.keys())) # Assert - self.assertEqual(tag_ids['RelatedImageLength'], 0x1001) - self.assertEqual(tag_ids['RelatedImageWidth'], 0x1002) + self.assertEqual(tag_ids['RelatedImageWidth'], 0x1001) + self.assertEqual(tag_ids['RelatedImageLength'], 0x1002) if __name__ == '__main__': From 339a63ed696e7ce11242fd8a3f7cea141937c2d5 Mon Sep 17 00:00:00 2001 From: hugovk Date: Fri, 29 Aug 2014 16:03:58 +0300 Subject: [PATCH 226/311] Fail fast: move installation stuff that's not needed in the script: section closer to where it's needed. This saves time by avoiding it when a test fails. --- .travis.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 783974b53..704c0d949 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,10 +16,9 @@ python: - 3.4 install: - - "sudo apt-get -qq install libfreetype6-dev liblcms2-dev python-qt4 ghostscript libffi-dev libjpeg-turbo-progs cmake imagemagick lcov" + - "sudo apt-get -qq install libfreetype6-dev liblcms2-dev python-qt4 ghostscript libffi-dev libjpeg-turbo-progs cmake imagemagick" - "pip install cffi" - - "pip install coveralls nose coveralls-merge" - - "gem install coveralls-lcov" + - "pip install coverage nose" # Pyroma installation is slow on Py3, so just do it for Py2. - if [ ${TRAVIS_PYTHON_VERSION:0:1} == "2" ]; then travis_retry pip install pyroma; fi @@ -42,13 +41,16 @@ script: after_success: # gather the coverage data + - sudo apt-get -qq install lcov - lcov --capture --directory . -b . --output-file coverage.info # filter to remove system headers - - lcov --remove coverage.info '/usr/*' -o coverage.filtered.info + - lcov --remove coverage.info '/usr/*' -o coverage.filtered.info # convert to json + - gem install coveralls-lcov - coveralls-lcov -v -n coverage.filtered.info > coverage.c.json - coverage report + - pip install coveralls-merge - coveralls-merge coverage.c.json From 860e67e1c455d4d5ef8c0f8ab366e1840437df3c Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 2 Sep 2014 14:11:08 +0300 Subject: [PATCH 227/311] Add access functions for ImagingEffectNoise with a test --- PIL/Image.py | 16 ++++++++++++++++ Tests/test_image.py | 13 +++++++++++++ libImaging/Effects.c | 8 ++++---- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/PIL/Image.py b/PIL/Image.py index 480410eff..605595912 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -2419,3 +2419,19 @@ def _show(image, **options): def _showxv(image, title=None, **options): from PIL import ImageShow ImageShow.show(image, title, **options) + + +# -------------------------------------------------------------------- +# Effects + +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)) + +# End of file diff --git a/Tests/test_image.py b/Tests/test_image.py index cd46c9713..bbc9a43fc 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -140,6 +140,19 @@ class TestImage(PillowTestCase): img_colors = sorted(img.getcolors()) self.assertEqual(img_colors, expected_colors) + def test_noise(self): + # Arrange + size = (100, 100) + sigma = 128 + + # Act + im = Image.effect_noise(size, sigma) + + # Assert + self.assertEqual(im.size, (100, 100)) + self.assertEqual(im.getpixel((0, 0)), 60) + self.assertEqual(im.getpixel((0, 1)), 28) + if __name__ == '__main__': unittest.main() diff --git a/libImaging/Effects.c b/libImaging/Effects.c index db6e72989..30e44d570 100644 --- a/libImaging/Effects.c +++ b/libImaging/Effects.c @@ -74,7 +74,7 @@ ImagingEffectMandelbrot(int xsize, int ysize, double extent[4], int quality) Imaging ImagingEffectNoise(int xsize, int ysize, float sigma) { - /* Generate gaussian noise centered around 128 */ + /* Generate Gaussian noise centered around 128 */ Imaging imOut; int x, y; @@ -83,19 +83,19 @@ ImagingEffectNoise(int xsize, int ysize, float sigma) imOut = ImagingNew("L", xsize, ysize); if (!imOut) - return NULL; + return NULL; next = 0.0; nextok = 0; for (y = 0; y < imOut->ysize; y++) { UINT8* out = imOut->image8[y]; - for (x = 0; x < imOut->xsize; x++) { + for (x = 0; x < imOut->xsize; x++) { if (nextok) { this = next; nextok = 0; } else { - /* after numerical recepies */ + /* after numerical recipes */ double v1, v2, radius, factor; do { v1 = rand()*(2.0/32767.0) - 1.0; From d3242a5124251e942dc9491999ee0e6b704b81dc Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 2 Sep 2014 14:45:54 +0300 Subject: [PATCH 228/311] test_effect_noise stalls on Travis, skip unless Windows --- Tests/test_image.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Tests/test_image.py b/Tests/test_image.py index bbc9a43fc..83d5b0d1f 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -1,6 +1,7 @@ from helper import unittest, PillowTestCase, lena from PIL import Image +import sys class TestImage(PillowTestCase): @@ -140,7 +141,9 @@ class TestImage(PillowTestCase): img_colors = sorted(img.getcolors()) self.assertEqual(img_colors, expected_colors) - def test_noise(self): + @unittest.skipUnless(sys.platform.startswith('win32'), + "Stalls on Travis CI, passes on Windows") + def test_effect_noise(self): # Arrange size = (100, 100) sigma = 128 From 76ef83263bad332252edee9dfef169bcec2bd463 Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 2 Sep 2014 14:47:34 +0300 Subject: [PATCH 229/311] Remove unreachable and never completed Perlin turbulence code --- libImaging/Effects.c | 223 +------------------------------------------ 1 file changed, 1 insertion(+), 222 deletions(-) diff --git a/libImaging/Effects.c b/libImaging/Effects.c index 30e44d570..90e0fff30 100644 --- a/libImaging/Effects.c +++ b/libImaging/Effects.c @@ -113,14 +113,6 @@ ImagingEffectNoise(int xsize, int ysize, float sigma) return imOut; } -Imaging -ImagingEffectPerlinTurbulence(int xsize, int ysize) -{ - /* Perlin turbulence (In progress) */ - - return NULL; -} - Imaging ImagingEffectSpread(Imaging imIn, int distance) { @@ -157,217 +149,4 @@ ImagingEffectSpread(Imaging imIn, int distance) return imOut; } -/* -------------------------------------------------------------------- */ -/* Taken from the "C" code in the W3C SVG specification. Translated - to C89 by Fredrik Lundh */ - -#if 0 - -/* Produces results in the range [1, 2**31 - 2]. -Algorithm is: r = (a * r) mod m -where a = 16807 and m = 2**31 - 1 = 2147483647 -See [Park & Miller], CACM vol. 31 no. 10 p. 1195, Oct. 1988 -To test: the algorithm should produce the result 1043618065 -as the 10,000th generated number if the original seed is 1. -*/ -#define RAND_m 2147483647 /* 2**31 - 1 */ -#define RAND_a 16807 /* 7**5; primitive root of m */ -#define RAND_q 127773 /* m / a */ -#define RAND_r 2836 /* m % a */ - -static long -perlin_setup_seed(long lSeed) -{ - if (lSeed <= 0) lSeed = -(lSeed % (RAND_m - 1)) + 1; - if (lSeed > RAND_m - 1) lSeed = RAND_m - 1; - return lSeed; -} - -static long -perlin_random(long lSeed) -{ - long result; - result = RAND_a * (lSeed % RAND_q) - RAND_r * (lSeed / RAND_q); - if (result <= 0) result += RAND_m; - return result; -} - -#define BSize 0x100 -#define BM 0xff -#define PerlinN 0x1000 -#define NP 12 /* 2^PerlinN */ -#define NM 0xfff -static int perlin_uLatticeSelector[BSize + BSize + 2]; -static double perlin_fGradient[4][BSize + BSize + 2][2]; -typedef struct -{ - int nWidth; /* How much to subtract to wrap for stitching. */ - int nHeight; - int nWrapX; /* Minimum value to wrap. */ - int nWrapY; -} StitchInfo; - -static void -perlin_init(long lSeed) -{ - double s; - int i, j, k; - lSeed = perlin_setup_seed(lSeed); - for(k = 0; k < 4; k++) - { - for(i = 0; i < BSize; i++) - { - perlin_uLatticeSelector[i] = i; - for (j = 0; j < 2; j++) - perlin_fGradient[k][i][j] = (double)(((lSeed = perlin_random(lSeed)) % (BSize + BSize)) - BSize) / BSize; - s = (double) (sqrt(perlin_fGradient[k][i][0] * perlin_fGradient[k][i][0] + perlin_fGradient[k][i][1] * perlin_fGradient[k][i][1])); - perlin_fGradient[k][i][0] /= s; - perlin_fGradient[k][i][1] /= s; - } - } - while(--i) - { - k = perlin_uLatticeSelector[i]; - perlin_uLatticeSelector[i] = perlin_uLatticeSelector[j = (lSeed = perlin_random(lSeed)) % BSize]; - perlin_uLatticeSelector[j] = k; - } - for(i = 0; i < BSize + 2; i++) - { - perlin_uLatticeSelector[BSize + i] = perlin_uLatticeSelector[i]; - for(k = 0; k < 4; k++) - for(j = 0; j < 2; j++) - perlin_fGradient[k][BSize + i][j] = perlin_fGradient[k][i][j]; - } -} - -#define s_curve(t) ( t * t * (3. - 2. * t) ) -#define lerp(t, a, b) ( a + t * (b - a) ) -static double -perlin_noise2(int nColorChannel, double vec[2], StitchInfo *pStitchInfo) -{ - int bx0, bx1, by0, by1, b00, b10, b01, b11; - double rx0, rx1, ry0, ry1, *q, sx, sy, a, b, t, u, v; - register int i, j; - - t = vec[0] + (double) PerlinN; - bx0 = (int)t; - bx1 = bx0+1; - rx0 = t - (int)t; - rx1 = rx0 - 1.0f; - t = vec[1] + (double) PerlinN; - by0 = (int)t; - by1 = by0+1; - ry0 = t - (int)t; - ry1 = ry0 - 1.0f; - - /* If stitching, adjust lattice points accordingly. */ - if(pStitchInfo != NULL) - { - if(bx0 >= pStitchInfo->nWrapX) - bx0 -= pStitchInfo->nWidth; - if(bx1 >= pStitchInfo->nWrapX) - bx1 -= pStitchInfo->nWidth; - if(by0 >= pStitchInfo->nWrapY) - by0 -= pStitchInfo->nHeight; - if(by1 >= pStitchInfo->nWrapY) - by1 -= pStitchInfo->nHeight; - } - - bx0 &= BM; - bx1 &= BM; - by0 &= BM; - by1 &= BM; - - i = perlin_uLatticeSelector[bx0]; - j = perlin_uLatticeSelector[bx1]; - b00 = perlin_uLatticeSelector[i + by0]; - b10 = perlin_uLatticeSelector[j + by0]; - b01 = perlin_uLatticeSelector[i + by1]; - b11 = perlin_uLatticeSelector[j + by1]; - sx = (double) (s_curve(rx0)); - sy = (double) (s_curve(ry0)); - q = perlin_fGradient[nColorChannel][b00]; u = rx0 * q[0] + ry0 * q[1]; - q = perlin_fGradient[nColorChannel][b10]; v = rx1 * q[0] + ry0 * q[1]; - a = lerp(sx, u, v); - q = perlin_fGradient[nColorChannel][b01]; u = rx0 * q[0] + ry1 * q[1]; - q = perlin_fGradient[nColorChannel][b11]; v = rx1 * q[0] + ry1 * q[1]; - b = lerp(sx, u, v); - return lerp(sy, a, b); -} - -double -perlin_turbulence( - int nColorChannel, double *point, double fBaseFreqX, double fBaseFreqY, - int nNumOctaves, int bFractalSum, int bDoStitching, - double fTileX, double fTileY, double fTileWidth, double fTileHeight) -{ - StitchInfo stitch; - StitchInfo *pStitchInfo = NULL; /* Not stitching when NULL. */ - - double fSum = 0.0f; - double vec[2]; - double ratio = 1; - - int nOctave; - - vec[0] = point[0] * fBaseFreqX; - vec[1] = point[1] * fBaseFreqY; - - /* Adjust the base frequencies if necessary for stitching. */ - if(bDoStitching) - { - /* When stitching tiled turbulence, the frequencies must be adjusted */ - /* so that the tile borders will be continuous. */ - if(fBaseFreqX != 0.0) - { - double fLoFreq = (double) (floor(fTileWidth * fBaseFreqX)) / fTileWidth; - double fHiFreq = (double) (ceil(fTileWidth * fBaseFreqX)) / fTileWidth; - if(fBaseFreqX / fLoFreq < fHiFreq / fBaseFreqX) - fBaseFreqX = fLoFreq; - else - fBaseFreqX = fHiFreq; - } - - if(fBaseFreqY != 0.0) - { - double fLoFreq = (double) (floor(fTileHeight * fBaseFreqY)) / fTileHeight; - double fHiFreq = (double) (ceil(fTileHeight * fBaseFreqY)) / fTileHeight; - if(fBaseFreqY / fLoFreq < fHiFreq / fBaseFreqY) - fBaseFreqY = fLoFreq; - else - fBaseFreqY = fHiFreq; - } - - /* Set up initial stitch values. */ - pStitchInfo = &stitch; - stitch.nWidth = (int) (fTileWidth * fBaseFreqX + 0.5f); - stitch.nWrapX = (int) (fTileX * fBaseFreqX + PerlinN + stitch.nWidth); - stitch.nHeight = (int) (fTileHeight * fBaseFreqY + 0.5f); - stitch.nWrapY = (int) (fTileY * fBaseFreqY + PerlinN + stitch.nHeight); - } - - for(nOctave = 0; nOctave < nNumOctaves; nOctave++) - { - if(bFractalSum) - fSum += (double) (perlin_noise2(nColorChannel, vec, pStitchInfo) / ratio); - else - fSum += (double) (fabs(perlin_noise2(nColorChannel, vec, pStitchInfo)) / ratio); - - vec[0] *= 2; - vec[1] *= 2; - ratio *= 2; - - if(pStitchInfo != NULL) - { - /* Update stitch values. Subtracting PerlinN before the multiplication and */ - /* adding it afterward simplifies to subtracting it once. */ - stitch.nWidth *= 2; - stitch.nWrapX = 2 * stitch.nWrapX - PerlinN; - stitch.nHeight *= 2; - stitch.nWrapY = 2 * stitch.nWrapY - PerlinN; - } - } - return fSum; -} - -#endif +// End of file From 8c96d38ce96514e08679fd7fa4cc0957ee9802d9 Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 2 Sep 2014 15:14:00 +0300 Subject: [PATCH 230/311] Add access functions for ImagingEffectMandelbrot with a test --- PIL/Image.py | 14 ++++++++++++- Tests/images/mandelbrot.png | Bin 0 -> 13479 bytes Tests/test_image.py | 15 +++++++++++++- libImaging/Effects.c | 38 ++++++++++++++++++------------------ 4 files changed, 46 insertions(+), 21 deletions(-) create mode 100644 Tests/images/mandelbrot.png diff --git a/PIL/Image.py b/PIL/Image.py index 605595912..4c9a77e79 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -2424,9 +2424,21 @@ def _showxv(image, title=None, **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 + Generate Gaussian noise centered around 128. :param size: The requested size in pixels, as a 2-tuple: (width, height). diff --git a/Tests/images/mandelbrot.png b/Tests/images/mandelbrot.png new file mode 100644 index 0000000000000000000000000000000000000000..d8167e721c8dd1e68bc7832ecda91c642ee01af4 GIT binary patch literal 13479 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 bBJHQ54g)dRimage8[y]; - for (x = 0; x < xsize; x++) { - x1 = y1 = xi2 = yi2 = 0.0; - cr = x*dr + extent[0]; - ci = y*di + extent[1]; - for (k = 1;; k++) { - y1 = 2*x1*y1 + ci; - x1 = xi2 - yi2 + cr; - xi2 = x1*x1; - yi2 = y1*y1; - if ((xi2 + yi2) > radius) { - buf[x] = k*255/quality; - break; - } - if (k > quality) { - buf[x] = 0; - break; - } - } - } + for (x = 0; x < xsize; x++) { + x1 = y1 = xi2 = yi2 = 0.0; + cr = x*dr + extent[0]; + ci = y*di + extent[1]; + for (k = 1;; k++) { + y1 = 2*x1*y1 + ci; + x1 = xi2 - yi2 + cr; + xi2 = x1*x1; + yi2 = y1*y1; + if ((xi2 + yi2) > radius) { + buf[x] = k*255/quality; + break; + } + if (k > quality) { + buf[x] = 0; + break; + } + } + } } return im; } From bcc5305125f3a38b8ea7aad501f891474375b6fd Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 2 Sep 2014 15:53:58 +0300 Subject: [PATCH 231/311] Add access functions for ImagingEffectSpread with a test --- PIL/Image.py | 11 +++++++++++ .../{mandelbrot.png => effect_mandelbrot.png} | Bin Tests/images/effect_spread.png | Bin 0 -> 43292 bytes Tests/test_image.py | 15 ++++++++++++++- libImaging/Effects.c | 10 +++++----- 5 files changed, 30 insertions(+), 6 deletions(-) rename Tests/images/{mandelbrot.png => effect_mandelbrot.png} (100%) create mode 100644 Tests/images/effect_spread.png diff --git a/PIL/Image.py b/PIL/Image.py index 4c9a77e79..5e1416a33 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -1910,6 +1910,16 @@ class Image: im = self.im.transpose(method) return self._new(im) + def effect_spread(self, distance): + """ + Randomly spread pixels in an image. + + :param distance: Distance to spread pixels. + """ + self.load() + im = self.im.effect_spread(distance) + return self._new(im) + # -------------------------------------------------------------------- # Lazy operations @@ -2436,6 +2446,7 @@ def effect_mandelbrot(size, extent, quality): """ return Image()._new(core.effect_mandelbrot(size, extent, quality)) + def effect_noise(size, sigma): """ Generate Gaussian noise centered around 128. diff --git a/Tests/images/mandelbrot.png b/Tests/images/effect_mandelbrot.png similarity index 100% rename from Tests/images/mandelbrot.png rename to Tests/images/effect_mandelbrot.png diff --git a/Tests/images/effect_spread.png b/Tests/images/effect_spread.png new file mode 100644 index 0000000000000000000000000000000000000000..df7cfa4745a9acdf92a4baf1727c731741c3521d GIT binary patch literal 43292 zcmV)1K+V62P)&%{#8reyD5OX%k_4cPA*C^*Gss^FZe8wO(kZ=*gl801@NhoFLONv40 z1Hb{M92u%8A_;7!ASDLE0z?E!Aru7!HUtzRCZtAS02$}1Mw#tF17m=E+X1?eRHIA; z9#$d<06PS}F9;45!UjfoV@;&BJFgk~lo{2B_YF>)89ltORF&4_HI;%(9T$BjAk?u8 zxO5fG2s|GkN)Q(z^0`V)2)JlkI=St$9nEVOeER&RHP_DH^u`Wm`>v0pain8kaNr>= zf*8@_ftzL0l*|Q6R1jn!`S|C4u!AEKmZ7d>H~_s9M%*?Fsa6|rT`vN$pIuDQYn>46jX&k z;Ss_};0lI?WFd$`#Gzt@5MWGK;?7(=>3gbqUmaIU2T-wpsof=44#1&lycR|$mR zHR*_N`+}>JCnXt=O_-KRS3}4`4E<0LA_eDxzzQKW^d&_GVK%`Egq)}@b9ri1v}?nz z?fbLYlO5;WvJz2a)pbiP+xA%)GQRM-H4p&+0EB@bSdxP%@f4LHZr8@7V9uTEs)g$T zCfho4&CSVdKn7a7LV;k%3wHt`C6^fcKuUq55E4LjKolSW z1X2;)6O2FvpaekkrAN4A0C8WG0_=xDO|{uK5{99aQdA`LbjoP&7@9n*rSs@O^MqO^ ziaL#O=|JWK$*2)yo(+H!@<3Ce=ZpHKbGyFVBas1vf}-pBKuaoKvOe0@7UoWN3=|P2 zydi-ZA|6MGC|gcwzX5WdOgo zO@TFOy^t#mjTENL9Cz$QY1B9qqfpT`!AFq5NQpvZLg7;t3E?ZybzO`g?ca7%gsK8P z06=nFg8_N%qFIC8towLBM5HPOD@-_8MhxjuL#5m^O{K`x&TdxRaU*duY%w|%TqpBM~K5HjfWtXWk*dq#Ze;!3O; z8#kP^U156x7D$&NRwDvPuUPN_D%e(CTINcw6#&6qMMq39iAc_+2uK7&Bp3|x3JL+y zgsMeA=sT7Q3n7e?{aJi-;z{vtYX212%+$ig8h)Ik+>5ALKQ0f zfC)yZ4s8Ia&j1BL3-gNPWey&;bHSa8skc>mbPe5JCwFRzeqle>b{<0_qTf|tR9_An4#}&e&L&xi9^TcFrn8%#c!pn&h(_I$RND>7if^|Ycx#Srp4jGChW2TC$qDnHI3>nJ~+fiLn!V(}@*DwVHV1+6gk~R>b zZ37aa0+=xLxsW`BFkr-E45-)-0Y^k~ZxjtK}E#>k|EV3g31z=A4pbOjh&0Rm1Mlx$T~vldaOOvx06N`^vwhNdiT zESIpV_?&4{h5!Hod{tpw5G+tc16(Sa5(vg|Bpz^@-F0+$$MKUNf4%(Hi+cu;b*Odu z^(%@F09eV{+zSE3^o5U440I2ggeg2YYew4f{Q%&5E^7e*+;;xhpj7(%n@1GI02IKX zH}CTt0(bxkBHU&YV5)j0iz=9yiPGRuG>ty_uzOUE(O*C-*EE0oEz(M5XTY02no;g6ve=S11NQz5CTpS z;}A=z63GRUkg*U)6u?Hxwy7(9IZ+wM5-5oX8YzV7gdR;(NK}H+aQi@}S%m-vEK2o& z1(X0wND3wNLLV{0F~o?(8lz!<-YQ!yXD{`w;nJzTia85G=n3D=pX%Q9>EUR^pjy=R zUB!&?vZWiGBdw=%XyUlkKi=z670Dc5O{PjkPX(?Gbd|d(a0CH1p%98ds%a6g28ymH zVi045v7s;~B4?g8al+iO%T`wI{l0DGs^+SswtjoQ6hIhy2!v(J#Z;C(8AYM(3Kv9V zSRBcE9*8o|Tt+MoF$XSCLqFs^AchHpqKwq|5kVC?(3i29|3EhH{0gQOS zgw!AeO6Rw|wgUHm%qCrgp(iYh+Xd;mLNX6&juTQt;Zi~xr9cL5fI%4vNK{I(1O!$@ zu%RopDdY!!l-R?=h59N@)!ERnzzBp$WJcF0RAD?qfkyyQsn0+J5fu<(>MxGWykq?D`XRFz7eDjXmr7JzCL2_P7!kf?#}ATdnKgF<4rP{OJfl(M!BDGUe| zDD)}SX3tA~zbzNo76_SNvZGN=NK#o54Shx>F1Q%0s+G@=6az(tN>EfO))Y?_E|<)} zL4-&a5F)q@ql6VG6fP$c1fdYF6i_8701!f7Dy*r+^(2;DBcVBEw2Ea4=O9$Tfse{o zz>OGQu*$8S%3K>uNp)SDzt%LUgaRUIL<~VPoTxkmfyaGE7K z?IVhwHjoch1-L#J)Db$SfHCIe8Dj|~IprlD1e|$Dk0Bf~8MtL%!6;TuJH9>Ma@ttP z5yS)#6Hw#$yI(8y6Suy(v#BY1>t)Zq@a~;A-uUIuFB^aJxuYXdRY>L5a~ddCzSuTM zVaO!D>yn8a0oNx8qW}WwkMzVVb?K}2VA<>J7NvsSlcfesHm7A69NjYj31Ccqy}m&7 zsKns3`IVVUvrzJ}f(esY)jZ#+G=!qUXoLbnh=KqBhy{V5nCb#R=5wi=8VQB4HR&MF zCs?YW0Nny1oG2+TF&aV6wFp8Gb+qcyxD zaLaLtRE+$v5D-lzlp+!WkmrnrIHoCp6UYO`Jc%&ZVjzS(uyl-M>-v+B2*&kO?|q3W z23Wat&EI-^^L1-Zzj{S=?~zu?{NKNEvS+Bk9QR)zbv*UIPCsCZ26!kL=g)l9js<`S zAYi#j26}Zf14*a_T3T1rs#J~0=t@X*2}!x&PoGyUG1~a$@k~Nut3UAhw|n!f7$SlZ z;C*>ZazPah0KhEID+f&}KsYFrd>g4A;|w5(kP=A>rZPkz#u5nt0LKUd1Km$siP(qKYb&HZTHZ=@W>&${OtJ1AvKfIsOlZ~&h~^cYnCtZ zskdLPIdf&HV8_;6XF`dv;fe^9*bfO+K{TRhI#F>*k)R}O?-(3B)ouAxSB?}Y`IAkH`T$YMR`o1IVtmhORLJb%c0U(U=jt{?R{qU>t7q2_<-k0$S zsYh>UsjN;SW(}9z&P@l1q26{*&1+xw8;SIf&Z~8OCk&Y@4T^b0L4ohbb*=yhiC9`O zG*Rev2RbCw5JD>Anc8HrvtMxOb`3_8F%FOrv}F4u!(PP198pA2yi!ZWu;4Hg(Na;x z=V6%}p%fY=eh3wUJx*hi8!F~PLZL~oB!eO7`ynuLzRBvRVFn;C4ckEg%?xr3>@mQ! zLaQ5XF2x)Cjzj+OqxloP&Zt@b$&-p?X#VLG)5z%;xI4G&2|YS*rSt=woRnCxqIvC% z;cs`OWBTrwUg5x%JkW!J3`=S}qM#5EVFxrjR2(V>e!v?iv=p3R%(T%MIitrnQYjS~ z0059z5?BI_LW+103WR+T$3hYz5%e@wgOX`PTDIl6fdT;l0KxFmRex+*IXQy8!F>47 z4?1tW;Mp_I8T0RNhII_HMfdFa8P8|`{cOmRN-Q2#2vQIhLWCS+sQO-jkmn+e962~d zqdHZ@H=my5B*{38rK4W=aNv|wgG$Fgxwqq@tL7}3TM+;pQ_T zW;@m>lcRMCjUb0c&r6LTRb7L^F%!yR6pb8Hq*d6rFSX)yUOwD+ytQ`S6~mvr?T2b{ zYb*Ag^qO@B7O_=lK@s$n6`$$lyvvZ%(HGjbm5Bm?wM5kLbA_?v>JEN?*v|V>`lnh4 z2w@oczRRT*Ac;9gfHUT~3i7!T53r`0X$}A-37;v%OsgtJ+=4((xb(a~-Z?#YxLZkN za%Jzf^G98^vUd1X@v0S-7>dvKIb#~)Ebv1vplg+i zeDd5TiM7MqhR!%|Dj^O8pmYC8y*8yq4Gz37HV(D+dz;@sdbr)5HoGcU3bt?R!or1s zIRP&gTor)0iStFfG72kAKmjTRT%!a4Kq!))+czj8aSXYLV&Qrg=R`uq2LJ&y92u($ zM$`3uwt^ImNofxa-se-w*SnQrsfZBt(o8C z76kF4Z(t}yF=$;fFcn#uj1WZ|@u&>lilo+8@Dad16G$`S8b{1wP*o6!MM$M4Sm+g* zF1V!G&a%+>Ku<*XO_>)&_i|lEEaIn|Jra*LB=w{*QZmS-d5JU&_I?rOO2uA86~FrQ z)zO8kv`9QMcU6!bW+awcwIXxgjWKFftXWl&(B|CpKulvvUDp6$kaE}4%=nb?284e5 z$)0IbYKQuAzU4*Jrq8iz8jum4hCJj#z;rV1JCX^)O0EV2VrW1$h+<+Tfg>h>ynEx} zwy%%mPiDI}9cn&r?a0n9jf#*`jDlZ2xNG#PX?I-s_XuJ^IecSFju220*Id^}5SdX^ z1a?>+;Szu_M2fIK`k-sWd)pbL6{G6wo0F~EkCgj+P%IX!seARmN06$%_fcCaf?j|1 zP&BEmT3x&1^yYWpZ})6_LN#!0k3iU4h9#l$Q25ZOOn|{04<$+_;();6qVR-pBt=+b z7z|n@>&Ri76KcrPFaSUr6{evuq9P*(64j<6463P$EE^3RE5j#-QAE)-1pvU^Vrt%e zS~*5btBP4+7Xt*`{x_ddm68I6L)VsCDjLCEUu@8#v5>(d&;D)H^>>cC{H8wNtgSX9 zF(aQZ?LHK03MjkYq2nXf4Jz;*$b~o5&qLvP%#~_!q`*TSkAwTT;@tX zrC0?#rGiK-SzA{F5hO^!ZTFv-F+tf5()Cp*PnMcTrS*vR{wGH-xoE;i@3k&nP^nc^ zCUIT&&EP68NDs2$uO$SXC7(d%(4=5a_X3R1rm6CX^tn)s6GA-9k`J=f>2T z;qXA<15h(PQre+4Of)K5?BOni962?4x|jxeX*aCI@~ z_r3Z2kPQkhXo@nIAs^sk(M_gPk~zLFrca2wzDgoEt_DRLQi!2o61Yf7Qp5^*d+*6% z?y#kcYZN8PLrX$E4BezjOAduO#xBuX?zr4BZqA54u`lX>!$M+b} z;+lklhd8QG>X(ZR_36B2JLMANk~5aBYJ~ZBeg^H4Qb~NXHS1dC3)W4c2Kem#qiZgl z&aD7xaOhZj<%AZ1z^?C3mP?_e3Ufjurc2IrO>t~riN@SQwl)(Tu>y>>>PnSMieZSk z=S!{V1hpw$NFX5)e&Bd49#w`tq7vdeB_Bqb;=z!sR_cCHZw&Qn!)ZfQ5zGOSKs^b7 z6WW%VZjfFvQCl-&Y4r^`21g-7%^f`%iK?I?=48D{MI1_rrx@gVBcR$*4YS6zWB>l$BVTUpUpBXT(&!2; zg&{>}T{IRj#1(jS&wvt-?c3TenV2=Be$Mn-FC*NX^pnBdFEzRj52#R(X*k#*+rmi*4Y6O83+Ifsgx+c+OCnL#dkZ$lwSzJCA zO32H30Tra8z#4J5Ry}1*ydf5wKGTg?L~FGGHT52AbB9YtO`TRrFjUOidSX_NtltRS zfsVIcTXOIHr(JWt?McoNRg6?RHSgz-OsI>Fz5A!Rg5CG(E2sJ_MT4P0M-FuCJ2ueX z-XkoFKqMjIOr1ZyiUI7q@Ud4~e|p0b9x&BVEmt}=AsC0;hN>EpDB||l>-+A1VqakM zH$J)|6@!^L{p&a7M{b=0Lmqg{v4UvKpoqAka6Es+2@@tE3^2F&{x=7GPMcENk8hcV z&N^>)^O%b94N4>mJBF<6kq%xe@834?;RpMV?`)eexhkI2XD%IY4VL!p?cIB{uyke& zQv!WEZ~3}G`-`A5iIZlCkpd+evO^Q##ZG-%G#6&UnL?DgHRz`zivZD zLNO97WWMbsBca#dJ=~Xd%Yh7tFG-PWB(QB8=maG&8*H*^fg|56A!r)>I-kbYr(xg|MYi%Etai!e*W{xKf3AIQ;*FY z9UXJSO$%oy_U`F$3Vu^_?d%CvMHjhcJ6;_}z9T3sjO0*TY#2-C+187n z9*t?XihP126!M3kJD@1hvz9m74FCR>&dyJ_6)iEGx6_mjwD&1_@Y^rRyBqT9tB%Sd4`@=+KMvnC7m3U=Tagh;YIHURn$Z~!F z^@>U>k*33Wo=I0kWqHKYGf6ES#V~@1<%Us2RIiw&YCGyLs|s z|2=%)^>gq4$F|?zFhx_ncQ)qNEw3V&go0w=W2~dFELG(<|7rcz4U>NH^g$IN1iVNr z>PzCgAps&3A{NoEx@6`vuk2kkw`p8++6_@v0{r)#6YExw0stW4*ntn4r&fksce4Ql za^uHGo9Z$@xMZ$bS2bxy6++;g^TvL*$FfW67h49h{kat@CkmJ-hd5hiT*@I&L=~?( z3UZ->eWyAuC_}E}1tDaTNJtQqen`9^49fYU6}SO+%N!#pq?95o`(jk1E+t9EO`IN8 zBxxp@m+f|)0by1|CyZj{o&+z7k#=XeKr36~<3`8p>RE3`srzvMU?M15+#ZS7kI_gT zN8%ESkQ3jWruwK^t10j_`s-Y?eJgzudb$Q?cA#2f&4&650ZY!kO;%3 z390J(O3!AR3Jo*)>Zhj=rUy?Je*DAvjukXj>V)zTMpsTXp+FL<55I8e*ROVP30X@6+X-D~;j#%`Jp-X#v<6FGeBCj5e!W}bXUt4~zNPi_c} zF~%rqg0PT_r_55nUFgrdu9IZP;w%fSawMU;GKr-y(v_Yt%!=A*W%cN>qX+iwf;5>M z%B#&&l-jv*?>JRWO$DJ-0D1)%2qUSA0S#Hc=N2rcCMzj|N#vgY=5=POqPkithky7_tBQpJg+}S&z54;OI0HmAQq?s# zUoxv)28R!J_w-2!MSG6@=iN@EQZ*DxM;;vOmVW4ewtiR$7ZX5C!X#ZdqXyt;v@-JL z_XDFU(XNvNOBd7uiO*P6?QvRN9Sgi74a*LsVI0uvo%kuC@5h*CZghhy$ ze*SDAM92wJGzY4*dNi|LEn@cd=S$^$Y*eG5CUCjqfT59q2~DMr$am*EJEerqNI#jr z-0In%sZw(rUp1&7I<7)JT9cu;fRUgSA`tKZ1U_fJ?}tJPBm$S&C9bIRA9xs(aLjeL z&bjk$%kkg;{LrE~m0T)UUOY2ZZTexjbyp`sBy{`(2L_UrvAeFA^vRaK>WD~3z+c`t zB#|coXG~EQ;bY^xl}%0%K6%H?pFMkAAmDhi_2kI^y>KLC(u_olu5W5&-slJc;HDc^ zUwzU1K;Rp%nRES(=e(A#BZ=bDAnBGSX{T zk7BT~qCOsN$mBb^?ct#-ubEURL*aUxw{`75nBRK1bfTj?GVCgbQgAo|RF#$jAcH*M zD4j$ViX)}M0vQ0<*B^#NPt;eY;zqITL`|BcWzEe4qHq8e35cO{$+G$Th37?tg8=^Z52ru!!hvX%*q(?*=(FEB zWkGz`7FfnA;-SFX+bj>t$N%%4?MTZD|Mu*zCm!GQ^h@78|H`h|)_##sMT)KKSHG3A~G!R&U&wzvr5%JGY&jF|C3Fl}|q#ANcI&Pi%SWftAisuZ&a{ z`#ZlofzMrDNs#jJOZ$Jgtm1`lOJ!f)b4KFD?|n~lRmVZ89D1T6lbkni(&X`=JnTRD z^3J;Y#=)WCOl8WkidX+&Mk*PXvV_#o7LX_g-nFM^>eLEC;rH7+7cCuAnbNa^xv*qq z>SF--2+H@~-2K8!`!;TD&-D#8R>oWEa5kW!poC%{k`Ttsgr2wkM9e4_eJ1sihX|z+ zQIMYP7xGa4ezwQz8InBxwu%N=jCTMy|}NXI5X5CMY0PK22hvTOxFi74qN7#}B? zFL?Oc9k+Y1V#QszAp(`<7vgOnV$Iyw<{UUO45i$@=_FwC(c30>*fOSyapNlQeCoi| zxnrnVz5YPy`G+3+)zka_c-JB^|2*Za+hVKEufF^zyE_U}fJa_902r#StwI>abolt^ zBN+OuY?Vj6d+#_?HNjA!@a9L`9)EsEtVWwOVQf!d-_P%ydCTR^ciucNl_XpgA(jY9 z7INsiip1ob&Allk&NzK+A_G()Nl+wa1_+N!4nc6q#p4oD4KuKPcRv80<&t!S4itRX zDkiYdWe$dH(x?OuT~!f;xPW_cm5m!iB2k6L41nZ;@4L$u)Z#P`Q_wCM#K*~MtIQIL zGmvF1jY>@9`c9n!L>)ZQVU6?*6~YQbjG9+#_{ES{sj!Uwa=H8X$f+bzgf6n(qM_YEG8m|BV+agzr9j z!=%a!Z~D~_r#$igU;g-Zn+l|5`)Pv|T&yaDlHgBItamIxpsb0)A6<9a-~X}ol5?7V zcJuQ0J{cB(y!G}mfEXlZe#l29p+bT)dN6l-^=V5o^Ox1@QG#H6+MKFbUDe@T$C>39 z2a1LEzSrMs{lUc(m#k>4sZIs~Jkg$&q1{p&r3&>SLYfvb-qC55T+b;xOK!Tr^F`K@ z`%XeTqyT_LS1pYvwfwLHpi&wb>dOf&qS=8=RYXh(6a|^lq-w@S`b&w3k?rVgS$q1_ z6%&U>ih*yY8d9oWhN?_0Tp5|NFi~3%5-GDbh06V?VJ4{<4G}Ta0SS;wfSb*-FjVYg zo?Y~VfMNQN+kV10Rinv(g>!DbdrNmA6QRW^7YP6Z#~D`}Vc75{&WSENgDyBL7viJG z%VhrAKR)mx^R4=%_NP1M7kf?u0Guyh`0dko(r8>c{l@%YR#|pYPiudFF$i=mN<$7j z0J%c&aNbi;U`FG2+;YZE*Dd?oQ(tHlKK$55)kGJb-|+ZL$1c5aG89AtmaH(4V3c4K zaIWye=3PZQm;3(PZiGT)B>Zx=CZiJ#f4QOeqi;tpyKKs?EnT~J^|f{lXOd8*&~}3U zoDHE`$dx@i00jGiPzY5G<;$l&0wBa1K|BaN?%Ce@=e{Uptyq%x_F2h@8_yVy4TuoQ zy6QoYNXF^0LtT!GM%OAK3@6Q-4FGUtMY4J{;L6?&$E|Y0%JJfmfcdN$<&lWu=kv(a z`AARDb1KZ1LK#<}S8VS#BdVqw!fa3=&{Q3(>AU~&kTpEuTIedX1U|2eAp z``bpy*4M@AizV}n6W>BDDYk$3=wtV78L23C^r2{mP<-kAchMCWX_cc%IBc3x#faQ= z-cLDYZtuh8`hB>a5XvyX7g8Yvo8Y0vkS`Z2(=NyMZ&laPnyp`aYtBmL#!EGT!| zgM)-pA|=tatxx_{-Tz+r^|NIEm(#Ai6|cT5Vq_HT(fQ}!f6X5m7yawsx^hM#F>d_B zk6jO-URfXQIow7ux@gTKcmCrrCh7|xJ$Bc*_e2vJyX=f`^U0gXeERk#Yq(_Fj1b}n z;OYNvFi7~okI#7QU)zes;-gRQXl^!zltGwFq%cgP|nl%NUYy*mPFhCrLcvXCOD6EJ| zjF3xpEuG|cP&uKcbnGB*n21#$X(|8!=ZksYG#l%P)1ky`ya5j?h?+JwEB*X{T0Mp5 z+kl$JgaO5bfJvxeRkcp+iHx5o0@p}HOF0KH59%pZGsO3=2}s3^wbCnxrmB4VaK(MgjlsY2TN1Ql%EMH5G?z|>Kr z5xPvcUeJ{ffae($Bdmj%KI8O>hdMamHin?}lg-=SJP?$M$KU#F>Z(bnEw2Co2p*bo z&B!DZH8p~vXoTnu)gkob29ZTe4+oC!KBZJPVBew=5tqrb7MPXMF;kRckB_R$IfJGF zHEka1VJM)7S)rXrTaa#s!(D+@0$6kWh?5KShKV5)$nN$X<_vTK5=GK;O9i_6CbIY< z;1zX4k=_0N=+%0*r5+Uy!Glw08nzC=Jj-O8Q6tEB*`bw z|EJJDLIrDrZ#;zKF;=6;p zcJ}nO+XnI((T1}HBaF+@xPp+tz<#h^S=3N7iE z3SQ>{O2y#eo6l{l5K=G2Fe)I{prDMG9k%L@wO>8)84infwu}+| z=&>&mxR zSu8nShXlaV>NT62tiCR;)_Qr@REIPj4|VpJix5d{Dsxq$E8dZ`TkFz{kJ4nn#3 zym>6Nksk`?P>p(d&nkr#qpIF|V|P56ZH%~>%&S;uz1xwB=-LNRp8jH!Ef_NOZJl1-$W17f|}Gzv)ayN&I!y40&L?SmmD%scbU#=u9e8xCYaGO8#FZfr;g zK34%mSeHJw1OKa+b_G6?Fqk`yilI}3d%B7t?bxxkBs5p6H{!Ifv+P=BT2YS(!hX4A zSutIS$MuMTMCfs^OpJsml^hpXxe@?CIyq$b+c_HvdALjU(rLi{TTM@Lw;WPgtd?PB*(qBd=D66+VtVpb{^z@{(t{-tziCi{l}L*Kmhu`$F41w+^$W#vSnb~ z?ms^Hjmvn+c5k|7?xRm`e)iux08t))djEgkK1iW6Wok4i2<}-(H7Nl=sz3ycp};R< z=7k`JfTD&_b?t)7u~c=Fh||xVECa|w_2jlAt1e%LnRoHUQ!cu8q7T$JUq2R0nX#lk zdX!OcF%xv8#8fOo=6fNR*wqvzaCsuamoAU1wG$5<&K*8(t-JfQGE3$)F(V zafXS^q)HWx1;6wBM{mDwDOI(nU)py6oy)GhaOyM9e17L$i+*_7EC%&|y|5EfN{JAR zdyep2&R_t5z?At2s=`O1UuK>limo8+dt%Y*3F|*P`t|2WkO9ZesfAu)|Mp&@Ajn~% z6fhvOxjcm2DLJ9<2@zzHloBA2A_3Ax2mykEt+;aemTlh7FAgm^f9A9~Ef^~c&um$6 z?t)y=(vs zC-ooPQ9N?o@9Q?1RUUT!_WGl#Su27tAW_A2{TJRlDwsTT^+MkVe|vtz9k-t$+yJPE zdEmxtW+9bvh%jebETU=%N|noyO9cTcr3c@?VV%cCTvx4tFJ4ryL`|TXJzEZ(9O9>~ zZ8^ESTZXO&D2CufS9#56Dlf}dDoEl(UTjcZ*AG=R#nB0{%`BFxwV=SB*%@euZc{lF3nm5qTz@Ui3g=T z6eYgk!7_=0}u^AmyTzje2^?b>e&7?VaS%#U3DgWvIN_ej<~ zXIYhGh1#h#Zrh>I_loU<%yXR}rdBn2uC1al47jeTj7vq23Mqpi^leK>=sKk{e|F~= zPdxSA)BpM4cYpVzz_*=OUjO{wa~`xf3$3nUok{#2{9r@BsjfNfCNT2h8S(A=OZneaD^9@mc6Yz{gHcrfMtw zLe?17s6^zx?~dpOY;7-BM#H&tYI0>cQuH9_isD0|YDoBkvOs+K!4b*b02yA0Uw-0L zqFLR3(DZ0!U%pg3-RRF&6r4cUjlsMNogxRke*9P-iHBGN00en28CS|4QtRsXpOT8I z@7!xC&0`V`RlR*D_I2=BMO}NZ{mEx-fy3&?OwMOTys&%FQ~&Z}`--JAo_S-Bi%Wn0 z)tjJ{-*e1=_Ngn)sw&yvqg1CoABuribIfEuQlK#qt4N!QA9$`JZ6}wLfFF75DNM+h z|NZZCzx#J?=LXG)n?w75{iDai0ANIy-+bZe*IYDZ}(1`Nai-sxk}#Ku`*asLv@S5D3i+i9#ZrON21O7*d2d zL6C73c%jeIR6td3{kB&Eym@oZ9qLUsG$QHx1LXr9&Vi$)?p)Y92$&W60Uy&4Er%$k zDQZ+H+DJ!%g5Y_#Ezgz`XPg^9|0ioI;`HDD=p8$uHV$&<-F2RmlhOK?Xgq2c%ISEb zVnWk!-w0rCWds2LKsZdH`1Fv9fRyFp*IV0LJ4(rTB;Pvp?KkZx7VGUl(SCSuB!Z%m z^z@1o$M)@dV_PKaWUg5^WlT$|P$cPy@!f~pG()-Pm!Hp`lzH^gZ#^%7EFVc22&ukS zBkZzPlUCz#Kfn_B3IyM;KmN@}N6d)PeC8GYVBcw1Uv=7w>Z&EHykp-C_YVC2rH7pE z!w>*D)LZBtzV8RWLqxvw%~5wGXW*P?J3qPOnPfbPF}U&KMF;jC5uCx0vHXbiEudjV zhlEltd=>f{<^TYyMRXkcp^sJQg$P1b0EKX_QPp?3q7&9!_^pIiCAZ-*;Y&KM4YvSI43P+FQWPfn^&Z~p#M5C)%~ zb<;e1#F5si=-E|0M>Z&VFw|vFZ5jExJ7$2P*1fsf%A}$&jJcODA%g@;;;d=@+dB(W zYb)=)v~gFLF|ipTj&~@oww9LJ^%W6aOI5P>%F;IGpgp!fq*HG{QZLmeth@K}4~VAPM-%WB;T`j+t+piOQe-dc!})PH-K#yBDsB#h!ltO-xusH!r(z!SIn2 zMN4AchyZWU4<*oQN5${CYt@r4ZoTdL`7|97AqIiXA>v#KVH9B%%5um6@f`^uf-Gbj zgaS(!aT|Vc^Vt~DKrq1g!bP>~zwKXh?l`Z1c-Owdva_cM$Ru+mhyk~7Xy4G0Q}(6T zPW$@(!<1quxe#z@#IC4Ggl>>fxhE)wLNZq1N>Xvo{?Y8O|9#XKFkf=lT)EIXaM-3* zqi1J&`W?Gp3t66Mu^muAvi0t&yQSFl@(C6{gqq$q{<&=t+vyh_35K z$+2MGwjTb)jRv-vkRR-$N5B2x*N>j{=G&*{k3!XR=Y`pTrln-`nSX4&{?^5Yjsp)d zLO|$Nr+gQtDUv=^A%HUUF|;ma&o23`7q}1n^t4AF{YoJ~qwvn3TqqeN zAmk!|6oWt@8A?@U9);8k{g7&@Feqc715{!mrbzf4B7rpw0c1cm(vn7_I`7@ys@7C3 zJA0H2*vW0(<8DL zK{dQ{+u;do7U2A`C!hT~k|| z8U_UbfRG^s7$FpLML_|gk~5$-CPZ2(ZQk5bwq%d3I9&rfK07H09Y42*JB2r1JT960 z$%lul6L9xor#gvQ=%!=PpeTZHOrba|Aw@L^h(&Y+!0dGupT4#&6!@|`S4JzUOQoJG zes|m8uzKM8yu$6l?(&eG=&3KU3*Xkv*!OMKb4L4t<<=b%p=nefJcHqV|EK~zGsCKTe~CywBRs!#<2oJqxh{NNQEH|_oFTYvoZ z)sKGh$$@`9`(?wpm{XJpQ>dB0|N9n!6fbXU8UuhMBme-ABPXy8CLMxP6EUsb+as@wTKnejzL{S0rgQ6uax_kDv4~AN5%CRX+_HWqR)7Do# zes;O<7uO%X{fwF+ui|i9ZuGchPk*pgznK4Y!_tYUh#6j0v$+3bk&y zNzqiS_>Z@TpZWdrS6|t6a**Y1tP-YD_{cN&09`%u^-k(rk*XMx0hd$&%9!_;zwf#8 z%F)T1i0cZ3F%SVzV+1NZ%wmK90DeFr2nEtW;6NGp(m+T`SuTbWw=`GuZ9h>RgUeSo zw{G0ix}|&b$GdlYeas!~n>$`Rv8Nk&CCNqOxLVh7nroEB^C|#@rhz5r0L!X4Wh{(D z(fPN}5E#ZPE4)H}%Gl(n+C*q0D1&21i?O6XeMaW&b+I(;s~%MYq&m>k$I4dwfqh1- zqB`y0dBM10%Y5~VJxgb%KKSIoS+kVazp)M+=~%O%rMt)0&1xi^zTTd`j*aurJ7-!; z_3s{dcirj*_Q23vZx3{Ksf3B8XD&SNyqZ;ul`!z{|M9Rke_tx8cuesyOX*JgB3s$`R@%|S+Dx9~l;+}^$ z9_{n5zUmAZ764p8qrV~Gl7suMdhGry9)0fd_n&)ZOL?for2NZsJM8`eipekUnv!!Q zXGo745EH8FFbD#t1cVBp&LJU+Dv(A%2%#z=GBk#ert^3@9#IaoJ6)EV3lxEA%ZeGv ziX@k4!RoO>)ps1uH8rO=rEh=SVWhP&%~99mJND-X`^z3ezQ^J!>Kn8mB2nmXdA$`& z5fnzweduN$x~Z9UN4`0lYRIVRM&If`xo-d{&A?0(COTvbN=+cT(K2RKWm;GzAGtwS z&RRHg+`F3wjaam`-5nV?g*?04Nk$Xk?e)9cy9QFpDoWyg{oNPcb>8%OvlgyxPNc-* z+4_fj*oMv7cmMldrPE&F_7OGq*GJD&RG2UFYEq0>BgWyt0QsUT9T7kOioZVc za&ycX*HkyM_r$deO{J;j#ecr_r$28DN3t`g&I%ZF8UMrm%N-9@H-{LYq8%(-F)@|W zE;wiQS?4SwYGP!h=;h^4Zk`dViDM8zf?CE`2u!%|6T$@pP$R021<*K9q>!As00mqC z1_B`?fsc?vuquHNa(V;c68NsQ{>u)pU?*E@<}a+5YL%K$u%t#!@|~9tPMeVaZ+r5sL)=Jz(xFvn%-zS@LROBO>c(Svq8PPxHQTm* zF=@_93cZ4{X|x@@_ra@sl!>QKjmSEE#_}nRwWEK2{|~ObZQY^0 z9gEIeo{VaHTkT)`X)|}r5B~TQqA3QA)l^p{;+fCC*gthvYVGotnx@on&K>Eto_eFT zy{%|DFrV`f_5p;RCpc4tV}+hau!CSALJlQEf-|3Ks#J7FsDNMHds!F=2)GaMqNSrZ zeSL(5QgE^6!U>?lOjpmiW%Bknjy0XNy0ByS{^Qv(X+bk%MvC0@x`#a+SCr}Jv}}C0^FTS7 z0fpAi@`cNjyABunia1*?#v`P)F zWnzYehHBy+o4yz`d%5uC`cJmh+o!%8QX5RCy{O-P<@kTSeXMubzxdMAXD>(zU_W%v z``j%Pta79iQe)Z8Q+lNc%)(n@W%?LI$U>LsZChHPb$?_30qquQQW@N~ieAcS!jEj9I zW5T|I9LbgID@;pCOSS?2TQq3%uthY3|z+C;q6BwgD0vglaX}2y6ECl zr*iXFpSF1Z)Sv%;YocP}!*|Vp|E-UIb>GWf9VX!6Blj=mSWzgGoGUmC39-vARAbmQ zzWMIZ73VigtYbw4C8$MYXImaYApHTBIa_*GfABy2NMaoP)H!Tt15^GW%%}u z7eER@z%f-A#q(#??%vjkg=Y&Qe5WC!x3pBg^G)C7SB(Mze*LXeL~=w>Ra`B&kPyZ^ zml_5IVJxaql|qiQ`J$oe1uv{ma4nWe)u(&g9M>r(bfw@1gd!_CH|ZS%GC1DtjUJV* zP%V|{54^Nj*JG(flu}wdYHH`vy^Sps=S>d&@WlG&y81$~>;)14Fn8IaD_4bgJ^Xzp z8Tak{($lBeWc(SUd+6kOR$ng#-hf+EP5RO#7}V>kfR&@^#;Ry<-#|#>4N)Npbr0=L zEm#`b9w6x6AO7j_7w>=RH&0&siyK-`4*ltOZ-s%M8avtQ>oiqy#Vt3!{LdGB##JDV zcw{7RC3TfE2P>-Uii>pAY(C-vuSMt1p$voSP<$%<-k;9Mnp2- z1ptI$xcsKI7oGFmPcEPF_SYTpmN|R3es{r{Gq-F%x@_i{Fy1^g;_0QW$Fp$&2=fb` z!xSyDWaX%@KG_#aUR6Ey(23nMCXSCLs#c#d@!{V*`|NYqh9Gg^sJ$>Vk|zof!51fL z&Y90+rQC=YR;f&>Zi18oUSc3gm_y?6&?)laei1nO#CbcPd$H-fi`4f0=G;Zczuz~M z3nLAq>*IyL|M{cIqf*yHnFL3HZW>I2)4I0Kef@+lM-T{h*Fm-n~t?mV%xEfR@CP3a%VLC!1V zSTLeureta>T(=Tkb8f6_ zAa~=6Dn=_M5aX@ALpk3&bey}v`HKh>K&h$_(X{W1a(jC?(s!!IMP7;dg&?2r&6aU> z6K$Bm9D8si`?I^AiA2%c;dIeezUqdda$i<&z&nz_V#2n5eNv0 z3J7R!tie8y#qs=kV`M-P6Q6w5rmNW0RRDQcPfjI9q7r2)lBTMPP?Q`Xq*qlLOIK9q zt)S!)OjuwQQW4}a+?Qpgf(>ARK*&5d5Y&WHg~B;-vOi&BM9LN8M|%wH*xi+xGJy-= zkL0eqcJ|Jb76Sat)9Wg9Z~FM^k{!ANWy_qQSiYl25)3iv8z^H;^4UVEYVP1jsc{Z8 zt5eT?VL!Q9{`IXR|N7_%;1LGAzkM`l80M<6%8g57BR##LRa&y{%G%LYyT0ELF(V)- z7IUS#Q4=5h+g-XI?;R<<@hSi9pSNgrjW_+`<6337WyzA_!EceOfJw91U~4pjV?YI% zhS^+C&fomP>sl&3jHwL7=*AjqFq9sRlyJk?@7TUvlV;x9<7BD{i~> zztgU|)*-QfK6BIFVeVnHG9_cyFDc^C) z=smd!=UqCf*nQL;>^$twUO29BsFlxeV9!7QY0K(s<}Zk=hOT$)?sV1BmC^39laXAH zsQ@TS!_>zdk$C4vAcGkdHn@@zutWD?LX)rw7W;h|6Y8v zZ2PxdHU|Lk>G~6)8`joW96R2lC^A=Mw_G(pmXws>=UzT>@p)rn>11(mAeD)60Rd1s z4-f&IxddxYzzIM$(304OIzNW-Xbw z=$xfeu)VwcLXccLvG~$6@25|@f$w{}r#E-UPp;_PvaMEn=`s{?~%^x`lcUTb=pwYdh4~Xykhyni&nh( z{`aN^9S;NHNkp!@V#TX3eO2b-!Fx|*06;;Yq9SewEQHtyJzGUg0!({PRPyn!rxGxC?0F^Co-o$unY%>KOLa3ZYdWFtW z@b2sTF1l*r_n#cAOv%1HuuFC_MtH1Vw+DR&1J|Mo_P8{Oh$Rv(6K`!E{_Bq?9^2h* zhlE5kfBxUehc0b?bAN12eb*kbxY^zH#o+>H9H@Fq7n5od0D#Z79j00eYhmc3Og!`B z-<<#JpS++)l0m-jg3~9?y7Hn=fB)xwefYN9FMs~U?|%CGi+eu(pkeV8KU>t0{?+?m zowj_A5>G$=#Jg9ntUuJ@P90^W=PXn+6`10!uf0F_%y~3f8X zc_yL!==wRtj4_W<4F^I(*X|!;)s+&dx)+3|5^-DyC^~?lCS=Z~5C-X}Z~{Cq;KY+^ zT$3dSQw0_|MU)^3P-(cJsga9Z?0Xia3O|a*MQ?%j1c(t2Z#Uh^!JH4F1f*D&+q^BZ$F2E{r1nF0=o>5 ztZOiQX>uM=f?Q##T1bQiBz2kZc}`s8UZ67HtFASDANA%)$yGE3>&%1i-gH6lu+>ZaYR#O9q3;5$Zu#<1#}K^qss*3FwSD3!(3MAupj|`O z@g8sWtR%u=(~{HTL2mQsJFDXIql4jviz?s!Zs36j&-~l#PU-N+H=I5Cm3!$O+K~n z*oI@?sG8VCmoMD5rDOlTHKuQ%LIMJ|YNym1RhAg^3S5VdhsifxEu4Y7BmmwrV454LNilSu$aN4pu z9lBgnE`n7TPdwS@ckgRMu>{6)>6w$`gnjqvE<+D%$JB?8Z~InbMp-#c50M~(v~K$L z(B9rftEUHA-KZ3NX=`}z^>d&6SI=#$dWJnUS((-n6}vZWDU1xZZGG?9pko+x=b?kl zCChHOyRoUMvbrUbG-8Us`pk=vlmKY|eC+@R-mO<9hmm7}CDGl{ar%#lSIVXFauMY=%zdg9S3jzQ#mFX9r zU*FtRg+NFt*|_mQxloYI_kECvz;?d`Z-0SjTkAonR%F)sy0 zfhfb6_XWBy$#BsjP(UGS8*s@AZC@gvi&TP20eZWKRS3V{*t7V8*>2J1lCu!aUo)|0 zT5XWC000}_J8Ds^R+k395gAjtsNt2eX+4KE(Ygesv%EMnj^QTiMju{bh^VLgS zF3(*C5sLo#iS3X4blTl(o7|4_4L42w*K_aj5*nYulN)P4_|vPY+W2YB{m0&X6AM({ zcKGoZADTF}<>!C@F=2KoHxzHIRI8={S6C%h%H_*SW7ApZj9Ig^t~tHyyUm~d<%Q}+ zHr?4!1d{dP-MbG_^dOubVkl27?kstbsg~n%O`^;D7SY zvC61gnW6hmS`BGxdm@q0C5M4$&AI4|LmzE==a|`;AOHaB^jv<+8Caut-~Ua)u_iBA zHgsUe_!-Mjp4^vC*W`QJ21@1mD_01Pk8k^G(dtWaM%(oEtGcdDYcbbv8>~xL-gaZt zYafi{hWZw-n#!EQ+Ox*o_p@()aqfiJndkR?@MitF7nQ&L^vfNs7hZL4Fok8)wPs_Lx=W`z2a)OSo-4eS5LccH2~oI_x3J5W71c=Up+q zFYnhh#YWXe^=K*)i)AK_?dLN*q3u5r*0 z!b`5mbMoll?!E2Si=ydx@2Qi~2r{(jgOA!d8eDxM9o83c$j7ODd`|k+=a8N#$s(m(2?| zWTk-g4pP+HUo4j$PpA&p&i%pE4?gJJ_|E=U{=4sByOXL{cy+Q&u)40*&PsxLXH9@ zAp)*Pf$Nn6&tZ-e08Dj*LYTEg-qDDmBT2SwDu+UL99$lj$=~tC&8q%PQGW z(e@q*J5C(^ENC{*ih-tsLb@f2j zJ?Fe@$FV2Lpz8X7KpI&fyr*N1X8mWm}bDEv${9XnZ_w3=o^M{IhpAEtyz%dT8-f=fcJCGqcxva!ux)X0w9C2n_8+jux$xlk9wdqB3A;sQk#PJ25UKUM$t`{Vc?zc@o4-3ebz%dh=3sBzcgM;_4=tOZeZI%e zyX6U$M#GFnyS8jbhVs+ksEDM(oi)e|z6uixi1G zE`1>lqDx^10nl_LxF8T&BI-CL0Klw;spGqHhM{2Q)=y0x+T%`}Z3rp1d{dhG7}jt*hz)$KV@+l)>PG8asA}y{<YgLdyZy%`cAZVL}L1Fw_f)5Kfh4UXB`eI zV`>mEsK$LOhmn}Ha_#}0C$))EB z42Iu--Dn;y0Q6cl1hBHx$~SKOhSe!ktZ46zrN3^nf=}Odlsyms~-E@ zC)Gp@ytfxati()u+9Wd{oph|L+;?o3?|YCMEX+=rJfZz$Y0i>4yEcCh06?M`uWLdh z-9484!J3uPoBEw!bQ)&x95&^i4(`1kM`S--?w1T z_Jg17%RO@6S>JCuG__WB1254yUTIFEz~8;M|I=?yJb3R}fR(w&3MWq~(Hb6Rh3_K{ z_qP`oU3=kon~L-FlLMu~wA+4q*M&cM=#HgNzqqZG&#STcs)<@dO)@%f*@F+fsxarC zhcABekw?6C;yEI07>M{Sp1G4-9-_fMKVf8Wlnix*C4?R5$ReF)%&s))<^&VfW4 z(P<6C|Juav{OPi1{Z?-m-X1ONaLcs@OHto_X2{Z3lL zLz^~KtyiLIl0&5+VM>XVvEx-$bp%ds`D$p< z>X@D9001+FxHKVhw{OZXI&(by-}UG0Xm_f0c){6C0Dw2%J0Sp!#*MNT#%~|r zTdBj6dD_%aQLWZf zv56BHfZS54T2>7+d*l=}6L#kjqaq1a)fvu4V@X)o05LBfI&2yVMx$=v?A~{B>FU|C z#AuBA#lR2UC*R!l^WXijJXrkmU*8#9qmB&OSN-TB000aJ;uWUwz2QOj<~!T3xqMbK z6X5^}#t=~gm$6W&hT1jgSHyvoy6=}vMHxFiwq--#tOcn<2g8{QYxi#HoITHkSjiQT zX-bMb7-^8uV4T9o&RP?Tz&=Y{b7s@O-|w0=F5cSjU4Qu`qH{nKZJW0@%%Ak(tGlXZ zo!7PP{ZyuMay`gqT`xLyptYkzX_=Mo?`%8yeP{fRm1>uVs>^QgeE9{cA?gfsEgoBSVQI&vKfbu_!CRIGeZ5b8dg|tLry!mW zYFeK8=T~dbUs1|Cl{H!w7%nL7GAb6Pt{2woDz5RzPJl~5(^?<=J z^c5po$QE^tFdj0AOjYv&$wLQ2F?VUg=ad3lsC8SvY+JO{;7Ad)hNwU?m*F@DA@ZTp z(Nk8D{QJN5AQUcH)?^}A3jXhB_Wt=V-!{yfD6`q~uUxTwTstMWt}e3kP_8rU!jZO_ zEcA*OG(1owRn8jHPVHa%~kwV|^LC=?Z2vfP!s zLMO7W7IKKUZE|*Q%mDzle{o{bVj^OrnK2F$EQ;;G&%rPhp-K`amLk#LpRZ|1g|2(* zVE3_ZS0aEZz3H4$kVzR$Sp&IbTEFPZ1%QzKd)lH3X&dSr5mU`Z1bz3lU9vJ>9?JD! zb6VYCRk{kabakFMvU`(VTL(a-X~x?8v9ET2Ra|q`orT>WC6no%VSDua>3@9kf0PKb z2VQa0x^u0*ww=44c=c37BRD9u)J0;Aqn>(a<8LpW)ZRZbuAxcQ(2?Ho{uhq?<;SZ9 z=Wg$@icF%^doX)AN{cRt$!P} zqmV+So~T;2vVlgqkC@}`-goHJZN+#@eP(?-@V&W{%vZneXsn1-H&#X>{^;rRfA_cb zx^B9z4FR4vHNANCTtw_3L>TGVD*(s}PQ=h0A+Zo1&D8GMK18LgpE|C3Tydx~TRDC* zXTic{9TEWuJS+i1JPd$pX1JF_Y8?J$?NUf%x=t-W7%5s&MHd2Oi*`bn!v&Cvfcqaf z-RkKY>dB9qF=@l+#}_WnD9I`Sz!x8P3&gD4h^~d-^;b65)wZ4JEplts*=KYf?#omg zZAbTvnLIa;M!miD%iVqm!WzBMH1Fbb*HvzL>D5xzqVLyl>Kw`?HF^E{EgLos-uCRT ze|hnbZ+qy*SD$=s?eghwe7g51s}qlXHn?(PzhZOoZJ|z8{e!( zV(!2oj_4R`q3=LNavaqW5SWH`4ncDCaBp)3Fvm^vP8<%k4Au-$EW=RWyVZp&mL>WOl{NmVEI|253N60v<0RRQ9OHYj2kJ5 zB2uav%KJ>mlyOfGSC~mnbIV!Ai6Z57SI>Fjje}RMG@Iv4*9<8_*>V(P&{-{H*N;S3}ICSp0i$LcWeTsBTwDVwFBvo0vU@1h{XUTn=-akx& zML)c$XWJ>0w;kL3A&OspqK~gxREalwFF$$7&mR8bKkv6PK-yk;>9&V%{KG>pJ^rV4 zyLz-oU%NQ}(vxZ|Ri6T9Eu6vyA{yNHkN=#$pg!M9a0)&^i6y5+zkToMlG9Uyg;0w~62nkn1SIrA9x$9h?x3VG zNfo3cyKf{f6de#UVd9vVU*4`T`<3-Wf)$>6Vsmk@T-S_c=*=8o*MI25lCxV5?C)u5 zh(?3%>S*cG=3GN?;Ec74$5fyXj(~G#Ra=}@jA?8=eB|?|pFFT_d-bGRp(&Q-9D3^m z5hz;a*jP>V$oDUueZjgXe*f>1!{2;ygX@P0m7F^#ot!@L+26l1w+TP|hYfWV#_z7a zU&BGXF7xhz!iMAJFyyT#+8UD*)5zDmdO~*?3ar;Pgia2LP-F+VsVI_9Sh*Zm)CKv1 zS3k)sYc})+x7EXX9op~3mK|WsM0%bT51M8RxxyKX?vV%#Bo77jwFU2 z4`$BdOIB5F-vxp%H--0f{jV!ytsn1WqT?Dd0YlB}A!S9itkAim(^X zuC_T6EPU|ZC6tmIf4B@%ENQG^_T5s=5iHsj#PAa1jo6c;CE%TuTFGr>iwJZ$20~ zRot`N&SgUx)UUntPw#e58yC;|;E^jQ{^md1eS~CpyTz5XVZHt0dK4BaQra(Xo^aLG zt7+931X#zhQxV1IzA%VaQfdiRA@VaRP%irr3rFZW6)Hq~w)y*Zd-GP92+=JYvec*w z%Yz|~smL8Ub`Z*dvXT@w!Y0Hq1c3l1DwJK@W0oCAXy&qBLP0;ge$hZzxm=(heRNn) z#|IA_b9#G#m-7R(>wt3k^>Zi1^FV?trk-jaG6x2_>YJNDJTyWYhbDe|zRm6N`~}RjF8d?z`c1%>4aj%|E|n(i!tASs=NQ005|& z3LL5MNBTu>gj*%I=+^hTNte80%q-Bs*3$2jo&7&$@mlDin zu3J+mr3^qdS4N6r0!fkJzUR)Ep&=rs&jedHh62(>=g;GS_MfsSFEY++s&xsV&@-5r zOs(O}5zr(GL5Wn7XiCIX`f`QFad9R@nc>RjxSpmLUOXKH#ri4L?|j-P0{hGNx3=&9 z_Pzh?SUMvLAb4eO4FF(jv~d37!7> z^FrR~+4%Lc(IdkJZ|hz@{gPGBetN30Dl&Ck?EQ_$yrFN-Sx`4FHQ}B=-FMB!3(aJ( z;gt{LQ6hS~QmOQ5V`5j#O&sYe{r#Q&uYS`lc$go~C1XI+s3CE>6f*QtnsH6TIAAspol>E! znTfsoIc9LfdN&@0*vJ6k@7>rrH0U#khfbc9@doJS5jBx4Kvs}A0WcKMfPYwbnjTGu zBf~u<&IPQE%0R$7?^*oe`zOv?H-|GzQ6+*{F#pBp_Fa9`ybs?x004+3(g*U%h(;Pv zryk3=rIACW8YTj-Jfy_xD(hSNdfH8sR5exa`s|CAY4h9Kd)(ZyvE%1L8m?P4>Gw~* zPeE|+Z7YBO_iry=ru(i6Iofn|*u%6jiibz6S)-%1Cjb1Hw`k6od?DX6==AiJ;)y5# z;8&N83j-dMM~s@$ve*kr498;|^IJfhNI%cBM zJn8nE{`}~*(^-E9scHDtGg~CpQZX%`EzBMlg$V9ET!vUyCY0{1Nb7LTswMy-plU;7 z1;$MH(6CQgnOSzpjvEYt&~YJFKyJv2CJbFe0f$V2Su1C3|MCa|;oNyTGwJ|itT;q6 z)c_DosNfty6iOXPAj2F`<3#${4hjH~#nY?Xx`tM+m|j;)y4u{H?vbATM@CO?L=Xvr z-hJi&OQ7q=x{8Ehz%z4Pu1jt_jkZbK)SWto8c?jbEba>|ys#{=%i=4*;w&y*yc9}l z3l-`vNzq`d^oHD8tcxwG5v&{)E>=#&9Z^t6V?TeliL$Zm_BfL+ zefZutUw&-Sqc87v^GceLj`ukXi>EgQ6cbZ4?e(auSJt<8gT}EkP&A9!4CUsX(`kPL zE~LFkhm7B{2*cBwrpgg7R&e!L4pETtmF!)=d*0(F4V6B? zx`4ORQdNL-3L?OA1kv!pnX^=fom%Be6-+H(5WVhOZkjyYqn0m~^2x5u*sJ$${5Cc?(lBG508O{IA{FbZ zZ>sxn-8ajYtnNLrIivDwc63aYJ6-V39ZT&wo3``0t1fI}YNn0u`SHw%mPjZR&0t6{ zjB(4xo%GH(nXqxCO z?R8`}lpJjx%7DuHF~qbGFp#^*ifS)^x9joyRzLCD&j`v6OAC}fqlC9;d*YlW-+uO! z#tM(!HQxsKm(3@-PY+*n@1-0`L&TV-Ay6ix#tM8X#Y(`)Ijmq6Y=`0*&ViPu+Q=a? zMcEK5iU#IgJRLfQgH4AH(IjizI!12bCH<@awxvcO?QuEgFYTIOd+qm z{q`XYh1`f{YL0DqvZE@X)C`cXy<>WnZ)E<0uz}@^*EABx8X1UPd_ncWK{#{5nD1Nc z(71^F7GRx1-D*3;C{&PFpYdNzQ1MoR9k0P z_YfqAlX%t@k_6gS9CA1h3YSpPQHXQFam9pYp;=%f6+sV=@=!E@L-~2y7&f8~ML+)f zP6#QC$Yh^3r6DZ%;lXZd-|zeU9_HceYO?83t^dsVvwU~_uNr)JN&HWQyG-Qm@Y2?s%n_YE*rXR43Qmk5DV!rZD%ROLjbWu z14<%*0#*iDfQjWS1W4~l-gH>6i0*!1mTenC$c-EWajGcr4)%e33OUS%%>#$FcV&Cq zKRZ^ovPr!D)=Li_>03G>98F?dGY@?Dwuk2O1ye~4&~_4f#FFx=WwVP-+sejML%ruN zo8tR)qkOt`=U`j!Gq*kELS{aLubmfWDLA9K(n_U1e6`)N^pl+<474)C+3C&YhQmf^ zv$q;8c#ZuTWrE@C54m4Coax1BnrWBA;u>D2I6|p!$#A4P_0S1;u zu*lr^@sU%#@xf@JY4zoQx?!$|RYPueS|yzUPV4EBgKe6Ka$W(CW|VKX79?bRzG={8 zOMsGi?cF`P>Bp2Nt8p9fBF;dHr#V71$Sa8!qIs5#q%4NEwtRh1!yL<~XZo1)FPnU1 zPaFc1)dnH$A{cOV0U#a{g>q~bXpRx1aSAX2#Myvga@xFdSQoDZd(H$$D(5Ea6mrkxNwUR!zD|zU*Tt?5h$BxDZu6+LaKq)(^!V4WV z_lCQT0+sDMTh&;3{A^-kW1XwCd`=zz_l^C_myZAUpXSY5R9|3x58iic!GMR)=2Ka9 z+p$bIL|0aMZAvaH^&`k&UOINF`_dV*%Og#wWLd_!WNN6y%iKKQryDjaaG|mywUC3* z0IUSD29$*DSQapoJzcrBqseTaXlPU*u%&fqC^7itjWZT4o>*E@`pBKH{&U@t6>}N^ z04z`9Is2|FW;m9~A!rb$sn&b8Yjo50{_?Sv4z1gI=I%Qdc;r#W!YVCG*n$#G4AnLu zfj}i3O;9{byLrhn^<|e%GAw55ywJRr%@ivZbi`45Ap;ys1r%*3yC`TPObEaj&<@38 zBqFB(@0hW;soLGwIhZD%i)OmMKahL!4-HD*Jk>dR{_3eLAr4DZ1aJ7UQ_U%tUt5cF zTLxgPT-HK# zi3=tQkP+B1rLJ^JO=k4lmX=5oC-dU>yV_SRnNA~OnTiky+WDN3jWL|Z;W-HfNr-;n znO|Ogs5yGFvvmIX1jE0)`s)){jQz`(ZGiKVY|N9VbsOTQSab5CFioA)shLYzg7C=FkkyKuAHeZh|K@kUksbfu$^1 zJ+<}MmV}B#o}RU=#sM^fv}4^!&!1TRY5r%Fb!2zWCf}#g|<-xpz3S`><)7q;Ya%=LqA=95G89U)hrO zxlKLM@AA4rQ&&buGNLy?3ykGx*}mQh2nf1I0f{MF}6bFT|)eKQ;6 zO41Tdc5@gLsF=)|mP|(<%@He;P>EwH4zH#XvsXRZ(Gl~%pwTxyNijsGB{oY+jCO2$2 zN+U{29i2C$JQtcE<%i}x^5BWM^xgaKTt1%d?Tj96JuO1xOCpbhQOg$|L;A9XF3v`EFcK2 zj4kl8000mX7Fa6ea*ij3uwd_RPbzuiKtHz4)cNCO7THbX>WtBNRb?@hMVmmzA4ZIr z?CUv_k}`C_0)enx}b7g6Se`xfow+o%lej|_I3l})YO&?=73*-^`%08icGI! zTDvodvXZ*eI3_UT!ttzT{QJ#AtJW@!>2^j}GqlIh8IM;MkS4H9sz7YZ6nQ$SNK+ai z!=O;u2LPBlD?sGH=C2Pp*xda2K4`>WfAnKZHz;C20tq2E-mnfZZVJ(WV&JvS3q%&u zM7v;m@wW#v^D5{ImW^|jFu!ezHdKflZHH?kJzY#iiORTnhw!idXZOmvlaSr{_6|J| zC>k6}XqIX@Tvd@DP~vbZ85YcjN%Mz$4v$@a^Y;I~Idk3n^Ux{1 zxY%>!t&0J)ac;!0*t}wkGSm&mp-?iJiG&4cgRbr*002;e&r5mT?98RLw&eg?I{a(L ztYsC1@mZRNINy`EzWTSf?;%KM3ImXJ*^Wur3Sh>aI)bGzSIz zf;&=NNXA?xLSZz!b1ymFovsOFE6S=4bf#8M#kF(hKK8=StYS}}HvZUw!=Z4nKcVmp zTT;XoSIzKM)rBV1e(=cstJba&OKbLj`a|Qanj`yLY8q#w_({2Zytiu1=I=i8I{BOm z0YX?;3K_$|EjT*GE+A?iJPFY-_)6?Q*Oa zC}27c29l7EWg{U^|8OP}l5G%uLE&sEly@HEp4H*J6o?c_nDBz2 z9B)a`v|Lu|$!MA^a`}|9{IYt)@`mA198VmJGBUT_{N2A^Sn3LiXSV%5ZpEti{<{9! zTPItTS1OG_%edqEPte#fC<}6Gby;U3JCj9{tsKPDXOr9}!G_FsXy@Vku!}HVUEW)NGGnSar$0P?k#V+&YDBUxta(Gt*H*t3<#`RexGN-go*B9N=0B|ee#iXTb)Bb<+mtZ<{EJ+bRqJ1PdG&2q z1;@@f^w~Q&H&QlhIS?3QG`fHLW?~pK<}EpPXvfvJT=?V1-)ROT@>DXd&72T8*OOHN zLs_a#u#2Y*!m|Pc4E^$%MSI#uSI?4GPduEQV%zStK@= zWw|1#oawV@$T-+LZG5h+@2USDdj6&B9)EVz>(8!!cau_|4 z7>e0rLTr76YMwovase%CmAj3Oek)k)0*)=xh{#@wa}14XJJvqFsVuEQMaKd%x?B6p zCpG5dv8!&IWojlMCe}>=?Dgw9GNaMkpI-ByCx5#4#ak#~sNE;O{=5xaR!g_07}mTA zAtX|uShRVLZm5v^qw1GG9DV)qDT|ksa5V8n=q($&0bq~=Su}JkH-6*Kow}A=b?qu4 z9GDSu)WlFA;+<8+I*|S9lP|E+pHHU<7dh{$KUhFM^UJ2HQX!Mfee?H6`g*$pW9R?= z(-%hkfKB;kFCBaLoonPsB;=D$Z2lF}a>1}Eh#8k_D5k2|;UE?zo?>}OBLIM78Vs_( z+#Llx|G~DwsrBJEHut9c`aKd?8uD?HAmJ`duxf($V96PAVqBtcAp) zVqa-ho!28K3Wi~mY|O|iS~%iAd$PwR(gHI2I|rlyU+gErNO0@M!B1cNb^ZEtoXg9( z16SR7-Yo%+C~?0jc#6Mr}kV--=1BJ(5 zd+^IWSsFr`qZ{h0YvwL(UUvSvm;QQc$A)l4>6!k~?o-EStz1zzsX4Elojm=5!PB&r zO>O!5_*?I9_<6&Z^A^rKH)7fvaWf#6gH}GD%oseyC>CT{SXU;oEa#UQiV-DQ(oG|p z1y|1wzP+i-w3*NLjC}U(J|qSbiM$GEQTCvc3c^Z=;&qB~M}mwbhGtEoMDHb&XfvIB z=dH`75`oB(UkEWPJGXSMLeRYJX3EAQ<#{`JFqC zMM6SZa6Z^X5?3$e1$TQ(8Omyt;V{OBOE*P;URF*UtLK zgI_?JQj*c{UitN-C)VkznjaW?=cVl|MFYn^Z<6Qwzg&I6d2qqf`S68hi;BjLKe*%I z_~{dO9qnx{=gtmlt8cw%QOU5W3O|0c_wd>56L(Gj=XddE?;m&X-*&zI?Bf4@)xP6o zf{=V(6KUEG1tj3G4lwho)6h_L=G36%6^L!+3Mv3#a&u$(yvuryY#%(+Hg49^V3A*m z4#zU-*46_{R$SJ$b-n23hmy+N3U(x8gln4)9`6Y8cGjSaL+o&WtT@Ev3Y6?+)QnYJ z5^NsBo#{&_Qf8eWH#e5~iYtEDbGjY{m$a`Au=GiT8( zl&4P;cI14UcWp!+gCykl&CbS%G zUwq+IlR$xUzWCp+rr4; z!2GFIcil4CCp+V{6A<#eOkZ`|k_Y~F}=!<5B7mr&a<835o3fS>>SY9LZ1xV?rl+I_OSVCDR> z6rrtPd3eDscO+9eQ%6Il&#=t>`%iMfvN5srZ2w?hcJYW|{9eYf@Wd)Ao5@sqX#l{K zvAzQ%4$GiaG`eO+(S$0Oqv|wGX=%lQNGq7Q=d4r`0D1;v$ar0ZSl$WMyrT>rYMC;B z(cAyn@X*tLc;>^u<%RIA&pv1~9LQ@=zxK!3NvaUwzizf4q(1xxfGM zf2(ghuVU65-Z3|Sy8rey;s5=6BZakJ4vgM)|AM`p$}ivd7)Az7J8u#&wOO+!){Y;0 z!9+G2v!8ruM!2?Ow0l%bWo)QvnL&Hhpg8pCm1Tx*ezI=!jSud;Zf5e=*7Vj5Uwb6) zxxQp+akzfUk}1=wY1)erv;UVbgSCxepRnqxTYLHy!$=29%SNL~nP$st-P<>BlRRwG z`PXPE^Xq^8YvLI3o+qyqtoVrGM!?DFa43=Y_&ntS#>3O`QLTSeTRoZWiX+p+&whE@ zQgt30)5--NB3>{Z3=PNvmN?G7@R&!cX? z=YnS*e$!EMZk)8$L~JPW&iX&U`pBEJ=8W0%`!Sd7efQnpHAUa>L;JMz8mmG~AncJ` zA|jCY29QB9l;QIb&gTu$-IY_uPMcYA;g!u}8p@Zfsw){=dDWdWc5WZ-*t+wHSFdE5 z{6I%%%i*Y36nlHMkjMgxd-d%LOX?$%qXCN9bU24Ne-U7XNTm-WX4{^gV@BmkWz2>h z=|R4NV!6cW;iG5bLJ7t3cD|&MlbGrv{`ET=Zus+-o9?`r6L>(`5OJ#IP#kDKaf(<9 z(RE)yKDu*f_vu61zWubgqPC{4X8Tv4&7D2H<@nK>Mt*F=q_&pUb4RyfQ<+jmS1q}J z&xc>%{MxfL?Z|FdbHw(`479B7QKLJq0zyj5{Ob=GsdS;pM@2mR<#UTSA4^x4crq5| zY&w_83XVx2Lu)ZFr&G!(TUNo8SD3L8+D==eBU)!WMuMGF0pK{VyFDtiF4yBvuW~Sc z1>K8Bg;^mDKoqr9r3}hUfF)dvN3u-zjBHUzk2qmkKX@95;_ z?pUMA^?Q<@iPL0ISkz3EbHjP6sH&EVk0xLIa9Gs~00 zYOE;sRL`L~B#FRhDCF)z+s8Apghv7pq!95ctukovAJN z76n*rVv6AqCiwCjE}j^||9^iP)A_)Yzb>p8g21`3Dy_PcaNZGrYX~Eb9v=JYqB^PB+%&|Obw>YBd20M z7R`wmJknM*1B3Cbo$Bt6Dq-Gmv$RW)&U9zpUYTWx5C}RBmsf48khP?M32DkK_@_6+ zOq%oZ_Gr{G9AM}KV>6=&GWYjaw_*Sbu}&y^-g>%)V`N*etyJ-_#fr{!;90#&!kJA!Z?qk1 z;qsL`c5V|bgBCqA&tIcN2M+Dq>n)Ztv8-5C;7@Mq+LJnS#`@* zN-9AtYX9cnrp}d*Z#zaIDOs>-m&?&}e!shr%DKX2x6XvG|C)e?_P}K|n_F^2L#caK z)gfB}0AOCWRdsMQ-%uApL^atk(o>LkW2|$&AT5dj*tUrf&pNsWY|C*FVksuzW(1mX zMF8ig92LnyOUvHA=E-0~0ZS9AC|9<0d6U$_Z^W2spM*XfYm32p*}XsR~fYFgR%D zDaar*Erf~zL#qP=wrVm#58_z}02D+-5pUCYQ&$1S(t%2+&`Th)3rPUk_r855b+(UX z;G3^(6CM1~$H$8+y!ExAS6b>m#3WbFCR})_Oh#*Z6!r0_P6bY zeLtRrVwmy~q z2rnHs=cc=sfAY>2b7}OpltX1 z8|L18K84i}U-&KP_ZUj9xRmRT(i{a`h;*xz&n=>>@4fQt_qHvX@80~=kpsVtCUc6- zeEt4Ad%t{h)0=NpmioG*N|3XWVW+Kyb6crSd)?*)0$8&C32=9(v=Z5kt&=X zGT;BDlL8t*UIs#zwpj`T(M=FbAZ-o};ezcX2Q5{x2>^~wfQ@81-QEEhi(m!N7Qp!V z7cQ|K;1mX%F1Z@$8M~nA8vEOp7PnonvEwgq#*kGkS0;yOVjHGqnx--`vha#27hgAZ z!ODiYO9BqgvJB+_zKR;80Pft;d-b2M+x^)QLafS4?w$Yp8WSWSFcQn!y52uvgS@6Q z-i)fbk>es7`uf$c*W7ny>HL*Fq2`(}f~Ire$Bhl>%z2R{Wt$EKf+ZrYTW--7|y)q ziva)#5bu!P%I(nm!G<>?)oJ)kQE^;*bE0~kFH>ZH3~bnp_%4L>yX(3L&?ty6ym;DYKcAy0`o$;S z!nUdAlMaEJh1@L8DufG%cmH%IKQwe?XV<>%Bg@y+Z~ne_<=P32i^dlc$%?rp-#qtu zS%}0>w;nyAG}XxaKH8}O+D#dX5K1QV09sTwCc9iRWkk~kTrp;v#EA_>$Z<#RzbxD# zH8;|IAAa9`%Zk$2x!w;qk39b9LdO9>F96vWJvCI)B;WZ|%OBRv8Ye~n@56S76$Flr z$FnYptEnFoDI2r@w@u@xHMO7Uv>oDddGmR#P*94>ii4$Nii^uP|M>0dn{VsbxjQy` zZtdOoW`?6QZT5AViL*aon(j}UMJ`SytW4P^hJRdD5=$!E+A+h-Q^UKhDOv;_5qYc=e<2pCj1l+WG?)0yeTHESP&_>u$>iZjo0o#tzZ)rk^!5 zB)B=GVTb5KRgHb*l-}SQ#U@uVxoX$%F|QgkOueGibKpeE?WP9eSdtl~U`4`S7U}&_ zJycwx71A6+c>pN~GZY6es-OMPbGL5&^w(9lUiRWcFJnOdeb@L8e;s}Jrg4CmA<_t@ zcb_!oRO3JXtJN(?1xuSTbpqB32Tt|bO2Os#XL4G=1x?d5Y#>rBD+(4xnfa`4SOIUK zanh`xw`^Q-#oF$J`)LjvI1s6*J-Y9^3ogEDG_FNEkFB_7?QqwYl9~(t_wKu4885o- z-W?ymB87ah!BGskhgO!pz9n(j5}z!JHZby8jborU;s-#cvE~39LdMbxNa6t$pphm3 zQIIwmkzoO}8DeD!VG)g)q7u7MKvuz~JwnqokdK;rmSP04Y6dIhZ9{ho0CIfGmft3= zxQGDIx^;a%Pb9xLle1(2LY7rC2~p%JND#3dhte#fIjjJ!d|sPT?+6uDa#1-^2N-Yp z$4`F0XrcRTOFWT7b(P}y)lC~eY}Iu$Yl#NNf=k9qHlNojLhgWzf;+!`|CPUdQX7Eh z-+t3n?)bO+@f8b0A8bnBw6y3PTh({!^vX%Lp4B;-iJuvg>Z_mncWW%3E)BaMT^)Y( z(*YJ31v*?L8pI|!tq=?q_4oICJbq18J${}G&oQINi%P3n+B%Bd?4lcP{Nclo5JzOd z$D)I!Rg=qWDn`%lO^%Ejkdt`8^E{%ZOmdXrd1$JOCWOK+%Ox=VQEgm9xl0nTZ9!yH zj+xV(cebnlcUgs|W+b-{VGAK_7$(QD4g`*2+LVAOj@T+9HeFRmvMI-5h~v1X%%nKk zA<&3-KxdS_dKsoh-R^FKck|5J@Q{-!j<=2^Y#n>edFEZy&XNTy|Oda---B46Loq# zoiu<_8&BDU7j|?Q1mYLJIpMI929BBEztEfIA4Ii5M*>|TqDM|9&JO|u+s^EL@U;Z3G1t@?M=A}pa`};{qu9z zJaW&boxM3mzUz+Z1kpTY<}qrRHjZ(yLkqGU|L*HfnxV7F{G8Q|M}KZTu<>a5#3pFw zyd}ku;WvMm>>kXDxX_b#6-jxB%^}OpDwz>gXFa}TDnT3sWj{;IEEbXBIFPk|dFzY+ z`^N*z@4xM#Kg^qS?b_<;^9Z2x@f=o1hEMkrNC*WOult5eg9|3s)t460#KI))3EF0Q@hJT9JAKiWK0Q{{c@=jan_ z$Cwlcu*LB-a3~rIU+zqV{eEbRgyL)pIBqXRb5MyA8^BN{$R_M;iV%vCy;gsW=q7v3Os_}w5q>P-|`N>H_NN#W>lUHwl{t}C3lcS?& zd-cJ%DKMCGaemRQIfz3bQNSEFdWJI+>!5r7a_cR3uNYO>!H)K~p8N8xcYZna**ceO z{MHUwulUW*L}{HneyZC}6=JQ4LeD@;N6*ExdCE2~nP0PU%kkbsmU781ktT>`^@7hM zGZckQE#wgZEJOzezIytBIp<%cSjd67!$16#iw`%{H&)x>5&u9^xEf|A!E zcIyuxLWEk~AXy59~rhT<;zhPKgH|~Gpxx<#F zd3{v6bgpAb+~wFtKAf2(z+7@dF7pW8u7N(8SC_ zLD!U~GWUtrVPxbI!P44Ai^hNc->ug@eElW!0uMYm|H#hHF%1oz$2GA&U_%#;5MLJd zHB^XIW&e48%99`T=$PJepxvQ((=a$YhZw#n6cSvlq8c8LXh4+A=7)!pnOw#fDNA(i z9$Q&)`1b?-LjwoC`kXD9JkY&2Q&6Fuil06dRjouk0UUkC7|t}P#q-C{tPQjb+W+_= z);uQIT*ds}0W>wgXp+45#L#0Ov?4^?5U~v4B$^U=kq3f+u!UKM1&joQ0Hjz0I*?#w z6f6vJK_kebDjICX1ezv|nFa5e#YVKo5Y;AyvZ?qpj^zWqAa z6R!@ch5V`&(>MNdOcuqgra_vgtt`OMhOnk#Mtt}r!@7Kdl4N2C0Fciqi*Nkn!5`Km zPcf4@$4cl$EofNhpzV91LxW60rjz(CKj4AqXOYWV>xT zz?79aqrFUd1McslD{8HR!TG#cSKQ?dslE!@fTbk50Rt; z2fD_N2}FwAX^lvZ8E&lE^xdv8rT&qT?Cp0nRX11BVnB&TfB2%S5Rcyd!t$+e{oc}( z2^W_riKwe)5~5IFTWeX77kJ#Qt-~dL5-cijZEY{Fs)B!*GUw`tZ|*xYB#O@Qtp~1| zD?keEPZy7!J@LebO?gB(YDJg#(Xgb}1! zGn>zL^dgqAH7jT7`D~V@DR&^~cZ=;^DHrYVZrRT$rdTB~-hr;Y<0j7cg{fVee`#KH zVdt?!yrpGTEgbYzhakvjPo?N9X8H(5mBqqKKgIrZfv+#F`h0vzX)!hcLlL!*5oCq{ ziiJ?K8J-txoTnYjbO?eNQX*g|h*+Bu5X-~tsD(Hd5g>_xbz>#N*EL)H=i~{q0ptK8 zfH+1WE%{hem#~pr|IwH8F1)CAd>IDxcdvbripQF#R_*)!-29a@D~rrco4b~+tQ48KJ zBu7W8s!Psvr>0G;*}tz9-TvgQ$A8%yZ#f*Os`a^nrBmwEwG$W2XcGFay?p$nr88+8 zQ;fIw^bnz4_dLBV;6Zo%<={F5| zs;XuH!1P&_h%t1fkilZG2#oga4F|)u=Pd{{%$u@w^~oKZ8>XF?QuInc7)fb|JF+KI z;`nl*rAJQ}G{b}v)@hNcuL^i&(a6NGtpbkb1>Q6)j9EhS5UUne5p*!3Da2yh11Jh% z2ptFM21<-LwoY>h7M0os)iDdu#hb(JY;CipriqcL(`^Y~*mI_(>&WkYVV*9nbXPP)?t6N5d9irrXjd*}7kf#`lx5u; z_a7fDvb3bbP(CVKfK)sOXa2d}^D*EgP?HyF>o|K|ptA_0$}83b9- zam=iitDQDm*X^;>mO$V}Hcf~b4%Z(!xOJ$vFW#Tzgoq7*5S|pNnmhHvYgy6#>*w!o z`|q)f|l6u9;%0N4~5xV!;&MXeM4%J>S`zt(r(wxUwxBm-M{)uuQhXCot< zw`^UMeKcbmN}l0p;8=uWY|C+2fwHrZ025IFS_BcB=K(Dv-iuh7uWv+32FZQ^fUOts zP=}!yY*88GiV(*lh_jrGqFeua{j;@?-1FgI|49q<^$%aO_R^U=Pq_kO$j4?f`GSTv zeciKb)2Ytm9XSm$W@>h`#JRjL{P8Q=1+#-4^B2_hoEwm7sHo7#+38e5Nsd%hl*si{ z0$$1G4)l!ZN>=Y~@2jgWMvAKa;mMm>tcD(1fV zUKvh=< zA~w}9Y1YhTSLdTGCx81!VBCWvL)r9T{p?FSlNM#_7mj6Ilr1te&odUydA;IAlUb0RWUlXl1pZ-uURoM{kA>aEC(a z;gQj#)^Nd!tZo&7LOg9IP1<0PVp1|q4)5;o>Wh89SzY(*U@V?5_OeV_u}hNHZ5WaT zp|w{lj<~6CsV7oJI4+&f9@~8&uj_mE9ASXv=1ktjMbjGG|I=6R{N=U3zyIh<_r69k z^i>aEAMgvl#Bo+c$FpU7zS=c*Qe@c-kD1rr`QOOd{@9vH;>On84YLFPJEZb1F_%|T znSA}^shzE-B-TQNDk&}N>>r-HXyw7(zgHBw+RpV(s16T~WE@a!hCgc?LUL z5_#jo#f`u2=`@wR%PV0^w}A*BTXR!lbg;UnYEEGIz29>8y>Q!>*FS#XfqCETg+8vZ zaC-2cuOFFN0vD`q1OOO??7e?G#>(7;`pC(Se!t8MlBa(tF=xq=13R~QJ^oBKMRP)# zzj$P%yC_uIH#!IjRZ<#IHKS)Jx%{Hbx{m)!Lmqm3jAK}|Yvf$(;*0P2?Yp-wZDuyM zI3^^2T2Yi$(jK`;%P0IrZo@zVZ6k)Eh-m|fqcli+AcJTGEE^)MU;tT801!GBMl=Qv zgAoRV0f9lJ4IP1ql>g0(fJT$ykwszV0P2YB1b=z2? zS)Y8^AtNo9w@k#*078!Sd89oD&rGfl^u$d_6Jo=Kv+CNqVgr2%o&}0Y;8Sa_jSs~d zCN|Ao5Q*zc0stI7e7v}_s;%`*O|Y=>lcT7B4a6;gMC!TK>o%Bp3XsSTBFA{Y{hV%-!Q^M=5NuLI4s#L!vo0Vg!b;9%3mJB{^0KGLmCx$m4^G>M#N!*l`SG5dsa$TLJ(evKMj^ z7&$=)%k`Wk)Q+>G-4rVmm%xR`A}Uwt?fr7yE&xEWhri_hI}UB!9UVLaS)u(%*R<)C zl^*+ahQI9Uvfn;w`}X&Nx87cPhBif5t-if=qK=fS@pP_*nr*Drnb^L;i!k^l`IGaOw~6zb_4 zKpanDa^CWbAtxT(^|KOlm^`6IuWcW7(?g3z>>y8F|P`JTf7LFy&!bgiRX)gW_a> z0JLpD(KZ2;V*ty5g4ZGj!+VIH0{}qC0*ctCLl+gHKnbBZ-e07gI?k{f309Lr`rTK4 zaus`=yn5r`9&mA@rsfgNeD~hEwfA1}{afpc1jEPaX@eg~o3(yYP)IVb`z7jv8)v-v zX1h$=@dBX>3Bm|!UZ*6)*{0+QxPorh6YOj|CqkUINO@V&k)s`woA0$5wCYtCr$+j#`HW+LZgE0x*N@W|)d9$Mw=5wY}T2w?sHvph>WZ3Hw1O`MRwZ~2zoU>@z{$GEoZ>;l%Tqh13F|jmt<^)@1 zMPHfVC2f0tn;OcUF>6NSgL5M0o>6*gku$xVK`hyFvT*sFGR<&AnXz?Ul2{9)?*3$5 zrJDj2#WD_t6ej{Z&oZ{}%cco}$AK1rG(=?myB}V3>zysX?mE}m3Lu}3CMHzLvR7#B zi7{;Pym}`aODYVfX33F0=aOmcu9kFx^0Gt^2y`rK5ab|&D=N!%3=6qzO+($zJ%{VU z(t(r1h~;Tul?A<}0fL}y5p2a%xt0TmW?#_cjGuGr^iV04I=a6QaqL@ zYFJ1!ZWd9Mlcz?bE&FzUJJ5MDF*=m>M@9zP)9I8~Bx@$nV~fOBwr3@g)ie_TEOVxf z8HS@x3~A(47xR`)EC7gYu+TC!70{w#v5?TT!vII8ARt=KvP}j!5MTlwn!x}Yj)AdZ zK?smkOi5m#>yATVZxB!n&}}n1=-6>=64~YZ=-Gb~OT~t6sJYAUy1C`oT|Hf$vcM|Y zG%LZL0y^Gn`ish@6f5UafG}dImlb4o`8d0yU-y)agGOdy9ZEySaxB^7;VHmz93pmE wZSC=cEmOvi?;X}fNkWd}3An-`&MVUY4^FCv62gVa^Z)<=07*qoM6N<$f@<3sHvj+t literal 0 HcmV?d00001 diff --git a/Tests/test_image.py b/Tests/test_image.py index 77baf4fe7..00fbc438a 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -152,7 +152,7 @@ class TestImage(PillowTestCase): # Assert self.assertEqual(im.size, (512, 512)) - im2 = Image.open('Tests/images/mandelbrot.png') + im2 = Image.open('Tests/images/effect_mandelbrot.png') self.assert_image_equal(im, im2) @unittest.skipUnless(sys.platform.startswith('win32'), @@ -170,6 +170,19 @@ class TestImage(PillowTestCase): self.assertEqual(im.getpixel((0, 0)), 60) self.assertEqual(im.getpixel((0, 1)), 28) + def test_effect_spread(self): + # Arrange + im = lena() + distance = 10 + + # Act + im2 = im.effect_spread(distance) + + # Assert + self.assertEqual(im.size, (128, 128)) + im3 = Image.open('Tests/images/effect_spread.png') + self.assert_image_equal(im2, im3) + if __name__ == '__main__': unittest.main() diff --git a/libImaging/Effects.c b/libImaging/Effects.c index 2ebd9f880..32fed6ddd 100644 --- a/libImaging/Effects.c +++ b/libImaging/Effects.c @@ -124,11 +124,11 @@ ImagingEffectSpread(Imaging imIn, int distance) imOut = ImagingNew(imIn->mode, imIn->xsize, imIn->ysize); if (!imOut) - return NULL; + return NULL; -#define SPREAD(type, image)\ +#define SPREAD(type, image)\ for (y = 0; y < imIn->ysize; y++)\ - for (x = 0; x < imIn->xsize; x++) {\ + for (x = 0; x < imIn->xsize; x++) {\ int xx = x + (rand() % distance) - distance/2;\ int yy = y + (rand() % distance) - distance/2;\ if (xx >= 0 && xx < imIn->xsize && yy >= 0 && yy < imIn->ysize) {\ @@ -139,9 +139,9 @@ ImagingEffectSpread(Imaging imIn, int distance) } if (imIn->image8) { - SPREAD(UINT8, image8); + SPREAD(UINT8, image8); } else { - SPREAD(INT32, image32); + SPREAD(INT32, image32); } ImagingCopyInfo(imOut, imIn); From b9303b454f9f091287af31f1f2ccba6a157196b6 Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 2 Sep 2014 16:00:43 +0300 Subject: [PATCH 232/311] Test image was generated on Windows and matches on Windows, but not on Travis (Linux). Check for similar. --- Tests/test_image.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_image.py b/Tests/test_image.py index 00fbc438a..86a32c0ca 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -181,7 +181,7 @@ class TestImage(PillowTestCase): # Assert self.assertEqual(im.size, (128, 128)) im3 = Image.open('Tests/images/effect_spread.png') - self.assert_image_equal(im2, im3) + self.assert_image_similar(im2, im3, 10) if __name__ == '__main__': unittest.main() From ed85a03db02ce197169a54ec01634190ba07da89 Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 2 Sep 2014 16:12:23 +0300 Subject: [PATCH 233/311] An epsilon of 80 should do it, getting ~79.5 on Travis --- Tests/test_image.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_image.py b/Tests/test_image.py index 86a32c0ca..855c968d9 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -181,7 +181,7 @@ class TestImage(PillowTestCase): # Assert self.assertEqual(im.size, (128, 128)) im3 = Image.open('Tests/images/effect_spread.png') - self.assert_image_similar(im2, im3, 10) + self.assert_image_similar(im2, im3, 80) if __name__ == '__main__': unittest.main() From 3a9612af50c20bbf32318bf4d896908db5804af0 Mon Sep 17 00:00:00 2001 From: hugovk Date: Tue, 2 Sep 2014 16:39:35 +0300 Subject: [PATCH 234/311] Test mandelbrot with bad arguments --- Tests/test_image.py | 13 +++++++++++++ libImaging/Effects.c | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Tests/test_image.py b/Tests/test_image.py index 855c968d9..46669db4b 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -155,6 +155,19 @@ class TestImage(PillowTestCase): im2 = Image.open('Tests/images/effect_mandelbrot.png') self.assert_image_equal(im, im2) + def test_effect_mandelbrot_bad_arguments(self): + # Arrange + size = (512, 512) + # Get coordinates the wrong way round: + extent = (+3, +2.5, -2, -2.5) + # Quality < 2: + quality = 1 + + # Act/Assert + self.assertRaises( + ValueError, + lambda: Image.effect_mandelbrot(size, extent, quality)) + @unittest.skipUnless(sys.platform.startswith('win32'), "Stalls on Travis CI, passes on Windows") def test_effect_noise(self): diff --git a/libImaging/Effects.c b/libImaging/Effects.c index 32fed6ddd..eb598d968 100644 --- a/libImaging/Effects.c +++ b/libImaging/Effects.c @@ -139,9 +139,9 @@ ImagingEffectSpread(Imaging imIn, int distance) } if (imIn->image8) { - SPREAD(UINT8, image8); + SPREAD(UINT8, image8); } else { - SPREAD(INT32, image32); + SPREAD(INT32, image32); } ImagingCopyInfo(imOut, imIn); From a65351fcdf04f8413ad4094a787ef1cd6cc66c1c Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 2 Sep 2014 14:38:27 -0700 Subject: [PATCH 235/311] Updated Changes.rst [ci skip] --- CHANGES.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index c068013a6..6c3047220 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Correct duplicate Tiff Metadata and Exif tag values + [hugovk] + - Windows fixes #871 [wiredfool] @@ -58,7 +61,7 @@ Changelog (Pillow) - Added docs for ExifTags [Wintermute3] -- More tests for CurImagePlugin, DcxImagePlugin, ImageFont, ImageMath, ImagePalette, IptcImagePlugin, SpiderImagePlugin, SgiImagePlugin, XpmImagePlugin and _util +- More tests for CurImagePlugin, DcxImagePlugin, Effects.c, GimpGradientFile, ImageFont, ImageMath, ImagePalette, IptcImagePlugin, SpiderImagePlugin, SgiImagePlugin, XpmImagePlugin and _util [hugovk] - Fix return value of FreeTypeFont.textsize() does not include font offsets From 416d8e340e337e61cdf2cd4b189010ce361bf53c Mon Sep 17 00:00:00 2001 From: etienne Date: Tue, 2 Sep 2014 14:49:24 -0400 Subject: [PATCH 236/311] Fixed issue #857. When saving a JPEG and specifying 'keep' for quality or subsampling, if the source JPEG image is in grayscale mode, don't try to find the subsampling of the source, because grayscale images don't have any subsampling (it's only for color components). For the moment the fix also ignores subsampling of CMYK JPEG because currently Pillow doesn't support encoding JPEG in YCCK mode (and subsampling doesn't make sense in CMYK, but Pillow permits saving CMYK JPEG with subsampling, that's a bug). This fix pass those errors silently, i.e. it doesn't raise an error when 'keep' is used but it's not possible to keep the subsampling (because the image is grayscale or CMYK). I think it's the proper behavior but I'm not sure. --- PIL/JpegImagePlugin.py | 9 +++++++++ Tests/images/lena_gray.jpg | Bin 0 -> 23013 bytes Tests/test_file_jpeg.py | 9 +++++++++ encode.c | 10 +++++----- 4 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 Tests/images/lena_gray.jpg diff --git a/PIL/JpegImagePlugin.py b/PIL/JpegImagePlugin.py index 9cbab6b61..dde7d93ca 100644 --- a/PIL/JpegImagePlugin.py +++ b/PIL/JpegImagePlugin.py @@ -545,6 +545,15 @@ def convert_dict_qtables(qtables): def get_sampling(im): + # There's no subsampling when image have only 1 layer + # (grayscale images) or when they are CMYK (4 layers), + # so set subsampling to 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) diff --git a/Tests/images/lena_gray.jpg b/Tests/images/lena_gray.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72e9a4a77172c62812b054e2b05a06f1bdb17002 GIT binary patch literal 23013 zcmeHvcUV)))9|54k)o(r5Cti6Rcat~j7S#{l@2O5KnM{?fP^l@?iCOe6r?CB2r2^7 zLC&Yty`+760$A>^-1qsO=l$#T@SHunGqbb1v$L~@nVe;QVt$5J?=v(p zgxJ{GAY`n>_n>-a>yYvV)}sOJwoM{8^ST43_06#LpU& zlb$)m#vFqLStZEz1YDEZ3Y~%Yd3bnudH8vG`Gxpa@(BsA;^$u_ym9SX;k9cw3h}e9 zrN?67?sLjMy6%x91g4|D=L!NDd0u?w+r2(dBS z!LWIlFWFF_mn+y<7w9m2aR5c(T*1Z7!@H6XsKc*FHi(^L8Mzu_<7DGt=VV{O&Be2V zgI^gSg*Z63tx;N`dl0==!sjG{Yu)8rxqBt0gbzJ;R#x#nRino(9b@^eYuts1Tz@<7 z^mhGND_4UTsU+16wbtF3iTpF=b$&gQhB8;u&K6vKS>HQ#r|?xn-?WXJ|GBvIM-`3z zGipY**nso#8AX*%1G7R9J3HttC#z4~Tq}^QE^Jd;!wGueBe8Y`;^gIZa1Wjzs`;iY z<=o|aDn`#z*oCMvF3kmZfO|XgMJ?z=>IPQ>YgH1a`+FDua}Q*Gbb;9d@pG`+6oODt z<6v(|M)#%0ykieW{$xvS>GTlkyxoB7eU!oWj=aJ)!>;AY{#|XPDUZ|ibD4tD4IAbP z(lU~9TGw|=+f_19}Zh^|_9rFFGYV!ZRs&hWU>>+JguNw+17cw-OU_kWChMD7%$$8RfM*kk+TNMTFU=Z@_qY$pPh zrxMp#p7_vy=fF^zowLw>CBfI+gT5P$N}@mbhEZY(CS`N{T3_W{=PQ~> zQR3Hj9I|A7yy5jcvf_DGYi6a##(}v}w!9)WJt*o58s+_ie}~t^#UeZ?mlav^bAnV~Gv1lSyIIjJe&Uo}d}ydV2oQTlD?e zLnetW9ED=0_*o`YYk60N*FV3t^0~CkgVke_rE_xHwx^zFr>%xWm=MOTzDhyMV?kDN zHYIf;;A@tr8{!s!Ovq!p)Rj-`_(UAtH*dK`P^J^!AA2!;U3n&i%X;(ma93^3Rp~ub zhF|Y|DftpAMw=`8)J1pc{!3MRy*fAYg=pPf@wAMX!Tqap>5M-T=2O=Uon}Hwg{{1k ze{|+o?;mQidcIIrUY}|Vh50#6=g_6{!XBMEb|;Iow3MrW*GK1;w3fqao-XU5BPL}E zn@2h3=fgz;eEF;ZkVb#7N)u{zWn}OOfRk{S!Q}6%Pg$V^kGNEVjV$-K+ z5y7vfdIc!1LH8m@M^R?vO0s%PqFQH|!Phrs{Z(UH$+JOJN3EyP(?SaYW<@$(4`zxc zAD|Lt22=XPU25FS-=`-KM-(M5@D&Yy5=MV)X^~QkA*(ZH83xiQW{tSAt68_-J0E3XQL2g0-8F{lRz|6AIoJY;%P3+~lV%VSk+Zg0Rqum%}z< zZT92{&)9W0=ANjENIu+%pDCH$IvVL%rcu1%W0h~qt|0saF8#1?=TZJ&+dG*MfeER{ zB-t36`s?3t_!6^)cIN)GO3bP5XVj$Bqd{T~Ovq@oeM%^i^Ms1fi_EKyir#HIrCM=y zb$9Wa*B>6Cwd!#^_ zhmvOt=6e5RYY;6nHS@632ovJGGI4sIdVV5WY+Z1R1vgHl;KC)tlCrzzwbbJQU@^K} ze0lETk*?}D(wcOm9mN~%ishl*HQRHa%g%hNK~*s!r-AjDdH!4HhPR{*nI$mxS1_R* z`s2iR6)MdU-Y3steQGiqX1R)-ZZ;J%p#&zxQ%q}%$jNPb>?IK5ShVNQ2-#UrRFWe~ zqq91U{H4}XJNuTKSunvz;J9w=qy7EGm&Xb_m{3hvclIVs(DqApd6nEY&(zo@Lw3iW zn`xS&G``$kF|gV{Sf41OHb`h8$8Bb;qRG&U8|X*Byt*1W+`NIZr|uqm05a)Fkz1$7 z7ACZT39VSLO1sXHmX|4(aH-nIy%^p`w-@NlS`tiK1EV`FFVxz_UhhzKPUBLo>Q`~NN36jk^kJhCC83Zc zW}U10u%nAMQm~c^ERhVBzW15%lhy>&-LZdpgvm3Zck#s223FmL7q@=o&<_-lmR4;$ z^EsiGyWn!K)fSJW%yTz(>|oY$1*)`r@WwP7#dzvw4 zG55Ohb1NZ8kt0RwLQi{ocPDKwKYMpsLvgiFi%7Su|L118nZl>-oy8+qI$@q-zGEw9 zKCUh$P$7R!uCk$e?sQ=(ln_xAV1+ze|S!@?5+oD#?YzKjc^l-Qr^| z6RIYkHZgmeLmF0|{4`+Vw!70uG;T zYTGs&gaithm>*Wiyn>ub&N=wiFT}&U4s+V3eTbW{sPG-FQ7$U7Nln~lQcV&VI|H7WbcDyS1Fm}b>YXxiJ?;w6OQr;Rr4DF$v+73a|d zHeFIDW_g=h`fb6YE)snbRqW!PJuCLEZMREHF+OVRFycN(yZ@FO*ThPX9PI?Q1Aj7l zc$%y9g0SgR?5FC5JD=Re1-bcF4P~pZLv8DE+)^DIN}0w7w;X?Y=1RsVDCS1#;mAu{ zrgqW0HMW|dd+6zN0UvX0t3N+_70g?!&bxzIf2TpTY5I8j7P8$#vDmjGO3yZSb0v{a zb?5Pt8$~PLh2{FBh=oQJRw{?DnmA-x<*Ww zMk`4n0Zd4d2~ijJdG^(gl;zwzI~F1!=RrEfmzCZ5o^hn8mG)uUW5ljqxUkQ)#NQ9v zcuinMZf=rcr9Gh^PgpR0khNh`Rz>biDIW(vlKx10WJV2s&5(Us(y*l-G2+3ig8U#S zUsD|r;>CpSVi$IjjTl#@#VHcB?3>DnWP$XLJZlBk(pokATV}E|p`seJ2)p`W57Cc* zPKrOD%j!s|zt&!;JsM*gwnAEG_3H;ATle^^EtnHnQ|ZPbHtgt5NY@wmrp|=kc(?a`wWi5~+(i@I^H~n+g>h~@kd*2|B6i^efe~q9VN^HX z9C7xD!0L@3B|ii_zO8;+bF;WU`)Q9y7fkkN7(Ng=%;KV=}Oo-X=mXhumSyR6&DDYzSb+g%oBR4pTx@>yV`#;=36E~`Ajzu(Z zR;Lde5I?&XF=7Uvm~h|eNfD`}@7ov1DDj%^&llma8wftZHhQ`^DN?P0c>PIdf&GFL zJ$|a;u!l$G!%w1HTRAcdwro$$re|OWbqbrmgS-18Od&qO+U)2glJKD5HFu z*ckZ?U8H*GN?xYd(?`MRNyj9Pwy)J8BJZxg(F-;;i@Fy|ndxloz8hC8Q{re4X}{{wOBd==2cf&C3%q zua1!t^(ItXo_%u=Z7k_2IxkDz5mel8PNZ!Po%QTB!?u`E6KS6mRW~*@Bz|pNjz}Iv z4(@2EblJ70qVRNq%8JlyQ?B(x6N#-G$2Xgi8$zWIKG|ESH)paRWxEiw0{>=E5Yb5- zKazc#E)YfUoU#c;O=XI)eJIil?-m>4-dZ!rNMS7WeYy7GvQ)OqgQ@C#`mv0imp1P= zCp4}io@j+Y z)Kf1OGF&F)N;Vi4UyT|3cBzv(@kP@-EN-obc0SQ1N=hs(=Emk6ZNUt*hvCT#Co%A{ zaQogRRq7t;jJ<(<8#JH$hd!fkYUvcOVKaP`n|@ddUsq7>G!(`d%{DPvaQ8~zP3uE7TO6lm^BD?XLRH%Lwd=`oG~znsMhoJ%Tud3*MHnlie7G}cZQ7y|7|)i5 zZ(bm#sd-GuQ0>t(zAaj3wzv>YpN8-AA{}$`ds_A~e29xL z<7s9+7o$|VcY{-fdPVrKN!*#q&mw`2*0Y0(|6Ujyc=j@}gE*mFV! zl1fX%y^!9|rh9KD;mVaEXZvRE;mwj6^sI}xqAkz3FW>b#W9!yQX@75CPjvd`jjZUUy`^@fs|0CSG0T2GDy7LMMIr57!Hh#JZc_i%d)QG3n zd6fytykf6r>#3U42d8|Rw|x-3-ZIh_bIlKbx2=sTu(h9~Fyj*XU~X5TM%}hD+CE{w zOFANsV*&Ca&%Pb=q;5Le<`DVRkK+}X%x31O#Ly29kFvZXq`ue0oKu?RURcdae@b8+ z$LJDn(ci+ppIsq+m6kx$%|IJnw<)&ZD9FwdvFDnHJ8><%ZMZwof zmR|?Xv0CAng0s*X2nkX)NDidHg9PVU{hMXwMS;KP-(DPFmU_g)qJvuiUL*EBi}w-^ z_LV^_Z_{G$Mc^X)3`pQwOLbrv-p|t$JYatuk29Kx*^lyPmz{Tp(dW$>@$e9l-sf+xZEC*cY$^51Lp z9RaF9`w4hh*1RNww}l^xh*?$)7`M_BDAK<``JD+Qpiut;=L1vh{x@>gdi?|D1@VKM z9rcZsUtAeNtUTM|dgWZlD#7~9T8o@8JtU+Lm%)8v@n!?hXCMnaw;O@q^|zSzefJ zz-F2BK1tK{lSAw52 z%zo)wh4FI6xSHtc9q=W%;XE-g2N<;yE*KJgy+EL3F_yB@@H+%1*muCd2t4@l1amZr zgkib$mn-vm`x3Ce7$Ol2X&J^J41E2rV1S-DQqV7B=XHQFCU`dj;0L?ld0pJmcs#~) zF|e~_cm*(C-tK53E*JyHIF`At{tmUlxR40G#AU<^H%|h=cR5xB??J0>0oD-L1uqb0 z0GS_i#JLm;gPUFthfemQT|D5(65e%r-hS!tGCdr-Tl<5SC4s%3ewd|3;YnNfH?)y2 z2sZtMU-LKoA&l!!*uU4dB!S6T!o!=?PmP;+p|O|)Xp;LcQJ!_yL<|d~OZ?H$vV{2I zq5jtat_N)h>v{&DgNVAWuDYHiT@uL`=j=yfO)A_2f$tDK5JOz*8mztidY%L#Mi&I6 z(Ae*D!efAUA-IBdutW&xpf#{oS)%;`^uP9HC7>15BX|e>IuN)MoAmv>L6i^32Id6^ zGWTNK0mtvt4->67CV6=-B`5HM6nwL=JXwN2pw|0M>|iiF zs-O7U;_$A7fbX(i3nFCRek5}czr%Thl?){F9k+2&-v3b=yi22JTY9crdM-<6?NWJJ zYX3=Eu#`5i063b=QqD$p}VGR#@S*yRx{<}B;#tej_4FZADBH{@6??YZ~ zL@)!!Xn6{L*tylLSu{s`n-PEpfhtQ4!ylgTFXP}i<`Nu$p;ab$7f(M|n41@@M9a;u zS%N!Ye1TE)1!3s#C@vGcDAi|1z) zza`i_FvLac|I@eytn_Vht|WJ33><4+LcnUs4OaQz3;-9H3O!59W&MRMkr@~~Jgo1t zvn;pu<`@#%6-`1fj{U#d0r+POe83v%`4K@F*yPZ11Ka>+U}s{uT;>90JM#m}#kGq? zOM;)T3u`f0A2M0S@v$uT0Rpfg%X=nh1QJ~C)xTg?+4|y07;_vR=Y{tCsgd<8H~?4? zEOD+F7qss$%Z?j}8dl2h5@qd5x8b%R9xtLw0C+C`8fEcUA>6FZ5d6Qy>=F`mCy~50 z6%_D9c{KcWle`PTOCb>Lt)L{Yr~qlB0)ZNMU`XQ57@&1J5?@Ow65=>l9SK{cxuUtZ z9>yJK9PEp+4Bl_$671ok;VOaJEv_A?8R+Hh1!ONC=;etgY6j{^u$XItJPcNl5NDB) zJai;jUmS^pv5D&ud@sDVi3^V zKsh{7a+!lZhUnsp^M==|ILr|ZexO3qkpO*N9E6wmceejlTFZp4F5l_A!EZ2Fjk~%i zU_3FbMGYjY1Pg%0)O-0`vhP)XVf`J=nvUg4K)B}S|GvWV%z1fzZ-PiN@CU>AZ}Uuq z?U2GD43VY92L8aHNG>-4xwbFq{#Z*4k@PyzPnRgBsB-`0d7J6Lc07x z-Y=v}#^E1{U0pQYSTC$P5@2CsF$%}LF<1%l?~|j+TIZl;&^;wqH_Xj7P4Gk#8t;NJ z(btgxW01$;Ts76yG?2Q;y?Uw$grcgtl9IZLhO&XW%3ggX1VTwwS$(;#KEcHg)|KVD zu5ew||5@F|pCq9@|NnTvbE*kgfW}#y7HdE(pdG9po__G^(2-CB3sO;0K?zPJ#94Uz zf587hTjOy+9}!FS7XLrd$6+x<7>ZPtMIhC{tqyJtS+M+N5o#*n1~7FMS){TexRpR2 zz}1yy5gMwp%8E*|%1Y|s){sRaz^#k`Fu+Gm5!`@Q4K5=A9^A?*$_On3gs!fV22xc? zLswBlRbK`DHtvo z3V?tVKvdL`imVh2739G{K?+2prVIoJr+^-$8gQx(C_xIhr3}Ofr*JFEK)i4Y>VlM2 z7YJ8HNd;ix6!aFPix4$dUL8&~KtDmsqR~KtyczTq2R zb(ls&9j4LHV9{tOvGOoC4Hh>I4Y)-O7EcYhCt&5P%7Q7C1!^FxDyt@|E~_C6M5Cl6 ztAvnMQkGRxkp)u>h?LZ1fj%GrEzlC6BtUF7`&qW>+=7{CA`Qoz#RjW?I%O`ck8uCMkKhA0?@t~T`X9w|71rM{!_n+X#aoc z^*2^0Re9g6{P9SRcgI27RBd2uQf{ys}A+)q3CGC6oXfV1D)*&w6;uc;!9i&Tn zz4JFI-&5n#dMcJNxARq?6$8Vx0-HMPKSU;a zCgBrGFn(vRE}l~I9}X!|H@0&R{Oj7?$FDzqncJaZVvh^DkZ`Z~P4nRVPR)G|$AZHX z?>~9lGPD3r6X9V4K06e2dHnM0m(%gCwFCO}E1m=ED`y>3X6!sN;=0a-ucJ8?Msaru zk5?2Qy*QJkIL#7EQKSUVK9g^v7%xUwMUrMVoTyEm|aH{Nm)< zpz6a<>$0;+JkgsU+utfpKw;01hjYaJvG96L!D-ita^!h`|_rn;0g_LY}dJ&lb7Ec z38KKk1tPr^^VlnYWR9DQ+f3DyQ=T&+WLIgTLE#8j#{x1?iV2aJ(0eBIkO_@PYsB9u zEmn)er;>2k+U&Wk!k5WGyePbkE1l9BL8Z*gT%3sI6~9E!8ZT;TvG;g5I7w4%J3W}o za4kP)EvtC?eTPqcmFndr?yk(XU2-Ldo+gvgX+2DcSBwUq%`qAMdZIMOWLJLm4(tsZ z?Q8io^KrEnPt-)t71u_*B<^I?t9?lq){goxq0pRp0yqOA9H({6=3G*6LakrtT#va^ zez^wzhR25HIq%v1;r4f;c#L*n{KAn`)Y_sIuLz+?$`gH;K?6xC&wcbO_>J<-lDbAz zbE-@}Sycr0s7NI8!cMV$?;Rt|jBJ1`DJk27eai`AJYmB0dz(ke`Q^s0(R9Lq=TXy; zEqfbHwZ7PN*B-10JnU^z^{M?flR}mCXBk!Gij?uoPTQOkE_ECp zZaFS;+yY5Ev#|PQX`0-1r>fnijbjBK_6ix{I=ZPgf$_7KCm2q)@s&(Sn+f?bq4jTW z1U43$zPGh2ep+TJN^9oirq|#5wm=>M%GfRT{Q0gIYuV~fz@xQqd%{zqR%Gh@1H|+otEm@&$qqIIg0y* z>s1fh$Cn>czI}PTb)f?sRU-UJCF z>r?dN?!9v!%Ex6b#O97VO&ao_qFy|>W9DfUS)S*JUR|d0gxegY;U)g&5sRoc*GR?? zUNk9sG-u)3qw6;ZZDNsc9n<0u2_o9mUcRF|DrG{kBVl8x_Tyq>ZDI>Vv%H0dSM|@= zzt|*mjeg%S;(hCRnoUA4SDeQMvzVAVvylnp?(JAY1Vj3I!0X)(B5oS$&BwfLuJQBBjsSYIv6Ug2oMdtD3|H&%t3j(X=hGW^+BQUC zqMOUM6Xs4m+BAQov8AKeSG0xK-nDNg?87$Ef;MpQN_k9X*awg6hnpSaWjSQlV`E1$ zXi0NSsJDrhy!~`_WCh_6`Yp%CD0SN||Gx1|W%_xbqrtx9peXXYq>2PNl~K90Cy(8X zjdtE=jM}$2jWJ#z7E(&1)Ssd{$R)%y_nFxD_@WI%Yl4IvOv4U8R-0f#@l0qFSbvuf zqTA5+2_E0N1hWR{A}5BSZ9YG?Lz7nqr(^OSWJbWhfRu{A|gGmr=FHN zPWITif1cSOQ4n8O?={%oKukS$>WM4`EPKI}QY@bSu*c#?h)ECS)Q!T-2f6q9UVfv; zby3%lE9Q}tWqqYZakd97ufE&mCyIKT9~#GmZjd+3F9fZrpSB~t*1`oI|7Vs>CQs7hWc&L{|bIsHc0{CnjaX5hp7waRLf12(jR z+Nbya%rhho&4PrXSmNWDQ}iGC9e- z1%d1AE`N_$pLnT)dpl~NiWZ4!y4DqfjUf?i&E#A*`ivWYykYt(h%C9&h~7D3kW4*r zV<^breWi%G)IIUNrN_d<-+wzUFm6Jn%w0F1>TLWNi&VK^ao=~2#rfq(gag1%R7kcs|fmlK~#iCC>jSy{@6R;?ir zeO)(UZohq-=go6kf5e~P>a;<4G&;V1uZ|3A=n;3^cq(J=xE$3qh1v9%R4I~A_iaW~ zG+6Jx(;l~s-;&#d-b}S>h_Fk{^`!>;G)1e@uY$I(X$QsB>D3Mt;ntYD*>oM-X6PDa zWX)iZTa0Up7rc#_kTAIf6(IB^$tuP1Qu|vG`s?0j4~8^eck&-^u{epUq7TqwKOf0i z7(a&4lQj!t>jn=w&d3&nUKJE zsc&!!g+7oeb}yEqViM3F!hy{&n^`zcZht81&{Z6oPA}L`ZUuVnU92eC0xU{~-$@;4_iYL0em*PSHG(s6G-Ib?LmO3nmRBhTNY26|kT z%=|c@*rwhfTkcr_7Rm)IvDl5yD?@YsV2#ym9aMhr^r<(qvRkeyS{Mt^j7f%)$yteQ zK@U=O%Bzg*$~?|v@%yvB<-DqNz=(p^m!&xLaCVe7$vRK(`7>`PJ*9noF1E|b zTnE)#Zth$;toX@pp~B1GlKLtYCG6HmZC0nBIe)rh{Ed`PMGh@t`{ec_uiJx(0ar*k zp2V&-p+~KD(W_`UZqxv2Zj4+46yQeM<=(nINoRbnQdJIXQ_9XbXpLlAM8qk-$x|La z^t?Q}@fOBuj{jVk^U+s=u|DFra7HVfwg#=JiL;rgPVl-)KAwqHA&uOvRVKgieUs7G zn6f4NR4k%qOv9WBanF#ugvp;L3{cy^)*v|XG_I(~Jm8PM6~*26I}5j)H@1%C({uW& znKc6~TID`j_7hOf{S3xttx#~N&f^P@=0atA#)cBL^Gsy8g4Wi_%>*u_6jssWY208& zHt}ZRhwm=j3N?0)G10Nemyw~j8douL#LU%$ea4wkSn#!-vxcRO_-DDNlNV0>byM$! zx`Vuu+QMZYSL5QzX^pU9!Cuo<+mB@R%OWFDW#D& zlE;szxU1^sbj- z6_b@RI@BP0e%7{e%}Z2L>>Dw$xx+)MkH#JCUJ*8?`ADQ4)7q)Pzt8rV>i*-`-80kn zfVWI)1rxIWHZR$$%&hHyYOb(7Yg38gejrt+rFHatEgG8$H@Vib@`jX2`y=jnD3` zaWieDoNdIIWY=|Lx~TQ;@$FP7dc zL$kVEc_IsYaSN~T=Y|Zb=#6>oyMvFz8*RJ(II5yEaV)O$$mcJ%@srNG-Rs5lYcMxl zHY0q5?(1h#EAczugM-^V7;DVBZMq#J?!@_H6T1l)qW%5nDBbq*6C~?No8*;^GRmoI zS!euAf7LWa+|My%BdcX>rsdxca+BZcRHqlN>{#)RGU9FU>Yd^)?MYeV%r^~<)KP@$&kO|KCuv}Y<4HuG56%Nd4STiadAM^GiH9a~-&}l7#{IrKL zNzM5x^~9P9HSH2ei+nUZcve10C3$z98tNo{zd2)gih=5QMejG5HnsDTFE1B5)iL4f zKH56EGnM=j)!P=K;xu+a@rJbbvuW|#({W~{w_Mg%X}0f)4aV4q>b?yht{Qnn($QGo zZj>Qnz%aHxy!!~BL8GjBb`Cy%=SY^`w<4NI*rfPT5-q8?<~CiqZ{FdnMbYl8hU8QE z`jmHBj8TgTRDi70xSJ8}2Bx@an~;dMkg2j7RZNfJCT}WJP<%!#)6ABfKlAXZ$+TnC z!G(Qazl~edANluGY8hSg8z#tqIW(kpb;_&fwqc4p6Ozc84;tu13rK4Ghw^?&JU$D^)ZYSS2yvV0{bIrI2ICiqthdz7DY%a)-ykThNCl6_2! zJ=H|z^k1S@JB!L0nV~6@0dLEAg^Kj&YIzQv%P5!BQdXmhDS#8V0%Xb=!?CMq`9#@x zMNVDOC|dJ@yvg&iyVMk>;~9wKPUEqhK__2+YqM|F4nEWL@7&8f>`#~MlX{cHMycOmG9Kd>y7wL-li0QE%M?fU&l?K z4Yv%|(M+G3k?x%rc0&~=yA8kX*+YBRc)Q3t!aS}Sn;+>j=TZ{efccz~EBet?)PzCp zI-Py=WO(oC*ISPkJ)K5wPAtkmRC1F0WGbupn2;LMrlho}_BLZ^!vGT1nUbG86Ld&b zg)yXX4mnO}sb)6(6?F7Nw?$Q`%_gBst?yhvcUFCSHpM z&-glu8e>A8XIt7ouB~`bP*x-=olL(MCfwad_F(KHpRzEgye_B6v@YP}v%+Z37p!)@ zcD&u&`gVNZxGCBDtZOOR@+4I^aQuQJ?Ww5ubYoK8ispB>lX{B`ihJ36119krUUIU2 zA;zf-b#JCM+$6hqy}EOOTt5Kbot_UMl0Ia5y&{YzkQ41@4-bWzUHbH_ z5AuN%woWIL=6Cb=iBw*5v}=%;cb;>;+Vz4)vb6PQ zV>F_9dgV)_>Mte;yY`Gv&~xTQH+epqDN@>W)na3#$%c$(!d{Ds-MqGq14BkLDfH&S z&xSQ)*~lPqc1mf^gUZCK47}+~UTAud-%5k&HzK4nli@25iFXd=v@jv;kZbybD?;#cg>p$3voBJwES*cJK%5) NUM_QUANT_TBLS) { - PyErr_SetString(PyExc_ValueError, "Not a valid numbers of quantization tables. Should be between 2 and 4."); + if (num_tables < 1 || num_tables > NUM_QUANT_TBLS) { + PyErr_SetString(PyExc_ValueError, "Not a valid numbers of quantization tables. Should be between 1 and 4."); return NULL; } qarrays = (unsigned int**) PyMem_Malloc(num_tables * sizeof(unsigned int*)); @@ -760,7 +760,7 @@ PyImaging_LibTiffEncoderNew(PyObject* self, PyObject* args) (ttag_t) PyInt_AsLong(key), intav); free(intav); - } + } } else { TRACE((" %d elements, setting as floats \n", len)); floatav = malloc(sizeof(float)*len); @@ -903,7 +903,7 @@ PyImaging_Jpeg2KEncoderNew(PyObject *self, PyObject *args) j2k_decode_coord_tuple(tile_offset, &context->tile_offset_x, &context->tile_offset_y); - j2k_decode_coord_tuple(tile_size, + j2k_decode_coord_tuple(tile_size, &context->tile_size_x, &context->tile_size_y); @@ -918,7 +918,7 @@ PyImaging_Jpeg2KEncoderNew(PyObject *self, PyObject *args) if (context->tile_offset_x > context->offset_x || context->tile_offset_y > context->offset_y) { - PyErr_SetString(PyExc_ValueError, + PyErr_SetString(PyExc_ValueError, "JPEG 2000 tile offset too large to cover image area"); Py_DECREF(encoder); return NULL; From c2835350a87ed52b2e3fe483616393f0606baec1 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 2 Sep 2014 14:56:59 -0700 Subject: [PATCH 237/311] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 6c3047220..59e709011 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Correctly handle saving gray and CMYK JPEGs with quality-keep #857 + [etienned] + - Correct duplicate Tiff Metadata and Exif tag values [hugovk] From f54bccab0ec36f8c2012c2b0c0c7e34f35196864 Mon Sep 17 00:00:00 2001 From: Kenny Ostrom Date: Wed, 20 Aug 2014 17:24:28 -0500 Subject: [PATCH 238/311] multipage tiff for iterator testing --- Tests/images/test.tif | Bin 0 -> 816 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/test.tif diff --git a/Tests/images/test.tif b/Tests/images/test.tif new file mode 100644 index 0000000000000000000000000000000000000000..7a7f5f89a05f35ebba3e8ff6ce7903c91a955965 GIT binary patch literal 816 zcmb_ayAHxI40IBxP$#H(NTnkSZ0rmSEd2p?29Q`7SXlc#d=?`kGg3JRCj==76=5m$ z)v=r0^~!Qa1;wLFqzox+rdTS#S}^aK04IVC>OIx6vmM|p=otifD41~6Nc#Ke&sE#b zUVz7fufRnxI|bIL;bt^f+TQVowJOT{O_Dk7&r0>?)puqGmPkbvcUJ9Pf{4p e>68J-bkbzJPC0s Date: Wed, 20 Aug 2014 21:43:46 -0700 Subject: [PATCH 239/311] Tests for multipage tiffs --- Tests/images/multipage-lastframe.tif | Bin 0 -> 296 bytes Tests/images/{test.tif => multipage.tiff} | Bin Tests/test_file_libtiff.py | 29 ++++++++++++++++++++++ Tests/test_file_tiff.py | 28 ++++++++++++++++++++- 4 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 Tests/images/multipage-lastframe.tif rename Tests/images/{test.tif => multipage.tiff} (100%) diff --git a/Tests/images/multipage-lastframe.tif b/Tests/images/multipage-lastframe.tif new file mode 100644 index 0000000000000000000000000000000000000000..aeba534e25a9f0527c5fe1674461d4b484b67159 GIT binary patch literal 296 zcmebD)M9X9pbQ8wFfcMRFaiw`0b)iZHWQQ$l4C| Date: Wed, 20 Aug 2014 21:44:28 -0700 Subject: [PATCH 240/311] Don't close fd for multipage files --- PIL/TiffImagePlugin.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/PIL/TiffImagePlugin.py b/PIL/TiffImagePlugin.py index 9bef30ebe..d7367c113 100644 --- a/PIL/TiffImagePlugin.py +++ b/PIL/TiffImagePlugin.py @@ -744,7 +744,8 @@ class TiffImageFile(ImageFile.ImageFile): self.readonly = 0 # libtiff closed the fp in a, we need to close self.fp, if possible if hasattr(self.fp, 'close'): - self.fp.close() + if not self.__next: + self.fp.close() self.fp = None # might be shared if err < 0: From 99f7dd2afffb4fdec7ba9607bf98140cf1d441bd Mon Sep 17 00:00:00 2001 From: wiredfool Date: Wed, 20 Aug 2014 22:52:12 -0700 Subject: [PATCH 241/311] Allocate a new core image object for each frame, fixes problems with reusing palettes and image sizes --- PIL/TiffImagePlugin.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/PIL/TiffImagePlugin.py b/PIL/TiffImagePlugin.py index d7367c113..85d5609c9 100644 --- a/PIL/TiffImagePlugin.py +++ b/PIL/TiffImagePlugin.py @@ -655,7 +655,9 @@ class TiffImageFile(ImageFile.ImageFile): self.__next = self.tag.next self.__frame += 1 self._setup() - + #UNDONE - decompresion bomb + self.im = Image.core.new(self.mode, self.size) + def _tell(self): return self.__frame From d5b4f136c522b10ad110638482b2b9c420022379 Mon Sep 17 00:00:00 2001 From: Kenny Ostrom Date: Thu, 21 Aug 2014 13:02:01 -0500 Subject: [PATCH 242/311] added ifd offset to the tiff decoder args, call TIFFSetSubDirectory --- PIL/TiffImagePlugin.py | 3 +++ decode.c | 5 +++-- libImaging/TiffDecode.c | 18 ++++++++++++++---- libImaging/TiffDecode.h | 4 ++-- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/PIL/TiffImagePlugin.py b/PIL/TiffImagePlugin.py index 85d5609c9..4921f0a37 100644 --- a/PIL/TiffImagePlugin.py +++ b/PIL/TiffImagePlugin.py @@ -281,6 +281,7 @@ class ImageFileDirectory(collections.MutableMapping): self.tagdata = {} self.tagtype = {} # added 2008-06-05 by Florian Hoech self.next = None + self.offset = None def __str__(self): return str(self.as_dict()) @@ -415,6 +416,7 @@ class ImageFileDirectory(collections.MutableMapping): # load tag dictionary self.reset() + self.offset = fp.tell() i16 = self.i16 i32 = self.i32 @@ -708,6 +710,7 @@ class TiffImageFile(ImageFile.ImageFile): # (self._compression, (extents tuple), # 0, (rawmode, self._compression, fp)) ignored, extents, ignored_2, args = self.tile[0] + args = args + (self.ifd.offset,) decoder = Image._getdecoder(self.mode, 'libtiff', args, self.decoderconfig) try: diff --git a/decode.c b/decode.c index d5e329384..e9aa6a387 100644 --- a/decode.c +++ b/decode.c @@ -442,8 +442,9 @@ PyImaging_LibTiffDecoderNew(PyObject* self, PyObject* args) char* rawmode; char* compname; int fp; + int ifdoffset; - if (! PyArg_ParseTuple(args, "sssi", &mode, &rawmode, &compname, &fp)) + if (! PyArg_ParseTuple(args, "sssii", &mode, &rawmode, &compname, &fp, &ifdoffset)) return NULL; TRACE(("new tiff decoder %s\n", compname)); @@ -455,7 +456,7 @@ PyImaging_LibTiffDecoderNew(PyObject* self, PyObject* args) if (get_unpacker(decoder, mode, rawmode) < 0) return NULL; - if (! ImagingLibTiffInit(&decoder->state, fp)) { + if (! ImagingLibTiffInit(&decoder->state, fp, ifdoffset)) { Py_DECREF(decoder); PyErr_SetString(PyExc_RuntimeError, "tiff codec initialization failed"); return NULL; diff --git a/libImaging/TiffDecode.c b/libImaging/TiffDecode.c index 787cd4506..1d320e9bd 100644 --- a/libImaging/TiffDecode.c +++ b/libImaging/TiffDecode.c @@ -21,8 +21,8 @@ #include "TiffDecode.h" void dump_state(const TIFFSTATE *state){ - TRACE(("State: Location %u size %d eof %d data: %p \n", (uint)state->loc, - (int)state->size, (uint)state->eof, state->data)); + TRACE(("State: Location %u size %d eof %d data: %p ifd: %d\n", (uint)state->loc, + (int)state->size, (uint)state->eof, state->data, state->ifd)); } /* @@ -142,7 +142,7 @@ void _tiffUnmapProc(thandle_t hdata, tdata_t base, toff_t size) { (void) hdata; (void) base; (void) size; } -int ImagingLibTiffInit(ImagingCodecState state, int fp) { +int ImagingLibTiffInit(ImagingCodecState state, int fp, int offset) { TIFFSTATE *clientstate = (TIFFSTATE *)state->context; TRACE(("initing libtiff\n")); @@ -158,6 +158,7 @@ int ImagingLibTiffInit(ImagingCodecState state, int fp) { clientstate->size = 0; clientstate->data = 0; clientstate->fp = fp; + clientstate->ifd = offset; clientstate->eof = 0; return 1; @@ -195,7 +196,6 @@ int ImagingLibTiffDecode(Imaging im, ImagingCodecState state, UINT8* buffer, int clientstate->loc = 0; clientstate->data = (tdata_t)buffer; clientstate->flrealloc = 0; - dump_state(clientstate); TIFFSetWarningHandler(NULL); @@ -220,6 +220,16 @@ int ImagingLibTiffDecode(Imaging im, ImagingCodecState state, UINT8* buffer, int return -1; } + if (clientstate->ifd){ + unsigned int ifdoffset = clientstate->ifd; + TRACE(("reading tiff ifd %d\n", ifdoffset)); + int rv = TIFFSetSubDirectory(tiff, ifdoffset); + if (!rv){ + TRACE(("error in TIFFSetSubDirectory")); + return -1; + } + } + size = TIFFScanlineSize(tiff); TRACE(("ScanlineSize: %d \n", size)); if (size > state->bytes) { diff --git a/libImaging/TiffDecode.h b/libImaging/TiffDecode.h index 46c940d1b..9875309e3 100644 --- a/libImaging/TiffDecode.h +++ b/libImaging/TiffDecode.h @@ -26,6 +26,7 @@ typedef struct { toff_t loc; /* toff_t == uint32 */ tsize_t size; /* tsize_t == int32 */ int fp; + int ifd; /* offset of the ifd, used for multipage */ TIFF *tiff; /* Used in write */ toff_t eof; int flrealloc; /* may we realloc */ @@ -33,7 +34,7 @@ typedef struct { -extern int ImagingLibTiffInit(ImagingCodecState state, int fp); +extern int ImagingLibTiffInit(ImagingCodecState state, int fp, int offset); extern int ImagingLibTiffEncodeInit(ImagingCodecState state, char *filename, int fp); extern int ImagingLibTiffSetField(ImagingCodecState state, ttag_t tag, ...); @@ -50,5 +51,4 @@ extern int ImagingLibTiffSetField(ImagingCodecState state, ttag_t tag, ...); #define TRACE(args) - #endif From 3df822d1ef0693cf242eb9f8bb2d9de914f9a0fa Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 26 Aug 2014 14:16:01 -0700 Subject: [PATCH 243/311] Testing the imagesequence module with the multipage tiffs --- Tests/test_imagesequence.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/Tests/test_imagesequence.py b/Tests/test_imagesequence.py index fd10e5989..2470bc732 100644 --- a/Tests/test_imagesequence.py +++ b/Tests/test_imagesequence.py @@ -1,6 +1,6 @@ from helper import unittest, PillowTestCase, lena -from PIL import ImageSequence +from PIL import Image, ImageSequence, TiffImagePlugin class TestImageSequence(PillowTestCase): @@ -22,7 +22,26 @@ class TestImageSequence(PillowTestCase): self.assertEqual(index, 1) + def _test_multipage_tiff(self): + im = Image.open('Tests/images/multipage.tiff') + for index, frame in enumerate(ImageSequence.Iterator(im)): + frame.load() + self.assertEqual(index, im.tell()) + frame.convert('RGB') + + def test_tiff(self): + return self._test_multipage_tiff() + def test_libtiff(self): + codecs = dir(Image.core) + + if "libtiff_encoder" not in codecs or "libtiff_decoder" not in codecs: + self.skipTest("tiff support not available") + + TiffImagePlugin.READ_LIBTIFF = True + self._test_multipage_tiff() + TiffImagePlugin.READ_LIBTIFF = False + if __name__ == '__main__': unittest.main() From d8b2829f4b5819c4ae09a7aa81088ff3853a3c25 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 26 Aug 2014 15:30:03 -0700 Subject: [PATCH 244/311] Partial fix for test failures, works on py2.x --- PIL/TiffImagePlugin.py | 20 ++++++++++++++------ Tests/test_file_libtiff.py | 2 +- Tests/test_imagesequence.py | 11 ++++++++--- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/PIL/TiffImagePlugin.py b/PIL/TiffImagePlugin.py index 4921f0a37..abf9db7e3 100644 --- a/PIL/TiffImagePlugin.py +++ b/PIL/TiffImagePlugin.py @@ -448,7 +448,11 @@ class ImageFileDirectory(collections.MutableMapping): # Get and expand tag value if size > 4: here = fp.tell() + if Image.DEBUG: + print ("Tag Location: %s" %here) fp.seek(i32(ifd, 8)) + if Image.DEBUG: + print ("Data Location: %s" %fp.tell()) data = ImageFile._safe_read(fp, size) fp.seek(here) else: @@ -632,18 +636,20 @@ class TiffImageFile(ImageFile.ImageFile): def seek(self, frame): "Select a given frame as current image" - if frame < 0: frame = 0 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 tell(self): "Return the current frame number" - return self._tell() def _seek(self, frame): - self.fp = self.__fp if frame < self.__frame: # rewind file @@ -652,16 +658,18 @@ class TiffImageFile(ImageFile.ImageFile): while self.__frame < frame: if not self.__next: raise EOFError("no more images in TIFF file") + if Image.DEBUG: + print("Seeking to frame %s, on frame %s, __next %s, location: %s"% + (frame, self.__frame, self.__next, self.fp.tell())) self.fp.seek(self.__next) + if Image.DEBUG: + print("Loading tags, location: %s"%self.fp.tell()) self.tag.load(self.fp) self.__next = self.tag.next self.__frame += 1 self._setup() - #UNDONE - decompresion bomb - self.im = Image.core.new(self.mode, self.size) def _tell(self): - return self.__frame def _decoder(self, rawmode, layer, tile=None): diff --git a/Tests/test_file_libtiff.py b/Tests/test_file_libtiff.py index 121ad5de2..bdac5f300 100644 --- a/Tests/test_file_libtiff.py +++ b/Tests/test_file_libtiff.py @@ -332,7 +332,7 @@ class TestFileLibTiff(LibTiffTestCase): self.assertFalse(im.tag.next) self.assertEqual(im.size, (20,20)) self.assertEqual(im.convert('RGB').getpixel((0,0)), (0,0,255)) - + TiffImagePlugin.READ_LIBTIFF = False def test__next(self): diff --git a/Tests/test_imagesequence.py b/Tests/test_imagesequence.py index 2470bc732..068290451 100644 --- a/Tests/test_imagesequence.py +++ b/Tests/test_imagesequence.py @@ -22,15 +22,19 @@ class TestImageSequence(PillowTestCase): self.assertEqual(index, 1) - def _test_multipage_tiff(self): + def _test_multipage_tiff(self, dbg=False): + # debug had side effect of calling fp.tell. + Image.DEBUG=dbg im = Image.open('Tests/images/multipage.tiff') for index, frame in enumerate(ImageSequence.Iterator(im)): frame.load() self.assertEqual(index, im.tell()) frame.convert('RGB') + Image.DEBUG=False def test_tiff(self): - return self._test_multipage_tiff() + #self._test_multipage_tiff(True) + self._test_multipage_tiff(False) def test_libtiff(self): codecs = dir(Image.core) @@ -39,7 +43,8 @@ class TestImageSequence(PillowTestCase): self.skipTest("tiff support not available") TiffImagePlugin.READ_LIBTIFF = True - self._test_multipage_tiff() + #self._test_multipage_tiff(True) + self._test_multipage_tiff(False) TiffImagePlugin.READ_LIBTIFF = False if __name__ == '__main__': From 17ac15543d07a081f5fa357c1e7f89c41fea579d Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 2 Sep 2014 15:08:51 -0700 Subject: [PATCH 245/311] fp.tell resyncs the python3 with the file pointer --- PIL/TiffImagePlugin.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/PIL/TiffImagePlugin.py b/PIL/TiffImagePlugin.py index abf9db7e3..50648288e 100644 --- a/PIL/TiffImagePlugin.py +++ b/PIL/TiffImagePlugin.py @@ -661,6 +661,9 @@ class TiffImageFile(ImageFile.ImageFile): if Image.DEBUG: print("Seeking to frame %s, on frame %s, __next %s, location: %s"% (frame, self.__frame, self.__next, self.fp.tell())) + # reset python3 buffered io handle in case fp + # was passed to libtiff, invalidating the buffer + self.fp.tell() self.fp.seek(self.__next) if Image.DEBUG: print("Loading tags, location: %s"%self.fp.tell()) From 8193566ff1a2eba3a2f0f4cddf17833346c18b79 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 4 Aug 2014 14:48:42 -0700 Subject: [PATCH 246/311] Try to open the file in universal line ending mode, fallback to prev behavior --- PIL/EpsImagePlugin.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/PIL/EpsImagePlugin.py b/PIL/EpsImagePlugin.py index 9f963f7e6..197fa8753 100644 --- a/PIL/EpsImagePlugin.py +++ b/PIL/EpsImagePlugin.py @@ -179,6 +179,20 @@ class PSFile: self.char = None return s.decode('latin-1') + "\n" +class PSFpWrapper: + """ Wrapper for a filepointer that has been opened in universal mode """ + def __init__(self,fp): + self.fp = fp + + def __getattr__(self, attr): + """ Delegate everything that we're not wrapping """ + return getattr(self.fp, attr) + + def read(self, count): + return self.fp.read(count) + + readbinary = read + def _accept(prefix): return prefix[:4] == b"%!PS" or i32(prefix) == 0xC6D3D0C5 @@ -195,7 +209,11 @@ class EpsImageFile(ImageFile.ImageFile): def _open(self): - fp = PSFile(self.fp) + try: + fp = PSFpWrapper(open(self.fp.name, "Ur", 'latin-1')) + except: + print ("fallback to psfile") + fp = PSFile(self.fp) # FIX for: Some EPS file not handled correctly / issue #302 # EPS can contain binary data From e52152baaddf6bb6a74bb2ed1f24bc1545c59d75 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 4 Aug 2014 15:27:08 -0700 Subject: [PATCH 247/311] Test bytesio object --- Tests/test_file_eps.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Tests/test_file_eps.py b/Tests/test_file_eps.py index 0ca4249a3..5b369552a 100644 --- a/Tests/test_file_eps.py +++ b/Tests/test_file_eps.py @@ -63,6 +63,17 @@ class TestFileEps(PillowTestCase): with io.open(self.tempfile('temp_iobase.eps'), 'wb') as fh: image1.save(fh, 'EPS') + def test_bytesio_object(self): + with open(file1, 'rb') as f: + img_bytes = io.BytesIO(f.read()) + + img = Image.open(img_bytes) + img.load() + + image1_scale1_compare = Image.open(file1_compare).convert("RGB") + image1_scale1_compare.load() + self.assert_image_similar(img, image1_scale1_compare, 5) + def test_render_scale1(self): # We need png support for these render test codecs = dir(Image.core) From 9b35a4538d4cb121806f41c4338ac50a83107e5c Mon Sep 17 00:00:00 2001 From: wiredfool Date: Mon, 4 Aug 2014 15:28:57 -0700 Subject: [PATCH 248/311] Read the offset using original fp Read the rest of the text data using one of the line ending wrappers. --- PIL/EpsImagePlugin.py | 66 ++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/PIL/EpsImagePlugin.py b/PIL/EpsImagePlugin.py index 197fa8753..88ce23b22 100644 --- a/PIL/EpsImagePlugin.py +++ b/PIL/EpsImagePlugin.py @@ -189,9 +189,11 @@ class PSFpWrapper: return getattr(self.fp, attr) def read(self, count): + return self.fp.read(count).decode('latin-1') + + def readbinary(self, count): return self.fp.read(count) - readbinary = read def _accept(prefix): @@ -208,39 +210,24 @@ class EpsImageFile(ImageFile.ImageFile): format_description = "Encapsulated Postscript" 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. try: - fp = PSFpWrapper(open(self.fp.name, "Ur", 'latin-1')) - except: - print ("fallback to psfile") + if bytes is str: + # Python2, need the decode to latin-1 on read. + fp = PSFpWrapper(open(self.fp.name, "Ur")) + else: + # Python3, can use bare open command. + fp = open(self.fp.name, "Ur", encoding='latin-1') + except Exception as msg: + # Expect this for bytesio/stringio fp = PSFile(self.fp) - # FIX for: Some EPS file not handled correctly / issue #302 - # EPS can contain binary data - # or start directly with latin coding - # read header in both ways to handle both - # file types - # more info see http://partners.adobe.com/public/developer/en/ps/5002.EPSF_Spec.pdf - - # for HEAD without binary preview - s = fp.read(4) - # for HEAD with binary preview - fp.seek(0) - sb = fp.readbinary(160) - - if s[:4] == "%!PS": - fp.seek(0, 2) - length = fp.tell() - offset = 0 - elif i32(sb[0:4]) == 0xC6D3D0C5: - offset = i32(sb[4:8]) - length = i32(sb[8:12]) - else: - raise SyntaxError("not an EPS file") - - # go to offset - start of "%!PS" + # go to offset - start of "%!PS" fp.seek(offset) - + box = None self.mode = "RGB" @@ -372,6 +359,27 @@ class EpsImageFile(ImageFile.ImageFile): if not box: raise IOError("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, 2) + length = fp.tell() + offset = 0 + elif i32(s[0:4]) == 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 http://partners.adobe.com/public/developer/en/ps/5002.EPSF_Spec.pdf + offset = i32(s[4:8]) + length = i32(s[8:12]) + else: + raise SyntaxError("not an EPS file") + + return (length, offset) + def load(self, scale=1): # Load EPS via Ghostscript if not self.tile: From 8f75cc2bbf9cb274a7167f895ab0d437ddca1c07 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Thu, 7 Aug 2014 16:41:10 -0700 Subject: [PATCH 249/311] Don't search for the imagedata if we're not going to do anything with it --- PIL/EpsImagePlugin.py | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/PIL/EpsImagePlugin.py b/PIL/EpsImagePlugin.py index 88ce23b22..745e01b02 100644 --- a/PIL/EpsImagePlugin.py +++ b/PIL/EpsImagePlugin.py @@ -308,7 +308,7 @@ class EpsImageFile(ImageFile.ImageFile): s = s[:-1] if s[:11] == "%ImageData:": - + # Encoded bitmapped image. [x, y, bi, mo, z3, z4, en, id] =\ s[11:].split(None, 7) @@ -335,23 +335,10 @@ class EpsImageFile(ImageFile.ImageFile): self.mode = "RGB" else: break - - if id[:1] == id[-1:] == '"': - id = id[1:-1] - - # Scan forward to the actual image data - while True: - s = fp.readline() - if not s: - break - if s[:len(id)] == id: - self.size = x, y - self.tile2 = [(decoder, - (0, 0, x, y), - fp.tell(), - 0)] - return - + + self.size = (x,y) + return + s = fp.readline() if not s: break From ee46f45b96075593a5d4d39d9fa2b609e104fec4 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Fri, 8 Aug 2014 15:47:39 -0700 Subject: [PATCH 250/311] Remove unused code, tighten up readline for all the line endings --- PIL/EpsImagePlugin.py | 111 ++++++++++-------------------------------- 1 file changed, 26 insertions(+), 85 deletions(-) diff --git a/PIL/EpsImagePlugin.py b/PIL/EpsImagePlugin.py index 745e01b02..97680fec8 100644 --- a/PIL/EpsImagePlugin.py +++ b/PIL/EpsImagePlugin.py @@ -143,58 +143,28 @@ def Ghostscript(tile, size, fp, scale=1): class PSFile: - """Wrapper that treats either CR or LF as end of line.""" + """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 __getattr__(self, id): - v = getattr(self.fp, id) - setattr(self, id, v) - return v def seek(self, offset, whence=0): self.char = None self.fp.seek(offset, whence) - def read(self, count): - return self.fp.read(count).decode('latin-1') - def readbinary(self, count): - return self.fp.read(count) - def tell(self): - pos = self.fp.tell() - if self.char: - pos -= 1 - return pos def readline(self): - s = b"" - if self.char: - c = self.char - self.char = None - else: - c = self.fp.read(1) + s = self.char or b"" + self.char = None + + c = self.fp.read(1) while c not in b"\r\n": s = s + c c = self.fp.read(1) - if c == b"\r": - self.char = self.fp.read(1) - if self.char == b"\n": - self.char = None - return s.decode('latin-1') + "\n" - -class PSFpWrapper: - """ Wrapper for a filepointer that has been opened in universal mode """ - def __init__(self,fp): - self.fp = fp - - def __getattr__(self, attr): - """ Delegate everything that we're not wrapping """ - return getattr(self.fp, attr) - - def read(self, count): - return self.fp.read(count).decode('latin-1') - - def readbinary(self, count): - return self.fp.read(count) - + 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 s.decode('latin-1') def _accept(prefix): return prefix[:4] == b"%!PS" or i32(prefix) == 0xC6D3D0C5 @@ -209,6 +179,8 @@ class EpsImageFile(ImageFile.ImageFile): format = "EPS" format_description = "Encapsulated Postscript" + mode_map = { 1:"L", 2:"LAB", 3:"RGB" } + def _open(self): (length, offset) = self._find_offset(self.fp) @@ -216,8 +188,8 @@ class EpsImageFile(ImageFile.ImageFile): # convert line endings and decode to latin-1. try: if bytes is str: - # Python2, need the decode to latin-1 on read. - fp = PSFpWrapper(open(self.fp.name, "Ur")) + # Python2, no encoding conversion necessary + fp = open(self.fp.name, "Ur") else: # Python3, can use bare open command. fp = open(self.fp.name, "Ur", encoding='latin-1') @@ -236,18 +208,12 @@ class EpsImageFile(ImageFile.ImageFile): # # Load EPS header - s = fp.readline() + s = fp.readline().strip('\r\n') while s: - if len(s) > 255: raise SyntaxError("not an EPS file") - if s[-2:] == '\r\n': - s = s[:-2] - elif s[-1:] == '\n': - s = s[:-1] - try: m = split.match(s) except re.error as v: @@ -269,9 +235,7 @@ class EpsImageFile(ImageFile.ImageFile): pass else: - m = field.match(s) - if m: k = m.group(1) @@ -281,16 +245,16 @@ class EpsImageFile(ImageFile.ImageFile): self.info[k[:8]] = k[9:] else: self.info[k] = "" - elif s[0:1] == '%': + elif s[0] == '%': # handle non-DSC Postscript comments that some # tools mistakenly put in the Comments section pass else: raise IOError("bad EPS header") - s = fp.readline() + s = fp.readline().strip('\r\n') - if s[:1] != "%": + if s[0] != "%": break @@ -302,44 +266,21 @@ class EpsImageFile(ImageFile.ImageFile): if len(s) > 255: raise SyntaxError("not an EPS file") - if s[-2:] == '\r\n': - s = s[:-2] - elif s[-1:] == '\n': - s = s[:-1] - if s[:11] == "%ImageData:": # Encoded bitmapped image. - [x, y, bi, mo, z3, z4, en, id] =\ - s[11:].split(None, 7) + [x, y, bi, mo, z3, z4, en, id] = s[11:].split(None, 7) - x = int(x); y = int(y) - - bi = int(bi) - mo = int(mo) - - en = int(en) - - if en == 1: - decoder = "eps_binary" - elif en == 2: - decoder = "eps_hex" - else: + if int(bi) != 8: break - if bi != 8: - break - if mo == 1: - self.mode = "L" - elif mo == 2: - self.mode = "LAB" - elif mo == 3: - self.mode = "RGB" - else: + try: + self.mode = self.mode_map[int(mo)] + except: break - self.size = (x,y) + self.size = int(x), int(y) return - s = fp.readline() + s = fp.readline().strip('\r\n') if not s: break From 6dc276599eb15647020e40b623f64fb7e78baf3a Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 2 Sep 2014 22:47:05 -0700 Subject: [PATCH 251/311] test for all the different line ending characters --- Tests/test_file_eps.py | 65 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/Tests/test_file_eps.py b/Tests/test_file_eps.py index 5b369552a..4c8d1c014 100644 --- a/Tests/test_file_eps.py +++ b/Tests/test_file_eps.py @@ -148,6 +148,71 @@ class TestFileEps(PillowTestCase): # open image with binary preview Image.open(file3) + def _test_readline(self,t, ending): + ending = "Failure with line ending: %s" %("".join("%s" %ord(s) for s in ending)) + self.assertEqual(t.readline().strip('\r\n'), 'something', ending) + self.assertEqual(t.readline().strip('\r\n'), 'else', ending) + self.assertEqual(t.readline().strip('\r\n'), 'baz', ending) + self.assertEqual(t.readline().strip('\r\n'), 'bif', ending) + + def _test_readline_stringio(self, test_string, ending): + # check all the freaking line endings possible + try: + import StringIO + except: + # don't skip, it skips everything in the parent test + return + t = StringIO.StringIO(test_string) + self._test_readline(t, ending) + + def _test_readline_io(self, test_string, ending): + import io + t = io.StringIO(test_string) + self._test_readline(t, ending) + + def _test_readline_file_universal(self, test_string, ending): + f = self.tempfile('temp.txt') + with open(f,'wb') as w: + if str is bytes: + w.write(test_string) + else: + w.write(test_string.encode('UTF-8')) + + with open(f,'rU') as t: + self._test_readline(t, ending) + + def _test_readline_file_psfile(self, test_string, ending): + f = self.tempfile('temp.txt') + with open(f,'wb') as w: + if str is bytes: + w.write(test_string) + else: + w.write(test_string.encode('UTF-8')) + + with open(f,'rb') as r: + t = EpsImagePlugin.PSFile(r) + self._test_readline(t, ending) + + def test_readline(self): + # check all the freaking line endings possible from the spec + #test_string = u'something\r\nelse\n\rbaz\rbif\n' + line_endings = [u'\r\n', u'\n'] + not_working_endings = [u'\n\r', u'\r'] + strings = [u'something', u'else', u'baz', u'bif'] + + for ending in line_endings: + s = ending.join(strings) + self._test_readline_stringio(s, ending) + self._test_readline_io(s, ending) + self._test_readline_file_universal(s, ending) + + for ending in not_working_endings: + # these only work with the PSFile, while they're in spec, + # they're not likely to be used + s = ending.join(strings) + self._test_readline_file_psfile(s, ending) + + if __name__ == '__main__': unittest.main() From 81076d5f29d207e219224c29310677151f7c1b2b Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 2 Sep 2014 23:09:04 -0700 Subject: [PATCH 252/311] Don't copy input file for GS if not necessary, length variable name fix --- PIL/EpsImagePlugin.py | 49 ++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/PIL/EpsImagePlugin.py b/PIL/EpsImagePlugin.py index 97680fec8..58a4b7220 100644 --- a/PIL/EpsImagePlugin.py +++ b/PIL/EpsImagePlugin.py @@ -86,26 +86,32 @@ def Ghostscript(tile, size, fp, scale=1): out_fd, outfile = tempfile.mkstemp() os.close(out_fd) - in_fd, infile = tempfile.mkstemp() - os.close(in_fd) - - # ignore length and offset! - # ghostscript can read it - # copy whole file to read in ghostscript - with open(infile, 'wb') as f: - # fetch length of fp - fp.seek(0, 2) - fsize = fp.tell() - # ensure start position - # go back - fp.seek(0) - lengthfile = fsize - while lengthfile > 0: - s = fp.read(min(lengthfile, 100*1024)) - if not s: - break - length -= len(s) - f.write(s) + + infile_temp = None + if hasattr(fp, 'name') and os.path.exists(fp.name): + infile = fp.name + else: + in_fd, infile_temp = tempfile.mkstemp() + os.close(in_fd) + infile = infile_temp + + # ignore length and offset! + # ghostscript can read it + # copy whole file to read in ghostscript + with open(infile_temp, 'wb') as f: + # fetch length of fp + fp.seek(0, 2) + fsize = fp.tell() + # ensure start position + # go back + fp.seek(0) + lengthfile = fsize + while lengthfile > 0: + s = fp.read(min(lengthfile, 100*1024)) + if not s: + break + lengthfile -= len(s) + f.write(s) # Build ghostscript command command = ["gs", @@ -136,7 +142,8 @@ def Ghostscript(tile, size, fp, scale=1): finally: try: os.unlink(outfile) - os.unlink(infile) + if infile_temo: + os.unlink(infile_temp) except: pass return im From 918c77e98ac0a55586b322b5b05b46ea46ce37c6 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Tue, 2 Sep 2014 23:33:10 -0700 Subject: [PATCH 253/311] Py3.2 fix --- Tests/test_file_eps.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Tests/test_file_eps.py b/Tests/test_file_eps.py index 4c8d1c014..96b39b286 100644 --- a/Tests/test_file_eps.py +++ b/Tests/test_file_eps.py @@ -196,9 +196,9 @@ class TestFileEps(PillowTestCase): def test_readline(self): # check all the freaking line endings possible from the spec #test_string = u'something\r\nelse\n\rbaz\rbif\n' - line_endings = [u'\r\n', u'\n'] - not_working_endings = [u'\n\r', u'\r'] - strings = [u'something', u'else', u'baz', u'bif'] + line_endings = ['\r\n', '\n'] + not_working_endings = ['\n\r', '\r'] + strings = ['something', 'else', 'baz', 'bif'] for ending in line_endings: s = ending.join(strings) From afcb8980ed8b6232732b032a056f928d6aaab6fa Mon Sep 17 00:00:00 2001 From: Hugo Date: Wed, 3 Sep 2014 10:07:30 +0300 Subject: [PATCH 254/311] Update CHANGES.rst [CI skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 59e709011..b8dbab630 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Fix for reading multipage TIFFs #885 + [kostrom, wiredfool] + - Correctly handle saving gray and CMYK JPEGs with quality-keep #857 [etienned] From 675014b26acea504b34c0a321d9b901bbae22bb2 Mon Sep 17 00:00:00 2001 From: Hugo Date: Wed, 3 Sep 2014 22:44:02 +0300 Subject: [PATCH 255/311] Public domain image of Grace Hopper: http://www.history.navy.mil/photos/images/h96000/h96919k.jpg --- Tests/images/h96919k.jpg | Bin 0 -> 106058 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/h96919k.jpg diff --git a/Tests/images/h96919k.jpg b/Tests/images/h96919k.jpg new file mode 100644 index 0000000000000000000000000000000000000000..096ed32c4a74f51fae44a1452d44062618ced04c GIT binary patch literal 106058 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

C@x^|{efSP5NF|CztzpK`L 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˧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 Mq)P4j{^LLY*>-kbp#T5? literal 0 HcmV?d00001 From 2798589a24570723a7bbbbd2ccd1dd6f9c5a926f Mon Sep 17 00:00:00 2001 From: Hugo Date: Wed, 3 Sep 2014 22:58:03 +0300 Subject: [PATCH 256/311] Crop, resize and rename --- Tests/images/h96919k.jpg | Bin 106058 -> 0 bytes tests/images/hopper.jpg | Bin 0 -> 6412 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Tests/images/h96919k.jpg create mode 100644 tests/images/hopper.jpg diff --git a/Tests/images/h96919k.jpg b/Tests/images/h96919k.jpg deleted file mode 100644 index 096ed32c4a74f51fae44a1452d44062618ced04c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106058 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

C@x^|{efSP5NF|CztzpK`L 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˧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 Mq)P4j{^LLY*>-kbp#T5? diff --git a/tests/images/hopper.jpg b/tests/images/hopper.jpg new file mode 100644 index 0000000000000000000000000000000000000000..82ab5b96773001d8810a28ceb487ab3069dc6fa9 GIT binary patch literal 6412 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 literal 0 HcmV?d00001 From c3d3789da7c43f5d248ac0b246178137718d420c Mon Sep 17 00:00:00 2001 From: Hugo Date: Thu, 4 Sep 2014 08:00:41 +0300 Subject: [PATCH 257/311] Created with ImageMagick: convert hopper.jpg hopper.ppm --- tests/images/hopper.ppm | Bin 0 -> 49205 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/images/hopper.ppm diff --git a/tests/images/hopper.ppm b/tests/images/hopper.ppm new file mode 100644 index 0000000000000000000000000000000000000000..346e423920684a82fda2d8b2f1b215a1bc33e3a2 GIT binary patch literal 49205 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 oG?3* Date: Thu, 4 Sep 2014 08:03:55 +0300 Subject: [PATCH 258/311] Add hopper() to eventually replace lena() --- Tests/helper.py | 20 ++++++++++++++++++++ Tests/test_image.py | 12 ++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/Tests/helper.py b/Tests/helper.py index 3f7913b11..637e77f9c 100644 --- a/Tests/helper.py +++ b/Tests/helper.py @@ -180,6 +180,26 @@ def tostring(im, format, **options): return out.getvalue() +def hopper(mode="RGB", cache={}): + from PIL import Image + im = None + # FIXME: Implement caching to reduce reading from disk but so an original + # copy is returned each time and the cached image isn't modified by tests + # (for fast, isolated, repeatable tests). + # im = cache.get(mode) + if im is None: + if mode == "RGB": + im = Image.open("Tests/images/hopper.ppm") + elif mode == "F": + im = lena("L").convert(mode) + elif mode[:4] == "I;16": + im = lena("I").convert(mode) + else: + im = lena("RGB").convert(mode) + # cache[mode] = im + return im + + def lena(mode="RGB", cache={}): from PIL import Image im = None diff --git a/Tests/test_image.py b/Tests/test_image.py index 46669db4b..1c60cca17 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, lena +from helper import unittest, PillowTestCase, hopper from PIL import Image import sys @@ -58,7 +58,7 @@ class TestImage(PillowTestCase): def test_expand_x(self): # Arrange - im = lena() + im = hopper() orig_size = im.size xmargin = 5 @@ -71,7 +71,7 @@ class TestImage(PillowTestCase): def test_expand_xy(self): # Arrange - im = lena() + im = hopper() orig_size = im.size xmargin = 5 ymargin = 3 @@ -85,7 +85,7 @@ class TestImage(PillowTestCase): def test_getbands(self): # Arrange - im = lena() + im = hopper() # Act bands = im.getbands() @@ -95,7 +95,7 @@ class TestImage(PillowTestCase): def test_getbbox(self): # Arrange - im = lena() + im = hopper() # Act bbox = im.getbbox() @@ -185,7 +185,7 @@ class TestImage(PillowTestCase): def test_effect_spread(self): # Arrange - im = lena() + im = hopper() distance = 10 # Act From add81ac00ad4bd0b8a31a8c4f59272a1444d8165 Mon Sep 17 00:00:00 2001 From: Hugo Date: Thu, 4 Sep 2014 08:17:04 +0300 Subject: [PATCH 259/311] Created with ImageMagick: convert hopper.jpg hopper.gif --- tests/images/hopper.gif | Bin 0 -> 15305 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/images/hopper.gif diff --git a/tests/images/hopper.gif b/tests/images/hopper.gif new file mode 100644 index 0000000000000000000000000000000000000000..2e7f5ade8b7d3c084a54e6618bb969567349caf5 GIT binary patch literal 15305 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 Date: Thu, 4 Sep 2014 08:26:50 +0300 Subject: [PATCH 260/311] Fix path --- {tests => Tests}/images/hopper.jpg | Bin {tests => Tests}/images/hopper.ppm | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename {tests => Tests}/images/hopper.jpg (100%) rename {tests => Tests}/images/hopper.ppm (100%) diff --git a/tests/images/hopper.jpg b/Tests/images/hopper.jpg similarity index 100% rename from tests/images/hopper.jpg rename to Tests/images/hopper.jpg diff --git a/tests/images/hopper.ppm b/Tests/images/hopper.ppm similarity index 100% rename from tests/images/hopper.ppm rename to Tests/images/hopper.ppm From c1c77c4a635a874d057cda4cbc5a80c8b1daff54 Mon Sep 17 00:00:00 2001 From: Hugo Date: Thu, 4 Sep 2014 08:42:12 +0300 Subject: [PATCH 261/311] Fix path --- {tests => Tests}/images/hopper.gif | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename {tests => Tests}/images/hopper.gif (100%) diff --git a/tests/images/hopper.gif b/Tests/images/hopper.gif similarity index 100% rename from tests/images/hopper.gif rename to Tests/images/hopper.gif From b248dcd0195abd93336c527da4543e9136c83098 Mon Sep 17 00:00:00 2001 From: Hugo Date: Thu, 4 Sep 2014 08:42:46 +0300 Subject: [PATCH 262/311] Image created by Pillow via test_effect_spread() --- Tests/images/effect_spread.png | Bin 43292 -> 40903 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Tests/images/effect_spread.png b/Tests/images/effect_spread.png index df7cfa4745a9acdf92a4baf1727c731741c3521d..01016355ae0403c2266226f1affb2ff042f031a4 100644 GIT binary patch literal 40903 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 From d7f7965aa2960ab7247619235e45e76ca990bf87 Mon Sep 17 00:00:00 2001 From: Hugo Date: Thu, 4 Sep 2014 08:44:46 +0300 Subject: [PATCH 263/311] Replace lena.gif with hopper.gif --- Tests/images/lena.gif | Bin 16336 -> 0 bytes Tests/test_file_gif.py | 17 +++++++++-------- Tests/test_image_load.py | 10 +++++----- Tests/test_shell_injection.py | 12 ++++++------ selftest.py | 10 +++++----- 5 files changed, 25 insertions(+), 24 deletions(-) delete mode 100644 Tests/images/lena.gif diff --git a/Tests/images/lena.gif b/Tests/images/lena.gif deleted file mode 100644 index 64a9b93c89b6a22d4760777b34790a57344da9cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16336 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 JABO>={vU+{Ez$r0 diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py index bd4a6e76c..d285ec2ae 100644 --- a/Tests/test_file_gif.py +++ b/Tests/test_file_gif.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, lena, netpbm_available +from helper import unittest, PillowTestCase, hopper, netpbm_available from PIL import Image from PIL import GifImagePlugin @@ -6,8 +6,9 @@ from PIL import GifImagePlugin codecs = dir(Image.core) # sample gif stream -file = "Tests/images/lena.gif" -with open(file, "rb") as f: +TEST_GIF = "Tests/images/hopper.gif" + +with open(TEST_GIF, "rb") as f: data = f.read() @@ -18,7 +19,7 @@ class TestFileGif(PillowTestCase): self.skipTest("gif support not available") # can this happen? def test_sanity(self): - im = Image.open(file) + im = Image.open(TEST_GIF) im.load() self.assertEqual(im.mode, "P") self.assertEqual(im.size, (128, 128)) @@ -45,7 +46,7 @@ class TestFileGif(PillowTestCase): def test_roundtrip(self): out = self.tempfile('temp.gif') - im = lena() + im = hopper() im.save(out) reread = Image.open(out) @@ -54,17 +55,17 @@ class TestFileGif(PillowTestCase): def test_roundtrip2(self): # see https://github.com/python-pillow/Pillow/issues/403 out = self.tempfile('temp.gif') - im = Image.open('Tests/images/lena.gif') + im = Image.open(TEST_GIF) im2 = im.copy() im2.save(out) reread = Image.open(out) - self.assert_image_similar(reread.convert('RGB'), lena(), 50) + self.assert_image_similar(reread.convert('RGB'), hopper(), 50) def test_palette_handling(self): # see https://github.com/python-pillow/Pillow/issues/513 - im = Image.open('Tests/images/lena.gif') + im = Image.open(TEST_GIF) im = im.convert('RGB') im = im.resize((100, 100), Image.ANTIALIAS) diff --git a/Tests/test_image_load.py b/Tests/test_image_load.py index 786cd6ad8..b1fc73182 100644 --- a/Tests/test_image_load.py +++ b/Tests/test_image_load.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, lena +from helper import unittest, PillowTestCase, hopper from PIL import Image @@ -9,21 +9,21 @@ class TestImageLoad(PillowTestCase): def test_sanity(self): - im = lena() + im = hopper() pix = im.load() - self.assertEqual(pix[0, 0], (223, 162, 133)) + self.assertEqual(pix[0, 0], (20, 20, 70)) def test_close(self): - im = Image.open("Tests/images/lena.gif") + im = Image.open("Tests/images/hopper.gif") im.close() self.assertRaises(ValueError, lambda: im.load()) self.assertRaises(ValueError, lambda: im.getpixel((0, 0))) def test_contextmanager(self): fn = None - with Image.open("Tests/images/lena.gif") as im: + with Image.open("Tests/images/hopper.gif") as im: fn = im.fp.fileno() os.fstat(fn) diff --git a/Tests/test_shell_injection.py b/Tests/test_shell_injection.py index ef80bfc98..d6d08c2d4 100644 --- a/Tests/test_shell_injection.py +++ b/Tests/test_shell_injection.py @@ -6,8 +6,8 @@ import shutil from PIL import Image, JpegImagePlugin, GifImagePlugin -test_jpg = "Tests/images/lena.jpg" -test_gif = "Tests/images/lena.gif" +TEST_JPG = "Tests/images/hopper.jpg" +TEST_GIF = "Tests/images/hopper.gif" test_filenames = ( "temp_';", @@ -31,24 +31,24 @@ class TestShellInjection(PillowTestCase): def test_load_djpeg_filename(self): for filename in test_filenames: src_file = self.tempfile(filename) - shutil.copy(test_jpg, src_file) + shutil.copy(TEST_JPG, src_file) im = Image.open(src_file) im.load_djpeg() @unittest.skipUnless(cjpeg_available(), "cjpeg not available") def test_save_cjpeg_filename(self): - im = Image.open(test_jpg) + im = Image.open(TEST_JPG) self.assert_save_filename_check(im, JpegImagePlugin._save_cjpeg) @unittest.skipUnless(netpbm_available(), "netpbm not available") def test_save_netpbm_filename_bmp_mode(self): - im = Image.open(test_gif).convert("RGB") + im = Image.open(TEST_GIF).convert("RGB") self.assert_save_filename_check(im, GifImagePlugin._save_netpbm) @unittest.skipUnless(netpbm_available(), "netpbm not available") def test_save_netpbm_filename_l_mode(self): - im = Image.open(test_gif).convert("L") + im = Image.open(TEST_GIF).convert("L") self.assert_save_filename_check(im, GifImagePlugin._save_netpbm) diff --git a/selftest.py b/selftest.py index 29af34ad2..85add0909 100644 --- a/selftest.py +++ b/selftest.py @@ -49,13 +49,13 @@ def testimage(): Or open existing files: - >>> im = Image.open(os.path.join(ROOT, "Tests/images/lena.gif")) + >>> im = Image.open(os.path.join(ROOT, "Tests/images/hopper.gif")) >>> _info(im) ('GIF', 'P', (128, 128)) - >>> _info(Image.open(os.path.join(ROOT, "Tests/images/lena.ppm"))) + >>> _info(Image.open(os.path.join(ROOT, "Tests/images/hopper.ppm"))) ('PPM', 'RGB', (128, 128)) >>> try: - ... _info(Image.open(os.path.join(ROOT, "Tests/images/lena.jpg"))) + ... _info(Image.open(os.path.join(ROOT, "Tests/images/hopper.jpg"))) ... except IOError as v: ... print(v) ('JPEG', 'RGB', (128, 128)) @@ -63,7 +63,7 @@ def testimage(): PIL doesn't actually load the image data until it's needed, or you call the "load" method: - >>> im = Image.open(os.path.join(ROOT, "Tests/images/lena.ppm")) + >>> im = Image.open(os.path.join(ROOT, "Tests/images/hopper.ppm")) >>> print(im.im) # internal image attribute None >>> a = im.load() @@ -73,7 +73,7 @@ def testimage(): You can apply many different operations on images. Most operations return a new image: - >>> im = Image.open(os.path.join(ROOT, "Tests/images/lena.ppm")) + >>> im = Image.open(os.path.join(ROOT, "Tests/images/hopper.ppm")) >>> _info(im.convert("L")) (None, 'L', (128, 128)) >>> _info(im.copy()) From 8f2d707a7a5a5c3b4b09ea61b5ddf2f79315a6eb Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 4 Sep 2014 09:40:14 +0300 Subject: [PATCH 264/311] Update epsilona for hopper --- Tests/test_image.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_image.py b/Tests/test_image.py index 1c60cca17..26e45b10a 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -194,7 +194,7 @@ class TestImage(PillowTestCase): # Assert self.assertEqual(im.size, (128, 128)) im3 = Image.open('Tests/images/effect_spread.png') - self.assert_image_similar(im2, im3, 80) + self.assert_image_similar(im2, im3, 110) if __name__ == '__main__': unittest.main() From 78e7fe025eb841754d673323addb572f8d3eb7b3 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 4 Sep 2014 09:42:31 +0300 Subject: [PATCH 265/311] Fix constant name --- Tests/test_file_gif.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py index d285ec2ae..72c9d9db4 100644 --- a/Tests/test_file_gif.py +++ b/Tests/test_file_gif.py @@ -101,7 +101,7 @@ class TestFileGif(PillowTestCase): @unittest.skipUnless(netpbm_available(), "netpbm not available") def test_save_netpbm_bmp_mode(self): - img = Image.open(file).convert("RGB") + img = Image.open(TEST_GIF).convert("RGB") tempfile = self.tempfile("temp.gif") GifImagePlugin._save_netpbm(img, 0, tempfile) @@ -109,7 +109,7 @@ class TestFileGif(PillowTestCase): @unittest.skipUnless(netpbm_available(), "netpbm not available") def test_save_netpbm_l_mode(self): - img = Image.open(file).convert("L") + img = Image.open(TEST_GIF).convert("L") tempfile = self.tempfile("temp.gif") GifImagePlugin._save_netpbm(img, 0, tempfile) From 699b6625113f6f2220133520aa8eadb34691a4db Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 4 Sep 2014 09:50:47 +0300 Subject: [PATCH 266/311] Update selftest.py for hopper --- selftest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/selftest.py b/selftest.py index 85add0909..b13dfec28 100644 --- a/selftest.py +++ b/selftest.py @@ -89,9 +89,9 @@ def testimage(): >>> len(im.getdata()) 16384 >>> im.getextrema() - ((61, 255), (26, 234), (44, 223)) + ((0, 255), (0, 255), (0, 255)) >>> im.getpixel((0, 0)) - (223, 162, 133) + (20, 20, 70) >>> len(im.getprojection()) 2 >>> len(im.histogram()) From 5b01333f62574b81b651686bc26019d3dc778595 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 4 Sep 2014 10:24:13 +0300 Subject: [PATCH 267/311] Created with ImageMagick then renamed: convert hopper.ppm -monochrome hopper.sgi --- Tests/images/hopper.bw | Bin 0 -> 7864 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/hopper.bw diff --git a/Tests/images/hopper.bw b/Tests/images/hopper.bw new file mode 100644 index 0000000000000000000000000000000000000000..c9dabf64a5ac21508032138fdbd6a6427bc750ec GIT binary patch literal 7864 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 BY8n6l literal 0 HcmV?d00001 From 513422323b30345282d77fda61c327ad4afd7404 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 4 Sep 2014 10:29:39 +0300 Subject: [PATCH 268/311] Created with ImageMagick then renamed: convert hopper.ppm hopper.sgi --- Tests/images/hopper.rgb | Bin 0 -> 52077 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/hopper.rgb diff --git a/Tests/images/hopper.rgb b/Tests/images/hopper.rgb new file mode 100644 index 0000000000000000000000000000000000000000..a72fc5b1514d6fbb1a11800cdbecdcaf10833c86 GIT binary patch literal 52077 zcmeFZg<}-g-amYn+1;#-?aa>lZag8lOR=^?P=LcK`Bj7n4+t@*5hAMzvEXd=BgB?Vh=V7@SxtyLfDq3vLj3y>5^$1`peG3l zZXzV~Swh0zA*AyZLL!b5($z{xw>(06s0itqMM!TAA$>9k>H8BQ{i6sO&`ijnp@a-R zLdXyYAwx?E87>eqqJWSmL_(fiPsk{YHTqRT#&jiQ>^4Hi_aI~f?w>S(kjZBVc^YF+ z#e1e>%x7*B@@yC(GuIOG+((4W8bQblcy!GuI@AS7BLB&LXvIE)`(NXRlRA&JR^tN?9RrVz5~J3`jXCM4-PA?q;rg zcxHVJAsc=mWFwy4^e;lTj3H#}HA1#OMaZjH3E7G7yDkv22W#GYk&yingdD)!UjuCp zf!>E7C*%ldacm|b$KNC5#6m(&enZIVctXyA=5Hnta_$d8E-WMDBF>j)5pwwxLaw|* z$kp!&;V^gp9w8#mQYY{~lMn^-v*r+DH-i6|zYBbFZzsgt1^hooNFZnsbcv7<&_DDp zA>q@(|3*T(U~XMY2-3`67p0y_`j2oaky{%Awnkh1OKt!DH!`{j5Tc%_zzmo09~G~1^<60 zYvJmfG1o}mWfd5+vS!x6SF^^al{Kq^J z4B$WJocIv@2k%$@NyzGj;Qw2Mti{~dVeToR;6Heu?gIadz<;bS8|%w?n~=Pxz<OH^l9+_T|(ZN3;zF`kW-k;=^qI>3mJIx z7edZ21OIVu!1YTX64E#y{QruOYti68)+ek1|J%X;4Cp>&K*8DO2mWKeP6_<4hwg)3 zUW^$q5d41=x{o=A+=lKy3;wr4_lJT1SZ_BD{KxY>HQ+zi*$3yoiQxY?(EXXPw(ETak z{}J$B58Yn`{$GRcLoa57Cvz~~+!5eEWM_Ui@E>zufZrB^ev9$m$nDU55BOgN-RHso zV(3233EAL(J0Z)H!FvMTj|cxhhVFyLYcX~*=901vx{qhmYruQRde$oN|8wa6H1PjC zbiW7qk8z6a;6L71iuaXgLibtlAKz;r3$-vVbw5D&W59pBf72}RzZtrZwQU3MUmXMf zUxn_E1po2Qy-$MwhoSqBy@Pw8`3jS zAfN?F!a;vuha&|CB_zFv{!Wc5{hWYfH4gfYj>I>!I_c2mMUv zMAt)~p$Gj;pXpd*$Nls-`V76Fe(qQY9gn`h<9Z4{)BET>^jW%2`a3<-qhmfP_}noT zT??fTeP_o(uXT(;KhyW6;GplIW75x*{`4MtjXs}(gN{wV)6X3=qTf5{(J>aiMxUkM z=|Ml!gI=d=p?sz9r{mIt-qSG$x-R;;gZFgI4jOjQn!bz9i9Sc)Ne}u=#~A+{pWfFo z2ISnwXF4`LI^>{(|0%fEaW6f0j7QIuw)7gEf5&|3wSUs2gP-&oy^o&hJt;UST|0Qv z!GHQYeWv3*9ek$ipks9KpWfHO7y4`pj(_r>e(#to{Y(#fAH7E3^H2VF@RFV>ojPdP zaW6g7>y$Pre;*ys(C;1Z`{!@;8l7{;(J@}fb^4ti9b-}6()rOf(Y4d@=_NdEr_=7R^H$l)ix!KSGa6W-i z2B^|W+2;KICeDOmS(Ay5!E%1QhAU-RQ739elWgSZ%Z(;AdxjT8vt%)vWW6BCifk4I z{KiUlhs|bpI0VsV^9Y>eba+HgcG;X}t%)<}j4a1#c+RZhbMd%rl1ye+HA%IFlohV+ zqA_u1v&pE}8(6bM7oH&qX0xBTSvJagMYIc&DELM-ae`#A*=-J%w{upPhjE?q5AeF| zHoMDVv)i4)_+|}oIIK=r*U-S=uA;}^?jIBq92yepWm!&fI_!3b+w1j+HYvD^YPISP zsk!+2^Dc!m7!5|A=Qx&?IK7{N6-$XhUiYN9HI zWYiZ8GcsHTxMySxc}COU6W}y#5ooUKWELc?K?Gma##9r-zR3%qASdx6%UevMKq(_x zWQ$_4$dcJ(mR(-ABuH+%V0L?Dt66l~T`rF(*-X5igJdyWE-y;B1J9~nR&69TdF%S9 zO?anKuk+Iz@ird?LD9qH9>7+v^|dZ+CYNwJLUJh|A#)ae0EQ7DyI21$KG;-4>e^)KgWWx=D&I z9AD&AM4iz{g`ZdZW@r{LTQegSm_^2Juo^#;V6ocl zW}cH=!JQ)%r#r;o;R%cI+8qA=4%y}j4L5XB>D_LR*^c!<{v?4lnv75n7M&;XkYztV)?n0{(!eH&=oQS4Gjn>yAV_9RTC~_G{UyPu zS1haq&9I1~&FhpDuT2tN7XLuIjWu;*b+Q75;aFaj&60#gs8UsRWLI|jpXcyjcp#|DiaJ@N?)W5l{FvdA;WOtWm^G^!NUYEoZQGe>LS z4FZf0gq`ICQFt`I3EvrGp21``7_1zmL}NNn=L93gvb>QGvIzzWG!mg*Hk-waN!Z+j zr;YB%8q9(H9}nynGQtzm!=KZ1(&;sRgs~e9W-BA)^FAI+W{_P~rK%Ada>G}BBke*$~hIAg;RfcePQj>Cv$!wDxxXtQxdmJ{4J)pPhlB$*DHJmGQilUx1 zuxdV&;~<6_zJ!B@LtF%zldRwk4^H^R6Ly#3u0Z)Mp-+wA9g^A)b7lpzEGy3N;j@>& z_5Rswr&?d%`0DYQg&RJM%iFV|YIoDMlgCe=I(oE+S|xGt0+L|Rn_wDPttuN@kXO4t zR_DhXMA&&_rU@#7iIjrOumWJVQDfjV8iPS?%r;>{a8hdSBx^7^hxF6Ho=Xsai_PV+ z%N%P78?^kjeL2BW(A>?J7S^o4KKZ518PE5NaJV~n3m+I0BpY;`R>+2mi55XpZBnf# zc__(QB}o+6c&Q5~o2kpVTWp;N_Ki%8?A&iu=FWzxHOD_4HvLBZ3y(iFG}sa7^1kc| zwHxURtPaMRDa)?l;i@LpZL+`V+>xHLOjl2>951k<#2Z*!P(+_$Cur^j}>M>!em+2?DPh9?j2wE+Tp{u_SDuMtk2Hbo>j9d zVa@KtZEwB%VauTdLs$a`G4rv36JR#{JFO%6o9Zg;dcjDI3&XDGcpcD-Mkjefx(*mQ z^~I=Vsrkial~uV;17k{M8O~2Q#Y;2t9`E;@A4ic8g+$a22s)j~Idsg>?qj+RomZF~ zv!Zy;oSenuMn`mUv7)p0E6z@OAOJ?BXvi!|qSQlG3l{9o$;=e}AnuSj6J*3?IM%h%&$l8{~jVlI(unM~xjD zH)}!KuIl8}iUpB}FYI@AUnfZ+ou0^O%- z0131VnwOZ6m|js?xB1oG`;WYF@b!Ir_iW!10-wO&fL(YbMzYO%_H^>B4gIJ9Vp@s> zXCc|0?!c~dD|UX_{#pI5$ipeMsYlmTMJK=4*m~pNAHLgiK03_Cu^<_A%EXBZ$9M0v zhGcE2*%)9Hw5ClI?ecwQMMo`Jm6u;qwSLpKUHi7ax@q&Kx@r&n4a23eCbe))gs7Mf z?v5Ih8w~4hFmh&Daaq9!QIG_C*Rk8aEFYgZ`{>H-=*{ykB+cKP@O(Fa=Y+JHr&L-6 zmK>M}c*rcX@(@)ec$9C`Av18}fO(8z# zOqBxEc6(fQ`N;m*3B_F{C-5jtkvGKcaJm6FHQp!ZpKd>!v~f*S$)>c!iJvEpuSs9p zKce%Pc}dUpbP+3L)?#(I?TXzJ{vx>WHp#x;cxHxEVi{qx&-$>+w49?~eY_#HXv_B9 z`;Hzyed_p;gNOHS3I(1MZa_CDb5<%jR|t_e5^4pMZ)7xF7)CWb%k}Cc_=q zlZR>9`F#y=e2<(klw?x+YoC8myDontB=PmvP8>aSV9#s2>q99o7QvY{yST* zoq4x3d&lvM7cQPUfBw`PhfY;Y))=9WHPo6wq$S15rCqrFdTQ0_v1Uo3v)U~Ivx6Dd zV1>25P&@mDNh4k!`&7TDyDvt}8iszPYLS()BAB&K|$GVFs)z1)}h*HmBPg7^vhmzI`ln zL&MXafMEY%Ch!;qq+XBP3Df78Rlg)*;q$4{%NAw4^lC92_6tM04wyW7`uOg40(FFc zge6m4t}c11R@HkXuchH!HUc%EF-AB6>&W*xbn%04ZtbZ#aPq?0^JgxcJ$mTq=4n=# zBe*T_OJXI_;8crWQ(a_fLO+SMa zFtD@BW3w5E$!ak10EQ+5j4;nFP_0rWklYP5>!S=5n`%wR*-oL`kKOp-a((`mJ+B`) zwEy+Pdv@%rnjj!Bfy1U60g#NSuk*pP|GK+9DLWm2L$(2Z?}X=sm9|-IZkRkdzh7uj zShp@=K@nx)PJw7uos1@jRZkIjCTybs+?meGD|`SoFEu&$B`pAn87Q!x7tQ)^d(XW6 zdGq$NT}Mv8aq9T#6R+(%v~ijhNI)&O!LrM4cR-l8=kW_4yt6Z{s4y@fC?M1m92^)F z6zK2oc6kEAp_xM2#0e88K0R&v%#_z{MyD)x0!TJ_gKUHX015v2uPAz|5P*j*A}hilNDEJW+Wy;z zTN6^l08|vg>aaWTR%mvhWcG#|blbMwY&(7YjSF|K{*1Ibi||J_%R15tUX-RgkQ(55 zqqtJFTop%}H&)eV=!`T^K_df})w=S}|Mq9gilXwe4OJh3K zO&Yew>6h`w{rf)^mQ-&%c=*_k+KhGcCa@|i;uJt7Q!8hZjEW?=tKR(buiwABTRVS- zgGvD|(I6Kz@>4|4thh%8c!E234haeidI7%FsuzHL1q6l`tPv>!=obVpunH=Hz&UMg zT9(>?fc|erxb<15+S`9EDX-gh^u+0Xn{v_?Op*ND7DiH=TLFnAf3G{d{_;2NfBxsa zEs=8q14E$?0RdiIMs_H$M|e=6(=}n>&=F6J95r&xj6^|lctxiyv9iN~w3RQ?w>vR! z&+rD-ZPmvl_pK{u4u>K1<<-J|)?_e>S%t-G<6nGs!k}(8EJ#73#At&bqhTC?E$cvv z#W~@`dw($Pg@4_tP3&WZ!;uiqFpfje6`R-Qa=>FcU5Y~q@yZUbM6+u_!B*aEv+{a9 z1!lLsa9(rsd|Zik>xXbe}N5N1X`gtd(>COdA2% z5Z74^g6x@a?5!Vu`|JL%Z52zq$%@qjQBYeBL15u~X#Nc=krg#kRVt(!U5X#0XTb%H z4ojeHfB`@rqgRcp2Ekii`r5R7PKS&TEYo`EgVvOqleaSFh3RAZb(YPn!Gc_i$<895 zvm1C9QHRIuaEDDl^ZqY?LK^R`Upc_-@q~d39^hF!B4dBMgR$=fH3Gw2;o+gO!)ilr z&*lP!tO(HIs;OymfD`^t12L&SBPVWOKX7G_8~_z+KaZQ4**6Qtt|-~_czoNoq3FQk{ZAo<4Y{fw*yCWql$=nWj5 znk^vt;(HJ7-@E_dr#n?kJfg(`i;GoS%)kz!#qB^)1vxV5kOg(HP6LQe!%xa=nkGhI z4o)BvdZH4(x`ymZPRY!3>uF2@UrF;seg>Of?>1o73Y9`cJ%Yojb1^bwP6za6?AHP! zvaf#9-u|Gy{rC5_t_VkV&hGZQ9l$KWrLrA72@LRhoemi>l}8ChYRm4j!_QOP3L}mP z((Z8C9f2=5s@_$7N>1HqYB>71BpHDre2g&Y&1&RmL^wx@8gjiANgiH8HWfMn!)jq2 zRz<2g|9SfZrv2Pse}2_EA;_!n7)Qo+i_I*!%q)@>va?%&Lu>EuQV=%iH5xxiq$EM2 zeZGh$v^jBX8c+iC8{1HT0kkoR?;EBf$;ZuwjWP%inzs=4#s*n%2!pLL#l3)fa z+*W&V+-23jV4U)AG+a0`)u|w)H>tS{%#Ty^`Eah(7E#er17}oF!~!<(ezMak_O80| zU3>d|roG_Tme&-ATYxs&tc)cC-p8)C?X=Sr8xJsuI2Xasqx1}{ugUjD6OTNA(J(zp z6$4jY{%YNZib2RFKtvzODjmQ0AL9emfo}%_CFrnd+^(h!wzqtExi>Q-~}zPi2eLHoBiC&1qMf*Zz?s_3l6K=3kX zDOhN<0(59j1wzb#^P?aI>2qLKzn535;#9FDcjv|p6{C>ShvC<<>Hiou$0w>Fx!P3r z$W-w%lGbJ}ytL`Jd(6YqKOcPEHV)|=j0|JwbIm0*mNWzR@yM7`gv|)4SVsvW6G)HA zphM=EW#cOlL)Va;yv*#(VOk^4nA7MaGby1dl(k4A!{=ZsKEkU-wYf-=5G`1oc1!n~ zwtJAf(m&dNxHH+|^devHcF~Frv2>JI&{hCO8zNf~d1Xs)f~X8T6Z))loPCxvz(z7R?AUlmR@^a2QiP%4(w7VH3sPTi$#4*B=ib{{H>vdn{%;Fc7Jwj#8Yakt7;9!;bqb zCCxb^<(E!1hRgF29QHiByi*k^$3!OveGblL(ffPYTLQAY*bNj@Sg2UrY!0VW<0wJAA{bf4 z?Nv+~DdK1gpwBH*a=YdHk!;)wh)sbRR;%T*AGtnISJcj0Az z_+$hPQ)$=^(4ny~av5w4B{5GUKT2WQtQJe~35$iF6wIhqCa+Y*QWEdnT2mhBM>C|X z2ITyo5h;Py+;)f|(wnSR;T4DU@|8axK6v=ogL~h7G#nTW?hvVCi&Z06Vk9~|HQ%rx z7zY4bQ1jXJ6V}5RvN#jxEiHo`sU(Ft*=ZT`)X0W_?Z~|`$n<7YqY0}?39Od3!NSOP z#p3lSZh!ltra#*sQi=NM^HEqC5<-wyhuU5Z#Ea0_AAr+kMQ{uF3j({HYD!@n%0aNe zGOM!;K2OE?F3F=}T<*2W0?L7@CJlmf3Z*lsz0`3#Fgm8o@vML~Se%^M`}zlfQ|%A# zfA_&MJ10Zu%v6%oEXV*<(gZPJCfpg7V;DZr0=6#`Mv(>x+3?Ivx3w!&(bRVA*iuuv z9Ayw%nuMp&|F5AbrT5b4iqaamL=+I(3Xc8nL6RT-@%uOLCD>3Qr3?m%=^#QbY?UuH ziizZ6IGRi_BY$3k7?+ZpCY)Krz~Ty3sj8af=47R%Mx&+#BZCyLA1F?3O$H@DB{y)3 z#F)=WGBOQzR9gV!4t)rd4VnJ&<5eEn0kJ|o*kNH~F}2cIAzgXiqovYPh#DGQj>{Zxz#4g*U34gm zoB#7b-G2I~4`(@$0>(;x+6!bv^8gSz%mo1!vgihL% z-J8~zu4c8gm_`kkkLpGLGd8u=8upq`*;pWI!D{1e^1|ys{PpnRy?Z~t|GXWj80N`G zb*la#7$$%;JL>e*bWxtuVmeqyY01(ukKwueGElvS6z6AVrpD;CsKVkYl(<0lBFZaz zEB@it8pulsxB6qT2OP8+gYFuCJHABGC|SPOw@RC z^_2FQ55OF&2ZrQR_g;CswJpm5 zcw)CP)^x}^;M^fK;T$^?%;n7}x*91f3D0qo2+n=M`H-)uz)^&TmGyYcF=ik^1h z(noWEv={ogKv4_LwWv)yeD;xA9heX&$J>o)rm%=M*4jBBvdy$H!h|!CF2?W~~hj-YCOU($J-XZyS8ZVwK4hcZ* z3-S-l1S-SeLm1UuCd>g!9;SV$!&0Dy$WAc^L<+KGLMNKTvXE&AZLCEIW+~a>^l1*6fn6yE z2dD#q`7@6#D=q>H%1KU9MowO&UeqvL4!sj^q?RAjuNF?yo8f!$7OE1kqc*1y8e_3r zc~s9}b$L+JW)p%OZsboKNc2#@>p*43%LEn$P~b?rRNT}EG0=%(x6AFc!sANz@W|5* z*E_vS^4l6O?#&5BvWI#m%z(-sqM}E}0JMiuz~`;JU~-TAVL7VNg3*E~SK?6tGJExi ziUoi4S6MAOCDqETk$YtMhqPL z%Nna7$h;lh3o_bm?3O^*;R&z=I~iN5!Z@;kYd~8jV5>he1^!5D`uhh4LHKFx1V7-m zOB`nj?y==;V-o_S4@lmPhHLvHLm@6^Em|vlN(TOd02*Yzq2gHfZp@dGLvSbm)cz83 z5eP3~VXY8k*%-);v~eyZ4(%YhR$*-U&^ljd00_<~mDJ&4?KC$4IB3vXl9$EDsTLz` znY(x6j^at8nuRMbqH;(T{GVfkBDDX(XP$E%Nk2T8D=QL^P$lYYaLl~kpMBEGI*~oG zA`I48Qqhc)PixPBR&-Pb@Dlc(I(f=aD!0KEC1n+=0;C0UDsrnb#t9Twls=+5b=kO? z9vVIqbD>qeRK!MmU?2k0e`|jQ86gU@WVHK0+PM&EtXuNOY8@6Q;!jF>CLkXqccHNg z76)vo^haTNeJ_}+26Q^Z!AE`aH zG~8C6w}v(S=g;=}oM=-_Xfi_V;Izxa^e=iLsfpl3VzBmHICP)Cmvxp(DtA!zziF;# z#w9L`0ampQp1AwLTDGqnFAZY{r%xQR{j(z2PDtdowA!dZq3Ow+H1C zAH8`1EgIjag9yG93*^cN%lJ{huP3apa;>Z)6RqgrzQ+Er@)?a~QD)>l_I0*)uPlv#vEs2_XxKL_XpplHUMRu;is{d+# zkl-{1C|I>12U>c(*Z$`hUERp>VmNy?yd?r9ui8J;9m+B`yI z(DTkm4QQatKZnG~=`a937p?64`p2Ih{QlsN?1@kH@^``wb0JNCJpAk7G6m2{lr<8f z12rslCR_%!*m)=h{4L>#?}Z$mo0e6UUsk3nQdN-hZ54x5XwCJfS_eOl>7hN=r`Xhd zFycnYHh!@vo`XMOsSny86ik~q082$%YUdkBYiF-=LiEiR#+G467^?O#-b_?ysj05< zdSJSJ(v515M=^=PDOcXQa`_^<0^3MV+tyI@X}TWMnKLMb)f@sLHJSi@l`xuS%BMCJ zkzKd2?*4E8`RdzG&g|u2NTE%$%F3m{|xAVijeMnpb3%ejv{B^(xogT;tq zWUB>bqPWD^xW&<`MSz2ON07@g=*8Xu%R&~CQ2(#dXsqckT-!620%ino$;^2>`V08UCs z&aNb_9);NfNEm>yKJbKQuQZxL&Y|Heg(~Rc#0gajd&Iln{i$g$`17ZKW9{2}+lGJg zkZCXZ>s{0(6pp5ue2EsuTLh=*bo%>1Ia*{NK|$H+kHnTa=s?rWn-?yrF2JVTx$p#9 zT@7-oza*RdIGev(FTf_75g4K7z?<~6LW88UPUGjNN5h6Z=Re=v|Mdq1!>8Lmg&%4E z@+@kxzy8tQes2~C2mej$1B|$XVg#CsgRD>%pn((};aHD3KI?*-1MN!(&{4*J^s%~qEZ5;e@E^*A)WMks0v-aN`+IF1BDRR0F&F=b_B8{Y7TL(#UyZaGY@A-Qp_>D# z9h7!WSuhAX4H~e|P?1IL3f1vTpa19ghwbghcQ(Is`PlY1_w3%AeIKU%!Cw!)?S%$) zBCG=>-sgJb?J+E-hG}m$Y!rOL41ae|YcbhY#;R{H6zr zMKr;QDIiBm8BaUnkYuO9Hw}oX(Ki}h=tGv)6cv{g6&Aq$K>E8X&Hx06rPB>Me;ekn zkuzZR0pfOH3j℞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 UXPQh9zY&8g)WjC8#oV{~H#!+T*8l(j literal 0 HcmV?d00001 From b451c6f4103020c8fbf5703a59cb8c6f8e994624 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 4 Sep 2014 10:31:16 +0300 Subject: [PATCH 269/311] Replace lena.rgb and lena.bw with hopper --- Tests/images/lena.bw | Bin 8507 -> 0 bytes Tests/images/lena.rgb | Bin 54179 -> 0 bytes Tests/test_file_sgi.py | 8 ++++---- 3 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 Tests/images/lena.bw delete mode 100644 Tests/images/lena.rgb diff --git a/Tests/images/lena.bw b/Tests/images/lena.bw deleted file mode 100644 index e2981ef5c3174ad1f8dccec0ec30944cdec596ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8507 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 H((eBO+M#Kh diff --git a/Tests/test_file_sgi.py b/Tests/test_file_sgi.py index 84b184b63..d49086c51 100644 --- a/Tests/test_file_sgi.py +++ b/Tests/test_file_sgi.py @@ -8,8 +8,8 @@ class TestFileSgi(PillowTestCase): def test_rgb(self): # Arrange # Created with ImageMagick then renamed: - # convert lena.ppm lena.sgi - test_file = "Tests/images/lena.rgb" + # convert hopper.ppm hopper.sgi + test_file = "Tests/images/hopper.rgb" # Act / Assert self.assertRaises(ValueError, lambda: Image.open(test_file)) @@ -17,8 +17,8 @@ class TestFileSgi(PillowTestCase): def test_l(self): # Arrange # Created with ImageMagick then renamed: - # convert lena.ppm -monochrome lena.sgi - test_file = "Tests/images/lena.bw" + # convert hopper.ppm -monochrome hopper.sgi + test_file = "Tests/images/hopper.bw" # Act / Assert self.assertRaises(ValueError, lambda: Image.open(test_file)) From e524bcc327d35508bb3e08d55392918817d57c0f Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 4 Sep 2014 12:09:15 +0300 Subject: [PATCH 270/311] Created with ImageMagick: convert hopper.jpg hopper.png --- Tests/images/hopper.png | Bin 0 -> 30605 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tests/images/hopper.png diff --git a/Tests/images/hopper.png b/Tests/images/hopper.png new file mode 100644 index 0000000000000000000000000000000000000000..60ac671a26f801acf00e29f9f42561bd4a2a55e2 GIT binary patch literal 30605 zcmV)>K!d-DP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 From e1c33d319003f009554d1319e1e94163b9b83a1b Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 4 Sep 2014 12:09:52 +0300 Subject: [PATCH 271/311] Replace lena with hopper --- Tests/test_file_png.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Tests/test_file_png.py b/Tests/test_file_png.py index 8ef166347..32dc10cd1 100644 --- a/Tests/test_file_png.py +++ b/Tests/test_file_png.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, lena +from helper import unittest, PillowTestCase, hopper from io import BytesIO @@ -10,8 +10,8 @@ codecs = dir(Image.core) # sample png stream -file = "Tests/images/lena.png" -data = open(file, "rb").read() +TEST_PNG_FILE = "Tests/images/hopper.png" +TEST_DATA = open(TEST_PNG_FILE, "rb").read() # stuff to create inline PNG images @@ -58,7 +58,7 @@ class TestFilePng(PillowTestCase): file = self.tempfile("temp.png") - lena("RGB").save(file) + hopper("RGB").save(file) im = Image.open(file) im.load() @@ -66,19 +66,19 @@ class TestFilePng(PillowTestCase): self.assertEqual(im.size, (128, 128)) self.assertEqual(im.format, "PNG") - lena("1").save(file) + hopper("1").save(file) im = Image.open(file) - lena("L").save(file) + hopper("L").save(file) im = Image.open(file) - lena("P").save(file) + hopper("P").save(file) im = Image.open(file) - lena("RGB").save(file) + hopper("RGB").save(file) im = Image.open(file) - lena("I").save(file) + hopper("I").save(file) im = Image.open(file) def test_broken(self): @@ -237,17 +237,17 @@ class TestFilePng(PillowTestCase): def test_load_verify(self): # Check open/load/verify exception (@PIL150) - im = Image.open("Tests/images/lena.png") + im = Image.open(TEST_PNG_FILE) im.verify() - im = Image.open("Tests/images/lena.png") + im = Image.open(TEST_PNG_FILE) im.load() self.assertRaises(RuntimeError, lambda: im.verify()) def test_roundtrip_dpi(self): # Check dpi roundtripping - im = Image.open(file) + im = Image.open(TEST_PNG_FILE) im = roundtrip(im, dpi=(100, 100)) self.assertEqual(im.info["dpi"], (100, 100)) @@ -255,7 +255,7 @@ class TestFilePng(PillowTestCase): def test_roundtrip_text(self): # Check text roundtripping - im = Image.open(file) + im = Image.open(TEST_PNG_FILE) info = PngImagePlugin.PngInfo() info.add_text("TXT", "VALUE") @@ -338,7 +338,7 @@ class TestFilePng(PillowTestCase): def test_trns_p(self): # Check writing a transparency of 0, issue #528 - im = lena('P') + im = hopper('P') im.info['transparency'] = 0 f = self.tempfile("temp.png") @@ -360,7 +360,7 @@ class TestFilePng(PillowTestCase): def test_roundtrip_icc_profile(self): # check that we can roundtrip the icc profile - im = lena('RGB') + im = hopper('RGB') jpeg_image = Image.open('Tests/images/flower2.jpg') expected_icc = jpeg_image.info['icc_profile'] From 06a2378f52d627f116a925d1589dee6f0178a223 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 4 Sep 2014 12:13:43 +0300 Subject: [PATCH 272/311] Remove lena.png --- Tests/images/lena.png | Bin 37723 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Tests/images/lena.png diff --git a/Tests/images/lena.png b/Tests/images/lena.png deleted file mode 100644 index 192875931549c50155f381c44ef5c6a18a0f7fc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37723 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 su#|>TAcLF_$&Dnb Date: Thu, 4 Sep 2014 12:21:19 +0300 Subject: [PATCH 273/311] Replace lena.tar with hopper.tar --- Tests/images/hopper.tar | Bin 0 -> 39424 bytes Tests/images/lena.tar | Bin 51200 -> 0 bytes Tests/test_file_tar.py | 8 ++++---- 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 Tests/images/hopper.tar delete mode 100644 Tests/images/lena.tar diff --git a/Tests/images/hopper.tar b/Tests/images/hopper.tar new file mode 100644 index 0000000000000000000000000000000000000000..593429c9a0d2429c446018afec6145bf978a1b74 GIT binary patch literal 39424 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 Cbzph` literal 0 HcmV?d00001 diff --git a/Tests/images/lena.tar b/Tests/images/lena.tar deleted file mode 100644 index 3afb1f542405347b093062d8e9e96cae6fce3be8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51200 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 Date: Thu, 4 Sep 2014 12:28:37 +0300 Subject: [PATCH 274/311] Replace lena.spider with hopper.spider, created with Pillow. --- Tests/images/hopper.spider | Bin 0 -> 66560 bytes Tests/images/lena.spider | Bin 66560 -> 0 bytes Tests/test_file_spider.py | 8 ++++---- 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 Tests/images/hopper.spider delete mode 100644 Tests/images/lena.spider diff --git a/Tests/images/hopper.spider b/Tests/images/hopper.spider new file mode 100644 index 0000000000000000000000000000000000000000..70e31b07c1b893b83d06035d208aac5a41d9406a GIT binary patch literal 66560 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 Ul%MRyKa05q3E;mB{A=6)4=Ow>djJ3c literal 0 HcmV?d00001 diff --git a/Tests/images/lena.spider b/Tests/images/lena.spider deleted file mode 100644 index df963c1c3cfa6b95f7337611c7b932edaa57b4a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66560 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 Oh5uaG?`2CbM*kmXvmjIe diff --git a/Tests/test_file_spider.py b/Tests/test_file_spider.py index 65e4d2782..7bfedad1a 100644 --- a/Tests/test_file_spider.py +++ b/Tests/test_file_spider.py @@ -1,9 +1,9 @@ -from helper import unittest, PillowTestCase, lena +from helper import unittest, PillowTestCase, hopper from PIL import Image from PIL import SpiderImagePlugin -TEST_FILE = "Tests/images/lena.spider" +TEST_FILE = "Tests/images/hopper.spider" class TestImageSpider(PillowTestCase): @@ -18,7 +18,7 @@ class TestImageSpider(PillowTestCase): def test_save(self): # Arrange temp = self.tempfile('temp.spider') - im = lena() + im = hopper() # Act im.save(temp, "SPIDER") @@ -44,7 +44,7 @@ class TestImageSpider(PillowTestCase): def test_loadImageSeries(self): # Arrange - not_spider_file = "Tests/images/lena.ppm" + not_spider_file = "Tests/images/hopper.ppm" file_list = [TEST_FILE, not_spider_file, "path/not_found.ext"] # Act From 4a243e90bc7e9cf713e01dc5193dbcf91e54fdc8 Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 4 Sep 2014 12:59:03 +0300 Subject: [PATCH 275/311] Replace lena.ras with hopper.ras, created with ImageMagick: convert hopper.jpg hopper.ras --- Tests/images/hopper.ras | Bin 0 -> 49184 bytes Tests/images/lena.ras | Bin 49184 -> 0 bytes Tests/test_file_sun.py | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 Tests/images/hopper.ras delete mode 100644 Tests/images/lena.ras diff --git a/Tests/images/hopper.ras b/Tests/images/hopper.ras new file mode 100644 index 0000000000000000000000000000000000000000..70f3c80d0b7a196dc72f42d637888fdcf6a62569 GIT binary patch literal 49184 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 z Date: Thu, 4 Sep 2014 13:24:53 +0300 Subject: [PATCH 276/311] Replace lena.dcx with hopper.dcx. Created with ImageMagick: convert hopper.ppm hopper.dcx --- Tests/images/hopper.dcx | Bin 0 -> 55024 bytes Tests/images/lena.dcx | Bin 62138 -> 0 bytes Tests/test_file_dcx.py | 8 ++++---- 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 Tests/images/hopper.dcx delete mode 100644 Tests/images/lena.dcx diff --git a/Tests/images/hopper.dcx b/Tests/images/hopper.dcx new file mode 100644 index 0000000000000000000000000000000000000000..ba6bd062e30b50cf4eb275dc3dcd3b533731b6b0 GIT binary patch literal 55024 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 Date: Thu, 4 Sep 2014 13:29:35 +0300 Subject: [PATCH 277/311] Replace lena.ico with hopper.ico. Created with ImageMagick: convert hopper.jpg -resize 16x16 hopper.ico --- Tests/images/hopper.ico | Bin 0 -> 1150 bytes Tests/images/lena.ico | Bin 1406 -> 0 bytes Tests/test_file_ico.py | 6 +++--- 3 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 Tests/images/hopper.ico delete mode 100644 Tests/images/lena.ico diff --git a/Tests/images/hopper.ico b/Tests/images/hopper.ico new file mode 100644 index 0000000000000000000000000000000000000000..0c6fd8c70f927ab483d12e6552d23e9a26b63eba GIT binary patch literal 1150 zcmbW1X;0i$6vqE-GcXIx3^O2Lh@ z@KY-ZdLf*=>|WZc+Q>~CCM>uFthW-Kq1n;OnW1sY%PR14b0^Il&(_96 zQjKQ(eKaJ;TB#5k8K!cA1B@u;GAgqYd9`j3rA&@WsleUM6}jO0s=e{?^x})9722Cy zkh!`NsMn!aC@?5x9MGsx$-H>8%!;k>4dL&GUaLbVX4VQXty0b0)D(&FsZ`s`Niv(! zduxaY2qeNkfFO-8z6uqe_SIsJP9P)8inl_Bk6MPOn86$!!~MO#c%^fdYfDcVA05S2 zk_ZqU{wggYS_4h_8T>fkMS7f(j-FenJx^lrD?p_SAv-yRx}kLfnQP-TV#xEVY0tNVdD)_OJ~R~U&L1PE|Y@y z_=C6j<>~-GFZQr|se=b|9i+u1WAalIq|9J&a+{h<+k_sw!ttS99OJ*^oc3Sti&q-p#cD#xDCIPojPSN0iR+^2nhpN8{~ zS)CeSZ{8_%+S!?D<$=J-Vmn>64cMY$F-Mp%=k<|RGDB+79M0L_s2kZKx8^!8J8$yY z*dV*pC;0wiBb!qWwk92nzdc61tpKY*PfBn&A+Z*YJKv{sdXKrKzv;RBl-CFDU_0jI zo?cfTo~oH zBa7v>JeFH+BHQ?~;|R&(ecCiWf)RpT3Uo$q7_hzoI$aOKj#4 zQsXq*tYH$f1_{m_Cn~oG^_f9Zb9&I78bh8nP2`zTlvz_4@;i~Ann9m8Om5*#lm)}Y z7MOiGza!0_C!ufv_1O_3^QH(bctTMAEV^P7DWwC16-{xx#DunG{3wew`m5| zh1aAv&7*C4P2R<)BwhH6=$5y{x4fb9$^^QLZ^^zqOX1ZC^q2l7x$PNc*TyMspQf^7 zlIo6G&bKeq*f~ks%_WSTFRAOErm4%U>t3Su-V8VHO>u7M6~)8L6q?>r^WY7A<4ZJ* z|3lxS1zI2e`>wZsZ$4t+!*ySNBFe6+?43R0w{x@Yh{YPq&$k3u)jl6~ed1_k`)Kv2 zmNu)@MT5&R`L}C?o5$8$dat*zKG%C}zuxubcbg}_wTxQ3*172HN~_D6OUqlv4t?{3 z|Hs+2JzKXn<0S$LQ$n z!u%^@E(uz9OG1nV3yZJQell6C>X6;qD~=64^LSBjjIU4lVB@W8g5c!zf@VXUv9*3~ c--;VIofPRO)6-9A&$ZvJNj&`ChkA$bKR(j;ssI20 diff --git a/Tests/test_file_ico.py b/Tests/test_file_ico.py index c3bf7a992..12f4ed3f3 100644 --- a/Tests/test_file_ico.py +++ b/Tests/test_file_ico.py @@ -3,14 +3,14 @@ from helper import unittest, PillowTestCase from PIL import Image # sample ppm stream -file = "Tests/images/lena.ico" -data = open(file, "rb").read() +TEST_ICO_FILE = "Tests/images/hopper.ico" +TEST_DATA = open(TEST_ICO_FILE, "rb").read() class TestFileIco(PillowTestCase): def test_sanity(self): - im = Image.open(file) + im = Image.open(TEST_ICO_FILE) im.load() self.assertEqual(im.mode, "RGBA") self.assertEqual(im.size, (16, 16)) From 9cde0aa7d693de7ca268a8f594ca442fa6c85dd3 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Thu, 4 Sep 2014 10:09:05 -0700 Subject: [PATCH 278/311] Updated Changes.rst (formatting) [ci skip] --- CHANGES.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index b8dbab630..8ce1a52ad 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,7 +5,7 @@ Changelog (Pillow) ------------------ - Fix for reading multipage TIFFs #885 - [kostrom, wiredfool] + [kostrom, wiredfool] - Correctly handle saving gray and CMYK JPEGs with quality-keep #857 [etienned] From 255a090e9777bf6323d216734c0e8ec08526d022 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Wed, 10 Sep 2014 10:41:46 +1000 Subject: [PATCH 279/311] Avoid resize operation if image is already the correct size --- PIL/Image.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/PIL/Image.py b/PIL/Image.py index 5e1416a33..cd1e450ee 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -1514,6 +1514,9 @@ class Image: self.load() + if self.size == size: + return self._new(self.im) + if self.mode in ("1", "P"): resample = NEAREST From dd2608e1260a4933c0b9dfd78f0dcf4bdeb00647 Mon Sep 17 00:00:00 2001 From: Omer Katz Date: Wed, 10 Sep 2014 10:25:17 +0300 Subject: [PATCH 280/311] All network operations should be retried in order too prevent build failures due to network errors and large matrixes should fast finish. --- .travis.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 704c0d949..6226e5470 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,14 +16,14 @@ python: - 3.4 install: - - "sudo apt-get -qq install libfreetype6-dev liblcms2-dev python-qt4 ghostscript libffi-dev libjpeg-turbo-progs cmake imagemagick" - - "pip install cffi" - - "pip install coverage nose" + - "travis_retry sudo apt-get -qq install libfreetype6-dev liblcms2-dev python-qt4 ghostscript libffi-dev libjpeg-turbo-progs cmake imagemagick" + - "travis_retry pip install cffi" + - "travis_retry pip install coverage nose" # Pyroma installation is slow on Py3, so just do it for Py2. - if [ ${TRAVIS_PYTHON_VERSION:0:1} == "2" ]; then travis_retry pip install pyroma; fi - - if [ "$TRAVIS_PYTHON_VERSION" == "2.6" ]; then pip install unittest2; fi + - if [ "$TRAVIS_PYTHON_VERSION" == "2.6" ]; then travis_retry pip install unittest2; fi # webp - pushd depends && ./install_webp.sh && popd @@ -41,20 +41,20 @@ script: after_success: # gather the coverage data - - sudo apt-get -qq install lcov + - travis_retry sudo apt-get -qq install lcov - lcov --capture --directory . -b . --output-file coverage.info # filter to remove system headers - lcov --remove coverage.info '/usr/*' -o coverage.filtered.info # convert to json - - gem install coveralls-lcov + - travis_retry gem install coveralls-lcov - coveralls-lcov -v -n coverage.filtered.info > coverage.c.json - coverage report - - pip install coveralls-merge + - travis_retry pip install coveralls-merge - coveralls-merge coverage.c.json - - pip install pep8 pyflakes + - travis_retry pip install pep8 pyflakes - pep8 --statistics --count PIL/*.py - pep8 --statistics --count Tests/*.py - pyflakes PIL/*.py | tee >(wc -l) @@ -65,3 +65,5 @@ after_success: # (Installation is very slow on Py3, so just do it for Py2.) - if [ ${TRAVIS_PYTHON_VERSION:0:1} == "2" ]; then Scripts/diffcover-install.sh; fi - if [ ${TRAVIS_PYTHON_VERSION:0:1} == "2" ]; then Scripts/diffcover-run.sh; fi +matrix: + fast_finish: true From a2c2388dc81d34ba89b33148169da1e1abdbcfd6 Mon Sep 17 00:00:00 2001 From: Hugo Date: Wed, 10 Sep 2014 16:43:23 +0300 Subject: [PATCH 281/311] Add Landscape health badge [CI skip] See https://github.com/python-pillow/Pillow/issues/895 --- README.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.rst b/README.rst index 482a1e2ec..d58666bc6 100644 --- a/README.rst +++ b/README.rst @@ -20,3 +20,6 @@ Pillow is the "friendly" PIL fork by `Alex Clark and Contributors Date: Wed, 10 Sep 2014 10:41:26 -0700 Subject: [PATCH 282/311] Update CHANGES.rst --- CHANGES.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 8ce1a52ad..266da354d 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,10 +4,13 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Don't resize if already the right size. + [radarhere] + - Fix for reading multipage TIFFs #885 [kostrom, wiredfool] -- Correctly handle saving gray and CMYK JPEGs with quality-keep #857 +- Correctly handle saving gray and CMYK JPEGs with quality=keep #857 [etienned] - Correct duplicate Tiff Metadata and Exif tag values From ce0fcef5804c1e6e0803092d881b48ceb274fd19 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Fri, 12 Sep 2014 21:41:12 -0700 Subject: [PATCH 283/311] Don't test internal python functions --- Tests/test_file_eps.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/Tests/test_file_eps.py b/Tests/test_file_eps.py index 96b39b286..a17ce274f 100644 --- a/Tests/test_file_eps.py +++ b/Tests/test_file_eps.py @@ -167,7 +167,10 @@ class TestFileEps(PillowTestCase): def _test_readline_io(self, test_string, ending): import io - t = io.StringIO(test_string) + if str is bytes: + t = io.StringIO(unicode(test_string)) + else: + t = io.StringIO(test_string) self._test_readline(t, ending) def _test_readline_file_universal(self, test_string, ending): @@ -202,14 +205,23 @@ class TestFileEps(PillowTestCase): for ending in line_endings: s = ending.join(strings) - self._test_readline_stringio(s, ending) - self._test_readline_io(s, ending) - self._test_readline_file_universal(s, ending) + # Native python versions will pass these endings. + #self._test_readline_stringio(s, ending) + #self._test_readline_io(s, ending) + #self._test_readline_file_universal(s, ending) + + self._test_readline_file_psfile(s, ending) for ending in not_working_endings: # these only work with the PSFile, while they're in spec, # they're not likely to be used - s = ending.join(strings) + s = ending.join(strings) + + # Native python versions may fail on these endings. + #self._test_readline_stringio(s, ending) + #self._test_readline_io(s, ending) + #self._test_readline_file_universal(s, ending) + self._test_readline_file_psfile(s, ending) From 5ca57520b6d028b1a3ad81cbf927aa3ab219c9f1 Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Tue, 26 Aug 2014 11:39:57 +1000 Subject: [PATCH 284/311] Added Test for JPEG2000 memory leak, before the fix is added --- Tests/test_jp2k_leak.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Tests/test_jp2k_leak.py diff --git a/Tests/test_jp2k_leak.py b/Tests/test_jp2k_leak.py new file mode 100644 index 000000000..ffd061e00 --- /dev/null +++ b/Tests/test_jp2k_leak.py @@ -0,0 +1,30 @@ +from helper import unittest, PillowTestCase, tearDownModule +import sys + +from PIL import Image +from resource import setrlimit, RLIMIT_AS, RLIMIT_STACK + +# Limits for testing the leak +mem_limit = 512*1048576 +stack_size = 8*1048576 +iterations = (mem_limit/stack_size)*2 +codecs = dir(Image.core) +test_file = "Tests/images/rgb_trns_ycbc.jp2" + +@unittest.skipIf(sys.platform.startswith('win32'), "requires Unix or MacOS") +class TestJp2kLeak(PillowTestCase): + def setUp(self): + if "jpeg2k_encoder" not in codecs or "jpeg2k_decoder" not in codecs: + self.skipTest('JPEG 2000 support not available') + + def test_leak(self): + setrlimit(RLIMIT_STACK, (stack_size, stack_size)) + setrlimit(RLIMIT_AS, (mem_limit, mem_limit)) + for count in range(iterations): + with Image.open(test_file) as im: + im.load() + im.close() + + +if __name__ == '__main__': + unittest.main() From 3acb06e9d229f9d7208e4a93b74d821ac8a8a7e1 Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Tue, 26 Aug 2014 13:34:44 +1000 Subject: [PATCH 285/311] Added the JPEG2000 memory leak fix to decode.c --- decode.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/decode.c b/decode.c index e9aa6a387..c56f42592 100644 --- a/decode.c +++ b/decode.c @@ -103,6 +103,8 @@ PyImaging_DecoderNew(int contextsize) static void _dealloc(ImagingDecoderObject* decoder) { + if (decoder->cleanup) + decoder->cleanup(&decoder->state); free(decoder->state.buffer); free(decoder->state.context); Py_XDECREF(decoder->lock); From c134e5ab456f6b8ebd5a18c93d7554c9131fa39a Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Tue, 26 Aug 2014 13:43:11 +1000 Subject: [PATCH 286/311] Moved resource import to inside the function --- Tests/test_jp2k_leak.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_jp2k_leak.py b/Tests/test_jp2k_leak.py index ffd061e00..35040df20 100644 --- a/Tests/test_jp2k_leak.py +++ b/Tests/test_jp2k_leak.py @@ -2,7 +2,6 @@ from helper import unittest, PillowTestCase, tearDownModule import sys from PIL import Image -from resource import setrlimit, RLIMIT_AS, RLIMIT_STACK # Limits for testing the leak mem_limit = 512*1048576 @@ -18,6 +17,7 @@ class TestJp2kLeak(PillowTestCase): self.skipTest('JPEG 2000 support not available') def test_leak(self): + from resource import setrlimit, RLIMIT_AS, RLIMIT_STACK setrlimit(RLIMIT_STACK, (stack_size, stack_size)) setrlimit(RLIMIT_AS, (mem_limit, mem_limit)) for count in range(iterations): From bc1e1c148cf339c9024fa0381fecab1019063401 Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Tue, 26 Aug 2014 13:44:38 +1000 Subject: [PATCH 287/311] Casting the iterations variable to integer --- Tests/test_jp2k_leak.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_jp2k_leak.py b/Tests/test_jp2k_leak.py index 35040df20..5b5fd6ab2 100644 --- a/Tests/test_jp2k_leak.py +++ b/Tests/test_jp2k_leak.py @@ -6,7 +6,7 @@ from PIL import Image # Limits for testing the leak mem_limit = 512*1048576 stack_size = 8*1048576 -iterations = (mem_limit/stack_size)*2 +iterations = int(mem_limit/stack_size)*2 codecs = dir(Image.core) test_file = "Tests/images/rgb_trns_ycbc.jp2" From f632baf4dc2497baa10b4a439c7dc6f95a55a1e1 Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Tue, 26 Aug 2014 14:04:24 +1000 Subject: [PATCH 288/311] Increased testing limit from 512MB to 1GB --- Tests/test_jp2k_leak.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_jp2k_leak.py b/Tests/test_jp2k_leak.py index 5b5fd6ab2..89419866c 100644 --- a/Tests/test_jp2k_leak.py +++ b/Tests/test_jp2k_leak.py @@ -4,7 +4,7 @@ import sys from PIL import Image # Limits for testing the leak -mem_limit = 512*1048576 +mem_limit = 1024*1048576 stack_size = 8*1048576 iterations = int(mem_limit/stack_size)*2 codecs = dir(Image.core) From a944ec92509ccc83a4802d890d70256f33e868cf Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Tue, 26 Aug 2014 14:17:51 +1000 Subject: [PATCH 289/311] Increaded memory limit to 1.5Gb --- Tests/test_jp2k_leak.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_jp2k_leak.py b/Tests/test_jp2k_leak.py index 89419866c..7c91b4b85 100644 --- a/Tests/test_jp2k_leak.py +++ b/Tests/test_jp2k_leak.py @@ -4,7 +4,7 @@ import sys from PIL import Image # Limits for testing the leak -mem_limit = 1024*1048576 +mem_limit = 1536*1048576 stack_size = 8*1048576 iterations = int(mem_limit/stack_size)*2 codecs = dir(Image.core) From dea36ae610b9dcc1c3b5c9a55c661192d21c9cab Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Tue, 26 Aug 2014 14:27:34 +1000 Subject: [PATCH 290/311] Tying 2GB max memory --- Tests/test_jp2k_leak.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_jp2k_leak.py b/Tests/test_jp2k_leak.py index 7c91b4b85..346416fe9 100644 --- a/Tests/test_jp2k_leak.py +++ b/Tests/test_jp2k_leak.py @@ -4,7 +4,7 @@ import sys from PIL import Image # Limits for testing the leak -mem_limit = 1536*1048576 +mem_limit = 2048*1048576 stack_size = 8*1048576 iterations = int(mem_limit/stack_size)*2 codecs = dir(Image.core) From a1f66bf402da265279b87e4e384949772a18b49f Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Tue, 26 Aug 2014 14:44:09 +1000 Subject: [PATCH 291/311] Added a check for PyPy, as it needs far more memory as CPython --- Tests/test_jp2k_leak.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Tests/test_jp2k_leak.py b/Tests/test_jp2k_leak.py index 346416fe9..9b7db018f 100644 --- a/Tests/test_jp2k_leak.py +++ b/Tests/test_jp2k_leak.py @@ -1,10 +1,13 @@ from helper import unittest, PillowTestCase, tearDownModule import sys +from platform import python_implementation from PIL import Image # Limits for testing the leak -mem_limit = 2048*1048576 +mem_limit = 1024*1048576 +if python_implementation() == "PyPy": + mem_limit = 4096*1048576 stack_size = 8*1048576 iterations = int(mem_limit/stack_size)*2 codecs = dir(Image.core) From 0cd1d9526daa9ab221c423b1caa8d2c37e8f1e9c Mon Sep 17 00:00:00 2001 From: root Date: Tue, 26 Aug 2014 16:36:15 +1000 Subject: [PATCH 292/311] Reverted back to 512M, PyPy doesn't seem to work anyway --- Tests/test_jp2k_leak.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Tests/test_jp2k_leak.py b/Tests/test_jp2k_leak.py index 9b7db018f..70ae04c79 100644 --- a/Tests/test_jp2k_leak.py +++ b/Tests/test_jp2k_leak.py @@ -1,13 +1,11 @@ from helper import unittest, PillowTestCase, tearDownModule import sys -from platform import python_implementation +from os import getpid from PIL import Image # Limits for testing the leak -mem_limit = 1024*1048576 -if python_implementation() == "PyPy": - mem_limit = 4096*1048576 +mem_limit = 512*1048576 stack_size = 8*1048576 iterations = int(mem_limit/stack_size)*2 codecs = dir(Image.core) From 5a47b2bc845b899bab46589bc5a5b57389ec9637 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 26 Aug 2014 16:56:35 +1000 Subject: [PATCH 293/311] Sanity check :) --- Tests/test_jp2k_leak.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Tests/test_jp2k_leak.py b/Tests/test_jp2k_leak.py index 70ae04c79..4c3b5b365 100644 --- a/Tests/test_jp2k_leak.py +++ b/Tests/test_jp2k_leak.py @@ -26,6 +26,18 @@ class TestJp2kLeak(PillowTestCase): im.load() im.close() + def self_sanity_check(self): + # Arrange + j2k = Image.open('Tests/images/rgb_trns_ycbc.j2k') + jp2 = Image.open('Tests/images/rgb_trns_ycbc.jp2') + + # Act + j2k.load() + jp2.load() + + # Assert + self.assertEqual(j2k.mode, 'RGBA') + self.assertEqual(jp2.mode, 'RGBA') if __name__ == '__main__': unittest.main() From 72e2a6cade4a17a964da6435eacb58478f783a08 Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Tue, 26 Aug 2014 22:22:35 +1000 Subject: [PATCH 294/311] Fix memory leak in JPEG2000 decoding, and JPEG decoding using PyPy --- .../{test_jp2k_leak.py => test_jp2k_leaks.py} | 22 ++++--------------- 1 file changed, 4 insertions(+), 18 deletions(-) rename Tests/{test_jp2k_leak.py => test_jp2k_leaks.py} (63%) diff --git a/Tests/test_jp2k_leak.py b/Tests/test_jp2k_leaks.py similarity index 63% rename from Tests/test_jp2k_leak.py rename to Tests/test_jp2k_leaks.py index 4c3b5b365..1b7c68907 100644 --- a/Tests/test_jp2k_leak.py +++ b/Tests/test_jp2k_leaks.py @@ -1,18 +1,18 @@ from helper import unittest, PillowTestCase, tearDownModule import sys -from os import getpid +from StringIO import StringIO from PIL import Image # Limits for testing the leak -mem_limit = 512*1048576 +mem_limit = 768*1048576 stack_size = 8*1048576 -iterations = int(mem_limit/stack_size)*2 +iterations = int((mem_limit/stack_size)*20) codecs = dir(Image.core) test_file = "Tests/images/rgb_trns_ycbc.jp2" @unittest.skipIf(sys.platform.startswith('win32'), "requires Unix or MacOS") -class TestJp2kLeak(PillowTestCase): +class TestJpegLeaks(PillowTestCase): def setUp(self): if "jpeg2k_encoder" not in codecs or "jpeg2k_decoder" not in codecs: self.skipTest('JPEG 2000 support not available') @@ -24,20 +24,6 @@ class TestJp2kLeak(PillowTestCase): for count in range(iterations): with Image.open(test_file) as im: im.load() - im.close() - - def self_sanity_check(self): - # Arrange - j2k = Image.open('Tests/images/rgb_trns_ycbc.j2k') - jp2 = Image.open('Tests/images/rgb_trns_ycbc.jp2') - - # Act - j2k.load() - jp2.load() - - # Assert - self.assertEqual(j2k.mode, 'RGBA') - self.assertEqual(jp2.mode, 'RGBA') if __name__ == '__main__': unittest.main() From 7db19efe750ad9dc4b8dfc06d40d013e1ace51a9 Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Tue, 26 Aug 2014 22:25:23 +1000 Subject: [PATCH 295/311] Reduced JPEG2000 test iterations, and added cleanup for decoding using PyPy --- PIL/ImageFile.py | 2 ++ Tests/test_jp2k_leaks.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/PIL/ImageFile.py b/PIL/ImageFile.py index 5e4745d76..0550137ea 100644 --- a/PIL/ImageFile.py +++ b/PIL/ImageFile.py @@ -227,6 +227,8 @@ class ImageFile(Image.Image): break b = b[n:] t = t + n + # Need to cleanup here to prevent leaks in PyPy + d.cleanup() self.tile = [] self.readonly = readonly diff --git a/Tests/test_jp2k_leaks.py b/Tests/test_jp2k_leaks.py index 1b7c68907..991a5cbf1 100644 --- a/Tests/test_jp2k_leaks.py +++ b/Tests/test_jp2k_leaks.py @@ -7,7 +7,7 @@ from PIL import Image # Limits for testing the leak mem_limit = 768*1048576 stack_size = 8*1048576 -iterations = int((mem_limit/stack_size)*20) +iterations = int((mem_limit/stack_size)*2) codecs = dir(Image.core) test_file = "Tests/images/rgb_trns_ycbc.jp2" From b78e5444f4c4725d24d9720f3b05a4c20d4c432d Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Wed, 27 Aug 2014 00:01:20 +1000 Subject: [PATCH 296/311] Prevent multiple calls to ImagingIncrementalCodecDestroy --- libImaging/Jpeg2KDecode.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libImaging/Jpeg2KDecode.c b/libImaging/Jpeg2KDecode.c index 97ec81003..1477e68b9 100644 --- a/libImaging/Jpeg2KDecode.c +++ b/libImaging/Jpeg2KDecode.c @@ -800,6 +800,9 @@ ImagingJpeg2KDecodeCleanup(ImagingCodecState state) { if (context->decoder) ImagingIncrementalCodecDestroy(context->decoder); + /* Prevent multiple calls to ImagingIncrementalCodecDestroy */ + context->decoder = NULL; + return -1; } From bb738aef383a4df46b122cd910a4929a7fd8023c Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Wed, 27 Aug 2014 00:15:19 +1000 Subject: [PATCH 297/311] Removed unnecessary StringIO dependency from JPEG2K leak test --- Tests/test_jp2k_leaks.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Tests/test_jp2k_leaks.py b/Tests/test_jp2k_leaks.py index 991a5cbf1..210e9ec62 100644 --- a/Tests/test_jp2k_leaks.py +++ b/Tests/test_jp2k_leaks.py @@ -1,7 +1,5 @@ from helper import unittest, PillowTestCase, tearDownModule import sys -from StringIO import StringIO - from PIL import Image # Limits for testing the leak @@ -11,6 +9,7 @@ iterations = int((mem_limit/stack_size)*2) codecs = dir(Image.core) test_file = "Tests/images/rgb_trns_ycbc.jp2" + @unittest.skipIf(sys.platform.startswith('win32'), "requires Unix or MacOS") class TestJpegLeaks(PillowTestCase): def setUp(self): From caa95a26b2a0f1bf001a314b3efa4fb5824aed64 Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Wed, 27 Aug 2014 15:30:31 +1000 Subject: [PATCH 298/311] Added memory leak fix and testing for Encoder --- PIL/ImageFile.py | 2 ++ Tests/test_jp2k_leaks.py | 21 ++++++++++++++++++++- encode.c | 13 +++++++++++++ libImaging/Jpeg2KEncode.c | 4 ++++ 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/PIL/ImageFile.py b/PIL/ImageFile.py index 0550137ea..bdcc769ec 100644 --- a/PIL/ImageFile.py +++ b/PIL/ImageFile.py @@ -473,6 +473,7 @@ def _save(im, fp, tile, bufsize=0): break if s < 0: raise IOError("encoder error %d when writing image file" % s) + e.cleanup() else: # slight speedup: compress to real file object for e, b, o, a in tile: @@ -483,6 +484,7 @@ def _save(im, fp, tile, bufsize=0): s = e.encode_to_file(fh, bufsize) if s < 0: raise IOError("encoder error %d when writing image file" % s) + e.cleanup() try: fp.flush() except: pass diff --git a/Tests/test_jp2k_leaks.py b/Tests/test_jp2k_leaks.py index 210e9ec62..f99c1e73a 100644 --- a/Tests/test_jp2k_leaks.py +++ b/Tests/test_jp2k_leaks.py @@ -8,6 +8,8 @@ stack_size = 8*1048576 iterations = int((mem_limit/stack_size)*2) codecs = dir(Image.core) test_file = "Tests/images/rgb_trns_ycbc.jp2" +from commands import getoutput +from os import getpid @unittest.skipIf(sys.platform.startswith('win32'), "requires Unix or MacOS") @@ -16,7 +18,7 @@ class TestJpegLeaks(PillowTestCase): if "jpeg2k_encoder" not in codecs or "jpeg2k_decoder" not in codecs: self.skipTest('JPEG 2000 support not available') - def test_leak(self): + def test_leak_load(self): from resource import setrlimit, RLIMIT_AS, RLIMIT_STACK setrlimit(RLIMIT_STACK, (stack_size, stack_size)) setrlimit(RLIMIT_AS, (mem_limit, mem_limit)) @@ -24,5 +26,22 @@ class TestJpegLeaks(PillowTestCase): with Image.open(test_file) as im: im.load() + def test_leak_save(self): + from resource import setrlimit, RLIMIT_AS, RLIMIT_STACK + try: + from cStringIO import StringIO + except ImportError: + from io import StringIO + setrlimit(RLIMIT_STACK, (stack_size, stack_size)) + setrlimit(RLIMIT_AS, (mem_limit, mem_limit)) + for count in range(iterations): + with Image.open(test_file) as im: + im.load() + test_output = StringIO() + im.save(test_output, "JPEG2000") + test_output.seek(0) + output = test_output.read() + + if __name__ == '__main__': unittest.main() diff --git a/encode.c b/encode.c index 3fa900b1d..34e3b8933 100644 --- a/encode.c +++ b/encode.c @@ -99,6 +99,18 @@ _dealloc(ImagingEncoderObject* encoder) PyObject_Del(encoder); } +static PyObject* +_encode_cleanup(ImagingEncoderObject* encoder, PyObject* args) +{ + int status = 0; + + if (encoder->cleanup){ + status = encoder->cleanup(&encoder->state); + } + + return Py_BuildValue("i", status); +} + static PyObject* _encode(ImagingEncoderObject* encoder, PyObject* args) { @@ -239,6 +251,7 @@ _setimage(ImagingEncoderObject* encoder, PyObject* args) static struct PyMethodDef methods[] = { {"encode", (PyCFunction)_encode, 1}, + {"cleanup", (PyCFunction)_encode_cleanup, 1}, {"encode_to_file", (PyCFunction)_encode_to_file, 1}, {"setimage", (PyCFunction)_setimage, 1}, {NULL, NULL} /* sentinel */ diff --git a/libImaging/Jpeg2KEncode.c b/libImaging/Jpeg2KEncode.c index e8eef08c1..b4c5284cb 100644 --- a/libImaging/Jpeg2KEncode.c +++ b/libImaging/Jpeg2KEncode.c @@ -585,6 +585,10 @@ ImagingJpeg2KEncodeCleanup(ImagingCodecState state) { if (context->encoder) ImagingIncrementalCodecDestroy(context->encoder); + /* Prevent multiple calls to ImagingIncrementalCodecDestroy */ + context->encoder = NULL; + + return -1; } From e791aa0325abd285b4b966d0a391fb3c1ee55bac Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Wed, 27 Aug 2014 15:42:43 +1000 Subject: [PATCH 299/311] Removed unneeded dependencies --- Tests/test_jp2k_leaks.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/Tests/test_jp2k_leaks.py b/Tests/test_jp2k_leaks.py index f99c1e73a..332520efb 100644 --- a/Tests/test_jp2k_leaks.py +++ b/Tests/test_jp2k_leaks.py @@ -8,8 +8,6 @@ stack_size = 8*1048576 iterations = int((mem_limit/stack_size)*2) codecs = dir(Image.core) test_file = "Tests/images/rgb_trns_ycbc.jp2" -from commands import getoutput -from os import getpid @unittest.skipIf(sys.platform.startswith('win32'), "requires Unix or MacOS") From 11e34d695a651f155aea4828dc8bb7018f6f1204 Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Wed, 27 Aug 2014 16:03:07 +1000 Subject: [PATCH 300/311] Inwcreased max memory limit, and switched save test to use BytesIO instead of StringIO --- Tests/test_jp2k_leaks.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Tests/test_jp2k_leaks.py b/Tests/test_jp2k_leaks.py index 332520efb..b0d84f47f 100644 --- a/Tests/test_jp2k_leaks.py +++ b/Tests/test_jp2k_leaks.py @@ -1,9 +1,10 @@ from helper import unittest, PillowTestCase, tearDownModule import sys from PIL import Image +from io import BytesIO # Limits for testing the leak -mem_limit = 768*1048576 +mem_limit = 1024*1048576 stack_size = 8*1048576 iterations = int((mem_limit/stack_size)*2) codecs = dir(Image.core) @@ -26,16 +27,12 @@ class TestJpegLeaks(PillowTestCase): def test_leak_save(self): from resource import setrlimit, RLIMIT_AS, RLIMIT_STACK - try: - from cStringIO import StringIO - except ImportError: - from io import StringIO setrlimit(RLIMIT_STACK, (stack_size, stack_size)) setrlimit(RLIMIT_AS, (mem_limit, mem_limit)) for count in range(iterations): with Image.open(test_file) as im: im.load() - test_output = StringIO() + test_output = BytesIO() im.save(test_output, "JPEG2000") test_output.seek(0) output = test_output.read() From dace8913b89e9f6d79fcdd39a5a17940c50faf41 Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Wed, 27 Aug 2014 16:40:38 +1000 Subject: [PATCH 301/311] Increase memory yet again --- Tests/test_jp2k_leaks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_jp2k_leaks.py b/Tests/test_jp2k_leaks.py index b0d84f47f..d93fde71f 100644 --- a/Tests/test_jp2k_leaks.py +++ b/Tests/test_jp2k_leaks.py @@ -4,7 +4,7 @@ from PIL import Image from io import BytesIO # Limits for testing the leak -mem_limit = 1024*1048576 +mem_limit = 2048*1048576 stack_size = 8*1048576 iterations = int((mem_limit/stack_size)*2) codecs = dir(Image.core) From 3da6768a7227cacdc4b21d5292be0dd7ae5c4179 Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Wed, 27 Aug 2014 18:50:57 +1000 Subject: [PATCH 302/311] Testing whether e.cleanup causes segfaults --- PIL/ImageFile.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PIL/ImageFile.py b/PIL/ImageFile.py index bdcc769ec..81549d8af 100644 --- a/PIL/ImageFile.py +++ b/PIL/ImageFile.py @@ -473,7 +473,7 @@ def _save(im, fp, tile, bufsize=0): break if s < 0: raise IOError("encoder error %d when writing image file" % s) - e.cleanup() + #e.cleanup() else: # slight speedup: compress to real file object for e, b, o, a in tile: @@ -484,7 +484,7 @@ def _save(im, fp, tile, bufsize=0): s = e.encode_to_file(fh, bufsize) if s < 0: raise IOError("encoder error %d when writing image file" % s) - e.cleanup() + #e.cleanup() try: fp.flush() except: pass From 7407371deb8b87e3049c9f1e8b04eac04a1fe6cc Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Wed, 27 Aug 2014 19:13:42 +1000 Subject: [PATCH 303/311] NULLing pointers on cleanup --- PIL/ImageFile.py | 8 ++++---- libImaging/Jpeg2KDecode.c | 38 ++++++++++++++++++++------------------ libImaging/Jpeg2KEncode.c | 10 ++++++---- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/PIL/ImageFile.py b/PIL/ImageFile.py index 81549d8af..1b5c2ebb2 100644 --- a/PIL/ImageFile.py +++ b/PIL/ImageFile.py @@ -135,8 +135,8 @@ class ImageFile(Image.Image): 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') - + use_mmap = use_mmap and not hasattr(sys, 'pypy_version_info') + readonly = 0 # look for read/seek overrides @@ -473,7 +473,7 @@ def _save(im, fp, tile, bufsize=0): break if s < 0: raise IOError("encoder error %d when writing image file" % s) - #e.cleanup() + e.cleanup() else: # slight speedup: compress to real file object for e, b, o, a in tile: @@ -484,7 +484,7 @@ def _save(im, fp, tile, bufsize=0): s = e.encode_to_file(fh, bufsize) if s < 0: raise IOError("encoder error %d when writing image file" % s) - #e.cleanup() + e.cleanup() try: fp.flush() except: pass diff --git a/libImaging/Jpeg2KDecode.c b/libImaging/Jpeg2KDecode.c index 1477e68b9..bd6b59a62 100644 --- a/libImaging/Jpeg2KDecode.c +++ b/libImaging/Jpeg2KDecode.c @@ -68,7 +68,7 @@ j2k_skip(OPJ_OFF_T p_nb_bytes, void *p_user_data) typedef void (*j2k_unpacker_t)(opj_image_t *in, const JPEG2KTILEINFO *tileInfo, - const UINT8 *data, + const UINT8 *data, Imaging im); struct j2k_decode_unpacker { @@ -335,7 +335,7 @@ j2ku_srgb_rgb(opj_image_t *in, const JPEG2KTILEINFO *tileinfo, UINT8 *row = (UINT8 *)im->image[y0 + y] + x0 * 4; for (n = 0; n < 3; ++n) data[n] = &cdata[n][csiz[n] * y * w]; - + for (x = 0; x < w; ++x) { for (n = 0; n < 3; ++n) { UINT32 word = 0; @@ -388,7 +388,7 @@ j2ku_sycc_rgb(opj_image_t *in, const JPEG2KTILEINFO *tileinfo, UINT8 *row_start = row; for (n = 0; n < 3; ++n) data[n] = &cdata[n][csiz[n] * y * w]; - + for (x = 0; x < w; ++x) { for (n = 0; n < 3; ++n) { UINT32 word = 0; @@ -442,7 +442,7 @@ j2ku_srgba_rgba(opj_image_t *in, const JPEG2KTILEINFO *tileinfo, UINT8 *row = (UINT8 *)im->image[y0 + y] + x0 * 4; for (n = 0; n < 4; ++n) data[n] = &cdata[n][csiz[n] * y * w]; - + for (x = 0; x < w; ++x) { for (n = 0; n < 4; ++n) { UINT32 word = 0; @@ -494,7 +494,7 @@ j2ku_sycca_rgba(opj_image_t *in, const JPEG2KTILEINFO *tileinfo, UINT8 *row_start = row; for (n = 0; n < 4; ++n) data[n] = &cdata[n][csiz[n] * y * w]; - + for (x = 0; x < w; ++x) { for (n = 0; n < 4; ++n) { UINT32 word = 0; @@ -587,13 +587,13 @@ j2k_decode_entry(Imaging im, ImagingCodecState state, /* Setup decompression context */ context->error_msg = NULL; - + opj_set_default_decoder_parameters(¶ms); params.cp_reduce = context->reduce; params.cp_layer = context->layers; - + codec = opj_create_decompress(context->format); - + if (!codec) { state->errcode = IMAGING_CODEC_BROKEN; state->state = J2K_STATE_FAILED; @@ -616,7 +616,7 @@ j2k_decode_entry(Imaging im, ImagingCodecState state, state->state = J2K_STATE_FAILED; goto quick_exit; } - + for (n = 1; n < image->numcomps; ++n) { if (image->comps[n].dx != 1 || image->comps[n].dy != 1) { state->errcode = IMAGING_CODEC_BROKEN; @@ -624,8 +624,8 @@ j2k_decode_entry(Imaging im, ImagingCodecState state, goto quick_exit; } } - - /* + + /* Colorspace Number of components PIL mode ------------------------------------------------------ sRGB 3 RGB @@ -633,22 +633,22 @@ j2k_decode_entry(Imaging im, ImagingCodecState state, gray 1 L or I gray 2 LA YCC 3 YCbCr - - + + If colorspace is unspecified, we assume: - + Number of components Colorspace ----------------------------------------- 1 gray 2 gray (+ alpha) 3 sRGB 4 sRGB (+ alpha) - + */ - + /* Find the correct unpacker */ color_space = image->color_space; - + if (color_space == OPJ_CLRSPC_UNSPECIFIED) { switch (image->numcomps) { case 1: case 2: color_space = OPJ_CLRSPC_GRAY; break; @@ -668,7 +668,7 @@ j2k_decode_entry(Imaging im, ImagingCodecState state, if (!unpack) { state->errcode = IMAGING_CODEC_BROKEN; state->state = J2K_STATE_FAILED; - goto quick_exit; + goto quick_exit; } /* Decode the image tile-by-tile; this means we only need use as much @@ -797,6 +797,8 @@ ImagingJpeg2KDecodeCleanup(ImagingCodecState state) { if (context->error_msg) free ((void *)context->error_msg); + context->error_msg = NULL; + if (context->decoder) ImagingIncrementalCodecDestroy(context->decoder); diff --git a/libImaging/Jpeg2KEncode.c b/libImaging/Jpeg2KEncode.c index b4c5284cb..5d6caf30c 100644 --- a/libImaging/Jpeg2KEncode.c +++ b/libImaging/Jpeg2KEncode.c @@ -303,7 +303,7 @@ j2k_encode_entry(Imaging im, ImagingCodecState state, prec = 16; bpp = 12; } else if (strcmp (im->mode, "LA") == 0) { - components = 2; + components = 2; color_space = OPJ_CLRSPC_GRAY; pack = j2k_pack_la; } else if (strcmp (im->mode, "RGB") == 0) { @@ -340,7 +340,7 @@ j2k_encode_entry(Imaging im, ImagingCodecState state, context->error_msg = NULL; opj_set_default_encoder_parameters(¶ms); - + params.image_offset_x0 = context->offset_x; params.image_offset_y0 = context->offset_y; @@ -546,8 +546,8 @@ ImagingJpeg2KEncode(Imaging im, ImagingCodecState state, UINT8 *buf, int bytes) return -1; if (state->state == J2K_STATE_START) { - int seekable = (context->format != OPJ_CODEC_J2K - ? INCREMENTAL_CODEC_SEEKABLE + int seekable = (context->format != OPJ_CODEC_J2K + ? INCREMENTAL_CODEC_SEEKABLE : INCREMENTAL_CODEC_NOT_SEEKABLE); context->encoder = ImagingIncrementalCodecCreate(j2k_encode_entry, @@ -582,6 +582,8 @@ ImagingJpeg2KEncodeCleanup(ImagingCodecState state) { if (context->error_msg) free ((void *)context->error_msg); + context->error_msg = NULL; + if (context->encoder) ImagingIncrementalCodecDestroy(context->encoder); From 9ccc9307841bd8649d32fad91d2853bae6d436e0 Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Wed, 27 Aug 2014 19:21:40 +1000 Subject: [PATCH 304/311] Looking for cleanup segfault --- libImaging/Jpeg2KEncode.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) mode change 100644 => 100755 libImaging/Jpeg2KEncode.c diff --git a/libImaging/Jpeg2KEncode.c b/libImaging/Jpeg2KEncode.c old mode 100644 new mode 100755 index 5d6caf30c..1ed5e08fc --- a/libImaging/Jpeg2KEncode.c +++ b/libImaging/Jpeg2KEncode.c @@ -584,11 +584,11 @@ ImagingJpeg2KEncodeCleanup(ImagingCodecState state) { context->error_msg = NULL; - if (context->encoder) - ImagingIncrementalCodecDestroy(context->encoder); + //if (context->encoder) + // ImagingIncrementalCodecDestroy(context->encoder); /* Prevent multiple calls to ImagingIncrementalCodecDestroy */ - context->encoder = NULL; + //context->encoder = NULL; return -1; From e4e1f5c2d4146d42806684f7603819f196b3b67e Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Wed, 27 Aug 2014 19:30:19 +1000 Subject: [PATCH 305/311] More testing... --- libImaging/Jpeg2KEncode.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libImaging/Jpeg2KEncode.c b/libImaging/Jpeg2KEncode.c index 1ed5e08fc..e7b5a78c3 100755 --- a/libImaging/Jpeg2KEncode.c +++ b/libImaging/Jpeg2KEncode.c @@ -576,13 +576,13 @@ int ImagingJpeg2KEncodeCleanup(ImagingCodecState state) { JPEG2KENCODESTATE *context = (JPEG2KENCODESTATE *)state->context; - if (context->quality_layers) - Py_DECREF(context->quality_layers); + //if (context->quality_layers) + // Py_DECREF(context->quality_layers); - if (context->error_msg) - free ((void *)context->error_msg); + //if (context->error_msg) + // free ((void *)context->error_msg); - context->error_msg = NULL; + //context->error_msg = NULL; //if (context->encoder) // ImagingIncrementalCodecDestroy(context->encoder); From dd221d9ec061d51b53c5f07daef044f92bb5a2e5 Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Wed, 27 Aug 2014 19:54:33 +1000 Subject: [PATCH 306/311] Don't Py_DECREF context->quality_layers if there is no encoder --- libImaging/Jpeg2KEncode.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/libImaging/Jpeg2KEncode.c b/libImaging/Jpeg2KEncode.c index e7b5a78c3..d493cd637 100755 --- a/libImaging/Jpeg2KEncode.c +++ b/libImaging/Jpeg2KEncode.c @@ -555,7 +555,6 @@ ImagingJpeg2KEncode(Imaging im, ImagingCodecState state, UINT8 *buf, int bytes) INCREMENTAL_CODEC_WRITE, seekable, context->fd); - if (!context->encoder) { state->errcode = IMAGING_CODEC_BROKEN; state->state = J2K_STATE_FAILED; @@ -576,19 +575,19 @@ int ImagingJpeg2KEncodeCleanup(ImagingCodecState state) { JPEG2KENCODESTATE *context = (JPEG2KENCODESTATE *)state->context; - //if (context->quality_layers) - // Py_DECREF(context->quality_layers); + if (context->quality_layers && context->encoder) + Py_DECREF(context->quality_layers); - //if (context->error_msg) - // free ((void *)context->error_msg); + if (context->error_msg) + free ((void *)context->error_msg); - //context->error_msg = NULL; + context->error_msg = NULL; - //if (context->encoder) - // ImagingIncrementalCodecDestroy(context->encoder); + if (context->encoder) + ImagingIncrementalCodecDestroy(context->encoder); - /* Prevent multiple calls to ImagingIncrementalCodecDestroy */ - //context->encoder = NULL; + /* Prevent multiple calls to ImagingIncrementalCodecDestroy */ + context->encoder = NULL; return -1; From 94194ed24803249c379e65c57e7aab6c3f208b47 Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Thu, 28 Aug 2014 21:33:18 +1000 Subject: [PATCH 307/311] Cleaning up. Reduced memory limit to 1GB --- PIL/ImageFile.py | 4 ++-- Tests/test_jp2k_leaks.py | 2 +- libImaging/Jpeg2KDecode.c | 40 +++++++++++++++++++-------------------- libImaging/Jpeg2KEncode.c | 10 +++++----- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/PIL/ImageFile.py b/PIL/ImageFile.py index 1b5c2ebb2..bdcc769ec 100644 --- a/PIL/ImageFile.py +++ b/PIL/ImageFile.py @@ -135,8 +135,8 @@ class ImageFile(Image.Image): 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') - + use_mmap = use_mmap and not hasattr(sys, 'pypy_version_info') + readonly = 0 # look for read/seek overrides diff --git a/Tests/test_jp2k_leaks.py b/Tests/test_jp2k_leaks.py index d93fde71f..b0d84f47f 100644 --- a/Tests/test_jp2k_leaks.py +++ b/Tests/test_jp2k_leaks.py @@ -4,7 +4,7 @@ from PIL import Image from io import BytesIO # Limits for testing the leak -mem_limit = 2048*1048576 +mem_limit = 1024*1048576 stack_size = 8*1048576 iterations = int((mem_limit/stack_size)*2) codecs = dir(Image.core) diff --git a/libImaging/Jpeg2KDecode.c b/libImaging/Jpeg2KDecode.c index bd6b59a62..abf8cebbe 100644 --- a/libImaging/Jpeg2KDecode.c +++ b/libImaging/Jpeg2KDecode.c @@ -68,7 +68,7 @@ j2k_skip(OPJ_OFF_T p_nb_bytes, void *p_user_data) typedef void (*j2k_unpacker_t)(opj_image_t *in, const JPEG2KTILEINFO *tileInfo, - const UINT8 *data, + const UINT8 *data, Imaging im); struct j2k_decode_unpacker { @@ -335,7 +335,7 @@ j2ku_srgb_rgb(opj_image_t *in, const JPEG2KTILEINFO *tileinfo, UINT8 *row = (UINT8 *)im->image[y0 + y] + x0 * 4; for (n = 0; n < 3; ++n) data[n] = &cdata[n][csiz[n] * y * w]; - + for (x = 0; x < w; ++x) { for (n = 0; n < 3; ++n) { UINT32 word = 0; @@ -388,7 +388,7 @@ j2ku_sycc_rgb(opj_image_t *in, const JPEG2KTILEINFO *tileinfo, UINT8 *row_start = row; for (n = 0; n < 3; ++n) data[n] = &cdata[n][csiz[n] * y * w]; - + for (x = 0; x < w; ++x) { for (n = 0; n < 3; ++n) { UINT32 word = 0; @@ -442,7 +442,7 @@ j2ku_srgba_rgba(opj_image_t *in, const JPEG2KTILEINFO *tileinfo, UINT8 *row = (UINT8 *)im->image[y0 + y] + x0 * 4; for (n = 0; n < 4; ++n) data[n] = &cdata[n][csiz[n] * y * w]; - + for (x = 0; x < w; ++x) { for (n = 0; n < 4; ++n) { UINT32 word = 0; @@ -494,7 +494,7 @@ j2ku_sycca_rgba(opj_image_t *in, const JPEG2KTILEINFO *tileinfo, UINT8 *row_start = row; for (n = 0; n < 4; ++n) data[n] = &cdata[n][csiz[n] * y * w]; - + for (x = 0; x < w; ++x) { for (n = 0; n < 4; ++n) { UINT32 word = 0; @@ -587,13 +587,13 @@ j2k_decode_entry(Imaging im, ImagingCodecState state, /* Setup decompression context */ context->error_msg = NULL; - + opj_set_default_decoder_parameters(¶ms); params.cp_reduce = context->reduce; params.cp_layer = context->layers; - + codec = opj_create_decompress(context->format); - + if (!codec) { state->errcode = IMAGING_CODEC_BROKEN; state->state = J2K_STATE_FAILED; @@ -616,7 +616,7 @@ j2k_decode_entry(Imaging im, ImagingCodecState state, state->state = J2K_STATE_FAILED; goto quick_exit; } - + for (n = 1; n < image->numcomps; ++n) { if (image->comps[n].dx != 1 || image->comps[n].dy != 1) { state->errcode = IMAGING_CODEC_BROKEN; @@ -624,8 +624,8 @@ j2k_decode_entry(Imaging im, ImagingCodecState state, goto quick_exit; } } - - /* + + /* Colorspace Number of components PIL mode ------------------------------------------------------ sRGB 3 RGB @@ -633,22 +633,22 @@ j2k_decode_entry(Imaging im, ImagingCodecState state, gray 1 L or I gray 2 LA YCC 3 YCbCr - - + + If colorspace is unspecified, we assume: - + Number of components Colorspace ----------------------------------------- 1 gray 2 gray (+ alpha) 3 sRGB 4 sRGB (+ alpha) - + */ - + /* Find the correct unpacker */ color_space = image->color_space; - + if (color_space == OPJ_CLRSPC_UNSPECIFIED) { switch (image->numcomps) { case 1: case 2: color_space = OPJ_CLRSPC_GRAY; break; @@ -668,7 +668,7 @@ j2k_decode_entry(Imaging im, ImagingCodecState state, if (!unpack) { state->errcode = IMAGING_CODEC_BROKEN; state->state = J2K_STATE_FAILED; - goto quick_exit; + goto quick_exit; } /* Decode the image tile-by-tile; this means we only need use as much @@ -797,11 +797,11 @@ ImagingJpeg2KDecodeCleanup(ImagingCodecState state) { if (context->error_msg) free ((void *)context->error_msg); - context->error_msg = NULL; - if (context->decoder) ImagingIncrementalCodecDestroy(context->decoder); + context->error_msg = NULL; + /* Prevent multiple calls to ImagingIncrementalCodecDestroy */ context->decoder = NULL; diff --git a/libImaging/Jpeg2KEncode.c b/libImaging/Jpeg2KEncode.c index d493cd637..ea4bca2f2 100755 --- a/libImaging/Jpeg2KEncode.c +++ b/libImaging/Jpeg2KEncode.c @@ -303,7 +303,7 @@ j2k_encode_entry(Imaging im, ImagingCodecState state, prec = 16; bpp = 12; } else if (strcmp (im->mode, "LA") == 0) { - components = 2; + components = 2; color_space = OPJ_CLRSPC_GRAY; pack = j2k_pack_la; } else if (strcmp (im->mode, "RGB") == 0) { @@ -340,7 +340,7 @@ j2k_encode_entry(Imaging im, ImagingCodecState state, context->error_msg = NULL; opj_set_default_encoder_parameters(¶ms); - + params.image_offset_x0 = context->offset_x; params.image_offset_y0 = context->offset_y; @@ -546,8 +546,8 @@ ImagingJpeg2KEncode(Imaging im, ImagingCodecState state, UINT8 *buf, int bytes) return -1; if (state->state == J2K_STATE_START) { - int seekable = (context->format != OPJ_CODEC_J2K - ? INCREMENTAL_CODEC_SEEKABLE + int seekable = (context->format != OPJ_CODEC_J2K + ? INCREMENTAL_CODEC_SEEKABLE : INCREMENTAL_CODEC_NOT_SEEKABLE); context->encoder = ImagingIncrementalCodecCreate(j2k_encode_entry, @@ -555,6 +555,7 @@ ImagingJpeg2KEncode(Imaging im, ImagingCodecState state, UINT8 *buf, int bytes) INCREMENTAL_CODEC_WRITE, seekable, context->fd); + if (!context->encoder) { state->errcode = IMAGING_CODEC_BROKEN; state->state = J2K_STATE_FAILED; @@ -589,7 +590,6 @@ ImagingJpeg2KEncodeCleanup(ImagingCodecState state) { /* Prevent multiple calls to ImagingIncrementalCodecDestroy */ context->encoder = NULL; - return -1; } From b07baf4549829dd81703ad9e6c59c0dd7feb6de1 Mon Sep 17 00:00:00 2001 From: Josh Ware Date: Tue, 26 Aug 2014 13:22:53 +1000 Subject: [PATCH 308/311] Removed tearDownModule from Test import --- Tests/test_jp2k_leaks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 Tests/test_jp2k_leaks.py diff --git a/Tests/test_jp2k_leaks.py b/Tests/test_jp2k_leaks.py old mode 100644 new mode 100755 index b0d84f47f..9dbb8c1f4 --- a/Tests/test_jp2k_leaks.py +++ b/Tests/test_jp2k_leaks.py @@ -1,4 +1,4 @@ -from helper import unittest, PillowTestCase, tearDownModule +from helper import unittest, PillowTestCase import sys from PIL import Image from io import BytesIO From 922a040629aeaeaa7700c0c7fd28b8abf955f7db Mon Sep 17 00:00:00 2001 From: wiredfool Date: Fri, 12 Sep 2014 22:45:02 -0700 Subject: [PATCH 309/311] Don't run memory leak test automatically. --- Tests/{test_jp2k_leaks.py => check_j2k_leaks.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Tests/{test_jp2k_leaks.py => check_j2k_leaks.py} (100%) diff --git a/Tests/test_jp2k_leaks.py b/Tests/check_j2k_leaks.py similarity index 100% rename from Tests/test_jp2k_leaks.py rename to Tests/check_j2k_leaks.py From 02c8188060abca0d5185828d8b824794bb254026 Mon Sep 17 00:00:00 2001 From: Hugo Date: Sat, 13 Sep 2014 18:32:18 +0300 Subject: [PATCH 310/311] Update CHANGES.rst [CI skip] --- CHANGES.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 266da354d..cc92eba8d 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,12 @@ Changelog (Pillow) 2.6.0 (unreleased) ------------------ +- Jpeg2k Decode/Encode Memory Leak Fix #898 + [joshware, wiredfool] + +- EpsFilePlugin Speed improvements #886 + [wiredfool, karstenw] + - Don't resize if already the right size. [radarhere] From b1187c7dc7d91086602c6c6546ce7d9df9cdcb21 Mon Sep 17 00:00:00 2001 From: tyrannosaurus Date: Sat, 13 Sep 2014 20:36:14 +0400 Subject: [PATCH 311/311] Fix heading --- docs/handbook/image-file-formats.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/handbook/image-file-formats.rst b/docs/handbook/image-file-formats.rst index 97caea722..cd187a4a2 100644 --- a/docs/handbook/image-file-formats.rst +++ b/docs/handbook/image-file-formats.rst @@ -670,6 +670,7 @@ files, using either JPEG or HEX encoding depending on the image mode (and whether JPEG support is available or not). PIXAR (read only) +^^^^ PIL provides limited support for PIXAR raster files. The library can identify and read “dumped” RGB files.