From c6fdea54aae4ab25a11410a3a86b3551518fb7bb Mon Sep 17 00:00:00 2001 From: George Garside Date: Wed, 3 Apr 2013 11:05:57 +0100 Subject: [PATCH 01/60] Permit more external hosts For downloading resources --- TDA-Enrichment/Cordova.plist | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TDA-Enrichment/Cordova.plist b/TDA-Enrichment/Cordova.plist index 4297353..4a451fa 100755 --- a/TDA-Enrichment/Cordova.plist +++ b/TDA-Enrichment/Cordova.plist @@ -29,6 +29,9 @@ ExternalHosts *.testflightapp.com + *.georgegarside.x10.bz + *.thomasdeaconacademy.com + *.thomasdeaconacademy.peterborough.sch.uk Plugins From 3cf57befcb7287e8735470563a622c70ccb36c7a Mon Sep 17 00:00:00 2001 From: George Garside Date: Wed, 3 Apr 2013 11:20:47 +0100 Subject: [PATCH 02/60] Increment build number --- TDA-Enrichment/TDA-Enrichment-Info.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TDA-Enrichment/TDA-Enrichment-Info.plist b/TDA-Enrichment/TDA-Enrichment-Info.plist index 4403e9e..cf8eb99 100644 --- a/TDA-Enrichment/TDA-Enrichment-Info.plist +++ b/TDA-Enrichment/TDA-Enrichment-Info.plist @@ -43,7 +43,7 @@ CFBundleSignature ???? CFBundleVersion - 47 + 48 LSRequiresIPhoneOS NSMainNibFile From b8557db3ad1c964809ab07042374170a50999558 Mon Sep 17 00:00:00 2001 From: George Garside Date: Wed, 3 Apr 2013 11:56:04 +0100 Subject: [PATCH 03/60] Increment build number --- TDA-Enrichment/TDA-Enrichment-Info.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TDA-Enrichment/TDA-Enrichment-Info.plist b/TDA-Enrichment/TDA-Enrichment-Info.plist index 06cd470..effef11 100644 --- a/TDA-Enrichment/TDA-Enrichment-Info.plist +++ b/TDA-Enrichment/TDA-Enrichment-Info.plist @@ -43,7 +43,7 @@ CFBundleSignature ???? CFBundleVersion - 52 + 56 LSRequiresIPhoneOS NSMainNibFile From a5c0c552d5c5c247caa5fea34c48b6d22f27b87c Mon Sep 17 00:00:00 2001 From: George Garside Date: Wed, 3 Apr 2013 11:56:33 +0100 Subject: [PATCH 04/60] Add resources to page 10 --- www/index.html | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/www/index.html b/www/index.html index fb50309..c91e9c6 100644 --- a/www/index.html +++ b/www/index.html @@ -669,6 +669,20 @@

Muscle Group Training

Arms +

Resources

+ + + +
+
+

Are you sure you want to open this resource?

+

This action can use data, and may not work on Android.

+ Cancel + Open +
+
From 78ecb4516c8fda4b4c649e81dfb4e19a5d554ab9 Mon Sep 17 00:00:00 2001 From: George Garside Date: Wed, 3 Apr 2013 17:34:37 +0100 Subject: [PATCH 05/60] Expand download popup buttons to fill full size of dialog --- www/index.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/www/index.html b/www/index.html index c91e9c6..8e1c774 100644 --- a/www/index.html +++ b/www/index.html @@ -679,8 +679,10 @@

Resources

Are you sure you want to open this resource?

This action can use data, and may not work on Android.

- Cancel - Open +
+ + +
From b579099686d62859ab6fa73a77ff16d16c2b0862 Mon Sep 17 00:00:00 2001 From: George Garside Date: Wed, 3 Apr 2013 20:11:22 +0100 Subject: [PATCH 06/60] Add links and popups for resources --- www/index.html | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/www/index.html b/www/index.html index f44b950..738452e 100644 --- a/www/index.html +++ b/www/index.html @@ -701,6 +701,35 @@

Introduction

Food Labelling Information + +

Resources

+ + + +
+
+

Are you sure you want to open this resource?

+

This action can use data, and may not work on Android.

+
+ + +
+
+
+
+
+

Are you sure you want to open this resource?

+

This action can use data, and may not work on Android.

+
+ + +
+
+
From 8301cf3ad68f3c227f891af4cadff2df9625668b Mon Sep 17 00:00:00 2001 From: George Garside Date: Thu, 4 Apr 2013 14:07:23 +0100 Subject: [PATCH 07/60] Add resources to page 14 --- www/index.html | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/www/index.html b/www/index.html index 4ff95d2..8082c09 100644 --- a/www/index.html +++ b/www/index.html @@ -1545,6 +1545,20 @@

I want to burn calories quickly…

Answer: Interval training. It doesn’t matter what you do, run, row, or jog on the spot. If you do these exercises at FULL pace (after a warm up) for 20 seconds, then have a 40 second rest, repeating this for up to 5 minutes, it will burn a huge amount of calories. The good thing about this type of training is that your metabolism is given a jump-start so it keeps burning calories for hours after you have finished.

I want a fast fitness workout…

Answer: Crossfit training. This type of training focuses on strength and endurance training and is scalable to your own fitness and ability level. It also burns lots of calories. For example, a favourite of mine is to do 5 pull-ups, 10 push-ups then 15 bodyweight squats, one after the other, no rest. Each time you complete this its one rep. The idea is that you do as many reps as you can in 10 minutes. If you can’t do the pull-ups then swap them for something like bench-dips or anything you can do.

+

Here are a few crossfit workouts you can try out for yourself…

+ +
+
+

Are you sure you want to open this resource?

+

This action can use data, and may not work on Android.

+
+ + +
+
+

How do I lose weight?

Answer: Eat sensibly, increase your activity. We all know when the food we eat is a ‘treat’ or something that’s ‘clean’. The difference between the two is our own motivation. If we have a goal or a beach holiday coming up its much easier to be strict with what we eat. The way I look at it is this; its MUCH easier to stay in shape than to GET in shape. Maintenance is the key to a healthy weight, once you get there. Fast answer; walk briskly when you walk, jog up the stairs, bike instead of getting a lift, say no to the second helping, and yes just once a week to treats… you get the picture.

So try crossfit and interval training as faster ways to increase your activity. If this is too intense then start with 10 minutes on the cross-trainer or bike. Get into the habit of doing this and you will see a difference in your health.

From e666d1fb85da79190ee956028354a5c6d2ff5e7b Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 23 Apr 2013 20:34:38 +0100 Subject: [PATCH 08/60] Increment version and build number --- TDA-Enrichment/TDA-Enrichment-Info.plist | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TDA-Enrichment/TDA-Enrichment-Info.plist b/TDA-Enrichment/TDA-Enrichment-Info.plist index fb6babc..9dcff18 100644 --- a/TDA-Enrichment/TDA-Enrichment-Info.plist +++ b/TDA-Enrichment/TDA-Enrichment-Info.plist @@ -39,7 +39,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.1.2 + 1.1.3 CFBundleSignature ???? CFBundleURLTypes @@ -58,7 +58,7 @@
CFBundleVersion - 56 + 60 LSRequiresIPhoneOS NSMainNibFile~ipad From 8ba4a82a13640a88e92215305a166916b50f00ae Mon Sep 17 00:00:00 2001 From: George Garside Date: Mon, 20 May 2013 21:05:26 +0100 Subject: [PATCH 09/60] Update CordovaLib --- CordovaLib/Classes/CDVAvailability.h | 19 +- CordovaLib/Classes/CDVCamera.h | 4 +- CordovaLib/Classes/CDVCamera.m | 24 +- CordovaLib/Classes/CDVCapture.m | 10 +- CordovaLib/Classes/CDVCommandDelegate.h | 1 - CordovaLib/Classes/CDVCommandDelegateImpl.m | 22 +- CordovaLib/Classes/CDVCommandQueue.h | 8 +- CordovaLib/Classes/CDVCommandQueue.m | 17 +- CordovaLib/Classes/CDVConfigParser.m | 2 +- CordovaLib/Classes/CDVConnection.m | 12 +- CordovaLib/Classes/CDVContact.m | 32 +- CordovaLib/Classes/CDVContacts.h | 14 +- CordovaLib/Classes/CDVContacts.m | 490 ++++++++-------- CordovaLib/Classes/CDVEcho.m | 7 + CordovaLib/Classes/CDVExif.h | 43 ++ CordovaLib/Classes/CDVFile.h | 2 + CordovaLib/Classes/CDVFile.m | 285 +++++----- CordovaLib/Classes/CDVFileTransfer.h | 8 +- CordovaLib/Classes/CDVFileTransfer.m | 51 +- CordovaLib/Classes/CDVGlobalization.m | 62 +-- CordovaLib/Classes/CDVInAppBrowser.h | 3 + CordovaLib/Classes/CDVInAppBrowser.m | 41 +- CordovaLib/Classes/CDVInvokedUrlCommand.h | 6 +- CordovaLib/Classes/CDVJpegHeaderWriter.h | 62 +++ CordovaLib/Classes/CDVJpegHeaderWriter.m | 522 ++++++++++++++++++ CordovaLib/Classes/CDVLocalStorage.h | 4 +- CordovaLib/Classes/CDVLocalStorage.m | 36 +- CordovaLib/Classes/CDVLocation.h | 8 +- CordovaLib/Classes/CDVLocation.m | 24 +- CordovaLib/Classes/CDVNotification.h | 1 + CordovaLib/Classes/CDVNotification.m | 89 +-- CordovaLib/Classes/CDVPlugin.h | 8 +- CordovaLib/Classes/CDVPlugin.m | 9 +- CordovaLib/Classes/CDVPluginResult.h | 7 + CordovaLib/Classes/CDVPluginResult.m | 57 +- CordovaLib/Classes/CDVReachability.m | 28 +- CordovaLib/Classes/CDVSound.m | 21 +- CordovaLib/Classes/CDVSplashScreen.h | 3 +- CordovaLib/Classes/CDVSplashScreen.m | 181 +++--- CordovaLib/Classes/CDVURLProtocol.m | 12 +- CordovaLib/Classes/CDVUserAgentUtil.m | 2 +- CordovaLib/Classes/CDVViewController.h | 10 +- CordovaLib/Classes/CDVViewController.m | 140 ++++- CordovaLib/Classes/CDVWebViewDelegate.m | 30 +- CordovaLib/Classes/NSData+Base64.m | 19 +- CordovaLib/Classes/NSDictionary+Extensions.m | 2 +- .../CordovaLib.xcodeproj/project.pbxproj | 14 + CordovaLib/VERSION | 2 +- 48 files changed, 1719 insertions(+), 735 deletions(-) create mode 100755 CordovaLib/Classes/CDVExif.h create mode 100755 CordovaLib/Classes/CDVJpegHeaderWriter.h create mode 100755 CordovaLib/Classes/CDVJpegHeaderWriter.m diff --git a/CordovaLib/Classes/CDVAvailability.h b/CordovaLib/Classes/CDVAvailability.h index 33c6799..947ae2d 100755 --- a/CordovaLib/Classes/CDVAvailability.h +++ b/CordovaLib/Classes/CDVAvailability.h @@ -17,6 +17,8 @@ under the License. */ +#define __CORDOVA_IOS__ + #define __CORDOVA_0_9_6 906 #define __CORDOVA_1_0_0 10000 #define __CORDOVA_1_1_0 10100 @@ -37,6 +39,7 @@ #define __CORDOVA_2_3_0 20300 #define __CORDOVA_2_4_0 20400 #define __CORDOVA_2_5_0 20500 +#define __CORDOVA_2_6_0 20600 #define __CORDOVA_NA 99999 /* not available */ /* @@ -47,7 +50,7 @@ #endif */ #ifndef CORDOVA_VERSION_MIN_REQUIRED - #define CORDOVA_VERSION_MIN_REQUIRED __CORDOVA_2_5_0 + #define CORDOVA_VERSION_MIN_REQUIRED __CORDOVA_2_6_0 #endif /* @@ -65,12 +68,20 @@ /* Return the string version of the decimal version */ #define CDV_VERSION [NSString stringWithFormat:@"%d.%d.%d", \ - (CORDOVA_VERSION_MIN_REQUIRED / 10000), \ - (CORDOVA_VERSION_MIN_REQUIRED % 10000) / 100, \ - (CORDOVA_VERSION_MIN_REQUIRED % 10000) % 100] + (CORDOVA_VERSION_MIN_REQUIRED / 10000), \ + (CORDOVA_VERSION_MIN_REQUIRED % 10000) / 100, \ + (CORDOVA_VERSION_MIN_REQUIRED % 10000) % 100] #ifdef __clang__ #define CDV_DEPRECATED(version, msg) __attribute__((deprecated("Deprecated in Cordova " #version ". " msg))) #else #define CDV_DEPRECATED(version, msg) __attribute__((deprecated())) #endif + +// Enable this to log all exec() calls. +#define CDV_ENABLE_EXEC_LOGGING 0 +#if CDV_ENABLE_EXEC_LOGGING + #define CDV_EXEC_LOG NSLog +#else + #define CDV_EXEC_LOG(...) do {} while (NO) +#endif diff --git a/CordovaLib/Classes/CDVCamera.h b/CordovaLib/Classes/CDVCamera.h index 204d25f..65eac77 100755 --- a/CordovaLib/Classes/CDVCamera.h +++ b/CordovaLib/Classes/CDVCamera.h @@ -61,8 +61,8 @@ typedef NSUInteger CDVMediaType; // ======================================================================= // @interface CDVCamera : CDVPlugin + UINavigationControllerDelegate, + UIPopoverControllerDelegate> {} @property (strong) CDVCameraPicker* pickerController; diff --git a/CordovaLib/Classes/CDVCamera.m b/CordovaLib/Classes/CDVCamera.m index aabe844..823fde9 100755 --- a/CordovaLib/Classes/CDVCamera.m +++ b/CordovaLib/Classes/CDVCamera.m @@ -18,6 +18,7 @@ Licensed to the Apache Software Foundation (ASF) under one */ #import "CDVCamera.h" +#import "CDVJpegHeaderWriter.h" #import "NSArray+Comparisons.h" #import "NSData+Base64.h" #import "NSDictionary+Extensions.h" @@ -60,6 +61,8 @@ - (BOOL)popoverSupported * 7 allowsEdit * 8 correctOrientation * 9 saveToPhotoAlbum + * 10 popoverOptions + * 11 cameraDirection */ - (void)takePicture:(CDVInvokedUrlCommand*)command { @@ -122,18 +125,22 @@ - (void)takePicture:(CDVInvokedUrlCommand*)command cameraPicker.returnType = ([arguments objectAtIndex:1]) ? [[arguments objectAtIndex:1] intValue] : DestinationTypeFileUri; if (sourceType == UIImagePickerControllerSourceTypeCamera) { - // we only allow taking pictures (no video) in this api + // We only allow taking pictures (no video) in this API. cameraPicker.mediaTypes = [NSArray arrayWithObjects:(NSString*)kUTTypeImage, nil]; + + // We can only set the camera device if we're actually using the camera. + NSNumber* cameraDirection = [command argumentAtIndex:11 withDefault:[NSNumber numberWithInteger:UIImagePickerControllerCameraDeviceRear]]; + cameraPicker.cameraDevice = (UIImagePickerControllerCameraDevice)[cameraDirection intValue]; } else if (mediaType == MediaTypeAll) { cameraPicker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:sourceType]; } else { - NSArray* mediaArray = [NSArray arrayWithObjects:(NSString*)(mediaType == MediaTypeVideo ? kUTTypeMovie:kUTTypeImage), nil]; + NSArray* mediaArray = [NSArray arrayWithObjects:(NSString*)(mediaType == MediaTypeVideo ? kUTTypeMovie : kUTTypeImage), nil]; cameraPicker.mediaTypes = mediaArray; } if ([self popoverSupported] && (sourceType != UIImagePickerControllerSourceTypeCamera)) { if (cameraPicker.popoverController == nil) { - cameraPicker.popoverController = [[NSClassFromString (@"UIPopoverController")alloc] initWithContentViewController:cameraPicker]; + cameraPicker.popoverController = [[NSClassFromString(@"UIPopoverController")alloc] initWithContentViewController:cameraPicker]; } NSDictionary* options = [command.arguments objectAtIndex:10 withDefault:nil]; [self displayPopover:options]; @@ -289,12 +296,17 @@ - (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingM data = UIImagePNGRepresentation(scaledImage == nil ? image : scaledImage); } else { data = UIImageJPEGRepresentation(scaledImage == nil ? image : scaledImage, cameraPicker.quality / 100.0f); + + /* splice loc */ + CDVJpegHeaderWriter* exifWriter = [[CDVJpegHeaderWriter alloc] init]; + NSString* headerstring = [exifWriter createExifAPP1:[info objectForKey:@"UIImagePickerControllerMediaMetadata"]]; + data = [exifWriter spliceExifBlockIntoJpeg:data withExifBlock:headerstring]; } if (cameraPicker.returnType == DestinationTypeFileUri) { // write to temp directory and return URI // get the temp directory path - NSString* docsPath = [NSTemporaryDirectory ()stringByStandardizingPath]; + NSString* docsPath = [NSTemporaryDirectory()stringByStandardizingPath]; NSError* err = nil; NSFileManager* fileMgr = [[NSFileManager alloc] init]; // recommended by apple (vs [NSFileManager defaultManager]) to be threadsafe // generate unique file name @@ -419,7 +431,7 @@ - (UIImage*)imageCorrectedForCaptureOrientation:(UIImage*)anImage rotation_radians = 0.0; break; - case UIImageOrientationDown : + case UIImageOrientationDown: rotation_radians = M_PI; // don't be scared of radians, if you're reading this, you're good at math break; @@ -518,7 +530,7 @@ - (void)postImage:(UIImage*)anImage withFilename:(NSString*)filename toUrl:(NSUR // first parameter an image [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"upload\"; filename=\"%@\"\r\n", filename] dataUsingEncoding:NSUTF8StringEncoding]]; - [postBody appendData:[@"Content-Type: image/png\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[@"Content-Type: image/png\r\n\r\n" dataUsingEncoding : NSUTF8StringEncoding]]; [postBody appendData:imageData]; // // second parameter information diff --git a/CordovaLib/Classes/CDVCapture.m b/CordovaLib/Classes/CDVCapture.m index ed9f664..d89e3d3 100755 --- a/CordovaLib/Classes/CDVCapture.m +++ b/CordovaLib/Classes/CDVCapture.m @@ -169,7 +169,7 @@ - (CDVPluginResult*)processImage:(UIImage*)image type:(NSString*)mimeType forCal } // write to temp directory and return URI - NSString* docsPath = [NSTemporaryDirectory ()stringByStandardizingPath]; // use file system temporary directory + NSString* docsPath = [NSTemporaryDirectory()stringByStandardizingPath]; // use file system temporary directory NSError* err = nil; NSFileManager* fileMgr = [[NSFileManager alloc] init]; @@ -439,7 +439,7 @@ - (NSDictionary*)getMediaDictionaryFromPath:(NSString*)fullPath ofType:(NSString if ([command isKindOfClass:[CDVFile class]]) { CDVFile* cdvFile = (CDVFile*)command; NSString* mimeType = [cdvFile getMimeTypeFromPath:fullPath]; - [fileDict setObject:(mimeType != nil ? (NSObject*)mimeType:[NSNull null]) forKey:@"type"]; + [fileDict setObject:(mimeType != nil ? (NSObject*)mimeType : [NSNull null]) forKey:@"type"]; } } NSDictionary* fileAttrs = [fileMgr attributesOfItemAtPath:fullPath error:nil]; @@ -533,7 +533,6 @@ - (NSUInteger)supportedInterfaceOrientations // delegate to CVDAudioRecorderViewController return [self.topViewController supportedInterfaceOrientations]; } - #endif @end @@ -663,7 +662,7 @@ - (void)viewDidLoad // create file to record to in temporary dir - NSString* docsPath = [NSTemporaryDirectory ()stringByStandardizingPath]; // use file system temporary directory + NSString* docsPath = [NSTemporaryDirectory()stringByStandardizingPath]; // use file system temporary directory NSError* err = nil; NSFileManager* fileMgr = [[NSFileManager alloc] init]; @@ -701,7 +700,6 @@ - (NSUInteger)supportedInterfaceOrientations orientation = orientation | (supported & UIInterfaceOrientationMaskPortraitUpsideDown); return orientation; } - #endif - (void)viewDidUnload @@ -766,7 +764,7 @@ - (void)stopRecordingCleanup BOOL isUIAccessibilityAnnouncementNotification = (&UIAccessibilityAnnouncementNotification != NULL); if (isUIAccessibilityAnnouncementNotification) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 500ull * NSEC_PER_MSEC), dispatch_get_main_queue(), ^{ - UIAccessibilityPostNotification (UIAccessibilityAnnouncementNotification, NSLocalizedString (@"timed recording complete", nil)); + UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, NSLocalizedString(@"timed recording complete", nil)); }); } } else { diff --git a/CordovaLib/Classes/CDVCommandDelegate.h b/CordovaLib/Classes/CDVCommandDelegate.h index e177c63..0401136 100755 --- a/CordovaLib/Classes/CDVCommandDelegate.h +++ b/CordovaLib/Classes/CDVCommandDelegate.h @@ -30,7 +30,6 @@ - (NSString*)pathForResource:(NSString*)resourcepath; - (id)getCommandInstance:(NSString*)pluginName; -- (void)registerPlugin:(CDVPlugin*)plugin withClassName:(NSString*)className CDV_DEPRECATED(2.2, "Use CDVViewController to register plugins, or use config.xml."); // Plugins should not be using this interface to call other plugins since it // will result in bogus callbacks being made. diff --git a/CordovaLib/Classes/CDVCommandDelegateImpl.m b/CordovaLib/Classes/CDVCommandDelegateImpl.m index e399289..fa0e5e0 100755 --- a/CordovaLib/Classes/CDVCommandDelegateImpl.m +++ b/CordovaLib/Classes/CDVCommandDelegateImpl.m @@ -55,7 +55,11 @@ - (NSString*)pathForResource:(NSString*)resourcepath - (void)evalJsHelper2:(NSString*)js { + CDV_EXEC_LOG(@"Exec: evalling: %@", [js substringToIndex:MIN([js length], 160)]); NSString* commandsJSON = [_viewController.webView stringByEvaluatingJavaScriptFromString:js]; + if ([commandsJSON length] > 0) { + CDV_EXEC_LOG(@"Exec: Retrieved new exec messages by chaining."); + } [_commandQueue enqueCommandBatch:commandsJSON]; } @@ -78,21 +82,16 @@ - (void)evalJsHelper:(NSString*)js - (void)sendPluginResult:(CDVPluginResult*)result callbackId:(NSString*)callbackId { + CDV_EXEC_LOG(@"Exec(%@): Sending result. Status=%@", callbackId, result.status); // This occurs when there is are no win/fail callbacks for the call. - if ([@"INVALID" isEqualToString:callbackId]) { + if ([@"INVALID" isEqualToString : callbackId]) { return; } int status = [result.status intValue]; BOOL keepCallback = [result.keepCallback boolValue]; - id message = result.message == nil ? [NSNull null] : result.message; + NSString* argumentsAsJSON = [result argumentsAsJSON]; - // Use an array to encode the message as JSON. - message = [NSArray arrayWithObject:message]; - NSString* encodedMessage = [message JSONString]; - // And then strip off the outer []s. - encodedMessage = [encodedMessage substringWithRange:NSMakeRange(1, [encodedMessage length] - 2)]; - NSString* js = [NSString stringWithFormat:@"cordova.require('cordova/exec').nativeCallback('%@',%d,%@,%d)", - callbackId, status, encodedMessage, keepCallback]; + NSString* js = [NSString stringWithFormat:@"cordova.require('cordova/exec').nativeCallback('%@',%d,%@,%d)", callbackId, status, argumentsAsJSON, keepCallback]; [self evalJsHelper:js]; } @@ -122,11 +121,6 @@ - (id)getCommandInstance:(NSString*)pluginName return [_viewController getCommandInstance:pluginName]; } -- (void)registerPlugin:(CDVPlugin*)plugin withClassName:(NSString*)className -{ - [_viewController registerPlugin:plugin withClassName:className]; -} - - (void)runInBackground:(void (^)())block { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block); diff --git a/CordovaLib/Classes/CDVCommandQueue.h b/CordovaLib/Classes/CDVCommandQueue.h index ebdf844..27c47b5 100755 --- a/CordovaLib/Classes/CDVCommandQueue.h +++ b/CordovaLib/Classes/CDVCommandQueue.h @@ -22,13 +22,7 @@ @class CDVInvokedUrlCommand; @class CDVViewController; -@interface CDVCommandQueue : NSObject { - @private - NSInteger _lastCommandQueueFlushRequestId; - __weak CDVViewController* _viewController; - NSMutableArray* _queue; - BOOL _currentlyExecuting; -} +@interface CDVCommandQueue : NSObject @property (nonatomic, readonly) BOOL currentlyExecuting; diff --git a/CordovaLib/Classes/CDVCommandQueue.m b/CordovaLib/Classes/CDVCommandQueue.m index a8a58b7..1a0dfa0 100755 --- a/CordovaLib/Classes/CDVCommandQueue.m +++ b/CordovaLib/Classes/CDVCommandQueue.m @@ -23,6 +23,14 @@ Licensed to the Apache Software Foundation (ASF) under one #import "CDVViewController.h" #import "CDVCommandDelegateImpl.h" +@interface CDVCommandQueue () { + NSInteger _lastCommandQueueFlushRequestId; + __weak CDVViewController* _viewController; + NSMutableArray* _queue; + BOOL _currentlyExecuting; +} +@end + @implementation CDVCommandQueue @synthesize currentlyExecuting = _currentlyExecuting; @@ -74,6 +82,9 @@ - (void)fetchCommandsFromJs @"cordova.require('cordova/exec').nativeFetchMessages()"]; [self enqueCommandBatch:queuedCommandsJSON]; + if ([queuedCommandsJSON length] > 0) { + CDV_EXEC_LOG(@"Exec: Retrieved new exec messages by request."); + } } - (void)executePending @@ -92,13 +103,15 @@ - (void)executePending // Iterate over and execute all of the commands. for (NSArray* jsonEntry in commandBatch) { CDVInvokedUrlCommand* command = [CDVInvokedUrlCommand commandFromJson:jsonEntry]; + CDV_EXEC_LOG(@"Exec(%@): Calling %@.%@", command.callbackId, command.className, command.methodName); + if (![self execute:command]) { #ifdef DEBUG NSString* commandJson = [jsonEntry JSONString]; static NSUInteger maxLogLength = 1024; NSString* commandString = ([commandJson length] > maxLogLength) ? - [NSString stringWithFormat:@"%@[...]", [commandJson substringToIndex:maxLogLength]] : - commandJson; + [NSString stringWithFormat:@"%@[...]", [commandJson substringToIndex:maxLogLength]] : + commandJson; DLog(@"FAILED pluginJSON = %@", commandString); #endif diff --git a/CordovaLib/Classes/CDVConfigParser.m b/CordovaLib/Classes/CDVConfigParser.m index 6fd5913..ffc8ede 100755 --- a/CordovaLib/Classes/CDVConfigParser.m +++ b/CordovaLib/Classes/CDVConfigParser.m @@ -52,7 +52,7 @@ - (void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName names } else if ([elementName isEqualToString:@"plugin"]) { NSString* name = [attributeDict[@"name"] lowercaseString]; pluginsDict[name] = attributeDict[@"value"]; - if ([@"true" isEqualToString:attributeDict[@"onload"]]) { + if ([@"true" isEqualToString : attributeDict[@"onload"]]) { [self.startupPluginNames addObject:name]; } } else if ([elementName isEqualToString:@"access"]) { diff --git a/CordovaLib/Classes/CDVConnection.m b/CordovaLib/Classes/CDVConnection.m index 3030711..b3f5cab 100755 --- a/CordovaLib/Classes/CDVConnection.m +++ b/CordovaLib/Classes/CDVConnection.m @@ -52,7 +52,8 @@ - (NSString*)w3cConnectionTypeFor:(CDVReachability*)reachability return @"none"; case ReachableViaWWAN: - return @"2g"; // no generic default, so we use the lowest common denominator + // Return value of '2g' is deprecated as of 2.6.0 and will be replaced with 'cellular' in 3.0.0 + return @"2g"; case ReachableViaWiFi: return @"wifi"; @@ -66,7 +67,8 @@ - (BOOL)isCellularConnection:(NSString*)theConnectionType { return [theConnectionType isEqualToString:@"2g"] || [theConnectionType isEqualToString:@"3g"] || - [theConnectionType isEqualToString:@"4g"]; + [theConnectionType isEqualToString:@"4g"] || + [theConnectionType isEqualToString:@"cellular"]; } - (void)updateReachability:(CDVReachability*)reachability @@ -111,6 +113,7 @@ - (CDVPlugin*)initWithWebView:(UIWebView*)theWebView self.internetReach = [CDVReachability reachabilityForInternetConnection]; self.connectionType = [self w3cConnectionTypeFor:self.internetReach]; [self.internetReach startNotifier]; + [self printDeprecationNotice]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateConnectionType:) name:kReachabilityChangedNotification object:nil]; if (&UIApplicationDidEnterBackgroundNotification && &UIApplicationWillEnterForegroundNotification) { @@ -121,4 +124,9 @@ - (CDVPlugin*)initWithWebView:(UIWebView*)theWebView return self; } +- (void)printDeprecationNotice +{ + NSLog(@"DEPRECATION NOTICE: The Connection ReachableViaWWAN return value of '2g' is deprecated as of Cordova version 2.6.0 and will be changed to 'cellular' in a future release. "); +} + @end diff --git a/CordovaLib/Classes/CDVContact.m b/CordovaLib/Classes/CDVContact.m index 9efaf10..3844525 100755 --- a/CordovaLib/Classes/CDVContact.m +++ b/CordovaLib/Classes/CDVContact.m @@ -38,7 +38,9 @@ - (id)init if ((self = [super init]) != nil) { ABRecordRef rec = ABPersonCreate(); self.record = rec; - CFRelease(rec); + if (rec) { + CFRelease(rec); + } } return self; } @@ -167,9 +169,9 @@ + (NSDictionary*)defaultObjectAndProperties if (org_apache_cordova_contacts_objectAndProperties == nil) { org_apache_cordova_contacts_objectAndProperties = [NSDictionary dictionaryWithObjectsAndKeys: [NSArray arrayWithObjects:kW3ContactGivenName, kW3ContactFamilyName, - kW3ContactMiddleName, kW3ContactHonorificPrefix, kW3ContactHonorificSuffix, kW3ContactFormattedName, nil], kW3ContactName, + kW3ContactMiddleName, kW3ContactHonorificPrefix, kW3ContactHonorificSuffix, kW3ContactFormattedName, nil], kW3ContactName, [NSArray arrayWithObjects:kW3ContactStreetAddress, kW3ContactLocality, kW3ContactRegion, - kW3ContactPostalCode, kW3ContactCountry, /*kW3ContactAddressFormatted,*/ nil], kW3ContactAddresses, + kW3ContactPostalCode, kW3ContactCountry, /*kW3ContactAddressFormatted,*/ nil], kW3ContactAddresses, [NSArray arrayWithObjects:kW3ContactOrganizationName, kW3ContactTitle, kW3ContactDepartment, nil], kW3ContactOrganizations, [NSArray arrayWithObjects:kW3ContactFieldType, kW3ContactFieldValue, kW3ContactFieldPrimary, nil], kW3ContactPhoneNumbers, [NSArray arrayWithObjects:kW3ContactFieldType, kW3ContactFieldValue, kW3ContactFieldPrimary, nil], kW3ContactEmails, @@ -228,7 +230,7 @@ - (bool)setFromContactDict:(NSDictionary*)aContact asUpdate:(BOOL)bUpdate NSArray* propArray = [[CDVContact defaultObjectAndProperties] objectForKey:kW3ContactName]; for (id i in propArray) { - if (![(NSString*) i isEqualToString:kW3ContactFormattedName]) { // kW3ContactFormattedName is generated from ABRecordCopyCompositeName() and can't be set + if (![(NSString*)i isEqualToString : kW3ContactFormattedName]) { // kW3ContactFormattedName is generated from ABRecordCopyCompositeName() and can't be set [self setValue:[dict valueForKey:i] forProperty:(ABPropertyID)[(NSNumber*)[[CDVContact defaultW3CtoAB] objectForKey:i] intValue] inRecord:person asUpdate:bUpdate]; } @@ -298,9 +300,9 @@ - (bool)setFromContactDict:(NSDictionary*)aContact asUpdate:(BOOL)bUpdate bRemove = YES; } if ([dict isKindOfClass:[NSDictionary class]] || (bRemove == YES)) { - [self setValue:(bRemove ? @"":[dict valueForKey:@"name"]) forProperty:kABPersonOrganizationProperty inRecord:person asUpdate:bUpdate]; - [self setValue:(bRemove ? @"":[dict valueForKey:kW3ContactTitle]) forProperty:kABPersonJobTitleProperty inRecord:person asUpdate:bUpdate]; - [self setValue:(bRemove ? @"":[dict valueForKey:kW3ContactDepartment]) forProperty:kABPersonDepartmentProperty inRecord:person asUpdate:bUpdate]; + [self setValue:(bRemove ? @"" : [dict valueForKey:@"name"]) forProperty:kABPersonOrganizationProperty inRecord:person asUpdate:bUpdate]; + [self setValue:(bRemove ? @"" : [dict valueForKey:kW3ContactTitle]) forProperty:kABPersonJobTitleProperty inRecord:person asUpdate:bUpdate]; + [self setValue:(bRemove ? @"" : [dict valueForKey:kW3ContactDepartment]) forProperty:kABPersonDepartmentProperty inRecord:person asUpdate:bUpdate]; } } // add dates @@ -658,7 +660,7 @@ - (bool)setMultiValueDictionary:(NSArray*)array forProperty:(ABPropertyID)prop i [dict setObject:setValue forKey:(NSString*)[[CDVContact defaultW3CtoAB] valueForKey:(NSString*)k]]; } else if ((value == nil) || ([value isKindOfClass:[NSString class]] && ([value length] != 0))) { // value not provided in contact dictionary - if prop exists in AB dictionary, preserve it - valueAB = [(__bridge NSDictionary*) existingDictionary valueForKey:[[CDVContact defaultW3CtoAB] valueForKey:k]]; + valueAB = [(__bridge NSDictionary*)existingDictionary valueForKey : [[CDVContact defaultW3CtoAB] valueForKey:k]]; if (valueAB != nil) { [dict setValue:valueAB forKey:[[CDVContact defaultW3CtoAB] valueForKey:k]]; } @@ -893,7 +895,7 @@ - (NSDictionary*)toDictionary:(NSDictionary*)withFields if (data != nil) { [nc setObject:data forKey:kW3ContactName]; } - if ([self.returnFields objectForKey:kW3ContactDisplayName] && ((data == nil) || ([(NSDictionary*) data objectForKey:kW3ContactFormattedName] == [NSNull null]))) { + if ([self.returnFields objectForKey:kW3ContactDisplayName] && ((data == nil) || ([(NSDictionary*)data objectForKey : kW3ContactFormattedName] == [NSNull null]))) { // user asked for displayName which iOS doesn't support but there is no other name data being returned // try and use Composite Name so some name is returned id tryName = (__bridge_transfer NSString*)ABRecordCopyCompositeName(self.record); @@ -1114,7 +1116,7 @@ - (NSObject*)extractMultiValue:(NSString*)propertyId // always set id value = [NSNumber numberWithUnsignedInt:ABMultiValueGetIdentifierAtIndex(multi, i)]; [newDict setObject:(value != nil) ? value:[NSNull null] forKey:kW3ContactFieldId]; - [(NSMutableArray*) valuesArray addObject:newDict]; + [(NSMutableArray*)valuesArray addObject : newDict]; } } else { valuesArray = [NSNull null]; @@ -1188,7 +1190,7 @@ - (NSObject*)extractAddresses } if ([newAddress count] > 0) { // ?? this will always be true since we set id,label,primary field?? - [(NSMutableArray*) addresses addObject:newAddress]; + [(NSMutableArray*)addresses addObject : newAddress]; } CFRelease(dict); } // end of loop through addresses @@ -1244,7 +1246,7 @@ - (NSObject*)extractIms bFound = CFDictionaryGetValueIfPresent(dict, kABPersonInstantMessageServiceKey, (void*)&value); if (bFound && (value != NULL)) { CFRetain(value); - [newDict setObject:(id)[[CDVContact class] convertPropertyLabelToContactType:(__bridge NSString*)value] forKey:kW3ContactFieldType]; + [newDict setObject:(id)[[CDVContact class] convertPropertyLabelToContactType : (__bridge NSString*)value] forKey:kW3ContactFieldType]; CFRelease(value); } else { [newDict setObject:[NSNull null] forKey:kW3ContactFieldType]; @@ -1254,7 +1256,7 @@ - (NSObject*)extractIms id identifier = [NSNumber numberWithUnsignedInt:ABMultiValueGetIdentifierAtIndex(multi, i)]; [newDict setObject:(identifier != nil) ? identifier:[NSNull null] forKey:kW3ContactFieldId]; - [(NSMutableArray*) imArray addObject:newDict]; + [(NSMutableArray*)imArray addObject : newDict]; CFRelease(dict); } } else { @@ -1308,7 +1310,7 @@ - (NSObject*)extractOrganizations [newDict setObject:@"false" forKey:kW3ContactFieldPrimary]; [newDict setObject:[NSNull null] forKey:kW3ContactFieldType]; array = [NSMutableArray arrayWithCapacity:1]; - [(NSMutableArray*) array addObject:newDict]; + [(NSMutableArray*)array addObject : newDict]; } else { array = [NSNull null]; } @@ -1327,7 +1329,7 @@ - (NSObject*)extractPhotos NSData* data = (__bridge NSData*)photoData; // write to temp directory and store URI in photos array // get the temp directory path - NSString* docsPath = [NSTemporaryDirectory ()stringByStandardizingPath]; + NSString* docsPath = [NSTemporaryDirectory()stringByStandardizingPath]; NSError* err = nil; NSString* filePath = [NSString stringWithFormat:@"%@/photo_XXXXX", docsPath]; char template[filePath.length + 1]; diff --git a/CordovaLib/Classes/CDVContacts.h b/CordovaLib/Classes/CDVContacts.h index 17470c0..0342f5b 100755 --- a/CordovaLib/Classes/CDVContacts.h +++ b/CordovaLib/Classes/CDVContacts.h @@ -24,9 +24,9 @@ #import "CDVContact.h" @interface CDVContacts : CDVPlugin + ABPersonViewControllerDelegate, + ABPeoplePickerNavigationControllerDelegate + > { ABAddressBookRef addressBook; } @@ -63,7 +63,7 @@ - (void)newPersonViewController:(ABNewPersonViewController*)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person; - (BOOL)personViewController:(ABPersonViewController*)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person - property :(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifierForValue; + property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifierForValue; /* * search - searches for contacts. Only person records are currently supported. @@ -140,9 +140,9 @@ - (CDVAddressBookAccessError*)initWithCode:(CDVContactError)code; @end -typedef void (^CDVAddressBookWorkerBlock)( - ABAddressBookRef addressBook, - CDVAddressBookAccessError * error +typedef void (^ CDVAddressBookWorkerBlock)( + ABAddressBookRef addressBook, + CDVAddressBookAccessError* error ); @interface CDVAddressBookHelper : NSObject {} diff --git a/CordovaLib/Classes/CDVContacts.m b/CordovaLib/Classes/CDVContacts.m index 3faf6ba..6cb9f08 100755 --- a/CordovaLib/Classes/CDVContacts.m +++ b/CordovaLib/Classes/CDVContacts.m @@ -77,26 +77,26 @@ - (void)newContact:(CDVInvokedUrlCommand*)command CDVAddressBookHelper* abHelper = [[CDVAddressBookHelper alloc] init]; CDVContacts* __weak weakSelf = self; // play it safe to avoid retain cycles - [abHelper createAddressBook: ^(ABAddressBookRef addrBook, CDVAddressBookAccessError * errCode) { - if (addrBook == NULL) { - // permission was denied or other error just return (no error callback) - return; - } - CDVNewContactsController* npController = [[CDVNewContactsController alloc] init]; - npController.addressBook = addrBook; // a CF retaining assign - CFRelease (addrBook); + [abHelper createAddressBook: ^(ABAddressBookRef addrBook, CDVAddressBookAccessError* errCode) { + if (addrBook == NULL) { + // permission was denied or other error just return (no error callback) + return; + } + CDVNewContactsController* npController = [[CDVNewContactsController alloc] init]; + npController.addressBook = addrBook; // a CF retaining assign + CFRelease(addrBook); - npController.newPersonViewDelegate = self; - npController.callbackId = callbackId; + npController.newPersonViewDelegate = self; + npController.callbackId = callbackId; - UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:npController]; + UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:npController]; - if ([weakSelf.viewController respondsToSelector:@selector(presentViewController:::)]) { - [weakSelf.viewController presentViewController:navController animated:YES completion:nil]; - } else { - [weakSelf.viewController presentModalViewController:navController animated:YES]; - } - }]; + if ([weakSelf.viewController respondsToSelector:@selector(presentViewController:::)]) { + [weakSelf.viewController presentViewController:navController animated:YES completion:nil]; + } else { + [weakSelf.viewController presentModalViewController:navController animated:YES]; + } + }]; } - (void)newPersonViewController:(ABNewPersonViewController*)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person @@ -130,48 +130,48 @@ - (void)displayContact:(CDVInvokedUrlCommand*)command CDVAddressBookHelper* abHelper = [[CDVAddressBookHelper alloc] init]; CDVContacts* __weak weakSelf = self; // play it safe to avoid retain cycles - [abHelper createAddressBook: ^(ABAddressBookRef addrBook, CDVAddressBookAccessError * errCode) { - if (addrBook == NULL) { - // permission was denied or other error - return error - CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageToErrorObject:errCode ? errCode.errorCode:UNKNOWN_ERROR]; - [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId]; - return; - } - ABRecordRef rec = ABAddressBookGetPersonWithRecordID (addrBook, recordID); - - if (rec) { - CDVDisplayContactViewController* personController = [[CDVDisplayContactViewController alloc] init]; - personController.displayedPerson = rec; - personController.personViewDelegate = self; - personController.allowsEditing = NO; + [abHelper createAddressBook: ^(ABAddressBookRef addrBook, CDVAddressBookAccessError* errCode) { + if (addrBook == NULL) { + // permission was denied or other error - return error + CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageToErrorObject:errCode ? errCode.errorCode:UNKNOWN_ERROR]; + [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId]; + return; + } + ABRecordRef rec = ABAddressBookGetPersonWithRecordID(addrBook, recordID); - // create this so DisplayContactViewController will have a "back" button. - UIViewController* parentController = [[UIViewController alloc] init]; - UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:parentController]; + if (rec) { + CDVDisplayContactViewController* personController = [[CDVDisplayContactViewController alloc] init]; + personController.displayedPerson = rec; + personController.personViewDelegate = self; + personController.allowsEditing = NO; - [navController pushViewController:personController animated:YES]; + // create this so DisplayContactViewController will have a "back" button. + UIViewController* parentController = [[UIViewController alloc] init]; + UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:parentController]; - if ([self.viewController respondsToSelector:@selector(presentViewController:::)]) { - [self.viewController presentViewController:navController animated:YES completion:nil]; - } else { - [self.viewController presentModalViewController:navController animated:YES]; - } + [navController pushViewController:personController animated:YES]; - if (bEdit) { - // create the editing controller and push it onto the stack - ABPersonViewController* editPersonController = [[ABPersonViewController alloc] init]; - editPersonController.displayedPerson = rec; - editPersonController.personViewDelegate = self; - editPersonController.allowsEditing = YES; - [navController pushViewController:editPersonController animated:YES]; - } + if ([self.viewController respondsToSelector:@selector(presentViewController:::)]) { + [self.viewController presentViewController:navController animated:YES completion:nil]; } else { - // no record, return error - CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:UNKNOWN_ERROR]; - [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId]; + [self.viewController presentModalViewController:navController animated:YES]; } - CFRelease (addrBook); - }]; + + if (bEdit) { + // create the editing controller and push it onto the stack + ABPersonViewController* editPersonController = [[ABPersonViewController alloc] init]; + editPersonController.displayedPerson = rec; + editPersonController.personViewDelegate = self; + editPersonController.allowsEditing = YES; + [navController pushViewController:editPersonController animated:YES]; + } + } else { + // no record, return error + CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:UNKNOWN_ERROR]; + [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId]; + } + CFRelease(addrBook); + }]; } - (BOOL)personViewController:(ABPersonViewController*)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person @@ -284,95 +284,95 @@ - (void)search:(CDVInvokedUrlCommand*)command NSDictionary* findOptions = [command.arguments objectAtIndex:1 withDefault:[NSNull null]]; [self.commandDelegate runInBackground:^{ - // from Apple: Important You must ensure that an instance of ABAddressBookRef is used by only one thread. - // which is why address book is created within the dispatch queue. - // more details here: http: //blog.byadrian.net/2012/05/05/ios-addressbook-framework-and-gcd/ - CDVAddressBookHelper* abHelper = [[CDVAddressBookHelper alloc] init]; - CDVContacts* __weak weakSelf = self; // play it safe to avoid retain cycles - // it gets uglier, block within block..... - [abHelper createAddressBook: ^(ABAddressBookRef addrBook, CDVAddressBookAccessError * errCode) { - if (addrBook == NULL) { - // permission was denied or other error - return error - CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageToErrorObject:errCode ? errCode.errorCode:UNKNOWN_ERROR]; - [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId]; - return; - } + // from Apple: Important You must ensure that an instance of ABAddressBookRef is used by only one thread. + // which is why address book is created within the dispatch queue. + // more details here: http: //blog.byadrian.net/2012/05/05/ios-addressbook-framework-and-gcd/ + CDVAddressBookHelper* abHelper = [[CDVAddressBookHelper alloc] init]; + CDVContacts* __weak weakSelf = self; // play it safe to avoid retain cycles + // it gets uglier, block within block..... + [abHelper createAddressBook: ^(ABAddressBookRef addrBook, CDVAddressBookAccessError* errCode) { + if (addrBook == NULL) { + // permission was denied or other error - return error + CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageToErrorObject:errCode ? errCode.errorCode:UNKNOWN_ERROR]; + [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId]; + return; + } - NSArray* foundRecords = nil; - // get the findOptions values - BOOL multiple = NO; // default is false - NSString* filter = nil; - if (![findOptions isKindOfClass:[NSNull class]]) { - id value = nil; - filter = (NSString*)[findOptions objectForKey:@"filter"]; - value = [findOptions objectForKey:@"multiple"]; - if ([value isKindOfClass:[NSNumber class]]) { - // multiple is a boolean that will come through as an NSNumber - multiple = [(NSNumber*) value boolValue]; - // NSLog(@"multiple is: %d", multiple); - } - } + NSArray* foundRecords = nil; + // get the findOptions values + BOOL multiple = NO; // default is false + NSString* filter = nil; + if (![findOptions isKindOfClass:[NSNull class]]) { + id value = nil; + filter = (NSString*)[findOptions objectForKey:@"filter"]; + value = [findOptions objectForKey:@"multiple"]; + if ([value isKindOfClass:[NSNumber class]]) { + // multiple is a boolean that will come through as an NSNumber + multiple = [(NSNumber*)value boolValue]; + // NSLog(@"multiple is: %d", multiple); + } + } - NSDictionary* returnFields = [[CDVContact class] calcReturnFields:fields]; - - NSMutableArray* matches = nil; - if (!filter || [filter isEqualToString:@""]) { - // get all records - foundRecords = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople (addrBook); - if (foundRecords && [foundRecords count] > 0) { - // create Contacts and put into matches array - // doesn't make sense to ask for all records when multiple == NO but better check - int xferCount = multiple == YES ? [foundRecords count]:1; - matches = [NSMutableArray arrayWithCapacity:xferCount]; - - for (int k = 0; k < xferCount; k++) { - CDVContact* xferContact = [[CDVContact alloc] initFromABRecord:(__bridge ABRecordRef)[foundRecords objectAtIndex:k]]; - [matches addObject:xferContact]; - xferContact = nil; - } - } - } else { - foundRecords = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople (addrBook); - matches = [NSMutableArray arrayWithCapacity:1]; - BOOL bFound = NO; - int testCount = [foundRecords count]; - - for (int j = 0; j < testCount; j++) { - CDVContact* testContact = [[CDVContact alloc] initFromABRecord:(__bridge ABRecordRef)[foundRecords objectAtIndex:j]]; - if (testContact) { - bFound = [testContact foundValue:filter inFields:returnFields]; - if (bFound) { - [matches addObject:testContact]; - } - testContact = nil; - } - } + NSDictionary* returnFields = [[CDVContact class] calcReturnFields:fields]; + + NSMutableArray* matches = nil; + if (!filter || [filter isEqualToString:@""]) { + // get all records + foundRecords = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addrBook); + if (foundRecords && ([foundRecords count] > 0)) { + // create Contacts and put into matches array + // doesn't make sense to ask for all records when multiple == NO but better check + int xferCount = multiple == YES ? [foundRecords count] : 1; + matches = [NSMutableArray arrayWithCapacity:xferCount]; + + for (int k = 0; k < xferCount; k++) { + CDVContact* xferContact = [[CDVContact alloc] initFromABRecord:(__bridge ABRecordRef)[foundRecords objectAtIndex:k]]; + [matches addObject:xferContact]; + xferContact = nil; } - NSMutableArray* returnContacts = [NSMutableArray arrayWithCapacity:1]; - - if (matches != nil && [matches count] > 0) { - // convert to JS Contacts format and return in callback - // - returnFields determines what properties to return - @autoreleasepool { - int count = multiple == YES ? [matches count]:1; - - for (int i = 0; i < count; i++) { - CDVContact* newContact = [matches objectAtIndex:i]; - NSDictionary* aContact = [newContact toDictionary:returnFields]; - [returnContacts addObject:aContact]; - } + } + } else { + foundRecords = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addrBook); + matches = [NSMutableArray arrayWithCapacity:1]; + BOOL bFound = NO; + int testCount = [foundRecords count]; + + for (int j = 0; j < testCount; j++) { + CDVContact* testContact = [[CDVContact alloc] initFromABRecord:(__bridge ABRecordRef)[foundRecords objectAtIndex:j]]; + if (testContact) { + bFound = [testContact foundValue:filter inFields:returnFields]; + if (bFound) { + [matches addObject:testContact]; } + testContact = nil; } - // return found contacts (array is empty if no contacts found) - CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArray:returnContacts]; - [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId]; - // NSLog(@"findCallback string: %@", jsString); - - if (addrBook) { - CFRelease (addrBook); + } + } + NSMutableArray* returnContacts = [NSMutableArray arrayWithCapacity:1]; + + if ((matches != nil) && ([matches count] > 0)) { + // convert to JS Contacts format and return in callback + // - returnFields determines what properties to return + @autoreleasepool { + int count = multiple == YES ? [matches count] : 1; + + for (int i = 0; i < count; i++) { + CDVContact* newContact = [matches objectAtIndex:i]; + NSDictionary* aContact = [newContact toDictionary:returnFields]; + [returnContacts addObject:aContact]; } - }]; - }]; // end of workQueue block + } + } + // return found contacts (array is empty if no contacts found) + CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArray:returnContacts]; + [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId]; + // NSLog(@"findCallback string: %@", jsString); + + if (addrBook) { + CFRelease(addrBook); + } + }]; + }]; // end of workQueue block return; } @@ -383,81 +383,10 @@ - (void)save:(CDVInvokedUrlCommand*)command NSDictionary* contactDict = [command.arguments objectAtIndex:0]; [self.commandDelegate runInBackground:^{ - CDVAddressBookHelper* abHelper = [[CDVAddressBookHelper alloc] init]; - CDVContacts* __weak weakSelf = self; // play it safe to avoid retain cycles - - [abHelper createAddressBook: ^(ABAddressBookRef addrBook, CDVAddressBookAccessError * errorCode) { - CDVPluginResult* result = nil; - if (addrBook == NULL) { - // permission was denied or other error - return error - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:errorCode ? errorCode.errorCode:UNKNOWN_ERROR]; - [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId]; - return; - } - - bool bIsError = FALSE, bSuccess = FALSE; - BOOL bUpdate = NO; - CDVContactError errCode = UNKNOWN_ERROR; - CFErrorRef error; - NSNumber* cId = [contactDict valueForKey:kW3ContactId]; - CDVContact* aContact = nil; - ABRecordRef rec = nil; - if (cId && ![cId isKindOfClass:[NSNull class]]) { - rec = ABAddressBookGetPersonWithRecordID (addrBook, [cId intValue]); - if (rec) { - aContact = [[CDVContact alloc] initFromABRecord:rec]; - bUpdate = YES; - } - } - if (!aContact) { - aContact = [[CDVContact alloc] init]; - } - - bSuccess = [aContact setFromContactDict:contactDict asUpdate:bUpdate]; - if (bSuccess) { - if (!bUpdate) { - bSuccess = ABAddressBookAddRecord (addrBook, [aContact record], &error); - } - if (bSuccess) { - bSuccess = ABAddressBookSave (addrBook, &error); - } - if (!bSuccess) { // need to provide error codes - bIsError = TRUE; - errCode = IO_ERROR; - } else { - // give original dictionary back? If generate dictionary from saved contact, have no returnFields specified - // so would give back all fields (which W3C spec. indicates is not desired) - // for now (while testing) give back saved, full contact - NSDictionary* newContact = [aContact toDictionary:[CDVContact defaultFields]]; - // NSString* contactStr = [newContact JSONRepresentation]; - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:newContact]; - } - } else { - bIsError = TRUE; - errCode = IO_ERROR; - } - CFRelease (addrBook); - - if (bIsError) { - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:errCode]; - } - - if (result) { - [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId]; - } - }]; - }]; // end of queue -} - -- (void)remove:(CDVInvokedUrlCommand*)command -{ - NSString* callbackId = command.callbackId; - NSNumber* cId = [command.arguments objectAtIndex:0]; - - CDVAddressBookHelper* abHelper = [[CDVAddressBookHelper alloc] init]; - CDVContacts* __weak weakSelf = self; // play it safe to avoid retain cycles + CDVAddressBookHelper* abHelper = [[CDVAddressBookHelper alloc] init]; + CDVContacts* __weak weakSelf = self; // play it safe to avoid retain cycles - [abHelper createAddressBook: ^(ABAddressBookRef addrBook, CDVAddressBookAccessError * errorCode) { + [abHelper createAddressBook: ^(ABAddressBookRef addrBook, CDVAddressBookAccessError* errorCode) { CDVPluginResult* result = nil; if (addrBook == NULL) { // permission was denied or other error - return error @@ -467,50 +396,121 @@ - (void)remove:(CDVInvokedUrlCommand*)command } bool bIsError = FALSE, bSuccess = FALSE; + BOOL bUpdate = NO; CDVContactError errCode = UNKNOWN_ERROR; CFErrorRef error; + NSNumber* cId = [contactDict valueForKey:kW3ContactId]; + CDVContact* aContact = nil; ABRecordRef rec = nil; - if (cId && ![cId isKindOfClass:[NSNull class]] && ([cId intValue] != kABRecordInvalidID)) { - rec = ABAddressBookGetPersonWithRecordID (addrBook, [cId intValue]); + if (cId && ![cId isKindOfClass:[NSNull class]]) { + rec = ABAddressBookGetPersonWithRecordID(addrBook, [cId intValue]); if (rec) { - bSuccess = ABAddressBookRemoveRecord (addrBook, rec, &error); - if (!bSuccess) { - bIsError = TRUE; - errCode = IO_ERROR; - } else { - bSuccess = ABAddressBookSave (addrBook, &error); - if (!bSuccess) { - bIsError = TRUE; - errCode = IO_ERROR; - } else { - // set id to null - // [contactDict setObject:[NSNull null] forKey:kW3ContactId]; - // result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary: contactDict]; - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; - // NSString* contactStr = [contactDict JSONRepresentation]; - } - } - } else { - // no record found return error + aContact = [[CDVContact alloc] initFromABRecord:rec]; + bUpdate = YES; + } + } + if (!aContact) { + aContact = [[CDVContact alloc] init]; + } + + bSuccess = [aContact setFromContactDict:contactDict asUpdate:bUpdate]; + if (bSuccess) { + if (!bUpdate) { + bSuccess = ABAddressBookAddRecord(addrBook, [aContact record], &error); + } + if (bSuccess) { + bSuccess = ABAddressBookSave(addrBook, &error); + } + if (!bSuccess) { // need to provide error codes bIsError = TRUE; - errCode = UNKNOWN_ERROR; + errCode = IO_ERROR; + } else { + // give original dictionary back? If generate dictionary from saved contact, have no returnFields specified + // so would give back all fields (which W3C spec. indicates is not desired) + // for now (while testing) give back saved, full contact + NSDictionary* newContact = [aContact toDictionary:[CDVContact defaultFields]]; + // NSString* contactStr = [newContact JSONRepresentation]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:newContact]; } } else { - // invalid contact id provided bIsError = TRUE; - errCode = INVALID_ARGUMENT_ERROR; + errCode = IO_ERROR; } + CFRelease(addrBook); - if (addrBook) { - CFRelease (addrBook); - } if (bIsError) { result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:errCode]; } + if (result) { [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId]; } }]; + }]; // end of queue +} + +- (void)remove:(CDVInvokedUrlCommand*)command +{ + NSString* callbackId = command.callbackId; + NSNumber* cId = [command.arguments objectAtIndex:0]; + + CDVAddressBookHelper* abHelper = [[CDVAddressBookHelper alloc] init]; + CDVContacts* __weak weakSelf = self; // play it safe to avoid retain cycles + + [abHelper createAddressBook: ^(ABAddressBookRef addrBook, CDVAddressBookAccessError* errorCode) { + CDVPluginResult* result = nil; + if (addrBook == NULL) { + // permission was denied or other error - return error + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:errorCode ? errorCode.errorCode:UNKNOWN_ERROR]; + [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId]; + return; + } + + bool bIsError = FALSE, bSuccess = FALSE; + CDVContactError errCode = UNKNOWN_ERROR; + CFErrorRef error; + ABRecordRef rec = nil; + if (cId && ![cId isKindOfClass:[NSNull class]] && ([cId intValue] != kABRecordInvalidID)) { + rec = ABAddressBookGetPersonWithRecordID(addrBook, [cId intValue]); + if (rec) { + bSuccess = ABAddressBookRemoveRecord(addrBook, rec, &error); + if (!bSuccess) { + bIsError = TRUE; + errCode = IO_ERROR; + } else { + bSuccess = ABAddressBookSave(addrBook, &error); + if (!bSuccess) { + bIsError = TRUE; + errCode = IO_ERROR; + } else { + // set id to null + // [contactDict setObject:[NSNull null] forKey:kW3ContactId]; + // result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary: contactDict]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; + // NSString* contactStr = [contactDict JSONRepresentation]; + } + } + } else { + // no record found return error + bIsError = TRUE; + errCode = UNKNOWN_ERROR; + } + } else { + // invalid contact id provided + bIsError = TRUE; + errCode = INVALID_ARGUMENT_ERROR; + } + + if (addrBook) { + CFRelease(addrBook); + } + if (bIsError) { + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:errCode]; + } + if (result) { + [weakSelf.commandDelegate sendPluginResult:result callbackId:callbackId]; + } + }]; return; } @@ -569,24 +569,24 @@ - (void)createAddressBook:(CDVAddressBookWorkerBlock)workerBlock addressBook = ABAddressBookCreateWithOptions(NULL, &error); // NSLog(@"addressBook access: %lu", status); ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { - // callback can occur in background, address book must be accessed on thread it was created on - dispatch_sync (dispatch_get_main_queue (), ^{ + // callback can occur in background, address book must be accessed on thread it was created on + dispatch_sync(dispatch_get_main_queue(), ^{ if (error) { - workerBlock (NULL, [[CDVAddressBookAccessError alloc] initWithCode:UNKNOWN_ERROR]); + workerBlock(NULL, [[CDVAddressBookAccessError alloc] initWithCode:UNKNOWN_ERROR]); } else if (!granted) { - workerBlock (NULL, [[CDVAddressBookAccessError alloc] initWithCode:PERMISSION_DENIED_ERROR]); + workerBlock(NULL, [[CDVAddressBookAccessError alloc] initWithCode:PERMISSION_DENIED_ERROR]); } else { // access granted - workerBlock (addressBook, [[CDVAddressBookAccessError alloc] initWithCode:UNKNOWN_ERROR]); + workerBlock(addressBook, [[CDVAddressBookAccessError alloc] initWithCode:UNKNOWN_ERROR]); } }); - }); + }); } else #endif { // iOS 4 or 5 no checks needed - addressBook = ABAddressBookCreate (); - workerBlock (addressBook, NULL); + addressBook = ABAddressBookCreate(); + workerBlock(addressBook, NULL); } } diff --git a/CordovaLib/Classes/CDVEcho.m b/CordovaLib/Classes/CDVEcho.m index 916e315..c74990d 100755 --- a/CordovaLib/Classes/CDVEcho.m +++ b/CordovaLib/Classes/CDVEcho.m @@ -51,4 +51,11 @@ - (void)echoArrayBuffer:(CDVInvokedUrlCommand*)command [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; } +- (void)echoMultiPart:(CDVInvokedUrlCommand*)command +{ + CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsMultipart:command.arguments]; + + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; +} + @end diff --git a/CordovaLib/Classes/CDVExif.h b/CordovaLib/Classes/CDVExif.h new file mode 100755 index 0000000..3e8adbd --- /dev/null +++ b/CordovaLib/Classes/CDVExif.h @@ -0,0 +1,43 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + +#ifndef CordovaLib_ExifData_h +#define CordovaLib_ExifData_h + +// exif data types +typedef enum exifDataTypes { + EDT_UBYTE = 1, // 8 bit unsigned integer + EDT_ASCII_STRING, // 8 bits containing 7 bit ASCII code, null terminated + EDT_USHORT, // 16 bit unsigned integer + EDT_ULONG, // 32 bit unsigned integer + EDT_URATIONAL, // 2 longs, first is numerator and second is denominator + EDT_SBYTE, + EDT_UNDEFINED, // 8 bits + EDT_SSHORT, + EDT_SLONG, // 32bit signed integer (2's complement) + EDT_SRATIONAL, // 2 SLONGS, first long is numerator, second is denominator + EDT_SINGLEFLOAT, + EDT_DOUBLEFLOAT +} ExifDataTypes; + +// maps integer code for exif data types to width in bytes +static const int DataTypeToWidth[] = {1,1,2,4,8,1,1,2,4,8,4,8}; + +static const int RECURSE_HORIZON = 8; +#endif diff --git a/CordovaLib/Classes/CDVFile.h b/CordovaLib/Classes/CDVFile.h index 4862921..eaf8cbe 100755 --- a/CordovaLib/Classes/CDVFile.h +++ b/CordovaLib/Classes/CDVFile.h @@ -21,6 +21,7 @@ #import "CDVPlugin.h" enum CDVFileError { + NO_ERROR = 0, NOT_FOUND_ERR = 1, SECURITY_ERR = 2, ABORT_ERR = 3, @@ -76,6 +77,7 @@ extern NSString* const kCDVAssetsLibraryPrefix; - (void)readAsText:(CDVInvokedUrlCommand*)command; - (void)readAsDataURL:(CDVInvokedUrlCommand*)command; +- (void)readAsArrayBuffer:(CDVInvokedUrlCommand*)command; - (NSString*)getMimeTypeFromPath:(NSString*)fullPath; - (void)write:(CDVInvokedUrlCommand*)command; - (void)testFileExists:(CDVInvokedUrlCommand*)command; diff --git a/CordovaLib/Classes/CDVFile.m b/CordovaLib/Classes/CDVFile.m index d52405d..8c65270 100755 --- a/CordovaLib/Classes/CDVFile.m +++ b/CordovaLib/Classes/CDVFile.m @@ -52,7 +52,7 @@ - (id)initWithWebView:(UIWebView*)theWebView paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); self.appLibraryPath = [paths objectAtIndex:0]; - self.appTempPath = [NSTemporaryDirectory ()stringByStandardizingPath]; // remove trailing slash from NSTemporaryDirectory() + self.appTempPath = [NSTemporaryDirectory()stringByStandardizingPath]; // remove trailing slash from NSTemporaryDirectory() self.persistentPath = [NSString stringWithFormat:@"/%@", [self.appDocsPath lastPathComponent]]; self.temporaryPath = [NSString stringWithFormat:@"/%@", [self.appTempPath lastPathComponent]]; @@ -164,7 +164,7 @@ - (void)requestFileSystem:(CDVInvokedUrlCommand*)command result = [CDVPluginResult resultWithStatus:CDVCommandStatus_IO_EXCEPTION messageAsInt:QUOTA_EXCEEDED_ERR]; } else { NSMutableDictionary* fileSystem = [NSMutableDictionary dictionaryWithCapacity:2]; - [fileSystem setObject:(type == TEMPORARY ? kW3FileTemporary:kW3FilePersistent) forKey:@"name"]; + [fileSystem setObject:(type == TEMPORARY ? kW3FileTemporary : kW3FilePersistent) forKey:@"name"]; NSDictionary* dirEntry = [self getDirectoryEntry:fullPath isDirectory:YES]; [fileSystem setObject:dirEntry forKey:@"root"]; result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:fileSystem]; @@ -486,7 +486,7 @@ - (void)getMetadata:(CDVInvokedUrlCommand*)command // In this case, we need to use an asynchronous method to retrieve the file. // Because of this, we can't just assign to `result` and send it at the end of the method. // Instead, we return after calling the asynchronous method and send `result` in each of the blocks. - ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset * asset) { + ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset* asset) { if (asset) { // We have the asset! Retrieve the metadata and send it off. NSDate* date = [asset valueForProperty:ALAssetPropertyDate]; @@ -499,7 +499,7 @@ - (void)getMetadata:(CDVInvokedUrlCommand*)command } }; // TODO(maxw): Consider making this a class variable since it's the same every time. - ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError * error) { + ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError* error) { // Retrieving the asset failed for some reason. Send the appropriate error. result = [CDVPluginResult resultWithStatus:CDVCommandStatus_IO_EXCEPTION messageAsString:[error localizedDescription]]; [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; @@ -525,7 +525,7 @@ - (void)getMetadata:(CDVInvokedUrlCommand*)command } else { // didn't get fileAttribs CDVFileError errorCode = ABORT_ERR; - NSLog (@"error getting metadata: %@", [error localizedDescription]); + NSLog(@"error getting metadata: %@", [error localizedDescription]); if ([error code] == NSFileNoSuchFileError) { errorCode = NOT_FOUND_ERR; } @@ -779,7 +779,7 @@ - (void)doCopyMove:(CDVInvokedUrlCommand*)command isCopy:(BOOL)bCopy // In this case, we need to use an asynchronous method to retrieve the file. // Because of this, we can't just assign to `result` and send it at the end of the method. // Instead, we return after calling the asynchronous method and send `result` in each of the blocks. - ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset * asset) { + ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset* asset) { if (asset) { // We have the asset! Get the data and try to copy it over. if (![fileMgr fileExistsAtPath:destRootPath]) { @@ -796,7 +796,7 @@ - (void)doCopyMove:(CDVInvokedUrlCommand*)command isCopy:(BOOL)bCopy // We're good to go! Write the file to the new destination. ALAssetRepresentation* assetRepresentation = [asset defaultRepresentation]; - Byte* buffer = (Byte*)malloc ([assetRepresentation size]); + Byte* buffer = (Byte*)malloc([assetRepresentation size]); NSUInteger bufferSize = [assetRepresentation getBytes:buffer fromOffset:0.0 length:[assetRepresentation size] error:nil]; NSData* data = [NSData dataWithBytesNoCopy:buffer length:bufferSize freeWhenDone:YES]; [data writeToFile:newFullPath atomically:YES]; @@ -808,7 +808,7 @@ - (void)doCopyMove:(CDVInvokedUrlCommand*)command isCopy:(BOOL)bCopy [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; } }; - ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError * error) { + ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError* error) { // Retrieving the asset failed for some reason. Send the appropriate error. result = [CDVPluginResult resultWithStatus:CDVCommandStatus_IO_EXCEPTION messageAsString:[error localizedDescription]]; [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; @@ -953,7 +953,7 @@ - (void)getFileMetadata:(CDVInvokedUrlCommand*)command // In this case, we need to use an asynchronous method to retrieve the file. // Because of this, we can't just assign to `result` and send it at the end of the method. // Instead, we return after calling the asynchronous method and send `result` in each of the blocks. - ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset * asset) { + ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset* asset) { if (asset) { // We have the asset! Populate the dictionary and send it off. NSMutableDictionary* fileInfo = [NSMutableDictionary dictionaryWithCapacity:5]; @@ -975,7 +975,7 @@ - (void)getFileMetadata:(CDVInvokedUrlCommand*)command [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; } }; - ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError * error) { + ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError* error) { // Retrieving the asset failed for some reason. Send the appropriate error. result = [CDVPluginResult resultWithStatus:CDVCommandStatus_IO_EXCEPTION messageAsString:[error localizedDescription]]; [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; @@ -1053,154 +1053,181 @@ - (void)readEntries:(CDVInvokedUrlCommand*)command [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; } +- (void)readFileWithPath:(NSString*)path start:(NSInteger)start end:(NSInteger)end callback:(void (^)(NSData*, NSString* mimeType, CDVFileError))callback +{ + if (path == nil) { + callback(nil, nil, SYNTAX_ERR); + } else { + [self.commandDelegate runInBackground:^ { + if ([path hasPrefix:kCDVAssetsLibraryPrefix]) { + // In this case, we need to use an asynchronous method to retrieve the file. + // Because of this, we can't just assign to `result` and send it at the end of the method. + // Instead, we return after calling the asynchronous method and send `result` in each of the blocks. + ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset* asset) { + if (asset) { + // We have the asset! Get the data and send it off. + ALAssetRepresentation* assetRepresentation = [asset defaultRepresentation]; + Byte* buffer = (Byte*)malloc([assetRepresentation size]); + NSUInteger bufferSize = [assetRepresentation getBytes:buffer fromOffset:0.0 length:[assetRepresentation size] error:nil]; + NSData* data = [NSData dataWithBytesNoCopy:buffer length:bufferSize freeWhenDone:YES]; + NSString* MIMEType = (__bridge_transfer NSString*)UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)[assetRepresentation UTI], kUTTagClassMIMEType); + + callback(data, MIMEType, NO_ERROR); + } else { + callback(nil, nil, NOT_FOUND_ERR); + } + }; + ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError* error) { + // Retrieving the asset failed for some reason. Send the appropriate error. + NSLog(@"Error: %@", error); + callback(nil, nil, SECURITY_ERR); + }; + + ALAssetsLibrary* assetsLibrary = [[ALAssetsLibrary alloc] init]; + [assetsLibrary assetForURL:[NSURL URLWithString:path] resultBlock:resultBlock failureBlock:failureBlock]; + } else { + NSString* mimeType = [self getMimeTypeFromPath:path]; + if (mimeType == nil) { + mimeType = @"*/*"; + } + NSFileHandle* file = [NSFileHandle fileHandleForReadingAtPath:path]; + if (start > 0) { + [file seekToFileOffset:start]; + } + + NSData* readData; + if (end < 0) { + readData = [file readDataToEndOfFile]; + } else { + readData = [file readDataOfLength:(end - start)]; + } + + [file closeFile]; + + callback(readData, mimeType, readData != nil ? NO_ERROR : NOT_FOUND_ERR); + } + }]; + } +} + /* read and return file data * IN: * NSArray* arguments * 0 - NSString* fullPath - * 1 - NSString* encoding - NOT USED, iOS reads and writes using UTF8! - * 2 - NSString* start - OPTIONAL, only provided when not == 0. - * 3 - NSString* end - OPTIONAL, only provided when not == length. + * 1 - NSString* encoding + * 2 - NSString* start + * 3 - NSString* end */ - (void)readAsText:(CDVInvokedUrlCommand*)command { // arguments - NSString* argPath = [command.arguments objectAtIndex:0]; - NSInteger start = 0; - NSInteger end = -1; - - if ([command.arguments count] >= 3) { - start = [[command.arguments objectAtIndex:2] integerValue]; - } - if ([command.arguments count] >= 4) { - end = [[command.arguments objectAtIndex:3] integerValue]; + NSString* path = [command argumentAtIndex:0]; + NSString* encoding = [command argumentAtIndex:1]; + NSInteger start = [[command argumentAtIndex:2] integerValue]; + NSInteger end = [[command argumentAtIndex:3] integerValue]; + + // TODO: implement + if (![@"UTF-8" isEqualToString : encoding]) { + NSLog(@"Only UTF-8 encodings are currently supported by readAsText"); + CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_IO_EXCEPTION messageAsInt:ENCODING_ERR]; + [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; + return; } - // NSString* encoding = [command.arguments objectAtIndex:2]; // not currently used - CDVPluginResult* result = nil; - - NSFileHandle* file = [NSFileHandle fileHandleForReadingAtPath:argPath]; - - if ([argPath hasPrefix:kCDVAssetsLibraryPrefix]) { - // can't read assets-library URLs as text - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_IO_EXCEPTION messageAsInt:NOT_READABLE_ERR]; - } else if (!file) { - // invalid path entry - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_IO_EXCEPTION messageAsInt:NOT_FOUND_ERR]; - } else { - if (start > 0) { - [file seekToFileOffset:start]; - } - - NSData* readData; - if (end < 0) { - readData = [file readDataToEndOfFile]; - } else { - readData = [file readDataOfLength:(end - start)]; + [self readFileWithPath:path start:start end:end callback:^(NSData* data, NSString* mimeType, CDVFileError errorCode) { + CDVPluginResult* result = nil; + if (data != nil) { + NSString* str = [[NSString alloc] initWithBytesNoCopy:(void*)[data bytes] length:[data length] encoding:NSUTF8StringEncoding freeWhenDone:NO]; + // Check that UTF8 conversion did not fail. + if (str != nil) { + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:str]; + result.associatedObject = data; + } else { + errorCode = ENCODING_ERR; + } } - - [file closeFile]; - NSString* pNStrBuff = nil; - if (readData) { - pNStrBuff = [[NSString alloc] initWithBytes:[readData bytes] length:[readData length] encoding:NSUTF8StringEncoding]; - } else { - // return empty string if no data - pNStrBuff = @""; + if (result == nil) { + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_IO_EXCEPTION messageAsInt:errorCode]; } - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:pNStrBuff]; - } - [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; + [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; + }]; } /* Read content of text file and return as base64 encoded data url. * IN: * NSArray* arguments * 0 - NSString* fullPath + * 1 - NSString* start + * 2 - NSString* end * * Determines the mime type from the file extension, returns ENCODING_ERR if mimetype can not be determined. */ - (void)readAsDataURL:(CDVInvokedUrlCommand*)command { - // arguments - NSString* argPath = [command.arguments objectAtIndex:0]; - NSInteger start = 0; - NSInteger end = -1; - - if ([command.arguments count] >= 2) { - start = [[command.arguments objectAtIndex:1] integerValue]; - } - if ([command.arguments count] >= 3) { - end = [[command.arguments objectAtIndex:2] integerValue]; - } + NSString* path = [command argumentAtIndex:0]; + NSInteger start = [[command argumentAtIndex:1] integerValue]; + NSInteger end = [[command argumentAtIndex:2] integerValue]; + + [self readFileWithPath:path start:start end:end callback:^(NSData* data, NSString* mimeType, CDVFileError errorCode) { + CDVPluginResult* result = nil; + if (data != nil) { + // TODO: Would be faster to base64 encode directly to the final string. + NSString* output = [NSString stringWithFormat:@"data:%@;base64,%@", mimeType, [data base64EncodedString]]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:output]; + } else { + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_IO_EXCEPTION messageAsInt:errorCode]; + } - CDVFileError errCode = ABORT_ERR; - __block CDVPluginResult* result = nil; + [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; + }]; +} - if (!argPath) { - errCode = SYNTAX_ERR; - } else if ([argPath hasPrefix:kCDVAssetsLibraryPrefix]) { - // In this case, we need to use an asynchronous method to retrieve the file. - // Because of this, we can't just assign to `result` and send it at the end of the method. - // Instead, we return after calling the asynchronous method and send `result` in each of the blocks. - ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset * asset) { - if (asset) { - // We have the asset! Get the data and send it off. - ALAssetRepresentation* assetRepresentation = [asset defaultRepresentation]; - Byte* buffer = (Byte*)malloc ([assetRepresentation size]); - NSUInteger bufferSize = [assetRepresentation getBytes:buffer fromOffset:0.0 length:[assetRepresentation size] error:nil]; - NSData* data = [NSData dataWithBytesNoCopy:buffer length:bufferSize freeWhenDone:YES]; - NSString* mimeType = [self getMimeTypeFromPath:[assetRepresentation filename]]; - NSString* dataString = [NSString stringWithFormat:@"data:%@;base64,%@", mimeType, [data base64EncodedString]]; - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:dataString]; - [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; - } else { - // We couldn't find the asset. Send the appropriate error. - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_IO_EXCEPTION messageAsInt:NOT_FOUND_ERR]; - [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; - } - }; - ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError * error) { - // Retrieving the asset failed for some reason. Send the appropriate error. - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_IO_EXCEPTION messageAsString:[error localizedDescription]]; - [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; - }; +/* Read content of text file and return as an arraybuffer + * IN: + * NSArray* arguments + * 0 - NSString* fullPath + * 1 - NSString* start + * 2 - NSString* end + */ - ALAssetsLibrary* assetsLibrary = [[ALAssetsLibrary alloc] init]; - [assetsLibrary assetForURL:[NSURL URLWithString:argPath] resultBlock:resultBlock failureBlock:failureBlock]; - return; - } else { - NSString* mimeType = [self getMimeTypeFromPath:argPath]; - if (!mimeType) { - // can't return as data URL if can't figure out the mimeType - errCode = ENCODING_ERR; +- (void)readAsArrayBuffer:(CDVInvokedUrlCommand*)command +{ + NSString* path = [command argumentAtIndex:0]; + NSInteger start = [[command argumentAtIndex:1] integerValue]; + NSInteger end = [[command argumentAtIndex:2] integerValue]; + + [self readFileWithPath:path start:start end:end callback:^(NSData* data, NSString* mimeType, CDVFileError errorCode) { + CDVPluginResult* result = nil; + if (data != nil) { + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArrayBuffer:data]; } else { - NSFileHandle* file = [NSFileHandle fileHandleForReadingAtPath:argPath]; - if (start > 0) { - [file seekToFileOffset:start]; - } + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_IO_EXCEPTION messageAsInt:errorCode]; + } - NSData* readData; - if (end < 0) { - readData = [file readDataToEndOfFile]; - } else { - readData = [file readDataOfLength:(end - start)]; - } + [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; + }]; +} - [file closeFile]; - if (readData) { - NSString* output = [NSString stringWithFormat:@"data:%@;base64,%@", mimeType, [readData base64EncodedString]]; - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:output]; - } else { - errCode = NOT_FOUND_ERR; - } +- (void)readAsBinaryString:(CDVInvokedUrlCommand*)command +{ + NSString* path = [command argumentAtIndex:0]; + NSInteger start = [[command argumentAtIndex:1] integerValue]; + NSInteger end = [[command argumentAtIndex:2] integerValue]; + + [self readFileWithPath:path start:start end:end callback:^(NSData* data, NSString* mimeType, CDVFileError errorCode) { + CDVPluginResult* result = nil; + if (data != nil) { + NSString* payload = [[NSString alloc] initWithBytesNoCopy:(void*)[data bytes] length:[data length] encoding:NSASCIIStringEncoding freeWhenDone:NO]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:payload]; + result.associatedObject = data; + } else { + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_IO_EXCEPTION messageAsInt:errorCode]; } - } - if (!result) { - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:errCode]; - } - // NSLog(@"readAsDataURL return: %@", jsString); - [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; + + [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; + }]; } /* helper function to get the mimeType from the file extension @@ -1219,7 +1246,7 @@ - (NSString*)getMimeTypeFromPath:(NSString*)fullPath mimeType = (__bridge_transfer NSString*)UTTypeCopyPreferredTagWithClass(typeId, kUTTagClassMIMEType); if (!mimeType) { // special case for m4a - if ([(__bridge NSString*) typeId rangeOfString:@"m4a-audio"].location != NSNotFound) { + if ([(__bridge NSString*)typeId rangeOfString : @"m4a-audio"].location != NSNotFound) { mimeType = @"audio/mp4"; } else if ([[fullPath pathExtension] rangeOfString:@"wav"].location != NSNotFound) { mimeType = @"audio/wav"; @@ -1343,7 +1370,7 @@ - (void)testFileExists:(CDVInvokedUrlCommand*)command NSString* appFile = argPath; // [ self getFullPath: argPath]; BOOL bExists = [fMgr fileExistsAtPath:appFile]; - CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:(bExists ? 1:0)]; + CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:(bExists ? 1 : 0)]; [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; } @@ -1359,7 +1386,7 @@ - (void)testDirectoryExists:(CDVInvokedUrlCommand*)command BOOL bIsDir = NO; BOOL bExists = [fMgr fileExistsAtPath:appFile isDirectory:&bIsDir]; - CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:((bExists && bIsDir) ? 1:0)]; + CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:((bExists && bIsDir) ? 1 : 0)]; [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; } diff --git a/CordovaLib/Classes/CDVFileTransfer.h b/CordovaLib/Classes/CDVFileTransfer.h index f96bb7d..d82cdd3 100755 --- a/CordovaLib/Classes/CDVFileTransfer.h +++ b/CordovaLib/Classes/CDVFileTransfer.h @@ -48,10 +48,10 @@ extern NSString* const kOptionsKeyCookie; - (NSMutableDictionary*)createFileTransferError:(int)code AndSource:(NSString*)source AndTarget:(NSString*)target; - (NSMutableDictionary*)createFileTransferError:(int)code - AndSource :(NSString*)source - AndTarget :(NSString*)target - AndHttpStatus :(int)httpStatus - AndBody :(NSString*)body; + AndSource:(NSString*)source + AndTarget:(NSString*)target + AndHttpStatus:(int)httpStatus + AndBody:(NSString*)body; @property (readonly) NSMutableDictionary* activeTransfers; @end diff --git a/CordovaLib/Classes/CDVFileTransfer.m b/CordovaLib/Classes/CDVFileTransfer.m index 4ccdce6..5741aca 100755 --- a/CordovaLib/Classes/CDVFileTransfer.m +++ b/CordovaLib/Classes/CDVFileTransfer.m @@ -52,8 +52,8 @@ static CFIndex WriteDataToStream(NSData* data, CFWriteStreamRef stream) while (totalBytesWritten < bytesToWrite) { CFIndex result = CFWriteStreamWrite(stream, - bytes + totalBytesWritten, - bytesToWrite - totalBytesWritten); + bytes + totalBytesWritten, + bytesToWrite - totalBytesWritten); if (result < 0) { CFStreamError error = CFWriteStreamGetError(stream); NSLog(@"WriteStreamError domain: %ld error: %ld", error.domain, error.error); @@ -190,7 +190,7 @@ - (NSURLRequest*)requestForUploadCommand:(CDVInvokedUrlCommand*)command fileData [postBodyBeforeFile appendData:formBoundaryData]; [postBodyBeforeFile appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; [postBodyBeforeFile appendData:[val dataUsingEncoding:NSUTF8StringEncoding]]; - [postBodyBeforeFile appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; + [postBodyBeforeFile appendData:[@"\r\n" dataUsingEncoding : NSUTF8StringEncoding]]; } [postBodyBeforeFile appendData:formBoundaryData]; @@ -213,22 +213,22 @@ - (NSURLRequest*)requestForUploadCommand:(CDVInvokedUrlCommand*)command fileData [req setHTTPBodyStream:CFBridgingRelease(readStream)]; [self.commandDelegate runInBackground:^{ - if (CFWriteStreamOpen (writeStream)) { - NSData* chunks[] = {postBodyBeforeFile, fileData, postBodyAfterFile}; - int numChunks = sizeof (chunks) / sizeof (chunks[0]); - - for (int i = 0; i < numChunks; ++i) { - CFIndex result = WriteDataToStream (chunks[i], writeStream); - if (result <= 0) { - break; - } + if (CFWriteStreamOpen(writeStream)) { + NSData* chunks[] = {postBodyBeforeFile, fileData, postBodyAfterFile}; + int numChunks = sizeof(chunks) / sizeof(chunks[0]); + + for (int i = 0; i < numChunks; ++i) { + CFIndex result = WriteDataToStream(chunks[i], writeStream); + if (result <= 0) { + break; } - } else { - NSLog (@"FileTransfer: Failed to open writeStream"); } - CFWriteStreamClose (writeStream); - CFRelease (writeStream); - }]; + } else { + NSLog(@"FileTransfer: Failed to open writeStream"); + } + CFWriteStreamClose(writeStream); + CFRelease(writeStream); + }]; } else { [postBodyBeforeFile appendData:fileData]; [postBodyBeforeFile appendData:postBodyAfterFile]; @@ -265,11 +265,11 @@ - (void)fileDataForUploadCommand:(CDVInvokedUrlCommand*)command // return unsupported result for assets-library URLs if ([target hasPrefix:kCDVAssetsLibraryPrefix]) { // Instead, we return after calling the asynchronous method and send `result` in each of the blocks. - ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset * asset) { + ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset* asset) { if (asset) { // We have the asset! Get the data and send it off. ALAssetRepresentation* assetRepresentation = [asset defaultRepresentation]; - Byte* buffer = (Byte*)malloc ([assetRepresentation size]); + Byte* buffer = (Byte*)malloc([assetRepresentation size]); NSUInteger bufferSize = [assetRepresentation getBytes:buffer fromOffset:0.0 length:[assetRepresentation size] error:nil]; NSData* fileData = [NSData dataWithBytesNoCopy:buffer length:bufferSize freeWhenDone:YES]; [self uploadData:fileData command:command]; @@ -279,7 +279,7 @@ - (void)fileDataForUploadCommand:(CDVInvokedUrlCommand*)command [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; } }; - ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError * error) { + ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError* error) { // Retrieving the asset failed for some reason. Send the appropriate error. CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_IO_EXCEPTION messageAsString:[error localizedDescription]]; [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; @@ -291,12 +291,18 @@ - (void)fileDataForUploadCommand:(CDVInvokedUrlCommand*)command } else { // Extract the path part out of a file: URL. NSString* filePath = [target hasPrefix:@"/"] ? [target copy] : [[NSURL URLWithString:target] path]; + if (filePath == nil) { + // We couldn't find the asset. Send the appropriate error. + CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_IO_EXCEPTION messageAsInt:NOT_FOUND_ERR]; + [self.commandDelegate sendPluginResult:result callbackId:command.callbackId]; + return; + } // Memory map the file so that it can be read efficiently even if it is large. NSData* fileData = [NSData dataWithContentsOfFile:filePath options:NSDataReadingMappedIfSafe error:&err]; if (err != nil) { - NSLog (@"Error opening file %@: %@", target, err); + NSLog(@"Error opening file %@: %@", target, err); } [self uploadData:fileData command:command]; } @@ -352,6 +358,7 @@ - (void)download:(CDVInvokedUrlCommand*)command NSString* filePath = [command.arguments objectAtIndex:1]; BOOL trustAllHosts = [[command.arguments objectAtIndex:2 withDefault:[NSNumber numberWithBool:YES]] boolValue]; // allow self-signed certs NSString* objectId = [command.arguments objectAtIndex:3]; + NSDictionary* headers = [command.arguments objectAtIndex:4 withDefault:nil]; // return unsupported result for assets-library URLs if ([filePath hasPrefix:kCDVAssetsLibraryPrefix]) { @@ -388,7 +395,7 @@ - (void)download:(CDVInvokedUrlCommand*)command } NSMutableURLRequest* req = [NSMutableURLRequest requestWithURL:url]; - [self applyRequestHeaders:nil toRequest:req]; + [self applyRequestHeaders:headers toRequest:req]; CDVFileTransferDelegate* delegate = [[CDVFileTransferDelegate alloc] init]; delegate.command = self; diff --git a/CordovaLib/Classes/CDVGlobalization.m b/CordovaLib/Classes/CDVGlobalization.m index 4d960cd..9eb9721 100755 --- a/CordovaLib/Classes/CDVGlobalization.m +++ b/CordovaLib/Classes/CDVGlobalization.m @@ -138,14 +138,14 @@ - (void)dateToString:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)o // create the formatter using the user's current default locale and formats for dates and times CFDateFormatterRef formatter = CFDateFormatterCreate(kCFAllocatorDefault, - currentLocale, - dateStyle, - timeStyle); + currentLocale, + dateStyle, + timeStyle); // if we have a valid date object then call the formatter if (date) { dateString = (__bridge_transfer NSString*)CFDateFormatterCreateStringWithDate(kCFAllocatorDefault, - formatter, - (__bridge CFDateRef)date); + formatter, + (__bridge CFDateRef)date); } // if the date was converted to a string successfully then return the result @@ -227,18 +227,18 @@ - (void)stringToDate:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)o // get the user's default settings for date and time formats CFDateFormatterRef formatter = CFDateFormatterCreate(kCFAllocatorDefault, - currentLocale, - dateStyle, - timeStyle); + currentLocale, + dateStyle, + timeStyle); // set the parsing to be more lenient CFDateFormatterSetProperty(formatter, kCFDateFormatterIsLenient, kCFBooleanTrue); // parse tha date and time string CFDateRef date = CFDateFormatterCreateDateFromString(kCFAllocatorDefault, - formatter, - (__bridge CFStringRef)dateString, - NULL); + formatter, + (__bridge CFStringRef)dateString, + NULL); // if we were able to parse the date then get the date and time components if (date != NULL) { @@ -336,9 +336,9 @@ - (void)getDatePattern:(NSMutableArray*)arguments withDict:(NSMutableDictionary* // get the user's default settings for date and time formats CFDateFormatterRef formatter = CFDateFormatterCreate(kCFAllocatorDefault, - currentLocale, - dateStyle, - timeStyle); + currentLocale, + dateStyle, + timeStyle); // get the date pattern to apply when formatting and parsing CFStringRef datePattern = CFDateFormatterGetFormat(formatter); @@ -415,9 +415,9 @@ - (void)getDateNames:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)o } CFDateFormatterRef formatter = CFDateFormatterCreate(kCFAllocatorDefault, - currentLocale, - kCFDateFormatterFullStyle, - kCFDateFormatterFullStyle); + currentLocale, + kCFDateFormatterFullStyle, + kCFDateFormatterFullStyle); if ((selector == CDV_SELECTOR_MONTHS) && (style == CDV_FORMAT_LONG)) { dataStyle = kCFDateFormatterMonthSymbols; @@ -545,13 +545,13 @@ - (void)numberToString:(NSMutableArray*)arguments withDict:(NSMutableDictionary* } CFNumberFormatterRef formatter = CFNumberFormatterCreate(kCFAllocatorDefault, - currentLocale, - style); + currentLocale, + style); // get the localized string based upon the locale and user preferences NSString* numberString = (__bridge_transfer NSString*)CFNumberFormatterCreateStringWithNumber(kCFAllocatorDefault, - formatter, - (__bridge CFNumberRef)number); + formatter, + (__bridge CFNumberRef)number); if (numberString) { NSDictionary* dictionary = [NSDictionary dictionaryWithObject:numberString forKey:@"value"]; @@ -612,8 +612,8 @@ - (void)stringToNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary* } CFNumberFormatterRef formatter = CFNumberFormatterCreate(kCFAllocatorDefault, - currentLocale, - style); + currentLocale, + style); // we need to make this lenient so as to avoid problems with parsing currencies that have non-breaking space characters if (style == kCFNumberFormatterCurrencyStyle) { @@ -622,10 +622,10 @@ - (void)stringToNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary* // parse againist the largest type to avoid data loss Boolean rc = CFNumberFormatterGetValueFromString(formatter, - (__bridge CFStringRef)numberString, - NULL, - kCFNumberDoubleType, - &doubleValue); + (__bridge CFStringRef)numberString, + NULL, + kCFNumberDoubleType, + &doubleValue); if (rc) { NSDictionary* dictionary = [NSDictionary dictionaryWithObject:[NSNumber numberWithDouble:doubleValue] forKey:@"value"]; @@ -681,8 +681,8 @@ - (void)getNumberPattern:(NSMutableArray*)arguments withDict:(NSMutableDictionar } CFNumberFormatterRef formatter = CFNumberFormatterCreate(kCFAllocatorDefault, - currentLocale, - style); + currentLocale, + style); NSString* numberPattern = (__bridge NSString*)CFNumberFormatterGetFormat(formatter); @@ -749,8 +749,8 @@ - (void)getCurrencyPattern:(NSMutableArray*)arguments withDict:(NSMutableDiction // now set the currency code in the formatter if (rc) { CFNumberFormatterRef formatter = CFNumberFormatterCreate(kCFAllocatorDefault, - currentLocale, - kCFNumberFormatterCurrencyStyle); + currentLocale, + kCFNumberFormatterCurrencyStyle); CFNumberFormatterSetProperty(formatter, kCFNumberFormatterCurrencyCode, (__bridge CFStringRef)currencyCode); CFNumberFormatterSetProperty(formatter, kCFNumberFormatterInternationalCurrencySymbol, (__bridge CFStringRef)currencyCode); diff --git a/CordovaLib/Classes/CDVInAppBrowser.h b/CordovaLib/Classes/CDVInAppBrowser.h index 9ff460a..f63250a 100755 --- a/CordovaLib/Classes/CDVInAppBrowser.h +++ b/CordovaLib/Classes/CDVInAppBrowser.h @@ -20,6 +20,7 @@ #import "CDVPlugin.h" #import "CDVInvokedUrlCommand.h" #import "CDVScreenOrientationDelegate.h" +#import "CDVWebViewDelegate.h" @class CDVInAppBrowserViewController; @@ -27,6 +28,7 @@ - (void)browserLoadStart:(NSURL*)url; - (void)browserLoadStop:(NSURL*)url; +- (void)browserLoadError:(NSError*)error forUrl:(NSURL*)url; - (void)browserExit; @end @@ -47,6 +49,7 @@ NSString* _userAgent; NSString* _prevUserAgent; NSInteger _userAgentLockToken; + CDVWebViewDelegate* _webViewDelegate; } @property (nonatomic, strong) IBOutlet UIWebView* webView; diff --git a/CordovaLib/Classes/CDVInAppBrowser.m b/CordovaLib/Classes/CDVInAppBrowser.m index 14671a5..d001dfd 100755 --- a/CordovaLib/Classes/CDVInAppBrowser.m +++ b/CordovaLib/Classes/CDVInAppBrowser.m @@ -165,7 +165,7 @@ - (void)browserLoadStart:(NSURL*)url { if (self.callbackId != nil) { CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK - messageAsDictionary:@ {@"type":@"loadstart", @"url":[url absoluteString]}]; + messageAsDictionary:@{@"type":@"loadstart", @"url":[url absoluteString]}]; [pluginResult setKeepCallback:[NSNumber numberWithBool:YES]]; [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId]; @@ -176,7 +176,18 @@ - (void)browserLoadStop:(NSURL*)url { if (self.callbackId != nil) { CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK - messageAsDictionary:@ {@"type":@"loadstop", @"url":[url absoluteString]}]; + messageAsDictionary:@{@"type":@"loadstop", @"url":[url absoluteString]}]; + [pluginResult setKeepCallback:[NSNumber numberWithBool:YES]]; + + [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId]; + } +} + +- (void)browserLoadError:(NSError*)error forUrl:(NSURL*)url +{ + if (self.callbackId != nil) { + CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR + messageAsDictionary:@{@"type":@"loaderror", @"url":[url absoluteString], @"code": [NSNumber numberWithInt:error.code], @"message": error.localizedDescription}]; [pluginResult setKeepCallback:[NSNumber numberWithBool:YES]]; [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId]; @@ -187,7 +198,7 @@ - (void)browserExit { if (self.callbackId != nil) { CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK - messageAsDictionary:@ {@"type":@"exit"}]; + messageAsDictionary:@{@"type":@"exit"}]; [pluginResult setKeepCallback:[NSNumber numberWithBool:YES]]; [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId]; @@ -209,6 +220,7 @@ - (id)initWithUserAgent:(NSString*)userAgent prevUserAgent:(NSString*)prevUserAg if (self != nil) { _userAgent = userAgent; _prevUserAgent = prevUserAgent; + _webViewDelegate = [[CDVWebViewDelegate alloc] initWithDelegate:self]; [self createViews]; } @@ -229,7 +241,7 @@ - (void)createViews [self.view addSubview:self.webView]; [self.view sendSubviewToBack:self.webView]; - self.webView.delegate = self; + self.webView.delegate = _webViewDelegate; self.webView.backgroundColor = [UIColor whiteColor]; self.webView.clearsContextBeforeDrawing = YES; @@ -391,10 +403,10 @@ - (void)navigateTo:(NSURL*)url [self.webView loadRequest:request]; } else { [CDVUserAgentUtil acquireLock:^(NSInteger lockToken) { - _userAgentLockToken = lockToken; - [CDVUserAgentUtil setUserAgent:_userAgent lockToken:lockToken]; - [self.webView loadRequest:request]; - }]; + _userAgentLockToken = lockToken; + [CDVUserAgentUtil setUserAgent:_userAgent lockToken:lockToken]; + [self.webView loadRequest:request]; + }]; } } @@ -419,14 +431,18 @@ - (void)webViewDidStartLoad:(UIWebView*)theWebView self.forwardButton.enabled = theWebView.canGoForward; [self.spinner startAnimating]; +} +- (BOOL)webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType +{ if ((self.navigationDelegate != nil) && [self.navigationDelegate respondsToSelector:@selector(browserLoadStart:)]) { - NSURL* url = theWebView.request.URL; + NSURL* url = request.URL; if (url == nil) { url = _requestedURL; } [self.navigationDelegate browserLoadStart:url]; } + return YES; } - (void)webViewDidFinishLoad:(UIWebView*)theWebView @@ -450,7 +466,7 @@ - (void)webViewDidFinishLoad:(UIWebView*)theWebView // from it must pass through its white-list. This *does* break PDFs that // contain links to other remote PDF/websites. // More info at https://issues.apache.org/jira/browse/CB-2225 - BOOL isPDF = [@"true" isEqualToString:[theWebView stringByEvaluatingJavaScriptFromString:@"document.body==null"]]; + BOOL isPDF = [@"true" isEqualToString :[theWebView stringByEvaluatingJavaScriptFromString:@"document.body==null"]]; if (isPDF) { [CDVUserAgentUtil setUserAgent:_prevUserAgent lockToken:_userAgentLockToken]; } @@ -471,6 +487,11 @@ - (void)webView:(UIWebView*)theWebView didFailLoadWithError:(NSError*)error [self.spinner stopAnimating]; self.addressLabel.text = @"Load Error"; + + if ((self.navigationDelegate != nil) && [self.navigationDelegate respondsToSelector:@selector(browserLoadError:forUrl:)]) { + NSURL* url = theWebView.request.URL; + [self.navigationDelegate browserLoadError:error forUrl:url]; + } } #pragma mark CDVScreenOrientationDelegate diff --git a/CordovaLib/Classes/CDVInvokedUrlCommand.h b/CordovaLib/Classes/CDVInvokedUrlCommand.h index 6eb0099..7be8884 100755 --- a/CordovaLib/Classes/CDVInvokedUrlCommand.h +++ b/CordovaLib/Classes/CDVInvokedUrlCommand.h @@ -34,9 +34,9 @@ + (CDVInvokedUrlCommand*)commandFromJson:(NSArray*)jsonEntry; - (id)initWithArguments:(NSArray*)arguments - callbackId :(NSString*)callbackId - className :(NSString*)className - methodName :(NSString*)methodName; + callbackId:(NSString*)callbackId + className:(NSString*)className + methodName:(NSString*)methodName; - (id)initFromJson:(NSArray*)jsonEntry; diff --git a/CordovaLib/Classes/CDVJpegHeaderWriter.h b/CordovaLib/Classes/CDVJpegHeaderWriter.h new file mode 100755 index 0000000..3b43ef0 --- /dev/null +++ b/CordovaLib/Classes/CDVJpegHeaderWriter.h @@ -0,0 +1,62 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + +#import + +@interface CDVJpegHeaderWriter : NSObject { + NSDictionary * SubIFDTagFormatDict; + NSDictionary * IFD0TagFormatDict; +} + +- (NSData*) spliceExifBlockIntoJpeg: (NSData*) jpegdata + withExifBlock: (NSString*) exifstr; +- (NSString*) createExifAPP1 : (NSDictionary*) datadict; +- (NSString*) formattedHexStringFromDecimalNumber: (NSNumber*) numb + withPlaces: (NSNumber*) width; +- (NSString*) formatNumberWithLeadingZeroes: (NSNumber*) numb + withPlaces: (NSNumber*) places; +- (NSString*) decimalToUnsignedRational: (NSNumber*) numb + withResultNumerator: (NSNumber**) numerator + withResultDenominator: (NSNumber**) denominator; +- (void) continuedFraction: (double) val + withFractionList: (NSMutableArray*) fractionlist + withHorizon: (int) horizon; +//- (void) expandContinuedFraction: (NSArray*) fractionlist; +- (void) splitDouble: (double) val + withIntComponent: (int*) rightside + withFloatRemainder: (double*) leftside; +- (NSString*) formatRationalWithNumerator: (NSNumber*) numerator + withDenominator: (NSNumber*) denominator + asSigned: (Boolean) signedFlag; +- (NSString*) hexStringFromData : (NSData*) data; +- (NSNumber*) numericFromHexString : (NSString *) hexstring; + +/* +- (void) readExifMetaData : (NSData*) imgdata; +- (void) spliceImageData : (NSData*) imgdata withExifData: (NSDictionary*) exifdata; +- (void) locateExifMetaData : (NSData*) imgdata; +- (NSString*) createExifAPP1 : (NSDictionary*) datadict; +- (void) createExifDataString : (NSDictionary*) datadict; +- (NSString*) createDataElement : (NSString*) element + withElementData: (NSString*) data + withExternalDataBlock: (NSDictionary*) memblock; +- (NSString*) hexStringFromData : (NSData*) data; +- (NSNumber*) numericFromHexString : (NSString *) hexstring; +*/ +@end diff --git a/CordovaLib/Classes/CDVJpegHeaderWriter.m b/CordovaLib/Classes/CDVJpegHeaderWriter.m new file mode 100755 index 0000000..90c96d2 --- /dev/null +++ b/CordovaLib/Classes/CDVJpegHeaderWriter.m @@ -0,0 +1,522 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + */ + +#import "CDVJpegHeaderWriter.h" +#include "CDVExif.h" + +// tag info shorthand, tagno: tag number, typecode: data type:, components: number of components +#define TAGINF(tagno, typecode, components) [NSArray arrayWithObjects: tagno, typecode, components, nil] + +const uint mJpegId = 0xffd8; // JPEG format marker +const uint mExifMarker = 0xffe1; // APP1 jpeg header marker +const uint mExif = 0x45786966; // ASCII 'Exif', first characters of valid exif header after size +const uint mMotorallaByteAlign = 0x4d4d; // 'MM', motorola byte align, msb first or 'sane' +const uint mIntelByteAlgin = 0x4949; // 'II', Intel byte align, lsb first or 'batshit crazy reverso world' +const uint mTiffLength = 0x2a; // after byte align bits, next to bits are 0x002a(MM) or 0x2a00(II), tiff version number + + +@implementation CDVJpegHeaderWriter + +- (id) init { + self = [super init]; + // supported tags for exif IFD + IFD0TagFormatDict = [[NSDictionary alloc] initWithObjectsAndKeys: + // TAGINF(@"010e", [NSNumber numberWithInt:EDT_ASCII_STRING], @0), @"ImageDescription", + TAGINF(@"0132", [NSNumber numberWithInt:EDT_ASCII_STRING], @20), @"DateTime", + TAGINF(@"010f", [NSNumber numberWithInt:EDT_ASCII_STRING], @0), @"Make", + TAGINF(@"0110", [NSNumber numberWithInt:EDT_ASCII_STRING], @0), @"Model", + TAGINF(@"0131", [NSNumber numberWithInt:EDT_ASCII_STRING], @0), @"Software", + TAGINF(@"011a", [NSNumber numberWithInt:EDT_URATIONAL], @1), @"XResolution", + TAGINF(@"011b", [NSNumber numberWithInt:EDT_URATIONAL], @1), @"YResolution", + // currently supplied outside of Exif data block by UIImagePickerControllerMediaMetadata, this is set manually in CDVCamera.m + /* TAGINF(@"0112", [NSNumber numberWithInt:EDT_USHORT], @1), @"Orientation", + + // rest of the tags are supported by exif spec, but are not specified by UIImagePickerControllerMediaMedadata + // should camera hardware supply these values in future versions, or if they can be derived, ImageHeaderWriter will include them gracefully + TAGINF(@"0128", [NSNumber numberWithInt:EDT_USHORT], @1), @"ResolutionUnit", + TAGINF(@"013e", [NSNumber numberWithInt:EDT_URATIONAL], @2), @"WhitePoint", + TAGINF(@"013f", [NSNumber numberWithInt:EDT_URATIONAL], @6), @"PrimaryChromaticities", + TAGINF(@"0211", [NSNumber numberWithInt:EDT_URATIONAL], @3), @"YCbCrCoefficients", + TAGINF(@"0213", [NSNumber numberWithInt:EDT_USHORT], @1), @"YCbCrPositioning", + TAGINF(@"0214", [NSNumber numberWithInt:EDT_URATIONAL], @6), @"ReferenceBlackWhite", + TAGINF(@"8298", [NSNumber numberWithInt:EDT_URATIONAL], @0), @"Copyright", + + // offset to exif subifd, we determine this dynamically based on the size of the main exif IFD + TAGINF(@"8769", [NSNumber numberWithInt:EDT_ULONG], @1), @"ExifOffset",*/ + nil]; + + + // supported tages for exif subIFD + SubIFDTagFormatDict = [[NSDictionary alloc] initWithObjectsAndKeys: + //TAGINF(@"9000", [NSNumber numberWithInt:], @), @"ExifVersion", + //TAGINF(@"9202",[NSNumber numberWithInt:EDT_URATIONAL],@1), @"ApertureValue", + //TAGINF(@"9203",[NSNumber numberWithInt:EDT_SRATIONAL],@1), @"BrightnessValue", + TAGINF(@"a001",[NSNumber numberWithInt:EDT_USHORT],@1), @"ColorSpace", + TAGINF(@"9004",[NSNumber numberWithInt:EDT_ASCII_STRING],@20), @"DateTimeDigitized", + TAGINF(@"9003",[NSNumber numberWithInt:EDT_ASCII_STRING],@20), @"DateTimeOriginal", + TAGINF(@"a402", [NSNumber numberWithInt:EDT_USHORT], @1), @"ExposureMode", + TAGINF(@"8822", [NSNumber numberWithInt:EDT_USHORT], @1), @"ExposureProgram", + //TAGINF(@"829a", [NSNumber numberWithInt:EDT_URATIONAL], @1), @"ExposureTime", + //TAGINF(@"829d", [NSNumber numberWithInt:EDT_URATIONAL], @1), @"FNumber", + TAGINF(@"9209", [NSNumber numberWithInt:EDT_USHORT], @1), @"Flash", + // FocalLengthIn35mmFilm + TAGINF(@"a405", [NSNumber numberWithInt:EDT_USHORT], @1), @"FocalLenIn35mmFilm", + //TAGINF(@"920a", [NSNumber numberWithInt:EDT_URATIONAL], @1), @"FocalLength", + //TAGINF(@"8827", [NSNumber numberWithInt:EDT_USHORT], @2), @"ISOSpeedRatings", + TAGINF(@"9207", [NSNumber numberWithInt:EDT_USHORT],@1), @"MeteringMode", + // specific to compressed data + TAGINF(@"a002", [NSNumber numberWithInt:EDT_ULONG],@1), @"PixelXDimension", + TAGINF(@"a003", [NSNumber numberWithInt:EDT_ULONG],@1), @"PixelYDimension", + // data type undefined, but this is a DSC camera, so value is always 1, treat as ushort + TAGINF(@"a301", [NSNumber numberWithInt:EDT_USHORT],@1), @"SceneType", + TAGINF(@"a217",[NSNumber numberWithInt:EDT_USHORT],@1), @"SensingMethod", + //TAGINF(@"9201", [NSNumber numberWithInt:EDT_SRATIONAL], @1), @"ShutterSpeedValue", + // specifies location of main subject in scene (x,y,wdith,height) expressed before rotation processing + //TAGINF(@"9214", [NSNumber numberWithInt:EDT_USHORT], @4), @"SubjectArea", + TAGINF(@"a403", [NSNumber numberWithInt:EDT_USHORT], @1), @"WhiteBalance", + nil]; + return self; +} + +- (NSData*) spliceExifBlockIntoJpeg: (NSData*) jpegdata withExifBlock: (NSString*) exifstr { + + CDVJpegHeaderWriter * exifWriter = [[CDVJpegHeaderWriter alloc] init]; + + NSMutableData * exifdata = [NSMutableData dataWithCapacity: [exifstr length]/2]; + int idx; + for (idx = 0; idx+1 < [exifstr length]; idx+=2) { + NSRange range = NSMakeRange(idx, 2); + NSString* hexStr = [exifstr substringWithRange:range]; + NSScanner* scanner = [NSScanner scannerWithString:hexStr]; + unsigned int intValue; + [scanner scanHexInt:&intValue]; + [exifdata appendBytes:&intValue length:1]; + } + + NSMutableData * ddata = [NSMutableData dataWithCapacity: [jpegdata length]]; + NSMakeRange(0,4); + int loc = 0; + bool done = false; + // read the jpeg data until we encounter the app1==0xFFE1 marker + while (loc+1 < [jpegdata length]) { + NSData * blag = [jpegdata subdataWithRange: NSMakeRange(loc,2)]; + if( [[blag description] isEqualToString : @""]) { + // read the APP1 block size bits + NSString * the = [exifWriter hexStringFromData:[jpegdata subdataWithRange: NSMakeRange(loc+2,2)]]; + NSNumber * app1width = [exifWriter numericFromHexString:the]; + //consume the original app1 block + [ddata appendData:exifdata]; + // advance our loc marker past app1 + loc += [app1width intValue] + 2; + done = true; + } else { + if(!done) { + [ddata appendData:blag]; + loc += 2; + } else { + break; + } + } + } + // copy the remaining data + [ddata appendData:[jpegdata subdataWithRange: NSMakeRange(loc,[jpegdata length]-loc)]]; + return ddata; +} + + + +/** + * Create the Exif data block as a hex string + * jpeg uses Application Markers (APP's) as markers for application data + * APP1 is the application marker reserved for exif data + * + * (NSDictionary*) datadict - with subdictionaries marked '{TIFF}' and '{EXIF}' as returned by imagePickerController with a valid + * didFinishPickingMediaWithInfo data dict, under key @"UIImagePickerControllerMediaMetadata" + * + * the following constructs a hex string to Exif specifications, and is therefore brittle + * altering the order of arguments to the string constructors, modifying field sizes or formats, + * and any other minor change will likely prevent the exif data from being read + */ +- (NSString*) createExifAPP1 : (NSDictionary*) datadict { + NSMutableString * app1; // holds finalized product + NSString * exifIFD; // exif information file directory + NSString * subExifIFD; // subexif information file directory + + // FFE1 is the hex APP1 marker code, and will allow client apps to read the data + NSString * app1marker = @"ffe1"; + // SSSS size, to be determined + // EXIF ascii characters followed by 2bytes of zeros + NSString * exifmarker = @"457869660000"; + // Tiff header: 4d4d is motorolla byte align (big endian), 002a is hex for 42 + NSString * tiffheader = @"4d4d002a"; + //first IFD offset from the Tiff header to IFD0. Since we are writing it, we know it's address 0x08 + NSString * ifd0offset = @"00000008"; + + //data labeled as TIFF in UIImagePickerControllerMediaMetaData is part of the EXIF IFD0 portion of APP1 + exifIFD = [self createExifIFDFromDict: [datadict objectForKey:@"{TIFF}"] withFormatDict: IFD0TagFormatDict isIFD0:YES]; + + //data labeled as EXIF in UIImagePickerControllerMediaMetaData is part of the EXIF Sub IFD portion of APP1 + subExifIFD = [self createExifIFDFromDict: [datadict objectForKey:@"{Exif}"] withFormatDict: SubIFDTagFormatDict isIFD0:NO]; + /* + NSLog(@"SUB EXIF IFD %@ WITH SIZE: %d",exifIFD,[exifIFD length]); + + NSLog(@"SUB EXIF IFD %@ WITH SIZE: %d",subExifIFD,[subExifIFD length]); + */ + // construct the complete app1 data block + app1 = [[NSMutableString alloc] initWithFormat: @"%@%04x%@%@%@%@%@", + app1marker, + 16 + ([exifIFD length]/2) + ([subExifIFD length]/2) /*16+[exifIFD length]/2*/, + exifmarker, + tiffheader, + ifd0offset, + exifIFD, + subExifIFD]; + + return app1; +} + +// returns hex string representing a valid exif information file directory constructed from the datadict and formatdict +- (NSString*) createExifIFDFromDict : (NSDictionary*) datadict withFormatDict : (NSDictionary*) formatdict isIFD0 : (BOOL) ifd0flag { + NSArray * datakeys = [datadict allKeys]; // all known data keys + NSArray * knownkeys = [formatdict allKeys]; // only keys in knowkeys are considered for entry in this IFD + NSMutableArray * ifdblock = [[NSMutableArray alloc] initWithCapacity: [datadict count]]; // all ifd entries + NSMutableArray * ifddatablock = [[NSMutableArray alloc] initWithCapacity: [datadict count]]; // data block entries + // ifd0flag = NO; // ifd0 requires a special flag and has offset to next ifd appended to end + + // iterate through known provided data keys + for (int i = 0; i < [datakeys count]; i++) { + NSString * key = [datakeys objectAtIndex:i]; + // don't muck about with unknown keys + if ([knownkeys indexOfObject: key] != NSNotFound) { + // create new IFD entry + NSString * entry = [self createIFDElement: key + withFormat: [formatdict objectForKey:key] + withElementData: [datadict objectForKey:key]]; + // create the IFD entry's data block + NSString * data = [self createIFDElementDataWithFormat: [formatdict objectForKey:key] + withData: [datadict objectForKey:key]]; + if (entry) { + [ifdblock addObject:entry]; + if(!data) { + [ifdblock addObject:@""]; + } else { + [ifddatablock addObject:data]; + } + } + } + } + + NSMutableString * exifstr = [[NSMutableString alloc] initWithCapacity: [ifdblock count] * 24]; + NSMutableString * dbstr = [[NSMutableString alloc] initWithCapacity: 100]; + + int addr=0; // current offset/address in datablock + if (ifd0flag) { + // calculate offset to datablock based on ifd file entry count + addr = 14+(12*([ifddatablock count]+1)); // +1 for tag 0x8769, exifsubifd offset + } else { + // same calculation as above, but no exifsubifd offset + addr = 14+12*[ifddatablock count]; + } + + for (int i = 0; i < [ifdblock count]; i++) { + NSString * entry = [ifdblock objectAtIndex:i]; + NSString * data = [ifddatablock objectAtIndex:i]; + + // check if the data fits into 4 bytes + if( [data length] <= 8) { + // concatenate the entry and the (4byte) data entry into the final IFD entry and append to exif ifd string + [exifstr appendFormat : @"%@%@", entry, data]; + } else { + [exifstr appendFormat : @"%@%08x", entry, addr]; + [dbstr appendFormat: @"%@", data]; + addr+= [data length] / 2; + } + } + + // calculate IFD0 terminal offset tags, currently ExifSubIFD + int entrycount = [ifdblock count]; + if (ifd0flag) { + // 18 accounts for 8769's width + offset to next ifd, 8 accounts for start of header + NSNumber * offset = [NSNumber numberWithInt:[exifstr length] / 2 + [dbstr length] / 2 + 18+8]; + + [self appendExifOffsetTagTo: exifstr + withOffset : offset]; + entrycount++; + } + return [[NSString alloc] initWithFormat: @"%04x%@%@%@", + entrycount, + exifstr, + @"00000000", // offset to next IFD, 0 since there is none + dbstr]; // lastly, the datablock +} + +// Creates an exif formatted exif information file directory entry +- (NSString*) createIFDElement: (NSString*) elementName withFormat: (NSArray*) formtemplate withElementData: (NSString*) data { + //NSArray * fielddata = [formatdict objectForKey: elementName];// format data of desired field + if (formtemplate) { + // format string @"%@%@%@%@", tag number, data format, components, value + NSNumber * dataformat = [formtemplate objectAtIndex:1]; + NSNumber * components = [formtemplate objectAtIndex:2]; + if([components intValue] == 0) { + components = [NSNumber numberWithInt: [data length] * DataTypeToWidth[[dataformat intValue]-1]]; + } + + return [[NSString alloc] initWithFormat: @"%@%@%08x", + [formtemplate objectAtIndex:0], // the field code + [self formatNumberWithLeadingZeroes: dataformat withPlaces: @4], // the data type code + [components intValue]]; // number of components + } + return NULL; +} + +/** + * appends exif IFD0 tag 8769 "ExifOffset" to the string provided + * (NSMutableString*) str - string you wish to append the 8769 tag to: APP1 or IFD0 hex data string + * // TAGINF(@"8769", [NSNumber numberWithInt:EDT_ULONG], @1), @"ExifOffset", + */ +- (void) appendExifOffsetTagTo: (NSMutableString*) str withOffset : (NSNumber*) offset { + NSArray * format = TAGINF(@"8769", [NSNumber numberWithInt:EDT_ULONG], @1); + + NSString * entry = [self createIFDElement: @"ExifOffset" + withFormat: format + withElementData: [offset stringValue]]; + + NSString * data = [self createIFDElementDataWithFormat: format + withData: [offset stringValue]]; + [str appendFormat:@"%@%@", entry, data]; +} + +// formats the Information File Directory Data to exif format +- (NSString*) createIFDElementDataWithFormat: (NSArray*) dataformat withData: (NSString*) data { + NSMutableString * datastr = nil; + NSNumber * tmp = nil; + NSNumber * formatcode = [dataformat objectAtIndex:1]; + NSNumber * num = @0; + NSNumber * denom = @0; + + switch ([formatcode intValue]) { + case EDT_UBYTE: + break; + case EDT_ASCII_STRING: + datastr = [[NSMutableString alloc] init]; + for (int i = 0; i < [data length]; i++) { + [datastr appendFormat:@"%02x",[data characterAtIndex:i]]; + } + if ([datastr length] < 8) { + NSString * format = [NSString stringWithFormat:@"%%0%dd", 8 - [datastr length]]; + [datastr appendFormat:format,0]; + } + return datastr; + case EDT_USHORT: + return [[NSString alloc] initWithFormat : @"%@%@", + [self formattedHexStringFromDecimalNumber: [NSNumber numberWithInt: [data intValue]] withPlaces: @4], + @"0000"]; + case EDT_ULONG: + tmp = [NSNumber numberWithUnsignedLong:[data intValue]]; + return [NSString stringWithFormat : @"%@", + [self formattedHexStringFromDecimalNumber: tmp withPlaces: @8]]; + case EDT_URATIONAL: + return [self decimalToUnsignedRational: [NSNumber numberWithDouble:[data doubleValue]] + withResultNumerator: &num + withResultDenominator: &denom]; + case EDT_SBYTE: + + break; + case EDT_UNDEFINED: + break; // 8 bits + case EDT_SSHORT: + break; + case EDT_SLONG: + break; // 32bit signed integer (2's complement) + case EDT_SRATIONAL: + break; // 2 SLONGS, first long is numerator, second is denominator + case EDT_SINGLEFLOAT: + break; + case EDT_DOUBLEFLOAT: + break; + } + return datastr; +} + +//====================================================================================================================== +// Utility Methods +//====================================================================================================================== + +// creates a formatted little endian hex string from a number and width specifier +- (NSString*) formattedHexStringFromDecimalNumber: (NSNumber*) numb withPlaces: (NSNumber*) width { + NSMutableString * str = [[NSMutableString alloc] initWithCapacity:[width intValue]]; + NSString * formatstr = [[NSString alloc] initWithFormat: @"%%%@%dx", @"0", [width intValue]]; + [str appendFormat:formatstr, [numb intValue]]; + return str; +} + +// format number as string with leading 0's +- (NSString*) formatNumberWithLeadingZeroes: (NSNumber *) numb withPlaces: (NSNumber *) places { + NSNumberFormatter * formatter = [[NSNumberFormatter alloc] init]; + NSString *formatstr = [@"" stringByPaddingToLength:[places unsignedIntegerValue] withString:@"0" startingAtIndex:0]; + [formatter setPositiveFormat:formatstr]; + return [formatter stringFromNumber:numb]; +} + +// approximate a decimal with a rational by method of continued fraction +// can be collasped into decimalToUnsignedRational after testing +- (void) decimalToRational: (NSNumber *) numb + withResultNumerator: (NSNumber**) numerator + withResultDenominator: (NSNumber**) denominator { + NSMutableArray * fractionlist = [[NSMutableArray alloc] initWithCapacity:8]; + + [self continuedFraction: [numb doubleValue] + withFractionList: fractionlist + withHorizon: 8]; + + // simplify complex fraction represented by partial fraction list + [self expandContinuedFraction: fractionlist + withResultNumerator: numerator + withResultDenominator: denominator]; + +} + +// approximate a decimal with an unsigned rational by method of continued fraction +- (NSString*) decimalToUnsignedRational: (NSNumber *) numb + withResultNumerator: (NSNumber**) numerator + withResultDenominator: (NSNumber**) denominator { + NSMutableArray * fractionlist = [[NSMutableArray alloc] initWithCapacity:8]; + + // generate partial fraction list + [self continuedFraction: [numb doubleValue] + withFractionList: fractionlist + withHorizon: 8]; + + // simplify complex fraction represented by partial fraction list + [self expandContinuedFraction: fractionlist + withResultNumerator: numerator + withResultDenominator: denominator]; + + return [self formatFractionList: fractionlist]; +} + +// recursive implementation of decimal approximation by continued fraction +- (void) continuedFraction: (double) val + withFractionList: (NSMutableArray*) fractionlist + withHorizon: (int) horizon { + int whole; + double remainder; + // 1. split term + [self splitDouble: val withIntComponent: &whole withFloatRemainder: &remainder]; + [fractionlist addObject: [NSNumber numberWithInt:whole]]; + + // 2. calculate reciprocal of remainder + if (!remainder) return; // early exit, exact fraction found, avoids recip/0 + double recip = 1 / remainder; + + // 3. exit condition + if ([fractionlist count] > horizon) { + return; + } + + // 4. recurse + [self continuedFraction:recip withFractionList: fractionlist withHorizon: horizon]; + +} + +// expand continued fraction list, creating a single level rational approximation +-(void) expandContinuedFraction: (NSArray*) fractionlist + withResultNumerator: (NSNumber**) numerator + withResultDenominator: (NSNumber**) denominator { + int i = 0; + int den = 0; + int num = 0; + if ([fractionlist count] == 1) { + *numerator = [NSNumber numberWithInt:[[fractionlist objectAtIndex:0] intValue]]; + *denominator = @1; + return; + } + + //begin at the end of the list + i = [fractionlist count] - 1; + num = 1; + den = [[fractionlist objectAtIndex:i] intValue]; + + while (i > 0) { + int t = [[fractionlist objectAtIndex: i-1] intValue]; + num = t * den + num; + if (i==1) { + break; + } else { + t = num; + num = den; + den = t; + } + i--; + } + // set result parameters values + *numerator = [NSNumber numberWithInt: num]; + *denominator = [NSNumber numberWithInt: den]; +} + +// formats expanded fraction list to string matching exif specification +- (NSString*) formatFractionList: (NSArray *) fractionlist { + NSMutableString * str = [[NSMutableString alloc] initWithCapacity:16]; + + if ([fractionlist count] == 1){ + [str appendFormat: @"%08x00000001", [[fractionlist objectAtIndex:0] intValue]]; + } + return str; +} + +// format rational as +- (NSString*) formatRationalWithNumerator: (NSNumber*) numerator withDenominator: (NSNumber*) denominator asSigned: (Boolean) signedFlag { + NSMutableString * str = [[NSMutableString alloc] initWithCapacity:16]; + if (signedFlag) { + long num = [numerator longValue]; + long den = [denominator longValue]; + [str appendFormat: @"%08lx%08lx", num >= 0 ? num : ~ABS(num) + 1, num >= 0 ? den : ~ABS(den) + 1]; + } else { + [str appendFormat: @"%08lx%08lx", [numerator unsignedLongValue], [denominator unsignedLongValue]]; + } + return str; +} + +// split a floating point number into two integer values representing the left and right side of the decimal +- (void) splitDouble: (double) val withIntComponent: (int*) rightside withFloatRemainder: (double*) leftside { + *rightside = val; // convert numb to int representation, which truncates the decimal portion + *leftside = val - *rightside; +} + + +// +- (NSString*) hexStringFromData : (NSData*) data { + //overflow detection + const unsigned char *dataBuffer = [data bytes]; + return [[NSString alloc] initWithFormat: @"%02x%02x", + (unsigned char)dataBuffer[0], + (unsigned char)dataBuffer[1]]; +} + +// convert a hex string to a number +- (NSNumber*) numericFromHexString : (NSString *) hexstring { + NSScanner * scan = NULL; + unsigned int numbuf= 0; + + scan = [NSScanner scannerWithString:hexstring]; + [scan scanHexInt:&numbuf]; + return [NSNumber numberWithInt:numbuf]; +} + +@end diff --git a/CordovaLib/Classes/CDVLocalStorage.h b/CordovaLib/Classes/CDVLocalStorage.h index cc6613f..dec6ab3 100755 --- a/CordovaLib/Classes/CDVLocalStorage.h +++ b/CordovaLib/Classes/CDVLocalStorage.h @@ -34,8 +34,8 @@ + (void)__fixupDatabaseLocationsWithBackupType:(NSString*)backupType; // Visible for testing. + (BOOL)__verifyAndFixDatabaseLocationsWithAppPlistDict:(NSMutableDictionary*)appPlistDict - bundlePath :(NSString*)bundlePath - fileManager :(NSFileManager*)fileManager; + bundlePath:(NSString*)bundlePath + fileManager:(NSFileManager*)fileManager; @end @interface CDVBackupInfo : NSObject diff --git a/CordovaLib/Classes/CDVLocalStorage.m b/CordovaLib/Classes/CDVLocalStorage.m index 68175f1..238d680 100755 --- a/CordovaLib/Classes/CDVLocalStorage.m +++ b/CordovaLib/Classes/CDVLocalStorage.m @@ -35,7 +35,7 @@ - (void)pluginInitialize { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onResignActive) name:UIApplicationWillResignActiveNotification object:nil]; - BOOL cloudBackup = [@"cloud" isEqualToString:self.commandDelegate.settings[@"BackupWebStorage"]]; + BOOL cloudBackup = [@"cloud" isEqualToString : self.commandDelegate.settings[@"BackupWebStorage"]]; self.backupInfo = [[self class] createBackupInfoWithCloudBackup:cloudBackup]; } @@ -64,8 +64,8 @@ + (NSMutableArray*)createBackupInfoWithTargetDir:(NSString*)targetDir backupDir: // ////////// LOCALSTORAGE original = [targetDir stringByAppendingPathComponent:targetDirNests ? @"WebKit/LocalStorage/file__0.localstorage":@"file__0.localstorage"]; - backup = [backupDir stringByAppendingPathComponent:(backupDirNests ? @"WebKit/LocalStorage":@"")]; - backup = [backup stringByAppendingPathComponent:(rename ? @"localstorage.appdata.db":@"file__0.localstorage")]; + backup = [backupDir stringByAppendingPathComponent:(backupDirNests ? @"WebKit/LocalStorage" : @"")]; + backup = [backup stringByAppendingPathComponent:(rename ? @"localstorage.appdata.db" : @"file__0.localstorage")]; backupItem = [[CDVBackupInfo alloc] init]; backupItem.backup = backup; @@ -77,8 +77,8 @@ + (NSMutableArray*)createBackupInfoWithTargetDir:(NSString*)targetDir backupDir: // ////////// WEBSQL MAIN DB original = [targetDir stringByAppendingPathComponent:targetDirNests ? @"WebKit/LocalStorage/Databases.db":@"Databases.db"]; - backup = [backupDir stringByAppendingPathComponent:(backupDirNests ? @"WebKit/LocalStorage":@"")]; - backup = [backup stringByAppendingPathComponent:(rename ? @"websqlmain.appdata.db":@"Databases.db")]; + backup = [backupDir stringByAppendingPathComponent:(backupDirNests ? @"WebKit/LocalStorage" : @"")]; + backup = [backup stringByAppendingPathComponent:(rename ? @"websqlmain.appdata.db" : @"Databases.db")]; backupItem = [[CDVBackupInfo alloc] init]; backupItem.backup = backup; @@ -90,8 +90,8 @@ + (NSMutableArray*)createBackupInfoWithTargetDir:(NSString*)targetDir backupDir: // ////////// WEBSQL DATABASES original = [targetDir stringByAppendingPathComponent:targetDirNests ? @"WebKit/LocalStorage/file__0":@"file__0"]; - backup = [backupDir stringByAppendingPathComponent:(backupDirNests ? @"WebKit/LocalStorage":@"")]; - backup = [backup stringByAppendingPathComponent:(rename ? @"websqldbs.appdata.db":@"file__0")]; + backup = [backupDir stringByAppendingPathComponent:(backupDirNests ? @"WebKit/LocalStorage" : @"")]; + backup = [backup stringByAppendingPathComponent:(rename ? @"websqldbs.appdata.db" : @"file__0")]; backupItem = [[CDVBackupInfo alloc] init]; backupItem.backup = backup; @@ -106,8 +106,8 @@ + (NSMutableArray*)createBackupInfoWithTargetDir:(NSString*)targetDir backupDir: + (NSMutableArray*)createBackupInfoWithCloudBackup:(BOOL)cloudBackup { // create backup info from backup folder to caches folder - NSString* appLibraryFolder = [NSSearchPathForDirectoriesInDomains (NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; - NSString* appDocumentsFolder = [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; + NSString* appLibraryFolder = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; + NSString* appDocumentsFolder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString* cacheFolder = [appLibraryFolder stringByAppendingPathComponent:@"Caches"]; NSString* backupsFolder = [appDocumentsFolder stringByAppendingPathComponent:@"Backups"]; @@ -131,7 +131,7 @@ + (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL*)URL skip:(BOOL)skip return success; } -+ (BOOL)copyFrom:(NSString*)src to:(NSString*)dest error:(NSError * __autoreleasing*)error ++ (BOOL)copyFrom:(NSString*)src to:(NSString*)dest error:(NSError* __autoreleasing*)error { NSFileManager* fileManager = [NSFileManager defaultManager]; @@ -149,7 +149,7 @@ + (BOOL)copyFrom:(NSString*)src to:(NSString*)dest error:(NSError * __autoreleas // generate unique filepath in temp directory CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault); CFStringRef uuidString = CFUUIDCreateString(kCFAllocatorDefault, uuidRef); - NSString* tempBackup = [[NSTemporaryDirectory () stringByAppendingPathComponent:(__bridge NSString*)uuidString] stringByAppendingPathExtension:@"bak"]; + NSString* tempBackup = [[NSTemporaryDirectory() stringByAppendingPathComponent:(__bridge NSString*)uuidString] stringByAppendingPathExtension:@"bak"]; CFRelease(uuidString); CFRelease(uuidRef); @@ -334,8 +334,8 @@ + (void)__restoreLegacyDatabaseLocationsWithBackupType:(NSString*)backupType return; } - NSString* appLibraryFolder = [NSSearchPathForDirectoriesInDomains (NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; - NSString* appDocumentsFolder = [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; + NSString* appLibraryFolder = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; + NSString* appDocumentsFolder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSMutableArray* backupInfo = [NSMutableArray arrayWithCapacity:0]; @@ -386,15 +386,15 @@ - (void)onResignActive backgroundTaskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ [[UIApplication sharedApplication] endBackgroundTask:backgroundTaskID]; backgroundTaskID = UIBackgroundTaskInvalid; - NSLog (@"Background task to backup WebSQL/LocalStorage expired."); + NSLog(@"Background task to backup WebSQL/LocalStorage expired."); }]; CDVLocalStorage __weak* weakSelf = self; [self.commandDelegate runInBackground:^{ - [weakSelf backup:nil]; + [weakSelf backup:nil]; - [[UIApplication sharedApplication] endBackgroundTask:backgroundTaskID]; - backgroundTaskID = UIBackgroundTaskInvalid; - }]; + [[UIApplication sharedApplication] endBackgroundTask:backgroundTaskID]; + backgroundTaskID = UIBackgroundTaskInvalid; + }]; } } diff --git a/CordovaLib/Classes/CDVLocation.h b/CordovaLib/Classes/CDVLocation.h index 7087d43..caf0798 100755 --- a/CordovaLib/Classes/CDVLocation.h +++ b/CordovaLib/Classes/CDVLocation.h @@ -83,11 +83,11 @@ typedef NSUInteger CDVLocationStatus; - (void)startLocation:(BOOL)enableHighAccuracy; - (void)locationManager:(CLLocationManager*)manager - didUpdateToLocation :(CLLocation*)newLocation - fromLocation :(CLLocation*)oldLocation; + didUpdateToLocation:(CLLocation*)newLocation + fromLocation:(CLLocation*)oldLocation; - (void)locationManager:(CLLocationManager*)manager - didFailWithError :(NSError*)error; + didFailWithError:(NSError*)error; - (BOOL)isLocationServicesEnabled; @@ -97,7 +97,7 @@ typedef NSUInteger CDVLocationStatus; - (void)stopHeading:(CDVInvokedUrlCommand*)command; - (void)startHeadingWithFilter:(CLLocationDegrees)filter; - (void)locationManager:(CLLocationManager*)manager - didUpdateHeading :(CLHeading*)heading; + didUpdateHeading:(CLHeading*)heading; - (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager*)manager; diff --git a/CordovaLib/Classes/CDVLocation.m b/CordovaLib/Classes/CDVLocation.m index 07af30e..ed9ec26 100755 --- a/CordovaLib/Classes/CDVLocation.m +++ b/CordovaLib/Classes/CDVLocation.m @@ -591,17 +591,17 @@ @implementation CLLocation (JSONMethods) - (NSString*)JSONRepresentation { return [NSString stringWithFormat: - @"{ timestamp: %.00f, \ + @"{ timestamp: %.00f, \ coords: { latitude: %f, longitude: %f, altitude: %.02f, heading: %.02f, speed: %.02f, accuracy: %.02f, altitudeAccuracy: %.02f } \ }", - [self.timestamp timeIntervalSince1970] * 1000.0, - self.coordinate.latitude, - self.coordinate.longitude, - self.altitude, - self.course, - self.speed, - self.horizontalAccuracy, - self.verticalAccuracy + [self.timestamp timeIntervalSince1970] * 1000.0, + self.coordinate.latitude, + self.coordinate.longitude, + self.altitude, + self.course, + self.speed, + self.horizontalAccuracy, + self.verticalAccuracy ]; } @@ -614,9 +614,9 @@ @implementation NSError (JSONMethods) - (NSString*)JSONRepresentation { return [NSString stringWithFormat: - @"{ code: %d, message: '%@'}", - self.code, - [self localizedDescription] + @"{ code: %d, message: '%@'}", + self.code, + [self localizedDescription] ]; } diff --git a/CordovaLib/Classes/CDVNotification.h b/CordovaLib/Classes/CDVNotification.h index 1eedb54..5b5b89f 100755 --- a/CordovaLib/Classes/CDVNotification.h +++ b/CordovaLib/Classes/CDVNotification.h @@ -26,6 +26,7 @@ - (void)alert:(CDVInvokedUrlCommand*)command; - (void)confirm:(CDVInvokedUrlCommand*)command; +- (void)prompt:(CDVInvokedUrlCommand*)command; - (void)vibrate:(CDVInvokedUrlCommand*)command; @end diff --git a/CordovaLib/Classes/CDVNotification.m b/CordovaLib/Classes/CDVNotification.m index 992239e..821cb9f 100755 --- a/CordovaLib/Classes/CDVNotification.m +++ b/CordovaLib/Classes/CDVNotification.m @@ -20,12 +20,24 @@ Licensed to the Apache Software Foundation (ASF) under one #import "CDVNotification.h" #import "NSDictionary+Extensions.h" +#define DIALOG_TYPE_ALERT @"alert" +#define DIALOG_TYPE_PROMPT @"prompt" + @implementation CDVNotification -- (void)showDialogWithMessage:(NSString*)message title:(NSString*)title buttons:(NSString*)buttons callbackId:(NSString*)callbackId +/* + * showDialogWithMessage - Common method to instantiate the alert view for alert, confirm, and prompt notifications. + * Parameters: + * message The alert view message. + * title The alert view title. + * buttons The array of customized strings for the buttons. + * callbackId The commmand callback id. + * dialogType The type of alert view [alert | prompt]. + */ +- (void)showDialogWithMessage:(NSString*)message title:(NSString*)title buttons:(NSArray*)buttons callbackId:(NSString*)callbackId dialogType:(NSString*)dialogType { CDVAlertView* alertView = [[CDVAlertView alloc] - initWithTitle:title + initWithTitle:title message:message delegate:self cancelButtonTitle:nil @@ -33,11 +45,14 @@ - (void)showDialogWithMessage:(NSString*)message title:(NSString*)title buttons: alertView.callbackId = callbackId; - NSArray* labels = [buttons componentsSeparatedByString:@","]; - int count = [labels count]; + int count = [buttons count]; for (int n = 0; n < count; n++) { - [alertView addButtonWithTitle:[labels objectAtIndex:n]]; + [alertView addButtonWithTitle:[buttons objectAtIndex:n]]; + } + + if ([dialogType isEqualToString:DIALOG_TYPE_PROMPT]) { + alertView.alertViewStyle = UIAlertViewStylePlainTextInput; } [alertView show]; @@ -46,52 +61,54 @@ - (void)showDialogWithMessage:(NSString*)message title:(NSString*)title buttons: - (void)alert:(CDVInvokedUrlCommand*)command { NSString* callbackId = command.callbackId; - NSArray* arguments = command.arguments; - int argc = [arguments count]; - - NSString* message = argc > 0 ? [arguments objectAtIndex:0] : nil; - NSString* title = argc > 1 ? [arguments objectAtIndex:1] : nil; - NSString* buttons = argc > 2 ? [arguments objectAtIndex:2] : nil; - - if (!title) { - title = NSLocalizedString(@"Alert", @"Alert"); - } - if (!buttons) { - buttons = NSLocalizedString(@"OK", @"OK"); - } + NSString* message = [command argumentAtIndex:0]; + NSString* title = [command argumentAtIndex:1]; + NSString* buttons = [command argumentAtIndex:2]; - [self showDialogWithMessage:message title:title buttons:buttons callbackId:callbackId]; + [self showDialogWithMessage:message title:title buttons:@[buttons] callbackId:callbackId dialogType:DIALOG_TYPE_ALERT]; } - (void)confirm:(CDVInvokedUrlCommand*)command { NSString* callbackId = command.callbackId; - NSArray* arguments = command.arguments; - int argc = [arguments count]; + NSString* message = [command argumentAtIndex:0]; + NSString* title = [command argumentAtIndex:1]; + NSArray* buttons = [command argumentAtIndex:2]; - NSString* message = argc > 0 ? [arguments objectAtIndex:0] : nil; - NSString* title = argc > 1 ? [arguments objectAtIndex:1] : nil; - NSString* buttons = argc > 2 ? [arguments objectAtIndex:2] : nil; + [self showDialogWithMessage:message title:title buttons:buttons callbackId:callbackId dialogType:DIALOG_TYPE_ALERT]; +} - if (!title) { - title = NSLocalizedString(@"Confirm", @"Confirm"); - } - if (!buttons) { - buttons = NSLocalizedString(@"OK,Cancel", @"OK,Cancel"); - } +- (void)prompt:(CDVInvokedUrlCommand*)command +{ + NSString* callbackId = command.callbackId; + NSString* message = [command argumentAtIndex:0]; + NSString* title = [command argumentAtIndex:1]; + NSArray* buttons = [command argumentAtIndex:2]; - [self showDialogWithMessage:message title:title buttons:buttons callbackId:callbackId]; + [self showDialogWithMessage:message title:title buttons:buttons callbackId:callbackId dialogType:DIALOG_TYPE_PROMPT]; } /** - Callback invoked when an alert dialog's buttons are clicked. - Passes the index + label back to JS - */ + * Callback invoked when an alert dialog's buttons are clicked. + */ - (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { CDVAlertView* cdvAlertView = (CDVAlertView*)alertView; - CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:++buttonIndex]; - + CDVPluginResult* result; + + // Determine what gets returned to JS based on the alert view type. + if (alertView.alertViewStyle == UIAlertViewStyleDefault) { + // For alert and confirm, return button index as int back to JS. + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:buttonIndex + 1]; + } else { + // For prompt, return button index and input text back to JS. + NSString* value0 = [[alertView textFieldAtIndex:0] text]; + NSDictionary* info = @{ + @"buttonIndex":@(buttonIndex + 1), + @"input1":(value0 ? value0 : [NSNull null]) + }; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:info]; + } [self.commandDelegate sendPluginResult:result callbackId:cdvAlertView.callbackId]; } diff --git a/CordovaLib/Classes/CDVPlugin.h b/CordovaLib/Classes/CDVPlugin.h index f5b50eb..6e25a27 100755 --- a/CordovaLib/Classes/CDVPlugin.h +++ b/CordovaLib/Classes/CDVPlugin.h @@ -23,10 +23,10 @@ #import "NSMutableArray+QueueAdditions.h" #import "CDVCommandDelegate.h" -#define CDVPageDidLoadNotification @"CDVPageDidLoadNotification" -#define CDVPluginHandleOpenURLNotification @"CDVPluginHandleOpenURLNotification" -#define CDVPluginResetNotification @"CDVPluginResetNotification" -#define CDVLocalNotification @"CDVLocalNotification" +NSString* const CDVPageDidLoadNotification; +NSString* const CDVPluginHandleOpenURLNotification; +NSString* const CDVPluginResetNotification; +NSString* const CDVLocalNotification; @interface CDVPlugin : NSObject {} diff --git a/CordovaLib/Classes/CDVPlugin.m b/CordovaLib/Classes/CDVPlugin.m index a42d241..8c932a0 100755 --- a/CordovaLib/Classes/CDVPlugin.m +++ b/CordovaLib/Classes/CDVPlugin.m @@ -19,6 +19,11 @@ Licensed to the Apache Software Foundation (ASF) under one #import "CDVPlugin.h" +NSString* const CDVPageDidLoadNotification = @"CDVPageDidLoadNotification"; +NSString* const CDVPluginHandleOpenURLNotification = @"CDVPluginHandleOpenURLNotification"; +NSString* const CDVPluginResetNotification = @"CDVPluginResetNotification"; +NSString* const CDVLocalNotification = @"CDVLocalNotification"; + @interface CDVPlugin () @property (readwrite, assign) BOOL hasPendingOperation; @@ -41,7 +46,7 @@ - (CDVPlugin*)initWithWebView:(UIWebView*)theWebView [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onAppTerminate) name:UIApplicationWillTerminateNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onMemoryWarning) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleOpenURL:) name:CDVPluginHandleOpenURLNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onReset) name:CDVPluginResetNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onReset) name:CDVPluginResetNotification object:theWebView]; self.webView = theWebView; } @@ -64,7 +69,7 @@ - (void)pluginInitialize // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveLocalNotification:) name:CDVLocalNotification object:nil]; // Added in 2.5.0 - // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pageDidLoad:) name:CDVPageDidLoadNotification object:nil]; + // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pageDidLoad:) name:CDVPageDidLoadNotification object:self.webView]; } - (void)dispose diff --git a/CordovaLib/Classes/CDVPluginResult.h b/CordovaLib/Classes/CDVPluginResult.h index 8683205..11b5377 100755 --- a/CordovaLib/Classes/CDVPluginResult.h +++ b/CordovaLib/Classes/CDVPluginResult.h @@ -37,6 +37,9 @@ typedef enum { @property (nonatomic, strong, readonly) NSNumber* status; @property (nonatomic, strong, readonly) id message; @property (nonatomic, strong) NSNumber* keepCallback; +// This property can be used to scope the lifetime of another object. For example, +// Use it to store the associated NSData when `message` is created using initWithBytesNoCopy. +@property (nonatomic, strong) id associatedObject; - (CDVPluginResult*)init; + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal; @@ -47,6 +50,7 @@ typedef enum { + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsBool:(BOOL)theMessage; + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsDictionary:(NSDictionary*)theMessage; + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsArrayBuffer:(NSData*)theMessage; ++ (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsMultipart:(NSArray*)theMessages; + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageToErrorObject:(int)errorCode; + (void)setVerbose:(BOOL)verbose; @@ -54,6 +58,9 @@ typedef enum { - (void)setKeepCallbackAsBool:(BOOL)bKeepCallback; +- (NSString*)argumentsAsJSON; + +// These methods are used by the legacy plugin return result method - (NSString*)toJSONString; - (NSString*)toSuccessCallbackString:(NSString*)callbackId; - (NSString*)toErrorCallbackString:(NSString*)callbackId; diff --git a/CordovaLib/Classes/CDVPluginResult.m b/CordovaLib/Classes/CDVPluginResult.m index d9ba08f..af7c528 100755 --- a/CordovaLib/Classes/CDVPluginResult.m +++ b/CordovaLib/Classes/CDVPluginResult.m @@ -29,10 +29,40 @@ - (CDVPluginResult*)initWithStatus:(CDVCommandStatus)statusOrdinal message:(id)t @end @implementation CDVPluginResult -@synthesize status, message, keepCallback; +@synthesize status, message, keepCallback, associatedObject; static NSArray* org_apache_cordova_CommandStatusMsgs; +id messageFromArrayBuffer(NSData* data) +{ + return @{ + @"CDVType" : @"ArrayBuffer", + @"data" :[data base64EncodedString] + }; +} + +id massageMessage(id message) +{ + if ([message isKindOfClass:[NSData class]]) { + return messageFromArrayBuffer(message); + } + return message; +} + +id messageFromMultipart(NSArray* theMessages) +{ + NSMutableArray* messages = [NSMutableArray arrayWithArray:theMessages]; + + for (NSUInteger i = 0; i < messages.count; ++i) { + [messages replaceObjectAtIndex:i withObject:massageMessage([messages objectAtIndex:i])]; + } + + return @{ + @"CDVType" : @"MultiPart", + @"messages" : messages + }; +} + + (void)initialize { org_apache_cordova_CommandStatusMsgs = [[NSArray alloc] initWithObjects:@"No result", @@ -101,17 +131,17 @@ + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsDi + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsArrayBuffer:(NSData*)theMessage { - NSDictionary* arrDict = [NSDictionary dictionaryWithObjectsAndKeys: - @"ArrayBuffer", @"CDVType", - [theMessage base64EncodedString], @"data", - nil]; + return [[self alloc] initWithStatus:statusOrdinal message:messageFromArrayBuffer(theMessage)]; +} - return [[self alloc] initWithStatus:statusOrdinal message:arrDict]; ++ (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAsMultipart:(NSArray*)theMessages +{ + return [[self alloc] initWithStatus:statusOrdinal message:messageFromMultipart(theMessages)]; } + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageToErrorObject:(int)errorCode { - NSDictionary* errDict = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:errorCode] forKey:@"code"]; + NSDictionary* errDict = @{@"code" :[NSNumber numberWithInt:errorCode]}; return [[self alloc] initWithStatus:statusOrdinal message:errDict]; } @@ -121,6 +151,19 @@ - (void)setKeepCallbackAsBool:(BOOL)bKeepCallback [self setKeepCallback:[NSNumber numberWithBool:bKeepCallback]]; } +- (NSString*)argumentsAsJSON +{ + id arguments = (self.message == nil ? [NSNull null] : self.message); + NSArray* argumentsWrappedInArray = [NSArray arrayWithObject:arguments]; + + NSString* argumentsJSON = [argumentsWrappedInArray JSONString]; + + argumentsJSON = [argumentsJSON substringWithRange:NSMakeRange(1, [argumentsJSON length] - 2)]; + + return argumentsJSON; +} + +// These methods are used by the legacy plugin return result method - (NSString*)toJSONString { NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys: diff --git a/CordovaLib/Classes/CDVReachability.m b/CordovaLib/Classes/CDVReachability.m index 3c5a48b..89f4ec9 100755 --- a/CordovaLib/Classes/CDVReachability.m +++ b/CordovaLib/Classes/CDVReachability.m @@ -61,18 +61,18 @@ static void CDVPrintReachabilityFlags(SCNetworkReachabilityFlags flags, const ch { #if kShouldPrintReachabilityFlags NSLog(@"Reachability Flag Status: %c%c %c%c%c%c%c%c%c %s\n", - (flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-', - (flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-', - - (flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-', - (flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-', - (flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-', - (flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-', - comment - ); + (flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-', + (flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-', + + (flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-', + (flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-', + (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-', + (flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-', + (flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-', + (flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-', + (flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-', + comment + ); #endif } @@ -90,7 +90,7 @@ static void CDVReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkRe return; } - if (![(__bridge NSObject*) info isKindOfClass:[CDVReachability class]]) { + if (![(__bridge NSObject*)info isKindOfClass :[CDVReachability class]]) { NSLog(@"info was wrong class in ReachabilityCallback"); return; } @@ -214,7 +214,7 @@ - (NetworkStatus)networkStatusForFlags:(SCNetworkReachabilityFlags)flags } if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand) != 0) || - ((flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0))) { + ((flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0))) { // ... and the connection is on-demand (or on-traffic) if the // calling application is using the CFSocketStream or higher APIs diff --git a/CordovaLib/Classes/CDVSound.m b/CordovaLib/Classes/CDVSound.m index 99515d7..88fbbd6 100755 --- a/CordovaLib/Classes/CDVSound.m +++ b/CordovaLib/Classes/CDVSound.m @@ -87,7 +87,7 @@ - (NSURL*)urlForRecording:(NSString*)resourcePath NSLog(@"Will use resource '%@' from the documents folder with path = %@", resourcePath, filePath); } else { // if resourcePath is not from FileSystem put in tmp dir, else attempt to use provided resource path - NSString* tmpPath = [NSTemporaryDirectory ()stringByStandardizingPath]; + NSString* tmpPath = [NSTemporaryDirectory()stringByStandardizingPath]; BOOL isTmp = [resourcePath rangeOfString:tmpPath].location != NSNotFound; BOOL isDoc = [resourcePath rangeOfString:docsPath].location != NSNotFound; if (!isTmp && !isDoc) { @@ -127,7 +127,7 @@ - (NSURL*)urlForPlaying:(NSString*)resourcePath filePath = [self.commandDelegate pathForResource:resourcePath]; if (filePath == nil) { // see if this exists in the documents/temp directory from a previous recording - NSString* testPath = [NSString stringWithFormat:@"%@/%@", [NSTemporaryDirectory ()stringByStandardizingPath], resourcePath]; + NSString* testPath = [NSString stringWithFormat:@"%@/%@", [NSTemporaryDirectory()stringByStandardizingPath], resourcePath]; if ([[NSFileManager defaultManager] fileExistsAtPath:testPath]) { // inefficient as existence will be checked again below but only way to determine if file exists from previous recording filePath = testPath; @@ -385,7 +385,7 @@ - (BOOL)prepareToPlay:(CDVAudioFile*)audioFile withId:(NSString*)mediaId // bug in AVAudioPlayer when playing downloaded data in NSData - we have to download the file and play from disk CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault); CFStringRef uuidString = CFUUIDCreateString(kCFAllocatorDefault, uuidRef); - NSString* filePath = [NSString stringWithFormat:@"%@/%@", [NSTemporaryDirectory ()stringByStandardizingPath], uuidString]; + NSString* filePath = [NSString stringWithFormat:@"%@/%@", [NSTemporaryDirectory()stringByStandardizingPath], uuidString]; CFRelease(uuidString); CFRelease(uuidRef); @@ -458,9 +458,19 @@ - (void)seekToAudio:(CDVInvokedUrlCommand*)command double position = [[command.arguments objectAtIndex:1] doubleValue]; if ((audioFile != nil) && (audioFile.player != nil)) { + NSString* jsString; double posInSeconds = position / 1000; - audioFile.player.currentTime = posInSeconds; - NSString* jsString = [NSString stringWithFormat:@"%@(\"%@\",%d,%f);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_POSITION, posInSeconds]; + if (posInSeconds >= audioFile.player.duration) { + // The seek is past the end of file. Stop media and reset to beginning instead of seeking past the end. + [audioFile.player stop]; + audioFile.player.currentTime = 0; + jsString = [NSString stringWithFormat:@"%@(\"%@\",%d,%.3f);\n%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_POSITION, 0.0, @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_STATE, MEDIA_STOPPED]; + // NSLog(@"seekToEndJsString=%@",jsString); + } else { + audioFile.player.currentTime = posInSeconds; + jsString = [NSString stringWithFormat:@"%@(\"%@\",%d,%f);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_POSITION, posInSeconds]; + // NSLog(@"seekJsString=%@",jsString); + } [self.commandDelegate evalJs:jsString]; } @@ -625,6 +635,7 @@ - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer*)player successfully:(BOOL)fl NSLog(@"Finished playing audio sample '%@'", audioFile.resourcePath); } if (flag) { + audioFile.player.currentTime = 0; jsString = [NSString stringWithFormat:@"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_STATE, MEDIA_STOPPED]; } else { // jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, MEDIA_ERR_DECODE]; diff --git a/CordovaLib/Classes/CDVSplashScreen.h b/CordovaLib/Classes/CDVSplashScreen.h index a0868a0..704ab43 100755 --- a/CordovaLib/Classes/CDVSplashScreen.h +++ b/CordovaLib/Classes/CDVSplashScreen.h @@ -23,7 +23,8 @@ @interface CDVSplashScreen : CDVPlugin { UIActivityIndicatorView* _activityView; UIImageView* _imageView; - UIView* _parentView; + NSString* _curImageName; + BOOL _visible; } - (void)show:(CDVInvokedUrlCommand*)command; diff --git a/CordovaLib/Classes/CDVSplashScreen.m b/CordovaLib/Classes/CDVSplashScreen.m index cba1b53..45889a0 100755 --- a/CordovaLib/Classes/CDVSplashScreen.m +++ b/CordovaLib/Classes/CDVSplashScreen.m @@ -19,29 +19,25 @@ Licensed to the Apache Software Foundation (ASF) under one #import "CDVSplashScreen.h" -#define kSplashScreenStateShow 0 -#define kSplashScreenStateHide 1 - #define kSplashScreenDurationDefault 0.25f @implementation CDVSplashScreen - (void)pluginInitialize { - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pageDidLoad) name:CDVPageDidLoadNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onOrientationWillChange:) name:UIApplicationWillChangeStatusBarOrientationNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pageDidLoad) name:CDVPageDidLoadNotification object:self.webView]; - [self show:nil]; + [self setVisible:YES]; } - (void)show:(CDVInvokedUrlCommand*)command { - [self updateSplashScreenWithState:kSplashScreenStateShow]; + [self setVisible:YES]; } - (void)hide:(CDVInvokedUrlCommand*)command { - [self updateSplashScreenWithState:kSplashScreenStateHide]; + [self setVisible:NO]; } - (void)pageDidLoad @@ -50,16 +46,13 @@ - (void)pageDidLoad // if value is missing, default to yes if ((autoHideSplashScreenValue == nil) || [autoHideSplashScreenValue boolValue]) { - [self hide:nil]; + [self setVisible:NO]; } } -- (void)onOrientationWillChange:(NSNotification*)notification +- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context { - if (_imageView != nil) { - UIInterfaceOrientation orientation = [notification.userInfo[UIApplicationStatusBarOrientationUserInfoKey] intValue]; - [self updateSplashImageForOrientation:orientation]; - } + [self updateImage]; } - (void)createViews @@ -83,43 +76,120 @@ - (void)createViews topActivityIndicatorStyle = UIActivityIndicatorViewStyleGray; } + UIView* parentView = self.viewController.view; + parentView.userInteractionEnabled = NO; // disable user interaction while splashscreen is shown _activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:topActivityIndicatorStyle]; - _activityView.tag = 2; - _activityView.center = self.viewController.view.center; + _activityView.center = CGPointMake(parentView.bounds.size.width / 2, parentView.bounds.size.height / 2); + _activityView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin + | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin; [_activityView startAnimating]; + // Set the frame & image later. _imageView = [[UIImageView alloc] init]; - [self.viewController.view addSubview:_imageView]; - [self.viewController.view.superview addSubview:_activityView]; - [self.viewController.view.superview layoutSubviews]; + [parentView addSubview:_imageView]; + + id showSplashScreenSpinnerValue = [self.commandDelegate.settings objectForKey:@"ShowSplashScreenSpinner"]; + // backwards compatibility - if key is missing, default to true + if ((showSplashScreenSpinnerValue == nil) || [showSplashScreenSpinnerValue boolValue]) { + [parentView addSubview:_activityView]; + } + + // Frame is required when launching in portrait mode. + // Bounds for landscape since it captures the rotation. + [parentView addObserver:self forKeyPath:@"frame" options:0 context:nil]; + [parentView addObserver:self forKeyPath:@"bounds" options:0 context:nil]; + + [self updateImage]; +} + +- (void)destroyViews +{ + [_imageView removeFromSuperview]; + [_activityView removeFromSuperview]; + _imageView = nil; + _activityView = nil; + _curImageName = nil; + + self.viewController.view.userInteractionEnabled = YES; // re-enable user interaction upon completion + [self.viewController.view removeObserver:self forKeyPath:@"frame"]; + [self.viewController.view removeObserver:self forKeyPath:@"bounds"]; } -- (void)updateSplashImageForOrientation:(UIInterfaceOrientation)orientation +// Sets the view's frame and image. +- (void)updateImage { - // IPHONE (default) - NSString* imageName = @"Default"; + UIInterfaceOrientation orientation = self.viewController.interfaceOrientation; + + // Use UILaunchImageFile if specified in plist. Otherwise, use Default. + NSString* imageName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UILaunchImageFile"]; + + if (imageName) { + imageName = [imageName stringByDeletingPathExtension]; + } else { + imageName = @"Default"; + } if (CDV_IsIPhone5()) { imageName = [imageName stringByAppendingString:@"-568h"]; } else if (CDV_IsIPad()) { - // set default to portrait upside down - imageName = @"Default-Portrait"; // @"Default-PortraitUpsideDown.png"; + switch (orientation) { + case UIInterfaceOrientationLandscapeLeft: + case UIInterfaceOrientationLandscapeRight: + imageName = [imageName stringByAppendingString:@"-Landscape"]; + break; + + case UIInterfaceOrientationPortrait: + case UIInterfaceOrientationPortraitUpsideDown: + default: + imageName = [imageName stringByAppendingString:@"-Portrait"]; + break; + } + } + + if (![imageName isEqualToString:_curImageName]) { + UIImage* img = [UIImage imageNamed:imageName]; + _imageView.image = img; + _curImageName = imageName; + } - if (orientation == UIInterfaceOrientationLandscapeLeft) { - imageName = @"Default-Landscape.png"; // @"Default-LandscapeLeft.png"; - } else if (orientation == UIInterfaceOrientationLandscapeRight) { - imageName = @"Default-Landscape.png"; // @"Default-LandscapeRight.png"; + [self updateBounds]; +} + +- (void)updateBounds +{ + UIImage* img = _imageView.image; + CGRect imgBounds = CGRectMake(0, 0, img.size.width, img.size.height); + + CGSize screenSize = [self.viewController.view convertRect:[UIScreen mainScreen].bounds fromView:nil].size; + + // There's a special case when the image is the size of the screen. + if (CGSizeEqualToSize(screenSize, imgBounds.size)) { + CGRect statusFrame = [self.viewController.view convertRect:[UIApplication sharedApplication].statusBarFrame fromView:nil]; + imgBounds.origin.y -= statusFrame.size.height; + } else { + CGRect viewBounds = self.viewController.view.bounds; + CGFloat imgAspect = imgBounds.size.width / imgBounds.size.height; + CGFloat viewAspect = viewBounds.size.width / viewBounds.size.height; + // This matches the behaviour of the native splash screen. + CGFloat ratio; + if (viewAspect > imgAspect) { + ratio = viewBounds.size.width / imgBounds.size.width; + } else { + ratio = viewBounds.size.height / imgBounds.size.height; } + imgBounds.size.height *= ratio; + imgBounds.size.width *= ratio; } - _imageView.image = [UIImage imageNamed:imageName]; - _imageView.frame = CGRectMake(0, 0, _imageView.image.size.width, _imageView.image.size.height); + _imageView.frame = imgBounds; } -- (void)updateSplashScreenWithState:(int)state +- (void)setVisible:(BOOL)visible { - float toAlpha = state == kSplashScreenStateShow ? 1.0f : 0.0f; - BOOL hidden = state == kSplashScreenStateShow ? NO : YES; + if (visible == _visible) { + return; + } + _visible = visible; id fadeSplashScreenValue = [self.commandDelegate.settings objectForKey:@"FadeSplashScreen"]; id fadeSplashScreenDuration = [self.commandDelegate.settings objectForKey:@"FadeSplashScreenDuration"]; @@ -129,45 +199,26 @@ - (void)updateSplashScreenWithState:(int)state if ((fadeSplashScreenValue == nil) || ![fadeSplashScreenValue boolValue]) { fadeDuration = 0; } - if (hidden && (_imageView == nil)) { - return; - } else if (_imageView == nil) { - [self createViews]; - fadeDuration = 0; - } - - if (!hidden) { - [self updateSplashImageForOrientation:self.viewController.interfaceOrientation]; - } - if (fadeDuration == 0) { - [_imageView setHidden:hidden]; - [_activityView setHidden:hidden]; - } else { - if (state == kSplashScreenStateShow) { - // reset states - [_imageView setHidden:NO]; - [_activityView setHidden:NO]; - [_imageView setAlpha:0.0f]; - [_activityView setAlpha:0.0f]; + // Never animate the showing of the splash screen. + if (visible) { + if (_imageView == nil) { + [self createViews]; } - + } else if (fadeDuration == 0) { + [self destroyViews]; + } else { [UIView transitionWithView:self.viewController.view duration:fadeDuration options:UIViewAnimationOptionTransitionNone animations:^(void) { - [_imageView setAlpha:toAlpha]; - [_activityView setAlpha:toAlpha]; - } + [_imageView setAlpha:0]; + [_activityView setAlpha:0]; + } + completion:^(BOOL finished) { - if (state == kSplashScreenStateHide) { - // Clean-up resources. - [_imageView removeFromSuperview]; - [_activityView removeFromSuperview]; - _imageView = nil; - _activityView = nil; - } - }]; + [self destroyViews]; + }]; } } diff --git a/CordovaLib/Classes/CDVURLProtocol.m b/CordovaLib/Classes/CDVURLProtocol.m index 1959c77..afc10de 100755 --- a/CordovaLib/Classes/CDVURLProtocol.m +++ b/CordovaLib/Classes/CDVURLProtocol.m @@ -31,7 +31,7 @@ @interface CDVHTTPURLResponse : NSHTTPURLResponse @property (nonatomic) NSInteger statusCode; @end -static CDVWhitelist * gWhitelist = nil; +static CDVWhitelist* gWhitelist = nil; // Contains a set of NSNumbers of addresses of controllers. It doesn't store // the actual pointer to avoid retaining. static NSMutableSet* gRegisteredControllers = nil; @@ -159,12 +159,12 @@ - (void)startLoading [self sendResponseWithResponseCode:200 data:nil mimeType:nil]; return; } else if ([[url absoluteString] hasPrefix:kCDVAssetsLibraryPrefix]) { - ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset * asset) { + ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset* asset) { if (asset) { // We have the asset! Get the data and send it along. ALAssetRepresentation* assetRepresentation = [asset defaultRepresentation]; - NSString* MIMEType = (__bridge_transfer NSString*)UTTypeCopyPreferredTagWithClass ((__bridge CFStringRef)[assetRepresentation UTI], kUTTagClassMIMEType); - Byte* buffer = (Byte*)malloc ([assetRepresentation size]); + NSString* MIMEType = (__bridge_transfer NSString*)UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)[assetRepresentation UTI], kUTTagClassMIMEType); + Byte* buffer = (Byte*)malloc([assetRepresentation size]); NSUInteger bufferSize = [assetRepresentation getBytes:buffer fromOffset:0.0 length:[assetRepresentation size] error:nil]; NSData* data = [NSData dataWithBytesNoCopy:buffer length:bufferSize freeWhenDone:YES]; [self sendResponseWithResponseCode:200 data:data mimeType:MIMEType]; @@ -173,7 +173,7 @@ - (void)startLoading [self sendResponseWithResponseCode:404 data:nil mimeType:nil]; } }; - ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError * error) { + ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError* error) { // Retrieving the asset failed for some reason. Send an error. [self sendResponseWithResponseCode:401 data:nil mimeType:nil]; }; @@ -202,7 +202,7 @@ - (void)sendResponseWithResponseCode:(NSInteger)statusCode data:(NSData*)data mi if (mimeType == nil) { mimeType = @"text/plain"; } - NSString* encodingName = [@"text/plain" isEqualToString:mimeType] ? @"UTF-8" : nil; + NSString* encodingName = [@"text/plain" isEqualToString : mimeType] ? @"UTF-8" : nil; CDVHTTPURLResponse* response = [[CDVHTTPURLResponse alloc] initWithURL:[[self request] URL] MIMEType:mimeType diff --git a/CordovaLib/Classes/CDVUserAgentUtil.m b/CordovaLib/Classes/CDVUserAgentUtil.m index 5c43c51..9923d47 100755 --- a/CordovaLib/Classes/CDVUserAgentUtil.m +++ b/CordovaLib/Classes/CDVUserAgentUtil.m @@ -96,7 +96,7 @@ + (void)releaseLock:(NSInteger*)lockToken void (^block)() = [gPendingSetUserAgentBlocks objectAtIndex:0]; [gPendingSetUserAgentBlocks removeObjectAtIndex:0]; gCurrentLockToken = ++gNextLockToken; - NSLog (@"Gave lock %d", gCurrentLockToken); + NSLog(@"Gave lock %d", gCurrentLockToken); block(gCurrentLockToken); } else { gCurrentLockToken = 0; diff --git a/CordovaLib/Classes/CDVViewController.h b/CordovaLib/Classes/CDVViewController.h index 82e22f6..2338baf 100755 --- a/CordovaLib/Classes/CDVViewController.h +++ b/CordovaLib/Classes/CDVViewController.h @@ -22,15 +22,14 @@ #import "CDVAvailability.h" #import "CDVInvokedUrlCommand.h" #import "CDVCommandDelegate.h" +#import "CDVCommandQueue.h" #import "CDVWhitelist.h" #import "CDVScreenOrientationDelegate.h" - -@class CDVCommandQueue; -@class CDVCommandDelegateImpl; +#import "CDVPlugin.h" @interface CDVViewController : UIViewController { @protected - CDVCommandDelegateImpl* _commandDelegate; + id _commandDelegate; @protected CDVCommandQueue* _commandQueue; NSString* _userAgent; @@ -49,7 +48,7 @@ @property (nonatomic, readwrite, copy) NSString* wwwFolderName; @property (nonatomic, readwrite, copy) NSString* startPage; @property (nonatomic, readonly, strong) CDVCommandQueue* commandQueue; -@property (nonatomic, readonly, strong) CDVCommandDelegateImpl* commandDelegate; +@property (nonatomic, readonly, strong) id commandDelegate; @property (nonatomic, readonly) NSString* userAgent; + (NSDictionary*)getBundlePlist:(NSString*)plistName; @@ -67,6 +66,7 @@ - (id)getCommandInstance:(NSString*)pluginName; - (void)registerPlugin:(CDVPlugin*)plugin withClassName:(NSString*)className; +- (void)registerPlugin:(CDVPlugin*)plugin withPluginName:(NSString*)pluginName; - (BOOL)URLisAllowed:(NSURL*)url; diff --git a/CordovaLib/Classes/CDVViewController.m b/CordovaLib/Classes/CDVViewController.m index bec716d..c7ad01b 100755 --- a/CordovaLib/Classes/CDVViewController.m +++ b/CordovaLib/Classes/CDVViewController.m @@ -19,7 +19,6 @@ Licensed to the Apache Software Foundation (ASF) under one #import #import "CDV.h" -#import "CDVCommandQueue.h" #import "CDVCommandDelegateImpl.h" #import "CDVConfigParser.h" #import "CDVUserAgentUtil.h" @@ -103,6 +102,48 @@ - (id)init return self; } +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + + NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; + [nc addObserver:self + selector:@selector(keyboardWillShowOrHide:) + name:UIKeyboardWillShowNotification + object:nil]; + [nc addObserver:self + selector:@selector(keyboardWillShowOrHide:) + name:UIKeyboardWillHideNotification + object:nil]; +} + +- (void)viewWillDisappear:(BOOL)animated +{ + [super viewWillDisappear:animated]; + + NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; + [nc removeObserver:self name:UIKeyboardWillShowNotification object:nil]; + [nc removeObserver:self name:UIKeyboardWillHideNotification object:nil]; +} + +- (void)keyboardWillShowOrHide:(NSNotification*)notif +{ + if (![@"true" isEqualToString:self.settings[@"KeyboardShrinksView"]]) { + return; + } + BOOL showEvent = [notif.name isEqualToString:UIKeyboardWillShowNotification]; + + CGRect keyboardFrame = [notif.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; + keyboardFrame = [self.view convertRect:keyboardFrame fromView:nil]; + + CGRect newFrame = self.view.bounds; + if (showEvent) { + newFrame.size.height -= keyboardFrame.size.height; + } + self.webView.frame = newFrame; + self.webView.scrollView.contentInset = UIEdgeInsetsMake(0, 0, -keyboardFrame.size.height, 0); +} + - (void)printDeprecationNotice { if (!IsAtLeastiOSVersion(@"5.0")) { @@ -208,9 +249,6 @@ - (void)viewDidLoad id backupWebStorage = self.settings[@"BackupWebStorage"]; if ([backupWebStorage isKindOfClass:[NSString class]]) { backupWebStorageType = backupWebStorage; - } else if ([backupWebStorage isKindOfClass:[NSNumber class]]) { - NSLog(@"Deprecated: BackupWebStorage boolean property is a string property now (none, local, cloud). A boolean value of 'true' will be mapped to 'cloud'. Consult the docs: http://docs.cordova.io/en/edge/guide_project-settings_ios_index.md.html#Project%%20Settings%%20for%%20iOS"); - backupWebStorageType = [(NSNumber*) backupWebStorage boolValue] ? @"cloud" : @"none"; } self.settings[@"BackupWebStorage"] = backupWebStorageType; @@ -231,6 +269,10 @@ - (void)viewDidLoad if ([self.settings objectForKey:@"MediaPlaybackRequiresUserAction"]) { mediaPlaybackRequiresUserAction = [(NSNumber*)[settings objectForKey:@"MediaPlaybackRequiresUserAction"] boolValue]; } + BOOL hideKeyboardFormAccessoryBar = NO; // default value + if ([self.settings objectForKey:@"HideKeyboardFormAccessoryBar"]) { + hideKeyboardFormAccessoryBar = [(NSNumber*)[settings objectForKey:@"HideKeyboardFormAccessoryBar"] boolValue]; + } self.webView.scalesPageToFit = [enableViewportScale boolValue]; @@ -239,15 +281,27 @@ - (void)viewDidLoad */ if ([enableLocation boolValue]) { + NSLog(@"Deprecated: The 'EnableLocation' boolean property is deprecated in 2.5.0, and will be removed in 3.0.0. Use the 'onload' boolean attribute (of the CDVLocation plugin."); [[self.commandDelegate getCommandInstance:@"Geolocation"] getLocation:[CDVInvokedUrlCommand new]]; } + if (hideKeyboardFormAccessoryBar) { + __weak CDVViewController* weakSelf = self; + [[NSNotificationCenter defaultCenter] addObserverForName:UIKeyboardWillShowNotification + object:nil + queue:[NSOperationQueue mainQueue] + usingBlock:^(NSNotification * notification) { + // we can't hide it here because the accessory bar hasn't been created yet, so we delay on the queue + [weakSelf performSelector:@selector(hideKeyboardFormAccessoryBar) withObject:nil afterDelay:0]; + }]; + } + /* * Fire up CDVLocalStorage to work-around WebKit storage limitations: on all iOS 5.1+ versions for local-only backups, but only needed on iOS 5.1 for cloud backup. */ - if (IsAtLeastiOSVersion(@"5.1") && (([backupWebStorageType isEqualToString:@"local"]) || - ([backupWebStorageType isEqualToString:@"cloud"] && !IsAtLeastiOSVersion(@"6.0")))) { - [self registerPlugin:[[CDVLocalStorage alloc] initWithWebView:self.webView] withClassName:NSStringFromClass([CDVLocalStorage class])]; + if (IsAtLeastiOSVersion (@"5.1") && (([backupWebStorageType isEqualToString:@"local"]) || + ([backupWebStorageType isEqualToString:@"cloud"] && !IsAtLeastiOSVersion (@"6.0")))) { + [self registerPlugin:[[CDVLocalStorage alloc] initWithWebView:self.webView] withClassName:NSStringFromClass ([CDVLocalStorage class])]; } /* @@ -260,12 +314,19 @@ - (void)viewDidLoad self.webView.mediaPlaybackRequiresUserAction = NO; } - // UIWebViewBounce property - defaults to true - NSNumber* bouncePreference = [self.settings objectForKey:@"UIWebViewBounce"]; - BOOL bounceAllowed = (bouncePreference == nil || [bouncePreference boolValue]); + // By default, overscroll bouncing is allowed. + // UIWebViewBounce has been renamed to DisallowOverscroll, but both are checked. + BOOL bounceAllowed = YES; + NSNumber* disallowOverscroll = [self.settings objectForKey:@"DisallowOverscroll"]; + if (disallowOverscroll == nil) { + NSNumber* bouncePreference = [self.settings objectForKey:@"UIWebViewBounce"]; + bounceAllowed = (bouncePreference == nil || [bouncePreference boolValue]); + } else { + bounceAllowed = ![disallowOverscroll boolValue]; + } // prevent webView from bouncing - // based on UIWebViewBounce key in config.xml + // based on the DisallowOverscroll/UIWebViewBounce key in config.xml if (!bounceAllowed) { if ([self.webView respondsToSelector:@selector(scrollView)]) { ((UIScrollView*)[self.webView scrollView]).bounces = NO; @@ -281,7 +342,7 @@ - (void)viewDidLoad /* * iOS 6.0 UIWebView properties */ - if (IsAtLeastiOSVersion(@"6.0")) { + if (IsAtLeastiOSVersion (@"6.0")) { BOOL keyboardDisplayRequiresUserAction = YES; // KeyboardDisplayRequiresUserAction - defaults to YES if ([self.settings objectForKey:@"KeyboardDisplayRequiresUserAction"] != nil) { if ([self.settings objectForKey:@"KeyboardDisplayRequiresUserAction"]) { @@ -330,6 +391,34 @@ - (void)viewDidLoad }]; } +- (void)hideKeyboardFormAccessoryBar +{ + NSArray* windows = [[UIApplication sharedApplication] windows]; + + for (UIWindow* window in windows) { + for (UIView* view in window.subviews) { + if ([[view description] hasPrefix:@" 0) { _loadCount += 1; @@ -128,8 +138,10 @@ - (void)webViewDidFinishLoad:(UIWebView*)webView { if (_state == STATE_NORMAL) { if (_loadCount == 1) { - [_delegate webViewDidFinishLoad:webView]; - _loadCount -= 1; + if ([_delegate respondsToSelector:@selector(webViewDidFinishLoad:)]) { + [_delegate webViewDidFinishLoad:webView]; + } + _loadCount = -1; } else if (_loadCount > 1) { _loadCount -= 1; } @@ -143,8 +155,10 @@ - (void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error { if (_state == STATE_NORMAL) { if (_loadCount == 1) { - [_delegate webView:webView didFailLoadWithError:error]; - _loadCount -= 1; + if ([_delegate respondsToSelector:@selector(webView:didFailLoadWithError:)]) { + [_delegate webView:webView didFailLoadWithError:error]; + } + _loadCount = -1; } else if (_loadCount > 1) { _loadCount -= 1; } diff --git a/CordovaLib/Classes/NSData+Base64.m b/CordovaLib/Classes/NSData+Base64.m index 08c801b..d0f2189 100755 --- a/CordovaLib/Classes/NSData+Base64.m +++ b/CordovaLib/Classes/NSData+Base64.m @@ -249,13 +249,10 @@ @implementation NSData (CDVBase64) // + (NSData*)dataFromBase64String:(NSString*)aString { - NSData* data = [aString dataUsingEncoding:NSASCIIStringEncoding]; - size_t outputLength; - void* outputBuffer = CDVNewBase64Decode([data bytes], [data length], &outputLength); - NSData* result = [NSData dataWithBytes:outputBuffer length:outputLength]; + size_t outputLength = 0; + void* outputBuffer = CDVNewBase64Decode([aString UTF8String], [aString length], &outputLength); - free(outputBuffer); - return result; + return [NSData dataWithBytesNoCopy:outputBuffer length:outputLength freeWhenDone:YES]; } // @@ -273,13 +270,11 @@ - (NSString*)base64EncodedString char* outputBuffer = CDVNewBase64Encode([self bytes], [self length], true, &outputLength); - NSString* result = - [[NSString alloc] - initWithBytes:outputBuffer - length:outputLength - encoding:NSASCIIStringEncoding]; + NSString* result = [[NSString alloc] initWithBytesNoCopy:outputBuffer + length:outputLength + encoding:NSASCIIStringEncoding + freeWhenDone:YES]; - free(outputBuffer); return result; } diff --git a/CordovaLib/Classes/NSDictionary+Extensions.m b/CordovaLib/Classes/NSDictionary+Extensions.m index 80e9ac1..0361ff9 100755 --- a/CordovaLib/Classes/NSDictionary+Extensions.m +++ b/CordovaLib/Classes/NSDictionary+Extensions.m @@ -28,7 +28,7 @@ - (bool)existsValue:(NSString*)expectedValue forKey:(NSString*)key bool exists = false; if (val != nil) { - exists = [(NSString*) val compare:expectedValue options:NSCaseInsensitiveSearch] == 0; + exists = [(NSString*)val compare : expectedValue options : NSCaseInsensitiveSearch] == 0; } return exists; diff --git a/CordovaLib/CordovaLib.xcodeproj/project.pbxproj b/CordovaLib/CordovaLib.xcodeproj/project.pbxproj index 4868020..e14f1f6 100755 --- a/CordovaLib/CordovaLib.xcodeproj/project.pbxproj +++ b/CordovaLib/CordovaLib.xcodeproj/project.pbxproj @@ -44,6 +44,9 @@ 30F5EBAB14CA26E700987760 /* CDVCommandDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 30F5EBA914CA26E700987760 /* CDVCommandDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3E76876D156A90EE00EB6FA3 /* CDVLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E76876B156A90EE00EB6FA3 /* CDVLogger.m */; }; 3E76876F156A90EE00EB6FA3 /* CDVLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E76876C156A90EE00EB6FA3 /* CDVLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 68B7516E16FD18190076A8B4 /* CDVJpegHeaderWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 68B7516B16FD18190076A8B4 /* CDVJpegHeaderWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 68B7516F16FD18190076A8B4 /* CDVJpegHeaderWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 68B7516C16FD18190076A8B4 /* CDVJpegHeaderWriter.m */; }; + 68B7517016FD19F80076A8B4 /* CDVExif.h in Headers */ = {isa = PBXBuildFile; fileRef = 68B7516A16FD18190076A8B4 /* CDVExif.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8852C43A14B65FD800F0E735 /* CDVViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8852C43614B65FD800F0E735 /* CDVViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8852C43C14B65FD800F0E735 /* CDVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8852C43714B65FD800F0E735 /* CDVViewController.m */; }; 8887FD661090FBE7009987E8 /* CDVCamera.h in Headers */ = {isa = PBXBuildFile; fileRef = 8887FD261090FBE7009987E8 /* CDVCamera.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -141,6 +144,10 @@ 686357DC14100B1600DF4CF2 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; 68A32D7114102E1C006B237C /* libCordova.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCordova.a; sourceTree = BUILT_PRODUCTS_DIR; }; 68A32D7414103017006B237C /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; }; + 68B7516A16FD18190076A8B4 /* CDVExif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVExif.h; path = Classes/CDVExif.h; sourceTree = ""; }; + 68B7516B16FD18190076A8B4 /* CDVJpegHeaderWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVJpegHeaderWriter.h; path = Classes/CDVJpegHeaderWriter.h; sourceTree = ""; }; + 68B7516C16FD18190076A8B4 /* CDVJpegHeaderWriter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVJpegHeaderWriter.m; path = Classes/CDVJpegHeaderWriter.m; sourceTree = ""; }; + 8220B5C316D5427E00EC3921 /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = System/Library/Frameworks/AssetsLibrary.framework; sourceTree = SDKROOT; }; 8852C43614B65FD800F0E735 /* CDVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVViewController.h; path = Classes/CDVViewController.h; sourceTree = ""; }; 8852C43714B65FD800F0E735 /* CDVViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVViewController.m; path = Classes/CDVViewController.m; sourceTree = ""; }; 8887FD261090FBE7009987E8 /* CDVCamera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVCamera.h; path = Classes/CDVCamera.h; sourceTree = ""; }; @@ -223,6 +230,7 @@ isa = PBXGroup; children = ( 68A32D7414103017006B237C /* AddressBook.framework */, + 8220B5C316D5427E00EC3921 /* AssetsLibrary.framework */, 686357DC14100B1600DF4CF2 /* CoreMedia.framework */, 686357CE14100ADA00DF4CF2 /* AudioToolbox.framework */, 686357CF14100ADB00DF4CF2 /* AVFoundation.framework */, @@ -292,6 +300,9 @@ 8887FD271090FBE7009987E8 /* CDVCamera.m */, 1F584B991385A28900ED25E8 /* CDVCapture.h */, 1F584B9A1385A28900ED25E8 /* CDVCapture.m */, + 68B7516A16FD18190076A8B4 /* CDVExif.h */, + 68B7516B16FD18190076A8B4 /* CDVJpegHeaderWriter.h */, + 68B7516C16FD18190076A8B4 /* CDVJpegHeaderWriter.m */, 1F3C04CC12BC247D004F9E10 /* CDVContact.h */, 1F3C04CD12BC247D004F9E10 /* CDVContact.m */, 8887FD2A1090FBE7009987E8 /* CDVContacts.h */, @@ -364,6 +375,8 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + 68B7517016FD19F80076A8B4 /* CDVExif.h in Headers */, + 68B7516E16FD18190076A8B4 /* CDVJpegHeaderWriter.h in Headers */, 8887FD661090FBE7009987E8 /* CDVCamera.h in Headers */, 8887FD681090FBE7009987E8 /* NSDictionary+Extensions.h in Headers */, 8887FD6A1090FBE7009987E8 /* CDVContacts.h in Headers */, @@ -502,6 +515,7 @@ 30F3930C169F839700B22307 /* CDVJSON.m in Sources */, EB96673C16A8970A00D86CDF /* CDVUserAgentUtil.m in Sources */, EBFF4DBC16D3FE2E008F452B /* CDVWebViewDelegate.m in Sources */, + 68B7516F16FD18190076A8B4 /* CDVJpegHeaderWriter.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/CordovaLib/VERSION b/CordovaLib/VERSION index 437459c..e70b452 100755 --- a/CordovaLib/VERSION +++ b/CordovaLib/VERSION @@ -1 +1 @@ -2.5.0 +2.6.0 From 61c85b46533212ad68f698ef8b2e9c7560f7c5ad Mon Sep 17 00:00:00 2001 From: George Garside Date: Mon, 20 May 2013 21:05:53 +0100 Subject: [PATCH 10/60] Update Cordova config --- TDA-Enrichment/config.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/TDA-Enrichment/config.xml b/TDA-Enrichment/config.xml index b7c24ae..8c4b6cc 100644 --- a/TDA-Enrichment/config.xml +++ b/TDA-Enrichment/config.xml @@ -4,15 +4,17 @@ + + + - From f0e3b2c0adc80e00850660cc985fb46972f7d825 Mon Sep 17 00:00:00 2001 From: George Garside Date: Mon, 20 May 2013 21:06:19 +0100 Subject: [PATCH 11/60] Remove depreciated Cordova configuration preference EnableLocation = false --- TDA-Enrichment/config.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/TDA-Enrichment/config.xml b/TDA-Enrichment/config.xml index 8c4b6cc..1cc7897 100644 --- a/TDA-Enrichment/config.xml +++ b/TDA-Enrichment/config.xml @@ -3,7 +3,6 @@ - From 7e382eef538375bb043ee38ba08140792ed8e596 Mon Sep 17 00:00:00 2001 From: George Garside Date: Mon, 20 May 2013 21:06:58 +0100 Subject: [PATCH 12/60] Update Cordova JavaScript --- www/{cordova-2.5.0.js => cordova-2.6.0.js} | 526 +++++++++++++++++---- www/index.html | 2 +- 2 files changed, 439 insertions(+), 89 deletions(-) rename www/{cordova-2.5.0.js => cordova-2.6.0.js} (92%) diff --git a/www/cordova-2.5.0.js b/www/cordova-2.6.0.js similarity index 92% rename from www/cordova-2.5.0.js rename to www/cordova-2.6.0.js index 3d83df3..4df7891 100755 --- a/www/cordova-2.5.0.js +++ b/www/cordova-2.6.0.js @@ -1,8 +1,8 @@ // Platform: ios -// commit f50d20a87431c79a54572263729461883f611a53 +// commit 125dca530923a44a8f44f68f5e1970cbdd4e7faf -// File generated at :: Tue Feb 26 2013 14:26:19 GMT-0800 (PST) +// File generated at :: Thu Apr 04 2013 10:21:55 GMT-0700 (PDT) /* Licensed to the Apache Software Foundation (ASF) under one @@ -262,7 +262,7 @@ var cordova = { */ callbackSuccess: function(callbackId, args) { try { - cordova.callbackFromNative(callbackId, true, args.status, args.message, args.keepCallback); + cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback); } catch (e) { console.log("Error in error callback: " + callbackId + " = "+e); } @@ -275,7 +275,7 @@ var cordova = { // TODO: Deprecate callbackSuccess and callbackError in favour of callbackFromNative. // Derive success from status. try { - cordova.callbackFromNative(callbackId, false, args.status, args.message, args.keepCallback); + cordova.callbackFromNative(callbackId, false, args.status, [args.message], args.keepCallback); } catch (e) { console.log("Error in error callback: " + callbackId + " = "+e); } @@ -284,13 +284,13 @@ var cordova = { /** * Called by native code when returning the result from an action. */ - callbackFromNative: function(callbackId, success, status, message, keepCallback) { + callbackFromNative: function(callbackId, success, status, args, keepCallback) { var callback = cordova.callbacks[callbackId]; if (callback) { if (success && status == cordova.callbackStatus.OK) { - callback.success && callback.success(message); + callback.success && callback.success.apply(null, args); } else if (!success) { - callback.fail && callback.fail(message); + callback.fail && callback.fail.apply(null, args); } // Clear callback if not expecting any more results @@ -724,6 +724,9 @@ channel.createSticky('onCordovaInfoReady'); // Event to indicate that the connection property has been set. channel.createSticky('onCordovaConnectionReady'); +// Event to indicate that all automatically loaded JS plugins are loaded and ready. +channel.createSticky('onPluginsReady'); + // Event to indicate that Cordova is ready channel.createSticky('onDeviceReady'); @@ -826,6 +829,7 @@ function massageArgsJsToNative(args) { if (!args || utils.typeName(args) != 'Array') { return args; } + var ret = []; var encodeArrayBufferAs8bitString = function(ab) { return String.fromCharCode.apply(null, new Uint8Array(ab)); }; @@ -834,17 +838,19 @@ function massageArgsJsToNative(args) { }; args.forEach(function(arg, i) { if (utils.typeName(arg) == 'ArrayBuffer') { - args[i] = { + ret.push({ 'CDVType': 'ArrayBuffer', 'data': encodeArrayBufferAsBase64(arg) - }; + }); + } else { + ret.push(arg); } }); - return args; + return ret; } -function massagePayloadNativeToJs(payload) { - if (payload && payload.hasOwnProperty('CDVType') && payload.CDVType == 'ArrayBuffer') { +function massageMessageNativeToJs(message) { + if (message.CDVType == 'ArrayBuffer') { var stringToArrayBuffer = function(str) { var ret = new Uint8Array(str.length); for (var i = 0; i < str.length; i++) { @@ -855,9 +861,23 @@ function massagePayloadNativeToJs(payload) { var base64ToArrayBuffer = function(b64) { return stringToArrayBuffer(atob(b64)); }; - payload = base64ToArrayBuffer(payload.data); + message = base64ToArrayBuffer(message.data); + } + return message; +} + +function convertMessageToArgsNativeToJs(message) { + var args = []; + if (!message || !message.hasOwnProperty('CDVType')) { + args.push(message); + } else if (message.CDVType == 'MultiPart') { + message.messages.forEach(function(e) { + args.push(massageMessageNativeToJs(e)); + }); + } else { + args.push(massageMessageNativeToJs(message)); } - return payload; + return args; } function iOSExec() { @@ -964,11 +984,11 @@ iOSExec.nativeFetchMessages = function() { return json; }; -iOSExec.nativeCallback = function(callbackId, status, payload, keepCallback) { +iOSExec.nativeCallback = function(callbackId, status, message, keepCallback) { return iOSExec.nativeEvalAndFetch(function() { var success = status === 0 || status === 1; - payload = massagePayloadNativeToJs(payload); - cordova.callbackFromNative(callbackId, success, status, payload, keepCallback); + var args = convertMessageToArgsNativeToJs(message); + cordova.callbackFromNative(callbackId, success, status, args, keepCallback); }); }; @@ -1161,9 +1181,10 @@ cameraExport.getPicture = function(successCallback, errorCallback, options) { var correctOrientation = !!options.correctOrientation; var saveToPhotoAlbum = !!options.saveToPhotoAlbum; var popoverOptions = getValue(options.popoverOptions, null); + var cameraDirection = getValue(options.cameraDirection, Camera.Direction.BACK); var args = [quality, destinationType, sourceType, targetWidth, targetHeight, encodingType, - mediaType, allowEdit, correctOrientation, saveToPhotoAlbum, popoverOptions]; + mediaType, allowEdit, correctOrientation, saveToPhotoAlbum, popoverOptions, cameraDirection]; exec(successCallback, errorCallback, "Camera", "takePicture", args); return new CameraPopoverHandle(); @@ -1206,6 +1227,10 @@ module.exports = { ARROW_LEFT : 4, ARROW_RIGHT : 8, ARROW_ANY : 15 + }, + Direction:{ + BACK: 0, + FRONT: 1 } }; @@ -2398,14 +2423,7 @@ FileReader.prototype.readAsText = function(file, encoding) { // Default encoding is UTF-8 var enc = encoding ? encoding : "UTF-8"; var me = this; - var execArgs = [this._fileName, enc]; - - // Maybe add slice parameters. - if (file.end < file.size) { - execArgs.push(file.start, file.end); - } else if (file.start > 0) { - execArgs.push(file.start); - } + var execArgs = [this._fileName, enc, file.start, file.end]; // Read file exec( @@ -2474,14 +2492,7 @@ FileReader.prototype.readAsDataURL = function(file) { } var me = this; - var execArgs = [this._fileName]; - - // Maybe add slice parameters. - if (file.end < file.size) { - execArgs.push(file.start, file.end); - } else if (file.start > 0) { - execArgs.push(file.start); - } + var execArgs = [this._fileName, file.start, file.end]; // Read file exec( @@ -2544,9 +2555,59 @@ FileReader.prototype.readAsBinaryString = function(file) { if (initRead(this, file)) { return this._realReader.readAsBinaryString(file); } - // TODO - Can't return binary data to browser. - console.log('method "readAsBinaryString" is not supported at this time.'); - this.abort(); + + var me = this; + var execArgs = [this._fileName, file.start, file.end]; + + // Read file + exec( + // Success callback + function(r) { + // If DONE (cancelled), then don't do anything + if (me._readyState === FileReader.DONE) { + return; + } + + // DONE state + me._readyState = FileReader.DONE; + + me._result = r; + + // If onload callback + if (typeof me.onload === "function") { + me.onload(new ProgressEvent("load", {target:me})); + } + + // If onloadend callback + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + }, + // Error callback + function(e) { + // If DONE (cancelled), then don't do anything + if (me._readyState === FileReader.DONE) { + return; + } + + // DONE state + me._readyState = FileReader.DONE; + + me._result = null; + + // Save error + me._error = new FileError(e); + + // If onerror callback + if (typeof me.onerror === "function") { + me.onerror(new ProgressEvent("error", {target:me})); + } + + // If onloadend callback + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + }, "File", "readAsBinaryString", execArgs); }; /** @@ -2558,9 +2619,59 @@ FileReader.prototype.readAsArrayBuffer = function(file) { if (initRead(this, file)) { return this._realReader.readAsArrayBuffer(file); } - // TODO - Can't return binary data to browser. - console.log('This method is not supported at this time.'); - this.abort(); + + var me = this; + var execArgs = [this._fileName, file.start, file.end]; + + // Read file + exec( + // Success callback + function(r) { + // If DONE (cancelled), then don't do anything + if (me._readyState === FileReader.DONE) { + return; + } + + // DONE state + me._readyState = FileReader.DONE; + + me._result = r; + + // If onload callback + if (typeof me.onload === "function") { + me.onload(new ProgressEvent("load", {target:me})); + } + + // If onloadend callback + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + }, + // Error callback + function(e) { + // If DONE (cancelled), then don't do anything + if (me._readyState === FileReader.DONE) { + return; + } + + // DONE state + me._readyState = FileReader.DONE; + + me._result = null; + + // Save error + me._error = new FileError(e); + + // If onerror callback + if (typeof me.onerror === "function") { + me.onerror(new ProgressEvent("error", {target:me})); + } + + // If onloadend callback + if (typeof me.onloadend === "function") { + me.onloadend(new ProgressEvent("loadend", {target:me})); + } + }, "File", "readAsArrayBuffer", execArgs); }; module.exports = FileReader; @@ -2606,6 +2717,38 @@ function newProgressEvent(result) { return pe; } +function getBasicAuthHeader(urlString) { + var header = null; + + if (window.btoa) { + // parse the url using the Location object + var url = document.createElement('a'); + url.href = urlString; + + var credentials = null; + var protocol = url.protocol + "//"; + var origin = protocol + url.host; + + // check whether there are the username:password credentials in the url + if (url.href.indexOf(origin) != 0) { // credentials found + var atIndex = url.href.indexOf("@"); + credentials = url.href.substring(protocol.length, atIndex); + } + + if (credentials) { + var authHeader = "Authorization"; + var authHeaderValue = "Basic " + window.btoa(credentials); + + header = { + name : authHeader, + value : authHeaderValue + }; + } + } + + return header; +} + var idCounter = 0; /** @@ -2636,6 +2779,18 @@ FileTransfer.prototype.upload = function(filePath, server, successCallback, erro var params = null; var chunkedMode = true; var headers = null; + + var basicAuthHeader = getBasicAuthHeader(server); + if (basicAuthHeader) { + if (!options) { + options = new FileUploadOptions(); + } + if (!options.headers) { + options.headers = {}; + } + options.headers[basicAuthHeader.name] = basicAuthHeader.value; + } + if (options) { fileKey = options.fileKey; fileName = options.fileName; @@ -2653,7 +2808,7 @@ FileTransfer.prototype.upload = function(filePath, server, successCallback, erro } var fail = errorCallback && function(e) { - var error = new FileTransferError(e.code, e.source, e.target, e.http_status); + var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body); errorCallback(error); }; @@ -2677,10 +2832,28 @@ FileTransfer.prototype.upload = function(filePath, server, successCallback, erro * @param successCallback (Function} Callback to be invoked when upload has completed * @param errorCallback {Function} Callback to be invoked upon error * @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false + * @param options {FileDownloadOptions} Optional parameters such as headers */ -FileTransfer.prototype.download = function(source, target, successCallback, errorCallback, trustAllHosts) { +FileTransfer.prototype.download = function(source, target, successCallback, errorCallback, trustAllHosts, options) { argscheck.checkArgs('ssFF*', 'FileTransfer.download', arguments); var self = this; + + var basicAuthHeader = getBasicAuthHeader(source); + if (basicAuthHeader) { + if (!options) { + options = {}; + } + if (!options.headers) { + options.headers = {}; + } + options.headers[basicAuthHeader.name] = basicAuthHeader.value; + } + + var headers = null; + if (options) { + headers = options.headers || null; + } + var win = function(result) { if (typeof result.lengthComputable != "undefined") { if (self.onprogress) { @@ -2703,11 +2876,11 @@ FileTransfer.prototype.download = function(source, target, successCallback, erro }; var fail = errorCallback && function(e) { - var error = new FileTransferError(e.code, e.source, e.target, e.http_status); + var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body); errorCallback(error); }; - exec(win, fail, 'FileTransfer', 'download', [source, target, trustAllHosts, this._id]); + exec(win, fail, 'FileTransfer', 'download', [source, target, trustAllHosts, this._id, headers]); }; /** @@ -3105,6 +3278,7 @@ function InAppBrowser() { this.channels = { 'loadstart': channel.create('loadstart'), 'loadstop' : channel.create('loadstop'), + 'loaderror' : channel.create('loaderror'), 'exit' : channel.create('exit') }; } @@ -3135,7 +3309,7 @@ module.exports = function(strUrl, strWindowName, strWindowFeatures) { var cb = function(eventname) { iab._eventHandler(eventname); }; - exec(cb, null, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]); + exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]); return iab; }; @@ -4341,7 +4515,8 @@ modulemapper.clobbers('cordova/plugin/device', 'device'); // file: lib/common/plugin/echo.js define("cordova/plugin/echo", function(require, exports, module) { -var exec = require('cordova/exec'); +var exec = require('cordova/exec'), + utils = require('cordova/utils'); /** * Sends the given message through exec() to the Echo plugin, which sends it back to the successCallback. @@ -4351,11 +4526,25 @@ var exec = require('cordova/exec'); * @param forceAsync Whether to force an async return value (for testing native->js bridge). */ module.exports = function(successCallback, errorCallback, message, forceAsync) { - var action = forceAsync ? 'echoAsync' : 'echo'; - if (!forceAsync && message.constructor == ArrayBuffer) { - action = 'echoArrayBuffer'; + var action = 'echo'; + var messageIsMultipart = (utils.typeName(message) == "Array"); + var args = messageIsMultipart ? message : [message]; + + if (utils.typeName(message) == 'ArrayBuffer') { + if (forceAsync) { + console.warn('Cannot echo ArrayBuffer with forced async, falling back to sync.'); + } + action += 'ArrayBuffer'; + } else if (messageIsMultipart) { + if (forceAsync) { + console.warn('Cannot echo MultiPart Array with forced async, falling back to sync.'); + } + action += 'MultiPart'; + } else if (forceAsync) { + action += 'Async'; } - exec(successCallback, errorCallback, "Echo", action, [message]); + + exec(successCallback, errorCallback, "Echo", action, args); }; @@ -5086,7 +5275,7 @@ function stringify(message) { return "error JSON.stringify()ing argument: " + e; } } else { - return message.toString(); + return (typeof message === "undefined") ? "undefined" : message.toString(); } } catch (e) { return e.toString(); @@ -5100,10 +5289,20 @@ function stringify(message) { function wrappedMethod(console, method) { var origMethod = console[method]; - return function(message) { + return function() { + + var args = [].slice.call(arguments), + len = args.length, + i = 0, + res = []; + + for ( ; i < len; i++) { + res.push(stringify(args[i])); + } + exec(null, null, 'Debug Console', 'log', - [ stringify(message), { logLevel: method.toUpperCase() } ] + [ res.join(' '), { logLevel: method.toUpperCase() } ] ); if (!origMethod) return; @@ -5572,6 +5771,7 @@ modulemapper.defaults('cordova/plugin/Connection', 'Connection'); define("cordova/plugin/notification", function(require, exports, module) { var exec = require('cordova/exec'); +var platform = require('cordova/platform'); /** * Provides access to notifications on the device. @@ -5600,14 +5800,52 @@ module.exports = { * @param {String} message Message to print in the body of the alert * @param {Function} resultCallback The callback that is called when user clicks on a button. * @param {String} title Title of the alert dialog (default: Confirm) - * @param {String} buttonLabels Comma separated list of the labels of the buttons (default: 'OK,Cancel') + * @param {Array} buttonLabels Array of the labels of the buttons (default: ['OK', 'Cancel']) */ confirm: function(message, resultCallback, title, buttonLabels) { var _title = (title || "Confirm"); - var _buttonLabels = (buttonLabels || "OK,Cancel"); + var _buttonLabels = (buttonLabels || ["OK", "Cancel"]); + + // Strings are deprecated! + if (typeof _buttonLabels === 'string') { + console.log("Notification.confirm(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array)."); + } + + // Android and iOS take an array of button label names. + // Other platforms take a comma separated list. + // For compatibility, we convert to the desired type based on the platform. + if (platform.id == "android" || platform.id == "ios") { + if (typeof _buttonLabels === 'string') { + var buttonLabelString = _buttonLabels; + _buttonLabels = buttonLabelString.split(","); + } + } else { + if (Array.isArray(_buttonLabels)) { + var buttonLabelArray = _buttonLabels; + _buttonLabels = buttonLabelArray.toString(); + } + } exec(resultCallback, null, "Notification", "confirm", [message, _title, _buttonLabels]); }, + /** + * Open a native prompt dialog, with a customizable title and button text. + * The following results are returned to the result callback: + * buttonIndex Index number of the button selected. + * input1 The text entered in the prompt dialog box. + * + * @param {String} message Dialog message to display (default: "Prompt message") + * @param {Function} resultCallback The callback that is called when user clicks on a button. + * @param {String} title Title of the dialog (default: "Prompt") + * @param {Array} buttonLabels Array of strings for the button labels (default: ["OK","Cancel"]) + */ + prompt: function(message, resultCallback, title, buttonLabels) { + var _message = (message || "Prompt message"); + var _title = (title || "Prompt"); + var _buttonLabels = (buttonLabels || ["OK","Cancel"]); + exec(resultCallback, null, "Notification", "prompt", [_message, _title, _buttonLabels]); + }, + /** * Causes the device to vibrate. * @@ -6031,53 +6269,165 @@ window.cordova = require('cordova'); (function (context) { // Replace navigator before any modules are required(), to ensure it happens as soon as possible. // We replace it so that properties that can't be clobbered can instead be overridden. - if (context.navigator) { + function replaceNavigator(origNavigator) { var CordovaNavigator = function() {}; - CordovaNavigator.prototype = context.navigator; - context.navigator = new CordovaNavigator(); + CordovaNavigator.prototype = origNavigator; + var newNavigator = new CordovaNavigator(); + // This work-around really only applies to new APIs that are newer than Function.bind. + // Without it, APIs such as getGamepads() break. + if (CordovaNavigator.bind) { + for (var key in origNavigator) { + if (typeof origNavigator[key] == 'function') { + newNavigator[key] = origNavigator[key].bind(origNavigator); + } + } + } + return newNavigator; + } + if (context.navigator) { + context.navigator = replaceNavigator(context.navigator); + } + + var channel = require("cordova/channel"); + + // _nativeReady is global variable that the native side can set + // to signify that the native code is ready. It is a global since + // it may be called before any cordova JS is ready. + if (window._nativeReady) { + channel.onNativeReady.fire(); } - var channel = require("cordova/channel"), - _self = { - boot: function () { - /** - * Create all cordova objects once page has fully loaded and native side is ready. - */ - channel.join(function() { - var builder = require('cordova/builder'), - platform = require('cordova/platform'); + /** + * Create all cordova objects once page has fully loaded and native side is ready. + */ + channel.join(function() { + var builder = require('cordova/builder'), + platform = require('cordova/platform'); + + builder.buildIntoButDoNotClobber(platform.defaults, context); + builder.buildIntoAndClobber(platform.clobbers, context); + builder.buildIntoAndMerge(platform.merges, context); + + // Call the platform-specific initialization + platform.initialize(); - builder.buildIntoButDoNotClobber(platform.defaults, context); - builder.buildIntoAndClobber(platform.clobbers, context); - builder.buildIntoAndMerge(platform.merges, context); + // Fire event to notify that all objects are created + channel.onCordovaReady.fire(); - // Call the platform-specific initialization - platform.initialize(); + // Fire onDeviceReady event once all constructors have run and + // cordova info has been received from native side. + channel.join(function() { + require('cordova').fireDocumentEvent('deviceready'); + }, channel.deviceReadyChannelsArray); - // Fire event to notify that all objects are created - channel.onCordovaReady.fire(); + }, [ channel.onDOMContentLoaded, channel.onNativeReady, channel.onPluginsReady ]); - // Fire onDeviceReady event once all constructors have run and - // cordova info has been received from native side. - channel.join(function() { - require('cordova').fireDocumentEvent('deviceready'); - }, channel.deviceReadyChannelsArray); +}(window)); + +// file: lib/scripts/plugin_loader.js - }, [ channel.onDOMContentLoaded, channel.onNativeReady ]); +// Tries to load all plugins' js-modules. +// This is an async process, but onDeviceReady is blocked on onPluginsReady. +// onPluginsReady is fired when there are no plugins to load, or they are all done. +(function (context) { + // To be populated with the handler by handlePluginsObject. + var onScriptLoadingComplete; + + var scriptCounter = 0; + function scriptLoadedCallback() { + scriptCounter--; + if (scriptCounter === 0) { + onScriptLoadingComplete && onScriptLoadingComplete(); + } + } + + // Helper function to inject a - +
- Back + Back
@@ -284,7 +284,7 @@

© George Garside

- Back + Back
@@ -410,7 +410,7 @@

© George Garside

- Back + Back
@@ -473,7 +473,7 @@

© George Garside

- Back + Back
@@ -551,7 +551,7 @@

© George Garside

- Back + Back
@@ -626,7 +626,7 @@

Timetable

- Back + Back
@@ -760,7 +760,7 @@

The Steering Wheel: Mental Conditioning

- Back + Back
@@ -831,7 +831,7 @@

What are the benefits of a cool down?

- Back + Back
@@ -887,7 +887,7 @@

Muscle Group Training

- Back + Back
@@ -1299,7 +1299,7 @@

How often to train?

- Back + Back
@@ -1349,7 +1349,7 @@

Introduction

- Back + Back
@@ -1432,7 +1432,7 @@

Ingredients list

- Back + Back
@@ -1480,7 +1480,7 @@

The basics

- Back + Back
@@ -1545,7 +1545,7 @@

The Press-up

- Back + Back
@@ -1579,7 +1579,7 @@

Dynamic Floor Exercises

- Back + Back
@@ -1606,7 +1606,7 @@

How do I tone my legs?

- Back + Back
From 37fc1d7e4f749aece00cf52ddf3091cc4d057482 Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 21 May 2013 19:58:36 +0100 Subject: [PATCH 24/60] Fix `b4` tags to be `h4` tags --- www/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/index.html b/www/index.html index 93a6583..264fd23 100644 --- a/www/index.html +++ b/www/index.html @@ -999,7 +999,7 @@

Workout 2 – Legs, Back, Biceps

  • Thur: rest or cardio
  • Fri: Workout 2
  • - Workout 1 – Chest, Shoulders, Triceps +

    Workout 1 – Chest, Shoulders, Triceps

    Warm up first, then warm up specific muscle group with a couple of lighter sets, then go into the workout....

    CHEST

    Flat Dumbbell bench press 3 sets (15,12,10)

    @@ -1014,7 +1014,7 @@

    Workout 2 – Legs, Back, Biceps

    TRICEPS

    Lying Triceps extension 3 sets (15,12,10)

    Triceps press down 3 sets (12,12,10)

    - Workout 2 – Legs, Back, Biceps +

    Workout 2 – Legs, Back, Biceps

    Warm up first, then warm up specific muscle group with a couple of lighter sets, then go into the workout....

    LEGS

    Squat 3 sets (10, 10, 10)

    From c68acd65f6582dbb8264ca9c988faa273db4300e Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 21 May 2013 19:59:11 +0100 Subject: [PATCH 25/60] Remove unnecessary blank page --- www/index.html | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/www/index.html b/www/index.html index 264fd23..ad30524 100644 --- a/www/index.html +++ b/www/index.html @@ -1610,24 +1610,5 @@

    How do I tone my legs?

    - -
    - -

    blank

    - -
    - - -

    - -

    - -
    - -
    - Back -
    -
    - From 85a67114c81bf3f4bf67593eb3635875e58131f2 Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 21 May 2013 20:01:42 +0100 Subject: [PATCH 26/60] Fix wheel names to be shorter so that they fit on iPhone screen --- www/index.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/www/index.html b/www/index.html index ad30524..0d28c56 100644 --- a/www/index.html +++ b/www/index.html @@ -639,7 +639,7 @@

    Timetable

    -

    The First Wheel: Aerobic Training

    +

    1st: Aerobic Training

    This is the wheel that those desperate to lose weight fast always drive on first. Even though it's not the answer to helping you obtain that celebrity-perfect look by itself, aerobic exercise is still a valuable wheel.

    The Facts

    Without aerobic training, you'll lack the adequate stamina to push your muscles beyond what they're capable of doing so they will become stronger and shape up faster. Without aerobic training you'll have to watch calories religiously, your body wont be as efficient at flushing out the toxins that resistance training leaves behind, such as lactic acid. Add the fact that aerobic training improves the quality of your sleep and its pretty easy to see how it fits into the bigger picture.

    @@ -657,7 +657,7 @@

    Know When Too Much Is Too Much

    Pushing yourself higher within your target heart rate zone will definitely reap more results, but you need to know when too much is too much. If you can't speak a full sentence while exercising without being winded, then you're most likely pushing yourself to the far end of your target heart rate zone. On the other hand, if you're able to carry on a full conversation, then you're probably working at a level thats below your target heart rate zone.

    -

    The Second Wheel: Resistance Training

    +

    2nd: Resistance Training

    Whether you're brand new to this whole exercise experience, or fitness is old hat, you probably still know what resistance training entails, or know it by one of its many other names: strength training, weight training, pumping iron, anaerobic exercise, etc.

    This is the chapter you've either been waiting for or dreading. If you're a male and breathing, you may start to get a bit fired up by now. If you're a female, and fairly new to fitness, you might have doubts, or even visions of morphing into a 300-pound monster with arms like ham hocks as soon as you start bench pressing. Relax, its not like that.

    The Facts

    @@ -693,7 +693,7 @@
    Can I burn fat from a specific area by doing specific exercise?

    Until you reduce the body fat above or around your muscles through cardiovascular exercise, resistance training, eating right, and adequate rest you'll never make those muscles or perfect set of abs visible.

    -

    The Third Wheel: Nutrition

    +

    3rd: Nutrition

    Eating right isn't really all that complicated. It's a choice, and a conscious, daily choice at that. Making the right choice on a regular basis, and sticking with your choice over time, will get you there.

    The Facts

    Choose to eat the right way and you won't just improve every possible aspect of your health, but you'll make the job of reshaping yourself through exercising that much easier. The time-starved amongst us are at the mercy of convenience eating. You are your own food-police deciding the type of foods you eat; I can't monitor that all the time because I'm only with you for 1 hour at the gym. The other 23 hours are your responsibility.

    @@ -737,7 +737,7 @@

    Carbohydrates, Proteins, and fats

    -

    The Fourth Wheel: Rest and Recovery

    +

    4th: Rest and Recovery

    It sounds like the easiest wheel of the five to drive on, but it's actually the one that most frequently gets either too much or too little use. Give your body too much rest and it'll look like it. Give it too little and you increase your odds of not only injuring yourself, but never seeing the body-shaping results you're shooting for.

    The facts

    Whether you hate or love exercise, your body interprets all that time you've spent pulling, pushing, and sweating on gym equipment as on thing: stress. Thats why the time you give your muscles to rest and recover in between each workout can make a huge difference in the kind of results you end up seeing for all of your hard work.

    @@ -746,7 +746,7 @@

    The facts

    A decent nights sleep. Most healthy adults need an average of 7 to 9 hours of sleep a night. Whatever your cycle is, find it, stick with it.

    -

    The Steering Wheel: Mental Conditioning

    +

    5th: Mental Conditioning

    What makes one person lie on a sofa eating pizza, chips and cake, while another may be up at 6am pounding the streets trying to beat a personal best? Why are some people more motivated than others? Not just at sport, exercise or at work, but in life?

    Each of us has motivations, goals and inspirational figures that shape what we do, what we think, how we react. Some of these goals are verbalised, debated and shared, some are deep rooted and personal. It all starts in the mind.

    Life is a mind game. All your aspirations are played out in your head. All your relationships are shaped in your head. Your mind dictates whether you fulfil your potential or live your life dreaming. It's about attitude. The good thing in life is that you can choose your attitude, you cant always choose or change the circumstances in your arena, but you can always choose or change your attitude.

    From 81c0ed5e827878d44bb04474eae7ceea302a5e9d Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 21 May 2013 20:20:06 +0100 Subject: [PATCH 27/60] Update button theme --- www/index.html | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/www/index.html b/www/index.html index 0d28c56..d6a2488 100644 --- a/www/index.html +++ b/www/index.html @@ -860,27 +860,28 @@

    The Facts

    Training Frequency

    Training Age

    Muscle Group Training

    From 2bb09d34768ac44dc4f6d46b486c7335cee3040b Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 21 May 2013 20:25:38 +0100 Subject: [PATCH 28/60] Add Super Seven Strength resource Add resource inside app Resource only consists of text, so an external link is not necessary --- www/index.html | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/www/index.html b/www/index.html index 6eea47c..d3e09c2 100644 --- a/www/index.html +++ b/www/index.html @@ -882,6 +882,11 @@

    Muscle Group Training

    Shoulders Arms
    + +

    Other Resources

    + +

    Resources

    @@ -1272,6 +1277,32 @@

    Basic Arm Routine

    + +
    + +

    Super Seven Strength

    + +
    + +

    It’s absolutely essential you warm up first, 5/10 mins of light CV, then low weight reps until thoroughly warmed up.

    +
      +
    1. Squats - 4 sets (heavy one week, moderate the next). 15/12/12/10 reps (moderate week, bodyweight x 20 reps, 3 sets.)
    2. +
    3. Lunges - 3 sets. 8/8/8 reps on each leg.
    4. +
    5. Deadlifts - 3 sets. 15/12/10 reps
    6. +
    7. Pullups - 2 sets, to failure. Aim for 10, then 5.
    8. +
    9. Bent over Rows - 2 sets. 12/10.
    10. +
    11. Bench Press - 3 sets. 12/10/8
    12. +
    13. Core - 3 sets of, swiss-ball roll-outs x 12/plank 45secs/supermans x 10
    14. +
    +

    If you can make the reps easily then increase the weight. The last couple of reps should be difficult/almost failure. Try to do this at least twice a week (Mon & Fri). Record what you do.

    +

    Forget the beach exercises (arm training!) until you've completed the above routine. Biceps and Triceps are already being used doing the above moves.

    +

    Back

    + +
    + +
    + +
    From 2ed0f702155ac18e13aca193c41c514f28048cfb Mon Sep 17 00:00:00 2001 From: George Garside Date: Mon, 27 May 2013 20:54:40 +0100 Subject: [PATCH 29/60] Fix extra code spacing and change to `data-type="horizontal"` for some buttons --- www/index.html | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/www/index.html b/www/index.html index d3e09c2..85b447f 100644 --- a/www/index.html +++ b/www/index.html @@ -861,32 +861,28 @@

    Training Frequency

    Training Age

    Muscle Group Training

    -
    - Legs - Back - Chest - Shoulders - Arms +
    + Legs + Arms
    - -

    Other Resources

    - -
    - Super Seven Strength +

    Resources

    From 38810605315d5bbe8c847b662dec71e339919a4c Mon Sep 17 00:00:00 2001 From: George Garside Date: Mon, 27 May 2013 20:58:12 +0100 Subject: [PATCH 30/60] Fix for duplicate IDs caused by popup ID --- www/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/index.html b/www/index.html index 85b447f..1b2696c 100644 --- a/www/index.html +++ b/www/index.html @@ -888,10 +888,10 @@

    Muscle Group Training

    Resources

    -
    +

    Are you sure you want to open this resource?

    This action can use data, and may not work on Android.

    From c3c3c494e1207bfd36997e338314b3336ac2f1d9 Mon Sep 17 00:00:00 2001 From: George Garside Date: Mon, 27 May 2013 20:58:56 +0100 Subject: [PATCH 31/60] Be more specific with Android message --- www/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/index.html b/www/index.html index 1b2696c..6e87a02 100644 --- a/www/index.html +++ b/www/index.html @@ -894,7 +894,7 @@

    Resources

    Are you sure you want to open this resource?

    -

    This action can use data, and may not work on Android.

    +

    This action can use data, and may not work on some Android devices.

    From 0269dbc8229f51753c96b2c7d762070d23cb0778 Mon Sep 17 00:00:00 2001 From: George Garside Date: Mon, 27 May 2013 20:59:12 +0100 Subject: [PATCH 32/60] Correct non-existant href --- www/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/index.html b/www/index.html index 6e87a02..f03cbad 100644 --- a/www/index.html +++ b/www/index.html @@ -897,7 +897,7 @@

    Are you sure you want to open this resource?

    This action can use data, and may not work on some Android devices.

    From daef4bdac97a16649c37b6d2c3c08144b06900ab Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 11:09:53 +0100 Subject: [PATCH 33/60] Add Training Zones table as image --- www/images/aerobictraining/trainingzones.png | Bin 0 -> 91979 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 www/images/aerobictraining/trainingzones.png diff --git a/www/images/aerobictraining/trainingzones.png b/www/images/aerobictraining/trainingzones.png new file mode 100644 index 0000000000000000000000000000000000000000..39c57bd0f7e9e54852df38f70077e45aaa99893b GIT binary patch literal 91979 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 literal 0 HcmV?d00001 From 15e238fc7085ee20a40c2625884d14770c38e32f Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 11:10:26 +0100 Subject: [PATCH 34/60] Add resource to resources list --- www/index.html | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/www/index.html b/www/index.html index 0d28c56..4f2b01f 100644 --- a/www/index.html +++ b/www/index.html @@ -1295,6 +1295,23 @@

    How often to train?

    It is important to start slowly. If you have been inactive for some time, don’t throw on your trainers and set off on a ten mile run.

    If a half an hour session feels like too much, start with 10 minute sessions for the first week then increase that to 15 or 20 minute sessions the next week and so on until you feel comfortable exercising for longer.

    Make sure that you listen to your body. It’s ok for muscles to be tired, but if they or your joints start to feel sore or breathing becomes uncomfortable slow down or stop to ensure that you are in a fit state for your next session.

    + +

    Resources

    + + + +
    +
    +

    Are you sure you want to open this resource?

    +

    This action can use data, and may not work on some Android devices.

    +
    + + +
    +
    +
    From b685670c693e2aab92bb6fc5e7d9d0cc398f34f9 Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 11:11:46 +0100 Subject: [PATCH 35/60] Add subpage for training zones --- www/index.html | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/www/index.html b/www/index.html index 4f2b01f..3bbe31f 100644 --- a/www/index.html +++ b/www/index.html @@ -1320,6 +1320,24 @@

    Are you sure you want to open this resource?

    + +
    + +

    Training Zones

    + +
    + +

    The Energy Efficient zone 60-70%: Training within this zone develops basic endurance and aerobic capacity. All easy recovery running should be completed at a maximum of 70%. Another advantage to running in this zone is that while you are happily fat burning you may lose weight and you will be allowing your muscles to re-energise with glycogen, which has been expended during those faster paced workouts.

    +

    The Aerobic zone 70-80%: Training in this zone will develop your cardiovascular system. The body's ability to transport oxygen to, and carbon dioxide away from, the working muscles can be developed and improved. As you become fitter and stronger from training in this zone it will be possible to run some of your long weekend runs at up to 75%, so getting the benefits of some fat burning and improved aerobic capacity.

    +

    The Anaerobic Zone 80-90%: Training in this zone will develop your lactic acid system. In this zone, your individual anaerobic threshold (AT) is found - sometimes referred to the point of deflection (POD). During these heart rates, the amount of fat being utilised as the main source of energy is greatly reduced and glycogen stored in the muscle is predominantly used. One of the by-products of burning this glycogen is lactic acid. There is a point at which the body can no longer remove the lactic acid from the working muscles quickly enough. This is your anaerobic threshold (AT). Through the correct training, it is possible to delay the AT by being able to increase your ability to deal with the lactic acid for a longer period of time or by pushing the AT higher.

    +

    The Red-line Zone 90-100%: Training in this zone will only be possible for short periods. It effectively trains your fast twitch muscle fibres and helps to develop speed. This zone is reserved for interval running and only the very fit are able to train effectively within this zone.

    + +

    Back

    + +
    + +
    +
    From 5e82d9f2c1f6bc09a5300d13c42df42d23f7f1ba Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 11:12:00 +0100 Subject: [PATCH 36/60] Add table as image to subpage --- www/index.html | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/www/index.html b/www/index.html index 3bbe31f..326a11a 100644 --- a/www/index.html +++ b/www/index.html @@ -1326,6 +1326,12 @@

    Are you sure you want to open this resource?

    Training Zones

    + Training Zones +
    + Close + Training Zones + +

    The Energy Efficient zone 60-70%: Training within this zone develops basic endurance and aerobic capacity. All easy recovery running should be completed at a maximum of 70%. Another advantage to running in this zone is that while you are happily fat burning you may lose weight and you will be allowing your muscles to re-energise with glycogen, which has been expended during those faster paced workouts.

    The Aerobic zone 70-80%: Training in this zone will develop your cardiovascular system. The body's ability to transport oxygen to, and carbon dioxide away from, the working muscles can be developed and improved. As you become fitter and stronger from training in this zone it will be possible to run some of your long weekend runs at up to 75%, so getting the benefits of some fat burning and improved aerobic capacity.

    From 1c474a1e6c5c750ba498e7b1f6bf6650859603a6 Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 11:56:52 +0100 Subject: [PATCH 37/60] Add external link to whitelist --- TDA-Enrichment/config.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/TDA-Enrichment/config.xml b/TDA-Enrichment/config.xml index c073bd6..ed3a2f3 100644 --- a/TDA-Enrichment/config.xml +++ b/TDA-Enrichment/config.xml @@ -45,4 +45,5 @@ + From 287ca31775cf5781f4b2991fdaa13591331ff3d8 Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 11:57:09 +0100 Subject: [PATCH 38/60] Add tables --- www/images/aerobictraining/boys.png | Bin 0 -> 89844 bytes www/images/aerobictraining/girls.png | Bin 0 -> 95910 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 www/images/aerobictraining/boys.png create mode 100644 www/images/aerobictraining/girls.png diff --git a/www/images/aerobictraining/boys.png b/www/images/aerobictraining/boys.png new file mode 100644 index 0000000000000000000000000000000000000000..54a1bcc638faa218a70d0b992fa64cd262bb0bd2 GIT binary patch literal 89844 zcmeFYWl){V5-v<|hv4pk0KwgZyA#~q-8Bn>I|Ko%yT2z!w$=Si&%GL}5LJFl!!$MPah#*Tf;iHr#0A32AEnEc}QmWz&R(?=) z+!v~^c#y(<`Z(B{NOTm2qBvq|x=3U;!oXpQg~$HDh-yY0+aD`DSZ-%)&mI$3qZy#q zEB|%htFa6(a|orA4VeP`AG{FX5{R_aDoN?dS;EDe;F!O|;(bPOZECeGb}%*NzMJ1) zb^DAStpS8L0Mk9LqY(HCbD}{|VQ?0m*LZzHCxwQv*^)Nnfrx_-Ft2gWht`LxN=Al- zcftk)i#CRL(uy|PDPdynqH!QXe6`dqmxG6BgS#x%%|d@rE)ce5+KhaMuK0N&l4k3Y zJPYn3b#(L_^cq6dr(rbzFG7ZlT)XLtj2d?+Xwfj*-7!$Ti&My_8C|hpi==Plq4xy7 z$VT!b3bCj`4%DN|wj^B41jfW+8sX3x=SJYWFb{Xw-j1~@Mn}`c)HWS za3bS}^1}F2g)`{ldNFvY?jQxZJ`XaCBB;L!guosA43Q6kZ~*%O9ra1L({U`Y7227f z8Pl|r!lXF5HZCiUR~k)vUJ7xl>@BJ`>hWj1b8?c)n;?OmJYkYMOmFPZ!1y&sffXcB zXOGbdR3zni|Ek2&k`IB8#JOXsh@}k|aM^+TLHFQdB+NdDC11K|wM6J{G-)`@CpQH8nS1%#i2*IaNaMX>3K!SLiRkJoRE zBd-=Q`rjv!mZ{PM2K=)h|p|^PESxKn;%L5RHFvT$;OablPGV7XFLS<>5=wFTs%ls zLm0L#c-_x%=WhUHSYn^?;@}H=I6gprW8Ts-B+*2^6eib%;{427i4BC{>msQnWe=p> zfaZo`3`BKAS$Tu_3r7F5{yFM3CA^660X)>Ccoe!zFOHMgLKrSa*cVD=DT;(B__qiY zl6&N`@gn(nw4(Ktb%PayMmx~XB!^=5m_u&;e10MHk!$U(e@Sqgn42V-K~pGw@{|5OG40YSFUbOEvyg1(Ec zs!fwkH&TNcW-iFDcZeIxV$71e!c|DwKqv)Le4yqLwER&mfEnQFL zff4%kBSwOG{H64}eCsLlDXTjnkNCCtAyewb1R$b@4+T#&e~PZynp`_xtqQsY-589_5lGp=3kUDkrgOJQm8A*mr{S}9s->D*eeVlk_fDVBl}8O5ZB zq}imgq}3$KulK_)Up448Xu0SOR8Cb+i>#FxinC_$tO?v$>b^Foc&B-%JV=O(_lfn% zn^i|>n#Ic$4+|!_(4nabPO)2YvIi`wrDfDdsEgX5ggGHEU;ShcCUUleHE&8a~1~dO6a)fjQbe z3Y~TM0kUFdCt{~yXXS`scel!z_bim2to?;Nvtz?Jy^`ala`hI zY?36;D-TKHjMPtubhcqKb}GB1L$pJ_W1{mH*}_Nb%At*X;aKwNUjxizj%}MPJ@%9# z@hR~OmTi+xdHWyil9}j(J`MBs9dXQYp|T_sI&j%@opM#NhjVBdt2j7Me6=3tl;_ZM zSh8NSF*oI$w9V4WT(omBbE$6{^v%21x&q-O<6Pj3Fc2_gX&q@gf4KT^{NYS{vaGeN zx|FW0TsyIBaqe&~y^PORiO_;DUcPDUozBc$pSo?!V!aEpRn#)xQ0g!X7tqqZ-Mz`( z%^j_ubs!{GkG0+jIO1f!ozP!K?BTwm;bZZL{7Co6hnj|(gDOjuMy$`b#C=ILLR`T+ znHiXY!^^?bM&Q7w&+I>Pmp+cXA3i>ksgv2!*w{R%d)w^VlGa4sqTaY>Xj4VGC=PV7 zr{WT72)3785o~U0+;2Sd0FU&HQ?8n%4AdYbV?ty8q~^b5zu57%2dQ~hwI;OHd(pN= zw>7OLt)cnJ`P~W53M%@Q`Az$JJhorgfD-SCFMZC=PKDMx-a#P2qrQi?M4Lg5LivEy zN@|Khh5Qrg2*n*Wi*N-)1Q7vAi_kg9q;u2Bnx`$NJm*SOF?g~&w`aJUBxL!^NOw9- zE~Y3=dAg@Z!adbcem^{VSGXpw6VntcEB$4|(9TeN;s}jUxN}$+Q7xxL(`=dW`;eql%5GKT_T+*vjNm^}YKTvh|it|$c z-0$xAeic$txN5`dr-ilC5nE1?V`in!4g=lWo3Q6Tvn>rPax0zbwIa#<`Fu3fUW*wE zIx}hul4MJnsdq)@1mhV3HLBM1V<~jiD>a;^H^begvx`!7-yPD;_g;6b@eJg#XH71vfrq-sitEhd3ERbRQ+0zM991JazHf|cD zZhfVV@_BA%WO3v)F1WqdU-}}UL3TTZlZj2U-f}T7J22qqh{jmT?z-k_mG3d4Z?LEM zqfAj!y1GBZ2CnY=TBZ-QPrAMI&F3{e69qzOr80W6?Mr4i$s9Wz2^{nD-W97_rOFu^ zPnN5_ZYalE$4GM>tIQ@n_X!v8bhuQwhPmiudSuf%zu9Tm9J+k_0n~0X@bU}x?;DN) zrQfGBIb1AOdz5s|b(dw=hc~RQkhHetOyyRa!g)!a#?X9n`eYGc1Xj^0)6mm=E|5^k zTfncoQY*8uJ7Ij*D>?qf>!k-eEpFkvg$7zJ*)(|g2-LJYk}lA!gP!Jh3@Xmhme;*M z`x%}IUj<=@;)Nm-#D(ynv__)ERrbO}Q&s7h5hUAy5xo z=)7p%_G6ez&cf`*jMcWNUE}%YczIMjRJ5cRnknc(eK0yy({2%)eZ}vw)B1SdgS&uB zz|^d3Yw2RocinPz7P_RjM9A2rZ++x=YEYD~fZt}iZ%D2g!H>p@} zWw{C2q6Y8P=-@Z#ua38^23Sn$O|1s{9D!s`kJl@ndLClEgCn;Nf*OF6KZ%{5<-#YN-T3Ufm~?2tg7C%x zBJ;GfwRhq56rlK53*Oi7-^EN6WdCa7Y9m0QDX&B(>fmff#=*$K$VwrINJd7+?`&$$ zt0E@xAM)2<0u+|6u8zD+OdcK{j2>)^4$c-#EId3sOw6oItgH;LEf`$9>|KpK8SGss z|IOqNK4NArCeBulu2v5AWWV_u89TVS3Q$n|7WC)ezx!$CY4u-8_AdV!*6RS7e%COu zFfud!$@`U*|92^`l9i{Kt)`fjoteGMs|-OFW>#kYe-Zqn>c1lYLaOx_QWkdZzmoo? z>OZ9XOuvWlmm&RIU;iq7RhS?mKhvMe7etI!sbYYD_y{2_CamW92Dpl*rnV2@dZ{>j z3q>8*CuTyfnG``|>$FwCd46=$G5IO#Z@1sA~BInxHUV+I+mJ!y-h;1y83 zNQu0`xl26HXO;e2e_tEm+jXM1ALwv0ey84G)B{BpU%?-uw z#9=Dse`rN>!-C|$tpDf&RSpEwleDMGH>!Us3+ZVT>W_ARY79VyWe5;LP^3!~`-f5t z0oh*vko!LF%d5_5Hl@uH{yDI@&ZkdQaG!u>Ss&FK|FOXASJ;o)X6Ek!KFEkkQ*=|nJP zG!vQby5bDb*wJ$3E7D*9{J2U*v<+ia|78Cek`B;Be~zZt1tR*H3jOVAKBXL1tEcaG z0}MsO{O!OW@dkjCP!qaBLX2yp5F_PYq%^bzN2gB0i`z}kD2pY2(&lbr#_AglA94wa zjnM!4=tl}>3z(Ozd3|&g#h!pPH11!x{%rQbzvtr=rniwwoLbhF<5Ji-AjrOH(OT5c zgr2vhWpZ&2vSloHSwvtt%AfTNdnjZj9Qn0Yd#ATjE3^vPeqoR|=nPoaW^8k-@f-T00 z*W?$X+4nOakQMNjLTqUNSlvG6B96)f0yZ$(DNEM45U8aC=Fc+01@F%#SrBVHXAKPY z2^*It!`IePySWfQ9*uEr&*?bFdCY6CBv8w`!#X>&ie}I-!8T{yc|Bt5K7S$&8R)ke zn@aXWCN;1S=~{)+WYQ1qLxXu==?L@WfIUmKj_k8ttr5D3yry|i*x1drKlTaMC^mP-; zpPJN+gRD+CixPEhQ(>Z=PwDd7G$PWf>r)b)^Su_oUf`tUvbAkHXgo(o)kKAE;z7== zO&e$7PqS!!23mQe8mwxYhNY0RyWkUKF$~n}x}jtk(KEhUQGyzoTM~kKJm>nAoQ^zY zyE%hcVWWK$uYNR7-=S76ju3E-K5pM;k;zKGlJj`4(nqqoOD>-wVH* zXfLAx-24`2^8fY~9n!_Ig#8N=jSWg;Vf929!DUO8>PjsyGFMrW=a3iHRZ1Ly@r zrC2yKCy5nTQa%iI2@tw0x{1?Zo-M`$NS?O#Q_inS9JW0=o*CBK7{~X@JT@>1FP+x+ z9^_iFyq5wZMk>HW8f!-YcnRO+t>k5m?Q#?kqiq2Y1(#-j7_+keJVXY?y59Z$ zC)b;(0c=_EwU$gTCXsIFCAnI%)3*#^Op!Rf8qI3+rM;s*-rVaqbN9zKcRiA%(G}Xx znD#Ax45!Ju7GA5<$75TqtRtj~9&Ho}7I!6<#J2JpjmhjqOwvp8^HjS31Es89^py)<|QoVdlp z$jmwI@?@g>?tC^o=8}27;wxx}skzL`Ax613yf-u7_R4Nmgm<@{Fick=`Oxv>j8Cpl z#^j9MKTqH}A}^PF&_jXPA<@|3FiFfqtx9&Ps6F(TLVA+=$w@es9Am^M!^*K7EJ;T} zxjy#-u2J!#h60JVH|j>0A)lQ3)1LbulA4`uQqTPcK)Y@J2nbhM&}QQ}Hw|;N>Z*-T z6vH3;IAp-O`vT!pj^(0- z8Kk7sbB@>Q&g$xwC>D%Wlai{jd9=lpADqN5*Pqb%Huc}D7gHN&Iu&c33QCB@=@A{- zrTiy>8~o8_B_yIgazaz~8T7*;yOq9ia$`cxINtF931gE-ztKWz6e4pdix zegFlvNmH55%(iV)SQ6RJ4$Jn;*HS>$TqojXPy0HUwEKq?rns3mvC@TFEG%qSUW)EB zg1$B*MvD>OM^Zt7Q=@kgT8!tQ&36}R0?z|#w_w9n)0&3SmJ2g0+Gd>n3gknNn~9dS zRthhaWCXWyWi?W7EWY}a?wliP*STe?$Mnf5p{UJGW#DjT)E8W^lXHcs&RzO3*C*1h zEaK%#lL`L}&~>f|j=_L5`@qHX{M4Z1>w;AI5n4j2jSU7LA74sV7Bc`}v)&jRvHmo; zz0~0n#h*?vIYQ#;s(j_*o7a5+lfGB82#HIL=R(>*mC6qHl}mBSKE*AAc1Rf<1+5g} z^nz=vlrt&W5ziP-Dos1)Qk%81f4ykS`&=HhHMZm&ky9_j>FH_TwsT8phZ=Z%m~v!_ zjV6-aAzQ}221Wt{90BKhXv7GLv6ehxV@&%hN&ah;hG_TawF)qqCAo5oStZY2n<4A8 z9*Nsp$!g?&OB6?TO(H0&_=NWnYbWm*uOZqF;Y#1u{<5vxBP8(*cUr|mgDpnpcIB}z z`e$02Ybv-}&UJ@tZh^GS52b#rMQu3-Zm;d7om@>-3+DDfe>bJ!n2b(t!0lPM&*ZjN z&eR+>@cgzd$|T{qerV1TnBKt+7n1N5>#h!)Y#o4ZDxHLfsy$rZ4s17mp{>#x!i@_hLU+5H+?Z2!_!7irXYR9iXA<^ z_cQy)Vn?@4d}p?J>QXY8rY&9a{)m~e9h}|$shVWk$JJCq>z;EbJco73fSV}4un`|D z;0#T!U;Cz}4$mgVI+u&Zg?K*2zK__d+D#Y7;k6if`E&&8L4RO#`!elXeLnzd*%>nQ z_V&APVpZX^ihgLo-LQM9Ry=Bj2XeVho8_Z4o3^)o^s}#m06lY;xlkaJT?=UglTOqo z7s17td`t8?`M|_^;iGbCcIgCSueWuCmqUcHI}Jan0`Y`t)#ji^$Ct;mX5z@U9?Q~u zYIjo3y^j7leU`??!R*BB#ZjNcf$Qhv=BNrdFYHS18pr8TpUp2@jsBcIZ)??4vERC_ z8dOy=O*`gM5NsURUybSHKQAo(jPg5Sa4({=3X*A}()ANceCc-{s*;y!E2Yl@zc-ok zFT6O+rk94reLW~$$rvs@uShOa9N_+JGuO6r8+L7`l|vGisH4Q0tIemd^?F~_P8{RyvUl=#*Dqt zx`rhwDEKK?^@-=J{}3L;B}?@+XzVrU%r>QguDR&U)YG>dhx@h9-`^zIgtzOm_;@Ln z%&0KZPsr;}^n+*huY4cb&aAL4JnV1Nt|N<-CP?i$1%E1W?Pu!})@pS?#bhJP*>l{S z9X%oz71GcURe0c~vqZZ}>(5(s_17&m=X&_ha^goF8PM=n=yvbQrZ`H2Jnp9gwvJ|0 z=Q|nmPSGIQGJYR>(Mvu)jA;_@w$}}Sj6Z23Fxq&FG&!Dbz<$uKeGgn8$CN*p@EUEj zV|*|nO?lQ2gVF>B;CIn$Z{uLXvdcn}Dm;bYXw2lTPk#yUuV=iZl;v$SaJdhaKqKxy z2xZy1aMjEv?fVgCGQ{b3{8`Sn;S|wtl+30g7DlV9kBu&_`Gp=2TaPzgA=%I`xxP&D z!5b;il}@E^C^EavQ-OntS|0oEHt&AP%;}p>)YzlqR`D}m+`Hl`gN!R7qv%cUQ6HA? zeMTvLTEX02d$d5!>~{!uET_!_3%JrcGpS>(xM8^sXGHZxpHlWqbCX=KqpDDVn6?pK zOsR5DDHGa>{wY_V@CXl~ZvC=3*(XCS4MB#*2M%YqZCVqvi!;A` zKqtZtfSD(EdY-9B4ZbfYRTEtc>WZomtoFw-?i3v@|H%8Y1sCM0xl_N3S+VLOzTBXV zYb1GSu-y&CWHQjZz)yK1^s)GXWHa5A7G`dUC!sxyD9rKO9te z)l6VzZ})S*VQNNQ%iRlPpQRSJUu3!6_qSdtLf!W-N2j>Xs~vX{hh4+?U&y6sv>r|V zf?rYl%oj+bNR;Kpl(kRhZ`5>Al8qm*z~$#_wt?=F0MfmC;c|!DA}joG+tJmNZ5iyl z!!}mfjK3#9JQy`Tt_=VWH(BH(&^{k`NX%>BttS#L7}AzE43nURF<67KH55*|%x4`e zyk9uKMoP*`x~)eqLFp*_bVAoO8gg+Rt1A$Vs;MI;?inBSgF$RP@7U1mEDL)fbZTIU z^Z)t-_XKL$V{8^jQs4#*SK9^7~7sLx`C?!SJ!p z`7im7k6rF|V85{DUwJ;4dAxE|glO*1DW)~cmFzny#W*Nnt*B!zNYeXTeP_z#idLwS z>R<#13aYG{+Cd)_Z~;B=F(xB3hrred=%+g^Zei2KfOlvmxm`eiH?|yf_q>pbXX*CN znadZ0kZV19MNayrl`+cFLb93B7|d%DKXQ4eFnAOTwaIn{^8v$jm@hDL0ytp*9M-y( zR(Cw1X5oT*xi+{<0G!2&kGMd4XDkPZnK$k^6QQma3^SB<4_U&h#psx-Z3giyYznk0;T}cTG13FEq<|Es`2- z^r_xh7q&&dO51P0TC++!%5S?b-Q#J$rd4@)KH&CBzk`BKgTrfVj+ul;OE+rXX0Pqr zgko1LGyO!2~Lo@-TFJk4i2gSA(>HqTiI)@1f*n0T-E5%8uEM zc0V{mEJ|!TZmY39iF*h@`VlYJ`gjArgzYFK6BqyJ>npBqlx zAa4k`_RYYz?|FC@=O)_gn?niGsIr4y()CaaP`yl}o4ouEtYN9Yb;-T_EdG>~;{v2g zeYRi$hdYV28^!BJ4inwkj$hkn(t~gyxZJjPViwl&S#QUglxUkIZ;tPHRUY+cjmx{g z9}Hvra9XUTXRdIDaOrc$EbVPbUS*E|Ocn;N6Fn|wAp7xpRY=xS&D7@OcmZve)fiBz z(O6FczJUtm-y;}$YcNQE?ibhB^?u>&@0-@z@`M$_zeB7yiP~_uX5^ z&87jQsOQZ-P2{p&zAa}|I)?Qw%&ekbi2SM@fuY7viN)x_qF_naU2Ww%RBfA)DyJ=d zFK5iXHtBHadoD^}epFj6K!dgRMVaJm1q)h7wrynUW!CQ#QQ3*Lp6Vy88wb{_EMU~= zc=eD$%QwC>oz_@=uJ1!TU2?gZG6%8K;O|q7(U@)(t|rTQx$E${mI4*vcn+f{gmxq- zzaG3R?S5}|D8>*q1@;j9K>U#e9cv? z-4*Y^y74C`D?UjNb`Jyd->oR?I%dp(YO+=aLIi@RD^^pHqrucUpIhJt1Y2O!y7GeF zsUpMcZg@g51npO9VLi0@?Z>y-dsLP^kCZG)R0#=5)uaNbfo$0LAY2Z^iPH%#M%>sv z_gQv|W3GVC>Sb1^?dX6n1;#Ui6OT{_%}=60f$wcqw{S{ccoqI9fZ_;L>F>H&xNnrD z-Hb^it{ajlfDy?SRV-3Czetv%BAOjGuE58Mg9-*wFC{{~Ch50F{V#kmDH)vn{v)xu z<36+vzHK8aJZ-Srr|;K% z#)O9jKAKHZS836YpRMCjOtB?`7_%AYR}4~ZQ9ND!Hb&wo@cExZu>9U8dNK8er{90- z(s>-P82f&md8_o{cJP6@PF<7zS^Uf3U2Cxj{elIrw@2_1i`UL^0e)2c08AY8U*yqqqg_^+eII6_61r9A+8Bv`I z4B$`JrDeQou=BT`g+#U;K%OSP&C+$~x$FE;#m!clL)qbs!}vWFZdj?}0abUUaf9V! z^1~VSC}%-IjjB~`%FxwZ@8gW*GVt;y5k$DP{(V~#xdHb66q|k=FBIYYn)AJJsgY>L z&+hfla)IaTcrZ)A%Zu+3HaqjyUV-&I7#kBpGUPuXLALRhSI;AmjY+CgSF24#NPZyiKT4AxiZ>s|!}jc{67xA)I${aOG|D1G`Ye}Xa8yOm*gH$aDkh-!)H)-#3Q zZWc-9EZr(UzZmpB&UJ)YgMBNTRF6rqX`t~Ac4%3tTCh%hW{7maG}32XpDS$q4QqPPqen)afbzT44L7UEKAD$uC>!Mr&+wqYr_7#osgyGy_xkrsK^$ zuL3cJ9=wF=PtZFKYmz|y<%DZuPM#wKM5vV8giM|5>ctCh6y5I1nMZw$J{C23n+FK! zYADkamQAR|2&H>+**D%5?fDTH&*%(&R|3xf0J8QiuAP1X~#zG z9Wz}f&Ax*R+)+zFXnl^%K2o7-zVY+PtrV)F7I1*GCLE4$)6>B`&l!lExyk*kuMq@( zk-{DA1%@^vpsf@?Vua62k}O*ibmYte%|r4)URXyD@;02|hW+y}ljrd(8-(?nfvM0B zj3hnHZT;m~=98}XyQ0Cuk0(Xpdp9pmmuiwH-Zpq4MFI(-5Tp@^lm;-WGhT{rA5Ki^ zUY^1S0MieAGb~^{#wEL;36?XMhHqmW#a?K661BHXQ-UDOv(xK`JQf=-rrol`Px=u{ zXa-S~w2rK2W4fr3y+V6=AP&Co6GiQv9}K+SkNODDhK>Tn`40uleWp&9yDvs%@z7yj zS|zi^$A+}AhR$$j0n&w;?^nM@Uyri@l~DjKzE}P;Da0Z6QHVn?!Z^_}7UyI(O{tJr zQWAi#Sf+|>dNvLnUUXlQJi;e43N$8*W zKD5GL(yu-(jgOoaVBV5bPM>D?ME{KD$eK6mlV*s**7F<`Vul{1An{_f7P(?w*g(|3 z>;NOwU%D%h0{7gN_trn!6Jl@VXtN^XH9Ns#vc472+iue+u-bT;PyxGow|Kvi*&j@v zZ0o7Sew^Z$vA;od-o1K-*k07WG+d8TV|zBA9ja3!Pv@RVBrY24*@`n_al)XiXKca) z4a#}FkdpiO^mAzK;;sCLbzjhP@mP)EJ-XOqL8@TitwdDTB3m2H)e+?YkDaP;r1_+x zEXl#cypHvG6TD84eDFYcK6;#5ST{HPSEk~_#w-2Rv)Y48kV@!9`knc50KTm+$J3=iJDe6=Ye^XO|@TiZ%#UGqo^Z@KqYN;mz>ZTGG0!V&$Up;sbyvntCK&GB{?O;+2L1`Uk%z5;9t;P z+D07~*@7`<@ag!@F<({s2ARGLwME62MI1dwi?-y4YR0oLqq!=epOpp5>Pp2}$4IkgD3GlKmh%RiJN&5>}MIysyRO*-YV15BMhCE#T6OT8c>awvCUm>#QT zwOlP}87uO-g)Bxxm(=ywxYYLe$u%TNK^G1%<6B^s#rl11F|5c*X*|lcg*u(}QBsI^ zi*Zusw6SC_l(b^Mwvbf%kV@%S4YlxA)q;hHU8vjpE$dGx+=H!L#XR%in4@71>Vn2n z-Qr62i9#7 zq~6MlsH*mG9l_(^H!L%Br@Bo;A~(SO7w0c2yNr|w83;Jy740R1-_wNHyoQjS+o@p{4Zn(8^wlO ztYIaXV9m<|z5}Ee)GKcJL{Ljaf7XbyIKoDGM8icHpKktL-^mZxK@A^G{7F4Od>v6= zp(vc!!QCULnHj2JY*Jh^%9&9=DFxxIQyk0Gfs6ASDrQD;D~v|0Eox1YdtFHz0Y1!w z;M9`cj*EJ2bQa)j%%6Dn(J%oSm1cdSVJ6q7PWzmpiJIU|{F!@%Z_)8v3~Bf+6nbt0 zR+hNz5@J3!#M}elcm1gc4v`Poku19cs==NN8#%@HwWB`q8LNv6)b*_zYYVZI!CCEZDRnaRQyiU@H3%Gb6%u-{Sb)TK)&b^^ z-^o31AZt*@Nud!R+dqx^SbuNIQ0Q6W6W1Y^+B>UnE_Kd%+W%R9|! zRm}=Q>d#(^3>+!bk;->7$LOm!h8%DcZ0%g(TH@_i$D}=~E!5gy4{`q7W9?59%%9ewpIq#R|dZSuJB^o%+ouz<^AqaM3~oJ~MM9(8-? zfB?Vy{QP}?c?Z)L9UV*ZT9l5x4xm(S?qhGb=Uk9eOUSQvFzOm8Q%RYj?s`urE;I9; zHuGzi);6p*buZ#A8A1e-8aE}Lc)k9xgJ^%-f2A==kn2ZJHH|v3;;}$N? z12K6or$K-DBUMA%l8>_cWN8Yg!sZ0Cd+0TB8G7AlQ%U#(cPVXaxdyrOe3Jr3T*pmGn0vD~=sf`W3d7=F;=!PmIl< zGK_JgBB-BPin91#(KUagOi=p`S`(;}!}${)@E?TN2isRj8Sd@9#nGQojX&T*(!U{M zQs)e0^(w#hBiX1KUaa3lHdH&(s2;`MgZ?hL8rO{9s zwS$JOh<@2J^rV1Jd-fZ4Dg6jG4?Ktuo1)GF_N~5>RLoXH*sht1&&C@Amz(h8lV|l# zXyTL|7x3B_V>Syhde7mzNas5HXyV(R8_9K5#p%mQmMk>|+dCu6BiFm;8&bO8nj+mB zv(X*B;KT}Gcs1{C{s!j!0k-ti9VTd>mx1noB) zqfW2RfAO;_+0tA9iT458U?}t_>Ox~Ryai*_wepvV-+Oev)5G-M{8ex!h4ffCvvE~D z)z|>1SSa66c^0Yqu6=n0m)BWW_Rm%CKVoaBnM+{&^LvH#l3M0Bn_>dk<9+EO5i8GTb}Q5Oa2LrKF8LzPgMLhNd`SblsCmmhR!zt@ zfAn;^IOt*Ke9?e23aM*E=1fQFqj=6y38>@BLUWyQ+F<{?uEprlUmuKE_C#9w=!nwT zX1Al*H)zy!47d=VwOy?rc(%O(dv9>3ao9kyiO&UeiE5yc2TEMOWVZU@I<7abE_EG1 zcHI|!sHX#hr$ifl>`*Vwske(f0FmNZbB@QPyVv()UY`dp)_>|jd6mgraIsNiF zlGmL&7Ye=~^rBt#vH4JtU^(nuc5GK7OV6C1#m}6!v{+X?H|C#oFnK3C*FLGzo(}1u z${$U5vP{i~OAL580Y92aiGHHvk^YB1KQNd0-RTj}4l*YZBv?8Sic7cWJ2ZLAo}rHu zKSR2crX*Pc!X8^Asey2+BFIFRWuLE>ANwqC-^K`>9d)_nCb#}zmFm)(3FmuQuB4Pz zwN)=dhM!F7DEC43ai$C(f&Yn=lB3pbg6jv8MTYTLZV9M_SblfGxk%LbG!t`;4N`w81Hzo zxkp@`iaGOTJJ5j~&Hc{jzNfSk>}RlW*yMR_N=QJTk8;%qtDxC_<9vYi@Nl`j`*nIGqrCGZm+F8J8oerSq*I<6iUFl1+ca%kq8^Dd#ucSuw4$oFbP_)6qO&u7{FD-8lrQTEiL|^ zDYnrea!LK;mi(O5JRDM7J4LSa=%Jjpeq&Pp$96__0A3m!aIEK&tf$J0A~)6KPa6wX zH-W{65pxyfTr1Oo#bu&$AIAIU32diOh$b=yKD){r8dYlhTkIOO@}id}uSdVWV0w=p zW=&^#(!S8|qNm=0_H>(B8TXUYG2!p~4UA8QBsh0~bcc8sSbB`d`rF$lywHN}qokf@ z7F7~MWZ9Y*pllo}+XjC`_HCnR=t0G9%E?LZ=2@*2=;rnb?snLl_REh|5X{$h@4Q;1 zuEVniiiZ>;nY{kszipx3GlxQ6Rdk-cFzBa5iNyl1QJFBcsvDDOEX z^SfULAE&XS9tGd~pvoX^jpqe~%7zFdwtC(lnjEbb723r33A*A2*J9m!OTMK`@2(S1 z4DYKVc+u7r_Hk^IGO1LQqtqf*P1J=$71W(GP^dcX3m|#06%a$*6TQ&~^ z86n31zDfK@f%IxA0i;>}Ta~@j$j5WKLzhG1JqPg|`&^$kx>}{yoP_WdOu^=UOB7`V z4))C$$}aae!q)f1a6cz=j<6k@`Wf{fES|oUt%A-HVkVM?2MEvGWGa6c;-dRX@`Nt2PsNTp9+#DLZH0s!YlLNw|*4IDe+{t!QIpJKS5`^eL> zgrGn0?|=G)*4tO#1V46=hRmOYjO?mB-|tB>|C$CMO%RJ3EzuFheRVJ@|9Fx!Mqahj zrf_(CCztLVhvPhfr%|{b2&pB!G#Rr7FFXF)7y8)DzPPZtPWtsEce@|=q0D|D4(Z|U zdHvG)4=khHHdP)Y1o`2C0XKc_b9aQF8~^CSe_ZCHF(Q>10DLg_={27rDj^YaG{Mz@ zyl5j=iA5Z2n<40;h2m|%gXR89Aa-B0_~j@An;h;T@f2&a+pN)~&bG&<@id+xzGNn<^EL=b>cId8Zioe=(aaR7WlPi=tlH;BAng;{(} z>WneDQZ0pDGCpamkinhyj!j;ZON|YXABH_Av|@^$wDW$wZYAbEI}FYHsoBQeTPr$q zmoBCX#?S>i1uw*u{M~5`8KL*=00Gv>f|D~V#@Zn!xYV#U=}6)|EYtCne!HuLo*tu> zPJ=M7({{txr`=M4VBv)04y*{VXvB2et=53Dt|!TM%Id%6z~`Qvq0t%=|HlfT0Xc1j zPTIh&GkjbLo*p@$llWe(7c>Nz(OWs0#KVJY2) z{70zs1H8Ut8l5xxPgF*=@QBGV^}Ac!Kh0rOhInp%|5;{vB+@Z*@~~JU>y$;Ja$6gy zkin$o5H@j*i@YIb#EE(=Nx-gQRB0uY>rb_5KhRzadHCb0y>ZSpW^=Oj+`p=DeuL`&lL`1};wx(F0CPTjIS*}Rd{(iV-Sqn8V<~dlr7~}a_I+O4j~eMm zI=PHkbKB>B7*CqLzX#LT=N*|JMX>JjIJ zFrCuUUWUR>H2_{Z8v|RmJGhVf z<3-@s;I}E|SWNY+WOnFE;qw^}MNki~&v-$(C!zcKe5-z-ld0V+r_IZ;$4O25WQn$$ z`7`Mhm;Yk?|8s~R&FXw&IFAeg23#U&wY6dP*L|CMGzE4xc7Y#z)r0z^*>=;$#4^KbQ@A=!wbxC_{~L+>vj}; z*DrEdKNdJU~J(BO=x`5$rOFR!X&4s15rXnaOmVilSAeBXD02B6%P;w zz2^j2k9>Q$@nXKxw4_-*zHJZ7Gm2652^kuBrIy~#aeQ*Lw37(2rxB2o=m(ZTxHy3LN=BhMg~bM)Xj+1Iu*gd{Ud zr<*2P?jfo@vP5F}w0)Tvg*?!Y-8EnrtB}`ysh9?vd9;Ds z6$dQ7=C1r5z9Me+O~wW~0fuVNWsQa>F?YG&;jN0{W%Z><*kKJd zw5GY;iGxPCI1N*sojCr@NC*e?V}1^$e3{Fy$=T!~R0sPU?LT|PaBa&2Jv`x3PHeJ5 z6$ufa;`8OKlr06LR|Ap0p~?GC;^@A$zdK-$qhG z4>4F^zsAbPdSZ|58kA#EPvFvckLephcQhlki0R}lnq_=x=_SVY9Lx7ZKh3}q_QmFw z8ksjo+cH$bbOAtq{ zVK$3vL4h>KIZ14}olmT;y9&kCrvt)6Qx|>LOxr>5gP$&>HcbLf=`_3_Wc{MscjtIq ztufal{#~!%!So`II|c}O|3EiH1gr)1y!y5aF#B6A1z(252&RWG#(&~6T(M~)JB~RQ zc6G&`-FcWdJfiNQ{F5GX@d(Uq!nH^{47GF6{UO92`q~5>?Eb~^0p$%Mfu`%QD5?4M zj()v{mq2^F`T6gVtgsOxIPrIRKcwdGUKs>JKgA#a+Blrd?H?hBe;7)zrjS~KG1+{| z9pt|+y5O0C1J0?voI*4Ho4E$R9jXJycuPi_q5gd`{b}#=50d-r)Q|gjqwo$U4~*Uk zS+bt}yBGI|mCxQ_Dlpy%S%UwQj1q8zG3k+fe`gsSe>MP9(Jv$w`5%ka|6}W4<@kTg zXq_fYEBvDtz(4u_-<^;F17Rc*gMU`;?q1A`Rz2KnIjU2d&x(p1(9Eh^_{jY*|Lnpa z(uwvDAj=a4fuitVtB)jv9nM{0g;=G7yqfGN;RbgLIal?RTo3^_Wbwc3(a^>H`vUpF!2ZL zP{fVfDc1qx{MO=>!;ObKSn>*xXqY!+Ru^1_2I8BJ7Kh~4{ESP>xh?(aceRQDYq$xt#>Kr~AntojURq}W4R`b5a;)K<;+4H1&j2hPTYhOJV8 zhx8Zjx@wp&0yvlVeQV0)EvU!x;WN`OG0VvWXR9aRV7y)KSI~^`yCT{T1{)|gwn!Cw z^SxN9wwu?{&RcxDG5PhZ^BnV$t&KRU6>(GO6MF+F~Lg|Zg zNMMXWWc#?qm(%rA_s8nS3IEgSszW~^Gurh6!F{=PZ}es!2`@x;=R-{J2_{s|_d_7; zuh!CB3TLB8Z46wWeIe|CFeVi>;<3|n%bk1pIw4cW#5_u`%HkxgGT;i(JTVO#=5K-fx%(2mAT?2l}5H20_5 zYkTfYdxd8n+BdAOFb|4LacQg_k$^Px3#^;$zD@}XW*C|i9B^io*K**Im{*Y|I3wx6 zqXxery&!RG48_DExu2Cyb!!kE=S(a>3DSz>QFngXN=X%C8&E~8KCr4}t2EWhccGcy z+lhB4S!|ws8enFPxl!q&gmXyi=7*IcH4kC$X^7CQ^n~Ox$(&o(6Q(>Ppsvi1OK>J3 zmZUDR<9|ACy72tF08xGcF0N5VWf^3{%G*NpRtR=D2(Pk^m$-%0m$`D=iy$&z0&$6m zB<;))M;Ekp=htTZ4DmSu^pP!50Dzrd{9-BW6vh%<> zLym!+585Z>VN-VR2eTk^q1O-4IUfD|s;SNECTnToM#BXoe%`q2c|Kiab`*2O)h>g` z>{ffG)SA;v9D^ZQ-hXi6*cw=R^$+Q)g&LF4SHyYAAi?t65=;T!ZgeQr2eYXEB2#Zl z>D25j_q6{es<%J3oWQkmMM=~`0Q&XiT%KCXG|jyFpxce0wc0^Zzq!xR2mSrQHSrg_ zZEqXW0QJhZu$QuKtTzJacLJw0GUrKl~b%zV}ddhi}bL`2pIb(%<;_ z{40$L17gMQJUHJau07?IYT1It(8dtv_3YB-_4ts&#&h!*;`LnKXDa;AH8HFKV5$I@xB=}_iq!{w0FG8W z?&0BK>+4lQjk9qHfW)rrx=N^zQO}c3V>2si*DzzwlZAacqzUMYL*h+AtVG{}HfE<6 zrp}}NIrEbUzzW`{!_N2@h~yr_X(wu|#_^WcBq*$H?b9=~Y&!G%e)WRlVuCI_+$$m5 z7KaBCz%@6lMylA$*7cywUMZ0U+*hTWdf0m z4hY4Qm0#PJ-+bwv1A0SBy$}^n+|LQ* zbp!l}1zKuefpN0cMDWf&G<

    PTHYnleB_J0?64G#{ABTfMYNC%7mohkgizywr3TUF4U?!la^!y@517@aofAW&+@l(|cj^tE0d53NnAkd5f`BqB69m<@@3F z8nmZm=vh=4*-!c7N8&%1#<=>h|Fm!*mW zeIPmcV=BRiUz6P*ho+|K+FanRdrCbRQ8~}UKqauX(HM4m*Xn_|LV#>Z)=00fn#udR8rGd`<-$Qo2@38Dvl_a5 zG{U91VMkg>KB=$*ZW{*9|tyznGZLmDZ?rM;T_eSU%YrYwAeqbNW;kpDC{R8+HmZ*0eC zm$qD?StI{)pTQsYI?`lV?5T}WGDulpAZL%;3&G7qd># zhHRffCgW_d&ptBtNzpgg217_AubYXc`!mwLSOE{{r*UAfXr-D*LgA|T+!LW^d5jZ1@PV`iH4zLhsz{?0|~swxtHe8 z5*Xf@1_=4?y9oYB{On=3K9*m9bY?Y5*l`^Y?~n-pr%KJykcwL$Z8FZ1i)B8~dRd#+ z;~fi4)V5S3P`T(4jRd8{ya;hebwgrzlMsxBjDoUfv3s=AOd<`45D!Px*s3w$m%W3hfq&Xcf*Z$Z6{Tuy#vMGm zq4K2&6RxxeaCq~ghp)FV_7n$F88R zcF%%Ijis;i3)h?}QW=S3%&a-v;;ioJYP!2=g=T48SVXOPFvr7uL#2#g+@dS_#lXm% zu3dAf=Gz6qHlcig!BuRZO0M1a17*TTM!2o$Ev5_Iq~NoWqIY>PKYsU!CRLRRn?+T5 zL5f>JE;wOj!wG>m^1@&1yBJJ*NU$?zr?HdNOgb`xPlRJ~aYr+XC_>}HvxQPbj7VBhw^Cm5+T;KHu}g^IYHinTF9tv0WzGo#7` zLBU??z`pXq63frpzp@*CGC#q|RJWT^E8<=;VajSxs0|#P1YU;DVZpzCLsb^d8i`ra ziENN1*%Mmscq}V=Ic?U zVUSmRJHXCv%(+NEP!=lFd)2RV?R?NY|Ml50+12oaQ!R_W8^9A4+Xr*gOOc=z9IA=f zG79W`lx;`8+@#;2Q8YkiVczcd3K|NuI=u}d(2;2m3kIL{CXE#KR1mz&wiZ>^=CjOt zv?AoL>@rs~0#RP_GOMy2WeJ8#aqb7X>&@NwwEAiZJWyVSDmSGVW5 zmVxis7omoeF4@7GW6R0pUN8XLKIXd3EE2=>esCG_j8){*+4iR|bzVoFYA#&AR?|<@ z&o%4Bu>AetsD5q-5$<$lXsmaHi)mO9?$61!Uu89+6o+eU`SX^iMi{QyBMs3JVSH2| zWZDSdVN%O^N)j7h*a)AX;vD2ahJ2q4nmvC;U)2$OKNbJ!qXWs-AN>1T0}fm>+{9AK z6pc{cE+2Fh$NcFB_dRpyJ)#^aOyvH>#b?J`F{;1YbA}7)P;>N?;?EzUkjhRrB@W5+ z8Y8WUxZ6xCcF(vN9F8J8q?V9sl^7oyw#)Fnfh=N`c6G;Xm_LLX$I0edie@YE{LP=a zJ*mXFJHaTmxe z6`u!nY&gQ}gdX`|I5hIVP3ym8xXz4Fpm?b!jcm)P?i6kvG$v3QC-A*mKLZN}Q7l$Qz&5+*s#}sG8xq7ZQ z)l`D{u#`1vN3{cl#Fh?9qj=(mA>YJ)_OHA}`i9n+$MDVuHs(BWU#v2P)LThl)o-;t zA+5@93z&7v&hnBa2lhW7EkLdtes-ou`y~j5o8;h4_N@C~k0?L5HHo&{j=P8MQTovl z?Sx-`5|cM0TZJ+glNF;E%q%Z46jzT%v(EBjc+;PfPB24}*R z&urqj&$U=4Oec`1T(}KMs6Y1)8NH1STdJ$37++VR|KxWfme&Mqm%Rbr?@#^ge-#KC z);Gs$VjpqnfD#?1nR-i`%5GXCrj7?JUg^YvO|jy@U9wk%Czta?!7i0UPic~Q+? z{rJ;{BrScnAM9i>c`&h|gk-siwx^jKsXp}{e?80GPUXUIQvHR)KhyB-YJ0mWYnr`o z4v}Qj5#8r8sP$o{2gO;IqVBLMr+Z05@r9;J%*~IfwXH4i?H0KgJ7n*c=+ z^)S8B_9mFOQ;Un+vhRiu6Bl^`48sZkgkg2!0w){(0_M@(0|qBV5K+nRL0x=hQDKF! z*&|_RmSsrYTwGw-E~ftzW-LO%H$&YKRVB%%t?CFgFEtV=QyK&f)12zxn2aEC-;9;l zmpORn9G0E(m4Pi~y%Te>h-)1sK zNzp`#0*Ee?zFW6V6l)GM-_gOcP;_?l%oDxsrrimq9+xv4;Zcnjum$Y^0b_(ZJifuNe!AN*sTi~Y@$Q-X*-QAzZ4;Y8EATz-D`%@*{Rw@Nnb z>%?fDFSME|Zn}2OZLN2;EG<1jJ&Q}~D{2gNHhO19r=V!_rSWMl_4PB9YL9~vBaG3w z*HLi3!SX{fnMy3wOr_sZ9j7c;=)yd{0zG$tM=VH1g$;Y%Lb?%p3al(wd8LR`elCE? zjt^0lF0Ud^^K=U5FJ8{gP_nkniL#12$3WZft>fp!=0i1^7FspE-(CIEgkZQ1L3|wq zQ(usM1Gn(;ySwM10=qAbGi9{PV%}AQ%7G%&xbAwm2L%4Inble-j4MnMFA;kN=lyme zW(Qy6cbw2*;`O>UFN7TT%G|9+J$@5(y?%VKeLgr;Arj-MASl)iPb;-|QQoD8$wT`* z)f4@4^}Va^j=8ZyHvkE4%J7P%L-3$8r5ueq87d_EzOI=+)(#*TnXlRbU9oI7IYW|u zeXU12+FpDX@ZhOy7dqcI{q*hYZ3CzZ?%T(o+j^Qml&)RsT86!BaU^@Oh`mvi7G5-* zp;D(b&w{YeTWBu0QaAw^VQi{~f_IvyG*6&#W5@`)^_qhs2x2O5_Z7w%A1 zVM{3(WO0WaR`V;fun^r3Ik?lQAjsNp&(jd{HDg$;z;GX-_%WzFi%k`8vxS@l5K$H( zTk8bGtC~5qr_+3L) z<23Wp+MU(D)0w~#oRk(C;ScB6T!d88eo5zW&gNISedPAcAQ$!=KCVx_ISj+{M5G^}TsfBJGuxpS><)0glb^hUsl{2KKUx6t6MB3vwuJh+L` zJZ}^ayltrPm%<|;QkNV6rc#{@DqDji4w7gvwlV?m(BeG?XfSVKK%esM#1Gp->pF!k zOw@L1tz_^XKf1k2hjIyqUTXL4XZL6njvFagXdL$&)EKd3us>-REou+wl9wf(HNPT{ z=O@&3=kX?Z04imkG?)_#wMt8B={PtzWP&QS(1?&YJe1nk6CZ4|_Jn4BI2Q@!vtVWo z8EDVy85E6~D}^7os-xXeBc(5$MViT}YWL04DJP2D(mCJYX$kEKLKI~tcy@h2@cMBd9@EEfs2~V%Zd88N2qfFkba>+UZ7newfSvr4wfiui{{9c ze)&dOOUUdx$>ABm->6Xis-AlLnF}jR-6DbiLdNzbD6=(f*ej3$OZm56`Rwde1kigT zsBXGI2!;pd@$PWj5qH~Ir{hEC;_VX9OS3Jhlu%JHzFemfcMVw($>(6QY4d&io!!H? zpJ)>hR-=_=FY^hMm?_{yDk()vgO!9%Vnsb7Nn?2)HDlE>x1XulPitkY$?ylw<+P= z2tuH87?fC@{MaA&m3tb%MH>vu_>|>Oe{Mt16DVQ^Wu1GrAoneCiQQ;gH7aT>>QJWb z(-<>jk^|jseBtYp$t}79Ra3Xz?~dIJlm`P0>n1F?DL=|F@lAoi3GKL;?&NhdU8;y8W`t}T% zzK8|ldY=ol`)!cB>V+4|&c)VP!Nt^~-S23AXLoj* z))QhCdc=8O>x>j#>(4Anr;K(=NC=tnfSfMU-k^Cmx3b?t4I%!kqyO&iAAiRM1GI5x zg`OnIBvIc%{Qc27fc|yCbVK;=N#q^0@V`H;@$U#9rVIWE0{rgir{l0t4;DG1d zUEn|Z`5!Ld!8?C~;C|Lit6)a>dxOGXb20q;x~84poxuGEB?mH)_V;b9+J>0_!9=$x z)w>YC-2HdUDF03dn5yX{FavI;wY}7TXYE};kit9UH_<7GYLfq;B!>>n!1<_2kn-PI zdk2Y_3FbQ}3+k)Te^4T8*ro7F~ zPx1b)!-*fww@oY^zoXl=%izT09A>(OZW_or?|4SkO^gAqPx9-` z3o6ljN%_K+4d2J$YeAhkE7S@x8@6f8l)r}f>n3`4?5jtHvl1b+a83feiSZQI=?UFk z`%^Tpcn%S3hB2qalt62OhE1)y%UzOtG|9Ty(w$9C@ud7w-YNf@Gwn9yUvp{P3q0cc zKIpyg!1O7QPCv!P#1+DXKi|2XC;uT$+Z_sSKkNSEDL3l8kVQ@0hAmabLa1<}tL|B` zlj@am=C_OrqRGFg%i)9nitOiBKwbgX?^G+u7p~cwo_7PARNJa6R`>Kp11s6nRX#%n z)r$mz1zAmEMYJ8A`C$q5elg#AzfZ^;o~M{!3;Ss=I=lWrR8akXgf8p}H z>TKAxpOI_m*+`^h;|BK)W{s>-PMMN3gpzTLy4(vRi?Gm?6$nHSD zjusk>HL|(_R3LM;v)29V4u_`f{%S&&DT(DsI_#&G)A~wGxX!9V_f~c#W+rj* z(AkD$icNDQV_W2#O>;^X!BT}0hi)q=F}N2VN@jT>!J{}Adwy}h)-RoEKy5ygGW_4b zu`;UXgUeq`g-)j<{Y(a=hQdP1z}q#_+1`bs{Ot0I!R!IR zSA;31Lpo(MQ#BDp@fuKURmLK@|2P25qg?Bpq(NxO93`mL2chernzR{(u zcT%=p*9-x+mwM2YS@}qGuAh->n9_4Qjx(swSIJa!1YZfW`?|zZ`=-uenkPZHhx|TS zovnvD=*1UpqSBtfqm#b(^CGWV>k_4tniIgw$w$tlIpKt2Gn8q23U;L~Znmds;8(cC zWpXQ;WeG`ig}wxD%I!Cg7v5}HRpl#gS{ANxBD2q26lmI6I{uve=^5b5OD8nj%=KhLqRFKFEuq?n*H|O_j)yBcORe&l3s0n;nbM}y0fKWA}Lss zGE402PfjB;y~a<*bV(c%DozygpMO{v&Te;L+h}({QkRwIh_}G!dmu-6^GY{pjc;6b zon6H){&bZk7zQ8YDgnG&)cQ0W>Nbue@J?2v!ivpFw*tQf zlJ1^`EE&&twdsEwYsk0c?yVSQHS$8qFR_Fd=xPoQif)42ewlg5?j|yVm?$DHt8daqvXC_l*u^nu{A?SpAURUn)Pz=cK# z6rVofbyz*b+=Z7!{`*5sQMkaS$#gm^=Tz`|1ILw4hxvuII%6hBh!BsOR1td_GiAnD zQ6=PJHDREP)v^9NBeuvULd6Xwr3#d5CIN*K`PGtuZpM`^JFe2vWng>r12IDPsy z*C@le;@eN>}TnS%IN*t#;7e=0Y$grb^v_Hmut@)e^^P<039S&2SgjASb zfz}kRmGAiLf=dQ@DnJ+q?K5*qk;vShRU=Fr5$i-84sDYP9z*gH+YqOal`rb?$=Wwt zp0mkM0o6(^pCY7i^U`CBGq_>XI@4&TL>X%|H)rg{GPFi0GnTlsuRUY9$2FYq(M4){ ztqcQF0~*_xvx1VGty`I$(WYl&Mv6j=!x9wqo>*N$# zb3QguMF+lYOz+EFW1md0?0MC?oLiy`I!f(LZ%!El4@r^N;!(=?W4z`B z|sWjInV{uWV^YMb(?! zl3spTIZW}e7lZ#Y%}1SBP_kV|_VP-;^U$h_1vNp_l`3BtfJEc<=ktTr?v5w2j{0EM z+fsh-_O3$s+nmqfu9?6nnYBFh>e+>2%v-7}(cJMik@QTUTg3tpwdw}2B7-96k?h!F zW}g4*qXqBrIXPviZ+g5qeWSS790nn0+U|f@o5oD7oBKT!GHK&Sl zUO0w*J5y%0G*iSNf!AcSBAV<{Zm}{eQEzje&+geHH_9F*c+G6{i&XQSl4{x z2&>+FP4iIAS=7B0UUC~1TKH=KYH9(A_e+jR`M?9|hRK(%#9np5QiGz}*0UBTV|LDO zS3~Cp!}wgz3Xy^mYmB;*e8}LaHC_p~9Gn|a(uaUJXAWbq_5(3G^pN+%g62TZgOX1$h;6q(~A8&Q}-uo%mgjDTuaXQWN~cUN#W?UZT43pd(ecIV6&@^MJJJN*ZIT!;m+? z5h^cSm$=ouQ4Lwgg%T0;s=yWLQOdrc!$N8h6XDEr2tY+=Cl5vD=V&!rJ_J*XyAr;u zCVV-bBc1-WRAd1&=SO4?b`Sl;h5PCBy+aZ3X1DtUeR$xvN0*HDSN6mv;>x3xQW8(v zWa;gif&6SsR04LL*wMjfa);!xVr}bsTHg!az=DbZkhEgizEvS-=fp8l@sS$)WOSO2mYLkAheb4rfSqur(}F4Ie?cWyx4T+GIpSL*!TYuU%>)7&-^ z0S34Xe);USMamoe;ijm`JL}dA1^H38+WeRqn_eZc2gd)}r+-arM zF^O$F=N9)azQq?pTGhyRhR!g69`w7>Q+W!ixM}Fx{IcTzOIrrdZ5E$@PK)UzeM(T+ zn=AZkzxz)8rW>R1kWSn4Y{sjQH-PS-pg~kInVC3X&^MEIY=-EwnD4_z`su86Z;%YM z=i)3B1Q|yN$~3JY?cuz84V8e`E6-}nHm4zOZA53Qll&(Oo37~gCD;Bs9FdIc&6|FU z)h>k!x8{TB+au`YU?iLB$O+2Hk}mSK4QD4q>|SUpUx+`iU{Zca$hx0I(%b4CTYO~g4GxxE9uDmRPNO1P;pBft!UJFZoT<-= z8C`wxIkx2o_Kj$JkiJ_>kaxfR5C13+xDYLIZT@Mq`3woUGpykn|N34li%VKWCy#dT zq>)iw#rm>=rb-L=EwI&{z+l#Dp5L&(b`@iFvR0~_ZP5`-98 zbP4)^EvZWK{;9qV4b=%2!}48Sey}wgMyS_yig36`zvmC~k~JNfBcE-LIqNAW3q)b7 zAQ+IPe^MCI(J>h|L7fG*T^;ykh+%;)lOi!j`Y2)X%-rA~7Sx}Ek?^hS%1c|b=;n|;0J-94(;+$upxH27kZvA5ev~5#b^mkL?9-A8WAXFMV9Jb*1RmX3 zH7j6>A<0ffuiwZlAk?-(KBQ>tS*g6E{6@Bq>lJq%_(_q(Y85xtI%+ER{D*~uI& zvVnXwd>_&nYiPq246{%zK|ORpkTmJZ4Cix;R$ayfJ2@M``fZ>ov+RE8JR)08TsL^3 zHiidqVM!pC>1ie(S?s(XY4Zv1{tOv1EwtUBqZ!L!MN}^^F$zi2bc#Mjp*GilJ=AV1 zO2bisNw(sUG&_>H$#7q^rgN+E7ZD}Oqz(*LB@-tES6;1GAHF&->xAvwSC-D2b-Dwfv z{dd<;1E!7Zg%FOd`)&I34&CNtpB*e0^AR~}sbAo04(j|h&R3^YV(qGE{TNlGPfv7r z3iMh>&)(ox8&!z9njDYyw{^{iKib1Wl2$Xrn@Al_LwG#KZM=C{S}K_*uzDrmC@IE_ zkaRKmqMP|LW?f|tpH&*xWa>YTL!~>OyPd0%B&`?N#Di~k*oUsY0fd0cIkh@W*zn_5 z>w@pX`)VK7d{Rtd^coEbHoVR|>TUW=>l2wy+I&D{wOaEakDH_>>S7tdoB1JDeXq%n zlbsOcxsmI~tx~AB2fG3qh(0)*dZRe*{%gKId>3|TM4l9)1VR?}s8q4)*P;eF;Pn8`Hmjxd zm{gjcF@fhj9R&enAb2+#3L_(SEMuC%-%x_4x<)o9hvJaSRv4Ka{FK3;N<5QTr;e?r zDn8L@LwU5bNQf~!1Xt(=pflm@XB!fQ&3}tL#vB0VO>osQf6Def*zIdNb#2?qo;dr) zQUjOeBpp3Wj*{q3$cR&CaYQxh;`Ui6iwXy2fw{G&gbMV)1J}kr>kyq#)RxCo;8*IM z_0Y(hI#x;|Uq*j~1F*=Eh!S`n_S#5FIcg}9@L5oZXZ75VPETJkYsXMIYo`Q= zB|xyY7EgUmN4EOulaV1YYJ9~;Uy;U}GtBxkJXW?QPK3niY7q7~vI;vQY2`#=59vdV zxRH1X7dudC*@I^NJ$_-TCL2Sa04|N{(YW1f&p`y^i?#;8Cqt`*FZotZ4fsa9EvokPNVvw~0M~g;KCK^;J+-(r zvGtota4M9)Nuj(pkp=+?_B-1ok=g0bw^qW}G!E#S=vLGaNiy;fAXi<9f9KXa)4(@TUb zmY8Tm*m-^-VwSUhsTj%YqsR;Ll3k-djKD3TL~Q--0#5c1BeZh9j{}LDBOW#Tcqk5* z*i@8y1DZ&f5o7^haU#-tXF6^wROkuyub9cRFqmRtKi)P9U98XMxD)MAx1sOSBzd4oDl<`>@50&WKT~$;A3F z;+!@T-{=qP+bW@>Kv|7BR}Xo(aNlTqEh3OZ|pJjR}mt8>Xok zt16me)tfs1qS;9RW7b2*4dW8y6?$QId+huO&s+YR#E^@o0|Xe4)_rd><&%AfGPdY( z@0-i!8|a-sSm!!iL36Yj^&8Le_&Y4hS+0D!=5*c|=X9{mnz@*VLw#WDfSg{gU2-O6 zCis?=NozJ0*rmPXcK~+cjp9xghDo?XN^+qJ1qLcf*h8%cJe-YMSLug}T&T7E!@*wt z*+E6Xs(pn04*p}e%2xf+7L4a;zUA?{3nE9U%>pit(Yu=S{j*FGE)iy7jS$Z#V>*D6 z;@&pAhaF={6Z@q0n3q6Asp9mrKxvqM^UQa#I@U%|K3546%1q$RcC!N&9RNw`M55s; z(MM6Qu>*#dQ47t+?cPh{l}DgL7kt+6{ui>2=Xt*KWBWQ^0fjSbpJpOt&s2fFCM&(AA+ke+L$Va?xMG&Q?XtjHsB zdn0L$I8RII{065_oQ9WQPT2@T{^#h;O5?bfnS8h($cTI! zRyLn?$$Sa%(NN(MU-{#i5m=oVWW#`EO-%Z9RRb?zN7!t*=LOh(ilaoi8Mt?$ZPmnu#`%EhjF%QICJh3X;Ys7|vOi;^^~E z57G(e)lORz8V(NrK7Ndjor=00w?rC?lcIE5dm#Z%TQkI!n(?ie1=bS6ijYnlLjQiq zkZJiv%&KeHj(rOT+>_mRnID`ZVfYmcZEG6&vw8L-Vp`e*>9eX#rH?18;>m<6esgpV?{he~Vl zdG>IQ{5s8dKaJ9k#h#O%kMQq-v=Og}4dx zJGH3##z&uhk$n1roul*nLPDe9L3?E;f4)h24N+49Jv%T%kZfv&!0!%1$A(X3SLDU! z>|*XE_R&;bSvQFNlE7L{5@Cn}^#$a+cFHTVP$fkEhW< z4W>ecO~nOxYLUy*>~0DG9OK+Pl*c~W%c;SpD9P!5>BA%44HIxhYN(&SKsLdG*XM@L znfiwBhylk-JDeD$%tb#Uicr_{P|x(MFsJM>$m39CPFYd1k@Or-ISsIsKIyfhyt>jP zebCVq+t-l6so(US(T_=jDG1V;o*JbM?AkfsPX@roHWWo>c3u$L=roAE=-JDkFru6; z--jgn+`>Fg29VDRbXL;}%*J*ir7oYwjDNF|611r92%Ep6XcP?_f@M%iOI`QWmxwOz z4WDI^FK1A+D}?C3pW3Uemaz>+;-%wPO&(~1rzOGZ%M0=2bRyaQ?_lnMHRNg>vA5}C zI_4hvUA^vw>{CScaku&v$l+}Fs}p!vpRYt4KqBHnklsY4}G3_T=) z@_nc-hs-n5b!=de3xPbIHH6K5MY<;brVFG8U}XNRVkl$GOL`AY3Qc{)$@ToRN889F zO?_2l)Y5?)&$DBTcGsl4C`GqscIK&K)Vyo{yzCd!<> z!RCqra{oWVSDC`3I7z{qZQn1`8)PIP$Mt6po0vnWx{WyGnMzqky~BgN8NYFq+UuU$ zVuv5Liw#~$W7`ub;;9`GV`l`y1RKe#O7rVHnZ_L0su?4D&t&6kX{HPV@!}?p13{`f&=7jZJG@G*O#>;PJYUO|kuam5GB1Hk#*fK&%ID#`3&$ifMCPpW zX>!qyqlvh$>$RqIC0$wJvM)#5@7W+#wbMUevyWUp=TlHAVthhjz&UpKHZ^qxM!>XT zHzyC$$GzsBALa+xcN5#k#ySgq+WAWh3Cre+G?Hsn+fUj{5|?BihF-c%=`?bm%h?1h zkp!EN{VH`n68;rc{VVn^tOvc?$zY(jO3M8I`)^rr$kgt=Bs|1FW4!2pjQ#E&WF=fdB1A{@;uL3km<`|IdWDhc>t(o~G|_hc~ccpcdtG-Gy1vVk%a_jO*) zsclUWXum0CWqA<;Mk>@=5V)qYJ;RA#T0^3dG#e+3oMyJ{TFiABf-l{92O1G5cUb>Y zsBu}y6qeVtlyotRKfN7%hE%;-&(F>$g8S}bZk8*2W9B^d_=+$E-VOwn$T2C-s-k!Y zyOQ8>B7NF)4ne<}CW6}jG~rOZT%?Rx45saWo@tmr2dP9p_CkXlxk)nnvoNob+WlsI zvWTdYWc^Xfd`$Keye3t45Je>y?lurP%@d|vZ)8^0>&YC%5@?T&s15jt&siTqjXE|X zV1@KyCy%#}6Dq_0{lAzH)jdtvj9C_9^V4d1JDDCtM zHM$Gnl>_Iv1zdS=zXofgOI+-d_a-G*e`^vdCX2w5B_ICi5#-F85Ig#gG}=siR5Ibp zD?CCNi^JBQ>tio#rBSj>RuRGcpV2-f1EVD!l&l8u;Lt}FO6%=Dwc=|GWJl@s=^ftl z96e54uhKqmMoNu5x3Oh@sRtM9y$}~c)s$J@wCjDsdQ@J7M%$SWmQ(4$=!~muRy_S> zgKVu#3F?25O<)%nm^~8-hgAZjKl>>?LLd`%_VA(KP`9}< z|N3X>)APLKQ-W7>Q1co{_x+H$dm7>70&2||-~hhV{NG{U5YgY{d_4eTIyx>ZCZO(Y zBz`fajbyUgFJK!p2W7aM97)TU=TS;Yip=K;LIU@|J2lazW*)pOR7SVGaJs|y zPH3)XKV!>xWd)nBecgHMLaxeHUMU5CKCzDC9fF%W4y*0FamVA=j;nV&?c#Atef`3iQspUI3mIH%BoZ+tB=OGwQ?QLAUG(q?Hhi_;*C~$)Agu*JwvEONFX`Zrn9Hf6?0LTAf=hP{llw z^w%Zw=U;YHgHDqh2bvQX7ZpWsrdQw(%pc9@XID~(O68qq728eEL|0$Q*_R4|Ns9Mf zP8t7#Xm&teG5p=9eUOdY#hDf-GACuCtd{J~U7^N~R}#TL4on|0Br~W{?^Zwum3%3T zzEG|r5HhtG16x0!1bX}g_$IU3>nD0&4P^fOn@IW6uHGv^VihV~;3i!y;>A|B-t?4D zmM7K1G+t9TgDsJ2i{8!M!=^!)1rACp8^>L-5mDAyoWNBJ^eYb-FHcpf7`Fy8Dq%Kl zNY@FbzIIF>OR8ebnYt^uP@kfKwp$$_s>I><0E18Td*s-Yp6TKX^|ESYlqLlOYbf26 zsZk7FD{;!Yp1m2aoeI7CiQ^ZIl2b>wjqd7|0gkD1LuoauH^wIZ;-eJzpFN}Zd#}@g z3XFMYJ~tSQIPd$4m6-Pv15qV{`Uc;`g8?C+%n6X$m2^(gF5%!(!(32Zy*!Z`GI$xP zMvZTY67412H9e`{EqNdy@`GJ2Hp~ndsr!Bcmi>>e1r;#Yz!*mc+fsw}Ub`vr5Kr+r z7&D5x*#XoWOR9EJ2hcsCtvfs(DK_1WF9A6=R)hv_Mi zr$%b9!VXs+-Nr5l}H|dqZ&U@ySTE^2ZK57AC<<9s**Tfx#aX4 z*f2R>CydAUm)XBF=X~}L7AC;^HHKI}`3GZ6fE#{*n)`*+7VLve&^hDAxH~$%5~F76 zP7N+f7rQa6R>n+|S{psy(LaaT%O9tE6RjL)M>RRp&H*`Mq9Z}G@P4orpNQ`ObV8Vz zI8!9ZH8>7u_6)EimB)I~!ulbu#f2j0hVn;P#tv?15+fP}Th?#v?t)Ats%q6z!Wu+j z8;NM+9eWQ_jQF(0rRyo4F1r z*yYwt>f?l9lxR!SbLve-W`54WwV|(coVG`aCQGD4H%x^ET*sE(3 zlA%U2!sHDR-I?Wja*EMZ=$YdA!PMz!c36{FB;XI+5$bi&bS?JtaDbY zz+}?X&vZ}NFiY*TX1a31fRO@vj>N7#$ta3sjdbwk>R7sRz(BqNI>@(9J?kWc^7fDd zz;&E^PkGe|IHDd5+La}UGbL(ocQ0$7*J^8X`b!)`^d$;td z6BD|UKBure3ll$f@5UT8n`Xj!ZIt0!Kb;A=y|1duro*)3FG(I{j|_5oM4D}g@rk=k zPK(r{dad!1Ph-)D!em0CNMu+w8u>mLaTT$_y)UhU zV!y(fI=0Nqtq@n!=W0QE`pya9=usIKv>Tf1Q{L=*2Y|z{lPY zLF>cpF67*9J&qlLDM+my8T**NaqF(&s~Z-sQAA+CHrtZ_+{y?Ir5Nuwa-lI!&pd=q z4v)>QmfB>OENwFEz=E|KtxD$m>XT5zPT=b{)^V72A)%&mDnLqhO^(ov-$3MNvWH~U>U?LplvK6N~*!T)=qBsBpPH_3BFspAf zm=3hHOX7^$R(=BTe;353bGM*a3#+d6iqA%}ImgO2*({Fn?&t`gSLBtmH0Wy+BUKUn{SGzu=^;-h^sT&Me@mAq@h52Tt7)UmxntI=SRmnziFmwWkgz<{*G;8 zyu1Y;viP?zLeEKs)10qAi{)`S+IGso9=rbWfxw@nfqf5 z^lQ%=3R-+0w|M5Bu^(XTVu<5KpPah~l(ll>Q0*oI(Z53xxIy7lIB z>>(YzsvDmXw{9NIR)d+59in0L2zvyA);$YpYY_0JwG(iBERy`m2>8)XsM+j}9_Bj% z&uR8Wj1UtgpRaX|_O6s~+-uN7t^}`mD^t>&c(k;BtRNP+dMU(cKQP$2#fce~nV8XH zS#VKQB+WF5pQbQ;_^VBto;lvHT#PwrbPHrYiH0v-Ja&3z=XyV^G_+eq>vD7r{hW%D z8;h08DW1}?Dlm8|KU&F=ah)rZAQh*#Ss6)%PT&)K-mW1lq#hly^TnFgZkV>QQcJ4I z_PAwkd{J-ovh}d{!uP(aQ(E z_;uYywpH(&=6YielYdq$#a_6ZlX*uj)gR>imU)S(_+-g78rLfHWL;z@Q%)$q1}mNA z6Sa88MKWOYe}NetAt{e%iyIxJ*%j@8$7U8qjxHl!8=ylNoq2V$wrMU|09;85nke_n z{VeVSJ}Dn=C=s#XwL9zX((kl*&NSu{h^ld_}Jb%89v)trJ!bs zSqCOPm`-vEuKSZD`(n;Ljrvzad0PwJli=y*=tht5ea>yC5li^86(*tXDJ)oIJO=Ks zIYr77u@!b9DXUh+_~$C5)3c2Nn-!zjpOhhJCp^p5x6QNgfX50jqj>?Nj@(RWCjCTb576UADJ%j3oZvhb&zYw53fAjDc!MPA79I+ zU@_lV@eX+*1*N)ytde9F!=CeB%q??nrL8W>+79O7RG~;`csM(bBYj>!S{3MV>lCGw z_$cWK3WukW6yif~(RS)Q7DU=v9A6_IbZExaDwX*x_*4YDz12YO^ddh+KaQWkG7@O_ zSd6Zpdk31(-KGxWNsxdQ!(RbsKC-of&$=ppG;2k|6Xez&|$X>U-#uL6N zqvV7bo*1jMU-$nJg|kRB3rEiFN?qJHeeapZDXdY**j=ss&akYsIf_w48O_BuOKu%^ zAobMptqTNZbEXMXGcBLU^;(`Jh2o-FYCst-YTsn0tj26AM971Vcp!cuA%|axSJiX6 zW0xzs(=Nc5)9zJZQtmI%KGZ}j^QC$`K5_S11CPSgegM>)E8IOzqU{$s{P*X;+mpjH z{L9GxjV`NC8M1o|LBr>niji_Jz2*XCvXfq^f`+~JW;&W~f{$vb?lM%4RKq&)!rEfh zq!;TvaLjr{BeY%_DCY~cb>nw2d;)FQ_rgQL_}^~&N0s1c3|M7lP+ zLDA9XDW`0j8r?fcJH*6TLGN_$9$7m^zJKRWxt$ zFxme+Jj++Wk-eftI?3R-HSVD zK=oL`5v}-s(pM&1h8VjYtXgL`s9S(vqF_}(m(}W5P~1atFU_?OocXniy<_+Rc8O(G zJ=i^E=cl5i_Np^!ZwA`(f>|=h-I1t`q#iT8gWWxh`B?F+`EN_C!|P67c|5df#Po$* ziv@3+z*MgC(jR?Z%~dK<1ZE-s=*6kCK#_UOj!oHWfXL_JM`+4zg}`wGc4OPD?Uv47Pik7--QmO37|= zFzMW@P;TPIO@EaGtz!G|QN)O_PK)y^*e4$KMY;v9S{}o!OL8$!Cp9+;=@4f6@)|#w zc}3;$aZ+|1-m9YfSF!*n9|7wr-cIsqTe!TpEYWQ(Gn&k_Hrz*ppagTDSvhv##DVWu z`0t#L3$s!4*1xoG{F2Y#yBE#D(Q00&IlVJ7E+UG7gO!+~VsoPll=j8;$k6y*x95`X zd;pjYK2f^u-9i=#dsbMaQP*G+&6!e!aT*t0qq}woVBR5v4ilncLiBth@xTNXqViE? z@M&gUs#e9zsirsgO5?t6J4tAy=%F)TtglJ1yI4+q&8$b_Q-+AaoRa~Kususa4Ch_8)$wgG0}$u%`g?zELC?xpBp3IL4jY zJ{WCXDu?mAjCX#!kx%s(7>oW4ko%|HT_0#8THE5FvhzF52U&?nC z6QNQn$?bTAF={plt2&r)l7Kb+YJTC@hH4tUq@!j#z}EKO$UoBAn^tg+kC6!lx5pR1 zgds7G>Udv{q=Q#-G}>d{w|#kpt;~FqtS+t;52GU+cm3jq3i_P1eMs$f7T}w4(N&(U zSFHvi9>PqS!8fkBU112DG0(YMyU+(1#m zPk%Q`8N=+-hv)A76BzG+>qv|n?u)sPHn(^mWW-s2p<`}hH)EvFa$U0F4M;NrYpmz5 zFdn8t10%z+5;|=8KX&7Dd1TnT8Uo0bt{U7NLRj9vcRNJoM885-v5uB9Pbr9M-{(8c z9C8a$nmFWa;(45~*O)`x&Oi@jk*w=nL!;SVGVnsOBVP~}Lk7%oco7KiBH0%CpHkm? zvjWjbRzJqhEQ!VLS>a%vgB6qd1O?TP48H@bjDb;rnru!B{Q(A6t7?sB3S=;1Eu^>E zAf<-PEHCOdHzw+P`MP92Hr`vaS}r+unv6D}0STp<^4EDZt+yQ8NOKYX zgZ?!M4?T-+Xp7f)StPAP*{qFRRPlh3-UYKfHRK@i4N<#j}B==x@O&FGKd{ybKu~|sM6@kr-JrZITL!; z8q@tWTMAg+1~jdmn1XQm5khV=Cm=_K-!fQAbAW{g%U=Ga8F%x0b1M?SpXdYpxIcSJ zEA5fcFybmp4S#`aA%wN6>w>*9^F<-pMJDo8(4Z4jjse2u0ibq|e&&K~Lsh*@>l`Cg zA@7t9Xgg!p!C4>KProG!vjC;HnS-&k}bTB^&H>?i6cRyFR~q` z=!s}5WggmpHp{071x{d<|9YPm3qphu{Ndc?zL$GZ(R1)B4JKc}LDNz`SmMmqNH;Yn zkE)wQ_-jyRo9!qY*U6HY>pjKEC2#FQ&OdjU!nuQ>J6>dy$n|yc0GDRuCb=yLeWm7iwpC(|n7epJk(JVBYdrX`8reXlRxzP#9n1UGTXl z-}UIKqh*?q5g`a#^y8o;R2&t zBI`a}k56)m!5_9#pU>y_K6^0Ua`4u^{5H*$!*V@U;CaoXxP3+qDI- zSqH?Bp;B0@cE2m6_)BM5L7tB!fDAxxN=1#u6`f4iJGM&5FR`P`3mvIY%z{3}VKTW# zr}o`mU2E4v;qKHhInwVap5#lfz`BTCO^vmx*3*CG_2+LXnU#o z@~U$X7fAt&f3m@EdZ)Bduq{;Yp)>m_P;mdDJ$(#hNY@f-_XoqU&RCSV!D;pVmUbZM zVv;ZpC!ys}{1|uFR@wp;Ef*P(d>`&e3<@0odF#LJP&IdE=W#{Mu#KFZMkS<099 znX5vTQ)YEsO9A^o&Ys3wrX$JWJ@cqv@+y2`Q>2U3jpa8-i{--`kyN#t+SNyrT0oJH z2&&T{Sl!htIzw z2?yOWO=h2y6?U-hB;GXh4h=Qp@wV0}>34|~WG#VXhew2BY4etaG18yU+w(;#&+gi6 zc@QHnlq>oqBfr|T4Y(UnB1eH|vcOTs-N|*7u+I}&J`0pHDQG#rn-%1n3UHZJj+$^r z=$)(1MGs_sTeWR72N)ij(=9?hvwsrodFR#v4enyjbd){?wNAuh zHEY9GGx+wGE@` znhPJJez?SD`4P6=Z)9>pA*UZ!)c-TQVr}u3mh?*(cY**PuFU}qFx>J<#Wu(i8sYkOMWTFK4tM6qoP4ek+Q!>g8yPAZwGLh8?p%c^A|vbPtK!j=Y#K{Mm6F3XJU{i!y>{1f3lYw){ExbC3B0AmJb(;v*lo6-g7Y1<{uti{F|4z@!em; z?Wo63bgCDp+a6`(sh2iRkI^`E+{{+5l!9~3ifCCh9o^FnRZ}!SztEFZzpvAS%f6ed zkDEUWe8%(wm0d^ln0)FL1R1=E_B{ndGb`*obTVxT}CyEZc3{^zKqvlZL|aFDZ&A8G)+DV<1q` z-HP28$t?ei($LpY_eg5>Ij8SN|?nwCde->V$I)&YbwuX0`v%$#rn>=W?3;_-zMHYUN3s&2N!n&_(EiW(>Lv%=q|8 zA!w8q7LL$va%2|^dw|C6_`Ke@v)Oq_*6vmWbTdomXGu!`?|N>n=%Cm_p6pfDD(w@G0 z-k6QLpSQHVJzF#fgnf2*OE+Y7Rb9PL&&bG#-w={YnQveOXSPvlfs%7{>kB)pdRbD- z){l^@k!5E3-4ZrOJ7u0;iQ12a@bmnW--?DReB}Pai7o$QID>}&8w_L$Qom52o+$|$ zO0@Kz;n^~ORJ`@Iv}A}Y9M6(^yln8$YC3(^aTriM)@qJ=Zo|71SKP6N_N=0vSmx$U zE}9=e)oJgai?XYB8$eT=p6%k(Y_81ppx#Gg)f+ylS&-(NlGXmbrcJZ@=;$NP53wyL-~D}-!vqqN`eT{wY2{-7(m78~xML7BxVk=gVKUQjc$ z%dqm_)7M?jFLfX>(PGs2SCZ1`anb0D{^z@g#h3ftH30hN(NO@-J5x~?-#cGTqncje zR&jk|lC0UIYHu?8X2N?wIsAti$8?Wu3&GyFoyjz~B{2blkW5C0}0Y)IvO z8{D-P{O!LTLP1C!_2KUZ-hs<3RMeR9kH@2y4C-}zKu_>Nmt=(tn59F97GV~%0Bqa8bBPfCmm0~x z|H2}%#n1A@g9q(jO;US}$R7MQnPJng%!?}1w^D=o10vvmDY$<%R8p*qN_){Bd;96TRo*b-0XdJQ%Kh4qA{)Pkd0Y zQJvsP!7VX+e<5x>>0wlfIUkm!`&c@pey}O<*#NB4OK1Cru<3O~Hd5}w^dBDbT3KNP z#rjV-5Z!u-id_o-}(5(^o=kft~?M6K$%G|~o!fLx!bq9C_ z9j>QKoRh|P3eS6+8QIrmH&ZjYdL4m5WRQ*sG`109c=@adtQvB&Mr$cEK7qs5n=sj} zz6I{V8`AryDRcWfAKcF1^CE2nBQgUZHrl+S`G{#MuUlBN3jaYeE*-YGG!Jreh zu*xpzDBSV(5P)r-9pAuDTwto_beFk zK=wx6kiIoORfke=?#1_sKFlFaTD(+(36GfOoQ68`F7Zqk3+qOX;j_j?;$j>&?q`y- z8Ml|5cvRd?Pv|Nd+TTkJL8{f=frw%|dy5=zVt76gbV)@j{2X`7K3sHA4J%l4THpMI z{)^!=2Qz%!T<*WYaC46rA;Z5AJ!cOsirehbn`JfIj@&P}_0B*}2hn!0Q(qCvIcE=; zh;Q#El*Hwkq^)xD`up%H4H$i*Y;{eiG9xc_J1 zBtLmW+lSPmZw8Mdy>C*;RMgTpt(2GxAZhT8?+H9htvGl7Pq=`88C+nS>#y1M@E2cw zAqo2QcQy)aMKhC=vRY#=sckTKeeC-FWV6G(EiE)=sC?u0KWx2mVUOF^cj(OQg+q=G%iZsu~?n zu;!2nOwLNcSl}!J@5ihLmM61LYp2r+Ya=-E+3AKh^Xd5;C=Ly&9%FLma!R+bfj(A2 zb40%}sam5Wp6z2~qS4*P^OzE0ZLG;k85mwS=XBot(rB(Ag8C|&^U;!JyQv94o|7K+ zYG1Mk8%S5i)%RNI`8Op~(;OcarkR_2slC!@ntF(uXxR1L7Aoj$x?$i#oJ%C zxs6kTTP_K{-$^tlE(|fL?1_219ARd%D}uszYzkVH4Ly*NYqIEK1S)aFsVh`*MFQQNIj6IX0w7m9Z@o|0Wz3 zTY4)|pmx&Ly{MyB@JnF07wzEq4MQ}TeaI2iWqPhMCQ|V&2;qaEhtzy-IBCt|3U!wo zBAW10weir@Xf1-BZUvOLM~{RdJyoQ5v$@t5yT+7Dnc+{2#J$(yze^2-#P!4uQEm1i z{GIcM$`EP@+Vo}UUjgEYv&qkLtAq_cw5A8)GVETZ#bF+5zS=oo7;*BKf-Jrz#KBL^ zDH18ub$e)z`PZ`7=|n*#3e6^WV!0 zVHtui^&P0Ae$VQ8G<3s-p~YQJ?xxrAL;S^QKws~SnCX_Nh#FiI3}wDFDqJacwrTAl zY!^z3sOVx#5S!L>OXE02(GC&k9oFN%V~C`5XXL7HN-|P4{K5WTM{l;|*0Bm?z2zTo z)Oni*a%jSLDhWU_p!i>6f!?;UWQqfy|B=$HeAGwStxWFmI(4uiEIBNLQhSc5;~SKC+8U4!f8U^Lj%8qD&Uykg)7dij_pJ+*%>XxOjgvA?^C{Igb3xsPt@oEN_0%Z8kfjzVz%dZ^(K`7 zWd~eumNm$4*WrSL{%P;DQ3gg0GI&>D@y^C%0lvY%xa?p+U6Np50r!5`I$N+9H?DF4Tj*J4q~*?( zY$thc?A$=GTM3|Qk|91$FN<7PANS|-#z{S}kNGpP5N-9GCO%K+_$H({Tk)RljI3+LX@(nR*yO0rwj3t4D z4JCFl$d@S7!y3#;8OlQ;siYhRP3&qKj_3O-&M4t3$&=1;8)%kLlUSW~U5wYvl zh#~*xA`C+1C(J2$NT4(<Nf2%rDDXy*KJ<}qJw@7HWWT50(%0zeEL=hOX zA|4@(H?H!#s?^6I&`2?SS2Rj! zg)ycSrUlBZj1ilMckS4XMA^}Pnb>8J0e5YV0lftyH_Me4@(mgN!P)yV&!j=JO72M~ zxfL0E{~Dy^_sG^-vl~QTrTa;WH8{-rjn#&vbwBOhfL=|?Y!|)?$H$UEA5rK5*kt3p z?$=YZqiXKQjP@OJk2s&obmsV}Zt{?=A%*9IE$R%b(IZsAvg3@ zivcn&d+D^wl1(}sk-$*%mnLtg+uNXh*_?h0-<2(9ZA@Md44sYv zQRrACtDnOqePZ`B?Ogz;N&WKS!x_(`)wTO+hw$vzPOm{$)UURax*ANAe-jvBXi5Nb zrWAW1n;lj!>ln@6CPmYfoc0&ZdiBMbc4zP~yvKa#I{GUG7OfIQ9+p=GKTW^hgCaE> zrB3@LR=dS$;&pB(UKXv;dfY>i4>h`S&fBf1tE}}i-0tsyaPW6Fc~;fcS*g`s=UjiT zmku|2Q#>_1Ow_%_wAd=yGzcy&+x@2~DZT05&o^cbbbu4fW9-{jfG%(6GN6io=3iIr z{j2Ka$C^T(u1x{GcQH4HR`yya`9~DFEM6Y3Nz1Sdu+t2|wd|U;I-Pi|+-WfiK$>0^ zr;uRs$a}{HjFAT@**yJVH8#Un@u6-Oyl9y6(Mz#>gRnWj$SdOJlXDXIJtp**E_4E} zPJk`}_#NpJd1k-pV0~}?H&nF756$g zEaYUg4+X@~0;upQA6K9q_kUcCQa?^eaNRgPEfv6(x;aJNFG>$-2!wP%;aj2=MP%!gBSw+5iGOs%_;>$VaKZJrI< zb=oaPV5#j4&GC5naYpyiZ*v=N^^9O>o;Qv~eV>BHdJ$*++pbAU>M+)J=kp~$uyaV1)!hq5jjt*E`OdH;&Ryukd)=kj`GJq+^H>drkqq+P2qkv z#8qq-Eb8^EMDwIfw=Xn$fo-WDu-%bb>{Uz(wy;&*$xEU!7`~0^ExvXr%{ncszwPX! zP%!A^@qv*UQYAS>-i_88{C9Lm7OBV^8`c#}`Ra@Pl_Enc}$4)puEnBn}Zf*gP^*2@@ zuV>1otJOeBuR3ZjqEZI0El;QSu}ljYi9XU3^Om`vL$Rf3!VzB%i{SN&xz$o2957x^ zr;0>BiR@ummqU6Vujye>1rEUI_%nEe8Zz7Hz(RCaAChYiWuFnQjQL+bvJ1$gJ;G2` zXgX)H(443uNHi-C=Y>+?lVKt^B%obVI3d)Ys?e4UyGJA-((?~Y3y0UJGD9JR8_={PU#{uK)u(MtSWb@WamnRQS__k?iksmIK5H3Y49o} zqkBjfF*>l*$?I($=`b7vcpwCGD`_@43bMN71{N0p*k?c&-C`Frp-1$5u4Y2KlYgPy zY$&jdQ+32tX=rlH{Fed)kEc5tn-lNopFi*R0G&J6i}#p#KIvrmtExU`OZUo&dG%-0 z4=@_4;Z3#qFFW5B(}ba+C^kr@!()v0baW`deq0lcv&@`Bp&t1kRc+j7g( z%PvcUT{e8qqT*O@)oiJ8IVtY1@$+&;HyVrAn>K|q`CBqu;KC-IlYAZh9W}?Z6(6A$Z@SYY`grd1+ZxlC z^R49atd%9*8P-F*^$8$$lTZGTIncIgV2f8Or>Xt+ z;)MB)a)GpBv8QU5J(s);FhlT8fzQ+?_SEn~@wBJw+*l~6u3auGFm49Vb)h26D#8EQ zzB(t(#{ahBw=!0qPq04yZ5jlaef!si;ZHg$xgs_SMP^GNd}1UER(ZD+s;=&OsnITBj< zT44&Q7kNT&aVD)1?|s&|&fNcb?YRb z@{(`VZg>|=ca&qY5d>F$6w0Ni2g|u44|fqpK{QUQ;6Hw>cw(1w#4rP2E*|{8*8dTV zAi+M3M5SyWwi4Aq#Wm(m;2l;|+Y{=uC0V16ZXj~!oxQt@AI!wA+l?MRH;;vhX+Yu9 zg&w|&Vf#{p+o%!U02^T>9QFE14AU^$3!w%9xe}o+1ZF3_KWZXt&hF03*;($v3+d}+ zV{~zQ`*WFxkIIG)zMM+kqGQ02I{(9ZbvtsnlsH2#YM@nd%a#j{MSZVfQ-0Y>$bAgr z@=9)188R7UgYI5zb6_c-OU?tKYd%!z>42ANXP^tt-e4ORZAemgc)00Yz}Fg$`%bs& zYA$O^YjfM5$<{fy0fl*a^AueV|L_aw3!Jo+v-D2#U#uLl-5~6Iwnf$KH}>i8QJGc0 z@OVS_E<-IV zq=~BE(q6PV2iOF4V+8UJ!djfVuj~I4!D1d@v;*E{UQrglSFYRFbCyOfe9I&eAqGNTMZuSw_LAZ$5wpn zVy&$6*q*SHY_>{}Xox(|G-2Ph@;U=qn}y-x@1Woo?HwPpAI~n*Wpo-TU#Q@c*DZ`s zL!hlp*tiF6Zj$OKEF3XQDb`LDVIKfc%a+)_(-RLJwLnBznC8B zv*gvzMUC)IIV2SqMFQz2`+oh|`h8cjHa+>>Xat2F)kbX}7=eKc6wyfIU_Jr6-d=js zwfs~txL*eAoXr?FeIy35d<&Aa)ac6ZWL^6v@5sI+CQi$3BFymleCKdHwW}@3!A1_# z^7wSC$Ih&!W}&OIX3$LBqw&4+x#+N(e?%n(@+Uixa6y}?$Zmb4#821{#{8Rp1qk1i z+wM{=+PO8g!DEMh;9xRn{LxUBN_oa(zP6dQg@Y@m=~n;2;SBHY%5jQ<%XwnCJ?12w zmSX7YCe@y263U&vg&^0NB^0rl7JsrnSpO((2&&cDalUD*qLRyN-*mC8uX8WNnXz0n zi!i)3zq=bsRK;WC{737qhh9pV?t*TR!4Is$b6;;Gq?n7Z(i5`2){evq=}nm8!ARay{NE{Cnh@8O zM}|)XbK4K-x9q4~gAaz$Y|tm3PmIw(As>&dV`)`xPnaFjF~F=`yGTcRJdK_-@>i;9 zOaFzz*#UbcxAUIS)?4L7s^{c$x41WI*2lN)cCEZ0d)J0f+4+9i^-_~_`K&tgx7O^>IP+axz^0+-D*%CL=~PCk9a!lpd4 zg%>-uUXCFz*WsvVoh_bb_dp!9^r0kY!va3)8-FIHp=}PddmccPA*@gCIiAqdmw-

    tXbJf1F3r8i_@M1anVQ2ciYB+P^L6<44tLgJnL-!Ej0b^LZNyQxEkFxl(Lo8`A(yit(W9|pM zs~yw%qP}~2qgttEop>UN zQ4w=zL*(rU-i6Xbw>y zYYv(S#Yb5QKEnF_`m^YFs>e^=r{Qr9fn_aW_D6+KZkSS^NU zm0b@kD9Hg2hiyj7wV~L`3+#0R5)YQr1n6py}nUV@v27N?2as#Y8ZYmBP$h_5N ze~@&ael1b=+Lu_zyoU$cWQ8KLz2NEZp=>_+r7wVd;ZBy0YeAbG3dQw3J=P~s^M9Ln+2u4R?(UQQXT!@n-^ zu|xx`H}xMWO8b#Ku?&E!822c+| z#3QXn=yNCD7-nGWaEh;iYIk*_1g7+~=s*MW)dGI0q%d&B?ZAubi(|r~^4R9rH7~X& z;#>q{5?@!gbxxmc*vjgCDoZYEQC+S^{gQZNw`3oBU5j1)XUFBR>O97%Xvz;!hW%fE zW(cujM`AtJPO`#bnW647@5cHlrkwV>d$_7~DRrlGu%4baA12Hg@;W)4&TsU+oN#i? z`#$n&ExSj}B-CQKjRU{vcD}A_G;s&|Fh{rtaCXJ|WZ*V@;}{`wYa%@klUhe}iT{_CPWX^sC@Iw+RcqdW zPstBmlGC+nN=rWw<1`%7h729deIg=9Yn808pkw=JyX9L}jUqLhf8A_LFC=eUu;jKm znjN|>4asj-T~llQ8|2vYAp=uO@FBFa|_-{4=ns7w?;BkFfHVUG|BE z%js(?!$>hp8`(*G8RmJ$Gg%yeow4*?%kLn3bA7D}q+48(dDg)1;F=79aOwYty?1Q0 ztXa2&E3?wJQI)oB+qP{Rm9}kF+O}=mw(ZWU=j`44J?H%e-Th&Gm}^~gM%<1SbBsGU z*4hDUfe@2-wz)H!>D|I-BZJ+OyGy6ohc}tkR3fAhho?iZ6@_U|efmH~1)6V15xt+{q7!IhP0Dcs|E z4w7@NP}7FIqmiwYCOdd)ewBip+CsOmt|TkCgS61uNTdqm&bNPoFud6iIVf9-zK5r9 z$90hzlB1@MEX%M5VHlFky_l1{f~xea*$hV6x3)}XOwP`z{;Yq-bY-~SRpnLSS}NSp zonsMkT3K8Rk8bTdcFoPeLqwR%qIo}k)_Wx);v|_qI_tnBXCy*Do_GZ32_&5;IM}#q zf`>rTGM6u6t5|QQ{1}ox`X)PK2i_MlNUE{OD&bJKoh@J++1QZTG_wkX6DB|?ZV9ZL z|2fTI7Rg|dm2_kKFuKzU_Yg5^_FK@a#gxK)*zI6P@cCM>fCab_%Q~?P4ug@1>gE!> z92g!CP&|-_mPB*KPRVLS6xRzFJ$#GScutHM#XX$E3f+_|UnlSC-?$Y>KABFTj5y?K(HC2TuJd}| zP@*k>!O{>XFQ}99&+SI}r-lorX=ir^gsYwxPHEppqGTo)AY);aCT(ingh-la0-iLA zPe%1bN!!Dfp?8sM78WrjmztXa$(Mc8tQOf>HaEVt`fpUqgQmsSre(zslFhee z*9_jUEE^j_6qY1z+Z;{LF!neei^!cC8G7@|i|V4pb0#Q=YSl2oZgR!=66}d7YSY%l z8@SlC6u^z7gn%?;Tqc-fq_Si@#d?AbI*;E963{QI(^A%ry3O`yI_7PK=Q)ckuMXDm z=x7@=X^msoXc2cTW;W}qz_YMZP*8@t=cY4Xw?~Y~esjuN0PE};z{jJ2uiF7vC!sM1 zk(!2g|DC`yR+n}TxT&2L+ks_g_q8(P0Sf*GKLiBOm`9p(S)-CA6Uo$^ac(<2rFw?3 z0BDu7jwHR#L%kHVQ#2+3kO1QetVAxx)?NmaU)MEPp?(CUUP&Ixbo(mDcH=vexnPg@ zu4>D^uS9QQW9@}n03@Gl04VH32W76u*adcU?`W#6yKXc5je5ThI^oR(ti*_Xrrx_B9Rwa+=?j61j| zgIXqJHG_-$<7fe0!sO&AAVm8uD1vD?scd?CR=ob8ZeMpXM0tANLMdjV&4I`P2CCai zHx9Ii^SE($w%e1+v)8z4rHguHkce4jb@_oyip9-+dUZD7L5TiTSrN+u*UWVG#}7hJ zZ;%Ncj`${iwiGmRZrhN-h!29mBoHKqxaRZH-)&lm#uU<9SmUE?ez)Pz; zLelQ|%+`vTV0roIQj6kC2|FUrYoSm4~}X;UOjp!$%rk7zMWHS3m=U3=ClRM&XdvCmiJ^KZ@> z?Cm73GIqe4fot)2p)($%vbwhC1X$Z4FeKeoyXPCC+TGmDjq7+)V7)?Or*88BAa!z8 zf>xALX|xWE39H`oGPI6UQ}ops3X)7QT*l9!ID32me;Z6rA)~)Eyk2v-Emu+3K$4OS zMx?I13?Z}FZXosP268XcK6hJ@{P?5QZaFTN^NWqz3d%QdQAO)x@VCV5N>TYNLis>uTiF@qm7hjBxJ!#4JHQB zwy@7;5!fRD{3;j!82Im$zb<^f0i3jruf#@2sdJ5n-!}t?O|`%#C~J2!Uwk4gY_ko3&!~C8q3*bXVhN!~Kr| z0q|&G!NyK!9 zca_0qgM60h6o~v|w|{;AUm6*s0-!t2(%eA8{A1Mr_9L8+>Q5f%57lmonE$UD|7hUr zamkv1b6fxK=D)i5M|=OrDvY%j6T4sNkI_}yfC>hLZRa^7*48{I$Vqu+wPGuEvOx3r zFZEpZJm0RP!VeK1J|hH4NHxPID=3Au(u3P^V2yU5Fu@YTe0^Q=i3wB~ZB|@Je;490 zucnYHiP z#$Gm9?k8$_{`0+huS^~Foe+YlIUX$D7N8A__Q%suxl zsWE^EYuOig(raTj6tUW8RssuKQEDXVn!sNue{G;O;Z|142_5yKsG(hC`!leSxtjGG z?QhYf*%5JsFo%(GCZqJ!|IBN@$b6bk(@LD+BdwYSGF^ z)3&v_8F6#PojSCi^`47*0Msks61~(m_EOWNRIpu_T4qRDcaSy?-|g7!Cxsbu`TGD4YNUnc&-J*tpq-lxmTk128p%_cNyZmx z9Cw(_6;Gsoxg(LJZS$wo_0}D&Gio`W8?NI6WHHf#y}&(vn3RB79+-c-$}h0KA3Q|w zwBM!;{|=4^WW<#i#Kh>><5&!wDBMZZ3AdO6Tbbc1gfn9?xOo-f`C&Gp=21F6@JciL zLH~4b67KqV5rwExu8ku|W_-L)m`@;Y*GoJ0v(^UV&&Kb+YX;gMBYua|B>Iye3HWpl zcE1_~XH>&SR-4vgt$^E7c)j2YO7n2=dFDL{erMKz#bz7R7GRhyYrCP&k!33147mu) zyY6Em)}0v%oBbhg*Gw`b`XA3PBd%(~cm%zz=BwvI_RAq!l=x z2U0nVAeXNMC)nZ6*WM>6j%B4iaUTG<&kAPb;r1SBGiExt6vUxsWl9Y1?$=>1|D=!4`XpUzXn<-NndEP5VClFMh$8f0H1+I7SbE7Arh^=T zJ2gl3UXN;|g5LEry)KW5l3w?~9J!drbrf(D1(=z0zyC#1mS!FW(^B@()a>r&p2F2pp*i z(AJK~(g%yYSq$pF;wFX(Po!m&9JzLgx5+`Na za7As{P>o~}AVEY}bUk??`rNn;X6x)(5&C|)@uux+OuYB)SDvZXYEHLcj(8V(*;ezRTMt{bIra?Wz|9jaJ)Xfxs3tb4>)buXXbhNC3v? zOScx8Jehcta-UV}%)`c*G?PVH0mNED;O;i|Q{~y3-8~S~J+G71c&T>NBJ%$1G{7lH zoNz#)O>U8Sy9QONLj0%-Ew}UX4n_ATBfP%zb5$Y5{O${*1RyswV`x`HpjsW{8(4-u zwXX4X83DDJ8OlU{ch-AQ0o^$@wBF$d-T0}4&sV8A`%!fqnYJq?(tR??%Wwi4b?xlD z6MFb9v`&cWy#8r(aHID|v|5?lW{#)){Gk}Xa4 z5|}Hd7-)TmWP~K|^0EQVf>j%_5aF42 z(Hnsea~8^4PJ{Q=r>Xc9l7Lztu+U6t$EL{_DW>h0u=95&%Cv#0G4L`?u<>adW8nd; zP}!JZ9DS?!kj?^gq#3TOHWT3|O};!WzuKYnYANSV&4Exva3a9lcpf_ZQB5V+O7~j) ziR*}9=M3KH&D0}zRbrJ@cOyp!LUgTbq=>zJBko$4yU7h2tDMs1GR_@@QM|wij1kJG zJ3jj)`D6!a$ctgxoW+fz=yDGtK!ZRwB-5!B|Hw>$&h(TNQ{5RxJeC$VpweLym2-a5 zEeTm|?=jP8T6%)y=N44^v{W{KpK4KEHzT2BC+V*iGB7!L%VcN~5j|7BSliMuUvVDQ zt{(1zElJGa$Og>3OHH#{dOQrDQ!8q9o^O4UF=%KlcVyZK&ZK_V`S3vWOg~C7z4HcG z&}GzMEm?h5z1I@d0%VUg8eNn)cA+(~;_G>6nQ^x43~u#lzlo?z`Ar_Q_E2PBL{q!K zR%|oW$LYEDH$5|?)I&#_?qu33BY}g;KK|#+fI?=yf=d3Q)^FwX)Vd+D*oieNC@5&~ z@87@s<~7RqhD#7TMCLCKG2|jZ{XFr@E|}oBOG7`7?qop5bzVpybO`^Qa?i0RAW8(7 zLJ;l3Z!c$}R)+E2{p+PpkT z!3DUCK5{OjaG|<8W3`L1NsICJov8z%5S2}_!!)k_hGh&J-wv&8dtg8%|FFv-%pAi< zL&U?l_=J2Q76v`i$aR0AA=*M^cQiDfwLs$mX}?0W7f5{pU@SA}C~#$Eq%d#oH-DfL zgrBmCe!MqMxhABw37KPL%x3;TBusaY<2Qjy<|cn4zevX$M+mBUqpo0`eS@C^?kq}~ z1r^pMm+kPbpoM0j1L0Gq)1sRI$^HO}Ox1Pc6{q%kU!ADRunf%?K_rM|0z*e$tGu3J z6hUkhtwm-VR9V0f}48~$s?aVUkJDSqo%oHUUn_=l+djAUH zejCoxvi0dsvu;HuBoCb%hxF8PDKOr;eU6UP{skD(_tb`iBBgOd3i>=Yp)|@jajF|; zNvk?E%*)H`g5l^I>_IzT}yW=Rw8laph9*{bg^jmcb-np$)&Iifa-` zNO+^yCHfeexvXp4Tq&=KB-A2?TpZMIB){8ld-U>Uf2~T7(#kljSwKW5eXz2{=6vPy zI*2=D-vFG;ady1P(Gfh9;YMhNbL&PTT<`3Aqj%QL+FCw|Mm+*K%<}?yBQf754DJ*| zrGudI$GTiMVKJHxr+wQMcR(5;??p28O?tK4o6)5gadjZ?Ty51n2KyOiQB^Cta%z)u zc_{lc2g8dhp*t9s@4B47J`lxSLe0!8`Fr;Xzlo@N*_X!8J%0PWU#DKZYR9JeWkhBC zs?c?Z(xeQk43w?$Fd#Q=rP;^ zF?uJ}wuq*oCXTVL)Gb32)l0n3*wSvx!Ubh?4w_&FyN-H5 zMZ0N@flWxYPVMilV%#_>uib+{|DuCTL@HD-te{TYi|uLTdyoua%TWE`6xjqU$A~uW ze*M%%ZYpCLSV{yN*?rM4{M<*%WUm5Gd%%jUX$nV#25ro{%0ZDJ0UmI?=x)|mRB5!t zRZ|3MB7k2nTCD|t29*-OuCnCkko(qIdQm9FbV13z@v;nQ2V0l>dQKX!$)aVJGvs=sy`}IJqSw~j$(P}~ zi2Fg1?|gD&zf@<3c%rt?HXN&C-SyxYU~(*fke*&zo4Id2%+wD?bTx4W>Sg;**;;KC z25@f~3UnPq>-;$EwgpQ&v(z3{!D@=Kf2gML7FsobCPelHJNNd6BM!%77u%5oW|b~~JhxN(3#cu(%<+Pe z(_a6$g;OkjmfoN+4%O*=}xa^cJEn*l4RG)Dy?C_B1BbKVK(o2RxEf3x>E z?#B(=q=d3Y z>v00uQL>7f

    {VXEWM+r0hWE4{aJx2}`vgz1b9>A-TN+xsm~)ag|+*9Hj2|jCyyi z!4)A1+Kj5PCrQQy5a<0Fz;ING0N_f=2I%^9={y4YRvH=eL{c?Dyo~>Q)qk}IR@MWL zFUL;IIcMAmA_K&$vU%?YazCkl!hwAM(yQF&cAcBb=vH&sLb5Xlu(aOXc1XS4?@rNv z7dEpCbcNndmJXMR<5%n3LNAv@b+MnHU()pEX4J>1A6iBzrClK6NxI$~J;k6u z2oPeL)z6Z)V(TY!1^Xk81R)dq7Y}}STXUNTjPt|h6cm6cVpjHwt>aWUYyHj_9{h#g z&(Rce>!QHwU)GrIY#^uM0vE@xxuuo#!G0bjEx>@~8Ut^I5+rJv1=8LOuGtQA_pqcZ z%XE|yebEAP_q;hO*hHM`ODZ^TSzaXr2<4uEgpqXo@!>HegoumFZ-mGceBGUFiuxMpf_1>7Lez?Eu zPD(|p4U1DKTmW!q7aLq19cTvyMP_t2 z<$BR*-%A;{%ql*NJaC1;G|ag@*<|)L%mWuJ z0$5xwM4i@}n~X?M;MZA^PEW1H%tYR(uXDR1`F0Wk;K_FzRuHs;e@9<0ZXcz=xe$B` zfaAui_A9;|&Qz%{$2wF8f&9|IUh!>hd5y;E&=03SQCp79P)CrNt;uinlq25lo{vuSU151IHEkz7iFk++6!B9E%wGM zaQaaUD5&lWf8J;@W~IQl?w}jnXZcO4le~@Hg?p=G+L~j|b31Xy;D7y98=8#QFkHK) zk>B7yv;(YZ3%zM$Noz)a$@9MzSN4$R+vHHy__#ETZxOp{sh6)F>Ew6@&l;YA6NiO9 zz8(#JTLA93l)W=De-}{2;l&rcon_aGJSK5R$T4jYN>IX~9wDu2RTzUC^nk8f;!a)QByy^K`h)P9Dka~N5q*tM3L&S>ed*!LoCWKyeh zHtu8k4U*G~uJ%cuJ;bm&P+yv%eHu`%J#Z&o1`>xC54FZcjQ@6)m+R#(WUc=$Odk3Uc2iLD;Cr)MYjNxT%s=j8DeGzG+&(l`qH|e<`+HEi!;$}BS$Fe?hY&+3H? z2YLB>6GqU7Und(eq@jzBea|JVR#)AtbExqf1ebzJ(|(mEwcU~ua;mrOMQHaRd)E3j zP1@wk_-dW|#^C|TY1Lan7eidkA}hI1w4ED1M%wE1^1NRr6?^KK9b)IpiFIiO0AdSg zsdxM3j-p{g5aE)El|XAdA}1$jRUJ!;i_d)ty+1RRJzb|+)TP({;03~PeSS8 zeGd>~wTaO}c~NCl|50|6LEehgwV^Sy;Z$zOnuZ()^+@68; zG7m>ebfx8F9DNj%f~B`_hJ;HUmAo|;I<_pEAK$JUh!7=bECNt1vk$kXdQB*<2TyfZ zg_obtv(j?{tuPyuD+ibI^Tz73mSac{gBvhp924puO_IK0!hz}v72?DLsj?3B|={L|-t3zNe=rgHXd=Sut*ZvMomV$$EHc#z&#u>ML3PpL+;GMdl|}$f#`iF2@v6>} z8^Iv-=qQ-m{TS9S1DS*9(yFm|QeW6-mQ9Bm(0lAQW;ftVZAgcaEi-F@C7uN8ElMlN z0bEULP5){Oa~*MkOGA!I6%AeeYsu}clo@6$09F)aA7t+iKS`Ss1&9@FVxkY-gztMVIt zJ)WRl)3b``MeGKpbKh-moZgd@mux%Br$%kY8o^o>mQ50=d7J^kh=UN&)9ZCy9KjU2 z64t&xuIlYxo%62Q&6RQ$23vBc^-n^q)oQ9XOpVo$+NZ(y{jvgn;U1ve1WxbguVto( zqPVrM;jSV>I@J9b5K6w4OAb6gHFnHN;ceAfaqaCkxAdG{QW=d>3GAAU&rk{oAaLU+ zG8U(IBzl7*;}!Ua!#$bTy1B5XpTduGVsl;YPaGkYR*JW`$=({}hDPv=OKm|$?)~Lu z>}rul`ZXM2sCl*sW_OIO$=Kj@)lgxSh@58dNgR^Hw>C76#Zc(^AXe@JgZ5$L7o7f_ z)yiM$>O@!tX_q8muSCaJ8h-rK->5ZQ{Q|2z_9z#d`r1C)Ip*hhwCobBbQu&&IorM)dka&>_7qp4ye7@9oEVAL=g(9=t>L>*LhI@q6oB$h1@PIhf4?P^lMb z%c=B;of1;rb0p7U!qG&0N3I1M%1@u%`y$;*E#^ly)`c0r^}$jG-S8~;z*S=x?W1FXeqs4Pm@F0z_@SVCR#z$q^7ijwKi@e^>85p0iq5f~`MAM==ljp16+u;R6!Z z3=3VaJ_YvzQ`M%T+=_5v{0Mquvys3V;eqRoKG+mmTC7j)Y0My#zs_zAOxEzCOa>iR zu~LsI+;Q*hlI!%n$5MZKq;Oxn3|bi;jG1~=3&#nE6>_lx@=0`1dTQAdT-nzzax|&3 zTgVf+qh|0Irq(l40}$$!(=BACKlnKH;9ByX_n5bhppGlaswWnbM#6W-{3M+84@ zTWk*%e_MZ6dSDn4&|XE<$e0WMuB|o1 z4sXIU#B`ZUhvm94d~VSbNTcndsMckLlhlqpX7|`NjmYBu!9k_jviHgE{Xrpx#pz#C zBj>Rb+kvF6B#gd4-oP;{BF*IKRb`Rzbs9$UK}3I+k##Fp0~-~l19U`W80wN)4F6_x z+I@*|arFTb-K?@}RDw(C%g@VmlwJ+=cRx27rl_r6^BeJ(RxaZEMAWs&*9eOCwQsfW z^HOt7T8CCMd3N-tKUasfwzjv~iM_68sH43zm64W|$JP05@aobx0P4sWzD+@toOsuK zmpY|Vu;G0ABHeU)l;e(WBuyfN7*9}-bhy3~Jy0)Nj!#%b{yehQi$J9PH6YtmgLHj> zMcrfnJZNz$v?1(pI&DI~I|1FeBhS3O!3VA@_A4Cp)hM%<l+K_$L zph!ZZbGemb>Y{PEyNEimV`ACPhhsjV!e;C3iz0jjL^3fmMoz(*VOJZWsv>G90C&U{ zwdn?<3;g)L(<{;b7`Y}UZgCiD`GH>1_#mdUDhdsseBI(21K_NME>(r?CncaYEQgEB zbuef1&dYGMIP-+~d^QYMOEGUT5u2c}e7m*QDRK|rULPcxq(HAv-Bq#6?cc1cx#W8q zpj-*mGtv5meB#gaVz4p#{Rgw2i*8pE{G$>Ieu#W9Z)~iQGM?L_3UAFt1I$nw8Z!-L zeLymzP5+&&Ugma$I^B3V`sA2fuwZA#+Iy12deBmDvAGPp4Jf}qUoI!CjgdA>$C|lz z2oiT9FiS5vWrFM#t=+G3_@MpOdT6(`4N}IGrrL_8Vt-jFXr;>FU}{mP{fVyCnD~|0 zpb$8{Y`r%~&+7ZdtA?KBW=NPZGW`WIo_=P-wlONEYer>Cp(>0CVrEh{mtg$dAWI-xZP1e)Wf4rq1oYRZJ*J}~rjlz;VF-qZaq zg_Gzin9jg1HOzK_2UwMKGTgFa159_*(j#o#AGVNj?0!jiZF-0-VOOvhiksVPR4|kv z=&e?D;IvSV`4YP_{a68-;1R_rd{mw^A!a;awuWP|i?ZevMBtZF-oa(oZ8cv{myEn| zI>Wq*s9Q}EGHIm@&sCZPf_38kVy?1;0c@7QH#tP3EPgFe?KNZ-K_AoN5YOqwH2j@0 zD=c zv$sI;HnHtiVYZp}xHHol3v?*rku%6FfV9NL@Q^c0_w!&!$Z(Keefaa3%duAJnrpI; zWq`O3=hP)igF<$oyQJHDbEXoGCUT*3z3}Qg&XeyF{!i?DXHQbQPN!qKJ9hGS$Rp%+ z9Mg|UVEyk7k3r-Fbl&5LU-)}SN)jXp1A#@j)gUj4XJ%j8B*;h@@vkN%jT;XwJrs7p zCHP}6z1@B=*bi3+Z)42Pra%g3uLtxN1E~Ys|3=?qG`_Sq^J089S7130y@3U*@ATAki0JX8@! zAsKJ4mZYZs3BKSnvu(lP_7*Mn*Gb>v8fC)ef^fH1=igGc2nQ0CnpFoR(hhn$a-UUo zj0$tBHI7);ZXg{Y>8!ccnq@KN9rL|yHoZ4P(1;^M+MgV`f$A&g3&7w|mV$dzLAyp36`1xlh4=n|OiD?~#;d&g_@w1OyXS)-^NSOa2IaGK9(tU>;|{>4&irE(Xfgi00irBq^RuA{|!l-@n%( zQwm6naB94Ql=!VMC@bpMLyqo=j5oLWIl`lM_|-!t?Ocw1WU7t5+jL&d_i%~(yZSq+ zz{sPY!3l(gi#iQPL^roz_M++es~Jk5FDCBDgUa4R5Cda9Wcvhwu7QDw4VxRVyL+t; z6VPLov3p|6^Bl>;Ch~00rF1cJ(1rmr8(VAg8BuppqEbUts|Ttu?F?;q2?|s4!@$N= z#gdr^0Zt9)hO1`X+QpFPrQ?BA`4oWnKz|o4^j-`v7%{C&V^gKWR%$%ga&w2MVWl6Ns@V$qy)7X0?4U~dnE+4%a>vkwohtCMpW!E?q|fznO=!U zWoJy)s?dMa&7Y+wQjuy*9CWcyt{I>P5-Ijb);<>GZdjNpcc>%tA#zA+YV(Q+1iD)Y zpxKgcoOd&{3bz0m3G^li=go16$W&TDdSxX4ctDuk+U`D1z(0?uwEVa0M#O?GJ4cX|gm4lC*Xd!Y*hSx0%RdQ9vpAiVTK+G zyRz+hFYI@7%WB0sD>W~Ar6eT$>GKOuJ=o7Zf{JQIGwv6Yz?9Piz2ljDk~UXlF(stp z)F&YVlNeXHS}233|DqsJgF)j`2N;(nogd+i@6)42Y+p8mrd@lk{xszkV*-83;d_46 zG^W{&NgZ$6;0(vbK4@$-7_es|e$`4CMY@j2>Me*hTR!8>%ZHyw&hj~ItlU0siK{V3 zd5GYkdKDV!6XX_E)RuJ{q4QvQd?Hd{775Rx&%LfT^Dqhlt$cqnO^>I{H0Tbt@z4!- zx^9jm8$=r2Kq|$jl%I=P;z7iD4r{elm!&G$aL4?-zT>TPvJY8c?sm*9SL}A}KbQF8 z9ppL;T@kzdLsSr9*2J$RV2@4Lvi&}k`-{}xAk3lB0}?vpi)wM@e|OV0d_WwOWtIU@ zKnZ;II#J=yLBhS{kI(+y@%2NVaj7q2<8;Yk&r=auW%%H@b;I@hIdpj}R;LSOpi!jw z<+@D#^+!P&br=aDI!>JhMISGG((T8D1z7q}F$&${kfW zs#{JttDKZmQ#~?B+D`|e?uv!puU_mp{D~c^8|vkBZlh6Guc}R;NSsg8yC!EC(*j3M z48^AG^%B7k9QwAcY{ayQjm964VYb5 zX82ulS&qVp5WD!W|96+utDH5z3CCifk+Di+AH{Y!pLD#Nmx>9J@X1RJU7XyqzU2&y zE2E(4rl2gXIrVrC)`v#Cl^)3MG)#jrG<{THeK9tt1@Pms_~h5QJF{&lvxTvFxE1U1nenP>*rJU|d@M0UDkKErMLbdJ zw3{heY3Y*udWJX6a+{{EJkw$*{z12RF4~+VZ(ZIGVr$!lHW=D!)-|T0hqJFuH{5Ut zww_Ht&x_lSkmK=aD*@x!ZKeQ#fY9UBztLY1sg?W$oU}9CSQXB3#&%8Ck~*%7o5F9* zci08Dx)Esk3U~3*hMfgt1-FgK3VG^m4wf#nDRZ9HD z*f0byK>UOC?CK$o?rdYZX~$4J&xc=CLy5oazY~GQki^(TXUd&j8{XKra7Hel+);Zd z$FO(cQTGoxN895Y{TL}K4s)c%ektGwDgCweG=|2uRC06@gp+t6)nue5lQL&h(=umq zBMCaFFsilhW4vwW)PqnS`Fpn4>{N`EdM3x3%^=uNXRNzCF28nbn%Zo!xVCugH#udo z{n+41L>X6Fmuy!#0%-*-1M6IvQJCoKJ9&fQ+kPbFFYNqGTxkTk#ia6#jIU!Vzj;3! zu-D9cZZAzj^@>7pw*qhtO)gcSS_KxzB|f)s9xjri|BQ0Pb>m zXj!`egrsAk6b`g|uvFQEq#gt!>=|AIM`G;}5(wzwZ{S8magU4s{o=L=DosI@R8&g)*vk(7FLszm4+wBpi-?xet5vno zR(D$r$^3l2@aGCUqfcp^RcH7gaJjmwZ>|8>2Zmkk!s=naf0!h)opde1K~3mAUFt%d zfKk52g9^5(uVk&AwDfDC#r^?m%}py5d1zfrajb{|$~r=c^o?URh1dq3m{_(Z<8Y?; zbvtRtZ6DJ-#6p2uaL^)sfavx6h5jVE`)0`G(g-j|ge?y96RO@de#SxKH}zhhal$Xa zNPf>;22^La=L5k-xwF&5sxX;we}K!d-aw$T|t3=#9J1r2P-Ecz{qC0L-rb->qNti2u9P zG^AP<8n^MsV||v1Xc)OdOD|0K4i5BHMZrUFU$oVa+^QXG}jfy)2#(SJ&b~w1b$v-Y(?RMscj!MN$HyNmTGX4biG=1W6$t#G1@t?V($(K)bJgFZ z-uYsuAR@zLSfwOQazwr*v?ND((gH}mih3N5t!~%-UX8(7Z)>tS`F11ju!NddO2&_OcI8D}9SEDo!Q|6l3rOL`uQFHTp~crf4J=tLme(#JoL z=BR_mEP*wTq!PxKQ3|0&q@zwR@v)Nj6SMdwRT!jIDc_!GHR*72(EL`pwwN zj>Ap3)WY1El60SEzRq=P4fnQw7M`mo6FSRqWU;*fz}i$LYt?)gh&q6wPkdDdl7apC z;&n3|(d4cl=1q0@?cjd7pm&s19za@yxaRs zsjR3cCXsAS{u-_UEB;Wi7x7SM+4aZ63PfP#cBS(rABZxY2sFj|e>eev&@YLXVzj@; zm=XE0wg5H4@NbGsq60-rwCnRTVl<D6c=vxbW)T*B7^&+L=C>Bo`gr(giGe_ zPf3;OaLwWd2xTCG#(1UdJ~0O%`<9RUxN_*b1&s1WDQ5%1~5mC|+9NT`>Q{dK% zC$4HmymZ;qa`;Ob`*PnuG5jp{tI;mKl1--N@6f9JJdZM%fgSN-_2&IXUT%>NqjxZ$ z5H*G`cak(?(+#%A3zUvKrCkNjv;WD)0p`_F`eMrz%d&XUhfCWjn#qbMZUyEu>pqW{ z%GBhFFiqO=!VwXEg|UhPkX>kKHPg6xUB3FkP=K<5tKQoR%x~6Vy60)BnR4~Irkxg} zqOOzVL;wI$+mw$%WKv)`{H-*!zDe)puwm(6e`qO^@yF<9kA9XOtS%piNAH!QPR~LX zv~$^IBJC@?hPIk*956-m@^bQx7bOC=>HC8G5=-o=o}QWDEYux7%HE#fxNlYn zvqOV5>SEQ;6RkFn8T%wM%B)zGM^`m&EB%m_+suBwyy!e1HR?8l1Cx2N!>X988bUCI+P#~epb%Z+jixIys&+&Y=I7^88Mi^BHOI?!5^Aboa?{M~(W8&~)26$HALQ;k zl+P;iN)vg%uxTRFKb>{6E9hz#CrAjjRnBtBU_{W|!HdXp)!UwWBlkmkN_gL`kEckN;g1JaRsKT!2SXg8IsZjufm#SG9Hgiulw*!Sgc!}jc>q`D;Z@BhqF>nnBpj!OqpjhHLNuF0 zN&m4&R9xvUQl$z-J7WpQmOedmgu;d?No&AE!{lhnfqHGu%FRcVf|_m@lGr{~{)e7Y zB;OW=H-5li3rI9N2^j)mP8itpZ%{ zWNTVlK9-Mbey!xAdX-v}q7!b1eS&Q|Nrf{Cn($eX4{C3h`j@)TzgcoISo+|n@6AW6 za`f=6w3RUyhe|k{*lr`We$_i+VzeMrENI{s0%wDwN-^uGms`w)YO7?1#^m57`b%4n zNS0$Hv~?i5>_DE%404Z@6gTQeU1%){V=XC`NR+}-b3Fi~Nev+RHuSF225O~qD->gl z@?A-AQS+@3Yd?78QRmuVn>X}xsL8fpkd@+RNj68Ow|)7go{_vSKX;RToJF zF4KlRMo2;aD!T>DK(CLDHHGZbAWu{$Y<>`H|GQoUNzQThb z;Q)07Bew39jam^QLB!n(oE1t3#A`@ozyAGe5#46W>NBFJ}IDYH1xDq~)))x-a z**-y?#(2AyyG&55io;D7(cGl%9&wmWNd+n-uR)-0azireD66h0svE(81c@L;)X%7y z@N=LEPrA1V5a*rZ-9nTV+i>bT;f(Z*8C+U4Dy)A zw(eob9699RA23O42-e1AxNCV!MqzXL;*k-@H6vlr@)D+mPF^t7?_i{Cf5*>%pp8A%x;P>s{dvcdBxE9f$ zn1)O>D2q+Qfo|PxcNF@*-o%uw_k(97>Nw88D@Pyz1eN^nidV0(@p_R7Y_c}pO)+w* zyKcz78jD;ft>Q2*!BSPQ7UZBiU!`Fk`DV#ssDD!)_S+;f4ueg@Y@zQD_P@ur0$7TWTHezoPU~Cd&m)lckW%Mc3g-QHoEOB+3)WrB-$DZFn@0z2`$oIXl297<90%S4-R38E5kX14b(iOR}XM1srUH=UV18$IpqmqWwKgIFIXbl*VdyLm>P z?$~NC9*(@6_>x_FV0pNs#^qV-YL)^HY*;5fv^H|{_B_e7^p4LmPv~o!-#0ChoGzBY zsr$Ddp^Q5)zQ~^jzb}9QH&sdH(C)sT)*egGzcLh9q~J zNCF)nN2=o^V_@}xikVFpi?=ZZx0&Oe8pN;ds#|1BA+-px^?^t!;=$)Mew3ZIXL$d%hKipN8H!^KUsSMJx#qdG)8B~scLUx3>dX*Ddx!bo@mg&cfxaAbIXE0nh(&q zJUmU0{x}Ty2HxH(+;RhRvF(;E8gy-!Jhit1+=#xQWeLeSN~scqyepROyO;D1*B4dY z=_rfwRdjK;CSXt5-*b5jk&+?I=1~iE1r)N~y(lTPnxkJKXN!OT^azvD=*OeIDz&wW zMc%~%3X}rvi~Y$gMkydZ-n8Wnz0#N(3nULiobVcb(4NwB%l2GDZ3?;CZiim3PdGePGr@R;5qvrU&1ohJ}Rzd==vT|I3S?y7zj)9NsP9jQ=%41*62l;@h8?tcBM zzX#mo$s~!*#kkzgQ*oaog2#j&r*(CV1sq`&&o2;n%Y$uqh@VPoi*#_CVV*~h!7*}` zx%=(#xIu9IEUp-;vVSFqvhq^?XssnAa<6~Ef1=}FI2?zkNei-o`1*q5wo9`9 z4V`K66`j<{XcwZVU1A(|f$ZKwo}O`f?GR_qdH>!=@)ks_4%ozhsk_<}b~XuyyuF2u=lJ1v2BFq9&!Isb%LULh|i zWlc}$Q7F$4k`u}kP3lGcJwLCT2nPum;HrzdHO)qoj{76KMcMokfYiB0Utc`zGuTm=h0%U6Wyd5n|NHU;*5 zWOa4N&LrYqu4<>h!0 zj;If6+`2zyUOPoQk0c4>r~jHaX%r(?zkF{}9l*K1Ga+S{L|IqI#EBapbufRC%p1Ks zne;8RWp_(OzB}0b0xHL69b3bB#8BQhiln*8*G)Ne1MsU4S__EkDak#-4T0{lV=55_b@O}{vmq75#+rx!GhVYO+eDib)2>QLR+S`cm~1IKW~!Sr z7l}5#Y65T~sj#+1IrpO_9foK+X|<&Tg$;SB?)0gm{fQCKvhIpcgZZ|jeY7rQYG30_ z{HYhY*Q>YBjH9DkTEIKho@Y#Qw+_$0ga@l(x2g_uO^Qc73>p;ZA zhkw68pk)(=JMT&RM0pMR&YFiG@7);Y_@m!oSyuwMk-Uuu(R^g2RNHy`hfut`v26fy z>vlu=kiFN6IS+=R7_r}AE+5M8@>;PGb{aZ}TGP%Ys)oEss-17-O z6>{dfu2ZZ}2ECF_^ttd`+I1mRe3blA26$n5Pn%)f?u)$v;P{n==2KDbuSky43rv3z zsi(xMAM>2tYV#NZV_%8h%fI!G-F3F|Rm5p6E?_w~Bz8Sq3S2}f{dO4iD6OaqYS?s$ z=9;}2rC1E#f|cW0>4VJl(&bdiIN-ytSf8StfjHrxgC5xg4wUdEVkGK%DK`Enrf6Fw zC0)xwSGj8_Ui5_akG86@EpGI|(~fFetUp(r&+Byv7ofDq%*kziL&RezP>Y$PZW*J? zN$2lTZa`B@T`&sYixUUy{}!WQEI^+~K&Ae{8O{-5yEM~5~#g!W21ocZJBgSzpszCxEG zq1nlO!=}vOu#cQvaxa(FN$`~KW_O1cGl5Lpbi$FMYIZyF!yiaKQW))n0#}5VT=H~7 zVgR%N-w#!~TUn;$3Bvp;>Dvb`TD+$CL{kf^p=k@#oGB809I;|^T)Az~1&DAn(ZZyW z7Fs&3dQmR_8YkO=D{o0Txa`Ez9C)IKGjvb54K29FzzVF8qJ}kov7LXZw2K~LQh*Zx z)Pz~_KCD_s58F4PWC+hZZwQ}o)Ad^V-LIP0w4g^YyeC@r@N;r+GaqJQuV_<`gMJNP z2NmOQJf>9zIP+=k!ZimouzRU8!LDGmV|OooYqo-v5{MHwLsg8G}MQ54t!noi7`vP<{S03auZD=j#2aI2gOcedSFyJo)?q{T|!s?&IX z71l3n^}O8O>r|L&Hl)k3!NT=(5rAEiK4XP=^Y=dbfWPE;^k`p!lIrjo6O}md`u+RT zzGehHOKL-&Rh|Y$__QwrUO!9>FEUTG3cIMWY4Aq(F?H3x=MT3Je(PArqfYsTIGR$` z7DAGelB6p{*Hy1FZIPxpKEFby5;oj@EUy zQv2r9q2K%J`u4Pfh>m!Z^By6J6Yi+&6hq*K@}l*HP#o(xGmL2GZL>XCzxmnW%4Qep zDu)LF*nB_he*LNByS;9gpAWJ>t9SwIV<6RK7|vN=sRCmLe*@J*KqJPqCIBJMn{j{a z=RMGGBHjnqj}rE}|2b*n+eWCq704@uoEDuOVi7V@p-t!Z>ycEZT?e#h9;9Rdq*+E^ zhlBvFl8g_wcCPc0A zxr~34*t$PGysp={H~pQ$5ghFy8FgUG`8cjW187b8>-x)uF1UNm3iI3~e!&NQ{8An8D zmS>%NoWaL#;ng%;dD})JJ4d=Eeo6OEZil-Ix9pg;EKKnic0#>~i=m^U1!)`acD)~s znZ46bSlgUgC>|%d?AfU3PbGP?oXWRu^WQ=e5eYX7-`bRBb(*{TF{oJZoweJ&8RdKq zdUuKkvQP!YI2D3>E8evQ?k2Dh)Go_LDL~mKLsvzXEfGQL0 zxqO|Z&tYlA&U zhl+9++(UwxO|ZpCp{5$6Nu?2V>nN~kp|Ztxhv(lDk#*;{ z;SN^9t1D!5dfI_3EBzPk#hGm`*tIT5VhhHAEVTQ_2Zfn~J*u==pgo zcP_M6aq()2cXKGl*a&wcA8LV3{1vF2E4GZeMG;Y^Sq{6<@5efNG}a$>jvYS)AGiF9 zB0%rGuuqEiq&N!?l1$cs0aYf_QH|_QT)vrKT_<(@j1>pvzdp8&`&|Xh@eDgQ_$8V+ zh(>orPOZg33b2YE^@$wc!hR?+wc6eUjK!wF>IdarbU%X5%Z_kX z;XqFkZLfmfN}Q2MCa9#H;)77MF%>;>6n&%W5Migyd#%4%7FS`fvQvtn2oPR z1K%Lu5PLfup-Pcfu`=j5?byxdBf;bcPdC0Zc4-)e*!UJORk@-`EB$NObHG#4(M zu25LqM~s3d7S{8e$oc1AXwak$VrzTols*_s!eYlCDm+`5Cka zyfK>i{ttZR6jlHQ-ImG1s-aciLmr2mP3*i;(9ZF>_&~#{=7pArUaLM|%+xc*mU8#Q z9ruksZ~Q}SMts?q#Y%$n9Z{vdY*f&bm&}l8oQ2V?Hv=HIoEM!iRQrNFjv!4=ZeN|Q zri?rX#{C7?4;@vU$rW{Om*Zv&p!CKF@l!0f#xYLJi{;dG%%B84G+h-3_?%!UY(0L9 zlOe72^Z4P?y0zZ9){$`y#&0gU&JNex0OZ1(WNJn1a7WqZT7p)h;q^Mkt3fxZCPti! z_bLzey*$_(&^DAKYqXGX3tb&@?CGI{Z1(`C0Sb~i>2!m@Gp3I4c3K!T3@iSC+hy9- z(Zw#$5;bIAGIEx^oc~(b<+L`e>#%6#QJuYhf6CK%?9`6+*O1J2(>c6V4$?Sjt0KP5 zZl$*YWCy`rT&0kM?5SRs#gm8Jff7~wbzD>5b06MK``ZevGb zkZ1|^VQqoHu008`5q=< z%SK`Pb4(x}qv0mQ*H=_vPEQ^Y8_`g?s9JP55r!67Pnm(w%Xro|eEP;*Vr-DPPQv~R zpFD5bV6t^=P(RuP9Y(Fcg^n?`)+ZwFt%!WmF-5-K*GDk!a9Y=cYHU!DRKZSvDnshc z#0(b>ZZa9~&X<5dghprcVN%FbPq6oNHFPFgz^+NA8ps=7yW;*EYu^4HqCOv0dr{i6 zK$gNX%jS1z*!Xv_GAM0W(;q_->j%#EHOxrm=+*=5?^>xV?42^zR@l|igVZZZZ#Bwr zsI}F=4V8RiIyMU}%D>mxiVd&N?AT$BSVZtGCOvLzN{HzT5pUYT(Mry@C|3f$zSzC_ zb~n)P?WesOEK}Ofr@5othA(fYv!b{^y9{_)C#BN*85;%KZJb(*>BHG>?R0*)90@>n zkk_x*H0Zr?HT;-p2}l~~K09ZT_;eqUf1cC!!Tqd+hmQu;twH_Q#6$~+W{EOlUJXMS z_i^aXR8qvxA=I5sf(&1G{+H3|LFbjYZS&SDo}d~cHmS-@1{I539se4L87a1yo zm{J%D5gfB7E#6@K$OqvA|I#LwLyec2s$N>M9Ey^vi*Wn!@KRCZ0kGyJv zL6BAizFW_7H4IgeS(X6WzAM#;BSzTeG;f4TP4w1I27l#@jq(k4-^!{aT1J3g;c&^D z)fZRPU+vNJS7b^QI>M_0N%fAi7{~%pkJjzy8TN%E#Mj7fivtv{tZp+btE@3et4Y-M zD?n}qEv10HquSl&c#z`J~)8PBC*zIHB?v_lZgfpJbwg2>o5!A2tv%>K+2^dr!(>+LnX zje{oj4Gyl(<(E^HR{O_^$kNN>+$7UHos!`j)i4DZ_w%ixZto%^YyJ1Bbechl@-_XL z7!zi`<#6bPN0id9 z-ZWF)zgH59v3uq-IvKh5x!rGm*MtMZxo`6_49wUFo${BD2aS>Wh_!A|ww{LK9KV|h z`}>fp#Thsnb!dK`x}@72ZD4TOOtM+e?Gdhovwe#2Y4*5`BOLfJAu8K-kLd^EkeDU5 zbo%++7`!t0x>rs--q2;^tsI!UpHcO@U$_TtjPr!O%bVk?*ZVnm7X*)cH1QH%6_`q2s$ zTv!Ve^%uy^$LlVt=eG~~Dmv;wUV&il+;*{>Yum=?0}m8XBeP_IK_7~FujAtPIB>~LGO^ew`S2Nl^u^-YD~;4ZJxpZ zx>_6YNJ7piyv-3_g#0Hk{y7A-APoI;u4Gk*5yH-GZ*rBdktgQDnz%ckbmg$Z2k_#_ z(%X=%W5&~msx_k_=yJ2N)msh_pSx*lqlej4wOS|X7HhcZ*R-5nya1Hyqr9*=wz?KZ zqFJ^8>wE5{CmBsfRV{Ca-wuuRjDW4hHN3pZ8V0)k%H&guCp~pGSG)$)<;;pIpl363 zvvrSN`v+#xq(GL=D=V$KDVB))!Sd!?ZP=hpOe9v*PjOSH3k|f69~I1~N9n+izsC=W z9f=maMt8s5_Zn|Hcou*q-R3C2?Zm2CLZyn+f7Dvv89$6G9{VN@WjP$0!BodIk1Mha z^K$CATAUMMhS@LU+Q-!Tl#4a&pi8$wn0*u@LL+|v=a7`ow|M-W43L^+rc*qng9&|e z)wVq}p!SJ0^?lQ5OW^M!u|0Nvenr463efmT{g!9z8I|fUb%3F6ESW+coX~2DVI(b& zLa)a$SZFYxx2YMGdX~>Q(LrjN?$eWCtNSxcw!zjLV+jitp{Xy&$;Vp4)|fV^=vLB7 zhA%jBv;}NzID*qml5Vbw0rGsw!i3{Y$h)H~_+`jN)niF23{D;0Fp&PSo0@jE<27A< zkpz?|ziq=;bc^r&ois!7v3=zkj7F@i*Qz`w-Xq*M|4>c|$=igrmwxxk(s}K7?uRf1 zmY+ltE*?$FjFBBB9&hh9DI4dWxfdIf9z_XGBD!&nKefJDpbhC z0;NC!djMVAODa-Iq033^<6eOewPEhQvJDRIC+)EQfdTAVI7MV~@?wqpNgE)!yi_uK zmW{V1>XcGIna-yU+Vxz?dcmgdNs~g&@!Z5oY|>z%kp6)^U$wxxIVGivUdp6|4?|(u zj-FqVf8I-l&}E!d@sq!RoF+5-^7J**wg02mzm@y<`=~ucWBz;|Fd*Ig->4E0pB}F3 zm($Jvg(xW!0O5}-*d+_`S@3@zkCI>-|1$2i%>Sf-ziSDjur2@LTkF?=KMC)DJBW#3 z6}D$aw2X8AjfnUj4rKZ6lKsD&_HWny>wTXLOncO@o@DtK;&&3kKmkPJEsDRa`k(9* z2l{*l(}=8NJpYZz3Q2WQ`hF1bzZv`-9|xu#8CNsU{2MXs9n>ppfJfGU=k70NuM)sC zpDMP)jDI1{qvZGHeMGTO`Uh+O6`}aiz_hsLVcvfu;(`^m@NU=kU-UHk|05*^ian-V z{zo$JuyNaBcyq{bIe{N zcKNxGAVQRhyL_Bl(9v<{d#-`OKg1C@2_s{Kou(OrAoiC{G7UhIwmK9XLgDkf^CiT0 zqwZMG6mjk(-C3FB!wYoW@OjAPiV%zatl%c@OV=xNE0ysENf7B$1g!a?(mbWFOhk}eFi`(M28=?S3dV^3y=^yp#8{h}dny)AkwBemc|Hv{PW$$r}; z*l>v70gbV@gUH;iW{Q~6%_B=!gWnF7*z*G1426>r&_U<_;GRq!SsMX3(d&)DO+0{FGPIsFC z5VJ;oAsXdx+Dp+j5*vZS65qRG^_?xvoGrD0Juc9%t<8mTQr7~Hw0{VyPcne!MV!>- zkNo>oU_?QyjC2QBwtOM#HMa&PG>#g)=xI}wXR1rh#2$@=XN-L2sN5{IMu5CN;Gu-W z16(c#%(D{$#uA~2O@sUmcM-w;4p44htCx%5=|8Ucmvfp(fJ2-c=z;Z*LPTLdeKLsg z!)OZ$mbZ(Ad*$$=FqE9Z-T!I-JYv6^P5AH}uITSVsRom`<6W=nb$q1s#Gn<}Kwzqo zpoU?{=GOgFrKn>osFkb&OZT5jYX1tph}|;0GuUS1?ZJC!7L5Mr*nWF3`(#r+Ov_;> zt9j8%&=In=MQo?X8`!X9Nq(c5-vVcpCE)+hzws0l+-l)ET_gC}5vc!qoa50|oVOJ= zGO+`rAn&Pw!+aGdnzA^^MVM~NZqdjePdUD40q zfGA;#A@lOpLoE`7L&kA7LKJy>2?YR;>tTVNJa0SM!S|n1{NQ>!Z|@aJcGu$dy3KH5 zm?GQ3&D=QD_cP8^09&Km^j(kQ;fv;C&)wC9z3U`T-KH7eNQ_Z$x*Q2=yB*Q_3eOk) z#fpy=TdE=A_|*cJuH|AUitb9LRvEu9t>wdh8rPThe}WAEpm%`77rTC^@C1ELC%Rgg zEw0Dhx~W;&>;ipV6*9>HOUDaQu;o@=Gj8{L!07zTiK>>fcP)D+Ij-`X;l0%k-5#p| z;c^#JGjez%^;d4gYDJ`Di^-1YL(ptEdwrCHGmi(qaO!5btL3RuSK6rm*+; zTF%6(GKSSd$|)2`7SkQepU)L34vf<`$opE-I$c?S&g{)C9Js%iyJ|ier(W{U*04P) zPY}PH#$;|T>R0TAYw6$n)P`i!6PbN6uWmm4sIs(}#Xja1cNuKG;PbME6t_UZbNpWB z!yPMQBmdwl?bZe^SeLpK3Br4`We%YX7X+TWVQw z*Ae~Py}pc~=7;4KIxYBUuCmR6D0v%3rsk_uD|~C+JRDbpJzA0}pZA`j5v`b<=-{A% z&}XrwIM*~QWs(IIoX$nVAV7CE4{MoU#T9IltAU;=x^eA(3z!LR+h1c-+S+PK&!3IZ zU1%fY8ogx7R@z!gU-ON^Fn>r0AVyi%>aO{8u8A8cuu&sp$FZygM7V~FZtcSQncymvHe5F#)C6X;64I^$D9V8`SOStS{gKp2I zh3`_<&StLTIarGmfBvZh(4?hlEq~rwG5L~`&P@W#(y1Q(jTO z)K6_@l6nij0If`yP{J+I`t&MY@yJU*m0v7_$Yz0CRcue|jhP_WXGB^Vxwu2?WQuq5 zJw$UuAGK9;Fk!SY<;4Ql@#YUOxt(a~{t3N%^ zNuf(eI1mTGTe%`-QN%tk1*u6%YvpyoSkJ||ag4*`x>XMeKaZ8Y-?lo_X1dL$h04*S zeTib<&d{na5_!~>kRGuel5leYUW~~(+71xC{GbTd?=Qz&Xf|f8KwtMMvhY+1tz{igEBOa#ojamqOY@~MAkSu{(dvBQx(0uGnRk<2C zp3|x5TR}+D%aJP%BHbSGj^w&{$oUz{l*#N+37tcrNWsC)J-g(LCqkCQQhjQB(6}2Zk#WDN`bE4e3>w#V95@vZoC=or0wq98 z9l8$O(ZHaH(%Kb+Yb=H`O8hd^1-2R3E}$c9H~~QMs-BP2znNvC#UQ-3884G_X}8x7 z$PMdM>G-=OEbCUHerP;@E0UnB9G$fHhGl)79^98HVZ436T6 z?vZhS(Yfffx^Iq_qiEzs3->@f%6Fu=$aAQ^3%o_+2#Vk9i}a1MkId2i0g1j&541{en8woG-f?8j7FU$Th>@T5zL3{HVUwnocfn zs$NYue-3B6OiaI;U$s?aH*_eY&QR-vB=Sy?KsWcS#9?mp0%SJP81qs2oMx7;*(;eZ z7QtehJ!w6QXldv0K9{Bq6_GE&vG0eD@CjoBkj>RvPdJ7auOI`(fb?+V}|SWHdX zW`aDGw-PKp1cXl;tSU6=*|ue)zuMGb9@}ykZAKm%6S!(0HN7;PPEo%?<#_Zo@tHya z4;9&>F?a;V?jMdZHjk1q^F9OQ@l%ldH2$_128j>f0d=2%` z-bl1d=S5GI4v9d&HJS!7BwTw(&1f!+x_|pi$WWM zX{UT2@Cdy_`}g_2|C?eeZKsuw%K>sAw7^kFhuhgeg6_c{?dxr=S<7y(#SrGnX6J`W z7TzyTG%l~F`hMlSWVP&5Mza|3 zJ*KL_O!y;Pc?(b>S zC>#BrZ9W2a2<05y(?tC>nS+&;Tg?t^_`|Ph+;n!|ub&{{67OMu5gz)Yjaox|(5>CI z_HHpcI2>_2$)?dbhH{Q@KHKwMq)TI+cYSZ2%PM2A&SwE`SG4dr&Y;zamxdeq_~p@^ zLo!hRus)zBisN($!xnq9I>vzpXsUT}o@tCRi|XPkbzWJGkBqIih&V$SzEL61-~Mrg zaUoAKZL_6?qc-C=;(eXm5(4>ZO zJtlr6H98+23~k{f&yQ zo4eRK>`_Ip8?vWblIn=4G!4~yjRidB#>5G=hQVxKvu;tj847x=ikG#_naV3G9>i47 zr>q_$_77-j8N_e-X$LerLZ#O<;xW+qWOSV?5AR#8`D?4d{T>Oo%aURr(5<-CtXkaE zbC%c7R@MPNnE;DwXW?6=Y3aVoigWED*!lxQ+~i=>CU^o-o} z2LxkRFW9H*F&gW9wy79sEnaapNV4g5@$1~IrD+mZnh@E_@-5w5L%sRvd3!A!_=_Dc ze)K3X7Vk+onpnN}eCy~bC{@`qS~RJRUtN5w;(J3V)VqjS$Ccqbp3Dm_SgeZ$^xn~0 zzo=H2nmK-s-9WhsG*ET6=MB4zisybFkv;9^QB z-dK^mG|c!Iy+c69ptlpzaxiW3*Jq6Tf}Jrs^6;3v`;cqs_*uMlRodR<3%?+yx6dBW zgNXRVkEe-!R)SmfGrP!MlL#TV6wLHhx{b51Cw$SH9LSRWT1g4jqpgkgJbLou6GXuTKlrO#XU1tnc;WQo`?^SHDItB+4C{!zM{eGVg8V=+(`_duuOeqhUt-B| z9h&5u@d>B$M66Hq+GX7i$7JeD?F$7mP3~}f^w6-EhJiVs(WhdnH!Y$3!6M#$K^gWR zY-MCtz!(l`PW^N~Y|#t!$xgZ9tFkV|$l9=L0D};81+KZ=ofqz8O0y+jmL5F%HjUPR zG=E7|==EyeZ>)-aUlZ+tZOSK?h1HXM!{%YSrWv;U}NAizvB)Jwni*3e!vfcFv8uGX*Y&aBB z!%67qBn*4|qBdf(_@$<}Dyo|DI^T*qj2^$eoL^9|LM5m97s{y0CWeJ#z&s`Nb&(PC zukV)Cs|+)`p5pie_n}^}X}|_}W{l@O`_TKVjky~*7q|TNhGkfyWWaX3SIF6td)@&5 zI#|#@U(A^&2FS>)Ng>OwouXoCtn4cwI`~3gk(ymJ-8P$F!v7~>5RVc2g_pNjR)>qI z%Ox0K%Lq+l7-(k54#@p#m-tlqpaEPe!x3XJoy@C=Lma;fmbFeb$$-)tYScQ(01hx} zMZN-Bj@y5R-kiJpKh2=mFn3)hP0SNG{sNa!)ynkLI{EIZpYiWh)C!fJobg|4o(wXL zPk3$h2QVjmDJL!-v0^Bo8Fxy1@v-9s=3j6T0QZ->x#3GqrE3RPaNB)hqGn_-!(>RI zo562Jb>2+5;bI>98Np#253}ft)kmQyKI+}3wXR0NOI!WTy~uG5BWM?{uN044Qd!Wz zOku>1ckfVgzKRN|aMp>%WHbD^(GNQu51Xo}V}jS*_@)jshUPOyFNZpw9u!e&TdzX$ z0(8Q-6}zt-Kf7TZQ8bwT?xedDoe}MbW_g3D+G;>IXK?GIw2#Lc z(s*;+`{A*m-%<}yA98FrM@I!%DY`e2?y&11Zg9p0%};TXo_be1b?(IXWHA@@m+E($ zdSp)Pkb%=TYqkc5E0!$V+J^#xz}{-a)6>)4TEyxeGmni3f_rXPVEcfEx*x81IoTdA zwI1W?4)Qh!(X5sJ@JR{Db`>lrRNGAh`^Pivuz)++rUid#?!$@G852&J$NiKwrdSUW z@b_x-h7_{^wETz_M9V`{*X?1=W5mU<6EtMc#rer;OD< ztOz!CbC{!5y8mzFkwOb8`+;tBfq?Ahz!q+<-B

    zQa6@2g{$AbbCcS2?~H`i86Ip2=jhKYQVJ+DysDtESpY>Gj5=zIno`As z^`qh|*XO>N_40MlH&`xddpQrQV>ZVo+KSPYcxx4Ss{7^12C4hG?j6jx2o_D1WvG`% zNV{$hRi3|{06jedbF!B{B6o$ZsmGuF)pURfvvakhl89 zgMY|Geqc%3?e4jm6y?+zUg z4n5|a3QoyIRNA2Q(coLsjIOdYbeN>EcXy6gF0w`yt0d>s5WDYN)=Q6RLz5qq6!ZMv zG@G%Bk&MydY%{6E#syv^c`Ngb0?bKcOSZmhCA2WDQ{o{vNvY#CbDQ>QgpCognXBeD zc`}>K(jYDT`nWd(Lpwl0CS1SwGMMmAi?nhx2Oxdao|`mOS%z!HOa`86l?S zY!u{GV!%&r{K6?fHeq$O`;%PZPdnDU{Dd0hl=BI3{vw^~Xcye)Mi;wIC)P4dwKzb+ zg1k3cC-J{~fa-yXkS&BU6!Ri*Ilu0TmoE{H?- zf^-pvMX(u$NwM4b0wlRHln0C{j!1oZg0RO+AJ&F^k9A5tEO6~GKBZ@{o;-7Nhb@k} ziU>oSZi>FN7-R9Xyn4LH%qrvxug$vqg^<5f3BB|!)cVbQB@6UZ2m(G<&=98v{B!X9 zFTq;PZ|RFO(`NeNupuR#%ZaMpMPtn(J0dEr$nqNqBzKk|j-gzOiGv^yJ5S~rSOizS zzU8144^Y0LD)1}_<)%Q_8>e%k;jO=f2o9m}bru)DGxy!u-R0);q^nIdE*Hk zBzh*Oe9LGazLliJwL&AXUaEm(I2*~IntyAgyMQlN)U6g+k}ta!uqlS7%%$GAU>%fd zdb%d~F+RTMai9h5Ww$w8oy*{&(;4}+Ff#P65Yl?N`o|j__IG`@uxOow=N#$*zE*GR z@n;s-Mu&w36p7zBera{xO=zWzI>T%~c0nshup+{gh=%WG((*DCxabBKD7#9Y(_)j0 z8lG4gdc6?U^||6iw1)&Gy^cnRP}CmssHK$*OR#?lfzfK35Xhjdq9k8YIQxMQ#o{^b zq`YkliibWW**J6@6E_h%987M}wPM=SJ#!i;9C8Y_P7|BzrI_}KubTo4}bAy0O9dA5LbEvwj zxZMI3Fl6)j&?!pa&Fl(2&J7aiO+mbG>DCOG{7eVCFAO+-(uS6jhI0UcR5x%N(u?tN z`a*kGYgaeQpROs<0FQ%MJ}Z8fymNKPZ0gB+DN+dM5Uu)x5}+UYHLCsrB)aF_qNfh6uNL-!q(T;$evM!Pl9L zp(Xn`VJuf^n03F|=Q0~OexaQ8>_IztYUt>On==A5VnLBZt?@Ktx)zVvn#ELl!=Q><~sl(VCy^H6f0jmylw3@h;Z(n z;^Qm31O}2?s$ubJDUr`JB5RJV0;Tbe__;;ZOx8P8R43I48uc}N21l7k_6@9_&~u_n z#k(^eybo;;pj6AkQHw7W`S75|7wh}g+piy^1Ui>fe=M&EHUf4vD<2B|#&gl4x=S+7 zvd(SYG)s=-@9N~kiW`pXgCt5knM)So_o2;n>y`pL1-FiJ>d&hu&1@kDOZ)a&8X-&bW=$gG6RW`LP2S;nTzv~eh=ii$dH%voFb0Zh?nI~I%Aa?Oz?M|@@Zqlvj;kf1n~nSa0;gh6S!7kNhR&6j6QQvVb!pUn z^Nfi>DCm7d>L=Plml?z#Ni5dru_9Mv%$hXm#}51W?0EFTbQTjk5>yQCZhMfqq(=EV zlt}pIZ)0N8Z!xm?TO}eI=|2VXQ4xrQ0-+FLLxf|XLj9_Ol1k8S3hlg~$aP)Wq*E-a z0brsYZY=5~n&b<%C>1a7mN^EvD*wId6Dbl|)11(^b#}XmlSR zjK_d>xEQvq^63&EYa2KoN%{R{DDJ{~Xs*^1DyT^a$HLle-IUh^e%7v z-eE=5??$3JJ;GeVK-kg$s2KkZLNRcImD!ToIyq!CSJHmHAmj{R`3<~V)+1f4sW z_L_Voc_;(LO!m*h>fh&Z?{QC+9cIBdivK=L@W<=mcdAcE5_}Dx{x|J&K6q@k+xcLW z=>LGh1VA1_gA3=^MTDAg|9~+3S7BWN44_f}f4v^m>!V^E9n`56i$GZ zKQQY80>2ZA|79@mL*GI9K|vGzi^P}&z^vyH-Hs~#%U}Y810Z^Xg8$XRh`_AR#Ce%e z|I1(m!SEpcA3}deivPpfUni5uVAlV?S0BiqIA`GQW94l4JMinPn4D;hutCuO1K5r$ A=l}o! literal 0 HcmV?d00001 diff --git a/www/images/aerobictraining/girls.png b/www/images/aerobictraining/girls.png new file mode 100644 index 0000000000000000000000000000000000000000..b8bfdaea5fe10e2c049e86848ba637b627ca9885 GIT binary patch literal 95910 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 e|K_|L Date: Tue, 28 May 2013 11:57:39 +0100 Subject: [PATCH 39/60] Add other two resources as links --- www/index.html | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/www/index.html b/www/index.html index 326a11a..652f5a6 100644 --- a/www/index.html +++ b/www/index.html @@ -1300,6 +1300,8 @@

    Resources

    @@ -1312,6 +1314,28 @@

    Are you sure you want to open this resource?

    +
    +
    +

    Are you sure you want to open this resource?

    +

    This action can use data, and may not work on some Android devices.

    +
    + + +
    +
    +
    +
    +
    +

    Disabled

    + +

    This external resource has been removed since it no longer exists. This button, along with this message, will be completely removed in a future update. Sorry for the inconvenience.

    + +
    + + +
    +
    +
    From 31a57e1297a3fee00d64f9b108efcba0230dce5f Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 11:57:56 +0100 Subject: [PATCH 40/60] Fix href --- www/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/index.html b/www/index.html index 652f5a6..cddd74d 100644 --- a/www/index.html +++ b/www/index.html @@ -1352,7 +1352,7 @@

    Disabled

    Training Zones
    - Close + Close Training Zones
    From b76dc5ab05048e0e93f02c6bbc3a5f538569d47d Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 11:58:09 +0100 Subject: [PATCH 41/60] Add subpage for resource two --- www/index.html | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/www/index.html b/www/index.html index cddd74d..f0d756b 100644 --- a/www/index.html +++ b/www/index.html @@ -1368,6 +1368,43 @@

    Disabled

    + +
    + +

    Fitness Testing

    + +
    +

    This test is designed to measure your cardiovascular endurance

    +

    Using a 12 inch high bench (or a similar sized stair in your house), step on and off for 3 minutes.

    +

    Step up with one foot and then the other. Step down with one foot followed by the other foot.

    +

    Try to maintain a steady four beat cycle. It's easy to maintain if you say "up, up, down, down".

    +

    Go at a steady and consistent pace.

    +

    At the end of 3 minutes, remain standing and immediately check your heart rate by taking your pulse…

    + + Fitness Testing Boys Table +
    + Close + Fitness Testing Boys Table + +
    + + Fitness Testing Girls Table +
    + Close + Fitness Testing Girls Table + +
    + +

    The Aerobic zone 70-80%: Training in this zone will develop your cardiovascular system. The body's ability to transport oxygen to, and carbon dioxide away from, the working muscles can be developed and improved. As you become fitter and stronger from training in this zone it will be possible to run some of your long weekend runs at up to 75%, so getting the benefits of some fat burning and improved aerobic capacity.

    +

    The Anaerobic Zone 80-90%: Training in this zone will develop your lactic acid system. In this zone, your individual anaerobic threshold (AT) is found - sometimes referred to the point of deflection (POD). During these heart rates, the amount of fat being utilised as the main source of energy is greatly reduced and glycogen stored in the muscle is predominantly used. One of the by-products of burning this glycogen is lactic acid. There is a point at which the body can no longer remove the lactic acid from the working muscles quickly enough. This is your anaerobic threshold (AT). Through the correct training, it is possible to delay the AT by being able to increase your ability to deal with the lactic acid for a longer period of time or by pushing the AT higher.

    +

    The Red-line Zone 90-100%: Training in this zone will only be possible for short periods. It effectively trains your fast twitch muscle fibres and helps to develop speed. This zone is reserved for interval running and only the very fit are able to train effectively within this zone.

    + +

    Back

    + +
    + +
    +
    From 96824c2e8681ffece1bc899354a24d78756875f7 Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 17:58:28 +0100 Subject: [PATCH 42/60] Remove obsolete resource link --- www/index.html | 2 -- 1 file changed, 2 deletions(-) diff --git a/www/index.html b/www/index.html index 6fd6063..2b2924e 100644 --- a/www/index.html +++ b/www/index.html @@ -1344,8 +1344,6 @@

    Introduction

  • Don’t skip breakfast
  • - Food Labelling Information -

    Resources

    From 77f91c2707d29f82349d09340aa6cb6c296acdde Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 17:59:08 +0100 Subject: [PATCH 43/60] Replace resource buttons with different ones --- www/index.html | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/www/index.html b/www/index.html index 2b2924e..2a9bbf9 100644 --- a/www/index.html +++ b/www/index.html @@ -1347,9 +1347,8 @@

    Introduction

    Resources

    From 6dfaa12fc043109aae9d38eea47a27baecb32fae Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 17:59:51 +0100 Subject: [PATCH 44/60] Remove unnecessary popups since external links are not required --- www/index.html | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/www/index.html b/www/index.html index 2a9bbf9..ab8ef98 100644 --- a/www/index.html +++ b/www/index.html @@ -1351,27 +1351,6 @@

    Resources

    Food Labelling
    -
    -
    -

    Are you sure you want to open this resource?

    -

    This action can use data, and may not work on Android.

    -
    - - -
    -
    -
    -
    -
    -

    Are you sure you want to open this resource?

    -

    This action can use data, and may not work on Android.

    -
    - - -
    -
    -
    -
    From abedecd1b7b1add6079787a19bd29aa2634a2bda Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 18:00:02 +0100 Subject: [PATCH 45/60] Adjust code formatting of header --- www/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/index.html b/www/index.html index ab8ef98..52c8863 100644 --- a/www/index.html +++ b/www/index.html @@ -1344,7 +1344,7 @@

    Introduction

  • Don’t skip breakfast
  • -

    Resources

    +

    Resources

    Classification From 56043f85bfdc0a8342f0b9532a4102b112eefa6b Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 18:00:34 +0100 Subject: [PATCH 46/60] Remove ChildBrowser code and replace with InAppBrowser code --- www/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/index.html b/www/index.html index 52c8863..30fd22f 100644 --- a/www/index.html +++ b/www/index.html @@ -1419,7 +1419,7 @@

    Guideline Daily Amounts

    window.onload = function() { var gdaimgsource = document.getElementById("gdaimgsource"); gdaimgsource.onclick = function() { - cordova.exec("ChildBrowserCommand.showWebPage", "http://www.danone.co.uk/SiteImages/Assets/0/GDA_545px.jpg" ); + window.open('http://www.danone.co.uk/SiteImages/Assets/0/GDA_545px.jpg', '_blank', 'location=yes'); return false; } } From fd620b5902007a23eadf4da3e646931624f30fb8 Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 18:00:52 +0100 Subject: [PATCH 47/60] Change KM tracking descriptor --- www/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/index.html b/www/index.html index 30fd22f..2f60f1e 100644 --- a/www/index.html +++ b/www/index.html @@ -1426,7 +1426,7 @@

    Guideline Daily Amounts

    An example of a GDA. Source

    Guideline Daily Amounts (GDAs) were developed by food manufacturers and retailers and you can find out more by visiting the IGD website. IGD is a food and grocery industry research organisation.

    From 2667c0db5edc5d7153121b536e0a7c16a1e6169d Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 18:01:02 +0100 Subject: [PATCH 48/60] Simplify header text --- www/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/index.html b/www/index.html index 2f60f1e..07bcc6e 100644 --- a/www/index.html +++ b/www/index.html @@ -1361,7 +1361,7 @@

    Resources

    -

    H&F Nutrition Food Labelling

    +

    Nutrition Food Labelling

    From d247258bf428c2dbb88f3db8b338049c06c577ca Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 18:01:17 +0100 Subject: [PATCH 49/60] Add classification page (subpage 2) --- www/index.html | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/www/index.html b/www/index.html index 07bcc6e..4409dd3 100644 --- a/www/index.html +++ b/www/index.html @@ -1441,6 +1441,91 @@

    Ingredients list

    + +
    + +

    Nutrition Classification

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CarbohydratesEnergy can be stored in the body in the form of carbohydrates and this is particularly important for endurance performers, who may not be able to restock their energy stores adequately while they are competing. Carbohydrates are high in glucose and enter the blood. Excess glucose is stored as glycogen in the liver and muscles. Extra glucose is not wasted, but converted into glycogen or fat and stored.Cereals, All wholegrain foods, Potato, Rice, Vegetables, Fruits, Beans, Pasta.
    ProteinsIt contributes to the development and growth of hormones and haemoglobin in the blood, both of which are essential for those involved in sport or regular physical activity. Protein is necessary for the growth and repair of body tissues. It is also a relatively minor source of energy (10%).Meat, Fish, Eggs, Milk, Cheese, Cereals, Nuts.
    FatsThere are many forms of fat in the body and it supplies around 70% of our energy requirements. Fat supplies energy (calories) that can either be used immediately or stored for future use. Although fat is the body’s preferred energy source, it also uses energy in the form of stored carbohydrate (glycogen) for intensive burst of energy. If we consume an excessive amount of fat, it is stored in the body tissues and causes us to become overweight. In order to avoid this, dieticians recommend that we should not consume more than ⅓rd of our daily nutritional needs in the form of fat.

    Saturated – meat, burgers, sausages, butter, cheese.

    +

    Hydrogenated – margarine, biscuits, cakes, puddings, chocolate.

    +

    Polyunsaturated / Omega 6 – vegetable oils, nuts, seeds

    +

    Omega 3 – Oily fish, walnuts, soya beans, sweet potatoes

    +

    Monounsaturated – Olive oil, olives, avocados, nuts, seeds, rapeseed oil

    FibreDietary fibre comprises the edible parts of plants that are not broken down and absorbed in the small intestine. It does not contain any nutrients. It therefore adds bulk to our food without adding extra kilojoules. Fibre regulates the digestive system.Whole-grain and high-fibre breakfast cereals and bread, fruit and vegetables.
    MineralsMinerals are required by the body for a variety of functions including the formation of bones & teeth, as essential constituents of body fluids & tissues, components of enzyme systems, and nerve function.

    Calcium for bones and teeth – milk, cheese, dairy products.

    +

    Magnesium for energy metabolism – dark green leafy vegetables, grains and nuts.

    +

    Sodium for regulating body fluids - salted foods, crisps, canned foods.

    +

    Potassium for water and electrolyte balance – dried fruits, bananas, berries, veg, milk.

    +

    Iron for formation of haemoglobin/oxygen transport – spinach, dark green veg, liver, red meat, nuts, peas

    +

    Iodine for hormone formation – salt water fish, milk.

    Vitamins

    Vitamins are chemical compounds found in the food we eat. Our bodies cannot make vitamins so must take them from our food. Vitamins perform the following functions: aiding growth, increasing resistance to infection, regulating some body functions such as good vision, and helping the metabolism of certain foods.

    +

    There are two main groups of Vitamins:

    +
      +
    1. FAT Soluble Vitamins – Vitamins A, D, & K, they can be stored in our body.
    2. +
    3. WATER Soluble Vitamins – Vitamins C & B, They cannot be stored in the body.
    4. +

    Vitamin A – Liver, whole milk, cheese, butter, carrots, leafy veg.

    +

    Vitamin D – Oily fish, eggs, butter, and meat.

    +

    Vitamin K – most plant and animal sources, also made by bacteria in the gut.

    +

    Vitamin C – plant sources, fresh milk, liver.

    +

    Vitamin B1 – Whole grains, nuts, meat.

    +

    Vitamin B2 – milk, eggs, breakfast cereals, liver, green veg.

    +

    Niacin – meat.

    +

    Vitamin B6 – beef, fish, poultry, eggs, whole grains, some veg.

    +

    Vitamin B12 – milk, meat, eggs.

    WaterWater makes up 70% of the human body. It is essential for the correct functioning of virtually all living cells. Water has many functions: it provides the medium in which most reactions in the body occur, it acts as a lubricant for joints and eyes, and it helps regulate body temperature. The amount of water we drink varies from person to person, depending on age, time of year, climatic conditions, diet, the amount of physical activity we do. Dehydration is common amongst athletes, especially in hot climates, or at altitude. As little as a 2% loss of bodyweight can result in impaired responses and performance. Water replacement is essential before, during and after exercise.

    Tap water is suitable for replacing lost fluid following mild or moderate exercise.

    +

    Isotonic drinks are more suitable after vigorous or prolonged exercise.

    + +
    + +
    + Back +
    +
    +
    From 2c1f2084d9fde411a365df45ce3fc3262fa8dcb3 Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 19:05:04 +0100 Subject: [PATCH 50/60] Change to multi-column layout --- www/index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/www/index.html b/www/index.html index fa5586f..40bc437 100644 --- a/www/index.html +++ b/www/index.html @@ -1595,10 +1595,6 @@

    I want to burn calories quickly…

    Answer: Interval training. It doesn’t matter what you do, run, row, or jog on the spot. If you do these exercises at FULL pace (after a warm up) for 20 seconds, then have a 40 second rest, repeating this for up to 5 minutes, it will burn a huge amount of calories. The good thing about this type of training is that your metabolism is given a jump-start so it keeps burning calories for hours after you have finished.

    I want a fast fitness workout…

    Answer: Crossfit training. This type of training focuses on strength and endurance training and is scalable to your own fitness and ability level. It also burns lots of calories. For example, a favourite of mine is to do 5 pull-ups, 10 push-ups then 15 bodyweight squats, one after the other, no rest. Each time you complete this its one rep. The idea is that you do as many reps as you can in 10 minutes. If you can’t do the pull-ups then swap them for something like bench-dips or anything you can do.

    -

    Here are a few crossfit workouts you can try out for yourself…

    -

    Are you sure you want to open this resource?

    @@ -1609,6 +1605,10 @@

    Are you sure you want to open this resource?

    +
    +

    Here are a few crossfit routines:

    + +

    How do I lose weight?

    Answer: Eat sensibly, increase your activity. We all know when the food we eat is a ‘treat’ or something that’s ‘clean’. The difference between the two is our own motivation. If we have a goal or a beach holiday coming up its much easier to be strict with what we eat. The way I look at it is this; its MUCH easier to stay in shape than to GET in shape. Maintenance is the key to a healthy weight, once you get there. Fast answer; walk briskly when you walk, jog up the stairs, bike instead of getting a lift, say no to the second helping, and yes just once a week to treats… you get the picture.

    So try crossfit and interval training as faster ways to increase your activity. If this is too intense then start with 10 minutes on the cross-trainer or bike. Get into the habit of doing this and you will see a difference in your health.

    From d45507e12c80481c471785183a5ac2fd390c1be9 Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 19:06:35 +0100 Subject: [PATCH 51/60] Remove unnessary popup --- www/index.html | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/www/index.html b/www/index.html index 40bc437..44ddd64 100644 --- a/www/index.html +++ b/www/index.html @@ -1595,16 +1595,6 @@

    I want to burn calories quickly…

    Answer: Interval training. It doesn’t matter what you do, run, row, or jog on the spot. If you do these exercises at FULL pace (after a warm up) for 20 seconds, then have a 40 second rest, repeating this for up to 5 minutes, it will burn a huge amount of calories. The good thing about this type of training is that your metabolism is given a jump-start so it keeps burning calories for hours after you have finished.

    I want a fast fitness workout…

    Answer: Crossfit training. This type of training focuses on strength and endurance training and is scalable to your own fitness and ability level. It also burns lots of calories. For example, a favourite of mine is to do 5 pull-ups, 10 push-ups then 15 bodyweight squats, one after the other, no rest. Each time you complete this its one rep. The idea is that you do as many reps as you can in 10 minutes. If you can’t do the pull-ups then swap them for something like bench-dips or anything you can do.

    -
    -
    -

    Are you sure you want to open this resource?

    -

    This action can use data, and may not work on Android.

    -
    - - -
    -
    -

    Here are a few crossfit routines:

    From 421b2c05bca8a24126fcb7f1a7474111b690579f Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 19:06:58 +0100 Subject: [PATCH 52/60] Add subpage for crossfit routines --- www/index.html | 206 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) diff --git a/www/index.html b/www/index.html index 44ddd64..c8b4203 100644 --- a/www/index.html +++ b/www/index.html @@ -1614,5 +1614,211 @@

    How do I tone my legs?

    + +
    + +

    Crossfit Routines

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Angie +
      +
    • 100 Pull-ups
    • +
    • 100 Push-ups
    • +
    • 100 Sit-ups
    • +
    • 100 Squats
    • +
    +
    For Time. Complete all reps of each exercise before moving to the next.
    Barbara +
      +
    • 20 Pull-ups
    • +
    • 30 Push-ups
    • +
    • 40 Sit-ups
    • +
    • 50 Squats
    • +
    +

    Rest precisely three minutes between each round.

    +
    5 rounds, time each round.
    Chelsea +
      +
    • 5 Pull-ups
    • +
    • 10 Push-ups
    • +
    • 15 Squats
    • +
    +
    Each min on the min for 30 min.
    Cindy +
      +
    • 5 Pull-ups
    • +
    • 10 Push-ups
    • +
    • 15 Squats
    • +
    +
    As many rounds as possible in 20 min.
    Fran +
      +
    • Thruster 95 lbs
    • +
    • Pull-ups
    • +
    +
    21-15-9 reps, for time.
    Karen +
      +
    • Wall-ball 150 shots
    • +
    +
    For time.
    Nancy +
      +
    • 400 meter run
    • +
    • Overhead squat 95 lbs x 15
    • +
    +
    5 rounds for time.
    Kelly +
      +
    • Run 400 meters
    • +
    • 30 box jump, 24 inch box
    • +
    • 30 Wall ball shots, 20 pound ball
    • +
    +
    Five rounds for time.
    Nicole +
      +
    • Run 400 meters
    • +
    • Max rep Pull-ups
    • +
    +
    As many rounds as possible in 20 minutes.
    TDA 5 +

    Five rounds of:

    +
      +
    • 30 push-ups
    • +
    • 40 sit-ups
    • +
    • 50 Air Squats
    • +
    +
    For time.
    Crossfit 25 +
      +
    • Sprint 100M
    • +
    • 25 push-ups
    • +
    • Sprint 100M
    • +
    • 25 crunches
    • +
    • Sprint 100M
    • +
    • 25 air Squats
    • +
    • Sprint 100
    • +
    • 25 burpees
    • +
    +
    Three rounds for time.
    RSP +
      +
    • Run ½ mile (1 lap of back field)
    • +
    • 100 Air Squats
    • +
    • 50 push-ups
    • +
    • Run ½ mile
    • +
    +
    For time.
    Filthy Fifty +
      +
    • 50 push-up
    • +
    • 50 squats
    • +
    • 50 crunches
    • +
    • 50 lunges
    • +
    • 50 burpees
    • +
    +
    For time.
    Ten-minute Challenge +

    One of the following:

    +
      +
    • Max push-ups
    • +
    • Max Pull-ups
    • +
    • Air Squats
    • +
    • Burpees
    • +
    +
    Record score.
    10-10-10 +

    10 push-ups, 10-crunches, 10 air squats – 10 rounds of.

    +

    Set 10 cones, 10M apart, do 1st round at start cone then sprint to the next cone. Repeat. Sprint back from last cone.

    +
    Burpees for time +
      +
    • 100 burpees
    • +
    +
    For time.
    + +

    Back

    + +
    + +
    + From 310821971c9371508c0a49908916fbb602468000 Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 19:07:07 +0100 Subject: [PATCH 53/60] Enable multi-line buttons --- www/index.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/www/index.html b/www/index.html index c8b4203..ab4efbb 100644 --- a/www/index.html +++ b/www/index.html @@ -7,6 +7,10 @@ TDA Enrichment App + From 8204f9fd9929f597f69a4ba9720227db5c611686 Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 19:11:28 +0100 Subject: [PATCH 54/60] Correct closing comment tag --- www/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/index.html b/www/index.html index 4409dd3..47a96e7 100644 --- a/www/index.html +++ b/www/index.html @@ -1524,7 +1524,7 @@

    Ingredients list

    -
    +
    From 938455917d4964ef01262a671689cd887aba0b4f Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 19:41:34 +0100 Subject: [PATCH 55/60] Add introduction button --- www/index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/www/index.html b/www/index.html index 856e6a1..d712f15 100644 --- a/www/index.html +++ b/www/index.html @@ -75,6 +75,7 @@

    Welcome

    • Health & Fitness

    • +
    • Introduction
    • HOFF's 5 Wheels
    • Warm-ups and Cool-downs
    • Resistance Training
    • From 12cac32571b1ba78adec71755b8b1e5d4b072acf Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 19:41:49 +0100 Subject: [PATCH 56/60] Add introduction & information page --- www/index.html | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/www/index.html b/www/index.html index d712f15..e4b8a3f 100644 --- a/www/index.html +++ b/www/index.html @@ -2061,5 +2061,36 @@

      How do I tone my legs?

    + +
    + +

    H&F Info

    + +
    + + +

    Welcome

    + +

    Welcome to the TDA Health & Fitness mini-site. Here you will find information on the main aspects of Health and Fitness along with other resources. If you can't find what you want on here, or require further information, please e-mail Mr Hoffmann with suggestions or ideas.

    +

    Before you start on ANY fitness training program, remember: if you have any injuries, medical conditions or are not sure about what to do, ask a member of staff or check with your doctor that it's fine for you to train.

    +

    Warm-ups. You HAVE to do them, read the WARM-UP page first and INCLUDE one with every workout, run, row, team game, individual event. Make it a HABIT and it will go along way to help you stay injury-free.

    + +

    Acknowledgements

    + +
      +
    • ‘G-Force’, the ultimate guide to you best body ever – Gunnar Peterson
    • +
    • ‘ABSolution’ – Shawn Phillips
    • +
    • ‘Mind Games’ – Jeff Grout & Sarah Perrin
    • +
    +
    +

    Some information also provided by Mr Hoffmann.

    + +
    + +
    + Back +
    +
    + From 80df8655bcdc76bdfbc42545d4de4bd1489f8eb1 Mon Sep 17 00:00:00 2001 From: George Garside Date: Tue, 28 May 2013 20:48:24 +0100 Subject: [PATCH 57/60] Update launch images --- Default-568h@2x.png | Bin 61736 -> 51926 bytes Default.png | Bin 19544 -> 10999 bytes Default@2x.png | Bin 54186 -> 35200 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Default-568h@2x.png b/Default-568h@2x.png index b5d6211f091dfc7e134d59167f9dcfcd6ce4de0d..4200c367f66488012ef43bd75e7d9645327177e5 100644 GIT binary patch literal 51926 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 U(AhY#z3b7wrl(bO)#l0n0h|ffR{#J2 literal 61736 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 L`x*#4QcYV0NnaZ;&P2 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 M07*qoM6N<$f Date: Wed, 29 May 2013 10:41:02 +0100 Subject: [PATCH 58/60] Ignore `*.diff` files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 50f68a6..086fa36 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ build *~.xib .DS_Store xcuserdata/ +*.diff From 48d9f1923abbcb986e0f2aa334564cec7df4a45c Mon Sep 17 00:00:00 2001 From: George Garside Date: Wed, 5 Jun 2013 16:06:55 +0100 Subject: [PATCH 59/60] Increment version and build number --- TDA-Enrichment/TDA-Enrichment-Info.plist | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TDA-Enrichment/TDA-Enrichment-Info.plist b/TDA-Enrichment/TDA-Enrichment-Info.plist index a511061..655f8ff 100644 --- a/TDA-Enrichment/TDA-Enrichment-Info.plist +++ b/TDA-Enrichment/TDA-Enrichment-Info.plist @@ -39,7 +39,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.1.3 + 1.2 CFBundleSignature ???? CFBundleURLTypes @@ -58,7 +58,7 @@ CFBundleVersion - 11 + 13 LSRequiresIPhoneOS NSMainNibFile~ipad From 6267af8770fd394362fc38b0652aa17106f7ac14 Mon Sep 17 00:00:00 2001 From: George Garside Date: Wed, 5 Jun 2013 16:36:15 +0100 Subject: [PATCH 60/60] Change build number to fix #20 The first number of the build version now references the major build number, and the following numbers reference the number of incremental updates since the last build. --- TDA-Enrichment/TDA-Enrichment-Info.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TDA-Enrichment/TDA-Enrichment-Info.plist b/TDA-Enrichment/TDA-Enrichment-Info.plist index 655f8ff..c098353 100644 --- a/TDA-Enrichment/TDA-Enrichment-Info.plist +++ b/TDA-Enrichment/TDA-Enrichment-Info.plist @@ -58,7 +58,7 @@ CFBundleVersion - 13 + 113 LSRequiresIPhoneOS NSMainNibFile~ipad