libmetadata-extractor-java-2.3.1/0000755000000000000000000000000010716136547015424 5ustar rootrootlibmetadata-extractor-java-2.3.1/META-INF/0000755000000000000000000000000010716136374016562 5ustar rootrootlibmetadata-extractor-java-2.3.1/META-INF/MANIFEST.MF0000644000000000000000000000015310716136374020213 0ustar rootrootManifest-Version: 1.0 Ant-Version: Apache Ant 1.5.4 Created-By: 1.4.2_03-b02 (Sun Microsystems Inc.) libmetadata-extractor-java-2.3.1/build.xml0000644000000000000000000000613010716136374017243 0ustar rootroot metadata-extractor for java build file Copyright © 2006 Drew Noakes. All Rights Reserved.]]> libmetadata-extractor-java-2.3.1/ChangeLog.txt0000644000000000000000000001714410716136374020021 0ustar rootrootv2.3.1 - 25 Feb 2006 ------------------------------- - Fixed copy-and-paste errors in ExifDescriptor.java. Thanks to Ferret Renaud. v2.3.0 - 12 Jan 2006 ------------------------------- - New tags from Exif 2.2 specification (A401-A420). - Fixed stack overflow exception in ExifReader for cyclic directory references. Thanks to John Sidney-Woollett for reporting this bug (reported for Fuji FinePix A101 and Canon 20D). - Fixed rounding error in the shutter speed description which was giving the wrong value most of the time (for example, 1/32 instead of 1/50). Thanks for Gli Blr and Mark Edwards for pointing out this error. - Fix thread safety bug in ExifReader. - Fixed OutOfMemoryError seen in certain Canon 20D images. Thanks to Henry Yeung for providing an image to reproduce this error. - Support for Windows XP Exif tags (Author, title, comments, etc). - Added more documentation, and removed commented/unused code. - Enhanced descriptor support for Exif tags. - Extract comments in non-ASCII encodings. - Improved camera model MakerNote support: - New models: - Epson (thanks to David Carlson for pointing me in the right direction with this) - Kyocera / Contax (very limited) - Minolta (it utilises the Olympus format) - Panasonic - Pentax / Asahi - Improved support for models: - Olympus - Canon (tested with newer Canon models, including the 20D) - Casio (for more modern models) - Source distribution filesize reduced by using .metadata files, rather than entire sample JPEG files. These .metadata files contain all non-image JPEG segments, making them suitable for unit tests whilst being much smaller on disk. v2.2.2 - 22 Nov 2003 ------------------------------- - Fixed a bug where version strings were assumed to be comprised of exactly four parts, and cases were found where a different number existed v2.2.1 - 24 Oct 2003 ------------------------------- - Fixed a bug where JpegDirectory had tag names for image width and height around the wrong way. Thanks to Sander Smith for pointing this out v2.2 - 18 Oct 2003 ------------------------------- - Added support for extraction of Jpeg image information (from the SOF0 segment) Thanks to Darrell Silver for commencing the code for this extension - Added support for reading Jpeg comments - Additional Nikon camera makernote support for D1/D100 family models Thanks to Daniel Waeber for providing sample images and to Fabrizio Giudici for publishing his work in decoding this makernote data - Added convenient writing of thumbnails to files from ExifDirectory - Fixed a bug in date format strings, whereby times in the AM / PM were indistinguishable Thanks to Bill Boland for being the first person to point this out (this was a popular one!) - Fixed bug for multi-component tag values of certain types Thanks to Derek Wegner for identifying the bug and providing a solution - More unit tests (consequently, the source-code download is much larger) - First version with an Ant build script v2.1 - 12 Jan 2003 ------------------------------- - Extract methods no longer throw exceptions, with error information stored in Metadata instances, using hasErrors() and getErrors() - Metadata and dependant classes now serializable for network transmission, and persistance in files & databases - Support for extracting metadata from InputStreams, such as network connections - Replaced code that depended upon JDK 1.4 v2.0 - 10 Dec 2002 ------------------------------- Enormous changes to the class and package structure in this release prohibit a class-by-class breakdown of changes. The focus is no longer on Exif metadata alone, but now on general metadata extraction from multiple media types. Changes support: - easier future extensibility - Iptc metadata extraction - multiple directories of tags - descriptor class for interpreting values in a given directory - multiple media and metadata types - enhanced handling of exif makernote values - many more unit tests - numerous enhancements - minor bug fixes Simpler extensibility changes the focus from exif extraction alone and opens the scope to general metadata extraction. Future development will introduce new media and metadata support with little or no impact to existing classes. v1.2 - 6 Nov 2002 ------------------------------- ExifExtractor.java - Proper traversing of Exif file structure and complete refactor & tidy of the codebase (a few unnoticed bugs removed) - Reads makernote data for 6 families of camera (5 makes) - Tags now stored in directories... use the IFD_* constants to refer to the image file directory you require (Exif, Interop, GPS and Makernote*) -- this avoids collisions where two tags share the same code - Correct extraction of multi-component values - No longer decodes image to extract Exif data -- this is much faster - Takes componentCount of unknown tags into account - Now understands GPS tags (thanks to Colin Briton for his help with this) - Returns null when no Exif data present, instead of throwing an exception - Some other bug fixes, pointed out by users around the world. Thanks! ExifLoader - Removed (unnecessary) ImageInfo.java - Stored IFD directories in separate tag-spaces - iterator() now returns an Iterator over a list of TagValue objects - More get*Description() methods to detail GPS tags, among others TagValue.java - New class to encapsualte information about a particular tag Rational.java - Improved toSimpleString() to factor more complex rational numbers into a simpler form i.e. 10/15 -> 2/3 - toSimpleString() now accepts a boolean flag, 'allowDecimals' which will display the rational number in decimal form if it fits within 5 digits i.e. 3/4 -> 0.75 when allowDecimal == true JpegSegmentReader - New class to extract APP1 segment (and others) from a Jpeg file -- this avoids decoding images just to get metadata tests\*.java - First collection of basic unit tests, to compile against JUnit - Doesn't yet cover all classes Website - A collection of JPEGs from various digital camera models, collected on the web and contributed by many users of ExifExtractor - Updated documentation v1.1.1 ------------------------------- Rational.java - Added toSimpleString() method, which returns a simplified and hopefully more readable version of the Rational i.e. 2/10 -> 1/5 10/2 -> 5 ExifExtractor.java - Removed unnecessary casting operations - Added a few more comments - Removed redundant and commented code (I'm using a CVS system now) ExifLoader.java - Added a much-needed close() call to a created input stream, allowing continued use of the File object passed to ExifLoader.getImageInfo(File) ImageInfo.java - Make use of new Rational method toSimpleString() for more elegant output - Use of DecimalFormatter to tidy output in selected get***Description() methods v1.1.0 - 28 Aug 2002 ------------------------------- - Descriptive tag values, including units and text for enumerations - Decoupling from JDK 1.4-specific libraries (tested with JDK 1.3) - More complete list of tags, both as constants for direct lookup, and via the static lookup method v1.0 ------------------------------- - Initial releaselibmetadata-extractor-java-2.3.1/Libraries/0000755000000000000000000000000010716136555017337 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/0000755000000000000000000000000010716136374016211 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/com/0000755000000000000000000000000010716136374016767 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/0000755000000000000000000000000010716136374017730 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/imaging/0000755000000000000000000000000010716136374021343 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/imaging/jpeg/0000755000000000000000000000000010716136374022270 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/imaging/jpeg/JpegMetadataReader.java0000644000000000000000000001527510716136374026616 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 12-Nov-2002 18:51:36 using IntelliJ IDEA. */ package com.drew.imaging.jpeg; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import com.drew.metadata.MetadataException; import com.drew.metadata.Tag; import com.drew.metadata.exif.ExifDirectory; import com.drew.metadata.exif.ExifReader; import com.drew.metadata.iptc.IptcReader; import com.drew.metadata.jpeg.JpegCommentReader; import com.drew.metadata.jpeg.JpegReader; import com.sun.image.codec.jpeg.JPEGDecodeParam; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; /** * */ public class JpegMetadataReader { // public static Metadata readMetadata(IIOMetadata metadata) throws JpegProcessingException {} // public static Metadata readMetadata(ImageInputStream in) throws JpegProcessingException{} // public static Metadata readMetadata(IIOImage image) throws JpegProcessingException{} // public static Metadata readMetadata(ImageReader reader) throws JpegProcessingException{} public static Metadata readMetadata(InputStream in) throws JpegProcessingException { JpegSegmentReader segmentReader = new JpegSegmentReader(in); return extractMetadataFromJpegSegmentReader(segmentReader); } public static Metadata readMetadata(File file) throws JpegProcessingException { JpegSegmentReader segmentReader = new JpegSegmentReader(file); return extractMetadataFromJpegSegmentReader(segmentReader); } public static Metadata extractMetadataFromJpegSegmentReader(JpegSegmentReader segmentReader) { final Metadata metadata = new Metadata(); try { byte[] exifSegment = segmentReader.readSegment(JpegSegmentReader.SEGMENT_APP1); new ExifReader(exifSegment).extract(metadata); } catch (JpegProcessingException e) { // in the interests of catching as much data as possible, continue // TODO lodge error message within exif directory? } try { byte[] iptcSegment = segmentReader.readSegment(JpegSegmentReader.SEGMENT_APPD); new IptcReader(iptcSegment).extract(metadata); } catch (JpegProcessingException e) { // TODO lodge error message within iptc directory? } try { byte[] jpegSegment = segmentReader.readSegment(JpegSegmentReader.SEGMENT_SOF0); new JpegReader(jpegSegment).extract(metadata); } catch (JpegProcessingException e) { // TODO lodge error message within jpeg directory? } try { byte[] jpegCommentSegment = segmentReader.readSegment(JpegSegmentReader.SEGMENT_COM); new JpegCommentReader(jpegCommentSegment).extract(metadata); } catch (JpegProcessingException e) { // TODO lodge error message within jpegcomment directory? } return metadata; } public static Metadata readMetadata(JPEGDecodeParam decodeParam) { final Metadata metadata = new Metadata(); /* We should only really be seeing Exif in _data[0]... the 2D array exists * because markers can theoretically appear multiple times in the file. */ // TODO test this method byte[][] exifSegment = decodeParam.getMarkerData(JPEGDecodeParam.APP1_MARKER); if (exifSegment != null && exifSegment[0].length>0) { new ExifReader(exifSegment[0]).extract(metadata); } // similarly, use only the first IPTC segment byte[][] iptcSegment = decodeParam.getMarkerData(JPEGDecodeParam.APPD_MARKER); if (iptcSegment != null && iptcSegment[0].length>0) { new IptcReader(iptcSegment[0]).extract(metadata); } // NOTE: Unable to utilise JpegReader for the SOF0 frame here, as the decodeParam doesn't contain the byte[] // similarly, use only the first Jpeg Comment segment byte[][] jpegCommentSegment = decodeParam.getMarkerData(JPEGDecodeParam.COMMENT_MARKER); if (jpegCommentSegment != null && jpegCommentSegment[0].length>0) { new JpegCommentReader(jpegCommentSegment[0]).extract(metadata); } return metadata; } private JpegMetadataReader() { } public static void main(String[] args) throws MetadataException, IOException { Metadata metadata = null; try { metadata = JpegMetadataReader.readMetadata(new File(args[0])); } catch (Exception e) { e.printStackTrace(System.err); System.exit(1); } // iterate over the exif data and print to System.out Iterator directories = metadata.getDirectoryIterator(); while (directories.hasNext()) { Directory directory = (Directory)directories.next(); Iterator tags = directory.getTagIterator(); while (tags.hasNext()) { Tag tag = (Tag)tags.next(); try { System.out.println("[" + directory.getName() + "] " + tag.getTagName() + " = " + tag.getDescription()); } catch (MetadataException e) { System.err.println(e.getMessage()); System.err.println(tag.getDirectoryName() + " " + tag.getTagName() + " (error)"); } } if (directory.hasErrors()) { Iterator errors = directory.getErrors(); while (errors.hasNext()) { System.out.println("ERROR: " + errors.next()); } } } if (args.length>1 && args[1].trim().equals("/thumb")) { ExifDirectory directory = (ExifDirectory)metadata.getDirectory(ExifDirectory.class); if (directory.containsThumbnail()) { System.out.println("Writing thumbnail..."); directory.writeThumbnail(args[0].trim() + ".thumb.jpg"); } else { System.out.println("No thumbnail data exists in this image"); } } } } libmetadata-extractor-java-2.3.1/src/com/drew/imaging/jpeg/JpegProcessingException.java0000644000000000000000000000251010716136374027732 0ustar rootroot/* * JpegProcessingException.java * * This class is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 04-Nov-2002 19:31:29 using IntelliJ IDEA. */ package com.drew.imaging.jpeg; import com.drew.lang.CompoundException; /** * An exception class thrown upon unexpected and fatal conditions while processing * a Jpeg file. * @author Drew Noakes http://drewnoakes.com */ public class JpegProcessingException extends CompoundException { public JpegProcessingException(String message) { super(message); } public JpegProcessingException(String message, Throwable cause) { super(message, cause); } public JpegProcessingException(Throwable cause) { super(cause); } } libmetadata-extractor-java-2.3.1/src/com/drew/imaging/jpeg/JpegSegmentData.java0000644000000000000000000001001710716136374026134 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.imaging.jpeg; import java.io.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /** * Holds a collection of Jpeg data segments. This need not necessarily be all segments * within the Jpeg. For example, it may be convenient to port about only the non-image * segments when analysing (or serializing) metadata. */ public class JpegSegmentData implements Serializable { static final long serialVersionUID = 7110175216435025451L; /** A map of byte[], keyed by the segment marker */ private final HashMap _segmentDataMap; public JpegSegmentData() { _segmentDataMap = new HashMap(10); } public void addSegment(byte segmentMarker, byte[] segmentBytes) { List segmentList = getOrCreateSegmentList(segmentMarker); segmentList.add(segmentBytes); } public byte[] getSegment(byte segmentMarker) { return getSegment(segmentMarker, 0); } public byte[] getSegment(byte segmentMarker, int occurrence) { final List segmentList = getSegmentList(segmentMarker); if (segmentList==null || segmentList.size()<=occurrence) return null; else return (byte[]) segmentList.get(occurrence); } public int getSegmentCount(byte segmentMarker) { final List segmentList = getSegmentList(segmentMarker); if (segmentList==null) return 0; else return segmentList.size(); } public void removeSegmentOccurrence(byte segmentMarker, int occurrence) { final List segmentList = (List)_segmentDataMap.get(new Byte(segmentMarker)); segmentList.remove(occurrence); } public void removeSegment(byte segmentMarker) { _segmentDataMap.remove(new Byte(segmentMarker)); } private List getSegmentList(byte segmentMarker) { return (List)_segmentDataMap.get(new Byte(segmentMarker)); } private List getOrCreateSegmentList(byte segmentMarker) { List segmentList; Byte key = new Byte(segmentMarker); if (_segmentDataMap.containsKey(key)) { segmentList = (List)_segmentDataMap.get(key); } else { segmentList = new ArrayList(); _segmentDataMap.put(key, segmentList); } return segmentList; } public boolean containsSegment(byte segmentMarker) { return _segmentDataMap.containsKey(new Byte(segmentMarker)); } public static void ToFile(File file, JpegSegmentData segmentData) throws IOException { ObjectOutputStream outputStream = null; try { outputStream = new ObjectOutputStream(new FileOutputStream(file)); outputStream.writeObject(segmentData); } finally { if (outputStream!=null) outputStream.close(); } } public static JpegSegmentData FromFile(File file) throws IOException, ClassNotFoundException { ObjectInputStream inputStream = null; try { inputStream = new ObjectInputStream(new FileInputStream(file)); return (JpegSegmentData)inputStream.readObject(); } finally { if (inputStream!=null) inputStream.close(); } } } libmetadata-extractor-java-2.3.1/src/com/drew/imaging/jpeg/JpegSegmentReader.java0000644000000000000000000002635210716136374026476 0ustar rootroot/* * JpegSegmentReader.java * * This class written by Drew Noakes, in accordance with the Jpeg specification. * * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 04-Nov-2002 00:54:00 using IntelliJ IDEA */ package com.drew.imaging.jpeg; import java.io.*; /** * Performs read functions of Jpeg files, returning specific file segments. * TODO add a findAvailableSegments() method * TODO add more segment identifiers * TODO add a getSegmentDescription() method, returning for example 'App1 application data segment, commonly containing Exif data' * @author Drew Noakes http://drewnoakes.com */ public class JpegSegmentReader { // Jpeg data can be sourced from either a file, byte[] or InputStream /** Jpeg file */ private final File _file; /** Jpeg data as byte array */ private final byte[] _data; /** Jpeg data as an InputStream */ private final InputStream _stream; private JpegSegmentData _segmentData; /** * Private, because this segment crashes my algorithm, and searching for * it doesn't work (yet). */ private static final byte SEGMENT_SOS = (byte)0xDA; /** * Private, because one wouldn't search for it. */ private static final byte MARKER_EOI = (byte)0xD9; /** APP0 Jpeg segment identifier -- Jfif data. */ public static final byte SEGMENT_APP0 = (byte)0xE0; /** APP1 Jpeg segment identifier -- where Exif data is kept. */ public static final byte SEGMENT_APP1 = (byte)0xE1; /** APP2 Jpeg segment identifier. */ public static final byte SEGMENT_APP2 = (byte)0xE2; /** APP3 Jpeg segment identifier. */ public static final byte SEGMENT_APP3 = (byte)0xE3; /** APP4 Jpeg segment identifier. */ public static final byte SEGMENT_APP4 = (byte)0xE4; /** APP5 Jpeg segment identifier. */ public static final byte SEGMENT_APP5 = (byte)0xE5; /** APP6 Jpeg segment identifier. */ public static final byte SEGMENT_APP6 = (byte)0xE6; /** APP7 Jpeg segment identifier. */ public static final byte SEGMENT_APP7 = (byte)0xE7; /** APP8 Jpeg segment identifier. */ public static final byte SEGMENT_APP8 = (byte)0xE8; /** APP9 Jpeg segment identifier. */ public static final byte SEGMENT_APP9 = (byte)0xE9; /** APPA Jpeg segment identifier -- can hold Unicode comments. */ public static final byte SEGMENT_APPA = (byte)0xEA; /** APPB Jpeg segment identifier. */ public static final byte SEGMENT_APPB = (byte)0xEB; /** APPC Jpeg segment identifier. */ public static final byte SEGMENT_APPC = (byte)0xEC; /** APPD Jpeg segment identifier -- IPTC data in here. */ public static final byte SEGMENT_APPD = (byte)0xED; /** APPE Jpeg segment identifier. */ public static final byte SEGMENT_APPE = (byte)0xEE; /** APPF Jpeg segment identifier. */ public static final byte SEGMENT_APPF = (byte)0xEF; /** Start Of Image segment identifier. */ public static final byte SEGMENT_SOI = (byte)0xD8; /** Define Quantization Table segment identifier. */ public static final byte SEGMENT_DQT = (byte)0xDB; /** Define Huffman Table segment identifier. */ public static final byte SEGMENT_DHT = (byte)0xC4; /** Start-of-Frame Zero segment identifier. */ public static final byte SEGMENT_SOF0 = (byte)0xC0; /** Jpeg comment segment identifier. */ public static final byte SEGMENT_COM = (byte)0xFE; /** * Creates a JpegSegmentReader for a specific file. * @param file the Jpeg file to read segments from */ public JpegSegmentReader(File file) throws JpegProcessingException { _file = file; _data = null; _stream = null; readSegments(); } /** * Creates a JpegSegmentReader for a byte array. * @param fileContents the byte array containing Jpeg data */ public JpegSegmentReader(byte[] fileContents) throws JpegProcessingException { _file = null; _data = fileContents; _stream = null; readSegments(); } public JpegSegmentReader(InputStream in) throws JpegProcessingException { _stream = in; _file = null; _data = null; readSegments(); } public JpegSegmentReader(JpegSegmentData segmentData) { _file = null; _data = null; _stream = null; _segmentData = segmentData; } /** * Reads the first instance of a given Jpeg segment, returning the contents as * a byte array. * @param segmentMarker the byte identifier for the desired segment * @return the byte array if found, else null * @throws JpegProcessingException for any problems processing the Jpeg data, * including inner IOExceptions */ public byte[] readSegment(byte segmentMarker) throws JpegProcessingException { return readSegment(segmentMarker, 0); } /** * Reads the first instance of a given Jpeg segment, returning the contents as * a byte array. * @param segmentMarker the byte identifier for the desired segment * @param occurrence the occurrence of the specified segment within the jpeg file * @return the byte array if found, else null */ public byte[] readSegment(byte segmentMarker, int occurrence) { return _segmentData.getSegment(segmentMarker, occurrence); } public final int getSegmentCount(byte segmentMarker) { return _segmentData.getSegmentCount(segmentMarker); } public final JpegSegmentData getSegmentData() { return _segmentData; } private void readSegments() throws JpegProcessingException { _segmentData = new JpegSegmentData(); BufferedInputStream inStream = getJpegInputStream(); try { int offset = 0; // first two bytes should be jpeg magic number if (!isValidJpegHeaderBytes(inStream)) { throw new JpegProcessingException("not a jpeg file"); } offset += 2; do { // next byte is 0xFF byte segmentIdentifier = (byte)(inStream.read() & 0xFF); if ((segmentIdentifier & 0xFF) != 0xFF) { throw new JpegProcessingException("expected jpeg segment start identifier 0xFF at offset " + offset + ", not 0x" + Integer.toHexString(segmentIdentifier & 0xFF)); } offset++; // next byte is byte thisSegmentMarker = (byte)(inStream.read() & 0xFF); offset++; // next 2-bytes are : [high-byte] [low-byte] byte[] segmentLengthBytes = new byte[2]; inStream.read(segmentLengthBytes, 0, 2); offset += 2; int segmentLength = ((segmentLengthBytes[0] << 8) & 0xFF00) | (segmentLengthBytes[1] & 0xFF); // segment length includes size bytes, so subtract two segmentLength -= 2; if (segmentLength > inStream.available()) throw new JpegProcessingException("segment size would extend beyond file stream length"); else if (segmentLength < 0) throw new JpegProcessingException("segment size would be less than zero"); byte[] segmentBytes = new byte[segmentLength]; inStream.read(segmentBytes, 0, segmentLength); offset += segmentLength; if ((thisSegmentMarker & 0xFF) == (SEGMENT_SOS & 0xFF)) { // The 'Start-Of-Scan' segment's length doesn't include the image data, instead would // have to search for the two bytes: 0xFF 0xD9 (EOI). // It comes last so simply return at this point return; } else if ((thisSegmentMarker & 0xFF) == (MARKER_EOI & 0xFF)) { // the 'End-Of-Image' segment -- this should never be found in this fashion return; } else { _segmentData.addSegment(thisSegmentMarker, segmentBytes); } // didn't find the one we're looking for, loop through to the next segment } while (true); } catch (IOException ioe) { //throw new JpegProcessingException("IOException processing Jpeg file", ioe); throw new JpegProcessingException("IOException processing Jpeg file: " + ioe.getMessage(), ioe); } finally { try { if (inStream != null) { inStream.close(); } } catch (IOException ioe) { //throw new JpegProcessingException("IOException processing Jpeg file", ioe); throw new JpegProcessingException("IOException processing Jpeg file: " + ioe.getMessage(), ioe); } } } /** * Private helper method to create a BufferedInputStream of Jpeg data from whichever * data source was specified upon construction of this instance. * @return a a BufferedInputStream of Jpeg data * @throws JpegProcessingException for any problems obtaining the stream */ private BufferedInputStream getJpegInputStream() throws JpegProcessingException { if (_stream!=null) { if (_stream instanceof BufferedInputStream) { return (BufferedInputStream) _stream; } else { return new BufferedInputStream(_stream); } } InputStream inputStream; if (_data == null) { try { inputStream = new FileInputStream(_file); } catch (FileNotFoundException e) { throw new JpegProcessingException("Jpeg file does not exist", e); } } else { inputStream = new ByteArrayInputStream(_data); } return new BufferedInputStream(inputStream); } /** * Helper method that validates the Jpeg file's magic number. * @param fileStream the InputStream to read bytes from, which must be positioned * at its start (i.e. no bytes read yet) * @return true if the magic number is Jpeg (0xFFD8) * @throws IOException for any problem in reading the file */ private boolean isValidJpegHeaderBytes(InputStream fileStream) throws IOException { byte[] header = new byte[2]; fileStream.read(header, 0, 2); return (header[0] & 0xFF) == 0xFF && (header[1] & 0xFF) == 0xD8; } }libmetadata-extractor-java-2.3.1/src/com/drew/imaging/jpeg/test/0000755000000000000000000000000010716136374023247 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/imaging/jpeg/test/JpegMetadataReaderTest.java0000644000000000000000000000434010716136374030424 0ustar rootroot/* * Test class written by Drew Noakes. * * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 12-Nov-2002 18:52:05 using IntelliJ IDEA. */ package com.drew.imaging.jpeg.test; import com.drew.imaging.jpeg.JpegMetadataReader; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import com.drew.metadata.exif.ExifDirectory; import junit.framework.TestCase; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; /** * */ public class JpegMetadataReaderTest extends TestCase { public JpegMetadataReaderTest(String s) { super(s); } public void testExtractMetadata() throws Exception { File withExif = new File("src/com/drew/metadata/exif/test/withExif.jpg"); Metadata metadata = JpegMetadataReader.readMetadata(withExif); assertTrue(metadata.containsDirectory(ExifDirectory.class)); Directory directory = metadata.getDirectory(ExifDirectory.class); assertEquals("80", directory.getString(ExifDirectory.TAG_ISO_EQUIVALENT)); } public void testExtractMetadataUsingInputStream() throws Exception { File withExif = new File("src/com/drew/metadata/exif/test/withExif.jpg"); InputStream in = new BufferedInputStream(new FileInputStream((withExif))); Metadata metadata = JpegMetadataReader.readMetadata(in); assertTrue(metadata.containsDirectory(ExifDirectory.class)); Directory directory = metadata.getDirectory(ExifDirectory.class); assertEquals("80", directory.getString(ExifDirectory.TAG_ISO_EQUIVALENT)); } } libmetadata-extractor-java-2.3.1/src/com/drew/imaging/jpeg/test/JpegSegmentDataTest.java0000644000000000000000000001350710716136374027762 0ustar rootroot/* * Test class written by Drew Noakes. * * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.imaging.jpeg.test; import com.drew.imaging.jpeg.JpegSegmentData; import com.drew.lang.test.TestHelper; import junit.framework.TestCase; import java.io.File; /** * */ public class JpegSegmentDataTest extends TestCase { public JpegSegmentDataTest(String name) { super(name); } public void testAddAndGetSegment() throws Exception { JpegSegmentData segmentData = new JpegSegmentData(); byte segmentMarker = (byte)12; byte[] segmentBytes = new byte[] { 1,2,3 }; segmentData.addSegment(segmentMarker, segmentBytes); assertEquals(1, segmentData.getSegmentCount(segmentMarker)); TestHelper.assertEqualArrays(segmentBytes, segmentData.getSegment(segmentMarker)); } public void testContainsSegment() throws Exception { JpegSegmentData segmentData = new JpegSegmentData(); byte segmentMarker = (byte)12; byte[] segmentBytes = new byte[] { 1,2,3 }; assertTrue(!segmentData.containsSegment(segmentMarker)); segmentData.addSegment(segmentMarker, segmentBytes); assertTrue(segmentData.containsSegment(segmentMarker)); } public void testAddingMultipleSegments() throws Exception { JpegSegmentData segmentData = new JpegSegmentData(); byte segmentMarker1 = (byte)12; byte segmentMarker2 = (byte)21; byte[] segmentBytes1 = new byte[] { 1,2,3 }; byte[] segmentBytes2 = new byte[] { 3,2,1 }; segmentData.addSegment(segmentMarker1, segmentBytes1); segmentData.addSegment(segmentMarker2, segmentBytes2); assertEquals(1, segmentData.getSegmentCount(segmentMarker1)); assertEquals(1, segmentData.getSegmentCount(segmentMarker2)); TestHelper.assertEqualArrays(segmentBytes1, segmentData.getSegment(segmentMarker1)); TestHelper.assertEqualArrays(segmentBytes2, segmentData.getSegment(segmentMarker2)); } public void testSegmentWithMultipleOccurrences() throws Exception { JpegSegmentData segmentData = new JpegSegmentData(); byte segmentMarker = (byte)12; byte[] segmentBytes1 = new byte[] { 1,2,3 }; byte[] segmentBytes2 = new byte[] { 3,2,1 }; segmentData.addSegment(segmentMarker, segmentBytes1); segmentData.addSegment(segmentMarker, segmentBytes2); assertEquals(2, segmentData.getSegmentCount(segmentMarker)); TestHelper.assertEqualArrays(segmentBytes1, segmentData.getSegment(segmentMarker)); TestHelper.assertEqualArrays(segmentBytes1, segmentData.getSegment(segmentMarker, 0)); TestHelper.assertEqualArrays(segmentBytes2, segmentData.getSegment(segmentMarker, 1)); } public void testRemoveSegmentOccurrence() throws Exception { JpegSegmentData segmentData = new JpegSegmentData(); byte segmentMarker = (byte)12; byte[] segmentBytes1 = new byte[] { 1,2,3 }; byte[] segmentBytes2 = new byte[] { 3,2,1 }; segmentData.addSegment(segmentMarker, segmentBytes1); segmentData.addSegment(segmentMarker, segmentBytes2); assertEquals(2, segmentData.getSegmentCount(segmentMarker)); TestHelper.assertEqualArrays(segmentBytes1, segmentData.getSegment(segmentMarker, 0)); segmentData.removeSegmentOccurrence(segmentMarker, 0); TestHelper.assertEqualArrays(segmentBytes2, segmentData.getSegment(segmentMarker, 0)); } public void testRemoveSegment() throws Exception { JpegSegmentData segmentData = new JpegSegmentData(); byte segmentMarker = (byte)12; byte[] segmentBytes1 = new byte[] { 1,2,3 }; byte[] segmentBytes2 = new byte[] { 3,2,1 }; segmentData.addSegment(segmentMarker, segmentBytes1); segmentData.addSegment(segmentMarker, segmentBytes2); assertEquals(2, segmentData.getSegmentCount(segmentMarker)); assertTrue(segmentData.containsSegment(segmentMarker)); TestHelper.assertEqualArrays(segmentBytes1, segmentData.getSegment(segmentMarker, 0)); segmentData.removeSegment(segmentMarker); assertTrue(!segmentData.containsSegment(segmentMarker)); assertEquals(0, segmentData.getSegmentCount(segmentMarker)); } public void testToAndFromFile() throws Exception { JpegSegmentData segmentData = new JpegSegmentData(); byte segmentMarker = (byte)12; byte[] segmentBytes = new byte[] { 1,2,3 }; segmentData.addSegment(segmentMarker, segmentBytes); assertTrue(segmentData.containsSegment(segmentMarker)); File tempFile = File.createTempFile("JpegSegmentDataTest", "tmp"); JpegSegmentData.ToFile(tempFile, segmentData); assertTrue(tempFile.exists()); assertTrue(tempFile.length() > 0); segmentData = JpegSegmentData.FromFile(tempFile); tempFile.delete(); assertTrue(!tempFile.exists()); assertNotNull(segmentData); assertTrue(segmentData.containsSegment(segmentMarker)); TestHelper.assertEqualArrays(segmentBytes, segmentData.getSegment(segmentMarker)); } } libmetadata-extractor-java-2.3.1/src/com/drew/imaging/jpeg/test/JpegSegmentReaderTest.java0000644000000000000000000001471210716136374030312 0ustar rootroot/* * JpegSegmentReaderTest.java * * Test class written by Drew Noakes. * * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 04-Nov-2002 00:54:00 using IntelliJ IDEA */ package com.drew.imaging.jpeg.test; import com.drew.imaging.jpeg.JpegProcessingException; import com.drew.imaging.jpeg.JpegSegmentReader; import com.drew.metadata.exif.ExifReader; import com.drew.metadata.iptc.IptcReader; import junit.framework.TestCase; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; /** * Contains JUnit tests for the JpegSegmentReader class. */ public class JpegSegmentReaderTest extends TestCase { public JpegSegmentReaderTest(String s) { super(s); } public void testIsJpegWithJpegFile() throws Exception { File jpeg = new File("src/com/drew/metadata/exif/test/withExif.jpg"); try { new JpegSegmentReader(jpeg); } catch (JpegProcessingException e) { fail("Error creating JpegSegmentReader"); } } public void testIsJpegWithNonJpegFile() throws Exception { File nonJpeg = new File("src/com/drew/metadata/test/AllTests.java"); try { new JpegSegmentReader(nonJpeg); fail("shouldn't be able to construct JpegSegmentReader with non-jpeg file"); } catch (JpegProcessingException e) { // expect exception } } public void testReadApp1Segment() throws Exception { File jpeg = new File("src/com/drew/metadata/exif/test/withExif.jpg"); JpegSegmentReader segmentReader = new JpegSegmentReader(jpeg); byte[] exifData = segmentReader.readSegment(JpegSegmentReader.SEGMENT_APP1); assertTrue("exif data too short", exifData.length > 4); assertEquals("Exif", new String(exifData, 0, 4)); } public void testReadDQTSegment() throws Exception { File jpeg = new File("src/com/drew/metadata/exif/test/withExif.jpg"); JpegSegmentReader segmentReader = new JpegSegmentReader(jpeg); byte[] quantizationTableData = segmentReader.readSegment(JpegSegmentReader.SEGMENT_DQT); assertTrue("shouldn't have zero length quantizationTableData", quantizationTableData.length > 0); assertTrue("quantizationTableData shouldn't start with 'Exif'", !"Exif".equals(new String(quantizationTableData, 0, 4))); } public void testReadJpegByteArray() throws Exception { File jpeg = new File("src/com/drew/metadata/exif/test/withExif.jpg"); byte[] fileContents = new byte[(int)jpeg.length()]; new FileInputStream(jpeg).read(fileContents); new JpegSegmentReader(fileContents).readSegment(JpegSegmentReader.SEGMENT_APP1); } public void testCreateWithInputStream() throws Exception { File jpeg = new File("src/com/drew/metadata/exif/test/withExif.jpg"); InputStream in = new FileInputStream(jpeg); JpegSegmentReader reader = null; try { reader = new JpegSegmentReader(in); } catch (JpegProcessingException e) { fail("Error constructing JpegSegmentReader using InputStream"); } // this will never happen, as fail() is guaranteed to throw an AssertionException if (reader==null) return; byte[] exifData = reader.readSegment(JpegSegmentReader.SEGMENT_APP1); assertEquals("Exif", new String(exifData, 0, 4)); } public void testReadSecondSegmentInstanace() throws Exception { File jpeg = new File("src/com/drew/imaging/jpeg/test/withExifAndIptc.jpg"); JpegSegmentReader reader = new JpegSegmentReader(jpeg); byte[] exifData0 = reader.readSegment(JpegSegmentReader.SEGMENT_APP1, 0); byte[] exifData1 = reader.readSegment(JpegSegmentReader.SEGMENT_APP1, 1); assertEquals("Exif", new String(exifData0, 0, 4)); assertEquals("http", new String(exifData1, 0, 4)); } public void testReadNonExistantSegmentInstance() throws Exception { File jpeg = new File("src/com/drew/imaging/jpeg/test/withExifAndIptc.jpg"); JpegSegmentReader reader = new JpegSegmentReader(jpeg); assertNull("third exif segment shouldn't exist", reader.readSegment(JpegSegmentReader.SEGMENT_APP1, 3)); } public void testGetSegmentCount() throws Exception { File jpeg = new File("src/com/drew/imaging/jpeg/test/withExifAndIptc.jpg"); JpegSegmentReader reader = new JpegSegmentReader(jpeg); assertEquals(2, reader.getSegmentCount(JpegSegmentReader.SEGMENT_APP1)); assertEquals(1, reader.getSegmentCount(JpegSegmentReader.SEGMENT_APP2)); assertEquals(0, reader.getSegmentCount(JpegSegmentReader.SEGMENT_APP3)); } public void testCreateWithFileAndReadMultipleSegments() throws Exception { File jpeg = new File("src/com/drew/imaging/jpeg/test/withExifAndIptc.jpg"); JpegSegmentReader reader = new JpegSegmentReader(jpeg); validateMultipleSegmentRead(reader); } public void testCreateWithInputStreamAndReadMultipleSegments() throws Exception { File jpeg = new File("src/com/drew/imaging/jpeg/test/withExifAndIptc.jpg"); InputStream in = new FileInputStream(jpeg); JpegSegmentReader reader = new JpegSegmentReader(in); validateMultipleSegmentRead(reader); } private void validateMultipleSegmentRead(JpegSegmentReader reader) throws JpegProcessingException { byte[] iptcData = reader.readSegment(JpegSegmentReader.SEGMENT_APPD); byte[] exifData = reader.readSegment(JpegSegmentReader.SEGMENT_APP1); assertTrue("exif data too short", exifData.length > 4); new ExifReader(exifData).extract(); new IptcReader(iptcData).extract(); assertEquals("Exif", new String(exifData, 0, 4)); } } libmetadata-extractor-java-2.3.1/src/com/drew/imaging/jpeg/test/withExifAndIptc.jpg0000644000000000000000000012707610716136374027020 0ustar rootrootJFIF,,dExifII*  (12 ; +[ix%CommunicationsFUJIFILMFinePixS1Pro,,Adobe Photoshop 7.02002:07:19 13:28:10Ian Brittonian Britton - FreeFoto.com"'0200     0100` @@d2002:07:13 15:58:282002:07:13 15:58:28L` dd  NbWz62dmd:WGS84(NHHJFIFHH Adobe_CMAdobed            U"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ? ֓;~)'`PH)5vհ k&M7mgfma;SpyCίm>unZƵ]k}Էf7-1xgfPl=*QUuVWw]a֨W)_'SU/5K5[:$Y#Y5!O4*۲|9x::χ5f~ihԤsEu<`cvl|~ov0$ysIqߚhu P\Zmi-pn?}ٳP}ݖ쥁e|6 z9_*^/GEm`A659iȣ=V}ZP,/~eO?o[|8N̹D@D7ڞ#h% -79dMʶ100iwu, 4S0l-ߺ6.G '0\ro`sA?;+vSbߍGCV욻Nt45KF5;V_QfT x 0Xi߲Y7Z}FHO{-nq\<PX6`5?i;wgk:FM&LSh.[ߴsٳn*~]w1+c1lߢoWF`JaJ)eYqՕcˁs9ߥc,Ŧcok$Z d/?Foڻՠz&=xQvVo\ߟgWdK_`-3XwmwPIJQlP.>m}OFS_p"~{kۃw5ETHWG}B=2{Fݣvs6ޟU4utAS`|J굎wՂsDD7:SJe LѢ):&V;Gs jC{Zo?EV ~Ӊ4 `vv 츳esk=Rksյ[s/[Sksa=?ؕy^=ci7׳Kll7vֳON|_]Zmַ55] +(z;^Ż6nkk'ꈪa>nOf;j^wA7{ֶemd;tIhﴆoآܪ3W4IovAޘdQ=s]Ei[_]4:7u-eLHGc~dAiX?k[ۑV5iH!{~kmb'K`\ \omgFً[M-yƵ%~b+GReW21 ^E1+}kIHTю{ɓR,ҤHI:JpCr*qZdз863}];YԲsv׋uzMUK2-u{Eoc۠p3cIҭoӛ[L'mMl\.488K{nM?3" ܛ2to:} |m#6=g5[81ɱ>Ͷh}Sw{jB_dv^6m!ލb?1kӈCcKn힕ߦjobczfCbܨ{:X>8[]!ؗY a@#PV.6R\ӵho{w~bVkǽ,55as}9E$MUd,4rrXln :ʬ۹̬OQ\G-f,oRT{, Z-#=Ssh#$ā3B^(i=GYx׽7p+BŢ-Tٰ%čxFCʒ1:wY(orHK׹5AyYOgڿ kp{ ns*c+m_~ۗ&N뢧lI{1]uf?}:Dkn7Z^=w.߻H/kA?(Tt7WkuXzmߧg-Nmư u#_)q;1CUXF<ȴ+Tm -ia-KSAnN%Ըp[RU bW8tnʺ[}6m}K]"=wTv {{s13P~2YUJr,ǵVvOOܪFTu cQ EW o)4^YchNV!-z0JU@$'迶 obDK%/hGǂ$O FTXlc_nWgoUc O0?Vޫs ͛$#c}mt76z_m#+~FٷFm>IX0˯ K1 Iѯ19yINq.lonWO{;h=; T_AW\Jpm[wq]'>\=_[%k,>R-FPhotoshop 3.08BIMxCommunicationsz Ian BrittoniCommunicationsP Ian BrittonU Photographern Ian Brittons FreeFoto.comCommunications720020620Z _ eUbited KingdomBUSCommunications 5Communicationstian Britton - FreeFoto.com8BIM%Dm`˱?BD 68BIM,,8BIM&?8BIM 8BIM8BIM 8BIM 8BIM www.freefoto.com8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM8BIMK@ ` 04_02_10_a5 `@nullboundsObjcRct1Top longLeftlongBtomlong@Rghtlong `slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlong@Rghtlong `urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM8BIM jUNJFIFHH Adobe_CMAdobed            U"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ? ֓;~)'`PH)5vհ k&M7mgfma;SpyCίm>unZƵ]k}Էf7-1xgfPl=*QUuVWw]a֨W)_'SU/5K5[:$Y#Y5!O4*۲|9x::χ5f~ihԤsEu<`cvl|~ov0$ysIqߚhu P\Zmi-pn?}ٳP}ݖ쥁e|6 z9_*^/GEm`A659iȣ=V}ZP,/~eO?o[|8N̹D@D7ڞ#h% -79dMʶ100iwu, 4S0l-ߺ6.G '0\ro`sA?;+vSbߍGCV욻Nt45KF5;V_QfT x 0Xi߲Y7Z}FHO{-nq\<PX6`5?i;wgk:FM&LSh.[ߴsٳn*~]w1+c1lߢoWF`JaJ)eYqՕcˁs9ߥc,Ŧcok$Z d/?Foڻՠz&=xQvVo\ߟgWdK_`-3XwmwPIJQlP.>m}OFS_p"~{kۃw5ETHWG}B=2{Fݣvs6ޟU4utAS`|J굎wՂsDD7:SJe LѢ):&V;Gs jC{Zo?EV ~Ӊ4 `vv 츳esk=Rksյ[s/[Sksa=?ؕy^=ci7׳Kll7vֳON|_]Zmַ55] +(z;^Ż6nkk'ꈪa>nOf;j^wA7{ֶemd;tIhﴆoآܪ3W4IovAޘdQ=s]Ei[_]4:7u-eLHGc~dAiX?k[ۑV5iH!{~kmb'K`\ \omgFً[M-yƵ%~b+GReW21 ^E1+}kIHTю{ɓR,ҤHI:JpCr*qZdз863}];YԲsv׋uzMUK2-u{Eoc۠p3cIҭoӛ[L'mMl\.488K{nM?3" ܛ2to:} |m#6=g5[81ɱ>Ͷh}Sw{jB_dv^6m!ލb?1kӈCcKn힕ߦjobczfCbܨ{:X>8[]!ؗY a@#PV.6R\ӵho{w~bVkǽ,55as}9E$MUd,4rrXln :ʬ۹̬OQ\G-f,oRT{, Z-#=Ssh#$ā3B^(i=GYx׽7p+BŢ-Tٰ%čxFCʒ1:wY(orHK׹5AyYOgڿ kp{ ns*c+m_~ۗ&N뢧lI{1]uf?}:Dkn7Z^=w.߻H/kA?(Tt7WkuXzmߧg-Nmư u#_)q;1CUXF<ȴ+Tm -ia-KSAnN%Ըp[RU bW8tnʺ[}6m}K]"=wTv {{s13P~2YUJr,ǵVvOOܪFTu cQ EW o)4^YchNV!-z0JU@$'迶 obDK%/hGǂ$O FTXlc_nWgoUc O0?Vޫs ͛$#c}mt76z_m#+~FٷFm>IX0˯ K1 Iѯ19yINq.lonWO{;h=; T_AW\Jpm[wq]'>\=_[%k,>R-8BIM!UAdobe PhotoshopAdobe Photoshop 7.08BIM http://ns.adobe.com/xap/1.0/ Ian Britton Communications Photographer Ian Britton FreeFoto.com Ubited Kingdom BUS 2002-06-20 5 Communications Photographer adobe:docid:photoshop:84d4dba8-9b11-11d6-895d-c4d063a70fb0 www.freefoto.com True Communications Ian Britton Communications ian Britton - FreeFoto.com Communications XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmAdobed@C    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X"L "2!1#ABQRbr3aq$Cs%4D5Sc&t(!"12AB#R3aQq ?M$׮i&!$ЀHB!$ in\UUhڙyΑr[5xs"֣]psG\*&t `%d1Z=V}'UT9 85Mݟ7~xւEH;rc볝VYQq8n@X ~ÓM 7KmLdodY,Z/L-ٻ_Kڏ}] ّVi`ժDz3jt4` 2fٽ |ˊkm$YO1μ\=VP#1IwvbsEO5#*XzVfm)+lMQHI -:MpH2Fd)EJAX,NZX/:cGr;R4T q2mԢ-1tY}KCkouzLEڣXeǟU*(gt*ch;N;m߿RI7t1xAQvN;vYoFVjzQ%+nHh5Kk"-:Z&}@%.q|S K l `K2ם [$lsCՕVopF|Z՛E^I*G&6ۿbܵHk)1pskχh&ePQ55Npy$TdAmfm[kijz8}Ѻ6N')ZNtJt&)h]qW4+Jm\bk,=.ĵ1`I0$f\&4۱R i=rrbm#/F&^VRg6f(q}!*ˁlzSf m꾢6 *slH%QFfEWʢcVv/W]@g?b]u*yQ/sYuf&RdPĐh(bmH*Γw \~,A4\9&z9l䵣z$2FhҤdô! BA;dII HI0i$.PIM$0!  !$B@$!4Ϩ׆U~'V.LELȦzwesC|{;:n)9Ǚ#}&r.6xg\^y06jC39p6^ qcфGZ-|^dBS F]l;k& H5#,ɬ,!ǯWY dA OJl򇙢mW4۹h͊+N>.𸐳^I \:'Y9#˘&EFZH6ZrHY^])!Ȥ|b⭪PmɊoyɏ*N! &o8}|sqWԤ@"bgحKDX f&w<9xoRFO$ &ayﮓ {ꖝOOa#p""~C{ɡbL# $0zb=gm6}T/paS?%rPҝv* VԤ 8{M1ve]]j,۴-4 Q24=(B@Вh7BEFٸd>h qW6Tr1Np2KQȉhH(+ Nr ȘkϯJFaɄTEI%r*GX+%R6݇E&G=ECkU:5W2n,8ų$#zc.Y bxɳ"|3#鵣+)l%,ISRGs9lT Շߗ_zӿVi9qYx1ws ֤+[,AO G-!s*Y<{C줚Oc/OA+QŧYfqOے+L*^P#y 2qXmy.V"6܋"U$ъӒNy#7*4{dЧ%qMʼΓsȸXMBvmys?Y3kBk7NcӤ3 La;Hw\'k :BH@ !$%[]#rKZdB$-q-M$BiM@$!BBA B 9CNIIJbǘcdo ޟ«Lr%s.mwY}+peR|X׷`8IJ@#RkTk6T\fؿʪFYdd.Vd ֏-ez~Q!з rG`^/M|ͩW;cgL3b$ݼދ4<̎ωv\9H}Pnԣ3u] ^C<:Q)']{#b-da [rZ1pVxOZ)=q <^k}tru.C#ܸ(_."gq,Iinڳ6jSN"ݨ_ yo7KYfxvwo֚( ɹBh@$ !$l3+/S֗Kw:KBH<8gҬ WDH9yy ٱG-X/"f191CFgLoc lf<(ʻDsEta٩׏!iPn?ȉ'-NC4=j*"#6~t9V'8ߎImS [Coջb|4kw[$e'Jq9J`WSDǶ͒9aւjB'Dı]3׋I0$M.Q;h /X}*bұK1ud71|D,mB.YƶV.K|_Yz8#ib'K_ cgg>L@]֢2utglHv\u/EDWwgoVEpAb`LpF $4(0 t.ֈn4iKtnuB4.P!#B&BhHI!@ &$)9 U4p$<ŋӓ1Ie~Up 3]TN1Ya~Uv56)e '<)W75vH.MY1Xh`-u2VCBI&iSIBDЂgkK>†"V}diԯJCb9o*@9%5"joXCr-DOG_((YTcy[' 9;F~t}(t ]oMNP9>߯ҭh,ЭfH&,F1UԖ86vlC‹4h1*8dr9޴TE қDq`Z3IqrͲQtCo[,Dus.FE8$B 0@8-uFDKvvשlK( V/w61,ےNc kldu!O=P:^FDQ޹0eKC6ޅ׏R%fxSdXt/1B=E$K;FEӗX%+ ͌;Y7BC[8/R|*χVb1@t"$l%H B$"9TMΗ^q^B/xxK5⏨*J)º0wtnBKu{$&nFnI!2 ! & 4!``$Bi )֒ݘ>k",)'f}wQ˗͘N1"Bb}$V>8bq $U%x+xxSqT,֨>+ʩv\[BZ2bOV(dHtSNn,&E ޭXUɏcI>UZᨑґ+oP;?c:K~P"+ƮXY]ߣUj1*"UӵMahbb-`ˊ{V^-hjUNHєssU/UO1s-;,mX"a(ɋ%hbjf>v(0.e9 EV>*V?S-7ZCy "?C_G:CiF2gٝ,'a+i/zT8robT^{2XeA<̾T6p|L8ح(5 Z|Jg[= kp݇ *[7^Z=IZ'{ukg rh$V`˸aoKInU*<,kSZLrx"K> %˩koQT< g0a2U]w-4qaw} !X*iN.֬Ze ٦f|L&hk ZYci3`%iRXx%'1}1tg E7\HE(2.44kJsK%MbPU-m#bc,mjPf#WRCm $3 Dߤ{McQk#dJ>k ά;^ѿέدJ)GvEw]Ömܫi/pnf\rGOrT Fy+m-7Ph$QS7r9x2j6!}PR BUN)ܙ7fk,GT*EƄ!Q!!@ &$(倩kXN)vs=ׯ x |Ԛrd&e\½|1r//({,px3AIGIza(1unҖԯ0pl1p9 % $ЏZgiǢ\\ObLxZbXƗ.yRIkY\rJ,UMP7__.Yxd /IJ+QYBZt/Zy>-?^M^tղ+lL1kb5?X.ΥN-J6'debWlx?XVd5c/:KKNT[nſ~Q*l6 zL!;ҷPf 7fBuyCWۅ+|.7h gzÏI-僡ÿb?uxO BUL!L!& BB :M$BHBB H)F݃å뚜,m9r.oWkjp[2DK:sZէ,f61qga_"^<= Lr/X=qbŗeKڧgX)y VӯIʫ}'.Xe4u|XKF+cB%#v8xb$lM[uy[n26{+^)He',vfǻ} A SrNO?Wpz+ѓ4QdNk\v{Q,%C"mSuѩ,QMB9 "6vU<ǐxS'W#,yr6C'I7!)V52ٖ8#E [s ,Y>pF&1b{?[3,oޤV .ieJB0!aqfݷoq[Z9 ? p~lvs߹sj]rWlyGg pXX-w=4WA֘K7FHIf[j[GyZq8 }1~ z})=B)ïTZ6 ժnJ)7}YK)#/|UՊ:v<q~ojX P JgjUֺkUIkWح- !4h@$Є9?wH*wfSLVFG0-GpyJOs^[ZL g8YIfw'QјÆC̭P%Tchub`._G{W,{RmǕÇ"k`})8mbupjR?ix~3qXkbN"fN}F]KwKZ\o2$[oBH/]WvP9W$.5c&'oWi7ybݼ}XɭZ?Tw0D&+SA]Xm*[5K(ҷU##r&v+Njlsٱ {t*kU!aXE Lā߿SO7 4'Պ Gi]k!rؚGvw0]KgSB!@BHM !I5I4$ BR@؏QȒn_7;CbXwINXTLBY<1hܐBI[yg 1%ْa/ͯr/QaOs-"-BVP^x]P4H-|"2ɘ/ `p$ᱣNC G[nKX$2q0MR ܨjm(Uܻ>OrcOf фL[v.|yE\U~8C*ڱJoFH^V~m }B0YL[ʼnrcK0<>ln1cM'n!5kZN`iUvXNJ sl´y歪E aypoH`pc=,y}?\_8ۻ)mV;NB919;+%$=VMa;j%i jVGUd!6]qyA!\̴QiK QH@z~V̝gzؒ^QJsC p|F_zT& hB u|EURgB=Gе#ly)m'˸˗.&K^kYޫ%4 kV`/S7{-fбƬv"+xeLUVҋ?MGCdBL{zEgjz+XZ?QHiٱ;`\&f}dž\_K&Q.2~Cr ,.X1E]鰶/g-ы $Ъ! BBBi&HM,BBIM n[ B3p⏄n37Wb!"Y::W`2t.՝՞zxrකQdvK,P&P)rTfPm `F5l(5:JWCJ^E f4ٲzІؓLVj~].vʹ{U1hUl?7ҳ" vo %H :eM ͬ# FObm6Y=Esj3XcȿhN]XTRODԯTV ?~\>2?HͻnxbK`m8yde9eVImX@MbZ\U˳ֳj?3{GϒwfЈB3 Y%2q hHh'{epqlUđEG `:t\ I !!@B~?-v\"RQւz*V"{tPbӵ&g6Lk-9mV|.x)2XYV3W$nQm? VܮEi1ua_[1FVUZzH wl/WU8p{Ҕomq=1buٛ F]iu=/:fc6MԜn~R +z :"VEs//]hiYw㿋uQJA!j\MVnt9V8RgUV7 ]%:٩h-Ø!]ѵYݦwo䳭ai {C\UZ&gC\+.QBgzl-75-UՋ Ba$ЀHM$!!L! !04!`!4& I!@ ځj.aZBV#yfhxHbA+Ama W—!USZy]N lAK!H8 $e0Cpx2sG+y'Eqw} OgRj7Yj|(K72 D#>`} )tQW+ԧ](! ;Ax)3s(ej_+2FF\fy- KIf;-}ݷ[vwud;Q^5"B<ϯRIfs &8%_j ƥyW]'>QujC->>)tLTCapQjxlުCl}D%;z: y^[$㜅 ?IXdo C^DR\[SrrO^1E+лjtn~,@;:EroOĽ*zُ ENndXgjHgeꃾqDTX 9Uu2Xw&(}~N>+Z'E:]X}=f!0MЀHBI!L;BhB !@I4Bi &=H$"C5T4ϕY)=*?X9V&*q(ِIҎLJjxa3j,SB$QDv"RSf:bc۫Fv)jxQ}l<#*) 3X>ܭhݠۿQ7j-<ߏos7 ꞑb'l҂HHdQKawߊp%KnlŤfQH-M7&=v9F0߉0 ZZC(pЪ$jU~`½MZT%>a-D1HKyjղAcuEk0m؀B8E3&Ρ Wb3+;6؏VHi;RfHlz$@bY_z/N/'1N׳sC/i0&1z7_z.9}g/1R(lNyǺ?ޝRm%Jg|*C,N[},) LB[+0hF9 $$4 L5zR|Vn,\C/柩VM}Ft$^XMKUwFTU33&}gfJjڒJYcqZU[m/bg}g_Ďڱfw9$XC+dbzh .e?#),r/Y:g֨LO(-ZfyU_/>M d%rX_'nz6kdp]6ӝ"W)=դ BN].Ú- !4 !!L;M$BM@ )è R'ݶ>Ŵugr jbBUgU͟"ݶ|cogRdhLO=n7sɾSOMaZ\7D@1^dg˶M>T? kDZ4.T|n#/q=\WY|/KUu^݊8SHUYn;huzn,R G}E\KcKTrvj=*h+ֵ@ӨChc MܙZ0ޙsDabߕ^06]2,K>ű~ܫI,fHrr+Hu E wÛ'P?rG^!RIDxhLƇH+1 ~qIbxik׈\vT-k1|PieG)oM7HR+c`,5Vf=7CpN'.8gʊ́H8޲Aνbi/IYf1Pي1Īד} e;e3cw(rkUU&|}(7잋K1;D;K r{9(n Tb:mluSJSs\˅XJMBdHqMqOdЀ hBj.>-ε">$y.RHtUefj{- *hcg~g֍Շ r>Y^%꠆H{ChB!٘Cok:0GښW~Qn 㗢A5]EUinюd{[;]vo52V'kcJRKS-6ALQndZ{T}bLUxg\;o.L6ъV M_rݛB3G%3iK |vz(ugU@kVbKh)^zS>'DcEW9-9rq _3vS̳=)&3AX˙S8*:p5iʯ`R"xQxDFd$ihRƴKgy/UK+ѣ&TjQ'~YgvfOh,\4 C3*-]z]G'wmZ$R֝<QLbf8#)d.U&mNv$jVTgZm8_r7V5*0#4unﴽ R_*6BlY(3UՊNR};oSp8fooLU?_/§#[os;kW$ݻn֞{c,)??*=jI-ikH\ܾ-*:I&*wq뒯kyDj9˓R?M߼iBuVN>e _+$%RYzϤu+,TP8]*.ndsu"#ʍ/Qjل&G/HJ /ح[n/ɯ*ڒH͢ `r?y-:[13q!YiN츁yk^RC,Ժ-+UjWch$,m#3zHFš`t !¡2ndR!BB@$!BBJ/*Enyqҽ~adft&(N6"iNElޮo} 0gOfB30 3;Cy9en_88X߿>ek֔Nr7)֗ow,k|H)KÈ~"ʦx@>@V 3nk;=6kq!G6nbU>K !/*"/ 4Jq3z8}cFM2C"\mvJ.Rf].M XCSQyQgD\ђT H2. IeL˿8Ϊ drC! !!L! !04X4A!@tbxrkVNILenX2K'м >۶q~TzpOrmsFK[S/%ˢ,E>" { mgdIA34B*]/IMgȮhg|b3Q/AX, g%~WYvVeJ61 $KiڶYDل} N%kmkRӊyL',Gh7[zwc eF!S=Hx.>E-5*wKJdnڞ}?2O$r03.h1ڻ=bnXsvv/4֥9mJ&lDc#{z[سOjY$N_UڽfrX}b+AC@6X=ou-?^-TyۋO#UFSq8q` W(IN6y8E/yy?WH (Dž'S &CsSZc3` 6)ߙeINI lB!@BR6DlB*sq⟾]l0L˵îp)M'~pUe%['䌲ABLaB`!@Bi & I4 ͣslc;.ȯbg@81U)U3]3I4&Ih jEcx.e+i X[ypmc˃?* ɞmԾ{W !iy1 *E<5s. DݮU'0 d>h4(e12rj+ȦPe!rAwcb]X!Ta̙pKO;y@JB1!.B'Ւ0S$<tyR{SXҳК @5Vfݢy7zqiC\0y\/xezYʫEemIWb6~YKCo655 f a9Ϳzvm;['z˞KW[e a&YŌbg-XڅBĕ..u%B ʩ:f]T] hFEdo+1s*`XdHBi+ !4Bi &hBk !B!41^gS%5V3EzuG\8*JVccy)BL|2[D}!|Z'wF +W ͗Z}b9E_)(_I kHǫ;}xiN7^W+DmnA]KVKARODEք:.)f3JJIe-[rgnbzAyVK~}rֱFܕ,]wӑ$ykz^ڏPÞ&X1ى-.DqNHz=:*q%[t'~~Bt6/SN1yfnon߭O^KV0/=vY2A6g}Hd{؛;sXH^=d )LǙdӼbcYiKUH&h]EfIq^9)vxi GjÌ1f/>7M g0>{sC~9 ^ī݆6BK.w¼~V6'ٙK|1(o%RT1]g* e,9bΗd1uB`@3#xwIM)m{%.@$Є!)PN?O[z7⼟dU22#^W6lSyi^H%yW](wh\N9[va_k6#n`?MsKhKO:ɂ-y_7ư^cZ#½Tr ͳu$pB\MbY"MJJD&~&J54dz(#eяV/:Eʭiu;QIҫ[;RJ#/YIyRCVaowc K͉9H'W(&IB!BBBhX;MFw\/k gd*Ulä! D !BBM$!!@q+ei-006sºVփ+GGֹ"*AlXL\9Qk۸j7fa/zf'kl.^ROһ{UV%Դȸ<," 8c,;י-5݈&!%w9>qb̽N7MC\Ab6) ' XS ߙrbUyes\~N_J̵ ->Q7'7z>!5 w&nMӋ/V,qћ; uPf.Ŕ1o裯Fr !VryQ5%v`=! F2qM/—qΏ/kPpDf,Vgb/,\A+YAw7sfR?7Є.(B !BV*$*{KVjYOرaİMjsKFx7u\|g2`fԅu;kVndHEj^"ju.JZ}x<@wn '*2?8fA>=6VttQfs_Yڽ(,ڍ.W:6cL"|m?- usl/ydmkP#e*\?'0q.c鏭"]$F\B%4Dwv'nky1EŚ7Ra@-*Z=I?վ i$_VFGEFvvH=hnj_F[I1يЈB &Bi B ! Y[ڡ&PK}UQKɉzkkp-/7cM|KW,f`﮼yvɋi4$Bh!!@ &B nA&%ꪊeK'T^M> rt׵HTL|6 %ȳ( Ǿn>N3ѺjH$)GlH&!0WfkkШC4ﷵaՆlܜYy<\bk׎,R7YӾUd0i,4`R;|FQIx fU;Xi`3,:7hy%~oOzYwz?\ xrJ3֩TBP={]v_aFv9𑸕ٕ$h :/$ޏV9tG3V&;۴:eM -zwQY y+/ t8hW昺)cMFTGYKmcԮuJ%!U0@B&%VܱE)fovVNش4 W;Z՞ɵh &/y_oZ2,C/xT;63[l>YKt8ݙ>:7%8^ PCv Zr>^rVYy:TkaO(ilYQH>ܒ(sss/Sj(Y%7BELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmxsq~sq~w uq~ DPhotoshop 3.08BIMxCommunicationsz Ian BrittoniCommunicationsP Ian BrittonU Photographern Ian Brittons FreeFoto.comCommunications720020620Z _ eUbited KingdomBUSCommunications 5Communicationstian Britton - FreeFoto.com8BIM%Dm`˱?BD 68BIM,,8BIM&?8BIM 8BIM8BIM 8BIM 8BIM www.freefoto.com8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM8BIMK@ ` 04_02_10_a5 `@nullboundsObjcRct1Top longLeftlongBtomlong@Rghtlong `slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlong@Rghtlong `urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM8BIM jUNJFIFHH Adobe_CMAdobed            U"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ? ֓;~)'`PH)5vհ k&M7mgfma;SpyCίm>unZƵ]k}Էf7-1xgfPl=*QUuVWw]a֨W)_'SU/5K5[:$Y#Y5!O4*۲|9x::χ5f~ihԤsEu<`cvl|~ov0$ysIqߚhu P\Zmi-pn?}ٳP}ݖ쥁e|6 z9_*^/GEm`A659iȣ=V}ZP,/~eO?o[|8N̹D@D7ڞ#h% -79dMʶ100iwu, 4S0l-ߺ6.G '0\ro`sA?;+vSbߍGCV욻Nt45KF5;V_QfT x 0Xi߲Y7Z}FHO{-nq\<PX6`5?i;wgk:FM&LSh.[ߴsٳn*~]w1+c1lߢoWF`JaJ)eYqՕcˁs9ߥc,Ŧcok$Z d/?Foڻՠz&=xQvVo\ߟgWdK_`-3XwmwPIJQlP.>m}OFS_p"~{kۃw5ETHWG}B=2{Fݣvs6ޟU4utAS`|J굎wՂsDD7:SJe LѢ):&V;Gs jC{Zo?EV ~Ӊ4 `vv 츳esk=Rksյ[s/[Sksa=?ؕy^=ci7׳Kll7vֳON|_]Zmַ55] +(z;^Ż6nkk'ꈪa>nOf;j^wA7{ֶemd;tIhﴆoآܪ3W4IovAޘdQ=s]Ei[_]4:7u-eLHGc~dAiX?k[ۑV5iH!{~kmb'K`\ \omgFً[M-yƵ%~b+GReW21 ^E1+}kIHTю{ɓR,ҤHI:JpCr*qZdз863}];YԲsv׋uzMUK2-u{Eoc۠p3cIҭoӛ[L'mMl\.488K{nM?3" ܛ2to:} |m#6=g5[81ɱ>Ͷh}Sw{jB_dv^6m!ލb?1kӈCcKn힕ߦjobczfCbܨ{:X>8[]!ؗY a@#PV.6R\ӵho{w~bVkǽ,55as}9E$MUd,4rrXln :ʬ۹̬OQ\G-f,oRT{, Z-#=Ssh#$ā3B^(i=GYx׽7p+BŢ-Tٰ%čxFCʒ1:wY(orHK׹5AyYOgڿ kp{ ns*c+m_~ۗ&N뢧lI{1]uf?}:Dkn7Z^=w.߻H/kA?(Tt7WkuXzmߧg-Nmư u#_)q;1CUXF<ȴ+Tm -ia-KSAnN%Ըp[RU bW8tnʺ[}6m}K]"=wTv {{s13P~2YUJr,ǵVvOOܪFTu cQ EW o)4^YchNV!-z0JU@$'迶 obDK%/hGǂ$O FTXlc_nWgoUc O0?Vޫs ͛$#c}mt76z_m#+~FٷFm>IX0˯ K1 Iѯ19yINq.lonWO{;h=; T_AW\Jpm[wq]'>\=_[%k,>R-8BIM!UAdobe PhotoshopAdobe Photoshop 7.08BIMxsq~sq~w uq~ bExifII*  (12 ; +[ix%CommunicationsFUJIFILMFinePixS1Pro,,Adobe Photoshop 7.02002:07:19 13:28:10Ian Brittonian Britton - FreeFoto.com"'0200     0100` @@d2002:07:13 15:58:282002:07:13 15:58:28L` dd  NbWz62dmd:WGS84(NHHJFIFHH Adobe_CMAdobed            U"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ? ֓;~)'`PH)5vհ k&M7mgfma;SpyCίm>unZƵ]k}Էf7-1xgfPl=*QUuVWw]a֨W)_'SU/5K5[:$Y#Y5!O4*۲|9x::χ5f~ihԤsEu<`cvl|~ov0$ysIqߚhu P\Zmi-pn?}ٳP}ݖ쥁e|6 z9_*^/GEm`A659iȣ=V}ZP,/~eO?o[|8N̹D@D7ڞ#h% -79dMʶ100iwu, 4S0l-ߺ6.G '0\ro`sA?;+vSbߍGCV욻Nt45KF5;V_QfT x 0Xi߲Y7Z}FHO{-nq\<PX6`5?i;wgk:FM&LSh.[ߴsٳn*~]w1+c1lߢoWF`JaJ)eYqՕcˁs9ߥc,Ŧcok$Z d/?Foڻՠz&=xQvVo\ߟgWdK_`-3XwmwPIJQlP.>m}OFS_p"~{kۃw5ETHWG}B=2{Fݣvs6ޟU4utAS`|J굎wՂsDD7:SJe LѢ):&V;Gs jC{Zo?EV ~Ӊ4 `vv 츳esk=Rksյ[s/[Sksa=?ؕy^=ci7׳Kll7vֳON|_]Zmַ55] +(z;^Ż6nkk'ꈪa>nOf;j^wA7{ֶemd;tIhﴆoآܪ3W4IovAޘdQ=s]Ei[_]4:7u-eLHGc~dAiX?k[ۑV5iH!{~kmb'K`\ \omgFً[M-yƵ%~b+GReW21 ^E1+}kIHTю{ɓR,ҤHI:JpCr*qZdз863}];YԲsv׋uzMUK2-u{Eoc۠p3cIҭoӛ[L'mMl\.488K{nM?3" ܛ2to:} |m#6=g5[81ɱ>Ͷh}Sw{jB_dv^6m!ލb?1kӈCcKn힕ߦjobczfCbܨ{:X>8[]!ؗY a@#PV.6R\ӵho{w~bVkǽ,55as}9E$MUd,4rrXln :ʬ۹̬OQ\G-f,oRT{, Z-#=Ssh#$ā3B^(i=GYx׽7p+BŢ-Tٰ%čxFCʒ1:wY(orHK׹5AyYOgڿ kp{ ns*c+m_~ۗ&N뢧lI{1]uf?}:Dkn7Z^=w.߻H/kA?(Tt7WkuXzmߧg-Nmư u#_)q;1CUXF<ȴ+Tm -ia-KSAnN%Ըp[RU bW8tnʺ[}6m}K]"=wTv {{s13P~2YUJr,ǵVvOOܪFTu cQ EW o)4^YchNV!-z0JU@$'迶 obDK%/hGǂ$O FTXlc_nWgoUc O0?Vޫs ͛$#c}mt76z_m#+~FٷFm>IX0˯ K1 Iѯ19yINq.lonWO{;h=; T_AW\Jpm[wq]'>\=_[%k,>R-uq~  http://ns.adobe.com/xap/1.0/ Ian Britton Communications Photographer Ian Britton FreeFoto.com Ubited Kingdom BUS 2002-06-20 5 Communications Photographer adobe:docid:photoshop:84d4dba8-9b11-11d6-895d-c4d063a70fb0 www.freefoto.com True Communications Ian Britton Communications ian Britton - FreeFoto.com Communications xsq~sq~w uq~ Adobed@xsq~sq~w uq~ JFIF,,xxlibmetadata-extractor-java-2.3.1/src/com/drew/imaging/PhotographicConversions.java0000644000000000000000000000336110716136374027071 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.imaging; /** * Contains helper methods that perform photographic conversions. */ public class PhotographicConversions { public final static double ROOT_TWO = Math.sqrt(2); private PhotographicConversions() {} /** * Converts an aperture value to its corresponding F-stop number. * @param aperture the aperture value to convert * @return the F-stop number of the specified aperture */ public static double apertureToFStop(double aperture) { double fStop = Math.pow(ROOT_TWO, aperture); return fStop; // Puzzle?! // jhead uses a different calculation as far as i can tell... this confuses me... // fStop = (float)Math.exp(aperture * Math.log(2) * 0.5)); } /** * Converts a shutter speed to an exposure time. * @param shutterSpeed the shutter speed to convert * @return the exposure time of the specified shutter speed */ public static double shutterSpeedToExposureTime(double shutterSpeed) { return (float)(1 / Math.exp(shutterSpeed * Math.log(2))); } } libmetadata-extractor-java-2.3.1/src/com/drew/lang/0000755000000000000000000000000010716136374020651 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/lang/CompoundException.java0000644000000000000000000000503010716136374025155 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.lang; import java.io.PrintStream; import java.io.PrintWriter; /** * Represents a compound exception, as modelled in JDK 1.4, but * unavailable in previous versions. This class allows support * of these previous JDK versions. */ public class CompoundException extends Exception { private final Throwable _innnerException; public CompoundException(String msg) { this(msg, null); } public CompoundException(Throwable exception) { this(null, exception); } public CompoundException(String msg, Throwable innerException) { super(msg); _innnerException = innerException; } public Throwable getInnerException() { return _innnerException; } public String toString() { StringBuffer sbuffer = new StringBuffer(); sbuffer.append(super.toString()); if (_innnerException != null) { sbuffer.append("\n"); sbuffer.append("--- inner exception ---"); sbuffer.append("\n"); sbuffer.append(_innnerException.toString()); } return sbuffer.toString(); } public void printStackTrace(PrintStream s) { super.printStackTrace(s); if (_innnerException != null) { s.println("--- inner exception ---"); _innnerException.printStackTrace(s); } } public void printStackTrace(PrintWriter s) { super.printStackTrace(s); if (_innnerException != null) { s.println("--- inner exception ---"); _innnerException.printStackTrace(s); } } public void printStackTrace() { super.printStackTrace(); if (_innnerException != null) { System.err.println("--- inner exception ---"); _innnerException.printStackTrace(); } } } libmetadata-extractor-java-2.3.1/src/com/drew/lang/NullOutputStream.java0000644000000000000000000000175410716136374025032 0ustar rootroot/** * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on Dec 15, 2002 3:30:59 PM using IntelliJ IDEA. */ package com.drew.lang; import java.io.IOException; import java.io.OutputStream; public class NullOutputStream extends OutputStream { public NullOutputStream() { super(); } public void write(int b) throws IOException { // do nothing } } libmetadata-extractor-java-2.3.1/src/com/drew/lang/Rational.java0000644000000000000000000002366410716136374023300 0ustar rootroot/* * Rational.java * * This class is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. Similarly, I release this Java version under the * same license, though I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew.noakes@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created on 6 May 2002, 18:06 * Updated 26 Aug 2002 by Drew * - Added toSimpleString() method, which returns a simplified and hopefully more * readable version of the Rational. i.e. 2/10 -> 1/5, and 10/2 -> 5 * Modified 29 Oct 2002 (v1.2) * - Improved toSimpleString() to factor more complex rational numbers into * a simpler form * i.e. * 10/15 -> 2/3 * - toSimpleString() now accepts a boolean flag, 'allowDecimals' which will * display the rational number in decimal form if it fits within 5 digits * i.e. * 3/4 -> 0.75 when allowDecimal == true */ package com.drew.lang; import java.io.Serializable; /** * Immutable class for holding a rational number without loss of precision. Provides * a familiar representation via toString() in form numerator/denominator. *

* @author Drew Noakes http://drewnoakes.com */ public class Rational extends java.lang.Number implements Serializable { /** * Holds the numerator. */ private final int numerator; /** * Holds the denominator. */ private final int denominator; private int maxSimplificationCalculations = 1000; /** * Creates a new instance of Rational. Rational objects are immutable, so * once you've set your numerator and denominator values here, you're stuck * with them! */ public Rational(int numerator, int denominator) { this.numerator = numerator; this.denominator = denominator; } /** * Returns the value of the specified number as a double. * This may involve rounding. * * @return the numeric value represented by this object after conversion * to type double. */ public double doubleValue() { return (double)numerator / (double)denominator; } /** * Returns the value of the specified number as a float. * This may involve rounding. * * @return the numeric value represented by this object after conversion * to type float. */ public float floatValue() { return (float)numerator / (float)denominator; } /** * Returns the value of the specified number as a byte. * This may involve rounding or truncation. This implementation simply * casts the result of doubleValue() to byte. * * @return the numeric value represented by this object after conversion * to type byte. */ public final byte byteValue() { return (byte)doubleValue(); } /** * Returns the value of the specified number as an int. * This may involve rounding or truncation. This implementation simply * casts the result of doubleValue() to int. * * @return the numeric value represented by this object after conversion * to type int. */ public final int intValue() { return (int)doubleValue(); } /** * Returns the value of the specified number as a long. * This may involve rounding or truncation. This implementation simply * casts the result of doubleValue() to long. * * @return the numeric value represented by this object after conversion * to type long. */ public final long longValue() { return (long)doubleValue(); } /** * Returns the value of the specified number as a short. * This may involve rounding or truncation. This implementation simply * casts the result of doubleValue() to short. * * @return the numeric value represented by this object after conversion * to type short. */ public final short shortValue() { return (short)doubleValue(); } /** * Returns the denominator. */ public final int getDenominator() { return this.denominator; } /** * Returns the numerator. */ public final int getNumerator() { return this.numerator; } /** * Returns the reciprocal value of this obejct as a new Rational. * @return the reciprocal in a new object */ public Rational getReciprocal() { return new Rational(this.denominator, this.numerator); } /** * Checks if this rational number is an Integer, either positive or negative. */ public boolean isInteger() { if (denominator == 1 || (denominator != 0 && (numerator % denominator == 0)) || (denominator == 0 && numerator == 0) ) { return true; } else { return false; } } /** * Returns a string representation of the object of form numerator/denominator. * @return a string representation of the object. */ public String toString() { return numerator + "/" + denominator; } /** * Returns the simplest represenation of this Rational's value possible. */ public String toSimpleString(boolean allowDecimal) { if (denominator == 0 && numerator != 0) { return toString(); } else if (isInteger()) { return Integer.toString(intValue()); } else if (numerator != 1 && denominator % numerator == 0) { // common factor between denominator and numerator int newDenominator = denominator / numerator; return new Rational(1, newDenominator).toSimpleString(allowDecimal); } else { Rational simplifiedInstance = getSimplifiedInstance(); if (allowDecimal) { String doubleString = Double.toString(simplifiedInstance.doubleValue()); if (doubleString.length() < 5) { return doubleString; } } return simplifiedInstance.toString(); } } /** * Decides whether a brute-force simplification calculation should be avoided * by comparing the maximum number of possible calculations with some threshold. * @return true if the simplification should be performed, otherwise false */ private boolean tooComplexForSimplification() { double maxPossibleCalculations = (((double)(Math.min(denominator, numerator) - 1) / 5d) + 2); return maxPossibleCalculations > maxSimplificationCalculations; } /** * Compares two Rational instances, returning true if they are mathematically * equivalent. * @param obj the Rational to compare this instance to. * @return true if instances are mathematically equivalent, otherwise false. Will also * return false if obj is not an instance of Rational. */ public boolean equals(Object obj) { if (!(obj instanceof Rational)) { return false; } Rational that = (Rational)obj; return this.doubleValue() == that.doubleValue(); } /** *

* Simplifies the Rational number.

*

* Prime number series: 1, 2, 3, 5, 7, 9, 11, 13, 17

*

* To reduce a rational, need to see if both numerator and denominator are divisible * by a common factor. Using the prime number series in ascending order guarantees * the minimun number of checks required.

*

* However, generating the prime number series seems to be a hefty task. Perhaps * it's simpler to check if both d & n are divisible by all numbers from 2 -> * (Math.min(denominator, numerator) / 2). In doing this, one can check for 2 * and 5 once, then ignore all even numbers, and all numbers ending in 0 or 5. * This leaves four numbers from every ten to check.

*

* Therefore, the max number of pairs of modulus divisions required will be:

*
     *    4   Math.min(denominator, numerator) - 1
     *   -- * ------------------------------------ + 2
     *   10                    2
     *
     *   Math.min(denominator, numerator) - 1
     * = ------------------------------------ + 2
     *                  5
     * 
* @return a simplified instance, or if the Rational could not be simpliffied, * returns itself (unchanged) */ public Rational getSimplifiedInstance() { if (tooComplexForSimplification()) { return this; } for (int factor = 2; factor <= Math.min(denominator, numerator); factor++) { if ((factor % 2 == 0 && factor > 2) || (factor % 5 == 0 && factor > 5)) { continue; } if (denominator % factor == 0 && numerator % factor == 0) { // found a common factor return new Rational(numerator / factor, denominator / factor); } } return this; } }libmetadata-extractor-java-2.3.1/src/com/drew/lang/test/0000755000000000000000000000000010716136374021630 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/lang/test/CompoundExceptionTest.java0000644000000000000000000000446410716136374027006 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 10-Dec-2002 12:22:38 using IntelliJ IDEA. */ package com.drew.lang.test; import com.drew.lang.CompoundException; import com.drew.lang.NullOutputStream; import junit.framework.TestCase; import java.io.IOException; import java.io.PrintStream; import java.io.PrintWriter; /** * */ public class CompoundExceptionTest extends TestCase { public CompoundExceptionTest(String s) { super(s); } public void testUnnestedGetMessage() throws Exception { try { throw new CompoundException("message"); } catch (CompoundException e) { assertEquals("message", e.getMessage()); } } public void testNestedGetMessage() throws Exception { try { try { throw new IOException("io"); } catch (IOException e) { throw new CompoundException("compound", e); } } catch (CompoundException e) { assertEquals("compound", e.getMessage()); assertEquals("io", e.getInnerException().getMessage()); } } public void testNoInnerException() throws Exception { try { throw new CompoundException("message", null); } catch (CompoundException e) { try { PrintStream nullStream = new PrintStream(new NullOutputStream()); e.printStackTrace(nullStream); e.printStackTrace(new PrintWriter(nullStream)); } catch (Exception e1) { fail("Exception during printStackTrace for CompoundException with no inner exception"); } } } } libmetadata-extractor-java-2.3.1/src/com/drew/lang/test/NullOutputStreamTest.java0000644000000000000000000000215710716136374026647 0ustar rootroot/** * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on Dec 15, 2002 3:30:02 PM using IntelliJ IDEA. */ package com.drew.lang.test; import com.drew.lang.NullOutputStream; import junit.framework.TestCase; import java.io.OutputStream; public class NullOutputStreamTest extends TestCase { public NullOutputStreamTest(String s) { super(s); } public void testCreateNullOutputStream() throws Exception { OutputStream out = new NullOutputStream(); out.write(1); } } libmetadata-extractor-java-2.3.1/src/com/drew/lang/test/RationalTest.java0000644000000000000000000000652510716136374025114 0ustar rootroot/* * RationalTest.java * * Test class written by Drew Noakes. * * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 26-Oct-2002 16:24:43 using IntelliJ IDEA. */ package com.drew.lang.test; import com.drew.lang.Rational; import junit.framework.TestCase; /** * * @author Drew Noakes http://drewnoakes.com */ public class RationalTest extends TestCase { public RationalTest(String s) { super(s); } public void testCreateRational() throws Exception { Rational rational = new Rational(1, 3); assertEquals(1, rational.getNumerator()); assertEquals(3, rational.getDenominator()); assertEquals(new Double(1d / 3d), new Double(rational.doubleValue())); } public void testToString() throws Exception { Rational rational = new Rational(1, 3); assertEquals("1/3", rational.toString()); } public void testToSimpleString() throws Exception { Rational third1 = new Rational(1, 3); Rational third2 = new Rational(2, 6); assertEquals("1/3", third1.toSimpleString(true)); assertEquals("1/3", third2.toSimpleString(true)); assertEquals(third1, third2); Rational twoThirds = new Rational(10, 15); assertEquals("2/3", twoThirds.toSimpleString(true)); Rational two = new Rational(10, 5); assertTrue(two.isInteger()); assertEquals("2", two.toSimpleString(true)); assertEquals("2", two.toSimpleString(false)); Rational twoFifths = new Rational(4, 10); assertEquals("0.4", twoFifths.toSimpleString(true)); assertEquals("2/5", twoFifths.toSimpleString(false)); Rational threeEigths = new Rational(3, 8); assertEquals("3/8", threeEigths.toSimpleString(true)); Rational zero = new Rational(0, 8); assertTrue(zero.isInteger()); assertEquals("0", zero.toSimpleString(true)); assertEquals("0", zero.toSimpleString(false)); zero = new Rational(0, 0); assertTrue(zero.isInteger()); assertEquals("0", zero.toSimpleString(true)); assertEquals("0", zero.toSimpleString(false)); // not sure this is a nice presentation of rationals. won't implement it for now. // Rational twoAndAHalf = new Rational(10,4); // assertEquals("2 1/2", twoAndAHalf.toSimpleString()); } public void testGetReciprocal() throws Exception { Rational rational = new Rational(1, 3); Rational reciprocal = rational.getReciprocal(); assertEquals("new rational should be reciprocal", new Rational(3, 1), reciprocal); assertEquals("origianl reciprocal should remain unchanged", new Rational(1, 3), rational); } } libmetadata-extractor-java-2.3.1/src/com/drew/lang/test/TestHelper.java0000644000000000000000000000213210716136374024550 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.lang.test; import junit.framework.TestCase; /** * Created by dnoakes on 07-May-2005 11:13:18 using IntelliJ IDEA. */ public class TestHelper { public static void assertEqualArrays(byte[] array1, byte[] array2) { TestCase.assertEquals("Equal array length", array1.length, array2.length); for (int i = 0; iExif * @return the name of the directory */ public abstract String getName(); /** * Provides the map of tag names, hashed by tag type identifier. * @return the map of tag names */ protected abstract HashMap getTagNameMap(); // CONSTRUCTORS /** * Creates a new Directory. */ public Directory() { _tagMap = new HashMap(); _definedTagList = new ArrayList(); } // VARIOUS METHODS /** * Indicates whether the specified tag type has been set. * @param tagType the tag type to check for * @return true if a value exists for the specified tag type, false if not */ public boolean containsTag(int tagType) { return _tagMap.containsKey(new Integer(tagType)); } /** * Returns an Iterator of Tag instances that have been set in this Directory. * @return an Iterator of Tag instances */ public Iterator getTagIterator() { return _definedTagList.iterator(); } /** * Returns the number of tags set in this Directory. * @return the number of tags set in this Directory */ public int getTagCount() { return _definedTagList.size(); } /** * Sets the descriptor used to interperet tag values. * @param descriptor the descriptor used to interperet tag values */ public void setDescriptor(TagDescriptor descriptor) { if (descriptor==null) { throw new NullPointerException("cannot set a null descriptor"); } _descriptor = descriptor; } public void addError(String message) { if (_errorList==null) { _errorList = new ArrayList(); } _errorList.add(message); } public boolean hasErrors() { return (_errorList!=null && _errorList.size()>0); } public Iterator getErrors() { return _errorList.iterator(); } public int getErrorCount() { return _errorList.size(); } // TAG SETTERS /** * Sets an int value for the specified tag. * @param tagType the tag's value as an int * @param value the value for the specified tag as an int */ public void setInt(int tagType, int value) { setObject(tagType, new Integer(value)); } /** * Sets a double value for the specified tag. * @param tagType the tag's value as an int * @param value the value for the specified tag as a double */ public void setDouble(int tagType, double value) { setObject(tagType, new Double(value)); } /** * Sets a float value for the specified tag. * @param tagType the tag's value as an int * @param value the value for the specified tag as a float */ public void setFloat(int tagType, float value) { setObject(tagType, new Float(value)); } /** * Sets an int value for the specified tag. * @param tagType the tag's value as an int * @param value the value for the specified tag as a String */ public void setString(int tagType, String value) { setObject(tagType, value); } /** * Sets an int value for the specified tag. * @param tagType the tag's value as an int * @param value the value for the specified tag as a boolean */ public void setBoolean(int tagType, boolean value) { setObject(tagType, new Boolean(value)); } /** * Sets a long value for the specified tag. * @param tagType the tag's value as an int * @param value the value for the specified tag as a long */ public void setLong(int tagType, long value) { setObject(tagType, new Long(value)); } /** * Sets a java.util.Date value for the specified tag. * @param tagType the tag's value as an int * @param value the value for the specified tag as a java.util.Date */ public void setDate(int tagType, java.util.Date value) { setObject(tagType, value); } /** * Sets a Rational value for the specified tag. * @param tagType the tag's value as an int * @param rational rational number */ public void setRational(int tagType, Rational rational) { setObject(tagType, rational); } /** * Sets a Rational array for the specified tag. * @param tagType the tag identifier * @param rationals the Rational array to store */ public void setRationalArray(int tagType, Rational[] rationals) { setObjectArray(tagType, rationals); } /** * Sets an int array for the specified tag. * @param tagType the tag identifier * @param ints the int array to store */ public void setIntArray(int tagType, int[] ints) { setObjectArray(tagType, ints); } /** * Sets a byte array for the specified tag. * @param tagType the tag identifier * @param bytes the byte array to store */ public void setByteArray(int tagType, byte[] bytes) { setObjectArray(tagType, bytes); } /** * Sets a String array for the specified tag. * @param tagType the tag identifier * @param strings the String array to store */ public void setStringArray(int tagType, String[] strings) { setObjectArray(tagType, strings); } /** * Private helper method, containing common functionality for all 'add' * methods. * @param tagType the tag's value as an int * @param value the value for the specified tag * @throws NullPointerException if value is null */ public void setObject(int tagType, Object value) { if (value==null) { throw new NullPointerException("cannot set a null object"); } Integer key = new Integer(tagType); if (!_tagMap.containsKey(key)) { _definedTagList.add(new Tag(tagType, this)); } _tagMap.put(key, value); } /** * Private helper method, containing common functionality for all 'add...Array' * methods. * @param tagType the tag's value as an int * @param array the array of values for the specified tag */ public void setObjectArray(int tagType, Object array) { // for now, we don't do anything special -- this method might be a candidate for removal once the dust settles setObject(tagType, array); } // TAG GETTERS /** * Returns the specified tag's value as an int, if possible. */ public int getInt(int tagType) throws MetadataException { Object o = getObject(tagType); if (o==null) { throw new MetadataException("Tag " + getTagName(tagType) + " has not been set -- check using containsTag() first"); } else if (o instanceof String) { try { return Integer.parseInt((String)o); } catch (NumberFormatException nfe) { // convert the char array to an int String s = (String)o; byte[] bytes = s.getBytes(); long val = 0; for (int i = 0; i < bytes.length; i++) { val = val << 8; val += bytes[i]; } return (int)val; } } else if (o instanceof Number) { return ((Number)o).intValue(); } else if (o instanceof Rational[]) { Rational[] rationals = (Rational[])o; if (rationals.length==1) return rationals[0].intValue(); } else if (o instanceof byte[]) { byte[] bytes = (byte[])o; if (bytes.length==1) return bytes[0]; } else if (o instanceof int[]) { int[] ints = (int[])o; if (ints.length==1) return ints[0]; } throw new MetadataException("Tag '" + tagType + "' cannot be cast to int. It is of type '" + o.getClass() + "'."); } // TODO get Array methods need to return cloned data, to maintain this directory's integrity /** * Gets the specified tag's value as a String array, if possible. Only supported * where the tag is set as String[], String, int[], byte[] or Rational[]. * @param tagType the tag identifier * @return the tag's value as an array of Strings * @throws MetadataException if the tag has not been set or cannot be represented * as a String[] */ public String[] getStringArray(int tagType) throws MetadataException { Object o = getObject(tagType); if (o==null) { throw new MetadataException("Tag " + getTagName(tagType) + " has not been set -- check using containsTag() first"); } else if (o instanceof String[]) { return (String[])o; } else if (o instanceof String) { String[] strings = {(String)o}; return strings; } else if (o instanceof int[]) { int[] ints = (int[])o; String[] strings = new String[ints.length]; for (int i = 0; inull if the tag hasn't been defined. */ public String getString(int tagType) { Object o = getObject(tagType); if (o==null) return null; if (o instanceof Rational) return ((Rational)o).toSimpleString(true); if (o.getClass().isArray()) { // handle arrays of objects and primitives int arrayLength = Array.getLength(o); // determine if this is an array of objects i.e. [Lcom.drew.blah boolean isObjectArray = o.getClass().toString().startsWith("class [L"); StringBuffer sbuffer = new StringBuffer(); for (int i = 0; isetDescriptor(Descriptor). * @param tagType the tag type identifier * @return the tag value's description as a String * @throws MetadataException if a descriptor hasn't been set, or if an error * occurs during calculation of the description within the Descriptor */ public String getDescription(int tagType) throws MetadataException { if (_descriptor==null) { throw new MetadataException("a descriptor must be set using setDescriptor(...) before descriptions can be provided"); } return _descriptor.getDescription(tagType); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/0000755000000000000000000000000010716136374022443 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/CanonMakernoteDescriptor.java0000644000000000000000000007314010716136374030256 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 27-Nov-2002 10:12:05 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import com.drew.metadata.TagDescriptor; /** * */ public class CanonMakernoteDescriptor extends TagDescriptor { public CanonMakernoteDescriptor(Directory directory) { super(directory); } public String getDescription(int tagType) throws MetadataException { switch (tagType) { case CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_ACTIVITY: return getFlashActivityDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_TYPE: return getFocusTypeDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_DIGITAL_ZOOM: return getDigitalZoomDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_QUALITY: return getQualityDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_MACRO_MODE: return getMacroModeDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_SELF_TIMER_DELAY: return getSelfTimerDelayDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_MODE: return getFlashModeDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_CONTINUOUS_DRIVE_MODE: return getContinuousDriveModeDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_1: return getFocusMode1Description(); case CanonMakernoteDirectory.TAG_CANON_STATE1_IMAGE_SIZE: return getImageSizeDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_EASY_SHOOTING_MODE: return getEasyShootingModeDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_CONTRAST: return getContrastDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_SATURATION: return getSaturationDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_SHARPNESS: return getSharpnessDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_ISO: return getIsoDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_METERING_MODE: return getMeteringModeDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_AF_POINT_SELECTED: return getAfPointSelectedDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_EXPOSURE_MODE: return getExposureModeDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_LONG_FOCAL_LENGTH: return getLongFocalLengthDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_SHORT_FOCAL_LENGTH: return getShortFocalLengthDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_FOCAL_UNITS_PER_MM: return getFocalUnitsPerMillimetreDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_DETAILS: return getFlashDetailsDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_2: return getFocusMode2Description(); case CanonMakernoteDirectory.TAG_CANON_STATE2_WHITE_BALANCE: return getWhiteBalanceDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE2_AF_POINT_USED: return getAfPointUsedDescription(); case CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS: return getFlashBiasDescription(); case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_LONG_EXPOSURE_NOISE_REDUCTION: return getLongExposureNoiseReductionDescription(); case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_AUTO_EXPOSURE_LOCK_BUTTONS: return getShutterAutoExposureLockButtonDescription(); case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MIRROR_LOCKUP: return getMirrorLockupDescription(); case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_TV_AV_AND_EXPOSURE_LEVEL: return getTvAndAvExposureLevelDescription(); case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_ASSIST_LIGHT: return getAutoFocusAssistLightDescription(); case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_SPEED_IN_AV_MODE: return getShutterSpeedInAvModeDescription(); case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_BRACKETTING: return getAutoExposureBrackettingSequenceAndAutoCancellationDescription(); case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_CURTAIN_SYNC: return getShutterCurtainSyncDescription(); case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_STOP: return getLensAutoFocusStopButtonDescription(); case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_FILL_FLASH_REDUCTION: return getFillFlashReductionDescription(); case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MENU_BUTTON_RETURN: return getMenuButtonReturnPositionDescription(); case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SET_BUTTON_FUNCTION: return getSetButtonFunctionWhenShootingDescription(); case CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SENSOR_CLEANING: return getSensorCleaningDescription(); default: return _directory.getString(tagType); } } public String getLongExposureNoiseReductionDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_LONG_EXPOSURE_NOISE_REDUCTION)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_LONG_EXPOSURE_NOISE_REDUCTION); switch (value) { case 0: return "Off"; case 1: return "On"; default: return "Unknown (" + value + ")"; } } public String getShutterAutoExposureLockButtonDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_AUTO_EXPOSURE_LOCK_BUTTONS)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_AUTO_EXPOSURE_LOCK_BUTTONS); switch (value) { case 0: return "AF/AE lock"; case 1: return "AE lock/AF"; case 2: return "AF/AF lock"; case 3: return "AE+release/AE+AF"; default: return "Unknown (" + value + ")"; } } public String getMirrorLockupDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MIRROR_LOCKUP)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MIRROR_LOCKUP); switch (value) { case 0: return "Disabled"; case 1: return "Enabled"; default: return "Unknown (" + value + ")"; } } public String getTvAndAvExposureLevelDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_TV_AV_AND_EXPOSURE_LEVEL)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_TV_AV_AND_EXPOSURE_LEVEL); switch (value) { case 0: return "1/2 stop"; case 1: return "1/3 stop"; default: return "Unknown (" + value + ")"; } } public String getAutoFocusAssistLightDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_ASSIST_LIGHT)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_ASSIST_LIGHT); switch (value) { case 0: return "On (Auto)"; case 1: return "Off"; default: return "Unknown (" + value + ")"; } } public String getShutterSpeedInAvModeDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_SPEED_IN_AV_MODE)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_SPEED_IN_AV_MODE); switch (value) { case 0: return "Automatic"; case 1: return "1/200 (fixed)"; default: return "Unknown (" + value + ")"; } } public String getAutoExposureBrackettingSequenceAndAutoCancellationDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_BRACKETTING)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_BRACKETTING); switch (value) { case 0: return "0,-,+ / Enabled"; case 1: return "0,-,+ / Disabled"; case 2: return "-,0,+ / Enabled"; case 3: return "-,0,+ / Disabled"; default: return "Unknown (" + value + ")"; } } public String getShutterCurtainSyncDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_CURTAIN_SYNC)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SHUTTER_CURTAIN_SYNC); switch (value) { case 0: return "1st Curtain Sync"; case 1: return "2nd Curtain Sync"; default: return "Unknown (" + value + ")"; } } public String getLensAutoFocusStopButtonDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_STOP)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_AF_STOP); switch (value) { case 0: return "AF stop"; case 1: return "Operate AF"; case 2: return "Lock AE and start timer"; default: return "Unknown (" + value + ")"; } } public String getFillFlashReductionDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_FILL_FLASH_REDUCTION)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_FILL_FLASH_REDUCTION); switch (value) { case 0: return "Enabled"; case 1: return "Disabled"; default: return "Unknown (" + value + ")"; } } public String getMenuButtonReturnPositionDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MENU_BUTTON_RETURN)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_MENU_BUTTON_RETURN); switch (value) { case 0: return "Top"; case 1: return "Previous (volatile)"; case 2: return "Previous"; default: return "Unknown (" + value + ")"; } } public String getSetButtonFunctionWhenShootingDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SET_BUTTON_FUNCTION)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SET_BUTTON_FUNCTION); switch (value) { case 0: return "Not Assigned"; case 1: return "Change Quality"; case 2: return "Change ISO Speed"; case 3: return "Select Parameters"; default: return "Unknown (" + value + ")"; } } public String getSensorCleaningDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SENSOR_CLEANING)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_CUSTOM_FUNCTION_SENSOR_CLEANING); switch (value) { case 0: return "Disabled"; case 1: return "Enabled"; default: return "Unknown (" + value + ")"; } } public String getFlashBiasDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS); boolean isNegative = false; if (value > 0xF000) { isNegative = true; value = 0xFFFF - value; value++; } // this tag is interesting in that the values returned are: // 0, 0.375, 0.5, 0.626, 1 // not // 0, 0.33, 0.5, 0.66, 1 return ((isNegative) ? "-" : "") + Float.toString(value / 32f) + " EV"; } public String getAfPointUsedDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE2_AF_POINT_USED)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE2_AF_POINT_USED); if ((value & 0x7) == 0) { return "Right"; } else if ((value & 0x7) == 1) { return "Centre"; } else if ((value & 0x7) == 2) { return "Left"; } else { return "Unknown (" + value + ")"; } } public String getWhiteBalanceDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE2_WHITE_BALANCE)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE2_WHITE_BALANCE); switch (value) { case 0: return "Auto"; case 1: return "Sunny"; case 2: return "Cloudy"; case 3: return "Tungsten"; case 4: return "Flourescent"; case 5: return "Flash"; case 6: return "Custom"; default: return "Unknown (" + value + ")"; } } public String getFocusMode2Description() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_2)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_2); switch (value) { case 0: return "Single"; case 1: return "Continuous"; default: return "Unknown (" + value + ")"; } } public String getFlashDetailsDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_DETAILS)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_DETAILS); if (((value << 14) & 1) > 0) { return "External E-TTL"; } if (((value << 13) & 1) > 0) { return "Internal flash"; } if (((value << 11) & 1) > 0) { return "FP sync used"; } if (((value << 4) & 1) > 0) { return "FP sync enabled"; } return "Unknown (" + value + ")"; } public String getFocalUnitsPerMillimetreDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCAL_UNITS_PER_MM)) return ""; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCAL_UNITS_PER_MM); if (value != 0) { return Integer.toString(value); } else { return ""; } } public String getShortFocalLengthDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_SHORT_FOCAL_LENGTH)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_SHORT_FOCAL_LENGTH); String units = getFocalUnitsPerMillimetreDescription(); return Integer.toString(value) + " " + units; } public String getLongFocalLengthDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_LONG_FOCAL_LENGTH)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_LONG_FOCAL_LENGTH); String units = getFocalUnitsPerMillimetreDescription(); return Integer.toString(value) + " " + units; } public String getExposureModeDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_EXPOSURE_MODE)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_EXPOSURE_MODE); switch (value) { case 0: return "Easy shooting"; case 1: return "Program"; case 2: return "Tv-priority"; case 3: return "Av-priority"; case 4: return "Manual"; case 5: return "A-DEP"; default: return "Unknown (" + value + ")"; } } public String getAfPointSelectedDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_AF_POINT_SELECTED)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_AF_POINT_SELECTED); switch (value) { case 0x3000: return "None (MF)"; case 0x3001: return "Auto selected"; case 0x3002: return "Right"; case 0x3003: return "Centre"; case 0x3004: return "Left"; default: return "Unknown (" + value + ")"; } } public String getMeteringModeDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_METERING_MODE)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_METERING_MODE); switch (value) { case 3: return "Evaluative"; case 4: return "Partial"; case 5: return "Centre weighted"; default: return "Unknown (" + value + ")"; } } public String getIsoDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_ISO)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_ISO); switch (value) { case 0: return "Not specified (see ISOSpeedRatings tag)"; case 15: return "Auto"; case 16: return "50"; case 17: return "100"; case 18: return "200"; case 19: return "400"; default: return "Unknown (" + value + ")"; } } public String getSharpnessDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_SHARPNESS)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_SHARPNESS); switch (value) { case 0xFFFF: return "Low"; case 0x000: return "Normal"; case 0x001: return "High"; default: return "Unknown (" + value + ")"; } } public String getSaturationDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_SATURATION)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_SATURATION); switch (value) { case 0xFFFF: return "Low"; case 0x000: return "Normal"; case 0x001: return "High"; default: return "Unknown (" + value + ")"; } } public String getContrastDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_CONTRAST)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_CONTRAST); switch (value) { case 0xFFFF: return "Low"; case 0x000: return "Normal"; case 0x001: return "High"; default: return "Unknown (" + value + ")"; } } public String getEasyShootingModeDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_EASY_SHOOTING_MODE)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_EASY_SHOOTING_MODE); switch (value) { case 0: return "Full auto"; case 1: return "Manual"; case 2: return "Landscape"; case 3: return "Fast shutter"; case 4: return "Slow shutter"; case 5: return "Night"; case 6: return "B&W"; case 7: return "Sepia"; case 8: return "Portrait"; case 9: return "Sports"; case 10: return "Macro / Closeup"; case 11: return "Pan focus"; default: return "Unknown (" + value + ")"; } } public String getImageSizeDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_IMAGE_SIZE)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_IMAGE_SIZE); switch (value) { case 0: return "Large"; case 1: return "Medium"; case 2: return "Small"; default: return "Unknown (" + value + ")"; } } public String getFocusMode1Description() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_1)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_MODE_1); switch (value) { case 0: return "One-shot"; case 1: return "AI Servo"; case 2: return "AI Focus"; case 3: return "Manual Focus"; case 4: // TODO should check field 32 here (FOCUS_MODE_2) return "Single"; case 5: return "Continuous"; case 6: return "Manual Focus"; default: return "Unknown (" + value + ")"; } } public String getContinuousDriveModeDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_CONTINUOUS_DRIVE_MODE)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_CONTINUOUS_DRIVE_MODE); switch (value) { case 0: if (_directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_SELF_TIMER_DELAY) == 0) { return "Single shot"; } else { return "Single shot with self-timer"; } case 1: return "Continuous"; default: return "Unknown (" + value + ")"; } } public String getFlashModeDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_MODE)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_MODE); switch (value) { case 0: return "No flash fired"; case 1: return "Auto"; case 2: return "On"; case 3: return "Red-eye reduction"; case 4: return "Slow-synchro"; case 5: return "Auto and red-eye reduction"; case 6: return "On and red-eye reduction"; case 16: // note: this value not set on Canon D30 return "Extenal flash"; default: return "Unknown (" + value + ")"; } } public String getSelfTimerDelayDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_SELF_TIMER_DELAY)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_SELF_TIMER_DELAY); if (value == 0) { return "Self timer not used"; } else { // TODO find an image that tests this calculation return Double.toString((double)value * 0.1d) + " sec"; } } public String getMacroModeDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_MACRO_MODE)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_MACRO_MODE); switch (value) { case 1: return "Macro"; case 2: return "Normal"; default: return "Unknown (" + value + ")"; } } public String getQualityDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_QUALITY)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_QUALITY); switch (value) { case 2: return "Normal"; case 3: return "Fine"; case 5: return "Superfine"; default: return "Unknown (" + value + ")"; } } public String getDigitalZoomDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_DIGITAL_ZOOM)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_DIGITAL_ZOOM); switch (value) { case 0: return "No digital zoom"; case 1: return "2x"; case 2: return "4x"; default: return "Unknown (" + value + ")"; } } public String getFocusTypeDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_TYPE)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FOCUS_TYPE); switch (value) { case 0: return "Manual"; case 1: return "Auto"; case 3: return "Close-up (Macro)"; case 8: return "Locked (Pan Mode)"; default: return "Unknown (" + value + ")"; } } public String getFlashActivityDescription() throws MetadataException { if (!_directory.containsTag(CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_ACTIVITY)) return null; int value = _directory.getInt(CanonMakernoteDirectory.TAG_CANON_STATE1_FLASH_ACTIVITY); switch (value) { case 0: return "Flash did not fire"; case 1: return "Flash fired"; default: return "Unknown (" + value + ")"; } } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/CanonMakernoteDirectory.java0000644000000000000000000004227410716136374030110 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 27-Nov-2002 10:10:47 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import java.util.HashMap; /** * Describes tags specific to Canon cameras. * * Thanks to Bill Richards for his contribution to this makernote directory. * * Many tag definitions explained here: http://www.ozhiker.com/electronics/pjmt/jpeg_info/canon_mn.html */ public class CanonMakernoteDirectory extends Directory { // CANON cameras have some funny bespoke fields that need further processing... public static final int TAG_CANON_CAMERA_STATE_1 = 0x0001; public static final int TAG_CANON_CAMERA_STATE_2 = 0x0004; public static final int TAG_CANON_IMAGE_TYPE = 0x0006; public static final int TAG_CANON_FIRMWARE_VERSION = 0x0007; public static final int TAG_CANON_IMAGE_NUMBER = 0x0008; public static final int TAG_CANON_OWNER_NAME = 0x0009; /** * To display serial number as on camera use: printf( "%04X%05d", highbyte, lowbyte ) * TODO handle this in CanonMakernoteDescriptor */ public static final int TAG_CANON_SERIAL_NUMBER = 0x000C; public static final int TAG_CANON_UNKNOWN_1 = 0x000D; public static final int TAG_CANON_CUSTOM_FUNCTIONS = 0x000F; // These 'sub'-tag values have been created for consistency -- they don't exist within the exif segment /** * 1 = Macro * 2 = Normal */ public static final int TAG_CANON_STATE1_MACRO_MODE = 0xC101; public static final int TAG_CANON_STATE1_SELF_TIMER_DELAY = 0xC102; /** * 2 = Normal * 3 = Fine * 5 = Superfine */ public static final int TAG_CANON_STATE1_QUALITY = 0xC103; /** * 0 = Flash Not Fired * 1 = Auto * 2 = On * 3 = Red Eye Reduction * 4 = Slow Synchro * 5 = Auto + Red Eye Reduction * 6 = On + Red Eye Reduction * 16 = External Flash */ public static final int TAG_CANON_STATE1_FLASH_MODE = 0xC104; /** * 0 = Single Frame or Timer Mode * 1 = Continuous */ public static final int TAG_CANON_STATE1_CONTINUOUS_DRIVE_MODE = 0xC105; public static final int TAG_CANON_STATE1_UNKNOWN_2 = 0xC106; /** * 0 = One-Shot * 1 = AI Servo * 2 = AI Focus * 3 = Manual Focus * 4 = Single * 5 = Continuous * 6 = Manual Focus */ public static final int TAG_CANON_STATE1_FOCUS_MODE_1 = 0xC107; public static final int TAG_CANON_STATE1_UNKNOWN_3 = 0xC108; public static final int TAG_CANON_STATE1_UNKNOWN_4 = 0xC109; /** * 0 = Large * 1 = Medium * 2 = Small */ public static final int TAG_CANON_STATE1_IMAGE_SIZE = 0xC10A; /** * 0 = Full Auto * 1 = Manual * 2 = Landscape * 3 = Fast Shutter * 4 = Slow Shutter * 5 = Night * 6 = Black & White * 7 = Sepia * 8 = Portrait * 9 = Sports * 10 = Macro / Close-Up * 11 = Pan Focus */ public static final int TAG_CANON_STATE1_EASY_SHOOTING_MODE = 0xC10B; /** * 0 = No Digital Zoom * 1 = 2x * 2 = 4x */ public static final int TAG_CANON_STATE1_DIGITAL_ZOOM = 0xC10C; /** * 0 = Normal * 1 = High * 65535 = Low */ public static final int TAG_CANON_STATE1_CONTRAST = 0xC10D; /** * 0 = Normal * 1 = High * 65535 = Low */ public static final int TAG_CANON_STATE1_SATURATION = 0xC10E; /** * 0 = Normal * 1 = High * 65535 = Low */ public static final int TAG_CANON_STATE1_SHARPNESS = 0xC10F; /** * 0 = Check ISOSpeedRatings EXIF tag for ISO Speed * 15 = Auto ISO * 16 = ISO 50 * 17 = ISO 100 * 18 = ISO 200 * 19 = ISO 400 */ public static final int TAG_CANON_STATE1_ISO = 0xC110; /** * 3 = Evaluative * 4 = Partial * 5 = Centre Weighted */ public static final int TAG_CANON_STATE1_METERING_MODE = 0xC111; /** * 0 = Manual * 1 = Auto * 3 = Close-up (Macro) * 8 = Locked (Pan Mode) */ public static final int TAG_CANON_STATE1_FOCUS_TYPE = 0xC112; /** * 12288 = None (Manual Focus) * 12289 = Auto Selected * 12290 = Right * 12291 = Centre * 12292 = Left */ public static final int TAG_CANON_STATE1_AF_POINT_SELECTED = 0xC113; /** * 0 = Easy Shooting (See Easy Shooting Mode) * 1 = Program * 2 = Tv-Priority * 3 = Av-Priority * 4 = Manual * 5 = A-DEP */ public static final int TAG_CANON_STATE1_EXPOSURE_MODE = 0xC114; public static final int TAG_CANON_STATE1_UNKNOWN_7 = 0xC115; public static final int TAG_CANON_STATE1_UNKNOWN_8 = 0xC116; public static final int TAG_CANON_STATE1_LONG_FOCAL_LENGTH = 0xC117; public static final int TAG_CANON_STATE1_SHORT_FOCAL_LENGTH = 0xC118; public static final int TAG_CANON_STATE1_FOCAL_UNITS_PER_MM = 0xC119; public static final int TAG_CANON_STATE1_UNKNOWN_9 = 0xC11A; public static final int TAG_CANON_STATE1_UNKNOWN_10 = 0xC11B; /** * 0 = Flash Did Not Fire * 1 = Flash Fired */ public static final int TAG_CANON_STATE1_FLASH_ACTIVITY = 0xC11C; public static final int TAG_CANON_STATE1_FLASH_DETAILS = 0xC11D; public static final int TAG_CANON_STATE1_UNKNOWN_12 = 0xC11E; public static final int TAG_CANON_STATE1_UNKNOWN_13 = 0xC11F; /** * 0 = Focus Mode: Single * 1 = Focus Mode: Continuous */ public static final int TAG_CANON_STATE1_FOCUS_MODE_2 = 0xC120; /** * 0 = Auto * 1 = Sunny * 2 = Cloudy * 3 = Tungsten * 4 = Flourescent * 5 = Flash * 6 = Custom */ public static final int TAG_CANON_STATE2_WHITE_BALANCE = 0xC207; public static final int TAG_CANON_STATE2_SEQUENCE_NUMBER = 0xC209; public static final int TAG_CANON_STATE2_AF_POINT_USED = 0xC20E; /** * The value of this tag may be translated into a flash bias value, in EV. * * 0xffc0 = -2 EV * 0xffcc = -1.67 EV * 0xffd0 = -1.5 EV * 0xffd4 = -1.33 EV * 0xffe0 = -1 EV * 0xffec = -0.67 EV * 0xfff0 = -0.5 EV * 0xfff4 = -0.33 EV * 0x0000 = 0 EV * 0x000c = 0.33 EV * 0x0010 = 0.5 EV * 0x0014 = 0.67 EV * 0x0020 = 1 EV * 0x002c = 1.33 EV * 0x0030 = 1.5 EV * 0x0034 = 1.67 EV * 0x0040 = 2 EV */ public static final int TAG_CANON_STATE2_FLASH_BIAS = 0xC20F; public static final int TAG_CANON_STATE2_AUTO_EXPOSURE_BRACKETING = 0xC210; public static final int TAG_CANON_STATE2_AEB_BRACKET_VALUE = 0xC211; public static final int TAG_CANON_STATE2_SUBJECT_DISTANCE = 0xC213; /** * Long Exposure Noise Reduction * 0 = Off * 1 = On */ public static final int TAG_CANON_CUSTOM_FUNCTION_LONG_EXPOSURE_NOISE_REDUCTION = 0xC301; /** * Shutter/Auto Exposure-lock buttons * 0 = AF/AE lock * 1 = AE lock/AF * 2 = AF/AF lock * 3 = AE+release/AE+AF */ public static final int TAG_CANON_CUSTOM_FUNCTION_SHUTTER_AUTO_EXPOSURE_LOCK_BUTTONS = 0xC302; /** * Mirror lockup * 0 = Disable * 1 = Enable */ public static final int TAG_CANON_CUSTOM_FUNCTION_MIRROR_LOCKUP = 0xC303; /** * Tv/Av and exposure level * 0 = 1/2 stop * 1 = 1/3 stop */ public static final int TAG_CANON_CUSTOM_FUNCTION_TV_AV_AND_EXPOSURE_LEVEL = 0xC304; /** * AF-assist light * 0 = On (Auto) * 1 = Off */ public static final int TAG_CANON_CUSTOM_FUNCTION_AF_ASSIST_LIGHT = 0xC305; /** * Shutter speed in Av mode * 0 = Automatic * 1 = 1/200 (fixed) */ public static final int TAG_CANON_CUSTOM_FUNCTION_SHUTTER_SPEED_IN_AV_MODE = 0xC306; /** * Auto-Exposure Bracketting sequence/auto cancellation * 0 = 0,-,+ / Enabled * 1 = 0,-,+ / Disabled * 2 = -,0,+ / Enabled * 3 = -,0,+ / Disabled */ public static final int TAG_CANON_CUSTOM_FUNCTION_BRACKETTING = 0xC307; /** * Shutter Curtain Sync * 0 = 1st Curtain Sync * 1 = 2nd Curtain Sync */ public static final int TAG_CANON_CUSTOM_FUNCTION_SHUTTER_CURTAIN_SYNC = 0xC308; /** * Lens Auto-Focus stop button Function Switch * 0 = AF stop * 1 = Operate AF * 2 = Lock AE and start timer */ public static final int TAG_CANON_CUSTOM_FUNCTION_AF_STOP = 0xC309; /** * Auto reduction of fill flash * 0 = Enable * 1 = Disable */ public static final int TAG_CANON_CUSTOM_FUNCTION_FILL_FLASH_REDUCTION = 0xC30A; /** * Menu button return position * 0 = Top * 1 = Previous (volatile) * 2 = Previous */ public static final int TAG_CANON_CUSTOM_FUNCTION_MENU_BUTTON_RETURN = 0xC30B; /** * SET button function when shooting * 0 = Not Assigned * 1 = Change Quality * 2 = Change ISO Speed * 3 = Select Parameters */ public static final int TAG_CANON_CUSTOM_FUNCTION_SET_BUTTON_FUNCTION = 0xC30C; /** * Sensor cleaning * 0 = Disable * 1 = Enable */ public static final int TAG_CANON_CUSTOM_FUNCTION_SENSOR_CLEANING = 0xC30D; // 9 A B C D E F 10 11 12 13 // 9 10 11 12 13 14 15 16 17 18 19 protected static final HashMap _tagNameMap = new HashMap(); static { _tagNameMap.put(new Integer(TAG_CANON_FIRMWARE_VERSION), "Firmware Version"); _tagNameMap.put(new Integer(TAG_CANON_IMAGE_NUMBER), "Image Number"); _tagNameMap.put(new Integer(TAG_CANON_IMAGE_TYPE), "Image Type"); _tagNameMap.put(new Integer(TAG_CANON_OWNER_NAME), "Owner Name"); _tagNameMap.put(new Integer(TAG_CANON_UNKNOWN_1), "Makernote Unknown 1"); _tagNameMap.put(new Integer(TAG_CANON_CUSTOM_FUNCTIONS), "Custom Functions"); _tagNameMap.put(new Integer(TAG_CANON_SERIAL_NUMBER), "Camera Serial Number"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_AF_POINT_SELECTED), "AF Point Selected"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_CONTINUOUS_DRIVE_MODE), "Continuous Drive Mode"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_CONTRAST), "Contrast"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_EASY_SHOOTING_MODE), "Easy Shooting Mode"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_EXPOSURE_MODE), "Exposure Mode"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_FLASH_DETAILS), "Flash Details"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_FLASH_MODE), "Flash Mode"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_FOCAL_UNITS_PER_MM), "Focal Units per mm"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_FOCUS_MODE_1), "Focus Mode"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_FOCUS_MODE_2), "Focus Mode"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_IMAGE_SIZE), "Image Size"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_ISO), "Iso"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_LONG_FOCAL_LENGTH), "Long Focal Length"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_MACRO_MODE), "Macro Mode"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_METERING_MODE), "Metering Mode"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_SATURATION), "Saturation"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_SELF_TIMER_DELAY), "Self Timer Delay"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_SHARPNESS), "Sharpness"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_SHORT_FOCAL_LENGTH), "Short Focal Length"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_QUALITY), "Quality"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_2), "Unknown Camera State 2"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_3), "Unknown Camera State 3"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_4), "Unknown Camera State 4"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_DIGITAL_ZOOM), "Digital Zoom"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_FOCUS_TYPE), "Focus Type"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_7), "Unknown Camera State 7"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_8), "Unknown Camera State 8"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_9), "Unknown Camera State 9"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_10), "Unknown Camera State 10"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_FLASH_ACTIVITY), "Flash Activity"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_12), "Unknown Camera State 12"); _tagNameMap.put(new Integer(TAG_CANON_STATE1_UNKNOWN_13), "Unknown Camera State 13"); _tagNameMap.put(new Integer(TAG_CANON_STATE2_WHITE_BALANCE), "White Balance"); _tagNameMap.put(new Integer(TAG_CANON_STATE2_SEQUENCE_NUMBER), "Sequence Number"); _tagNameMap.put(new Integer(TAG_CANON_STATE2_AF_POINT_USED), "AF Point Used"); _tagNameMap.put(new Integer(TAG_CANON_STATE2_FLASH_BIAS), "Flash Bias"); _tagNameMap.put(new Integer(TAG_CANON_STATE2_AUTO_EXPOSURE_BRACKETING), "Auto Exposure Bracketing"); _tagNameMap.put(new Integer(TAG_CANON_STATE2_AEB_BRACKET_VALUE), "AEB Bracket Value"); _tagNameMap.put(new Integer(TAG_CANON_STATE2_SUBJECT_DISTANCE), "Subject Distance"); _tagNameMap.put(new Integer(TAG_CANON_CUSTOM_FUNCTION_LONG_EXPOSURE_NOISE_REDUCTION), "Long Exposure Noise Reduction"); _tagNameMap.put(new Integer(TAG_CANON_CUSTOM_FUNCTION_SHUTTER_AUTO_EXPOSURE_LOCK_BUTTONS), "Shutter/Auto Exposure-lock Buttons"); _tagNameMap.put(new Integer(TAG_CANON_CUSTOM_FUNCTION_MIRROR_LOCKUP), "Mirror Lockup"); _tagNameMap.put(new Integer(TAG_CANON_CUSTOM_FUNCTION_TV_AV_AND_EXPOSURE_LEVEL), "Tv/Av And Exposure Level"); _tagNameMap.put(new Integer(TAG_CANON_CUSTOM_FUNCTION_AF_ASSIST_LIGHT), "AF-Assist Light"); _tagNameMap.put(new Integer(TAG_CANON_CUSTOM_FUNCTION_SHUTTER_SPEED_IN_AV_MODE), "Shutter Speed in Av Mode"); _tagNameMap.put(new Integer(TAG_CANON_CUSTOM_FUNCTION_BRACKETTING), "Auto-Exposure Bracketting Sequence/Auto Cancellation"); _tagNameMap.put(new Integer(TAG_CANON_CUSTOM_FUNCTION_SHUTTER_CURTAIN_SYNC), "Shutter Curtain Sync"); _tagNameMap.put(new Integer(TAG_CANON_CUSTOM_FUNCTION_AF_STOP), "Lens Auto-Focus Stop Button Function Switch"); _tagNameMap.put(new Integer(TAG_CANON_CUSTOM_FUNCTION_FILL_FLASH_REDUCTION), "Auto Reduction of Fill Flash"); _tagNameMap.put(new Integer(TAG_CANON_CUSTOM_FUNCTION_MENU_BUTTON_RETURN), "Menu Button Return Position"); _tagNameMap.put(new Integer(TAG_CANON_CUSTOM_FUNCTION_SET_BUTTON_FUNCTION), "SET Button Function When Shooting"); _tagNameMap.put(new Integer(TAG_CANON_CUSTOM_FUNCTION_SENSOR_CLEANING), "Sensor Cleaning"); } public CanonMakernoteDirectory() { this.setDescriptor(new CanonMakernoteDescriptor(this)); } public String getName() { return "Canon Makernote"; } protected HashMap getTagNameMap() { return _tagNameMap; } /** * We need special handling for selected tags. * @param tagType * @param ints */ public void setIntArray(int tagType, int[] ints) { if (tagType == TAG_CANON_CAMERA_STATE_1) { // this single tag has multiple values within int subTagTypeBase = 0xC100; // we intentionally skip the first array member for (int i = 1; i < ints.length; i++) { setInt(subTagTypeBase + i, ints[i]); } } else if (tagType == TAG_CANON_CAMERA_STATE_2) { // this single tag has multiple values within int subTagTypeBase = 0xC200; // we intentionally skip the first array member for (int i = 1; i < ints.length; i++) { setInt(subTagTypeBase + i, ints[i]); } } if (tagType == TAG_CANON_CUSTOM_FUNCTIONS) { // this single tag has multiple values within int subTagTypeBase = 0xC300; // we intentionally skip the first array member for (int i = 1; i < ints.length; i++) { setInt(subTagTypeBase + i + 1, ints[i] & 0x0F); } } else { // no special handling... super.setIntArray(tagType, ints); } } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/CasioType1MakernoteDescriptor.java0000644000000000000000000002366710716136374031212 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 27-Nov-2002 10:12:05 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import com.drew.metadata.TagDescriptor; /** * */ public class CasioType1MakernoteDescriptor extends TagDescriptor { public CasioType1MakernoteDescriptor(Directory directory) { super(directory); } public String getDescription(int tagType) throws MetadataException { switch (tagType) { case CasioType1MakernoteDirectory.TAG_CASIO_RECORDING_MODE: return getRecordingModeDescription(); case CasioType1MakernoteDirectory.TAG_CASIO_QUALITY: return getQualityDescription(); case CasioType1MakernoteDirectory.TAG_CASIO_FOCUSING_MODE: return getFocusingModeDescription(); case CasioType1MakernoteDirectory.TAG_CASIO_FLASH_MODE: return getFlashModeDescription(); case CasioType1MakernoteDirectory.TAG_CASIO_FLASH_INTENSITY: return getFlashIntensityDescription(); case CasioType1MakernoteDirectory.TAG_CASIO_OBJECT_DISTANCE: return getObjectDistanceDescription(); case CasioType1MakernoteDirectory.TAG_CASIO_WHITE_BALANCE: return getWhiteBalanceDescription(); case CasioType1MakernoteDirectory.TAG_CASIO_DIGITAL_ZOOM: return getDigitalZoomDescription(); case CasioType1MakernoteDirectory.TAG_CASIO_SHARPNESS: return getSharpnessDescription(); case CasioType1MakernoteDirectory.TAG_CASIO_CONTRAST: return getContrastDescription(); case CasioType1MakernoteDirectory.TAG_CASIO_SATURATION: return getSaturationDescription(); case CasioType1MakernoteDirectory.TAG_CASIO_CCD_SENSITIVITY: return getCcdSensitivityDescription(); default: return _directory.getString(tagType); } } public String getCcdSensitivityDescription() throws MetadataException { if (!_directory.containsTag(CasioType1MakernoteDirectory.TAG_CASIO_CCD_SENSITIVITY)) return null; int value = _directory.getInt(CasioType1MakernoteDirectory.TAG_CASIO_CCD_SENSITIVITY); switch (value) { // these four for QV3000 case 64: return "Normal"; case 125: return "+1.0"; case 250: return "+2.0"; case 244: return "+3.0"; // these two for QV8000/2000 case 80: return "Normal (ISO 80 equivalent)"; case 100: return "High"; default: return "Unknown (" + value + ")"; } } public String getSaturationDescription() throws MetadataException { if (!_directory.containsTag(CasioType1MakernoteDirectory.TAG_CASIO_SATURATION)) return null; int value = _directory.getInt(CasioType1MakernoteDirectory.TAG_CASIO_SATURATION); switch (value) { case 0: return "Normal"; case 1: return "Low"; case 2: return "High"; default: return "Unknown (" + value + ")"; } } public String getContrastDescription() throws MetadataException { if (!_directory.containsTag(CasioType1MakernoteDirectory.TAG_CASIO_CONTRAST)) return null; int value = _directory.getInt(CasioType1MakernoteDirectory.TAG_CASIO_CONTRAST); switch (value) { case 0: return "Normal"; case 1: return "Low"; case 2: return "High"; default: return "Unknown (" + value + ")"; } } public String getSharpnessDescription() throws MetadataException { if (!_directory.containsTag(CasioType1MakernoteDirectory.TAG_CASIO_SHARPNESS)) return null; int value = _directory.getInt(CasioType1MakernoteDirectory.TAG_CASIO_SHARPNESS); switch (value) { case 0: return "Normal"; case 1: return "Soft"; case 2: return "Hard"; default: return "Unknown (" + value + ")"; } } public String getDigitalZoomDescription() throws MetadataException { if (!_directory.containsTag(CasioType1MakernoteDirectory.TAG_CASIO_DIGITAL_ZOOM)) return null; int value = _directory.getInt(CasioType1MakernoteDirectory.TAG_CASIO_DIGITAL_ZOOM); switch (value) { case 0x10000: return "No digital zoom"; case 0x10001: return "2x digital zoom"; case 0x20000: return "2x digital zoom"; case 0x40000: return "4x digital zoom"; default: return "Unknown (" + value + ")"; } } public String getWhiteBalanceDescription() throws MetadataException { if (!_directory.containsTag(CasioType1MakernoteDirectory.TAG_CASIO_WHITE_BALANCE)) return null; int value = _directory.getInt(CasioType1MakernoteDirectory.TAG_CASIO_WHITE_BALANCE); switch (value) { case 1: return "Auto"; case 2: return "Tungsten"; case 3: return "Daylight"; case 4: return "Flourescent"; case 5: return "Shade"; case 129: return "Manual"; default: return "Unknown (" + value + ")"; } } public String getObjectDistanceDescription() throws MetadataException { if (!_directory.containsTag(CasioType1MakernoteDirectory.TAG_CASIO_OBJECT_DISTANCE)) return null; int value = _directory.getInt(CasioType1MakernoteDirectory.TAG_CASIO_OBJECT_DISTANCE); return value + " mm"; } public String getFlashIntensityDescription() throws MetadataException { if (!_directory.containsTag(CasioType1MakernoteDirectory.TAG_CASIO_FLASH_INTENSITY)) return null; int value = _directory.getInt(CasioType1MakernoteDirectory.TAG_CASIO_FLASH_INTENSITY); switch (value) { case 11: return "Weak"; case 13: return "Normal"; case 15: return "Strong"; default: return "Unknown (" + value + ")"; } } public String getFlashModeDescription() throws MetadataException { if (!_directory.containsTag(CasioType1MakernoteDirectory.TAG_CASIO_FLASH_MODE)) return null; int value = _directory.getInt(CasioType1MakernoteDirectory.TAG_CASIO_FLASH_MODE); switch (value) { case 1: return "Auto"; case 2: return "On"; case 3: return "Off"; case 4: // this documented as additional value for off here: // http://www.ozhiker.com/electronics/pjmt/jpeg_info/casio_mn.html return "Red eye reduction"; default: return "Unknown (" + value + ")"; } } public String getFocusingModeDescription() throws MetadataException { if (!_directory.containsTag(CasioType1MakernoteDirectory.TAG_CASIO_FOCUSING_MODE)) return null; int value = _directory.getInt(CasioType1MakernoteDirectory.TAG_CASIO_FOCUSING_MODE); switch (value) { case 2: return "Macro"; case 3: return "Auto focus"; case 4: return "Manual focus"; case 5: return "Infinity"; default: return "Unknown (" + value + ")"; } } public String getQualityDescription() throws MetadataException { if (!_directory.containsTag(CasioType1MakernoteDirectory.TAG_CASIO_QUALITY)) return null; int value = _directory.getInt(CasioType1MakernoteDirectory.TAG_CASIO_QUALITY); switch (value) { case 1: return "Economy"; case 2: return "Normal"; case 3: return "Fine"; default: return "Unknown (" + value + ")"; } } public String getRecordingModeDescription() throws MetadataException { if (!_directory.containsTag(CasioType1MakernoteDirectory.TAG_CASIO_RECORDING_MODE)) return null; int value = _directory.getInt(CasioType1MakernoteDirectory.TAG_CASIO_RECORDING_MODE); switch (value) { case 1: return "Single shutter"; case 2: return "Panorama"; case 3: return "Night scene"; case 4: return "Portrait"; case 5: return "Landscape"; default: return "Unknown (" + value + ")"; } } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/CasioType1MakernoteDirectory.java0000644000000000000000000001016110716136374031021 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 27-Nov-2002 10:10:47 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import java.util.HashMap; /** * A standard TIFF IFD directory but always uses Motorola (Big-Endian) Byte Alignment. * Makernote data begins immediately (no header). */ public class CasioType1MakernoteDirectory extends Directory { public static final int TAG_CASIO_RECORDING_MODE = 0x0001; public static final int TAG_CASIO_QUALITY = 0x0002; public static final int TAG_CASIO_FOCUSING_MODE = 0x0003; public static final int TAG_CASIO_FLASH_MODE = 0x0004; public static final int TAG_CASIO_FLASH_INTENSITY = 0x0005; public static final int TAG_CASIO_OBJECT_DISTANCE = 0x0006; public static final int TAG_CASIO_WHITE_BALANCE = 0x0007; public static final int TAG_CASIO_UNKNOWN_1 = 0x0008; public static final int TAG_CASIO_UNKNOWN_2 = 0x0009; public static final int TAG_CASIO_DIGITAL_ZOOM = 0x000A; public static final int TAG_CASIO_SHARPNESS = 0x000B; public static final int TAG_CASIO_CONTRAST = 0x000C; public static final int TAG_CASIO_SATURATION = 0x000D; public static final int TAG_CASIO_UNKNOWN_3 = 0x000E; public static final int TAG_CASIO_UNKNOWN_4 = 0x000F; public static final int TAG_CASIO_UNKNOWN_5 = 0x0010; public static final int TAG_CASIO_UNKNOWN_6 = 0x0011; public static final int TAG_CASIO_UNKNOWN_7 = 0x0012; public static final int TAG_CASIO_UNKNOWN_8 = 0x0013; public static final int TAG_CASIO_CCD_SENSITIVITY = 0x0014; protected static final HashMap tagNameMap = new HashMap(); static { tagNameMap.put(new Integer(TAG_CASIO_CCD_SENSITIVITY), "CCD Sensitivity"); tagNameMap.put(new Integer(TAG_CASIO_CONTRAST), "Contrast"); tagNameMap.put(new Integer(TAG_CASIO_DIGITAL_ZOOM), "Digital Zoom"); tagNameMap.put(new Integer(TAG_CASIO_FLASH_INTENSITY), "Flash Intensity"); tagNameMap.put(new Integer(TAG_CASIO_FLASH_MODE), "Flash Mode"); tagNameMap.put(new Integer(TAG_CASIO_FOCUSING_MODE), "Focussing Mode"); tagNameMap.put(new Integer(TAG_CASIO_OBJECT_DISTANCE), "Object Distance"); tagNameMap.put(new Integer(TAG_CASIO_QUALITY), "Quality"); tagNameMap.put(new Integer(TAG_CASIO_RECORDING_MODE), "Recording Mode"); tagNameMap.put(new Integer(TAG_CASIO_SATURATION), "Saturation"); tagNameMap.put(new Integer(TAG_CASIO_SHARPNESS), "Sharpness"); tagNameMap.put(new Integer(TAG_CASIO_UNKNOWN_1), "Makernote Unknown 1"); tagNameMap.put(new Integer(TAG_CASIO_UNKNOWN_2), "Makernote Unknown 2"); tagNameMap.put(new Integer(TAG_CASIO_UNKNOWN_3), "Makernote Unknown 3"); tagNameMap.put(new Integer(TAG_CASIO_UNKNOWN_4), "Makernote Unknown 4"); tagNameMap.put(new Integer(TAG_CASIO_UNKNOWN_5), "Makernote Unknown 5"); tagNameMap.put(new Integer(TAG_CASIO_UNKNOWN_6), "Makernote Unknown 6"); tagNameMap.put(new Integer(TAG_CASIO_UNKNOWN_7), "Makernote Unknown 7"); tagNameMap.put(new Integer(TAG_CASIO_UNKNOWN_8), "Makernote Unknown 8"); tagNameMap.put(new Integer(TAG_CASIO_WHITE_BALANCE), "White Balance"); } public CasioType1MakernoteDirectory() { this.setDescriptor(new CasioType1MakernoteDescriptor(this)); } public String getName() { return "Casio Makernote"; } protected HashMap getTagNameMap() { return tagNameMap; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/CasioType2MakernoteDescriptor.java0000644000000000000000000004366410716136374031212 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 27-Nov-2002 10:12:05 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import com.drew.metadata.TagDescriptor; /** * */ public class CasioType2MakernoteDescriptor extends TagDescriptor { public CasioType2MakernoteDescriptor(Directory directory) { super(directory); } public String getDescription(int tagType) throws MetadataException { switch (tagType) { case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_THUMBNAIL_DIMENSIONS: return getThumbnailDimensionsDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_THUMBNAIL_SIZE: return getThumbnailSizeDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_THUMBNAIL_OFFSET: return getThumbnailOffsetDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_QUALITY_MODE: return getQualityModeDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_IMAGE_SIZE: return getImageSizeDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_FOCUS_MODE_1: return getFocusMode1Description(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_ISO_SENSITIVITY: return getIsoSensitivityDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_WHITE_BALANCE_1: return getWhiteBalance1Description(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_FOCAL_LENGTH: return getFocalLengthDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_SATURATION: return getSaturationDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_CONTRAST: return getContrastDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_SHARPNESS: return getSharpnessDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_PRINT_IMAGE_MATCHING_INFO: return getPrintImageMatchingInfoDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_CASIO_PREVIEW_THUMBNAIL: return getCasioPreviewThumbnailDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_WHITE_BALANCE_BIAS: return getWhiteBalanceBiasDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_WHITE_BALANCE_2: return getWhiteBalance2Description(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_OBJECT_DISTANCE: return getObjectDistanceDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_FLASH_DISTANCE: return getFlashDistanceDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_RECORD_MODE: return getRecordModeDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_SELF_TIMER: return getSelfTimerDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_QUALITY: return getQualityDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_FOCUS_MODE_2: return getFocusMode2Description(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_TIME_ZONE: return getTimeZoneDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_BESTSHOT_MODE: return getBestShotModeDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_CCD_ISO_SENSITIVITY: return getCcdIsoSensitivityDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_COLOUR_MODE: return getColourModeDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_ENHANCEMENT: return getEnhancementDescription(); case CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_FILTER: return getFilterDescription(); default: return _directory.getString(tagType); } } public String getFilterDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_FILTER)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_FILTER); switch (value) { case 0: return "Off"; default: return "Unknown (" + value + ")"; } } public String getEnhancementDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_ENHANCEMENT)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_ENHANCEMENT); switch (value) { case 0: return "Off"; default: return "Unknown (" + value + ")"; } } public String getColourModeDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_COLOUR_MODE)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_COLOUR_MODE); switch (value) { case 0: return "Off"; default: return "Unknown (" + value + ")"; } } public String getCcdIsoSensitivityDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_CCD_ISO_SENSITIVITY)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_CCD_ISO_SENSITIVITY); switch (value) { case 0: return "Off"; case 1: return "On"; default: return "Unknown (" + value + ")"; } } public String getBestShotModeDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_BESTSHOT_MODE)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_BESTSHOT_MODE); switch (value) { default: return "Unknown (" + value + ")"; } } public String getTimeZoneDescription() { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_TIME_ZONE)) return null; return _directory.getString(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_TIME_ZONE); } public String getFocusMode2Description() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_FOCUS_MODE_2)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_FOCUS_MODE_2); switch (value) { case 1: return "Fixation"; case 6: return "Multi-Area Focus"; default: return "Unknown (" + value + ")"; } } public String getQualityDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_QUALITY)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_QUALITY); switch (value) { case 3: return "Fine"; default: return "Unknown (" + value + ")"; } } public String getSelfTimerDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_SELF_TIMER)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_SELF_TIMER); switch (value) { case 1: return "Off"; default: return "Unknown (" + value + ")"; } } public String getRecordModeDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_RECORD_MODE)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_RECORD_MODE); switch (value) { case 2: return "Normal"; default: return "Unknown (" + value + ")"; } } public String getFlashDistanceDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_FLASH_DISTANCE)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_FLASH_DISTANCE); switch (value) { case 0: return "Off"; default: return "Unknown (" + value + ")"; } } public String getObjectDistanceDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_OBJECT_DISTANCE)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_OBJECT_DISTANCE); return Integer.toString(value) + " mm"; } public String getWhiteBalance2Description() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_WHITE_BALANCE_2)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_WHITE_BALANCE_2); switch (value) { case 0: return "Manual"; case 1: return "Auto"; // unsure about this case 4: return "Flash"; // unsure about this case 12: return "Flash"; default: return "Unknown (" + value + ")"; } } public String getWhiteBalanceBiasDescription() { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_WHITE_BALANCE_BIAS)) return null; return _directory.getString(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_WHITE_BALANCE_BIAS); } public String getCasioPreviewThumbnailDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_CASIO_PREVIEW_THUMBNAIL)) return null; final byte[] bytes = _directory.getByteArray(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_CASIO_PREVIEW_THUMBNAIL); return "<" + bytes.length + " bytes of image data>"; } public String getPrintImageMatchingInfoDescription() { // TODO research PIM specification http://www.ozhiker.com/electronics/pjmt/jpeg_info/pim.html if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_PRINT_IMAGE_MATCHING_INFO)) return null; return _directory.getString(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_PRINT_IMAGE_MATCHING_INFO); } public String getSharpnessDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_SHARPNESS)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_SHARPNESS); switch (value) { case 0: return "-1"; case 1: return "Normal"; case 2: return "+1"; default: return "Unknown (" + value + ")"; } } public String getContrastDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_CONTRAST)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_CONTRAST); switch (value) { case 0: return "-1"; case 1: return "Normal"; case 2: return "+1"; default: return "Unknown (" + value + ")"; } } public String getSaturationDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_SATURATION)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_SATURATION); switch (value) { case 0: return "-1"; case 1: return "Normal"; case 2: return "+1"; default: return "Unknown (" + value + ")"; } } public String getFocalLengthDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_FOCAL_LENGTH)) return null; double value = _directory.getDouble(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_FOCAL_LENGTH); return Double.toString(value / 10d) + " mm"; } public String getWhiteBalance1Description() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_WHITE_BALANCE_1)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_WHITE_BALANCE_1); switch (value) { case 0: return "Auto"; case 1: return "Daylight"; case 2: return "Shade"; case 3: return "Tungsten"; case 4: return "Flourescent"; case 5: return "Manual"; default: return "Unknown (" + value + ")"; } } public String getIsoSensitivityDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_ISO_SENSITIVITY)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_ISO_SENSITIVITY); switch (value) { case 3: return "50"; case 4: return "64"; case 6: return "100"; case 9: return "200"; default: return "Unknown (" + value + ")"; } } public String getFocusMode1Description() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_FOCUS_MODE_1)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_FOCUS_MODE_1); switch (value) { case 0: return "Normal"; case 1: return "Macro"; default: return "Unknown (" + value + ")"; } } public String getImageSizeDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_IMAGE_SIZE)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_IMAGE_SIZE); switch (value) { case 0: return "640 x 480 pixels"; case 4: return "1600 x 1200 pixels"; case 5: return "2048 x 1536 pixels"; case 20: return "2288 x 1712 pixels"; case 21: return "2592 x 1944 pixels"; case 22: return "2304 x 1728 pixels"; case 36: return "3008 x 2008 pixels"; default: return "Unknown (" + value + ")"; } } public String getQualityModeDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_QUALITY_MODE)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_QUALITY_MODE); switch (value) { case 1: return "Fine"; case 2: return "Super Fine"; default: return "Unknown (" + value + ")"; } } public String getThumbnailOffsetDescription() { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_THUMBNAIL_OFFSET)) return null; return _directory.getString(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_THUMBNAIL_OFFSET); } public String getThumbnailSizeDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_THUMBNAIL_SIZE)) return null; int value = _directory.getInt(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_THUMBNAIL_SIZE); return Integer.toString(value) + " bytes"; } public String getThumbnailDimensionsDescription() throws MetadataException { if (!_directory.containsTag(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_THUMBNAIL_DIMENSIONS)) return null; int[] dimensions = _directory.getIntArray(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_THUMBNAIL_DIMENSIONS); if (dimensions.length!=2) return _directory.getString(CasioType2MakernoteDirectory.TAG_CASIO_TYPE2_THUMBNAIL_DIMENSIONS); return dimensions[0] + " x " + dimensions[1] + " pixels"; } }libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/CasioType2MakernoteDirectory.java0000644000000000000000000001661410716136374031033 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 27-Nov-2002 10:10:47 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import java.util.HashMap; /** * A standard TIFF IFD directory but always uses Motorola (Big-Endian) Byte Alignment. * Makernote data begins after a 6-byte header: "QVC\x00\x00\x00" */ public class CasioType2MakernoteDirectory extends Directory { /** * 2 values - x,y dimensions in pixels. */ public static final int TAG_CASIO_TYPE2_THUMBNAIL_DIMENSIONS = 0x0002; /** * Size in bytes */ public static final int TAG_CASIO_TYPE2_THUMBNAIL_SIZE = 0x0003; /** * Offset of Preview Thumbnail */ public static final int TAG_CASIO_TYPE2_THUMBNAIL_OFFSET = 0x0004; /** * 1 = Fine * 2 = Super Fine */ public static final int TAG_CASIO_TYPE2_QUALITY_MODE = 0x0008; /** * 0 = 640 x 480 pixels * 4 = 1600 x 1200 pixels * 5 = 2048 x 1536 pixels * 20 = 2288 x 1712 pixels * 21 = 2592 x 1944 pixels * 22 = 2304 x 1728 pixels * 36 = 3008 x 2008 pixels */ public static final int TAG_CASIO_TYPE2_IMAGE_SIZE = 0x0009; /** * 0 = Normal * 1 = Macro */ public static final int TAG_CASIO_TYPE2_FOCUS_MODE_1 = 0x000D; /** * 3 = 50 * 4 = 64 * 6 = 100 * 9 = 200 */ public static final int TAG_CASIO_TYPE2_ISO_SENSITIVITY = 0x0014; /** * 0 = Auto * 1 = Daylight * 2 = Shade * 3 = Tungsten * 4 = Fluorescent * 5 = Manual */ public static final int TAG_CASIO_TYPE2_WHITE_BALANCE_1 = 0x0019; /** * Units are tenths of a millimetre */ public static final int TAG_CASIO_TYPE2_FOCAL_LENGTH = 0x001D; /** * 0 = -1 * 1 = Normal * 2 = +1 */ public static final int TAG_CASIO_TYPE2_SATURATION = 0x001F; /** * 0 = -1 * 1 = Normal * 2 = +1 */ public static final int TAG_CASIO_TYPE2_CONTRAST = 0x0020; /** * 0 = -1 * 1 = Normal * 2 = +1 */ public static final int TAG_CASIO_TYPE2_SHARPNESS = 0x0021; /** * See PIM specification here: http://www.ozhiker.com/electronics/pjmt/jpeg_info/pim.html */ public static final int TAG_CASIO_TYPE2_PRINT_IMAGE_MATCHING_INFO = 0x0E00; /** * Alternate thumbnail offset */ public static final int TAG_CASIO_TYPE2_CASIO_PREVIEW_THUMBNAIL = 0x2000; /** * */ public static final int TAG_CASIO_TYPE2_WHITE_BALANCE_BIAS = 0x2011; /** * 12 = Flash * 0 = Manual * 1 = Auto? * 4 = Flash? */ public static final int TAG_CASIO_TYPE2_WHITE_BALANCE_2 = 0x2012; /** * Units are millimetres */ public static final int TAG_CASIO_TYPE2_OBJECT_DISTANCE = 0x2022; /** * 0 = Off */ public static final int TAG_CASIO_TYPE2_FLASH_DISTANCE = 0x2034; /** * 2 = Normal Mode */ public static final int TAG_CASIO_TYPE2_RECORD_MODE = 0x3000; /** * 1 = Off? */ public static final int TAG_CASIO_TYPE2_SELF_TIMER = 0x3001; /** * 3 = Fine */ public static final int TAG_CASIO_TYPE2_QUALITY = 0x3002; /** * 1 = Fixation * 6 = Multi-Area Auto Focus */ public static final int TAG_CASIO_TYPE2_FOCUS_MODE_2 = 0x3003; /** * (string) */ public static final int TAG_CASIO_TYPE2_TIME_ZONE = 0x3006; /** * */ public static final int TAG_CASIO_TYPE2_BESTSHOT_MODE = 0x3007; /** * 0 = Off * 1 = On? */ public static final int TAG_CASIO_TYPE2_CCD_ISO_SENSITIVITY = 0x3014; /** * 0 = Off */ public static final int TAG_CASIO_TYPE2_COLOUR_MODE = 0x3015; /** * 0 = Off */ public static final int TAG_CASIO_TYPE2_ENHANCEMENT = 0x3016; /** * 0 = Off */ public static final int TAG_CASIO_TYPE2_FILTER = 0x3017; protected static final HashMap tagNameMap = new HashMap(); static { // TODO add names tagNameMap.put(new Integer(TAG_CASIO_TYPE2_THUMBNAIL_DIMENSIONS), "Thumbnail Dimensions"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_THUMBNAIL_SIZE), "Thumbnail Size"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_THUMBNAIL_OFFSET), "Thumbnail Offset"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_QUALITY_MODE), "Quality Mode"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_IMAGE_SIZE), "Image Size"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_FOCUS_MODE_1), "Focus Mode"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_ISO_SENSITIVITY), "ISO Sensitivity"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_WHITE_BALANCE_1), "White Balance"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_FOCAL_LENGTH), "Focal Length"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_SATURATION), "Saturation"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_CONTRAST), "Contrast"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_SHARPNESS), "Sharpness"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_PRINT_IMAGE_MATCHING_INFO), "Print Image Matching (PIM) Info"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_CASIO_PREVIEW_THUMBNAIL), "Casio Preview Thumbnail"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_WHITE_BALANCE_BIAS), "White Balance Bias"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_WHITE_BALANCE_2), "White Balance"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_OBJECT_DISTANCE), "Object Distance"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_FLASH_DISTANCE), "Flash Distance"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_RECORD_MODE), "Record Mode"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_SELF_TIMER), "Self Timer"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_QUALITY), "Quality"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_FOCUS_MODE_2), "Focus Mode"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_TIME_ZONE), "Time Zone"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_BESTSHOT_MODE), "BestShot Mode"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_CCD_ISO_SENSITIVITY), "CCD ISO Sensitivity"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_COLOUR_MODE), "Colour Mode"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_ENHANCEMENT), "Enhancement"); tagNameMap.put(new Integer(TAG_CASIO_TYPE2_FILTER), "Filter"); } public CasioType2MakernoteDirectory() { this.setDescriptor(new CasioType2MakernoteDescriptor(this)); } public String getName() { return "Casio Makernote"; } protected HashMap getTagNameMap() { return tagNameMap; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/DataFormat.java0000644000000000000000000000512210716136374025330 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.metadata.exif; import com.drew.metadata.MetadataException; /** * An enumeration of data formats used in the TIFF IFDs. */ public class DataFormat { public static final DataFormat BYTE = new DataFormat("BYTE", 1); public static final DataFormat STRING = new DataFormat("STRING", 2); public static final DataFormat USHORT = new DataFormat("USHORT", 3); public static final DataFormat ULONG = new DataFormat("ULONG", 4); public static final DataFormat URATIONAL = new DataFormat("URATIONAL", 5); public static final DataFormat SBYTE = new DataFormat("SBYTE", 6); public static final DataFormat UNDEFINED = new DataFormat("UNDEFINED", 7); public static final DataFormat SSHORT = new DataFormat("SSHORT", 8); public static final DataFormat SLONG = new DataFormat("SLONG", 9); public static final DataFormat SRATIONAL = new DataFormat("SRATIONAL", 10); public static final DataFormat SINGLE = new DataFormat("SINGLE", 11); public static final DataFormat DOUBLE = new DataFormat("DOUBLE", 12); private final String myName; private final int value; public static DataFormat fromValue(int value) throws MetadataException { switch (value) { case 1: return BYTE; case 2: return STRING; case 3: return USHORT; case 4: return ULONG; case 5: return URATIONAL; case 6: return SBYTE; case 7: return UNDEFINED; case 8: return SSHORT; case 9: return SLONG; case 10: return SRATIONAL; case 11: return SINGLE; case 12: return DOUBLE; } throw new MetadataException("value '"+value+"' does not represent a known data format."); } private DataFormat(String name, int value) { myName = name; this.value = value; } public int getValue() { return value; } public String toString() { return myName; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/ExifDescriptor.java0000644000000000000000000013447410716136374026255 0ustar rootroot/* * ExifDescriptor.java * * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 12-Nov-2002 22:27:15 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.imaging.PhotographicConversions; import com.drew.lang.Rational; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import com.drew.metadata.TagDescriptor; import java.io.UnsupportedEncodingException; import java.text.DecimalFormat; /** * Contains all logic for the presentation of raw Exif data, as stored in ExifDirectory. Use * this class to provide human-readable descriptions of tag values. */ public class ExifDescriptor extends TagDescriptor { /** * Dictates whether rational values will be represented in decimal format in instances * where decimal notation is elegant (such as 1/2 -> 0.5, but not 1/3). */ private boolean _allowDecimalRepresentationOfRationals = true; private static final java.text.DecimalFormat SimpleDecimalFormatter = new DecimalFormat("0.#"); public ExifDescriptor(Directory directory) { super(directory); } // Note for the potential addition of brightness presentation in eV: // Brightness of taken subject. To calculate Exposure(Ev) from BrigtnessValue(Bv), // you must add SensitivityValue(Sv). // Ev=BV+Sv Sv=log2(ISOSpeedRating/3.125) // ISO100:Sv=5, ISO200:Sv=6, ISO400:Sv=7, ISO125:Sv=5.32. /** * Returns a descriptive value of the the specified tag for this image. * Where possible, known values will be substituted here in place of the raw * tokens actually kept in the Exif segment. If no substitution is * available, the value provided by getString(int) will be returned. * @param tagType the tag to find a description for * @return a description of the image's value for the specified tag, or * null if the tag hasn't been defined. */ public String getDescription(int tagType) throws MetadataException { switch (tagType) { case ExifDirectory.TAG_ORIENTATION: return getOrientationDescription(); case ExifDirectory.TAG_NEW_SUBFILE_TYPE: return getNewSubfileTypeDescription(); case ExifDirectory.TAG_SUBFILE_TYPE: return getSubfileTypeDescription(); case ExifDirectory.TAG_THRESHOLDING: return getThresholdingDescription(); case ExifDirectory.TAG_FILL_ORDER: return getFillOrderDescription(); case ExifDirectory.TAG_RESOLUTION_UNIT: return getResolutionDescription(); case ExifDirectory.TAG_YCBCR_POSITIONING: return getYCbCrPositioningDescription(); case ExifDirectory.TAG_EXPOSURE_TIME: return getExposureTimeDescription(); case ExifDirectory.TAG_SHUTTER_SPEED: return getShutterSpeedDescription(); case ExifDirectory.TAG_FNUMBER: return getFNumberDescription(); case ExifDirectory.TAG_X_RESOLUTION: return getXResolutionDescription(); case ExifDirectory.TAG_Y_RESOLUTION: return getYResolutionDescription(); case ExifDirectory.TAG_THUMBNAIL_OFFSET: return getThumbnailOffsetDescription(); case ExifDirectory.TAG_THUMBNAIL_LENGTH: return getThumbnailLengthDescription(); case ExifDirectory.TAG_COMPRESSION_LEVEL: return getCompressionLevelDescription(); case ExifDirectory.TAG_SUBJECT_DISTANCE: return getSubjectDistanceDescription(); case ExifDirectory.TAG_METERING_MODE: return getMeteringModeDescription(); case ExifDirectory.TAG_WHITE_BALANCE: return getWhiteBalanceDescription(); case ExifDirectory.TAG_FLASH: return getFlashDescription(); case ExifDirectory.TAG_FOCAL_LENGTH: return getFocalLengthDescription(); case ExifDirectory.TAG_COLOR_SPACE: return getColorSpaceDescription(); case ExifDirectory.TAG_EXIF_IMAGE_WIDTH: return getExifImageWidthDescription(); case ExifDirectory.TAG_EXIF_IMAGE_HEIGHT: return getExifImageHeightDescription(); case ExifDirectory.TAG_FOCAL_PLANE_UNIT: return getFocalPlaneResolutionUnitDescription(); case ExifDirectory.TAG_FOCAL_PLANE_X_RES: return getFocalPlaneXResolutionDescription(); case ExifDirectory.TAG_FOCAL_PLANE_Y_RES: return getFocalPlaneYResolutionDescription(); case ExifDirectory.TAG_THUMBNAIL_IMAGE_WIDTH: return getThumbnailImageWidthDescription(); case ExifDirectory.TAG_THUMBNAIL_IMAGE_HEIGHT: return getThumbnailImageHeightDescription(); case ExifDirectory.TAG_BITS_PER_SAMPLE: return getBitsPerSampleDescription(); case ExifDirectory.TAG_COMPRESSION: return getCompressionDescription(); case ExifDirectory.TAG_PHOTOMETRIC_INTERPRETATION: return getPhotometricInterpretationDescription(); case ExifDirectory.TAG_ROWS_PER_STRIP: return getRowsPerStripDescription(); case ExifDirectory.TAG_STRIP_BYTE_COUNTS: return getStripByteCountsDescription(); case ExifDirectory.TAG_SAMPLES_PER_PIXEL: return getSamplesPerPixelDescription(); case ExifDirectory.TAG_PLANAR_CONFIGURATION: return getPlanarConfigurationDescription(); case ExifDirectory.TAG_YCBCR_SUBSAMPLING: return getYCbCrSubsamplingDescription(); case ExifDirectory.TAG_EXPOSURE_PROGRAM: return getExposureProgramDescription(); case ExifDirectory.TAG_APERTURE: return getApertureValueDescription(); case ExifDirectory.TAG_MAX_APERTURE: return getMaxApertureValueDescription(); case ExifDirectory.TAG_SENSING_METHOD: return getSensingMethodDescription(); case ExifDirectory.TAG_EXPOSURE_BIAS: return getExposureBiasDescription(); case ExifDirectory.TAG_FILE_SOURCE: return getFileSourceDescription(); case ExifDirectory.TAG_SCENE_TYPE: return getSceneTypeDescription(); case ExifDirectory.TAG_COMPONENTS_CONFIGURATION: return getComponentConfigurationDescription(); case ExifDirectory.TAG_EXIF_VERSION: return getExifVersionDescription(); case ExifDirectory.TAG_FLASHPIX_VERSION: return getFlashPixVersionDescription(); case ExifDirectory.TAG_REFERENCE_BLACK_WHITE: return getReferenceBlackWhiteDescription(); case ExifDirectory.TAG_ISO_EQUIVALENT: return getIsoEquivalentDescription(); case ExifDirectory.TAG_THUMBNAIL_DATA: return getThumbnailDescription(); case ExifDirectory.TAG_USER_COMMENT: return getUserCommentDescription(); case ExifDirectory.TAG_CUSTOM_RENDERED: return getCustomRenderedDescription(); case ExifDirectory.TAG_EXPOSURE_MODE: return getExposureModeDescription(); case ExifDirectory.TAG_WHITE_BALANCE_MODE: return getWhiteBalanceModeDescription(); case ExifDirectory.TAG_DIGITAL_ZOOM_RATIO: return getDigitalZoomRatioDescription(); case ExifDirectory.TAG_35MM_FILM_EQUIV_FOCAL_LENGTH: return get35mmFilmEquivFocalLengthDescription(); case ExifDirectory.TAG_SCENE_CAPTURE_TYPE: return getSceneCaptureTypeDescription(); case ExifDirectory.TAG_GAIN_CONTROL: return getGainControlDescription(); case ExifDirectory.TAG_CONTRAST: return getContrastDescription(); case ExifDirectory.TAG_SATURATION: return getSaturationDescription(); case ExifDirectory.TAG_SHARPNESS: return getSharpnessDescription(); case ExifDirectory.TAG_SUBJECT_DISTANCE_RANGE: return getSubjectDistanceRangeDescription(); case ExifDirectory.TAG_WIN_AUTHOR: return getWindowsAuthorDescription(); case ExifDirectory.TAG_WIN_COMMENT: return getWindowsCommentDescription(); case ExifDirectory.TAG_WIN_KEYWORDS: return getWindowsKeywordsDescription(); case ExifDirectory.TAG_WIN_SUBJECT: return getWindowsSubjectDescription(); case ExifDirectory.TAG_WIN_TITLE: return getWindowsTitleDescription(); default: return _directory.getString(tagType); } } public String getNewSubfileTypeDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_NEW_SUBFILE_TYPE)) return null; switch (_directory.getInt(ExifDirectory.TAG_NEW_SUBFILE_TYPE)) { case 1: return "Full-resolution image"; case 2: return "Reduced-resolution image"; case 3: return "Single page of multi-page reduced-resolution image"; case 4: return "Transparency mask"; case 5: return "Transparency mask of reduced-resolution image"; case 6: return "Transparency mask of multi-page image"; case 7: return "Transparency mask of reduced-resolution multi-page image"; default: return "Unknown (" + _directory.getInt(ExifDirectory.TAG_NEW_SUBFILE_TYPE) + ")"; } } public String getSubfileTypeDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_SUBFILE_TYPE)) return null; switch (_directory.getInt(ExifDirectory.TAG_SUBFILE_TYPE)) { case 1: return "Full-resolution image"; case 2: return "Reduced-resolution image"; case 3: return "Single page of multi-page image"; default: return "Unknown (" + _directory.getInt(ExifDirectory.TAG_SUBFILE_TYPE) + ")"; } } public String getThresholdingDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_THRESHOLDING)) return null; switch (_directory.getInt(ExifDirectory.TAG_THRESHOLDING)) { case 1: return "No dithering or halftoning"; case 2: return "Ordered dither or halftone"; case 3: return "Randomized dither"; default: return "Unknown (" + _directory.getInt(ExifDirectory.TAG_THRESHOLDING) + ")"; } } public String getFillOrderDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_FILL_ORDER)) return null; switch (_directory.getInt(ExifDirectory.TAG_FILL_ORDER)) { case 1: return "Normal"; case 2: return "Reversed"; default: return "Unknown (" + _directory.getInt(ExifDirectory.TAG_FILL_ORDER) + ")"; } } public String getSubjectDistanceRangeDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_SUBJECT_DISTANCE_RANGE)) return null; switch (_directory.getInt(ExifDirectory.TAG_SUBJECT_DISTANCE_RANGE)) { case 0: return "Unknown"; case 1: return "Macro"; case 2: return "Close view"; case 3: return "Distant view"; default: return "Unknown (" + _directory.getInt(ExifDirectory.TAG_SUBJECT_DISTANCE_RANGE) + ")"; } } public String getSharpnessDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_SHARPNESS)) return null; switch (_directory.getInt(ExifDirectory.TAG_SHARPNESS)) { case 0: return "None"; case 1: return "Low"; case 2: return "Hard"; default: return "Unknown (" + _directory.getInt(ExifDirectory.TAG_SHARPNESS) + ")"; } } public String getSaturationDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_SATURATION)) return null; switch (_directory.getInt(ExifDirectory.TAG_SATURATION)) { case 0: return "None"; case 1: return "Low saturation"; case 2: return "High saturation"; default: return "Unknown (" + _directory.getInt(ExifDirectory.TAG_SATURATION) + ")"; } } public String getContrastDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_CONTRAST)) return null; switch (_directory.getInt(ExifDirectory.TAG_CONTRAST)) { case 0: return "None"; case 1: return "Soft"; case 2: return "Hard"; default: return "Unknown (" + _directory.getInt(ExifDirectory.TAG_CONTRAST) + ")"; } } public String getGainControlDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_GAIN_CONTROL)) return null; switch (_directory.getInt(ExifDirectory.TAG_GAIN_CONTROL)) { case 0: return "None"; case 1: return "Low gain up"; case 2: return "Low gain down"; case 3: return "High gain up"; case 4: return "High gain down"; default: return "Unknown (" + _directory.getInt(ExifDirectory.TAG_GAIN_CONTROL) + ")"; } } public String getSceneCaptureTypeDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_SCENE_CAPTURE_TYPE)) return null; switch (_directory.getInt(ExifDirectory.TAG_SCENE_CAPTURE_TYPE)) { case 0: return "Standard"; case 1: return "Landscape"; case 2: return "Portrait"; case 3: return "Night scene"; default: return "Unknown (" + _directory.getInt(ExifDirectory.TAG_SCENE_CAPTURE_TYPE) + ")"; } } public String get35mmFilmEquivFocalLengthDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_35MM_FILM_EQUIV_FOCAL_LENGTH)) return null; int equivalentFocalLength = _directory.getInt(ExifDirectory.TAG_35MM_FILM_EQUIV_FOCAL_LENGTH); if (equivalentFocalLength==0) return "Unknown"; else return SimpleDecimalFormatter.format(equivalentFocalLength) + "mm"; } public String getDigitalZoomRatioDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_DIGITAL_ZOOM_RATIO)) return null; Rational rational = _directory.getRational(ExifDirectory.TAG_DIGITAL_ZOOM_RATIO); if (rational.getNumerator()==0) return "Digital zoom not used."; return SimpleDecimalFormatter.format(rational.doubleValue()); } public String getWhiteBalanceModeDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_WHITE_BALANCE_MODE)) return null; switch (_directory.getInt(ExifDirectory.TAG_WHITE_BALANCE_MODE)) { case 0: return "Auto white balance"; case 1: return "Manual white balance"; default: return "Unknown (" + _directory.getInt(ExifDirectory.TAG_WHITE_BALANCE_MODE) + ")"; } } public String getExposureModeDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_EXPOSURE_MODE)) return null; switch (_directory.getInt(ExifDirectory.TAG_EXPOSURE_MODE)) { case 0: return "Auto exposure"; case 1: return "Manual exposure"; case 2: return "Auto bracket"; default: return "Unknown (" + _directory.getInt(ExifDirectory.TAG_EXPOSURE_MODE) + ")"; } } public String getCustomRenderedDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_CUSTOM_RENDERED)) return null; switch (_directory.getInt(ExifDirectory.TAG_CUSTOM_RENDERED)) { case 0: return "Normal process"; case 1: return "Custom process"; default: return "Unknown (" + _directory.getInt(ExifDirectory.TAG_CUSTOM_RENDERED) + ")"; } } public String getUserCommentDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_USER_COMMENT)) return null; byte[] commentBytes = _directory.getByteArray(ExifDirectory.TAG_USER_COMMENT); if (commentBytes.length==0) return ""; final String[] encodingNames = new String[] { "ASCII", "UNICODE", "JIS" }; if (commentBytes.length>=10) { String encodingRegion = new String(commentBytes, 0, 10); // try each encoding name for (int i = 0; i 1) apexPower = Math.floor(apexPower); if (apexPower < 1) { sb.append((int)Math.round(1/apexPower)); } else { sb.append("1/"); sb.append((int)apexPower); } sb.append(" sec"); return sb.toString(); */ } public String getFNumberDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_FNUMBER)) return null; Rational fNumber = _directory.getRational(ExifDirectory.TAG_FNUMBER); return "F" + SimpleDecimalFormatter.format(fNumber.doubleValue()); } public String getYCbCrPositioningDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_YCBCR_POSITIONING)) return null; int yCbCrPosition = _directory.getInt(ExifDirectory.TAG_YCBCR_POSITIONING); switch (yCbCrPosition) { case 1: return "Center of pixel array"; case 2: return "Datum point"; default: return String.valueOf(yCbCrPosition); } } public String getOrientationDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_ORIENTATION)) return null; int orientation = _directory.getInt(ExifDirectory.TAG_ORIENTATION); switch (orientation) { case 1: return "Top, left side (Horizontal / normal)"; case 2: return "Top, right side (Mirror horizontal)"; case 3: return "Bottom, right side (Rotate 180)"; case 4: return "Bottom, left side (Mirror vertical)"; case 5: return "Left side, top (Mirror horizontal and rotate 270 CW)"; case 6: return "Right side, top (Rotate 90 CW)"; case 7: return "Right side, bottom (Mirror horizontal and rotate 90 CW)"; case 8: return "Left side, bottom (Rotate 270 CW)"; default: return String.valueOf(orientation); } } public String getResolutionDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_RESOLUTION_UNIT)) return ""; // '1' means no-unit, '2' means inch, '3' means centimeter. Default value is '2'(inch) int resolutionUnit = _directory.getInt(ExifDirectory.TAG_RESOLUTION_UNIT); switch (resolutionUnit) { case 1: return "(No unit)"; case 2: return "Inch"; case 3: return "cm"; default: return ""; } } public String getSensingMethodDescription() throws MetadataException { if (!_directory.containsTag(ExifDirectory.TAG_SENSING_METHOD)) return null; // '1' Not defined, '2' One-chip color area sensor, '3' Two-chip color area sensor // '4' Three-chip color area sensor, '5' Color sequential area sensor // '7' Trilinear sensor '8' Color sequential linear sensor, 'Other' reserved int sensingMethod = _directory.getInt(ExifDirectory.TAG_SENSING_METHOD); switch (sensingMethod) { case 1: return "(Not defined)"; case 2: return "One-chip color area sensor"; case 3: return "Two-chip color area sensor"; case 4: return "Three-chip color area sensor"; case 5: return "Color sequential area sensor"; case 7: return "Trilinear sensor"; case 8: return "Color sequential linear sensor"; default: return ""; } } public String getComponentConfigurationDescription() throws MetadataException { int[] components = _directory.getIntArray(ExifDirectory.TAG_COMPONENTS_CONFIGURATION); String[] componentStrings = {"", "Y", "Cb", "Cr", "R", "G", "B"}; StringBuffer componentConfig = new StringBuffer(); for (int i = 0; i < Math.min(4, components.length); i++) { int j = components[i]; if (j > 0 && j < componentStrings.length) { componentConfig.append(componentStrings[j]); } } return componentConfig.toString(); } /** * Takes a series of 4 bytes from the specified offset, and converts these to a * well-known version number, where possible. For example, (hex) 30 32 31 30 == 2.10). * @param components the four version values * @return the version as a string of form 2.10 */ public static String convertBytesToVersionString(int[] components) { StringBuffer version = new StringBuffer(); for (int i = 0; i < 4 && i < components.length; i++) { if (i == 2) version.append('.'); String digit = String.valueOf((char)components[i]); if (i == 0 && "0".equals(digit)) continue; version.append(digit); } return version.toString(); } /** * The Windows specific tags uses plain Unicode */ private String getUnicodeDescription(int tag) throws MetadataException { if (!_directory.containsTag(tag)) return null; byte[] commentBytes = _directory.getByteArray(tag); try { // decode the unicode string // trim it, as i'm seeing a junk character on the end return new String(commentBytes, "UTF-16LE").trim(); } catch (UnsupportedEncodingException ex) { return null; } } public String getWindowsAuthorDescription() throws MetadataException { return getUnicodeDescription(ExifDirectory.TAG_WIN_AUTHOR); } public String getWindowsCommentDescription() throws MetadataException { return getUnicodeDescription(ExifDirectory.TAG_WIN_COMMENT); } public String getWindowsKeywordsDescription() throws MetadataException { return getUnicodeDescription(ExifDirectory.TAG_WIN_KEYWORDS); } public String getWindowsTitleDescription() throws MetadataException { return getUnicodeDescription(ExifDirectory.TAG_WIN_TITLE); } public String getWindowsSubjectDescription() throws MetadataException { return getUnicodeDescription(ExifDirectory.TAG_WIN_SUBJECT); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/ExifDirectory.java0000644000000000000000000012130510716136374026070 0ustar rootroot/* * ExifDirectory.java * * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 25-Nov-2002 20:41:00 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; /** * */ public class ExifDirectory extends Directory { // TODO do these tags belong in the exif directory? public static final int TAG_SUB_IFDS = 0x014A; public static final int TAG_GPS_INFO = 0x8825; /** * The actual aperture value of lens when the image was taken. Unit is APEX. * To convert this value to ordinary F-number (F-stop), calculate this value's * power of root 2 (=1.4142). For example, if the ApertureValue is '5', * F-number is 1.4142^5 = F5.6. */ public static final int TAG_APERTURE = 0x9202; /** * When image format is no compression, this value shows the number of bits * per component for each pixel. Usually this value is '8,8,8'. */ public static final int TAG_BITS_PER_SAMPLE = 0x0102; /** * Shows compression method for Thumbnail. * 1 = Uncompressed * 2 = CCITT 1D * 3 = T4/Group 3 Fax * 4 = T6/Group 4 Fax * 5 = LZW * 6 = JPEG (old-style) * 7 = JPEG * 8 = Adobe Deflate * 9 = JBIG B&W * 10 = JBIG Color * 32766 = Next * 32771 = CCIRLEW * 32773 = PackBits * 32809 = Thunderscan * 32895 = IT8CTPAD * 32896 = IT8LW * 32897 = IT8MP * 32898 = IT8BL * 32908 = PixarFilm * 32909 = PixarLog * 32946 = Deflate * 32947 = DCS * 34661 = JBIG * 34676 = SGILog * 34677 = SGILog24 * 34712 = JPEG 2000 * 34713 = Nikon NEF Compressed */ public static final int TAG_COMPRESSION = 0x0103; public static final int COMPRESSION_NONE = 1; public static final int COMPRESSION_JPEG = 6; /** * Shows the color space of the image data components. * 0 = WhiteIsZero * 1 = BlackIsZero * 2 = RGB * 3 = RGB Palette * 4 = Transparency Mask * 5 = CMYK * 6 = YCbCr * 8 = CIELab * 9 = ICCLab * 10 = ITULab * 32803 = Color Filter Array * 32844 = Pixar LogL * 32845 = Pixar LogLuv * 34892 = Linear Raw */ public static final int TAG_PHOTOMETRIC_INTERPRETATION = 0x0106; /** * 1 = No dithering or halftoning * 2 = Ordered dither or halftone * 3 = Randomized dither */ public static final int TAG_THRESHOLDING = 0x0107; public static final int PHOTOMETRIC_INTERPRETATION_MONOCHROME = 1; public static final int PHOTOMETRIC_INTERPRETATION_RGB = 2; public static final int PHOTOMETRIC_INTERPRETATION_YCBCR = 6; /** The position in the file of raster data. */ public static final int TAG_STRIP_OFFSETS = 0x0111; /** Each pixel is composed of this many samples. */ public static final int TAG_SAMPLES_PER_PIXEL = 0x0115; /** The raster is codified by a single block of data holding this many rows. */ public static final int TAG_ROWS_PER_STRIP = 0x116; /** The size of the raster data in bytes. */ public static final int TAG_STRIP_BYTE_COUNTS = 0x0117; public static final int TAG_MIN_SAMPLE_VALUE = 0x0118; public static final int TAG_MAX_SAMPLE_VALUE = 0x0119; /** * When image format is no compression YCbCr, this value shows byte aligns of * YCbCr data. If value is '1', Y/Cb/Cr value is chunky format, contiguous for * each subsampling pixel. If value is '2', Y/Cb/Cr value is separated and * stored to Y plane/Cb plane/Cr plane format. */ public static final int TAG_PLANAR_CONFIGURATION = 0x011C; public static final int TAG_YCBCR_SUBSAMPLING = 0x0212; public static final int TAG_IMAGE_DESCRIPTION = 0x010E; public static final int TAG_SOFTWARE = 0x0131; public static final int TAG_DATETIME = 0x0132; public static final int TAG_WHITE_POINT = 0x013E; public static final int TAG_PRIMARY_CHROMATICITIES = 0x013F; public static final int TAG_YCBCR_COEFFICIENTS = 0x0211; public static final int TAG_REFERENCE_BLACK_WHITE = 0x0214; public static final int TAG_COPYRIGHT = 0x8298; /** * The new subfile type tag. * 0 = Full-resolution Image * 1 = Reduced-resolution image * 2 = Single page of multi-page image * 3 = Single page of multi-page reduced-resolution image * 4 = Transparency mask * 5 = Transparency mask of reduced-resolution image * 6 = Transparency mask of multi-page image * 7 = Transparency mask of reduced-resolution multi-page image */ public static final int TAG_NEW_SUBFILE_TYPE = 0x00FE; /** * The old subfile type tag. * 1 = Full-resolution image (Main image) * 2 = Reduced-resolution image (Thumbnail) * 3 = Single page of multi-page image */ public static final int TAG_SUBFILE_TYPE = 0x00FF; public static final int TAG_TRANSFER_FUNCTION = 0x012D; public static final int TAG_ARTIST = 0x013B; public static final int TAG_PREDICTOR = 0x013D; public static final int TAG_TILE_WIDTH = 0x0142; public static final int TAG_TILE_LENGTH = 0x0143; public static final int TAG_TILE_OFFSETS = 0x0144; public static final int TAG_TILE_BYTE_COUNTS = 0x0145; public static final int TAG_JPEG_TABLES = 0x015B; public static final int TAG_CFA_REPEAT_PATTERN_DIM = 0x828D; /** There are two definitions for CFA pattern, I don't know the difference... */ public static final int TAG_CFA_PATTERN_2 = 0x828E; public static final int TAG_BATTERY_LEVEL = 0x828F; public static final int TAG_IPTC_NAA = 0x83BB; public static final int TAG_INTER_COLOR_PROFILE = 0x8773; public static final int TAG_SPECTRAL_SENSITIVITY = 0x8824; public static final int TAG_OECF = 0x8828; public static final int TAG_INTERLACE = 0x8829; public static final int TAG_TIME_ZONE_OFFSET = 0x882A; public static final int TAG_SELF_TIMER_MODE = 0x882B; public static final int TAG_FLASH_ENERGY = 0x920B; public static final int TAG_SPATIAL_FREQ_RESPONSE = 0x920C; public static final int TAG_NOISE = 0x920D; public static final int TAG_IMAGE_NUMBER = 0x9211; public static final int TAG_SECURITY_CLASSIFICATION = 0x9212; public static final int TAG_IMAGE_HISTORY = 0x9213; public static final int TAG_SUBJECT_LOCATION = 0x9214; /** There are two definitions for exposure index, I don't know the difference... */ public static final int TAG_EXPOSURE_INDEX_2 = 0x9215; public static final int TAG_TIFF_EP_STANDARD_ID = 0x9216; public static final int TAG_FLASH_ENERGY_2 = 0xA20B; public static final int TAG_SPATIAL_FREQ_RESPONSE_2 = 0xA20C; public static final int TAG_SUBJECT_LOCATION_2 = 0xA214; public static final int TAG_MAKE = 0x010F; public static final int TAG_MODEL = 0x0110; public static final int TAG_ORIENTATION = 0x0112; public static final int TAG_X_RESOLUTION = 0x011A; public static final int TAG_Y_RESOLUTION = 0x011B; public static final int TAG_PAGE_NAME = 0x011D; public static final int TAG_RESOLUTION_UNIT = 0x0128; public static final int TAG_THUMBNAIL_OFFSET = 0x0201; public static final int TAG_THUMBNAIL_LENGTH = 0x0202; public static final int TAG_YCBCR_POSITIONING = 0x0213; /** * Exposure time (reciprocal of shutter speed). Unit is second. */ public static final int TAG_EXPOSURE_TIME = 0x829A; /** * The actual F-number(F-stop) of lens when the image was taken. */ public static final int TAG_FNUMBER = 0x829D; /** * Exposure program that the camera used when image was taken. '1' means * manual control, '2' program normal, '3' aperture priority, '4' shutter * priority, '5' program creative (slow program), '6' program action * (high-speed program), '7' portrait mode, '8' landscape mode. */ public static final int TAG_EXPOSURE_PROGRAM = 0x8822; public static final int TAG_ISO_EQUIVALENT = 0x8827; public static final int TAG_EXIF_VERSION = 0x9000; public static final int TAG_DATETIME_ORIGINAL = 0x9003; public static final int TAG_DATETIME_DIGITIZED = 0x9004; public static final int TAG_COMPONENTS_CONFIGURATION = 0x9101; /** * Average (rough estimate) compression level in JPEG bits per pixel. * */ public static final int TAG_COMPRESSION_LEVEL = 0x9102; /** * Shutter speed by APEX value. To convert this value to ordinary 'Shutter Speed'; * calculate this value's power of 2, then reciprocal. For example, if the * ShutterSpeedValue is '4', shutter speed is 1/(24)=1/16 second. */ public static final int TAG_SHUTTER_SPEED = 0x9201; public static final int TAG_BRIGHTNESS_VALUE = 0x9203; public static final int TAG_EXPOSURE_BIAS = 0x9204; /** * Maximum aperture value of lens. You can convert to F-number by calculating * power of root 2 (same process of ApertureValue:0x9202). * The actual aperture value of lens when the image was taken. To convert this * value to ordinary f-number(f-stop), calculate the value's power of root 2 * (=1.4142). For example, if the ApertureValue is '5', f-number is 1.41425^5 = F5.6. */ public static final int TAG_MAX_APERTURE = 0x9205; /** * Indicates the distance the autofocus camera is focused to. Tends to be less accurate as distance increases. */ public static final int TAG_SUBJECT_DISTANCE = 0x9206; /** * Exposure metering method. '0' means unknown, '1' average, '2' center * weighted average, '3' spot, '4' multi-spot, '5' multi-segment, '6' partial, * '255' other. */ public static final int TAG_METERING_MODE = 0x9207; public static final int TAG_LIGHT_SOURCE = 0x9208; /** * White balance (aka light source). '0' means unknown, '1' daylight, * '2' fluorescent, '3' tungsten, '10' flash, '17' standard light A, * '18' standard light B, '19' standard light C, '20' D55, '21' D65, * '22' D75, '255' other. */ public static final int TAG_WHITE_BALANCE = 0x9208; /** * 0x0 = 0000000 = No Flash * 0x1 = 0000001 = Fired * 0x5 = 0000101 = Fired, Return not detected * 0x7 = 0000111 = Fired, Return detected * 0x9 = 0001001 = On * 0xd = 0001101 = On, Return not detected * 0xf = 0001111 = On, Return detected * 0x10 = 0010000 = Off * 0x18 = 0011000 = Auto, Did not fire * 0x19 = 0011001 = Auto, Fired * 0x1d = 0011101 = Auto, Fired, Return not detected * 0x1f = 0011111 = Auto, Fired, Return detected * 0x20 = 0100000 = No flash function * 0x41 = 1000001 = Fired, Red-eye reduction * 0x45 = 1000101 = Fired, Red-eye reduction, Return not detected * 0x47 = 1000111 = Fired, Red-eye reduction, Return detected * 0x49 = 1001001 = On, Red-eye reduction * 0x4d = 1001101 = On, Red-eye reduction, Return not detected * 0x4f = 1001111 = On, Red-eye reduction, Return detected * 0x59 = 1011001 = Auto, Fired, Red-eye reduction * 0x5d = 1011101 = Auto, Fired, Red-eye reduction, Return not detected * 0x5f = 1011111 = Auto, Fired, Red-eye reduction, Return detected * 6543210 (positions) * * This is a bitmask. * 0 = flash fired * 1 = return detected * 2 = return able to be detected * 3 = unknown * 4 = auto used * 5 = unknown * 6 = red eye reduction used */ public static final int TAG_FLASH = 0x9209; /** * Focal length of lens used to take image. Unit is millimeter. * Nice digital cameras actually save the focal length as a function of how far they are zoomed in. */ public static final int TAG_FOCAL_LENGTH = 0x920A; public static final int TAG_USER_COMMENT = 0x9286; public static final int TAG_SUBSECOND_TIME = 0x9290; public static final int TAG_SUBSECOND_TIME_ORIGINAL = 0x9291; public static final int TAG_SUBSECOND_TIME_DIGITIZED = 0x9292; public static final int TAG_FLASHPIX_VERSION = 0xA000; /** * Defines Color Space. DCF image must use sRGB color space so value is * always '1'. If the picture uses the other color space, value is * '65535':Uncalibrated. */ public static final int TAG_COLOR_SPACE = 0xA001; public static final int TAG_EXIF_IMAGE_WIDTH = 0xA002; public static final int TAG_EXIF_IMAGE_HEIGHT = 0xA003; public static final int TAG_RELATED_SOUND_FILE = 0xA004; public static final int TAG_FOCAL_PLANE_X_RES = 0xA20E; public static final int TAG_FOCAL_PLANE_Y_RES = 0xA20F; /** * Unit of FocalPlaneXResoluton/FocalPlaneYResolution. '1' means no-unit, * '2' inch, '3' centimeter. * * Note: Some of Fujifilm's digicam(e.g.FX2700,FX2900,Finepix4700Z/40i etc) * uses value '3' so it must be 'centimeter', but it seems that they use a * '8.3mm?'(1/3in.?) to their ResolutionUnit. Fuji's BUG? Finepix4900Z has * been changed to use value '2' but it doesn't match to actual value also. */ public static final int TAG_FOCAL_PLANE_UNIT = 0xA210; public static final int TAG_EXPOSURE_INDEX = 0xA215; public static final int TAG_SENSING_METHOD = 0xA217; public static final int TAG_FILE_SOURCE = 0xA300; public static final int TAG_SCENE_TYPE = 0xA301; public static final int TAG_CFA_PATTERN = 0xA302; // these tags new with Exif 2.2 (?) [A401 - A4 /** * This tag indicates the use of special processing on image data, such as rendering * geared to output. When special processing is performed, the reader is expected to * disable or minimize any further processing. * Tag = 41985 (A401.H) * Type = SHORT * Count = 1 * Default = 0 * 0 = Normal process * 1 = Custom process * Other = reserved */ public static final int TAG_CUSTOM_RENDERED = 0xA401; /** * This tag indicates the exposure mode set when the image was shot. In auto-bracketing * mode, the camera shoots a series of frames of the same scene at different exposure settings. * Tag = 41986 (A402.H) * Type = SHORT * Count = 1 * Default = none * 0 = Auto exposure * 1 = Manual exposure * 2 = Auto bracket * Other = reserved */ public static final int TAG_EXPOSURE_MODE = 0xA402; /** * This tag indicates the white balance mode set when the image was shot. * Tag = 41987 (A403.H) * Type = SHORT * Count = 1 * Default = none * 0 = Auto white balance * 1 = Manual white balance * Other = reserved */ public static final int TAG_WHITE_BALANCE_MODE = 0xA403; /** * This tag indicates the digital zoom ratio when the image was shot. If the * numerator of the recorded value is 0, this indicates that digital zoom was * not used. * Tag = 41988 (A404.H) * Type = RATIONAL * Count = 1 * Default = none */ public static final int TAG_DIGITAL_ZOOM_RATIO = 0xA404; /** * This tag indicates the equivalent focal length assuming a 35mm film camera, * in mm. A value of 0 means the focal length is unknown. Note that this tag * differs from the FocalLength tag. * Tag = 41989 (A405.H) * Type = SHORT * Count = 1 * Default = none */ public static final int TAG_35MM_FILM_EQUIV_FOCAL_LENGTH = 0xA405; /** * This tag indicates the type of scene that was shot. It can also be used to * record the mode in which the image was shot. Note that this differs from * the scene type (SceneType) tag. * Tag = 41990 (A406.H) * Type = SHORT * Count = 1 * Default = 0 * 0 = Standard * 1 = Landscape * 2 = Portrait * 3 = Night scene * Other = reserved */ public static final int TAG_SCENE_CAPTURE_TYPE = 0xA406; /** * This tag indicates the degree of overall image gain adjustment. * Tag = 41991 (A407.H) * Type = SHORT * Count = 1 * Default = none * 0 = None * 1 = Low gain up * 2 = High gain up * 3 = Low gain down * 4 = High gain down * Other = reserved */ public static final int TAG_GAIN_CONTROL = 0xA407; /** * This tag indicates the direction of contrast processing applied by the camera * when the image was shot. * Tag = 41992 (A408.H) * Type = SHORT * Count = 1 * Default = 0 * 0 = Normal * 1 = Soft * 2 = Hard * Other = reserved */ public static final int TAG_CONTRAST = 0xA408; /** * This tag indicates the direction of saturation processing applied by the camera * when the image was shot. * Tag = 41993 (A409.H) * Type = SHORT * Count = 1 * Default = 0 * 0 = Normal * 1 = Low saturation * 2 = High saturation * Other = reserved */ public static final int TAG_SATURATION = 0xA409; /** * This tag indicates the direction of sharpness processing applied by the camera * when the image was shot. * Tag = 41994 (A40A.H) * Type = SHORT * Count = 1 * Default = 0 * 0 = Normal * 1 = Soft * 2 = Hard * Other = reserved */ public static final int TAG_SHARPNESS = 0xA40A; // TODO support this tag (I haven't seen a camera's actual implementation of this yet) /** * This tag indicates information on the picture-taking conditions of a particular * camera model. The tag is used only to indicate the picture-taking conditions in * the reader. * Tag = 41995 (A40B.H) * Type = UNDEFINED * Count = Any * Default = none * * The information is recorded in the format shown below. The data is recorded * in Unicode using SHORT type for the number of display rows and columns and * UNDEFINED type for the camera settings. The Unicode (UCS-2) string including * Signature is NULL terminated. The specifics of the Unicode string are as given * in ISO/IEC 10464-1. * * Length Type Meaning * ------+-----------+------------------ * 2 SHORT Display columns * 2 SHORT Display rows * Any UNDEFINED Camera setting-1 * Any UNDEFINED Camera setting-2 * : : : * Any UNDEFINED Camera setting-n */ public static final int TAG_DEVICE_SETTING_DESCRIPTION = 0xA40B; /** * This tag indicates the distance to the subject. * Tag = 41996 (A40C.H) * Type = SHORT * Count = 1 * Default = none * 0 = unknown * 1 = Macro * 2 = Close view * 3 = Distant view * Other = reserved */ public static final int TAG_SUBJECT_DISTANCE_RANGE = 0xA40C; /** * The image title, as used by Windows XP. */ public static final int TAG_WIN_TITLE = 0x9C9B; /** * The image comment, as used by Windows XP. */ public static final int TAG_WIN_COMMENT = 0x9C9C; /** * The image author, as used by Windows XP (called Artist in the Windows shell). */ public static final int TAG_WIN_AUTHOR = 0x9C9D; /** * The image keywords, as used by Windows XP. */ public static final int TAG_WIN_KEYWORDS = 0x9C9E; /** * The image subject, as used by Windows XP. */ public static final int TAG_WIN_SUBJECT = 0x9C9F; /** * This tag indicates an identifier assigned uniquely to each image. It is * recorded as an ASCII string equivalent to hexadecimal notation and 128-bit * fixed length. * Tag = 42016 (A420.H) * Type = ASCII * Count = 33 * Default = none */ public static final int TAG_IMAGE_UNIQUE_ID = 0xA420; public static final int TAG_THUMBNAIL_IMAGE_WIDTH = 0x0100; public static final int TAG_THUMBNAIL_IMAGE_HEIGHT = 0x0101; public static final int TAG_THUMBNAIL_DATA = 0xF001; /** * 1 = Normal * 2 = Reversed */ public static final int TAG_FILL_ORDER = 0x010A; public static final int TAG_DOCUMENT_NAME = 0x010D; protected static final HashMap tagNameMap = new HashMap(); static { tagNameMap.put(new Integer(TAG_FILL_ORDER), "Fill Order"); tagNameMap.put(new Integer(TAG_DOCUMENT_NAME), "Document Name"); tagNameMap.put(new Integer(0x1000), "Related Image File Format"); tagNameMap.put(new Integer(0x1001), "Related Image Width"); tagNameMap.put(new Integer(0x1002), "Related Image Length"); tagNameMap.put(new Integer(0x0156), "Transfer Range"); tagNameMap.put(new Integer(0x0200), "JPEG Proc"); tagNameMap.put(new Integer(0x8769), "Exif Offset"); tagNameMap.put(new Integer(TAG_COMPRESSION_LEVEL), "Compressed Bits Per Pixel"); tagNameMap.put(new Integer(0x927C), "Maker Note"); tagNameMap.put(new Integer(0xA005), "Interoperability Offset"); tagNameMap.put(new Integer(TAG_NEW_SUBFILE_TYPE), "New Subfile Type"); tagNameMap.put(new Integer(TAG_SUBFILE_TYPE), "Subfile Type"); tagNameMap.put(new Integer(TAG_THUMBNAIL_IMAGE_WIDTH), "Thumbnail Image Width"); tagNameMap.put(new Integer(TAG_THUMBNAIL_IMAGE_HEIGHT), "Thumbnail Image Height"); tagNameMap.put(new Integer(TAG_BITS_PER_SAMPLE), "Bits Per Sample"); tagNameMap.put(new Integer(TAG_COMPRESSION), "Compression"); tagNameMap.put(new Integer(TAG_PHOTOMETRIC_INTERPRETATION), "Photometric Interpretation"); tagNameMap.put(new Integer(TAG_THRESHOLDING), "Thresholding"); tagNameMap.put(new Integer(TAG_IMAGE_DESCRIPTION), "Image Description"); tagNameMap.put(new Integer(TAG_MAKE), "Make"); tagNameMap.put(new Integer(TAG_MODEL), "Model"); tagNameMap.put(new Integer(TAG_STRIP_OFFSETS), "Strip Offsets"); tagNameMap.put(new Integer(TAG_ORIENTATION), "Orientation"); tagNameMap.put(new Integer(TAG_SAMPLES_PER_PIXEL), "Samples Per Pixel"); tagNameMap.put(new Integer(TAG_ROWS_PER_STRIP), "Rows Per Strip"); tagNameMap.put(new Integer(TAG_STRIP_BYTE_COUNTS), "Strip Byte Counts"); tagNameMap.put(new Integer(TAG_X_RESOLUTION), "X Resolution"); tagNameMap.put(new Integer(TAG_Y_RESOLUTION), "Y Resolution"); tagNameMap.put(new Integer(TAG_PAGE_NAME), "Page Name"); tagNameMap.put(new Integer(TAG_PLANAR_CONFIGURATION), "Planar Configuration"); tagNameMap.put(new Integer(TAG_RESOLUTION_UNIT), "Resolution Unit"); tagNameMap.put(new Integer(TAG_TRANSFER_FUNCTION), "Transfer Function"); tagNameMap.put(new Integer(TAG_SOFTWARE), "Software"); tagNameMap.put(new Integer(TAG_DATETIME), "Date/Time"); tagNameMap.put(new Integer(TAG_ARTIST), "Artist"); tagNameMap.put(new Integer(TAG_PREDICTOR), "Predictor"); tagNameMap.put(new Integer(TAG_WHITE_POINT), "White Point"); tagNameMap.put(new Integer(TAG_PRIMARY_CHROMATICITIES), "Primary Chromaticities"); tagNameMap.put(new Integer(TAG_TILE_WIDTH), "Tile Width"); tagNameMap.put(new Integer(TAG_TILE_LENGTH), "Tile Length"); tagNameMap.put(new Integer(TAG_TILE_OFFSETS), "Tile Offsets"); tagNameMap.put(new Integer(TAG_TILE_BYTE_COUNTS), "Tile Byte Counts"); tagNameMap.put(new Integer(TAG_SUB_IFDS), "Sub IFDs"); tagNameMap.put(new Integer(TAG_JPEG_TABLES), "JPEG Tables"); tagNameMap.put(new Integer(TAG_THUMBNAIL_OFFSET), "Thumbnail Offset"); tagNameMap.put(new Integer(TAG_THUMBNAIL_LENGTH), "Thumbnail Length"); tagNameMap.put(new Integer(TAG_THUMBNAIL_DATA), "Thumbnail Data"); tagNameMap.put(new Integer(TAG_YCBCR_COEFFICIENTS), "YCbCr Coefficients"); tagNameMap.put(new Integer(TAG_YCBCR_SUBSAMPLING), "YCbCr Sub-Sampling"); tagNameMap.put(new Integer(TAG_YCBCR_POSITIONING), "YCbCr Positioning"); tagNameMap.put(new Integer(TAG_REFERENCE_BLACK_WHITE), "Reference Black/White"); tagNameMap.put(new Integer(TAG_CFA_REPEAT_PATTERN_DIM), "CFA Repeat Pattern Dim"); tagNameMap.put(new Integer(TAG_CFA_PATTERN_2), "CFA Pattern"); tagNameMap.put(new Integer(TAG_BATTERY_LEVEL), "Battery Level"); tagNameMap.put(new Integer(TAG_COPYRIGHT), "Copyright"); tagNameMap.put(new Integer(TAG_EXPOSURE_TIME), "Exposure Time"); tagNameMap.put(new Integer(TAG_FNUMBER), "F-Number"); tagNameMap.put(new Integer(TAG_IPTC_NAA), "IPTC/NAA"); tagNameMap.put(new Integer(TAG_INTER_COLOR_PROFILE), "Inter Color Profile"); tagNameMap.put(new Integer(TAG_EXPOSURE_PROGRAM), "Exposure Program"); tagNameMap.put(new Integer(TAG_SPECTRAL_SENSITIVITY), "Spectral Sensitivity"); tagNameMap.put(new Integer(TAG_GPS_INFO), "GPS Info"); tagNameMap.put(new Integer(TAG_ISO_EQUIVALENT), "ISO Speed Ratings"); tagNameMap.put(new Integer(TAG_OECF), "OECF"); tagNameMap.put(new Integer(TAG_INTERLACE), "Interlace"); tagNameMap.put(new Integer(TAG_TIME_ZONE_OFFSET), "Time Zone Offset"); tagNameMap.put(new Integer(TAG_SELF_TIMER_MODE), "Self Timer Mode"); tagNameMap.put(new Integer(TAG_EXIF_VERSION), "Exif Version"); tagNameMap.put(new Integer(TAG_DATETIME_ORIGINAL), "Date/Time Original"); tagNameMap.put(new Integer(TAG_DATETIME_DIGITIZED), "Date/Time Digitized"); tagNameMap.put(new Integer(TAG_COMPONENTS_CONFIGURATION), "Components Configuration"); tagNameMap.put(new Integer(TAG_SHUTTER_SPEED), "Shutter Speed Value"); tagNameMap.put(new Integer(TAG_APERTURE), "Aperture Value"); tagNameMap.put(new Integer(TAG_BRIGHTNESS_VALUE), "Brightness Value"); tagNameMap.put(new Integer(TAG_EXPOSURE_BIAS), "Exposure Bias Value"); tagNameMap.put(new Integer(TAG_MAX_APERTURE), "Max Aperture Value"); tagNameMap.put(new Integer(TAG_SUBJECT_DISTANCE), "Subject Distance"); tagNameMap.put(new Integer(TAG_METERING_MODE), "Metering Mode"); tagNameMap.put(new Integer(TAG_WHITE_BALANCE), "Light Source"); tagNameMap.put(new Integer(TAG_FLASH), "Flash"); tagNameMap.put(new Integer(TAG_FOCAL_LENGTH), "Focal Length"); tagNameMap.put(new Integer(TAG_FLASH_ENERGY), "Flash Energy"); tagNameMap.put(new Integer(TAG_SPATIAL_FREQ_RESPONSE), "Spatial Frequency Response"); tagNameMap.put(new Integer(TAG_NOISE), "Noise"); tagNameMap.put(new Integer(TAG_IMAGE_NUMBER), "Image Number"); tagNameMap.put(new Integer(TAG_SECURITY_CLASSIFICATION), "Security Classification"); tagNameMap.put(new Integer(TAG_IMAGE_HISTORY), "Image History"); tagNameMap.put(new Integer(TAG_SUBJECT_LOCATION), "Subject Location"); tagNameMap.put(new Integer(TAG_EXPOSURE_INDEX), "Exposure Index"); tagNameMap.put(new Integer(TAG_TIFF_EP_STANDARD_ID), "TIFF/EP Standard ID"); tagNameMap.put(new Integer(TAG_USER_COMMENT), "User Comment"); tagNameMap.put(new Integer(TAG_SUBSECOND_TIME), "Sub-Sec Time"); tagNameMap.put(new Integer(TAG_SUBSECOND_TIME_ORIGINAL), "Sub-Sec Time Original"); tagNameMap.put(new Integer(TAG_SUBSECOND_TIME_DIGITIZED), "Sub-Sec Time Digitized"); tagNameMap.put(new Integer(TAG_FLASHPIX_VERSION), "FlashPix Version"); tagNameMap.put(new Integer(TAG_COLOR_SPACE), "Color Space"); tagNameMap.put(new Integer(TAG_EXIF_IMAGE_WIDTH), "Exif Image Width"); tagNameMap.put(new Integer(TAG_EXIF_IMAGE_HEIGHT), "Exif Image Height"); tagNameMap.put(new Integer(TAG_RELATED_SOUND_FILE), "Related Sound File"); // 0x920B in TIFF/EP tagNameMap.put(new Integer(TAG_FLASH_ENERGY_2), "Flash Energy"); // 0x920C in TIFF/EP tagNameMap.put(new Integer(TAG_SPATIAL_FREQ_RESPONSE_2), "Spatial Frequency Response"); // 0x920E in TIFF/EP tagNameMap.put(new Integer(TAG_FOCAL_PLANE_X_RES), "Focal Plane X Resolution"); // 0x920F in TIFF/EP tagNameMap.put(new Integer(TAG_FOCAL_PLANE_Y_RES), "Focal Plane Y Resolution"); // 0x9210 in TIFF/EP tagNameMap.put(new Integer(TAG_FOCAL_PLANE_UNIT), "Focal Plane Resolution Unit"); // 0x9214 in TIFF/EP tagNameMap.put(new Integer(TAG_SUBJECT_LOCATION_2), "Subject Location"); // 0x9215 in TIFF/EP tagNameMap.put(new Integer(TAG_EXPOSURE_INDEX_2), "Exposure Index"); // 0x9217 in TIFF/EP tagNameMap.put(new Integer(TAG_SENSING_METHOD), "Sensing Method"); tagNameMap.put(new Integer(TAG_FILE_SOURCE), "File Source"); tagNameMap.put(new Integer(TAG_SCENE_TYPE), "Scene Type"); tagNameMap.put(new Integer(TAG_CFA_PATTERN), "CFA Pattern"); tagNameMap.put(new Integer(TAG_CUSTOM_RENDERED), "Custom Rendered"); tagNameMap.put(new Integer(TAG_EXPOSURE_MODE), "Exposure Mode"); tagNameMap.put(new Integer(TAG_WHITE_BALANCE_MODE), "White Balance"); tagNameMap.put(new Integer(TAG_DIGITAL_ZOOM_RATIO), "Digital Zoom Ratio"); tagNameMap.put(new Integer(TAG_35MM_FILM_EQUIV_FOCAL_LENGTH), "Focal Length 35"); tagNameMap.put(new Integer(TAG_SCENE_CAPTURE_TYPE), "Scene Capture Type"); tagNameMap.put(new Integer(TAG_GAIN_CONTROL), "Gain Control"); tagNameMap.put(new Integer(TAG_CONTRAST), "Contrast"); tagNameMap.put(new Integer(TAG_SATURATION), "Saturation"); tagNameMap.put(new Integer(TAG_SHARPNESS), "Sharpness"); tagNameMap.put(new Integer(TAG_DEVICE_SETTING_DESCRIPTION), "Device Setting Description"); tagNameMap.put(new Integer(TAG_SUBJECT_DISTANCE_RANGE), "Subject Distance Range"); tagNameMap.put(new Integer(TAG_WIN_AUTHOR), "Windows XP Author"); tagNameMap.put(new Integer(TAG_WIN_COMMENT), "Windows XP Comment"); tagNameMap.put(new Integer(TAG_WIN_KEYWORDS), "Windows XP Keywords"); tagNameMap.put(new Integer(TAG_WIN_SUBJECT), "Windows XP Subject"); tagNameMap.put(new Integer(TAG_WIN_TITLE), "Windows XP Title"); tagNameMap.put(new Integer(TAG_MIN_SAMPLE_VALUE), "Minimum sample value"); tagNameMap.put(new Integer(TAG_MAX_SAMPLE_VALUE), "Maximum sample value"); } public ExifDirectory() { this.setDescriptor(new ExifDescriptor(this)); } public String getName() { return "Exif"; } protected HashMap getTagNameMap() { return tagNameMap; } public byte[] getThumbnailData() throws MetadataException { if (!containsThumbnail()) return null; return this.getByteArray(ExifDirectory.TAG_THUMBNAIL_DATA); } public void writeThumbnail(String filename) throws MetadataException, IOException { byte[] data = getThumbnailData(); if (data==null) throw new MetadataException("No thumbnail data exists."); FileOutputStream stream = null; try { stream = new FileOutputStream(filename); stream.write(data); } finally { if (stream!=null) stream.close(); } } /* // This thumbnail extraction code is not complete, and is included to assist anyone who feels like looking into // it. Please share any progress with the original author, and hence the community. Thanks. /** * * @return * @throws MetadataException * / public Image getThumbnailImage() throws MetadataException { if (!containsThumbnail()) return null; int compression = 0; try { compression = this.getInt(ExifDirectory.TAG_COMPRESSION); } catch (Throwable e) { this.addError("Unable to determine thumbnail type " + e.getMessage()); } final byte[] thumbnailBytes = getThumbnailData(); if (compression == ExifDirectory.COMPRESSION_JPEG) { // JPEG Thumbnail // operate directly on thumbnailBytes // try { // int offset = this.getInt(ExifDirectory.TAG_THUMBNAIL_OFFSET); // int length = this.getInt(ExifDirectory.TAG_THUMBNAIL_LENGTH); // byte[] result = new byte[length]; // for (int i = 0; i235 || cb<16 || cb>240 || cr<16 || cr>240) // "".toString(); // // int g = (int)(1.164*(y-16) - 0.391*(cb-128) - 0.813*(cr-128)); // int r = (int)(1.164*(y-16) + 1.596*(cr-128)); // int b = (int)(1.164*(y-16) + 2.018*(cb-128)); // //// result[i] = (byte)b; //// result[i + 1] = (byte)g; //// result[i + 2] = (byte)r; // // // TODO compose the image here // image.setRGB(1, 2, 3); // } return image; } /** * Creates a thumbnail image in (Windows) BMP format from raw RGB data. * @param thumbnailBytes * @return * @throws com.drew.metadata.MetadataException * / private Image createImageFromRawRgb(byte[] thumbnailBytes) throws MetadataException { final int length = thumbnailBytes.length; // this.getInt(ExifDirectory.TAG_STRIP_BYTE_COUNTS); final int imageWidth = this.getInt(ExifDirectory.TAG_THUMBNAIL_IMAGE_WIDTH); final int imageHeight = this.getInt(ExifDirectory.TAG_THUMBNAIL_IMAGE_HEIGHT); // final int headerlength = 54; // final byte[] result = new byte[length + headerlength]; // // Add a windows BMP header described: // // http://www.onicos.com/staff/iz/formats/bmp.html // result[0] = 'B'; // result[1] = 'M'; // File Type identifier // result[3] = (byte)(result.length / 256); // result[2] = (byte)result.length; // result[10] = (byte)headerlength; // result[14] = 40; // MS Windows BMP header // result[18] = (byte)imageWidth; // result[22] = (byte)imageHeight; // result[26] = 1; // 1 Plane // result[28] = 24; // Colour depth // result[34] = (byte)length; // result[35] = (byte)(length / 256); final BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB); // order is RGB and image is upside down, bitmaps are BGR // for (int i = headerlength, dataOffset = length; iExifProcessingException with the * specified detail message. * @param message the detail message */ public ExifProcessingException(String message) { super(message); } /** * Constructs an instance of ExifProcessingException with the * specified detail message and inner exception. * @param message the detail message * @param cause an inner exception */ public ExifProcessingException(String message, Throwable cause) { super(message, cause); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/ExifReader.java0000644000000000000000000007433310716136374025336 0ustar rootroot/* * EXIFExtractor.java * * This class based upon code from Jhead, a C program for extracting and * manipulating the Exif data within files written by Matthias Wandel. * http://www.sentex.net/~mwandel/jhead/ * * Jhead is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. Similarly, I release this Java version under the * same license, though I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. Unlike * Jhead, this code (as it stands) only supports reading of Exif data - no * manipulation, and no thumbnail stuff. * * If you make use of this code, I'd appreciate hearing about it. * drew.noakes@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created on 28 April 2002, 23:54 * Modified 04 Aug 2002 * - Renamed constants to be inline with changes to ExifTagValues interface * - Substituted usage of JDK 1.4 features (java.nio package) * Modified 29 Oct 2002 (v1.2) * - Proper traversing of Exif file structure and complete refactor & tidy of * the codebase (a few unnoticed bugs removed) * - Reads makernote data for 6 families of camera (5 makes) * - Tags now stored in directories... use the IFD_* constants to refer to the * image file directory you require (Exif, Interop, GPS and Makernote*) -- * this avoids collisions where two tags share the same code * - Takes componentCount of unknown tags into account * - Now understands GPS tags (thanks to Colin Briton for his help with this) * - Some other bug fixes, pointed out by users around the world. Thanks! * Modified 27 Nov 2002 (v2.0) * - Renamed to ExifReader * - Moved to new package com.drew.metadata.exif * Modified since, however changes have not been logged. See release notes for * library-wide modifications. */ package com.drew.metadata.exif; import com.drew.imaging.jpeg.JpegProcessingException; import com.drew.imaging.jpeg.JpegSegmentData; import com.drew.imaging.jpeg.JpegSegmentReader; import com.drew.lang.Rational; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import com.drew.metadata.MetadataReader; import java.io.File; import java.io.InputStream; import java.util.HashMap; /** * Extracts Exif data from a JPEG header segment, providing information about the * camera/scanner/capture device (if available). Information is encapsulated in * an Metadata object. * @author Drew Noakes http://drewnoakes.com */ public class ExifReader implements MetadataReader { /** * The JPEG segment as an array of bytes. */ private final byte[] _data; /** * Represents the native byte ordering used in the JPEG segment. If true, * then we're using Motorolla ordering (Big endian), else we're using Intel * ordering (Little endian). */ private boolean _isMotorollaByteOrder; /** * Bean instance to store information about the image and camera/scanner/capture * device. */ private Metadata _metadata; /** * The number of bytes used per format descriptor. */ private static final int[] BYTES_PER_FORMAT = {0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8}; /** * The number of formats known. */ private static final int MAX_FORMAT_CODE = 12; // Format types // Note: Cannot use the DataFormat enumeration in the case statement that uses these tags. // Is there a better way? private static final int FMT_BYTE = 1; private static final int FMT_STRING = 2; private static final int FMT_USHORT = 3; private static final int FMT_ULONG = 4; private static final int FMT_URATIONAL = 5; private static final int FMT_SBYTE = 6; private static final int FMT_UNDEFINED = 7; private static final int FMT_SSHORT = 8; private static final int FMT_SLONG = 9; private static final int FMT_SRATIONAL = 10; private static final int FMT_SINGLE = 11; private static final int FMT_DOUBLE = 12; public static final int TAG_EXIF_OFFSET = 0x8769; public static final int TAG_INTEROP_OFFSET = 0xA005; public static final int TAG_GPS_INFO_OFFSET = 0x8825; public static final int TAG_MAKER_NOTE = 0x927C; public static final int TIFF_HEADER_START_OFFSET = 6; /** * Creates an ExifReader for a JpegSegmentData object. * @param segmentData */ public ExifReader(JpegSegmentData segmentData) { this(segmentData.getSegment(JpegSegmentReader.SEGMENT_APP1)); } /** * Creates an ExifReader for a Jpeg file. * @param file * @throws JpegProcessingException */ public ExifReader(File file) throws JpegProcessingException { this(new JpegSegmentReader(file).readSegment(JpegSegmentReader.SEGMENT_APP1)); } /** * Creates an ExifReader for a Jpeg stream. * @param is JPEG stream. Stream will be closed. */ public ExifReader(InputStream is) throws JpegProcessingException { this(new JpegSegmentReader(is).readSegment(JpegSegmentReader.SEGMENT_APP1)); } /** * Creates an ExifReader for the given JPEG header segment. */ public ExifReader(byte[] data) { _data = data; } /** * Performs the Exif data extraction, returning a new instance of Metadata. */ public Metadata extract() { return extract(new Metadata()); } /** * Performs the Exif data extraction, adding found values to the specified * instance of Metadata. */ public Metadata extract(Metadata metadata) { _metadata = metadata; if (_data==null) return _metadata; // once we know there's some data, create the directory and start working on it ExifDirectory directory = (ExifDirectory)_metadata.getDirectory(ExifDirectory.class); // check for the header length if (_data.length<=14) { directory.addError("Exif data segment must contain at least 14 bytes"); return _metadata; } // check for the header preamble if (!"Exif\0\0".equals(new String(_data, 0, 6))) { directory.addError("Exif data segment doesn't begin with 'Exif'"); return _metadata; } // this should be either "MM" or "II" String byteOrderIdentifier = new String(_data, 6, 2); if (!setByteOrder(byteOrderIdentifier)) { directory.addError("Unclear distinction between Motorola/Intel byte ordering: " + byteOrderIdentifier); return _metadata; } // Check the next two values for correctness. if (get16Bits(8)!=0x2a) { directory.addError("Invalid Exif start - should have 0x2A at offset 8 in Exif header"); return _metadata; } int firstDirectoryOffset = get32Bits(10) + TIFF_HEADER_START_OFFSET; // David Ekholm sent an digital camera image that has this problem if (firstDirectoryOffset>=_data.length - 1) { directory.addError("First exif directory offset is beyond end of Exif data segment"); // First directory normally starts 14 bytes in -- try it here and catch another error in the worst case firstDirectoryOffset = 14; } HashMap processedDirectoryOffsets = new HashMap(); // 0th IFD (we merge with Exif IFD) processDirectory(directory, processedDirectoryOffsets, firstDirectoryOffset, TIFF_HEADER_START_OFFSET); // after the extraction process, if we have the correct tags, we may be able to store thumbnail information storeThumbnailBytes(directory, TIFF_HEADER_START_OFFSET); return _metadata; } private void storeThumbnailBytes(ExifDirectory exifDirectory, int tiffHeaderOffset) { if (!exifDirectory.containsTag(ExifDirectory.TAG_COMPRESSION)) return; if (!exifDirectory.containsTag(ExifDirectory.TAG_THUMBNAIL_LENGTH) || !exifDirectory.containsTag(ExifDirectory.TAG_THUMBNAIL_OFFSET)) return; try { int offset = exifDirectory.getInt(ExifDirectory.TAG_THUMBNAIL_OFFSET); int length = exifDirectory.getInt(ExifDirectory.TAG_THUMBNAIL_LENGTH); byte[] result = new byte[length]; for (int i = 0; i=_data.length || dirStartOffset<0) { directory.addError("Ignored directory marked to start outside data segement"); return; } if (!isDirectoryLengthValid(dirStartOffset, tiffHeaderOffset)) { directory.addError("Illegally sized directory"); return; } // First two bytes in the IFD are the number of tags in this directory int dirTagCount = get16Bits(dirStartOffset); // Handle each tag in this directory for (int tagNumber = 0; tagNumberMAX_FORMAT_CODE) { directory.addError("Invalid format code: " + formatCode); continue; } // 4 bytes dictate the number of components in this tag's data final int componentCount = get32Bits(tagOffset + 4); if (componentCount<0) { directory.addError("Negative component count in EXIF"); continue; } // each component may have more than one byte... calculate the total number of bytes final int byteCount = componentCount * BYTES_PER_FORMAT[formatCode]; final int tagValueOffset = calculateTagValueOffset(byteCount, tagOffset, tiffHeaderOffset); if (tagValueOffset<0 || tagValueOffset > _data.length) { directory.addError("Illegal pointer offset value in EXIF"); continue; } // Check that this tag isn't going to allocate outside the bounds of the data array. // This addresses an uncommon OutOfMemoryError. if (byteCount < 0 || tagValueOffset + byteCount > _data.length) { directory.addError("Illegal number of bytes: " + byteCount); continue; } // Calculate the value as an offset for cases where the tag represents directory final int subdirOffset = tiffHeaderOffset + get32Bits(tagValueOffset); switch (tagType) { case TAG_EXIF_OFFSET: processDirectory(_metadata.getDirectory(ExifDirectory.class), processedDirectoryOffsets, subdirOffset, tiffHeaderOffset); continue; case TAG_INTEROP_OFFSET: processDirectory(_metadata.getDirectory(ExifInteropDirectory.class), processedDirectoryOffsets, subdirOffset, tiffHeaderOffset); continue; case TAG_GPS_INFO_OFFSET: processDirectory(_metadata.getDirectory(GpsDirectory.class), processedDirectoryOffsets, subdirOffset, tiffHeaderOffset); continue; case TAG_MAKER_NOTE: processMakerNote(tagValueOffset, processedDirectoryOffsets, tiffHeaderOffset); continue; default: processTag(directory, tagType, tagValueOffset, componentCount, formatCode); break; } } // at the end of each IFD is an optional link to the next IFD final int finalTagOffset = calculateTagOffset(dirStartOffset, dirTagCount); int nextDirectoryOffset = get32Bits(finalTagOffset); if (nextDirectoryOffset!=0) { nextDirectoryOffset += tiffHeaderOffset; if (nextDirectoryOffset>=_data.length) { // Last 4 bytes of IFD reference another IFD with an address that is out of bounds // Note this could have been caused by jhead 1.3 cropping too much return; } else if (nextDirectoryOffset < dirStartOffset) { // Last 4 bytes of IFD reference another IFD with an address that is before the start of this directory return; } // the next directory is of same type as this one processDirectory(directory, processedDirectoryOffsets, nextDirectoryOffset, tiffHeaderOffset); } } private void processMakerNote(int subdirOffset, HashMap processedDirectoryOffsets, int tiffHeaderOffset) { // Determine the camera model and makernote format Directory exifDirectory = _metadata.getDirectory(ExifDirectory.class); if (exifDirectory==null) return; String cameraModel = exifDirectory.getString(ExifDirectory.TAG_MAKE); final String firstTwoChars = new String(_data, subdirOffset, 2); final String firstThreeChars = new String(_data, subdirOffset, 3); final String firstFourChars = new String(_data, subdirOffset, 4); final String firstFiveChars = new String(_data, subdirOffset, 5); final String firstSixChars = new String(_data, subdirOffset, 6); final String firstSevenChars = new String(_data, subdirOffset, 7); final String firstEightChars = new String(_data, subdirOffset, 8); if ("OLYMP".equals(firstFiveChars) || "EPSON".equals(firstFiveChars) || "AGFA".equals(firstFourChars)) { // Olympus Makernote // Epson and Agfa use Olypus maker note standard, see: // http://www.ozhiker.com/electronics/pjmt/jpeg_info/ processDirectory(_metadata.getDirectory(OlympusMakernoteDirectory.class), processedDirectoryOffsets, subdirOffset + 8, tiffHeaderOffset); } else if (cameraModel!=null && cameraModel.trim().toUpperCase().startsWith("NIKON")) { if ("Nikon".equals(firstFiveChars)) { /* There are two scenarios here: * Type 1: ** * :0000: 4E 69 6B 6F 6E 00 01 00-05 00 02 00 02 00 06 00 Nikon........... * :0010: 00 00 EC 02 00 00 03 00-03 00 01 00 00 00 06 00 ................ * Type 3: ** * :0000: 4E 69 6B 6F 6E 00 02 00-00 00 4D 4D 00 2A 00 00 Nikon....MM.*... * :0010: 00 08 00 1E 00 01 00 07-00 00 00 04 30 32 30 30 ............0200 */ if (_data[subdirOffset+6]==1) processDirectory(_metadata.getDirectory(NikonType1MakernoteDirectory.class), processedDirectoryOffsets, subdirOffset + 8, tiffHeaderOffset); else if (_data[subdirOffset+6]==2) processDirectory(_metadata.getDirectory(NikonType2MakernoteDirectory.class), processedDirectoryOffsets, subdirOffset + 18, subdirOffset + 10); else exifDirectory.addError("Unsupported makernote data ignored."); } else { // The IFD begins with the first MakerNote byte (no ASCII name). This occurs with CoolPix 775, E990 and D1 models. processDirectory(_metadata.getDirectory(NikonType2MakernoteDirectory.class), processedDirectoryOffsets, subdirOffset, tiffHeaderOffset); } } else if ("SONY CAM".equals(firstEightChars) || "SONY DSC".equals(firstEightChars)) { processDirectory(_metadata.getDirectory(SonyMakernoteDirectory.class), processedDirectoryOffsets, subdirOffset + 12, tiffHeaderOffset); } else if ("KDK".equals(firstThreeChars)) { processDirectory(_metadata.getDirectory(KodakMakernoteDirectory.class), processedDirectoryOffsets, subdirOffset + 20, tiffHeaderOffset); } else if ("Canon".equalsIgnoreCase(cameraModel)) { processDirectory(_metadata.getDirectory(CanonMakernoteDirectory.class), processedDirectoryOffsets, subdirOffset, tiffHeaderOffset); } else if (cameraModel!=null && cameraModel.toUpperCase().startsWith("CASIO")) { if ("QVC\u0000\u0000\u0000".equals(firstSixChars)) processDirectory(_metadata.getDirectory(CasioType2MakernoteDirectory.class), processedDirectoryOffsets, subdirOffset + 6, tiffHeaderOffset); else processDirectory(_metadata.getDirectory(CasioType1MakernoteDirectory.class), processedDirectoryOffsets, subdirOffset, tiffHeaderOffset); } else if ("FUJIFILM".equals(firstEightChars) || "Fujifilm".equalsIgnoreCase(cameraModel)) { // TODO make this field a passed parameter, to avoid threading issues boolean byteOrderBefore = _isMotorollaByteOrder; // bug in fujifilm makernote ifd means we temporarily use Intel byte ordering _isMotorollaByteOrder = false; // the 4 bytes after "FUJIFILM" in the makernote point to the start of the makernote // IFD, though the offset is relative to the start of the makernote, not the TIFF // header (like everywhere else) int ifdStart = subdirOffset + get32Bits(subdirOffset + 8); processDirectory(_metadata.getDirectory(FujifilmMakernoteDirectory.class), processedDirectoryOffsets, ifdStart, tiffHeaderOffset); _isMotorollaByteOrder = byteOrderBefore; } else if (cameraModel!=null && cameraModel.toUpperCase().startsWith("MINOLTA")) { // Cases seen with the model starting with MINOLTA in capitals seem to have a valid Olympus makernote // area that commences immediately. processDirectory(_metadata.getDirectory(OlympusMakernoteDirectory.class), processedDirectoryOffsets, subdirOffset, tiffHeaderOffset); } else if ("KC".equals(firstTwoChars) || "MINOL".equals(firstFiveChars) || "MLY".equals(firstThreeChars) || "+M+M+M+M".equals(firstEightChars)) { // This Konica data is not understood. Header identified in accordance with information at this site: // http://www.ozhiker.com/electronics/pjmt/jpeg_info/minolta_mn.html // TODO determine how to process the information described at the above website exifDirectory.addError("Unsupported Konica/Minolta data ignored."); } else if ("KYOCERA".equals(firstSevenChars)) { // http://www.ozhiker.com/electronics/pjmt/jpeg_info/kyocera_mn.html processDirectory(_metadata.getDirectory(KyoceraMakernoteDirectory.class), processedDirectoryOffsets, subdirOffset + 22, tiffHeaderOffset); } else if ("Panasonic\u0000\u0000\u0000".equals(new String(_data, subdirOffset, 12))) { // NON-Standard TIFF IFD Data using Panasonic Tags. There is no Next-IFD pointer after the IFD // Offsets are relative to the start of the TIFF header at the beginning of the EXIF segment // more information here: http://www.ozhiker.com/electronics/pjmt/jpeg_info/panasonic_mn.html processDirectory(_metadata.getDirectory(PanasonicMakernoteDirectory.class), processedDirectoryOffsets, subdirOffset + 12, tiffHeaderOffset); } else if ("AOC\u0000".equals(firstFourChars)) { // NON-Standard TIFF IFD Data using Casio Type 2 Tags // IFD has no Next-IFD pointer at end of IFD, and // Offsets are relative to the start of the current IFD tag, not the TIFF header // Observed for: // - Pentax ist D processDirectory(_metadata.getDirectory(CasioType2MakernoteDirectory.class), processedDirectoryOffsets, subdirOffset + 6, subdirOffset); } else if (cameraModel!=null && (cameraModel.toUpperCase().startsWith("PENTAX") || cameraModel.toUpperCase().startsWith("ASAHI"))) { // NON-Standard TIFF IFD Data using Pentax Tags // IFD has no Next-IFD pointer at end of IFD, and // Offsets are relative to the start of the current IFD tag, not the TIFF header // Observed for: // - PENTAX Optio 330 // - PENTAX Optio 430 processDirectory(_metadata.getDirectory(PentaxMakernoteDirectory.class), processedDirectoryOffsets, subdirOffset, subdirOffset); } else { // TODO how to store makernote data when it's not from a supported camera model? // this is difficult as the starting offset is not known. we could look for it... exifDirectory.addError("Unsupported makernote data ignored."); } } private boolean isDirectoryLengthValid(int dirStartOffset, int tiffHeaderOffset) { int dirTagCount = get16Bits(dirStartOffset); int dirLength = (2 + (12 * dirTagCount) + 4); if (dirLength + dirStartOffset + tiffHeaderOffset>=_data.length) { // Note: Files that had thumbnails trimmed with jhead 1.3 or earlier might trigger this return false; } return true; } private void processTag(Directory directory, int tagType, int tagValueOffset, int componentCount, int formatCode) { // Directory simply stores raw values // The display side uses a Descriptor class per directory to turn the raw values into 'pretty' descriptions switch (formatCode) { case FMT_UNDEFINED: // this includes exif user comments final byte[] tagBytes = new byte[componentCount]; final int byteCount = componentCount * BYTES_PER_FORMAT[formatCode]; for (int i=0; i4) { // If its bigger than 4 bytes, the dir entry contains an offset. // dirEntryOffset must be passed, as some makernote implementations (e.g. FujiFilm) incorrectly use an // offset relative to the start of the makernote itself, not the TIFF segment. final int offsetVal = get32Bits(dirEntryOffset + 8); if (offsetVal + byteCount>_data.length) { // Bogus pointer offset and / or bytecount value return -1; // signal error } return tiffHeaderOffset + offsetVal; } else { // 4 bytes or less and value is in the dir entry itself return dirEntryOffset + 8; } } /** * Creates a String from the _data buffer starting at the specified offset, * and ending where byte=='\0' or where length==maxLength. */ private String readString(int offset, int maxLength) { int length = 0; while ((offset + length)<_data.length && _data[offset + length]!='\0' && length_data.length) throw new ArrayIndexOutOfBoundsException("attempt to read data outside of exif segment (index " + offset + " where max index is " + (_data.length - 1) + ")"); if (_isMotorollaByteOrder) { // Motorola - MSB first return (_data[offset] << 8 & 0xFF00) | (_data[offset + 1] & 0xFF); } else { // Intel ordering - LSB first return (_data[offset + 1] << 8 & 0xFF00) | (_data[offset] & 0xFF); } } /** * Get a 32 bit value from file's native byte order. */ private int get32Bits(int offset) { if (offset<0 || offset+4>_data.length) throw new ArrayIndexOutOfBoundsException("attempt to read data outside of exif segment (index " + offset + " where max index is " + (_data.length - 1) + ")"); if (_isMotorollaByteOrder) { // Motorola - MSB first return (_data[offset] << 24 & 0xFF000000) | (_data[offset + 1] << 16 & 0xFF0000) | (_data[offset + 2] << 8 & 0xFF00) | (_data[offset + 3] & 0xFF); } else { // Intel ordering - LSB first return (_data[offset + 3] << 24 & 0xFF000000) | (_data[offset + 2] << 16 & 0xFF0000) | (_data[offset + 1] << 8 & 0xFF00) | (_data[offset] & 0xFF); } } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/FujifilmMakernoteDescriptor.java0000644000000000000000000002757710716136374031002 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 27-Nov-2002 10:12:05 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.lang.Rational; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import com.drew.metadata.TagDescriptor; /** * Fujifilm's digicam added the MakerNote tag from the Year2000's model (e.g.Finepix1400, * Finepix4700). It uses IFD format and start from ASCII character 'FUJIFILM', and next 4 * bytes(value 0x000c) points the offset to first IFD entry. Example of actual data * structure is shown below. * * :0000: 46 55 4A 49 46 49 4C 4D-0C 00 00 00 0F 00 00 00 :0000: FUJIFILM........ * :0010: 07 00 04 00 00 00 30 31-33 30 00 10 02 00 08 00 :0010: ......0130...... * * There are two big differences to the other manufacturers. * - Fujifilm's Exif data uses Motorola align, but MakerNote ignores it and uses Intel * align. * - The other manufacturer's MakerNote counts the "offset to data" from the first byte * of TIFF header (same as the other IFD), but Fujifilm counts it from the first byte * of MakerNote itself. */ public class FujifilmMakernoteDescriptor extends TagDescriptor { public FujifilmMakernoteDescriptor(Directory directory) { super(directory); } public String getDescription(int tagType) throws MetadataException { switch (tagType) { case FujifilmMakernoteDirectory.TAG_FUJIFILM_SHARPNESS: return getSharpnessDescription(); case FujifilmMakernoteDirectory.TAG_FUJIFILM_WHITE_BALANCE: return getWhiteBalanceDescription(); case FujifilmMakernoteDirectory.TAG_FUJIFILM_COLOR: return getColorDescription(); case FujifilmMakernoteDirectory.TAG_FUJIFILM_TONE: return getToneDescription(); case FujifilmMakernoteDirectory.TAG_FUJIFILM_FLASH_MODE: return getFlashModeDescription(); case FujifilmMakernoteDirectory.TAG_FUJIFILM_FLASH_STRENGTH: return getFlashStrengthDescription(); case FujifilmMakernoteDirectory.TAG_FUJIFILM_MACRO: return getMacroDescription(); case FujifilmMakernoteDirectory.TAG_FUJIFILM_FOCUS_MODE: return getFocusModeDescription(); case FujifilmMakernoteDirectory.TAG_FUJIFILM_SLOW_SYNCHRO: return getSlowSyncDescription(); case FujifilmMakernoteDirectory.TAG_FUJIFILM_PICTURE_MODE: return getPictureModeDescription(); case FujifilmMakernoteDirectory.TAG_FUJIFILM_CONTINUOUS_TAKING_OR_AUTO_BRACKETTING: return getContinuousTakingOrAutoBrackettingDescription(); case FujifilmMakernoteDirectory.TAG_FUJIFILM_BLUR_WARNING: return getBlurWarningDescription(); case FujifilmMakernoteDirectory.TAG_FUJIFILM_FOCUS_WARNING: return getFocusWarningDescription(); case FujifilmMakernoteDirectory.TAG_FUJIFILM_AE_WARNING: return getAutoExposureWarningDescription(); default: return _directory.getString(tagType); } } public String getAutoExposureWarningDescription() throws MetadataException { if (!_directory.containsTag(FujifilmMakernoteDirectory.TAG_FUJIFILM_AE_WARNING)) return null; int value = _directory.getInt(FujifilmMakernoteDirectory.TAG_FUJIFILM_AE_WARNING); switch (value) { case 0: return "AE good"; case 1: return "Over exposed (>1/1000s @ F11)"; default: return "Unknown (" + value + ")"; } } public String getFocusWarningDescription() throws MetadataException { if (!_directory.containsTag(FujifilmMakernoteDirectory.TAG_FUJIFILM_FOCUS_WARNING)) return null; int value = _directory.getInt(FujifilmMakernoteDirectory.TAG_FUJIFILM_FOCUS_WARNING); switch (value) { case 0: return "Auto focus good"; case 1: return "Out of focus"; default: return "Unknown (" + value + ")"; } } public String getBlurWarningDescription() throws MetadataException { if (!_directory.containsTag(FujifilmMakernoteDirectory.TAG_FUJIFILM_BLUR_WARNING)) return null; int value = _directory.getInt(FujifilmMakernoteDirectory.TAG_FUJIFILM_BLUR_WARNING); switch (value) { case 0: return "No blur warning"; case 1: return "Blur warning"; default: return "Unknown (" + value + ")"; } } public String getContinuousTakingOrAutoBrackettingDescription() throws MetadataException { if (!_directory.containsTag(FujifilmMakernoteDirectory.TAG_FUJIFILM_CONTINUOUS_TAKING_OR_AUTO_BRACKETTING)) return null; int value = _directory.getInt(FujifilmMakernoteDirectory.TAG_FUJIFILM_CONTINUOUS_TAKING_OR_AUTO_BRACKETTING); switch (value) { case 0: return "Off"; case 1: return "On"; default: return "Unknown (" + value + ")"; } } public String getPictureModeDescription() throws MetadataException { if (!_directory.containsTag(FujifilmMakernoteDirectory.TAG_FUJIFILM_PICTURE_MODE)) return null; int value = _directory.getInt(FujifilmMakernoteDirectory.TAG_FUJIFILM_PICTURE_MODE); switch (value) { case 0: return "Auto"; case 1: return "Portrait scene"; case 2: return "Landscape scene"; case 4: return "Sports scene"; case 5: return "Night scene"; case 6: return "Program AE"; case 256: return "Aperture priority AE"; case 512: return "Shutter priority AE"; case 768: return "Manual exposure"; default: return "Unknown (" + value + ")"; } } public String getSlowSyncDescription() throws MetadataException { if (!_directory.containsTag(FujifilmMakernoteDirectory.TAG_FUJIFILM_SLOW_SYNCHRO)) return null; int value = _directory.getInt(FujifilmMakernoteDirectory.TAG_FUJIFILM_SLOW_SYNCHRO); switch (value) { case 0: return "Off"; case 1: return "On"; default: return "Unknown (" + value + ")"; } } public String getFocusModeDescription() throws MetadataException { if (!_directory.containsTag(FujifilmMakernoteDirectory.TAG_FUJIFILM_FOCUS_MODE)) return null; int value = _directory.getInt(FujifilmMakernoteDirectory.TAG_FUJIFILM_FOCUS_MODE); switch (value) { case 0: return "Auto focus"; case 1: return "Manual focus"; default: return "Unknown (" + value + ")"; } } public String getMacroDescription() throws MetadataException { if (!_directory.containsTag(FujifilmMakernoteDirectory.TAG_FUJIFILM_MACRO)) return null; int value = _directory.getInt(FujifilmMakernoteDirectory.TAG_FUJIFILM_MACRO); switch (value) { case 0: return "Off"; case 1: return "On"; default: return "Unknown (" + value + ")"; } } public String getFlashStrengthDescription() throws MetadataException { if (!_directory.containsTag(FujifilmMakernoteDirectory.TAG_FUJIFILM_FLASH_STRENGTH)) return null; Rational value = _directory.getRational(FujifilmMakernoteDirectory.TAG_FUJIFILM_FLASH_STRENGTH); return value.toSimpleString(false) + " EV (Apex)"; } public String getFlashModeDescription() throws MetadataException { if (!_directory.containsTag(FujifilmMakernoteDirectory.TAG_FUJIFILM_FLASH_MODE)) return null; int value = _directory.getInt(FujifilmMakernoteDirectory.TAG_FUJIFILM_FLASH_MODE); switch (value) { case 0: return "Auto"; case 1: return "On"; case 2: return "Off"; case 3: return "Red-eye reduction"; default: return "Unknown (" + value + ")"; } } public String getToneDescription() throws MetadataException { if (!_directory.containsTag(FujifilmMakernoteDirectory.TAG_FUJIFILM_TONE)) return null; int value = _directory.getInt(FujifilmMakernoteDirectory.TAG_FUJIFILM_TONE); switch (value) { case 0: return "Normal (STD)"; case 256: return "High (HARD)"; case 512: return "Low (ORG)"; default: return "Unknown (" + value + ")"; } } public String getColorDescription() throws MetadataException { if (!_directory.containsTag(FujifilmMakernoteDirectory.TAG_FUJIFILM_COLOR)) return null; int value = _directory.getInt(FujifilmMakernoteDirectory.TAG_FUJIFILM_COLOR); switch (value) { case 0: return "Normal (STD)"; case 256: return "High"; case 512: return "Low (ORG)"; default: return "Unknown (" + value + ")"; } } public String getWhiteBalanceDescription() throws MetadataException { if (!_directory.containsTag(FujifilmMakernoteDirectory.TAG_FUJIFILM_WHITE_BALANCE)) return null; int value = _directory.getInt(FujifilmMakernoteDirectory.TAG_FUJIFILM_WHITE_BALANCE); switch (value) { case 0: return "Auto"; case 256: return "Daylight"; case 512: return "Cloudy"; case 768: return "DaylightColor-fluorescence"; case 769: return "DaywhiteColor-fluorescence"; case 770: return "White-fluorescence"; case 1024: return "Incandenscense"; case 3840: return "Custom white balance"; default: return "Unknown (" + value + ")"; } } public String getSharpnessDescription() throws MetadataException { if (!_directory.containsTag(FujifilmMakernoteDirectory.TAG_FUJIFILM_SHARPNESS)) return null; int value = _directory.getInt(FujifilmMakernoteDirectory.TAG_FUJIFILM_SHARPNESS); switch (value) { case 1: return "Softest"; case 2: return "Soft"; case 3: return "Normal"; case 4: return "Hard"; case 5: return "Hardest"; default: return "Unknown (" + value + ")"; } } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/FujifilmMakernoteDirectory.java0000644000000000000000000000746710716136374030624 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 27-Nov-2002 10:10:47 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import java.util.HashMap; /** * */ public class FujifilmMakernoteDirectory extends Directory { public static final int TAG_FUJIFILM_MAKERNOTE_VERSION = 0x0000; public static final int TAG_FUJIFILM_QUALITY = 0x1000; public static final int TAG_FUJIFILM_SHARPNESS = 0x1001; public static final int TAG_FUJIFILM_WHITE_BALANCE = 0x1002; public static final int TAG_FUJIFILM_COLOR = 0x1003; public static final int TAG_FUJIFILM_TONE = 0x1004; public static final int TAG_FUJIFILM_FLASH_MODE = 0x1010; public static final int TAG_FUJIFILM_FLASH_STRENGTH = 0x1011; public static final int TAG_FUJIFILM_MACRO = 0x1020; public static final int TAG_FUJIFILM_FOCUS_MODE = 0x1021; public static final int TAG_FUJIFILM_SLOW_SYNCHRO = 0x1030; public static final int TAG_FUJIFILM_PICTURE_MODE = 0x1031; public static final int TAG_FUJIFILM_UNKNOWN_1 = 0x1032; public static final int TAG_FUJIFILM_CONTINUOUS_TAKING_OR_AUTO_BRACKETTING = 0x1100; public static final int TAG_FUJIFILM_UNKNOWN_2 = 0x1200; public static final int TAG_FUJIFILM_BLUR_WARNING = 0x1300; public static final int TAG_FUJIFILM_FOCUS_WARNING = 0x1301; public static final int TAG_FUJIFILM_AE_WARNING = 0x1302; protected static final HashMap tagNameMap = new HashMap(); static { tagNameMap.put(new Integer(TAG_FUJIFILM_AE_WARNING), "AE Warning"); tagNameMap.put(new Integer(TAG_FUJIFILM_BLUR_WARNING), "Blur Warning"); tagNameMap.put(new Integer(TAG_FUJIFILM_COLOR), "Color"); tagNameMap.put(new Integer(TAG_FUJIFILM_CONTINUOUS_TAKING_OR_AUTO_BRACKETTING), "Continuous Taking Or Auto Bracketting"); tagNameMap.put(new Integer(TAG_FUJIFILM_FLASH_MODE), "Flash Mode"); tagNameMap.put(new Integer(TAG_FUJIFILM_FLASH_STRENGTH), "Flash Strength"); tagNameMap.put(new Integer(TAG_FUJIFILM_FOCUS_MODE), "Focus Mode"); tagNameMap.put(new Integer(TAG_FUJIFILM_FOCUS_WARNING), "Focus Warning"); tagNameMap.put(new Integer(TAG_FUJIFILM_MACRO), "Macro"); tagNameMap.put(new Integer(TAG_FUJIFILM_MAKERNOTE_VERSION), "Makernote Version"); tagNameMap.put(new Integer(TAG_FUJIFILM_PICTURE_MODE), "Picture Mode"); tagNameMap.put(new Integer(TAG_FUJIFILM_QUALITY), "Quality"); tagNameMap.put(new Integer(TAG_FUJIFILM_SHARPNESS), "Sharpness"); tagNameMap.put(new Integer(TAG_FUJIFILM_SLOW_SYNCHRO), "Slow Synchro"); tagNameMap.put(new Integer(TAG_FUJIFILM_TONE), "Tone"); tagNameMap.put(new Integer(TAG_FUJIFILM_UNKNOWN_1), "Makernote Unknown 1"); tagNameMap.put(new Integer(TAG_FUJIFILM_UNKNOWN_2), "Makernote Unknown 2"); tagNameMap.put(new Integer(TAG_FUJIFILM_WHITE_BALANCE), "White Balance"); } public FujifilmMakernoteDirectory() { this.setDescriptor(new FujifilmMakernoteDescriptor(this)); } public String getName() { return "FujiFilm Makernote"; } protected HashMap getTagNameMap() { return tagNameMap; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/GpsDescriptor.java0000644000000000000000000001764410716136374026112 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 12-Nov-2002 22:27:52 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.lang.Rational; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import com.drew.metadata.TagDescriptor; /** * */ public class GpsDescriptor extends TagDescriptor { public GpsDescriptor(Directory directory) { super(directory); } public String getDescription(int tagType) throws MetadataException { switch (tagType) { case GpsDirectory.TAG_GPS_ALTITUDE: return getGpsAltitudeDescription(); case GpsDirectory.TAG_GPS_ALTITUDE_REF: return getGpsAltitudeRefDescription(); case GpsDirectory.TAG_GPS_STATUS: return getGpsStatusDescription(); case GpsDirectory.TAG_GPS_MEASURE_MODE: return getGpsMeasureModeDescription(); case GpsDirectory.TAG_GPS_SPEED_REF: return getGpsSpeedRefDescription(); case GpsDirectory.TAG_GPS_TRACK_REF: case GpsDirectory.TAG_GPS_IMG_DIRECTION_REF: case GpsDirectory.TAG_GPS_DEST_BEARING_REF: return getGpsDirectionReferenceDescription(tagType); case GpsDirectory.TAG_GPS_TRACK: case GpsDirectory.TAG_GPS_IMG_DIRECTION: case GpsDirectory.TAG_GPS_DEST_BEARING: return getGpsDirectionDescription(tagType); case GpsDirectory.TAG_GPS_DEST_DISTANCE_REF: return getGpsDestinationReferenceDescription(); case GpsDirectory.TAG_GPS_TIME_STAMP: return getGpsTimeStampDescription(); // three rational numbers -- displayed in HH"MM"SS.ss case GpsDirectory.TAG_GPS_LONGITUDE: return getGpsLongitudeDescription(); case GpsDirectory.TAG_GPS_LATITUDE: return getGpsLatitudeDescription(); default: return _directory.getString(tagType); } } public String getGpsLatitudeDescription() throws MetadataException { if (!_directory.containsTag(GpsDirectory.TAG_GPS_LATITUDE)) return null; return getHoursMinutesSecondsDescription(GpsDirectory.TAG_GPS_LATITUDE); } public String getGpsLongitudeDescription() throws MetadataException { if (!_directory.containsTag(GpsDirectory.TAG_GPS_LONGITUDE)) return null; return getHoursMinutesSecondsDescription(GpsDirectory.TAG_GPS_LONGITUDE); } public String getHoursMinutesSecondsDescription(int tagType) throws MetadataException { Rational[] components = _directory.getRationalArray(tagType); // TODO create an HoursMinutesSecods class ?? int deg = components[0].intValue(); float min = components[1].floatValue(); float sec = components[2].floatValue(); // carry fractions of minutes into seconds -- thanks Colin Briton sec += (min % 1) * 60; return String.valueOf(deg) + "\"" + String.valueOf((int)min) + "'" + String.valueOf(sec); } public String getGpsTimeStampDescription() throws MetadataException { // time in hour, min, sec if (!_directory.containsTag(GpsDirectory.TAG_GPS_TIME_STAMP)) return null; int[] timeComponents = _directory.getIntArray(GpsDirectory.TAG_GPS_TIME_STAMP); StringBuffer sbuffer = new StringBuffer(); sbuffer.append(timeComponents[0]); sbuffer.append(":"); sbuffer.append(timeComponents[1]); sbuffer.append(":"); sbuffer.append(timeComponents[2]); sbuffer.append(" UTC"); return sbuffer.toString(); } public String getGpsDestinationReferenceDescription() { if (!_directory.containsTag(GpsDirectory.TAG_GPS_DEST_DISTANCE_REF)) return null; String destRef = _directory.getString(GpsDirectory.TAG_GPS_DEST_DISTANCE_REF).trim(); if ("K".equalsIgnoreCase(destRef)) { return "kilometers"; } else if ("M".equalsIgnoreCase(destRef)) { return "miles"; } else if ("N".equalsIgnoreCase(destRef)) { return "knots"; } else { return "Unknown (" + destRef + ")"; } } public String getGpsDirectionDescription(int tagType) { if (!_directory.containsTag(tagType)) return null; String gpsDirection = _directory.getString(tagType).trim(); return gpsDirection + " degrees"; } public String getGpsDirectionReferenceDescription(int tagType) { if (!_directory.containsTag(tagType)) return null; String gpsDistRef = _directory.getString(tagType).trim(); if ("T".equalsIgnoreCase(gpsDistRef)) { return "True direction"; } else if ("M".equalsIgnoreCase(gpsDistRef)) { return "Magnetic direction"; } else { return "Unknown (" + gpsDistRef + ")"; } } public String getGpsSpeedRefDescription() { if (!_directory.containsTag(GpsDirectory.TAG_GPS_SPEED_REF)) return null; String gpsSpeedRef = _directory.getString(GpsDirectory.TAG_GPS_SPEED_REF).trim(); if ("K".equalsIgnoreCase(gpsSpeedRef)) { return "kph"; } else if ("M".equalsIgnoreCase(gpsSpeedRef)) { return "mph"; } else if ("N".equalsIgnoreCase(gpsSpeedRef)) { return "knots"; } else { return "Unknown (" + gpsSpeedRef + ")"; } } public String getGpsMeasureModeDescription() { if (!_directory.containsTag(GpsDirectory.TAG_GPS_MEASURE_MODE)) return null; String gpsSpeedMeasureMode = _directory.getString(GpsDirectory.TAG_GPS_MEASURE_MODE).trim(); if ("2".equalsIgnoreCase(gpsSpeedMeasureMode)) { return "2-dimensional measurement"; } else if ("3".equalsIgnoreCase(gpsSpeedMeasureMode)) { return "3-dimensional measurement"; } else { return "Unknown (" + gpsSpeedMeasureMode + ")"; } } public String getGpsStatusDescription() { if (!_directory.containsTag(GpsDirectory.TAG_GPS_STATUS)) return null; String gpsStatus = _directory.getString(GpsDirectory.TAG_GPS_STATUS).trim(); if ("A".equalsIgnoreCase(gpsStatus)) { return "Measurement in progess"; } else if ("V".equalsIgnoreCase(gpsStatus)) { return "Measurement Interoperability"; } else { return "Unknown (" + gpsStatus + ")"; } } public String getGpsAltitudeRefDescription() throws MetadataException { if (!_directory.containsTag(GpsDirectory.TAG_GPS_ALTITUDE_REF)) return null; int alititudeRef = _directory.getInt(GpsDirectory.TAG_GPS_ALTITUDE_REF); if (alititudeRef == 0) { return "Sea level"; } else { return "Unknown (" + alititudeRef + ")"; } } public String getGpsAltitudeDescription() throws MetadataException { if (!_directory.containsTag(GpsDirectory.TAG_GPS_ALTITUDE)) return null; String alititude = _directory.getRational(GpsDirectory.TAG_GPS_ALTITUDE).toSimpleString(true); return alititude + " metres"; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/GpsDirectory.java0000644000000000000000000001502210716136374025724 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 26-Nov-2002 11:00:52 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import java.util.HashMap; /** * */ public class GpsDirectory extends Directory { /** GPS tag version GPSVersionID 0 0 BYTE 4 */ public static final int TAG_GPS_VERSION_ID = 0x0000; /** North or South Latitude GPSLatitudeRef 1 1 ASCII 2 */ public static final int TAG_GPS_LATITUDE_REF = 0x0001; /** Latitude GPSLatitude 2 2 RATIONAL 3 */ public static final int TAG_GPS_LATITUDE = 0x0002; /** East or West Longitude GPSLongitudeRef 3 3 ASCII 2 */ public static final int TAG_GPS_LONGITUDE_REF = 0x0003; /** Longitude GPSLongitude 4 4 RATIONAL 3 */ public static final int TAG_GPS_LONGITUDE = 0x0004; /** Altitude reference GPSAltitudeRef 5 5 BYTE 1 */ public static final int TAG_GPS_ALTITUDE_REF = 0x0005; /** Altitude GPSAltitude 6 6 RATIONAL 1 */ public static final int TAG_GPS_ALTITUDE = 0x0006; /** GPS time (atomic clock) GPSTimeStamp 7 7 RATIONAL 3 */ public static final int TAG_GPS_TIME_STAMP = 0x0007; /** GPS satellites used for measurement GPSSatellites 8 8 ASCII Any */ public static final int TAG_GPS_SATELLITES = 0x0008; /** GPS receiver status GPSStatus 9 9 ASCII 2 */ public static final int TAG_GPS_STATUS = 0x0009; /** GPS measurement mode GPSMeasureMode 10 A ASCII 2 */ public static final int TAG_GPS_MEASURE_MODE = 0x000A; /** Measurement precision GPSDOP 11 B RATIONAL 1 */ public static final int TAG_GPS_DOP = 0x000B; /** Speed unit GPSSpeedRef 12 C ASCII 2 */ public static final int TAG_GPS_SPEED_REF = 0x000C; /** Speed of GPS receiver GPSSpeed 13 D RATIONAL 1 */ public static final int TAG_GPS_SPEED = 0x000D; /** Reference for direction of movement GPSTrackRef 14 E ASCII 2 */ public static final int TAG_GPS_TRACK_REF = 0x000E; /** Direction of movement GPSTrack 15 F RATIONAL 1 */ public static final int TAG_GPS_TRACK = 0x000F; /** Reference for direction of image GPSImgDirectionRef 16 10 ASCII 2 */ public static final int TAG_GPS_IMG_DIRECTION_REF = 0x0010; /** Direction of image GPSImgDirection 17 11 RATIONAL 1 */ public static final int TAG_GPS_IMG_DIRECTION = 0x0011; /** Geodetic survey data used GPSMapDatum 18 12 ASCII Any */ public static final int TAG_GPS_MAP_DATUM = 0x0012; /** Reference for latitude of destination GPSDestLatitudeRef 19 13 ASCII 2 */ public static final int TAG_GPS_DEST_LATITUDE_REF = 0x0013; /** Latitude of destination GPSDestLatitude 20 14 RATIONAL 3 */ public static final int TAG_GPS_DEST_LATITUDE = 0x0014; /** Reference for longitude of destination GPSDestLongitudeRef 21 15 ASCII 2 */ public static final int TAG_GPS_DEST_LONGITUDE_REF = 0x0015; /** Longitude of destination GPSDestLongitude 22 16 RATIONAL 3 */ public static final int TAG_GPS_DEST_LONGITUDE = 0x0016; /** Reference for bearing of destination GPSDestBearingRef 23 17 ASCII 2 */ public static final int TAG_GPS_DEST_BEARING_REF = 0x0017; /** Bearing of destination GPSDestBearing 24 18 RATIONAL 1 */ public static final int TAG_GPS_DEST_BEARING = 0x0018; /** Reference for distance to destination GPSDestDistanceRef 25 19 ASCII 2 */ public static final int TAG_GPS_DEST_DISTANCE_REF = 0x0019; /** Distance to destination GPSDestDistance 26 1A RATIONAL 1 */ public static final int TAG_GPS_DEST_DISTANCE = 0x001A; protected static final HashMap tagNameMap = new HashMap(); static { tagNameMap.put(new Integer(TAG_GPS_VERSION_ID), "GPS Version ID"); tagNameMap.put(new Integer(TAG_GPS_LATITUDE_REF), "GPS Latitude Ref"); tagNameMap.put(new Integer(TAG_GPS_LATITUDE), "GPS Latitude"); tagNameMap.put(new Integer(TAG_GPS_LONGITUDE_REF), "GPS Longitude Ref"); tagNameMap.put(new Integer(TAG_GPS_LONGITUDE), "GPS Longitude"); tagNameMap.put(new Integer(TAG_GPS_ALTITUDE_REF), "GPS Altitude Ref"); tagNameMap.put(new Integer(TAG_GPS_ALTITUDE), "GPS Altitude"); tagNameMap.put(new Integer(TAG_GPS_TIME_STAMP), "GPS Time-Stamp"); tagNameMap.put(new Integer(TAG_GPS_SATELLITES), "GPS Satellites"); tagNameMap.put(new Integer(TAG_GPS_STATUS), "GPS Status"); tagNameMap.put(new Integer(TAG_GPS_MEASURE_MODE), "GPS Measure Mode"); tagNameMap.put(new Integer(TAG_GPS_DOP), "GPS DOP"); tagNameMap.put(new Integer(TAG_GPS_SPEED_REF), "GPS Speed Ref"); tagNameMap.put(new Integer(TAG_GPS_SPEED), "GPS Speed"); tagNameMap.put(new Integer(TAG_GPS_TRACK_REF), "GPS Track Ref"); tagNameMap.put(new Integer(TAG_GPS_TRACK), "GPS Track"); tagNameMap.put(new Integer(TAG_GPS_IMG_DIRECTION_REF), "GPS Img Direction Ref"); tagNameMap.put(new Integer(TAG_GPS_IMG_DIRECTION_REF), "GPS Img Direction"); tagNameMap.put(new Integer(TAG_GPS_MAP_DATUM), "GPS Map Datum"); tagNameMap.put(new Integer(TAG_GPS_DEST_LATITUDE_REF), "GPS Dest Latitude Ref"); tagNameMap.put(new Integer(TAG_GPS_DEST_LATITUDE), "GPS Dest Latitude"); tagNameMap.put(new Integer(TAG_GPS_DEST_LONGITUDE_REF), "GPS Dest Longitude Ref"); tagNameMap.put(new Integer(TAG_GPS_DEST_LONGITUDE), "GPS Dest Longitude"); tagNameMap.put(new Integer(TAG_GPS_DEST_BEARING_REF), "GPS Dest Bearing Ref"); tagNameMap.put(new Integer(TAG_GPS_DEST_BEARING), "GPS Dest Bearing"); tagNameMap.put(new Integer(TAG_GPS_DEST_DISTANCE_REF), "GPS Dest Distance Ref"); tagNameMap.put(new Integer(TAG_GPS_DEST_DISTANCE), "GPS Dest Distance"); } public GpsDirectory() { this.setDescriptor(new GpsDescriptor(this)); } public String getName() { return "GPS"; } protected HashMap getTagNameMap() { return tagNameMap; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/KodakMakernoteDescriptor.java0000644000000000000000000000232410716136374030245 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import com.drew.metadata.TagDescriptor; /** * Provides human-readable string versions of the tags stored in a KodakMakernoteDirectory. * Thanks to David Carson for the initial version of this class. */ public class KodakMakernoteDescriptor extends TagDescriptor { public KodakMakernoteDescriptor(Directory directory) { super(directory); } public String getDescription(int tagType) throws MetadataException { return _directory.getString(tagType); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/KodakMakernoteDirectory.java0000644000000000000000000000204010716136374030066 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import java.util.HashMap; /** * Describes tags specific to Kodak cameras. */ public class KodakMakernoteDirectory extends Directory { protected static final HashMap _tagNameMap = new HashMap(); public String getName() { return "Kodak Makernote"; } protected HashMap getTagNameMap() { return _tagNameMap; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/KyoceraMakernoteDescriptor.java0000644000000000000000000000514710716136374030617 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import com.drew.metadata.TagDescriptor; /** * Provides human-readable string versions of the tags stored in a KyoceraMakernoteDirectory. * * Some information about this makernote taken from here: * http://www.ozhiker.com/electronics/pjmt/jpeg_info/kyocera_mn.html * * Most manufacturer's MakerNote counts the "offset to data" from the first byte * of TIFF header (same as the other IFD), but Kyocera (along with Fujifilm) counts * it from the first byte of MakerNote itself. */ public class KyoceraMakernoteDescriptor extends TagDescriptor { public KyoceraMakernoteDescriptor(Directory directory) { super(directory); } public String getDescription(int tagType) throws MetadataException { switch (tagType) { case KyoceraMakernoteDirectory.TAG_KYOCERA_PRINT_IMAGE_MATCHING_INFO: return getPrintImageMatchingInfoDescription(); case KyoceraMakernoteDirectory.TAG_KYOCERA_PROPRIETARY_THUMBNAIL: return getProprietaryThumbnailDataDescription(); default: return _directory.getString(tagType); } } public String getPrintImageMatchingInfoDescription() throws MetadataException { if (!_directory.containsTag(KyoceraMakernoteDirectory.TAG_KYOCERA_PRINT_IMAGE_MATCHING_INFO)) return null; byte[] bytes = _directory.getByteArray(KyoceraMakernoteDirectory.TAG_KYOCERA_PRINT_IMAGE_MATCHING_INFO); return "(" + bytes.length + " bytes)"; } public String getProprietaryThumbnailDataDescription() throws MetadataException { if (!_directory.containsTag(KyoceraMakernoteDirectory.TAG_KYOCERA_PROPRIETARY_THUMBNAIL)) return null; byte[] bytes = _directory.getByteArray(KyoceraMakernoteDirectory.TAG_KYOCERA_PROPRIETARY_THUMBNAIL); return "(" + bytes.length + " bytes)"; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/KyoceraMakernoteDirectory.java0000644000000000000000000000315610716136374030443 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 27-Nov-2002 10:10:47 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import java.util.HashMap; /** * */ public class KyoceraMakernoteDirectory extends Directory { public static final int TAG_KYOCERA_PROPRIETARY_THUMBNAIL = 0x0001; public static final int TAG_KYOCERA_PRINT_IMAGE_MATCHING_INFO = 0x0E00; protected static final HashMap tagNameMap = new HashMap(); static { tagNameMap.put(new Integer(TAG_KYOCERA_PROPRIETARY_THUMBNAIL), "Proprietary Thumbnail Format Data"); tagNameMap.put(new Integer(TAG_KYOCERA_PRINT_IMAGE_MATCHING_INFO), "Print Image Matching (PIM) Info"); } public KyoceraMakernoteDirectory() { this.setDescriptor(new KyoceraMakernoteDescriptor(this)); } public String getName() { return "Kyocera/Contax Makernote"; } protected HashMap getTagNameMap() { return tagNameMap; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/NikonType1MakernoteDescriptor.java0000644000000000000000000001703010716136374031215 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.metadata.exif; import com.drew.lang.Rational; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import com.drew.metadata.TagDescriptor; /** * Provides human-readable string versions of the tags stored in a NikonType1MakernoteDirectory. * Type-1 is for E-Series cameras prior to (not including) E990. For example: E700, E800, E900, * E900S, E910, E950. * * MakerNote starts from ASCII string "Nikon". Data format is the same as IFD, but it starts from * offset 0x08. This is the same as Olympus except start string. Example of actual data * structure is shown below. *

 * :0000: 4E 69 6B 6F 6E 00 01 00-05 00 02 00 02 00 06 00 Nikon...........
 * :0010: 00 00 EC 02 00 00 03 00-03 00 01 00 00 00 06 00 ................
 * 
*/ public class NikonType1MakernoteDescriptor extends TagDescriptor { public NikonType1MakernoteDescriptor(Directory directory) { super(directory); } public String getDescription(int tagType) throws MetadataException { switch (tagType) { case NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_QUALITY: return getQualityDescription(); case NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_COLOR_MODE: return getColorModeDescription(); case NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_IMAGE_ADJUSTMENT: return getImageAdjustmentDescription(); case NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_CCD_SENSITIVITY: return getCcdSensitivityDescription(); case NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_WHITE_BALANCE: return getWhiteBalanceDescription(); case NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_FOCUS: return getFocusDescription(); case NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_DIGITAL_ZOOM: return getDigitalZoomDescription(); case NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_CONVERTER: return getConverterDescription(); default: return _directory.getString(tagType); } } public String getConverterDescription() throws MetadataException { if (!_directory.containsTag(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_CONVERTER)) return null; int value = _directory.getInt(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_CONVERTER); switch (value) { case 0: return "None"; case 1: return "Fisheye converter"; default: return "Unknown (" + value + ")"; } } public String getDigitalZoomDescription() throws MetadataException { if (!_directory.containsTag(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_DIGITAL_ZOOM)) return null; Rational value = _directory.getRational(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_DIGITAL_ZOOM); if (value.getNumerator() == 0) { return "No digital zoom"; } return value.toSimpleString(true) + "x digital zoom"; } public String getFocusDescription() throws MetadataException { if (!_directory.containsTag(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_FOCUS)) return null; Rational value = _directory.getRational(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_FOCUS); if (value.getNumerator() == 1 && value.getDenominator() == 0) { return "Infinite"; } return value.toSimpleString(true); } public String getWhiteBalanceDescription() throws MetadataException { if (!_directory.containsTag(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_WHITE_BALANCE)) return null; int value = _directory.getInt(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_WHITE_BALANCE); switch (value) { case 0: return "Auto"; case 1: return "Preset"; case 2: return "Daylight"; case 3: return "Incandescense"; case 4: return "Flourescence"; case 5: return "Cloudy"; case 6: return "SpeedLight"; default: return "Unknown (" + value + ")"; } } public String getCcdSensitivityDescription() throws MetadataException { if (!_directory.containsTag(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_CCD_SENSITIVITY)) return null; int value = _directory.getInt(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_CCD_SENSITIVITY); switch (value) { case 0: return "ISO80"; case 2: return "ISO160"; case 4: return "ISO320"; case 5: return "ISO100"; default: return "Unknown (" + value + ")"; } } public String getImageAdjustmentDescription() throws MetadataException { if (!_directory.containsTag(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_IMAGE_ADJUSTMENT)) return null; int value = _directory.getInt(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_IMAGE_ADJUSTMENT); switch (value) { case 0: return "Normal"; case 1: return "Bright +"; case 2: return "Bright -"; case 3: return "Contrast +"; case 4: return "Contrast -"; default: return "Unknown (" + value + ")"; } } public String getColorModeDescription() throws MetadataException { if (!_directory.containsTag(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_COLOR_MODE)) return null; int value = _directory.getInt(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_COLOR_MODE); switch (value) { case 1: return "Color"; case 2: return "Monochrome"; default: return "Unknown (" + value + ")"; } } public String getQualityDescription() throws MetadataException { if (!_directory.containsTag(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_QUALITY)) return null; int value = _directory.getInt(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_QUALITY); switch (value) { case 1: return "VGA Basic"; case 2: return "VGA Normal"; case 3: return "VGA Fine"; case 4: return "SXGA Basic"; case 5: return "SXGA Normal"; case 6: return "SXGA Fine"; default: return "Unknown (" + value + ")"; } } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/NikonType1MakernoteDirectory.java0000644000000000000000000000672110716136374031050 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 27-Nov-2002 10:10:47 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import java.util.HashMap; /** * Contains values specific to Nikon cameras. Type-1 is for E-Series cameras prior to (not including) E990. * * There are 3 formats of Nikon's MakerNote. MakerNote of E700/E800/E900/E900S/E910/E950 * starts from ASCII string "Nikon". Data format is the same as IFD, but it starts from * offset 0x08. This is the same as Olympus except start string. Example of actual data * structure is shown below. *

 * :0000: 4E 69 6B 6F 6E 00 01 00-05 00 02 00 02 00 06 00 Nikon...........
 * :0010: 00 00 EC 02 00 00 03 00-03 00 01 00 00 00 06 00 ................
 * 
*/ public class NikonType1MakernoteDirectory extends Directory { public static final int TAG_NIKON_TYPE1_UNKNOWN_1 = 0x0002; public static final int TAG_NIKON_TYPE1_QUALITY = 0x0003; public static final int TAG_NIKON_TYPE1_COLOR_MODE = 0x0004; public static final int TAG_NIKON_TYPE1_IMAGE_ADJUSTMENT = 0x0005; public static final int TAG_NIKON_TYPE1_CCD_SENSITIVITY = 0x0006; public static final int TAG_NIKON_TYPE1_WHITE_BALANCE = 0x0007; public static final int TAG_NIKON_TYPE1_FOCUS = 0x0008; public static final int TAG_NIKON_TYPE1_UNKNOWN_2 = 0x0009; public static final int TAG_NIKON_TYPE1_DIGITAL_ZOOM = 0x000A; public static final int TAG_NIKON_TYPE1_CONVERTER = 0x000B; public static final int TAG_NIKON_TYPE1_UNKNOWN_3 = 0x0F00; protected static final HashMap _tagNameMap = new HashMap(); static { _tagNameMap.put(new Integer(TAG_NIKON_TYPE1_CCD_SENSITIVITY), "CCD Sensitivity"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE1_COLOR_MODE), "Color Mode"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE1_DIGITAL_ZOOM), "Digital Zoom"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE1_CONVERTER), "Fisheye Converter"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE1_FOCUS), "Focus"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE1_IMAGE_ADJUSTMENT), "Image Adjustment"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE1_QUALITY), "Quality"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE1_UNKNOWN_1), "Makernote Unknown 1"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE1_UNKNOWN_2), "Makernote Unknown 2"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE1_UNKNOWN_3), "Makernote Unknown 3"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE1_WHITE_BALANCE), "White Balance"); } public NikonType1MakernoteDirectory() { this.setDescriptor(new NikonType1MakernoteDescriptor(this)); } public String getName() { return "Nikon Makernote"; } protected HashMap getTagNameMap() { return _tagNameMap; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/NikonType2MakernoteDescriptor.java0000644000000000000000000001511310716136374031216 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.metadata.exif; import com.drew.lang.Rational; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import com.drew.metadata.TagDescriptor; import java.text.DecimalFormat; /** * Provides human-readable string versions of the tags stored in a NikonType2MakernoteDirectory. * Type-2 applies to the E990 and D-series cameras such as the D1, D70 and D100. */ public class NikonType2MakernoteDescriptor extends TagDescriptor { public NikonType2MakernoteDescriptor(Directory directory) { super(directory); } private NikonType2MakernoteDirectory getMakernoteDirectory() { return (NikonType2MakernoteDirectory)_directory; } public String getDescription(int tagType) throws MetadataException { switch (tagType) { case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_LENS: return getLensDescription(); case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_CAMERA_HUE_ADJUSTMENT: return getHueAdjustmentDescription(); case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_CAMERA_COLOR_MODE: return getColorModeDescription(); case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_AUTO_FLASH_COMPENSATION: return getAutoFlashCompensationDescription(); case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_ISO_1: return getIsoSettingDescription(); case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_DIGITAL_ZOOM: return getDigitalZoomDescription(); case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_AF_FOCUS_POSITION: return getAutoFocusPositionDescription(); case NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_FIRMWARE_VERSION: return getAutoFirmwareVersionDescription(); default: return _directory.getString(tagType); } } public String getAutoFocusPositionDescription() throws MetadataException { if (!_directory.containsTag(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_AF_FOCUS_POSITION)) return null; int[] values = _directory.getIntArray(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_AF_FOCUS_POSITION); if (values.length != 4 || values[0] != 0 || values[2] != 0 || values[3] != 0) { return "Unknown (" + _directory.getString(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_AF_FOCUS_POSITION) + ")"; } switch (values[1]) { case 0: return "Centre"; case 1: return "Top"; case 2: return "Bottom"; case 3: return "Left"; case 4: return "Right"; default: return "Unknown (" + values[1] + ")"; } } public String getDigitalZoomDescription() throws MetadataException { if (!_directory.containsTag(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_DIGITAL_ZOOM)) return null; Rational rational = _directory.getRational(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_DIGITAL_ZOOM); if (rational.intValue() == 1) { return "No digital zoom"; } return rational.toSimpleString(true) + "x digital zoom"; } public String getIsoSettingDescription() throws MetadataException { if (!_directory.containsTag(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_ISO_1)) return null; int[] values = _directory.getIntArray(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_ISO_1); if (values[0] != 0 || values[1] == 0) { return "Unknown (" + _directory.getString(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_ISO_1) + ")"; } return "ISO " + values[1]; } public String getAutoFlashCompensationDescription() throws MetadataException { Rational ev = getMakernoteDirectory().getAutoFlashCompensation(); if (ev==null) return "Unknown"; DecimalFormat decimalFormat = new DecimalFormat("0.##"); return decimalFormat.format(ev.floatValue()) + " EV"; } public String getLensDescription() throws MetadataException { if (!_directory.containsTag(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_LENS)) return null; Rational[] lensValues = _directory.getRationalArray(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_LENS); if (lensValues.length!=4) return _directory.getString(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_LENS); StringBuffer description = new StringBuffer(); description.append(lensValues[0].intValue()); description.append('-'); description.append(lensValues[1].intValue()); description.append("mm f/"); description.append(lensValues[2].floatValue()); description.append('-'); description.append(lensValues[3].floatValue()); return description.toString(); } public String getHueAdjustmentDescription() { if (!_directory.containsTag(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_CAMERA_HUE_ADJUSTMENT)) return null; return _directory.getString(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_CAMERA_HUE_ADJUSTMENT) + " degrees"; } public String getColorModeDescription() { if (!_directory.containsTag(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_CAMERA_COLOR_MODE)) return null; String raw = _directory.getString(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_CAMERA_COLOR_MODE); if (raw.startsWith("MODE1")) return "Mode I (sRGB)"; return raw; } public String getAutoFirmwareVersionDescription() throws MetadataException { if (!_directory.containsTag(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_FIRMWARE_VERSION)) return null; int[] ints = _directory.getIntArray(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_FIRMWARE_VERSION); return ExifDescriptor.convertBytesToVersionString(ints); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/NikonType2MakernoteDirectory.java0000644000000000000000000004241210716136374031046 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 3-Oct-2002 10:10:47 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.lang.Rational; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import java.util.HashMap; /** * Contains values specific to Nikon cameras. Type-2 applies to the E990 and D-series cameras such as the E990, D1, * D70 and D100. * * Thanks to Fabrizio Giudici for publishing his reverse-engineering of the D100 makernote data. * http://www.timelesswanderings.net/equipment/D100/NEF.html * * Note that the camera implements image protection (locking images) via the file's 'readonly' attribute. Similarly * image hiding uses the 'hidden' attribute (observed on the D70). Consequently, these values are not available here. * * Additional sample images have been observed, and their tag values recorded in javadoc comments for each tag's field. * New tags have subsequently been added since Fabrizio's observations. * * In earlier models (such as the E990 and D1), this directory begins at the first byte of the makernote IFD. In * later models, the IFD was given the standard prefix to indicate the camera models (most other manufacturers also * provide this prefix to aid in software decoding). */ public class NikonType2MakernoteDirectory extends Directory { /** * Values observed * - 0200 (D70) * - 0200 (D1X) */ public static final int TAG_NIKON_TYPE2_FIRMWARE_VERSION = 0x0001; /** * Values observed * - 0 250 * - 0 400 */ public static final int TAG_NIKON_TYPE2_ISO_1 = 0x0002; /** * Values observed * - COLOR (seen in the D1X) */ public static final int TAG_NIKON_TYPE2_COLOR_MODE = 0x0003; /** * Values observed * - FILE * - RAW * - NORMAL * - FINE */ public static final int TAG_NIKON_TYPE2_QUALITY_AND_FILE_FORMAT = 0x0004; /** * The white balance as set in the camera. * * Values observed * - AUTO * - SUNNY (D70) * - FLASH (D1X) * (presumably also SHADOW / INCANDESCENT / FLUORESCENT / CLOUDY) */ public static final int TAG_NIKON_TYPE2_CAMERA_WHITE_BALANCE = 0x0005; /** * The sharpening as set in the camera. * * Values observed * - AUTO * - NORMAL (D70) * - NONE (D1X) */ public static final int TAG_NIKON_TYPE2_CAMERA_SHARPENING = 0x0006; /** * The auto-focus type used by the camera. * * Values observed * - AF-S * - AF-C * - MANUAL */ public static final int TAG_NIKON_TYPE2_AF_TYPE = 0x0007; /** * Values observed * - NORMAL * - RED-EYE * * Note: when TAG_NIKON_TYPE2_AUTO_FLASH_MODE is blank, Nikon Browser displays "Flash Sync Mode: Not Attached" */ public static final int TAG_NIKON_TYPE2_FLASH_SYNC_MODE = 0x0008; /** * Values observed * - Built-in,TTL * - Optional,TTL (with speedlight SB800, flash sync mode as NORMAL. NikonBrowser reports Auto Flash Comp: 0 EV -- which tag is that?) (D70) * - NEW_TTL (Nikon Browser interprets as "D-TTL") * - (blank -- accompanied FlashSyncMode of NORMAL) (D70) */ public static final int TAG_NIKON_TYPE2_AUTO_FLASH_MODE = 0x0009; /** * Added during merge of Type2 & Type3. May apply to earlier models, such as E990 and D1. */ public static final int TAG_NIKON_TYPE2_UNKNOWN_34 = 0x000A; /** * Values observed * - 0 */ public static final int TAG_NIKON_TYPE2_CAMERA_WHITE_BALANCE_FINE = 0x000B; /** * The first two numbers are coefficients to multiply red and blue channels according to white balance as set in the * camera. The meaning of the third and the fourth numbers is unknown. * * Values observed * - 2.25882352 1.76078431 0.0 0.0 * - 10242/1 34305/1 0/1 0/1 * - 234765625/100000000 1140625/1000000 1/1 1/1 */ public static final int TAG_NIKON_TYPE2_CAMERA_WHITE_BALANCE_RB_COEFF = 0x000C; /** * Values observed * - 0,1,6,0 (hex) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_1 = 0x000D; /** * Values observed * -  * - 0,1,c,0 (hex) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_2 = 0x000E; /** * Added during merge of Type2 & Type3. May apply to earlier models, such as E990 and D1. */ public static final int TAG_NIKON_TYPE2_ISO_SELECTION = 0x000F; /** * Added during merge of Type2 & Type3. May apply to earlier models, such as E990 and D1. */ public static final int TAG_NIKON_TYPE2_DATA_DUMP = 0x0010; /** * Values observed * - 914 * - 1379 (D70) * - 2781 (D1X) * - 6942 (D100) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_3 = 0x0011; /** * Values observed * - (no value -- blank) */ public static final int TAG_NIKON_TYPE2_AUTO_FLASH_COMPENSATION = 0x0012; /** * Values observed * - 0 250 * - 0 400 */ public static final int TAG_NIKON_TYPE2_ISO_2 = 0x0013; /** * Values observed * - 0 0 49163 53255 * - 0 0 3008 2000 (the image dimensions were 3008x2000) (D70) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_21 = 0x0016; /** * Values observed * - (blank) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_22 = 0x0017; /** * Values observed * - (blank) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_23 = 0x0018; /** * Values observed * - 0 */ public static final int TAG_NIKON_TYPE2_UNKNOWN_24 = 0x0019; /** * Added during merge of Type2 & Type3. May apply to earlier models, such as E990 and D1. */ public static final int TAG_NIKON_TYPE2_IMAGE_ADJUSTMENT = 0x0080; /** * The tone compensation as set in the camera. * * Values observed * - AUTO * - NORMAL (D1X, D100) */ public static final int TAG_NIKON_TYPE2_CAMERA_TONE_COMPENSATION = 0x0081; /** * Added during merge of Type2 & Type3. May apply to earlier models, such as E990 and D1. */ public static final int TAG_NIKON_TYPE2_ADAPTER = 0x0082; /** * Values observed * - 6 * - 6 (D70) * - 2 (D1X) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_4 = 0x0083; /** * A pair of focal/max-fstop values that describe the lens used. * * Values observed * - 180.0,180.0,2.8,2.8 (D100) * - 240/10 850/10 35/10 45/10 * - 18-70mm f/3.5-4.5 (D70) * - 17-35mm f/2.8-2.8 (D1X) * - 70-200mm f/2.8-2.8 (D70) * * Nikon Browser identifies the lens as "18-70mm F/3.5-4.5 G" which * is identical to metadata extractor, except for the "G". This must * be coming from another tag... */ public static final int TAG_NIKON_TYPE2_LENS = 0x0084; /** * Added during merge of Type2 & Type3. May apply to earlier models, such as E990 and D1. */ public static final int TAG_NIKON_TYPE2_MANUAL_FOCUS_DISTANCE = 0x0085; /** * Added during merge of Type2 & Type3. May apply to earlier models, such as E990 and D1. */ public static final int TAG_NIKON_TYPE2_DIGITAL_ZOOM = 0x0086; /** * Values observed * - 0 * - 9 * - 3 (D1X) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_5 = 0x0087; /** * Values observed * - */ public static final int TAG_NIKON_TYPE2_AF_FOCUS_POSITION = 0x0088; /** * Values observed * - 0 * - 1 */ public static final int TAG_NIKON_TYPE2_UNKNOWN_7 = 0x0089; /** * Values observed * - 0 * - 0 */ public static final int TAG_NIKON_TYPE2_UNKNOWN_20 = 0x008A; /** * Values observed * - 48,1,c,0 (hex) (D100) * - @ */ public static final int TAG_NIKON_TYPE2_UNKNOWN_8 = 0x008B; /** * Unknown. Fabrizio believes this may be a lookup table for the user-defined curve. * * Values observed * - (blank) (D1X) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_9 = 0x008C; /** * The color space as set in the camera. * * Values observed * - MODE1 * - Mode I (sRGB) (D70) * - MODE2 (D1X, D100) */ public static final int TAG_NIKON_TYPE2_CAMERA_COLOR_MODE = 0x008D; /** * Values observed * - NATURAL * - SPEEDLIGHT (D70, D1X) */ public static final int TAG_NIKON_TYPE2_LIGHT_SOURCE = 0x0090; /** * Values observed * - 0100) * - 0103 (D70) * - 0100 (D1X) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_11 = 0x0091; /** * The hue adjustment as set in the camera. * * Values observed * - 0 */ public static final int TAG_NIKON_TYPE2_CAMERA_HUE_ADJUSTMENT = 0x0092; /** * Values observed * - OFF */ public static final int TAG_NIKON_TYPE2_NOISE_REDUCTION = 0x0095; /** * Values observed * - 0100 '~e3 * - 0103 */ public static final int TAG_NIKON_TYPE2_UNKNOWN_12 = 0x0097; /** * Values observed * - 0100fht@7b,4x,D"Y * - 01015 * - 0100w\cH+D$$h$5Q (D1X) * - 30,31,30,30,0,0,b,48,7c,7c,24,24,5,15,24,0,0,0,0,0 (hex) (D100) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_13 = 0x0098; /** * Values observed * - 2014 662 (D1X) * - 1517,1012 (D100) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_14 = 0x0099; /** * Values observed * - 78/10 78/10 * - 78/10 78/10 (D70) * - 59/10 59/5 (D1X) * - 7.8,7.8 (D100) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_15 = 0x009A; /** * Values observed * - NO= 00002539 */ public static final int TAG_NIKON_TYPE2_UNKNOWN_25 = 0x00A0; /** * Values observed * - 1564851 */ public static final int TAG_NIKON_TYPE2_UNKNOWN_26 = 0x00A2; /** * Values observed * - 0 */ public static final int TAG_NIKON_TYPE2_UNKNOWN_27 = 0x00A3; /** * This appears to be a sequence number to indentify the exposure. This value seems to increment * for consecutive exposures (observed on D70). * * Values observed * - 5062 */ public static final int TAG_NIKON_TYPE2_EXPOSURE_SEQUENCE_NUMBER = 0x00A7; /** * Values observed * - 0100 (D70) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_32 = 0x00A8; /** * Values observed * - NORMAL (D70) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_33 = 0x00A9; /** * Nikon Browser suggests this value represents Saturation... * Values observed * - NORMAL (D70) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_29 = 0x00AA; /** * Values observed * - AUTO (D70) * - (blank) (D70) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_30 = 0x00AB; /** * Data about changes set by Nikon Capture Editor. * * Values observed */ public static final int TAG_NIKON_TYPE2_CAPTURE_EDITOR_DATA = 0x0E01; /** * Values observed * - 1473 * - 7036 (D100) */ public static final int TAG_NIKON_TYPE2_UNKNOWN_16 = 0x0E10; protected static final HashMap _tagNameMap = new HashMap(); static { _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_FIRMWARE_VERSION), "Firmware Version"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_ISO_1), "ISO"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_QUALITY_AND_FILE_FORMAT), "Quality & File Format"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_CAMERA_WHITE_BALANCE), "White Balance"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_CAMERA_SHARPENING), "Sharpening"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_AF_TYPE), "AF Type"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_CAMERA_WHITE_BALANCE_FINE), "White Balance Fine"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_CAMERA_WHITE_BALANCE_RB_COEFF), "White Balance RB Coefficients"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_ISO_2), "ISO"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_ISO_SELECTION), "ISO Selection"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_DATA_DUMP), "Data Dump"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_IMAGE_ADJUSTMENT), "Image Adjustment"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_CAMERA_TONE_COMPENSATION), "Tone Compensation"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_ADAPTER), "Adapter"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_LENS), "Lens"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_MANUAL_FOCUS_DISTANCE), "Manual Focus Distance"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_DIGITAL_ZOOM), "Digital Zoom"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_CAMERA_COLOR_MODE), "Colour Mode"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_CAMERA_HUE_ADJUSTMENT), "Camera Hue Adjustment"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_NOISE_REDUCTION), "Noise Reduction"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_CAPTURE_EDITOR_DATA), "Capture Editor Data"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_1), "Unknown 01"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_2), "Unknown 02"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_3), "Unknown 03"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_4), "Unknown 04"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_5), "Unknown 05"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_AF_FOCUS_POSITION), "AF Focus Position"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_7), "Unknown 07"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_8), "Unknown 08"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_9), "Unknown 09"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_LIGHT_SOURCE), "Light source"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_11), "Unknown 11"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_12), "Unknown 12"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_13), "Unknown 13"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_14), "Unknown 14"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_15), "Unknown 15"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_16), "Unknown 16"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_FLASH_SYNC_MODE), "Flash Sync Mode"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_AUTO_FLASH_MODE), "Auto Flash Mode"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_AUTO_FLASH_COMPENSATION), "Auto Flash Compensation"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_EXPOSURE_SEQUENCE_NUMBER), "Exposure Sequence Number"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_COLOR_MODE), "Color Mode"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_20), "Unknown 20"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_21), "Unknown 21"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_22), "Unknown 22"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_23), "Unknown 23"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_24), "Unknown 24"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_25), "Unknown 25"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_26), "Unknown 26"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_27), "Unknown 27"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_29), "Unknown 29"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_30), "Unknown 30"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_32), "Unknown 32"); _tagNameMap.put(new Integer(TAG_NIKON_TYPE2_UNKNOWN_33), "Unknown 33"); } public NikonType2MakernoteDirectory() { this.setDescriptor(new NikonType2MakernoteDescriptor(this)); } public Rational getAutoFlashCompensation() throws MetadataException { if (!containsTag(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_AUTO_FLASH_COMPENSATION)) return null; byte[] bytes = getByteArray(NikonType2MakernoteDirectory.TAG_NIKON_TYPE2_AUTO_FLASH_COMPENSATION); return CalculateFlashCompensationFromBytes(bytes); } public static Rational CalculateFlashCompensationFromBytes(byte[] bytes) { if (bytes.length==3) { byte denominator = bytes[2]; int numerator = (int)bytes[0] * bytes[1]; return new Rational(numerator, denominator); } return null; } public String getName() { return "Nikon Makernote"; } protected HashMap getTagNameMap() { return _tagNameMap; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/OlympusMakernoteDescriptor.java0000644000000000000000000001236210716136374030667 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import com.drew.metadata.TagDescriptor; /** * Provides human-readable string versions of the tags stored in an OlympusMakernoteDirectory. */ public class OlympusMakernoteDescriptor extends TagDescriptor { public OlympusMakernoteDescriptor(Directory directory) { super(directory); } public String getDescription(int tagType) throws MetadataException { switch (tagType) { case OlympusMakernoteDirectory.TAG_OLYMPUS_SPECIAL_MODE: return getSpecialModeDescription(); case OlympusMakernoteDirectory.TAG_OLYMPUS_JPEG_QUALITY: return getJpegQualityDescription(); case OlympusMakernoteDirectory.TAG_OLYMPUS_MACRO_MODE: return getMacroModeDescription(); case OlympusMakernoteDirectory.TAG_OLYMPUS_DIGI_ZOOM_RATIO: return getDigiZoomRatioDescription(); default: return _directory.getString(tagType); } } public String getDigiZoomRatioDescription() throws MetadataException { if (!_directory.containsTag(OlympusMakernoteDirectory.TAG_OLYMPUS_DIGI_ZOOM_RATIO)) return null; int value = _directory.getInt(OlympusMakernoteDirectory.TAG_OLYMPUS_DIGI_ZOOM_RATIO); switch (value) { case 0: return "Normal"; case 2: return "Digital 2x Zoom"; default: return "Unknown (" + value + ")"; } } public String getMacroModeDescription() throws MetadataException { if (!_directory.containsTag(OlympusMakernoteDirectory.TAG_OLYMPUS_MACRO_MODE)) return null; int value = _directory.getInt(OlympusMakernoteDirectory.TAG_OLYMPUS_MACRO_MODE); switch (value) { case 0: return "Normal (no macro)"; case 1: return "Macro"; default: return "Unknown (" + value + ")"; } } public String getJpegQualityDescription() throws MetadataException { if (!_directory.containsTag(OlympusMakernoteDirectory.TAG_OLYMPUS_JPEG_QUALITY)) return null; int value = _directory.getInt(OlympusMakernoteDirectory.TAG_OLYMPUS_JPEG_QUALITY); switch (value) { case 1: return "SQ"; case 2: return "HQ"; case 3: return "SHQ"; default: return "Unknown (" + value + ")"; } } public String getSpecialModeDescription() throws MetadataException { if (!_directory.containsTag(OlympusMakernoteDirectory.TAG_OLYMPUS_SPECIAL_MODE)) return null; int[] values = _directory.getIntArray(OlympusMakernoteDirectory.TAG_OLYMPUS_SPECIAL_MODE); StringBuffer desc = new StringBuffer(); switch (values[0]) { case 0: desc.append("Normal picture taking mode"); break; case 1: desc.append("Unknown picture taking mode"); break; case 2: desc.append("Fast picture taking mode"); break; case 3: desc.append("Panorama picture taking mode"); break; default: desc.append("Unknown picture taking mode"); break; } desc.append(" - "); switch (values[1]) { case 0: desc.append("Unknown sequence number"); break; case 1: desc.append("1st in a sequnce"); break; case 2: desc.append("2nd in a sequence"); break; case 3: desc.append("3rd in a sequence"); break; default: desc.append(values[1]); desc.append("th in a sequence"); break; } switch (values[2]) { case 1: desc.append("Left to right panorama direction"); break; case 2: desc.append("Right to left panorama direction"); break; case 3: desc.append("Bottom to top panorama direction"); break; case 4: desc.append("Top to bottom panorama direction"); break; } return desc.toString(); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/OlympusMakernoteDirectory.java0000644000000000000000000002552110716136374030516 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 27-Nov-2002 10:10:47 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import java.util.HashMap; /** * The Olympus makernote is used by many manufacturers, and as such contains some tags that appear specific to * those manufacturers. Other users include Konica, Minolta and Epson. */ public class OlympusMakernoteDirectory extends Directory { /** * Used by Konica / Minolta cameras. */ public static final int TAG_OLYMPUS_MAKERNOTE_VERSION = 0x0000; /** * Used by Konica / Minolta cameras. */ public static final int TAG_OLYMPUS_CAMERA_SETTINGS_1 = 0x0001; /** * Alternate Camera Settings Tag. Used by Konica / Minolta cameras. */ public static final int TAG_OLYMPUS_CAMERA_SETTINGS_2 = 0x0003; /** * Used by Konica / Minolta cameras. */ public static final int TAG_OLYMPUS_COMPRESSED_IMAGE_SIZE = 0x0040; /** * Used by Konica / Minolta cameras. */ public static final int TAG_OLYMPUS_MINOLTA_THUMBNAIL_OFFSET_1 = 0x0081; /** * Alternate Thumbnail Offset. Used by Konica / Minolta cameras. */ public static final int TAG_OLYMPUS_MINOLTA_THUMBNAIL_OFFSET_2 = 0x0088; /** * Length of thumbnail in bytes. Used by Konica / Minolta cameras. */ public static final int TAG_OLYMPUS_MINOLTA_THUMBNAIL_LENGTH = 0x0089; /** * Used by Konica / Minolta cameras * 0 = Natural Colour * 1 = Black & White * 2 = Vivid colour * 3 = Solarization * 4 = AdobeRGB */ public static final int TAG_OLYMPUS_COLOUR_MODE = 0x0101; /** * Used by Konica / Minolta cameras. * 0 = Raw * 1 = Super Fine * 2 = Fine * 3 = Standard * 4 = Extra Fine */ public static final int TAG_OLYMPUS_IMAGE_QUALITY_1 = 0x0102; /** * Not 100% sure about this tag. * * Used by Konica / Minolta cameras. * 0 = Raw * 1 = Super Fine * 2 = Fine * 3 = Standard * 4 = Extra Fine */ public static final int TAG_OLYMPUS_IMAGE_QUALITY_2 = 0x0103; /** * Three values: * Value 1: 0=Normal, 2=Fast, 3=Panorama * Value 2: Sequence Number Value 3: * 1 = Panorama Direction: Left to Right * 2 = Panorama Direction: Right to Left * 3 = Panorama Direction: Bottom to Top * 4 = Panorama Direction: Top to Bottom */ public static final int TAG_OLYMPUS_SPECIAL_MODE = 0x0200; /** * 1 = Standard Quality * 2 = High Quality * 3 = Super High Quality */ public static final int TAG_OLYMPUS_JPEG_QUALITY = 0x0201; /** * 0 = Normal (Not Macro) * 1 = Macro */ public static final int TAG_OLYMPUS_MACRO_MODE = 0x0202; /** * */ public static final int TAG_OLYMPUS_UNKNOWN_1 = 0x0203; /** * Zoom Factor (0 or 1 = normal) */ public static final int TAG_OLYMPUS_DIGI_ZOOM_RATIO = 0x0204; /** * */ public static final int TAG_OLYMPUS_UNKNOWN_2 = 0x0205; /** * */ public static final int TAG_OLYMPUS_UNKNOWN_3 = 0x0206; /** * */ public static final int TAG_OLYMPUS_FIRMWARE_VERSION = 0x0207; /** * */ public static final int TAG_OLYMPUS_PICT_INFO = 0x0208; /** * */ public static final int TAG_OLYMPUS_CAMERA_ID = 0x0209; /** * Used by Epson cameras * Units = pixels */ public static final int TAG_OLYMPUS_IMAGE_WIDTH = 0x020B; /** * Used by Epson cameras * Units = pixels */ public static final int TAG_OLYMPUS_IMAGE_HEIGHT = 0x020C; /** * A string. Used by Epson cameras. */ public static final int TAG_OLYMPUS_ORIGINAL_MANUFACTURER_MODEL = 0x020D; /** * See the PIM specification here: * http://www.ozhiker.com/electronics/pjmt/jpeg_info/pim.html */ public static final int TAG_OLYMPUS_PRINT_IMAGE_MATCHING_INFO = 0x0E00; /** * */ public static final int TAG_OLYMPUS_DATA_DUMP = 0x0F00; /** * */ public static final int TAG_OLYMPUS_FLASH_MODE = 0x1004; /** * */ public static final int TAG_OLYMPUS_BRACKET = 0x1006; /** * */ public static final int TAG_OLYMPUS_FOCUS_MODE = 0x100B; /** * */ public static final int TAG_OLYMPUS_FOCUS_DISTANCE = 0x100C; /** * */ public static final int TAG_OLYMPUS_ZOOM = 0x100D; /** * */ public static final int TAG_OLYMPUS_MACRO_FOCUS = 0x100E; /** * */ public static final int TAG_OLYMPUS_SHARPNESS = 0x100F; /** * */ public static final int TAG_OLYMPUS_COLOUR_MATRIX = 0x1011; /** * */ public static final int TAG_OLYMPUS_BLACK_LEVEL = 0x1012; /** * */ public static final int TAG_OLYMPUS_WHITE_BALANCE = 0x1015; /** * */ public static final int TAG_OLYMPUS_RED_BIAS = 0x1017; /** * */ public static final int TAG_OLYMPUS_BLUE_BIAS = 0x1018; /** * */ public static final int TAG_OLYMPUS_SERIAL_NUMBER = 0x101A; /** * */ public static final int TAG_OLYMPUS_FLASH_BIAS = 0x1023; /** * */ public static final int TAG_OLYMPUS_CONTRAST = 0x1029; /** * */ public static final int TAG_OLYMPUS_SHARPNESS_FACTOR = 0x102A; /** * */ public static final int TAG_OLYMPUS_COLOUR_CONTROL = 0x102B; /** * */ public static final int TAG_OLYMPUS_VALID_BITS = 0x102C; /** * */ public static final int TAG_OLYMPUS_CORING_FILTER = 0x102D; /** * */ public static final int TAG_OLYMPUS_FINAL_WIDTH = 0x102E; /** * */ public static final int TAG_OLYMPUS_FINAL_HEIGHT = 0x102F; /** * */ public static final int TAG_OLYMPUS_COMPRESSION_RATIO = 0x1034; protected static final HashMap tagNameMap = new HashMap(); static { tagNameMap.put(new Integer(TAG_OLYMPUS_SPECIAL_MODE), "Special Mode"); tagNameMap.put(new Integer(TAG_OLYMPUS_JPEG_QUALITY), "Jpeg Quality"); tagNameMap.put(new Integer(TAG_OLYMPUS_MACRO_MODE), "Macro"); tagNameMap.put(new Integer(TAG_OLYMPUS_UNKNOWN_1), "Makernote Unknown 1"); tagNameMap.put(new Integer(TAG_OLYMPUS_DIGI_ZOOM_RATIO), "DigiZoom Ratio"); tagNameMap.put(new Integer(TAG_OLYMPUS_UNKNOWN_2), "Makernote Unknown 2"); tagNameMap.put(new Integer(TAG_OLYMPUS_UNKNOWN_3), "Makernote Unknown 3"); tagNameMap.put(new Integer(TAG_OLYMPUS_FIRMWARE_VERSION), "Firmware Version"); tagNameMap.put(new Integer(TAG_OLYMPUS_PICT_INFO), "Pict Info"); tagNameMap.put(new Integer(TAG_OLYMPUS_CAMERA_ID), "Camera Id"); tagNameMap.put(new Integer(TAG_OLYMPUS_DATA_DUMP), "Data Dump"); tagNameMap.put(new Integer(TAG_OLYMPUS_MAKERNOTE_VERSION), "Makernote Version"); tagNameMap.put(new Integer(TAG_OLYMPUS_CAMERA_SETTINGS_1), "Camera Settings"); tagNameMap.put(new Integer(TAG_OLYMPUS_CAMERA_SETTINGS_2), "Camera Settings"); tagNameMap.put(new Integer(TAG_OLYMPUS_COMPRESSED_IMAGE_SIZE), "Compressed Image Size"); tagNameMap.put(new Integer(TAG_OLYMPUS_MINOLTA_THUMBNAIL_OFFSET_1), "Thumbnail Offset"); tagNameMap.put(new Integer(TAG_OLYMPUS_MINOLTA_THUMBNAIL_OFFSET_2), "Thumbnail Offset"); tagNameMap.put(new Integer(TAG_OLYMPUS_MINOLTA_THUMBNAIL_LENGTH), "Thumbnail Length"); tagNameMap.put(new Integer(TAG_OLYMPUS_COLOUR_MODE), "Colour Mode"); tagNameMap.put(new Integer(TAG_OLYMPUS_IMAGE_QUALITY_1), "Image Quality"); tagNameMap.put(new Integer(TAG_OLYMPUS_IMAGE_QUALITY_2), "Image Quality"); tagNameMap.put(new Integer(TAG_OLYMPUS_IMAGE_HEIGHT), "Image Height"); tagNameMap.put(new Integer(TAG_OLYMPUS_ORIGINAL_MANUFACTURER_MODEL), "Original Manufacturer Model"); tagNameMap.put(new Integer(TAG_OLYMPUS_PRINT_IMAGE_MATCHING_INFO), "Print Image Matching (PIM) Info"); tagNameMap.put(new Integer(TAG_OLYMPUS_FLASH_MODE), "Flash Mode"); tagNameMap.put(new Integer(TAG_OLYMPUS_BRACKET), "Bracket"); tagNameMap.put(new Integer(TAG_OLYMPUS_FOCUS_MODE), "Focus Mode"); tagNameMap.put(new Integer(TAG_OLYMPUS_FOCUS_DISTANCE), "Focus Distance"); tagNameMap.put(new Integer(TAG_OLYMPUS_ZOOM), "Zoom"); tagNameMap.put(new Integer(TAG_OLYMPUS_MACRO_FOCUS), "Macro Focus"); tagNameMap.put(new Integer(TAG_OLYMPUS_SHARPNESS), "Sharpness"); tagNameMap.put(new Integer(TAG_OLYMPUS_COLOUR_MATRIX), "Colour Matrix"); tagNameMap.put(new Integer(TAG_OLYMPUS_BLACK_LEVEL), "Black Level"); tagNameMap.put(new Integer(TAG_OLYMPUS_WHITE_BALANCE), "White Balance"); tagNameMap.put(new Integer(TAG_OLYMPUS_RED_BIAS), "Red Bias"); tagNameMap.put(new Integer(TAG_OLYMPUS_BLUE_BIAS), "Blue Bias"); tagNameMap.put(new Integer(TAG_OLYMPUS_SERIAL_NUMBER), "Serial Number"); tagNameMap.put(new Integer(TAG_OLYMPUS_FLASH_BIAS), "Flash Bias"); tagNameMap.put(new Integer(TAG_OLYMPUS_CONTRAST), "Contrast"); tagNameMap.put(new Integer(TAG_OLYMPUS_SHARPNESS_FACTOR), "Sharpness Factor"); tagNameMap.put(new Integer(TAG_OLYMPUS_COLOUR_CONTROL), "Colour Control"); tagNameMap.put(new Integer(TAG_OLYMPUS_VALID_BITS), "Valid Bits"); tagNameMap.put(new Integer(TAG_OLYMPUS_CORING_FILTER), "Coring Filter"); tagNameMap.put(new Integer(TAG_OLYMPUS_FINAL_WIDTH), "Final Width"); tagNameMap.put(new Integer(TAG_OLYMPUS_FINAL_HEIGHT), "Final Height"); tagNameMap.put(new Integer(TAG_OLYMPUS_COMPRESSION_RATIO), "Compression Ratio"); } public OlympusMakernoteDirectory() { this.setDescriptor(new OlympusMakernoteDescriptor(this)); } public String getName() { return "Olympus Makernote"; } protected HashMap getTagNameMap() { return tagNameMap; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/PanasonicMakernoteDescriptor.java0000644000000000000000000000630310716136374031130 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import com.drew.metadata.TagDescriptor; /** * Provides human-readable string versions of the tags stored in a PanasonicMakernoteDirectory. * * Some information about this makernote taken from here: * http://www.ozhiker.com/electronics/pjmt/jpeg_info/panasonic_mn.html */ public class PanasonicMakernoteDescriptor extends TagDescriptor { public PanasonicMakernoteDescriptor(Directory directory) { super(directory); } public String getDescription(int tagType) throws MetadataException { switch (tagType) { case PanasonicMakernoteDirectory.TAG_PANASONIC_MACRO_MODE: return getMacroModeDescription(); case PanasonicMakernoteDirectory.TAG_PANASONIC_RECORD_MODE: return getRecordModeDescription(); case PanasonicMakernoteDirectory.TAG_PANASONIC_PRINT_IMAGE_MATCHING_INFO: return getPrintImageMatchingInfoDescription(); default: return _directory.getString(tagType); } } public String getPrintImageMatchingInfoDescription() throws MetadataException { if (!_directory.containsTag(PanasonicMakernoteDirectory.TAG_PANASONIC_PRINT_IMAGE_MATCHING_INFO)) return null; byte[] bytes = _directory.getByteArray(PanasonicMakernoteDirectory.TAG_PANASONIC_PRINT_IMAGE_MATCHING_INFO); return "(" + bytes.length + " bytes)"; } public String getMacroModeDescription() throws MetadataException { if (!_directory.containsTag(PanasonicMakernoteDirectory.TAG_PANASONIC_MACRO_MODE)) return null; int value = _directory.getInt(PanasonicMakernoteDirectory.TAG_PANASONIC_MACRO_MODE); switch (value) { case 1: return "On"; case 2: return "Off"; default: return "Unknown (" + value + ")"; } } public String getRecordModeDescription() throws MetadataException { if (!_directory.containsTag(PanasonicMakernoteDirectory.TAG_PANASONIC_RECORD_MODE)) return null; int value = _directory.getInt(PanasonicMakernoteDirectory.TAG_PANASONIC_RECORD_MODE); switch (value) { case 1: return "Normal"; case 2: return "Portrait"; case 9: return "Macro"; default: return "Unknown (" + value + ")"; } } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/PanasonicMakernoteDirectory.java0000644000000000000000000000416210716136374030757 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 27-Nov-2002 10:10:47 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import java.util.HashMap; /** * */ public class PanasonicMakernoteDirectory extends Directory { public static final int TAG_PANASONIC_QUALITY_MODE = 0x0001; public static final int TAG_PANASONIC_VERSION = 0x0002; /** * 1 = On * 2 = Off */ public static final int TAG_PANASONIC_MACRO_MODE = 0x001C; /** * 1 = Normal * 2 = Portrait * 9 = Macro */ public static final int TAG_PANASONIC_RECORD_MODE = 0x001F; public static final int TAG_PANASONIC_PRINT_IMAGE_MATCHING_INFO = 0x0E00; protected static final HashMap tagNameMap = new HashMap(); static { tagNameMap.put(new Integer(TAG_PANASONIC_QUALITY_MODE), "Quality Mode"); tagNameMap.put(new Integer(TAG_PANASONIC_VERSION), "Version"); tagNameMap.put(new Integer(TAG_PANASONIC_MACRO_MODE), "Macro Mode"); tagNameMap.put(new Integer(TAG_PANASONIC_RECORD_MODE), "Record Mode"); tagNameMap.put(new Integer(TAG_PANASONIC_PRINT_IMAGE_MATCHING_INFO), "Print Image Matching (PIM) Info"); } public PanasonicMakernoteDirectory() { this.setDescriptor(new PanasonicMakernoteDescriptor(this)); } public String getName() { return "Panasonic Makernote"; } protected HashMap getTagNameMap() { return tagNameMap; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/PentaxMakernoteDescriptor.java0000644000000000000000000002300010716136374030445 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import com.drew.metadata.TagDescriptor; /** * Provides human-readable string versions of the tags stored in PentaxMakernoteDirectory. * * Some information about this makernote taken from here: * http://www.ozhiker.com/electronics/pjmt/jpeg_info/pentax_mn.html */ public class PentaxMakernoteDescriptor extends TagDescriptor { public PentaxMakernoteDescriptor(Directory directory) { super(directory); } public String getDescription(int tagType) throws MetadataException { switch (tagType) { case PentaxMakernoteDirectory.TAG_PENTAX_CAPTURE_MODE: return getCaptureModeDescription(); case PentaxMakernoteDirectory.TAG_PENTAX_QUALITY_LEVEL: return getQualityLevelDescription(); case PentaxMakernoteDirectory.TAG_PENTAX_FOCUS_MODE: return getFocusModeDescription(); case PentaxMakernoteDirectory.TAG_PENTAX_FLASH_MODE: return getFlashModeDescription(); case PentaxMakernoteDirectory.TAG_PENTAX_WHITE_BALANCE: return getWhiteBalanceDescription(); case PentaxMakernoteDirectory.TAG_PENTAX_DIGITAL_ZOOM: return getDigitalZoomDescription(); case PentaxMakernoteDirectory.TAG_PENTAX_SHARPNESS: return getSharpnessDescription(); case PentaxMakernoteDirectory.TAG_PENTAX_CONTRAST: return getContrastDescription(); case PentaxMakernoteDirectory.TAG_PENTAX_SATURATION: return getSaturationDescription(); case PentaxMakernoteDirectory.TAG_PENTAX_ISO_SPEED: return getIsoSpeedDescription(); case PentaxMakernoteDirectory.TAG_PENTAX_COLOUR: return getColourDescription(); default: return _directory.getString(tagType); } } public String getColourDescription() throws MetadataException { if (!_directory.containsTag(PentaxMakernoteDirectory.TAG_PENTAX_COLOUR)) return null; int value = _directory.getInt(PentaxMakernoteDirectory.TAG_PENTAX_COLOUR); switch (value) { case 1: return "Normal"; case 2: return "Black & White"; case 3: return "Sepia"; default: return "Unknown (" + value + ")"; } } public String getIsoSpeedDescription() throws MetadataException { if (!_directory.containsTag(PentaxMakernoteDirectory.TAG_PENTAX_ISO_SPEED)) return null; int value = _directory.getInt(PentaxMakernoteDirectory.TAG_PENTAX_ISO_SPEED); switch (value) { // TODO there must be other values which aren't catered for here case 10: return "ISO 100"; case 16: return "ISO 200"; case 100: return "ISO 100"; case 200: return "ISO 200"; default: return "Unknown (" + value + ")"; } } public String getSaturationDescription() throws MetadataException { if (!_directory.containsTag(PentaxMakernoteDirectory.TAG_PENTAX_SATURATION)) return null; int value = _directory.getInt(PentaxMakernoteDirectory.TAG_PENTAX_SATURATION); switch (value) { case 0: return "Normal"; case 1: return "Low"; case 2: return "High"; default: return "Unknown (" + value + ")"; } } public String getContrastDescription() throws MetadataException { if (!_directory.containsTag(PentaxMakernoteDirectory.TAG_PENTAX_CONTRAST)) return null; int value = _directory.getInt(PentaxMakernoteDirectory.TAG_PENTAX_CONTRAST); switch (value) { case 0: return "Normal"; case 1: return "Low"; case 2: return "High"; default: return "Unknown (" + value + ")"; } } public String getSharpnessDescription() throws MetadataException { if (!_directory.containsTag(PentaxMakernoteDirectory.TAG_PENTAX_SHARPNESS)) return null; int value = _directory.getInt(PentaxMakernoteDirectory.TAG_PENTAX_SHARPNESS); switch (value) { case 0: return "Normal"; case 1: return "Soft"; case 2: return "Hard"; default: return "Unknown (" + value + ")"; } } public String getDigitalZoomDescription() throws MetadataException { if (!_directory.containsTag(PentaxMakernoteDirectory.TAG_PENTAX_DIGITAL_ZOOM)) return null; float value = _directory.getFloat(PentaxMakernoteDirectory.TAG_PENTAX_DIGITAL_ZOOM); if (value==0) return "Off"; return Float.toString(value); } public String getWhiteBalanceDescription() throws MetadataException { if (!_directory.containsTag(PentaxMakernoteDirectory.TAG_PENTAX_WHITE_BALANCE)) return null; int value = _directory.getInt(PentaxMakernoteDirectory.TAG_PENTAX_WHITE_BALANCE); switch (value) { case 0: return "Auto"; case 1: return "Daylight"; case 2: return "Shade"; case 3: return "Tungsten"; case 4: return "Fluorescent"; case 5: return "Manual"; default: return "Unknown (" + value + ")"; } } public String getFlashModeDescription() throws MetadataException { if (!_directory.containsTag(PentaxMakernoteDirectory.TAG_PENTAX_FLASH_MODE)) return null; int value = _directory.getInt(PentaxMakernoteDirectory.TAG_PENTAX_FLASH_MODE); switch (value) { case 1: return "Auto"; case 2: return "Flash On"; case 4: return "Flash Off"; case 6: return "Red-eye Reduction"; default: return "Unknown (" + value + ")"; } } public String getFocusModeDescription() throws MetadataException { if (!_directory.containsTag(PentaxMakernoteDirectory.TAG_PENTAX_FOCUS_MODE)) return null; int value = _directory.getInt(PentaxMakernoteDirectory.TAG_PENTAX_FOCUS_MODE); switch (value) { case 2: return "Custom"; case 3: return "Auto"; default: return "Unknown (" + value + ")"; } } public String getQualityLevelDescription() throws MetadataException { if (!_directory.containsTag(PentaxMakernoteDirectory.TAG_PENTAX_QUALITY_LEVEL)) return null; int value = _directory.getInt(PentaxMakernoteDirectory.TAG_PENTAX_QUALITY_LEVEL); switch (value) { case 0: return "Good"; case 1: return "Better"; case 2: return "Best"; default: return "Unknown (" + value + ")"; } } public String getCaptureModeDescription() throws MetadataException { if (!_directory.containsTag(PentaxMakernoteDirectory.TAG_PENTAX_CAPTURE_MODE)) return null; int value = _directory.getInt(PentaxMakernoteDirectory.TAG_PENTAX_CAPTURE_MODE); switch (value) { case 1: return "Auto"; case 2: return "Night-scene"; case 3: return "Manual"; case 4: return "Multiple"; default: return "Unknown (" + value + ")"; } } /* public String getPrintImageMatchingInfoDescription() throws MetadataException { if (!_directory.containsTag(PentaxMakernoteDirectory.TAG_PANASONIC_PRINT_IMAGE_MATCHING_INFO)) return null; byte[] bytes = _directory.getByteArray(PentaxMakernoteDirectory.TAG_PANASONIC_PRINT_IMAGE_MATCHING_INFO); return "(" + bytes.length + " bytes)"; } public String getMacroModeDescription() throws MetadataException { if (!_directory.containsTag(PentaxMakernoteDirectory.TAG_PANASONIC_MACRO_MODE)) return null; int value = _directory.getInt(PentaxMakernoteDirectory.TAG_PANASONIC_MACRO_MODE); switch (value) { case 1: return "On"; case 2: return "Off"; default: return "Unknown (" + value + ")"; } } public String getRecordModeDescription() throws MetadataException { if (!_directory.containsTag(PentaxMakernoteDirectory.TAG_PANASONIC_RECORD_MODE)) return null; int value = _directory.getInt(PentaxMakernoteDirectory.TAG_PANASONIC_RECORD_MODE); switch (value) { case 1: return "Normal"; case 2: return "Portrait"; case 9: return "Macro"; default: return "Unknown (" + value + ")"; } } */ } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/PentaxMakernoteDirectory.java0000644000000000000000000001052510716136374030303 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 27-Nov-2002 10:10:47 using IntelliJ IDEA. */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import java.util.HashMap; /** * Directory for metadata specific to Pentax and Asahi cameras. */ public class PentaxMakernoteDirectory extends Directory { /** * 0 = Auto * 1 = Night-scene * 2 = Manual * 4 = Multiple */ public static final int TAG_PENTAX_CAPTURE_MODE = 0x0001; /** * 0 = Good * 1 = Better * 2 = Best */ public static final int TAG_PENTAX_QUALITY_LEVEL = 0x0002; /** * 2 = Custom * 3 = Auto */ public static final int TAG_PENTAX_FOCUS_MODE = 0x0003; /** * 1 = Auto * 2 = Flash on * 4 = Flash off * 6 = Red-eye Reduction */ public static final int TAG_PENTAX_FLASH_MODE = 0x0004; /** * 0 = Auto * 1 = Daylight * 2 = Shade * 3 = Tungsten * 4 = Fluorescent * 5 = Manual */ public static final int TAG_PENTAX_WHITE_BALANCE = 0x0007; /** * (0 = Off) */ public static final int TAG_PENTAX_DIGITAL_ZOOM = 0x000A; /** * 0 = Normal * 1 = Soft * 2 = Hard */ public static final int TAG_PENTAX_SHARPNESS = 0x000B; /** * 0 = Normal * 1 = Low * 2 = High */ public static final int TAG_PENTAX_CONTRAST = 0x000C; /** * 0 = Normal * 1 = Low * 2 = High */ public static final int TAG_PENTAX_SATURATION = 0x000D; /** * 10 = ISO 100 * 16 = ISO 200 * 100 = ISO 100 * 200 = ISO 200 */ public static final int TAG_PENTAX_ISO_SPEED = 0x0014; /** * 1 = Normal * 2 = Black & White * 3 = Sepia */ public static final int TAG_PENTAX_COLOUR = 0x0017; /** * See Print Image Matching for specification. * http://www.ozhiker.com/electronics/pjmt/jpeg_info/pim.html */ public static final int TAG_PENTAX_PRINT_IMAGE_MATCHING_INFO = 0x0E00; /** * (String). */ public static final int TAG_PENTAX_TIME_ZONE = 0x1000; /** * (String). */ public static final int TAG_PENTAX_DAYLIGHT_SAVINGS = 0x1001; protected static final HashMap tagNameMap = new HashMap(); static { tagNameMap.put(new Integer(TAG_PENTAX_CAPTURE_MODE), "Capture Mode"); tagNameMap.put(new Integer(TAG_PENTAX_QUALITY_LEVEL), "Quality Level"); tagNameMap.put(new Integer(TAG_PENTAX_FOCUS_MODE), "Focus Mode"); tagNameMap.put(new Integer(TAG_PENTAX_FLASH_MODE), "Flash Mode"); tagNameMap.put(new Integer(TAG_PENTAX_WHITE_BALANCE), "White Balance"); tagNameMap.put(new Integer(TAG_PENTAX_DIGITAL_ZOOM), "Digital Zoom"); tagNameMap.put(new Integer(TAG_PENTAX_SHARPNESS), "Sharpness"); tagNameMap.put(new Integer(TAG_PENTAX_CONTRAST), "Contrast"); tagNameMap.put(new Integer(TAG_PENTAX_SATURATION), "Saturation"); tagNameMap.put(new Integer(TAG_PENTAX_ISO_SPEED), "ISO Speed"); tagNameMap.put(new Integer(TAG_PENTAX_COLOUR), "Colour"); tagNameMap.put(new Integer(TAG_PENTAX_PRINT_IMAGE_MATCHING_INFO), "Print Image Matching (PIM) Info"); tagNameMap.put(new Integer(TAG_PENTAX_TIME_ZONE), "Time Zone"); tagNameMap.put(new Integer(TAG_PENTAX_DAYLIGHT_SAVINGS), "Daylight Savings"); } public PentaxMakernoteDirectory() { this.setDescriptor(new PentaxMakernoteDescriptor(this)); } public String getName() { return "Pentax Makernote"; } protected HashMap getTagNameMap() { return tagNameMap; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/SonyMakernoteDescriptor.java0000644000000000000000000000235310716136374030146 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import com.drew.metadata.TagDescriptor; /** * Provides human-readable string versions of the tags stored in a SonyMakernoteDirectory. * Thanks to David Carson for the initial version of this class. */ public class SonyMakernoteDescriptor extends TagDescriptor { public SonyMakernoteDescriptor(Directory directory) { super(directory); } public String getDescription(int tagType) throws MetadataException { return _directory.getString(tagType); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/SonyMakernoteDirectory.java0000644000000000000000000000203510716136374027771 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import java.util.HashMap; /** * Describes tags specific to Sony cameras. */ public class SonyMakernoteDirectory extends Directory { protected static final HashMap _tagNameMap = new HashMap(); public String getName() { return "Sony Makernote"; } protected HashMap getTagNameMap() { return _tagNameMap; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/0000755000000000000000000000000010716136374023422 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/badExif.jpg0000644000000000000000000003477110716136374025502 0ustar rootrootJFIFQVCI  %, *+(  )2( %?:- (-HD3(.5DJ=#.8?DPOC4CEGJBDA ??HH )?HHH#?HHHH)HHHHHH?HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH  }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzw!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz@" ?ӳA@c^=j kB޼D_) E=߽=4@yz=j4cwlGR+~41>L yJb͜~l_OҜWsH g#KV@8?P}Qp:()_Me_CM[!*@]9?N;Ҁ?Y?7p v/Y"}T˞Sؓ 0GևT|}*{{֠@HVt ~֘d?g:q+>֗``7E<P;]3?J3ѿ@d,o$a Y=M1_RAe#})>cY`oJ {>dc؊o(9 pϭR:Hcz`^U╻۳Jt{ WǾ;M¿^?Ub:$({FO MN}=;J=;wSK4#uq9)\<{֐1r  pBozBQ zO!O<@ l&+- &l};ƓwGҤ_/sg({ veA^iuaGqP8 Pb)2?HO-1@]ӱ pOϵZH qxI϶i\F$rpG׶iGGoLq@}ǠVLZhsߚM،tQ#a{R,(˷FJhB;Z0+z@}i6~OǦ}h!*;J ЎA@F9_.;O#Mg'&WBd'A~=AʏzE_iCKG{B=֚NsПU2ߊ؟{PUow SR)>2qyS(=ހ?zjlegSb;H?>*z{}E=ǭ*aq %HБJ@#Xl|b>]s㎄zYs܏B| ;iO?= ~|JԜ9t)}2I7AM ?@=4Aސ?<'z`w>Zc0=H|R;>8Xǯiس?+ve5Pvn;U7V Ag(/Aag_??ZLzH?Jp?Ojiۇހ?SF9v܊9aߧQ\z5Df$׊_X:E/U-+OP~м,>03} §v] D\e&[~{y#}=WS'ޛ)<ZM㞃ޤ'|8A8}VzJ> ֬qI1;jAҀ?oB aV== hiHf'? «`z{\xGOjW1z~5 ژzcѻ2J@xE =O Uׯ4; NZI%*>TѴӚSzƉˏ~= Jc3@9'(s*_4zs}oS{,} '?_ZLGKr=F(SQ~u"u1vy?~`*zG!Hq?8=è={do5> B[qiA} =4ֵ6T),u8YNY}GҘJ`+B"&=\AߥW^LR;gG cP?{}=>и>@SN,`8);JԿS~&Dz}iV?q >I@<|g0[Sq<1$8[>a=g ~Zq]I}>dxzD9Y*Ze9z{sZ m 1#ںse#F>QNW^~ >ڡ2{ZxqVޙ1B?ɥߎDzJM!lwcL#,QqӯY(ď}1ii) -{lp5]'cv=THތToϥ.j'a 1e׺&HJ>R$&>NJvL=)88>%;֕qُL,s“ 4hFGZ@ r”{~}(~̌ӟp{fZ-==GF@VsM ?С l]܅>SVc>ϥOY4#Ҥ,}ea֦q2mø#;EQyR;Zl "r{sBO@=A|} aړ?ۡ=>Tz]m\ϴ}GzM*F eŅieղfnj.76>VI ֮HU<QaY"1&t#%N("ĉrR02!t9}kOOҚs 9*;d)Y7n:[xkCqG6Dw28 Dr8jdYD:hʞC@m Vq`-T E\AVYߑ)n+&F9DlW̕IF=*>l<БaG{ UQ?0WvýpǯOO)ȳ$t{ ӻ&:n_?,.ԒDH9qsRXZe64?f?7p)7+͛y{j'8Z$V-ᰤd`S UB'c70=*AuaitUgG~љ w6{SAIҘ ? z;/1<qz`@">o†?yQ1-9 cp`::qs =*]=4#%}[#s@{7qޑ>zJP= zc)A$JE7NݱcsB_U#w=*0ĸ>Zƣ :@#h21GO#@*PO8HA f=՘ogO8ũ,I+YA'0r=?J\c5dl=_?ʤ±?/LaxL}O&~?ց;GO֨kS1=tޭG9\$TuqqJE#fLjjqԟT>Z}9v-=TBx9WxךkRyϾFoo^Y'zqڼ[Iec sLRA]OPJyr=1\p?b|9}LR%u뽈4$ ǯȥ'tzc+W .OOE`Gk~?iOB[L׶]aNW>z$}1LkoL0EY$,Ȥfq{q\ޱbOK/O\87ZlsEqv+6FUr1OjL+6 UIQp㏥[mBgqї=@'ֳ!{ozqObs'pzQб|O*i]Ӭ*0Ǩ(J|#FDHdGi-h%Q2C,Ofu%K VǏKX-B9m?V_ڋ΋}}15M*9(#!{Tk*;4=)p;(0~4Ut~)7g= svz{R>P7c} i7MpOO qߊ؞Vf~?:v>Onjl~Y$DKjp5V<Izsgazz)~S[I T *;bi?~ ?=GZ2,\oά'ިD-p8ImǴy@yPV!OD63m~| D·hƴ?"KbHAD7*k̪yAǡq\qB[QI=TaD}лlC[K3Ǣ`{_ץK)؛cS(!O~;*+]:egJO[Ix$`"s>‹X =Gҷ?o2Z違?q#[+teK4MtGԕb?z㌒zd˰jy5u~h@ީ:VX˯B@$BkOqssB70?/HI U}=?˓"j;;i`}ZT=G#->Ѿ)Aǔ8;㸭W[ݜf?C}C뚁r Jr;*J?/@#T'8#vUY$d"lqf29{ǖUoֵήQGD&#g=v=?X՛oGtcq<%e+w.8?2<#{8T,Y;80Ư^ӵrrُ~)Ǐ`z{ԋؠƇDt*G_ ?ֺwWsP*GA4&9qw1מc{f}MImZdw#@)T:a1eU_)oO 3L v qi@h@]:$202Xaa-=Sk!"wiǣw zuj֤xأ^ΏLOT_#wm{\k!$3N+[y88s+nlpz:1S6e1vyϨ?jBOPGOOOLggӺD8Xڟ_7 #ߚ@9&H?.O[ӷ5=1=ۊk屰}}EH~z0ā{ieϯ\h'lz{|SIJ[>4e{L1D\6Z] ;})|#q`Q@A1 du֡v~ _׺U˖{m+7#Y}=U'(ٽǥmṠgYkyXVp:3iblvֳxOr{?6Q5 H{eTGfk724lۀ] d#ڱ1(d,OREFד>uܭ x{D c$`_Yԩg+Ek;{r{4"#۞cj&0 p ,ՍoGŸh{OE?1?3؍՘lj7fDbCC2mE}4Xe0Sgҧe+5d<vr{; 5E)9RGKn 7QCK3 4"7?O]ѴtWe5aa we[#[(ԗQoE%=r;xҙ-?mJ~ &`xQO֪ݙ݄3E7LH̬I`}0? zT~x{.; r8=Z)y{gJ+aOp:1=0i<'.N׉F  ޕ]@ P{Gj:x븮I9ząPe Ո37su֋;Aqg˸*F*7\u.\zҕ&n3v}5I :uRaXv嶰rQq.1 8oC OlF%!b>_OƷ慼db5v@$?ϧ*(F ~tu#q9{PZ_SI y7(=XMkr7m8 ?wՙ[RUh $pҒ3V!O2Y>;O'aCUTUU[h2l}GPwa&6;ysnE#G7r#ev"z|qı#N!;{o{iE{4(G"OF~zoR~bi>(/ Pp&+lkatW ~)?>zɾbtvP9Ս)ڣʯ1S_sQj=?ߗ̋&O 8cdpNHm`4J_&HbU;n.Op@ΡY/7X_F?6D;ocZᓛZtHC.N;gO{A&ɺ d >-\iy|;wq#^\sá9=v P~٨ gr ueSvՃۑCaOHPЎ10 "0Xs@e%ͿWB,hsrs[HxmH>ףdykʌ)[h%t@=O// z! ݍtijѬ'aLXrEଛ?X랿ʭ2 f >FF=w R3;wf*4]v=G,O!V zCJ!wWx=@zzԋ|ךF l %#>W6zz*fEU#zzIԕ&@WgR2h[e'Q?gҦޒ|PpqsuS؋lKew?Ʀv~svByS>ZA? "Z,Ek7cHB=}DbB1WX%[ Es}EkJ ?zl }Iǎ{>zҋBGlz32}OYi1tS=x'3֦As5m[I/,{VY*O>#ך,Q }Z <`#^(Bsǧ6K#&?LT]P}.YdXt 2r?*-n. ,l&Tr~9J{(0?IRN@aAD1N+ȸS=+'T?y* F>5 O9g\u8}x3=0 ~ϟhqs]iOΑ HREoj1 pn1SK¿2[s#-pH,{~EYIcZHT"qro^Pw?U`p ϡ,{%?=If3i0?՜?D B>F r=~L~ |/o=k1t'R>޵5$J I}=CC1,Y!$e35Ffي*g݁ϭtͧ~]zeBxh vOEXYI)>؏_/V >ߥs+3H *0`91Ro[l\}k>V vV_1]G JhÜO.AYr:z!.qbISUɄ㣰't'NO#ToS g)˹pT(X$,p7cӢD׎%Q}()1sa4I+/A9Z<|P) U'O\3힝:*5C:wO 8mr%ulB}ʣbU.[s$zԯʎs$+.m?pt d)(Br8h'zp=@ȹ^{Ri՘՛x%=1Tqyp;=)A4_ey`zjU#Tz5dPx\[ÓNk^y>)۔uU U7|*ݹ< TZ'qـ8=j%s}wRˌL?|`玜7Z+ ;qz>qzV|\G=G=Wƀ?Վh$h*XGNiia9 x`Q01cz.T}Đ;0 "cgUcѾ,>{W?-X̙ºdcHwU8YO0ZR!Y7c_oS*$$x'sQ\*ß"Y"*_2رQ!N$sRFѾnBt<{=rEgې6SZ& >"?δ$֨}ԟic0~si1} fa܂{vgb\> 6:ПLjqǶOig#Oo_1HT'zhOl=Nf_dub3#8 OK$:?3#Rm'>€?ע˪߀y==?GL2==1f3}:u,i{򫏺AS]컻_Pǹ\zzz?0#҃"\~ccwM6㺟NE:O#Z>?oր?RT=F}?ǽX +(=#NqO}r:?{I훾x;p=E5y}$h$=V")5bg?9fo@ǝ?4#uboqP4`;d{a8# Gq(bqݱҚ%8=O>>?^m?ɐ{|"߫~ZipvS32qsc 8?қ@2;gtNop9$zC@ ~2@mݣ? ;qG=H]Gz!qwBrt0ΧL -LgT?*2z})ܷ4p x}jD7syU\t{Hcey?o#J}k 8~֊CzcI#0:}$;Xqu~1,NxT6FkH[jn_:H4S a@٪Z}~#7 Fs3N1jϔGPMOd 1GRWS>a{%Mف͒;I՚B$lޞ ?NOR'SHqď>2@IӓӞqG`h}hُ:րR=րI;GS}&B=S$bzr~~?zR!}Qf#I4ш.=Es} \='CH}̝wލGr޸?Jfsj30XƏ8x7PH3Cϥ0(=>܏lS}B=ϩ>I#dsT\pͷc}GG>zC `?7=܏z'voz}f>[=Pg; >qQ}Oil OПƘAy#{jUF{4.:{@jQ+9>#I'zWsxx}Ĭa^?K)q@}qqM=@BvJ3% ݀=֘? B79nzwve Ҙg?cTY#!$^8g(gYT{ i.cpΧ~V>ץPYIQP] 1!ԑ#i\xמE).ŀ%Tϧ4֑;2X }v隦UbJbq?_Pp;H u42`R*;wVQ\q~g=Z2zNÎF>vYJlTBR?o\A"n;:9\Q,#Y ߁=uܸm_%Qҕ$^#Q@ zcWS&>~lz}Ac>U9q;{RLq0}Olibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/CanonMakernoteDescriptorTest.java0000644000000000000000000000634010716136374032073 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.metadata.exif.test; import com.drew.metadata.exif.CanonMakernoteDescriptor; import com.drew.metadata.exif.CanonMakernoteDirectory; import junit.framework.TestCase; public class CanonMakernoteDescriptorTest extends TestCase { public CanonMakernoteDescriptorTest(String name) { super(name); } public void testGetFlashBiasDescription() throws Exception { CanonMakernoteDirectory directory = new CanonMakernoteDirectory(); CanonMakernoteDescriptor descriptor = new CanonMakernoteDescriptor(directory); // set and check values directory.setInt(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS, 0xFFC0); assertEquals("-2.0 EV", descriptor.getDescription(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS)); directory.setInt(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS, 0xffd4); assertEquals("-1.375 EV", descriptor.getDescription(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS)); directory.setInt(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS, 0x0000); assertEquals("0.0 EV", descriptor.getDescription(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS)); directory.setInt(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS, 0x000c); assertEquals("0.375 EV", descriptor.getDescription(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS)); directory.setInt(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS, 0x0010); assertEquals("0.5 EV", descriptor.getDescription(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS)); directory.setInt(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS, 0x0014); assertEquals("0.625 EV", descriptor.getDescription(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS)); directory.setInt(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS, 0x0020); assertEquals("1.0 EV", descriptor.getDescription(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS)); directory.setInt(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS, 0x0030); assertEquals("1.5 EV", descriptor.getDescription(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS)); directory.setInt(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS, 0x0034); assertEquals("1.625 EV", descriptor.getDescription(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS)); directory.setInt(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS, 0x0040); assertEquals("2.0 EV", descriptor.getDescription(CanonMakernoteDirectory.TAG_CANON_STATE2_FLASH_BIAS)); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/crash01.jpg0000644000000000000000000000444210716136374025371 0ustar rootrootJFIFExifII*n~(1iHewlett-PackardHP PhotoSmart 318HHV4.00'd0210     0100{@B d2002:05:08 17:28:032002:05:08 17:28:03 dd,dXdddACD Systems Digital ImagingBd"   ("&#/#&)*---!141+4(,-+  @+$+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  !1AQq"2a3BCRr#45DSbc!Q1A ?t#? 8Z&qw258'ttT&܍;rBdhJţn:.vp }S\?*"+"R [4x-aupYk{#Y'rwьuzsVe]5DbpF am~J ¦p2lVӳ g%h+ڬlFk$fr+9C 3AM%$eAdgϰ=iE>y-eFB7wB4xTwHfS5lڧ]L;4o,x7t!t>cBWA,k7PieDS;ݿvJ7\FNyyw~Wˡ\ç9jUG$ xf6~ |J'īih;1P1؛XM@/,kNA`C}2vG)5р/[KlV*> <^=k{;)E;wy4Aݍ@~TQ׫ne*c›OtFbYɱMoJ.?O*,LM3;}(.ٽIQjx7h ByۏOT7ȏzzA &Q߽nB4y"W!?libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/ExifDescriptorTest.java0000644000000000000000000001761410716136374030070 0ustar rootroot/* * ExifReaderTest.java * * Test class written by Drew Noakes. * * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 26-Oct-2002 19:15:16 using IntelliJ IDEA. */ package com.drew.metadata.exif.test; import com.drew.lang.Rational; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import com.drew.metadata.exif.ExifDescriptor; import com.drew.metadata.exif.ExifDirectory; import com.drew.metadata.exif.ExifReader; import junit.framework.TestCase; import java.io.File; /** * JUnit test case for class ExifDescriptor. * @author Drew Noakes http://drewnoakes.com */ public class ExifDescriptorTest extends TestCase { public ExifDescriptorTest(String s) { super(s); } public void testXResolutionDescription() throws Exception { ExifDirectory directory = new ExifDirectory(); directory.setRational(ExifDirectory.TAG_X_RESOLUTION, new Rational(72, 1)); // 2 is for 'Inch' directory.setInt(ExifDirectory.TAG_RESOLUTION_UNIT, 2); ExifDescriptor descriptor = new ExifDescriptor(directory); assertEquals("72 dots per inch", descriptor.getDescription(ExifDirectory.TAG_X_RESOLUTION)); } public void testYResolutionDescription() throws Exception { ExifDirectory directory = new ExifDirectory(); directory.setRational(ExifDirectory.TAG_Y_RESOLUTION, new Rational(50, 1)); // 3 is for 'cm' directory.setInt(ExifDirectory.TAG_RESOLUTION_UNIT, 3); ExifDescriptor descriptor = new ExifDescriptor(directory); assertEquals("50 dots per cm", descriptor.getDescription(ExifDirectory.TAG_Y_RESOLUTION)); } public void testUserCommentDescription_EmptyEncoding() throws Exception { byte[] commentBytes = "\0\0\0\0\0\0\0\0This is a comment".getBytes(); ExifDirectory directory = new ExifDirectory(); directory.setByteArray(ExifDirectory.TAG_USER_COMMENT, commentBytes); ExifDescriptor descriptor = new ExifDescriptor(directory); assertEquals("This is a comment", descriptor.getDescription(ExifDirectory.TAG_USER_COMMENT)); } public void testUserCommentDescription_AsciiHeaderExtendedAsciiEncoding() throws Exception { byte[] commentBytes = "ASCII\0\0This is a comment with extended characters ".getBytes(); ExifDirectory directory = new ExifDirectory(); directory.setByteArray(ExifDirectory.TAG_USER_COMMENT, commentBytes); ExifDescriptor descriptor = new ExifDescriptor(directory); assertEquals("This is a comment with extended characters ", descriptor.getDescription(ExifDirectory.TAG_USER_COMMENT)); } public void testUserCommentDescription_AsciiHeaderAsciiEncoding() throws Exception { byte[] commentBytes = "ASCII\0\0This is a comment".getBytes(); ExifDirectory directory = new ExifDirectory(); directory.setByteArray(ExifDirectory.TAG_USER_COMMENT, commentBytes); ExifDescriptor descriptor = new ExifDescriptor(directory); assertEquals("This is a comment", descriptor.getDescription(ExifDirectory.TAG_USER_COMMENT)); } public void testUserCommentDescription_BlankAscii() throws Exception { byte[] commentBytes = "ASCII\0\0\0 ".getBytes(); ExifDirectory directory = new ExifDirectory(); directory.setByteArray(ExifDirectory.TAG_USER_COMMENT, commentBytes); ExifDescriptor descriptor = new ExifDescriptor(directory); assertEquals("", descriptor.getDescription(ExifDirectory.TAG_USER_COMMENT)); } public void testUserCommentDescription_ZeroLengthAscii1() throws Exception { // the 10-byte encoding region is only partially full byte[] commentBytes = "ASCII\0\0\0".getBytes(); ExifDirectory directory = new ExifDirectory(); directory.setByteArray(ExifDirectory.TAG_USER_COMMENT, commentBytes); ExifDescriptor descriptor = new ExifDescriptor(directory); assertEquals("ASCII", descriptor.getDescription(ExifDirectory.TAG_USER_COMMENT)); } public void testUserCommentDescription_ZeroLengthAscii2() throws Exception { // fill the 10-byte encoding region byte[] commentBytes = "ASCII\0\0\0\0\0".getBytes(); ExifDirectory directory = new ExifDirectory(); directory.setByteArray(ExifDirectory.TAG_USER_COMMENT, commentBytes); ExifDescriptor descriptor = new ExifDescriptor(directory); assertEquals("", descriptor.getDescription(ExifDirectory.TAG_USER_COMMENT)); } public void testUnicodeComment_ActualBytes() throws Exception { byte[] commentBytes = new byte[] { 85, 78, 73, 67, 79, 68, 69, 0, 84, 0, 104, 0, 105, 0, 115, 0, 32, 0, 109, 0, 97, 0, 114, 0, 109, 0, 111, 0, 116, 0, 32, 0, 105, 0, 115, 0, 32, 0, 103, 0, 101, 0, 116, 0, 116, 0, 105, 0, 110, 0, 103, 0, 32, 0, 99, 0, 108, 0, 111, 0, 115, 0, 101, 0, 46, 0, 46, 0, 46, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0, 32, 0 }; ExifDirectory directory = new ExifDirectory(); directory.setByteArray(ExifDirectory.TAG_USER_COMMENT, commentBytes); ExifDescriptor descriptor = new ExifDescriptor(directory); assertEquals("This marmot is getting close...", descriptor.getDescription(ExifDirectory.TAG_USER_COMMENT)); } public void testUnicodeComment_Ascii() throws Exception { byte[] commentBytes = new byte[] { 65, 83, 67, 73, 73, 0, 0, 0, 73, 32, 97, 109, 32, 97, 32, 99, 111, 109, 109, 101, 110, 116, 46, 32, 89, 101, 121, 46, 0 }; ExifDirectory directory = new ExifDirectory(); directory.setByteArray(ExifDirectory.TAG_USER_COMMENT, commentBytes); ExifDescriptor descriptor = new ExifDescriptor(directory); assertEquals("I am a comment. Yey.", descriptor.getDescription(ExifDirectory.TAG_USER_COMMENT)); } public void testWindowsXpFields() throws Exception { String fileName = "src/com/drew/metadata/exif/test/windowsXpFields.jpg"; Metadata metadata = new ExifReader(new File(fileName)).extract(); Directory directory = metadata.getDirectory(ExifDirectory.class); ExifDescriptor descriptor = new ExifDescriptor(directory); assertEquals("Testing artist", descriptor.getDescription(ExifDirectory.TAG_WIN_AUTHOR)); assertEquals("Testing comments", descriptor.getDescription(ExifDirectory.TAG_WIN_COMMENT)); assertEquals("Testing keywords", descriptor.getDescription(ExifDirectory.TAG_WIN_KEYWORDS)); assertEquals("Testing subject", descriptor.getDescription(ExifDirectory.TAG_WIN_SUBJECT)); assertEquals("Testing title", descriptor.getDescription(ExifDirectory.TAG_WIN_TITLE)); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/ExifDirectoryTest.java0000644000000000000000000000625010716136374027710 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 25-Nov-2002 20:47:31 using IntelliJ IDEA. */ package com.drew.metadata.exif.test; import com.drew.imaging.jpeg.JpegMetadataReader; import com.drew.imaging.jpeg.JpegProcessingException; import com.drew.imaging.jpeg.JpegSegmentReader; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import com.drew.metadata.exif.ExifDirectory; import junit.framework.TestCase; import java.io.File; /** * */ public class ExifDirectoryTest extends TestCase { public ExifDirectoryTest(String s) { super(s); } public void testGetDirectoryName() throws Exception { Metadata metadata = new Metadata(); Directory directory = metadata.getDirectory(ExifDirectory.class); assertEquals("Exif", directory.getName()); } public void testGetThumbnailData() throws Exception { File file = new File("src/com/drew/metadata/exif/test/withExif.jpg"); Metadata metadata = JpegMetadataReader.readMetadata(file); ExifDirectory exifDirectory = (ExifDirectory)metadata.getDirectory(ExifDirectory.class); assertTrue(exifDirectory.containsTag(ExifDirectory.TAG_THUMBNAIL_DATA)); byte[] thumbData = exifDirectory.getThumbnailData(); try { // attempt to read the thumbnail -- it should be a legal Jpeg file new JpegSegmentReader(thumbData); } catch (JpegProcessingException e) { fail("Unable to construct JpegSegmentReader from thumbnail data"); } } public void testWriteThumbnail() throws Exception { File file = new File("src/com/drew/metadata/exif/test/manuallyAddedThumbnail.jpg"); Metadata metadata = JpegMetadataReader.readMetadata(file); ExifDirectory exifDirectory = (ExifDirectory)metadata.getDirectory(ExifDirectory.class); assertTrue(exifDirectory.containsTag(ExifDirectory.TAG_THUMBNAIL_DATA)); File thumbnailFile = File.createTempFile("thumbnail", ".jpg"); try { exifDirectory.writeThumbnail(thumbnailFile.getAbsolutePath()); assertTrue(new File(thumbnailFile.getAbsolutePath()).exists()); } finally { thumbnailFile.delete(); } } public void testContainsThumbnail() { ExifDirectory exifDirectory = new ExifDirectory(); assertTrue(!exifDirectory.containsThumbnail()); exifDirectory.setObject(ExifDirectory.TAG_THUMBNAIL_DATA, "foo"); assertTrue(exifDirectory.containsThumbnail()); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/ExifReaderTest.java0000644000000000000000000002144510716136374027151 0ustar rootroot/* * ExifReaderTest.java * * Test class written by Drew Noakes. * * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 26-Oct-2002 19:15:16 using IntelliJ IDEA. */ package com.drew.metadata.exif.test; import com.drew.imaging.jpeg.JpegSegmentData; import com.drew.lang.Rational; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import com.drew.metadata.exif.ExifDirectory; import com.drew.metadata.exif.ExifReader; import junit.framework.TestCase; import java.io.File; /** * JUnit test case for class ExifReader. * @author Drew Noakes http://drewnoakes.com */ public class ExifReaderTest extends TestCase { public ExifReaderTest(String s) { super(s); } public void testLoadFujiFilmJpeg() throws Exception { String jpegWithExif = "src/com/drew/metadata/exif/test/withExif.jpg"; Metadata metadata = new ExifReader(new File(jpegWithExif)).extract(); Directory directory = metadata.getDirectory(ExifDirectory.class); assertEquals("80", directory.getDescription(ExifDirectory.TAG_ISO_EQUIVALENT)); // TODO decide if this should still be returned -- it was being calculated upon setting of a related tag // assertEquals("F9", directory.getDescription(ExifDirectory.TAG_APERTURE)); } public void testLoadJpegWithoutExifData() throws Exception { String jpegNoExif = "src/com/drew/metadata/exif/test/noExif.jpg"; Metadata metadata = new ExifReader(new File(jpegNoExif)).extract(); assertTrue(!metadata.containsDirectory(ExifDirectory.class)); } public void testLoadJpegWithBadExifData() throws Exception { // This test used to ensure an exception was thrown when loading a particular jpeg // The intention has since changed, and the API should only throw exceptions in completely // fatal situations. Now, the Metadata object returned has no new tags. String jpegBadExif = "src/com/drew/metadata/exif/test/badExif.jpg"; // Exif data segment doesn't begin with 'Exif' Metadata metadata = new ExifReader(new File(jpegBadExif)).extract(); assertEquals(0, metadata.getDirectory(ExifDirectory.class).getTagCount()); } public void testCrashRegressionTest() throws Exception { // this image was created via a resize in ACDSee // it seems to have a reference to an IFD starting outside the data segment // i've noticed that ACDSee reports a Comment for this image, yet ExifReader doesn't report one String fileName = "src/com/drew/metadata/exif/test/crash01.jpg"; Metadata metadata = new ExifReader(new File(fileName)).extract(); assertTrue(metadata.getDirectory(ExifDirectory.class).getTagCount() > 0); } public void testThumbnailOffset() throws Exception { String fileName = "src/com/drew/metadata/exif/test/manuallyAddedThumbnail.jpg"; Metadata metadata = new ExifReader(new File(fileName)).extract(); Directory directory = metadata.getDirectory(ExifDirectory.class); assertEquals(192, directory.getInt(ExifDirectory.TAG_THUMBNAIL_OFFSET)); } public void testThumbnailLength() throws Exception { String fileName = "src/com/drew/metadata/exif/test/manuallyAddedThumbnail.jpg"; Metadata metadata = new ExifReader(new File(fileName)).extract(); Directory directory = metadata.getDirectory(ExifDirectory.class); assertEquals(2970, directory.getInt(ExifDirectory.TAG_THUMBNAIL_LENGTH)); } public void testDateTime() throws Exception { String fileName = "src/com/drew/metadata/exif/test/manuallyAddedThumbnail.jpg"; Metadata metadata = new ExifReader(new File(fileName)).extract(); Directory directory = metadata.getDirectory(ExifDirectory.class); assertEquals("2002:11:27 18:00:35", directory.getString(ExifDirectory.TAG_DATETIME)); } public void testXResolution() throws Exception { String fileName = "src/com/drew/metadata/exif/test/manuallyAddedThumbnail.jpg"; Metadata metadata = new ExifReader(new File(fileName)).extract(); Directory directory = metadata.getDirectory(ExifDirectory.class); Rational rational = directory.getRational(ExifDirectory.TAG_X_RESOLUTION); assertEquals(72, rational.getNumerator()); assertEquals(1, rational.getDenominator()); } public void testYResolution() throws Exception { String fileName = "src/com/drew/metadata/exif/test/manuallyAddedThumbnail.jpg"; Metadata metadata = new ExifReader(new File(fileName)).extract(); Directory directory = metadata.getDirectory(ExifDirectory.class); Rational rational = directory.getRational(ExifDirectory.TAG_Y_RESOLUTION); assertEquals(72, rational.getNumerator()); assertEquals(1, rational.getDenominator()); } public void testCompression() throws Exception { String fileName = "src/com/drew/metadata/exif/test/manuallyAddedThumbnail.jpg"; Metadata metadata = new ExifReader(new File(fileName)).extract(); Directory directory = metadata.getDirectory(ExifDirectory.class); // 6 means JPEG compression assertEquals(6, directory.getInt(ExifDirectory.TAG_COMPRESSION)); } public void testStackOverflowOnRevisitationOfSameDirectory() throws Exception { // an error has been discovered in Exif data segments where a directory is referenced // repeatedly. thanks to Alistair Dickie for providing the sample image used in this // unit test. File metadataFile = new File("src/com/drew/metadata/exif/test/recursiveDirectories.metadata"); Metadata metadata = new ExifReader(JpegSegmentData.FromFile(metadataFile)).extract(); metadata.getDirectory(ExifDirectory.class); // String fileName = "src/com/drew/metadata/exif/test/recursiveDirectories.jpg"; // Metadata metadata = new ExifReader(new File(fileName)).extract(); // metadata.getDirectory(ExifDirectory.class); } /* public void testUncompressedYCbCrThumbnail() throws Exception { String fileName = "src/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail.jpg"; String thumnailFileName = "src/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail.bmp"; Metadata metadata = new ExifReader(new File(fileName)).extract(); ExifDirectory directory = (ExifDirectory)metadata.getDirectory(ExifDirectory.class); directory.writeThumbnail(thumnailFileName); fileName = "src/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail2.jpg"; thumnailFileName = "src/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail2.bmp"; metadata = new ExifReader(new File(fileName)).extract(); directory = (ExifDirectory)metadata.getDirectory(ExifDirectory.class); directory.writeThumbnail(thumnailFileName); fileName = "src/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail3.jpg"; thumnailFileName = "src/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail3.bmp"; metadata = new ExifReader(new File(fileName)).extract(); directory = (ExifDirectory)metadata.getDirectory(ExifDirectory.class); directory.writeThumbnail(thumnailFileName); fileName = "src/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail4.jpg"; thumnailFileName = "src/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail4.bmp"; metadata = new ExifReader(new File(fileName)).extract(); directory = (ExifDirectory)metadata.getDirectory(ExifDirectory.class); directory.writeThumbnail(thumnailFileName); } public void testUncompressedRGBThumbnail() throws Exception { String fileName = "src/com/drew/metadata/exif/test/withUncompressedRGBThumbnail.jpg"; String thumnailFileName = "src/com/drew/metadata/exif/test/withUncompressedRGBThumbnail.bmp"; Metadata metadata = new ExifReader(new File(fileName)).extract(); ExifDirectory directory = (ExifDirectory)metadata.getDirectory(ExifDirectory.class); directory.writeThumbnail(thumnailFileName); } */ } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/manuallyAddedThumbnail.jpg0000644000000000000000000017412510716136374030546 0ustar rootroot bExifMM*2&i:n2002:11:27 18:00:35"LASCIIHere we add a EXIF comment HHJFIFC   (1#%(:3=<9387@H\N@DWE78PmQW_bghg>Mqypdx\egcC//cB8Bccccccccccccccccccccccccccccccccccccccccccccccccccx" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?EflBgӐy$gUbVzOV&G8Zџ2{Rޠ1IX˩9\ Y($m#}E"0BD+HeY/qUήLqcj.6 qҴs=(3A0 ~\bI֯*qn1OV9HɈn U+!L[}t U) JZҡY o=?G{xwsߓP4h2qɃ͛L,kʺ9AAVhLPbSOM0+:N o.bΨX ֞#硡`SGcڷ } JP)3dU튥q.\-U,0İ&)(bܡ=zSX5H} E#M~|MRMˆʡ 'j@}i^*5UcV kLhP|cL `h&:pi0y@;T9Scy{Tay!t ڬxC @Wߥ;x"89'C.x9?JC>I*|}Rlz@{sM+U/8P]Zi^:U=U)5'ZPN_oʀ*S U `\U"Ҩ{Upsӌ@#Hx*nzR^s".Hwq߽P2TT3j(#:8P1ꍷ%Aǥ?n[8@ R ʜuM1h>>%.DIC;  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzw!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzX " ?kaj\w:LqHizQҀcHz1N9⋊vSG$c֙uv!m~՟%̒aTrIJf\wm3MJ泚qr@aymZxtg q߭Lڲ"9w[<mw2ڗRD捿;w8qJ^bN F1N^Og8N{PJJBEx!1uGz*)r@5VQa^e`Y5,v[s,Ivpy'ӊV3WOQeq\*PP8'29 띜:mRA<~ݟx_cq1H_BK9VdpӃTpniw^*!rF Ljd;;c  3d͘w=k3-,F8Alwt_ʨYk#b2ezw8hL +˜DygIiP}M?f *=2M ,)b!NJr DֆR4 jlzH㹩X11;RуR;R4GJ1Lcf+SFFB1?@ԧ ])֭[BxϗnjԾt.md~7y$1L&I8a\zUP]>d7*) 'a۱ +fF>+|ѻݎ3~/Rp w,J>kj:jia[#GFrS~=inYI =̘R`\֢*#d^$ZQo=sҡ gvE\c_=~ŤꋩHy8CC̀~)jexWo3od; 嶙 {W  n#׵h[H >NX7){4I&#&)FP cjյEi,1]Ct:ՕMxƮq?֥"_T,1ps֪rPyBŚkPdE3i4q;ybBC9 p^ yFHgFq{T>{4 V} Oi?Ma1cqUiu֛6J;wdJ0F?O45-mx3q\.n&Bڻ0X}*i7@e0^?ƴU~8]퇆'z)d4F*[ɿr0~u=,yǥaّ= m’ibi3i CcF0ZHblPhCE)M)ǥHG~=h@ڎ"Fpy5~w@OlGRaOm"$֕O8 13(EKTcO1 ې2Յpt>Hb#{9aGl~T NG9isԇۭ0c}RQcQJNi*+ c=PXҜJ| pR݉6D/n(F9◌qH RP1J(q@4H}ҝ`s@SHqM@ #ސS撘>ZN;`SMx1 =;SS&4lB=CEF`zhL;Ftdbg֝:| j0VɏyK+׀zzQ sJ7(,H^}}Q/"繠dg$9*WޜFNh[ )qҞ :P03VխI \-jX.ZXg!{TX<:K$B2Xvc,RȇkЎqMᑗӌ՗LDۊФ͑M݅~Bo/Y0e`Vm_zLiwYpR-q]C69B3cַ4@%8\.#Le_s ).$hA 3P;Gүɧp$go8M[jd0y\Vby҅W  rH$K>h@*V0\!%wڠ1e<⪺`0'О? w]ğλ6$M*Xe^&O\ ¸pdkޕZD qoR!u|KC$qQG߁ϿZ*UEˀܨ 1z[8R0oZ΅);60'62''o~jM w2nngϞV]yQ)1+f3/08Y1aw@N @$w kB[I&R&}R)>c6>4Ă(IhզX?Þ:c.P9!`Mq`rT~x5pYR) +^ӥ s=t.R>^ M%`ezRA)`F(c'ЏZTọ۽g$Gc <֭_*Y'>{6ɶCp ~Ea6|kc84xh'k#mFfeR@J*.ɻCĝKiwp~U(+Jۡy$(P?:mޏ$J.(i bHW(_<Rjc-?}g?FW TC *ڹ$jmL/jȇ ;r;W!ɶHVo7a]NCuuR;8is!@:j}'\)qq4!x8$vp]xHYa}=Pq5iwKs4T$ɒ9k#Z;\C@gƹQw(T?Z]FhZH57FNr8s@@#(8N(?Ȣ)oJ'֗g{wfkN3Hj,֚84sz19)$3N5}})MX{cNZ&1c-3 `j^ JrDƮȝK72zVaR9#VA; SBhz(VA"џjr.#1OGz`GJC5V^\{~V 8#<,G9%6ZXץ=][q4| ҝq;U@4>)8RP0\y{2r*_UI|dqƦcszr4*jNSEE# =3C)>g&ҋ C&8ϯjQ!q@ 4N?ʐ1:5sLC䞧A;b3c?[hR%w{ԆD70iZ\Xd=1ҒV]o֐4޴ QSP1*2C T[``qZ#Sytmno,ch'C;yeFrp<izƛyͻ O*ø>ƶ`m-.m#@Е v{V=ݍnmB\:FGNS4_׮"HCAfgl#^_(n01P8U Dv>NB0 x^M+߷!÷֝t$F &OA|sU}.):·?:տI|z' 9T"5w2ƈ:O)4-j.koq'I#eyw)>i^1;[wFch2jn%Ќ] P}{ {R4,'vwx`G$OAYzܑZX d=K8sVmn)8TrKXm}G-~jI);[Bq!ۃ+ЊS#> $Y}-$Qz !DAց"16Cg#}yW.=qԒ]qؓ #qWnAޮZ2A 8 ©1wOv$eA ܩQΓt%y'H>BarX\8ghwy-]<:\նu.G⳷[)1 d}o#M3SkswMV7MM89!߇_ʺiݙ~"d\G-l>5d'v(fbmZ]#RBiDP9uwԋX7䷚8QOJuXYnHyIOO^~:ƽr619yVŤ#_ei\PҼ:t}]'nF-՝߼0FA?dusϭd\l3$.k)9^'BU[~&g.|CFNQ #,GX3"ElM]gQ,t~t9f>5 ZHyFp8is@#):ic='QJy?'~kܘ5x֩A3j=1?fH }jbDr~9z:S1x!=Y[r)aAeLZp:>UKgDҦm=3)_zbpiZ8qjjr)YG~he#=K4#QT8w̾FELӵ;qM鑜٩Ӟs0{}iLsQ ԇ$s4LC 3YMi\.G$K J#>hmj#2Ojby5?%@lo;si N^;Q> 6Yd+jef%MHC&Ӹ=)CLV-1Eٹ0_)3"A_$*LF =hOSA'̹BFp0AVlf|z?C׌gңB/͐#{~& R $1+K; Yì@嶆2U5+AVa_!s) 囻Iܰ&AFy uLdbqF2@jͽQI;V$R,wh{[\Q]D21o+? Ҵ bQ򧏙CVOȯiw#rD``O${zV}6~_ѥyo H݌ id%sl`gv$uԷ<_RC8X3]nݡ}Lw2MA胖rXZl$V*;dE[`kk dTIb[bc=ޱRk+,`p~5DֻfR['ߧOZO2`[)]FD,8BMLsuTRaHաBmVm.e˵1 ^؃x RK I*=z8}KZ.U͋cAo{}H2^sa{v2A6_a--//|O$nh\K&fa"Uaz~5vd\ڰKm#rz}*kG51W,Tdgzy;g'oZ,s5{~ U^I ÜҖa%D?'nXNTjM<@s<{,cj͚d!#{LmLH$ ?*+*{-Ԟh jEt#SN1QުJ3WFrG)dzӑ @,q+%IkZ%8>/Q\7iXmª3ƍ4ddDasr}L~vH`pGҜvhl[!$I"%y*8GX^y-RM= r=;R&U`Np* n&X81qZ)Bm{h^9d x.AqayԕVzzUx@{ ZT!CpAMZ~C(e #(o)I9MI{2[;Xz}$+8%JݏLv-\3Az*Bµ&*oMٿDE`f,Wۘd7q׭XJ&(La 7>gC*(%.qqc G? .LJfGc%XKqi&nm#]mj@pFӵ9mD4J{d+hbT3;d p~?a؁G%0zVlKq2A $jk|;koeh0H>qOjnX,AOPz{~Eg^%LHR Jr}W=}AܺO ly#9*Kv"}>5;$ v2~s۹iB ilF^`p?)84h5U֧P$ac8g>]8`N 1T/OSVXL-UwNx^z@{zHOcjBEm}MO4GҌc4CׁG-' q@ GO—z:E4v2riiCӚɽ]-ַCYEZq Re}##iHbFjւ3)$zSVBE(?PiH83J0qJ_T*~ri;dž1?ZPd퍏yFn[l SϩB&r?ʙ I'̹LcQq֭I_P?:mGZcڧ|jpOVcV_G`93?+Úb̸֐e?*qB>Ǩ' jbDpҤPFm x?IӜp(L,ۖ1S;==j9\ԠhBcwg&c|qkMz֫p dSS4 [+PYJG>k2HK(iZQҫA-0 c*Eaf9!~\7˿:E"=k%:S2z,,>gիt}Yny#;Ӝ֚p;T1 <)49M>ϽbӅ遊I܊FdjGJՙ13H2ZYFd7R†V$8 2`qTOAUJzK"O3LB2xsެYHGثAa<.$|{˱Љk$hh'Q!>qzv3eIZZôF{F1sB 첅1U "1txdp؎E[a%ûktZI -RH۠e$ O#F?}Đg$ :$r둆R}8zd57)#p?+zq`-30]3;_L}vVq {[,,I uh*)$+ #m#@//Օ g LlHǸA*R[#z?V5{IlH'*-.1,k 9<3Yh f8XNk$e7ԱB[RlP<F`V5*fohRPwȘ@=1n{EXX_.O~'axeu-)C!6ʬsp;Z?O\}$$ڱ@c!~cҥIWoP=HV&NFpcޒ(~ =Sg'K&o68K˂yjȗ?U]s眏qLwYchUy(s?E i7^?7at$#6f:rv>߿R٨WlXCp-o!U=?ZOAe7ښ/KÁַ]Nc@ҥQUݲ=Cۿjke|$z_ djcmA)?65HM2FU&eK{?Kk#Jwq.OI= ,/-yE $ϭe-F߼;:J]7P{=J"RA2;|+俗&]CHci(gcGy庞;OXE=!t8)E"WTo 띢<~U!8r? R(%I|> H$q֥$3T~q,)vȫEsILy1S歔^c.2$?E=^SA  Qq?2mFf+oV-ǽmf){SqTktMnM=}i݂֨!cڤ=jc(&%.Խ$xf׵*CAZn:LZl3NMp\7'a2s!Qvՠve6O+ v&NI<֤?5IYW֍r6zIC&6'4 r3kK d}I5qo~_/M4ݸIxӶ_BS8P(Q! `#lG,=qRZd(ɿ*{r=j&8&%z+խݢ.s@$~~]*Q#.'<]}s~9ppG# #ApBö@?ImZU*&e1H}yO.fN2Ap8y8sqOzWjgКugRh\9EgNF%V'W4Ck Em=R.9); !x(8;S8_ڀӀ1޳u1jcOj䲊 =i s]=k>>%S[#5LH,`?b XH̩R@7֦bӑQ-Nsj3Z+9)<4RZҝ9rImHw0Z)cҩ<4 e!ҭب2UU,oo09LH #oZDXdb&%sڥnXG4~#OE*p{?ʅ}Sa8ӰMA8P!򏗯_Z_~#TR=Lz DIe;F~@;cڄ xx5*0F*6 pA q Svs3MMC {BG1F E$~x`}j Max9ӭFIgwO,hvebn C ;Meg^qM̞Ƌ -&Onc!jnUuJb512*yX\O|L@*T]YWb^5ZPɜ4N XOr"1nCj<&%#];bT{8Ap\dX4Dv'^ZwwD[Mԁ#cK`Y[4*W0"jCw.7RHW%ӥEw@?ZKɯEX7zԽ7^8 @ך eE(o뚖aO0HX9P~;8a}MR54ֺ2yaS=rpzvdY$uRp{SIS RYErJ#06h[MDY f="vkueG|ec=AP{ oʪ֦Gg$^}j5 JG҄8'zy A 2sVeHYc0:2dhȖJK'+,kcjVk p<̯^Rz-ʇ "T̰Bmp0AiP[8{yrF{ͩ"Ż*q-AX#*dp ~?G$=3zTv)xCO<3:sj׆.aYmUTZ2UpAR={V6w%>ck o.UFʫxbY,wD|ɕdwDM΋1e=Ìdc'},l<8Q\}6vsp0'ެ^j,or}IU)u8 [Tygn9Kf.m5$P {vOŷ2Mx#dǐoCy,F<iձ'ZHqq[C*`AA肟f?@M2C-ûuh{u"s?ipqQQl.kP&Emj^);ZC2@tsJ#z^ގ9r:?G< -fyI/|fVAяitäaIJfvK܄:Ue"aS-#eB3D*G#LicEÕ ɀΔ0G@7sH[JCzE- ޡ{gTq@DVe VL$UgO h(BwmB:]U~cqP;yv};R@NK`G\RNWwozrl(#FMX+j2;." mʅ@W*AǭCx،jBwLUb3=M$ :U+E"b>Sa>k4-cڭWޕTi[BHm!3{fŽ*vG&S[P9:@7c5(L6igddw+`< *:1\Hov®d*HdS&;}EQUgX]lx#Ĝ?^!1?@Dpɫ7c2 ]##2#`2nC⦸Q2y#'UJΚwڂ >fFKu1OƩTdzb#48A M#CǭE)[d<=qWS'_Ԃ,|J2u%>2Zj>9 .vPHfJIe2~W88 }j[Ov|ܩh}y<@+vZyDvZB8LBNjE{gV`6q;S}ĎEBvL272hkMȺ%0̷\ן´>\hh]#]BsngRrvkGq'T+|K Ou^yu6wN lv|.G I/*c vYU1xn(X(LF6r/yE-7{;qf'SK+NPաRh;ּQ n@V̈r޹8a;mo¡S}='DN:I'8յq/=\Rs@rhǧOZ?Z?G4sP9Ҝڐ0=g8?Jv803T4y5nӎ9nS#J ocT ؽ~TZ?*4fM;԰}}*;55|ƜPR*A2*@Z:0Έ~?Ωlf4FQVӭ/jGN7QgZ-Ue9ɦg.|jު(5wL҆8n:)"7j rxyyMks=:T\}BC\g4ޝ,@zZ.f=x[3z*4_< 68ɫFAVn"RpIn)m,!<[[sx 9?J}_5V:a nJ6zQu=I18GoVMTcV#j[L "(=Tfܩ?)k=8&al[rA/֢}H{cez/8aA&4p>tF]ЃSqO0! g9$c#ֳ/K";}k^&5i#N;_X.BTj,,ZTH)qQ[=85Zi OoJi'bkG5D'4\!${P85kC 9'*40HQHY Ԟ iq1xvz#$?"%鎮Ao^: Z$\2tfSJ(P0jyn =26sCLi':Ԑ&,܅\9$\T1!oB49n*]$lX',UpM0PDK c0i#/1`7Fxv"j+:v?kF=$Mfޮgy6OV1\j pn>7 Hnc?OJ%.b='NsERIl+7 GYE2ß)Lm]$$r7/-ߏnԆ _X$w;jkB9QGqNqk_H']:+ieMVBR6!Z?qӥqSn'oL{Hȃ?Ѣ_j8fAO@)"ۏb?:*$tڎ{3fJԤT6y }jn+VqJL1GgԝppOj8^xh>uw0z=3Y&?ƴfgWۥa"WMo5R>2:R~=@ɺ}jh?׏ңjH8_JQA3YznQ^;u&Blg~)=9<ԕb7 G;cSȍ4#7J  Zw֪7@$Xj~;VJ㊮k5#bqɠG یG Z_[8ݬ 3}k&^:SKRߛ:YA,ܨ8B:} 6F8+KBj~usoZEde",y=*Qs҂NjBO'$pZb3T SY⭔1<튭4[Th[jB(*'J.֥(WP䜃WQ\uJ= qָA@6+H=L&?JtH9&ix$[3w1:x^9bG4E׎qN?"{a]>PT+ u9MuOҫܻ/q҄7GhPۏ=e` |pبbb)4iKNrsRV *N1TC!p4ۡ̄}Aj%LBqS2CށOWj2i^i n1Vz0qy8e y,+BU:tND bgx9ř>⤷$h2ĎMYط ߳^EVЅVǕm_lم6͒pqsXdd{x":|bp0N}s֦VoSMqN v4ϐ 8)sv)/6OQSȢù=Ӂj=sާEu4 i' { \RAzNYO-t9lƧVg-Z{ֿsY ĊvYњqse)Ojsj1}k/͓z7G/΋փ=e<|Zߝ+j9ҳ~/ganf~t=81/o«J,moOnkhtb[G,[3iPѠqM=ZSx~Tz*A=sCs+=Er\uv_SwZ`@֛i+D*5/jj$`E,F{dt<ƫʆ<z[=T$gΛ/$ZZlV=Tw>eGcbOϏzyA)4 +c iNBi:cq[\b9n*Ź3ګ\Q:}+.w_ U&QxgjH{ mpm3؊-TVR:NUTq/=* UלEv "=[T PpkC; s 0cr84|SzuLL"UGld_ҡ" 3t5kF+`I jHc#SZb̪5j(,ibiOzo2*`(JO]`sbLH2GJzs6=JwRC{Q`lS;bNm犢.A'晚tϥ4"֞zu[*ի(Ul=xQ))2G"NE7AOs{xRfRzT5@`j6V,yM9^;[6仺/*),m߿5H{$BP+ȥ HQ9$Ԓ8HoV_G}(#8%h秵Yb)x407d?Wls| 9 j=jUZD67cuص)3$JU=O`RVc;V MCHϴOZφe KckHA ׏xd4F$*!yCqg G{ϭiH9\c5a3vŞ2S;dPi ;'rcq֑r#yX8\p+);;Sl:]< HEYqt4=.f3=4N|$w)Mevڴ#'_jwn}i2l})J\/>Q'Zt >vFZb`>/ᐃWM tSadT7j8*߉/bM\()4ǘT-6k1c[W4q8kbcWrd@;!]|S}ހT(OVDj˨. dE&;=93N 1 * '$ԁ{EA-f(@s\ԛ(OG֎GI"~/U ){fE7S_, ɦjO/ 6LZ-eS\z0[Zt)ٷp Iu6. eAY1P+JCҠL`'YбD:ucAn)ŷU(p^]fQhƅ皐q֜ 2}1zӈ1KDEri ZgK,ʀsS'`3N|q)9f6}R d: M;"iـ$ReԤY~d=JQ <!>nՏ:A_DNmc6H>OZ+Ը#chLI nԐɶ6M5P!OZv);D0)֟M1PS=h1=89ڤ)?94֜h?6M&k1'ަ#5 _v5-Ǟs,4Nq`{qZzX?g_hiҥZpWҦ_V!=)$N☇8; #X1U)'4ց ~JKO ’JUH8a-Y gQ`(BԊCA9R<~4EG4u9 _ڌx=hqޏoFyL XG JY<ǵoObgؒ>C ˚vq c$ 15 pLT?,q WŨ[SGooSNY، 5 ^=ځ⍾6}'qKoo>"OJW2)@<E/oKӵv<*ptpߊ_/'?q4J@SRg8O4 P#P~`NhQp_g)BƧ ǵ.J.}x3ҧך]EAN L#Q>{o.KRȱTORۊ.[N8.>5!S< PN(`1=j}>ԅ{`mau6syRn¢ ҩ ֐Ӷkr1䯔x;oi3dW 7/U4w|(յhOmn˜\;4o33V}-%++UfUo:Azm ONknXLz8ҳIR&4rXYنF*^*(0*cҢܬWjhBw TkNXO$.j{tp`>2=V,eZr@"$F!NSShgW9vd+QYE6zz^05RUn{[^p Nyҏ6:W1'8gsd߁m7aQZ@R8j: Q)86.>I0KFc+#WtZlRH&YFJ8qN>_s)GCQr qFv'cpl@Lu3E'aEGnWƥOJcd>np |I<2MOwMeCsc]"Ȳ2;ɤ~rmr?NEXBӥ>',]qj <> a;&?ʂaǨG\f{sr3=LRK{Hj8||9&4-8WZxjC>SF)ݳLAژ}iM=h7%SCU)2 sߟjp ˸obYz9ֲh>ʲRa%?QK,iHӆf2>X"F#0F=Eg4g B?(ϩ,z0?CEqI@}1qϽd- #,ztZnq[{KO#cfnhۓӧNjP2x֗!܈J6gmq@J }Zҝr/+P< я~lf4fc9'*QKB#W(|"O(: Gߥ/9㊘z6E"1ӥ/1T(r(B=) C}j &)0h\FCWt-tҞvQsWa$zo) ٧MX\֠ʠ rۊzԦ3!r<&&UuaR̠"F݊2)i1~Ƕj gQFErLFZ`nցsd>Sw4%ːk^QO9qWt&P~SQnM:r"e*z5oٳmŇ_/Il \rѧS*#}^͔Mvi>Vv1=SI8 y[H^\crAgKH?W:yAԁsY\{dQ):*s> ۀ4̤"S4W wLs!{V~٢'2$ڴ#iE>%sS>?p=FoaRfE5VF7"3>X6Sdw`(]CP/IfQ1,h1 ?JOʕ$N:z<2?˜cnQ 1t [52(.Pkeqڪͧ)J@ڝ/:=%Ǎ~5sYA5xmc,C99&%,IV)"aن 'ꦪD$e1R-ˎo?=@?9a>;AtعOoc>"Oh麞 x9"Z<7BzӢ{QddOԊ`: uQWH#֬ 2Թ "" S`1Уr~"'"acfY1\dU(w5B/y3J$S@D=@BݿJi+Hq.G%M~"˧;TpiriW tI={S%n9D"hT\VG2KIܺrRKKHcF-6yvFv-a<79UC:iMc(r1TmEZS%9yힵ'[iC֘'#$Uy;WMWԤ$,3~Hu4&#nl~־U"jcy]>R X.6-;XslHHL a ~4E:h73pG={T(~i^bLer2)8nPxI0<pI򠯵&{b`\SKž"14CJ#wcWVLK$9銘'dhebx{,S#%chlYr)nO5֭ ڧ(L >fNsH_8nTOpi'943L9ڐ GҢaױL4]*sңa֐:$Y?ZeD4 N1KN <#ƀ?N;F;7mS@@r:( ?3@ j\g4c8c<@\hps@u#ڀݧ44ǥ<P[N9✣J~1@!H+?ZwLq.;Q`>ԡFsS\{P1":~~ LCvM.Jp> )J8閑L Q1|rpA u1-`0𫀫)e0uf, Oy<ֳB2S6 m~Tlq#S3cZ}*9~o }JN+("m5ɐP1EgL jپۤQR}3:MPxB8p<欔{lD~T9)#`{8r?AR*/(EbÏOR#+)!~5=44o1Q'f;sȦ4jyjB)Nz$lGO#E;w~i%S&94}iqh) o=):ԁIzFC:{p#M7z?Lc$Ҁ"QG8FM8. sJE})⡛X> >fQ>OR R*^{Uz@4|4,}@coAM*_T HLqy>0P1&G3_JS{ :PЀB84X#5UqXSUݹ'9bP3TNj?)q֍E NUz慂i9=kE E#'֞Eb';jQfw)=z&+>̢jQM)NIЎqbEM0?Y`ÌӸXkzUrTmڬdQݥ*A̋ܣ̥p2GZa Zir=/L}i&sU{bBrr)ZL M-O9Ji?D=Ci }8dqϥ(};8=h sRmB<}hc4 vmu h獦0yPS}Ɨ4:~#( H׭iqF q'H @gQ疤݊\"vGw$:XWMo*5ˈ\Pr|=bQRf,NzsP@'rqV iąpW%;žx2#"O +2oHF?C)zO'̬tb:mڈN&I =z,sx.EHq)|>V=մJ2}G.QCjwEX-?8#cW[Ͱm۷jX2H5p?w~t#>c) )#ChiZq HuԐ1PIS/=sO/ɡ\zO4™=jBZNIƌҼ/$Tf"1S S_C=(>ƒPq i0;R&b 8#ޜTA f#)s`K#];+ۜ`0)ɧ SQجEOA4{SrJ@4?"()|}cIldҦOAHPu'jsI:h,H֑GZRԛiB0%{y ~5`Z`<4i;ޔ 2H{Ӏ9zR.:c@W884x9G8U` -b<~8NP=W 99 K9{1A# .A|bϵE~t`8[?(ɤdyq ӧ40i@<riq^w9=” R4/Z |#ހ8 (jp:P3Ўh< Q?K8 EBMi'$+ٞCVj~ȣgړqwϯTP~4XgP&F:G r? B8HOQ qj6/NFi̘\ 1ӂ6?m!pzPA @ϧjw=HCFDpAր01(BO w}h'lҀzPF* u' = = qzSF3ARO0*I$Қ:zS#tJ9$=iU}(bFN)Bd{탮CuЎ 9 q z;hyc [gLSJ9PeH>iFz)UE8'`c=)x`JidU!#Rz;!%D[ ̌'>i7,NF{Uu!Y\5*@<AJB ]3zwأ8=YV)篽H=WߎzaQ,6g51P0G@8*h:m!{缿ַ$i@ϽCO8 0 jé1s=*3 QI IgЎcڳllR>ZW4p3/1?ZnzSYL;srMBIZk^5hmqd2ƥwq+Lo /Ty1(a´HtWch'ڝ5#_棔A8ANMob c*Au M`YJvOU3ӏFGsJ nzTh04&Az{S=>/_lSFz  BN ڍO05n>VQthoe\TҤ~aGkX.XkM}&[8X:xjܟS> *Bu4Y$?Z*;qUu'GE\Ys֘[s7<BŻӰX24&,E0W0MRDL& wih* 5(LC[-!^Ouh}pH;1#nXvbGb1)S-(j|'>bFGB=@c&R;?ZO,7)7 y担 zRs8M&t9JSHd@~ mȥ 4SH~zi=(3PO~3M#'hcR491Bh)Lc9@ ;ǩ!m1߽.QUiʡ}hoJQ~o=y6O&?#җK>S?tc})Z.94!nڀ= L2;q6:}(r>_^`mT{@m#wCڜFvRl4s`teA8EH#n~lc '0)qR=ێ3ސ#P)$xіی5&[!vOiB:^ޕ#@ yNwS@ II^;xi.Ns€~':Ը2}qGm0#+1j6e,X7 z~Ԇ9L=;PP砣onJeE!d rsOcv( 4(,y\J6 AF?;/ ;\{P68#ښGxS`ԇpPI=ǥ<S0TN)╇q3N`# 3FiX.L:`=iC;RGCҋǖ'fHQgp9aܓy$r=:ҐFWO $g= '+9$`Ür[w9gHTƜФduiwu> ,"sCªr6"7;T7JGS:J{068= @ }M9P9ˎOJ-a@F@!w)v#zqsP7lys֗- [aN $Kc r[S<=IR/(\0:v#+- u<Ԁ޹dApc I(6z'5)XS|OP)#sI'qOy==G:񞔀bg9#挫g9?Zz`0z!G SU~sHy^CppiXc~b@#ڜT\ŽHp)@ۜ~nr}iW;P2Gs@p\~F9^=GN~`Hsʤ 6x) 8 [8 N:F #of}hm'֌Ҕc')9~Y ޑϰR qקZAq֘@`sAr;sLӂiPS 'Kb8=g NqB Pq}zShIøךB:`qNݓ1x!oL(;23NNߞ`s@qRrڐ@`ǭ!I!Pq5s<L \er1N9`$icғ9ϵ<48 w434 Ғ14\tǭK:gMlu(ǖ[:HaN7/GF aI9`G׭ DU5Ly)>c@T$`Hqӊ Ȥ1S;y xQ"az#0 K4,qPOՅ5Np')#srZC".:o!S`)ʞ3Hn])B( AZ` b:MlZ6{ME -ipǎ;ҕX#ךFX1 +D:U8Nja2 *nSTX?)Ҙ3#n,wsH?w,=i[*11BNޠLD s  w@e 7s{R׋=4$6 4c8bJ]z=O4 %'T9  (Ey1%:@'nzfw\T͵WE \C# ;iB+7aZh۵g v܀x0?ZpV,W9ce˵Hqځ5&~\Rivy=y=@񃜞Ф ǽL9$;@\h-Hwr3ҥ,sM`%Nx.)q84): \,^恍HczZr1=1Xa~¸%I4lQy7h x?tvv O(A@0+܊D`Tm{c4݌iFgMg};S;sN AҲ.C@9 }=>qu8vHrE0†U*=0!n籣 Fqz6q4ॗ8zA㎃qFa2FGjN2zђJ81ъ&O( ~.CLܫ"ƀ rFsZ2SqA?ˑOjG TneCH>U 1›2֑e==E s@ vᘏNh|]ܷ\ `g=# b[YrxGJ6v ~I_OJgͰdҪHż'͞xd[LO(eO=sO#r3 H/R|+6J 9ڀ")p}i;8bf=sA]@ QFA?8i g3Z z@ [ksJ~J; iP4=xҜQfP˴dfx &0ާp 󎂤H ځ6 +FNhKv1M|mS@i'ɥ BNIigJTFFIi}Gri `>ݹϭ9e,AJ~P#cHwyu(p6qIL9cҍT3#;zSrCs|.0F=M (#jF$! PjX *e`F=銄c}"J1cB 㪞ڦX8>*IIۀy221dq /0`qڌ6H!g ֧2Ax si99NVu\< b#X``GH5! wZk.0mLpy2u<RR8v?)8"8LҀFrOR'ZP7+|zRĩJxQ 9'As)`yT(&$JUF37ЎS*,pH㷘1@ l$dѵ$ࠒH`qҐ.y Є4r;Sv)2oda`q@ 1x#$NiBAj $<ҚcۚxPTv;XozDG 9ylO<Ԙ85'P$vz{y=z=hc{#v#'$SyҕŸ;ۀsR#v:~ .rq(lǯ01Ի@9Ls#ߥF`g mOX13MR36=R.BznaǷj@3znz= 9AL)g?1H^Q %6V`|2*'#b;qSOFibf{w43H$Xu B=Xu4Ф1/柸Xsq{R7 (?yE##1#QR_#nap:{Tj7G9qրn#҄`A#j2FzTmN9(]Zf3Jč`ca\n9R:cօbI52#on(OcXF=qM|8 dTPWo506sf>B~U_WC.g d*퓞4Jrڣ|㎝9@)Qh0 I8)ӂ;rׯzoPHJS}I| PCӞǵ4qPNϽ.C:})deYFic6Ҫ&E0b{c $ۇE=֜3;|)0v=]&If@)ר)>cCb cM=%ڜD_FV6A@hNA'|ݬF_ԡKQ)YD*TҀ#ڜ$J{VbG$qC*$@ ptQN\@pSk&ɶ *^BKIcL 63>Q1RJ=E FqڤUBCUJS:4$#*zc A=;,ʎ*zYnciWn s?Ҙ.μdg=M1@ R7twl#69biJ~9UvTXl!YG, oذ HBXiӓq 4OT@N {`ԞhBѩш֔.HI+!)B[>Z0\u!yzۭ()PEZ 9@S46yKSNPqWu\{lǥ,7*H1U9##l8i.=X*$rԊ2B`6eWަ)d,0<3Fn1Na?Z@FR[}*&3h§)\َ'{c ;zDgi0OJx;\OjsBzIPX>9 t`0@*:s{ dw HS#Y w=pi#'aR>Rh;`N ’kt&R8Nܬ ˟kcwd$g". `[8#h$AsN{RQٳǦ*B7}нy 0)OvFg8&9'n{HѩB`TP!8')(`81 sTNNU'1qZVF8NnIsa0`iƥ czr0i(GPqS2_CDg <:sf']<`xځT.G'#PE_>ݽk";''*a'Uwn JG vHvYߵ`r=n igʃ #5Xo FA9'inp@?΀#NqQ>n@\m$nzI+iSe=CwSJ)da) q=h2%Қv9=ԘL|hp w4 ڤ yiI 22H?H~~恐=A ~vfFXWh#3 #CS$;x{v7' Hx@9p@` FvpzsMe$d:MXNNK*T$p)<*yer d}i÷A`_.p#BdO#  qHW99@lO8/)ۜ@ u8Gj"9=qS:\8?_j{pV_x?MWpRg.ݡFx8 ggp1Ƨ?-A1a(r$tf4s4a-gԁNU"4/}qOipP`TP䏆r`N*gT(MFc+T]v#)G~ q"p^PhA@ w8Afj@pz*vpߥJT'Qn.=n3K7!H9 3d%p6(NI$ӄ`K4` 8~qʻJN: vVee#I2 zEmۺ- I xVfԢTeYݸ[qGJ` Gޘ@sR|wV d 9R &7p  q46;!`ӥ)DHqޟ`O<6%b͞=)̝Pӌ⁈=ܳuQGqKcpq! Ҍ4RȀh^J֓h^ǩʁTC  GͼUA<@9?7P;?,C7=OU_8eF @ t 9Har3/JivrJ1 RݒrG?t{TXJsޝJrN:P#M;{gw22~, ;R .r;f-vA#bu*MH8N2=)%!vG\CJ4˨^;Tlp$97<巯Jb X9[Z9 8R_,A#D! Թ̭dMǠi\7{LR;g u╡e=9\RD * 8p8' d LOZWL08S^"H-LD!D`=D"P vԑ/= '^EH  mT`;F#r~P=M`*OziT4jyD8vޓn^ةvcn3QQGp!FO zԭ$Rcie`@MWQh'NEڔڜ^xw%#sH` #z `R cv)SOZC# 3Z@H+HԿ7* `w S89(U(W Nخ*=BqF* r8H=qRGq짦G@ @6pGUӛ+F˸AweXay UFX}hirR8nLc5Ŋv4;-$:SKc') sWlP; uqC Ξ`L3n߻ߊ@9w\Rg}Nqޣ*7IP1N:ԊS/8?*3He_õٹ[@WuP3 ҘӁ`1LU(J^턜GLMc}" F#%rx$ȀhS2@6`'&ݧ٧)r?WOZgY@h_''u6PNF ~#=@K2T:̾X "L̢-*a,ZNtbF^ː)6W*tm,|=BĨM8$;)*&_1O|vEK98Kdr?Z@ wGʤ" >USyǰ s eB͜G;>8P:UTuޯM;.w7!ѺA4p~:9?JQv=u|ņ^V]g߿PÑFFѵ:@4`Bu#񥏖PsPe08!j@,z[H P@%{M9an=2xd29riY6ڤ 9V;S޵+bI<Z0F$=枑na)cq'=Z5!Ls(`~BFcts\I GEMbwcf.;[$8(#<> dUB0ڥ7)9!VbSZDsyj@BŕՄy8o)o9wIۓ{T(,c A$cS INF0V6v c;X(.Ae4  21=HшiqHdb6(sɦ d$Zg'$VEb# SDQHҥ+r-TddgB\Ӓ(Xac !XFjM G;y+ځ 1ilcOis*HRqO@T*:)/34&(8.2c-f 7#-e0`g;TaeQUc`Fsyfԕn'8>*cAF2 X0P xl'P= z@::dn<#(%F~cRU1'iH[o֕ 1uM|۸hxpn0Hz ԥ*I玃Lf*7J "j8n9;Uq@d;< Slg֟"0;Ɛ"A݌Nh'ʎqd*H[y$7_A@Uwd PFqVW^Gz K( Isy?:pIsF0?wM^ 8f1Kc9Jv0`B*ź@He*$cH;G|io8$8OJ`dL.2#zc#)'pA4o#HB9@0qmeM"g̤~\ԾVǯ%&ہg< zgGBjUmQH1b MJ֧c9ZESph :e4Ճp. Z&qޥF2y`DrJLa^*hKcqbv"c;DQl?2* ۵}"s@XTq.-;¤T[u.OFƀ"Asje#;ւ`Yz@!Lg!@,0x✡X#UaQ8ԙR; ZLöxf9Ui2 :*f#PyQ&r}mg+ df@7C',DjDUl62˂z$Psw,^䎿JTDp2N班BP sz~g(AM;\ :AQb,0#-@!(z{I+tpy&ɴ;1,ґ2nlCs) R0 =$*9i%m6r@8 Fe'Ю(@=֜˓#nBVby4fUԌHBTg="%s=)P6S3E3S0s(s.P:jAʼnGYՎBz慅Ug8/6 րFH9'R-%Pdw=sJHUA)z`ulRf;SUE^HPrOza,S#^HyrS#`qZdcpX)Yr'AP!O0F?.qK3F20zv1ez})JvAzTd.Pau9 㙂Kd#ӃsȡOSI"vz!?*HP!&2G4ciڤR+;T{Y]HA)V e8lA$}Ё#$%sC7\1Au,N6i 0,9V9Af@lԪ A\Ӗ"CBځrXSl0A57TTC(ҁ 1) HJIR3Rp3 +sQ\ JNqL-&HTC)9=h(sڛyH>pCF}Zx;)XS&A g@Q*\'ȻhNݲ=ڝ,RÐ끵BindP= u۠thݰvL&hRJ^C OD = wY3*FH?Z67d<[l2xǥj@ Է(;uɡ #X= L.=#=q.ZATɴgNtXw+mÎr)W$o_Z XJ§ CWu(@#/Қfe8jԀ B278 ЂhXA>A'ҀݔdƦqawsI2J<9 ub}OP۸׾M=vrWh90'⁍bg%p F倌A3jv M+R#($[([OPоL'H r*6 {Xs@*~n99RyY1ʎ5?(#lG\w1&Aw Qs✁ozLePxۂ\T.ZCN D;u 7s~!4FUYf rTw1STTe:O4ixnD"dtR8ds _Ҕ퍕NUd͛FHMF~S {Q.J`3JU[bgujb2o w EFH<=bKdcUq ri c'qPW1h6xaޢe*'Њ`$@˴D4mX_zA!<8a Jv:SހhX*rMbV1dLXă~M00*c s҄ 8XufYR%##{:PbwuG1|}zp*[h|}@U.imc$ D0 szMi>gv$qlP <QʈlD%UYǠM0iLp2by$FP]=.G);TwM"nsG<j$|Ɣ(hy[h #2f9R@#yYxsH}y.$Oj4僞A#`F\pC'p,Q'`wZXfTht\ v\wV'@)!;qBN['Ң<’u#&=3r@L;T ֜rS&JE(l9wx@?MrpST',}J*ŨőPANdʯz(aJ-՜xZEӒPU1R4q`dK<gB@F#\QO94`nl9zx,x]DSPոɧ 0OR8fY F8ȧ$^[z&¤M Ump3Ddpl26Nr:SU.ӌ#-q=)ˇ pFϘv+aNo YwEASxVPw{SQ9flČԸ`q7FLS H⢓|@ D:@,g$ Rc{ ildI4WlYf^Xv*AR$2xHX >f ' J>e%y0 9@hɌ$ڀ$YP[h.p94,J%UBNG UVG) sހL` aJ ~lE=⍘DWik1aΐH$\sNUFV18ȢHfGJU6**`uӚj!;wjtpU-Ɠi[E"@PWRIFք,ЁNBdc܊F!fc `nS&\'܏֗~hAf#Y7l=9lGPO;ᇧ4A0Ҙ(]8*Z^@Kp(c^ 7!2/=s7GZe>@XHП)ҫyr~ #a@̴0c(dPx+'uaOR9V!"TրJŘݏ<Bc(EI="i1f5YVǠ⁊7 { D*F ԁR,>Wv'V.6h`@F5& _ ]LT+G C`!W%*Q9| 9?&iJ+ )n;XYǹ6pOzDF`w+rӠg?0/;0T 242x*ķj|rAc#SqN,Gһ * 9ਦ%A{a1F\)F .B #uy#P@ŒZtr9?)Ug d۽pU͒p3.lJr@ff !'F1D *yElqJk֡Uɳ8'֞ H4@B~@IyHˀaBE.b2*K09)R\1#JfU91ןJX(yҜgֈ'R:l|0fMЊ gDT =Dž`t9sw S~8<Gj !&7CޥU3pqK4Q00TޘrOLRKwM)@[p93"pɦmhnxpi\vCpNh(26Xrhkp8$)Sw1 6- n"|x!viUWp1iw-U3 IY\YuI]l̠TS a =@{GL3]GTya՘#|d?CT@ ?/?,x9o=Ls13=(# $Y /O4.ǐJˈ!'֠W݌()E%z䞇#[:"z");^*:B3mw*3E!E*S<4G jXVVH힔Uajb#4PH*"ʩ;y@X P!1ޡiR[XA 18J3֡WMwVC:[F:%0=@=0<*`pý2$ʾ3x'U KJbVf1*cE);'D%CnG=i=<>7h'g8La,+) h6̡U5ɲWpČRQ?&XDzڑDI ʹ9jr* #S34A,*OlzP+ .F  NamSG# $8NivvqI,rO R;~R;ݿpJ% f78]ǂ;GnjDr#b2O^L_1@a,J};TJA! @x9~¸)jVMè=0FT ($qi$I.ٿ*NzR)62/r:qQ%sqeXqN»Sbw.xOzH2`jC,;"5n5HG(! ,˞̔GSHl!{JԞ1ELHxA&úqB:QEI],h>ayeAq* S$7`Ē}2:crSc8&*JV2wGj[L*+9,NQy7|(; 3TTtXE@Ѷb>23`3E Xτb(ExhAQEۆ5܀*oeQCU3ޣ}&L$%eSvyf4DH㸢hLe !rsEڻE $c^§ee`EąpwpRK&=_SEO)] zpO# (a-GHʅS$F {QE"bPr.˾GQpQKȤlbIdE==5|w5lL 1(Ac0`ùUI 7cS)IـЯ-Ҋ)u+ ,0S03EqhQd (Jz$ylAE0[IAiR"TS<-BE䀬AOj#dg8sEXC=0i#92`Q`S$ 6\CE7 ȟ#dfLBEbP1Er)l$~Q@#gEXv,;>CE41ǂ͜@i$1F0;QTHG"'"}sڊ(`L!C6 nۆ R0,GSB#> S۰cH␔C9QHӸ`;)C2qsOG8UqE!0 T0J}袆!ʱʆԍyE B(,e*ăҕ%P(̽0xcR7)dž 4Q@ѩ}SԈo=XQE2Y rAE1es\r;T`~qڊ)\o9,Fx'(Ohlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/nikonMakernoteType1.jpg0000644000000000000000000050046710716136374030047 0ustar rootrootJFIFHHEExifII*  (12i NIKONE950,,v981-792001:04:06 11:51:40BJ"'P0210Rfz   |4}0100@v 7 2001:04:06 11:51:402001:04:06 11:51:40  fn(6,,R980100Nikon & , 4 H P08.00d2? / ;@O2 Jd V;XEWd2   ,6') ,@9DC?9>=GPfWGKaM=>YyZaimrsrEU}|ofprn44nI>Innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn44nI>Innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzx! ?ҵv}*)-.)3`?Z׋4Oݢ#`'5 0GjWH:~ *K@mկa@( Q(OTe["RX`Jc;!ئ /#*Ir6Z ț#=}?Z 37cǽ.xBI 5/{jy})j,m$ $=qF,E4nAgRcGM\.pw#=0Uo;^i#I8U8$(7Q[AGs\+Sb y\r>sq@Ο:ZG4y0Ͽ56hNbnz]CcTuwe2,p:b1RΨ!R9 {c?5EOցߍmQ!y>Y*Hc8+;! ,Tzʀ:l^K`|YJ0L}:ǁ!PdDi=Hd9=3tMGDIH]pI~Iڶu,9EajڂڮA̜; aIeKyRd#M Ƨ$Pb{fBTC|CLE-XFmdz #]#ց$/\!@GIg'OWEOցώnM;?v 4/P[O>7$XrA{#`x+Yr dکC{y1IQ.Ğ=s:/Kg 浑FbXӵF-6W#j(.Dֈ^t7Q2 @Ƨ})VgQ? \ǩ-9`*p;wZb= .5zˬ5XvF{}ܡY#%Bq\]Fĕ1\Itǿz=S/\RgpOQdV9!1?ƹ[#2ΨQK'‡>˞,Y,z\VZVgH0;({ D:0>Ҽq޽Nlg) U-q )/DOCjycIR6l<4A 9~4$mvA#N}3 {p>USsϩD d 9i4dyq|kKIM H.V-VW-coUZ#ܳǃur~a cwo]ˏjPv:M`Fw\s2mrdA)!r1hXirpö01;X!9GޣzvE 6]2$.ܧ. nv=3Vb[t}wF9\ WVͼsy`wU'_Y & <`NaTUbɤb `=7%'q)F7zWDj٢J5aDPH1)\E{Fw,F1u{h"j |`9rsNrT1I 1߇9#?Ҥ̗b9fzp=6I]` |zScY z p@<68j>mcPYCyq9FdY.Z6l|9)= H`ӯX$7qΠ]{zwH,mW ~NÚ"e(!9b7jڻbJFKc=9n.q{GN[RFFwdJBwZy@r)'?:n4dYI<s[)$2n N8w+r H#OT ˍrzt=)T`JBFOJnXt'5uWDzužc#kd]]˝@G]ja<\ksȴ匌 #r'?HM%UQ򢜽 j| aJgbҿ9>}]*dt^mǖ0F F?* *!b;!RQ9\*O83N*9/V\z@O0 wR^8nYA瞙)3I_$28@DkaNߗc3*O|~ʋug0啀ߏ9"Q gn8vA eI8 MhvQB<1nz"KT3w\$u8I^qR`d\jY\]‰)R@=ϽLc*[iDny~F!$jamyfc?)=5X<0@R!I=MgRwk!cP\>\fm JffxyzPչ ƹBO_=D=.mdҡ{rrptz#Uf}P_ojV#pNq?Hr?v\~8@dNJ^qHwYI-&>QM {`fddFJNs|;%2#籤L{)Zs-?\Uu+`:kiol![*1m6O\Z9oIUy" #mrG__~8s\.#]^RQ g9'P.`&13"GFdq=QLnM*%.5݅'g횊mq7BRONuhhr0XtMvkon#9rIj.0`w``@BH20OnX$2{7},uҠkRAy"\'ڳ9FB8ݷ!x鎵]-niنo"vq##a1* w/N8?6yV!Pb1~JfPӐIˮr?5kmcmp w\tx9{}+IՓVAsN @Xs~9XsxW;A%avNzj)'u .@;q_oJ^{F. 9 Kp9s׿֩ Qv UHd Photoshop 3.08BIM ResolutionHH8BIM FX Global Lighting Angle8BIMFX Global Altitude8BIM Print Flags 8BIM Copyright Flag8BIM'Japanese Print Flags 8BIMColor Halftone SettingsH/fflff/ff2Z5-8BIMColor Transfer Settingsp8BIMGuides@@8BIM URL overrides8BIMSlicesqX DSCN5752 X8BIMICC Untagged Flag8BIMLayer ID Generator Base8BIM New Windows ThumbnailhpTPn@LJFIFHHAdobed            Tp"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?Yʡ״>#{yOWu\Ռ, [FS5YMŮ,. qc,!`.s4j:~cVdيI%@.n\ן/fCrYS^ X=WkW,1o7S{.޸sYݯkS=:\}=$?JL2[o[??S k.fyn˰cua&'B?8x}`Kj>g/>UUd'mNf W@/y.iЇᄘ eñLзm s_cYm!챔{=델m鴗6̓/vý̩_B66q/!R5FLk m{,/1]U]OK#q՞²Jx )յK4#aylfTbw)z,"^Gd~?Hú_K][ uueLΕs2X M]ܪQ# fI&ɕWFx5vENsk۰;힟 NwPc5zSlou\@ pvYc}grMoMgs[R}r?0>蘺|9G>FٛUynxdyivlK-&`q>6.6^8lx Cc(n}FWl6#׊lS[MdAbQΟX9wƭz79 O inur]!ŕo1bL:}qd8lޤ p_V]YU lWsԱyO9_cv<{Y}k']>S,l}:uVuJri;[]T6UKP5b ̷(>ܡ_m]c/mͻor^\#;pFͣaduSA޳jܖ@#n^&˳.f>zuz~4COf}a V_>7mvn5_ee~FPX*0k61LZl7sos_Zz/"+u.u;kcS-[ػϪ^mɯ7:Ѱ=56?{K;ѥ5ŵ9u[SEF^4Klx^pwJ.:8q1E볠f&#lw*,lN6 =zo쿃~p}"Y'ase4376uheu9;nU̳mʪݮuxmqkn-w}#~VvQ.}y-u6KHEY ."{i^Swٰ4#6C#z+_Q{&?>[So}@Z89ZO]lƲUvlkEZ~]^V4s]5>d>npkM=AO>z֐;a'l=7WK&Y]k5۫-8V#ٙqkqD5[7썞zH$IVeeiu5_}/*u qvp%:s]IM +ǫ3H歅e>[_[>Gǖ ueW%mkk~G/sZc[}۸{DZH= T_pX+XY8?.@Zz;?M{\& ;''%ᗹCX̳U]b? L27Z2h Ӯpu/ǻ荻Yw|'Cn5naeսw歳_&W'S:mjPvS1gZܳu,/w]]lT)w,v9ls]-uV-0k3Oյ[ӵ@ $}=ڀ1.Kl{gڟ.dx|wbz}k_=3cMRnk.>Cc s7NṦZg{X] ac!ķlή?{gģuw.I.P98]Aͫ%c̰1::e6\8OUoݢhÇUXN,n3Zݬҷ& @"{(U $; ] ظf]Os+y4Ж;nwf6޶ k Ӷnr:ܜ[[! V]}cYS8s/\%'5l}iqY s>}?\K\3se[cH"fSsI lֿ7#v9!IJG wSS3Wh}fFch{קKC&;|UzڀmL k=MkퟥAaܩJfD:?ԕߴ}!m߿w_g0IcEH}_e޶cg߷?D}of{L?Yw'?|wGX>]gKlDgM##w#~&;}wKzI41EG_U<}Y?;wp"6S{{g~St/w/ Iaә;vߦϴl8o\JI!8BIM!Version compatibility infoUAdobe PhotoshopAdobe Photoshop 6.08BIM JPEG QualityAdobed         X d !1"AQ2aqB#Rbr3ᒢC$Scs4⃓D%Td5&'tEe7Uu6 !1AQa"q2BRbr3# ?j[\B"K&EM?/cWmWգP7;GRCƔ t*Gg {?~#0`a NOՆS=# 7 ]0 ?\9⯬~]G\95+Jf(p{axmdW1L2h$@Zhs˫Dž$b蚈 Hxдg`r'Q 󑥍8¹?^ z7/a:IQ%Lf+)6L5{BF^ <ZŞ2{8~X8vV*dA(Ga->'?OL Cv#^cQU`uk<(xHS J$zxX*`-xr=_ӳ )΃p(P=xWGՊ~O^"?`#6eXQqH=ᓕ:+06+4f *+RlH5 EB`1b(d}V*Ti}'`:~0KdĎ3:XaQ(G#`(i4O) vP*i#׻tӷ @`)JTҴ0{C}OӁrFeb - _GuY_!s#?ӂ.- mbf#z;n)OXfZz'cZC>xo'i%r?ޟ[B;c*tF|'n?IoSi= Bug1GU~`.8qf)\^%Nc?]:Rwـ G):gdo2>q)# 1_U8Q8;L c>LƦʅyG76.Bߞ =9dHSƹ gOV׀^P=}YޒSi(Jx"]qb_ (|qHBM:F*vc%mYqLÏjI !'DV . qnlh,(q0*3V gV #12$T PG]({;_^zh> )bC݈hƚ_UXӉnHdian$bf/ PWLt+c`d8iBx@<U+ (Q=AD׀:sӕ~BV.A GQjiL OX$2V-xeJ˳?`=hт.kAۀ.;x9\H=qTV~A.P)_ C~"ŀ^˔ E#1L`𑈹%ZsƵTN@/a׊nx)S݉ I u@oߖPw`J} Sӂ\8fcחGMCXQAhAaN p?QQ#Q3~U,B;xݐrѾm># vĆ{?M>EkMGpِW"\@`AqPޱ%;x0\3 xg*)"Hk̼Ox:g̜38ս41%~3uigowgjkׇJ՜քNq_WnN@<k*DQQ-1%+Ijt5zgOw`nO:GrN2 Yt]*zV9HMr]wA ȃZh*S`eh +pʵAeQPK5W4ȐQȚe^\(zAr@*~K2pcP#?U{#}1Lj`AbTҤS@r e\  I"VR˸К9ey`VW oۖ(: ׅA1+Ϭl̦L׈a *t1;Ƹ7q1EEOntb(xyp.'&T64X5s_]0TD20 YX;e\…1F{GW>bCANq@e\L)ϻ/^ "G 0?^(*i,Op=#*V#gHX]0N]2{@^!cGY}=Zg@PMAFus @CE  i$TLjR{+{[Tx 5+ߌ?Պ?ұWjwc*t\P޾cP岖f5^55WHų3Ӹug#pjd_Clt坢 sx0Q1PF5 }v }9"fq8E*>i\\J#!ZD%>N(5`@` u)W3CJ ȯx i=YSp {EO0f EuX bTT4vpwWY6Nhfx(Nw-A{`@tRɗNvkHI:3U\j?Պ?~E(0ϘN ҆_TĮJ^†W#Vz$D"ΞN56L =kF]OS}r~\1e/m'"twp:ѯ⍸IjogVn 3F%XeQG;Ͳa7˷Ǫ̃̄ΔyEEWUjxp?Ղ"nDl%_&[KKFH*M{xd7.*A_MQe3ˈ{xci\M=? kw}8,q+ي SptXQ>7{%V"Y-ni*:k S`L{VP;G}Gr:S81mK)5@ȁK5QPOoლ"G`Jkurm .eAg**Xʪmx5{h-#]FU&+@@<$#?aUf,kўxz;W2]y3WPMu\H$ 4!@KlǢLHWW'`c 3?2?m$,d*r >6rQMǎ#N0z)Hv߆ݪMUT>57zx[Vl[\\dFf@?8Y'gmqI<(Ga0+,DQ34 LS"hiƒ*y ШbGb*:qռhҬA]*V]p\,r'1`0GP@8=k4Vu\zQ¨=~0L?UpNU׀"bS#ၑx._@8P6^Eˀ<q@'NeA pPO !w Eֱ˅adlG*h")RO1'*xb$ZDA=*>шx HoENWqQ?ƞGۈq` RH݅\'!\HRNTY|*>P"ׂӁfg݀#hbD W`N*?ׄXG3"h짯^A>U 'vʹ,KeV PmM)M}^"Į(`)+ۺt*sèB ԣkmlV鷠=RoL'+疶De>svՈ|qQF6ejG#Rr*7Ք.JTPLN9&|q}8ۘPf3МL_`~\ ޏWC>џqA~eN Uk_E.` ͗ՈB;OۊY`T=.902ܮ#IB6TRjf|ɿ[ExMke#p*FR#r69ֳ-̲ZajqO\Ŗ1Ѹ=Z׽>[>M9nQ洽8`旷Ӯr ~100WOi."bi ׫;Lǔ28w֒U)1P 1ON]4:=ݵW30M8 ;Ut>!!&ɻinT0-G8I=X,.6۳ he?.,OW$6d[Ѓ߉q\R q+?pQ, Ձ?^"HV݂_I~ j {p5>Հ"vj@8iaa#^Wd4wg ~Ҵxk8~"TBsnQVv+gR?]:oN1oOtjX1mIZٳyIY8(1 [M&a#3t.m#[Ih;Nw™*h"=V /_aϣ)p\t@wKzǷ5YDdU50[WxZ奾 kQ@4.G`;8qpI DWz1Lp(OG"AjԥI ѽ`}QV0iۖUGYjn=їC824eiX'et~:dxdTQ&;\S^턋hƌ{ -Hp̴x=}0?u BT O־^Zu s~{F{nw($SfRTԌ10ޝ^o7] Z[MCrƆߋNs✉CM~MS+FEH4FݨͅK#Z^CvZ5Yå#N֣+kZW B=TV_C#__ƒ *)R"NY#bxIA9z!)#I9& 6)4Ɓ"?kԑ>d{lK+s܆uTFU iH #i9?cݯH~SYyݺ2 c$iSӚFq~9iq7gc:WtyQğ <^JƦɶdJA)ًa:|iЖ <"5W]W*ņ"`+b>8!wCM<,J WN-ciX4ro6 $qIx'?:riMky{|`/TC9403a*g-3Gv"A.F.LJAƑcr2{RV~uI3qY5Xpj\v`hCf =``#ZZYB[ j4*4R{,_eǹ>M^ 0y6Ѽ^0ą庳\zQI1.YG;Tk-D`k?ӌ9]#|Rv[mn-n]:p3mׯ1,jH$t)hBXt=%/W[Q 2aBDȓߞ}Ν SHiAkد?P5Q͙G?_ Fi5F ď2n;uWw#w}8[yb+8ūKeo Gmtөd:>xֺ^_v6W?q:T*̴Q&F,J^,WY~!њk-,utHE'R*1MƇ?^+#RHv,BݸXW:S>1*Pxx` M(+" h 3SzPe'P"RƣJAL Y7ynZD iQ$+_g6n#j-uHɦ8BzpB"Jviu$RU.T5 ƚ~[y(#[pS)3i /*NxCM8 S/N`.KbD"y=mF?1j}nv[S̝E@䴽)өzm15m>绂 ;lg"꺏ۙ?NuYc68a(^&B @Xq֚||ج6'h."Y&j%cO b_ocɶܘݬ$Ofz_L2~Ɍ6;}ky3dm=xe˩LCF_փd)OxXࡀ nO7Ua`~kњB|#*}B1ZA9 A0\0{FThGg("M@*Gvx@ ׸%;I0P|*Oӆ@dGag:w &3Ճ)A8ECr5s?V#Pe}-TwQG%T.7 4"W4CKcN|ʿq(iwAd'["$ָʈR|Ge0/?@d7a<+`h8_A~ =CRRW5QJ z(pjkUh8 z7+М̝8ȭXtr:EZ;ZEux*zA>E hRJŋk5Ҭu4C7|}5EVr~V/<%AՇ8HREM.TqMyP?W Ua|1,P/{[]^%nh!4`|R&ckϗg^hXȗ&9 l~}Z/&]fWy2x"6[rv&I\p)/6Q&2}%Zj% -{<~.NXheEWD I"]MqJB;&\5VpK26)ԣZ_Xub[$f 5heIVkbw]A}j֚V)áNBk5Of.PgAci妕<@b*p 8 !O7fXZӰՀ?p=U`x))LA0GщRw e_];G F&SцCrJc^iO8.%W6A.w΍M܅0?éO-#Sz9 72Muw<72+k5ΚO䓢ynf|q`a=?{pxrđde\`;x2Ÿ.EbHe#dZ FO=ْ8`j@jݻ-=c?)E;}غt+WqBXgA` _:?yXw c­ZxJFX#5ϪJҌGiAtKWa:T}'CL_ׂIDgIup<߽UOj>V(jp0yv)cސVXOku]jJs-_.%nbwBn'ԂȔ*qU|8qhdh]FTaa\Gq0IVTєLX: )bDt"y1k'v 2*#[mFE'IGNXc&mG?%EHQX?ؚdW;LnX.b@CՂDb8G 79O$[ ʹ㗎gg8u !*,f)JTҕFCxL/nKEShUn~}umK SX9RG UPuTtnAP+ZCF,MHpp_˳/ NstQ>SqUnK 54]Ww:Z'e#㜎qpI':lhocSP)jn⏤z3:! 2 2٠'S QTdՋ*XÆT ^;5}d CvPRiQeQ fݮ<;m4ъER6637;۷ެPڜȲV)ԅow/LbkgGYxMɾM4rF6 ˶\P 4zH?cSs;mwn)L9Ec?4L+ AM){&2#+*5e9 :>n|o7X̼NMq"<'Fk\+,8>X爡LM/7]ʭx :^W>\.]K]n9QgP. Ց^+ʀI=ZI3zߙn#ZNx\9ٯWŌFlVEPOS"Xw]c;Ʃ l^y5?&9kFqDU[ŕ"[vM^+qlNd!?ÕnU(f\n"AcIo0mІōԙ 1ܰ(.V w?˲ys# Ղ`zՊWb7Oc,)5SȐ>@vi4 @W`1r{`qAm鑆ܜ㱤>~ec7yί0v+ YݳiUyZu_ ;"7ϦK_-}oi-/j.p|uC+FBưJÍsU||mdyn<+sۖĔUqFer=̄.z#7#8^eUu:Ƚ;[r#JSEB3eq2Vz41̚x݂f F*vsw_/J= H@1;}W#L1G`0=ÙN.؁K$FdSLMR( uORc1חB& k2VPՀ:AGw\/R>9Lg(Gg۪X2P8 ==nCՊ7r}mŎȀ&0Tđ׮s)vc5-,{wPWGzncLZv P>DhZ3*;5)B_U*D5;Q`ԣGՆL :v0A3O?F"zr `0Uם~2h>#QRoR08V 5>+[ucnyF$ix̓[N牊gec{|v;O,ܶ}\,W5.֏ ϲ΍gaq>`;%Fۯ%j _ wi~,l5_[5fKg6Fi 귍Np8ח^7֘5o۸ykٛn-wԑII]E.]8srӷx0aEʕ~e~"`#;=5:ѠeߋX8[}dIVO&]C,wF!)KVJme,cW(qfg-Z8Ei^= Ģ xyGJ,Ƿ0,-|e6W#9[ͮɷn6M;mX\~[B8ez~ I'))F`UݴgcȫjH?u4. tą&N+424ZLԤQ\}.y\P7T.`S(4%}I^ңAJ} iL!JgSIPiSQSd?N.> CdāPs ~_@1#d:bvȍF)k`1I&Y23UfMdp^o^ho$;6-Z7Dbx ~ H[mǣL=ō k992+tqNluKwG#Rڻ~N21^v ~э@+IDZRܘ-rk-9 焎ۧ ]0':ڰ h4&JT(n =/nlO .aigR(VK?'_NtZzxm >A>~EC+2!'zd-m#^"^ӂگ7 ".fı vpƐ4şzVa{lf,,vgr}YYwѾ-oxco&aD:S*:NDg.Zs嵇;]Mm3Ceu(rfӏG>Izַn͚m+f`j+11>saIdI[ೕ7i(BMJ 1FU髾'>'v&Ap9 "!L(TңOϲa߷٧vy/!{ʎra߷A {XjG,6#v Nci荫%:\r eaB)NX˘} ;m:'#gU S Jd*kՍX\g AҢ䧖? bYRqW1M7B WZ+}q!lM;qn v$ ]Ҭs^Uŕf w,e3nzӺUҤ`equF 5K Z@X ETf;GJ>n+%D?pEQ@x^0ɂ8ÂcVRtFzBkZׅjNF">Նqb~HiFiH+;f3k+9\|fb_,%yA@c\T#fN !.tm K[ْJҌs2/HAv;LG̯4ɱ*ew lbՖNl&"Ixqp'F{=ن.<C^?bXxYb4f`j{0)i?:{fm΍YLkhb-o$ьiYט&&ud46]C<4'@ *YhZVmt4Z[Al%ΝLo~mmb5X,@MZ~aw߉dfJ-65r3{b7MV%!ӹ/r >} h?>GH8ŋ*] OIgnI> [lܠwzO6{$}5zF=GbpxK xlq/B"yE)W.5R$tR Xd#}iRM8 eFZyd?=xˠ6:.42ΗOoRI\sSVcf b(ݑf ԑqߝ_z"`bbWcUfv\v$KNZXG51px'e#,2`[H/:m(!{eo!PY-OHwۜ{ocm/V˫JSW)a4Ƭb\7\^U?[9cڷe;BfjhlF]I]NPmۦmg+GRʢ8ܯ77Rr]|%ϝkMk.UWGФ"騯64.ykw݄[՘vrgdefC3.I;^}Gwpy(i$$KcJT"?׀ezN"(g 'MF{F1b#?c?L,7J;q3})cJj9Od~tb*hOӀ"H KmouF2Dt_LKxV\ȅ( P\"|I$ĕHBΒYJ9mkn.Vj^"1:}SU"le~?7ՍmK|=X\>3 UO_㴳{iɡy[Z4|vI~ tF)ܪ(cpc7}9fqaK9UHexƣ9R gSjj$T2ˆY7d #΀p"\$Zygq$ "he5_qsb_;O.߷ݷ[>` HÁ&G*N,F8`9kr41YΟ?GᗉzlIm6 T,mCⵧqsTĻ6t)q-آ%J0Լ+Qȑm2 %E[G"Sߍ(h?_ ĊN'(> x҇SF0Šw0 4Q03,6exe&HިFzM5zo\l2_alk EI`0_2Dܶ<9Pzߍ }ۼKޖWif=ƒ WS?qsb[ ^n vG Ky/rbEϾmwKr$8PZ/rNU 72"GC Q* ӗQu8KeރWsP ,'7i_Yy6̅ N<,ԱK1˰|٭6o#ZmV7&r $RV #SI6tF/V,q p6n"&6`)gB Ufq1ÖR\KU !_d_֬fut.[y^mWe#KKarY+^"A9*1I˾fvCuWz&yzlWy-7D`qK2.PժD Qv 8(ALdng*{(E" Ӗ5:װLp@ԽeI (H@AEQW 1Ҥ(eJ+žd w,0 `K0s9}b\|ݸp_[m6!qy"XE4ơYP pĭK6?o; v1": <gԮuxcFNo/y'Is&˻2́RAVWLs)\{_3Z$*X{TyZVh(nnL\-a̍m\1xbLD,c@@ ZJ02hD,h1^LKL\p3V.f*kO)!2ؤhnmW=X4%&J^Q-5kӧfㅎC|rc!LVṠ5i@^lMfӞXn=c~iwi/NGm=93zr^y"s˲Jr-vı4(e֫Y$j9گ-s}#LG4K vZ % 2\^[o,yKI}nc717?ld{.#<IK' vͽFi!+oI5"@ܿq]rrƘ +:DawМ@8>)Vma -lcNß5o}*WZɌs~8zRM:vVӊ$ʵn7lo458}`QvuOc5VQ+<8*0SB1ƣZb6+曠5 6s9ƪTfQD9>E\ ^_̉0[?D/؝,o{Muql3,JDYj =9flLr=HN&pMy(,VcnK-VЊS#ba5} qҤxG1ANšea%iE hi9'd9` {8b ₙX+|RSmr}֑]:RW \Xvx5T|[dq=G),Ju`r#M4:˲[2Bɐx b_&:ͿpOn((E]Gw<0O2yj('AScq-5pʾan G3*ƆF rOyoq]s IqcZ<+o_#=v6Ѹ2\@ q\??4N,nbSF"{G~%d>_yr~-GmErݹϴ L244ti:p7[K\?q5Vݍ 2' 5 GWHC0iW&I'xgXIgm񬩒\s'u?"{fCi=B!`Y$Q ϊ,]kcVn(B9n%?+vFqn2~g7{<*5zHa9!8w[լGe{+˻u #K# 4֔Vj-N]X¬-.;rq0Rt1}R)~imܧkD& hZ A궩|$$z褜( X(HCfU}"H XÈr d{~Y]Gso!IS*5Xtݳ&FZPF1)8q:@3Fk5dV1dSq4if~ME{0 A:Mo6_^PKC( m9,ksigю{Sw$,333;1$8~iO…WL ynvrAu bQ߈4=~'16s) W19wqi6hYcJLbiHe5 {*F8`i~[)>uEr)lcx^@q|c g n29*;rl-aTcIb`+^" SxDPI ϫL*F}(=C]=}8];p } !V2m.n3k9s rc*uD/ s!s9LN,q zepĦ+dCH7=SuN3}΢?#~\Eyve_UrZ]ZJJ ,nolgR_@ѡĐkJc7mR,aM5ݤCQ:[ ڲ[*Չ0~# ՜'CO+^1;t9n@c_W_s mivti_Q-$i"_T6y`Wmx֨MthGʻK;)23ɤ9\E0 E=:T1VM4 T2dq,!=KKکR8 +L}UoEu,➑FT$ V†P^ ]&reSJчcg(/e#ΟnVp]׷wsqg$0*DO=4Tc̺%R"y)J]UnC~kTCĚ5,XYV+;/5wYOmQ&;#ufE=cG)ɓYq,2I{{Jk[<ь#y;y]ɛrMuzTaP8'[u=;m)ye&ns=%o7h^³l0K.Q#JIIץk,)ͻ^d,PmETylS\76r4{ӆOIο^n4xWpFXEG8 EklFbN"`06T']:j?Ps(xgm}pT Rks2ߚ-vtX8dEJ1_UAyxM?Y-ZgRLV_ = x٢|U *rU)b͈+-6=fzI(2+ًFR]$5LxcY.[kV[r! =sµӌg&nβXՈ$dv}8=7pu><1fm9p5!G}t a<_RLMk2'Rw |fKi3-"җQu"it,qYLj]Z P|8*J}}Xnazv1m 鼴IDљUÝ5#Oۦwt{jݠk&4n5),5$!@{. ,ϣP"lW1(hBs0!U51C֙\E#c$#MNyJӗv_v"?a}ة. eWD=bL4AM76RSOK5cQ<9*PSntȠEDhKޏ?> zlD i$RT 48 ʀge~4V*"^֧`ƢW4p W^S>yl~RZB~jgjqp%̑eRm9B02t_A\N}awdFLn$\JC%Ď_O{q9mhhb*C${Ağ^_<΃޷ALYsk:tf݉V,k№?< A1-˚HHYv} j\ Y\~g,|[p aT<-~?KGP7?4ymmzm`gJpͨJ5#.8NKֵ::t͢ɍH[g07+)cl'Weǖv(eKD)<b JsPF]1M?Հ|]v~Q$)DǻI{(G2WGA:n^5o+ 6Dߡ0l쳷ZI^8d_I#*p!dVpdQsWח]B(+_\g$>[٧ki{ YzrIMVBlw~\JfASW;}#c|{yOq5 'J8@Nps76)/)_*vmu: EPQN3ˤwPBI>OMTOӉV%(`#njw['IQ^*92lL`0[Chgo7Z)樒W)9#k7 ^2[4q4v T`~^oècs=Y1ߵ*nZKy ::e,mlHO ǫg7J递 rH䦎~~u^_͌n7 |lFɚ%)LhJꐏgӎjU7K9n Y)XԄrABhrc;k75'X. ]\*N>'qK$@<4U,hfX1838.7㉧HEi+'V\mMeFR"n1nZRx,:u Vsa%P3[#W][G*[4l"!u "\Z;Ao\v/qr]OǽK4$vjv"p]=¯IQkg30E#bX`ʧyMGJ`MN"?.k}Jm*F)iv"Z |n]W1)*b8ճl5H\VY-B !haϞlUtуTV۳ׄ\>k`AE}Xuo;4wanTvEeehFY`nrpޠ~ᐟQ7  RaHĢpνaYOIµms+U.9[HRiqk-,:$u` W}'?fOcW@Z$џ r4]taF-qDnx)w5ց.!A+ʹvw`k_=G)ҰmZ+Y(*{Xsn=Rpn"TAo+KQocr,k>Xsw2I4XS4N\gnwNHJA#W׎}b74mw)a'IӰPI9p+R ]w͗J2#UM1[T%$ߺt"@MDMՕjQC6{}t֖1k)k_Lo)ѵvk E _WR]Ks *seG][^Y+V!_t05:)qi1N0j--#-$I{Qk);k0ĴP}XҤYO*KW 5c>R7+"LWkDA&G$D)RĩhqLm5F粴mMs)TXšMKJڽ8')ի4vRu@g+@e%_n ޿$Rӊ#:״Wgy:orkmO@$FBTc\̊3_ 9;xOQW-G? >/_轰9;#k+[S!1*U m[ԕ,|C-NP;((D'  kV\0d(x꯯?рnrЖE 4HYCͪqFx/)J pOh?Mq 87 _kw|ZF3o15][U-fzdڍ>Awbsg(?Hu|`K_v&z+hm~ h0{GՀxSZqvN5c`nحāB}#~iJȫ\3tRڰ¤ӷ95/^C鉒 V&*=J#Q_n\D >LՊkW|HVw[b)kM֜z*S*Xk$cQZ ǯa4V |괚'ha|Aw!Q#3YsQ߉dob TcCw+S튗[ܯ"๘S ܦvqՌ=LK\7ՊO+|LEϱ\Z'۠'Sa>mvѓHO4e9fy8`~3|Vruv)WڞW.V^lookqlleKr4ΙksX}>wdƃ2r E~HXݼl PW֓ISтûoL[r|5y,bۭ;YNs7SFU7Wq!m42HrGRl;6ڬ7vH B4a[8-,f9EDT#v3úRW#>ۆqּquU7ڠ /U,|E˗>MvN~xPg%7{x$lG6IL|H30<[n9: ĤK#ׂc˄\yݬPoo&Y"xW2:Hij(3=pƋQ9;0mfki#)j$g -ۮ6;{yb`4Q-OF9X2mv%K,ZY5ɮF*[3ycSz(6m J 玖9#ᡞGMqҴgO1JffXزRErĭʑkhĺR}+g{yr-Zl%$hXSq,oK׫BqÞeLX[%ô ҹ%SS6UfgOҺrVESNh$F\~b4`0/E#Aـ>uo0%eD(w0Ţk< uEU ,ih/S1p.p .i+~,2AbѦ^?lWz?˾/_譯sȟqW2;xJ\J=)-ySdf*dgH# C~` E}GX>a>Հq~0\zJ28jV$UJC[݌^p/V:uu¦PR(Sc& 4RdHIps֟=7ۏ1˿s0'pt%kM@08 0x ً3ͫOHDߧsη&atЧkki905ķrI rQQ3,\$f~/&ԴʚxO~PZZ+\r+)*_g[+1m:Y;>\ծ[BWKSkW`u߫@2OM+f ۂJe@3@>b3:I Rɷu$FHgE)Lo$o& q6OI#vGFȉ9(hf}G*;n-36PBdژ8ln a6t9 jhf5ʀ/ Z*pHM)S#I1ZW18စOъdACU"G mMOBt?u+;ӳB$gZ~9:Q}ŵ yjһuȬm[xͣ8eM>ʌ}ap-la VI<2J[Ƿ4 ]c`(]W$,~5ڹs gff%gf5%IJlE.&$yR4^gv'{ƚ¨P0SC .çoM|4#Y[J(c5o.y+4[2jXοN:"4/$nJ1jvh6uGRfL1 @TH;)' p%U:CIZ40~^Y_e1m}yr!8yLQ"-*xj //êK6 %`Zmǖ.&Y~rU?ő1re2UUQ\aMT PVY9Rۺ788yoo݂-.:JgR0'Չn+<÷>b(KIW:Η 9sN,ѽcܓC'HaFFw{8j.:D$mb8Ι5us1XُK`]$u * ia&;9M&Ae}X6v&#d5ꏑwoޓC-յ۴|DF65j.' F1AS)Lxش39_k)ܭB~E 1b49gہWa 39xDk#󞖠˿{z.d~Ȉx$`K{bέWt\Џ"X^~ ~SsDO*0 p}SB:+K͗է"v=$}-%< G cq0s8Oz&PVULZ9Ÿ~XYh v8V4yRQn)QvLr"{qX xHe`hsR3 3I=ޒ7i$v~XfWB֫^|GĤ]4 x\]?lA۳Ӎys\vQX*P-Wk g;;WO$Fe8Oowƪp@1r{Jі {}7K ?wbjASw^3o+ҰӖBI΀%a6"$f)~PcUh3 :F_F*~ E<}8W1Zw&AR>bK[~Ĩr}k+<CF+mB@8 IZ6Yr Z}x+myKM Mk@?^7]&kEJ UT-T:: \L% Ju;Yۙ_g!ga_yg77\Vio{? - o?>`fy+t^Q}bRF@Ս.vp76n[D7s3U^ftX&r4wFsZox1q{.yp|62][_ k#Z t 2G ]2eS4iNmHVv5:=Bڱ&Ҙk9i6" [?Ո\]? ?N(M~QG0 2 @r+"bD>)o1Ȼmë#i<+Jq<)=I8^M06Vf? jUΙ._F.- Rf{yAUL(TTjv9熢TU=8cZ >5Xs[mW(kcrtu|ݯPV>ưcYI'2O}qZ?#R7{ 8N[u?s_ NkH;b%N ޔ90sSV GSH 'Ol{90@Ѓ?Fu#j=d`Q8\ m(Aj{a`(J Yw[pS#^'tIm|:9Ԣh70^[$Zm0*iuiEOahjsa&OSid,&nŞOtÜ$~RE#R6FLcO2 .گuߖ;L{+9# T00/Ÿ8< #$u])6KnnQƸ!c EB (*B2j+xx{S#vYѾGs)rٱ/XԼWw݈}%*b2|4'P,ѡnR:GLӀ=(4`jxF>z^TLӂTGR/ڬ?wW݈Qԭ_Gf gW`ZZz8⢧ G(RR Q +O7S@$MW&ښ_&,E6yO*Bg~Q_߇'@17mz-6zddbtp+Vl^זb0-w{Ņd sD3K3Tҩnߌ%K5I+Pr Bf LE??jĻ,k2kۗbⳗ w%2*rQTcR4㊭=wo*2" "#Xs+=zV ˁmS1Ħk\HZyv"UI牦:wbmZlvœ!9Pј 62dك)Re2gpC18}xajì݌4BGizN) 3 9G! +o+u)ṡ`͉H\.ZO~k,Ib5"̴E}Y`蹿aXNXQ?Ltg6}ȼ|e@x~bv0Ymhѝ*,5L2spmd\e#M~ӆ8YәTmZQ\+\.E"E}WP ZpG(Μ8`.`>>+zqCEed{+ FaT#81ygl#UŴ 9mtNۭ=n,-$^)К|dg|_<,t]NrrGpg 'X U.?OU*?!gN5,*T=ߍD-GBP⃨P`*8g`!64oH @Gf;be{({0zft_ yG+̕GQ-JTB e6_f3qW pPnSlqgtƧO~`cgK6e+LvOQigwQs2(1`(Wec鈢F2\_÷(xcܵ2KR+}ߵ]]'4_|"q* ܇PFFۈ,n^]7qgb.A݀?&7wh +x7k_eLP\)dh:N.TZ GQ裏 YӎG,R!W`.-?Ow-:'Lv)fe8Co`Jϯ.mT444i?dcQpᑧ`du~*?1LTSqU4>퇨@ٯN"ua?F.P5WvPv"/xTdbb$#ڷ~󶄜Ax-*HWY+UE)jaZ|yrʐ dr}(G3SadtK f]hCI#{R7S.T-4`$]Cp"OƧ/&b3LD QQOΟ2-vdk\@rp*7rHdI?^6Hn(eXYd`ƀ31U2I[ʛf|;;'HN 'q({_4xd ;hjђIr}W M(IƾD”*(H>z3),a/"693& 8sXo<Ԑbxښꙅ73 \-0QD%R& t'6.G)miedzn2XԞÛ;嘒js$N6`5S݀ *{N&RUFMƝ*bZ#6ieu j>eaz@F&JSx+ P`36YZfHr-"18brn(afNSg.*쀎Й{27OnzRdBhAt^&F1voz$Fʡ}ը ds9~9$g^GA/ZZG)VA?:jkSRs˼q f="?gBPg>yJ˧ (=5K31)cd[/]lqKt-mcI`1եߺ㶾9gfm(|#\h>]}8w` XLib!%F8[QZi 0rv V`svr{|A2ĬD`>`ˡ|ī>"jWwb)v0]Ht6I?_GVO3U=(T ӈaa KۗՈ̴ k/+-l @`ynؗngQtp7bS,ck7eP3>\whmb|J1,¾o{}v(ayY[v6I)/n '0LI 4ӶPYj*i^>J9>fbmac 4WSoȽ\ݝۍKvv[K(Frth8rD7>j@EC[P@_OI , |7J.QTZQ{%*׉dS35!v)ܮ.̢kETwnX_mͥq..ݰ.Rs$W/BGY};Dh} {[M XY 5B.3ƼY/mlaFXhb̨j3$8"F-IZN4 nN〖# ˷~(@;+\ٳ]ύ e 9dlrYPe&ss $eI_FX0 W9WSx%P ->ʓ7R %4g^gj x@HJC$EQXEɸBP Oj)/$-<"iVJ.Yxq:9ƧDx?Fcj 9U9ZTe{"h jeZzF[(Zס0~n|b ߨӈT**RU@p7x\mW٦T3YٍC}^|4irazSl[z׻,^!SF'oZAo>YJJh?ۃ8(ȀUJЊփP#*Hk2Pzp}DӋuՀ52N ;zM߀- AĊ VxjS<'_V&gAnǞ8Wݡ$ DF#*, KSTZrEBCH H?G!GP 0`/l)[&Z}iy%#^[b[ؿKCx"H,m}Y`<ӍFi R=G+vV*Y]"G/7pkB^H`UI-DL)G3@.)`5Tg/.ǥ,$? DŃ۞,mL礞LFt9kmj`}4&+v@*)ZW*CC.2\u!겱x yǫzHP(?6ĵ3y|OvjiHȄ;+^R[ aX+-+ė~,ڣ<V==ɍHc4<{AeԖֺ ZNrGyov/Eyf.8?1?5LLT|M,O3W3ᖚHZ"đ-3,@ͫ+lڮ7[ȰXG%ÂT(?.a|)#"bwz&2m[~b_kDEY`j\Lʫ}'/NJFf!zq.O=`xb-BĊRduTݿS~-8ԇ,]ʸusM*5XQN R֠ 92x59{OP ^ 6"?_v$\#{QBssp i50TV2`XY#fCn%,`iȒ *k)kYq` Gt6YTHOхJ/ɦʦhh*2?RFH"}$MkpS÷>d8 ( ?S4 o6);Zid5di̜݃/5K4L,$O׌/ClTJξ퍢m3HbQՏ|.ߗ?en;8]<]^)=̜r0s_/'"v ;jwTf,-Xj+NLV֟``zcg @T5M,QVhSP® Ίkۤ+B`wd8Va`y *ip_s/ޢI+5S!IFoXG}8uO{xͰkS&cFgfZ+CpZJu䐡;9<^!v%XRv qޭutu.<7z%*?/Nԧt!=jxy}zsgjtuϐZE{jIiQ:'=~+qϳ;f<0̞5I)ZpF [%&s#p cRNŨ@^U;%^# #YF&SiK Odf2T݊L/ۙnX|$|5Ynyc1z7J?!'ۭȬ`T.h*5z,3O4iAs.ܹzO=g`Օx @O/OP8*`+N*BpߑqџA&$# JmLj=H/ =oGpvn(nhiCO&6UciUi ˭q!Ӱ4p=s;{x@KpSko[IV'QdRWN@,-8iΕ6b4_gƤ0YYky 022tnZ/n~`ê9Z;`,nC\ȼ,z|s7s;aiqȆεz0Oᯨ}C  ?Bɱ4l7wrg8f5I׍vS:ǠcJV%v@Nt$ap9aPFpRO >z"B|م*2c;uxH v \ 1auuhY=Ur1=3jV*r>',P/^#q@:`ۂ[NvX:JAы~_``DAZp9`kJO׈@(ǘW#÷ʼn^n|֐n)Yg%ZPj?x2g}A#1gL䖅&:Rj%qDƢ3D F&jcѮjZfIľcp,|mswt{ Hrj$<ʟ_͌ݕ"eiS]XW-F^A~Ĝ˒õk 5@iHiZ+2wg*:K}?2Onh".i"Ks¼7"i֑k;{zZ+5;u+R[DM Tˉ-q*Dw1$eĐ$r Pc"n*7ڍ4.K4SIQe[{"d#SJJr@ho./$@7v T2ܧZvv<jŧG!wx Iƣ@xz:H)Hf*%"v`H˩fi2BG b;%)ALJ ",_EN+D'׀@1bF"AJq#b@$?V%6{+"$<>lg"0񪢲Hi+JA8嬔D@X!+́"TjHG׉H]e 58}͜D9aϐS3+  n|sbN])t b:\cZ5U=E0f;2ZW/׀ R>S +/: 0hx 1v[𢟩cH9^ I ƙ n "I4iO:ukɊOe$v%s~k:qqANJ'LoTRH4puqJ #]<VTA$fp eP2c@4)1)`>8i`v ߯E+~@}1*x=#?{:mvSZ;5[۝Яj/ŕ SLuRΞLa.P,>?3v9kK$mCd.ݘ8Ow Qo:INE>e``<;[7'EԔr8NOE =M6Ms4ኰaO+XG4;Ġ8L *&UwT|-x ᑰl5r [t]ϯ݌Jif;U ZLj3R"g JS*b,Wf?Aߊ׺N޼彈Dwoih u&*ON&Al~h{fOM$#T:X IW <1ҠW 85DnW(sv_a­o5̮/f`HUHGΚObjE4Q/)PueL)2TPH}qeeEynړL>cʠf:ysű|p.p(ҊѼiof̣4Pt4srɊt텔nV抱'SwF\L 3jPK'B1ҸivM[F5i<ҕ 2/K𳱷};;Z@Qʯ+Š_5|z{xq$jݙZĮcywy}s%ܭ4+N_wYUyW"ۉjQEՉ€a.81UPGnxeM3\n*Z 0@}Xv@VCT|=` H+ol_{q0aNVs?4wsm۶{}eIm'iH%CE! xs-QX\^RT觍*i_M1mkj\%ݞl8Ӊ~!CՋ-{K}. 0ʒ4C5)ƍ[U %R8Ć t&뾢3#)#џR-h_n #IOnjiy{>sK"%8sQBʆ:=&ӁV98dO JJb4[.+Hɧ<]zK_ O?󱵐fvf5k7J§Ӈ3н|7KO1]<_K%2 VU[k&ۂ( .Di^`\8ΦP4}?2"~{Y&uzb,k٨W@qEvMc:w[e*Sb,qƮi$24yyKmm$TF[#L܌[.s{$>9aj7F·CJ(:b_N9lԈ>tݯo2mI:dFb279i*tu-b6͔9P 4άC64]İ[DOZ:T׻T)KFɳZwp w W=(Lq(͉#ڠ{_\7&ee`ַ*`G: Fkd0+݋lKHbS ŕ p1UwL̖R)]x$zi)QNX܈è4OQӂU;FqTшRe&iܣ"PY~k f{qW V0  B׀uWQĢk.oHPq4oms4J#En׸|O)ykiڰV"!J)s;ydiRLBG A3 ü_yb)O^-l{j5wa6pAEʏ$UJDI 1g921)VӁ PAӖ Z*H$k nW@3z7`nH(:{ȡmnݘ1]UK/qա]xI!OՁzx2Ԝ.+ݎ>L{' a^$d{~ro|#>ꥅ@ubwB <[mV| =*kFAeY[e6Œ*T)9\\<9\YkJ9Trάfy6(z5fW#U(5^'S%JJ:AeY­GjgXU@kL;):Swg }^iPf8ц ߂LV ShVIСH PwPS?F& ?<bQdƒI ktcxc65ӬnX還r1uIDU=ݫn" av H ֪WfK_͎?[ս ԝ)n.4E_.:ݸ&?GǸctGʺITk!Kg3bkyw^r)Ɯ{ψp8c?~F`[m#Grl[b>jߗsrB4hb--/06ԊF:mJxTʸ,.WIj;G 0qJP$}0aEԖ?rgZR$EחcSc!T5F*hSQӋ* 0槈}U8!<Q~X]rUfNk+׌Dso h痮 n!<WD5vlMޗC@e<1n$~821ɼ*fW|un[@G)N>Xu7I-y2r3 Bjr]L7eSW[H]{~LQrUZeG2_ [K&kFGlƒNǢl{ 6J4o/.˅RYzjEyXt=,6%¨|7J2k[x㷒r fԑ'Ky#&,aO) (ըsq]EÄXm>\ymFmGV8K`y!8VavY25m[~ko2[ژ$rGoy$3ܒzyaS1gBjJIp\y߷j5  1ƤDkؿ0n@FG݌1pMeQق2X!SN9q)y297$Vb,%qZ>j onΜ0S}xi犃 L &}=)wmmvv:V+8diTG.k)rɟRO1yo]j,4ȕI8?snv]jrܙꯥX8ܪ?"U监(nׄS,PON d AQ?֗NTM54!n:Oߣ=W`̟5ccm TQ A"?f y;xAWo}x ]RF -epq * Pf)]bWg|{qŕW;-8Jrn6xQMP4ʫͫ9'=r3@9J?dٛptgEsqŮK!N3oVhS6)8|iqNXU=~>P9p˾ a ˷ xdq_O_*+r݈yŠT#SAo+U+-l :e"F79u U' Q^Tkd{ϵsZ6+}ke,44D@js1s"s;on0gEKuyoA-<ұOӥuI>Xy:^۬W.v"5e%hqS>$j~O ǩȅ;EZ9,*QsPz;Ngk|\XnG$KiN8[;+YJ=]ˮĕ LG蠕u!^i9F3G.Ch;G_}qt?s#z6XW-ZcQGhJwiUU1&FE7ALhiN1`?cu`N#4'R  8B~M;',0+^g%pxuLh0 uԌ?U=5<ŽQL6O`Ds=Z'I@$jjrlp9ߔڱ< T{/O2GlI896_CeV*ʟsʞJZONY /[}kZgL?N }Ucd4x ?y=9'B [xF+`ѩ:Sxo/:q϶[Oγ .G'[)Q`t?q/$nldf6WKldM\55|8ȳ~/BJE@ңӕ0"/2 g\CM?/?=1}IppNFf>\%DVbɥj 2$ҋL\5ui@q*㗧 FZ~ٔD~6m{r+[kG,Yj?4n#Zתhm|(+ p"#U@Kr  GV"x1X`)iLT.0\sjp2I=rk8Ϗ6 ߓl-u#Iu ԌCIrVfeҟ}p=vgd;I9%fnhI^V͹ubYuvMr[+xv} f)ubiTN8*~ <ӊI!@ ²"bItەY%YTk@(FEoѱJY\G(jxg  n'_F^؊K0k-7 wWst3ͥJppD@*6%[cv4v9*iTEUg\gU"RyKTKecSa )Fٟ4V'Ο3>%%v 9UU+UzqԓMRHzy5P.F_, j`ZS,IȞ8N(Tò B;rQMiµ,kQO@ѳ' gǿ5/u\ qtmi.E&MGW+ҟ+]yXwt~^IiH9nS?r zbJP*T o#Jf~f)A\` S#݀jWM#S?8WC A7H)$Q+SA? eZ˓+;rK)>wr-%9ENu# 񸊞 $a_.@yI@9ai2楳ӤdC XamբoROf#m\phɻ? 8ӫQ([%;ص/M-,JUp0| >hy)r@[X<6jeRj9j2̤|` I8e@E5xWbVN*XЩ߉F:tҵ8\6 I"+![2*k4y!\kc t'w'T|;M;{F zf SSp=)a]N ph0M2h8iިo-Aه5nܽݳjq@ifDڳƠzGߍ-:w+&7VW=oi}:zzڛ,?kgwP&^EŅ9M?@CLїC~G(ߌ_ՄF_j׈ U}_ׁ>X ?v |VohR3$mLXyRo\H4hwaJUXhO  qZhթK+9j70aWʻ7zf@uxt.kJ~>6<;A>sBEg*Z-]C]N6'}ɛoMn(V/uǿUjj+\dV?^;RXSgmh V1^AN[Z-Ǘwu׆$+bJ5G\ ҝvb!hM3{kC.?~ÃQGF`XV|h8aN.*DMV9eΟ>'~014|͇f^^}.x4Ixh4j<1-FQ%寛;w+w4>۱U piG<ҘYb\ԛ\KK .9UI(縘DLR?hm+MʤEkV+,3V̳v&ظ|² it :1X5k-Ogc:3`%/͢59QʿqѶc 5m4V͉_¸f_XmaG< U*YNY1|3-oQch~f'F[O0)JV pͱu*znC톆:QeV#7X[Jm>5T@̌2'w8YmVBIIB6Z+"7ReS&Ҩ ߗÕoc7?=YEi99Fvƌ+-jT%XP#H5SAL*$j^#%HʋBj¿ /6n9n ~"@–r]U+~v\KWi>a[Y",7+ajHFF"~Ņ˚[]gA!\(X0:f)Jġ+ Gq#&Me9ɓok"Q3mb'=>S)۱aiKVFgWilI:&U*]5im:mK*a3s61ۂ"uu;;+5Xj9pk/A}#RTW*~H*Nd @ _V(<)OA ʓDsGU#jlϛ;V27֎HɖTIR۠Ȩ"[c=e5FYǪ3@igJuxQΣ L6 2IC@jOu>k{Z'>zu^N IdG+Z}<\m(depePaRKU s\Njo~iTvsT<˨V8Ŀ?j$ X꣣1MN~Ed0AF߀`vS.quM `1wi=Uڧ[}.+i= 1"d`Z3bvb}<&nL9 KҰQcaǻL}~[x$/ ֦NX ?حjcRXme}bBƵ>RDW霽N<D!h8W0F W,ՀK7y;xaߣm;7Eg!P\inO6##Ƿì|iUmw[ "Uze;y\lp Y5 +scRqSǷCeq\0S^#y̾tF۱ډJGimPZ[DcTihcN.vݽwO.|59ioB:7ƺpK̝dڒHؾnYfXٞ%թ3scEaBi=.vK{[UiР6l5ɦIa!*ʑ(adb܌6`?zaw#䍮M=K;cVW;?66G>X1{Lo  ]w/bvC{-kYmKK9eUv.OPge]u OU;m{8e5?N_r0Af=(8):6,1ۢ܌H@8GTaJGaKqM;9EV8qKxfW%كz3Q7`*z~?4G|Q ځNږ\s~\RR /2Ҽj=8B^р&GJ' Vw" "MF*22A>A05Jz3FvSҸΝ#njژgLeXYdh~sߢ[K3PNA؄"IǓoNeWy^?CGӑ!#j ɩSN׫YioٌSgcmb5`0+ejf7}vwC3\{& A.јPrrR$۪YbnYjv0L Ṓ%fTr4`)t?5*@crݖ 6Ssf2O ,ZsclbvM%Wc<1tLqo-̖w֗QӧJ%B baHvޡ:ʁZ6Uc݋FjrbC@ ㊙Sy|>]n$}Y}Vq+qi˱WmZw?2aw9S {x%%`g$:"Qstז,]ĻNh6ACNtQ??yonvvͷ; b8RFTH7tث]l&8<10O8%،iPN_K_t"S4ͫ¦j3 8kV5wSV=f: "Q莿ߗ 2bϛɶlVkk %ݎ@g8ߢ[}m-pQ(GDhUl񬲲nlɡG[K9WT??0e\O,8&4fG,j M!y|+y59$$I9t ZS*KQgf@44NL{2 bZNT|{1-eDb͗=`qysڶʈneYEɮFg/PϩĖf5$$Ӏ*ϣ8(X(̓م^J ORmmdYocz:Nu<íy߶V>߶ZE%NiMbWBjZIXxTiptn[-}`"X-kf]0of8$9 !vx$쎪Ժ<8ϕ;13lw I7I[I5PF ]E1oarN|)mel嵰a Ma$,ۛV= p| ށ) Q^+7ip0yz1HQI,M{ 0Ak;5p{9Ln?t[,_čև,)^`dppE`?H`QC}ct`Qv]u2M^y=E)I R}4#P8PZ3OĈUŨMhk\E(>?NX?^ co;uX``#ƟO1RhNUEũ_፹#j`r@{ğ@m{WcLZ*a .aZEI>m&H5Ԅ đ%t~i5ޅ;g?i8cn]44HĨt^iPUhj22ᄼ pX \s=&qmZzIJWWRfDJ\ŀ݀e?NsdWA\J8JׁGO L߅|)ƃ+WۥcLTut&yz i`A..L&6 5Nyw4vY$[2Ԃt.ֵɦ6vu S#з+-4>|-[8s3[ۙQ d "]EE)ZoMqZ~Tʴtq#*?F#K -;N%!J}(e Tp6hv];+-ѻ;KⷹgssA0Oj<>wB?D7;B*g4,͞}6ˌY_qo1o,|wanµi"4 Idy_e8P8!dM4WR5ƜOy.qzq[HV ?̣mIVmV& 2t"mQεj k(`.t+Zefʳ_߷7.gż ،6Mq>\o#[˽fQunG#CъG. DE\0hXeM^< Oы5A\VV\qYD;$ij}o/ u[uOS/YJf7U$/<dh)E2PcX+&WזXq w}!\L P( j$P}g@7hBz?Xd|W'l@yWxd*Ӎ?^x0uy/iCʹ5=LgiNLSL5%c 5~K~ a*GRf8p6"p"UZ{1}ڲEkCnR_vdv? CvT!eSQuq:PPP#p"4Tf"Ý(S0 +ВE@%q:̗;. aT=.׵i 59LԳ @!p\<"1ICJԭ@"Qc]cwOovvCA,ypX[Br9̖t%%7m22@_LQ/ G*>ysS.E@"eH(jd~hKWwܳBPt˥X}3 D*eaU->bT[E5Ų2Hj֦P4͆'vۗGN4-zN42c;I3qַ$$@HVPr(rƳ$7VWD}^^`gۡ8Ik,hַʷ5$kqir-E7 ehu$ ݖ2o7u[X[ث1HT#fsQcl-R;b"5)z,O&،5/|q$qۭ[-i9!PVF=j˩O<>^3.m&jvVT[M(5Gb4I8/*{ϟ~[Ikܺ Ҫ:Ղ9FˣCc:ʶן>&k;4 I_0.;!sAJ3o]xw9דSORg258ҭن D5ӂG Wl04ˆ6A *W8 \rxVKP$cS;R8L:?`XΛ,[#7~_WtHbMec})[/C|]ʻDz[{ PtK;9vv84o/7{ѲEƩ-6מ`P(V T?[f7m/=^\O{y###6eGؖo8j<ʄl=8z9Ν3S?H$vS9miD@4Ps.F BVKiKgņ0$^nd"B-8$cX""ג壴s`"]ykwXc 8Ў̚n2~k!QVˀըi˿ 9yb[?-m7Mi`?ÞԓG[|Q763tVz5/5I=}mjg bx[5~|s͝FލRA`vxk =~ъxS&L:xE2ѫAُQW8[}p* Z -xSO UzAaZW>G*ud}bPοq?N&"†=a nć?[ _Dsq9-/Z9.:`iht%Mຏ'Fjn)#;VC [|W_YnR~ѽ 2F-dDkCQoEɭ8rj 4`+٦kb=9v``5yXqPǸȋ VzGY}iLV/,P5eA־˓QK\(݄E/4m`?\JV6Ptщ+Bu* z8mODw8:}+3(4jZY)ӈjUxLYIw&$yg'iO 3Л`4Aӯ81ԾZEPW8k=WMGm>b^*~/sk:@ kT P{11G ĀPf@*RƤ3;0mVJK2p+DάL$@֩ Hnj{\VGdDaPa<=,?Yc%VKՊ3NJt/>tKlVX r 'MKԘᾍMkgZn(}+xcܠ똤ӥzBydF%8QhxoD0ZZZ˫4",Z=Px5 RN,w8Jc:jpGQhWU,kQ~w-ϗ|t^0Bpo ̶tԴo ~VRIˎyb ȵ%E\R8@Y?jDK V\=WфL&8`Bǝ۝deY$,@HMr_ sFۃHT4Zs1)"3vUTfMV>`ؠӹnvٖ3hB{ksvVWIET)Qq4!x5VJO.K5__5n?/yqkU]ݛ -ɢEW߯,4,X0 eh*I j =䆩q5'Թ,(V&{{T4( @m@w$2Qx\>%k\zЯjr8@4?o3/O۩(=8"~xlg</C_DcjA0&÷/K.BP/P!,\ɵUۣ!x9zrcܸJ֟={cCD{ םPwv2F5:Pd )L!"x[ 9`?29T $ 7OsF# M ~ִ|jQLU?B* :o80ɀԾ-^ 7y:\~i azPQ#;s[(p1'4GMxa@ATa BmpR'*v8L:۝ݮ$XZ#RTa.>68.N՗Km6[>&]X"ũF.dq q Uc.pˍ~.=c|qNngN='R~t|^_cHn' _8zP`nXUܲ_09EGcw)$Ka Yl4&͛~gLʤu.T>^86azU{`d`=*iq%55W80OY ,x9^ӍAK_^j,uc ah65!B ٘"ƦXs HDV劋EˆGYZ&Ʀ1;VEU1cF22BE1)տFS0aC[ޭ&Y#`ućG1vUUX͎;oNu -Ih6ci$r3 rV_ jivܠF [8(bq €Zicc1:-MaRIj{YO* qտwD0-]cm;]ۋ'2D([/S=I˺ۄ?,y{ -l oq"Z Q 4TD*g0_7Z;ҷow2@>61>Y⩣A=(OӀh)VWU`8֕ZА V6+4:"#,k-y]ȩ˰ =r WDH40L;j|\-[]pIY!háͧ}1ʅ h}L g, 8ʔȟ^#YA(FYeNA*}Yb?ޢ÷iIDi 4a EleԒ'-4)9$\$.a(\^hԼ{46e^YH1/s%j\1} S`eʛ{qA1ꨠێ>]rmqԒ}'ǢG0֗j- [jژt$EYK;'*Ϩ->T㋩S1Z .]rAJI9Pzp 0JbF3$Мc +ۑ၂?Mvx0!d  H:〯 F䥵pcV ZvVw<[o_Q_Ν5MleQ!Q@!ۋ8]r arHA ZZq;[^n;s,[Y", Xymzf"c[C[R $hQ ^\Mg/68t{tg͈$n5<];Fu:SJG>umq^ιT 'Q2_IpP02y"JF wp뵷`[?bk/q+;sep ɦu'-A%FBe0lO2^$VRyAJrŪm%F\WCNEr$Q:<*}\+\I])Hԑn_}':V tҼuR @ j%m(=`fÉ#r:YTBj kC廩d\jW>',ڻ!DkRAHɪ8П|8ޱmM3E$e+MōUYGȮdCc;zgn Ϻ̻ 8-a]%ib믘km;5&itv{}৓iȬms5@Jmyb:,XOI+8duX:DP28wQH(tjW1 |SIM(}+vϼ\E~(`~Pd(}#+b9̃׈{6YDF BV&-Ӥgyf&Y4j}> [jt2\-S,$y}_T*U !轧;ItCv))$~u=÷W {5^ UX5=kJTv{K~ˈb|b[0+r^"5\_wuc\$>aXp5iB= cY:T1R9 ׍ڸY=$KYʗ1 ) \g.&.qo,7Ie8Jӂ:[ºi[Zc60|.5t.H9g,X~Fo9"QA^FC0){$bkrq~KCS;sIpJ"p4ࡀ 4~[[mK0RKQuԍ?;a&RG|˼aޮw-ĻkĽB#_hR fBNeLv !,ˍzeċjUԯ x8` džhOOg£ʤ7QH 3zzC4aE$zu'T*+.2u̵ P@N;ûํ-cdzq`Yw TnH'3,]o#EؒpU *p ;qUf+ȐBG1a6;YDGjF"fpÉʼѩ50ihHgF6&zF}xEDt[ɮ2=4!:yFO]x4I9 .NJ;7F-6Xy Ɔ;t-4K0dBŎ{rvw{-Y pb HxfEgN.tP]m Q4ײHƻϽ|E R2n'\kYah%R#Y Qk-qu&B M!jR:.8޲ിrWEwhH&:fHyJ"budedluipd!Jicdh[NaFc:g BЂ(;iO^Gc+kJ}~,Ap;i2iO컰>e5"*͓1@qbWpU`0G9pXʚ`hI ™x `)Mmqe \o.U:I?V .+[kp1y/W>]s*e@RE%Hn[\yrŧYeCdvcQ=:!@=ibTQ5:W sCOJъᧇzՈ(1AinXoHi_ iE4!.U"ʸbՀP̂Efg}q+;txQuԓ4&N1:Na3uΎmUޔ[Aܭ;c9t݌ZYcI ̺FVű!Phƕ+!ve9'%:mR\3郮5PϤmL#+S-sōxog:U(Oa!sVD ];iv`8g$O!t3_3% W=G3[FƧG="|B|RR:{@0ˍ;ẠK5VH,u،12A bąe)blmؔ?(}Xfw+5steb S=<ű-k$:Tf;ejbH.vb 5Tb|KZcSZuO xȐقGu}n9geO0ϔn>&].c5X@̈͡%NO~]5]1"6Վ ݊~ҁ &ׅ"c`k dhH; dÀr4 ԭ+^'ħ2z`0 @i#>+>r^+VCeJv,M$hJ)}8jء%y \ԣܸTRe,tb5ܧvg꽦MV,}m&.խ5hF5W/²mabn9L)&'Yvidեsc;hyOaMkK*Z5fǥsVy־^.kS[n7m9#E,YM?<7̛oeYw&+itu(v~STFo=uX"~>cvBŘH*YłҞv#P˵+Lݜ+0|Y=i; xՀ5,8fC Ԍ#:Π|0[A(M7(ٓIS7o/& k\Awp) F c?v%v]5NEga"gqe2GF0 P \.%Imd+fyd$wp'E,( Y>X%0+Pèf` h}Yb\{(>]ov) "<>XV/K֗s]Z^!;a]AX\4k'T5cX+qG@$zs?N!ˮTvў(:$l0YȨQSo. |٣z0jR3,oǿS MFDwb4~Nw A "aFBse)Sa2$Y tݾx:; &kxmB4NvkJN0^mTXP_%֪ 꽫+M5*Ks#g#:}ӀV_87> If.̱`SyMr/V&LOv;uI۔Ҵ8}2e4>U9;}x3GƋtN 5ׇ0~:Q aɁsׇS ;~wW̷JG09i}.+GÌN1꧋̈́֊,e9 0P04U caMZI-2Vi.߅"믥&^`GԸ/8ȢV3Z1 ,d?ob^a>'lmGʣ+#2]>qVjK!Vʙb& S4@82Οv)o1501ZQ@-0B0{xZnu&< UNtцw qIW>k)r 9Z GLNYh;kdy+RV8`H4thcX]/$9xuz"Na@$ =`r8b6"; h2P҅H?ՂYc,QGh}X#τ=Յ7Vѩk{ $om5t-J4{Nf|tΧmYbDRݴѭ5c}ZǢM2-,?NxЛ iՊ̄ԃ2Յ"eSAgL`Qق+CтE* ; +CѸt4GE6ŬUr eVU=1yY線9: n#UqPi+<墌 8]=SHU㉅5ׂ%Jt HO 8^R| 7 P'ͩGTw72_yZ>Gr҈44^&ei b߯ ohJdE#fsqbTqP*LJH?͓[WlF\ "2̩Fok:mFǸR~u )4Q*AlgV,DC_9ҹP<ځ UJ]lcoMObgDXz/ܸqN:Ӟi5=*FWc`@䊑% ë'ۓWSjTfݕ/n+0S {$SN{ux $T֭OM1,JjrzhoNz˲{c fOq+~O[Mz0uwPxkqE Rx;?4 u Ҕ@T1(Rph 5{Iϙ W4GPe,01^hZP'u$x 4XS Dj] 3DQIL؍xԖ8K1Zg\0NⴶL#JDy b0e?YQU)Ċl[m>^ǎ2ƞa-cj@T TXU#ivnF{#A쮏Ī=~44*hQscuj&EQJʤ.h(I5"K RU]CN0q{uk¦È2Ͷ{e)[7 2LԚugM}۬yq5wQI}&9Vb[{W6c:+XQ p &FP@4F.Is ^5yى*|R@]GJBgٍf k42rR=Xˮ1۫iM5˅{1}n6LB H:fZzܮ+0Ϗ3ƢB᱖FTU{G1=*7 傅0۲֕qBjv Zkʾqڷصas[KHU^5c;N1n-,Zߧ,3 TQl;$S^o!qO5䊗{<)%-)m-}Da)&IKHl-B_BO&$W#7V $fjpP `z*pF7=bud[+ҷB)kOkltͮ$YyFymtߞv,gޅ'L:IˡK' G*Tvs#D˕u<0J$̝`{ƙwяn}:¤Cb1m w-4H!Tщbe.[*hV52Ǐр :0ɸ\$Is1Fjh 9zYM$ZךŬ+w^܇UM+4#> 5xSGyo96ĔNۤ +5_D&8dD,DBS'EeW,c ȅ$ Uc,2ܺ[p8VHաc\'/Xiۙ"K;Hzg5**QeShVQ5 3;?ٌXv&EQ(=&C J%}5 Ջ }[.80;p#s!gHZy`h^Sr$% ;*+$`$H5?R@iPQJi8z`mz"G-LTQ>Vb"1Sa~FqI.d &ceR|(1<['R(,{Pה +jE i*Tӯ PU5ꡦ|څsa HVA/ӣN"Nr`e\,Qc}IJ#W+z*cb +W֣44Gw TNa1uVW2nDХ,lgA$ct/7?c~/-jSLJSJ=l.n2Z[m ڴZXT)nz2TI[zzrM 5-F4,G=+t PPSoՆRAV4ԋ1lDݶ+p/巊KxYLi ɗR?? jX?87 5YCiqH]WC2uOQ"i]MsgN_F\q8=$mk$kvګA G>31Q7ʛtf 追L6-ܽ$: _ u)"su0n'`,mP`ҽ~ ;Cj7;K{f3m֚.:b\L#ᥔ#U]2OfDcq=ѣ75rH_depq +6A(ْ=X2B#I_߆Vji]PV#-MKnhAC^ ՄڗVIʐHP5lxq`uv+AywTv3iww#uT`.l=58őcz/SHMq$ۀO+5 Kbߢ~h.-ؠ7 D@<)x=]X\Om% 9Ҵ5<1XsV&pL%h륲}=2nJhaSTon|2vilLAdђ'otq6GZQٛ{51Zە(ͫmYnѺm=YfidB/4EwԈEOv*,D 5$e ?G ;2T pƒK*ƈBj fcjIb[$G~NERo{$ԪI +%uHdwe}2㎻+&N+ oevdMƑFVt_yNfק}5xhG8HHʌC@d2;>\{r}$WPVx\I"bp^S KD3J}+ݞ.b6QTG Lt8^GBƞĵq .(;R 04V[E$$^W?VUŘK;nso#E*5Ԏ4%pKW~P~BwAkq5pc@exxePi =gJ}X9/V%N|jv:%9GtVryM*H4ۈkJg MQRׁtj%@ZJV8hji ]FfՌ]cRDTijr6 tV#POgHW!wۍ {: \J'U4R zj]D*28d<r>BW˻_ת_V۶ϻIx6[a kNNpL~C")MY"qF/mvo'a˿_Ke]ݔýUT1&LA)[l\m{5${0 `2&qSrŒrli[ԼiWC- ԕ"g4b[+/#ºdg-' VE{Vfqlp; \B&Biر`5vJiVp}\hr ׀&TwtGLp$9צဿS27݂duA4ZKYePdVN?ئ,F; |o 4 +]΍LYMt#<\:9mLIZL@ 1^m ITm卆A6fΤjw~, Xl{]^i4fHԃYx11#R$"KzE)OG\bF8U9ʽkPY$^ݢBjr(3#SK=Je6X^pZ3Q-E:!@R5TjVY͗|V@jC¿d2,).\k~ RI_3.n6'ߺm\HEťIq"j*t+n I+.{6C6oIr("w*FG:ČۅwB٠ҟޔ3lAdiN[O}*S1^n rƵǡMԒn{[+pQ~pXul Ԓc {81iՁ>ݖmQO#B+50|%`id{p3oEܣ$j~"OV4FFxbBՍ̥5*9矫 pDYgM9wgJe.T3q1f-%#zԆA=f߂3Aj4bdNYge/16H9rG euhs$2u"̑ j> N"e,xN"% Cۀ$mk@!ɛ8eg* )vqY[n:UP׺ƥ$E [1D@i87JuYK 4]⾯7z*rOz;+Rk9cUASݦ=[6'ԫb.d-L.D}ZN lyLw=*p-u - ) ; _Ӳ?t F=0B\ΰEA(ru}Xe0[X$Qmz@5 **T/0ʀR 5s!f(̪Ej!1+Ԡ$<t(f eD&h\2 Q5Vы.$f-#у97׬>AlRcԑˈE-[%+h 4n*+QxqLim m*?nqsdݓҿ[1sn̆GfTE^6-fyyDDVj9}KRGaۘ,֬ǝC{bg͔'AuFƝ6WH^bF~b+)w x~<{rr"z?.߹&#tW"39H54DQJ8ƪdimј-߁a$h]2k@ IE՞}OFʩPu P.f#?F.rnڅ*Ƽ<=x&[| tݤ&5SЯc8^J˻;U- єzVvK[AFZ=XJ $L35 ؖ$8.' x`TNAz=X4#gof"Հ~*_[\/Jrr `ӫő3)Y&,$tRv"ʊ8"( ڼnV"ȂVX`)Jj7e*"Z[CEJF2Zw"4T*#Lࡀ>oA'HʫRd(Xnx1pU7f.YItGɬSI}#CbLGQKf8zN" YF(TԁR=}/TOV1y 9pCo;p|F\S{̚P6Zm=#l:WWR&GNc^&uLGCibpϳ[X@~yÖgYk:1x˿|:S  iU^9w_j[LiÎN?0ñf" "znZ&kypRlb,e,n٪DկbU^Me7Q jrLm"+gF8 r!n17d؁\ĮʚGB_;yBnxu䰠:jOy&HnYM+4ҙp\L/pe5o7 ;/|$MM)NdO \ ך<۽j gũ.+ЃJqn<Oq; ZG c,K!He[kSV@(ka|~IQ ]g”Ҿ.>O=dke ( :x6''Pd3 J~\[~T;z#fǻ*gez fJDXѪV5cΎVM.uQC&}GE*9 ~'c'wҴ@f[Mtѕ=:pzow@3th:R*Z{8n}psT ȉdE?L;^} ֠ `k?{NwlWrYVAV3L<yq;Y5.i"ȓn1Hk*և0^=hw`V+%u, cOҸl)-PE@j)0qb[-;v5Xf?Aa|ô[NM'gSyM[ǕAئ. < B HE  U4~J "Pi?>N 0<nf Up\?]ߵR)xR};P|jL5\J6Eʭ3ά88R{$vSc$&u3,(vHQ dt,ǥ}gYci>)NI[*8Okyͬ)V/ %C;sUhӋ-Ow[{t&u$PWdUXo8bƷKUphr<U U#0̜z9 fTU]K`Qr?f3dKhfVNYL$YE,^C*ZFݠW\cnSk0HK={4{m,mWUÈ'5+EQGl6=nParEi}7{)qc!膹`-*ݰY+1@ɻm=YٞaskwdxHıC@=gu/lz-ᣦ/PbaMe,cۗHSk)EjcTclJCMDIGÅF}ď_ݘjCfqq@̪8ʕ m9rȦ}{>331 I9aaUNf*c9,mBdz,oXm4#u:TNGUsk3*@TzqrߘXG>h妪{2'٪bY1%j\mΐG)e)1P:X:d˫ňFUGkTE }ѩeOlOqfsS>qS#XdrZpٰ8,0Ƨ  0,PZʊHH Oc=4!NH7u)A\[Vj]$uSD₍V$p6m/_فxpJ͸]y6;\P VEԨѼMs{[ؓ(p\0-e{ݶջYn"4,Q#УS~&%I]CaZ"jYa!hzSO51vNVvv,ebJ20ntDJc$E >wҸl#϶JJCZ!gcauj),kU1 J85)0t!5Mx9q6!UuR[;G j5ّ8`/Y9=RS/#5'qVX⅌}5ȹjϻ.q<&l W{}A1a*j(GӁ$;Zi doH> 0iJpk3H!v⬂!g i'.тjICq0O,S(vKn`cՆU~MhxP Tpjl68 4`%Z\837=pK5=aA=J\]f+)\?/cyۣ4x&0ί#xyz31_O^Q-EmxbfHҍ '[:m.-iJJPիA+_NxRW_孻[VMx"- xY#H%ye9p{iee4ȀѳRASfF00^FY` `"ؔxܭB@4Θ%_*WqV ÷ºSPFW#bȐhQ y51}SfviO1aЉ{kadB#aW,.8w'܍wlo^5,dT%B&Om3Am3=,3F뒰'*c;KcNlII{Ռ3S5ǗiVm7ݚ-!TIt23o/[ύLZ6U$eNpƎ]+Ij.D.A{Bw7ij>'=u'*cy_HV:aÉ'xJ!YBJm5dleS"7rUHEBp-egG5|TAvG08[/o˅Ig| NԞۋ۵IFnp T%xp9e%ҵ=#t"T3FÿͱgU7̕H pelb|3nBE@k3 SJz(3c]zVc#߹UF,*I՘Y8h.SA#JK(:I<*ͳn1^ Y<}"1#WMMX݁v=Dqj(GaQķ]}sIݜ'ǣY#uoVݼe j0x:!?V!xB" iUctZW:sTHr2 x",/GX?b[jo؉mđΓ7 G,\"ꅫ1mjGJ]{maL:#G҅yߋX헛ۺ慄YE CAi=vvی=ŏ,1J1:{4qGcoXbp$yy3"Ѿ!xe(9dzpJjAB/qdGݴcM[ 6lqo;ݾgY].S)xKjm9p!XoRi}o"M@IJzS&Uzk:V,<5beIJΡg_ZNte-.ߋ͛տ'2吥 )#8! RU#pEp*ɧYC)i1jB om5D]Dpy8b x5_AS5{a _5ya6oodQ>4bi%qN"(U)f.y=U iCNL6S3HZh;F,őۜM-Q_PRvㄋT&C*A̚PS@4ӉGb6I+\@:h/,g2&J;3R2M/%@j.8>bςIc!2HF'FT5>rO^Ry+rLys 1ƪ} W64s)[LafgSt GP"#>k6\QF  =Q\J*vsP9w~]!/UZ7859̹/E-T! "M#Nb4P)Rt,Bf/WZEb!tA$۩`U4%Œv|Xڼp'Xҗ7,N\IKu0ڳըS_`r) @6GkHV-|7t<~w6ymKI[K.npq,\<=(+UT͸[}ղ~*9-\qݐAWMh{O2r;p]p^~GpLϨ#DPk3m.l#Fs@d-b4~G*ޫ q(j\z49]} nYA\nzL{BjIQ\cՖ7[T%)3Cq-IrΕ&.FMܞ=}8N7H[ 3~ԒXb$-ƙ 4fKwmG36JQ-R 4Kg&;M^Y&Z7_!#]{9Sگ ߑ~\h, د=qӒ"{EV@6N\p_F[PY欤 Յ[5囵G-c5vbテ;M(bI8a-jP3}Ƕح˦|j[xU#P MΥJiJıjVx%pZFBsէ北T;ze#aYU3e h1Mz-oX>3G9C\jij.O.lsZW Tzʆ,bவӂI ,hϢt($j[g|ݲ;'.© ״22t$`:[Y/c{_CiOcy[[Za"23#%( '\[íuظO6l$L1Lم28K%æOUdf{o05 @J=bʭJjNuin,{<[5îcXP8ߋC\㞯f㡓 A7[Ca lP8j:Eytq:372~\P|%.TʼnGְ͚^JTHp]Z+?k)$ xyŐrnS4EW*abOD)d*)ʠw< 9Mq4bZI%]a}U,3#F**=N_~76y%?j$ܨ1.֮!]-:NZt5\Y۩l ИVpz2:qs vfO 4S1 a߮ ]s7qۭkҦ(#QaDPՏi`yh Pb$NchX`$j>1~>N##GR"bp0|wubre>}=IIypDZGom/#h5956N/խ͓?f 4"is2XGliuN%$ֽגv hc_JH5*m xٛXm{YI׶MqmUW ~+uÏ|軸ͦ݁[pPO\[ߕl=y` a9d;%`>qm(ۙ@]et"@]X׍uomlg]TV(d ېau-w]Ikki LDj9ze\y^Qm7=lqL@Fe=g]mm=U/O;IR %-u^U6, 7 x3vN5l|eҸ@4%iDעo\*X4ZS#8Ul!rkSLe> Xtı,NyPH w{|R lTrS%y"y]jK"\a]@amrsʸLqڭyȘcݬs!)A%RhGSH65ў ]h%-:1_jecP7#G-)D1Z޸PlekˈcYiGrS ĺay3m/10gSOAm-ŴgzYF7﮲X\tiQIJ!`e%z1J[$T@ƙ9ӛɌ% imJf}u5-d ҡIf8`fգP*JzbvhiZq+Ċ)/Ӟd^ɃLQxR&9$ΎgHl~Z|然=՝Dm[@Ԏ+à^=L͎9mroԿ&$P DnF%9X?5Go˹C[LXbP=,5FQӗŌ-=X;Z6xrmb"TDIA ?HLd(* àJ@x8pqUjx(q mЌӉwp]rIm]$+d0VF ؗFV0F~G\:6/l$V"hc ja.<~I;Ӻuٱ+\|goֵKf ,k,I&'F[o+\2KuHtzA6O/VEu4՟ԛ=Bm~;x" ilc~#z4oRkmt(o}xη5vYI5#G7dpœ=*4 8dIzenZR[8]Bڵ+47ck'3-IC7\ßΪYɔ-u ϸTۣ 2k3F'IX-G*Z瓇0X48 T }=b`:sJ•*5r0̋gH:d @5aJ܄op\F6e\K G!s4`krs)5 W!eAjo`aܳO#D$?Qk*½(pgkWfZ}_)-9ii>ssxMsw1= HCƻ:fmI?DGzsްINk_Uݢ:彶fl-cY.&K#I~f(cY 4G̈́ʊo#h N:?mp\7&fT;dڌc#tFr۬HBJY2Zbk)1pٱ|<*~x"٣oK+ ,L5 xW/Tn˳|]OY]_r=i*-LÙIFFZ֣6Ok=+zkmbk9.ZٶЭ:#3V--Nn^[4cIPP/iD;˓Hbe"tA$@\z51\\*/m-wy^3t k?*{[飚ԗ! +cS ՌBeZ]#0]sg/FK! VXX&ZO6iqmֲ4pޭ!GY"M+6V5:Z8j\gmrx#{aKu-ี*6F:i[N;묝m/Eݍy<41rŜk}De9<,7(!hy@2.rٸqmpB7 ,Mcel5[Y_'wqYDko iUg\oɂVzeU6̒[u{2w ;*5; yw.d&9㤴؂e2mjWfC~.Wj+̠~$Tʹ֜qr]EᓴWTTZAbdXY6Tcl‚<M+4^& yY4%EUKXLv1./:ƌ$pTU5o͏6Hd/ F|Y}důT*˥[(#59|K2N! vv;-QD%%8$g~uEe zl5\7O?wt-[)@_NjˍM"ˀ^ xina} DQ, zr%gp\Ki<( #(C07Srj}d<^IfjׇՊ` S>8p߈ܖS\ E ,F.`@ =8L7ub%o,B0>Ynz pYW,ݟ4: M5WxE[WNe?^]V[-ݔ6t=OGra!"hjۖsSU8mZe;y-17Pͦ`#u%w0m`/ˏh(2EBl:$Fw2 I坨u뒿^T0m bIMjsFK! ѱ%3ƀIۡGcTdҐ@5ŭ!2H穵^\c),){}x^ 43%eQٶ῍XP֞8.i'ˀ~2=Άш]$,,"1WkWᙠ'%&Aퟔ?pl㶭B&rZ?Ǘi^N;-tw-BVn7fVR="1:bp~BF ˓NQ􍦹vbM8v$&h4hFJ8h".\#O2>l6o Q2ԩvRܭZփ8ۮc.0y7GEhtj[_z;O"hVH' ]\ZuŚճ_`C>^ Z z)lTI5RraݞLG%16 n\=K?#;tWjvPT,TE&̷5_ A/%jƠ20ۭ?cw3fe`n[2KΔrŦ^켛fߙ޼wг !M%B&u}te6ݩQKliF݌b|G3ry庴A$>N=uޮ+hay Ͷk LL#s&8;egPM.wmC-p\|`WYҬZW[tm+66#6OۦM2ƌG4ȋ"/MSyıg^m>QW۸)*Ɗ Y3Jt mm.,ڷ/7w/FVCdEV{Y,RZ)mѣ,ngHȰ+O `hMSz˺[c>[S-eu WDu&iVC˗"Gy8j-v.WvںOH U-˦/78|oerb%%TAu+6mʃq'`+!*u*O.IiϧX#}6|}yΪӰbVyHuF\/8͹R7 Yt[qt&okG$71eJH7W~f&IƥۋcfZ;ԓӀ&myGC HઔVtDVS3RD+O MLi"-8a8Wn;qW>4>0fQM 4jA ִrJd3AvM$7qZ @kp  4TLV =j2\IM Ugĭcض.v- N]u|cp$b.r$nw:.l`(%OԞl^\TK􈞟щ$H+GmfGγ O6G"("S(ICJ``TpMҊVvĉ٘۲2h߀m.:k/`TQm3bA6Onuq12R*rn'jte )(>έ*t8nFjӻ, pVv =,I%:2KՌk#Ė5㍙$0$VUh7k]}rYTY94 "*-4$mg.Qn!ڑIJΣ+hduF+W,23 hH=q pestϛ|u~>95 êV@_ܸ]W;ry=2Q@'Q,iÍpRV#]u\:ǫO>jmKrٹ=lm@C)(YkS&Z]ux.X<-mQ&x@Ti#z=/6oÍַuTvWvZ5MkF)>1]G olElbqwsB`TTIٱo21=&"LMR%C [5>_XpY+U̥il=8oַ/݆1vv'h(؞"3iʯȟt?<ě;'5ZKA~&<8]-ۯ]y3bw㍂ Vլ:R6$lcoqotwxEgȪ iY5~:w{.,EprmPE@PiO1ֺ9_I4kń=PqiF;d&yiQvMnv=96 mXv"2}cS׆{Wɓ˭qp<*UykS[c-b;6hvIYjRzD8w5XwA#@z;onmr.|Eo[ AH9iR'i#>;èmOiD.v褲m2u˧;v0l~VcvFi. f-Kzq~-8|6݃eou\VԒ8/]5vsæ߹5nӼ4HjMU ٞ5&ݬϟӸmYVlG{i 1 n}r66bVTV*Z\DZē)o /F~Vx,c1bI\piET>y{h-lB# #L^jSV rYi@YQs9I*>Iʻlc$Yczk:V1䖵f_*>嵙Du\mP]VK#/7&1^yky$1w;a(Js'H0 x7kS B:u"Agp<ܪydӁݖyc;U4w#\ Ēa3Y;w1v0I+ ȮzqxMs:GmCgVQ4VUp`&v;z5Ϧ) h;Lт^ =\m]5~Qmo5qu.TgL2,IOt8)yN]Eče*K%P hIdkZdǙ|un }x׎-ק8JBӫ.0$EHTeE-EIypjTB2#yJ %ԫMo{͆q{8O1|[O$k6z>)ul[cq`6wPelF t2t9nԤ_l{!H[w^X]4鸍*Ƴ,|Oy6vMK//5-ա-jF/5Z(eUEM_(M.H+ x#HAtOKBիK{.[mo.Wm$Z_$dHQܶKJ:&KנGX*F3Fs! pW2@]SfNY3oKhxХLj,Ie2u[ 7ͬlVrw`_ >-XںkۤXy "Z$45PrU /ɷR'l' ;\:PP(ef,X1yer,*CČ1=(!ӫWW:\:q4CgndJ.eJǏ׆v!E[JbFZXTf;Ozr}~wV+YEgwrڤrY5'Đ}wcLϰWHw(,Kʀ/nmyfh_gj)$άĜǟ,fsHu0x$(iBqtI9.F \lVEF@OgTZOF5H]I\X]"I*Xs2jVOp5)A぀dFT0)Ij?W~;SS¤WPOop$b]m-j\l5P`u-q8Ka&q!`>]#_R_4y5p;!OG?2-@É|zY7AL”LGOKUz@ I=__̯Ab/MG,^ȓ{ Ni9q9\H]2 T0SߕN%2e0^[[ $hV@ fuM-\|T1|~{蟴|}hIJBb"ƭ/7ߞ|;N!ylQnbh봉К'‹= WxXe*.cKZrXiQNOM̠·KlO=R(kv 0E?gعXyͻc,vi[MDPCh#/̈́C3(X,}J1}?4_7m;$V(E<ټ}R(wgߒDs$/pU)3IFծ6ЪY^~n1H]@ԪtjeBsfs$!,kA l`6{%H87 舟&,b1dC?J U(AyX+d/o]@#.#!yK9:uNOg^5랂n- I7ecM,HA2Fќj_5b뷽KN{i\[DMY̜*rIᶼko$/:so;M0,'(_0C4r2D˭C5(_Mm{o=~spjOJ^[Q" aTj־$Ժ1 V+%PpP.FLr(TCD֥^5]>xKEcZy'VݦdC|?kN8}jCm0y yfrUUeժjW[꽦nhdUew.ChS%Cu71qqζsidLEÁ YyC+7_ҬnfPxU i';6r(=Ë=yv*o[޶T/YcE]*cɎÄ֗o'ium|q'EDSD6 QsUW+\|/ಂ&so=8CYE#JO+>hý,ZB=g$כNgjO xxu{:Zon\GUb厅ɕ R+=l䟆+{q}+T9Bƥ>$OytP-,NV#5{quoųmn]2]EҢBn{i ۦEɄS,ښ6@3!>@=ub3Lq-sȚn4n۔Xַu&aR֘^óH;ʾ$=,b܎zf>۷$GgjbK =Sko'ݸ6-|gHYeW}MkXXKq2} 8irkq+1K,[WWm9ʱ!rY@r 2UNDzRѸdeلI *-&=٭~K/-iZ=zr"dEDl|Qۭx*hB4X.!qm6h!kXgd286Սp(3OF5 C1 "cQr5i¹Fn[PJ"ؓ<+?.&Fbp PXQڮ>RyH[J#ܢ%dNV%DLyWk[>!䕮ZBI5c$hͧN\>pdͿʿ+^eu)H`Ix #w?ؾKf]SҴ-_+Xz036!J~QRhwҫV\tel (V$CYuHUYYi\&%[NZ BV4!㦰4} ok2=Ͼ$6م RS0͂ W=>ޑ[,dvǑD('p9ZZ>i{c>bƒy[[ ڪʒ˦^TH'[Îّeiܖ[Z${% TVSLm,*-<&o Vgamp>#n=0ߚ&?Gy[fv˥0C*SEV?F1cp#5N5h@'O&WyrK"[0xn$5{X޵Z:գ9c& ]"dQM]5fTM5y*Hrx>Vs?^yuV: ck"VQp嵿^tFLyrke1a{w M!TH|ҺOߍAG7V4#:WyBP]2* ׂ\8phb~ B@ pFBBx4n:mq(ƬI"j'?ǻ6r֛k 9 肅1RںqZ|OW'}?ސ$‚p 2Iڵ6D,\H ٢74 P))NM:5TPn,v˱B/uQ/?7.:Fis( JvER:%iYyy4x;\xbXk*(V#/&ka\uDaIʒ')WZZd^_͌*]ɵY!]NF`xE KВUTDv'NYѴR,;2Gӌ*ae(EqLOXͨۊYd,,EDd !P}ޔXu4vg=^[mn!ea+HI,(pnY|īkө7‹aP5U4S:dڿ}Ih.d2>$cRV5U)@E1/K{u <ʢ,oڸo2kA, ;p ,~lr6f$kQꆠ;+fK9zϽIn4]^iX5CJ03U7614Ej}XB]X$?ݩM5sxvV?UuB8 t$e\w-+p-Ghg##U#?kv\].si4hߒ$%,ܿzڴr6wcW;n;DS*TWi1YCN7q=-};5!IU[1g]j.l4pQcX֋Zi8fLV;-ky{fn=Zc,=o\"&clFRpc1Uin }Y']v冮\ xnjH~$c 7[Ǚ%<ƒ)[1͋ jC4 `,gC1` <-ˋybFBVvEv⫠6758 +9OƹFo/-uko16'w6;Mz] 5&>~Wﶿ\4\ޠ"3uA- J,Q68y1rʻ%jxch$ 4 '?S,Mnn f;3^W^U_ !ȭ\kK, Z)G,^A4P8ckD:P$z'+)IFl~w_>ٟsMC U@͡"XUn(gtm$.2fr5#KynTI"SOeOe'|uؖ~($ChթK+Ī}և]h5s2s~fr;1PbY EXZdi[Jqo=mtYo9gcedP$vШy^_c;'-/E5v`I#C$=Э.g?]~n93m+{ē-,CmY~#lv|iy^6H7ib(Z)PH3tFJš41x,ɞ`}tGy%X:::IL)Կ&1&aUَv( Tv엟/ܜhnIF/inӌ(,bޣ܊밆F!d4;lgktM]4S^[y""QNo ;,\*Qw%8"Ý47Ur@l6lc=f>>+} E=$B`"T{eC,#10= SYyEK{cpb"IY@Hb"TjU'GkVjw-{/L H^=Zݴ{]-ThPX¯0@@\3sN}>c2MDӱio/\/HNK7cELK65!]f.q1"FA1RUgד>qr+Kt &2j.?3Gm23f@WՙrVZ\]r@NdD$!,U+&76lKtR`5IS/0j,g9HqERDNc!D'Z#et]?^ԧ$1į'm&z;8Vɚ~ϦM4Tꇎeۦ!zm)r7͆1z/eɹ[B'u9dU)'cɵߵQK'"srC -aU]c5]mNytLwx`7{-U4 4FA\|1^碑`kwH& JS!+.J_8弑/lv]c؃zG,!\re Vw9˞T3]-*[0Gc&ii[U?|NGc 2"#JUjw<<xUmx{v&6ylJs9u6=~߷ MW+eQx;KFcWdEvڱl~]1"r_%-IAA^YZDjS8e˴sfn'̟I㏣# kd(V6NSM'oŵ&݉+r@5U  *$ nV1zNj?65lNMyWh I( jf>3I1XEOj0\ucOĘRo'<.Qr(sy'"i87Gtz{uo=T|ur8ke:2x[)׭~'3_2]rSMkۭwQc!u6aTOISF]nf~eD-,m洔768n@%Kn*OO- k[D7 a1š.שQI^M2FtV]Z=XwN1(ՔuyYڠMi8$P!xս纆.H(S˛6> ZKs$h RMq[Ub>rvndiQYy>Ӧϩ:m3gFwisr7V-G!QlDîC_ +x[I}m3c#41kpB-{ QKnC+[8:XP4ʷKvɸX77 *6˒f.&>ĿtrcoskkۉuCdaZN~c`z-(8 w Yu7hHI$5v,G~ -{3V;Vzk*5׷NZ\ 㿒rO.Ue44Fmuuy}cRڶm7tUkMHvbYQWT!-W5^[#BiݍNwOq>Գj"QRHm^[w{kMI.t9#3Df3ˮLi&j]׺#cf˺s(XTV,FO}+=ZqFKqǘ|YAr'j}5O!@ {n3xu{ #b6xX/1yWsqHm/ )mwH*;|'K/F}nuL l[n[Y/u,[гFui>}x).g$.Qd,̺vFonc=: 2YU-č,QG,iZ{W:y#:m.?e,=Dy㹘݉fbt,)xDͭEO}v;\vmtݭ!Mf )PK!{Xߵ9Q$C9v͏VL.d+=9¬H.ao^j~56k[-2t% *5h69/P5"qsЯPI0ֽI&3qc 䩷)%Si75xij*K:IC<~G?ai-2Y'eb+(D%---ֳ4q鋕>Zyi@ŕ2(da@T-I)jEtqZ72F6AEuQji\ vcDE..K Iմ ;F3$Ch_uT(f(ۂvMyEvz,WQǼ(3=ެVNnoc6-c<T.siLJY=۷;޿swJR[NxІ$"ub{nFL|:Irro-Kk7wn(51P2-&No%9rzK%Ir$K:KϢ62][5bkR#qײYe:&BV&W"Y!}L͡q z Ke%24q[#m2,2H#iG/#c1`yQi%XTV[yLĽue-ۙ;Jwt$KBM\&i2gj 52J4@E"tWx#k?SmMAlȓ,Q$kBc }6m:xĺʳt $+Rizd^_8y6>S{UʪYUw"#ȎiF:ۏyzsIq!=K+ĕG5hVON1Ys?_%eA&d+t"+B˪O𵦍7}8b>gy.O7[ -- HF{hDPEH2?i_fǙ"oz?A+;xHEsl"u`)'e9hރـv=q R 1;CCBxFnc_n+ -YI zf kc/?=lKubYmq:“]jZ MoUU,aW,s_nT5+gkkML[c축q`f;9@#!nVo*5}G0}Yb)KsshMMq%nd@iDW05 ~@E"ȴq;m4=~0%A Fxԟ'|qyZcu.[ Uj~YY^V>wfXuDUKgyEOrR:Ɨ'?gO$c[9,4,cP$0#FƷ+cr p\R1iQ?ƼvzlT-7U8 D[[OksjRtԼVł*IM}Y(~%ZÎ;NͳmC"wgFx#z[HNTы+[}ɱv6ӭrkeiRfU9u>'އo&ozj+L+=HmF+9}+~lh^ykmZQ--)c1iŹdr24icPWRZv('*/P1.(hY$T"WoN3Ew?2VJ/*ʯĨeՉbM?/{{y;uWm^*HN¼eNɮDW5_m_{$iۜd$1ꬨ阔M4FTwȑc|m*mU6t #] @kB;o䓕|߰ e$h=)$\Bc&}kv&˷m̲[,hڮ h5I)Dw>tOom;hke`Gh!y p4rƣN:G۞fgg++,i2Wpۍ>hU!cܒϧlg|ɊKu6]mԊClΞrty:вgd~>.OJҥyEn&,A[I#HYQ}qc\vk'pb(㧫m{36#ˑV5a :x׷R* zIQC T.cJw݅ɵnRKI-C4qᯇYs{M6JPDZm\zlIS,bpE4SM3Z^92"Keu02 ) \5&hV#x1sLB(A``}LXԱ5$ ?~xjxv5 ;l1ob i#c̲4Ji$q?|3 ϣ@+OD›Zt :]::KW2Y6v@72VY{}Zlt#9ړADhug_wKCh"}-l%( c,+\A&Y]qujVai?j]*jam!m.EItmUyEpϦFHVWxu5M4bg2TDAS j4qҮ,rӞ%݃ҼftmhČc"{}Lnt/67qNamPGEhN(o[d~3Nn2_Oou,$p鸉eu,JITM>k qcn֖3S1HFX<](&,]Uoi1+8䩢3]|R4.Uf}P|LtɎެLV0:ѧKF~؜SWRphb'1$e.u}2ĶunsM^ruJ#VE!rǡt~;kӜ{`6GEBL:*Pg*r\X׵{kF[S|4w̱(z3Wl~n9{ :ޑO+g\}F`Ju,E6{1t[$cT:T +4Z0ZV9WCj6yg]2Ok[h'fVXGc@F<>-8b3mcdM HzEg-Vg4V^zaxgZkIr^A'8SM.+#{XYyٍqX D*]kR[&h?ypYe[ܻ+#VJB9Gjo7{rg[l#Uv?PI 6rsn]z_,7IbgR4Gm\NSk06uq),%Z5mZM,zht&=~;Iv]tB[$`O$ rҺs7l{kǣ-,7k5*v1)TBюRfx3icb {p;*չϲ(ͩs]ݷߍe +.Nۍ(jn巍c6jcX׭6mx[|&|cuؗnMw(@C)7>#I:Xig2x5pi`y氕_m[ie $C+!W:K͏OɷmZڽnآ{k(WzRSkկR(cIݦ1zO#<8wrQnFĖ_ò-ߢQu5Y˦_Yża5Y޶͙nk"F!QLrygы/vfc}}^)"70_\=.Q`t)OVotӎ[ywme{mkǦ;Ki]?ɫ̽1o]-me[b-VBdyO-^lv6buef1†8e1*Ahy}i[,^;yւ*j4QutȺdKM+qho{p/+A&m噭aD%e qxK#wFԺ͍o7./%Hm`tU3FxB =Brt.,f9Ϲm2_Y4ro_BfVU1tcڹ1{v]u-`[b[$W5#,izduU]?3ڃgplmSr䷸^VLb$m\N5ukkrhVKIhI4Y:nPBhLcK.eaP|(ȟJ.ES"0ԉݏ(x +v+cٮgyXtu E@ I#Tp絊Qm-7I253ѓ9-f0O 8,hXN]حB6#=#*q0m_3ڠ#>Í&1-"pn]ꚑ _X#T%vW9<䀩BuT㊘Eq+Zֽ\{y~.#;Zh{OllF E࣒@ہɆۮ]Ҩƴ_f h„EJe{;0C!-L>Z5(u(nܴT/tƝ?6ֿ[ѱ79oiV-m=6#\, ѵ<$N9ݭzc'H-{d!E* ٕ_Odfޱ3sS+9ߩm :ݣ"ά*tkeoT1l--MX;icá)RU5 $FS 1:;oL&q ,Q򡏣b B?gooOC[/¯mjM{qet T҄4MN&VVWc\ a .IؤU`Ǩ/O_tBܒmb{8^'%H-&wM Zpۊ +kz1iޮ^6f* JSpiCȌ#Rf%WExW#I.[?KA-PP/]{1>AJguݓ54j"k1,!x%nI/tN7j-ctvVM u{# Kŧ.:zgsZm1 kYr23?$Ȝfy|[U۵qʊm1L-rtK!Ԓ{/Ay[Hin!5,24 *3s$,yZ--Iҩڞ/'>1[ V;n_2M+[s%#kr$Ct'Pƃ4c]lϳzebgnM*#U&eri=Z𧻓Lm׻ei#k dQ  Y:3Rco1U.x:JY$x#3*,4]zttpβ#wYy,mq+2T̚(uh`QMLt:cZIyCl='{I\[\:[%Y_zyyurK"xeI#aё]J}=,R5Y1rβ\Yܘ.iR]kFUC%S%eZa|ZtǼC}K(cFmZȆP,@"&-Z2s[yDۮeܤXnI$:R+y#x#&]]Fmx*o":n{&L`@"I]C.yafw +MV =0ɡ)W5ͽ1x7mP),[2@j̑2,[->{뎊cܬ-Qdxe ŦdDM|<ߏkҳv%i)%tmPC0>qd_m0,[XwsZ|&φ$\1 5m>$75bjUZNCXֿs6%KFzsA*8omJ/!( xWLy#f[W]^:o/Iar] {x&ic*w",TKso, -n5I]-tI"@||c:P}|`r *jpڤh{GG/CΨuŸLmv3pɦ srdgx%9RN'1[qm#N˨!˔h!i\oT%66 YX9 [ia]*¯;_ImԞU 5h'IVxq}}3]k/b{W⡄ eJLF:ȋ^tƿ7;uÝǢ/V$0{t$ J._ie=?Է㾱)/HdylIVn漜;q_ZE;TʈԎb85EyOYQ}8Mz1wojf,6 腌ѬIRc Ȝ$q P/,%nH!"4& m=r{|{6Q$ex%BN}Gcԑ/.V{"Ik\2kU=mWoķ^\@ҸR t*jӋ ![խH"I-O/R%n3S@(T$uNs:kY;,nVHd=+5NcNiUM?KG\;ji(8/ (!WE`yYiՏ?&uNtRc14fi.zlG23K2%{k⯷J$,є;1 ƀh~;1i]i(!nZHY =MXLnLSɥxеE^5"嗽\/6d3?  1BWM=<=;֟# ^Guk%k*זFӐ 6<x2٦{iՎ(VgT$(GfP?/WBkՏ<};CnnRf,R5EV*Pu(^V~ y<3,޶3n{d t[3<°T('YzϩUR.<ݎYb!33/.ga# !nyW.!77:4OwˍƼ^y᝭sF/B3"|*ǣ_?_/IVp_kY{{35d$&('޻Gibkl[yݤI.Imܢ;[yՌG"k5Q\krUO oYV +>[!-F`UxlW> 92Q @u;f=S}ǽEpi:I0=1Ctҿ~ >R#NVTºѧtʭu.Ƽ{~hfIKB%r"J½Ox>{xxC֬ܬ])fPuPjas7P{-ȅ*S*Va$LҟvpMܙ#/@!BцcYR쬣ib-mY"5^I:&~ltcUbs0C* dlA*[4'(r3sNuYH=N#5+E9J^U]9"z9K8GytM1=hi@(˯foj?=8Ys{d,Gp覩efcD4(ӛ^3] +dC;)` "h6Py6śONi9pwh\Q$YЩ&TeٸN2UnnT45צ)IcAIBu_\xLW>=oبX$ Ď[$8foV6I"+o-'[]\,6ϧѧzͰ-(+H1!a:Ov3&Go[W` : 5bs{gYVdOu-sDulWGB.wz\ez,6=w90HȰ"$DS#o9$櫁Y1͡")mzpCN\9ktr7Q]K}k +vJIG$3+R2Y'gm-{pVowyZ4IoR9P4q{sIf lllӭ4bSX]5q#]Q/E!P11r1[ΓOuaq bE݂AU5jƶbŝ)$XB$} F_xϛr7qqgZ B('#J8Vuc3ɶ~ MmpYDKZGW)vP4kƦ쳊sp2^]іvGR8R8R,n=3x񭤻qXÞ|ĴYsVH$ЅGOFy.b.ٮHtP`=_M-KX$(lӖY.>1-19^F >taQP;EqP`)İ^l[We mn4L0N>9FzM.orn3}CO]6].ɾ^ 2h4zsrxq3m343$v rJӇ*:Irq3;VR\M43u*)z,*0t9 08~M 0:9WlpT-Ic(dPJsDx Dr\lQդ>y?qsa:f]d놑$lUW`38ᮓRv{[)w[ek{/6bl1\1VӮ%hTO,ɢ=M>ؑ 7$;ȭITK*R9[t=ͽݔP4e2 bB/ejps^1l4{r-Rnp*3ȴ)'A)=Feef:3թr۶!)w]Y#R4IV>OMZ4ǛqoYϬZ_ZYo6i,eQiyT%2PM=R77=vc?s98[=k^H gG0sBX^vիǮ}{o[;}ԉW4Q Г,HncǍr饜Rw ŷJBR])qu4i]=k}K;c>CCHC"Tw0oھ +,Ec+O呵ӎ:Hگn-e6ۧJhŏ7{cG%n!ikrAj ZNvy't 9- 㕝i.Ef+aM=Zc]Xkێ nE!L FY'<Q3B޾]Xv,v*y<{eK,5)ۦ:Zsiק.3YzMskh{Dc[j^RIZN"IydgU\;fTsX$+$P҃WOJ6~^|tIݎxNA:9gZzF=Uh_.vv$g{e$$sކ$ MV*-wjEve[]Yo%[ȍ7n*nsk$)urFM27/[hg\O%^i,4ĹWW4/#":xkvt6Cl۬;ܑ=":zj%Z/gB[vr_gv6Q]ɥd< ke7kƿoѣޒKj'/{ <҄X#(iyumN}kcdKx+'QF`Y"]K2Ǔ9zBft f\Oŧb.:~w'VWl5܂6TNbQz$ !U[C{\ƒͱ9PΎ%FimhT$;HWVUiYyt>j{Cim$Kf юXR%Y򮮯.}xΘYӡݿokksy{HXWR mD< S3+&1KLٚ{sria9p܍ii%7ۜcʳ\C;Oӕ{X 0tcC#ۓ؏Vuzsu |I0` PUKj#ξ^yoAeh+tDd2yH9_6.cqܿM6eht8UTgV{X\S)ԲO,WVNJ<7SYZD-C<ӫsswLeftR&Z)2LuksX{1.'vn`cwi%$2<06嗓C14^c8a/ ( .yՙf2u *#5/3ɏN,o[y+zMv[tW$G.hq^픻Ew;W/.ceY&2cՓ~|t_oܺYRe81F$i: *k+#8~%MX;%Wwk)RODNZCEh)fi-j9nMSHWX5KmYD.V},o9A#@5h56c~ztjS;ud6wjt]4*CWhD/YxV?yK1=ow9BYK42rDH̭+8֧Xm̑Fc$&H&^)۝eps7-jLVv!^'C!qF4~-:?rY&at8洬Is \T1._֓nblWC-p`Wam. *W6,qk3lX[REI jAV|<ٛQg3&[2IFdn|&ՍE7.(azIf鮒dm5]??O N'fD,A#!I=3#m|:q<~9WM&l"c-KpVpDEZEe}/RgźkjyKd1PbSk*7;tηFoË.fK$z%q0*th_y^T;Dl2$ (Gū~fdw?Qn6V7p[O70^Oepq+쮱$o;%RJU9sҺWI:孼}g'n$惡6UքG#'Ծy3ÔҮ**QNi].dr,1i~=2i(?ֺVO?i4햨J.idd.k|8moe+iYfimĝ+IRn?+ BI1Kkpnn$D N~/Ny347N1˾G$t;#Pѕ]ZKLSU'.w:=%Y!bE@H>һcXͷd+3a"ȳOn45[z #"Tf>(:m*xa6w%IdrYg18u5WPGXf9kcE6w֮XŶo "aYefkHcf,&Zk[h3 I 0:j}]K&kˎiq$ jo<ɷC`(Zj5F2.o$,iJΝD/jf\EbF޾HbMV1\jÞ9G&Pl4`/hggOquNۉL̫]O[xd ]XM PV *5\=F :63pQXcaU5j/nszY̲>%aw4]RG![y,uCĺqo8kN.~gucDY- rIKԷB}`XD'2δ5Cm|O'޷+Q-eGN&<:-/8hʽDiW4始m1vo2\ZY]tK{ \C3d Ss3#׎_.6:19qMgmeoc4.Ĩ"ui!#u<>}=|XW%, no"#DvAP"e^m:uƾ=ٵWû7X1$ay;AaE% jҘx]}km􈻦/677Er{1F ::̫!h9cs'.|-Sk [ئxD WOg3+I.t+W5x5.8k}}P훬1/GSj*T.GN7 O/ ѲQZ+BBD#(B/Mm^71iIUFM#Mm+c k擟t6`MK4IGeIh^"Y5rH̺qLkݼݍA7iӔp#.OŲYoMo+fkۉhc #m1Jd_{ݻ\'8Ug:[-LZb4 stI##YUU$qfV\w;X-z38VԁmTi%H&;x^y9ݰ$CyʹksQq]%RFp6:qmfQ\ 3Ĵnewͥ=^GMx4w˸Ji&k#ɗCG(ӫVWF:ieZ7d0I$C־1GWjFJ%(rI<0iqN6q/vJ_M8izN Xƹ"iVN?nT{EJݔ@5^rQP 7dBbHs3kn**UTB6|bN3$>eRT4S9᫔ɅtԄ1 huxYZ`:7iͩU|XwYVW:m{`#$PkyebHXntͧ;xGo{Y?H;TZ:,dFgv^L,vݷkp ݆ E%'Sw̬d_涶\mCXk0GaE95u޾K'm15ܭ/zK$YQ  ᩧcVcq'SY(f흌3h6ïC.>5uT{ȯ-o6ȭV;usK2;2Em^??q~i^8umzeiQ]>~lfoY>ݾ8(ݔFTitκu3j\Ɏr紝)%!3:ERU:9Vm}څ7GlabQ#Pmpg,wgjRWבYkIX239Mú}.ىQR.q II!Mġ:V@}?CMoJϊuAs#ġ>Jˬ,ZiOsֶt 14GRNQ)- 1׌s;+I&eVVuhܬ9K>7yKyhw,09tUd <9L_1seIH2+ \MLyut{2N[27FxzR:7) ZP{E|Nֳ}qo YCi{8HmI(٤Z5(g+Fz|8e%[yc[qGҒ9V,NXۛqYۄjn1٨HRBFl@baLvv]'Ho$ '2&eNml1o8$٘bZtd,2r ~m ]ay{tֻtMg,/jVRFd$$2i$ܚ5Nx%fLxxdx$+h8dAO=Đ̟'&<'O%e//-]ݲvr F`C·kddk-o\6]|;d$pU vBYQ=O7muۙ>RWu![xce39dWDi vWq47C]e+;1b%ay6j Aoi_/v_IUEʹۜpw4M3 ε5fȑE_ ;{v[!;;ynmktT jm|}>7}eUJ).X␖b5oa_w]k4v#Y! uIpUǩ|8' ^/崺١y\)n 七tYc2z3;0gFVoZ4GfJbm,c(+A0Lo,5c'7Z?-?2nܱD?-ԫq${9iMs*2[׆%h Q#,g I nΥzoM/&&^X|}nfXce<]GGu,$] χnT6U_Z5lI#8 jT֍/{\d< nyl^K<* Tu+S2?7.̳ծϷ A&]:KR:RGU.dӍݩ؈NgE42I$fdARQ/˿ZƻV .$itFR sp&B쥟1Ys/W6@|ik:f`e{حF'n$}K EN[I-تH吮!a 9K~zuYJ/ۮ* E-vh^^Ly{]1;lvW]㍁^>ΒFowU|Z}lWHV:DQ^ U=Dק͋egɭeeĿJjB|K 8V3oN&wmS1\\=" kHܸdEcQ#WC,|Nv] ط\r"Y4dYCU@ee>UQ>-.%5El~$sFQڵ?$˟R?ՠ{ɮKK+\HѥT0Cr7͏mfyk25,O4tɷNw o˫LQ!-V1sk5es6CQ+Rs>7Ӕn4r̒AM: 6+O?_OTݲF8kE۳rt4R }$]$YFְ#k\|I,ݩMNR2ZKa}JQG+Ir쩥&4tTQBhTUVgɎҮ2<$+4%KErR6m$%]V=MˍmLN߮k\Zj;&m6QoF,`FUM ڼޝ1?4 RVw^uQt0֨{vZwBE-*5 :dPEI}^g;ĸwy٤HЄ]0&2H?QVe/6/pvj6iiro8fmDB956S8&:y"* 4QV2bĶZ{8ͼ.(vڋlkG]jKv⭼÷{ĊӑS#J#cge.E˛luԅcnĮUNCYY4bnfVɟ%]dCTʱGvdS JM7-kqt8O Ķ{T_w&9UnȓtO3_{i3~f/V%;ԱyIKժZj 2$6Tzf]̵,7˻+weB8S5(u]exj+|{<_ӸK0bo#o mg3 ?O|MjY"[ͷqkYbEcf' :ɯ5Y-8yImE$djOaAm,p\](G$5r<:o _y{TvߡoԲrE%ƔRDUV14[>om[AMY ٢ uMuU] nfe?6[,N.ammEKakӃ@t%q7϶Y fzqvoKa˻ZxVWh83Ky;2#蛬ĥ499ђ7_9kSYndiy wnV7K$T_ȋm^v)ZmD:AĀ8RHEfcY4Q$%H2Q:t6o6]y[Iw$]]MuG̘}38C.(duRUBJxVr̵߲wuYw~ؗWiѦ+z' LK9Vӥ+Վ56';K;" jJ@VWWW~}\ۢ!oehVkRIrtISvV5eM>lIwT-vĒEѫW:InY[[&g4j3ړHU0pdƤŲʁ7C&!ͫe.6&V*=+e1I{) +()-[MEJ܇\c+rGsR֗3FpUNu%`ZŎ-8MIg-cq[t \ (ߛŸo̹&}mJDgTF:z?x $kI#Vlw7 .yv3NihRTˉeKD1i4sڢӷ6%DR {م:4Ě/8jZ/RV9쨤QƑzfĴ-oFXRuՇ;4CŚ播7 ![X- óDJ҃+c9g.enKfOմY z,E<{O&;nۺ\ElMAQBz:KbAEIU瞇Q$ v^8/mƒktOlpsXQ򚮖фRW֗{tQ.nitZ; Cff<_2U=\7K,3yVlE$\$ .dwIU$42{_;y7O'(,=nV"Z,9zѩsߙm llozqRan[+J6}H㵳-7>x{Z4a{1J~9?.HKvneB&!9ƢRs2B\ sy9¥̫u$Ko r3*.1uVOcm1[:$yXZ#HFWK4诵ӎ]ݧ_}{F+PF9ܟ#=z=m}OK{Wl%ۭYAp嘘T}ްG1߃kp̜6dRI$J^Jʪ P=g餝*J|:H#:)&%@dWu N}(ÿL29,K%'^a*Ճ(x]E,$rku>M$ IcEm>d'TԕHgEy[zYJEbj^k^,&Մ=f duv255)ʿ1S)K+IQ,}/]\سK L8;{{]HTp9ށcu1gH9GWHVU&Ǩ:NS"q:L%Ȗo{ӕTJA,@+F)(˧%vU͡/+a|^oI\ϐ܋딲X[ (1uT u;vl[eyiu%/RXZDEϥrÏ|J;uw +S,-H ZM,@R# ua<ݎMܡw,&`i*i "o1&W(淖1y\fȂ?2˦kxavRVDBdHuQ}Qckݢk/#n-W m«<,;j"gx4:c<=mqe|>#C=[:(QŪIrRݺiη3<.Xޭ,;KLb52ef^:WE7{8kc"`~*yc ,΍z4s㍘/;_k187L  "1!&]qv}-1/ -M`m^$Yay?}LI^Eqrckĭ,il$Q^g_^:3q4tm6v֚xVKXӪE܉xnob~ ;[-/)bC  tjOV5M^7m̚mL]Cijgb#ag mH{kt.6oĐ(l 5֔]}Gmq$FbCDeEMHQ&*_t{~6鷂P{wyF%2.^GJȢ9ߓR{9[jm=đ+nY$z`:Bu*wKdr\UGkXWQ&IիM6Z fOGr#Z2&+QA}j9fVcmjT&D`,_J}͌v=qG$ӲHj)jfzE"Zyb 'C9ra]Hbى1I. rdKy8M#%secl7›rh[ghx(Rb`?=3Վ{Ғ,6絒W^ D9R/lK$t.Z ^>nlwiVe_ xeUvDF0"*-_[Ɯ8uNvV%oǭykْcR&kimV8R0erK.wn_gy-Xv*7lb~ (]Q *E#ѮeǶk^[4%R6+h/$9ЋWѧJr㿋[/]Z(QZ=7.5K4JT5L}bv%n$:-\\-eǦ=I?:㥗Υ/l෻i "itC3j+OqgVwq:^\\MBה,dpnPzq&c>;nm+Vԛ%Fqe0 M\?c:km)oѵ#>Z;+'{0u徒L~oN=+q|FHzypX00V 5kɌ&3ė(vn^t{X(X$nP'JiY$zx|<ۤŖvqOw+w 50($XSÔ_2lb3:jۼ[4n.n\!q,ảIJGJYμykH,佋neh# 3;"{%^lKo\z>'F~q4Ev4Qԕ@WWosw]KU22cYnzxgbew6Ÿws\~*0m<͋fչ8<.Q$4VA*PM*~5+$;'LcjBIG-4iX">ߏk˟}n6WM! "ifZ3KmO%æm.GolZHa[a~x־< kS[ #0$YXVm$1_g>=ok$GmB2t=5SIYJ91 fD=ݬ$*8W$z#[^fиN}Kpdo6ב%2*Bȉ=jUrsbk=Y~&mK0{&ef5C]\aX5:"6M+O:#47ѨD].LDk2#s|2dTh FÛ>u^$Xun YLE}/R̈́%<2r \[No[:'6+MMY$o&|ֳ+DIr)OFkn.&oC5ir D@TF]sivI5[L..ZGu+j;FҾkP2.J^ &Ҧ#[i7[k-Iū3JhXFSY'^;_3kp%(+#Ha鼇]W?_zr;] F/E6@{TFV/׹o>K4 sӒ(=KrGz<ߏvq~ ;k\5<."FK"\/USNuɴVv: Ha6B*Nvoߺ^ELsoๅn;,GE),e[G9ԟ/4׎3= yjq=mjw v.&,! FU4~_7zNvm=ܝ[!W/n|#r'7nf=*5Ȯl./D!&ZHwb` zH5G}>I:m\c4ߛ䷞5k t1%u =ٵtX2"7<3tD=dLD1)tMp,DnwvZkBF]$2%ZwH Oet\ɚmע*]_2޶G[}f'N!Wf)ٴoךd ph&*ֵyt(uA:&NU^TՌs\-yCb'ieJ!5 n3x}=)Nju;n+")!R*`Eϧ4}Z_ILBbFѢ:{2Kʎf/G%[EfL6xe4H3=T<VB%:;2wl[u~"DrϦ}? o7,mfM./`I:^UUVBF!/63%u&Xc:#?T~,f{.pjkt6:fٜe:(pA&, n]XI3&kqZ!dkY-Y,]Μs3i./+4GMBAs d1:xtnlnd(+o$Ӏ {4٢`gͫChcs\WŹp3=uY`5}jkS*sۄEN.ţ'ADqJ(;-ݱ"7q"Vcwޅ[^2tۄNS6`)Ύi?]E=3͵cXfezţ-+O.&nQ%/9bG+2;k'thzN$g&YYs)V^=lgyM]9-v΁G]5h`hs*29/^ 1q͓D•]5"5Hm kypgk+2iL>F]`+yWYo\&lp䎺FfTG1+1 /=-,쬚 $YeTҌMn e+Jsx9^)5u<89sǺpY_,=zތEIDWҢiӯN/n: -MNF7B& =EF&Lf.b* Kْ-cUPYu̫brkjqX]I]NfPs}T xXb./u&l$4bL&u=:p1s]= y>oWCm*r7bKfi[Jx_Z3(aO{8mj~k=h6m;ic`FϠ|?V]c=Uj9!VP;c%Uti5Wd/mx,V7mưC2̅_sIHe$D[RyeƦ]\)ǥs"[2F+(@46EyUuboֱMy-.#MDtVKpG#("?w3V5ff,3ꑷ^m#˻ô1]D334hs.U/^;{|*Uө$yQqrtnR1KceW [ݷ/m)̷1%4cPڋJjAg'6$Ť^pI#.V8b,f~ 6zYdDEnY4܋& 4qEwnhZZ[+DGǝc>g=苹WVs\Irley%'5r9V%NMz$%?f&wdKUo"Gsgo5*+Rj2D~˭4uﶻ~)Ti.MVg 3AN*ĺy#ƶ?&#ܮl.^FPrc$Vt]Xq1fbm/cDDU[H֐-tSO_۫E6ԹXr #;]4s7Lnxo5#kc2Ө)xIO$&-p4\=*C+ LZ/&9-=r{s:Eb9P[`Z%3joɖ{|<ҹH#[('Hp:L_.\Lc+K `8RpW^{77K[ # D!VTQ_gǧ^3u=Z#\[uhmP#;X\f=Q/l]zq'56I.dd6JDwђ1`eE͋6׷=:+&۞{$-TWh\\w9cےT&&: f2݀nxq(S]˶&s;]Rݮ]|H)*3;e.\fȗ6p6P#E. IrW$ X,hԬVm18$nT>;ѧR*):Y= H*.%<^|$bM 绚;o$D# NAhth3dszm-, @Z$!b)SSKCץKfHkƯcG>#ʭɉRFEHdtT=(&V2hh kBq<8̦r I=yՁԽ xe:3W[eʘ;t53-p@䆍}5ZOkzr^/U[cڽf5 ɩ|6ѭ},-̟h#A4 ]:9jcqKK[M|W{ͻ,RxQ4wOyLYGknV.dpJ.M$*637^_^h}8yEl8V`5j:rg:17k}*,[=F&/ƌ(*Z!)Uӧo3SYi>䯶B麸2D0̀HNE:^fW0\M5H'Ssi"m֚y-$QG3jQ$>HTrR&.+ˉ6Sj˙sVggr["UrForZᄛUE3L]]trկÎo/bc4nƅu 1uR&H%D8!j M$czNUW;CJڝzDrilcܺMt =kzUS71dci2SF$"/VM@JpQwTTeXɬ+*HUz/ؿLz:^&O1ƭ2={6{Y`)}BtHUϛLM*>Oq.<֤?,-#Dy&12Fo̘>em㵴[cizґbmLFiEیdI\[Ocw0(7CK5>! ɣ__]y\Xd-KW.5I N\k˴^3Q{ Ě&Į@Z-UGUҚqd ]|H~+_I(m\ڼXϏIRU6%]/HJW<ܢuXוIq߁E4\,KىuȭXrƤ3?V.tT/cnә0}8ٳZ $Đ  FJ8ٓjv" )-#tJͨ?clpk} Ga̐`a ` HēBIT:=͎5by-de)55~];uz\rJ2$S !@"ygXmGht:4NVW.n]ශB$ V,OKsgXNr#q1 |8̝̔cxOWʹU Ơ"ݒ9} Ǖ|Xη3ݼox Izq'Xfh*F|<['8Y=k]pard;X3EqrYkuh[W?ɍ%-K(mG [8lHl(Q4@-Nn{?S ~_}ʍ+(Ey2u^~9(^SA#իen~[޶{ ͉FAՁ`uN5BOOyc3,NԱxrs[JH'McטY)eԋ䩁]DrK97A$$1R7R9 DEe~3Ot6{kG3\[IH5(1MLu<\si{~۹Gkhܑ$3Q$}nߛ |ڤK;`Ep#VnPǙq3#i%̳`e(^@B9dxL?n66ͳgMx."5*̹2OkWƻ9TC .Bdlujкjl1z8ֽUJIKD*E+B[c7޳2sm4LS*T!6e$qUoEV\%2)g5D F*4,rͫzEARnZ1֐g zJ.-ns4Z|s^FICi #6VaO"i:Sͧ2̖ܯYKLc$/LrцeYlF$Yd+SeBSF^&oډm".Gt(%(J^jVSK%fzKgsb5/ADK:Ev7IqpޞK\\_KI:rmʚdF0q,:47!W㦞Mu_VtCݤ7*QLօD6sG'JiR2Jj)4RFЦ>s&Omrt[_Y]<+ BDG77s^g[:׹Sdg+ M)5=nYo !gy[lď#6B*:Fu,ljy&yL,kxm?w\30iIJU)ҢM9K~&EYr&`ǁ뮁ѕJ]^.oe{"N p\YNt*MN ;< ݮp/r zM"D)V+иGӡ:t囩p\[IHn*G|riV昴vkDtjej*/g5ˎma \+#s3Juj_yo&7&򦨛=ȩT9ӑsκpjI +n@Vj͎̋kmt["o-o%eGi;PTO˩=;x1y Ȇibe"WQOWK4+"QWщs\Uù5\*]28haW̗gDm%p^ТkY >Μػo$j,yM:h 92&l6}^qU[A,/+%ȡC 53it$auQvq*I…ex\(#E ʿi+N6-Օ@,fB;G%ub[:g3mŲAlu<uU+x_Ӌs1%(@ε.!AZ$qd4ݹ;Z[D!k^%=x٬6Vѡ %kv['\N%Y`A*V.fԬ1k0o~'d!fJueU{L6Ȧ[`  4^,\^Ɇ*,I]]5,چڽMbciy#&`CQNo ͙mU)!+h(RJI _tpGTe;3T!$`F|ѱIJպVqb+PI Ġ SSoc[_ui 1VO ՍH8wRlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/nikonMakernoteType2a.metadata0000644000000000000000000010715010716136374031201 0ustar rootrootsr%com.drew.imaging.jpeg.JpegSegmentDatabj"eV+L_segmentDataMaptLjava/util/HashMap;xpsrjava.util.HashMap`F loadFactorI thresholdxp?@ wsrjava.lang.ByteN`PBvaluexrjava.lang.Number xpsrjava.util.ArrayListxaIsizexpw ur[BTxp$ExifMM* ! (1 2in NIKON CORPORATIONNIKON D100 ,,Ver.2.00 2003:10:15 10:37:08(䂝"0220 $,  4|k,<8080800100  hnx$    # 2003:10:15 10:37:082003:10:15 10:37:08$ ASCII NikonMM*0200@v ~      @ @   nFINE FLASH AUTO AF-C NORMAL AUTO R # - MODE1 NATURAL 0100 -8TVSTitwZ/((w  O/() !ccZUUUUYPOFF 0100 TT/ */ L_000100 {t@7b,4x,D"YN N (f,,         w:! }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?7πIWSes𾔬..J;H؜oMP!2AIEH}8椻gc֤wА`SPֳ4N>: 䞝1B*mXeGZ~D\\z@ U؟1 \bn:j 9U0$qVF\iƑ3R8?Z.3Г H%]Sp❯G8T%}.yR)dc=qsǦ1Op ;܋8x҆#V%;n3!Ȩ<9]zmqQ7! n8a{vU}+DS"#h_v8#ԖOʩ*;tQקMV(n#WR<Ȝ}*"{F8͆҅t>a~Uw"EG=sVa~lb1}xWa\)9K/~F{Z{ v;㞸 ~>2F1ɱ;hÜJn>B;Z,.:מ_|T7xv(qLd|jn3 ,7~Q8>(Gq${W*rnj6{ 8h)# N1M!4]5qv0~7n%d~)01Ȩ !*6Ң` ;YlCڢq=@GDXUPxM#51Z$a К,{KqG>e `L[ڢ@B)'`gSck' x<Aޠk[q֦mcj\u%R1}=qn糹=WӷVIp1Ce8VA *"Lp0܎Rސ@8mː=q7=ȤQsP]Hf=*; t!8NԊ*2> I6}QXzwxl~48׎(S J2捿61Q 8L~19 <0GR;ԛp/)}(=y77#\ϧ&>Pyz#h# zZB`q֣֚?҂8 ak•(9 zӇ+$܃X?/3*`c隰F1T9D A3P:6=rs6;:u}؀1ڢ<Ƃ.Wll)jjL @3($6Q0'8^LsM T.t?_*f 5z :Ξr#*A~|X= =/aWnOpޝ"6A`֧Gn1UDAZNr9-'` 9#wN_-w~ҋو~>£$ nv= DWڂz>\r=LD%OvY#^b*>_LJ62)y%#uڂ8 JZ1TlZjHpQQTNIMy#Vx$S&˩H H<4^E|~Av=mnȊ3~qϰH# x@vL3ځXnک"<)-ބXn~bBG'+ɪqџInjj*r7d㚗'{מENGɞzO brPsKlp*+$Z9b_zVHRːX`N^E=OxIw&RTt1Xg ߧ\Tp}ndL럛 N+0֬Ci\x^27).wgo 2GiLvW "ӌ}JFH!Uv8wi\:;ճL bcҕ wDmZBhŰ`cE# xܡf3\w=:w)[qv֫ PXg$A `}*1*t18=\S7H gҨ:Ҫ0[?7&QwޢQ0?C<]SG>U)qP0q@T*FW9ɨNwc4">P3Q@ӎj;~uHU-:; IîHgڡ*Gց*HMZ qdGn{CWx IZϿr UfOQ'T%{LP$`BRJk?iYgScյA9p2ƪ؁*#|ǜҠ`{J2?Zt>П$Tz$q5z`<'yFz[uHœ4lɷ@ SN %"DGC~Z`N>WN#9C(h>\dJc~I{vW$۞(ϭFk/ǧj<7U I)uUH>SMUJ8P1|L NP:d9LC!cjv:A8'M 8;@FQFr`ZӸ{'d0?pc7T =#R~1 U"$(~KQ2m޹*.Ϡ5ElC85R>`Va=z)qp3ZDF3`QU۟v4^BAr(Lb#83X8Ȧ+#>nxGONgNx+0N8)9=kTj987^sYaCt9$ҳlmaHpqE˰8zTʧtMU{Z)[.9~kBS*NrT^ñ&ӞOOj~(`hG[R=8=8EŨ gJ"M1PdMڒzS`ت*M8X1$6z7_ZZt2C?=>\S3Jr&}*gDxl}zr*@W<秱" lwAy^` nsyW=ǜT =:sHcSۘN;Nïzp}VGQ;ۯd tlIdn ^ɬH/pCԛ5Hc'N{NIZl?&2G=Mq_=HɎd`gZ; ED€+g8}1l8qӭNO´2\HWOЖ?84x ueU2FYҐ9BHdH^GȨ/S uOR7d8 瞝9B*? }P*+_ƫ;= 'ӿ6Jz V' }jz2>N orl0:{TR@B@ Uѱ;<#Vǟʘ qҢaЍDsm^gWM0C?J2N0kg֤v)㧾{T(ԜcƑ`2@arH?Qւ|>JzB{R$*wYxeNN*]+B.v op;SvŻ`ua<vIFs>1X01g֙&a@9I?7f+Qހ>=~Zev)c5B># AʎԮFy+_RqǥW \k̯6'Lqd6qq*g47jR N;{)OhXo&8zczsT֢#0Zh(ALVY[hWȉmc**u9֘p;n*X#د^yϯz6u^*``GKB6r^]*7qB $~5 Mn2b1F Bn[yO}UqNǽyק zJ[mޞ#BEvh06JB`>Lw&=P28mZH}1m3H{(D? 'ZvGpT ɞ3r:Rٖn:/0FGn"qw=)c*v3$os~/h!RlOM%q}sHGL H 8<J;K̝2 ]Ď=K/T 26_nғg\>$I{b 9Rc4Ƒ@DNb.$}qMwU#ߠ G^3ҡuЄ9CifIUsQcQ>}8St+J ʵWRw`sԌה3Pvj6 8aޑA搬Z )kNO+Ow㠥D΅XqKcqJ#zT0-8p){( r;c/a= t<ՙcq$ WL FR"ADZ=ߧ(GHQbI^3ޫq=l4 )jֆ"_Χ##^`8]=T2qޚP$p;a`Ovҫ铏֘nE1P9$HYx9}B7PX|7xp #>xYRD( t늟aҙBua,p3E2|ECsOP@jDJzdzUKrz6@Zܗ=3J@~IyЕ@㟛c<鞔m-xj⧡{CQѰnv9ȡI EAZ"I`qRALSL͝?2=j@8xD9 u yi#G5Q8+޴L@~Q~_^H=J3#j0rsjUU#qLZr=* `s ! r8ckB 1={S"l8~Un¬ ϒߏCUp{'4Cby8B3VWs^sgItҔ 1jH$#Sw4v:s۰\_RD"AzT p{pEEbSJ9q?~T~`})zp$Rp{z'4yAL*6< зAjQI+=j?Q,WwuQ$rzUyF}*U#8$U+g/8OB#>{~TsجKn݌s֢*SVEvPcסG]O͏Ƙ@;%ЛܤG@3FKgښZ p@5a:sڼǹ_eFXvڧbr^/N:C`}ԣ8SbB>BOOz2}( y\ VZɚY!0Cp:tC'_#p̹i\\N?O@BzS #󧏼j,Ryd #Pfiڞꭂ8a\SsYcރ2p<>= ?j;Ұ8#\ƄY zzӱ=ǥBCfiݜsL'֋r5YsH^`rs{мby?Jz=9Z-a+8b5 !S8Rh;a'TX+jRlt?@`3ۊeT Qt'Y(RcXOU<A@xUXcᚲ-ХF}q֟QI PL}Zz!R#lBA ơe{sR2܌W8+v ŒUvepFAt3'=* `U $fm;x=r9N8he]3qW*wGF" K$b0O'T#Қ (ZȰHEfzwaA=hh<^i"v"#b58?΂J. 9AzF>LU"[+>v᳞sțY$-> `A n?xM4GJLv*m 玽 `L[m AI$gP89+`zRIz~8SJoS44 ڡ@+`~4VMI'ޫ*V*Gzl?J}be}*ciШ ̀c_BZ+}9H#9=i uD?QnU'D``1PM1hqT;SjMT?Ȧ=] g<{Ց+z& K`؏. L`m8ϧZ}ӯni;8tk;#fZsհ 1ش$dLx\6sP&I'Vm{뱞~~aUMm۩ 9p=iL(<{$mZp .NsG._$`J/l*&uo, r? t`RvаxTc'UXSNpE?#;"b#! pOX1u!G"ewx6z{ԔFcTD0ڐa.A$cJJIA,\Rm85bc*"CԍJ:NIh\pͤq3Jw0=v(“Xۯ֯= w><p*osڍ+[> ATb;c=*rq0$ ~dԇ=ZX] V' fPo+ ;)y,hz  بor}}(g[mj6 UdW9;{D ŀV#GJE#pUS9'nr09ڝé[ (nr*s}*M #@NAYCR&^OdOmʒ1 08ZX̄ 8i[jc1?#c׆#t 7\yHY"I~Y ^OT"o^>iW ԔJ(! $El~h Smon3?J jZۜOZ :{PN?ZSGnUpaTJ[i{T qҴ%8SSUNO^♟9 $~**@BH4q֜׵U {Tι*ICL*)z玝* oz%wf~ t&?p9fJ@D &$ʐjGRhE_8#* y9*2 4'Эq׭.~jW''J< ,r:*x'=qEeVV#UpJlvZ9ڨ dzd XOlTCqRoبAVQ߸e`p2BÂnt!;C~?ҫ9M.d$OQT@'ր[zU"1~5W^ql :w%ezr}*U9d)@bj;|#S!=={1,H T9}M2nڭ* Vs`} ޝDZ$#\p}*$8WlսCFĊ=jcZt"ۙԼ`9<1Ӝn)#RڜGRhr} @nn84ez03E|gmV\~ \SBMTӓTS$s׊o˞TU;uC? 9`>׹5رu>ݪ`}=*|QmG@'ڤ 皐%;6q欋@jl'SҮ1HIIt㚐/*_U9t%:* ;IyZ0j1H$i-QБǥ\ .xR\Mʣw9(;?j.bVɕ NHA9 ?8&9=E1`q۟E0 ןOZ7$A gD~n ӭ"*0#'$j^c ܪ{}*?:x ӿj?9=Kbq ]q"̤w ܟzE=Rۂr0 0pUnaJȤx3aKbJ ?֫P nO9T(SV<ֈ,~|j#9]b@ʑߥWewB,urM@sс'Є {U'$g>TK؍#j&=F:br1Vb7ZkRt@t@k&1r*Ҏ3^3=YTyRIPOa׽LܟʨK:nqX v$(r?DZ[?UR~sϥ1t*mQn{ZC'y1N{r>Y4#bfӟU;v>̨A ǥU, ,;ju-.($`O9*ZR#4Ih&XqRs*Їk \jރR*fᐜsHlp i z^H`zPbNؤ=Tu,z-JA p,U!9Z1'WIdǮ-̄{,Q>ƈM?T@a$Տb"r~T0H;ԍ289U29ǭSB"e!8zq *iTg\O^Pc&,NOLerAcU GU ۞N3ZԮIvLC ]@qI?J-qނdu9-{Dʽ@jQ,m!pt-/^=}jJES }8*`>oQ:݉#&>"A>4] @y"%:zz/|)l;rpPxjcX njR Ik[XV? cV tɶ^d'-pަC{U NOަb*cdJaHhݿ 4XEvr"+9A @Vw ;N;vZ6N@ '=nMAJ݆IdR*^sMǜ{RB^_Ґcg'ID@'+b g㿥09W_<sIY%v3lj(zS`r1T^CzgHEf,wzUG8-T -֪0IJ+IN~D=5 ,8s1p5S2&'?Ρ8qJK?>T~UǴ RW8jN$Xe*Ӛf{x9juR0q|S mlʮ(*K)XC#WJFqb_nhN7gUI)(D78kX2{γY>W' 2piCDJԅ+3<Tn[ѐ،cհZ;BOPj;1Cړ^YC A(#DFy3Ҩ9HwW<:nT3U܍?[S'sU29U'95El`l9_T'WV% G$=j 9fev*\c=$~bi8^~>0Vy&GmI=V؀:}+ ؑFN*4r @9c ­ކ'I[*{հ3;zOAS{U^O:ҸPI'QwjWp|1Ҡ9돮ho̭&8jp{ x}1SLXxBO=@x+~t5~e.4V8 Q{Rg{Ul)t'!Uv+ 8֫nZB;U\Ǯ; Fr@los߃NwЬ0 Zjc~r%ҭ +FZz9zסKS#[{W=FX?*Gjͫ r#!ɥ@ G"e&s:̓+1Қ%)Ð0jOQ;I?.V ʧQܲr8h`V9*7GqԿ2>q ;VҀ.){94ݼ܋\Ú/1u ^ R:^qO™ Qsa w8' dg>^T kMMCy;O%bWkgbEs]DϹUqJ@Qz^Dީ{ԫG' u9e}aNj#O|Jlvr=9H=QkHzQA<֏Bǎ zK~`{TV?:JzBes7j2{SEXr1TeN1MDqHx(J0L}lUfb=>T1`vԆ@p+8-Vcg'j\͕s=,oz+)1$zUF=+DCeLƤSlh}v*R[H{t€1bKV}?Q!یh;ۥDj nyzjd56Ӄj6qs&QGn~,Rc]\  } d,@{tdd~u%g9_H$9 U~QRdY֠'H\IUpYsc.͓;<6 O1ER'IPO#޳å= VWcЊYlq#>%&`\.yqm*1ȫ 89\ zTI#~2F85%+13#ΕSU~8QU\=Wpz5iSvpQBzn隺T`{t~ ؆@ː:UBp1׵zwgp;sR=I@lGZ w99P QPBn_Jx5[9WN?'ޝP7pN 17ŒG=x5&W#LPfd*L/QS Xx=j.^@vHZ O9() y椒qT`i:q=*翯g{989 @KGqZ;1ʦsR5B*qYT x}ie>9NF9Ȧf մ瞸!#n*uqv# %7~2g)]p>靄y隶CF\{z z =)$=jw_Iv}m~t2c383 + ve[f8}iis4 Q03ZnMԟǵg>w<JP)>60*qOԝX1l{v!Y3dulC)1?NxOV-G ,@'9U$?. ?AT%N88=*.X}%89z ȩʅ+" U2:t @83زH>Ƥۈ"ز4@S zqdry=[sR٭$ku*aIO_ %.u Tʪ^*ǎq6@;ҕdr@aR9=sL.Ic;͉RAՀ?+(CV@447Ì+ni杌lь 篥$WۜxH5AԨAAQ߸╊ +HW?9UvZcpL>5zfMx#Ҩ:R%Zv'nzylUQnFHctV&| AYO;~+r2=zI❌[x眩Ug?!Bܮ?*"l~9Uc+b8FI1'$OWW]CُNixq~fpOMt,q<޲^+!DĄ `U21TgL. //![<jNi2H^0Ɔ&LCJӆ5Fo(CV|'R\߽\>mCb DuS*EFjBQ1Tː8J ʝҤ 7oj# d'ʤ4b.GvR1$}*EцSR85UP@)6L$栫$RO~}I$Qn*rp=AF`z-$U֐ Yr#g;܃wQ`㏩1#DltN+1'VsxYLvUbq\u[XT_< bz`GN|O'+U35)6zi^{p:Nr;Ԣd3Uc+G`8}{2p: : Ur~w'̮*UssU v櫖_ր>A3V€~+Pd*NqKZL`I`g4ȝ'YxԂ|֬ʒ> 7Ad9>E>psx]ZQ=qۭL:F&U`/QgNTp-Lǎ9jPr3O%c] #jP sQ=XSP}2KeTS!P|zi Ah8Ojne7q@k9{wHOA>zn2Zop )o`>nMr{zDlWf=cϧSWr?ϞPaެeBB@[4E!'sj pkOQ zzS<8Ȥ/3ҹYݙiF5iS$*aY+ɧC`ZV .t5*8/0n{jgY<>@*JCpU2<ű(_ҧS t,8=F#jzN1 jf{ 8R=)p=j;SEt❬M`EdcM4^lsʨ3{ V[x>A;kORQ`A^r5fEF##銪J;HPQT;:n0TV2 0~EH<4+j9?Zgԭ@~aҫooU%$.ڑ@ ;= hT 8Jql-*x%~_)X,J:u4Q@ ?P3e:I=gbS-sڦAW96-9XoB--VN\M(ywnEjOvОٜEL1;p^qavIUb=Ԓzt}8LhUߒ;iA  بRLH'ߓTaǩ֡2#2`>eSۭUm})/fl(ar0ZnScBB>U?#wamIvLR`Bܒz F2=赋D;QCf'zE2@gknG'+3YlA">=s83)7\<ƚ$'k&jNr9>_#MUL9Vmڭ ]T'9QEv8?09I ׭36Bs}*8#=kD'QF>6`1^$t_ZFkJeܠ{ ӯs''zu A<Ҙ2E\dW< $G911,p{ p-1T(x09I 0i3bZpPP@7'ڟ^aҝT:Ta\{OJT3=0:]z hCJghץ1~U#`>"LP[~7qHliWa$~r;h#=1?ZGOaHh#yr:eMY=>LH#ROZ:TZeBNF>~:Tdr9I+c{dhV+9UI>F8R.U95X Lb89'8ꃟ3HFSXtYesjg?9e9`֭Xģ!*$ޯbJ {ck9JDޅnH^UfUcV''jāВm篡x7f O^UĮzqҨr 'zyV5ѧPO<֊)Ak;l[UcQ~U4+F ZI1&ӀZW9 5``w%@]@wpA.qv^j,[B|.:wҦۃ-WЕN8皘AOvKeNH R.wL2@$Ҡ?΄"Qǥ8.1} "K]3/Fǯ=#p>U@Ե:m#iX.213Ttْ@*<|q߭"B :Uti)0 ޵BO5wN@8DTg$ǽ RZ3N|yT ʪdG@ӌrsڢ z[bqU*l2USҫ p}iff9PJ#5'r=}(Z3]|Ynˌ5'${{Yp[Q.s׸;9,?:c]N&bW&S vS'9QA5 0Gg`G<4bBsGsUy==*~TV۟w4F@<"gY: ӱ׽EV$Yl#N"pL;ԑ6q橠-R5e1Ͽ"6-b>k1оpSUH-NzFj~?ɤ"pqޚ0֕d` HؒeSjԚ>:`dA'4{;gStɦ+XWZ' ~TCxN0CAؤ0 t&@8Ev?)T?@p!##< XsZ VrAr*y3՗7rp R1*ĜִCݔUs1H:ʌpک'< [f$<2(H{qc^ڴH63$>Ǔ2=JnNA>NL.zdxǭg <>Xe68zzFOPi*FIpW%F8U\nLe6 gޠ򑌑A$,gҩ~}K3I ګoOWS?QÐ*^OYNmˀr:z@Ҧ\:R@'ڧ qypϠ>ZpH=e0ÞZopwqRG!bW> `ƗnyL!r H9{Wp_Υ8KeOOSd`HO'$}E"oi?şΑsڑ7ĸ)短=܁kAZ9?*}ȸ9y#?rsNck;E'i㧯\Vcw=ѸL#bТNgCwr>RHNOBIJsHlnq*0:cґkr-{V Аosڲ؜C\9+-:7Bo̠z{' ؋N~$g.9U@Pr =;6CG_Z,Egw`>OSU[s8QLd8$LXqH<'V? yQbL8#BNHHIU-q;L28B@1Y2 `V4-^19$NG>NN6"S;S1ڤ_c9|tӟ}!n޼LOST[pESfʺjHǧj!^y֋v/̓A?aAOƚ%-t\r=1VfcqZ͓jdX-tld5}@ɑ[ޱ\1ҟBw*4rp՚()YܧVgpzb$sިg#I9M+LpzCԬg'Uf݂ǞԗaUf;=MU?ڭ,*`ϵ[ ڷh:ԓ{t.p*Z #l3$@Nh *GYS瞵cT"˳$j%$`ڲh/bw t Pʜ{UFONyb,;6OZ/UݻU##A!==?* c'*N{ \HH#T>X 247'ڕ!?6N8)ZúS8sҳ:kȣ5 :,5s$P@T[nz0J3mJǐޖBW+=&{UK{ ݴGcRMm Tn>\ ~= dQT` #ig޳dl}8MkNAOƢ mMʃ}EF3iXcA'UXB@ֲelcVb9?\9Q<Ф͖ ׃|7 f0@ j9T Onqy"<5_%XT$W#% )QcgJ An\*Gy zS\•՜Zf9 '$VCHIf u'X.$>c3Zd'yH:trr1K]\ҎzU\));}x<~-nD]@}걐Үn5lU:I8d \Uv8?G3t[ jsS[ߥbX`KFC8]zzT!Yh[Fklbpxdcځ?"T'KsK Ǟwe|,@j [>0Jr8#^BB7x5&=EU˓w5#Xr;V=L)mX=38(#8L62dvH=+-#f]>ÐB9=vE.R980100oo(o,,x! }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ??( ( ( ( (?#+ $cz8_ς~D쿯~3k}t]<_m(p8ǧ]@H#5V}??CJ82g9=}:Zw\Q12I迯^B+?Α|rBg3{mb8'|,kvwF!;%Xg(pP{:Ntej/?;qA<=.j>Rw>2[?A"arUpߦpH ?Q(wguzf199qZȝ@ ّg'x<3ힵeu12OnǨ!ӌtuaӾsZk|?%2N{dqbNy_ ޝpkX;]Li=?"prFtzUT)7|'J+6=)ktW ƌp ?.քqCc9 8:Vse^FEok~Qa|Ķ`:x]x8;q}qӰDyϧ mer1)*v!p d"$P׷heR֣Ϳ>^0 6#rO:=0^ݸ `w'xJ~FVKO> x6&6۵sJgo6q1֕evn߁Cn6?>^HpUs2XcdS[_Oc>x)s!Urdֱ'.T܁~_em[2_,D ӹۭe2A'?_Ҵޟ36~>]oiɖ<  ^NZƸIa׷Oʷݳڞjwy )Sy>5}">o?.{~9:M{t r zy=+B(bp@^dt9׮2eRNV_מ[:A28'~ڭGS'$BO^3֥fbY_b10\wpHA3ҴR$ ӷQǣW3յ~]EAmN1۷ԭo(a '#'OsەUIbz#Ǐ}+2Hv6\'ȤՓO 6fOF[~UYbzzor7}R_2 G%?bA~=s/L= 6~q[뿟e}[=N$1rIr;uut s w8>Q^l4_MunJ_sN*90:}y=I\`pA9;'=zY+_B+fq$ n2qqA^6lpܻ>}OrJI+JHP\2;#k^+fuIy889#8i}믩SKk~j;p:(͞{yd1z$ 륕ޝ?g(Us3A$qYD%A!Uw}uަѫmW3rX`n=p;=>,џL3+.o&^?Mq7Fv(@쎹ִӿhLպv ,NNrA!R Xƿ0sz{c{#'~w+u꿯ʟ%B[ \N1{ OJ Wͫ4zl%H0NOS'B5F8߀ހ^R]6=WOJ(HPG$黧\|j\'#OT_?8oO?tlC`@9$V+_0 ,3קqұ5g{×+.d}zz^T0vccq<}kb+nUq :Eߓq龟ܲmIXq;Rl|G~cҴfz9yvBᙳ ۏQ4cp1\uqҗ5je_KfIUy ;sr \{wQ]O?zW4nW~˄sO͌ϡ^'B2Wwˑ?UCwuDI-9˜dc Ƹb31;s]IZzK{[S.|tlV,2xN;oy]:rI~ۮN1ոqǵiGwg;G,30קO>Nzmocջ-o Q`ӌ~?O]kl}0\9=3ڰvw]6.ޟnAny; ?oMx-R8SE+mTyJ? 7m{rܿ6deJֆܮ88?~oG~4މZח첶#u1NNiE +eUے0Hr=.O_Or2/Eiv AllOՇ<~u igzEjcŻ*:` }p3sǷ @'goFx'~zsFʒ5 3qTn"<rv@ p#'?B[O]ٴ-ʑ8S gpn͌ѹߥ\t/Wo]76 g.~ űqp}b寗.F[1$9$6}Gz.`qʤn( ӊN~NK}ilTQH A%O#c8kz |;6x>\r~߿=)zm5ll~A23}+ U<y o_z+Y?̓~_/߂ ;NP2G|zՎJcO'2qⳄ{0mӷԂ!²~8ל~A'<\bsogÎXs W#qH:`e +nn94wI%&_30@/ܒz9]qG8cN!:]_緟Cc gʛX`'P}K\ݶ2g(wV1.;R ݅g\ OLq\ڐ ?|r]zݷ~בy2F1rz\̅z`a~F׍._!N-Sۓ"˩9 rr'vAz}oNQ^# z+濧}Um NSmN=: l*1#篶3qN*2}˧v-E=AʘlHCp:`s:CY^_^k?0Q;p?'>޶sÞ{+Ro*RZw_㯜8nOnA `T򓎝'}(~^qFI_[60'a+t ^ZpܜgpQЌ3Y{[_?{-y^3wq:հ.Ď`-ݬ?ӚW~/b&Q̞x;Tg{I'aHA>^v0o~mVܩ wrk I S wOJ^EM^>22p!N29ӿ|Vldžbp;[L簬{?ב4{Og?}"d@®rp#5h\'$u㿿9տ_o~ g%_o']\I+7_0gR <qnRbX |??nk'jX[ob}[$\psvs8yiגw|}61*%qrWWH##s?ۧ?_~nV[%x^~uo׮5u>iaO`]ܡO%}іϧowv}KGvq('pS_\vT9r9=2 RK]umͫik9A*rXoמS?¶ t9-82w*q^ߗ7-6$ans9y<֔K>@o9<俗h'>V?˿̿=L=M](~`*IUG||z8{Oe'nv p@V #+yc޲n_ll|p?_Z$}ۓ{_?%˹I$9ϧlkXLsOaOQ;qVN6Oԭ[y]z\礐.H9 G˕;??zź.X' q^e{_qP` 2s\>;Ԯ[ OF<1w/9oTWh9i?7${c8qwxR|{VVN2zc#!3vtJn( Xyu(k_Gf۶>rps]+r =3*vri?Ÿ@ 8;[=s鎞m@$|h+@p{;S(;m_^өn31HH󁟥jD8\>iHS׎J_`?M/K]6z`㑌gOz# ={ONh5}3=/ZC`0'Ӟ/?tG=Lk!E]/8B\ Îys\} K0ና~#+_.~odbO0/Z6K`\uɥڽnZjVVyޱtvyHp9 y|1㌶sR9~`jC/zij`0-u=y~ $ے#qNW4޶W_JZ08crv۝`6yn]'kIM?]eqEPEPEPEPExxlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/nikonMakernoteType2b.jpg0000644000000000000000000276562410716136374030224 0ustar rootroothExifII*  (1 2i%x NIKONE995,,E995v1.62002:08:29 17:31:40"'d0210  &  .|\}60100p7% 2002:08:29 17:31:402002:08:29 17:31:40 R     "*2DJrCOLORNORMAL AUTO 1AUTO AF-C :NORMAL "AUTO AUTO OFF  FPNR PrintIM0100 ^  ' ''''^''''bj(VKHH(HH   #*%,+)%((.4B8.1?2((:N:?DGJKJ-7QWQHVBIJG ""G0(0GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG ""G0(0GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzx! ?$8u Ň4R"08zugu{UWx\>=ICυ?%Cʭ1./$4՝oeXYH?yd屐Z%f&"׮qE-O<֚py׷?IsMX$<|fSPڙƕvOh\㦩o;e4 +8~iutp }8qLn RU()9d{}EScid7ι{rPqd`J<Ѣ il|Pd<=zqҚY?[q->6f79}3^*ЙaDQ㏩ҺV{?#3ҙ"8ɎmҺv-5o ^M'{cq)4B#F\+'~N:}d);B'n1?Z佄;WPcrx?ϵC9ٚH  p:gc?y7zǂrnVDlSs'勡2Lfan%R[9OHuIJF5z$~+u'[gaM'$=DrU؀~daz~u4d<4#)"rH}:އ %wE,spnyyT)9]1R%H*8YeFJ TW!9 {q^5j\w<@:RD^Es[nl%'C ~R="bvK:S:mr@ls迳GCPOo}sֹjmNE$@c!̃z օ8Bn県N:>뒷̖qPۼ:dU ' WU9{ޥHp9Pɦ&$Zrwv9F1s$쐏8KI,?WZ7zP!V_z`C"'W3w:V`֤I'*Obf5$u$TlgP\[ät8 \ێOJnSM^abUBbzb6k{}yI8<-Mx⌁ʡx* yu-lT,eXI`ۚ\ɦ'r VKZ"UgՃZcj>F HМ>)}I9}{{9=fOd+?z{#T(oSLyU=pikT "}^ܷpI 5 *ҡ\!?,+)3p;N\+oy)I;@ぜ1ڪ׋C:![]`6Sdu&nY8W*5'AƲl:jMJ:zhu 邢՟%G Pp;9!SpqVu_ۏ?_:ٗt; 4xw ǩ$:mz vQ{RV !VPB#z)$Unk$9uG'?x!F $ެOL]s#cmKa},G"02A7LoqףkiQ/xw&Bc@S68z#ٷNЎZ]Idt/&lfY"n~Kdb3k3W07 S~*⟶~ktXy.cI!6egۀPUƺ0!31>)JOB}>O|3PH'9.3s?md7KƌwIKI,<,S A~~U[h؉9!cǾsZsD$t >*A lCkz9#k:_:[o䢇@ïckHF~7rlWe--NN;q{#nOSq33'i'9Q)AskS[kH<@ FON~ˣO#t s)s\&aFH*H4u:.;GR:o4۾u9pƘM[ 7+&O d #9(Kݱ &]RKvA&[@Og){/==Z0/d[9GF+iqbrx޶rB5y^W{kc3pG:qvnf(7Rsϥ>~9|<Lrx0bHIZգ5+}ZYS2J/h'U>N-򕅻sҢ}E?+ruJyNcO-tݿXx@Gmg]Fz⶞W1V| 2l\}9"e,As ,ܤ9,}&[HYK6CҨPv*w u^oζ|4ߔ C=)u+>[}B 8h`yW'rgx|xQ^4NOP9c4ծξ/$Il^#@};3obpH$EM=M9/JȓÌ[.c*cf*iξ'bWknz?5G"#3C\s=0n n;x/;>ZOeay+ϧs\8K{s-Չ$c$\t$?BKZ$RZƶЦ (?ζdidlj7[b[LyAmʒJzR(3.KL '[m. 0$y8c8^q nwBϴYÊEw.O֗<(GC3QXΑ?Ϊ8zfTӞxIPc'V%"$WN3 d˺[&',#m8UJ&q듎{^.\\H!;IG9~zM,T2}Dm#?uSRM˘Iy P5Hܨ0ӐO*{26O߫ZV9ø+/UIk'W4t3D1(c_)(`mT+!C6fKǵ 64oZrSu .Q58W{ ׊Pg{&$#P1ݳwm)\",T ߆ʝg,c53IM_ZݏR=59恵nEY % x*$dZWkUMC@c W͡K'q:÷ 1!Zh x[ҝth[|2ʀA1KnID3nFzcoV#49?ɻX<6\+3 u>>%.DIC;@! ?8QFy>Kc=HG ; ,gp.gc#2U#=HN?s9K#XmNkĞ8fv~Tp y195twwGO/O 󱷴]#p>=tENxdȶ"N8`=y~JwvE"$oo©JtMyֵU Uq*rbޙNtv* Lr{T»1 ~pJ1v7T7Qj3ehgoG)E7yY@ #f۵t%kn`d~@ہ:Q$$( \N06fJJYTdq?LU)Q%Գ2@nAa\},3.c.s]6 M<&]ĝhFC弱I p&}ZĿQQ!`Lc9\f5f$^H% ӽ8Kw+hAgUβe#ckRM5`nT\Ȃ2sОU6ov\WKb9i4rnzU+.W*s4)8PI'Tm@*&OH/Yc 2m&,{)XFRwGI&oxo̷iz2E"{:-b+E0FF9㰊9#A?c~~u$Ջ5JI!p'5f:5F|ܺ sBlgzӶ#s ",C5,nǕV[%YeP.IprXgp>Lb>^2 ep%B (g g[<}3S/iЉ?q{J .&F zr3kϜ^rv)eOhyUc9meA)ߩVe߁\p$X7ksNbf-aVf UFI~+>̇llwx'Ү%nP.Q@B\;5lQ~l'nS-%r̽CasƐYx8Z>Rvf87 -$134eGs@ai-D ֪gʽ]w d[9;j$ߍtS|}x=E+n\! 䞴ۻlr7|+ᙵfo./{Ns(L$e#ћwOBZ+%Sihlo9*=\jv3ʱAcJD\nl gj6\L4`Tu FreT6efc SR%JI11P"[]۬a#j 7zsԗe*]A=h BȢY(`!p-8‚y?b.j*S dcyځ\lSG2(f\AAz0 jM8"ǺKv ppL*lV+]<.JxOާM B,1;#qƳƾV̈́;CY0frG̫7Ђ)4Lȑ,#)EWwd/+:ؔC}]cars vR&d|vU&-G ulfq2DpkJKrĐ%Y"ssڞ<6R[=}2X$j˳ #5BY=x ӵƶkDX$`dȪvUDyOQOzM֢ZFy$> |P[4a}:jz4;8o3oieT\>vV_3 +E I{Mݚ/-nߨK3&=qJtP 3sT܋{ f0;~5~& r0{ӟ1{CiBe#Nvqzڳmr6y.1CcډE5fKcAwv_nFyǡ+Rx݂ySEZAno ُEf[")CJ[ݨR#.d$)F `+$ 'qׯYQ f  Yg韯4h#.";h@QoceXEsh땑d,G#H)߸<ǘ?2Ux7+S^:]#NZeqSZ-ޖ--䲃 drp?IχQ!][+@9@a@ۭ#;Iyg\Ge1*'oxZE!~J8'rZz?nccPyF:޹Ÿ\gtv#O^(tz|ٙIb$qg{翽2BAc߂xEYGԷTQ[<85ky5F2Fg@X>܉;*N}}Eqigi6AEȑ ];*6kI-sK_&@-l"c ӯ$ܐK1&,o$1G#pnCA4rTf[Y2#Q)k`Iر{{Rq.2qjks"QʦT;HקּjZ:\:6˩DAEc?ipI)4TBf3>xw|Rrvv'/N7"4+Fx*:Ӿ.ε+I|q+ב?5k4繁GBko+\M\-\QYh\99<5DeqF\ױx8dɑ{c+ŵ}kW֝/e_({ػaDj`k:tgݗ t"=?OFloBŨ ㅕF9|jiK%G~KN&YJy=5_bw"V,}kEsў nl*G^o6)G2qIvjC#-q=z~b Hd`I Sa$e <߇v]Hs֮'F+Alhxu{͘nEf97iڐ X`?+&J%!2wnf@HGQ[\5iCw~Lf4eӎ1GI-=b?je-w KhRQRyqŔ njX mц rf]Vn6&bEղNԛGKt@9㦳<arK# b~`zk#]szU/ios fo*i$36C HI"buta a=p;Qzk7QyflRP~Qk[S Ҵ[lPfTL!tF.h\;yi".<s,4,h̆;T2@9UF̿3}|) G7P7$[TئAvpA-8tk+we`/SV֗f[ygWRD|qч&Tf73!Xv?X6>Y8PfwM1-Y2jn$l,{5ow$j na?)":='P, 1z!#*U–~*54AdHbTU2ffimag'bC"ǹPTսbUm IfbU qޫ\Yeרzp))X@H␹gPeEx[v 8swB.1-{owNtVhxje)n\9rw6y"rCVV  z}y[m"So?!@ثF=$TSPHg= ޞUpRq`R;'$,8c:DY(H^) H1󷧹5xp+ B ó:rxA5+ؑ)O`pZRWM" ķip4[epFz$v[)eFvۈ= ӊ杔mԇ+[̥YdF۹d֋òѯ2GO2FzH|+@Ovx8|ۤV6Ht^y#]L6ѹ?m:Qݛ7N3[ICckrrybdӡȹ+̭NV-OnM~?ZX!?rc;"˿uFj_q]7ZfU$._C5% ͅR}scUkx~91q$-2zum:tL.JKu_VpHŔ4s7ٗ\g + ~&d xu- R }MYviAC @ iwPYןJOLV!L.9_ $Z|s;}gH%њBw4HM(jv_0郟Ҥ{Ìu  ?Zۣa;O 4>;-<.zVt4w7)3ۜ'(2xxZFĭtmI9s=je_C\o%mNOP_&E }FM;L gn8?uSWh;s2ZMq&Oh0~U2It3fYOqc9ӽu)Y'%c6ڝ1ΌTF?J~;z2&hdvǿӭgV7)nzrmV83R9G}k殀Gf!g^w$F=@5`t-M2VHi[hRcRyz1`Ic8?JVbm:Uu+t\;yq*_ӎq<.`qU飒 9sLZv=?Hk)&{&h$sҕHvgP%$dB?`MDodJ3*,kCp{`_\L̊HROXeзEAnT֜;,N3FQ5'+ؒ֩6om/ f@b=rx5KJ#¸e1iGgR\ *Lё={qᚻkPC,l@a#A׿Ojk&$^]Go+>deAjWvӘA@NMlίj2=\^14Gs6@Vߵj_,q|!vƌ p}{0AjmbK`U)'=C =L*Lh$vҶZ#I6^+C8# 9MNg_FJnUGpmhk=Vh.-aa"+FF9T"bvj%t(%ՈJ aԃ޼J4G}%U y o# A'aRkR}2S~9&QcxA9Uy%j˹ЉxCtܒ [=:+gi(l/"9]9֮ZY"ǩnihL(cJdokiC\w@2 8?fRíA?o<&s.,:̸~p e*@F.G[(x =) UcyG0TV%Hcg)M"sSOr f׆eԵxQ_9Uk'u Fđx֑ZTW3#HNةJz*6N2#7֞ڙŵ|2T`NﻵVRuQ #/wsPz-|у-0rv>~5h^t+GiH!dt⬇?zWgxtZި2mʟ\Qe8^3є|<6\}(ǰ;G<~.-I:6mz*)ǖڲrtmkڴ:,`/dyd=+"bI,Wt@p!V]YnevR1#_mˉ ()aw0WB/Q\)-<]7p̄ߌuRBXG5TYXRԖ 7KNS]cԑmY^u{.~?JNMʧcmԲhr)D8 WB.3sӎ+į;/յ!K \e 2k A{GNhxöZ]BgicfPv;d?f_i6 tZMl;0?Id3oͥipX#!#G#h'GEQ)- 7Ԣ;1MA<`TT@cI'vsISQwG&0%9 U; p¶HyrX#5dp*v-X8?tAW`POs܆{HsIV]ȭܘ6I9"q43 K#E a-ivzC?+$Mo?Ua1>bO }>n1~f,WqR`rriX.a< llZבĚpC:pͥ ٷtM>ϼfd=h:V6I c ??rFZN.#MXk{eR=X{ dKjXW&%ԿcʔRz0tzWI r 7?J˕D2pܟ1~^I=j܈ bC?O^Rr;⽭烡f{kXrB1}O *@xi5m f;ʑ*nbm.w- 1de[M]E'H#LF~l{Ms릴3m]/Q`4N0ȉ:k[Ν7/7sY%&Li$I3aTWw SH̒ɗ8}jm6\E*qӾw:FdǚU[B+dxXW :`~ӱ蹎T CXzgW^I!HqV$ <܃$yO+/@(⩱smjyQ;ORx^4 [A=Xh|q++9㊳r{c#8dh # F!Z(Cbqc9D=hnhڏEjD߻I Bq}IE9:?6^|75=Z;[yWy l֖H՞(鎕ZL&xeF#kGh]j׷Mm9N<2aS?z(Q>_钫pNG{WV6D _B( *H]T?]Oe 8 }yb~3O2ZprE4Zy$xdj-ž^m~^RQebf?Њ5^nNeʏrzLQGq\Wٮ4W? n޾)[9;ZSg9齏!|3MopC٭Od*lZCpr@qA$q0!X (T$$nO W>kFx1*^2: BlA@`E2g SkuW`)QS\#UbG:0d`\.7PGvp\hz?>Րr{:~][ƥ<7;[-O nn+m.O5G2Yn/ċ$@ }ݤdd~c+ ~"6GsvhysF;Iբ+sEMε<v10)8};~}@=Io+|y?zT8)!g%o&̌cԐZSg5e4Q\(J6%Zƛ ,e'T@ZG<,go @J#;X+>GkĎKf6ݲFouol|3G]D[?߂o5Cq[=ˌ!G^?oG3CP8pB:uZCE17&i߱X8[Qlu\W&'twa B𨐓֍/*+ ,?Sa&1E"^Z]|9/ _ҺjJV D Ď[ZH\ܿβ 00F9<Ԗ+Mz5%2N 9W#獄xu\ v&CzbQ}2I^MG9;=kEPjM(lfgV6"0'5cT0A(ytYE<%r:RpQVuKy/%v֔*LqFȐ9_R/aFCq=֥Wex+ 3R2Iy,zKg$9c~n8,,J@`}kёƑhacB淡TWXg;Ww,{feU t0㩢E6hC"bV%d^p$-z{LӚ+fbh),S9 j +N~֫{b0OgU(lt>2JOfS NJϠu9:qKH,N{1}Ϧ X9cHʰt2*sڢkHoIj؃ȕ%Tu(Rjnw 2.(`~\啿ꚷO~5fl}M) یZ99~Q`c܆Ip^;U6\(ޡ HAqkѢE.Y_>"D̍cFtLbJ-p[x<:~4$Ly[,*V.p2@?!RH[d hR$$p#@ \`nFj'qNH8\oKit֊MBvpdg?\@*x4Wn W[BΊ>i@Mw:~ G}Tct4jbQ˷B@irבYQRjfVvmIn37]9?Ji6<7&Ȯڞ?Ii*6cx;? :GzuZw~B妢Ӟeb86wǞyj@b;qNø]9RPxš)dRXiuY|G9+,mP!=O#hd&_, XV= cvE4bHFY֥;3&kIlQkT*ź*FӍ˂x_ ffnGb5qwg^Z,%Ps@t(K alSIXSm -p(Twf¨M%hga=ynբ=ߺ<6}ƺ4 _`Mz4i{;w<}vnĸx(ĤC2P8?Mҧ* {X+ɈXTܨF- Jr|r~.o3X9#ߥ7zR,h،E{G#_p}H(5Lĉ;0].$)?:$n 0Vk>{hS AuHf*s׃S#Bʞ~X^E_.VWI7A(N?ƞsA\"ǎ-'Pνrpp?O'U 9^ZN9o΢zϵ؞NǭKO%΋-e[zǰ ws)W&' )#K w֤[7đ͖u\8RVfTtYP }>]cxs !)ۓ3ErΎ3ӥ]6ai7.[ T+cq#՗qi֫IX?r0 8TnG!{"օX,v}?^>r5mYX'xW7f'Iz~5K&ȏz@6>~=L3d:4-bj۵0C:8%R|n ?cYH͏QA[ Hh;VS5{wTac .tVg ODJNZ"Xۗz՘;q(#r&* _ Mrs|%fdOcehk2,5%LJ١e[Tn``S+[X7$s0v#R[s\{xz䵝ѰUY_D8?i hȒpze"%! -޳g.N:(pNOW%康eɭqSɶK+5+mnf:v|%ōsE_S\SZ#I?a 9I? !ծlA9<~dλiFGZ|ͳѴKB~G&?j٘4͞7̚F+bI ƣj{NnRU)t-תtU!wG>$A,d&5-\c^xm}z®. W)ykrĖg<ӵfށenyEڤIc&Hn[zf_Z?SЃ@Y1* Fg5=W0D/o$i$w;r:dz-f2-Qta=3Va<in&< $2 :#+D8$qΕy3EkP `:Yi#"(pޓзaU O#0KuZOi&>֬7 c8T  fiH…8i-s3PHtt$j`ϿZakc & arXwۜUK^wy~l5n$q U3V = mq? y0s۽I@ۢmg؂;;i'NVW}F,uOIZ]YAQ" `u 98\Ϝ0dW4{${UR+dwVS89nJbE{0I?Zicav4ƀ^+KϧQ޻ZB{&ļAWx˸=He5HKp2xEYu|q@M4?f_c 3A6r9~oi~9[m2Am836oniFl#A#ADdyo/:|hmX-fTLEz \j* /7|pfbIJJ5;c7q}Nȃ ?,-T]EU5{;+KsEK+h"@q@:r,同9J5nPhotoshop 3.08BIMRxMDateiname : DSCN1767.JPG Dateigre : 668.1 KB (684158 Byte) Aufnahmedatum : 2002/08/29 17:31:40 Bildgre : 2048 x 1536 Pixel Auflsung : 300 x 300 dpi Farbtiefe : 8 Bit/Kanal Schtzen : Aus Ausblenden : Aus Kamera-ID : N/A Kamera : E995 Qualittsmodus : NORMAL Messmethode : Mehrfeld Belichtungsbetriebsart : Programmautomatik Speedlight : Ja Brennweite : 8.2 mm Verschlusszeit : 1/41 Sekunde Blende : F2.6 Belichtungskorrektur : 0 EV Fester Weiabgleich : Automatik Objektiv : Integriert Blitz-Synchronisierungsmodus : Erster Verschlussvorhang Belichtungsdifferenz : N/A Flexibles Programm : N/A Empfindlichkeit : Auto Schrfung : Automatik Farbmodus : Farbe Farbeinstellungen : N/A Farbsttigung : N/A Farbsttigung : 0 Normal Tonwertkorrektur : Automatik Breite (GPS) : N/A Lnge (GPS) : N/A Hhe (GPS) : N/A  #!!!$'$ & !     ! }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?*k|cemK#]Ag*dvg9 #{S "W!4zsN xSSE@MJT 1IkM2G^_|N-BOAa^Vj9y3ժɟWIr?ҧ3qr2@Ltࢬ7sm]xR%i /k ҥg/}?#̾(|Ov6RFAϒar+xZ纺yZVf%؜IC:#Zː\5\}ӓ^)hPsr;UإbI8UۃJdh]Gު6/Um,y"c#rVH4>@*Խmn̪I=k x&{[%<떕κ}9s}owۻIHAB}V=Rx绅-t+8$@>+{%zT:o U1׳e޺ (Uٛoa{Q3&*SSg&!q+A(?QwjLvick{P-0 `}OQ<<kt*2GOq 䑚pkϩhiwc烆9S׎?Dr$:0ʲ+ޝC ]T]P+>h(((>nޥ+15XTlK-Џ)F;ݬtin܈|<ÞqWя-43z+t($+ƈL8ĿXAK5Nz7W@$*)lJAjt:]V#VAr`SRl:kPDғQMG*wW6>2iKb<]ӱFڑ[,GIW-8q면KcZu}WB9gR9T=^xox7E5 ,}ƹYwφrԤ4MB7:)Ix\W%Nj؍6*#פ9NJ[M3(9=? -K)ݞpQx>DXG],.ū;d7'{\ 4\vJ7J&akBӯAɴKO{i5\:(h]QRÒNԮ F[}.u"ŒC~T6=6K֋JSZ\|==9Q*RS~W)r"3PpG?jq`3ӭtߩȧp±Su% (EPEPEPEPEPEPEPEPEP^'#~!דa,+s#(|C\*xKf\I-y1q}OSeIRN~n T\r;dq|^`dl#n+ͯMT/쥁/!ϹӋ>c@+e)Ijɴ,qʚglCpi4YU[4ppG&}VKy%YۍsdZzH\ ȩnfil@CN1{Ngfb~~֩ȷvʭ(#wZ & O9~SҶ㿸$M>Ve(~z.!}0B(v7ŊipWE9+)Ks(G9qomm(ԸzRw_D2{KRk 'S%@WBFMݠSUsMIP]*NAj5)5}NVdktEbpkheEog ;W\Eq%Vew Z>ч|P.u+i6fX"G 8BRp5WcR\}Sľ'n(oZ UspzcQ7k?=\ŷ:u*a68Np>ro5B[WO$ֹ$85ХP9a!+AWE5ˑibU\|I+{!Lz!27Zpi4Z`6(Vi6(^wt✋ظIVᴒCб j0s,On~xD~Է`4KBGj 8t]~!tXvT9ktbs?mcQC>U<7|ϱ#+L<+t-%ˡ;6#zc?JB y`F!AQѰ(8$eW(YH ?׷{S/IteNuݞހU`s Q.8z1u Rm&:g3*KWS[UPMCOԬpFyW\nC3HXG_9XԡN`s:8]1b5 ?[ t*`eunbiֲإ_ ǡ?S*1OXEnxEPEPUu^R0~4˛cIrOd'W:V͌¼`'sZ9E.t7>`}7TB; TR2.gQmMd1۪esj{ YXI(fWSy`s Œ3GՀow57Eֻ5ĥOưO%q$}SfhM}i{2F5qI* R5iZkKȖ[yH5uf ؇M&ib"V, b>_֩7t0VppTcqc$(Yi~^\ɾ*p;WGE<"O2[qYᒃ]is_Ф=ALN {c]G;:}ԒG]$?]$/ʿ?xAy7%gK\ѳo<<"@[&Sh?tRP8K :`Wujjlc (b LԥԠ.i@{ 5M2SӮmVq2=)(8 rRf#'ͫDЃL9?JgݝMKE-5ϫIڮ-CfFk4|i{F QA9?( X?ik*$eI+6)횱aH-bmbM5q.am ij)ZV WsQ@Q@Q@Q@Q@Q@Q@Q@Q@x_-RH аIA?ҹ1j݉\&~!^O(?ʡukǂ#utdYNY@V^e*KLTjs.I/nXo ܈x3>a%w'9V*Ӧ;Ylm7 Lxm:I ԐyH%Kw !R{=[Z\~4I&QZwy7.G=3W5+ '!!xw^"KR⷟0]j\YE'pGhRw7Xcsq]߃tv[zaM%+gĺm$<(7w:vo⮦CjJ/1Fhvnqt,O 2پt#9W6YtZ+s Z}8kSʅi*+;!Z5!nipHVcӃkGEZD %=kxջ4THmag,qp+|-[m\DqAaYTd9uHqLe [<:R{e ČYP7n B+FjYIR<;UE5.Uq~4GqŸK/?rqsMdkePrs޽Xl[II2*c9Q4xD4$"{^kr[D2v"FzVMJNZֶe:WZheRmx1$q^|g( }˽;GO "d=  zYUt$ΕrXȻF:暞 ³pkXbi N$N{`ʝ}{|60Fk5UEtmmDAG~hIqGaHWzU_A6Ifp5Tߊ&'nq lեr%h4!_cM3hXw]Ɛ٤;m @9A$ m\ ;rOZ6FSͭ,nI\.U#wzk̆dE}iqZhgj̑cZ(6 .ށ.w!^(I6 W#@=6 fKMF҂MjΨ{sWl.-h>9Td[9TRdiӵn4 lGU-"݀J I GJ0B]4~qէJ+HO3 ¾+^VܳgܴWy2_~8i(Ï0iv3cWO_3_Lw;E|`t"z-ǍYeWiտgXaRi#I&C&B _^fHRFS橬/úēBX0IuZK.yWO$=)5 +hx)Ywdi<xhm yp]ba^)WCQu{4_^]Dq-gSD'|7 I J2QkŔ6<޳cvS/̝GHgW5{Ns^sGfQ7 QqC>UǭJ:eVW!/a%;>F<wI =Q"ޖB#$0(}t4h3Zl5[3DE䞝+4^ N.va$#JVtOb4(wO5u/ kHZ VLeP xtm;Qqw5r%]+yUDr´>VrGk՜YQWN:cWǞ$<>S^A.eUt5VCUySG%դ]m,7gE:y6c=kA#IG"FeaG~W:) \n3VnI=Ol>ɱ&'ޤQGCU{;XeaW;yq}TC7CU+4SB0`ohj) ww\1sU70eUY:7#(VM{US4Oy,VJ=YM yqɌ8-˧;pfy6Xccq^ixɹ]&ncN X[mqW!WՋ5ܣZ)+G[ZԢYB0q| #`\3MjqTJ.4UA$s^$Oغ;.6=N5"֧\x>.61b̫ڳ2XmHlʩkkծeH0,hV5JOT[|>ΆZ xHSҼ-HĬb=qM+Ӽ8ew|bJwf$XurQAi/#YZ<3[¦e90r; u!AVօJGxWNGﳥX̶VgsLZi/,D 1“Y"#05+KF2 ܎Q@-γo5  tJQϱjx74Χ2 }TnK [@٪BK* xrNTuWmo[/dgbI'9ɬ_EFRG;vy5"#˃Һl8;dge40yy$EJT.ş)0WhkqvInɑ MlhMΫ[iQnnG΢C|5zt>SzjZK6209\3rQThyOǬϮhPXp}W =1h'#sח^~EsSr vQ}ՀQD['-z|o> {,$1dUQ7QB;OE"@#N]H]!ҩTHkۻR]U= Y}ڲb;z+ ( ( ( ( ( ( ( (9yF"v!λ=9l}:vGׯ<=#0r׶^=085ڟ_(+߄[dTnI<ךK\@z1 C]WD-5? x{ E438;I+^8Iji{t.%?>x8^U%53pQ4zSG:oqt?J}zQ@ɧ\k#ڟڮH |p_f#Χ)'Q+om!c@WJV7gtM%27"$#I#b+dkxq'.H+vax+O{}"?Mb_^$9tV0j7LFXQCe95Ʌw^gEm dz^&ITc 8=9=*43eybV!e3* $jj9QBtU4뛋8SE>q0;ZIȳ2t f?,I VYHQY:X>ީ8Q1bsΧ5=iiu:Tb-% F *tFrwmB9b{}BS"C2=(E=8Ns[ȒƒFw#}Es\~fwIEtQ@Q@Q@Q@Q@Q@Q@Q@WeT0]8ss\ᲗSS4b1cznjH>\spk„v-6Ɛ;i! '׭{4}+;hۄ1WJ|sӨ[;}y|eC*/8嶒 \{rjmz\j;bPkQNZHwǭ>͠+2q\bܕI{ĺJ%aY6ך %ݪHv#z"e~&Ϋ-A3Ȭ ^Kc .}@ɪy&kJ%(Ժf:wkjȃvfl+Cn$2l՘$JݑzVrWjH^-rqQ\ޅ<TtTl#wYk;TkI3WN[aE+4oxNa3nW25ϗ'Pk r"/)g2<@?PӊuEhXʎGƱգJrG4V,pc=]>iyn]U#L-MY7FWt$ÐV7ZG~tuU\d2Mmm'dE+N+5-B%Tu+?JKSO6H9!oמr1Ys䳳o<[^X$wq3n?Z-$\q$8vIlz)ZÜUAyp?rA烑֡-l[W%RGO\Qgث4I4)>q.UnXTn^ys}h&DJ6 KF*Ij.6{^\\/Ogt剰3]qL=C,޼`JY4Ŝ 't)Y]$T׌hx=IHh?1V3Gn>%SZЌ/#} Z2sAY|ݪܤ<@ zMXщ~WoK^sL#pʵw$^קB+ʓV"6zBdl UD$@=+ՕV1ԗ x^Vq=pHS6@]Zִ-slbJ̹Frݱ]\Veu$⥳,QdPڊDMtH#j +srVmz8jGF;yE;k6g޴,,gA#F2~R,BR599WO ܜ/z檶g=/t bk ٙX,aOa]Rf%DžRX5eMj;[bx2hLg]xb}XUj +5K@]clj5- ,) J})8m1 [O"!JU)vvJPz6wiĪZ[ y 4HI\wvL76␌w7}9Wl@CئAԃ&dT"/{,[l\xRq^C׽uKL=Fh,-c}5(RXo r2ˤ'i[v0rk#\IscP9EyUOXZ.pqʼj:T+W4Լ?Z\\ mBdT݈t[6;Nq*W9a5-$$U-Q]ypcÄ=ȯ?n/mĆr~S*hFWf2rkNeZ}D\} {nu#KB ɬu;iB+f΋j^}, q+=^KbpOzMxz#(4>V5GE 9ӑ5v?"7%BʙկiiD:V,jOf/TVvFދ^VP4UTw^MOkidIU=1Q^8g.L0X+X"Xăi|)G\8Zܾr!?qgp3+˼wkZ}jD#; Xrɮpc񽷊!-:9rw. "hzβ*im0G9'Bp(+SRt!)_ujBҤ9|. >֬SsgI$r xT. O܏:Znuk湫SW$guw1G >ρP3v (_Z%曩H۟=Jtis[7c;[}4׃i'of=&Ǐ\r`u!(K=@̜*ږc)EîrS:;7ik>EQ@Q@f\u<88Bk:#MsHޅ M]opߊ.sxGwKn:jݵ[J$ pqڶXO9+Q\#dOEjrQ@u mSLӯ|##=qVKZ<=Ī(&GGYpEsW{]QF,6-c8ބw oɨǣJ !#sǿNrꄣrƙo{Ia:fAYvFnISoU#rU++JNBUF ZN@ZcZqcAHϵLm՞mKQ·sp@oF8vM7Nt,c1ŝ$ܚiIjT[\N k}q-8'IW]v,`YHlIl>%-|xa5xHFm8'(@gU$iz;$!%OsUNW0|Eb2/<5r( ⷯm8oG5c9ΧRQJ>e)nU]b]GoE-r)y%NM'T~s>.,emX6B:c rTʐdc {=\5E((((((((+~'xfUVc%fT]; .K}rbs9&62RǶkʪ&RO4jp7$q-K*wvбS SIj=xRC]\"m^}xpV3\}s^} qm28Ko4iG#V&kJeSpsڳrqE&?"c#seqSvݫ3zSbWmncHJ.G+%tJl4 r}Ե*)|W[=2GK$w'Ҝ]s|\]$d*;n]|PUq4ܛHJZʒ[L 5=l\$Ռk{kt%}+ԵXKfrc #X8+mqi.Ӆ|q}LRpH862$tRF*QVeYwCMԅF<tTVqRTx52)ӗ,.hu4,siw++\Ji6 MzVр"15Rv&VKS8Z@z~Q.WE[Ƴ渣%&y}g+O74A*5)JФ0u&KW4TJz caTv<n;a#8:R&Kc42S e;/jHQ^A  YbJ:8e#bd?^xGk:Y>z&ԌuW2_؟w<8SOCLh_3P0_6=ѝNQpnyY wP[Ń Z ǧv(HƥmQ[U&:],gWA5wI ݔpۨLH}ELL"2֡p^cQk!ȯόm>!1̽TdםCnRGkzӲ,sv_IYe7d0qObxj+68Fi0rICӂÚTM-lSzc!I4? 4N 枪JVYs][Z8UԶ6osy^Vވ)g_ ~x7IVT.P>3僵=5f~[|ZFb*4ҎSm/ jэq qלV^-StoȦ?5r0Onԩ8Jj=jz#$2*ϥ]%8l fuVƍ7 ߡZ]2XTzJ@zm4Oc8KZDg#8ާH(\ܫQZEP^w"' Я_;1vϠԼʹxEW˷OXfmu#؜cz'.:̠jx&:8ī:Qeuvvڍ%@9d +~s4&nrpOБWh5o+J]I*M:\ z-t[H/N0kJr@QG=CvҨn`Qws֩+,Kskcagn#;q۰ k>%,mRE,YL9כ&QCbܞ-7 X 6S[Vvvƣexּ$ BvЖt:nx$Oc9Q 3yaF79>NRrDٴcXHQ>ХL] =XYu+/&A4zFc Z7B%׼S'LbLmeb6ǭsv柒=KDq=b1W sk٥%()#ΚjM1UX& KjI&sKJ(#w<|q;յX.YOzJwCI?uF@ -tQ@Q@Q@Q@Q@Q@Q@Q@W;`;DݕϟO=HYz+5M'h(ɞuwdeœB3׬jmiiCeSR}N{xtj6,RBvJFA9 ӵH'|; ykP5u#DV "6T!Y4+/Lr٭o^jZp۫)ɊٞUl6-p -\6[#c#fPv0p蝵8e԰-T3ǻxdBED*4᪙{ە\G֛T\ݑ[1[}€OZ}!/Z]v7":#8i"b q\xEGõ%މb¥G#MƤ2Y'6sr$1ZKUf[kB;qJEM*Чysnۚύ95sM-/1z&$Em hVF}O*TQ(SmDΖG(yrO)YCWj- 5#= r)q)N1Uu.QV?fP!7mdeK)+@wW)Jad*&)HʧF7 &ކn'H_mG#Lt>}Q|f҅[kb$dUY|7w;qWJ+s%OfF=EV6s( )i2mgtm#lXɻs׌UVI 0)'VuNyQhФҞM ;jD9-5v߃ s]h]ݑv`A[ 7{XW1i^:ԚF R-neǯ=G4&x<Wu˔w] ]+c?+|& wEDPI[c[ ϶ ٤VjJooo6ň}JpA󮯬M{ry#$=kGZcIɨf} 41M_q}hvڝ*m,cn2*!G"S9vXȤ݃$:4,5v( 6 ֚M8 "N줼s0 ϰx⽇ƅ j-*]?R\ѴR}9UfyУ~)P}O_ĞM. ,ۙWSa=.Ěm1\ >ZԹ>C c*98/un)PZwWts W^+V*q$mR٬͹8sZ*jRMꤻ4kb(cg+׺cM6IܝlquV/,NWKmIiR9uʡN{5m}~c5=>8((QUQtS<PEP^y〫DO@Wd:8S1ێJVr#r2p 1ţ״ߢX?諕Qej^l(2 ( (=Q#R*}/F`ojO\fZY8cu Szsjϡ&v4WџQ@k:6jЙZV ifD@#k$ǿmϫ {_3h;NG%#YȍcG2~$\u#+^ic 'f=&ՍHs9Eٜ_<_m{GiYjWTPs?3],v77@2qmV5YЪF*p*P;Q]FeOV>pE63GV>°+IU[ 2ԉv!~os\~M"/Wԯ{].:N2IsJ8W3}ŋZL~YF1Ma|ӓi"))h8=:kh"OXll 3uƬmĤgw}(J2miq;zT7׏kTJ?vG~(PlG}#A.A ?+[&?_pFYvJS{[[]BM=˖*#mӏj.Я n9zTaeۥ.YsZhYocmwSso"=_~ڵU(31rvFFoaʺ!XdlȄr2}뤐aNX#gSJ޷bj+(((((((((0*¹ neq P5 oX5nX/L漚wJPeY@y&a ?*IwBI33ԵOA{ 9,IvXnXNJ?f임*Rr: #i6wZbYu:g8Ԝ+H5;+^yfX f- t|Ûey@C!$vJR5e @ls ڦpdU)*\N&aZZJ>\<劍= uݲ*TUwLԤK=?ߎ9N J\y^&Y2UT}7W*Zu.|֭,2Tú} NcҳRiXN\ѳ$yVjjj:Sc|Q3Z&f+gޅ&䃎q^uvw}ֲwէa\A}0acyamqo"I-𬩭L+i$ g՝Wᾁq$[{OA]|l# ٞ3$M2Dv~IcH6zڰ~ZQNRzhV0޺k=6\+C2kk"Vds1Vڜ?.W9m=+ly#X~\ srxw32"PÜH*9 9ӗ5KsVi㽍##mКOҚ) 0:iji-&FH>xKwLE9$'Ъz9,aW 9c+ffbCGO@9nJmsYmnЮ}c+GkqXFVnK39W_ qm\ӭ$w.[#<Q$ӹe+$n6iƨ {PvG{/Z Fx^@>iHǞceu*0ybڀaZv{pJ)CڽBԉ(< yӽΚhaAp>nsyAd?PEc;jZY7-a#QJ֑ -;2C|Cy1_,2}iI.ڦlYXn\?8P@WHd g=*/VpI@KH䊹okE` m-~Wa̸$V;sԖ:0Rl0v8`䣱1jG9J_g`Bh]hAci?z1A6lϒFx)9VwHn6z!XeSž+>gAlzʬIGO5?./>Q94&wE#j =tc#pqVG%tlH9銥:OoU?j!ܭ:Ϸ3I19NEZao\"[E* ׊JB5!-ŃD+n1ÜU UQԦαj[Ԓ{¡9Ca4ӦH]¹j:;=4KoĠVDdq8ju:2OO "ys U6;Bª P }+NUHjMBmv1D\uth1cdVU[y=iےmt9]sZň֪_|<P!;L֋m VN:nyuh=UR\wK?2h4y՘e q~0K}8}+#zTr՘bq F_\33 $92+|n[2֬y$sLl`)+ɀP*OWrx41## C$p*D\4=ݚ6rM r;<=C_ 4kV@;r}^NimY߅>gO/Zmj ݕF^ ~'ӎ^C9SSM]NjlI|_g>ڶ@8d8VoQs̺g=>zF?!(>'`_O7\Ե<9u=-Kg$<_͟{y+pKX_xX=B)t_̸|X!B0^(z tP|ujhIi|qi"k/cn2nO#r ^:j3Dͭ.׋u5%$mo;!?1~J#̫SQH((O@7WB0@ώ[W&.S䵡GI h<ǤH,!/x)>4G#%ZNٗ)z, ֓_y<7`¡ԩ_Ahɮ *B(+|` X:EʋH(}Ή" 9Z& |߱>=f'<Re\a_F߂TgRRS((-s>u dY1\dQ7}s+:SQ,}$:?$:8#H>[a%+X֭HX/%`?7^{tfim m\i/<%yd'hHU:B* =֒?ڸbMr\):,7QcePH4Xd'GNVd>]fe]o^uܚ&U&YlgoCu\-ja"a R>QMZn?r'Vpi2"xʺvy9oկI >g)ܲ`;d_G^qߵ/^ k3o笞h*:5Lm%򥐸dGj/Yly1M=M_My G5s{v 󘎃gd)2c>]VXkڅ\8>!ۀW6Z]46\Jmֹgl4j Ѳ*tC9I(m.aQ8KYc(Λs q˥̵E5qs('I ohvO8>K­9jnYx+?}k JbrwBL3mrqy`1,(Ck{帎Wܤph)%dQԺŴo#pzVutqMڔg6Flea~L r1R۽إ-lyrмOr"Uۼ9oJWWfU.Uh 0zDŽ<9is^T sUpqUsݙڵב|RdcUM'œ7 ոJ6ރ;+3YPfPby^Mwl̹y5ޡRjOBS-1#+CC"P: GkV& .&m3O=+ԭ (nHHHWڳMhvV9oZ~=[RS׾kKeڜ}0Dϸ]1ڳHkK9\,$HMq.AnǑYKRY}RaT7aү0:Stɹ;uIE qN|1 Jn"z )$ɟB:7VSs(5F݆#yGLG-|2 VB_LLOLzbx'm5I9EsZ[rOJnMܦJfv$"0a`LDBzXN APw=h퉓낾5,vL&@tD`aՍ{xɏ#⤆jniнˮ:df2؀ycХ~fhw0GzmųѰ7Zݚ@v%sү\d>,VHyhQW"cPqbe"VLe4۲'&o׭_  ؙE6PyeIV\'u7S/ǜZ f&|8>kKR֍+&Ƌ( g"ڛ} ʒ4=kEjOҰZ*^}m\7cq>F7 mFv՚-w .ͷ")]XUZlC+wN͒d+\ݵ0wcOw@V4Ը+#XHyyeÛuU5P@*GZr͜\+}ցvDO5Okn'b6㚥J<{S&$9K׎ }&3x{Ɨ1~H#e?-L Whx׈5oxcT5=Undf2v Wk̷v5RDj:.899L'# fcBd$- ,_ 2ǟjMT.5SwSLāT=r K}Z O5cf8}i髽NþuZB-̷~V9c|k?t@q7 ĄPIŒ=O`=Pêk▯1T}_^iCugi}lְ@z):i5i#N^4'u+# 7lQۃ[~e٭l)-{rI=I'O&cRcj$Bf '}ïO_߸?Ze,E|bq_8a?&}je qc4<.nˈ'w_?:L(((((((((:́U#²qmktӵ[&Ue.VYN%!Al}kѵ{iu {#.XtQDsOxM>!;}ں]'h8~r1I[SeO4Š({ XMS$̪P`Vq G|ENHi9q54菍6sI^.mǽN@QcN]=ZWoڧޛBS͍إzR4敕Tcxq jzZ&^ ǰw))S M7yl>wKkya Ą_E*]Zg^Q(L(((((((((((((((((@V̠l`Uҏ[(9# ypD.sP+ E0 ( ( ( ( ( ( ( ( ( 6A-M 616'F1-#7@m4.D<1yRY_t+%&{tf&4Fk+>ju6YEҎ%w%eb<>soJl99=sIQ-9'YՈC;fnKrinM*w1stWY^) (°=M!&7Ce.n1D|9i\}"fJpJ74mij QߛQb׫>ѤԲPF@xU[tЦ9RiZ}~]oi<Ҽc\ӵ-UFPF;dʽ\>)J\Tõ4˾m]]x%I ﵯhXhcXHq޽xKƢp_i:<ٴnkPNs))hpMlX5 qn|z製%ʩ3LC]0kYpujFudwJ}Eہ$S¤뺺J.L'.##J~lޝ&Kipgu-ڽ$#15֟^$ ..lpyeӮ/'^zsh ~33U=ц xG2ر}.ZF%$֪*Iu(GVcO`YX=b%iǭr# B9`y~a줥8^t^tid'SJKQ1pX{TAJgRt&MC$[ɤנZkOo/fk@k5Ts iݢ Xf q]^,IcV騴nImqmeh<éF&Vys%G]yj]ccy,+铔kNӎTWtẹ(\YbdG>jQMG|SCYYlqܽBճu,\!v3p$59[*2|4@+,W7JSTZLrz $ung;Dͼn89GWIvyߥqr]W// )ҝwZl8Kcb[%BOLv>[@ @70EKM;3т +HZ)KZHe*3$u ++~`*PN*iMKqՙQ#*x^NK([5q̈f-nRA۟]Ķ #jm+jfM 8_2'Epdq҉JǣN2YI il[S~nkRm_O-tϥg LG󮛤`lSk] ź<V kf[uUqb>'޲w.A4䵹o̳SB[uŨhg^J7W]f5IRgAun[`3 +7X?7J#VT~5)FM[%~9r1\g QB † ٩ch圓ҦQ[4nZMFqwd戮W.l@63ҵS[[T '.AkVqz54:ITv=$zù 3F(:l@S4ri#HޝP6ÔԈ?ЋNҡ0#_ @-B\]5v^Mwj^yQ@I_⵷tKXJC ~#j]֧yie˻XI$yғRAF#tG+4ێ>YֺU77/ ҩWZt,$UpV+]cRǦ(ԫEڣ=Nj.&Q[yqꖮưxcÚ[5?rOa^g4o&39nI'OU{ *Z?gEC# ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( MzgK*>vj&L-Wp%Mǒy ܿ鵈!XdUF`\EK‚9 Z>5ȆdV+4w "_ᮽn?k|eSU4TL 0Ǩ\jn ҦQNyE`;' I8 7T >Stxj^g(a5 {TЬIA~c+Oc(n/gJLo\FP$F7Vl 5+Y%:Kqo5K|;޽Q車I֢HB881_C.Oz_i:507c 5z*pۇQ8[T)R/]Z>h$%ڭ0}}ktHu6D(ץd˹Q2CKn F0vcoL~FX"V݁=Xќ$vRZǽȘnizɰB&]'&ޖ97gj)O|"YJkT ws[ž[RۘMYUfx&mv'7ԟDKaQ57Q".{қv)y.4]$O# ̼*xeۆ 5ww^yBlޮ,E~NaW%4iy.aV8@k7DdUKg(+i+up[[:j)^5g=*9PIuֳ䬙PeI||nYlsy+FOg@D6 .#+x;%8KlfǤP͓W\2to3^/󬝚%27P?Ur'hh=(5 xaX&1jVOS;*XwYCTfBJ)Xe@R|[vnH}j|&*Xnkd#V ub;\Pr L!Bǡw&pvdq\@ӱK$M<4RNi% :W M^U5ѓ$#8l7>n{{5SYu0kTR5 .Rv>"{b 5M4#dӔ.m&Ln@N$=+0'j%N$ަb+xm[%k=L3u)nFXuZьW]"M6j\i6dUSķ.C#FoJ[xD*MuZ{8 (fQ N \r8z VJG b~xVZBqd+׊ 6OEaZ( V`AnBsRA)6h7lqn =%:ei>{Iqθ#䝋 zv5sg^QͅQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W}Q;cj]19tTM,Oc22 Z54b[}lז$TOCtXi[F\,0WQ\xK-r6 fjn`mtqN= Ělzm.L{قz^:ä;#&e MmKSZkFDO*ω^B8ʔۀΧQ6#A1K)[kx&`:NE6 v(w [EswnS4җ.D*qFs Ij}oyWE6s46lsZlV}PtJmex2yWܶ&VMĖ~)#Hv6zֺe$j N벓i39s-_ťljU'IU:0S>ev*s$`޴쌰I*sU;M_c_P$uSC"[TӥeOr7yA\U$pzVvz\еܛIR: g)赘!HAz{csk#E@FAȟJ70 [kN{yIb/_ZCTe RV%|65$3xnKa2=ɵQОե? ?5 |ay5x@L~]"S 9v\86jZZ|`Lڔ Y_Ҽ_lXybæIfgY;NTy?>lזѻTعj(BzEYȝVkEh^20iu=(2mܼq]WF.M=L4[ku2=kN8y铸u1{"ѱYxgJlZ2c ghor);"mNE=5uM4+ZF"X 5| kԎO :hiv7B^dFҳd,df(]u,zkAñ ں.3Zj.Ő*4Yw(j Sn[R9 㰹su&W"-l-I,}8'pB}jyUD(`) q9MBoYn+%Mݕ"eTU]*ݴ5tJcWOb+R#rk(٘N-;V}<"YQ֡FڭϵuBevDS( >{ 5vzM(R@ W=`wsSZ(^b,[)&$qPڒЙi<:p NHSEc2 O8[#qsin Dem 彋XbOcCI#k.Znhɼ~=j MA$Oe(c6] 0ȪˍnƉBl sKvΩ̨Gr2 -5*0GFWiG{֖KӱqFIV@dk]%;Ȟ- Ɵ*}@~V9m^ 5 $ocy*%YxA~JΚprOkUn6ܞ=*$ާC#;^HGڻ'+}iVC(fݑFqNria7`)=rՖCӀiM߽je \H6.=k4XXaP /4ב'JpC+{;v KyI]KMV$+񫴚jV+7R)]{Q7%&K渕J耆^95~OssÔԶ߃d6@]sMJmpJCnzUM]>Yd]029u)IE$n1;K6񬋟 ɣB;]4j۱ vvJyObNK0F 09s!oV2 W"BwR{ #-VIX"u"[S~OZɓ_6v0̾TOP} 1u%EmǀF; #)9s]ڤg]ܑ$zq Xw{We(7 3Ir' rW5s aDFF\GJ.3К$H(vL{% #>rf_@DG-JqmX/!'g ֶcz z!b!IQֲ3ӌwbTf]ʲ( a6tЭZ++FkLQI$$F0+ɾ AJHXGߐqJF3wQ*vY l*:E7 =)#gʌv5ǤH܍qVcbCs(l4e,Iw9#>ZN8XXϒ8XyGLB%\Kg5HŘ*W<|$FC`mJFһ4SW>vx]o`&:8dƺg!Z Zvl@B}*FYQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Px,sD")"@Q@Q@Wq ~7YujZ;JX?7Xqҳj&CQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@y?x7Χ+?\jp! ԰"񠾈o 'f8E0]SrIZLeFp$T*#8r}3Yr$+:r\4;S!l#kS/<:iJk gN o,4-H`:3yRyXyxT'*YKv1+Udn2yȭ\UR2U1)q\JqV47_>ji>[܃$|ԟvGczsYkBKʃtgk/!ģ=TV*9#?f;LPh۟V:%QN 9=kN6NKhÚHF-ןֹIF6+[NqOʮ9FQwoy$cszƾ׵}gU !V_,NI«mhrԌԯI]GKc{̯ )y[7jJ 9U65“B\ ZKuoUlaº F5 ̠S”+m ]"Ib˻c]Yߪ$2,g=9ZM-&@#n_" .MKLN bdhm/w!+mw?t AEhA#8f-tFHRz2zZmf!q"zѳ$56rwXsQj#17-J%NAI6c,Z4 GzfO0>($rpC$^XrRdzWcV52 RED9Ezfi=ו^8<ZJݟ0Ocӧfɿ澕Q"溛BYN?vSv3#U[U^{=7Gl֩&6]nH``Â*s"$Q("1(XʱL1mʐՔ.NV0e[&H2Cd܊2#liȠ jւӨ>L֣RV\󊥢 %\5vM#H Rڲ>zW2NL8+į~kFEvbS_gq\)\uVfKsg+2@=踺0b?w.QJOqÑOXȑԨGzNRkO%r9.HI [icUkehԒ px}tAk lE d[dݜ1Yg9q- "&01G'b%x m.V&if+\ÊyjňX9)$iMݗ,|F1v5_ϧn VA=Dɧ1ms4 w1*sڔ/#3'ނ۠}46 Kgͷ2'ژ1`դڸFs'>r^!;TӕA]HJ8URVַCE`[^@LzM5QwLݱG _$LYw.}+VM;.;ԟ9ϭZ|s]+r*xK8sTږIHfaC=*vK1.,t Bɾ몝ێko׉<.OkCRēåvTN9FEF4#$~g4WrQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@ Ey \NFN z#ZeiϨ26KB@HShvԵ\BA*K =Aji%wqĠ-%reR13zeĭzUx4BRmI ܆8{~5DSE<+4ʺ0`؊ha{_ioyus^qmxHo2+ :̱ }°7Uo- U4zFEPEܞgYhUOt4=~b ( ( ( ( ( ( ( ( ( ( ( ( (9Ʈ|0HOFYXBLK6*j64P%G=v^mummO:EY|W_vp#l*jju-zp5vrv'[M) Lr:G,·E:or:׺α" kBO191լp-m ,{jW69H5~?LG\tW} l:ZZQс5V8#<+?${ə֥;}޳؀YAuL-HBg`8& [ N Q"p}+^3ۘV\"dFch$#}?JшmXgNP4 wYx %f_VW1kвmWOҰM@A!9z\I>-ϛ -iֵ[zN qƐO\j7t8TM٘pZ5Y%Uc*hhՎWmǃZmdoB];Vw'&7Һhw͘dT,$}R63|Ot |}}>CbBZJb;ڵU2&NwP+Iޣn|si%m՝D׋䨌dt FG$r&WVLʤӥ1hN?.}A9-bԥ|g8gfAW֚3Ec`T]8hА38$5VЋXqu#s!HҲ.,cep7JRVI#$gNRghPj>z!Uom`t ZW\j5tBKqU+TWHE_Y"p6lqiqb^E%sXj+8buU.a{iqNIȮbo"dS Zvr`t?sV%Ѻ7!8NEOIpT=MU7es O[LiTְo-"ʤ7ҴsVӕI]1L+BT8sQ#5S:}X{&#mGQ['Q3SF$.Ekz1W\le0et^X|/A+)+Jwv"WOIի:$zY]Ʉ5dU &V( .RxJ4$j9zu &ʑp\ƛbH4rzWQ'Ec8&eʼn$P++]r1iZ$3EI" nW|8ma `VLљ[ܸ&qV& "՘:}(4$>&ӃH]l]ݬs:ńȬ|Hm~"qӊ֣VMv|w$$C Z웻:kS7R`VkcO%V 7 ּlLE<\T>ZuyV8tkK V'&dbqVfljo3-({w5 X.{Ug]Y(qx`hi$uI*>8NڤxC]EQ6FQ yX_Ԑq69z挔ʫ>s&I,A!HwҢYl ,H'ʑ)Q6uTҸ/lnMATN4A]E5suQ0JYOҺKh? gswe۳K6OJ%inJOҵMm"ՋՀ GW{u@d\7_ƪP䶬I&GI T+zkuu cdhH0}4B֩]SFn'$WK̶_,B4)Kqz[Dz{H FGSCl'{Z΍qm{yӮ}9]b髣D6D+~&bQSqIBZF.Vc9^}mݕ 8⋫9>]Mm0,wtT` joDܳ?,1%`{T6\&<ϽfZњMzZ_I%CtK i{\Sصp+#z]2حR2B:!CJXu .CC$tGpS`;: ->B˗52vQ%хd̛B ~:lN%u䈭2GH9jfdX6f :w,$5M#*;Suciha@\R u&Iv&3u6>bܒ@T1cG4qz9o= 椮]n)P#<`Z t4I.3UOY"l>-X }>|Z*b$cZU>E>zCxr qp}*Ms<$Iku&Zۡ45;:WUR9K9zqVtN[RVS{¢y#'e8M+f,Fj"7. 2L9:FS$QF€:;Ø4"x\"#~{*wΕ%\vUB.{/5xK4Kem3\g"u5#jGV[XNQ i, z]%g{黣 zL2[baMXy/Go/J=V?VsMdY"]Aq{}lʍNgkXҢyY]O2Y"LP@=z̽H_Ha $vU.j7RYx.1_Qr:Q}F5+:YkbZYPfzg' )(@ϗa;JM^'nqѩ*m-i74-XdxQv#Gi0O8Hcӽ+X3?hѺfN{n?F!FŜ n/6%Q#>ƋJ2Q Q$ f"8l_Hqiu:tߎ6 mf#sG>Xc{uB2ryQ[3{ۯ?weMGZFKT {2$?,DobN3ۿ֭ 0ifgpH?zT@ 0S)/TOF@.' _*eeu -G,rI$5 gp (?4z :Fw=p&Y ۇJkt .-bɒy  [ 2{PބXFPEPEPE5U qN>664D=ŠEr:ff\Gr¡jrF#|[q(((((((((((+/7ZzhYEe '_\$ s'ptkgľ*4ؚbyqɸHy%;4y *=P{&]񎄚&;DRNJfܭYWY"ˆ[=_:m{;[s(]]_ ],ݤ6oM>K|Akg{K)ޟ]Z n:<-RIo䯧ֹxV/ jPYH뽾dbN[V#Ģf30}~붰o[ݴw`$"vg=]6tاG#pz1H3t͸HO>E^C1n5 ˂ȿ(<±Ԧ "6T#dwu;]"hOQz>[$"2)z\[Yz.0Q(hRӒ5AxNڡi+%$\kjT,L1=kĞ[i"*jshOD vݣ` *F/m<ApSA>Ƣ 1Qimd %@+v f)=:Vp\5=7Ę Ý+umB&Snボfw5d=BEn>Z+Engɬiw9>Y6`xV> ~Ўx1Ѯ-+_U{Ib#xt jm3˖Uݍ'7R-So.K;C$r5 *7U+Dԧ\l3*DAp^(~}:]q!h=jjy7X`dr3\m;:-4 iRHUUa׌֬-'Ob13媩ɽI6ci %QJGE . _4gciB4!$bO_j_N) Ea)tr34SHG 鿲C\wCKtr @kGGDhZ#аՠ3DFr>_eWG-#I٬iч*!;HPH8,t"khwcXu$RBGG҈'' 9ר\C[J mxɫvvLƅ$a"菆bmV#d}^" Ž8}kԝ (ԡ؎}+qs̿ ek[E3̇iW^s> @V*5+rmnG?\qwlnhǩE.L7zַw*ڮ/D8:z`g+~.~5YӠ">e>"RG6jZmj۠fGj3;~nld0ȫ?c  ס*[?|U[q%:PEe=5t5{M@֬[u+2s:q`Ś84rZMj|H3JQ0<֘"{[[y" >ҡ3&ԭn[RQfs!vWiװ&98`9# iܨ5t #'xY:Ս}cu{U,FQ@RCv<_}jÓ9xh{+ƻ=Br@1jIGבB"xrNN}9OľSU>^LJ,vRPOS^j;Y06 LyR)uCQmD6ڏ4T!hC"3PcI|7֧\"źyDk ?;W;xVEMOv򪊺U`CSx?W zWAxĺD-a jw9dhh nRŇ뾟GJbN?ϥ=ͬ|-ެ!4$O$Zv\Q'Hdۉ!#uŨ' +ję\GJ#U=#5],XWﳩJ׋l|Pڂx%s'OX0ҵY VM d8=}EyHe̒G#=+u;KinQj 7 ۢ-f16ҹӋi1 JnzxzXGьՎܡcCsew 洛Lq =MrJ/c&%m,w!/9Tu9E`n30ȧO̹͊ZAP ջq6jДfG6*',p gWº/#e |>QG\ܺ E%gZFgxmF |V?ழ]~f@rpg5k-o=cG#|PnzŲ ldlsՒzrTRR]mhWF%u [JOzMmG~db2)jlK1$:qn^m AY ԰FCMkRrtmlZMM7+װZYHnv jU's'cF'h#_Sk'.6)˾P{K % 8dTiwt~1ִS*R[mXR/ypwА:UJ7+Y ֦!V&zikF8fMjH J(~+t m.pqֲ? BF#[I-rl763IⲤ< ǎjj5 na%n[X^[ń ͕֕Cnw55}BCfc 2'CNS"l(+EhҴsܿ1ׁlgN7jBm )x]عg|vP*xmC0n hLԚܧi(4PspsGp$[=Hkc2wгX&Y">;ktW{kv-)w42J~6ˑvx8\7#8jڒ̋C$5;'z5U hQV"Q_QѤ:UBmА ;m%sjƕo !Rǥ]4z6ZB#<ȸ d n)B)$z7zѽ̿wѳ%6$ .8t}:8Wk0[ҭmf_R|'*9Ŕ2Kwj琁 ]djG UTn.ҜS[HcG=)$B Sox$ʲJJy9j+/cc+"GXWڔ;Xk' ˙ҋNfd4;"qbz֝Mz290`3EEAЫsϽRQKVIA qRpM r6nk46Թ/T;~H_(BWHu~Ϫ>x}bhCcЅPp+YÕّRԓp+-xTl 2[r sTG"RQYzd} y3^# İ8c˿s~kR:$*=> |Cn2?ӥf&Ğ5 [XPI5⟴dӃM|hΧDt;Ɲ[P *|o諤h?R \Pd?W P9A-Yr]\LĤqbIf..'DwZ&n^O3|+/K?xZ]NèYSPvN|h{%l SkYv!Pւ~ԏhx0?I䟠twHiRsѤgY&?''io1M+!--}dwMK~5Ŧ֡{4#<`)1V4e]5杧KG=ӳ?:k9gO,4l6pkIB~:%N_g9)+/Q4zf_~مp'=䕓SZ=f{뻂HØ@d$<ƭ=FpEhVse$Ŀ&^iZB=l$j |s)O*clg[~zZ񽽼fΣKW65רXYQ(O*ï\Ӿ4„uFAOʿSX#4>x.d{)vڏj߆>-~[Iu%$:Npx9cR hzVs& +zAy fko?i#%׋$2iv3)UXqM Uի>𗇭 HNRIX  ~lFEx|TWwc}pnb_<>$X-t6qdqIZMEչjESN:x+kİE-3șIJ~@|?Y仳br:Ƶ( *w+1);1ům' <` 7޻ʔDXQTY?7BŶ?<޹ou2 kΖ*%eS $`# Scg9+ӧNSm{Zχf##8i d0IM2 ҟ'k˯h=}j,b1Hz{08 Vgt-G zXn;J3̓:dqY[[eW~{3ޤ:?)+UJPiK<=c{sie$dݰ*s}QaeZmaHS=v?AV!JJ̱A ) |W_⾫h);3Mq;kHPqI#Ѭge>>K!Ah?7kKG?ش}^F\ݛԧ$lu< :GAxw|I7I%p&HʜʜT"KKGBCInJzu (Ⱦ+[7>Y1;F*&vIv6Q[Q@Q@Q@Q@Q@Q@Q@QuhZ` @?&&yo$S<Gp:k\w!?VScš }) hzw!7<3 Z;&(˗HZe s>eGLsSyub-*D ij޾ͼƄ֏z . .H >P}*Щth-|A52D {~c 䶁5(l,Փޜ䣡Liktl1q]Ğ#n5? 5*vwd6黳swZ&CU(PZ߅fCgxQ0t)}iMI2j544;;+_] W]";uWaIAZ:3]?i%ڑP1fi:|*4Q UJk*GZZ\YG.jҪUqY"LJܨ]+k1(s~l%<1^;z4#Qdz\qԅIc6eoaIq ³i6f3"i K9Z6oeҋܞIqs%#OFxoAڡ!<=3$DH^~a^S344/P_Bh#4G<`}z#yJ?nn 1 y{IFrM3TRU j]V\x9>Y=ԧIhdٝ,Ych+c> ;K.K+ܥ߆v hs~գP p#H1 r77\88=sWDefAu1a#fi>PnoZPԌ\ܝDy+AYP3P 6Y猠le'OCsKwŋ(csk[-D%zŨ5mL=;.*#5m>S$ %Yḁ}#9m(s@誔;m"X(F9)lBt9 -lpzƉ-31ڳc[YUAÎkNVEUMHoo8*kݸ?9v;8嶎43c5L)3ѫEhGj0584m܍%e$) ~ԸM6LKm; RkyARݫfR$ڪ\bjn-nX*v⸍bqF구5V4]6Tܪq|#vtw3"{IchI cih2ۙ*1ЊGs;>d{Q{mUӫN*qWWn+W*b.r$\Mh|RO8:ғZvQ=+>D(G3SF7&7)<k%J *Wuт)0ާ' 9MQv;;# LPtE)X:$oN3 c-M~у֩V@ō27QE> '3N*xW2TMw7,,m)HNFyd)$x$ Pa$[[znZWأ%qKU>DJG5]9sJWJ1qJ+A=2}jj7zLE{Xs_WG?i%8uv%˦sC¾NJu_Isg' }H"ss|㔹@ s+iQK.L7a4Itzï>Ծ5>k>c|i5v*1KF5z]O>&p~0OG<Zw#cYsvm"8 3<-N&Kp&5lEiϒawJs[c+`|==bNm/Q/|U٘9J7 8br%\ fl7I| ( q9`A+-}~z5P^͘_B*Uā23V&(L?k/:'txΛ}9OPX>U YIw.Ԥc*mxvN\I(HppjX}\͒c`>8;f?@>kݳ `_-f̊3lvsU@G`:Xc|-_#aTHMLW;_ /|'w-Z\mr MCWV*qS|{|s/}V1=v Alo \}ը-]_4n?eܻ!-mz2?*C~*xw6:/ku BxG:bShΦ8v̋8_ `KV>|QWɯhB [asj?*$VʔiZ˩a (R|u:IUE|nF 2 RqJN6r~aEQWU ^"g-tuISkZ|ҋNW^l(K /_ӏiN)Vw2엪=F^GFdarUѿ);+Uq'W` 5jQQ*VvcS{ 5mgG=Jh77^YқQZ,P`\[I>Es uG>rK=cc>&_{9ʊ9 tiẽ'N׆)_ő}D+y&)9#*:46rO,Ldu>Y6xNrHn켪8$`gJ>ڝV <A3EMTg'2hڡ&53.{tog*ۙr}zSƩA5ZO5MDc$P#WԁOסbj1U[IuoTıg֋Yu.8BH_[^ո?VRcO wV'?JuTw}PZjxkڟL@O4_ԏEϵ7U_pj!rGRz81MfUD[1 52ѯ=8Ku`QS1 u<_ބSҟTRql? SpppE_9GBsk&}7-Qg0Wjhb?(X's`wh3.SzV8vcy #iGiA=꿴vcY֪ 6xgx< 5'GQ]Quuqķ:\jlUPIϠC״_ L1s+u#;~)6w>9xne`C.q>ަqd<zhzdžë {vճcm>\א@c,W;GHzΐj>i7KV#MpTRqogä>lI-S~fUMGo[u{+oOHHpj#WF~>+?!8㞕JMϔ#8nrm]MS QcvwRxfB4 uUG6|]`Z14ițAT3--JeV Nay) G*g^Mp:1j*]K5Ơu1֦ vo M:r[<>XYƝA|^VnUr[ڬV Cڻ^ib{56kyo1V 3$emk1ԥNKSxO/e7CoOaZ60srzfkRC^USּ~M)ȥe_Φm= ׿3YAc<#i )0B+3_h0 "YɊR0{R+lt͑ ;KH8ݢLbD$_C<׍(7#e +Bɨnv+Xk;O=EmM$K0̒C#ߙcZ‚Pu[9Qs[)G̏KGA0@ρKsg}{U)lp=G5µvAM79-YkRI*1'nƭxƚ~Ӟ50 0}y)FWgʴs WV+hYZFU+8EHf=*J9d7j  `fރm[C>\ONi :J\<VѠ{k2BI(k&SZ"Xi5Z eeC Ջ}[w畞GR3$ԕ5ͥBg$ڳݠ̒!\.a|)3W"/<ܟw%&}ӳaH*ޚfw7-"ۜc5G>Z6]jKåj&yh7;B9=kLpu(.Ɔ(;=zuBbN1%kL#@#>4?L\%G9n1Q Wd` )ku:rM;I4E…`j[>X7c8=u}6vm$T[!'*Qܩq{nMTcwK\ۆi8T_CRp[Z36+KgTZ†=9&)rY92V8PcOKjghq/Hk]+6hәZ]6o+T,RpE g/^ %Xun#21*{:nG<3t+Xc[~ mjGHv?QyFJycl#S}G淨]h; UZ]2ٙ JQW-cF$J2=pH8Bmٍ~ᮟR=y";j4|h#\~ CE 6 dsTǸj2+4نBLs*ub@Q^.yvijHM EqJۉi߭XP3ޛBR.Cn85*斶“)`jBnk'Txrk<7 hxX&`z[iyISzϊTLhY$1ƣ~#E4iKc#'55ɇ{l,[p2O'⵼3HlWC\QyH1^/GBem}ӃU/"zE|7(9Ŷ1;*l/8baT@2?ZHHv8hZ3GDtx-Ru>&v|ABp2ލ,:O[bɯ?nS_&Zm[mO蘵 yc>LJf֯Ԯq>ק?Z] >rcGh5=(OKԺ_~~`r>Ylw?֥"{r>F珥SD%x.`9/=Sw |[†At9HOl[~oZa\w춠| l|X;R4/O:*qZ+xT nB3 EhǮOyqߊe#ZeTz/}oPn:v᳟x1Z+$cGYDxo%>Ȝ l{0؂~=mYA9c,r)ͭip:x)\9R{{+-t0:՚iܤ ȴ t$׾X~d>ߓHyxh`6C[~gS9Ӣ_m*:!GoEY@YTeSQź>(VF~)ŃJ? {Q@<Ԁ<9qf k9[ldZ˵h}Oĥ?k }-YE{Q^HMů>)iu$H,+ϖ WIy:+c`1@n+Kowwiv!-o|-++2d2A$jpYHӊg*V;=gJl/徂H7BAR}}kcdKDU 5ff>j͑iBlՔ⻙zSX~.L:?K ʽ($8P0SqJzU#L gk j9R884k喇ýu2(%!٥p? iN{t=1Ndϡ4wdP@4>']^pqq"')_|cc($LӄNMDkq 7=jn^ḑҔ1 sbZ~NM)aFF(d=sqMvX DݷpÑڍs@3aǶ;C!<=}9ӱr+˾&{O_ IXxV2Z%]om4y>W^=NS9wH|2[r(\,gWiAx? u51&y<44lAFCqҩ*ҵnY97+k 2ݾ3L]}APN\ ]Rʻ=)ռTW+/#cM/f n#>דx@-57m-VcjVIGC(K;) <<.q1Ugs.MlmuYa>W銩cu=43A;sӞWS/lSmqZ* ^k[x+}\/<]YySZ 4`N M-d)Rk^;TX q[hz:lE%ܴnm }/ob6waV~p# u5c c;1Mj(iiB%0kɠ#f;սb:s-aoZ$cE@SShEqp#ʆ5@)床;~.?rɜ ںMqonj%}IԹyayl0⤶EA\zͤ.v'd }ԩ#rCsy}ۓ~kw82x_nw4q!]T7SYYo}fGqrPU]hB5)[VoZg 6~?6A'372G6XZ +59y1K9"b25E(8ޔ73{? ɜlT{*Ӵ{j)ϱUwgMmٜ_|f=<E6U+ &N09a5|% ^~#e?e3X9xvqXN{uu#:?hɧS^~A_H Ձ'uq\p5 ďM ݕNy~QLәP^B9N1؋>k˟w=\.J]J^-l,`\F%#WEmsoyi=(rU}lMJ$9<ZPLvcĀv)w ^yFyMV R|19t'}_-=ѧz͙b 6"~6a 0"r5=F#فg"LN;Bξ!l gY%!9Eeq*(y$"Ǡc,i ilN5O$)dN۹rODFG@Y"T=#f_znO_CmMLp:)ʰܤw>xTntYީ+$ArNDϮNFPhh4~'GԿ&߹:>ʟ_POMGWd6?>bN :捉{SJBpzօ \83T]4L]]t/>NۯutAZ)>+BuWiTGQ5<Ղѱh>/NΟG2KMu)j+t.mZф(X*̤5?<_/!\U_ݥ5nƤg?w=Ɗ<Lj~GzcKaElPW70"n0?r# ۱njM75i+nnir=<~l$~×$dpn'"8NʞU$.QA>}} +0`py)rO;.^E=~8L,p2L@=8Iw~nzѻRAwgI8gnh p)jWPfITބSB q]x4aW?Ÿ׭;K,5)6$>$1$T|+0]OZ81FkҔKG2u.$N1F3̀k$OX1.O<:vjnf7".&Yn1Q+c@ZMYʨ$$iv)>di<⡙SY9OE⵺۸2!% Z$ʷqf)#2;6#Wtb?jkx8k Qw(wrM}psT;Asu< ;rнz[hڿ=-d`bH/]ٵֹ8*F:z.R7(vLjeB7VFGZǑ.+OӜ{k,{@~$Ivqw8xCY%kmw}ó1IZ ]j:0 \[ۀ늧+)j#iv xUyN2WĆg!Շ8׮^xҼXnH9_jQ|SAqKs>C3EGjI72֢m8BdM4AYݮ^;m+QhVUG7D(58k5k]oUT,r÷eYUYjGl#6)GJ%}Y*?NN+:IFkw/v"w=+^nSeIdʚEv9?k> e$3i-OE2ZK<Ƿ;ODp)sF헴VAolx |޿CKmgC韭Zm+5/LJHN*歨h*S\Z\Sٮ9]\.h\}qqGwڕXXʱL$XmpaJII]ے<MD<~Pϗ6Is^vr\ g9rOnwh9MnZD_W\@:W-HFN*<ҹJD$֩63wviJ6v"aQnR šjtqa ÿ)A9FH @N"4IbAUGli~hƣ)iww5PʹSnc ȦTCwYc {M6++t*(U[mݜrm~'#&ۑw$ 6q[ :gخ#?iaxvliK ӧ Df[J_>#<~<hu.MeIY#?yCmq4 N'yW/r~xq |פ֓Wg+#'n ,a5Fٍjɯcs5_«L{RB;_.s#aCZnO?\gN'dG~H=bO<{W? .M NwX?!N)r|˦/3'$ǩ~PHҮ~֤LcЎO*>y`nߴQql_V68jA4=i_4i̺D%*J$V0bL m/ ^+f)E Jn-E%UGK:S3UPz_M W r~1) Tgx | Dz}\/[vԞa8nU=~ߩ^ x?t,.|IRe@,dY?J.ʪ [E}F7lգ#uV| vpO=0ZOCbŞ [k֬O-؎ĤhNҩI3zuacjR JiWr-'h @I+ӪRɏk يd :tP8O0,lݫn|,9eXZFǥN-dq#Ƙ(8m#Hq\ϏyO>9|~Pŏݜ`,+.APFUA^JsvW>xem#5,Кoje(1Rql<rrE'#C E/c#'j&Ӻ56E-([y.o*xWC?MRa".1OrTǑ?KQ:=,? [E$?/Ipk?>G} 䟞Ɠ}/Լ>Qn?R/=|1{}fn?*OEsMG?_N'>e'"iRx ,?axJkmµa> xEE ,(6ԹYZ%F]9ȶ6u_C!zgiŦjٵXwc+Km ]9'ҫUqkt~D䖄JI0K[X+ e|-.f Lž`QJIɕ E+a*!O4kb[|9YQYZ);u)`85+iՙ%LFOR8kӵvW3s6y{ VKg3TwL͐#^Ѯhr] qZn8TZ؋GlR! +$ ۇj͚[4YN.Mkrqmk!"6ܧ<}k }1P@>AC rw1dN#xݏc%Ƒ,nظGu *.[Q39/x>M`4|GjuֵVz=GY'vȯI)Yn<;ik HLmޔ?,.G3y5cwz8$65 ax'm 1*:ο[xsSy!9lf$fQެ|7סOP 2Aڹ͡鶬 jQ ]psq1MmvdpMjn^뙞|2}SKV7štX؇R5]$F~sЊSnt;yMXj2i3^N64U83fSS8Bi&ulđexkWvo&`mI=֪n;[kczNVD2֣V9ѝ}ij]!fmCi-;VN+rZW[*W8{svW=]&?OټVc/0ٷ ܃#QOD3WcM455Ë́lܸq-zu*Ԋi6*RΒ;DpIդijm"4PcJ-eN ^[y^Ci$)?9p>#FSeԽlv8_srI!X̣&NּopzVwmrա`[W=. ȡ`%kYX`RK 9OA]Ώ̈́fA=Hrink59OAֳ|A-28%rf"@fxð5ƘfXגSVhyo&xf$n+*L0:Mm(xWE4$h?0+ba`G{ْަ& 1HNÓߚ[,c05|,Hl-C3s (-obҮ΅loR)$Vr: V^n*cn!s%EdM`I>zuFȑO\U=VH pOjFLvcIW_d% B:QLw: i$" =)פ\ڴ0CJ|ƗWHLlfWE:EL Wjf*S<'5sUAYBx U=DHr'$Sg}Jf qMtWZ׆ pޤ㠪2inXQN)ZdYXTuBϞ&2>s֥FpznZ @9.%XFi'ҺS睍iI\1mXO[q]xQ^oPUmZrvzϛ& W9 (_~h͓Lwf*i8+?j>Lߥ9l*𮿥w+Z>y(%soʲG"ձ/[A,;O qG41\39| 95[m Tҳs}\r-Q;G(lU"h~b~P҆&D`j|L޻ߗqp1kt'Rn;sRQZY@@g\%?5 HJ۲ڜ~U;W="+hreo{ k2A'( EVú$0c00ZGf;>|' Y4MAL~Xt?+5wıJGГx;JEqlsK(kWt] vRր9bs/P9Rp%GZMϠ|lH1 zP'ԒbxM]kឿHjGS ue4rcY\V_ox>DZW[Q?Gn1׊y*+rynǧ*f$ZCu zg8>?3qy7"ԖipĿ6@uJ)&g(J)Gᧇ<[Agc ڐAߺ߾$ qך&VXfpy)ar Bg9t&<%(3Ie!V[r E"AZ =.xǓ=CTYރxrQձ&L0Tּ/?;5Ҿ}:'.Us*gx~_J'?h_+˟1"z󞕛Hׄhzﴔ㦙2?ٲZؒ~}umϴjiܦf?D~R?s.aR˔U3~D!8#եM)(F`c%("ifczxʟ@5E6ˮj{-Uې8%Q@Q@Q@Q@Q@Q@Q@Se8Ǧ\<FA2فw|C̒°F1T|5)AH7 fʟc^L{)MDsqۤcr~H1xNW3Z֫kb~I GVյfx˘fqvqЂ1Mnv~FV9w֥{%b ;`w7t|HqVSVF;..[%ZFqS[NߴM>pqz#5֗lj)pp?S_fO]_@ݐGdcZ&E7#H {q[5pq+*=Du2xXnu[;6)'x(|zO2MwXWT!rc]j9l/|-jV1Ersvt\UGsmJH-mu*v w5.hXFd6V F-X-.V d=Ak=c#̞V-S\hGDjt(qyTr`9tV:=u4KpH zYauysw(p>t";6dLa &igws-W-?_Er 4gdg)'(Xݶvh4^*垚W E$XNqo"$7ڝ+6(]VmV(YjzȝH)Q,Fڔ2iYԬJN sR3EV7Y`bDg=:Me%cO ;X/Xk>fvqBgjjվ^H0aH=i-Pi̕d@N%'RGhͬ`KdW$X<ߠnƄDtk|gi~j'$sP["$mF(ǫ;..?ђ56e?cMhȃVdMȌ9I7LU߳+`MpZmZڕ%#`ѨW^IZ`#ZGj _RYFjːj3V,Xr[|NG8&mfdj&0kۉבVηo VBI5doͦwi&!YGklzNr@1jrJ~CyUܛ)hY4cd&eгg־~;XW-lztc*osθ5NGѨ]5tpwpaRNry<1_XwTχ58< @{-=napmSu莧b>Zs |?7W4ei aX2-c‰[qhY._ci:׺Vټ9ȉKv5疍'D:k/ız IwHd{Euq-2MTϫfSjn M:T۳fz xaWm0Ɇy# URW=c~!8 ~!D&{hd”1 L_aaqҾq9aN+?3D&ǐ\-N&}d<$TERF7iȑ[<#> nP#-xʝ4i^IL?AiΰRJ[F94u%o-HŤjxzit&)a #煔٪VH'h2G8Oi^. s|w'5 NIO4FWPXFȬ눟'}Le)h<)Yf0/%~}KS` G60 ɒwGt`YNAK 9@)enRc~fZmiΓeP$ז~6m0SX7OcS5ub$guj <+v?K#*Ԏ5m+'ㆄ^ 8]Gi2}!x8O J# g\{0R?__Z^[+9?`S?D!P.`Ӑg|1UOm0O½IE?dR4 DOAh0yw]k^ tLhZ䘀$̒2w7WЯO(W&HWw_n|N~k܀Z\/?CBfEPEPEPEPEPEPEPEu+mA0nM|Z].pNz0C`BJn:>nr5og*^:ϊ\8;Z皻1dLqҲۚ{ nMo.)I- .5u(.T8?ڍ+?kC#@k#1+'qJ[g$ZfAE n Q}$>lQs'f]]Xlu4?t׭_W Ѯ,nw(LzEQJ8}=Y4a@1U]/{夣ь{Өӹ[ɫ=ATԏJ̵>}U)l55W3%kF]J]*[Y*$d^kuk}FYb`~ l+Ws1T\F:i2Wk71 tX4{@J~vcOI*wfhkmCɌ}v=惨]vXQ]TjEOG+f]צEZ/Bd^}x6uчLզ)^;uu9 ?zs^v%֠}?22mBͻuΞoPT[wR/9v7IXBzsgq'yS ţ[~a}+WHÒ?ZՌueL$aZIq ruNV4Nm͕ڱHF?7^ۉ .Qu^%3[ k7kgw.jXMOKKyH#;>_tFg-OL:l<72ud犹?Zߔ:!+&:Tt7}'UãGu-¼L [x$ʸPFƬ`Mb 2s-epOr˻p )ܥ/_j=;׭F \sJ\C S(J?Ա8?)ҵZA9eC8GPQEG[v]1n $GbQy&Yjr}$rKbH< }{j$ՙ^cJ՛nm6KZڕb7O#]U׃I(a~'gseFKAX7Z8BqvT%[{̡U}kN9`d`w%j(I {FjpqWGMi{$qVΕI%>O^y;?gI<;-Eai]yԆn}kU+$m4 { +NhSHЪ)+VuvW*(>c3qPH9=jV.bҐ%X#RWW6I2k{k٭nRuRFWڦݎqVUК̠ٔ$Witm }?ҒW4>3CkP6W8^ʫ#I;ʼnW|j__ .źhr \R;ׇ/Y .?:/`Ӵn,pst;#Fi1:d)'<~vJ/uT>jr2I}+dx=8m"awQ:'r{r0l>4eB!VaR=7#|EcQ.?0gxxr[/dr03Ÿ-TRQ"r3CkQۻ\O/ͧM[Hԟ+֎㽖^$5;t-p`=qnGqlv((5 A}*[.t+(( c֗p9R~V_HX߇վx7:u7'aA3ҽR [FeS %VT 2׮E َu}̔*Z;ZDLrߞ2@J9Kg&zr_Uk?_]K03D#^u/|k25ZVQW̟ʳm(4?C l^ޏ@kp5H8-Z.Wv? /y(((((((((.2qFn6ƽpR8Ӧ$ b_#cʚdzJ%bG$\R)M8m:YDdFskL𠻹tn8'iYBzo ^Xj*ld=\կ}m?tmjr6ƌ>ݦ CۺWKMmUVGz#82F^`juz]RYC̐ {F.:3eY(MR[ۋ;ki~ӒI9O[/5]DDжqu'_S tv#09ېrq\G`{q9IrF:}k(=u.Rj9VG6w^};u+ׁe$-}bd- ڥl+}6R@VJQft]`gPܶwGy(5V#ߡ%q=۴77Q2cecXh[W^!GvDtu { KM[[. gpԿ xq)rOzJ(9]gլeޤ un/[T"lkڛmjcGakYļ'rdZv4v]jK/סSvFVC[;]P,^ؒfx+OsK%xFJJIj2Ij~$> ]# n.īl*4u6d/T':Vc($n-wѷ=EaB_b)˪Ck-"'&۫fP^;A ēw1t!a r3ںf;tHfEOHǯ?ZRj\p[=PWi䅥Wi^}]'?/"n-=M-O[L?"1e<5h!15uho 5#ViIm%"avO?^jW9.M/¹c%(Gd3IJчB):-xNKeWi,sOkDtK %\QB[: ["Ft!0) Aеmb1,I5Z $ޅvҖ<r$Ÿp#b:W#vF9ҥ+wVsYD?sֹqH87VsL)nJj,fucU͡|tww8FFi\N<RıHKmRj^Fd&FӃ^sU\A"j3\-b$ҴuIC* 9A6bЇFq lW(&,A+K+YrrrqWl.d7\2D%Yd5J(*W /V^:08.~ӽ/ ^N78=Y S}Q4PIs ӆX'Jݙ-&Ͼ{RDJqD<E %c9~5mjGq9/7nUȘƼ@9 k%=DYM\<㮫6 Z6DȒn ۚum.8 [ݻ\cRKpsS☵N5ώsn¨ TG3rҤp}*Oc~ \c~ΜF=2Ac+ȥrG?4N熮`q_2*} p:e dmslb'=9t-JO.vѻڰG?ł~"m}m0ny[-5pTi8je զ-%jF0qT΅éxt'Z^_%%"Ggmo>崒_Q3ϓڥ#9Ԍ٣%`tv~<5#Y=~T-5k5 GZp6m\(]YS#7y"kC|W\fToYHN>2xgŚwD"Wc ,`սv@b yoҕ|n rs>!|1n]j̃a v~$Э)0̌S"5TѢ``+ ƒ[;%۲2N8A)+pf- $kqn Wx/4Lz\`eU:r;*c.xݗ y^$|QũhHgZeA/-2)"D6M[_1o}98]S'EnIwApC ;Pz TNi&ix^ZlT42n"Q*Uӓÿ< +8[H㔓?Z9O4 \|bL-='^G2f{Kɼ׭PN$Ҹ/pƑ8Tĥug!|SOŰ6bKFE%=@^_ Yt+Ɍy]$1VJKÚ[>ƺ#^]>wT4eB{V5$1O@2y*фqg-Gqj][U<-Y=]>a5~};þ+gscA5^dqI"WbM3 п^\/5᫅hq9j4䔢v@]px_zƓWN!~wƳi0v6O0<+DӚ? EQZ cS}i6Vfդq#ѵ y~_>%VDc;tbh9qu 55F giVo6Z$h%kyZ6Gyׁ.t_=@l|^9 KAq})akjI4E,MZ4+sӊ>+*s};ף YMgkRf腱ï*+ɯ#6c,DHkQhU$NMYñgg`|ʾtFxgX9+\*LE\kX@mY真Du14I" :ɍTG%umz26U:yߛ]Zك1]6?J+S9kR<./֑n9vz%g\^ZZ6#DM7(CD0ݬJg69k zzt cPm,Rݓlb:ib1(V+$ l==( mr{%5_[ C1тk٭iշ1Z"8 BJ9.4{:5W!ՑNY&x6Tbw&A(+zsjq HryK7֤Zw%ӊ6QcEp H$ ½JL7 b\*Ri{MS{ҹF q{f?OV(9H{dW(PnՔfdmX;k~Kv;a1޳jۍ;FF3hQX\lR9l5RH-6o2zUkm`\*=88Y(ȱoBQ2׊pjGحF$mi8efٵKYUc9ǓB\꬯FIv{ ŘJY]]ھLB<Ԗ$JMk8!nU0 Trl1N'{ hcKPX!$qΓDpqFnk; 1u} ozg"  SI- nt1wH52=[3"9 :TF 9[jی+C+J+ ] tL2P-Up1O*RS-x []Hޯ^$U^&iiʎSx&\??{7ߩ6s%Χ^g5$$z# PY<6~ƀ{3yH8y6qJݘ!$l8#sT4nS~$6B΍׭}i0cWj-{V5MM0D#ЯYE/)c<@?C͡t&H5W)K3٣ M8%(+PSPmE'C6J_vJFEJiT RJu LjE:_χ_-}A/-̻FqWr:}*SИ]1ʙpLdz^14O[ӖA_C": ?ҜN}\oĘ!gkpH}O=J[r " q }V1|d-73F;rFs& 5-4=FOɏZ-;;{'<I֮#;kch#:Ttί\R60X~8";qV~$W-8')6>'>j 5^!i/YrЖgص=d'UpI] qmhyH^#%<enaW-s*;}NgZ,?[ M2K7|yaB]|^Y⟊wG= N=0 \a*1*Z'ڿ5k}k6YxzQ?k(a;x#XB"(UWC۩ӌhǧs~:~0jNm/>u WFxIQZp%^έЃ5$tyc5%(\~䟳&PX&#?Z&{:v1jھFiTn,eNI_ g}!CX궄c}ޅⵔ,Y8(H/χ2e?qA2D<[T u{k%s>.xWm2q15^7~1E7_ÚS:`;}_ uM7][!\W?xWg9KMةڵYOwqcsʽiu+:vKa:gp̓:sҭSWf9Ou,ORi~&@-(诎9%t'%fx>+l5eHn^N8\d05"f1çk䎑[KRoV4tς|I2{gre&rswx;_x;Ě{n۷^P?\n1KTьy#s͒/wÞ&`ֲ/ss_J1i*+3ZyM}?<'7vb-hѕ@݂pjjǕXI'dx'Eڶq/5y|ZhfnPAsR;'%~Vn6٠h[MgªuBnv`/^HMzmF2?Mt?M[Hx&=>6϶%:z:ܼ¾k9cO7yǰL.fp~YFizeGF\ 8xx\?4aI޵VfΦ;+pZ+i$ }  YaJCY$MZ#hJ7TQ@Q@Q@Q@Q@Q@Q@U-\jN40dDH+ ,:dug?u[3#N޹܃r0~W)&j+.Ȯ[.GQMOeo, ´c8ERt%̎K^ŚlVT&gNyFi%<J8NI`v=,TZ\$MqNeMm'RhjZ =Eex"YRH5IYrK%zTAI <;:XZ914Fq*2)nt\OH6u~70I l)FPxa=9>Vg98˘!x$D_^Md7Ww d9Uk:iF-St\:⼃4Rǰ"|@cR)Ruq|̯',#=|% Mq#'Q ZdKjvQ&w \_=DjyeҧHߖ.MLd *9lpɼVҮ'@ţ0W5M8Ok7Vi-43< #YR;QxC^_(TFczR*džNGҰ]T-<' + LyhcY|K\=1 *^xJbgAOUI6)Ϛ÷:ɧ;+0Ok;i} ryݏOjQ*o Z;]+GAh5t{$m@&v=)EsªZj+pxTtO4B޹y6g4r[I AʏQhΩmg6jwenb*qGIỏ]sl/F?WM LTy$|xzRqnt`V ?w O^z-h^_j)- unTqj{:mbtkڤp#y= OU<]HW(Ub2I!x5=Fdc99wI{++؝v۲V3˔-7d<>Ha]Fzc@9q>ZJZ&r k-ƙ`dmg<:Wkpo{ާ$wץjմ߻3pc\xD ".$l=i!1!~HiD1iF0g5ɲ'9KXf(1bNzWSJ$֨ϮګƄvn'gs*BWct6GLS5Sve;>N'w4F^FHk.krpF6*dW;Ҕn⣡p0pqVmuTYk6ɩ&v֗*koKR+Zd[\\LR3y\F*sngR9$׳9 j-4u5K9=urfbX\g+xdZAaC RkrLzoFjxʥ LGJ- pm;XZ0$ $gWPEGsڪm7a)wIÞ:wԛj8;OfncnZ NJ-} o' w@gP2r k 6kMeP 1E [$^}sS~4sB$} ' 4kFv$h;H/Y#H81(osLC R -mcie<9m+ls\Nw:C1@Q)hgz9յZ.' Bek~/k-֓$7Rxo:RNҝh$6.5*|p7(q XɣvG⮇9/y z ':$L:WL(J4}kRIvH$$|N?4iZt)UqE ߉'{6yoEsu+XedAC]*.)]- )˱A{goXOcu {0k6|S>), 3kf-2}z!GS Slmu겫u_)kً"օv2إbe*B aU nMbjOֲH%Ik8tXGws-X`K|Jmܼ݁$zÿZ YK=f(Wp\F=%c$mMp^á >B!L<׭^iVoȊm5 ]-ŞG5㴳hĶ2IF2a@kNLԌXNq3K=>X]9.j7 dT%j^Y;Zc#rRqy8\t`3Hb,IkpA龺*+C-8Ol񘃾3z]rE#~cJӎOq| vB<X)Vl.W_n:ޥ[fיw[AIj<7?tBʣ:WtZ{_mb[`NI =jpNKYFVXeL(-]FM~馂DWW~9Yđ_q%8Z 9+G!"Ft 9ݷԿ28`֭,Ɵ#SPC:hfm!nsɩ+K+٧ql dn}+F2.N:m$hq ` 7V+GWjt( gxc *Fs_&j%Xo/[K=5?͎I8\9^[ȣce:aK_ӿgO6ovs־𶊾𶟢 dc{s檬ʣQ!ȍsG^ sO|k4j/ɞ`1Hesַ6qQىRةm*xIuk(z]q0D?79=R9+6hQPd#":u =4A (JMlǀ@Ҋ{*<1yNY?w.2cqX} x^ZLrDy.zPfi:2JJA5V.#h-唻B=aQ>R$<>s\ 8o|E|5O5 }M˦=A'UGVNܺE|QAQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@UmA4eܫ =~SZrq²~n?,DRN (RRޢ|½ *Mck6d.`Nx8i:Ņ{O ]rc"Mhcc/C\r-x Z))2i:ƙ}6ӦGZ׹%$i_TE{$ԏ<6$^XHS %w`RDLnɳԼ1-'%U,F{TW7W[QЎr!I' wp mkӫ.-WOo8ܺEnH#!;@V=l5XtR"t!e9 znW54#*֒:hvǁo$c(dkk26SQ~սJ\CixG/5 ky$QԃS[:dȤe9ϥdQ16Oᣪ rڦ&C*E)6+\_I|>vO OS+ o52g'dC=twK_-؝$w+|Ci^4dnZVwRn4{a0cQ)JͮCky4lmRt(4_j~!V1\H򫜟!0nh~YJٔ..|m {C>ؤʫcijSiޯ%ې7ִR""ּmNX;=+W!XcgE^Do#+N.̨{3B6ǎ;[)e*+] Y),@ckZ {rn6w;2٭ZP0yvo"C{I5sU"#+X,W=@W ;'f}u9T<Wj,i8/sROUCbr ) Z LeV(8PnDy3} LZ40Z!sKTjl.&u/kXAZy/ˀrGҹmkANdGkkg-R :a);z,~Z+ e6B)c .4gpɩr:U^xZ,Dw[FQ-,f@@^3U+OBJK _ dק][Wak䋛:Ϩ,m++UTc3VG>)QqpfzT~ᝥ.i1̚1UqK35mD e빳һ-D<=c=-өM)UmXT4G'Ǹ1}NiCri8`AUA3X"GdvD#fAcZvg:A:2pSs.ߥrCU5Os  gtV_J]-)- v\cksG5sda]#EiBi+2hˑ8δMQ3H1'rۤMk"A#g6Ѳv){iAbةf܎|ar$:^i;4rX솘<(ˡ$T&)@ U"i+X҅r v#< JqM&4g[+]!uV>\W6dA↺0iؘyD2ͧI*K#bE= ZS X34qpaX-lJсQgM_KjޥWиtz kc@dƸ-ŸjQrNF>еkt;mBXe81 u$$eKd+E6)JjFq Wc0OCU{{i4x ;#qV ӠJx NQqէm)~'crQ.nedQ^$9C5݂\]՘TV֢Tf +vZ'.v&yѰTUpT{ԁ`ՉtW|fcq5˳Ҽ4ٻ 8@r1BB1c򠹮Dm>H?jA@j|A%uEZ6##&ߋPlzֱ*k>@h 4ʅu\R..tl^7ŐZIZWPj6SSx>³z-Hs*;/on˶1לէZ#]ɩͱ* ]@6eTf1׊]FE[-F(uOLԡ}hIiɦ["ɼan0qE7vt%k.qYD5CO\SrM.H ҸQ19W5vH Ӕ`R\O3Z56Ԯw{:G/=kXɤLS>rKO;(倯 wqTqo;ڣyQ[Đ:9#s ry-Jzg \rwtԁzp3@cfIQ<)w84O֔qϽ.rzfPsޞhCc_<֦]%⹕:It|ß_JGB[B[C1 ¤j@fwaE ( ( ( ( ( ( ( ( ( ( ( ( ( ("KV(b]p Ɵt E&~VOhDm.K_D'^Mc,v|2>)BXBM `JHŻt[/eH/ C{4A+v=9#5'WF ӫN ( (/@:}= L?C@3tAPѯUoh uChTҵ=NvS*Ƒ{ןMڣE4mv5N>gF,2LU]_$| 5ӎ7}JCWI w'׶ڇvu-R5CX8VrM,ȉ Z}pW]:hˍ?"dqBۣTi;Z:7gR7L;K5$Eg뗫-[zۺd}aQ~cidp+\N6je5aὑi˵Xg%Wn@5KABF3׭<3jG:ďMo(1o1&SȮC5us4/i J8ʌ<Шc>d~$Tuk [1v ɪEz5+WnN1١[?B=+s dVn܆֒ѭ89h~r+)qLS gD=36n"xa.88^+ L4SCJaZuB^*rᶏ[0$GmXc>4۹EdR P7Apѝ-N:1ʱZ6o<7pkqhf*o>$ WWeXgZ~^cI)$f>J7RzVŷ/mܸrEWck\bF~ Oi7Q┱ݺ3UOWb92d7-g4Dsǡ~yoM";PƓL.)ʠ]'D7U$79U jSB({~3\d1o?tUڶՎNb@lsR.% ^\Ӻ9T]6v-jʑ cLՠɒMw{F\ƋZo;G#{U7Ry wrؚt?W?hb6*ΔÃ&I]LvZqKg"صkq5G$$)-M&pF8AŤrrk`+WM.>+`>1ϽK܉m;qO;IѓNz ْNȽizĪsx 1J^vG=rh׉n2a֥tSy`jҹlq׷3" QI歜-5L՝zd{gVI<߶kKҺqV ^6rq֘lx( wVWu-A4s'̴ Q0zdUxr3C7+*>:gSpxqQmM~٭!$T.MZ)sVC"!Z a[<LWA8B$dp? ;ֆȼ {6JJ9R0TեqKHAI5c:|[cDI 9 R`Es&kf|$y'5> EH5zi=E=ކR:L,Fi=yDNOZ 0)^R6рCjEPWE݊'3``ִ)ܭ<k>|.3z<>6OW]6m}7Zvginxa*(޹g${֜I)2rsORHW=8g=)wgUpG9M b 9g88֋=0G@` u789Ͽ4PH=sژ {rE<7^8?(' p' sM.h(((((((((((((((((((}Xiq۫.k?'n[M$u$;Vrg:'|MbfUl<3ּcV׵LZOErwa9{̯{?'N[;[z佖bHX5J=dΒv ry~5âXYY<Y!>賰Og#qzf̂PEXC6{"ҡ2Oqɹ#e}FIivP57"TՏNƯi_cWo,~rN>׸+-4G!0yx֥^S='T'у+PGZ}tu}PQ@Š(!lb2lqslffqThNE;O\c5PxRW`aS#?XmM989q̪GũiqYG?1D$߯[K)ѐ8=O[J.vw;TR<0EFr55Z-Ȳ?XM4e(˔.ut&H?1|saԢ$t04.U?*NN0<-foESUID](BRPMm,\|`k.3HZbԨ5Vs=utfefhj6vZL%ÂG;WOZ-em%VͩqwoͨX; 2YM\F2Jorl\\0HȤ_( zzWx27fHQ2TؠD#; KWU],3>Xݮ_OPטbv氭&cV+_9lSW0;]%m-,h C,WEvSg FO5e+J<Ê$ڕsc':u{+)$)Rz ]-4lt&uBW#V8Si- }.9g*:q[mыzI(Zd!;`S,0aI>\Ҵh琅ux!AD|ʃ; (RL$q/v#cvԗg hp[=UEv6ȅT'A?Y;>F%qXW7B[F 9SV-sӖ9bCt"NiY~G\ZJ"^h` k*<3+-=*H'U*"ϡm KoO FHyK],wdUϴ!] MsEFEfM5m mor0T׎;Jjrз$΀6j&xp܊uFOSRiG;1@H1ɮ} F(J-u8LN1wITb$ΡWmk+9H>IERwvz-!9 YjR\.ɦ@~cgɦ7Rk+5%*s*[ kG%zHQxHٍyadP]qƓak3qx|Y4$ azWvoai"(P^+oQ.J*(܆?(8byX%vz v'\`ҩ=$;'9&8˟Kq>4G]odxď2xVԆXш:םk*T f~#E(]\ս_Q[hֶ]r;\[ݓ5}Q"[f<6lڪ+[Ai9{f12Um#}O 6ۀl`'+v`9}lF,w4Ք30ʑH@TEBͣPX0Y!ZчQ_K1xQƚV13t9=9'g›+=WIPEɗ|'Ҁ9-K$e}꾴Ut]H63&"|+;%f'+[/iZJ^,ڠ~rkrJD*!C+mz/dŷ>cU_*.,he#߇5s}h+Rnucxu׋k}n 'mwqyϤg>` ~dԹΕHӜfm|RRk}[MAvM!~r^er&iw̯}jOM.v4A.xGR28USÍ}zu7 ,|9G^cVS n }+2KeRHjVFTY9hYI.UゾIZ#ZnbH͐,G-PYM4MgVrz#uRIJyoua^vo 0`qa4$ԬʗgEcn,o*ҹCO;nSۓUqmX qjoHd8O7\^o6vKFM(X!tNM՞X晝 ӵڴBIUEk85Ti;>bčf!GPA^M61DJ1n_Mbmq5،c j.5 kHY]G0S^f)u7t(dg fϵmMU%ޝj%*8顴+'mM<ڑ^YyܫV,D\8·'bFb@ :PW :՛Vv3Kd5@9>ܮw$W)P8^iIe*a}53AcZr<Um5"R$V=jMJ3 >%@2(\~5'uT]hg >ԧְ8AA҇aE*p( AȤ!8?[^ݏ41r:N8'2{^=:.&>St(hʒ2peC8 Ue2"sƿt8[Tdz~jM{A1 zj#VvLք,YvifJ]3Ma'|5$>jj@sXhSi~.VM2䋥O1Qb+ު2.S2 {+9&M(!A~=jp00* (#~ipv򣃓~u_`Zh'x$اN\|E?3C֯!umʏ޾Dg_QřnkE gAa828NOffSբ:)q'6o+Ma n0%#HN/j {ms&!>Y"~e }̓mT᭘-`"m@q.]Mb}v6B+mIntwxc3_ТҧASD|3_@$OH,dxBaִltbOO#V湛3S?:TZ֕ ʃt5C% n`oCVdDxQlϒՌmӚA2؇$\+D5=6䰲-ۿV^l/-'M|%!)- ֨5 ]Q2$Dypd#ihr(P]X`00V "9akdZJ-KdhkuY%IQz 5}Kkl76zՋmG*x\oQƹ;R&A$[g(B7U燭4WzKfڱiX- .pe_MZmvI/FFbݵ-'ڭ|U;b…:I9JȤW+ ž',IȊH\짲P!n D4Q{~; "..”V|i[=CNqLqVHT{ 5LlxΛwt ֫ 4'~ߺkJ8j>^HeP cMN~|!?Zt-Ri63׮h<>xefg,2&L.!ɻ+-ŵ፿$=`ZE #mJ)ݝ2 vm$aAWIsyymws*-c1૦OzI7Rsi{jwW"}j"#%pǏSw31}6 0bK[)5Ra9CjߕQTht TyU;UmjmX#Ȉ#-e`WS+[+ǘuiV" \՚Hzr+oe.sLTMyqi,II~TZRY@J*A\a7lV~m2*Wqg=%Z'bz[2%{YmrsVV{wLcQQ#ԭt/s*d6(k@V5)ANVmB̓Ȩi7+9{Tixr23M^,G#JabVǤ̨Z6 ݕ` Ҡ)އv/gHp#֒=iKO<}h J 3N83L y`*z qGցҗ9S |@$tlR87l9'Rh)Q@JFuA('6,g\qHg~я x#=ȟPe{ʣ)Ku-6h ފV 54)IdUOw )Q@\{I6nq }-nUe8"YSb[AhtK6BlQ,fC`hUTxlJOEnu?\:M=m wquӷ|3.<cןW(M=|eHUp:?-q_{RY#_Srrl)I (4 (柫>M _DѪS&3t&'Ow/ ,u yr\gsZLoR0lu䊣kg$0ܚk7$6a?r^B1A {Z'_\t>ވ5L1 z2X=k2)Ii)%{j7y=jkII/ar%x3:of)隴5WBߐ@GmsslS6Gn˓RӅU>d`֭5v@<|ؤŶhTy@?Ŗvw.xM6-X%6zW~Ο-< _^ EID3צ:z`x55sk{Hn&IA$r!ʺA1RZw(aHؑ"8kWgm@r=j̑[Y 0*kݞ,X%V5{X#S.n3 ճOK}{dRf9|{m6\.nJLhha_"̌ns{bZݭPr9*}GLDoCu(JFglĭ}>{vL99J.guh1dUmm$p W?Ӯg vIFщ_Ι J{ڴ}ԃ!#*} `q)]C湺wossxF2f#2+t*Jڮg j:ָIV..Tťtk '2lu IywVN-㒘}=>-[;8gN0#Ef`rrkW>o-e$_GQ]S|Jfj#PT].n" 6S\]8~㲐nROrZGģiT:-ƥ)Mv#KmWukc!={]f!gC沫Rȹ$ז$6O#asWl'Z*Gְu`周e2ln[z߃zŻX\\#?Z.ĩTjvڥ奮nJOcos$a9vyVnƉ;lt3FIK Lzq\o-gK^I8۞ԬZOfK=N;yE>A8>OMyQX_ 68ȭ8n j~*n|ԩ5_ / -9T2I'*6"mF\9:]YK3h䉽z*^q mLa8%+ĞYBhd1ލk5aj즔4. @xR0G rN 3U[i|*q^P3*hܴQk >w$}ssi  j/ĖǷw^++\IeKo3y,p@j֣j-8=٣i#Zz+$ksK}a)#g] TJIlNǯ 6}knL q J))+dݍ-4y?,=+.d3{Y<% 7 ڙvznFfE. }:QM%I(9AS0CޮmOGG/GFp@̪3_eNq.WUEKD >)rGC ('9'FpN}0~{sG$RN O909q$CPG /~Eh}F}  S PrINǥ$Tf Pt(SsJ#q*=%l@qWNX_Bh.6x,h' UC ʜ Pݟӳ؞(W%k//¾ }PgP8a"S\[+Q໓Mg\wSmHmY,|U><ͽ|&"}%6p7ٯgc*s,e!S\]8Rí;\h=)f_k4]Kl Ð3Q5xgVDΛykwk!DvaT*,L r4w0yܟW'խ?đ-yANXV QjεJRLٻĺ_J. i% -U5Z6=ԭU(A_6NS{-35F|DqFp}2gYQ0Gֽ}ךW7]bc\WiXGQ^3_ՅG ,`g9k|Y;{cl0yJ>MÞҴ[$kvjpCǶk>MPfP^'J2Ɗt869ǶB|v#<~8Wuۆ=<3(tQ@Q@ǎ|Eo I"U}k-V|n=sV$N?/ŏL/#2#2I*R6NЍeٕ8%Xu+UC]t9aujb2esEݴ)[RάەWjSޫQO.JWd1*aYG4ed #̑A$ T0vd=jo]#c皖Z#29Ցׁ7A_l9VϷL湖؄Cy4-o,*G&Ū/6@uS( ÞZ}{#sړЄVEx ڤFL2I[Vg|G\ v߹>a$I`IǾ+{.aedG"R2"i oВ G`"w}>'tD*( s7oS:~}Ӟ/_Z[Z@o]r+NSi{ M5MxJ''~b@\e 'Q[8mp=lxIwpߐgt!((ꊟ< cdvE' gT4{;.&[l`{ZDGIm[E{A#J78=[ x$rƉ`WsɦI-̜n5ohgAc\h=2ii+IQ3&񎌖~"]5[g>uKg4-dke琒nM[L+Wq:^Cj-Ռ=HPv7yRDZ{ d,MA՞rvГEϟuP ' 2A5em ݴ$v>E/]xw\h5`( $bnA7,M o-^i!94?6=Ua om ae\3('EZRˢ-9~fC)ɸNYSVAj:G ]OÚ{X=2,^cV6iū\u^[̉W<8׹~5q-!jPqEwJLӊ@,KX8V@2"SzX 0A`kF`Tkڱ, wrlq{fEXDw8ӳ2á&lLʎyȫZr[ݳd-+V3Թ [JkZPQgV+sWPGbXȿ0ac:m]eBp\1*[gcwv2:h8.9ڭFp;2 ՗(559L>^Zk;Xa^>օ{{9H7\U\B|qC֒),YXyaS< 7cԚ[YZz=نpAn8e)j: flL-RiT̵⟼\Io_Zͽ>dzCSG/,mpܒT2ʀn85-.zh68#<hŬVa*N34ϩ1G JƓX+~Iֻط kAK/g5܈ߚE+Db=*!W =ݚeԋeSjqھRɎڈ 6yzRa-1ZRAڷv#K#9^<773KО[hi<n$` WH2FPT 뛼P q&t`+ דF00HlppH`8x<#H4qҝ Np#$bp;x<a֗=Hh^2yלӲ=pG_A*xWď~*xE\8ϥsRp⹭x׉e:ujǍ5KaMbAtekjRqE{9ٳr ,"0qsFp0p=w{ю>\u$[pqҘ(8#9+/XGs%e=ƳTJjq>iOO?QБYZWX{9'aU$}Mǖ;\j;b; v{O"Խ9,FxCcFM0q?]9lnG$VG( gf$AW'|]O~.v͓%nJi5?54XbF#kG^G~%?*/Hta'EI:"Eیop @3E|QU@ֳ3 B)[r4!v{fυś#գ+UԼyri٤ǶalQ ¼x5>v}9+aJ )(k}?Bkvrbp?TkxujhޗQ]EWRo/|,Oc&Wkkq:rQ\iwT|ٔb1 ÞN)Repex$wV4l NH䔉v\Tr߶cD`:}jJzA[= c;IH ('ҦR(̲$|WeU#vyJՕ5 #wBdVm"12:tOz"UYb]'>4721V tNꋑ[-H6>8)W HO^\B#aNXyqۜYOv_ mQrAPM<(%pjR=Ē@~cVZbGOJD8ebY `F\_qeY7CΝ^Xȋ8@#rp{d=hudM;Fw'H"`=*Վ}n|{caNb`@3"N~w|ȫ6qk(W{kYɦH W<涤g=BbIbP#s C+OJΤ ևU˪|;{i FFcs^=?DfեSq wwfvL>{`Dca5Ym'N Xg%r3|4/Ş)m9Yr#?f[r2KWZ+\MN.= l@[ֵ)[W]#_FPn Titg~iZuՂ_[[dpqҹ[/E SӍD+VXu!llOgXP8A5ZWw&lcP]o} 1rȼ iSZ\F:r7rTJJhT4nӶd1HLUχqATt4RōІW,\'70 qIŨԨFX[)@eFHFj_};46" 3\. {-1QY\r6O'gKށ^ԿtVI =eA333n:VsoeO_JG{@Ag57$Z=Rr6="kﵙ/Z d`F9'D`z\b%/ 8>g_qqlLGFA*=([w1eCDI[N<_Zi׍lįry YOJvZܮ&Ha3 !s]iPX_i$j$|RQ8]ݛמ|);\ǨXJv$p{JүLEٶR6+zܙE״KOG¢@LnRdIpu :ou#Mj5's*48K5^<؊Eϥxe D2Tr?:R{{O("*k#KK{kMJH8±Sl\ëC_,EO `H0z62 v,O5uƦ%i'#n*Rt+dPUHHZr>X{vw}|k/D%|e8wн^fe:r-ݑ(U#)w&RqZ ]TH,p6i 4օeXH:UKŰcK`1lgUE]=Ea<AU.32@0嶥PG.ISZꬱ,k՜7/Iik*KC]#d-Y3ӹ0EhY 58zr!3K%uAjVt䖌Ɣ6=?B+`MY nePzV\SHѐⵎLi"I/ ױv 2JQu#1ĶZ =X5[85N "+ dS㑂0A84MB㊘PS*+gx27FNEL-ɻGG6FVqU>*$p[ b%#Js$QtЬ6(n0:zR3v)Q?.1.8`us .@&p$ȠB#*!gmRQ \ga2ؙZaۨ1mMGIZ gk]P +(]7 6)l'ݢ^G!p9z™70~}0&ë&v|EBSP|Ȼ#as2kpVivO&>5[ǭ-z M^G@;ֆ}uڮp,ш<̊慏>|eznm37(QVlyH՘kpwrG ^$aog54pLS8=Ii<c^%[)t9}j!.ZbЙH*= t9Z)_̏s^AZ_%ymTj֖.QI#Pu-&?[J9Wccîd[ T(nwIrk9Lǻ1Sh69$qA\ڕ Xz6zZҁIz^ᴏ6Qks(.l*1]qk/S֍>" 5Xc?3Ϯ*zS3؇nϱS6Rm쬴ym4w/ JΑh.YHsxSOeJ襧벪b!ଃ9X[Zb *K 3Os4!|uKP̊#sJvFAh`W9>mMՓi>"56ݤP[T]m1M +pIkDȃ}[PF,cvA n+D.DM8,+)] m:neq-(IAhC+FN]aY?zu @x+G=}ĺdvV;]Ngxjk+8[N\?ⲩU)Ő`FsGTpc!܅k8ɥv[x-;@x\m?yLlO\zLWtz! f lqWiBgB_$daϵK-$.Xc<BoĎME_uJĵM=?jҤp6xό'ZWp8hjMd xաzȰ9۞ކ \,ۢo5Og.GB -$* z,Oig-I 8YɩɎUHAE%HI]n@ 8E݊nl"\Mv.\"K$0C:fd\~cM$)-rCc-a#XZ花mk2H_+]V}r;WrY- ǽ\5 bLL7HDlKZk$+uZ9yYH(yd:gi!]ބVn nnZ`⩮A*ϕ4Fu%KLWH.;\3z#B\?VsYA{>efm 27L҄A滝&X HX^R|[OcߵfAh{i򨥍 i",;TvOrW?3tNQVrhb,b28,>Sm.EdPݺzzՓr)m;vR~f:+Ohu6F 9O~*8]@旌tNI;S nxեˉxnᮇojl^/~!|;{6M<涝HɤF"3q_T}A^˨xWJ$ѻRTf78uюV$}) #A#dc8p)p>4XCfjg* {hnMwsb\4м[i\n{<ʼ&6RNLO_m>g$Hn@kK洶-`7@zZח>OGXuWQ)Lvs4 )?XTiJ'5j|OLg)'%a*k+G )(*!M!sqXb?lOTvlU󯬩a] ).q)=>x\Xtפ|m -W94Wg6fz s? | 8ʌ~uSf>rBX/P8Q‡QVPQ@|խY}{XUU/_9Լ %k/ʼ+@;YD%trDzޕuRviX'3D ]7V5 pyMݴ ElՍpwYcxA݆\^ۉ$>Eh\|5kO6n}jR ,>Y{GnG&bxA'6MSWF5=#SM6CbS^qe*, 8OeԮ`;]ǚiO!e~?F\!3cmG8j'9>l8mI̙B6 ¼MݝPw׶Й\\ƹn> 8`\&5Qw1ۀ~Z iG$C  ryE>iawcvL<~כ:v4d.x~52|є\ngisoXסx(]MXDjvRGk8~.%]>%.u{.$㓎w?Z/= &2;UU9lm׼1}omudZIJ |egia [18w7y=I-oÿa+eGj~R,.xYZ4@c3piorrTEcGwKo"vd[1  c}o z$03 \5.6wdI#Ҵ?gx&;#=CRԣEav|MYo^wCA+ΚqƜޱD'!֭U⎷Ú̚6 b '@\'Ry&WF$}+.MnLbռ=)t @\[Ng'|U`y6HsZS|]gnyѻ\]Mi@]GC]Rj-x6C6r*ֵHm 9m u0VC_'t{͢2W8JJj%HQ= gmB-hv֚sʍXnzzvz[, ɜ?;ք?m`O^8w#T\e`]!)C[],Ro||߂G%@ҵ<9uMBf$_ݹ|x)E=Yr:ԋDZ4xW"[<9#@@{j3v;zF:+ \+J Õ+UF]G'!ֽB mݏҗA4Kq s*͸Q?N/kIs>Iݻ|&4'ZJ욉+M+\ԙg5_aJ舮Ǜ7vS'#Xr=+VћDwiJ܌gIm*W/XHa\k1iIkt9=Q]N,vu8.}8P;}$3jaAl?~p ;sNzsڐ%xOLW8`)8QGJ`!z g*kv?hP?*[>wt_z1;f9Pq^2[|Beh8LkC *jGxSIԲM,{c+/l{;FӘMs~i^j}I{^x=Z}DJ^#M+S3K})r3Ԑ!@.@KAE"SE&p¥UΡ' hOTӎ[ČO-x74[l,J iI{JcOy}m+_,S5 Lq880 g?wIzեyh ĒqO {~U&@[#?z1XOZp:6v$%W<כ]^vtB7ɜezGw̤܌W7vz]qx6X7J@3| B=5=zdWKEGAEhPQ@|"mi ˜gP~jxjt9SH.,Pb6W6隽q򵤬{kŘB,tO*4]-ZDLޠcNc7?Ҷ~F#˅q_x5_ + ( cKo]=|O (=::q$X=3\Lwl縓q@8Ril׎ehͬm,n [RۻXQ$P¿E)43Zch h>{i4\HdԊIvE 1MᳵspQ )D5t_-Џ6a떰u鮤*hou5mZF +G(I^71O-Ej_݋%eaO{bn'\I4uŧ@`}kJ}"M1Q:ӾZ3L1;$lcmFZ9>d8j0O).3!UY7BG,1M6al4F*V$m<7\paRn&%J1L eurU%ӡvƷ\aޟl֊bU c$fvFƟUyH>))^ZSri(c?6qZo4 %9[;XAR{Lléo*ā^Z\t̏+ecL@%awAea8>V؅'o/l.$dv:m߆$\|ê+6U9;MB g 8VK gI׮k]]][B! pA8RC:5trW̑7k~3>F'&̥5rŖrEf>ֺi -P;5r5qI\͒nYۮOZe_kYF{{gZBt_+t>U$֓,$S(#ua Lv98+5H Լʟq\5ey'%vhxuMkvgPS]Y3izyDVqV\NmasH|(iqHiP)x-vn0nL%~ {-FdԬ ::}kRWBB+|:":ZȓۘMWKռC(Դz$vzu!bZ|:kq +ԭ΃ڔmh\9pMɜM6.ZyfPíhq7Džl`\~ey{v(K7ֳOCm+.^hSM[݌6G0PL3v5vE8ÛS]|vUBn=Mfx—WBҵݽd%RLgXª"Siqi-i:s!RzֆͿ˝O:QN0! sm18}hM5Ůo!TXK}u j %yٞ~?ozdЁOsJDrZEs!]͔5֩ZݤȨY[.Rv-no}q[@vBG rE p>`}k0q= m+dq\l]E&n 2F_\v =+[r<%Ťkr`9ɮ'K iH< lk~ʼn>H$+H_R3`vRVVQd;]Fx@p~8$5j2Z.*ppw"^eP6I3W\<ͣaNk[txNҮ~cmX̬ːkYY)G=S` FBU]LFm#k k"i2<1u..$WB^kR0]m _u\޹K4̀VlMΩ F[8X"M]+{o|>Rj(蕶< {RzHR1E.sE N9N{R<74*p{^a>4{&c,=\)'Q4!z3{ľúU? S|Zc5{ =<ӗ%[ҚY,zn@ ncs:RT֗gɰ('9@1I$!2[<+>?7fM|u /Q ~[J zvTwS"{?FQ%3yXA޽ {t_ O:D#9)٨zR*Zҍ䃓8 GL҃ضNxDjj$е' Rٓ?&|*cmG)l m_ի_ EMĞt\wj$\d #xeuA}ZMwZ7Ssra80D6aۭ6% X\WӮ`O@֘uϠfyHW/+k3 )Q@yƈx^C3LƷlOWμ"kA<7_ (Kb_u B E}+wM:u֯̐Ģxz0UjVJ\i-ͼf8 fWE=u#ÊQ[=+[=K`qWHzoMZ)vEX6`5/`ߤv$U /Jێޢ)5 <.eYC  /4Zp'#Hv58I< TjQ]ǤPEG,`h'ָ{Đnq5Q@[沩.?\ϭNyw!a*QH@"sEh)b11u! \0$we)[BI v ;5%OZmBh0ܟe:D3D.$CmZMn fK4{| l*KCaBLVi<ަhdxNI(;2E.PbmV⌧qN;KK(D*S [jƱV G{Tѳ )m yVLƂ0(-jd|VdFjŽ1L 40w2[lBZ$9)dTM :T8Tb 쮣{Bo*'4nF#];0p ^82g$E؋G-< Bg#M'{JHH8RAn(u&YGq$:d{ КOsUeFV]1r)4RZxF^(n%tpJ:_Zt7v2r3+;vGٶ;5qYV@$#o-n|x|]0.+_=II/$guo|c Jd;FqZrҶL?ڶ꣉q^&oA-scrAhz%.IXTwt M`?Q\\ QѕtA=U:W\thǃUhmV/0ljr[ȄB㉕Ik%{8hc7I'X.dV#XZ 998=뺔vE]2Y%3#01RTI71-rIX7mZ+` OFiAoX|sQ [gcՎKsT4v,8w+ڞ;KG'VN\Hı]\$TZDÓX݂sW?ݛKM֛Vle{6mR\Aڅۓ6=ϥ$~Tq a( cN) B>V{Sdvle7Q\nudp0I.g||E{3ͭc[-y3 w>VnQ2+}yipGbKWT)>Q9V'\3]+1ڇq g˷ֻ? [jTڏJxWYo[WFs+`MDž' :zD箇DĚtwzU!O_'A_I Qo<68?Fyc z*Vg@1ǠIJwv"62[O=jŜʯ Jݙ纑jpd85I ɮ CWF7logvvψƓt\,tmhqY;qg @`Lguvlm\d`d0S[)$4[OҴ%1沛M#z^zeŧi3ēshcYd uM>I! ,|uK"e䞘*4[ uxI!rxZV6n\]6/nX3ai ms==i4,wt"NN@V}ŭ)QRDФTٱY]  *&Ocpj; :P'oyP\icg Q&2si[\Ozt-dr>|&cTY&fN{PHc:9;Q3Q]Q[ 6QCh-`iKgZ/q[ͻ2 r^ys%lm=vB65 H04rY0TbԬ`Bg N1 pASMYI2]Jf Bs(zȬԕ Ic -4vjş:R羅F-" 4FqמƲwi+p:bDRmcr++fs3FIF' OBtzG9 nP9Fg~ERD R@w'}w 1 ZA5zFsOzPrG=zVW8uOP<ӭ=Isցu eixE©4u4(80)s}SCcI)ƒaA')v@zRO>Ԯ;qHlsЃjxN cEbچ6Wָc@3/Q[cF1gj{G>k;UOZlnkV8?_ZIYPr^rr <1+N┶yN s En$>+g4 :{Wj!a4ÆrSC+xtj76)vka=NzCEW;Ws\#/%{.u=/op>^\o}Pqp=}'Ot( ;;`x1?mj2?8y/ܧb eVL+mIhB1`b k=2|Z]Ԟ֑t;y@(uVB%H>0֧=)Ŷ?=kC[SJx'cڙsS& )lL|6ߴFOkģ irhc|w =COT ;~6n5AZ8$\'[=+6mk7K?N&Ɇ2_֧l  #kZ!hQ@K1$׎]n:+|\؉4-[{%r澶53_LY/#cZX,/)EwEP3 -( &n>}xDzq]Ka^a=GynMt:}f&UGp7kQ&@M;TQ ƕ7)]ܮϦ-C Нgo7szY( 9xzox>Jt˾@}W~/9Έb7K:zzTٌ.i3 >=tZv,V[f[ ~֭>7LGB%͌'?ҵQ4qK  ;д;VKDIN@|ek0=r;&xɮqW$QNڃvїC:k#}ުijQ2CN: V+X/j`\ݶm!BL`E&Ic,6T涝"IXD)u=Obkple% =(JMsD '*+I"JܶIUP lahZaݘsGrco2E!8954*v=⍓4n#w6uV?(0*q5mvQtWnJimk1}zSB`S~Kmr.Ԏ #dRB%mbzTWDpH,$Q2SLp|;c`^70B\ >};;jח\^Es {M{ɝe,q*094]Vz+$Ϙ#F񎦮F ֔  =xuMեrt=KҼ]bG5%:]7WS)=kK$6͵|ҺRiYо㥳}!dS4'wgV3F:߰&LzW> +3 Ҩ-}F-{kV3X$Z\Py&rw3[+2kF[I\~ȒF7FczW_(n#oq|+ZW0U3?~=T<1zּ= WVm%̣QR\rN*nXc<:WA.rlנ;hQ7'$|j}GK.%0B| G[1, VDE-/%Gg/t [5FY]vq'p,ԣex\ٽeMQ]7*zn(`UXhOq[JM"i#5{ -U8cYG0WUW)Z޵o g#Qff%=t\8ӻ'g2.Y-䉗sQ麥夥R~dnC{M+LXjn~r~oJx?ȯm1\"7c\)92#_̂Pr G6PE 6ZFzYAcqiZ!BNNGJSWEͥiŃ7znh.E[eEcZVud-M_tטFuᑝC`FA\^eZ+iW1 u8x>n̫ >*#L)-,c"MjrB+L>!Ax&Qt7H\5id&/ȯEF bFr* 1!(s^`"+ ;8SIQ+3S 38yn|OUb")Ϳ7A^v!^Z mS\H<#tګi>|e^3U-sY]'.j= 5vl"$W eVzsԇt,ǟi,\#B[9bIS|X#ǛK3DUx`{s7#Xh˕N0 ޶9f DE&]I־nKc`\'*+X旑նe ^-jdj0j٘HAHMFyUQRu!fi=Vp3ײ]Bs5]٭݁D)L $v_N%ijC}B3FݮeDSJ ;lsrŽ7s~jLn呢>bֶmv{GPjv2W{q`1Yw7KA!9ibĭ\E[],,V8 T26 )],b pAt|qWqa]J-߽tfvPiqjF+~$P"3}ZM}1Y6p#efӒ7-$?E!Q9XZ+M) JR"yؿAʶ2qeKkrbGM0/tvi0"*&=+ݱՙ#n,\•*k U)$9^~uL˷iN-8dSJWPE6Xݜi}џRJ=ÉZ_Y'8Οxq<{dR<<0ݜZvs:q>ށXP[3C zPz 6r18:ЃP,OA~Ә,Kg77?&Sx7LφC}=jf5۽SuZC{nt]v/@ՄjenC 2rV5m`|P;\ԓ6dXk3oѲF9&.G_FgI4Sk"ÃW~;jYc9%N^Sse##u9+:2HuƆ&JZmlo[W):\C,.pk:@&i 91i˹&qsw5dUHl4{V2tG?g'!,2$º ?oo%7B(=HZWk׷n8D>xKsK!!T?J9lEdZ{u&ę%oG<}+D5qGzuT ץr[[ܑ ȮZJXڄthgd dc$& G<7}\p? Tft}^ί$f@zoGUD4k)Ċ=դdLR:-V$MirnSۚ|E{>$m3VXXynYuեR7E>]fڑ}F)g%ly.KZj]ͮcd)^@C^9|/ l:[h&QR.'XmF \,or󣍍dzT6ʮZ/-y #+r*a }mq*>S늢H{bcPR̻@YC;tK*,Zj/0tJd[jܦŔf`=jͻ;[ *ϥUwe&{]L T v؇ny[2\QZ1E%V8ъpN|zTlFZ&+ʸO "C\#3,2>Xg+v*G?'[8z9班$瓑Ԛq=BpN6Yⷈq(5=&쁴=j:Kyc])ۏ,};BG-\):Vǯ/e|LþkD5jo,ޤ_7,HHF-LvƧ "cC(Hfr?SAyT})O#քV8\_įV_>si j<]_':e2Z` ? cgj6ܗ_ VAH9^DmOA4 oG58k[(=ku+ۧ[< 7AEVWf/G[n=TXij 1=~lSN ꖦ1zU)LOAk%P Trܳ89Q( qP1A0 (T*Җ ( ( ( ( ( ( ȚFI@Gbr9=^I7]_>fOr6j!Cҕ%),x=w0/o峀Jk>=19L Kczp{UBN3eҹ7-CR:"i$bldT4*iӱf@ZP =*M3ObA)-N-P>v 5I&gOhSk{h([ier[_CRT ]tիS+;-XêýU ߝp Ofib>$#Ұy,~Lp*s'G5w0DQTgqjw2bc=j&&$(/9&;V8rOjVF,Q{$q5fʙѩ IY$qƵ-\,Tj;nhOJ؞5{Y+<3zұ+nuiS<)2O h҄iC; l=:-Di$tp<9iޟ0.mj 3u9|"4/6 %B<ju3k;NGS"H);m/hʿŚA_sr/5 r~\:rOzLHI'g ˞1O%WkrՅY4BO;ϞFbҧ#Jg ^i&iei&HSmL =i$dF}kS,׏ `tv˶~ڝD('zo5̫2nc4mJS6PrccÏQZzJM!3KS:m4krmx>jK[-v:^ ]5,ΗPgk}+wj 7*_-th.vn;DV4 >OF\Wk뚎'jpՊI8}<0pFy_zv6b"2YWϵkٜ?>t*Ұ;,\RwF4-B8#Y$`Je[mJ3sƳeA ߯z^A eM12i#{vMJN;+_UZ$2U*ށMK#MqhȫmϭG N.ܛ8|($a^\s8ʜ͈dg9[sܯX5;[CGNx{{RT1^Ͷ=Ď]q,'zӻeۙhw^ cQ8ܯA#OHLl2c8twL{UGfjE˻F~Brvg w-hL%$!6͚@ps %W!Q[P&Z 1EtئDʌx栆A!]6DkYĄ\Dc%TMl'kH NG+w9ҳ5V[k8ȌC}w0[ĈF\on!p~[%yJİWX\І0@?ʰmEn XtFvTcjwS>KGIH=QC:[]D-Fx^1*](>ݣ* }Ɜd 0`rH0j66 \1T56())*Z$kA'+)"]ӳȌ瓒Ej\ !GڰNڣ[ $嬟!ka7}NIUR?7֝}%1{H^z4fSMǡZxSSdU{K.Y 5vzFL-FyA5mH&ФdհaG8I+jO39Mj+ާ4uͮ ZmZS* [<%˰$H #rm8լfH姩`8maN )>pd^,?dB[o[Z>oj][9T0zTnASjږ!d/9+?R;{zYZAA'NoZwI<~ZW'w| 84#p:PH=hGQ hmսOjZ6Ȏ2 `cxjwɌ*qm˱[Q"O:/Srli>☬kNS^`Rl7-1\qcRMAǵ8tO`r{ H>Ƙoy#o)Y<7&5c~8Xؤ-Ly1 hZMuzӭKq$e,FH>3q%E]95L0r}DѵOr2Twz+%;APMśˍq^:UɧaUd+[ui5x˒rx=j B). ͼX-_?ؖII쐩 cAJm5)Qr+gk}fJ&Kȗ;9+^!iέ4YJ3ϙ ZnۍVI즴s= W7O4ؐ2MmnyYT6\Vmj [Vq_lʱ2j-5SSFɮYrP j{bwW-eq@\̥žz -fUیaL ?yX.k3gK[)2UAw5H ],Ʉ3LZVחqҳqHPK]c>b?n_ b6z⏺rt F& rU0[V# ls#euXuQE|)watH3:@%2Eh3泱q1FQF+րWHYA$u f%pF8QrV` ? b;416عN1pv>(cԁ'+ X:P ~2֜G@XqOJ298>-z@4vF9恤86G##Ҁr{d8H$g=y863xjhV ~20sި7 ʔ0p}0(sZ2 \91r6Z2{w 'w9Jnp(ԚxaݱLޝ)Z>Q@Q@Q@Q@Q@Q@]Y\x?|e~kɒ99ɬj>q Ti)o%7*s]NvE=됖COR]۱%$ n[܎8F NíIN,Z6Xvҽ{/)AVw 844w>t2?xҋM=[\d]J/i^IP1k O4oPPKcn:v)1ZX-*}M]i.>ߟi+k򗘌L*+;r*DO%c*n^{pC9A𦮡2cU䚫%Ky 1=UjEWhKy@>KzWܘCaqʦ~5m%\Y_*jaP:&G[U?Hm% ے OwavaKf _z䄜dU 5󶻧\Ke(erd?/5ez6J%Yr5%s|;ؤ7I U ʹ>wlA%rs&5lYxQSo2ܬq[6q.u sf98*Nn1 tȸxwj܃5zvq6(ۻ\Uavbl$aX5:9@M#x2v,)hF%‘:WcзZVR%cP8]BLq"cd`c[\N،嶀ī{dDUCqTu) C\ИnWȥШ8Y{Q {U4Ԟk=NILzڱ23ұ.f]7*x줍~\ړ&?su Xs͹@*F?RnV8NWN3:Uq[s]X"lp1jШ,q j8=FCMSΌ<$1BNтOj"-n2a䑑I :(NqYJ:%ՠbyz%Ѹ|ЊcZ 魋 1q\ΠܴI 5c9G~Z xȮI-]sXgXJ4RI#ޱ,YPrb^}J1-$(#-#Y1Mi+{PT$zsXRڴwYLj&Чh0elJչK;[uܘ)5*ݬJ'&)E-IF/xVn-Ln7DbM1)#q'9aɮih -+ZPTh {ݳ[]C19jR9~U 78\9s{4n]T&{W)k/=sUU n? ^D2зbfruWzqL-[Jcv' qȪ$Nu(r҅*ٛv&$o]Şq 瞴 Aڱ8}*й ( ( ( ( (!U{ oѰ?LWž+SoQӥ.>r+@'Vi\?*M#;UK=2=j݀3\:qJƉo-P)lݱSKx!p4W7LnF8" sAN67kvkcwb8<.h+Va? v+=񌬫/aYiqy ܟnN~vbGCWeHK8T_t+UA3qj/#DmM\ǻ(,M=$鵀QdEK4-6Z^\A7{x^cӴ[U2 f}R}>hXo5j)F5M7ΏDdE>s]O jbC ȭ!n խV6I0\ZYN:rUȏ'ӦoRlcz+1)g9+򤍋9;|OƓ:=&[yZBSwMvKFjla9v/Fmt D&x}AIӡG`k7B!j:͢:-ųϝwRJKDr*(ލq4U <+ś YIZZԻ7vɩ3G}sRo('S b%Ш7yϋ="ܹ_L{V!fX_qTQjMtr/ 퓉^'x凵rZ)|wv7'+'ҍF*2m# _xWO,ArId'M7~(^{y\E+UE \VR^#}ysu6^ С淙T3R&9Yݖƅ{}~VL)?Z1I/Mgǥq:L=Yi.bEWN8ckZ]'^I.#_-خ?,khZkΊ.ݪSڸ{.M:DXZscAhR$J8*}n֐S[, cIc Y=qZμR8$U&b`#NdWh c9Fq8W5TԵxV?>#q2G1־ 4w江#%#JF =sڻYNVPT}Į(a܉Wդ0莬0-?ƷzK ۑ^x>8 2J{FrJW[݄  9^."6){=Eq[;ܤ*™h kIGm "Z: d v8 - Ȭ"[HVVC:E^H\_f!=I;F- `ҭ^”Ioo0Y QtT°0)T~~n%K>xyϵuE{v3neҪ,tEݗ%9iP*6YX*zsP0]ÎWm7^bz6TҞJҝ)[RH9ǭ}+>Lbb>VjZ^=sn=?$zؽz~t~)iT})0ϭnޝ4p8 yNғc-ӧcO#8>!X =s2{`09(`S1Zd4N<)9TЄ-О"zwPs~䃜t@`!(1~t~t$2H?/;s Ѻv"p%qwsG(P{R) Gyn0}K?! Jc}N3I'Ґ;w$c J Rpp;LWs(@?POcҘkq;RᎴng:@O gҐ=p<)ϷZq)B2iC lN cvO@'_zPX4HsZp9@cc< ݎ3Ӿ)Ď{4wh҃ޘ ;Rc((((( \*61_( ]йZzcb85kjaqvoa},/$$29෥^NF7iD7]CZ!pZ7ckW/cRr6w;+zE-qOp{RjF٬јAךOp扑=% 68ZӋII\ͥoh#(5q~bB6>PWR{9 Pǩ3\yQjlZ]EE`*~v$'֮C^iD#rN8 !FN?tZWkbDMicUFXV%6ڣ;ޞnu!QU2TEI/)۸15#$}3۬0s)3ըẔ-s( *֬kwܓcx.f10 qɩ y$qT"44.f,p=jŻ#5A4['߄Q%xq;sjڜ~Ӯ7ȧRA<+hu7i6|Di10==ŽwSqw| kSJ:V1\I 'O"&@` g4]bٗXYih%MgY,R}7Ve%c?{WGe 4ҵۊ0rGGiچXX$qu"āAN1}ς>ûafQ#N8(xϯj r#Z3 -{Fk&;3\-F}m+Pԡ[u)Zܵ4F?)'"f)ϼD~L8# ru7OS^-,Gwð >w5 $A*{Yu,7q GC['U9P{ y#)m5_=l2.oCG$%v*sN !nP=+/PUk;Mho)}֔q-miݵƍ,V%U[MlZo^]W>]4,#O "Lg<uJnmiQ62`.IiN6~{k:=H ݂E}ybTÏ(FoS.Knc򕼇ѷhz,kmW7hR6܌ӷOW qmK>e+VMY{Kt[.pϥDhKXmI<5kGkzu0!8qkA5+\^C9C \lP,0y(gqּhwi % ݜ 5 arQ[ 鄴P[h'Eu 7L~Hɬvj诫]yTf$jms_EAZ E;$giS'Һ]%Uyp=SKJeHR дd@b2= S_`TRlK>X}+n{>5ĻogWZk=_ODw :jz ަ8UU\Q|݋[,Ѷ+Fق$[2{픣&tFT8ko25etƱHGۥA"{NikmRT_o`NyUpU#k鬒fORvcvq zi8Wb;%Cڴ;-ReX\ՒkA[SļlT­HA#= {`GARP1sMJ=6"ڌt\`H=a%gաl@[Z4Phcm{>^N㹡 {('~_P(+sPsP H$1G<=r;v~쑌$2s`AK`֐l){P62:Ursy'i7 z ўZId}\xAqE{GyvsL5u^җWwI ӂڨa- sjxu·uh8*dU9dC3#:^`ѱ\)[KqU]I<1mVbs،g[5oF" HcʏZ4Ma IlLVė9w*BdzRNʂN"VNz ͩҧg}(l㊫4V7/{q}!L %*Zdy6+Au kgI&F}Tdc&5fQZ#pD%`NTzӰŴ'}XGaURɦq+(T=vNM:[WvĹmbCAmJ+KkjF}[FA0wHcZ_9'3`GȜDY[&xTOsTCmT69>CYHj#QvRFcHZ86ơ5]/RȍHys1^sy"vQ8EwԆ8aDLAw`jlW xF-D$Q#xxg43n15i]WM+PTE]'&/_[ci2 dJYItt+p*TIN*ΑR m&8a;894KWCMPAn9aXWrSMik(u-WP=B;/=A @!IFS)sSV=Ϣ?f/xmkm(b2C2 h]Zit/rt] ׳]OW6I:Ȇ&f VɆvƼ˩fOg$M2c%SH'p9+Rr4Bۨ'A +t?cEp-%W>ڵS=6qM 3> E\l̺2>ܩ IJѿe? XiS x\$ޭ'mF:mOd6H$m 3ƗSry, ut }j/Sjm+]2]P_3s|:^Y:m]ݱ H y',,&=eI$U ̕[VlI6itr (s8<EP5iBkg{@89 :fX)($U4;\KXVCpp|֓K4Hq-'a- ͒HRfJCB9 zRF.+:S}kn[žZK?xS{f2lVrB1*V/V"Lm4+B["S-V5:[2ҜO\ `=˨7[},'_6sE$Ihkرe*G䏭Hֈ uE u\w5NrYm/|:wn'E)Đ8lrbbz5 ]l\&|sRajyJ.5%Q {__ - $ ^&2[\{ hyU5ڹ~:n5_ kuk:[w9*}=5\VAkr' kqMOo&݅[%BXDvK${+uozɖx">:qvVΚ䊋g0֛u$9 &}#^bp^$*毡ƍhlN ^Ճqkqv<+Fֲw(= Zjy֯ KpĀMMAlf#>YЯO )aX"tGlH0_6aiqF{ԧq&MBBvF`kƮE$.  +Zt<;,OXgiE&LMrz&Hr/baQ߱I4Ĺd#9Y6]Kx' t )G_`7dnc(g5EwrRM3Waݵ[_cX؎L-g|W=HtV(iܑtn#q۷p-_VkXy`՜"OK2K;'S9$4 Rpf+Dږ LXB6ZחƪU'nZ+͖k> lҵz.ipXi.<ǿ|=>j/ [oMަviv^ݞd`P0‘iEI2i"֕VwW舑Y=fV J+*Y4K'cW3\i *D]98*vU`Jm}UEde9fخ1kI^ 5;Q"$*}E05i%l_9*+ķ1+/CSU4vf].B(Ŏk ݥ^pŜg9-ݑ暲Ndڟu[־Žբ, Rv4Ԉ׎+nY@ˌZf#qUkGb0 g^%dNIRIIq?wPOBB6[WbeQɓJn/Y-"}PTz~\mrI*O*Fx|鹍hzmPr..#qfM.+=`?BigI[Q1ҹONԥP] Qޢ/{W,jֶPHUVq457#qִF2ztU3X=_-2BԦ+$j%P})ǨB#{sF={SQrfZf% g7;&T6ߖB^km3ۗE{rNGX=Ч%N#emy1RG>Ui&vؙs޴Z؁|`FD۳pO&ume85r丵k˧nҥ@D;|bWk'dt]2w*m[WW5}eeݝJ2E޲켤V2-nQQK;0V( `Px'l]Q .qEe~T`J,+] .zl(P8\`t⎧`zf9 u4z\灀}?ZЄ.8#8Ґи9<\s@$)*OҞ{LNiCvw4Y #<Ғ3H}cM.ጒG2}@6y\3 &9ݞzuo_c9(< aawh' TBX+~?Ҝ9^zN@9O,:3$}jX2(aN.I:Mè9lr!zJpEOL$t}qւN Hn< @,N3\&  cp>4PAǚP8H g9縠B֔1r:cq.AwzP0LdphZv J 4]>wzw KQq~h Oj`)ȥ((ڀ9Mo$n;JKH&ky @;lsZ퓫C|V7;/wyִN NOM՛1= Fb!*Wv(q$%0^J'bdaTuIX%H% ִkkq`Ov@b3)j=L LkO01T$?h&NOOsQnhakkem/*QzK";hc#4H,lHWR>yq T5d}I}@xkƥ5eo"9F=O i!NIy$VXER$Z,{:q1>>GLg2E9漪̦^l.y} }[ng9DqPv#*-SxzwJ4YLeng ==YBg|9^ƣlg~7dm&H!ÿ́s}=+TqK̎Ů6pH= ngW "6[#Jn>d.&Ezʶk^fbFZ7P2$N+ΕocWͣ}kRi2 áZKgyfFMI&%h%du)sq\vךB݌2eDZAI );$fXیcƳd }E= z \@]$zBsӑ,|"ZE,oJ,FӱO8kN#HDA˿wB\W 835%^kn?h0ISV8n7V6$%G5.mUcPY )\t4ŋf\nqҩTw-;"k5kXnۖx#vIm8XhyiK ˨sJQqn7hq0Me*03\vƚ1hʴյ)+vU2o$]R)V<)Q(7(h'ڮDiFU֥IgS(mYِ_̄SҹYkYPBKn8#bJv8!+; Uv䎕MݮoAa;91G *Ք& V \$ѳ,5}6r.sTNMNBLtИ0ht1op3b=~|J$ep>mWiV8#XXTT~H| xU7v4@): |*&w#$gң֒idb?_0_)3Z†+Q<I8ր㢜zӇ F{(oLPb$Fq<( 6('-=RGJkn4H@Ǩp(Qǵ0KJ qAWKA-V rp)ˁ)&Ҏ29qX\ `SQ: .Uh8px{S`ǽ.pqw5 .H8#z'T#I j.@FZP4\- v4$eCҗ$uJ Ba('x擸!I?ZArp>:g" sҞ c46K?ÌwPsE yP<} p~Qiv{'.Iic@pd`.0HzRnP6A@vpGqKu>1 J3ށ:)p>Z`'& p8Z`<}ҀpzSNh\t4dg9҆Py$\ށgj`(4)x BOpK!`<8NGpk_O$S[̫S"UV’jzO+5]2 cVԛِZ%gm.˵¨BǁE;Ά#L̕N=A*hˉˍLXr~@Kc+$5:%)r mMKr΃Eyl|7@Mc)S _\v-FUp8w 0̲%`FUKu4V3UUтnIXacU2Qv2o쌺-" ҝ OZn-᷉.c,w&?=*Ԛ9k.f`#a0ho<Fq",+qS췒HUzT{h՞ic yǵo@j$Xl {{.Mk}>ȀkEW [4h~^egalZ)q@xf( *8zPvlq:tzmhO^}Ⱦ]7^_(xUJnQ]% ldA $% upm`G:x;Q\\j6R4w6$_zx'V>,|&!mp Ө5NGuO>-|7qSnɤ]kIϨ;*'JSK DZ4cL@ss\Gu23B sv1RjU}xkgp'3:#mb5cW M쮼@vœ؉~b `VGM W_-Ѻ\1'J㧯ҬZ}}n Hj !Zpܗ)_CMZ5I/rb1&&A%ȈPQ[)XcoO]vȚK3-֦Oخ<,qc*ѽqvfOt˻eF`]ӠHwcJ7GG' xb]AقONfKiN}\sv6-V$sYm|MҜcts;teM)ssY:m{?g#t\9*IDl$)n}+Ubwhd#k`-oIޗ Ó\Ρ)k<7\]E4AF5fuW`ozXu(mU'ޢW3%|{S{vuu5}0fqOo˜j8'8?(Z@OOm;yOkho H) "9y-vkPXP4_,|(NgkVRxLF"78#jmCSyd*,VK^;%DW?6qڠ^^Nm_ˉytLUR7[cIfV#9[፮ {vu}lWY-)'*^z Ksg$lY?p~ozS;;)bR^i$J%BrE}U%N̰"193L@8v 6HK~`sjk?7vsS>Oʧ:Oux#{5E#oZ\eKUmD| ccpP89Փs`*!uGQ=ErL-Y 2cMG[K %9Z J.(.GFS#k ۶?QZ)r ْrDS=}*DYo^eR+dd)3|s]>i.#X xF;@3Ls\km F9iR͕ռ3 )qҩIʷ 뾆7WFI)-qt &w;$})e-{ ltW?7 ̀1ީՌtl+huzlom9L*?<=yn,75eGq%JNkUs4!ŌVJJJhVpbYaQ$rhud[bk,@$vNI b+XV76ɥ41 Ə,2{vYlSOۆfSӑUm%h$S(#)J ^ ÑUk#&1k ̱CAXVԖߺ3Ag=85 jp5dwQs85IGq@Ny=)q`=O4O$S'FWw1Kln¸oJ Hirqd:{`u#ӊV=SN1ELOx9,+O1֜qڒ@G@@Ì3^bvM73I cFwAޛKXj[=> v1LQs DC`~420x6.Ns{$} >4>8?^ўOjry9w$g!g=9#AA׽.N\rO;\y@ߥ&I9~-A88{)$A8럭!`ޔ(PXpE('>4S8H sӸzKP{Ӂ.)x84`;sR4.Ԟ݆(-j]g474hN)#}(is܊/'ҘSҘ'ӊkB(1 dWB|ʎC [/SǵlqZk[LHRG Gr[7$@Iޛ]-߆ L^f,ddO?6;Waza'ʱꦯ+ӴIOף u8=VH+򯁒V%a##S:mb=X%( XciSҝ90,O)C7WC},`,7u'\B5ݖ6C+Ndv\吚fz|sNEuZw.,3ZζE6GO6:lw"@T\x,DXXk2nIYZko W,sqoUp<@9"ᤝWtvgeg-2< oz[ok"nmI\֮:+dZ {r8PH^˹d$~4~ٵb?> x*GEudmtOou*j?21[Kk}BYfHlrI}G W<늿kec o=%Iy|ކ?k׽kL~Z\ls:Ux"8m,yk;Z&Oj| m{rT2&M;YK]O}# SZ^(M/Y͵PW8 \lϖܒ]6Y`߱qޯk^Յ܁4$Z+ .{eޕ(1{6oRאp$Xť&'`: Z+ZrM?u,XOꑥ(rGz纸+)H0! 9VLH1Œ"\e$Z"^wm1Xٮ/ w%Oq8ajZK{JHD[%9uHG"@);Z̶@4ɥwWPGګjڏAc\?Ʈ0!ze$䬌;X58!3;C~sZw6s0V)TQœ-+>̧X~5~9;=}-b L9ri7洰b9vnNzPJqZe_MKHr$\"2ӿr9;v91kZ#lkgWVV<2e['<}ji es^m))YL.u (Xh@pA} :4[m`BRvHq;{Ԡ; (Z[MmG8YܞjA)MOkbM—仕U.A8E)׃ZΓ5Fgh0sVX.@5b! 4 UKYF P[=iM{+5"&"0*frn`fzެieA=jQWeܑԊtֆ&a;.yƑ9L w"~SRR ݏF±!q*m6g+ǥ=-9e#U^DbG]K:фXUy U}b[+J$GeVL/&"Z.Gl0T$px5r;k}W ⶋv*a9#i<{Pm#2ӥUSdY<E'ib)7Pq)j;LpAO|VYh8"6d$*CBOeOJHrj&dx!M|&T#[L. 9k꤭4}%=hhW0܊*?vL1rxJ 9v HDc$vFHӽPlI9mD ::y|tDLLt V5џWH1!Wn,kV?ʝ9MqKgH{j(`G$T㞣\sɥ00:lw' `'@3l`8.GQw G~l=R)\.tK}hh=)A@p$r8E=NG O#=x}V9~F?. =3RmG_z2{M 2 sђNIP 8víBמL{@rsPIw<`FI{( Ƿ(bN1((fg6qiF&R>^?JU> 3)E{YCSCGZ.qF0b;>9*\u@ ̀FiAhwհ;҃)]Ǩap%=40ؙv>G;+ >[yyŮFx"+X525p}"jeT Z$= ؆4bONȖ[VBTٔ%9RN:K-{i1(8=Nv]L==oi}>VY2XgCGxxM> ׊#Hd-^4RH1$rz{{z .b<ܚ׷tB(17QwEʼn.gǶX3pl۞#?VQ"Ƣ6%m )fV$㹂lFE}s6]Nk-ɲ6{zlu8;˝ۖTުGQ+b12Hd_c͚69`X!20>Kj>.u`ʍ&qh"H0xqZ5Y+{H0+5 f4zC*@><PIv\tUYE*rjy-d b@¦W5}LҖ0W8 x]FHG1[WSs(5ʈn$!e'=zBYAvGMĚ5o]ZOoFkzR91Q6d*aWa\orIҵ#Iyym@'V+wY jnH݋ypqq_A av|%{?Ad%CVSЃWOG xBu@GRꤎG d#VذF\+OƠh\A)r& qy^2]rmY:vrE}৊ֲVi*؎?:JQ-6-JQWGs }7~w1/"7?ʼM(WV=+SMTx CEnCiXZܰG(NڸjOFei"Al]uz^jLtR^.' 髣%'"_>_:ed@ei:!)<1uz\WsZG=,hvpOշF`*ؒU{CHzr~9Yڪ2b# ^*b5ا-ڵήt^'tG6ҾdjV1\L6iBsRЪI|1pP+V-;PX I%E7F}Ue].1"\qॸK[ sqRڞksKmjxP:q{V7xs[qlᰠsGaW \29;}v76 ̇'r0Aƕ{"dJ:q ITvf$_iBM;A-պ3LA~UBfީJ[Hg x'C8sԆwC~,$\itY#.{fUFfMiSH$,ˀ@ȭ4yn"3 bfj4!$ n<deÌjnm65,t#) "N˘aT{?.yTQBXw˔RHqxUԧݵH Š2K#HI^X)7mf92"z/qXJw8OlfM~VV6)v:K z!]=h1ӥszo$oV=ek3J;Q%$;;Tlmt4f*6s_6\'ځ12k-^/Yyt3GOcT`U1ZJƲ)4,ݖDJQj)ѠUjZM3&ۢ˅4RҴRV* 0>g1pr zn *pTrQ il>mlF!8z-ːNkEQ=&Yr}v˃8kQϞ`wIޝ&%;a_oGGZ 'Yزz\t"ȫ2[v5MM6'c8ѐ)y}N'G"0^m+vL\'ЬVNKu]9HT>xֺ)-M#kP09)(TsZߠj^|48$ҁ_ӷ*3ܟš (c8$' w=;Pw`zBCjdCC 62:sJNON1ҐҐֻ9\ )VE#st!َydS&Q|CA?$R8 ~#:b1t4睴qr8F{u= ~t6\89ʘ-E~)yN!9;q4&: Y{p'ҸjBI5{~:t`g&qA'A c@C=)0{u?{c9-`ArI ʖ}E :\zh`2Nqw4#zCBdhOz` Ng#<8]P> lH0₇o玧vx֘(o\{}(QA P>)zJ8$w0YNOZ"ʼ\z⥌i?՜5~68(J瞴F3z rH(>c QPuO4v@42 k4u &pq{v4Ϟuo¾(JcqZltSIT={TEة.mE[*h ->0VQ^7G(8Qԏ_aNR(34z%ֹ̎}OI $hz UfUX$BG @`:Zӂ0a ގjYY6onWEA9'ѻ3>K7oC[rh̻>SC+֕ɔm f.bvb#%h==鷠&8FAB-3(Cԑ\?z8L/cIrj}A1ޅ*}tm6Y_I7ͱNv\}JSF jW@$|q;g&6Oվ֣[ = I%;YDĨBOšKi "QbW)m/.a'+RclrT3YJdEz񺃅=ҝ)thi-fGG o1?z ʿ]Vb.1aQ:芋mb]pm#E;Q(ѣ#;!(vѻcޓ#ɭI}=py͗HP޸ϠRF9+dYٚ^8WSgh[99i#z0eGzZK*ʬ&c m棥I-BU'.V'4+Xœuj*Z"Ef\:+9SWљMu,Âr?YTwHNUJ*WЦ$x`?Z:OjFX˻n ]U2*qWn`@_{MFx}sHwnZztX0a֝zܼ]\Ã5II8rM|)I,>m}xZ4n?0oJ)yi_q# $)UV#ڷVdr8%w F*x8qV =GF=vRHUa&Mڑ^j?Q~Q\*/`3 3q]Vo"݃s&ɽɡ+x9WpMC2؎ 0Ǒb:i/@>:$\ {WE-*sš2T/S<43=8zg=Hr8M ]ؠaPYc;@ǥ(䑏Ɔ Q`Rq2ziw9} OJS#b]Üdt3րI9@@ ր;qAsM8<} rB3ҔN3ӧJ=sE8= {sހ}9Zqs@P2:q@ \\rv\ir:€B>h'=12zRxzl(xϽ&2ip3N>NJgZ qA>㔀O<r1G#43):сM G x)(Ӹ1K>0ZlE0v$ Cˁs8vqNϽ(p14;y鶔2W.'8@/1wgJ `;~9:Q0&O֬P@2Y@=I==O=0s  .(-N818M;wOj rsPsƘ yM!PN@DeKIU0dYɍ>ǑX]jW0RC/eƺ5(ZKETfVT3+Y"<0𬩣][v̄>µCCu1 vWf3"`sϥ;n_t%u$,CoJSH:m*M,cA]֏n\L53ѢYM6̊F ^1U:[i7&2 d^'/]U.ahm3Ҵ$.ɂ cwԮ㵝q_ix7$(8w<ڵ᝭KiY|cubn̽z. WC1^SؚrB@U=Y (.Ґ 6W aһ)IqoR \4Dc\#0fG#p89aFrz CU:ЮfrI`>F 'IizYVmLZ#R : y =(| |^D5{S|:r& ^5 `7wܬnכ=Y4ehvI=z Bvq@8A4&7O0#Qf )ڋhc๬jB-I-tXXS^I r0"%[X,-ś(R1YN3LWq}Ot2/d 8iI[tT齍D(om8޺Ƿ֍HFUgcߵx8s ,2mzKWm J[o|WJ ]4ikbyiE>SaKO=ӧͱ9;$dcOE[޵x %HTIE܇JIj)i}g X$pEb[]Ou'{l=A\dnn.|2[GdRT\+F}~&P4뫱x@2Nk6 $JΖGgcn 'hF+)wB ͻ:<0d`Vbp`c-LXb]Fђr;l= k hzIKrjZCr0>;.Lt 㧶qsfB[;1 `jS5& @Ɍ\n+L$鶥fxO[ȫ!1cyMPh٤9,kK&q.HS)pǃ֍bH$WmNBr3KXt̤e|-w0d^~ZWGܨfʞGF{Tͨ&"N:\ЫI1wǔīIdo\0bF2 U\yQ<8j!1nX=N+EJՕȣ ȥٕ\s1UMjI} Z$SZg 1*3sOްLp5 + O;~V$ID~U8c)+YؑJ;NɶqkXc9.C5 yU%;ԴAʱ: nv@Sk5E+)uV#".M6"HGm͎^BHѿ8N]7قU|I ',-3qgը!N1Iܔ#{j۞2(q60㚲*m#-lOV_3?.J楌Ÿs>.zFuT{zaWr {KBTCH##<4K2N$(?Jt}shT)#`qj3Ho`4Lj'8^ZPUMƵ))<ĀGBy4\ZXIAHj;_REa)k2Px[T>#? jy @OAi3Mq?$8d$}ÿhJA{#4ƨZ sxR*렄4QCdQtNuS;ǽ)=sHaǵ(O {x={RV: BOLO15^(C^'3NhrxB(pJ 6׎iCA%\ vSI2=:R'c2.  g=91F>>H ҁ'pՙ 2/]qzy]BFÅd=3ֵmmbJ bZ5rZ"aI}c?CѥC G,e>J} /d:E`Rd\meYJVjzVm|Bsޭ: ȓ]D%9=+Δ=hD3U]V}˒ T\1!V7١ V 7A!X.V?ãM \E+ Ǟ)"K WޫB6Uzdqt<e8f|}2jfIkdRW>K?A>K|&tGWV%۰9?( žEz&|Wk i؏Tbs]U<>Rir>bxGbcՉQұod$*&8%{FcsVm9[O5M RGR &ɽ+V>Yr}i-o.thétRaKhmഉ,Se6OּOU/tN}/Rrw<E&ѵ'e'$-"+HVe9ͼOJ:ո=wtmqLM~x8PĴ7o|.CJ-E3f Z[Zgλ2#Gnyevyj5^+->Wʼ:F~Vom>`Gn}k IR[w#55XHXB%ic*I8>߼cR-2K<2{*DehM.}\ϽG c;lO_+ Acn=X[]IE %Tҫj MXv9Uʊuǧiu9?Z[$eU ,CK;pZ$qH6qR{'!MEZ=1F}*[Jʗ'A)'k2{fxeY m[C$sȐ:̅t#[Sźbgfo/U[е#y;q2*7HuI ޮUӖ5 ㅶZ!\cW'k|so _@r vaTTyn8Vv9jhkD+HXjR :Ա'٤iu#nC}k*׬z5U'{Øs&6\Wgo{0uiq 0kyσew1LxaIͼ ZIN.ib@HI1Bۿzk[42\\ Aoo%ߕnWv|NPO--R0aQjR4 v1Z{>UZ۔0^*ͻvтxfz.)1POzdYFfjv 4wUhFn-něKk6Ԙkm=rO kHݕg8 NF'P'pz% rrxUA;gj{HFޭt&JL 5jŧ"qJHL"ee;Ak.fmnF5%Tz8nMM=!f.+8v5\݇(uebǑ;!d(`cK+ t;f*$AWH^@Q9'F(yE犨elue=]đOYi")=GҜuXcV"=9OۜS؟zN똭mļ-Ln"6 >rOƥtKjaXLi$*Ur9Tdmbk1d!vu+du\s|BeooN:I8ukTmR UJyԖȭ4F#fYU6 Eim 0duK&q#=*ZWE>=*5ܿtqH3H ɥ)"K"EU3QN"൹dd5HO)g E;$`zt1)98$Rc8hPOҗb#٧(`֜8<112sQ%LƘ.OqHNI`Hg '^#Իh(8 Žr0sO@~yJHcq2H-RKcd٤%U9lRtZ,QޗZ'wp>R3րG߭dpP-Cv`qKap.n1>Xy)`'9~`aJi؅w9KHQՏw1ɤ@ͅ\ ㊕k楩A>-Ң0=ճ<[0hm-T`94RƼkQz109]?ʣPv\0<ԊvhWJ jOI4b G^wP?':MsG4GʎPq*nSyʚ#{ŧQSkm9aBrc#;GOzHy `C0Y`p=kN(# G47q1AQ]i*z&]R6d\u}CMhXҵZ4 W ҽZxqune(䒑݅Rp|HX22}+kzeZjMeCV*QЩFoH *]<s .tu si̙V3+ډR6{ce]ҾVI4b22 r~:J YPsPj+@^e.0}yG4f|H<N.<4V/lBynG==[[HW2qN1[zdw;89*eYM[ܔbU=CqUH%0r)ͱF 3P5@y湦fLISoݞQ$gֺݙ`I$lc,2\&*!~eM^kB՞ 76)Į3yGG9t&/@&x>_㡫,1n :ThtG\CJgB˖loMF^͖]~=koFen Һq^m6}rp3&b_hbZVV IOޥt6cy!'V2)i!9=pwN}Fg?ݻG3/@=~讞;h<@5,7_%mTGq&u 5n:YnqGzm>|'\m>YdfS#tIew$\O80&w%_X1 P3c{{wQZ5͠JM2>ȗ5bTv HPǑ*l4R]3p{f[o4yr~e=\iR[2\#8EqV$hGx;TF Fi\G ޵$&b#ީEXjXK BnUu83C8(RJM[_[qD\ک{ȕU }jTJžU?bֺ V!58@ [@#Ͼ3LKNsHv]D$#֌.'\HZQu>&$& {RH!In P ך,sP׏ʘA0E#q:p@0q#;=U^)())p$ VPGqMUEQp> \,[mifէQq^rXc ? ޒ/qx/%ӺȣhcȮPHx,9?ݼJVa>Ҩ$WKQ7fx ٌ8*VG _)x{z<ӱRfDk*˽WjM̲F,b< h[ΛL+[x2WE Q1qG#5!R4*_ >CcOr ~ xQ6J8ڎM_1Eaz~>\žVRFwujkv8kԼZd!Y<ﷵ@0!b<X#ZlGǻ~Y4Tmݴ'\ 7gt,ĝ㹡&ǂ7>1PHL0@=۝M.)Xz*ǑWKƓx+Qޜa1 q x*$Zb=x} Z$DFIJAFs]dzuJK_Rټ7'} kT0r+#g4Z66fׂO/$x:M@9?|>B)ܾOѴ^$ZhXNFmь9"=Zt"T pq@|8qg{nN"WS>:ڃڳ4w'-Zic M#>fhS1nZX BFp}k03na4?!TwظL ~f$0+ lpTjwᐴBuS\}hI%o}Kb8[ 0㎢222MW'TLUd<ڦuI=++2^enJh܆-^ƛWصY|# zr<\um;rp~FSifYA5-43IWȉH*}WRG&0>Ixg&d*N?>_PIKQ-mzTw*YYsUhKKة7> ςJu IU :zSDq/k>$@-9>V\=̊)(v 5Xjen['vY tv3,;79?4r+9'sTF3,H z׵fY!Sk\cϊH!`v&3X{ÓZR?=Q\yЬΊua].r-+q44?ju3OM~^~5{ܔxe?Z$煃 ]~O kCptG95U.8,eJiғ O5lvz)b:0 }i8fПv6GSDUpH+X.Dp9Ř"nfAnGZ<'5/pS)Neo`qOqUKsP3Fwƒ Ɯ N{ v `=rQq481җphPQQרc( h#~CsE)-ZlM(q z S = =cJx9B1A9H=W(q19 x{Rip=}Kn?dzҎI9OMCGn|+H@l0#ឧ2 )=@z}3O')]1[pF .qcI4ֈ霓ԧr^2}ާ19J|YܞDʈ/xU>ā'ά2G_SI5|~'yX ZyM i֊U1O ֳLی?tᮖ;In+I,8ku9#@E:UWːM>b'8r)_ QkR^BĂƐYu"mFJqx;n6ުmLh]ϥf䔮ɓҶܒ)i|L9l+ld%d{$m<"aD;r[.~SL]$o= -Vd)#H’8cR]ZQ ;Fqʜu!-ʄֶ3VM`{MWN]px\Y:tFD!\y$_3Ғo۸/KwE$ 5;EH1(j6:B92?[N3rnMzxi)\ʴ mUPgШ+sT &U8SɥvsU)y_MVE)֬B@n) F]O\Ⲓr$2Eq1ՅK]Z|.6KS$dw.qUJdܮO_K vZ)]{G$CT?ے߭ScUx׽G )=))\5F$F iY8=h Yɀ^MHGL42U \`?My&TǼ7Ar+{is6I\0EYK;ReXD$1|*D΀py**Oma1Ku*ȭOJ+X-19mɏjWSWL0Z` .I*1<5#K2@P8# j8*xP}ǥ)/̹ϩp1ђz:C0rqQ꠾z> uaۈ^q=i7{/o_/c0I[Pz}h'lP H @)MAG>$*C'8Rpy.GLq@E8 \8R0@$cHP84q)~4Rd&8{ F 䓃Cy#4 ,T3jxb;c񠥵߶>GN(OQϿ(3Hi pnqZVpO`g9}Ye\np.ہ|WN[{9&C$Wduгea`5;Yҧ-Ш?h`FҽlBdK] LJۑ~Or$׎7Y|5e%9`?Z›˧~E|p0A, tMhqWRa/THג[te$m gGA"ԍy#Ip)\ Xխ$dî+~#VXxIPuhA#sJ2g^O>onNBkS:ES·)*.h(^k.|:zlӟRW Z&V@g^5hAĊIFhiv?JocD*d~v3RN}ܶem]X=?wc$ȒjKo]VCzl 巒Rr>ԜF-Wz*VGQ6fxtԤ&a^Т*~fJV/INWqVz8UkgYn*vge!?¦&RqvEq=wiM(YF:1*ݮWdfeBҢuo1F mQz޵#A OʤMQ؁0H(yFX|c(I:o,r8TttI`0ujV~+.Vn&?9cT;5݂"ERδ`1q:L lZmXΑ1"`[q\d2FM-3`I5صpl (k8,18jMjg鑼zeeG,p:c־6M3>p3֚#aoRQ vm=H[ҚV!6f#=b8‘44%}F>G#y'ޒuz!C6IX48\d8<,XvZFFjJÔ^J~N|7ejbJ p)ɱIv؁;go5fBԻ=Q*: @1(yGzHZȎILl$F3m YWl;g`b 8VѲVf ̄ry8v<'޵=KMI3 K{Uyy:tUmK8_8ZЙfuIP130I,rp?QIL\Z2qtv8>ǵ(<yqsKx\A֚L@6q9J'8z2i ]ݎzK`sd' Ҝ;cC 'O{r;4z aaIL{AUTN ҆Um{zGC&9ܠx~rGN9#߿:t9C G~/R:Bx80(EX#JTZ:?v93ۚ,=)\㷷J7!o&<>W{N #ھjϚ(, m~!*pk93IbH'YbU5:Eւ zSba07qS /zhdLmRUCi_QXߕ/9H9⫔bĠlݐ{HݞZտLW4BiSt?ho20DJO=ⵢuX>Dp,lCp"=OP["@!j[ZfÅpҹ㑚9U[ ]v<ڊi_ Ly|jkhnEnf0`xVwE0 W{c fi ʂCz2u1X u$nO/sOK#> 8lYA^AW3OC`0GOֹI ֔yAC*K+NFSWh|E{ ~6ӡ==P_8׋7ěW}qck_L0WAmy۱f% )kQ^ED^bW<SԥvYD'p$}LGn݊acdstsV c E%$r`L;G=2TƓޣt,9#=KՔL@5O}Qԣang=)MƢJSHA=+pcJ%(&ztz.y>9Ѓhr\}u1qi[- nMZVJq5oy0y>⾅O;kH"S&zGQ_ӵMΙ"̀r?u.oqo P6&zxM9DU pWpFqEULYmcødiFMg͡([q#4EG7saZI15#ȭ#޴-n[I |R{z96ܻu5#qAs a8>֗I=IH 0z φ r;(z`mbU< 5`}FkiiQkH7\\b6*= T WXE4jYZI<+FJvܭ IҘuVA##޵Vأ?ٚI1W |Ap~#]_ψd<{+Qe^Xaa$c1FNSoDFQ8"k pOTj@pQ\3.-Q\ @Gl")$5򒶭PFBV^AwZ)>meYw byR+EbI(X2pOk3#6SAj%+Kފveo )R;:T2[A+ (8㿽M !rʹkndVz>g'9QRap3ڎeߩA4Aˮ}++ZW#q8B^{|;E 犫)N/rAbFs{ҤA,}iiBS*dQJ:T'vM^G }TK+lۜp=j7o4r9*ҟ!Ŧ>>$`4)Ғ-Ț$;FR&ހ ÌU=THZ`p$2H9jzgaە;gգe æ@V$4rKNY-xdޢZλ+LA.Fj{+V9ayJvgޫK$rN+DoIrZY;O͙U}:Wf9q\դsK@w$cҌ4bq攐~X/:~C1WJ1Jq#ޔd恮9`~u`c4QG'֎9zç#('$ƶߚv #_Bmv{R|1Rc=F)@h=܁VzRc8VGR1@8րܚ(#~!}h bRh8@X;tҐ`'ƌ$@gcs@ʔHh Aړ# 2m_ qNSh=2O<6(רc>)\挑ԁ:P-gH8jC~R{JB~1ízpGex3&tv=憉ko(ODTuWMESŒߥ+ >^hZx@ x c1@rriG֕pyzR$ ]gIrWғP$3u)F.[#C@'>4(,=O?th$PG'jaC0.H8i_'Q;89M< 1uθk: 1ƍ$CR6@;q)!BI0~bpk柌~<,,Ak99owB1$Υl皲(x{PÞ'XA?gc^E{֛40[1h߆|&03|澢xR'ɀ7q=5rX\ JBErFrA*6ǥMJt c}>ʣo٪8+Kh'#6 1=k6kvHL۲ԩieAckQ)!s:aZԶqom2%tyHeu\#WB6QE"I zYV9US+U9V'93$iBʬpKC&hK"xֹKֳ#@nF9uAy+DsIne K/K!y];rHȹ[+|֖~I,3N.'*5++г.A%X`\\:$U&FA({͡JW,6\5Y9'VsF9fx 9iTMg<6QMb[@:hzZ?H9B ǽA5NG'\5:m`a־>xWewPʍ@# ֤99c/vEg3 ֛).Elw^}}OJ׸ִǝ^<+\Ft{ܵrdr=s_Nx'ėZ"{qU_7SvRG#V,$8zcާX a0:|$:hZ̀~lӕپppfL۹:k[4[@89޿Q]vP( ڲ #Rvо9I%H6˝3Vn A/ /amL*u HѺZ8o-w~Lt43 F+n-"T"74`5qE_Vd\ç{r"jCeg~reWSJ-\sCO{ NqjAygr&"p3=i)DP\̹&["q2`Vji:Oo8x2*CߊrJe:i47QPQ=}xn}>ksp8Uiti;X}'PdP.9;q\?IMNɯC;fO+mBY]y%y>+YHF񁎵UEʅd~fx$PsvcI ~Ѧ(ᚹ&? cV7G&R:Tf"X2_)%fpNj;c?+)jDDL Tj!1Xˆ!jdHw FNi@NZeeh9=}V5SVcnaeVF++.ѱIj2c ̀9TЫ7nrzS-$'= lĤZ[I%GV}ųG*HUEw<%hqM[Y81.VI l%S/$[[ bdLR ʅjylBz1W;ZȮ ڙz/orkW,.:< 8a^,g~Vv3ZS+ P8S'Ir:j^sDZZ3Kc]M$ˈ5w4fI<җ?IJ g&^)hQ wΘz`JWWvGЊ%NXtgO +Qsތc= >gj2sy=h HB)8zh;{jvyG3N݁  =r1ڐj;'=?p1 h8zNiā'4H:{ Cy4vI}(Й#֍+Ÿ~)|N:1N3``Ҙ_v'{VbcN ʁ+n:H~5}P 9G$7p)\] BU]Ed#=5$͋ 1@44F9[GAH=P)yzP0<|DZiC])s۞P&.9A-P FH^98r3L[iI6.WHN^h&\G_J3E { 8i'1؉#XzcHGP3itٓ}f/ 7Uצ`(b'sŤ95ׅ[);J?λݰHEw_< -<]:k\C''oM:-Q:$1ή\֒;lY?h)Iќ2._x]]-^ V'xݗob;S\hy7JG5^uܞOiǼ8 utsώy*bsF#XZvGJu$8kHۘ5`S{{ 5Bib=*ƕ[Ɛ-qI%ЎHٌ:8;RLSKM\`=jT֒MS-C\> eCWT:dBd+lopT3clQ񮵦'ghډJJ *&xeXQ>6XڤI*F1\K.IFqUg9[c!Ļ4h޺ڱ:phŤJ}11iVcɼUi| >KoHr7F?WE5Y-#(RDPz+eQ%r{E\{.:kt;X!nbU@:+09'}MT_2Fɬ!{{KD1w`brI#dkkgO&ܮCnkv ggmJA {a`&$_s ZQ)$d4xF{/YyĜ)4maHҾ>^"6o{f]co=;Uck RBm:,_ZUR3$+}W޼)ގ mj%%sE߈ 4A1 y*Q{Z׆G<okv1Q h)W*[\=iv 5;֬3鹱F%;ٳ5+ce\۰ ~ HtvGl@a^>:.T9\qmqy+C2T@nTm$ N>GCZqZ ^fɞҫ ;8/T/Z[FPsV.쯠ӧm+9^w(ȤWG2j$Zѣ9c HDFHDpNԁ,ʌבST+RUPہnȾGkZxXGjaWqnNO \Nv8 1*w/Uȧuɫ%Jm*ezS$ȿ.y>0%E3IdWc!= vz˥M,KrxUjS0@lU.e-c¼s':'4uk.psLBJz4nN֩LqZd_fgNH wӵТԩ3x5\J&FXzJoOє$lQn}.M z2MyՐdaAkc4L(\bTn ;a&֣UaM..N842sJвZ'3 b]ԜG6W9> #x87pE+AM Y#;w>!a=2kԲ`jos ֝Ys( Gҝ#M188'8Bir=GP 6!׭Rw88A=h@=} q@!c=(dO4uW bC# $w&G#QF \w$r4HQxC}!`gҀ[}iyix g۵.{q{ 1zREl#`ڍ8 O[ ;us #=3)Q=hvg) !qKbz8>HS*pJְǵHQ.{g('O_ מZAr Ͻ$;J#ۥ8n@Jb r3Eך@)AFp('=)y\a\g+pH99x‚}b(`~ݩw8bNwsnQ@ uOb:RH(n=8hc{% W O&f\f~#X<AWn`pՠbl`HIʑ_H|esf#,)BF9+GNdZv8/M^bϔݓ?Np^keun{=KsK4YT#)ZM}eqIcu܍,u'ݰ- K"JiỦ#r=kJֱiӵs*eO+9EHRI]_QD\9FVn|MYܴsA{Prxyey횂MnvPg|*MR]<)+b7;) wV"4m<6g\i&Ҵb[ǕCVi},Yk #pGC]ٵTZ;kx}s#mKxqzT]Su:?1[0aBzʯcj:q7m$*'>^rxAj$ZShĢ=5\x;ഃܚ+Lj9wvk|hmzH׸|}ЩdXy[?A_Z:왮íqͷ@K882Oq]7ga2N 2}JǸnq N*KxKq@Xn0N/Eɐ@q3I*' e8 j自=Gu (|DV%$ׂ1S:&K ]Gu?)ɇ=PחRُ$r91f=qYjr%fߩ_H~#'^m=ԭ 31WCJ= %iqGgduV?ỖYCjjdVC jr> 2WSjhcRܐя1Q&ƪJ>)9$5 !ʾcG<.f+Z~Ҧ6AGo1XjDu[x Cwo(1<qS;n"u>Lt޵ean/dE?j멟 ƿ?>^/Z"2zn8 _xy$0nyjˢ2eƒ kJrIg[|VP2zkJO6jT"pa'{Rvԭ6IӋlUCӥy㺇ůox T&uwCKGoP{]7nq_C~JZj6i*UbFM$1nP2㰪Tj^?0"s3׳=4›@1\*RD7uz 9?i YoQm0qUn). #gi ٦*U$ kxJiGqw)+K(.9ⴭ;1$mPFje3YM6+ jO#2yryW)ϱmiXF˿֡ YVCIpO$ݥ1*UBlތQڟ]xN3SB~W;G9)+ < .V>m{ tHV#6W Ujw2$q€Ng}ݷ&2D,t hnVۻ-ɹ*p9&6#Qvcr]'KLb 4l2Y i-=Lf`AOQmmJs޻εt9YO?5pHĵ݀`զ[vVE?6) `s)Lr? =sMjP)L=T΄Ȩ͞i0RRAHaI>SWJd6@RAԷR nW+cڪ4~S)X\zքITj+-)XAr=.ݚ6xTrz\$/5Y(Uy YTTrD3Ro%tZeB rVП: N ׭3!FH)ç'~ՙnr=x\@?)9'h>)Tqi n.Gl‚A!J dh#O ;lta18J2GO֙=,rH7zۨϵ)#c=MvPr7Ҍ.4crI8֔. :SB8?Ϛ ]g8 Cp3OA+;IԌ1I=96í.Gf${%yϦE18 g\PBNs;de40LL$gF[|a_d=A恆qЖӕ xR@ק4=J9!n.=) ò<70} H4F4ʹƭm8Jz8@Oz. P=GZRHP 9n?AN:vI,AJ3ޕ;P9T PCu.}A5qG$mn8J\rOJN49CN83}h1=4$O4R%82Ol=X Rց(9?NeyHKLcۓJI88ҀW@A49U;H' vyqb}hdu|ISS5 \spzWMZ c5fk M_A߼=8ԼI,fG *S^! )%;l`a Yx:"=hm,`wd$%PT|%kϩ+&iJԼ ռ?zh"q9q޹ĺ6]&)1T+ū_w7:BnO8a)$v-IKi9]CៅrHev݁)Y^R sEiIHyS!H8jD [C7Xcڡ>;hoeiLqEi(LkFїos1-wt[7Vt-QK_fR6ڂ;v=&lsj eoC!p8Gް;c+1 @r{U gOQgܰNEcS3`c֛db:rV\3gn5Ι7盇m-,!$`{㸮kC{U&YkP,E K)9-O2e%.HXf=zS^1sqk[ҏ6K, (G}?n4cRǷҝȰMmS=k!h,F\p+ǣEcĞc7Ú˓j7ʼW u`0Kݳ+0zr|zXdrG^~SWcϟgr~&:܊})$' BNZa}Fь]QnaetdIk,(}MKp4!Hn02N3ȧd/f9#>xG\Og}F>1J7uRE$޵{fvS|oPHtO\>>\'3"N'b4LBN1Djy{ Y8d})VڱҢi4)jC:esҘ0kȕcŒmPJAl?4]58L5c㭐-9ݟǥ:MC¥"޵Y3)AWF'ИgH^)ktlڹ] jq`ZéU}K n9㢌WۢFv0 Ҿ'*c bvKme5t.&#dfbf!Xq]88~`2(O\v9O>iЏ9Q^~=J=}cclo"XgojֻMnm+$9)>l ! rz}kj=#Phn:,l}dt FjApmԸ$rzrf rзo Isـ3jϺ JL"r#Ω(RnZě {Iͭg1F{V-NQwz(k \Q5כ- Q9_ I̎F(JHЬ1=+.G~i8]LmH AiyٍMuu~V]68^WqO'M+Hk!(׎D4a*𔮮 ٱJF0+>|]vP'ұKBcԣ#1'$TlGUۙ C+>vF+@-n}?ª@dN˩YJ{zh[o;:ߥ8-բ##.֝ 5,{ Z l62Ǔ:⢹:.85-LH-އ0TS!^aK`ީ=Iyqi8kظ'i5;$q8Gjk t-OM 6(=i~XZ|R:ҁ=x=QL}ic@j'4L;@שE ):fuL҆1ޓ#ZV zA N:O|~fq'9jB?ƀx@s@gT`Zam :@$ku|zq[JN$8u{dtgԟjdrI؜6cNpcQir?;^##)FNrR^ccXs@j.p(€2OCKJ261ۮsN( I'ʛgNǧ2pi2jN)ۇq NC})CqdC,r; g!@@aG=kc\ZxWDͫIff9bwFG^C%}è?Fqi]fNKIJIzz6~4|'MKGhԂ%q[f, &n/81}k>L`fd!SZEVnLT6-+y1 6;O{lYԋԥ)yYa\V[g*$TcF5li;!b+YZ 7M{A޵nD1 Ey$duMXJtk>8Xbk[tP &j6MD׮8+U^Aj;$>fףZŒjob+?g%> z3_l\(FW ?a~~Baʂѝ2Ks[[F3,1'{W\xŖPiFK񢥑$:$#y$M&=Q!?vWpiq/~S*Tb׺6}vW9 r5pzy'+tzIshj6aUQ|YIb؎+/SngZB Ǻ26$,LCzweCʛ4n>o qyoݔ;庾h:5 lnHG5~u-DqTdO(8 ^eUiR"Ai`G5F맏⮆ (W~ւ/$ʸn~6$'S]s?¿}Q ֻ11< qh7,Z(NSS,Ҽ5ZLWf }xd^բo1 }6cv2pO9>⦒9P:בnorMsO/{m-\*CA-TvǥMLw& )i{%6RҭZPҪ Jxa{J8˦ҕNPL gUFޙvBf?0<&ѸɌ+:2~JԺ5~27pPzV%1]6ݰ;(%R$5)mjm ̎GTnHFi6@dN*Yq;ҕԒHʣ:%[ IՔ׸{ݚ6U \["NNF{}Zܥ=bb~bpkƟܽuܵ\_ uk=nWo^_|; á~XtuQK|I$1KҾ3ua[x8@BA&[ Pe94v̭]b`H/q+1vtc~=(ZidQfThKaԜ1}NYnn!Ķ2z[[$5r-X{[yh gSm> pAYub[K.bHP2z7cqJ*/uŸƤ*fHg6ŦGTW+}EO]x,:CGqmKks-!Jx3T5{[5/8do? ϝXםqb'66FSK1dS!ڒHf݃r3֧iS։5k#Ge!.,T,id1n ̭/G 2+2wqIew &"L{Qk+`9 Q OfHc_6}=6sf(NkW+ +m-4hr;26K a k0n[Bbml(@9?K[JܑJ۹:g5V=8,cdܒO揽.L2tGZ-):LD+?:h_jfL2}> 7sd|/cFN>bh ;9|H_'-I4& 9B;nF P$ZbFJO[$.Ͼk`pp_@.8Wg)RGR1FA9N~ۯ=A'@67bM=p91M N9<Ґ 3Ns$OZlryQj&pIǩ4&.Ꭰ4;ѸI@'a@rN`bi h('qJ3^2qC7zxTOyI弨 `Ca m) F y1G.%zrq[QeQINIVnGZAmF EÑ b-[ K6V=~K6akmo^"k/?3`w7?M|M}ȧ>ElR} rJV/^#??.KJ5-fKxm1=BaS}d)񖑫iA DtxSE0D0+N hr "Gԥӥ#DB{}v1Oe<::3k)eOΣ牗*;sLy))\d\VW 3/r(M-2K쏕k=JtԞoj(K\em6(֩MX~vAc5f"һF8Or9 ySlN'lx:S0i#zjLdˑM (YrCֈc`r Cku[爢[Xָ涆 Ȭpæ+VgM~!V^YT HnL)v==kmdykyZ48]XqL ucq?0cMm6Wdzgޭ`\iq~=k@28{EN2obaeAe $:g5_,n8UT?Q]5g̏IwO: O=p_kݸG1\p =kE{]v8 M{w#hN>l>&?#2>gy=2Lj/pZxsB!Fv-DC*Ygy.iz_PN'%G"c2ҩț&Db'1 QΊ$@prqj D r6?‘;f8bgas|m/FU1 p fZwMFCˌc[IG.D-dJǽr=+=Yl#y,Qg<ѕns-sܩ|RM5>i_3 wry˙›/dHes0Mؼ`C*L-} D$d,OGV1h9F_3CKBf2J\o2f]٤pqVcc7Ҙ"f (CIMĎzԅڗ2jV[r;׬x߷_,+A/G`8g)ަ[XN)_ zQ{n-pTc1ݟJ'ԫ170u_ E; c⼬ůg͈#ؒ>$$V!HEa8OC Dc+8xK {yZ$JNW'}ml%{y&fk*>+C86ȬihfdVcqk!1HHhM5p3*~zb:k;"9*Tq5Nt(#Z1RCh-~yNP$ 6 Ŧ(1!PtϩgaQgJBU6a, $h!ec(✞)"8,{,;}igB8d[FHyFmȱ98JŤ&!HVCpm્).:zhf˒z6#қVۦvHpGZmb7vzvwfjnBr9~i+ J7xUMrHEʶf0#B'f'+_R%gc4) (4c_MϹLpɄ9s4E;+hu{틔pW9s.o|5:Am4 h]7@?󡀡Gր.1qC  ]=?Z ;Z I֝1 qҳfubIu$N'#ڀmį\M1cJRi":|ppѪYdy7[?;\9k#."krG\CΟRgZHO/)H&:?3NúK*=ހ-׊̄u'Q>4l֧r;m'(*iV\q$z̤<c0~04ЛXΧ*lqq_!kZڶyTO0:^-Yrrrj5հ&d.p?cϽ0qOˆ&s_ Vn4[ 9ȇ^}Y5뫋󥱵@W>U[Te)%.C@+[n_=Is^!=Xy2 |ӎQ֫%-by!!$ך!ace 2;>(khubDW ̧׵bkzqaO-'Bw)?J-.zIf-Ŭ]O2/}c\Kci,בw1`0GDU㒾SNa=F̒P܊ϟwZk䷚kGß`#.U%k%%m-( eNxjB@zاDI=O ݾ^64m!@U;ޚYUK[TsJE .[R2[Bj$ݍ ΞMsekT)f]F"fz{k!-cֻ[.//pnGs?k7;޴΋Ft>zQZ2nzwu\z-ݳF^v֛JQ]NHuxotrUMDY8&f̝7tZvH|޹)54)#-w8ac^m`)4B"~iy+ZՅIY]쪍bda+k:n&{X"ܝksudLڇRIC=ųo!z5al% gӒ[۱L]0%eBP˦,Go kFKjAӳVO!-$?:Z:$k6>v2?fe=efIsw6=Y*yUTVՙI-\,6XCWm^76HdfE#VMߗj.Nh <@wOzVLq##TOՌ[ON*,x%Tv@˞{"Q'XkdQH Ut)Zm:gJw9se1c\u;ú'%Î)W䍹 //\#D\'-O"fkwT߯uw6{XYp8 wUla_AczH] 6p-<hIܧCকqs(F`(rד+$rb7H`dfb $ -ՙ2(9|̔VZk1sjH|Nަ<7C3b\ wC@iGL&2qӮM&=:*@#ނZ9 џj 'CCg9FZ,'vI#4~9&=D( um{sA@>RCn$q)ܑN0G^N9'<&!F:`KϷ֘kp=(֕AE}tf旎 &84).!$ s8U/Q]!=׾(Lm twN? R N݃KcI)C99@bS! Ap@#ҘЅcہ{RBy4HiHW9خ1 =A! dޞNI' )C V@!l9bnJv1@[I]0Z WC~ i#VRRTݦGPqH"0K>:lXco7&tzx@ K?ߝF?,ԍj蹸SUdK(?Q"Z7ķW)c>h܅!%-V$*1m Œ2AhRoxh?X@;9ixĒݵ $YfJ'%MavƩRTvy 374XN=~dw|}[xWk52 c m$ʑ\qߚ6z ]RȚھpq|aszMVVֻ(KG(2]k~WFȽ!:GPd@׽$ɴQWԫoI -ykV-.K(ņ{ kC+Pڠ{I$I6kx&ZzpVA!sҼZ_QeF\*a 2a;zJ.흥dǩ_X[]L=Nʂ%++п71ڷۛy327,-ρkt HN'[ދEݰ>TOA]WI<# uXv7lL G 4G$@jƧ晀rVeUffRObm$Y$TϵQ C0XuUF:RwZ|MsKmO>m>~-䏵<#|aWL*'v_'MkP rE UF i%2c`rkFm2iYnaϩ:x~ CұvQWgY  whjԦm([nO|q\NL7y[egԦ@IP9b%yrvQ9X6_kgk4O3qԙ5߹o3(s_φ6v5ɵp1U>b}+͟QEi\U%[;97Z8"X:uH(g,Iq  [Up03R>G{[G O֬F3;=ng:\F 8qŦ(._y|n H9f+%>u^pw9y-kygyGz& KY\Y4\j4iN|yۍZ[%0yINJ|v:@YlZи} $F7D kzqj+ض0_[1!doý@|XoBD1kz1ަ;CYdY"ݴ։ H"Sh;aRbh]F; b'̊rqJn fFk2#4cqy2M R]˵'4}6جnpk~ wzVsse".0G p*󱱽Eɥ׭ $%>[{3((UxU՚.ړ"=Ӳƣr:A Aܷzٴg&8%8LxLvi"iNKQ}Ȣ2YeP2ۛp)(RqvȎ :y7#Oyd;U vՙMj̵PBQvѭЎ9}*[rOffqr6S|[!7AYbyMVbY D#8-تPTi<SņaOb1%-kؠ0IbBH%7V5N]X~d{Ӎ.ŻkyW;NY6Ĭg5"bjw0Obnz嚪nqZA%NN݇8un2[rI1!3DA%r>QB"原}30p{P R4pv~>FA|g]D%GIvkʺ* ,)+P8<likOV¼ ehrTNM9nz߾q6)O%5Ⱥ|t}ȶH[&<kMتN&)&@`c%D Vt'2`q iFA.c?JMu۱\H=)އ|.r3Q?Z=Y…[ sJ>q_dy&c@[ sd`9mw0׵*v"<Ǝ#9]:z3&Ʈ78=xހ2|~Oq4;ݜ2ځ\V#cL 9&8H:OҜ0^PeB(o@u' S@4`uW8(#ϥBv ۦ?ǯҐ4H s◯'O<86y41hBQ7dM4=M.Cq;дb?OZ@Ih1FG֚XҕkOsNR:P I^4ZCKAHO__1cG Ou'&R2]6@$$Y iyBWW%=Gq4@N2g8!: 3@"9<Q1B-*-K6"w^[[m#[Uw}$T-Z*rS?ʋ Kr|%-qKܞ%*֢YZ8hBg!O止%,d$HNQh|i8M 9tЯ/|S'+so=BS>#f:y? ݔeQcjo 8`II4*1Pg0~Ӷli =2==Uw˒)P:{ z\N 1`Bp) 0`I[P҆OJ. . c8Zv. |8RDgQ6ykʆ  1kI?GtŨ2&%sM3˦'=)난g&Е*LLo(:ԩ"3.KN(ʭo8G[$M7g+s:3ty qRDTgGU]9+зN)l(!U"qחA\wF;.Pp{]9]>evǚϹˋqj}ڗ\(y~Tto d/UJ^ǥ4F.k~22FʽԁJч4GEv0cD[j|kt+OQھkf,>x^*:7lC \ͣj+C`8E|;'*/tڧ w& ob4!FIl޽u'ö:(+99AZZ\OCmtc;L2? ·_ ;{McJ,8z5U^#~ .} :sm0\9q^$g3xY| u]p^I Nb὎_^<%]%Ƌq^S**Xw&bXV9I nSq)e&rP֕wk{.w:2Bs15\|#sgHlm 5:VMW;"Ϡ͈ȍ8߭y˶;f9׫J|:jE?Hu=+I,0<]~C8I[8ɞ@:bhєi_j0$G[0]ᬶW~m#4Tu.CWdފ'o5I,<Ҷ^oǞ%לRyT?rI#ec]- 9qS?`[C-[Er sjX sC4q!XtuX55Q:OFvb4֦{>[[g #mWVi0U@ÃMƜ֦n0p%ӬLs)# 3ZD]xYwV1zM" XZg>XnIn)=- KC;[N𦨷̋g1nTln,0@y.?{yr9_-l18nHXcnv1*AY!(-Qy}QH9FpԅBcDa*HP_޽.HF}HUP $tҎlxaRF dUp G$ Zt6Qh$(+̓|%As'f沒cEW *Uk{ cuE+5 ; Fڰռ+ecO NҌAc˴ 랢]4BM7-4{ 6y/`V ǓyU;K q֮ ]O.C/4/fF 麰mjb} ~mvav#RijpcF8-+JT'_JMpdg,YrAW+A#1 Rzz6P%n;n( yt%wB"O8fTO1Pcȓ"M-Ne,$R 仗z;sS9řcv#F;XVipn攤3w5XÒ@UJ]X\Gq] ;҄[vAh% &oP'swN6P'b}\v8 FqY;jmn*a2%2À+]l+@өN1OBvhtzIƈ8*Z>k(EJY-I%fCQV2:Q}.Db^搤2ζ_ &Dy^=r1惈 c$ CF:FOIy֔Og89ƒ^z39#9ASӽn? f?䃃hvåqK ZQMÜdR&9<JQԁ\zX` 49Is~9ޘץϭ v0{gRn$!cfNG' g>~4! nF=`ݓL,w tZG\ޝ<1KZPx-`7pH۷)c⌜g!p>֔٦ ȍfI~5Q9>ZB??Ҭ9~&>5\ĭhwQLΧX̔_CpJې 2$,理UV$5?-^ԞE_-BpGNGUN;\]OVˈtJy٩ qoWSѠskL̖zm#sb)B 4 Rs6e.Gs!?\^O]McjIpMV!bI]޹$#E*‹d%^G8v$d)#,5nv}iwby[dO})=tm\+xӦml\Vg+FH`T$_5/<]ei6*I[1qdT_+;XX|K-ԁZT.zjEl2i呟ޘH8UVEpBA++#Sf,Pm_ݸֈH#Vi܅Vm ޶#omm&ܠ3*M;QzSD#,i,2w8ݑI^?[-Vj@";ݢV{[T{vѩy`W~0^7\6+'݃ɏ,,gHPHc[q9>wK4}X&~WχmºE 8c8 Ұĭ"OgՏ>qZ&`KdZ:'gO ^"KWk\<1 ;Z}f%:;99PsYUnܜethjZl 寄nX2@dmUk֢sy&}-31j9rߔ}Y6K%_kc#ׯQ/> {o x:[7\C(V1hǯ=TI5--Zٝ/VkxFnIqǵe[|ai@dbܢm֨K7 lp0VsSF9zq7ĖO W0t ^zwmy[Cw0U$9N$&Gu;j WimV֪ gmEQUGʎ KW㷇(ͯ8>T,1\ O0,wKel]ZxyME:dr(gUk:[N畋ǒkҍdb ,é$H ޷۹R1P{TѐGjV~fEEp._?Ǜ$cY> yldU\+zu|vN'*cnWT&iM[q:NF\o}z*[Mf C]RRmȭok4VqڢY8RP-Br6 ּ*a&OkB<ڳ(ځx5gvSwܴm;={ }JL[AE\.)jQDV֡}. 5Y.dlGSҜ$f2H$Qyq\slZ2Ajؑ,o^vtqJ%R|pw)r\ >d0LU<27vVI8`P+#?zi%:UnIgo%M"}QE$w,;2y+-6ct/&Lb<0k vd$s^ ;KDJ\DUvO "KUpB8TLx*vr)7-t15c R >4d6`vQyUs{+k,C ~kc%kh(%(Z7<ǭma'0,1e"#e$+;s o. ԚqH%F!2psғ)\#h[ ;IIbz3_[IA* bnұA=iî}*N+ 9=ÃSN'!^dJBl8P 4 1>32qF`hRcҐ!11)}(ZX`*39$˟JAdڀQ-0'ø9H)^tҏLqr>p{qKdgy =sz;!8$?JSOa0 ;Rg h-X7`v:7pirc!X{PI#@aH=)I ABîNiȦ&0==VˁsHn"2yp)1FА?ʥKcw!<1DSXK vv^p9fYn`j{fGqec.ڏT-aAmRig(P[oDݏEFׁ`b5u H(%˟>9ZO`ʸ+|D.sSΌN1~0n?ƻUtz 9=y_'ZuEb]|Y8Ȕ$N3=ǎ.BIjŶϐ7ZF;ړc(tZt0f9MTuXa2;\ºd!N1#ȭ;ɲĀYеit%~hjT x 4mSE%9#\W|G iϠ2ediѕF'$7󮶊o[c Iq ʀt4\i+6#s;$nMًgrQ3`֘2VCiTVwz9' )\)hU:UOna7R;=Cėr(8=i$k6:vJ%KLU,AST&tWӼQL׳yBL۾OSgZ`VA;k%ӥgLQ$CQ\ûj ˉ c?J!.F# s\sJpaXagic C풵k#&u~)ɥ+R{mH܂]O{{#rActe)iq kmtS`t`x.N0ި2\kss$Vx'$[eߏ$Ո2\ ;c{zmDe=+:iA[XmP)FWUPN3FO5~&Oӵk?@叵xd=z^bϕR(* PһMx_72q͵]xz4kHD=Ǥ1@8_sאj>#AxҵIJNd]+Y˱Um#F +XHa{ J)krMq8 ! JLKB2Ns`|T)_r'\䎀Vt<=z"-+t$Ef.~]-֟j In(^sZju屝r ؎:F~~akk-;|@ʨq4ښtHd9;R؈]64"҈!v 9'Ҩ–g_la̙%F;wf ڕMZ$L3#$3Җaya hu%lwz)ThLHYV5e}2HPaU0ܤdS)SiJ#Lyakܐs5wRBYUc֡%E\̊bn-׫K_[ޖ cU jk*M3fKZomrr>YX| JT|G56|7n7FM2H89ܠԚt[F]UY;{BM\y"}#Gx+FR@.߸fT_R 3=*7ʪOC}&no`nuIEQ(뱙?-ZNyUk;!o zI'-e} B)ďe=} K{wA3w }k㩢I+դ bsWW*:#[WЩw7n ukJ48fp?v'f%.Wr5˅vʫki*B (~oF^F6}ϥipAYPii-Y\ۀ,\MF<H~v?>Rv521it,Lыs *5N-;{RZemE¼ h!e,Fz֩G=*[VT,0sOEwLѼpGmK+ڹM{OK#6g5{+4ˆR6Ge H;=89TΘLMne|^g-UY>-Msθ^O^G#:N8&`z։NXUyQV SV$@Q`HtǕ+!+*2n8|^xQTXɧ;/}g/{{t+*~glu$6;Ԗȓ+Rȃ}c*GTEA~T!= Ρ$V1?&:⇰Vq"=HYKL ؋'xT'3GfخMs;p+e 8+p:iq<G@$RcfzHZ;p:uw0qN;s@A4R'֓bsPsvHH'2:;ݾ9C'aIn ^$h =:'pd)7 Gj].3()h!?;LK7Қd9I H;8L$u\R ;R[6sLgPr}M;]۠!OΫf W[QWQYm͟ጚ1h-oMA1T{)ɦi[P F_/GHJ@?(K^Y5 VOԮ;w* Z,t{+?,r}?b]:6h: )U^)cgsor#$5ːd!3Vt}}s'f?Z-qrm̥ԋC&Kt8 O/Ͻ 5q]$Iup 9Jv'Ӳ۳28kW8_."]E ʨ S*gJbMh*NH+J#+LgۊMÒWS\z=ʹ#t0j@+> &mb1 c\H}n#5s1dC%n{Xɘoӗ"i}76+2z,Qz9ߠ]ŏM)bk.~8HQ|1>{ә[jRJrhqEF[Ls;:5O.Uג̉"^U pdE싚}NJNƠG< <=hl"IS)$zC֪)'bݖ}alֶR ҊPG.tHrA: *$ \*t((p)yww+f1q%{ d g$Wx;F>+emh1}uar5oEfnt Y"^ 9cxG\2B+w:fV#dyN܊%gK23MSu(ۇWm/=qfKK2&S'=#%$F>ZFRT.!c:EרhVv:k{dީk=<V5GFk ֡-Hl;-meveڲt]]e\*a'tF4R)3lH]8{d}Yhmڑw<Q"WwQڥ7krkql q޽Zt6Zl*7GžK٘ `!rE-Ρy9?ƔnΌD.y€b (u=넲VcҾ96ml2"!Can<ndmN'lz Y{)\[r)8=uLu$7fu)47򀪇?5P_x [Uo7+\9Z~ ]^[{u@7h2nl&-5ω}..I2P)]IYbmo4_h*}xrC&YzV1Կv͖p0?GDjrQ¹<>Ӭ4M"YWVY5mECᙻ+Jpm Ktu;ĐZ}4lP =5۩[ƿ3I#IaB1NW1MM uOޭ4AAxؗa4lڝQ?!Bsk@O2;ұV]Eo"[ PA;q-Jla>JV4֦Zw6 >X|]Hn%AJW?(ԣQ# ^6&ӗXEQhGmbš= ,Oˍi@ڴ26kHN}̬[U-5[A> $X1?Z9~:CDk/~{hA*إ{8^1u"ܒrבlv7[)Q"Ė܎zznLkonfyiZ{Ucfw*#eYmi-Ɛ\\3ݯ9rVVI&6}!U)CqR7?O޷K݄chd"#ֹa-KKpDjpTNdY|P|YŨ B F޾WOL:bw:eI38S=j .s4$O' UVhEc'S`澭MËGFo$tA;Mhj<)yPΨJ{eH'#LBGC^|ett)W忂$9'$/ȍ̥moyerijA0*][Wy5J>{Vk؜/z{TV1[D9??ZIl5.K QeR- 0l_cW6h{YҼQ9'a9}a~c>RXEd)) tN_qTlyJIqT;ͦ*p"DQyJyH~绹9 8?  h 8SW'-AZ89`85q24ȍ{]s]h0\nBp=yn[3Nnd/cfB.c{5dQ*kgi<$:۞3U/mG1lzl0 QBq}jf7ꄒ P&Pp>A8֢peQ3mfeqHTT%eXzZjU1%B@ӥR/-%\_VxG.Rw9\]ՃO;%r5Ff'<eZOJJabAUQ}Fޤ zQ3g>z& i959wӇ"~T$3koO\9=IՏ5T 2F$g;bňZt#$1zbt9G&4zJԗvFCX0 .Z ӫ> 3(>aG@%dSBc&Q7RM`s_`K G (r_V(u<<#Ͻdxy{Z2Oc=qJ&z!zc3֑6 ?Z2XҘޠN88}[qFII9npF:ӸӾ^})s9+i3ڦ sFNPN:?:P9)9$Ě\1>7 4M20M.nV i[9.)d]y`4v̊3i"W 7W&>և3Y[!YPɣC8! +- VEljϕ5ZM[0-Xt<t֚<'&Y6?6>mcbОgXl>4ls[[d9Yd:F*zW3>[Js>u&zSVr=ى>H*8P4bz> 0b-F@I0@ǩ⟸9xw6M8M? x4tJWwxM7WMNG5 2΋aI=Dڮ ~n! /Fuvii)9ngeЙ-6◄nd/]dբI/eNx$G6ͯe_e%`QO|?vlMeǗ![D+:Msm{ȡŰQvUu[ 9ƣfp%>5\wCaCwwjDӭTNȧbGR6 9D1A"(4@}4)7kf)鞔r1ңy-s>w< fFNiB\Ėĺ+bA-;ɥbʻG`iS wJ$+"ݸ}+H8HUz3 fzzP[:?Ol:];RBړjRm3jW}ԗ4Niq\ls^5NG==lctN{fېRKѝVv~oyq:VJz} ;ˆd?Վi.7QOZ7l#u՚[X0O6m&m& AC9iCMսJ%v;/ME A˚۝T͹ɏ,8$9^ŏEq\uSHٶRH:Yrp_qdocg!y9Dg|[<~9úh>gk,5V(GzԬ_C@OB8,z 876V.GJR[=আ|>Ҍ-s\p{8k˙iA7x[}"l`wus?<_ixg{(iZQvZO,Eޔris ~)Ҷ?j{II6ϮWN9qdO? <8mF <ϗ֥|-v2Ai8Ŷ-bN*\rћ?<9#NJdV,^=p2#wG-OJ7qԧRC8Sލ%[A|7^ uVqEŕˇB:O{W':yxk^@k/PG_CyQ/}yĺx_o]g{ w0}dOtB %$ZT#f&'p63ry$V`uŴkr{#a!H*dFJf1*0v\i;^MHӴ۶<*?+ӾABh h>k ק ٪۹i(߭˜B~&~SskGSޑ6Tܣ熭Iz9c5.z*#KyEy#I5Črr:KقNXޮR$phi.% osN5FG7W|0&Q,4SqLVՄS@t픴w1"uꩆQ4S+ra:zkQ6؟1,l^wTc>YI[E5preֺ]5{vz>hZH6 oTPG ܫ%TSGFQ*DTy% \T5ŰkyP]ʷ^Jjf餬lisO,w4DwҬYc. Q˷P~i_B]1䱚qc$#h$ClT dw;pSN]eh#xǥ>KYFf FGaZMJ?7v)Yj:\i3eӟުwh\"Gc=RIGqFz=SNӴ7bfsX ҽ1iV+ۺ`5YJO $Q h,wS'p;aoqξx/tѤ+J~Q_7Κ8Lܿc mL 0`c&3_=RH9Kbԩu̳$ n(ݘ ЩRGQΥEjeՑbkJagbO׷+Z {H$]5CEŖ@DЁ<uiɥz =e3w|կytŒh")`q+d>*FۙȽiגpػµ[1&cS1`=}k8c0X${k+72sVt ܹt =)pqE Xv~Q>vdZ G4P =A9w#Oz]<=D$u<A; H~rNzSOc3ڋ <玼Q!  H8lFuSg\@@>WomU 5,2\1uܿH֋6ui*y5i<=_kq.R* מ!qU>Şa R!)ٲ'*g#6?@*-o 1dqI\j9^?C/JD-mev ɭ4(MĝYQYHR\o)ieCOh6bRUU1Aޜzf* AzEqA\ړp~Xv(ن8Z'w@{,`SIxBZ<ьd ? M1 $.: 9nO9{hfxT&xBܐڢsA2ȋ,Nz VT ~ˣ9t xgOYq"gq?W8G I}L|c;Yت/j};CM$L(S铼c^~yf{goBY腣 M%cmՈ;Hɫ)a2gpFNOh -vc*Uݠ8zU"eݝ/$sQe&͍$-cIE z>"2UJ\SEJmbQVUšuLJCrOaS9`ZMݰE&W+N-.xڵ! yTJ^bƕgt2.ObqVCe?RlRQ s'T"iZ;0 +-7'& pzoTh6O}Gjk((B(m%k ,$g@Cz洳ޚrѕTv,ۓMԱ.Jr b\W{Qq${0} ZծlI%^JD%=O.aX4Z+QӂzՍSoKw{-٘}6S=8JIPWW|d(Y]8vrCޮk<'-rK+eK kY_@wN`JGwMN+WEB,߻`kwbU׽ZĨ(,|Xتos,aڲt_ >&$c"¹+cmS{O:[[\ I7=&(<+ S2u{.%dA{b%͕_"BpǁڱCMjٗNpe1Bw٥\4<3u'V9\%V^p~t>&\L3zI ܒ^I2 Cywh^&Rz/mfU(z޹y^ITѡG{ f݆W7 H7g:u6iFIæC ,αę圜XzGMI(O=}c~(_iX+}=:y]k᧌cƍ}FnA0A׳NV>RG)sy<+q~i|}FA,fƽzj*Nċ"$f®#c֢TpcVst=rI%7˧Wfq+G4|G[3w%AexjI-6!?jL;I3 %t^$"T!5dkt?u9B}OaE*uS^9kU ha7=Ē~=ҏƒ22S sNM"'cS9lxnMH=+KUxu Sˋb&Ž7;P7mrh uŸ4!Ρc]|C ӭy|!I!I$~ۅԽ2S#%r{T zlOȫs:X\)?}ֶ]̫mX\]"j]t^?d]laa#ֻ7|Ě@-}?:GHFsT|6AY5q.^h^+>O+wNsohz"ކJ:#"0`"K\>Jx:Eid[ƔiJZvo◌5Ey"7J:Uf(9O^j6$smaXR;sY>_*4}^XCe1Kv:c8¯_J-(n=~oiTiRWh,Dwsr `wT1Mube1' yU>e$tMI&%֓E."?7.{cYmgs2s۱$c{wf4I|?u_5J ۊڔEs ]Y*zʪ ckp3m)(ٸ4m  tv<{iG//TOЉ/m.FFիdeB&à9OoZ֒t3*y Nȑ<:GڬaerE'?㡭屼cXڐ!# FcA]OgO8c*UjIl-gFK %;֩[hr$;,H\0w9\؁a9cofk9;qǡ`۹z EZ{qy{ԏw FANq]K13A.3*d8V $I1;r Yzɦ(V(̸ eXN\Bf9#ֹs^>w'd& ?e8VF2eYc'[c~f6a,a*9 SN)k04NjZ#Me!M.)0(=0N*Ij~ Z2kR #Znz3n;! W8򏙃gl,փi,XdXI䞕wp3UzP0vI{ą|,BE3>Pӓ1g^J3*@ +*Eؽ\/'1xk:L3Lᵷ4r;t4ج;Ru=14oAN1q@Z138$'<А ۰R5$QDq*4j.:90{5mlyFcnɷГcAq? y/~ۯu/Pgc8l@&"<^|@?W*dc^eGy_Qi? [ @\XZS5Roxo}XMj+8=+ow5@xELO99L`(?QJϠ`ԟN3@GB1NSu=sJ#88AZYq cGO֟ނz~CYzj6h&GB?:ipΘ!`LݎpzRl[iE%E κ4e>~n 2/<-lͬ\sY_|m1Z39T`|qi}x7,m4,z4Jr{#'$[Zn沦/APٟ;7\;ZÑU&u?Q-!POW+Y+,m B>R@lV2d(8 P4Mؓ$I&8,FTLR Zndj&I|q+ۼ''@[sڴ79[|QT)ߑS;}J A+dk;e$@+.A$Ri R@sP犨-wg\{[~Eùu\p=.?-#jS *~O8ւYU W;Yq]"7H1&+n1CUS `ތh+)gS!8*KgG+ zaӴ;.7]&soyMܛ렚Kqh2 r''ԕKGr6Qm*bz;#ڼ'C%ɊeNƦ8Xr+}QWbr@>_EUHH. cِ' I[I{G>6J` l~Sh*OK/ZJY*\.mN{ Rцoz7qJ|Yo xRQҔh?Ҧ2pg}:U't/6PvR? n#1R:5)+d*\3<`sLI 7Oz3i5[46W ؈4%bvTqV=f[K ٓqd$ T&fc{<졄:.y]F2/3,sڸkw7%xվe YZ\y'k%+ G>1v}}*2f{͐ ƹ6 wk]#n*KD Ix-n$Ao"J{? rÍ _bHa!Lf3GV(2[=ǭd"γA1p-$D~9]jzv%|OuGZWP3Vz\B9Q5ӡtϊ^cC~?5K Q;hTr}|v5M{ ө/I-֩n张:}s{X&&9aU&+-$u~`+bw`~բW˔cKEr1[I?G_CU]z4c T}۩~_>hyOG6)+2|GX7##X@Ic}3[Zb1yOD^m.e]_)7خVמխE#qKg=@lDۊ|OKR4-4M(9mيblEǭUjc-Q :vfn7h|?ᤉqg+?U_"NFt. ~~-er?G5_)ܵw8<|6?,AtsW/; TY9wcLilLzt"D*&6sPֺ[5 LÜV}.w+9^+X__,vm ʑ򢾎vK}VE|.Z1IXGK>Yt?OJĎyxn0 rxROדNAi]BP>NKm'29cۿ\cʔ1fK s>XjGŤzcT)+H.MC,QAmI<"86b{Sk]E[;r2cQv{qer aZ$E.XnW,*{7ӵ̏ Db $EhP #*;my *#n0+M[ų̌WWSv$2qAZo{*睝)AB6(2Wma]mgjYfT)q[VEEhG1lcqZr?m駫+EN+)$fGZ-}b]"ل?22+jDt[Hb1:$󥐁tLJ  gޯƗP2F#W Jqn]Yȏi:5yle3pzcީCFЂEQI dN+2xٵ3%$};d#bݹ$ѠhchŽF?*b硠]֍;smay|ǍKvȤ+qϧ4`c8447qKqI \Pe4g'S *]yc2\FksFGbd^|Hm|f7>sX3e朎0s'3*㾔z,gfy9jҒ,H>;72.~-xZȟ9dSJLVO{>r{=w̷2?r ^7dm(~c2s>UsHqn]& &Ay%dTC0*>fkpjߥC`T8(a^YŶ'(ʗM/kkZ<7@ZI9nT+&~,zN_־տgvɇ)S6CZ)y 0W*C"~{ܩ&!UBJw`.HjYqf 5[ϥeǖ57$ԀnIm K0 WawV#0R4.{6"B[q48$Ob5Lf72l9!Dp9f 7,$Xdϭ2 ̂CN&V7(w#rQ =U5cJ{B;prJڔyɧt}k?]-ukPe]\GVGį^)iR}B>c= X5s$GboR< 6LQ֕+ucMj}pi ~an ސq{l]ڮc"E$gz.p t&F ہ{i2:o5M(_2,Cžխ Xd`oe]R̴iᏂwSm?@5:knp[ƣm\6=oè',mt[~Fv{9{YKEI+N]t2C 2;giѵSKa1Ӑ{buS}ØnD7k_ai|dgq12Ei%tmH'KKHeBOS^ysH} C!!ryy\}sU-.G4NeP*KH"Ij>ѣisF5,I#,?tsye_Cʹ*cV{[U 0+=VUZ>emz=ID0JLhjgm;q\Y8e++ާgAl'V[GlWED6}===5.Xݞa BV'+q&SY<Ö'ck{Y?E"~}mClt$V,}{]xǞvLƓn7{4RkѯbY t޹QrkڍID5]kY-,cSelvu ᇎ|D~$qݮ=py5FxPev[ZZ^G-q'NF1MW_nr/hʃpT9a9'\ҠO$=kd 'yc; ;\k#ޙ1My\S3YXNj$UV={~Ԗn yQ/I8,6_[^sXYw!J[L4MfFcеy[=2+*t]_vjj["ZMWMcyڒvJj)$84%dTHk5d (X] Ł>Ѵ2~j}%vl!P z]j5cݘnA>;Үq C, @Xťs)O޻-:~I! ;`ukS"$g}DFrkIr_Qs_S295kXw)Q= a{EsaEp9rI&CM繚dx!qV.F',ҁ䓍Ҫ7h}IۓKx!y,*Xn#M$*ʎq{QRN_onOوܹ9n yCمzLV"[iTrA+[bRB sOtLRJĞj̧Dp6y[ v6i6G~e:\ޫ9/6Zw_!pB8z_[.N ps\vV* TUntkN*rNJJim' godJ kC:L+N7F=> ֩q3D|6IFkCPii 209R}E,Ğs UӲ7>RmC̹ϭMuPu)nM.c`Ni14 > QX5"Il~Ѻ?5048 k#h"OQHP+h%%#o-Tp U(K0eUOZMS2.6O YX`>~a^; N+`Ygpo9鴎~ aLNqj5tzf^;{VtGr;BjնBRi؅^ri_WvN){ߩQ,<VW..ۀozVnma.^@;СB=mZlֳ)*ާ-]%V9_ p2ĭ6ZT{ [K rsN?:4\~4$kH>FnN^,h'uU80yM*wblgdg. `-E,XP,Ý͇CRLw̾c _Ax i&IJVF&]4ե!:-#1h>)w 9bV' ޲?Q{LH]/LrDIʺyGa5[۶Df1ijNy&1FrKerEfn1ckt㬤1I[ZZeU M{g,cZ6iE9%C.ME< 悹P( >`pxJc^AL ,=l 9 Ͽ4; aƓxzRA 1Tހ3ԁLOV5PHhMnqZXяSHZV,aWu/dǤr]BRI]?h]\b]|m{;sBa ;.k|WdfH=r7{xHUfO_M/a%+g.7}d4/2ܻgXA[R":n~gt;$Vr"ZM\i BWwum ]rc__X#J'QWӔ`\)' XMVh3ܗBhd&CkA4 v"s&@#QP`4arT,j#ƝD[}$ 1{Y,<ɒ1%Hڦk1F{R>8PBmoS?"qK!@O'֪%đR{av(e-*CRat.-t3H鞃5P ЪI[)BSvj:yh例Y۽U J$,N;r^;Xy?f1M`~Sicndۨ& !\4994f &Jz bTnj!Fh56P5l*w*KMH[Af4Ǯj}N7OdVᎵ-嚲 uVZR*\94)"\`2k]nlUx P,|4 dsUg B9d*mĠ|F T725l%4W5nMʒB7Yw6T)GcO`46"Ide+w~=GlMeSgnrj{xo὆Q=~Nc4"& }1[?? _@#]ݬ[1իolI K|Ӻm2F w\v4OZs ?rq9 a\m'esдFfPv $t)$ x$ [6U8rM+Y$GO˵Mc4V^!WfFsZ)+8SEq%LD)OD=42GPr:Zyu gaٌ2IE 4"Kn39TAuz!7?*}sEw_,om.O];Wbf ,WzTww\Z]E˪-<'$鱅R>W?753qJ<1Op?^t%S)$ۦ(ُWџzc+ʜ+ sRZ"iBq$xBim4@crGK}*d2!\Aa>cXwRz~:gSoQnZ]O>qۏJq)5n,ڼ@ȒQj[6ˌױvs\81HF'Pǯ<! R"֏SV8^ԛ4[h5/1uwϸ$LԞy~/k6> -",~h#&)F$߲gO/um69_dϪ E5&e3xQ`zC=|'<;0&4XO [ juc 3vEk"z}r:OPXmRnP0=IcTBQQ6+؂kaCȣEk"<ԯwϓė,(=*+=ؔ^3#`%2r4qS0|.ќC5] #`nz/l<>#'"5(&C j['7qSwE,A\fU$Ia%h8ɆӚW')=Љ!1jrjnVVNOJx*z'P7 cT3T;̇84k?eߗ⮼2R&5%N^8#hMeS.㏡8+ҍ*qwaIj&CF NF`VLh8Nj%T1sUH%T8۸!% _2c H= 4.-&Mr}\8atЖBr=ܷ/@Udާ[ѯC >;*>}z$UI>[|`,^E5`97c#Vt*oݺ: Bk)nD^T 2φ3_5>)TObCg s Km61]ïi,[ژӝA+nyۑfݙ⿄~-𦼖vC4f_:3Ar##!}yhgVag*GO}:uX%5.u1LBOcɨCJ|728jnf^{ScRS*6Xe,VљJ;ft[cOs]**sT]`ԓZV6i" dg>1=2h6(Z"x?JusCF j&rmL@'Qrf,^*"~%mvrÜqP`#u%'-,˅^m-y?+tkN6vbL]=BǦsHO;!jQqiXi\\hJo"搛"ߺ`r5'79>\GcqPp#Ϋ J]cLmF8.+&~ϝRrDJbxc o+mc7\ΤYhչ&"mc7mD=V,&.u)y?9感Qr[u܋rc!ޚH@yXm$!} =Zb!?/LVz-6y̠8V2/4wH 5\xHyCsCm Ns@ zn@}J7V{W?u)ȷt&Єv1丹9pz4IL\R$ NsӽNƎ-48Eb3NX@SpjJyPCc;\\v 2?rHM~®T hl#9]٤]5R\bRԴQu Uk[`Gp<+af}n¶UI6} ?=ɓzTnAUdӸ$ivދ+s^;LiQ+yK F=T~8RvN_q߂;_fi~>/A*X<$wqnހU{HRdcT}¿ʫTb]a~0jHv)dLl[:4*L|wE+3TՕw)VQ[[kyeCFx#?]<׶CZJy 9׼5i->ox^5WӇNȃWC`H }_S6{Tn$NNs5q?|Bo$\.RyB`GOlҍiBNƑ\~+/!լy#͕b}x5x^)ve\4Lon@ ޽VEb[= VI5 OKڰUId U&}Lꏠh̉t'kje{5Úo|q׷Op#bsqU{4kמ$Y%䘬I@b.[3jV5쳤m[Z܎w8su5wWÿH&:%@xST:V-]ݞai:R]nc][oV0T7w{1GSSJG@ƵW Q᎙ȭJr+hI\< s b݀!q_ "Ѓ\:>R R]ZfqW`W=G {tXkݗRohs_y\T^=? &TbC/?}몔\e(.cS̯˟S@y9>It$'?(&iV4%{V3dՉ4rʋy r1P3 g4kA\9?V^2(SА/y؎BgLs5/q9$:yHЉ %$Wؿ[:a^3Wf4K$qBHe&dǓ T{zիY`` 㜒mexu9"gL(xI/ >jgťʖͿxx{йIq]Ŭ&%fD&ze[rlzzkeQrY\k% }B(0Еi7i,C1;i#shh:<\}+H-$ؒ}2Txbo5m &6Xw)y3 B~=kOi.1|SHc8ݹ]ީ|J$zSS@VPF#I_kZQ" 8YSPCJ1f-E)-n5,٪vܗ͊9UIZd,!@Zөwj S N⩭.wo)帛0zԑJP>_*m."6gJVbp)]DnC(x^9PWY/=軽Hyx59GmJrݕ\7'lO;H=y5\Ehj[x&߫ɏµ ZZFadBwpsUgqMM70u\' $T+beʌtYԶV0 #>*x7Zha?6;_5'K odzm?;.p"_93EklCEra(J7Y6pA%RCr]1m߭ΘF[1 -`02kjXq?1o@}ԡTPA py*ӱIp}i $֟qwN%4}JюWp94g{h0\ڜr~mǺ'V <6 D\Ac옯܅IZtèG LWKO0zau`]Z#ƞMͳGӽSWGf:Rɴ-m ^;Wo5<ۿRvV^#0x&vQ>nP=+z9f,6wtz[]b*IWV HPzῈ%^i<>izs ~$|+Rx)~jf*G:SJ&!2R;cMDdj XO53j?6$n_Ƒ,~CMnB];Qu37In9'k$`KTTlE8$P֗g9+CQ31=iӼE| qIWGF-GS c =k] kSf ]Lw#8]P.O`Q; ksKl`dCگW4f`aEPEPE@ksjnCNI\qu\ϵR{ neQ4Ȯ-8Hc<9=? wu{O"Gh-EoױS]?)O1K܃HίˎwŬ Qh.-#ʕ4:39ZIaM#nV+)3D c#63@l| oYi]ۋxs?^'ןQbdV'5pz4c)a$jP0](2i3rNs ;dK9j(+ zWu\pic𡔗A'J\ \cMc&#;h@shރ#+BKpAlQ-rd}1 P&kqWO1X{z_;S8ӹ1ɩK:,ǿ~l h;9 ?yA_fԵy)bveh\mڱu0O;lO$wwM+^[FJ@% #Af=Y:^ b?,fqϽtqD|'1\>(wlUP\:^"۴suP)B;ZYK01=.k2d0$qcW=2sR|5CFM饵-;_Š\2/8*>mg,&yG鴂=4f\ݞ;2س[f7Vւ8p2VSV5Q{# \R} `t12XWaWʖ>c{F5+8-ϥ9SAI"+*5KRؖu):IqA"%8"J3Ŀ0#|!UqF7mGYHPcAKLR4Ҽ2eL[T"5ί&SmF-[JH8lcQR*FAI3%*lr7U,;Ayp=-lz"M10Ri`H_dG@#Xd5(htS̵*.lV2~!t"yl8:O@![Z8)w%OIFRbܖ ?֖AD3峸\ܱŽ>ڤBKsjT(Fd6419#? N wqRkA qIq'hėm>&[.ԃҵx⸡+jsI-HD{U'^1u|wZ3xwzreYd{)N:U1*j m vJ8#4'$AfY'f'8ߠ) oC2qX$ .0a95;X$A:ݨlEs^.K]zu垍X4r&ʨjG! Zvf6"cR|'M||$ZiRtE|*Y kgx{-MJrZhb7. Q{j4dJ 7Mi1c7ctA W&TM-#̗v=+B?ءn4Y\ӇvQ(>JƏk({iy%?2yR~BI#Юk2Bu*άJȡ;;2(js쳔+t_0tY/v4FA䰬ܷ{PgӚ'ZOQ4%c[-I]\^^Gil)Iw.G+=l**]⌱x.J7(:vrP~=E-D1:,z d5#$= "QJ-LR-.aҡ{F/#7{yd^e+felWpHiuD,aHdn\yf^0L%zI$0p"1M.~de^1U⩴0d'=,iAA"LXTTꪒSSsڪH5+xp4B |{r7 !km8%k|)~tSSG sbr;,y7j0z/L6h\iqCc7Խ:ʏ<9#9yjⴽ̛-=ZnW#84آ}3g(\ͻy0ykEuAH~qx:#?CI7+\fdxJ- ֳZpJ4\J3J91kA5h#^Ѡx፿`UC9'/ zVk: G$Qms5z=7^,6IUx%.ߕu=p=}cS4>#ԦJenDgNjK}N7 XI~ G$`@;W[Hd~Q\NFJkꏨ?eM1}=<_KDK@ i %m >kڧ$7n#Bz9o-EiEQ@Q@5Kkb&r(Rqg9ծf.ndY"MjtQ\V]Nn$'$J9o5)q!@Z&اVOm=F_*jVw/vL³\A<|M7e}* jcY+19>BR {rh8]A*IQ}hM+p NyzEdx?PߢݮDgIǒkDEaO8e7ljYBxj B[Q*X.F{) RVmU%܅|Nex5BI. ϥBhґd;ЌlcxɠTd# +Xm;&ReomĊ 7"J3,o 1m$u$9šrY_EӢOr=E5a]Gal@ih(8.X80MW4' 311O•I,S늉n=)yØ2 Sm=zmaM*m~| X9P ѡ)\y'w<Bddv0u",y5FAjŻԈ'=M9TcҶi60 HJE *[F sW-w Bn-3!Ӣ`9*Iq\(=+x= $!54*ۛh=qU.$$˩{ mb8]Mw+<-8vVUPw0&)ˁQs.Y;NU#mL!-f'ҴH&I tq'N  :R`„ܴS˒=1M%M1Xҡ$'kq M7<\~b0V91V3INi #L8➁ ~_J7HLTZڕvmiZەb|G#h*͌w/{V}Ðf TZJpscfvw{}w9qxRݛ9n_/Q٧Zz}xɺ!Tц Xvh ;jcQP;j][;]TIZyvGz'b **'-#3qVm8E*fAkvn$6:=;‘+mc =85ץ:yǖlP-] t.@j$Fulv^oN\4QOU[(9A 2ÔlpW.k[) t=uM:6KVzo>/j^ [w̌7`VZRl|qӷÌn;3gZ0+YAs5qVXfA<%ﰙ[CƉ.'yK8on̺k7Ίr窸<+k|,#Վ^M'Cݣ ֍^I]= K;i-nPᢕJuFS:+ѫ/c~0/c[#*s+^ק|Wm6ZqF}ʴu:bծ5|'t 917Vu? |)O i'Z#M 9TwSJ*N5x% >Smk*<]-|!?^"nkTS摞mٝyWhP<%Y?J5kW]i:Uf';T^z׍O:sh Zyo~! #Z.ؼTϿnx;ztVH%,0{j*F͟R֬V1mOּIqp /!§F? |5?)/tyGͻ/6O`Z-O*zVICN[_G4U@&Oz-u!@\@e@G 2[Wuκ"!;;3Jkh."iBI7<Qw38:M BCè$E6TM7fGXiP'Aii|m:W\J9b6 !|mR'洍99ru%Z#"emAOW{ |q‘!*rk)5$\@ue;?miҍq.|= woc d_y7\yBN1"6ʤcH'.Qط;/DFiZ"3Yz|&J$6iԨb%-~v`rȸw 䯬i`~:h?lgxjY*9|O+iўqOaC"+cנtK[@6|# 8'<<0iO[2.W_M+Ӵx< yima\dVNȨ5fy71x~)3>ĎN#=+M/$od%F:=/ 9o~C\5)6BZƏvlZ֓|.>yQ 7}k{]qÐXe;i(ϷOcp#vG^? ]Mo,u">xam4(1یeIshՅ-Nb|JXTK9BHw\[!-mone &SpOM*Mxndye]uRشZ]Hѱ_෹dd03D1x5JNS&i|Y9pg`\w`e`g"C µFrr2@4;:*.JckX}y]%sKaw26WM%idd@)H8z)V)s3Jo"1/DJKL=*΃mUW43$iHXC _PM%PW ~5FY`9i\m$2Ntk9 s=vZ$hӁB;fr7fS$8N9bOi;xaigf}&m;w UBEDn';;ͣ@dr15zO xI\6O3l%GӊΥxBɱ955s]ŌҬ˥XHcs򞵲wZ}.5vm5$㌷zMcAʡoZ{|]{[_{?Vh3"Z}*t'fn^x+Trx{SM:q=Wa4}:2g&ҵ8ŵCݹs۷Ogy5X؁ѓL;˝>(f;f~RQ]eLj<eX+m*Ò{VwiwFw/t?[ >1V4$ u? }SJ|A:[1z:Wv/-TQ;>եāVaOFEUF Jj^ճԝ 1t#P:moֿ&hwiWU 1,Z)C#upH*r+iҗY)gN1_rW\O|5tO"7Wduuiclqk>iOf9NJ]fߏY/bn#V_1o`ҋup$)꿽$7z|1xl{`Њ/ xՊ R~*k>m,xݞMcʓpot++Hvg%FZE{͔s~ymvt-5SkgM:8ec>Ttdѳ를ޟ:V`0Q\ _)~QvȠ:7C$.nNz(~^©"$`0&`3(曑Opdoz@Ai$=)j T#HQUԋmVՇMúñ lܟNENۂ;}'7XmXD Gֽ'I4/e@? XTF:D:TcL@ڎmAsP|,wr[όyßR3\,Lk&W f"?>1,i[Δ|z %hLhI# Ҩrڭ֣%KrKVcxZ–f[VW7wM|0ա} E` lSqN &|Ķ~[gpizh3 #n2:k]+&=ZKHW ~uz/!:y8zkXaŽOc70YO'㇅FtpOS)5CTtZx![unkJ).rHiݚr(toۥ<1~Xs;L tGlq FDv=~b8u~W=YdA'VO5.:`}b7LzQwQ5xBy /:2 Y ?g:J®UMŨ|@̶I'ZЃ>gjv|OC^+>D,OMKos"1۹Qxo:I 9=3SJeaس~FRDzbsQrCusR͉MÞEMQv֝bUgj'?B*Y\dn GVcIad!h;RwO $!6R9=Fr5i2>%l iꆁ ^2g(sPD k˜~KZ?bTuGu6: N>= "?E㜵r1(LW%fj}NIwu?JW ldiBL1i@ ӊI멩"F+6Ebp06>uQ@ENidG3.rUr>r:*wmnFII2N4"3 xԐP|WR<.H֪ 棒! }i (uBDIF+jL$+a˭4 АjQ𹣩Vw0j -ӦqH[liC {blek 0cl,j;Fܺ}=hd6Iգ!N15yrM$b[)و ֫7ҹ5v'Mر>7y)|mXv+)쇠*M>rʹ HfU0@@Z"ʒH5ye2y{ -n 21<*( BQޣq<`f*:pJj޴9#9rx|V%B^imHȧmL%Ҩ^۴orGlT7ʩ+/]b~d9>KPtF0ïLǁv*nPOJA-U%f 08bV_Eضjĭ f'D> ҾrYՏF+ҒPJ"Iȗv:*jgM Nŏy)X1r8jnIŏlbTK QGs gӓO\Ԛny>4p2yUč{S4;qm;f \>bZ3\ͥ+\G(ʎ zEEĢ+v)qkFGDM77]MudQ犭a}sK8=+ݡuM\lnXA a K36z`p [5RM]mkg?=>Gu ӵX?|2>d3k**Ap^2ikz#\^L\q۳ uJ6$HkJ4oZfSʇk&ǯĖeQkv0j=7*/!o1?^Ԣi]||-:􇋈8^s~'mŷ,w̉GJ(2hb# CI|wֆi(é^Vf_C߃_Cp+W*&bY>FL1jNڒ塁jpBIlkTէ2AiCu!ԼW%)"=ߟJ橍<;H~4x[Wo< sy0PP? T3mPK Umt"dy mK RUǡVW1L3ھ5é/'t3ć]QwFt乬OE0)qO [xzj"KHy9+уڹG _A*܎3?R")?gf99c"Ż3tyꌏȖ:湡r6N A*tωvYp<- tE~K%^Lg8JF;tnȎA<pGmތy1h L,sI'vTd_*KZrB~$`xPޔOάgAG%. cl sа'ˊ~fr\ԭ-u?BC('ԧןWg7fG*)k YdV慒47dPۏ?Î.b&V6zgҶRJ%7]*)b-ɸdY!POcDSk&1rԀʚ̷3Q{pGr"j7H8J4P,x>bL@6F]PWfjX 1l !c玢- mr=x=e* Y d\m㼈LѲ3Vs"9A8`Sh5d}zV#?CST,(e]=)of@queYrFTEH|Q~Wcޣf⫀9SYmFX $۲/NƯ 2O h}KkW$+&m ^B2#=ndFuvSʚqbZh<&94z .OiQK2nmj4I6 5,xYѹ^s]OՂd)%غ(*"⭳;]jGq\wly 2~̷K,G?^Dm5H~KiHð#z c>L/$9֠uiv%x'C-Kn0*QW94;}Q7JKwMOhd}q} `IFKs 栄3޹oװj#̶y`a3ES+1#ə7  kssLYI@d>[lL<;a.O\6aV:} 7g(FZ0i=10Σ yG[wA}(nuX'qҸ*MƲ] $UY]yL~R{{VFj1,|޽/^5]0oQmx;QqON5Wxtܵ=Bm:5˅Gj;O!n[խ\`{QB}jki=c×Q·bx [?"HKI@+ЋW<:GWi峒*%{-ui?yq]et@bKy>hzhQ..bwP~6>~'Ud}t=8ε.<<9tJgsXSǶOܵc5O(hBlqnQ 9>}&O\B0] eai"7B yd xW]6>XƜ[%;n`j*–(Ygx&O ZGxv;W_ =OB֌`T+iKx^>E0ѷ3iⶇRgd@~i~ /lhTl`1ҧ:q)]X~"|?k|#մ Jd)$p8>h|PiB=9_]DYG/kVN%³nG4|D^=c,-0ρ_.[\mXRϾmiW  eբ X?o ^_$yBԏf]ώd2#pO]OCg u#ua/QmH/bht`+ݢˢGxq>AWUGjПs(ݔD ٛBܳ@ٴ}'Ηw|*J؉AM2ǫ.vOmk|kӥo)?L4uRT"ނ?L[ϡ|n!9YJϸ#N@k3M#A-Q?; ~flТ>d'~M_O5KSģʍPk>"IL󬋟- Y TReȺ[g}jh q]EȺkۺ1~s3Vf<䚐9%>i-<隮Nvjfؑ+g5h(P+\b^%E3F9(M O< 1EˎKFg8A#u/KmV5sWGT>OBJId|ҨoLh˸Iw&H~m9+]5_͓u] >ooVqJ3=k%ԩkψ1y il*~$q BK[j62y6R=});JU(+ lh&7#.NauК5$M_RMQ[5U?zCu4H6)+cu fX議'|mn{W4Ro?X_RY_˞&5?jsFN+"xW^wX[w63]/|Y PT9:i3 sXhsW?:/;?_J+]JGjF8:mL(RN[ ͝<Ş?|3h߭9d=|W?d(ftHwy6<{ǞS#ǩc8]Fȗjlq֪-̸1AzU8 wa#\S.h2Wtא0rk ij*G+8V}RZ:ɩ}M hgn)ۅjKHHf?59upq4raRڑR)M $Cym\d{wiW TH%/8f| j4\TrSLG-'o qLkQ*j]D}sqVc DGOƔ*V{݈CzI0[8eGΝqr>> åsIhtS)$$GqYP@su"-sdFfTM I SBScrUC$V3JG?2Ϳy˪].mW?i:t&fzBelziХaQKd6l ۄXsmGW.:4:~e*[c7a9ܐaGOV$ f圊ɻgq"ץekz_B:62+uvbS41D{}*%v9[N+lz.P r Xi{|7gZTzml 05^Mhz(gO JP)'H$XĶ}+TlfCq7X6S n{bOlUilO|3t5 zEքMv254> tod`!yez:(Hh<:苾,N c#GnRF;\g8xENU9¶+'tgL<Z?(OEVw~.LǎJWqJY~*I"*MFAQ-ċ H~R}ksn4iv \˟(O xr3! Yz+10FvGZGB&11Z-l%ĀA5N|[e%ȇvr}+.`],9sح݉S2 V "gojobfv'x8_zS+=qesYHh AτP]j:LvIp7 OSw^y̨>xGFjSGg! _9f A+1_-pUFN*/oOn.fXtysI5W~%X54`6*'5x397t}maGݦVipjIն#:0Qڿ!F嵿IapAhϮݸ}YmJ7}ѝsk>$)u?Ҩ8mh<k׫8F[E>|mlycMlb=@T~ޤ\ ̊O1G\ɚ*&a$tev5 (fR/-Nregs>9&p^:O劉I}% ~5xOZ"ݪe_saykUc>& qmDiRi2Z6y15ἘqM͆iF<4ko29zipβgk'*ֺ(,dg s֢^FYk I>sY 3iWN`e ?)uiCFҢ}YIW21Y: lp9CҮIF n[$@gW9=nRc qW/==Ԓ($s0v+k^]T'Bܑxt9X0ۡqy LrHkٍE$vO}ʅ#`yǮ+Qs4Q Vuug .ARF*'%$\Ž{D^2q\~3jzܱJup+tڝIF61YDhzqynwt=*g'r,i2-v p>~;SSVHM;\aom/9VDsY\y㜚Z~ɃjK3JEZ9\ܐ ƫ8ny(M'9\bGbF3`*͹v(ж,16E>N`wȖ"2VڧO,Ȭ{ VEoɘ30@N` RҔR[rzս&c9\jV[GLcWpT-B?#Ut$5dRLhʪ1ȊyZ7sQ!c G/ (`V@U ' ֋yг@AOҫn(rڴ"8 Do]E 6!mFA˷M?y;6}Gff-Ӓi48SiWjc۹c$J^)3 rMc Szz$v@I̱1p٭(̀hhz”(ݳ3iF^U^ED` Kr;X%KP+ w;m[ibى)4䌜\$f* Ǐ ul+O>w YY/5þ);+q1j2QRס{+1ҲLTڸ$S1oAb#,zӮXeҾO잃,C𝞕 N?v?j)wxV\jaVD<}kN) $cz켧B.-8ީ![uMˈʼasLdɈ5WbtvsNi$ 8J݊Fef.sk[{ ʸ޴VtmE*H 2иa{ȼO4޻ں 5a]psRQE\}'LYK҄AP",xz{כZWah ޯFA.dɭ+ qV,:n%[)r.yI]j[CPWFlӼBW`%ҥd0)+:_/:3.bp1CVd^Ͻk-,1Г?ebcvR5}!"Y=~R?1X/[99SLc,*OVzI_(7%iK"_Lφyp'ԮyfErZ̼>oԦ]G|sb:ęO0L~GӮt% 7\~?%a_)Z|Nu#rO?z#eipG󢻽*si9#ԫRyq0a^n7QDOki˺!k*@t}K8"'"x\yN>dAڬ_ 7 I[>enkvag#ѱi3{ŝ8t  :M[[AI4%8*~pFc&1Wex[f1FlUgbdTsɻ\0 2$9[89osǜZ~_R[e36I@pJjQnRkvI#v$jUkKkmEF4`v&GJ:on->-ð̿OW-:d"pFz_jϘە'K6D+4v4xLDGs \));;-佻 ~ A=}D+'|v5Q\}ZqV}r4&w$a1j]SS,6#;8硭ʖKFx[wM&]IC=k!׻?=*iMX}A]U~UQQ7(#lzלևPZ٤8 o] $ Q)g!yjN :kg% ڍty wq`|A߉j:\p1Q^Bۆd[fSylsJ.WttZ^lǵtvUARm,rԊ<@8#)uI+qioSEя5'y7byM14Ռdaj<0L sM#qcQLr~&s^6elbݏVR*-O,Ҽ\NNGz0ULɢڙU witxi9lV`P9׼I$ARH]+jƛ-ݪ6#G6#:|rqGdB K`.ɈK]J;&c*z4Z]JVg[ 'ҬKtђ va'r[Y*rP褟ʲ6݌'zUQV*.c*Cu%CH*O؞x7NI=*7FC6p{Q!=u 9;P+0dzVˉ 6m+XQTRʳLamdC29ea]Ѩ[[ـ`z{i''s!3ֺbՏ2m)[SMdL(MJX[{U{ޥu/)N kYQa3sO]."rci`vLX„m ->}1N4LQlW֬ YFl؆0F*E-NR(68Elb|8HN~"jOGK/$14쓊;d2͜q9wz!4Z6b1ȭ&]r@W@d}AdW ss:F ֱnB.2qUwdެ>``\$RsYjJ(~we=1Iurm<^^wlCyE8W؆Q(9Qly8T+`F'vzsRoNlvQ).KkʱD!Tm'=].Xm%\{y$vb#lQֆ%=ÚڎpU|Ie* U?03j9 9PHKr䬕+ڈ2] d rLl3 k60qUVgu v vS6grGzOtGoO Gx򛆇ʙ{d7C]i\yw0~$ISg0-C᧋locQ-J{̝$9kW֏ywDLY^RᙺZ]LZ{SH̷}էjڙ}#3ºI۩a$=ClY$Ktg/F:ҵ4oAuwq5:9ᔕ׎)6Qwf't"Ik]-w8lU}7_ñ=-ˏ>וqX|>zmɐoKq"6LP: r9= K"ku%2d j-&rp+y˙r~gWx'g".c p%SK{&E96c(u"k{udYyӊ[.QMN[E0E2?q=Ƹ5<o%F:yϲ" RuckYI í}M>|:ww._i>3*%2܂~? E5b=ν^64D>cF4%b;?LԞ$ۦ|FyqNQd*}P1mLiz_-._9o?Z$_ [H%c[Fܑi˳Mk$س$̉{l8#cO9A:oˉ{=h~F?-ݾ%p\ךv/~kYI)FLfgo[ osU/^#iyr^ tltsk5ٖժdxClG s3Z7x" \oxgnT[=U)#SZ.|2ɜ56Å}SMt f'aQߍcJ)vR/x_3°ǒ|x0z~w yHY~b͝.E-[FϘ.nqp[Ս%'+ɪetp7 /ta߽n搳gJ=im.n-TAF ޺\\)֦Uń_0l~m.fw03p|O.kMHn4(q$ްgD."Tz}ӝ9%ؠĺ0ɜR]{\$xt[誑g|p}:s׈6zW#⸅j]I0=jݻQmU7դegfjd7ȨEœfcWNԬWqC鼗=sҰG] \Qѳkb5RC}MB6i vӊIY:>[%BĎiM؇8I@miw)\V ! 1X,+֥4l\\.㩡$TU#3j6Zz U4 U,{V&r&2jV;J)$!Td6 y4[e?Cגݹ{֮.U(P1z#m7SSFFaP*H q!zP{xjt{q`Kw/`~f?_"xnf\Bb:Ý(=tQ,֥]2O1ʛ*bCah>eiRpbX\6@ Rma϶*! , *q:4\4 ~=o:ݐy>V1v/X>|D,-덧"R[͹ 1'f dU8+;Ѷ@Ѷ =j4KS㨳a>bZJ %,kHne+݌cD$ĕK8LmCkGVVY;\ӵlX)6GESԻ!hL6i{ OP_A2jf=ތ.,?v?gjv ٮRk25)i㨪x .uIolf=MNvGè[ O iڅѹ- ީ4]6ݴYNK0|.r:= 7Ч[ȉeL}G$׊$wbrZM I8J"XmQڞ'QQ s?5+Z(H'Hqm>xWN-SM. *-q_Cq^#7ږ|s@cZeA@wraZ^oıhm-\S7cNR쥀j_F yϊ^Ť>Sj-qzM:20w5̺-y$6p1T4Mnc}wrb̄?(ObQ2\BuCj,=/iㆸd8d=V=p6 7Ыq;@R0H#EMu?tM[f;6AǵRc᷀w?:μOt%|Ziĵ.ǜ5 q%(]gRFvIF~+"\evuzj.&x=qPZMd?zWӝSPQƇ*OoƢ~sH-<1Z+=d6pKV͘mt:;ygE;1-tKi'g6T*Vc(Fm+M-IT~p?Isv[\=RMسT쑌_SNxtP̠g5MTȚ-Ja_ЏZWVi%e7[X³^[KmE3J_(vGRJB;VwJ:%i}r}f qjC!sɾ@P yr:Q5K"9v᳴]UїOX5`=YNez-JȗQj%:'ܸơ. N.m."V}?Zd/x#a_O24lև #sE(e#$tȮE@C;y.j]WdaЕ?ưj3D9$,f|]wƿ"4r +z>" ܔH|v`[M? tt @R7tSrdEy֙qy! 1F~y>A ۓ "(2f7eŽc=U}п<!9'ʰRk^< [T^€v Y3%?0*i˖iϖfMWvLֳ}ǂ+z3 k`A/e.Yq\-yrnfƑe SP{;#6ͽy%*ŭNI5=MZZhu#1U"$t5ĻA wRwܰQޕN_i1iq.% p{PĸP[-Jm2E` }p8?҆MQq*٣p> M HI"foF:ߋԮ-ḃ+mZ-GYK8/`zdWh8vDX-w0>m~GSXYep rv11"-sn YZE̥ϩ.q:R2!Ȫ2OGp:Vzِ]ñ @ ޚ~/2O7LWCjͲrD"4o$d>IpW=M; ww(3!>Z䠒`©JZS3f|lwˢEʩ>8wRևM*0TqχI4ls \fhy8^txJɒBUSNQ5s)T_|" ґ= _*\PҔb1P 4aX1w$T 9`"@T; qց5А`"(HꖄW$BdWVZazM=M .;X6V>at&q! O5AZmЁ^@ݎ޵#I"TO+Ep7ޫ\I>+ǀh*W9r[uUN\*LFNhF\OjNI[Wc[GMuQ9Y'ݪ ֙ܳڠu!%8QE˺]sI$b.W"7yT:jVaphdG:D*G~XI! 0M++Hy$t^@=qIlRwEY3^f/\Hdg|5Q0k!ڎ)sR4$1իxB*l4L. {{yf$V HQ ~=>/wOj$GZr[RJ)^okD@P uվ0jӽַ'sTvfiiVූ0Ϟb¯;c=jbȦLaYk֫ĀT9ka&W_r E5:]G }([tVAVkR=s6v.R@ZEkβ۵i1Ҩ{SaFȸ&DO"IZ=})WH QޢqXǁ]b Ѝ 14⺙]XH°;䮻{WIap@VSҹJhvZ.;*'q4IpU9+cikg0aZ+[Rlt{W%ҹmjq}v)ھ!ܽƩpbW !@d+o@R */(UCb$w_gAJj+h{~Kro85Iwc_Sd>a]>e +zY\SkRTOlt= ȝ eqM=F7 r@t80a=}qKq]s}4SȬ zj ,.WVX̠氮;]34\I$̙-Bdk&$Ēڝk^vrʄbյFg k< / eB3B[%P6FCq[ou%{ydJXgD! wUa 6}_9*n73iK1ܽF"3o힢$55;qMT4/"-E$dul^k6ڄB cP ++'𱫥cR<m\IlB\lcҶtV $௧m ~C4ScGk;l]9ź`qz#b%a4^f9VA%b%rxhINYwi,6E7)H_Й%ox/t<ѹgAKj2k赋X) +ߞ*yRVVr߀obIoux\ap2+;MxF@Li`~c4n.H>"iZjjw w%z䕋]p٬jbQδ;zr?/ZV|SwD{w+d#}?[Ψ[k^B ~b^>ubª+q^nur&๦*/kJdZ磢fk;=|^TaDEOD^$w%?kX^Elb~ *g֛6|Yn5%02Gb0* A|>Js-}~0"+/ٍ;OW!o("kD kcP0!/7D~z.W5=#X4K` =V!TPqXjx[ .~Z.@LgDB/fEedĉ['Z\zzThpv*‘JJ~ȯq&PP ❁k;F֙ҥ);38b2H9Zd 0*6 Qa9?ɤ cʓjch̞{}KQ^\긄0+wPŢXi[EJ{ŭN }Hb2kw)!wb;zVK(|mil&B)-/4{A^e=z3* C Ʊ1Sufɯj\9Q.N(M(\j7{=̆/.V jr8%UIݧΕw bx{坠7 b{E,7i]D# ewX qǹ\WRXWxK-m`be!wvJgEijuv_\R)tج%e1ǽ>&2r'ccxH.ʩjD-"#:ǥVs+jD26}[V)kz6lo&=;H"mȧ$i){;-Jm{L| 1깒0[4!"C,V_bgKpvZΥ:л] İ\1`wbnjavVM6pY6!(Ɲgb~S4Ԗ\zdqXʰM]O jDfialx_J硭&UQIjI Њޝ;+S0k(\$+`Ѹ|UP$u@V hwC܏RѬacey2Oz pG9Qݏ1( G%Tbh9!nD-=p{U=QEcwsS`8giZV z BMF<{Юv{m2 rqE!+;Hi" ֝V il<'a&)I{zdӰޚ#}ZVqIVV'pm鐥֦ 3ֳo3EKۄn6H~uX#]NĻp=)9<$pn!M1XkSs)`gEi-SN84 BZv$ȍ(R?Z#Xnt r3FZN #=kUٷ>R͉ǭ6i)N1 IZV;$P̀M"*< q20Aa6kRJ[^U;pƕʓRUxn%lzz  ֝,dc}*b& toB1n1S֙{xg&UZNWVcpKSޯAix-cVie>2ޅd {UdlW4ƚD6BzqX,%d6@c[F.nBdbp;;_rnQz!i~fəUzjq|瞦AE%cRHrxjшF\Yi8"*9و!x=XѤA >K=ψ.|JȘ-jw7:ư她|`v^$_hzPI+ Eһ:/qmq yn70T6'#mR4n-l[!$Us3q;Q9kc'L{8hL24%oC$bK)̌+ t].QA$qUbZ9+,. 85I`ꊞc3ڥnZ7)ws+= u^"/fs 0Դ(N6y?zKK9HSD3(8kE.B}sR) zT]FбfIYɫdQ\]q޴OBnZG9⾠2n~EER 9>z)b/t Bb^Q[p!ՉzwؒBDst^]_1=i-Msм 0_3ֲ>Ϫ6إ˜ٰy^G{!ciki^-(VB b]Hw[}2ydirgЩm=z|M 2ǿxcDIg-n`*$@z4\%Wd:]u_ Az{axMעgF` I?)7fO`KR%b s }{W)^K{4[bYs>X Д:\i4z:N&`y2Av^X𵫱s` JB] *wKַS-5ЗztzLJn#ӞDn ?xu3.Gs$0+ c DȸZ~B#zN [GnĨ08)>E\٫XHl4DAϦ*"XOLT3r1)ܳXehpvE]PG2p ּjQVڍ $r'.TCjF滵bS0Vkۯ9ȑՎ*"K[QYGLm(ػV{ʪE[  r)>E@I`zmɥšj7 "vV2iu"NetH謠A+ȡ4޶F'4rsה#$ @Q4&;;\9~dn"hq) 'h5ZRmpz';nd :TuKʲ> }٘B1sYzAT ɔ!~SL-3g{;ZъkMNOnH6@i=7*/Kn G+]!Zmv iwlpM1 rd! z׷OJOYΔ3Czʔ.SզBpշ/ᶥ;մ`^6 Q$aUZ+ 5摯$S}v6^B[[ oh{r8^3Mj&numIOAݸzKΚә%LLT8E]>kגClWˌdgٌlHȨدBM&`aI*Mũ 3B*EFiG×q|ÐF+xJj8;]n&} +ֶݜwYA5OCnT#MU52Vk5)QY;ӖH&z1V01)4&*NX\R%KfFK&F uW'=0k.%s"N 8UGa+n:W_?ٽ>✵E T'T;kyϘJ;Xkb݀ Mm[nzū=caЊ| pᙩ5$.A|4ԒŊ̤3^{OZ|I4q!|KR=Fkmr$8.yǽR"#Vչ&4rWV\<1=Un28[d GOϧOw2`|G{5p|jP-4etH%71Z[/!=(azsrK6NZ\_aq5h(ޱk%ZP69QI4HC(V'*6Qvn[QѲV'VC`glsƶԉ.HṲIǭR! PV|.z;,GVSϵX^OLFNOGa.Afr t>*ZGLJtFJhgxN+Ez>( ;YG^ "Aleߴ2TޗvfΉwN .^VOzVr][m]WzNN`}.rz{֭ h1\~y$'*TNOyX7XڍZ-RJfgx28TkiLTiJ-@2crnQQ !oוʩR2}% ݙ,^38q^ E}MzOʢ,ͻm"Ak-Y#wd2&|xV-Dz;nW3/DFҳV>i-4'QJpY浐 Z1s/?6߻+>kFFRNgƻ$wsxz+ц'^4aԬTʮ8+qr$g~jWwPF#.bs HW=5A=>a"Bp}~XVmĀyar k]W°y&k.NBTtxgi'1& AmM17nMioQluqr-x#ӷW|''K,)F!a=`ki/C|HY^ z嫡nQ 0-B?ӗ":"s p`D(UbcE^Hw/HEEyQ=st/۰b;FI.V0Zm$eZ-OaҙdJGΝn3yq>訾6Ӳ1knsӆ4E Vij$/g󊦈.OGVQ{5JڢD3Td\sL*Nz82$,"q E+v-'}H{S%uw3(Hki~6t["?]תqc!FhsHڝ'-N7Ų9eWH<հ<;mF> >*y="xXYq:'fJӣ N8ڥڎ-F>X:P(!הmʊ9p2}$c>\Ɖd`MDe'RgcD^JJӂ~T\9B6+N Wv !񊍝T~RZs6{cJgN2Vs]u}ՌtuS[bߴgVLk.LYEo`roc)ë498,˖=ir`טFițF3vyLTյIqsrVo̸f N({)w.jQ ЪN۸iwrHIh$qڜIV64]8zwq5]u6YiⴓЖ[&$N)mQfINA=+9/|9 +V-xcY;TdJͳe6^D@TEG{s,WܚȮW|G1r}*6$z)؎ᾑIr7=6)D `WF׵:Y۲6bNכ:%;mur^c_wp**{x-5éjڝu@MA-wEס[X|Aken }鷥dV|ⴙ۲dj42eO3<>n +1"<wu0 rJGBϊF.IGCLo Ln|Y] :|S*cL1vb+j; zlʟ^ ϙNs96M2fϬYlKԟKo/㼖7^OIvccSЏzsԒYҟ 6֕*q#*{&h^d9\a;u YL, Y9I^}iu%RCSh2p[DRfC0}b5j r3}6|G.Osijk3ͼUIoД>Z>=U% 2EQ kUum&,Ix BIY1ZvfkMWIAnl}#M76V1E+u`֋b~u1ՖUU99z+}Vխ$icKtDC4rnG@)ւQ=jdm $,8UYbȀf9vJjtҤ@FNMwQ1Gn+Dac iܿ;5~ `^+ghiD+Bvքm >0vtjr!T{{fr:-DC$ djJ3ȭ%F_ c+c'RYD`+-b޿-cRIR 2-HO8Jk ] 'ּBSv{8[R[t.#fL(dVzt$i!V) D2D&B3֦Kom@$̓ҌY7BvW7i$2IJ0 3u3<$ʢOjVѦt'"B_#޵ 7#g h3EdЙ-t& }tL^L7~~+x_Bc 4O]ԫ+;J .]U<Gjt}#I'Ԯu[~ Y8ɫcKs[6N:VkȈR8ɔ?B繴mB2zInb}>~#}~S'̦FuY;BȒ'Xg?QI-̈́[@ ]ݺID_VJXPaԸU{,-"qS)>7m|1h"IyΪ;CZ$:[yb\˷3pV#z Q`Vh0cN5JO#OYJ]q[=Aj>D>gV]G5 Jl)޲B,Z9U:9涊)f_jaoav{k#Z%1w>baT(cI9ֺ1ղZ켺t&8_#t4Мv:Džc5t.J"Z **E[;V2ߚ8\Rl "̬ztwb.֑S'4A%!bGh[ U igS uzoO3鑞͸KRbmSgeeK\x2m̰?嶺~ RO ${~r;dcknMXQy>`~jof&Hmv?J3YN+HΡ{zKs :&+|aS.lCJGg۴C8/z56 QIz\! +Elh䩮jH'c&  fHM2M-tj`EM'a\kǕKighZz䰕~Bb982nHڶmD؜Od%G9'k%3> ; ѲD!q 1ʍTS+*<ГE dkm̐HQMrc[^Y3}XC7,Ԝm^Ȼ/foCE >48 "a٦FnP 1ulq>ےż aĤU[Rf3iBHV*) l16RSob?.v925,qm+B7ÁH7mj6VyvlQ3pϝ3;dYJf, WܵC=sME`:r+6MI&G((7zO409J+ uB&8X84ZKR$q.}ڕtð1sNzUh c&B0u\p JkH9 l O"A{6pWЛR~n(y \5Ec[qR)?!O-Ari+ bg8Acce)OiЄjDɡXJ"ucVg݃p;RzM5Jsn<$1a ctc^H$z:S9V))edF%ffXKqUN.M$%V2Y|ьZw⭸Hۉ45/{6$85~ &A~+ GdI vWW5iy6Q&Ш{pzUxCz\inNw˵хaS5JQbq Wb pVJ;DzQ߰[Ÿ7y 㰺~dr xw3֍[kyAO#zWeP)]J]B+XREmkͪ+|=|mu?HnEN~ܧ U%s8M,o6^I:iϫ< R?\(X66sfMz .61b!P7 B?uqO{I25/׌I>AEDPp +j(Vd];CUS!&?Y $" 7 w?V5;Ɵ2M4\$*Hcא(Jp4R%ztLLDI窫')]likꋤ PȔ߅$B;b^Za@VVQrXƫn y\(SE"cG֭ʁ:㚭O4V;cMB:OgMִeʗvo{.I:({4 xSկ$c0 A yR Sث+k6^ O@kT"̱Isev[)q~!IiF~WRg]>yd*q8Iݶ;oj MvoZ6y\t=SЍA _~P}Myiw=na^~j>kDZ Ӄ6̃֩8RqT4j%f2WIt9&C&9nx Tn'a'_ko$8U^y&uojs#[:ѹVJ1c!("bB ڻ,Cq1{05\۹n-M]^QQRZJ%ki߽ZSvdؚ VeԖH#f ؖlS}(.S)& 3RЭycPGݘWظd.)\ Ϸ{`]y<ɍ |+{gA#W8$t^RŮpc%S>xB6񞭧d\ Pi%3Y=##J4|1\ϠTa[n^tvh3]&/%ka]f<*REٖ(qkkIOeҪs(r8 6͹Z q%IS!+h- N|4?[m_ñEp@ y4xIK8_}U\s*q_63w7a6խ^zN|,e[mxZ>e#G&" O lS#w7sMTNqZ>LW7D gO?뉓mKI=fU]Q/ ʇޘGS/ʿ4:¤)=Ge#~Ԉx/֣.Ư-g OMèPu5?LܲZ4{G 0Y eopǘK~'~-MMNvKx{ƍYjziZ<+>0xQܿFE@a{Xou_QrzHf<v”`9VRv⟀zvH_ QEIno-$(fFUQk:4p1ҼCW[;M1~ۀY%\ڸ'5B$d/ng&H5!>TRlp1QjyRA0*23TH8hSWؖǃ8=I:c3'҄& P|M] gtte m#J%{WAU $N=XC)%zzSI##T%8^} 9=*Hcea@-FzqX^dey8\7F>ԓ*Ϡy`4VEj_r)\nW/-/Bԇ. 5"9Mm=zhT 6QeA`Adax(V*kB$U8%+҆8v#VՒƇn8c/\GQM9G˚mV\⻏nԦ/!yEF185'4Q9THBJtʲE"X\9Ϡg%ŅU*N h6W@ԑ H^3ɡyR)v TVz Z|`IԷm]UDbYNJV$}#rJEV&Y|9=H>!7"i؛_aVA H~")9. ؂xC]T|5.{*WܬjI->¡iVcW((a_~iE]t{]7cB&ޤ.ҞLT Wc'< lml-[]PEL)[(!*hY"tzjg=*qoP@޴Zn$ԝHDV_)."V$awPn/d,mfg z j= 1G )BX..-Wlcaz`c5x :Fźi"wG*5ew]ez'ᕸ:hs;Z-ֺX.LPOCVoԲ[h$(/s!$f]5 iyJ*8S8݉r}H'Xbʀvj]-kcqRCi ]5úvh}922 Ysô @X*T-b 9R >N3W64IxR9C$AZg{qQ*I'zҹk]K-fohFኯ,FsEZ͢D܁[7Ja)V. sZ^yJo+&㵇pk]?3xOĞmw awv&<5rjNHW,+-BZ9hૌkOjTmpx̖Ef._ ̙2Up:ua50),-1]˸l-nvbٛ$wbw%*&@5ekQ<2Ew;pIٍB|&cB <{W-kmkX/U. (HhqnSV$KwPnQXBCh>-hOJ Þ:Em# V/_1 I!i1EڀboF Gdģ/bCѵy|C Ɋ.+2|L#EA*=} C-FHUN9))D] G=~*ʞYLz&DK*s#m-bc*rcrGOʎjլC,sϡۂO^Ny[tM9WZ}zOYWwS85ok#Ts38ɒp+vYʖA Eqrs˿2/[2xb~=*L*i je-MmPﺷ+: 3[Z6ns`9>M ڌ +KbD24iZ3ȣ̸d 5MIX"Yu/KךoUC}*@aUk#rnT=Jrj^4ljio;&OCPϠGpj<ț,wKt݉72 ɷ`'mP*:h ~pvJ7Qj6(fH۶SLVNode7w'u* ;ϥ}tovqn@r3_IEkIߘ2?^*KܧSGNs)$no"!R֬AjL20IO?\} vϪ?*e>{T96`,YǛFA*f_ 0V_15g?s?$hGY68;iU#=2π|%_ ^Z͐[:WFUO:4uZ,ʦXb2qjXSA1^*gn/BZh@Ԯ=LZv2m_]k7j\o5%9&IƷċ~iH-UOFL>3}\VNPr`ԆG$㠨 ܶrh7i,.<o ?uo¯Z^?{ <3 ke0+Ş54:qcς~"K\Dw-"}rF[S_ψt4 x^ ;JntGw|s^=s# seVj> +G֢zjN:\xwgr #yNgޢzw- F YcY/#@U<7UtڲbLsHvֆL|d5T-z7)ˮH$~h dqU+ͭycoG=cmEoay4xDdB_#KboH#Ud=)k2.UvOry5 ܙToDX]GX:QC٪KRrVE(Zn:kq恵#NT&!V+2#l&zѵ$`VLy_ ZE=̶*z7.;ՍP TX(ܞM8ipG#4ֺ c4P#ЬS4(69ݎ#@{sQ{Q4F!V$w2Kx b2Ux2˄݋ư-9j.cd[-)cS[Osh4j,JZݗ`I\P)6/9\O/fn)+I0yn;蕠 6gE mfE>3%ZebQ?*HekkZ#:tq VpθF{{K{#Y.[*Z3ZXCXJVt%DqT\L91L1X>#A_B#ʷ`}XZ ؉Ǻ2(<_f5#EP?#P|o;"..f3{~>觠Z}VGhvkڍV[ Ӝ;t,~b^B1XVt^ >L&?[/Zeᅮa+/ uX'[ 3c?75J/3;֭ռ1?{dW1 H>ЪYA7BqT8]r*f5>$E5r3։?zӃ۸ t{|XV>:~߼5SvZ񅾏vm'GJs{mA$\:GF9 ¸!Yžbw>S NM2׸n"!gˎK&dR3p=EX-)j&4q'|-%TO'&(G [_T*hEn.B9 ;4hzx ܻaڜthmݳWOcڒ+òY㈰>ZݗmÚ>%` et2VN_QN2$pA? Hl]|aL ?^nܽnBuA>$G;杮VԠ|JQ^*g,{UNvn\ Li֓Z $].R]޳v0},[JE""X  Nm =z /RSlۂsUc[8N܊T{O!e xaHǑJ &mnἬ=QĒ=MS+ v9W4&WD M)#v kRi]+Z4>F0) y#n7VѲ55*H:GDRlaf$&| =*ozSlށwnw'4 j+[#:wqݍ$o,׭\ԌI ' עxR$:atki'ecӘe|sQFY9)XI¤$dghVCC) U$(M4@( T0v@"$"4 RiEĬGL`U%=)+YY.F6UU6*&@|qS20j,5~ kϵE,D N*of61`FRI5gZ{ڒ
U[1wZ'b2ACȤY*w^OZ: t>÷U2+͌u|!{ڢ&$ qQ=jR"*3Z+&\SrzRq6.ⓞ1֓:Td4ȵ1f224kt*NoCm-81[lu`0x{&L8E5j8RbxRջxPl9jR1#[7&V_DwJ{/I=JPUOJILI!<5f"4zRjYϬ\#w];}N^YO׻s,C$]5=Kӵǐ9Bk(IhO|>4eC{H͝-pÚZ$b;%A ɥY(yaUvo-`7,zTohYBI$l(^S1L*VN7٫i|(Hntr6 =q[^qe4P5ƣ/G=*-+\ 7O 1. ֬"P۔)IK&nڂk"h Z޷BEZ)5mkOd̺]9VqS\~{oqiZ"l$v"J`Gr֍֒cIRA"K[ֺ2.e7Mng1֌6okJymJ&?.Ysב;)FOڹX[ ڏZuHhp}eF-e1(cؚiqIu,%:`czJ9a+57;G÷- dkxkv2.9pXMEZz]EA㟄=^L΋>4$B0W\Xx8*yʋ85/ɶLWƘאr"9o;h샊+R%/}FYyN+[gxoZy[^ke? *7:ܟm67+jh@mia<9Ү?/>{moU.TUnMA,t#Z=zƈUGT91 p*9󮨠Np12+մźV6RgC >j,vP< P(:?jz[V*~:m3T$/Wjt_AE2g2vMz}%,B(8x՟EMYӯX^6GGBe%vn k3rOr8>Wc|MT{0m#dmC;Fx}h} @"ݎZOQ{g*UIAֵI1b[jer/j:Re0rF fVfѡ q.1v@1F6~n8ef%1O Ao,Ec= sbyTFY$LvQgZ63qI.\3J庁ztIJܺpQܭmh GGU@SҦ&M_ARl=[%fF7~n1\2~5.&Z,Zkx3\3rG_6>*Rbw[kb$6sd`W.;ZEkvQ+Ӑ_M\`T~ʽ%B'9ಋIB$R̼i# !slIUQQYkx&VntTW ??[~]O͙ HmXX/2y3Bh~?6ߺiԂt?lLW.d@AJ%6<>TEM5x/uKLaQGl+օXxgB{Z Muhr?hckB I#9_)"e(fhZm~hҍ;%.~KxscU61M̬"bl'\)$F0AǿZQCĊtf$\CA#·?++OZFÕ· Pݰ?kfY[c[=3]D添?5GU#dq_k EQFMNX<~;U":w5RnmR>#wZ"G{dc%NS_i~/dcW #1RTJ#&Ѧ:lџѪRz>\9NJ32?iWٳ'Mi@|^j$g韏vWf>mV S,lz eT^#}:(sM>Yo} `xFJ!(o=pX9d'? 1@8ׁ KH$ƱjVlvZWOF6d",%5Z-:܌^UX4yOESH<_O/V8N~/|%ݡx9;9\\ͫ"enGŤXip`ǚOY j3Q /)iy$b+zg?Z$w9KvQquRWrPpѪĠ޺*Ox{TLe ]5>8{g]M5杣7v͂OfGgҵ8b)GXNQJg5+[J|m&)kFJclcRl`ЕdeԂB2n+؆K`Tg8JitQ %y9jHNwEV7y?{^eKe'? Osߘ vy>\OgmMV89j[D@(9WmB+#O*LYt{mUc*7ҼS'֏b'Ri=P'ՈH$/ V-2 sd(\yHqO`}*֦hC<-"⥶ruvR$up eݬ.I vcRd,x֦ArA[hr@C(lǟƼ܌T}3M`)ihbҲ*IrЍJ0:\w{ez(vB3ҚI4ښE$*ħRR`HxgfF-"IpKn"..GF8QF| >Sɒets]w7ʦa\I[GVh'Cܹy jSzfz;ʌǵv-P+c+]=/mfYr0ee9Һ{i -Knu}*%RU jOys#g\D$Gc+ lɨ,j>UTb.hItA}{peܻA(Q:Ś%.X7|Iw^(+$h6⋯ 6DUY/ MԙwDJ&cZB O(;xT;{}oJ3vi6<촽z/6INhK+OҸS4eZƏzjv[NX`qYl\\I(9>gEnvi7>ԚU}}Ip+#?,#VmYnv(''ֽ3u-Zh'>ҺiE_(}I]N,m1BksL퍫nK81ݣ\#8t-p1`ٯ+j &S5bXl'@O3Z7zV+r]6ncM&amx{EeVkqGj\$55Dmr_C]>K;)hn۠WV)gvzUzExSvzMr4˂s* 89=Eb:%$ y\1=+X,a@[8})#[G-U j+1<HhκTlǧ[&˷C$fZg'{޶8-%vyǧZ1(-l3#C{WKiu#u>*Tq]嬟 e<+(= 2t|:o5}\c!Rzv)^ɋʾ6I,|MixU`? '=vS*?V {`M ~Rjܐ9\T^&4VH 1I4ZZ8=g`՟7fZQt_2{I[2D[huSIpxspHU8ZBzŔ|m+)9vWpŮe2[@{Kt"9#Z{$?RAds{)ۑF'J}Щ)>O֛& CkG|+yQ\TZ]0|MߒNiŭUOjESб`3Zs8Ԩ"SuPmԃL_i>EuB5UucfO&Q +sM?~èZ$W?*n?ἢ쌔'ωУYU? 4\ï-K.זX_7_?YGBU#5 G<Ar!?|N79#犕>D6~mOjxB$l? \|N\,]D<B.npD . jd g!aj:\M?& 'EvZp~3tvao]qɮ#RnH3dӌSbVk@>j2X.F+D)9''қzSZ=,ӭF qU\Dz^- (,M$;(ŽY69Pƺxk? ل{*- 11ퟵc]_  ?Wx=Um4/ZkiF `z♇?&hl.a9 yep h5̡tJ#?#O.DqGBod7̝'4Π4YG$RG֘=( %Q@+4 lcTsR\6 f u튛>[QLMb))ֈvdrs1֫WOS:3:85CqܢK(>HRrGZaRj+Ɛchad\K,x)4n+|cD V[(k4)L%K,Oc8?.v:%ۨNC:`bi zdQW/@cWPW9(MAXpÚk;-ܝ9g]$nNjmfGh `t*Lf^ SÕV'D{3N @wDF3^?4angr?Z^:ˀzP`U$zEȜkK#hN9]jԖB28_Sآc;rZmEIUP\-{E>XB/bJ\/ P'UXI!+%~n\'{^>{KRr̓Yӵ➘K̭ Tmȭ \5'WGOz[ l[E,m,s).&x:W:d+aHC>hn%k ]z0Dw2(bx[[[hIܬ1\k ϕ-s|5VO0>kDou7P}?SC)@=k1G=ʕ%uoKh[Q fgwjPճwO&m"Xw''Q=뉩LUGd|̖ Jq8qQXLyENIDd4gNک%~B>/i\_øިW7&)sR^PO] qި7$4عUj m*_mQ֟S5԰ ?Zڰ ى-,V}Ǜ[B\py/I#G׀T"T=[Pĝ%َV+@D_JƟ I$ȆNq$:QUG F;d/+;R׵{dPmGH4ylεDtZtoRBIs,#IVb_Uӎ1TTR45(1Q[ ؚE$$^)%xPiҁ ޢN KrmTf FO9e4g s[gd>#AɁFy|'} kWLd| Z5w洶,'OZv2n #Q'E pVcħ-H]X4v- _\yZ2fí',Τ*=* 8ୠՖIB\`x/tL8%"{.GFb݄Olz;Z]+Y6ǜjӊ5@k'vLSEva䖂_åLec`>qoxVƶVY#uIW^(iL9yQ9ݛڼxXAcBC~ Ӽ6]NX~jc?G5ך]C[{j6~&|q0k K%9[ ~8j32b4/X Frp HnQ  kVFW^ߎL[BM2u[J lreߑKY5P8~ʳX̽O?Ɲm=G&kG+,S`AE]+3?A4')gr+XpBnF$7-jU;cךK;m?p >R60%8hkiw~; <,vz?j%MJff޴֝'=I K'|;䉅f lއ!&sx^t-B %$${W>;ľ#vX`cn}*"յ=+{BhE͸Y|vJt;M+j2`ӹ=1)aXK Q.dT +22˿8ZxB'44W/R `hȭ5] n_ZAkڭ Wsdq"wdh2f x FG4 1 Eq bR$Ͷ")EmSPdFXv sB{R6DB zS<'$RZ]hNv;'pN1TЇlH؟N6-)_Mg\-WḑSrޥCo*n= 2vW]* &ɱ6➨q Qi>;y$9PM^K`r{qS~s$].k,M׬؁Q@sSfmܾCJ|aDsڪMbhBCwr~" {e}Hmfi Pۢ0Xl_M;̎#RMӾt/R)XfwB"*QZ{UD>K}V#*E!AKW4qn\zҳ]ڢ̻dR<28< 1^nS֐K|I#WW*\AQ/#vf=ښ(jV˕ x}g^unF'Wx@NrA&(uhָ$XՎTl8kSu71 rt?kE!x;GJ6Kݸ. NXگn9oZ(0WjfS+!ס8Ja#''֖6h>排c壙V^kXf!el~uJ6H;A9js5v-8&5p(}($:ѭ.Î)] Hͦރ'=5G=ꗑkM؜ӈsf(*R\em*2{ 9HBjۂFsReG5w+YhXlӳpϵjR 1H#rRv:^뗗.9 Ǹbe;d diKQtݤ ,BAx[ĥ[TC]}ՙ,anmGoj$29ZC `=77j`4& x(W$ՙE&LnZHvۙ +\lq+[+8*pqQkD>s衖љT$zKUՙkXeKw< :r_ a\t&"T1&#pjr1[&hgV[ qޥ֊W*T` bp}:zFCHgE#\ %Gzwԗ(KUvB7Z. ̶:6lEĕqRI! r*mD=4!:wrweKb=*hJ?|견)k;*·h"kIs^kbسȻZ)%gZWF|˔ |}_±yWJ [2eK?xcJ'ƅ^Zl}Jbͩ#Fm\[5@~&J`OSX$TpN f!ՉRxȇ'-PNMQrIc4Dg\ #QW 2s I_1程oɪSYj3MZ^׸܃0Ao +Z3FގT_CZF~v#`~`E ٍEuns9lN?4Jq޲,xi<#2_PrsMte_l(̏D>3O6xa+I{_BZ?NVئ~m4gd֐`̤B]ՉZuˬxtEHܜ /q ėdmMYRWRzO6eAi6yZ|CQBFw:4+$!SN{ :dGxJMW:2EќznrsMI)Bf1RK3x0l\5mxjCL)'+8-)nAqiFg'AqH64 ,%w6g>#n@#f㦀BT~Z(ZEVpzf_TOR[<[y\m pI<]M.G@DuVE^ ҴUTɽܴe:NjE?E>:Yfp/&KLЊM:ӢFc8֨o->);ғjqiv3e) 6Zv'#N}*J p=hgcAVLrAj @>*M"6Uz8mH$_WKs C 7 2me# O2J6JjA!W.J4eNs҅uk+b-#$7z,ci)򉶞L).>vZ![\sk|́ڶcj9'=#;L$}(:jUYelJv./KY38]f;GN*JhȠdf)$xXjs5yݛ̑I)1 QO BwKT>5Sp]eT լ2kFmɅ2k*bQxzv(}3вbU&8Jʹƭc.h^GV\I d J5DqZTD/Ȼsri!6.[xLם&t ?3n ݜb3mt8Z#A.G4H pN(]ap 4M.33 *)\R 8=+t4cAg"4vl@ɫ a]Xk[r 5*&9&x\{1Jѕ&gB1ޤIZE5rL Xϭf N"ȞI Hխ(4m^a;x=p 7$WK7Pc\-ף qi[4P;XR\cktEs6ȶ+=i_]B4Oz4xip֎?[&r? sI2z V JFNBASEc{t2ik~vݸhhgUAB\lqlWZZyѥMcp"f6jqŻjZ%Ɏqe<7SnY]g̮xEf'n׮蚔k=+ r5}Q]˟yH}Ҝ;gE[?~7/a6)cr͸)nvxCZh݉xGi:}zͤetG8GUՏ3?~3S1_:+;'#Zs#xDc2@t]K] mN;VxOOFO.X\H{X__K/t06 Z<3ՇTy?hxgEQj<3΢O>n#gbp6ZI NqV=NXFOu0q)En7h҄|"(`=7Ж\Ak#e:BW5w"Nyi.<`ttS?V_k%i-y 5vmPi}H="V+UrTOٷvtzv#|qؔV tw؇Oϭso4z.\~ x&2?. Zd5ժCk(V0m!M /l*d+/IIRԭU 8`xk:Juur˶7݌u`f̚W;jݑP{7M].?Qm:=#C%v#ʝ? V 4" QaF29 _[N*xtJ?ƫSv*ew~WO'F0w?_|Et;H#ZޚgGdV]oP*sF:Ev ,O5㤼h-ծ _8rj[+tf/bm+ӿC9>Y3ҶDX`O AqX{7gԾ*iYbI&~$k4OKb,wr=ETbb7rlUZOs9]0Jɼ7siF ߃`/[HX{uǂed_V\wFy w۸WٜrLR1K9lCZ g)'N>C@fcc(}]*-|?N eʶm~C[طs-FO̻[N#\n [O Ѷ|@obH?QP%;z_O\jI/RCkTf6 nYٗr=1JҖt7ğ"H-W;JZd[r$l8V l׊ľO&u9R&9 ,?Nrޑ)'yo;K}K^$uml3Q_Kh>o!=#öv593}r{SvJr6!B HsX,WNS]EZ^.-̕ =ko~3<{kZ^uefS5OVTQ dTnHWYHcWx4R:;}2m XLVghroAR"+ZmQ(2Lr2rp["F(U.0}}jC$i9sB9zBp;U J;SjeD|FTV&.|xEћeJ\)DlH}h4ҠٵU&hLQEF g!2,q`N1JbHڎC[V\ h~e Y#X-9ҬCZݍSE; etE&K`SjgmhZv$-0iI8MipP<73z ҆U#+SN4  Tՙgˣ;}+\@$Z-A{9jJj`yTL۹bxEA@׽TVZnt\/MwN+ž#ۥm.3RGV pfHkAIpM &bOׇvu;,vsV-.U)ܭ&h35G<'*k:eR<ڤys}GI/e&⠍6gR\t槹hZR' =j6M*Fer%\r}Zw5[SKx>˧ı0\5% R~⯕n\ږ<qwFnF奩Ҳ䳼MܕE+2k~ա;aSnh!9ΓI <(N2ON&Fէ]f#iZ4 ;ZnH,|IKQOZ_5|'Jztۻuz})1L񮣧Eإ);k|A4I Y.׮8W VYײ!9w+]91j =Fig')ؒKbKJ>~ۢr?қ9j. qګ6sOJ-G0gHՠыͰ#ǀ\[%̋G vKY]yEIq!MN 1<4NԌAԬ44E#{Z?#0iQ?ڹ')|(uojY!vǐ>\^̷w\[Ӆ5su]3|AŧD{kΥtNVV3х{^tU: ̟T\ΈӶ(仱޵gHLj4pVu?aZgV?Zf6*!E-9_7$}5r.|手0]3{d2yɭ=.edzb0SѯDV&=X-0XLy(iy4c{E2yVf0V6#y'T.}WEV\FuQYSoW(m=Kzib׼=7T?iC JcA\q_e}kһ5̏w8ʶ|+o w25u5k&`nwuyȸ[O_ʺK5xgbsN*pW.\L;dzR$_ҹ+TU-vHuX᠍Iқ zsÄô]: Z'B jL',Imm=KE*EՍx^|cخ}j@z,V5  @ُ2S->|\/%Dd k\\I-b =˱$4N:ʎH=sJ?puP^Z`wCO ߭F o'.ҿukg/Ə-$>h7}GoWwӏ"Xq7C$n֎H-{F#0|~Xi˞Z? @@2ـI){|{1uσpo'N8< #  6r7[Z?g)=)KHL+MՐFP?!XZ6"SAZ.NnȰ[x“D:]ApE|{sR_\<;P[hyn:IݢzMzˆݷdbW8 װSn@cd7cYK`̙V|$V@ǧl\b0BsjNsJ䵆f]>m㚉+ZImqhQ۰ 3в)XUpeG-ڤ@AcRҎpBwdƍ+Xj7r3nzƿh( 5{h>e+e%2#pj赻IKw{b} 6͕ĤL敦kv)ʓ iY$RʞhapGVc,dHhj(cVh8wZ#&i@槼H`'G ԥy"RŴ3jmGut(Eb挀G8ZlV汒Uvc]љqv֗C'Z@vm+鷤}G;;ۨ0>e}2ؐj3F68⤇U4ݳ=TTe^3})Tbgԥ"2ˑU^-; ݈I*+28>j6ХmqWZV[E (ܷ F#éoNYLDJ#kР.T =qLڪ.b"RjdTuMDId!A$O*Dn*b+k,W[y"ԮڳjHUs5$wK[Z+K(F?)K>r@ i+]z]<##'2x"R<}U9=+|ŵCA-v/p{nXgJMc/+lF=N/#D'6aڵE^}jgJ>(Ƞm>,W\ȥ&V.9 ҝBՙeo#BOh+y`18\@]^H<#̱TJ*z֏k},e Mrmv1X HY14Ov'{ӷIdi瑒iXJ rj0ܐEh 9KaЃoOjDZ#:Z氒Z3tZPZU|yV`#99NG.ci*ERQTICkm4ȯkIp+9 ;£zzҔe8MF g=*7^wg@Tj}^̄g)Zؾ.\@TrA}LWћ1M$嗽gH[ hR=[܍)Zz"[8#VƤ/jC *cHU:$֌4s/QhbPf9אEŏ9FKU0kryܳ]$_j|*҃ZxM 6Q``igkKA>,zҕA{hNh;/ ?*AYXqF kaOMmHUY>%bv,F=}szԦI⳿/Nqq"#?RB Nsbj/9M +rd29H4CeƂIxRV"M-C 9;i=w#v+SY֒&神44n7*w U$iqk$_[3BϘUUx\ye )$C+n䦒$wR qZPnpF֛3潵㙷#y֋#,Fv8C+}`^gYӘWa', [-ODuƧ;g+uw{+~ o&O0Iyuj3҅.Ucf8:Tz6twڰkSGsc\ sZzXeG=U?a7a>fYk7ğV`,q^ѽHہ5j-̍}1/Q(\6}Zp 6GCD#eP^' W4$jf| Ϛ6#p#ۊWgȤq!-̸N+Xi4e]F[OBx`c,j\b!L6$j24Y4)9jCn490l1ZE(2]q8y5.Pv}|zIv;N, KHn@Tom-i`GܗXC!!48-bV^EHI' OIl'Ϟ[Rb} j%N~bB3JVekg$r}RDߩ|*X>'BFATk3FOe }UkG4bb- ު*o+J/ qIW&/G3;ZyMVt"{ӽ3bhSKk$L9[8Us^v%[gB?< Oºh#9 +B+*[$Q1WPbӚ C?.Gya?]:=@^6{KCMm[۟j/K jJ<]3tq+Q(Y]Ȃo{RA`FŰ?/WcҾ&iA##he\I\%f#[U|9taA`hR;?V_'6CYX<}\v03K [:ΝXӄ OM5RJ;gdx8ɨhO*Pdq!eA0M"|HyX#/X5`\uOJ2d7ÓOiHF$ed>h ?zMi{~b_dUB! ۚ6KeHcuiQû>W>5nF ^On\OH<oҫEC>KN?¾sm5*DLdm|b.=oǚzk &t ʵUݴeŨK Xq:r9riT'j;}V~XǎΕ|Wn\tOԜ~{}Rh?nrElx#Ro|^!xMQog|Uwtʂ,_ 4Ⱥ?ߓ+'}Mj\Wb.O։BP* =Uwgm<ӳOI.㑔I5l.Gz{(cRZ.aic|iNVk{ՆgC֛]LKCJfd2lpqYo2@FzSiXBN88dmqM %qu,>UpWgr0I4փm^Dܨu H4z~r{U[Aւ\$2npH^sdD*lSNk36Xcsz݅FtLg‘4 )1d cXRA;L timX ;ߕv$dTo &o.|8 T l2z-X'>P5hАK~7r&`+܀HRؗr(naU66n#us6ՂM0RhQLy0Kjcr#WxaMH0*㮀tX4۫SI#}=K}B#[Ż8 }=3KX6 ěpT;\ѥ-nsOp +Չw$6I ; 3IdM2?hv\I%^i֖4J)c(EȑcnP@n޺*M1SvM fw&f#=tafƙj'A=;ؗk[(l/w'PjV%oS=)}H,Jygvgϴ * jA3ު1ڝW"k$)E %$ hz熼7kPj Kq%j֕&*n 3Sֳ 0F=kO-=MmGp@\h4J̍G0/RFs] -bHz=rĒvhȑgYzŞKRHT`OSk-MqktOH?qTmJ.;+m9Q"NjH PU{v=7-,a\!$U%T*q͎<3qOB5׺tR揮| x^ 'ׁ]zIF(LVMeG&ݍA\@R/Q pJEz &FGJI 3eV8R2sm䨯::v%I;I!pZh1M%۩ o#}Z&+FqsG*i48T@焫)I`PKhv*erX:Շ|m@*O4-aI:t3)N=6eSFiyQt-HiY:v6}d}\Uy5]*6m|T2*.wf?ي3;um xbHH@?B)v ώ d'9)ӕ:ϧN]l *w]9{4ٮHLgc\pd_ /9{""V2 0?*}yɫ^,K1v#8?JR0JپO//|iX @u/F"HoTdzUyS~C[xNCs !с9{!6;$ZB 2tqE.?#k46EqXnUKv>0 9 gl{Oqwk} GZb82rֲ9Q;J|p옦%"ό-&EܾnkbxJw*X=sQo{9Y;P 9ǹw ]0䐐a\S~F>g TGRH|5gdrn|`v裟d>wkG)_l7wn; <͍~alc4*k,2ch{S*;8R*fp;~DoS-CMF傃u8 ҹn"p5]AbJL"62#8Ĕb{u=\U2 rǞNk.RR v9f˴US> Y\>K8'H/=xOwc̝uڞ-mh&-"wۀF:Lg<$V'+ ^xǐ筈Smeu T46`C.nGّ l6c;۵ENy.Ee. (B29'lNh @{Ve9Bnؤ枃'(=*SqTmSXx>]Y7v7m5b2km90P}jfsT<2rjFjWHpY1Rs;ŸspX';FO9#6FAt$0櫈y#z{GgiR`s\}597dX?\D#[ӕi/}ln0p szf-Ju(lr~̫'w)a5< A+SLQ@xtWR)j!2e˩F@-tE8/WvF1HKh1F ;c3s;`bZcְʢjs_/*PC \LծRcB7rVF~mLcWBrxu}D>K1nNG|VeҲ6%3(A\` bIYˎ ΑJ.wfF3H͹0qB !'8/&r;5曲N?6%$h@y~5 ]Z1I\mv*Iik=?8trE`rxGAV_ib} R('i'ԇE&fꮢlxqIqJ=be_ UʖSdxcIQUY ڡ$楸k=V>bC,?I;^@a sSHetF;4.ˠdZ Q\ }wV@Rd^>JejQÖ$, V;zZBv }N*,iǮ-\C;In5=KkRGHBI$>TZ67LГ:qCjU< NV0]؜ji=`E0e)[du8E߻\z=?'7:^Y$lu%iEvD,Z4dyGeSR_[w54q@bSR]5ZB_xOǰ<Φu[&vqdr‡-!R$I0ڒ#Οs_718gIǹZKЗ{I,~ 00ezT+P>=Qx%nF=3G|9$-U<d?΢"6ĢǟB_v+EvGWq9jgNsB):;H̪Իf;pH5>0[OZF^\%xV`DT;@gOzOr!a'2JY:s6l0m{Wk&v[m2[DG ɒ P+۩3g;kѢj9H6hҵnC5m$qf^{9A-[Yv皵'f΄šʺ{ե}JMlE5A+&$ɱEz1K1n#ڦ5cR)"F72*kt1J^EE3]1lqzRjMKA+4$d+/M#2W95r;ɀ:U-ErMkAqpҹN:"ɴU"`sU$C7!#TBU/JI7q.YV/2"zsv+aIH=KLg++E;8$ 涇SrZwɬ Q}U'i3&-6qX!oُ;i5dyBq)OvE}UDYNuv NW {eb~QFԢ<dNȉ玴@F ֋Հl5Zݳ*.cY.[ә1T8݄|W<bapCj #Z]Ea09&ԫ!9$ukP$ HCӽ-~l)lR⃖M櫠ȹ 6M&q}ąM f UWw E޺Fz!A5c5>!浧EYݝ6Oa7]o@7tޗf),,: \͌fWin2}zU&c;RFHFb#.85'S0ϢKt?ܨrVHCG"!ؠxƓx#3Z'=4D8{MXr?}1JVeFM;e!'dTyi"L*WʜEbx[AzޫL8٦ۃs.Ka */ .p)\\vʌV́畳jXF?.E>@94J]<Fʙ>W Qncrs۱ӟZEɛⵜjg8/^^8qBhqǏI9*&rQ(bZvoc\^2MY[Bc̠3ڹ_n,J$GU4wՌM^̈?5N3GZm)֧}t_d@u{VK{sAb.]r=jvAf$DS.}1TbsqY `CH5/ WO,VPlbORbl%0vsPg!UZeY HV<HEPT]CE-.s Ԃo>Be@:\#ۗGe>lp=(vE6T1b9*'->fUD=o $R5.TPgji7blsfʋyya'85n9ucޗI%J`sRAnAx:P64yəd#b1OzZDuE6yR;>`@asJFUFH?5/""cs@<m0NGzNWij"ߚrSm |"@"ltdr\{?\Vͳ* K%]A45 *Ȇ14-jrz TF8MZeܲVEbOݻ`ZcE21l֟`7C ⑤UWoJHۜ  ܣ'+D"SKFW]>V':YS~z5r9qzW2Ցv۴(ЖkoHr>n cUF6w8GE 49QJI-78HF24rEubZ E:ʅP?ZIXߛSblFHvC#GZ74vH NH:RG%ܧD85gfjp.C#a銌sPA-2*[L"PbDDpM+ 9+k}\Qvҹ#0C g͌'>lNTMrWҶÐ v/N4YXWCJ-!DFw-gioC!&u(QRjdNJ;<)Y}[嵼C>5,}u" MFWY+X`{yQ[.!m u g4Sƺ GN1КK9"7 <9浲G<tqRFVKlH}>_#Pf{{@c<֯H'L xKѬ5\kcNK ds&і=t\TϪ5\g jt9?:{_bu-b1L\L׌t@h3xSCGY2{f:QaǰxE'O4!o,e;!>|s)+GN)z\ԌI]VV3b`dtf{P]d^C'Vs'{-3f2zr(hW%s# qZqd1uxRy S[,;ܖ㊿jIYjnWД1iw/Z KOb=+ x7T0s5,)*n/^#ۢđ8"HkA$rLLSsqI\$=xL3Rzn =i `Vl1#QJ_i‚՟*#8 A9=2H{y#㑸f b6lcTr48_A]9ۨ0ܾGN{Pi =hCh1M%G֚&cAѰTv>nS` TnZT^{pW+Kwg>m+H2 &F6|bݕ~b?VOHp4?٪Іܫ'=OݽbK(ƿ5RmIu*}/|G% C Ɗˑ[4RŧO! ӌSz̟ )lb/t~6\?L?86T t|B}<ؾ@4V;rG5R|ܷ> X|ZsϿ5+M͐6-HICfy}TPPM"6sry8 E'ܴB@UlY6i\V3nApj%&2\{M -Imp_Dk3,aэ)5y>S"зn IE|={帑JFR]RajOY3_Q18L=`E(zؿ2W_1¬fmuyK?SNa7|@n S-GBxXB6@D,n ^F_X|Pm n^>JE/$iѵ~yifpI'Jž-@GC\u~-E)\#zbRx^ϕ;Zt:a7c[Trϸ愬)PANOJDLaJ +(+x*Ȉmo$2{VWn4\F1ökGP cM[s+S8]nW" h84gZ UI߼ݍL*4cdyfBè5$F/b*y G(뻵C=/c<稢^;%EVRLkV|oR9>.Ԯf",SӞvQd-l3$DUp|͎V 6 I!Su"*sS܏2H zIug4x. +m-4"1rM]@hIG)>HH~M6Иؒ).h"evdsT 5]ijO}+9̛W&, F$*I4=GvpiW_]B默ZS -J,CkbRKt]p VplACcK)PG_ϥ$"ŸF'vN)]T L"9X*qF"4 = s<YC瓌qR`/l"X+ZY_1@urv#;EeOmݝj.-*Em- ;I}+KQ"ŮAoZ&54?(lL;H'}hsȻMs TU&ӥ#`#WAȫvYÌUA5*ĤD 8ӭC:^S :InLnBT5ݦsD5dqR&@PqE8"1cS6sj,D2:QMuOK @BTu0QKp0{UJT} FKMO*M5JBazi&M1O\+PA) FX5" 6})i-b!K OOhRKr(CUˀI/wv#ǂ9Zap{v%g(5pO4BE@UsƻbRQhB"#V&3 =ނo[8.T *ǠgWmC"܉o̱^0zȶLN:l +6cz3VN'00&#zӡ8VsQzXi 9 k]d]KDYq(*39cH<w6,+2OjV%JE"&G~NX i .ҵE1/Xֽ:Gd Om Xu]f?:m!"/W8MEm̑eᅵ1ੵ{Y yӎ")Ťe|/~&Y#D5 ۣgχt Ikt5*OK w&#EJ. on0]Iqvd'cLUc91W4c joj+"H٭4,6beoB"k ƾYXJ8P{Դk̚"X/qv({ұ-|dsھ{2[3G{sҋpzOO0*GNILhzW1ޛ4#K,#x2K|IhQIݓYӧɴBBdNC$NXptw}e?'x* 'g6ޤr\iO0U)5)ju3N=JrY+Te"+Y5\Nڔn՟7ċ95JxG$a9ķ.|`!I\4 qH}r+h>1k2缒EmYRg2i`{ȅf`ۚ|@^᫶ δvE8"԰8>g9h&֬ FsJMPLӶaȏH\;Z0F%I )QB-l8JO/ZRq#g!+1|(6K%XBë]:G+`_]k~\ihXx=β>W$SR55̓}di'g51o«3eeǒrsU)5MKP-7;s7>vRջ JDӺizy@8z=).HKKE*gc*] /ԙR-#Lgl]F>p&liԂMۂ7|~?ʥ]5F~?9h쑔uil%x rA|*ǣvGh/%߸6tJȜ[$'>r>[Ɨ2V]i*->(G{?Q?.erW~q>rvٟ{LvUmwHG qU&2f׭H5#.kRSl>!4#}-E\ cJxHeh~`_ŗ-/[PHX=3+d>".m9+|-#$@# :*nj2G<{UYX09>\X rHj"ҹI*1*s6T޵\(F2]ɼ'hͦjYX\rNMzn<&UX+}U5zpGדӑoTZ=6F0; eaVmde)^)|^'|3~sjͨ4~p"Hʤw .|O%GP{ gy͐ *+oi"I7cNܼl,@,f7?}j,*3B D-JDm$-"bIV$brIR I+ךqU ^B uEE+ʓ^G;j 1p^V\Bci]Yr-r8Vм~aQ{RO9 _Z˒~\VlZQXd4 zi5}NgYF0j]ʃkB06hOL{KJSɧ%47NVZu`X!r+3W[=j 9l958 ݈f`jPr$a-tnkd-ZqaxB$6>O-t㜊 LU;tZ]i5~;x`҆Bіc] D%}jJ3j H ,nQ &>^6U-Kv$U ﶓV9qdr29`Fx flVv}E-ArHt ߎ*D w8)sbwlyT̀iY#XL bXj֝ osirMPX $u5I\Rǒ55yΚCa\}+0Jȱ5f{RY\]Fy>ecȨ- y`U $OI+^BBQ*X%(f&$ֶ0m:K vsM "PňZҷJZ%cYd FF1,-ܣfާO+I#d{f_*=QIHVjr`g=+>ZŕP܃H8Xw d@,{c4Zƶ[ʣGUjιLfϐ YAqBm+ ֲ5#p};$a^jWOHGO\t%S܀]\̔Jx;u '3֌?&_ꐨ=vN$s6q|7;}^֎H}9%?6)_Z4.vƩҴ 6 X 8cK-E-e9BXh@*҄`35%AW$=S >Md?ZaDTJo}*@%gFnVWE$8cм]I?9Aj?LjKsĖ '* ,b>zb< W9OVK=47ı,hָQYS08MLTUNushz1IU)^4ܮhtiIGFi=3"+y> `2H~o_ҷm"%v4>`ϜCcX>P*b&Q{ PH81yBԀW8epQU w1EY ^ N#Z DaI >nZnq@ׇq@劐 Ndˁ7`~3RnrH'*=aK&=(kCk\ez>e`6O֥2b wtԏ+DrTʭq/z ]c2DUdEC'M=l{X?c2\yσȷj9BRωE#ǎS/7 y%0̴S}ψge+%8?2)x?hc.oU jhC1=EtS}=L- ?a}c!E_5EKHdVVӁKՁVm">1jc}m6건[vNME(:Pi."S EsJs҅+8Lv# w 8Ҏi3( wvE%FÚ7F*@ֈ;5Zܰ[QqQf:MX6$\~" )TcB';fI$jROt*3R95m7n ~.Cd9^5KA+$EE%2S"zОR+'$(=0N}%f2n'&[C; i}LvX 61Լ7 k>խܨ+hFFDYGB*c VOB7Npy_b=)Vx&s)NKL{HKCD1D۵bk95Ж)ngvCgjNbXXh.1%j ]v\ه_nbUnU^9[F]7je隦pɸ}Mjq%WWZ zl2r)XJD@ǭYFW9 3چ+QuWX S5AbZXS\ ̯'ވ!Ubz/VK1gC-ti `(T@9*9Zs8S9Ze4Kc20jݝ d6x-U27 JvV9 ;yK+yW( :MzLUs= fv8~ =j,q=gێΤh ׹5 DJղ%bT͐U4SnĢ-=ie {M(pϥ"˱]I-€B,9=-Y9E )VkVlDPU-H=j)xZ݆O"r&5RSq7ƞu$G15L.c"[[!$KS+="/_ c/lވ2]z]Kׇu)G4$V')w%[k[:F9sRhi_^裧o3RѠE .yvu{? vƷ} qOInFFW#7Nk.5E21}kBI31ɣ*"Kx?}[aaxSJx׏V"9v.m޻J-R X0nZbec?QC/{Ze)\]&jfBqtyN5d5n,J'c'jhq5EÑڑzX'I:OdaԬ\e2U9q;6Fdx[.K\Ӧ!=k:ogcyu/^QE7 c^:/gr-}b[vv~E W!R*qOT00IsMD5Ԅ 0 &+ք T׭gOԃ:Q`օ XxqY|OFzWD_cs*j3dF+e~+l2 ȧ5W 8V2m3D(]۽^CH_$t#l^)Iqǥ4nSؓ^7c'$zjE૧T\Oy+S 6Of7/#?ju?mg)fiГkE|o_ ZAyG4_3[ DNcSЫaGjNJٮu#M^uso̓^Cy僋㚱3\+ٝ˾FsY((ߢlnM6ZvlEqNnjEeZ=ۚ͞Y\Ors9Ro6WQoҭy@1i4cLYϑo>\VM{fvs #*($z/^E}VlxPdlU/dݩ>r-4 ɉ#+׊3uyqXV6~QGm#{NkS>l-u2gCX<`>8\%NJ5;'uRvLIǔC]Τ ~M&)CG*J1-% ,1Vm{ͻfyǾzMEX7aqY^Zo JitE<)Bf w ڳC{rB]`z an8 N•wl+Xf n.pkA^HFg]2?; x aN0E3 +_1N= W5R>-Tt~*7T sYs?AY-pԷDf>?7zڐ !o}xA#oޗ2Ć"K}} |3Rݭc<+5(z/?C'QɡN69$ ?X¾tH.O)'dB Z]|~X1}2ՏS|Έi3Y_BVAƲ6ӧQ\ugmw s-H#Hy#Qs2黥(- K^ox^rj3ib[m<{Ig<ҾF6z ~TT1UivփTݱP>gNy۽a#c ךu$oZ-GM;x aZIwp@A@;h8hQ{⣶0. z9[Bҽ] yfQ+mȫZZݓxIaԆ(g g"a>.В.=i-l vF$R-% ʫ>Cz~hK|ݩ6>[JKe|/qWڏ-y}L>,EKסxҟBR.x׫MNHfkFn<9c.GtO+飷֊H#X_c:naMe "Tō+R]|dni]ʯ ݧ_rSױW$7Ho@A޹撳ZPu3Vȳz3Nܶf4Nf*pE8"NzRG"q=v7Xʤs w{\N)U`w$vPJS;#QKT7dki)*ˎ(zHF8N]g٩mh20 ޚ%YJ+GԵMt9.v =k־ozVcY =ުŦkMs㡧@[-#99񗆼w=nZY/97c'BI[o}{F&xMKTCI! l|#Ã֮umdp /i3bd`ĜR~΀zSh!583k(lF}Gkm*٤g)7Ҵʴ[3{:O\`mܼ+tgR+tUf-d'քYQM[w">Z\ jîMl}LqAXr}bՉ "RW0;Ā&FG!\zB*AVZF8l*GiJFE9zQ'eC&t}!W]Y]sGa}MjE^wK"5HTRCx2XӴy;=,yֈr3mO=s_/ [B7*^H=j4!pH+( SNAGTU% {RΘ@ϟ%p1=OS6efLr+2Xq8Yhm!jC+`t=v7KK^#5uNǟ9qvTaҊ!A2]Ï~֜&qˊ [1|ד|>ZM3]x1Ĥh2:)QXcMԥPyts(_FD#p!G^,rˎkmydmr+7 eH[7FgU)Ǐ .g DCv{mk:3Hr9/ (0Ob|LF358] c/\ @9=k&}#R,(ϭZ1)<:SkܩtE:R` 90I6̙) >՜ AR.,A8U zZ㰡j&!H{_ ,Σ?NcnG]XEyVc#-OuDi'K=7w&?>Ȼ<[p>WpP֩1^hR֬unWp&3voTf1S/"cRđ&?#~ `9zP Sk07\}G\> CZ Ȧ uV閧?i6f~xx] (,/=Z95V:|D,U.7ͺiWt-9_\:"r1rUFA{mV9هA? IC׼>6y*DC'OJ27kƞmIן_jķbm!#i >U.3g+%$sΙ(m+'OFJa^\n1F@5RN1M+Ej6݉Fʿ+~QD>ޖ.!XWNBrgiٰ8Q`J2[QC!},+L3Fo @"0HF\C֭F&[D+-̲Y0Je/ΑQ*5mbuOurҪci4ԕ$W"ö5ZPƗi,`l/hlNWV,[AV#B,vعGKژ =JR1en}EjsَA4xp;Yy^"Il1sY$ûv畫8uQkZx]eea}+rOhօ,0}j ROK,],NsT+/r;\B[ 8=l ;!uV*i&"Дۓ Bql)EKWfPeeBDх;-MXHbFP2OsYФcT|k|"C!8L f&r8`Ki6܇"E -KL;nl=)b;4mW\{xOg#xZǵTlMٖ#ąC.8S,Oi'A485+i8um2QlXc9+bO.9[mLj\2Y> :cТw{{ԫ&g/yX浑eE2xWQГ {CStbrIQ]0p"ZwL1re'Z-C{1V 2:{ƣ}:ł! : g1&C|·=W -r9M["DՐ2fUI%)$DIĐ i]9HvrFr3 OMDU20j|c isRY[h=jV(=({h KbFfH= ý!lzTF;ayFiIyI v"G]n@ <{ Ҽys67~;gzDk|e*8=3jmY2M7'q\%>cq52"4n.j:#6fw5]:h mknwg_h7y݃ycCV|>ӎF0#VxǶ)PZfhAS[(ʏ-Hjj%k5=3AUklSM_S*(%#c>AZđ1lCVwFնow|_Z{m:X`TӳSڴ'֧;&o.c~aҚzB `Y#޵^uV8KujcbI&U=wˊV&&*s6!j>ޑW3es;Z֞5ƫ;QFG;Cwz6[^,t٫/4q\6ROkdi$07r(HySπ0k1Zh(s#hbH}'L pT 7ץ5v44rǽ4z1#4#~5+x`eS̳fnh¾=ZO饔b=0b_VU~O>>ׯ%_!C]HpDMe2 -~#1Ko$*MrW}jy)z $=A5Tny \q$3c+s}!mpǸܼ cˋv^rOFڳ^ en#U?[ mkU=ZJR1.d -==+uH kyEs%KIE>9b2>K2K0z3/ Tj2Nw+`fjÕxU$w_V+L7̹֕,|U2,(&~%~mn@f{?tY:3#ҒX~[Xg )_nF!B9;ʶ 5m^ٶ4zjTl53Hr9՝"T\:XÒ!T#'55ڤBJsq ?z6zjRd9k6tiҘ\pêԝ w;H`T'cOZ7~&F}{)Tg?oZG8tUʒ1RgS g]k2~8Y@ֻKl39Z*'G>-^I%8"5߈t-#㯧ڬ_?fERSW@E]Nj( FV.OЯxHۏ&|Scn3!Ϲ֥E%"hEMC'}UZp`boQ׿2uM׾x!qQd^O /W me Fo6oMl~ux7F]Cרem@$XKڕĜEpF@V$uLq+ w0Y7UWvtX Nt2+^@*XKIok12/Q[!eR.O5$nîi56gg$}*xؔf})\q^ YA$7Fo igzVk;&O#j8R$@=jF!pi!ɤŕ@piY#Ḃimav#̑rqJXp!Bjb-L(ޚFl6_/ǞKĒLr;RB bBiMin4/]F\jDT#P.?i}cT&sxxʨ= 9XbXF>_J=M9)Sna-̬BGNWv;b[[ۅ`A$Zd8mӊH` qI3[w,1b[x?SEZR:ޯ2caZ&b Vk#RAVZ3 ]wGږBqP X=+K 0kH(vaL'Rz=4HR|í1}֓LNsJ1OMטyK'vؿM{!mHG5-)FPSr;#k4֦n`Hv<ݾݐ螼N7؜l)E #\JB| Ȥ֩nLSj'iW+fR2cՎcIIm4>vbNȅjo'#<1imkGVZ{%Dq/#ҵ#@T„]ٛV6hd$O!HĀsLdrZlvޫ^[Me2=q=Q!9d8Y\QK#u$#74mxJ3MF6zn{Ӻ 4z2[,ќXZr#.cv};쥶2(Y0.d6tgj,YSRM[mw\i86,]nсC1c{-X՗W szZLYAY2ǁ֦S&L4C1#PG>DF$!zO>aBFtl Sj>sֆV`b;ʛ`cbrsUt =$ap@cI-܇8ROJK~5,nf4'9JC6xr)`8lU/,dHV$Vf*{tNHj%6GWx3hHNJ5xO(|kt$֓y!g$V>ռ!Rmw0y/?/ -uyx##Uzl?t:điNpGi]h/o[$0Airz)*z棛x{PI4Ub>򉐟k˪YϢ0`;VvZW֛DgWÞQHM߭i}Ĩ1/?]>ya_ҷ-OWLIasl'4ofn\]Mj K&:t)7W/5$XfDMf;ry,GZFmFGػ5唬#Oar3kтC0뎵HGE J xEUioj[/ÖfRHC:u@q@+Hs/X[sюѷĬ6=o9ydbxF#\4˽J8^ bw#Nǫù#ݼ1q-9^m)d#jgՠ4#ON޵dzJ:3 M͂98mH6~R:lV9ґ3% XlT. *YA<Л/TP9LVEڰRN8"jK80!s59xQ u\/yQ:3lwb}z[A yOたƐڲ.6yck!ُzwЗbpSRIqH]ĜfYʓ;sLX/*Xn F݌=0I#A,9Jcdgͬ1%աv4[42ñ-I^Oq-+$e~`mfS5q!)nT dv3]oX|qA|X0$6-g>n$EΪੇLH>j-^%zV'F?{Hhh,c!D*cn!>U;gĖgEfv*"wa׫A,ts4QH^SF[1kŲ  XA1`oh9"+eE{ 5R,<0`S"/Z2Z̺?[4K㴆kI3FAs?AyXI|k [=fV߽Q5h#n4kQNyO೷0Ec]'3Rؑ2[ުnܖSRBILs0EA-ۡ[ˉ0 ~zb##pNҰ<[G49F<p1ҴQ%ԅ)d_AOY"T[N͟sS[ٞ9nh##VӖ"Y 3[+Գ;^fx=i; q!KP.KUc2P[8iۅEFnHM3؁G-lm̬lI擵c'52q1[!.HmU'hDlq+ZR!I݂kώ@zیsUYNY\^)ٖkdq(ہL:UMȳoE 9`:Taj-YS}`*r(uB~\(d4/Z[Cr2,$\gtK̯gbfdTRq"mcքzҽ # pN{M7zieԳJWCV.oS&&I"ݸb}B[+N*/S.Q2ʰmBVi$2ʣnRV+UH${Wsh6"OA+~Vp%k\ɭ3Pz vKMuc'T&"ĒJ}$}Mfب0-J+R}Bt>,- mz|@i3\zSLN6ArKH;qVc`p@@v,GnfFd_dxI@=3aUzVbM!7d* 3Q&H I,lC`%iIO`m\vjP7K94I(^qFb1d#9ýc 7Ze\ޕ{.1 kT[+޳whLG3o Iꊲp}XW? xNiH䯽kEI~ǹ]G] ~WK6Vx"BHc#f̥9 lI8nQ'>y̨J[y 5 Qֺ",CC30B, ,Y0#qQ>ėЁ뺋[a{AT<~d{Xt1VbgWHJǦ!78@VglABnl(ܥw3.G٭L 5I]ܿhRy# U(-5׎o$P0d4>T5؝|9ѦzĚ. O":DLяݪeԥ⦋2<]OhQ|bfAhР*[B 8q[ ax EsVwjΪt=z#@rl[үێkl r>.  G{c=*ߍnh[;=Aְ/ulSY H⣊{0|2ڗ֔w)xQs`bƍ LU^d\ŁJh&,<>[s@u?sνM?.C|@$.umxtץuG?Ñ,S5n@hq>Nz j)_ MsmrXm[9^6V3$Vm9qRF!X# \qٮ bx&=v(k¨o%D_6Rȷ? e_]T[>OJtʊ}P߬Ӷ> 6[jL7^yv#Sĺ\=v?7 fI9/c.³u"FZGm#&tsE?;\&?mlS`1ClΓՊ"ȃhVl26O@1֮ݖrP5FwJdd!p2|O\YLr s-&[yQ[EݸG^MF& (=j1o5lwڥ 8ҩL!uI$n8ZٖՖ[ }ҒNOS7{ *s4-Ԃ=;sִtu: WJmqVv=WIW i`dz^FCFj; G\u4MXCI&W$G YPP9\,I} nAqҰnByL.F)ۣI=sNb"yf|6K%r xd+s,QGNm^qI˩-;""7!sޜb&P֩q (8O̰RN#.$d(zPO=w&%搕SY ƴ+ܤV342/ja7zO[y?Zt2Dpw:TB%qmqq*IHH'*_S HSgȮ.ݙ\}k[}9oZ|U.Ć+'r+XZI;X ܨ$ ׳6y:0OGM5)rj%u2o4T,E9J篴~ nk^[_>"qAlG-;je сދ$ؘ猊\Ưy< l{АaOAR5d9у RPtj2[Ȏ|j4`"v'DB@+DKQ/74בo!c0z뗍\Ly W}-Qz]-{*V'uˆ+r}lOv~\qYvݶ/cT4o\&yVSҢՏPPzT  񊦟Bdي= VKIV@#'K>'G~)#-W#<dDN+Y=ػ f08ےC"RRV *iԵHu4)tRW% z dܶ nm7t$59b121Һ#amp~8f'} @f9#֬ɦ$EWۨ|=;m*Cz{S۴ gS;U_BؾZ>QNP˟j.[E=]LE# jV^X9oݜgޖtG`|ޚVI\屈qz*ՌbI ,2vwem+%Sry\4"*D\c5s"W2V5:LOZw3vCyi?8=EWvnZ]1G4s#R6?IҴS]Di[ #Z5&VfMEr9ۄdyz m RBe?ҲhrZ9BfSYR-ͶV  쀱H |9:sTME2NXՁPJ7[qu?vS;A͡Ӯiy' I>h,P`ZTFinM-bS+cCtӱKbnIn1V]pH2d䌱\vj1ytQJUi(еF滳%Ea,ϒJHX{==b* h6G%q Hq&[y1ӳdrTZތsW\ўDWEGx57|?H []ÀkJ1RcPFml}y9~XR1Ma،T)hc8F3F։AĨUgk1#Z|Kda1Z>v7VhPj>*dž6|d>i염Woe)re/ֵIEj`'+!>#N8c_\d$y6 ?*:?QqZpZ˜{jVEGa˻.TSȫTa$s6&zu3$$PoQzץxOQVg"1=L#YviI?J]I80\c։XJnUء8k*ܪ gLs= OB\~&K?:'9xgb0FDw<Bj_58#&!sKe>qE\燔 spG\)sެ1 q#Z1x{FFnw* &*eg j<uR]r}U#ho,2=psֆML$mʌ֋Ú02!wSP͹w=*6 f&b@$o2كiz6tsG AzZA{gEٯ&\ѷv_ŎR|CD_?ZD<Y-jM~sXql%-yTc՟hxlpɫto̓A$ևT <8VsYQq^!w' N:ej|A 2_11^͛u @SװxA?H%*qeM"iH h9Ahhc}j1?52҄WY?LxRr>H?|DT1 9}[&ߺgoww9W] CC\ώ#ꖲ\q3>zu>NY ӈ0<o"OՇUm*qWaA!PҾjRrwgBظi+Б>,i ,yҋ'D?0O#-Ӧi3ACGsj r qڙJRdJ3CN2BYFҧ;VU\WӾ(>Hԅ%CWa#hAy!K ټ&Hel^,9KSSvGƭxRcyk@q1qҲu_P#]}?hoک]WHsPoGs[Q5)ZHR6(8sU4fLK po)BB1ku5ďFSRIeHcv܄i&wylFFAⲶ$c4:'S!9+Һܣh „;z jI3ܚi۾I>NFNS)#\ٸ\ṀmDϭI2C ,8nlMjYOLNһC&rvץI5Vln#P A.!Im#9vcoM tbΧ#hI!/(&7U{#i-$Nu/Z$*6(<2{plSz-j-җAl]oƞc Bd"!#֥6TS-۱~%Rn9V5-%yؕd`ccpFI@YZ\w2[s"L`jpPI@pr [ !^<2[A* )ZI^mHegSe2}nܲ5b )>c1G!+Cs7zv1vhHAv@9OqZVAĀڸJR &1-. L.J%2_0dUR}B hdC{YXǚyli+&jao#Ix<8L d&Պtb$Ob9B䱄P2$W-jiquqdGV-[-JNұ.,N^ckmL3ltE&Y\Sw i1\6O\s[AvB51\=qYY}o<]e&eqRvuzEpb4~A^AF5íCCK[hU@uЧ$C5Hd5" H I!,^[dBG\/f`! dx4E;֜j䢴d E. 3akVfnʒII\V,9jC$fЋطfY66M5j]kƹ\y*&dg$M--B;e {-'ݪZc:[EIRBW<+&5ٞbO=oaik1yN\ɁQ>T`Jerq uMQdĻrUu9$d=N/WI*g9JW=S/4#C4Wi_$n#=H.5hsŃDPK+Wj۸ŴT&OC3R-pզFe#Y+eHB}mjc$%X~?Zh68ϕ$!d?ђ+~x"!?^f_ިz!1gVdda\^k`^;O\\9ą:Ii,B둌V^DӋ4M8tN =iEgg1VFq7sj)5]!AWR;R&K=l67!$?WSo;Vu׻لz{f34hG GNs9=1ApcjB7wrp0AHT?%j:T4i ٣ x&sf%qɕ5pGyģ~EuAxx{,AA $G[Ve~?T H6V%TsM-jBy(UFbXre3ށuo&GcGҗ" 6@8ɡ\-sSJe dHbFH lϪhԓtڳu6sU46h+6Y*G9>fnePzqڴJ yGZRz)\SQl8҄CJ>4+1~Z#4+eUE΀-~-da,c9OiV z= lqK'1HR~Cө8-Y!?Z)=fkq1ҡX%]5qdLjF`!e խGP# tއ%r_4j=5oKbc$-鎕[Dq+udm OJl$]wz C;HV =>,B7I)AV1f2wc,s12ȹ ZԞ uroKHєkgZTFɁޟ,˕qGz!QnxW.6 ch4KR&A#x=o"-kԴ1QrVoHO'=EHV#TܤWF>| a7kchB!;RԈ4f2ʲL fuҜStxc{o6@on楆H݉pS6/Ki*Of˲Rg$3nVEӮ$lG ׀7+bK;I$ ^~}ንMh/6?cr$0p"bQgd$lF* sP@ӶvBO{"&ݙK=)Hc*ژYjeV/ I 8RܾlOsڶЍrPp8dd_OmIx@+ϊ.t[i+gh5ZjGĭ2K$0#'5}uZ3^_ǡDevA*:w\7cb#oڛKqݮ>\6 #T{mGU^z}y&,?U h.32c=0͈O1ok?N~kƒk*Z`1'h=ެJ)+I*nRzMVWuwda*GYߔwY'^J'oޘc^w{\<+2a#qȫx J[?슗%oTtv~^Dk%%:-Jȁ2zVdNhwbHQvR>=B@w!U Z_R& UsdsKl `1{f(NĩɫdLȸ'˘3a}Mtx𧬎OAِpКq]'sM)!<#u8Zww9(ܜUcBKOrԁIF.uu/'h O|fR{G[?UF $Y!-]МS+ۙFvȊ=5%p $c;sVC:zܹj*e\Vl%6~z-'Ԯ妑Lj!{9'E;"=.%JOԲZ6v2i:LF HW68?Q;a]Q|D8FӾ_^)'ĥ^crsp?SVnn> sY냜Vqj%&[%_)R #xYJY_OB r3^'<$2En WKሟB"HXl >@@Pg/Cԫ~?njV;E<7ĥwTU?5J^G:Mo-C/FE Pk}w›Si]8|L/DE85YG6 ::_~)XJxxT=]1.7fmڿKL1ZxYv['}k:Cj_r[{`ߥy/3}[M@,Qk+AMUXSTs*.Z£ ==V8![4zgi= rEi]N[K Ba=/L/ght'HvԚ?">v98k WlRN@&*zAWX;1iס|@' Nz)`ooìadEr> 40j]DOWm][ MOLQ>,ou H8ksW u,l;9G& |/@~{~1𞌃/Fh^l#mle>2+g0[}F#6? ay54?~̓P+I~)Y`Oo3x|,;C|4Q&d/Z;99j/s8Q`s mf0;T]FsJwpȟ+uU@`bt Q]'AÜ⋡nW`UXJIr)[WUCc֠$b:5+E0q4.U$#PcH-ː*B=jA=̪o=9cF;OAT'Wd*Lo Iw&STrjl1j~f Gm-c; >; "x~XgM5qm [4:wC$`cW2mgMpQ桞C,q>n6MprW=*o79]vicryԡj|A#5Ҏa[I\v]AA"3Y;@V[+Z|u;؎` \1MZ㣸xV95mR}kf=ZJ#yk*l#۟&UIŭ;"ɸJn !R=\z=1I׷5,l7O({ɓ[PkfKZ[G$WeLرt%'sIcvǭuw{QN6dTڂ(:v0JRgiQ5%5s:-`Ok>KKc@(%cK31QRjs.ַ%IWwZT++RmFW8ۻyMc\BUرf632ARFsf-Z93 .漼Մ\v;#ҳu2Piة%/9䨫6 ;rhz֖u7iE'nOLS峊4hf7?yzshgӻ&z" ӻV}}bq]4sHovv}CHm!f]#0YNp+IDZs赸K ky\*md5tdBM,!Va1 ǐ>InpEmP}-v)U^^KR[žd&brmk2fD;@p0'zBꍹ1gUfjsj\rmg8~Ҵ-GlaF:x3,ÜFr<'ʼu*EY!Bfc,EA,A NUz)]5͡ƞiʻTRkd]zՑmDrxjFd8;lOUo2mzWE9\h5. {Ѧ̖qȓ#8mYв[i̪ry}T"فS\k w#z)\ I;OUI <WQjewe$J BGSZA[nPꛂ,;l;HѬ!%M%%'ҹ <ۙ&8 z [XJW/I-圶# u=Z QR{Ƹ(ujO[XݑQG-ڭ}aB*͖D+OLdW 17EP h2؏&a)'+P#iwOrX(rց;YpLd9? rbښɆMdkmZ rI85Z8(b,ǀ})-Fڎ˄HZF=UG4GJsgQ{ײx;ڟDQj oQkmF<宯Cǩq}nzvו͔.dwZFw %ew q\i7K%fv"-u0Իj,u2n0q#Yj q8NȡB=fB:nX< |MixQHN@l}wEM:2G ,ߏjolcvsPUT@HX[6v8iTm$ijJzz ss1gi$י^;=6SW^)Fc+Rg},jAbyVcmAҢ Ѥ>k6`q j=ir3n#jFVd8eԈǮ֭CA-2xX.=ryq(ȹw8Ʃ$ b$r2OHc]:CWIbUvvPM\Svl5imG i"2?/۾L@p7`ja^wr8`x_1 Z?,. * ٘댚KZ|-c~HdRxp)!s~C\~*;g|9u]7R?2ݳ~`U_ u"|]ޯ|D|0|~i*x&%a_)XMqϗn-υa23C.R,Džru Z##Iy5[xR%=(eE~񜷂Fn 䃜Oowjh?JM,U1drڧ?l3-Q-zTFGӦ+qU,v> K @a*D )Sԝ #XJCF~h0@)8qzZm 1$c+׎:UY•bH5 )9sUr1z4HwU&`rOcKC>E2ʹa p@CW_,sW9=e@cFm٤ŤOa"D'7S#ehZgErxSN#q]g]A_m;1񮬐|2IO‡̴x2eҵUB\83s'˘%hoELÑ-OcϦPҎ~coxnU' ۬m Ws_jv-Uu=JʚO7|=)>'ס n7|?uY2"^.Dy6JXgּʿ5U!jR)[k&Ce9rcҘ/pȪdZu1K3Ê[PD#$zZ>-JUx6L}Zޔ@aU#v52,Nyks$k|TD\&xݞMUg kXwiO80y##1&rzlk5g#Ѷ7#gUVsޣ9EPS*FtzOGړSx6g2˃]$D7DVT^H YlA̻Z(#Z}A u!7:]58 ~4ޣMl IWƥ~F7bZk0QjPNv5׵hee\ɳ9&a-rrk6E *Ձ>7w:ZƖhdđҥR"`A$rc9k_RatG"t;+)68`ȉ*'17X|՗*qY=AeLUIхsC\#5;22iAbvx/c=kZ>k2W;TBwH`̌N:jnFh!'/B9`ofVz4%UrqKWcHǹHm`ޣ3w hDb2K%]VP6Җs7` c\Y*汔,D!huGiV {q.s!"Mu$f\V\WXwe,t$En# u)ifwT_sPG-eqzrZhtZeiocmDVvnPk)êO$P xC~csYmA!vz&xџftVpMn?h[D؁*W/P,;i =EqEevC ^>AwtFfY6ڌio؍vՙD W rj'Eҵ+Xj!]>S '#UhQ}#]m&CvjZ8vA>ƵI((m;Igʋd-$:t;JyQ\}Mp*3ψfUkqu!![ 0DdP\XP2 YǙ,1oprb[n_4ujr1ɎT֖V5,.eV] 5BxVC{iglC%+5w1G1v2F݈9_:O`;V#FB汊kr0МnЎu2EW0;_i{432umgo N|X.2;5CImP¨XrxtՇszxv4]T "ai"s坔gޥ̼Ӿn3Pk8ys7VAĞhԫ"sGbvj`E}r9d"jZlZ;z2{eBs);Ԗ5hN\# +zM\~M 09X3ַ i3З+N)YP1#o+jVI:Ts-K%׃"&K[(U=h͝^[O`'>NR_W(CЯ&ߙʲ"q-\%𝴰 ĺÜ.%]څ uw!S5o•\';kjx ,C&F'O+.i-G,2Ck3syc}eKIm -? P4&|/S>TvM\SBO}jI[6WfLڴ$X6y O:ė PT UMua積i{G׬m%GʢXc?<%\Asљ[T;nz̲p&^0 Rs%ulb9K ${tjMVHڻ\fQIMt' ZoƉ{y5v9apX}:TZ ~)jP hU tWSn_R )9=xRqfi|l|3An*3Fgt\}rk$ǟDW!~_O)`yj"*xC!B2Z :kQh/m1RsMz7vHSo[xUrǖ>w1T[o m/'5>~n] .}ꊠ GqW" 1mCb+zb2sT6nTɩ3ԜƘÐr@zS\lzfvB)JH$ISgߊͲUO'g\J)יE/U$`4u*d:;]x<#"ʋ]GZK:ddMi]ُ. P#+B$(pHQ 6Rݏ?׈mRSd)K}Ni=¡gLp֤-[И6br)uoRנj$~k@]٦nʺa$!F*-n&MI#M\ z[]r`T!g>b=Ӛku =AfMѯ- ewE͒bo~sJW@Y mdvq|kxֲ㕐pk_=^\$vSڵ$$Вum=-Hi,m$#u_z欜u.^]%@e>*Uʹh幵lqddR3LԎW;TPnsBE"#721o@S&;s1#q9\KS!NzTA5#Y4H} .CadX̨kb$'dGURE%f #Ir"o ҽÚ^gmjlKE\V4+SrX'-tv+p4g$۳!}&h# u#h11ܲŘ*RmzIXگf~>F; Ԯ[VDv74 .pnWG$p+,_G71&dʨHOTr?y!y}) ncG.ŋܲ(lu=8HP)]ܯ$hsf.#"\0#c689l`=+=dS1FVe-R(dh[%5pv(zfB:ƥmjtW xsT5DU&+ۼlxGz5L38IRӳ[^"ntoizK9v?,Vc>%95ݶ8ji^(seSWoSt@R۸)&o*A#{AdArytt5.k#,*S\ BZ6w}Uӂv `q߭46;5J}?cHpqih5f Õ А+d8Ý+rk6y'ɪ(s =-q*і癀d8>:V2AƯ+*tf{'5:,z`V-F|CU1ҭ0EjEgh"4]f6bD5uP[ʹ]x῟Rzuﲤ?Cc?$(X97F+D1 'P0sYtpAa^{D{#XXo0N%>PV7uֻsqQdNOkxc_ٯ$BF*#q5JeԃÅ݌A4ȩte}ŷ$obGXRQ[z\XZ1('`8X~_-?}z~u: wqUQN@?B>+4V߯Y|/n{}XT>f9(7 x*?{^vV51_/ c/-s~_YEtWBN2Q1y١AkXĞ-*§k6q.vS! 1xHˁҼugVgi*q-ƅ{֮,;s܎J&\*0!ԡP r1H1Ġ1RI#cSUw`p29>  b##=IUIX! {g+6NS\v?ZHUHnh*p;N"h^pO^&$jיhu{ I!Iti્N`) p  j6C>!n]3 ;KonH7کk hRv ~.^t%1@(>1cTUE^tmv,6%P6أc|UèT?]~-|K{p~`uxZi]fICֵzW144Y s$/ל nl?LH#i)`3Ҳ٧A”9< K}F6i B.9=wE$ -4W'`S8W{YPoϽM=z3ڐѱjw!F0fdg%Ȩ]N95r1'bmr`+&D[+zM);29hce z&|zi8FmM%)h&e1WDHO&.֍E#Xّwm3Kg(8"EkVc2xe]1WvֳLGܩm/lv94wE$#?J|#H)Zk[E%JzCoyT֌Cco<$+s դ_kIZ'Cj>J֜NMNAC5vh{ ;:;&?()]YGp@`Z*|=10o楽E$zCS~*UzRW+_.#N;H⸽oB`%<PٓetOs_Mbm"x`IcY-eϒ,:bfv3_lYל_vbՔ}֕ ]ܛYC̃Gֵ-ӥn ĉI+Y$ɵem`.eZ@} G[J+!N,6TR=u55kiFZ TOj[!ea[`6+jz+Yk*슆E8-mΣz (xUΕ`#PƯX4˩ */J:ޖ5汵U[rCQ7Bj0#P܋1:̽j2̫4ѫj2ly9U^J&ُ_iB5G1^ iLQy3zU |mT}$bg'@7!#JSqeOPU%dh1Si:ށ,iW 4}diQܑR{չh7n[#bLc"PqvV $hPVRԸjHq6 T]gqТ$c5JmcKLc$ӱMw+i #VOis3 qh?ːj͗ %*Lҷ@EY j{N1T4MۍnjQ;Rݶc5ޡHJ~Keck]G Œ19D3Hu83i 233~41m u`-ުyih$ ",XʿFĵdR8.~5uE n\; 7 ư,`uyr 8X¨w!Oj 6ۘjz[suY&2eD$W5-֗<.C޷CHJWd"XFg=nN$y14+coM9tkX4W(itww*0:= Mp.(SJJ]>ەLƒ=H!!QG{c8>\a BmQ_~ZC+B$vprF8^=jԶtZ,W'ꆋܗr=E{K]@*zt/a,'Qi6N.cGB47e4uo+_K Z f-=GVMtE㴵9lB,'EGn 7|ڃ"\`ϦK*kAJJTaU$+J*2Rԩuo F=׏ҦkE#H?Ȓlcm"7%Y|!m{`s_Ľ "Տ/1o֋ 18m%Є*'*B˥t?'s6)+ 3knU?'Wu `z)z~˧s] [0\߁ =F?5k/%Ok k߇'zuU#KL4PsT'XJ\[{ HNUar;zݟEصdmcfTsj}NH*Gjo/r)#Nh%B3q4?1M^ڕ˗28#ު7cޕ2/vWy6aUU,ϴpC]ӗ`޳ܒJòDĂ8M,=iǸ0>/Y +)rɛ36vķOҽG5ܑ¡cKU _M|EzcȹG!_ ?|9t?SFKiR<%fm+DIn=q¦« o pΙ]+N^=>d"@_`?,GkK${+G26bÅ*wb..< #bY3k) ^LG,oZ]y= U0=1UO_Ș| yB&>IVc|㋅ẕGc^ͳuX>cuN X#in7f]q*T{TB5is! !1.F9"rT܆H qS"V*-pv9Wax_ȉP"hhID("dcJ#Kc,P3I߱cN36zHBj&HbIy7- ȨJMZMX,~n c'Ҳsf&U* xYqӎ-i &Z(O^*ج2 c#*CELAܼ-咥MO|Հ[`lUy{ص%mF%A;鄓eŠh4-.H#HwJؘ%M} a-̈ 9;IjtE]uN<C(o14( ԝ^ȈJwCl{h=.5Fr)'P5:!_sB`EҨ19j)$a g֥RRnԊʂ҆HpH#!8+-s֤z.cثR]IHFA$܃)8"x}Dvu5ewwz6QGJՁ$3vr)/19%axNdЍ4Ҳ!FTsUEˊQ41jA4lZQkEx9rW:Ԗڔ58jPKGJd˒H֊8zI9>e1O<ϒ\AӹT!6MR'l{AY aU8ʉ&pMl.'oC^.5lzzո&N9V%Ԫ֐з. +;tlGz{7nHPjΖynQpZ= >%08Zю4Y3LNĚ=vch+4,ܨ'"'٥K!9v7~1;F([YRMaf%wGa5D$!cs֖2$i:~ [(uUL{2D~rC$P~mَuhY69J_ 0SMek),? 1/ jDߢB0ϯCVyD?Z}5Acz4Cͷk$aXwn!3G8 B>R2=w5ض(p-}H+G[F$cGn*enkoXocU4X@d M}23SnۚO[ޭVgAִD.& g5iO?h@ĕ';_xFz%T57Śrye*siu G"1$Ok2hmX<xQqNkfzO.С~P &cÓ~C)F+=c.תcvU¦RKNKJҷe.kfli'KuJ-}T~)n'X|XZw bqj_MϚm+ FIQ sRu]bZG}d_-V[ŗR).RF9GjkSaq#XV*RQ}^v%|qVt]8P%j/bv=;ڢI,#;ZMMVH%%܄.qg tf+C$>lyZ8IhAzILD6Dky9 ĥۑک4(WoyIq$mW4YJi!Ys>=vlJqN )5H8mˈ (,܉%{?FNz.%E{ݥNXt W GX%GLgR ,xǵV)̣=OLz"fvd]Av9$uߑsl6z'X\^=H4,,c'qY[$Y&;K3^kSj$`kwb9Vݿog7R*¥r,}1VKKuҋU%L9徕fKD6pE}8U``i7-UO%KRDl&whteT'O}DZAq So䜇ҪZ[ >B^CE.U Z~I]$]Eנ(Cw8aR9Ɇ3l i͡jcG/2J6jt}25IQ9\5FW,.C6 PhKM20Bjh2 %e4vO$X2=1)rj}^zmuoH;+Q/ ,0# z8ڼfൺȡJٻfM|yRq('8u.-$ zA|-o"?/¬$}°o/Py~5*qG:*G)ǮXV~DV_D&x+kl+WGg>+=vɷ[Rpc b5~FKl5V+`BlW1RXcn21(rW?Tl8t>٘#f;:j>^ǿȋ )j¥8E"x!ۼ2XlI^z~X۷Tbq T5CO;Զ4._"@mwAS{EK R ~c5{Lw9TF894z>9UVRV)\JLqG5]iڎiKxI< .y,OV}3C.}>BEomp1k;st^~F`S/U(f5k+[ f8梼E@`~蠵m(-t܎e^y{N`&f6W8ܨazןBFw1S=/w]t D@cW&hca bT L$A< ~ozHdy6#(`۹K*'!IK&9\hB%5P%Ep6skb%TY-E÷֖Z^e$/Ҵ= U)ҵ+4 0lVt 5\N7xڻ!VQYYG9WC]HW{ GK j6)K3F @I(W%m=V{㊂>Ȥ89iXL-WNDt"e 4."]6{iElNX'ҶDHd%qiw:)|,ꤴHG1TT8f9ORuuPc,om8v pNxZi=e\-Æ=kJH) G;{m F1m/|ON3Ysr0$t$Jof5fL:fM?w*}+wԡu 'Y$rk!J [.[2<,05s}^nR:PRhPjVC- 5 Q Hg~FQd4Ira!B8iX#NX w K|0٨SXNR)$ŹmP>/^{AyQSq[D2-RH$bjYL' R`rrGnGԽABH͕wΤQ#!Imb?"gY$@Yà cҸ# R#$ V)=,+ Ԛ߷I+D>k+(${Kyw1Iܵg=v ygs0K}e@xvӱGdF<+vq8T[:!5+8s>M>^ono)6ƹB:O[R\rSZ~sҴ+FWlDWkD6AǞ2jA^T J?ɧbbZ &bRoPwuBo23#2sRImy-bcF/ 5 B!(b:XUMS eRǵvv@{ldh$bcHa@[-d 2sڳJAAhFUfN\ujV~2CbR[9}9G3^/c3~ fNF;$.b8։Yjdz+ײ֠|3Fvی}*eZX"][ ,i$Kmt iSOM}!P`T:m%6O[ǥ YjJwyCp-ж#5 j(yxn2Si 6L5ϙ}ok$zTg:@euȼgڧr;ֲs+}jX^^fh0<2S&exJ aXd R0V/Gn?1 jq,Mf6%ڢ@<8O}N bEI8Ͻ 8>I ͍āj z$34#30*)OQڨ.z )'U;Nzu͙3Vdn@'֠l 9*+6S<͆oʟqw #8W&(?קxJ5=:82L`yT+ݣ Mk_2-#nr?KhӔKZ\rceWL_Cdt@ xx?9²:,_Ʒ,(7i|A3Ľ \b=)%TU켉W;%:}?i_?~,Ý֊뷚#8?1&EF@! F}V7T['xL0? m3#p?5uΊ`FY#"=`YUnkw;(r۞@qr*K;O-d;r@^uldҬ-"ev<)Km'P-ܙ|2LgYׂ<{Zl+$SB zЮv84ˁ W}D,Nz#d"-``aѷKi;zɣRNS\ާZ&YO֚z3T/L&銇L'ZGx8Tc"L$m81郐4MDLzHduvu$e"/̡֥,l s(y1[ jG#7ӵ ITdϵwXۗs9tte1u>֞N$Gr$(܆쌴>d($5Ww-:nN8nyDa}S4)1MՌNaMA.uFN3)((롵wZ Y|@hhd/BT8e}OI3?PʏǠ*nXf*ǂ t[ܤ[GOEG,H㎕-ve\#.,C$eì 20#`jon@'E6-Hrc[2J&XtRWuJh$Y=j?-ffwhH ;?SUӦ '45vRŻ,ϥ:E [?J= ZcMmn~șq/ڥEy}iKa鵋xhc?i޽҈*:ZRjV2O]K EhT@55"d$_…%f\I,"™,TzRzjhVkc;U^B (4)!7_iϜ.dS'ErtSN\ 4q/PZ[[\2đRWKo8F*T^YIrsMh5r|1hf"7ChI%J@I搼kȦܵ uH14 {Qx2rI4$bx93c{;3PUCfyu)]Kkv g';ٓ)-:q5e9A4\D"rHɩjup=) 4yEw1#Pfg@~mnRH&;"eD/0Jl @r[E{wqIJ 5R@rVm>oEZEh|xj.DzGX&އޠ-#4c+_D7m~}彯hY'Eʖ i,W+{DdiFTZŝ>ٟMnEz&!d9_S-use[#$ROLV"# )bwRh@N U.d;3(3jɼ*neJ|޹.IF|dU<5I;U4'9mc9k9p$<ɺߏZ4s]hz~VDK:hy r0hgy2M%n!r=v{{KYJؘBzt.)ir]jɧ݂A5 =,֦~pI}&3,gm%pq.Ӏ:(#Ԗ6O1S6n}FtmUAXZVg[u_,bDo`UǪե6 R:J돔j/R;k8 Mw)~mI[Jd2#Vo~Qm;i&`$A#Үxvڲ:W湹c<5.XF(K9i9\sӈ>8b-"v:÷*~,s9k^F~7|LvPs]|ARtr ">?fGA McY<(|{Ė?H!}OOxrBpD7⏡/U%nx7?#8>o~:HX3EtJנχNn3J5ũ?-NO?[__È)ѝG;gZ>;I8_fnґFHKgڿ<w̫&t]h?})PFA{9IPuHʋCb23[ť#95jwY%I|=*/)G2siF} Sg6XYG'&;q$;Y;95oOkBu+c1ǵb~ ePB9Kx1FH8E@쑜o}@C@&%ݕmYB7;1[kM}co 3ޜ7Фrko[TsӽMom+F YNrDd0 n.|!T.:VnWiF38WD )o{)*ϡ(GD0cMt+̶PN=zT1k0I6hR#q+` W5Znios*ǫ*V"{WDa nE (lS3rVܸGjB9R_R(>6#M ^w0z <;|L (Gb_F@ I4{A,; U"xݽ,zd̒C冕mi&1 @6)ɪj1a@8B3uO/773H`bVA&{cOQ^[ zdUBQq`RZG{f pr1By§sMe t-`q 8;қoaB4U³5-"+XHt#IPཱS˵ϛu*ôK6 o43cKEYd]s{:MLx!IwFYmx-[,1ac4f;_Cml߭-ܘ91P gO+ SZi Xa?v>=Gb٣1)܀n2 حvX۹=)YZ͘1qH޽I$wwFO`m.kַ@P,qmivnÐќzZ5pn2G|a0 43)2xIVWzp+;ᬡ1p,L߹8{Uo"BR% 3JuNGκIVby]n>Ÿǜ v:nLdTFsV'N8m8 o$)Uny9ڥhrB99M/̫Ñk9 ,'"Łbثc>gD#\ֳd$Pԩ$NSRFG$+t3wczUYe2ŒwiǙ SQeohd&iD<`xfox [eY澚4:)bkF_]Ou4fqNhD~EYx[Lҹї_?+$ݢF35DG͍ؕR|)a)ୢEr^P2Q~^=5tA3$ؤ1kzMbt`~Ċ3dοZ1xbh "< M")?SYk$Q#4ZjD vM&Rق[ bxI1EF@qP6 s+*bk&w 7FX*Wyp+ܧ$WQlzZvahE rSv$g ׶(ZMāzTF;P.\Wѱ bNJ;@(Hr<pkkhBf2[T8=+;IFw݊" XpHk;D]N*U9[C_FQ'W6Vs7vPtb! ud[wђ/#zUS'$5+:%\t"qmǎتĨhWA_()6ҕ I0>pAv]θz &۔֦i@44=}O=*I6$]=K[F;TD|õUՄO#3zDYE:w!*j]N0>q:^sMEppMsv.9[jd7+fVY[dzI594.j38P ex~X`QU31fH V9VeYX~(m}0{Þ :V=k/C g9$A`ҹ*\,ʠ Y;}i<(W /A=̆Ey~B{]縷+'8%ޚ2F?+becXQ,NzkVjW7[$~Pqz1$Z126uccȘPi^$G 9ܑ:s(vw-,ZJ:fАm%GQR^\*R=XͤPauzrl''֟Bl$!)]L vQnU q1X:ISSݵ#뚕k 4+¤of+"4A\) y ?h5j ld]"{T"(-gfcwZn1aBۈZ0@s-{gb% ɤmD`.s6"5;1-0pJZ/v͙ጸpsYgX%uڧnԠEA$ctRsMcW@fGo#*kMa%hذ0j-ǜzq~uɩFJ!RV GJZB52#comBI[Bi ĂE76"}y7}j-Kekdʏ=Y"Wץa?iFd7wwFֲ(X}Mk6h/5DomyL>Lӕ=OWP7.;{S`y7JNa [FEiZ= #NU=V'&R/]EX\pTa SP͗D'HLTR:F-!Զ3!g&nf+N@Wz"-P܎1HݪĞ# M :*g̼ME,(~\K3?c=U+)&k3. ܖ%.А8*^¶CFR5[RMF.jˇP]6Ich{Yijy9?3EZ 'B򹟫ڼVrM?PEQ峟2EI#\کbi]}kE9(ZsDv{;+NY`~mޣ#--ǕqpÑ=j-It"tȝQaWִAqy!E4r2rAi$Q# "VImQ/NTKIϫ>R{{W6F⺌Hkibُ;dU{ ;"me%Y@]^VE5[ Lyj\ھ7)+^ǦaAS5W\>78#9I8@ ݩ[{d%a܁^:LM$7IգfglYaܭcg# X,S.qZ&+n~쭣}>Nc=<j%r,JVXZ4۝:J[s.# >cAZgI1QKd/uE[F%fpis XUYiTZt{pZ9Wm x 'L)G'm.eInlx7K>loૈ4}',zSl1E"CN|` a[𬙮mfQoJIrC-ϑYEm, |zVLJ,%ဨpʤZޓmX_Jl7m b_^u=l -cb<:$6dKuN?Mx28 ~7H MssnMD t@#Ebg[VJ\A)\ʣğ1-Ћ.e+_Etx?Sw(Sq?5[MM>pꋟP;JgluRGTf#:Dy Ub*b8j>6E`8=zqD`hUQB]c mP:yx+ NU#)3z@NIe# W)eVBq?ơHK4;sԴW.cJi1{ܥ)JSrAUs՝|.F\JڲҦteEQktgtV2Nȧ(pA f X@"%s/*MYE(Q}$ u'cszRl1"m¥gZ $X,3ǭ ]jk14Lwjm:3.#kT;+vB2_ζhqȹ$ja@Abֶ)Xyp}[;=ϧGHٴ;0A^s$Kteƴr9}J%]ԑpqQ]DM8+KئYrirD!s6G**^$qJ]Roq;4 654yYW#)XQX/[H0?J%Cqw0o+m&HӾhbBPe@ԋ3*Y8) 2FQ59 Fg8R)lD[:4&*LUNRu(5mYs\<%Wcޥ󠑣rIQMl+u-EygVrjqwE)]!yzZ} :l}LΉ@X`\ԷS3VLzܚ9 3.tuS]E5)rO>n)XJiۨt*:Q] 3^(FEڷJa!W<{葤ҿ@qQ$ܪ+Fc[_iwo=~ddڵ-kYo.ڋ!<geijjPXUH.B Ŗpgk|^4{ z\ڙ&[QBPbc j,Mek,4lɜUsMc5 rO6r k'7 bCH pNS&5WE奥!Č~by0q%LH fgfE+ޠkA:E&HŒq^|0VSz|WS5ɭΘBF+4pHJyKz3,ges%K=?M<-zSjoOsws9_zSp>Oa,1lsXHwYHSBдR9b՚, qf;[^-^adkڋ0=m+^M+vgp5r伬}۹-zUr.K<|Q{VGyrI/%:ȮF$NACɦwayu|b~Enx CzN"oBմ-431f ^(u)mnT' ~;"`!S<<"pE2ZM\65?MH\&=vRO"A=jv ُ[H.gg1o=IJFy vz^:lsO#c+6Xo~h9V)NfwG:?ߏ/AYw}6C&$|z?ƽ zgOu=>j1hvd7* KV5hH@~A]ႀ!j,Fv&Ox:jEDGN1+K#;^3խ,&~xWAh]ӱyO#3NWٞ;4cx8ڮ[Z=E!9V롪e%[fFJ=E6xp$F:Zy7p\WQ]Z$XcfC7z2bsp)j(صT.C~qۄv VlSN%t)9l$[c?V,ɯVL)ZGAD3,&CZ67yi!bBԞHJn2wg9I!6˷VV 9w5b)NZB{d3M'pLuH@:T2b:"p?JCdpil|HdFvv_zqmFU\)ic2rjzREo3*%4]jZcdDNwT*NM=ɔ@;6F>וT)\mj*^P㎴LP6$}2n[~=m>Oaql͹]QdvgL drD$=!* {{ܓޚTR50 JWpE-4d.bΑJcH59 nVK9RsJCsԧvъъF˚1.Y {TG e8֕zFeV L{ۦi-B)"A cx*z0L92M-Y QϵXW\#ދЕnai0Tԓ3(B 4"`wtJmeS10;RM;vV[_c#|Ғ5ҳ{8YɗThɆ唜ۑWl/>,rm6דL/F{fi'5"}H0m? kBSq/&5f+ˠܣls<İJZܗ;׶|!d:5ekO QOB u)FۻdGb+AflDʴQ=T[MXq.[X:Y]${qxQܳbIqmj 2Ʊ稭I|ך{Hڛ%{58+<5C(јT <Y\BAx~y<b NsXq[}8w1I4nIGrj=Lr[lpӄ>ԝʋW%M>_k\ ; dfUBG]i7tH4b ՖѦh,g-ބ{dBV׌b6^1帡{AYsLI# E69be.Hn3X%Iq'&hfiX#!9=65k}ƣ?Zg#`,w5ޥC:z zҵ)X'HD q֫-Of,}\_BH嵸};5Xc5$fofJSSRWtM;ZnKEu]oUt-e6^\JBZ:l~,] QsMK w ~sV..kiifl,c҆TKeM{csw)_AJ3uojqux֢+8l615"[˪:K43D<NF]jج0Z}\LVZjGFV(i6J=m<MU"ƴ>VBq[DrJ2y4Kc;!Imm+<СjQƋh:DQXcRFZ_ Ӹ7shSZ%eWԣyjSGhKM+bJE$v4cOe!-FÄ {5m+:eqӯpp ˔FYyVWH4X6RC7_L{zuY DJ4ޣ:|n.0X֬P@^+ cy8O+HbMTi˹7zUb g(sZ1R8nYzĺx6c(UޕnjzV殐 kkbZm khڣHePDpw'ڧEp#v Pksvf_ZIo-ŻݱeE7~Տv8*viO#-&C' tVq[Xkx5/[l<} ^Iڴ1>|,n:f\#`73i;jsBhn?z2?1Si޹]wשJ%ݭG$"`;o]B'V;3C﹊a`HDem+[^H"XDLaV.0#*8YhZ-ܓOn)2T55J>S{"Cb$KK95o%i׷ygEMxM$1>֭o`<ȥ/CiT? AӼ |!ls\7_^F/}PR쬙$E>c#W^~η3iB9ᔸyi ql3Uh=|QԓlZP卑v(A ֬%\cA;e+i- VhA32WfUp CUW>Z@/Q&62:ex1XW`Ң[sP]Lv '#eK3Yw-sM&݄TÂGKž_u~%Ɍ|6P>k1sOAg"Ɍwk2؈)yM-)աf=0M?,?y&7$ -09mWJ "_v:UxR?؏v"9J[/,s[>;vO T掾Zi"SdXs bA~-c|;e Ƕ+7T_Vc%4˲@,Gݏ]_/9ۚ˦R~Eg@3?U/McZ'U7C(?,p|CVX^1XHqt֛/9 f >A[@H7Ҧ_CO$o^&7Q)?rE2=*jG}̟;K(ied{k%%Imǯ^C\3{Q)^b0h̍nTQ.db5QʶGz[͎&$nIhi-f}on҄$yV}u/Eiu5N3m<|NVֶ* cw"8ɶFQ{ YHw`cAJP0Px(Nk9K[GPSM#+6 O=)n77's4OA[HӑrG9e#;Ah9b?#F~Y4-X* dzv> Ÿ WBuVd"`ivvy#u"7}*m}+r3MrKKf# ސI{1%y]n0ED4ZԚ/69RP)jG4R/AMm 5hu BCKn sֲM2Dv⩔zb E#1aYjt}!A@NGv_7n@$opU,Zt1k!OQ\.=OJaڕdq[+O2XNE5{f܌VsY"ȼmj8[gXd_z‚K$w6jO#5gi]㚤h̷ʼ*pF*Wv]*xdxZ|3BZXUm I4TӬ\LϘzl6)g$KjdrcwZTi !UsDZɤW^- &)_샠5ŒY3 hcOC ,W6y泼Oէ;d IԏSSrmfUVx,xak&Kc%Uc7e~iX F<Ž&+־\j";qu$9ѝzzP2O*3hwj%s֡1ymo~nh|aq}W7}}#h,ycNJqMâ4\ɼZn ]c v"eqNW{.V8$μa0=kN[+#ؚ|P\_' zԳߛ;vgw)_q(%$2tmu0aFj5/Ȫ.FF+6.(<K騶Dz5IwI<&F{DE_^]6>igVVCΞp.TB^}F5J;B^kU@SJ|gwc\ nJUH>>*d 񷊍:cRGy9Wo@3q횖ƙcQSLN:jX˓[i(1 q\Ub7r5 Va3v嶓EkǨ2N42>oSYE^Jy9pnSx.ônU"dptE7)Z~ҼHPH<ך:tv"P^he#?!?Oָ _Ꮇ+ŴC}(MX҃%vQ*ʿiNLKNԾ{Kh6[X΍F&4[Yb1IK =.YGu g.gK\揇uk+'/%CܼBXpph4ěD.i @= ;Y$U^Z 5TXe nEɵBsii4!;[ `i}V>&O-#a_hj3KUS[,,q>ՅqwFfv@G;sT 02qmEI3iS~?B_Ώ ??+;]C+V ԯ4;~(*yv9<=0MlOЅjhg+@?5_ coǸx g1^W7`'/`9#-)b#:|JxVl'KZqvQ :LkK/W鋘ژԊ~4b|5IXUrYs1lj/s $LZĭƿ@;sW~-p%ɑb]*h淙6ݙ3as{j#J<+{fwK mZq[n6=sj*7"Ɩje*&kM +6ܡ&TPJ fWp(;j,}Ζ) 暗+"p١;FEJhͩJoTU(dR'Kp"1f^p `3`qҞ̥xP 1ɫ/kz5S ȩWi!\*ɓ4Ğ`*UfD証;f5Rz+u;rhf@"QUJ$q֝4*'@(kA6 =qmQAƾһ$֘=j$R͸FFjǘX76m=1zlW`7uqJ)j HmD[-;tdZ,$w@h65m/#*}28msrA>0q2jsgIiH4N1d6 ndeHEK:w4|+{Z#=)W:n.=л#>)(撽OG$z1֩nCZױ*Nv] چ`mΜ/)Bf$K@5FH_k~u-jZi}3̑-OPtGrV& $0w9Ro& SE9eEJ( FLfsמGY`95MWt֔^^Z0r:tS+OKR5,+Rĉ?f%M# l_Tz8X`J;Xˬ5n ÜI,6p{PHYJߩ4P<W%HR `7/9=ŧ d,yOܐ?ϖ\ōJ8F Jf#{vΆ! ?\HƄ&2AⰐn'")29vRC?#3 ( L-.YӆoIyl2=jIn 9Cs M'LЂc>_%ax<վ{lR]Z1F0ZV^%÷|=M$MOq 3%#wUd]$a'iuZыP_"ER~YUzPyW{u1&+1T݌!i)KGL.6hKfIsmiq`'KKCkfLS Q[kmSP{9K =k }hL'xi܆q,#2޵FNH|/.}jIZξR:Ȓ^Uc^J[+ up$ޥoJic4"A!S̢4I.aeY*R]Fh);kd.fI[>\ -TQ{{RNȤo]OV`WR粓Q[iw/ִKC~A ]JXױcjh͵j,0}e:NeWBw\wg\cuRGoΡ<Ҭ;?MвZRKzD2]=\\#;F bZDZcy2dY}K\$Y. KaʖxXۑj۷CjU> k8YP[W:M2!|M-!3:sYcGIYѱ{(#Lg\u#r[]#Bzca}kIpQMs\[%M tMFB:m)v^=O`@`KF8b 8aZYYNbdC0|uӲE+َHʁ5pv '*5jЪ/ {guݏN3ꧣQib-!oXx_e2]7iJ[Nt^:>۞cx=~ji~|O,ı$s5=VF5 A_AָgUCgOG;@b9Ҿzn+h^XԪ돥C,1Pq"RQW-rgZ{0/7aGS]7/?xA{!5Z>QOKͮi6ďX|Mk>?1[tu9կ#ˀ?赛t|LܸA55OFB22Տ|!`c5M?Ts4Rx ^zA^^:_ .?-#p1ZRƌ[|Q?+k>Rz:ճ%?B6<sއ-jR!렑>\r{Qb՚_ fA%@Q!֧a%]V<7O qﱣ#X[v40].k$H$AH˃5\Y#loKs;<8_zD(,QԮ˼Z-'ڞ!=ҩ C[boC]8fHdҥPIy==vP+⍡H*SrԹj23 m][L Zte{`3W$"+jWɈsQ!#Ld4G#8ѺѐK׿vdFBJtdM[Bўs:Qd kEb%!`i^Z(,A8L• 7!H*;1-ZhKirg jyTʐy6k*Ȁs=2S4eks qhV yfv 0}:֌BGrxHBsF}YL7'O5r! '8dJV9@ΌY^wpWsJ@ 7 NE؎V&$94%+48fb}j&I5F| G;Vz\Gp.pJE,4AEk 'LCS&7&BD{$̛RN#QEj5rIS72Ll=qV YT6s:7!Gֹzlda@rWE&@%fXI+wK$eKIɌ1cVI='+xN#;I7}H>Mgv2nl[iVr ӓBZ636+aP| -͵SeW,ZkN"xO 7Rޟ>96P[Ƞ*r>Q[v]Gd|ھ?$3DMj͢e yr1Nxi6Ow^|Z5*Ҟ[Ev+ْKi[D$!_6\Kr!!#%g;D`aڑK$ep-[2%dF&WlPU61M#;ل͇ԲăU8ւG2iC͊󰭏ƪڶ h|EUj#wq<5aR7|Mm24WT~X@oHomGUgfTeʈ/4{#ұyֆ05ٴ3bq S[VOqV+6xW FUxՕ""qǭlA^i:RiJ17k $H8=ݭY!>Nw$ XDM-[,01\vAN8ک0Ojsi0gMi"ir=yhtG1,:dh{zrN^ c^(|ZL;Y;쵣)/2jF$4}pp3iɬ]tDnը-$(gا46RiW1ǭiډRQTmb <4l+"(c=fTzҩ>rh.v]GJJҵd ұڣ(}MZ]# Wd.F<洎3Rh*L޳Jf2GW2G Z_E0Z<Sf+R oݺxǠgP$r6Ì AଇzT7j-`CpA8?\R8shηy97"z{Tr{/U敖ЧȒ/PPd1z`Ԯ|F*tu_ZW)X\1Y3pBA` Zi$)P#=Tvľr P˱Nݻry`ME6`j1Ͼ*ib.U0XwNqR3nE2 ;5:=wU(g6;ׯ3bcdz?=-7R֮Ti̻@~?h:VV\q^~.NG&9#>-)⑉hYx+Y+&0y|_Ɵѻ@[?z9X-8_?wK# xojو4N ?9+z~IFuZ#?cW?چ'M>Ux^Z$u sģt+|) Zkg8W-Wq>87E'# A{}+^U(=,WOP*2:\U85꾆wcIgQ^qh/xRedџGZXO_O"Op)H>~rL/~3iUV dzt#Ӯ&q!hϧj9g9e z:W,%WqSQ`PEW+&lWޠ_(fĢ:H6Ja2sE+\< fb|6=l!%T13֩jr[݌rNʓ.zБg2KQ;Vh# 7yZd5vS]y#8ϭPݠUIT\qWgcH6&:rRJŭN;-F2/9"Eogޥ2H)R#ndUdCkaHLr)LiT7CZdS}`h"˘R8<Ԇ9qWw\dҙbB*9Jma䟗y"d;qҝ'+qϽW%a[Pa/S461֣NRb[lg^nquGyɾR=񍮿zPt;,h~yU2Y0:v-n9zrj5 &<`1pF6+}ldSѱF{Ԡ3K#4攌`'gb;`H"5@ZwV5B֟d v\E$-2*Z}KFF95NvoB)40K01Y3h\3v~YW NQmذ.0-CjωD/)X02NYڥ߰|`o GAUr8뱗Jl Q-Fޅ f>cG$鹹Bp;QЫw/<"]F-|`Pu^= ll;"U֌׶NzUFf^(jc4,S-ѝct0|pV;"i{=JLX]C'YĀ}66s/bj퐷pY̛\9 1։HP݄' |qX}’Č՛A-F~ZYr}EeQ,NAZhSE#,ȧ>|YݭЧ$Mn"էڵ(v9IO8fͼm " 1^jޤΑ-ø DX%I ub٣%ݹ1 Ҵ[I .Ah$ӱV$Ѣ7Q[ 𪿖yXAESb$[V\ 9nL)e!Rx'Mw*J[&gYz-CLo"ǰcq)ݞjJGS]mǵKϚٳLN.聉AnsUVVyıbjm B_ֱ (Vǭc1 K"ON{V֥cl<5vҳI۾Q%dg4nxj+P*ry5^wkźu撊rgŸiu7 "ՀhK[3Clsf(xjٽJSټrk_fǞ ;RүkSi  +ҵ,L:]M&WO<ŽΝme0ړ!ϚrIAhe\LfbƯZZ1,ELMlW*[8*ޡ}Q QIIl+m=Љ-TOQV0\Ob\*8pӓ6i!I`E*Hf8ۏJ$Q9&˯\c=IBgGh]N&*^rWF}HwqBV$E9f&ZOw{JWCvdE-cy8|?k L˾+ޠ)H}6<]q+֎6RFR=ɞvv6sӕ8R^C)Z9rAR!Ɯ$P{3s"K!}X1qRӹPXF "He?|;UeIpsYgrb$dV wh㡠$d-=d `1UC߷'O+GhIo>EI}*JR] "jyO=2Կ"Ȭxhz6f e, eݏ_ʵ-9_͟i̒N[fnQQXgq+:L[D:=js 'rw7FX, dz7|EbG9`\)KF&'S?@zX}YIQ2H뚬κ1isW`w.z|=vzۖdwr9Ycֳ~5JU3q{ mnwSzWJ*fԹ+#VTXMF2>f :u+m`< qnL\Wleh;Ex^WHWBT ĦF"oTt*(E5nTD6/r_Z)@!rrFz,:N-o%djtsͭ\3l horҫ)6^C8oIT#3#gWRWlnOouV,H19PxKimEá'߳Z]YӜקCl.4_o4H8wp.y7uk /Uiq*.9뎲u1F1]~T[C3F ~H'$W#+÷Sߊ[ =\XB sCE]tLҦ\GaHv+t}x?vwʻQ4Uyd/^jJqͷ]Hʰ\꼥vV0jm6A8L31W7C,? ΖCUCWf $gڳ'o.I@I"hR畎Zy"sH֢ۛkc#*פ.4o OvvOP: UOҲ>Fru*@rHz|}RPA 9_SE7M>Ssһ-x'n Կ`=R$c7nG򵝫\8x_Ɵ'#{|x{>jυF iX?/RB? 3SnW"_g_%?p5>#?QUq%抒l$>x3'fk'ҵ'%< /(b|d?)?4&=rFjyQy2_4# hҵKY/ԷC'yA|g赙1Oxa2歗S&-!T uV-I`2\ɼɊN1R£섖E捷lh*͓XK"[Fy[V8y,f`v,pvC"AuI#U٧H 8#x9;lNf,B~P1ҟY^k{M&/w%ki`'M5j$?>,`+ޚ}qUf{h 1TaJqjWR$w7dd3 .-GMk$^dd`NJԖ5%\pQ3tZ&4޼+c)WVuY8LcL.hٕ)+ٗtč,:ZdZe;2\/MYeMX395ݴpJ'w'$.H0Q@+FV LCpOj:C/FHC [)+y,rS :}F7ջvm$) A$)/mwWvم07O+-2io/Fx[BTszbIMll> W򩿜dƃ K4V^k5]:>_SnC>EkyG9ab-df%wO!rnG ~y%-i~UZHl]=BvIl[[ۋ) a"-ְtxg>] PJR+y!+Q;y*5i?7'!.^MACT#P[*T7VGD(+D\Zvu,.X5ȻH5s9Jd@Iem.UtD/]ؗr-l"C=ϵZGL{Df:m)7[[M&L&p*FWw7#uS~cjy2c s ZbeЋ/ҳdqp ,<2}j$䖃ơgO-r)dP0:Ui!d\q#$~OGrk~Xu? 5J}BD`#e{e=ZM{C3Az|X\GLxS8^'(cjw5h"YٖX1dUb9 `UY$n5M PZ[FgG`2'~X<#O~ETSC4$2DZA+%(z/>FWBOf>YL'q0 ¶_ĩe#\OsJҭ|Du:mB-ʀA9 kYjj]OVlc7%&2;V~袵FI?犵Ș1k?⽢B#&T%x(.(@T5wAyK'5fvd!J (܅\~( U-+bwhZ7\Koz"jr)؛jzy,vlWY04Vlݧ噀w5i3WKж jjwr[YW;4}Bȳ.q!ʍ@1N-7Kd氊ȀO=& SM:Ki#` 拙t2.v-zmlGZbEr}UAR37+ (ܷm=jDo>(!i'k6[Q+RL0;k{fAjlLT|R)jjo5)MdRHd93sҚD䖑Mq}q!v,: [c>җS8ɩenO樋ǵOcHsj$Dc$EfI9Ԑ9\S\- hqӹaXS! ň#pMH<lCKoآ w;ԣ+k*;TS:<)Z1u'wRH؏MNHvΨXـaߚ19KB"G:*PĀhjþ!w?9!HEIvӅ)hƸ*ҬD(L.+>qU;So"G^)1IisԮtVuIR1kCAv]wSL:\wrȼJZI#׵5)tF(U,9oMO0E'~Tn&Y⅐`A&ZrXmzVM(zuq$bI'c*$ۺEI_eV.QPƲ$ #Z<٧fc8kZhc䧽KCfW)JXi4bZ"fA(f"ڔ1qf8YTc]\2ZƦP(NR^#-qzZbNz|6 dEԂ{zVlAo7~կֿgO '(^7D_5ۙ6"*{-4gנlI멭MElFqS[\_56ûjQfS|'Ep9[-x+va6vhmQDiO9#KiZaз5fHö𫫮݄$wի,v="yj:z%>k ־eB^DuޅyƩ܅=GAKDxO\%!HZB?g[5A?xܵ([]ΝIvBXsY7o{V8vW@tvZHIMf \vsc,3N9j'K[X$m%U:fOb7NŎIsRLV$mt٢0.8S~^ !(\=98rƢe&H4ۂ"qǧVHkNTޑ,zM:Pj^eĩT+gL4 XJ<9W|=lJˌm^тH[iR2qp-p}}+Enn}:`dyґQ}Y*dQ dXˉcɈQ2|VmJn<Ś櫭\Ms+M$K99OqF!$ܸ+yQu\crO[orLX-)MɦZ8X)RO=85sXL>d&/ RZYHE!s\c8jz1SFUO#;B'>~ƒJ.#ۂ082yy9hkLIĪ0aLjI=FtN0fn@'j3+ dt7[yY2L˄dշ% s։6cFyG_:U:ikxZLvjdggn].&i%."m0*e ;;> )_8*}+Y #МJM]݌I\N+DxOj½}lL{A!X6淃ceӢV%y52YWjؖU2Ո zU 2di%uvfFKT&P|О⹤wqF{9@ AGE+] CҹNJ(LN6ڪ З J>W'/[ٜՌBԈU@{br:[EfAr%b,@b}j2bM9.HUc# 9Q%-UHé2NC`{R}9@;֕u5[V:x5-qw YtFCKC)#εFyZ =FӨ4>W2ZB4\ٮH 9Q~+>ݡL&79ҩۡIwwpۢnbXn,zGO E-Yf3#jĨ.‘{5BŘKc>f8/`æ)vUG-L`>=y C}b=1Z L:$ϥMukSiPL~HV I[>N?Zi d[gcIFӧl,|R$#*# *yn_sQ^>lԒ K' R{95FBɃDnu{ !=Ib+y#{qW=w6= <%]bC rWTa`gy2]yE\K/֧X՛=h2Wkp\ƚ4V զV@Lg1w2orQ5$Mp&*U;qRA4m!1"4_&Cw0?{i cZc0&$ЊTED֣#oɦ ɕ4d#J)@f=M5φp}ԕ&7# r3 PGf֥;suEHoun\Z' kPӎ)+jtQosh\0"Y(}ӾV> srA$lC.ս,nli^2: u)y6yI ԫW= -K cb:u)lf5'&GpKK^ڝR>oYg9vS-YQŎ08I-n苁1g8QjɲctG#G.x5~} s 7'ϥXf&ٽ$\2"OhOӚ,'\i*;"{KFS^OSOL8ޣiƝ H╺Ԝd*v s&Z+3żB^^.y>d 1lrEKnO<זjG m4J) 2"V@dԔvЌZiDZ>Гܜ 3k&Iv,Ъ\p_mL00{Z{vD2S,2ڏ6%;:c<ظɧdh}䉕 2Uf?/ڐ}Z_ZC$s³\QIeqd -flҩ.3Z<PۮTQۡkWZ)?|TQApʾ63Vq뱯q 96yHUԴr5msNcb2rk{#EҚi.I-ީEwZ]s-ıÆ&m CNa1AY ],l .IIJi2IrȠmNKFsm,}ǁTmw7]i[-NR[e|їPb|JJQFf{洡-<ʄy)*JZA]ϕ̢4٨-l}&>w.ilZID=!Q58e"7X"uORsusë-B[=Q5 o,K* ަvE]Hq"jՑm T($p : ۾Zz+92"VCkv#r{}kG(q*KB=^xcņ9\Vi3*,Lpz ;gt pIFlr:I $Xحrߠa lO22:bh7 ?$8"-4T$r6`MF'w\KMZ͍$u7D#Ub'2Mm{yXfQ>bM"hDu29Y4`m[뇇OQ[^i%[&!?Ӝ4CjU@M ɴgqj=ц5U㎄UOUI7`tV!XcI2sԌ8rcr .ԨI+0zU`K+1k6n#2.r)PضԂf,6:U0p!&#q7mlP2.\1w`!v'tavsb*(5=W:f/{שxZTzl{ L}= J>K]n#iF>/pU2ⴢ_6e'c[ 5xq$Fܩ2{ j9?jV~ i7;a+S*KL4#ē gZnѠ<*~otP6|3W7"CjI?VXGU>E7J6YPq\{n4DG>_8a9"9Ņpy& O:)|K˿%x'( 9N@eܮuC鎵x qA^ k/s˵Puo&ŒM\j*㚍\g$zR%7k +UnZ;C!(mtw+40>`9mvؤV4H 3Q)j\cur5)sHOM;jɲlk`PW杺+; n~4 b ;j NU'>Y\cihQ Kuw Ӷ^@%Lih-d @>.*r^fo_ˊ5SO k’IӓvbRK0d.GjmW#RI㚟 'lRj`ѬdwmYg}zf?PktRm5*Eg]4`QTn2î+&UAV4FщSpUr-I6V9+ fHNrjY/k#lGs7$Jg}<(̙e㮘,Jx"bVV#sGU$^]A*:/@jŴi2=)%]]Ta`|݀p*hLյM z ض u'-Kd+eF uN/6B]Ai]2uZ3B`˵Vj[VV8e&,OQ@{ Õ" 4%KǼkmU{'` =* ZDry8;*WwvR$sht,Kou ›@rkx]l#_YG-)y=dBc:jQ0d=[ 44 IZ:텕>d|u8KPYZ(TnS份K顄{;c; v4^ԫXg o7$Uۋ[v VD0=k|rqPisl4)Lϓz4'M"vV]̗H"G{{W?=3%ޓs78O2F݋^F!EU^Yik$>Wӹmٕ9^iԂWӭ{[BB(҈ Q.RP&H03U4;IZ5#$V0 g&jqv//I+%Veӥ7O ~UJm+{Rg픑cQҰDxQ`3$*V PHTg9 Gn:MPffRG?έʠ긲jjPp{f5TXܮXq]ynlIf̊[޺S$>`ߵM[6T1S-;=#Su;[ꡎ1ȣdb_j( UЎ7 "3&[HDGYkbq7;ֽOΝ5Q\"|gS%ԆN>mܽWͺiEۖ>cߑ-րvOj69ȂJFf<C zYOP4_9mNr2?"A?&ڼ?BWȽ?M›S\~F6~!!TE=M$c<[~a#n OkAW7g&TΤ+8 oxm#]v9/#?طNBݶk2V Ifi(ɏJlե`-%f.ّ0|?ֵ3 ܐEQ_Tة5/dulw̅nx| u vU!_pi.잃hnJHsO# `O]U# o\_F@b*y1R1ҍI+i6Ͻtb{VN:SKh$M,zH= =kkM95Z9E#9UE`{qguxb?3Kyd"j+T1yt{hYcָSF0GPx#nfՐ҄aMFJ#gƦ6zU51 SKBdޣYGk2*ARF;-45ftXMɒC@L>ZKdW{kՋZ;ng+$ds-ƥޥ=n?*~1F=uC@& J̛:W]Trs>n$f=]=s$)&ˌW3· V>=5-lVpZ@CwfD!xpH#{f'r[Ӝ@\$Ԩɪ|*7nXb)YNrj#q$Aބ4$%MY YFz9q$SJKA=" `ҙsޝN-)A=*X.P3v< M+x% 3Y}HݙfN^8zc1س08B RkBL5).xn-fVPL1ҐھıiKf"zց{?CGB#qJָۙ![xi^FWiS!} 4b;2۬G#$ ,f q> ވ9Y.n;mb}cLg5{V΋MuDs"~&5M6Mc00rqlw#Iw 柺GJèéI1z8\UaN]vQ=6itu2R`㔴lB GSRL@+{Jܹ4c $εZ '4ӳu IiwY\-?|wڴzoS6HU$Arm^4R9jc'ZO-+wLҫ^-軵d3.6GmXybOq;l0ojyeAqC!GtgotZHN!i c5N }ttxlI50K%6<g_^Ml0wzTWe[Pj-qe// #t"i [GEV5JNj|)ߞ\6ŀVd4>gi;J-#uݧ[ XV5PvQSSb@sQ] Y k[K%[fy=)Եv"9Lwj7Օa]1n/%ؔMژ pvI]!C{pi4ҹ5r[@C"Bd,.&%@BM*AFIhm,3ʒ8Ep:[LQZCw{>|BH~пLsmg׭c5x\Z^G:球TmFp7cVMhoO[I2H 4XHR7JkfMy4/YcO,j'+#XEH J &U$e\fv{m @$jU:ӳG5SWHRG!wO74# :\i&naxd Q;rO1[y$PJĸX'JIv\c7alI7jHUw~ ;>a·̒Cֱs, '=O5vf;k-˩!4`AY|`╖JdBc;r>yA1ҳdx\ vE6-Qp{_Ah]xq2沚N:Ǣ@&GVnڇUX[VzscJGbr3&1->ԧ^F;PG"̀T{Xޖ6mʸi 6ITrAEN 1\jR#ݱ51FqB}G8ܭpNeaW# jybg1*C tefa b-Qqwc 4w:U(nMcYJ1Rzڽ0%–vӌ՟w4N[2j}BI^͑}=*lNV3 ˮXzJHV604JFiIi-4˜z]I/"^~MpK~j(KHܘ qPfϛrIIq=q0?bqăӓWlOn>,1(|u~A< ǧ*L.BQ f݃]>n?c?V2 =Yك>SVa/Qk(#[?!܌|#E,psˏSF>$1jOMttG:q\8Ċ3VPȩ|Q+xu4=cѕD`^'q;U CzTc}{781+0}ioJ#Ӌz SvG;eG.ǥfr23ZXiNsP=٥gڐ_zf쐜`{hg&$5ŌS!Y6{//l!2۱u#嵒JrzVdq?MkgNU7V5QJWFYۥr w[d5Fv\Fh̽O|Ks.Fe''HvgHzʑ,OSF>"BMXus5i2(5,ɓin,DÚ f#| SKMGH W%]CX(UNfUҹoE2<ۦEX{q21NKmT\SIp{ Cr4 ?LwLs.cC܎g8cڸGs^|IQSZ 2H=iu6Jƭ2!#$t x[hMn+!KD]R'dq\VУҞ .#mkH&Mc j-rv*FNP:/dmFqN"HM:=>' V;8"Hxv?2w,1: W2H$[5\ۭT} -kofۙGaJDՕcxP a.sjtS8+HYٺU6He{5(N XL}xA~GvrY9ۆ$qO-羵XvRxGsB]XoZjz qoԊIj"07zΫJ_PfYy>&$PqXԗTKmInN*\:sV*=47c/4W2 ޕFчN6`WWю(dX,6pAĞTm W-K[7ԯҨj1˶CA^j‹Q̉+xF@'c܅j皴lvK|,9'"IX#j CЛzGmvדHp>\{cïwWdTyy==+"ʱ{w.I2*9*}/c?tKK*XT]&<Xgv{KUf\ nZHEhQpU|%DxcZݜ&|$qRO?m{y*;j*6O,/t,Q܏Koof%}3Z~]勴CyIڤl&&2w+TUŽmA'tgHPn$,(Ll <* dv!=28Z<)#2|)'q7𽗇c(O ޺Hcx-ލ;-MEP3O8ABQY5c: Ә3Q aHR]n^*).`rGLHF+9RI!GE5&Ӭ2 M$\rycӚ|jyxo8y8| $vǷ*֨ .gM(Dp8k1՗?(cOT(x'_Ҕc%t#bcW/c|=Rf'\;<%JA[2_ }FZPn45gz-S-69[''?Ȫ#wř1Vfkhm?^ESҨlmZdopZf# GVUlv+ZGW>Wmj ^Ѿ T+&˄rVzz5JvWq7cEbEcSA ( FjRi65yj+N{Y-A*W~I%ZŪ`)] e{Հ[y@R t=8ˀխ[&LG*KN&+aveʵ6A#4Ȉf߷'-Jr;h!NǥyO +rsѻ  4y2ޫQ;mđyԛJ]EmHg g]Y|bpO[!{;5k]Mlq9I&Cn팃Ce :'Hn"1KsWwIk}Ӿ'gj$Lm}OP(+;Q0qJɃ!9>]J}``1Ҩv s*XxeBQKTun搕=Al,[z)S"MeYG "DѕqŎ: uF\Y ōX?A\lsꥢ=b&HEss9#7spXFֳjtF:R%,թg Ii[j[֨E٦cEN@юYtoEqԗbe9#W-rC09xoIle (wF=Z5cTF iύub8Zeq#A{. _9 $︰\UdW$72(y1DA`vg s t"N[@g.z+zٞ=CHqnXnqº{–yTWIJ2Rn,fN2hqƛ4(R!D}ɪ$E4c .d(g~8mbVii6pfSICom5ʖI5=RRaeI:Im^YhRCs\ɵcVJDԑ ʬA]ˢr7f2TٴcRg]f)\DSE-[ڇ2:tpKėX?N;R{nkt 8_Z}=e1pSz{NFK. CR|(ԡTECH՚cѭMh{s=š?;l|s=>]k$1܌>k1;"ä_&V^v3ޥi]u*J>T:|3 J-"*죡}Z, /jZ"4#@PKznoƺ6I$h$ޫq^FG *H#;VO٦σ9/Z7l8klP=B^ Hیv<{TΘ1.0j]ztgRN'EJ5еX)۱ȥ^~ %z 8$8V*>gMwE8"E^Kc\οhfXZrZhXkIn7rgSH*zFWѐJ񨦻.pH%kܒ2[Ip|f->Fr4 N832lXVG3okO{}FTq:ֽR\Hľc嶉P#99kAKZGc jZ:~s 1"]cni|aہZ;/* XNY%1 /vV`xUf3Һu΢>џAk= ,ulﭔnZcFO{;{e Oz 6 dY]3d+ `wp b Vb:Uh;5=|6-HO`O[P.U gfFrbFNn:J越:,ֹք9ZZ]LN >g>c~UakVxB_>w==*jL)sZSu{%LVV&_ +WYE&PdgeIlUL>Bg}r'"HR+|nf㤰bxZ\&V5<%Ȯ {P $nrC WlݞMfov;cpMzNVP[DVL ެ؎[hEl Y3*Ă؇zSYDmrp=[OAT:rx8Ae 9Zb#7i7GO&O՟~;iߜtrj ^|kjWƚ7?ث>'k:-?YC蔭ZD+?RF4( H>q]S%m@Hڸk‹)|mT ⮋JA ?{$ErI.]NzUMaXc O+b<b93=M>1&ZV|E#dcӁ[_~L{槍YÍ zkK@At[Fkz}Y*cَOye]ViK_f΢?Kf?s^Ū>LW̞%A MTbKH l͘/0e@ɢ[R*+ߑwctVz/7^>o_UMX%/?%@wOpaQNHV >X ٱVd֌עg;.vElg2h||<:<Πd2G֪1C&}뎢;+J$(Ohؠ jcD QM =Ò2ȹ33cS} +`I+$^[u}l ?-@/͒i۩բ6 1l& ۯ5~wV屗D`8r1\h$r䬇?JXճ$ᓨ;U(!VԭoKx Y<خ>,d I#SA~ :=UH9+VVZ-آGcjBv,dzhɀ0=cڹJDhUw" zSnrE-KD|no!WM-®Q&c„i"6f )P(`$۶7v9UjXJErI6*(CZdd,xN-4:]62ty'$g>r(F\zpDȄ7jSZ"pz0Zf99SR{= R(ڐCa?+0I% {0{Uyysqr'u50M;FҳٚJ.Eo3Y}MoqibQYs${7hD3jt$nU5fFW@c`ޔ^pwmiV AN݃FE82*:3pRJb!ff)+)]W5PF1z]0򾾕[6$)rzⅡ6ORbY=:ry\y}lXRFxKI ^~c-vR;cS(Z<[Z0鞕uF(P3׷֍N~tޢZo_46Ȋ˷<<ΟjR9FvbxաDhO5֒Jr1H=Զv77g.Xn\Fhۼ^$c\Un<5fFE[Oޭr9>tf`EZߋ|\g-R`w(v1Co%A[TխhG8e\IF8Ux$'޴Rr 5ګZIJB*?ue,!0N8ǵT%47%aٹF&k1op&%P:ƴ@fKyb\ɰ!iQ)֚2w[nM(˻P$zzVuom&G}`'QmH8iV1jͩO~Xȏս+RNTẠ5}MiY4]jXIh0n3PoF#뙶|u5/ !Ϝ[zd-Ut*V6CEiG$%,;dRhbKi`>uCcI=ɦ{,Ɖ6(;+Tom3 +"z[UNIDkMX(92Maӎ$̤9ufdnTdmlrjϵ >˲yy&d{V5beJ{\Y^I#Wf݈Px$t_zfmhxi1QA$׹.b\z + >ͮ|?[#8r:ph馦rjDD<T7RWI'^Ϗ *"S>8}M^G+}Qsϯ*k/Vg- Egnco0;X: -|l>9?ھ&'I1Zʏɋx`ۓ]Oe.M7lNqn?/J?%5}2]=?k9Dc[sl ~DtԳ%! {)#NrR̦?c%[9b|䃝GUkd$3>#TW>^FYSI!WB&$➀zM., \+qleMV߆P?aSW~LoCe tb02ա xR2==4-M-&0GO5彌`$@ϥK7#1~qL35i.'Gid,ǯy'b0w,)қ<I#$b'g&fIIۃRZs&ҹ$N;&IޛI{3Fʅ\xT,>@OF# 219LDg719nQ)k2`=4ˋk! ֡63EwP;M 8$p8&. OE57v;2ASkiUM\Tڹ⧆XXcMsY+NYqknr2}[2tW pV}.;€}RԔ,!`:[K81?FT;3-bĀTo.#u5F=KEpe8\4- {gPŷE_Hd' ֮6-2#?[fycZ4bԺP)£3ҳe+^ŇoEWPPF Q8*]&܄ #UP S%@.'H*I}JsjŭBm7r|mGoz d^JOQIiecC^ӠtY'ҫ}-7Koev`7N;Rw)'$otnwWrX,CiiTM%}KRm2"S hiZF[cڕ2<]udGd"~aƺIX,Zg8b=M/N{qnhd/2y3Sw`#0ce>Xqk_K#q:'i(p4f|.0|kRQ}S79hm jtlx2!ZhDp2M+ $Oão:G{tO=NEVr@Z=HuK_wۮV{eT$]6/w^Lz?P=j|ck]5QwsάTb{V$ 6<%ߘ:RKM/L8&e9ÄϮ*pVȭM:i10F=)bA4v-ȡ{- ^A,'X;p*Bd0 KwԵa.t+v{U$e,Uf];JzߍO8{|A]ĝn:lQ} d&bM]LXjуb ŊGF[n`jLc2]J}ileThԆw+QUt|?լC-|SЎ[jzOxxdeQ^!|5_@EF87E>|/ BK;6V!w fEyٞ)AJ%?38'c;]i<ض:KI\CsI.($f(n楶F=F8.U{4Q[jdӹx@\^+떂S;J4 X[k,1 ?eRi˓Dk۸p?OtK+Q3+yi?k(iʂl$Ht`<*1>.[3Bʹq4vRgƟk c'+ԑ‘+Ѕ~UcT%6G]% x~Q^ZOp&TqYU)4aоR~BɞQТR~ k;04{Gtq3tW1jN|eJM :]R"KtѶCg'һqiU!2CZU囵= :\WхIܕH8?r:?.5 NLyg+|ۭBFpm'/TX5q;8/[klK]'v"oi3f€Uj;O 䞠v\}ۓvy>V 7MTb+6J1QkZ (U2ʺM&o1'ԑZj&Sѥg17ȥg͏8nV|φu-=QB}T7 ǡ-EF^ h}H b}Hw |\+T;vfæ5=ј%h~rq5k} >,];Z稣G )stg=4wl^Տ-2[&<~t\cɴ)^[`cuhEG$v Ê+dKrƠ"dUW+\crTÜSV_^*%cuU*:bC#K#B5CS{"?-"J(Q1ZF# p OQȺ$y֩^V'pG1[\']YQл$\U =)O@gNTd7C5{2qިZq;pJOUB-WQ~/+X,^׷k~M𽤚x(8<{8qmxAx.ͣ@h+SxRHc c|ⶎL,ߏc=>s]&1OP;vM摟;0?R!Y1:1.qۚ#JW"St(A,?5,^BH{0[Tj}K9Qf{3kv:h/grwy l37U伂_㜏i3uNyD 6\/#'$v uY>'nB U>܊^T؉k?ٶ*+_]m#80>՜UMy6/+VD |,%sU[oO03g=vg2Bٹ=Q?-|l?5&+V)/0HO5K3gE| _gxE3 SGDa+H9zwKHyךe%su1M|=@_T#>b?\KV%GVx?]'npzV]fxag\}Z÷Smv{#)zE:mN=ȩx \czJR-5KC[qsuT#=K,yUsZ[҄oQ4|Go1 v&X!0G<ח-[:*;ɱ6c G TԖBA”f wjM44TGoޮ=T檖*2FGMsFXܓ+K5e~$ =kCXX2o 㱧&^gdg"٪ ;6p)H˷>fS[1[Xh2/T% }+6Iec#}RFk.d̞o\sBq3J!~ rdGvedR=xUReb n#9GVBI;|֎A{ٴ{8)sJ-֌m,E`ysҭBcyUdj(ѱmRfWB/ozA:dJ-+3!X題}Τȉ ⽶."JpsޣY5fr@_RԥcvSHyKNwV!v`yqr7R59P4p wT.-jRtw6o̚@5rwm*ô`}(H];[W/4cy'vrݥ+" hW)k3Cgy4dQf\J[lcU̒V4|Ox²[Yk0ZZZ7iszW%Ac<*4{FLPagj3_O%έaKtC$k"k亚 |f?3{Q6o6 X4p/R=MWmAօH|ѝZw%ޫ3jr+ē# q}OE2=C\'EI^REj*J!I$ z}>(^Kl؊8WZt)`og:kIw:~ךj˦irٸvBѲzUjZdM$|ˡ]V\<e9Muq_߻Ck#pOW FEզ}dq޳{=Ɯ<_p՛8 lS1-d{p{ǽO_h伒EaZRVi4X[>ohHa5vVt]Ԭ_ikM阧>%iN[v9Y#\5mQцNfrIYI! FIf:ODX,yks d{Ddˑb9 qXs4νul(, ð &V)ZŨDž w'҆ܨOV;$"ՎXHǢȮkϞ6/nimm D8iv*x^yZ#Jfس/͞;Uvq "JX¾HFp++'9J@#Qr[8fdp.08隤5` Nv(pjM݆8̻;/ZQ؜E@hcvB$/OZ #. GbI@B 9r\KIfq A_7:k{}kC{Xz*rgc.RTw3NICчrNIu^>6 R%CW*l򢬤]#)&!~1Lwrl5m£HqiƟ\$*G9a]ONqywN?AXvAV00+zZG+Hch@$1R ҙrbwSD~75Uu#w*W \KrwEf:Η^^y/P~hRIqXyZ2o(E* U_6/qs:U *w|P!pB %_BRnjk7WRռИF5-P 8.b[x+"dϥZiS"^9`NU=F)I$Td$Dt%`{L׺zQ5#;.DF:ckK8cX[Gqc,<咳d7[skV|+6E佥]^Иܭ.=ĂWM8SƎXlCI\jF,:(o,s]?Іe{K%M:i|peq DٖDO/^1V-F2ɡl4vqvR=k6HmjU+;ْEchx3g慫ԴN!ueV03eH؉w"!)Xkg#5gC$C$׻~.ՅXIJzOn^[PŇ\tخ}6}]䑸ONC*kI"in[`mfvNMRMf<}IU^8؆^h3!u墔IZQS4=r*z!q%;3NC9I&K h|}޴%Dl2urR-JfoF,V&T@:NEt@bx+zdwDJˀ3ҝ n?Gծ2e c3Һ_vZ{0+}g8ӧie[kzm[ZèS1n?)DۀUk(&U4j4>BFL## q-+ 4rZ?V`Bƭ3hc4)'.b P%Ϥ]۰R2:973:)n.<+֦nq+H5KLwU- mmZY,é;BЙշDHkty{^[O{y< v|iBwmmxYĺe-q۵@銖y5i pZA#1ɡv*jׅlfk_EUj䧺R!_AޤofI{&ms6m[;!r3Ѣjr7g6D ='>Sɦ-(MwWmmN1ok"yYv //vN- 8X`;UyP%TBkHF5~8^m+Ouk<•*=;Wu Oqua A=_)ԂI3G&J-BMB"A>Q̃5ܛ*yɑR(0 X8R:Z\X "&_qXm%ƣ_J!12: &62Msx #ɫDCz-(-a-n/5"V'AMwhTΣRXO.=+',z{-"+H\y)u ;6sVA4W MZrIBȚ+K$X9\`ZwǥX<oA¤Mivp֛jl~[-C+oBFPQ n:ƕ65jKX=+?$~ֱ;aogqe#B#ȒPA[ww/szⒹVm˔͊+=W ,]kHdAֽ7T?%.]p8q+R>zr?V8cߚ} R,{x?CTIx L>xl0'8ph[Ud"@7,2135A.0Ŵz|4ʊc|=AYD?w<=ڭ>i^[6|z8gC֮R?سմRwk15_g9hSTF 3Fn5JV"}9{MD`֖5<'[_]0(ʠcpqf:ȭ9"M݂e'juY6b}eHV.Yz T|E$v#bU :$K9X!-|m<@R)!F_SC[~1t-e6̨Q5OFMv ~Fx]L~+^|_uW wu4ٟ]?2_gix~ ?-jM8hx~PS($!_ KjJd( kN<=R&, zm}Izlbk u Ԯ+w+-?VQTG9o&i]1ډLKPIr&,1u {6IWi֠.Hj$7WkB藂>{k%sڳ^BW9SRm8߁j\㧵$Z8ǥ9(5pDNv)Nww9" "i}B. }/ HV"T0\qi;;}j4wQjh%%*8_JLiV1''c?uޕdR!Mj]Gzғmy3ؤe*snâckJQ}A!u_㐪ܝ7Wya#ơd5ZZݚLnFvax4y˷#5z2Q$7Q*2rHzI][IhWw+1-+)nk})MFgΖŽM횞"rOJ"-} k]VKrǩ]j#WU+>IFWE/=יiƋqlOmݍ]Oю8nGڛ +H- "s ݜT=Փ!/8}@_œA7u- R2XҶqu Y_R:VvNK +Zy,"}n[LdA# )㚥 Mu.N3It`Emohe]ˬV㠪+ȓg dAmƤlRVԈl[XqFzP\iR:}2,S 1Ȧa'ieF@SQ // ;j>f֤uE '[]@t>}ՙ 5wJYecʆ}&o{C5 @,KFy_|*sx!g@m^U$J^ZBӾO˘jNL9]ě-,%v/6Čc/KE{jL<&aaޙ_(LDl-zԿܱ3Ą>J7<wR}hDW܄`y.U2A nmBŹ4Hs-K!U؄SWb+!` ;zM͐Z-pڣt.Vz{=K-o;$> >T2)uXBO"|t1s3#&¯9"fyb:Re]+5yv]1A8#Zl8gs<5%Zp8WO=7rJQw.^ehYe 8J4héTZGkHUߵJF22xXv.Z oyF:OE mcKH\v:+M;ViF w>Օ* ^[ZW1lȢh6i}b\g/b\s[piqOe .Oz}鶒mL #AdA}igkvqhpsoYDSY{MKy,]2M?"6v/j\|QGZ 38 Rޛ&1#/s9-N^Qy#gB@mDE6"v&-䖲\Btn>z$9*.0:ZReA.es=}[YJ.8WO_ZO sPuC$ˉs|6G_;ݣa'֍&P> AZuH5'u+YЯRҦd~t ޹MZ^ʮŊ]Ѷ#0+qj>F\'#6{(@jښtf Xd8ʪO5zim O$ko| 宮z8YrٚK}"HK<ɸǥa-Xw,KvլR!{ b@]8اw,Tm՜41O_ZQI/GZű̍ᏵtV5nᢊq\ڹ}nttw%{u!1MdA$2Ei\y¾5NSКj<Ə5 %YyPC5)B8>[<ʸT:;wg 6ҙ$|(b69uZd$*ڑ5mX^YP-huc+F ԮMJƤkZM$i~tzd̪ usMY6-cͼJc5\ypI&9Mktp6&αjlrll6Wڟ7LEz0r=q]ucw#TibE!@9$dޠ&sI:KKY5Kn3]LPœG9<\ʳ3EY3 Qw@cSkedM7"8\r»{M2V,~UN9Յ2Kdڹk}kn\aA5Ԙ5-(zqVIx$2d8T$$*hcjrC* s:sطј.IV8cӍp9V$dl|$ @&ęQl.v iJe󬫫v40I# !9$vORԥO6"07gvPyجRlz7gfrՀ':^=>#i$̓M{tkXIuC }c8~BsZOs*+yEpRБAO R,&XҀelw3\_REz0s#*17gGgMjKe5v&G_ J %F,RL\\?aX.,,慥Z"ox(؀\YzY7UB#EbI'ܩ>Yȶ4/jUe̽j[i* RFk9^`BO8nӅO'ZT'Dm`dctG'-sk9<|˓ 䉊)檣+&?deCyP b#٦q \@ <(v+|C.O^+ M{)xf!}v#`,p6QW?t(R2xi;7W ǡ㚥Zwќ_\v5ۀEbSEGr>xTe?.EIni˘}ge7S&T\ " KG?@XqG!|rc9OОŒyxK&ǥ?Xal=|,zTx:\c)o3OuJ IAh BU+[巇{ m 1/@`xO7>n"f= V(eku>U F0{y rܑOBn,ǏztΒDPWi_] R. "F# \GnYr@[a`.tevljv:zecb2d[^2w#4!w{I yy _q_RVmʁYR"^I=[ -lcFcGZ̷J}kMLiQd`%=m]iu}Vl$ਧ(gJ.[KR O YIB q?TJNGAJ@ng$@r 91vzԌF$fىNOj\fE$[, [U_R^Vm]${U|˥5RvdbHǷY4ANNiXTvE5xUGbۚ.J=KM)ΠJ;A,^\:`Vf0otqzdž-nv8:Oي\DT6#Ft?05jDd#*R8 2,[ bA>;LR;jMiP3H"O5I '";1KE60 ۗG7 1qv3#)棊V*6MZ `kٛT:!H,;T[Իh""TR֗Iv׭":[b[< |t5n E)\@>X{qZX+mdP[C;ȸ+{[,K!k6͆&ҪWRQ6lO<6 Ԍ>_w&!J̧kbh䴍4T9RWj$I6a~ 7^ NZ%ja9Pb|3 an;V^Hn;nk=k21SίFsvLIʕo~r|)nIh7^eh݆wYMsYf<8"#aIX)ݝ )\$W9aGy$7E~PؿwbFHa̭櫬qMl#:XP$2irp[tVl!DDaZ YZ0iFM̚YOyĠdUr/+C9.$mܷZqZKg`ך/y"gaJ񸎕t,~и1ݼ;:[Ω6ֲ/t&&ZCfhp pƮ}.KqD_Ƹ7mq$lĎKSbSnɚ1N4k,}^M:Oo,F(پa}Mo#^ږ!Y\um|f'd}zI%#v?{ުJM&ya.j^2OF$_Sޝ>Y`n7u_`X]5%;0:]##:t;\to G[$J<=u)tm\JXSnM>OI0{! }+Ֆ1Kb8Hm]jRQ/U/L;!%L×砧YMŪMfI>U(WCj] yBM;CڪG+:.7amlg&/j>#fh,#LA浮AKqȎAj׽]A鲤2TdGz{M2B-ks![mQ$]'lmo=?UWdU h8gZCtIsֽÚց),u{{L@ӺVSTQé#(eS&֌ErZCk<"G-\$VSWWG/ 5p隟S[l ^YNH> sG$y/]lX99 Du䴶.OA+T([Df-+5Wf.V$W%cHy3VU9;dVЯ"nm$.6_mF zzirіY, Z$sxV&o +c#n9cY-$w:&m`69ǹ:y_12pGv<#SnDW} 88\~iA;#ԎՍMκ qx'klap0 zTd '#(̏`c)=+2'lChLl1sҽKͪS]ֆj[\ټVwp[C]g?Uj[*IHdq{9bPx5jzs͏Ҷ:/qK:g͒1cՍdidP;9Mhk7POgҠjp֢oVu8lPe;'X3C|-9=(GHj2yA6\xZXգ-@78wPo7Ȼ1dNc1~>A7O.؏ViI%}3ZҴ4jx?Ie&^۫[V=LT=aI[/F_1Y&?LS<۬s5ۜ(~bE >&߿a;&Rzz[D= גGN&}dkŶOy?\ Koމ_j_R*8:bjʺ.A nYdxFd,V/0-??CuRTx'ZP1kb_c.kggI86Wךg3@GI6aQ2ցvYl:gA-F6cJVqSZ-pE;{*Τ;UPr*Zr` b6[jGkup6n b[\[iUjܣH MiI NjSzq\B G\m3"%z}tr(aMF+ǵ)c 7cx ۟*o,a ݕbjߐ ׭3GӳЌ)_*Qz5A E&Yi,8[m"I[E$|>zFdc,%V#Ҳc84[e1-WgeP֖(Ql)s RZU֓DNM=p3+kxtʛmjfz8u$W(RTRc.Bd،'jTg]$b]n8GQOyWLv)p84[Кf%(28sZv%y\V } VdA$NŞNoEs 9H_Vk"F,VDn-bT=c>XWgӵFˊE =)pÚV.7\ēl8Z}qZ4{ YZ<7dF.MKdwI>Y{ 3-r@*:1X2 ȬhP-InoQG{ u6ר%YIJӖjKU}ݘTJAbGxcMtK*y˵ >nLak.c7,S$CJ$lV=z'014rLV?A8) `d1]K̷0+Py^ AzѨ[MM-D( c.=-@ A6ZђF:vm} eJfU;Hd)"xB&Ɉ+74˟1T>\5khbǐ*ƥM)#"2R3b{@ dmަ:L[UZIVvf'4B'.ir\GGSLlⶔrZNWv3!Q)L(YF˦Fq$k ,n/hUc7)Һ, 2*>>mAl |\ ^=u71LeWo?:) tb*^Ifwzyy5h8'ꦇo@,Wlc,9i< cZhnmmޝړzh+o^Ke[6FS]$3KeHm;2akYF8 BEx 66ԕkXYm [Z2DysjrE iIs h 1Pw'*YŦ\Hn$ݶ7\)_]ncАpngpvִ"ZxnZ*`KJg0df\Χ4B;CI9j}UJBSY6Wwk#O c:U,:pԏuW\t&M!]G_ϱP 5 A*7J7=GZqw[/ Ms×u̩Y8}GҹH[ɦHY?0dσn6[WiCWw=Ezx[ƛc K8#(/K4etx w=jH6q* uQB+ ̹4ydN[8myr(IPQt:{fL&s\"}0kxZ6T,Gaſ Z&~Ɵ爵]cÞ06710te\C~SZSacc]uyd}pZ@R `xF ||,> Ҩ-$Ue4%^8G&izA$+\[#5 ,H KC9W*>V^hw"MiArڼ#l8-]."۰`tI9;yܟ_bHc;GqX:LJbL|0LcOuQ%}zFfz]sZbS2|'<]+]HX_ȱC]#ڲ-o j:ėFy9+ GPݬeKf ^Ct?u y9a]bHZ8g+6J4Y&\&2KwẀ';7I{v)g?ZRwĨ[{֝:40sqV{O6=8P`U3'{\v兼{힕ol.r3뾛naiTԭpw0 ^9⫁}Z 6NsߥsֻK[D-0r9^k#f! U@1[ᮮN:Q1J8tm-`~%/;>Jm秿O5^daT\,2kxr@cƍBXdRHSr0~ ܊:8<6_hg;(ͥA? 5f$[=FG9hPTc3/I ;{?#DUe#*u>1@'M E9sB/0Kʭv0lc+m <^N^IgOXvvHUBkn/VѲ>ul>/cF7LHOׁY~-oGn#}_ T IV}Zdֺ=o~{)$:0o)A8HS2{ُ);cVggo 1)K\D} {6tGbc ڻWPQ(xeJ3XUO,k;2xj!?JHQc|:@/vgiC'? N8 YtZFIɜ fO+;FO6DQ `VJb8]wHQy#lx^}("cfkY/괞M\ + OĽ  :IR#@:sz+ЛNGW0)','\Öfԋ?~8,?RA6SGO"?t^.lxre{zȭEd\7'kבB2]3d]B;}SDxOꚣ#QtW״ GaGzWOĿC'&u xnEsE8hxԹ|q2mKKf@V'S &Li|KЕJn.]6b8YI-Q)ItV⮯^*n~1cbU ="~BWRS :9y7C[(<'#RTO&4|NI**<5{h$PA'V1ch9>#G,<zI'>-Aa#>bs',{մ'[XvO`qZڢsp9ܿ *Fi;ޣ`/j=nZV"ɂ>G7hA `6h#lЕ+։{!tvVMmH{ZFime%Ա.2V&ښ}j8'p\)Q+W)LsBݓWmod*)+NYxqդN$Zlѕlް.HM6ӿ@Z-N{P^;Tlh/4mrV* )i.\,a<ޓTT|UX-=jFEsڎ=DxEEΑbe3]3ڴ?}5fT'(;hZ<:m~撧5;(j~.2 =Ϸ~c_jZ[YxS_hړȦ)_J˙6wSIY#բkt%0Aݸc+3;#O@23qV/Up+jG`JԾͺJ'9Josڋ؋&bB+="AЁMn48{*d,8${Tfiͭb0q{RmGsFi n8OA.x0oPu!2ls: G:HW ]VXr*Mݶ◌mosޔ$ bG0(H^qڅ,C.pz#dRcK]\s1Y{ *G(fN̹\Key5zM)f ^[gsIzXʉb:M5 6͔CY휳ďzܘ֞\ČϭeB)gpOJQamIͦZHHķ/uXfX ֪1;H\.ى*8 Ԝm]YdȻ)1WF4ޚYQ 9lթyumy6,`#H+be <@R[IKIxq6Ua=ҴƀF uՒE|#J-_WU,2DDlq3{|EiW]tӔ9lo\t/VKnҪBZ@zvz-Ժ]opIP*M2cMq+Եcne-5 4j\+ +dϠZ鮫v)fo}*ծ+!jwqjPG8[\ISZ_:/;B"6%5PIYnV{M}Mԧ.e講<1;;}BW6X *ޢ_iFmQ|)Gcڪ%5[W5wFs"Ķז;)&V|LulK&XX->ZĹb1z4c d`U8~+GtZ8ށ[Ev9@#RpִyrjSZl:m$pN\̣wnebIЁQZdœ"V jP{4qT'UdPwL trAQPJNPm#ZFrGU*YoOg2Fz]$-)4E{=1FrⲖs*rdy/.]*'4mHjyXiilg.}+KE&e^Y+鏪YL$k6w{ ;$=X]5il.G<޵KP_[$ o\h油Em-H87j&hvfe( 2h|!i,ǎ+c3"rTztcH󹔪QM0FR"g7Jfjz5o ?}9W:&*gYssl\)`/6ʯo@RM݋ Z}nqjDuh.ݸq46zս,9F{JJEqMH;gK^U[w"E( kd8S|FOc7\!++P F^>QjݎՂ\gA'G[h繮j7xYf|aV=mrO"5Ti擋t+r0p3U^ `gU#+]wesJeЀ bZImeX'T$.;Lds&w w0C]`DXAv+yȹcASWdX j96*#v%ė.0?x|Wݖ$|IP}O3]E[;;uU4o݈Tx=M}7 t/5N+\-v+)Ci:ZZI7RcqFѴMՒ)av5ȹNIC bqi۬/s۴$v5ֆ I3W> 9GAu~4=v])EHЩ#!}rE{xr_w"K /mn/·xw6md stW,?SWnh!OHӡa}2{p o|ACPf֚'+ LFP-)EO6Fbހ(i5"H<`jZñi'ysz/&P9sFd'ILxC i23Ҷ[ [o[:s!?#y܎U JW+[o~7džF.8?X vO<+J(9X?|Wrl֥ Y~qc{aڛ:WxRrڑk fZ_4LQOc/ q z?Z6>G{¢; _FtX3#,Mo0-㋽N<)5Nāokb_ucLJ/3Mܩ.XV/SY|q30Vģ$(|#θ〈?5=_~.9H@T-3(彃s }Z KШPZ5:S@lCG.Ue!A{Sme6 7Ӯ+@Y*Hqb%ȭ&mq 0É ; jekS,h ܝ;jǕ*3^gp3)#|%_/#m$8`[=j/mq?n0)\:{#XID}BhaR8Pbbg4dq l2qLq&xÌ⡍Y: nD$efd `rifiaRN㵵D*=N _Jz\ZXjWRK1EG q]ⵄ.B*fڻW=: 3߽ej^Fio8]KKH:DtniW!#VׇߩBXjKMPsVۉ# d=*YYV?B ,TtV+k&F: 'Q'җ] ՏBsZ3qҩ렓hÒH؆m&bCRA5w_-@CFv*lQi\9C_Z$itTZT;NJ]15 P#r4d;&k.P0N l`ԔRHHsZ, U}Fg,[rp\K<6%}H}6wlDH`xX nXcN"[Cu >qH灚}m|}sitgj6v,/i>p袭ZQ#){!VN !Q Šp:ӥIZ Yy,k$ombFkVvuYS-`לdV^U $=(Ugh`;cjukٶ[Ƹ'?ʲOu"%r~5Xb8"%T[;oɂŴkKܛ-xg=F&_9  y5v;+9T."[siYwHuY.by; 6Oܦ&=KՄhΈRwL]LKf;oet8]-!q>ĂYi $9W4FQsҜznX>cNR bAH!-~5+r7gxSm7YX$ FpWxREx1I$ 9*泗sG%Cɪi ;4*9Iަ֋EjiOSq,:w贸mѦqu|ɒɶ/OKq%+>o1i- ri./5JAԠD!\6߭G\E%hy*ۂ&V4jTmϤw,+ )y(1𪗳iEmiiH2JGJ;K5[*/-dhrMh4Q_ 9n'4fûQ]$v?gy=RkbSWf ծ}-$rU}F}+G/[I+2mpHZC$< `{]=^Ì-i(heN0k{%㟆P\,MFtRm.)P}ﴚ]64UQ-fέO*j) g|Ӏ3Ns'Jb#< RA<2Ef=. L"elg 95k'kt1Ym 75KbW2͞XI}ӽP I^*:"G2ddJd~h=2*톍OG1i.-3:D9B=o$dꚴX'$3)w \''F`=[hуWeR'SQr>'fBv>:Ōªr6ZZ}GŚ.0饓=(|Y2Id#zU'wc5}~i$$nY{1N 499-4o5' uOdy9% : B}+dԤ+d=s~K̹?z&|b}cA{5R-O O<{]]:tEuș_/VB/te[>&2`G^NA z)>Wcoq>DH?\դ QY}X %鑁?Z<2gakER@˶r4b(X1f9QHz3G G@c7=JL,r8|r@񦎮)1V/~GgFv^>d|vʹ^/Cȇ6UFQe$ o?zR{/C6Ngo/I?1n8\"c/SGž$RV=nTz|1 9V%/BS ,|`[{s\ׇwu1~JwYGTccK [!8Fvߊߵ|#br =KO(: T6 'LC~w~FW/p\ 1xNL}W=?Rk: n 3oO,[o-l0Ec&Xq]bKFq[ ;stUx)Τa% +61$-'JKķ_m2W|Q=C6E&ӡ%ǚʫzXi6xQv{UyPWb$D?WD`գ9AXzI _Q $S*.ȑfI$bBf1_=U٥fզӉ@B׿Yޙbs(zp]YHַu b^ݢCeUJbo0G5%bȂ&iV#Ү>d}JdjQ]4xDz<ەly&I@CfMoT|ֲC4؄LW84aDr 2vd*6VPgb W]")ʳ˞*W@)к#m<4r7Ll]"$>¶-nƛ)%}N.hA^+w~3j";MZ`|ݱ^i0>fskWb͢yybyl@ 5r)ry<)iOrH>U<ոx=*R'McBCr?:.eK:˵o1R"qL=TGf\P90ԁNVqQ"Խw."Ya9dkāWÅ#94@hU`yR6ЈVGP0o?3M.ǗG'3%dg§X 2ùi- 1HIp[C|N2sI%FVX|x^h,⯚8jkX gh7+YrMkrX[_R8g=-~@)b(Tbr9څާCv.d:txfkv&{CaD#  i+5fd3ԢV%F .VpA*"մc-A$'kɭn[eazU' di zo! "qIjUM!cW=5ln Sq+=MP2C2)Z?]ԆTLcG2hI뱣w-ɑXT* V}̒5Gs\H$kQjb=V;G26 ^My ibxΜ,um0q* _=@-i64)/3ӤF7c*A4Vr¡m6sHU Ҳng|cleOpO'3(FH'53>I It#2H]tkTӭ|Z$Z:?xJ6Vr嚺⣡{9YN8v5}WW@0|w5~X#=MPw3Z=\>p}jЋA!H^G@kg fVնZ*y54/jjr[h< `0zsꚤuN1;,o kףgV}7gᕑöPު7I8~޼[uTe GGҹBinxq35\5KsM ] M'עukM1{o˫x&OTF+х<ǡ"Kn d=+3Z:lW}=D͠27Ȣ[J{? Kj2m#Kfx= bNޥ'֔ΗAǸ1%W#ª|7t\Hif tX6-z̦?.qHGm/BZGF^GsA;X|mab*8Sʌ6T[5<5lh=Bĭ)_x\ᦌjī++!-$oy~D=mm'˷q+afz^ `5O*߈jinèa3jߩ@Qұ>|?uڛ#^+ԷH"`W|x7x`UF)z!-y> ] Ӳs?+P81Gިm~"iDy?A]_ǃȲQ/ԵGrIģU ֖1tG^Rxx^#1XconIc:V4fv?RY ?U>iEh? [hs'c!:׍o %bVNoY|> ;JV1i*c?ta+SP*dm%0q¾,n|CkZ k.YJjʼwaQ)d>RA9^j?XXCs؊eU%T{_IjGQ3VJ B;Q$X`ڣ2z{S%R\pCp+֡UQv9eKR ѲOaVa^٧2 ê)츦ee] Vf1+c"t-RV\e݈қfǔxbnnFs;U'5Ѱg$q3Db/ԋkrܻSЖIGSUL%ikM1BnF13K=HM23p=3 G^M+ $PpqNYIȨH9nEpb+BIZ%4a T'1FטMjC `Xބܺwmʈ6yqYp:G2crkBZXQPTʪP3Xj]Ђ[:f=ll'c֡gkzVJgfz>I:|pEPΙ~˔PRmvPrɮ"EHU76D0k 61֦{1@R);.(b=%%2Wp}gO儅/wZdc=XHAR1f\S#4 u:){i5^3޴wM+H6ӚPܵocTIu=)/=D##daS@qIm%@PVĦPŚmbF֝5 { N4y2~_JIXX`K2 1zקx^Emnc7Ҵz&uQۤڜ<^r9)3o&GYt&,-\p,)$ָMqyyrx2硨li;.iQ\mOZC&qwyqĻ#W>/SWs`iۇpһox6 _k1ʎeozqO+ B^1mbKx`NVMP\7N" @=G;SKk h6qĎYw5 }ȃaQ{ Oc[8"Օ}E-=v$TZ6 ,[[=^xCq(ުb/~iQ!T$<Gī(D7P C⛒c8hEu,ʹkG1pmBبnkz1iq%9̓1ϭc$tovtqP6v*jwJ+MLk-.NcNV$S=D3`Rn/-1Cұi'-AgYF7X_P̹EE}k nP du{7L9ɬ;(:{JpIQW،ȤXAhk7wS#xBG\gB)9=ӹ`T9}p8\:ѕcs͞(=u1[B (BtT{{١d(۲w+V06~YGŽ0+/3YK!$cQTi)<Jf 6Wawv+p1-- `ҝMTV2QEτZ%~!&W<."I0T\rKj}+Ɲkċ=˴1pxsɯ^m>z N#^S 'zZ'{ wT#FIdf/ sq#0iSRu>r&eB͖[}zO^T܉há#|fzwcqҹ"~=j̧|:+=0 \>jWx,{:қ>(]_Rq sȧJG9Đzا/ |^\Y _w$BsEs;6F5h+IxxEUFs5ҿC7jxp$97EOO2;J8kY-h_F1dzMs} Kܩ.#ؔ=zb)>"-o+[K`~B>n/Ǹ)R^E;StXnܿаS-XP87/<@z%Hۢ$Q8!>qҲtyB`z܍: >Bp-0 > oy@sqJ؝ɥS8 n%N;~U |eP"Ʊ-7.w87TJRZug~5m~mddE"/},FbFTvIv7RđPȣ<0i^ :HAxn㚵sINaRqZvW::e}i}ʲyjr\311R9N*bSW JiXn tZ͖Mp ݻUⱉ,kWoYջ9~#wkZjZr>•{cA+8#I _r;C E6VAx=ib$IܭkӼDT>eEtlOL?4OM mfI-Qžu=Й z >s}ibḱ) =f2GO4 w=*UrH=).%}mJH0#ֵpNݨz- XA`G֠9aۊIP3B/bOm"u>CM* }h(QO^ƍM&[ #&iZv-J.Y099"Bsj ͻ<Ա9ԉyZ6o-03Owr߹D j`v4Z"j!̛j7s Tcwt%3mh˪ilMWӣ@UA3кTc} #j/ey~8(ORپ<ޚvZk$MdSF̿\q;mN6rѲ Ea7m;:YUNfy-b .ZcŅ.O28 2Bc0G.B^W[%FVֶ-ͦn*5jڗ{&` Z.$; zfaOzk&.֑|rޔʥ%nх:zGJ{ˉh-p\jeƜ ?Ԗw*JӤ,\\v$qAp ڪQ)ɻ2Ʉ_5ረ. G;G݆޻fpzI^OZʩ/1;fkhAV5 {ZKK]s$m%# t=F{1#鷓e\i* E~}?Hk>5 6Y3a[_Z3?,~AY=SV\ P]F$RN_4MΟZN%AڕlA*<7os+@ߴVl{&cvMv&Myoqoul6rUU.?0H_\=j"{]P.,lqSV=xUOLc8`DvA8:@XgDzgJv1Rǰ2.)={˽h'1yfh0ؙn9#ҩ-9&<Enr%{#ޜlTXkIB4 X}h-킹TFq= JRjOpiKdt\3:"6F@=q"'ޫJ2acwxGnκ`yu؞|+b,19'mO>tV3r]ƅ<6wd=0]q8$u`x$uk77^Np=jdҾ*v=MI*qϽa&h%#8'a\He9#Ʋv.+S:mCq\2 ɣѦ9C+աzfcfcOr7\],v:k 1RH@zM:ؤ(uEw*dnFr(HLwp7L,O=W—^.|mk,[!O5Շ/Rѱ8DYPeb5lvQ#o$ga^h$L9QY[Gt.d^UsIe2 1nM%q/֛rco wCF4=@MtN~}3αJDv8=+҂~:{L8&pOU47KNkmh+X"n>[`<3EEdK|3|xRw8GzRʑ76v7 ۇ+s_9?4kߋ3/'jŚ)^>i=S^bɖ䈃yxZ`6lN"$'_N-d~9eOjn9pZTB+7AT? NPkeUDN*c* <(-^fC*bŻxqKnF# FO5t;<* . kl3?3K?7a}ȇ(uB3Ñ ˘'?մAT=?̿?SG˻(c8=yoxY/Do9|&TT|V1o RNOzN@_ Y2?R9_]M Tĝ5pI2D:N؉zG2 2#F_k3h1SG~oF{?UȖQc֧x3HAm[̕ eO4ꤟs!oUzԤ`I+"~vVLf#\M7tB#Iv`r'ݥOizGԘ} 49)b oQbƋiPh;9euasŚ@0V|01m^[F*MBۓҞ.6 =:L41;U&XuoZ0r9 MǕFzh#LL5`g^2 R]NELbwf4C eM"ѪUY

xZ̿Cfd="י)I`4[$|R+7-G{Si,q\'{ q>-+FYC6i!c,fz˒F8Ԕa!|n+hI  HdQOj追P`.G ~0=r*VFATӥ.5Hif`{UHd8#h!BAJ2@2zQZ\)8AQ U^ [<9U9=A@OBZD{ }2FAaBHvkhVMøu:7`Xu4gdj"FHjJj`^Zʍ 6pڲ^!nDIfj[h=1-ѱRcdxV`vA6E;[{SӨL2m#6%m E2a3VL7mw59pRTt5Ci;ȉelVbHR9CsޡdC[Q%,dpִo4u$Zs6߻PA/$do ݏzžώg<Ƽ J."\;oY[WJ_jfTgps-݇ U< t86fh@b6tC6_ ؁Mw1֐1;hbQ<W7^{9Q9,=Q*[ ؒP=I0p3 G+|Ss 8=+69 Y~/kдZIXN55Oxfw!76sUǽrၷs;z;lo^ػU۷آʍ^}Y/ ڐO3l}+Y"v[xlmIG>Ǥ[vѲ_3#7f} louu{r\JG=͜F&W?pz j% nt?N&_R[˛>gړeZju9gַ|#ik64,w6㶧IB6IrrUwfM֊Mx zz,yV%E"D6t'OͦqOqF~Fj-c7 c=XL_,@g g~)Ԋ",'P4ō!dֽTachzO25`\+_&jD39K06WӁX/Oq+F͡U<8z|M#嶶g[5sI %wdFʁl9'&}|ǂ?z Se/EO(^aCf7==%Q/$tƛ#Dao1'&Wvz݈;Aoc$.eke`wWa% oĖv] Ї?S5ǂ.d*?jY I+p_kzׅ@'pޫ1N/e.oH3s? -D$G ≝Zl5|Ap9p{ħ$ Wp|kk,9Ԙ`ez@ M?~xAdçh6s Ku3sҶ3ҹScB\dU:ָx{`TSWrzhv 4g?C BK(?I\ }"BlԂg gzdB- *P'Dw~kI:2cN4-Xr(?OD %WeAtđ|U LwN5: x[LjmL-I5щ*HsL(U'ڥXc>I/{Pmh5|pqեo;c$@*SIYlx%ٮ8Bba* #̚rl&t8QtMwz܎)0SH N/ȯq~`>ZI]=֦X1K^]/$qdj@aVȪ 1 Z 1叏bwIT+@NNi+"_z}ԸZJ"N@xJrЍa, G$D -Z(n ɚFsjTc5W{˳"W\H猓ɪVƓs}-йveɮ F0q$s̋#6Ԓmk$yqZkK(6.43MZdEq4&-&y^gy"rO> orV94Nh.٣V{.> eg[[Ovj6l_\1Chi C]JlwS.TGާ?f'؜SNĻ|396\\{g_Q@‚1P.*$i8HRX+^55ƯoȬ{lWl+/+§>mi9.95ႜ"SH1(*6BSއ}<:BuLK3g*n*[:isSM+r-lԉldE;Œ,j 2)ڍ Zȟ2IQRYWr g;]ml8ƾ" F}($*Gj U_-f*hڃX9 %Dc$9i{m,Ej=Ebxiz?P{Z0d|rֲsGTci˨EnHBwK=Pm6nf7' ԏL.x%[ebpCxib@FKFO$:ӭhN:gqj6~!(X?,c>*2vHZbFZ#(3ݍBKTWH% F1qUwQ.LEee)A4Qބ/r'?ftXف*jdA[ V+1۵NeGMۺ,@3{k2{_, ԓu6;gP#WaqftI-m1V̀GChK!y7)nzж8;ȗv= 3W% c>vϷ&gi_h✮ # HAQj~sE4g\9 ՋcQ=QPV>ɨ܆z#Z]H#EZq*FsI>i Kv6}ӎ ~=]e)/uDAeT`JȠyk+R0l W!~5]=]V̰tcrqs#. f́lk7Uم>rdFrz"*HrjS;MX8 NQk(4RJɯx&2]c Faʒ: R5bIz泙S_D{[ҰPf`78'ҹ.l,hZ rs]HBc5i+ɹH<*jWTNL( +!4 -U(ܣZEZX玲j7EuSYቖ>f͜<@7NU79Ӂ]c41/$̄Wj ^̕|~fn q^R`N>e1v5yjp YZV` hw'reE182_Hеsڪ;Moʬ?st;zW}C[ oiԞݫ{XH>.c0:sT/V%;(ACFgU'hZz$:p늿y ?ɉc$~*+K̶/ʭ_PuS&=%c&?O$Y\,;Q>:_o㉕|۾+pEך"8G%?BSfd'6,%az\H1YiTmR5F<%.I'g'TKto+*[?dUC⍛cmo]]4{r9Gᚋ[ŞB8/nGij;mv# oZOMp/#\Nm+TM(;5n-kiIc5r +{FqKdu6ݐ;k3>뚭ʬh޶H>ú6C sU%- l䎔t6Oݹe[KfYC80d!R*%.FXzO#45~cepx5pŎ8W3ͬrc$viv@KR "8ȃ,QmmsOT4IR|&+)88*`hSA{ЮOZW%)~I A${&ʷB"x\8O-cvge*hpį4DՑar@%lcػ{;yeu.OaY&݄$RqSW+l$xIfKBϚ$)6GtB@e*=ҚZ؀p=+n{uVV$bntSoCZHg"ՒL  eƓPS(Q*%vIު8K4껀8TQmW"rnvi+Eȯm;Ɔ-|JISM_;2M,"NGMٷF4tT_r$J5zݵ*Yp:5mhi&UOD8zY>FJcUydc;1ɔNCNĒ[YaJVJvЦfTM )G=ҕQ`| -֩5؀5UxAIkz7nRq׊jscOúq._x[;$jڸy'v@8>h)m.MUwx\M[R7=NkC4왡[%圩\Fj-Rd-v}Xi<1u)WN_Y4:\9fa5I/R{PƦDWk{cEkE嘆H8DbZx ;Qǘbas; :s"El$ <}+-){aqtpHAY2[:w2)Gi %s~\g"LR;HW{-N[4ʗ.e\U/)c暳.?zUTڪ]D!@D7rP õ0r:uLV7[*%ɬH'MY\ډĸ9n~lHn&f=GSoQ㩩84%ܒ9ޕ~269lL J@*?ى=;Li2&`pGza`cl *5/cƘ$qgָSJ &@ҙ# hZn>]H84|lLB).Z&8nU &1ЊmnPb+euP]tFpWTQQ lPJB+&לiS_, 8 Ā'&干NJ=)GQ5,wLNEsw(K`iwآFxG$)=:.JS E|A 0+ݷ:aZC2JüS1XJFAnDWTjk;~S{V]nwB-[xU&ٹrw#Q&*'[vZ$lyN h/+lsS ftricI[}r9.z0A!AmYf mn(ޞJ;#Tԝ̝G7u+&.!/sZsV.:䶶y Pl e鑓$/neQY@$zלxm)4+xqzpZ=*0Rx?Jxc!q^O*GoqE767A1 $<nii%s<0ڬ\|/Cj\P|3'ǂEMxz\cװ9vy|j N.+v91䜳zr9Z- M dk^z߅˼5;dl=)u[tԤujO}oʄ5v}+~|zj\jF0?u:<-|\` mȪ~6&E$e9ÚKș|-7xVfC3 Qi~ @}8a$ʗ$\)<˒\׃:pYfMD$ض?%{RG?M/CЩ2C`]9x~>t-F"yKШB_Y[#k<.}A5⽹0i@trk{ +wvX YoQ8XS*&w7]LQDO*_u 9z~x`:/φ,N3|gk/&V?6e4**0zki+|CY*a<-G'K jc! bǺu/f1Vr)5z7碊˻>oŻdɓ[˴ixZL INem|סsZT]`H3iAA8K|pWhR6]VVP 'X#{h*$ ҕ5y/VLt#Eq-d`>ZxoԹ/\~!u_>ֳ/-&U[iJ>FF]ϝWvWQoI4f|q*y; D=iّ޴6OR on",rf~7sЭ \a@|x>pj#qҝstŸ}6 +8+6z~4sTޜҼ-1'nbQ9]}Fd|3F%[Fφ4nr*vf]Cq%+6.k:j7)o;c˟ze)8!jDsN.R0sTʓi\|NAzp3E{#`s$VѶ6h+ NVJӭ DLθҢy|_zc6jkIщfbU5JX3]/g`$Ϯ\ْr[vO C팒ᔃ=:"쫻[:gJCY؀MiQ[]p|#m `2*Q;7HK?r 4Oƚ]⺀59}ib㠩Cv ن2iE#a $ի[PqoRU_  P;$K3 W8%d I#I89>XЎgn^knY@s\]$=#pB]vid8WM{jX&M_:mqvU<)5zƚoRőӴk rko3sбrzQY6JZ[pb3J]S5E]i63-i׊.&]BKx b0 Jkː~ѣ#c9HfOj- Rv37 jŕ%4xH RhnKHFF3q]+D'Q#(ʎf]7FF[Wl@T3m@VhlNU;w6Ӣ! TzԻCrIu1ǀT5eLsU]K0FJ+f($+ cA&P)zը.#28ϭuD6Hr}+? pN STL*ǞGzѨ؟/JHHSk %}*)$jǸvu%}lvi+&q[^ $ףDoDCJqڵz#z~􏦴T4䷉}xֶbֹB%ԖWܤsֹkd>Tgtz7/+?\^O+::nFr8ju-+"*\(z3)RU-8i&m-}m +ij`IjW3^,ls zk~3ڝݱ@7.x T[Rgt=@# :\:B}*w5:ŒpĀN+beTA*kN|ZtKh?5R($b,\,JyXpAEV|YrkEXQS[O$ʸKs)EmdP5JY'ϔ3x⽦ʺ\(Fk{Wőׇe"0t^eƵ2iǩ_v#!9sٔEM4 *zȯg~2?h@_ Sx,jt+#d[G -Qg* o?3[v_ ~G)0aeUA f 9'{G3PXY@_+M17dSر>)[M~SeO4F- H:qu|)_.MV0NIiN~3#2dQm|V윐OŦdhM/~!b2l"_O N`+YRbxEnK;-qִؑW).$01<k ~%Mh-m<)9ݎk*Yf\ckii:D=^ R| bh>pΨyMLv'?v+iH gȣ>?xk9|c @\~bݻ+UZ˴m߁}OOgld5scvM (MIVNA ݗLpB̽BwD2ShiJn4n?лu@Y_!lTrzf﹥#5 64k)t% aOIJ 8@sRn87ڣ Уhߜ O.A:wgrJ\Д N=fՈRtn@$f`Hj=Wiz|V>T7q_]0r@֜N权G/vqz/i4ʏVsHzB`Wh1G.su|Jg'`k 9*jpdKOkx RGR5I0t֭DRi l[ֹ{BSҮ;u9XT6.SjBfIJmu+} +.ʲc5b vRlWoB+Xȣߑ]@Fw!B6*M7]'j\5c[52Lсw6<BOzV<ϛSLG&WKEܐxKrEҔ>fN1SDca= cXlGjUJVKr9^NOkQx$>EzZɭ;[͔*Ii݅AGn+Hv㊤J Q\ū#tEJUk6zS[Cw%ԁNiDr\@;|}z?~*\$65ia3K̹.V@%KMΫyyYcG#n֚RlGnE'UBjpk;]FnO'8-JUNZy|/ย[yd%9Zyz}neYgC-wLY%awq}٭$j0+U=x`k>bēךQ0-zsCu,7q5M|`})8PBҬYG%8W{V9.wZ|p,̬࢜PDS1Uk32hP20~NFpޤhc:%2Fڜ#m `~Ըl@* 4cs\辅2I4d/8c11#Uȡn]Dn$sϽ88ڟBnFȽx5!wQ@ʱҡ匇i^RVՊo*>\ qVьjB{ ֟t٣Od9UeH)7F#$WbϽS;ד* V')˷㚱#K䟭=Y.V#Y+3P$l8IXQrcEUc% 9Kls#}٭c] c*.mͱ:׊7,? ? +V.ncSH6*Y߾q;~Y\=xEIHHI֤hF8Z^c Xc8 4'Ȃ:gsIܨ++vo=i8&ıj_d ޤ皺<`Թ GzBuP9w}*%NWQg9ҫKj2͞8GDXM)#?ʓcԍJGS;=VF85) qޱ1tj-jcV nҥpYb2uVd"U϶+,+Y&TFݎ})E1_'tDҹU~0Jg噂zնs=uۣ\U;7g 9=yYv1ǭc܀]:VowC$\|"zڝݑQmG ]_|;NdnbG_STv= 4nON!]g2 8p+ GJQjAp7jK t(dCK]KiוWکj2 1t5ʏ=>i䦺T{s֭x-gn:a3 8ZyzڅeUN熤ݴD֤bvГ=_Zt}4}1^h?ޜ{-tA$pL+ls`UW47t2k0+w$[ yyNWeUfehIf o5r +@}av M9x_^,On!Cq֦m M'ADLC̛~F8ȼuHʊ8.b-7஗l^:1dVGhm4 NmOjA,_g7{A'XJ\UX1D9(E9 W5.2ر,N?W!Bu-]GN{E,gGNhA޺O 34M}bqnmId<`[³~$>/isְ4ko ʭ$ٮKͭo'bvEVnURSIi:e61sLn~$aaj/G( O'5/%/42ճx+jq#UNw'CeA_ |f** -60|W *h|R CikoE |XH EcxT^f~"ċ+J9?W]g¸_kI/~,8"z\1+8T:@V'!Ԁ}5)/G7pp{aEf<j׭ տz2_ Q2,`zF#TQYFP/l JyH@2jjMk*t&&OxZ5KKte $}rdixZ/0!dY=@,4O,|+EK2\c=pA]6v;0>nW)B}o5ӶG#`F=I PYG=QO]W4OCJΎB :Gr>3S_a_CcI'xqV SlծNe-TcӤn~pMe1Z,2u8k6y[vΣڵL]Kҹ/OfFH<桀%>І=+{ W~⬜iյ#0*S fz ; 5*-n;U !%LUcQUr@GUs8/{RKm*b~\/xLVr;ᄅcmSZI3:~:A-\^K\8tPx%wn9F*x>Յǣd['i`Kgޓm; t*Rfx7yZޕ>&".;Q7$Yʓmvq7ͨI'+iar֒YjTZBObeԮՀ\$Kki;+kqiÖG1cP/MЮgF~|ȸF.:el&(#nybUFBҡ&Ӯwh\4i-D9PzmhiM&Ej:-F{+$l銘6I"G[֞boHZ[6ڰjHU )xR么[#\d`DҠ-d*DO*PA71" 1V.2>\͢11Hwc+#R.OJ".a j%'84)&#$#=jGJ,EIktj[ҤlgqM[cޡ2N;Td`u'cg#89=kFQB3ϪQ7 =Jؐ @8}Hb|; .AޭA<#XbYOFPݜ֍9LyIR棅OSŗ}P<FLۑPL7 0+na}ltCcOxP f3Ļ+#V*7=s\vx V;C  _緰liX?g:WJR" )Q޹ǵHm,dYWڊI5;wfZ]ñg;[WDZ㵽Kͻ|D9 ׇxT~* 洠;rRvem5ߎ{VrrH{V>^Z]*H@wzuyK[ cID~h5/chYjmG$ ;1o!Y(qsrs$h[m r*DG96RU"mR[ոȓZז6ݘpmihnQ Ai|L,i_+ %2~*8k@25)?p&ՙh4gi WہNGC02WKc]Rj x?Sh" ĭ#ۭU[ȗ g J(*Π_}dxYt.G͊Ƴp[|ߚ췽/CnU?6@ǟ~$$d')27dݝ2㣘?s_ S*QB>`JzAxuYHv^2-=U҉el?{4q@cY/!'MRK7UGhVGLi >@sm)R"a7;GkeFnm83T~ i,3zQ¦Ы]Q"O#aI~@cB JٶX20%W͉=+kSfMͥϙ)blrGQP6Я.7RM4*F]÷; 'Ep'H㰩%k#cMU\bM۴·v [8` pjZ7 ߭J]Js\#ɜv8w#Dcl媮4э HHq^.uEZeF[qr(۴r)+39Yo%ś zѕ8^( qTl2`4vTwh. 21UB~G{R؝z$wI& Yk)\JW;?0 ӰDŽPȤQ8*cTsBv)'`@)8\#4o/;Oy{HH8 ɪm6m=d*qZnqg 'pyB^#֠W [EqчhL3Ƕ}kWvTVʬ78һ }*ҵ-3lPVeϧV"ƳݔҦ~F- p#r1EWG[%$?26mubΟvP=KNy\M2"SU0hBV+K!^fDqmb𞏀Gݯ:e( Q*nsHL Hevhw`ЊӟZw}M-7WFĞuKQ,`lթ(1i*BG<#ҵzo逫1+N3^LUz >ޛ#cJRID.G#sY9\T IR7c^NikV`:te_5r+N2՞FcRJwȝ%nxrwdbtYK9rR T!,㑌$6 evbCwqJƱex2jƐ3,dT]iݴ+T.X[y #sCzrZ$W ֔x|nqj$ՌgGIQ榍tl즢$.{Àj{1@x=ꖬ2njaS*ħ&Bx؝$CN,0@_΍ c{|{:Ԉ|!AQ (|Ie'暕ڙz̊6d*I$~tc$}NkxԆH3sֳx"s Zr{3KӞܑ] On<àiG޹97NҙA!;mmcEԾ2NF-@'v>T7mOq)CĪ I Ϡѩ j(4K1d c0qSJ XMsL4KsP%f[U $R Ӄ+!j ԻЬ&+E@?J4F8C[ `x$4@&@cеsuqMv,$KBp*>l+kVԐH9 |kR2@[DkXk'U;Tp2OJ4%:G$hN89%3jcԣ)f 4lhSt+r;wA"㧵C'S"{.N;JڛKƯMҝ|k:l*si)YNdq^'䲂@er>Qz+ BHҹ+UiuoU󍇷h5[Q9̛eD,`\iudtv层 :k <ěSQR3"VGAڪp:)6rxc>"`i{(DOCm-!99TcU$wKibZfV.I9,y2Vf6f8Svz1@0>Os XqQk+h iD g_=1r~iZP^Bl^:u>e#߅a'I S^f*۝q\cM_$h93.|:\|Cz+l0HcP;'== 2f ԛ}LПE@? r#p ֞1~r}*Ҡph:é'7݆I6 *(Y b#8,!i>H ]u!#T]=7e֙pIQjd6ܜh0HVFzկq>[QYex&WR]^#y9$KY^Cہs$A2'Ojqli* XX {{Ѕ+3gC2"ؙ8d |ˉjRaJL9[ ӊ`yf.A$ݎ%1h6]W0oZRYC-;+ LCKEKDC.NZKEI)IX$ѝ v??U5ڻ&v DZ5bc +@RG/A$ک6)Yvqk#bN:+a$];LJv@hgSy V>"< BʊH$g$gݑjʣ+IjG;fG\#̮0[ݸGJ컉UƭE{dm栖HvܗF7() dХs%öyabrl$]"uɩ~Gղ$cT^WV!4cWv0NXQxFl3IS8+>ٗ WOc]FtYODe52STbOox`Dp8.Q KzMkq#g>97sزlfrMt_҂9cZ#w\ ҜQ=#>j8%V]c}&=k.rG]L>"BIʑڰz*~K*_;ba^9W<(]d 5b@R;iLVcӂ=Dp9]Z.r]1[.<Ԏ´Uma73JZ$wˌG ҩivA9ZUl5 ۞5ǯJ xo=ڔл3$]k^7:N,,rՁ t$nӭ.rdo 2/:K-a[nT- Ӛ24迴4e ĆsU%tF@ޒn'i"Hē n9Q^Č nE5*+^&`n6y#!AN,e.U#Yn*{>7[*Gu'8=fTF$,U5و֖$ܕȼUKنx'Fc1UG~+{2.і o=}*y$@Q:m=8any ~U2tIn\h^Ԥ<IFJN*rX5p:{T܇W*Z-YX fFMK`OҐ6:5 jXb1UxYQKi,}NW=ҹ#A0@ϥD1=*E"ǩ<`Vb6}j̪!y#Ԗ8*:9J/-}{)9qZNZK.|Gp*sƐ82jj.DQy}&(>BzW]'iͣWF+BOz5R RrI%c_.etSeV; `yUdf CRIB ]} ,|L.i]'x2mM4245r`~ ("?G^Dc_)KYd4;}!ss fSj0'EfgSK,~-c0HO=rk/y~4G%e=scDiZ-O&>"bOV簮XS[C~*a\׀<}ܲ uĭ턘_)U]<2c.#|9I6q"?{AѸb=9Kܨݜ,G|S N4G?i|\Ka>:h-x>,Ā˻cV/̋dr~l7v:^Z)PiZ^z_=Gk$vEs /I8c?3hSht)w`K]6~o2u^V rD9s47O$Qc׌VGbo(3ӵ*}>dh|DžG3F!$a R/VT#O)X*OңD>?O~A5[\xC$d+^ᇨ-[]'ؼU ˎ~#i 9l71Ȟ̿6Jkg$.5""/m?^\֧sVerx\TFDrSq(ܣ,[ɥ2H뀟0Y!2x%_+iMS&X0<з!76 _zc,"08$x;- s0( &7m$537WbSO<` W6Sw>#ܘCL۰bCz+C]^r sSA_rhY=Vg+8QjM7\SɶLHqӷ QJOi4WIک ]Km=Km<1/;o4JO=3MBmjT7=ng71$mUt,cVʯS͖JFͯk)LhzS=.ֹqY9=F6Q/ʊIޕ>!˃'K2BpM[БJhY  UM̀S9%5rcE PPz'z1"G (K X?LItܞO.MIܥ.,%vZ>$%xs9ұp $<)](wF&f]Kg+)&Μ4q:j @||rGJC FGڢ違 '%h|Q1bmjKXY`0_ZrU85W3I'UR"pX~4:Htle8&rXc-y } ;H-:ܧ$O]fY6|뱭N[5Һ \JXԵI,S"3x ktQrԚG`7GuQ<T㴖Ib4{1:f*"aһV[=LՕ!77LQix㔴e5g'}6ٙR=6cL[ipxQ&-+Gtb/spe"3v-=srX{UYx[w$`x5JY1 tJ(Qc O.c[9gML:*1 p:UnyC9o8$ضB+wcӁN*B6mݖZ-D$3zZzط gh+~Gc z NE*j2dWc1RÜ - ܑ[q'M `ZCBrU}sVX̚=Ԓwg8ڻ"zbHۈ#Z=l56W%0G>[ e=Z>r3XFh(N{`}k'XGLoִǚvg5Vl$;GvgjXG6:bn#~CuE&03ֹM:/KGX{W?[Ow߼zܼ]Kq!ō,+^=ΛHR[q< tb37v9{YjޱWY%M.53S\&i쉳{izjzl"Z)[0Ú}(2qpy{TqM[sSHX|j1,f_OVbsuI ݑlx(Bn+u1Am"F098j/ʹʹu j VW੾HA</jsgd^" t6"#ۚHn05ntgF'MUfr3wNeUdLy47hM$ME B8&Cڅ1V}`7 xs}M.+4;`+:P}eC.Y`.?FBu](F 1kĮ&旜)3Lg2F mFi~[L>rn/O?Bʒ2`S^T|L6e;rة] JOLe\a iu?`i-|Sri6"=p2c?Nj^=S ǛǹL[wY1YcWa>J.fp]p{WSIjw>$ jB9l")r.yGjRNc54B1?a".A#1ܩ'Y@D{u ++1F1AXHQڗBef;UI$H$\OZ$V6Z+l/ޮ}S5f l)4%qzD>*ycdCYC Ug BIɡ*3Fl֒cX| u,&mDKIdj=JI\',{}LU(˕Ls4cĄ|8qY׹sGCN)sðْYWb:֓V猦 #I$皇Fn- 'ҞVqRعjT0rZ:Z'8[HObZIXTDQ߁qSbKmcQ!զWВG;cpxbK7lTCZEBy#y#T>p˜J-X9?tfଇpͩ^ps:+Imz{HIdug'W#"3chBvPMKWq.nm5kk&_Jmf]%$PsSlkNREnؤtP;@yXlh4MWjjQD!h kaI;\udѭeF.}@'% u Re{I#rP2!4]ճޤR8ea\0Ӡ?JdҨTpDMm8JZ"r Z0Th ْ+OW#DjN1zH "A&&UIi>f&q\8F'8pf$vn=㚖RZvVЀcIz`W,q}+im`G9MeK$Xq_=G̗jj=,Ti]/c#'G:}T$Vьz荌B[f *兹,@[e}N3l|c!ϽYi`sm8٘|V0Qҩ**`c)FWFs;st[fX};VҼj=4{.#{z8y[2*AKVw+pc0~ρJվTg4872\X OX+nKv4>) KʜӚBwQfłV}|tu~q'FF;tQ66' QpVͼtd?ߥbKd>ѠlEڭQgh}ɔ~M Tn? fԡ,Ě+ᨉ{ŗBV?z3r7kȭ! nkgS#36"^Z-~bpG-t&D?w۱2Jssjҙk%gEΤa5RbGzԷ6WڑWᄥa'7֘c`:'fL#H^>4yy7)ޓi  $ {T>4aYYufk1ugT*xJT|HoW+$rƀc3|m?9!^VbG~r7j٥uA.BB6/~/Mg^7GnGl"T}Ymgu^L0*ke>匡&אn(yQ_lڇ;୬lLS|8Y"dY:<=l1V8v*W_*{!\-*I7T? >&Ώ db6իc8r%HnʘH>ϫA 2گVERj10O"ib;h<р5ʶܠCZe< S߸ȃx H'VV}G)R'9(؄Kcii :ɛYm4fTCQtp3v*aUfg=qQtU n"E1ɤIrr{fvV p@=+hdӓШˡvVo+bC`;4^"Gxv(t!r0ۺTz&Kln\VjWlFF2 1]'aa(6FhC\~@q'n CwuIJS#eDXXf94^qE}뚹䈲r)v3B hEYPnh7vѤv)7#)Ţc(Y$BU溻MZR96[eC?:{uݽjJ/YnKzT1DdԦY^>-MϽfдЎ%*ŒGҝ8e$l89X8B~J#*9&med1'ҕ]$W@RH۰14[MJD-!UɑBu5t̮*C{]nNW=CXFElN1{5*B?+si{T@yj>4ڍhS"ݚg-mY:AES!|qh(n*XOR԰:c#I= )uYÐKiCI XulJhQi+2 & =GҭiZcHPZR[VݓԊ8q!HpSh7"*6` ӵ=Evֲ,rOyid8ǽgZ:)RGs܁'~b)w@Tp^Ub:8nW?oYkAH0Ԗ1^Zm0p9d&Шֺ4нm,M ӭ&72=*w7LU<j5HBO07ʪAHR@XJ%%2傄pOLZr&c FnMu0+X12}˼]jyТkh+cDwu%#ͣI]Wf$S:8]J릵ƺJ-b^RG;[)]9uMRfiWzɩRi#7Jhz ,W2E551k MYH H-#)זceSYԄ(3a~bd}+Tq-WSkaձڍ u_A0zL#S2=g&6<[JI1f[^HB`Z Vc*[G===BoQ;sjňW&]I1+B" W0=xp1iw!%M~aI;- SSzX.-$ivcSb\Lw=GwbAPTt-GSi3hq \aSc̘5 g'Ihzw@vC{@N038֥5l*9aRVڦCbtE]mK :N{!݅QN>AЎp Qb0 VmXoc2_1zf~MBm38A֖MkqrWW;U:{3Цm笡UWQϵyM_}Mn qsX&k8ҍf΋ Jg 9>½kBipsZ K1Q8М>'3Ai"G.gR>aU{+zy#ƚ9mcMJmH2 5'^d|/ZN#B4k>MI Pt/[Qg-f~cǏ;3|gOJG;7sЀ63aW+6ĸ#8[$eHB}T:s^}_l3P"/m9B85ލ6~ce0j:3FSq B3jȎPpYĖ,P,GtR~f y}1FTT*dP}Zg9fuRpj v>"Kr#ߚzkcg#TLη|P {ue>^%LvRѲP N?_/\X7;c|޵1OzK<$U@]qMWV֙!| '{pH†S\>S̞ি A0xBrQqdYwZS#Z;C&#B}-%Gh56 [fݼIm3T²a-* Yڎt2ΌO{%s_Oc+/?6Is"I?C;kË\+udUoy#1cל抏IChQ3rVqx;&qVK^H_^˓mb-,#"++dZ? !ۢ^Wd@+q{VX}ː~U zRH~"> տ ۮ+]Cs_1^f'ė* F:uxN3}]kU>do2Ocۜgt^+T 1Kߓ%+/3RuCPcfY^sSrKjDo2-f#1V<\K|H#+KWM5|Ypq`}w Y8?+ᗠNޤhҬ9)pސIk3 (q:IzeٸT}=*ݼ@OٔUmu$e\ZF YXtu34wL2@[Fn.݄I4;rnʼn3,eFjԻ[q =8P *^.ȕBqD=i/u-DhsYI "ͫ 1V7cuℬWwbKTFA ٥p7d$%E$+=HʉdmZEГyx=j2˜քSr&a C|W+$x9K;};W 4V1:!},7 I7d`滱,n2v)-R5މXC z$+NqCvXu5u U!ăMnMzZ.5X_Er ) HN@"5`8=qNDvspR:Pyf&Pi Y'SG8 e1_T ̹(j\@U'K|9bծQG<֭%R.۝w 0 Fjp@3omu5v̰䎤bW2QvG!qg,LwFW1li54h$w:´㝾iFSHIsMxݟ}|bc>#(ZFJ"{Uy#qN&RPHQgk6ЦЍLŽIH8Q6DDUPoM,1.}I*e(4sR1D)2Py5(*9#'7`sT$rE>dG!Zm؅f\[q8@+yՆUJBY2%hT( u>\ŦG-J66cZe./' FȖ7=?:Nw)0@M94O.rN*$Gwɥn~bOncw|׌h?Odh˒t:LApk ^>oY;y$R@5 SUu{jNHua-+/N@oz1kv' ^ |P\\!#'bԋK7Hи}k$=1@A rTЇ 9 b=xգyi&5b!ИnQ!Q:oA)YC!XrƋmKE`7K來x$HQ4 tAך`^Mfۑ։noQu8ogqѺ5^iR '5٘':F-6,d  NQ%:6]Yk>cjV<7v ?ZPmas$6#vFFzTKMjeG4:sF`2?Z\UV#lԬ6:ې8=D'W8F1N*6i.xPW 94ѻEL%e-;Kc\@Hf_ڥ?0ǽM>a tZ$dnH(.G ֱw0/ :㊳qnEoy^09q11=kkZen#icU'bqҥj؂9}*7#+}{lf5ғ.TT L'R؈&Ag֚V2N Un̝-hgaQ6`TY-6]![<$g |_(d&*q<>'g0/xMrK19M'>H41UpGҳ qV<{F@(^D3;y tQ̏"O)jiOO=yAQziGcUrc6:?L<; Bː2qjٸ]PLՀ8Ͽ4pO5[ʌ-sO&Ypy>#+-KQUZgC0G@k4(X}oWS<Ȧ[\÷ֱheLi3pcKdX䡍mOY#9q|77{v1zVwEejQj9Yjמ#-:t._7s"Kw FAuGcu>1èŽcXnؿ \'pB|-(pL&Z%/Jc?aY2.1zwx=3Xr LVʤn([,MOnOhr*O2H>BT*4+;u0j֣.߃OJv >+2ʏ: P#7krYCcXMW3c ^TIR}' ׋wWQB-,Ilk7.Ѧ+9xOq\+Ӑ\X*I' %J8eΗkn?L[7g|;HRJyzgS|46~3D.i@ɻgUT4}J`d Zӓڍ(/QaU[JbOZIhM[\f@aYt[jomn9 ϽB^HPx<Љ{#;-H''52I#H-90T~)]uP `DK^zap;IR#T}xRUKѯ5օ"v >quBwf+F0çJZwⅹb srDO4uaF{+t\@#9kPOǃȩF#|8eҚH-Ƕh^=k{hi7Q)`kI#,#B}V9ۋO(2)9Ձu;zoP{ގ[n湟:`Q/tf9F@^y%HQRiQc֮ O#):;U`۞FTzZ2U(_hɵ qD3mt.Cb;jg80zT%ԲԻ"K"#<{STB͇։F@#=mu,_`T~NjS0RAkTS$qdO/kO`I>CuQ\u5gnz_a><2~ZI{%Y$sNIZ}[V\r L2B:YUZ^<٬!f]J,K1D[cź]dȆ]y5.5wCrzRAsq-\%`"I*[wc3\,ܑYG,Pi݅bjQJ՛UrsMA}=-$F0EL=͝Bι|g a=k`P~KCzk:'MzAv!0QkZ>>\H~PXZ|}ī7PJ71jIET.x}">b$gr]X^!֦D=^oqWaI$U d*U7JE_5>GXP@ukPr\'cQ~F9J`bN;v;bS@c֤'"Έَ9ېE,MqYN[ܻ bd{Pz*el* oBPXm2=jѓ$`특`cwJ72$e !\+2q+*=(}ִLo] O=Hn3ҘSRBAk1Xc1RӰݙpyJQ$jkd.^9HWD}jDbԿe=*9BsЛ#==/#%rI2j<:r3eBQi]fvz$_`ېװj5Ӯ4Y5k^1 rSGʺ캮u3i\YVb%7b | VGY(0=FI21tu2 XQ]Jzt!'>l|~Gi)RAS7$1!UK +#DдWVDG y,ykl%{8Zͽ~h:y*y$fc \<3.ND~/'p2]\ lq9jg\*XWKvd- 6gR|6}rhCZW)|b6G5xmB7uCXqː_+p{ J$g%vJ?-6^4#s]MK<)mM+ޙxRD=Ϧ AB2>M'èi ߐ ӡ 1 vyӘ sgx"t7 ktf*_/M >b5/oZ/߽~^fYsicPGNᶛGė `yb'?BMJ;ZUE#rzfeоQ2]Ewc" Ғ};ZnqsSQQ-hnm%9OL ct?CC_3-c#)QI,+5V;{DK6DeZ^=^ I#JZA)2GKc%TVn,c֌NODɊz`r1 ?*Z'ԉڒH*ԁ|(CY#k5o"Y_ M1$ %/Q73!'NBUoƇ/CeA[O+pHǸpAn}qSov^oUW5ĭ`BFsie?r4R)KØnw("+[HhVz x:+ϫmO^#><_W&s׊Ϊ뫣CwX!=HX6OanT$TSY"=jfGjqzͤP-O4`H9y"C.:V&_:,mG RMfJ1NCAIkzV%zPVeOUI #T߱hY0=:Mx*\Z&).SjddvRz{kncUtZZjkڧ)% Ⅸrņ%o#?vhn⹌ȵOPC,kNw=kǶVbNٮdssp5ֳnOp-@{Ǖ F~$z ꗖ z-(affF@h%Gg 2;4bڎ9Zj VbWj%M1V>RsT3ZTnqҴap r:tkۨ˶083+D7؂V/!P8=*7*XG@HsU& tw''oTl;lcAVnpRy ԈA QbrzAmvgnMVuJΘ8&\{3:q1T%9U*6TI$Ud`6jGCͲRjIuCcj qZt3FԀwsV!`ݛ"d;`΃2 4n*vQ%G'4l0Aj[-xLD!{|G*}+TFWB=u9fLx4RJAl 2X #u|J)IׯvrIrmf2N{=*Wn}@}ZC6vSL|)=z>9/kYq4%~{ H#t2g?@?N0LgxUɉ+O*%Se/F¹Kh9Xrm~{ZЕnHLwzDQ}ԟ VRy2z*o#k.fi  r@PLrJQ~J_RF|3ǍDgyK!/u۹7ԼoѝbԾ, |Ah`dw-{}k! v%GT6(3ȉǠRKX&=o#TƺW-v=J/\X2\Q572}pyi?C]Ķvi#ZK35;Y ]ߥrV'Жj#=2Ў!9 Jgt=/9Y&G+ZZy #1xZxC*aZ[7,}RzӏKIcFIM=RLHLwZK.~./n+t7Mu~ [2Fh R|9~f5֋*?} OV0(,3xo1ddVv_2DŽnm;xc"<8O-dms.=EMBP4Цے>"/t2d d4,rU?Jзhn(6v:K#oYЪĂlj1z?1įY@+q4P 9C 'jGCl5@)WUWMim$R`@Z(M r[`;7OZQ5KbcKWGf qY08ٖ$y['oAe=)ZANJ6!Ңv'-\D$?&(m!ٍdd AH5؎|A`AjLWI]QCɧ5݋ʚEi$9sxBEB3i'IT٪ӜERԷvs  j;FXb-V232|񓟥:[YPiVΟOcB~Ir%+\/ W*hG8<֝ՕU"hc0eRJ.:giJ8=FoB157i'}zd$=; lLChEU_R!4xNDW8I;-!i$Cl /c)\DF:pjQa>ҧQTM : S'q֖&ҹUK!)GMUԗw;0~Y2 㡥a$p hBIe{N,49CI}katd^Bрv]KFc' t-T[j${Pʹp 4aTœ]OlcU9>5aF2RKr9=VwPʺTx`VFa~-6pcqqz7KtM>Hw]!p2MzXZqkGN5R Rw0nv4kYn8<(u%G1iTsQv #whiF$#{Dֲb#ӫ)M{\;kT?qʊH2Um;x=P#{rtʁVR)`Z$'$H-{*8`j{{[l!0'<{Յ8!h1Ƽ\| y,UC%'#9gZ1ز:$ڧ՘ RHYS)(/8iA/lcV,ujA*5(=1 UeZKA?8{# Y%7cq;z3% $ҋ}YGIU͒yX0M<[E4*}ڛL%,83C~4n9i3&A^+J9(3YvVWZVG^BYZvZxM6ҫXnk6Ϯ=dC.1irSлk-մR^8FiȓiPg+V+o$KlxciH1A֛Ml;J;y/g!8 E7RczRcoM ^q?+@ʺUɽp&*Jj]jMꊚZa8vc޻M>e9V: լn$2޴,R Xzt N-LF c+M]$8G"P<lbGֹpbQ[SܒȣyTКOqO&sY btF})RCE" ҐF:R9^zJ㜨\G5 qSUwf#٢nqMW' ͝e_dUeǭrM3ץ+0dSC15Sw XM,ێ՜qkvcRʤTt'֓D!©b9yo}J"-mzc5]'=kC)Lu*,ٖSR&ZT9$~UZ|y 犞]g##UQA!O$R7ɪ"X(m>SID,d?:/QbVmmJi'̣1'JEC zXk P/>5ے|nXUIV$y@# _K\?/7m\,O/#1r79 䍎EkS$:CWI>jr xw۸Gu+jE7H/+cÄbDcjߗT?F6?6QĪW6bg\WwMu (=E)5k6< hO =,HҒgVҷ==s )sk̐ݙfO:#\2t[R{wߝrz#JEyD{_ 3t+* ÊyY#@׈ E >dFov4ߴnt t-ITɀpN{ [ORھr[ҡ |ZId*?;i  Sj*SS"D\ Rw1 Nrz[g4+(Pm>+N {b(oTᛍڮꀦ%xcJ bd95oSԇ$#dOgFlGG\Mu(+jyUg%"Z~ \QDw{XsՍ5*TS2\ڔ\Jr^<W {Ն3m@M5+-vPأ;xVG=.A54ԏ2T1&ԭ(iTM} GG|3=Cybd'9^M̕& ߏ 4;a/7A #2S}NqRk<;6Hy*tɢXB_&,^MvSmΚ?vYI"O~nME{_sBvy9+mm0xR(H0 횭^dI+His1I$yx6LQ:@5F?VtePY~ҩialsv-7zOY{%vE9V^ԾY/$H<j=d̃vm}M!d)wWr9\tymc!b;JᭀܫFbl!}܁&#qەuk"Q Z9-Iq Z"iy ^G\sE1n(r[+5Τ!5'ce6PIT{dedG*;k:(]8$u%Ql} >g +m;{CJr+ ג8cFyzMYk"ݝ>U9NIO$K@)IYkcdÿkυ7X\]ĭ׏ΪH]R*!t'@qS9 x$(\})1}`FyD1֜i.$}6TfDb(ؘ) .HR7Mm"kciǁְIjIϨum}{=0jZ\tWEҵZk'Dd7]մJX*3+&z5$B;HU ~41rЊT]晵g>G9 QЩ5,z5b61J#(\HDL۱HYz\"1Jn\PĖI<繬քV(O5NcZKG^YV7lmzvRq|Wj-.0Q'2K.>_Z,\tNi(1Wrv7v~@ oq `r $wrGqR<16,Q/!e 7[12\V^aڱR*mrk&a'i[NMuN؛:ʹdӃ^^gO#iI^~c|'|IOaUc`匟δ%_ٯRxz tq6A0Zߡ!?ԗ_fGPU/KЏvK")늗ŀOhQQOr4 o`yr xYbZGgbC~q77sخm-Z^D'߸7%cCsӚy$$˟T.7ve_۾+jdHA? R\ĸiS+>Wt/@u5sv=kKzߑ4S;uk{i"yIO9\KԪ_gfA<}v坙W²ǓI'+1vl/RHEN}3Mr$;懪 0xOm9o^(U\]=#Hv՘o.E8֌Ŷ,$wZKͻ&ckh=+JX<T;-mUc*$I539`Б?ݐ*LmE4R(*T<ԃŘ 4]Zj.4nޘB1eWy&bÐ1Hr S`]e;N sjQ\n S=0E$m܍lpiQ8$Rhت9}*p^F)xn)) QBCLjY[9z wd&Wx@%4ݺc^ !b7zκd5n_2k-Ad]}hvzx\Փ̮Yq43E&P1mBI䍙A 1-+ФM=ȅ2s+}J2Pϕ*7 ,Nt:2f7Lm&]-y\IS5O:` cbv5aXrяZ/J/s5;{\&w/Zb;gnXt&5ln+MyF |M0HœQc7mBۀF:{]lM92AyF#)1%ܣ4Rt@-H9f=;ҽ j6L.qID @4M6KV/0$qL [YSmUIV'QRM_ u2H٫fc-9ϸ&i) x&zT}IIA[kYg|[Usif4:zGRM^OtWcG*6>&ɖr$Pܺ* KZM\۟6FO\qW78}XDs?E&ےF:9UkaV'z>k ob*e%t'W[ ;++Yilw2S`Ejm?B{ҷb݈b󦸹 "];D̄|OAJ/,XFm 9>Ջ35VxtRx{S&f^i(؀.CWZd4Pl}FvFm ,jZ դ̪>8>4nFc%h3iiVNy<ծv,n7Đ1qI}Ƹ Y0 ґqR\U,#qҟgI 'rBdWq:-/ b:)hk~L:c!2rIkCXX\8*2c5MԌĿViu:<`mc k7*$I"`c EI2O] ~x%vA1) ,(6D2VM̅N3ϵFqRQ0S{+j^#?)]\OJ[@X;(oT93J#ym sN+bׯ5BmNW'T:h:S$P; eP2f IHB' bz\F,O5h<I6g1\qTwT<1N)|M=][5/N0A"IԍՁ oI4ޅ^'F~V5~Ղ[L%v53 CQx7`M; =KW lyv;LGÝP2ȯKѶ&!W%/QF#Ru0[? S^u?rAc5o&?Wi|ZuNfnt5"4SEGr SA G28<`uZ^iz>84VSq]%'?苟cVPVSYk'; xotW=7 9+E/ bZZH,dό$)onNkD﯐(5/1o ʻ*<~"N$Bz sz7 ub3xZ##Ձe~5)o=*z'hV/qet4l|6GydXT1/DӬW$+ǧ[ߩ|G=p ]ЭVj-f7)\q-k?i(y:|drO=9 kԛ_G⮝lp5flֆpu/:䂖vJ`0)/s]e=6_dv\PcU1[@1?*?2sg<' \!gj4aq uZiN+̶a0H ^qpb|{/C#q.I%sTw-~/[22c1אשFZz R@9OV)?o 2s+[3ptZκ~"Qr!\̄Dp \՟ciܮ,H૑ +$MJ$qP4!؎I㌳jA,z:Ĺ sm-Ru7L623D ⭉-.+Fɴ>1ВF(;NH H>jIn =֒A5{PY~ r$P-L7o5_bDTF[I=)d06ƽ4g{JrzXA VdK h'>aqZX[:9Pos c!e$-ݽ&K-a2[sUZMZЉ>k5̽ɟW2:% QFNQN驆Y>kF+Ywx87ܞEo(iƢmO"cc%5:?!Y'Pp7 p27fHwDY@M <ukyo$OkxaQ{3>T A]Pyqu'eҠ/PH'5#ŧ%;@ ktCRsz{{S>{tXT bko,(aUtƗ"^I{e6^k}X}𲴭2کWIb'tf& n! ';ӼU[+DS cI?kū5ўN> ⳉDAv¥wZL. ֬S#=dmJFhIXF1zP("Qi*0]qRVi|يOL)mQAG|RrKBTՐZy&5jO U{z2C텪_;(ۀ@aY2G[#);MwkR;c&GXszOKIՀQ) %ݔ6w c;_hhz</M-LG/Bہ;Ԗ .=qHιW_+ KcΦʚWօ[* [H=q\-ij"᝺]Ӵil̅z1Ztd],sm x",AX2d+MIjC5ƣ1>:$іl2zԻX$.+d&,'JH/e2}>/jV2\ʑD nV'irõ[2Hq9Ÿ 69}K[HKϖ7CQpII0fThco~3L8$hd2(?(oΫsTʧw -*[A1#Xsҥt>aYI\&hUI"T|+c+Yqz c q&%B;wr]brAsƒwe2ERy}H}ȈRԮUB}`)u%rqQID`jf|:teY$kb]޽6ԅx㩢OA6v16Ԡw7-vKTndI D(;LCW`r?JlVwI>RLA^(EG,F3sRFN֧6b;ʹ2k7R@ۗYvS Z8q;i9{~+|O mdPG$ߙb|+[9G`*'86"= ?jߑ?cNЭdې]e -JESvNZwr_ eVa.?BC~+?2#ƶ+3+ O8v#\gn: ?oY|)b Ih#p?ﺽ+EC~"xUn<`ӽ|+6 A>XK%ī]gO3o,L3Jji@:Uf>9aC,i~ϊfB$]X`'zG~ mOSOۏTW*% J?C[7zٸ/SC┻4Dϊy>Pn\K ~<oU= On*ȭVhDQyRb[#"zf}n-)\ /_⾳&:+xU+г|b$gcoB*s⫓c8&ps[^%~H}_?SFf2f,`Z/8+ E:& ^Åh7؀+C{#lnQ>ׂW ]Uc+J׫}WPGUJUFÉ7#ADjFa +jm/n<2Ci2Ed\EЋH!)PVQSވwN}.F2UF8>Ms=*4\c{tu(m^^I) ,e{9n#*ƱN:EX}~L[(0bj%Ҽ;i1>.a9 ڍSwEz&z-bWLbkpe- <[$1{'.<  N*/UX:ǭB3; Z)Ʃd3NgZMnEYciʄ|˞E,:FYeVkrߛ Hn>kmW"$+yV 8OU۹ SϨWʾdze5KK{P Mm R{qԠbUHn%Ӯ/aa#V }oyhEt,2Zs[#/"%BK{ Os Ca]RKV:VkK Gƪrc 9wfѵ}Rt$_*/ ͨmwMH̙"EX-TA9 Vi[P<Е-\2//3+#F^~e'tXK̨5E?LOsݘ$Tbm.#+`,ksB^4b宛}m;O*glJ1Oogx+\%0~ִ%̙Ϫe_z ,fE'Izp?:>=xyZDdӡd2F-9[Ru<{; d`7>QME6q£qLm.nlu b;&IX*MyZ Zߙ#{gK^'>]Z4tR`4nm6ۛtEӮi'pI!m'.>sPG h9~U ̅APa\rMP\XQ"#}bTt"dfGcmWIVbK}66(E ATG*s/]{mRpNC_jbTI+=ʊKpmvIYdQ" w SmTɷ,㹤Qاx}jCQTzCI)뱴'+GMlǜ= tZeă0Xpj->hs)\7VZ~.W=$fEF翽>؅lcyM5زWR;c ֥ϥ'oFNZ1bnm/JPIJ=* MLm'bsv.:;"TR )^{h0y"9FA5gLDmJ90#𨗙.2ۭ[B*F{J7mmѰ#Hb`aߊӟKB\E$gz(+yը$5Э&X8@ qJtKbr-DBJ8&;CmO ?/Z.e#m I+H%q[#WtzPF8=i8悊ӌsڳf9zJۉt*9Lqzm ?i.?AQrrdT~=="#4xAޔo,3KAGsF;aVX>2EW!I%JV5dh#8ʼn뚺rcoR|̃Ϸ^, P0ku>Ysh"j1H87qkoO&7I5t|W/,(<קpAo7᭺?Jz#]971O Mrq#?ge>&(o>75Ґ XR?55ȯyx hWq _MH+([/fKwOnxv,[&"mRgXطRku%qrx{ mgr-\qVN|;y&9{d[.3_HsH>4Q k߹gcqa S]&,uG9/pm|ovT|C>c55\I6 FWpy~f:+Ms #h1u;}𫓩]dqֶoޓ2R-F5XW) )!$¢nI{*FA7ĝnAz|¡O+GKЗ~d}CI '?V{"u'Y%FjOȂ8| ~U/ÇC ^_:$nF3 K L^"n. ЉkNVt~4Aw{TB,BwCWƾXᘌ3kzFF-E |㫅Kݕ<@'k%}H "+6Y1@++kz9ln2E_r6BI1+ckNHį+I{I"eu tѫ@7U="l`2WvWRհdIl~mqu]Q1z{U'+olrz bM@T<5rR<4jF+I24qQw>cCvMd`eZbaGMnS@*H^_j4+Ɯ2 &Jzܯ:4`?ZKB8 Q=S帓hL#* vs]cn9@=c >lS05KB :Ӓxwm7rhmⱬ`cWDT[=Fc^iʥsdrj i]7xyHEkN9W2JBkGzM37w\Gmy?֤ W.&B_CϠ#R%S+C8G'i[F$*mEk@eWSԫН`)i5:j9ç5躼snIխL:Hd,3Jk斆Z36{Ľ,(B RkS5u+G_u$ b9분M+6W9Egs"mMiNjRZΣ-ި"bLk.ZHșTZE=gjE,I> - ='z& 6F tPKd8ԂcZs(obEgK=D46;b5%v;8ty R-'~ͪOUڜ.&ңVu,1 Ƥ.R/u魏"p]af#=YK39$$J7cSL+oxj,p\gbջkT\2mǭ+j +FZ6֐$qZmI q⚰n/nT^ON3ls w[pqNt8֘.}); pXŽ a[rVQrqZV&Z(}v});Z^?3-Kk+F^3]'^\Ae% ;r݊.R5&9Dsu'Tv8t'۵9_p^ZAXܮ.bh?#[b6ٌ\Є~txH>,4I"-%X]7 Eb䫯'%xM,i W-̢Yr!̲VOos[-6TU=%D1$TGM +рZCqyCӎg {ya,B!o{M\mz%=p뺝"8pJ2ӂayHTǥz-jME"HΈ}Cܟ23< 9yk *BjL~7Ѥe|?Z<;A7b2At8>7\3V'z9O`VK$?:>(':Ʃ?b9+j1խm'h׾_ܥ=N׌Gp( ūPa5~)6.xID%ԬX6-5M^}KD-5ٳ ki d+oŝA|桯Ԩb? i؟W7N,RH |D؍cMNsEyT6ف e?FB~r'/dO; _3rD]>rQf[OW p1#0l>^\0d{Ol#Y ]īM/TX<߆g?PZ>'/m~bKΠF?Qj߿%B/̓R1մvR]G?Ϗ8nN:k();HN4 'MPc&,EL?Qff p~=6M:6mCЏ/S>G%zkDIc&9?_46dc?|J EtX{}GYBYL\8:? >5/nyXL!b@%vUhq1I:4ѨYt3m$̸|8k6h/l'#LjWIY\%kj2M9&^AZ7w"&x9tvde5*bUpT>W_ʙ*Č2eGQҢ_0c#Rƴ$$<<5;+gjB'9i.YJļ8$U)KR…Hڪ3/b[iNԻ&V_"ߧ*@1Lw0V\rN3U#F2*ŚI%+*(çdO NTH"U$ Uc5)jReF`1ϪBQ iZνPxֹ7IW#ևMal"n!in:R%-bC9İ?KK.Rtk|F|$JAR*;ff$7)vRI /#/96sMk[LI5wHrky5 &qX6=ȮS-fEW\Rˆf:3*1횳a$i܄mS`a8o]%}N]&K-⊛:VW"LkT㧭Bi=1M[SH.4Ke9!7sMK[;{T=++>RKwsRmѣ{Sk"qɁiɫ[#\Gs*NPWX-sMjΊXI$u%=+&]nCEܷ==wh4o %BzU"\cEe,ޤY31 #֑zB*odm9隿0ԯ^5ВJDž[K\#36 O~f*z)ՙKZyv(iO,;+3bRܐQm0ji3~4LՆ%~&wZ!#ZM[8Æ=^(1+!^]ɨsH,zWI4+mH -)$>A{Yz>SB}J~Թpk++Qpdaw=mgcKiR<2\\B+Z5#)oU3it3J1&{ Vff9e'V˳\r$p^xP8hڔsǕPu4ڶ^؁eYY[nYiq2yهk5mGrBIJ`H4{i(h ҍb [8ـ ]H=>.}Mq7a8GҔ}EڦkuawrްQV=,~UCGD'%ԓ^1vF|̑o?>$$9޿+g#?vU_L{XZ~xlAU`~LBP { )D)~P!Kh#<jE[Y$t[YJ3!TC| kR} ;H,vk4]}JEL[LʢwwX,ZffrNѳUb6EK#8 dvSdŎPgT!y as a}u J?P6V'*4!ǽW'L[8+'n饱b# F9.*^5 0c5f4%I\֣h1+j*Z8ڷ<ٻ""%suUp3T[$rj TWTM#c ޢIݕ&qEWv=)1+#5ݽ)4[Kt<38ONw*'JVqQN '5IǮ ܥp22ʪ!=]T{ ;rZYP5Wa  1U9jK |Oi:sE巌ړvؙEjڪAH84kmħp7[f[)5fZw'=][*hbKe 6"mF풬 Q5:\#5Rي>Ӝ7CN`]#HHevH<ۅ; ti2J`xzwt'1ʺiŸS𦶖:Y9WQkxDS~sȯj_i$cͭM-o\?-#~~SI_ 0>ª߹~iZi./s2IWgH5M? '6 }ryխZ^?3lmsIݷs;zاhetͼ|կz^w_52X6Rj1B O_ci+\~Hۛ;W- QNN}sY/z;tIzvvZ~-P=QJ_"c敎C68DooOAYrDw[S;zc ~W' Gv/vo2dQcJU=KW 4 J@~FᏗ h+@AY7zOԵ ]֛So@%d=+GI/!G>'H)pNA_#]|?,qYߙo◡?Iyk?f1} a|5˟T'>~5T^dXk_tpVo3xnr=r h:O:Mz,6Ne?wOZS7l.:0j"*Doum^'nЁ].+떬IAZc^!VŚetVJLspT^Ijg*>|x5JG )wz;4o֣l >IݕX5GU-a󞕤HZ3;KIFns6.#ZO1vɚ@URGJ@6ӋMj3#e9Mqc!pTwn8Di\܊Po(ǹ-!qRϙՖcb6Pr֨S*Hb=*8␾j{TJ )#JZUefi p{Ul&o.&˕CzTCnQ}(`w%#ECTӂ;6XjZV6>ewQY:qZY-Yv݋ҟje/xg̡L7CÌ SW6bUƒա'4؞^+N:yN8V,K#rk[Ahde98lXAi[w5̸ugNBۺIkVvkFEl3E7j6aT$EFsńFvmaɮmmҮɡ+MI7Rwlqrnvj_c:k6~טy>rI5mjQvAVޝO. f7 IZ< "X5IdiPW-*c)P;0ۑlXECD9"AQ7*mw>bq[)(?3QU/D[1岹:i>1XdIV$}"+l[ 7jLnuItҋVcoU`Z6tjѥ7!y],+ap&3 ?xE<5g+&)MZ:Yx3]Rv<ꘪʽcCo#ڳRKC͝yIjEf2@]sچmsԷM LcpI,w \ŏj7rػ$SYTH-c9'8-YP{%I+m 3w)*}10kV%f!_ֺVz6;jz7o '>VH&R3ԟ_\\6֪QGͻ^f}OQVn&x3tXs# o*(WbKݺ.=.kvx-Ŵ*rKkS'œImn*I$ZZ-sZ"Яa#RFM,rGK`d ›gG,q7]<*\s;a%֫ QmI2ڮXA!9MI8JwL;IfyobV$֣?u M0пanKpX }S/2#nWiݛJ<{U۷h-, 5 Q){Mb{csrZm Ȃg(z !Z[O 擉=}*yY-Hs8j@֤k ,`%mRX PcWeXnQ3Y/ H ~R{Н!&Hd Uu6m;W.:3u3woFW[ MVsLof |3Fven arJJ;m"r?glj N޵3 7•Tf^9HL֐'{ӂ`In sLhh pN? X(4`֙z3V"qU{5*Ju)7^KIA6xQZ3mX胾䑰жcJV6R¹'*dҔV- g$8) s5+[A|Ȅg[C0H*b *&$ `ywK'yؘ9]9*C'z_>OqȎC~d`:? rhLA"#m6qqFipS Z~-ͧH $3)[?#%$tzLbj);X!Mr Y[v9_払CeKOj~+UđIVDxMVo|]! Da#_ǥU@{Qw=0s5Y^FUL~q\jY+7,'g6QAv^*^_yi7E-g"S.kD?g'SuPES,?>YwT+݁rD^% oxD ?y,9PL`D|z`~4GDIZ.U@g⃁A*:!|MFP +v|ב X+ u;Rqu#8?3g5So0I90ё bb-Te} BFF >ktgP<(^I"? "|?A5vgK>*"wYgYD֬`?uNb=VU.w>=|M }+DW M$wI+RQ u_dG_zvgچBBh5:ݑ<;BۏHV=Se=).ȅ$r);zwc(Xt}n{N6Ji_Bm4"Ճ,ݫ?QGx\Қ/c<"\񊀔a,#j;Z!$ly⩤JrqP[ <=j3JWORt<ԛ22M1q N *QFn] 3Hc4)y T8Ԋq!XsI&U1o SDGc!B43=_RUBtKJatYXѢb嶇ވ4Wx%IM kO9˰E7m}%Jxc#Z?&`_YmFpkUHs<*6nH괔Adp095Wծ 8LV[M#]pEy \ "݉. q]n3Њ-Ž561Y مUK[ޭdaҲ(5ݷ?ֺr3֮^1\Wm*dt$IA9pximWZbW5麌+0Wm}Sp<? fXl(;Ln4˙pk:bA#5-wqCI3(=jMSֺTF }^Zk*Z#$IǗIW21{#{f$m8獩%fĚis->T -AziWfT坳\֩e}yd-l؅TrI_*(1vbr@vfu^|14tT tT>*Lňa/Yj|ֱ݃Wg] '$ϩ-"Ğ[JkzsjvF1th]I.Vac_VBvW=bwcCM`b+ 9e%lh1yD3#b)&?KG.-axg-0/sWׯuCgmg,ȮwSEfnMcM*a~Du}f{4Vp$_Zԯ(}-Bo7Ԗ_=/@J\&VpӖiiKvv_%El zZ-G9o£ []56%M&RV1!xVGs}hmLKK-Ybgu\is&V' _BȅSGa" x#ߥxVuBi0z꺆`dUQy$1Fa m/ur-K1#a],Jq(ryO]4]Ԣz8ML]C+ FA? jƍ{EX;ZWyun[9[Y$9n>Amc<6鳶BkCUkk/2Kq9Sw 5\"LO> igmz}PۇFmܐ*Έ_ULL뼧EBm]h-[" N {wAgG+d(u $txg-ъ[ۂdz+KKbͅp*]m^:4/cT $٢n-jZ<|OV$Mr^V;]Ĉ@b<\%˹`Hʏ騜vZLLTn.[bZBnзD%*9"vDS+ui>dmYoL@qT(@ڄVn#ya6ެZ]E+HV3Rʌn3lcgU?f {[[P*21T2ZYfW)WXPa "-5"{+~E8<^$Ep2-u:/&ηFH/t{ԘOOqW2ϨI\gu5+wu >q݀v|<ըx٣es=[v18 NZf~%#A իe9D_22sJ$N;Tڠ2NŴ鵖E+ @֌c"c)ϥ3|rD)bi3qAoaK)ޠIDL0jR6Pӱl0m&3R_ OCsV4G;ސ;dUT'D6mBm,?Y-KCR*[ɋ`OѪ?(M̳Ӛq$H#Bxf*H{0tk/ἢO 2`9N~zC@YH8O6&ѵ 35/ך#jolT!vǧ4xV>[9Kv?z_^Li)Wխ¬Uv'N'׮߼2_~fĨChv'ې¶ma25|1ٷ}7V-kJˇ L[KI1O܊,^>*[Ltx1mY"tLf8aSYEGE-$י]|BfΘqҸiXq\5>+sec#zX@rNEfg$КDQ:cZ6wtO@{ӑ1Xe9=i {ÃIy{qm1?1\ 4@aÞƁs3+M[PtTo! (I쁵jl< v4KVbE''y1HQQVT$G~*y{fkx'IT(*xc L/Gj-rqVA(/d#çDqRpʞ4)I=71@BCRVgde>,IS75U8*Q!2dvfiqV0kK\렲v)8K쁶"Vd93ZMs%bm&pidN*} A8Nj6Z9늆yD 7 >Y!a_\ʃJ.驊؆VEh3R9mF}T叾+'&Ei-m= yr@ mp{t\PMF"l=k>a޴ބ߹h+\asOP\9Cd(CZմd>%fT^vN3֍%-A&! 2 Bԋkr[Vcp!V1@iZ!?S]DCq6k3ԂOܣ=+մ;iw"Cӊ$i t1R\r*V'9b[huICygvr8֥ ^ܓX1v){wѣ _:u޸q",hXV+>[f k7D\҇.l$RDq">IFm;:jDFM0͋-vȝEiBm(O z[IJ&TΞ{!<@1\Gm&Kd´9U *彼ZmqUE쎬;Ά÷쳔s2_ij.,|ܶIzQ28%LNrVR =k{ gFέ]IqzZyj^nr;}+U</^ ou$Wq$;8kQ ]U7jȳm$c'zsfވ&2k)$e EWc{p4~r95XXs9$WЗvZ؆fZd_fyɂ zM5͡WJq>ۣ`ѓy?t1kmA:ROiڄ p4j{mEFJ1M!1]xSLp᭍e.IQeO)it&SFZ2ިn5}Rᄆ |6\\T[Q]Vkÿj-:GFc#.qG'J3/g)YlϙD1vE^ot8脶{`$*G>JhLy(`ZD'l1֦eVU)zYrB4:$10ˎ[ɫSii !ӊ41/Uئ /5]tpÞu 0F~ƭ6.N7xr5`i۩/Z,9Fm3ZV#{f.[<46URFibo}<:If|gdmϮxDs 6BTu,%TM) c(LFUCfp3Rn$g4TXDER[; =3>R5bz*SBmv*Jé5MjMS+>@M *Y<쒻:=+é swd=tV_NÜ2 F)k,JE_Q R)@stXkx p1Rʑb2(JJ f-pM4Л#elorjp۔(dN$8OilG!Sv^%xH2i2c|2#i s*YZ:y5!/ȫ-{,LMWŜPzOC H7Fkn𶴠N5cdr&#@_gGlV1gx>˝v|qQיz l>.AO9~k;Hh>gVȅ~Yuٌ D?="1@`EcיKYC|O[рy_c+t~tEvN0}7%T1z/N. GL?k3WD/ccN) )hl~0[:!w$2_ .Œ!\6cpw2nfj6|=/Q|m.$,{W;0޼:إ,$dyUC1ֳОKbV$Nĩ*ؔ2ZZahnPȇ=Nvˤ D/,jVil9Pcic(\3cNEcݺ5ѣrHͻp?EhIjS>vťܲd;֍ڇoOz=.:`I`a6i<yP>) 7EEdeHf`<2LxM7r] +Gl$sM頞SSMP+դc(sfT9PM4Siܞ @B=sڥ7 qTJi蕣uVeiXpynSؒK`8id,sj^7zTS%QVAH %y\󛫂Rn^:֍.%`: Ұa)^Cv4\IئԿap`lfKMUNp}i﹛Wߊ]d V"V-;-NjM {L3<Ȗa1j{TVDȡfN*YI=K&dsڬ9 = \f4VkI;IM4+;\,X.aO*z摖/xmfg`HMc,QԩkC5amN"Q&!y!KpW[JFSZCfԠD'Z%Z8b$DrֱZHE't,-m;jxj >h'[e_zrN167UՋrI=:;sꝘa<jԱ'hۂ$Ue_SÒFinD̕=+r ;-)&esИ |L}_[$Knj,~u#;.vO.HebuiDFrp^up׹XG"Z[`LlL~J#սSTHоsf(<ޛYu(h}Liu~֢X5U/4wOBpU#%WYVV4]qSwgEzm=WYz5+_)+FzOtX{+#$vsVo, H&0Onb$Ft%3K^Ϥ,sIqzP=TƉ9IbE:[!ѸTnLyԻltZ[VB_dKgg$%`r)ʽYKwaYB=k%f2f4 !+Zs-,1 m4c,|b9l9Ok^m_sֹ1`֚dEI{†fv{Ԭ$XLBhsq}vz"74jBW\LݡrI'h5tq_dtwnEw4ky?Z]ICu3=j9Z;B_yN:JN+ы[ yo1j{°ʢ&9ȡC:;]aWw5 j5GV9P cx\l-ŤBFWJڜ9+;"K}WPp&DmnHG'=+ڢudm H=4ܞiGi}5$BR/gG:UvGWzTZOP wvKd1)d_NkOS)bW?cN0}EFŧbhmvWUp0dojK/F,F5nጚko$*x/ֶ3f)ƳYǭ\ V팬 0'I18\\Yj?fX)<̨fjmG*=%؊i P+.6yPncӱWĂm8ĚPFqSd%A>2Ex H&< ⢐*S3 Pr5lSp9V(Lm>drc}%̞]o+Fij60~k,-\wMhd=z݇6bAVa+-U7+R!̈ 5AGmF@$(T1zЈ nJk# @^c7.)<?($SK[]n*@=M = hSSQ1ڕS,${a=j)c*vQru'i i]UpzSCj {"8k?{[ZdD EG?m$ȪB58?OcOW]r%_EV#Srv60:a'D?7|q#F ?b~%CxLHLs)ӃD_I4$w{'?~mKK?^ဨP_bx/Wc x;CZ-0[1Q~ N,R7?2OޏXPl/`jĘ K_`w5ݱ}ѝ%noa5;go-XRm`AvBlia%eLnʸ慻,$ OUMnǦ:;"5LKeqR[YPtdɡ}1WKHOwH!GF9RE($ f-؁C&~VxQ4$@BCn9 } 2߅K70 SSv&w#u@p1 Q]ZNG"wcPemrC;۲ E'МQJM3GG6 +Zoj UL8Te'aއ ǯFT8 ghV.zh{n/>Q޳c7Lз*ō>xZO,?SXt#Disp Yh7 b2Epe\rEa$-CM+'CߟLDe ĞtbfNE' k}dWbOj'qFmkF A8-fHy&#{JdTi+|Q#M HQjڤDCYYvs&}ʡx `ԫ6(?3JLnԐ䯫3D74E-t >@jUdmp6w^) n٠I8y ZחWSiv\,+~SsQJŨ,-o"]sNW.F{֭s+Wl潷-xn[[*̞vZt̒qZ&<7iX#}4]y϶%@^JpR{4$t*e v8\͵-b! BpII[wepOZz6W<űwt qS. *sZ6ÿ|Ӯ5]S7-l>ZHF7JyH,^)^{zZMVrKkyqbѫԍ)d#T H8c_W$ycv u{n"" i%{Tuf5'nRueGvh4yhiVio,DC+̄ϭ7vH&vh^\iI%sqy5M]ɴ5u=3H$beYQoF u7 2E ,E&Ռ?Tf6O)3GTxL0BѸNHJGsZRcU$x-FH!"uBgbyMFdjvj!A,b.Bvvtd sڣM=<n zRN]mlE0=j$-nJH݃v>b]Z;4"~u5[3JRɌz {Ϥj3Ȗr:U3Hdݻ{SO<]Hx#SKfX$˸ A51`VH\шWOӚc/n<1nGkfH}\c("c&)ٞ5݊4p_8š#(#jSiMAVb8I\#\B ׉)9+W7i6-Ď{Uy4{)Q73R@]4ɣhᘙq{7`&m+ya8G u) ͅŬqO jܾ̑1Cp1}б$31]qYfyf9 D^=wC̓ZlZ̐\iƆ%c_Jinf꺆?5psseg|$(\YCm9{H"GM,pgv!ڦWI4pF0ƪ`Gأd (N9L[qm::ٗemݔ3gwq*mlW,JMJij; Ȫ0P+#H.>BW?60+Hsgpo$ywI; Akq],?(,6jQ 1PzsNKfitoLȀ/4ٴ^teBvezW4VhrIA’xZy `yҳ]}QAoAn'\OBdx(J߆4UiqkK1IV2iģ=a/ֶmQ$&[oY\( ORrNJO&7Don9I23Lj=c s{0#ҳfЯe y|)QR^q҉pz۹,%GʝZСDVL,\JeDV=ZhޘĄcUaHpPJ8lCbwl% 8V[i>o8*A_fF$geGޕ +2$+O&y-+Z]J+ךH^ Md(&R lԴVĀ^ #?JW YW-*kK+v5ϗSYo˷>hM>RBkӣin 0)\OWc26Z<0xLwŋwvĀ'PF8儴\츑Mɴ :F n_da*DbV\1{2]jG8$dYd qPD*D3 P\d֛2Ȩ$|ҕ.M͍ا>YpghȦ+LyQaNȾm4+G Ö T Rw7&Gɷ UYd1z(b19!AQlz #E3ҮG9IR}RBۣoҖdKfcYγ׋ouc2M9Lsڴ ϊUFI:*sBM[5_fLgkTX|1`6TuV9eعCHH\]U>cS/_2/ O8*Lx>()> M 3:/n<+(ry:JH9!PI/|Q!o'r@V23D 1z:?#[XH;K":F%a~RrUX>,jJ1SM蟘kEʏT|U∅._(Si3UI <&b$f_va9E^}HZ^Xor%qҮAyf|roݶOJݦ^ӗ F8&ă텬KlϟGLl>,?μ5DRUPZ9ԏ`AjMv/Z.jH'sXSYeoܬ=Y̦E[&7.$GdyQsZW0&R8:t֓Ni5Pttn7xlWm!"@Dp=0اeu!s?y$~Ştf3 f3l5MV}\{+GwIhwFMD=ʜw|dU=cP5TԒhZͬo'.7qYI{r]L7PcRDףqXE+s>^V\b8-͠FM= ⮞:(+V=jY|5--/`GimwzV ݣpJeemso"'j[jQ236i^63Ѽnn7W Z ʽdZЋ)Q .smZIy(: zZb4=XZ# k{kmtC2߭[ޏ^+V=E]89s3[}L-m>1g0d^/@m>Kڑ&1w)ѬG _jTJIs&'zȂ5Cv+V$oMqX8R}ZL9ye!j[n\H2iϣ *hX3VXF+m=jH5s9oښ+ 3~ur7 &>XQe _KGQTދ\V&QlNlk47812S}l,22&B) dga+,c@ҪBKY3hv:vɜPCРbXDŽe =hfnQ8\+m#JڐA޳' sQX[PK'%ڂRiR,yWPL夓quX9k -G^s}rv'K;~ S{le9ݧ"!a4aq$_*:U- \mm#pG_I}kf-`t]XZ? b U,$ 46CG#dW8zēܫ4,A-}۵Iv]BP6VxeJPAB9X^dt\5 kxvRE-Dk:fFGzO[Du5T{i% DnM "0aTiTY?q׿5! xR}"F!E TNGѸKӌO4jQڞ` 2zz̉ax܉O"DfӷHL*W r-rr=Y4[lIq4;XghxO[_xpZDJȃ\*8;U2GWjڔ%-ܗ`x՗4L*CDR:WMyMb1|o$fܺ4| 'u!y%Jq~z"(K $? IKPb?A\D|Dw|eߋ) 9]+'a`=%fO7|/̷ԣQwaڥ/ďH=z\$Jwa+xr5BcyK!+Ի:lg!tn/ ۓ-gVm#a9SY0#kӌUՙo+]ЄviV?J$B`3t"4k~x%bEhI?ͧ1QFUD#ůtp1'!»@7n\}3ʉ?v/Ff>\4h32AjYؕ%5>nK|1CZ[38bȼnf2ëy ܜ=IaJ KJQNץKJS~+%eBf3Xͷ&7ʜv}.*2p+^gj6^gWG>׭Z'Mq_ |tƙ۾REb5Oj:liQjGèL$q\bHCdV,=$<jFFwSrU4Ъ Vob FAd-.!jo̤ tTM8!i1pO]F%#n%lsǥ9C(P^2 K) V@0E9cbqH1$Sg4)vHOT=zRK:;FҝSn6D\'iģFВAq(hrN :,/N}AJĖ,3Ǵ-1o c+n&a!ʓ{V7F<9NoRr򧱪w+qс$1Y.;]&S %&9Qd&l3ɃP(;ӵŢ-j#j`wACх#2I|+z n,B1ܦ.݃u>TϲSӓЧsqd-IIԊؠ'8";_bs֖\Z˹v5/Pr]NWq!èCzct<9tjڗSFCǥJL{ݱ]|=xقpZ\åxm 8faiãA3W; ZW%19+϶$W:Ԗj$|JmSYklߜ+[Ht&q$:+y++)+0]N_zd@l՛^FqooX׿ 7#}:z=RKv1fAs7,\$%x{"֩sIlF*6WqZG)-g)RF ]&S.0ȫ.-币KdَBEV }+xJ׹^VjPp-R4>xx;hLd֥/tkv*@nVȬ%< *NvrIsL")I=ԯr,}MV&FM2YF#%oNf4m >zڜ$% &hĹ;]7sGr<-^ V6! J_+cyIgF\oQ}N{Fia,U 0 BhSp_jƚLIZ[O3/d\qU[od6)cC2n\#L!1A"+u,2"JR7}A,p4h)|U$]ŋYfX/z? EW{6uԶWЫsnƤMZAr˃ WA/y[Ԑ^Jz[]Gz/C ʊ'6Q{/-6mPmjA',vvv)De_Q|ԧ~+r+4" q:iD65G5V~hR1M\$FcJTZ7rI R[$$}I'}kChQ8(BǧҷXe(p9Qd *d/;mV֬t(qƋw.Y$6E4p(m{{X H)n-.=eh<})nY$c8D=(SU͎Xd=VeorQV>/ >wz4;K;ktV|J[&aZKs); [yN(xA`Ej3w\U0i@K d=]y:qҚPNɱ{@1i..Ӑ@nR}hwWdP6L& ,ќzcҚ)5k"XI6Ҡ{UZU ֥e{VM>40HIi!72y)4q{4Rou-J؛jr,=ïT6wr0Xc}Rˍ_u Ckΰt{K,x%,k5qkh5K}B(3ֲ]ii :gp#bHv:VJnvF}B)ְ$ $kkX}J#*KjWbeW\yB ȩ-~@ZёX:%\J)Iģp/d *0-iQpYTMv(1Zqxʌ5i4#%F{WelO ;"y"ˣĚt)\ӗYs-.np5gck`={!V"B]F =2Mjݗ*naVUq)ϫ[6z膠RS1;Y5kfN8JTϹlrYge\j@Ij u\dZoڨ;8M h .R'qިK4hZ̡.}1l )o OrjoԉVIX|9}!"YB⴬3lfGAOSJF֚tׇɲ%=+C>1ӌh9EHJ 7z- 7d[Ґ"Wn-5 FP ޗ|]@hP?Jt#sj>P8Ų dP ;d Ɉ$t4 ʹzևv,9elxiH8 A1=iNI1z̮YO"c(^i"\7iJp QaY"# >NyحmNFRG9=0Ѡ iV"2Tct7<5m##Z1h–E<@f,ɽH' 2oBCwci SiK B!XT=ĕZId̿CEݶFܫB) aFǟ,x^|hVo]ح%~dk=;O?fx#`-=W KY3!=aW/;Oq_D;{Z",WW ?e.j+7:lw ʵt[ڜGȫ0~#_-u2(Yzk|̜MT~>%D$}):[Cp1t kkQ :ҩ,y5)Þ2TY#.3bv+=*(GH;\|s4g k5RG+ZQwp`W;ݞ5ʁړE]2Z#GZ"101;&OK.j޾4ҧS%nrnTEO&0a9jG]=XZWD14۫X"60ҡ=%zLq*%As \uUHlCP_]ǥx ewdSGZ8vK2?Rƴ՚ڏe]!h`szbVɾivƹd݊դVwB(2qؚc){rHk=Y6EʹAژ=qWɰ=iV&G*2*kKImNAHb&}=+z+DD.~lbI]ݟRZ nyoZ>T=V|8t/mîA'}/O޴& f7nV;c=i6e#fBM ɕwFA%AlZiΡ-#s֭+7f\\wi[sV$7GJim6G뵏Q&ϳ~f>_6 !ӣ$p:>Ӛ4iU_/^6g; `-yDj1KRLWSS;CiBKկmuBZcszՋ+x,<ɑ]d?Jv*fs\}-=HK\nE8ynwe9(4 nJw HKz>2!Q~TN^B)]7+:,ĩQM߰ybX=Zw~H<XI âdy ħVvlccaQ+-/rsf|?;:8ռof( 2fHgqK 05i+6wmn Oe?S ] [ ~fTFL^w2dRç;]$ޥq Xţrv|d{\[ p#9H{[KsV+麔JX84pkT@?U fTSC3U9h:C$>Q>О{D|Avd9sMmzn|z`M x.}:v0hkp)=4ǻ֟* ' t hheȩGd@/I̽-ZGrjfMv1K&E}Q<j||-cc{Qi1ZcLvJZu*ORJY=u\rit;"9ةB#@8 im0\=y.v܊\H#2v"*{4o޶9\Ax@icxb܄zNi2^qCOIv+]Dp3mELEmMqUO3d{/T<ԖЅN̑ҭZ'< ʍN9D@x?;9XE=*A5aIOP,ڕS(K J]'#=}>*,pp3{ⵥ>IV<;OLtSP[5O:C*L?WI$2qM3oYW^Hk&AHbOZ(?1^~nO%B\6?+|`=*٭X{/i^04˵]7RSheQjW%̗&un[MǕ$Si%Es ޹9pYcUVAk7,L|R\ k;$7Zѵ#.7\灂jROfވrc֞Z" ?OPMu!gOP1u LMDSF)8IW#1$Aj[Ư`bJZ }z!$.CTD8 j H" `wvJ!I|U[ބUQSڑ{++ :Rp -$9Qǥ4~9܎pNin&76J!xB9ZBtϵG F{ЄyWT|⟐uQQţCve+-g>7H= [Q;b{8&+$T;JMf_1g*Nk)G'5Gl jGrsI#W@/_1[9Xo#Ʒp >kܼ!lKT691CVbF$TurGcHTEt#VqjW9ia @vzz"6ݶդ@w+[{C)#DɤRY+R˘p;R{2BKOkK(_,hE $D]֤\0ڠqbIpMǞOiM\^ddf9JNOq1*R2ǎ*ZG !\翠qT`JsVc+n;ۻ=EP?:}k;0o.Vl!Ur1 mhfX֒Gr3)mnHhF]ߵd%[[EJp8S7+,՝@gZ6.? _'4k] Ii<;HU+yJ߸a효resGJ nH:&a4ep uZ’OE([hd5jYn#F#jt52Mh7wۮE銳ڭ ;^p2G=.%.ڎAGc#kM#.2Z|q'h.HB}k[$YHJ&)thnv6RoE6xwIfĆ!A⚕@gt_e%ܧ8 ,ˬv';'^BdA$qcX-&[ .IaPI*o)`˷C1> ;E,j|l?[ mM/2U KIGQ 2„)I!}@vYROYDcڦAZh{[SR\>QFGM7PYw9c"|;:gm-,lsm_UÊ\dc,GB"D:)'Տ+5Ǚl'+x˚ړ5"JEHI#>`%4ķ.DWP[(jT\./ik*X&IHw5J*CVM>TȮY,Nzf&p1\hj5Z[vih1{Z}=+4"$44m>Q2hcMBґp 8 ;-t-'t>M6K;ncs)<-DVO-U^]j6܄{.4v;?Gmun\Ua`z=)fTڡXA,8+\W)ȐBZ=1=SJ,9l+I'KM➬\e"< ک\H`ƥǨR%њѓOj{i|Y5tc=4vd@p1C}-ḣ`CzS6 {Tɮ(qVgCw6&sI\9Uz$!VLbf2jIS)F=.4\Z<1WЛ.+hʧq-J_/N5*fYKdlqI.F6Ӱ5b$me8#O nUX%9p2Jg%=)C{޵Ͱ%QL5a'(91mn6=s9fk=iP'XcV)g]c`2$ʰ?] R36$S J#Ҹa.&嫝vػks3̧!Bg<0ܰ$v[:y [<{UeRcd& Ė\`ZtgQ9E/FRk XPHkG9۷b ,vt-rBB4漉cCI=BYQ 3 ;.q*ˁBاbtJd֣fV1Kp{pARI=(BT}s@c9YAH?) ЇnA'ޛ bm(FCw{ J'`[|N + Sw,.!М$'&$rQW{DwEψi-$^Gf O+ۖ+k6c;?~G>°aOrM;֋~~GOQ☈ eӃZ^9i ڕa߅9smk~"xTۼr;*ލKA ;XMtJ>~FI ylOeġ hJJ'ny[>,n|aciiqU`y}*5X&≼ɮf ;ZͿ+(s3x_eO]. 2ơ?~P[0sJ]QO⦱cZeԷpd?jj6fa ;銥M;kdax?⏄"V&B`tqdM~hGڠrxAS}Q:g_|K :|Dm O|dnͦ0#׷8R4ZzTqG/kpVr`ҒnAGa'"rDKV{l<̳k oS:$vGyZm伤sa54BG"6d)3qFcPq"*d`+ ѝ)0R%[XDXspxh $\GMj۵ь9HtC/'҉Ày+j Nm㸌uZJEFCjNkX\ .dzj)- "I$X4Zl4ICd6rycIŧrSQ܊u`zm)X_6myl*9L樝zԊOAk-R{I (~K=VqŎ[;zV"$kkwuzë%yHb͍ZQF_bI,%miqYu 0nur:TEABƚjځQOӮigp[)Oshydz`g5N}o\K[#TOw48݉Kwnlg#sP$aiq%ㆺ?ԞAAQd YFC=1h4澒UrNv\$Gov6~+*դs׳2itwO$4zꚖ<) +=j!Ȃy,`<ҖVTV[jEmD y]%hȍ>ʍ"X>̲*$h$ծOY-yFLHsTVwFUnėܿQVnD '5F*4kp#MYQnbO($\-iitkT}im լĞ\Neo~«qs w^F+>ֻͭ-!N[ybF㞕<+u< S+7ىap͝YCkh*cp=IBQ;HV{UukZ2*!5kܱ}o=ΰdAT׶+$ٹFN[) l0$M%ςsZ8 DYz2yW{Q;AkG 8jMɵkؼ=*Y#{P tibcwrMԚϵVYadj]Gi4Bەh.+ǣY-ܶ uZEvΑ1vTzmOi3kUۻf…[fès7[9k#wzL{n*25ۜdF^e%۽=H9\sҋRJ$KvtˣH9(t,$D(J j@IO~5(u |Ь4@\r95NH܇}MYk"L*s=i @9xTo3(g#)$E{Aچ5wU@56TBL6-'bXx Ӄ13mHȥJbF߿KBҸ&23bMl&=Tޡ.IVXX5()Ukomceȴ.U'rjǚ}:A$HXkEwVkūӏGIw`E'1>֗ -PcVؼR_-^S+ LrX`cޫa ^Aw7=qmF#&ۅ4eGv{_$F&p/]jBPͩ]O5O$r"#aO9W8f{WW"RS;cE>m4˹n9˹'rz ;9'^mݲVL{5nw"+:I7]0[]L-y{u 0\奍!F糶2Kiiw(<+EtuZ?ٖaB(@Y3\w#Tmm Z[&Qz;aeݞ| ³B)Jw7ф`7P)xnJW!Ru2 8TM:}Kc,t{RyQj{!>V$ qT7mDU$ p+wM5mQ9զ(B?69rOqp@pʃi8]Q+q>R3 La2;q`qW*}*X$OU*Й#j5dXg HOcSӲs+.GiA9lPO_jV:!j3ګtTq!SSKARԦM*+Cދ;N0='6Ny,x:ZZvVVE^3\b3yjxګGA5 f̓DO$M4|ږ](7;QX~R {RN#)G޺/TeTg zU~L{RY*J$cUMaGy\%͌yِGFXf,vz<n260*ll14b>ҮXh"4j[qWf#[idUGQSe . *{QkVast*M V]N)#P<ҝ;X+h\ EAnzPX9ܤne^h$n#ۨm޴ԡ Er?K,r.mQ0$xMPc^4Ch{({d"عSVMʹbuҶ 4ՙ?|N[w)lfPǪq_zZޤE4GuK"r4YsRg|%7>6^]n\a~f'IiwJcW6sAķaE[6Dw-m'Nbwq %3Z1 r"Ƒ47wMˌBOAXW*EUQiji(B{%12!\=wdSދKtNķQ{.1֤)nfn%2 K{U[kQBպW-YH{K)TU %ऒt緥; YYBn޳陋J8EQHQ|V=h,I#i,y=[؄5fd<J.a4DLwQ*lZ4J4化U ߺƇN"]|g,W[]L$dqZlBIyV#Wk_u~YbU@ W4R[9m8<X΋K9?~0kn!mE>&ؒzZKl \I~_J)9&ϵV2p1#;K '8$cVi! ?Bѻ)GJZ C'{`U೶+Bǥ1=vf=q袒XQ9;TҶ&{e5m`T7 6Bx#=djZID{sC0Sc1=Kw^f#{T+k~UI;:M$ M-{I'4$2Y ڈ"dP|oZ74'.2.R@~8$$DO*d*' O=-*e18-dnҲgjV)YE0>^_|1ezUjH~¯ՏTD~jMa]]=¯ Ġ]@sߟj/B9m?](n~x:- b.@aVx$`ԸQYUgI‡,gsr^byVe8dm#؃Sknkvz0Gn!UYN9iD`:T[(se9c$[Z6ʰ؅W {dq *W &lc?sm0 G'a&e%;T]+it °L㯥-ՙ-ĥ3ڰuR֩\jJẒ#v L-t˷YȖnar 1 5 <2Ѥ#G >Bq}z.dE#iMID `¡'ؼAk'`Cf[گ89%QմkRYK}wmjg7#5٥̙>zȓb{^ >"m^DI8kVfI˙>s=&&coy|E{_kx+Ĵ1 qPlF=}՛.NTsE6u8l۷*k"*(eK"qNOiNINjrڤaK&q=k a1 xtӵAh]zuE1?0n汳w.N:, Ғ&6v=-u!Mķc'p>bwpdj}*[-Kb>$(;usa8=B,=*s;*8zv[IFnq ث/3oa&عV-AKv0ݻӵc/ vm,I2dv eEKVch_pi+܎3Lf,S=u{ tRӨy'84?3>TN:E4 K"ϕ)JP=);]SVBpiXI_v9ձ߅:!FNN#O2n6JMYjY0["Ir{Tpi"i$|9&hONU4Σ PE65r]7{.NzõhNjKBO5HZdB0)] ڑ`=*[il0KQ%FA9+=i ܍Vuj5<)F#QA <-h3 R-&&}hABĚOľJXrOg=ηvŤg/ Ժh^!XKLvv4Bmu'2+ h S8.*/ԫ(Ff&v=l# p09hpV[s p9hk%AڔYnp^:o|n.aiY#alRh湌F`;} ?غĕeӌf\!.j68ڇjҼc 42 9ن#>`d6q]"w6 &3"[KR%+WI %]-:>K4PG28U<0Liuv$ၴv Ϳd<5A+-&MSeaJM&7ysڎ@d(li-"TteyѥMnRh3,RSᷜ≵8,6vcZB*$VJkkh\

؅*?`bvsSbFFR{ƒ9gT@񳨦l5;g#?Js$R@裂9\U0E#\,R<v;e<\ٕ\R*rT8ȺSڜɘ#I6ʉ(q)NnЯcvYX86Y'XIqfr)¹7}}j؍zANP4i)݊ $I9Pp=jٙ68luKNEH8W$FiA^ik) +j\Kq0FVmNr5l<4.A4fT[C ԐE"ᝃFoziX˿N~ؚ[%\e x%69cک;&\QҬ Z܂G9V::tJ2OZxnm.4)(Oe[Ķ"So|<;Zzū}sϥ"TCЁW)InWŵ&`↧K 'd0=+XWT =1Vr\.]x>#\W7@+6x!֚vV3]2,j6$Һ! ԏZW9o}L9Ue23Q͑cօ=/YT^;ѷAM!4uOP@5hY#;\k9oI[Da]̎8rV1Y[YT1B@!?i[ ̼b)*0znـҗmfhdUda/ ҟAݽ /؅I[ibK*өRdu4"]Nbۥ!q:j7>‘UNsOk͎ 3ʃdK x<q(BK4_g|.1@j6xP` 5;[ M)j:TAZ.bn䴮Fgq8IQ^$3 #nm!6!fXlJJZُR9~ѯfʁG?Zgw'Nv{ MleLu:me˙Xw/@J̣onYɫt]F6cMvn8k[\ե>G9W>X+F썹9Ukm(ԄCuidHëVnΩ sYЕh9rR-$Rv3y wp*r1T66] UI&\349#0'Ȗ%:eh:ڳO{ȣ1=)-v} "tyin'+hKh4_3{:ǥZk}Jh]5C&?TWZeՕ`UX^EmOa o-*g' h;f-sڭ!6sFTKoZ'ޣ CQ@ sVv2ݑ2vՄq-AxL@57ĉV8@yGzn]U{*u7s{XUDjٴx /i:Fjݲ+9#O)oݟՋx#OJbzEgWVޢ"+=}(qC)s-Z,a*psRVwS^؈ՏJZ+dgZ^BK1jtWuOCNnڑiwUH,zer3Oԥ+Wv$ǷҽoB^'}Rsl⎼2r<$>Ễo"DÂG˟Nq_ڕo<"wЌc~ݫSϔmV.~ x+ɣR+I10ZƋvDV&b̰=~yLdx;Օէ{n[? cڷy,KgcWЉ6&0tnu^(KI!JKq+GSRݤlݸO'KʆU=Tgm=Qv[fH|G05=ivzoc/ 4Vn|m,c[$3 !sr >OkV :iM}!#6"kN [kzNU |nrH*x Tw>}\4l'=SBf$d݆ٖxۙ&C>CHѝ빔tP{RBk]7UL9 dUE`gQ}lSAh/2j6gw*~#FHn(ffAlo$VH$lx kBvdK|_"I+Lq$ٴ$i) ,k1.LN{S'twՖ! z 5Kx:}ÒK}*Ig`HҲmi˫尹V|w`1[yBw3vǹ;i>̬g(8.V㿭W13@7Zm )qje@brj *ǚRc"Ev jFRXHNGukX~ 6I^t#yhY!Af?0@1$ErUTgاh`ڒ*M\Mv)gґ,TKQ0,V ->Q#+u[591O*`2dz4V9.]ƝsiZ>RZ=#cxRP$qUU UkJMkB w,}lsJQy.<_2#V&eK 5MP w2e)޽U/`aP6OTO)5$$z:[+9y q8~4|[[)ȗj$ޝҾ XܸU6x^2yqǽtJH\);0C(e #ϯ" T!^]cMY-II0CcڡYծ]A\:zRVAӚdeH/S Z (9gjOJUs-/ iD6 pXVL4. ިV}T6Б^dUrc-W(P/N h^ՀV 9rLQk[Ayikz(0c\k}HFǷJq+9na˭3dt#脡׫npbwbHs֞qU~q";N36 dsF䫕ep$##iJA@"l\S)8ZHRrALQg(1K Mvaqwvż mUl2>ljz=L׆ "HLO M|ҹyN5zӒJ;TQVP2Tr\J>g($NydDm4k_XjwmWkmKg J4[Q凥jiqd.!_G''qA @*he l5?)*cCPqa֧iaoނr5I@aڥ^QOrv5*O[zgpVhx$)n#RF!W4a-FB!} eS8OOje7b\ww;:7,8v.bE1(Ar + ' 5,U6 7('=63 +AAI*{qSPzM|$lQy)67qPiWgܟ0p0ꦘhz!$!%xےiĴ8h3tԖ`TfO~8%EǨ#ʓКj$m $+Z.4%!޴NvDڹS<'CeEB&u$ڵ2x"6JbsRէ%7tK 3pkKfN' r7 Yl1[U-81qRՎ*m"K9YU2*gk3O1M>׫zWb =KʑP9Yb 6XQHYݕ$r4Cz=n_" 5.VzZRzo{p6cZ顛m,z4ERMAc_M&-ќr-vsYr@sژ((|nr8m(E[kQR\} I{!ʏQ&nK)NjVsyC굥 N+vjZ-8d*J>2Sլ$lrv5kv]9֥8O5v&Mp#*-&E}ZNl՜ޕDa2Xrk%s܍lك,WM$`sTeK* ji=FX9_uU(ՄS2Hw8C5[VAiX'dgGO'aXA3b@94E#nFGR}pn!ӂ;=ŧy+l~iK?g+iҟeqӭ\3aTCmP%[RpAfj+Ƽ>l1}0.1-n*6( jNm緈Dc;=.խJ$%T  I;e7})Xi]t@Yc` *z ]3ޛ}iq-Qķ+/~q; cЮY^-)y 󓊫sq%oBƓ!HO"C!󜀑h*j0>FHc4s`pbU7{ s,?f&h{>śԠ[S9\p{Zn!ӵSQؓr&K<#{J%zl(Y 6MyU-DˉMIK#xƬ)EH" 1?#k/۲Jg֭ǤwYbgAOҡ?2F$`"!-#O2,GcW7Fu+r GbC"&@0Vܬsoz$쮚}+/ǵS]IW{udX7 HfYn! de@Ni;jfW*LTERs< -YJcjAJ (<ޫ9R^i0Q%k-MqQ.hg%ȌpVKH'Pd_U1i#a|4rn Ee/!O$VtDA{R{:Μ[x[5F{B@cU%&TGyfKc%zl#МSЙ]КtXIS}GP7-%P57Wd׏}PZEwxcZ,Lvү΍5(A>F>wZ#eO Q'K;MJ鴛ۻk/.0y氕=P-uoF@c ܑS_[Ό(1ޡ%b*-NAǖ: $0)Zq]^jN}j8U8 ҇I x9dݐҐDr{Hݟ^)k^X`H1MSj J=8R-hʑG!Ҷc5HNz7e/"oq97*>޵_i*NYx.1#v_SƤ]=fᐘVErcH7/]pN1Ul%Y8=G]޶$9 =6<֓ YY6΄Ev#HUn2̲Tv4Nпo-:g"HC~h=F*SSDH+RB)PH<`_'8QI;I t#*3VH޵VM$Wp9ÐTSl7|EJ%Q*rz#BtsT=jCߊw,,G\ <)K9 UGrgkr%6?;~&[ݱKKP!UQHRj>c=(cCЯtm,]<&2Žhg+H pk5mN\>Y(%C!k'Hv,m '}hY!{yTdpGr5g!hԷZ@>ָ 6*$z֪VzrRGUϦja' ,Cۭzus+dᔞ@;jxbr%@vV?S=`]ASLG vų #6gw1PvDt+%Jr#BHˏҡ4aqiH^h)_b1F`Fy@bN} ;!ZpA_JxFcKOrWg0EJ%GJ%>-cq1T4P1?>>LmX[[I]Xⵯ 浌(;}+0#o#RԋRDPۚ]1rҟC6a]a= el*RٔnTwy8lqHm6mxUčjT]‚qt'9ڽ+;]ܤմ0)ndst|*W}:X$ X UF6z\qrHIчNƠ2;[n;KIh>-6[ؼ`s}R#ڝF;dhTαFb%'UU{./dEvJ9;H$m\GYR 9sqi'[=ڳLWzԱ'HBeOs\ˏ)4}MlZ~uv9H3ntR8OS3AOȴYؤ.T%~3oOq,&MJBp Q N͝ѥ$D2;R9 8k 1UaI⳶kYy5ffat/+(n|,r'yj3ږ0rTwOaHS%2UIj vu^˜Ѽm#4Pp` zM ))4'A'€r&{\k+/ 0%3hr 852*; l-m-WLςނCe+"z}20[ r*5V^-+m%(Zie4 `LVQp zzH_i=sP>fy';ZM "5pn[V%o!Z/$K$kD^嗴G (kִVh[J庹@\2q]H*W1Wjsf}*8u]UkC֣KjBɌ.8JGv`ٚvZk=OJ4bOJb GU$o&h!!,;Ma֗3mcѴOOI{{3!HݪaZպepTٶry"iD&FH~J8Gjۘ"R\$0mrEV1\-8Ǔj\9hfPџҹMSHcjRi܎dKQw5dZѣ徂u.1(HwKSSN4W1{Vwke#l/Ƞ(wGP$+c͞w|'#p*memuH&89ϵZn.,"nю?NKh8'p/YaK4q䝡Ұ敮]S{BS-COR6;eݵN4/ܚi$#0Mmb6wE$Bb9ֳZHŷ+hʌi,9e*[B0W4fݽͻoAV~'O,-(]۞j܇@d:2DWxcMd !e'i_B9v!eޤ!,,3hW*ՊAck w{mY8y%8;;FGD]\ЎEE#%U1Z%jG t)_IRi/rdtIhג- #5W-p(v*{ޱ Γ8s?Luыlm\3lpyҳ mvt,ѭ+FI_&:%MfĖ*Uÿ|!Zu~pf)ȮݿZ 㹆y5E;+w'Gdz}ǵ""0@$ \J̕@e*`E$Q$Hri4=nBgLMTR$x5] Io<]д@ rYv,dv A4 Kң2lkOj*G'p^wfF&39_֨mOrG@>f'rm+*EaE *0;BZF & Tei 4RMnWhT_MUy$X gTXw,67$E*jWi'xش`c8juՇ,5:3$dx&Q1=g rG+xu !}e/s #13ʩ躸v֤z׈OYK\.ߴ 8Ci=([E)bNU:3q% t{IdѶH +/8#fh$ 烎Qt'=%jHG56aͭZ_G-D+F}z1֑\S|.f_d<"]nkSܝ)$6$R,}?¼kej<%6cۑHA8}+ =DŽ1-zsP[PH5b"-J`WLBwlHOZsǧjrF'J$Dڄ $>w1'ҥpHCw[G{_%.C{V%k/g8et%mTS$?TK]Q\hrFe&AuwH32rsT"b$~T+kjs呅TXWIʓqPռq'b<L@J79H䌌֞nm6kB(TD##IJ#*NqQ )9"W3Em,ͼ*)֥9H+d+[*RgMpb% #a噦`uu-{&[Z[JK-Fk]-Ƨ'\Ԧ쬈^Fiu5c[7 f8QWeJю#ZjBv^Tٳ*}m-nnchwp7 UdW ,3Jqn\ZMh ` ڋ=Iry b#]fQO'6ef^"3u5,c8#I5$sozn]ڥ[߈KxI$yV/ cMO=*EQ1 ێ2(Z|RJ3vB b!dQ~Php2mP$АJ 7إh+лmqymRUwM\QʪS!qQU-XLU\mlv6@H@TS);,!AJFIFC    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?f=r;[cOқt(${Wl҃ڐ׭i:q{O)kxG"@3\?EZos vc2?UG BN28 l5+3#)d?^cs4cl*_ڗM' 'VYfo,0bP=M.ˢ.o*y@۹Փiv+<3bG':F}7j( dPHQIiFRImw*$|=vo T~4--L om6୎ISڲtdͿ W(<*v}y׳I=ĭ$ŋrkZqwg6Dơtrrj8=wҒZ"P,F:f8̱c\Jc#n<Al $+𗃯bRQ, #5熭-&Xc;L =~je7_1ęU#}+9NRڝ[1![iI-߁t2Qn]*\-c= ᴖi% WPR;dJ߿BF2ĕȏ4Ar$ `Kpx0+Fi2[$M1S[29[Z'0 ~Y"b}(#s׭Op-ʂ3q'AhRmmΦgV6$]jY> `Uּ]% 2y<WnB#XWIb##(ˣif˫\A.P`#pIZ5ofam C.z\Ǚk.-"0~o ynB*ͼ~^s6HMHd sw4($NMtж$A~U9fQ K N~&ETScտº9 h#hr6'[KHqRNn 2SMopJ$jthYWޜjK9+*=29Dw^Ҵa=yٞH\ZF?<˹"mTf99B? x)"`Tif[x=6t'pUȦiUT[8Շ 5XeUG@ R5+xa3]>[]b{c"Iቒ0w4ԣw0 [<6c=jj`!^>܌|&iyGfXmvˁ1Qd]V@D¾a 4A#nG,3_Hx#tt el~m tص[mʣFOץr%jQ7(0sUQЊ* +[sݼsy둟Q}랭%Q qzR;U :=2k^##}9ukI[,n>pEH$U_}yUԗ34rIڹ{I'unnƢcL'aJ2FOzH8|ڟ4=TH$SM+膓{ o Ջd`(=^ Mup <>hR1[2i)F~قbD?+ ATyzCc{;U!#B̲.@T܉m%ط$B3U#'&4Dܖ!N)BT@/ˣ]\j5* _ KdEҺE8I?Lã8dWmt+9L ǃ,]ɫ \Q[%rf?vHŤ,ʭ>uk8Zܚ‰ֻgmz?762P;RKSLV&5Ҳ+c+$:uPiopAoM8hڅEN8s C8O3_QeXϬYDX" *;Vt:w7#Y%:(#6H7vų~q;u^SHd!Tܧ'=Vk%7E3 ";I?5-> G{hO$mnāҙܱߩTr{}MUm!;g`~*iQď:|ǟT 9C6inRA\p?㓎=`7ڤjpKc["+!*i&zR sK;D#$|۹sTaGV=cch`W'w$[R$?sEdjb{mFK6Uwu_Igug$pțvӿsƖ?g'X?/d, dEֵwv{(YG*MOMGk L6WЫhbǦZkXPc۷X3$ <r;K;ic#ej.G1pXG&kݯu9boF1Oehq(+in- !#bQtRXu[1T`.wVzi|u/6L RH LB] NKK؟3?7 $lQP+!k8󑊖+m\BL0;XӞEԞtQv(qQ* Iv߽3qH[ҺQfv*G}0rϥime%-Ұag-#8#u8Z,N\{vBu Ҟ+>B#7fՋC...U9?CfFky8c+B+7N8*mDp  mɞ`-Ie9GR:Uk90_~m_GOʠ1~rtFP#˒1Bh.Yo$c?yOjdSF?.c5~cޅX B.Ku|^qrFR]dPLʒ ɺDB`W'pK"8]KycnM>验MG+Co Eo(I֭(n=5p"hT0G''֓7mվ*znx-9"K2S.R9bOz#yl>}BFIY5Q'&r?Lҟzд4I-̓; 0x 9iAtx(H'=_ʼDҵU@}Bۂ1Wht;3mqߴn'6쬋QEIQEQEQEQEQEQEQEQLT)v 'f˽gK}D0| wO,#K2+;g\eѢZ}jIFuR{bPPQEQT4K., >#((((((((((+|de_߹#%3~Lq^^o iYc9튖]:[i\ njvџIq=ᕣn#gIɦ3oR-2ܗdS!K5Rigy˹ .qF2ii HIwIo6&V1ҶV!>ubpEb@7Ʃ"fZ  @p~=H"mf-ͪ1G]9ĦlVqe17S+"Dvvq1X-$0sTP;O͜m ,6q m n3jWP*(9LʼKYm!q #wP< qZ^ʸ*~zUg2@lAeUjTPaݎ*I ̅t@"C l-ecg)3V?GF* u"lSe d6dSa~#xRMoj޶[ N_A4e/kV0[q^ŠF6,_Aj=>i-` bAWr#;fcI"wjï&݉,'ު&[~s ʒVA=ZBr> h'<Wx+""g᠅io~|D\ +7"GMqHVe\kP0?R+!dhZޭ&G>K\41dڪŃ=1^wizljUu ckȄW H"ֳQQE0}\dkoC E1$A7 "\-2-\Rq\ag*H"؂;~Wo\7s)A~rz jmmylLLWpAERLLW?RKu `o"S7ib2:?f4إMq2-D;sX5z=y?M³BѺY#@q_0 >a#Ӛ^j% < ~3 ܦ 9Je| o`UJ{d 38WL:I#K纴N$a?QoJ\"cM%z3jmLnuhZed $A Eix, a>drQ 8qzI;g0=G o]@YN$~贇*xz4l>R@ޗPtme{>add=sZ~'4vut7Fo:k|?heƝ, ;wPMh"HaQ u{aiR]}Ǩdb?j07mF@4 4m\5}b,Imm| NNqHgACM?sSym,&#8dxr!*. OHjO>T.)tl0EM /ou י*Fu) SҴMj2]319$Xz߉4.Wo5̑#2*q? KGZccl-탬KUg qQA.bw s(SΘr8.v\ SM/LKeʎmsUմ뛽>|uf%hG#JP{vnKcYʬ &g:ЃEf\J5e?U>ޟr>KEgY?~bU?~bYܿEQԏyKҏmO}brHjqqJwQܷET҃*?ʟ=?+ZiP( C˵2KGkeHhQsnhY6Hesrc%ݿFnF$䎧"iD9{ &{Մ,%sZƭ3$`Oe wU6K/kF\zgn[_( î q\Xs(o!{8Y ykF4P{sCX-ZC3Ƀs˻b0.IS`u-vu%Q."+Tf :kw-!BϮy(|]fdq3JSYjA5y)zK5lI- {0{bd>mhm͂z#)0=+0KBW c&e}i}y2Fr>SN!}BK+h~q`2>YZ6hn9 cPxhg6tXF dqH%*7Q/r1)'Z\!4庲$V]D8K}6W|3uU]Y0`UdU;Ve_"+Iv\*$YfOL.rI݀:5%ۺ O~j-|'VJVʾ.[[e8it;).VE}kVZ[Dª4|sڨ˩][K xC[0 ՟4gkM{[$q޳#-s( {g;Y!Eqʺ/)mPnBOSOj篮a[!sdpTz#'mKYCc=z{V@ 2>^CVi*a7㰼zң AivU`}TWs&,AƘ%ݍÓZm^\'l==n< -ƣ[yQ#pTk-즷v| TƝu+YdpyL}XF >>][6ý!ݚZ4Hrrz*20p8ðvڤ|E#?$7m8c;ǜb "Xd֍Q cR#g>QUa*؎(b|{R\[NnRI14(Q_g$G>cw7,H 'X,,> "2:Ӻ/C{F-OpUcWnsVŜ2j qބ3H؅e班t1iH>m\x˲vm9ȭ+Kx`ּ(6SVDW=%|`v&em1 zE5H2psz py5ҷ6AJ81[Z{q=j3G=18㯽?zh4sH.O&{k.v5b6*޻~ AʅɵA ~#^iEU1Z3uݪ_\d*I?wurB5W{WM47vfzK&@z}Gu]@ލG*<{ᩉ\ۓ+Z?Ґ OŻU@]7 ~+xOSC FEʇ*B(mϔk;K7cG-SUTmi@!9(èT gi^_ Ē$8Gc6aԟ52Oj:?#?ҷ昅O,=b)TYΘw?htˏj hWB#jFr٪O=FLgˋHoU"5AIʴq$jр#dI5ƻ gs_g=CEg:10BsOc}ҍ>}]`g:~fs}}[QX_as}ҋ+?nQG`/1?b_)}Va:~f Gخ}Va*~f1ђ(Q$ uI4ԂKeV6y'F:\|{uLPsZTbrRGH2l0j2U_aXC|vď^qM7Y@EPЀs_]5nQ+ .sui,mcA=3SBFI\Be]2[}*k{Ot2yi[{+Vx!Ԭ%(gV *QzpOQYbjm:"&0#ӡSҼJmo҃%Av8i`oKM̵r-B#߯P57*EY;kXݮ$`DGIZwiHdDAb O=zCbvzUA.e+'O^JзԾ^4 9LeI9/NztXd~ ǥHuK [\.cLIiJ%Z{{ ۧU_GΜ."I$du_\p>pS5č'@k~qOZB1Gs*=Vq̙-&{]$eF6956icZ=ϗ 3}Edm}.">mN5g kY%Fx~M8#V&K=7R7I VxWtmvN7dWRDdSAk"2j9*լAg/1!CWGIێ*m&F@"(qjq$-帐46mo+rI۩ QN95`ިPFO|Ԓ0cϥREvM ozaԙCupy'C -ۼoT7vy|wqJՎ1dw0\)9R KAeB[#qkIE9\gvx]΄g+i+ >uγW=jĖhe 9污xۈ؜SzK+K"'V N}*[ }u#p#g8Rg"ŸbsW7L* dg"ux>7Rs{c$lh eҿE!<݇zރQ@gOrV=4u MwGX~]jYjVڬZ}J0#b57 ^5{MEufżO H2R%ԟg/z mZ_?λ;(n`2+>;DP_^i&IcF8W[Kmq Qч QNsMk6BMF޸#gițakl)cv|v ~&)m,c_Ujz2gCV/yJ6U qL[ۨݯq.q >E-dfK,gȬ?Bkc> $/0*IoGjM܋.^g;PI109#ju6k(K`ꤕ<&627"DXmK,_|7!8%'wQSꈧξ0f &ƺhQΟ=8g*T(=ƚjw5=` c?H|X5;oh5VIA2Fk(牢56du#țIiG3MNq1ЭèI=Ė2}>⣴j7Jl4]F3]m$Gs]ƒp.1 sMif_+].A{in%F%Su\sqEc-16Fsxbڲ8}Qk;hJeKt _E 'R501f"2F~sis[WN,qyJ91O}E%ThGBq.5sMcᛋqG'/f( kYyz#)nWP}hzç6.w;R I$ɓF.OzTs]\^>Lm2̻h=zuY"[ nR5ʂN3Yq=W*<vuqߟҶneu.ݾѴ/ +Z%ʉEmSqҢRv3uKymT zjP]ƒں/[2],O8ت#=+ARXV"sU+Uـ2'~m5AEt0,rxgH'@dVh#ңX@n֢Ҡ c޹SFf$WX}F@2y1[/T$]f a V })43˕j3~96^XGsuUd\0nֳtp ],WS`=_W!%C}9W1hOio4cqJ6+\͎P/Rx<#tdtk(#$t>5`p{jN"Fi$2Ggi\[) t_'\f*5E{k;21jsI3{U&} 8R*qP? (Z s 8  M@\(w7wm@*hhX^7{.+QU/;=1#{ɼ)*NN3>vܷEgkns%Вh;&!O(M=4 )?mN'{H>d=;O8 6h[^G? VEX=zqWѼK`ppGB  Ebj!HNw2J$?QCi+UٷEGo:\[s6ma1nWy䐜QEEQ@#2bTdpbi`>~<}_H,>\ ͓݀ s.no"'>U"o0pUk⸂gU\튍bI2ۏN,k|G1ڵ*xS{&*۔3jK /V?kF,Ǵ z#^;־_T~!#lWr;˲7$3Nd{ ] co;9}kI*[_m3,u O_(=Ίj|r @ø?֬ v@XH[-(_SPN:i|vĄu p1PKtyL78w~kS:|mʍT9Sh\z޹wA3FesOG#3ݹGz+C3GQ"T8'jhnjz] M|/;/_JxmRĥh9SZG ŜrUd<1"G.=aa?7Or lHv Wy޺k(;Bbp=+Di|1 ҵQI>x.+Ql%esǮ1\3Mg*"< CATAo XѸyJ0w6pF@FT''f㞹W Pc:UXl64bN0qBE[I GqHɔ.B gz(DNW_g\ S Dk ק?ْ΢X>TM?Ԯ[T6%";2\E~f$X*/tK&# #dCA=Rg=!?*.NFzSah~ R;ipLq9c#sTn ڢIO_+=߈i9a#x=>n٨/.۵i ѹrH`=Am<,0bqwzG%L^ٷdUhۯ*.C1z}ݯ+JFRAyvF]ԾőՔIޠFmj)uݬYqL0 Bxx%\䊗Wmͻz0[^61VfvӠŖiƘYv>Y(T|FrjwF?~@ebKc=6JQXCwAì{k#_Lkie`ؿ6}jW0JMŹl >JP69˞٩4ȝ#Hcooh06iV#J]N@MkK)p* Ă)PG*G'CE` iWol,."2g8Y% ":rjv%HS銟XpwWRnASCԞE]mj8\3n zU;$d8C_A*Rʼj q^d,d'%c<+E{4j0iCR2%VPn ANc-Gk9;C$W[AE/ΑGcw#m,I' +@QZ_ $3VwzgvpI42 #nG^*@}Ihvո&}3CVДTm>|[6:X7{5XN x޻4O `ɓGTH} +ok>(E8 Fz6;ח|BWfh`I+TiP,n/ ei!2Q$g JvzUyXx|?:KJi9=дkB񍵵%՜! +.$?s"MN*(wGuKWՂ"2۫resP’mNQL (j<kgyo2I|& v8jc# )=rƨx&7VC+WjMpOv(A+/W0^lֵ@qn!zekge%h ;G^)ynz]io&#=6^c'ao&~Jߘt“hbDWu39{օU*z֏cW(~0!V\C`3GKִ`E!N.iB+Jxmò$Gw (WAQY!l"8P,Z{[Kam >r^Y{uٵUda{5-B8‰6JhbkiF`Ғ͊32\oÚd漁r9o51]w ¯=i E(iT9Ia7!?Zu 8рjnR]LʼnQgڀ°i,ָYWyelN^X[~n1SBh$rc/cUeݕasW"alo :ʫMj6:߇3z6SE2;8{D528 :zv(ܨظ k~x4K14P}:FzH<h?ŷSZjư2K7dj57FE`dR9\~rڒ㙏nLwJk̙i*۱}8Bivrsi1N2>X@y@dd+[Vյ [i[8>kkOm,cф,%'bl, y kI 3IOA3דڹ'.BmLA7fLc$eMDhjqqȤ7/aw8<޲|AUGF`T\Pxd-بeeS=+7T.6Xr#@Hާڛi+&+8!%F*v"q5eIynۂ- cbFF Gm[YIm/$e 9s$Wr*v35}IE7Q8fJuhZl$I,;smqWVݧm Ri"zHor!bRUqߞաmw,щ㞌3}6Cl.Xʓ@Py+[^[[ #Y@rq½*\DB0S\٬GLXsY.J*3$J٦YBT(SiUeF[=Goj$y$X ju&L6|O<.j2l*tW{ۄl3Mv(Pr3==?QH4~_"z=(PWxu M6,Wyj} MZؙ|&4SA )A cH=ƻLջίF#dC Obd ?Α G&u^+U 5jqxr;ki͊2)Vpz?ۻͅwj-TyO ʜnGN  ? :l7ڏ]?H$R}\-7.YIAʹmk~&|Kq ~5^ R/5Lڵ槪YGip$f21Pw۩ArH j{'m7xksW;:ݍV58"tQ~Uxv"KSlei;udfö-[::NydgTs7k<_GCCғeFrck?f<hu׫p%T|heUY $@g)lũ7ժ:嵎G *(+U~{N-f'UuU-FHʺjZm]W8wnW{meX#I3Ps=0wQI+V Wsq`4>;[B" m\jέ@"MڠiVy?`}N`IX_ )-AwcpR3 n4 LBZ淳I~dG#ֳ[PY1bv=GYnZ2M>b>Qjϙ""sY[EfiDo0C}x'Qp$JaqiHgIR9 go*klݹzDF3]igHHp0:VkZ}^Hc Iy&\rsJ( J'ek,|5 3e*ݪ %%M5nH|2̬?08v )ջ{k3F1渜ًfh!$`G,IuDCE%ߐO=Z#nIg D᱑CfnF YK{TyJ9~t/i9y*wBO<>㻛O>Ski<] zP䘟ݱhZ=H=ƼuTZ '럹4[`4dH)AL4@isLEuck|\_fpCqڋm:_2R $f9Z4$I҆ހ$5hH.j0iA 3J F>(j\[ޜ`J1P K\`҆ 3(5jP})(4JQL KZ())i(ľ!y.0d]sOG$:e;(FfqБ+IrxҠ}e'5$2H ^qZ;!#O̸G+SB|@v"s uspw_RD߸iroB=J+!vgRM`bؑHVIٛc* ' +eVQHѺk94NWMcni`eYr<6 H8oSҹlW"HqAf$ʤ]ָ3}G+aF |TR m!I L8 szPIfnq<A֡hbUN3CfhWl3nP/ VEŅޣ(mݗ<^+m.X,ymB>*HX#ahRak[X% $I< ޕ3Sۻ=ݒ]p:g=5gs$>l銵dnNy>zb;9;_kZpz:ujk/A%ɴ鰅>ַ7RI'n_Ҭ;+ePO\1ڛ&-Z䕮tB l,Ӆma($!W.rd.Uݿ;3$sv ;@c>M&p Q?eéj; MО=8d˂sVch +ǂGRR,͸=sPSsKrE"j0=i+A#UwmYxڇ.A `{UnjNbk\2=>ԫ;A7dP!ld*Ix<7[Ov§) WӤRYi, ߏҰ[YHuWvc2[G8= R:/Bjok%|ՋiTnP_v67Bx&LK^X\c;Xu>m&H*3lrLk!(zT\F&wm|cVrfT*]3KzU˜$AR8ޣ/!бF9VVw J|s;qMzqVԱZ1˶T7)1^??ZǞHa}+_Q `qܲ6=jȊޭ$6/`)HVnPB+G.XjӳH-W<*2hD ~° C[9?W,2ӭP IR~`CW`;wY"!i7}V{g ~| j -!lG)=X[-Onp3ںT>U?W8,1\ vu#=)cҪϥ; t^xe kϿzGv·v.s \iAx&z` wSZvhE<Znh?4g>L4}覃E<POLQSQN HPj0Ԡ҃Q58p>&iARL CuϩsL >v- SJ$#r~t1Hy5;ee2yy|ܑȯfW骰FiUW;d"q#kba%Jq\vp$ *sp$dR:o61u F$y#b! >+88#hr%F=Q5hqi5ɴ|('#N;g38zHDDpqp8{j[woۺ-BpeAvcҬC0B AVe2\w~zUvkpHh.GbfNT A7 7R),,p^Qiml.5 Y gh%}Lo5.5C#[RB;x%vW _3iOo9$`85 ,UG#ZSwF< X>[w|+9xlzVYjk7Oe3W$h=Hs;2cI ٻsv 9ҕWvi 4ݽCnְQ)h7f@D$v`:"[Đ2&f$$_ޱ|MDNőᔞ986NK6|3.GYK '>6U'_höf9rvuXZsAo#ϭO5 jBZƬd$mt69E##5f * XD/(2dA uE =>[m::<Jic n !*yTl8Rv]Sƣwbsj0<VuVH:JI&r\Sq޶ 1Lwr?*2ʀ}McmRdTNkfo9@0/j-BA}OzՊ}=̊ 7ipI觠U1TpU e|2` sުǣk _ q]yژmL:ھma:&Vb5;i9IW\}kYܼlJT`$pzi\.cç̊91G6 J8TV-1E<Ĥ,3MV\_Ke ?P:ږ;˹P3n*H3zSJ eJ6`f>0R:Gf/)Mi",0:T% KIl6,e`۶_Ƭt pУp<=Ѳ\n$gimv{e}% 9拧yΥ=l F_ƶQ ;0+ۊ=URTW:#E9|d` N4Ҽc |Z4QA֜)@hcQoFxC0R4Mz@e(Fi€  8f4.} iր$ Kjvḥ̨q H^ tO2(܌oElg8 +2~=)2?Y҃L(4 zp>>yD҆ aJ J\4њw4҃@j<-\췆363d:Qq|S,[|Y68f?7t{l%^A=z z;e¥%ZխLJof*vFz ~IRi#-YPzcIp;ֵsM٧7!C+cIftӂvhs9>Zֳ.*42z5cDys_ֶcbPHP:W3z񎅣<ƽ .-91׭(=;1M0096Su0D9 CEV4\qһ鴫;.&aF hrI3t']:t`iMw;r>g횎8p%2O_W 0ye_NoU\SDI 89Z ygOB'\&4'8-#ڹȻ$ op?s~+˺·,k"RNEU %'LOL>h$L6>Jh Ot E2~`})ߗW;22ATYdqM)c=Sԝ:RD@I8a9.y"B://~O' ;SvJDq?_֟+c8 3O¸Y\BVcF*i-RYDdH? ,|mWrt ;׽L>x]`?Jcd?v5s^dp;YGzUK r Nc@n_ zΌ |͎bc֗[$Ƽw Q;|֐YraqY6/R~B>R~{4#E$v8'1U|=jMg94c)n)X l @R6ppk/aYH$ʱ}hw/n>X< ƒA$Җ9sCEmaѐ<wϘM>Vb[!C\#f+|¹sZ57Pa3WJXDNGjEu!Q 'yŽ@͙C]T]X*AP`677oɿÐ:duÕfN04 HKH)Gf((sKm.hŒRQ p4S~)i1JL4̞أ&iҊ<vj0isx>:rW?5'/a5@ (4PyJOZxϽ4Q~isLP<585G\;-/5fo/,.s?*&ќ`mPosa~Q,+%eWh]0ߞ5 ƿ&t?erIݴ繬mV@ptUF>J;-~IM*N֖ bgh/=Fx܃i q-݌Rܶl!\^+*%xkkgkygn9LgUK+-.$6Mҧ}5 7-('뚝bxsR)*eblg1r7*}eog%{0 7뵿F}.u ";ԕFnkїεo:25Z}v ̚|r6THim'H5-Y6sBY@#ڼ{4MySqRUO O^1V<6T0T@B` +m0nbJŪF!\zFװ.G'zӗh*99bGmlt2V9mֿ#ΊBNGqc9Q C<,$4B5-8p=k9\[]]ԚsZ/U8^9cLpt ")_kЋȮ3=|w 0^5p۲3RC6"0F3;V',Fj[$>K"֗ o Qtp r8X=ЩW/H J( ʎFsM0!.뎸Wmϯ4iI>Cx/! 0BʅF1Zg&9O$P^ÌS ŕt>k P&a&7ZHv 袵3J0`X"{bJwgqV81᫮)2 rG5Zs6OaVj Z3xNǨxv7do v>-I`?ɿ¼zз;a*8h˜8=})699I*y9,cr:溟Ϗ(W*5xx؞SBBRP `ec>׷f y0ucgY,<$ I!X8UJ",UH93Yx=Tu ń9U'&@F2*{̬c,azu1pڤr 8[k+s{'l+4rљ!v+؟f?],tQn^B{s6 !xpFňv=j}:.6Z<;Y|cy3r: ~1I%oG;Aouc-*g9=qZ/t:9u[9ܬp@ѢӑJ,_ nJKc 緵d>9 >\Z\"1}ijc#vFX≴نbs #kA r*֗%>R @AYPve#2+OX'cjv}˨\=x =FkHNMIҴ2>a^T酾\ɜH{֧e"ȷRZ`00=g%fDt>Gm"7HH߳>BkoK^xaxoc {zU GLe-Nf-aG2}X`Ǟ4kCՌBpv2FA"(*낛Hϩ9td .y5 գXK9 @%?5?Nw2 ?T7qN.wGPԉ_*6IdW'ן5%?oj\=(PxEϰ>rq^W6vW/qc!̗>anRh.z̺dQj*"B#6GYb)Z0yP;|y}o"?m Es/cj2">AzAǥ;i~!_4uo$nS:ڎe*5~vƤ~wkN}+b~TQYicF 7^|Elu種>{I{Q=z_x5gXEeCb\ǁ4_F=J; gY̽G{; H VvcfpG;O99b?9r!޸E(rH8:ΰY2]qݜ:{թ<ɮ}?0LW;T㑎zVHܙ]̑"y G>3{ief" <.ysZ;E0FakIU A"L;\LH'PdkR39OCR֤ɵSd=>C/} ?gaFhd+\xOoቤ㟺2+6lOWfWbgx?:fUoT~J~$nY$F!$Dn?{0ҫisi]jؒ|O9M Z}Ji*[e#EXxⷷh/!︶t$+wm<7&ra[/#˂:rʑ`nq@iG[ ,,VHASxjIG7i&zS|GHpz0$ ں2LԄv hO\|LY rH1ap!HDXW<FzI$kKO3ܷMl7I#FkԿyPp('rXTү63!lǥh#ƹ%wHȓZrnV$I3W#?=nK_ O0ۊ/llEW_yP8U:d5~J~b]'}icvqJ{\=@^E5&U3. j.1>޾jQУ Mݫ< ^G<7%^\`]O?ZjK2d}R}4+И[FE zQmn*˸1,~r,6795KcMWVd\*;AʈMF5&)F=ss;n±!U$ל̟o?λv;R"&ٓΔ9^q\gY#m\9;jz(Ŝy>PME$M@w1ѥ`W4;ؤ9ǽVE#9'9;3څKsفvLwQ+i vio~?!Q,`.}ɩ)em# ~P٘&(>-;Zayofo+#r\X &'wHb)P]YWY*2ݎ*֙|BqMThԣrcQNcaOeB&]BqUY\72fJ)q"*!Q}Xۿu\B ʫ5Kk8W8&@hg%AӔWɮOΪާ#}fn|ͪ*3<SSVӭƼhbVmXlH(.z/,Cj?jU:HɊM`~dV1HTMHª=;0<$QugZ'&Fcָe/?*TȍZ@tx2j~֣Kb}bgahu>Jзu)#<P..H/tbjNZ? ֔:gz߅ixv񦎧_7??jXm?K6W+wzI1B},O}9P|sN_h=PV@Eb$G\Ԋ+ƥd@*A9dES?w4ReEZ!>\mcLbg H$ka{6 |A}#;f'q~HQD71ytjꎎW# ޸[ ˼*/?L򻺸p@? q&31>2Hjeֈ݌0u8-R *IXla{4v bHYW]7riF]jvUA: B❿cM I늑F9)B8GҜ(C s(Y~|UFRcҐn 52$7_ff^Z6r?tҁG*~*Z9O>^xUC㩦sSǷs0gr>0Ӽ7yM%b'#A8M 1*F㓍i%E;' ;J8 Sⴹ*A/>ZFfFIUFG }@!H|[{nK]7KTg5A\%0q$c|{Umiu%*9LlGU"ݓ4v`}SiVv.^DñA*昷bI`A X,]F|-cOI#hNZ]ǮZ^wKч4~doVX'%$d%CaЏP[\iw(w 7E2l_c:׷EdX͂`|!sZ\=.i%kgj9ǩ~ڰ6M.[gb7?l>1[OgYΖ0} sj+_j6=t, GU}b71s%|fœ&ºeum 9m:Ϋ\iqM)b*RC5(8+E=dH?}M9ɌY{VVMSV_.{€t aI-u tu)|ѐnghW5i44RԭxwPu?yiqs3GhiL oݷbN#Fk:9msVڇSkv N [{iH@2،>9:ݏm=BXyXګWe)h$Fꎠ䬵&լ4F,@kcV7Hmg`">n] HEX"(UQmu[<6fy-ln<βS8Pd NJ5 xZtvldce^OSؗ8}½DfO1 :)+hإܢɇ\5z.&ye/$[\ W7mΗq4m#IqpW5E)2)|Qz!2Բ\k||,~`@Vմ^>B?*9n,{Ho4hiwY |區>^<,EWP4qBj$ZHi[wjj~}(3)*[ dus+OyfRb1[]{9#Ec9 x"sޜH q^ oX(q^,Jzן+VaXz5< ]}MyO[2UC!Yd!<jwp!ha@iRx\kv9Geҧ"*DnPҪͮhf?(fqckURԼqMJ[5 $̃ޝYdf'ƨ=zηjRNu$Ҥ;^Gq+*0~2 rw_8~$HΏ`#Oz_9&(,/hEhe*Qd`~5Q(;IjbxMtsErfuZ] XO"|VX JZ"*0ăSp*@ӇfLs!\'55Zȗ1 FqT VMt;YRh?ӴrvI;5=֒#(݉kA+ km?y RSMr1ګ:M)5~n^HY@gNn^Ao8QHai8M$&Hנ ׇ dmyunF:A@ Ӕ#P=B Ft'XHh#$vM*ɦLn,R"sQ *N [qX1lu՝}½.0Cs߷= -fȂY9tc|Vztz&ڻ.!Uc1@b2\40#VY4,g~=Ŵ2X;b\L iOFK'𩴨. ~AaqQqZkfǻpEw>@Y$pw;*x:13dn|q޺ ӭXL(9V׎ŋJ^. Cgg3+rG~OJ[EYcT$PFl.MX\Չ ly;qAדv̍OvƣKmm<6KF'8p xZgH2\[An1=j#wgrE{<'Iݕ d\V8Wc>~;:iAp's~ԉNe֪?W twc"9#[ЁqSJp}>aKHG[?RȎjF,w 6MFS+m3G.4YZ|e8kq;[< MUº>>M$eݠϝ$u֭$u+{eC@FNh—3S5fI?vDs팏PA#09^-it'ŗ~Eٯ! #duGz֛wq$_ ~ubЌm d&䎾S#Q˩C-6藆['-jmO@jmmT @q^s "@,d<)@GVg4ܗ~ ;Y*!YW:KzS9#Ra~\p*lG3Qɧ3o;W?(Jdߕ# Ӻ/ҁe»w2i0XI{/JʷW$u{~' ݴ>*b H?W&&7{33]3Fj Au`bT~cc|n' :Slf#,d8uڼf7)fPN,ZlԢ;XI^4.9= 1'csV9<[4(IlzuɨyD2Mc]vC5oOnOw(E]-O3 R'tNF[h<11@zGbb4<-!RT|yq&q XdH|b:)k7>4;<[$arFzr+/V4u< h0~5ضҦ R{yGCv^5 x\4Z|e4~Qڂ{&1]F&<1z ,<)à{ngi$y$n$4PI%Jܐ05Qc3N z3Nb+k(S5A; HTuawk? B0F+*0V݊c/̀Y{T1C+D $~*Q|jQ h&X-.8bvZHhCoԃEz0>O3V5% 1<)4kutG,wepPN!Ιx_҅SݓtLgIQ`& )y1\,1I+, 0Ob"e<҅qi9/QN_,~@INA x┲H[$(KNF3.nTl]N8ڧi*\wZ-)c8ȦT ;lkzbHČ("9LEN8?#UR犫q;oQ=oSweLL8s޻O%iI{6; 8W-MCkl ϯzӳHzyBjN\1L&~~u0 ©W "KH' ߭;m}uiwyl%q;As+NM.NFps O}?ldSqqTu/[jWIiP<`.D59$e^;t\G@qX2D-d#ߐ(C73sw4V3Uf<Nz֕7ఉe,9#UbDx0}4$(/*횽(P TF;Kt`8ӬWz“|B<ұ,O$*̶ipvzэ>@Q;4Ɋ{@L 1X"2d=2p$\}.rX")8jܹUZIR0vt(A Ot* m71ޱT˿V@~GJ m[X1'Jz7/o Fs!Q̀xRy)]oo|cl?Jn]]FѴ n+:B9=Jn/8D?wݵq}s_Fah'{QZQS|wks,28$on b7:Qo#*I }85iXZ826qL],k 3m[z92G^ %Nc9fvDrs+A>֗kwm~~ue`q&1ؔSU7Coi4`f]&q,|uu,Gv]@mKyni; QĖygGY\_~KvqS]ݣw_yB?–ՂɦON6#/2#xM6^?u9CZQAxXF?z#I `CVo9}u {^k\OB~%zr3 d>ZA}i\s[_k.G&?8x7m?էD(˱*YsոtKr iK-}&s--Iǘ+?g#i4"F'Pn'YMKU ŚCpqg";H@~\JA>F /lA ۽ TW?̶q\ʏu'Q TVs*'Ri"(jWyVy@D5D@SM;+ӧ%E wcot1Gx͇Z=Q\)Z^(Z ɚz$g$SY mOIGVb*DW Vy>e԰ 9`qـA8إԦ%'2]ƣylJtHozRWĺVЅe9MB;ՠIs;8PܐˑA/H>uGjw)hnffa# gj.$` cvrY@nS}2F@-m2ȫ`c]Hઓ*ɲ*y}ӽqsƓqwJfTLIlu& U=F?]v8]wV|qEdR30qTqzȄb3HrN=3J&a5a)A4)-=*ҁ-Aw27bF2Xg?Zӥߥ"?+)jyL0я qylƽ*-;AMk玤 c:ԓ9#ژN C ᳍>a"K$15&teSX{9#GM23SP=) X'iFzSi9C,XB%@yYDQf$v~$]lXq0Ȯk)Y7"}¯jzL>'TԔqq{XIrpǠ֥; 4Y =ҹ)V\ W-m6G(IROV$WzuPƋZ IŔQe[K>v^A s緭;vKp`l^I !$gy̌8RʯB`CqȪ Lnc D|)=̝P( N3Dbgb|}kU!Xyuq,b`:Zds2~c !A-ZTm5c~1+xuR}Vs1JwⱥrE%b6r]C7>Չ9 FzE֟nѩK)r$Eʟñ/|/_xvcpfr{2C38ŚK7kfj'N rUo5}kxUxKJ{H7@p)dΎXu8lҡH|3HO^F\^`Fx ><COeYI1!/;-)i-̃;.lj:sVlA}}8v2a9 ?%~5en8wڸtfu ޷`OuւIoq,\DrX*IwP`˦4c%G !_Sa5(V?݅/+#Oagsuz)_ ]{s6zsh۟ F])76dVR;M/UQ)dm#ZZ]寇!td]JzXVST4C4x˨I5sqqve;zF足mHfBOvO?d]ֵitƵI.F79Ě4G>vLR! 3#'kz-ե^aPeom?W5u-SvkI$7¦~b}3RZՑJ NVc갩k$w329TckϯEdʤ v Ԭ#eXcΪI=k's!S%'Sb]&dqkA$ OF:]ݻyP"-ݓnr:6bR89XઞQQO1W?a0' Gm+xZ$S܎pB?FnO i#qwS-_%ldtF"yrOWQۨ4!HF*9'4^dI^H]׳88=G{x$ HW8> R^(@C8.9eۆ.++maЃ+sN DwzE0ʽΙrl8N`8UUgd*ho%HOw6NgJ|Ktn2s9?fEKlңQ KgS   )I cz27 팅vqi$8 A4NpHt=fLt׺]俲wK F;c\Q#sFBC0A5[\%ݛmRkA2'5bK| 9?ΠbOҗ(\A]5yVLtD_"-W7( p0xxv'yDS?*ydÌ5V4ݧ2$Merq"}:$-׍O^d)"nC _|S4\\xw';U5Vۣ}I HDž>r}㘠4 n!i@O%gMn*n2gD#e9gGzAfR kӤYJĈgfVP`^89A.+6c y\s)"Ԙr)\6RMկ2+.2;5京^w/qr֫0n 2:/<0׺Bh%9sޥ>TyU|GnTp+bZ\0ۓ]]9g? Y$̮Hg՘+coa҃DҬAcU.#9dO^$@)j5r)cK2z.#!N T$}A-cDCT_6x?򡫏؋86W)I3^i \GƽO+o[F*"$"I^?C]glJ.$|e??ʻ)|&MYs#>H?5Y1+`k'~"-tlczHx>rQQ4fSVE_T@wMmVx8ԍqƖ߆q->(h]us3Ymo ?>rQ#L:[mF2ضUeVAY j[!I'o׃DV>=N©-tw[DR61q#q!ēIlIm Wk{cm-E<gG5*."5T %5*=M\࿲\뎞ceN+wJ4(.%rLNXڻ|ķ#M! ܍UfwgYȥUj/#15G.&bTgd$טK@{ WTho{rOj 1K@<ĽfPuN1θ#i#'#ҳ5$ME](kO.2ձpv+G\ȣ@_c@&.% "\ؖDя)S1To, Bc^/1fgv:Uд ǘIǸ UB<$v1H:-?M6%OSr̫~Z~UU`v3)9 @lNҷі'yNݰzPt|X0v SpLA3PHDgΦEnJ`N>Rx`9TJbPq[X$sT `SYl䯨].G㺞EZ ☬jȤHڡBW֙LWYsQBίl1@88$f$:Urʱ#ހ#d(;WV@6TvSʪqЁ1ک+&8XyzS Ď9 ևtd9s޷<:vp8` z  hi7^e3HAVhnh\FqTR*+I(ªJ([LFȞB5T *GOjnssLdSF~d#|\Aˆg3n2iv)z}{yr.FsN(: p. )H'\$hx%GQJdsLdƄLtSέZi7pƹjO^bΪq84Ƒf^'!zZsc, %Y1:kgIBIZֳ^Etm޷ [߂H]vCwjr[Ni&`m3늫KW))O֚.d 21⛷j@'$D\R`~9ؕ-E?ۘ rڃR#wNp=?w>#4`f$A*E=:gguw=Q)OLg9 exqw}-Rm278^OҺ i:6i.,bUM6'#)'רQTF;$_kpXKc+&KqYOg,Fe W#ABZ[>dd*.#b@c\6ݺS1ܕF~QrXx&0*ڵo<N,q$RU/vN'ÚN:߹^EZllFX֒HbY#6˂F=P_:^|BOt4& T!-Uܔ5!'nB8؜~\X%F%B jisFWֳ7~/ˀKx3t4tz8:s:q9Z?y':y˜eB);IqlҳTAuGF?ل5=1`Y c 6Zi԰ݤ'G=0o7փYv}Pc\o,H?5uG?pNܰ4f_c961}du>w)~kHSϩ(9D'i/@0t8&n&p~íi$fBk$V#nROLMnĦsڼQQk=)3A,BWWU  :Y8= gj7"8F8fV/hC:>p8evh{E#aU-T4W @CIsȧJ6#U9\kҊlx4cw=-64L#e'*HQQ0Z|+Ț>? l/eqeYO;t .^0ZG!a z^Befc3Hf`^s`,q[rA"xtQϟһSrNXUGcp=h'ǐ f'v0~Uc=ymz6Ԇ##,Qʣrs!yA(swJ!dq-gGqHYUaϹKm$E#60x?yqޚ&vf-XmAK"N:B#FgQOO)Y429}0,xU €FY7N'ZW*̆H[=)>c0bOk5ı>5XO?CːEiy$q#Z5vlU{SDdx<'ZwM8?ĵ gOou4r@"&.+`gR:@8E+~5oIښ8ӡLt{ze]BCrOe̖ʓ1?@5h݀}k:eб>skkspbp@'mnauϨt;D=Wv5>Psg5osw5l\U85EŝOy梡5WSD3m[Joo˃֜ Fqa"f mǦ)U|OzdAެ,@`71ڝTف~QSbBmR:=\E2>1ES:UGLR GW۴lnTgI-GfNz u>٥6>وq7>czWga{'c1wc#Z5N4ϙ`lygnjK-pd!gVPK6p°%Y-xݕCcr@3&6{e ǼO*L @j[%S.%rYNC5^WJD;Tߥ6eс󥗇M*.N bC1Oln%=)RP凡C=H @U 'ޝŢCoin>If =\,af6%=K, uΘΦd&{uDĺ&n(-2 -!Z?ڤ͝_Sj*p RbBGed"X̫P| BHFׂ&Z ,s[-~m;Nhu8ZT_g{sһɭ4M~ u9$V稛g/$]eÝҮ, G< < j5UnQm@q@} IA{+#11$הI,lꗏ`Mʽ2Q&  AϾ?uGTєE-F'{##忥Xf_:YX|?ꍥ&go쉟)1l|?^O=IG*#Lz4](Sl Xzql%?SNOR׸E4uP 'U;D9!I>m]WRr3TV*~ӣm.VMO55B#j;Q;L?JZj zPqS_>f%'Զ[R7r@@[Z*JiAkp Jw8#5Θ$b G;/P23fOK/ߜK?J'MdB*'מjc,qU-NvF +F'>AimtJ#fh qQ#Ё {u(Uk2ۗf|'jrs5e:ϽuېϓCֵI06r Ңis"R2r)l0V^zs`GzADgڎ.?Ʋ吒9xP Xh~cRĮVo2`d*CIJ1m0oQ6e6>l$P0B(=kdٿx$WbdE>V2M",p%Hւ@J3LQp$C zJi̢-7; nnsU?J1>jXḿ'nG:kıDK .6qhN$G5G `9+< F lnBQLMITP+eaf)a֛sBs5=#$k2~<}k[A$. O(z gҭڲF"#I.zO&J"߾j`vvglv$j4槞y'H˺*uhj]Ӄ3c]3r\s:pY 8vnb~.dkOcj~?3WGͷ1cB=V?5maop?k~]'MlGWE%dj;̅O$>GP'gWG-Ţ YywimIy, Z2Pɻ)Y,ٍS{iW#R#*՘ 7}A}-CGf<[(ɩ-T3G?-G:j;䲑vU?!S}?( RJE.VUzT}0s}0y~=[:J[lz4h޵0\p:._Σ+LW?g\IVn$LS')oK7U_P%KKfnkѬΟn0<ē [9qTK /hGmtB?i_j9mL>|?V~g*|s׊WI?E2iXO]66]lҢO[mD@g.j>F ?,2ʡK#F;bω!_Jm=d^~ eSh$'5ZV(8};ԅ`8L^-3 lL9x|b`GҺ$U1„K|Vi' 5Ȋ]Gӥu/1Au鱢hsМEk 1Pݏ|Ӽ0 ̽ʎ$N*x+m!Q޼)0Y@ QQy|P@ cң &AG*{h>ܽ 7qMc}'-HW +^-#u +Սcp剹<x[zsTúR3jpv+z~5~{+kJeIGUMRKm@s%Oz [gzp`ځԥ__o{pOQY{PNhLV.MH{#h[OvQm:)PNJ.V뚰Y2+BmPcr}9Z6yoBhiQFc m9I+XamUe[`Ӎ!KF$let rI(I3N3֦*]L(@J[ճ&<3*g #p7ZE[Y[3 2R'GPsIH#0#6:Z)*̱賂Sf5m"X??zKs7HeڮF /(ތ*ڮ=@nS׎YJfEqYsL}揩szd)lM }!ek:?7q͑Jb |Aand \HxK5bZI +vK!(gA玟SM2K,6y)">n`@M: ]$ڨ')&v˳6-!}c:T 10i$U,#ڧ'XqTIBmmY#sß1UΏY]o@ cOH9o&kXK&.S]:Z7-ґJfXWxj-sCwql@$FD}G8ߵ("8Oڀ8nƩɧܹ8WI'hfe (8ڤƠS#/) 3JnPZ`siI JRis0DIIU2M9>[*ly5݈ؓb g󤲓b?E7$pLk2}G BȺcn,;'Km8/bM=Q}=Pi:˶4^v2H&`m 1G.五 v\zW Z-F]^XT2E!Zk6xsWoNVY08=i{VtҖ-]yv{6i6[I+mq:nnȚ#N7biRKmJncq+?R9u҈VU(<ۃRL^cP?&FQV_Ǔ9˙{/afZl(K&cgUlNA4K4 uuL?ORj <3gSyȤq~#?MBq.3YS#;+|֝\B'v?$W DJr}}~7Z}3sPw隳4KPS#H`9+A!F3X>d<~5[bzPF@魌k\wW]*KSv#+~(sևH#ǁs7N?Hp>^qPa. ݸ*iܪJ'@2 G+K Rvr[ B7)<lQdd[0]wI U'P(UǔO>:r|ӭiWy;Hnh)l_h*EM\VglڑacJKkKd8?ҨMa4CrTr<5a5ru=:c g"d$jtgo=ԑPx"1i6H6u}sHFwa'ڒUYW[$P0Mf( M -Duh`7ֱ(C,UX7λDhX4Ѭ!41~Zג]L\Hd`@,zH9gTEa+oNNx<]4NԶ~|cj-vQwI@(GH|-Ż0KaFLD-}Ybh5I2{#aHOdHǜT%v_ªIm4d gOLӷ ۰8aoAҥ^fHJWyMan!H̥H>UT) p$bxX̫|HHgs׽dOy Zh aVF GqҝГjr==F3=p}!yM̼* D.'h`Pg$q(t33,m8UO=*Zɐ&]ƞayIs?ƺҠd*\$cWKc#H 9<\JV+V0L1  ?*z!]$pAs, 1sqεbF'=Ք*As+V7,.Xcw*pp4 LP&^~ֳHʫߌV(2J t c#.-Ap: ϯFd:TzX P4:\e g>R ץhUW6}}+:mzp$sY*SrEb (y沾ӪބH4.[ԉھYP(q}^\^Gpv(;Pk#[\2 wnȵ%w"EyF?9jׯE?PT@Nj:>:ŹNnqQI̊OjZOn|<֦15Ų:ӏJl7f5M1R09',/FN8݌dU'r\-ͱ}uylL7IX!<{RG}H4.#C'^]ZWT fjbWzi5f(Ja/"T8ݫ7I"A8T`zZTg\ n9JqlAWVeޞ.RQNb8k?A3(HGpOjױ/S\9|'[pLA$ڻnr*Dd>^1\CE4 ]i|nY#mjĬ .6G<(iSY4sRf3)>f)Ya@U|s$ncޙ'n n*s:zzu)a|0}x{ ?{u_JNР vTd~yLFdʺ? nݴ<;FuӫoBÖIlmpٕ["w\Hyv2#3jV\5Ơ+O 븏8'9+<StpKrzjqc/\5*= TT5$QUimo FO`Λ\#4F1I0ۑÓkFǩSBن¾۽MZ<åEs"eYUџƷTXd2kÒBlᶔ)}}1ukXI&Gb8[r#2 koz%dfPH zL<ǭ W r==)rb@^O59 MX~n'>L`qKR0227֐sҼ ㌍H Sښ) fYFa_hm/U6cYBS Om#Bc6Rn,ªX:Vٜ#2[Ki T*N)9 xɭXm%Y\XJt4t}+FU#exLkonPZ }AcY+F Jm܏RhMXZny!RWtE27ǭQL]c5pˆό*sYsl{nUy*׬-Jt1)-b9B& N: {"?$O_jfӷpy˴ITVOAUЇ =ʧTdyȱY̛70Q)s m.>n}1Sާ0!enLX0ZmW!S2>$81S^a6`O'Z濵&?;}kJ&p8" rIya;2rS9 OdZ{>ȄnA ;T6O `(#!Y}=K-XGK)htFaGܕ*o^^8@Kǃ޴0ەeQc9v8S(Բr?.DXL(0qmeIJ"Pu{Sb9DjK犲uD0czw6t(^ۇ ݌uʯ|Yv1xZf4N0MF WN!.F;T!8瞤Z/7ב84aY,0p 1';I28ȩؽ%yqN]z&[77PnqzZHIaAǠ yYqd'twq$ǠkG>ݨ39UFͳuXvv jkaI^9V!`'j.ZEeK#7 ir14@rx8jƂ&wņwFz8yaYŌi=tV ON+T̙YOAk+QS ftoA95bD6<   iկ..'ߑ+N0O$8wI}rA'"ܞ+k6?,:1'y㱪QΎ,C/N~t62ǡ UxNk&6M胹Z6f/mA6Ǘ C>F ?eD|?,VڠFlޕ3G+e须A̷V R@ƒ݄ "#V@pNU;}J[c~Wjn5XeyqSrmd?&@su5)l .z¼'g%P( Ϸ]J'y*dL'EpTF0hRm;J{m > `)@֭'Qݝ+!)KiJ$Uvdfq'>&'85RF5iG_zΒyC9,68Վr |=+4Ď1/ cU: #!/v;M";I#}L.Ua洬sG'~f;cu?yZK/)?]SwbŔCf4u3l5?uGx(F?—߱?m=mRDs}3֎`+>ᢿL m?Z.;餲:YC"GUgg*$ ub\1ѥ[Q<64P1ӑRr9?g;}19= N;xpE0RsPsEcXLy=*[p-8<@%Nj`z׳] R v&G *88}UDx:"Ig ~$@x TKDqҫӱ49YԒJӳXdtեj<'ch@,CAVr$־UIcYsŲ aS!6t 6rycC"l01Ml ;>T.@iR1, nsDqgtC,'"ɜ"1S\dZT?i/# <% <ҭZ]\[bC~,w1^7098[$CPTr oCS{"rMU`~bOC,)gj9EnI ˅1d=,B9q{cܒUF}=)X+R؄y17fRBFzzdӲY8K4xU8يI%pE$q81<>@8ځ[J̸nvtnXƲ@H%?jԻ7~0x9,Up:[O2mdTrr+dtcی7\޺R 16x ~i$*bxUU $r& $t=qRP+yO YFqӚgo!>aT*f@rnsZXѭO Epr*(c3$htE  IP> FF;soLc4w`2Pazw[Va*cp?mt%ܳ ج! < 1n o F9Z2L`5Hei9ɯ_k:in-/Z9pn$k{.P$R0e+DfWjObkJ wCPÊXp1fثjJrH,21df"mҥOBp;j v0=ip#d޹1TP̠In=T2։Jƒ]0DԱ;}tVr2:ハspJTmonm$.#|| \Fr6N@*tw&1ԁU 4nzoީCed&zZRķ8m#`TCwq\Vw%ЬH N#D1Ej{ó q}p@dՙuW3cާ֩_IJնc@qtusgOQmR)LK&sE!@ɡdb*:Z{ru9zpAKg֡1IY* .F0;yG٨<OOf٪ ҫI0l3^\df1;yl O)Nș1Wco/^<x`b4tͶy^(+`}zfϗߪ u:1sͫZ!VǩEjpVgyyK.™u(%g& 0^G0Z*<Z Z'VStl_Ӈ=?OƇm@T%pbsߓ1 I5ꂗQ]ԏ YwCo˶Տ ?F˻Oe`r?Ža`dG+!i,XsܼjulLL=?Z0nOD*7L/s_m2-E#m#VٿQNF/!OԊ 7# B B+ݠP{{sJg aA>1zS8V8ʟJ`KU˶p h|91ZUɞD(9>j\u^3? Ilu7PnuA c#5^ԙuCLj;lv tuKڬ㚻k+JzSxhJˑY3ā}@aT47OޔkmU\\?3iv1\~U5 4=t2QҬ<<sR?2o^ƥD*9]IouKiB,rFx$`+1`hYdDK$-0EKx$xp{db8)Hbԭ(,}1[#XCrc }kh{S[ s?/QPazTNUrIdNG8j7H<9xbC#bBPH ŎԦ$ T.8RL~p2Tsj b*6A{{TkyL 'ciyCH#9 مb*.wO)&ޭQ,b c+]'oSߜ+ 9gǔTZ]Pohwn2Gq_Enm& !ޮ7GNrl|qGR Ȩ" oWGe 9J} V/)8y8񪌱ǜ6Q'g8=QU>jy{NR NWZѲ X|;nv+;T,$r$nҴ,R{fWU z ,(H@vN)9rz 3$sԏJwRq[ UcL83o+ɫ<މT-GJjM(j9c ~\wh^o1cs]&m :!G@ă;֥+֤?3$ʖdki%4?SAf3zpj,O79iseioٚ]_?A4]GJL;_y^ Z~M ԭGlVC+ղqGdli|~UG*b"紷jL/n{%jFG{S/(VdqwGަr[Q2pVcFB@ UWnq†?gO&Mo+QBRhAWI:muy%ӠUE<05wF6w`TqҦo)1G*u խMX?U+}A;_@7AбXOL~X^Ԋh?lB)Q !=[{ĪA)t.i2ˎzfײ8O),FX=k*X t"HrhA$˹A|q@FLJ ( N8mee),DHPl_R'z(wf{S;Q.AiuV*Qܱߝ):x|{~ $WBx;\g¸#O9 @<0Jxc@qV,L~kaX(nx;Qm,ba(C-=  zm)6R`l+>dDo58~OTHg;mbX7Ri[XJvX&lI[=ոGFL'ڣh|bz{P"mBoM窳(,j+@`zԂ6esn2@nRX1y8ҰlFgp3VU Ǝ H*a, ABIQ=Ƽ$#=M(A ~md={ Xbkhs2ymaG *j+2郐s/ry' -c? B+H*N3QnѲrr~_ÿR#A?f9 ϭK#D 6>cӏj=-l XW?ehpNy9Ҵ+#fo`#(lrxB;뉤FprO#uyy 2<'~*.)hG1c9=ꮪO %a" 0<^sé=ԍ J2qwtI,)1`}qY3]FrU=:Z7,3. `8',=zjPU3!cUQ`v #a`Y ==g$l@" ms:Js NDK0b$aa1ZZ_[U`+.魤v`$N:zmji=EX`'M;vѝm ֳ̗l\o=-7027)Scսi[E8naq)]u8ďΛ]F`yTNȉ d;X}>sO d5)usr^km* bQpi U,οhNz\7 ֈDv8#ii(lB3צҖBm4۫K&S6ߡ&R{IvVt 81kGV?4jބsEƫ : Mb{IMт49ρU5 4Y o 68=?J]s^BX^Dջ[YxpJ~sYʃΈbUk/wl"|,wR8J%r$q#/bG@<>dR7zmF ~fћe10Q>CEy!Qd 8sҙe&eYa?6{Wm5*kɲN26ۭ\hUNui$Y?=,DeT(?7é{u`¨l}橧\qګjTJt+d̘ՍR{arAW"01"q[p ؇#\D 7٤ƻF@߭Sŗ[DQ7UF--JOvw$ ?*h˕-"w7r^֮ƭJe'Cq?u7. Gj[J9bp6K53ŬU`(S׵f[\Ne8*)H@y@M~W$z lO%0q5w|4<%"@v5ON^wAtUɨLPV?zO817m'Ql*䍈86A5`1lnPaѕ#4)ڃv9DžmXm̨dtQO^^Yi&ٳt?LMgq V?RHJ}85n@y?`Xl OgZRgvɗ'Tހ\fDqӟ`YrC$~? aّg22Fyvȹ')s!ˢ0)EEǦSZC+(N:pkoĖYzG?V9;~TRptS>"I$zT-F-W#!SGE}Zg[BbVE՘H}DDs^`c1O۞}_i4R.v $)RXJ3pˌs^@?j9~ǵ5S2]jJTsmFH. Ys'`YK͕®9qƵQ]O"Hr}zgEhֳ~ʖB(VK{ em<DUS-I4 3TN$+qX$ X^"kNKi!2k(`i(H` 2><+(${ҸF&Gh^rBwl =i@tb`Is4Jg m#g1ĊsYfM޸l)gl:ЕKpx~5ӆvv21,$L fB bTezv!T`lqՠ#VrO5$oD Dd *o\n) V窬"^CQVmVb>ջl+&gOlQ?BR4lݏ-eA#tHZ~k wz[m%=kQM+t3m(8\ޫ"U9&cjɚ0Hw5cA%5U]J᧐)LM&aR!Tub{Wh=ătåI%>EvF#*(<+*YQZ.x|O% lci[k&tD D9fM?1ӊ97-btp ї>lK)HGSP[6{J"Tٵ{pgQM 7͜^Mn_dlT 9skNg-z9{ڴж qXhj G'ֹiY y*nu'9'TT8]=N={A-0ڕ}"_kN G/Fu"OݜZDYB R;1s՛r$e 7bpIY?9m:jx΋oivZM3ʫyfG5}i$ KPEhaeo Ɲ '_m~5EheL7LFD ϝw+z+JjifA ~ol\|)aRtBs_`[ 9k[? 2׳s6-'u6ǛnA&X# | p*p?04ny铌Jɷ dEs >5V0s8|q\eþǽuI;]݋z6<cn>$spUO*®A=ۊn9+T#:sjX=VըGc*[&:9lLxH=NJl5;׌fd&v0E΋_\,ZtIbj$zz qOvTS( SN@w U`;v]+c榍[瞦;*"qxXPUn5c&A09j\e1jPuQHfO8ǀz𩹧*&JFiܑҙ#'թ9\N`8 D9IvcZ(sU->S[gM9X2I b$YA=5%ƅrrQ!1Ԍr0qPa4KF>4wo0`fu卭Ec#Cd];bP9at߳\40Ev-Ű[ہÑ?μ/Drew$RrZJZVX JŦtٔdƭ~nKWyY"`1HF`N* sΰ {&{; @q wfcH΀[*>X~U[j'q2eA>d==lAf#DnE5R&Kt3A|O9^2;s`=h#3"wVU Ut?6A jhlsZ-XW :C2>5k 1̝y_Г\8u:O(jEq*b)&O d?*Z26XkLܮp>$H'j6cv;Nv})m#J֍~5C:|D)?kZ2"F~ 3iz˵M*@jݢմ}ҐG5f6V,Hilf~Bgpҷ'VAЎ:"CY2y4{fQ Q-415&8fꣴ7֣ϣF\H{ˤgPYѹ+/SEf<\y2ښBZ'c`~byhTldIq_hqAsbI-m4dbAҦ2EpA2N7S4 p57?eqKx7 N!5Qee}>b6Iv{$ؗ ]@Wܓne*j[ȇZ?F֜c ~cm L}| +G 3 ?ZKAnnt:J?*[{ň s/@H&w=V;xH70)## 󪃎M9Bo |Hu"1Q",dc5oRn$g K8H# {h2v#nO Ixݿ2x55U.. aOکs^{+=clD'nMTk6hnaA$)n:z# AD%^( A>ddtFTsO9#)H4f=i8b6aIi%"ABEV߭R^:*Z[B|~ U8=jKmF[2w>ZRWV#eV \ֶc$0VD sڦ(> Ik ڈP85iC:A>洬76KA'Hd$.0xFRVg t0|C@3Ax=JkSwu&oglq O5-L[%OPk&Ow;0)#F*GpqZz+ߓG'MXARgBӊ0+mCNP8O#*xUfQsO.:hgYL.U8Nr˸KҖYf_޹p;z* k%oz#r>=*-]%ޜbjU\Orڮd[v c6j$@ 7 v,-P0qv?q{z O0ʌSޙ%20sN8ޘ=Y@ydϢ;#0yGUFrCCs _jͩ7x%sZS91'2Y|m>Uœz)kiF w`#Y p>B6/7F!8ii>G#y6[Y;AE!V`ea>5x3ugmdN<硨{UKx!<1;>¹.Vƭ C0ʪ\dqF cj+!;]\Of#k X)`ܼh$PZBrNT]8ȥj|Qڵ{E $~H+nqJ7$)"`; ,4w):n x& 6hpw̑dIZ_5@Qb́pnAu鉛#XfT#P9ք'"CZUAr6N:d9jlHB`SU4zOz ^SVL`{汒);ęX$犪VabiX=F>H',G9C] cΖoG~c֎@v,Nzi..X/OX^SK.n$ ]tݛə0p:֞=E|=O=jZ;h.nk6 Gqzq3|QB],X8 5{/7 7T&|9klH&(cӓMyv~5vtW{i#3܌\Wng^IEEvCY|i1^*bN ĝZ[=NBkYmpPx5=o2v9bh%ê}kh7{ZiJ>f',01]L,f'Cɴ~+|2D~(,v$ףJ|)Sڻ#.dc%ft:c~J Iw vZ= ~j7.[ɫ:Y I2*_J~IR*4Nbh=+ Cj4?8nZ<S 9{Kȃ܌QEG -$?]~ٟGrFl)4KI ^o*OCd mni,?7 !+tcmk57OOӡy8oSȏS x} ?ҬoqC4S^چYORc^cK\>lr3MdK GdQy'+1?(t#^Y pjE`44MI[/Ml.Y鮫+) >Y#z)-3icnIRPa'27,OCv_Q- Cʐݒ2nf\˭͓:@Nsg}1+CQ#Aҩ33ɻ)eϴ qU$-o+~*E z({RI4q:h^0$\urpǥ?pP 6H !r)EL(< FE+r)b =c,*5CzĺH_ h]9!4 0$9kY-*YG TwkD ̽S=.ݪK W(PzQjQK!VTܣGj=03Zw΄$)ր2#l]GZVK$.C)uȤ4YBYZзaNuG :F}lVKwXiO;W9,@dR;sZ׭jX֮vqzI; *ޒߧҝ{mP];ڥБMČG*XmwbO R~caOq1zYYy=M]* ~\g"]B43S8H N:c>Ԍ.Ϥ۾`8/nI܏*07YsP} H2*8=ٵa"3ՕK {)Yt-7mQ.ZBv8'=Rk8OP6xWv. ;՘cug\Fl*ǒ{%\v-֠VuJsюZE[6YU*?!wGb1fu ~櫟K8Gmϡ4Oys26GXJ#t3X_w>[tLKO֡p7W*8>a 'vJ)d_RI%:lQݵ3 $Z L%bN6]L^3Wh^٭I1#'?5F!Ny+R}*Nu\lTsOۺl,a1&mZd ;Mf 0wihVoJȣ+{Z7~RS(6%  G>#Qj+;եc܋d{r.ა<^zR A*O6$>de_c(-N ` qT!V YH 3mނ]ԺK#  1P"< Z,#|by=wuZms9wzW+$\n2ɴj}+P-DŒH3tCYFP}< :牛*ͤ9?vĆ$_<N8?ҥn"Qd_ U! *RyN!r)A84//ݠ"@f>ݪ/YbtnEZV!V-RR\lYQI'i1pcpǞIN8U%9=zՖ8Rs@S4=Onԁ\+2~'$Te2$CaC18UG\5]y{SDrx? ͍jޖKtA¯hBAV)C`sҤR+"vm';SIԺwNZHgVa[gY?XH2*3~;KCgٳJvљNQZKK??]miD DԞ3֭][5}H[fgef?o(vX?ƫǃkSZ9K<#c,T?d0ve|L_K|5);K) T.|0C5UM˶׏\ h5(@G0=lC'jb+]+7;X``De@!`y&Hu! *s hy4/֔RjQlu( ǑN샸sBcP -NHރr7 !=3Riq7`sIc4.I娃0;THؒÁL=J&x'€UJ1&{e>ͳV5)rOO•*ݏG3zW($Uvh ?*o+F$88q"ptSlsi̍bm$݀13ղJ;.!>|]0+&x]^1X*AxI-ED4L ch躖v$5g+W?̌{$#81uMG?),NA4);d66{$qRMbn\"XǸ [E$m0Jr=T!S0:S#,I G8Z`R8"=ipr9>9 jGR6 BbnNꆍ#F 2@*Pz3Ҫ[6d~qzQENZ"xTġ> ,|I>f8dAZ@sR2]͎E9K +.zU 8Z1OҨKҐesTɫRUQ!bp ,pkr#c7.}ꮟcqGxQhV'.ҋD뎘_9tlHc8ݞ"W)CqCn= 7-LF|wvf+v;w] +$l& rn~zx SxfSm ё('IŽXVr:2&f=`<ا 9*?@<=rOV ^Orr-*wḾ\z?(ڃncaAQivnnwEz%KQ%c4XsWЍ&>m9s=<~%/ v\~Bw{/ȓ㪣+R8ݪ0\/[ё"hO4/L ˿AVX8/8wyu?Vo.M߃&i=Q A=Gusct(kR 1H =?-#6裙IrX+5ZϷ'U,bSRylIg1Cg֪Aqr!=(cEKmz--#T]d$tSƖ\g idɭI&'(Կ|r=5m^IR_7c=IGZ\m}HΡ[f8U9bIkw\9G7rFRl\һw 23OӠ[AgM^[2G&{~N( p_RQ+ȱ+ Yv* O%پ1JIf<jq9O.BXJv)m1ЎGxd[h!CG\lcpWC/#@Ki&Lc$wmyhCH8*!lN#j@Z=̇Q*, "FU|Ɩf*^IV<=) !nĒ)Lu`!$Yr8GbѰ(ysӿ,k|_ Se)+r$MWds2Ac*J c4lf̰JrBI;Nz[)d݁3~@TpAZ4tX$#jsGA]ukԹFҡUZ];ROLVƈ/ !392k;eI4(ezr5eŹ͝/}r)R[GR")$ |VM~BïZMWO0wy~O\uh˕Vd'H}M$춉%I$6F~ZPb# oz~QpyGX71Y>zǵTo$f$R<gK;dR;2ʝzTء8w(Vk&.jl2rk2#J-5ڪXy#5fI6 o1ɦ#,CsvC"'jA !ڴp^9##9&HJ1^˜XKv{c\|,Q9ǧzBY=xٵڬ˔FpM4#(zB9Rmp9憈zPsL195.lml#> I_.Vv TH湵bz҉[tnGFgW QRF)uYD?S`_Bc'XeyDRT!Tcߓj`j)E>E+I8s4Թ6s54FGL?P4 u͔AX-tN.d_ &ʴ-jF6r&y[8?UQ(u ~(t`%hzf?]FI:"顗P]f\.~cؾw?o|=h*Th FbȫÐ 2~n @'6,  1%្HQL1N@|qTAdi9adTpNP*6``tUISsuhMn.ldK|)~}9MD)W ޵a/w(qۜɫ6R@pMԭ*e{Z0# tɸnČT:Ҕ5&$ zmr<4 piuZz~W̶w2w2#Vʱukkt\+* fijO$N%c~(B+gGԱpq>~hB[,ybnʞ;uYjdU>Y ֆ ڢta3 ٢R22UTu9#rxTr(e0{J`92Ű~_lC,< ԒH94ݣb7P;FZ8Ӓ>Ldg4- N|BX i(U"M?k%|!cϦqڽ+~p6tW'u̯jD2F[|riϦENhMZZCo66"°\`w~\71%v10b".#%Y@Qޟ$1?ip\t;qFHTQVc0[Ͷ%wp0(#=PoG9XdcOc= @ UT6`W t~`u]f^aǮhspA+#qNy֊ps$ci2x^TRM="s@N,g_0Ҝb1I`.O+Ͽ=~l19SCPA"4}ZG)58x߽0;u#޹@V6lgY"NNA{W8$wZ#8;FIhiFlı pH3G!?y[;_4UP\-[8I9*}1k5-W+F7t mn>-V`rpBᾘ9OR-%XXLvp:}\mSX,RՐFÕY9NjCNKZ+yoXEd8RƚD* )t'v GμGU=18eas.~*ZJFZ H[f09 nǞ!Kf͕ 眒?:9ޫ?#1FBH0HXJM;#T݄ y>Bq)R-cRdV5ϩuK2#(7t>DEQITn'֦Yw/^ %/zԂF#Ҳ x{Vs w~i t9`W*r/p{j`@͓cMnz†'~cTqjRb暧r0zQ=iƥWF6܎G#=hp $攏Z`7 4Rgӥ<1@(99*;т5p'G 1!ዩ=wIe{R]d\r=;v7qHhḆ?.C#sکϣlME Άg/͕ٴԂ=9 *!B]̀Ir3W::ݰd!#P2#SEq!*ꇡv c*i.n8 @\ k2v3;kRQI#3*֟%dCr)g$y#Prуq҈fqE8 NF3f*"f'/l8=~ E0wFTI;ƞTc{>׈'}?9mpK +eș26vN1OUed)91:zQE2Y6QNzY@bEI@vG˜"~bEt5;|śt2.ylnIb荐QԞGZSA?6_=qEt> fgky^'@?4q h1G(1$\gLInϷ= @SҳxqQHC0n W'hY nrQ@;FȪsx?j@1ٞOOP˶9Kol#ON"0$G|4QI fѷ,\eb+z4QL *KW*2t+g"\agNZ(u6XkN2'UvxO^QI#%p(e8P.2`1  RQʀGo0AQE*2JޔI#h9ǑYVq=QB$ K[8 34LQ@2B%M3 8?B lF5RGbS}2s(/u܆PcY|3s 29>R`.ܒQ!;ƻKi9HYP6#UEOZ't?"B) =?SI_~QC>c)wJ+߰@U|9#[׵@ cQaWZȾY̴cEQm= j蠏0\3p8;oq籢G(wdnSPK sڊ(`khT}:{UU^ oz(YGDvm|,v(RȈ9QEf2Q$ۭN#Tmt=袄6Kp'ץOms3QEX (p t#^QH ==jWEPid N9 O4OPHawL(Bz^>P4&\H?Q@;s8d@0qE͚Gpr SRHfiyQHfζ!c=v @EP$S{I$:>_=E؁ҭjRۨAOQE#GlbJFIFC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ? z(?g>_u|缙 Ǹ B>>ҽC'h&eե`b'V6Rk~]Q ܶCGy*@9#OZWXֺdM41uW%ס%n/#q1^Ŷ .k?x *4TJwՋ[xNm.m@@f@3g۽wwK? \jx"y  y*y58G ac9qʚO>ôVMiFR@9C6%Nr&݁ϥM&mH$$sڑKcF2';)U/RQNq9SS;%],i ?_K߽܌eۖ(cGErij̕<7LЗ(zJУw'=>%C_1\KVÓUNs3ꯥQqRJ "3ZB!|$Lb lFIpi/euo0Ye2O=bҒV st>-d$LnA_U8*G4w* pppG^޹UZlygytcu3MjuE<;G^:SZZi$,\t^+(o&Q:dV}w q|Ý#eU~ lQo*6?ŃBV:q؎ҍ2@>+ʾ}^-* $aI.R[k f*nq@m{I̟9R@86Z.6)lmӆ-<榷T3DnrY'R⬤I,즒kXDrH6y'GyW1\<1?8~(I\,j2z_)|dЮ-|eqYۗ}FS?&PWvG¦'I0ZL=x?J f ԃ޽EtP5̖qs\4-\= 0zVP;u0LSk< ZOU[I5!KXXvB8#G^-|;v\O5 OVz6 \[[\:wx1cMAWM6&f9/EZsq Yj "dk2\oQ9n%]Àpztpu #=º4>x x8ҠhtQ>bs>~;?⻈e+>V^ yyUj#d/ڋO fn$'C pjψ*xSdDd~|aXGeU-܉}J@~*qA2`܁]Mz?E%^÷B5:sp8`==d35VŔRLǶQ5urǦ-&q>•&(kmgs, k"Pfn ,rs'?U;ϱiP 0'|}kmoe0f( eaX?{_5 [^KX{F_n[{MZSNZ`L!׎iu3EXky"ڬcgU,'ӽ^-<@7vl2+k/10޻[^ZV Y'qlzє,2o,d.\12`ugQ2^nEx5oIv-&Mme #tҴP`WeʽO7SKsCuk"G!< Wk$ :UepocוIioJF0;JUX>!Dax|>Z0aiRU_ +{Lٸ;z˶$!t^W^}24\q#$|6*J[X oS6q袺42Z.Sc, LWXeG1'8^8&99T}MexKH JBV o+;oQ8SmGe ZTH+EZR\QPjy+َǟ;\X嗙r֠op-&6[ZΞ;`"dLi)%dq~{5|هRZ|F8V3v[cx-"5{@ l`m=($̲|Vo+{۬e'+Xo.S{Ko)1t={:w>[5൷Nmj3·>GFPH'E Nͽf}jνq󻥚 v;_[D^[3km3G/P Pxy.2#T<9kiԴwLY^/3X#Bxצ&m6nWtQLTʎ"ρ-qO|Ue#Tu+8._fݹ ##lz^itvxߋ>#ZK⹠,1qc uc8\~Pլto @F=wI }Z["[[v1*YCqq^a㥕# ^>KϚO:YuZ'(\DN/Eqj&9oR.;yy[q~=#FWt$u-|/c)DVs+??KmN73ʂ}WjڢR :ep}k")/1?r*OɣNSl6j7r.8 3מ*|E]ҍFRFz W9P"ԟd,j #t%M7mng[[E$dE7N֊@4Z1fҷgbqo];či pJGִ,<h8t:{!< b ݹJkǍl=]6yYG\sJ/uRwW=f'hv0coQme9 #,\zc5LJfR6 c¸/G< @I*+ڱ[2єnq#5h:[jv0E `جX.7ntkP#kG.i"BIs0@U; I5Ԅ, *FykO4jkq(k,?.1 MkuYFdFde[Ժ+Ziȕv[ϑ|9U_s]Om!ikn<hMrҼ+;1zON4+x^bP$85ZmcO+AգqINmi-I#˟W9Q* pF0C7o#׳|¾dBw ^0<݆2gvݎqXZ퍾|3?QZWiU ?f\X8;?bvtVzK+hs~l.!r?Zt-%4YeY̋/N8Y!iFf ]ib¿u A˃nnGV6:** ]JS}]C*/BAq_WU:G|_Rx^3R=jk# $R#Oj9P+ Vr=)Ye'>FՓUa<}ϔux $߻,HX6aeFæC=j+[MLyX*2hm ĘHĂِGpU\S㵶6gh&dگJlZ7=HV4ެ]c pU! "' լEtLjF(7;wYuP!V%_`ǭ]ڲD'&nѦ[`\G'Z=оg缒G<ǯJmr^WmXǁB:s/i9ٜ~uqB\xkc'HB{>qPm˄\k;;Eʩn(cV|%{J]Ji.Ĩ]Woc}F2OXgO |/xR}?S0n7 g>O-n!7T6⣱鮵XV܂{tHx2)8u8 R~T){Z=O8o8`˂^tcB,6:ʼQn.伔`5~ΑdkCc vy 9Su nj}H;>k˾>Ԟա@yKwcưP3tZr=Hu_F~OҶn>S)ʹ~\՗ee+ҥN4,O*IT|>B~#x< LJ[3W3P|Gyo WwQ?\"eQǾ+ڲGG|X? PJ0EgcMgUNm㸳t/ ?R,P]FRFPL0AKJMh[oV)'ڲHEdP8c[rhm%Xy⊎;'$RFl`׵>x$ְ֓͸N+!|?%Fb@zib̎C4⺍P-̇fr2QQck!U֗+1J˫}~BUTkcV5lHf?`uH6qюMsʰL k'S[#R:+CHDeRGXđ:L9㧡5VuĊ 4r.PczfU&J=+}W=<&*SsI[S,*+,pOSϠk-VOnŏĎtsY"0˥4Gzgm*In^y3%=Ϣt[{+AYNI9f!$} ~9UONe1GA G!؜cvQ[#oV_ Zʴ8*7sN@KAߺ9cO)Ps[؞]VvlEX\ףHgfg֮J?E<'$t1:%v-psV-4zEN9f*FT `^W/$Bc OSsz־}RAmi9Ϛ",GWgp+xQw8jV+5< c;i\}֮]ՖX[(5Nnjuw2"W#te5mu2NI541)3WG$FUr0#ˑR@I9/8?t#x088L&R14xD^ԙB2_+T2JMhqndBsW0xN~^:cy1W;ᚇ|r4{?2L-ÏZң-p F|eMo"۝r'XwMcuw YIUIOc ܣ9{+{b*^Z!b+qۥS[_*whZ*Z-; yd'ꎌ Ɗ*Վ'DDvD#)##':/ iv[StHr+~"&XeQZ(L9B\ç֢{υntP 0rOZ>to7DRhV?3VkDExDa E mm]0sSںƕ&_zl>YҹEHV7WH 3gv;(K5iOO\n+zQU-Ʈ15?ȶ+e{}+|I]oU'`w(CUjOVTowCHm11^y:^'hqފ)!'i%G]e^T v"`:}~Q@81,ч`LIQERZ%MxMDateiname : DSCN1767.JPG Dateigre : 668.1 KB (684158 Byte) Aufnahmedatum : 2002/08/29 17:31:40 Bildgre : 2048 x 1536 Pixel Auflsung : 300 x 300 dpi Farbtiefe : 8 Bit/Kanal Schtzen : Aus Ausblenden : Aus Kamera-ID : N/A Kamera : E995 Qualittsmodus : NORMAL Messmethode : Mehrfeld Belichtungsbetriebsart : Programmautomatik Speedlight : Ja Brennweite : 8.2 mm Verschlusszeit : 1/41 Sekunde Blende : F2.6 Belichtungskorrektur : 0 EV Fester Weiabgleich : Automatik Objektiv : Integriert Blitz-Synchronisierungsmodus : Erster Verschlussvorhang Belichtungsdifferenz : N/A Flexibles Programm : N/A Empfindlichkeit : Auto Schrfung : Automatik Farbmodus : Farbe Farbeinstellungen : N/A Farbsttigung : N/A Farbsttigung : 0 Normal Tonwertkorrektur : Automatik Breite (GPS) : N/A Lnge (GPS) : N/A Hhe (GPS) : N/AModel : E995 Software : E995v1.6 Date and Time : 2002:08:29 17:31:40 Exposure Time : 1/41 Sec Aperture : 1:2.6 Flash : Yes Zoom Length : 8 mm Exposure Program : Normal ISO Speed : 100 Exposure Bias : 0.000 Metering Mode : Pattern Light Source : Unknown Zoom Length : 8 mm ""2libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/NikonType1MakernoteTest.java0000644000000000000000000002336210716136374031002 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 25-Nov-2002 20:47:31 using IntelliJ IDEA. */ package com.drew.metadata.exif.test; import com.drew.imaging.jpeg.JpegMetadataReader; import com.drew.lang.Rational; import com.drew.metadata.Metadata; import com.drew.metadata.exif.ExifDirectory; import com.drew.metadata.exif.NikonType1MakernoteDirectory; import junit.framework.TestCase; import java.io.File; /** * */ public class NikonType1MakernoteTest extends TestCase { private NikonType1MakernoteDirectory _nikonDirectory; private ExifDirectory _exifDirectory; public NikonType1MakernoteTest(String s) { super(s); } /* [Interoperability] Interoperability Index = Recommended Exif Interoperability Rules (ExifR98) [Interoperability] Interoperability Version = 1.00 [Jpeg] Data Precision = 8 bits [Jpeg] Image Width = 600 pixels [Jpeg] Image Height = 800 pixels [Jpeg] Number of Components = 3 [Jpeg] Component 1 = Y component: Quantization table 0, Sampling factors 1 horiz/1 vert [Jpeg] Component 2 = Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert [Jpeg] Component 3 = Cr component: Quantization table 1, Sampling factors 1 horiz/1 vert */ protected void setUp() throws Exception { File nikonJpeg = new File("src/com/drew/metadata/exif/test/nikonMakernoteType1.jpg"); Metadata metadata = JpegMetadataReader.readMetadata(nikonJpeg); _nikonDirectory = (NikonType1MakernoteDirectory)metadata.getDirectory(NikonType1MakernoteDirectory.class); _exifDirectory = (ExifDirectory)metadata.getDirectory(ExifDirectory.class); } /* [Nikon Makernote] Makernote Unknown 1 = 08.00 [Nikon Makernote] Quality = Unknown (12) [Nikon Makernote] Color Mode = Color [Nikon Makernote] Image Adjustment = Contrast + [Nikon Makernote] CCD Sensitivity = ISO80 [Nikon Makernote] White Balance = Auto [Nikon Makernote] Focus = 0 [Nikon Makernote] Makernote Unknown 2 = [Nikon Makernote] Digital Zoom = No digital zoom [Nikon Makernote] Fisheye Converter = None [Nikon Makernote] Makernote Unknown 3 = 0 0 16777216 0 -1609193200 0 34833 6931 16178 4372 4372 -972290529 -921882880 15112 0 0 1151495 252903424 17 0 0 844038208 55184128 218129428 1476410198 370540566 -250604010 16711749 204629079 1729 */ public void testNikonMakernote_MatchesKnownValues() throws Exception { assertTrue(_nikonDirectory.getTagCount() > 0); assertEquals(8, _nikonDirectory.getDouble(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_UNKNOWN_1), 0.0001); assertEquals(12, _nikonDirectory.getInt(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_QUALITY)); assertEquals(1, _nikonDirectory.getInt(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_COLOR_MODE)); assertEquals(3, _nikonDirectory.getInt(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_IMAGE_ADJUSTMENT)); assertEquals(0, _nikonDirectory.getInt(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_CCD_SENSITIVITY)); assertEquals(0, _nikonDirectory.getInt(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_WHITE_BALANCE)); assertEquals(0, _nikonDirectory.getInt(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_FOCUS)); assertEquals("", _nikonDirectory.getString(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_UNKNOWN_2)); assertEquals(0, _nikonDirectory.getDouble(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_DIGITAL_ZOOM), 0.0001); assertEquals(0, _nikonDirectory.getInt(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_CONVERTER)); int[] unknown3 = _nikonDirectory.getIntArray(NikonType1MakernoteDirectory.TAG_NIKON_TYPE1_UNKNOWN_3); int[] expected = new int[] { 0, 0, 16777216, 0, -1609193200, 0, 34833, 6931, 16178, 4372, 4372, -972290529, -921882880, 15112, 0, 0, 1151495, 252903424, 17, 0, 0, 844038208, 55184128, 218129428, 1476410198, 370540566, -250604010, 16711749, 204629079, 1729 }; assertEquals(expected.length, unknown3.length); for (int i = 0; i0d;S֘Bv V\l=o(pޞKKׯ4d~K=X<{zc>r=@dšvV.nEE t6k $!Z6.ARhG"3W;~گK6vu59x06'>4SQlOxC~?]<d2U@uϽR<%s,'$"&w {>xA")JvWC2D6sOƵ&ҢI,Jѭ]hsz6HУ\deoƺ[9u ~Zv;-abEQ*8-Tcef+[%1}jn?!9Z ` MO01ǥ5:Θa *bY8"Jx=F1Qo4}aڜ%1X&iI py@tw 0Q TRϹ`(`:z>_SchOGNh/){jUlgS@qqҌPأC ׊!Fh'JXfupP2M5rs az1Qr(>U}1PeCJ$sЊh Cc88;vAb)(lQ݌{P_w1oJ7zT!`~m?JcӇ>\bq`;R#J6sb% Rib}&PK+xL p+zɐF?(qHD?gqaLvϥ 9u5\EMm.= =4¦v*f\_MDmd xSXplp8P"6i*f&zt{0x\8(]hdX8p)~8M&8!CӀ#6>Rvgk~ v;qLrS09ʇ!T'֢bw?.6w`4\sȉcSݪG<7 TlRnOCA9k3ŤVTg֦UǥfR6tjx\tU42 ,4o jSVqJ߷jweY,-m%[~*cɸ8WpGj)X n9$bi% jUr?Qčn4lFqK8&;%,:r?e6gN@O?UHs~F# 4qf'y"!Ӗ8=V\\GvGzNJ;E|҃ˁޞFX.e+`љ"e珡^*;y%)!Kt@r;ץGj7c8)w{bu]>IB31%8uք|nۏW&5"d:r[)?)'ԻWmˎW~*>d`ȭ] i>f#=J3ynepV2m -v6L#ƽc'3C(3f]r;b˟Eo] D!ܚ8 ZnG3udʑJz8ZF| ~Gd ֙j>G?΢% NiSLSc!BtQ8? p?J*0;cS ǵ< ģ"uTj1YF5;_O)1CbtҠl *7kI5M ޗ Qr*sY: qUs&@ǥH*m#N:h@8=8qE=9\c[e7ǰG$ )qKý8 ?*`g#i}Pt))q cS$QHԬru}5O\*z- 8}lRxvu Xy.,:|Zx+$ɽDk<%H.= aC!)(=Ku݈ QrP}8Khd`F.ǀ@V>gLteFy,3=`~U #| rqMZO?.uKd("g'5vC7bA G j叅/#e22kt%Me1)H@#qҡWoc`;Lcsg_u6@ ⾯gTkoDa 稧GV~{̛f;D®ƺdȁeR䌆n>c {d(3}kc돇Z @ /72d`xx`F@cm=HBѺ2,-Z"nv08yk/Uaȁq޺xzymȑFѱU8HHNp?JHfw=>O;S `J=@4ﻎ:s>3(Όu8vB:R96cץ*v SN?AVJrv\aU16ڎp3Kz`R^䄂L6sq_-wkq{+'83j\t|Kk:'UB1T9b=49(cg]'th X,ШR:sD d85^VC vuЪq]N<02q\2pu=˶|mɴW9rns]D.pGO~"GYF,`kQcO"g<2*2qt G$_Z%#գN9^9ݯ)XEr'q8J tXHe`1}kD„#oJwZ4>=l>$feɕTc%@#8SJY$9 zZ~'INH-F w,ONO wu%[ =!pNyI4ViqMNYNU"N:hOק="|cZ\b}.8M 8z޴)sLWzxUWKcP=%aiOUgq:1"n0z&(_ֲo{S8qP棹j-is~܎$S\ƒ,Qb1N)ekmе['O:v8^Kq4>*݅m2g5|M h;'uz)#w5+3ٴqBdΰǍ3Ӧfs^):t5 /no">w%L$ק^HCVГR 12uq?ƮK{|vQŸ?cHr!嶆uKt?:z{}Z̟o;Rt3b^?Jk9m ֬ojn-&;g&ʃnׯ_WHlL?¸OxN=6ᴻ(a- m,x◴]ыK; c:ִuWIT]n.W5krXz嬼qshEmSs.Lpy~h#{Ҋ\@`~J>g.cks^!1ů`1ɯG Σ[{V)#>h(I -  owRalw(ly\[G1Cwyq4Βxi]37RQ Γ1EQqQ) S> xu^M^+>ڋI5PLzqKSp)vYLֽm@J\x>ޮ{%5UÊ[v!9a\[W2g9kֆ=wsRx?Y#wh'9DZ|HZ'=3]43t| Sq2Z%ݤBy NN3/.c~c}qiV?Mp*aiM^l1Go}9bq=+ x7n,\{WjoLv#G<%TZE6 Qx-}ll%z}2þ?`Ea(q^Mx}"'{# *qlQvWX$q=T2)ǧP^VgCZE+:q_0G M~L:LI|ݿ5[iM#q\RB}+uOXNMs#ŎZړc,67T_\C ӦjU,}XZ^&b_R~.$,?55M[831|'gMwqn  w|cV R;' D_@u emsм wlՅx/Cz kv,ZV%" z®:VOGs R#L;t+»9,;Mȋ^e>tRO_^u&lclf}s_\k[\Ι*5*z֯E4[e=BEppFHqq)p+oO VcN(kԊ 4kƥ4=d 򲂸NFxk[`k}&3K]JYKݭ&fr {Tb9z[ q1̰Rj:zd7)2 9zW7G}CQ8*i4OUo<^#t1`55uɻ!LmXZungul03ԏgw?:=v[I<6Fj?КɅ N7t|cDfl L鎜;wک$0qg'5 P[ !GZ0yݜ׭vz-jjrȐpFp:O_SZ- /Z=ťr]F*J#X r7r*߂5` x@Q%0Ӣ&&*Sr̮sL}sYͼZU9bW8y'=zsJݲ;4F9I>ҙ֬|H$xP>CQ-)v >E]|_w!Yͣ{*ƙu;H+2nns[Ϧ#p>pwɎ; -dʸ+xwantW]mR{VF<,m"c#nqSV<=ZmN%{m=tARHveһ%TOn!d""ո?-{OZ/i[9̒csGWӖA# ASSKgzMF,gess]z(VLBǯK91k^~3D,Y$Mi3U:W;]ְxFQ;{D4cP,[#ux\ֵkmazW9kd8#IJNSi77~3[=r+PcɕNF7kzE{;3潃Lg1(8g9?S^qJ{i n t=>Q]#* ٮS{t I0J~5kMnbC!ټ+eGT9]w$^dbONxVO;G[k9 9 =;v4yztRM? V 䔌Ԡ^xdU@ðHTe@pNGb3zVR\막/)ëY"䍉Uy'z}EuY.<߳p#,x;ȣ|x>\`dpN5Z&Yb;18T~\z~>ih\k˫'47VLDw(RFNy~=OO;mr@F_S4SB+Ȣv|"?˽v݀0*=I.EVFwD|8gyU $vFjdW#ww<{u{{{K+xa]O sݛ#7[6}„I;5^6x[{VsOzRvel?:|W"q\GvIc^@)*F 8'4]B+9FpkZLPǍM 'fAf*6xɫ:e7Q:{FQar13(md_A(^-(' _i1|0?w (?O~?Zir؎}[1$cTϛu&m2DeHvV4pct,.vѻnNi7mhy@<׏gih^5FWG77hyWHgt^2#q ps~nx# jҴ))' \t=8ǧ5[2E*ο6#-#?FWm,+ٛ%cl@LV;F28+S2<uS_]Z'R0^pW p~U>u<҄G(@~T` 8Lq)u;#9.+X[!wQVBT29ArZMěa$R.?c8UUGYTℂ+}& ZĎT+E>cH,;ɠhYǐsՏS]L8A%xkV@ W}f$үP?tJ2 /ІrPs7Vl("̏%AJ/~t]zv"!G'*= ciqwڍj{p Н5p\՛[MJJȬ{.,KcS\jXٗ{/< ĂA9;W& J.~P:ᑏcQaCͼ! SLR-a:o pN2;'ɼ+oj/x_R!MXDrq0.mṍ6( uv9in=asӵ \ԧfgڳ)/JNMzv"QT@U:~1>QXU9U.}*·LUHPOlc}FGЎC]@@l:IuM͵,;UFM_]V^I"R7 .ʮ RAv#^%s ͣE"#{trVH {;m"Ts'121z Mjvm̼dv*u4p[+t넿IqIl/,crDkI3~t@ d 7[38IoUn,ba3]-SVK,9ZYe^N ;(ݏ QUvH3(;H?rUODַx;+/*&Bu coǽ{TxCg2z $Qۈ`Ndo}=~#h"K d8'UD|sVYWއ Wx]N346zh8&oS'<׫-߄<[B?bYn c24DlJ9N`U'{{>U#SXw~WCd5fbq)!1vC4wI:ҭMI=N.*CҾ9|A J@ r~*Z"l$|1K`I!Aq+w$,x8x:mVʞc8bIןz … Jr>m4,*t灻ihn]z>zAl-C]xwɭO{;A2 T7x6-"~D1pOG{Σ9t[\D{s4QXyqs_ө:4zOԥC [E}/O{m,D!|1SvOˌO9}PmCKZG;1tϭ}Əχ=Իޜe.?Wôr;J[?>(K Vos5gZߙpRW~OҽMϘUo Khcq`$\8 l~o_/ quQ{_.}gܨlzW%Efh (<`fX+HWS=OP K pq{{Յ>N]8`1HelqTҪvJک0;]gFҹ,bMU=:f/帋Eb6!@#+zUxX65 Y`I)[V D2( wqV5n=in9)O_=)X .0XSGI9%GS0GܻɡEr<@ޥ{jk{wzDe$H1~FXdwę-cX⧓ [ϰ\?\ +|ьv}/9p2NKڤm/.q۠mN̐[ [= YXCǯQsvg6Q7gN2E| ퟠ_H~>)KR:j:vqc c`??ҠIW6&v=;@֞#x_b𷣏[V\(%Wv9&54`J[֫#z*EoK \}겭R;|ߟ`@ZV=H][Uj$g6vd|pz~`BGR+j%<?ҾjC΋:M>CmA (sZܭn (q c|#+c(RՕ4؜,kaIfbRGZ{V ymm#63]-y)H汄]工B3!ɫ"S=-p=+bY##iUrɻlm@I +lm Rxɭ[ډsu@8g0jE<\N8zDUWXuU}Awpq x\ Io,ϓ`eG'h,<9/*3G&$%I ~*0~0^[_N5x[QP^ 9GӎvՊSKG_ALJqi]_U[Esno0;Y^r=.BeX[XȷGj\3e0l9~MPIM&+LYs 6OqӃٍOZeew׽ռӶT'a8ߙz}ֻ~i)kE+cA<+3 U>lyMMu?.-X$cdmz ɍV'!^k03^Rɯ=~WA($O_" ʼnxϯT^JīNRDoXV"d=R3J]UOC\`u;]1#ekZ4P(oZӯ,p:֜nM GShTUd*Ek%#ŦZ/qTgg=.P(xQ "F̣_gw; '؏e"3\))/a/=?w^)afE>W؝V8gY~VIUy/.NNtzZBx?zo$ؘ 9+*8 22GW\XY\H&dX]>=sWDڼ[H*TmPW k+&, Oq^,G&'ΤID׫s3 ~cR1:F)++{/6mOsEuxWz\i0#yCn_~zG_OiLvzcF?}ЏL\Jk뱴SX TSߨsښkΉ7H| ؜޾%3>dhzH1J:1C S`ӄe0H@?.GCa7:4\)npA0$u4J%E,yp6` g.U$;Pv2ӽ"`qlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/recursiveDirectories.metadata0000644000000000000000000004512010716136374031332 0ustar rootrootsr%com.drew.imaging.jpeg.JpegSegmentDatabj"eV+L_segmentDataMaptLjava/util/HashMap;xpsrjava.util.HashMap`F loadFactorI thresholdxp?@ wsrjava.lang.ByteN`PBvaluexrjava.lang.Number xpsrjava.util.ArrayListxaIsizexpw ur[BTxpI ExifII* (2>?(Di@$CanonCanon EOS 20D04:11:27 13:39:09HH2004:11:27 14:22:569I@d!ddGddd+Kr"'0221   I | #0100  1:$$$$2( 2004:11:27 14:22:562004:11:27 14:22:56Ԥ."~"      2j u2      @F @t @t#\( ]DpPqCanon EOS 20DFirmware 1.0.5unknown( NN;];&  p P " 8 T2 *08CAAuwv0x x PXMkpjn ~ |y36PP-&a@1'X^pP-NQn0'bp  F}7 4m '''''''''''''''?&%;BE=E:::530/+/-(BA9/96116<>=,$"*>>BAC>4.295?9'%*?8B<B=62BROSZKEmhi_eSOND?:6/fVMxrdQ^XMJKOPL5MFVyrwstgVJOVMVRSLV}jyluhYSsIEhkl`iVROE@;6+d\Q{scP_YLHKPQK/PJZzrwsuhUHJQIP@\T^lzmuhXPg|upmF>ZMKBE60-%![JA[OC5;4+(''&"B:FYKLGF</'(*$&"B;BYCKBE;0+9C?:5 cJ5b_U8+p  D. + 8q T\^  ;8 |w}Uq%bI7| g5et* 8ps5 @@@sp x,^;U!1VVVvBM_10L0)3:1 KN  B fUp ? ? C? )D?$f? v((X00 Kt nnnnn@@@@@@:(@@2>7 #@#0F.7@4 @ x,^;U!1VVVe)\+10eW0iG0 x,^;U!1VVVe)\+10eW0iG0 x,^;U!1VVVe)\+10eW0iG0 x,^;U!1VVVe)\+10eW0iG0 x,^;U!1VVVe)\+10eW0iG0v"e!1&110vVKc!1100vBM_10L0)v<]-(!0v0v]|Td8!00 v#e!110)vVKc!110$vBN_10Lv0&v0^6!0U0v]|Td8!00 v#e!110)vVKc!110$vBN_10Lv0&v0^6!0U0v]|Td8!00 v#e!110)vVKc!110$vBN_10Lv0&v0^6!0U0v]|Td8!00 v#e!110)vVKc!110$vBN_10Lv0&v0^6!0U0v]|Td8!00 Pgd4!Pgd4!Pgd4!Tgd4!Tgd4!Nbv      $ #'8 ?$f? v?$f? v?$3? v?? v?? v&+0:C l"s59l"s59Xl"s59 l"s59l"s59Xl"s59 l"s59l"s59Xl"s59 l"s59l"s59Xl"s59 l"s59l"s59Xl"s59 b}:#nb}:#nXb}:#n p#yO%mp#yO%mXp#yO%m EZ-aEZ-aXEZ-a s5,rs5,rXs5,r n8 /Qn8 /QXn8 /Q X X X X  X X X X X  X ndndndndnd}nz }nz }nz }nz }nz ps ps ps ps ps zw zw zw zw zw |} |} |} |} |} dZdZdZdZdZndndndndnd}n{ }n{ }n{ }n{ }n{ ps ps ps ps ps zw zw zw zw zw  "&*.26:>BFJNRVZ^bfjnrvz~ "&*048<@DHLPTZ^bhlpvz(08BJT\fpx&4BN\jx"4FXj|"6H\n 2FZn0F^t $>Zv $ B ` ~  : Z z  @ b  4 X |  6 \ R030100>B) .%6%(%#HH  }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzw!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz        x! ? GߎUŸ k?J|r1NMԊ݉E6|/;S'xgX[va|1GX?) PGpcM0$Ձe* ^5@2PQOI0z"դv8fێh/A>g>ZK*.'tr{kTն֧YHEl.eŻ{;'o9r4r"=DCF$?G+df\xfe϶kR\'uhw-ъ[IhXmv2+I]$ $F< Q14_tU [#R}Ү$6ih6j׵jFrlӃN@1mք6 }VzH@@SҴX_35uq׌KŎj桰(\=f6Al[Wiz5|$9(MMSGs8@e)>+;mf{(/_˴2p͜ }k2ZIe\4dlq $s*@]XCsM JcwcsVdȾ?#,'?^rLĭwzdⵡtJ"ǘrH7mƪ(yXe2 5WNAzW0n̞/6 b$sդ6SVfr( wUs:rm¹|aũ69( J#7 )-ѻJJ̎3tɭL󰄇$␞[#à'ڲTzq0КLtXc{[ ^cl` q4By@ԓqUHԹs /3+/ &a9wFO΋k{(v@X㧭q TZך̓Fۂ1% lRVWvON5)#<.zׄ-+f$N[1=Uu{5{rqՏ5ÆWU@r0{J 5I~mm;#YchE}suВWU3lz€S+EM 6P1 ןW c]ڧ^FVW\W5/6?ZI8礽v5p+t7Vt4kٮT d=;oo>,*̶U76Nmp2A[Ԧ\/Ñ:#Fm OsP^A~U2/}3O#5\hFkӼw*P1=]tac\۩Lz~f#g%~T)Nnt{P8Zj 2#U֎SSy&h:5( Z!3CmNNZNO$;\}?0.RJ3tw9潺D`V"rKeԚUS"ݯ.kZ͕xn[eO2Tu’FữC\.|ҙdier X7Myךnθ6qЃ5@ԋK*6ӒI(y({gU^ZHQ˧ZBAĒ/BcP??xz]?U!t\pX O8w:vMjGe9 kU d7cO>%Xsysiyq-&ЃTێ~~z|Qvw7Z{E{vA,K@ZӢ8NU0'ЌBZM%g>kF.u26k>U,~x-.0N_1I ռu }3IK[ s-IA8&udA9h?6kWV)klYH` ynhkl{uqW'\*Nدg{GeoOķ9R&H9W-e]Y"fWP~PR[Q,vR[;tJq}WBҭqxh܄g$1a (6?LxHqxoCF?5}?Q \q-[kyE]RsI>-h~~kf ӭ[ ! ppsVI~ H/cuqykWg}MCFMY|/k-W~$d0ʪQ@g,3ngNo-N^\-MKy=P+&$8W%WAco21n|[H,TҾ]7[|Nej Ekޒܨ rǯ5|k DÃeCq=Ez֡_ tmm K?v忋i+⼊4j_~0y_y55$xWσjeC9 91x}'ip$*OzLf>XWQ*ƭ.?e+]4_[-/ v[e8r6|Mj׶S \E*ÆFsNT"$'SKym4¶J Avz漻ǚǃKaᗆ gRŋFr[BjA=ΦM'~!NPcI.&y 5p mM>A!%HPQTy u 1|խ- Rw8ߏ9-U#5DT*q'?Zo?g6}-ǖ\DGjyj$yrx^ ^yrڢO50 ʧ=Ozφ>'i]e`p噂/ԟW/zÊ>TOǬ|;wuKA,Ze#Ȟ2pe0\=U:i5iT4 9>]4U#RihkmlCWG }̛818}x^^H ÅEI'ڜMcZRv}px>>kɡ[Ji)>VDq~46 `IGWUiQ6wm <{2,G'T%X{{Y8~>2GǦ1v;wne.zkɁ\slxvkmbiP&ŀݍԱ=hB!~@?7~w^ԇlQ* }j;]8Y>{QK:n+aiVZ|??:3'0œ#$}xZV7VHāA$>\\+RݞBQvCzus+~'Kw"xe FדϭnXhۦ6\U~#&R>=«F (;%_G[NRqxfH ?;8fPq? WfICpN+i,:Nr_ivFnef ێzG8=_HkW`nD}1+o)4a[o+,h2Nh{z;V=wjD> !&*^?ּ3=%K a)bGy~:ֱ]xM?Kr|o5U'hV(HkβBrH \s vWIoO|Uo'F5?Oq-JB(A=HtI[ Rx>#ӵ;HH~x:־8CɕLe?~:ZkM{ݫ+~je$ҍi]<($|K𧍴8Xd;cM ^9*3LJH,zW wmiSQ0O\nkȧWyNvVbh¦V*q_ʵMu>CISsu3b (խbCcTbכhRnuc~+$1T#aJ ,WukKLu+oo&v9Y1#񹲖3Elpff|ۨ|AYJZ9' ȸмQd*H!s¾J}FK9B32q@6)Mom#qOƝ՞ٵepѱpj oma." aO֫T03v0E[_k/hI-ETT+3*7Ŀ1ڽ_T_?xxlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/windowsXpFields.jpg0000644000000000000000000005702610716136374027267 0ustar rootrootJFIFHHExifII*  (122 iF"b"  !2hSONYCYBERSHOTHHAdobe Photoshop 7.02004:04:05 08:09:40Testing titleTesting commentsTesting artistTesting keywordsTesting subject"U'dF'0220* 2:cs5 te BJ0100R 8J P 2004:04:02 08:32:092004:04:02 08:32:09 ! ASCIII am a comment. Yey.aLJFIFHH Adobe_CMAdobed            "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?I:PcRxI8 )hOHFRR Y %%&8JCLBLQSB SaLВ„'LƠH hF`MS$-P-Rܜjʉ )&oH5GuD!BPBń:ALƸ 'AL*I$H))=ODL*o QM@xIE߰hmw*Q(TJ+_DŽ USILa<)jJb#T@SkRR^Ҙ`=vA( :)jJjG/2@4 mD!-16ڗG'D2®%IVhhZ )!4#ZX8O(IKf NDiI-d;;TfD)V~AuT^*oqڄ5)$ceO ,_TbV1 hׇ7%ߊQ.ᱠHID?լBb*EBdE M* %%DWH9$:Z&`AY,rM)&^<,y=՚_&RmY Y.n0s@|K֬R%D*R!t%. Q *@r5nY%6nnJiHt) ]i*Zt Photoshop 3.08BIM+x 8BIM% L*6W8BIMHH8BIM&?8BIM 8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM8BIMQsunrise_rays02nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM8BIM JFIFHH Adobe_CMAdobed            "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?I:PcRxI8 )hOHFRR Y %%&8JCLBLQSB SaLВ„'LƠH hF`MS$-P-Rܜjʉ )&oH5GuD!BPBń:ALƸ 'AL*I$H))=ODL*o QM@xIE߰hmw*Q(TJ+_DŽ USILa<)jJb#T@SkRR^Ҙ`=vA( :)jJjG/2@4 mD!-16ڗG'D2®%IVhhZ )!4#ZX8O(IKf NDiI-d;;TfD)V~AuT^*oqڄ5)$ceO ,_TbV1 hׇ7%ߊQ.ᱠHID?լBb*EBdE M* %%DWH9$:Z&`AY,rM)&^<,y=՚_&RmY Y.n0s@|K֬R%D*R!t%. Q *@r5nY%6nnJiHt) ]i*Zt8BIM!UAdobe PhotoshopAdobe Photoshop 7.08BIM XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmAdobed@CC }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?'9s&ϑD?+M7~4p!z)]%;pH~T*{xsUа#i#jcQ2>Ă0zmu:vk# }MB+BY6;n/jLqw0aZ\TW pOZF% q+B؜e7`c\‹БH(p2W緭LO)|jP%hauv`Yx_Cvv.S$eyqr=&+oRćH=N:SA(smP:b3S4K9;0 e*Ƣea?t+zk+٭ɊvG ˱dxocܜTȄ''q]H|ݺ{tc~P7M;1,g43 斄F+M1J@Oą~TҹjGr.i]`{VъARJ@ն$wLInV6@ ۭ9OC.DOݟo^JUn$ dtε6 *7M(bɖژoyV3h`5ԕO9-+ݽx ɫJ6#G=jwrUB@#E[/>uwuK1vԜc ^5lhD*)GEn GҧMe)\&מ1;: Aj[;66!'p85:>_iNhԲ%T1GZ7{esp"[e>ҵ!@G3M iUUj7"n@2hOٲfz)!4A"ux$&SobdJo\$O7@MZyuԆdh1|Ԏ++ہn8ib\W]ؖ:'}55جC*v+ި :m ZNs)YU< mjDtUc<[?"##;P5f@a['r ziGCPdst&)R\m O][W2Lr!g1*oJtU\!n Nw$63Z^D Xc E*L !@',j/j͒c:梤I(ܕhtvz񞕄`]Jm#3Saq6h#WFٳMY7 M[JZZ%#98-4eb#=ҚMOR)!;\p~I!T&EE9,==WM.E&gjJ3Z7rscznY9G`=ku#b@.XuY#YIXf -0ᛶ*^LhqOs^hwI!-W'UАqeiHp`CUʩU_DE f݅G0Fp O-hSzS;L/v&&+sMC*NRֶV:$G;F8R[EN(1f34,+ItکpsFI qh;8TQ $uS4-Cw3tȬ521AݓJ*if6qIjhxk;GW7g+ǽ*R:-, 9fe t' r{us*Kf=A뚘r% [^owdIΖى!A瓑[B:2gb!OVQУ"£'+ޒ7Lp@95L#qYJًj~`9M0+Ex5[܂D$/F+tɲ!ۀ 9At.hH>ncZ˳ /2 -h%?*Z2e# 啿J仮V@W<?֓:v%w1{cnF9jIcmLz!~w=6"̾ιFG:.8sU(wOcF8JTSѻ6RIucn0b#V-؛3uxVc~b 9=;ٚ*]sۭcr3!'ִg4 #MSZ[vXg`Zm(\ۀs}ϥT]3$PYulEřR2AMm0~Q=]Hd8kc57}y9|og)6t6ł#i'[l#ƀ$#qĢElx#֎N${$T7,rqdb5;Vh$]wzժʩN'n[ڪsrD&j}`2aN@)b=*FAqU[ s:ԗ3hD_v JrIx`A$cgt"X :WS.跃?:Yd*r'8Tކ}tEȕ ^泳@$. Lu8",\\Yn8NMTsNTiFJm(A4DlA,*2:Z, )8R5'rS׊P 6Fk-Qunzש_LE9&+Jd\Wheas"$=sjhmYF0 `v%g#d;t3Zsj̛&gM`+¶oB%mX3zУrX2g' %sNK zӜt"0g2#j;)#s[YBv6Z#2krŶ1*c5dvNpp{g&=6(GrNJڜt+<95cI_^x[pH%+b6,rz7Ɯ&lsq۴clT`Z@PFqvuS 99mm8j>ō2V*1xr0@Pn6ҵ'tZCq8rcHť;ddEM;sߵhd)GsZ4u_yb3XUf&W'1t>2J,YI *;ԊͨqQ ƣim,{\ziY#_`m)] ܪu:iNo L| B/6r23h4v*N3p'BcsGr"o."r5kiQfxnd\0Eiq7tw]prOe%[Y#T܌)|(${{6\tNM29c?.S|*P֥G\8Oi(ő̊roV*GLi)RnNI55ؕ#~`8 XUNȔ"`lG4*(6~r`.(=aٲmAaZN,8P1H^F=MRn#HpX<ַs"ʾ0s=ֹI1Fx H ST+\R2I9KiX#Hy9uFTyE-U*g{jKly9Hdldm?Z+ȋy1 g8JnEP{~j{V̧.mo ۴ ZNjt)|U=wUf8|A<S8m&1ʑHj.'4KW<ҧк\jM%h@]6TNsmwaTrx=_Fhm 882cQNIf2qь.OҜi^O.Q5NEֲǣdsRga]A3)$d[RTrxޡ2o!ѱJ}G9QtȬM#)v=/A.r:X7:%{Y4dpC+k(#Snɷx pk7qIˎ:VГkPLa&J~5S7Gme0Lm8 qcZi[RԺnBwHޥv0=EEX F1ޒg3}y%6xx$sz펈Q;@&\rG$]4*,0=BQwNTn#pQɽuJ .NJGC}8ԇƪ`ns_)_A\:6\hܰ s7q6dC?JNrs[AP NMZGÌ1Cǭ5w1Z#oN3<{Rv4Peoh{T .I?:4[tK)%+Tu܀zҸ`Fvck"iO=>dzyJ's҈&/:9Ke }*eHAՠP p[hyeb_$6 t]uf8ݜs]G4. n;ᓴդf2 8"/s>NH+HřM$U^9zm"N0a< %v*l 8扤eQ[Eho")L{!`ʣʗRイteƱiTnj䍿w*163I_M *Ð)skj0fAZ-nJvMdT%Q"Ƀ؆AEƬ ǭ&/'qOJ) r sޛ!)%e6 =\@\>JIJ H9j.&aHm9EظE}x} NmeJ۽*9(@agȹEd߅9Үli*7$;V$x&Uapu ;Xg؁08:l{VrKFG_vl7BCڷZ+79 F _HhS%Lw3eUrr'2nPx?!?:eYSqa0N8&'k+$Rڡv3UI6a)Y^RG9!bz<(^s*p98S9XǧJz3H]N #7.1$?tJ2c8q[s鱚f8ב)<ۊ]*Ğ y<}+G436C"{𨕺(>@N{U(7:y 3RuQpRE > 4Ǣ6Ԇ\QZ$QrJReA;BFGA|&F;y&XPygiy_eVIϮ O;1 `X>P+RmS8@$jʝK̫H3J27Wjr. H'[F58:z \^85Vh Rr ]%bLpJr+xt>¶vSmiJbZ^7[ Kr8d8Q)$#(HPeO#Q(wK7N-ۅ qM+ CzIك,}1YXn4!\d}qNIbqF{K2eۿ;}=yL)v$X1ӽc Sn$n@ YFjI `zj 8kBGwtL4 @]K8=9c0 ;{M"Ά 2V沓͟|?BV#}/bz,K{2$mUgOomkqsrGQQb9Ps+7m}{ƭ<P=AֶH+{60_;ClWx `>l C[L!;F}u)4E-_k)<` [2e'=(PԤQ{wog%NvX#ŋɌ-;ܡdQ/gR"`#E:] 4WxYG+߅9SK،@ۗS9j-6J y-¨Щ\7 qme%p} sZRBr(NF*/Cg \)e-p#%qQ`tkL ִ4[2q@⣙EXAN-".in?8 });ofpU:EEsE|-6unD cҦNN6:[x6G)3G+$XژN XI=5*e'ʋWZTa5!A8j*_Ulgk3St~ޝلIf<`U\KjC=V#h[9<‘ޣ\G$nU8bc[$.TR{r˻n.r' w +RurԩiQ^k~3ǵjc>T$6 03S(m09nkX֡aLb<Þ8I9P$cc)]Czc6؄Q@OFv wIpEq6♤^I9մl~ܠJ0l#]ҿ0?NֱM j6ц'q+~u#G35S;tЧorN34)4dagps2cT~ѱGCXA`C)DmFd@>IF$fTa[r !cʃANuU cd1A֧#XRuOgaHضp~S~5dZ0x2H[RYv " gT뮠Ev9#V/dp2ʖ<;}k٫on=)bS#;vuCRl͋FH3IV'&N8Kff1O@p8s6\i=SJL{#[>l|u<ȩ8k Kn.=Fq?ve?ұx TuWL@#$\Lo*L / Kol e* e #5Q\?<ˎ9R9M2ȸ N4уlr c'8 i8LjGP9=:P+yܥ r$m]D);+2MNMZGMw뜞:A:hqZn*sU w~+Ŧe/8=+Ҳ8x6''9'jrc͵4!39]3~oOAZ&FEG|n;FFrç5f:\ LFއO s- T&z VKQY HG=sSIv$U|֥֜R@Ǹ~kDF 4}Űp{؊؂ Qi3r 1P:=þ%"(:yJnuRS4K.7W-L":5W3ƾt6#TΠy\̇Y^'%qU($ixF_b3s|NEIyF*I2]Fg̞!yA\WB瓊<{#781׮ii\茏tt\ rceYU8sUufyI':YDS@*TsEt7r=GV\'cXKqC(# elzU*ڟ.bBszTeR.>0$3[G7C%j! ztV.?+Z0^njB[5)̯,?tFI֪$ٕ=N 7de uE*mpqT%p~'ܺ'809os#ѲOl4|x#ަS6e9QWcnߡUdhـczMk:+Fg44ƩFKcmZ@@> ֪\T,HvY!? jw4kGTd_1{N ;m Wfr8b?7640G5k{KHM@Iyk9E2ز|1u^)vsӠ#+w;VhlZ ;Qܮf쑰rsRܞ:- *1' B xVk|;`?y{ ϨN42ppk[h]msթ lPv$|UՊ 8\2Y Mh&Ȥx CB*H[@VԤ$TbAO׽nm؎s=/Qu5f$)XӐS&-8;\obLݡܓ3WKj'rLP+'M-QiQN18(ɅM\r@ܛu.T)N}=z{/CPT^>QE ',?1'֓gEh9.1sSȋGU0*HXqH.Wzl;c\Ε^*чbXsJ-;4vSQx*9; b fS;=U|Ӻ֢QV:t\:Q}MpgC`@҇fճr8R擊s֩Tv;Mkm"v$xiEw|pTИ;4#+);8랛j“ݏOqBxL'g)Cmުgʮ6jāc<14؝& Hvaٲ˷@麡JH  #M2Ƅw6;z6ppL@#3w:+KqGm3;#_z/ǢΎgXʓ~E0qSEO(qn;1\pF&*2n Qچ.mM{y=I9ⳕ{vYJEV:; mۺTΓӯRpk5=JS7-oAeGzܽlz+c8eQvJ]d.vGGkt-qjE$11 ol=뎬 ܍gbحc}j*sUy {WS2rgڰp+떧<޵F3#|̧Q^j"Rh lv'V269jUY[;=JNkB3&ON8-7grocI78Bmnd<c'U]3X˕z_8P%>ba!ݝGShZFurzo~e)X-rnG+{GFqؚWI d#nEsB)W>M. (`z&qBݝ-1&'ONYKFlp. jSQ{\&FoUQWn7J3Guiw(Ӑ})s$hX^ORdMuI1t\)Hj(}81Hծi;.0x j-t~*M(;_ax)6f6^VՉq(Pd,R ֱq׵[bH 휊=LMH%ltz✡ $ZI g$<=j̶363H9ع5Wih[i =g.mIGSe.Fqi5l$qA5:Φ͘:n9 VUؗtùor83DcHnkvzt;Juk9;){c19tFۙTNj`7V!o9 qCRflibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/withExif.jpg0000644000000000000000000003233710716136374025723 0ustar rootrootJFIFHH ExifII*  (2id SONYDIGITALMAVICAHH2001:01:28 13:59:33"'P0210& .6  >0100PF;( 2001:01:28 13:59:332001:01:28 13:59:33  R980100 (2} SONYDIGITALMAVICAHH2001:01:28 13:59:33   (1#%(:3=<9387@H\N@DWE78PmQW_bghg>Mqypdx\egc//cB8Bcccccccccccccccccccccccccccccccccccccccccccccccccc }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzx! ?>t\R 1@(!( @0*Y:p$/P%5G=B/իEt2~+Slu 4 lgZMO}))ɭQE܉UI-9–Gι>}¹s*@xC4RO µVNIɡH~>5ke0x##!9qqIKcI$Mh%}P~ܡs/S )f$V8pD,['9=Nk`8BpIOVh3}Mp]:omkR$3`ŪgPe'h ԾuFvW=jL?Nh{4֌Kw=ц+naY&w[9QD.2{3۔MG]Q?-n`Pߴ~ە+ NOF ;+ ZcEP=Df.aIp:z;f_aܣCβ}iXͨ/DClScї"8)OӃ[)46#QunZ)wvU]iF斺NaAEuɘYM\S}-vBR(~?p?ޯ#יSsuoͼڲk^xʍeADsId#H5.HJu{fEor?¨r;S3VZukc{[2_#fn yq7.fjdk$[jz򚰴U(*t&Fw5Z.mGp 9d&?~nrͷL3}We7FMIjM;.-G_XM[]Eo@Rosش+*(8dF'Y eN$Sdo_gTb,T$Ѳ=;T]Sa6W9[lzjiv6wʘyAʺ@C #+suBQ 0>7nvmEE! F/6W B6d$H sLϙrzViMR2wwd70V!ʀpv?1@ ~kFpA.1A4ccբzݙR׮PS XJ*[FN%7h~Yo@G\.[%2I_vQ}.QYs4+epb'Q*y ߊG(J;J3/LwnSMnI+!iR.[ Vκ$yfۇa=Hgm&lcDSpGҙyrBp>jg^G.̣ͅZK#fz KRKHBPFz=##ι7Sh{_h VSQ~5鵱0[L>f>p7>ۜn.sA,z7U:wyJ/RWQ9zdSq #u7rU m컌~t͓\K^B )Q@(L*P*mqa~Mc*s\odɥǓH+ mlvo ds:R"Ԉ)iQ@ E-RPE!f1!T8mlMK[-Z)QH(PE )m-X KHaE )Q@Z( (bsް: Photoshop 3.08BIM ResolutionHH8BIM FX Global Lighting Angle8BIMFX Global Altitude8BIM Print Flags 8BIM Copyright Flag8BIM'Japanese Print Flags 8BIMColor Halftone SettingsH/fflff/ff2Z5-8BIMColor Transfer Settingsp8BIMGuides@@8BIM URL overrides8BIMSlicesq^DSC00001^8BIMICC Untagged Flag8BIMLayer ID Generator Base8BIM!Version compatibility infoUAdobe PhotoshopAdobe Photoshop 6.08BIM JPEG QualityAdobed            ^"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ? h9ꄓU BIRBtRBtBВtRI%)(I$JI%ZОI%*RI$I$)Z (9pLo~riGPg g,;v$'2OԦ ߌ~>)Frd?)Lx xHQ7?9`; uBwTM9'vDrmcu7x;Cܟ L!;4sm=My>C `yry=d;iPxrK)CE×NKARtAJI$RNI)); ™$nrTNMc4 RP3RLr?<842?껳o_wPRL5㰘.o#_@@P&mOİu;|`[;uXXN`N.~i=GМ8|P_⇹3w GwP KKvu˴BE# Ԁ =M=Я×R?'E)* .:MH(N*'-^-f|Qps\ܪC7ρü|5J#o5vvU/qjqZ~O)v_|JiyRM3iBbc\ETX{◔OPq%t/,=ܤ(gru{?P?ꊳ_ծ|]?Zg`x+_[kEX=;lMzGNݩ#݇w yt=XrG=s wQ M3R!z'gλ9ǂr{ܮrwP(n#`&R˩wԼНϊ/qAw݇R?'uv*xrZ.Ch<*r)X\0tv1s:]q.7;~Me\uoXku[&BMԎL8($D,b!A@8 P 'ڌ< -px]ׁotYgAN8%@܇3aDJݯYkgfM4gV^]{Q1jUop8.}[8o3]7P8>@+oUd{\<@ ɬhtm tޡoƲ<]>mw0[X>V8D;91$|1_*yqY͇[rcɍ.+y$%rg} }o%_I8cQWPc> $`w*I$RI:*D=-:#ٙ{tۏ$<#)KUz[\PeZw) w!+U2S+JKs n) c=[D({ .> ]6ϡC$GJ 龎i,R$5: nk=H1vw,ޣnq`n`hA4%|j&\nU[>߀)# Lw%IՓJT,:=ucΡkӬ8n9k Aw&d/3=4tzF=;eZZKl:G-U[uv[\5kwQǻ:nE],Ti.I 0B 4oFp I`Y&NRI$I$$I)I$*ZMjW>GYAz H -2r> ԽݚO_zӷ_!^g䓆)V~ǐqHcd;]:^cJcl,kS u -94>nwWw=~hq:k{nԧgWh1#$:I\di7*V1MU{wY٢I 'pbɿ<k:c9ayS0Wp+40|D,F!ֺuk>~#sSt okߠ߀:vh׏"WF3}TzXkXk㴍v$xc#[X켼9KIWGWLח^N`&[>Mao(Ӊf* 15ʊIZDuwMV|)6; $(v\2 nRfGS-|xҕ^FE_|}[1?mC_;R$'uimlxi=={ Z|cpis9둽neaN2ROAo֜l+=CZ_]wT<MlAc]KQbdcod| Da\"I$K(gʭSQͨh?ϷQ5WTu6ow/ѥUXhP֖5wK>dT$Wpep'R Ci%)'-RI$I$$I)I$Iv[b[s|eSgSVo7+;+2q,d3Oދ^[?>ыRl FyEd$vnb?Vt>`T{??QZTkYȳC󺔪]0tC$}gkZ| G|[U$E'L!s\[S]1NZhZ`dA̪?!'Em1Cuy#"d_e1Ak^k$2bI$I$I$$$^?T>N ڭDȏʛ??0y~=2VTaWYݒ[Yec] ="z%B^{BES X#W;v+ou#]##"wZ潤<t);:-NޡpBA)K+~kYcCmpĥV>.h)`[M}c7@Zu]uZ2gOcu ]=ZHeVyq8+4ƧZRв .Ů5X׏#*ln~>GEatXfR5/A$ -{O0#"`Cs RpMukvju6[W0>HN1\_5H{HHEU8ؕ=O%2Im|EK7z(~Bt=O[ߧT̂rςTwi{++o~rjڶM2![)cqj-EО.nuo?%t\Of;i532K+OʱYV-eN.kRGo'D11}I1zc֛kOC)$}[ՏUv]=3[w*ѝ;P9"H}R LNd" Gz:s[V.Kv{0N?Ѽ|>\r^j̴͖o}VwZlgi =!sTkb̏I&S3IIΪcj+\3}oc9f% XykCG`OR;\vUdDK)-Q8~B]4д qz3\e|AmʏKmnέ4=ZD V8>IxI AnK﹭`~@=Cc\ْ4s].^q5n槔XTZrSNA#b ?NCi 3,۹|Æ 98x,pI{ a\Q}Mp⍤egRgMQj8:ZقG?*oaaQEL =F"$FhknǼ ݳ+.Pݖiˮւ;|[c`|7*WcG|婉מm˚ 8Od=$ {p"Z);oZ~K- Hդd26:h;G~E9sqn1<5o{s{TLo|Z՛ 6Xd{+׎2e(H_֜R: *-jjE5ZB/Pnּ<ATx2(4\Z@2zߐ0S_괲x=m}GFiaP4j (tyҲA虮 6 guڷ D:ǫugf <ɼQ=?ђIW I$RI$EK|M: -"Dli'p$먏R ?ڊKivi?^}2~O_H_iBS_\lܫwjhiR;8AG%+l蹭;_?-3~WS軳>aD~S8N!\h]c#MUg`Y $ f ~D&1{>3e/ȹI+tj?AUc$7DhyĚ^[<PIl)sr5 EFFFɲgE}VЖ- {\@f3tmu6ηʪI"F;Y$ $-6#^6nm,ukd /)mw2~T)2xa@JnYKNGOzYanO ӝCϹ'˚uvG{B> r2OKV!`w$`~RV%lo:s?u刎2FӗnF5=|4Yv~`4[Wv8|6Սkke;VhL/ïIsEϥߚt>#J W7Ux)80d {lOٝ_C$F!rU`LzҚI$tRI$NI:I)dI:I)dLH I$fMFI4'B9 @iwID?(!YI0Ef>3il?@Jܵ]]nO/ث܁ gBan?'jߣT.ķ?[z'ɇ ڠs=Ժ<@ 8AuG`~^,G?ɦ2ĭ3yTˢ~? &)Տ{|8!5i2t"NKQѭvN{:Vs?, Ðoզ궽0c7K~3tn>*u%E$jgC }Wm$9 UsevYY8O2KI͌ ;g~}fKc*/RnƐvk.;~a~) VKH8eW(ye?}@֎Elt-ttlLOzK+N7;[޷.c q/"I$IR'I)$IJI$JI:HY$RN$IJI$RI$I%)$IJI$RȕMG`?"H FxqqQ48 $ix1ծk [# vi~}$Â= VjYS#Z΄]p-[Z>1>ޚpKie+ѳ[ ]ګYW99h|&sp;H҅[UoUI|KO]Fyi~yb΄&HpŪ5ZÇ Vgyux8|П_ӭ͎UkFW3Dv7D?"IW I$RI: Y:I$$I)I$JRI$I$$H)I$JRI$I$$I)I$JRI$I$$I)I$JRI$5HJDq<߁*kI@NCW$[¯$Gw**I$$JI$NI:I)I$JRI$NI)d$I:I%dNI)I$ RI$I$$I)dI:I)dNI)d:I)2I$TI$'I$I$IJI:I)dI$)dI%)$IJI:dI%)$IJI:I!dI:I)dI:I)dI:Hd)1H en _g^Ot}eFrzc62KW$$KIO$$uI$R^DJ}u%I$R^DJ}u%I$R^DJ}u%I$R^DJ}u%I$R^DJ}u%I$R^DI}u%I$R^D}u%I$R^DJ}uW$L7}Ő!NO Uz?libmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/withUncompressedRGBThumbnail.jpg0000644000000000000000000023373510716136374031703 0ustar rootrootTExifMM* (ivEastman Kodak CompanyDC210 Zoom (V05.00)HP0110Xl t|    |H( 2000:10:26 16:46:512 (  d, 7]m ( 5DCP01011.JPG@ `HHQ(HH$-+,)#%04,0-3$. $% 2!1 .' /%))#" 0#$ )!  # #       -+%)-*%#$ # -2 .!-!6!1" 6--*7 9+!3 ;"6-,$"5*5#22!;'/*#)$#% #$! % "        -/#+/))$("$ !5"83(38'3+8$ 6'6 6'97*;)9'C$;# 0'3" 0'/'4#50 0#) '# #" # ,1 + "'$        -+.%*''# $""$ 1%"8/">,!=/">3#92%<* 1$/"+.!/%* '' 5). 1 ($(*   $'        *,-/)))%%(""  72+.(2(4$0 2$.%+3!$/#1 ' $!*    .'     ,6:.?>,;;*66$42".0'*  ##  3)"2,!;2%B/"@,A,:*D,A-"93!:( 6!9'206 6 1,/$+/.+%0 + % -#1 0" /"(  !!#(%(,9?#2:+?F5EM/DF'AG,>F(97%22       $ *0 /9 #      6*!1' 7)"8(;3$C7'A+>*>)E%3$:/">4$1  1#4,/ 2+$-#44 3 ,$$+-"/3 . "!"  *0/1;B'1;*+-34=0HR8IQ5EM2DH.EH7EP2@C$'        " )"-.9 )        @4+4(90$9*#8)C5$@0"65+90$B'8$1":#<*),$' -(3!,() 3(3 3 /1!3 0 " " -'/  +$-+-9@A:?E4>A:EM5IQ5EM3MZI]gAYaFVf8MV3JV-DM#9:!(   %%,            E0$A3/H6+@5'D,!F5*:*@+7+>,"63#9-9(E$ 3%6-++03$0((* % +%3/ ' . #2)/%#$-'(3,+;BDEMV>MU@HV@HV=MX9IV:U_GXiA\i7JQ2MV;PY9LU(27/9/9+4,3,6 4:5B!3A 3; !       A0%A*!A,>-!=-%<6*>3$<(9$<%8"3$A3%:/ 28$2(0'* 120!7$$)' 5"2 2 */' *#"078>IPFQZ=IRAIR:FM8DM3?A.;A3ER?NZET[8MU=MV4JR0JO!03(1"/: 4@8B1=!2: 3> *0 $.       ?;-A2$A,A+%9*A.<*@(8/"?2$<'6!=$6! 2(;"3" .! 2"0$6!* * % 5)3 (* 1")#2% >+'9589EJELX=EPFLU8@F4AG5?F8AI2EH6OZ?UaATa5LV,FL,AJ)?A'*% #.*3 *3 %0 +0*/,2(1#(         91%)?%A0;'9-9/?% / 5+%5+9'21 * # 1"$123(,%4 * # 7'"B8-@>;9EJADC@HL9@F0:<3>E0?A7AG9=A3HP@SY7JS5IQ+?I'9=#13  # ('1 "*$( '4-6        8.":-$9*#9,6*#A7+99)A1%<(F/A!<'E"A* * 6'2!43$5)9!6 200!2#3 2#0 %$ )9.,@96BAA9<=8DF;89597;?>7=AAMQ=HV9HXAPX>MU3AI.99$42.,%      ( !+*3                <4.>1(C,%;+#2,!C4$B#?(@+:6$A3%@-C#L# 3 =.$9'<7;!9 1$4%4 0 %0%/%" $ #$=72?:7A;<5?;499::::DCFMUFQZ;MU6:?.45(5=2EF)59%.2#-+,) '( %1+2        A-!E/)A90:8.97*C=,@'C$E)D-!A*:%@/$<.#2 9 : :9.>*2"9 5 45*-#3!01$2 +',:<5E:6333;=ABDFDJPIU`?FH2:?378-030.+'*".0$97$2.$,-.+-%    !+49 "' % ) /8 4@.8)3(0(1-2      C.!A.A."?'?+@/$=4(>3(C/A+A(9!F)C' 3*!B2 ;"49 0 9!0$4#5 7%9-+=72GAAM7-."(*/967D?>EDFIEMFEMDHP9@C;>;,.+(%*!("% !.0%/0$520?A1@G(:A+9:$'    " #/: ',$ '. -;,6.3 3=0>"*6,3!0;      A8*C.!H-=+A.A+<*A(7+93+?2%<7'E1G'$ 2=+9# 6+!:/ ;$ @53!0 8)92.JEE? -;,9,4.50; %*        E+A*!?2$A3#B6'>3$E+=)4(B1 D,A+C$;(  2<%9 <" ;"' 2-";)5)5!2!1$$?CJAACQU]_guSfu?@F>>A???MJPAEM7;96081)-+'%!#!(,/2 $./3)AKE]qAR],BS(ER-?K$4@"->38/: 7H+CU-CP*@S+=K 4@4B /809"1:27 3= !(        A,<(;)B'E*C5$F,"M.>I1DU.GY7Na)GV/GX0DP+?I :E8B'5B 1?5C"1="$      ;8)A0B.B(D*E1!E,A'=$=$E%C.!A8)=0   ,7(49'6$=2*<0:-"=$"B-'9,/6>E@V`PX\gwabweejVQYHJR4997;95/.0)!+$,$#   #+3'CM9J+=J9A 6@,=F-GT+CU7O`+ES'=K1HV+@Q,GV5RbFap@[l/ER4GX$CS8A#/?!'       ?1$B6->3$:5$:6$@:*>/?-?'=$@$G$G.F( -'A):( =1.4474:9)*,-9<*@IDVfjwpstKLSBA@331?4/2*%10" 2% 0,+%  ".09GS3= '$005"8B(@N(AM2@N+CU%:H5>(:L$>G7K[LaqMg~)<'C#I*E+D4*C@2@;,E1!B5(E+/ ) A'8">#7$?0(.-$@4+A<91479.,(,1383AJRQW_r|Rn}b`gnA8>80,0+-8355,'<-)@1/@<;74+7*-+)#!)15@MX#0: # )'05='>K0IX7M[7E#.9:?":H$>F2@N;[rIet-DM+CU'<#?#E%D-E2!I+G)G$B.-" ///C<-@'?$7#5!'%E=?))--0,,/ ('4AG\[e[fpixZ|Nbn02.?<5:61235??K1HV3A*4*4*3 /;(7I"9?5C?ax_xVmz?Vf@at>bx9Sc 3= '0"+    =2,D2.@3+;/,93+@=/B8)C4$B1!E+@'E$D*D(1 89::% :% =-%@94"/.*383CR-7A2?F:N`2GTS]gU^jENW3HY)23;51D:9J?<:>?FEJA:9E@F?ACCEMBAK9@C5@D.;B4=A)5:$*/)/CR[;MU(52),%*%,"3JV)23>@>JEFIEJGDJEGMJHMA>A>99;;=:376;<3;<-9<9?D5>G9EKDU`?Sd7@M3=D)/9 05 2C*4 3="59#,0$5>(>G,HV:N`D_q?Xl-H[)0!+%?N!;J.9E$ "   # <6*91%:,%B)"9$ ?)"=)<%@(B%:#@'8% C"1+#*/08991?6*8."99@DVgAP\T]lOV[ADJ)7A"19!(#33/FCDBXi2=FHMSMMKOQWNNUCIJGLSQS]JIPCDE;=AA>?RVaMZgKXeM`lTi|Yq{@Vb@M`9EP.9E /5!-6 ##-.5/FX8GV+CM9L[?Xl=Vj=Vi);H 0A1B "8#7U%;S6<=,+"#$  + ?*#90(;,"5.!:.$<3.=3*53(A4(=/!9(9(=+E3/B:?%./-/G62MEFMLS_dnY`hGXiX[aJJPEDJ-12!! $$(-0E><3Mc>GTU[aX\cLQZQXa[ZcJRXOV[MU[LLOECH=CFMWbP_eP`l?NXCQgRr\qJ]l9EU8KX%.9!.6 $ ()3%9A-QdQmVj|9Vg'?(>)D(A" 9!8$8" =#E;ADAE 4:9ERXZcW[eamw_gpSV_0@J889--+@/06*#/"M41A310.6ACF);HEajJU[SPVKHJPSbR[cX[a]\gYY_XP\RKVft_nqR[cMWb]nCKX@MXFRcOe{J^j8DM-9@!'# -*>K9Vg8Th@^qA^l3?2?0%B-=)A)B(6" =5% 5!<D-/NKR+@Q=FXOLUPMXVS`KJLE=? E%)C)C2+@("J:4=0.%),B?F':D3K^WTZ_TZQIJMQ]OWaRVaYafbgsa[capSm]bqLTh4CRZqGYAKV1>I7@K3CR4CR/:"19 !)7B2N^ >I#9G#9H2B$@M>KV;JXh`eSRXEHRFLe(=g$8c(Q?L6#< 8   ##- #(0?N !=)A+%@(<("8*A3/A."E2!=/!B1!9-=0"C3(A-!6/) (3-,8J9:E>AA>?A1(;  =#6'S<,E2(G1+G;66/+87>;EK$(-%*$9B1HV$19,6 '* $?22~[GiSq@3B51MF@A5C"*TC AG35^:*K*     ,;3B/>%<*"@*A%<%>!C%"8' ;"A(B%@'E$H-C+?+!#=.%<)#7#9$5'#,!7)L9*D3,E=?.;D0;HEJRblziqzamw`clMPX[l~cqi~r3BK;G>XPtvJV9=G-G)?M3CR"09+4(1  E91gTw^SAG3*J:1I91E(4 ? 39/2qE4R5!!  "?.):/"A,!<*">)=/"<'?%B'@'A'?%F/"G.C.$<*5!9 0,4("P<7PA>/)*>89+9E4DMMOWZX_e}exatcxctdr{m5E4Cv/;06>E0(A,"A(@*A,!>+%5*)"9+"2-"/(A-!5)1,4# 0'%/"#N9.Z@8V?DE88A<6]25SA94-),)%-#$"# ,"B2.X64$4-'X<,:% A,%:/"<6*:/"@*A+>)A!B#@2A*G$C)@(9#5'5* 9'1 0 25B411!E6/VB9ZIAPA<|FUy6Ai>MjJ[iQ`UNXMXgcu[iw|aq{r]jFV9Ew8>J28r,3*8@?GR9EM8GT=LX@Sb/JY:S`/@M%8@)1   .0/=;<),/)),"# +%\PJ<*",#(#$/# 1 2@9DG=@I@AKADJ?>8-A4#:.$>3(A8-@0"?2$A4(>6181+ <1$9-!4*3*#5'4*3'FV09I".#P:0u8@8Ft5?z5EIW~JTJ[tJ\aM[[gw]tJZgKHWaw9?#2lMGXM[VF38A37;KV:EP9IYEXe5KX-BP1K[-?L'=L -9!(   #>?A>96AAA597,'* "$!%' $#+0(-)  BFESWSV\SOWONSMEJD57-E+A,E)"<*A-!C:0E6/C2+A*!9'5#9!5+%;*%B]*1].6] ,`%1i,1z,4v3?19+9n.?5CAQFY{FYKJSpl_OaC=DGS+4IF~ode]k:9e7=PY3ET+;K%9J"+   !99742.021EHA$+, !$(-    ISP]bW^g\]eZ[eV^[SEFCE)F/B+E*F+!C;0M61F91  E1%8% =";"A35>AGo;Ba-9c4;g3>i.;q'4w"/|)7>Ow-9y(11;9H=JHZlP`{FSclK[JAFDO*.SSkHE]__^[FJqHS6CMJcsgP[g /8,6',3( !-2/IF@!%#!#! '         KWT^^X[eZOZS@KG;H<9?8=:.@;0<;,<5+B4*?:0?<0=:. D1%A/!A)@1!@86;:AqDYn@Gq:EuGWt%1t'-w'1s)0=N{:A*5198I8HBWcs|4?K>H:H:Ht53{LG@FoQ]rl|r;Jq9Gx-1}+9u*02?8FAS}3<9HH\q\nxP`)8Bu*1?MALmeg]tl{pzSTQO9#   #$VC{]J^NAJD= # %,535  , 1%#K;-G-%J7+@0"2C.$C-"E/$K/$E5+K=)I5*B4+  !+A52G96D3*C6*E?;8?M`j|e~zisoCQo39x-9z+32;;LI[ESAQ8ESgexaqzNZ)5:c+0DQ4?aXodoiel{WYq).!!!)$'   "qR@M:1IEBBC>10.65+96.(*#-%'-(#,"  3, "$#    #2$";,"?*#@-)A1(!$,(',*%E0$H<0M@9JE=K?3F;9 # #@1/C2/A55B>9E><,4=d^cJJV|ONS6R??A3/  )J62H97C91K@>E><)08696A9=lraZaG52B51t(.{1>o=MGVIXN^~^natauAQ>R%(%2="'A,/O'-Q9BUMPQIS:EM333+.2!%##    ཪḚ_M]UMFHNEA613*,+3,+(4489793.==9.1.!%#04.)%"!    #1%)2#z?;7$ !7(#,'*$4$1#0 (31:3>@86L<3I5+E1% '?<5A?5996D?>JAC '(5=G358NMXosyS==T.+~$118;M8CEVUiZnu]t_=G4.31AF%.8(/:"'"- $*),"+6)7A*:G#2:'58(,-'(   t^að߫}gm_WNE:72***($((/08>?4@<2AA29789L??;,/]2:h,9m+7`|Wdn8C2<+45DAOFXSc_Oa--0#+0 $     #lPV›|qΥΤoVJ?8;7.*(*-1/641!%#!%',-/,%'+/.'*'    $%) !!#"#,4+9 )9/9/>4E2>/:*-3''6., $$;5/E>9=3*@@AF=A@*-_*1i*5t%1y0>nctGVBVAVEXPdjGX*(8E'9G-7C->M*-#+3 (*0%.8%+4#05%2=",2',,2$0/ #$   zfͥٱ۴RA|eV{fh]jHB"'*#$--+--+1%' $   " $Ǵ͵!)6/>1=/;1?3C5C/3(4)+/A;7''!A52B94A0,6/)H4.A #e)i+1v/9n(2}9M~IXQcMaWiViI[N?K#6>*8@4DS5FV1DM/9A%9?%-2%,(-"-2'3:-=C2?G+:A,5:+3%05%(,$**0(gjxǨدߴɍiePğ~913,) #  !/*'***''*E1C   !. "   ڑJIJ ,6.9;K,< .9!7E9M.9'7)3F4+%**-@1.C3/=:7?;7I=5<$*c$1h#)t.;{-7}.95D>OFZ?S|CVx>J;09%9A2@N(>G1@Q9N\(9A$9A(0:!.6)1%4=1@G1DM6CM1DK#05(1.3!$($'   whͨͮѥդѠi|o!!*-'((-0#"$#cXx)!) "  ''*  "("ݳІr-64C7E *6(11A%;H$>Q2>4>3=%*)".D:9A;6=62C9{1<~8K7C/6/69Hr:J17@$9B6>"/:!6:+:B5DP2AM*8@#052JPSHJv]c2=J+=J,5:%/5$09$.3$*/!#    rصԵ̞~˜wœ|մl.'"-/)).,/.,$-)qape* (%    ($   !׼ՏLRZ 4C8G+6 -91A 2C" D+"D/)E-'>,!D1(8-0`/;f1;v7:x06z3<7>9H8Cw6Bg/6r4A*4C#2:'0;*0$/:*8=%:G9DJ.:B-/+>6.*%<+,;O"d .r(4t$-y%2+5x--9u,7!+'3#37)/),'2:#2: ;B5HTkeayab.?G+5@)3>(3(5=1!r$Z      + 2/!1+6lw̭ڻծЫf_Hze{fygu_%, ')   !  Ѭ̪ȫȆ`kj;H0?0>0;8H"q*4$-$('1*0(0"1: /8!1=9Rhu_WeGH%7B,4'*"+/08#(38 7    90NcQq.(_RPhŧշشЫ~l{YqI9~E^qeo`!'#  !ڪƧʨ)AS%9J2>5CP(`!(r%q*||%v"s#)q/?u=Ll.9#*4,2$-(0(3%.+21ET?ShƘŗ~fJT"19",2,2\.0S),44 EI    ]RvgVzgH]y`|ѭӰǛwd{X_EO:3PFeOo"  " %      Ҩ̱ͤ=FM :M0?0?6L^.ES/: 1?(73B'0D/)A2*>0,( $"(9<ECNJ-3*(1%,%.+4(0)1$(0#,0+41J]W[gçuf\_g]gbJQ#08"-2*-r?=V3569 4<  `Q~fPo". hXGz]MB9/<18.4,40<4gYJ<7)          ܴήͩǪqwt 9G,9B;O;Un 3B/>5B/;)0%3@/%>1(A1(  #     !#%*"- $ +%.#/8*CM~{{̤ͬC@L3JX)3=',#(ϧ75$ +*     QDZ\Pt8.!~!5,4'6'9.9,:3>26/3,66rWBo$!         ޸ؽժ˫įΰ,/#:E-I]'@S/>#2; 4=.8!2:(-+)%A41?*#1" #      ! '$#($(#+/1HT{z~z~z}MTZ+?I$.6$ $#0ȢzEA*-J'*     LBgSLeS@X\#0%5+7,8,8+8+5-5-927,3163$#      "! % ߵֳյѴѸӱJJG 9E,D[4C+.2,$#0!*0#9E',-#$:-"?)#$ !!         !#(*$(1*?K9Ta9EPOft-I$/5#!Q>Dj_SeE5.   TJbZMo"""`%#3-409396<:@:>9:25-4/5385+"m"#      ݿּӼջۭ3A'=K<05@71E2!E2%K1%-$" @/$@2,9*!" $ '        !,8,8E/:*>A#2;"19#0:#+3"/:(0:$'!  $!A[u~c^[I8)    +"5XJdW@[ /"4V -",*5+98>8@5:6=2925/;/661-+ 5  ڽ׽׾ 8G1;$'J2,L0"<*"E-)+!  D,!<:00/% !#       !  '.BN#.9%4="59$5=+3+3%-2 $!!!'#cPXwgZdMD( ,$0#F4*3A7^M'9D29'"j$*'2%6-:2;8B896=8=?935,7/2+~*"n"  ##*޷.;A-3@>E9,,,"*(*%.'0 A.)>-!:(  !     !%.29B)*(8E /8*  Y( 2'5-609/@5<2;4505083710,403,11! !+ԯ^ca #)6-3 "* >8-=5'3'        /;",2(-0@L9O`7=D2=G''$%1#0:$  F,"R;1$6;  (-"926/709/;89090=2:/')' % #$      fSZU=J%; _#1%0'A@5,90?1=3B8;9<3819/53640*,#j"%+       ظҫȄ)3 - )+! ' ) :)61%'           ",6)/$0)1 '(9)>N',-0 $.       3?:A=<;93;2613.3,+*u%#$#      ۷ղЪƉ$1$. +)$# /.5' (           ! $#/:+3$( ) )  (1"(     ,DS S`$5/)$3'4-@@=:B=@:A7@>AA@B<9940141+-~((*'       պ׭ˮϯ˫Ǎ,59 )/(1 !(% + "0". %   2(          +0-2 - !( !!/3         17gPaSYA<,".(<2>>8290=5B9BEEEEJ@ACG?A5950*(+*t+%@      "' ݼظӰʷӪȣÖHST '3%3/+#4"-)%0'4*5!          "- !$   '1          ".mde*#EA+#-$83<9405/=5HFHF>5?:>:964-1'3)/)~)$y,*e%+     "% "-6ּҽҹʹ͢atp' % %./- +(6(1$       ) )*              $x C *sE3,/'3-70825-96C>839244;>=:924-'$+(w*#p%'z'. $    ־ҵ˻ˮr )( 1"./"- ,$      .8              ,;1JK[Rsu'!*$.-+'856-518483807174@@AH780-1*j+*l!!u''      ӾҾӼдʸ˳y%.0(.,+')$  !$          059]ier]kjUSPc%(+$'%,-1*5-41763.9/1-3,4-333/3-^)*a$)i"        =Lovely smoke effect here, of which I'm secretly very proud.C     " &**&252BBVC   !!')'22?" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?A?Jq?ɭW6L<2>e>4JJ F==RKI{o CnPyJo/~#)OCϵ41*%xků>.#_0m>pV <`֊;{QQEoN/4SC JdJfyH|M?R?mIF} %>Z?w"1!he?H>Ƙ$RTST43iNו?3T>`CrGnֵ(_p98*:b8H;sksݫL,-rA$l| %u`9_55*7mob Ì 2=l}~ FvqsP2=5v垯u#YFxxSQ `8<Y*c(yM)NT\*\|޽Qv?3His~?)<~q4N1$֩ ޕ5~0朷 F?ҝ%]zv {{L7O i}>ISL\0?vVV@7^?AIX6aHFFRHwg/#*Ћe!)byj-̪pzU^!s+ºȺz9F^N'o1Мbmmv#"쌢4see0pꠕ_Tyc;s{T'TʓGjs[O#VWUWtfF^6܇ja`q3PĊg#Q<LWbm?=P*9 Ҙ5>e=XGISl0`~c"ԛ[Y6~TqR2w_Zg!O@i>ׄ>dnqƞv0P0+hpwosBMzkwJ82=ϯhG_,a#qA֣z[drM{Ϻ+`sQy`ɨHQu1^[ =)x8R~BGQS+n>f`Aڬ]%MVW`ғvKIR:(4Kژ 1J~[4 C@\(h(3@!JOƗ4Px41K@z3FQcFF=i}Pq֏jvayʬ5fru$E^=ˏ2u3޹n.W,;ci;hCuQ<[ܸPo3CJG +'-=RmbЅn%<}@@ bΡeFBo_q^~QrƴMx:; $/nGRIm4Cs ?TR^]՟f.Q*Led8UL{v08$!r9QF}/ N駦qC`U尜dۆ=["%RP83k"Y\+ ӊdKtڵO},cţgאkgM;wd (pTƺ^椟3cKp{ip~ĝv:u{c֬[?-ay6%x[cp?Jz?wWVeA4E#mn c#H 1-9ȧ Ozi̍]j&nϸTE =(Prއ{ߠRhy%~t$eFV*D8?9ФHb?@9UհO2ѣr2zLG q߸NeyPeu54`c9xȩ%dAt]0G<%ץI$޽ʡr:6:>ztё! x *(`:ֹT;Ln?#YSC0e'mV}Hpw(+kKFhd +q}+oIPaǥtT=+m~4$wD8#VhSl=OA%GYSW/+Z|ήxI+zMR2y!l䌯*[Rˉs~CJeaIxmU# VQ~m|Tq#]9*lҴ-" }ޣO^;kj=9W*zqU]Z3gGxăWPSZՐE3;?X+ 09_qQX'1xH6͟΍$۲Ѣ@*<{4rp8$*A|JyBO 9'g̴H ֗N88=coE񜃴ZKr7}Ҥ{B̾=5Uw9%bF=3$2BYH` 3hsnl-<+n SpLc8`,B;>3wAU!}4#Wxc~ӀUz{ӣTx9;mƤ@'@$w}pʶ6W+2[^RgR_2yY7cNm(c 5vFRJ36 9y?VvZ zZ KF(~pd=RTvZ+XVb֪ɚǒ %pnMeK8$zS|9& KE?7?Zvj} c0U˃PZN:[bS$sڛަOh8A1(hw :^Gj6)Z{0$3K1Q8<7T9#4tԻ QtIK::=Dw#j?ȤQ~bnV>CRD28jqBO?"" q'ϵq>zӕy6EpTaY'<0 U ZB͐27Mў9?ΖIꮗaeb#<A(iȭ{{pg2*JTN7hUUVI'¹JN_nd9i  ϡ3~) M]` xʶ x$r)I \~qpKA$}ϱe$޷Z[QE\٤ukwYSp@ꦡH B2xP֪`AV Sޟ_1%h.Ypw=A<*z#?‘.Kq0: ׽Y0UhHp>o_E}%`9=pzⓀqePNqO%pTF{ wkhLMXyf~^]\gijά+3dT:v>֠aWUײ[-7QbAQm#V#Dޢ7 T3a:YHL3)UPcay夐 >w1ycۘJ-ح>@ݎVŤ.F 8A~ֱ5%F@Jוz tWESw!x?H$dv8wRr+ Fd'UJHpG5 #LdfO}-گt-ѷf`9TշAZY{|3 0QmがV;8Gaz9S]ҽ?[ј{֑E=pH\b$&{}/AЯxZp2G~*.6w>MGw0xJQ'C;%Yf+F rZQr }V"eSF`(3,CvscT'@#`x$㞿 [QKե9ni<ܲ (O㺱ZC1VqGuU5Z:OK]c${MoZiexF ~Jc7kˣ:Q5#R y?z`s9_ǽXX]w 9;1z{F 1o4J#ڲ 9:HG{F\6A*@N[17q/ߟz,17%̑ݒN=TҏLsW~]j6:7 @N8x̤Pl'f 봌PDQd#p3V`'w^yiE`;F\۽} H=G֜ʲ18 Jm%}BjV`5%ggnԑHCGI,xAZo6-đNf!]1֓g>S["!> Dp/BqnZE=o 9e{htIoE`;t$*2I qZj >}*-].aqs䜴"#^=:녔n$KrHqJP0ߐ vRy pF156dr6ieM_9DB >F.$`C ɜm:zc\:E˯B]HCFG_jF)T94؅&)wj-SВ%(<qZ!d\F Z{9[lg+,!Qv5A$loE6쵰c<}j~Ρy ު=ʅ t@6y6{qޝ!+.9C./edt{GGBw.=GԱE,3֛ϣdsӜ`cK %]V@[ar)"1x#*9-)U[ <MlԇH2+ۭTط=R .qשP'Hg֑lbھ3F*Ad'V#FA;k;[hw7Aoq)­$lN=0<ޡ2Lg9,X%xzu䖈qjƺπ1ߵO4L\t[+gkME;IjwW6vY>d0#$~ Ԍ{ %D+1s@EMDIMMj_ny%t$ s&:(XV#ڪFCGҒ@rqZs&_-uM=s+&FdO0!o̅0F{g!f]S?JUHTݩ;+2w 8ߊ-KnUSqҲW #-V2|kdqQVj#q%>b>kV+9C~(cAD?hֹ-bRJ6e< Ln&IwB[` ٩Vthe(22k;8$zzՈyy$mO#ڵIɾ!ݒxSb¶?U<j us*'F9sUi#'`=(|8=+.Ys61_fAVb˰~8&0G:K>;sS)ܥO nn(hV;9__E27M'߽q׹2~gGo}`84+)Ƿjٷb B}DfJ-2U-&5}.ce""랼U&J?&"X9 HVObA]:#d[nFR~M8Vh%Q7k`"fUWSF?2SQƫI;J(vGP Sϵ ]j6^EVIPGp OԥU7& ӣޫLk^uZnklK}OWR'c2)\|> %5e`I}1ӵ0j˹WlLd0NO_j{b*iW'(jlRE@:ZV+@UTF<ը5=)ibin=T0XjCl$nHa@y2HqN9eqL s4\kkq⡾*`۽Y0(8=*Ďcy%bMHp)Lʲor!>o9ufZ}8ǵvr;v-[BaqIN iq9594ӱ7zS1'TY{U#}B1QisJGEp~{-9@`כvI/W" $Pds9O֩SЏN=T5kŴY6ґ& D:ptT9LèSty >h]t TWIoY \&#ӌS?!S⸳r?6^jQ3q;cH6!1qՑ,p=k[zTݿ#Kl%G1J9_Ԃv}n{O*2O#P"qWVhrcyna֖nNY&y;ZHcMN:WUUG(YAFpG=qrkfacGVvsnO@PH#BܩҸTy䲸Y7)G<ߵ -Zv~d\3TYrN@9#ڡ"̟7nN4?0AץDˑzsCmh B7~VcpVLgS5`OQiȊz`z֧ImY ܏֮)5{0nI%u/"ۼ`WUk5m_VsX }Lp>^{mf$t]{w9YG] Gr'AdFmZB&&m`:g&ܺޤz{iUx͏JEE9ܹE7\ߨSPwr1NVB!͹nsڟoo`x?u$N_CRqty'ê\*+"Zմt;0Xs+7O53ZZioG A+XYwD2>zWLdaGxi\y-ɐ Me2Y_Tݕe)OD9#T l8;OjV'jpW`k'+-[HJ-}jF #|8oO H ׃YJ]MR{ V3CJc#ÏʦSN*Sn[,I6[~vFH 0rG֙!ϵ>iZ#;Ay`IܹV#&Zjj*DG:~]GcǹllvQ2q֝k,SՏYkFcd6=G94/^U'k't7bg+0bU9dڠNxy7+ZïsMc}Gj4A)Sڸ%R?1WYio* s&Fpi{ٳ.MKWqX:sV ?; XgAzշ[Bc}}>U<:(%;S_n<7R/@`p*}U۳30jc< #@<}(bsl6˵:V2Y$r j6& 3Wl݅BGUzjVjJyZNbڢ6"A$ijgc Uw-!$g}LZ(s늮a\{U6vBM+u+(S 攴EE]\Ęr1MVGjlKڢ\S1\iXzґ5"qYg¤ ToJLuaaRSL=Z[.\`9@$R9s}賽z@XOXlץGGJ;XJ")zjN⌜sQwد4z!l0D=מiVdMI}EBN,?>Fa#nq\Muvl喊2jІE'pFIHQU?/YR>rJb}zmF4\]U%AJO[#gQ>n挂GʝZwʌ =']j͏;a`@dS̛?W+{X^+I&QC/#J%4%$et>+Gb'< t5^D0$l-4閥NI\D}RlϮ;i^&U-ix>b}nFLUiU] 86K7N[Dssfiq.*Pr2ϊc s9=)8i[D:G*z Tf SǸqԉϺq̚jcU/N$?\p7 ]6U{*g6T}m:RfUL9bni$5$ӨE|[qa4 v!*! r9i_b}ǪjDUHو\2>9)a,R3j"@ep0}"67>iyTvW,\-hc[j45lî:rMpDb TgќF=[SVN{ՓvN^gIc4R%6l.VтdU+d I&X6cGʶחcDo.Δn_( T08l]iɠ5ʮf2&1sQM)*B:ՋYD1,DAtC9jON]жyD )\$  J` %Ic*.=μ;G(T" :./g\";*8⠂V,v=}:jnQv5ću2?k2S 2;G7HpJGܯ>1m#1uEBS&mB19+F y㎿_Hl(Z0څ zR/V .Ԣ("Y%3 ;֞+c jlp6GSZ[2JgOn ) &czc4ݨC.vN*zidTKg;V,c ԹbHҮ r_OFɧ$;Wr[~V2JӋM66QXN'4'88I롟*Zk{(XzP&2RLYT Y#MƩ6HlQ99MX MK o)OARqlwK%dVaTXdqҩuc*i $+՚70YUhI9%<?S`Ƹ{MKޥf6pM3y``dҟk$NWaht`91#;9uH>TMr@+dƱ8z7RՖ$۠S~u}yX ^UtZfވѸ]YJ&Ĉhၔ~~_)qj%r7/Vrūi'Y$`VNd~+`8w5ƗC1OHG^4=9wJm8f{D;"PyPE/wɷD?%)I:u=(GJ0SsS r)݉j1ܶr1O祥iY1ל03UW^҆8z\*1H9d͒|brQNBT#|뇖u;5ge\w#H'>բ~V r ?~Rx[`~S}7Z3(>lG=yTc'ڑJ9ĺQK s`Bx5{D5"mۨ,kWM°F3t8z *Pk|_%Emc/#`u?Z=:+,l3?#Qv[zF,?¹&[X샨ݤ+#v/gz[2r?AU$۲5m0Ҫ0oXߙ4FVkĢsOt|eчQ3nO-Hh|\2n*{k8ё& %۔Ps]jKι%k#bePdIjKiaJΞc0c{*ItRV4lgU*)'}cUFz1In/aS^G}MXr.), qZi[Ki#FTBDߛ;ILq1`}I [QIb0Ov9B9EJuK $t?:t=UAtݗbeTQOUH^m^XCwX:8].9%N^ӹkD385&Gi<+Pcs c##yӜ+F }:sLU NvZػ͎pT;yDz  5{]&]90lV8:+G{A|LHqG4UYHR˟Ǒ֜,6@*[냌ZDfo'}c+edsT akZGm㎿1e2߁C\[f9JC'?C>uV94%S*~\yjck3)NWz#B c+;W}9l%|anGDRh8[6X»?A3MBH]dchYӭ6ۀe#N"ءz|Cz:DOz !>V\$^I$)p UzKUk08NKЖz- %{Q(MpԚH!Ҩ'0+M"\~EuH`['k2[g9=*'Sq֥ɽƖ"]ǁs9p xH+N(c?6[gZ[դ޻wV*,@ z~J =ޙ+H#+Zh}km̦5Ӝ㱬[W(P2 tjλkkğ7c4^:'߲mY=#yb*eBF@#X"c Od r'4IKv;Hzfx.IԹKW* l`c4Uf#'4DBmM^Dv;alz,BrJҹf d}+%mQYq+U5SvKQ D.Oj-кBJz`j֭9 ykjzҲ}LkiV[-qFxք#SE2Q+;8$88ZǶBkv] ,f7q2e3[1p9h Â~U6O~XNX0#9Lq*JZDY UGIUxa &l;3Q\pd?CiBl< Oͻ|}=8W>p~E]{>Dz>FWqWK+ٍC&3ҘdS":Wso%np=kNKi2 v8]g U, r?J7wm+F <~B{yn_'vyĘ s2#lU5oAFJJ1¹eǞ8d]Z)*FNqWӑ-fO q.Y3iW]e }JdP8jrX|SZt獼_§JNXɍUXgm84_YiMʪYA+ij-?:ײ\qZ] \ըj>dz~G?I>~nC84[raJ,*szU( KRVp*la^V*GNP4.O=PV &YRȈi.?C6n#9R ֶ'n֪2T1I eI;95k[҆+ #OP7Y,^*̬BhI3,RQ ~XVo)ƛvwLbG^;o EWC{gNKG~ d;yeRFjkS3&$MW9&8n4JBv 1@E-% i1R*@ªHQwM5M8=i9bZ.WY.pz^d~VZz;ƜM'8?Υ(!=;UѾ#+rVII^h"_-AF#=71@E8eq9wNѳZjprFytq~r? ?#M@4G\8J+/x[IL=MWT X g'}e;x2G?N-Q8A+m=aND֊>)$u 1,$~}֭k4nV4CڲT=s[Ƣ;ix KDVAWI^mhU7_^ec9%3cLE.qjղ\w޽TcRqh\K捉 zN*٧V`8RL2F~SUd,sYF1OCNo]v@ZF^XC %Wp:{MAi;VLL?8$񫔒2e}SkwqGr1UYu2B~zrڦoipctq6q\Ist42 #ʭd=Q)Jv[;sG|tVu^nf9zV%4Aˮܿ,92ǷҴ`vmsyQڱBM+;vNҤEPRFHW:^OjxA^ԓABVy_QӢA$RIȩ4وS`gb(N 8VybÜ1 ֱnTY_UFbݕ #nY*j:9  uT3LKYEp<Һhv{olyJl3~탊Ky7ARܡ "(D6bܩ>Xǰ'ZQZ"~d``JoBqZQ! A(4#8}V ҆t_numef vʰTdYJnmy.07}*<0qs*6k[\xU’MkoBl;~h./1 jt*~)/B`:eU|+MSkӷm58 Sc$cZ2:G}-@,IoAU=5]kr<<~U}wPP Y@ޛM_hy$;*XVvA]*MH.]?*[DL qY)YEy% &dշ8; qvF9f̌4\ VIq1Q8@W-/Uhc*rW]ǵX"2g V ztR?>T(v0:%{S*t#rPxTwac#*J^s6, V^#`G]p5fehm߄dd 2C܏jtebavs[gtk0}#SPH׆92]y^V[x<1'c@\ԫ)n_䑁|֫OKjKHFsߥPe2;wbs JX`{W(F"Ⱦ9 3K5#j?C5NQK/ܒvg`wX,g Gm4R}~9Km+j Z˟/-*K%T[$coZ98T킼Jvhn_s{W֑,ON(8BX~-/-Iͤ$0)a3Joq nx@aSB?šN--JM5~"ΪuXQ*rԢ7l>n=~/ *p:r)m=xkT%rZkMu;3ӬzH$4%Vm9K+8*i&l;123$۝`ЎQ8zhL)8yA 2q T1mYb4VCفZVEEaV&:^WW:$o^%xȜkΞWl"x5^.^yF?~cּ/ɺmދ2zt%Z5˰,D$C}۟5cz$*269bMKYeaH+ӴhB\E$7 ?zH2zجdg >|9Ƒ2JT5-s3@ <\fwVL/D$s]喡$`l3'+5s\K7_5KV w6H#cK(Yq'N8g T {R\mE p&CӎBX u<ڵLWgަ6d `UY;߹m`w]kgڗh202EcJrcVDk-E3UF0YJ"S'r1wvrێ*}JQNoa78SҖ99랴o=z %ƕ$k]'b(->du=+QvPҽ,&2\ʍWeJx:]cvIST"يv qc5<{jK SO~>;}kBeo97E;Fyb`~h(`ұ/ H uv]Oۑl0k0ZmN*Jgt%V*.zV&96 zc~_h< +/1NQ'M,II=)kKQ2A4>?֌q4i{!xdzq;SœiO(MZ$#]EUqLz_Bֱj;c 莘oaK }+{[9@Xid6&h^_IvĜPs:QnSehΞÃpNq֞#h˸D`@"8Fѡu8q4i/+ WiXM5ԄGh?HsL1[cty:9[ 3 n/'O&E.6Fc }w*sҗ>Ӎt'|ͩJXlraO!d@pIlqZ4͵U&pM-:ҿ=K8b ,^= aR}Qȶc1ƲF̅a99bcqU1#@=:iM-$gj@-# QLW0Zy'?Z~F{+k wCi|"O3')U1H'OZtĆ$ٻ5M0Vi#q7ޜܯP!ѹ4nj{KZgmfwsI QhesTB;oZ /;>sqQy22<ӄZz)nkZygH zWB!P6\ĎqrڄA%Y#R? d{Z[Ek iޠ:BC7i黱*r [#=O"ih@;cو 1#?g);Mk>cA+aG}귔@<'kinS+"u$T Fce20kLؼH% p"QEغ )*Q} `,a68Ҽ?y eczpGB17g$T쵱gE4"K 2M\k{uMLt~ʗHA( 涌9gM'̕cJ%K u'85(y=XT DE-{tC+G2YI UBۧ"wsh(p@[I ǭ,lFsjv^n8ֻ} xg++8]zW%#zH%5a" AcgRѳ{QKkڍߴ\+.őI P cZX,d㓒޳%[v}]9k8ho%vuO7{ʼn'yg2$ `ջK&wA&8z-fLz953Jft}ZMZ[{_]uuڙ<7Gq ĩqYG4☦x̧>\gi2ܜ{WK_“ugw_ݎ*=rURъnzhW7$2#ᕘVDRMz,-u #]=;oZěw}p]qU*Өӏ+qUN#$5s'i铜UU+>^&0 =SK ۈ=Ε)E}-GL*E3]16kJ"3-knSm[T39R֔ w6kkzTF;*=4{mKyviǥ0~p(w_JLIEz07!@>Ҭ1#*I KZ'0}?d҉.Rww[h#)^>Jm >Tf8©o Z|69y`h6iop;nB.H|ϵfJD4sYʚΊuڎD-&W-;{MlXP$qҪ+X>IdfSө/i%f HPyr0$' }(&iiTnÞO4VUή# o4沟KJWRg)#EpR˜~8 <\ցIjY-帮9,]wRArAD#=8ִboDaeTOTYIJ5Wl|ҹ}-mbEPItZ-n`eԌG$ZTYa8'T$Wܫ'&㷙oOD1@s@qւC{!i63q,&ta%eӊK-JVaV'G;T`,}֔ {DFHڞu测"WwݘI+E.WGmte@qYj.>rq lI'EEdlC(0:T9gp@NO+50=j^I![p)Y%!I玟4%H| |>T$gJ: fU)쑳i;[dL:bȼoC i"i=*'/.m V[rsNP!PN 'W{ $d-F݆#뚙 j2߅m c+4i3ax#UUnm<8ڡ ~\&f!AYX*ߩ+gF>zۚ>z\SbOchYǏqdN B,/+7SU*^orpzz!h9إ<^r׬!s3ԞcjnXjU%meb;Tuc^EYr֩jYy[egwO.nw.P:?Z  *L^3=rjkwʶztX-}OV~ }3t 6fuAW:gERjz}^#i#`לģm r?Zӛ↩TTO{KlP*y*Q7ح]'RQv*ev\( qx̾\cvˏz|7_uzV2z d&2ǧLdnK6U> ^tKNIJ1?Za$9ڲ9._+0=z氞FF,͖~J/<;_*GSޙU;0{r4)lM a<25)o~,rrHs]L00W4\ e2u21Q7['Ri$<*Dn/:XP?kԁīpUqkF["ZHqM*SivHJ)0ǭo1H(? Qޮ-XFֶsn &~A`|r?QDW7ĕ 鹩5ʑ@8vYFr֟5 2F2? Y2&(Gd'mۡt$'>/ڷ H=9TRM Q8 +lZR%[%&T,BPsj#:? c!>eCY4VwcsV<|zU^qT`QN0c0jo&OF<*hK׎)@43Zm;ƆRC"@*_dTy$aIM|3p0>l|=.yJGAH2O~Uh'Te^~QTcalE 0NUIkRRG?Uk$Jp&+sK2ߝ;tn+[QS2q)2+IHUTm+*Ź%lIF EegZBZ%r9?Z\ z?1AV-"?#ipc/ $+5 (IpzE/l"5$Jƙ'<TP 9bcWXg-<`cg쎪mFz4޷DH9ոdnNZ+ңrQsufF|B}x#"T{c>J~RJ⢖qq}3ZI>[sw)!$֮ &$ݡP -޻gfoStl;qO"ܠsPxcliWKnBD7 MmyF1)YYjt^ƛo1ul}:W;,cY2lD81+5EF?U&R]|UX?m'%y DtWBgV$ c^SVV2ЀG'=K2I4 ]y+kVާr*\t&aN嵺I]ʲ4_<KƦye2i|}O<{tIX }OEcj㸑Ye~GmZ%Bz-֌R[̜CÞvW7OgߌfyO4-*x Uv 3jibvsJN*)EmO9I5fR/I(7;w5>ϞMunde.pI+sTKF=dxV;dVFl;ۦbN:kzOir(=mvsub`VkJ?gC1;c=RU*tj$|!p2OҥZ*3uv8'edx5c%Xqc@P,JI=+oXc(*zzc2(gM^ ϡUQn B#۱s$a +`*q(Rn fU>%dA$}Og%I67dsQɹV$TFIZІڗ2im$Uz 7sy%#{ j!#vO\t#Q LʧzmuC]4tc%hw:b(P1!2L?AZ<>}$z|[q,?δcvqݽR+_JѰ1G2>>Q@>VFSj СVp#/7h # =i̠GT/<#֢rzΈ{3rl*B}kQfXг`5hpc;PEkkU7enF˽ ˝<֥C̑'Z;NT`ʯ"lc ׵ggitߛc'},vqpay9ϠQoi# ]4^8qsJ}_gj.q$jsk͵Fo]i * qz 7*}kxIɳPpvo5a1'$5fHֹ]s> DzmbkΫY/Q;`wUnf4%v?z5v2aWANyͳ+̞Yd~$]K4u+ckq3XGy946rR,)QcuyMJJ,2ʗ+oEt7V1tgHu;9%YRqWWSA*DX$vVu嘢8?)+-IE`*PWjJ;M_~yUg\9`w 6Gy?noxytSsmsvNk[hq7( ;w fiz8|?$]' ~# Dn 0?*탲G r<űWsvnR13/sǥo­ rc>^gn'_RZJ6Dd\UrH=VHJSӦ1CI^ə2h801Pʩ%*9_z.Ztڤ1;DH(֙iW9ivOeoĪqhY[v|Qn3AM/U!v2x뺦Hx@%rp1ֹ;rߏRGTx#,瓀'ںSQ9w֚冡8VJ)eE=KYI'GGC9iwJMiv2FEj:nN"f*H[scI,6]Ҡb`@G)p(HR6j`ky#۵ZX#Lv2浭a"NFzMԅzR^k cnA1kn[Js@Zv6k<.WۀF1 Gk!{De)DtgE3JO$P>nSeAIqO;9;-.qE^V;CըdJ@$(PY{ FkEC'w6Q#bF'Y?Gk}И0Aɮ#\F1oUS8W>mHXg+fB$#"ě»")8qmIʢH1JZF=5eFV'dʺ#2QF=p͆P 9k~T!kYkǁqڷTwc(rJtkĆ6h]*H`>^GQKcqwY"L|dvj#2 !fq ~i P^XtҜdh:UUݞZ_q\;035&V&{Wuy{jFf#9f# yYO=]k$r4'?De(#'늊6)f\pzU#T,X;vcm5}̂9)]RJsj[Ρhi+=+HNsϭD81#?Ҫv2O}HFzʜ)Jz)Цge?'Oœ=!>+T-3Ik,vJ8L1snn,In+۽>(ceG .qqרVn;xIXJSeMxar3#' czDQU"cLSzW;tnܶ2њڜce%Ԋҕ[~w3,Y$n[8ldr>+j-Lch޸\M oJݭܩ0XZxDErJ~w9$eAx a$usJ TV+jdU]@%A' `rO_VaXPN7N9)ŭ(eQY0̏„0ϿJ`hPQRj)lu,ɫ\jv[&뼍yI7>YJ1Q-$HH~u+ۨKGH#H>5)n|rN>Gj3puNY𘊔֫ԥʀ-e!g~@ִNm kef- 92EhWZag{Fڵ~oL\V󊤪L+ʛMHxѧ*5Gp29E'> L!uaAQ!UR(aXT}u'y9i/,pN,w*:ՆCy1oe^ݱU㐄$(yOD싁Z?ÐH++UEDdxlLj]9ߙB~&9e&O]R]۝&5ɚhh($|0vؐ>o)=iڃn@Zrs ؈I%ẔEi #U&c18+w6£z5"} 5RIinK{8ACO{ X 7Fk%{TP;T:Tۿ*oT`ϕkoA=QVӮzpIȫ ~~O5ł1vO"Mj]zַ<5 RI`e)4'vsĜ*Gd8gOLU-"cIu7=zf/Qz i:f);}NM]w2Ĥzk;tխt?麍&)d#PLب$vMfoFtl"+ HXXǹ'&{|roXCIc2X{j fLi ЍF$J6vl\-Gxϊ5?`xDGxGm3rSڽ:/U8ѕ?\ӱKl,*! rdž탚ڝiÕ" sM5k3Y#Y.A"9$kدBz{zV>D{`2vҸR6m݆U#5t6M-CYda6q1gD`0@xS!90N2 9uZ8qr+h{鱧([h9չ,_-Km01f;E?s}?J#ߞ9,Wߧc@ce :RrY }N*:;0f%#Ҧ[ Ar O$6 $%{w)c\ F~5"#,#PXn^?:"F (#ڕ.,}Gsjfٌ0<|կ"F!ݪS ?"k:liO2*&dnIp{FP3UQ"r9I9=[.=h ՂGLfSIIrK-,FbH9i +ҮA4g:9?'6WՊjo'hrF Zpd2I+F$rAZ vH' y'wdr~jܽ7$(l7 ӗ~Uu.yZ9qR=88##dCsS0.sZ>f݂wZ~GFX%D[wEe+H]G <+R8M.Ы9s%Z\=kn.K2>.2ۜ ycPqoƽ7'D%* 8`1^_dE2F9C̊;E$*2s4{y<+tډݔ?yŌ+|K%qR6u]hEn. 'sqߧ+enQzж_1) BN}j^Z\4vV UXo,Ny=K4][a$ׯuͨ_^1.଼ gkRP]J t #g<1#Y-e\pyI>T )I/ f[%͸{v>keӎk"cU+dM9J4=$To_E2>oan/,N`t#Jߺ_@Zͽt=85i+MB!N67(OoƒF\yR$y &wyo^>U!~*'-W^=L3G8;&B!,$ST{mJ! :׭k4qcUAT\li Y;[b udԏ9N8r;V1rk,yG^*[\j)EW6ҐvF}zM(֣eKtd2yrUFF}j0{p}AL cZ E 3uzyRvJۙѩV'c,A֫O1QO$19U=O?)gq^uf,ۦe#(>á t՛Xy Pݍ0xYsEng}*xwGAғ` Rr۸:XGw?&xTG"[]p9+Z9;'sJWjJW-wBpW|G%/,ZϘ؁JctgYU0@6#Vsƾrw;f9MKQN=z!h\G/ ӊYYG*/Tc=R}=d2`G9]k&v&^)p@ ZE.Tt)yx|֭|.deL4ǧZn$ĠHv0qO{Og4e|,!/x6O?ֻ(JSױ͊*j1vٞwd . < <3jL"}9h P*z?MlTƣ }_Y@ی9J%!$pِ ~+V6dIaT 7#+o6l k5lү En|n>\lƪ<Zr8ޗD={ (OQӵK$\Aos)_}6صz103RFJX隭I~L^ŅC'HyMZlN✒*b0F)W/jikzw6 1G*9w(}(7nX(G}rF,mv8 Y727w56H?:2OSU滵.u_qr;+¬Nחfݷg=U}}@x6\B!GC2aktRVi1 Oi;6jS$~Y&/V/ZօE`E>'`pQMSwTfW## Wqzu4\s+$b0͖B! #mGVVaVˉb\c3UӪ%Otcc,܇?\TyM s?J˅~9H(؈RwpH=3gN58$pA}"4X{&[Ya@{s:mQx!M8{?QU4ov͌elK5v2ĄU=>m"2I'ڭh='#rɮv틟dY,9.G?֣ oR!ٔz)(V?NMX9I ^sBna(72N;WZ0@`Zn Rs:$nW>5xŮ;3IT'$gSh%@2mn] f?93~f1B(=k6Qq"Q&b8?gDLRA#RrwN&|t4ϒd_Ҟuvg&4KE@!bҫ'FZ/.)?&2?ay28#5SиM)IgB\ة%R_4.UYH'v9?ʨy8mCiC=nc;69;UI\$ jUʠPGXDܪU۟jF+Y| l ]S~( pqMgM@qCV*/Woq=)Y8PxQիXQ?y0z#k𶡩 822#:TJPHBu8ef^ܻ僱@嚘@R:zMzT^ Ve,6h$dKvgn8 i6Tcrbz碋et$ =?Zךb(< ϸwq^Mg0`$1QSqVmryˡ}LGəԢ+S]Ce@æmTW| =ZNcWRjٙ<*yv6XO۵`er)$ʦ4) zi%IXʧ~B#F'2e:sԌNY6[҇m@_MXi3b?tnwQʹ'U"W|Ìzj zRk8Oa0DPݏpIGܝ7Ɏ?'pc#Ң"ȪgHGzTBK*TfҳZ ڥ@瞿FSCEvH\aqmrq֐19¬rF{kӡ>*nT48yՊZ6#񧘳 񎧥837dik4J{CN@dj%;WWxT=GTvY}և-qe*bqk:/ڢ;H=#Rxu"::[|uwm' DZ׮ƚ4z`' mzu$s? ;oV$^XeĊΡ`Ua[3iFž]vǗ{LmK#G2Pot|zA09uV0ppWhLcaw8Ykɴh@^2[w*6:⣓ '$) 2F{34\$Aw=sfDOFǮj 34m%+x$^+8f`OҲi"0x-!ǵHe.IUBXL Wاk_̓\03SݤG Y# O͕9i `zskiC +v|'ZXL1wB~US55$xTn3:zټaN$qqGKr pe=}*Vn2q;I8Pe*NkVϊV gcUnMh޵쓈Sp@*C!CnRkb\)GT{nJ֏f) ޯ;2quhłjXkjeȒhRVBp[OX{`l os]@5pukW,^3K 2>$P3U3Ö..R |OuZQ\[\i-HR 2U(\GdG\?4ӧ良2vTZQ#c~ddg*'jrR]9S٣ϼZu_|+l6xŒ7#0?Pk8m،/b>;*VP?OY%]jFҐqH2[84Lg9e/}(pOsT*#'3}:Tm)#Y}_iFޔ-=A-e\m8%Xdz( 犟#VZt>﹈r;Y%\)㞵Ȉ$ϭdDF G=jr^VHakt#gq Zj7qn-zg¼ (tב@#ίn4zl1/@$ҜBm?5u1$M3w$+Jc=K p6==E@3[q銹4rANel~U#yHw À>ӭKDe#p hԒQV#.9lqRVICRN`"#8;UegFgp@V~zSij On&v.IInjs6pjU-i7o VFpem /I#{sXLvGNr#FP :-N]GҞ]39y/̄Ќc'法ӹC7Ǔ:(9♱j:dt\ӵbԿ ׽$m?*OjpO9cU(x? =B5bXջ j Y jʢݴ$ᕤ ).y/rgL^KuTF=ܓ.u+|ֺ"I.V7;?y7+Ʋ)ry=*Pԋ3[!Ap8;]v;XF%\TPGOLPNG\_,tk$\K`?tv0nm-xc`DZmFNd9i+UwKy `{fowE9TI.{ZV2"A+(ķ24 q$Ԛþl(a#cc*ٌH[ˏ?ּ%'8>Uf^jtr_4f +lFeS\tF.mnԤ}c_Uqi$ݗCҲbHXYÓz] xzK[\ML%WjӒtZInj7Lcތ d8鞢X]w<]}[GhArg^8k/W57+?-:i)Zzʂ_vƝie,Ȓ@<)4J |c{VׅOVi}QT#b\QI8a~ETj0s\XK[iYFl!b@vL־ƚXl!p-*ܞܒ*7z[X/Yl{sڶ"pI`+6l`^vGNۯ?v xvv=>YEI%/=nv*w:Hΰ縴@px^TOpw\K,՝T_egԆQk%Vmv:~gs p̛\sʐ7QL)'ւX @ﴐCM]p H=>bߞkjrk^52ij/$_h^B80ø+t\]i엤}L\Zǻk$rugSz4qUhz3ȯFJ6/M57},y-vpHǡ5˖$`C</s=?:C^=ע*t NWcg('❑%!:Rr ; I먾`P)q#QAF:ѶY?N>$ǭ@YFp h-')! \Yw/*WRdJntf ʓo: A:tqc?ZTz7,#մ{BU'hNNyj|opTHxJq)V݌w[DRV>d.QC>Q'kwJv׸BƪAэdYrqH##2r7`9"c5n +2[?ƺ0](8:goM&Efdv@FךyYB<^WV}VjUQucB)UA1@զdϥs9RsRWuwDziʜ+5 JJ1S]W} m~ŋ(aA^Eb#*zqURʍu{9=ya-n̑ב)wtDZzO9iR Qۋ?[K rS zQl,TIKʯ,`~ &G}9F'XǠ cxOaW{kNBp15;\rxl 0MP~V9ֹ1^J[Ez-J*T* :'mzĥq 7!I[,œp{+I#&01\d1Z212( NBJOh͢_qftN6Imw+sӭ(*3^yN`P|I'j[[jwoʣ*DKh-B;xQRjj_ycߟ?kR Q_ߝuƚR֦oyk1ZG1Ǟ^Pey31b{]_. +Eʳm22u%zq\]zkN4O6tőR2AdiXˇv,v`:+F$q{P( 8am,s󯟜4sa)R;VWFP#֤8jm9zTIڱq[ӌuoD9 x*] GoJoQA1QsYss$ԉę'1¸ʢ0X>՚"hwŸovb\{&pTZ" ҷ.WsЧ*rJt4g_FwvcG !F+ͯnqW\W'[_4 O]zf|gʒJYnNr8" qI9>g^z> 3j'۹/~i}DT2}r g*)JA+4ֺnBoAKYgĚn@'{E}$9<};L%VphB~JU3dV.W'zvB}(S'sd.A=,'yU f$V 3"Čp# ch ]xմЪeeD` (x梄3H8sn+wOC.?8heg9 .>aRWn:?Y ҅%Y Kƒt<`r1z|e$Fވ2ďX{Thǘ07q֬<_D'9Zy #+Ejrw= !0A07&v]|\i-IV vm Q@tE]@oc9Ue9 &쒣w|z:MqV;1⛧13sr9ܓ+5$o/ɦëO=8Z$싖wv%6 哐zGd=rWG2w䧿e?)ot +68r߽ґX3RVb K{;R*Ir EO*$oQ=|$I2H :kuqm{)I:c$)Q_j1MEis*Ǿ$X,r8<ט R ëT#&{"|'#dUBq/$؁Y.NIOK[.FVI/潭ݣuM?k)HIHQpz $J9r ǧko^m>${_Ep-+ՆhÐ (I5dn5Ք9;ۙ6E0*2&njրW򮋳j+e#ZNOnϧJr7cȇ'LSI$`dҤx% JV^d'IF.MjR.,mTE0iFT",-GRL74f;KF\ rmBﱼ˶q-.Vw-~9ҖImu(YK!]\F|֍ ee*12+Nr~(~d@0RWij(tՠY;{wJVziķ뫋Nrjn eVR@*6V3cMձr=x)<~\zc9* Gq[;]I!IG$~(#֧8RXTTyBtX92<4Jtӧ^]R? &]ꤎOR9t*ʈp0㷯WI,q֙wҲ\*3Am/" *Y9ʼ5&C YҦ 8zGYYЯւBNi0O4ZCA3̊v;⃃l1=RH,V@HRO\Y Ġu$UU*S㳅?tFKSRޗ5+q'?\w\mG$s1ӽUgZ\͑'.,G-$t{i!h49Sv?!SQ^#dkcQV#wbr{j6]YwSCnWN~_kV-1xrÎG\$`wlîʊ+}4"mA)ូ1FiyzbGgB9f=AYM%jةOZ1PAZ1v*bdeϠҤ ssUrr2;bRAɢN:y tjiuTz4+ԎLJZAޢB t &ך/=M<@ؿ@nw SIq8Ϧhɒ:kU03\;fF9/ qdCbOMf$k~}5gWڗ2*bc?Mw`;GP %@6Pu.mH/XYdT q;Uk޲ObAQg4N8UO5ä8[nE=ۡ$tjH1a1(2M۩\“Ui֫xh *ܑG4m[eM x"es}Z7,",dhEϚpI\hU脯euX)FGZ}(ݐY['^8l?5CHZR'#A{Ue9_U9^ qJQv\GJd'#5++ |GR'FMyw0Yhv1G;+ZI4 $Rb~R7n'4.VM0#Mw rO$T{b=]YW{-4J۝6&-ƨĴ1?N+M3eQP⺡+ z\:^mcV<ȯ9-9Iڻeo*7V?ϝtֻ%>{4R'oup`Tr:t5+fQMv̻-ӃSB]mؒܕEhWvp3ԌN1\[J˹rm.H=zQ)#<68I+[SAJz'hUQ)pz:U HH*{ ʔ 㯮~_u(}*{LPXqךGJdD3\G}kfv hHPzT9=31_GH"-_=C8f3@~ J1kHe('z  ϭJbs!ʁDlJKnWߩ (M>9Hb90Cv :19)p?Ȧ֖+3`~S$('RFZ0H;x#Wt@rսFҺџ!A=ۦkBeVAzٺfSGk0 k=,<[g$,`p3n{#S!õܖ編ZJi^M+)}ԻZ[ڕI9Qc()@+c;]H.C9H>Z$`N&A^jE< sGKmUGAtgSz[93O$w&M@c8SXy:p=i@$$O R!#?tlݒsWV# og\cV.WZܶ| [qz s;QۭUBi!#=3)i]'3/'֦$qҹVG]ki8wl7*T:VuRȧayPls 3yjYXXczXCc88p_pls*ʶ1]ݙ$?_U0=F dHY_vRA\CIm \ǐ_U*HUυ㵊R|y@W.!ӣ|)3;l?3|Mu?5(-thSumˀDI!prI⾂Mc(ѮW_CRi'gi{y~qu=}~^K+Bc3p#,>屣_n67`C~UF|=w)sqR6,ʠ$8}Y*D77_ּK M ^g*b%N3_lG8ϴGAXKrw'[yLz=gvܖ~! VU8F NIZeMÕA5"|' qO5H* \w/&VQI>؆ =[AXt NϨY\ֳX {ɫV!$m$Y6n:W|.g̐"ֱn3RV"nxywpq2pI,'r6 pzּS(M-$bh=Q < vO<.}tTErQ/`@lfI2}sRZʓ {v^ TSQ(}-jTR=݉bޮ&8B88й8#5 {S Ƞ}E<ʭ8)$h6m=sUJ>\bIlFwZ8(B僎135YH$88Tm$sN '8&փi'q6w^NIF94nBTb@$U2cԕeP[?/Lz{[? d(]9霊 .xN+X]6m;5R4zܐWn9>7+?1 ĞN¤c:[/3̺xƞܶ8mM<=vd x_Ν|HA׊R&|N" &?/m[wRW9@CC}Z3(OC=בb5 "ǰD*܌bZ~âR}D--qGU8~{iJxeT܆-V S{T=I< 0* ^Hpg P#};Ls]nedH R.@>UCL~6 :;7d&*3Sv] PVLtxⷹ\nh<,k<5YɯF)17΍׆~m5(m=Xo46 "$%9ϵz>VJy%QkH#\Ȼ\Ho9kNsGQR8O8z!TOƬBstJ}> |:%a\6aQT_. fvR)'A't/ևkgۅE;ۖ 9j{_wdXFXG3¶LʭzҤ T+'~uvޭ␁Wbe^ kfd/aӑִղv,~R-3w8I}ibݓ^0Hdzc iu^D 0:UAs;oWul3)Cc=Zn\J89QU*rd jJyJIyPxL]¶:Z`(֔R?{Qko! (A; *?{~u\0x L/6:zЯpnQt=Z,l Ρ^haL`5S/G},$1,qc sV.Z6\xfr#kHj7|1/ʖz04d  y xkߡӛx7a뤍F@NHXd'׭-]jS<duEcH /zh㮜Lt0Xp%v~کHXcЎS%[ʣdu #n}9 sҋm"_vy@iiYlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail.jpg0000644000000000000000000007577510716136374032243 0ustar rootroot(ExifII*  (>?.i^0000150FUJIFILMHH7 ' 'J,X<+Kr0100<  1996:11:10 20:59:21P<<%(HH+KrDS-7yyzywxxwvvtvwwvvvxxxwovpkygewb`v]]w[VwVUwROwNNwMOvHKvJFwFFyEDvGEzDDwADvABwABwAAtA@v>?vyyxy{xxvvvvvvvvvwxyvvqwnmvhgvddy_]x\ZvWWwTRwQNvMPwJJwKHvHFwGEvGEwECxDCyCDwBDx?@vD>vAAv¼{yyxyxwxvvvvvwuvv|ywyswqmwijwefwa^w][vXXvQUyPOwPPwLLwKKwIHvJFvIGvFCvDCwCByCCvCBvBBvACwzyyyxvwxvxwvwwvvv{zwyuvtqvjhxcgwcaw_ZvZZwVVvSRxRRwMUwJIyIKvJFwHFvHCwHDyEEvEFvACyDAwACwyyxyywvxvvvtvtwuv~~xytwqvkkwjlxbawb]w\[wUSwSRvRQyMPxMKvJIyJHvIHvGFvEFvDGxDCwBEvCDvCBvywyxyvyyxvvvvwvvvy~vwutxplxiivccxe^v\\wUVwTTwRSvPRyLMvJPvKIyHIvJFvGDvFFvEFxDFyEByBBvywyyzyxwyvuwvvvvu}syvxswqlvmkwecvh_v][vUXxXVtUTvOQxMOwLMwPJvJIwHFwIFyGIwEDwCFwDCvECvyyxyxvwwwvvvvvwuvvzwzturnvoltfevd_w`]vZYwVYvTRvRPyOOvMNvOLtIKvIGvJIwFIvDFyEGyFDxEDtyyyyyxvwwwvvvvtvuv{v{wvtqxplvjfvfbw`_w\ZvXYuVUxSRvOQvOOyQLwKNwJIwKGvIJvGHwHHxFIxHEwzyywyywywuvwtywwvv{v{xwsrvqpukitidxcaw]ZvY\vWTvUTyQSvPOvQMvMPvLKyMJwMKuGIvKGwIHtDGvyyyxyvvywv{L|ypikwtuxv xyy*vvva|fdv`_va\w\ZvYVwUXvTUvTTvMQwQRvVQvRMvQOtNNwyxzwywvv6w#vEsGCmU8ntBgpvuxtv|'t8(n4%o vjyebvY_wc\w^[yXWvVZwVWvUTwUUwSRw]RySPwRQxPRxxywxyvvyy*9n$ElZOiU_i>ecswyvwNvU-uQdk{ybk1hv 3}actbavb_va]vZZwYauVWwWYyTUxQUxVSvNQvTRvKPvwyxyvwyvw!@nWrjdefiaqivwyw{vcSuVceybBasvlewbewd_w_[x][wY]yYTvXUvSWwUVyXRvQSvWSvSSwxyyyywyyw3w?CmM`maLhS~h`mvwuvx2y`Fm@nlel;n:evdevg^wc\v_\v]dwYSyZYyYYvTVwYSyWWvVRwWSvyxyy|yyxy+wMlH^hxvb5h{>zhyihvefvnbwbav`^wc`x_`wZ\v[[v\gw[Zv]Xvwzyw}yz[|y|]|.|?gv|vvvuuFtR9sclgePd rys[{jivgcvrewdbyacte_w`ayV_v^^v__v[_w^Swwyywy=wI2v_mwDGvHFvIHuFvv}}~||}  |~|||yY^o[mfMkGRoVXoUoَlrpro;quuyut|vgAvGRxADwC?w@=vC@wK=vVfyIEvFIvGIuMlwjhvz| }|~}{|}zY|4zZplcZbO6j89rQo@ooouionrBzvu{vuvvkOvJPvCGyC@x@AuA@wC8vNgwFGvIIvHJxLLvNKv{ | {~|~ } {~{ofwow[bX:i2=vUwbVvc^lhV}iioTzvsvvvvu]vHOyCHvBAv@x@?wDAwB=yBawIHuKJvKJtKNvMPt-w}}~~} z|Bw>rC;w^yYyycxaejkqiqgtOp|~vzvxvwgFvKIv@Fv??v@@vF>w=@wD]wIHvJIuJLvLOvNOvKw}|~~}~~~z@{H?srzvxyy[SoX_keaiHlr}x}wjQwHGvGGy4Gx@>u?@y\:v=@wB/wMIvKMvMOwMOuQRvSw}||~~}~~}|(|Ft/vzwyyySvGHoPYlS}vw|`vKHw?FvDGv@Dw<@u>?vAarHvs~wvtROxFHvEGyDFt@Bx>Bw>AvA:w;=w:wA;v;=v:8wLMvKPvOPvOSuQBvew}|} }}} z {}}}8k|lxyywyyyyThvUkvLwLIvEEvDFvC@wAAuv=?t;;w<:w9=vA=v<>x99v86v8:w49vRSvTRvUUvUWtWYvjv| } |}||||Gzvtvxyvz|{ȽywoQwJVv[FvFEwC?wBBv=>xA;x>w?>v<;vB=t<wA?u8;v>9v97v/7v68v37w44vWUvXWvZ]tZYu[]vey}~}}|}} {vstuy|Ŀzz|{}}}4HwI>wDAvC?v?>t<:v=8v<7v34v46t65v43vWYtXXvW[vX]v[avv|~|}}{~||wutvy|˾y}~||}}FvFCxCAwB[\֋Vsr+oq'&OPOZs&eK6$#,^6dc\#yH=k"TYw\ŘtMv h]^1+Eb8$SZf*: 7*7͢FV3?Z*:RCp:uP#| &NG֢.)#ޕ .g=(eWih0 1Qb{q$t&C}*S󟵮y䊏{W2{$b7$?eO֦ԯqZB>gJ$V7B;b*.VYAM^[:ld{wNYR]@OZc=nAg֠e>Oֲ)2`IE]`:տ2l#U~Ii6UD))Z⽈\m=imCo@ yNI[v=u&AjVB+sG?܀2sClbY#94I3$cs uY-a9۴)MX[av ϭfY( 3b3tOh6 *2#.! 3M]"NjH*m,L ?| mWB| 5gvLZ'24Zˏg9&j\f!Y>RO2Afb2* -'c}sYv]ْĴֳC1413X k,8<&f%pyac˩*2$^~- Y{A-xT'lĖ/dc9cϝC{Rԉ+$ߛ<9<֩]9ȓc=1Yrs럭Wcgif8U 7AUgrϔd΢ pOsS&2`7?/UVЬ<:]`$=)]lbOĽ*4j=M}7ox=;Wuw;'=$K=—W]3T$ \܆&S3< k!mQDfݩ7dՕ*)l{{XěKd'fb{ں6 So=)gt3VKFp7sT둑 U]Wa ߼e{qs3#tjKHk&lThjIJ)1ޘXH5m$Cb;)fzej(x0|y/sM^j8szܝwzwLrڇVs9zgd}jOR.NKo$XW|`kÞ{JKi.&1%I$OwB)<}IN⫕?199fͱbS[; kT teXZSž:% VGX՗lz{:.#ieeGڣBS<;/ls_U̿bOְi3ؠ!ZIqߚȐ#޴C: !l=-𗱝sCm"327s ѴM>Q8. SQT5li~8&?g۷ ˏ{O|GXy06ûr\]1%^.Z'Fݬ[萔`rw~s^[$x~G۩X .8ϭS[>rGT*v<0O}̟Wa1d?_g)UG\Hϭ [)\jo#2瞦ԙ4-J2r} 7`򈡇?tS`y)4l޵l$iW$j) "׼G+tܾcڜkx$[S[h-}b}(XZ#.FluL @tysrݳZ9X~>8kZƧ&j#CkFv۫|̧z$yGII;k8/\3 prj̴ޞWLN9ǭFzY;:9?= <¤`ޘuiF-퓚|A[.$|nT&28}ʮ~&>ܞGGY]ݲ?ʹO^jGu[% r~aO{Ⱥ1ףF?@xHm- t?ke<'*IIUhN2=k TIJ ' L~3vyş :nY~bcc?\qZ:_xrIs-ћ8 uy^۸luV76Nk1ҪYo%(O<-xDn=M|Q|3Q5/OaF*Q{y8Iʅxi}c  > GkG 8aIm8Zx/⦛q;|\uM'=O}_Xq+}>[0ڑeAq5TܟM ̗r3֘#H CgPĿ4Bv֪ab6M֪;0qSȧlt:Jbd략[` >P`}ڎ6S['Ȍ٪AnZk[cCtGU_Ztc~ѸV{pJTI5NӎXMc{ l/sW_c|YۺZ|Ai.>(ۏ%} κk߹:}s`-׮iW'M}B?s_zQG[kz/s \Pc'k0ԫJi+{D( N{s}:ZMV4[ǵ :rH~ت]ϸМCZšk)PDVK#DszRhTn>ѢjWSĪ5`j:?>ͨ:?A]5d'ҷeznf]&Ų>\r52do^Xw.9SO6PD9<&vb5ݕcEQ> ~AqKVNvV6ny$j15#;c=Aǘtp͎G^/o?ZMu@FWmͣV,jS?!$6~FǠ!p)A,y3#j.j2w[ O5D3b5?fWއ 9GLUĿ!=Y)"]śjRk?#Gck< ]F HaU<=o>mRM?R6[!Դ4멿s7aZO]g R1 |4uX/!17Et޾~ZhCfEb|WCO^s*TeΕǩMǙ| ?r[$c7+zW([H29ZʓY[(]b;8{s\lаO9*;36ZiBA,zBx¶ΐnX-J'՟S_%?AZmzT)aȐ rI_Euqhmc3Zz]NjXwchiMci~>|=,KKBַw  aEÝێz־*cO_,>/,Br]ǹe)F:? 2q׈_q>n1^aez׸g?!Ro6 sOzM%ٷk뜝sMTk;ʨ9{:Zq[B.L)nOEn.{6$>D'BE9<%zE g6IbޘШQrsEũ/ڣP[%|hysD jH FvԲȮdE 'QӢ!I{_GbOn4'ʮoѠρxIƱ@b?卶f9!۞kCs}>$E^5uf,rO^=UBZ8׹?d ? m:LD3wF_j:6bIn4}>b[3^zc|Y ƫr-hw Úo?S|GٷMj7] Ē I-Þ+&=8 f"fx7ŚK/Z贎Is,Os_%ӛKΫ/8=kؔ\}ӗQԅμmٱIAv+hPŎ]qz.~@O?֝0ϋ>'E<1*}kcRx?^1ֹ}3W+強VnncNOL{'ObOj̴Y#o{mJkI\3cĜv>־F=Q+>NLd񯊵|`/voQvċ3EԬmkw$GfʱfOֿDASäkSI><#D=u[0%o_oƾE~>2 [=)%Y4# {]z4uRN.Ѣ֡p@ efjNxg8n}ic;V+ݔyU!e-7V5Qm܌EgdwWN>Ư|#fvp~QޖCZoj+nc_emCsÐ ֺ\g:)Cݎ;(.Rs#ŏ WƷfwԫ\t{uk%wwge^Nd|GR7gV^yv/ڟ|G_:DŽ|%o NfԯI9$Xp?CĨ}-;HSq=HS\BNҾ? |?ž(+ y.%yu}Ѧ귳ծeiKrrs>Ÿt}#'Sߩl Ν#gZ]g|R(૓>E֒\)t}xic+?CB~𶧩K; hOV%jOGiEls;ߍ HqzSݟ],]6|1 '5:Ow_jiool$޾B?5w&~'m_,&+X|ZmVavk8_[N1"i"2s\)ws5χ xNÐp5 snDY=w!rIɢ@#oR؟3?a:o1Ͻ5ELK*e<chSR39W.dsߜϭv*[X)2Dy8LPhVMx+Ozl-w{vhKCwztQ8c_6Y,j:ɽVw?6uo0ӣOvwqGqs;8h;H};DpT']b_͟Qe%ygJz}ss)9<:ӈ+Y;YwZt,4\ Uwʹ5o*}.3l3-ZK[uUDŽeʲ'ߒk^:@gR{*ڎ Y-ɯqq~Îu+7|)kokYMe[+I{2'8=׭|/ڇW/# WUdQ6ڀg*H8+0e:kFoV~jAR*ۤ̉gGZTp/pk}[˕0 =3Z絠 b_+m埯)Y6(Su*u?uf é[2JXvXX<׋j5^kt+<j7 G8_aF^n@N{םNnOVqb+۶_>} {JH3澗şj:Z[[?-#\؉OCEÑ[Ms6c$u$>C_z][ ԑ-BNjh۟0{fRW>rz iW 'ʍ޽Öq\΢Dy }<pMeZҥS?_d[o?1ּ-P\w8ݭQ"ݡprB l-oWmNw3:E %27޺ v^B" FH'hр7} rO֤|S<4cEo/6Μ4ьVHO{!cʾp/5_O0u~.};)U1k]IoΧ6Wvw7/it'&g,ےA {=f0ݼtOzWMY Z<`l;ԏ&ahԓqmO%`f޷]>~nQ;$?{_߷t1nFrULM ӿt_|ХQHY!ɴXB+m#f䟔ws}_ՊJs®YTl~$O<\Ee6Cam/ό~ uY<= 6T[W3 7\=if'M?38ߘܳfլnG22#$xZf ^;F ۃǹy])jR'ůyxk[6DA)ߞ um_ObL%* *Oz&WN|NtS+)M[E|/N ep>5mwq޾VSzrsϊ\MciF:6]Q<'G.饳YN~v<]şj1XwzOƬ*)/Ol6a'w+kv ~i7Ֆix~iUz7/=2y׏IП4cX6>tCoZf7fN~os}kV>w bW?'5OF'2S|ǿZAVK $rùŻF{DXL'cl󬺑ʛoF9gkבiv>֋v8ټi6Q\>~lڟmfeH*sYߩcyQwyEmVӰ;]J1gMę??#ޡor@Jf$yg2>)k]XlX,c䓏_A4wwM'9'~hs3 oex`e.fx-΀ ך|E2QJ*sֶsR)LVzmƿw= "+wR*O?`GSmm*FS'q`0}kU9^3ԧΞgO|ݯ#^Bo њ/MWR^jO:I7T~kB|Vi%7wmiF7QOɵѦlA|= {6\Co)1͏0OA5')*<><FY2mv.s^OysOQSB,E}xŽ5p՞]sxsڿ-./5Ux.-Wpg^Ōu_ Z5GHmg<3^k'5yI:|;F/.1_gJݟW+!N͝p5NH+B;#oV0?B6\>kDmkgX.)s\*z#,ة S&1 3o_εw8 o"%$f[lr3j7:m:^jr">uJkL:WO6Gʾl[-~vg,c onA:y}fEld1_,c5n'9RJ>Sol8$2-zMմ8R7a3gO3Fy%=wkmks %cA$Y&vtz\lu K 1ힴ'ԭ")YYX]ĩ#<澕Mڔ7<-fko!s,Ie~IVRW[kVVj7VX)BP]yRv߶y-da_K kզ{O9G^~vjAѳ">b9]I榙Wuۿ[MB,{aWsHje?ZCw3O{k汸\vq?hxvyV1ɱr}ξ׼9/iR&yJ(?$c'qy:0Z_MbR5sZYe$S.|,*;GV'<澤0xw)kc'!w.IÓxiҥYJެ#R ǩ6ia+GAsƲ1M~{*r  6=2Q}8l;1d%)O|"*ZnK] k&qy7c(hY"y*(dΊ^睏yF=.ݸݞe)u>f.:#>#rsּJĚd1!'sg16K|/X VMzsޛƧ?6ߟN2:Ί@ƋO jQmi9^rxNw'bAdǑTF?g|>o.w9-ޓ_3> 7;^[^[wZHo=]p_,ٺױF:?K] cϫ;zWsbg+m}Oة UZzܛSKGkK]im4rͻG_\=* V,{ L}k4%fC~sJ#rOſY_Zhvjcܿc O ߒzWC7Hռh4$jT;[cwa ુ璪gF׺>Xm"VG(N{]M.s|Lǂ>su5=Rq}B x+}cنG~&7u'ufdr[ %7IO~꤭+Bͻ 5/Shf$zC;Tӗ,$9faҼ\aMs'֩ysљ,Axys]-{; )frGpio3qz>Sνƻ` \# .xo-u"!HI3MLE5Ϲx<>?to=}e8GL2sORXnLM.>*˞Lg>aN|Uukm* ;kBsQ^yK; ]B5Xo@n|𲙥#9=kƬ[g+F5)AY6^cլetc?ŏQzE&#+1q޿:N֝Ugx/.IY7|fpy~̪;s& C~sbڂ(gVQo-2:1=ϩK .I᫋Ἀ !N:Ej-F=J)Kr["C*HZvu9ؓXs2H%CiwH$yپfk*9)ߩTj<~|+Kx3Ae~gm\x-& c-׌δ]FH>7N'uO+Z4~ s+SoyM{T(=GI8b4nț4 crʡ5"yrpkscF+-kvHbN?μat}JV\TਥrkyS$P{Z{ja{C,k>RgXfvbjN3-@>s׾x ̓#C3dսhu-s K%GrZƙj.aIEsI'#hT:?gKX0R8mt_= ,{gƝ3A<%~ŎaImIooLc޼I?שq5gE&u ;7mNvwzkWkbmvdԵEԦV?s8'4>cwM_ʣ"̜cMz.ce}eXJ:ot?6|SE]&6I,FOTm|E .?]>Zeh\mOAi3ni!e5',.\TNUf6y_=>#DAk $ֽf;hWvuZMOTdOǒk5;KO2>sZic;<Vg%BN k Q*{48+fͤLrp=ZeZ嶝sOSCxdݳOJ\x0,ĿZ@=xnG_z궶, @|M)swu1?tRVL[_ZT͐{k,5 K]0v5m 㷈mV_Nn$O51qpC*s^y;"Wޣԛ3d"QsO̸݄邬@77/rz;JcWtZm(/g:oڧRqcx[n.>h{tiJ{֨L燾4~=OL4864sZjIkAJe u=Kf U-kU_3IW 4U#,8>Kifޏ煭^:}k-җʹL~ۏּMxW L29IW&su` i:|ǰ^}Xw)qq)4(%?*al뫚xyndXTgj-xKDciH䑺S߿R{$yY%?RW1!kRY!=)",<8ENwfft~Q’bK[܋Typ!1?>ie֮.!嚇+[B9.1i@w Vۅأ֪팒z{’3dIm z1KV/`ڿ4%|Z?xo্,bڥ~bGյ.g=|T?2O+8QqlgMx{W2gts ˩5ΊVѝRX"=#Kd8\mQI(NOһǝԳ)Jcrg|/!?i曹O7T\n>|.k u 3}--sΤfcPqWg:D1K+ټd|@yn^Mj{Ŕ-ynPg4gdnfk^=}E[Z:z:8{ 󞴝9+O?: #Q!ί)fSgo;inL1 znkIZgl-&9s\')Z6e[m*w %]x~LY{= xV\沷ִ6<ҐFG5n[C{OM?ɏ f#'VEv,mx;V{HUm5K]N)Rx2.H'g_ pLBg=mH76OA{W_g_|BA-VA,m^rId7ArOVJκu$~h2l*QG@+wÚxKM5t:y8 }ǭyM<#Þs^a%_H@ ~?Κiǩyil$ɸV~;4&Upd{u;'i׭oᆛ EI$oOʟ|{OTv =hj^Ԛ1~]h/U m{2XV,Fnɩv7Ԁ>؎s-~Xd(hBEO[U$'b62Kt&HѳB烟Za[Ge%+FW&?pN3M"?&l wyRQ?=^S%:,yٺbX5 nW{]ܿGj`-mMK]Lo.[5Mزc?JK]Xmt\WFm3e&ϻ?? !CN]kJм7qu(ܒXO=:~ גPC@~=+F{p*+4OeuDHgS9\}3oyi0݈-b#`)_g,hX)®Ozi,0[?za퀵-殶B);[CD-4 ;AlzψWx^[PuӴ79,OlJ14sI}++յE_S,ǒ0?gz/5F:lJ;jIۦNw>k<`y`IfCY}[yS힃<֚#NSJgo_5F3zmF3YUvy=}j];@}Vs6d uOGl ` inl} b-lSԶG9D=89\/bsBF{ߴ>k#@iw'B9^j WLy$czk 7༢nםvҝ8qwvG~npVFQ˃ߞ u#`9xj'vժm@ 򱏟֡ocnzRɐ',.7nXq-K h7zdkVM~]Mmj [Su|i,w}{}F]i[OӋ:٭ \Tۭ(1L}OzpR?Ğ a 1v>=?ZԬ'~ ×ŃEnG\ھƗj6۞y\џjnptf޲69<ݙj(S\Yd8b[ n1+ʼtCsQK\LWХm~ AmVz&y/76hKKhqǖ0\V ƺty~6sSlnzN:jhHw]r!]i^nιIɲ"i]H<_1__O^Nצ:^~O"lO\sUZlW%ςRYX$3ޟBK ofR}̗|ޠ>ݱ3:u.H\CYX<뚆 s_1r}MA&u;gzѲ=>lG{S騆NP&rn}|9O~f9Nzu=D\' P*bJzU.kt=kJGRFUxjI免J׽O7q#L'OO;=GiƴS\\Y:PEMR8mCSd-rp+ ݞVțDմ]BCD(H?tv61qi+]Io"[ǎ+ &2?>fJ 4Y_,-hVE>n}jˀ\mN3`#v2i'r֖(mF4衉*xɩ!R\nd|5C^H`sinJ#Q Sx)yN6y Fif}2X#g H4M<<[!?oG癌v$a@"`0j&-O Z_o4{XLvyZ}va#h>-7}ǟZ].Z>M_A^o$gn،m8N!a,xxrOV}_NrttpMU28(٠m9Z6{1'JX;,4yDn ë!j>j[9zwG32['WֳE'1qʹ_\פw<۾Ɲ~sYrBCFg4#+MY8ZܴɅ,6_h ~)J^WdXSA+gW<{`W++qzu+a*;sިXYst%U1cv=?+ĕ:ZZ=hvb]^)nkq1Ý`g;S././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail2.jpglibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail2.jpg0000644000000000000000000017635110716136374032315 0ustar rootroot(ExifII*  (>?.i^0000010FUJIFILMHH7 ' 'J,X<+Kr0100#  1996:12:20 18:32:02P<<%(HH+KrDS-7v01blnl.n# m9r'#||%'~|&%z"{#$zz{z y{ y{ }| ys y y}y{y t yyzvv2w{~\ex|1.el rp roIs;Ax;6~32|" |#x wx%{ zN|j|| vtv}~#z|xt y y{ rtw {~Xyp8/`krprrCu;9z63{&}| $|&"x%"s"q w zqr?[{ n$l m s{}&||y v y y{sw=v{~n#\wr6._kprorFw83z00w&"x'+z/-s9Gm7hu z+?o- b!_pL6Z>6^#boz~y|ys y { z!pvNx|}~(o%z z6/\lpprrauA8w6.y))}.5z7Arr-q rz!Gt(-bo4RTGX=.]+!c!k y}-"~{y s w v {& ovQz~~}~|)x~o:0Zipuo(Kry=As7*z),}~07x>o2o#pw)ze\OscMAAdr&#e(e v|-~{ys x v| rvD|||~|~}~{ y9/Xlrtss~5@u4$y2,}34xEq5o)mw9{}dXPruL49^- a"i!io ~|)}~|x v y w {pt(y||}~|~|p<4XdovprI7l*g t4o*=nDEo@m{'w}So v x@Et|JHeIJeJKeE_i~eX|~~$$e87Zd y st z vA wz~\_[[Vnks\Va\[hZWi.9i7"g(3l1m%r~t vJZhzWTRNO4BgRnz|{~ }~6@b57X#`y x y||W\PLJI]FdoUekre]azU~_VXViTXiRZkNUi< n%o}r uU^bRzRUIOHmgq^{}~|IL^35[%b||{||}]lcMMIʯITRjZdiph\xm\KzhMMVjXPiUWkMVk9l'o} v tYp`RbcITvNlUy~{k.3`-]|}|}|d`MJHHIELlcdayIKjeRubSZRi[]iQYn<#l&o~&p uX}bTeeZlWg \ v vs x.4d)`{ z wv^rsddXKNKIIF~PSiX[yOvRK?:X@@VTShXSkVQl:-i'l~"rsNq_wZhe^pklo n u v w+,d06]+*`(&_**b+*b-/a,@b^SPHHKHeHeUXEPuXH:4X2+^LTeZOgZ@i6-l*m~ 5viZxYgf!i"r v v v v,.b00`13a13`1-`/1`22_.3_bXPMMKJI`MEFbNPk^PC/X11`FQj]GhYSikp y~ _vpt[y\iacf1r y v v x-2d25`54`66]64`16`34_3'_~XzPQOPMIx[|IuJKjNO<@X3>]->_6\aGXlXGho t!o r ut{U[Di<`f[iHgy { wx/1a55_/3_65b88_56\31]53][\n~]BXUfej^qPSIp\y{HwILF_WF+YA8Z2<]EYe6UlBFjn s v wwrR_ieciWkkw |+-b10_03_40^31_2/\01].1^0V`[R\Z^dd^cY\nZrZYQ_XVNUX\VEAYNBZ63^:PcLIcMHlY=lo s t6SlpV^z__'l$Sllkn-/d.1`32_12^3/`13_13\40]/B]N]aU\`XVaRQ^XP_]O\PE_FMWBFZA>ZFnICj61n38l;AlIRlOFiDClBR,.^|a]m^ePDhGBjE@l1*l54j84o4>kD6l<;lA(l;r0.aQpZ=O\ȮT`Fg\]Zb6^4/\/0].'\z$lpi!gee gI1_DPa}UtqbV.omU7-\)f_abve_]WgHJeI6l(.o*4o80m26l89l13p1?n=r&Hh9E\fXTRJW];e,!^(2_2YdovlijikHMp]QbICeC5lW4W\rrUQ}XpU[UbQ^gTJkL?lKVg`ier^?Dsdjg~qa2X\Rl,li]OUyOKEqKO3d*],l'awowojjloBMlU2b4>a^uSalNbmHPLOzl\xyesqeiee[^lVHdVXkPgN-e.f[^9K|RrEeH{[GdR[hXXMTWQb4EFTTY=\*0]x m`w{zNEŶ>AAAZYX_YUax[-saf`bm|lpee[;eOSXRVV|Rb\:e2_rXY7n7tDgkExEERX~V\N<~NuNnMxOFMƻEʺA5:w?@@O\ET^X~QY$!g{~5sB5U79T@NVLEU1Q\`\K8CqE}IM8TTyP]q:vhIuL_lEB;T;0/;>BRu@wKJRe_prZ%$e"%a&&^*,\/?XCAW96W;5U7;S>@S@QcQO|uO݇>EUHajI[HI-K5-94}34|mT:8T?9R7;U?ERD>R3|SZ>2lDhpOfOxgEcgKp_LLKSViK`wOO?OE7T#N`z4´+95k2wp9mnAlRDwK}NkVl`-2Z y#4l>R[lAZ@>Y=>X64U84R2R=9Q>SRI5PM=`T~mDtwV]AHEAQGVGR@ZXG?KJ3X:f7*p4y8|s3gH>lHEKMXR~Rl]qzd\Wk y v-6gKa;;[@;X77T67U63;WAxKQNKFFSKeXcPDO\DTJ7S5"\5vX>.u4qT>?RB:U<:W7RTFyAPOpFEAGUW=_@NX[RRfMM=8W45V0X p w{Jku_WUI`mKtFBO8-W%b>[[c[KgbEni?xuKH_YP?Y`H\.gi}{{ x v     " ( #$&&&),)%,"%&$   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz! ?L|ןR-foU=׎3E֦\ץI=l1ri'fޝ+f;R<[$"kUZ|XlnO֜!cK 6]C0=iPa 湧V:U= ݑ3 lܒk'=niE7 TsJ [MWn+X)&uV`)Vl_.pz5|ߚk4)^q[k/v|*#ZWzRJsTyS=iz֌̍ެj֚)n&ّE6#sY/=EϭVW㱜7Ar^2yQrI]JpMG~j'!';Դ6ǯzoT.H!m ֶ3+B|Q?sIXKa5 pAlIXw6ٛ,eS+>t;sؚPqeFWԨˀf Rdּ>\uS՞:6hnn>iMX5ﵓ ,MX.Z6<9yXg5a~*3oGФOo?48YXPnEq2f_;-&UBPԷ=ᐸQ/yUPy5]`3]"qުNMtAs]H]g([H Nnr±oGֹѣ+q_H4Ir}><ֳ]M:ucu?֦CEj3,JRzWқ.yBkq\(GĉN裚79@a}ZAשqp kf3(ڗ;1s05[8=/Ja;zRHJ{a^gM QY>WQ= r=S{Hϋj\uSrO֪8搜+ '޸Z1A*}Fed+RաO>f`.8f:sUqӭ &0{ֲlؙcZ"ta`jx, tS]9*3Ծ|zhxtC5' /0{Kg tus׊Wyp .L~_Ts^}iFk[ٌlhq֦1u6.+S:ﻔu5,|ԯ2MGh1qδRܽLbsnkZwy$*hO6duPgPݒ!OY@pFv.ޕhld5_;MI1sX%ʆ28gϯ56~Gc&AgIrM=N4LGEkKHK^mMׅu.k2B]D:ߓxNKo^i6΍}cwEq+gײRInsN=ϊ;3jw,35?)te\9&4([,$5G~EmjĶYWծ*O#ZQ\ٟ|u1oļ+\WjBjɖ^~F4=jc\S;S%^䎵bl3\GmȏP$2c]~rC7tr-<g5c JjI-vɛ* jhxLoO3jE5ؤ3`K3pZƞ'ciwwjq^W̯'T=tɬ檞u 2DZrMTL^'sͩr8h[ s]ho͹5ޓk[+z^wE>}Yni-~S:Vq.{UҙyVl;z־Nz5> T񃿟ƥ?t֓O!k'.s3ZsV!j#JiL2|H-%(8I;+枇q#ucS{nNc=swVMܫJ֚e2rOW c_5Iu;-ߘ1T0{TjTte߸RsXSk=YcdVnI1GS3[M.1YVgR"TgtA3HֵsorTlnGJ-ÑN{dDM'ZCozӑ<箮 s0G5i9{ jAvy;ri&V?U+=s֜~@}K-ZqQdӭ~iI:V鋻;76vNk.gm•yH3j!si{g֑[KӃ jXZݕ+=>1M<#.bo~g ~Fyu~3A$U)Q#r BT{Y7c#gE_SVRGZ(.xFaR?ng:czqŹeɯɣT*3Z.5Kʂw7m޿_^V8'k~,jW|KX!\̾D\ɺiS[^Y'q_ K{clU;ۮ{WvuY-|=ƪ 4ZUўqbj{89J^g}6J"RDOr{\^b@'־MU狓{cg'ֱ:%3FOZϹ+js6{{jM Y¶/MPTָ)jv}KsMAl)'-]BP}gZ#~c*Awl-_c?STNKS^8뮧UG"O,7̑h`~cےk?>Ⱦ#vCHzPBlJsƷՅ=1<1M4TF}i;f5^XW4i;V_~g{klc"27֘dm88ɫxWqXa=c/'ޠ ֢}iH,Z3ug]i9{m|3$?#^/{=ִܑs9hES2j2+ ?:棕m9ʞ5k{s^++mғ&0a6yD285^WfUrMV5=jLpTr٫wK7Rb?1?iR^6s,}:*QRெ>#+zC6CGarI-/$5l֜,wl|q}B|1wݴ>n<⭛r(AYe|"dsؚlc&Rc99#zՒ['4XW_z,2sTZ u w $R-LNxzp0=Q?#'57Lf⅜1Z]:֢4821Z.?v{׽.6z-ֽ;iH18ƽ|7*rXcWpes8X7%8'5Ju'SY5w-ۓVݎPXj^_7oc J`a޽'nc]L4cxجO< zi3ݰHqɮ-3nfdzՐX6[ _ op<-Ϻ܉FJV"̼c'{%%t\I4݉=RNUwpy^'-g.7gjtvez]V&/Q.nUW,yIHO#9ce{{gR ZWcա$uYyq)==[nȱEjoW#> 0_XFWkVK^kZysEO_[1͟[ǵƗ>aQzHrQ_ƙ$|AZ> KVωvsԿ2/KU+ITv)ܜjo,Z{O5BePH<^ !V#CY>q?Fܵgew|_jux :IZAU&f\'5"\OJ{n86 7y5pfșmܨ/}i[mv\4I"͛3L޼֊zj|ֲ*׃M5 縭i=MtHO:9]]JȞKFSi ӟΩHؗr7ֻQO}*ngawS`+NCdž d^DɞUVTV|) H~!yc:tI]H? XqğAP6I)(O^\~})\5i_v>2랜jKnnZ[[3]Ed[aKě1׭D4!;9=iq瞦[zjxҡBd=O/ɃS%k)yw5er)>d-j0rj#皳KQܐrW!'׊cSWֲt[GUgv_9Ky{T>['sȭA!In!n5ޚOH6w%t?{z c k(tɓ5LAs%EZ-thFƔš"ːrI(o!ߺ^wc{5761ӌWial!?QJuۘl⾆i /EA'`ԡIP4imcҮb0 u82)+ 7>Y7;w5TA)07V~S*Zp8[ pN `ba'A.k8ܐkTS{5Jaq WDbm Vftyk=wFNڜR,S6lr{ M=[oy~#;9 8gj6o1= a Ap鎵ԌD\@-VKbTL&Xk0lsNAs/8Zz/}+OSTo;+myg3.j %{Ԋ֏P}?ZCܯ'ޚ SH,vl50%IU#U^z}kVyطQ3?gcȝq]m"Na\[ZF=_OٜuZ_yv:6'v]9BQ[o庞~}-&R{KS8̩x1T&׾ä˹/d<ߝaz]؋]2/8^sWK,-iK^Y2б+gFefMP͏jcIl:]Żi7,O֥s\t I]>C$2 Y,LE̒Y]Q7];M4m@Oy5wqmr\)IP½<y3OSެ(u3=j dP9`;hFe<5%gsϭw(SRw5`sH>34UOs2)q=3Z"97dIF'OT.u95dv7]q{VC6 X^祆)ֻOx6^ ^w>-OZѾ%OɘՎVfͺ-#0:+=[q~[޵ms#Vg;IW{h򛵿?3کJ`XxF7xֲ|+XCd!W=ZQ~e `AGp!XeCLźEӓߍzUgOLwf]# eUsO.`y3=3kؗsvcE,s=y0x^wGf.cVlDM|<E5UW KU3,:RfnA?Z[Oֻ%vqJNR4-lww8q7-YNweػahI~鬛 V3rFJN:PiYJcUp:ף -N &XnاZF|d1jrƧ=Msxnm-DW;N_[0[Um9T-z0J_;ޙ׽J.{ެl֬n.I3%9_kzXS?*' T{g$b}zׯJ\ǛRdN%1ZϽB~nƳ9Xˊҽ?yny4>" ޴DB3O)ț-5 gn r܋[q*{WO I0wX2ٺ"omŒSҬZSM(9;m3I X tP}|כ^I[3VMNN9nk>axH^*._~jeP9nL\ "Dž?7fSZhvJz0^Uou7$8ot۫w l3H{6W8iadH_qOG#g6Qlsfnn{"kMet-¹k *;%(r}Mwѣ ;s!nUwf0O.F.Ǿo~{xL2Ė)DjҕcU|gJFpX^kI׾1QaXI+'ަo7+$zux i āxW<X YqZ&ݙ?/WE[MYSgbVnld-޹Ʋ4aVߪ(2Z#c/^<5NkY#zEKq[~OEM;NUn uZ65TLhDDZ4z{EٱE퍱9/x?7Kw6 [遜O2TQݷ쒖>9sm-&RM qoF5#zK4ϮO훿&}hwV'&,:)+,bzަ>MY<}eᵗ]>gy^4'o'w>Eo!ÎLhlJ/՛i9̥k߁Uz'sxWZ|qVW-$+Ͷ-Fvٿu܈xPn/ppsXQܪ[(49Tb5;aRO=Dz|dX浊`u"Do=j=c$M͔Wys!3MnDx+Om۱=7q JXWWZj}U#V랼>sWM܉_j04Y۳W7Gs$Zm4}%'.bՃ۩p0:FŠq(R杹^[Gw7pYz4oE9v֥' 9½Py6Sq"ks]XU~1G}[B35Snngq5D7W^v9Lk/jH0X\b\?ǚvu$>g&\@:.ATi}NkGGArO]¸kv~Ν/!Usk/wT&{xO:oQLSSf[!y\JiaE3c֘y=kDCx&:vEi.]īf52ut/^ !Tպ]_K3''b7L);K_tUTnSmi5 vV,y#c-ͮvuYv\.[Ii5Alv}Ц61W?jZu3'c92,}%QPMxWPtMѪԓ Xʹ{&-J|F*+;H_(y9uC.zz(xŗf{A˶TЯz*BSY~6A kS&[&Sd0OZ%l[b]wWY\_(i"̣͛oNkLd 5 f"+jiM2 #0ɡ2:PU>ylZn{D,IVj͍ɲFMv-kj&"ִLlQX5u>8`Aۃ4}q}EkxuKޮ3XcDХO\GܼH.ڼZ;m,M.L_酣2:֛)@&YӚۊmQEGv%FxMo|㓚~ˣkˠCyDcȚ {Qb;F׼b5RZC}k֠o%yRE#dKW[kOuBJ=ϣsY;nlN>++n\OԆ>檓j- Y֨Z޲Զ<'?lW?p뼅]qr! FL5̻O*1Ledԗ@y IyַcZK\͌v|'7QW>ԌV/(]_p՘L0jվ6wsV2 汓YXwWOE$ 'Z]-M.V;x3vN}Ū T1붇Y>i ޗ>nK~*m*K.-)]<4S?y(i.T`ye(~âYVkC[ޛG{3^ZG J}&Gx85RRe[rsIϭz矨qӚBA o֫^vR3!b$fU$C3_$Ӿc[qׯzK2uM9־ O6.iwk@$aFEkzy@4QҾ"..ܷv?Z;SgVr?\5}嵇_zʻ>#-g+s܎rUGw0%0h ]>c=MtUfm$1&G?zCkǷF}k\ͻHP`\7v6kzRi?yIw/=Εy~3R ;Բ\P#mkDN_ifV-jm}N7;s:듎z?SWMmB*Mkv~c\A49!վpsQ^Ls\^Sjt3nM(`\|s^Txw+iKֻL.X_3֫ K1u0,FWvj AB[֛%C7 Sӆ%=yn5޺(pkODk3[OT8enfzT)s]_!4j?uCY#jnO\#z7O(V.֬V\ʟ6PKbwĸ=}6ܢj]9#e80[~oY bj]Mt8ωG۾d\iRY75aWx]Iܧڼ`}A ~#45Z-XU9ߌzKGŷz5,/_ί/^s \"5賗p4gn v8Gc'4$H2}es+>Ú^'Wuwirq5&iGHa~ 60qsq%>ǥp[;YsG՞KVR&η'3עWլ|9 ;Rkz;#=;(0>aOsLR'2ssmir[Gj_P2ԑɬ\۹*Ỹܜ;/$R)}cjnwsŚ70vX](jrdžK7s-P3X%YrkէR3ٜ-=Nw1095/^39}K[é X79E˹NXxGNfza=;s82vUGzz%jRIk$ 2 e׽z0pԤ%:L'֡s׿SEݱn[Ql&TK8rιGv-sTs~a;KpnQX¶Ž+)q"jx9J~"GC,5[f׾upv4-?5TKSr54乏a3]@V-"7%sWJ)[r'షYeawWGAorrknc)-?Ӿσ-|FE啬lkTMH15V{̆Av֕4Yh>:Yhg"i=EHpڕ@;{ֺkK73lKRToo3djpNz:96=JɩAyyhOi>jQ!ǰ3&\sV3$*k;fE\g6ΩK @ǭx2aj)^ hy@:m1=#}rҭ|3 jzן~݆ٔIK<:E#: WNZBxxݽsrMzgd]G.ἰmOZ{ U1}!^u9SC]g2*嶽 㡝*\ZHNPZQ1.\$~txOrg!QH|Ke.[Tin^s7r@"R Ȩz6diJsVޮ|u3Tv}k(A n+tWN>^-P%LJ6'-Ν-A41 zU ;Քh$JF/Rr-`̮ȥP# AۂNj՜sLlI.MDISֳ1KS>&xcn3+| ni7dCЧ|ƔcP-*^͹;!{u,9xoJG-jwǴ6j,u0|5E_ڡ\޿56n!ni]#ȐRzE cJ޲cހew3u܎`52>t,x_JοV299g3H/X}I33+Wo:c4%'z2 OcZz{U/aP9.?h~m;Tf[N>ӮWfVm#Ylx҃l}+'?vS)q۳I4l^w&kɂpOy#V{Sc~F˴6V+nyk|̏N|cҞ+N᝔CRP,,I(޿6ZiL?{:QHKӓ^q7sKƀx~ɿq9<~2(Rl^ׄuZwH5c4aOpE+P qIDSǺy$!CpnOZlkECLѻ`}R;naϘ5)sY@6$_Z9eu.PQć9T<'%teẃqj"55չpnfffc]DNzF=Z:DHs\]Nz7ou$^-Q|:{/Ҵ\KBR_Տ,I+g5SE: T篭Q,wCy;XƮ03V(O]Pc5ާ' SV fԡ\}J54 WM5cHn ɭYk+I!5{6[sJ唹uozg.m-^\n|>kw,Z+K$pLq歲vX!9X„KU&D6௚jsҷ Hy+Q1wǙ Si-΃S{ъ6{6nDGc 2ACjn./!WjX6y8{?.:{םMHQ axOӵ->ŕ./|޽;eϤbA3mmmqz$'UR|ÌlO$z-@z;›hvcԷ?֮%j@I"Rƶ>i}jxYv浛j NwĚ|G_Jio0{BDVڗ&fְ5; r$P n!ɖb7w.)ٍt: Ưs.G4-LI'r}j5yI+.z+gyn#"W1TKr#q[AGsr!zRZFn s\ȍIXFoVsŘ9J D(9MIh.~٪b;Hn{h=K9!3^lw:#~a𵫯|zꎠ7PO+i32ž$]yq'\:Z+H>_ΰA}PْPMtqt/]r90Kь2]Ë\\Gמk_48WE=~<$$]&(>ke0F"VͰllC'ZVt+qF9hMW3Bi=}W 'ޔKciJ)j0Rh~{~4(\v4bzB=踀d7r Bx-Nz Tg'"ѝ?Z @>yǹȨz҇)I7=iTmAW+BߍMXzC2uvf?=j攕#!c4Yriq)FK >Q\Le<4^xz2b%7.Rx_=M*טtM eMa+:MRwLsKZxW2|O:URє^@Jj͚k뎃OS]|ڜv!BG|,]fSs6M:Sz-ϽorZIf_ZƢ:(Xܰ 5c-fǭy|{;OOyz5*Yl%_u4r]o\}*ΐO "/[?5=]WO,`1|ֻ)pNe$&nf'?λj;H 7Zvx ՗{։n$dTeʵG4(-sZ_oWE? ~l$ZU2KS#)3y֤3Һ'UE!>d7j9zF\CbƑCy?:^^RXF)H@i: _5 )#3LlP9ɤsKXb&=ia38E! Q;Ih-mTb;bNh|37VOmd֚8鋟]TuF&2ǚc5PcGj^52_1җ?hAvgzR.~PA6pX<ɾt~ L^k){4Ux鴝z_"BoC]ݗamL/lYsnk6KN%S}%uǕ-^Οh90.I!#޵)\u,Wke}V̶vj!*d⫵BqTϕgfbzԵnwӒ)>h.Z술0EtƤJ1bv4;oZb=CY1C`9vkci n! Z@/C-t߼vrF8 [?i5uG6^$ei3yE{Kg4eDݴw c9G4Zx^9%#0EU_νWX{}+u_[B@;y=kԋHᘚ~W _4Moy7$#'Y-j?yKp>:h'vk@_xBO5kW KPɉ}zΣ~=?/Wd0tX%>zLU{9#ٌZqY;SjӁ޼OZv} K(\Cri 4jb}i 1 捹im#ޕM{ndNhb4tfWDVcvoZ/w9Hk(nWm׭WzԆC*a.8) VCj,œUdS._LSYH|%HssY=ϽVyIalmKv5[_k_X?9ltQNc|!м#bDV,k6's]O5ȖƉvTrdVn"֝SޅtL`|i[:Vəjip$UYtNkuUo"0hvYpy=O&ܘ}iCfZXS-B")4X./?&GZ`!pi怸M=YgԮ㴶Mp?Ӱm?G:xSVGITe3]0c7noܚצ4pZ3f,7Zfkc"'L]M[ ҕcwSM Ic3wb_5Qa&k>m]CFɛHYX`Bb$n*I=XZmt1Ӵav_2K 5З@NG_Z}=2kjmNlHyAS yn!޹k]3MzO*A9Iݵ+2ztq:Oz,"oǷ6G'Ȕ{ֱS {ڒ ްuy$q?7z ߻0ǚ{יYsoHdn:gY h ޼פ3BmMmJEp=kD+q.N}K}WV?w جQɝwiOS)sQ޶+>:.4Oܢ uXf--'{1W`!bxQ&w!ISiŧ2  "λLנvXOOC{pߍ`m{7|޵I$buu$rLL!yk d5%o)>֛^]Zn5 hlo5OZoyq`Ҹ\t;5r}[{gMzS㖄q-YOV2pmnRB}׹BW1ytƱnx2sDk3]7]I9ZMR_>"w5mK9OY'=}O[֚[Er?eV- V4oqx#4wm$ۅ:o^4KH Ӎolk~䚋RB!l >;E޶,x܊wڎqn-[ܪXwDH֢qԄ.v1:޼dzRuCLW6{Z>kaѣb#*ڗkmafr9=j;Vش]jߙ'RC]Gz 4|\T*65yjFg䓓Md_N@zb$KuzwjRĈ{4ve,[amt=aLUpIܳ}1y㚫֡6.0qZb_Efsf>LKJq5"=ԯ@5T8'~rq5ȢuJ^ptWnG`^^$/Wo}W,vq)G99]R 0z&O^yrϽ5@ƺo,!8k:4~cԐum&PD˕"zǫsKF`>\X=:Ϳk&r3y,j&s~unA.U^%` KVa&twĄ,7kӵJSM-UƝ$b~H[nvC8/Lo|5Ŀnz>x{TԵi?ߪ4\ \'5[]?v~Ԥܛ/2i3^n"4`Nk[\.[j7'EK3J1 GiŸFY}AtpƳ39Th0ƎQyapHw.7]5 *;Qh21֗q5&֨?\T˰URYk5g7/<2ss֥I1a!ڥ,}zO >$]|뎵ZJx4HsڬijEFpo+汚LLi9drBI }iܞVC2*ҐƫpC$nJw&QvBi2n7+ x@Yq{HW3曝Ys@Zl)\ITNa,r=)S)3"U~ĉ54VG,]rM2 '+\7tMCNܝ~q8!iX7CԮJp13շzvoNUBo??ky<9>SKu ;&3-4<1=MQu_x_6 vKj9=.ch7֖[F.e ^-|-}$)]qXXovY7fs9x;o^"4=YРumzSbDn2H5P8R ՛{9V?ni2w8珬ӥǛ6#i_s)Cōk;RýZ~s}kj z6yD\:ֺTq^9jZG^z%Z+vpc֡\D~^IloLjKgR(.35o$nprW5N>H$4wiI~${;xmmd&|]S ;Oo|ku}ԌSORYx湛O%b}3mNg" u=L˱U1އ M3Xlrè4}N-n= ڞᢄGZ?Oz6 ¡nI'qVvS*c,soM@=$u4w,NQ*JWeɮž tz!Vv-R21"~s ;O9\M3ڙ6u9ܷ~ͻ5 (l ngVSƩ`۩i')3Ib 775;x[NECܸ$i=ܙ<=a䷑F%km3B^ff}"otzQ-I}m6?5+ :60'OOJoVhy1[FK{ք_e5sXÕ\Ve^_*Xjjs&{SW+R~Nifi ߞUκʫ:-FmR{RbwZ'6>4;.֝#53ͭV3z 97i59X֐ˏ*-q0goh29Me5R%1p~aTx߃۪%̐K&<?: >pgYjcc?'Ao_~Zү.,4>śR-R=˿9;ڡ$ )3*KNr{o\Hbo5iբp>e?~:z q8yz-Aw,]~M Ês8ҹ5M%vhj:ޫ.dдb/yίgE}aFdը۱&>SULR7Z3ꦻLw.i^F&$ {L7vQ۵CO Vdsm7V}ƫ&veA{6tV+fnGn2.zM:=S}H&}LS*_Kw͢RxcިLdU'h:WФ,HǮ*K͚2/""䚑v6(_Zm'ֵFLE*?ZĝM iݷW#?ؓJ)od.? 6i9`xcXriܗ߭嶏jSagps{VgHH4⃦wV0)ɣ]FA˾ڦoӚK9ntz/M[ /w5|,g&ϗkϯZGNV41ăj3yϪW4#kW#{}Fѭ\֭lj&TԮ֨aSmٺ.G񨣚PL[*Dj௵(f.S?x)cQSCT Nkq˝2>ȅ~`vMG"'Ii"浈R篽Q;f8,RZBFJa@zn i}ĶKp=MnE *ۡQSkEׄ=L̍zqYK}u%+yahK>qq[6$.pSU%%Q$mj卲nb9kZ٬|i3%cyrjtB2ЖwziRh|rֹ~x kmxrOSIF[OIpF9vG([6F}NOzF+SI_Q'|GfFO-OGy.#VC5.TuZo#ƺ rvkƑi^g,$!T$h{Y.q `IϧJvL; y%l啛ȕN1Z^]"7?,z=tkr}FxXy/ֳ/5t{A;s(ʛP8}l"AŽԙ?kCsx K|溝7U]u=JCQ{4sh`axK&õron:=_t~v+;a5-w*qY\F>@yW_skw \Y«G^^#ү$u3<0Kj RΓ:+ M{# \gҭ*qԚrW;TyLЈ<渶#:QL );EƻWDi0rBn WWs[HxBqn'y4sʚ֝iٲaUT3=?EeD;lƮ# ,2zԒ[iɢIDJV?#!N,[}*:z¬zN?R^!q8aim,+=ʸ>ac3[wg36طqriӅIw"F[|N 'c1隕ܚLX~Ү%9 3 s\զNYyq ڢ0ݷsRP4g9ާ\7$29LjOW0` tBW2oVnn`d9Ё~![tr|cXʆ{bxH{F~7ⵎ6a,C<[#wa֥t.?So'p|H/)#ǻpMgֹ[^k"(LlƓrR[.55&g^+B\D\rpmɌe%%z>%[[?9N/I.K [We5sſsT-B!>k\bzs| sZ]JFMLn nw+yoO}Q5mzb𾙧O#.emk"* |#Oxy HkZrʧ4Rݤ)ަO A_kf)u*ȭ'&k@5ZэȈXsS3QM$v^tͻn:#J>i!rR_[3NitJi99 v{ qo?:浓0Jrb,pE^Q8 sz0n?I{!NɾqråX胺&<I"5< 0or޴ޚ43!I5ue^3ޣDXi$u9SVuI9Z[6KBymZӵrgקt:4ZN.$2Evmd_e#399YͽQ q[fs6<:"vyĬ{g֜cΛDZVgo$ܦ*s\Ew{ku6 ~ Ŷtv+Zܧ?^z5s9Ѕ؄̒K0q4.by1hVzҰQU~xR{拁$KI+&UwVZ3p4 ~l(~dQk Znp=eJ9:` 8E,)m4'A]Bx>vU//S˅{MpO) c E*=;ذb b߳v_s@9iAliF7f\/o ֖ry׬"ZXSn 谷f>Qo^"Q,ZSXK>q-v.[0?c̉)qjva{uvl@7j{닉tol |'>f*i>*pH0=*X;ץRWd)(_Jvw!ͳ.Fe9Z1J-=k_ $D`tĸnXn{ Ju@֛mKC|FiwCd+ʯzOs9mG[,2OS;)9#S^'3ҫCqlFbÏ3"W.yofw5{ĝq QwՄjI=ڛSg$5H$ަ.!9փ5 34ZAZWAIdVqUB]FJyB}+ Ե(8Ӵ{kmR8@sZGPwSXm$aE#Xf3e(ܶfƟ)?ƛ-|U"/7}JrcOFmޭ9D?b{<%jDZ^\}3XZOծmQ=Ey۳& m%k4Y ҹ}E.j79A53[*NMx{q"A@50<҅fSK7j*DZslkr\uޣM!IY61jZSLgUݧ 6O]~EiiaW1cd[M cu QɐUL95N$Mw;"Kk}0\My5:lS^&ngsk&lk+-lOLyn?yYt.4"nT:.+Hn29AgZ.֠=Gk*Pڍ=NrV'ޠiB5R7G]#5ũ\0E.O-u;5>{gYca.ikΜ]ع7:~K4U WwVAxF3Z//ެ[. U0^MܣEr<ϭY⶚Ob1k*IIsj,3kH1.%s^+gU] i.ĤTrpUgjMj!SA$Ԯ.h$Y A9M6疇{>KK8d}LFmQam.mڟ:؎yIZk6 KH".OǿX_g{(Zm̗Nms1_HA$ϭ䍉~y%?|FI/$OesRWdsﵜhap֢t+E;d<ޚQnd,C*t'\5g6-r|,_OPn5)TK~''bʮ=4d֦BT֕`fi?;w>fw*]xWX&ȷzrk(]Y/$9<*QnlYMB !3`*lM&15ܠHrEeӣt8"sc.xWlėS'뎞ev[W>g6́Ak,Z ,j ax&B ;҄rXj[|4EτtY&a?15x<}"z5:a-Q yox~}BZ{q+Zp{}%t1-Z+ᢙ7E<}͚L: u.}6[CsHlOj:T|~5tEkD=Jyf|5 vWi Sc!Eje+ x Ǎ.3~g"֤Vq[j*z毵8dYmz񎇙)1o5Bh RcZrs9Otե«=V_C.[Uྣַ6,<-#YSRާD4Z0?ƹgUil"sHu.V-B?B2rOJiíS#s#/$k){%mϜܥqRTta~tjZyz)%vTi{re'|-ս+B7Hı~c[JG'ogmks׍Է=QJȲK3͹~~H sR;&$H'Xw:Aj]DbQ?u8Zh ;V.朜SvYeyCuEv egdkn!UVq(82NP[$VŲy&ynMRFgxCr-;xY;4Ƹm[᥽uhSYZ]ΕUҴAZnAW 1aT_ze>Z%VŸ:͚1/ 4x٩k9YYY7%zKs]pn9h|k?m{? tk q7{7݀~pJ:_V2of#kr;f*M߭UЎ\sZF.Jsd v>ŶsCCf|}l 4Z2Zm?ʚm{uf-6H,z 5i6:hN21[8'9fĊ>vu$ U'mgi=jMsV4ֶrkż&?^Ӓ;#VSEN: i>W7C|~SnTDckLm1+zY0TW6rH<汜f9}cN"A$2|:{#n'My>Jҍi4)Bf=b]B8#x4[׋:S:Kټy4#DFy5k6%8 !d>^4du*iu–1>] :|3L[3ݿZUj/+98,˛ߴ{Pz2KCPHcqp˫k۵Y쳦Dn҈D[YGm\"nOsM+JIjsQ\mm-|IQM-@dQ^!dx*9I<1ÜѯT-6VLSFHmBf}MahwԂYZY1~ɬԥ'mm+GFeyg\͝$ )Pc=ϽriynQb!˚{"V<ғj݌ ˋF@GkƣCNVyni#~pl#[/Ϙ2G))=u9}jDZS&'1kD֗[_1sOX805}"H%&1~iڼ%͟=:RV7j6~u%A-N-L0r 1%2hh:j&`ה._*Zxl,mw."DI,F ߝceS&SzĿ$`=HJm6S>]<䎙=*(";].w%2ԑZ/cZR>n9ҧSZnVv}rs}~ui$,y/{ђa{SX[I&>;}3]lVֿ>ܰ&KHڼZOMzKE m#?E.p5q3li:G֠Iv i9 JD -;;qO9h}+.L}(ױ"n?'#\0"=[U֢*r ִlE00]OZ5=̣6M7Kך>31xkϩ}Xvq&w@ݿϽXï<7]:+ mCGߟ_GGvYJF:|D[9뎵'uG@|EDF9ė{сyu$vX/Zg ]IQzA{sȷ9TI~f$ĩq.XZ{ilD%K;z4ao޶g5g4s)j{ZGznmp:DcꗚiIֱ߼T֦o[bu򷎏$$D=}5\Ƌ+\e5:0J~z]TVӦNmްxɸzXX{4htWDY*LBgMm5g֨2IZCly{T.u(c֬ռ]"\ֱI&{E"WW8{6AGhrKu*' kĵH%cWtoEm"7HD}Irʊr$c.lApwIy淭-,dl4'٨Ev\aԏm8aRFUY\\7 {sdش_1#T'!6[vp]0˺lJ_zMa*#gr!& u:keAwЈAm.eLL;L&%O^H*V%B^^/cK+o,0F\毩}.,?PaSkZޤ.qNOn潸.i]󕖅+G]6+|zZ;HmcG8/REjuw. umz֖rn|5RMEEji\4c_V入@&Vg=Nsqhbx~kgma]i> hbw:MWYΚN_ƹ]Y`O&&9ڼg^RRՙK ]K8u},c\q؞M)ZծdGz5zVm~PoVpb*ĆwWrt玟wY.<'oַB"7=j95%Xb=NwQS&g޲4?z{I' 2i0s֭t-F;j*| _j=ل\Cyj:fԯ#,|֑>x9k/ۘ.c1”#+GKIm R6H۟5Q6@7ˣ+ ǘλ;EV^~}Y3=5f0yl[-b]UB4gܧ%kM@""|?1'Lye8_RйW[4q~uj1*j ԗɟ9⳩EuVR\k]]:Xg޹[M2w/2j^Fi+ޢR+]qSt^ԥ+׃[v UT?%“j"xUrlD%D%T{յ=Ǵ,s^sjC>̵RM,ԟE7q@#Nev9,ޣev\z\bɱ,YU;fS>]J2Lvw-߅.ՏO,OV?γWfM%;zm"Ic6c3lfMVN@Lz*drƲf("C4H21dr;(j[H95zW  N9:Sߚiw=i(u| G/|1eytic_hڔ[dSu9p,XZMnrԸkam5y c5ߺV>iaa5UM5ۭVF& @; o)I=Bqr&~+נO^dZro2Sֲ׵Mn8?`~zTzf-4I<-G5T*ڔVTir-͹ZwMZc!1ink(_r#?*}Me^_$)ipGkzm#M$5W>dmyXwCj|oyNҼB\.LHQHݞ,F:[/'O\zսŤj0wV19:_Y{Vmfև#mT8j^♀yeHzJEc߽=fUkR<Î84q(*q(Lw% H99aS֣I2أzWEov-ԛm=+tw1Db<5v2}P4ׇAgr6huxL?Ѳ#Qizω%,p>[K'P}y^9>4_bR>cNRFcSUvkTգh. " ۷<յ)=ٛs:YIfʦD89UY~NXTȝNwfm#Hp955+g G^dƼgY9f=sc׺oJMO[k0~v֜?dRz_LAs,s)OsR-hE~Z+dj۩E3I2ԟrķ6o!#6"NVԝ'̒ǵCY٪&>Fnbŧ Y1jI4vw]J;݇(2|jw.l9튮ה:`kp}{qXĶ!nT&;.;ɲ`ģuOz ?ZXQ 4W[ʳDdS} {s[w@Iy95o[߽7_c 9%>sf5;bYly;7cݫh-mSP2SݍiK Ut.Y}"/ʭVs&&jn{'-EӼ/k=&:}XifTئ5*_bdй/,Z^k |V>4R3m$,'C<ҹ{{黳)SBUgF :t}L%sf 5 DWZFFk 6lnb}3Q-XѽkQ2qgm߉Z'7HɵIs0T\tsֹg~#bc6i2zM8l"b}sMSItB}2\X{֑dZkvm||]%ɛfwJ7&Sue ̖M$7#%ZwFГL|1wt^&xholvǖ7ÖqۢϹLeAF[:$f>k&Ͻg2C] A.[Ǚ\2o^;V%Bݜa&{sUͩlCZ# [1rNvD-Tpǯurw57t Yo.c5-Ou6 [<1gG։Xߩ"2[;}k{IФŧ#4kLqu?GԬ>Y>+lAqsx帚i؎$rO66X1qԮ.['+\Z޻دa#Q)jh˹wpHYj';Wbl)S?ڜWhDi]L]L@9ɭ]޲*߽o)rF.L Y!IDm12WE'>6& yL'}9%Jb˖=M|x#ЮKio>IOZ!nJ>9ri4A>o]8d*jWL}+GXWݻh电 +zwv`O^"D1Z,Η㩯FQ$ۜ ]MX%k9WWh{9{]vE\Rw'5K1SOSӵ{ϩZZƵn[k0jW:;vedT_]-!zֶ :g#g i4j;$֝ -޵dyM=N+h vy9M#B}:-5Az#9"I XKBY34߶sW=Jw( 84IBBw<'?Zɖ.hgR;oZ?zxi9PnTE+ wq@N,3OV&UӗOͅ9k< w[{#<ǭuŸ4L4Z/ް-1?:;e4mi^1 6t/,?yݗ|SChҼwrKR-YR]ڬ#Mu$AJ:^n-Smz~Ar|<6)T Oq[$EO]Ķ6v?oY80YO{wQCzVr I$ԼXKrDǭ/dI麅zb'Ï ٬1*a7\HfX,ի{ ҃%j0K`fpOzbާ74e#9*js4yXéަ61ծv |YuԿ/ޝyn^v,R2j1S#DUUT$<˗<ޑBK$¨ ܚҵyOWܚ\4 X5D;Mwvd[q>;ltӏr$b쾃VRݚ3О1MD#g-m~kQqG?w?]b˓Jqnσ508^F0c9Ӈ\X\lpjs5qsk W:pPsŚh2q-M9}n ǚ"^hd!:ӣE8c׽s<`Mwk+ϚiuY]bxTm0`h">aMo0(]HSZXnf;Mm;`瞵dVc)}k!džV c UV/"ux;Wu,NZu/v{ds!^5ϪV5I^яP]jh7";Ed$*>_ḳx9=BKu%j/=ff\Ԋg/m-t]y}34$$,Y&++ԕmRp63Nզ,&lx ]m>W"3|Q԰xcRQȏ5:Pކ:>Fy/j=Oulc5)ʳ;?SrēI ZQ9!Vi;b k?hUzhhO5lژ@㨫{o'8+_37yeDJ'&zo|wn⻩$Z1VsՎM\DlCtor+W!:nC4"֩joT,V 2ܤbEg# SvzzI؎Sjw}k[jesFO묢o+h8w6m ڞiySy[.E жkwFr#)&zŤJs#uѧʍ: k:kiDl{^t: :W3 P X6n0=vQW%W୼7><ӭgḰYM{/ ZiZ+I|A+ɮ1m,|lp[)yFBG6lCVԶv+XVIe#gh,sּk7ea܉֒ O\?1\t\XU<ɭ] UI^]r3/wsY z}>)54>ddoc^.;?|QӝRwf_ZoXE8q=y?S^mΖD2xEۆKYmymkIuxgUU98ld7TٕlB]= )# >%aTtT :t]5gn^u̲aF[rC)oQFGK}_iFyQ5iɥP/n}MF*R=XŹ=5)])򣕻_OMQm:!Sl$.IVG 5ԢsFƙv@%-u`q*s+{Pȣ,{TRKDŽSڼlđ֝<-b1)$O& ٦%{aۖvZSc>NUܓFwW]sIr)sZs޵qFI5>*PiםAif"5irFrkWf J?t55=Tוȷ'I!;nkZ\;`ZD5/ݜFH9dyfbֽJTuf1 Gu yuf9Gz嚹2mP$f8az◙|?8<ʉT֝kjK_Z+d2\$y[wk73+ 55|)u+n UNz,v屚z=JJ0[v2kqH*śF㚖l1B@=>?J$$̸?1H~x5^RI{,1Hz;lcBcHGU\t٤5g2:K߭z,"IfWd M#]Ex|s]5r[ cjB"kI kϝC"4X;f?Oiv{f=j1bjΊB~5e[T̵ûY$wqb*6C"+pهmHgJ0:潸r){֨S zUCxG*sƯs=nFX\}dpk ꎘϹmcl?Z״Mv=ϔ;3rRF>fp}kZ|E!p4͕Vt:o9cpe:|OlkT56SLI3]t~g-Juʱ]n[qƶ|∌bq{_v?+Ui-IOXxSTnc]Xi,K2czEFv3tSR򭣉ͼ|F/5ws*}K ->օ-(}F Fh6DOK}ڊ÷Ⱦ2iVOf_ >lq i9dQfwn4M >]ovI9 vPj8 [{;L\ˢ2i#gu'5ϊۜoƵPĹ6exf=ɬzick L;)QszףP Qqޕ} "4"6:Ԡg%;jٶ8#XTi././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail3.jpglibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail3.jpg0000644000000000000000000017520210716136374032310 0ustar rootroot(ExifII*  (>?.i^0000070FUJIFILMHH7 ' 'J,X<+Kr0100_ < 1996:11:04 14:55:52P<<%(HH+KrDS-7JNeKKcLLcMLdMLdNMfNOdMKcLPePQcQOcSQhSPhQReRTeRPdRSeRRdTSfQTeTSgUVgVSjVTgTThQSgRRcSUgPQePReRRcSSeOScRSeOReSRfRRcPPbRRgOPfOLgNJdNNfMNcMNcPObQNhQPfQPdPPfPQeQSeSSeRUeTUhSTfTTfQVdWTgVWgTUfWVgUThWShUUecTfQTbSTeTSfTRfTTdTTeRVfRScPRbTUcSSfZRfRRfSPgMOcNNeNPcMNeQPeQPcQOeQOeRPfSRbPScRReTUgQTcURgSSdUUhVXiTXcVXeVVfUVgYWfXVeUVe3UcTSeUWgTUeUVaUVfVUgTUcUUdTScSRdUSeXRbSRbSQdNNcKPaOQeOPdPPcPRcQRdQPdRSdPQdTSdRVdSSdTUdVXcY7~TUdWXe[VhUWfXXfYXdXZeWYgXYePVhUTdVUaVTbVVdWUbUVbVTeTQdUVdUVbWUd_WfVSdTTeLNcNNcOSbORaPQbPUdSSeRRcSReSRcSTcSVeVVeUUdVVc_~4i~~[YjZYdYXeXXeY[eYXfZZeZYcXWeXXbXWfVVcVYdWWdXWbXYeXWdXVdXYeVYd^WgRTfXUfROcS@hDRmRQbQUdS2e-UnTUbWVfSWdVWdXXeYYgXff Tx~~(~a?~Vj[\f]Yg\[dZ]h]\eYZaYZdYZcZYeX[cZXeYYdYXeXWeXVcX[aYWaXZb]Wb7JsWWdPSf|z!V{vSTh\kR0hVvUUdUWcUVeYYe\YgY]g<^} }~R(v"zFOzX0|g]|^\f]]f]]g]Wc[]c[\b[YdZZdZ[cW\aY[cZ[d[YbZ[c[Zc\[de$c# xXWe *sy|"wxNHnvzy]yXXeXXdXXd[[gWZcaAx~}ڂvkszt2||~0g}{>\zd_p``g^Yd^]d^\c]Ze]^c]Zd^[e]Yc\[d\]dY\c[]aZZae*h&zXZhyxuzywx|"}u,ww{xZWdY[d][dZ\eW,"y{jvwvۺs5n) }-|`HNi~]^da_d_]d_[d^^d^_e^\c]_d]]b]^b^]d]\b]^em"j#&}zUYh {z uxvzux"uzxz#wz[$h/]o\\f]]dE~ ~~tvwwvwv@%tyUzz\'zf^|Z]f\[b_^b_]d`]c`ad``d__ca^eb`d`]c?+qy}+(rw ||vxwz vxuz3vzw~+r Eyvl]l\^c`(j vvwwvwwwucl* |}ey2ew@k}__c__baba`_c``b_`aaba^`a\`a\_d v~yz} }xyxyx"uxvv ywuxv|$vz4s_ch4hyx+AvLzwywvwwvvtvM t}}gdcdcbccb`dadcbae`b`caaac]bbFa{x&ty(yz{|wvuwyxtxvy"rx'wv(vz,&w{*$rx)-r|(Kuzl|wxxvxvxwvvlo})cmbb_debdbbcbbecaafhddbe5ak)dx~zy yzwyuzv|u|uw rx$ox#sw uy&)sz&"px(6t|1ye{wxvvvwwvwvHr*z~k~eedfedfebfeafhasildbci8j*|uy~yxxx vzvy$r{pzvzr|vzw{&sx%"oz"1rz*{|~yvvuvŔv~qK|~@7~z05|vvv|~~kghhjaigaiiahuc!ukhe$qyxw}!v{wztxyut| %pzyz szszyv!rx'rz2s |%yvv5oFLwHBw:*y&||z! ysw?vH}=whinimbhjai7a$!yzhlaFuyxt|z{wxvuvzr{uytzsz'm|vz"rw!@y |~|pwv6v).y~1CxipgͿow~sQw~@C|~V7rE~z~~!~Ckqil_lj`Zh)}{yqg wvw ||y| {|sy t}!szrzszrz'nz"szo|sz|otvwttdbeǿh_tv,vHz|}?mz{mlappaT'l1x39s$y~uzwyv~v vwz~tyvxtz!uz!rwryvz"sztxpvwwvied`b^uv3v"{ |s{npaqoa.)s(|z/#zs$v|s|x~w~w| yv z{s|#ty y|!p{nx tz)t}w|&y{rvyvvleb`b_vw2v7x z~bdmsc'wduzx{v{{|s{ w~ v|tz {|p|u{ rx pxzz y {|'&ptvyvvjgfddfzv[G{~D~ 9}|. yz6!n2tl$-t7'|yyt y| yz zzy} }~ }|szty w|%ux r}!n~vzx~vx',ozrwyvv]ullsvvuw3t>z+||}|~0}&|q*t"xztz v~v{ y|Xy~~~~!ty" oz wy$rw(oy)t} rz{~$w|%oxrvxvwwwwyy|wvv8v@}y0%}z z~7~yNyw(%{z w|w|v| w~LWv{\y~8{! v{'v|vztzr~%!tw t~ww#y|21rxpvty|}vtۆ||aaawvw8v>~z1|z { ||w|!,v{v|s}vztx r z}g$|z~}|!p|tzxx ry&!lxp{wz}~!rwozrvc{~ӁijdoѺorowwvav<{6Bw | |~"tw'v#pzv|)#uwvxv~x| yz~~ w|rx &y|v}#o|!5ow&v~ ~'m|'ozrwRyzt࿃uİgrn^jvvv?v%~|7<}z } ~ ~~1r}$t|r{1 u|w~vxv|y|[vy|}~)p~!pzry$v|o|&/lz=ww~~&pw+v{rv>y^\Ŷhf҆pۄt^LLz^nyr5vt,{~z |z'vzrzvwpw r| yxv{u|u{~ v~zxpyr|#tx#pz$%o|".lyy+w!Uly[M{"}~v@y˃jɉeoaea^ |~a|7}7ZrFYrCws4S~ |}~!y~#||&'|(+z}/*r~24|}tvk ~|O|D|P~|z ||zuu y|ux u| zz(vw%vx7yzuzyr}vz("o{ y{o|?z{|2U}3T~yzksrposlsvsz |z~}~ z#yzr}%n~"sy vx{~ y| v|'.Xy^{Tr}%vu;ylto1klsv~…~ s#n>&|~)z~HQyXYzFwrvwuFz|z~{ ~~y|!rzr|sx#sx$*wzx+#y~ w|V~J{|:y|$7}U{~\ztw0p.[w^v~tp;2v4{~BO{VP|CytwwvE2~Dx x ~{ ~ru| sz(ry yxy{ (y~wzC y yyQ%U}E|H"|)yKIsPGsMGrJpawvOyr~FhO.v;{-Fzeq}b{twwtamM|=z | | ~|"vy$||oyuv!oz#t{uyt~TMwIoy}{uH4uX[yOCsRJpHFr0 xt $||_U|}r@e?rwuyrpvXwsvxvmI|"z| ~ ~v!!s|{~z~w|~ {Fx~3e|6rvi&yv9_v[;v@LsUUsB0vt&w${|HRy}olmpuvuvwvt#z EwBbz | |%y~}~~~||w {~Kx~"/x'TzKTo5Rw"vWSv@GoSYoPPrDo,s<8u1Fz+rfsróvy~l]{}bynvpplourvv_tvwvt@Y~|"{FU}|~|z ~~w|Wt**t~v|~~gwy x'v*(r"Bu9?vHirHNs?>r0yzl/ojrslEnovvtvvwtD[|~ {JN~) | ~ *}|{YTtZ(v ~x,1r|& r| {~}~hvy"v yy'(y~-2w?DsTFr@)s&y~okEyR@vteGpmpvvstvvuEP~}|=L~~//x ,~$x{7,ucZzbUv>9w2{|o'-uy5o~~ |w y~Bv y&!y~0:sDFr;-sviS3yxDPtvey~^snromvkvvvvr>@{C}A|~} |9;p"yw~ |65}~H=|GXzZQyPbzN/y~( r|~ | zv 1{"t~3t:>v.t z|O|~ |2wb|~tviltTrrurlH=zFF|~ v~~,y4-r-v~ y~-z{| $|8L}|VX{W[z]m|~~ |~yx~8z[6w|F.yyz w }~zTs;|JretYyom̭jn@>y (y'8w~/.y=9r72|~ y~y)z.'| ~ |0|BU}YVy~~ | z'zH)tyz z x } | {"z~5({~Is3:~~"s{&zzJRyc~tw[vkv*>w+1w=1v/@osy z{~~} { ~ | |1yGF|~~~~} {%xz { | }~| |{.y.x9SzK>xz#y;D|G0{Ahy3>v*.u"u|y ~~}|~ y|  ~ ~ | } z |~~~| |# t r }}| ||~ |~ | y y |.t~wzy|z"+w/1sy~ z}~~~~}$z | z z | ~~ ~|~~}~~~yy|}|~ z | { | }y | { {zz#zv{~|~}}}~~~z| | ~ z y ~| ~ y~~~~} zy{ | ~ }~ } } | |~~ ~} || yw~}|~}~~~|x |z x z {z z{ {~~~|~ z| }~~~~~~ ~ }~ }|~} | | | {~}~~uz | | z{ x |z{z~~~~~~ yyz~~~}~~}}~~~} ~ } |~|}|x | | | zx x z zz |~~~~~~ w y{|~~~}}}}~|~{ | |}~|~~}x | ~ ~ z z ~ y {| ~ z~~~~} w~z}~~~~~~}}~~}~ | |}}|~$| } | { y | z z { zz| ~~~}~}~}~~~~~~}}~~~~| |}| }}|~}$ y | | { z { z y ~ { | {z     " ( #$&&&),)%,"%&$   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz! ?s׭}Z|QМis@_u1:_6z/3KޑBc(@⓿恋wt/|MOu4=\w@{GȠ:r(G֘)h x."Kށ hc 95 ܤ[2K!i뚽UN ZV:^FwvZ:Wk}19_3O(T=ZDi);2T*}k([gT(n-kŻ3I(qK&94CAҘ\\wbށ6&j C1s'מhds4c&sȥ?l=hbh C1Z!qAqȠwz〟P(ސj4`)jXJmDDޮF5Sv)ŌU?7_z5jJBwAiOj&=irN:5ֲG]9U\5Z6izO5e̮HRՈ(ALP8{f .-CVM. #0\s=j%%v\"[A#gZ{k.aab{s_5iZ'I{8Em̋D1 4ԞMm>^?+i^ƮrҴ.gOnݒF?:7^iJ.I*4 sW#e,,?ӯWiP᫄OX<}ӫg804(@bi6Lց ޡnvLw.=ip:0E'ZC1EP!1Kސ\;Qz怽>OZE0{{S@ O^iI.P}I!IQb32Q EPl" )-ί/#9\=~{4h=Jk7ZՒ@3cr֩#HG֖[&]̧-f^hđx0>f*Dz^Nrwă: ^=Ji~+ѹcb(-  %ngOx/^ܹjoXEܖ q@tj1Ҕ5; G}a`5ν,#3kZ91=:Qqqhǭ 0i>zw'IE]fնJcV/N_e\Ej Onۦ?|;*oTvfK].hP, ~&$i$vw=Yp4݌D95;, ;-Y@bAER`mZxy\/rG5iZĶi]B4cKncs{ɠ$]ZMC>kJuM2gMTZ!\[7S-?^ OIm\+2m֔/׬8=~"icG4p}jy~zԑ?H4LB^haq&_zA~4bސ iOp4i֐؄zW?{?;wW?ŎSngڸ10r;H^gR++1Ͻ~5'!˨H#6[U{$sξ[ki$՘,{fecYL|ŗ޻K1'|Xcb.2@hE"͓__AnqYWo}]\3nB+⺒ ;N|=DMMsSm_mgE98Jg6(O7!!){{_E{3Ϭ5>ԸLqph9J.8b޴s@=ri2m VMIw:9-dk))*ɏ/e?qOOx8M{8z\L֏ JO^w.NOk5Js,>+}rr$՘VUD,Tdk6JL&[mHdu{gMO77ͭkf>nv,kt8l?7u `/yFHz?ZA:6[N;bqO9<MrÎfI?2k3R9GrkQ'cz8eZͶhȳ^.occ- -UvI?ΟImBdbMRйп5CRή3՗e^O?t9篯־6zy5pюk9 9L74#n?SFHGpiXuF84 {hǽ  \R6Gz`>c0 P3H h=Dǭ-ynA1g?Z..nYag?)= Kk+m xGTVBÝzE{yr7zWIW4n&Juq/ľ\3j}s]qih~0J۩EQ7' Jaqh9Z&7QLBi -@\J4pQG4}Z see|ޤ9y.Ǿ;WcV)'`ȉx'<7IlW/&k=C޲u|߻kn:PJd c:j;v/IK r1oq[S6TRԯ~NxRJ lEvMpyOOS3D2 36Iwmi!'zWviU0E'Kq*m Y[P|<֭%£tjG{ewU;2q]*if4zք5X܈gFv\MS]N;[)x9KD_]_/<-+o=$gΚ.ց&~{/ 3`k;yFy-:%y=M(g=f?V5M 0OPV%ݻ5;iD.zBBj!>7(m##hMj !ݜ鐖~zss;ׇƧދ-?o|Fŷ!d=.]hT'H'\dZT-gNK]̋CZ͔q"0951gBywQz0HsX.{+ֽc(BDD%^\jy,o}{u6XZ"4L^c(p.&5V9M pob*n&vpޣ+MqNuQ>TgZ qJ+N@Ҋq@\;ߚ y4ZZtiϼZٵyjpĂf=En2szNRw򑱕N3U|Ern6ԷcWq$( ȿkwrSb:SΓ/Qnт 91W}j 71d0 JKapzA/ZkQuMQ>[m}R=I rwjFf攙W*\黷j#J 'z{ְ&,zd,`GJr|[4߱)S52jrEKunc涧UGይ6%#ִMu$ZqT42c<+Kxdorv^(Ǚg!Z[jzvy?ִ58>n8\.>|i*ӗ*՘ ig %98Rfc m#)yZ}y<^,t=TkWfw> obzWޕ7Mc47!VP7g4Pҕf]åݤS!_\|YGeg4羒_~Κ_Jg~?Zt+ j ]FSknZۜ<큌sY'ܬAwj/WL;9t?mnJbw|̣%~lո?MSZ('MK #jJ&Eii,w"}hچ$kghy.=sv{,%;?U|%hjD)ZW*5Wx"5]XQIO5LJĺw6; ;/9޹Χ仸x\pԫͩ8Yռ3@!סyXc vrq`<{O֘=M=@Bhڴ0=(J0h0i0}hHRV+}JqRW1}P7VqIf:'\I>3i\πq]bW=2خO??x9@O&)MlfN :5_ ^Y)9"[ jpC&9ݸW}&Z- \Vkd3 'As.c\=jꂰ>]|n9 p\u4큖`YIeizҡT<6{\wo%K0jƟes{>Hiri#U-V1M/޾-[[y%ܿ&&Yx*ۛs-½ZF|>W9%=Y1V )3Hȣ94s@E>m+@@(Ri>Ɵn~_=9S|3#jnlY&m( +Q_%EJ( gde1{t{:'Q=dZُiv̯):gX2ۙ~5Zh ,oj|zwϭwX}64,xUi;tSaz+s@c\Q:miO0DKzDp[lrk 9BO޵A&mUjiq13{[pߐ0{7ŽN##{דq|$ԍބpϭqN mF^6EY FwuO/Ӯ҆?rƫ["_n-ksULKШޑ7Z{3A++7U8vgsVA\rDZKv=6P@x5W Ӈ$O杬P_I#ǒ٨#[,A'eW74Gm=juiJɄN OaK,c*ɾ1ޕqϑFy5rrCJr ZDb+c &n:$vR_Mio]njS|G_S^.kXyppe,e9.8>ϬG_aQR~y5d&l'>=idQ P1 cj/m/Noiv5? 2GsFE>+R=1ݎNoC:UFoB{mh^'/[nt=/TZ&U8&BYܹ5xގ,3<.#"zx 9JǹKQơb}M}(澤'.(4cG@}k~0+9sbjrAzQ3umJuӅk,Zln-{^mIM3ix]I.[ TMؼXwmP >XAhQ[e,ۤj>e$/yRz!V*>a;SsW}ǼүAnai\X?R0H+6%*TT?3Y9oZHVZ/Y Sis4Z×Q=F2q+ ?δ%(pޣi|wϖE[Mۈ=[, ~8;3cSj sZEI~iU-l=k9j!o_*-IlL4|ۺՋkI._FҳڄEԮݷz8۠!+amПS럭uSF#SK(ťMg,O3n=W٫_%4#R߇zZIqوfOv'J}MDTiDbdLWsmDS58}Rx(zCswjpsp9ZȸtHI1of7|#͸!d f\њy;) ͙w|]q=+*ǍnyE'˟)Ǜd9ɵb@|az's .I ;R>* !eNF{L|ӳ}\L7xݜךa^yY^:A?W'9J=n$T ހ<l}jnm%I)*8zь^SyS^m=CfyD{Wyj8:޹]#Hxi?ƻa-"8zבiSQʦH0;fqGY_$jOmCv~5)o79M|f1}.PgFP6|?y4]HI8bi], #֬]$qPb(v8˂wsViY7;I9*yPeNPڪD+ˠ%vF$q;9aAziƙK "cnnj2nޖݮt'Ңr4VFli?G̊:ڷ"dzsos(1ip+b;޼֖hm">r}Nkhk1m'#}U$u5umiל6yɏq=y\ujTsKc #@]pΟR+~im(>u>iZBNzX<,"I5qNuz<E7,;zM}ZEGy6;uq1֔ ǎM 9gf/KWK:w'z#d[&6O;k_EfP2zhN,´SZ몃۽Tcs#ϭ}=G)RSq (%KV' ߾k5cYTKzbyhzQ|j9QW LO3!Z;.aO[BOV<1Zz-}P^B~Ozq"\Pf\38ǧW v}k42CH0WOlK3Sc?`&N1U%t@W#?fzVܔ彺NɪM0,ۖ1{mu'W>Kg^Ż[.9SeA>Qd|θg3*aE wNSW6A2ӷLhY;\Md;.E<9A{dտ,ElHs\29=NkY NϞK\]4ZB?֧qqK>eT~̞šljw %_4N=95GjΩ2`RfgZAII +Ion Kts㟺2{C |姛S)pXz<[۟3XI_|U%:}etQ4Kې CoXDw>j>'MV܇ GIc9vα34 =֨nݶ;W}Kq^K8's\걧\zZ^ h? Ff1'Zf?xtc3_ޝGPXh!iA?^s}=f[{cx༐yY,3OzW[ܷW'\qpϭ_OԖi! zֶ.I(^lϭ]?P?bf[޵<&W?dy}>L("e5W [^LV7.9T9>5HOTy kdlsֽp3Sos]NKkFe\/թ4e8]3ڛvqL]+2S<:wk1 \L]O9y:ĺlYc!ioIݸC0gKmKmf2OzG1jq>zSԺMUפvm Oovnd+O?Z39!K޹]se^>f4Yϕ ߿Yd%df,IZ6Oo%=&neۿӚ%f:b ֥'s`lR/=U0R2+n*y/N뚷2Ý<=Enk'rY$X 5]s+1 t+5MgxS{l*>Wd4d{93(=j^.>h^Fm?,[\ }Oz $&p v_W?z9'iud6'ZKzN>E<A#`(@Fh#g֧_<|Riz.}i}IIS \ -[yK II ;ѹ y-bd]q:FW&l4\2Dm;JL!- ^n $lG֔c2|`q=\z }y Ak^"TǛQfPk'⎿\\OgKoLϮ͕--= `Y0Ovozęq0dqv0,JC@Ÿ rij^t.~Wny_K6z+|e?0F<ҖVym]Yy'5\CBȋW5F{PC&&yR'!x|ĞyMpk-ryɺE=[ְ.6kzW&%\fLɖSڡxrV\ir&e62O0ǴɒmG .Xz[^9p~bjT Yo!fiIr>e;y,qV-HKdZeOJaIJ$_3:sVFs=Ń es)esK$ҲMgfdfG9I@ʊi8 UE朤6QFw* ;Uk9%h!\HIW{w8!4GHMrB'; _k}[p<^v":rF(R3־2W 03ޟ$os74H1_5ߩf7D|é>R('Up8>oW-^q!*ʰ4ԪQĻP<ԑۈrF?^0bWlgYw蠼'W-Zb]Sңg$o^Ҳ$$HƘc#G#SL3<ozwk⥻1\?ְs6닌4sՏqZp9dc?ofn}s!5D4n (,)AҴQ/?Gr04k{ '?9>ʇM| 쵞iMEf0ns-T?Vc dW^st}Pڭz!z Vĺ<_RJ'<;akpI0^?ZƧM;wps\oIυ>t.m?KtRiyͫq&j䪱MH e#s*ccޭ2dPB溯y[R9gxW}&6.E>Y/l\8?y-S4ˤ,RTl~sS<@7hˌ>mFgipi XgIo޳ev%`۞U%I=Us'u}V` ["8^[ 9h |uwJkzJ{8L`.-s~D[=L 1Ȅ=P =*-A3[ԩjQ/bjݴ^fϛ5}.Y~ !fFaⰻ,(Hw?j{ S;?-)H.5A) ?{l4LF)5\SM] ϋ'ޙ2ﻁ}i?e[3Є'?U:\}Ǘn>tvi#Ux~Q̝2sy4_\Ąs֔qnЩAoH66 Ҭ&M߿vS`cᯎZE`@=Yv)ַ,zඥ$g]^w}XOQ?|xuϽ_4{d&t{~5rsپB'֏}]7tj>e0$5̲nf'$5%<ėrw&XmYH&ٞj{E{8Y1oU#޲~v{Vb"Svi3F_Q(m9pO5WZmaBOո5!XGOY֩6r8t7s-\!ƺӴ߳ēv{:Еʞ_ޒr;9}~lkj7O9sw&5QN㻮H,J2~'ie*#闦,s$-i\7dbpE1ݤF s)_ OyFI6=:q&uE sp-w>][M6AǠًY[@YuXY*SÑd-.n| OҸth)_ib hӤ/oU~#IOacm>o_JM]Pd5lH沬nd)=XF"g V9j kHeu߀#֪F.O_ia#HᰒYO0l<ҝj9rIon?ZR~|娯vjXu$rȟsEˆsɶc)~n޽IX<}3ho@l79豹?l>5zR9' 6 )HvGf3#֞əK7Yr{9Kdu]/7G6@ OL>ٵ+襂# YNi4GkobFUڈFx?b˪H~0#$Hxj&U^7}oO7'֩SG]7ZQvfnz䉛hu_ګJZOzkeXVG.*)6 # 毨f}7۵'Vx/\I`Zfidxc3aA>i~"ϩ]iB [8$ bI߹zVO|Ssa۵ dnd9Tn.kb3X_ [H- \yq5>m $ɱ>f#SKkL3$ѓ뛱Y=RZvnbmŽIL\ ،1=ԛ\y a3kԧy6-xGb=j%b AִvP1aZ"kqԲOiT`D ۸?Zv_QXg?SS+Yq s8 ee ^Hq֪my;Av=jҶ#rRMsl-T7!=S+6y~zX]?{ӭ" #4@?u&\vQ65r/A usjٝ&2́Ar{vs>c-i;ך3,7m!?P3))7^e77Ct-fW>S]tϛX۟UX71䄍EWYa;TLokRZ/̞^Hk] O9 b}?7^h}Uj6O*V_s5^KCFP:r(wDn~|ns֓އ!cϟƵ\s]Osч}gQb8Ub5EdQ:bq_QA@{FIME?nLnTI5V ٣ƍyi(gc\ͶN%*$AhGx?P+DL6zYPr1my4(K"9 3 c0h˟=zRF!y#5S>Z J䔮ܼjfi!XVt<6TB#,e1>- Jgh^d7DeOsLu# L$ojٽ3ᶶIIVae[]tW)gisv֧hͫ **\{M'6ԩOm-iPjvW+z{TdKr?O3QVlΊIŶ;FI_Ni"?֤I1GfZU籤"h"Nx{UB) mfe kW2"8_Os[K{fGoGvtCk?ޣS,VZK÷Jԛ@x_$ z^^}x`ݤ~W]g~j駭Q_X"X[+pIZB漰ǰM3$S3ZKzӟze햓uq H<43$5\i~G#I2qγѭﭮc`7MJ:ck+Ss~qt-%BC"^>i6ڇ$Qdf^(GxuEEb98Iֵ9[Ebr?ϭ2\=C:Ͷ/[om{8f<y# DGrk;-34ƒmv4172JyAI`;:zƱ,w$DI!gV nK~п[>̫Ck{޹5hs[ƺWIsv[wמR!,6_jEY>c'D=֕Y% W\jI ޹\zjW*N*;˺AO_iԫܽm"j) XuvIcާ[܇lѼEX :/vȻ݁r}e\4ѳrGL曾HUr|h2*:ͽ:uAeʈFI.{kjzw纕Y*Fɏ?tr}eq"{HLL|WP l*|ǹLʾcN=M!F Cߍs}LU(8wyD1_kdևUi5!C՟_T+-kd_u;~f'zqki2YdsߟkCl. _6y6ngjOGHjnz`- r~ؒ˩kٵK2xhJa0g9\VϚ(Fm\sQt<͙9Z{vIB'Q4֚i1/G<;UI,gIls̡bQUm``=U*g 4הJ7c3ޥjFc(I/:nzӹe tMN#Zo̢3ץ|;&d~\v8_vIOtXvź IP 3 IIݝOϟ]v<2Imɟ{%noKawW%>$b֛vՐ".1Nf#;?Z鄍!Z涐 O <ǧ_ޗPlE,db}]̹SS4C05D+ksg؜ޓ&ZzFӊKc&hI|==#w.x64oGׅZL]BΥmĞk[VqMes$15Jkpݿ:^9v*]/mΥ6uNxzno"lu-COP!X9|5(lNM}j4?j˓*||M*Hn;kFl)"@GH7>WJR4|t sD!c@aN{f"AqzCo ;=ļ"_j z~Nz'"d^[8w_?ζ,LE[f%b`Lp0ةzL((_#bJM9F{ SصbFj?ִ 4Gjې%"pK|hٹNY@[^Xzm h0w>nԖ!<2xHF7#ĆܳE&Hqǽ]U@ 3S-5(.c/=}?٦ P~AY+2ve w,{?|;m`]3:m<˂30~_Zu*\,dUraZCO{HN:ŮiNLifT[ƜOW{m3I}*{@Wl)5~ƶN/%giL^SkWɡhիv6l˩<,<s||# j!UP6<1[o.Ȅ|VO)5-Qקz2d~ Ȗnrs;WZ߾i$wf4uRgRuyɿh[yV+G{=K6N6;cǞnٗIls4_+O4gzᡬABrizu>=Aa*KAy~LV#jkRr[:MRM=~\w _rj}yF6Z5|'7z;;}>J2Ϟʭ6=pC㗈$/T,:MA/_I`u?%UA`aՔ5o".{^c(굙B~&gCC%e_ҜGu PoVh~Q6%u=ג Co\ʯ.Kyl0L٭7]۬WvYM}e")?~>i3Dsjz>M̂>R&B<'ijs^(YT^yD{WT%sKQ 6sZwZшm3ZoำPXobyY&f^Zlx?VIXsTPǹz̢O0QLJgp~5%+2_]J$ NOR3Mr/5 !-Oj|" U=MHXzOQlWE4>a[xck~;3ύ)e]nT|CyvM`cִ0])&?3dj&ФIy*d7"cIktQ |?3vdVUIrS?.;_6o0fݒq֦r=$zngdhQ]i$yށ~<GyoI-K7T/zDجdcQؠ;wQ&D7Ws5Nc>~H~z׽8j;uuhw7sҺйU<)t:c6rA"l:W4 mԧVg+hڙF/ڱol\xO6L}uˣVЧ]"=KLmn\y\}jX|!ۀr:K#NKjǦo0cl!zжm-,r%;/V[k4Cz(صm4Vrjݔ5ZYEY~>=,RM4FB6?sN+FI|}:ڟ I ~z?x$0׹xGTum1ELO5D১4\viv.eU.yPu3ؤx2tMONk9O = 9}zSFuR{8P2,z>[\K_~ f6ӟ㋎y'Yܓȷqޭ#.ArygYKYI8~{Mu=9Bwy|㩢Zsp@==i$ 3'- i˅N.zӴY<0}?CYcb Qٴ rN:[F$cp^K{fyxQ8\d΂͌]*n"s-l3ry;X|-A;$$O3]/7yw)ofvfmKo_}ȘU}htg?3߻CMvyȝݑ|FŞ@D+QU|xQRӖ6BGT.ދڗm9v?Z\߫ 8s H:,z?Z9tkk:BnƒUf̖@%[֦Փ&籐qR1g$kխuJtK1ȣ9+U..CkKf$NSʠfUjq$-p:o)oWư&8RRz3-mS1BMYtkWk+gIxKWǕ>{g%|f _Sz?سA,+wCazydIV$'{:.rM7iBmoZn^sI4|Hhڇ}E,?\?? Ň-OL𽔍}\c,w=jI>j{LUZ{']\$WVe`sֵ5>y4#jzi܋O׵ -S"tb?gmƓW|ɼVț7!qΘ21iBzٓ82Ay[\ky+BV WFQ:k^' =7 zM \Bך5W'[hl=NqURIOWҪ ;-fF×9cR_0=\oL7li-zOQis>ı%hc,$y5R2sYK ;pI )I g<wqԫH8OZ, Fޡ9%a$~IԪIXQ "RGz};O1FŲ Ђ;>|b`3ZUc)yqs=EO&$l~Fڪ}rjc/j_m-.S]\m=<7sKs@s9Gwur[YnkZ=hNv[nKD"OַbF֕OdV:Tnr:7{}wMOǪ[Ik-㹥ͮ㖛mn&M#vk4k2]6^mmw=i_\\Q+c`չ<=ML|Tá&+K#q ou־2AI,)L\dg=yg9{Ҟ47YWPorY;^~]xsY%oi#9Ahșz-xᶑ NiҖxڬ@\yEдD`1iZ5nHI>3i ei@Ȓlvy{w1!%#W8Z.H>(W肬-IFvIԿX2qsS-`|sM|Z:@*1σ4yEhsLB`h2g;}s\/y 9O&G_>h-4m"&8V;4xR.<칟RΟsj+swonZ{4\+4{@4b5hLWjйG;K"I$beTcn1!S#pM*GR̈́\B[GdkiW$rH/}j&[>Vԟ+-y޵j ,6|WkFD|d,Zw^=] 'sU7 S!'BOjz wNű9+kGѼJnb,jsGP8?b4tیaz|>"fO_khZȰ!f8IjoLCFFgC5"dl}+?fLZ]yjǣ碌MDѤ4gmkNw~T/[dp^k#ZX_ĺաU]v^sB4>௅I+~r5e|BտşxqQVͮyݙ׸tԿ*R ?֊-E.R&}b4>;_0cQK[Ec,TB~, Rqz.GQrPˬXĎr3\Emw6wWmIz=k /FKy+ _ 'M;6'yGjzOXO%Ʃ=S7w+o[s;IkGͶ(iP1hE[&Y{h|G.lM X%Y74nkX*]%6$?1䂫HQ9=ѣwQ%dQ1*ȲV]p:Km\ŽjqM"0]tzc}һ$5kOLCI%3psTDCdzU\QYC]SBoq }GƯ[yVmI;% wg(W\TsfyOWz&  dw.r͒=Qxȧp9&Rqz[. 0fcs[>2j%bi9aӯ-kܲMǒhPXkcqM$%}s,৚5?'oc^0|xҩ{jU5>+F:PVO1eSs>iZn[p@{5CD]MKI?yG3ŞGTysT8"Tw6flt6Q}I6p<ی޲|;>~Hz{ص'}3YmK] A+a~xib(y")*bW5)سND/u; 6m'ӞN_i[Uyuabï=OMV&N~Q}+̾5}o$ӭN;UBeIIoRF'?ڳao96I˝|j9*۞R?/[类uVcco"x7,zbsp/-1eY㶍~r#ˎ8wֽ?"1$@Xq[4o xv)aIJS匃J9Y +jeŽsnL)RMޱķIS֋s9,y}>(ėw8/Ү{ RY|Ixi.dR3ʫ1'ˆx~ᴝM1fVgbNI1R#ǿh? [x?r=8ۨeݨY {X- [n#0ϗzP9IW/rN2j0;mbsWb%ëFenHX@?^1[Q\I#yTx!#4|gm\Q=O 40Rt.+Doƥ&%IIR)OQ6Yg=W{Lb=>ZcM*7\2EO dopJ ,Cm~{ݱ~Ujjɢ6+_ohtA%&$EO&-ےq߅]GS2|TQ|X?)la~7/O?jx𖸊:Z6>=ʞYSXjzVm?iYƧ>椞Au Ow&; ,'kBT9 KTm]Ba`y$U}{HmzU ګ叽xo.O|AdSkkyϿgO͚To WKX-;~QR]ksj:'269;W.Nf[|M%՚Ѣ)17;׽.K/[[d qaEH6XdzQ/C0OZa/dK:<]?dOϬxSZz*< yڪ3={G-uƺY hc[.ޭ-ʺ(uO1KKF4ivʥ$O;w')-5KsnL;ݏֳ(|r?ǧּĈ3޲m̳k8%7SEڂn>%fHo;q۴6};LtjXUݹ9S-k$7'#S]bM/To%[ӭF"('ܟMq犦VA'ө[4Iə&`_rO}kƖB//X%=ڮjT;KUKLݚiYfwcv9$N؞[1]woV}A RidPk *?+Q--xL5eՙ#:çڈ1̟|u5y*GҔQ3ui+2FG?^)i&DS^3hSV56ܸ-O*w)+~5=.3?4yc#Y_2|Bd|ɬ%-YRo>I]Ks{ì5(zk_OHmWoyG[gR^(T6nk'F 'Trя\S)K]ͯfru&ļq_Z_ ZKyC,ɺg#v'65::n|OLBIocn!;FPV|9I+vIRm\w#~%[4Qy5VuQZ"Lj35"T.qO?-1n?#^i{AIJIɑJW([>%3=M\P/25E=J4[x[Dpc_Q e| uk:%̱ݵpM[VR=pk)~&xZI-洼G94{by:+hWËCX'Iɬ5VסZ5y ةN?k,׮Zc=̎k ~5ގG ֚G4?PԱsh6ij.)f852ԨyԬ .휶H#+!'#5%Ln}*Ɏ[hyJ'rXn@Y0=ɨ&|;Ggn۹~(ȶ>`/JxzI^dQY#E8j2)]xD.&L[-KEob\a١Z_E敝c\+n5݈ Ζ!@n{>M6z{glz^٦hեHY|nV51vw;'H5lnMl%QnceA;/ZV: 0M){wǔNB{һgT[QCWw kwfJ!?\e;ۖUC,1g.&lhFs4f҉Bm&>N_WifsԹ^촟Rާ3O9fa]F-{yG7Z$H|]?zMa;Py ,R2P\ï|<YҬm! Ք~g-E?;RYG(\OŤ͟,1rezl;G+ T%qaxk #[yD@k;yoZxkO5?ڡo e}Mrwĭ2S5,@skm9Lrze8m=^8>|p/7?5χ=Յk{jv3`Гۭ_-s+|Y|`>gֽMfi2k>jNTҴԵi%4 / >%ҼgiΙm}&ȩ#]}N|gW]ɢ+ou?ou}vg:dƛw'DO ?TycQB|b<]0|{:KsA~%J@y}zS71fy䘓Lq% ҏ*i*L6cu2M JeU_ᖳai (o/g yoL_Ŀ xKFewp9%fRNGXhQYIԄI֔F$QO+P#0iby`?||:q:=D&ѯ}_(*)ؽ/?̤]B'QDQ.QpM0܆_Q>ZZpMN3 S94t|}heP9ߏlN71zf%`ufZwYLciuRWsB%D>4e!q?G"F,nV+J-z!z9Y_b|MN=JrO/zAOz^sVtG"!&aO}k]c:~l=1rе '}*m,7>X~.s,vVHnyp͍W{ t-K_&mZ1? yI~(SADMjnyo_x_sI~Eq^.֛Y nyU'cǼJKbFvG"s;e5BQm IO&袵qsT?oQIm4nl,c\RVn/Su+dD]\uk> \?EP'Li5;|C7C}oKòLFo~ο Ͷww|?DI+$rLher=ڹ? L>(=^Nf7&TgѮ4 Jɨ}̒gkq"[m&֘Gqt9`OOºyw2c̱,MljwCJqhO9繯vKHYm(:G8޼sIs^MmoWWLz-4?m9U)> uyGj당7۪)bF E1+e:[F/3֪eBCl={uQ#\HrOzriYoØ6Ԁ1}u4DRkAEqϔ? 9ѫdE; e&ɻßS49iOxZ#STmcOmFR|Ð5ron}lć9s\ӣ#/C:r) gniH=y\񁊈2 cOv\%u 6_Z[Ks3g=+5;5dɄ<B:2%qFķz6%-y 1Ԛ62H.9OZRhevi$795 Z7w-Ԃ#Jjj.i6|z ר7m~ɪW>ZɞVd~nqG~~b4A!'%&kM`7GtN8.ƞ,cF<b >)[x>nMpqOk±.:Tjhls ,M=G[5%kWဍG?&maq\m4,|CvFf%'>eG 2$?>CIs;t+-Ob{eSZU嵴m=՟ۧ'pFm.gN"Kj)Sqz2Y7u,\14QHH|it/L?9?wLG@x-?Zq)Rw*K˝)_gjwno}yqCSI2 %H8<mbKYYE*X+e˨>&Ӵeg5<3^;k&C٨s_*څ_$pmP~^Ub۹[sn졯Ah7+w5X?ǯ5{ecZg6ܾqZS3:usNy6]1G]ds=l2ۿ$4q%%wջΫ{~73Ф~#h4X#^p}ji9h/#ddE+lhȾ7-QXq$u}i/uT3R¨ 4aae;<-XKiqd8EjcNSˌ,Cf~!u7M u{;/ kEvtjK^|X9zw]uvn-}h D[##|\/ʟN^RieUSBĦ/'sZBW_ⲎLEWMЮ'fG)֛k9kbG8czDųC;_;7޹nqUWZSMV2uڣx`~_hӦ}`65{v۔ %}zgOo6kC:Aď^m?^|RɞR|?4dmZׅ`ozo>m-ˁ9\<[c_A!qPj:,i}һ7rsY[qڑTkY,岹 O0}X}M<Β8BV9yft" _Ơƻ~aS%mF6~&D;VMgt̹{$xrI"{1JkE/} O)Ycs52kXK ɰ춧eoxA"-,_ַJ:k- nD-Åvfk`mng~y-NN۝7|_x&Of)&W-bASVK9ռqa';({j]z']M ΣsӵKk=>ytK#ݫʝll󟎖O'|lr.%汄uIO S=k3)5t[ngo&[oz=ɸo;,ffO]:٤唵l֤E[O+ZH?';{!}ֵiS; Mv0u-V\E]5WT0-O>E?ʣsF^N{ּ)sc.)14Ծћt:XGe(y-`Zj]ޣ}wX p_ `¹2rI=Sk#BW9^I/֫h\EB$וc-ٌ@ݞ9>Qx3iE' $'iZE.Ԯ`ֈoSM~=6(  {!}-n.k6O.׫SD–Л!& [-QIcwɨ5'ԯE$/>u ܶ7z%sX0ySYW'k&l[rd1M$CeSz>q\ΡuKrݵx"qz_sn쓫>j3X~ŹI.>ަO)oJe9%u[Rtf['ӑܴ`ͻ'zHw32yOԡ)(͒5٤Q|Ju9eHn]hQEwφyЧBד=fA'[Gj a'_>F–TQ,R$g͓HԚ脬a~/Úet9.!mrd ~+xMYiq0OB=:N$A(Դqco8y>OtϽi i8#>ߞO֜\S6YH=S;>|jFk>5^6dKn5IMG|'4څVjמaawڭȶ<75|O@LIJCij(3Eoϻ|<}&!|Cq[}^YFe9ǗasBKX؏wHy=klϓ@cOvt);xz  $aKYV7KXNOc@J)A?P6U2$?( gUyCղaPOs>ʓer 3ant*2}QiW;{Fޫ?hI8 ok$ *b"@whZ]̮d]Ǘ,bfg޺ 4vZߍixtum~?Z&tWvûGpT=duM'5wvqk::I] J,U ^Ż>JG|5#kIb$R"OZu&Qi-2p#'t\@A=YIjZDXϪȸIDa1vb3]uӛ{;UcL֙&NᦜֺP|~Ҽy &aਖU%fI]TTeپS6 k!92GRn9:|vOĘ<)F|@IfI@ gos[Zmu;];VaW-D9Z⿆[ʹ2?:G⇅7vOo 'TG6CRxÍ6ϯּcM3ze]Io3?w^z&n}V]4r'byWO+B^;S=.i7f%6=bdCs>=|@g6V[RVѭf煓s۷0`9^z.2\i$o0խ󚗸j<< ?!=?5{g_]I4RցZwpy K5D%n(>?3;7 V&E%X3,'+9nVZ5۴y+'arFܷ~@b1&Xː@9QOV$dORZm.d=);TJ?:b[6չ4r,V^}Ģy`zY2U}MsԞo_~ ӇSY9A%>\leYGo> \8E\]ojpڝ+çB5%E"?SjM,ooAGEW6Y^,|fݚڛADF/jci?Tz &z\os47[e\IzkOJ\YEksI]ƫoo_s zu.GUZrfyͳ+U!ǯ\KHKr;J9?K[Vw}T'y\e+r3Ư՞á4{i.ȃ2zU^ډ)HP+?j8~6ȷBzW]K!;ܚ9E!Q{V׸7w:~Bs~}dR屁ZVUirH'21&e2,rjŵ\ $K4AO_J𖟷Yusz=ޤגHbjͷ-$Uݬ76J1zՈ)G̲ Y.Xfp[޺_JDSv짦~I$E|M\|̝9]BL@VpxFv cǽoLU :'i9"7iTs[^ x9Ɔ &w~aEh;ʬ~z)Jj&=#Y_|jkCx-*~Qcm+ Oȫ+Ԟ3V.L[mVf8!~s#zR^;hcX &do/pOPɡwvMG!rյQ٣3:||f%Kq$7'=N{y0w"dboaTkgy$5KsԷo4MiMܜ_ZC&kxDficڢy5kZS]|C{;r`K2g-eWf\=∟>$e7U ڀ?yu3Ar Zû?K+ISψp8nX}E0E!s5-gkׂ̎zԳWKK>I5i}f!ǧO%6l.Z(c\of|vm;DjRyi)A?ZهIjσ<$TLM)ng>,2UӶ( zTO8!T*9dGAXI3Ek͎!Ɏ39}ꍮe$MNr?Z-rwRӞK21758EL#ֵq3JZ19&->;X>y,뚚!ȗų>ɤq!Fu"2(ӷ0v=}d?Z"?/›ZtwRzNV7:naҴ飍^?qIڹrzK)q=4 j޴w ~ZOq&"tZHsf2l_Ԗ.FJ%d:ZRu 9I˨gE1Qj:rwP?DD;VySܥGl*G#s־Qy6U50g+gs{/QVVsz_xo|I~rcwwhצL"ӿh6mB׋m ~fv3NMJ] ֵI2NQV@P9?ƙcXaYؽ\V#[$DD8 dik]cMčϥ G]9m >r]4 c>m7My4m^s+?&\'KQ}kArLtywɎUGap_}ö 򧞭Zє'}λᦡxx҅¡x\"<- d\LU{Zg㋓XosG=u@L1 z{;Oo5_yńmyU1̇\$)skfOuC2DmĞ&ӹb_7ƯJ\ʖ8m_Ǿk+'~ГGk, yi9cri CӼGwli1ܟZ֟Mfl?tDZ=IZM+;k'{V>Iօi`Ju]vqj:ĩ 7Ibk~mom;y>$6d*۳sW2w+W`4]ϨܶěIWlFMPɉ$]GRMPݖ慕ݾum"%Q[r}5}<}񃚻E]V:V)t'䓏Q9ч_L3&;]D3;/rk03Q]2B3'͓ٛrEK[ψ"е[-,lŞtjMYY]IkIosך;gQo#Is4a6(uVыH]+i]F|g-];í[cw[om}Lk>F_?{)]8އҋ/{҈3TCSYꀭ,5]=1C K#z_Mya_I~R*- I%RZޱ5-j c溯^nI6^!u;+{8pd? ݅R}^D. Av05I+,$:Z!)=nζGύOjfg5Is^խ]Vxd![0k+f0w?TSo5sGi<"C,Lp`O5QnU⤶`yǽlk{Yj QGܣ:]$3Ʋf֮IߏST3VW fε ǘVs>8}!^}k6^X^Ƥ~᚛V IPK[968>Iɱx:!/1}W0;SzG,x+pFk+*ۚ'Y52O$΅ #` o0d3n|7=jJ܍ HS#V,3ǧִ.Kc&"sVv)I"ҥf6Wf#4Ze6|G4ROTZ bU=WSY)ݽis#Rm?7wSZGKt?.zynO^/ŅZY4H\Emէ}ɹpgo8]w~&&nNlĐ\}i3JM,Es[Vj5 qoG%>DDAj7ShWlE C-JX-ž[rG*(U]sRXqBkyȇ=H)CZ; Mشy+F>ij[ ̝d5t[K/Bp$v9>Z=%cjj~\bw 4=Mt>R^jI@٦}ێ5*u!wi,VP\0OaϹfO"eM{µUtY47{j>KL"A뛕-3kmF$H3l{֜$λ ޲S#575ᙙN߶".=q LTCޭMI["ymBt-$UJ/~7!> 2;sSk7J8AX)+֩Uf9M,z*DHsUNOg܁ӹXI#3U%I;i\lzM]gn 6KQzm ZQڴKԌ֜wʹY_0uNy2xtwl֤)sַ 3LR`,^Qb;vqۚ.2cRm@n,710v1k]xTi#v{j^lq:]n㾳<ݷVs&Wl.m$(q>{FMc%"wZO1mvO:lKoy٪mcVAw'eO=[y71Gh'z}jf% dhs&>A4͸s)Oe_ =7oW'Xn"x$~y''[3NT Qj3oZ|HĚEsHm YfkQt7ObϯzY|Gmxgw|(@'ֹymDi$f8^e1vlҽvVm4s Y>efϿz S%&r*MSʞyBL iT֡6F>z؊$Wiܜ;DӮr AWjMo5ֳR}*Sb&8„Tɯ?"ISM$vY6Ņ{zԷ:ܟjd}{ԮfgZKKMsjS\I`s2zz2̷y3_1yjvgkI4Plk22lj{v{mv9gzR? =ɩnb$Cx?DH9fM-Kg~2dgN§!=A<-!0X~j[A5,pODG]$R'$[K(e+o6}/9=he;G֗SLB{PcŸ3FC> mum)cIhbZ k; J Bq=yIM -$ eSIކVoRId`pN;**8#y`lIK#´I(OLf(1=i~nb[V݀Y~YnEU^^rH&^D= SC7Hw֗1тs#G=iǸ{4N_qށzdi#;iz֐b&@ hOƧ s-3Y|n~DyPO}aaVqǵWQkA }Kpv3r>M.z\I&W=櫒qHc4'2|yBqJzAyڜM&jg(c%ұ؀gRdeI搒9r28UrN{zw195NEdޞen94ZP~S@]͎B%'ZqO[>1ܔ94;JYy&SH&3gqPZUwnNido9bēִ$OL[iwn@ĤL5ece=+hrhqp TƳ$s#g95rbZ>% >-ց]/9 / 4`PPip4I׽?Z^ZlEJ\AH%}jxe)4H'`y|$n٘zιSHD{XE&w18#o֤(ՌR9u-]XSO=h' |?Z7Jڐ\`n)Ē8?wJ=Ab4H=F4)iNM)nM]igiAi zy4ΐ0 FlQ'|Ryčy{Uv9q=EQ,3ny11URO֩4d;՛N\'$J Ӻe@@iA8%G?΀<q֐a84׽!4 Oz_9RRRZSIH N) 1֬[G& [r?w!0=YzXPORQKܚZmgA'h#rF*!vա3rYA}~0bn} S14Ysޘ;==saK4؅}9{穠7KG9pr3Ly4{Ɓ撀P!}'4W1u@hɠKxrz.!v?»"~2I?.s(XLS*N}q! &3ɪ'dzZ׭':{џQ@ iI %_޾i;uj@!49I&& ҆$Hc·' J^Ƞ޴dQ瞴n'ڒ M0r}'U"é(".wV2V䏄uG$7ro|y4 w&{uMR P~1 914yC;Gzb _H5*sqsE%.h##֯uB>W +9+V0T`k͒iyɫ<ՈBh1@4ך?(IhaԌA.i$i ֓$Li0 A׊ xJui@z{"!9Hi&h'1y怿q:;zP(ZOsIh././@LongLink0000000000000000000000000000014500000000000011565 Lustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail4.jpglibmetadata-extractor-java-2.3.1/src/com/drew/metadata/exif/test/withUncompressedYCbCrThumbnail4.jpg0000644000000000000000000007167010716136374032315 0ustar rootrootJFIFHH(ExifII*  (>?. i^FUJIFILMHH7 ' 'J,X<+Kr0110   A < : : : : P<,<%(HH+KrDX-5 }~|}}|/}}\1}:+z%$y}}r/y~"z }y'{| }z|~07-0},} }|~}}} }"y}z~!|;{x7"{}#t{%3uz(y{"x} | } }|}~~|%|~-%~({|}~-|F$y y{$~y{}{R,}w+ ~}"'}1*)} }{ ~e |}~7z}z} ~{${}7w}w~%"x}u{ x{ | ?}}||}}}.}}M>~{${}~&Le%{|{8/r~.~8z},z&| {~1~ ~yN}~{~~}!4x}%{9{7'u{{{8|}(y{2Gtw#%y}{} M!l }w|}~{~~/}}K2{ {,|7v |"3M#|{%|y!|x+,zz1z!Lz{:}#"y} +x}*y*(yz1+v}8y$(zz<=vw98sy?x9)ww-7sw(+uy Nz{xy'xy9:t< q ~%qh{~||~3~}J6| { {8>zR{+(v~{&'y%y*4{} ?~|M>z9}|hrz}nW|q{quy~ 4{}zt{qFtZ_OnLGoJBmy0}}x}*Nvy&2s*'v~5$yt}"{|~|}8M/|*{)z>axmfp>+s9x2)v*$y+-x4|}-4{:|3,y34u>~~BJpxA8}PKmx |~~"8}K3}2ix?qw]Ry|VvF9t01z+-{1$|.|&~$|})({!/x6|/,v83t8~26~57u8q~&9{}~$%}*~%&}IPrspnKxsc2q26dZmr_IrQ&q)?nIm ~yZx&s$%l(-i--kN^n{y.w~|~2w1P3~  %$|}!(}$C}NKnkfmE2m14e3>cg8r]UtBQq7#l($mu~j~F&o)*m).l2-p&llq|C{.z}y6}n} +},,xz$}DNqPIxV6l69e8HgƊtYTp<-n;HmFpw}5}"~M%k'(o*t3,m$-l!wLQx.&m(s~.8ya3 | p| } } }z|K|qlmZOiD:p58cMlK|7FfO9m(0m>4kzz~0%k%'m2e@>j7jnt},~).o=.k8/0+-5k}} }}" {}~&| }  }S]mWnj{}obm76e5;f\{;7m:Eq2(j9cz67m>ml;[q22nWxAmnONt_qvtjxvt}/')m2;m62z!} ~ }    ~ )#$q_fm[_mtoyMp08tDYgltjx:9l:2i{XfzKjt1mil}>Qkn~amuuulz{}v}u{}rmnil}sk{lm{ {~4v|djpg\qixmur!Ov*gm?9j93i3+lOA|:fq3ofqwqq{T}fn{vy{~r~|qz{y|}{{{}}xx}S0{ z } }#}8n|eonvQqarnqw}|}}"yw$wb1}d_{dd|bb}a^}]a}ZYwVV}QP}HL{FBx!{w{y w3}lmz!~~}}" ~'"| &'(|)%|')|,+|,.|(|w}Aby${}%wq{ %#zy_cyabz`b{b\W\{WS{TJyIG|?Fy7{"!v{ wzwz}! |% |!#{)){)*{)+|%+{+%{(#z,~ay $~6!t yww-!u#zg{dd|aay_]|X[}XU|PHyFEx@,{&&{)#t zyxvw|~~}!!|%)|$${&!}',|*){$%~)${ )}u}q|4z(wwwt{|{fc}`b~]Y~YV|H-z##&}##}}tx ytzy}~}| }#$|#})!|&(}(|#%|*"|% |>hy~z}(+u!#w vwyzyzz~~}|}{}zvx(t*(w! wwz~~!#}# }#}#~!!{&,$}*{ \{}&2$u!"wwvzx{}{~}}}|"{wzzzz|z~~|||{!|"%}+%{"#|f}zwzywy{z}}~ ~5-v$!uuyyww{{}~~~}~ }"|&,|# ~$|DY t{ wxuxwwzx { | { { }~ PGw@9w*y!wvyzw}}{~~ |${"${%,|#"}#}{~C#I"#y wxwz}}y } ~ ~  } }2GzjhwR@t/.v(w twwuzw~~~|!"}}"&}% |")|N}G""v!xwx{{{zz   ~ ~{ 4yUcvSBv33w)-y'"w$$v!t tt z~"}~!~"|"}#%| !| |erC'm!"w!%y:/v x{yyz|{|} ~}vz,?xF:t:5w3;t41u0.v,'t yw ~~}}}!#~$'{}!|6d{u#wzz{{|{ www"t'1x4AsI@q99u=4t!| ""}"~!$|}}xP(U}}~~}|{aMlwQ}|{燁~~#w'0t6:t9:p4;t83w/ u"}|}|"|!| |{@#|("T^YJ+}}||}pm}d,|}~0&&u')&w+~}%*u/0t45q59s7.t(%r!!} ~ ~ |" | !~"3|jYtC&A%x")=4kNA}}|||un}hR|!~}$${+v)#E$y})&t++w/0t,+u%"w"~"~~!!'$~l~mlvWmHI{_4x{{{GBxxbtJj|.xnsz}}rlzsk}ii{\"{{}]rz,'qnK}lw}~{}vt|jj{VR}QN~}~}e}<}z_ r~}~ }~}~z_Vuiax9atD1q9Br^3ykKVo`r~~|xx}nA{^M}SS~x}u_KG !}}}~ryvyw.|:Br@8uIFn/$xGz}}t~^]ZP~VD~=N{B:yGp0]"zSyuk&}1|{ }UpwwLv|+~,:s5t02|gb~ce}Yc}MU~EN|L,~ahtT]v"}]!v,$y#$|%~NYrtxx~}"+|}pdqd|gY|Y`XI}NU|}d{ho&Td|prw;w6rwkqsx~ga~[T}Z\~PO~{IK{ }gjvn2x@)vCUZ~fh~`[}XZ|WYYT~~LN~Photoshop 3.08BIM ResolutionHH8BIM FX Global Lighting Angle8BIMFX Global Altitude8BIM Print Flags 8BIM Copyright Flag8BIM'Japanese Print Flags 8BIMColor Halftone SettingsH/fflff/ff2Z5-8BIMColor Transfer Settingsp8BIMGuides@@8BIM URL overrides8BIMSlicesm^DSC000^8BIMICC Untagged Flag8BIMLayer ID Generator Base8BIM New Windows ThumbnailFpTPn@*JFIFHHAdobed            Tp"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?j4Zn"mvH8CkS:w#D[kΘw%8駿kNFea،6>h{;9ZşFG7|~-JYԂX$m3gRˊVͧf{<6&u5ݻiKnBc׼ l?OI;6pLcxh_ ,&qg=fƐ2փ}ޥߡ}7fb csvONQqZɣWMmnn9ξ~=6Y EYBFK`=ݿM[zsQ_||_c[,y?pq-e>ONqO9u΀6Lo֬l<69w{}Gֵ8VG;,~); 4e37kupz{ْh;]Eu%ۘ\[7gәScRiqoZg歾7}y7QGKG0q} )_KVjIs_鴵asg=zCdfVG=}wMtX\6V?2!ώ8}jQ`''1)DY{%ֲ>mT2vivm ]^͟W0vigzﱹ iYefƽF\?EEYmguA{4bvK=Y~5 }+-ag;Aw}X]'y A˞dߚ4>kŅ<-/]:.jVe{_uk> kqcՎn%8fcv+/:CwʧݲaLj<^?9Fw^ç[gLkl!`kvٽ ?'ԡSͷoz'֬ޙ0MWV{ȯUuZz#fm펆:2/|Gud6* ѹ;jWW-*@C['EzXhsÏ[\'wojΔ0r0Zr,첆w},cD(FGcK{ t2O#+q~ ٝc1u6h7ϤMU'j{~SrP"oG#˭ǤK`'w\,;;ݤk+M"ںn0u`*iϤJ5HU4]iyqX:KˏT9U wumcsO_ ~@ٽ {^ߡUkc4{G;f)CS>;ZZ{!NmNKnAU'%m/qVAikش?諜6h򳲲ϴm5Lh CPÌ tnhƭ?;jwbQ,{ $_5R~ _moE8mz~_P_?f洖9%;7kLO翚,F8E3lv4ETo>tujoUW2 E&NA!;ojfYY4tu_\:]g{pn:C}]ݿoO63s0}7>m=rc fbaws#zٛ쏵dtˉkaX1]S\,#ZKV.V^#َF9n.("ƒg] sU,?L|e7 ӥn~h%qu n{=ꋺw;kvU/7"6tM&YX-nzTn^=c. xߑgԢbqq~($yV w0 fB\O?c֖`!i]nZk'.^Ǻ aV?-[vD @xtXX6mI] 4ö䲰CGD Tz%Oci l}k]}nn`ƍm#{,ޟ(rGN\6I}̶ٌLy}FMP]';^[M/X"Z[l~Z/{nּ:A{FӴs}j#,#ũn}cϱ:#UV9d0;q[9B}*ᐱ>`d9QՖoŋoV ._[p>WYV*o^?hnMTcRmi}%s,m>??S!+}0 "$lG>׏Qs,[`-p 7<\hI 3ZJ:NƬ׽Ç<ǽmөvȧ y({9ݩ-0= c}kqHw "7j;4߾ŶG<_CA3}ETgv>po77gSӘqݷI8T?Ǭ~O=Yr}ҍ}X_o=M? =>G5XZf~)Vz>z?ۿ3^PqOQ?اmwO=i__ooBǫ3?g~ϩ#gy:2Ot54L~oڿMn-+>r񴔌/[=#.w۾l6I~v\^^Ge>w>U~}ڸ_8BIM!Version compatibility infoUAdobe PhotoshopAdobe Photoshop 6.08BIM JPEG QualityAdobed        ^"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?$fZ!.oPBD?A9)HJJd֒yZ85 I!gZ.D$VnA UNEʰ $ +ZO~PW61osVkGܕ(t>t#wL8"[Q`Y>s?U݉s̛Z$ߢͭ(V~K˧C]ͧDwwT- O1i* o@:~fڪ'C.|cc w/5ʘC#>wOAC;!8֍d[ W=GksT'ӐZƸK;tI A맊gnP\cp/qH5;{ eh_D4 =Ik׺ A`hc}ԤJu2i&Z#ʦ5q9K#A g 4ڠH*ӱ $*cCLA ZF5PZP;k-hO}t9S}egu LG4(O2Gx E meDp#W]O V?M㥹l֋h}ϥ[=1Kz]OvO+'TP}JNsF!$uS)i%bBM#} &%$%CFѠ&ulQ]G-Vn@ f ZUeX }<&Ә4Ai>PcUΰN}H3ƈ0=|(skH;Gڛd"s08'R\^VY-kX ;=ͬA`/u+jAk6gfNܧhgP[ "8ȝщ|J(Ӄ?'$q᪜tU-s\tVsGJ$G7HG\II>܋kεw!o ,<L^{q~ҿ,k\g{K{UK^+I Ӳ 8N'e[f}L6XMhN@ЙHhvhPBýۑXM8-s7j!|e Nսkounցfx4:xVbyTۂ۲gW3ѹ 9Z/kD%PoAy yJ:Iw&zbg8i~LUl(i%Ӱ շ{>HZ@Bʼq$7E5pu{Ls間i,|sn)a+2ݡn6KVMBlb5;jfYh@h#/ۈv@$S9֐^ Sxd ~I5܂YskA$ZMsHdbtV@dcv7Ka٪vCx_3 z׊/ ǚ/[ZP7cugs|UpIC] D eX *&墠 _4{%J7!"l2ɚKvimd:hSwDh@|r4͌]8!>d}_w-?Bfm{EI8vc1 ԅymr>Z & isִI>#K\:|6G䴷LOŗ] &Z{%WnkC[YP@Gc][+/<^3q}MY_Ip4fM_J2Yss\]EڛuO;3N'ɋr]쇊t7ND ח=F#"*cۚ{*}}ĕm,qX6`x- z]=E dڝ}[RwZA9{2|?%*4-jX ?Ԇ3hr0C[KNs4+wkucXTݣ+ xOjMwv skYvͿ_XNÐ#~n>^\~.OM_i'_dn|¹{3xpFRua\r6+swT3isQ7٠;is{ʀ.D#(?ݨ:!M˘`p;C M[Bt$ Jl6{}g~ #/C#-s Hۣ@B 2-L[LbaVLΣyF8($A-D74VUF۰ ô Yj>GdHٳ$KU{~i=f#Ll;2-;>I&E)Bn>em dz h;oqN6=Վʨvưm{vX?eOvjwxRkF6,|?O⫿%ѯX?am;] 5vcNj9c75ǻgg,c`xA. hsA?}?uс0Q]]:Y9? g~dZ8 թInI8US3Y2\TzfTmUyR:Gd %$AS 1[f`On{9͎75hiu|{.pְ4LVE]KI*-)PQAm*}nihs[A>PP^A7Pgٮ!?S u ;5=}{ Gx# k}!j9rgq½RPjƦ 40L(uZq0K$;* ;] 1 8̏cz>C)o4OM ib9/mƫV5-c'Wbc="SvK^.xs3 n=4\yRo˯0$U:O yD#pOI}`w? 40$m1.[]].1f;> S 'H>pJQŋO2yZ_Qw4ĉ$]nEεKug=؎r+}MI#'1L>j-$ 5iG?d` yB(ydY% G;'5*>//fbr01wyv㢀1@j[>{So%y"I Ucdmx4J9/m-?=ȧ#N^Kj8 Z 1ˮ7zgTz۫fV.f-?F=Y@Ё#RŠ|R̿m=fbX\\%EqqsėU;u0Z{Ҭ7 y>SGCbcΒGf;|TJkh-xЃ;,jM9i*sF<d+`!p ߋf;u4\[Ux? G=Թ-4<*6bo "cqL@,trF;[{]U#G_1ڶ[9XvO[%N-꙱WY؞*S |e8_usA$P{K pDI"w{qီ?7SO}AkX k2IUJ} `.'ԫcӌNyUͱ><_kddh"z\ur!n/iS=CZ= lcC <'Zu Vqn;t5R:*\io9}=/?0hel:aWuf(;FK}:bTVvIԓ抻lcON̫he9͙PSS-k"Y@LdAj:";kz Uw[-*)om,qiGeyw1*!ݼ^KNN;T(̗:H3MX_ú|*qfˋdTIb=0kv cWj'HN8A"<6 :ͭojڛ0#X.sI7P \$A n.wd@La%5[}׺!L8a ݚ\|J1Lwh3&)ʉIK=ԈwmC;kkthy)y$O2٘L7KxII3]CG|*ڜ<$sLrYuy`q+?.X<֋TO} kDD$Q9N\8IHɉ>xmn.fGJyԵ{*ӝ ϼH8+Ud0![Mn`7Ï ІW` ջv nGY!J'<7stGH Sm=Y΅M:3{2swV׎0UK:~JCxK!ϓAْY̖Udw;G9:w{L[q;]=ԔePϩ_CKvlow $.2ho{G `]X?()P^ H' ?.~|Eꦂ,@n?p@'e`|]D=330۫ig?%9N4}y;A1 ;'<$E֏xwΎZ(lkWOwd~8i?E; gwjC5IZ=XY[4a~P?Yrzۧ:uEvN) / hIMJ_>g5c՛j?kM_ro.x'M-$AXV4|\?j=.e, hs߻l';m\?瞧]]|9gI'"߫CO[_whcϫ[c}Ev{j%!X]W(o1a5Z3&j6RݎhOɕԲydHfM1dN靌?8 p~Ys@Iߜ*X] y/[.A#/sx@SE~-R N<|űNmm?t}سѧ%I'CHJwn%kD~W"7N0?#VvS=?տFUY*2#>MHH^SK\sԘmLq .O#k\ )n^"*wOZ5G]{)me9a;cL'mSƴ-2'wĞ]y0lwU;i\x/'~)d@tACfN#Ȳw8n04[s&=x1OIki.i:d|T"(M`kHsOr?jN)t~GQ4e\Y:,pOdA+elq>ח<8o{)m,>=ȩqIQy'5$CC[tjWw% v:~3yJ۳h =vNK  T겱En; 0p%1W>|ce,>F1U@B,+`"u\h\?ssݔƵn`w)%7L'uN bZ%1v#=zhqL=x'%'˹u>d fə$fRY_2UHL():mh :nAyZk62O%6A,d-~yi %JE7ξ+?+v#s6- ,/46*J:[kF0{Z\:2ZϭҺv~jţ MחOaA<(u۽ aH#̓Jo7r\>:I'`ֈhx5B(>e(Qu\>?W<е? k]ڑU>ΩAPSm5 R)M-J3Ne^ ta8ʈOILBpRUD>*%3ܛt袐2cJS> 9 gs(%d:}mhFn1-~F eUVWU{]dNں:w٪ehsz4l w'3q@xWKXCq5v4%ysg A:XAlpL~%^-*) ;@ (,XN JX#QE2 Qqq )!.>C=Pu!kI״uP\Ln_j~0c1$(-uGvBwPT Rssq( $*>|QR}-rmzAO!@^f].B[,pi;UWc$ HDHJ TB&ښb鵤wR$BZ>˄$%>iąJ!I yyt^O$aV` :b-Y4'L t:hM)b\Y"G> TD%mS)C[ c )l)m)) d ]7L&V|k2?r<;aejgR Qm}6IW ^?P_Ѻ9BwE2-:! ɤ{?L\9N"1es]IMoE7xVm76K|#m]Z vG֝ZЖs(BD;1D ;{zPn@3vcK*/c_􄩠xE -"s_ݣFt3MdpdydOTPhкMJ 7#rN=x5$IuPxu<Rn6E_V˽%TZ(JW_0԰OA9VnGᩩy}/ 99*'.Ck=BZ1 Rkn ֹ;}U1ŮG!FE$-)$ XjyNԿ!1kAYX*wHk7!U&Q.qI-*? >kuhI2m4myemnvz_ޏ mMn=qםtDU2EOsv;Fwծ~gdU^X i%Zs&aq,9l-{k؏qvgN-(՝~&f,Oڻ]IgYQŲZ8֒?VN6N^-ogZi yL4>S BpL$d.C^ CXQ$MQDP\rtLt IE%(~VL}wkL4b .zv]fMFx 6,'Eo.l< Y9|8\-*G 7{6I坿yy ӊ>gWdg>爐GNdwY̰Yk?y~ :n=N݋f;qlE:x({-a5Z?}j,y~\ˏJ#-K:p-?xjgUée\w^Pnk7 wnnj{s,y#_Vc&+U^Iv;v3/EDM1?l.>*0 [B9\{uz#*}:V3*6e㱻cC|gDV8H26@D_R}*/hO֬d5ژzv?gŋ}Bv\ŏa |ԫmLml{0AگS@5; v:5RQR"RZO )kAY9]3u!vVKZseZA˵(K@J$xPgw~ST֣oV֭B谵ŭocU.մy6̀(hUisw6V.?a~*h6w ppJ$2rs lg knP#7yel#jotA&?YZy?]QNyo:5|ٱHd[gYh#Gjly/֣P=.͎ڡOI82gv5ș=&&?jKf2l.!Cdn,cwlR Xnx=fXe7cdbXkRƴֹ8(N&'ptwp{1;Y:FѼmc&usnonn* +ŭN1,Q-(E%B 6ױwф Wis{ѠT-ЬvH59&zEIc_~XW~3@wh]uVڪhc!O A滛["ٸwf9:]DlXocKG-kpO%CdƤYΡYG?*y"AiU_^ǹ|B%8w3KP,|dumܦvexNWzz ʴC O!8ma#Z't#63~I>ݧU|llFlGdc$뮺XsJ%Bu<3e @'CDCר'Ct U.즎>:4؃ oieK<;Y!N"{#2=C~(~I)׸/2I9O' IOjyrI)RIOĒSiוT2ĒSi/,IwX̒C.;@n+IOiӺIx}Ud[>G{޷;//I!$\̇ ]et1!{YI l|emޘ4hgYvcݺ9A.y%366>{mL,km#.bdՊu~/ Fl.hLi$CNΒIJ4l7$ 8yHw> #V²}ΈhH{:Z ڤ&c򸤓y@$S֙~J&G|er$#~*:s)$libmetadata-extractor-java-2.3.1/src/com/drew/metadata/id3/0000755000000000000000000000000010716136374022167 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/id3/test/0000755000000000000000000000000010716136374023146 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/id3/test/TestTrack01-Artwork.jpg0000644000000000000000000004062010716136374027346 0ustar rootrootJFIFC  !"$"$C&," }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?*9ֹ߈2< w׵XaXvׁߓ]1+h4_gԴ[Qb+V ;~4PgV1"qhᏌ֚?VU.&nN:U=Wlk;mZK). A*H'pz%ǎ<3<{+ .n_A69[w?4mSZ̚|.H|$ݣ}ı;yƯ Mg᫘,oO\Ioƒ[!-<yڮmMН@1(rs?!7>-lo/ѵx-/E^ȮQ׮Zu{)E 6)53SkKTq2kO'p?h.VĂj㏄4t{}R=No 1B Xk<)R_W֛X֭/JUH\9R3Z,4SVW=:I@l#cߌ}j wn UYy]'㯃u-7VQ?hX^y *-߃ubK{ۈ/nv 9^3hSnMΫp,"_ba$\[pszVox_L^t#6kh> |㹥, G$'#OT< my=k>dO$3߄+Y}2`RU ^-2%m4AXM 6a} 8֥6'|;ksQK$𓹚B(XL?3_~ʍzRkO'|7W]Ewcfo'K]{9'+xz6Gb,zΛ^(5xt9t#6"/Bs\Sh:ZOľ!HXmgQ)9''?\s֪I42NoZekACWyo߁N^bԜ;卼 M/J׼MA_{j--˃U]-nfhDyproǭD04J#G,Dۿ} um'OШU=~[3^aX[ѬWW!e/ƈH_4 .c-w^m`mA5HHFܕ:U**MJnw*4ϭtMNY-u]6a=bHdj~k*¢A-MN?ٵo/|Ǖ'xy)NJ=:Uփ^%o_2vZtZMҥϛG?&HusmX`Gub:JO!XxĚU2inŖ9^FH?!كS[mc7Scl Z=xrsR?1\ҹo&~hQoSI9 ⺾:\$bԕЀsJ#8o@9HmqNLgc? @=Gր>J֗zfo5I/md=\)Suf9Eɝn k6\)9 ee!A3Nn(I$k6bO@_+o:iֳ{m%q%B "o%ܑ鑵bx_?rm)1G9^`֍/$H\gi25O/9D-̩欲K"$F0slדRq|2L,>mZ) rUsHz{WXq\?U<6-47NfiԼ7yA(ۙ\{h}N;6=2J/2OֱW5 CSmpp .?< fųxEevK%m%CsE?".ȍw&JČ`uBuCnM4|)XAZuv, k)R} u֝im;]4.&ju xZtmOIl4bh7P3 K|;cwk|#`Prr}x\g2ui嶪uhHc.uKOY* ?m> KM=ŬIp8>OB_XNn㹂V$~U -t[_ I!Y hj=,i*x}y#黲;_#Κ$l!OVjͥo]{4j>$ikd~_^"oUˊB 8 G[c,2MCX롗OT׃7 ˵1A5i<-kVdӯ YNxNڹ?ċM³$7e_FX/>6m뷻oڧw63~5|aZr/:KZt7EЭ5WDRa㓏]tn&Cm6 3LAI@9dx[noFӮ5,jQ!O ttMWXռ).w̏9P?tłydTgXER1I8n~7t}.oHYXm}Oէo?X[ؘ(Wfr>^0/FJX7v5˷|%ZKWo4+p8 &iJ(Iz붾@tޡb?+k]+" o;Z_Ʀ{Y#*.6sfh:4q-r٣oK~b1eXSN,+d;GӲztV R R ?oMac:ʓʳmC}w>\+;g}o%7DrVv#ՔanVVP"@׎Ԍ )A4zr1J=?@QJښ=sӳPhv W3(Tjl՝g1cՈϯ~–Nn%y~;W]J֯TaB1 ӸIz̡<1LC5=sd+J3Sqž =9݀:<WkaHTSγj5,Ԭ0FG uϸ~N1i l֞ļҽat}qڒ'_wFFFGONG_+FbGSj|.cIc8ھ0Q[hgݛ_ڃ6=џ9sf3iWw_/Av\[I?NrtOnQlAJBF}j>~KҟڋyF\.}{I_#A]:2Rx3]?9Xs\REdwH>9iFF|;qha}d Ԟ%7sM\P/#ZY_֟+ Yp O m0~GO]7׽.}aڗ5Ӹ>{RڧX ~/sV_)ګV#?ؐ=._)?Q?KhbGJpF)v+qVކ}/촣|NϪrG?Zv _,ھ|"9<"ϴC#`889Qԁ~kjUJa;@ӏ ? 9\\q_//f$!*ֶLEwG_O0OspQOc<zfmҜ=+b]#$\| +55{>1J@[_S8ut)t;gWz#W"=?΢azcj{F l#9`{cv# `RxJ8)B,>o^(@'jsaq׭+gw# t4ױޕiC9cHAfH#'4éR>w.HlC)Q ppZm~l#!D 8RV RHc@8:(gqN =RrJM@'=F iA:Qns@N0?.i˖?3 RqӹZVx8>ޝaX J:@8ʝǑޙ9O'#ޔ$q3iΔx,Xץ R/8O4; q` M&1HҜC42 ;}h$┱;q&L`ECُvjopq_4O±!|w4o ?3pWÀ;~F>θ<@|xl=3J T[A'隒1i8 f+cdzHcXt9u?Wexikv8hHƐelIp7:㌎)fF_q `Ӯ9'NzbpCu4zQ/^Nc׭!݀$8 d^) ǧZ \`zӀ H[~O4YTx=}0!@ brR.@!暠zԉmg_#Ccpssj95SUo(o@2ܢO3_2$}C\?J?9nOOh{,ɜy& Cڐm۴}imB'[l$t;܏yPE;Fu_g#2~"f'C=3΢}/sd Iv(p8\e'LJ}%PL OD>rOFA}oqK"1NIp÷qIy wjVA—?΀)s9'sSS?.8ϘOˑP|Sc#@Cq~iwc( H<ЋG9=)Y>~GPG?ZRTF:H,3s\AOJr?.  wc8\1t'6a4&ۉh 2FGzr瑁ɤP*r{v=( Ax)\ (dwց0wy4$ <@݀}? $#v$50Ƕi9dl> 6c6"Ӧ=OFdRȧ=T9?jc(cjy=(Oz3isZ|c1S@R1ڐ)+l}g ϊ o-tVvO~t>OKGC5nqXKr\?oD[~Q_.7>G?$ >a<1-z55oH'ery?_󚻧Ź W'dg'd{? Kf}ͼejEGN*Zp?NJoZ֧.z%Qˁ!FG50p} =DʤR7;GieNH{p3 2Toa4mdⴵ{QT~pyk00jwimPH1}2rR{*oi5Lѡ;y8 M~p81;Ѕr(>pשe$A&SP1A4c5842}T֠y\'aJU}9*N Htn#RrF{cA =+#'nNEBqӏnZ@! KVs:xc9ÒO ʂ:jf89>PG F2y9%#QwTy'14 D',y4C>ާN@E7[3I\zFp)Pc%s;i0>V 0# y<GLO֟m#i@$p1c!ӌӕF@\==K($6F{p$ R<%CΡ}3E|sQ2?}c-Bk"?WqxK~r])q3v, GDOlVH$<]p8#J`zOd#0htX*k$kfOkl0؆jQ<"Fk)b]*H=x # 29SƚTkj6뒍^ϓp:W*RG"A԰]APF9?ʝ/*>nh=z]t} ]DF(F;W>,Bp+ n4+$"5pBgOcZ&VHJy=99iaHp$ciUo)QC(UoRwH޹'8UWN3ٜd>H|aO>}k: F#t:%0n9ZK3+C1CNqoڻK@5ePw`Š:͝w$QT$SNP#OJ.NIPH~_Jj8-އr 2-[9>@q5c#T 4[(Y8V1A`2N9R~J<<&ǂ9=y@8^jF2Gjr`~^q\d]Cv:Ot{ 'S-d`H#ER_WV+g\XONL,`oVwG'z]Ec͛i#7ZK`X~H( Ma 3No7Z_f+sW~ӛnAT!!x~kǕXH(GG9}k~׃ )g?AriYhi& 8UT^2/K`1޼-I3ǜ3Hxdž4;^oG.N|z{W`3] j39J5K^_߹ >3*Ίgm$,?ҫk,^(Lq^iPVcs;< dTzg$䓂34AA9;M? O픟Ys$Ia A>yWx5OH-_s]>n-ZYܹ`*O+JJKM#>LU~@ji O\.tOjltRHWqzW֤=!3d?]18뎕(R{# x#< lm$Ҁd9ԄmQu on e9N*S g#cӂ8@]ĊGo9ձ _؜źwՏO}X@ _A~_?bok+ۜJ<1Xz)pg;O͜FzV!ިc`/+COFߖNU>){wITmSG+Ԍ}+bGUX\5ܴI|r ÿ61a&IW_=q̧ ϞHKsd8qk4`Ig dQ[fU>t K`4S~BPe c^cf_=+23ʢaY;Z*)F֥Ӂ<ׯr'kwLV6rFEK999bO gyu]C8nO4R+Cn,2J#ʶ4$S,{sڣR929cңd9ү8)vdB\gL"qN_ZzՉ9E84Ҁ)9cFpFB}NH{S‘zP̊)?0Fϕ `N01U_uH5*CR+h~w~}t\|OXC`zrjEL`o_>`r+@9fp8cW6b0Ñ=hQ*sUUNHjwjP0084mOF[Gbg_+%Nlhxjk ¯{gđf nֽ:b+@{D:|lts%jE7c6^#)/0q5]e/"Η#Q66'_>$#s╣s׌ (7WccbP2@#_odSqsTFzr8άCF 0)YF< fX FMJ <㏥r: ƍHF?5oo rz}5<$Ai u**LH0p}3֘Uy=zpknt^Я'8$T19=ӌD0nDBpXG5u#l;R} cPwkܨH8592OS#=qH01Z9yDw}>)r`zkHi$#1@<`#!V$j`c##jsp'1{C9܀xy@pNGJ $qLXNF894sǩJ!< qZ)'ڮ܍qJO?hU֏)wLU* sZ"py;?yl#1o1Iz죿5߲RŰbscRH:C@ +8mӟ(ҁM 1ϥlxБGLx*ڣMVYvb[?*f2}]Ek_\R گ&h$ڎ5ذV?٬kXi`C^5g#Y˳nr"ZtVW88?LWNpyQX}uՎ_C*(wjhQ֌v`ۜ198$7QAni*S2DC${q={ h'h=)GIER1Ny׎+Q`~{z:b3zS͸e*T = ۜX91-qRQБ>Pmy&@ jLWa@ d&cZ-yΥ~0=#Z^{?CW߶YzXAIz+drzimc$+n@8 RzWU+Ye\ڹ9P\LocٸO9Sm&nz)" XKy.E#-)My{8-"\a7Zg82cw{uQBMlw0?ĮlBSUcZxxg =sX⡗S }had t62*7< 1|s] */G{cRÀ:-6GҥἄJnN3j ڲdRñ-7^ zTor VV=AOy#^k $W-\ո.¹XIoNv 0ֳ[?sfm`1*d%fN:%0LiN2~k^~iM`<QP[O 5ϭzZ_#:ռ8 J:O}K Mڶp5Ç:I)>ьH>e$n}xpAr?^ñ>śqqI^n?FׁÌ`U d΄܎icΰR.~q֔ިOsv:M^yWg„~?꣞s^h${U:]-=Fc-$@!R:Ֆt{qntAvfs8=ki$#־oFxܑ7?e=AFm a֍KG N[Am-xp5,!;3kuNq+drx`|{zҙmGkбrEFfA1>.xgs8nԿip8c9zV>!3FmH h?gty~ZA#^o.:gi~p8 .Du .AJQs^gbҏH|>dh/\qҕof-W 6Fg߉?f{qxb.E; c^M]oJ&A6qi4;9:-gZb>Eڅo`^~|O 8 Q]ix`##h/j)7S1>-t_jO3g RD9O;i_zECCgsZ/QTj(((cy ExifProcessingException with the * specified detail message. * @param message the detail message */ public IptcProcessingException(String message) { super(message); } /** * Constructs an instance of IptcProcessingException with the * specified detail message and inner exception. * @param message the detail message * @param cause an inner exception */ public IptcProcessingException(String message, Throwable cause) { super(message, cause); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/iptc/IptcReader.java0000644000000000000000000001746210716136374025346 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 12-Nov-2002 19:00:03 using IntelliJ IDEA. */ package com.drew.metadata.iptc; import com.drew.imaging.jpeg.JpegProcessingException; import com.drew.imaging.jpeg.JpegSegmentReader; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import com.drew.metadata.MetadataException; import com.drew.metadata.MetadataReader; import java.io.File; import java.io.InputStream; import java.util.Date; /** * */ public class IptcReader implements MetadataReader { /* public static final int DIRECTORY_IPTC = 2; public static final int ENVELOPE_RECORD = 1; public static final int APPLICATION_RECORD_2 = 2; public static final int APPLICATION_RECORD_3 = 3; public static final int APPLICATION_RECORD_4 = 4; public static final int APPLICATION_RECORD_5 = 5; public static final int APPLICATION_RECORD_6 = 6; public static final int PRE_DATA_RECORD = 7; public static final int DATA_RECORD = 8; public static final int POST_DATA_RECORD = 9; */ /** * The Iptc data segment. */ private final byte[] _data; /** * Creates a new IptcReader for the specified Jpeg jpegFile. */ public IptcReader(File jpegFile) throws JpegProcessingException { this(new JpegSegmentReader(jpegFile).readSegment(JpegSegmentReader.SEGMENT_APPD)); } /** Creates an IptcReader for a JPEG stream. * * @param is JPEG stream. Stream will be closed. */ public IptcReader(InputStream is) throws JpegProcessingException { this(new JpegSegmentReader(is).readSegment(JpegSegmentReader.SEGMENT_APPD)); } public IptcReader(byte[] data) { _data = data; } /** * Performs the Exif data extraction, returning a new instance of Metadata. */ public Metadata extract() { return extract(new Metadata()); } /** * Performs the Exif data extraction, adding found values to the specified * instance of Metadata. */ public Metadata extract(Metadata metadata) { if (_data == null) { return metadata; } Directory directory = metadata.getDirectory(IptcDirectory.class); // find start of data int offset = 0; try { while (offset < _data.length - 1 && get32Bits(offset) != 0x1c02) { offset++; } } catch (MetadataException e) { directory.addError("Couldn't find start of Iptc data (invalid segment)"); return metadata; } // for each tag while (offset < _data.length) { // identifies start of a tag if (_data[offset] != 0x1c) { break; } // we need at least five bytes left to read a tag if ((offset + 5) >= _data.length) { break; } offset++; int directoryType; int tagType; int tagByteCount; try { directoryType = _data[offset++]; tagType = _data[offset++]; tagByteCount = get32Bits(offset); } catch (MetadataException e) { directory.addError("Iptc data segment ended mid-way through tag descriptor"); return metadata; } offset += 2; if ((offset + tagByteCount) > _data.length) { directory.addError("data for tag extends beyond end of iptc segment"); break; } processTag(directory, directoryType, tagType, offset, tagByteCount); offset += tagByteCount; } return metadata; } /** * Returns an int calculated from two bytes of data at the specified offset (MSB, LSB). * @param offset position within the data buffer to read first byte * @return the 32 bit int value, between 0x0000 and 0xFFFF */ private int get32Bits(int offset) throws MetadataException { if (offset >= _data.length) { throw new MetadataException("Attempt to read bytes from outside Iptc data buffer"); } return ((_data[offset] & 255) << 8) | (_data[offset + 1] & 255); } /** * This method serves as marsheller of objects for dataset. It converts from IPTC * octets to relevant java object. */ private void processTag(Directory directory, int directoryType, int tagType, int offset, int tagByteCount) { int tagIdentifier = tagType | (directoryType << 8); switch (tagIdentifier) { case IptcDirectory.TAG_RECORD_VERSION: // short short shortValue = (short)((_data[offset] << 8) | _data[offset + 1]); directory.setInt(tagIdentifier, shortValue); return; case IptcDirectory.TAG_URGENCY: // byte directory.setInt(tagIdentifier, _data[offset]); return; case IptcDirectory.TAG_RELEASE_DATE: case IptcDirectory.TAG_DATE_CREATED: // Date object if (tagByteCount >= 8) { String dateStr = new String(_data, offset, tagByteCount); try { int year = Integer.parseInt(dateStr.substring(0, 4)); int month = Integer.parseInt(dateStr.substring(4, 6)) - 1; int day = Integer.parseInt(dateStr.substring(6, 8)); Date date = (new java.util.GregorianCalendar(year, month, day)).getTime(); directory.setDate(tagIdentifier, date); return; } catch (NumberFormatException e) { // fall through and we'll store whatever was there as a String } } case IptcDirectory.TAG_RELEASE_TIME: case IptcDirectory.TAG_TIME_CREATED: // time... default: // fall through } // If no special handling by now, treat it as a string String str; if (tagByteCount < 1) { str = ""; } else { str = new String(_data, offset, tagByteCount); } if (directory.containsTag(tagIdentifier)) { String[] oldStrings; String[] newStrings; try { oldStrings = directory.getStringArray(tagIdentifier); } catch (MetadataException e) { oldStrings = null; } if (oldStrings == null) { newStrings = new String[1]; } else { newStrings = new String[oldStrings.length + 1]; for (int i = 0; i < oldStrings.length; i++) { newStrings[i] = oldStrings[i]; } } newStrings[newStrings.length - 1] = str; directory.setStringArray(tagIdentifier, newStrings); } else { directory.setString(tagIdentifier, str); } } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/iptc/test/0000755000000000000000000000000010716136374023426 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/iptc/test/IptcReaderTest.java0000644000000000000000000000522610716136374027160 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 22-Nov-2002 08:26:26 using IntelliJ IDEA. */ package com.drew.metadata.iptc.test; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import com.drew.metadata.MetadataReader; import com.drew.metadata.iptc.IptcDirectory; import com.drew.metadata.iptc.IptcReader; import junit.framework.TestCase; import java.io.File; /** * */ public class IptcReaderTest extends TestCase { public IptcReaderTest(String s) { super(s); } public void testDescription_City() throws Exception { File iptcFile = new File("src/com/drew/metadata/iptc/test/withIptc.jpg"); MetadataReader reader = new IptcReader(iptcFile); Metadata metadata = reader.extract(); assertTrue(metadata.containsDirectory(IptcDirectory.class)); Directory directory = metadata.getDirectory(IptcDirectory.class); assertEquals("City", directory.getDescription(IptcDirectory.TAG_CITY)); } public void testDescription_Caption() throws Exception { File iptcFile = new File("src/com/drew/metadata/iptc/test/withIptc.jpg"); MetadataReader reader = new IptcReader(iptcFile); Metadata metadata = reader.extract(); assertTrue(metadata.containsDirectory(IptcDirectory.class)); Directory directory = metadata.getDirectory(IptcDirectory.class); assertEquals("Caption", directory.getDescription(IptcDirectory.TAG_CAPTION)); } public void testDescription_Category() throws Exception { File iptcFile = new File("src/com/drew/metadata/iptc/test/withIptc.jpg"); MetadataReader reader = new IptcReader(iptcFile); Metadata metadata = reader.extract(); assertTrue(metadata.containsDirectory(IptcDirectory.class)); Directory directory = metadata.getDirectory(IptcDirectory.class); assertEquals("Supl. Category2 Supl. Category1 Cat", directory.getDescription(IptcDirectory.TAG_CATEGORY)); } // TODO Wrap more tests around the Iptc reader } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/iptc/test/withIptc.jpg0000644000000000000000000002457610716136374025741 0ustar rootrootJFIFllPhotoshop 3.08BIMSupl. Category2Supl. Category1Catt Copyright(Special Instr.iHeadlinez CaptionWriterxCaptiong TransmissioneCountry_StateZCity720000101 ObjectNamesSourcenCreditsU BylineTitlePByline8BIMll8BIM x8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM8BIM *ndLJFIFHHAdobed            dn"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?,cߘVͭ9\%} et-ܣ[SIi?n!Ȟ J1M5cu=71fsKAհZߡo5:s>΁ENqeewK>a)8?kT$xϏ|:>?gl .fZҧ~gMc5ӸꬷbcK'QCSLu#I~#$@H}mgPu/5[)ca3#9uua^kqߌAD!kN/00Iucx@9?_f1 ^>oe\O7ޱ"CSߤv719hi~083|Qjm;n`lj}Jf8-<>4T_f0˜((#㾱e]MsZm[P4woq-HdO 6<([ظj Zpp,?^@5z_V[qk_re!.ysI'RJԬ#:\q'U!CV0cꜿ/X2JChרU֘I$.}Och.?[laEXjl9?edt1G{N ,, --%N4Ϧ4XW ϡM"ā}ʎF{^Uf˭/:Y#IK*ۋ>St:Yu6a_r_涴C+V+mm7XIsjwư>q-{ǵO0xGN>9 fx^}XFunk6mqC1fܠG檃(kl ʤ)?;m#;9X snyՙF] 2fcd2ʯk7:v6?9qa?wbǺ6q ZǓJ0UZl.* h[⺏S2ElCO7]Y;QTi\ۢf$ lqևRs{%Vr×=7t͎)/ :ouQcX{JkDX~?6Yuo!HOEstaKCz+q|J5Ր~CʼngQnC0݌sqzJsŏe @3=huL+skkS zp+~9H38~K{Gr10h4Wu:;7|^q^kpk#JOu}[][9U0~osW6"}a,cȲd -A KCˏssKGl.ӬAsODcbk!ja2Ykf3iVуk #!'kߢч*8Y&x Ok~}&=euK\jĖT8g7 )hw1V mtՋ(_f8"ƿgWS-A^_U~>U CZwh폳 $yJ:}Y,_fOR'0X_x' -yV4:S&k:^Ev8=nQg"kb[ݶ3@n55[]]6osdg<hOY#c{l ÅN;id4n-+Xs^ i5؃'{8B(^k6L8{Zq nodz:oY4dPlD jns*:ON6eəvr/C}^7 ޙ]Ob~>OVI}&6N_ܣep:;F 4I}Ryޚ켟d4=͝h vYH2֖to\K󬱇<:~sm2=ht~k_^aeWCcaiA@2%Һ[|kDJš ]wk=H_FƪFw?rq跻QW3^}Ktϧۡ1Kmm;gl}=FG6"IWo]nto_Cш2vzܶmV|$>2}qcWn4w'w򗌤~+(n_'۟Kc}I߼m~썚?7~~$rs/&qwO"gH\Dw~ Kb?)78BIMAdobed         ""   dn  s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?rPo~@S"АB5$s-Qptj6'mNe4BveODr$(;Ѯ\rsb1d7H;Wӭvऻ:IN#~ iÑ#f&f_^Bmܭ tޘso;4oЀ[\\v+pSbFwnGyqRBX'AO%#U_קi$OS?6:MH>hR{mGHT~GyK5=4 C.[# J~yX=ۏ#r=e*]RUGO"QKgIT]-g \{ORgKD1%Ï}nTpFdl vՉVK{'F%@nwNх9Z,֢͞%^ 3_a.38zmRl@2Lm|3[=C?rU. %㏉тy9aդph>'#Z2?ZDz\ F9bu%Bs) y#F8$G͵=Z+i knjG_<:8qyK&S6?qFC1flmdB{bU z,ډQ>@k` GL³ W$~U9>9K?49aDeF[ 2$Ea'gLJO=yz8O-VOoXpqflrUk8jLxxvD H@+'T{yV6!`>/r2fP1D+V@ ۗXR5PdJZw5Ҫ'U<qO`Vыz=&jCēw#MyIW;W;ۄ_s_z`G"y~+tf$pDc܉WԀ#v?#@TwB BV($QiL|6dmjO0:*nNHa= %wS|Q,;Csl3sƜlٜ?pQg/w*]a 4 $UJL3 IՈz}9'zג3/fdk\TwCZjFh+-G,&!E3Uϙ#2RII*7#YRB;cV?C+X!Jtԭ] Ipկħ,'&9xվk%r#loC,xj+ufOFh#t RdĎ*,QS1ܩysVI=%<ĈF #}gR!֌iJVfu,5UY39AN㷆lpBN@$:{dkII'ӈPקnOd]-gyJGɔd/ ;}1eWӤzl0i(,՘J︿H̙.? k!y2P'S*kBOvlz$QdC0`hG :Cc ǘiՋ27KoC k}p\dlS 撰:0ĕ1fgsy38Xs'lylŸ<&YcŪiqk<i`Vh2 Ƃͮ,Z_2jb :7٤ g]iZ2G9|<' JmUGV7e {Z l:l>f2$U=lH(dVomߘ>{)LE&HYY59oG >+kKX~.1 .Z3#7)Ǥk4(<=>/9!Z%mh/DqN~dҝ M>$/$@7Ō|mDȤ7^g~8ب!M}> 9Oi% (c_VsA!$ +{ڿ\oLA{jIXX^kJ~kmNC?Ĉ,nϑ*u_pZzMbHJ9icJcj',A<3 s$l3m/2[I^Ab9a}Iz\e9E&:0~&`quB-fD@_1\Q?WS(˦?p s7muȔ`zs<2 (5Myu[^R( Dv)&RMP$SKnvv.RH3;sn,s^Rvrۭ)֝I".">b G4m[Ѭuutujla9D.$ Oxpj ʼnd SjyQQTWr+s\?Ebꑍ ˑqUhYZ2h:0بJ  3z!% t^Iu߲*-uR$Z*2JRY.J|Gj~6mbK'gjW%ZH -ulOW0` 6P<z}읱M5k~Te䯬}Moƿ4\_vzo[Vaç2~#_|u\T?tu[?^GқӍ~98,p_X)N yV<=Z~/ec'pO_z/lZ삽:zNFcJo ~/P?+?gl .fZҧ~gMc5ӸꬷbcK'QCSLu#I~#$@Hҗo Nߢ+p ,|,(RdSaΰ_+ sяr< ZuXm}f9a`iii.}/*v̬f95}7qWʼ0V} i\=u0vCK^lS 08^a8fx^}XFunk6lqC1fܠG檃(kl ʤ)?;m#;9X snyՙF] 2fcdWeW;^Ûʰcݷg8y,y4eUr@օ⺏S6ElCO7]Y;QTi\ۢf$ lqևRs{%Vr×=7t͎)/ :nuQcX{JkDX~?6Yuo!HOEstacꖇWmP8k!.3^7P!֘n9}w= 92܆} uh:E㹵ю\ 5B=8M~t{}&9`y5sMNf,w4RJؗ:D<9}1V[5j qmJHRۇ2 }Ng_?;IXSRvW3ջ䇚~5ײs{%7),gUO$b@#;`1 OSǩupԕnsSV86.\4lo]Xz=RfwRu,cZD Zc{:|fa?j%qJ=r10h4Wu:;7|^q^kpk#JOs:@r(?h9.`;ryۧqD|$lEX9eZ598w8I qzOȲ:9?O)17Ly^/c9extϹZF3I;\F~9WgR4'OIyb.e}>p(5Wg=KH]3O{U{Gx͊.9}?u~gm5Z-cnsm;{;=jߪWeD l's1nZ4#I#G$G]FU52z4;_Uls7< YVV6!͓Gq nKcX鍥.5\Kjwx=ɸNILD빏27H jՏQ͌qE~w\}N̶{|az-}VOWT.M iݣ>~/ƺǺםy%U ׭gZ6jzݠ<5I^u>aخk~0cCc&k:Ev8=o?Z_M`\P][P{Md0WYKV̌L9}3U ɴrޗV3'f+C`N-ZqߓOث$qlDZkkOѯN;\yBQɇ"}:KN!QR@V&:N6wdЫ =:2V_9ÊM(Nh7f.˯w$7 oݽGo85  'v~M[!uuڌSC#9OO(>Kb7][u J\cµg}N״4r$.ct|Vj FӼKUa veə{c zaq-i;VDƯ-Wo[]<;Iϡ*9"twͻ>_@AgdqrY&`_p1,,p#sA;ޝ͍ch#yʧGqܾXq?bXq{X@i0rH򘪀vtowo V+5(Xd湄\9 ,Qm '1 #T/\f}~6^3vAթ_{I1͓w5w(bC,"λj8cgcT^G7/' sgsa#ZΚktu0bO.~=m"GsK,uLl0V-, H55DWKs2=-v<胹X8<knmgb|7WFƪFw?rq跻}QW3^߳/X|{oЏgq W9'qqڼ%_7E~>ѽF#gwL/rٷg}Y󟇻D/>36}qcWn4w'w򗌤w}7ԝٍˊٯ==w7\2J'??a˱z|鈙'uW߂؏Z8BIM!Version compatibility infoUAdobe PhotoshopAdobe Photoshop 6.08BIMPlug-in resource blockmopt<8BIMPlug-in resource blockmsetnull HTMLSettingsObjcnullSpacersEmptyCellslongIncludeCommentsboolSpacersHorizontallong StylesFormatlongQuoteAllAttributesboolSpacersVerticallongUseCSSbool AttributeCaselong LineEndingslongIndentlongTagCaselongFileSavingSettingsObjcnullIncludeCopyrightboolSliceFileNameComponentsVlLslonglonglong longlonglongSavingFileNameComponentsVlLs longlonglonglonglonglonglonglonglongNameCompatibilityObjcnullNameCompatWindowsbool NameCompatMacboolNameCompatUNIXboolImageSubfolderNameTEXTimagesDuplicateFileNameBehaviorlongCopyBackgroundboolUseImageSubfolderboolImageMapLocationlong TDWidthHeightlong ImageMapTypelongGoLiveCompatibleboolHTMLBackgroundSettingsObjcnullBackgroundColorRedlongBackgroundColorGreenlongBackgroundColorBluelongBackgroundImagePathTEXTUseImageAsBackgroundboolBackgroundColorStatelongVersionlong8BIM JPEG QualityAdobed         ""   dn  s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?rPo~@S"АB5$s-Qptj6'mNe4BveODr$(;Ѯ\rsb1d7H;Wӭvऻ:IN#~ iÑ#f&f_^Bmܭ tޘso;4oЀ[\\v+pSbFwnGyqRBX'AO%#U_קi$OS?6:MH>hR{mGHT~GyK5=4 C.[# J~yX=ۏ#r=e*]RUGO"QKgIT]-g \{ORgKD1%Ï}nTpFdl vՉVK{'F%@nwNх9Z,֢͞%^ 3_a.38zmRl@2Lm|3[=C?rU. %㏉тy9aդph>'#Z2?ZDz\ F9bu%Bs) y#F8$G͵=Z+i knjG_<:8qyK&S6?qFC1flmdB{bU z,ډQ>@k` GL³ W$~U9>9K?49aDeF[ 2$Ea'gLJO=yz8O-VOoXpqflrUk8jLxxvD H@+'T{yV6!`>/r2fP1D+V@ ۗXR5PdJZw5Ҫ'U<qO`Vыz=&jCēw#MyIW;W;ۄ_s_z`G"y~+tf$pDc܉WԀ#v?#@TwB BV($QiL|6dmjO0:*nNHa= %wS|Q,;Csl3sƜlٜ?pQg/w*]a 4 $UJL3 IՈz}9'zג3/fdk\TwCZjFh+-G,&!E3Uϙ#2RII*7#YRB;cV?C+X!Jtԭ] Ipկħ,'&9xվk%r#loC,xj+ufOFh#t RdĎ*,QS1ܩysVI=%<ĈF #}gR!֌iJVfu,5UY39AN㷆lpBN@$:{dkII'ӈPקnOd]-gyJGɔd/ ;}1eWӤzl0i(,՘J︿H̙.? k!y2P'S*kBOvlz$QdC0`hG :Cc ǘiՋ27KoC k}p\dlS 撰:0ĕ1fgsy38Xs'lylŸ<&YcŪiqk<i`Vh2 Ƃͮ,Z_2jb :7٤ g]iZ2G9|<' JmUGV7e {Z l:l>f2$U=lH(dVomߘ>{)LE&HYY59oG >+kKX~.1 .Z3#7)Ǥk4(<=>/9!Z%mh/DqN~dҝ M>$/$@7Ō|mDȤ7^g~8ب!M}> 9Oi% (c_VsA!$ +{ڿ\oLA{jIXX^kJ~kmNC?Ĉ,nϑ*u_pZzMbHJ9icJcj',A<3 s$l3m/2[I^Ab9a}Iz\e9E&:0~&`quB-fD@_1\Q?WS(˦?p s7muȔ`zs<2 (5Myu[^R( Dv)&RMP$SKnvv.RH3;sn,s^Rvrۭ)֝I".">b G4m[Ѭuutujla9D.$ Oxpj ʼnd SjyQQTWr+s\?Ebꑍ ˑqUhYZ2h:0بJ  3z!% t^Iu߲*-uR$Z*2JRY.J|Gj~6mbK'gjW%ZH -ulOW0` 6P<z}읱M5k~Te䯬}Moƿ4\_vzo[Vaç2~#_|u\T?tu[?^GқӍ~98,p_X)N yV<=Z~/ec'pO_z/lZ삽:zNFcJo ~/PMetadata. */ public Metadata extract() { return extract(new Metadata()); } /** * Performs the Jpeg data extraction, adding found values to the specified * instance of Metadata. */ public Metadata extract(Metadata metadata) { if (_data==null) { return metadata; } JpegCommentDirectory directory = (JpegCommentDirectory)metadata.getDirectory(JpegCommentDirectory.class); directory.setString(JpegCommentDirectory.TAG_JPEG_COMMENT, new String(_data)); return metadata; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/jpeg/JpegComponent.java0000644000000000000000000000423410716136374026053 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on Oct 9, 17:04:07 using IntelliJ IDEA. */ package com.drew.metadata.jpeg; import com.drew.metadata.MetadataException; import java.io.Serializable; /** * Created by IntelliJ IDEA. * User: dnoakes * Date: 09-Oct-2003 * Time: 17:04:07 * To change this template use Options | File Templates. */ public class JpegComponent implements Serializable { private final int _componentId; private final int _samplingFactorByte; private final int _quantizationTableNumber; public JpegComponent(int componentId, int samplingFactorByte, int quantizationTableNumber) { _componentId = componentId; _samplingFactorByte = samplingFactorByte; _quantizationTableNumber = quantizationTableNumber; } public int getComponentId() { return _componentId; } public String getComponentName() throws MetadataException { switch (_componentId) { case 1: return "Y"; case 2: return "Cb"; case 3: return "Cr"; case 4: return "I"; case 5: return "Q"; } throw new MetadataException("Unsupported component id: " + _componentId); } public int getQuantizationTableNumber() { return _quantizationTableNumber; } public int getHorizontalSamplingFactor() { return _samplingFactorByte & 0x0F; } public int getVerticalSamplingFactor() { return (_samplingFactorByte>>4) & 0x0F; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/jpeg/JpegDescriptor.java0000644000000000000000000000642410716136374026232 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.metadata.jpeg; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import com.drew.metadata.TagDescriptor; /** * Provides human-readable string versions of the tags stored in a JpegDirectory. * Thanks to Darrell Silver (www.darrellsilver.com) for the initial version of this class. */ public class JpegDescriptor extends TagDescriptor { public JpegDescriptor(Directory directory) { super(directory); } public String getDescription(int tagType) throws MetadataException { switch (tagType) { case JpegDirectory.TAG_JPEG_COMPONENT_DATA_1: return getComponentDataDescription(0); case JpegDirectory.TAG_JPEG_COMPONENT_DATA_2: return getComponentDataDescription(1); case JpegDirectory.TAG_JPEG_COMPONENT_DATA_3: return getComponentDataDescription(2); case JpegDirectory.TAG_JPEG_COMPONENT_DATA_4: return getComponentDataDescription(3); case JpegDirectory.TAG_JPEG_DATA_PRECISION: return getDataPrecisionDescription(); case JpegDirectory.TAG_JPEG_IMAGE_HEIGHT: return getImageHeightDescription(); case JpegDirectory.TAG_JPEG_IMAGE_WIDTH: return getImageWidthDescription(); } return _directory.getString(tagType); } public String getImageWidthDescription() { return _directory.getString(JpegDirectory.TAG_JPEG_IMAGE_WIDTH) + " pixels"; } public String getImageHeightDescription() { return _directory.getString(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT) + " pixels"; } public String getDataPrecisionDescription() { return _directory.getString(JpegDirectory.TAG_JPEG_DATA_PRECISION) + " bits"; } public String getComponentDataDescription(int componentNumber) throws MetadataException { JpegComponent component = ((JpegDirectory)_directory).getComponent(componentNumber); if (component==null) throw new MetadataException("No Jpeg component exists with number " + componentNumber); StringBuffer sb = new StringBuffer(); sb.append(component.getComponentName()); sb.append(" component: Quantization table "); sb.append(component.getQuantizationTableNumber()); sb.append(", Sampling factors "); sb.append(component.getHorizontalSamplingFactor()); sb.append(" horiz/"); sb.append(component.getVerticalSamplingFactor()); sb.append(" vert"); return sb.toString(); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/jpeg/JpegDirectory.java0000644000000000000000000001067710716136374026065 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created on Aug 2, 2003. */ package com.drew.metadata.jpeg; import com.drew.metadata.Directory; import com.drew.metadata.MetadataException; import java.util.HashMap; /** * Directory of tags and values for the SOF0 Jpeg segment. This segment holds basic metadata about the image. * @author Darrell Silver http://www.darrellsilver.com and Drew Noakes */ public class JpegDirectory extends Directory { /** This is in bits/sample, usually 8 (12 and 16 not supported by most software). */ public static final int TAG_JPEG_DATA_PRECISION = 0; /** The image's height. Necessary for decoding the image, so it should always be there. */ public static final int TAG_JPEG_IMAGE_HEIGHT = 1; /** The image's width. Necessary for decoding the image, so it should always be there. */ public static final int TAG_JPEG_IMAGE_WIDTH = 3; /** Usually 1 = grey scaled, 3 = color YcbCr or YIQ, 4 = color CMYK * Each component TAG_COMPONENT_DATA_[1-4], has the following meaning: * component Id(1byte)(1 = Y, 2 = Cb, 3 = Cr, 4 = I, 5 = Q), * sampling factors (1byte) (bit 0-3 vertical., 4-7 horizontal.), * quantization table number (1 byte). *

* This info is from http://www.funducode.com/freec/Fileformats/format3/format3b.htm */ public static final int TAG_JPEG_NUMBER_OF_COMPONENTS = 5; // NOTE! Component tag type int values must increment in steps of 1 /** the first of a possible 4 color components. Number of components specified in TAG_JPEG_NUMBER_OF_COMPONENTS.*/ public static final int TAG_JPEG_COMPONENT_DATA_1 = 6; /** the second of a possible 4 color components. Number of components specified in TAG_JPEG_NUMBER_OF_COMPONENTS.*/ public static final int TAG_JPEG_COMPONENT_DATA_2 = 7; /** the third of a possible 4 color components. Number of components specified in TAG_JPEG_NUMBER_OF_COMPONENTS.*/ public static final int TAG_JPEG_COMPONENT_DATA_3 = 8; /** the fourth of a possible 4 color components. Number of components specified in TAG_JPEG_NUMBER_OF_COMPONENTS.*/ public static final int TAG_JPEG_COMPONENT_DATA_4 = 9; protected static final HashMap tagNameMap = new HashMap(); static { tagNameMap.put(new Integer(TAG_JPEG_DATA_PRECISION), "Data Precision"); tagNameMap.put(new Integer(TAG_JPEG_IMAGE_WIDTH), "Image Width"); tagNameMap.put(new Integer(TAG_JPEG_IMAGE_HEIGHT), "Image Height"); tagNameMap.put(new Integer(TAG_JPEG_NUMBER_OF_COMPONENTS), "Number of Components"); tagNameMap.put(new Integer(TAG_JPEG_COMPONENT_DATA_1), "Component 1"); tagNameMap.put(new Integer(TAG_JPEG_COMPONENT_DATA_2), "Component 2"); tagNameMap.put(new Integer(TAG_JPEG_COMPONENT_DATA_3), "Component 3"); tagNameMap.put(new Integer(TAG_JPEG_COMPONENT_DATA_4), "Component 4"); } public JpegDirectory() { this.setDescriptor(new JpegDescriptor(this)); } public String getName() { return "Jpeg"; } protected HashMap getTagNameMap() { return tagNameMap; } /** * * @param componentNumber The zero-based index of the component. This number is normally between 0 and 3. * Use getNumberOfComponents for bounds-checking. * @return */ public JpegComponent getComponent(int componentNumber) { int tagType = JpegDirectory.TAG_JPEG_COMPONENT_DATA_1 + componentNumber; JpegComponent component = (JpegComponent)getObject(tagType); return component; } public int getImageWidth() throws MetadataException { return getInt(JpegDirectory.TAG_JPEG_IMAGE_WIDTH); } public int getImageHeight() throws MetadataException { return getInt(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT); } public int getNumberOfComponents() throws MetadataException { return getInt(JpegDirectory.TAG_JPEG_NUMBER_OF_COMPONENTS); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/jpeg/JpegReader.java0000644000000000000000000001213610716136374025313 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on Aug 2, 2003 using IntelliJ IDEA. */ package com.drew.metadata.jpeg; import com.drew.imaging.jpeg.JpegProcessingException; import com.drew.imaging.jpeg.JpegSegmentReader; import com.drew.metadata.Metadata; import com.drew.metadata.MetadataException; import com.drew.metadata.MetadataReader; import java.io.File; import java.io.InputStream; /** * * @author Darrell Silver http://www.darrellsilver.com and Drew Noakes */ public class JpegReader implements MetadataReader { /** * The SOF0 data segment. */ private final byte[] _data; /** * Creates a new JpegReader for the specified Jpeg jpegFile. */ public JpegReader(File jpegFile) throws JpegProcessingException { this(new JpegSegmentReader(jpegFile).readSegment(JpegSegmentReader.SEGMENT_SOF0)); } /** Creates a JpegReader for a JPEG stream. * * @param is JPEG stream. Stream will be closed. */ public JpegReader(InputStream is) throws JpegProcessingException { this(new JpegSegmentReader(is).readSegment(JpegSegmentReader.SEGMENT_APPD)); } public JpegReader(byte[] data) { _data = data; } /** * Performs the Jpeg data extraction, returning a new instance of Metadata. */ public Metadata extract() { return extract(new Metadata()); } /** * Performs the Jpeg data extraction, adding found values to the specified * instance of Metadata. */ public Metadata extract(Metadata metadata) { if (_data==null) { return metadata; } JpegDirectory directory = (JpegDirectory)metadata.getDirectory(JpegDirectory.class); try { // data precision int dataPrecision = get16Bits(JpegDirectory.TAG_JPEG_DATA_PRECISION); directory.setInt(JpegDirectory.TAG_JPEG_DATA_PRECISION, dataPrecision); // process height int height = get32Bits(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT); directory.setInt(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT, height); // process width int width = get32Bits(JpegDirectory.TAG_JPEG_IMAGE_WIDTH); directory.setInt(JpegDirectory.TAG_JPEG_IMAGE_WIDTH, width); // number of components int numberOfComponents = get16Bits(JpegDirectory.TAG_JPEG_NUMBER_OF_COMPONENTS); directory.setInt(JpegDirectory.TAG_JPEG_NUMBER_OF_COMPONENTS, numberOfComponents); // for each component, there are three bytes of data: // 1 - Component ID: 1 = Y, 2 = Cb, 3 = Cr, 4 = I, 5 = Q // 2 - Sampling factors: bit 0-3 vertical, 4-7 horizontal // 3 - Quantization table number int offset = 6; for (int i=0; i=_data.length) { throw new MetadataException("Attempt to read bytes from outside Jpeg segment data buffer"); } return ((_data[offset] & 255) << 8) | (_data[offset + 1] & 255); } /** * Returns an int calculated from one byte of data at the specified offset. * @param offset position within the data buffer to read byte * @return the 16 bit int value, between 0x00 and 0xFF */ private int get16Bits(int offset) throws MetadataException { if (offset>=_data.length) { throw new MetadataException("Attempt to read bytes from outside Jpeg segment data buffer"); } return (_data[offset] & 255); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/jpeg/test/0000755000000000000000000000000010716136374023414 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/jpeg/test/JpegComponentTest.java0000644000000000000000000000303710716136374027672 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 09-Oct-2003 15:22:23 using IntelliJ IDEA. */ package com.drew.metadata.jpeg.test; import com.drew.metadata.jpeg.JpegComponent; import junit.framework.TestCase; /** * */ public class JpegComponentTest extends TestCase { public JpegComponentTest(String s) { super(s); } public void testGetComponentCharacter() throws Exception { JpegComponent component; component = new JpegComponent(1,2,3); assertEquals("Y", component.getComponentName()); component = new JpegComponent(2,2,3); assertEquals("Cb", component.getComponentName()); component = new JpegComponent(3,2,3); assertEquals("Cr", component.getComponentName()); component = new JpegComponent(4,2,3); assertEquals("I", component.getComponentName()); component = new JpegComponent(5,2,3); assertEquals("Q", component.getComponentName()); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/jpeg/test/JpegDescriptorTest.java0000644000000000000000000000602310716136374030044 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes 09-Oct-2003 15:22:23 using IntelliJ IDEA. */ package com.drew.metadata.jpeg.test; import com.drew.metadata.MetadataException; import com.drew.metadata.jpeg.JpegComponent; import com.drew.metadata.jpeg.JpegDescriptor; import com.drew.metadata.jpeg.JpegDirectory; import junit.framework.TestCase; /** * */ public class JpegDescriptorTest extends TestCase { private JpegDirectory _directory; private JpegDescriptor _descriptor; public JpegDescriptorTest(String s) { super(s); } public void setUp() throws Exception { _directory = new JpegDirectory(); _descriptor = new JpegDescriptor(_directory); } public void testGetComponentDataDescription_InvalidComponentNumber() throws Exception { try { _descriptor.getComponentDataDescription(1); fail("Excepted exception"); } catch (MetadataException e) { // expect exception } } public void testGetImageWidthDescription() throws Exception { _directory.setInt(JpegDirectory.TAG_JPEG_IMAGE_WIDTH, 123); assertEquals("123 pixels", _descriptor.getImageWidthDescription()); assertEquals("123 pixels", _directory.getDescription(JpegDirectory.TAG_JPEG_IMAGE_WIDTH)); } public void testGetImageHeightDescription() throws Exception { _directory.setInt(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT, 123); assertEquals("123 pixels", _descriptor.getImageHeightDescription()); assertEquals("123 pixels", _directory.getDescription(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT)); } public void testGetDataPrecisionDescription() throws Exception { _directory.setInt(JpegDirectory.TAG_JPEG_DATA_PRECISION, 8); assertEquals("8 bits", _descriptor.getDataPrecisionDescription()); assertEquals("8 bits", _directory.getDescription(JpegDirectory.TAG_JPEG_DATA_PRECISION)); } public void testGetComponentDescription() throws MetadataException { JpegComponent component1 = new JpegComponent(1, 0x22, 0); _directory.setObject(JpegDirectory.TAG_JPEG_COMPONENT_DATA_1, component1); assertEquals("Y component: Quantization table 0, Sampling factors 2 horiz/2 vert", _directory.getDescription(JpegDirectory.TAG_JPEG_COMPONENT_DATA_1)); assertEquals("Y component: Quantization table 0, Sampling factors 2 horiz/2 vert", _descriptor.getComponentDataDescription(0)); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/jpeg/test/JpegDirectoryTest.java0000644000000000000000000000600310716136374027670 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 09-Oct-2003 15:22:23 using IntelliJ IDEA. */ package com.drew.metadata.jpeg.test; import com.drew.metadata.jpeg.JpegComponent; import com.drew.metadata.jpeg.JpegDirectory; import junit.framework.TestCase; /** * */ public class JpegDirectoryTest extends TestCase { private JpegDirectory _directory; public JpegDirectoryTest(String s) { super(s); } public void setUp() { _directory = new JpegDirectory(); } public void testSetAndGetValue() throws Exception { _directory.setInt(123, 8); assertEquals(8, _directory.getInt(123)); } public void testGetComponent_NotAdded() { assertNull(_directory.getComponent(1)); } // NOTE tests for individual tag values exist in JpegReaderTest.java public void testGetImageWidth() throws Exception { _directory.setInt(JpegDirectory.TAG_JPEG_IMAGE_WIDTH, 123); assertEquals(123, _directory.getImageWidth()); } public void testGetImageHeight() throws Exception { _directory.setInt(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT, 123); assertEquals(123, _directory.getImageHeight()); } public void testGetNumberOfComponents() throws Exception { _directory.setInt(JpegDirectory.TAG_JPEG_NUMBER_OF_COMPONENTS, 3); assertEquals(3, _directory.getNumberOfComponents()); assertEquals("3", _directory.getDescription(JpegDirectory.TAG_JPEG_NUMBER_OF_COMPONENTS)); } public void testGetComponent() throws Exception { JpegComponent component1 = new JpegComponent(1, 2, 3); JpegComponent component2 = new JpegComponent(1, 2, 3); JpegComponent component3 = new JpegComponent(1, 2, 3); JpegComponent component4 = new JpegComponent(1, 2, 3); _directory.setObject(JpegDirectory.TAG_JPEG_COMPONENT_DATA_1, component1); _directory.setObject(JpegDirectory.TAG_JPEG_COMPONENT_DATA_2, component2); _directory.setObject(JpegDirectory.TAG_JPEG_COMPONENT_DATA_3, component3); _directory.setObject(JpegDirectory.TAG_JPEG_COMPONENT_DATA_4, component4); // component numbers are zero-indexed for this method assertSame(component1, _directory.getComponent(0)); assertSame(component2, _directory.getComponent(1)); assertSame(component3, _directory.getComponent(2)); assertSame(component4, _directory.getComponent(3)); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/jpeg/test/JpegReaderTest.java0000644000000000000000000001526210716136374027135 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 09-Oct-2003 15:22:23 using IntelliJ IDEA. */ package com.drew.metadata.jpeg.test; import com.drew.imaging.jpeg.JpegProcessingException; import com.drew.metadata.Metadata; import com.drew.metadata.jpeg.JpegComponent; import com.drew.metadata.jpeg.JpegDirectory; import com.drew.metadata.jpeg.JpegReader; import junit.framework.TestCase; import java.io.File; import java.io.FileNotFoundException; /** * */ public class JpegReaderTest extends TestCase { private JpegDirectory _directory; public JpegReaderTest(String s) { super(s); } public void setUp() throws JpegProcessingException, FileNotFoundException { // use a known testing image File jpegFile = new File("src/com/drew/metadata/jpeg/test/simple.jpg"); JpegReader reader = new JpegReader(jpegFile); Metadata metadata = reader.extract(); assertTrue(metadata.containsDirectory(JpegDirectory.class)); _directory = (JpegDirectory)metadata.getDirectory(JpegDirectory.class); } public void testExtract_Width() throws Exception { assertEquals(800, _directory.getInt(JpegDirectory.TAG_JPEG_IMAGE_WIDTH)); } public void testExtract_Height() throws Exception { assertEquals(600, _directory.getInt(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT)); } public void testExtract_DataPrecision() throws Exception { assertEquals(8, _directory.getInt(JpegDirectory.TAG_JPEG_DATA_PRECISION)); } public void testExtract_NumberOfComponents() throws Exception { assertEquals(3, _directory.getInt(JpegDirectory.TAG_JPEG_NUMBER_OF_COMPONENTS)); } public void testComponentData1() throws Exception { JpegComponent component = (JpegComponent)_directory.getObject(JpegDirectory.TAG_JPEG_COMPONENT_DATA_1); assertEquals("Y", component.getComponentName()); assertEquals(1, component.getComponentId()); assertEquals(0, component.getQuantizationTableNumber()); assertEquals(2, component.getHorizontalSamplingFactor()); assertEquals(2, component.getVerticalSamplingFactor()); } public void testComponentData2() throws Exception { JpegComponent component = (JpegComponent)_directory.getObject(JpegDirectory.TAG_JPEG_COMPONENT_DATA_2); assertEquals("Cb", component.getComponentName()); assertEquals(2, component.getComponentId()); assertEquals(1, component.getQuantizationTableNumber()); assertEquals(1, component.getHorizontalSamplingFactor()); assertEquals(1, component.getVerticalSamplingFactor()); assertEquals("Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert", _directory.getDescription(JpegDirectory.TAG_JPEG_COMPONENT_DATA_2)); } public void testComponentData3() throws Exception { JpegComponent component = (JpegComponent)_directory.getObject(JpegDirectory.TAG_JPEG_COMPONENT_DATA_3); assertEquals("Cr", component.getComponentName()); assertEquals(3, component.getComponentId()); assertEquals(1, component.getQuantizationTableNumber()); assertEquals(1, component.getHorizontalSamplingFactor()); assertEquals(1, component.getVerticalSamplingFactor()); assertEquals("Cr component: Quantization table 1, Sampling factors 1 horiz/1 vert", _directory.getDescription(JpegDirectory.TAG_JPEG_COMPONENT_DATA_3)); } /* // this test is part of an incomplete investigation into extracting audio from JPG files public void testJpegWithAudio() throws Exception { // use a known testing image File jpegFile = new File("src/com/drew/metadata/jpeg/test/audioPresent.jpg"); JpegSegmentReader jpegSegmentReader = new JpegSegmentReader(jpegFile); byte[] segment1Bytes = jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APP2); System.out.println(segment1Bytes.length); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APP1)); System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APP2).length); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APP3)); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APP4)); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APP5)); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APP6)); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APP7)); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APP8)); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APP9)); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APPA)); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APPB)); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APPC)); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APPD)); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APPE)); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_APPF)); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_COM)); System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_DHT).length); System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_DQT).length); System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_SOF0).length); // System.out.println(jpegSegmentReader.readSegment(JpegSegmentReader.SEGMENT_SOI)); // write the segment's data out to a wav file... File audioFile = new File("src/com/drew/metadata/jpeg/test/audio.wav"); FileOutputStream os = null; try { os = new FileOutputStream(audioFile); os.write(segment1Bytes); } finally { if (os!=null) os.close(); } } */ } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/jpeg/test/simple.jpg0000644000000000000000000006124010716136374025412 0ustar rootroot ExifMM* (12<inCanonCanon PowerShot S330QuickTime 6.0.22002:11:18 22:46:09Mac OS X 10.2.2080210@Th px   |V0100@^f / 2002:11:16 15:27:012002:11:16 15:27:01j wݬ +D V  . NV0 / @=8}j00ulIMG:PowerShot S330 JPEGFirmware Version 1.00Matt Magoffin0$( +JFIFHH AppleMark    % #!,!#'(***.1-)1%)*(  (((((((((((((((((((((((((((((((((((((((((((((((((((  }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzw!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzx" ?%8&{T/j̜!Sjҡ)DW|x) .pUD3m]h1ڢhVh&V+Fڔ*]ȶvTi6p( i6Qp)JȈHVVLPjt4ӊd:rbXsNDjkHFg,ZIo*v*0dSЎ=WOF1mnroo)N*Dl&dytyumښ`>9(t3WC{b f}) v Uњc>ҕaW(RW$]ѡu`JpV0נxݓ=k0(U~9nk^kD.J{']̸}ouk a+gn" 1W/^..g^dž5(ApƱkZl\,\L(5OWsND4XWꢵHYJzͥ¾xXJb9+ÙY)i-rWWd~YjR@6=^ ?ʛr#k]%JnW{ԓ_ ɪޖ5E2)`5c&q$95$*=PD4Z(Z8S p"EVZxfr,%YLHnic,ON;.8GnۭY 5evO)=Dx%{ݖj'U2S7n84,o.zJϴqQC,QvmQA4Z()})QKIڝ@M€ 8e:UNQRL͊֨QC5fBJzu `v4қP; JZJc? AppleMark    % #!,!#'(***.1-)1%)*(  (((((((((((((((((((((((((((((((((((((((((((((((((((  }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzw!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzX " ? 1Z($(Pbth8Qn)i{R 48h;PqN nSsH.6v(qLPb`4QNi n)ipihb1@bv(2iؤ"4ъ)bLQKE%%:m Q(Q@(-RLqO"G֝LPQ(PRъJ-ڊfPQEvQEJZ(bb()ԔRb JZ:PJZ(8PQKE%Q@1E%q@ E/JJ(Iv8D1H()E.(4c4֜ Rn)vplbQrn7iƚLSAbup6Lf(?IW.n(;1O%0R❌RwS!E%:@\miP)qAbJu!})h4JAc4b4Rъ%RLBQ^h))Ԇu:1zъu7bILRc=iP!1Iju LRqN&(PE6Z())ؤ))rsE!4JJ)q%\Q@ EPIKEQE%QKE% (4~RQ(Р P)qD Z\Rƚ@)إ1\n)qp+ \P) p& WbbQJJ+1.~PQpDXHE .4bv)q+ƔmZDBZ%%8 LsAJBRS1 b Lq@m8@ Z(1IҝF())Ph-R@ E- n(:bQҝI@ĢPuJ)1KGzLRS(RPRI@zEPQE-%Rb( tb ^ԠPR@K`(4l(4SM)Eb H@&9&I~3AƘQ@!sRb f)1R(ަ+MmbmK) q܋bILo=)JGziR0)zU\ƑHAhIySWLbmbqKGjaq1IK)E-Ҋ1Jh1Jv)1@\J)qGJJ)Mb LS1LZ%.(Q-J=:iqGZmF(1 -h:1KGJB)1N40)ؤ4R1@.(%:E(/9R⳹❊P(KbbobM Z\S,W Kq1J(E-8)4\f)SP4(F81:܎b=l>.=qN@WړmJVr"֜8-%bA4iuG{⟊6ӽR#i1R1=j}iiSrEKiZDE&)i14RIir0⒟bqUv(1&)4bGJ\ 1@!1E/Ҍs@&)آ׵SF(S LPQZ1@\J0iqF( qF)ؤqQKEP@bOu!QKF()1KE6%hb`&))hzmJmv%&(%RubREj Q֐sNQp4zRJzROSr$ѷ.)qMRӭ& \&Mmz pR)؁ii—: @ \RCbh6ԓ3oRRL.GpJ%.Ww"F8 t*RlW (L;ѳ\2= {U"iNyd3`-Nf\Y*ьS8r8ȫ,JT) TijTHR+UrԈvVR"#ڛ7m2F)1I}h3;m!nSIcSQq\n1N7b1G81+₾8;F)hpRbHE3m4iw#ǵ␁N);n("qINpR{&cLSȣӸ0 )LSF( #ғJph;⒟B)b~) 4%)08EIjQINڹ+));R .):"9)I NU ͱh;98 :RMn杷AҜ)\(8jKb*SڦTO9-m&MX 0\¹ip=)ivӸƅ4v࢓laM!LT()J\e!ZJs@WA@{T) \jH0V fPw_1X1M1bXWښWLdfV3!^jrݔ4S\4ҹc&ڲԊqښV+HRR })6i6ӹJDDbTsړm1܏HC(O A;] ɹX!Jf;SvsT2LՍ(jV+yyFdRhzI^hϥ0{S)N^1S?jwfe.*GQx_jL(}*F) R4S*+V S U])VR)m␭LVw-Hm&9Q>bmvI1i0jmi|xTJ3mm qo11Ini ➣R#4h ۚ6SŠvl.G4m)_J..b-ԛNj]4bL/&*\Rm91Iw+fLT1)1ޓi4r"? i)ZiI*b3L+TZddSHRw5C 0ԄTmVSzSM£1djh-h#E:ibcQN#*35y1\OBLi_jcҔ&_9\JMcf=yq܃e&zziZe\(+.]%sIj{⋍H%yѶ16Իhۚwb-ݵ>6bammM]1ќboJZM96ԛp)1EvFVmKjDhS+N!I( 7eM6vN" RmRl4X)L+TjE|SO1_jaI&BE01^*2H,i!Zc oFE4)Vj) :) ▃LcqF)i(aj@BSfpؔ \SKPc;iiX¤^=E<`)Fi T 8qMh1dOZ*UFLp\ȦI$Q~;S<LxH:Tg)@H5"E`8^ChfZr?L}j@)׭Iɺb TX_jVL*4b*ʍåCMX6ԛ1Tgrl{R4Keq8ٚGF@C8c`NUێT< L4y3SL'4(/jGqMh:qL|yڣhEhXQhi3 MFc1U);Tf3W.*) u֯4\m< w-HښVt/4_1P!Jc1+Rl_QIR)&;i6bFi\|>]&T)B{Ӹ6b>6{RaAڍ>ѰNWFʟg_u16T8⍔diԢ$(5$ 9zsJ &CD8NSTZ%j1zR̤iNZ䒃R+ O9[MST3hOVGZPDJ OHR xj0JD5 5JY+RqQ/ZO?25*TQzD2UJNr[<^F3*l1EDG[+Q4t$}BNǥ9Tք[Q1O N8-+Տ4" 8.i]ȥV3xeQ=Lf,|(].f4xLhWT$v[ ԤaO^ _+ځs9>]>f{~:PW7C!ϵD<yy byLB 8B:/)ِQi 5!4A.lbt4Z/jiچRb=Ehqښ`@#LhHJ  1ZrC׊JڪLj*֓GM9jeʕJAZS-Qu&Quޭ*ZevS0ڴGDYL=jC7Ҭ$f}}͐CN"2˹3LKŢL(b,J4@M3Jj<ӃTO-Gj5"V&%.j-ԻhdbPnbZ'O UչfXZ4ؤћ,jniRћ8~iKD UVRd8YCRURK*,oڪ+sLRڹuZFIdY*l`jhOJn&ld\SJf*uibr[AJIV# SHVSV)hߟjs&*"jӊ*oZ91[c&sҠ=ZtPT)L`S*☣ԫhU41R!ٞ[M9b?29#gڵE{P`jw1 Zۚ0d'ٳڝ̌&B֞59 a-kQ5n@M;da=)޶׏֢{Ojs\0{b`cj})ڪR2>y83mM6'.oKci}ځnzm'Af8Cv-ڤ[R{V:C7U}ڇ4]ٶ:O[&=]˥U8dqM6MλE}%sCN=%zS G^U9r9\s1t_kZ|VAl=@{PC!U*ْQTb:u#q l#u5FQZs'ҳZkCԤ2-Wa'ҫ8QATL*v:Ȉ5+ Z7#"ijѺRu4&Z▙ZM }&})3Fi؋TbI8(RKDwf8V&$ϥ("J &&)AGpjLM+Spi,fCRbyIEjSZ#O UfޕK!<5Vɩ7ԴC,\?\Hi\ $;.&N7/3SFc/G-3hY8Va)$VcPdkN9 L&2pT%RiȪ!KV`E) 楫͌ڢIOfȩW# "6;s4zb~"{U1'ZI)n񩑲j8 ֩4ZR*U>Q^GԖQS UGXFZQRO>"juZ0*aElp(q K. _(BQ45sm&,>S=֨ͯ5zRl6fKZӚaAkcҏ(zSևڷ iRJo[e_J>ʾq]ْ"iVZqV⓹a9[}''-Z0iZ 1TruCmn F=*q=Ev+XaTEvJ;+qԹv4agPi4+@4pbXk֜ IW%j&h=Vqd  PnN411zQI(Zm-ڒR!f4uCޔh&"@isLR,~Pi&jKnh+afR yPy#4Ӂa1QNEj!N6$ N45,{h͢Ɏf >aPVOJ(Hl.k9&kΩ=9+2ܭQ&[w֔pj6!M5ZAV3U4K)SwSЙ:X589P֝usR5:QFY h&*xSFj#U&*SI3n+ `G/LإRbC?_㎵C7_zt 852=e8UĐִd)4^W=O\j4sF+ZOm ݵ^m)3\^ +SQE (((((((+3\ Yi?[ұM퇟޹Yޕdfi|7?:1.{\թs޳'V;U);ٍRz*Չ*V fQ"4ƧFkD1iynZJ(7 IKLB҃M(1hK@.i3E-:KB4iҊ.is%!ў})bl?4QH^*I -2(C)3GJDXviE4S\Ӂ)z&ĀӪ1N$1 0RLAXT CF5osk5~s\!s ǩB۱SKG/)> i[$CV^i~H)qZ+v#8Xx5 U$ *]Z&I>^>sXSrVdzֳjw(꜄fz9 Z=Jh!櫽O!WsZ6GDP54j3V4N#4b4U9P!E-'J3H BhQE^QE"E7(^ܚZ-8S;搇3M56Ze-X~iARiXG6=4HKe(56%HGp4MH4@ӁK%@iySJ4L"HAUiv$`Z1\kf)\sʚi=i'PID\\/WaRgKV2q@)5hxMYKg5f&SB6V~VQ9SR'$+' $btkRd[89+3xMuUTyr3\XWIm&aj.S2Yb( ( ( ( ( ( ( ()$ Rbg' _cI暥wcj[Gfd_Ia߮+F`sb\ɜZj(9j;u_4(J޵RCSjGM9y\P1R;`Әd։CISF ^Hi5 U@P>{ъ-Қ(4s( %)i(ZLLtb Fi(w.qIKHLPiiZLXp晚PjDZ`4PEpiޑ6$S.{Tؖ)A3zp4hxqVj5f3UMr6ڭ=)6c#J'JʍRRf6:gtӂ qLAkxˎk7{ofζ iV ֌9RtX\uDsjPwS Gӆ66㋅fhԆy5j;n 8r[RzMcm̻An4U&b^*ƹʤ"ٌ`k$ﵸ"OrFK^yI:1ݤgԾռPϸ+}k^BrkD$ZΚ=MsƋoZםGvh\_=k6{z%z-ǽmdyٮ 6YTކCK6{9d\i5V;NrIUi=WfHFHޕ 59ڡfj{kKCM  TLsN&"F "N՚ҒZ;I@ Fh QIE@@ IZJ@J/RP(ԝii3@KQ@Q4)3Fi?4g7/z,+MJ*D8Si5"c(M3QM.i2I4 ";4QCCzpPI 443hSQ/4jW9H5YMH4i6OZb>~r5895lԞ$*ulYl`7Z *]H] w0О3ޭFqT֬kCG'Z㚥(3|n&g#vQfRFrئ9zȆn6kF98q&#NֲpRܥ)Gc[{ԟld]:}MdTVz5?Gи.RjQ̕˨U &jf5%n5X v8>O\hW͚Z1?>k6kĜ|\uq[rf˲]{In:U$j͑3Hб%OP<֠y}飦$=ꬒlUwsMD1#U:]j'jF5V55:6UX"csTlim4J\MY@i iGbњJ3@ 9Nihhϭ7Z(Q@ Fi:w4(4QK@uRRQEZ(@3HBҁJQHiAtNE+ ^$4?4d~;4iL,<pfKԆH 8kO,ɒQNSK͢QR)d׊6U*qRY Yq?5v7$w©U|XK*0)Ú`'2u=jKkb6}陸hՄ ҤY8ǩT(嚤zZsMgzxY^q?ޝf}>Y~0+F]⠒޳dq֋hMyך5gyך-'Bd4Q5P&/L/Qod4P%/L/Qb qL-L-M(-MfTGHM4*h)4i3JU*❞:P(GRsQ9=T.j6M0Ri CFA!gmPŤ4( ? (P`њZ%(b:P)(AKIK@ŽQ@Qځs@QE (8Җ3E ZJ(RE(5"/n bӺI8SZJ%iSAfiÚoC< hH͎N H: 9qIAO/J6JZxRՌ2"Hqޥ URd8j7W pnqIV,N/RK/ޫ 1N/Fn7%ߎ&jzcP,MFUWiRFYyP<TD/BTLz%2f^/M-Z$TI7KIQ$-!jiܵBE(-MIO2GMM)3UQIAI < RJMK4RHOXDjF8idSM5fqKILa`@ FhP  :ҀcғPIK@J? ^-Q@–K@ KOPGzJZQ\RH)hKH()i)sHBZhRH%-! )›NdsKIKR,pRD6;.9Ҥ( hRdn?,AOvڠӃsE& OU%3җ̪ V J4P ZL((-%%-PR(((Z( (ihԔ EQIր1F1@(BQH(ъ(Rt4 )KHB҃IGJ(Qbl?w\搬Directory of specified type. If this Metadata object already contains * such a directory, it is returned. Otherwise a new instance of this directory will be created and stored within * this Metadata object. * @param type the type of the Directory implementation required. * @return a directory of the specified type. */ public Directory getDirectory(Class type) { if (!Directory.class.isAssignableFrom(type)) { throw new RuntimeException("Class type passed to getDirectory must be an implementation of com.drew.metadata.Directory"); } // check if we've already issued this type of directory if (directoryMap.containsKey(type)) { return (Directory)directoryMap.get(type); } Object directory; try { directory = type.newInstance(); } catch (Exception e) { throw new RuntimeException("Cannot instantiate provided Directory type: " + type.toString()); } // store the directory in case it's requested later directoryMap.put(type, directory); directoryList.add(directory); return (Directory)directory; } /** * Indicates whether a given directory type has been created in this metadata * repository. Directories are created by calling getDirectory(Class). * @param type the Directory type * @return true if the metadata directory has been created */ public boolean containsDirectory(Class type) { return directoryMap.containsKey(type); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/MetadataException.java0000644000000000000000000000217310716136374025755 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 13-Nov-2002 18:10:23 using IntelliJ IDEA. */ package com.drew.metadata; import com.drew.lang.CompoundException; /** * */ public class MetadataException extends CompoundException { public MetadataException(String msg) { super(msg); } public MetadataException(Throwable exception) { super(exception); } public MetadataException(String msg, Throwable innerException) { super(msg, innerException); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/MetadataReader.java0000644000000000000000000000154610716136374025224 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 26-Nov-2002 11:21:43 using IntelliJ IDEA. */ package com.drew.metadata; /** * */ public interface MetadataReader { public Metadata extract(); public Metadata extract(Metadata metadata); } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/SampleUsage.java0000644000000000000000000001274410716136374024571 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 05-Nov-2002 18:57:14 using IntelliJ IDEA. */ package com.drew.metadata; import com.drew.imaging.jpeg.JpegMetadataReader; import com.drew.imaging.jpeg.JpegProcessingException; import com.drew.imaging.jpeg.JpegSegmentReader; import com.drew.metadata.exif.ExifReader; import com.drew.metadata.iptc.IptcReader; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGDecodeParam; import com.sun.image.codec.jpeg.JPEGImageDecoder; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Iterator; /** * */ public class SampleUsage { /** * Constructor which executes multiple sample usages, each of which return the same output. This class showcases * multiple usages of this metadata class library. * @param fileName path to a jpeg file upon which to operate */ public SampleUsage(String fileName) { File jpegFile = new File(fileName); // There are multiple ways to get a Metadata object // Approach 1 // This approach reads all types of known Jpeg metadata (at present, // Exif and Iptc) in a single call. In most cases, this is the most // appropriate usage. try { Metadata metadata = JpegMetadataReader.readMetadata(jpegFile); printImageTags(1, metadata); } catch (JpegProcessingException e) { System.err.println("error 1a"); } // Approach 2 // This approach shows using individual MetadataReader implementations // to read a file. This is less efficient than approach 1, as the file // is opened and read twice. try { Metadata metadata = new Metadata(); new ExifReader(jpegFile).extract(metadata); new IptcReader(jpegFile).extract(metadata); printImageTags(2, metadata); } catch (JpegProcessingException jpe) { System.err.println("error 2a"); } // Approach 3 // As fast as approach 1 (this is what goes on inside the JpegMetadataReader's // readMetadata() method), this code is handy if you want to look into other // Jpeg segments too. try { JpegSegmentReader segmentReader = new JpegSegmentReader(jpegFile); byte[] exifSegment = segmentReader.readSegment(JpegSegmentReader.SEGMENT_APP1); byte[] iptcSegment = segmentReader.readSegment(JpegSegmentReader.SEGMENT_APPD); Metadata metadata = new Metadata(); new ExifReader(exifSegment).extract(metadata); new IptcReader(iptcSegment).extract(metadata); printImageTags(3, metadata); } catch (JpegProcessingException jpe) { System.err.println("error 3a"); } // Approach 4 // This approach is the slowest, because it decodes the Jpeg image. Of // course you now have a decoded image to play with. In some instances // this will be most appropriate. try { JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(new FileInputStream(jpegFile)); BufferedImage image = jpegDecoder.decodeAsBufferedImage(); // now you can use the image JPEGDecodeParam decodeParam = jpegDecoder.getJPEGDecodeParam(); Metadata metadata = JpegMetadataReader.readMetadata(decodeParam); printImageTags(4, metadata); } catch (FileNotFoundException e) { System.err.println("error 4a"); } catch (IOException e) { System.err.println("error 4b"); } } private void printImageTags(int approachCount, Metadata metadata) { System.out.println(); System.out.println("*** APPROACH " + approachCount + " ***"); System.out.println(); // iterate over the exif data and print to System.out Iterator directories = metadata.getDirectoryIterator(); while (directories.hasNext()) { Directory directory = (Directory)directories.next(); Iterator tags = directory.getTagIterator(); while (tags.hasNext()) { Tag tag = (Tag)tags.next(); System.out.println(tag); } if (directory.hasErrors()) { Iterator errors = directory.getErrors(); while (errors.hasNext()) { System.out.println("ERROR: " + errors.next()); } } } } /** * Executes the sample usage program. * @param args command line parameters */ public static void main(String[] args) { new SampleUsage("src/com/drew/metadata/test/withIptcExifGps.jpg"); } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/Tag.java0000644000000000000000000000566510716136374023102 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 26-Nov-2002 18:29:12 using IntelliJ IDEA. */ package com.drew.metadata; import java.io.Serializable; /** * */ public class Tag implements Serializable { private final int _tagType; private final Directory _directory; public Tag(int tagType, Directory directory) { _tagType = tagType; _directory = directory; } /** * Gets the tag type as an int * @return the tag type as an int */ public int getTagType() { return _tagType; } /** * Gets the tag type in hex notation as a String with padded leading * zeroes if necessary (i.e. 0x100E). * @return the tag type as a string in hexadecimal notation */ public String getTagTypeHex() { String hex = Integer.toHexString(_tagType); while (hex.length() < 4) hex = "0" + hex; return "0x" + hex; } /** * Get a description of the tag's value, considering enumerated values * and units. * @return a description of the tag's value */ public String getDescription() throws MetadataException { return _directory.getDescription(_tagType); } /** * Get the name of the tag, such as Aperture, or * InteropVersion. * @return the tag's name */ public String getTagName() { return _directory.getTagName(_tagType); } /** * Get the name of the directory in which the tag exists, such as * Exif, GPS or Interoperability. * @return name of the directory in which this tag exists */ public String getDirectoryName() { return _directory.getName(); } /** * A basic representation of the tag's type and value in format: * FNumber - F2.8. * @return the tag's type and value */ public String toString() { String description; try { description = getDescription(); } catch (MetadataException e) { description = _directory.getString(getTagType()) + " (unable to formulate description)"; } return "[" + _directory.getName() + "] " + getTagName() + " - " + description; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/TagDescriptor.java0000644000000000000000000000353510716136374025133 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ */ package com.drew.metadata; import java.io.Serializable; /** * Abstract base class for all tag descriptor classes. Implementations are responsible for * providing the human-readable string represenation of tag values stored in a directory. * The directory is provided to the tag descriptor via its constructor. */ public abstract class TagDescriptor implements Serializable { protected final Directory _directory; public TagDescriptor(Directory directory) { _directory = directory; } /** * Returns a descriptive value of the the specified tag for this image. * Where possible, known values will be substituted here in place of the raw * tokens actually kept in the Exif segment. If no substitution is * available, the value provided by getString(int) will be returned. *

* This and getString(int) are the only 'get' methods that won't throw an * exception. * @param tagType the tag to find a description for * @return a description of the image's value for the specified tag, or * null if the tag hasn't been defined. */ public abstract String getDescription(int tagType) throws MetadataException; } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/test/0000755000000000000000000000000010716136374022467 5ustar rootrootlibmetadata-extractor-java-2.3.1/src/com/drew/metadata/test/AllTests.java0000644000000000000000000000567110716136374025076 0ustar rootroot/* * AllTests.java * * Test suite class written by Drew Noakes. * * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 26-Oct-2002 16:29:44 using IntelliJ IDEA. * - First collection of basic unit tests, to compile against JUnit * - Doesn't yet cover all classes */ package com.drew.metadata.test; import com.drew.imaging.jpeg.test.JpegMetadataReaderTest; import com.drew.imaging.jpeg.test.JpegSegmentDataTest; import com.drew.imaging.jpeg.test.JpegSegmentReaderTest; import com.drew.lang.test.CompoundExceptionTest; import com.drew.lang.test.NullOutputStreamTest; import com.drew.lang.test.RationalTest; import com.drew.metadata.exif.test.*; import com.drew.metadata.iptc.test.IptcReaderTest; import com.drew.metadata.jpeg.test.JpegComponentTest; import com.drew.metadata.jpeg.test.JpegDescriptorTest; import com.drew.metadata.jpeg.test.JpegDirectoryTest; import com.drew.metadata.jpeg.test.JpegReaderTest; import junit.framework.Test; import junit.framework.TestSuite; /** * The complete test suite for the metadata-extractor library. * @author Drew Noakes http://drewnoakes.com */ public class AllTests extends TestSuite { public static Test suite() { TestSuite suite = new TestSuite(); suite.addTestSuite(DirectoryTest.class); suite.addTestSuite(ExifDirectoryTest.class); suite.addTestSuite(ExifReaderTest.class); suite.addTestSuite(ExifDescriptorTest.class); suite.addTestSuite(IptcReaderTest.class); suite.addTestSuite(MetadataTest.class); suite.addTestSuite(JpegReaderTest.class); suite.addTestSuite(JpegSegmentDataTest.class); suite.addTestSuite(JpegDirectoryTest.class); suite.addTestSuite(JpegComponentTest.class); suite.addTestSuite(JpegDescriptorTest.class); suite.addTestSuite(NikonType1MakernoteTest.class); suite.addTestSuite(NikonType2MakernoteTest1.class); suite.addTestSuite(NikonType2MakernoteTest2.class); suite.addTestSuite(CanonMakernoteDescriptorTest.class); suite.addTestSuite(CompoundExceptionTest.class); suite.addTestSuite(NullOutputStreamTest.class); suite.addTestSuite(RationalTest.class); suite.addTestSuite(JpegMetadataReaderTest.class); suite.addTestSuite(JpegSegmentReaderTest.class); return suite; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/test/DirectoryTest.java0000644000000000000000000001047310716136374026143 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 29-Nov-2002 08:40:07 using IntelliJ IDEA. */ package com.drew.metadata.test; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import junit.framework.TestCase; import java.util.GregorianCalendar; /** * */ public class DirectoryTest extends TestCase { public DirectoryTest(String s) { super(s); } public void testSetAndGetInt() throws Exception { Metadata metadata = new Metadata(); Directory directory = metadata.getDirectory(MockDirectory.class); int value = 321; int tagType = 123; directory.setInt(tagType, value); assertEquals(value, directory.getInt(tagType)); assertEquals(Integer.toString(value), directory.getString(tagType)); } public void testSetAndGetIntArray() throws Exception { Metadata metadata = new Metadata(); Directory directory = metadata.getDirectory(MockDirectory.class); int[] inputValues = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int tagType = 123; directory.setIntArray(tagType, inputValues); int[] outputValues = directory.getIntArray(tagType); assertEquals(inputValues.length, outputValues.length); for (int i = 0; i < inputValues.length; i++) { int inputValue = inputValues[i]; int outputValue = outputValues[i]; assertEquals(inputValue, outputValue); } assertEquals(inputValues, directory.getIntArray(tagType)); StringBuffer outputString = new StringBuffer(); for (int i = 0; i < inputValues.length; i++) { int inputValue = inputValues[i]; if (i > 0) { outputString.append(' '); } outputString.append(inputValue); } assertEquals(outputString.toString(), directory.getString(tagType)); } public void testSetStringAndGetDate() throws Exception { Metadata metadata = new Metadata(); Directory directory = metadata.getDirectory(MockDirectory.class); String date1 = "2002:01:30 24:59:59"; String date2 = "2002:01:30 24:59"; String date3 = "2002-01-30 24:59:59"; String date4 = "2002-01-30 24:59"; directory.setString(1, date1); directory.setString(2, date2); directory.setString(3, date3); directory.setString(4, date4); assertEquals(date1, directory.getString(1)); assertEquals(new GregorianCalendar(2002, GregorianCalendar.JANUARY, 30, 24, 59, 59).getTime(), directory.getDate(1)); assertEquals(new GregorianCalendar(2002, GregorianCalendar.JANUARY, 30, 24, 59, 0).getTime(), directory.getDate(2)); assertEquals(new GregorianCalendar(2002, GregorianCalendar.JANUARY, 30, 24, 59, 59).getTime(), directory.getDate(3)); assertEquals(new GregorianCalendar(2002, GregorianCalendar.JANUARY, 30, 24, 59, 0).getTime(), directory.getDate(4)); } public void testSetIntArrayGetByteArray() throws Exception { Metadata metadata = new Metadata(); Directory directory = metadata.getDirectory(MockDirectory.class); int[] ints = {1, 2, 3, 4, 5}; directory.setIntArray(1, ints); assertEquals(ints.length, directory.getByteArray(1).length); assertEquals(1, directory.getByteArray(1)[0]); } public void testSetStringGetInt() throws Exception { Metadata metadata = new Metadata(); Directory directory = metadata.getDirectory(MockDirectory.class); byte[] bytes = { 0x01, 0x02, 0x03 }; directory.setString(1, new String(bytes)); assertEquals(0x010203, directory.getInt(1)); } }libmetadata-extractor-java-2.3.1/src/com/drew/metadata/test/MetadataTest.java0000644000000000000000000001710310716136374025714 0ustar rootroot/* * MetadataTest.java * * Test class written by Drew Noakes. * * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 26-Oct-2002 18:35:12 using IntelliJ IDEA. */ package com.drew.metadata.test; import com.drew.imaging.jpeg.JpegMetadataReader; import com.drew.lang.NullOutputStream; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import com.drew.metadata.exif.ExifDirectory; import com.drew.metadata.exif.GpsDirectory; import com.drew.metadata.iptc.IptcDirectory; import junit.framework.TestCase; import java.io.*; import java.util.Iterator; /** * JUnit test case for class Metadata. * @author Drew Noakes http://drewnoakes.com */ public class MetadataTest extends TestCase { public MetadataTest(String s) { super(s); } public void testSetAndGetSingleTag() throws Exception { Metadata metadata = new Metadata(); Directory directory = metadata.getDirectory(ExifDirectory.class); directory.setInt(ExifDirectory.TAG_APERTURE, 1); assertEquals(1, directory.getInt(ExifDirectory.TAG_APERTURE)); } public void testSetSameTagMultpleTimes() throws Exception { Metadata metadata = new Metadata(); Directory directory = metadata.getDirectory(ExifDirectory.class); directory.setInt(ExifDirectory.TAG_APERTURE, 1); directory.setInt(ExifDirectory.TAG_APERTURE, 2); assertEquals("setting the tag with a different value should override old value", 2, directory.getInt(ExifDirectory.TAG_APERTURE)); } public void testGetDirectory() throws Exception { Metadata metadata = new Metadata(); assertTrue(metadata.getDirectory(ExifDirectory.class) instanceof ExifDirectory); } public void testSetAndGetMultipleTagsInSingleDirectory() throws Exception { Metadata metadata = new Metadata(); Directory exifDir = metadata.getDirectory(ExifDirectory.class); exifDir.setString(ExifDirectory.TAG_APERTURE, "Tag Value"); exifDir.setString(ExifDirectory.TAG_BATTERY_LEVEL, "Another tag"); assertEquals("Tag Value", exifDir.getString(ExifDirectory.TAG_APERTURE)); assertEquals("Another tag", exifDir.getString(ExifDirectory.TAG_BATTERY_LEVEL)); } public void testSetAndGetMultipleTagsInMultilpeDirectories() throws Exception { Metadata metadata = new Metadata(); Directory exifDir = metadata.getDirectory(ExifDirectory.class); Directory gpsDir = metadata.getDirectory(GpsDirectory.class); exifDir.setString(ExifDirectory.TAG_APERTURE, "ExifAperture"); exifDir.setString(ExifDirectory.TAG_BATTERY_LEVEL, "ExifBatteryLevel"); gpsDir.setString(GpsDirectory.TAG_GPS_ALTITUDE, "GpsAltitude"); gpsDir.setString(GpsDirectory.TAG_GPS_DEST_BEARING, "GpsDestBearing"); assertEquals("ExifAperture", exifDir.getString(ExifDirectory.TAG_APERTURE)); assertEquals("ExifBatteryLevel", exifDir.getString(ExifDirectory.TAG_BATTERY_LEVEL)); assertEquals("GpsAltitude", gpsDir.getString(GpsDirectory.TAG_GPS_ALTITUDE)); assertEquals("GpsDestBearing", gpsDir.getString(GpsDirectory.TAG_GPS_DEST_BEARING)); } /* public void testCountTags() throws Exception { Metadata info = new Metadata(); assertEquals(0, info.countTags()); info.setString(ExifReader.DIRECTORY_EXIF_EXIF, ExifDirectory.TAG_APERTURE, "ExifAperture"); assertEquals(1, info.countTags()); info.setString(ExifReader.DIRECTORY_EXIF_EXIF, ExifDirectory.TAG_BATTERY_LEVEL, "ExifBatteryLevel"); assertEquals(2, info.countTags()); info.setString(ExifReader.DIRECTORY_EXIF_GPS, GpsDirectory.TAG_GPS_ALTITUDE, "GpsAltitude"); assertEquals(3, info.countTags()); info.setString(ExifReader.DIRECTORY_EXIF_GPS, GpsDirectory.TAG_GPS_DEST_BEARING, "GpsDestBearing"); assertEquals(4, info.countTags()); } */ public void testContainsTag() throws Exception { Metadata metadata = new Metadata(); Directory exifDir = metadata.getDirectory(ExifDirectory.class); assertTrue(!exifDir.containsTag(ExifDirectory.TAG_APERTURE)); exifDir.setString(ExifDirectory.TAG_APERTURE, "Tag Value"); assertTrue(exifDir.containsTag(ExifDirectory.TAG_APERTURE)); } public void testGetNonExistantTag() throws Exception { Metadata metadata = new Metadata(); Directory exifDir = metadata.getDirectory(ExifDirectory.class); assertEquals(null, exifDir.getString(ExifDirectory.TAG_APERTURE)); } public void testHasErrors() throws Exception { Metadata metadata = JpegMetadataReader.readMetadata(new File("src/com/drew/metadata/exif/test/badExif.jpg")); assertTrue("exif error", metadata.getDirectory(ExifDirectory.class).hasErrors()); metadata = JpegMetadataReader.readMetadata(new File("src/com/drew/metadata/exif/test/withExif.jpg")); assertTrue("no errors", !metadata.getDirectory(ExifDirectory.class).hasErrors()); } public void testGetErrors() throws Exception { Metadata metadata = JpegMetadataReader.readMetadata(new File("src/com/drew/metadata/exif/test/badExif.jpg")); Iterator errors = metadata.getDirectory(ExifDirectory.class).getErrors(); assertTrue(errors.hasNext()); String error = (String) errors.next(); assertEquals("Exif data segment must contain at least 14 bytes", error); assertTrue(!errors.hasNext()); } public void testGetErrorCount() throws Exception { Metadata metadata = JpegMetadataReader.readMetadata(new File("src/com/drew/metadata/exif/test/badExif.jpg")); assertEquals(1, metadata.getDirectory(ExifDirectory.class).getErrorCount()); } public void testMetadataSerializable() throws Exception { Metadata metadata = JpegMetadataReader.readMetadata(new File("src/com/drew/metadata/test/withIptcExifGps.jpg")); new ObjectOutputStream(new NullOutputStream()).writeObject(metadata); } public void testSerializeAndRestore() throws Exception { Metadata metadataWrite = JpegMetadataReader.readMetadata(new File("src/com/drew/metadata/test/withIptcExifGps.jpg")); Metadata metadataRead; File ser = File.createTempFile("test", "ser"); try { // write the ser object new ObjectOutputStream(new FileOutputStream(ser)).writeObject(metadataWrite); // read the ser object metadataRead = (Metadata)new ObjectInputStream(new FileInputStream(ser)).readObject(); // make sure they're equivalent // TODO should compare the two objects via iteration of directories and tags assertTrue(metadataRead.containsDirectory(ExifDirectory.class)); assertTrue(metadataRead.containsDirectory(IptcDirectory.class)); } finally { ser.delete(); } } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/test/MockDirectory.java0000644000000000000000000000215710716136374026115 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 29-Nov-2002 09:07:43 using IntelliJ IDEA. */ package com.drew.metadata.test; import com.drew.metadata.Directory; import java.util.HashMap; public class MockDirectory extends Directory { private final HashMap _tagNameMap; public MockDirectory() { this._tagNameMap = new HashMap(); } public String getName() { return ""; } protected HashMap getTagNameMap() { return _tagNameMap; } } libmetadata-extractor-java-2.3.1/src/com/drew/metadata/test/SpecialTests.java0000644000000000000000000001202710716136374025737 0ustar rootroot/* * This is public domain software - that is, you can do whatever you want * with it, and include it software that is licensed under the GNU or the * BSD license, or whatever other licence you choose, including proprietary * closed source licenses. I do ask that you leave this header in tact. * * If you make modifications to this code that you think would benefit the * wider community, please send me a copy and I'll post it on my site. * * If you make use of this code, I'd appreciate hearing about it. * drew@drewnoakes.com * Latest version of this software kept at * http://drewnoakes.com/ * * Created by dnoakes on 07-May-2005 12:38:18 using IntelliJ IDEA. */ package com.drew.metadata.test; import com.drew.imaging.jpeg.JpegMetadataReader; import com.drew.imaging.jpeg.JpegProcessingException; import com.drew.imaging.jpeg.JpegSegmentData; import com.drew.imaging.jpeg.JpegSegmentReader; import junit.framework.TestCase; import java.io.File; import java.io.FileOutputStream; import java.io.ObjectOutputStream; /** * */ public class SpecialTests extends TestCase { public void testExtractMetadataToASeparateFile() throws Exception { String filename = "src/com/drew/metadata/exif/test/nikonMakernoteType2"; JpegSegmentData segmentData = new JpegSegmentReader(new File(filename + ".jpg")).getSegmentData(); segmentData.removeSegment(JpegSegmentReader.SEGMENT_DHT); segmentData.removeSegment(JpegSegmentReader.SEGMENT_DQT); segmentData.removeSegment(JpegSegmentReader.SEGMENT_SOF0); segmentData.removeSegment(JpegSegmentReader.SEGMENT_SOI); ObjectOutputStream outputStream = null; try { outputStream = new ObjectOutputStream(new FileOutputStream(new File(filename + ".metadata"))); outputStream.writeObject(segmentData); } finally { if (outputStream!=null) outputStream.close(); } } public void testScanFoldersForImagesThatCauseFailures() throws Exception { // String directory = "G:/Recovered Images/AquariumC"; // 1446 files 883 MB (done) // String directory = "G:/Recovered Images/AquariumF"; // 25,378 files 34.4 GB // String directory = "G:/Recovered Images/DesktopC"; // 41,518 files 8.73 GB // String directory = "G:/Recovered Images/DesktopF"; // 8,016 files 5.11 GB (done) // String directory = "C:/Documents and Settings/Drew/My Documents/IntelliJ Projects/MetadataExtractor/src/"; // String directory = "C:/Documents and Settings/Drew/My Documents/IntelliJ Projects/MetadataExtractor/Sample Images"; String directory = "\\\\annie\\htdocs\\drewnoakes.com\\code\\exif\\exifImages"; processDirectory(directory); System.out.println("Complete test successfully."); } private void processDirectory(String pathName) { File directory = new File(pathName); String[] directoryItems = directory.list(); if (directoryItems==null) return; for (int i=0; iunZƵ]k}Էf7-1xgfPl=*QUuVWw]a֨W)_'SU/5K5[:$Y#Y5!O4*۲|9x::χ5f~ihԤsEu<`cvl|~ov0$ysIqߚhu P\Zmi-pn?}ٳP}ݖ쥁e|6 z9_*^/GEm`A659iȣ=V}ZP,/~eO?o[|8N̹D@D7ڞ#h% -79dMʶ100iwu, 4S0l-ߺ6.G '0\ro`sA?;+vSbߍGCV욻Nt45KF5;V_QfT x 0Xi߲Y7Z}FHO{-nq\<PX6`5?i;wgk:FM&LSh.[ߴsٳn*~]w1+c1lߢoWF`JaJ)eYqՕcˁs9ߥc,Ŧcok$Z d/?Foڻՠz&=xQvVo\ߟgWdK_`-3XwmwPIJQlP.>m}OFS_p"~{kۃw5ETHWG}B=2{Fݣvs6ޟU4utAS`|J굎wՂsDD7:SJe LѢ):&V;Gs jC{Zo?EV ~Ӊ4 `vv 츳esk=Rksյ[s/[Sksa=?ؕy^=ci7׳Kll7vֳON|_]Zmַ55] +(z;^Ż6nkk'ꈪa>nOf;j^wA7{ֶemd;tIhﴆoآܪ3W4IovAޘdQ=s]Ei[_]4:7u-eLHGc~dAiX?k[ۑV5iH!{~kmb'K`\ \omgFً[M-yƵ%~b+GReW21 ^E1+}kIHTю{ɓR,ҤHI:JpCr*qZdз863}];YԲsv׋uzMUK2-u{Eoc۠p3cIҭoӛ[L'mMl\.488K{nM?3" ܛ2to:} |m#6=g5[81ɱ>Ͷh}Sw{jB_dv^6m!ލb?1kӈCcKn힕ߦjobczfCbܨ{:X>8[]!ؗY a@#PV.6R\ӵho{w~bVkǽ,55as}9E$MUd,4rrXln :ʬ۹̬OQ\G-f,oRT{, Z-#=Ssh#$ā3B^(i=GYx׽7p+BŢ-Tٰ%čxFCʒ1:wY(orHK׹5AyYOgڿ kp{ ns*c+m_~ۗ&N뢧lI{1]uf?}:Dkn7Z^=w.߻H/kA?(Tt7WkuXzmߧg-Nmư u#_)q;1CUXF<ȴ+Tm -ia-KSAnN%Ըp[RU bW8tnʺ[}6m}K]"=wTv {{s13P~2YUJr,ǵVvOOܪFTu cQ EW o)4^YchNV!-z0JU@$'迶 obDK%/hGǂ$O FTXlc_nWgoUc O0?Vޫs ͛$#c}mt76z_m#+~FٷFm>IX0˯ K1 Iѯ19yINq.lonWO{;h=; T_AW\Jpm[wq]'>\=_[%k,>R-FPhotoshop 3.08BIMxCommunicationsz Ian BrittoniCommunicationsP Ian BrittonU Photographern Ian Brittons FreeFoto.comCommunications720020620Z _ eUbited KingdomBUSCommunications 5Communicationstian Britton - FreeFoto.com8BIM%Dm`˱?BD 68BIM,,8BIM&?8BIM 8BIM8BIM 8BIM 8BIM www.freefoto.com8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM8BIMK@ ` 04_02_10_a5 `@nullboundsObjcRct1Top longLeftlongBtomlong@Rghtlong `slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlong@Rghtlong `urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM8BIM jUNJFIFHH Adobe_CMAdobed            U"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ? ֓;~)'`PH)5vհ k&M7mgfma;SpyCίm>unZƵ]k}Էf7-1xgfPl=*QUuVWw]a֨W)_'SU/5K5[:$Y#Y5!O4*۲|9x::χ5f~ihԤsEu<`cvl|~ov0$ysIqߚhu P\Zmi-pn?}ٳP}ݖ쥁e|6 z9_*^/GEm`A659iȣ=V}ZP,/~eO?o[|8N̹D@D7ڞ#h% -79dMʶ100iwu, 4S0l-ߺ6.G '0\ro`sA?;+vSbߍGCV욻Nt45KF5;V_QfT x 0Xi߲Y7Z}FHO{-nq\<PX6`5?i;wgk:FM&LSh.[ߴsٳn*~]w1+c1lߢoWF`JaJ)eYqՕcˁs9ߥc,Ŧcok$Z d/?Foڻՠz&=xQvVo\ߟgWdK_`-3XwmwPIJQlP.>m}OFS_p"~{kۃw5ETHWG}B=2{Fݣvs6ޟU4utAS`|J굎wՂsDD7:SJe LѢ):&V;Gs jC{Zo?EV ~Ӊ4 `vv 츳esk=Rksյ[s/[Sksa=?ؕy^=ci7׳Kll7vֳON|_]Zmַ55] +(z;^Ż6nkk'ꈪa>nOf;j^wA7{ֶemd;tIhﴆoآܪ3W4IovAޘdQ=s]Ei[_]4:7u-eLHGc~dAiX?k[ۑV5iH!{~kmb'K`\ \omgFً[M-yƵ%~b+GReW21 ^E1+}kIHTю{ɓR,ҤHI:JpCr*qZdз863}];YԲsv׋uzMUK2-u{Eoc۠p3cIҭoӛ[L'mMl\.488K{nM?3" ܛ2to:} |m#6=g5[81ɱ>Ͷh}Sw{jB_dv^6m!ލb?1kӈCcKn힕ߦjobczfCbܨ{:X>8[]!ؗY a@#PV.6R\ӵho{w~bVkǽ,55as}9E$MUd,4rrXln :ʬ۹̬OQ\G-f,oRT{, Z-#=Ssh#$ā3B^(i=GYx׽7p+BŢ-Tٰ%čxFCʒ1:wY(orHK׹5AyYOgڿ kp{ ns*c+m_~ۗ&N뢧lI{1]uf?}:Dkn7Z^=w.߻H/kA?(Tt7WkuXzmߧg-Nmư u#_)q;1CUXF<ȴ+Tm -ia-KSAnN%Ըp[RU bW8tnʺ[}6m}K]"=wTv {{s13P~2YUJr,ǵVvOOܪFTu cQ EW o)4^YchNV!-z0JU@$'迶 obDK%/hGǂ$O FTXlc_nWgoUc O0?Vޫs ͛$#c}mt76z_m#+~FٷFm>IX0˯ K1 Iѯ19yINq.lonWO{;h=; T_AW\Jpm[wq]'>\=_[%k,>R-8BIM!UAdobe PhotoshopAdobe Photoshop 7.08BIM http://ns.adobe.com/xap/1.0/ Ian Britton Communications Photographer Ian Britton FreeFoto.com Ubited Kingdom BUS 2002-06-20 5 Communications Photographer adobe:docid:photoshop:84d4dba8-9b11-11d6-895d-c4d063a70fb0 www.freefoto.com True Communications Ian Britton Communications ian Britton - FreeFoto.com Communications XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmAdobed@C    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X"L "2!1#ABQRbr3aq$Cs%4D5Sc&t(!"12AB#R3aQq ?M$׮i&!$ЀHB!$ in\UUhڙyΑr[5xs"֣]psG\*&t `%d1Z=V}'UT9 85Mݟ7~xւEH;rc볝VYQq8n@X ~ÓM 7KmLdodY,Z/L-ٻ_Kڏ}] ّVi`ժDz3jt4` 2fٽ |ˊkm$YO1μ\=VP#1IwvbsEO5#*XzVfm)+lMQHI -:MpH2Fd)EJAX,NZX/:cGr;R4T q2mԢ-1tY}KCkouzLEڣXeǟU*(gt*ch;N;m߿RI7t1xAQvN;vYoFVjzQ%+nHh5Kk"-:Z&}@%.q|S K l `K2ם [$lsCՕVopF|Z՛E^I*G&6ۿbܵHk)1pskχh&ePQ55Npy$TdAmfm[kijz8}Ѻ6N')ZNtJt&)h]qW4+Jm\bk,=.ĵ1`I0$f\&4۱R i=rrbm#/F&^VRg6f(q}!*ˁlzSf m꾢6 *slH%QFfEWʢcVv/W]@g?b]u*yQ/sYuf&RdPĐh(bmH*Γw \~,A4\9&z9l䵣z$2FhҤdô! BA;dII HI0i$.PIM$0!  !$B@$!4Ϩ׆U~'V.LELȦzwesC|{;:n)9Ǚ#}&r.6xg\^y06jC39p6^ qcфGZ-|^dBS F]l;k& H5#,ɬ,!ǯWY dA OJl򇙢mW4۹h͊+N>.𸐳^I \:'Y9#˘&EFZH6ZrHY^])!Ȥ|b⭪PmɊoyɏ*N! &o8}|sqWԤ@"bgحKDX f&w<9xoRFO$ &ayﮓ {ꖝOOa#p""~C{ɡbL# $0zb=gm6}T/paS?%rPҝv* VԤ 8{M1ve]]j,۴-4 Q24=(B@Вh7BEFٸd>h qW6Tr1Np2KQȉhH(+ Nr ȘkϯJFaɄTEI%r*GX+%R6݇E&G=ECkU:5W2n,8ų$#zc.Y bxɳ"|3#鵣+)l%,ISRGs9lT Շߗ_zӿVi9qYx1ws ֤+[,AO G-!s*Y<{C줚Oc/OA+QŧYfqOے+L*^P#y 2qXmy.V"6܋"U$ъӒNy#7*4{dЧ%qMʼΓsȸXMBvmys?Y3kBk7NcӤ3 La;Hw\'k :BH@ !$%[]#rKZdB$-q-M$BiM@$!BBA B 9CNIIJbǘcdo ޟ«Lr%s.mwY}+peR|X׷`8IJ@#RkTk6T\fؿʪFYdd.Vd ֏-ez~Q!з rG`^/M|ͩW;cgL3b$ݼދ4<̎ωv\9H}Pnԣ3u] ^C<:Q)']{#b-da [rZ1pVxOZ)=q <^k}tru.C#ܸ(_."gq,Iinڳ6jSN"ݨ_ yo7KYfxvwo֚( ɹBh@$ !$l3+/S֗Kw:KBH<8gҬ WDH9yy ٱG-X/"f191CFgLoc lf<(ʻDsEta٩׏!iPn?ȉ'-NC4=j*"#6~t9V'8ߎImS [Coջb|4kw[$e'Jq9J`WSDǶ͒9aւjB'Dı]3׋I0$M.Q;h /X}*bұK1ud71|D,mB.YƶV.K|_Yz8#ib'K_ cgg>L@]֢2utglHv\u/EDWwgoVEpAb`LpF $4(0 t.ֈn4iKtnuB4.P!#B&BhHI!@ &$)9 U4p$<ŋӓ1Ie~Up 3]TN1Ya~Uv56)e '<)W75vH.MY1Xh`-u2VCBI&iSIBDЂgkK>†"V}diԯJCb9o*@9%5"joXCr-DOG_((YTcy[' 9;F~t}(t ]oMNP9>߯ҭh,ЭfH&,F1UԖ86vlC‹4h1*8dr9޴TE қDq`Z3IqrͲQtCo[,Dus.FE8$B 0@8-uFDKvvשlK( V/w61,ےNc kldu!O=P:^FDQ޹0eKC6ޅ׏R%fxSdXt/1B=E$K;FEӗX%+ ͌;Y7BC[8/R|*χVb1@t"$l%H B$"9TMΗ^q^B/xxK5⏨*J)º0wtnBKu{$&nFnI!2 ! & 4!``$Bi )֒ݘ>k",)'f}wQ˗͘N1"Bb}$V>8bq $U%x+xxSqT,֨>+ʩv\[BZ2bOV(dHtSNn,&E ޭXUɏcI>UZᨑґ+oP;?c:K~P"+ƮXY]ߣUj1*"UӵMahbb-`ˊ{V^-hjUNHєssU/UO1s-;,mX"a(ɋ%hbjf>v(0.e9 EV>*V?S-7ZCy "?C_G:CiF2gٝ,'a+i/zT8robT^{2XeA<̾T6p|L8ح(5 Z|Jg[= kp݇ *[7^Z=IZ'{ukg rh$V`˸aoKInU*<,kSZLrx"K> %˩koQT< g0a2U]w-4qaw} !X*iN.֬Ze ٦f|L&hk ZYci3`%iRXx%'1}1tg E7\HE(2.44kJsK%MbPU-m#bc,mjPf#WRCm $3 Dߤ{McQk#dJ>k ά;^ѿέدJ)GvEw]Ömܫi/pnf\rGOrT Fy+m-7Ph$QS7r9x2j6!}PR BUN)ܙ7fk,GT*EƄ!Q!!@ &$(倩kXN)vs=ׯ x |Ԛrd&e\½|1r//({,px3AIGIza(1unҖԯ0pl1p9 % $ЏZgiǢ\\ObLxZbXƗ.yRIkY\rJ,UMP7__.Yxd /IJ+QYBZt/Zy>-?^M^tղ+lL1kb5?X.ΥN-J6'debWlx?XVd5c/:KKNT[nſ~Q*l6 zL!;ҷPf 7fBuyCWۅ+|.7h gzÏI-僡ÿb?uxO BUL!L!& BB :M$BHBB H)F݃å뚜,m9r.oWkjp[2DK:sZէ,f61qga_"^<= Lr/X=qbŗeKڧgX)y VӯIʫ}'.Xe4u|XKF+cB%#v8xb$lM[uy[n26{+^)He',vfǻ} A SrNO?Wpz+ѓ4QdNk\v{Q,%C"mSuѩ,QMB9 "6vU<ǐxS'W#,yr6C'I7!)V52ٖ8#E [s ,Y>pF&1b{?[3,oޤV .ieJB0!aqfݷoq[Z9 ? p~lvs߹sj]rWlyGg pXX-w=4WA֘K7FHIf[j[GyZq8 }1~ z})=B)ïTZ6 ժnJ)7}YK)#/|UՊ:v<q~ojX P JgjUֺkUIkWح- !4h@$Є9?wH*wfSLVFG0-GpyJOs^[ZL g8YIfw'QјÆC̭P%Tchub`._G{W,{RmǕÇ"k`})8mbupjR?ix~3qXkbN"fN}F]KwKZ\o2$[oBH/]WvP9W$.5c&'oWi7ybݼ}XɭZ?Tw0D&+SA]Xm*[5K(ҷU##r&v+Njlsٱ {t*kU!aXE Lā߿SO7 4'Պ Gi]k!rؚGvw0]KgSB!@BHM !I5I4$ BR@؏QȒn_7;CbXwINXTLBY<1hܐBI[yg 1%ْa/ͯr/QaOs-"-BVP^x]P4H-|"2ɘ/ `p$ᱣNC G[nKX$2q0MR ܨjm(Uܻ>OrcOf фL[v.|yE\U~8C*ڱJoFH^V~m }B0YL[ʼnrcK0<>ln1cM'n!5kZN`iUvXNJ sl´y歪E aypoH`pc=,y}?\_8ۻ)mV;NB919;+%$=VMa;j%i jVGUd!6]qyA!\̴QiK QH@z~V̝gzؒ^QJsC p|F_zT& hB u|EURgB=Gе#ly)m'˸˗.&K^kYޫ%4 kV`/S7{-fбƬv"+xeLUVҋ?MGCdBL{zEgjz+XZ?QHiٱ;`\&f}dž\_K&Q.2~Cr ,.X1E]鰶/g-ы $Ъ! BBBi&HM,BBIM n[ B3p⏄n37Wb!"Y::W`2t.՝՞zxrකQdvK,P&P)rTfPm `F5l(5:JWCJ^E f4ٲzІؓLVj~].vʹ{U1hUl?7ҳ" vo %H :eM ͬ# FObm6Y=Esj3XcȿhN]XTRODԯTV ?~\>2?HͻnxbK`m8yde9eVImX@MbZ\U˳ֳj?3{GϒwfЈB3 Y%2q hHh'{epqlUđEG `:t\ I !!@B~?-v\"RQւz*V"{tPbӵ&g6Lk-9mV|.x)2XYV3W$nQm? VܮEi1ua_[1FVUZzH wl/WU8p{Ҕomq=1buٛ F]iu=/:fc6MԜn~R +z :"VEs//]hiYw㿋uQJA!j\MVnt9V8RgUV7 ]%:٩h-Ø!]ѵYݦwo䳭ai {C\UZ&gC\+.QBgzl-75-UՋ Ba$ЀHM$!!L! !04!`!4& I!@ ځj.aZBV#yfhxHbA+Ama W—!USZy]N lAK!H8 $e0Cpx2sG+y'Eqw} OgRj7Yj|(K72 D#>`} )tQW+ԧ](! ;Ax)3s(ej_+2FF\fy- KIf;-}ݷ[vwud;Q^5"B<ϯRIfs &8%_j ƥyW]'>QujC->>)tLTCapQjxlުCl}D%;z: y^[$㜅 ?IXdo C^DR\[SrrO^1E+лjtn~,@;:EroOĽ*zُ ENndXgjHgeꃾqDTX 9Uu2Xw&(}~N>+Z'E:]X}=f!0MЀHBI!L;BhB !@I4Bi &=H$"C5T4ϕY)=*?X9V&*q(ِIҎLJjxa3j,SB$QDv"RSf:bc۫Fv)jxQ}l<#*) 3X>ܭhݠۿQ7j-<ߏos7 ꞑb'l҂HHdQKawߊp%KnlŤfQH-M7&=v9F0߉0 ZZC(pЪ$jU~`½MZT%>a-D1HKyjղAcuEk0m؀B8E3&Ρ Wb3+;6؏VHi;RfHlz$@bY_z/N/'1N׳sC/i0&1z7_z.9}g/1R(lNyǺ?ޝRm%Jg|*C,N[},) LB[+0hF9 $$4 L5zR|Vn,\C/柩VM}Ft$^XMKUwFTU33&}gfJjڒJYcqZU[m/bg}g_Ďڱfw9$XC+dbzh .e?#),r/Y:g֨LO(-ZfyU_/>M d%rX_'nz6kdp]6ӝ"W)=դ BN].Ú- !4 !!L;M$BM@ )è R'ݶ>Ŵugr jbBUgU͟"ݶ|cogRdhLO=n7sɾSOMaZ\7D@1^dg˶M>T? kDZ4.T|n#/q=\WY|/KUu^݊8SHUYn;huzn,R G}E\KcKTrvj=*h+ֵ@ӨChc MܙZ0ޙsDabߕ^06]2,K>ű~ܫI,fHrr+Hu E wÛ'P?rG^!RIDxhLƇH+1 ~qIbxik׈\vT-k1|PieG)oM7HR+c`,5Vf=7CpN'.8gʊ́H8޲Aνbi/IYf1Pي1Īד} e;e3cw(rkUU&|}(7잋K1;D;K r{9(n Tb:mluSJSs\˅XJMBdHqMqOdЀ hBj.>-ε">$y.RHtUefj{- *hcg~g֍Շ r>Y^%꠆H{ChB!٘Cok:0GښW~Qn 㗢A5]EUinюd{[;]vo52V'kcJRKS-6ALQndZ{T}bLUxg\;o.L6ъV M_rݛB3G%3iK |vz(ugU@kVbKh)^zS>'DcEW9-9rq _3vS̳=)&3AX˙S8*:p5iʯ`R"xQxDFd$ihRƴKgy/UK+ѣ&TjQ'~YgvfOh,\4 C3*-]z]G'wmZ$R֝<QLbf8#)d.U&mNv$jVTgZm8_r7V5*0#4unﴽ R_*6BlY(3UՊNR};oSp8fooLU?_/§#[os;kW$ݻn֞{c,)??*=jI-ikH\ܾ-*:I&*wq뒯kyDj9˓R?M߼iBuVN>e _+$%RYzϤu+,TP8]*.ndsu"#ʍ/Qjل&G/HJ /ح[n/ɯ*ڒH͢ `r?y-:[13q!YiN츁yk^RC,Ժ-+UjWch$,m#3zHFš`t !¡2ndR!BB@$!BBJ/*Enyqҽ~adft&(N6"iNElޮo} 0gOfB30 3;Cy9en_88X߿>ek֔Nr7)֗ow,k|H)KÈ~"ʦx@>@V 3nk;=6kq!G6nbU>K !/*"/ 4Jq3z8}cFM2C"\mvJ.Rf].M XCSQyQgD\ђT H2. IeL˿8Ϊ drC! !!L! !04X4A!@tbxrkVNILenX2K'м >۶q~TzpOrmsFK[S/%ˢ,E>" { mgdIA34B*]/IMgȮhg|b3Q/AX, g%~WYvVeJ61 $KiڶYDل} N%kmkRӊyL',Gh7[zwc eF!S=Hx.>E-5*wKJdnڞ}?2O$r03.h1ڻ=bnXsvv/4֥9mJ&lDc#{z[سOjY$N_UڽfrX}b+AC@6X=ou-?^-TyۋO#UFSq8q` W(IN6y8E/yy?WH (Dž'S &CsSZc3` 6)ߙeINI lB!@BR6DlB*sq⟾]l0L˵îp)M'~pUe%['䌲ABLaB`!@Bi & I4 ͣslc;.ȯbg@81U)U3]3I4&Ih jEcx.e+i X[ypmc˃?* ɞmԾ{W !iy1 *E<5s. DݮU'0 d>h4(e12rj+ȦPe!rAwcb]X!Ta̙pKO;y@JB1!.B'Ւ0S$<tyR{SXҳК @5Vfݢy7zqiC\0y\/xezYʫEemIWb6~YKCo655 f a9Ϳzvm;['z˞KW[e a&YŌbg-XڅBĕ..u%B ʩ:f]T] hFEdo+1s*`XdHBi+ !4Bi &hBk !B!41^gS%5V3EzuG\8*JVccy)BL|2[D}!|Z'wF +W ͗Z}b9E_)(_I kHǫ;}xiN7^W+DmnA]KVKARODEք:.)f3JJIe-[rgnbzAyVK~}rֱFܕ,]wӑ$ykz^ڏPÞ&X1ى-.DqNHz=:*q%[t'~~Bt6/SN1yfnon߭O^KV0/=vY2A6g}Hd{؛;sXH^=d )LǙdӼbcYiKUH&h]EfIq^9)vxi GjÌ1f/>7M g0>{sC~9 ^ī݆6BK.w¼~V6'ٙK|1(o%RT1]g* e,9bΗd1uB`@3#xwIM)m{%.@$Є!)PN?O[z7⼟dU22#^W6lSyi^H%yW](wh\N9[va_k6#n`?MsKhKO:ɂ-y_7ư^cZ#½Tr ͳu$pB\MbY"MJJD&~&J54dz(#eяV/:Eʭiu;QIҫ[;RJ#/YIyRCVaowc K͉9H'W(&IB!BBBhX;MFw\/k gd*Ulä! D !BBM$!!@q+ei-006sºVփ+GGֹ"*AlXL\9Qk۸j7fa/zf'kl.^ROһ{UV%Դȸ<," 8c,;י-5݈&!%w9>qb̽N7MC\Ab6) ' XS ߙrbUyes\~N_J̵ ->Q7'7z>!5 w&nMӋ/V,qћ; uPf.Ŕ1o裯Fr !VryQ5%v`=! F2qM/—qΏ/kPpDf,Vgb/,\A+YAw7sfR?7Є.(B !BV*$*{KVjYOرaİMjsKFx7u\|g2`fԅu;kVndHEj^"ju.JZ}x<@wn '*2?8fA>=6VttQfs_Yڽ(,ڍ.W:6cL"|m?- usl/ydmkP#e*\?'0q.c鏭"]$F\B%4Dwv'nky1EŚ7Ra@-*Z=I?վ i$_VFGEFvvH=hnj_F[I1يЈB &Bi B ! Y[ڡ&PK}UQKɉzkkp-/7cM|KW,f`﮼yvɋi4$Bh!!@ &B nA&%ꪊeK'T^M> rt׵HTL|6 %ȳ( Ǿn>N3ѺjH$)GlH&!0WfkkШC4ﷵaՆlܜYy<\bk׎,R7YӾUd0i,4`R;|FQIx fU;Xi`3,:7hy%~oOzYwz?\ xrJ3֩TBP={]v_aFv9𑸕ٕ$h :/$ޏV9tG3V&;۴:eM -zwQY y+/ t8hW昺)cMFTGYKmcԮuJ%!U0@B&%VܱE)fovVNش4 W;Z՞ɵh &/y_oZ2,C/xT;63[l>YKt8ݙ>:7%8^ PCv Zr>^rVYy:TkaO(ilYQH>ܒ(sss/Sj(Y%7B