From 905d2c885ca8c8167c811018841bc9e542bbf9a5 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 27 Mar 2012 16:47:14 +0000 Subject: [PATCH 01/36] Monotone-Parent: b4a3ddf3836324fd1f4925acb0426089a4a0350a Monotone-Revision: c1548a6a3e72a7d9b567b63d50198115fa48ab0b Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-03-27T16:47:14 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 17 ++ SoObjects/Contacts/SOGoContactFolders.m | 46 ++++ SoObjects/Contacts/SOGoContactLDIFEntry.m | 5 + SoObjects/Contacts/SOGoContactSourceFolder.m | 274 +++++++++++++++++++ SoObjects/Contacts/SOGoUserFolder+Contacts.m | 27 ++ 5 files changed, 369 insertions(+) diff --git a/ChangeLog b/ChangeLog index 7afe15f01..8c39ecf6a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2012-03-27 Wolfgang Sourdeau + + * SoObjects/Contacts/SOGoContactFolders.m + (-lookupName:inContext:acquire:): overriden method that enables + the lookup of hidden public sources with iOS devices. + + * SoObjects/Contacts/SOGoContactLDIFEntry.m (-davAddressData): new + getter similar to davCalendarData. + + * SoObjects/Contacts/SOGoContactSourceFolder.m + (-davAddressbookMultiget): new REPORT handler based on + -[SOGoAppointmentFolder davCalendarMultiget]. + + * SoObjects/Contacts/SOGoUserFolder+Contacts.m + (-davDirectoryGateway): new getter that returns the url to the + first available directory source. + 2012-03-26 Wolfgang Sourdeau * OpenChange/MAPIStoreTasksMessage.m (-save): take PR_HTML as diff --git a/SoObjects/Contacts/SOGoContactFolders.m b/SoObjects/Contacts/SOGoContactFolders.m index 01b1f3abb..537d7a08a 100644 --- a/SoObjects/Contacts/SOGoContactFolders.m +++ b/SoObjects/Contacts/SOGoContactFolders.m @@ -259,6 +259,52 @@ return keys; } +- (id) lookupName: (NSString *) name + inContext: (WOContext *) lookupContext + acquire: (BOOL) acquire +{ + id folder = nil; + SOGoUser *currentUser; + SOGoUserManager *um; + SOGoSystemDefaults *sd; + NSEnumerator *domains; + NSArray *sourceIDs; + NSString *domain, *srcDisplayName; + + if ([[context request] isIPhoneAddressBookApp]) + { + currentUser = [context activeUser]; + if (activeUserIsOwner + || [[currentUser login] isEqualToString: owner]) + { + domain = [currentUser domain]; + um = [SOGoUserManager sharedUserManager]; + sd = [SOGoSystemDefaults sharedSystemDefaults]; + domains = [[sd visibleDomainsForDomain: domain] objectEnumerator]; + while (domain) + { + sourceIDs = [um addressBookSourceIDsInDomain: domain]; + if ([sourceIDs containsObject: name]) + { + srcDisplayName = [um displayNameForSourceWithID: name]; + folder = [SOGoContactSourceFolder + folderWithName: name + andDisplayName: srcDisplayName + inContainer: self]; + [folder setSource: [um sourceWithID: name]]; + } + domain = [domains nextObject]; + } + } + } + + if (!folder) + folder = [super lookupName: name inContext: lookupContext + acquire: acquire]; + + return folder; +} + - (NSException *) setDavContactsCategories: (NSString *) newCategories { SOGoUser *ownerUser; diff --git a/SoObjects/Contacts/SOGoContactLDIFEntry.m b/SoObjects/Contacts/SOGoContactLDIFEntry.m index 6801875fb..4472ae901 100644 --- a/SoObjects/Contacts/SOGoContactLDIFEntry.m +++ b/SoObjects/Contacts/SOGoContactLDIFEntry.m @@ -166,6 +166,11 @@ return @"text/x-vcard"; } +- (NSString *) davAddressData +{ + return [self contentAsString]; +} + - (NSException *) save { return [(SOGoContactSourceFolder *) container saveLDIFEntry: self]; diff --git a/SoObjects/Contacts/SOGoContactSourceFolder.m b/SoObjects/Contacts/SOGoContactSourceFolder.m index b4a5b2318..1f6437bb9 100644 --- a/SoObjects/Contacts/SOGoContactSourceFolder.m +++ b/SoObjects/Contacts/SOGoContactSourceFolder.m @@ -24,6 +24,7 @@ #import #import #import +#import #import #import @@ -34,17 +35,23 @@ #import #import #import +#import #import +#import +#import #import #import +#import #import #import #import +#import #import #import #import #import +#import #import "SOGoContactFolders.h" #import "SOGoContactGCSFolder.h" @@ -350,6 +357,273 @@ return result; } +- (NSString *) _deduceObjectNameFromURL: (NSString *) url + fromBaseURL: (NSString *) baseURL +{ + NSRange urlRange; + NSString *name; + + urlRange = [url rangeOfString: baseURL]; + if (urlRange.location != NSNotFound) + { + name = [url substringFromIndex: NSMaxRange (urlRange)]; + if ([name hasPrefix: @"/"]) + name = [name substringFromIndex: 1]; + } + else + name = nil; + + return name; +} + +/* TODO: multiget reorg */ +- (NSString *) _nodeTagForProperty: (NSString *) property +{ + NSString *namespace, *nodeName, *nsRep; + NSRange nsEnd; + + nsEnd = [property rangeOfString: @"}"]; + namespace + = [property substringFromRange: NSMakeRange (1, nsEnd.location - 1)]; + nodeName = [property substringFromIndex: nsEnd.location + 1]; + if ([namespace isEqualToString: XMLNS_CARDDAV]) + nsRep = @"C"; + else + nsRep = @"D"; + + return [NSString stringWithFormat: @"%@:%@", nsRep, nodeName]; +} + +- (NSString *) _nodeTag: (NSString *) property +{ + static NSMutableDictionary *tags = nil; + NSString *nodeTag; + + if (!tags) + tags = [NSMutableDictionary new]; + nodeTag = [tags objectForKey: property]; + if (!nodeTag) + { + nodeTag = [self _nodeTagForProperty: property]; + [tags setObject: nodeTag forKey: property]; + } + + return nodeTag; +} + +- (NSString **) _properties: (NSString **) properties + count: (unsigned int) propertiesCount + ofObject: (NSDictionary *) object +{ + SOGoContactLDIFEntry *ldifEntry; + NSString **currentProperty; + NSString **values, **currentValue; + SEL methodSel; + +// NSLog (@"_properties:ofObject:: %@", [NSDate date]); + + values = NSZoneMalloc (NULL, + (propertiesCount + 1) * sizeof (NSString *)); + *(values + propertiesCount) = nil; + + ldifEntry = [SOGoContactLDIFEntry + contactEntryWithName: [object objectForKey: @"c_name"] + withLDIFEntry: object + inContainer: self]; + currentProperty = properties; + currentValue = values; + while (*currentProperty) + { + methodSel = SOGoSelectorForPropertyGetter (*currentProperty); + if (methodSel && [ldifEntry respondsToSelector: methodSel]) + *currentValue = [[ldifEntry performSelector: methodSel] + stringByEscapingXMLString]; + currentProperty++; + currentValue++; + } + +// NSLog (@"/_properties:ofObject:: %@", [NSDate date]); + + return values; +} + +- (NSArray *) _propstats: (NSString **) properties + count: (unsigned int) propertiesCount + ofObject: (NSDictionary *) object +{ + NSMutableArray *propstats, *properties200, *properties404, *propDict; + NSString **property, **values, **currentValue; + NSString *propertyValue, *nodeTag; + +// NSLog (@"_propstats:ofObject:: %@", [NSDate date]); + + propstats = [NSMutableArray array]; + + properties200 = [NSMutableArray array]; + properties404 = [NSMutableArray array]; + + values = [self _properties: properties count: propertiesCount + ofObject: object]; + currentValue = values; + + property = properties; + while (*property) + { + nodeTag = [self _nodeTag: *property]; + if (*currentValue) + { + propertyValue = [NSString stringWithFormat: @"<%@>%@", + nodeTag, *currentValue, nodeTag]; + propDict = properties200; + } + else + { + propertyValue = [NSString stringWithFormat: @"<%@/>", nodeTag]; + propDict = properties404; + } + [propDict addObject: propertyValue]; + property++; + currentValue++; + } + free (values); + + if ([properties200 count]) + [propstats addObject: [NSDictionary dictionaryWithObjectsAndKeys: + properties200, @"properties", + @"HTTP/1.1 200 OK", @"status", + nil]]; + if ([properties404 count]) + [propstats addObject: [NSDictionary dictionaryWithObjectsAndKeys: + properties404, @"properties", + @"HTTP/1.1 404 Not Found", @"status", + nil]]; +// NSLog (@"/_propstats:ofObject:: %@", [NSDate date]); + + return propstats; +} + +- (void) _appendPropstat: (NSDictionary *) propstat + toBuffer: (NSMutableString *) r +{ + NSArray *properties; + unsigned int count, max; + + [r appendString: @""]; + properties = [propstat objectForKey: @"properties"]; + max = [properties count]; + for (count = 0; count < max; count++) + [r appendString: [properties objectAtIndex: count]]; + [r appendString: @""]; + [r appendString: [propstat objectForKey: @"status"]]; + [r appendString: @""]; +} + +- (void) appendObject: (NSDictionary *) object + properties: (NSString **) properties + count: (unsigned int) propertiesCount + withBaseURL: (NSString *) baseURL + toBuffer: (NSMutableString *) r +{ + NSArray *propstats; + unsigned int count, max; + + [r appendFormat: @""]; + [r appendString: baseURL]; + [r appendString: [[object objectForKey: @"c_name"] stringByEscapingURL]]; + [r appendString: @""]; + +// NSLog (@"(appendPropstats...): %@", [NSDate date]); + propstats = [self _propstats: properties count: propertiesCount + ofObject: object]; + max = [propstats count]; + for (count = 0; count < max; count++) + [self _appendPropstat: [propstats objectAtIndex: count] + toBuffer: r]; +// NSLog (@"/(appendPropstats...): %@", [NSDate date]); + + [r appendString: @""]; +} + +- (void) appendMissingObjectRef: (NSString *) href + toBuffer: (NSMutableString *) r +{ + [r appendString: @""]; + [r appendString: href]; + [r appendString: @"HTTP/1.1 404 Not Found"]; +} + +- (void) _appendComponentProperties: (NSArray *) properties + matchingURLs: (id ) refs + toResponse: (WOResponse *) response +{ + NSObject *element; + NSString *url, *baseURL, *cname; + NSString **propertiesArray; + NSMutableString *buffer; + unsigned int count, max, propertiesCount; + + baseURL = [self davURLAsString]; +#warning review this when fixing http://www.scalableogo.org/bugs/view.php?id=276 + if (![baseURL hasSuffix: @"/"]) + baseURL = [NSString stringWithFormat: @"%@/", baseURL]; + + propertiesArray = [properties asPointersOfObjects]; + propertiesCount = [properties count]; + + max = [refs length]; + buffer = [NSMutableString stringWithCapacity: max*512]; + + for (count = 0; count < max; count++) + { + element = [refs objectAtIndex: count]; + url = [[[element firstChild] nodeValue] stringByUnescapingURL]; + cname = [self _deduceObjectNameFromURL: url fromBaseURL: baseURL]; + if (cname) + [self appendObject: [source lookupContactEntry: cname] + properties: propertiesArray + count: propertiesCount + withBaseURL: baseURL + toBuffer: buffer]; + else + [self appendMissingObjectRef: url + toBuffer: buffer]; + } + [response appendContentString: buffer]; +// NSLog (@"/adding properties with url"); + + NSZoneFree (NULL, propertiesArray); +} + +- (WOResponse *) performMultigetInContext: (WOContext *) queryContext + inNamespace: (NSString *) namespace +{ + WOResponse *r; + id document; + DOMElement *documentElement, *propElement; + + r = [context response]; + [r prepareDAVResponse]; + [r appendContentString: + [NSString stringWithFormat: @"", namespace]]; + document = [[queryContext request] contentAsDOMDocument]; + documentElement = (DOMElement *) [document documentElement]; + propElement = [documentElement firstElementWithTag: @"prop" + inNamespace: @"DAV:"]; + [self _appendComponentProperties: [propElement flatPropertyNameOfSubElements] + matchingURLs: [documentElement getElementsByTagName: @"href"] + toResponse: r]; + [r appendContentString:@""]; + + return r; +} + +- (id) davAddressbookMultiget: (id) queryContext +{ + return [self performMultigetInContext: queryContext + inNamespace: @"urn:ietf:params:xml:ns:carddav"]; +} + - (NSString *) davDisplayName { return displayName; diff --git a/SoObjects/Contacts/SOGoUserFolder+Contacts.m b/SoObjects/Contacts/SOGoUserFolder+Contacts.m index 817c91cb8..2244456d4 100644 --- a/SoObjects/Contacts/SOGoUserFolder+Contacts.m +++ b/SoObjects/Contacts/SOGoUserFolder+Contacts.m @@ -29,6 +29,7 @@ #import #import +#import #import #import @@ -58,4 +59,30 @@ return [NSArray arrayWithObject: tag]; } +- (NSArray *) davDirectoryGateway +{ + NSArray *tag, *sources; + SOGoContactFolders *parent; + SOGoUserManager *um; + NSString *domain, *url; + + domain = [[context activeUser] domain]; + um = [SOGoUserManager sharedUserManager]; + sources = [um addressBookSourceIDsInDomain: domain]; + if ([sources count] > 0) + { + parent = [self privateContacts: @"Contacts" inContext: context]; + url = [NSString stringWithFormat: @"%@%@/", [parent davURLAsString], + [sources objectAtIndex: 0]]; + tag = [NSArray arrayWithObject: + [NSArray arrayWithObjects: @"href", @"DAV:", @"D", + url, nil]]; + } + else + tag = nil; + + return tag; +} + + @end From 4489085c59496805223fb1df9e885cd9a5dfae5f Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 27 Mar 2012 20:55:20 +0000 Subject: [PATCH 02/36] Monotone-Parent: c1548a6a3e72a7d9b567b63d50198115fa48ab0b Monotone-Revision: 7a38303ac45419355a1bdedefd53d63339248410 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-03-27T20:55:20 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 1 + SoObjects/Contacts/SOGoContactSourceFolder.m | 13 ++++++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8c39ecf6a..b053aa93c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -14,6 +14,7 @@ * SoObjects/Contacts/SOGoUserFolder+Contacts.m (-davDirectoryGateway): new getter that returns the url to the first available directory source. + (-davResourceType): declare resource as "directory" (carddav). 2012-03-26 Wolfgang Sourdeau diff --git a/SoObjects/Contacts/SOGoContactSourceFolder.m b/SoObjects/Contacts/SOGoContactSourceFolder.m index 1f6437bb9..260a7ce35 100644 --- a/SoObjects/Contacts/SOGoContactSourceFolder.m +++ b/SoObjects/Contacts/SOGoContactSourceFolder.m @@ -137,14 +137,13 @@ - (NSArray *) davResourceType { NSMutableArray *resourceType; - NSArray *cardDavCollection; - - cardDavCollection - = [NSArray arrayWithObjects: @"addressbook", - @"urn:ietf:params:xml:ns:carddav", nil]; + NSArray *type; resourceType = [NSMutableArray arrayWithArray: [super davResourceType]]; - [resourceType addObject: cardDavCollection]; + type = [NSArray arrayWithObjects: @"addressbook", XMLNS_CARDDAV, nil]; + [resourceType addObject: type]; + type = [NSArray arrayWithObjects: @"directory", XMLNS_CARDDAV, nil]; + [resourceType addObject: type]; return resourceType; } @@ -621,7 +620,7 @@ - (id) davAddressbookMultiget: (id) queryContext { return [self performMultigetInContext: queryContext - inNamespace: @"urn:ietf:params:xml:ns:carddav"]; + inNamespace: XMLNS_CARDDAV]; } - (NSString *) davDisplayName From d28ca1ecdcdfbcbd3c2090d04f3132885cdb04f3 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 28 Mar 2012 04:42:02 +0000 Subject: [PATCH 03/36] Monotone-Parent: 7a38303ac45419355a1bdedefd53d63339248410 Monotone-Revision: f8af7a968c459aff400e85a6c5422a0c7a370167 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-03-28T04:42:02 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 5 +++++ SoObjects/SOGo/LDAPSource.m | 14 +++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index b053aa93c..efb9ae8ec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-03-28 Wolfgang Sourdeau + + * SoObjects/SOGo/LDAPSource.m (-allEntryIDs): take the _filter + ivar into account. + 2012-03-27 Wolfgang Sourdeau * SoObjects/Contacts/SOGoContactFolders.m diff --git a/SoObjects/SOGo/LDAPSource.m b/SoObjects/SOGo/LDAPSource.m index b5cbc146a..3269ca10c 100644 --- a/SoObjects/SOGo/LDAPSource.m +++ b/SoObjects/SOGo/LDAPSource.m @@ -830,6 +830,8 @@ andMultipleBookingsField: (NSString *) newMultipleBookingsField NSEnumerator *entries; NGLdapEntry *currentEntry; NGLdapConnection *ldapConnection; + EOQualifier *qualifier; + NSMutableString *qs; NSString *value; NSArray *attributes; NSMutableArray *ids; @@ -838,17 +840,23 @@ andMultipleBookingsField: (NSString *) newMultipleBookingsField ldapConnection = [self _ldapConnection]; attributes = [NSArray arrayWithObject: IDField]; + + qs = [NSMutableString stringWithFormat: @"(%@='*')", CNField]; + if ([_filter length]) + [qs appendFormat: @" AND %@", _filter]; + qualifier = [EOQualifier qualifierWithQualifierFormat: qs]; + if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame) entries = [ldapConnection baseSearchAtBaseDN: baseDN - qualifier: nil + qualifier: qualifier attributes: attributes]; else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame) entries = [ldapConnection flatSearchAtBaseDN: baseDN - qualifier: nil + qualifier: qualifier attributes: attributes]; else entries = [ldapConnection deepSearchAtBaseDN: baseDN - qualifier: nil + qualifier: qualifier attributes: attributes]; while ((currentEntry = [entries nextObject])) From dcb952e1b7e04e2c42c43338e72602d0a588e7f9 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 28 Mar 2012 15:05:58 +0000 Subject: [PATCH 04/36] Monotone-Parent: f8af7a968c459aff400e85a6c5422a0c7a370167 Monotone-Revision: 600b3a1c268cabeca401fb335f2e4c76bd1709b7 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-03-28T15:05:58 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 6 ++++++ SoObjects/Contacts/SOGoFolder+CardDAV.m | 17 +++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index efb9ae8ec..ca5486e35 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2012-03-28 Wolfgang Sourdeau + * SoObjects/Contacts/SOGoFolder+CardDAV.m (_isValidFilter:): + accept "email" as filter name. + (_appendObject:withBaseURL:toREPORTResponse:): fixed the ordering + of XML elements as the address*-data props where put outside of + the tree. + * SoObjects/SOGo/LDAPSource.m (-allEntryIDs): take the _filter ivar into account. diff --git a/SoObjects/Contacts/SOGoFolder+CardDAV.m b/SoObjects/Contacts/SOGoFolder+CardDAV.m index fed4c2105..3466e940e 100644 --- a/SoObjects/Contacts/SOGoFolder+CardDAV.m +++ b/SoObjects/Contacts/SOGoFolder+CardDAV.m @@ -73,17 +73,17 @@ etagLine = [NSString stringWithFormat: @"%@", [component davEntityTag]]; [r appendContentString: etagLine]; - [r appendContentString: @"" - @"HTTP/1.1 200 OK" - @"" - @""]; + [r appendContentString: @""]; contactString = [[component contentAsString] stringByEscapingXMLString]; [r appendContentString: contactString]; - [r appendContentString: @"" - @""]; - [r appendContentString: contactString]; [r appendContentString: @"" - @""]; + @""]; + [r appendContentString: contactString]; + [r appendContentString: @"" + @"" + @"HTTP/1.1 200 OK" + @"" + @""]; } } @@ -124,6 +124,7 @@ return ([newString isEqualToString: @"sn"] || [newString isEqualToString: @"givenname"] + || [newString isEqualToString: @"email"] || [newString isEqualToString: @"mail"] || [newString isEqualToString: @"telephonenumber"]); } From 269393250b5b2a4b2aece6145b5c20a9a0e47f6a Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 28 Mar 2012 20:04:32 +0000 Subject: [PATCH 05/36] Monotone-Parent: 600b3a1c268cabeca401fb335f2e4c76bd1709b7 Monotone-Revision: d93b5b4142f73cdb24bac181e6d92140b7a59313 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-03-28T20:04:32 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 7 +++++++ OpenChange/SOGoMAPIFSMessage.h | 2 +- OpenChange/SOGoMAPIFSMessage.m | 33 ++++++++++++++++----------------- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index ca5486e35..a7793891b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2012-03-28 Wolfgang Sourdeau + * OpenChange/SOGoMAPIFSMessage.m + (_readFileChangesDataWithDate:andInode:): use the inode number + rather than the filesize as change indicator since a new file is + created each time the dictionary is written to disk, thanks to the + "atomically" flag. + (-save): write the file atomically. + * SoObjects/Contacts/SOGoFolder+CardDAV.m (_isValidFilter:): accept "email" as filter name. (_appendObject:withBaseURL:toREPORTResponse:): fixed the ordering diff --git a/OpenChange/SOGoMAPIFSMessage.h b/OpenChange/SOGoMAPIFSMessage.h index 0a0385721..ec6494938 100644 --- a/OpenChange/SOGoMAPIFSMessage.h +++ b/OpenChange/SOGoMAPIFSMessage.h @@ -31,7 +31,7 @@ @interface SOGoMAPIFSMessage : SOGoMAPIVolatileMessage { NSString *completeFilename; - NSUInteger fileSize; + NSUInteger inode; NSData *lastModificationTime; } diff --git a/OpenChange/SOGoMAPIFSMessage.m b/OpenChange/SOGoMAPIFSMessage.m index 495bba96d..8a854fa1d 100644 --- a/OpenChange/SOGoMAPIFSMessage.m +++ b/OpenChange/SOGoMAPIFSMessage.m @@ -41,7 +41,7 @@ if ((self = [super init])) { completeFilename = nil; - fileSize = 0; + inode = 0; lastModificationTime = nil; } @@ -86,7 +86,7 @@ } - (BOOL) _readFileChangesDataWithDate: (NSDate **) newLMTime - andSize: (NSUInteger *) newFileSize + andInode: (NSUInteger *) newInode { BOOL rc; NSDictionary *attributes; @@ -97,7 +97,7 @@ if (attributes) { *newLMTime = [attributes fileModificationDate]; - *newFileSize = [attributes fileSize]; + *newInode = [attributes fileSystemFileNumber]; rc = YES; } else @@ -107,22 +107,22 @@ } - (BOOL) _checkFileChangesDataWithDate: (NSDate **) newLMTime - andSize: (NSUInteger *) newFileSize + andInode: (NSUInteger *) newInode { BOOL hasChanged = NO; NSDate *lastLMTime; - NSUInteger lastFileSize; + NSUInteger lastInode; if ([self _readFileChangesDataWithDate: &lastLMTime - andSize: &lastFileSize]) + andInode: &lastInode]) { - if (fileSize != lastFileSize + if (inode != lastInode || ![lastModificationTime isEqual: lastLMTime]) { if (lastLMTime) *newLMTime = lastLMTime; - if (newFileSize) - *newFileSize = lastFileSize; + if (newInode) + *newInode = lastInode; hasChanged = YES; } } @@ -136,10 +136,10 @@ NSString *error; NSPropertyListFormat format; NSDate *lastLMTime; - NSUInteger lastFileSize; + NSUInteger lastInode; if ([self _checkFileChangesDataWithDate: &lastLMTime - andSize: &lastFileSize]) + andInode: &lastInode]) { [self logWithFormat: @"file '%@' new or modified: rereading properties", [self completeFilename]]; @@ -158,7 +158,7 @@ @" of message: '%@'", error]; } ASSIGN (lastModificationTime, lastLMTime); - fileSize = lastFileSize; + inode = lastInode; } return [super properties]; @@ -168,7 +168,7 @@ { NSData *content; NSDate *lastLMTime; - NSUInteger lastFileSize; + NSUInteger lastInode; [container ensureDirectory]; @@ -178,14 +178,13 @@ dataFromPropertyList: [self properties] format: NSPropertyListBinaryFormat_v1_0 errorDescription: NULL]; - if (![content writeToFile: [self completeFilename] atomically: NO]) + if (![content writeToFile: [self completeFilename] atomically: YES]) [NSException raise: @"MAPIStoreIOException" format: @"could not save message"]; - [self _readFileChangesDataWithDate: &lastLMTime - andSize: &lastFileSize]; + [self _readFileChangesDataWithDate: &lastLMTime andInode: &lastInode]; ASSIGN (lastModificationTime, lastLMTime); - fileSize = lastFileSize; + inode = lastInode; // [self logWithFormat: @"fs message written to '%@'", [self completeFilename]]; } From 64b8498eac7f1aa0b900e98675889cf2daa0dd5b Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 30 Mar 2012 14:09:07 +0000 Subject: [PATCH 06/36] Monotone-Parent: 34215cf1c90ce31c32de705320b2cd5f2bee55ec Monotone-Revision: d1a795ace9b3ecfe78615e345153f5c37d0ca4b2 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-03-30T14:09:07 Monotone-Branch: ca.inverse.sogo --- Version | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Version b/Version index 4364995c1..09503ebca 100644 --- a/Version +++ b/Version @@ -2,6 +2,6 @@ # This file is included by library makefiles to set the version information # of the executable. -MAJOR_VERSION=1 -MINOR_VERSION=3 -SUBMINOR_VERSION=15 +MAJOR_VERSION=2 +MINOR_VERSION=0 +SUBMINOR_VERSION=0 From 2adcb276b2f09ada9c427de36d4625c84dabdefb Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 30 Mar 2012 15:33:47 +0000 Subject: [PATCH 07/36] Monotone-Parent: 4899b773e21bd6c56bae726bf720e184b8ef9ec0 Monotone-Revision: cb7b77723f765942d950c5620150b720f5d0c5b1 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-03-30T15:33:47 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 8 ++++++++ OpenChange/MAPIStoreCalendarMessage.m | 4 ++-- OpenChange/MAPIStoreContext.h | 4 ++-- OpenChange/MAPIStoreMailMessage.m | 2 +- OpenChange/MAPIStoreObject.h | 2 -- OpenChange/MAPIStoreObject.m | 15 --------------- OpenChange/MAPIStoreUserContext.h | 4 ++++ OpenChange/MAPIStoreUserContext.m | 14 ++++++++++++++ 8 files changed, 31 insertions(+), 22 deletions(-) diff --git a/ChangeLog b/ChangeLog index 646dab57b..8859b3097 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2012-03-30 Wolfgang Sourdeau + + * OpenChange/MAPIStoreUserContext.m (-timeZone): new method that + returns the timezone of an owner user. + + * OpenChange/MAPIStoreObject.m (-ownerTimeZone): removed method, + replaced with the one above. + 2012-03-29 Francis Lachapelle * UI/WebServerResources/UIxPreferences.js (savePreferences): fixed diff --git a/OpenChange/MAPIStoreCalendarMessage.m b/OpenChange/MAPIStoreCalendarMessage.m index 004a30afc..6890fe172 100644 --- a/OpenChange/MAPIStoreCalendarMessage.m +++ b/OpenChange/MAPIStoreCalendarMessage.m @@ -118,7 +118,7 @@ [MAPIStoreAppointmentWrapper wrapperWithICalEvent: event andUser: [userContext sogoUser] andSenderEmail: nil - inTimeZone: [self ownerTimeZone] + inTimeZone: [userContext timeZone] withConnectionInfo: [context connectionInfo]]); } @@ -766,7 +766,7 @@ isAllDay = [value boolValue]; if (!isAllDay) { - tzName = [[self ownerTimeZone] name]; + tzName = [[[self userContext] timeZone] name]; tz = [iCalTimeZone timeZoneForName: tzName]; [vCalendar addTimeZone: tz]; } diff --git a/OpenChange/MAPIStoreContext.h b/OpenChange/MAPIStoreContext.h index ef3be71a6..fdea9bbd1 100644 --- a/OpenChange/MAPIStoreContext.h +++ b/OpenChange/MAPIStoreContext.h @@ -55,8 +55,8 @@ { struct mapistore_connection_info *connInfo; NSMutableArray *containersBag; - SOGoUser *activeUser; - MAPIStoreUserContext *userContext; + SOGoUser *activeUser; /* the user accessing the resource */ + MAPIStoreUserContext *userContext; /* the owner or the resource */ NSURL *contextUrl; } diff --git a/OpenChange/MAPIStoreMailMessage.m b/OpenChange/MAPIStoreMailMessage.m index aa0469774..005cade2f 100644 --- a/OpenChange/MAPIStoreMailMessage.m +++ b/OpenChange/MAPIStoreMailMessage.m @@ -284,7 +284,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) wrapperWithICalEvent: event andUser: [context activeUser] andSenderEmail: senderEmail - inTimeZone: [self ownerTimeZone] + inTimeZone: [[self userContext] timeZone] withConnectionInfo: [context connectionInfo]]; [appointmentWrapper retain]; } diff --git a/OpenChange/MAPIStoreObject.h b/OpenChange/MAPIStoreObject.h index 773e806ac..cb7ed7809 100644 --- a/OpenChange/MAPIStoreObject.h +++ b/OpenChange/MAPIStoreObject.h @@ -77,8 +77,6 @@ - (uint64_t) objectId; - (NSString *) url; -- (NSTimeZone *) ownerTimeZone; - /* properties */ - (BOOL) canGetProperty: (enum MAPITAGS) propTag; diff --git a/OpenChange/MAPIStoreObject.m b/OpenChange/MAPIStoreObject.m index c0649c7a3..f2f8d0ebe 100644 --- a/OpenChange/MAPIStoreObject.m +++ b/OpenChange/MAPIStoreObject.m @@ -210,21 +210,6 @@ static Class NSExceptionK, MAPIStoreFolderK; containerURL, [self nameInContainer]]; } -- (NSTimeZone *) ownerTimeZone -{ - NSString *owner; - SOGoUserDefaults *ud; - NSTimeZone *tz; - WOContext *woContext; - - woContext = [[self userContext] woContext]; - owner = [sogoObject ownerInContext: woContext]; - ud = [[SOGoUser userWithLogin: owner] userDefaults]; - tz = [ud timeZone]; - - return tz; -} - - (void) addProperties: (NSDictionary *) newNewProperties { [properties addEntriesFromDictionary: newNewProperties]; diff --git a/OpenChange/MAPIStoreUserContext.h b/OpenChange/MAPIStoreUserContext.h index 43ae2e7ed..5cdd38710 100644 --- a/OpenChange/MAPIStoreUserContext.h +++ b/OpenChange/MAPIStoreUserContext.h @@ -27,6 +27,7 @@ @class NSMutableDictionary; @class NSString; +@class NSTimeZone; @class WOContext; @@ -43,6 +44,7 @@ { NSString *username; SOGoUser *sogoUser; + NSTimeZone *timeZone; SOGoUserFolder *userFolder; NSMutableArray *containersBag; @@ -63,6 +65,8 @@ - (NSString *) username; - (SOGoUser *) sogoUser; +- (NSTimeZone *) timeZone; + - (SOGoUserFolder *) userFolder; - (NSDictionary *) rootFolders; diff --git a/OpenChange/MAPIStoreUserContext.m b/OpenChange/MAPIStoreUserContext.m index 53f20d37c..dcb3cfb72 100644 --- a/OpenChange/MAPIStoreUserContext.m +++ b/OpenChange/MAPIStoreUserContext.m @@ -137,6 +137,20 @@ static NSMapTable *contextsTable = nil; return sogoUser; } +- (NSTimeZone *) timeZone +{ + if (!timeZone) + { + SOGoUser *user; + + user = [self sogoUser]; + timeZone = [[user userDefaults] timeZone]; + [timeZone retain]; + } + + return timeZone; +} + - (SOGoUserFolder *) userFolder { if (!userFolder) From a4b083eb1e8a564e321e49788f546fb6848aac98 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 30 Mar 2012 19:51:37 +0000 Subject: [PATCH 08/36] Monotone-Parent: cb7b77723f765942d950c5620150b720f5d0c5b1 Monotone-Revision: 1900d82b81c570a73d4db548a566ed09b57ee43a Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-03-30T19:51:37 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 5 +++++ OpenChange/MAPIApplication.m | 5 +++++ OpenChange/MAPIStoreAppointmentWrapper.h | 2 -- OpenChange/MAPIStoreAppointmentWrapper.m | 4 ---- OpenChange/MAPIStoreContactsAttachment.m | 2 -- OpenChange/MAPIStoreTypes.h | 3 +++ OpenChange/MAPIStoreTypes.m | 2 ++ 7 files changed, 15 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8859b3097..2f00edb37 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2012-03-30 Wolfgang Sourdeau + * OpenChange/MAPIApplication.m (-init): utcTZ is now initialized + here. + + * OpenChange/MAPIStoreTypes.[hm]: new host module for utcTZ. + * OpenChange/MAPIStoreUserContext.m (-timeZone): new method that returns the timezone of an owner user. diff --git a/OpenChange/MAPIApplication.m b/OpenChange/MAPIApplication.m index 707e0f579..8da1c1078 100644 --- a/OpenChange/MAPIApplication.m +++ b/OpenChange/MAPIApplication.m @@ -21,6 +21,7 @@ */ #import +#import #import #import @@ -28,6 +29,7 @@ #import #import "MAPIStoreUserContext.h" +#import "MAPIStoreTypes.h" #import "MAPIApplication.h" @@ -49,6 +51,9 @@ MAPIApplication *MAPIApp = nil; MAPIApp = [super init]; [MAPIApp retain]; + + utcTZ = [NSTimeZone timeZoneWithName: @"UTC"]; + [utcTZ retain]; } return MAPIApp; diff --git a/OpenChange/MAPIStoreAppointmentWrapper.h b/OpenChange/MAPIStoreAppointmentWrapper.h index efb5ac2a1..74b275275 100644 --- a/OpenChange/MAPIStoreAppointmentWrapper.h +++ b/OpenChange/MAPIStoreAppointmentWrapper.h @@ -35,8 +35,6 @@ @class SOGoUser; -extern NSTimeZone *utcTZ; - @interface MAPIStoreAppointmentWrapper : NSObject { struct mapistore_connection_info *connInfo; diff --git a/OpenChange/MAPIStoreAppointmentWrapper.m b/OpenChange/MAPIStoreAppointmentWrapper.m index b3eb8df02..c3eddf6fe 100644 --- a/OpenChange/MAPIStoreAppointmentWrapper.m +++ b/OpenChange/MAPIStoreAppointmentWrapper.m @@ -59,16 +59,12 @@ #include #include -NSTimeZone *utcTZ; - static NSCharacterSet *hexCharacterSet = nil; @implementation MAPIStoreAppointmentWrapper + (void) initialize { - utcTZ = [NSTimeZone timeZoneWithName: @"UTC"]; - [utcTZ retain]; if (!hexCharacterSet) { hexCharacterSet = [NSCharacterSet characterSetWithCharactersInString: @"1234567890abcdefABCDEF"]; diff --git a/OpenChange/MAPIStoreContactsAttachment.m b/OpenChange/MAPIStoreContactsAttachment.m index 6a9afe86a..00fc652d6 100644 --- a/OpenChange/MAPIStoreContactsAttachment.m +++ b/OpenChange/MAPIStoreContactsAttachment.m @@ -35,8 +35,6 @@ #include -extern NSTimeZone *utcTZ; - /* TODO: handle URL pictures via PidTagAttachMethod = ref ? */ @implementation MAPIStoreContactsAttachment diff --git a/OpenChange/MAPIStoreTypes.h b/OpenChange/MAPIStoreTypes.h index 286c0b298..8e2fb7d46 100644 --- a/OpenChange/MAPIStoreTypes.h +++ b/OpenChange/MAPIStoreTypes.h @@ -32,6 +32,9 @@ @class NSData; @class NSDictionary; +@class NSTimeZone; + +extern NSTimeZone *utcTZ; uint8_t *MAPIBoolValue (void *memCtx, BOOL value); uint32_t *MAPILongValue (void *memCtx, uint32_t value); diff --git a/OpenChange/MAPIStoreTypes.m b/OpenChange/MAPIStoreTypes.m index bcef90ae1..fc4ca727a 100644 --- a/OpenChange/MAPIStoreTypes.m +++ b/OpenChange/MAPIStoreTypes.m @@ -36,6 +36,8 @@ #include #include +NSTimeZone *utcTZ; + uint8_t * MAPIBoolValue (void *memCtx, BOOL value) { From 4f148bafc653837d50509ec8cca7f6e134dd5b3c Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 30 Mar 2012 19:58:16 +0000 Subject: [PATCH 09/36] Monotone-Parent: 1900d82b81c570a73d4db548a566ed09b57ee43a Monotone-Revision: b0de6c606ce6f295a8956a42ed0f0bc3b6e3cca3 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-03-30T19:58:16 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 8 ++++ OpenChange/MAPIStoreCalendarMessage.m | 30 +++++++------- OpenChange/MAPIStoreMailVolatileMessage.m | 7 +++- OpenChange/MAPIStoreObject.m | 33 ++++++++++++--- OpenChange/MAPIStoreTasksMessage.m | 49 ++++++++--------------- 5 files changed, 75 insertions(+), 52 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2f00edb37..ed8c5bedd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2012-03-30 Wolfgang Sourdeau + * OpenChange/MAPIStoreTasksMessage.m (-save): do not reset fields + that have not been passed in the properties array, since only + RopDeleteProperties should remove them. + + * OpenChange/MAPIStoreObject.m (-addPropertiesFromRow:): dates are + now all converted to the user's timezone, even though it just + inverts the problem we currently have. + * OpenChange/MAPIApplication.m (-init): utcTZ is now initialized here. diff --git a/OpenChange/MAPIStoreCalendarMessage.m b/OpenChange/MAPIStoreCalendarMessage.m index 6890fe172..70aa0b64a 100644 --- a/OpenChange/MAPIStoreCalendarMessage.m +++ b/OpenChange/MAPIStoreCalendarMessage.m @@ -770,6 +770,8 @@ tz = [iCalTimeZone timeZoneForName: tzName]; [vCalendar addTimeZone: tz]; } + else + tz = nil; // start value = [properties objectForKey: MAPIPropertyKey (PR_START_DATE)]; @@ -779,18 +781,18 @@ if (value) { start = (iCalDateTime *) [newEvent uniqueChildWithTag: @"dtstart"]; + [start setTimeZone: tz]; if (isAllDay) + { + [start setDate: value]; + [start setTimeZone: nil]; + } + else { tzOffset = [[value timeZone] secondsFromGMTForDate: value]; value = [value dateByAddingYears: 0 months: 0 days: 0 hours: 0 minutes: 0 - seconds: -tzOffset]; - [start setTimeZone: nil]; - [start setDate: value]; - } - else - { - [start setTimeZone: tz]; + seconds: tzOffset]; [start setDateTime: value]; } } @@ -802,18 +804,18 @@ if (value) { end = (iCalDateTime *) [newEvent uniqueChildWithTag: @"dtend"]; + [end setTimeZone: tz]; if (isAllDay) + { + [end setDate: value]; + [end setTimeZone: nil]; + } + else { tzOffset = [[value timeZone] secondsFromGMTForDate: value]; value = [value dateByAddingYears: 0 months: 0 days: 0 hours: 0 minutes: 0 - seconds: -tzOffset]; - [end setTimeZone: nil]; - [end setDate: value]; - } - else - { - [end setTimeZone: tz]; + seconds: tzOffset]; [end setDateTime: value]; } } diff --git a/OpenChange/MAPIStoreMailVolatileMessage.m b/OpenChange/MAPIStoreMailVolatileMessage.m index 2d5a937e5..3a3d66be3 100644 --- a/OpenChange/MAPIStoreMailVolatileMessage.m +++ b/OpenChange/MAPIStoreMailVolatileMessage.m @@ -29,6 +29,7 @@ #import #import #import +#import #import #import #import @@ -495,7 +496,11 @@ FillMessageHeadersFromProperties (NGMutableHashMap *headers, date = [mailProperties objectForKey: MAPIPropertyKey (PR_CLIENT_SUBMIT_TIME)]; if (date) - [headers addObject: [date rfc822DateString] forKey: @"date"]; + { + date = [date addYear: 0 month: 0 day: 0 + hour: 0 minute: 0 second: [[date timeZone] secondsFromGMT]]; + [headers addObject: [date rfc822DateString] forKey: @"date"]; + } [headers addObject: @"1.0" forKey: @"MIME-Version"]; } diff --git a/OpenChange/MAPIStoreObject.m b/OpenChange/MAPIStoreObject.m index f2f8d0ebe..fd727e180 100644 --- a/OpenChange/MAPIStoreObject.m +++ b/OpenChange/MAPIStoreObject.m @@ -20,7 +20,9 @@ * Boston, MA 02111-1307, USA. */ +#import #import +#import #import #import #import @@ -432,16 +434,37 @@ static Class NSExceptionK, MAPIStoreFolderK; struct SPropValue *cValue; NSUInteger counter; NSMutableDictionary *newProperties; + NSTimeZone *tz; + NSInteger tzOffset; + id value; + + tz = nil; newProperties = [NSMutableDictionary dictionaryWithCapacity: aRow->cValues]; for (counter = 0; counter < aRow->cValues; counter++) { cValue = aRow->lpProps + counter; - if ((cValue->ulPropTag & 0xfff) == PT_STRING8) - [self warnWithFormat: - @"attempting to set string property as PR_STRING8: %.8x", - cValue->ulPropTag]; - [newProperties setObject: NSObjectFromSPropValue (cValue) + value = NSObjectFromSPropValue (cValue); + switch (cValue->ulPropTag & 0xffff) + { + case PT_STRING8: + case PT_MV_STRING8: + [self warnWithFormat: + @"attempting to set string property as PR_STRING8: %.8x", + cValue->ulPropTag]; + break; + case PT_SYSTIME: + if (!tz) + { + tz = [[self userContext] timeZone]; + tzOffset = -[tz secondsFromGMT]; + } + value = [value addYear: 0 month: 0 day: 0 + hour: 0 minute: 0 second: tzOffset]; + [value setTimeZone: tz]; + break; + } + [newProperties setObject: value forKey: MAPIPropertyKey (cValue->ulPropTag)]; } diff --git a/OpenChange/MAPIStoreTasksMessage.m b/OpenChange/MAPIStoreTasksMessage.m index 963c04a0b..cad848f76 100644 --- a/OpenChange/MAPIStoreTasksMessage.m +++ b/OpenChange/MAPIStoreTasksMessage.m @@ -329,7 +329,8 @@ iCalToDo *vToDo; id value; iCalDateTime *date; - NSString *status, *priority; + iCalTimeZone *tz; + NSString *status, *priority, *tzName; NSCalendarDate *now; NSInteger tzOffset; double doubleValue; @@ -338,6 +339,10 @@ vCalendar = [vToDo parent]; [vCalendar setProdID: @"-//Inverse inc.//OpenChange+SOGo//EN"]; + tzName = [[[self userContext] timeZone] name]; + tz = [iCalTimeZone timeZoneForName: tzName]; + [vCalendar addTimeZone: tz]; + // summary value = [properties objectForKey: MAPIPropertyKey (PR_NORMALIZED_SUBJECT_UNICODE)]; @@ -358,12 +363,12 @@ value = [value htmlToText]; } } - if (value && [value length] == 0) - value = nil; - [vToDo setComment: value]; - if (value) - [vToDo setComment: value]; + { + if ([value length] == 0) + value = nil; + [vToDo setComment: value]; + } // location value = [properties objectForKey: MAPIPropertyKey (PidLidLocation)]; @@ -388,31 +393,17 @@ if (value) { date = (iCalDateTime *) [vToDo uniqueChildWithTag: @"dtstart"]; - tzOffset = [[value timeZone] secondsFromGMTForDate: value]; - value = [value dateByAddingYears: 0 months: 0 days: 0 - hours: 0 minutes: 0 - seconds: -tzOffset]; - [date setDate: value]; + [date setTimeZone: tz]; + [date setDateTime: value]; } - else - { - [vToDo setStartDate: nil]; - } - + // due value = [properties objectForKey: MAPIPropertyKey (PidLidTaskDueDate)]; if (value) { date = (iCalDateTime *) [vToDo uniqueChildWithTag: @"due"]; - tzOffset = [[value timeZone] secondsFromGMTForDate: value]; - value = [value dateByAddingYears: 0 months: 0 days: 0 - hours: 0 minutes: 0 - seconds: -tzOffset]; - [date setDate: value]; - } - else - { - [vToDo setDue: nil]; + [date setTimeZone: tz]; + [date setDateTime: value]; } // completed @@ -426,10 +417,6 @@ seconds: -tzOffset]; [date setDate: value]; } - else - { - [vToDo setCompleted: nil]; - } // status value = [properties objectForKey: MAPIPropertyKey (PidLidTaskStatus)]; @@ -459,10 +446,8 @@ default: // IMPORTANCE_NORMAL priority = @"5"; } + [vToDo setPriority: priority]; } - else - priority = @"0"; // None - [vToDo setPriority: priority]; // percent complete // NOTE: this does not seem to work on Outlook 2003. PidLidPercentComplete's value From 07b500412fc0d2b7542a3ff6199a5efa51c81213 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 30 Mar 2012 20:02:33 +0000 Subject: [PATCH 10/36] Monotone-Parent: b0de6c606ce6f295a8956a42ed0f0bc3b6e3cca3 Monotone-Revision: 24970ed1a272e80da6d29bce76d7fb4093a1d2a6 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-03-30T20:02:33 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 4 ++++ OpenChange/MAPIStoreCalendarMessage.m | 11 +++++++---- OpenChange/MAPIStoreTasksMessage.m | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index ed8c5bedd..be5956ea4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,12 @@ 2012-03-30 Wolfgang Sourdeau + * OpenChange/MAPIStoreCalendarMessage.m (-save): remove comment if + content is "\n". + * OpenChange/MAPIStoreTasksMessage.m (-save): do not reset fields that have not been passed in the properties array, since only RopDeleteProperties should remove them. + Remove comment if content is "\n". * OpenChange/MAPIStoreObject.m (-addPropertiesFromRow:): dates are now all converted to the user's timezone, even though it just diff --git a/OpenChange/MAPIStoreCalendarMessage.m b/OpenChange/MAPIStoreCalendarMessage.m index 70aa0b64a..daa9cc83d 100644 --- a/OpenChange/MAPIStoreCalendarMessage.m +++ b/OpenChange/MAPIStoreCalendarMessage.m @@ -874,10 +874,13 @@ value = [value htmlToText]; } } - if (value && [value length] == 0) - value = nil; - [newEvent setComment: value]; - + if (value) + { + if ([value length] == 0 || [value isEqualToString: @"\\n"]) + value = nil; + [newEvent setComment: value]; + } + /* recurrence */ value = [properties objectForKey: MAPIPropertyKey (PidLidAppointmentRecur)]; diff --git a/OpenChange/MAPIStoreTasksMessage.m b/OpenChange/MAPIStoreTasksMessage.m index cad848f76..e3a24afe5 100644 --- a/OpenChange/MAPIStoreTasksMessage.m +++ b/OpenChange/MAPIStoreTasksMessage.m @@ -365,7 +365,7 @@ } if (value) { - if ([value length] == 0) + if ([value length] == 0 || [value isEqualToString: @"\\n"]) value = nil; [vToDo setComment: value]; } From 060b29f5562acf8ef509f180388815229cee8970 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 3 Apr 2012 20:56:58 +0000 Subject: [PATCH 11/36] Monotone-Parent: 24970ed1a272e80da6d29bce76d7fb4093a1d2a6 Monotone-Revision: 4759c8b57eaf377a0e0d928df4a65adaa731ad74 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-03T20:56:58 Monotone-Branch: ca.inverse.sogo --- debian/control-squeeze | 45 ++++++++++++++++++++++++++++++++++++++++++ debian/rules | 10 ++++++++++ 2 files changed, 55 insertions(+) create mode 100644 debian/control-squeeze diff --git a/debian/control-squeeze b/debian/control-squeeze new file mode 100644 index 000000000..019b6335b --- /dev/null +++ b/debian/control-squeeze @@ -0,0 +1,45 @@ +Source: sogo +Priority: optional +Maintainer: Inverse Support +Build-Depends: debhelper (>= 7.0.15), gobjc | objc-compiler, libgnustep-base-dev, libsope-appserver4.9-dev, libsope-core4.9-dev, libsope-gdl1-4.9-dev, libsope-ldap4.9-dev, libsope-mime4.9-dev, libsope-xml4.9-dev, libmemcached-dev, libxml2-dev, libsbjson-dev, libssl-dev, libcurl4-openssl-dev | libcurl4-gnutls-dev, libmapi-dev, libmapistore-dev, libmapiproxy-dev +Section: web +Standards-Version: 3.9.1 + +Package: sogo +Section: web +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, tmpreaper, sope4.9-libxmlsaxdriver, sope4.9-db-connector, gnustep-make, libcurl3 +Suggests: nginx +Description: a modern and scalable groupware + SOGo is a groupware server built around OpenGroupware.org (OGo) and + the SOPE application server with focus on scalability. + The Inverse edition of this project has many feature enhancements: + * CalDAV and GroupDAV compliance + * full handling of vCard as well as vCalendar/iCalendar formats + * support for folder sharing and ACLs + . + The Web interface has been rewritten in an AJAX fashion to provide a faster + UI for the users, consistency in look and feel with the Mozilla applications, + and to reduce the load of the transactions on the server. + +Package: sogo-openchange +Section: net +Priority: extra +Architecture: any +Depends: sogo (= ${binary:Version}), ${misc:Depends} +Description: a modern and scalable groupware - OpenChange backend + SOGo is a groupware server built around OpenGroupware.org (OGo) and + the SOPE application server with focus on scalability. + . + This package contains the backend plugin for using SOGo as a backend to OpenChange. + +Package: sogo-dbg +Section: debug +Priority: extra +Architecture: any +Depends: sogo (= ${binary:Version}), ${misc:Depends} +Description: a modern and scalable groupware - debugging symbols + SOGo is a groupware server built around OpenGroupware.org (OGo) and + the SOPE application server with focus on scalability. + . + This package contains the debugging symbols for SOGo. diff --git a/debian/rules b/debian/rules index 4c5529411..38028afbf 100755 --- a/debian/rules +++ b/debian/rules @@ -14,6 +14,9 @@ build-arch: build-arch-stamp build-arch-stamp: config.make # Add here commands to compile the arch part of the package. $(MAKE) + if pkg-config --atleast-version=1.0 libmapi; \ + then (cd OpenChange; $(MAKE)); \ + fi touch $@ clean: @@ -21,6 +24,9 @@ clean: dh_testroot rm -f build-arch-stamp if [ -f config.make ]; then make clean; fi + if pkg-config --atleast-version=1.0 libmapi; \ + then (cd OpenChange; make clean); \ + fi dh_clean install: install-arch @@ -37,6 +43,10 @@ install-arch: build-arch # dh_installdirs -s $(MAKE) DESTDIR=$(CURDIR)/debian/tmp GNUSTEP_INSTALLATION_DOMAIN=SYSTEM install + if pkg-config --atleast-version=1.0 libmapi; \ + then (cd OpenChange; $(MAKE) DESTDIR=$(CURDIR)/debian/tmp GNUSTEP_INSTALLATION_DOMAIN=SYSTEM install); \ + fi + mkdir -p debian/tmp/etc/default cp Scripts/sogo-default debian/tmp/etc/default/sogo mkdir -p debian/tmp/usr/share/lintian/overrides From 1e1cdcc89c84624095701fe2fcf576057d881270 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 4 Apr 2012 14:25:42 +0000 Subject: [PATCH 12/36] Monotone-Parent: 4759c8b57eaf377a0e0d928df4a65adaa731ad74 Monotone-Revision: 187ac928b725957508cddf0bb5f4aeebc606ab3e Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-04T14:25:42 Monotone-Branch: ca.inverse.sogo --- OpenChange/SOGoMAPIFSFolder.m | 1 + 1 file changed, 1 insertion(+) diff --git a/OpenChange/SOGoMAPIFSFolder.m b/OpenChange/SOGoMAPIFSFolder.m index 429e23f93..b26e0ea9d 100644 --- a/OpenChange/SOGoMAPIFSFolder.m +++ b/OpenChange/SOGoMAPIFSFolder.m @@ -39,6 +39,7 @@ #import "SOGoMAPIFSFolder.h" #undef DEBUG +#include #include #include #include From 6d22a0bb495e6a21d4ce48cc5a9791dee2faabeb Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 4 Apr 2012 14:33:59 +0000 Subject: [PATCH 13/36] Monotone-Parent: 187ac928b725957508cddf0bb5f4aeebc606ab3e Monotone-Revision: ef03560e468928024dd2c8b7176bc66f200c293c Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-04T14:33:59 Monotone-Branch: ca.inverse.sogo --- OpenChange/MAPIStoreFAIMessage.m | 1 + OpenChange/MAPIStoreFallbackContext.m | 1 + OpenChange/MAPIStoreRecurrenceUtils.m | 2 ++ OpenChange/NSArray+MAPIStore.m | 1 + OpenChange/NSDate+MAPIStore.m | 1 + 5 files changed, 6 insertions(+) diff --git a/OpenChange/MAPIStoreFAIMessage.m b/OpenChange/MAPIStoreFAIMessage.m index 81a9dfb9c..0611c6347 100644 --- a/OpenChange/MAPIStoreFAIMessage.m +++ b/OpenChange/MAPIStoreFAIMessage.m @@ -28,6 +28,7 @@ #import "MAPIStoreFAIMessage.h" #undef DEBUG +#include #include #include #include diff --git a/OpenChange/MAPIStoreFallbackContext.m b/OpenChange/MAPIStoreFallbackContext.m index f77ecea68..c5270d055 100644 --- a/OpenChange/MAPIStoreFallbackContext.m +++ b/OpenChange/MAPIStoreFallbackContext.m @@ -31,6 +31,7 @@ #import "MAPIStoreFallbackContext.h" #undef DEBUG +#include #include @implementation MAPIStoreFallbackContext diff --git a/OpenChange/MAPIStoreRecurrenceUtils.m b/OpenChange/MAPIStoreRecurrenceUtils.m index 010066e43..09d6ce793 100644 --- a/OpenChange/MAPIStoreRecurrenceUtils.m +++ b/OpenChange/MAPIStoreRecurrenceUtils.m @@ -21,6 +21,7 @@ */ #import +#import #import #import @@ -32,6 +33,7 @@ #import "NSDate+MAPIStore.h" #import "MAPIStoreRecurrenceUtils.h" +#include #include #include #include diff --git a/OpenChange/NSArray+MAPIStore.m b/OpenChange/NSArray+MAPIStore.m index 1192ce124..7a41245d4 100644 --- a/OpenChange/NSArray+MAPIStore.m +++ b/OpenChange/NSArray+MAPIStore.m @@ -29,6 +29,7 @@ #import "NSArray+MAPIStore.h" #undef DEBUG +#include #include #include #include diff --git a/OpenChange/NSDate+MAPIStore.m b/OpenChange/NSDate+MAPIStore.m index 1c09fd0a2..eb873978b 100644 --- a/OpenChange/NSDate+MAPIStore.m +++ b/OpenChange/NSDate+MAPIStore.m @@ -27,6 +27,7 @@ #import "NSDate+MAPIStore.h" #undef DEBUG +#include #include #include #include From ad900e855517f6ffdb286b0b1a3428d01510ed55 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 4 Apr 2012 14:42:03 +0000 Subject: [PATCH 14/36] Monotone-Parent: ef03560e468928024dd2c8b7176bc66f200c293c Monotone-Revision: 5917f0d7b5316a06c638876b97dc983b080ce797 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-04T14:42:03 Monotone-Branch: ca.inverse.sogo --- Apache/SOGo-debian.conf | 67 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Apache/SOGo-debian.conf diff --git a/Apache/SOGo-debian.conf b/Apache/SOGo-debian.conf new file mode 100644 index 000000000..f4f32a335 --- /dev/null +++ b/Apache/SOGo-debian.conf @@ -0,0 +1,67 @@ +Alias /SOGo.woa/WebServerResources/ \ + /usr/share/SOGo/WebServerResources/ +Alias /SOGo/WebServerResources/ \ + /usr/share/SOGo/WebServerResources/ +AliasMatch /SOGo/so/ControlPanel/Products/(.*)/Resources/(.*) \ + /usr/lib/GNUstep/SOGo/$1.SOGo/Resources/$2 + + + AllowOverride None + Order deny,allow + Allow from all + + + + SetHandler default-handler + + +## Uncomment the following to enable proxy-side authentication, you will then +## need to set the "SOGoTrustProxyAuthentication" SOGo user default to YES and +## adjust the "x-webobjects-remote-user" proxy header in the "Proxy" section +## below. +# +# AuthType XXX +# Require valid-user +# SetEnv proxy-nokeepalive 1 +# Allow from all +# + +ProxyRequests Off +SetEnv proxy-nokeepalive 1 +ProxyPreserveHost On + +# When using CAS, you should uncomment this and install cas-proxy-validate.py +# in /usr/lib/cgi-bin to reduce server overloading +# +# ProxyPass /SOGo/casProxy http://localhost/cgi-bin/cas-proxy-validate.py +# +# Order deny,allow +# Allow from your-cas-host-addr +# + +ProxyPass /SOGo http://127.0.0.1:20000/SOGo retry=0 + + +## adjust the following to your configuration + RequestHeader set "x-webobjects-server-port" "443" + RequestHeader set "x-webobjects-server-name" "yourhostname" + RequestHeader set "x-webobjects-server-url" "https://yourhostname" + +## When using proxy-side autentication, you need to uncomment and +## adjust the following line: +# RequestHeader set "x-webobjects-remote-user" "%{REMOTE_USER}e" + + RequestHeader set "x-webobjects-server-protocol" "HTTP/1.0" + RequestHeader set "x-webobjects-remote-host" %{REMOTE_HOST}e env=REMOTE_HOST + + AddDefaultCharset UTF-8 + + Order allow,deny + Allow from all + + +## We use mod_rewrite to pass remote address to the SOGo proxy. +# The remote address will appear in SOGo's log files and in the X-Forward +# header of emails. +RewriteEngine On +RewriteRule ^/SOGo/(.*)$ /SOGo/$1 [env=REMOTE_HOST:%{REMOTE_ADDR},PT] From 57e55c105dd2cf0998210a099d3bfd6e9263c982 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 4 Apr 2012 14:55:54 +0000 Subject: [PATCH 15/36] Monotone-Parent: 5917f0d7b5316a06c638876b97dc983b080ce797 Monotone-Revision: 3d32d81fda0002213d650cb8e71bfd4508d1b134 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-04T14:55:54 Monotone-Branch: ca.inverse.sogo --- Apache/SOGo-debian.conf | 67 ----------------------------------------- 1 file changed, 67 deletions(-) delete mode 100644 Apache/SOGo-debian.conf diff --git a/Apache/SOGo-debian.conf b/Apache/SOGo-debian.conf deleted file mode 100644 index f4f32a335..000000000 --- a/Apache/SOGo-debian.conf +++ /dev/null @@ -1,67 +0,0 @@ -Alias /SOGo.woa/WebServerResources/ \ - /usr/share/SOGo/WebServerResources/ -Alias /SOGo/WebServerResources/ \ - /usr/share/SOGo/WebServerResources/ -AliasMatch /SOGo/so/ControlPanel/Products/(.*)/Resources/(.*) \ - /usr/lib/GNUstep/SOGo/$1.SOGo/Resources/$2 - - - AllowOverride None - Order deny,allow - Allow from all - - - - SetHandler default-handler - - -## Uncomment the following to enable proxy-side authentication, you will then -## need to set the "SOGoTrustProxyAuthentication" SOGo user default to YES and -## adjust the "x-webobjects-remote-user" proxy header in the "Proxy" section -## below. -# -# AuthType XXX -# Require valid-user -# SetEnv proxy-nokeepalive 1 -# Allow from all -# - -ProxyRequests Off -SetEnv proxy-nokeepalive 1 -ProxyPreserveHost On - -# When using CAS, you should uncomment this and install cas-proxy-validate.py -# in /usr/lib/cgi-bin to reduce server overloading -# -# ProxyPass /SOGo/casProxy http://localhost/cgi-bin/cas-proxy-validate.py -# -# Order deny,allow -# Allow from your-cas-host-addr -# - -ProxyPass /SOGo http://127.0.0.1:20000/SOGo retry=0 - - -## adjust the following to your configuration - RequestHeader set "x-webobjects-server-port" "443" - RequestHeader set "x-webobjects-server-name" "yourhostname" - RequestHeader set "x-webobjects-server-url" "https://yourhostname" - -## When using proxy-side autentication, you need to uncomment and -## adjust the following line: -# RequestHeader set "x-webobjects-remote-user" "%{REMOTE_USER}e" - - RequestHeader set "x-webobjects-server-protocol" "HTTP/1.0" - RequestHeader set "x-webobjects-remote-host" %{REMOTE_HOST}e env=REMOTE_HOST - - AddDefaultCharset UTF-8 - - Order allow,deny - Allow from all - - -## We use mod_rewrite to pass remote address to the SOGo proxy. -# The remote address will appear in SOGo's log files and in the X-Forward -# header of emails. -RewriteEngine On -RewriteRule ^/SOGo/(.*)$ /SOGo/$1 [env=REMOTE_HOST:%{REMOTE_ADDR},PT] From 9e503e7d8f10c16638624098c21fc4644f6c33e7 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 4 Apr 2012 16:01:21 +0000 Subject: [PATCH 16/36] Debian: new "sogo-openchange" and "sogo-dev" packages; fixed some issues reported by lintian Monotone-Parent: 3d32d81fda0002213d650cb8e71bfd4508d1b134 Monotone-Revision: a1bd23348352232bd3363b00a4cd69557a3c780e Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-04T16:01:21 Monotone-Branch: ca.inverse.sogo --- debian/control | 24 +++++++++++++++++++++++- debian/rules | 39 +++++++++++++++++++++++++++------------ debian/sogo.install | 12 ++++++++++-- 3 files changed, 60 insertions(+), 15 deletions(-) diff --git a/debian/control b/debian/control index 7f20d1028..ce8e0415e 100644 --- a/debian/control +++ b/debian/control @@ -1,7 +1,7 @@ Source: sogo Priority: optional Maintainer: Inverse Support -Build-Depends: debhelper (>= 7.0.15), gobjc | objc-compiler, libgnustep-base-dev, libsope-appserver4.9-dev, libsope-core4.9-dev, libsope-gdl1-4.9-dev, libsope-ldap4.9-dev, libsope-mime4.9-dev, libsope-xml4.9-dev, libmemcached-dev, libxml2-dev, libsbjson-dev, libssl-dev, libcurl4-openssl-dev | libcurl4-gnutls-dev +Build-Depends: debhelper (>= 7.0.15), gobjc | objc-compiler, libgnustep-base-dev, libsope-appserver4.9-dev, libsope-core4.9-dev, libsope-gdl1-4.9-dev, libsope-ldap4.9-dev, libsope-mime4.9-dev, libsope-xml4.9-dev, libmemcached-dev, libxml2-dev, libsbjson-dev, libssl-dev, libcurl4-openssl-dev | libcurl4-gnutls-dev, libmapi-dev, libmapistore-dev, libmapiproxy-dev Section: web Standards-Version: 3.9.1 @@ -22,6 +22,28 @@ Description: a modern and scalable groupware UI for the users, consistency in look and feel with the Mozilla applications, and to reduce the load of the transactions on the server. +Package: sogo-dev +Section: devel +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: a modern and scalable groupware - development files + SOGo is a groupware server built around OpenGroupware.org (OGo) and + the SOPE application server with focus on scalability. + . + This package contains the development files for developing SOGo modules. + +Package: sogo-openchange +Section: net +Priority: extra +Architecture: any +Depends: sogo (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: a modern and scalable groupware - OpenChange backend + SOGo is a groupware server built around OpenGroupware.org (OGo) and + the SOPE application server with focus on scalability. + . + This package contains the backend plugin for using SOGo as a backend + to OpenChange. + Package: sogo-dbg Section: debug Priority: extra diff --git a/debian/rules b/debian/rules index 38028afbf..486706ba2 100755 --- a/debian/rules +++ b/debian/rules @@ -3,6 +3,8 @@ export DH_VERBOSE=1 # export DH_OPTIONS="-p sogo" +DESTDIR=$(CURDIR)/debian/tmp + config.make: configure dh_testdir ./configure @@ -23,28 +25,41 @@ clean: dh_testdir dh_testroot rm -f build-arch-stamp - if [ -f config.make ]; then make clean; fi - if pkg-config --atleast-version=1.0 libmapi; \ - then (cd OpenChange; make clean); \ + if [ -f config.make ]; \ + then \ + if pkg-config --atleast-version=1.0 libmapi; \ + then \ + (cd OpenChange; make clean); \ + fi; \ + make clean; \ fi dh_clean install: install-arch dh_testdir dh_testroot - dh_prep -i - dh_installdirs -i - dh_install -i +# dh_prep -i +# dh_installdirs -i +# dh_install -i install-arch: build-arch dh_testdir dh_testroot - dh_prep -i + dh_prep # dh_installdirs -s - $(MAKE) DESTDIR=$(CURDIR)/debian/tmp GNUSTEP_INSTALLATION_DOMAIN=SYSTEM install + $(MAKE) DESTDIR=$(DESTDIR) GNUSTEP_INSTALLATION_DOMAIN=SYSTEM install if pkg-config --atleast-version=1.0 libmapi; \ - then (cd OpenChange; $(MAKE) DESTDIR=$(CURDIR)/debian/tmp GNUSTEP_INSTALLATION_DOMAIN=SYSTEM install); \ + then \ + (cd OpenChange; \ + $(MAKE) \ + DESTDIR=$(DESTDIR) \ + GNUSTEP_INSTALLATION_DOMAIN=SYSTEM \ + install); \ + rm -f $(DESTDIR)/usr/lib/mapistore_backends/libMAPIStoreSOGo.so.1; \ + rm -f $(DESTDIR)/usr/lib/mapistore_backends/libMAPIStoreSOGo.so; \ + mv -f $(DESTDIR)/usr/lib/mapistore_backends/libMAPIStoreSOGo.so.1.0.0 \ + $(DESTDIR)/usr/lib/mapistore_backends/SOGo.so; \ fi mkdir -p debian/tmp/etc/default @@ -53,7 +68,7 @@ install-arch: build-arch cp debian/sogo.overrides debian/tmp/usr/share/lintian/overrides/sogo mkdir -p debian/tmp/etc/apache2/conf.d cp Apache/SOGo.conf debian/tmp/etc/apache2/conf.d/SOGo.conf - install -D -m 600 Scripts/sogo.cron debian/tmp/etc/cron.d/sogo + install -D -m 644 Scripts/sogo.cron debian/tmp/etc/cron.d/sogo # Build architecture dependant packages using the common target. binary-arch: build-arch install-arch @@ -74,8 +89,8 @@ binary-arch: build-arch install-arch ( cd debian/sogo-dbg/usr/lib/debug/usr/lib/; \ ln -s GNUstep/Frameworks/SOGo.framework/Versions/*/libSOGo* ./ ) dh_compress - dh_fixperms -X/etc/cron.d/sogo - dh_makeshlibs + dh_fixperms + dh_makeshlibs -X/usr/lib/mapistore_backends dh_shlibdeps dh_installdeb dh_gencontrol diff --git a/debian/sogo.install b/debian/sogo.install index e3c791a2d..61cbf5074 100644 --- a/debian/sogo.install +++ b/debian/sogo.install @@ -2,7 +2,15 @@ etc/default/sogo etc/apache2/conf.d/SOGo.conf etc/cron.d/sogo usr/sbin/* -usr/lib/GNUstep/* -usr/lib/lib* +usr/lib/GNUstep/Frameworks/* +usr/lib/GNUstep/Libraries/* +usr/lib/GNUstep/OCSTypeModels/* +usr/lib/GNUstep/SaxDrivers-4.9/* +usr/lib/GNUstep/SaxMappings/* +usr/lib/GNUstep/WOxElemBuilders-4.9/* +usr/lib/GNUstep/SOGo/*.SOGo +usr/lib/GNUstep/SOGo/Templates +usr/lib/GNUstep/SOGo/WebServerResources +usr/lib/lib*.so.* usr/include/GNUstep/* usr/share/lintian/* From 54cf621005f03cdc15399e15a45a7430d99e07b5 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 4 Apr 2012 16:05:04 +0000 Subject: [PATCH 17/36] Monotone-Parent: a1bd23348352232bd3363b00a4cd69557a3c780e Monotone-Revision: e3a9ec04316de2d167901095be0994ce71e98dd5 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-04T16:05:04 Monotone-Branch: ca.inverse.sogo --- debian/control | 12 ------------ debian/control-squeeze | 15 +++++++++++++-- debian/sogo-dev.install | 2 ++ debian/sogo-openchange.install | 2 ++ 4 files changed, 17 insertions(+), 14 deletions(-) create mode 100644 debian/sogo-dev.install create mode 100644 debian/sogo-openchange.install diff --git a/debian/control b/debian/control index ce8e0415e..fd59a148d 100644 --- a/debian/control +++ b/debian/control @@ -32,18 +32,6 @@ Description: a modern and scalable groupware - development files . This package contains the development files for developing SOGo modules. -Package: sogo-openchange -Section: net -Priority: extra -Architecture: any -Depends: sogo (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} -Description: a modern and scalable groupware - OpenChange backend - SOGo is a groupware server built around OpenGroupware.org (OGo) and - the SOPE application server with focus on scalability. - . - This package contains the backend plugin for using SOGo as a backend - to OpenChange. - Package: sogo-dbg Section: debug Priority: extra diff --git a/debian/control-squeeze b/debian/control-squeeze index 019b6335b..ce8e0415e 100644 --- a/debian/control-squeeze +++ b/debian/control-squeeze @@ -22,16 +22,27 @@ Description: a modern and scalable groupware UI for the users, consistency in look and feel with the Mozilla applications, and to reduce the load of the transactions on the server. +Package: sogo-dev +Section: devel +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: a modern and scalable groupware - development files + SOGo is a groupware server built around OpenGroupware.org (OGo) and + the SOPE application server with focus on scalability. + . + This package contains the development files for developing SOGo modules. + Package: sogo-openchange Section: net Priority: extra Architecture: any -Depends: sogo (= ${binary:Version}), ${misc:Depends} +Depends: sogo (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} Description: a modern and scalable groupware - OpenChange backend SOGo is a groupware server built around OpenGroupware.org (OGo) and the SOPE application server with focus on scalability. . - This package contains the backend plugin for using SOGo as a backend to OpenChange. + This package contains the backend plugin for using SOGo as a backend + to OpenChange. Package: sogo-dbg Section: debug diff --git a/debian/sogo-dev.install b/debian/sogo-dev.install new file mode 100644 index 000000000..a29817742 --- /dev/null +++ b/debian/sogo-dev.install @@ -0,0 +1,2 @@ +usr/include/GNUstep/* +usr/lib/lib*.so diff --git a/debian/sogo-openchange.install b/debian/sogo-openchange.install new file mode 100644 index 000000000..dcae5f4e2 --- /dev/null +++ b/debian/sogo-openchange.install @@ -0,0 +1,2 @@ +usr/lib/mapistore_backends/* +usr/lib/GNUstep/SOGo/SOGoBackend.MAPIStore From fb1e560c71d850f84d71646dc012f3d5194e436b Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 4 Apr 2012 16:10:25 +0000 Subject: [PATCH 18/36] Debian fixes Monotone-Parent: e3a9ec04316de2d167901095be0994ce71e98dd5 Monotone-Revision: 929e17ff05c17b5978929e33d5250710c9674c66 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-04T16:10:25 Monotone-Branch: ca.inverse.sogo --- debian/sogo.install | 1 - 1 file changed, 1 deletion(-) diff --git a/debian/sogo.install b/debian/sogo.install index 61cbf5074..8a55c7961 100644 --- a/debian/sogo.install +++ b/debian/sogo.install @@ -12,5 +12,4 @@ usr/lib/GNUstep/SOGo/*.SOGo usr/lib/GNUstep/SOGo/Templates usr/lib/GNUstep/SOGo/WebServerResources usr/lib/lib*.so.* -usr/include/GNUstep/* usr/share/lintian/* From 3d2c13d1a7515879e13a8610ab67ae7d313e2497 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 4 Apr 2012 20:28:18 +0000 Subject: [PATCH 19/36] Monotone-Parent: 929e17ff05c17b5978929e33d5250710c9674c66 Monotone-Revision: 403e9c9f8b6284761ab422dee636699902d4babe Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-04T20:28:18 Monotone-Branch: ca.inverse.sogo --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index fd59a148d..fb4425a7f 100644 --- a/debian/control +++ b/debian/control @@ -1,7 +1,7 @@ Source: sogo Priority: optional Maintainer: Inverse Support -Build-Depends: debhelper (>= 7.0.15), gobjc | objc-compiler, libgnustep-base-dev, libsope-appserver4.9-dev, libsope-core4.9-dev, libsope-gdl1-4.9-dev, libsope-ldap4.9-dev, libsope-mime4.9-dev, libsope-xml4.9-dev, libmemcached-dev, libxml2-dev, libsbjson-dev, libssl-dev, libcurl4-openssl-dev | libcurl4-gnutls-dev, libmapi-dev, libmapistore-dev, libmapiproxy-dev +Build-Depends: debhelper (>= 7.0.15), gobjc | objc-compiler, libgnustep-base-dev, libsope-appserver4.9-dev, libsope-core4.9-dev, libsope-gdl1-4.9-dev, libsope-ldap4.9-dev, libsope-mime4.9-dev, libsope-xml4.9-dev, libmemcached-dev, libxml2-dev, libsbjson-dev, libssl-dev, libcurl4-openssl-dev | libcurl4-gnutls-dev Section: web Standards-Version: 3.9.1 From e70aeda75b862c7eb3086d15cbc4e3f5cd8791c2 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 4 Apr 2012 20:37:42 +0000 Subject: [PATCH 20/36] Monotone-Parent: 49a23fbd758d213ee3123b508598dcc5bdede2a5 Monotone-Revision: 14299c2bb1edae221876accbfabb1adecd109549 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-04T20:37:42 Monotone-Branch: ca.inverse.sogo --- debian/control | 2 +- debian/control-squeeze | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/control b/debian/control index fb4425a7f..cb378e19b 100644 --- a/debian/control +++ b/debian/control @@ -25,7 +25,7 @@ Description: a modern and scalable groupware Package: sogo-dev Section: devel Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} +Depends: sogo (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} Description: a modern and scalable groupware - development files SOGo is a groupware server built around OpenGroupware.org (OGo) and the SOPE application server with focus on scalability. diff --git a/debian/control-squeeze b/debian/control-squeeze index ce8e0415e..e4339f79a 100644 --- a/debian/control-squeeze +++ b/debian/control-squeeze @@ -25,7 +25,7 @@ Description: a modern and scalable groupware Package: sogo-dev Section: devel Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} +Depends: sogo (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} Description: a modern and scalable groupware - development files SOGo is a groupware server built around OpenGroupware.org (OGo) and the SOPE application server with focus on scalability. From fde6d06c098ca643ae52389fca1e2c7cc8bb78d6 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 4 Apr 2012 20:45:21 +0000 Subject: [PATCH 21/36] Monotone-Parent: 14299c2bb1edae221876accbfabb1adecd109549 Monotone-Revision: 366adf06b05b4f972813f3e731ae3338140ba86e Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-04T20:45:21 Monotone-Branch: ca.inverse.sogo --- debian/control | 1 + debian/control-squeeze | 1 + 2 files changed, 2 insertions(+) diff --git a/debian/control b/debian/control index cb378e19b..6642d7fb3 100644 --- a/debian/control +++ b/debian/control @@ -26,6 +26,7 @@ Package: sogo-dev Section: devel Architecture: any Depends: sogo (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Replaces: sogo (<< ${binary:Version}) Description: a modern and scalable groupware - development files SOGo is a groupware server built around OpenGroupware.org (OGo) and the SOPE application server with focus on scalability. diff --git a/debian/control-squeeze b/debian/control-squeeze index e4339f79a..7a047b1a2 100644 --- a/debian/control-squeeze +++ b/debian/control-squeeze @@ -26,6 +26,7 @@ Package: sogo-dev Section: devel Architecture: any Depends: sogo (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Replaces: sogo (<< ${binary:Version}) Description: a modern and scalable groupware - development files SOGo is a groupware server built around OpenGroupware.org (OGo) and the SOPE application server with focus on scalability. From 974d1a6bd79e16a7a7e52df94dbefa3647539425 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 10 Apr 2012 14:48:14 +0000 Subject: [PATCH 22/36] Monotone-Parent: ba40327d7cdcc284485580a61af95f9056989d40 Monotone-Revision: c50f677f6d597a2c063db713c6e8af3961c44b34 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-10T14:48:14 Monotone-Branch: ca.inverse.sogo --- debian/sogo-openchange.install-multiarch | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 debian/sogo-openchange.install-multiarch diff --git a/debian/sogo-openchange.install-multiarch b/debian/sogo-openchange.install-multiarch new file mode 100644 index 000000000..d3f119d33 --- /dev/null +++ b/debian/sogo-openchange.install-multiarch @@ -0,0 +1,2 @@ +usr/lib/*/mapistore_backends/* +usr/lib/GNUstep/SOGo/SOGoBackend.MAPIStore From be172c6d05c14ef7dd6962b4c18febf9a6ac5920 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 10 Apr 2012 15:35:51 +0000 Subject: [PATCH 23/36] Split multiarch build in debian-multiarch for new distros Monotone-Parent: c50f677f6d597a2c063db713c6e8af3961c44b34 Monotone-Revision: 28e6e54b234c882f7da005f4413e9a5beeae28ef Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-10T15:35:51 Monotone-Branch: ca.inverse.sogo --- debian-multiarch/changelog | 48 ++++ debian-multiarch/compat | 1 + debian-multiarch/control | 61 +++++ debian-multiarch/copyright | 31 +++ debian-multiarch/rules | 105 +++++++++ debian-multiarch/sogo-dev.install | 2 + debian-multiarch/sogo.cron.daily | 6 + debian-multiarch/sogo.dirs | 3 + debian-multiarch/sogo.docs | 10 + debian-multiarch/sogo.init | 100 ++++++++ debian-multiarch/sogo.install | 15 ++ debian-multiarch/sogo.logrotate | 13 ++ debian-multiarch/sogo.overrides | 4 + debian-multiarch/sogo.postinst | 36 +++ debian-multiarch/sogo.postrm | 35 +++ debian-multiarch/sogo.preinst | 32 +++ debian-multiarch/sogo.prerm | 17 ++ debian-multiarch/source/format | 1 + debian/compat | 2 +- debian/sogo.overrides | 363 ------------------------------ debian/source/format | 1 + 21 files changed, 522 insertions(+), 364 deletions(-) create mode 100644 debian-multiarch/changelog create mode 100644 debian-multiarch/compat create mode 100644 debian-multiarch/control create mode 100644 debian-multiarch/copyright create mode 100755 debian-multiarch/rules create mode 100644 debian-multiarch/sogo-dev.install create mode 100644 debian-multiarch/sogo.cron.daily create mode 100644 debian-multiarch/sogo.dirs create mode 100644 debian-multiarch/sogo.docs create mode 100644 debian-multiarch/sogo.init create mode 100644 debian-multiarch/sogo.install create mode 100644 debian-multiarch/sogo.logrotate create mode 100644 debian-multiarch/sogo.overrides create mode 100644 debian-multiarch/sogo.postinst create mode 100644 debian-multiarch/sogo.postrm create mode 100644 debian-multiarch/sogo.preinst create mode 100644 debian-multiarch/sogo.prerm create mode 100644 debian-multiarch/source/format create mode 100644 debian/source/format diff --git a/debian-multiarch/changelog b/debian-multiarch/changelog new file mode 100644 index 000000000..82a72fc5b --- /dev/null +++ b/debian-multiarch/changelog @@ -0,0 +1,48 @@ +sogo (1.3.5) unstable; urgency=low + + * New upstream release. + + -- Inverse Support Wed, 25 January 2011 12:00:00 -0500 + +sogo (1.2.2) unstable; urgency=low + + * New upstream release. + + -- Inverse Support Tue, 04 May 2010 16:45:59 -0400 + +sogo (1.2.1) unstable; urgency=low + + * New upstream release. + * SOGo-debian.conf installed as /etc/apache2/conf.d/ + * SOGo.conf removed from documentation examples. + + -- Inverse Support Wed, 17 Feb 2010 11:06:41 -0500 + +sogo (1.2.0) unstable; urgency=low + + * New upstream release. + + -- Inverse Support Tue, 26 Jan 2010 08:34:20 -0500 + +sogo (1.1.0) unstable; urgency=low + + * New release + * Install a default Apache 2 configuration file. + * Added a dependency on sope4.9-libxmlsaxdriver, sope4.9-db-connector + + -- Inverse Support Wed, 28 Oct 2009 17:06:03 -0400 + +sogo (1.0.4) unstable; urgency=low + + * New release + * debian/control: + - bumped standards-version + - updated dependencies + + -- Inverse Support Tue, 11 Aug 2009 18:22:41 -0400 + +sogo (1.0.3) UNRELEASED; urgency=low + + * Initial package + + -- Cyril Robert Tue, 23 Dec 2008 00:49:45 +0100 diff --git a/debian-multiarch/compat b/debian-multiarch/compat new file mode 100644 index 000000000..45a4fb75d --- /dev/null +++ b/debian-multiarch/compat @@ -0,0 +1 @@ +8 diff --git a/debian-multiarch/control b/debian-multiarch/control new file mode 100644 index 000000000..1f861a83f --- /dev/null +++ b/debian-multiarch/control @@ -0,0 +1,61 @@ +Source: sogo +Priority: optional +Maintainer: Inverse Support +Build-Depends: debhelper (>= 8.0.0), gobjc | objc-compiler, libgnustep-base-dev, libsope-appserver4.9-dev, libsope-core4.9-dev, libsope-gdl1-4.9-dev, libsope-ldap4.9-dev, libsope-mime4.9-dev, libsope-xml4.9-dev, libmemcached-dev, libxml2-dev, libsbjson-dev, libssl-dev, libcurl4-openssl-dev | libcurl4-gnutls-dev, libmapi-dev, libmapistore-dev, libmapiproxy-dev +Section: web +Standards-Version: 3.9.2 + +Package: sogo +Pre-Depends: ${misc:Pre-Depends} +Multi-Arch: same +Section: web +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, tmpreaper, sope4.9-libxmlsaxdriver, sope4.9-db-connector, gnustep-make, libcurl3 +Suggests: nginx +Description: a modern and scalable groupware + SOGo is a groupware server built around OpenGroupware.org (OGo) and + the SOPE application server with focus on scalability. + The Inverse edition of this project has many feature enhancements: + * CalDAV and GroupDAV compliance + * full handling of vCard as well as vCalendar/iCalendar formats + * support for folder sharing and ACLs + . + The Web interface has been rewritten in an AJAX fashion to provide a faster + UI for the users, consistency in look and feel with the Mozilla applications, + and to reduce the load of the transactions on the server. + +Package: sogo-dev +Section: devel +Architecture: any +Depends: sogo (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Replaces: sogo (<< ${binary:Version}) +Description: a modern and scalable groupware - development files + SOGo is a groupware server built around OpenGroupware.org (OGo) and + the SOPE application server with focus on scalability. + . + This package contains the development files for developing SOGo modules. + +Package: sogo-openchange +Pre-Depends: ${misc:Pre-Depends} +Multi-Arch: same +Section: net +Priority: extra +Architecture: any +Depends: sogo (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: a modern and scalable groupware - OpenChange backend + SOGo is a groupware server built around OpenGroupware.org (OGo) and + the SOPE application server with focus on scalability. + . + This package contains the backend plugin for using SOGo as a backend + to OpenChange. + +Package: sogo-dbg +Section: debug +Priority: extra +Architecture: any +Depends: sogo (= ${binary:Version}), ${misc:Depends} +Description: a modern and scalable groupware - debugging symbols + SOGo is a groupware server built around OpenGroupware.org (OGo) and + the SOPE application server with focus on scalability. + . + This package contains the debugging symbols for SOGo. diff --git a/debian-multiarch/copyright b/debian-multiarch/copyright new file mode 100644 index 000000000..8c26684c5 --- /dev/null +++ b/debian-multiarch/copyright @@ -0,0 +1,31 @@ +This package was debianized by Inverse on +Mon, 27 Jul 2009 10:57:51 -0400. + +It was downloaded from http://www.sogo.nu/downloads/backend.html + +Upstream Authors: + + Inverse inc. + +Copyright: + + Copyright (C) 2006-2010 Inverse inc. + +License: + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +The Debian packaging is (c) 2009, Inverse and +is licensed under the GPL, see `/usr/share/common-licenses/GPL-2'. diff --git a/debian-multiarch/rules b/debian-multiarch/rules new file mode 100755 index 000000000..35c730cc8 --- /dev/null +++ b/debian-multiarch/rules @@ -0,0 +1,105 @@ +#!/usr/bin/make -f +# -*- makefile -*- +export DH_VERBOSE=1 +# export DH_OPTIONS="-p sogo" + +DESTDIR=$(CURDIR)/debian/tmp +DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) + +config.make: configure + dh_testdir + ./configure + +#Architecture +build: build-arch + +build-arch: build-arch-stamp +build-arch-stamp: config.make +# Add here commands to compile the arch part of the package. + $(MAKE) + if pkg-config --atleast-version=1.0 libmapi; \ + then (cd OpenChange; $(MAKE)); \ + fi + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-arch-stamp + if [ -f config.make ]; \ + then \ + if pkg-config --atleast-version=1.0 libmapi; \ + then \ + (cd OpenChange; make clean); \ + fi; \ + make clean; \ + fi + dh_clean + +install: install-arch + dh_testdir + dh_testroot +# dh_prep -i +# dh_installdirs -i +# dh_install -i + +install-arch: build-arch + dh_testdir + dh_testroot + dh_prep +# dh_installdirs -s + + $(MAKE) DESTDIR=$(DESTDIR) GNUSTEP_INSTALLATION_DOMAIN=SYSTEM install + if pkg-config --atleast-version=1.0 libmapi; \ + then \ + (cd OpenChange; \ + $(MAKE) \ + DESTDIR=$(DESTDIR) \ + GNUSTEP_INSTALLATION_DOMAIN=SYSTEM \ + install); \ + rm -f $(DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH)/mapistore_backends/libMAPIStoreSOGo.so.1; \ + rm -f $(DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH)/mapistore_backends/libMAPIStoreSOGo.so; \ + mv -f $(DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH)/mapistore_backends/libMAPIStoreSOGo.so.1.0.0 \ + $(DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH)/mapistore_backends/SOGo.so; \ + fi + + mkdir -p debian/tmp/etc/default + cp Scripts/sogo-default debian/tmp/etc/default/sogo + mkdir -p debian/tmp/usr/share/lintian/overrides + cp debian/sogo.overrides debian/tmp/usr/share/lintian/overrides/sogo + mkdir -p debian/tmp/etc/apache2/conf.d + cp Apache/SOGo.conf debian/tmp/etc/apache2/conf.d/SOGo.conf + install -D -m 644 Scripts/sogo.cron debian/tmp/etc/cron.d/sogo + +# Build architecture dependant packages using the common target. +binary-arch: build-arch install-arch + dh_testdir + dh_testroot + dh_installinit -r + dh_installlogrotate + dh_installcron + dh_installchangelogs ChangeLog + dh_installdocs +# dh_installexamples + dh_installman + dh_install + dh_link + dh_strip --dbg-package=sogo-dbg +# workaround for http://sourceware.org/bugzilla/show_bug.cgi?id=9538 +# to let gdb find the symbols for libSOGo + ( cd debian/sogo-dbg/usr/lib/debug/usr/lib/; \ + ln -s GNUstep/Frameworks/SOGo.framework/Versions/*/libSOGo* ./ ) + dh_compress + dh_fixperms + dh_makeshlibs -X/usr/lib/$(DEB_HOST_MULTIARCH)/mapistore_backends + dh_shlibdeps + dh_installdeb + dh_gencontrol + dh_md5sums + dh_builddeb + +binary-indep: build install +# We have nothing to do by default. + +binary: binary-arch binary-indep +.PHONY: build clean binary-arch binary install install-arch diff --git a/debian-multiarch/sogo-dev.install b/debian-multiarch/sogo-dev.install new file mode 100644 index 000000000..a29817742 --- /dev/null +++ b/debian-multiarch/sogo-dev.install @@ -0,0 +1,2 @@ +usr/include/GNUstep/* +usr/lib/lib*.so diff --git a/debian-multiarch/sogo.cron.daily b/debian-multiarch/sogo.cron.daily new file mode 100644 index 000000000..09bf4a3b3 --- /dev/null +++ b/debian-multiarch/sogo.cron.daily @@ -0,0 +1,6 @@ +#!/bin/sh + +SOGOSPOOL=/var/spool/sogo + +/usr/sbin/tmpreaper 24 "$SOGOSPOOL" +find "$SOGOSPOOL" -mindepth 1 -type d -empty -exec /bin/rmdir -p {} \; 2> /dev/null diff --git a/debian-multiarch/sogo.dirs b/debian-multiarch/sogo.dirs new file mode 100644 index 000000000..77877b7bd --- /dev/null +++ b/debian-multiarch/sogo.dirs @@ -0,0 +1,3 @@ +etc +var +usr diff --git a/debian-multiarch/sogo.docs b/debian-multiarch/sogo.docs new file mode 100644 index 000000000..02b9d95c5 --- /dev/null +++ b/debian-multiarch/sogo.docs @@ -0,0 +1,10 @@ +NEWS +TODO +Scripts/sql-update-1.2.2_to_1.3.0.sh +Scripts/sql-update-1.2.2_to_1.3.0-mysql.sh +Scripts/sql-update-1.3.3_to_1.3.4.sh +Scripts/sql-update-1.3.3_to_1.3.4-mysql.sh +Scripts/sql-update-1.3.11_to_1.3.12.sh +Scripts/sql-update-1.3.11_to_1.3.12-mysql.sh +Scripts/sogo-backup.sh +Scripts/updates.php diff --git a/debian-multiarch/sogo.init b/debian-multiarch/sogo.init new file mode 100644 index 000000000..9dc4b5c27 --- /dev/null +++ b/debian-multiarch/sogo.init @@ -0,0 +1,100 @@ +#!/bin/bash +### BEGIN INIT INFO +# Provides: sogo +# Required-Start: $remote_fs $network +# Required-Stop: $remote_fs $network +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: SOGo server +### END INIT INFO + +# SOGo init script for Debian GNU/Linux +# +# Copyright (C) 2007-2010 Inverse inc. +# +# Author: Wolfgang Sourdeau +# Ludovic Marcotte +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This file is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +PATH=/sbin:/bin:/usr/sbin:/usr/bin + +NAME=sogo +DAEMON=/usr/sbin/sogod +DESC="SOGo" + +USER=$NAME +PREFORK=1 + +PIDFILE=/var/run/$NAME/$NAME.pid +LOGFILE=/var/log/$NAME/$NAME.log + +if [ -f /etc/default/$NAME ]; then + . /etc/default/$NAME +fi + +. /lib/lsb/init-functions + +if [ ! -x $DAEMON ]; then + log_failure_msg "$DAEMON is not executable." + exit 1 +fi + +set -e + +. /usr/share/GNUstep/Makefiles/GNUstep.sh + +DAEMON_OPTS="-WOWorkersCount $PREFORK -WOPidFile $PIDFILE -WOLogFile $LOGFILE" + +case "$1" in + start) + log_daemon_msg "Starting $DESC" "$NAME" + + # Ensure directory's existence and permissions + install -o $USER -g adm -m 755 -d /var/run/$NAME + install -o $USER -g adm -m 750 -d /var/spool/$NAME + install -o $USER -g adm -m 750 -d /var/log/$NAME + + if ! start-stop-daemon -c $USER --quiet --start --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS + then + log_progress_msg "already running" + fi + log_end_msg 0 + ;; + stop) + log_daemon_msg "Stopping $DESC" "$NAME" + start-stop-daemon --stop --pidfile $PIDFILE --retry=TERM/20/KILL/5 --oknodo + log_end_msg 0 + ;; + restart|force-reload) + log_daemon_msg "Restarting $DESC" "$NAME" + start-stop-daemon --stop --pidfile $PIDFILE --retry=TERM/20/KILL/5 --oknodo + # Ensure directory's existence and permissions + install -o $USER -g adm -m 755 -d /var/run/$NAME + install -o $USER -g adm -m 750 -d /var/spool/$NAME + install -o $USER -g adm -m 750 -d /var/log/$NAME + start-stop-daemon -c $USER --quiet --start --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS + log_end_msg 0 + ;; + status) + status_of_proc -p $PIDFILE "$DAEMON" $NAME && exit 0 || exit $? + ;; + *) + echo "Usage: $NAME {start|stop|restart|status}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/debian-multiarch/sogo.install b/debian-multiarch/sogo.install new file mode 100644 index 000000000..8a55c7961 --- /dev/null +++ b/debian-multiarch/sogo.install @@ -0,0 +1,15 @@ +etc/default/sogo +etc/apache2/conf.d/SOGo.conf +etc/cron.d/sogo +usr/sbin/* +usr/lib/GNUstep/Frameworks/* +usr/lib/GNUstep/Libraries/* +usr/lib/GNUstep/OCSTypeModels/* +usr/lib/GNUstep/SaxDrivers-4.9/* +usr/lib/GNUstep/SaxMappings/* +usr/lib/GNUstep/WOxElemBuilders-4.9/* +usr/lib/GNUstep/SOGo/*.SOGo +usr/lib/GNUstep/SOGo/Templates +usr/lib/GNUstep/SOGo/WebServerResources +usr/lib/lib*.so.* +usr/share/lintian/* diff --git a/debian-multiarch/sogo.logrotate b/debian-multiarch/sogo.logrotate new file mode 100644 index 000000000..2e8b28fd8 --- /dev/null +++ b/debian-multiarch/sogo.logrotate @@ -0,0 +1,13 @@ +/var/log/sogo/*.log { + daily + missingok + rotate 7 + compress + delaycompress + notifempty + create 640 sogo sogo + sharedscripts + postrotate + /etc/init.d/sogo restart > /dev/null 2>&1 + endscript +} diff --git a/debian-multiarch/sogo.overrides b/debian-multiarch/sogo.overrides new file mode 100644 index 000000000..cf3442214 --- /dev/null +++ b/debian-multiarch/sogo.overrides @@ -0,0 +1,4 @@ +sogo: embedded-javascript-library usr/lib/GNUstep/SOGo/WebServerResources/prototype.js +sogo: extra-license-file usr/lib/GNUstep/SOGo/WebServerResources/scriptaculous/MIT-LICENSE +sogo: embedded-javascript-library usr/lib/GNUstep/SOGo/WebServerResources/scriptaculous/scriptaculous.js +sogo: package-name-doesnt-match-sonames libGDLContentStore4.9 libNGCards4.9 libOGoContentStore0.9 libSOGoUI1.0 diff --git a/debian-multiarch/sogo.postinst b/debian-multiarch/sogo.postinst new file mode 100644 index 000000000..e43bfd92a --- /dev/null +++ b/debian-multiarch/sogo.postinst @@ -0,0 +1,36 @@ +#!/bin/bash + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package +# + +PATH=/bin:/sbin:/usr/bin:/usr/sbin + +case "$1" in + configure) + # update timestamp on imgs,css,js to let apache know the files changed + find /usr/lib/GNUstep/SOGo/WebServerResources -exec touch {} \; + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 0 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/debian-multiarch/sogo.postrm b/debian-multiarch/sogo.postrm new file mode 100644 index 000000000..9bed33fa5 --- /dev/null +++ b/debian-multiarch/sogo.postrm @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e + +# summary of how this script can be called: +# * `remove' +# * `purge' +# * `upgrade' +# * `failed-upgrade' +# * `abort-install' +# * `abort-install' +# * `abort-upgrade' +# * `disappear' overwrit>r> +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +case "$1" in + purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + if test "x$1" == "xpurge" + then + userdel -r sogo || true + rm -rf /var/spool/sogo + rm -rf /var/log/sogo + rm -rf /var/run/sogo + fi + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 0 +esac + +#DEBHELPER# + +exit 0 diff --git a/debian-multiarch/sogo.preinst b/debian-multiarch/sogo.preinst new file mode 100644 index 000000000..384bffc2a --- /dev/null +++ b/debian-multiarch/sogo.preinst @@ -0,0 +1,32 @@ +#!/bin/bash + +set -e + +# summary of how this script can be called: +# * `install' +# * `install' +# * `upgrade' +# * `abort-upgrade' +# +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +if test "x$1" == "xinstall" && test -z "$2" +then + if ! id sogo 1> /dev/null 2>&1; then + groupadd -f -K GID_MIN=100 -K GID_MAX=500 sogo + useradd -d /home/sogo -g sogo -m -K UID_MIN=100 -K UID_MAX=500 -K PASS_MAX_DAYS=-1 -s /bin/bash sogo + fi + + for dir in run spool log + do + if ! test -d /var/$dir/sogo + then + install -m 750 -o sogo -g sogo -d /var/$dir/sogo + fi + done +fi + +#DEBHELPER# + +exit 0 diff --git a/debian-multiarch/sogo.prerm b/debian-multiarch/sogo.prerm new file mode 100644 index 000000000..914a28b5e --- /dev/null +++ b/debian-multiarch/sogo.prerm @@ -0,0 +1,17 @@ +#!/bin/bash + +set -e + +# summary of how this script can be called: +# * `remove' +# * `upgrade' +# * `failed-upgrade' +# * `remove' `in-favour' +# * `deconfigure' `in-favour' +# `removing' +# +# for details, see /usr/share/doc/packaging-manual/ + +#DEBHELPER# + +exit 0 diff --git a/debian-multiarch/source/format b/debian-multiarch/source/format new file mode 100644 index 000000000..163aaf8d8 --- /dev/null +++ b/debian-multiarch/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/compat b/debian/compat index 7f8f011eb..45a4fb75d 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -7 +8 diff --git a/debian/sogo.overrides b/debian/sogo.overrides index 5a591ee62..cf3442214 100644 --- a/debian/sogo.overrides +++ b/debian/sogo.overrides @@ -1,367 +1,4 @@ -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/Search-bar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/abcard.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/accepted.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/account-settings.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/add-addressbook.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/add-calendar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/add-contact.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/add-user-addressbook.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/add-user-calendar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/addrbook.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/alarm.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/arrow-dwn-sharp.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/arrow-lft-sharp.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/arrow-rit-sharp.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/attachment.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/browser_firefox.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/browser_ie.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/browser_safari.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/busy.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/calendar-folder-16x16.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/calendar-reload.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/choose-date.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/images/spacer.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/about/dialogs/logo_ckeditor.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/flash/images/placeholder.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/link/images/anchor.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/pagebreak/images/pagebreak.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/showblocks/images/block_address.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/showblocks/images/block_blockquote.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/showblocks/images/block_div.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/showblocks/images/block_h1.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/showblocks/images/block_h2.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/showblocks/images/block_h3.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/showblocks/images/block_h4.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/showblocks/images/block_h5.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/showblocks/images/block_h6.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/showblocks/images/block_p.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/showblocks/images/block_pre.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/angel_smile.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/angry_smile.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/broken_heart.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/confused_smile.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/cry_smile.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/devil_smile.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/embaressed_smile.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/envelope.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/heart.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/kiss.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/lightbulb.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/omg_smile.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/regular_smile.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/sad_smile.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/shades_smile.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/teeth_smile.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/thumbs_down.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/thumbs_up.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/tounge_smile.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/smiley/images/wink_smile.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/templates/templates/images/template1.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/templates/templates/images/template2.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/templates/templates/images/template3.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/uicolor/uicolor.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/uicolor/yui/assets/hue_bg.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/uicolor/yui/assets/picker_mask.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/icons.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/images/arrowdown.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/images/arrowleft.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/images/arrowright.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/images/arrowtop.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/images/dialog_sides.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/images/dialog_sides.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/images/dialog_sides_rtl.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/images/mini.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/images/noimage.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/images/resizer.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/images/resizer_rtl.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/images/sprites.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/images/sprites_ie6.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/images/toolbar_start.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/kama/sprites.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/office2003/icons.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/office2003/images/arrowdown.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/office2003/images/arrowleft.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/office2003/images/arrowright.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/office2003/images/arrowtop.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/office2003/images/dialog_sides.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/office2003/images/dialog_sides.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/office2003/images/dialog_sides_rtl.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/office2003/images/mini.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/office2003/images/noimage.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/office2003/images/resizer.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/office2003/images/resizer_rtl.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/office2003/images/sprites.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/office2003/images/sprites_ie6.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/v2/icons.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/v2/images/arrowdown.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/v2/images/arrowleft.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/v2/images/arrowright.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/v2/images/arrowtop.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/v2/images/dialog_sides.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/v2/images/dialog_sides.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/v2/images/dialog_sides_rtl.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/v2/images/mini.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/v2/images/noimage.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/v2/images/resizer.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/v2/images/resizer_rtl.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/v2/images/sprites.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/v2/images/sprites_ie6.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/ckeditor/skins/v2/images/toolbar_start.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/closewindow.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/create-account.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/day-view-multicolumn.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/day-view.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/declined.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/delegated.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/dialog-left.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/dialog-right.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/dot.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/edit.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/empty.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/event-gradient.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/first.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/goto-today.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/green_corner.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/icon-deleted.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/icon-forwarded-replied.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/icon-forwarded.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/icon-new.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/icon-replied.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/icon_unread.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/important.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/inverse.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/last.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/lori_32x32.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/manage-filters.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/manage-imap.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/menu-check-hover.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/menu-check.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/menu-nocheck.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/message-copy.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/message.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-certificate.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-magicpoint.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-msword.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-ogg.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-pdf.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-postscript.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-rtf.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.lotus-1-2-3.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.ms-excel.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.ms-powerpoint.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.oasis.opendocument.graphics.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.oasis.opendocument.image.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.oasis.opendocument.presentation.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.oasis.opendocument.spreadsheet.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.oasis.opendocument.text-web.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.oasis.opendocument.text.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.rn-realmedia-secure.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.rn-realmedia-vbr.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.rn-realmedia.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.stardivision.calc.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.stardivision.impress.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.stardivision.writer.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.sun.xml.calc.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.sun.xml.draw.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.sun.xml.impress.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-vnd.sun.xml.writer.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-wordperfect.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-7z-compressed.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-abiword.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-applix-spreadsheet.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-applix-word.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-archive.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-arj.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-bzip-compressed-tar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-bzip.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-cd-image.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-compress.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-compressed-tar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-cpio-compressed.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-cpio.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-deb.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-dvi.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-executable.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-font-afm.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-font-bdf.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-font-linux-psf.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-font-pcf.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-font-sunos-news.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-font-ttf.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-gnumeric.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-gzip.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-gzpostscript.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-jar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-killustrator.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-kpresenter.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-kspread.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-kword.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-lha.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-lhz.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-lzma-compressed-tar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-lzma.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-ms-dos-executable.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-perl.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-php.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-python-bytecode.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-rar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-rpm.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-scribus.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-shellscript.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-shockwave-flash.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-stuffit.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-tar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-tarz.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-x-tex.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-xhtml+xml.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-application-zip.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-ascii.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-audio-x-generic.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-audio.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-binary.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-contents2.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-deb.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-document.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-empty.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-exec.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-folder_tar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-font-x-generic.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-font.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-font_bitmap.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-font_truetype.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-font_type1.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-gnome-fs-executable.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-gnome-fs-regular.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-gnome-package.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-gtk-file.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-html.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-image-x-generic.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-image.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-kpresenter_kpr.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-mime_ascii.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-misc.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-package-x-generic.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-package.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-package_editors.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-package_wordprocessing.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-plan.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-rpm.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-shellscript.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-sound.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-spreadsheet.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-stock_addressbook.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-stock_calendar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-stock_certificate.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-stock_script.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-tar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-template_source.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-text-html.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-text-plain.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-text-vnd.wap.wml.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-text-x-csh.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-text-x-generic-template.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-text-x-generic.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-text-x-preview.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-text-x-python.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-text-x-script.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-text-x-sh.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-text-x-vcalendar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-text-x-vcard.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-text-x-zsh.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-text.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-tgz.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-txt.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-txt2.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-unknown.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-vcalendar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-vcard.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-video-x-generic.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-video.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-wordprocessing.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-www.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-x-font-afm.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-x-office-address-book.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-x-office-calendar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-x-office-document.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-x-office-drawing.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-x-office-presentation.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-x-office-spreadsheet.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/mime-zip.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/minus.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/month-view.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/needs-action.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/new-card.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/new-event.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/new-list.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/new-task.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/next.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/non_sorted.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/offline-settings.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/plus.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/previous.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/properties.png sogo: embedded-javascript-library usr/lib/GNUstep/SOGo/WebServerResources/prototype.js -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/quota-level-alert.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/quota-level-ok.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/quota-level-warn.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/quota-level.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/read-messages.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/remote-addrbook.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/remove-addressbook.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/remove-calendar.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/remove-contact.gif sogo: extra-license-file usr/lib/GNUstep/SOGo/WebServerResources/scriptaculous/MIT-LICENSE sogo: embedded-javascript-library usr/lib/GNUstep/SOGo/WebServerResources/scriptaculous/scriptaculous.js -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/search-messages.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/slider_handle.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/sogo-logo.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/submenu-active.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/submenu-disabled.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/submenu.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tab_left_active.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tab_left_inactive.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tab_right_active.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tab_right_inactive.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-ab-properties-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-compose-attach-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-compose-contacts-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-compose-save-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-compose-security-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-compose-send-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-mail-addressbook-flat-16x16.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-mail-addressbook-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-mail-delete-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-mail-file-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-mail-forward-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-mail-getmail-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-mail-junk-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-mail-print-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-mail-reply-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-mail-replyall-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-mail-stop-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tb-mail-write-flat-24x24.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tbtv_account_17x17.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tbtv_corner_17x17.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tbtv_corner_minus_17x17.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tbtv_corner_plus_17x17.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tbtv_drafts_17x17.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tbtv_inbox_17x17.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tbtv_junction_17x17.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tbtv_leaf_corner_17x17.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tbtv_line_17x17.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tbtv_minus_17x17.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tbtv_plus_17x17.gif -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tbtv_sent_17x17.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tbtv_trash_17x17.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/tentative.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/title_attachment_14x14.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/title_read_14x14.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/title_sortdown_12x12.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/title_sortup_12x12.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/week-view.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/write-message.png -sogo: image-file-in-usr-lib usr/lib/GNUstep/SOGo/WebServerResources/write.png sogo: package-name-doesnt-match-sonames libGDLContentStore4.9 libNGCards4.9 libOGoContentStore0.9 libSOGoUI1.0 diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 000000000..163aaf8d8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) From 0f5639f1b883b8bff44a3ccafaaff69f852de934 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 10 Apr 2012 16:02:54 +0000 Subject: [PATCH 24/36] Fix empty package Monotone-Parent: 28e6e54b234c882f7da005f4413e9a5beeae28ef Monotone-Revision: cac9e2abd986a1cd4f20b31e0c48359b21028a7d Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-10T16:02:54 Monotone-Branch: ca.inverse.sogo --- debian-multiarch/sogo-openchange.install | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 debian-multiarch/sogo-openchange.install diff --git a/debian-multiarch/sogo-openchange.install b/debian-multiarch/sogo-openchange.install new file mode 100644 index 000000000..d3f119d33 --- /dev/null +++ b/debian-multiarch/sogo-openchange.install @@ -0,0 +1,2 @@ +usr/lib/*/mapistore_backends/* +usr/lib/GNUstep/SOGo/SOGoBackend.MAPIStore From d19e0e882364efd5ab791266e511fdbe01844ce7 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 11 Apr 2012 13:48:28 +0000 Subject: [PATCH 25/36] Monotone-Parent: cac9e2abd986a1cd4f20b31e0c48359b21028a7d Monotone-Revision: 57d6964f28d741f062f7dd0eb4065411c322df25 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-11T13:48:28 Monotone-Branch: ca.inverse.sogo --- debian-multiarch/rules | 12 +++++++++++- debian/rules | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/debian-multiarch/rules b/debian-multiarch/rules index 35c730cc8..1580a1ce5 100755 --- a/debian-multiarch/rules +++ b/debian-multiarch/rules @@ -6,9 +6,12 @@ export DH_VERBOSE=1 DESTDIR=$(CURDIR)/debian/tmp DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) +include /etc/GNUstep/GNUstep.conf +include /usr/share/GNUstep/Makefiles/common.make + config.make: configure dh_testdir - ./configure + ./configure --prefix=$(GNUSTEP_SYSTEM_ROOT) #Architecture build: build-arch @@ -26,6 +29,9 @@ clean: dh_testdir dh_testroot rm -f build-arch-stamp + ( cd Tests/Integration; make clean ) + rm -f Tests/Integration/config.py + -find Tests -name "*.pyc" -exec rm -f {} \; if [ -f config.make ]; \ then \ if pkg-config --atleast-version=1.0 libmapi; \ @@ -34,6 +40,10 @@ clean: fi; \ make clean; \ fi + -rm -f OpenChange/MAPIStorePropertySelectors.* + -find OpenChange -type d -name "unrtf-*" -exec rm -rf {} \; + -rm -f OpenChange/unrtf*-stamp + -rm -f config.make dh_clean install: install-arch diff --git a/debian/rules b/debian/rules index 486706ba2..023869853 100755 --- a/debian/rules +++ b/debian/rules @@ -5,9 +5,12 @@ export DH_VERBOSE=1 DESTDIR=$(CURDIR)/debian/tmp +include /etc/GNUstep/GNUstep.conf +include /usr/share/GNUstep/Makefiles/common.make + config.make: configure dh_testdir - ./configure + ./configure --prefix=$(GNUSTEP_SYSTEM_ROOT) #Architecture build: build-arch @@ -25,6 +28,9 @@ clean: dh_testdir dh_testroot rm -f build-arch-stamp + ( cd Tests/Integration; make clean ) + rm -f Tests/Integration/config.py + -find Tests -name "*.pyc" -exec rm -f {} \; if [ -f config.make ]; \ then \ if pkg-config --atleast-version=1.0 libmapi; \ @@ -33,6 +39,10 @@ clean: fi; \ make clean; \ fi + -rm -f OpenChange/MAPIStorePropertySelectors.* + -find OpenChange -type d -name "unrtf-*" -exec rm -rf {} \; + -rm -f OpenChange/unrtf*-stamp + -rm -f config.make dh_clean install: install-arch From d804b9c7b0d262f8403b3838af96f26f1dbbb307 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 11 Apr 2012 15:31:25 +0000 Subject: [PATCH 26/36] Rolled back to compat=7 for old debian dists Monotone-Parent: 57d6964f28d741f062f7dd0eb4065411c322df25 Monotone-Revision: 19df67a347106e2e3f51c36766416cf4c3279bee Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-11T15:31:25 Monotone-Branch: ca.inverse.sogo --- debian/compat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/compat b/debian/compat index 45a4fb75d..7f8f011eb 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -8 +7 From 2dd2db084defb55679df2515903ef2bf79fc006f Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 11 Apr 2012 20:10:00 +0000 Subject: [PATCH 27/36] Monotone-Parent: 19df67a347106e2e3f51c36766416cf4c3279bee Monotone-Revision: d32a965a357a3d40a91ce6b756792c0e03dc7414 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-11T20:10:00 Monotone-Branch: ca.inverse.sogo --- ...Native Microsoft Outlook Configuration.odt | Bin 24986 -> 26678 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Documentation/SOGo Native Microsoft Outlook Configuration.odt b/Documentation/SOGo Native Microsoft Outlook Configuration.odt index 316b81cc45888c838c24a5bf5b2e524d4b0673ac..5a5b9af372415868c34ad9ee21f1f0e5d67ec194 100644 GIT binary patch literal 26678 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 LUFK?hbN0UgNFsc` delta 22546 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 From 502b2764d93cd78796dbca410f6e07cee6b924b1 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 23 Apr 2012 15:17:02 +0000 Subject: [PATCH 28/36] Monotone-Parent: b2a750dba2c2bf3d145e44d412e5a647e552cf59 Monotone-Revision: 4db7d3fdd4a7987df1c5a8025f88b58228fa357c Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-04-23T15:17:02 Monotone-Branch: ca.inverse.sogo --- SOPE/NGCards/CardElement.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SOPE/NGCards/CardElement.h b/SOPE/NGCards/CardElement.h index b15b2175d..7bccaa46f 100644 --- a/SOPE/NGCards/CardElement.h +++ b/SOPE/NGCards/CardElement.h @@ -106,17 +106,18 @@ - (void) addType: (NSString *) aType; +/* rendering */ - (NSArray *) orderOfAttributeKeys; - (NSArray *) orderOfValueKeys; - - (NSString *) versitString; - (CardGroup *) searchParentOfClass: (Class) parentClass; +/* conversion */ - (id) elementWithClass: (Class) elementClass; +/* copy */ - (void) setAttributesAsCopy: (NSMutableDictionary *) someAttributes; - - (NSMutableArray *) deepCopyOfArray: (NSArray *) oldArray withZone: (NSZone *) aZone; - (NSMutableDictionary *) deepCopyOfDictionary: (NSDictionary *) oldDictionary From 905c635774bfd3f2e334bde0d01a9cb1682a9b0c Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Sat, 5 May 2012 03:01:23 +0000 Subject: [PATCH 29/36] Monotone-Parent: 63e5b1e4803ea8f6e3495f26b87df7a20d1ee379 Monotone-Revision: 8820ab3233ed6f1bdd0c2a203ea8208f8410f3bd Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-05-05T03:01:23 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 6 +++ OpenChange/MAPIStoreSOGo.m | 77 +++++++++++++++++++++++++++++++-- OpenChange/NSObject+MAPIStore.m | 3 ++ 3 files changed, 82 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index e1693e74c..0c9077e9d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2012-05-04 Wolfgang Sourdeau + + * OpenChange/MAPIStoreSOGo.m: register and unregister current + thread before and after each backend operation, in order to avoid + issues in multithreaded environment. + 2012-05-01 Wolfgang Sourdeau * UI/WebServerResources/generic.js (accessToSubscribedFolder): use diff --git a/OpenChange/MAPIStoreSOGo.m b/OpenChange/MAPIStoreSOGo.m index f2b6a807e..0e790a5b7 100644 --- a/OpenChange/MAPIStoreSOGo.m +++ b/OpenChange/MAPIStoreSOGo.m @@ -64,9 +64,11 @@ sogo_backend_atexit (void) { NSAutoreleasePool *pool; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; NSLog (@"allocated classes:\n%s", GSDebugAllocationList (YES)); [pool release]; + GSUnregisterCurrentThread (); } /** @@ -84,6 +86,7 @@ sogo_backend_init (void) SoProductRegistry *registry; char *argv[] = { SAMBA_PREFIX "/sbin/samba", NULL }; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; /* Here we work around a bug in GNUstep which decodes XML user @@ -149,6 +152,7 @@ sogo_backend_create_context(TALLOC_CTX *mem_ctx, DEBUG(0, ("[SOGo: %s:%d]\n", __FUNCTION__, __LINE__)); + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; if (MAPIStoreContextK) @@ -164,6 +168,7 @@ sogo_backend_create_context(TALLOC_CTX *mem_ctx, rc = MAPISTORE_ERROR; [pool release]; + GSUnregisterCurrentThread (); return rc; } @@ -182,6 +187,7 @@ sogo_backend_create_root_folder (const char *username, DEBUG(0, ("[SOGo: %s:%d]\n", __FUNCTION__, __LINE__)); + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; if (MAPIStoreContextK) @@ -200,6 +206,7 @@ sogo_backend_create_root_folder (const char *username, rc = MAPISTORE_ERROR; [pool release]; + GSUnregisterCurrentThread (); return rc; } @@ -215,6 +222,7 @@ sogo_backend_list_contexts(const char *username, struct tdb_wrap *indexingTdb, DEBUG(0, ("[SOGo: %s:%d]\n", __FUNCTION__, __LINE__)); + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; if (MAPIStoreContextK) @@ -229,6 +237,7 @@ sogo_backend_list_contexts(const char *username, struct tdb_wrap *indexingTdb, rc = MAPISTORE_ERROR; [pool release]; + GSUnregisterCurrentThread (); return rc; } @@ -263,9 +272,11 @@ sogo_context_get_path(void *backend_object, TALLOC_CTX *mem_ctx, { wrapper = backend_object; context = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [context getPath: path ofFMID: fmid inMemCtx: mem_ctx]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -291,11 +302,13 @@ sogo_context_get_root_folder(void *backend_object, TALLOC_CTX *mem_ctx, { wrapper = backend_object; context = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [context getRootFolder: &folder withFID: fid]; if (rc == MAPISTORE_SUCCESS) *folder_object = [folder tallocWrapper: mem_ctx]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -328,12 +341,14 @@ sogo_folder_open_folder(void *folder_object, TALLOC_CTX *mem_ctx, uint64_t fid, { wrapper = folder_object; folder = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [folder openFolder: &childFolder withFID: fid]; if (rc == MAPISTORE_SUCCESS) *childfolder_object = [childFolder tallocWrapper: mem_ctx]; // [context tearDownRequest]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -366,11 +381,13 @@ sogo_folder_create_folder(void *folder_object, TALLOC_CTX *mem_ctx, { wrapper = folder_object; folder = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [folder createFolder: &childFolder withRow: aRow andFID: fid]; if (rc == MAPISTORE_SUCCESS) *childfolder_object = [childFolder tallocWrapper: mem_ctx]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -403,9 +420,11 @@ sogo_folder_delete(void *folder_object) { wrapper = folder_object; folder = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [folder deleteFolder]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -429,9 +448,11 @@ sogo_folder_get_child_count(void *folder_object, enum mapistore_table_type table { wrapper = folder_object; folder = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [folder getChildCount: child_count ofTableType: table_type]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -459,6 +480,7 @@ sogo_folder_open_message(void *folder_object, { wrapper = folder_object; folder = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [folder openMessage: &message withMID: mid @@ -467,6 +489,7 @@ sogo_folder_open_message(void *folder_object, if (rc == MAPISTORE_SUCCESS) *message_object = [message tallocWrapper: mem_ctx]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -495,6 +518,7 @@ sogo_folder_create_message(void *folder_object, { wrapper = folder_object; folder = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [folder createMessage: &message withMID: mid @@ -502,6 +526,7 @@ sogo_folder_create_message(void *folder_object, if (rc == MAPISTORE_SUCCESS) *message_object = [message tallocWrapper: mem_ctx]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -525,9 +550,11 @@ sogo_folder_delete_message(void *folder_object, uint64_t mid, uint8_t flags) { wrapper = folder_object; folder = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [folder deleteMessageWithMID: mid andFlags: flags]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -560,6 +587,7 @@ sogo_folder_move_copy_messages(void *folder_object, wrapper = source_folder_object; sourceFolder = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [targetFolder moveCopyMessagesWithMIDs: src_mids andCount: mid_count @@ -568,6 +596,7 @@ sogo_folder_move_copy_messages(void *folder_object, andChangeKeys: target_change_keys wantCopy: want_copy]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -593,6 +622,7 @@ sogo_folder_get_deleted_fmids(void *folder_object, TALLOC_CTX *mem_ctx, { wrapper = folder_object; folder = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [folder getDeletedFMIDs: fmidsp andCN: cnp @@ -600,6 +630,7 @@ sogo_folder_get_deleted_fmids(void *folder_object, TALLOC_CTX *mem_ctx, inTableType: table_type inMemCtx: mem_ctx]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -626,6 +657,7 @@ sogo_folder_open_table(void *folder_object, TALLOC_CTX *mem_ctx, { wrapper = folder_object; folder = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [folder getTable: &table andRowCount: row_count @@ -634,6 +666,7 @@ sogo_folder_open_table(void *folder_object, TALLOC_CTX *mem_ctx, if (rc == MAPISTORE_SUCCESS) *table_object = [table tallocWrapper: mem_ctx]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -659,11 +692,13 @@ sogo_folder_modify_permissions(void *folder_object, uint8_t flags, { wrapper = folder_object; folder = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [folder modifyPermissions: permissions withCount: pcount andFlags: flags]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -689,10 +724,12 @@ sogo_message_get_message_data(void *message_object, { wrapper = message_object; message = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; [message getMessageData: msg_dataP inMemCtx: mem_ctx]; [pool release]; + GSUnregisterCurrentThread (); rc = MAPISTORE_SUCCESS; } else @@ -718,12 +755,14 @@ sogo_message_create_attachment (void *message_object, TALLOC_CTX *mem_ctx, void { wrapper = message_object; message = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [message createAttachment: &attachment inAID: aidp]; if (rc == MAPISTORE_SUCCESS) *attachment_object = [attachment tallocWrapper: mem_ctx]; // [context tearDownRequest]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -749,12 +788,14 @@ sogo_message_open_attachment (void *message_object, TALLOC_CTX *mem_ctx, { wrapper = message_object; message = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [message getAttachment: &attachment withAID: aid]; if (rc == MAPISTORE_SUCCESS) *attachment_object = [attachment tallocWrapper: mem_ctx]; // [context tearDownRequest]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -779,6 +820,7 @@ sogo_message_get_attachment_table (void *message_object, TALLOC_CTX *mem_ctx, vo { wrapper = message_object; message = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [message getAttachmentTable: &table andRowCount: row_count]; @@ -786,6 +828,7 @@ sogo_message_get_attachment_table (void *message_object, TALLOC_CTX *mem_ctx, vo *table_object = [table tallocWrapper: mem_ctx]; // [context tearDownRequest]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -812,12 +855,14 @@ sogo_message_modify_recipients (void *message_object, { wrapper = message_object; message = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [message modifyRecipientsWithRecipients: recipients andCount: count andColumns: columns]; // [context tearDownRequest]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -841,10 +886,12 @@ sogo_message_set_read_flag (void *message_object, uint8_t flag) { wrapper = message_object; message = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [message setReadFlag: flag]; // [context tearDownRequest]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -868,10 +915,12 @@ sogo_message_save (void *message_object) { wrapper = message_object; message = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [message saveMessage]; // [context tearDownRequest]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -895,10 +944,12 @@ sogo_message_submit (void *message_object, enum SubmitFlags flags) { wrapper = message_object; message = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [message submitWithFlags: flags]; // [context tearDownRequest]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -923,12 +974,11 @@ sogo_message_attachment_open_embedded_message DEBUG (5, ("[SOGo: %s:%d]\n", __FUNCTION__, __LINE__)); - pool = [NSAutoreleasePool new]; - if (attachment_object) { wrapper = attachment_object; attachment = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [attachment openEmbeddedMessage: &message withMID: midP @@ -937,6 +987,7 @@ sogo_message_attachment_open_embedded_message if (rc == MAPISTORE_SUCCESS) *message_object = [message tallocWrapper: mem_ctx]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -960,9 +1011,11 @@ static enum mapistore_error sogo_table_get_available_properties(void *table_obje { wrapper = table_object; table = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [table getAvailableProperties: propertiesP inMemCtx: mem_ctx]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -986,10 +1039,12 @@ sogo_table_set_columns (void *table_object, uint16_t count, enum MAPITAGS *prope { wrapper = table_object; table = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [table setColumns: properties withCount: count]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -1013,12 +1068,14 @@ sogo_table_set_restrictions (void *table_object, struct mapi_SRestriction *restr { wrapper = table_object; table = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; [table setRestrictions: restrictions]; [table cleanupCaches]; rc = MAPISTORE_SUCCESS; *table_status = TBLSTAT_COMPLETE; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -1042,12 +1099,14 @@ sogo_table_set_sort_order (void *table_object, struct SSortOrderSet *sort_order, { wrapper = table_object; table = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; [table setSortOrder: sort_order]; [table cleanupCaches]; rc = MAPISTORE_SUCCESS; *table_status = TBLSTAT_COMPLETE; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -1073,10 +1132,12 @@ sogo_table_get_row (void *table_object, TALLOC_CTX *mem_ctx, { wrapper = table_object; table = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [table getRow: data withRowID: row_id andQueryType: query_type inMemCtx: mem_ctx]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -1102,10 +1163,12 @@ sogo_table_get_row_count (void *table_object, { wrapper = table_object; table = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [table getRowCount: row_countp withQueryType: query_type]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -1129,9 +1192,11 @@ sogo_table_handle_destructor (void *table_object, uint32_t handle_id) { wrapper = table_object; table = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; [table destroyHandle: handle_id]; [pool release]; + GSUnregisterCurrentThread (); rc = MAPISTORE_SUCCESS; } else @@ -1157,9 +1222,11 @@ static enum mapistore_error sogo_properties_get_available_properties(void *objec { wrapper = object; propObject = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [propObject getAvailableProperties: propertiesP inMemCtx: mem_ctx]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -1186,11 +1253,13 @@ sogo_properties_get_properties (void *object, { wrapper = object; propObject = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [propObject getProperties: data withTags: properties andCount: count inMemCtx: mem_ctx]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -1214,9 +1283,11 @@ sogo_properties_set_properties (void *object, struct SRow *aRow) { wrapper = object; propObject = wrapper->MAPIStoreSOGoObject; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; rc = [propObject addPropertiesFromRow: aRow]; [pool release]; + GSUnregisterCurrentThread (); } else { @@ -1244,7 +1315,6 @@ sogo_manager_generate_uri (TALLOC_CTX *mem_ctx, /* This fixes a crash occurring during the instantiation of the NSAutoreleasePool below. */ GSRegisterCurrentThread (); - pool = [NSAutoreleasePool new]; // printf("rootURI = %s\n", rootURI); @@ -1268,7 +1338,6 @@ sogo_manager_generate_uri (TALLOC_CTX *mem_ctx, *uri = talloc_strdup (mem_ctx, [partialURLString UTF8String]); [pool release]; - GSUnregisterCurrentThread (); return MAPISTORE_SUCCESS; diff --git a/OpenChange/NSObject+MAPIStore.m b/OpenChange/NSObject+MAPIStore.m index 7fc75a74d..914d644a8 100644 --- a/OpenChange/NSObject+MAPIStore.m +++ b/OpenChange/NSObject+MAPIStore.m @@ -21,6 +21,7 @@ */ #import +#import #import #import "MAPIStoreTypes.h" @@ -44,11 +45,13 @@ MAPIStoreTallocWrapperDestroy (void *data) struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; + GSRegisterCurrentThread (); pool = [NSAutoreleasePool new]; wrapper = data; // NSLog (@"destroying wrapped object (wrapper: %p; object: %p)...\n", wrapper, wrapper->MAPIStoreSOGoObject); [wrapper->MAPIStoreSOGoObject release]; [pool release]; + GSUnregisterCurrentThread (); return 0; } From 5ef5bd94ee56f9cd2d0f5bd4866319069b4c4e1e Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 14 May 2012 20:17:21 +0000 Subject: [PATCH 30/36] Monotone-Parent: ec60fc6d9bbb30cc304f19f19609c756f5bebcd0 Monotone-Revision: f4084f570506f57a1c5cce79d74ec2112e81733e Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-05-14T20:17:21 Monotone-Branch: ca.inverse.sogo --- ...Native Microsoft Outlook Configuration.odt | Bin 26678 -> 25751 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Documentation/SOGo Native Microsoft Outlook Configuration.odt b/Documentation/SOGo Native Microsoft Outlook Configuration.odt index 5a5b9af372415868c34ad9ee21f1f0e5d67ec194..f6bd61998b121f454a4050f525ffb4e75b0ed75a 100644 GIT binary patch delta 23171 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 Date: Mon, 14 May 2012 20:20:26 +0000 Subject: [PATCH 31/36] Monotone-Parent: f4084f570506f57a1c5cce79d74ec2112e81733e Monotone-Revision: b458e410b31539173b547c1c563f0b7ce41f6252 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-05-14T20:20:26 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 3 ++ OpenChange/gen-property-selectors.py | 52 ++++++++++++++-------------- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index 387a35ca8..a5e9838bf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-05-14 Wolfgang Sourdeau + * OpenChange/gen-property-selectors.py: "bannedProps" is now a + set, for faster lookups. + * UI/WebServerResources/UIxContactsUserFolders.js: folder ids are in the form "user:module/folder", therefore we must remove the first char, which is a slash. diff --git a/OpenChange/gen-property-selectors.py b/OpenChange/gen-property-selectors.py index 0a496db39..57e25defd 100755 --- a/OpenChange/gen-property-selectors.py +++ b/OpenChange/gen-property-selectors.py @@ -106,32 +106,32 @@ extern const enum MAPITAGS MAPIStoreSupportedProperties[]; # hack: some properties have multiple and incompatible types. Sometimes those # props are not related at all... -bannedProps = [ "PidTagBodyHtml", "PidTagFavAutosubfolders", - "PidTagAttachDataObj", "PidTagAclTable", "PidTagAclData", - "PidTagRulesTable", "PidTagRulesData", "PidTagDisableWinsock", - "PidTagHierarchyServer", "PidTagOfflineAddrbookEntryid", - "PidTagShorttermEntryidFromObject", - "PidTagNormalMessageSizeExtended", - "PidTagAssocMessageSizeExtended", "PidTagMessageSizeExtended", - "PidTagOabContainerGuid", - "PidTagOfflineAddressBookMessageClass", "PidTagScriptData", - "PidTagOfflineAddressBookTruncatedProperties", - "PidTagOfflineAddressBookContainerGuid", - "PidTagOfflineAddressBookDistinguishedName", - "PidTagOfflineAddressBookShaHash", - "PidTagSenderTelephoneNumber", "PidTagGatewayNeedsToRefresh", - "PidTagWlinkType", "PidTagWlinkFlags", - "PidTagWlinkGroupClsid", "PidTagWlinkGroupName", - "PidTagWlinkGroupHeaderID", - "PidTagScheduleInfoDelegatorWantsCopy", "PidTagWlinkOrdinal", - "PidTagWlinkSection", "PidTagWlinkCalendarColor", - "PidTagWlinkAddressBookEID", "PidTagWlinkFolderType", - "PidTagScheduleInfoDelegateNames", - "PidTagScheduleInfoDelegateEntryIds", - "PidTagBusiness2TelephoneNumbers", - "PidTagHome2TelephoneNumbers", - "PidTagAttachDataObject", "PidTagShorttermEntryIdFromObject", - ] +bannedProps = {"PidTagBodyHtml", "PidTagFavAutosubfolders", + "PidTagAttachDataObj", "PidTagAclTable", "PidTagAclData", + "PidTagRulesTable", "PidTagRulesData", "PidTagDisableWinsock", + "PidTagHierarchyServer", "PidTagOfflineAddrbookEntryid", + "PidTagShorttermEntryidFromObject", + "PidTagNormalMessageSizeExtended", + "PidTagAssocMessageSizeExtended", "PidTagMessageSizeExtended", + "PidTagOabContainerGuid", + "PidTagOfflineAddressBookMessageClass", "PidTagScriptData", + "PidTagOfflineAddressBookTruncatedProperties", + "PidTagOfflineAddressBookContainerGuid", + "PidTagOfflineAddressBookDistinguishedName", + "PidTagOfflineAddressBookShaHash", + "PidTagSenderTelephoneNumber", "PidTagGatewayNeedsToRefresh", + "PidTagWlinkType", "PidTagWlinkFlags", + "PidTagWlinkGroupClsid", "PidTagWlinkGroupName", + "PidTagWlinkGroupHeaderID", + "PidTagScheduleInfoDelegatorWantsCopy", "PidTagWlinkOrdinal", + "PidTagWlinkSection", "PidTagWlinkCalendarColor", + "PidTagWlinkAddressBookEID", "PidTagWlinkFolderType", + "PidTagScheduleInfoDelegateNames", + "PidTagScheduleInfoDelegateEntryIds", + "PidTagBusiness2TelephoneNumbers", + "PidTagHome2TelephoneNumbers", + "PidTagAttachDataObject", "PidTagShorttermEntryIdFromObject", + } def ParseExchangeH(names, lines): state = 0 From cf1e0e3bc4b9a096300f78f546ce17c1ca00fb9b Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 14 May 2012 20:25:12 +0000 Subject: [PATCH 32/36] Modernized/simplified syntax Monotone-Parent: b458e410b31539173b547c1c563f0b7ce41f6252 Monotone-Revision: 896076b20bdf94cbc408070acc36cdf121794929 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-05-14T20:25:12 Monotone-Branch: ca.inverse.sogo --- OpenChange/gen-property-selectors.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/OpenChange/gen-property-selectors.py b/OpenChange/gen-property-selectors.py index 57e25defd..3052c21bd 100755 --- a/OpenChange/gen-property-selectors.py +++ b/OpenChange/gen-property-selectors.py @@ -199,7 +199,7 @@ def FindHFile(filename): return found def ProcessHeaders(names, hdict): - for filename in hdict.keys(): + for filename in hdict: header_filename = FindHFile(filename) header_file = open(header_filename, "r") lines = header_file.readlines() @@ -243,12 +243,10 @@ if __name__ == "__main__": prop_types = {} # sanitization: only take unicode version of text properties - all_keys = names.keys() - for name in all_keys: - prop_tag = names[name] + for name, prop_tag in names.iteritems(): prop_id = prop_tag >> 16 prop_type = prop_tag & 0xffff - if not prop_types.has_key(prop_id): + if not prop_id in prop_types: prop_types[prop_id] = [] prop_types[prop_id].append(prop_type) if (prop_type & 0xfff) == 0x001e: @@ -256,19 +254,15 @@ if __name__ == "__main__": names[name] = prop_tag #sanitization: report multiple types for the same keynames - all_keys = prop_types.keys() - for prop_id in all_keys: - xtypes = prop_types[prop_id] + for prop_id, xtypes in prop_types.iteritems(): cnt = len(xtypes) if cnt > 1: print "%d types available for prop id 0x%.4x: %s" % (cnt, prop_id, ", ".join(["%.4x" % x for x in xtypes])) supported_properties = [] - all_keys = names.keys() current_getter_idx = 0 highest_prop_idx = 0 - for name in all_keys: - prop_tag = names[name] + for name, prop_tag in names.iteritems(): supported_properties.append(" 0x%.8x" % prop_tag); prop_idx = (prop_tag & 0xffff0000) >> 16 getters_idx[prop_idx] = " 0x%.4x" % current_getter_idx From 1a46b346aa593e3a8cc9adfe9ecaf7550006b02e Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 14 May 2012 20:40:37 +0000 Subject: [PATCH 33/36] Monotone-Parent: 896076b20bdf94cbc408070acc36cdf121794929 Monotone-Revision: 25f8df1c5f86087b0e7ba1ba87e86db95ad798ab Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-05-14T20:40:37 Monotone-Branch: ca.inverse.sogo --- ...Native Microsoft Outlook Configuration.odt | Bin 25751 -> 25976 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Documentation/SOGo Native Microsoft Outlook Configuration.odt b/Documentation/SOGo Native Microsoft Outlook Configuration.odt index f6bd61998b121f454a4050f525ffb4e75b0ed75a..2ca726dde90a7fe34cd2335ee21929770fb1aa7f 100644 GIT binary patch delta 18730 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 i;aV~PcRC8D7L67<_1CIbTUs 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 Kp>;hT!~+0^Oz Date: Tue, 15 May 2012 13:24:04 +0000 Subject: [PATCH 34/36] Monotone-Parent: fa858afb28392ab411b14c34ac2889901bc0e49a Monotone-Revision: 22cbe59df1fd7bc7e696537291a1822e5d95e2f1 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-05-15T13:24:04 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 6 +++ OpenChange/gen-property-selectors.py | 57 +++++++++++++++------------- 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index a5e9838bf..c6352ae72 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2012-05-15 Wolfgang Sourdeau + + * OpenChange/gen-property-selectors.py: the use of the "{}" to + construct a set is only valid on py2.7 therefore we make use of + set([]) instead. + 2012-05-14 Wolfgang Sourdeau * OpenChange/gen-property-selectors.py: "bannedProps" is now a diff --git a/OpenChange/gen-property-selectors.py b/OpenChange/gen-property-selectors.py index 3052c21bd..e30ae6104 100755 --- a/OpenChange/gen-property-selectors.py +++ b/OpenChange/gen-property-selectors.py @@ -106,32 +106,37 @@ extern const enum MAPITAGS MAPIStoreSupportedProperties[]; # hack: some properties have multiple and incompatible types. Sometimes those # props are not related at all... -bannedProps = {"PidTagBodyHtml", "PidTagFavAutosubfolders", - "PidTagAttachDataObj", "PidTagAclTable", "PidTagAclData", - "PidTagRulesTable", "PidTagRulesData", "PidTagDisableWinsock", - "PidTagHierarchyServer", "PidTagOfflineAddrbookEntryid", - "PidTagShorttermEntryidFromObject", - "PidTagNormalMessageSizeExtended", - "PidTagAssocMessageSizeExtended", "PidTagMessageSizeExtended", - "PidTagOabContainerGuid", - "PidTagOfflineAddressBookMessageClass", "PidTagScriptData", - "PidTagOfflineAddressBookTruncatedProperties", - "PidTagOfflineAddressBookContainerGuid", - "PidTagOfflineAddressBookDistinguishedName", - "PidTagOfflineAddressBookShaHash", - "PidTagSenderTelephoneNumber", "PidTagGatewayNeedsToRefresh", - "PidTagWlinkType", "PidTagWlinkFlags", - "PidTagWlinkGroupClsid", "PidTagWlinkGroupName", - "PidTagWlinkGroupHeaderID", - "PidTagScheduleInfoDelegatorWantsCopy", "PidTagWlinkOrdinal", - "PidTagWlinkSection", "PidTagWlinkCalendarColor", - "PidTagWlinkAddressBookEID", "PidTagWlinkFolderType", - "PidTagScheduleInfoDelegateNames", - "PidTagScheduleInfoDelegateEntryIds", - "PidTagBusiness2TelephoneNumbers", - "PidTagHome2TelephoneNumbers", - "PidTagAttachDataObject", "PidTagShorttermEntryIdFromObject", - } +bannedProps = set(["PidTagBodyHtml", "PidTagFavAutosubfolders", + "PidTagAttachDataObj", "PidTagAclTable", "PidTagAclData", + "PidTagRulesTable", "PidTagRulesData", + "PidTagDisableWinsock", + "PidTagHierarchyServer", "PidTagOfflineAddrbookEntryid", + "PidTagShorttermEntryidFromObject", + "PidTagNormalMessageSizeExtended", + "PidTagAssocMessageSizeExtended", + "PidTagMessageSizeExtended", + "PidTagOabContainerGuid", + "PidTagOfflineAddressBookMessageClass", "PidTagScriptData", + "PidTagOfflineAddressBookTruncatedProperties", + "PidTagOfflineAddressBookContainerGuid", + "PidTagOfflineAddressBookDistinguishedName", + "PidTagOfflineAddressBookShaHash", + "PidTagSenderTelephoneNumber", + "PidTagGatewayNeedsToRefresh", + "PidTagWlinkType", "PidTagWlinkFlags", + "PidTagWlinkGroupClsid", "PidTagWlinkGroupName", + "PidTagWlinkGroupHeaderID", + "PidTagScheduleInfoDelegatorWantsCopy", + "PidTagWlinkOrdinal", + "PidTagWlinkSection", "PidTagWlinkCalendarColor", + "PidTagWlinkAddressBookEID", "PidTagWlinkFolderType", + "PidTagScheduleInfoDelegateNames", + "PidTagScheduleInfoDelegateEntryIds", + "PidTagBusiness2TelephoneNumbers", + "PidTagHome2TelephoneNumbers", + "PidTagAttachDataObject", + "PidTagShorttermEntryIdFromObject", + ]) def ParseExchangeH(names, lines): state = 0 From dbc75ceddbfa8700cd099ce6fcbd1c21f15f5a45 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 15 May 2012 13:24:15 +0000 Subject: [PATCH 35/36] alignment Monotone-Parent: 22cbe59df1fd7bc7e696537291a1822e5d95e2f1 Monotone-Revision: 3c99de4fc0fd90e4716ce18b2354e46dc72159ec Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-05-15T13:24:15 Monotone-Branch: ca.inverse.sogo --- OpenChange/gen-property-selectors.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/OpenChange/gen-property-selectors.py b/OpenChange/gen-property-selectors.py index e30ae6104..8c728bb99 100755 --- a/OpenChange/gen-property-selectors.py +++ b/OpenChange/gen-property-selectors.py @@ -233,8 +233,8 @@ if __name__ == "__main__": names = {} ProcessHeaders(names, - { "gen_ndr/exchange.h": ParseExchangeH, - "mapistore/mapistore_nameid.h": ParseMapistoreNameIDH }) + {"gen_ndr/exchange.h": ParseExchangeH, + "mapistore/mapistore_nameid.h": ParseMapistoreNameIDH}) getters = [] getters_idx = [] @@ -284,14 +284,14 @@ if __name__ == "__main__": filename = "%s.m" % output h_filename = "%s.h" % output outf = open(filename, "wb+") - outf.write(m_template % { "getters_idx": ",\n".join(getters_idx), - "getters": ",\n".join(getters), - "nbr_getters": len(getters), - "last_property": highest_prop_idx, - "nbr_supported_properties": len(supported_properties), - "supported_properties": ",\n".join(supported_properties), - "filename": filename, - "h_filename": h_filename }) + outf.write(m_template % {"getters_idx": ",\n".join(getters_idx), + "getters": ",\n".join(getters), + "nbr_getters": len(getters), + "last_property": highest_prop_idx, + "nbr_supported_properties": len(supported_properties), + "supported_properties": ",\n".join(supported_properties), + "filename": filename, + "h_filename": h_filename}) outf.close() outf = open(h_filename, "wb+") @@ -300,7 +300,7 @@ if __name__ == "__main__": if ord(x) < 65 or ord(x) > 90: x = "_" exclusion = exclusion + x - outf.write(h_template % { "prototypes": "\n".join(prototypes), - "h_exclusion": exclusion, - "filename": h_filename }) + outf.write(h_template % {"prototypes": "\n".join(prototypes), + "h_exclusion": exclusion, + "filename": h_filename }) outf.close() From 125c3fe24a3b91947f0f7d016f56720ab517187b Mon Sep 17 00:00:00 2001 From: Jean Raby Date: Wed, 16 May 2012 18:12:14 +0000 Subject: [PATCH 36/36] add autodiscovery.example.com to hosts file Monotone-Parent: 471dc0f5e3b2a6fc571aca4e14c0a5161cf7af0b Monotone-Revision: c8046798bce0f997bfa345dc5831f718d02a2638 Monotone-Author: jraby@inverse.ca Monotone-Date: 2012-05-16T18:12:14 Monotone-Branch: ca.inverse.sogo --- ...Native Microsoft Outlook Configuration.odt | Bin 25976 -> 54208 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Documentation/SOGo Native Microsoft Outlook Configuration.odt b/Documentation/SOGo Native Microsoft Outlook Configuration.odt index 2ca726dde90a7fe34cd2335ee21929770fb1aa7f..8b38028861faff71f12c9d13cfc555608f567b8b 100644 GIT binary patch delta 52474 zcmZsCV~}RS5@p-AZQHhOThq3`wr$(fnzn7*wr$PMd$GH*yRj9Kb?Q`RRppJi_s2aI z`8EOER}KoVBnt|L1_T5J1mu!fp9n7l`VW$~42Y9$^pW79prHOUEd=zRmK?6nfeZOB z5C{n5Ki$9fe=Sb_(P#aitJ(jHHU^ykd$#~HIN1N=pntK%$>;hg|MmZ8d}j)iY-j-W zUyf$T^Iu#+Bthny?(5s5fG5Mk7TUwc1qFpnhDO4b3S!nXh67-cLXKoWo7#pk#|>iL z8o>ceWau-6@x>G(nyw9C?J!9IB>?|R5fTb}Gs8{qU%IpZJLUiRV96dxjJVW^YPwnK zm1@gwdgPU|RWF{l`8-4kWb+`vY{`8{cz}&YyZl2NWGOQV35gMYQo!Hac$awoJE^un zfVWXoCuGd0`(E46)6?GKcJ|8M-tO$r=xy-$Q1g2v>e_hDr_&_D7uL_@-Y>(PvDR`( z>7#tGG{@mchv{~%$m?XHBma+O=|9iVvE=y?p6Av8h1h7r(J$teZ>-IX|mAkq2zuu1+bAHfzF>!km2IfkJoa@MlJ+Jp4?%Rd4s17VYX|m z;`s_u2iAb=YW)l`f@bF{gjX&E3Lc5gvl6>gz82U0!4~m^FEfFYL=KzkH62~`d#2^G zi12fWr8QRCg)(>>J%gRR;@&R)a=_d5R+J^~irLyb5aW41;;oBL#7T##@g_>u)fjwp zIkhfkFJcf8D7s(*Zb~0}=eED(4?~lItzA#VR)%Eg$;-+~%ket)NU#_BLP73)AO`(U zfLRu@0Evk0Ti?~#s_5_*7S`AsfKN(s#JiIod)p zQ}?lhwBl*{GCPZ40<2N)g3G2iBDUg2dNmh9ut%3hynmgyU0zG8>I`~tP%B@wrw%bG zU2V``P%hSKAJ_OQ#)_+fG`ZyZoxz$QcE({Z* zGAb2nqou>35RDK0B<16XVPZ(+7O)SbHha%DC`#@-jK6695&Mjlb47(m!^EKDj5S{l z|2o4?kI17C0`MlDesq=Qc>3?H0^hx9E92_KJ(-ndTfu3GjiL!xLLjjw2u43N-h!?L zSRcZj%Olx-*!Ca45Y$B-)R@ur${1<_bju#1>KY-Qx_@-wUvz$(;dL@g;eR*VctCzH zcvJsSVNwCAu#PScxu8}F|0Ow+*^?O9-WEW z!Ydz(R9H6V5A4%456{6?Jw>LN&|3aYi2C zk;NtF4HFH@jy7y1${$(a!Ts1r{YqHOD)5fdbv849fts}lDVtAeT zD+BiiS(fN={749;61>2aeqLo{74z3WoBd(ufa?1U1<@%JM)g{z_v`BW^XSHO8?}Jj zn-7ym3{S|-hd&(OtMgYe-AysJzc}E$rgMMYl*(6w^!Cv5Y>sTnYTXhv{wVmC(R;LV z2&W+Nx=qAt93Y6^S*Pu6XE79l({=OnJDN_qTu;N?jl5zvRfP(4{o?8WxwF5w@g2vm z0aydMSv(!fCv>t~_X>7>R`;<^S;-5oSxWGnJj8ijwPeszZj{XXww5v24vQNfrP2jA zNE$Z{2kO2vWcO9XeZJVsXU+xmK%bs$XJOPwhg|i+3K^B#Q-3F}@B^`j+cT>$O8kji4*$a&hxH0{Xf2zE|0Koia!~W=;A-jjVc|d5-s2|U71@gB8 z>5Y0teMz{UC!jON#2s4z5n zXk;yLdsOhuNC^D12_Dzv6{NGVge4IQFbZSF&_bus3{GIOyd%$&$Q>cd&1oj_C8D`v z9IeQ#PD>CO1@hTFB$=ub^;xsCo~Ho`P-+ucE~UGBy2T&98cZ}r#p|PHKESeYQ#ZT_-|gsyib~&_k=?$%J(6k-;Z0(LuXG zE|PTiF9Q>;CJ#Ot04=-aoWM+02}6?qCYA~>&WGfKqacY2T9a6B%uG(s6o~*gzf~(Q zNe09!(Id0Rf@B&#r3M^5=wCmh@$dX%GI7r~^vF%+FFl9& z)*gI<96!o+V%E)Vcg_a+*mgLCnOdVyKF62-=3<~%hE9kDxF8>QMI{3eeK&s_p&=>j`9p@ze%rfqf|zQuy1O zd8MTmnzARTp&Rin<^V;lG-^kfJWl-4x)a50OjV4*5io>=sm99|tb zmG!6zSwH0Uqz zzo&BJlivP*J84U_AgIyP^OM^&5&MT z7=@LQ(7%$Csel=cQNcBVFl7kE7bu!)fID-eh?x{j>aW{X!Nz0E+$c?2YlI|S=R!y`v1)j z;#Xk*{G%IzS@Zv>gh#r-*0)1^4*YaUq6&^!hYu&NT0ry?3=>O^$IQ%VfciNE@vHL1 zb)x=SMKFe3+Kjg1s3&cVIYy5kWHM|{$QE|z$oVQ>xh9U}P}-?B&mrD<3~1Q0{1EAn z=m8)|V^Ul-cSq;(&+tcQ2k*+&4bPFl-eCTXp7=I_L)|XKkx@r?Py5#LdA&k8xR&wc zhtVHMWl~Tyt0KdLnPhw-Zj-7_!+BPk1AfyZF*A1#1Kace$mfm?a^`t=LK{VuQ_ed90JU$vt8 z6nbwjhymdF-KZqM91yxU-Mk*9f;K2LjMk4{?hVs(P+HHBG7-=4}X~H1e;=(Ms$`O6^6Fy>@`Wx~zQHKsN zMWyIRdb6?2&W#~%#4`kP6n!-|;P^0iI(bk`LMP-1w(KFyNmcO$YZ5S|&ckjQRB$0e zOL)2IkOOB6Ybbr-z=+mtGRTThbWVVpI$o{1)U^^<1Q3*05XfaMWJ}XU9W$yR!D`6K z=P_P~;ZLz#s-Y`Ne8{ydOs%*xu3;j5AB@>v@5K0ZE*K0du|LnA&@5=yD>9rZ*X?5&;wG~h*}7D)q3FK7K#j#9y4wXYs8O z7$1}0cQ;`~j<-vM$dK$pOh16LD6H~_o5A;K;?8eJN<&k1nJqS$!l350t&Y*KF$uA~ zL@U!R6j``b9=@lbQas_6)5&#E=H$nuC{Vm=U<~=mfH!Q+E6k^78Y1_~K4|@WM{@@_z zsv#))(;47L_#nqJh@b`smAmtM-enJ@YseBA7;0HYJvsVVmtN*u4B=nK^qE>89Cxt0 z-^vFP*P@Z6B^kO_cl!Xp$rh0!=5WC_j_TcL%{=qn-UH<(J~PfVPC+vO*fQ7}Y-byv z8DGmL<0O`EG7#HgpRRBz#T!rJXUr(qSgr9ZN^&F8pT{A|5|F~u+W=h8KzVoYdU?Vr zxK&F{re|#4d{caiXeQrGB3vubb}_0%mtpwp1m+uVBEq!sgKhwsL8{s$*s6WI_^B&r z)Nj4Qs+yY0CGpBSY3^QiK4!bWY3rI;4pH`Wn zSn|n<2B>lzMYcgrRs>k<2$FWNh5wN*1xDe4FAMspn?NeUCxnEypgOkgZ#&T7<9V8H$>7 z`{-Z!=n;VIW&du)N46%Nt7DvVeh?jy^D@sI5uyX&`DA*vfDQEsE%2%tHf8E4n5}!W z&SnlSF4U$Caqrz8<2&5yRa;s~r+rbfxZFWt0^Rpl`q1tL|H0gvkMkU5W%8{#5DGF1 zS&K(1i1|n!%25{VmdVhqACM)v*+g3yICPQi<7vRL&v2$N3Xmp-@g6E{IK#LGwXhZmHx}YY5tG(4 z2mo7RGXcKV?7^0lEa@QTh!xDP4H!jq-}c_tH#wKQz|XTI9VBuJ?8)k^mvl@uf9#_{TBEzMads%sB}-UMI0-{a#K~PSr2OTZvZ#M zFY>}**u|p)Baq@(*LL%zrpTN6&zoYE9T9raQlWn5bRttxQ@pZ-cW82EDTp%{uOo|K zE-G>*tHo&zg$e$+0ar;{qhq!}3``KB(Kj4|tRbM7bpaga%@*6Ez*o;qqy{bwhC^(E z&BDJ;ct3q&EDEpJOT(x?_3RV`0DzgPW*;kM{e1C`HyT0k-_e5G^(mK8W2BKM{x5mT zz~$WoNW{50S-?yUbwbDoFn(kk`m9phLL=dRA#_9z1BzMM%tpI*|-u|hO-p=X}?x=XT5&f z4SFg%z51G^mgEmr;aQ*;(zPk?J(Yg&8wfmjIoj;imW;l#nX9}UJ%IZap4`wFuBI&! zQ&hqq1tSy{M!Db@bK!If)$zmP%`h=C62o^}1i?;$+C58`r}w?;OlA z;oG2m@EY?msq-)DKY#$onCh`(oP9NUg5ZS6A!s3OWBP1qgYj$aKL1Bilp(`96m3YM z1cx<;vO7fUH@0|=1+UG->5nJbmonI2`b> z`=!Yv1N<4*Z&zakRhqnx8)ZO13rX1e?b2tfIB~i*}fA54Rs@<`7h8es-92 z8~CSQ3W6b2Y27%FTxNUzhL-aeShuo=`E|r8YfO6BU6{ffyMfuUFk%5+N&s(5igQci zEoFG`FR<@Vn*eA@{wi9CeJYf3Qu&Wi+17$gi&%`j-Nl-3W>lrF!?4!Frh13O3H80o zl}?%6BZnUbm|pQA{z~p6CL~r;$-3;qCZ|#rRz@x9odz~Yw4e`=j>I;=NH!-kw_q>z zMOv2i^gv`v0W}lg0^#k`ixNlLhFw3@7@k(kuzzM&p9eeueQQtrewf{B~b_G1hmJaKztq;QpmTA~xk?HPD>PQc z4U4<1`F-efdBL^Yf#cphzdTnLbCak*3Lj|Z$_^k)nqM|5l+c7c)Q69WXG0QL=zEm{ z-6n;%jb}^XU+8<50$nDBm;2}WM;?_xXGP)p5ZUkemj3^Q?T&A*?@D0=DA?j%N*+m=nrfzFrOP7pT&J^$gJWHWY$IvS0YY^XJs@ZbEX%kq_V6U*$t~`l<0*XrKDn6Cv@pvCu(VNlG604s4i|jj%;sbK z*_*ZMw5jFMJ{$gN!srS@?I0>l`L3;6$f9v`I-zj0%==Pv)&@S4OBfkaISqCbOOQ3L zg;>M9%eFwdm-;lpX^Tn&GE1u)7Nm|_455{nC4O&GF54{zA**yTal~J^95B3)6)R%m z{(Og`z;SnE(Ozh63jhrllrfrm=klx;l5f@4YGG-H!;lm9@z?V1go0Q!qV40d!H9v! zb4t}gBBIO;zXW23n{|J&ngvSosN41Te*IWag>F=)u(mf(0(mrG))PNbkSYB(8!OV8afmSG zBTg%a{H~DJdpiF4%R)d@vo({;ksFtu_cQ>TikC$pRv})EupNUibEdVdbM&1)i?j{? zDh=h`(WR~1oP(xMl#f9E8OcdsBOZRCb`S!O#&waj=)TS5 zR(iz}{X=7!%gTR21WK@yNl7xJP?kFBTXxz@6)d&=luWVnTdp`l)$cEn&W+qFvo}xE z;$mTL9>Vomi61t9u3cHOw%u8Y25vXSwgvsr0N+a{D*!?SV!314d8GXBveSs2=f+x` zv?TTOj7V23Wp8!lx(4s}vQd3X8g}NUcAJ~z0)d|w5j+m|q$W({2VPL>azcc7GU zN!BcFkzCF3#cGN%Ep>Z}nshpQVawfZPY)C+!|=vuH!j_OaBc>K!$Tb)(W^Yek@8tf zw30V7T0iSthI*3TvUD%`Httsya&hOxB97w$0RJ8VZ8tXkvR$hdSuBS-BY=^g&MhSE z_#A|>%Zn55mspekkmLdLDG{yzFC-JYmJA}t;lw`0lbyG2<_;Lol&k)=iv5T_+QIUQ z&!V_3KfBazvZ*Oqf)_Wv$j8wb76wUyX(OJH+|!h?t4>2&SLu-`ZV|;!;YE@H2Ati5 z#|S#(I`o(DGRT%QFPi<;PpL}&V~uxN@i@vOa;qhIhEIxUeMjb~X+Od~*&FE6x1Gfs z%F$m7s=DbeJ-raGuKwhDDLxeX5HB{jU^BFsxE1BgF$f|pOpMy;zAagW-dXx~nB4NU zqe|JBHExr{Y{#ydLMih-+VDn#4xpEv?I|($X#j~zw5eA~etX$`{pA*U>~-N>^VrOC z*hKM5{kw&yCJfTj^}u@C?zw~oTr~7J2~u;pl~K+}rvj-r&$Y)iz{E|is`D8Pu%DNz zK?`+!V)gB>PjaNP@5Dq!5y)pk(CHu4BnDZyLK9V)^bkj<-BNk80Kqlm2PmQw7qOPm z)UkbC>|Eu%72IBE@cq1hcu~~EY~Xes_9G6*Y!EWk!Fp!;{pI&328DPt`&vMwqC_`g z^9pZs5|lTx#9;%<`k9o*Q_X5;E^lWl`h0Ed6lJ^6Nz;v7M!)bc^F8O7`j8SD7|uw6 z!bf#svf!^XvN@b!o*lF5XaIeU7uyxRgZ~5}{g#;4A=IT7H!ubp4>;`2#XXAwNGB0mAUxBc?mI2LCZDE(1Nq)~cDwM$o# z36R!#Qosm+FfCL8`TZT%Z6!1R%-340CSb%&`FeLv;i(LR(o9^tWRe1uLW3U$0t z@Kid}CaxTA$k=6s0x(RvIx=BTRZv-lRyFI(a5D481lWtNznetPFOHOO^On!Qe?$>d zC0NQUbXm$1$v!3FZOTkzhje2a81P72t4%{dm{Ib_@Ypc6C$GC5w*_jVxTCVIaKdS^ zNnv|ohpo@SA=+7i@qLa6VLZcVK&N0x^DGUFUS9d~@tTyV0^mu*N)}oj6dfSdS-%gv zPSR6z@PyC0k#zE7uiHh{AnOrWAq9P7+AQX(Azu-l@OFsn;}jdHmOm&L3TQD-`muIe4 zR?-j&{!&Wo8}~`=&6asja*=G$els&@5X|oGy%>;w1wf<={9u09c?@7kU{y}6mRW!U z(`*F~Nxm|c#W(|e~2%-8L>gl$$~(D9y*5sD(UpG|kHLL4M++S+MG{<-u(`;`og z)Q4{chV0m3KXcNcB9pq=AkHGHmKYh+cgy(J?roaCGinXOL$+ zl+y06Y7mw)+w!eR{^p;iay#(#J?sGzXRN(9R05DiG(HNuIxe}UG99Zxk7W5QP{ z)Vi+Qs2s`Qv4>MFmkFs?t5sEKPx_`d6qmJ1jbK3IE!jmvL+^@O}@p@Z%{2$J|YtiX5ueC+^aIr*rzVia-4S_{j zo?+)!%7vSJDX=8WvEnq0gbIHNcb>I78o5pa;ne}%=_bYiKEeB#CXC=T`r0z&9EyN$ z(eCbsHXjE`e}7xt!D;UG)B5d#n9l+9a}7cA46yU&X>$24C73^s=VNQ}1mHs2 zh`!CkfHyN4-+GYZubYST3BUro|6n#8a(w;s%QgD%;*09_Qc^qz$m`9?;OVAf-Hm{O zL9Hlzl2Ya@$a4MiF4Xe!^YUp;0>1Q^_bkY|6|7mhL#?2Hn>iulZck_T=UaJf!gD@2 zi&6t;u>1GP^rwer`qkI-Wjs;O`tQq2K{Y}u$hWvWNC8t=-`qX56M&(Cq$+K9LXYWZ zdD@|vr(|v)VIX_i-<}gx+WUfgvmpKAEG*;1XUz;J7*sC*Jm`$n(5WLZd&Zu2-|zG9 z{35I>MCkE>~tQpZoLW^530` zHJ8!p5gW$(YYulsQ-JNNzZi3bXGI-0I~8qnR)iHTR;9cKnD){z8117y9cFI#28xyS z|M^N6rl!%uefM#cU9&ll8U+x~ZMss6;>g?T9RW2yKGB%4Dm$PZFRS(+H1a*Zy+(N& zHGRRB$wWGP^1SEA3mGKAZgLA`?Wu9+?%r;c@nUDj{=k+O0L)PsRL^Ay7WUi{uCBCz zB5_Y;QR;+*Qk25Y?L@i?je3op>aC>JBp3q9!agZSwY&`SC`pvXPr`>zeg2L*&7C&$ zaXf6iG3nbEF|#auw{-;tMHUwY1j*M7kk~P|*)%gc#^`|Su+=h(X9|z&->`DWLuM+7 zN*{cV0;)6^0Emn^1qOl780z&mkUTPiYs6XF0n%CSaac~6LZtdmRONZS9ha&K@p<)e zniT}OT_R6H)elhN;!onUf%G5H;`8ROy}ZY{hlE_4M=zWY2r!(aCr(fOF*i`-5tChv zF&P@O+qQv`DB<(e@-XhcPOgm+X!~^Mj1_VuyqqYky z1qw)d0Hi>qKKdbpu!u%?W7btAL!0urq^lFj2?sq$0*I^|ixh!Ox@4jeCwNP?#Y@-w z%k%OL??m*XHRi(CL9JsMGd_V&p|R6P$X7o;u2R;!!8}T@Y=YwcA!?mURq+} z;12H_aAbJZk7_C?%V#4m=zx5S!T!z1fsL{Q_HQP&L^xlAuM-#BaPN-eSf{T0fc$DmbyZDBlFD7_xD>O?_&JG?aoZYWkle#s`oW7NJfxgIGYx&xClod2lqLJlEsLfru=N~oQ@tdJ(=HY9_9nT$ z5H*z3t>~^y0c~fgy`_JNJJj?-Z_DTcu=TIg+cvt``e%AO|L~vb?HVEA)^G^Tyw*i@ zoT0RGRd}SQb@{=!6^t%X)AQ|sSI;9a6w0=q{?UL%y!WoRJ2&*xIH<;s}K15S>TkSl2Iyv z##JI6fWZz*o#>6LXL3@3P`Uwbt)zlgNHyVWbI$#nNkp3rwz(1nN#?Qj5R6u?-p5b| z#5ORTrEweNAwGzfWVIQ9{CIvHQO~Yldqmwsn+M0R6Nlip%u3QPfFZjbk z*zWs_oSL$Ne%$LsA&tW)_f8GjMUQVu(M3Njqzgps0Lh^{gppq$a*xtH!p;4NA!s72s56W~OGx%$b-*YZ~+$}5z-p1Za}m8`zpjgt-?nk=}$ ztSXhR5+sXNmdY7W-pD1I?_XnVYSt2aXuN5K+d!_5um6@TgNQb(YpJ13+OoBXeGktv zLhGqh!JO&yYc)c%+@k-?=$OWCX%TuFlVv}9TT9?|jT(9lF)jPYE0SBOAZkNpC%TwaUg<19jLLu{t}e$r_{~ zvgoWaJs3Iw`j`-m7BlbHZZSj4=*j2;8;!Q4RlHXSxz}7b%QNV4rj8c!gr^vS3Adb5BY&Ptr^uO$a%YKTGK z!y}IxI=K@iyT6t|w_Bo$938hO#yJ~AiAO(Ds+FaH`|4k-J_{SA;6T^kuiFYA;v8Kw zIT!XyDhoyLFr!<6C;AoJD&hAdSN2V1N7f&1*)WCs=)T=hH4KPK+vOBSwkQ z9L2u@vRC3Ey00S~>@T`eVUj0qnf6e3Z>A z3^xKjmao2%W)hFVy`#WoVnmK+Nlj7JDM=(tOttj*sA_SH5!=!i)k5VfYXdL_av^xt z1d7;!EOvYU?w!KYhwEi4Z%pJ0&5l|&?V^YQdm=`KShOTYXRQag5&BODmRic5QqRxp z7&sdyiGTYMF$8=l#e)8HMRa?d*3vbWA-jyx-IimZbVs(q|E}h=Nj3N?RAY@rVBzu% z$E@b(F-l69h+1$q4dSVoRSn2Szz)EuwtKu>-TPNVjAU{g zO3Ot?`t&CWWN<8MagG6+Tskph7=6f^T&jkIM7>%@83-wqEB@_X2(EnQ|{p+HV?eqIP<1J+XW#uYqWy0bjN34Npr(z(s)Y&%lQ z3{^R)dP_vrEnewpUZz}%nhk>b_d^=j58M!`Rsqkl%I}CTmZ%`9F&w@k02^~EuX3t} z!Z|uJ%!m~N3|gUF*|k*Tnsg&dUS!zPOv#h#)SLwEW@?tQ*Jp|;3`#dFoa3<8wHpE7 z*tcAk1b(aN2{WVG36U;CG%|WAf8}q!;(NRf9?{w>aHWS}o!vTxRwi&b;0j;3<*GO@ ze-B^Bw1+-SF7>SvmKXA5fH)J8W;yGdJA%(sV03!3Ma5G*UxX@9!No*_w{fn1ah>`K za7&Q431w$qR;}<^^+*)2k9NDC`SB0wjLl=r1yy7AGa~q-4G9^9%uA!RePB3AHxjFY zIBdjVjm%KboS_zhq^_-?(yp%QO=;y0kU?s}4rT){+t({-v_NV#Ai>OTRQfD{`O0_v zMeT{t+$0G#nJrzS316&D)0|J&fRilv3`2T>kQx__`zz1nh7^)p=91=EV=C>78$;7e z?q#ru#&`b#AGUgZo00}zrxXK6-;0F!Ie@Ag3_Z_`CpArhCv|Fjo~_+j<1#OzNU<@M z?%cmtkt7bUh6NrRunl1w+%1!G5(vVeqN9`rn-w7c2F96PDHASynj&waz48;ZJ>V+$tpJnd8uT)i6KNe`lPv!G=T*-e`%TXbQk9303JV!B>GOz zXn4!v9tu|Hl9AmROC!1drNcV#Q*{=-F;2wZ(&T$CZ`h>{Z~+k(8{6ns0s54$h7;TI zPXkv|>AXa~7JGrC!+9VN%a{|huO?LaQkqbvqsIy#T@Z(Rxos?z2cmHvxKu*d=eeXo zZoYq}ShBU0&3-)wC-{hppx>cME2w=^>U4B?5bsGjpi^x&(dKXPyT)D4t zLiceZLNGgFDBU83+h@3hh5tB>yR1`CnBd9U=sPq|KJ+ zZo__MirkmLB&zG$QoEH*Gu+m^kw{ASJbol->1yd9Q5D*8z|!tn`tzPd5Sf%PS?M;# zeXu1a7ZAcM{3(c0@B0f9#0si{O1>B(sU;u2HkWhcsbqHed>!HLTJ(Ht-QOp8?K(fq zU7w-tP_Bt9HeLv>W+TUxoyQqK_&h`84YbVnlYj`Z!Y%7--Vj$(@QwPJPYarZadIYt zW#7da93jhMKUxbLM$MF_Mc;)Lqp;6Ej$u`W@b9OkKb)<8b;w;Bt9Yu;$O-D}>~YX4 z+x-69tYPKTt&_ z-su>MYPwJWx7?N`U>8GvV7(}W;}MNwx^C2G{xZYw^3U9CBO2^L6)}=M=Ei?~UQLN% zrL8(JLg^DHWgs2F&Ch1a7PF!M>Id$$2Hm0x4n~69v;=ihIl4q8 zD@n2ixKIEYA5zkk0Z@1f3Aec(ugUtEr5o@Po7)3HE~XyTyVxhvfyZ2@Eb7mNTGDt1 zLu>{@5Z-Ofphe5ER@cv(n@WCxXt>7e+4`)(FRbo5!jEOs|L_h!8b1+>j)$AJk@Sy& zSf?u$65`3`Ccjt<6wyP^$66rlxY&G=u9FKWROjCru#V;{1LPKZshPTr%~H!s>R%uv zx$cD-L=N`JXaa})Pl7J0zd>IVh@axb#>nF!uytgo zvz1^O6;ksLrw|k4NV_CC?@|A$j?G!qb{x;tQTgppK4^V6D2bUCZtJTuD_~2qvdb>a zbBP+!fii)&0O>t_$Zm$UOe--5Fu@O_yGr#2e`MA3YfbQ(zOZMBYhIv5Z1?q@F4vCN z#U@PkjO|tF<~8Kn`i}Jj%g9HejC0p(FdK@7EnHp-td+V%#D8+^j-M6U2~9yDTlpy4 zpfO-$ns*{){vnxyQl{zgOs(jApM3+I#3GdyHiZKk5Y^hln^b?`!K=_$Bg;Z)+n=>{ zTZoR=6VvX5{OA0ZG&;=n^&DfZx7Bzb&GKd6m<@k+TWQm)+BIl5Z5=7km^U^Nw!g5O zJn}Di4>UNMYl{`Qf6-gJo6?VM^S03!t#L$28CBQ^=L4jPfp)4 zD@{pIf`r;Bm|FpzD!b>RT8qyZe&zpzFZ zQwK54;8Yt|a}ZgMLpXX3(G6fj`}dt+k4_N6faGs%U&b(=e5H38o^tp=$f%dWj)b;Hlj82Sh@^QK~d^ewZz&4Rv$~^yuKg$B669jgR$cge z>`W1MUgD+)4lQ#$^sPZFs~Z|*lU6S_JUz(xa>ITtjL=qbkmOPN7icIH^CcD0U^Jve zxwfHOv)N!FW3(|KQGIRXOrk%LFlb;yxLcOxs&KI}b+j+$FghC5jzN`whsIQ|05+tG z@0kBywdV&UWncAx__;f4j_)Rt9c4<~FqFP^o}SF~p2u*K6U0KJ__%ZG z&)PXPFc0*k9kj6D;mgZ2&T-#e+~JKp7lV0NkY^Qlqbi-Bj=ij=o0&FW?ScdDyT`mb zA#6%zUDd#}nfN|DJ)M`v={9k0fM(%1vdURe%8os|$hCco1oCO?Y440hYH5Bu4jT9$0*7MKzT40W!~tDY$QmpPANF9kvZIkX zbXAP8&ta62jaLk@M^=qP5*x0#(yPzn@05%;{ga*L5{YkoGfVc zD6luuiY!ZZx!1$`q%NK#R>i22AB?H_Ye5=ke92^(j6p5AZB*|{WBJKxoP>b}B04^4 z`{Pe&`!B3q(E9t4oN5$bfRshc8|iGHQZAwIiH63rx1yanPQFK9EDh%Zy1<#OYy4V; z6C>B8#_t$cV~iZEJ7+7#GG%^6DIWSVjrvx-F`(&p6?G3XymNqW=&6dluSMLwM$?U34&uOz%X-SO)6vhH2JC+ z#{^=2tV3Dc8R|KwfLES8T8+tr4QqDShL(~WPk6$(jP#z*il*v|;$_p>1)k^!Ii1s# zlup0MdRVj$V7Oox8k@@6TP&$wWuHOY_4MVEK-X#T?8n_?#h%h))|S$OhxZ*kid#DB(z{4s*_OQJ6o5 zCzeTZ&n+=%Ey>`1#W>WQ+@yIGC?%@ucgS43Sk4&GG7ku>k`NsM zG-~konvj1s1WtR|+O1t+OY+)1+MFxVf9r3OVS-mV^Us|dB|}oQ%bCY+S~;W=`HSK) z&DAtsEOAQ%08|Z)Izcqwnv|!mzMQ@Idu#Ikw#6DpdAkNtwNE$d+4~;VC_}R4HS6o? zmvgQC^cH5{e6d`I zuW5#JS27~Y#}coXu7a!ldblpv>%Yc0KZJ6irW%+O>I!OUaH7#@{3vyc&d-N%r=`pz zlYE<8Ry4&a@l1lLWceUep9qsS??q~lOKvpc(+HL~)ck@!Uuy=o^W!@BBF!Kt#n%{jE}x!7-vTF+I9%K&)eSXg^W-v={lHlDEvPoz;zjnxqsq zjo{)uk>v)oGxx9DqJ$9!P9ZAH)9VJVTk1$J&$aRx0f)3z*&|~`!dhio+>fOyDl5!? z0@2(tt{c9*whOnd1sXKGOY*VU*wT5?q@yq(6~~@4!jr(tBk8_Sk7A7ibM~5JJ8<); z%eA-iAx&|1V7fBc&rQ}Ps^&S^9aClw&!98==#uJ?O$4cv*LdGu`p0aja@6o}F;PK8nnkT zT>h;SN-uE@x&$Jj`*z;r@-40?6p0pnb#eOqj(~$+COChsXL)ZJI7S`fjDr6imcg&; z3J-Z-y$Qx2VV&lal7ymTqI?}h#6jjlvGKUPOdhOdy4SIy_l0!v9XYC{F584J$_D~J z)NlG{S-K2 zC;Y`QM2~aeT#TGY47{JIllktP!Dm}1(9|#t=TmyV0>4t1u1br(Bwz(&26;qq+6vL( zkZ&^ikTyfA_9drWEArycUHQ5J*igmqN?7+SA3#{!U0gBthIkSlj0nY=|7J*ta7XL06P(`ynbKemyWeLqnEZ>FgOwL(FnRvpC|oE($O|{vc;>nM4rKZI;+$&z~joNlgG_s&8`~k4aJx z3>!D~$Jdzr+Adkai-Ol(^0Y?Rqx2&h6XhFyL-9DG_iNANvwm>&9VVR=u8;Tajt37q zB?AiFcjy6&S5=$TUDYiF|C<1`-@MN+9*5<$thsPQigTQJ79Lv2EM7jfrjBHoh1W z+fF8&*v7=RZDV5YzqPv;yS07QRbAE9H(k}|c~3oE{KmHQ>fp_kxT*uj*o}t2^ODV-o!Lr0+JqPRP`PmT*Yr|;D^*w{A6)}s>cxnS zh3<&LtFmrsoRYOJ+ga^6Z-P37LaVRG&!af)0We(xL9j#z?&S#{0^s^b^==eVmZ__@2%r3$v*`f{rqHxv=1PhOTre2R@ihF ztpgb5buc4P6~&yj5&?3E3rbjzN2}X^2;ULl+jQ#pLa9JD zZ`>ni5nvXTC+R-orxmWjnx!0|7B>}X?HsrjgK}?tc#Rq$yQM7+5BI`5k2)n2OI5b| zFs%4Okp4`6Jwc&8#?6K-d$n@k@LHn!S?!3%St>@cu6}F-&7y%a8ui8Wqvwn0e-_JC zP-N3Lh#(-^PXCV-LO3;ag9ilsKk-6izNS2AGNCprr-HeoqJ@REsW}rHBdejPxtlS$ zx`VYBv7(c?!~a@fbab&abaHXDF*kK%QZjZkwIXItj?^{-J_X4Q7 zc*}LI`S+dwSBerc=OlCn6a++pOsspPIsgQO8^Y*2nL{VY`4j|%AHX}?0(^1x#50BP zJ{DmXk2bG30C*+RobOKzO}c` zr}Fdc@6UJnT;2oX&Q3z*Dbj#|j$G>WDJF@KnqaYCL!Cfn)g(EV`4C&Kb8(Gh+rB%f z;}NOp9a!JRY(%Xv$Fp|UNosjfJbe8$-Xa-a>O+dBn)W5bS` zZ0_ivh+DD>nX4K|4#6x(a#LYk#QE9GviT`#D9oA9XWX?vwa;Hp%YovJrs@gMkR%V8 zZJQe-NVP#UPv~|He?idxjaIm*zIDfAUKQ*}Mza5xtF(d?fAn!;n@zgDH6DR=8eL zV&dJ^iqHoU{V5g#te=+{ze-zadEm8FahK92*tsAV^TMZId zl2C(n)qK_R6(x(cS5Wx>=I2DqqIvw+NWfHmezf>n$zk)2=^L-`YNhe_E_^|Q$YR*} z&Gr01-C8J=`4v+iZN(b3OcLU_;)9aK)YHqigD0sDkWrv~=?#NL(q*E9U)jf#f@&~_ z&1KMq2G8)5EmnRDU&CNt+NBJ<&rQqk<#hi|Qw@Bw;_#tO- z7|BCHMwOr0W|0l0L9mm#g!|6TN8Zk-!oif5oL_)MTOBrZ>lRNabTpU^={9^)d(1+X zjm5D7fNjA5=*VZNL^b@wVD*AmHM1vvZ~LT=d_@rUh&cLS-T6=Igr z51@?@`j9`GQFdrT{+UG5ld?1|^}2vcy=gp)v6MWFy2KiD?`zHWExM1i*u>!)t%iC6 zjZ-#hKm6g){>j&sV3*o2E1^K?%U(uR8;*QE5Id7m?;P%$!1~2F=Rh`YB zNsZd@B2tV`@4K4jBQQMjxM6X0nf6@q?3Zq*{db}9AD@qH;z-{1HAYVHPs55Iq>f79 z3BOaYE~!(N#fex^Y~U$z5nL{Mtzt`n|HLF+Aw>l19fip`+eDkbUz|rTtpw<=))&GH z*1xYO&FG4S(bH^=CyuI6%Dg&i%d^fCvvSTwVEs!>x{2Qfly2LfAUZG(QJrGE4XCJ$#C&-|)?jQocsCcw)FH1IDB zc}(=ee3N-q`igOQBT)Hut8TTUsQjb7W!oXIsDn*|j8OB#Chx4ujkb9G6VBv^hN#0R zV((~9*mD>CM90R2iBCu&tOZqis9GdcTUs4!P!mD`voNIUMyRdh)u#InbpaM6`TY5` zQ5#`MD){+_JRIJNptD6FTc6q$Fmbz&t&b45%7(p`SXpjSO!-fa&_R-p@%@*Q?Nme4 z=do}^Cz!J%7%T!08v^ebFQIqcpDX2VEDuc(gef9cQ?XZRGbSRJM=Pl_^6h8AI}=%D z;b9D2@*m7K9~Q6SaYPAV|9s;uqN<0&4Wm&GS(E)Nj4fGJ*<`Y|$oHp?kQIknD+W$In{|hwY;&AQ|F9!M&31Sb|;Q*m|BW&P3F*R3?6@ zDFWyNs}i)?d7q1pyFt|`^;&T}M!iq_G~HCyS09Wm^h$4D{TX3U)T!vWd}|hz>$cVcl*0C4IbKzjH>9whX%Wl7ES`WvVM< z?!mbZOt*#pj6x6m^n6wxXMnEJ`V;Y0?UW)ZzKp&R5wQT9R>;(x#+V`no{o?-_0lOG zfv1M9hLxeeQdnxE6?R+t-VNe0d=ga>1<5b*r(4(>S+(zp5Ml+p11)z}6f|zJssQ(xsNQga zh8ghJN{wC`_FVT|WHWJ{7OWru`s<#ekwzm@a)PFqhf%yH-XmE5#mrE#;%5# ziv1YgD%1VZNb?x!ip5ZB!Y*+YkP^#D2C*(YGZ24Teh)d~ysNRA^ZQihsD@&RMsA>g z98(mRev`vHF4W58pRs#OwO$?u>p#oL5eCEPSFXiAU|$14i9ttm>R>S#Z0~H_atkDrO`6=)@b$)eD@SrU^#>_> zzSc}_EfWmEz7g7IM=I&)1DVOi87+T|DpG$_fq*1k4-(3$qc|osE+Q2Qmc>3a? zp{c(MVB}EoOGqv6c|ZXYoG_H|*j_;I5lK1orVn-zai%8XQ^m@x8axm|+@fVM%*S97 zJ@CJqXun34(W%*}#y7<$1J2k)vx=|Q^X9b*Nih1)a#h$@?Mpec{Lk@cNg`AP!FkEC z`OoW85p2)2eWc!1Pn33hOyXCn$^&=Wkr_&IK(9OMXJe4+N!u)FVKQlAp(4{&iq;4C zV^`f$*4LFxT{79Ber(H*V|Vo5p7k+sNC_qXD3M6HvLP-kR9g$?h;PyJA&d=@We9eN zK2{nLSmXFB5q(uJu2ZkI(AwwuL(J3=hJhKgZ7{{3;ZpHWxcbS|?tlNb4w5z@>=KQvZm%2q>z1kn_rZ)=R)j^9C9N3K z^-LChutc|M?D6eWU z-3b3u($Z8if0MVU9WZ*zMHwlT30)XVARoQI8mWwprF&!CPF1pezn~d#U_@%pT-oBQ z7qm?NAXoRlAG9Df+*0t+j!)wcTtTe^Yt+w<5`_YF0oKFLT9z?C%=PPf8~-gV&IvR3i5gEaNUm4+6_rQfYOkoO~b z3y#t=-9hwNhDa_r{2AK@`lalEepaYRVhEoa(R)&BdIVPle`n3OPI+Yk5_n_L!Eb>lUSSOP>v~-&^P#T#Vx{xg!tFbH z0aDopPz12kiMT$=(n!p*dQQ9t_uhF{IuO$+|9%{OEaUjQ)sm1xLszV-(rG*DS8IZr zAi<)tvFZ5Gkg%0g2&At7YpQArh0EQ2Ykq%gP3bU?APin2B)pHpo6Sl8Mn1-jF_SnJ zrI1+OsE^?}vN@3HACh0o>{@rtknP0d-Av2u&IizuN-cgfAXaG86@6hJXK3hdJEMZF~wLOT3R{@}$(=4+!0A%RIn`(C>o4J=l0t_%c9sO5!M?sy{2>+ZHW974zKOa`_$pOtbM&7^e~Os z>?G9u(jz!fWnj1OYEtzw)t(AjM@RL`qF_cQsC9LJKag=XF*&Pm94sOr_Ww5G^n6=2 z&(U?2pQGi&1A0P)EmhQ=$c%eOiBuxP6LN#JZxc9WygBrN8rcalA+~0-kHzQ&+ztmz zOI)SP(1yNCf|r!*91*tIU9vYFsoD3CYh~iRd)oA?axvVJccOR08wr)SHW$3?$|R6# z3%4C{q{rvR^8a);|M7`!4mbWfBoGi^l>fsg{=en_e+WR$3UIeKaWJ;Fb7gX~`rlJV zCo>B>UsEpv<4y-tDmn+;jg~9+7JCj4+zpRnN&WiRVFlc51YCBHnL|I{n?@k#VmyAb zx)~D5VUnMzv>_Coj1CQo^hkJ2_(b@hFeoV=3|v%l1w&CFNMmqVacVXP3}2m8s`mKs z_S8Tapgq3*cS>|%U~+6zR2q72X=-TTFX$ZIig3H4b09?f1y{G>7ZW5B{8!UYFd6~y z5%dlw(ssjMzlQ5JziT^q%Aula-|lrc3gnELQ>CwA@uIlo&Q+IB^3=ZXlC2dze`kY@ zU+RAuq|SA{5z4JfO40T2L1I>1P7m79Ks8qA=i3ebW*50XHn-X5Y0&4bJtS zGlFs7SVr!SmT(sK6so##Y+M!`o~o_S_S#TrbZ{07c&@|`_?P(PldPDW8p{skc9;C* zlO~)FHRG6!`wEED3UQcm4&;43-#^h#0N*U+Zy|3JOwR^S7iCvYmPVtry4yOIMx|6t zv5%cKzKIaorG&1IP$Pj-Jl2d_!Ep@_64bNrmYJl>UliFns4~Gp423a*l}VWwyhHDN zD;zs~=4c%!QT}vF(&amzgNA+=J$_Y1B>P5(m*l$!suSHGXKOGz=-?k=Me@N^fHL+0 zEz*V%hx$1#@uwJUwTFwELxrBM{$oQlaS#<*sW{KA*JjGFk%@3XLyR7rfs63V#2>(LEJ@8L6VJ%xidS&`z0OJcJBRsThy z2IJdSR=s4HlF(>c@<*|KPBnK1B=nbnDC0v}ek|c?-7ck<1@yW+tqxeKPEI zmbhz2b#wlH=%S9fg2IL42dp}H`CI2R?YO(1erCAHV)Jr}T7u_TnTSsUeiE_)a1$*D zP$sY;T87NDy)NpHc?G0?w~5S8ClDOpd152Jng0DJbL5xh3fyMO3ExUcBNzwkZnlWM z(a$~yX=n_sT(|+uV+&T8P`~ZKqVSvP)Zjc9o(QCvqs~&ldGCDm5dSkI2-)ys3UaGV zD%`j|vX)SnnVgL{RX5H7>Z{9pMusCQ)O+_-o?N9eW8Ux(;OzPqwdyVG% zCZ?F-_^1k~Yx*-^p?K(sJ8RwjIxV^tu%=a&_J?Ag%-}XbL0v-t-@fdNj07T4m!N?d z-smsIOFzlSmxC-!(3OI73->L5D$;xe;BW-@0fI`2R^p)#^vC3U0G7+ZWq5|~gUgj1 zhE7r-Crkbv9{$7JMYEct$ZX@~<9Ym(j*h6|YE1^RilE|2%d=(o83Wl32hHi9P3b`L zaXUMFt=vcQ%gGI((a}o?vZyD>5c#z}zr&6vnZvW1a&H`SYQz>hMCN6eyoYNaKVZ57 zj#`4s$+Dr;xOXo7&pq_y?$pDN1{RzwPW~D3*f$A9Z)IP#n;Rj6Kb+HOgmq)QHI^O| zj7s!tVR6zJLc@U<@yC2F#@rUV*aSs+p&Yes_bt(6QRue7L~BAzAIL9NS3H4(x0kwl zTf9k3IZ~?n0$_(wYJK?aWnywzj&K3Sk3}E*ypm9GqYrJJ6%wB(0A%m^^bi`^Id&$; zWbJ;b82{k9Yiv5KR&fRB;r$EV`-$0k=8$V>;)+bP6Y@l(_G}kqn?3NKnWj=ghv9h4 zsvf)F*lZhMC2vn6P{cB^jdNI^blxE22{pBl>kNO*hc7di!fQ~|Icn9arm!Tgfs{*I zAA2c?0M7<%dT5M0Vknjblej!OzB8c(^t1rEX8L*#Tbc-0O?+qY?rI@~SI>B1k_A3) zZsdQoNnEHh5Qiyf>U=iH6Ro`;UhLtIkF>4_ypF)Z-Mt#h$O8A0i6=GcK0(z7e9l%l4jc46HXLoSG2&kP}KQJ+`#Sa&-Of`^r6Bf z)mlbw>Epv~ap*a_l~{gH4GT6~f!NHzUf)}EHtUh=UX`PbtU=Vnqy!=z{{)XwwYHbS z>=WPc4qiad`R7z*%uy*673@Am?x}5&D;hwUTQ*U{Z}bu=`Y@#sMn0~_LQm}W7S4kh zT?HLU2q%qYicxQ&$%7LIvnQWSXP#MMab;@mp$Zuh5*zY79;L&&=?x~-o-XJFf$PYc zqgJiO!3$GDw?Zw)5(fDz!1bwHxD2#FDWq#o)O1Vb#aHg))Q1~nfup^o&<2D}rO-&*H{z3KXk@*%+qWjl%M{b}1azxcqrH>&9JZv4 z^{p*;x{l<8xi_UEQZz3{@6p$!nMW@DX3+cl!*U(i=`5mNW`et#V?#8W+(5M{JmLe6 zVa-1aeaCQ~>6px`;7;VDxTPFXPktob{2TJ-qLgdy2EL0|`=bG9@MPOfxE1Zoji4*f z6!WmC{H4`Q%x+xSC?9^MgkP|`7y{t9hs5XWy123$5gho)e&LPt$0wq-z)wb^3Lj@ON18`a9Wsc& z{Q-Haek;Q84^A`EsVHk%TIx=~8ckgR<{F}RU>|MjNAx8@c70Lm3LudFkS&h#Xay1p z6+{}uv_U7Mig{GkX8lCC;b#;B-YPT}0M2lQ1S%HQ#ahSYL(eh$~*6RM&x{|(jQ0X)bYp6^0w)@vb!PvhpP0~ z6F;r{1^0czy7k>g1^_qa+|B7QH|?lJrpM}aBd>ueD(^`87u@`%Al3HM!@#-ja$3Fp z64U;frg#Dp1(KtGMY{14ZnbzheLwb~bBhF|T+U}>aj!EWC)s?9v%dce1qb~(2Z<9c zwGJm_`OA@rb=?h)Sv~6T1hFXevVk3cyvIG8k3X`8n$vF1131!dHXS7Xpe0_Zc$nBU zAe8-8=&2KnFnC2>IohL`5;W!)+b>IXtjdl2=I(LS#Q8_uxTy@v6RZFN8#yuRMl+H|SJu zgFjHH_u#7^bzbEn^xGoORA)y< zWUd}chU#W4zNWa_sbO~mBNIvqiO<(EbDzL~_F0UV3Xl`|Rq1sI0iyHVV^HBnpmvSC zYgks{9DcY${eVZoy>1i&y5>V7?uN6X%EkX|YATSeE8-GAG=jNuFo-~p>xy8EUjC7N$|=##c;Da3ZhH`U($}`0s96PvX7%vGaw$esU=F z#CpV9+*`<2Q`^tUxgZaTrehBhM~eU>|BzCf4}wHJ7ES)f+G1*%%Iow~4IzeWg}<~; zcc9E2s()2^Qw+gmJKyI87lt<>6ihY2oPlAb11Gqd2Exxp8D{?iHpwnC{43@qe!foq zLp5$K?W=zzM=()<-?8rpxpU1%CqQ&872=4U&@vGDhF(>VnF!b5KTr&wY3*uh_Dg5Q}VT`0xbOL<@*t1 z0LgK@JCQ`8pOFxdQw)wTOF`(*_olkyAfqEU@sEl?R{j{R_`$sOUa+z6>&XunkII9`?+yi6XQuem{X(mm&G)k)gL8Umr>pQuEU=J`P#g#1^& z)V(&RN389N>sDk}cw(JFXJnC7d7I7nTDkog_Du#ZyZ`W<3$!O9&sH7gx{B-;yl)KZ}(@y`d}u@x8LRMv~55UhE=9cH9lE z!*Spvnm`2CYG&x;1|+mcL{@p>SH?ZE6Y=c|XTR6#29joF_XeI$i>n9ksD0k<&3p_W zt{$UPQye)?Yr*WP;3TxazXD|c18WuiKBMq0AP65b=2E|dCjTV9MYjAxtTnzbg*K_g zr910?X9|j9pN{#LRW>wS$;K1~;!O-wGEqrMlI5dVRN=H#B69sc1X0g*)N70(q1t#xV}2trsm8Ck8k z(r@`);rnZ(`5r@Li_RF2VgQ#i9sZNF9w2hBbgfT;_(2+Kb}QT{)Es0YQcv}(bw5p$ zKCl0NrO+Nfv(D9Gj^V~`ojR=Fq($>>4c?)QVsqO~%|*f5G`HeIu!=$`MM;6N6-9<3 zoJ?{}teI*{{#S*iv*(5afFKrX^~e#!(4~VE-iNHDp74>N%7=x)Kqf8dn&57Q)bWY+ z(Y;8173aw;ik_djr}+uzU@m1eOwjjYhk z#w+)FkfbX2Z>pd5W_faba|Sd~P{HDo94>>_QGRSw8C)I!z4VBLNrsFKo9N}SMDsCGIZljHj z&~>84voe1}>gbiNvp2X$Fn^lPNPgX8hUGvke!S{?_m5M`yQD%NmQ!+m{4!1` zo5yQFfE(=P9oQpU0Rr8wAE?7{nMCU@R*MuzyVm~t&<7-zt_PuvyH7vI4VGqs#wg~LAVuV804YLT9ojo*vop_%j%%JtiAIONI_%d(8aP$ zfCQFpS{9f&?3FTsJ<{k_81J4VtxEWoSqi(1sN!9=0boO-fQ**B8H9{4o0%3{v@oc_ zv!TG;;j^r;D>|W{aq)9;i}gN)us{7@U|5O;ALXOd%Dyf|;;<>>FzQfIYtOOWOh)pg z`@Qf`9JO(SjI(|hO&#<7+PP} zB=hH!`cyvL$NP##d6#3b?Bs@*Ig%cb_|d75m;>TCo~4KR*I*%CER(L=XP1cO+{Ah; z`2@}NgmCk>u*IHLl+5dF>5_l@a9#9F%IbH?I{#b)V1Ja1!u$5ws-iYLvZ$1uy+fh? z*wm09G(4v673l$h}SE2 zeWFPN9f{nVyOcNaOW$8`xbH!Qu5HpIGCAh}yN_TC%mz>U1tc(b^jr%U<-|B1JQQmX z_8GZY5ADNu`PBh-Q;^9mwPd2`$BFuoAWS$5puz5C7rNu{>B1#^WJJIEPEL6pFDSSp zBFi6{67|>zBkI}F4nID7Hxb#PT_+%lxgyMzOCtAduQG6@Af+iK5%7n3z*do(UFFlB z^0xkWwB=urBo4mUMw;HAS@ieQ$S%9-Hzl7!z00S=%5KLU%+qBz_!&k9QAuvwT`lX- zK=G`i=aCL&9-)onMEVK-XB0Xr!@4y$d?Nbvyx!8a>#?j(QA)uD$Ao~5v}4Qr%17nS zw%hEQ0;a*_pd>Ova8w{WtYW_)7lU)*hw+aC)bFb*ejp-q|587L+HM2=kyl7fk#oXT zlRN*oC2d_2?fL>7iwSO!qUtL6K9CU{=-dKX-_+%AH+rkrTS)%HSL{WX3yP%%Y-AT9 zY7`S@N{nfqbPEg}2!Osuble|0r3Yvdm=Hp!kl_l*#n(=KoV(g?t8I&vXx6Ca>*YNI z##QSvbuJ1H&B8&HM|U9Yc-JMpjHMR3j(@;c%&HQ_6YR^vso@0+iM+;teBg~GAxUSyg(y?dm^HR4>TMszaXdhI zpD1D<#bWtix^4#4FWfmaPj(XE^RsYJ%kXNELnFH5?@e=D{5gXKndB=kvQG}!AOU*4 z3vLRkF_bgz$57D7pBmYCLRwi#8^^Ivn0#AG*{%AffoW$1r7pJC&H=iK-;HxlI+Z+- z&{a8;V0G%mUfQ5#lTqetl*`1+BMg|x27RUEFw*??(ITiDd~a=zE#9U;1*a&XbU3y3 z)Kjq(y2PI__|g0zh^4PFceg_)-rC9?@E{8QlwwPXc}5x=WT<2 zX1w7@_RIQE)m}n9#2{JCU72C5nrzw3s5LYJ(bXETAcno;{wMrDZ22}~^8z5m71oNU zVhHr}?3yoOe%+A<6`!*=rW$n*!cj-jt75e8)$O!X+v0Wg`*e2g08ZrJ87MtUTW8x1Yu1!ZOi~ z3I{L4-mZ)jS3W?2ck9T;*mlKw=ocnUt z1$KDCr^f!>#2KUphR-qqJ(!f4DDqUTh*Q5K(eb5g#Pjq&gbc5t$uQ2g%lg-cFMqnP zc@~DPBG5*L$7%oF{LwZ={wHh3US?S$5inA^SdMv}6}AvhG%|Jz1a&pwgkgUSUmn|# zi#o<8;$@cZ#`JNUjFYL^+^jTa=u>+AU0j82H1RI*J6wnaXc{VcV;v`_r7&79pB}II>49%sspV(Hw z<`|ck8A`S%nAmh2HA^QuDe7KQ9gL3%%zFC3?78qmsqeJK;{&~8GmaN~S<)Tz>2PtL zUTXsmbnj+>BHFY+650fEip;w|vJAH7$&GZKlNlkke;l;gfng@5tNp3$ShX}#@>C1jdWBd>$JWNO-1GnaM^z+vIPEp+? zbZYD9M})7q&DQ5n4vwLp@r4GT%3BpXjWrS75-PgV7&NDu z!D?|Us^W5tj@q9$hEMa_g&c@2{UqUw_$^tYLFK)pd%fn2DPRFBzvY7nNm_ftv-x(c+Cr&6b+ zV(SMr+e2R2-ptIG6uo@y)=F4mjj-i~;-ZH|F3&$ieo(>v1|nhwXj0ie=k>BoWK}(f zpVlhkuB_q=yCj37+C(6KkuI>sSeGaLw2gJ67;p5`z3(U6QwxXjF6_uDL(PeRFf{`j zJNZU^2+MB-W0V$CS}}M=R_5z4*=5jRQUs^A=9q}(ZlkPGonWo3_I?e9W7e*P0Cs-5 z03F!8-D>R5zDXg2vWF6ues;|$4|XdGg1gLcabxr_|-!)+m`$tRf`Sl-r85J;x*>HM{<1V#2 zl%mce0tbBA5QGY-ov1R%(=%>fzeKHdFh8xU@##=Y3=05`Nz*;44ek$fVf}vR8@qN5;pgget?2g=kArNOlWpn<^*9w~1o8N=Lgiv9Rv1^e zvy-Ty{Jsl84 zrg8KBmIu`7B%qD{O$s4^>Torzyvc&qc4YQTM(#n`W=hTr!qcqu*C&S0zOIfK((QPq zwGUQ|*W$)sb2;s@NRoNXsdA3kSnUe#IhBQ%BK$iLw3qj~HRFc7-C~Tp&Nsk)!r;!V zy)_l+vw**5G9ki)`3#|RTMU#7N zC@krA`n`&uD9hW0QJ| zph`pL*W~gPJUIRC9+(VOU5sLERci*?W}pqZis^R$VMN~k-014Z&8R%b_%^0g38`h0 zhL~KuJ;r2b6s9yesSE-whC)>goa7Y4Wj_X@2fu9Fl41~n#Lu}tq!`y3a&Aq~+|>$_ zW<~X%=1`HIHMDv8h$2xtt`9D>O2GS`p{BK`wMlHWdoo%?%PL$pkEDi8T;Gmr60lWq zOIxNaB+eg<7&#&#D+s=cCAC+hXHM!ys%yt39T)*cD;#k{a&Hp>Xb#;?q zh^`anTs-<(v;e95TP!ztxmJJh(jV9LHQ9l;gjukqRlxZV_ipE(eIcx<%qhqO*%jyo z4F!q}LEFSj1%kb@H_xNC?H(x2T_D(7Z*3(Q^9&isOyMCu1rvJtx-tn)lWcER-Cq}^ zYa$@hfA5!$Msf8~&w*B5xNPcMRa7e*f>Wi>l;x&?7>h(Jg@Xg=$WrJuCq|L;n2->2 zS4;3{k3jm?Jh=S+tC}iz?vIqq5Hggu8MKwx$!fHlBX>c$x3dsS=5!eqXMiC;tD}kG z`%dMH>x_vWS6656Bx9m;vRD?Q1MJL!x8l_ed7-ml+`;1Sl8gWx%(@WF$9}73H;NiX zSE?o<`3sj6mG0;_r9Qd@SSvb?`Mjtid|t61F7gZ3^%bpUHr0)1znz5E@Cr;xEBHR!hl7SVOSw0K9L;U)qOQ~NlUeDP(VNi5tAQq#)Ak|d3DkcS zv*(3|MKG~3h#1uund17#I`uyO9r*u!6Ph-GbeI;9?B$D=SWs!NYiD3rZ=4JdI-0Mh zFqW;pnyEvEJe<%aK#8c|A^L1MMJGW>`&bv>dpV#1sWsX^w}-q*Uh>;MG$WurQ@m>` zTo$CWy+cIL+5$OGkqB7cr*MjC+kMBkL2Ii=@s)~Jg1jdF;~-OuP1iFOLaFmcaF(a| zr_jxozqG$t^(-P-Q)BivaT<1DZbq4|z|&>+TECI1u;WU(&VEj24ViY4og|RYYM`>!d6F)u;v2hD zFLdd(_Ufb=wN>^YJszL58+|m@Qim-o+AWXr(V0$rd+b{IPwPhx_xjYdDft`ns z-Mzjj#eu-`L;x@;#}n&_lnarR&%P~|Fxb%Tv%clLn6SVQCGIK-!p6TA$g^zw)T+B1nik!dQQeZ_>M`YZ>XZeV!zA4SUG{yG z8?cxp%?CLDJiZqu6|+i8q(HD6f4_f$9E#%DHNai_qIZ6F<@Ww6V5 zL|uknX0!j6)EkW&x9*Oouh(OG_=*{&0NKUz@1ZVwQXm?eEbAXuSc?*x95d45c|(rZbt>klA6E_R1o^L_WT zN30)5F{eq}>>OE_A^3J+#tID~lDFZ6w1z>bT zgZnexO-p{J!E)Dq4He2uXRJ0Nrag(nl_dpkRmi=y2ej*Ur*{d(o2Rx1@_rU`2YB{X&5IV34NAC8C zmI=sBgNL=72%(uI<55AjpylCLPuu7>Emxs{{)GcKlZ=jIJ`B{`VbL;9%MgQ;Z?&cuT+2qI82ZV*6)HjMWu7< zVD<#vG!fzR)jYO=GF9l8PR4u6yM7;u`pr+9M| zM>+Sm8IDoknHFSQnrD2+AFS+#d$V04==mJUbx2(VZDn3ay-)Zl|7e_rQ-p12G>Y-( z!}TWaiy%qYn}ccdWw)M)5A_~-O_KhnJ+4@THw-Ub14ZAcP`zq%o<<<{1{%4Rt-+Uw z70uc(Vc#*9Pss~p=PfZ!N@aFzXS5SAw+}@$ZuBWU7&t!K$D1CfcNZ50?5ad|vBv7t ztdU;}U~7h-457|?#6*6D6~NCHp{45v*u`H3aZ*Hl4hdUm#Xy32hviN*seY{@%UE3H z1UMzVd)G&MGQh6F7K|G-1M@?Fx?LH<_-s1?ccqUzTfmNS2hDIK^Hs2OwBWc^T*!1G z&5lhQPWkr&9VYO8xPLoqnW9Iw-B$Goqff`6%SBOZBG=;rs{_|$jZwT)BssA~|4CbC zvV<|cO9g39qn>4Xk{>0EWy%x$BwwsaX_P-g@^5YN!bn$ef4=w$SY%3aENzc))teB1 zxli6bf=|_ypJ(huVEj;h*V!D(1Udc-VdPi%fb_#-sxYczS<-wcSZmQ?xmeCKrFBFg zg{!_$@KL>8O+v6~5ID+x!Y8oq$H>rbOvK6mKVW<$0)2hvIb?|3gQ=n4EH|LFi9w0<9_4F7pe zKONkGrIMOGv#_QEv6nm)$j2B2<1O7wcCp{Wp*RgXPj$@n0}~ciX$pB@O|=H;Z;TW? z3SegH(u=zR6WGP;1N)^W>12aOK!AM{|1@pPl-ZRI=HV$?OQB598)2O6vX10WnwZ7a z8FC5%fDukOOvL}VMJtC-wBA>1?Y@hj_(RwJduvb*db+dO{QiW$OH<((h4adXYop#c z?)!LJ#P0!)3>wiu1O*o1^?jqwS22MxX>xszq(?H&e>?;U{nXf*+)d_glhgTn^b?ZJ z!9^RF^>xGp@%n18*LPY~LnOE%l+Rzo;pF52Kw+!m37fWZE>ZQq@kMzU{!JM@PDi}? ztMr2C#rrk(&fD+P^-l+WTU5BxLp;8-k!{n#2V}VL?{tx+mEra_CoD(32w4QqH2QkM z>F&L=)smk0j?ciYS$MvivDU~)QgD$Q>hp}$^^t6ytD{Eb9iKz80!6UgFJA{%vrY5~ zz#LQ-T`kFyGCSzmatcGrk0z(h`N5#jreUBbY3xjjIa-*F;D{@(-X!m+1;<3_8CtqH z<_js1)dJMb0Mp8^a~4sD9YcQ81%I?h>6C`muMXsX1yJb$6wTg@Io-$hLd*y3_7msL z9-V8TbLVFZC1@r=kDX<-^De(BA-4SiBG4Fk^|l3Nm%mT=(_0X1KQ>}Pq-l9gkYcVt zw}Zj+Vw`(ZQZhd2CGWX-AF6M%qm)kJ^;@IXBJ&WNsI5{`cy=oS3ai=VQNeS?osN=W z-L^%KDpr7iHyfu6uQ_In%w<%H0hqhvH|S@!>8mYr|AVnmFDR`FyIorz9>_Q@X} z%gOsZ3(!94bY92j%Pt8tl>|oi{5HoVmPjg394g}Mcp{J}*K+f9uM|@x0{#a8JwU?0 zpHcvdBjEEReJw+KNnz*SS5G@VyD#E8ZWi@wgFd^QUiV!cx%(NTNlyY7%H6GS3{UqF866T|JB`-}fmzSwIuN*$75=5T=L$ zaqT0-gBC59shs+ym9oqu1HlK=gx2&27&lP-M~nq*S${pHN!drg z{Pm9*ov^IDK9lST%tV8bz5)2txT%CI7SN#-OXg$zckkn=M`Qca3O?-1iQM+ckN3@}Wy$vX6(S1wBUJp9)*_GC^sXT+x@<|KV zPaQfR)vN5hs}e{e{jfMw-8qlNEocCtFrjCMbCQE^31e@;5-a@k->9A^aDYAaF%&w? zzxl8GK+8FS@q(;@hJRp!^{mr07=HhPd9X*pAk$V(%UH0rgI(THL;50%p-js*m?xOT zMR`{Jv%8CL=rhJ9U5to^8j4q^y5^ViHL-UXB7^(R%cMTk$2XnQGPVoS#`&BBO5}#1f7;kaERdRSayW186CpJpdq7e*d&d2b_}>(0ndAmyIhV{)h!@ zQB`uKh(+%H{|H4vlU^C2N%+wI8=+?xY!QASKqK$GLm!3<`FQ?1$qy9a5j`W>Wn9l} zKhXDQhyDM2#((z6*Cxu7>>Sk6o&0_aLhu*MpSS<>8Os|%o2ZvE1f)S(U1`+Irw6m| z{uiH-<4GbnYxxhc+B6y`Tz`XW)cyWgO9-J#{?n^Q5(T}6RGv3{?xuF~FEy>7_PP23 zPhGAYLJ}GOK2N{Dxb2fp2z(TLk{shH`_aiC9l*lkD1Y2haNk8mi`OYV_F8cO6*1f} zq|xRR89W)b)%?T=IEaXNVGZ*c|B>gvLARoIs<`}=8=$lI^GM$y++d?aL-ddB0SAge zRRe;Ht$rG9I9S+uD+!XIv;9TqVs{xS>*UXP66!kxAMAFSef!ZR#F>5V{l-PoGVrJA z$sz;T2Y)mAKWAgtrnPkMs;#Jh&QE<-!R%ZMChw^m>a6raC(Tm-w-U>Df#DBlfsmsJWbmOL3eE5yH>$s^KBckd~ z<&9eBA*}PymV*S|h51DDmR^&*0(lRgE4;n?4D#+>4_6v8qihc7*}c~`-K=Rx?3MQB zucAXR55F`9(~QST6HVfKiH=AZ8q5M2wE_QB->S*c%ke&)3O4BGUZ6sf0owGV5c!Ds zAb%jGXLKb&fMj}aTlca7!2eewdUO!Tw@>JO0nR{KR(&bk0D&C-rS|m2bfXRWHz1{F zCbfP@Rb~Tx3DnB^p9KB^V{FmQM!YJ_Ec18@{ck9_YX=fnoSW_B@cj^xVI6C6R_w9H z4jvK(%Jv*6`78^B>HG&M_ya@fRGWe#0DqhSE-EieLAv8**dtf68vjD^C6J@3yl>uj z(T~No49LdS`_dJG_qm;wuZ=N5Yh>?8^!m`z*7OJzT*LhulhK32;RYJCC=b+>hH%CT zBntWaK%y2Kxb5dJN|Xa(N<*J{%OAZ=o#wn^OK4RQJDu8620n{~X5``jdNJN+AT8L45$ zQJDsMw@j?(!Za|V_7y#4lZ?)f<8M)<55SIaJU9H9D9Hh*jwgNfR8LRZ_$izNW~&G~JLHG02}b4|eqAAwMl z@rItq*bhSt>k0mb$B|}s0180ZCHKzgS@vJ^E5VzpzOZtG2y*qjRwqz&SU`YChjrZ) zV_&!`^kyl5i-{^9qlolwTcgJ_cii?Mob&`hdSZV88?Tjd*RiQ2Wok(9et$Tx@5vuN zI1x(m7ohmW9J^^W0jFY{b1~@q^_{)-V<7*T@yB-%VyZ~_Fv!Wm0T0?LW|zu0ZfuaG=JWj!#{bIX|n|gc5-?Q?*tq`&mb8)Yli;O*iO1Q_t?81 z%4aHP-Vqc7#A9rE_9>HvcHFh$YdM1ZtjL#xg2iG$&EC_;Z3|KW!t0;7q}uI*LJrV} zK=4SdG6jA)?A(6|3{4x}I|Rh!81xS{eT|bWj+D|qUmyNya~c7#Xn!yH`!uCy?;Q&fx^@+ITDs5K6px;lZIdOq9kd|7;wXc+e%GJnq%#j)o($~PAF3;(U> z%`StolUy~8`(H+7iVIy`Zhz}NX2ft=l;@Y*ovB7L9*91mTTVC`@JyUCn*_KFU6n4H zlgF^xMPt$@Vo%sy{RNZ-is({*SVQaVFd-}Hb$;Lh$H{;jOw zs^arCNZ(0(OmX@_(9XXm`v5L;z9uL-`lcC5wAKY)DEGrY>I!D zer>pghpD->f0|KGq_pYMkhyB~OSrnHEl~7d`kQ z5r?f6hwbU7x@q$Q)YRhC{fikg5W&!vG5bo~qmjQAcg*l;pjgYq`QKXxoY(y?M$`Pe z<$ums^hZf{!ia+PPw3VrrHdU-H&>t^>5qinjujctbs0SBPPgu8#>`#a*caa#@mI}l zs%~h6ZSLHKBUU(!T1xCgQQLm&8zsmSV8_ziu=}HSIEzN)^4EP~ypo*>Z;hrcda@oYz#ZU%M?E z^Mg(^%fjGGq-FbWDD>WLyU$i|Kkt=a9PiC`Pw8LGTZU=6*IjG8{07a6dK@CWTF(ss z>exTI<*ff%8bI^^0mXkCwKi?)A+sI~wHm1;&b}zSaA|XYlN#yic>&6BAD>K@6MuaE z36pFAH`u_4&XWx1&zSt%>F-B9jKTPJ=(;jWBmIpmx+y1oP??FI@W#=s@E%5iP7;Yw zx9L_iCVl2)UI1jiS6zce$%7%1&2cQwMqd6@w&M3vR}(8ODvp{qcQ5(t)k6dyxb zNF`>FM1!T25rTUWeu%(;`d@;k1wZ=0hvHG#Zr`X5)nQm1)aT1tP{;&f1c_m{N>|vx zda*1Rn|?#GA*PZ`X8_;j=Rz#ZgExt(S6?MqyJxFvadYB7kOraLrM@{-8@G}P2`)`0@rJ5i*r+@u-rMVk}{pWB_ zs+fD+17Q+~f8I)Drf+_~?xK2TQ(1UsP%YPuA2? zT=oE-9$Bb=yX_VKmL8qOdEz-sZl;-W#2ev$i$i$J7zHgEv&u$nk^TE{?o8P_?DiF( zYQXLnYJw{seSRH2`jT?n3iw9d>gA24@Jyod~kywsz?Z^(m3&VSdDk&GSNcwT62 zU6*3U)C>_J&KPr%SrozOcQ82LLfVayI)~EXHeo%tF+xS~Vk6*omM)Pi#6uVpp>4cy z2cVZ>eqX+^+fWeCJ%6;?W+_)Gh@8rW&`CrKQ--+Sajj4BW^rb_B#jsOs$#u^yxwvT zJp_AK?2f9SQ48H{vVR?b+Ih+4NQYvMvLb>y-*iK6iPw_AVI8WO z8PV({j$|lCAsi}yL+}zgO@sgwDak((x=@Smuo>gu4Pn%4B*Rxh$v)b}f#vy~ZdJJ{^$v(Y+>f~zWD=F6EyJ-Qo9?+$W0NUDg8 zZk3@L9imR4C@sm3CC8Md&ywUD+1ST(i6o$s9v$Cjcz;B@!h4J#B0HJ4hBFAikGWAB z8cb!~%hH*E`Voy{abFv#@^zPzDY(I9zRmN2;LY*v*KJuiUxXr>KjBvqt8F`hLfSsm zzeoOxKmF*YoZ(h`Fkah`&{vVyOt{J1K!5MY(|Zzrj|mT;Nsz$iM(B4|$r5If>a|AM z5A%A53V%o$QoxN=?He@yC2JF_-bJpk5!jS$4EC5yyMbuW=oZ^5*7~xD6`MZGIy(XX z{i}^J7i&l6^sNfipbgp=Rd6MvFOwV{zlZFWUt21W(ViBe~&cbq0j zM!zYge40~ikYTuX;z(MF5Hhip(3Xm}nVN~&$FMgWKQ=lp+sB$}$1j+HI>qMvsC3u2 zrX1I8H~-x$#zs`@VOhn}EF)v_N^@Fi$gKK{HXjs|H8t z`Z$L%MH||B{tbtxZ8ZH#R%#~bA~L3Fc=?BEBPHD&feG8E{sA%Z;M;Z*uoPGoQJ~Bi zPvC|kV`W_LhoN*#hWoN~f`@Ep7d8x77=N?T3rs`T(-pr&*JLNT;J_)U?RrSaDLB9> z*kX&(#Yuc+FuKUrvGA-|v2j8jw|83S7g*8Nchbd>agjX!L)@})WZ8bXU)S=4rpZS( zrfEX2yR*3EN9nILh0f^YCvqZqeGN&u70*goEw&Lc7B3M(Z|IxMLXe)Q?CAy})qg}u zy2U1)uT56VT)f3E)-M)dht2H2w-%*IT=rFZtRy4wBW80TlP3QR;LoZ{N{<-Pk%gxD244a zTS4f>)_hJ0YZCKLMNDr`<=)gyH;KMH4IUdQ`hghcL45I(imo|y#pYA=hh8-5;3#r_ zCv)f zAQR$f1Vc7H(|FZuRgaX)OT z79B}%dX1jNV$oo0X$!Hd%==6oAN3Azmx!Y7Id?Nnb%{}666w`_m&TH=fc|~W6eMfI zyBMGjhS@;-)#pVBzCbK)be-+bcpY*9N>A{WQlK+mUggyst9<+#)mD#MFD&0c^RnYw zpu%&8`e3P(-~7rB$$zWzii9M@@haH%oFlNE!NDw%4Wh-O+u<(X6*ob>Ar)-&yk&Fp zj8K_q&dKZ`;m((OVX4zYpvedSlQ?8*`%6%)uN_ff)0!d&R#7|=k!rkh_90%|Fyy23 z3C@EeLOxz0K9o48k}IhzUG<}rfNvMY-;7R7cJfKG8Lruu6@T3!`~xQxCmJ_2yOjF{L7}W&nh`a!y_OMop{Rps135Yora6 z6^o6P75#+5!UXBZ^B;scFz;n?gb=3fZ!ZV3Kh3|tk#R-V& z@dAu4U(MgC3`~7Ru}IYBMa$7Y&H1T{w-uH?t%~mGO@A*56Twov(bH5ZZ8GY10PFxKm4Mjr#S^j(_+(28CtuKn5ljoVkas0HT|j7&w}VjS z_)fmYpStM4zbEk`RlTY{n{SZpiyp`|GGwshv+?QP;pUh}E&ug50%fXHWloo4mfV>+ zu49{>(0@0pvc}^PbWJqnRW|G74VW)y9g>a0vE7NUTaK)P1QDF1SYjb92#U6NOx0Ae z0yXo|{!jh*YZ~fSW1&_hR@Q0BtQWGNU_x!Fel+3QWSgB8&!E!O(kUu$`F-M}#BS^{ z$_vUCo{o&MjM_rOs8I0|ack-jALH{0_d!>-)qk!1a_mnCYf|x@KzlV$WD=3Zt)20( zMn1B@;o<#kJ6iJ?rcujEC#DBVBve`mk^?Up$);X;@Y7XO%u2d3ZW=x64}j;omrDoV z7vqRQdoU`e|-FB+$&u~_;S zyniU!rj5-|mUs(ZqC8Cov`#<9F$>CW+(he|9&vi1C%H zmuXA2Cr_5sR7B&()ynu`b_2yjkas-`yDq$42Sm!VY{lPyxj!l?mvRhos<W8;(A75Ga0G#MR)j{>{2n$*#!fwd-YZ z@sf+69P@h=hC?v+YDH#9=ZmkrPqd0DAkG(T%Fdy0cFC0|3CdPf(#7$Z7)VOg=xs@T zemrd0xw;BBi2GQ~ORvHZN2fq=o@!zAJY+An@hL%_xvQ0{_-@n` z)%UcCXvm!Xoca6e;wnStgoLrh2~?ASnkTM?GZY;ZwpPnyMY|JDGY~lva`6{7!OeGa z#uVJl)z|ffh;nk|_)KdO+>YYUKHuk6lnhqzIetdD=O^+|k-I;Nt_w{(L4SBbW9ZGN zQeq-61F%oL8CwJIc`b5*q+`Qq!6h@PrSV?4ut2b|o*Ye2OHEX_B-@h~#?ozoGuWck zYz=6GZt{>mt6449l;?r^)C`RKv1s0dLs%4cxULG=Le`=$j)Oz1i-j>Pg6z_H67zNK zB)4?Ylg%;*%F-tpPnasVNq;b*-Xl~9acc%+WHvA^xbVQ6jdIL$)3wkm`x3aWz2JW; zgs1*wER>_&%7TSNRwfZKHK^CDs^cqoaRrA_4 z9pQ(_@&l#!ym(tuyV&=23X5WYp7Dpm=Z`CX2o^`#)z7OFrc7q@h_y`GhQ4PpD93EZ_(hc7WvL8GlMss;0+k>0DkEe?=7( z43)|mcY5ms&tFw=s(-1>Q7 zJFG-sj==F%mk2LMBhg0|&iRq1Z#I>;4k(m4fd>5_UVPMf?>>ew=J43PXSC=c(OY2Z1D#l&qRvSt_CWvRY zEQsPPlGKZr&R06V%soPW>rS1Jm3@t&4>F)o|8ZynpLSkai#4#q`KItl7ml0cHG$Iqz~##_tD%EW@I zOsklU%PY8+Cqw<_F;UBuLamL?E1(He_2m27p=n0-9J$YHRA=vviEWk7qqfZCPyhf5lKWd%K2M)Sg4S^sNlNY8Xu zTz3xj?A+D(fKd|3ppVhOF!(yG>w0v%4VKA7sriZh2oca#CZ|CEChj!cv((dO?ZM#V ztAFHuqukzSytx>&wbXU;9>r#DEDQIsesM&)Qt%YSkyIn6D!{K<#W`bI?@fQr5kVvPaO!K%*4O~ktU76)GDCs~ub~>zd3ab$bGdI3 zul(}k)yFGv^~ZKnvo_O|Z<$ThEq%0nEvxayG;Xj)^;4RBB?M=7PbHx18FcfLGLIxdN* z>C_?}MoB?dR}w3kUaVA*UY;|YmT4l&{K#H~wR|OO-luSXV-!(F=jP>{mk+H1k5Hbz zN-g@~+(_TQ>Dnk?Pj;3LEq_0qbbk;Xo>YR^1(Lf4^4$rF-GU;lV`>wgq(`p2 zE?^E&%8q$p3sjeb^eh)h@XZRw5gMf#fVj=Xs*$)JIE(Q@mK@|#83Ghj8Hh8Kr_4kj zM23(IQaz$Hs{%VPr5%R##`9HW+pk`$0qiT+(>6EYTY}qF9E8n60Lh-$t`>zZ%_kc=%*$05eggp#6y!Pw$e`j$qhW z{MbmOU5X1u+Y!@R-~uT?5v~3pZJEEZn!$MA%9|l@>8!$$G*W-4b1A8=MI8z!#{J`hty|ZEc5Z%{Vd1(d+!6fKD@KFVxPP^x-y+`!#Z?aKfG>|%Dd&LSpGMvfNt&UTIfc7H)9qo1$&19Je_ zg%S3@y$g`*mIAr0cB^9rb8-D7Ld={19N=FjgoNze0otsbP%Z!~CyWCC;sQbeAP^Ua z?k~L@!seziA;H@ZvjV~z;cQ`R$Esv!gRlj#OFAR0EsO+h&8$ss{9{*kHnCB=6=V_a zzg|mtW9P;ljo+N%4gv!MAe_*jG6x(2-~@95bbs#?*T0=N!0+#Hya63u zOnxbZ5Kbn)l>cG0|2E^WUu@UUfp!A?96Y64y35hYS=b!m_~?~Tej5E3@~2t&orHtJLBM~3oPdAQZIHjxZ6FRX7x;hX+rDaBSyPO=ymvD- zGjnxwbv3*B&J8WFxh3hmZ|CX=k$4$z95$MEtc)w2yWRavqt@hcSq5jVNe8+=T_`pk z&Y|TFDq}WGRDV{|ViRg^Q;m|!Uxqzu9+B%C31uDm81}3}lAWVV$3K<*n0N ze}4wg+VeG@wM?=sez!RgZJaoo{FCTRZm(bspUXP*9DUwr*Wa3&<@MX3K9~Jr%7a&p zu=i)};#9o0dzd6>8<$B5Mj?CEXFco{lp21ma36x&)qmdCN3iH02V4tl!{Tz(E>V~q z6MIix&i$Qy4!KW{&M5d?u(U5vbX(-Vr+hxktaFu|E1lToaoSCG;?r%t+VeV+xhCX! zzSp~_sV!7VKp&0&av43uXM0F~c;3g?Xq%cUAT<9&%Hb?Nxo4W%H?B!WAKo((YvK1F zHZ~t|@qc+QnO*uE=(mdU72bEnUijd=WJcF=ec4$!Ub}FfwoJ73;EeuxhD$$N(fDUgQ$=j~FZQVx?c4@}c z(R=K?*NxLPmBq6}m1w5Bk>CPq*@||T=?WKa?SEZA?kd__c15W!YU^C!(I+Q}#mbX`8umLJr~38`pv5m02#?r>W+E8n+y>zOFk_wDAG-fc?H8YriD ze-vIgFtzxxvae6~8?*7=h~(w2Hj_?@j$A2MG%I^_HZ|_n{iONhzP|MZw!-_?tg7Se z4u7%3m5+Ra*xA{3^coJkWj1@4`yJmXblWu_E-sEFkeDe2t(c^*=u$I^^=Hmfy$uC< zTEW;Ro3}-&*A2fNnvBt();lirMkKKpvMoun$iA+S3d{Q#SLJkGTUzYw=nzJk%0i?h zqsSDGLE3eQb#dylJ<(WA^oWtg?ZE}{Mt?qNeoNXIbC3S$GT;@#G}ZHP>&{BptIo(c z@>-O1^<2BsAMuy;l7{>dHsMrlz1q&Xsjw`&VAt$~05SnO2;zy(A;|H}K zhlNp{N_O*Ir#N>S^Ko%2Hf<)aRb}z-(*e5Vkx0pC1Ve>{&anxIJ|JsE-+8Hsw10K^ z;esQ*kTI4vV}L4e$YJaAri&(5#zVL__?hx?mLY$O zD#b>J^A)^*Fo0nZne7uw;Y*2_`qno_8AZzt&lmxxT12pgDPLvDHuq%xQ zzrGI_M*WwGHCgs^3s<2k8~XYo-+!9v#Cfyt`nWR%Qu1%_+|N4ixnoT1c*l`~b{6_L z=KHWaVe8l6Mr}8_DjxbU@cV5BnF8RXLYY6JUSEa?sDTRt5Oo8LaUAg+kq+-HJ9I0@ zn9;Bc==nEcc-%Y0q4Sy!`P4JXc<}Vm!q9>r>hKSiK%P3O*o9&NfLQ-J6n~k#eGopQ zDf9@(A_Pltl}0*-s2ipGarft#H9&Dp5>2__Y+w^+WiWdVen_=&FyJWWaW}>?((;34 zi*BbF)$YESae$rBY*66j{$tL?7*{l(UGmE|I!V=sov+jhwU`o_v8O&*q;G8vICjD) ztpy706`x`be4K}^*q(CAVSgP{f+Ll@hdP2z2PiFG;-d2Gt@E7Le9pVqcP4Ai6T95( z8ED;8LU%f7sN@xa6KJ%*eeTUQZ;iLfr2E{;mbH|U+?`-E=30to)*3Vfe zRBb3!{qmUXRf2+wE9{A2Z;-@QNyJs>i>CY^;RZw&qKMNJpn)iK?|+>Nw+E~>p^{Fr zqJk`q`T|FgYh?`j{(ItFS<@nCZ4KdZs4!XVk;T-eGALd!EWT@v=;~Cv$1(Ns1@uk? zs==o_EabkT_bSZq5MzJLy{p0b7qEU}%77kPo0_q|*5H}C9!92Vxe!8a3@B!3>aN8e z3?e^M?^q0LF8tu~oPSf_;`+R21Jk>SLJ66%gicsU0LQ(zamp-8mZZV%+w%L1#7x>c z8!b86uSf4XWX(1yy;D=uQ^`NU2IC%5?_w}IdThO{+(}aFY!gF*ZRvQXeIWVPWqat7 z1fQnJp&*GV zeDa=khbE1EQ;@;6h-*Bxp~l$vUne05GUjDr5`@!99;mRz9ZEOQS68P1MjtHij>8D^~OCn zcJE`6#F5^~2$EZoj8&k8DQgM43Jr(_Q2(?g?g7s&8 zI(8?p(%npnjbwgXCh(C*7Pb?mmAtV=0RA`b; zC9CF0@KIEwMO&#nmJ7UjxSWQ%qP!0=vLh zvE?A23HR>O(a>!Ao_9tiq%hNTYVh3ZXd}+euY66Y#qQN zEGHzQBW-W97*f_TO@=eA?YogpNv!{PXP(IK03-S{iqO!a9?5Whd$qM0X{3#Hh-hQs zC-*_V*4ETJoA|>uH;KSgq$2S>5G4CV$;lF~WL+0%?J25ofyvFEN zNccl?-)7wsx>i$HRe5Rc#=@KCj|j7gkwQW~F3{M!qft=(dy!T!?YXd;bCJN^3lmLo zWl-oT#WG+SdHHVlQcNLWNJ!7O3E6|_5OtXnEi?Kt)_|P5>CjyUQyK~e@M7RpQJMV< zTz_V?YO%zS9j|X-}JL`ozXl`9xgz8bj`Uw@3lb@;z=YZIp$k2oR*EOb%SK2f*XBazD8 znI#S;Fn{8^fDBB$)A``zPpoacf}!TSgCg&M0i; zEQw{x&cU0-Il(a15G+zBRWuSJk}2{>R|V!^JW**0WJ*>*A$Vi(FEIS!Cf7t*WPgn* zy`8S|s zc2w%{mLtRcCQ@GZRn#BYu7*5@ZwV3=Twz8Z#4g6Ngzkb-eM|hxb~6P5R33DPcbHKa z#M|FHETdKy?FI>{xO0tHbD;7po`2YpCuc87$n@psp4m6dW&ydeJ}g3NM;&!FMdc#L zEFbw5jSNTbylt*j5-%|`OJrWoEnq?u%%VDwBAcx<%5_>Ovu4eEh9b#;ko;OSY;-TB z_L*6A+ZxeRe=YJYIW=X+r&-M1ensLE7CBm1h82&dI5PdW0GVILW(%${=6@{A;Kf+s zOj___>$MWF4D%zigoR~rfih}ipMl$?i5uBATitRAS@47mW&yK|VkJ#~&da-j<^ICy zsxfHi;R+GHWs<$5*rq3^82^2S^yulbY>>5;2^;JVL{~r?< z!N!~W#4wZxksZmM*vVv$*MDQd!4XMQK0o&sEq4gODw~qgvu+?y!&6^e%=_@*&>w)& z8RZwmaTGMN`ZY4hJo1PkN1(#SH2ZtvyC@~eF`)%tcJ7Kj4fX3XKDC$gzWG`9bxzwG zo$DWTL!^9%+&8nu)UFNIE>S&@SXA$LBmr#jtVF*W04%GsEkhZDt$z!w4O~myuQR)^ za*&U3a|k?LXCF?701d5Ff8>ZP-vHD1v|1Z<@7uR=Kia2Jst__jE{*x}hMPMLY4TzU z=VIkVCkqG3O07Y@L+KuaGs*1IOox3})Jsb@rBUuW+-R9$4H=~XLD6_l#&nrgqa1fy zLKZ73LFSV>J2*HY+J9xxIaRpkvW}yUf?~*pQz%H7OMX`cM`6mT#Ae}TNT$ZA`>EGn zj81=tSfaeEs_A{Og^INw;PyVW3 z%dDT`Ae-VlkE%GX;at5zQQmaE`0lmZHKZNgr?@B{`hRaqnF)4^%{=6`qSk63n&yzM zd*;3Qlep0J(^5{O~@yP&KO0y7yd`<9{(GRmZ3Yjj8KnrD;@+6_1@luIFNQ zfDprtt-MRz2?EbF+|y=uVC*8}Jh%<;A|KP<9JpWugWY-e{9rZf;Bi^8<3E z0n(%gxs9Z{fsrJLCD93Ye5l@k7eCb;+yuDI%yxU_0j+hD`Q$kiuw?3ceDk%fR(~JX z6a3CHb(ZJNUq4kr;xh26pk*=vn`LXeHJG$U-8HzTJ5TW|8~U^fjtcZ^yyvjqY2=Z{ zmTJ}Lgi7aBIdw|R56jkpum)a78ELuAXKoOpt@Pa&Zt=%F@vQ}pr8&#r`|bJiG5oBh zFfCJ)q!=N}oX72nBbT2l3HQ{A9)D|7miF`{FXA#~3aCZSsYoRs__A53#w}g;IFFD- zF;&VK8k{L;MRZZ0=2wwv9@$IrrIBy?Ovz8s~+yA_Aea5^N{gj9^H3_DIVb6EKGMynH;mEr0%5)2z_7 z4C8nvTI?*9F>_B1|i}HlDQhA4#&6c$xuneeG-|9g&Uh*2otin)6lYJ1_)$EN>DLW=*x;PD=v9}zx z9k@uTE-OsI3MK$$TnIm7iGLC*p$NTyu0Thw`tIoT;P{9t+Rk|BC6AqGGo)tkwC#RD zi-czTXMICmX95q>*_3-@Gel8DQd`#jCy5}QzKqr63?*;n${^jU{FT^JnaUbb&=BE~ zObdpFOKd<+Ou+G5!zNwT0vgMjC-tU@vo9(yktqd;9*MtgLZs#Rv405du2XNaJ@XR# zSRVF0+DuhmU|*RD;&nGmAA>%Zo8H|Y{?=6DlK{|vf~l`51ozxo^5j*Y%Ya?Cl-8gf znRQ4O#LsA&fvlaqhHy58&4FP13L;>?>z`qyoHRIf()8%$V8zkCsx(SDdI zr8wo1L*h4?yy z!hBS$7TtJhASu$Cpd0FUo3tD~F?@q=oTesY(o%e1Wi&vXOn=nVmU1pWGPzbnnqApl zn=noWG?|MA7Og-bM--sdG0@83TPS(~MdWCamuFHlGXSu@D2jq7A=wGS!@YMS;mD;F z{%Saa%)bB{^Oa<6fcXkuwIiC=jV}FRHFP43vijy8MdE?KR;ue%RjK6CJ-dYD8!|Z1 z(eWiz{!CQZOMf9^6CZyb$NWJ8l9a>&D$|K8TuG{!PgIpCnw?6ZO43C102uy4{h9KH zY>j^w-#f~pPjz3tj>j^%^Jk+5-hOVg#Ls*XN`&QNymi{67dA5AJ`=BIEg$@2a?qL~ z(2*+}XSTn*d7!5oq&m`xqAp3+T_n&e5Q6&3TrF~1(|_u!Q!~F=KvH|p*na2!Gx|2( zC~q@GgL%g4`O*Y`OyADy(y14I_#rdtm74fufsX&_{~zsI&SH?pGCJb{diaVNILC|qJJnd_38IrDwZJ}!i&?g zlB4arqw?GqX*^qlb?5_bB!h?LuZPLlj)`?%CDVRs1(&k#Xyq7pu<*;7%yCr&(MCiK zG6!(iSM9F0y9`TH9xL5%9u;K&huBrLm7T=Bo_~+?>~(Np2jIql@mSQpMs5DcR1xdY)2!5ChO)wN!DwT-M<%VqV$044Dt7hZz19r;W zG=Ezju!uzYf{d$83PLPg>W~T^@om_8jo@cFx6@M|NQMl!{LJeX<6dk%n{>Gwn5kF7 z;aNGj-NF5qMAMZWf5J`i{xA$j@S_p66c+xtWpX2BY0q+jZDFC_rBCezkmNAmXX+25O}J7+HOB+Mb0EyGM)>bFO`?p zrJM_aeHoTQ|AJPFrlC(hF&EmtULSoFw7BzncCvv=j<|Jar^OheOo|0K!J+%^NXdhG zv|!9vvbrb*R17!a-Y~jy2F>@m;67Hik(3=h{ARDMHe`CwMD}IeSAu+ZP+7R4hJU<; zB`AMYV>{cJaL@gszWKa%>AQ8B14~O6 zUZgq&>$1HqH?Bb*6K1b%)<_f;Dt~bdCb4pbOZY{W?$tjjSsu8$F!j#`SNE`C|5(o^ zW(o4pV`Yrx&qhYpr_&Cj3wB{sQMnh!Q1vvdoU~2S&T%+KXlC|Omlrz-Ke*4^JI*@{ z=PN@8k|S&bQ^Ha!NqR-<+>`f9UOao{Pyk|@#_Ncv^X#M1apo3U0FuC9W`Co>bnTsK zVuNWUYwbH~81@lJ))A@AJH#jxH*iDK8z3_iYsm(km8_nN<5)p%KU)iP!^yL-BNq{6 zMI*COtwDRfZNH^TyTEj=9?g19V%x-^G?N9>|3TE{nl_-XO@r__%&=g7zR`>u>hGi$Fz@tF$@T_VRT$A1nZy<<(5?vX!}i#zt!KbhQu(4-H$FroT~FDAsU?8@ZH zM;2aMf+<(;`P~VHeVR?{KKp`kxJ;P8(d$gNqnfsM|BZD+w;pd~40^4#V{H{~;)w948v@`%wp zjA)u!AE@#Avq)B{zxmSP{Q7JEw`C2H(~#Vb>cr4aTe$O1Mc3Q?grF2n5yq8yuL=+^ zXoT|Eopy55-6yB5eSexP^Ghl`(x_&Y%#nFOSA0QVq#wb@i6~DC#!m{?Bt__>SMD+0 z%B4Qj`;Ay|bOe!K>4codrStcT@QnbKGRg>6a0F|uhBdqLwv8f%LHIrBq<4LXtyrIX z5OS+g`Rh)N`OYhf(>2n&SJ0sS+UxwP18tHX+#e0G-S?UE_U8vo>VK^*^NUreLCy|aZ4g7p`j`&U|*6$JjB*yXyhEa+=FTLGWLvNB}sXe`0@Oz(2FUKPkn((7(_>=wB|_{|coGg>wB) z?*7Fh3Q zUB$%R`G41rjl#b&$zPd}?q8Y!{B_Gmh1(q-6%dZMi~MJ&*_BM3>|7j;Om0Tu=K}!j zvL?nBh?}*peLEr08?U+GU|n``M>`k$8!O5;gO0FuvcEN9Z%uNeU0Pt_F|7~3fI8@ymzq4SfA$!9lBYO#vz3(%mLdr5_3BzEJjJ@neLiYNa zCO-2YNfB96vPEdJMfNYt5QZe#Wh-O)kCy+Z|I@wCz4yHLd4K0U?|aTY=REhh_x$E~ zmPabaqZfCJE3BhzIGEI1n~J z9^tI2ejZ<#`BzB{wQ$wDL(ARW1LSF6P)L-nLk_CIY*jf0Y%Otmjk>$#5$h)*G>z0@ zO3;{)fRF$LEMbR6?LokzY2JSAl)ZkoEH&Ro#S=2MedB_g#O$lXEgHIV%jF|&!DcBA z&ycF<6r@NPCKbZWf4zg%_P&tNnf&%n+sLvWl;KH3u@^~-szbwIJIA0`G)D{2XF^an zG8RpXs&vxRoQCXd(1IA8{ghJckhn6x?{*ks$-dfsCWX8!POE{l6SGV*J@@1_{U z*Uztx6-#_;SL@hW>x|+-O^zH!!M_B~H12~ho5FW8ul<2y&eudTMv2Q1_*G_!Juh^9 z?J#gv6Zf^4YkcfWm6D?-7xT{M=I4rz5oJZhJ8{HJ2SHP3zn7P1O1W>2=i=*kuJnHL z%#2r-80%oHG~x6tpnGqz3#-*xu}fQi80&=C^ZEQH@TIQ!y{4+yy6<>s## zMDQ%NvGu2G^G4{_?jH}NNna36i%yZqmgU|7zu|gjB>H*e?kByHuRyGDD-{S#AKs0K zRwT-Irtf2~e)!BRd1kdR)wm0tv!DIulJiZc9z=kb(kD89$IBW&K$gB<&+MgKpdM+N zXmIkasn9&Bb;xRZC1hau?NQOpG=rXF=kTVrRxxqj39okz;0m6c&-SxvXRWpOUJIK{ zPwyLA$2muQaxFw{$R8JV8mE-3;QgQ4UO!7z$4XjP2e-9`&aVYVbbhLVs?+KRhr05k z=M3~i+dMXVEJd{8tA$e3xl;N*~H*0J;si?u3JG$m~+8T8o9-Mv^ko!HT| zL%iMRaO91faJs5YPG*^45}%ebL#@<=p((bOCGC56lm%1}Po6t(@g?Lm>2>M2WTn!g;=`4ENoV)^IeGH=Y-|-Xpuk!v zSxXQrZ~2haU3Qae<6-@+(XJ~cS+==qjg=8aSYnN4cZV+DIA1)yym^)Iwh{}e%aq|*op3RIVo{=KU zsE%fI+kFUSblV$PO5q^Q>W%SGe2@nN`tecz*6kiTj;p{xO)oNp3xeE(`{Flra+d1=hLF{TP>y1 z?1CpC*F7Kiz6kE)n#~-_kvdKkN?XMw+azckx2jt-8O+t|NM+DXvCoLg2_n_z2(l7Q z*v+Y^d5Uw2p2Q_ze!Bl0Z9_k^OmuZEMv_sOsIV8F!J&yGI`v}=_3+3D*Z3gJ-_+_*qe{S26I*S8(LrRaXet7f?3N# z=FKiv!&K)Mc3h%JYm<9=v5NFQBYN#LA8u z!AjkPx_C9BvLo)UuRtrw9(5c7mYw4a`qIfvNzQimcR+lV=`m+hlNsEbLqRP*e-^{* z-v&`j1Z;E)+%Aj+qxmw=kvO|T<|R?o*RU$HXF1A zodQ#;ruaMnSIwXpKG(ud+yt*OCWWvb|1ueA=$!bO?%qtb2hV@DP?1bKWMtNi@z240 ziE2I99ipoeBW$zlJtjV{zv{GtcB|?1TFOkR11-m&Xu8z@Z=7ylKBjpe8`h7wJBF zB-;~WZdXTDx6UEP;1m>9Jk@R;4e^8qc|Qf8@ojld$iJ7Le(*peB(ZhQ#e)CnX>`uq@XQ*>_T zdzgx`#O89kKH||uc#@)D9(s1+M8iK$6aNs3qA&@}^2^JrsX<2!1Dkl7ead?)2O4k} z^^iBiL@kF`MHqxY@AdHf*w<4czD0w^5uwKmbiY+WhMx5y2M_>6!nUda1QrAY0f3$M z{|i)1YI0PC`2ST*GIv3OPLr(c#ks#L{Gj9|jXEJgF{JDE2X_AoEhfEiMuLV&aIDx5 z#P=+}Dl(D_1Cz4ZTfZkvkfW1Zb`-H?X67cmr`1^ksKZN2%DYa;M}^;&)&<} KQCM!@lKu-tAYUv1 literal 25976 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 Z&i+dE>PnbcCuU^Gzak`aHJF?n{SS6l-HQMK