From 1df317b59f565b78eb49206cfc11ca4e1da6124f Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Thu, 20 Feb 2014 14:02:02 +0100 Subject: [PATCH 01/19] If BITAuthenticator is set to BITAuthenticatorIdentificationTypeWebAuth then also attach the user email to crash reports --- Classes/BITCrashManager.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Classes/BITCrashManager.m b/Classes/BITCrashManager.m index fca13fc4bf..b0d3b33783 100644 --- a/Classes/BITCrashManager.m +++ b/Classes/BITCrashManager.m @@ -357,7 +357,8 @@ NSString *const kBITCrashManagerStatus = @"BITCrashManagerStatus"; // if we have an identification from BITAuthenticator, use this as a default. if (( self.installationIdentificationType == BITAuthenticatorIdentificationTypeHockeyAppEmail || - self.installationIdentificationType == BITAuthenticatorIdentificationTypeHockeyAppUser + self.installationIdentificationType == BITAuthenticatorIdentificationTypeHockeyAppUser || + self.installationIdentificationType == BITAuthenticatorIdentificationTypeWebAuth ) && self.installationIdentification) { useremail = self.installationIdentification; From 54b3c57ee256aba31358c4a70aed865396e8cd04 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Thu, 20 Feb 2014 16:33:31 +0100 Subject: [PATCH 02/19] Remove #ifdef for clang analyzer since the false warning from 4.2b3 doesn't appear any longer Tested with Xcode 5.0.2 --- Classes/BITHockeyHelper.m | 3 --- 1 file changed, 3 deletions(-) diff --git a/Classes/BITHockeyHelper.m b/Classes/BITHockeyHelper.m index 11b29ad849..4ea63f165d 100644 --- a/Classes/BITHockeyHelper.m +++ b/Classes/BITHockeyHelper.m @@ -458,10 +458,7 @@ UIImage *bit_newWithContentsOfResolutionIndependentFile(NSString * path) { UIImage *bit_imageWithContentsOfResolutionIndependentFile(NSString *path) { -#ifndef __clang_analyzer__ - // clang alayzer in 4.2b3 thinks here's a leak, which is not the case. return bit_newWithContentsOfResolutionIndependentFile(path); -#endif } From ce9014f111bf64b7ee328bea219a50152fbdbf85 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Thu, 20 Feb 2014 22:41:19 +0100 Subject: [PATCH 03/19] Add SDK version and build strings into a non stripped struct --- Classes/BITHockeyManager.m | 18 ++++++++++++++++-- HockeySDK.podspec | 2 +- Support/buildnumber.xcconfig | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Classes/BITHockeyManager.m b/Classes/BITHockeyManager.m index f72a907df1..baa1a7e81c 100644 --- a/Classes/BITHockeyManager.m +++ b/Classes/BITHockeyManager.m @@ -36,6 +36,20 @@ #import "BITHockeyAppClient.h" #import "BITKeychainUtils.h" +#include + +typedef struct { + uint8_t info_version; + const char hockey_version[16]; + const char hockey_build[16]; +} bitstadium_info_t; + +bitstadium_info_t bitstadium_library_info __attribute__((section("__TEXT,__bit_hockey,regular,no_dead_strip"))) = { + .info_version = 1, + .hockey_version = BITHOCKEY_C_VERSION, + .hockey_build = BITHOCKEY_C_BUILD +}; + #if HOCKEYSDK_FEATURE_CRASH_REPORTER #import "BITCrashManagerPrivate.h" @@ -417,11 +431,11 @@ - (NSString *)version { - return BITHOCKEY_VERSION; + return [NSString stringWithUTF8String:bitstadium_library_info.hockey_version]; } - (NSString *)build { - return BITHOCKEY_BUILD; + return [NSString stringWithUTF8String:bitstadium_library_info.hockey_build]; } diff --git a/HockeySDK.podspec b/HockeySDK.podspec index 2d13ab5234..9d9ad9214b 100644 --- a/HockeySDK.podspec +++ b/HockeySDK.podspec @@ -24,7 +24,7 @@ Pod::Spec.new do |s| s.frameworks = 'CoreText', 'QuartzCore', 'SystemConfiguration', 'CoreGraphics', 'UIKit', 'Security' s.ios.vendored_frameworks = 'Vendor/CrashReporter.framework' - s.xcconfig = {'GCC_PREPROCESSOR_DEFINITIONS' => %{$(inherited) BITHOCKEY_VERSION="@\\"#{s.version}\\"" BITHOCKEY_BUILD="@\\"27\\""} } + s.xcconfig = {'GCC_PREPROCESSOR_DEFINITIONS' => %{$(inherited) BITHOCKEY_VERSION="@\\"#{s.version}\\"" BITHOCKEY_C_VERSION="\\"#{s.version}\\"" BITHOCKEY_BUILD="@\\"27\\"" BITHOCKEY_C_BUILD="\\"27\\""} } s.resource_bundle = { 'HockeySDKResources' => ['Resources/*.png', 'Resources/*.lproj'] } s.preserve_paths = 'Resources', 'Support' diff --git a/Support/buildnumber.xcconfig b/Support/buildnumber.xcconfig index 39e6f651aa..85f0b6f47c 100644 --- a/Support/buildnumber.xcconfig +++ b/Support/buildnumber.xcconfig @@ -2,7 +2,7 @@ BUILD_NUMBER = 27 VERSION_STRING = 3.5.4 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) BITHOCKEY_VERSION="@\""$(VERSION_STRING)"\"" BITHOCKEY_BUILD="@\""$(BUILD_NUMBER)"\"" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) BITHOCKEY_VERSION="@\""$(VERSION_STRING)"\"" BITHOCKEY_BUILD="@\""$(BUILD_NUMBER)"\"" BITHOCKEY_C_VERSION="\""$(VERSION_STRING)"\"" BITHOCKEY_C_BUILD="\""$(BUILD_NUMBER)"\"" BIT_ARM_ARCHS = armv7 armv7s arm64 BIT_SIM_ARCHS = x86_64 i386 ARCHS = $(BIT_ARM_ARCHS) From 1068bb119c7b718fdb155ce1a4397c6f7374b505 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Thu, 27 Feb 2014 18:21:17 +0100 Subject: [PATCH 04/19] Add support for binary attachments to crash reports --- Classes/BITCrashAttachment.h | 66 +++++++++++ Classes/BITCrashAttachment.m | 64 +++++++++++ Classes/BITCrashManager.m | 107 ++++++++++++++++-- Classes/BITCrashManagerDelegate.h | 28 +++++ Classes/BITHockeyAppClient.h | 18 ++- Classes/BITHockeyAppClient.m | 19 +++- Classes/HockeySDK.h | 1 + Support/HockeySDK.xcodeproj/project.pbxproj | 8 ++ Support/HockeySDKTests/BITCrashManagerTests.m | 1 + 9 files changed, 299 insertions(+), 13 deletions(-) create mode 100644 Classes/BITCrashAttachment.h create mode 100644 Classes/BITCrashAttachment.m diff --git a/Classes/BITCrashAttachment.h b/Classes/BITCrashAttachment.h new file mode 100644 index 0000000000..482e0c004c --- /dev/null +++ b/Classes/BITCrashAttachment.h @@ -0,0 +1,66 @@ +/* + * Author: Andreas Linde + * + * Copyright (c) 2014 HockeyApp, Bit Stadium GmbH. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#import + +/** + * Provides support to add binary attachments to crash reports + * + * This is used by `[BITCrashManagerDelegate attachmentForCrashManager:]` + */ +@interface BITCrashAttachment : NSObject + +/** + * The filename the attachment should get + */ +@property (nonatomic, readonly, strong) NSString *filename; + +/** + * The attachment data as NSData object + */ +@property (nonatomic, readonly, strong) NSData *attachmentData; + +/** + * The content type of your data as MIME type + */ +@property (nonatomic, readonly, strong) NSString *contentType; + +/** + * Create an BITCrashAttachment instance with a given filename and NSData object + * + * @param filename The filename the attachment should get + * @param attachmentData The attachment data as NSData + * @param contentType The content type of your data as MIME type + * + * @return An instsance of BITCrashAttachment + */ +- (instancetype)initWithFilename:(NSString *)filename + attachmentData:(NSData *)attachmentData + contentType:(NSString *)contentType; + +@end diff --git a/Classes/BITCrashAttachment.m b/Classes/BITCrashAttachment.m new file mode 100644 index 0000000000..def32d2583 --- /dev/null +++ b/Classes/BITCrashAttachment.m @@ -0,0 +1,64 @@ +/* + * Author: Andreas Linde + * + * Copyright (c) 2014 HockeyApp, Bit Stadium GmbH. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#import "BITCrashAttachment.h" + +@implementation BITCrashAttachment + +- (instancetype)initWithFilename:(NSString *)filename + attachmentData:(NSData *)attachmentData + contentType:(NSString *)contentType +{ + if (self = [super init]) { + _filename = filename; + _attachmentData = attachmentData; + _contentType = contentType; + } + + return self; +} + + +#pragma mark - NSCoder + +- (void)encodeWithCoder:(NSCoder *)encoder { + [encoder encodeObject:self.filename forKey:@"filename"]; + [encoder encodeObject:self.attachmentData forKey:@"data"]; + [encoder encodeObject:self.contentType forKey:@"contentType"]; +} + +- (id)initWithCoder:(NSCoder *)decoder { + if ((self = [super init])) { + _filename = [decoder decodeObjectForKey:@"filename"]; + _attachmentData = [decoder decodeObjectForKey:@"data"]; + _contentType = [decoder decodeObjectForKey:@"contentType"]; + } + return self; +} + +@end diff --git a/Classes/BITCrashManager.m b/Classes/BITCrashManager.m index b0d3b33783..18b3aaf270 100644 --- a/Classes/BITCrashManager.m +++ b/Classes/BITCrashManager.m @@ -37,7 +37,9 @@ #import "HockeySDKPrivate.h" #import "BITHockeyHelper.h" +#import "BITHockeyAppClient.h" +#import "BITCrashAttachment.h" #import "BITHockeyBaseManagerPrivate.h" #import "BITCrashManagerPrivate.h" #import "BITCrashReportTextFormatter.h" @@ -52,6 +54,11 @@ #define kBITCrashMetaUserEmail @"BITCrashMetaUserEmail" #define kBITCrashMetaUserID @"BITCrashMetaUserID" #define kBITCrashMetaApplicationLog @"BITCrashMetaApplicationLog" +#define kBITCrashMetaAttachment @"BITCrashMetaAttachment" + +// internal keys +NSString *const KBITAttachmentDictIndex = @"index"; +NSString *const KBITAttachmentDictAttachment = @"attachment"; NSString *const kBITCrashManagerStatus = @"BITCrashManagerStatus"; @@ -215,6 +222,7 @@ NSString *const kBITCrashManagerStatus = @"BITCrashManagerStatus"; for (NSUInteger i=0; i < [_crashFiles count]; i++) { [_fileManager removeItemAtPath:[_crashFiles objectAtIndex:i] error:&error]; + [_fileManager removeItemAtPath:[[_crashFiles objectAtIndex:i] stringByAppendingString:@".data"] error:&error]; [_fileManager removeItemAtPath:[[_crashFiles objectAtIndex:i] stringByAppendingString:@".meta"] error:&error]; NSString *cacheFilename = [[_crashFiles objectAtIndex:i] lastPathComponent]; @@ -228,9 +236,57 @@ NSString *const kBITCrashManagerStatus = @"BITCrashManagerStatus"; [self saveSettings]; } + +- (void)persistAttachment:(BITCrashAttachment *)attachment withFilename:(NSString *)filename { + NSString *attachmentFilename = [filename stringByAppendingString:@".data"]; + NSMutableData *data = [[NSMutableData alloc] init]; + NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; + + [archiver encodeObject:attachment forKey:kBITCrashMetaAttachment]; + + [archiver finishEncoding]; + + [data writeToFile:attachmentFilename atomically:YES]; +} + +/** + * Read the attachment data from the stored file + * + * @param filename The crash report id + * + * @return an BITCrashAttachment instance or nil + */ +- (BITCrashAttachment *)attachmentForCrashReport:(NSString *)filename { + NSString *attachmentFilename = [filename stringByAppendingString:@".data"]; + + if (![_fileManager fileExistsAtPath:attachmentFilename]) + return nil; + + + NSData *codedData = [[NSData alloc] initWithContentsOfFile:attachmentFilename]; + if (!codedData) + return nil; + + NSKeyedUnarchiver *unarchiver = nil; + + @try { + unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:codedData]; + } + @catch (NSException *exception) { + return nil; + } + + if ([unarchiver containsValueForKey:kBITCrashMetaAttachment]) { + BITCrashAttachment *attachment = [unarchiver decodeObjectForKey:kBITCrashMetaAttachment]; + return attachment; + } + + return nil; +} + /** * Extract all app sepcific UUIDs from the crash reports - * + * * This allows us to send the UUIDs in the XML construct to the server, so the server does not need to parse the crash report for this data. * The app specific UUIDs help to identify which dSYMs are needed to symbolicate this crash report. * @@ -489,6 +545,14 @@ NSString *const kBITCrashManagerStatus = @"BITCrashManagerStatus"; } [metaDict setObject:applicationLog forKey:kBITCrashMetaApplicationLog]; + if (self.delegate != nil && [self.delegate respondsToSelector:@selector(attachmentForCrashManager:)]) { + BITCrashAttachment *attachment = [self.delegate attachmentForCrashManager:self]; + + if (attachment) { + [self persistAttachment:attachment withFilename:[_crashesDir stringByAppendingPathComponent: cacheFilename]]; + } + } + NSData *plist = [NSPropertyListSerialization dataFromPropertyList:(id)metaDict format:NSPropertyListBinaryFormat_v1_0 errorDescription:&errorString]; @@ -549,6 +613,7 @@ NSString *const kBITCrashManagerStatus = @"BITCrashManagerStatus"; ![file hasSuffix:@".DS_Store"] && ![file hasSuffix:@".analyzer"] && ![file hasSuffix:@".plist"] && + ![file hasSuffix:@".data"] && ![file hasSuffix:@".meta"]) { [_crashFiles addObject:[_crashesDir stringByAppendingPathComponent: file]]; } @@ -747,6 +812,7 @@ NSString *const kBITCrashManagerStatus = @"BITCrashManagerStatus"; NSError *error = NULL; NSMutableString *crashes = nil; + NSMutableArray *attachments = [NSMutableArray array]; _crashIdenticalCurrentVersion = NO; for (NSUInteger i=0; i < [_crashFiles count]; i++) { @@ -761,6 +827,7 @@ NSString *const kBITCrashManagerStatus = @"BITCrashManagerStatus"; BITHockeyLog(@"WARNING: Could not parse crash report"); // we cannot do anything with this report, so delete it [_fileManager removeItemAtPath:filename error:&error]; + [_fileManager removeItemAtPath:[NSString stringWithFormat:@"%@.data", filename] error:&error]; [_fileManager removeItemAtPath:[NSString stringWithFormat:@"%@.meta", filename] error:&error]; [self removeKeyFromKeychain:[NSString stringWithFormat:@"%@.%@", cacheFilename, kBITCrashMetaUserName]]; @@ -805,6 +872,13 @@ NSString *const kBITCrashManagerStatus = @"BITCrashManagerStatus"; useremail = [self stringValueFromKeychainForKey:[NSString stringWithFormat:@"%@.%@", cacheFilename, kBITCrashMetaUserEmail]] ?: @""; userid = [self stringValueFromKeychainForKey:[NSString stringWithFormat:@"%@.%@", cacheFilename, kBITCrashMetaUserID]] ?: @""; applicationLog = [metaDict objectForKey:kBITCrashMetaApplicationLog] ?: @""; + + BITCrashAttachment *attachment = [self attachmentForCrashReport:filename]; + if (attachment) { + NSDictionary *attachmentDict = @{KBITAttachmentDictIndex: @(i), + KBITAttachmentDictAttachment: attachment}; + [attachments addObject:attachmentDict]; + } } else { BITHockeyLog(@"ERROR: Reading crash meta data. %@", error); } @@ -835,6 +909,7 @@ NSString *const kBITCrashManagerStatus = @"BITCrashManagerStatus"; } else { // we cannot do anything with this report, so delete it [_fileManager removeItemAtPath:filename error:&error]; + [_fileManager removeItemAtPath:[NSString stringWithFormat:@"%@.data", filename] error:&error]; [_fileManager removeItemAtPath:[NSString stringWithFormat:@"%@.meta", filename] error:&error]; [self removeKeyFromKeychain:[NSString stringWithFormat:@"%@.%@", cacheFilename, kBITCrashMetaUserName]]; @@ -847,7 +922,7 @@ NSString *const kBITCrashManagerStatus = @"BITCrashManagerStatus"; if (crashes != nil) { BITHockeyLog(@"INFO: Sending crash reports:\n%@", crashes); - [self postXML:[NSString stringWithFormat:@"%@", crashes]]; + [self postXML:[NSString stringWithFormat:@"%@", crashes] attachments:attachments]; } } @@ -895,7 +970,7 @@ NSString *const kBITCrashManagerStatus = @"BITCrashManagerStatus"; * * @param xml The XML data that needs to be send to the server */ -- (void)postXML:(NSString*)xml { +- (void)postXML:(NSString*)xml attachments:(NSArray *)attachments { NSMutableURLRequest *request = nil; NSString *boundary = @"----FOO"; @@ -917,12 +992,28 @@ NSString *const kBITCrashManagerStatus = @"BITCrashManagerStatus"; [request setValue:contentType forHTTPHeaderField:@"Content-type"]; NSMutableData *postBody = [NSMutableData data]; - [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; - [postBody appendData:[@"Content-Disposition: form-data; name=\"xml\"; filename=\"crash.xml\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; - [postBody appendData:[[NSString stringWithFormat:@"Content-Type: text/xml\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; - [postBody appendData:[xml dataUsingEncoding:NSUTF8StringEncoding]]; - [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[BITHockeyAppClient dataWithPostValue:[xml dataUsingEncoding:NSUTF8StringEncoding] + forKey:@"xml" + contentType:@"text/xml" + boundary:boundary + filename:@"crash.xml"]]; + + for (NSDictionary *dict in attachments) { + NSInteger index = [(NSNumber *)dict[KBITAttachmentDictIndex] integerValue]; + NSString *key = [NSString stringWithFormat:@"attachment%ld", (long)index]; + + BITCrashAttachment *attachment = (BITCrashAttachment *)dict[KBITAttachmentDictAttachment]; + + [postBody appendData:[BITHockeyAppClient dataWithPostValue:attachment.attachmentData + forKey:key + contentType:attachment.contentType + boundary:boundary + filename:attachment.filename]]; + } + + [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; + [request setHTTPBody:postBody]; _statusCode = 200; diff --git a/Classes/BITCrashManagerDelegate.h b/Classes/BITCrashManagerDelegate.h index e2792b5ce4..c88aef2c93 100644 --- a/Classes/BITCrashManagerDelegate.h +++ b/Classes/BITCrashManagerDelegate.h @@ -29,6 +29,7 @@ #import @class BITCrashManager; +@class BITCrashAttachment; /** The `BITCrashManagerDelegate` formal protocol defines methods further configuring @@ -47,17 +48,43 @@ /** Return any log string based data the crash report being processed should contain @param crashManager The `BITCrashManager` instance invoking this delegate + @see attachmentForCrashManager: @see userNameForCrashManager: @see userEmailForCrashManager: */ -(NSString *)applicationLogForCrashManager:(BITCrashManager *)crashManager; +/** Return a BITCrashAttachment object providing an NSData object the crash report + being processed should contain + + Please limit your attachments to reasonable files to avoid high traffic costs for your users. + + Example implementation: + + - (BITCrashAttachment *)attachmentForCrashManager:(BITCrashManager *)crashManager { + NSData *data = [NSData dataWithContentsOfURL:@"mydatafile"]; + + BITCrashAttachment *attachment = [[BITCrashAttachment alloc] initWithFilename:@"myfile.data" + attachmentData:data + contentType:@"'application/octet-stream"]; + return attachment; + } + + @param crashManager The `BITCrashManager` instance invoking this delegate + @see applicationLogForCrashManager: + @see userNameForCrashManager: + @see userEmailForCrashManager: + */ +-(BITCrashAttachment *)attachmentForCrashManager:(BITCrashManager *)crashManager; + + /** Return the user name or userid that should be send along each crash report @param crashManager The `BITCrashManager` instance invoking this delegate @see applicationLogForCrashManager: + @see attachmentForCrashManager: @see userEmailForCrashManager: @deprecated Please use `BITHockeyManagerDelegate userNameForHockeyManager:componentManager:` instead @warning When returning a non nil value, crash reports are not anonymous any @@ -71,6 +98,7 @@ @param crashManager The `BITCrashManager` instance invoking this delegate @see applicationLogForCrashManager: + @see attachmentForCrashManager: @see userNameForCrashManager: @deprecated Please use `BITHockeyManagerDelegate userEmailForHockeyManager:componentManager:` instead @warning When returning a non nil value, crash reports are not anonymous any diff --git a/Classes/BITHockeyAppClient.h b/Classes/BITHockeyAppClient.h index a8d5fdbd15..4de7fa24e7 100644 --- a/Classes/BITHockeyAppClient.h +++ b/Classes/BITHockeyAppClient.h @@ -118,8 +118,8 @@ #pragma mark - Helpers /** - * create a post body from the given value, key and boundary - * c/p from HockeyBaseManager + * create a post body from the given value, key and boundary. This is a convenience call to + * dataWithPostValue:forKey:contentType:boundary and aimed at NSString-content. * * @param value - * @param key - @@ -128,4 +128,18 @@ * @return NSData instance configured to be attached on a (post) URLRequest */ + (NSData *)dataWithPostValue:(NSString *)value forKey:(NSString *)key boundary:(NSString *) boundary; + +/** + * create a post body from the given value, key and boundary and content type. + * + * @param value - + * @param key - + *@param contentType - + * @param boundary - + * @param filename - + * + * @return NSData instance configured to be attached on a (post) URLRequest + */ ++ (NSData *)dataWithPostValue:(NSData *)value forKey:(NSString *)key contentType:(NSString *)contentType boundary:(NSString *) boundary filename:(NSString *)filename; + @end diff --git a/Classes/BITHockeyAppClient.m b/Classes/BITHockeyAppClient.m index 168162b47c..37a22b6407 100644 --- a/Classes/BITHockeyAppClient.m +++ b/Classes/BITHockeyAppClient.m @@ -85,12 +85,25 @@ } + (NSData *)dataWithPostValue:(NSString *)value forKey:(NSString *)key boundary:(NSString *) boundary { + return [self dataWithPostValue:[value dataUsingEncoding:NSUTF8StringEncoding] forKey:key contentType:@"text" boundary:boundary filename:nil]; +} + ++ (NSData *)dataWithPostValue:(NSData *)value forKey:(NSString *)key contentType:(NSString *)contentType boundary:(NSString *) boundary filename:(NSString *)filename { NSMutableData *postBody = [NSMutableData data]; [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; - [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\";\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; - [postBody appendData:[[NSString stringWithFormat:@"Content-Type: text\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; - [postBody appendData:[value dataUsingEncoding:NSUTF8StringEncoding]]; + + // There's certainly a better way to check if we are supposed to send binary data here. + if (filename){ + [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", key, filename] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n", contentType] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[[NSString stringWithFormat:@"Content-Transfer-Encoding: binary\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; + } else { + [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", contentType] dataUsingEncoding:NSUTF8StringEncoding]]; + } + + [postBody appendData:value]; [postBody appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; return postBody; diff --git a/Classes/HockeySDK.h b/Classes/HockeySDK.h index aa1c4da3ff..c364d4eace 100644 --- a/Classes/HockeySDK.h +++ b/Classes/HockeySDK.h @@ -37,6 +37,7 @@ #if HOCKEYSDK_FEATURE_CRASH_REPORTER #import "BITCrashManager.h" +#import "BITCrashAttachment.h" #import "BITCrashManagerDelegate.h" #endif /* HOCKEYSDK_FEATURE_CRASH_REPORTER */ diff --git a/Support/HockeySDK.xcodeproj/project.pbxproj b/Support/HockeySDK.xcodeproj/project.pbxproj index 910428df15..6b6135a2f8 100644 --- a/Support/HockeySDK.xcodeproj/project.pbxproj +++ b/Support/HockeySDK.xcodeproj/project.pbxproj @@ -127,6 +127,8 @@ 1EAF20AA162DC0F600957B1D /* feedbackActiviy.png in Resources */ = {isa = PBXBuildFile; fileRef = 1EAF20A6162DC0F600957B1D /* feedbackActiviy.png */; }; 1EAF20AB162DC0F600957B1D /* feedbackActiviy@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1EAF20A7162DC0F600957B1D /* feedbackActiviy@2x.png */; }; 1EB52FD5167B766100C801D5 /* HockeySDK.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1E59555F15B6F80E00A03429 /* HockeySDK.strings */; }; + 1ED570C718BF878C00AB3350 /* BITCrashAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED570C518BF878C00AB3350 /* BITCrashAttachment.h */; }; + 1ED570C818BF878C00AB3350 /* BITCrashAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ED570C618BF878C00AB3350 /* BITCrashAttachment.m */; }; 1EF95CA6162CB037000AE3AD /* BITFeedbackActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EF95CA4162CB036000AE3AD /* BITFeedbackActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1EF95CA7162CB037000AE3AD /* BITFeedbackActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EF95CA5162CB036000AE3AD /* BITFeedbackActivity.m */; }; 1EF95CAA162CB314000AE3AD /* BITFeedbackComposeViewControllerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EF95CA9162CB313000AE3AD /* BITFeedbackComposeViewControllerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -283,6 +285,8 @@ 1EAF20A6162DC0F600957B1D /* feedbackActiviy.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = feedbackActiviy.png; sourceTree = ""; }; 1EAF20A7162DC0F600957B1D /* feedbackActiviy@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "feedbackActiviy@2x.png"; sourceTree = ""; }; 1EB52FC3167B73D400C801D5 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/HockeySDK.strings; sourceTree = ""; }; + 1ED570C518BF878C00AB3350 /* BITCrashAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITCrashAttachment.h; sourceTree = ""; }; + 1ED570C618BF878C00AB3350 /* BITCrashAttachment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITCrashAttachment.m; sourceTree = ""; }; 1EDA60CF15C2C1450032D10B /* HockeySDK-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "HockeySDK-Info.plist"; sourceTree = ""; }; 1EF95CA4162CB036000AE3AD /* BITFeedbackActivity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITFeedbackActivity.h; sourceTree = ""; }; 1EF95CA5162CB036000AE3AD /* BITFeedbackActivity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITFeedbackActivity.m; sourceTree = ""; }; @@ -480,6 +484,8 @@ 1E754E571621FBB70070AB92 /* BITCrashManager.m */, 1EFF03D717F20F8300A5F13C /* BITCrashManagerPrivate.h */, 1E754E581621FBB70070AB92 /* BITCrashManagerDelegate.h */, + 1ED570C518BF878C00AB3350 /* BITCrashAttachment.h */, + 1ED570C618BF878C00AB3350 /* BITCrashAttachment.m */, 1E754E5A1621FBB70070AB92 /* BITCrashReportTextFormatter.h */, 1E754E5B1621FBB70070AB92 /* BITCrashReportTextFormatter.m */, ); @@ -633,6 +639,7 @@ 1E59559B15B6FDA500A03429 /* HockeySDK.h in Headers */, 1E59559A15B6FDA500A03429 /* BITHockeyManager.h in Headers */, 1E5955FD15B7877B00A03429 /* BITHockeyManagerDelegate.h in Headers */, + 1ED570C718BF878C00AB3350 /* BITCrashAttachment.h in Headers */, 1E754E5C1621FBB70070AB92 /* BITCrashManager.h in Headers */, 1E754E5E1621FBB70070AB92 /* BITCrashManagerDelegate.h in Headers */, 1E49A4731612226D00463151 /* BITUpdateManager.h in Headers */, @@ -876,6 +883,7 @@ 1E49A4511612223B00463151 /* BITFeedbackManager.m in Sources */, E4933E8117B66CDA00B11ACC /* BITHTTPOperation.m in Sources */, 1E49A45A1612223B00463151 /* BITFeedbackMessage.m in Sources */, + 1ED570C818BF878C00AB3350 /* BITCrashAttachment.m in Sources */, 1E49A4601612223B00463151 /* BITFeedbackUserDataViewController.m in Sources */, 1E49A4701612226D00463151 /* BITAppVersionMetaInfo.m in Sources */, 1E49A4761612226D00463151 /* BITUpdateManager.m in Sources */, diff --git a/Support/HockeySDKTests/BITCrashManagerTests.m b/Support/HockeySDKTests/BITCrashManagerTests.m index aa39447289..099b608e1d 100644 --- a/Support/HockeySDKTests/BITCrashManagerTests.m +++ b/Support/HockeySDKTests/BITCrashManagerTests.m @@ -201,6 +201,7 @@ [_sut handleCrashReport]; [verifyCount(delegateMock, times(1)) applicationLogForCrashManager:_sut]; + [verifyCount(delegateMock, times(1)) attachmentForCrashManager:_sut]; // we should have now 1 pending crash report assertThatBool([_sut hasPendingCrashReport], equalToBool(YES)); From f1e17d7ed1e4336b672331c033f476e2cd4a6d90 Mon Sep 17 00:00:00 2001 From: James Moore Date: Wed, 5 Mar 2014 19:49:02 -0800 Subject: [PATCH 05/19] removed the execute bit from these --- Resources/nl.lproj/HockeySDK.strings | 0 Resources/ro.lproj/HockeySDK.strings | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 Resources/nl.lproj/HockeySDK.strings mode change 100755 => 100644 Resources/ro.lproj/HockeySDK.strings diff --git a/Resources/nl.lproj/HockeySDK.strings b/Resources/nl.lproj/HockeySDK.strings old mode 100755 new mode 100644 diff --git a/Resources/ro.lproj/HockeySDK.strings b/Resources/ro.lproj/HockeySDK.strings old mode 100755 new mode 100644 From 1b9e9244267311fb0cd3501a0582ab054d2abc71 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Fri, 7 Mar 2014 16:32:07 +0100 Subject: [PATCH 06/19] Remove assert since that code can also be reached using auto-authentication. --- Classes/BITAuthenticator.m | 1 - 1 file changed, 1 deletion(-) diff --git a/Classes/BITAuthenticator.m b/Classes/BITAuthenticator.m index 4c53eab6eb..01a81d30d3 100644 --- a/Classes/BITAuthenticator.m +++ b/Classes/BITAuthenticator.m @@ -607,7 +607,6 @@ static unsigned char kBITPNGEndChunk[4] = {0x49, 0x45, 0x4e, 0x44}; case BITAuthenticatorIdentificationTypeHockeyAppEmail: case BITAuthenticatorIdentificationTypeAnonymous: case BITAuthenticatorIdentificationTypeHockeyAppUser: - NSAssert(NO, @"Should only be called for Device and WebAuth identificationType"); return NO; } From c89378b43db8fef54bb2b23964b198b575e98570 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Tue, 11 Mar 2014 20:53:47 +0100 Subject: [PATCH 07/19] Make BITCrashAttachment.h a public header as it should be --- Support/HockeySDK.xcodeproj/project.pbxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Support/HockeySDK.xcodeproj/project.pbxproj b/Support/HockeySDK.xcodeproj/project.pbxproj index 6b6135a2f8..8af9228c4c 100644 --- a/Support/HockeySDK.xcodeproj/project.pbxproj +++ b/Support/HockeySDK.xcodeproj/project.pbxproj @@ -639,7 +639,6 @@ 1E59559B15B6FDA500A03429 /* HockeySDK.h in Headers */, 1E59559A15B6FDA500A03429 /* BITHockeyManager.h in Headers */, 1E5955FD15B7877B00A03429 /* BITHockeyManagerDelegate.h in Headers */, - 1ED570C718BF878C00AB3350 /* BITCrashAttachment.h in Headers */, 1E754E5C1621FBB70070AB92 /* BITCrashManager.h in Headers */, 1E754E5E1621FBB70070AB92 /* BITCrashManagerDelegate.h in Headers */, 1E49A4731612226D00463151 /* BITUpdateManager.h in Headers */, @@ -655,6 +654,7 @@ 1E49A4AF161222B900463151 /* BITHockeyBaseManager.h in Headers */, 1E49A4B8161222B900463151 /* BITHockeyBaseViewController.h in Headers */, 1E94F9E116E91330006570AD /* BITStoreUpdateManager.h in Headers */, + 1ED570C718BF878C00AB3350 /* BITCrashAttachment.h in Headers */, 1E0829001708F69A0073050E /* BITStoreUpdateManagerDelegate.h in Headers */, 1E49A4421612223B00463151 /* BITFeedbackListViewCell.h in Headers */, 1E49A4541612223B00463151 /* BITFeedbackManagerPrivate.h in Headers */, From 1bca6c0cd1cc3f137c80a1779caff48ffb917273 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Tue, 11 Mar 2014 20:54:07 +0100 Subject: [PATCH 08/19] Update project settings to Xcode 5.1 --- Support/HockeySDK.xcodeproj/project.pbxproj | 4 ++-- .../xcshareddata/xcschemes/HockeySDK Documentation.xcscheme | 2 +- .../xcshareddata/xcschemes/HockeySDK Framework.xcscheme | 2 +- .../xcshareddata/xcschemes/HockeySDK.xcscheme | 2 +- .../xcshareddata/xcschemes/HockeySDKResources.xcscheme | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Support/HockeySDK.xcodeproj/project.pbxproj b/Support/HockeySDK.xcodeproj/project.pbxproj index 8af9228c4c..99815b430d 100644 --- a/Support/HockeySDK.xcodeproj/project.pbxproj +++ b/Support/HockeySDK.xcodeproj/project.pbxproj @@ -127,7 +127,7 @@ 1EAF20AA162DC0F600957B1D /* feedbackActiviy.png in Resources */ = {isa = PBXBuildFile; fileRef = 1EAF20A6162DC0F600957B1D /* feedbackActiviy.png */; }; 1EAF20AB162DC0F600957B1D /* feedbackActiviy@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1EAF20A7162DC0F600957B1D /* feedbackActiviy@2x.png */; }; 1EB52FD5167B766100C801D5 /* HockeySDK.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1E59555F15B6F80E00A03429 /* HockeySDK.strings */; }; - 1ED570C718BF878C00AB3350 /* BITCrashAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED570C518BF878C00AB3350 /* BITCrashAttachment.h */; }; + 1ED570C718BF878C00AB3350 /* BITCrashAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED570C518BF878C00AB3350 /* BITCrashAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1ED570C818BF878C00AB3350 /* BITCrashAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ED570C618BF878C00AB3350 /* BITCrashAttachment.m */; }; 1EF95CA6162CB037000AE3AD /* BITFeedbackActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EF95CA4162CB036000AE3AD /* BITFeedbackActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1EF95CA7162CB037000AE3AD /* BITFeedbackActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EF95CA5162CB036000AE3AD /* BITFeedbackActivity.m */; }; @@ -744,7 +744,7 @@ E4005611148D79B500EB22B9 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0500; + LastUpgradeCheck = 0510; }; buildConfigurationList = E4005614148D79B500EB22B9 /* Build configuration list for PBXProject "HockeySDK" */; compatibilityVersion = "Xcode 3.2"; diff --git a/Support/HockeySDK.xcodeproj/xcshareddata/xcschemes/HockeySDK Documentation.xcscheme b/Support/HockeySDK.xcodeproj/xcshareddata/xcschemes/HockeySDK Documentation.xcscheme index c339433201..6d2f03a55f 100644 --- a/Support/HockeySDK.xcodeproj/xcshareddata/xcschemes/HockeySDK Documentation.xcscheme +++ b/Support/HockeySDK.xcodeproj/xcshareddata/xcschemes/HockeySDK Documentation.xcscheme @@ -1,6 +1,6 @@ Date: Tue, 11 Mar 2014 20:55:32 +0100 Subject: [PATCH 09/19] Remove not needed and broken UIKit framework reference --- Support/HockeySDK.xcodeproj/project.pbxproj | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Support/HockeySDK.xcodeproj/project.pbxproj b/Support/HockeySDK.xcodeproj/project.pbxproj index 99815b430d..027a42dfa7 100644 --- a/Support/HockeySDK.xcodeproj/project.pbxproj +++ b/Support/HockeySDK.xcodeproj/project.pbxproj @@ -95,7 +95,6 @@ 1E5955D015B71C8600A03429 /* IconGradient@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1E5955C515B71C8600A03429 /* IconGradient@2x.png */; }; 1E5955FD15B7877B00A03429 /* BITHockeyManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E5955FA15B7877A00A03429 /* BITHockeyManagerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1E5A459216F0DFC200B55C04 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E5A459116F0DFC200B55C04 /* SenTestingKit.framework */; }; - 1E5A459416F0DFC200B55C04 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E5A459316F0DFC200B55C04 /* UIKit.framework */; }; 1E5A459516F0DFC200B55C04 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E400561D148D79B500EB22B9 /* Foundation.framework */; }; 1E5A459B16F0DFC200B55C04 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1E5A459916F0DFC200B55C04 /* InfoPlist.strings */; }; 1E5A459E16F0DFC200B55C04 /* BITStoreUpdateManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E5A459D16F0DFC200B55C04 /* BITStoreUpdateManagerTests.m */; }; @@ -248,7 +247,6 @@ 1E5955FA15B7877A00A03429 /* BITHockeyManagerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BITHockeyManagerDelegate.h; sourceTree = ""; }; 1E5A459016F0DFC200B55C04 /* HockeySDKTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HockeySDKTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; 1E5A459116F0DFC200B55C04 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; - 1E5A459316F0DFC200B55C04 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 1E5A459816F0DFC200B55C04 /* HockeySDKTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "HockeySDKTests-Info.plist"; sourceTree = ""; }; 1E5A459A16F0DFC200B55C04 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 1E5A459D16F0DFC200B55C04 /* BITStoreUpdateManagerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BITStoreUpdateManagerTests.m; sourceTree = ""; }; @@ -336,7 +334,6 @@ files = ( 1EA1170016F4D32C001C015C /* libHockeySDK.a in Frameworks */, 1E5A459216F0DFC200B55C04 /* SenTestingKit.framework in Frameworks */, - 1E5A459416F0DFC200B55C04 /* UIKit.framework in Frameworks */, 1EA1170116F4D354001C015C /* CrashReporter.framework in Frameworks */, 1E5A459516F0DFC200B55C04 /* Foundation.framework in Frameworks */, 1E7A45FC16F54FB5005B08F1 /* OCHamcrestIOS.framework in Frameworks */, @@ -566,7 +563,6 @@ E41EB48B148D7C4E0015DEDC /* CrashReporter.framework */, E400561D148D79B500EB22B9 /* Foundation.framework */, 1E5A459116F0DFC200B55C04 /* SenTestingKit.framework */, - 1E5A459316F0DFC200B55C04 /* UIKit.framework */, ); name = Frameworks; sourceTree = ""; From fc9fa2e61c4296074596c44a5d7e2840f95652d5 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Thu, 20 Mar 2014 15:56:26 +0100 Subject: [PATCH 10/19] Fix test code coverage not working any longer since Xcode 5.1 --- Support/HockeySDKTests/BITHockeyHelperTests.m | 7 ++- Vendor/XcodeCoverage/cleancov | 5 +- Vendor/XcodeCoverage/envcov.sh | 5 +- Vendor/XcodeCoverage/exportenv.sh | 3 +- Vendor/XcodeCoverage/getcov | 5 +- Vendor/XcodeCoverage/lcov-1.10/bin/geninfo | 52 ++++++++++--------- 6 files changed, 45 insertions(+), 32 deletions(-) diff --git a/Support/HockeySDKTests/BITHockeyHelperTests.m b/Support/HockeySDKTests/BITHockeyHelperTests.m index 9166d961cb..315a7c4238 100644 --- a/Support/HockeySDKTests/BITHockeyHelperTests.m +++ b/Support/HockeySDKTests/BITHockeyHelperTests.m @@ -32,7 +32,12 @@ } - (void)tearDown { - // Put teardown code here; it will be run once, after the last test case. + // Tear-down code here. +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wimplicit" + __gcov_flush(); +# pragma clang diagnostic pop + [super tearDown]; } diff --git a/Vendor/XcodeCoverage/cleancov b/Vendor/XcodeCoverage/cleancov index 1130af9d13..948886b2a7 100755 --- a/Vendor/XcodeCoverage/cleancov +++ b/Vendor/XcodeCoverage/cleancov @@ -5,6 +5,7 @@ # Source: https://github.com/jonreid/XcodeCoverage # -source envcov.sh +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source ${DIR}/envcov.sh -"${LCOV}" --zerocounters -d "${OBJ_DIR}" +"${LCOV}" --zerocounters -d "${OBJ_DIR}" \ No newline at end of file diff --git a/Vendor/XcodeCoverage/envcov.sh b/Vendor/XcodeCoverage/envcov.sh index b48d4b7e01..3a7b48efa3 100755 --- a/Vendor/XcodeCoverage/envcov.sh +++ b/Vendor/XcodeCoverage/envcov.sh @@ -4,11 +4,12 @@ # Source: https://github.com/jonreid/XcodeCoverage # -source env.sh +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source ${DIR}/env.sh # Change the report name if you like: LCOV_INFO=Coverage.info LCOV_PATH=${SRCROOT}/../Vendor/XcodeCoverage/lcov-1.10/bin LCOV=${LCOV_PATH}/lcov -OBJ_DIR=${OBJECT_FILE_DIR_normal}/${CURRENT_ARCH} +OBJ_DIR=${OBJECT_FILE_DIR_normal}/${CURRENT_ARCH} \ No newline at end of file diff --git a/Vendor/XcodeCoverage/exportenv.sh b/Vendor/XcodeCoverage/exportenv.sh index 32455f9f48..bbde8108de 100755 --- a/Vendor/XcodeCoverage/exportenv.sh +++ b/Vendor/XcodeCoverage/exportenv.sh @@ -4,4 +4,5 @@ # Source: https://github.com/jonreid/XcodeCoverage # -export | egrep '( BUILT_PRODUCTS_DIR)|(CURRENT_ARCH)|(OBJECT_FILE_DIR_normal)|(SRCROOT)|(OBJROOT)' > ../Vendor/XcodeCoverage/env.sh +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +export | egrep '( BUILT_PRODUCTS_DIR)|(CURRENT_ARCH)|(OBJECT_FILE_DIR_normal)|(SRCROOT)|(OBJROOT)' > ${DIR}/env.sh \ No newline at end of file diff --git a/Vendor/XcodeCoverage/getcov b/Vendor/XcodeCoverage/getcov index 332aa8c053..e69e9e7ffd 100755 --- a/Vendor/XcodeCoverage/getcov +++ b/Vendor/XcodeCoverage/getcov @@ -5,7 +5,8 @@ # Source: https://github.com/jonreid/XcodeCoverage # -source envcov.sh +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source ${DIR}/envcov.sh remove_old_report() { @@ -45,4 +46,4 @@ remove_old_report enter_lcov_dir gather_coverage exclude_data -generate_report +generate_report \ No newline at end of file diff --git a/Vendor/XcodeCoverage/lcov-1.10/bin/geninfo b/Vendor/XcodeCoverage/lcov-1.10/bin/geninfo index 9325f9d68c..a553e21347 100755 --- a/Vendor/XcodeCoverage/lcov-1.10/bin/geninfo +++ b/Vendor/XcodeCoverage/lcov-1.10/bin/geninfo @@ -1017,7 +1017,7 @@ sub process_dafile($$) warn("WARNING: GCOV failed for $da_filename!\n"); return; } - die("ERROR: GCOV failed for $da_filename!\n"); + warn("WARNING: GCOV failed for $da_filename!\n"); } # Collect data from resulting .gcov files and create .info file @@ -1861,33 +1861,37 @@ sub read_gcov_file($) sub get_gcov_version() { - local *HANDLE; - my $version_string; - my $result; + local *HANDLE; + my $version_string; + my $result; - open(GCOV_PIPE, "-|", "$gcov_tool -v") - or die("ERROR: cannot retrieve gcov version!\n"); - $version_string = ; - close(GCOV_PIPE); + open(GCOV_PIPE, "-|", "$gcov_tool --version") + or die("ERROR: cannot retrieve gcov version!\n"); + $version_string = ; + close(GCOV_PIPE); - $result = 0; - if ($version_string =~ /(\d+)\.(\d+)(\.(\d+))?/) - { - if (defined($4)) - { - info("Found gcov version: $1.$2.$4\n"); - $result = $1 << 16 | $2 << 8 | $4; - } - else - { - info("Found gcov version: $1.$2\n"); - $result = $1 << 16 | $2 << 8; - } - } - return ($result, $version_string); + $result = 0; + if ($version_string =~ m/LLVM/) + { + info("Found llvm-cov\n"); + $result = 0x40201; + } + elsif ($version_string =~ /(\d+)\.(\d+)(\.(\d+))?/) + { + if (defined($4)) + { + info("Found gcov version: $1.$2.$4\n"); + $result = $1 << 16 | $2 << 8 | $4; + } + else + { + info("Found gcov version: $1.$2\n"); + $result = $1 << 16 | $2 << 8; + } + } + return ($result, $version_string); } - # # info(printf_parameter) # From 6db478b452a51599d3d41b779d6b6dfd8c9f0f9a Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Mon, 24 Mar 2014 15:47:22 +0100 Subject: [PATCH 11/19] Add some tests for BITFeedbackManager and user meta data properties --- Classes/BITFeedbackManagerPrivate.h | 5 + Support/HockeySDK.xcodeproj/project.pbxproj | 4 + .../HockeySDKTests/BITFeedbackManagerTests.m | 216 ++++++++++++++++++ 3 files changed, 225 insertions(+) create mode 100644 Support/HockeySDKTests/BITFeedbackManagerTests.m diff --git a/Classes/BITFeedbackManagerPrivate.h b/Classes/BITFeedbackManagerPrivate.h index dd5f03a13f..0da30ca52e 100644 --- a/Classes/BITFeedbackManagerPrivate.h +++ b/Classes/BITFeedbackManagerPrivate.h @@ -56,6 +56,11 @@ @property (nonatomic, copy) NSString *userEmail; +// Fetch user meta data +- (BOOL)updateUserIDUsingKeychainAndDelegate; +- (BOOL)updateUserNameUsingKeychainAndDelegate; +- (BOOL)updateUserEmailUsingKeychainAndDelegate; + // load new messages from the server - (void)updateMessagesList; diff --git a/Support/HockeySDK.xcodeproj/project.pbxproj b/Support/HockeySDK.xcodeproj/project.pbxproj index 027a42dfa7..f01693d4d5 100644 --- a/Support/HockeySDK.xcodeproj/project.pbxproj +++ b/Support/HockeySDK.xcodeproj/project.pbxproj @@ -98,6 +98,7 @@ 1E5A459516F0DFC200B55C04 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E400561D148D79B500EB22B9 /* Foundation.framework */; }; 1E5A459B16F0DFC200B55C04 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1E5A459916F0DFC200B55C04 /* InfoPlist.strings */; }; 1E5A459E16F0DFC200B55C04 /* BITStoreUpdateManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E5A459D16F0DFC200B55C04 /* BITStoreUpdateManagerTests.m */; }; + 1E61CCAF18E0585A00A5E38E /* BITFeedbackManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E61CCAE18E0585A00A5E38E /* BITFeedbackManagerTests.m */; }; 1E70A23217F2F982001BB32D /* live_report_empty.plcrash in Resources */ = {isa = PBXBuildFile; fileRef = 1E70A22F17F2F982001BB32D /* live_report_empty.plcrash */; }; 1E70A23317F2F982001BB32D /* live_report_exception.plcrash in Resources */ = {isa = PBXBuildFile; fileRef = 1E70A23017F2F982001BB32D /* live_report_exception.plcrash */; }; 1E70A23417F2F982001BB32D /* live_report_signal.plcrash in Resources */ = {isa = PBXBuildFile; fileRef = 1E70A23117F2F982001BB32D /* live_report_signal.plcrash */; }; @@ -251,6 +252,7 @@ 1E5A459A16F0DFC200B55C04 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 1E5A459D16F0DFC200B55C04 /* BITStoreUpdateManagerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BITStoreUpdateManagerTests.m; sourceTree = ""; }; 1E5A459F16F0DFC200B55C04 /* HockeySDKTests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "HockeySDKTests-Prefix.pch"; sourceTree = ""; }; + 1E61CCAE18E0585A00A5E38E /* BITFeedbackManagerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BITFeedbackManagerTests.m; sourceTree = ""; }; 1E66CA9115D4100500F35BED /* buildnumber.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = buildnumber.xcconfig; sourceTree = ""; }; 1E6DDCEE169E290C0076C65D /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/HockeySDK.strings; sourceTree = ""; }; 1E6F0450167B5E5600ED1C86 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/HockeySDK.strings"; sourceTree = ""; }; @@ -378,6 +380,7 @@ 1E5A459D16F0DFC200B55C04 /* BITStoreUpdateManagerTests.m */, E48A3DEE17B3EFF100924C3D /* BITAuthenticatorTests.m */, 1EFF03E417F2485500A5F13C /* BITCrashManagerTests.m */, + 1E61CCAE18E0585A00A5E38E /* BITFeedbackManagerTests.m */, E40E0B0817DA19DC005E38C1 /* BITHockeyAppClientTests.m */, E4507E4217F0658F00171A0D /* BITKeychainUtilsTests.m */, 1E70A23517F31B82001BB32D /* BITHockeyHelperTests.m */, @@ -919,6 +922,7 @@ 1E70A23617F31B82001BB32D /* BITHockeyHelperTests.m in Sources */, E48A3DEF17B3EFF100924C3D /* BITAuthenticatorTests.m in Sources */, 1EA1170716F53B91001C015C /* BITTestHelper.m in Sources */, + 1E61CCAF18E0585A00A5E38E /* BITFeedbackManagerTests.m in Sources */, E4507E4317F0658F00171A0D /* BITKeychainUtilsTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Support/HockeySDKTests/BITFeedbackManagerTests.m b/Support/HockeySDKTests/BITFeedbackManagerTests.m new file mode 100644 index 0000000000..838fdb56d7 --- /dev/null +++ b/Support/HockeySDKTests/BITFeedbackManagerTests.m @@ -0,0 +1,216 @@ +// +// BITFeedbackManagerTests.m +// HockeySDK +// +// Created by Andreas Linde on 24.03.14. +// +// + +#import + +#define HC_SHORTHAND +#import + +#define MOCKITO_SHORTHAND +#import + +#import "HockeySDK.h" +#import "HockeySDKPrivate.h" +#import "BITFeedbackManager.h" +#import "BITFeedbackManagerPrivate.h" +#import "BITHockeyBaseManager.h" +#import "BITHockeyBaseManagerPrivate.h" + +#import "BITTestHelper.h" + +@interface BITFeedbackManagerTests : SenTestCase + +@end + +@implementation BITFeedbackManagerTests { + BITFeedbackManager *_sut; +} + +- (void)setUp { + [super setUp]; + + BITHockeyManager *hm = [BITHockeyManager sharedHockeyManager]; + hm.delegate = nil; + _sut = [[BITFeedbackManager alloc] initWithAppIdentifier:nil isAppStoreEnvironment:NO]; + _sut.delegate = nil; +} + +- (void)tearDown { +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wimplicit" + __gcov_flush(); +# pragma clang diagnostic pop + + [_sut removeKeyFromKeychain:kBITHockeyMetaUserID]; + [_sut removeKeyFromKeychain:kBITHockeyMetaUserName]; + [_sut removeKeyFromKeychain:kBITHockeyMetaUserEmail]; + + _sut = nil; + + [super tearDown]; +} + +#pragma mark - Private + +- (void)startManager { + [_sut startManager]; +} + +#pragma mark - Setup Tests + + +#pragma mark - User Metadata + +- (void)testUpdateUserIDWithNoDataPresent { + BITHockeyManager *hm = [BITHockeyManager sharedHockeyManager]; + id delegateMock = mockProtocol(@protocol(BITHockeyManagerDelegate)); + hm.delegate = delegateMock; + _sut.delegate = delegateMock; + + BOOL dataAvailable = [_sut updateUserIDUsingKeychainAndDelegate]; + + assertThatBool(dataAvailable, equalToBool(NO)); + assertThat(_sut.userID, nilValue()); + + [verifyCount(delegateMock, times(1)) userIDForHockeyManager:hm componentManager:_sut]; +} + +- (void)testUpdateUserIDWithDelegateReturningData { + BITHockeyManager *hm = [BITHockeyManager sharedHockeyManager]; + NSObject *classMock = mockObjectAndProtocol([NSObject class], @protocol(BITHockeyManagerDelegate)); + [given([classMock userIDForHockeyManager:hm componentManager:_sut]) willReturn:@"test"]; + hm.delegate = classMock; + _sut.delegate = classMock; + + BOOL dataAvailable = [_sut updateUserIDUsingKeychainAndDelegate]; + + assertThatBool(dataAvailable, equalToBool(YES)); + assertThat(_sut.userID, equalTo(@"test")); + + [verifyCount(classMock, times(1)) userIDForHockeyManager:hm componentManager:_sut]; +} + +- (void)testUpdateUserIDWithValueInKeychain { + [_sut addStringValueToKeychain:@"test" forKey:kBITHockeyMetaUserID]; + + BOOL dataAvailable = [_sut updateUserIDUsingKeychainAndDelegate]; + + assertThatBool(dataAvailable, equalToBool(YES)); + assertThat(_sut.userID, equalTo(@"test")); +} + +- (void)testUpdateUserIDWithGlobalSetter { + BITHockeyManager *hm = [BITHockeyManager sharedHockeyManager]; + [hm setUserID:@"test"]; + + BOOL dataAvailable = [_sut updateUserIDUsingKeychainAndDelegate]; + + assertThatBool(dataAvailable, equalToBool(YES)); + assertThat(_sut.userID, equalTo(@"test")); +} + + +- (void)testUpdateUserNameWithNoDataPresent { + BITHockeyManager *hm = [BITHockeyManager sharedHockeyManager]; + id delegateMock = mockProtocol(@protocol(BITHockeyManagerDelegate)); + hm.delegate = delegateMock; + _sut.delegate = delegateMock; + + BOOL dataAvailable = [_sut updateUserNameUsingKeychainAndDelegate]; + + assertThatBool(dataAvailable, equalToBool(NO)); + assertThat(_sut.userName, nilValue()); + + [verifyCount(delegateMock, times(1)) userNameForHockeyManager:hm componentManager:_sut]; +} + +- (void)testUpdateUserNameWithDelegateReturningData { + BITHockeyManager *hm = [BITHockeyManager sharedHockeyManager]; + NSObject *classMock = mockObjectAndProtocol([NSObject class], @protocol(BITHockeyManagerDelegate)); + [given([classMock userNameForHockeyManager:hm componentManager:_sut]) willReturn:@"test"]; + hm.delegate = classMock; + _sut.delegate = classMock; + + BOOL dataAvailable = [_sut updateUserNameUsingKeychainAndDelegate]; + + assertThatBool(dataAvailable, equalToBool(YES)); + assertThat(_sut.userName, equalTo(@"test")); + + [verifyCount(classMock, times(1)) userNameForHockeyManager:hm componentManager:_sut]; +} + +- (void)testUpdateUserNameWithValueInKeychain { + [_sut addStringValueToKeychain:@"test" forKey:kBITHockeyMetaUserName]; + + BOOL dataAvailable = [_sut updateUserNameUsingKeychainAndDelegate]; + + assertThatBool(dataAvailable, equalToBool(YES)); + assertThat(_sut.userName, equalTo(@"test")); +} + +- (void)testUpdateUserNameWithGlobalSetter { + BITHockeyManager *hm = [BITHockeyManager sharedHockeyManager]; + [hm setUserName:@"test"]; + + BOOL dataAvailable = [_sut updateUserNameUsingKeychainAndDelegate]; + + assertThatBool(dataAvailable, equalToBool(YES)); + assertThat(_sut.userName, equalTo(@"test")); +} + + +- (void)testUpdateUserEmailWithNoDataPresent { + BITHockeyManager *hm = [BITHockeyManager sharedHockeyManager]; + id delegateMock = mockProtocol(@protocol(BITHockeyManagerDelegate)); + hm.delegate = delegateMock; + _sut.delegate = delegateMock; + + BOOL dataAvailable = [_sut updateUserEmailUsingKeychainAndDelegate]; + + assertThatBool(dataAvailable, equalToBool(NO)); + assertThat(_sut.userEmail, nilValue()); + + [verifyCount(delegateMock, times(1)) userEmailForHockeyManager:hm componentManager:_sut]; +} + +- (void)testUpdateUserEmailWithDelegateReturningData { + BITHockeyManager *hm = [BITHockeyManager sharedHockeyManager]; + NSObject *classMock = mockObjectAndProtocol([NSObject class], @protocol(BITHockeyManagerDelegate)); + [given([classMock userEmailForHockeyManager:hm componentManager:_sut]) willReturn:@"test"]; + hm.delegate = classMock; + _sut.delegate = classMock; + + BOOL dataAvailable = [_sut updateUserEmailUsingKeychainAndDelegate]; + + assertThatBool(dataAvailable, equalToBool(YES)); + assertThat(_sut.userEmail, equalTo(@"test")); + + [verifyCount(classMock, times(1)) userEmailForHockeyManager:hm componentManager:_sut]; +} + +- (void)testUpdateUserEmailWithValueInKeychain { + [_sut addStringValueToKeychain:@"test" forKey:kBITHockeyMetaUserEmail]; + + BOOL dataAvailable = [_sut updateUserEmailUsingKeychainAndDelegate]; + + assertThatBool(dataAvailable, equalToBool(YES)); + assertThat(_sut.userEmail, equalTo(@"test")); +} + +- (void)testUpdateUserEmailWithGlobalSetter { + BITHockeyManager *hm = [BITHockeyManager sharedHockeyManager]; + [hm setUserEmail:@"test"]; + + BOOL dataAvailable = [_sut updateUserEmailUsingKeychainAndDelegate]; + + assertThatBool(dataAvailable, equalToBool(YES)); + assertThat(_sut.userEmail, equalTo(@"test")); +} + + +@end From b5087a61c4525ff785172dcbaae7eee7778f9935 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Thu, 27 Mar 2014 00:13:27 +0100 Subject: [PATCH 12/19] Improve fetching of current binaries UUID - This now also works with unit tests - Fixed BITStoreUpdateManager for now failed unit tests - Fixed a typo Thanks to @0xced ! --- Classes/BITHockeyBaseManager.m | 44 +++++++++++-------- Classes/BITStoreUpdateManager.m | 2 +- .../BITStoreUpdateManagerTests.m | 2 +- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/Classes/BITHockeyBaseManager.m b/Classes/BITHockeyBaseManager.m index 434a596c85..c335662942 100644 --- a/Classes/BITHockeyBaseManager.m +++ b/Classes/BITHockeyBaseManager.m @@ -38,9 +38,8 @@ #import "BITKeychainUtils.h" #import -#if !TARGET_IPHONE_SIMULATOR -#import -#endif +#import +#import #ifndef __IPHONE_6_1 #define __IPHONE_6_1 60100 @@ -134,29 +133,38 @@ } - (NSString *)executableUUID { - // This now requires the testing of this feature to be done on an actual device, since it returns always empty strings on the simulator - // Once there is a better solution to get unit test targets build without problems this should be changed again, so testing of this - // feature is also possible using the simulator - // See: http://support.hockeyapp.net/discussions/problems/2306-integrating-hockeyapp-with-test-bundle-target-i386-issues - // http://support.hockeyapp.net/discussions/problems/4113-linking-hockeysdk-to-test-bundle-target -#if !TARGET_IPHONE_SIMULATOR - const uint8_t *command = (const uint8_t *)(&_mh_execute_header + 1); - for (uint32_t idx = 0; idx < _mh_execute_header.ncmds; ++idx) { - const struct load_command *load_command = (const struct load_command *)command; - if (load_command->cmd == LC_UUID) { - const struct uuid_command *uuid_command = (const struct uuid_command *)command; - const uint8_t *uuid = uuid_command->uuid; + const struct mach_header *executableHeader = NULL; + for (uint32_t i = 0; i < _dyld_image_count(); i++) { + const struct mach_header *header = _dyld_get_image_header(i); + if (header->filetype == MH_EXECUTE) { + executableHeader = header; + break; + } + } + + if (!executableHeader) + return @""; + +#ifdef __LP64__ + uintptr_t cursor = (uintptr_t)executableHeader + sizeof(struct mach_header_64); +#else + uintptr_t cursor = (uintptr_t)executableHeader + sizeof(struct mach_header); +#endif + const struct segment_command *segmentCommand = NULL; + for (uint32_t i = 0; i < executableHeader->ncmds; i++, cursor += segmentCommand->cmdsize) { + segmentCommand = (struct segment_command *)cursor; + if (segmentCommand->cmd == LC_UUID) { + const struct uuid_command *uuidCommand = (const struct uuid_command *)segmentCommand; + const uint8_t *uuid = uuidCommand->uuid; return [[NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", uuid[0], uuid[1], uuid[2], uuid[3], uuid[4], uuid[5], uuid[6], uuid[7], uuid[8], uuid[9], uuid[10], uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]] lowercaseString]; - } else { - command += load_command->cmdsize; } } -#endif + return @""; } diff --git a/Classes/BITStoreUpdateManager.m b/Classes/BITStoreUpdateManager.m index 0536f17830..78a0bcef1d 100644 --- a/Classes/BITStoreUpdateManager.m +++ b/Classes/BITStoreUpdateManager.m @@ -155,7 +155,7 @@ if ([self.userDefaults objectForKey:kBITStoreUpdateLastUUID]) { lastSavedUUID = [self.userDefaults objectForKey:kBITStoreUpdateLastUUID]; - if (lastSavedUUID && ![lastSavedUUID isEqualToString:_currentUUID]) { + if (lastSavedUUID && [lastSavedUUID length] > 0 && ![lastSavedUUID isEqualToString:_currentUUID]) { // the UUIDs don't match, store the new one [self.userDefaults setObject:_currentUUID forKey:kBITStoreUpdateLastUUID]; diff --git a/Support/HockeySDKTests/BITStoreUpdateManagerTests.m b/Support/HockeySDKTests/BITStoreUpdateManagerTests.m index ffff07bfed..897ec761f1 100644 --- a/Support/HockeySDKTests/BITStoreUpdateManagerTests.m +++ b/Support/HockeySDKTests/BITStoreUpdateManagerTests.m @@ -300,7 +300,7 @@ STAssertFalse(result, @"The newer version is being ignored"); } -- (void)testReportedVersionIsNewerThanTHeIgnoredVersion { +- (void)testReportedVersionIsNewerThanTheIgnoredVersion { NSUserDefaults *mockUserDefaults = mock([NSUserDefaults class]); [given([mockUserDefaults objectForKey:@"BITStoreUpdateLastStoreVersion"]) willReturn:@"4.1.1"]; [given([mockUserDefaults objectForKey:@"BITStoreUpdateLastUUID"]) willReturn:@""]; From 2e35437c9c38ffa010fbf853913fdea52cd98612 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Thu, 27 Mar 2014 00:20:15 +0100 Subject: [PATCH 13/19] Improve last commit by removing conditional 64bit compile Again thanks to @0xced :) --- Classes/BITHockeyBaseManager.m | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Classes/BITHockeyBaseManager.m b/Classes/BITHockeyBaseManager.m index c335662942..a81f9cc373 100644 --- a/Classes/BITHockeyBaseManager.m +++ b/Classes/BITHockeyBaseManager.m @@ -145,11 +145,8 @@ if (!executableHeader) return @""; -#ifdef __LP64__ - uintptr_t cursor = (uintptr_t)executableHeader + sizeof(struct mach_header_64); -#else - uintptr_t cursor = (uintptr_t)executableHeader + sizeof(struct mach_header); -#endif + BOOL is64bit = executableHeader->magic == MH_MAGIC_64 || executableHeader->magic == MH_CIGAM_64; + uintptr_t cursor = (uintptr_t)executableHeader + (is64bit ? sizeof(struct mach_header_64) : sizeof(struct mach_header)); const struct segment_command *segmentCommand = NULL; for (uint32_t i = 0; i < executableHeader->ncmds; i++, cursor += segmentCommand->cmdsize) { segmentCommand = (struct segment_command *)cursor; From 0765c93f1b64f7e0a926b56a1950ae8e85b06257 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Thu, 27 Mar 2014 18:59:18 +0100 Subject: [PATCH 14/19] Fix manually calling `checkForUpdate` on `BITUpdateManager` with `updateSetting=BITUpdateCheckManually` not working --- Classes/BITUpdateManager.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Classes/BITUpdateManager.m b/Classes/BITUpdateManager.m index 3df6c72383..597e35a4eb 100644 --- a/Classes/BITUpdateManager.m +++ b/Classes/BITUpdateManager.m @@ -669,7 +669,7 @@ typedef NS_ENUM(NSInteger, BITUpdateAlertViewTag) { self.checkInProgress = YES; // do we need to update? - if (![self checkForTracker] && ![self shouldCheckForUpdates] && !_currentHockeyViewController) { + if (![self checkForTracker] && !_currentHockeyViewController && ![self shouldCheckForUpdates] && _updateSetting != BITUpdateCheckManually) { BITHockeyLog(@"INFO: Update not needed right now"); self.checkInProgress = NO; return; From 28f15120a319f600c62c3fbc733d19ed417c8e0a Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Tue, 1 Apr 2014 16:06:32 +0200 Subject: [PATCH 15/19] Fix keychain warning alert showing app on app launch, if keychain is locked This could happen if the app is launched via background fetch right when the device started and before it is unlocked by the user. --- Classes/BITAuthenticator.m | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/Classes/BITAuthenticator.m b/Classes/BITAuthenticator.m index 01a81d30d3..6ccc33bea4 100644 --- a/Classes/BITAuthenticator.m +++ b/Classes/BITAuthenticator.m @@ -108,19 +108,19 @@ static unsigned char kBITPNGEndChunk[4] = {0x49, 0x45, 0x4e, 0x44}; // make sure this is called after startManager so all modules are fully setup if (!_isSetup) { + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(authenticateInstallation) object:nil]; [self performSelector:@selector(authenticateInstallation) withObject:nil afterDelay:0.1]; + } else { + switch ([[UIApplication sharedApplication] applicationState]) { + case UIApplicationStateActive: + [self authenticate]; + break; + case UIApplicationStateBackground: + case UIApplicationStateInactive: + // do nothing, wait for active state + break; + } } - - switch ([[UIApplication sharedApplication] applicationState]) { - case UIApplicationStateActive: - [self authenticate]; - break; - case UIApplicationStateBackground: - case UIApplicationStateInactive: - // do nothing, wait for active state - break; - } - [self registerObservers]; } @@ -156,6 +156,10 @@ static unsigned char kBITPNGEndChunk[4] = {0x49, 0x45, 0x4e, 0x44}; } - (void)alertOnFailureStoringTokenInKeychain { + if ([[UIApplication sharedApplication] applicationState] != UIApplicationStateActive) { + return; + } + UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:BITHockeyLocalizedString(@"HockeyAuthenticationViewControllerStorageError") delegate:self From fa14aec66eac92f0b4e7209a4756df1306eb4c90 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Fri, 4 Apr 2014 13:14:35 +0200 Subject: [PATCH 16/19] Remove the CISimple specific part of the framework build script --- Support/HockeySDK.xcodeproj/project.pbxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Support/HockeySDK.xcodeproj/project.pbxproj b/Support/HockeySDK.xcodeproj/project.pbxproj index f01693d4d5..efd12187f7 100644 --- a/Support/HockeySDK.xcodeproj/project.pbxproj +++ b/Support/HockeySDK.xcodeproj/project.pbxproj @@ -839,7 +839,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Sets the target folders and the final framework product.\nFMK_NAME=HockeySDK\nFMK_VERSION=A\nFMK_RESOURCE_BUNDLE=HockeySDKResources\n\n# Documentation\nHOCKEYSDK_DOCSET_VERSION_NAME=\"de.bitstadium.${HOCKEYSDK_DOCSET_NAME}-${VERSION_STRING}\"\n\n# Install dir will be the final output to the framework.\n# The following line create it in the root folder of the current project.\nPRODUCTS_DIR=${SRCROOT}/../Products\nPLCR_DIR=${SRCROOT}/../Vendor/CrashReporter.framework\nZIP_FOLDER=HockeySDK-iOS\nTEMP_DIR=${PRODUCTS_DIR}/${ZIP_FOLDER}\nINSTALL_DIR=${TEMP_DIR}/${FMK_NAME}.framework\n\n# Working dir will be deleted after the framework creation.\nWRK_DIR=build\nDEVICE_DIR=${WRK_DIR}/Release-iphoneos\nSIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator\nHEADERS_DIR=${WRK_DIR}/Release-iphoneos/usr/local/include\n\n# Building both architectures.\nxcodebuild -project \"HockeySDK.xcodeproj\" -configuration \"Release\" -target \"${FMK_NAME}\" -sdk iphoneos\nxcodebuild -project \"HockeySDK.xcodeproj\" -configuration \"Release\" -target \"${FMK_NAME}\" -sdk iphonesimulator\n\n# Cleaning the oldest.\nif [ -d \"${TEMP_DIR}\" ]\nthen\nrm -rf \"${TEMP_DIR}\"\nfi\n\n# Creates and renews the final product folder.\nmkdir -p \"${INSTALL_DIR}\"\nmkdir -p \"${INSTALL_DIR}/Versions\"\nmkdir -p \"${INSTALL_DIR}/Versions/${FMK_VERSION}\"\nmkdir -p \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources\"\nmkdir -p \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Headers\"\n\n# Creates the internal links.\n# It MUST uses relative path, otherwise will not work when the folder is copied/moved.\nln -s \"${FMK_VERSION}\" \"${INSTALL_DIR}/Versions/Current\"\nln -s \"Versions/Current/Headers\" \"${INSTALL_DIR}/Headers\"\nln -s \"Versions/Current/Resources\" \"${INSTALL_DIR}/Resources\"\nln -s \"Versions/Current/${FMK_NAME}\" \"${INSTALL_DIR}/${FMK_NAME}\"\n\n# Copies the headers and resources files to the final product folder.\ncp -R \"${SRCROOT}/build/Release-iphoneos/include/HockeySDK/\" \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Headers/\"\ncp -R \"${PLCR_DIR}/Versions/A/Headers/\" \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Headers/\"\ncp -R \"${DEVICE_DIR}/${FMK_RESOURCE_BUNDLE}.bundle\" \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources/\"\ncp -f \"${SRCROOT}/${FMK_NAME}.xcconfig\" \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources/\"\n\n# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.\nlipo -create \"${DEVICE_DIR}/lib${FMK_NAME}.a\" \"${SIMULATOR_DIR}/lib${FMK_NAME}.a\" -output \"${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}\"\n\n# Combine the CrashReporter static library into a new Hockey static library file if they are not already present and copy the public headers too\nif [ -z $(otool -L \"${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}\" | grep 'libCrashReporter') ]\nthen\nlibtool -static -o \"${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}\" \"${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}\" \"${SRCROOT}/../Vendor/CrashReporter.framework/Versions/A/CrashReporter\"\nfi\n\nrm -r \"${WRK_DIR}\"\n\n# build embeddedframework folder and move framework into it\nmkdir \"${INSTALL_DIR}/../${FMK_NAME}.embeddedframework\"\nmv \"${INSTALL_DIR}\" \"${INSTALL_DIR}/../${FMK_NAME}.embeddedframework/${FMK_NAME}.framework\"\n\n# link Resources\nNEW_INSTALL_DIR=${TEMP_DIR}/${FMK_NAME}.embeddedframework\nmkdir \"${NEW_INSTALL_DIR}/Resources\"\nln -s \"../${FMK_NAME}.framework/Resources/${FMK_RESOURCE_BUNDLE}.bundle\" \"${NEW_INSTALL_DIR}/Resources/${FMK_RESOURCE_BUNDLE}.bundle\"\nln -s \"../${FMK_NAME}.framework/Resources/${FMK_NAME}.xcconfig\" \"${NEW_INSTALL_DIR}/Resources/${FMK_NAME}.xcconfig\"\n\n# copy license, changelog, documentation, integration json\ncp -f \"${SRCROOT}/../Docs/Changelog-template.md\" \"${TEMP_DIR}/CHANGELOG\"\ncp -f \"${SRCROOT}/../Docs/Guide-Installation-Setup-template.md\" \"${TEMP_DIR}/README.md\"\ncp -f \"${SRCROOT}/../LICENSE\" \"${TEMP_DIR}\"\nmkdir \"${TEMP_DIR}/${HOCKEYSDK_DOCSET_VERSION_NAME}.docset\"\ncp -R \"${SRCROOT}/../documentation/docset/Contents\" \"${TEMP_DIR}/${HOCKEYSDK_DOCSET_VERSION_NAME}.docset\"\n\n# build zip\ncd \"${PRODUCTS_DIR}\"\nrm -f \"${FMK_NAME}-iOS-${VERSION_STRING}.zip\"\nzip -yr \"${FMK_NAME}-iOS-${VERSION_STRING}.zip\" \"${ZIP_FOLDER}\" -x \\*/.*\n\n#copy to output dir on cisimple\nif [ $CISIMPLE ]; then\n if [ ! -d \"${CONFIGURATION_BUILD_DIR}\" ]; then\n mkdir \"${CONFIGURATION_BUILD_DIR}\"\n fi\n cd \"${PRODUCTS_DIR}\"\n cp \"${FMK_NAME}-iOS-${VERSION_STRING}.zip\" \"${CONFIGURATION_BUILD_DIR}/${FMK_NAME}-iOS-${VERSION_STRING}.zip\"\nfi"; + shellScript = "# Sets the target folders and the final framework product.\nFMK_NAME=HockeySDK\nFMK_VERSION=A\nFMK_RESOURCE_BUNDLE=HockeySDKResources\n\n# Documentation\nHOCKEYSDK_DOCSET_VERSION_NAME=\"de.bitstadium.${HOCKEYSDK_DOCSET_NAME}-${VERSION_STRING}\"\n\n# Install dir will be the final output to the framework.\n# The following line create it in the root folder of the current project.\nPRODUCTS_DIR=${SRCROOT}/../Products\nPLCR_DIR=${SRCROOT}/../Vendor/CrashReporter.framework\nZIP_FOLDER=HockeySDK-iOS\nTEMP_DIR=${PRODUCTS_DIR}/${ZIP_FOLDER}\nINSTALL_DIR=${TEMP_DIR}/${FMK_NAME}.framework\n\n# Working dir will be deleted after the framework creation.\nWRK_DIR=build\nDEVICE_DIR=${WRK_DIR}/Release-iphoneos\nSIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator\nHEADERS_DIR=${WRK_DIR}/Release-iphoneos/usr/local/include\n\n# Building both architectures.\nxcodebuild -project \"HockeySDK.xcodeproj\" -configuration \"Release\" -target \"${FMK_NAME}\" -sdk iphoneos\nxcodebuild -project \"HockeySDK.xcodeproj\" -configuration \"Release\" -target \"${FMK_NAME}\" -sdk iphonesimulator\n\n# Cleaning the oldest.\nif [ -d \"${TEMP_DIR}\" ]\nthen\nrm -rf \"${TEMP_DIR}\"\nfi\n\n# Creates and renews the final product folder.\nmkdir -p \"${INSTALL_DIR}\"\nmkdir -p \"${INSTALL_DIR}/Versions\"\nmkdir -p \"${INSTALL_DIR}/Versions/${FMK_VERSION}\"\nmkdir -p \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources\"\nmkdir -p \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Headers\"\n\n# Creates the internal links.\n# It MUST uses relative path, otherwise will not work when the folder is copied/moved.\nln -s \"${FMK_VERSION}\" \"${INSTALL_DIR}/Versions/Current\"\nln -s \"Versions/Current/Headers\" \"${INSTALL_DIR}/Headers\"\nln -s \"Versions/Current/Resources\" \"${INSTALL_DIR}/Resources\"\nln -s \"Versions/Current/${FMK_NAME}\" \"${INSTALL_DIR}/${FMK_NAME}\"\n\n# Copies the headers and resources files to the final product folder.\ncp -R \"${SRCROOT}/build/Release-iphoneos/include/HockeySDK/\" \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Headers/\"\ncp -R \"${PLCR_DIR}/Versions/A/Headers/\" \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Headers/\"\ncp -R \"${DEVICE_DIR}/${FMK_RESOURCE_BUNDLE}.bundle\" \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources/\"\ncp -f \"${SRCROOT}/${FMK_NAME}.xcconfig\" \"${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources/\"\n\n# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.\nlipo -create \"${DEVICE_DIR}/lib${FMK_NAME}.a\" \"${SIMULATOR_DIR}/lib${FMK_NAME}.a\" -output \"${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}\"\n\n# Combine the CrashReporter static library into a new Hockey static library file if they are not already present and copy the public headers too\nif [ -z $(otool -L \"${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}\" | grep 'libCrashReporter') ]\nthen\nlibtool -static -o \"${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}\" \"${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}\" \"${SRCROOT}/../Vendor/CrashReporter.framework/Versions/A/CrashReporter\"\nfi\n\nrm -r \"${WRK_DIR}\"\n\n# build embeddedframework folder and move framework into it\nmkdir \"${INSTALL_DIR}/../${FMK_NAME}.embeddedframework\"\nmv \"${INSTALL_DIR}\" \"${INSTALL_DIR}/../${FMK_NAME}.embeddedframework/${FMK_NAME}.framework\"\n\n# link Resources\nNEW_INSTALL_DIR=${TEMP_DIR}/${FMK_NAME}.embeddedframework\nmkdir \"${NEW_INSTALL_DIR}/Resources\"\nln -s \"../${FMK_NAME}.framework/Resources/${FMK_RESOURCE_BUNDLE}.bundle\" \"${NEW_INSTALL_DIR}/Resources/${FMK_RESOURCE_BUNDLE}.bundle\"\nln -s \"../${FMK_NAME}.framework/Resources/${FMK_NAME}.xcconfig\" \"${NEW_INSTALL_DIR}/Resources/${FMK_NAME}.xcconfig\"\n\n# copy license, changelog, documentation, integration json\ncp -f \"${SRCROOT}/../Docs/Changelog-template.md\" \"${TEMP_DIR}/CHANGELOG\"\ncp -f \"${SRCROOT}/../Docs/Guide-Installation-Setup-template.md\" \"${TEMP_DIR}/README.md\"\ncp -f \"${SRCROOT}/../LICENSE\" \"${TEMP_DIR}\"\nmkdir \"${TEMP_DIR}/${HOCKEYSDK_DOCSET_VERSION_NAME}.docset\"\ncp -R \"${SRCROOT}/../documentation/docset/Contents\" \"${TEMP_DIR}/${HOCKEYSDK_DOCSET_VERSION_NAME}.docset\"\n\n# build zip\ncd \"${PRODUCTS_DIR}\"\nrm -f \"${FMK_NAME}-iOS-${VERSION_STRING}.zip\"\nzip -yr \"${FMK_NAME}-iOS-${VERSION_STRING}.zip\" \"${ZIP_FOLDER}\" -x \\*/.*\n"; }; 1E8E66B215BC3D8200632A2E /* ShellScript */ = { isa = PBXShellScriptBuildPhase; From e62aa1c6e40b8e96029c1c89608f6abb8b260f99 Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Sat, 12 Apr 2014 22:03:37 +0200 Subject: [PATCH 17/19] Integrate PLCrashReporter 1.2 RC 5 --- .../Versions/A/CrashReporter | Bin 1436196 -> 1450764 bytes .../A/Headers/PLCrashReportProcessInfo.h | 4 ++-- .../Versions/A/Resources/Info.plist | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Vendor/CrashReporter.framework/Versions/A/CrashReporter b/Vendor/CrashReporter.framework/Versions/A/CrashReporter index ef9fc8e724940cfc1833820ebe11b2a18166eacc..cf07c79088da1da2034e35c7daa022908184fc1f 100644 GIT binary patch literal 1450764 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 z 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 z z%B&^S7cid3Z}L15ZwK{a^(Wr$x~z+}!32(!?I`Q&v zWw$?Vz5iR;es{6`2YB~>Ypq}LE!PcM6V_g>$2gmq*FL-+t>hq$-PU4M*XfH6?xW26!T-YRM7-x6+(&&J#m~rRIj^2@ zT;A;9ye1cG9O8NMBCd;4&VvPbj$Euw;VGC33NH@kMQ)@m$k+3U_P!9-sIE`8@SIS$`Bh zPcGK_;&bG>?zXf2A-Ih^xDLf}7M+(3)&tbX7~ga158+i&FIIozO4seCF3on%v)#RT zCDe&kCyu&qll9qeX16nMov}{+X7)VP_#fg;{^r_wC?0d&P3w>~VZC5IXN_A=SnI8a z+0Fpt+t2IABY20{j#%RrA8=h2btCvq)K%kEQYTiOxYTt!tXoi>hfC-9`-#j``G4he z=X2Z!&hhsXJ#XS!@-p}!`4f1CT&#Y@De`K#jeG(gCl@OhkCDeX?(H0xNqB@@tX!NV zuc5w!_0#Y$xmdY)kbH*vO;5R>!UN=D<>Fozod+G(CTl(Gh1vgp=A#j>j`hS^Ph8`= z{nmZfGV3<$7Hin!xW_m);)T|YL%jO2?0!@(@j4b>{@B`ni040+9p_`~L+d2#^)jy8 zykC5PcbE0V8mIV<>qf0Z)NB5(FpleZ*QgKXQ+(BR{nj4qdDhc$xyAS{;GJW=;5doT zx-M=#MtueK52!zmca(au#w9-Dxl(L8l6jH`ojF5*3=PRxI=ilcqC{D_BKcZIq}>hv7y8eSiDV*Yzo+{>c=E>NfI?<(8v#yd}4a6O7!U3bJ< zgX%ip#d^A~S6HtMZzt;o*SUC`>o-~7{3xH-Q@`^W^Yu~Y=c9aH@BI@mvS>VysjFq2 zCwL$HI^GO*V*YzoJngzk>Y}V)OMg>%6V!=SCr-QWmh~p}#pEZbAH};)y;$|)A=h2C z_EBHOcCYIBBHl&n#i|!~yY9T|xPC@;9pIf)o$n{&v#vWuU4-pjWBaG^PEsdUf8rCa zJ4RiY?ewwTCcJv;#Hth5xh_Us8U7>c4&xo5POLide%F;#SByVLT_xUb>cpxO?{eJ^ z>WUc8Q^vOwZ##8j)rq&cZi_XK`U3iSLBE^va;O)pUcA9|&(HGv6zFFQ?;l>A<^Anh zexHK-6+dIqabKWL?^|2wZxL^vy5N1Rc-D0ft@o@c)+?aD8v0M;jkBIu;}DOzZrFN_ zdd=ryp3e>8U8O#lU-2dKeAYijf0yBlW<N*X^;E zP@krsZu;Ggw}X1I>c!h#x0SkF`gxsxx8ZG}POLidX4mCV7sh{+x{Y`ns1vJB{Nf|o z`C0x5uOHaXDBFFG_w*yYe(-k1Z@6xjx&i##)IGtQp-!y+#P?j6w%)SdWW7?Zv(vhs z@vgI;SnG+0T-Q%sBmJf5KY`aromh3^i>~Xkwp&lLUWolV$NTIvc&AuTto6hvU3bj= zKd1lWct_XuFFxeD8tYzbDeLKdYMTDb@Jd)Oc;70Hx^A1bfch2cXQ?m5%cowf@rd(W z_o9vS68|Z68}OdDabCJkyxf*OK8w^9Ghd|~$0fW4>cr|#Jny<0>I!(CxSRJ!kMX9d z6RS=)!J*lzd^LtD|lazl*whyjtqSsuRatx1YLR_NR)^pK9N@cEQ@0my7jcpGL7Z}HV#jdk~v%Lb2 z?<8KD^~Bn~_!hagca`nmhDXVR?TfFo==cpx;uIny2Sy zxPRhrpzg&PuE#UnKV2tYBCln?>e$Z}c#&MJ?TBAzQ9pCmhw6{(aR=`kAK^`@KVP5X z33832k?l>wY4TuP;+y0J8`=5i7JK79Ug|g2=3jiBe1h%ev!5gIAh}rE7bnQ|yrGDE z815$zockbU+fAL0?>+Ww4_*m%!SNPHwLR90Fs@R#Sle?y;%zJ%SD`ge{c(JkcpsXN zm!tlCyu~YgzOc;S>sw}ft9+iY%;yVYM)swpgecb@wCF;cLPkfPloPM^_&lR|v zT&!H&L7w@(^*w&CG2BibeE(Wpe8KZ%-E@KTiS>8=XI`J;ZM?wwgoT?0za?u z9#AJ%KjQo3t@L|^?L34h$i>RVY4Xf|vfq<%iagkFamOdK+iCtJ_m#8R_y4Eynm);W z1y(=eI&z)I&;BE?XW>KS!Feq{$fEI9S<9&JXBkbjAMx|9Y(JsbnP>RTuC;!|&&V~-L-X99ySV?72jdnm zuxLAT)b%mGB;%RKo25>y?TBYwch7nUUE$~NxVF!DDtX_W!W+}}Jw9>L_1CEDrN7td ze+Vx@oml;g`&`#UovzCg>U#0Is0*%Bai{CfQm5;3FLmee&QKRzr{YttYoabj-5mSh zjMqq=SlbmJa$Oa5#fK#AW0KacaJ`h1H60Gi`B1ql)RDq`T)-v$KjjgV&&oli_Vja)(-1w*3*6H zF8h53?-c6=_a$+&>l&$RVSBk;r%iYb)QQ!dyFi%{2&f0()*ctzBSRVTjBHS*)^*LAKl{rhZpMtI$TH^g-&R-Jf& zMc>Peb!Y4Mb!Y2$Q@7XrN9%C$7!$z7emUy5Q%AxQ={)>!*V2un|5) zE>=I{32!Ht?M%Yyb=wiokZWA4+y`gjY4Tv4;w5tJ*8=%6yhtAGr?|6+_f_Oa$-8^F z@AvS&%KITcL%s-~AU_MYkc%}wah!YsZYFPqo5{t>#Z4@_K8{c~kAIH3qj-m@6RS>q z$aODMmt?+L{y*Kd}sS~SCyx@M4PnbV=eqBG}ITr2TL+Z5O8`-}{cvI8`^B|sd z-EHdhJ(z=x`wre1b;0*y#3SUImty)Ehm+*NJc;u^oy{k?9~H0GX4!6oFu@f25*>-Z0nSHTtJ!TBH_XDMQT$536z!{)2jKJ@+g=TY4k z+ELZT?LVv)O>$@TC4EL`XFOL%}>tX!O6$=uJWOK?BTVLO-bx~LPY zPTZ;OuwLX#+#ld`+K&4XpJ7oyjp_%#l)7fT2KD1QaXonhPQZ2KVr@rUOP*x> zRgd}k0LRG1%Egi1?0glV+TJSl!}NcR{o8=ILcLh^;$?EpSB&lH%iT}OgZUFLkZZnf zGk?$Mf1W&;KXEfP^!7>vs_j+xGCul0%JvT8RrNAHZ%U=qvC3-j_n}{SenL-oj@?uZgw4;yKsd zx88OAFH%2=cY9sEc+_=0)|1v^)*ENPdcMf_#qc7mC)RevOYDa@O}@;y7uk;>7vCcv zBcCUqg71)vwZ3?aMf){`>gVny>f6X?sqe?@psMQMS#zv| z)=SoKU$*{r^L_IU>yzKf<}KEkwamKcy3Whlx>oBkYqfQo^@Z2F_q*BpL)H@OL)T4Q z4t-@8$L~m-dBRIy4!tJM%o9B3y6e{4{n`E=TNkYNKcDq4TTff}TQ^#Zu4L>&;zL2d8e}U&OuW?_<;qL|Ey`Voa|Gg@H=K5K-TY|rzx+i!KsS~SCyfm2Y z?};^OyaVR>oIGMwbZ)7dheRov!1sevF^9-vM&FAwtmpsZar=- zu)Y}ZeppAXm#iJuI%}1+*qU!$^!$!n&s$Gfo0#|C;JSNj6X!Et;}=4&i8Y_%2J(-? z-%s8QA0Zbj7jGHLjx#*O?_@yhqfDRVRMve!9q?!1venBfiU`enzOPWxY$(-NH*!Csse=VfQmi zJ_hsqUjA`B;>#@Rr<=N0SnpfZ_2ONiPON^!=iSdN`9=8bx_-oGSk%u&_ECD?+F%{} zLvP1=)*81SwH~roTJxe)n7Rtg~M4DXh9lRQI3J;q3K%>$7|= zfOma(?Rpl+znJZ>(OO}>bUo{zwjQ_ES@&D_TBFuCy*@uDGxPG$dL7lcM!%HxuUOlx z$E_9C9P5PpoiI;ZJCmWz_pA4#n*Z`7&)sPAGW5niba#^HZm5o@csq;g3aRU&eS*4e z=w|A~suM4MDf|4A*S9yGv8{zKtv$aKZ@-c4XNz^C^#$vy|5fwpn^|tM9Vo%M;$re; z)=Se*3A~M5tbW7=EP6i{qE7F>a_A=qZ}sNd`!Vs#O+Uu8)Pr#{l>x*}eupb}ebE-+ck2JzOj<6rF z_E#JsU#0&k@+e$HE>`1>hq~bSh*#N`=52xTX#TfR_Y`lQ@rc!* zc#b^DyrsU*&u{n66OyfYd%tUB>&jfeGi($6{gl*Z$J#3xxa z?qk$xzK6cba}T_F>Vo+f*O6;~``G^mxRyNFe{sL_I`RbEw=NeClWRU}$dm9Oc`(1? z(m&$+6XXxR$>%YD#QWSo;`rIg*VxY-yf+y~aD2pzj79T0L!FMtF6tiRO;Z;fAMq6V2=h37o98(2J#w+OCr;2; z=K5eyK1Uw(BRS0Qb^9+Kb{->7!h`E_@i@8Wvx+ggilgK3*>MV%3X7EPJVY`nynoE|KG%sKv#4&8x?cPgbyIi~)QQ!fIK{Gux?$=%@TaIt;tf(KR-HJ( z@)OjZrLG14DRt-Y&QK>-o%j?>Id#X-2wIKmJlV&3Ixp^z@%>A@y{s3UC*nOU^zzCs z>Kf^9*T3iI2;NTW#OhxhQ7!##w62V1Ustq#g69x;%cEr0=TUg+ZUEv~0$TwlTG zsN(ip922&49M$`_!{{%fG4$uqm(j!M9&{I4dW+9V-obODU*NeRUdb&!CxNv+@pf|k zp3JkI+)v?c&Y;x?Opjwb{>zTKL)>S&PTPqjb90U<^A;kbBB2!i?QAU(L?jR#fw~3DtG;ocWmNe0cJw%s>0Q%zTK|uXsuG z#q&h2-y19Ng67N57sc}|>gO?azp?41&}ZJq`x?AQ)QQ!P_&&KlZ{wbHV;a6k9(?{L zzDus(6V36z@c_OTX;~jwq$i>RVz2rKd zPjP>_40n?U=eM}W^K{O724(G6TE5EbEas(^d1}Qw`Bh$Ld7i|_S#)1IOr4G!f7k0q zJzk8u;5dqFSTz3?)M>l-{*3#T)}<~Ohj{Zizw?i}obhab&F8s(@HULE^(S7XR`aq< zfBJq^1)pcF;4RT#@O>-sqU&a*=CzM`oW#3Bomh3^ z+vNKFDf`&oJ@^)R@cUH6*I6{K0qTb7{{`FQHCE^fbz=1+p8HxT^j_*((Gs*AJ&tZc z--F&_A9eljW*&4t^Y^!I?8V!~JOt;rxcuwc`_YcCXJ2+4nJiDDe9_N0O=eT%JZ?7E>@to@(y6y^f zkMJI>s}rYPcguCRsJo3fx~@(<%%c0L3pQFFL-?=K1r_q z+ROEH20lR^?5DVqMW6p4r7rwYzJI~{lw){Ds1xh>h!3&ozPAfpzmDP^V4lV5SKOA$-d|6maq16Rqp0qOMXBsOA3n$DW_X3E zwRsjV(TDE8Z?K&k+;6}BbG%N$d!6lw`R`Tn1i9|F59#MVoF)(Mzv6Ln-A7-L-+{-- zgZrv@j&134*t|R0`@r)*$?6-{d9;#z)ZA=6W<6}(XDziBS$ET~eox_``|mX0M|B;n z+8_NU-&e}#{Z$pugTBeHIv zHSkUHOK>;2Sh@H-c{O~C`~rNAT&!GthP(>CLw*)MO)ge0K1p5)-y=T-pCA`27at?9 zfFF<_hmVqrm5UFPm&1?9kHCk>#mdD8$jjg-DRWQTRFePIx=HSh;vBc`>}RV56IsR|0wxG_&&KKSy^^E5!`3d+KxmdaQ2>HKy+e@MUw2%88e3)FU zTzruHKhobPS^p4xfLyFx{4)7}fImyVAKphURxaK{J`3~j%iP!t?q;5W#{%EeE})9@qm*Wt(HV&&q8vwaW;tgp# zuPLI&!gcaSi!H_#Al*t|k{N7nhL#3H(X&QaDO3RxU1_%>I0N!8MQj z%0uo8d6m4cY~kN)!+XGeL#%r7ee$KBZPeQ~GPZ)E)*xMSV=;&!ipjrF_XGwaqDZ~RvFb>N0?WnZ7}`U3Yi zycepAXSXAMPOV-qF412Zeg$>Qc#G7DH6HQnEdQLkIoHonuh*R=)X(BQpgwpVDsH?V z%DjHud!PF=uUqDLy;O;}=RWsmSpABlj+?;3StZBN|GqT_Nw zb@a#Qo;SMj&a2MHMSPA$&k@?t2DAp%^MSprr}z7ltj9Cz&>q$c-v5htk&m+U@QSGmj-NQMpNzeL@3yh7^4suOQ^U5L77&ff;^bGdk{%&%B= z;uYq9jP;WA6NZ<`#mdD?=I{(6_Vm6-hFm-)6o!F2Q_>2U&Fd64Ysadakfvc>UjAn=f&n>)NPGb3FFxzJk|6 zomkrw$6eP*U7T@j;5eSZYoJc7I&nR@=7sO~+-QR9$b)$j$5^O-jjPX}K$nHn^1K$rm&;0;$D5^2to;yAv%JE7Jkd6|?q?Za zBYFEU=P%w2;}ff1JjJ5#A*HF)bGhpu;Qb8VZR&#ObmAe+2iM1WuJ7ycHO+^w7x88C zGPs940be2)Ydhj@@>2LR`9=5wxmdZloxB9TN`4+bLoQY>j}<-^u=b9HF0TynWwU`}ru|ORn|Ka9sDpd&q-+ z#JgEEza`XZK1-S3QoJa2!TgFNESlfV)M-ACGQV5#@~8{uSG?-|=lc{lLh#DE{TG){ zXV1&h>FjwK>gRbrUdi;@c`1&%E{{5$hu1luHsgh<3(iY%$aTw%OV`sWe*QdXJ4=i! zxW2@T^GMuAuJc0qdAOB4I8Vea1k$H{~9P#pb>>^w&P zB0G=yzsvWn@rwRpZ63viu3Pmy-sU{nfVaGE9>q(Z$9d{BZ|9irH}K}D3+7QgORjl~ zu)PI%hCG-@@jVvJW12e6TjvnpPr$oPT`-U0QI=n29$Tr?yzxDs8)xz2)CKb>ZYI~f zDL)N2kq7fAZY0;d4U@OQ4dlT*itEWWZ{y@G@L}>`9>tZ+pX%p1-c`&)1@jlIFOHFG zdo$#5<}AMzA=3*4;Z1M4~#5B??B7W2@BR-$MBlILmU zeAnwn2VU!6@;uG;;*%`;`BY^svld&oSaVVReb>Hj|9lcp zl21B+0#A^OH9m2gd!_IqGUTZ|?mL*8^S~ zbz;?tTgfZ5-<&V)aGYGMT-?l}evVO>WWD{Dd7g-Olsd8M#7A7WkGdAlzg^7Z%XsC~ ziB%^qBiH9$P23ME;9caw=U?KTEZSbgx|RB0+Wb=J$18Xah_{7$vHBBlBoA}lEYV*+ zoI@^FF5W<{&%H(&_a^uS=Rxo}n0SSALEBs8d}(C8lU%3I@D`{Os~_<^`2gcivYjP( zj$Eu#eva?S;q9SLtnr9TSoHI32X(z1@8i7x+=;iHItcRp@b1s7eO@NMO|GARH-DASci~&)!OuhSFuCrJhZyfDe2qM~ zUy84i>vOv2To*UtE9AlFcH&FqoxJ{D=;M3%@I`X5_CwrFuGguT>Hjj^Nglke7oTO( z{>76I8F!fDyb8zPFz8* z>qz}n!F$Mq>q@+vMg5der|ak4dwIQq7o{$^p2S7ux_%zh&vv+wJh-031?0MZ2AG!! zoKGHHPvVU%+Rh8^r@DUXxj%*Ro^wA9t|#%EL?GxFei63=oU)pc^0I-U0` z^fQTfhq~Z85Z@-(b@MXgxd-1O53VEe1m~Cf8Rfjx^NUK3*Erry&dcC=hWI+U`rXKQ zZoxz3!FI&gShQc4snhd|QrI+pDZ~zA?kF!h3PMh_nhqp z*Ppn`b>-B}avtb9+K0EB{=_=3#TUq{8UHBHnY!T)arJbuQBf9c=hYXEv_S<Ii+l`Dk_Y1y zZ=L1m0{JfTZL|Cwo8{+%$0^>-qVr+{bxDsi2XB>r#2SZqh3(X^UN!xM;AiAw<>Cdl zrTv|zPW!u?{e6TtMV(l6;z{x;_HUVapMmd^iE4)a`!Xbzwj!l3$7b+1-a%Um;I`O%h%11xSd@4ndbRI z2i!&;?6nF+k;of!Yi_fxSTNpPT6KIBld0ol z}Ts`?|S z>Rz_)MpeHBRee9I@pf4!tYg+iRDWN(<}KNNIkuU8cUyTaoavwMBxL$srC$9`!5a5H zRQ+E3S_`cC)^b$+lvzuy zEzaZCW^0qR(b{0Gx7Jx}tubpAs_j%-E37&{zZZW7%|)lIeDsp>Q>gZD+&X3*v94NI ztV`BKYo0dBAN`Xb(h5}DDMPj05^J&Zh_%RCXiZr4s~Xf#Gpc@?Q1uhDzhr;Gs`Eax zf6k|^Q`Sjq2?tvJMy(NRk+r~@Z_Txatu@vvYlXGU+Je~SYaXHc z30qaHewLjtSr@IkKGk1b|Km@!HDXPn>Tk?Cf~vnk=L6P+wclFsJ=wZd^R%@FU;R~C zD_vKHs-)CfVvSlmtqs;0RQ*g@CsBkHlV7nmC2u&wZ>X)9kjMvS5P&Vtc$4nnUl$%S?i2-+S>oNY+VPcx_WDw zHP1SYYL!Xr1gieWosU^ZtV!z(KM>S!(%NZlu$Ei%tqWc+O6S^M#9D-Ed-?hwfAXxk z*06QN+GTA+)oe6ZSi^bQ{#RjbX9ZQX=zPICZ=JJNvYxhIXzg)7oz@OirLE3etZ{3z zb@lDpx_MOnO`FHf!{%Odhq>8YZ>}F;=2?5Joz`}1t2J(IvNl*#sE*eds{Kh?2b~XC6V`rfBtN@< z1=d{a>N~Rjl6BrXW1Y07tRvPzYrnO}+F@`t;?0ytmi>w9KJZspx>iu7~E?VcUv({DqspYhcn7Kl2K0Yj8c|SYBE}AEwV+j4w+K=1U>v8#dJ+5&!+HbI5 zZ@W`>ppG+HbwjkgxX{^7TGL z{=EG;`?L0E>`&X*a|YE<+MlqWwx6=E_dn`?%>Ib|r2S$0gZ2mPC+zpz@3Y@)zsG); z{Z9KG_S@~Z*>APqVn1%b*?yD#M*9u+>+RRsueBeuUt_=8ewF=7`!nI}{_Fjf=4%Sg z-1qFK?2p?|+8?&B_i?J%`!>yEpZ#9@o%TEIx7%;AulJ4GZnOOc`}Owg?AO@W`%BeV z*)O+WX1~;avHghsBK!IF^*&eq&mDUPtx%L0+{b#Z3BGw{n zp|!x8Z_TsjTEo`Npc%)i2E(5f>#}vp+D5&uyB2G+wF%8!fBa9^R}re?R)`XX_5M|U zzWqG=x%R{M)rsm?`CsPxMb*zTDu2no-UrKHus?5q&i<@@y&qRU)AsegoIl}7`xExl z_EYx9?dyFyf5Id7llF)0585BFpRnI=zt4WJ{T};W_B-wCeZJ;3it2t=jPfTOvreMg z54|tfey34Z4X5mn+aI$(Vn1nL&k0mNXn(+d!oHpxsDC{-Q2%;vp!y#BUG_Weci3;Y z-)6tnevAFM{Zcwrza{)n{YFt;-$nNI{6T(!{apKD`&wD`%kFo{{Vt;N=j_kgpRwP} zdOCH3=N*ma25Y^w&RT1YS!=A-Rz2U)aq6;mSldxH86LFid57k63FS|Ck^gD`7VOX4 zpR+$}f5!f_{VDsC_9yJ?xeCp2A)1*tRP&H)UoUv&>rJEl3RLq@Zq@S{aj8|$VYFZM zRy~Ii>p6_}tJSLKDcUbRPto@EJVo1?vOj5m!hYI*%Ko_hG5aI-llF)0>p745AF!XW z-*3OqehJS_R2M}xj$%~%TWG()e!l&%{gC}t`ceIo`_=O!^|N3Xd8nf0| ztF2YmN~@kPX&&3GE!H@ydF`_n@El0x4pFC9K$h9A~uMZmJud<%%S5Vb2qw<&R zFWT30CHeFA=j_kgpRqq}f6Bg|cd7pg`)T_r`{VYv@>!>+Q$v*VwPNUtwR*%~W4zKWe|&e#HJHs^c|bO+ILskJ+!WUv0n2zMfmEp9=fs_RH*-+Sl_y)g{dRsOF`| zewTec@08zWU(Y)=K0WW0A3SHAfHgm9Ys#wUkMhT?dQO=+kF4|7IW%(~@jO%7gKA#7 zP>r(_)pqrKRDQetHv6siTkOZ}>p80Go9s8*Z?LcDtLnebey#nO{Tln#_VpZA^_BK3 z?3dfu^I46v)P9NmsC_*z)%to~s=5MH^O$QtY(Hdw+3PQP{Y6yubM|NL&)A=|KVd&@ zf6V@f{iOW?`w9E~_8Zy0j$80Nw%%N44W1vz%>VOq)(UI6^?!b@+=Z|6qQlx| zZAEoH=sB;BV?V0->q9kvdM+#;HjkN8Xd(U_s(xp!GpPF0^H%kji)#Has{Zu+RsJe< z@>fv#Wv)Iehn6m*T5k!}dW)#mTd=R^+Vbb@&)T1{KW%@?{-pg0`=xAL>zAPFH;QV1itHEK zFR-uY>#ElSNY!ibnf*s~{?u86=esd;@SL~W+<~g8=f%<%YaG>n_gPm_?f(j@?JlF* z?vnjQ`wRBx?a$etwLfEj+WwUNN&6G_)Am#L$L){Vui-hn#!-!G995|HzubPA{ZjjS zZm;@?eLcTdeZGA?zgIuG_S;a+W2?2r8n-rEo2-r22I~OIP{aM!UTY7kc^$Kc`ND_h zRbTwj_*U^Xjulk?GAe(`{-XT_`}6ka?9bYtv0vhTqp12VMz!CC_6zLi+pj^j-__PC zYo)aX)qXWw8?6nf_N&u6jcWW;sK!5uYWoxR)Am#L$L){VAF-dbKWu-{{;GM!yo_qU z7VOX4pR-@|eT4iev=&(NtyQS@tHN4lEk(6ob=D-R{TfEKUxTRjYruZOe!u-b`@Qyi z?04DkwBKRB-F}<>R{M+Q1@k_Ju6g{rR8euw>b z`)&4H?YG#E+i$ktWWUjVgZ+B@b@prR$L!bGueM)hf5p6PUP3i5^Y-WL&)T1|KWTr$ z{YF>UhLa9gk*I z$D;|&91m3Mb)c#nLsd6|sxFDDZrJ{y{Q>)v<_U8e&CDOF{hPDqVQM>J>ngr@1=V&- z@U`72s_hn|+HS;tk^MsZRjAglM791ns`bZEtv`Zl{iOY2`-Aoe>?iE^+wZgAYrn^S zm;Fxr9roMpx7lyC-(o**zuA71{YLu@_Vai#sB!0_8n-?`B?_;&ZrOE9sQh{RbM|NL zPuZWeKViQ@FE;s8ZY{HxT1%`^Yq2$AZA3NS_10Qz4AuO%pc;Q1)%e@ZohX08gZxkH zCs5Ug|7rGkg;1@xim&xnP#wo*RQ{6vMf(f(=k3qgpS3?@f71_S5!L_DejD zD5`N3qfA}6(0+maeET)1=Cj&bWv#TfpxWPNYm>Fn+JI^vI#KO!2de#TN45O~s`dL( z)h(c^n@3eQhpKMY{*3);`&0HO?N8WG+fUgax1Y}!Y}Icbs(y1(?fpT8e!OOs(=nq()`+#(8nu>KORZ(ra%+XP(pqJ$w$@l<)>>m);epwwZYnGZL&67x6aEI%S=<&RA!ybJlt5f_2flWL>tdSXZqfe?KB@&9&xP z^Q{HeLTiyVVlB2tttHk{Ynip&T4AlUR#~g9HP)E5)>>z+w>DTCtxeWuYuwsmZMC*p z+pQhePHUI7$J%S{v-VpP)&c9Fb=aD;j#$U6U zYs^|}twZ0+`t{}pYooQv+H8$mThK7;wW1r*Hv8>pF5H3s!-h~^r~NMU?f5=E{QqaZw7$m0qK{=mJJ^pfnzwF$ zG#=#|r*e%uA7$N)Y8=W-otL0mKNx?F^D5_+VsedJ+8|~9I#m7FqFO(OYJ4ruo1Hg_ z$s4Vm&f8I~--c@aR#fZvqw2rcd5@U9%bIjP=zIXx`UzC)r%|mxj;jALF*;(MaX#gI z64m+>sMcR}KJR=^Og?K3aeq|*E6$fut-pk7{Q~ECsJ5RgM#I*q^N8~zRO=U_TED`1 zne$RHd5JaVyxMscs`V>Tt>5Up-g%vvyw=+4Jnp<1)%s1S*6(uO;k;c;-eyfW?{nUZ zYW*Hm>yJ1ec0MR3AFxh1PdOh)wf-2Y^=F+=JD(DhPg<9pFF2n^wf-Ec^~2l`b$nKx zub^6g*;?p4AJy^6L$!V`s`X2p7dwxL$&0L&&dZ&bp<2Hb)%vy0Yn)e$$*ZhQ&KsQ9 zqguZX)%tDDTb#$m~@wDXjh zeB3(ce8%}Ss`aN(t-tJi(fNXyeBR1EI&*yZS(KUoReY_#f@=LD=LODLH?ux987*}l zbzY2W{Rpb{_5DE|{|e{jV)8PpzK5th=DY^g`uhH%)^B#+=)6HpuJ18Q+nwwCkUD?# zeMtFnYp?Sz=bfnf??Bc6p!0D8$DNNjPl{Q8*qY0ICY<@h^9lSyGy9a`s5xRT zHAiI=6rM195I)hOU>2hN^_k#W^OV!m|M+pbEmo8+-L4F51JF^F>}&9VNRK6%v0tC z^PG9bykyShI?3!mn%RGIzBy`+n9I$j=4x}Lxy~FjH<=sEt>(D7)7)VTPIJ4t&)j1kG$+hs=A?PToHEatr_2lHIrEBn$*k`KXa4ZNLS6r6eQ#JCHAl?) z{;~e(d&kPF&6ValbIjaiZZNl+&!88lexjH@8N3y;^t0s zySdNYV;(do%wy)HdBU7B&zPso3+6fVih0SLtB0uigJ$;MoNtbrBj$2*skz!*X%4=x z8#6aKZ!ou-|xjl`xx?Rr1yy|u}?R##gX}{ri z6&>z?)n|-*?s>Q8XzO>E$k*T1(EE#Rv?H`Pv5wl6w11ekYIL9car?UWz0Ymk@0#4s z=bG+tyNdQTw{;-C>UMiS|#ry-d5tZG8rN#BF^D(&ToS_G#MM z-(1?Cce{Z0pST^N{av>!X+Lwjp7s{zPV4G3()YMMNSl9aIXj1i{K84M3u*tB+m*C` z-|Z&af97^C?Z0w+g!VJH_1Rx8*R!^z&kMJ?oy%ubWo}o|{#m!{X#ZQc!&^h4kGZYS ztbW&ReLkgojOH`6Efo5i+at6eyIuYRjKS@8+Ha#&^?kH=xm^+oh5ohMjkHg@ouGZy z?M2$(aXb8j{C*tHGxbwN`={Klr+wD#VcLUkr)mF<+okW~_hh*}L;L&q&U5B`*un4K zaeIvRued!$`}1yh{BS6w?_8@sP5W=$o~8XyIj7}^cJl9HxZO!R;dbA9LZNxLlO_B+ zaNGn{Kk?pB=p$~o?FxnTom=@Gw70xH+aCE5&Uv@fv@g27Ok3X#Redoxpucsyoc2Gs zJx}}HTw|(P{88=?ZZ~k#{sp)DevIGc>-NkZ_Sfwt+WPLL*3JDFq0oPFJ3?FEv6Np* zTYvvu?Mm9!ZpUahx!pkf<8H@kf6?uB+TU=yhqk`&sD2W(bGYW!PSW1)c8c~dyIud| z{61s1r}px@+}!T?34TWLJvFV{#Sf$-ZqNM7P^i!Cnx71X{=)5&O6Hk+it1Nrzt8RR z|CRfd+x+`6p+9#!`meYLa^F#XTXiTDqpfRd_FwaFL%CgeAQbwn+jX>Wy4^?nyKc|W zUU7Sw_BQTc>a*-;LZM2x>uDc!yPftg(bl$lXzM#nYUkH*j=3f`#__VB{&}`#zvX@0 zSM84<=Dx~3QQK;*3x#yAR6pbO{9BuD&;1Jf;&$6Bp-_+Or)lduI;xKx=UjEWg!VJH zhiU73H>#=rw_Mk5PtZQ)c4Jd0r0>LN4D+UQP-&iUZ>GVSlU-O?Ni>ANwikN!J; z*V*@H+x4`+?snlx&QG^{Xn!B~IMpX;SG%30{b9FLw6D26Mf<+nbF_bmd!N>={{Zvv zc8d1L-JYWTHMi$zzk~ar>O126J7R7x&~9*hh4uxvb3e#E)9pgqGj2y|NBJCF{q&vU zJajw%*FvF>x*ehYWw*;|&$%6={q~~lx(&4drQ31ZC){qQ{hHeYw3pqkXbFY>*+0v! zJ3_n0?KJI=xIImKh_;UDJnad$i$BD_ZQ`05+VA4NukkO?{u#GxPV;+x-L9woX}6nc z|FPR0w10x12U@rB*ZCdqZZFaPq}zHyHR^Ug?Z0t5Li?TkY|y%;v|o0+lJ*DPj?w;{ z+YPjz(AK_$E`&mVXTOQ|zu@PD`WdI)>~{Vq_`Q9!Rp0YT_Sfwh+Bw^^etkE`&h38M z2i%^c9d~Yg;w6|K9C1?H~T3tUpcr=iFYT-RgF@ClvZ?w+CtKmrAIg zyifCQ61rVP`-s~mv^(9dp#3%4+Ls#I({4}EUT}Mv_S^ZnsG81;{EW`DBcTNCL-to` zf7tDc&xAssaeJ0_((Pz3*Oc2WwEx!a)=Rv`=Vz+=AE5msZV%G_8MlXNH@lsrebMa+ z+DW%(Xn))71=@e-cKhdeZ}RSJ{}Z%-!tKI7UYEK(OZy{kFZ>So0k``vGv=VapWmPA zc7pc1qS-!YX#cF+^R!R9y+r%-v~?_IKOYMHsr{}iycTjhMfd@4%MvEe$DNoS9#6sb~Wv%Znx5Y=gw^XAnh`@XKBaW&b!LFONK(|X?<8`Lnm9*bmlC5c^{Xw@&hxnQG-mIUXy?a-- zJ^qK>x83d=4u$>?xAVTp&*dM<*0j?eF3q+FuZKcE@XxdRmHrYxAKjj!{eHJ+X}8hV z_`8yvlWtGbe$6#=H+cW$_A>4NMmuxu+~jv8?)JRV-s|=Z?O&p;nnl_JZr6XA^Th2z z+Hd*MY)y)GsoPVuTimW035ELI=HFTmeZy`3UG>oa>2`|tPnBi+ssAHhd%MlQ{T=FY zn}6p!^i{X{H@!piZZFV&*Nvxc~3Tu3PnW zetyx;oRhQp~Wi;BG3CYi|rluIDdqEaW5WWo&Q#w5W6t&VspR&57G8qoTstyOLW`Ypyd ziF1LUmiW-S=z|jD`(Vr?aVzlT8$@}#fR{*|bA+)LiS56~yQw9{w~*ND663o^>~9j| z8%J!^LLmp=Gh#C&{tS4j#5sRJ%p>t);3p-W$A3jQA z5AX{TuQ`f!1BsV@fIfAjpvSxY**7F!3jCnNcxOLeMl5J*f&U=!eZUta-uq{?y_*Eh z!+&AyZi%~q4@hkIEA*5Y?>A<-UlnyRAGjEp`bYq{N#cSJ8QUuHQs93`jCcC7abFYk zcz-V|lK2qtMu`hPV(cY}@eW$nEiv9V%Lah2)NN)j0Iw+&c-F`07ZSe;oLwZ+r~M5v zn8bU5UkRrF9ll-SQs9Nfg8n{Wm&EPBzmqrsoM#d=t{&tIJT?t}8+aXIJ=%f}-ybJz zKn#8pz8NU-G2k4tNbdz+BJpRy8zt6%6}%Ep06r^mKJcs(!MgysR^me77bGqP{;R}m zfDNjkuLZtE;%4ASC4K_MFsJ0yMsxL4v2fM+igay|jR8<=>FX3)#@cHrMj`~mP4 z%LTo@1n+~EcpC6dVB)O+{<}=iSMlx16(YSF_!eN&`Bh+-O!ol4EYt0a6!x)9e*t(> zsi6N1xEz?|7hn-{n@o2BcgyrQfYVkA`ZY^XE?}Z>2dEyY?~pnJ-z;$_@HZts47^Wb z4{(pfx!+LOC3gy5JMdD84*_qKxEJ^(iF58kdysem@TF@6ZwGLh#6}D1OXAhQ2PAd@ zpOknf@U(9T-T?4j5*Jn|?7I?I03VciGq6YEPT=Wx3Et0u*GRm;if_J4yc+mFC3XQH zmv|@emn?#JQYF4cEO96BqY`_7UzIqw3cM1}0-jnScng7Vm)H#Kmbeu7ZHZff2PAF> zzRoIm4+Gao>;ZmFVmcV+lh_D6vr^D62CkIY1^k@Ehk=hs+zUJ?agI%4U#Swj3xI7B zZwCIp#67_8No=TrKascq_$$?dcQvqGVmI)QBt8WEM~ROCXV?TiTZ?bvNSqJcC~*bw zE{Wa1f01}6u%Slqb^+fYaR9hp;v4M>`?16>;G+_E0JF7%_b~8$i9Nuz63=&_uSr}A z{AY8uM=|GfeR%*0PK{w2Y9E%i)+z;CGG$ocek_y@J$kXfSnQ>>QHwQ zX90gGaV~I9t>7&LULvs@_+g0;0slZ$BK6IHwu@ zO5z2;tWnTZ0AC~VW?+lNoxo2>d<^)P60;V37hK|e;49V(Iiac#*{Of!9mC0QfnHZv=i<;zD4b#AaaQJwnc6 z;FS_D1#XqN6!>|G%YomOcr`G+0G7(N2Kai3D}e11R|7vUu^qTu;#%NK+5~SS@NE(| z13w{gEAX!*z7N;@ilub|%wtV-Mte80rc0q>Kz z1Nfg3zW{vseS&u<@M4Mg0&kGG6Zj>GUj_bH;se0rzbSa%0A3{VA>d6CzYY9Li4Ow@ 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ࡥiX{6h-tDwV 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