From jmr at engineering.uiowa.edu Sun Feb 1 13:52:12 2004 From: jmr at engineering.uiowa.edu (Joe Reinhardt) Date: Sun Feb 1 13:52:22 2004 Subject: [Image-SIG] floodfill routine ? In-Reply-To: <01f501c3e048$e6d6a680$2831a7c2@EON.sp2mi.univ-poitiers.fr> =?iso-8859-1?q?("Fran=E7ois?= Mourougaya"'s message of "Wed, 21 Jan 2004 19:03:40 +0100") References: <01f501c3e048$e6d6a680$2831a7c2@EON.sp2mi.univ-poitiers.fr> Message-ID: "Fran?ois Mourougaya" writes: > does anybody have a floodfill routine in python (i.e. takes a binary array > and throws an array with labeled regions), that would not be too slow ? > Thanks. I have C code that works with PIL to do this. I originally wrote these functions in python, but found them too slow and rewrote them in C. I added a new module with two functions: ImageRegion.rgrow(seed, neighborhood) - seeded region growing ImageRegion.cclabel(neighborhood) - connected components labeling Both of these functions run in less than one second when applied to 1000x1000 images. They both work well with the ImageStat module that is available in PIL, so you can use the region growing or cc labeling to find regions, and then use ImageStat to measure them, or to mask out grayscale regions to measure their statistics. If you are able to compile your own Image module you are welcome to try to use these functions. Also, if you use i386 Debian, I can send you the deb file for the modified Image module. - JMR From virus.manager at st.com Mon Feb 2 01:48:31 2004 From: virus.manager at st.com (virus.manager@st.com) Date: Mon Feb 2 01:48:45 2004 Subject: [Image-SIG] Virus Alert Message-ID: <20040202064831.CBF94DA44@epsilon.dmz-eu.st.com> The mail message (file: body.zip) you sent to contains a virus. (on epsilon) From arnd.baecker at web.de Mon Feb 2 02:43:10 2004 From: arnd.baecker at web.de (Arnd Baecker) Date: Mon Feb 2 02:43:15 2004 Subject: [Image-SIG] floodfill routine ? In-Reply-To: References: <01f501c3e048$e6d6a680$2831a7c2@EON.sp2mi.univ-poitiers.fr> Message-ID: On Sun, 1 Feb 2004, Joe Reinhardt wrote: > I have C code that works with PIL to do this. I originally wrote > these functions in python, but found them too slow and rewrote them in > C. > > I added a new module with two functions: > > ImageRegion.rgrow(seed, neighborhood) - seeded region growing > ImageRegion.cclabel(neighborhood) - connected components labeling > > Both of these functions run in less than one second when applied to > 1000x1000 images. They both work well with the ImageStat module that > is available in PIL, so you can use the region growing or cc labeling > to find regions, and then use ImageStat to measure them, or to mask > out grayscale regions to measure their statistics. > > If you are able to compile your own Image module you are welcome to > try to use these functions. Also, if you use i386 Debian, I can send > you the deb file for the modified Image module. I would be interested in this as well (if you did attach it, it was blocked from the mailing list ;-). More generally I think it would be nice to see this integrated in a future release of PIL. In the meantime a page (or wiki ?) where add-ons to PIL are collected might be very useful (I know talking is cheap ;-). Best, Arnd From ukwinding at uk.tk Mon Feb 2 16:32:30 2004 From: ukwinding at uk.tk (Image-sig) Date: Tue Feb 3 02:47:14 2004 Subject: [Image-SIG] sukper viagrma Message-ID: It`s fabuklous! I took the only one pijll of Cialjs and that was such a GREAT weekend! All the girls at the party were just punch-drunk with my potential I have fhcked all of them THREE times but my dhck WAS able to do some more! Cbalis- it`s COOL!!! The best weekend stuff I've ever trhied! Haven`t you tried yet? DO IT NkOW at http://www.vow-meds.com/sv/index.php?pid=genviag widespread backplanes terms Mukden payroll stewed Whittier brainstorm additional. From captain at home.nl Thu Feb 5 13:31:18 2004 From: captain at home.nl (Arjan Dikhoff) Date: Thu Feb 5 13:31:33 2004 Subject: [Image-SIG] PIL newbie question Message-ID: <000001c3ec16$42232120$44f679d9@CC202350a> Skipped content of type multipart/alternative-------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: image/jpeg Size: 5093 bytes Desc: not available Url : http://mail.python.org/pipermail/image-sig/attachments/20040205/692a2201/attachment.jpe -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: image/jpeg Size: 4738 bytes Desc: not available Url : http://mail.python.org/pipermail/image-sig/attachments/20040205/692a2201/attachment-0001.jpe From janssen at parc.com Thu Feb 5 14:00:33 2004 From: janssen at parc.com (Bill Janssen) Date: Thu Feb 5 14:01:00 2004 Subject: [Image-SIG] PIL newbie question In-Reply-To: Your message of "Thu, 05 Feb 2004 10:31:18 PST." <000001c3ec16$42232120$44f679d9@CC202350a> Message-ID: <04Feb5.110039pst."58611"@synergy1.parc.xerox.com> Since zlib support is a standard part of Python these days, I find it difficult to believe that you don't already have the zlib library installed. Just build PIL with PNG support (should happen automatically, shouldn't it?), and use PNG as your format. You'll save time in the long run. Bill From 100xcd at 100xcd.com Thu Feb 5 16:07:15 2004 From: 100xcd at 100xcd.com (Vladimir Ignatov) Date: Thu Feb 5 16:19:22 2004 Subject: [Image-SIG] Image's resolution (dpi) Message-ID: <00c101c3ec2e$4da11940$e0fe2ed4@100xcd> Hello! I need a simple utility that can automate some primitive image manipulations with PNG files (say, add a 100-pixel colored border around existing PNG image). I have try to use PIL. It works fine except the one point. Then I save a modified version of source picture I need to preserve original image's resolution (dpi). I can't see a way how it can be done for PNG files using PIL. Any suggestions are welcomed (include recommendation for the other libraries). Vladimir Ignatov From captain at home.nl Sun Feb 8 03:37:15 2004 From: captain at home.nl (Arjan Dikhoff) Date: Sun Feb 8 03:37:24 2004 Subject: [Image-SIG] PIL newbie question In-Reply-To: <04Feb5.110039pst."58611"@synergy1.parc.xerox.com> Message-ID: <001901c3ee1e$c411db40$44f679d9@CC202350a> Okay, application is finished. The result is pretty cool if I may say so myself. If you're interested, you can download it at http://www.xentax.com/earthclock. (Currently it's MS Windows only) It's GPLled, so the source code is also available. Gr. Arjan From majordomo at rohan.qualcomm.com Mon Feb 9 08:14:38 2004 From: majordomo at rohan.qualcomm.com (majordomo@rohan.qualcomm.com) Date: Mon Feb 9 08:14:44 2004 Subject: [Image-SIG] Majordomo results: hello Message-ID: <200402091314.i19DEcRx003985@rohan.qualcomm.com> -- >>>> This is a multi-part message in MIME format. **** Command 'this' not recognized. >>>> >>>> ------=_NextPart_000_0003_E3E6493A.0FDE8360 **** Command '------=_nextpart_000_0003_e3e6493a.0fde8360' not recognized. >>>> Content-Type: text/plain; charset=us-ascii **** Command 'content-type:' not recognized. >>>> Content-Transfer-Encoding: 7bit **** Command 'content-transfer-encoding:' not recognized. >>>> >>>> ------------------ Virus Warning Message (on indigo) **** Command '------------------' not recognized. >>>> >>>> Found virus WORM_MYDOOM.A in file test.scr (in test.zip) **** Command 'found' not recognized. >>>> The uncleanable file is deleted. **** Command 'the' not recognized. >>>> >>>> Visit http://qualnet.qualcomm.com/it/virus for more information **** Command 'visit' not recognized. >>>> >>>> --------------------------------------------------------- **** Command '---------------------------------------------------------' not recognized. >>>> >>>> ------=_NextPart_000_0003_E3E6493A.0FDE8360 **** Command '------=_nextpart_000_0003_e3e6493a.0fde8360' not recognized. >>>> Content-Type: text/plain; **** Command 'content-type:' not recognized. >>>> charset="Windows-1252" **** Command 'charset="windows-1252"' not recognized. >>>> Content-Transfer-Encoding: 7bit **** Command 'content-transfer-encoding:' not recognized. >>>> >>>> The message contains Unicode characters and has been sent as a binary attachment. **** Command 'the' not recognized. >>>> >>>> >>>> ------=_NextPart_000_0003_E3E6493A.0FDE8360 **** Command '------=_nextpart_000_0003_e3e6493a.0fde8360' not recognized. >>>> Content-Type: text/plain; charset=us-ascii **** Command 'content-type:' not recognized. >>>> Content-Transfer-Encoding: 7bit **** Command 'content-transfer-encoding:' not recognized. >>>> >>>> >>>> ------------------ Virus Warning Message (on indigo) **** Command '------------------' not recognized. >>>> >>>> test.zip is removed from here because it contains a virus. **** Command 'test.zip' not recognized. >>>> >>>> --------------------------------------------------------- **** Command '---------------------------------------------------------' not recognized. >>>> ------=_NextPart_000_0003_E3E6493A.0FDE8360-- **** Command '------=_nextpart_000_0003_e3e6493a.0fde8360--' not recognized. >>>> >>>> **** No valid commands found. **** Commands must be in message BODY, not in HEADER. **** Help for majordomo@rohan.qualcomm.com: This help message is being sent to you from the Majordomo mailing list management system at majordomo@rohan.qualcomm.com. This is version 1.94.4 of Majordomo. If you're familiar with mail servers, an advanced user's summary of Majordomo's commands appears at the end of this message. Majordomo is an automated system which allows users to subscribe and unsubscribe to mailing lists, and to retrieve files from list archives. You can interact with the Majordomo software by sending it commands in the body of mail messages addressed to "majordomo@rohan.qualcomm.com". Please do not put your commands on the subject line; Majordomo does not process commands in the subject line. You may put multiple Majordomo commands in the same mail message. Put each command on a line by itself. If you use a "signature block" at the end of your mail, Majordomo may mistakenly believe each line of your message is a command; you will then receive spurious error messages. To keep this from happening, either put a line starting with a hyphen ("-") before your signature, or put a line with just the word end on it in the same place. This will stop the Majordomo software from processing your signature as bad commands. Here are some of the things you can do using Majordomo: I. FINDING OUT WHICH LISTS ARE ON THIS SYSTEM To get a list of publicly-available mailing lists on this system, put the following line in the body of your mail message to majordomo@rohan.qualcomm.com: lists Each line will contain the name of a mailing list and a brief description of the list. To get more information about a particular list, use the "info" command, supplying the name of the list. For example, if the name of the list about which you wish information is "demo-list", you would put the line info demo-list in the body of the mail message. II. SUBSCRIBING TO A LIST Once you've determined that you wish to subscribe to one or more lists on this system, you can send commands to Majordomo to have it add you to the list, so you can begin receiving mailings. To receive list mail at the address from which you're sending your mail, simply say "subscribe" followed by the list's name: subscribe demo-list If for some reason you wish to have the mailings go to a different address (a friend's address, a specific other system on which you have an account, or an address which is more correct than the one that automatically appears in the "From:" header on the mail you send), you would add that address to the command. For instance, if you're sending a request from your work account, but wish to receive "demo-list" mail at your personal account (for which we will use "jqpublic@my-isp.com" as an example), you'd put the line subscribe demo-list jqpublic@my-isp.com in the mail message body. Based on configuration decisions made by the list owners, you may be added to the mailing list automatically. You may also receive notification that an authorization key is required for subscription. Another message will be sent to the address to be subscribed (which may or may not be the same as yours) containing the key, and directing the user to send a command found in that message back to majordomo@rohan.qualcomm.com. (This can be a bit of extra hassle, but it helps keep you from being swamped in extra email by someone who forged requests from your address.) You may also get a message that your subscription is being forwarded to the list owner for approval; some lists have waiting lists, or policies about who may subscribe. If your request is forwarded for approval, the list owner should contact you soon after your request. Upon subscribing, you should receive an introductory message, containing list policies and features. Save this message for future reference; it will also contain exact directions for unsubscribing. If you lose the intro mail and would like another copy of the policies, send this message to majordomo@rohan.qualcomm.com: intro demo-list (substituting, of course, the real name of your list for "demo-list"). III. UNSUBSCRIBING FROM MAILING LISTS Your original intro message contains the exact command which should be used to remove your address from the list. However, in most cases, you may simply send the command "unsubscribe" followed by the list name: unsubscribe demo-list (This command may fail if your provider has changed the way your address is shown in your mail.) To remove an address other than the one from which you're sending the request, give that address in the command: unsubscribe demo-list jqpublic@my-isp.com In either of these cases, you can tell majordomo@rohan.qualcomm.com to remove the address in question from all lists on this server by using "*" in place of the list name: unsubscribe * unsubscribe * jqpublic@my-isp.com IV. FINDING THE LISTS TO WHICH AN ADDRESS IS SUBSCRIBED To find the lists to which your address is subscribed, send this command in the body of a mail message to majordomo@rohan.qualcomm.com: which You can look for other addresses, or parts of an address, by specifying the text for which Majordomo should search. For instance, to find which users at my-isp.com are subscribed to which lists, you might send the command which my-isp.com Note that many list owners completely or fully disable the "which" command, considering it a privacy violation. V. FINDING OUT WHO'S SUBSCRIBED TO A LIST To get a list of the addresses on a particular list, you may use the "who" command, followed by the name of the list: who demo-list Note that many list owners allow only a list's subscribers to use the "who" command, or disable it completely, believing it to be a privacy violation. VI. RETRIEVING FILES FROM A LIST'S ARCHIVES Many list owners keep archives of files associated with a list. These may include: - back issues of the list - help files, user profiles, and other documents associated with the list - daily, monthly, or yearly archives for the list To find out if a list has any files associated with it, use the "index" command: index demo-list If you see files in which you're interested, you may retrieve them by using the "get" command and specifying the list name and archive filename. For instance, to retrieve the files called "profile.form" (presumably a form to fill out with your profile) and "demo-list.9611" (presumably the messages posted to the list in November 1996), you would put the lines get demo-list profile.form get demo-list demo-list.9611 in your mail to majordomo@rohan.qualcomm.com. VII. GETTING MORE HELP To contact a human site manager, send mail to listmaster@rohan.qualcomm.com. To contact the owner of a specific list, send mail to that list's approval address, which is formed by adding "-approval" to the user-name portion of the list's address. For instance, to contact the list owner for demo-list@rohan.qualcomm.com, you would send mail to demo-list-approval@rohan.qualcomm.com. To get another copy of this help message, send mail to majordomo@rohan.qualcomm.com with a line saying help in the message body. VIII. COMMAND SUMMARY FOR ADVANCED USERS In the description below items contained in []'s are optional. When providing the item, do not include the []'s around it. Items in angle brackets, such as
, are meta-symbols that should be replaced by appropriate text without the angle brackets. It understands the following commands: subscribe [] [
] Subscribe yourself (or
if specified) to the named . unsubscribe [] [
] Unsubscribe yourself (or
if specified) from the named . "unsubscribe *" will remove you (or
) from all lists. This _may not_ work if you have subscribed using multiple addresses. get [] Get a file related to . index [] Return an index of files you can "get" for . which [
] Find out which lists you (or
if specified) are on. who [] Find out who is on the named . info [] Retrieve the general introductory information for the named . intro [] Retrieve the introductory message sent to new users. Non-subscribers may not be able to retrieve this. lists Show the lists served by this Majordomo server. help Retrieve this message. end Stop processing commands (useful if your mailer adds a signature). Commands should be sent in the body of an email message to "majordomo@rohan.qualcomm.com" or to "-request@rohan.qualcomm.com". The parameter is only optional if the message is sent to an address of the form "-request@rohan.qualcomm.com". Multiple commands can be processed provided each occurs on a separate line. Commands in the "Subject:" line are NOT processed. If you have any questions or problems, please contact "listmaster@rohan.qualcomm.com". From vorshyton at oddpost.com Wed Feb 11 14:45:19 2004 From: vorshyton at oddpost.com (Freddy Klein) Date: Tue Feb 10 22:40:56 2004 Subject: [Image-SIG] 96.YQ. your size Message-ID: drop the hammer on the next girl you screw... http://www.touchd4d.com/vp5 No more of this sort of material. Honoured in 24-48 hours. http://demurrer.amilsdcx.com/a.html stem victor argo belfast galactic industrious nutate digit polk priscilla illustrate sub durance rj From scott.rifkin at yale.edu Sun Feb 15 17:05:19 2004 From: scott.rifkin at yale.edu (Scott Rifkin) Date: Sun Feb 15 17:05:24 2004 Subject: [Image-SIG] Saving 16bit tiffs Message-ID: I am trying to do the following: 1) read a 16-bit tiff image 2) extract a rectangle from it 3) do a two-dimensional Fourier transform on the extracted rectangle-I do this by the getdata function, reshaping it into a Numeric array, and calling fft2d on it. 4) remove some of the lower frequency contribution 5) take the inverse Fourier transform 6)paste that back into the original image 7) save the image as a 16-bit tiff to a new file I've narrowed down one problem to step 6. Here's the code skipping the fft stuff (I might ask about that in a future post). This just reads the image, crops it, gets the data, puts the data back, pastes it back, and saves it to a different file. im=Image.open(image_file_name).copy() cr=im.crop(tuple(bound)) #bound is a 4 tuple with the rectangle coords data=reshape(array(cr.getdata()),(cr.size[1],cr.size[0])) print cr.getpixel((0,0)) cr.putdata(ravel(data)) print data[0] print cr.getpixel((0,0)) im.paste(cr,tuple(bound)) im.save(new_image_file_name) when i run it, the three print statements come out as: 136 136 33928 something weird has happened in the putdata part. thanks in advance for any help, scott rifkin From vernonstegall at mobilbatam.com Mon Feb 16 12:33:31 2004 From: vernonstegall at mobilbatam.com (Marcie Nichols) Date: Sun Feb 15 21:30:00 2004 Subject: [Image-SIG] 58.FY. 3 inches bigger? Message-ID: Really lay the PIPE to the next girl you screw... http://spedwee.com/vp5 take off- http://capacity.diffrs.com/a.html den bottom arctan From will at stevello.free-online.co.uk Mon Feb 16 07:34:11 2004 From: will at stevello.free-online.co.uk (Will Stephenson) Date: Mon Feb 16 07:34:14 2004 Subject: [Image-SIG] Saving gifs with transparency Message-ID: <200402161234.11449.will@stevello.free-online.co.uk> Hello List I'm using PIL to write text into comic-book style speech bubbles, but I'm having difficulty writing transparent gifs. If you've got this working, could you have a look below and see what I'm doing wrong? I'm using PIL 1.1.4, which should be the first version which doesn't need a patch to do this. I 1) load a gif with a transparent background, im.info['transparency'] is set 2) draw some (black) text on it on a non transparent area 3) save it out again. Even if I just load the gif and save it again without drawing on it, transparency is lost. I'm checking the result using Gimp and KDE image viewers as I see XV doesn't support transparency. This is my test case: ? im = Image.open( 'seethru.gif' ) ? if im.info.has_key('transparency'): ? print im.info['transparency'] ? im.save('newcopy.gif', 'GIF') Drawing more transparent areas on the image eg: draw.ellipse((10, 10, 50, 50), outline=im.info['transparency'], fill=im.info['transparency']) just comes out white, too. Any help would be greatly appreciated. I've even checked the source of my library to see if it really has the transparency changes in GifImagePlugin! Will From lists at stevello.free-online.co.uk Mon Feb 16 10:00:35 2004 From: lists at stevello.free-online.co.uk (Will Stephenson) Date: Mon Feb 16 10:00:39 2004 Subject: [Image-SIG] Saving gifs with transparency In-Reply-To: <200402161234.11449.will@stevello.free-online.co.uk> References: <200402161234.11449.will@stevello.free-online.co.uk> Message-ID: <200402161500.35747.lists@stevello.free-online.co.uk> On Monday 16 February 2004 12:34, Will Stephenson wrote: > Even if I just load the gif and save it again without drawing on it, > transparency is lost. I'm checking the result using Gimp and KDE image > viewers as I see XV doesn't support transparency. The plot thickens. I had a look at GifImagePlugin, and noticed there was an option to use an external module to save the gif and a check to see if there is a key 'transparency' in the im.encoderinfo dictionary, so I added some debug prints to see what was going on there. There is no external module in use, but neither is the transparency key present, and opening the newly written file reveals PIL itself thinks the newly written file has become GIF87a from GIF89a, with no transparency: ? im = Image.open( imageFile ) ? print im.info.has_key('transparency') ? print im.info ? im.info['transparency'] = im.info['background'] ? im.save(imageFileCopy, 'GIF') ? im2 = Image.open( imageFileCopy ) ? print im2.info ./text3.py True {'duration': 100, 'version': 'GIF89a', 'transparency': 254, 'background': 255} Using internal driver no transparency present {'version': 'GIF87a', 'background': 0} Will -- Will Stephenson IRC: Bille From scott.rifkin at yale.edu Mon Feb 16 12:25:20 2004 From: scott.rifkin at yale.edu (Scott Rifkin) Date: Mon Feb 16 12:25:26 2004 Subject: [Image-SIG] Saving 16bit tiffs Message-ID: Following up my previous post with another question: I tried using fromstring and tostring instead of putdata. Here are the functions: def image_to_array(image): #returns a Numeric array from an Image using getdata return reshape(array(image.getdata()), (image.size[1], image.size[0])) def array_to_image(matrix, mode = 'I;16'): #returns an Image from a Numeric array using fromstring(Image) and tostring(Numeric) return Image.fromstring(mode, (matrix.shape[1], matrix.shape[0]), ravel(matrix.astype(Int)).tostring()) >>>mat=RandomArray.randint(0,60000,(6,4)) #an array of random ints 0-60000 >>>im=array_to_image(mat) >>>mat_from_im=image_to_array(im) now when I look at the matrices (or at the images) there are columns of zeros interspersed. for example (I've substituted letters for the numbers to make it more readable...there is no O, anything that looks like that is a zero) >>>mat array([[A,B,C,D], [E,F,G,H], [I,J,K,L], [M,N,P,Q], [R,S,T,U], [V,W,X,Y]]) >>>mat_from_image array([[A,0,B,0], [C,0,D,0], [E,0,F,0], [G,0,H,0], [I,0,J,0], [K,0,L,0]]) note that if I change the width of the array mat to an odd number (say a 6x3 matrix), the are no longer columns but are in positions (0,1),(1,0),(1,2),(2,1)...every other number if you were to ravel it. The problem is making the strings. When I look at what is returned by mat.tostring(), I get a string like '\xe9\x98\x00\x00\x1c\x81\x00\x00... I can make a new string by just cutting out all the \x00\x00 repeats and then reconstruct the image using Image.fromstring(), and this gives me the correct image. My questions are, why is it padding wthe string ith the extra \x00\x00 in the first place? What are these to/fromstring() functions doing? There must be a more appropriate way to do this, how? Thanks much. Scott Rifkin From lists at stevello.free-online.co.uk Mon Feb 16 18:01:54 2004 From: lists at stevello.free-online.co.uk (Will Stephenson) Date: Mon Feb 16 18:01:58 2004 Subject: [Image-SIG] Saving gifs with transparency In-Reply-To: <200402161500.35747.lists@stevello.free-online.co.uk> References: <200402161234.11449.will@stevello.free-online.co.uk> <200402161500.35747.lists@stevello.free-online.co.uk> Message-ID: <200402162301.54463.lists@stevello.free-online.co.uk> On Monday 16 February 2004 15:00, Will Stephenson wrote: > On Monday 16 February 2004 12:34, Will Stephenson wrote: > > Even if I just load the gif and save it again without drawing on it, > > transparency is lost. I'm checking the result using Gimp and KDE image > > viewers as I see XV doesn't support transparency. > > The plot thickens. I had a look at GifImagePlugin, and noticed there was > an option to use an external module to save the gif and a check to see if > there is a key 'transparency' in the im.encoderinfo dictionary, so I added > some debug prints to see what was going on there. More GifImagePlugin internals: I discovered that the contents of im.encoderinfo determine whether or not the transparency chunk/block/header gets written, and this dictionary is initialised with the 'options' argument to Image.save. Back in my script, I got PIL to write transparent gifs by passing the contents of im.info back in via 'options': im.save( outfile, 'GIF', transparency=im.info['transparency'] ) So does anyone know why I'm having to jump through these hoops just to preserve the image's existing transparency? PIL is a good library - I've managed to pick enough up to achieve my needs with it in half a day - so I hope I'm just getting something monumentally wrong. regards Will -- Will Stephenson IRC: Bille From janssen at parc.com Mon Feb 16 18:49:50 2004 From: janssen at parc.com (Bill Janssen) Date: Mon Feb 16 18:50:11 2004 Subject: [Image-SIG] Gamera document image analysis toolkit now on SourceForge Message-ID: <04Feb16.154955pst."58611"@synergy1.parc.xerox.com> Readers of this list will be interested in Gamera, an open-source image processing toolkit from Johns Hopkins. It uses Python wrappers around a C++ library. In addition to some basic image-handling routines, it includes a morphology module, and a classification system useful for text recognition problems (though the Johns Hopkins folks are using it for musical note recognition!). There's also a nice wxPython GUI. gamera.sf.net. Bill From gerard.coing at culture.gouv.fr Tue Feb 17 04:37:09 2004 From: gerard.coing at culture.gouv.fr (gerard coing) Date: Tue Feb 17 04:36:22 2004 Subject: [Image-SIG] IMAGE WEIGHT IN PIL Message-ID: HI New to Python & PIL I have to do image batch converting and resizing from TIFF to JPEG with a MAXIMUM WEIGHT (150 Ko) for the output. Could someone tell me what is the syntax to get the weight of an output image and if there is another way than looping through the output until the desired weight is got. Gerard Coing photographie et multimedia Drac de Lorraine Service de l'Inventaire du Patrimoine 29 rue du Haut-Bourgeois 54000 Nancy m?l : gerard.coing@culture.gouv.fr t?l Nancy : 03 83 32 90 63 t?l Metz : 03 87 56 41 19 t?l portable : 06 84 96 66 33 From klimek at grc.nasa.gov Tue Feb 17 10:27:32 2004 From: klimek at grc.nasa.gov (Bob Klimek) Date: Tue Feb 17 10:23:21 2004 Subject: [Image-SIG] Saving 16bit tiffs In-Reply-To: References: Message-ID: <403232E4.2050708@grc.nasa.gov> Scott Rifkin wrote: >I am trying to do the following: > >1) read a 16-bit tiff image >2) extract a rectangle from it >3) do a two-dimensional Fourier transform on the extracted rectangle-I do >this by the getdata function, reshaping it into a Numeric array, and >calling fft2d on it. >4) remove some of the lower frequency contribution >5) take the inverse Fourier transform >6)paste that back into the original image >7) save the image as a 16-bit tiff to a new file > > Since you're dealing with 16-bit images, you might be able to do this with PythonMagick (http://www.procoders.net/moinmoin/PythonMagick). Bob From John.Ertl at fnmoc.navy.mil Wed Feb 18 18:39:04 2004 From: John.Ertl at fnmoc.navy.mil (Ertl, John) Date: Wed Feb 18 18:36:19 2004 Subject: [Image-SIG] ploting and making images. Message-ID: Hi, I have been working with Numeric Python for awhile now but now I need to make images of gridded weather data...rain amounts, wind speeds and directions, etc.... I need to make histogram images of say rainfall for every three hours over the last 24 hours. I also need to plot maps with weather data overlaid on them. I was pointed to PIL but it does not look like it would be suited to such things. Do you have a suggestion? I was looking for examples of images produced using PIL but was unable to find any on the web site. Thanks, John C. Ertl Fleet Numerical Meteorology & Oceanography Center 7 Grace Hopper Ave Monterey, CA 93943 phone: (831) 656-5704 fax: (831) 656-4363 From Chris.Barker at noaa.gov Wed Feb 18 19:40:33 2004 From: Chris.Barker at noaa.gov (Chris Barker) Date: Wed Feb 18 19:40:56 2004 Subject: [Image-SIG] ploting and making images. In-Reply-To: References: Message-ID: <40340601.8070101@noaa.gov> Ertl, John wrote: > I have been working with Numeric Python for awhile now but now I need to > make images of gridded weather data...rain amounts, wind speeds and > directions, etc... > I was pointed to PIL but it does not look > like it would be suited to such things. no, not really, It's suited to acting as a back-end to a tool that does such things, but you'll be writting a heck of a lot of code yourself if you use just PIL. Check out GMT: http://gmt.soest.hawaii.edu/ and it's Python wrappers: http://www.cdc.noaa.gov/~jsw/python/gmt/ I havn't used them yet, but it sounds like just what you are looking for. For non-map plotting (histograms, etc.), check out matplotlib: http://matplotlib.sourceforge.net/ -Chris -- Christopher Barker, Ph.D. Oceanographer NOAA/OR&R/HAZMAT (206) 526-6959 voice 7600 Sand Point Way NE (206) 526-6329 fax Seattle, WA 98115 (206) 526-6317 main reception Chris.Barker@noaa.gov From janssen at parc.com Thu Feb 19 12:40:54 2004 From: janssen at parc.com (Bill Janssen) Date: Thu Feb 19 12:41:20 2004 Subject: [Image-SIG] ploting and making images. In-Reply-To: Your message of "Wed, 18 Feb 2004 15:39:04 PST." Message-ID: <04Feb19.094059pst."58611"@synergy1.parc.xerox.com> You can make simple charts with PIL, including histogram charts. I do it in one of my CGI scripts, to produce loglog plots of document distribution in a digital library. The script creates a new PNG image, then returns it to the browser. Create a new image with Image.new(), and draw on it using the ImageDraw module, then save it to a file. Bill From John.Ertl at fnmoc.navy.mil Thu Feb 19 18:34:38 2004 From: John.Ertl at fnmoc.navy.mil (Ertl, John) Date: Thu Feb 19 18:31:46 2004 Subject: [Image-SIG] RE: ploting and making images. Message-ID: Kind soles that take pity on the newbie. I have gotten PIL loaded and I can read in image files but I do not have XV loaded (sys admin issues) Is there a recommended Python module for viewing images manipulated in PIL. Thanks for the help John Ertl -----Original Message----- From: Ertl, John Sent: Wednesday, February 18, 2004 15:39 To: 'image-sig@python.org' Subject: ploting and making images. Hi, I have been working with Numeric Python for awhile now but now I need to make images of gridded weather data...rain amounts, wind speeds and directions, etc.... I need to make histogram images of say rainfall for every three hours over the last 24 hours. I also need to plot maps with weather data overlaid on them. I was pointed to PIL but it does not look like it would be suited to such things. Do you have a suggestion? I was looking for examples of images produced using PIL but was unable to find any on the web site. Thanks, John C. Ertl Fleet Numerical Meteorology & Oceanography Center 7 Grace Hopper Ave Monterey, CA 93943 phone: (831) 656-5704 fax: (831) 656-4363 From janssen at parc.com Thu Feb 19 19:21:31 2004 From: janssen at parc.com (Bill Janssen) Date: Thu Feb 19 19:22:02 2004 Subject: [Image-SIG] RE: ploting and making images. In-Reply-To: Your message of "Thu, 19 Feb 2004 15:34:38 PST." Message-ID: <04Feb19.162137pst."58611"@synergy1.parc.xerox.com> What PIL's "show" does is save it to a file, then invoke xv on it. Do the same: save the image to a file, then invoke your favorite image display program on it. Bill From chris at cogdon.org Fri Feb 20 02:41:38 2004 From: chris at cogdon.org (Chris Cogdon) Date: Fri Feb 20 02:41:47 2004 Subject: [Image-SIG] PIL Bug: Crash processing GIF image Message-ID: <37AE5E5E-6378-11D8-A8A8-000A95E3823E@cogdon.org> I've had cause to run my PIL-based thumbnailing code over the vast collection of artwork from my community artwork site, and I've encountered one image that causes PIL/Python to behave very badly. When doing a 'convert', python will report a quantization error (if it gets that far)... but it is also accompanied by either a CPU lock-up, or a segmentation fault, which makes trapping for exceptions a little tricky :) I've tried it with PIL 1.1.3 and 1.1.4 with the same effect, but there are some system combinations where it actually does not crash, and instead only reports the quantization error. I'm reporting the bug here, as suggested by the pythonware people... if you (pythonware) can peek at it, that would be fantastic :) in the meantime, I'll just mark that file as 'poison' to my code. If folk out there can try the sample image and code, and mail me with your results, plus OS version, python version and PIL version, I'll collate the results and post a summary here. Thanks kindly for any attention you can give! http://onca.catsden.net/~chris/pilbug1/ PS: Yes, I know it's a GIF file, and GIF files are evil. I'm not going to say "you can't submit GIFs, they're evil" to the thousands of artists that just aren't that politically inclined :) -- ("`-/")_.-'"``-._ Chris Cogdon . . `; -._ )-;-,_`) (v_,)' _ )`-.\ ``-' _.- _..-_/ / ((.' ((,.-' ((,/ fL From gherman at darwin.in-berlin.de Fri Feb 20 08:43:16 2004 From: gherman at darwin.in-berlin.de (Dinu Gherman) Date: Fri Feb 20 08:42:06 2004 Subject: [Image-SIG] Quicktime port to Windows, join the project! In-Reply-To: <20030918021911.90247.qmail@web21102.mail.yahoo.com> Message-ID: www.stani.be on 2003-09-18: > We are forming a team to port the Quicktime API to > Windows. People involved till now are: Jack Jansen > (who did the qt port on Mac Os X, probably more as > advisor), Bruce Williams (C++) and me (Python). As we > can't know how much work it'll be, it would be nice if > some more people join. Any help is welcome (C++, > Python, website, documenting,...) The quicktime api is > quite low level, so I think we might need some more > Python programmers to make also a more high-level > library. [...] Hi, would anybody involved mind to post an update of these activities, if there were any? I'd be also interested in the likelihood of ever seeing Quicktime being equally supported on Linux... Thanks, Dinu -- Dinu C. Gherman - http://python.net/~gherman ...................................................................... "The best way to predict the future is to invent it." (Alan Kay) From droyko at uottawa.ca Fri Feb 20 10:44:29 2004 From: droyko at uottawa.ca (Dominik Royko) Date: Fri Feb 20 10:44:43 2004 Subject: [Image-SIG] RE: ploting and making images. References: <04Feb19.162137pst."58611"@synergy1.parc.xerox.com> Message-ID: <40362B5D.2DFAB8F4@uottawa.ca> What about creating a little shell script and placing it in the path that PIL uses when invoking 'xv'? Then you could use "show" as usual. cat > xv #!/bin/bash /usr/bin/kview $* (I'm not sure what path PIL uses, though. Presumably, it would be $PATH.) Dominik Royko. From bob at redivi.com Fri Feb 20 11:12:43 2004 From: bob at redivi.com (Bob Ippolito) Date: Fri Feb 20 11:09:32 2004 Subject: [Image-SIG] Quicktime port to Windows, join the project! In-Reply-To: References: Message-ID: <9D00023C-63BF-11D8-A0EB-000A95686CD8@redivi.com> On Feb 20, 2004, at 8:43 AM, Dinu Gherman wrote: > www.stani.be on 2003-09-18: > >> We are forming a team to port the Quicktime API to >> Windows. People involved till now are: Jack Jansen >> (who did the qt port on Mac Os X, probably more as >> advisor), Bruce Williams (C++) and me (Python). As we >> can't know how much work it'll be, it would be nice if >> some more people join. Any help is welcome (C++, >> Python, website, documenting,...) The quicktime api is >> quite low level, so I think we might need some more >> Python programmers to make also a more high-level >> library. [...] > > would anybody involved mind to post an update of these activities, > if there were any? I'd be also interested in the likelihood of ever > seeing Quicktime being equally supported on Linux... There is absolutely no chance of Quicktime being equally supported on Linux (well *maybe* on x86 by using the win32 quicktime dll, like some of the movie players can do to get proprietary codec support, but the chances of that happening are very slim). -bob From fredrik at pythonware.com Fri Feb 20 12:17:25 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Fri Feb 20 12:27:01 2004 Subject: [Image-SIG] Re: PIL Bug: Crash processing GIF image References: <37AE5E5E-6378-11D8-A8A8-000A95E3823E@cogdon.org> Message-ID: Chris Cogdon wrote: > I've had cause to run my PIL-based thumbnailing code over the vast > collection of artwork from my community artwork site, and I've > encountered one image that causes PIL/Python to behave very badly. When > doing a 'convert', python will report a quantization error (if it gets > that far)... but it is also accompanied by either a CPU lock-up, or a > segmentation fault, which makes trapping for exceptions a little tricky > :) > > I've tried it with PIL 1.1.3 and 1.1.4 with the same effect, but there > are some system combinations where it actually does not crash, and > instead only reports the quantization error. it looks like the GIF codec messes up when it's trying to determine the right size of the file, which results in a 62004-pixel high image memory, which results in a 0-pixel wide thumbnail, which causes the quantization code to mess up. > I'm reporting the bug here, as suggested by the pythonware people... if > you (pythonware) can peek at it, that would be fantastic :) in the > meantime, I'll just mark that file as 'poison' to my code. a workaround is to check the height/width ratio. something like this might work (untested): i = Image.open(...) w, h = i.size if w > h*50 or h > w*50: print "your image file doesn't look right; it's probably a" print "bug on our side, but while you're waiting for us to" print "fix it, you could try converting it to another file" print "format and uploading it again." else: ... From chris at cogdon.org Fri Feb 20 12:59:45 2004 From: chris at cogdon.org (Chris Cogdon) Date: Fri Feb 20 12:59:54 2004 Subject: [Image-SIG] Re: PIL Bug: Crash processing GIF image In-Reply-To: References: <37AE5E5E-6378-11D8-A8A8-000A95E3823E@cogdon.org> Message-ID: <912B7E7F-63CE-11D8-A8A8-000A95E3823E@cogdon.org> On Feb 20, 2004, at 09:17, Fredrik Lundh wrote: > it looks like the GIF codec messes up when it's trying to determine > the right size of the file, which results in a 62004-pixel high image > memory, which results in a 0-pixel wide thumbnail, which causes the > quantization code to mess up. Wow... that's weird :) I agree that both PIL and ImageMagick report the 62004 pixel high image... it certainly doesn't LOOK that way when viewed in a browser :) Thank you for the investigation. -- ("`-/")_.-'"``-._ Chris Cogdon . . `; -._ )-;-,_`) (v_,)' _ )`-.\ ``-' _.- _..-_/ / ((.' ((,.-' ((,/ fL From hancock at anansispaceworks.com Fri Feb 20 13:52:56 2004 From: hancock at anansispaceworks.com (Terry Hancock) Date: Fri Feb 20 13:41:29 2004 Subject: [Image-SIG] PIL's configure bug -- from 2002 Message-ID: This is extremely frustrating: Since before 2002, when I first reported the problem and provided a diff to indicate the necessary change http://mail.python.org/pipermail/image-sig/2002-February/001745.html PIL's installation has had a fundamental flaw, which remains to this day: While PIL itself honors the --prefix option to "configure", it does not honor this option for its dependencies -- libjpeg, libpng, and libz. If they were installed using --prefix, PIL will not install correctly, and it cannot read JPG or PNG files, which are probably its most frequently used image types. I have struggled with this problem through virtually every PIL install I have had to do, as the libjpeg, libpng, and libz libraries are RARELY installed in /usr/local as the Makefile presumes. It used to be possible to work-around this flaw by editing the makefiles, and following the make -f Makefile.pre.in boot instructions. However, with the introduction of Python 2.3, this no longer works: http://mail.python.org/pipermail/image-sig/2003-December/002530.html Now, I'm not very familiar with Gnu Autoconf, but I *would* try to fix this bug and send you a diff -- *but* the "configure.in" file is missing. It seems I would need to provide a diff for that in the process. And particularly to figure out how to set and use the variables to use in the Makefile. If I wanted to provide a permanent fix for this, how could I do that? Thank you, Terry -- Terry Hancock ( hancock at anansispaceworks.com ) Anansi Spaceworks http://www.anansispaceworks.com From janssen at parc.com Fri Feb 20 14:20:23 2004 From: janssen at parc.com (Bill Janssen) Date: Fri Feb 20 14:20:48 2004 Subject: [Image-SIG] PIL's configure bug -- from 2002 In-Reply-To: Your message of "Fri, 20 Feb 2004 10:52:56 PST." Message-ID: <04Feb20.112029pst."58611"@synergy1.parc.xerox.com> Terry, You should be able to set the env vars LIBS and CPPFLAGS to the appropriate -L and -I switches before running configure, and they will be picked up. Bill From klimek at grc.nasa.gov Fri Feb 20 14:41:11 2004 From: klimek at grc.nasa.gov (Bob Klimek) Date: Fri Feb 20 14:37:00 2004 Subject: [Image-SIG] Quicktime port to Windows, join the project! In-Reply-To: <9D00023C-63BF-11D8-A0EB-000A95686CD8@redivi.com> References: <9D00023C-63BF-11D8-A0EB-000A95686CD8@redivi.com> Message-ID: <403662D7.5030009@grc.nasa.gov> Bob Ippolito wrote: > There is absolutely no chance of Quicktime being equally supported on > Linux (well *maybe* on x86 by using the win32 quicktime dll, like some > of the movie players can do to get proprietary codec support, but the > chances of that happening are very slim). Why do you say that there is "absolutely no chance of Quicktime being equally supported on Linux" ? It already is. Check out: (http://heroinewarrior.com/quicktime.php3). The problem is that many of the codecs are not supported but the quicktime wrapper is open and documented. Bob From bob at redivi.com Fri Feb 20 14:44:38 2004 From: bob at redivi.com (Bob Ippolito) Date: Fri Feb 20 14:41:27 2004 Subject: [Image-SIG] Quicktime port to Windows, join the project! In-Reply-To: <403662D7.5030009@grc.nasa.gov> References: <9D00023C-63BF-11D8-A0EB-000A95686CD8@redivi.com> <403662D7.5030009@grc.nasa.gov> Message-ID: <37EEA84A-63DD-11D8-A0EB-000A95686CD8@redivi.com> On Feb 20, 2004, at 2:41 PM, Bob Klimek wrote: > Bob Ippolito wrote: > >> There is absolutely no chance of Quicktime being equally supported on >> Linux (well *maybe* on x86 by using the win32 quicktime dll, like >> some of the movie players can do to get proprietary codec support, >> but the chances of that happening are very slim). > > > Why do you say that there is "absolutely no chance of Quicktime being > equally supported on Linux" ? It already is. Check out: > (http://heroinewarrior.com/quicktime.php3). The problem is that many > of the codecs are not supported but the quicktime wrapper is open and > documented. I said equally for a reason.. On Mac (and hypothetically on Win32), the QuickTime support in Python is a wrapper for the Apple QuickTime? API, not a wrapper for some-library-with-another-API-that-understands-the-quicktime-file- format-and-maybe-some-of-the-same-codecs. -bob From hancock at anansispaceworks.com Fri Feb 20 17:45:23 2004 From: hancock at anansispaceworks.com (Terry Hancock) Date: Fri Feb 20 17:33:46 2004 Subject: [Image-SIG] PIL's configure bug -- from 2002 In-Reply-To: <04Feb20.112029pst."58611"@synergy1.parc.xerox.com> References: <04Feb20.112029pst."58611"@synergy1.parc.xerox.com> Message-ID: On Friday 20 February 2004 01:20 pm, Bill Janssen wrote: > You should be able to set the env vars LIBS and CPPFLAGS to the > appropriate -L and -I switches before running configure, and they will > be picked up. I agree that they *should* do that. They *should* also be set by options to configure. They are not and they do not. I would like to fix the whole problem PERMANENTLY. Because after four or five times of messing with this nonsense, I'm sick and tired of it. It was busted before, and with Python 2.3, it's more busted. Time to fix it. It should be almost as easy to fix it properly as to work around it. However, I cannot create a diff to fix the problem properly, because part of the source code is missing! Apparently I can't just go pull "configure.in" out of the CVS, as I could for many packages. I could theoretically patch "configure" -- but my understanding is that that file is machine-generated, so that would not be feasible. So I'm asking for help around that oversight. Either the sources are already available somewhere, and I just need a pointer, or they aren't, in which case, I'm requesting that they should be. Thanks, Terry -- Terry Hancock ( hancock at anansispaceworks.com ) Anansi Spaceworks http://www.anansispaceworks.com From douglas at paradise.net.nz Fri Feb 20 18:23:20 2004 From: douglas at paradise.net.nz (Douglas Bagnall) Date: Fri Feb 20 18:23:04 2004 Subject: [Image-SIG] numbers from image properties Message-ID: <403696E8.3090801@paradise.net.nz> hi, I need to construct vectors based on images' properties, with one value for each property. I can get quite a few simple numbers from PIL, but I also want to quantify more complex qualities. There are a lot of vision oriented libraries that will find edges and so forth, but are there any that will (for instance) just say edgy how an image is overall? With or without python bindings. I've searched around a bit and not found much. douglas bagnall From hancock at anansispaceworks.com Fri Feb 20 19:37:11 2004 From: hancock at anansispaceworks.com (Terry Hancock) Date: Fri Feb 20 19:25:45 2004 Subject: [Image-SIG] PIL's configure bug -- from 2002 In-Reply-To: References: <04Feb20.112029pst."58611"@synergy1.parc.xerox.com> Message-ID: On Friday 20 February 2004 04:45 pm, Terry Hancock wrote: > On Friday 20 February 2004 01:20 pm, Bill Janssen wrote: > > You should be able to set the env vars LIBS and CPPFLAGS to the > > appropriate -L and -I switches before running configure, and they will > > be picked up. > > I agree that they *should* do that. They *should* also be set by > options to configure. They are not and they do not. Just to prove I'm not imagining things . . . After unpacking 1.1.4: % setenv LIBS "-L/usr/local/narya/lib -ljpeg -lz -lpng" % setenv CPPFLAGS "-I/usr/local/narya/include -L/usr/local/narya/lib" cd libImaging ./configure --prefix=/usr/local/narya --with-jpeg=/usr/local/narya/lib --with-zlib=/usr/local/narya/lib make cd .. python ./setup.py build_ext -i This at least *does* build and install. Now, test it: Python 2.3.3 (#1, Feb 17 2004, 16:56:55) [GCC 2.95.2 20000220 (Debian GNU/Linux)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from PIL import Image >>> a = Image.open("astronomer.jpg") >>> b = a.convert("P") Traceback (most recent call last): File "", line 1, in ? File "/usr/local/narya/lib/python2.3/site-packages/PIL/Image.py", line 566, in convert self.load() File "/usr/local/narya/lib/python2.3/site-packages/PIL/ImageFile.py", line 165, in load d = Image._getdecoder(self.mode, d, a, self.decoderconfig) File "/usr/local/narya/lib/python2.3/site-packages/PIL/Image.py", line 309, in _getdecoder raise IOError("decoder %s not available" % decoder_name) IOError: decoder jpeg not available See? Still no JPEG decoder. It did not compile support for JPEG. I know this can be fixed -- I've done it before with Python 2.1 and 2.2, using the Makefile.pre.in instructions. But those don't work with 2.3 apparently. I think this deserves a permanent fix. Cheers, Terry -- Terry Hancock ( hancock at anansispaceworks.com ) Anansi Spaceworks http://www.anansispaceworks.com From janssen at parc.com Fri Feb 20 19:52:36 2004 From: janssen at parc.com (Bill Janssen) Date: Fri Feb 20 19:52:54 2004 Subject: [Image-SIG] PIL's configure bug -- from 2002 In-Reply-To: Your message of "Fri, 20 Feb 2004 14:45:23 PST." Message-ID: <04Feb20.165242pst."58611"@synergy1.parc.xerox.com> Not really a PIL problem, you just don't like the way things work. Fair enough! I agree, fix it. But if I could suggest something: don't fix it in a piecemeal style -- this is a generic problem with the autoconf system, not with PIL. Add a couple of standard switches to configure, not to the PIL configure.in. According to the autoconf web page at http://www.gnu.org/software/autoconf/: "If you have found a bug in Autoconf that hasn't yet been fixed in the latest CVS sources of Autoconf, you should send a patch (made for the CVS sources, not the release sources) to autoconf-patches@gnu.org." The CVS sources are at: :pserver:anoncvs@subversions.gnu.org:/cvsroot/autoconf, module "autoconf", with blank password. Have fun! Bill From smurf at smurf.noris.de Sat Feb 21 01:02:49 2004 From: smurf at smurf.noris.de (Matthias Urlichs) Date: Sat Feb 21 01:04:50 2004 Subject: [Image-SIG] numbers from image properties In-Reply-To: <403696E8.3090801@paradise.net.nz> References: <403696E8.3090801@paradise.net.nz> Message-ID: <20040221060249.GN21432@kiste> Hi, Douglas Bagnall: > There are a lot of vision oriented libraries that will find edges and so > forth, but are there any that will (for instance) just say edgy how an > image is overall? With or without python bindings. > Hmm, that special case seems rather simple -- run the "find edges" algortihm, you get a picture back (white=edge, black=not). Now calculate the average pixel value of that image, perhas convert to logarithmic scale, or maybe count how many pixels (in proportion to the total) are above the average, then test how well that metric works on a few sample images. > I've searched around a bit and not found much. > So write them yourself? See above. ;-) -- Matthias Urlichs -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: Digital signature Url : http://mail.python.org/pipermail/image-sig/attachments/20040221/7ed564e1/attachment.bin From fredrik at pythonware.com Sat Feb 21 04:38:20 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Sat Feb 21 04:39:12 2004 Subject: [Image-SIG] Re: Re: PIL Bug: Crash processing GIF image References: <37AE5E5E-6378-11D8-A8A8-000A95E3823E@cogdon.org> <912B7E7F-63CE-11D8-A8A8-000A95E3823E@cogdon.org> Message-ID: Chris Cogdon wrote: > > > it looks like the GIF codec messes up when it's trying to determine > > the right size of the file, which results in a 62004-pixel high image > > memory, which results in a 0-pixel wide thumbnail, which causes the > > quantization code to mess up. > > Wow... that's weird :) I agree that both PIL and ImageMagick report the > 62004 pixel high image... it certainly doesn't LOOK that way when > viewed in a browser :) the GIF format uses both a "logical screen size" and a bounding box for the actual pixel data. in this file, the screen size is (53, 62004) while the bounding box is (0, 0, 444, 599). when PIL reads this image, it creates an image memory large enough to hold the entire screen, and then pastes the pixels into the given bounding box. ImageMagick probably does the same thing, while the browser you're using only grabs the pixel data. if you want to ignore the logical screen, you can manipulate the "size" and "tile" attributes after you've opened the file, but before you've done anything else with the image: i = Image.open(...) if i.tile[0][0] == "gif": # only read the first "local image" from this GIF file x0, y0, x1, y1 = i.tile[0][1] i.size = x1-x0, y1-y0 del i.tile[1:] (you can place this code inside the aspect ratio check in my earlier example) From fredrik at pythonware.com Sat Feb 21 06:04:49 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Sat Feb 21 06:05:43 2004 Subject: [Image-SIG] Re: PIL Bug: Crash processing GIF image References: <37AE5E5E-6378-11D8-A8A8-000A95E3823E@cogdon.org> Message-ID: > it looks like the GIF codec messes up when it's trying to determine > the right size of the file, which results in a 62004-pixel high image > memory, which results in a 0-pixel wide thumbnail, which causes the > quantization code to mess up. here's a quick fix for the quantization code. convert(ADAPTIVE) of a zero-sized image will still result in a traceback after this change; that's likely to be changed in 1.1.5. ==== //modules/pil/libImaging/Quant.c#4 (ktext) ==== *** 1593,1599 **** } else { - free(p); return (Imaging) ImagingError_ValueError("quantization error"); } --- 1594,1599 ---- From fredrik at pythonware.com Sat Feb 21 06:47:59 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Sat Feb 21 06:48:55 2004 Subject: [Image-SIG] Re: IMAGE WEIGHT IN PIL References: Message-ID: Gerard Coing wrote: > New to Python & PIL > I have to do image batch converting and resizing from TIFF to JPEG with > a MAXIMUM WEIGHT (150 Ko) for the output. > Could someone tell me what is the syntax to get the weight of an output > image and if there is another way than looping through the output until > the desired weight is got. I assume you mean image size (in bytes). unlike many video formats, JPEG doesn't support "constant bitrate", so the size of the output file will vary depending on the contents of the image. a typical colour image is compressed about 20 times at the default quality, so your 150k limit corresponds to a 1000x1000-pixel image. If the image is only slightly larger, you can try dropping the quality somewhat. However, if the image is much larger, it's probably better to resize it than to tweak the JPEG quality settings. I'd try something like: width, height = im.size if width > 3000 or height > 3000: # really large image; resize before compression im.thumbnail((1000, 1000), Image.ANTIALIAS) save with default quality (75) if filesize > 150k: if width > 2000 or height > 2000: # large image; dropping the quality isn't likely to help im.thumbnail((1000, 1000), Image.ANTIALIAS) save with default quality (75) if filesize > 150k: save with quality=50 else: # try dropping the quality before resizing save with quality=50 if filesize > 150k: im.thumbnail((1000, 1000), Image.BICUBIC) save with default quality (75) if filesize > 150k: save with quality=50 # if the 150k limit is absolute, add more tests here (tweak the numbers as necessary) (if most images are rectangular, it's probably a good idea to calculate the "thumbnail" size based on the aspect ratio for each image) From fredrik at pythonware.com Sat Feb 21 08:13:42 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Sat Feb 21 08:14:27 2004 Subject: [Image-SIG] Re: Image parser bug (Debian Bug #176456) References: <20040107124303.GB3365@play.smurf.noris.de> Message-ID: > Can somebody who knows more about PIL's internals look into this? > Thanks! it's a bug in the incremental parser code; it doesn't support drivers that override the "load_read" hook. I have no idea how to fix this, but I'll think of something... cheers /F From stacirodocker at realwebsurf.com Sat Feb 21 21:33:24 2004 From: stacirodocker at realwebsurf.com (stacirodocker@realwebsurf.com) Date: Sat Feb 21 21:33:25 2004 Subject: [Image-SIG] Sexual Function Improved "Date Number"0002 Message-ID: <7676625619.95GKSC@hotmail.com> Really lay the PIPE to the next girl you screw... http://rfcr5d.com/vp5 take off- http://drain.diffrs.com/a.html companionway hymn amongst From fredrik at pythonware.com Sun Feb 22 08:35:31 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Sun Feb 22 08:36:31 2004 Subject: [Image-SIG] ANN: PIL 1.1.5 alpha 1 Message-ID: A PIL 1.1.5 alpha 1 tarball is now available from effbot.org: http://effbot.org/downloads (look for Imaging-1.1.5a1.tar.gz) A list of changes can be found here: http://effbot.org/zone/pil-changes-115.htm Report bugs to this list or directly to me, as usual. enjoy /F From fredrik at pythonware.com Sun Feb 22 12:30:44 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Sun Feb 22 12:31:39 2004 Subject: [Image-SIG] ANN: pilwmf 1.0 beta 1 for windows Message-ID: pilwmf is a simple WMF renderer for PIL 1.1.5a1, for Windows. This plugin uses the new stub loader interface in 1.1.5, and can render "placeable windows metafile" as bitmaps. An example: import Image import WmfPlugin # activate WMF renderer im = Image.open("example.wmf") im.load() # render the file im.save("example.png") Source and 2.3 binaries are available from: http://effbot.org/downloads#pilwmf See the README file for more details. From gerard.coing at culture.gouv.fr Mon Feb 23 04:44:14 2004 From: gerard.coing at culture.gouv.fr (gerard coing) Date: Mon Feb 23 04:43:31 2004 Subject: [Image-SIG] Re: Image-SIG Digest, Vol 10, Issue 11 In-Reply-To: Message-ID: Thank you Fredrik I have to apologize because i forgot to tell you that I first do a resize. In fact my input images are 2000x3000 px and I have to output "full screen" (768x512 px) and thumbnails (192x192 px) in JPEG format for the web. For example to produce thumbnails I use following script : for infile in glob.glob("*.psd"): f, e = os.path.splitext(infile) outfile = f + "_V.jpg" im = Image.open(infile) lg, ht = im.size[0], im.size[1] if lg > ht and lg > 192: k = 192.0 / lg elif ht > 192: k = 192.0 / ht im=im.resize((int(lg*k+0.5),int(ht*k+0.5)), Image.ANTIALIAS) enhancer=ImageEnhance.Sharpness(im) im=enhancer.enhance(1.3) im.save(outfile) Full screen images must not be larger than 150 Ko and thumbnails 8 Ko. What I intented to do was looping through quality value until I got the desired weight and then break, but I had not found the syntax to : 1) get the file size of an image 2) set the quality when saving to JPEG Assuming that "filesize = nk" and "save with quality=n" are the answers I 'm going to do tests Cheers gc Le samedi, 21 f?v 2004, ? 18:03 Europe/Paris, image-sig-request@python.org a ?crit : > >> New to Python & PIL >> I have to do image batch converting and resizing from TIFF to JPEG >> with >> a MAXIMUM WEIGHT (150 Ko) for the output. >> Could someone tell me what is the syntax to get the weight of an >> output >> image and if there is another way than looping through the output >> until >> the desired weight is got. > > I assume you mean image size (in bytes). > > unlike many video formats, JPEG doesn't support "constant bitrate", so > the > size of the output file will vary depending on the contents of the > image. > > a typical colour image is compressed about 20 times at the default > quality, > so your 150k limit corresponds to a 1000x1000-pixel image. If the > image is > only slightly larger, you can try dropping the quality somewhat. > However, > if the image is much larger, it's probably better to resize it than to > tweak > the JPEG quality settings. I'd try something like: > > width, height = im.size > if width > 3000 or height > 3000: > # really large image; resize before compression > im.thumbnail((1000, 1000), Image.ANTIALIAS) > save with default quality (75) > if filesize > 150k: > if width > 2000 or height > 2000: > # large image; dropping the quality isn't likely to > help > im.thumbnail((1000, 1000), Image.ANTIALIAS) > save with default quality (75) > if filesize > 150k: > save with quality=50 > else: > # try dropping the quality before resizing > save with quality=50 > if filesize > 150k: > im.thumbnail((1000, 1000), Image.BICUBIC) > save with default quality (75) > if filesize > 150k: > save with quality=50 > # if the 150k limit is absolute, add more > tests here > > (tweak the numbers as necessary) > > (if most images are rectangular, it's probably a good idea to calculate > the "thumbnail" size based on the aspect ratio for each image) > > From safricanjames at yahoo.co.uk Wed Feb 11 06:52:01 2004 From: safricanjames at yahoo.co.uk (=?iso-8859-1?q?James=20Lockley=20 Hi, I want to do some pretty basic AVI processing. To begin with all I want to do is grab the first frame of an AVI and save as a jpg. Eventually I'm hoping to be able to save in other formats, and rotate, resize etc... Are there any modules available (for Win32) ? Any suggestions? Thanks James --------------------------------- BT Yahoo! Broadband - Free modem offer, sign up online today and save ?80 -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.python.org/pipermail/image-sig/attachments/20040211/e0914161/attachment.html From vdanilov at naumen.ru Thu Feb 19 10:52:28 2004 From: vdanilov at naumen.ru (vdanilov@naumen.ru) Date: Mon Feb 23 13:02:21 2004 Subject: [Image-SIG] Error Message-ID: <32900.195.64.198.82.1077205948.squirrel@naumen> there are bug, while loading this image! Module PIL.Image, line 1033, in resize Line 6 of function resize: self.load() Function arguments: self= size=(128, 53) resample=0 Module PIL.ImageFile, line 111, in load Line 81 of function load: raise IOError(error + " when reading image file") Function arguments: self= Function variables: error='unknown error' prefix='' file= size= a='RGB' b='x\x9c\xec\x9d;v\xb3L\x93\x80\x8b\x99?\x98L\x90\xfd\x99Q6\x99P\xf6eF+0Z\x81\xc5\n,\xad\xc0h\x05F+\x10D3\x99\xd1\n\x04\xd9dB+0\xac@\xb0\x02&(\xbb\xdd\xe6&\x84\x10 T\xcfy\xcf{0j\xfa^]}\xad\x16\x92$\x81A\xf0\x1f]G\xa01\x1aJ\x89$\x01\x00\x08\xc2\xef\x1bA\xf8\xfe\x13\xff\xdfl\xd2\xcfM#P\xed\xea\x1d\r\xa4\xe4xS\xa8O\x1ak\xe6\xdb\xa2\xb0L\xc20\xc4\x0eR\xaf(\x89\x95\x90$\xc9\xefX\x8f\xa5\xea\xef\x1bA\x10\x92R\x0759\x17\xeey\x07\x1c4\xd2\xea\x1f\x0f\xd0v\xdd\x1d\xdf)Y\xaf\xd7-\x07,\xf0SJM\xf0[&\xb3\xd9,\xe5;\xfe\x89\xef\xa7\xd3\xe9\xec\x07\xcf\xf3\xf0W\xe6^\xc2\xf9\xaeKH~ZE\x00\xf0<\x8f\xf7\r\xb8\x89\x0b|\x89\xe3dt6\x9f\xcf\x85\xbf\xa0\xea\x13\x98\x8f\xf7.0w\x9f\x00\xa4\tqg\xb3\xa6\xdd\xd1P\xab\xa5\xaa\xbf\xcf|W\r\x9fq\x80\xc0R{\xc9\x1c_E\xa8R\xf5\tJ\xc6\x15\x94\! x0c\xa7\xebqY2\x9a\x1ai\x1d\x0e\x87F\xfc\xf9\xa5\xcaP\xb8\xa2\xb3\xea,\x97K|hj\xc8\xde\xc14\xb6\xa6i\x8d\xfbI\rn\x9f\xe88\x19\xd8e\xbe\x9e\x8e\x93\xf1\xfc\xfc\x9c}Y\xa3=$\xd9\xe8\x13}L\x06?Q]q\xc9\xfbO2n\xb7\xf2}\x11\xa3\xd1\x88\xa5\xa4\xea*\x02\xd3 A\x10t\xa8\xbf\x92$q\x1c\x87\xff35\xbd\x1fEQ\xc9\xb7\xbd\x16\xf1\xe9tZ\xb1\xf7\x957\xb7[y\xaaW\xf8\x99\xe6\xa8\xc9\xa53\xb9\x83\x9f\xd8\x1dH2z-\x1b\xd5\x19Hit\x93\x0c\x9c\xccl\xd0\xc3\xefd\x08\x82\x80^{\x9e\x87S\xb7\xe3\xf1\x18\xdf\xacV+\xe6Z\x10\x848\x8e\xd9\xac+\xce\xa2\xcef\xb3K\xc7\xd6\x8e\xe3\x00\x00N\n3O\xd8\xcc\xecz\xbdfA\xa0\xcf\xd3\xe9\xf4w\xc6\x96\x83\xfd\x993\xfaSU\xf5jUv\x06\xc30\x8a~\x82Z\x03\xe6\x81\x88\xf8`\xe8M[%\x080\x9b\xfd\xce\x00\x0b\x02x\x1e\xe0\xe8\xd0\xf3\x80I\x9f \xc0z\xfd\xed\x0c\x7fe\x8d\xc5l\x06l4\xc9o)F\x97\xfd\xe8\xf7\x9e\xa7\xbe\xac6\x0b\n>?u\xc5\xb76E\xef\xd9\x87\xe8\x86u\xd4\xf1%\xfb)\x08\x92\xe2\x86\xa5WP{\xd5/z\xd3^\x01\x00\xc0n\xb7k\xd6\xc3\xcdf\xd3\xf0\xde\xe7\x1bC\xf2\xd1/Z\x92\x8f\x8bN[\xdc.\x02\x8d\xcb_\xe3\xdcD>\x1a\xdc\x87\xdf\x08\x9b\xcd\xe6\xed\xed\xad\xebXT\xa2\x81\xf2\xb8\xf7\x9d4\xbd\xdaG\xda@{UT\x18\x8d\xef\tk\x8a\xd4\xa2\x17+\x8c\x1a\xbb\xc5\x1a\xa7_\xfd\xab\x9b\xc2\x94G\xee\xea\x1d\x00\xb06vs\x9b\x93\xa8U\xb8aS\xd3\xffv\xacoz\x0e\x1eJ>\xb2T,\x8c\xcb\x0e\xd3\\\xc7C\xcbG\x0fyD\xf9\xc8\x1d\x85t>BB\xce\x97G\x18\x86U<\xca:\xeb\xadp\xbc\xbc\xbcd_\xe2.\x83K\x9b\xa6\xc6O\x8fQ\x93\x92f<\x1e\x7f}}]\xfaUS\x83\x98\x8b\xdb\xab\x8a\xe2\xd2\xc8W7\xa5(J5\n\x03~\x061\xd7k\xfe\x8b\xcb\xa3^-\xc0\xaf\xe6\xf3y\x8doo\xc4-\xc6\xe4\xcc(H\xfd\x13Y\xa9\xf5\x10EQZ[{\xe9?gw\xa2\x9d\xcd\xaeK\xd7\xf0\x7f\xf4Gvn#\xa5W\xce9\xf8=w[\xd9\xc1\xb5\xdb\xb6\xae\xe1\xea\xf46\xe0 \x8fG\xec\xef\xf6\x99\x7fu\x1d\x81\x9e\x92\x9d\nmG\x90\xa9\xbf\xdb/\xa8\xbd\xea\x17\x7f\xcac\xbd^\xe3\xce@\xe0V/\xd8Y\xee\xf1x\x8c\x1dV\xdc\xa3\xc8\x0e\x87\xb3M\x83\xec\x7f]\xd7\xffl\x1d\xfc\xd9^\x98\xf2\x16\x1f\x98cI\x92n\xbd\x02\xc1N\xc8\xe3\xff\xba\xae\xa7\xde\xecv\xbb\xd4\x1eH~\xabd\xee\x03\x8e9\x04A\xc0\xc8\xe3\'l\xd7%\xbe\xb1m;\xfb!\x0b\x91\xcf\x8d\xef\xfe.\x1fi\xec\xa2\xb1\x9f\\\xd7\xc5~\x9b,\xcb\x00 \xcb\xb2a\x18\xf8\x80\xceTUu]\x17\xdf\xb8\xae\xbb\\.\xf9_\r\xc3\x10E\x11\x00DQ\xe4\xbd\xe5\x1f\x98c\xb8\xf1~0\x96F\xf6\x8c1\xc77\x8a\xa2\xa4\x92\xcf\xfe\xe7chYV6\x15\x9a\xa6\x01@\x14E\xe8\x89\xeb\xba\x98K\x96e\xe1\x03\x1f(>\xb8\xae\xab\xaa*s\x8c\xf9C\xfa\xa3_Py\xf4\x08R\xe6=\xa27\x85\x81\xfb\xa6\xfb\xba\xf9\xa1\x1dzS\x18\xf0\xd7\xc2\x89m\x7f\x17L\x1c\x7foqG\xe6\xf3\xdf\x02KY\xc7\xe6\xdf\xac\xd7\x7f\x9c\xf5`\xbfH%n\xda\x87\xb9\x00\x8c\t\xfe\xef\xfbI\x92$\xae\xfb\xe7\'\xf6\x9e\xedow\x9c\x84\x9d\xee\x04H\\\xf7\xd7\xa5\xaa\xfe\xf9\xbc?\xc9,\xe5?Y\xf7\xabc\xc6cP\x14\x10\x04PU\xf8\xf7\xbfa6\x03M\x83\x7f\xff\x1b\x00\xbe_\x02\xc0\xbf\xff\r8q\xfd\xcf?\x00\x00\xff\xfd\xdf\xa0i\xdf\x9f\x0b\x02\xbc\xbe\xfe\xba\x14\x04P\x14\x10\xc5\xef\xe7\xfd\xbe\xe5\xd4\xd4\x83zS=\xa2O:\xe3\xe1\xa1\xc2\xe8\x11=*\x8c[,\xa4w\xb8\xbd\xb3\x06\xc3\xd7\x19\xd3\xe9T\x96\xe5\xcf\xcf\xcf\xae#r\x9en$\xa3\xb5\r\x96\x9b\xcd&\x8a\xa2\xcf\xcf\xcf\x9e\x98\x8d9C\x9b\xfdh\x1f\x07\n]\x80Aw\x18\x81*\xb4\xd1Ly\x9eW\xb4w\x! bf\x05\xba\r\xfd"n\xd8L\xb1\x96\xa1\xdb\xbc\xc0\xd0q1\x07\x9b\xc76w\xa1_D\xf3\x92\xb1^\xaf\xdf\xdf\xdf\x9b\xf5\xf3AhL26\x9b\r\xf6M{X\x12\xba\xae\xe7\xbeo\xdfN{9\xd7J\xc6j\xb5RU5w\xfbw\x0f\x89\xe38{i\xdb\xa5\xb7\xea\xdc\x90*Z\xbe\xa2\xb3\xbb \xf7\x96\x9e\x9e\xf4\xb2*I\xc6\x00\x0e,\xf1\'\xferE!WhZ\xe6Q\n\xe3.\xe8\xd1\xdcT\x9b\x94\xd8\xa3\xebP\xab?\x90d\xccf\xb3}\xf1*S\x1f\xd4\xf8\x03\x15\xc6\xa5\xb4\x7f\xb0\xfc\xb1\x9a\xa9\xd4ta\xf6,,\xef\xa0\xfd#\xfe\x8f%\x19\xbd\xb2\xf7\x92\xe5\xb1$#\xb7$\xb2SU\xd9\xf9\xf6\xa6nJ(\xe7\xb1$\x03\x00t]\xdfn\xb7]\xc7"\x9f\xc7\x92\x0c\x00\xc8-\x89\xdc3\t\xb9F\x12\x1b\xbf\xff\x88\xe7\xe1$\xa3\x88>\xa8\x93J\x92\xc1\x97D\xeeb@n\xcd\xea\xed\xb2An\x95/*\x89"\xbb\x15\xb78\xe03\xfc*_\x9d\xce-!\x9e\x91\x8cl\xbd\xb8h\xb6\xa0\xb7\xc2\x91KII\xdcTU\xfcr\xe94o\x915\x80\x1a^u\x08\x9e\xdcj\x8a\xa6,N\x146S\rN)\xf7\xd0`]\t%\x9a\xfc\xd6\xf3W\x8f\xab3n\x91\xe9WV\xbb|\x9dQ\xcf\x80Y\xe3\x06\xb3nJ\xc9Y\x88\xc9dR\xa2\xedJ2\xe7\xca\x06 G2\x1eaTqkv\xbb]\x8d}\x019\x92qMI\xf4\xd0\nX\t\xe5{>\xaf\xb9\xa6\xe0\xe5\xe5\xa5hKJ\t\x97M\x87\x9c\x9d/3M\xb3\xdcA\x1f\xcc13\x82 (\xf9\xf5\xeb\xeb\xeb\x9a\xaey\x8d\x190!I\x92J\x16\xa2\xfe\x9eC=\xeb\x00\xa0\x19\xbbL7\xe1\x066\xb5.u\x90\xcb\xc3M\x14\xf6\x19*\x8c\x1eA\x85\xd1#\xa80z\x04\x15F\x0e\xa2(\n\x00\xfc\xbfv\xa0\xf1]\x8f \xc9\xe8\x11T\x18=\x82\n\xa3G\xfc\x07\xfc5\xfa8lxS\x97=$-\x19hX\x12\xd7V\x99)Kv\x038{\x99z`\xa6,\xd9\x1b\xe6\x03o\xca\x92=\xa7,\x7f2\xc7-$\x18;,\xc7\xe3\x91\xaf\x82\x9e\xe7U\xb4_\n\x00\xcc\xb0\'K\x05^\xbc\x0e\x7f\xed\x97\xe2,\x1c\xb3_\x8a7\xaa\xf3\x0f\xec\xa7_\xfb\xa5\tg\xa9\x92Y\x95L\x99\x9dd\xff\x1b\x86\x81\x97\xb5\'\xdc:+\x00\xb0uGQ\x14\xf1\x19\x7fE\xdf\x92\x1f\x13\x97\xea\x8fy/\xf6\xc0\x1c\xb3\x97\x8d\xac_\x16\xc1\xc7JUU\x16"Z\xf2d\xc6HYb\x93\x9fef|#\x8a\xa2\xaa\xaa\xf8\x1e\xdd\xa3\xc1\xd2$I\xd0\xc8\':Fo1i\xe8!K#\xff\x80\xfe\xa0\xf5\xce\xef|\xe0\xbb\xb6\xc9\x8fQQ\x16\x1e\xff?oT\xd4\xf7}\xbe0\xf0\x01-\xae2\xa3\xa2\x18\x12pFEY\xc2\xd8C\xca\x02i\xb3K\xd3)X\r\x00\x00Q\x14\x97\xcb%V,F\xca\x92,+\x0cL\x17\x00,\x97KY\x96\x99eX\xbe\xf0\\\xd7E\xdfxK\xb2X\x05\xd1=:\xe6\x1f\x8032\xfb\x9d\xc9\x15Sr\xeb:\xdb\x02l+E6-%\xa9\xbb\xf4:\x86k\xa0A_\x8f\xa0\xc2 \x88|h\xd8\xf7\x97\xd9\x0c\xd8\xf6\x8f\xd9\x0c\xfa:&!Z\x80d\xe3/\xae\x0bQ\x04\x00 \x08\xe0\xba\xf0\xd3{\xfd&\x0c\xbf\x05\x86\xbfx\xedx\xfc~\x99+K\xf8r\xb5\xfa\xf3\x12?a\x0eR\xee\xd11\xef\x86\xfd\x84[Zv\xbb\x9c\x9f\x8eG\x88chg_\xf0\x83\xd0ZW\xfa>\x00H\x1c\xe7\xfb\x7fU\xfdc0\x9a\xb7+\x9d\xfbav\\\xc2\xdc\xa3\x9f\xa9\x9fL3\t\x82\x9c\xf7\xfc\xbf\xd4O\x86\x91\xc8r:b\xf8\x93\xa2\xdc\x8by\xeb{\x81r\xf3/|\x8d\xcc\xad\x82\xa2\x98\x18F\x02\x90\xa4\xae\\,\x92\r\xe6^\xd3\nC\xcc\xf5\'+\x8a\x18\xb7(\xca\xff\xc9u\x93\xc5\x82\xc4\xa3Ah,N\x10\xf9\xd0x\x83 \xf2!\xd9 \x88|H6\xca\xd8l6h:\xba\x9f\x8c\xc7\xe3\xfb0\xc0\x7f\x9f\xd0x\xe3\x97\xd5je\x9a\xe6\x1de\x88 \x08\x9a\xa6\xb9\xae{G\x07\xef\xef\x88\xc7\xd5\x1b\xab\xd5J\x92$^-|||\xdc\x91`\xc0\xcf\x1e.^0$I\xba/\x1b.}\xe6!\xf4F\x1c\xc7\x8b\xc5"\x8a"\xc7q:\xb7\xbc}#\xa6\xd3\xe9\xe1p\xb0m[\xd3\xb4\xa1\xa6\xb1m\xba\x9c@\xbe\x19\xb8\xab\xb3\xebX\xb4D\xc9^H\xdcT\xddfd\x86\xc4\x10\xfaT\x82 \xac\xfen\xca8\x9dN\x1f\x1f\x1f]\xc5\xa7e\xf6\xfb=\x7f\xce\x82Y39\x1e\x8f\xae\xeb2\xc3\xf0}\x9eT\xe8\'\xf7\xd7\xa7Z\xadV\xb2,wk\xf5\xb1\xe7\x94X\xc5\xec\xdc`\xe6=\xd1\xb5\xe2:\x8feY]G\xe1\x0e\xc0\xe39<\x8e\xe3\xf0\x7f\xa6\xb2\xf1\xa6\xa7\x96\x86A\xef\xf4\xc6\x1d\xdd\x0e\xda7\xb26\xf9\xef\xcb\xaej\xdfhR6\xda\xc0\xb9\xb95\xbc;\xfe\xcah\x0c\x90\xd4M\x82\xb9\xff\xcex\xd0\x80\! x0fW\x16\xae(\x8ag}h\xca\xa0\xd9o\x9fJ\x10\x84\xb3q\x17\xcen\xd68\xd7\x14\x9d\xf5\xa1J4\xe0j\x1f\xce\'dxT\xd1\x12=(\x9a[\xfbP\x1d\xda\x87K\x10\xf9\x90l\x10D>$\x1b\x04\x91\x0f\xc9\x06A\xe4C\xeb\x1b\x04\x91\x0f\xe9\r\x82\xc8\x87d\x83 \xf2!\xd9 \x88|H6\x08"\x9f_\xd9\xe0w\xd7\x08\x82p\xd1\x011\xa2\x87x\x9e\'\x08\x82\xe7y\xf8\xd0\xf26\xea\x01pFo\x08\x82`\xdb6\xfcH\xcez\xbdf"\xc4\x1e0\xeb\xf1y6\x9b\t\x82\xb0\xdb\xedl\xdb\x16\x04!\x0c\xc3\xd5j\x85\xbf\x8e\xc7c|\xe0\xdd\xe3\x03~\x85\x7f\xe2\xc3j\xb5\xc2\xadlX\xba\xbb\xdd\x8e/f\xdc\xbb\xce{\x82\x97E\xe0\x1b\x0c\x9a\xf76\x1b\x10{\x93\xf5Y\xd7uA\x10\xe28\x9e\xcf\xe7m\xdeD\xd58\xbe\xef\x03\xc0\xf3\xf33\x7fG\x9c \x08\xb8E\x0f\x8b)U\x16x9A\xaa\xd0\xb3\x99\x06\x7fkB\xb6\xd0g\xb3\x19n%d2\x99\xad9\xd9B\x9f\xcdfh\xf9\xaa\xa8hR\xb1]\xaf\xd7\xd9Bg!2\xc7\xd97X\'Y\xbd\x02\x80\xfcB\xe7\xf7\x81\xf1\xcf\x86a`\xe6\xf2\xbb\xaf\x0c\xc3`o\xd8\x03\x1a\xb0\xc0gUUy\x07\x96ei\x9a&\xcb2\xff-\xef\x1e\x1f\xf0+\xf8\xd9\xe3\xc4\x82\xc3\x08X\x96%\xcb2\xbb\xbb\x11\x00\xf0\x84\rs)\x8a\xe2b\xb1@\xc7x\xca\x8c\xf76\x1b\x10\xff&\xeb\xb3(\x8a\xc3\xb8\x93\x1b\x000\xe7\xf1\x19\x13\x95*\xd0TY\xb8\xae\x9b-\xf4l\xa6%\x7fkB\xb6\xd0Y\x1e\xaa\xaa\x8a\x0f\xd9\x9aST\xe8\x18%\xdf\xf7\xb3E\x93\x8a\xadeY\xd9Bg)e\x8es\xdf\xb0\x93s\xa9\x08\xff\xc9@>N<|.\xb0\xb3{A\x10\xb0\xc3\xdf\xec!\x8a"\xf6\x8c\tv\x1c\xc70\x0cv\x18\x92\xf9\xe0\xban\x10\x04\xfcO\xf8\xa1\xef\xfbYoM\xd34\x0c\x83?k\xce\xc7$\x15a|\x83\xe1\xe2OQ\x14e\xbd\xcd\r(\xeb3F\xf2\xae\xef\xa7UU\x15+S\xb6@-\xcbbE\x80eW^\xe8\xb9\x99\xc6\xd7\x84\xa2B7M\x93\xf9\x9f*\xb8"o1\\\xfe\xac\x1f\x1f\x13>\xb6\xecdo\xaa\xd0\xd9O\xacZf\xdfd}N\xf2\n\xbd\xe1\xb5\xbf\xe3\xf1\x18E\x11]\xf4\xfaP\x! 0c\xb5\xd0i]\x9c r\xa0\t\\\x82\xc8\x81\x04\x83 r \xc1\xe0\xb0m`s\xffa\x08\xb4\x0e\xf0\xc0\xfc\xab\xeb\x08\xf4\x89 \x00fD\xb9E;\xf0D\x0f!\x8d\x91G\xd1&\x80\xf9\x1cf\xb3\xb4&\xc17\xec\x1f\xcfj\xf5\xfd2eYk6\x83\xd5\xea\xd7A\xea\'\xf6`\xdb\xbf\xef\x8f\xc7\xc2\x9f\x98\xa2[\xafI\xcb5\xc6\x053\xe4\x83\xc70\xbe\xedb\x00$\xcbe\xdaF\xc6b\x91\x00$\xae\x9b(\xca\x9f\x9f\\7q\xdd\xef\x9fx;\xbf\xa6\x99\x00$\x86\x91\xe3\x15@\x82\xebJ\xaa\x9a\xf3\x13{\xe0\r@b\x10I\x92hZ\xfa\'>\xda-Z\xef\x1c6$\x18\x1cX\xc3d\xf9\xb7\x9e\xf1\xb0\xda\x9cK\xb6\x89\xe1\xabo\xaa*\x8bb"\x8aI\x14\xa5e,\xf9k\x14\'+\x18Q\x94\xf3\x13F[\x14\x93\x0b\xcdo\x13%PW*C\x10@\x10\x9cqS\xd1V>\xef\x0fo@\xe9t\x02E\x01M\x83(\xca\xf9\xcau\xa1\xe8\xbe\x18Q\x04\xdf\xcf\xffIU\xa1\x82%1\xa2"$\x18\x19\x14\x05ro\xa03Mp]X\xafA\x92\xa0\x82\x9900M\xb0,X\xaf\x01-\xbd\xa6n"\xde\xefa\xbf\xcf\x1f\xe2??C\xd1B\xb2,C\xd1\xe5c\x9f\x9f\x10E\xe9\xc1\x0cQ\x97\xff\xc4m^\x04\x00\x80 \x80,\xc3\xff\xfc\xcf\xef\x9f?;\xde\x00\x00\xfe\xf9\x07\xa6S\xf8\xdf\xff\x85\x7f\xfe\x81\xac5\xe5\x94ct\xaf\xeb`\x9a\xf0_\xff\x05E\xf7\xac\n\x02(\xca\x9f\x0f\x99?\xf8\xc0$G\x10@\x14\xe1\xf33\xff\'Y\x06U\x05I\x82\xff\xfb\xbft4\x88Z\xd0\x96\x10\x82\xc8\x81\xbaR\x04\x91\x03\t\x06A\xe4@\x82A\x109\x90`\x10D\x0e$\x18\x04\x91\x03\tF!a\x18\xd6\xb8l\xae5\xa6\xd3)\xddQx;H0\xf2Y\xaf\xd7OOO\xb5o\x7fl\x81\xc3\xe1 \x8a\xa2 \x08\xc7\xe3\xb1\xeb\xb8\x0c\x10\x12\x8co\x8e\xc7\xe3x\x00\x80\xe3\xf18)\xdaj\xd1c\xa6\xd3\xe9\xe1p\x88\xe3\xd80\x0cEQ4M\x1b\xfc\xfd\xab\xad\xf1\xa0\x1a\xc3\xf3<^?\xdc\xa3T\x00\x00\xbb\xb6\xf3\xe3\xe3\xe3\xf5\xf5\xd5u\xdd\x15\x1e\xf3 \xae\x864\xc6\xdd\x13\xc7\xb1eYoooa\x18>==\xdd\xa9\xf6\xeb\x1b\x0f\xa11\xd0\x96\xa3\xcd\x9fz\x1b\x10\xa3\xd1(\x8a"\x00xzz\xd2u\x9d\xa4\xa2\x19:>\x0frK\xfcG:\xce\xc6\x8cO\xa2\xcdI\xdf\xf7\x1f\xf1\xee\xf3\xe6\x18\xa0`\x18\x86!\xcb\xb2\xe38]G\xa4%L\xd3,\xfaI\x96ef9\x93\xb8\x88\xe1\x8c1V\xab\xd5\xc7\xc7G\xd7\xb1\xe8\x00I\x92N\xa7\x13>\xe30\x03\x00\xe28\xa6\x19\xaak\xb8\xfb1\xc6\xf1x\x9cN\xa7\xc7\xe3\xf11\xa5\x02\x00|\xdf\x0f\x7f\x0e\xee-\x16\x0b|\x18\x8dF\xfc\xbax\x9f\x97\xf0{J\xd7*\xab\x0eQ\x14\xe1\x95\x00D\x16fC?I\x12~\x98\xa1i\x9aK\xd6\x12*s\x7f]\xa9\xf9|n\x9a\xe6S\xee\xb1l\xa2\xb4\x13\xc5:Z\xc4Y\xee\xa0+\x15\x86\xe1x]K\\Dn\xab\xbf\xddn/2\x9b0\x9f\xcfSJ\xe6\x01!\x8d\xf1\xd0\xc4q\x1c\x04A\xf6\x08G\x18\x86\xaa\xaa~\x15\xd9\xa2~\x00H0\x1e\x9d"\xd9xp\xa8+5@\xe2\x82{mr\xa7eG\xa3\x91\\z\x13\xe7\xba\xe8F\xc2AC\x1ac\x80\x8c\xc7\xe3\xa2^P\xbdS+\xb9c\xfaaC\x1ac\x80h\xc5w\x8e\xa9\xaa\x1a\x16\xdf\xba\xc4VZS\x9cN\xa7\xdc\x89\xe0\x01C\x1ac\x98l6\x9b\xb7\xd4\xe5f\xd5@[U\x8d\xc7\xe7\xee \xc1 \xd2\x94\x1b\xe0\x99N\xa7\xae\xeb\x0e~\x8d\x9c\xbaR\x0f\x8a\xe7yE?\x95\xcfP\x1d\x0e\x87G\xb0\xecF\x821XRg0R\x9c\xb5x[\xb2&\xf8\xf2\xf22\xf8\x13\xf6$\x18\x83\xc5/\xba\x11\x1c\x00*,\x87\x9fN\xa7*\xeb\xe5CU\x1d4\xc6\x18,8\xfbt\xe5N\xfe\xf9|\xfe\x89w(\x173\xc8\xc9\\\x12\x8c!\xd3\x9au\xa9\xe1\x9d0\xa3\xae\xd4\x90\xa9"\x15\xe3\xf1\xf8\xac\x9b\x92\x91:20\xa9\x00\x12\x0c\xe2\xeb\xeb\xeb\xacl\xaf\xd2\x07\xeb\x9e\x8au\xf1\x1a,\xcb\xaa\xe8\x92! \xae\x83\xb9\x1d\x17]Jx\x91Q\xed(\x8a\x86w\x0fh\x1b\x83\xef\x8a\xb3"\xc4Myyy\xa9\xee\xf8p8TW\xcb\xa3\xd1\xa8\x86\x91\x11]\xd7\xfb<(\xbfv\x8c\xd1\xe1\xceJ2\xb0wS\xe28\x8e\xa2\xe8\xa2\xe1\xf2\xa5\xc3k\xdb\xb6}\xdf\xef\xe9\xfa\xe35\xea\xa6\xf3\x9e\x0f]\xa3q\x11\xb7\xce\xae!\xdd\x8dxUWj\xb9\\\x9euSqd\xc6(2T\x91\xcb\xe1p\xb8\xc8\xfd\x83Sn?*\x97\x8bz;\xa3\xd1h\xbb\xdd\xd6[\xd1\xeb\xdb\x88\xfc*\xc1\xa8\xd2\xb3\xacxE\x03\xc3\xb2\xac\x8b\xf2\xe8\xec1\x1a\x82\xf1\xf9\xf9yi;\x05\x05\x16\xd4K\xa8md\xa4Wk\xe45\x05\xe3vF\x7fG\xa3\x91\xaa\xaa\x97~u\xbf{rZ\xe6\xd2Q\xf2h4\xba\xb4i\xab\x07\xae\x91_d|\xfa\xa6\xd4\x11\x0cI\x92\xaaOqT\\p\xe5\xa9qQC\x10\x04}\xd3\xc5\x83\xe1\xfd\xfd\xbd^\x7fu6\x9b]\xfaI\x8f\x96\xff.\x1d\x94,\x97\xcb(\x8an1\xdc\xb9\x12\x1a\x88W$\x08\x82\xd6\xc2J]\x90Y\x9d\xce/\xce\xbc\xf9\xbe#\xdb\xb6k\xacc\xd4;\xac\xdc\xda\x11\xe7\xbb\xa6\xf6n\xa8\x967;\xe9\xba\xaei\xdaE\xcb/\rr\xf3\x05\xbe \x08j|Uo\x0b\x03IE\x15jo\x0fY,\x16M\xc6\xe3\x1c\xdb\xed\xb6\xc6h\xb31\xaa+\x97z\xda\xad\xfa\x0e\xa8\x14\xa6i\xd6\xfb0{\xe35\x91\xa2v\xde\xd6\xee\xe1\\\xd95j\xbf\xf7^U\xab\xb6\xbf\xcc\\[\xe3{\x9e\'\x8a"\xdd\x84r\x0b\xae\xe9\xac^c\xf4v\xb3\xd9\x04A\xd0\xe6\x1ay\xa5\xca\x87\x93\xdfwT\xd5\xaa\x98\t#\xee\x8e6\x8f\xe2\xd0\xa1\x9f\x07\xe5\x9a.@\xf5cO\xf7\xcbm\x07\xdfW\x1e\xc3\x7f\xb4\xcbJ\xda\xa4\xdc\xb2m9\x8a\xa2\\S4\xab\xd5\xea\xca}\xb55VH.\xe5\x8c`\\y$\xe8\xcay\x8c\x1a{{R\xd0N\xaa"\x1c\xc7\xa9\xbd$\x8a\xe3\x84\xda\x95\xfb\xe3\xe3\xc3\xb2\xac\x1a\x9bS\x18\xfb\xfd^\x92\xa4\xdb\xeeZ/\x19\x98\x1b\x86q\xe5l@\xed\xf5\x1d\xc6\x95\xbb5}\xdf\xaf=-6x\x0c\xc3\xb8\xe6\xf3\xf2\xcas\xeb\xd0\x93$q]\xf7v\xb3U\xbfi\xbbR\x8a\x92$Q\x14\xe5J\x1f\xaaD\xe3\xec\n\xf7\xf5\t\x19\x1e\x00\x90\x9c\xfbw>[\xae\xf3\xa1\xe4f@\xc6\xd9\xc3\x9e\xad\x15.7\xf8\xaeb\xcd\xa04f\x82 \x9c\x8f\xf8\xd9\xb4\x9d\x8b\x86p\xd6\x18\xc2\xd5\t\x19\x1eU\x8a\xe6\xfa\x8c\xbd\x0f\x1f\xaaAv\xa5\x08"\x07\x12\x0c\x82\xc8\x81\x04\x83 r \xc1 \x88\x1cH0\x08"\x07\x12\x0c\x82\xc8\x81\x04\x83 r \xc1 \x88\x1cH0\x08"\x87\x7fu\x1d\x01\xe2n8\xbb\xa1@\x14\xc56\xe2\xd1\nt\x1e\x83 r\xa0\xae\x14A\xe4@\x82A\x109\x90`\x10D\x0e$\x18\x04\x91\x03\t\x06A\xe4@\x82A\x109\x90`\x10D\x0e$\x18\x04\x91\xc3\xb7`\x08\x82\xc0n\xb0_\xaf\xd7m\xdefO\xdc\x08\xe1/]G\xe7\xce \x8d1d\x16\x8b\x85\xeb\xba\xa6iv\x1d\x91\xfb\xe3\x8c``c\xc3\xcc\xae\t\x82\x80\x97z\xcdf3A\x10P\xb7\xf0m\x92 \x08q\x1c\xe3\x9fh\x0f\xcb\xb6m\xfc\x93\xdd\xb0\xc6\x7f\x82&\xe5X{&I\x12>\xafV+t\xc0\xee4\xcb\xc6\x84\xf9\x80V\xd5X\xb8\xcc7\xfe!\x15\x10{\x93\xf5y\xb7\xdb\xe1\x9b\xf5z]3S{\x83,\xcb\xcf\xcf\xcf\xbcY\xa3\xe9t\xca\x97\x0eK&\xdfM\xc8f5{\x98\xcdfX\xf4\xe5\x85\xae\xeb:\xfe\xa9\xeb:\xef\'\x9f\xb1\xd9Bg>3Kp%\x85\x8e\x9e\x94\x17z* \xf6\x86}\xc5\xeadN\xa1\xf3\xe6z\xf0\xd90\x0c|\x96e\x19\xad\xb7\x8b\xa2\x88\xd6\x9c\x00\x00\xed\x97\xe1\xc5\x05\xec[f<\x0b~\xec>\xe1~2\xf4\x04?\xc9\xbaWU\x15-\xb2\xe1O\xec\x861\xfc\x8a\x8f\t\x00h\x9a\xe6\xba.\xda&\xc47\xf8\xad\xeb\xba\xf8\x86\xf7\r\xfd\xe7C\xe4\x03J\xbd\xc9\xfa\xcc>\xef\xe7\xddQ\x15\x81\x1f3M,\x8b\xf0f\x8c \x08P\x87$\\b\xcb\x0b\x9dy\xc8,\xe8\xb1\x9a\x90\xe4\x15\xba(\x8aQ\x14\xe1\xd5()\xf7\xa9\xd2\xe1\x0b\x1d\xc3eU\xab\xa4hXl\xcb\x0b\xbd\xe4\x8da\x18\x98-X\xd3\xb2\x85^&\x18\xf8\x99\xaa\xaa|\xccxR\xe1\xf1\x91`\x85\x11\x04\x01\xbb\xf58\xe5>%\x18\x98\xef\xcc\x19\x1aW\xc5\xa2e/y\xc7\xa2(\xa2{f\x82\x8d\xf5\x19X"\x19,\xa0\xec\x9b\xac\xcf\x181>]\xf7\x08\xab\x8b|\xdb\xc1\xa7.\xc9\xabj\xe5\x85^$\x18\xf8\xc0\x02\xf2}\x9fYgM\xb9O\xd5\xd7T\xa1\xa3\xe8\xfa\xbe\x9f\x14\x14\r\xc6\r\x00\x98\x89\xca\x92B\xcf}\x83wm\xa6"\x9c-\xf43]\xa9\xc5b\xb1\xdf\xef\xbf\xbe\xbeX\x00\xbc\xc6\xc8\x05\xf5 \xbbHI\x96eM\xd3\x92\x8cP\xa5\x18\x8f\xc7X6\x8c\xc9db\x18F\xca\xfa-o\xf0TQ\x94\xfd~\xef\xfb>\x8a\x90 \x08x\xbb\x1c\xef\x9eek\xc9\x9b\xac\xcf\xfb\xfd~\xbf\xdf\'I\xf2\xfe\xfe^\x1e\xed\xde\x82]\x9a\x94Mrl\xd1Y\xea\x8a\xbe\xcd\x16zQ\xa61R\x85\xae(J\xb6Rf\xc9\x16\xfa\xeb\xeb\xab\xa6i\xa9\xda\xc5\x17\r\xc6\xcd\xb2,\x14\xa1\x1a\x85\xce_B\xcb[\xb6N\x17zQ\x9a\r\xc3\xc0H\xe3\xff\xd5\xbbR\xf0\xd3\x06\xb0&y\xb1X`77\x08\x02\xfc\t\xf5\x00\xaf1\x80k\xd2X@(\x15\xc9\x8f\x8eNy+\xcb2\x93\x1c\xf6\x06\xff\xc4\xe6\x84\x8faQW*\xd7gQ\x14\xd1\x9f6\xefql\x96l\x81\xb2:\xb1\\.Y\x9f\'\xe5\xc0u\xdd\xdcBg~\x16i\x0c>\x0fQ<\x0c\xc3`:\x07\x7fb5\x98\x97\x19\xfeW\xf4\x13\xabJRP4\xaa\xaa\x1a\x86\xc1\xd7\x93\x92B/\xe9J1\x9f\xd9\x9bT\xa1\xff\x8b\xe5\x08\x9fA\xd8\xf9y\x7f\x7f\xd74\xcdq\x1c\xd7u\xb1\xeda\xf16M\x93I\x1e\xeb\x05\xb2\xa4\xae\xd7kM\xd3\xde\xde\xde\xb00L\xd34\x0c#\x08\x82(\x8aP\x18\xf0\xbaJ\xa6\x04\xb3\xde\x06A`Y\x16\xeb\xff\x9dN\xa70\x0c-\xcbZ.\x97x[!\x1fa\xbc\xe7\x01\xc3Eia\xb9\xcc\xfc\xc7\\\xce\xbe\xc9\xfa\x9c$\xc9f\xb3\xf9\xeeh\xde3|\x16a\x13\x8b\x97vcq`\xe9\xf0n\xb0\xa2\xe4\x16:\xf3\x90\x1dEbE\x86! \xa4\n\xdd\xf7}\xc7qP\x99\x87a\xa8\xaa\xaa\xa6ix\xb1%\xab-\xa9B\x7fzz\xc2\xaf4M;\x1c\x0ePZ\xe8\xaa\xaab\xdc\xca\x0b\x9d\x05\x94z\x93$\x89\xe7y8_\x87\xd7!\xe5\x14zn{\x83rY\xaf\xa1\xaa\xf1\x15\xd18\xa9\x82`C\x88\xf2O\xeaY\x86\x1fd\xa17|\x82\xef\x11\xee\xda!R\x0c\xb2\xd0\xe9h+A\xe4@\x82A\x10\x04AT\x85vK\x11\x04A\x10U!\x9dA\x10\x04AT\x85t\x06Q\xc0z\r\x82\x00\x82\x00\x9e\xf7\xe7\xfd|\xfe\xfd\x9e\x8e@\x11\xc4\xe3A\xc6\x9d\x89K\x18\x8f\xe1g+-A\x10\x0f\x08\x8d3\x88j\x84!H\xd2\xb7\xc2\xe0\xb6U\xe7\x13\xc70\x1e\xff\x0eG\xd8\xbf\xf9<\xc7\xb1\xe7\xe5\xb8<;\x94\x99\xcdr\x1cK\x12\xc4q\xbe{\x16\xca\xcf\xe1\xe6?\x9e\x14\x91\xfd\x84\xf9St\x06:\xeb \x8eA\x92\xce|\x95\x1a\xd5\xe9zN\xd0\x04\xd1\x03Hg\x10\x15\xd8\xed@\x96!\x8a~\xff/!\x8eA\x14!\x08@\x14!I\xbe\xff9\x0e\xa8*\xc8rz\xa6\x0b\x00\x9e\x9f\x7f\x9d!\xaa\x9a~\x93b6\x03\xd7\xfd\x8e\x0cs\xa9i\x10E \x8a\xc0\x9d\xfe\xeb\x1e\xcf\x03Q\x04\xee\x08\xe1yl\x1b,\x0b4\r\x92\x04\xf6\xfb\x9b\xc5\x8c \xea@:\x838\x87a\x80\xa6\x01\x00h\x1a|}\xc1ht\xc6=;V\xcd\x1d\xf8\x83\x97\x17\xd8\xef\xe1\xe3\x03\xae?\xc7\xe1y\x80G\xf4\x16\x8b?\x91\xf9\xb1\xc0\x01?vH\xfe\xf0\xfc\x0cx\xda\xdcu\x7f\xc7%\x7f\x8f\xb1\x16\xc2\x7fRl\xfb \x87\xd5\nT\x15\x14\xa5j@\x00\xa0\xaa\xb0X\x80\xa2\xc0\xdf\xb3\xf1\x04\xd1\x13Hg\x10\xe7\xc0\xf6\xce4\xe1\xf3\xb3\x92\xfb\xe7g\xc0\xa3\xe2\xae\xfb;S\xb4\xdb}\xb7\xb9\x9b\xcd\xb5\xf1y~\xfe\x1e\xe8\x98\xe6\x9f\x99(\xd6\xc8\xa2\x86\xcb\xf2\xfe\xfe;(\xc1\x7f\x15\x15\x00?\xee\xa9\xde\xfa\x1b\x06\x98&,\x97p8T\xfd\x04\x00\\\x17\x82\x00|\x1f\x14\x85&\xa6\x88\x1eB:\x83\xa8\x80\xef\xc3\xdb\xdb\x05\xeeO\xa7\xef\x16\\\x14\xbfU\x05\xb6\xe3\x96u\x99?E|}\x81a|\xcfD\xf1\x83\x06\x9c\x9e\x9aL\x1a\x08\xa2\x11\\\x17>>.\xfe\xea\xe9\xe9[3\xb9.\xfcX=%\x88\x9e@\xe7\xc0\t\x82 \x88\xaa\xd08\x83 \x08\x82\xa8\n\xe9\x0c\x82 \x08\xa2*\xa43\x08\x82 \x88\xaa\x90\xce \x08\x82 \xaaB:\x83 \x08\x82\xa8\n\xe9\x0c\x82h\x95\xe3\xf18\x9dN\xa7\xd3\xe9\xb1W\xe7\xd5\t\xa2\x1a\xa43\x88\x0b\x88\xe3x\xb5Z\x8d\xc7cA\x10\xe6\xf3\xb9m\xdbq\x91}\'\xa2\x80\xc9dbY\x96\xef\xfb\xae\xebJ\x924\x9f\xcf)\x0f\x89;\x82\xceg\x10\x85\x84a\x18\x04\xc1\xf0nm\xed\x03q\x1ck\x9a&\x8a"\xde\x89\xcen%\'\x88\x9eC:\x83\xf8e\xbd^\x9b\xa6\t\x00\x9a\xa6i\x9a\xf6\xf2\xf2\xd2u\x8c\x06\xcb|>WU\xf5\xed\xed\r\x00\xc20\xd44MQ\x94\xedv\xdbu\xbc\x08\xe2\x0c\xa43\x1e\x94\xe3\xf1\xe8\xba\xae(\x8a\xaf\xaf\xaf]\xc7\xe5\x11\x89\xe3X\x96e\xd7u\xd9\xf0"\x8e\xe3(\x8a\x9e\x9e\x9e\xe28^,\x16\xae\xebZ\x96Ej\x9b\xe8\x1b\xa43\x1e\x08I\x92DQTU\x95\xc6\x10}`\xb7\xdb-\x97\xcb\xaf\xaf/\x00\xd8l6\x8e\xe3\xec\xffZ>\x0f\xc3p\xb1X\x04A\xe08\x0e\xcd\\\x11=\x81t\xc6\xd0\x88\xe3\xd8\xb2,\\e\r\x82\xe0\xe9\xe9\xa9\xeb\x18\x11\x958\x1e\x8f\x8a\xa2\xf8\xbe\x8f\xea\xc1\xb6m\xd7ui\xb6\x8a\xe8\x1b\xa43\x06\x82m\xdb\x96e\xe1:\x04\xe9\x89\xfbe:\x9d\xaa\xaa\xfa\xf1c\r\xd7\xf3<\xc30\x1c\xc7\x19\xfd\xdc\x14\xa2\xeb\xba,\xcb\xef\xef\xef\xdd\x! c5\x91xhHg\xdc\x13\xbb\xdd\xceu]\xc7q\xa2(Z.\x97\xd4p\x0c\x83\xe9t\xea\xba\xee\xa8\xf82\xab0\x0cS\xfd\x00\xdc\xad`\x18\xc6[#\xb6\xe5\t\xa22\xa43\xee\x03<\xffE\x93\xda\x83\xc4\xb6m\xc30pa\xe3"p\x1er\xb1X\x94\xe8\x1b\x82h\x16:\xd3\xd7\x0b\xe28\xde\xedv\xba\xaeK\x924\x1e\x8fu]O\x1d\x12\x9eL&\xa40\x86\xca\xeb\xeb\xebb\xb1\x98\xcf\xe7\xa9\xf7\xb6m\x8f\xc7\xe3\xd4\x89\xbf8\x8e%I\xb2m\x1b\x00F\xa3\xd1\xdb\xdb\x1b)\x0c\xa2Mh\x9cA\x10\xbd\xc0\xb6mM\xd3R\n\x00\xb7\xe4f7\xdd\x1e\x8f\xc7\xc5b\x91=\xd2\xb1\xdb\xed\x16\x8b\x85\xaa\xaa\x96e\x91.!n\x01\xe9\x8c\x9b\x13\x86\xa1\xe38\xb8\x0e\xa1(\n.S\xd3\xa0\x81\xa8\x8e\xae\xebA\x10\xa4v\xe2\xc2\xcf\xdcT\xee\x92\xc6f\xb31\x0cc\xb1X|\xd4\xb8\\\x96 \x8a!\x9d\xd10\xb4\xf0@\x10\xc4\x80\xa1\xf5\x8ck\xd9l6\xd3\xe9\x14m\xf6\xedv;Zx \xaeA\xd7\xf5\xd5jU\xef[\xcf\xf3p\x9d\xa3\x88\xe9t\xba\xdb\xed\xeayN\x10\x08\x8d3. \x8ec\xd7u\xe9\x045qS\xc6\xe3\xb1i\x9aE\xd5\xcc\xf3 mmap= s='x\x9c\xec\x9d;v\xb3L\x93\x80\x8b\x99?\x98L\x90\xfd\x99Q6\x99P\xf6eF+0Z\x81\xc5\n,\xad\xc0h\x05F+\x10D3\x99\xd1\n\x04\xd9dB+0\xac@\xb0\x02&(\xbb\xdd\xe6&\x84\x10 T\xcfy\xcf{0j\xfa^]}\xad\x16\x92$\x81A\xf0\x1f]G\xa01\x1aJ\x89$\x01\x00\x08\xc2\xef\x1bA\xf8\xfe\x13\xff\xdfl\xd2\xcfM#P\xed\xea\x1d\r\xa4\xe4xS\xa8O\x1ak\xe6\xdb\xa2\xb0L\xc20\xc4\x0eR\xaf(\x89\x95\x90$\xc9\xefX\x8f\xa5\xea\xef\x1bA\x10\x92R\x0759\x17\xeey\x07\x1c4\xd2\xea\x1f\x0f\xd0v\xdd\x1d\xdf)Y\xaf\xd7-\x07,\xf0SJM\xf0[&\xb3\xd9,\xe5;\xfe\x89\xef\xa7\xd3\xe9\xec\x07\xcf\xf3\xf0W\xe6^\xc2\xf9\xaeKH~ZE\x00\xf0<\x8f\xf7\r\xb8\x89\x0b|\x89\xe3dt6\x9f\xcf\x85\xbf\xa0\xea\x13\x98\x8f\xf7.0w\x9f\x00\xa4\tqg\xb3\xa6\xdd\xd1P\xab\xa5\xaa\xbf\xcf|W\r\x9fq\x80\xc0R{\xc9\x1c_E\xa8R\xf5\tJ\xc6\x15\x94\! x0c\xa7\xebqY2\x9a\x1ai\x1d\x0e\x87F\xfc\xf9\xa5\xcaP\xb8\xa2\xb3\xea,\x97K|hj\xc8\xde\xc14\xb6\xa6i\x8d\xfbI\rn\x9f\xe88\x19\xd8e\xbe\x9e\x8e\x93\xf1\xfc\xfc\x9c}Y\xa3=$\xd9\xe8\x13}L\x06?Q]q\xc9\xfbO2n\xb7\xf2}\x11\xa3\xd1\x88\xa5\xa4\xea*\x02\xd3 A\x10t\xa8\xbf\x92$q\x1c\x87\xff35\xbd\x1fEQ\xc9\xb7\xbd\x16\xf1\xe9tZ\xb1\xf7\x957\xb7[y\xaaW\xf8\x99\xe6\xa8\xc9\xa53\xb9\x83\x9f\xd8\x1dH2z-\x1b\xd5\x19Hit\x93\x0c\x9c\xccl\xd0\xc3\xefd\x08\x82\x80^{\x9e\x87S\xb7\xe3\xf1\x18\xdf\xacV+\xe6Z\x10\x848\x8e\xd9\xac+\xce\xa2\xcef\xb3K\xc7\xd6\x8e\xe3\x00\x00N\n3O\xd8\xcc\xecz\xbdfA\xa0\xcf\xd3\xe9\xf4w\xc6\x96\x83\xfd\x993\xfaSU\xf5jUv\x06\xc30\x8a~\x82Z\x03\xe6\x81\x88\xf8`\xe8M[%\x080\x9b\xfd\xce\x00\x0b\x02x\x1e\xe0\xe8\xd0\xf3\x80I\x9f \xc0z\xfd\xed\x0c\x7fe\x8d\xc5l\x06l4\xc9o)F\x97\xfd\xe8\xf7\x9e\xa7\xbe\xac6\x0b\n>?u\xc5\xb76E\xef\xd9\x87\xe8\x86u\xd4\xf1%\xfb)\x08\x92\xe2\x86\xa5WP{\xd5/z\xd3^\x01\x00\xc0n\xb7k\xd6\xc3\xcdf\xd3\xf0\xde\xe7\x1bC\xf2\xd1/Z\x92\x8f\x8bN[\xdc.\x02\x8d\xcb_\xe3\xdcD>\x1a\xdc\x87\xdf\x08\x9b\xcd\xe6\xed\xed\xad\xebXT\xa2\x81\xf2\xb8\xf7\x9d4\xbd\xdaG\xda@{UT\x18\x8d\xef\tk\x8a\xd4\xa2\x17+\x8c\x1a\xbb\xc5\x1a\xa7_\xfd\xab\x9b\xc2\x94G\xee\xea\x1d\x00\xb06vs\x9b\x93\xa8U\xb8aS\xd3\xffv\xacoz\x0e\x1eJ>\xb2T,\x8c\xcb\x0e\xd3\\\xc7C\xcbG\x0fyD\xf9\xc8\x1d\x85t>BB\xce\x97G\x18\x86U<\xca:\xeb\xadp\xbc\xbc\xbcd_\xe2.\x83K\x9b\xa6\xc6O\x8fQ\x93\x92f<\x1e\x7f}}]\xfaUS\x83\x98\x8b\xdb\xab\x8a\xe2\xd2\xc8W7\xa5(J5\n\x03~\x061\xd7k\xfe\x8b\xcb\xa3^-\xc0\xaf\xe6\xf3y\x8doo\xc4-\xc6\xe4\xcc(H\xfd\x13Y\xa9\xf5\x10EQZ[{\xe9?gw\xa2\x9d\xcd\xaeK\xd7\xf0\x7f\xf4Gvn#\xa5W\xce9\xf8=w[\xd9\xc1\xb5\xdb\xb6\xae\xe1\xea\xf46\xe0 \x8fG\xec\xef\xf6\x99\x7fu\x1d\x81\x9e\x92\x9d\nmG\x90\xa9\xbf\xdb/\xa8\xbd\xea\x17\x7f\xcac\xbd^\xe3\xce@\xe0V/\xd8Y\xee\xf1x\x8c\x1dV\xdc\xa3\xc8\x0e\x87\xb3M\x83\xec\x7f]\xd7\xffl\x1d\xfc\xd9^\x98\xf2\x16\x1f\x98cI\x92n\xbd\x02\xc1N\xc8\xe3\xff\xba\xae\xa7\xde\xecv\xbb\xd4\x1eH~\xabd\xee\x03\x8e9\x04A\xc0\xc8\xe3\'l\xd7%\xbe\xb1m;\xfb!\x0b\x91\xcf\x8d\xef\xfe.\x1fi\xec\xa2\xb1\x9f\\\xd7\xc5~\x9b,\xcb\x00 \xcb\xb2a\x18\xf8\x80\xceTUu]\x17\xdf\xb8\xae\xbb\\.\xf9_\r\xc3\x10E\x11\x00DQ\xe4\xbd\xe5\x1f\x98c\xb8\xf1~0\x96F\xf6\x8c1\xc77\x8a\xa2\xa4\x92\xcf\xfe\xe7chYV6\x15\x9a\xa6\x01@\x14E\xe8\x89\xeb\xba\x98K\x96e\xe1\x03\x1f(>\xb8\xae\xab\xaa*s\x8c\xf9C\xfa\xa3_Py\xf4\x08R\xe6=\xa27\x85\x81\xfb\xa6\xfb\xba\xf9\xa1\x1dzS\x18\xf0\xd7\xc2\x89m\x7f\x17L\x1c\x7foqG\xe6\xf3\xdf\x02KY\xc7\xe6\xdf\xac\xd7\x7f\x9c\xf5`\xbfH%n\xda\x87\xb9\x00\x8c\t\xfe\xef\xfbI\x92$\xae\xfb\xe7\'\xf6\x9e\xedow\x9c\x84\x9d\xee\x04H\\\xf7\xd7\xa5\xaa\xfe\xf9\xbc?\xc9,\xe5?Y\xf7\xabc\xc6cP\x14\x10\x04PU\xf8\xf7\xbfa6\x03M\x83\x7f\xff\x1b\x00\xbe_\x02\xc0\xbf\xff\r8q\xfd\xcf?\x00\x00\xff\xfd\xdf\xa0i\xdf\x9f\x0b\x02\xbc\xbe\xfe\xba\x14\x04P\x14\x10\xc5\xef\xe7\xfd\xbe\xe5\xd4\xd4\x83zS=\xa2O:\xe3\xe1\xa1\xc2\xe8\x11=*\x8c[,\xa4w\xb8\xbd\xb3\x06\xc3\xd7\x19\xd3\xe9T\x96\xe5\xcf\xcf\xcf\xae#r\x9en$\xa3\xb5\r\x96\x9b\xcd&\x8a\xa2\xcf\xcf\xcf\x9e\x98\x8d9C\x9b\xfdh\x1f\x07\n]\x80Aw\x18\x81*\xb4\xd1Ly\x9eW\xb4w\x! bf\x05\xba\r\xfd"n\xd8L\xb1\x96\xa1\xdb\xbc\xc0\xd0q1\x07\x9b\xc76w\xa1_D\xf3\x92\xb1^\xaf\xdf\xdf\xdf\x9b\xf5\xf3AhL26\x9b\r\xf6M{X\x12\xba\xae\xe7\xbeo\xdfN{9\xd7J\xc6j\xb5RU5w\xfbw\x0f\x89\xe38{i\xdb\xa5\xb7\xea\xdc\x90*Z\xbe\xa2\xb3\xbb \xf7\x96\x9e\x9e\xf4\xb2*I\xc6\x00\x0e,\xf1\'\xferE!WhZ\xe6Q\n\xe3.\xe8\xd1\xdcT\x9b\x94\xd8\xa3\xebP\xab?\x90d\xccf\xb3}\xf1*S\x1f\xd4\xf8\x03\x15\xc6\xa5\xb4\x7f\xb0\xfc\xb1\x9a\xa9\xd4ta\xf6,,\xef\xa0\xfd#\xfe\x8f%\x19\xbd\xb2\xf7\x92\xe5\xb1$#\xb7$\xb2SU\xd9\xf9\xf6\xa6nJ(\xe7\xb1$\x03\x00t]\xdfn\xb7]\xc7"\x9f\xc7\x92\x0c\x00\xc8-\x89\xdc3\t\xb9F\x12\x1b\xbf\xff\x88\xe7\xe1$\xa3\x88>\xa8\x93J\x92\xc1\x97D\xeeb@n\xcd\xea\xed\xb2An\x95/*\x89"\xbb\x15\xb78\xe03\xfc*_\x9d\xce-!\x9e\x91\x8cl\xbd\xb8h\xb6\xa0\xb7\xc2\x91KII\xdcTU\xfcr\xe94o\x915\x80\x1a^u\x08\x9e\xdcj\x8a\xa6,N\x146S\rN)\xf7\xd0`]\t%\x9a\xfc\xd6\xf3W\x8f\xab3n\x91\xe9WV\xbb|\x9dQ\xcf\x80Y\xe3\x06\xb3nJ\xc9Y\x88\xc9dR\xa2\xedJ2\xe7\xca\x06 G2\x1eaTqkv\xbb]\x8d}\x019\x92qMI\xf4\xd0\nX\t\xe5{>\xaf\xb9\xa6\xe0\xe5\xe5\xa5hKJ\t\x97M\x87\x9c\x9d/3M\xb3\xdcA\x1f\xcc13\x82 (\xf9\xf5\xeb\xeb\xeb\x9a\xaey\x8d\x190!I\x92J\x16\xa2\xfe\x9eC=\xeb\x00\xa0\x19\xbbL7\xe1\x066\xb5.u\x90\xcb\xc3M\x14\xf6\x19*\x8c\x1eA\x85\xd1#\xa80z\x04\x15F\x0e\xa2(\n\x00\xfc\xbfv\xa0\xf1]\x8f \xc9\xe8\x11T\x18=\x82\n\xa3G\xfc\x07\xfc5\xfa8lxS\x97=$-\x19hX\x12\xd7V\x99)Kv\x038{\x99z`\xa6,\xd9\x1b\xe6\x03o\xca\x92=\xa7,\x7f2\xc7-$\x18;,\xc7\xe3\x91\xaf\x82\x9e\xe7U\xb4_\n\x00\xcc\xb0\'K\x05^\xbc\x0e\x7f\xed\x97\xe2,\x1c\xb3_\x8a7\xaa\xf3\x0f\xec\xa7_\xfb\xa5\tg\xa9\x92Y\x95L\x99\x9dd\xff\x1b\x86\x81\x97\xb5\'\xdc:+\x00\xb0uGQ\x14\xf1\x19\x7fE\xdf\x92\x1f\x13\x97\xea\x8fy/\xf6\xc0\x1c\xb3\x97\x8d\xac_\x16\xc1\xc7JUU\x16"Z\xf2d\xc6HYb\x93\x9fef|#\x8a\xa2\xaa\xaa\xf8\x1e\xdd\xa3\xc1\xd2$I\xd0\xc8\':Fo1i\xe8!K#\xff\x80\xfe\xa0\xf5\xce\xef|\xe0\xbb\xb6\xc9\x8fQQ\x16\x1e\xff?oT\xd4\xf7}\xbe0\xf0\x01-\xae2\xa3\xa2\x18\x12pFEY\xc2\xd8C\xca\x02i\xb3K\xd3)X\r\x00\x00Q\x14\x97\xcb%V,F\xca\x92,+\x0cL\x17\x00,\x97KY\x96\x99eX\xbe\xf0\\\xd7E\xdfxK\xb2X\x05\xd1=:\xe6\x1f\x8032\xfb\x9d\xc9\x15Sr\xeb:\xdb\x02l+E6-%\xa9\xbb\xf4:\x86k\xa0A_\x8f\xa0\xc2 \x88|h\xd8\xf7\x97\xd9\x0c\xd8\xf6\x8f\xd9\x0c\xfa:&!Z\x80d\xe3/\xae\x0bQ\x04\x00 \x08\xe0\xba\xf0\xd3{\xfd&\x0c\xbf\x05\x86\xbfx\xedx\xfc~\x99+K\xf8r\xb5\xfa\xf3\x12?a\x0eR\xee\xd11\xef\x86\xfd\x84[Zv\xbb\x9c\x9f\x8eG\x88chg_\xf0\x83\xd0ZW\xfa>\x00H\x1c\xe7\xfb\x7fU\xfdc0\x9a\xb7+\x9d\xfbav\\\xc2\xdc\xa3\x9f\xa9\x9fL3\t\x82\x9c\xf7\xfc\xbf\xd4O\x86\x91\xc8r:b\xf8\x93\xa2\xdc\x8by\xeb{\x81r\xf3/|\x8d\xcc\xad\x82\xa2\x98\x18F\x02\x90\xa4\xae\\,\x92\r\xe6^\xd3\nC\xcc\xf5\'+\x8a\x18\xb7(\xca\xff\xc9u\x93\xc5\x82\xc4\xa3Ah,N\x10\xf9\xd0x\x83 \xf2!\xd9 \x88|H6\xca\xd8l6h:\xba\x9f\x8c\xc7\xe3\xfb0\xc0\x7f\x9f\xd0x\xe3\x97\xd5je\x9a\xe6\x1de\x88 \x08\x9a\xa6\xb9\xae{G\x07\xef\xef\x88\xc7\xd5\x1b\xab\xd5J\x92$^-|||\xdc\x91`\xc0\xcf\x1e.^0$I\xba/\x1b.}\xe6!\xf4F\x1c\xc7\x8b\xc5"\x8a"\xc7q:\xb7\xbc}#\xa6\xd3\xe9\xe1p\xb0m[\xd3\xb4\xa1\xa6\xb1m\xba\x9c@\xbe\x19\xb8\xab\xb3\xebX\xb4D\xc9^H\xdcT\xddfd\x86\xc4\x10\xfaT\x82 \xac\xfen\xca8\x9dN\x1f\x1f\x1f]\xc5\xa7e\xf6\xfb=\x7f\xce\x82Y39\x1e\x8f\xae\xeb2\xc3\xf0}\x9eT\xe8\'\xf7\xd7\xa7Z\xadV\xb2,wk\xf5\xb1\xe7\x94X\xc5\xec\xdc`\xe6=\xd1\xb5\xe2:\x8feY]G\xe1\x0e\xc0\xe39<\x8e\xe3\xf0\x7f\xa6\xb2\xf1\xa6\xa7\x96\x86A\xef\xf4\xc6\x1d\xdd\x0e\xda7\xb26\xf9\xef\xcb\xaej\xdfhR6\xda\xc0\xb9\xb95\xbc;\xfe\xcah\x0c\x90\xd4M\x82\xb9\xff\xcex\xd0\x80\! x0fW\x16\xae(\x8ag}h\xca\xa0\xd9o\x9fJ\x10\x84\xb3q\x17\xcen\xd68\xd7\x14\x9d\xf5\xa1J4\xe0j\x1f\xce\'dxT\xd1\x12=(\x9a[\xfbP\x1d\xda\x87K\x10\xf9\x90l\x10D>$\x1b\x04\x91\x0f\xc9\x06A\xe4C\xeb\x1b\x04\x91\x0f\xe9\r\x82\xc8\x87d\x83 \xf2!\xd9 \x88|H6\x08"\x9f_\xd9\xe0w\xd7\x08\x82p\xd1\x011\xa2\x87x\x9e\'\x08\x82\xe7y\xf8\xd0\xf26\xea\x01pFo\x08\x82`\xdb6\xfcH\xcez\xbdf"\xc4\x1e0\xeb\xf1y6\x9b\t\x82\xb0\xdb\xedl\xdb\x16\x04!\x0c\xc3\xd5j\x85\xbf\x8e\xc7c|\xe0\xdd\xe3\x03~\x85\x7f\xe2\xc3j\xb5\xc2\xadlX\xba\xbb\xdd\x8e/f\xdc\xbb\xce{\x82\x97E\xe0\x1b\x0c\x9a\xf76\x1b\x10{\x93\xf5Y\xd7uA\x10\xe28\x9e\xcf\xe7m\xdeD\xd58\xbe\xef\x03\xc0\xf3\xf33\x7fG\x9c \x08\xb8E\x0f\x8b)U\x16x9A\xaa\xd0\xb3\x99\x06\x7fkB\xb6\xd0g\xb3\x19n%d2\x99\xad9\xd9B\x9f\xcdfh\xf9\xaa\xa8hR\xb1]\xaf\xd7\xd9Bg!2\xc7\xd97X\'Y\xbd\x02\x80\xfcB\xe7\xf7\x81\xf1\xcf\x86a`\xe6\xf2\xbb\xaf\x0c\xc3`o\xd8\x03\x1a\xb0\xc0gUUy\x07\x96ei\x9a&\xcb2\xff-\xef\x1e\x1f\xf0+\xf8\xd9\xe3\xc4\x82\xc3\x08X\x96%\xcb2\xbb\xbb\x11\x00\xf0\x84\rs)\x8a\xe2b\xb1@\xc7x\xca\x8c\xf76\x1b\x10\xff&\xeb\xb3(\x8a\xc3\xb8\x93\x1b\x000\xe7\xf1\x19\x13\x95*\xd0TY\xb8\xae\x9b-\xf4l\xa6%\x7fkB\xb6\xd0Y\x1e\xaa\xaa\x8a\x0f\xd9\x9aST\xe8\x18%\xdf\xf7\xb3E\x93\x8a\xadeY\xd9Bg)e\x8es\xdf\xb0\x93s\xa9\x08\xff\xc9@>N<|.\xb0\xb3{A\x10\xb0\xc3\xdf\xec!\x8a"\xf6\x8c\tv\x1c\xc70\x0cv\x18\x92\xf9\xe0\xban\x10\x04\xfcO\xf8\xa1\xef\xfbYoM\xd34\x0c\x83?k\xce\xc7$\x15a|\x83\xe1\xe2OQ\x14e\xbd\xcd\r(\xeb3F\xf2\xae\xef\xa7UU\x15+S\xb6@-\xcbbE\x80eW^\xe8\xb9\x99\xc6\xd7\x84\xa2B7M\x93\xf9\x9f*\xb8"o1\\\xfe\xac\x1f\x1f\x13>\xb6\xecdo\xaa\xd0\xd9O\xacZf\xdfd}N\xf2\n\xbd\xe1\xb5\xbf\xe3\xf1\x18E\x11]\xf4\xfaP\x! 0c\xb5\xd0i]\x9c r\xa0\t\\\x82\xc8\x81\x04\x83 r \xc1\xe0\xb0m`s\xffa\x08\xb4\x0e\xf0\xc0\xfc\xab\xeb\x08\xf4\x89 \x00fD\xb9E;\xf0D\x0f!\x8d\x91G\xd1&\x80\xf9\x1cf\xb3\xb4&\xc17\xec\x1f\xcfj\xf5\xfd2eYk6\x83\xd5\xea\xd7A\xea\'\xf6`\xdb\xbf\xef\x8f\xc7\xc2\x9f\x98\xa2[\xafI\xcb5\xc6\x053\xe4\x83\xc70\xbe\xedb\x00$\xcbe\xdaF\xc6b\x91\x00$\xae\x9b(\xca\x9f\x9f\\7q\xdd\xef\x9fx;\xbf\xa6\x99\x00$\x86\x91\xe3\x15@\x82\xebJ\xaa\x9a\xf3\x13{\xe0\r@b\x10I\x92hZ\xfa\'>\xda-Z\xef\x1c6$\x18\x1cX\xc3d\xf9\xb7\x9e\xf1\xb0\xda\x9cK\xb6\x89\xe1\xabo\xaa*\x8bb"\x8aI\x14\xa5e,\xf9k\x14\'+\x18Q\x94\xf3\x13F[\x14\x93\x0b\xcdo\x13%PW*C\x10@\x10\x9cqS\xd1V>\xef\x0fo@\xe9t\x02E\x01M\x83(\xca\xf9\xcau\xa1\xe8\xbe\x18Q\x04\xdf\xcf\xffIU\xa1\x82%1\xa2"$\x18\x19\x14\x05ro\xa03Mp]X\xafA\x92\xa0\x82\x9900M\xb0,X\xaf\x01-\xbd\xa6n"\xde\xefa\xbf\xcf\x1f\xe2??C\xd1B\xb2,C\xd1\xe5c\x9f\x9f\x10E\xe9\xc1\x0cQ\x97\xff\xc4m^\x04\x00\x80 \x80,\xc3\xff\xfc\xcf\xef\x9f?;\xde\x00\x00\xfe\xf9\x07\xa6S\xf8\xdf\xff\x85\x7f\xfe\x81\xac5\xe5\x94ct\xaf\xeb`\x9a\xf0_\xff\x05E\xf7\xac\n\x02(\xca\x9f\x0f\x99?\xf8\xc0$G\x10@\x14\xe1\xf33\xff\'Y\x06U\x05I\x82\xff\xfb\xbft4\x88Z\xd0\x96\x10\x82\xc8\x81\xbaR\x04\x91\x03\t\x06A\xe4@\x82A\x109\x90`\x10D\x0e$\x18\x04\x91\x03\tF!a\x18\xd6\xb8l\xae5\xa6\xd3)\xddQx;H0\xf2Y\xaf\xd7OOO\xb5o\x7fl\x81\xc3\xe1 \x8a\xa2 \x08\xc7\xe3\xb1\xeb\xb8\x0c\x10\x12\x8co\x8e\xc7\xe3x\x00\x80\xe3\xf18)\xdaj\xd1c\xa6\xd3\xe9\xe1p\x88\xe3\xd80\x0cEQ4M\x1b\xfc\xfd\xab\xad\xf1\xa0\x1a\xc3\xf3<^?\xdc\xa3T\x00\x00\xbb\xb6\xf3\xe3\xe3\xe3\xf5\xf5\xd5u\xdd\x15\x1e\xf3 \xae\x864\xc6\xdd\x13\xc7\xb1eYoooa\x18>==\xdd\xa9\xf6\xeb\x1b\x0f\xa11\xd0\x96\xa3\xcd\x9fz\x1b\x10\xa3\xd1(\x8a"\x00xzz\xd2u\x9d\xa4\xa2\x19:>\x0frK\xfcG:\xce\xc6\x8cO\xa2\xcdI\xdf\xf7\x1f\xf1\xee\xf3\xe6\x18\xa0`\x18\x86!\xcb\xb2\xe38]G\xa4%L\xd3,\xfaI\x96ef9\x93\xb8\x88\xe1\x8c1V\xab\xd5\xc7\xc7G\xd7\xb1\xe8\x00I\x92N\xa7\x13>\xe30\x03\x00\xe28\xa6\x19\xaak\xb8\xfb1\xc6\xf1x\x9cN\xa7\xc7\xe3\xf11\xa5\x02\x00|\xdf\x0f\x7f\x0e\xee-\x16\x0b|\x18\x8dF\xfc\xbax\x9f\x97\xf0{J\xd7*\xab\x0eQ\x14\xe1\x95\x00D\x16fC?I\x12~\x98\xa1i\x9aK\xd6\x12*s\x7f]\xa9\xf9|n\x9a\xe6S\xee\xb1l\xa2\xb4\x13\xc5:Z\xc4Y\xee\xa0+\x15\x86\xe1x]K\\Dn\xab\xbf\xddn/2\x9b0\x9f\xcfSJ\xe6\x01!\x8d\xf1\xd0\xc4q\x1c\x04A\xf6\x08G\x18\x86\xaa\xaa~\x15\xd9\xa2~\x00H0\x1e\x9d"\xd9xp\xa8+5@\xe2\x82{mr\xa7eG\xa3\x91\\z\x13\xe7\xba\xe8F\xc2AC\x1ac\x80\x8c\xc7\xe3\xa2^P\xbdS+\xb9c\xfaaC\x1ac\x80h\xc5w\x8e\xa9\xaa\x1a\x16\xdf\xba\xc4VZS\x9cN\xa7\xdc\x89\xe0\x01C\x1ac\x98l6\x9b\xb7\xd4\xe5f\xd5@[U\x8d\xc7\xe7\xee \xc1 \xd2\x94\x1b\xe0\x99N\xa7\xae\xeb\x0e~\x8d\x9c\xbaR\x0f\x8a\xe7yE?\x95\xcfP\x1d\x0e\x87G\xb0\xecF\x821XRg0R\x9c\xb5x[\xb2&\xf8\xf2\xf22\xf8\x13\xf6$\x18\x83\xc5/\xba\x11\x1c\x00*,\x87\x9fN\xa7*\xeb\xe5CU\x1d4\xc6\x18,8\xfbt\xe5N\xfe\xf9|\xfe\x89w(\x173\xc8\xc9\\\x12\x8c!\xd3\x9au\xa9\xe1\x9d0\xa3\xae\xd4\x90\xa9"\x15\xe3\xf1\xf8\xac\x9b\x92\x91:20\xa9\x00\x12\x0c\xe2\xeb\xeb\xeb\xacl\xaf\xd2\x07\xeb\x9e\x8au\xf1\x1a,\xcb\xaa\xe8\x92! \xae\x83\xb9\x1d\x17]Jx\x91Q\xed(\x8a\x86w\x0fh\x1b\x83\xef\x8a\xb3"\xc4Myyy\xa9\xee\xf8p8TW\xcb\xa3\xd1\xa8\x86\x91\x11]\xd7\xfb<(\xbfv\x8c\xd1\xe1\xceJ2\xb0wS\xe28\x8e\xa2\xe8\xa2\xe1\xf2\xa5\xc3k\xdb\xb6}\xdf\xef\xe9\xfa\xe35\xea\xa6\xf3\x9e\x0f]\xa3q\x11\xb7\xce\xae!\xdd\x8dxUWj\xb9\\\x9euSqd\xc6(2T\x91\xcb\xe1p\xb8\xc8\xfd\x83Sn?*\x97\x8bz;\xa3\xd1h\xbb\xdd\xd6[\xd1\xeb\xdb\x88\xfc*\xc1\xa8\xd2\xb3\xacxE\x03\xc3\xb2\xac\x8b\xf2\xe8\xec1\x1a\x82\xf1\xf9\xf9yi;\x05\x05\x16\xd4K\xa8md\xa4Wk\xe45\x05\xe3vF\x7fG\xa3\x91\xaa\xaa\x97~u\xbf{rZ\xe6\xd2Q\xf2h4\xba\xb4i\xab\x07\xae\x91_d|\xfa\xa6\xd4\x11\x0cI\x92\xaaOqT\\p\xe5\xa9qQC\x10\x04}\xd3\xc5\x83\xe1\xfd\xfd\xbd^\x7fu6\x9b]\xfaI\x8f\x96\xff.\x1d\x94,\x97\xcb(\x8an1\xdc\xb9\x12\x1a\x88W$\x08\x82\xd6\xc2J]\x90Y\x9d\xce/\xce\xbc\xf9\xbe#\xdb\xb6k\xacc\xd4;\xac\xdc\xda\x11\xe7\xbb\xa6\xf6n\xa8\x967;\xe9\xba\xaei\xdaE\xcb/\rr\xf3\x05\xbe \x08j|Uo\x0b\x03IE\x15jo\x0fY,\x16M\xc6\xe3\x1c\xdb\xed\xb6\xc6h\xb31\xaa+\x97z\xda\xad\xfa\x0e\xa8\x14\xa6i\xd6\xfb0{\xe35\x91\xa2v\xde\xd6\xee\xe1\\\xd95j\xbf\xf7^U\xab\xb6\xbf\xcc\\[\xe3{\x9e\'\x8a"\xdd\x84r\x0b\xae\xe9\xac^c\xf4v\xb3\xd9\x04A\xd0\xe6\x1ay\xa5\xca\x87\x93\xdfwT\xd5\xaa\x98\t#\xee\x8e6\x8f\xe2\xd0\xa1\x9f\x07\xe5\x9a.@\xf5cO\xf7\xcbm\x07\xdfW\x1e\xc3\x7f\xb4\xcbJ\xda\xa4\xdc\xb2m9\x8a\xa2\\S4\xab\xd5\xea\xca}\xb55VH.\xe5\x8c`\\y$\xe8\xcay\x8c\x1a{{R\xd0N\xaa"\x1c\xc7\xa9\xbd$\x8a\xe3\x84\xda\x95\xfb\xe3\xe3\xc3\xb2\xac\x1a\x9bS\x18\xfb\xfd^\x92\xa4\xdb\xeeZ/\x19\x98\x1b\x86q\xe5l@\xed\xf5\x1d\xc6\x95\xbb5}\xdf\xaf=-6x\x0c\xc3\xb8\xe6\xf3\xf2\xcas\xeb\xd0\x93$q]\xf7v\xb3U\xbfi\xbbR\x8a\x92$Q\x14\xe5J\x1f\xaaD\xe3\xec\n\xf7\xf5\t\x19\x1e\x00\x90\x9c\xfbw>[\xae\xf3\xa1\xe4f@\xc6\xd9\xc3\x9e\xad\x15.7\xf8\xaeb\xcd\xa04f\x82 \x9c\x8f\xf8\xd9\xb4\x9d\x8b\x86p\xd6\x18\xc2\xd5\t\x19\x1eU\x8a\xe6\xfa\x8c\xbd\x0f\x1f\xaaAv\xa5\x08"\x07\x12\x0c\x82\xc8\x81\x04\x83 r \xc1 \x88\x1cH0\x08"\x07\x12\x0c\x82\xc8\x81\x04\x83 r \xc1 \x88\x1cH0\x08"\x87\x7fu\x1d\x01\xe2n8\xbb\xa1@\x14\xc56\xe2\xd1\nt\x1e\x83 r\xa0\xae\x14A\xe4@\x82A\x109\x90`\x10D\x0e$\x18\x04\x91\x03\t\x06A\xe4@\x82A\x109\x90`\x10D\x0e$\x18\x04\x91\xc3\xb7`\x08\x82\xc0n\xb0_\xaf\xd7m\xdefO\xdc\x08\xe1/]G\xe7\xce \x8d1d\x16\x8b\x85\xeb\xba\xa6iv\x1d\x91\xfb\xe3\x8c``c\xc3\xcc\xae\t\x82\x80\x97z\xcdf3A\x10P\xb7\xf0m\x92 \x08q\x1c\xe3\x9fh\x0f\xcb\xb6m\xfc\x93\xdd\xb0\xc6\x7f\x82&\xe5X{&I\x12>\xafV+t\xc0\xee4\xcb\xc6\x84\xf9\x80V\xd5X\xb8\xcc7\xfe!\x15\x10{\x93\xf5y\xb7\xdb\xe1\x9b\xf5z]3S{\x83,\xcb\xcf\xcf\xcf\xbcY\xa3\xe9t\xca\x97\x0eK&\xdfM\xc8f5{\x98\xcdfX\xf4\xe5\x85\xae\xeb:\xfe\xa9\xeb:\xef\'\x9f\xb1\xd9Bg>3Kp%\x85\x8e\x9e\x94\x17z* \xf6\x86}\xc5\xeadN\xa1\xf3\xe6z\xf0\xd90\x0c|\x96e\x19\xad\xb7\x8b\xa2\x88\xd6\x9c\x00\x00\xed\x97\xe1\xc5\x05\xec[f<\x0b~\xec>\xe1~2\xf4\x04?\xc9\xbaWU\x15-\xb2\xe1O\xec\x861\xfc\x8a\x8f\t\x00h\x9a\xe6\xba.\xda&\xc47\xf8\xad\xeb\xba\xf8\x86\xf7\r\xfd\xe7C\xe4\x03J\xbd\xc9\xfa\xcc>\xef\xe7\xddQ\x15\x81\x1f3M,\x8b\xf0f\x8c \x08P\x87$\\b\xcb\x0b\x9dy\xc8,\xe8\xb1\x9a\x90\xe4\x15\xba(\x8aQ\x14\xe1\xd5()\xf7\xa9\xd2\xe1\x0b\x1d\xc3eU\xab\xa4hXl\xcb\x0b\xbd\xe4\x8da\x18\x98-X\xd3\xb2\x85^&\x18\xf8\x99\xaa\xaa|\xccxR\xe1\xf1\x91`\x85\x11\x04\x01\xbb\xf58\xe5>%\x18\x98\xef\xcc\x19\x1aW\xc5\xa2e/y\xc7\xa2(\xa2{f\x82\x8d\xf5\x19X"\x19,\xa0\xec\x9b\xac\xcf\x181>]\xf7\x08\xab\x8b|\xdb\xc1\xa7.\xc9\xabj\xe5\x85^$\x18\xf8\xc0\x02\xf2}\x9fYgM\xb9O\xd5\xd7T\xa1\xa3\xe8\xfa\xbe\x9f\x14\x14\r\xc6\r\x00\x98\x89\xca\x92B\xcf}\x83wm\xa6"\x9c-\xf43]\xa9\xc5b\xb1\xdf\xef\xbf\xbe\xbeX\x00\xbc\xc6\xc8\x05\xf5 \xbbHI\x96eM\xd3\x92\x8cP\xa5\x18\x8f\xc7X6\x8c\xc9db\x18F\xca\xfa-o\xf0TQ\x94\xfd~\xef\xfb>\x8a\x90 \x08x\xbb\x1c\xef\x9eek\xc9\x9b\xac\xcf\xfb\xfd~\xbf\xdf\'I\xf2\xfe\xfe^\x1e\xed\xde\x82]\x9a\x94Mrl\xd1Y\xea\x8a\xbe\xcd\x16zQ\xa61R\x85\xae(J\xb6Rf\xc9\x16\xfa\xeb\xeb\xab\xa6i\xa9\xda\xc5\x17\r\xc6\xcd\xb2,\x14\xa1\x1a\x85\xce_B\xcb[\xb6N\x17zQ\x9a\r\xc3\xc0H\xe3\xff\xd5\xbbR\xf0\xd3\x06\xb0&y\xb1X`77\x08\x02\xfc\t\xf5\x00\xaf1\x80k\xd2X@(\x15\xc9\x8f\x8eNy+\xcb2\x93\x1c\xf6\x06\xff\xc4\xe6\x84\x8faQW*\xd7gQ\x14\xd1\x9f6\xefql\x96l\x81\xb2:\xb1\\.Y\x9f\'\xe5\xc0u\xdd\xdcBg~\x16i\x0c>\x0fQ<\x0c\xc3`:\x07\x7fb5\x98\x97\x19\xfeW\xf4\x13\xabJRP4\xaa\xaa\x1a\x86\xc1\xd7\x93\x92B/\xe9J1\x9f\xd9\x9bT\xa1\xff\x8b\xe5\x08\x9fA\xd8\xf9y\x7f\x7f\xd74\xcdq\x1c\xd7u\xb1\xeda\xf16M\x93I\x1e\xeb\x05\xb2\xa4\xae\xd7kM\xd3\xde\xde\xde\xb00L\xd34\x0c#\x08\x82(\x8aP\x18\xf0\xbaJ\xa6\x04\xb3\xde\x06A`Y\x16\xeb\xff\x9dN\xa70\x0c-\xcbZ.\x97x[!\x1fa\xbc\xe7\x01\xc3Eia\xb9\xcc\xfc\xc7\\\xce\xbe\xc9\xfa\x9c$\xc9f\xb3\xf9\xeeh\xde3|\x16a\x13\x8b\x97vcq`\xe9\xf0n\xb0\xa2\xe4\x16:\xf3\x90\x1dEbE\x86! \xa4\n\xdd\xf7}\xc7qP\x99\x87a\xa8\xaa\xaa\xa6ix\xb1%\xab-\xa9B\x7fzz\xc2\xaf4M;\x1c\x0ePZ\xe8\xaa\xaab\xdc\xca\x0b\x9d\x05\x94z\x93$\x89\xe7y8_\x87\xd7!\xe5\x14zn{\x83rY\xaf\xa1\xaa\xf1\x15\xd18\xa9\x82`C\x88\xf2O\xeaY\x86\x1fd\xa17|\x82\xef\x11\xee\xda!R\x0c\xb2\xd0\xe9h+A\xe4@\x82A\x10\x04AT\x85vK\x11\x04A\x10U!\x9dA\x10\x04AT\x85t\x06Q\xc0z\r\x82\x00\x82\x00\x9e\xf7\xe7\xfd|\xfe\xfd\x9e\x8e@\x11\xc4\xe3A\xc6\x9d\x89K\x18\x8f\xe1g+-A\x10\x0f\x08\x8d3\x88j\x84!H\xd2\xb7\xc2\xe0\xb6U\xe7\x13\xc70\x1e\xff\x0eG\xd8\xbf\xf9<\xc7\xb1\xe7\xe5\xb8<;\x94\x99\xcdr\x1cK\x12\xc4q\xbe{\x16\xca\xcf\xe1\xe6?\x9e\x14\x91\xfd\x84\xf9St\x06:\xeb \x8eA\x92\xce|\x95\x1a\xd5\xe9zN\xd0\x04\xd1\x03Hg\x10\x15\xd8\xed@\x96!\x8a~\xff/!\x8eA\x14!\x08@\x14!I\xbe\xff9\x0e\xa8*\xc8rz\xa6\x0b\x00\x9e\x9f\x7f\x9d!\xaa\x9a~\x93b6\x03\xd7\xfd\x8e\x0cs\xa9i\x10E \x8a\xc0\x9d\xfe\xeb\x1e\xcf\x03Q\x04\xee\x08\xe1yl\x1b,\x0b4\r\x92\x04\xf6\xfb\x9b\xc5\x8c \xea@:\x838\x87a\x80\xa6\x01\x00h\x1a|}\xc1ht\xc6=;V\xcd\x1d\xf8\x83\x97\x17\xd8\xef\xe1\xe3\x03\xae?\xc7\xe1y\x80G\xf4\x16\x8b?\x91\xf9\xb1\xc0\x01?vH\xfe\xf0\xfc\x0cx\xda\xdcu\x7f\xc7%\x7f\x8f\xb1\x16\xc2\x7fRl\xfb \x87\xd5\nT\x15\x14\xa5j@\x00\xa0\xaa\xb0X\x80\xa2\xc0\xdf\xb3\xf1\x04\xd1\x13Hg\x10\xe7\xc0\xf6\xce4\xe1\xf3\xb3\x92\xfb\xe7g\xc0\xa3\xe2\xae\xfb;S\xb4\xdb}\xb7\xb9\x9b\xcd\xb5\xf1y~\xfe\x1e\xe8\x98\xe6\x9f\x99(\xd6\xc8\xa2\x86\xcb\xf2\xfe\xfe;(\xc1\x7f\x15\x15\x00?\xee\xa9\xde\xfa\x1b\x06\x98&,\x97p8T\xfd\x04\x00\\\x17\x82\x00|\x1f\x14\x85&\xa6\x88\x1eB:\x83\xa8\x80\xef\xc3\xdb\xdb\x05\xeeO\xa7\xef\x16\\\x14\xbfU\x05\xb6\xe3\x96u\x99?E|}\x81a|\xcfD\xf1\x83\x06\x9c\x9e\x9aL\x1a\x08\xa2\x11\\\x17>>.\xfe\xea\xe9\xe9[3\xb9.\xfcX=%\x88\x9e@\xe7\xc0\t\x82 \x88\xaa\xd08\x83 \x08\x82\xa8\n\xe9\x0c\x82 \x08\xa2*\xa43\x08\x82 \x88\xaa\x90\xce \x08\x82 \xaaB:\x83 \x08\x82\xa8\n\xe9\x0c\x82h\x95\xe3\xf18\x9dN\xa7\xd3\xe9\xb1W\xe7\xd5\t\xa2\x1a\xa43\x88\x0b\x88\xe3x\xb5Z\x8d\xc7cA\x10\xe6\xf3\xb9m\xdbq\x91}\'\xa2\x80\xc9dbY\x96\xef\xfb\xae\xebJ\x924\x9f\xcf)\x0f\x89;\x82\xceg\x10\x85\x84a\x18\x04\xc1\xf0nm\xed\x03q\x1ck\x9a&\x8a"\xde\x89\xcen%\'\x88\x9eC:\x83\xf8e\xbd^\x9b\xa6\t\x00\x9a\xa6i\x9a\xf6\xf2\xf2\xd2u\x8c\x06\xcb|>WU\xf5\xed\xed\r\x00\xc20\xd44MQ\x94\xedv\xdbu\xbc\x08\xe2\x0c\xa43\x1e\x94\xe3\xf1\xe8\xba\xae(\x8a\xaf\xaf\xaf]\xc7\xe5\x11\x89\xe3X\x96e\xd7u\xd9\xf0"\x8e\xe3(\x8a\x9e\x9e\x9e\xe28^,\x16\xae\xebZ\x96Ej\x9b\xe8\x1b\xa43\x1e\x08I\x92DQTU\x95\xc6\x10}`\xb7\xdb-\x97\xcb\xaf\xaf/\x00\xd8l6\x8e\xe3\xec\xffZ>\x0f\xc3p\xb1X\x04A\xe08\x0e\xcd\\\x11=\x81t\xc6\xd0\x88\xe3\xd8\xb2,\\e\r\x82\xe0\xe9\xe9\xa9\xeb\x18\x11\x958\x1e\x8f\x8a\xa2\xf8\xbe\x8f\xea\xc1\xb6m\xd7ui\xb6\x8a\xe8\x1b\xa43\x06\x82m\xdb\x96e\xe1:\x04\xe9\x89\xfbe:\x9d\xaa\xaa\xfa\xf1c\r\xd7\xf3<\xc30\x1c\xc7\x19\xfd\xdc\x14\xa2\xeb\xba,\xcb\xef\xef\xef\xdd\x! c5\x91xhHg\xdc\x13\xbb\xdd\xceu]\xc7q\xa2(Z.\x97\xd4p\x0c\x83\xe9t\xea\xba\xee\xa8\xf82\xab0\x0cS\xfd\x00\xdc\xad`\x18\xc6[#\xb6\xe5\t\xa22\xa43\xee\x03<\xffE\x93\xda\x83\xc4\xb6m\xc30pa\xe3"p\x1er\xb1X\x94\xe8\x1b\x82h\x16:\xd3\xd7\x0b\xe28\xde\xedv\xba\xaeK\x924\x1e\x8fu]O\x1d\x12\x9eL&\xa40\x86\xca\xeb\xeb\xebb\xb1\x98\xcf\xe7\xa9\xf7\xb6m\x8f\xc7\xe3\xd4\x89\xbf8\x8e%I\xb2m\x1b\x00F\xa3\xd1\xdb\xdb\x1b)\x0c\xa2Mh\x9cA\x10\xbd\xc0\xb6mM\xd3R\n\x00\xb7\xe4f7\xdd\x1e\x8f\xc7\xc5b\x91=\xd2\xb1\xdb\xed\x16\x8b\x85\xaa\xaa\x96e\x91.!n\x01\xe9\x8c\x9b\x13\x86\xa1\xe38\xb8\x0e\xa1(\n.S\xd3\xa0\x81\xa8\x8e\xae\xebA\x10\xa4v\xe2\xc2\xcf\xdcT\xee\x92\xc6f\xb31\x0cc\xb1X|\xd4\xb8\\\x96 \x8a!\x9d\xd10\xb4\xf0@\x10\xc4\x80\xa1\xf5\x8ck\xd9l6\xd3\xe9\x14m\xf6\xedv;Zx \xaeA\xd7\xf5\xd5jU\xef[\xcf\xf3p\x9d\xa3\x88\xe9t\xba\xdb\xed\xeayN\x10\x08\x8d3. \x8ec\xd7u\xe9\x045qS\xc6\xe3\xb1i\x9aE\xd5\xcc\xf3 I am new to the python group. I have just started using python. Are there any Image, ImageDraw, ImageChops modules in python. If there are can somebody send me the Image, ImageDraw, ImageChops modules? Thanks and Regards SAroj Panda --------------------------------- Do you Yahoo!? Yahoo! SiteBuilder - Free web site building tool. Try it! -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.python.org/pipermail/image-sig/attachments/20040204/e8758377/attachment.html From fredrik at pythonware.com Mon Feb 23 13:10:21 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Mon Feb 23 13:11:20 2004 Subject: [Image-SIG] Re: Request References: <20040204154840.7253.qmail@web40203.mail.yahoo.com> Message-ID: "saroj panda" wrot: > I am new to the python group. I have just started using python. > Are there any Image, ImageDraw, ImageChops modules in python. > If there are can somebody send me the Image, ImageDraw, > ImageChops modules? the modules you mention are part of PIL, the Python Imaging Library. you can download the library from this page: http://www.pythonware.com/products/pil From gherman at darwin.in-berlin.de Mon Feb 23 14:11:41 2004 From: gherman at darwin.in-berlin.de (Dinu Gherman) Date: Mon Feb 23 14:10:48 2004 Subject: [Image-SIG] How can I grab the first frame of movi file? In-Reply-To: <20040211115201.60898.qmail@web25004.mail.ukl.yahoo.com> Message-ID: <1D0EBCF6-6634-11D8-8AA9-00039345C610@darwin.in-berlin.de> James Lockley I want to do some pretty basic AVI processing. > To begin with all I want to do is grab the first frame of an AVI and > save as a jpg. > ? > Eventually I'm hoping to be able to save in other formats, and rotate, > resize etc... > ? > Are there any modules available (for Win32) ? Pitty, I did just that on a Mac for QuickTime movies by adapting some sample code in the standard library, plat-mac/videoreader.py. See also the following posting for an initial version of it, if you also have a Mac around... ;-) http://mail.python.org/pipermail/pythonmac-sig/2004-February/010282.html Dinu -- Dinu C. Gherman - http://python.net/~gherman ...................................................................... "The best way to predict the future is to invent it." (Alan Kay) From hwu at math.luc.edu Tue Feb 24 00:10:41 2004 From: hwu at math.luc.edu (hai wu) Date: Tue Feb 24 00:10:45 2004 Subject: [Image-SIG] Bug Report: PIL 1.1.4 for 2.3 Message-ID: PIL 1.1.4 for Python 2.3 (Windows Only) does not work in Windows 2003 server. The same installation shows that it works in Windows 2000 professional. The error message shows as follows: >>> import Image >>> import _imaging Traceback (most recent call last): File "", line 1, in ? ImportError: DLL load failed: The specified module could not be found. >>> Thanks Hai From angelchase91 at hotmail.com Tue Feb 24 03:21:36 2004 From: angelchase91 at hotmail.com (Angel) Date: Tue Feb 24 03:22:18 2004 Subject: [Image-SIG] the uncertainty principle is untenable Message-ID: <200402240822.i1O8MAWm041989@mxzilla6.xs4all.nl> Please reply to hdgbyi@public.guangzhou.gd.cn . Thank you ! THE UNCERTAINTY PRINCIPLE IS UNTENABLE By re-analysing Heisenberg's Gamma-Ray Microscope experiment and the ideal experiment from which the uncertainty principle is derived, it is actually found that the uncertainty principle can not be obtained from them. It is therefore found to be untenable. Key words: uncertainty principle; Heisenberg's Gamma-Ray Microscope Experiment; ideal experiment Ideal Experiment 1 Heisenberg's Gamma-Ray Microscope Experiment A free electron sits directly beneath the center of the microscope's lens (please see AIP page http://www.aip.org/history/heisenberg/p08b.htm or diagram below) . The circular lens forms a cone of angle 2A from the electron. The electron is then illuminated from the left by gamma rays--high energy light which has the shortest wavelength. These yield the highest resolution, for according to a principle of wave optics, the microscope can resolve (that is, "see" or distinguish) objects to a size of dx, which is related to and to the wavelength L of the gamma ray, by the expression: dx = L/(2sinA) (1) However, in quantum mechanics, where a light wave can act like a particle, a gamma ray striking an electron gives it a kick. At the moment the light is diffracted by the electron into the microscope lens, the electron is thrust to the right. To be observed by the microscope, the gamma ray must be scattered into any angle within the cone of angle 2A. In quantum mechanics, the gamma ray carries momentum as if it were a particle. The total momentum p is related to the wavelength by the formula, p = h / L, where h is Planck's constant. (2) In the extreme case of diffraction of the gamma ray to the right edge of the lens, the total momentum would be the sum of the electron's momentum P'x in the x direction and the gamma ray's momentum in the x direction: P' x + (h sinA) / L', where L' is the wavelength of the deflected gamma ray. In the other extreme, the observed gamma ray recoils backward, just hitting the left edge of the lens. In this case, the total momentum in the x direction is: P''x - (h sinA) / L''. The final x momentum in each case must equal the initial x momentum, since momentum is conserved. Therefore, the final x momenta are equal to each other: P'x + (h sinA) / L' = P''x - (h sinA) / L'' (3) If A is small, then the wavelengths are approximately the same, L' ~ L" ~ L. So we have P''x - P'x = dPx ~ 2h sinA / L (4) Since dx = L/(2 sinA), we obtain a reciprocal relationship between the minimum uncertainty in the measured position, dx, of the electron along the x axis and the uncertainty in its momentum, dPx, in the x direction: dPx ~ h / dx or dPx dx ~ h. (5) For more than minimum uncertainty, the "greater than" sign may added. Except for the factor of 4pi and an equal sign, this is Heisenberg's uncertainty relation for the simultaneous measurement of the position and momentum of an object. Re-analysis To be seen by the microscope, the gamma ray must be scattered into any angle within the cone of angle 2A. The microscope can resolve (that is, "see" or distinguish) objects to a size of dx, which is related to and to the wavelength L of the gamma ray, by the expression: dx = L/(2sinA) (1) This is the resolving limit of the microscope and it is the uncertain quantity of the object's position. The microscope can not see the object whose size is smaller than its resolving limit, dx. Therefore, to be seen by the microscope, the size of the electron must be larger than or equal to the resolving limit. But if the size of the electron is larger than or equal to the resolving limit dx, the electron will not be in the range dx. Therefore, dx can not be deemed to be the uncertain quantity of the electron's position which can be seen by the microscope, but deemed to be the uncertain quantity of the electron's position which can not be seen by the microscope. To repeat, dx is uncertainty in the electron's position which can not be seen by the microscope. To be seen by the microscope, the gamma ray must be scattered into any angle within the cone of angle 2A, so we can measure the momentum of the electron. dPx is the uncertainty in the electron's momentum which can be seen by microscope. What relates to dx is the electron where the size is smaller than the resolving limit. When the electron is in the range dx, it can not be seen by the microscope, so its position is uncertain. What relates to dPx is the electron where the size is larger than or equal to the resolving limit .The electron is not in the range dx, so it can be seen by the microscope and its position is certain. Therefore, the electron which relates to dx and dPx respectively is not the same. What we can see is the electron where the size is larger than or equal to the resolving limit dx and has a certain position, dx = 0. Quantum mechanics does not rely on the size of the object, but on Heisenberg's Gamma-Ray Microscope experiment. The use of the microscope must relate to the size of the object. The size of the object which can be seen by the microscope must be larger than or equal to the resolving limit dx of the microscope, thus the uncertain quantity of the electron's position does not exist. The gamma ray which is diffracted by the electron can be scattered into any angle within the cone of angle 2A, where we can measure the momentum of the electron. What we can see is the electron which has a certain position, dx = 0, so that in no other position can we measure the momentum of the electron. In Quantum mechanics, the momentum of the electron can be measured accurately when we measure the momentum of the electron only, therefore, we have gained dPx = 0. And, dPx dx =0. (6) Every physical principle is based on an Ideal Experiment, not based on MATHEMATICS, including heisenberg uncertainty principle. For example, the Law of Conservation of Momentum is based on the collision of two stretch ball in the vacuum; the Principle of equivalence(general relativity) is besed on the Einstein's laboratory in the lift. Please see the book: Max Jammer. (1974) The philosophy of quantum mechanics (John wiley & sons , Inc New York ) Page 96 Heisenberg's Gamma-Ray Microscope experiment is an ideal experiment. Einstein said, One Experiment is enough to negate a physical principle. Heisenberg's Gamma-Ray Microscope experiment has negated the uncertainty principle. Ideal experiment 2 Single Slit Diffraction Experiment Suppose a particle moves in the Y direction originally and then passes a slit with width dx(Please see diagram below) . The uncertain quantity of the particle's position in the X direction is dx, and interference occurs at the back slit . According to Wave Optics , the angle where No.1 min of interference pattern is can be calculated by following formula: sinA=L/2dx (1) and L=h/p where h is Planck's constant. (2) So the uncertainty principle can be obtained dPx dx ~ h (5) Re-analysis According to Newton first law , if an external force in the X direction does not affect the particle, it will move in a uniform straight line, ( Motion State or Static State) , and the motion in the Y direction is unchanged .Therefore , we can learn its position in the slit from its starting point. The particle can have a certain position in the slit and the uncertain quantity of the position is dx =0. According to Newton first law , if the external force at the X direction does not affect particle, and the original motion in the Y direction is not changed , the momentum of the particle int the X direction will be Px=0 and the uncertain quantity of the momentum will be dPx =0. This gives: dPx dx =0. (6) No experiment negates NEWTON FIRST LAW. Whether in quantum mechanics or classical mechanics, it applies to the microcosmic world and is of the form of the Energy-Momentum conservation laws. If an external force does not affect the particle and it does not remain static or in uniform motion, it has disobeyed the Energy-Momentum conservation laws. Under the above ideal experiment , it is considered that the width of the slit is the uncertain quantity of the particle's position. But there is certainly no reason for us to consider that the particle in the above experiment has an uncertain position, and no reason for us to consider that the slit's width is the uncertain quantity of the particle. Therefore, the uncertainty principle, dPx dx ~ h (5) which is derived from the above experiment is unreasonable. Conclusion >From the above re-analysis , it is realized that the ideal experiment demonstration for the uncertainty principle is untenable. Therefore, the uncertainty principle is untenable. Reference: 1. Max Jammer. (1974) The philosophy of quantum mechanics (John wiley & sons , Inc New York ) Page 65 2. Ibid, Page 67 3. http://www.aip.org/history/heisenberg/p08b.htm Author : BingXin Gong Postal address : P.O.Box A111 YongFa XiaoQu XinHua HuaDu GuangZhou 510800 P.R.China E-mail: hdgbyi@public.guangzhou.gd.cn Tel: 86---20---86856616 From Nicholson at vsystems.se Tue Feb 24 09:09:42 2004 From: Nicholson at vsystems.se (Smith) Date: Tue Feb 24 09:14:54 2004 Subject: [Image-SIG] Do You Know What Is Ci.alis? apLYnfH Message-ID: An HTML attachment was scrubbed... URL: http://mail.python.org/pipermail/image-sig/attachments/20040224/d53fa853/attachment.html From fredrik at pythonware.com Tue Feb 24 14:19:25 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Tue Feb 24 14:21:40 2004 Subject: [Image-SIG] Re: Re: PIL Bug: Crash processing GIF image References: <37AE5E5E-6378-11D8-A8A8-000A95E3823E@cogdon.org><912B7E7F-63CE-11D8-A8A8-000A95E3823E@cogdon.org> Message-ID: > if you want to ignore the logical screen, you can manipulate the "size" > and "tile" attributes after you've opened the file, but before you've done > anything else with the image: > > i = Image.open(...) > > if i.tile[0][0] == "gif": > # only read the first "local image" from this GIF file > x0, y0, x1, y1 = i.tile[0][1] > i.size = x1-x0, y1-y0 > del i.tile[1:] the above only works if the "local image" is located in the upper left corner; I've posted an improved version here: http://effbot.org/zone/pil-format-gif.htm From fredrik at pythonware.com Tue Feb 24 16:55:14 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Tue Feb 24 16:55:56 2004 Subject: [Image-SIG] Re: PIL 1.1.5 alpha 1 References: Message-ID: > A PIL 1.1.5 alpha 1 tarball is now available from effbot.org: > > http://effbot.org/downloads I've added a (preliminary) windows build for Python 2.3: http://effbot.org/downloads#pil From fredrik at pythonware.com Tue Feb 24 16:56:43 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Tue Feb 24 17:00:38 2004 Subject: [Image-SIG] ANN: pilwmf 1.0 beta 2 for windows Message-ID: pilwmf is a simple WMF and EMF renderer for PIL 1.1.5a1, for Windows. This plugin uses the new stub loader interface in 1.1.5, and can render "placeable windows metafile" and "enhanced metafiles" as bitmaps. An example: import Image import WmfPlugin # activate WMF renderer im = Image.open("example.wmf") im.load() # render the file im.save("example.png") Source and 2.3 binaries are available from: http://effbot.org/downloads#pilwmf See the README file in the source distribution for more examples. From fredrik at pythonware.com Tue Feb 24 18:00:07 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Tue Feb 24 18:01:06 2004 Subject: [Image-SIG] Re: Corrupted GIF output when dimensions are small References: <20031121200607.GC1702@slinkp.com> Message-ID: Paul Winkler wrote: > It's odd that increasing the height of the image above 5 fixes the gif. > Further experimentation suggests that I get bad output with the > above method for ANY gif of height < 5 OR width < 2. > > Any idea how to fix this? The GIF stuff for PIL appears to all > be in C and I have no idea where to start. this appears to be a bug related to interlaced encoding. as a workaround, you can pass in "interlace=0" to the save method. img.save(where, interlace=0) From fredrik at pythonware.com Tue Feb 24 18:37:24 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Tue Feb 24 18:38:22 2004 Subject: [Image-SIG] Re: Error References: <32900.195.64.198.82.1077205948.squirrel@naumen> Message-ID: wrote: > there are bug, while loading this image! note that >>> im = Image.open("center_decenter.png") >>> im.info.get("interlace") 1 as documented, PIL doesn't support interlaced PNG files: http://effbot.org/zone/pil-format-png.htm (but I agree that "IOError: unknown error when reading image file" isn't a very informative message...) From s_t_a_n_i at yahoo.com Wed Feb 25 14:51:56 2004 From: s_t_a_n_i at yahoo.com (www.stani.be) Date: Wed Feb 25 14:52:01 2004 Subject: [Image-SIG] ptp and python Message-ID: <20040225195156.15213.qmail@web21110.mail.yahoo.com> Hi, I would be very happy with a python module, which implements the ptp (picture transfer protocol). That would make possible to take pictures with your digital camera on python command. Anybody has tips or work arounds (eg command line programs) Thanks, Stani __________________________________ Do you Yahoo!? Yahoo! Mail SpamGuard - Read only the mail you want. http://antispam.yahoo.com/tools From hancock at anansispaceworks.com Wed Feb 25 15:40:49 2004 From: hancock at anansispaceworks.com (Terry Hancock) Date: Wed Feb 25 15:29:02 2004 Subject: [Image-SIG] PIL's configure bug -- from 2002 In-Reply-To: <04Feb20.165242pst."58611"@synergy1.parc.xerox.com> References: <04Feb20.165242pst."58611"@synergy1.parc.xerox.com> Message-ID: On Friday 20 February 2004 06:52 pm, Bill Janssen wrote: > Not really a PIL problem, you just don't like the way things work. > Fair enough! I agree, fix it. But if I could suggest something: > don't fix it in a piecemeal style -- this is a generic problem with > the autoconf system, not with PIL. Add a couple of standard switches > to configure, not to the PIL configure.in. PIL's configure script already contains --with-jpeg and --with-zlib options, which according to the "./configure --help" are supposed to provide exactly the service I describe. They do not appear to work as advertised. I classify that as a bug, not a feature request. How you can figure this is a "generic problem with the autoconf system" is beyond me (what would you be expecting autoconf to do about it?) And if I had access to your original configure.in, I could probably figure out why and fix it. That file is missing from the so-called "source" distribution of a so-called "open source" package, which was very frustrating to me, and should bother the maintainer too. Don't you think so, too? This violates published standards for both "free software" and "open source software" definitions (generated intermediate files are not "source code"). Surely it does so accidentally, right? Now maybe my technical point is totally wrong. But surely the best way to prove that is just to show me the file, rather than making excuses about why I shouldn't need to see it. I find the latter extremely disconcerting. Cheers, Terry -- Terry Hancock ( hancock at anansispaceworks.com ) Anansi Spaceworks http://www.anansispaceworks.com From fredrik at pythonware.com Wed Feb 25 15:41:59 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Wed Feb 25 15:47:13 2004 Subject: [Image-SIG] Re: PIL's configure bug -- from 2002 References: <04Feb20.165242pst."58611"@synergy1.parc.xerox.com> Message-ID: Terry Hancock wrote: > And if I had access to your original configure.in, I could probably > figure out why and fix it. That file is missing from the so-called "source" > distribution of a so-called "open source" package, which was very > frustrating to me, and should bother the maintainer too. Don't you > think so, too? This violates published standards for both "free > software" and "open source software" definitions (generated > intermediate files are not "source code"). Surely it does so > accidentally, right? Hint: with that attitude, it's very easy to ignore you. From janssen at parc.com Wed Feb 25 15:54:07 2004 From: janssen at parc.com (Bill Janssen) Date: Wed Feb 25 15:57:09 2004 Subject: [Image-SIG] PIL's configure bug -- from 2002 In-Reply-To: Your message of "Wed, 25 Feb 2004 12:40:49 PST." Message-ID: <04Feb25.125407pst."58611"@synergy1.parc.xerox.com> > Now maybe my technical point is totally wrong. But surely the best > way to prove that is just to show me the file, rather than making > excuses about why I shouldn't need to see it. I find the latter > extremely disconcerting. Actually, I changed my mind, and think your technical point is rather good. I looked at the Makefile and setup.py files for that package, and I think there are problems with PIL specifically, as well as problems with the general autoconf system. Specifically, I think the standard generated configure program should take two more standard switches to allow you to specify extra include directories and extra library directories, and I think that the CFLAGS variable in PIL is set improperly, and not propagated to the setup.py file. Not that I understand the distutils system... Bill From fredrik at pythonware.com Wed Feb 25 16:01:36 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Wed Feb 25 16:06:01 2004 Subject: [Image-SIG] Re: Bug Report: PIL 1.1.4 for 2.3 References: Message-ID: "hai wu" wrote: > PIL 1.1.4 for Python 2.3 (Windows Only) does not work in Windows 2003 > server. > > The same installation shows that it works in Windows 2000 professional. > > The error message shows as follows: > >>> import Image > >>> import _imaging > Traceback (most recent call last): > File "", line 1, in ? > ImportError: DLL load failed: The specified module could not be found. are you using a build from PythonWare or effbot.org, or did you get your 1.1.4 installer somewhere else? try running python with the -vv option, and make sure that it's trying to import the right _imaging module. if you can, check the DLL dependencies. the standard build for Python 2.3 uses the following DLLs: KERNEL32.DLL USER32.DLL GDI32.DLL PYTHON23.DLL MSVCRT.DLL (but Python itself uses most of those; if there's a problem with one of them, you shouldn't be able to start Python either... hm). From Chris.Barker at noaa.gov Wed Feb 25 16:08:09 2004 From: Chris.Barker at noaa.gov (Chris Barker) Date: Wed Feb 25 16:08:39 2004 Subject: [Image-SIG] Re: PIL's configure bug -- from 2002 In-Reply-To: References: <04Feb20.165242pst."58611"@synergy1.parc.xerox.com> Message-ID: <403D0EB9.10308@noaa.gov> Fredrik Lundh wrote: > Terry Hancock wrote: >> This violates published standards for both "free >>software" and "open source software" definitions (generated >>intermediate files are not "source code"). Surely it does so >>accidentally, right? > > > Hint: with that attitude, it's very easy to ignore you. To try to help prevent this from turning personal: As a total outsider, yes, Terry's tone in his most recent post was pretty snide. In fact, there was a bit of a critical tone to the first post as well (problem from 2002). However, the facts in his earlier posts can be boiled down to: """ I found what I think is a bug in your software that I think I know how to fix. If you tell me how to get the source, I will try to fix it, and report back what I have found, and give you a patch if I think I've fixed it. """ Why would an open source maintainer have any other reaction than: "here's the source, let me know what you've figured out" We all know that tone is very tricky with email...I try to ignore it and try to figure out what people are really asking of me. All Terry is really asking is the configure.in file. This would be very different if he was asking anyone else to fix his pet bug. -Chris -- Christopher Barker, Ph.D. Oceanographer NOAA/OR&R/HAZMAT (206) 526-6959 voice 7600 Sand Point Way NE (206) 526-6329 fax Seattle, WA 98115 (206) 526-6317 main reception Chris.Barker@noaa.gov From abuechle at hsz-t.ch Thu Feb 26 09:28:18 2004 From: abuechle at hsz-t.ch (Andreas Buechler) Date: Thu Feb 26 09:29:23 2004 Subject: [Image-SIG] Error while Installing PIL 1.1.4 Message-ID: <403E0282.1080708@hsz-t.ch> Hi, I tried to install PIL 1.1.4 under SuSE 9, but I got the following error after sucessfully running configure and make: # python setup.py build Traceback (most recent call last): File "setup.py", line 287, in ? extra_compile_args=EXTRA_COMPILE_ARGS, NameError: name 'EXTRA_COMPILE_ARGS' is not defined I tried to figure it out, but couldn't find anything. Maybe one of you has an idea what is going wrong here (BTW compiling and installing PIL 1.1.3 is no problem). Please CC your answers to my since I'm not on the mailing-list, thanks! Andi From abuechle at hsz-t.ch Thu Feb 26 09:37:52 2004 From: abuechle at hsz-t.ch (Andreas Buechler) Date: Thu Feb 26 09:38:56 2004 Subject: [Image-SIG] Error while installing PIL 1.1.4 Message-ID: <403E04C0.8030505@hsz-t.ch> Hi, I tried to install PIL 1.1.4 under SuSE 9, but I got the following error after sucessfully running configure and make: # python setup.py build Traceback (most recent call last): File "setup.py", line 287, in ? extra_compile_args=EXTRA_COMPILE_ARGS, NameError: name 'EXTRA_COMPILE_ARGS' is not defined I tried to figure it out, but couldn't find anything. Maybe one of you has an idea what is going wrong here (BTW compiling and installing PIL 1.1.3 is no problem). Please CC your answers to my since I'm not on the mailing-list, thanks! Andi From hancock at anansispaceworks.com Thu Feb 26 10:30:09 2004 From: hancock at anansispaceworks.com (Terry Hancock) Date: Thu Feb 26 10:18:18 2004 Subject: [Image-SIG] Re: PIL's configure bug -- from 2002 In-Reply-To: References: <04Feb20.165242pst."58611"@synergy1.parc.xerox.com> Message-ID: On Wednesday 25 February 2004 02:41 pm, Fredrik Lundh wrote: > Terry Hancock wrote: > > > And if I had access to your original configure.in, I could probably > > figure out why and fix it. That file is missing from the so-called "source" > > distribution of a so-called "open source" package, which was very > > frustrating to me, and should bother the maintainer too. Don't you > > think so, too? This violates published standards for both "free > > software" and "open source software" definitions (generated > > intermediate files are not "source code"). Surely it does so > > accidentally, right? > > Hint: with that attitude, it's very easy to ignore you. What attitude? You mean the bit about violating open-source definitions? This is technically true -- I'm not suggesting that it's malicious, I'm trying to suggest that it *is* a flaw. Because Bill seemed to be missing that point. I was only hinting before, because it did seem rather rude to point out that -- in principle at least -- you are violating the open-source social contract here. Seeing as PIL is your baby, Fredrik, and you have been very interested in the open-source model, I figured you'd agree that this wasn't right, even if it is a "trivial" part of the source. Look, all I said was that this problem exists. I said that in 2002 and received complete silence. I wasn't willing to personally fix it then, so I said "Well, okay, maybe they have other priorities, I'll fix it when I'm motivated enough to do so". Then I came back to it, find it still broken, and Ack! no source to fix, so much for the open-source theory (actually my first thought was "My God, how am I going to figure out this configure script" -- then I remembered that it was generated). My next thought was to pull the file from CVS, but of course, that doesn't work with PIL, because of your lead-ahead proprietary/ free release model. It is actually very common for open-source projects with Autoconf installers to not include the Autoconf sources, but it does make the source distribution incomplete. And when a bug is in the configuration, rather than the package itself, this means you can't really fix it yourself. For many projects, this is no problem, because you can just go pull the file from CVS, but see above. I don't mind doing a little footwork -- but the only way to get the source in question seems to be to ask for it here. So I did. Actually, I was prepared for the possibility that it isn't really "configure.in" that I want to edit, because I'm not really familiar with Autoconf (yet, anyway). In fact, now I think I just need to read configure.in to figure out what needs to change in the libImaging/Makefile.in file (which is present). But I didn't get that information, I got somebody claiming my problem isn't really a problem. Or that it is a problem, but not a very important one. Or that it is a problem, but it's a problem with somebody *else's* package. Hint: with *this* attitude it's pretty easy to lose interest in offering you free help. ;-) Terry -- Terry Hancock ( hancock at anansispaceworks.com ) Anansi Spaceworks http://www.anansispaceworks.com From hancock at anansispaceworks.com Thu Feb 26 10:37:44 2004 From: hancock at anansispaceworks.com (Terry Hancock) Date: Thu Feb 26 10:25:43 2004 Subject: [Image-SIG] ptp and python In-Reply-To: <20040225195156.15213.qmail@web21110.mail.yahoo.com> References: <20040225195156.15213.qmail@web21110.mail.yahoo.com> Message-ID: On Wednesday 25 February 2004 01:51 pm, www.stani.be wrote: > I would be very happy with a python module, which > implements the ptp (picture transfer protocol). That > would make possible to take pictures with your digital > camera on python command. Anybody has tips or work > arounds (eg command line programs) I would expect this translates to a Python wrapper for libgphoto2 -- suggest looking at: http://www.gphoto.org/ However, http://www.gphoto.org/doc/manual/future.html suggests that it does not yet exist. Perhaps you'll want to consider using one of the various methods to wrap C libs for Python. I'd probably look at Pyrex http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/ if I were going to try to do that. Cheers, Terry -- Terry Hancock ( hancock at anansispaceworks.com ) Anansi Spaceworks http://www.anansispaceworks.com From cheryssin at chronicspender.com Fri Feb 27 15:45:47 2004 From: cheryssin at chronicspender.com (Lorraine Hackett) Date: Fri Feb 27 01:32:37 2004 Subject: [Image-SIG] 89.LE. RE: Your friend has set you up on a date... Message-ID: A friend has set you up on a blind date with another friend. Confirm or Reschedule here: http://stupidlovelife.com/confirm/?oc=50798223 no thx http://stupidlovelife.com/remove/?oc=52217551 signature choosyclungspoil diorama From fredrik at pythonware.com Fri Feb 27 02:58:33 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Fri Feb 27 02:59:46 2004 Subject: [Image-SIG] Error while installing PIL 1.1.4 References: <403E04C0.8030505@hsz-t.ch> Message-ID: <003701c3fd07$81756a20$9b00a8c0@spiff> Andreas Buechler wrote: > I tried to install PIL 1.1.4 under SuSE 9, but I got the following error > after sucessfully running configure and make: > > # python setup.py build > Traceback (most recent call last): > File "setup.py", line 287, in ? > extra_compile_args=EXTRA_COMPILE_ARGS, > NameError: name 'EXTRA_COMPILE_ARGS' is not defined > > I tried to figure it out, but couldn't find anything. Maybe one of you > has an idea what is going wrong here (BTW compiling and installing PIL > 1.1.3 is no problem). if nothing else helps, it never hurts to google for the error message. here's the first hit: http://effbot.org/zone/pil-errata-114.htm cheers /F From fredrik at pythonware.com Sat Feb 28 05:13:56 2004 From: fredrik at pythonware.com (Fredrik Lundh) Date: Sat Feb 28 05:14:20 2004 Subject: [Image-SIG] ANN: PIL 1.1.5 alpha 2 Message-ID: A PIL 1.1.5 alpha 2 tarball is now available from effbot.org: http://effbot.org/downloads (look for Imaging-1.1.5a2.tar.gz) Changes since 1.1.5 alpha 1: + The "paste" method now supports the alternative "paste(im, mask)" syntax (in this case, the box defaults to im's bounding box). + The "ImageFile.Parser" class now works also for PNG files with more than one IDAT block. + Added DPI read/write to the TIFF codec, and fixed writing of rational values. The decoder sets the info["dpi"] attribute for TIFF files with appropriate resolution settings. The encoder uses the "dpi" option: + Disable interlacing for small (or narrow) GIF images, to work around what appears to be a hard-to-find bug in PIL's GIF encoder. + Fixed writing of mode "P" PDF images. Made mode "1" PDF images smaller. + Made the XBM reader a bit more robust; the file may now start with a few whitespace characters. + Added support for enhanced metafiles to the WMF driver. The separate PILWMF kit lets you render both placeable WMF files and EMF files as raster images. See http://effbot.org/downloads#pilwmf A list of changes since 1.1.4 can be found here: http://effbot.org/zone/pil-changes-115.htm Report bugs to this list or directly to me, as usual. enjoy /F From koadny at liquidlunch.com Sun Feb 29 03:46:43 2004 From: koadny at liquidlunch.com (Tracy John) Date: Sat Feb 28 12:48:08 2004 Subject: [Image-SIG] 81.HV. as seen on CNN Message-ID: drop the hammer on the next girl you screw... http://emarkdinbs.com/vp5 No more of this sort of material. Honoured in 24-48 hours. http://diminutive.amilsdcx.com/a.html capacitive equilateral acrimonious brickbat capitulate larch lodge blanch finite splutter powell continue adenosine mascara debenture argue blameworthy garvey hankel copter tome transcontinental wing hypothesis chargeable downriver mockingbird ll From usgnhrwu at graphic-designer.com Fri Feb 27 17:55:35 2004 From: usgnhrwu at graphic-designer.com (Ahmad Ash) Date: Sun Feb 29 05:59:09 2004 Subject: [Image-SIG] colloq In-Reply-To: <072590537361010661857060@xamwmcex> References: <072590537361010661857060@xamwmcex> Message-ID: <05124217338.63942156372204551313@fhkrasnwe> An HTML attachment was scrubbed... URL: http://mail.python.org/pipermail/image-sig/attachments/20040227/2fdb8b4d/attachment.html