From a2c08bd1a21c863c9eaa801d635eaa70794d25b1 Mon Sep 17 00:00:00 2001 From: fantasy Date: Wed, 27 Feb 2019 13:04:30 +0800 Subject: [PATCH] feat: add all source code add coobjc library code, examples, unit tests, coswift code, cokit code --- Examples/coSwiftDemo/Podfile | 20 + .../coSwiftDemo.xcodeproj/project.pbxproj | 583 +++++++++ .../xcschemes/coSwiftDemo.xcscheme | 101 ++ .../coSwiftDemo/coSwiftDemo/AppDelegate.swift | 56 + .../AppIcon.appiconset/Contents.json | 98 ++ .../coSwiftDemo/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 + .../coSwiftDemo/Base.lproj/Main.storyboard | 24 + .../coSwiftDemo/coSwiftDemo/DataService.swift | 172 +++ Examples/coSwiftDemo/coSwiftDemo/Info.plist | 50 + .../coSwiftDemo/ViewController.swift | 45 + .../coSwiftDemo/coSwiftDemoTests/Info.plist | 22 + .../coSwiftDemoTests/coSwiftDemoTests.swift | 44 + Examples/coobjcBaseExample/Podfile | 18 + .../project.pbxproj | 1103 +++++++++++++++++ .../xcschemes/coobjcBaseExample.xcscheme | 101 ++ .../coobjcBaseExample/AppDelegate.h | 16 + .../coobjcBaseExample/AppDelegate.m | 85 ++ .../AppIcon.appiconset/Contents.json | 98 ++ .../Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 + .../Base.lproj/Main.storyboard | 24 + .../coobjcBaseExample/Info.plist | 52 + .../coobjcBaseExample/Model/KMMovie.h | 103 ++ .../coobjcBaseExample/Model/KMMovie.m | 113 ++ .../Network/Discover List/KMDiscoverSource.h | 46 + .../Network/Discover List/KMDiscoverSource.m | 67 + .../KMDiscoverSourceJsonPattern.json | 17 + .../coobjcBaseExample/Network/KMBaseSource.h | 38 + .../coobjcBaseExample/Network/KMBaseSource.m | 80 ++ .../Network/KMSourceConfig.h | 43 + .../Network/KMSourceConfig.m | 50 + .../Movies Details/KMMovieDetailsSource.h | 48 + .../Movies Details/KMMovieDetailsSource.m | 60 + .../KMMovieDetailsSourceJsonPattern.json | 62 + .../Related Movies/KMSimilarMoviesSource.h | 46 + .../Related Movies/KMSimilarMoviesSource.m | 70 ++ .../KMSimilarMoviesSourceJsonPattern.json | 17 + .../Network Config/KMSourceConfig.plist | 14 + .../Activity Indicator/KMActivityIndicator.h | 44 + .../Activity Indicator/KMActivityIndicator.m | 187 +++ .../Details Page View/KMScrollingHeaderView.h | 87 ++ .../Details Page View/KMScrollingHeaderView.m | 274 ++++ .../KMIndexedCollectionView.h | 21 + .../KMIndexedCollectionView.m | 14 + .../KMDiscoverStoryboard.storyboard | 303 +++++ .../KMMovieDetailsStoryboard.storyboard | 233 ++++ .../KMSimilarMoviesStoryboard.storyboard | 103 ++ .../Discover List/KMDiscoverListCell.h | 27 + .../Discover List/KMDiscoverListCell.m | 43 + .../KMDiscoverListViewController.h | 14 + .../KMDiscoverListViewController.m | 173 +++ .../KMMovieDetailsViewController.h | 22 + .../KMMovieDetailsViewController.m | 424 +++++++ .../KMComposeCommentCell.h | 25 + .../KMComposeCommentCell.m | 35 + .../KMComposeCommentCell.xib | 39 + .../Movie Details Cells/KMMovieDetailsCell.h | 49 + .../Movie Details Cells/KMMovieDetailsCell.m | 50 + .../KMMovieDetailsCell.xib | 121 ++ .../Movie Details Cells/KMMovieDetailsCells.h | 21 + .../KMMovieDetailsCommentsCell.h | 35 + .../KMMovieDetailsCommentsCell.m | 34 + .../KMMovieDetailsCommentsCell.xib | 75 ++ .../KMMovieDetailsDescriptionCell.h | 26 + .../KMMovieDetailsDescriptionCell.m | 24 + .../KMMovieDetailsDescriptionCell.xib | 57 + .../KMMovieDetailsPopularityCell.h | 35 + .../KMMovieDetailsPopularityCell.m | 24 + .../KMMovieDetailsPopularityCell.xib | 121 ++ .../KMMovieDetailsSimilarMoviesCell.h | 44 + .../KMMovieDetailsSimilarMoviesCell.m | 38 + .../KMMovieDetailsSimilarMoviesCell.xib | 125 ++ .../KMMovieDetailsViewAllCommentsCell.h | 20 + .../KMMovieDetailsViewAllCommentsCell.m | 24 + .../KMMovieDetailsViewAllCommentsCell.xib | 66 + .../KMSimilarMoviesCollectionViewCell.h | 30 + .../KMSimilarMoviesCollectionViewCell.m | 48 + .../KMSimilarMoviesCollectionViewCell.xib | 44 + .../Movies Grid View/KMMoviePosterCell.h | 23 + .../Movies Grid View/KMMoviePosterCell.m | 13 + .../KMSimilarMoviesViewController.h | 18 + .../KMSimilarMoviesViewController.m | 111 ++ .../Utils/Categories/NSArray+SafeValues.h | 54 + .../Utils/Categories/NSArray+SafeValues.m | 77 ++ .../Utils/Categories/NSBundle+Loader.h | 35 + .../Utils/Categories/NSBundle+Loader.m | 37 + .../Categories/NSDictionary+SafeValues.h | 69 ++ .../Categories/NSDictionary+SafeValues.m | 77 ++ .../Utils/Categories/NSString+MD5.h | 35 + .../Utils/Categories/NSString+MD5.m | 84 ++ .../Utils/Categories/NSString+UrlEncoding.h | 28 + .../Utils/Categories/NSString+UrlEncoding.m | 22 + .../Utils/Categories/NSURL+Parameters.h | 28 + .../Utils/Categories/NSURL+Parameters.m | 36 + .../Utils/Categories/UIFont+GillSansFonts.h | 49 + .../Utils/Categories/UIFont+GillSansFonts.m | 33 + .../Utils/Categories/UIImageView+WebCache.h | 26 + .../Utils/Categories/UIImageView+WebCache.m | 46 + .../coobjcBaseExample/Utils/DataService.h | 36 + .../coobjcBaseExample/Utils/DataService.m | 224 ++++ .../Utils/KMNetworkLoadingViewController.h | 52 + .../Utils/KMNetworkLoadingViewController.m | 72 ++ .../Utils/KMStoryBoardUtilities.h | 27 + .../Utils/KMStoryBoardUtilities.m | 29 + .../Utils/Labels/KMGillSansLabel.h | 39 + .../Utils/Labels/KMGillSansLabel.m | 167 +++ .../Utils/UI Utils/KMButton.h | 13 + .../Utils/UI Utils/KMButton.m | 83 ++ .../coobjcBaseExample/ViewController.h | 25 + .../coobjcBaseExample/ViewController.m | 39 + .../coobjcBaseExample/main.m | 16 + .../coobjcBaseExampleTests/Info.plist | 22 + .../coobjcBaseExampleTests/coobjcActorTests.m | 253 ++++ .../coobjcAutoreleaseArcTests.m | 316 +++++ .../coobjcAutoreleaseTests.m | 553 +++++++++ .../coobjcBaseExampleTests.m | 49 + .../coobjcBenchmarkTests.m | 178 +++ .../coobjcCancelTests.m | 97 ++ .../coobjcChannelTests.m | 448 +++++++ .../coobjcBaseExampleTests/coobjcCommon.h | 31 + .../coobjcBaseExampleTests/coobjcCommon.m | 131 ++ .../coobjcCreateTests.m | 194 +++ .../coobjcBaseExampleTests/coobjcDelayTests.m | 54 + .../coobjcPromiseTests.m | 184 +++ .../coobjcSequenceTests.m | 283 +++++ .../coobjcBaseExampleTests/coobjcTupleTests.m | 239 ++++ LICENSE | 201 +++ Podfile | 16 + README.md | 514 +++++++- README_cn.md | 500 ++++++++ cokit.podspec | 28 + cokit/Examples/coKitExamples/Podfile | 19 + .../coKitExamples.xcodeproj/project.pbxproj | 679 ++++++++++ .../coKitExamples/AlertDemoViewController.h | 23 + .../coKitExamples/AlertDemoViewController.m | 140 +++ .../coKitExamples/AlertDemoViewController.xib | 83 ++ .../coKitExamples/coKitExamples/AppDelegate.h | 27 + .../coKitExamples/coKitExamples/AppDelegate.m | 69 ++ .../AppIcon.appiconset/Contents.json | 98 ++ .../Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 + .../coKitExamples/Base.lproj/Main.storyboard | 24 + .../coKitExamples/DemoListViewController.h | 23 + .../coKitExamples/DemoListViewController.m | 132 ++ .../ImagePickerDemoViewController.h | 23 + .../ImagePickerDemoViewController.m | 63 + .../ImagePickerDemoViewController.xib | 34 + .../coKitExamples/coKitExamples/Info.plist | 54 + .../coKitExamples/Resources/test.json | 22 + .../coKitExamples/ViewController.h | 25 + .../coKitExamples/ViewController.m | 134 ++ .../coKitExamples/coKitExamples/main.m | 26 + .../coKitExamplesTests/Info.plist | 22 + .../coKitExamplesTests/coKitArchieveTests.m | 95 ++ .../coKitExamplesTests/coKitExamplesTests.m | 49 + .../coKitExamplesTests/coKitJsonTests.m | 122 ++ .../coKitExamplesTests/coKitNSArrayTests.m | 258 ++++ .../coKitExamplesTests/coKitNSDataTests.m | 144 +++ .../coKitNSDictionaryTests.m | 377 ++++++ .../coKitNSFileManagerTests.m | 118 ++ .../coKitExamplesTests/coKitStringTests.m | 203 +++ .../coKitURLConnectionTests.m | 87 ++ .../coKitExamplesTests/coKitURLSession.m | 89 ++ .../coKitExamplesTests/coKitUserDefaults.m | 109 ++ .../coKitExamplesTests/coKitXMLParserTests.m | 87 ++ cokit/Podfile | 8 + cokit/README.md | 345 ++++++ cokit/cokit.xcodeproj/project.pbxproj | 525 ++++++++ .../xcshareddata/xcschemes/cokit.xcscheme | 80 ++ cokit/cokit/Foundation/NSArray+Coroutine.h | 214 ++++ cokit/cokit/Foundation/NSArray+Coroutine.m | 303 +++++ cokit/cokit/Foundation/NSBundle+Coroutine.h | 52 + cokit/cokit/Foundation/NSBundle+Coroutine.m | 62 + cokit/cokit/Foundation/NSData+Coroutine.h | 300 +++++ cokit/cokit/Foundation/NSData+Coroutine.m | 304 +++++ .../cokit/Foundation/NSDictionary+Coroutine.h | 119 ++ .../cokit/Foundation/NSDictionary+Coroutine.m | 266 ++++ .../Foundation/NSFileManager+Coroutine.h | 254 ++++ .../Foundation/NSFileManager+Coroutine.m | 864 +++++++++++++ .../NSJSONSerialization+Coroutine.h | 86 ++ .../NSJSONSerialization+Coroutine.m | 180 +++ .../Foundation/NSKeyedArchiver+Coroutine.h | 56 + .../Foundation/NSKeyedArchiver+Coroutine.m | 136 ++ .../Foundation/NSPropertyList+Coroutine.h | 78 ++ .../Foundation/NSPropertyList+Coroutine.m | 158 +++ cokit/cokit/Foundation/NSString+Coroutine.h | 82 ++ cokit/cokit/Foundation/NSString+Coroutine.m | 375 ++++++ .../Foundation/NSURLConnection+Coroutine.h | 119 ++ .../Foundation/NSURLConnection+Coroutine.m | 76 ++ .../cokit/Foundation/NSURLSession+Coroutine.h | 99 ++ .../cokit/Foundation/NSURLSession+Coroutine.m | 287 +++++ .../Foundation/NSUserDefaults+Coroutine.h | 152 +++ .../Foundation/NSUserDefaults+Coroutine.m | 357 ++++++ .../cokit/Foundation/NSXMLParser+Coroutine.h | 101 ++ .../cokit/Foundation/NSXMLParser+Coroutine.m | 284 +++++ cokit/cokit/Info.plist | 22 + .../cokit/UIKit/UIAlertController+Coroutine.h | 47 + .../cokit/UIKit/UIAlertController+Coroutine.m | 145 +++ cokit/cokit/UIKit/UIApplication+Coroutine.h | 30 + cokit/cokit/UIKit/UIApplication+Coroutine.m | 44 + cokit/cokit/UIKit/UIImage+Coroutine.h | 65 + cokit/cokit/UIKit/UIImage+Coroutine.m | 260 ++++ .../UIKit/UIImagePickerController+Coroutine.h | 63 + .../UIKit/UIImagePickerController+Coroutine.m | 289 +++++ .../UIKit/UIVideoEditorController+Coroutine.h | 30 + .../UIKit/UIVideoEditorController+Coroutine.m | 117 ++ cokit/cokit/cokit-Prefix.pch | 5 + cokit/cokit/cokit.h | 37 + cokit/cokit/common/COKitCommon.h | 56 + cokit/cokit/common/COKitCommon.m | 104 ++ coobjc.podspec | 33 + coobjc.xcodeproj/project.pbxproj | 784 ++++++++++++ .../xcshareddata/xcschemes/coobjc.xcscheme | 80 ++ coobjc/Info.plist | 22 + coobjc/api/COActor.h | 65 + coobjc/api/COActor.m | 59 + coobjc/api/COActorChan.h | 42 + coobjc/api/COActorChan.m | 63 + coobjc/api/COActorCompletable.h | 27 + coobjc/api/COActorCompletable.m | 23 + coobjc/api/COActorMessage.h | 88 ++ coobjc/api/COActorMessage.m | 90 ++ coobjc/api/COChan.h | 135 ++ coobjc/api/COChan.m | 227 ++++ coobjc/api/COCoroutine.h | 220 ++++ coobjc/api/COCoroutine.m | 464 +++++++ coobjc/api/README.md | 1 + coobjc/api/coobjc.h | 203 +++ coobjc/common/README.md | 1 + coobjc/coobjc-Prefix.pch | 5 + coobjc/core/README.md | 1 + coobjc/core/coroutine.h | 142 +++ coobjc/core/coroutine.m | 331 +++++ coobjc/core/coroutine_context.h | 132 ++ coobjc/core/coroutine_context.m | 70 ++ coobjc/core/coroutine_context.s | 268 ++++ coobjc/csp/README.md | 1 + coobjc/csp/co_csp.h | 211 ++++ coobjc/csp/co_csp.m | 414 +++++++ coobjc/objc/co_autorelease.h | 54 + coobjc/objc/co_autorelease.mm | 740 +++++++++++ coobjc/promise/COPromise.h | 162 +++ coobjc/promise/COPromise.m | 284 +++++ coobjc/util/README.md | 1 + coobjc/util/co_errors.h | 30 + coobjc/util/co_errors.m | 47 + coobjc/util/co_queue.h | 35 + coobjc/util/co_queue.m | 48 + coobjc/util/co_queuedebugging_support.h | 37 + coobjc/util/co_queuedebugging_support.m | 131 ++ coobjc/util/co_tuple.h | 82 ++ coobjc/util/co_tuple.m | 302 +++++ coobjc_icon.png | Bin 0 -> 14189 bytes coswift.podspec | 30 + coswift/Chan.swift | 153 +++ coswift/Coroutine.swift | 304 +++++ coswift/Errors.swift | 29 + coswift/Info.plist | 22 + coswift/Promise.swift | 288 +++++ coswift/coswift.h | 31 + coswift/coswift.swift | 101 ++ docs/arch_design.md | 151 +++ docs/arch_design_zh.md | 146 +++ docs/images/actor_diff.png | Bin 0 -> 497907 bytes docs/images/actor_theory.png | Bin 0 -> 149291 bytes docs/images/channel1.png | Bin 0 -> 36743 bytes docs/images/channel2.png | Bin 0 -> 36673 bytes docs/images/context.png | Bin 0 -> 46991 bytes docs/images/counter_actor.png | Bin 0 -> 148859 bytes docs/images/counter_origin.png | Bin 0 -> 125350 bytes docs/images/framework_arch.png | Bin 0 -> 94845 bytes docs/images/generator_diff.png | Bin 0 -> 531777 bytes docs/images/generator_execute.png | Bin 0 -> 266900 bytes docs/images/scheduler.png | Bin 0 -> 49441 bytes docs/images/xml_co.png | Bin 0 -> 200590 bytes docs/images/xml_origin.png | Bin 0 -> 336962 bytes docs/usage.md | 623 ++++++++++ docs/usage_swift.md | 141 +++ 279 files changed, 32138 insertions(+), 2 deletions(-) create mode 100644 Examples/coSwiftDemo/Podfile create mode 100644 Examples/coSwiftDemo/coSwiftDemo.xcodeproj/project.pbxproj create mode 100644 Examples/coSwiftDemo/coSwiftDemo.xcodeproj/xcshareddata/xcschemes/coSwiftDemo.xcscheme create mode 100644 Examples/coSwiftDemo/coSwiftDemo/AppDelegate.swift create mode 100644 Examples/coSwiftDemo/coSwiftDemo/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Examples/coSwiftDemo/coSwiftDemo/Assets.xcassets/Contents.json create mode 100644 Examples/coSwiftDemo/coSwiftDemo/Base.lproj/LaunchScreen.storyboard create mode 100644 Examples/coSwiftDemo/coSwiftDemo/Base.lproj/Main.storyboard create mode 100644 Examples/coSwiftDemo/coSwiftDemo/DataService.swift create mode 100644 Examples/coSwiftDemo/coSwiftDemo/Info.plist create mode 100644 Examples/coSwiftDemo/coSwiftDemo/ViewController.swift create mode 100644 Examples/coSwiftDemo/coSwiftDemoTests/Info.plist create mode 100644 Examples/coSwiftDemo/coSwiftDemoTests/coSwiftDemoTests.swift create mode 100644 Examples/coobjcBaseExample/Podfile create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample.xcodeproj/project.pbxproj create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample.xcodeproj/xcshareddata/xcschemes/coobjcBaseExample.xcscheme create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample/AppDelegate.h create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample/AppDelegate.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample/Assets.xcassets/Contents.json create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample/Base.lproj/LaunchScreen.storyboard create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample/Base.lproj/Main.storyboard create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample/Info.plist create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Model/KMMovie.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Model/KMMovie.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Network/Discover List/KMDiscoverSource.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Network/Discover List/KMDiscoverSource.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Network/Discover List/KMDiscoverSourceJsonPattern.json create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Network/KMBaseSource.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Network/KMBaseSource.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Network/KMSourceConfig.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Network/KMSourceConfig.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Network/Movies Details/KMMovieDetailsSource.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Network/Movies Details/KMMovieDetailsSource.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Network/Movies Details/KMMovieDetailsSourceJsonPattern.json create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Network/Related Movies/KMSimilarMoviesSource.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Network/Related Movies/KMSimilarMoviesSource.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Network/Related Movies/KMSimilarMoviesSourceJsonPattern.json create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Ressources/Plists/Network Config/KMSourceConfig.plist create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/Activity Indicator/KMActivityIndicator.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/Activity Indicator/KMActivityIndicator.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/Details Page View/KMScrollingHeaderView.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/Details Page View/KMScrollingHeaderView.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/Indexed Collection View/KMIndexedCollectionView.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/Indexed Collection View/KMIndexedCollectionView.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/StoryBoards/KMDiscoverStoryboard.storyboard create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/StoryBoards/KMMovieDetailsStoryboard.storyboard create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/StoryBoards/KMSimilarMoviesStoryboard.storyboard create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListCell.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListCell.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListViewController.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListViewController.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/KMMovieDetailsViewController.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/KMMovieDetailsViewController.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMComposeCommentCell.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMComposeCommentCell.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMComposeCommentCell.xib create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCell.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCell.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCell.xib create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCells.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCommentsCell.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCommentsCell.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCommentsCell.xib create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsDescriptionCell.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsDescriptionCell.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsDescriptionCell.xib create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsPopularityCell.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsPopularityCell.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsPopularityCell.xib create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsSimilarMoviesCell.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsSimilarMoviesCell.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsSimilarMoviesCell.xib create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsViewAllCommentsCell.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsViewAllCommentsCell.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsViewAllCommentsCell.xib create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMSimilarMoviesCollectionViewCell.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMSimilarMoviesCollectionViewCell.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMSimilarMoviesCollectionViewCell.xib create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMMoviePosterCell.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMMoviePosterCell.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMSimilarMoviesViewController.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMSimilarMoviesViewController.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSArray+SafeValues.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSArray+SafeValues.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSBundle+Loader.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSBundle+Loader.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSDictionary+SafeValues.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSDictionary+SafeValues.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+MD5.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+MD5.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+UrlEncoding.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+UrlEncoding.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSURL+Parameters.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSURL+Parameters.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIFont+GillSansFonts.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIFont+GillSansFonts.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIImageView+WebCache.h create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIImageView+WebCache.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample/Utils/DataService.h create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample/Utils/DataService.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMNetworkLoadingViewController.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMNetworkLoadingViewController.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMStoryBoardUtilities.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMStoryBoardUtilities.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Labels/KMGillSansLabel.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/Labels/KMGillSansLabel.m create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/UI Utils/KMButton.h create mode 100755 Examples/coobjcBaseExample/coobjcBaseExample/Utils/UI Utils/KMButton.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample/ViewController.h create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample/ViewController.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExample/main.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExampleTests/Info.plist create mode 100644 Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcActorTests.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcAutoreleaseArcTests.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcAutoreleaseTests.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcBaseExampleTests.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcBenchmarkTests.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCancelTests.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcChannelTests.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCommon.h create mode 100644 Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCommon.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCreateTests.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcDelayTests.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcPromiseTests.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcSequenceTests.m create mode 100644 Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcTupleTests.m create mode 100644 LICENSE create mode 100644 Podfile create mode 100644 README_cn.md create mode 100644 cokit.podspec create mode 100644 cokit/Examples/coKitExamples/Podfile create mode 100644 cokit/Examples/coKitExamples/coKitExamples.xcodeproj/project.pbxproj create mode 100644 cokit/Examples/coKitExamples/coKitExamples/AlertDemoViewController.h create mode 100644 cokit/Examples/coKitExamples/coKitExamples/AlertDemoViewController.m create mode 100644 cokit/Examples/coKitExamples/coKitExamples/AlertDemoViewController.xib create mode 100644 cokit/Examples/coKitExamples/coKitExamples/AppDelegate.h create mode 100644 cokit/Examples/coKitExamples/coKitExamples/AppDelegate.m create mode 100644 cokit/Examples/coKitExamples/coKitExamples/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 cokit/Examples/coKitExamples/coKitExamples/Assets.xcassets/Contents.json create mode 100644 cokit/Examples/coKitExamples/coKitExamples/Base.lproj/LaunchScreen.storyboard create mode 100644 cokit/Examples/coKitExamples/coKitExamples/Base.lproj/Main.storyboard create mode 100644 cokit/Examples/coKitExamples/coKitExamples/DemoListViewController.h create mode 100644 cokit/Examples/coKitExamples/coKitExamples/DemoListViewController.m create mode 100644 cokit/Examples/coKitExamples/coKitExamples/ImagePickerDemoViewController.h create mode 100644 cokit/Examples/coKitExamples/coKitExamples/ImagePickerDemoViewController.m create mode 100644 cokit/Examples/coKitExamples/coKitExamples/ImagePickerDemoViewController.xib create mode 100644 cokit/Examples/coKitExamples/coKitExamples/Info.plist create mode 100644 cokit/Examples/coKitExamples/coKitExamples/Resources/test.json create mode 100644 cokit/Examples/coKitExamples/coKitExamples/ViewController.h create mode 100644 cokit/Examples/coKitExamples/coKitExamples/ViewController.m create mode 100644 cokit/Examples/coKitExamples/coKitExamples/main.m create mode 100644 cokit/Examples/coKitExamples/coKitExamplesTests/Info.plist create mode 100644 cokit/Examples/coKitExamples/coKitExamplesTests/coKitArchieveTests.m create mode 100644 cokit/Examples/coKitExamples/coKitExamplesTests/coKitExamplesTests.m create mode 100644 cokit/Examples/coKitExamples/coKitExamplesTests/coKitJsonTests.m create mode 100644 cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSArrayTests.m create mode 100644 cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSDataTests.m create mode 100644 cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSDictionaryTests.m create mode 100644 cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSFileManagerTests.m create mode 100644 cokit/Examples/coKitExamples/coKitExamplesTests/coKitStringTests.m create mode 100644 cokit/Examples/coKitExamples/coKitExamplesTests/coKitURLConnectionTests.m create mode 100644 cokit/Examples/coKitExamples/coKitExamplesTests/coKitURLSession.m create mode 100644 cokit/Examples/coKitExamples/coKitExamplesTests/coKitUserDefaults.m create mode 100644 cokit/Examples/coKitExamples/coKitExamplesTests/coKitXMLParserTests.m create mode 100644 cokit/Podfile create mode 100644 cokit/README.md create mode 100644 cokit/cokit.xcodeproj/project.pbxproj create mode 100644 cokit/cokit.xcodeproj/xcshareddata/xcschemes/cokit.xcscheme create mode 100644 cokit/cokit/Foundation/NSArray+Coroutine.h create mode 100644 cokit/cokit/Foundation/NSArray+Coroutine.m create mode 100644 cokit/cokit/Foundation/NSBundle+Coroutine.h create mode 100644 cokit/cokit/Foundation/NSBundle+Coroutine.m create mode 100644 cokit/cokit/Foundation/NSData+Coroutine.h create mode 100644 cokit/cokit/Foundation/NSData+Coroutine.m create mode 100644 cokit/cokit/Foundation/NSDictionary+Coroutine.h create mode 100644 cokit/cokit/Foundation/NSDictionary+Coroutine.m create mode 100644 cokit/cokit/Foundation/NSFileManager+Coroutine.h create mode 100644 cokit/cokit/Foundation/NSFileManager+Coroutine.m create mode 100644 cokit/cokit/Foundation/NSJSONSerialization+Coroutine.h create mode 100644 cokit/cokit/Foundation/NSJSONSerialization+Coroutine.m create mode 100644 cokit/cokit/Foundation/NSKeyedArchiver+Coroutine.h create mode 100644 cokit/cokit/Foundation/NSKeyedArchiver+Coroutine.m create mode 100644 cokit/cokit/Foundation/NSPropertyList+Coroutine.h create mode 100644 cokit/cokit/Foundation/NSPropertyList+Coroutine.m create mode 100644 cokit/cokit/Foundation/NSString+Coroutine.h create mode 100644 cokit/cokit/Foundation/NSString+Coroutine.m create mode 100644 cokit/cokit/Foundation/NSURLConnection+Coroutine.h create mode 100644 cokit/cokit/Foundation/NSURLConnection+Coroutine.m create mode 100644 cokit/cokit/Foundation/NSURLSession+Coroutine.h create mode 100644 cokit/cokit/Foundation/NSURLSession+Coroutine.m create mode 100644 cokit/cokit/Foundation/NSUserDefaults+Coroutine.h create mode 100644 cokit/cokit/Foundation/NSUserDefaults+Coroutine.m create mode 100644 cokit/cokit/Foundation/NSXMLParser+Coroutine.h create mode 100644 cokit/cokit/Foundation/NSXMLParser+Coroutine.m create mode 100644 cokit/cokit/Info.plist create mode 100644 cokit/cokit/UIKit/UIAlertController+Coroutine.h create mode 100644 cokit/cokit/UIKit/UIAlertController+Coroutine.m create mode 100644 cokit/cokit/UIKit/UIApplication+Coroutine.h create mode 100644 cokit/cokit/UIKit/UIApplication+Coroutine.m create mode 100644 cokit/cokit/UIKit/UIImage+Coroutine.h create mode 100644 cokit/cokit/UIKit/UIImage+Coroutine.m create mode 100644 cokit/cokit/UIKit/UIImagePickerController+Coroutine.h create mode 100644 cokit/cokit/UIKit/UIImagePickerController+Coroutine.m create mode 100644 cokit/cokit/UIKit/UIVideoEditorController+Coroutine.h create mode 100644 cokit/cokit/UIKit/UIVideoEditorController+Coroutine.m create mode 100644 cokit/cokit/cokit-Prefix.pch create mode 100644 cokit/cokit/cokit.h create mode 100644 cokit/cokit/common/COKitCommon.h create mode 100644 cokit/cokit/common/COKitCommon.m create mode 100644 coobjc.podspec create mode 100644 coobjc.xcodeproj/project.pbxproj create mode 100644 coobjc.xcodeproj/xcshareddata/xcschemes/coobjc.xcscheme create mode 100644 coobjc/Info.plist create mode 100644 coobjc/api/COActor.h create mode 100644 coobjc/api/COActor.m create mode 100644 coobjc/api/COActorChan.h create mode 100644 coobjc/api/COActorChan.m create mode 100644 coobjc/api/COActorCompletable.h create mode 100644 coobjc/api/COActorCompletable.m create mode 100644 coobjc/api/COActorMessage.h create mode 100644 coobjc/api/COActorMessage.m create mode 100644 coobjc/api/COChan.h create mode 100644 coobjc/api/COChan.m create mode 100644 coobjc/api/COCoroutine.h create mode 100644 coobjc/api/COCoroutine.m create mode 100644 coobjc/api/README.md create mode 100644 coobjc/api/coobjc.h create mode 100644 coobjc/common/README.md create mode 100644 coobjc/coobjc-Prefix.pch create mode 100644 coobjc/core/README.md create mode 100644 coobjc/core/coroutine.h create mode 100644 coobjc/core/coroutine.m create mode 100644 coobjc/core/coroutine_context.h create mode 100644 coobjc/core/coroutine_context.m create mode 100644 coobjc/core/coroutine_context.s create mode 100644 coobjc/csp/README.md create mode 100644 coobjc/csp/co_csp.h create mode 100644 coobjc/csp/co_csp.m create mode 100644 coobjc/objc/co_autorelease.h create mode 100644 coobjc/objc/co_autorelease.mm create mode 100644 coobjc/promise/COPromise.h create mode 100644 coobjc/promise/COPromise.m create mode 100644 coobjc/util/README.md create mode 100644 coobjc/util/co_errors.h create mode 100644 coobjc/util/co_errors.m create mode 100644 coobjc/util/co_queue.h create mode 100644 coobjc/util/co_queue.m create mode 100644 coobjc/util/co_queuedebugging_support.h create mode 100644 coobjc/util/co_queuedebugging_support.m create mode 100644 coobjc/util/co_tuple.h create mode 100644 coobjc/util/co_tuple.m create mode 100644 coobjc_icon.png create mode 100644 coswift.podspec create mode 100644 coswift/Chan.swift create mode 100644 coswift/Coroutine.swift create mode 100644 coswift/Errors.swift create mode 100644 coswift/Info.plist create mode 100644 coswift/Promise.swift create mode 100644 coswift/coswift.h create mode 100644 coswift/coswift.swift create mode 100644 docs/arch_design.md create mode 100644 docs/arch_design_zh.md create mode 100644 docs/images/actor_diff.png create mode 100644 docs/images/actor_theory.png create mode 100644 docs/images/channel1.png create mode 100644 docs/images/channel2.png create mode 100644 docs/images/context.png create mode 100644 docs/images/counter_actor.png create mode 100644 docs/images/counter_origin.png create mode 100644 docs/images/framework_arch.png create mode 100644 docs/images/generator_diff.png create mode 100644 docs/images/generator_execute.png create mode 100644 docs/images/scheduler.png create mode 100644 docs/images/xml_co.png create mode 100644 docs/images/xml_origin.png create mode 100644 docs/usage.md create mode 100644 docs/usage_swift.md diff --git a/Examples/coSwiftDemo/Podfile b/Examples/coSwiftDemo/Podfile new file mode 100644 index 0000000..64bee74 --- /dev/null +++ b/Examples/coSwiftDemo/Podfile @@ -0,0 +1,20 @@ +# Uncomment the next line to define a global platform for your project +# platform :ios, '9.0' + +target 'coSwiftDemo' do + # Comment the next line if you're not using Swift and don't want to use dynamic frameworks + use_frameworks! + + pod 'coswift', :path => '../../' + pod 'coobjc', :path => '../../' + # Pods for coSwiftDemo + +end + +target 'coSwiftDemoTests' do + use_frameworks! + + pod 'coswift', :path => '../../' + pod 'coobjc', :path => '../../' + +end diff --git a/Examples/coSwiftDemo/coSwiftDemo.xcodeproj/project.pbxproj b/Examples/coSwiftDemo/coSwiftDemo.xcodeproj/project.pbxproj new file mode 100644 index 0000000..8dcb001 --- /dev/null +++ b/Examples/coSwiftDemo/coSwiftDemo.xcodeproj/project.pbxproj @@ -0,0 +1,583 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + A35C048021E73C1100AC7D6E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A35C047F21E73C1100AC7D6E /* AppDelegate.swift */; }; + A35C048221E73C1100AC7D6E /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A35C048121E73C1100AC7D6E /* ViewController.swift */; }; + A35C048521E73C1100AC7D6E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A35C048321E73C1100AC7D6E /* Main.storyboard */; }; + A35C048721E73C1200AC7D6E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A35C048621E73C1200AC7D6E /* Assets.xcassets */; }; + A35C048A21E73C1200AC7D6E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A35C048821E73C1200AC7D6E /* LaunchScreen.storyboard */; }; + A35C049221E73DB500AC7D6E /* DataService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A35C049121E73DB500AC7D6E /* DataService.swift */; }; + A362488992902709BC2684EF /* Pods_coSwiftDemoTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7777908A066FA35360524D20 /* Pods_coSwiftDemoTests.framework */; }; + A3D67CFD21F086F5009328CC /* coSwiftDemoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3D67CFC21F086F5009328CC /* coSwiftDemoTests.swift */; }; + BE3A5FB7A33301FC4AF57A86 /* Pods_coSwiftDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C730B8DC19A4897343C94B94 /* Pods_coSwiftDemo.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + A3D67CFF21F086F5009328CC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A35C047421E73C1000AC7D6E /* Project object */; + proxyType = 1; + remoteGlobalIDString = A35C047B21E73C1000AC7D6E; + remoteInfo = coSwiftDemo; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 4D8E510158C082A61A38C524 /* Pods-coSwiftDemoTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coSwiftDemoTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-coSwiftDemoTests/Pods-coSwiftDemoTests.release.xcconfig"; sourceTree = ""; }; + 5F8996B9CA571D5B108140A8 /* Pods-coSwiftDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coSwiftDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-coSwiftDemo/Pods-coSwiftDemo.release.xcconfig"; sourceTree = ""; }; + 7777908A066FA35360524D20 /* Pods_coSwiftDemoTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_coSwiftDemoTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8C9FA49292AF76D347B44F9E /* Pods-coSwiftDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coSwiftDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-coSwiftDemo/Pods-coSwiftDemo.debug.xcconfig"; sourceTree = ""; }; + A35C047C21E73C1000AC7D6E /* coSwiftDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = coSwiftDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + A35C047F21E73C1100AC7D6E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + A35C048121E73C1100AC7D6E /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + A35C048421E73C1100AC7D6E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + A35C048621E73C1200AC7D6E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + A35C048921E73C1200AC7D6E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + A35C048B21E73C1200AC7D6E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A35C049121E73DB500AC7D6E /* DataService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataService.swift; sourceTree = ""; }; + A3D67CFA21F086F5009328CC /* coSwiftDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = coSwiftDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + A3D67CFC21F086F5009328CC /* coSwiftDemoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = coSwiftDemoTests.swift; sourceTree = ""; }; + A3D67CFE21F086F5009328CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C730B8DC19A4897343C94B94 /* Pods_coSwiftDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_coSwiftDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C8132E3B863C5D961133D7D6 /* Pods-coSwiftDemoTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coSwiftDemoTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-coSwiftDemoTests/Pods-coSwiftDemoTests.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + A35C047921E73C1000AC7D6E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BE3A5FB7A33301FC4AF57A86 /* Pods_coSwiftDemo.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A3D67CF721F086F5009328CC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A362488992902709BC2684EF /* Pods_coSwiftDemoTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 8360D069563B19A96BCC2E0C /* Frameworks */ = { + isa = PBXGroup; + children = ( + C730B8DC19A4897343C94B94 /* Pods_coSwiftDemo.framework */, + 7777908A066FA35360524D20 /* Pods_coSwiftDemoTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 924EF1C4FDF9C873456CEFE3 /* Pods */ = { + isa = PBXGroup; + children = ( + 8C9FA49292AF76D347B44F9E /* Pods-coSwiftDemo.debug.xcconfig */, + 5F8996B9CA571D5B108140A8 /* Pods-coSwiftDemo.release.xcconfig */, + C8132E3B863C5D961133D7D6 /* Pods-coSwiftDemoTests.debug.xcconfig */, + 4D8E510158C082A61A38C524 /* Pods-coSwiftDemoTests.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + A35C047321E73C1000AC7D6E = { + isa = PBXGroup; + children = ( + A35C047E21E73C1000AC7D6E /* coSwiftDemo */, + A3D67CFB21F086F5009328CC /* coSwiftDemoTests */, + A35C047D21E73C1000AC7D6E /* Products */, + 924EF1C4FDF9C873456CEFE3 /* Pods */, + 8360D069563B19A96BCC2E0C /* Frameworks */, + ); + sourceTree = ""; + }; + A35C047D21E73C1000AC7D6E /* Products */ = { + isa = PBXGroup; + children = ( + A35C047C21E73C1000AC7D6E /* coSwiftDemo.app */, + A3D67CFA21F086F5009328CC /* coSwiftDemoTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + A35C047E21E73C1000AC7D6E /* coSwiftDemo */ = { + isa = PBXGroup; + children = ( + A35C047F21E73C1100AC7D6E /* AppDelegate.swift */, + A35C048121E73C1100AC7D6E /* ViewController.swift */, + A35C048321E73C1100AC7D6E /* Main.storyboard */, + A35C048621E73C1200AC7D6E /* Assets.xcassets */, + A35C048821E73C1200AC7D6E /* LaunchScreen.storyboard */, + A35C048B21E73C1200AC7D6E /* Info.plist */, + A35C049121E73DB500AC7D6E /* DataService.swift */, + ); + path = coSwiftDemo; + sourceTree = ""; + }; + A3D67CFB21F086F5009328CC /* coSwiftDemoTests */ = { + isa = PBXGroup; + children = ( + A3D67CFC21F086F5009328CC /* coSwiftDemoTests.swift */, + A3D67CFE21F086F5009328CC /* Info.plist */, + ); + path = coSwiftDemoTests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + A35C047B21E73C1000AC7D6E /* coSwiftDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = A35C048E21E73C1200AC7D6E /* Build configuration list for PBXNativeTarget "coSwiftDemo" */; + buildPhases = ( + 3CB0D2E8875A209F43DBBCA4 /* [CP] Check Pods Manifest.lock */, + A35C047821E73C1000AC7D6E /* Sources */, + A35C047921E73C1000AC7D6E /* Frameworks */, + A35C047A21E73C1000AC7D6E /* Resources */, + 27DED8ABEB43202F9737DF76 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = coSwiftDemo; + productName = coSwiftDemo; + productReference = A35C047C21E73C1000AC7D6E /* coSwiftDemo.app */; + productType = "com.apple.product-type.application"; + }; + A3D67CF921F086F5009328CC /* coSwiftDemoTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = A3D67D0321F086F5009328CC /* Build configuration list for PBXNativeTarget "coSwiftDemoTests" */; + buildPhases = ( + 02D97CFF49B7598589214995 /* [CP] Check Pods Manifest.lock */, + A3D67CF621F086F5009328CC /* Sources */, + A3D67CF721F086F5009328CC /* Frameworks */, + A3D67CF821F086F5009328CC /* Resources */, + E9C736A3F5BDEE58F667BD5F /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + A3D67D0021F086F5009328CC /* PBXTargetDependency */, + ); + name = coSwiftDemoTests; + productName = coSwiftDemoTests; + productReference = A3D67CFA21F086F5009328CC /* coSwiftDemoTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + A35C047421E73C1000AC7D6E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1010; + LastUpgradeCheck = 1010; + ORGANIZATIONNAME = "刘坤"; + TargetAttributes = { + A35C047B21E73C1000AC7D6E = { + CreatedOnToolsVersion = 10.1; + DevelopmentTeam = 8JWVBB5S2P; + ProvisioningStyle = Automatic; + }; + A3D67CF921F086F5009328CC = { + CreatedOnToolsVersion = 10.1; + ProvisioningStyle = Automatic; + TestTargetID = A35C047B21E73C1000AC7D6E; + }; + }; + }; + buildConfigurationList = A35C047721E73C1000AC7D6E /* Build configuration list for PBXProject "coSwiftDemo" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = A35C047321E73C1000AC7D6E; + productRefGroup = A35C047D21E73C1000AC7D6E /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + A35C047B21E73C1000AC7D6E /* coSwiftDemo */, + A3D67CF921F086F5009328CC /* coSwiftDemoTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + A35C047A21E73C1000AC7D6E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A35C048A21E73C1200AC7D6E /* LaunchScreen.storyboard in Resources */, + A35C048721E73C1200AC7D6E /* Assets.xcassets in Resources */, + A35C048521E73C1100AC7D6E /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A3D67CF821F086F5009328CC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 02D97CFF49B7598589214995 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-coSwiftDemoTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 27DED8ABEB43202F9737DF76 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${SRCROOT}/Pods/Target Support Files/Pods-coSwiftDemo/Pods-coSwiftDemo-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/coobjc-iOS11.0/coobjc.framework", + "${BUILT_PRODUCTS_DIR}/coswift-iOS11.0/coswift.framework", + "${BUILT_PRODUCTS_DIR}/fishhook-iOS11.0/fishhook.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/coobjc.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/coswift.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fishhook.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-coSwiftDemo/Pods-coSwiftDemo-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 3CB0D2E8875A209F43DBBCA4 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-coSwiftDemo-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + E9C736A3F5BDEE58F667BD5F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${SRCROOT}/Pods/Target Support Files/Pods-coSwiftDemoTests/Pods-coSwiftDemoTests-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/coobjc-iOS12.1/coobjc.framework", + "${BUILT_PRODUCTS_DIR}/coswift-iOS12.1/coswift.framework", + "${BUILT_PRODUCTS_DIR}/fishhook-iOS12.1/fishhook.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/coobjc.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/coswift.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fishhook.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-coSwiftDemoTests/Pods-coSwiftDemoTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + A35C047821E73C1000AC7D6E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A35C049221E73DB500AC7D6E /* DataService.swift in Sources */, + A35C048221E73C1100AC7D6E /* ViewController.swift in Sources */, + A35C048021E73C1100AC7D6E /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A3D67CF621F086F5009328CC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A3D67CFD21F086F5009328CC /* coSwiftDemoTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + A3D67D0021F086F5009328CC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A35C047B21E73C1000AC7D6E /* coSwiftDemo */; + targetProxy = A3D67CFF21F086F5009328CC /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + A35C048321E73C1100AC7D6E /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + A35C048421E73C1100AC7D6E /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + A35C048821E73C1200AC7D6E /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + A35C048921E73C1200AC7D6E /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + A35C048C21E73C1200AC7D6E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + A35C048D21E73C1200AC7D6E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + A35C048F21E73C1200AC7D6E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8C9FA49292AF76D347B44F9E /* Pods-coSwiftDemo.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 8JWVBB5S2P; + INFOPLIST_FILE = coSwiftDemo/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.nj.coSwiftDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + A35C049021E73C1200AC7D6E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5F8996B9CA571D5B108140A8 /* Pods-coSwiftDemo.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 8JWVBB5S2P; + INFOPLIST_FILE = coSwiftDemo/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.nj.coSwiftDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + A3D67D0121F086F5009328CC /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C8132E3B863C5D961133D7D6 /* Pods-coSwiftDemoTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = coSwiftDemoTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.nj.coSwiftDemoTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/coSwiftDemo.app/coSwiftDemo"; + }; + name = Debug; + }; + A3D67D0221F086F5009328CC /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4D8E510158C082A61A38C524 /* Pods-coSwiftDemoTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = coSwiftDemoTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.nj.coSwiftDemoTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/coSwiftDemo.app/coSwiftDemo"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + A35C047721E73C1000AC7D6E /* Build configuration list for PBXProject "coSwiftDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A35C048C21E73C1200AC7D6E /* Debug */, + A35C048D21E73C1200AC7D6E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A35C048E21E73C1200AC7D6E /* Build configuration list for PBXNativeTarget "coSwiftDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A35C048F21E73C1200AC7D6E /* Debug */, + A35C049021E73C1200AC7D6E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A3D67D0321F086F5009328CC /* Build configuration list for PBXNativeTarget "coSwiftDemoTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A3D67D0121F086F5009328CC /* Debug */, + A3D67D0221F086F5009328CC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = A35C047421E73C1000AC7D6E /* Project object */; +} diff --git a/Examples/coSwiftDemo/coSwiftDemo.xcodeproj/xcshareddata/xcschemes/coSwiftDemo.xcscheme b/Examples/coSwiftDemo/coSwiftDemo.xcodeproj/xcshareddata/xcschemes/coSwiftDemo.xcscheme new file mode 100644 index 0000000..fe2665d --- /dev/null +++ b/Examples/coSwiftDemo/coSwiftDemo.xcodeproj/xcshareddata/xcschemes/coSwiftDemo.xcscheme @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coSwiftDemo/coSwiftDemo/AppDelegate.swift b/Examples/coSwiftDemo/coSwiftDemo/AppDelegate.swift new file mode 100644 index 0000000..f08bd63 --- /dev/null +++ b/Examples/coSwiftDemo/coSwiftDemo/AppDelegate.swift @@ -0,0 +1,56 @@ +// +// AppDelegate.swift +// coSwiftDemo +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git a/Examples/coSwiftDemo/coSwiftDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/Examples/coSwiftDemo/coSwiftDemo/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ b/Examples/coSwiftDemo/coSwiftDemo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Examples/coSwiftDemo/coSwiftDemo/Assets.xcassets/Contents.json b/Examples/coSwiftDemo/coSwiftDemo/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Examples/coSwiftDemo/coSwiftDemo/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Examples/coSwiftDemo/coSwiftDemo/Base.lproj/LaunchScreen.storyboard b/Examples/coSwiftDemo/coSwiftDemo/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..bfa3612 --- /dev/null +++ b/Examples/coSwiftDemo/coSwiftDemo/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coSwiftDemo/coSwiftDemo/Base.lproj/Main.storyboard b/Examples/coSwiftDemo/coSwiftDemo/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f1bcf38 --- /dev/null +++ b/Examples/coSwiftDemo/coSwiftDemo/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coSwiftDemo/coSwiftDemo/DataService.swift b/Examples/coSwiftDemo/coSwiftDemo/DataService.swift new file mode 100644 index 0000000..24adec3 --- /dev/null +++ b/Examples/coSwiftDemo/coSwiftDemo/DataService.swift @@ -0,0 +1,172 @@ +// +// DataService.swift +// coSwiftDemo +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 Foundation +import coswift +import CoreLocation + +public class RequestResult { + var data: Data? + var response: URLResponse? + + init(data: Data?, response: URLResponse?) { + self.data = data + self.response = response + } +} + +func co_fetchSomethingAsynchronous() -> Promise { + + let promise = Promise(constructor: { (fulfill, reject) in + + let data: Data? = nil + let error: Error? = nil + + // fetch the data + + if error != nil { + reject(error!) + } else { + fulfill(data) + } + }) + + promise.onCancel { (promiseObj) in + + } + + return promise +} + +let someQueue = DispatchQueue(label: "aa") + +func co_fetchSomething() -> Chan { + + let chan = Chan() + + someQueue.async { + // fetch operations + chan.send_nonblock(val: "the result") + } + return chan +} + +func test() { + + co_launch { + let resultStr = try await(channel: co_fetchSomething()) + print("result: \(resultStr)") + } + + co_launch { + let result = try await(promise: co_fetchSomethingAsynchronous()) + switch result { + case .fulfilled(let data): + print("data: \(String(describing: data))") + break + case .rejected(let error): + print("error: \(error)") + } + } +} + +extension URLSession { + + public func dataTask(with url: URL) -> Promise<(Data?, URLResponse?)> { + + let promise = Promise<(Data?, URLResponse?)>() + + let task = self.dataTask(with: url) { (data, response, error) in + + if error != nil { + promise.reject(error: error!) + } else { + promise.fulfill(value: (data, response)) + } + } + + promise.onCancel { [weak task] (pro) in + task?.cancel() + } + task.resume() + return promise + } +} + + +public class DataService { + + fileprivate let urlPath = "http://www.baidu.com" + + public static let shared = DataService(); + + + public func fetchWeatherData() throws -> String { + + let sessionConfig = URLSessionConfiguration.default + let session = URLSession(configuration: sessionConfig) + + let location = CLLocation(latitude: 0, longitude: 0) + guard var components = URLComponents(string:urlPath) else { + throw NSError(domain: "DataService", code: -1, userInfo: [NSLocalizedDescriptionKey : "Invalid URL."]) + + } + + // get appId from Info.plist + + let latitude = String(location.coordinate.latitude) + let longitude = String(location.coordinate.longitude) + + components.queryItems = [URLQueryItem(name:"lat", value:latitude), + URLQueryItem(name:"lon", value:longitude), + URLQueryItem(name:"appid", value:"796b6557f59a77fa02db756a30803b95")] + + let url = components.url + + var ret = "" + + + let result = try await (closure: { + session.dataTask(with: url!) + }) + + switch result { + case .fulfilled(let (data, response)): + + if let data1 = data { + + if let httpResponse = response as? HTTPURLResponse { + print("response: \(httpResponse)") + } + if let str = String(data: data1, encoding: String.Encoding.utf8) { + ret = str + print("responseString: \(str)") + } + } + + case .rejected(let error): + + print("error: \(error)") + } + + return ret + } + + + +} diff --git a/Examples/coSwiftDemo/coSwiftDemo/Info.plist b/Examples/coSwiftDemo/coSwiftDemo/Info.plist new file mode 100644 index 0000000..7ffc1c1 --- /dev/null +++ b/Examples/coSwiftDemo/coSwiftDemo/Info.plist @@ -0,0 +1,50 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + + diff --git a/Examples/coSwiftDemo/coSwiftDemo/ViewController.swift b/Examples/coSwiftDemo/coSwiftDemo/ViewController.swift new file mode 100644 index 0000000..3b1c291 --- /dev/null +++ b/Examples/coSwiftDemo/coSwiftDemo/ViewController.swift @@ -0,0 +1,45 @@ +// +// ViewController.swift +// coSwiftDemo +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 UIKit +import coswift + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + + co_launch { + let str = try DataService.shared.fetchWeatherData() + print("\(str)") + } + + let queue = DispatchQueue(label: "MyQueue") + co_launch(queue: queue) { + print("hehe") + } + + co_launch(stackSize: 128 * 1024) { + print("haha") + } + } + + +} + diff --git a/Examples/coSwiftDemo/coSwiftDemoTests/Info.plist b/Examples/coSwiftDemo/coSwiftDemoTests/Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/Examples/coSwiftDemo/coSwiftDemoTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/coSwiftDemo/coSwiftDemoTests/coSwiftDemoTests.swift b/Examples/coSwiftDemo/coSwiftDemoTests/coSwiftDemoTests.swift new file mode 100644 index 0000000..eee28c4 --- /dev/null +++ b/Examples/coSwiftDemo/coSwiftDemoTests/coSwiftDemoTests.swift @@ -0,0 +1,44 @@ +// +// coSwiftDemoTests.swift +// coSwiftDemoTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 XCTest +import coswift + +class coSwiftDemoTests: XCTestCase { + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/Examples/coobjcBaseExample/Podfile b/Examples/coobjcBaseExample/Podfile new file mode 100644 index 0000000..62af8bd --- /dev/null +++ b/Examples/coobjcBaseExample/Podfile @@ -0,0 +1,18 @@ + + +platform :ios, '8.0' + +target 'coobjcBaseExample' do + +pod 'coobjc', :path => '../../' + +end + +target 'coobjcBaseExampleTests' do + + pod 'coobjc', :path => '../../' + + pod 'Specta', '~> 1.0' + pod 'Expecta', '~> 1.0' # expecta matchers + pod 'OCMock', '~> 2.2' # OCMock +end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample.xcodeproj/project.pbxproj b/Examples/coobjcBaseExample/coobjcBaseExample.xcodeproj/project.pbxproj new file mode 100644 index 0000000..4944688 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample.xcodeproj/project.pbxproj @@ -0,0 +1,1103 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXBuildFile section */ + 1811EEC821B0D8D800BC0A52 /* DataService.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EEC721B0D8D800BC0A52 /* DataService.m */; }; + 1811EF1721B0E22A00BC0A52 /* KMMovie.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EECB21B0E22A00BC0A52 /* KMMovie.m */; }; + 1811EF1821B0E22A00BC0A52 /* KMSimilarMoviesSourceJsonPattern.json in Resources */ = {isa = PBXBuildFile; fileRef = 1811EECF21B0E22A00BC0A52 /* KMSimilarMoviesSourceJsonPattern.json */; }; + 1811EF1921B0E22A00BC0A52 /* KMSimilarMoviesSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EED121B0E22A00BC0A52 /* KMSimilarMoviesSource.m */; }; + 1811EF1A21B0E22A00BC0A52 /* KMSourceConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EED321B0E22A00BC0A52 /* KMSourceConfig.m */; }; + 1811EF1B21B0E22A00BC0A52 /* KMDiscoverSourceJsonPattern.json in Resources */ = {isa = PBXBuildFile; fileRef = 1811EED621B0E22A00BC0A52 /* KMDiscoverSourceJsonPattern.json */; }; + 1811EF1C21B0E22A00BC0A52 /* KMDiscoverSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EED721B0E22A00BC0A52 /* KMDiscoverSource.m */; }; + 1811EF1D21B0E22A00BC0A52 /* KMMovieDetailsSourceJsonPattern.json in Resources */ = {isa = PBXBuildFile; fileRef = 1811EEDA21B0E22A00BC0A52 /* KMMovieDetailsSourceJsonPattern.json */; }; + 1811EF1E21B0E22A00BC0A52 /* KMMovieDetailsSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EEDB21B0E22A00BC0A52 /* KMMovieDetailsSource.m */; }; + 1811EF1F21B0E22A00BC0A52 /* KMBaseSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EEDC21B0E22A00BC0A52 /* KMBaseSource.m */; }; + 1811EF2021B0E22A00BC0A52 /* KMSimilarMoviesStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1811EEDF21B0E22A00BC0A52 /* KMSimilarMoviesStoryboard.storyboard */; }; + 1811EF2121B0E22A00BC0A52 /* KMDiscoverStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1811EEE021B0E22A00BC0A52 /* KMDiscoverStoryboard.storyboard */; }; + 1811EF2221B0E22A00BC0A52 /* KMMovieDetailsStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1811EEE121B0E22A00BC0A52 /* KMMovieDetailsStoryboard.storyboard */; }; + 1811EF2321B0E22A00BC0A52 /* KMActivityIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EEE421B0E22A00BC0A52 /* KMActivityIndicator.m */; }; + 1811EF2421B0E22A00BC0A52 /* KMSimilarMoviesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EEE921B0E22A00BC0A52 /* KMSimilarMoviesViewController.m */; }; + 1811EF2521B0E22A00BC0A52 /* KMMoviePosterCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EEEA21B0E22A00BC0A52 /* KMMoviePosterCell.m */; }; + 1811EF2621B0E22A00BC0A52 /* KMDiscoverListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EEEE21B0E22A00BC0A52 /* KMDiscoverListCell.m */; }; + 1811EF2721B0E22A00BC0A52 /* KMDiscoverListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EEEF21B0E22A00BC0A52 /* KMDiscoverListViewController.m */; }; + 1811EF2821B0E22A00BC0A52 /* KMComposeCommentCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1811EEF321B0E22A00BC0A52 /* KMComposeCommentCell.xib */; }; + 1811EF2921B0E22A00BC0A52 /* KMMovieDetailsCommentsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EEF421B0E22A00BC0A52 /* KMMovieDetailsCommentsCell.m */; }; + 1811EF2A21B0E22A00BC0A52 /* KMComposeCommentCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EEF621B0E22A00BC0A52 /* KMComposeCommentCell.m */; }; + 1811EF2B21B0E22A00BC0A52 /* KMMovieDetailsPopularityCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EEF721B0E22A00BC0A52 /* KMMovieDetailsPopularityCell.m */; }; + 1811EF2C21B0E22A00BC0A52 /* KMMovieDetailsViewAllCommentsCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1811EEF821B0E22A00BC0A52 /* KMMovieDetailsViewAllCommentsCell.xib */; }; + 1811EF2D21B0E22A00BC0A52 /* KMMovieDetailsDescriptionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EEFB21B0E22A00BC0A52 /* KMMovieDetailsDescriptionCell.m */; }; + 1811EF2E21B0E22A00BC0A52 /* KMMovieDetailsViewAllCommentsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EEFC21B0E22A00BC0A52 /* KMMovieDetailsViewAllCommentsCell.m */; }; + 1811EF2F21B0E22A00BC0A52 /* KMMovieDetailsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EEFD21B0E22A00BC0A52 /* KMMovieDetailsCell.m */; }; + 1811EF3021B0E22A00BC0A52 /* KMMovieDetailsCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1811EEFE21B0E22A00BC0A52 /* KMMovieDetailsCell.xib */; }; + 1811EF3121B0E22A00BC0A52 /* KMSimilarMoviesCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EEFF21B0E22A00BC0A52 /* KMSimilarMoviesCollectionViewCell.m */; }; + 1811EF3221B0E22A00BC0A52 /* KMMovieDetailsCommentsCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1811EF0021B0E22A00BC0A52 /* KMMovieDetailsCommentsCell.xib */; }; + 1811EF3321B0E22A00BC0A52 /* KMMovieDetailsSimilarMoviesCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1811EF0221B0E22A00BC0A52 /* KMMovieDetailsSimilarMoviesCell.xib */; }; + 1811EF3421B0E22A00BC0A52 /* KMMovieDetailsDescriptionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1811EF0521B0E22A00BC0A52 /* KMMovieDetailsDescriptionCell.xib */; }; + 1811EF3521B0E22A00BC0A52 /* KMMovieDetailsSimilarMoviesCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF0721B0E22A00BC0A52 /* KMMovieDetailsSimilarMoviesCell.m */; }; + 1811EF3621B0E22A00BC0A52 /* KMSimilarMoviesCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1811EF0821B0E22A00BC0A52 /* KMSimilarMoviesCollectionViewCell.xib */; }; + 1811EF3721B0E22B00BC0A52 /* KMMovieDetailsPopularityCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1811EF0A21B0E22A00BC0A52 /* KMMovieDetailsPopularityCell.xib */; }; + 1811EF3821B0E22B00BC0A52 /* KMMovieDetailsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF0C21B0E22A00BC0A52 /* KMMovieDetailsViewController.m */; }; + 1811EF3921B0E22B00BC0A52 /* KMIndexedCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF0F21B0E22A00BC0A52 /* KMIndexedCollectionView.m */; }; + 1811EF3A21B0E22B00BC0A52 /* KMScrollingHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF1221B0E22A00BC0A52 /* KMScrollingHeaderView.m */; }; + 1811EF3B21B0E22B00BC0A52 /* KMSourceConfig.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1811EF1621B0E22A00BC0A52 /* KMSourceConfig.plist */; }; + 1811EF5521B0E23300BC0A52 /* KMGillSansLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF3F21B0E23200BC0A52 /* KMGillSansLabel.m */; }; + 1811EF5621B0E23300BC0A52 /* KMStoryBoardUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF4021B0E23200BC0A52 /* KMStoryBoardUtilities.m */; }; + 1811EF5721B0E23300BC0A52 /* KMNetworkLoadingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF4121B0E23200BC0A52 /* KMNetworkLoadingViewController.m */; }; + 1811EF5821B0E23300BC0A52 /* NSArray+SafeValues.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF4821B0E23300BC0A52 /* NSArray+SafeValues.m */; }; + 1811EF5921B0E23300BC0A52 /* NSDictionary+SafeValues.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF4921B0E23300BC0A52 /* NSDictionary+SafeValues.m */; }; + 1811EF5A21B0E23300BC0A52 /* NSString+UrlEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF4B21B0E23300BC0A52 /* NSString+UrlEncoding.m */; }; + 1811EF5B21B0E23300BC0A52 /* UIFont+GillSansFonts.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF4C21B0E23300BC0A52 /* UIFont+GillSansFonts.m */; }; + 1811EF5C21B0E23300BC0A52 /* NSString+MD5.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF4D21B0E23300BC0A52 /* NSString+MD5.m */; }; + 1811EF5D21B0E23300BC0A52 /* NSURL+Parameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF4E21B0E23300BC0A52 /* NSURL+Parameters.m */; }; + 1811EF5E21B0E23300BC0A52 /* NSBundle+Loader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF4F21B0E23300BC0A52 /* NSBundle+Loader.m */; }; + 1811EF5F21B0E23300BC0A52 /* KMButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF5421B0E23300BC0A52 /* KMButton.m */; }; + 1811EF6221B0E2A800BC0A52 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 1811EF6121B0E2A800BC0A52 /* UIImageView+WebCache.m */; }; + 1820749E21C0AA65001A5021 /* coobjcAutoreleaseTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1820749D21C0AA65001A5021 /* coobjcAutoreleaseTests.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 182074A021C0B235001A5021 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 1820749F21C0B235001A5021 /* libc++.tbd */; }; + 182074A221C0DB8F001A5021 /* coobjcAutoreleaseArcTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 182074A121C0DB8F001A5021 /* coobjcAutoreleaseArcTests.m */; }; + 1827C599219BC9C10004CE59 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1827C598219BC9C10004CE59 /* AppDelegate.m */; }; + 1827C59C219BC9C10004CE59 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1827C59B219BC9C10004CE59 /* ViewController.m */; }; + 1827C59F219BC9C10004CE59 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1827C59D219BC9C10004CE59 /* Main.storyboard */; }; + 1827C5A1219BC9C30004CE59 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1827C5A0219BC9C30004CE59 /* Assets.xcassets */; }; + 1827C5A4219BC9C30004CE59 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1827C5A2219BC9C30004CE59 /* LaunchScreen.storyboard */; }; + 1827C5A7219BC9C30004CE59 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 1827C5A6219BC9C30004CE59 /* main.m */; }; + 1827C5B1219BC9C30004CE59 /* coobjcBaseExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1827C5B0219BC9C30004CE59 /* coobjcBaseExampleTests.m */; }; + 1827C5BC219BCBD60004CE59 /* coobjcCreateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1827C5BB219BCBD50004CE59 /* coobjcCreateTests.m */; }; + 1827C5BE219BF6770004CE59 /* coobjcCancelTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1827C5BD219BF6770004CE59 /* coobjcCancelTests.m */; }; + 1827C5C0219BF8F70004CE59 /* coobjcBenchmarkTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1827C5BF219BF8F70004CE59 /* coobjcBenchmarkTests.m */; }; + 1827C5C3219BFB350004CE59 /* coobjcCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = 1827C5C2219BFB350004CE59 /* coobjcCommon.m */; }; + 1827C5C5219C1E820004CE59 /* coobjcSequenceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1827C5C4219C1E820004CE59 /* coobjcSequenceTests.m */; }; + 1827C5C7219C27240004CE59 /* coobjcDelayTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1827C5C6219C27240004CE59 /* coobjcDelayTests.m */; }; + 183F724121C748050041C32B /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 1820749F21C0B235001A5021 /* libc++.tbd */; }; + 18BC88C321BDFE6200EF3D9B /* coobjcTupleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 18BC88C221BDFE6200EF3D9B /* coobjcTupleTests.m */; }; + 18E74C1F21AE96EF003A9065 /* coobjcActorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E74C1E21AE96EF003A9065 /* coobjcActorTests.m */; }; + 54F9CDED56D338C0AB04F320 /* libPods-coobjcBaseExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AF09B7533F1C4E15CC4098A /* libPods-coobjcBaseExampleTests.a */; }; + A3E839FF21AB9DC20096A7E4 /* coobjcChannelTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E839FE21AB9DC20096A7E4 /* coobjcChannelTests.m */; }; + A3FAA92721A2F7C400605F27 /* coobjcPromiseTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A3FAA92621A2F7C400605F27 /* coobjcPromiseTests.m */; }; + CBEB5330C28218C41A7B36CE /* libPods-coobjcBaseExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DBFDC51DEA9DC794BE4FDF3 /* libPods-coobjcBaseExample.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 1827C5AD219BC9C30004CE59 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1827C58C219BC9C00004CE59 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1827C593219BC9C10004CE59; + remoteInfo = coobjcBaseExample; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 066A2B48882533B4E11B8C6A /* Pods-coobjcBaseExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coobjcBaseExample.debug.xcconfig"; path = "Pods/Target Support Files/Pods-coobjcBaseExample/Pods-coobjcBaseExample.debug.xcconfig"; sourceTree = ""; }; + 1811EEC621B0D8D800BC0A52 /* DataService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DataService.h; sourceTree = ""; }; + 1811EEC721B0D8D800BC0A52 /* DataService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DataService.m; sourceTree = ""; }; + 1811EECA21B0E22A00BC0A52 /* KMMovie.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMMovie.h; sourceTree = ""; }; + 1811EECB21B0E22A00BC0A52 /* KMMovie.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMMovie.m; sourceTree = ""; }; + 1811EECD21B0E22A00BC0A52 /* KMSourceConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMSourceConfig.h; sourceTree = ""; }; + 1811EECF21B0E22A00BC0A52 /* KMSimilarMoviesSourceJsonPattern.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = KMSimilarMoviesSourceJsonPattern.json; sourceTree = ""; }; + 1811EED021B0E22A00BC0A52 /* KMSimilarMoviesSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMSimilarMoviesSource.h; sourceTree = ""; }; + 1811EED121B0E22A00BC0A52 /* KMSimilarMoviesSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMSimilarMoviesSource.m; sourceTree = ""; }; + 1811EED221B0E22A00BC0A52 /* KMBaseSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMBaseSource.h; sourceTree = ""; }; + 1811EED321B0E22A00BC0A52 /* KMSourceConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMSourceConfig.m; sourceTree = ""; }; + 1811EED521B0E22A00BC0A52 /* KMDiscoverSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMDiscoverSource.h; sourceTree = ""; }; + 1811EED621B0E22A00BC0A52 /* KMDiscoverSourceJsonPattern.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = KMDiscoverSourceJsonPattern.json; sourceTree = ""; }; + 1811EED721B0E22A00BC0A52 /* KMDiscoverSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMDiscoverSource.m; sourceTree = ""; }; + 1811EED921B0E22A00BC0A52 /* KMMovieDetailsSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMMovieDetailsSource.h; sourceTree = ""; }; + 1811EEDA21B0E22A00BC0A52 /* KMMovieDetailsSourceJsonPattern.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = KMMovieDetailsSourceJsonPattern.json; sourceTree = ""; }; + 1811EEDB21B0E22A00BC0A52 /* KMMovieDetailsSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMMovieDetailsSource.m; sourceTree = ""; }; + 1811EEDC21B0E22A00BC0A52 /* KMBaseSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMBaseSource.m; sourceTree = ""; }; + 1811EEDF21B0E22A00BC0A52 /* KMSimilarMoviesStoryboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = KMSimilarMoviesStoryboard.storyboard; sourceTree = ""; }; + 1811EEE021B0E22A00BC0A52 /* KMDiscoverStoryboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = KMDiscoverStoryboard.storyboard; sourceTree = ""; }; + 1811EEE121B0E22A00BC0A52 /* KMMovieDetailsStoryboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = KMMovieDetailsStoryboard.storyboard; sourceTree = ""; }; + 1811EEE321B0E22A00BC0A52 /* KMActivityIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMActivityIndicator.h; sourceTree = ""; }; + 1811EEE421B0E22A00BC0A52 /* KMActivityIndicator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMActivityIndicator.m; sourceTree = ""; }; + 1811EEE721B0E22A00BC0A52 /* KMSimilarMoviesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMSimilarMoviesViewController.h; sourceTree = ""; }; + 1811EEE821B0E22A00BC0A52 /* KMMoviePosterCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMMoviePosterCell.h; sourceTree = ""; }; + 1811EEE921B0E22A00BC0A52 /* KMSimilarMoviesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMSimilarMoviesViewController.m; sourceTree = ""; }; + 1811EEEA21B0E22A00BC0A52 /* KMMoviePosterCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMMoviePosterCell.m; sourceTree = ""; }; + 1811EEEC21B0E22A00BC0A52 /* KMDiscoverListCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMDiscoverListCell.h; sourceTree = ""; }; + 1811EEED21B0E22A00BC0A52 /* KMDiscoverListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMDiscoverListViewController.h; sourceTree = ""; }; + 1811EEEE21B0E22A00BC0A52 /* KMDiscoverListCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMDiscoverListCell.m; sourceTree = ""; }; + 1811EEEF21B0E22A00BC0A52 /* KMDiscoverListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMDiscoverListViewController.m; sourceTree = ""; }; + 1811EEF121B0E22A00BC0A52 /* KMMovieDetailsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMMovieDetailsViewController.h; sourceTree = ""; }; + 1811EEF321B0E22A00BC0A52 /* KMComposeCommentCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMComposeCommentCell.xib; sourceTree = ""; }; + 1811EEF421B0E22A00BC0A52 /* KMMovieDetailsCommentsCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMMovieDetailsCommentsCell.m; sourceTree = ""; }; + 1811EEF521B0E22A00BC0A52 /* KMSimilarMoviesCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMSimilarMoviesCollectionViewCell.h; sourceTree = ""; }; + 1811EEF621B0E22A00BC0A52 /* KMComposeCommentCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMComposeCommentCell.m; sourceTree = ""; }; + 1811EEF721B0E22A00BC0A52 /* KMMovieDetailsPopularityCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMMovieDetailsPopularityCell.m; sourceTree = ""; }; + 1811EEF821B0E22A00BC0A52 /* KMMovieDetailsViewAllCommentsCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMMovieDetailsViewAllCommentsCell.xib; sourceTree = ""; }; + 1811EEF921B0E22A00BC0A52 /* KMMovieDetailsCells.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMMovieDetailsCells.h; sourceTree = ""; }; + 1811EEFA21B0E22A00BC0A52 /* KMMovieDetailsSimilarMoviesCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMMovieDetailsSimilarMoviesCell.h; sourceTree = ""; }; + 1811EEFB21B0E22A00BC0A52 /* KMMovieDetailsDescriptionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMMovieDetailsDescriptionCell.m; sourceTree = ""; }; + 1811EEFC21B0E22A00BC0A52 /* KMMovieDetailsViewAllCommentsCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMMovieDetailsViewAllCommentsCell.m; sourceTree = ""; }; + 1811EEFD21B0E22A00BC0A52 /* KMMovieDetailsCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMMovieDetailsCell.m; sourceTree = ""; }; + 1811EEFE21B0E22A00BC0A52 /* KMMovieDetailsCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMMovieDetailsCell.xib; sourceTree = ""; }; + 1811EEFF21B0E22A00BC0A52 /* KMSimilarMoviesCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMSimilarMoviesCollectionViewCell.m; sourceTree = ""; }; + 1811EF0021B0E22A00BC0A52 /* KMMovieDetailsCommentsCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMMovieDetailsCommentsCell.xib; sourceTree = ""; }; + 1811EF0121B0E22A00BC0A52 /* KMMovieDetailsCommentsCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMMovieDetailsCommentsCell.h; sourceTree = ""; }; + 1811EF0221B0E22A00BC0A52 /* KMMovieDetailsSimilarMoviesCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMMovieDetailsSimilarMoviesCell.xib; sourceTree = ""; }; + 1811EF0321B0E22A00BC0A52 /* KMMovieDetailsPopularityCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMMovieDetailsPopularityCell.h; sourceTree = ""; }; + 1811EF0421B0E22A00BC0A52 /* KMComposeCommentCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMComposeCommentCell.h; sourceTree = ""; }; + 1811EF0521B0E22A00BC0A52 /* KMMovieDetailsDescriptionCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMMovieDetailsDescriptionCell.xib; sourceTree = ""; }; + 1811EF0621B0E22A00BC0A52 /* KMMovieDetailsDescriptionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMMovieDetailsDescriptionCell.h; sourceTree = ""; }; + 1811EF0721B0E22A00BC0A52 /* KMMovieDetailsSimilarMoviesCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMMovieDetailsSimilarMoviesCell.m; sourceTree = ""; }; + 1811EF0821B0E22A00BC0A52 /* KMSimilarMoviesCollectionViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMSimilarMoviesCollectionViewCell.xib; sourceTree = ""; }; + 1811EF0921B0E22A00BC0A52 /* KMMovieDetailsCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMMovieDetailsCell.h; sourceTree = ""; }; + 1811EF0A21B0E22A00BC0A52 /* KMMovieDetailsPopularityCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMMovieDetailsPopularityCell.xib; sourceTree = ""; }; + 1811EF0B21B0E22A00BC0A52 /* KMMovieDetailsViewAllCommentsCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMMovieDetailsViewAllCommentsCell.h; sourceTree = ""; }; + 1811EF0C21B0E22A00BC0A52 /* KMMovieDetailsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMMovieDetailsViewController.m; sourceTree = ""; }; + 1811EF0E21B0E22A00BC0A52 /* KMIndexedCollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMIndexedCollectionView.h; sourceTree = ""; }; + 1811EF0F21B0E22A00BC0A52 /* KMIndexedCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMIndexedCollectionView.m; sourceTree = ""; }; + 1811EF1121B0E22A00BC0A52 /* KMScrollingHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMScrollingHeaderView.h; sourceTree = ""; }; + 1811EF1221B0E22A00BC0A52 /* KMScrollingHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMScrollingHeaderView.m; sourceTree = ""; }; + 1811EF1621B0E22A00BC0A52 /* KMSourceConfig.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = KMSourceConfig.plist; sourceTree = ""; }; + 1811EF3C21B0E23200BC0A52 /* KMStoryBoardUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMStoryBoardUtilities.h; sourceTree = ""; }; + 1811EF3E21B0E23200BC0A52 /* KMGillSansLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMGillSansLabel.h; sourceTree = ""; }; + 1811EF3F21B0E23200BC0A52 /* KMGillSansLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMGillSansLabel.m; sourceTree = ""; }; + 1811EF4021B0E23200BC0A52 /* KMStoryBoardUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMStoryBoardUtilities.m; sourceTree = ""; }; + 1811EF4121B0E23200BC0A52 /* KMNetworkLoadingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMNetworkLoadingViewController.m; sourceTree = ""; }; + 1811EF4221B0E23300BC0A52 /* KMNetworkLoadingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMNetworkLoadingViewController.h; sourceTree = ""; }; + 1811EF4421B0E23300BC0A52 /* UIFont+GillSansFonts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIFont+GillSansFonts.h"; sourceTree = ""; }; + 1811EF4521B0E23300BC0A52 /* NSString+UrlEncoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+UrlEncoding.h"; sourceTree = ""; }; + 1811EF4621B0E23300BC0A52 /* NSURL+Parameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURL+Parameters.h"; sourceTree = ""; }; + 1811EF4721B0E23300BC0A52 /* NSString+MD5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MD5.h"; sourceTree = ""; }; + 1811EF4821B0E23300BC0A52 /* NSArray+SafeValues.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+SafeValues.m"; sourceTree = ""; }; + 1811EF4921B0E23300BC0A52 /* NSDictionary+SafeValues.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+SafeValues.m"; sourceTree = ""; }; + 1811EF4A21B0E23300BC0A52 /* NSBundle+Loader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+Loader.h"; sourceTree = ""; }; + 1811EF4B21B0E23300BC0A52 /* NSString+UrlEncoding.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+UrlEncoding.m"; sourceTree = ""; }; + 1811EF4C21B0E23300BC0A52 /* UIFont+GillSansFonts.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIFont+GillSansFonts.m"; sourceTree = ""; }; + 1811EF4D21B0E23300BC0A52 /* NSString+MD5.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MD5.m"; sourceTree = ""; }; + 1811EF4E21B0E23300BC0A52 /* NSURL+Parameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURL+Parameters.m"; sourceTree = ""; }; + 1811EF4F21B0E23300BC0A52 /* NSBundle+Loader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+Loader.m"; sourceTree = ""; }; + 1811EF5021B0E23300BC0A52 /* NSDictionary+SafeValues.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+SafeValues.h"; sourceTree = ""; }; + 1811EF5121B0E23300BC0A52 /* NSArray+SafeValues.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+SafeValues.h"; sourceTree = ""; }; + 1811EF5321B0E23300BC0A52 /* KMButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMButton.h; sourceTree = ""; }; + 1811EF5421B0E23300BC0A52 /* KMButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMButton.m; sourceTree = ""; }; + 1811EF6021B0E2A800BC0A52 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImageView+WebCache.h"; sourceTree = ""; }; + 1811EF6121B0E2A800BC0A52 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+WebCache.m"; sourceTree = ""; }; + 1820749D21C0AA65001A5021 /* coobjcAutoreleaseTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coobjcAutoreleaseTests.m; sourceTree = ""; }; + 1820749F21C0B235001A5021 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; + 182074A121C0DB8F001A5021 /* coobjcAutoreleaseArcTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coobjcAutoreleaseArcTests.m; sourceTree = ""; }; + 1827C594219BC9C10004CE59 /* coobjcBaseExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = coobjcBaseExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 1827C597219BC9C10004CE59 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 1827C598219BC9C10004CE59 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 1827C59A219BC9C10004CE59 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 1827C59B219BC9C10004CE59 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 1827C59E219BC9C10004CE59 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 1827C5A0219BC9C30004CE59 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 1827C5A3219BC9C30004CE59 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 1827C5A5219BC9C30004CE59 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 1827C5A6219BC9C30004CE59 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 1827C5AC219BC9C30004CE59 /* coobjcBaseExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = coobjcBaseExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 1827C5B0219BC9C30004CE59 /* coobjcBaseExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coobjcBaseExampleTests.m; sourceTree = ""; }; + 1827C5B2219BC9C30004CE59 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 1827C5BB219BCBD50004CE59 /* coobjcCreateTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coobjcCreateTests.m; sourceTree = ""; }; + 1827C5BD219BF6770004CE59 /* coobjcCancelTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coobjcCancelTests.m; sourceTree = ""; }; + 1827C5BF219BF8F70004CE59 /* coobjcBenchmarkTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coobjcBenchmarkTests.m; sourceTree = ""; }; + 1827C5C1219BFB350004CE59 /* coobjcCommon.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = coobjcCommon.h; sourceTree = ""; }; + 1827C5C2219BFB350004CE59 /* coobjcCommon.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coobjcCommon.m; sourceTree = ""; }; + 1827C5C4219C1E820004CE59 /* coobjcSequenceTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coobjcSequenceTests.m; sourceTree = ""; }; + 1827C5C6219C27240004CE59 /* coobjcDelayTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coobjcDelayTests.m; sourceTree = ""; }; + 18BC88C221BDFE6200EF3D9B /* coobjcTupleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coobjcTupleTests.m; sourceTree = ""; }; + 18E74C1E21AE96EF003A9065 /* coobjcActorTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coobjcActorTests.m; sourceTree = ""; }; + 236D98A1BE2319FA437A7584 /* Pods-coobjcBaseExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coobjcBaseExample.release.xcconfig"; path = "Pods/Target Support Files/Pods-coobjcBaseExample/Pods-coobjcBaseExample.release.xcconfig"; sourceTree = ""; }; + 4AF09B7533F1C4E15CC4098A /* libPods-coobjcBaseExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-coobjcBaseExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4DBFDC51DEA9DC794BE4FDF3 /* libPods-coobjcBaseExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-coobjcBaseExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + A3E839FE21AB9DC20096A7E4 /* coobjcChannelTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coobjcChannelTests.m; sourceTree = ""; }; + A3FAA92621A2F7C400605F27 /* coobjcPromiseTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coobjcPromiseTests.m; sourceTree = ""; }; + DE44BF03409C3FA4753A41D7 /* Pods-coobjcBaseExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coobjcBaseExampleTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-coobjcBaseExampleTests/Pods-coobjcBaseExampleTests.debug.xcconfig"; sourceTree = ""; }; + F8831FC11D0759538466F84B /* Pods-coobjcBaseExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coobjcBaseExampleTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-coobjcBaseExampleTests/Pods-coobjcBaseExampleTests.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1827C591219BC9C10004CE59 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 183F724121C748050041C32B /* libc++.tbd in Frameworks */, + CBEB5330C28218C41A7B36CE /* libPods-coobjcBaseExample.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1827C5A9219BC9C30004CE59 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 182074A021C0B235001A5021 /* libc++.tbd in Frameworks */, + 54F9CDED56D338C0AB04F320 /* libPods-coobjcBaseExampleTests.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0156CAD124142667210635CF /* Frameworks */ = { + isa = PBXGroup; + children = ( + 1820749F21C0B235001A5021 /* libc++.tbd */, + 4DBFDC51DEA9DC794BE4FDF3 /* libPods-coobjcBaseExample.a */, + 4AF09B7533F1C4E15CC4098A /* libPods-coobjcBaseExampleTests.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 1811EEC521B0D85B00BC0A52 /* Utils */ = { + isa = PBXGroup; + children = ( + 1811EF4321B0E23300BC0A52 /* Categories */, + 1811EF4221B0E23300BC0A52 /* KMNetworkLoadingViewController.h */, + 1811EF4121B0E23200BC0A52 /* KMNetworkLoadingViewController.m */, + 1811EF3C21B0E23200BC0A52 /* KMStoryBoardUtilities.h */, + 1811EF4021B0E23200BC0A52 /* KMStoryBoardUtilities.m */, + 1811EF3D21B0E23200BC0A52 /* Labels */, + 1811EF5221B0E23300BC0A52 /* UI Utils */, + 1811EEC621B0D8D800BC0A52 /* DataService.h */, + 1811EEC721B0D8D800BC0A52 /* DataService.m */, + ); + path = Utils; + sourceTree = ""; + }; + 1811EEC921B0E22A00BC0A52 /* Model */ = { + isa = PBXGroup; + children = ( + 1811EECA21B0E22A00BC0A52 /* KMMovie.h */, + 1811EECB21B0E22A00BC0A52 /* KMMovie.m */, + ); + path = Model; + sourceTree = ""; + }; + 1811EECC21B0E22A00BC0A52 /* Network */ = { + isa = PBXGroup; + children = ( + 1811EECD21B0E22A00BC0A52 /* KMSourceConfig.h */, + 1811EECE21B0E22A00BC0A52 /* Related Movies */, + 1811EED221B0E22A00BC0A52 /* KMBaseSource.h */, + 1811EED321B0E22A00BC0A52 /* KMSourceConfig.m */, + 1811EED421B0E22A00BC0A52 /* Discover List */, + 1811EED821B0E22A00BC0A52 /* Movies Details */, + 1811EEDC21B0E22A00BC0A52 /* KMBaseSource.m */, + ); + path = Network; + sourceTree = ""; + }; + 1811EECE21B0E22A00BC0A52 /* Related Movies */ = { + isa = PBXGroup; + children = ( + 1811EECF21B0E22A00BC0A52 /* KMSimilarMoviesSourceJsonPattern.json */, + 1811EED021B0E22A00BC0A52 /* KMSimilarMoviesSource.h */, + 1811EED121B0E22A00BC0A52 /* KMSimilarMoviesSource.m */, + ); + path = "Related Movies"; + sourceTree = ""; + }; + 1811EED421B0E22A00BC0A52 /* Discover List */ = { + isa = PBXGroup; + children = ( + 1811EED521B0E22A00BC0A52 /* KMDiscoverSource.h */, + 1811EED621B0E22A00BC0A52 /* KMDiscoverSourceJsonPattern.json */, + 1811EED721B0E22A00BC0A52 /* KMDiscoverSource.m */, + ); + path = "Discover List"; + sourceTree = ""; + }; + 1811EED821B0E22A00BC0A52 /* Movies Details */ = { + isa = PBXGroup; + children = ( + 1811EED921B0E22A00BC0A52 /* KMMovieDetailsSource.h */, + 1811EEDA21B0E22A00BC0A52 /* KMMovieDetailsSourceJsonPattern.json */, + 1811EEDB21B0E22A00BC0A52 /* KMMovieDetailsSource.m */, + ); + path = "Movies Details"; + sourceTree = ""; + }; + 1811EEDD21B0E22A00BC0A52 /* UI */ = { + isa = PBXGroup; + children = ( + 1811EEDE21B0E22A00BC0A52 /* StoryBoards */, + 1811EEE221B0E22A00BC0A52 /* Activity Indicator */, + 1811EEE521B0E22A00BC0A52 /* View Controllers */, + 1811EF0D21B0E22A00BC0A52 /* Indexed Collection View */, + 1811EF1021B0E22A00BC0A52 /* Details Page View */, + ); + path = UI; + sourceTree = ""; + }; + 1811EEDE21B0E22A00BC0A52 /* StoryBoards */ = { + isa = PBXGroup; + children = ( + 1811EEDF21B0E22A00BC0A52 /* KMSimilarMoviesStoryboard.storyboard */, + 1811EEE021B0E22A00BC0A52 /* KMDiscoverStoryboard.storyboard */, + 1811EEE121B0E22A00BC0A52 /* KMMovieDetailsStoryboard.storyboard */, + ); + path = StoryBoards; + sourceTree = ""; + }; + 1811EEE221B0E22A00BC0A52 /* Activity Indicator */ = { + isa = PBXGroup; + children = ( + 1811EEE321B0E22A00BC0A52 /* KMActivityIndicator.h */, + 1811EEE421B0E22A00BC0A52 /* KMActivityIndicator.m */, + ); + path = "Activity Indicator"; + sourceTree = ""; + }; + 1811EEE521B0E22A00BC0A52 /* View Controllers */ = { + isa = PBXGroup; + children = ( + 1811EEE621B0E22A00BC0A52 /* Movies Grid View */, + 1811EEEB21B0E22A00BC0A52 /* Discover List */, + 1811EEF021B0E22A00BC0A52 /* Movie Details Page */, + ); + path = "View Controllers"; + sourceTree = ""; + }; + 1811EEE621B0E22A00BC0A52 /* Movies Grid View */ = { + isa = PBXGroup; + children = ( + 1811EEE721B0E22A00BC0A52 /* KMSimilarMoviesViewController.h */, + 1811EEE821B0E22A00BC0A52 /* KMMoviePosterCell.h */, + 1811EEE921B0E22A00BC0A52 /* KMSimilarMoviesViewController.m */, + 1811EEEA21B0E22A00BC0A52 /* KMMoviePosterCell.m */, + ); + path = "Movies Grid View"; + sourceTree = ""; + }; + 1811EEEB21B0E22A00BC0A52 /* Discover List */ = { + isa = PBXGroup; + children = ( + 1811EEEC21B0E22A00BC0A52 /* KMDiscoverListCell.h */, + 1811EEED21B0E22A00BC0A52 /* KMDiscoverListViewController.h */, + 1811EEEE21B0E22A00BC0A52 /* KMDiscoverListCell.m */, + 1811EEEF21B0E22A00BC0A52 /* KMDiscoverListViewController.m */, + ); + path = "Discover List"; + sourceTree = ""; + }; + 1811EEF021B0E22A00BC0A52 /* Movie Details Page */ = { + isa = PBXGroup; + children = ( + 1811EEF121B0E22A00BC0A52 /* KMMovieDetailsViewController.h */, + 1811EEF221B0E22A00BC0A52 /* Movie Details Cells */, + 1811EF0C21B0E22A00BC0A52 /* KMMovieDetailsViewController.m */, + ); + path = "Movie Details Page"; + sourceTree = ""; + }; + 1811EEF221B0E22A00BC0A52 /* Movie Details Cells */ = { + isa = PBXGroup; + children = ( + 1811EEF321B0E22A00BC0A52 /* KMComposeCommentCell.xib */, + 1811EEF421B0E22A00BC0A52 /* KMMovieDetailsCommentsCell.m */, + 1811EEF521B0E22A00BC0A52 /* KMSimilarMoviesCollectionViewCell.h */, + 1811EEF621B0E22A00BC0A52 /* KMComposeCommentCell.m */, + 1811EEF721B0E22A00BC0A52 /* KMMovieDetailsPopularityCell.m */, + 1811EEF821B0E22A00BC0A52 /* KMMovieDetailsViewAllCommentsCell.xib */, + 1811EEF921B0E22A00BC0A52 /* KMMovieDetailsCells.h */, + 1811EEFA21B0E22A00BC0A52 /* KMMovieDetailsSimilarMoviesCell.h */, + 1811EEFB21B0E22A00BC0A52 /* KMMovieDetailsDescriptionCell.m */, + 1811EEFC21B0E22A00BC0A52 /* KMMovieDetailsViewAllCommentsCell.m */, + 1811EEFD21B0E22A00BC0A52 /* KMMovieDetailsCell.m */, + 1811EEFE21B0E22A00BC0A52 /* KMMovieDetailsCell.xib */, + 1811EEFF21B0E22A00BC0A52 /* KMSimilarMoviesCollectionViewCell.m */, + 1811EF0021B0E22A00BC0A52 /* KMMovieDetailsCommentsCell.xib */, + 1811EF0121B0E22A00BC0A52 /* KMMovieDetailsCommentsCell.h */, + 1811EF0221B0E22A00BC0A52 /* KMMovieDetailsSimilarMoviesCell.xib */, + 1811EF0321B0E22A00BC0A52 /* KMMovieDetailsPopularityCell.h */, + 1811EF0421B0E22A00BC0A52 /* KMComposeCommentCell.h */, + 1811EF0521B0E22A00BC0A52 /* KMMovieDetailsDescriptionCell.xib */, + 1811EF0621B0E22A00BC0A52 /* KMMovieDetailsDescriptionCell.h */, + 1811EF0721B0E22A00BC0A52 /* KMMovieDetailsSimilarMoviesCell.m */, + 1811EF0821B0E22A00BC0A52 /* KMSimilarMoviesCollectionViewCell.xib */, + 1811EF0921B0E22A00BC0A52 /* KMMovieDetailsCell.h */, + 1811EF0A21B0E22A00BC0A52 /* KMMovieDetailsPopularityCell.xib */, + 1811EF0B21B0E22A00BC0A52 /* KMMovieDetailsViewAllCommentsCell.h */, + ); + path = "Movie Details Cells"; + sourceTree = ""; + }; + 1811EF0D21B0E22A00BC0A52 /* Indexed Collection View */ = { + isa = PBXGroup; + children = ( + 1811EF0E21B0E22A00BC0A52 /* KMIndexedCollectionView.h */, + 1811EF0F21B0E22A00BC0A52 /* KMIndexedCollectionView.m */, + ); + path = "Indexed Collection View"; + sourceTree = ""; + }; + 1811EF1021B0E22A00BC0A52 /* Details Page View */ = { + isa = PBXGroup; + children = ( + 1811EF1121B0E22A00BC0A52 /* KMScrollingHeaderView.h */, + 1811EF1221B0E22A00BC0A52 /* KMScrollingHeaderView.m */, + ); + path = "Details Page View"; + sourceTree = ""; + }; + 1811EF1321B0E22A00BC0A52 /* Ressources */ = { + isa = PBXGroup; + children = ( + 1811EF1421B0E22A00BC0A52 /* Plists */, + ); + path = Ressources; + sourceTree = ""; + }; + 1811EF1421B0E22A00BC0A52 /* Plists */ = { + isa = PBXGroup; + children = ( + 1811EF1521B0E22A00BC0A52 /* Network Config */, + ); + path = Plists; + sourceTree = ""; + }; + 1811EF1521B0E22A00BC0A52 /* Network Config */ = { + isa = PBXGroup; + children = ( + 1811EF1621B0E22A00BC0A52 /* KMSourceConfig.plist */, + ); + path = "Network Config"; + sourceTree = ""; + }; + 1811EF3D21B0E23200BC0A52 /* Labels */ = { + isa = PBXGroup; + children = ( + 1811EF3E21B0E23200BC0A52 /* KMGillSansLabel.h */, + 1811EF3F21B0E23200BC0A52 /* KMGillSansLabel.m */, + ); + path = Labels; + sourceTree = ""; + }; + 1811EF4321B0E23300BC0A52 /* Categories */ = { + isa = PBXGroup; + children = ( + 1811EF4421B0E23300BC0A52 /* UIFont+GillSansFonts.h */, + 1811EF4521B0E23300BC0A52 /* NSString+UrlEncoding.h */, + 1811EF4621B0E23300BC0A52 /* NSURL+Parameters.h */, + 1811EF4721B0E23300BC0A52 /* NSString+MD5.h */, + 1811EF4821B0E23300BC0A52 /* NSArray+SafeValues.m */, + 1811EF4921B0E23300BC0A52 /* NSDictionary+SafeValues.m */, + 1811EF4A21B0E23300BC0A52 /* NSBundle+Loader.h */, + 1811EF4B21B0E23300BC0A52 /* NSString+UrlEncoding.m */, + 1811EF4C21B0E23300BC0A52 /* UIFont+GillSansFonts.m */, + 1811EF4D21B0E23300BC0A52 /* NSString+MD5.m */, + 1811EF4E21B0E23300BC0A52 /* NSURL+Parameters.m */, + 1811EF4F21B0E23300BC0A52 /* NSBundle+Loader.m */, + 1811EF5021B0E23300BC0A52 /* NSDictionary+SafeValues.h */, + 1811EF5121B0E23300BC0A52 /* NSArray+SafeValues.h */, + 1811EF6021B0E2A800BC0A52 /* UIImageView+WebCache.h */, + 1811EF6121B0E2A800BC0A52 /* UIImageView+WebCache.m */, + ); + path = Categories; + sourceTree = ""; + }; + 1811EF5221B0E23300BC0A52 /* UI Utils */ = { + isa = PBXGroup; + children = ( + 1811EF5321B0E23300BC0A52 /* KMButton.h */, + 1811EF5421B0E23300BC0A52 /* KMButton.m */, + ); + path = "UI Utils"; + sourceTree = ""; + }; + 1827C58B219BC9C00004CE59 = { + isa = PBXGroup; + children = ( + 1827C596219BC9C10004CE59 /* coobjcBaseExample */, + 1827C5AF219BC9C30004CE59 /* coobjcBaseExampleTests */, + 1827C595219BC9C10004CE59 /* Products */, + E843F9486A61D2372305FCC6 /* Pods */, + 0156CAD124142667210635CF /* Frameworks */, + ); + sourceTree = ""; + }; + 1827C595219BC9C10004CE59 /* Products */ = { + isa = PBXGroup; + children = ( + 1827C594219BC9C10004CE59 /* coobjcBaseExample.app */, + 1827C5AC219BC9C30004CE59 /* coobjcBaseExampleTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 1827C596219BC9C10004CE59 /* coobjcBaseExample */ = { + isa = PBXGroup; + children = ( + 1811EEC921B0E22A00BC0A52 /* Model */, + 1811EECC21B0E22A00BC0A52 /* Network */, + 1811EF1321B0E22A00BC0A52 /* Ressources */, + 1811EEDD21B0E22A00BC0A52 /* UI */, + 1811EEC521B0D85B00BC0A52 /* Utils */, + 1827C597219BC9C10004CE59 /* AppDelegate.h */, + 1827C598219BC9C10004CE59 /* AppDelegate.m */, + 1827C59A219BC9C10004CE59 /* ViewController.h */, + 1827C59B219BC9C10004CE59 /* ViewController.m */, + 1827C59D219BC9C10004CE59 /* Main.storyboard */, + 1827C5A0219BC9C30004CE59 /* Assets.xcassets */, + 1827C5A2219BC9C30004CE59 /* LaunchScreen.storyboard */, + 1827C5A5219BC9C30004CE59 /* Info.plist */, + 1827C5A6219BC9C30004CE59 /* main.m */, + ); + path = coobjcBaseExample; + sourceTree = ""; + }; + 1827C5AF219BC9C30004CE59 /* coobjcBaseExampleTests */ = { + isa = PBXGroup; + children = ( + 1827C5B0219BC9C30004CE59 /* coobjcBaseExampleTests.m */, + 1827C5B2219BC9C30004CE59 /* Info.plist */, + 1827C5BB219BCBD50004CE59 /* coobjcCreateTests.m */, + 1827C5BD219BF6770004CE59 /* coobjcCancelTests.m */, + 1827C5BF219BF8F70004CE59 /* coobjcBenchmarkTests.m */, + 1827C5C1219BFB350004CE59 /* coobjcCommon.h */, + 1827C5C2219BFB350004CE59 /* coobjcCommon.m */, + 1827C5C4219C1E820004CE59 /* coobjcSequenceTests.m */, + 1827C5C6219C27240004CE59 /* coobjcDelayTests.m */, + A3FAA92621A2F7C400605F27 /* coobjcPromiseTests.m */, + A3E839FE21AB9DC20096A7E4 /* coobjcChannelTests.m */, + 18E74C1E21AE96EF003A9065 /* coobjcActorTests.m */, + 18BC88C221BDFE6200EF3D9B /* coobjcTupleTests.m */, + 1820749D21C0AA65001A5021 /* coobjcAutoreleaseTests.m */, + 182074A121C0DB8F001A5021 /* coobjcAutoreleaseArcTests.m */, + ); + path = coobjcBaseExampleTests; + sourceTree = ""; + }; + E843F9486A61D2372305FCC6 /* Pods */ = { + isa = PBXGroup; + children = ( + 066A2B48882533B4E11B8C6A /* Pods-coobjcBaseExample.debug.xcconfig */, + 236D98A1BE2319FA437A7584 /* Pods-coobjcBaseExample.release.xcconfig */, + DE44BF03409C3FA4753A41D7 /* Pods-coobjcBaseExampleTests.debug.xcconfig */, + F8831FC11D0759538466F84B /* Pods-coobjcBaseExampleTests.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 1827C593219BC9C10004CE59 /* coobjcBaseExample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1827C5B5219BC9C30004CE59 /* Build configuration list for PBXNativeTarget "coobjcBaseExample" */; + buildPhases = ( + 76F885828FF35FC568DD04BB /* [CP] Check Pods Manifest.lock */, + 1827C590219BC9C10004CE59 /* Sources */, + 1827C591219BC9C10004CE59 /* Frameworks */, + 1827C592219BC9C10004CE59 /* Resources */, + 24F1D64B525517CAA1E6ADB3 /* [CP] Embed Pods Frameworks */, + A38EAF55A470C4597F3A1412 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = coobjcBaseExample; + productName = coobjcBaseExample; + productReference = 1827C594219BC9C10004CE59 /* coobjcBaseExample.app */; + productType = "com.apple.product-type.application"; + }; + 1827C5AB219BC9C30004CE59 /* coobjcBaseExampleTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1827C5B8219BC9C30004CE59 /* Build configuration list for PBXNativeTarget "coobjcBaseExampleTests" */; + buildPhases = ( + F4DCC356B7B679278FCE9BD0 /* [CP] Check Pods Manifest.lock */, + 1827C5A8219BC9C30004CE59 /* Sources */, + 1827C5A9219BC9C30004CE59 /* Frameworks */, + 1827C5AA219BC9C30004CE59 /* Resources */, + CBC7F537820B4B76E2744E28 /* [CP] Embed Pods Frameworks */, + C08265F9E22ABF51F0A2690E /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + 1827C5AE219BC9C30004CE59 /* PBXTargetDependency */, + ); + name = coobjcBaseExampleTests; + productName = coobjcBaseExampleTests; + productReference = 1827C5AC219BC9C30004CE59 /* coobjcBaseExampleTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 1827C58C219BC9C00004CE59 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0940; + ORGANIZATIONNAME = fantasy; + TargetAttributes = { + 1827C593219BC9C10004CE59 = { + CreatedOnToolsVersion = 9.4; + }; + 1827C5AB219BC9C30004CE59 = { + CreatedOnToolsVersion = 9.4; + TestTargetID = 1827C593219BC9C10004CE59; + }; + }; + }; + buildConfigurationList = 1827C58F219BC9C00004CE59 /* Build configuration list for PBXProject "coobjcBaseExample" */; + compatibilityVersion = "Xcode 3.1"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 1827C58B219BC9C00004CE59; + productRefGroup = 1827C595219BC9C10004CE59 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 1827C593219BC9C10004CE59 /* coobjcBaseExample */, + 1827C5AB219BC9C30004CE59 /* coobjcBaseExampleTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 1827C592219BC9C10004CE59 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1811EF2221B0E22A00BC0A52 /* KMMovieDetailsStoryboard.storyboard in Resources */, + 1811EF3021B0E22A00BC0A52 /* KMMovieDetailsCell.xib in Resources */, + 1827C5A4219BC9C30004CE59 /* LaunchScreen.storyboard in Resources */, + 1811EF2821B0E22A00BC0A52 /* KMComposeCommentCell.xib in Resources */, + 1827C5A1219BC9C30004CE59 /* Assets.xcassets in Resources */, + 1811EF3B21B0E22B00BC0A52 /* KMSourceConfig.plist in Resources */, + 1811EF1821B0E22A00BC0A52 /* KMSimilarMoviesSourceJsonPattern.json in Resources */, + 1811EF1D21B0E22A00BC0A52 /* KMMovieDetailsSourceJsonPattern.json in Resources */, + 1811EF3721B0E22B00BC0A52 /* KMMovieDetailsPopularityCell.xib in Resources */, + 1811EF1B21B0E22A00BC0A52 /* KMDiscoverSourceJsonPattern.json in Resources */, + 1811EF3321B0E22A00BC0A52 /* KMMovieDetailsSimilarMoviesCell.xib in Resources */, + 1811EF3621B0E22A00BC0A52 /* KMSimilarMoviesCollectionViewCell.xib in Resources */, + 1811EF2021B0E22A00BC0A52 /* KMSimilarMoviesStoryboard.storyboard in Resources */, + 1811EF2C21B0E22A00BC0A52 /* KMMovieDetailsViewAllCommentsCell.xib in Resources */, + 1811EF2121B0E22A00BC0A52 /* KMDiscoverStoryboard.storyboard in Resources */, + 1827C59F219BC9C10004CE59 /* Main.storyboard in Resources */, + 1811EF3221B0E22A00BC0A52 /* KMMovieDetailsCommentsCell.xib in Resources */, + 1811EF3421B0E22A00BC0A52 /* KMMovieDetailsDescriptionCell.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1827C5AA219BC9C30004CE59 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 24F1D64B525517CAA1E6ADB3 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-coobjcBaseExample/Pods-coobjcBaseExample-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 76F885828FF35FC568DD04BB /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + A38EAF55A470C4597F3A1412 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-coobjcBaseExample/Pods-coobjcBaseExample-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + C08265F9E22ABF51F0A2690E /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-coobjcBaseExampleTests/Pods-coobjcBaseExampleTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + CBC7F537820B4B76E2744E28 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-coobjcBaseExampleTests/Pods-coobjcBaseExampleTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + F4DCC356B7B679278FCE9BD0 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 1827C590219BC9C10004CE59 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1811EF1A21B0E22A00BC0A52 /* KMSourceConfig.m in Sources */, + 1811EF3A21B0E22B00BC0A52 /* KMScrollingHeaderView.m in Sources */, + 1811EF1721B0E22A00BC0A52 /* KMMovie.m in Sources */, + 1811EF2F21B0E22A00BC0A52 /* KMMovieDetailsCell.m in Sources */, + 1811EF5F21B0E23300BC0A52 /* KMButton.m in Sources */, + 1811EF5C21B0E23300BC0A52 /* NSString+MD5.m in Sources */, + 1811EF5D21B0E23300BC0A52 /* NSURL+Parameters.m in Sources */, + 1811EF1921B0E22A00BC0A52 /* KMSimilarMoviesSource.m in Sources */, + 1811EF2D21B0E22A00BC0A52 /* KMMovieDetailsDescriptionCell.m in Sources */, + 1811EF2521B0E22A00BC0A52 /* KMMoviePosterCell.m in Sources */, + 1811EF6221B0E2A800BC0A52 /* UIImageView+WebCache.m in Sources */, + 1811EF3821B0E22B00BC0A52 /* KMMovieDetailsViewController.m in Sources */, + 1811EF5521B0E23300BC0A52 /* KMGillSansLabel.m in Sources */, + 1827C59C219BC9C10004CE59 /* ViewController.m in Sources */, + 1811EF2E21B0E22A00BC0A52 /* KMMovieDetailsViewAllCommentsCell.m in Sources */, + 1827C5A7219BC9C30004CE59 /* main.m in Sources */, + 1811EF2421B0E22A00BC0A52 /* KMSimilarMoviesViewController.m in Sources */, + 1811EF1C21B0E22A00BC0A52 /* KMDiscoverSource.m in Sources */, + 1811EF5A21B0E23300BC0A52 /* NSString+UrlEncoding.m in Sources */, + 1811EF3921B0E22B00BC0A52 /* KMIndexedCollectionView.m in Sources */, + 1827C599219BC9C10004CE59 /* AppDelegate.m in Sources */, + 1811EF2A21B0E22A00BC0A52 /* KMComposeCommentCell.m in Sources */, + 1811EF3121B0E22A00BC0A52 /* KMSimilarMoviesCollectionViewCell.m in Sources */, + 1811EF1F21B0E22A00BC0A52 /* KMBaseSource.m in Sources */, + 1811EF5821B0E23300BC0A52 /* NSArray+SafeValues.m in Sources */, + 1811EF2321B0E22A00BC0A52 /* KMActivityIndicator.m in Sources */, + 1811EF2921B0E22A00BC0A52 /* KMMovieDetailsCommentsCell.m in Sources */, + 1811EF1E21B0E22A00BC0A52 /* KMMovieDetailsSource.m in Sources */, + 1811EF2B21B0E22A00BC0A52 /* KMMovieDetailsPopularityCell.m in Sources */, + 1811EF2721B0E22A00BC0A52 /* KMDiscoverListViewController.m in Sources */, + 1811EF3521B0E22A00BC0A52 /* KMMovieDetailsSimilarMoviesCell.m in Sources */, + 1811EF5E21B0E23300BC0A52 /* NSBundle+Loader.m in Sources */, + 1811EF2621B0E22A00BC0A52 /* KMDiscoverListCell.m in Sources */, + 1811EEC821B0D8D800BC0A52 /* DataService.m in Sources */, + 1811EF5B21B0E23300BC0A52 /* UIFont+GillSansFonts.m in Sources */, + 1811EF5721B0E23300BC0A52 /* KMNetworkLoadingViewController.m in Sources */, + 1811EF5921B0E23300BC0A52 /* NSDictionary+SafeValues.m in Sources */, + 1811EF5621B0E23300BC0A52 /* KMStoryBoardUtilities.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1827C5A8219BC9C30004CE59 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 18BC88C321BDFE6200EF3D9B /* coobjcTupleTests.m in Sources */, + 182074A221C0DB8F001A5021 /* coobjcAutoreleaseArcTests.m in Sources */, + A3E839FF21AB9DC20096A7E4 /* coobjcChannelTests.m in Sources */, + 18E74C1F21AE96EF003A9065 /* coobjcActorTests.m in Sources */, + 1827C5B1219BC9C30004CE59 /* coobjcBaseExampleTests.m in Sources */, + 1820749E21C0AA65001A5021 /* coobjcAutoreleaseTests.m in Sources */, + A3FAA92721A2F7C400605F27 /* coobjcPromiseTests.m in Sources */, + 1827C5BC219BCBD60004CE59 /* coobjcCreateTests.m in Sources */, + 1827C5C5219C1E820004CE59 /* coobjcSequenceTests.m in Sources */, + 1827C5BE219BF6770004CE59 /* coobjcCancelTests.m in Sources */, + 1827C5C7219C27240004CE59 /* coobjcDelayTests.m in Sources */, + 1827C5C3219BFB350004CE59 /* coobjcCommon.m in Sources */, + 1827C5C0219BF8F70004CE59 /* coobjcBenchmarkTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 1827C5AE219BC9C30004CE59 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1827C593219BC9C10004CE59 /* coobjcBaseExample */; + targetProxy = 1827C5AD219BC9C30004CE59 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 1827C59D219BC9C10004CE59 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 1827C59E219BC9C10004CE59 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 1827C5A2219BC9C30004CE59 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 1827C5A3219BC9C30004CE59 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 1827C5B3219BC9C30004CE59 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 1827C5B4219BC9C30004CE59 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 1827C5B6219BC9C30004CE59 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 066A2B48882533B4E11B8C6A /* Pods-coobjcBaseExample.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 8JWVBB5S2P; + INFOPLIST_FILE = coobjcBaseExample/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.fantasy.coobjcBaseExample.1123; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 1827C5B7219BC9C30004CE59 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 236D98A1BE2319FA437A7584 /* Pods-coobjcBaseExample.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 8JWVBB5S2P; + INFOPLIST_FILE = coobjcBaseExample/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.fantasy.coobjcBaseExample.1123; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 1827C5B9219BC9C30004CE59 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DE44BF03409C3FA4753A41D7 /* Pods-coobjcBaseExampleTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 8JWVBB5S2P; + INFOPLIST_FILE = coobjcBaseExampleTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.fantasy.coobjcBaseExampleTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/coobjcBaseExample.app/coobjcBaseExample"; + }; + name = Debug; + }; + 1827C5BA219BC9C30004CE59 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F8831FC11D0759538466F84B /* Pods-coobjcBaseExampleTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 8JWVBB5S2P; + INFOPLIST_FILE = coobjcBaseExampleTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.fantasy.coobjcBaseExampleTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/coobjcBaseExample.app/coobjcBaseExample"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1827C58F219BC9C00004CE59 /* Build configuration list for PBXProject "coobjcBaseExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1827C5B3219BC9C30004CE59 /* Debug */, + 1827C5B4219BC9C30004CE59 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1827C5B5219BC9C30004CE59 /* Build configuration list for PBXNativeTarget "coobjcBaseExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1827C5B6219BC9C30004CE59 /* Debug */, + 1827C5B7219BC9C30004CE59 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1827C5B8219BC9C30004CE59 /* Build configuration list for PBXNativeTarget "coobjcBaseExampleTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1827C5B9219BC9C30004CE59 /* Debug */, + 1827C5BA219BC9C30004CE59 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 1827C58C219BC9C00004CE59 /* Project object */; +} diff --git a/Examples/coobjcBaseExample/coobjcBaseExample.xcodeproj/xcshareddata/xcschemes/coobjcBaseExample.xcscheme b/Examples/coobjcBaseExample/coobjcBaseExample.xcodeproj/xcshareddata/xcschemes/coobjcBaseExample.xcscheme new file mode 100644 index 0000000..2438838 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample.xcodeproj/xcshareddata/xcschemes/coobjcBaseExample.xcscheme @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/AppDelegate.h b/Examples/coobjcBaseExample/coobjcBaseExample/AppDelegate.h new file mode 100644 index 0000000..26a8d24 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/AppDelegate.h @@ -0,0 +1,16 @@ +// +// AppDelegate.h +// coobjcBaseExample +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + +@end + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/AppDelegate.m b/Examples/coobjcBaseExample/coobjcBaseExample/AppDelegate.m new file mode 100644 index 0000000..4f01538 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/AppDelegate.m @@ -0,0 +1,85 @@ +// +// AppDelegate.m +// coobjcBaseExample +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// + +#import "AppDelegate.h" +#import "KMStoryBoardUtilities.h" +#import "KMDiscoverListViewController.h" +#import "DataService.h" + +@interface AppDelegate () + + + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + [DataService sharedInstance]; + self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + + UINavigationController* navigationController = (UINavigationController*)[KMStoryBoardUtilities viewControllerForStoryboardName:@"KMDiscoverStoryboard" class:[KMDiscoverListViewController class]]; + + [self.window setRootViewController:navigationController]; + + [self setupNavigationTitleLabelStyle]; + [self setupStatusBarStyle]; + + // Override point for customization after application launch. + self.window.backgroundColor = [UIColor whiteColor]; + [self.window makeKeyAndVisible]; + return YES; +} + +#pragma mark - +#pragma mark App Style Setup Methods + +- (void)setupNavigationTitleLabelStyle +{ + NSMutableDictionary *titleBarAttributes = [NSMutableDictionary dictionaryWithDictionary: [[UINavigationBar appearance] titleTextAttributes]]; + [titleBarAttributes setValue:[UIFont fontWithName:@"GillSans-Light" size:20] forKey:NSFontAttributeName]; + [titleBarAttributes setValue:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; + [[UINavigationBar appearance] setTitleTextAttributes:titleBarAttributes]; + [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; +} + +- (void)setupStatusBarStyle +{ + [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; +} + + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. +} + + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. +} + + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Assets.xcassets/AppIcon.appiconset/Contents.json b/Examples/coobjcBaseExample/coobjcBaseExample/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Assets.xcassets/Contents.json b/Examples/coobjcBaseExample/coobjcBaseExample/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Base.lproj/LaunchScreen.storyboard b/Examples/coobjcBaseExample/coobjcBaseExample/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Base.lproj/Main.storyboard b/Examples/coobjcBaseExample/coobjcBaseExample/Base.lproj/Main.storyboard new file mode 100644 index 0000000..d7c78a1 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Info.plist b/Examples/coobjcBaseExample/coobjcBaseExample/Info.plist new file mode 100644 index 0000000..cfe1b2e --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Info.plist @@ -0,0 +1,52 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + UIFileSharingEnabled + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Model/KMMovie.h b/Examples/coobjcBaseExample/coobjcBaseExample/Model/KMMovie.h new file mode 100755 index 0000000..7e42cd9 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Model/KMMovie.h @@ -0,0 +1,103 @@ +// +// KMMovie.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 03/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * The KMMovie object defines a movie object with its properties + */ +@interface KMMovie : NSObject + +/** + * The movie's title + */ +@property (nonatomic, copy) NSString* movieTitle; + +/** + * The movie's id + */ +@property (nonatomic, copy) NSString* movieId; + +/** + * The movie's synopsis + */ +@property (nonatomic, copy) NSString* movieSynopsis; + +/** + * The year the movie was released + */ +@property (nonatomic, copy) NSString* movieYear; + +/** + * The original sized backdrop image url + */ +@property (nonatomic, copy) NSString* movieOriginalBackdropImageUrl; + +/** + * The original sized poster image url + */ +@property (nonatomic, copy) NSString* movieOriginalPosterImageUrl; + +/** + * The thumbnail sized poster image url + */ +@property (nonatomic, copy) NSString* movieThumbnailPosterImageUrl; + +/** + * The thumbnail sized backdrop image url + */ +@property (nonatomic, copy) NSString* movieThumbnailBackdropImageUrl; + +/** + * The movie's genre + */ +@property (nonatomic, copy) NSString* movieGenresString; + +/** + * The movie's vote count string + */ +@property (nonatomic, copy) NSString* movieVoteCount; + +/** + * The movie's vote average score + */ +@property (nonatomic, copy) NSString* movieVoteAverage; + +/** + * The movie's popularity score + */ +@property (nonatomic, copy) NSString* moviePopularity; + +/** + * Designated Initializer + * + * @param dictionary The dictionary containing the movie data + * + * @return KMMovie instance + */ +- (instancetype)initWithDictionary:(NSDictionary*)dictionary NS_DESIGNATED_INITIALIZER; + +/** + * Unavailable, use the designated initializer. + * + * @return nil + */ ++ (instancetype)new __attribute__((unavailable("Use -initWithFontSpecification: instead"))); + +/** + * Unavailable, use the designated initializer. + * + * @return nil + */ +- (instancetype)init __attribute__((unavailable("Use -initWithFontSpecification: instead"))); + +NS_ASSUME_NONNULL_END + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Model/KMMovie.m b/Examples/coobjcBaseExample/coobjcBaseExample/Model/KMMovie.m new file mode 100755 index 0000000..f30c8b0 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Model/KMMovie.m @@ -0,0 +1,113 @@ +// +// KMMovie.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 03/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMMovie.h" +#import "NSDictionary+SafeValues.h" + +#define kMovieTitle @"original_title" +#define kMovieId @"id" +#define kMovieYearDate @"year" +#define kMovieSynopsis @"overview" +#define kMovieOriginalPosterImageUrl @"poster_path" +#define kMovieBackdropPosterImageUrl @"backdrop_path" +#define kMovieDetailedPosterImageUrl @"thumbnail" +#define kMoviePosterRelatedMovies @"similar" +#define kMovieGenres @"genres" +#define kMoviePopularity @"popularity" +#define kMovieVoteCount @"vote_count" +#define kMovieVoteAverage @"vote_average" + +@implementation KMMovie + +#pragma mark - +#pragma mark Init Methods + +- (void)initialiseWithSafeValues +{ + _movieId = @""; + _movieSynopsis = @""; + _movieYear = @""; + _movieOriginalPosterImageUrl = @""; + _movieThumbnailPosterImageUrl = @""; + _movieOriginalBackdropImageUrl = @""; + _movieThumbnailBackdropImageUrl = @""; + _movieGenresString = @""; + _moviePopularity = @""; + _movieVoteAverage = @""; + _movieVoteCount = @""; + _movieTitle = @""; +} + +- (instancetype)initWithDictionary:(NSDictionary*)dictionary +{ + self = [super init]; + + if (self) + { + [self initialiseWithSafeValues]; + [self processDictionary:dictionary]; + } + return self; +} + +#pragma mark - +#pragma mark Dictionary Parsing + +- (void)processDictionary:(NSDictionary*)dictionary +{ + if (dictionary) + { + _movieId = [NSString stringWithFormat:@"%d", [[dictionary safeNumberForKey:kMovieId] intValue]]; + _movieTitle = [dictionary safeStringForKey:kMovieTitle]; + _movieSynopsis = [dictionary safeStringForKey:kMovieSynopsis]; + + _movieThumbnailPosterImageUrl = [NSString stringWithFormat:@"http://image.tmdb.org/t/p/w92/%@", [dictionary safeStringForKey:kMovieOriginalPosterImageUrl]]; + _movieOriginalBackdropImageUrl = [NSString stringWithFormat:@"http://image.tmdb.org/t/p/w780/%@", [dictionary safeStringForKey:kMovieBackdropPosterImageUrl]]; + _movieThumbnailBackdropImageUrl = [NSString stringWithFormat:@"http://image.tmdb.org/t/p/w300/%@", [dictionary safeStringForKey:kMovieBackdropPosterImageUrl]]; + _movieOriginalPosterImageUrl = [NSString stringWithFormat:@"http://image.tmdb.org/t/p/w500/%@", [dictionary safeStringForKey:kMovieOriginalPosterImageUrl]]; + + _movieGenresString = [self processGenresIntoString:[dictionary safeArrayForKey:kMovieGenres]]; + _movieVoteCount = [NSString stringWithFormat:@"%d", [[dictionary safeNumberForKey:kMovieVoteCount] intValue]]; + + NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; + [formatter setPositiveFormat:@"#0.0"]; + + _moviePopularity = [formatter stringFromNumber:[dictionary safeNumberForKey:kMoviePopularity]]; + _movieVoteAverage = [formatter stringFromNumber:[dictionary safeNumberForKey:kMovieVoteAverage]]; + + if ([_moviePopularity length] >= 2) + { + [_moviePopularity substringToIndex:2]; + } + if ([_movieVoteAverage length] >= 2) + { + [_movieVoteAverage substringToIndex:2]; + } + } +} + +- (NSString*)processGenresIntoString:(NSArray*)genres +{ + if ([genres count] == 0) + { + return @""; + } + + NSMutableString* genresString = [[NSMutableString alloc] init]; + + for (NSDictionary* genre in genres) + { + [genresString appendFormat:@"%@, ", [genre safeStringForKey:@"name"]]; + } + [genresString replaceCharactersInRange:NSMakeRange([genresString length]-2, 2) withString:@""]; + + return genresString; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Network/Discover List/KMDiscoverSource.h b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Discover List/KMDiscoverSource.h new file mode 100755 index 0000000..b9426f4 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Discover List/KMDiscoverSource.h @@ -0,0 +1,46 @@ +// +// KMDiscoverMapSource.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 03/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + + +#import "KMBaseSource.h" +#import "DataService.h" + + +NS_ASSUME_NONNULL_BEGIN + +/** + * `KMDiscoverListCompletionBlock` is a completion handler block for the `KMDiscoverSource` + * + * @param dataArray An array of `KMMovie` objects + * @param errorString An error string + */ +typedef void (^KMDiscoverListCompletionBlock)(NSArray* _Nullable dataArray, NSString* _Nullable errorString); + +/** + * `KMDiscoverSource` is a networking class which can be used to request a list of popular movies to discover. + */ +@interface KMDiscoverSource : KMBaseSource + +/** + * Class method returning a `KMDiscoverSource` shared instance. + * + * @return `KMDiscoverSource` instance + */ ++ (KMDiscoverSource *)discoverSource; + +/** + * Use this method to perform a GET request and fetch a list of popular movies to discover. + * + * @param pageLimit The number of movie pages you would like the API to return + * @param completionBlock A block object to be executed when the request operation finishes. This block has no return value and takes two arguments: a collection of movies, and the error string in case of a request failure + */ +- (NSArray*)getDiscoverList:(NSString *)pageLimit CO_ASYNC; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Network/Discover List/KMDiscoverSource.m b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Discover List/KMDiscoverSource.m new file mode 100755 index 0000000..4731dc5 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Discover List/KMDiscoverSource.m @@ -0,0 +1,67 @@ +// +// KMDiscoverMapSource.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 03/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMDiscoverSource.h" +#import "KMSourceConfig.h" +#import "KMMovie.h" + +#define kDiscoverUrlFormat @"%@/discover/movie?api_key=%@&sort_by=popularity.desc" + +@implementation KMDiscoverSource + +#pragma mark - Init Methods + ++ (KMDiscoverSource *)discoverSource; +{ + static dispatch_once_t onceToken; + static KMDiscoverSource* instance = nil; + + dispatch_once(&onceToken, ^{ + instance = [[KMDiscoverSource alloc] init]; + }); + return instance; +} + +#pragma mark - Request Methods + +- (NSArray*)getDiscoverList:(NSString *)pageLimit; +{ + NSString *url = [NSString stringWithFormat:@"%@&page=%@", [self prepareUrl], pageLimit]; + id json = [[DataService sharedInstance] requestJSONWithURL:url]; + NSDictionary* infosDictionary = [self dictionaryFromResponseObject:json jsonPatternFile:@"KMDiscoverSourceJsonPattern.json"]; + return [self processResponseObject:infosDictionary]; +} + +#pragma mark - Data Parsing + +- (NSArray *)processResponseObject:(NSDictionary*)data +{ + if (data) + { + NSArray* itemsList = [NSArray arrayWithArray:[data objectForKey:@"results"]]; + NSMutableArray* sortedArray = [[NSMutableArray alloc] init]; + + for (NSDictionary* item in itemsList) + { + KMMovie* movie = [[KMMovie alloc] initWithDictionary:item]; + [sortedArray addObject:movie]; + } + return sortedArray; + } + return nil; +} + + +#pragma mark - Private + +- (NSString *)prepareUrl +{ + return [NSString stringWithFormat:kDiscoverUrlFormat, [KMSourceConfig config].hostUrlString, [KMSourceConfig config].apiKey]; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Network/Discover List/KMDiscoverSourceJsonPattern.json b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Discover List/KMDiscoverSourceJsonPattern.json new file mode 100755 index 0000000..27e7935 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Discover List/KMDiscoverSourceJsonPattern.json @@ -0,0 +1,17 @@ +{ + "total_results" : "number", + "results" : [ + { + "original_title" : "string", + "poster_path?" : "string", + "release_date?" : "string", + "id" : "number", + "adult" : "number", + "title" : "string", + "popularity" : "number", + "vote_count" : "number", + "vote_average" : "number", + "backdrop_path?" : "string" + } +] +} \ No newline at end of file diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Network/KMBaseSource.h b/Examples/coobjcBaseExample/coobjcBaseExample/Network/KMBaseSource.h new file mode 100755 index 0000000..99a8d44 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Network/KMBaseSource.h @@ -0,0 +1,38 @@ +// +// KMBaseSource.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 03/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * `KMBaseSource` is a base network class providing operation queue management and response parsing tools + */ +@interface KMBaseSource : NSObject + +/** + * The current operation queue on which a network class instance is running + */ +@property (nonatomic, strong) NSOperationQueue* operationQueue; + +/** + * Use this method to validate json data. + * + * @param responseData Data received from a network request + * @param jsonFile JSON pattern file to which the received data should conform to + * + * @return `NSDictionary` object + */ +- (NSDictionary * _Nullable)dictionaryFromResponseData:(NSData *)responseData jsonPatternFile:(NSString *)jsonFile; + +- (NSDictionary * _Nullable)dictionaryFromResponseObject:(id)responseObject jsonPatternFile:(NSString *)jsonFile; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Network/KMBaseSource.m b/Examples/coobjcBaseExample/coobjcBaseExample/Network/KMBaseSource.m new file mode 100755 index 0000000..a3195d7 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Network/KMBaseSource.m @@ -0,0 +1,80 @@ +// +// KMBaseSource.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 03/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMBaseSource.h" +#import "KMSourceConfig.h" +#import "NSString+UrlEncoding.h" + +#import "NSBundle+Loader.h" + +@implementation KMBaseSource + +#pragma mark - Init Methods + +- (id)init +{ + self = [super init]; + + if (self) + { + self.operationQueue = [[NSOperationQueue alloc] init]; + self.operationQueue.maxConcurrentOperationCount = 1; + } + return self; +} + +#pragma mark - Response Data Parsing + +- (NSDictionary *)dictionaryFromResponseData:(NSData *)responseData jsonPatternFile:(NSString *)jsonFile +{ + NSDictionary* dictionary = nil; + + if (responseData) + { + id object = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil]; + + if ([object isKindOfClass:[NSDictionary class]]) + { + dictionary = (NSDictionary*)object; + } + else + { + if (object) + { + dictionary = [NSDictionary dictionaryWithObject:object forKey:@"results"]; + } + else + { + dictionary = nil; + } + } + } + return dictionary; +} + +- (NSDictionary * _Nullable)dictionaryFromResponseObject:(id)responseObject jsonPatternFile:(NSString *)jsonFile{ + NSDictionary* dictionary = nil; + if ([responseObject isKindOfClass:[NSDictionary class]]) + { + dictionary = (NSDictionary*)responseObject; + } + else + { + if (responseObject) + { + dictionary = [NSDictionary dictionaryWithObject:responseObject forKey:@"results"]; + } + else + { + dictionary = nil; + } + } + return dictionary; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Network/KMSourceConfig.h b/Examples/coobjcBaseExample/coobjcBaseExample/Network/KMSourceConfig.h new file mode 100755 index 0000000..708ab76 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Network/KMSourceConfig.h @@ -0,0 +1,43 @@ +// +// KMSourceConfig.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 03/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import + +/** + * `KMSourceConfig` provides network classes with host information. + */ +@interface KMSourceConfig : NSObject + +/** + * Class method returning a `KMSourceConfig` shared instance. + * + * @return `KMSourceConfig` instance + */ ++ (KMSourceConfig *)config; + +/** + * The current app version + */ +@property (nonatomic, copy, readonly) NSString* version; + +/** + * The current build version + */ +@property (nonatomic, copy, readonly) NSString* build; + +/** + * The API host url string + */ +@property (nonatomic, copy, readonly) NSString* hostUrlString; + +/** + * The API secret key. + */ +@property (nonatomic, copy, readonly) NSString* apiKey; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Network/KMSourceConfig.m b/Examples/coobjcBaseExample/coobjcBaseExample/Network/KMSourceConfig.m new file mode 100755 index 0000000..764fb96 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Network/KMSourceConfig.m @@ -0,0 +1,50 @@ +// +// KMSourceConfig.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 03/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMSourceConfig.h" +#import "NSDictionary+SafeValues.h" + +#define kConfigVersionKey @"version" +#define kConfigBuildKey @"build" +#define kConfigTheMovieDbHostKey @"themoviedb_host" +#define kConfigApiKey @"api_key" + +@implementation KMSourceConfig + +#pragma mark - Init Methods + ++ (KMSourceConfig *)config +{ + static dispatch_once_t onceToken; + static KMSourceConfig* instance = nil; + + dispatch_once(&onceToken, ^{ + instance = [[KMSourceConfig alloc] init]; + }); + return instance; +} + +- (instancetype)init +{ + self = [super init]; + + if (self) + { + NSBundle* bundle = [NSBundle bundleForClass:[self class]]; + NSDictionary* config = [[NSDictionary alloc]initWithContentsOfFile:[bundle pathForResource:@"KMSourceConfig" ofType:@"plist"]]; + + _hostUrlString = [config safeStringForKey:kConfigTheMovieDbHostKey]; + _version = [config safeStringForKey:kConfigVersionKey]; + _build = [config safeStringForKey:kConfigBuildKey]; + _apiKey = [config safeStringForKey:kConfigApiKey]; + } + + return self; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Network/Movies Details/KMMovieDetailsSource.h b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Movies Details/KMMovieDetailsSource.h new file mode 100755 index 0000000..a1f38f9 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Movies Details/KMMovieDetailsSource.h @@ -0,0 +1,48 @@ +// +// KMMovieDetailsSource.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMBaseSource.h" +#import "DataService.h" + +@class KMMovie; + +NS_ASSUME_NONNULL_BEGIN + +/** + * `KMMovieDetailsCompletionBlock` is a completion handler block for the `KMMovieDetailsSource` + * + * @param movieDetails `KMMovie` object containing movie data + * @param errorString An error string + * + * @see `KMMovieDetailsSource` + */ +//typedef void (^KMMovieDetailsCompletionBlock)(KMMovie* _Nullable movieDetails, NSString* _Nullable errorString); + +/** + * `KMMovieDetailsSource` is a network class which can be used to fetch further details for a movie. + */ +@interface KMMovieDetailsSource : KMBaseSource + +/** + * Class method returning a `KMMovieDetailsSource` shared instance. + * + * @return `KMMovieDetailsSource` instance + */ ++ (KMMovieDetailsSource *)movieDetailsSource; + +/** + * Use this method to perform a GET request and fetch details for a movie. + * + * @param movieId The movie id + * @param completionBlock A block object to be executed when the request operation finishes. This block has no return value and takes two arguments: the movie details, and the error string in case of a request failure. + */ +- (KMMovie*)getMovieDetails:(NSString *)movieId CO_ASYNC; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Network/Movies Details/KMMovieDetailsSource.m b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Movies Details/KMMovieDetailsSource.m new file mode 100755 index 0000000..520d47d --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Movies Details/KMMovieDetailsSource.m @@ -0,0 +1,60 @@ +// +// KMMovieDetailsSource.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMMovieDetailsSource.h" +#import "KMSourceConfig.h" +#import "KMMovie.h" + +#define kSimilarMoviesUrlFormat @"%@/movie/%@?api_key=%@" + +@implementation KMMovieDetailsSource + +#pragma mark - Init Methods + ++ (KMMovieDetailsSource *)movieDetailsSource +{ + static dispatch_once_t onceToken; + static KMMovieDetailsSource* instance = nil; + + dispatch_once(&onceToken, ^{ + instance = [[KMMovieDetailsSource alloc] init]; + }); + + return instance; +} + +#pragma mark - Request Methods + +- (KMMovie*)getMovieDetails:(NSString *)movieId +{ + NSString *url = [self prepareUrl:movieId]; + id json = [[DataService sharedInstance] requestJSONWithURL:url]; + NSDictionary *infosDictionary = [self dictionaryFromResponseObject:json jsonPatternFile:@"KMMovieDetailsSourceJsonPattern.json"]; + return [self processResponseObject:infosDictionary]; +} + +#pragma mark - Data Parsing + +- (KMMovie *)processResponseObject:(NSDictionary*)data +{ + if (data) + { + return [[KMMovie alloc] initWithDictionary:data]; + } + + return nil; +} + +#pragma mark - Private + +- (NSString *)prepareUrl:(NSString *)movieId +{ + return [NSString stringWithFormat:kSimilarMoviesUrlFormat, [KMSourceConfig config].hostUrlString, movieId, [KMSourceConfig config].apiKey]; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Network/Movies Details/KMMovieDetailsSourceJsonPattern.json b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Movies Details/KMMovieDetailsSourceJsonPattern.json new file mode 100755 index 0000000..957acef --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Movies Details/KMMovieDetailsSourceJsonPattern.json @@ -0,0 +1,62 @@ +{ + "adult": "number", + "backdrop_path?": "string", + "belongs_to_collection?": { + "backdrop_path?": "string", + "id": "number", + "name": "string", + "poster_path?": "string" + }, + "budget": "number", + "genres": [ + { + "id": "number", + "name": "string" + }, + { + "id": "number", + "name": "string" + }, + { + "id": "number", + "name": "string" + } + ], + "homepage?": "string", + "id": "number", + "imdb_id?": "string", + "original_title": "string", + "overview?": "string", + "popularity": "number", + "poster_path": "string", + "production_companies": [ + { + "name": "string", + "id": "number" + } + ], + "production_countries": [ + { + "iso_3166_1": "string", + "name": "string" + }, + { + "iso_3166_1": "string", + "name": "string" + } + ], + "release_date?": "string", + "revenue": "number", + "runtime": "number", + "spoken_languages?": [ + { + "iso_639_1?": "string", + "name?": "string" + } + ], + "status": "string", + "tagline?": "string", + "title": "string", + "vote_average": "number", + "vote_count": "number" +} \ No newline at end of file diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Network/Related Movies/KMSimilarMoviesSource.h b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Related Movies/KMSimilarMoviesSource.h new file mode 100755 index 0000000..1adfe29 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Related Movies/KMSimilarMoviesSource.h @@ -0,0 +1,46 @@ +// +// KMRelatedMoviesSource.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMBaseSource.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * KMSimilarMoviesCompletionBlock is a completion handler block for the `KMSimilarMoviesSource` + * + * @param dataArray An array of `KMMovie` objects + * @param errorString An error string + * + * @see `KMMovie` + */ +//typedef void (^KMSimilarMoviesCompletionBlock)(NSArray* _Nullable dataArray, NSString* _Nullable errorString); + +/** + * `KMSimilarMoviesSource` is a networking class which can be used to request movies similar to a movie. + */ +@interface KMSimilarMoviesSource : KMBaseSource + +/** + * Class method returning a `KMSimilarMoviesSource` shared instance. + * + * @return `KMSimilarMoviesSource` instance + */ ++ (KMSimilarMoviesSource *)similarMoviesSource; + +/** + * Use this method to perform a GET request and fetch similar movies to a movie. + * + * @param movieId The movie id + * @param numberOfPages The number of similar movies pages + * @param completionBlock A block object to be executed when the request operation finishes. This block has no return value and takes two arguments: a collection of movies, and the error string in case of a request failure. + */ +- (NSArray*)getSimilarMovies:(NSString *)movieId numberOfPages:(NSString *)numberOfPages; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Network/Related Movies/KMSimilarMoviesSource.m b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Related Movies/KMSimilarMoviesSource.m new file mode 100755 index 0000000..b755e91 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Related Movies/KMSimilarMoviesSource.m @@ -0,0 +1,70 @@ +// +// KMRelatedMoviesSource.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMSimilarMoviesSource.h" +#import "KMSourceConfig.h" +#import "DataService.h" +#import "KMMovie.h" + +#define kSimilarMoviesUrlFormat @"%@/movie/%@/similar?api_key=%@" + +@implementation KMSimilarMoviesSource + +#pragma mark - Init Methods + ++ (KMSimilarMoviesSource *)similarMoviesSource +{ + static dispatch_once_t onceToken; + static KMSimilarMoviesSource* instance = nil; + + dispatch_once(&onceToken, ^{ + instance = [[KMSimilarMoviesSource alloc] init]; + }); + return instance; +} + +#pragma mark - Request Methods + +- (NSArray*)getSimilarMovies:(NSString *)movieId numberOfPages:(NSString *)numberOfPages +{ + NSString *url = [NSString stringWithFormat:@"%@&page=%@", [self prepareUrl:movieId], numberOfPages]; + id json = [[DataService sharedInstance] requestJSONWithURL:url]; + NSDictionary* infosDictionary = [self dictionaryFromResponseObject:json jsonPatternFile:@"KMSimilarMoviesSourceJsonPattern.json"]; + return [self processResponseObject:infosDictionary]; +} + +#pragma mark - Data Parsing + +- (NSArray *)processResponseObject:(NSDictionary *)data +{ + if (data) + { + NSArray* itemsList = [NSArray arrayWithArray:[data objectForKey:@"results"]]; + NSMutableArray* sortedArray = [[NSMutableArray alloc] init]; + + for (NSDictionary* item in itemsList) + { + KMMovie* movie = [[KMMovie alloc] initWithDictionary:item]; + [sortedArray addObject:movie]; + } + + return sortedArray; + } + + return nil; +} + + +#pragma mark - Private + +- (NSString *)prepareUrl:(NSString *)movieId +{ + return [NSString stringWithFormat:kSimilarMoviesUrlFormat, [KMSourceConfig config].hostUrlString, movieId, [KMSourceConfig config].apiKey]; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Network/Related Movies/KMSimilarMoviesSourceJsonPattern.json b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Related Movies/KMSimilarMoviesSourceJsonPattern.json new file mode 100755 index 0000000..27e7935 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Network/Related Movies/KMSimilarMoviesSourceJsonPattern.json @@ -0,0 +1,17 @@ +{ + "total_results" : "number", + "results" : [ + { + "original_title" : "string", + "poster_path?" : "string", + "release_date?" : "string", + "id" : "number", + "adult" : "number", + "title" : "string", + "popularity" : "number", + "vote_count" : "number", + "vote_average" : "number", + "backdrop_path?" : "string" + } +] +} \ No newline at end of file diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Ressources/Plists/Network Config/KMSourceConfig.plist b/Examples/coobjcBaseExample/coobjcBaseExample/Ressources/Plists/Network Config/KMSourceConfig.plist new file mode 100755 index 0000000..500520a --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Ressources/Plists/Network Config/KMSourceConfig.plist @@ -0,0 +1,14 @@ + + + + + version + 0.1 + build + DevBuild + themoviedb_host + http://api.themoviedb.org/3 + api_key + 328c283cd27bd1877d9080ccb1604c91 + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/Activity Indicator/KMActivityIndicator.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/Activity Indicator/KMActivityIndicator.h new file mode 100755 index 0000000..a237755 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/Activity Indicator/KMActivityIndicator.h @@ -0,0 +1,44 @@ +// +// KMActivityIndicator.h +// +// +// Created by Kevin Mindeguia on 19/08/2013. +// Copyright (c) 2013 iKode Ltd. All rights reserved. +// + +#import +#import + +/** + * `KMActivityIndicator` is a fancy activity indicator showing three dots animating. + */ +@interface KMActivityIndicator : UIView + +/** + * A Boolean value that controls whether the receiver is hidden when the animation is stopped. + */ +@property (nonatomic) BOOL hidesWhenStopped; + +/** + * The color of the activity indicator. + */ +@property (nonatomic, strong) UIColor *color; + +/** + * Starts the animation of the activity indicator. + */ +- (void)startAnimating; + +/** + * Stops the animation of the activity indicator. + */ +- (void)stopAnimating; + +/** + * Returns whether the receiver is animating. + * + * @return `YES` if the receiver is animating, otherwise `NO`. + */ +- (BOOL)isAnimating; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/Activity Indicator/KMActivityIndicator.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/Activity Indicator/KMActivityIndicator.m new file mode 100755 index 0000000..7be6c5c --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/Activity Indicator/KMActivityIndicator.m @@ -0,0 +1,187 @@ +// +// KMActivityIndicator.m +// +// +// Created by Kevin Mindeguia on 19/08/2013. +// Copyright (c) 2013 iKode Ltd. All rights reserved. +// + +#import "KMActivityIndicator.h" + +#define ANIMATION_DURATION_SECS 0.5 + +typedef enum { + KMActivityIndicatorStepZero = 0, + KMActivityIndicatorStepOne, + KMActivityIndicatorStepTwo, + KMActivityIndicatorStepThree, + KMActivityIndicatorStepFour, +} KMActivityIndicatorStep; + +@interface KMActivityIndicator () + +@property (nonatomic, assign) CGFloat dotRadius; +@property (nonatomic, assign) KMActivityIndicatorStep stepNumber; +@property (nonatomic, assign) BOOL isAnimating; +@property (nonatomic, assign) CGRect firstPoint, secondPoint, thirdPoint, fourthPoint; +@property (nonatomic, strong) CALayer *firstDot, *secondDot, *thirdDot; +@property (nonatomic, strong) NSTimer *timer; + +@end + +@implementation KMActivityIndicator + +- (void)awakeFromNib +{ + [super awakeFromNib]; + [self setupViewLayout:self.frame]; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + + if (self) + { + [self setupViewLayout:frame]; + } + + return self; +} + +- (void)setupViewLayout:(CGRect)frame +{ + _stepNumber = KMActivityIndicatorStepZero; + _isAnimating = NO; + _hidesWhenStopped = YES; + _color = [UIColor colorWithRed:241/255.0f green:196/255.0f blue:15/255.0f alpha:1.0]; + + _dotRadius = frame.size.height <= frame.size.width ? frame.size.width/12 : frame.size.height/12; + _firstPoint = CGRectMake(frame.size.width/4-_dotRadius, frame.size.height/2-_dotRadius, 2*_dotRadius, 2*_dotRadius); + _secondPoint = CGRectMake(frame.size.width/2-_dotRadius, frame.size.height/4-_dotRadius, 2*_dotRadius, 2*_dotRadius); + _thirdPoint = CGRectMake(3*frame.size.width/4-_dotRadius, frame.size.height/2-_dotRadius, 2*_dotRadius, 2*_dotRadius); + _fourthPoint = CGRectMake(frame.size.width/2-_dotRadius, 3*frame.size.height/4-_dotRadius, 2*_dotRadius, 2*_dotRadius); + + //First dot is the one that moves straight up and down + _firstDot = [CALayer layer]; + [_firstDot setMasksToBounds:YES]; + [_firstDot setBackgroundColor:[self.color CGColor]]; + [_firstDot setCornerRadius:_dotRadius]; + [_firstDot setBounds:CGRectMake(0.0f, 0.0f, _dotRadius*2, _dotRadius*2)]; + _firstDot.frame = _fourthPoint; + + //Second dot is the one that moves straight left and right + _secondDot = [CALayer layer]; + [_secondDot setMasksToBounds:YES]; + [_secondDot setBackgroundColor:[self.color CGColor]]; + [_secondDot setCornerRadius:_dotRadius]; + [_secondDot setBounds:CGRectMake(0.0f, 0.0f, _dotRadius*2, _dotRadius*2)]; + _secondDot.frame = _firstPoint; + + //Third dot is the one that moves around all four positions clockwise + _thirdDot = [CALayer layer]; + [_thirdDot setMasksToBounds:YES]; + [_thirdDot setBackgroundColor:[self.color CGColor]]; + [_thirdDot setCornerRadius:_dotRadius]; + [_thirdDot setBounds:CGRectMake(0.0f, 0.0f, _dotRadius*2, _dotRadius*2)]; + _thirdDot.frame = _thirdPoint; + + [[self layer] addSublayer:_firstDot]; + [[self layer] addSublayer:_secondDot]; + [[self layer] addSublayer:_thirdDot]; + + self.layer.hidden = YES; +} + +- (void)startAnimating +{ + if (!_isAnimating) + { + _isAnimating = YES; + + self.layer.hidden = NO; + + _timer = [NSTimer scheduledTimerWithTimeInterval:ANIMATION_DURATION_SECS target:self selector:@selector(animateNextStep) userInfo:nil repeats:YES]; + } +} + +- (void)stopAnimating +{ + _isAnimating = NO; + + if (self.hidesWhenStopped) + { + self.layer.hidden = YES; + } + + [_timer invalidate]; + + _stepNumber = KMActivityIndicatorStepZero; + _firstDot.frame = _fourthPoint; + _secondDot.frame = _firstPoint; + _thirdDot.frame = _thirdPoint; +} + +- (void)animateNextStep +{ + switch (_stepNumber) + { + case KMActivityIndicatorStepZero: + { + [CATransaction begin]; + [CATransaction setAnimationDuration:ANIMATION_DURATION_SECS]; + _firstDot.frame = _secondPoint; + _thirdDot.frame = _fourthPoint; + [CATransaction commit]; + break; + } + case KMActivityIndicatorStepOne: + { + [CATransaction begin]; + [CATransaction setAnimationDuration:ANIMATION_DURATION_SECS]; + _secondDot.frame = _thirdPoint; + _thirdDot.frame = _firstPoint; + [CATransaction commit]; + break; + } + case KMActivityIndicatorStepTwo: + { + [CATransaction begin]; + [CATransaction setAnimationDuration:ANIMATION_DURATION_SECS]; + _firstDot.frame = _fourthPoint; + _thirdDot.frame = _secondPoint; + [CATransaction commit]; + break; + } + case KMActivityIndicatorStepThree: + { + [CATransaction begin]; + [CATransaction setAnimationDuration:ANIMATION_DURATION_SECS]; + _secondDot.frame = _firstPoint; + _thirdDot.frame = _thirdPoint; + [CATransaction commit]; + break; + } + case KMActivityIndicatorStepFour: + { + [CATransaction begin]; + [CATransaction setAnimationDuration:ANIMATION_DURATION_SECS]; + _firstDot.frame = _secondPoint; + _thirdDot.frame = _fourthPoint; + [CATransaction commit]; + _stepNumber = KMActivityIndicatorStepZero; + } + default: + break; + } + + _stepNumber++; +} + +- (BOOL)isAnimating +{ + return _isAnimating; +} + + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/Details Page View/KMScrollingHeaderView.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/Details Page View/KMScrollingHeaderView.h new file mode 100755 index 0000000..adc6c2c --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/Details Page View/KMScrollingHeaderView.h @@ -0,0 +1,87 @@ +// +// KMScrollingHeaderView.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import + +@class KMScrollingHeaderView; + +/** + * `KMScrollingHeaderViewDelegate` is a delegate protocol used for notifying its delegate of some events triggered by the `KMScrollingHeaderView` + */ +@protocol KMScrollingHeaderViewDelegate + +@required +/** + * Asks the delegate to set the header's imageview. + * + * @param scrollingHeaderView A scrolling header view object requesting the imageview. + * @param imageView The scrolling header view's imageview. + */ +- (void)detailsPage:(KMScrollingHeaderView *)scrollingHeaderView headerImageView:(UIImageView *)imageView; + +@optional +/** + * Notifies the delegate that the header image view was selected + * + * @param scrollingHeaderView A scrolling header view object + * @param imageView The selected image ciew + */ +- (void)detailsPage:(KMScrollingHeaderView *)scrollingHeaderView headerImageViewWasSelected:(UIImageView *)imageView; + +@end + +/** + * `KMScrollingHeaderView` is an easy way to display fancy headers to scrolling content. It uses a UITableView as an easy way to layout the scrolling content. + */ +@interface KMScrollingHeaderView : UIView + +/** +* The height of the header imageView. Default: 375.0f. +*/ +@property (nonatomic) CGFloat headerImageViewHeight; + +/** + * Zoom scaling factor for the header imageView. Default value is 300.0f. + * + * @discussion Increasing the value will dicrease the scaling animation rendering. Decreasing the value will increase the scaling animation rendering. + */ +@property (nonatomic) CGFloat headerImageViewScalingFactor; + +/** + * The scrolling offset to which the navbarView should start fading. + * + * @discussion If value is image header height, user will have to scroll to the top of the screen to make the nav bar appear. Default value is nav bar's height. + */ +@property (nonatomic) CGFloat navbarViewFadingOffset; + +/** + * The tableview containing the scrolling data. + */ +@property (nonatomic, strong) UITableView* tableView; + +/** + * The Navigation Bar view which should be displayed when the scrolling content covers the header. + */ +@property (nonatomic, strong) UIView* navbarView; + +/** + * The header image view content mode. Defaults to UIViewContentModeScaleAspectFit. + */ +@property (nonatomic) UIViewContentMode headerImageViewContentMode; + +/** + * The object that acts as the delegate of the scrolling header view. + */ +@property (nonatomic, weak) id delegate; + +/** + * Reloads the header image view and the scrolling header layout. Also reloads the rows and sections of the table view. + */ +- (void)reloadScrollingHeader; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/Details Page View/KMScrollingHeaderView.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/Details Page View/KMScrollingHeaderView.m new file mode 100755 index 0000000..89e84d6 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/Details Page View/KMScrollingHeaderView.m @@ -0,0 +1,274 @@ +// +// KMDetailsPageViewController.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMScrollingHeaderView.h" + +/** + * Change these values to customize you details page + * + * @define kDefaultImagePagerHeight : The header imageView's height. Increase value to show a bigger image. + * @define kDefaultTableViewHeaderMargin : Tableview's header height margin. + * @define kDefaultImageScalingFactor : Image view scale factor. Increase value to decrease scaling effect and vice versa. + * + */ +#define kDefaultImagePagerHeight 375.0f +#define kDefaultTableViewHeaderMargin 95.0f +#define kDefaultImageScalingFactor 450.0f + +@interface KMScrollingHeaderView () + +@property (nonatomic, strong) UIImageView* imageView; +@property (nonatomic, strong) UIButton* imageButton; + +@end + +@implementation KMScrollingHeaderView + +#pragma mark - Init Methods + +- (instancetype)init +{ + self = [super init]; + + if (self) + { + [self initialize]; + } + return self; +} + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) + { + [self initialize]; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)aDecoder +{ + self = [super initWithCoder:aDecoder]; + if (self) + { + [self initialize]; + } + return self; +} + +- (void)initialize +{ + _headerImageViewHeight = kDefaultImagePagerHeight; + _headerImageViewScalingFactor = kDefaultImageScalingFactor; + _headerImageViewContentMode = UIViewContentModeScaleAspectFit; + + [self setupTableView]; + [self setupTableViewHeader]; + [self setupImageView]; + + self.autoresizesSubviews = YES; + self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin; + self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin; +} + +- (void)dealloc +{ + [self.tableView removeObserver:self forKeyPath:@"contentOffset"]; +} + +#pragma mark - View layout + +- (void)layoutSubviews +{ + [super layoutSubviews]; + + _navbarViewFadingOffset = _headerImageViewHeight - (CGRectGetHeight(_navbarView.frame) + kDefaultTableViewHeaderMargin); + + if (!self.tableView) + [self setupTableView]; + + if (!self.tableView.tableHeaderView) + [self setupTableViewHeader]; + + if(!self.imageView) + [self setupImageView]; + + [self setupBackgroundColor]; + + [self setupImageButton]; + +} + +#pragma mark - Setup Methods + +- (void)setupTableView +{ + _tableView = [[UITableView alloc] initWithFrame:self.bounds]; + + self.tableView.backgroundColor = [UIColor clearColor]; + self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + + void *context = (__bridge void *)self; + + [self.tableView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:context]; + + [self addSubview:self.tableView]; +} + +- (void)setupTableViewHeader +{ + CGRect tableHeaderViewFrame = CGRectMake(0.0, 0.0, self.tableView.frame.size.width, self.headerImageViewHeight - kDefaultTableViewHeaderMargin); + UIView *tableHeaderView = [[UIView alloc] initWithFrame:tableHeaderViewFrame]; + tableHeaderView.backgroundColor = [UIColor clearColor]; + self.tableView.tableHeaderView = tableHeaderView; +} + +- (void)setupImageButton +{ + if (!self.imageButton) + self.imageButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, self.headerImageViewHeight)]; + + [self.imageButton addTarget:self action:@selector(imageButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; + [self.tableView.tableHeaderView addSubview:self.imageButton]; +} + +- (void)setupImageView +{ + self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0, self.tableView.frame.size.width, self.headerImageViewHeight)]; + self.imageView.backgroundColor = [UIColor blackColor]; + self.imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth; + self.imageView.clipsToBounds = YES; + self.imageView.contentMode = self.headerImageViewContentMode; + + [self insertSubview:self.imageView belowSubview:self.tableView]; + + if ([self.delegate respondsToSelector:@selector(detailsPage:headerImageView:)]) + [self.delegate detailsPage:self headerImageView:self.imageView]; + +} + +- (void)setupBackgroundColor +{ + self.backgroundColor = [UIColor clearColor]; + self.tableView.backgroundColor = [UIColor clearColor]; +} + +- (void)setupImageViewGradient +{ + CAGradientLayer *gradientLayer = [CAGradientLayer layer]; + gradientLayer.frame = self.imageView.bounds; + gradientLayer.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:0 green:0 blue:0 alpha:1] CGColor], [(id)[UIColor colorWithRed:0 green:0 blue:0 alpha:0] CGColor], nil]; + + gradientLayer.startPoint = CGPointMake(0.6f, 0.6); + gradientLayer.endPoint = CGPointMake(0.6f, 1.0f); + + self.imageView.layer.mask = gradientLayer; +} + +#pragma mark - Data Reload + +- (void)reloadScrollingHeader; +{ + if ([self.delegate respondsToSelector:@selector(detailsPage:headerImageView:)]) + [self.delegate detailsPage:self headerImageView:self.imageView]; + + [self.tableView reloadData]; +} + +#pragma mark - Setters + +- (void)setNavbarView:(UIView *)navbarView +{ + if (_navbarView == navbarView) + { + return; + } + _navbarView = navbarView; + + [_navbarView setAlpha:0.0]; + [_navbarView setHidden:YES]; +} + +- (void)setHeaderImageViewContentMode:(UIViewContentMode)headerImageViewContentMode +{ + if (_headerImageViewContentMode == headerImageViewContentMode) + { + return; + } + + _headerImageViewContentMode = headerImageViewContentMode; + + self.imageView.contentMode = _headerImageViewContentMode; +} + +#pragma mark - KVO Methods + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if (context != (__bridge void *)self) + { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + return; + } + + if ((object == self.tableView) && ([keyPath isEqualToString:@"contentOffset"] == YES)) + { + [self scrollViewDidScrollWithOffset:self.tableView.contentOffset.y]; + return; + } +} + +#pragma mark - Action Methods + +- (void)imageButtonPressed:(UIButton *)button +{ + if ([self.delegate respondsToSelector:@selector(detailsPage:headerImageViewWasSelected:)]) + [self.delegate detailsPage:self headerImageViewWasSelected:self.imageView]; +} + +#pragma mark - ScrollView Methods + +- (void)scrollViewDidScrollWithOffset:(CGFloat)scrollOffset +{ + CGPoint scrollViewDragPoint = self.tableView.contentOffset; + + if (scrollOffset < 0) + { + self.imageView.transform = CGAffineTransformMakeScale(1 - (scrollOffset / self.headerImageViewScalingFactor), 1 - (scrollOffset / self.headerImageViewScalingFactor)); + } + else + { + self.imageView.transform = CGAffineTransformMakeScale(1.0, 1.0); + } + + [self animateNavigationBar:scrollOffset draggingPoint:scrollViewDragPoint]; +} + +- (void)animateNavigationBar:(CGFloat)scrollOffset draggingPoint:(CGPoint)scrollViewDragPoint +{ + if(scrollOffset > _navbarViewFadingOffset && _navbarView.alpha == 0.0) + { + _navbarView.alpha = 0; + _navbarView.hidden = NO; + + [UIView animateWithDuration:0.3 animations:^{ + _navbarView.alpha = 1; + }]; + } + else if(scrollOffset < _navbarViewFadingOffset && _navbarView.alpha == 1.0) + { + [UIView animateWithDuration:0.3 animations:^{ + _navbarView.alpha = 0; + } completion: ^(BOOL finished) { + _navbarView.hidden = YES; + }]; + } +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/Indexed Collection View/KMIndexedCollectionView.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/Indexed Collection View/KMIndexedCollectionView.h new file mode 100755 index 0000000..4052497 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/Indexed Collection View/KMIndexedCollectionView.h @@ -0,0 +1,21 @@ +// +// KMCellCollectionView.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 02/12/2013. +// Copyright (c) 2013 iKode Ltd. All rights reserved. +// + +#import + +/** + * `KMIndexedCollectionView` is a subclass of `UICollectionView` which helps using collection views in UITableViewCells + */ +@interface KMIndexedCollectionView : UICollectionView + +/** + * The `UITableViewCell` indexPath.row in which the collection view is nested in. + */ +@property (nonatomic, assign) NSInteger index; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/Indexed Collection View/KMIndexedCollectionView.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/Indexed Collection View/KMIndexedCollectionView.m new file mode 100755 index 0000000..ae6b168 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/Indexed Collection View/KMIndexedCollectionView.m @@ -0,0 +1,14 @@ +// +// KMCellCollectionView.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 02/12/2013. +// Copyright (c) 2013 iKode Ltd. All rights reserved. +// + +#import "KMIndexedCollectionView.h" + +@implementation KMIndexedCollectionView + + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/StoryBoards/KMDiscoverStoryboard.storyboard b/Examples/coobjcBaseExample/coobjcBaseExample/UI/StoryBoards/KMDiscoverStoryboard.storyboard new file mode 100755 index 0000000..dde55c1 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/StoryBoards/KMDiscoverStoryboard.storyboard @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/StoryBoards/KMMovieDetailsStoryboard.storyboard b/Examples/coobjcBaseExample/coobjcBaseExample/UI/StoryBoards/KMMovieDetailsStoryboard.storyboard new file mode 100755 index 0000000..21589d9 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/StoryBoards/KMMovieDetailsStoryboard.storyboard @@ -0,0 +1,233 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/StoryBoards/KMSimilarMoviesStoryboard.storyboard b/Examples/coobjcBaseExample/coobjcBaseExample/UI/StoryBoards/KMSimilarMoviesStoryboard.storyboard new file mode 100755 index 0000000..608547a --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/StoryBoards/KMSimilarMoviesStoryboard.storyboard @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListCell.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListCell.h new file mode 100755 index 0000000..542e67c --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListCell.h @@ -0,0 +1,27 @@ +// +// KMDiscoverListCell.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 03/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import +#import "KMGillSansLabel.h" +#import + +@interface KMDiscoverListCell : UITableViewCell + +@property (nonatomic, strong) COCoroutine *co; + +/** + * The movie's backdrop image view + */ +@property (weak, nonatomic) IBOutlet UIImageView *timelineImageView; + +/** + * The movie's title label. + */ +@property (weak, nonatomic) IBOutlet KMGillSansLightLabel *titleLabel; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListCell.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListCell.m new file mode 100755 index 0000000..f70b06c --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListCell.m @@ -0,0 +1,43 @@ +// +// KMDiscoverListCell.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 03/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMDiscoverListCell.h" + +@implementation KMDiscoverListCell + +#pragma mark - +#pragma mark Cell Init Methods + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + // Initialization code + } + return self; +} + +#pragma mark - +#pragma mark View Lifecycle + +- (void)awakeFromNib +{ + [super awakeFromNib]; +} + +#pragma mark - +#pragma mark Cell Methods + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated +{ + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListViewController.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListViewController.h new file mode 100755 index 0000000..29da93e --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListViewController.h @@ -0,0 +1,14 @@ +// +// KMDiscoverListViewController.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 03/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import +#import "KMNetworkLoadingViewController.h" + +@interface KMDiscoverListViewController : UIViewController + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListViewController.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListViewController.m new file mode 100755 index 0000000..b439a95 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Discover List/KMDiscoverListViewController.m @@ -0,0 +1,173 @@ +// +// KMDiscoverListViewController.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 03/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "UIImageView+WebCache.h" +#import "KMDiscoverListViewController.h" +#import "KMStoryBoardUtilities.h" +#import "KMDiscoverListCell.h" +#import "KMDiscoverSource.h" +#import "KMMovie.h" +#import "KMMovieDetailsViewController.h" + + +@interface KMDiscoverListViewController () + +@property (weak, nonatomic) IBOutlet UIView *networkLoadingContainerView; +@property (weak, nonatomic) IBOutlet UITableView *tableView; + +@property (nonatomic, strong) NSMutableArray* dataSource; +@property (nonatomic, strong) UIRefreshControl* refreshControl; +@property (nonatomic, strong) KMNetworkLoadingViewController* networkLoadingViewController; + +@end + +@implementation KMDiscoverListViewController + +#pragma mark - View Lifecycle + +- (void)viewWillAppear:(BOOL)animated +{ + [self.navigationController setNavigationBarHidden:NO animated:YES]; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + [self setupTableView]; + [self requestMovies]; +} + +#pragma mark - Setup Methods + +- (void)setupTableView +{ + if (!_refreshControl) + { + _refreshControl = [[UIRefreshControl alloc] initWithFrame:CGRectMake(0, -44, 320, 44)]; + + [self.refreshControl addTarget:self action:@selector(refreshFeed) forControlEvents:UIControlEventValueChanged]; + [self.tableView addSubview:_refreshControl]; + } +} + +#pragma mark - Container Segue Methods + +- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender +{ + if ([segue.identifier isEqualToString:[NSString stringWithFormat:@"%s", class_getName([KMNetworkLoadingViewController class])]]) + { + self.networkLoadingViewController = segue.destinationViewController; + self.networkLoadingViewController.delegate = self; + } +} + +#pragma mark - Network Requests methods + +- (void)refreshFeed +{ + [self requestMovies]; +} + +- (void)requestMovies +{ + co_launch(^{ + NSArray *dataArray = [[KMDiscoverSource discoverSource] getDiscoverList:@"1"]; + [self.refreshControl endRefreshing]; + + if (dataArray != nil) + { + [self processData:dataArray]; + } + else + { + [self.networkLoadingViewController showErrorView]; + } + }); +} + +#pragma mark - Fetched Data Processing + +- (void)processData:(NSArray *)data +{ + if ([data count] == 0) + { + [self.networkLoadingViewController showNoContentView]; + } + else + { + [self hideLoadingView]; + + if (!self.dataSource) + { + self.dataSource = [[NSMutableArray alloc] init]; + } + self.dataSource = [NSMutableArray arrayWithArray:data]; + + [self.tableView reloadData]; + } +} + +#pragma mark - KMNetworkLoadingViewDelegate + +-(void)retryRequestButtonWasPressed:(KMNetworkLoadingViewController *)viewController +{ + [self requestMovies]; +} + +#pragma mark - UITableViewDataSource + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return [self.dataSource count]; + +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + KMDiscoverListCell* cell = (KMDiscoverListCell*)[tableView dequeueReusableCellWithIdentifier:@"DiscoverListCell" forIndexPath:indexPath]; + + [cell.co cancel]; + UIImageView *imageView = cell.timelineImageView; + NSString *url = [[self.dataSource objectAtIndex:indexPath.row] movieOriginalBackdropImageUrl]; + imageView.image = nil; + [imageView setImageWithURL:url]; + + [cell.titleLabel setText:[[self.dataSource objectAtIndex:indexPath.row] movieTitle]]; + + return cell; +} + +#pragma mark - UITableViewDelegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + KMMovieDetailsViewController* viewController = (KMMovieDetailsViewController*)[KMStoryBoardUtilities viewControllerForStoryboardName:@"KMMovieDetailsStoryboard" class:[KMMovieDetailsViewController class]]; + + [self.navigationController pushViewController:viewController animated:YES]; + + viewController.movieDetails = [self.dataSource objectAtIndex:indexPath.row]; +} + +#pragma mark - KMNetworkLoadingViewController Methods + +- (void)hideLoadingView +{ + [UIView transitionWithView:self.view duration:0.3f options:UIViewAnimationOptionTransitionCrossDissolve animations:^(void) { + + [self.networkLoadingContainerView removeFromSuperview]; + + } completion:^(BOOL finished) { + + [self.networkLoadingViewController removeFromParentViewController]; + self.networkLoadingContainerView = nil; + + }]; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/KMMovieDetailsViewController.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/KMMovieDetailsViewController.h new file mode 100755 index 0000000..990d426 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/KMMovieDetailsViewController.h @@ -0,0 +1,22 @@ +// +// KMMovieDetailsViewController.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import +#import "KMScrollingHeaderView.h" +#import "KMMovie.h" +#import "KMGillSansLabel.h" +#import "KMNetworkLoadingViewController.h" + +@interface KMMovieDetailsViewController : UIViewController + +/** + * The movie details object. + */ +@property (strong, nonatomic) KMMovie* movieDetails; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/KMMovieDetailsViewController.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/KMMovieDetailsViewController.m new file mode 100755 index 0000000..a59df70 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/KMMovieDetailsViewController.m @@ -0,0 +1,424 @@ +// +// KMMovieDetailsViewController.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMMovieDetailsViewController.h" +#import "KMStoryBoardUtilities.h" +#import "KMMovieDetailsCells.h" +#import "KMMovieDetailsSource.h" +#import "KMSimilarMoviesSource.h" +#import "KMSimilarMoviesViewController.h" +#import "UIImageView+WebCache.h" + +@interface KMMovieDetailsViewController () + +@property (weak, nonatomic) IBOutlet UIView *navigationBarView; +@property (weak, nonatomic) IBOutlet UIView *networkLoadingContainerView; +@property (weak, nonatomic) IBOutlet KMScrollingHeaderView* scrollingHeaderView; +@property (weak, nonatomic) IBOutlet KMGillSansLightLabel *navBarTitleLabel; + +@property (strong, nonatomic) NSMutableArray* similarMoviesDataSource; +@property (strong, nonatomic) KMNetworkLoadingViewController* networkLoadingViewController; +@property (assign) CGPoint scrollViewDragPoint; + +@end + +@implementation KMMovieDetailsViewController + +#pragma mark - +#pragma mark View Lifecycle + +- (void)viewWillAppear:(BOOL)animated +{ + [self.navigationController setNavigationBarHidden:YES animated:YES]; + + self.navigationController.interactivePopGestureRecognizer.delegate = nil; + + [super viewWillAppear:animated]; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + [self setupNavbarButtons]; + [self requestMovieDetails]; + [self setupDetailsPageView]; +} + +#pragma mark - Setup Methods + +- (void)setupDetailsPageView +{ + self.scrollingHeaderView.tableView.dataSource = self; + self.scrollingHeaderView.tableView.delegate = self; + self.scrollingHeaderView.delegate = self; + self.scrollingHeaderView.tableView.separatorColor = [UIColor clearColor]; + self.scrollingHeaderView.headerImageViewContentMode = UIViewContentModeTop; + + [self.scrollingHeaderView reloadScrollingHeader]; +} + +- (void)setupNavbarButtons +{ + UIButton *buttonBack = [UIButton buttonWithType:UIButtonTypeCustom]; + + buttonBack.frame = CGRectMake(10, 31, 22, 22); + [buttonBack setImage:[UIImage imageNamed:@"back_icon"] forState:UIControlStateNormal]; + [buttonBack addTarget:self action:@selector(popViewController:) forControlEvents:UIControlEventTouchUpInside]; + + [self.view addSubview:buttonBack]; + + self.navBarTitleLabel.text = self.movieDetails.movieTitle; +} + +#pragma mark - Container Segue Methods + +- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender +{ + if ([segue.identifier isEqualToString:[NSString stringWithFormat:@"%s", class_getName([KMNetworkLoadingViewController class])]]) + { + self.networkLoadingViewController = segue.destinationViewController; + self.networkLoadingViewController.delegate = self; + } +} + +#pragma mark - +#pragma mark Network Request Methods + +- (void)requestSimilarMovies +{ + co_launch(^{ + NSArray *dataArray = [[KMSimilarMoviesSource similarMoviesSource] getSimilarMovies:self.movieDetails.movieId numberOfPages:@"1"]; + if (dataArray != nil) + { + [self processSimilarMoviesData:dataArray]; + } + else + { + [self.networkLoadingViewController showErrorView]; + } + }); + +} + +- (void)requestMovieDetails +{ + co_launch(^{ + KMMovieDetailsSource* source = [KMMovieDetailsSource movieDetailsSource]; + KMMovie *movieDetails = [source getMovieDetails:self.movieDetails.movieId]; + if (movieDetails) { + [self processMovieDetailsData:movieDetails]; + } + else{ + [self.networkLoadingViewController showErrorView]; + } + }); +} + +#pragma mark - Fetched Data Processing + +- (void)processSimilarMoviesData:(NSArray *)data +{ + if ([data count] == 0) + { + [self.networkLoadingViewController showNoContentView]; + } + else + { + if (!self.similarMoviesDataSource) + { + self.similarMoviesDataSource = [[NSMutableArray alloc] init]; + } + + self.similarMoviesDataSource = [NSMutableArray arrayWithArray:data]; + + [self.scrollingHeaderView reloadScrollingHeader]; + + [self hideLoadingView]; + } +} + +- (void)processMovieDetailsData:(KMMovie *)data +{ + self.movieDetails = data; + + [self requestSimilarMovies]; +} + +#pragma mark - Action Methods + +- (void)viewAllSimilarMoviesButtonPressed:(id)sender +{ + KMSimilarMoviesViewController* viewController = (KMSimilarMoviesViewController*)[KMStoryBoardUtilities viewControllerForStoryboardName:@"KMSimilarMoviesStoryboard" class:[KMSimilarMoviesViewController class]]; + + viewController.moviesDataSource = self.similarMoviesDataSource; + + [self.navigationController pushViewController:viewController animated:YES]; +} + +- (IBAction)popViewController:(id)sender +{ + [self.navigationController popViewControllerAnimated:YES]; +} + +#pragma mark - UITableViewDataSource + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return 7; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + // A much nicer way to deal with this would be to extract this code to a factory class, that would take care of building the cells. + UITableViewCell* cell = nil; + + switch (indexPath.row) + { + case 0: + { + KMMovieDetailsCell *detailsCell = [tableView dequeueReusableCellWithIdentifier:@"KMMovieDetailsCell"]; + + if(detailsCell == nil) + detailsCell = [KMMovieDetailsCell movieDetailsCell]; + + [detailsCell.co cancel]; + UIImageView *imageView = detailsCell.posterImageView; + NSString *url = self.movieDetails.movieThumbnailBackdropImageUrl; + [imageView setImageWithURL:url]; + + detailsCell.movieTitleLabel.text = self.movieDetails.movieTitle; + detailsCell.genresLabel.text = self.movieDetails.movieGenresString; + + cell = detailsCell; + + break; + } + case 1: + { + KMMovieDetailsDescriptionCell *descriptionCell = [tableView dequeueReusableCellWithIdentifier:@"KMMovieDetailsDescriptionCell"]; + + if(descriptionCell == nil) + descriptionCell = [KMMovieDetailsDescriptionCell movieDetailsDescriptionCell]; + + descriptionCell.movieDescriptionLabel.text = self.movieDetails.movieSynopsis; + + cell = descriptionCell; + } + break; + case 2: + { + KMMovieDetailsSimilarMoviesCell *contributionCell = [tableView dequeueReusableCellWithIdentifier:@"KMMovieDetailsSimilarMoviesCell"]; + + if(contributionCell == nil) + contributionCell = [KMMovieDetailsSimilarMoviesCell movieDetailsSimilarMoviesCell]; + + [contributionCell.viewAllSimilarMoviesButton addTarget:self action:@selector(viewAllSimilarMoviesButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; + + cell = contributionCell; + + break; + } + case 3: + { + KMMovieDetailsCommentsCell *commentsCell = [tableView dequeueReusableCellWithIdentifier:@"KMMovieDetailsCommentsCell"]; + + if(commentsCell == nil) + commentsCell = [KMMovieDetailsCommentsCell movieDetailsCommentsCell]; + + commentsCell.usernameLabel.text = @"Kevin Mindeguia"; + commentsCell.commentLabel.text = @"Macaroon croissant I love tiramisu I love chocolate bar chocolate bar. Cheesecake dessert croissant sweet. Muffin gummies gummies biscuit bear claw. "; + [commentsCell.cellImageView setImage:[UIImage imageNamed:@"kevin_avatar"]]; + + cell = commentsCell; + + break; + } + case 4: + { + KMMovieDetailsCommentsCell *commentsCell = [tableView dequeueReusableCellWithIdentifier:@"KMMovieDetailsCommentsCell"]; + + if(commentsCell == nil) + commentsCell = [KMMovieDetailsCommentsCell movieDetailsCommentsCell]; + + commentsCell.usernameLabel.text = @"Andrew Arran"; + commentsCell.commentLabel.text = @"Chocolate bar carrot cake candy canes oat cake dessert. Topping bear claw dragée. Sugar plum jelly cupcake."; + [commentsCell.cellImageView setImage:[UIImage imageNamed:@"scrat_avatar"]]; + + cell = commentsCell; + + break; + } + case 5: + { + KMMovieDetailsViewAllCommentsCell *viewAllCommentsCell = [tableView dequeueReusableCellWithIdentifier:@"KMMovieDetailsViewAllCommentsCell"]; + + if(viewAllCommentsCell == nil) + viewAllCommentsCell = [KMMovieDetailsViewAllCommentsCell movieDetailsAllCommentsCell]; + + cell = viewAllCommentsCell; + + break; + } + case 6: + { + KMComposeCommentCell *composeCommentCell = [tableView dequeueReusableCellWithIdentifier:@"KMComposeCommentCell"]; + + if(composeCommentCell == nil) + composeCommentCell = [KMComposeCommentCell composeCommentsCell]; + + cell = composeCommentCell; + + break; + } + default: + break; + } + return cell; +} + +#pragma mark - UITableViewDelegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + [tableView deselectRowAtIndexPath:indexPath animated:NO]; +} + +- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath +{ + cell.contentView.backgroundColor = [UIColor clearColor]; + + if ([cell isKindOfClass:[KMMovieDetailsSimilarMoviesCell class]]) + { + KMMovieDetailsSimilarMoviesCell* similarMovieCell = (KMMovieDetailsSimilarMoviesCell*)cell; + + [similarMovieCell setCollectionViewDataSourceDelegate:self index:indexPath.row]; + } + + if ([cell isKindOfClass:[KMMovieDetailsCommentsCell class]]) + { + cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, cell.bounds.size.width); + } +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + // A much nicer way to deal with this would be to extract this code to a factory class, that would return the cells' height. + CGFloat height = 0; + + switch (indexPath.row) + { + case 0: + { + height = 120; + break; + } + case 1: + { + height = 119; + break; + } + case 2: + { + if ([self.similarMoviesDataSource count] == 0) + { + height = 0; + } + else + { + height = 143; + } + break; + } + case 5: + { + height = 46; + break; + } + case 6: + { + height = 62; + break; + } + + default: + { + height = 100; + break; + } + } + + return height; +} + +#pragma mark - UICollectionViewDataSource + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section; +{ + return [self.similarMoviesDataSource count]; +} + +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath; +{ + KMSimilarMoviesCollectionViewCell* cell = (KMSimilarMoviesCollectionViewCell*)[collectionView dequeueReusableCellWithReuseIdentifier:@"KMSimilarMoviesCollectionViewCell" forIndexPath:indexPath]; + + [cell.cellImageView setImageWithURL:[[self.similarMoviesDataSource objectAtIndex:indexPath.row] movieThumbnailPosterImageUrl]]; + + return cell; +} + +#pragma mark - UICollectionView Delegate + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath; +{ + KMMovieDetailsViewController* viewController = (KMMovieDetailsViewController*)[KMStoryBoardUtilities viewControllerForStoryboardName:@"KMMovieDetailsStoryboard" class:[KMMovieDetailsViewController class]]; + + [self.navigationController pushViewController:viewController animated:YES]; + + viewController.movieDetails = [self.similarMoviesDataSource objectAtIndex:indexPath.row]; +} + +#pragma mark - KMScrollingHeaderViewDelegate + +- (void)detailsPage:(KMScrollingHeaderView *)detailsPageView headerImageView:(UIImageView *)imageView +{ + [imageView setImageWithURL:[self.movieDetails movieOriginalBackdropImageUrl]]; +} + +#pragma mark - KMNetworkLoadingViewController + +- (void)hideLoadingView +{ + [UIView transitionWithView:self.view duration:0.3f options:UIViewAnimationOptionTransitionCrossDissolve animations:^(void){ + + [self.networkLoadingContainerView removeFromSuperview]; + + } completion:^(BOOL finished) { + + [self.networkLoadingViewController removeFromParentViewController]; + self.networkLoadingContainerView = nil; + + }]; + + self.scrollingHeaderView.navbarView = self.navigationBarView; +} + +#pragma mark - KMNetworkLoadingViewDelegate + +- (void)retryRequestButtonWasPressed:(KMNetworkLoadingViewController *)viewController +{ + [self requestSimilarMovies]; + [self requestMovieDetails]; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMComposeCommentCell.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMComposeCommentCell.h new file mode 100755 index 0000000..62abb96 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMComposeCommentCell.h @@ -0,0 +1,25 @@ +// +// KMComposeCommentCell.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import + +@interface KMComposeCommentCell : UITableViewCell + +/** + * The compose comment action button. + */ +@property (weak, nonatomic) IBOutlet UIButton *composeCommentButton; + +/** + * Call this method to create and configure a `KMComposeCommentCell` + * + * @return `KMComposeCommentCell` instance + */ ++ (KMComposeCommentCell *)composeCommentsCell; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMComposeCommentCell.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMComposeCommentCell.m new file mode 100755 index 0000000..8c6994e --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMComposeCommentCell.m @@ -0,0 +1,35 @@ +// +// KMComposeCommentCell.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMComposeCommentCell.h" + +@implementation KMComposeCommentCell + +#pragma mark - Cell Init Methods + ++ (KMComposeCommentCell *)composeCommentsCell +{ + KMComposeCommentCell* cell = [[[NSBundle mainBundle] loadNibNamed:@"KMComposeCommentCell" owner:self options:nil] objectAtIndex:0]; + + cell.selectionStyle = UITableViewCellSelectionStyleNone; + + return cell; +} + +#pragma mark - View Lifecycle + +- (void)awakeFromNib +{ + self.composeCommentButton.layer.borderColor = self.composeCommentButton.titleLabel.textColor.CGColor; + self.composeCommentButton.layer.borderWidth = 1.0f; + self.composeCommentButton.layer.cornerRadius = 15.0f; + + [super awakeFromNib]; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMComposeCommentCell.xib b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMComposeCommentCell.xib new file mode 100755 index 0000000..6e9af39 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMComposeCommentCell.xib @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCell.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCell.h new file mode 100755 index 0000000..a9b496c --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCell.h @@ -0,0 +1,49 @@ +// +// KMPhotoTimelineDetailsCell.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import +#import "KMGillSansLabel.h" +#import + +@interface KMMovieDetailsCell : UITableViewCell + +@property (nonatomic, strong) COCoroutine *co; + +/** + * The movie poster image view + */ +@property (weak, nonatomic) IBOutlet UIImageView *posterImageView; + +/** + * The movie title label + */ +@property (weak, nonatomic) IBOutlet KMGillSansLightLabel *movieTitleLabel; + +/** + * The movie genre label + */ +@property (weak, nonatomic) IBOutlet UILabel *genresLabel; + +/** + * The watch trailer button + */ +@property (weak, nonatomic) IBOutlet UIButton *watchTrailerButton; + +/** + * The bookmark action button + */ +@property (weak, nonatomic) IBOutlet UIButton *bookmarkButton; + +/** + * Call this method to create and configure a `KMMovieDetailsCell` + * + * @return `KMMovieDetailsCell` instance + */ ++ (KMMovieDetailsCell *)movieDetailsCell; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCell.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCell.m new file mode 100755 index 0000000..909f5d6 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCell.m @@ -0,0 +1,50 @@ +// +// KMPhotoTimelineDetailsCell.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMMovieDetailsCell.h" + +@implementation KMMovieDetailsCell + +#pragma mark - Init Methods + ++ (KMMovieDetailsCell *)movieDetailsCell +{ + KMMovieDetailsCell* cell = [[[NSBundle mainBundle] loadNibNamed:@"KMMovieDetailsCell" owner:self options:nil] objectAtIndex:0]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; +} + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + + // Initialization code + } + return self; +} + +#pragma mark - View Lifecycle + +- (void)awakeFromNib +{ + self.posterImageView.layer.cornerRadius = self.posterImageView.frame.size.width/2; + self.posterImageView.layer.masksToBounds = YES; + + self.watchTrailerButton.layer.borderColor = [UIColor colorWithRed:0/255.0 green:161/225.0 blue:0/255.0 alpha:1.0].CGColor; + self.watchTrailerButton.layer.cornerRadius = 15.0f; + +// self.bookmarkButton.layer.borderColor = self.bookmarkButton.titleLabel.textColor.CGColor; +// self.bookmarkButton.layer.borderWidth = 1.0f; +// self.bookmarkButton.layer.cornerRadius = 15.0f; + + [super awakeFromNib]; +} + +@end + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCell.xib b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCell.xib new file mode 100755 index 0000000..8cbef54 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCell.xib @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCells.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCells.h new file mode 100755 index 0000000..2a85167 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCells.h @@ -0,0 +1,21 @@ +// +// KMMovieDetailsCells.h +// Movies +// +// Created by Kevin Mindeguia on 29/01/16. +// Copyright © 2016 iKode Ltd. All rights reserved. +// + +#ifndef KMMovieDetailsCells_h +#define KMMovieDetailsCells_h + +#import "KMMovieDetailsCell.h" +#import "KMMovieDetailsDescriptionCell.h" +#import "KMMovieDetailsSimilarMoviesCell.h" +#import "KMSimilarMoviesCollectionViewCell.h" +#import "KMMovieDetailsPopularityCell.h" +#import "KMMovieDetailsCommentsCell.h" +#import "KMMovieDetailsViewAllCommentsCell.h" +#import "KMComposeCommentCell.h" + +#endif /* KMMovieDetailsCells_h */ diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCommentsCell.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCommentsCell.h new file mode 100755 index 0000000..aa8849a --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCommentsCell.h @@ -0,0 +1,35 @@ +// +// KMPhotoTimelineCommentsCell.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import + +@interface KMMovieDetailsCommentsCell : UITableViewCell + +/** + * The user name label + */ +@property (weak, nonatomic) IBOutlet UILabel *usernameLabel; + +/** + * The comment label + */ +@property (weak, nonatomic) IBOutlet UILabel *commentLabel; + +/** + * The user avatar image view + */ +@property (weak, nonatomic) IBOutlet UIImageView *cellImageView; + +/** + * Call this method to create and configure a `KMMovieDetailsCommentsCell` + * + * @return `KMMovieDetailsCommentsCell` instance + */ ++ (KMMovieDetailsCommentsCell *)movieDetailsCommentsCell; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCommentsCell.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCommentsCell.m new file mode 100755 index 0000000..53a21ca --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCommentsCell.m @@ -0,0 +1,34 @@ +// +// KMPhotoTimelineCommentsCell.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMMovieDetailsCommentsCell.h" + +@implementation KMMovieDetailsCommentsCell + +#pragma mark - Cell Init Methods + ++ (KMMovieDetailsCommentsCell *)movieDetailsCommentsCell +{ + KMMovieDetailsCommentsCell* cell = [[[NSBundle mainBundle] loadNibNamed:@"KMMovieDetailsCommentsCell" owner:self options:nil] objectAtIndex:0]; + + cell.selectionStyle = UITableViewCellSelectionStyleNone; + + return cell; +} + +#pragma mark - View Lifecycle + +- (void)awakeFromNib +{ + self.cellImageView.layer.cornerRadius = self.cellImageView.frame.size.width/2; + self.cellImageView.layer.masksToBounds = YES; + + [super awakeFromNib]; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCommentsCell.xib b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCommentsCell.xib new file mode 100755 index 0000000..0acc062 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsCommentsCell.xib @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsDescriptionCell.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsDescriptionCell.h new file mode 100755 index 0000000..b1061e9 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsDescriptionCell.h @@ -0,0 +1,26 @@ +// +// KMPhotoTimelineMapCellCell.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import +#import + +@interface KMMovieDetailsDescriptionCell : UITableViewCell + +/** + * The movie description label. + */ +@property (weak, nonatomic) IBOutlet UILabel *movieDescriptionLabel; + +/** + * Call this method to create and configure a `KMMovieDetailsDescriptionCell` + * + * @return `KMMovieDetailsDescriptionCell` instance + */ ++ (KMMovieDetailsDescriptionCell *)movieDetailsDescriptionCell; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsDescriptionCell.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsDescriptionCell.m new file mode 100755 index 0000000..1fd9578 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsDescriptionCell.m @@ -0,0 +1,24 @@ +// +// KMPhotoTimelineMapCellCell.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMMovieDetailsDescriptionCell.h" + +@implementation KMMovieDetailsDescriptionCell + +#pragma mark - Cell Init Methods + ++ (KMMovieDetailsDescriptionCell *)movieDetailsDescriptionCell +{ + KMMovieDetailsDescriptionCell* cell = [[[NSBundle mainBundle] loadNibNamed:@"KMMovieDetailsDescriptionCell" owner:self options:nil] objectAtIndex:0]; + + cell.selectionStyle = UITableViewCellSelectionStyleNone; + + return cell; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsDescriptionCell.xib b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsDescriptionCell.xib new file mode 100755 index 0000000..8e4aa3d --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsDescriptionCell.xib @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsPopularityCell.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsPopularityCell.h new file mode 100755 index 0000000..836674c --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsPopularityCell.h @@ -0,0 +1,35 @@ +// +// KMMovieDetailsPopularityCell.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import + +@interface KMMovieDetailsPopularityCell : UITableViewCell + +/** + * The popularity label + */ +@property (weak, nonatomic) IBOutlet UILabel *popularityLabel; + +/** + * The vote count label + */ +@property (weak, nonatomic) IBOutlet UILabel *voteCountLabel; + +/** + * The average vote score label + */ +@property (weak, nonatomic) IBOutlet UILabel *voteAverageLabel; + +/** + * Call this method to create and configure a `KMMovieDetailsPopularityCell` + * + * @return `KMMovieDetailsPopularityCell` instance + */ ++ (KMMovieDetailsPopularityCell *)movieDetailsPopularityCell; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsPopularityCell.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsPopularityCell.m new file mode 100755 index 0000000..df8a9ba --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsPopularityCell.m @@ -0,0 +1,24 @@ +// +// KMMovieDetailsPopularityCell.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMMovieDetailsPopularityCell.h" + +@implementation KMMovieDetailsPopularityCell + +#pragma mark - Cell Init Methods + ++ (KMMovieDetailsPopularityCell *)movieDetailsPopularityCell +{ + KMMovieDetailsPopularityCell* cell = [[[NSBundle mainBundle] loadNibNamed:@"KMMovieDetailsPopularityCell" owner:self options:nil] objectAtIndex:0]; + + cell.selectionStyle = UITableViewCellSelectionStyleNone; + + return cell; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsPopularityCell.xib b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsPopularityCell.xib new file mode 100755 index 0000000..480931b --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsPopularityCell.xib @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsSimilarMoviesCell.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsSimilarMoviesCell.h new file mode 100755 index 0000000..64cdaac --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsSimilarMoviesCell.h @@ -0,0 +1,44 @@ +// +// KMPhotoTimelineContributionsCell.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import +#import "KMGillSansLabel.h" +#import "KMIndexedCollectionView.h" + +@interface KMMovieDetailsSimilarMoviesCell : UITableViewCell + +/** + * The similar movies cell collection view + */ +@property (weak, nonatomic) IBOutlet KMIndexedCollectionView *collectionView; + +/** + * The similar movies action button + * + * @discussion Action button which takes user to `KMSimilarMoviesViewController` + * + * @see `KMSimilarMoviesViewController` + */ +@property (weak, nonatomic) IBOutlet UIButton *viewAllSimilarMoviesButton; + +/** + * Call this method to create and configure a `KMMovieDetailsSimilarMoviesCell` + * + * @return `KMMovieDetailsSimilarMoviesCell` instance + */ ++ (KMMovieDetailsSimilarMoviesCell *)movieDetailsSimilarMoviesCell; + +/** + * Use this method to set the collectionView's dataSource and delegate + * + * @param dataSourceDelegate The delegate object to which the collectionView should hold a reference to. + * @param index The indexPath.row of this UITableViewCell in it's tableView. + */ +- (void)setCollectionViewDataSourceDelegate:(id)dataSourceDelegate index:(NSInteger)index; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsSimilarMoviesCell.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsSimilarMoviesCell.m new file mode 100755 index 0000000..16fea7f --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsSimilarMoviesCell.m @@ -0,0 +1,38 @@ +// +// KMPhotoTimelineContributionsCell.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMMovieDetailsSimilarMoviesCell.h" + +@implementation KMMovieDetailsSimilarMoviesCell + +#pragma mark - Cell Init Methods + ++ (KMMovieDetailsSimilarMoviesCell *)movieDetailsSimilarMoviesCell +{ + KMMovieDetailsSimilarMoviesCell* cell = [[[NSBundle mainBundle] loadNibNamed:@"KMMovieDetailsSimilarMoviesCell" owner:self options:nil] objectAtIndex:0]; + + cell.selectionStyle = UITableViewCellSelectionStyleNone; + + return cell; +} + +#pragma mark - CollectionView Datasource Setup + +-(void)setCollectionViewDataSourceDelegate:(id)dataSourceDelegate index:(NSInteger)index +{ + UINib *nib = [UINib nibWithNibName:@"KMSimilarMoviesCollectionViewCell" bundle: nil]; + + [self.collectionView registerNib:nib forCellWithReuseIdentifier:@"KMSimilarMoviesCollectionViewCell"]; + self.collectionView.dataSource = dataSourceDelegate; + self.collectionView.delegate = dataSourceDelegate; + self.collectionView.index = index; + + [self.collectionView reloadData]; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsSimilarMoviesCell.xib b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsSimilarMoviesCell.xib new file mode 100755 index 0000000..6b41561 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsSimilarMoviesCell.xib @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsViewAllCommentsCell.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsViewAllCommentsCell.h new file mode 100755 index 0000000..852bbb8 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsViewAllCommentsCell.h @@ -0,0 +1,20 @@ +// +// KMPhotoTimelineViewAllCommentsCell.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import + +@interface KMMovieDetailsViewAllCommentsCell : UITableViewCell + +/** + * Call this method to create and configure a `KMMovieDetailsViewAllCommentsCell` + * + * @return `KMMovieDetailsViewAllCommentsCell` instance + */ ++ (KMMovieDetailsViewAllCommentsCell *)movieDetailsAllCommentsCell; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsViewAllCommentsCell.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsViewAllCommentsCell.m new file mode 100755 index 0000000..d34bcb1 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsViewAllCommentsCell.m @@ -0,0 +1,24 @@ +// +// KMPhotoTimelineViewAllCommentsCell.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMMovieDetailsViewAllCommentsCell.h" + +@implementation KMMovieDetailsViewAllCommentsCell + +#pragma mark - Cell Init Methods + ++ (KMMovieDetailsViewAllCommentsCell *)movieDetailsAllCommentsCell; +{ + KMMovieDetailsViewAllCommentsCell* cell = [[[NSBundle mainBundle] loadNibNamed:@"KMMovieDetailsViewAllCommentsCell" owner:self options:nil] objectAtIndex:0]; + + cell.selectionStyle = UITableViewCellSelectionStyleNone; + + return cell; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsViewAllCommentsCell.xib b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsViewAllCommentsCell.xib new file mode 100755 index 0000000..42a1453 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMMovieDetailsViewAllCommentsCell.xib @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMSimilarMoviesCollectionViewCell.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMSimilarMoviesCollectionViewCell.h new file mode 100755 index 0000000..86c11ed --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMSimilarMoviesCollectionViewCell.h @@ -0,0 +1,30 @@ +// +// KMSimilarMoviesCollectionViewCell.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import + +@interface KMSimilarMoviesCollectionViewCell : UICollectionViewCell + +/** + * The movie's poster image view + */ +@property (weak, nonatomic) IBOutlet UIImageView *cellImageView; + +/** + * The cell's background view + */ +@property (weak, nonatomic) IBOutlet UIView *cellBackgroundView; + +/** + * Call this method to create and configure a `KMSimilarMoviesCollectionViewCell` + * + * @return `KMSimilarMoviesCollectionViewCell` instance + */ ++ (KMSimilarMoviesCollectionViewCell *)similarMoviesCollectionViewCell; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMSimilarMoviesCollectionViewCell.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMSimilarMoviesCollectionViewCell.m new file mode 100755 index 0000000..243d12c --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMSimilarMoviesCollectionViewCell.m @@ -0,0 +1,48 @@ +// +// KMContributionCollectionViewCell.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 04/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMSimilarMoviesCollectionViewCell.h" + +static CGFloat const kImageViewCornerRadius = 2.0; + +@implementation KMSimilarMoviesCollectionViewCell + +#pragma mark - Cell Init Methods + ++ (KMSimilarMoviesCollectionViewCell *) similarMoviesCollectionViewCell +{ + KMSimilarMoviesCollectionViewCell* cell = [[[NSBundle mainBundle] loadNibNamed:@"KMSimilarMoviesCollectionViewCell" owner:self options:nil] objectAtIndex:0]; + + return cell; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // Initialization code + } + return self; +} + +#pragma mark - View Lifecycle + +- (void)awakeFromNib +{ + self.cellImageView.layer.cornerRadius = kImageViewCornerRadius; + self.cellImageView.layer.masksToBounds = YES; + + self.cellBackgroundView.layer.cornerRadius = self.cellImageView.layer.cornerRadius; + self.cellBackgroundView.layer.masksToBounds = YES; + self.cellBackgroundView.layer.borderColor = [UIColor colorWithRed:180/255.0 green:180/225.0 blue:180/255.0 alpha:1.0].CGColor; + self.cellBackgroundView.layer.borderWidth = 1.0f; + + [super awakeFromNib]; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMSimilarMoviesCollectionViewCell.xib b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMSimilarMoviesCollectionViewCell.xib new file mode 100755 index 0000000..213e30a --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movie Details Page/Movie Details Cells/KMSimilarMoviesCollectionViewCell.xib @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMMoviePosterCell.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMMoviePosterCell.h new file mode 100755 index 0000000..855ff60 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMMoviePosterCell.h @@ -0,0 +1,23 @@ +// +// KMMoviePosterCell.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 05/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import +#import + +/** + * `KMMoviePosterCell` is a `UICollectionViewCell` displaying a movie poster image. + */ +@interface KMMoviePosterCell : UICollectionViewCell + +/** + * The movie poster image view. + */ +@property (weak, nonatomic) IBOutlet UIImageView *moviePosterImageView; +@property (nonatomic, strong) COCoroutine *co; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMMoviePosterCell.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMMoviePosterCell.m new file mode 100755 index 0000000..094d164 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMMoviePosterCell.m @@ -0,0 +1,13 @@ +// +// KMMoviePosterCell.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 05/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMMoviePosterCell.h" + +@implementation KMMoviePosterCell + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMSimilarMoviesViewController.h b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMSimilarMoviesViewController.h new file mode 100755 index 0000000..fa4a48c --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMSimilarMoviesViewController.h @@ -0,0 +1,18 @@ +// +// KMMoviesCollectionViewController.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 05/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import + +@interface KMSimilarMoviesViewController : UIViewController + +/** + * The collection of `KMMovie` objects to be displayed as similar movies. + */ +@property (strong, nonatomic) NSArray* moviesDataSource; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMSimilarMoviesViewController.m b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMSimilarMoviesViewController.m new file mode 100755 index 0000000..2a60a85 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/UI/View Controllers/Movies Grid View/KMSimilarMoviesViewController.m @@ -0,0 +1,111 @@ +// +// KMMoviesCollectionViewController.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 05/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "KMSimilarMoviesViewController.h" +#import "KMStoryBoardUtilities.h" +#import "KMMovie.h" +#import "KMMoviePosterCell.h" +#import "KMMovieDetailsViewController.h" +#import "UIImageView+WebCache.h" + +#define kVerticalMarginForCollectionViewItems 0 + +@interface KMSimilarMoviesViewController () + +@property (weak, nonatomic) IBOutlet UICollectionView* collectionView; + +@end + +@implementation KMSimilarMoviesViewController + +#pragma mark - +#pragma mark View Lifecycle + +- (void)awakeFromNib +{ + if (!self.moviesDataSource) + { + self.moviesDataSource = [[NSArray alloc] init]; + } + + [super awakeFromNib]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [self.navigationController setNavigationBarHidden:NO animated:YES]; + + [self setupCollectionViewLayout]; +} + +#pragma mark - CollectionView Layout + +- (void)setupCollectionViewLayout +{ + UICollectionViewFlowLayout* interfaceBuilderFlowLayout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout; + + CGSize viewSize = self.view.bounds.size; + + CGFloat cellAspectRatio = interfaceBuilderFlowLayout.itemSize.height / interfaceBuilderFlowLayout.itemSize.width; + + UICollectionViewFlowLayout* flowLayoutPort = [UICollectionViewFlowLayout new]; + + flowLayoutPort.scrollDirection = UICollectionViewScrollDirectionVertical; + flowLayoutPort.sectionInset = interfaceBuilderFlowLayout.sectionInset; + flowLayoutPort.minimumInteritemSpacing = interfaceBuilderFlowLayout.minimumInteritemSpacing; + flowLayoutPort.minimumLineSpacing = interfaceBuilderFlowLayout.minimumLineSpacing; + + if (floor(viewSize.width / interfaceBuilderFlowLayout.itemSize.width) <= 2) + { + CGFloat itemHeight = (viewSize.width/2.0 - kVerticalMarginForCollectionViewItems) * cellAspectRatio; + + flowLayoutPort.itemSize = CGSizeMake(viewSize.width/2.0 - kVerticalMarginForCollectionViewItems, itemHeight); + + } + else + { + CGFloat itemHeight = (viewSize.height/2.0 - kVerticalMarginForCollectionViewItems) * cellAspectRatio; + + flowLayoutPort.itemSize = CGSizeMake(viewSize.height/2.0 - kVerticalMarginForCollectionViewItems, itemHeight); + } + + [self.collectionView setCollectionViewLayout:flowLayoutPort]; + +} + +#pragma mark - UICollectionView DataSource + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section; +{ + return self.moviesDataSource.count; +} + +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath; +{ + KMMoviePosterCell* cell = (KMMoviePosterCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"KMMoviePosterCell" forIndexPath:indexPath]; + + [cell.co cancel]; + UIImageView *imageView = cell.moviePosterImageView; + [imageView setImageWithURL:[[self.moviesDataSource objectAtIndex:indexPath.row] movieOriginalPosterImageUrl]]; + + + return cell; +} + +#pragma mark - UICollectionView Delegate + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath; +{ + KMMovieDetailsViewController* viewController = (KMMovieDetailsViewController*)[KMStoryBoardUtilities viewControllerForStoryboardName:@"KMMovieDetailsStoryboard" class:[KMMovieDetailsViewController class]]; + + [self.navigationController pushViewController:viewController animated:YES]; + + viewController.movieDetails = [self.moviesDataSource objectAtIndex:indexPath.row]; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSArray+SafeValues.h b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSArray+SafeValues.h new file mode 100755 index 0000000..3effbfc --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSArray+SafeValues.h @@ -0,0 +1,54 @@ +// +// NSArray+SafeValues.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 03/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * `NSArray+SafeValues` is a category providing convenient methods for fetching objects safely from an array + */ +@interface NSArray (NSArray_SafeValues) + +/** + * Use this method to fetch a string in an `NSArray` at a given index + * + * @param index The object index + * + * @return The string at the specified index + * + * @discussion If string is not found at the given index, will return an empty string: @"" + * + */ +- (NSString *)safeStringAtIndex:(NSUInteger)index; + +/** + * Use this method to fetch a number in an `NSArray` at a given index + * + * @param index The object index + * + * @return The number at the specified index + * + * @discussion If number is not found at the given index, will return 0 + */ +- (NSNumber *)safeNumberAtIndex:(NSUInteger)index; + +/** + * Use this method to fetch a dictionary in an `NSArray` at a given index + * + * @param index The dictionary at the specified index + * + * @return The dictionary at the specified index + * + * @discussion If number is not found at the given index, will return an empty initialized `NSDictionary` + */ +- (NSDictionary *)safeDictionaryAtIndex:(NSUInteger)index; + +@end + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSArray+SafeValues.m b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSArray+SafeValues.m new file mode 100755 index 0000000..f84dd7a --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSArray+SafeValues.m @@ -0,0 +1,77 @@ +// +// NSArray+SafeValues.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 03/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "NSArray+SafeValues.h" + +@implementation NSArray (NSArray_SafeValues) + +- (NSString *)safeStringAtIndex:(NSUInteger)index +{ + NSString* string = nil; + + if (index < self.count) + { + id obj = [self objectAtIndex:index]; + + if ([obj isKindOfClass:[NSString class]]) + { + string = obj; + } + } + + if (!string) + { + string = @""; + } + return string; +} + +- (NSNumber *)safeNumberAtIndex:(NSUInteger)index +{ + NSNumber* number = nil; + + if (index < self.count) + { + id obj = [self objectAtIndex:index]; + + if ([obj isKindOfClass:[NSNumber class]]) + { + number = obj; + } + } + + if (!number) + { + number = [NSNumber numberWithInt:0]; + } + return number; +} + + +- (NSDictionary *)safeDictionaryAtIndex:(NSUInteger)index +{ + NSDictionary* dictionary = nil; + + if (index < self.count) + { + id obj = [self objectAtIndex:index]; + + if ([obj isKindOfClass:[NSDictionary class]]) + { + dictionary = obj; + } + } + + if (!dictionary) + { + dictionary = [NSDictionary dictionary]; + } + return dictionary; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSBundle+Loader.h b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSBundle+Loader.h new file mode 100755 index 0000000..f8f90f4 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSBundle+Loader.h @@ -0,0 +1,35 @@ +// +// NSBundle+Loader.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 24/06/2013. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NSBundle (Loader) + +/** + * Use this method to fetch data from a bundled resource file + * + * @param resource Resource file path + * + * @return Fetched data + */ +- (NSData * _Nullable)dataFromResource:(NSString *)resource; + +/** + * Use this method to fetch json data from a bundled resource file + * + * @param resource Resource file path + * + * @return Fetched JSON data + */ +- (id _Nullable)jsonFromResource:(NSString *)resource; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSBundle+Loader.m b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSBundle+Loader.m new file mode 100755 index 0000000..4f6a247 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSBundle+Loader.m @@ -0,0 +1,37 @@ +// +// NSBundle+Loader.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 24/06/2013. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "NSBundle+Loader.h" + +@implementation NSBundle (Loader) + +- (id)dataFromResource:(NSString *)resource +{ + NSString *path = [self pathForResource:resource ofType:nil]; + NSData *data = [NSData dataWithContentsOfFile:path]; + + if (!data) + { + @throw @"Could not load data."; + } + return data; +} + +- (id)jsonFromResource:(NSString *)resource +{ + NSData *jsonData = [self dataFromResource:resource]; + id json = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil]; + + if (!json) + { + @throw @"Could not load JSON."; + } + return json; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSDictionary+SafeValues.h b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSDictionary+SafeValues.h new file mode 100755 index 0000000..8fe9dea --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSDictionary+SafeValues.h @@ -0,0 +1,69 @@ +// +// KM_NSDictionary+SafeValues.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 26/06/2013. +// Copyright (c) 2013 iKode Ltd. All rights reserved. +// + + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * `NSDictionary+SafeValues` is a category providing convenient methods for fetching objects safely from a dictionary + */ +@interface NSDictionary (NSDictionary_SafeValues) + +/** + * Use this method to fetch a string in an `NSDictionary` for a given key + * + * @param key The object's hash key + * + * @return The string found at the specified key + * + * @discussion If string is not found at for the given key, will return an empty string: @"" + * + */ +- (NSString *)safeStringForKey:(id)key; + +/** + * Use this method to fetch a number in an `NSDictionary` for a given key + * + * @param key The object's hash key + * + * @return The number found at the specified key + * + * @discussion If number is not found at for the given key, will return 0 + * + */ +- (NSNumber *)safeNumberForKey:(id)key; + +/** + * Use this method to fetch an array in an `NSDictionary` for a given key + * + * @param key The object's hash key + * + * @return The array found at the specified key + * + * @discussion If array is not found at for the given key, will return an empty initialized array + * + */ +- (NSArray *)safeArrayForKey:(id)key; + +/** + * Use this method to fetch a dictionary in an `NSDictionary` for a given key + * + * @param key The object's hash key + * + * @return The dictionary found at the specified key + * + * @discussion If dictionary is not found at for the given key, will return an empty initialized dictionary. + * + */ +- (NSDictionary *)safeDictionaryForKey:(id)key; + +@end + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSDictionary+SafeValues.m b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSDictionary+SafeValues.m new file mode 100755 index 0000000..ba4b3e3 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSDictionary+SafeValues.m @@ -0,0 +1,77 @@ +// +// km_NSDictionary+SafeValues.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 03/02/2014. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + + +#import "NSDictionary+SafeValues.h" + +@implementation NSDictionary (NSDictionary_SafeValues) + +- (NSString *)safeStringForKey:(id)key +{ + NSString* string = nil; + id obj = [self objectForKey:key]; + + if ([obj isKindOfClass:[NSString class]]) + { + string = obj; + } + else + { + string = @""; + } + return [string stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; +} + +- (NSNumber *)safeNumberForKey:(id)key +{ + NSNumber* number = nil; + id obj = [self objectForKey:key]; + + if ([obj isKindOfClass:[NSNumber class]]) + { + number = obj; + } + else + { + number = [NSNumber numberWithInt:0]; + } + return number; +} + +- (NSArray *)safeArrayForKey:(id)key +{ + NSArray* array = nil; + id obj = [self objectForKey:key]; + + if ([obj isKindOfClass:[NSArray class]]) + { + array = obj; + } + else + { + array = [NSArray array]; + } + return array; +} + +- (NSDictionary *)safeDictionaryForKey:(id)key +{ + NSDictionary* dictionary = nil; + id obj = [self objectForKey:key]; + if ([obj isKindOfClass:[NSDictionary class]]) + { + dictionary = obj; + } + else + { + dictionary = [NSDictionary dictionary]; + } + return dictionary; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+MD5.h b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+MD5.h new file mode 100755 index 0000000..5d35ccb --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+MD5.h @@ -0,0 +1,35 @@ +// +// NSString+MD5.h +// Originally created for MyFile +// +// Created by Árpád Goretity, 2011. Some infos were grabbed from StackOverflow. +// Released into the public domain. You can do whatever you want with this within the limits of applicable law (so nothing nasty!). +// I'm not responsible for any damage related to the use of this software. There's NO WARRANTY AT ALL. +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NSString (MD5) + +/** + * MD5 hash of the file on the filesystem specified by path + * + * @param path File path string + * + * @return The MD5 hash string + */ ++ (NSString *)stringWithMD5OfFile:(NSString *)path; + +/** + * The string's MD5 hash + * + * @return The MD5 hash string + */ +- (NSString *)MD5Hash; + +@end + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+MD5.m b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+MD5.m new file mode 100755 index 0000000..255769f --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+MD5.m @@ -0,0 +1,84 @@ +// +// NSString+MD5.m +// Originally created for MyFile +// +// Created by Árpád Goretity, 2011. Some infos were grabbed from StackOverflow. +// Released into the public domain. You can do whatever you want with this within the limits of applicable law (so nothing nasty!). +// I'm not responsible for any damage related to the use of this software. There's NO WARRANTY AT ALL. +// + +#import "NSString+MD5.h" + +@implementation NSString (MD5) + ++ (NSString *)stringWithMD5OfFile:(NSString *)path +{ + + NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath: path]; + + if (handle == nil) + { + return nil; + } + + CC_MD5_CTX md5; + CC_MD5_Init (&md5); + + BOOL done = NO; + + while (!done) + { + + + NSData *fileData = [[NSData alloc] initWithData: [handle readDataOfLength: 4096]]; + CC_MD5_Update (&md5, [fileData bytes], (CC_LONG)[fileData length]); + + if ([fileData length] == 0) + { + done = YES; + } + + + } + + unsigned char digest[CC_MD5_DIGEST_LENGTH]; + CC_MD5_Final (digest, &md5); + NSString *s = [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", + digest[0], digest[1], + digest[2], digest[3], + digest[4], digest[5], + digest[6], digest[7], + digest[8], digest[9], + digest[10], digest[11], + digest[12], digest[13], + digest[14], digest[15]]; + + return s; + +} + +- (NSString *)MD5Hash +{ + + CC_MD5_CTX md5; + CC_MD5_Init (&md5); + CC_MD5_Update (&md5, [self UTF8String], (CC_LONG)[self length]); + + unsigned char digest[CC_MD5_DIGEST_LENGTH]; + CC_MD5_Final (digest, &md5); + NSString *s = [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", + digest[0], digest[1], + digest[2], digest[3], + digest[4], digest[5], + digest[6], digest[7], + digest[8], digest[9], + digest[10], digest[11], + digest[12], digest[13], + digest[14], digest[15]]; + + return s; + +} + +@end + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+UrlEncoding.h b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+UrlEncoding.h new file mode 100755 index 0000000..0e2c002 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+UrlEncoding.h @@ -0,0 +1,28 @@ +// +// KM_NSString+UrlEncoding.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 26/06/2013. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * `NSString+UrlEncoding` is a category adding url encoding to `NSString` + */ +@interface NSString (NSString_UrlEncoding) + +/** + * Use this method to url encode a string + * + * @return Url encoded string + */ +- (NSString *)urlEncodedString; + +@end + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+UrlEncoding.m b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+UrlEncoding.m new file mode 100755 index 0000000..c85c785 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSString+UrlEncoding.m @@ -0,0 +1,22 @@ +// +// NSString+UrlEncoding.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 26/06/2013. +// Copyright (c) 2013 iKode Ltd. All rights reserved. +// + + +#import "NSString+UrlEncoding.h" + +@implementation NSString (NSString_UrlEncoding) + +- (NSString *)urlEncodedString +{ + NSString* unEncodedString = [self stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + NSString* encodedString = [unEncodedString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + + return encodedString; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSURL+Parameters.h b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSURL+Parameters.h new file mode 100755 index 0000000..46217f3 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSURL+Parameters.h @@ -0,0 +1,28 @@ +// +// NSURL+Parameters.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 26/06/2013. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NSURL (NSURL_Parameters) + +/** + * Use this method to append request parameters to an `NSURL` + * + * @param urlString The existing url string + * @param additionalParameters Request parameters to append to existing url + * + * @return A url with appended parameters + */ ++ (NSURL *)URLWithString:(NSString *)urlString additionalParameters:(NSString *)additionalParameters; + +@end + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSURL+Parameters.m b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSURL+Parameters.m new file mode 100755 index 0000000..b5ae23a --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/NSURL+Parameters.m @@ -0,0 +1,36 @@ +// +// KM_NSURL+Parameters.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 26/06/2013. +// Copyright (c) 2013 iKode Ltd. All rights reserved. +// + +#import "NSURL+Parameters.h" + + +@implementation NSURL (NSURL_Parameters) + ++ (NSURL *)URLWithString:(NSString *)urlString additionalParameters:(NSString *)additionalParameters +{ + + NSURL* url = [NSURL URLWithString:urlString]; + + BOOL alreadyHasParameters = url.query.length; + + if (alreadyHasParameters) + { + urlString = [urlString stringByAppendingString:@"&"]; + } + else + { + urlString = [urlString stringByAppendingString:@"?"]; + } + + urlString = [urlString stringByAppendingString:additionalParameters]; + + return [NSURL URLWithString:urlString]; +} + + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIFont+GillSansFonts.h b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIFont+GillSansFonts.h new file mode 100755 index 0000000..ebc2beb --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIFont+GillSansFonts.h @@ -0,0 +1,49 @@ +// +// UIFont+GillSansFonts.h +// BigCentral +// +// Created by Kevin Mindeguia on 24/06/2013. +// Copyright (c) 2013 iKode Ltd. All rights reserved. +// + +#import + +@interface UIFont (GillSansFonts) + +/** + * Use this method to load GillSansBold font + * + * @param fontSize The desired font size + * + * @return The loaded font + */ ++ (UIFont *)gillSansBoldFontWithSize:(CGFloat)fontSize; + +/** + * Use this method to load GillSansMedium font + * + * @param fontSize The desired font size + * + * @return The loaded font + */ ++ (UIFont *)gillSansMediumFontWithSize:(CGFloat)fontSize; + +/** + * Use this method to load GillSansRegular font + * + * @param fontSize The desired font size + * + * @return The loaded font + */ ++ (UIFont *)gillSansRegularFontWithSize:(CGFloat)fontSize; + +/** + * Use this method to load GillSansLight font + * + * @param fontSize The desired font size + * + * @return The loaded font + */ ++ (UIFont *)gillSansLightFontWithSize:(CGFloat)fontSize; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIFont+GillSansFonts.m b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIFont+GillSansFonts.m new file mode 100755 index 0000000..74a8c3c --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIFont+GillSansFonts.m @@ -0,0 +1,33 @@ +// +// UIFont+GillSansFonts.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 24/06/2013. +// Copyright (c) 2014 iKode Ltd. All rights reserved. +// + +#import "UIFont+GillSansFonts.h" + +@implementation UIFont (RotoboFonts) + ++ (UIFont *)gillSansBoldFontWithSize:(CGFloat)fontSize +{ + return [UIFont fontWithName:@"GillSans-Bold" size:fontSize]; +} + ++ (UIFont *)gillSansMediumFontWithSize:(CGFloat)fontSize +{ + return [UIFont fontWithName:@"GillSans-Medium" size:fontSize]; +} + ++ (UIFont *)gillSansRegularFontWithSize:(CGFloat)fontSize +{ + return [UIFont fontWithName:@"GillSans-Regular" size:fontSize]; +} + ++ (UIFont *)gillSansLightFontWithSize:(CGFloat)fontSize +{ + return [UIFont fontWithName:@"GillSans-Light" size:fontSize]; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIImageView+WebCache.h b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIImageView+WebCache.h new file mode 100644 index 0000000..9384613 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIImageView+WebCache.h @@ -0,0 +1,26 @@ +// +// UIImageView+WebCache.h +// coobjcBaseExample +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import + +@interface UIImageView (WebCache) + +- (void)setImageWithURL:(NSString*)url CO_ASYNC; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIImageView+WebCache.m b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIImageView+WebCache.m new file mode 100644 index 0000000..c6f0857 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Categories/UIImageView+WebCache.m @@ -0,0 +1,46 @@ +// +// UIImageView+WebCache.m +// coobjcBaseExample +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "UIImageView+WebCache.h" +#import "DataService.h" +#import + +@implementation UIImageView (WebCache) + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +- (void)setImageWithURL:(NSString*)url CO_ASYNC{ + + objc_setAssociatedObject(self, @selector(setImageWithURL:), url, OBJC_ASSOCIATION_RETAIN); + + co_launch(^{ + + UIImage *image = [[DataService sharedInstance] imageWithURL:url]; + if ([objc_getAssociatedObject(self, @selector(setImageWithURL:)) isEqualToString:url]) { + self.image = image; + } + }); +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/DataService.h b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/DataService.h new file mode 100644 index 0000000..4319f81 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/DataService.h @@ -0,0 +1,36 @@ +// +// DataService.h +// coobjcBaseExample +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + +@interface DataService : NSObject + ++ (instancetype)sharedInstance; + +- (id)requestJSONWithURL:(NSString*)url CO_ASYNC; + +- (void)saveDataToCache:(NSData*)data + withIdentifier:(NSString*)identifier CO_ASYNC; + +- (NSData*)getDataWithIdentifier:(NSString*)identifier CO_ASYNC; + +- (UIImage*)imageWithURL:(NSString*)url CO_ASYNC; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/DataService.m b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/DataService.m new file mode 100644 index 0000000..f72e1dd --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/DataService.m @@ -0,0 +1,224 @@ +// +// DataService.m +// coobjcBaseExample +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "DataService.h" +#import + + +@interface DataService () + +@property (nonatomic, strong) dispatch_queue_t jsonQueue; +@property (nonatomic, strong) dispatch_queue_t networkQueue; +@property (nonatomic, strong) dispatch_queue_t cacheQueue; +@property (nonatomic, strong) dispatch_queue_t imageQueue; +@property (nonatomic, strong) COActor *networkActor; +@property (nonatomic, strong) COActor *jsonActor; +@property (nonatomic, strong) COActor *imageActor; +@property (nonatomic, strong) COActor *cacheActor; +@property (nonatomic, strong) NSString *cachePath; + +@end + +@implementation DataService + ++ (instancetype)sharedInstance{ + static DataService *instance = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + instance = [[DataService alloc] init]; + }); + return instance; +} + + + +- (NSString*)cachePathForFileName:(NSString*)name{ + return [self.cachePath stringByAppendingPathComponent:name]; +} + +- (COPromise*)_getDataWithURL:(NSString*)url{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [NSURLSession sharedSession].configuration.requestCachePolicy = NSURLRequestReloadIgnoringCacheData; + NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:url] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { + if (error) { + reject(error); + } + else{ + resolve(data); + } + }]; + [task resume]; + } onQueue:_networkQueue]; + +} + +- (NSString *)cachedFileNameForKey:(NSString *)key { + const char *str = [key UTF8String]; + if (str == NULL) { + str = ""; + } + unsigned char r[CC_MD5_DIGEST_LENGTH]; + CC_MD5(str, (CC_LONG)strlen(str), r); + NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", + r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], r[11], r[12], r[13], r[14], r[15]]; + + return filename; +} + +- (instancetype)init{ + self = [super init]; + if (self) { + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); + _cachePath = [paths[0] stringByAppendingPathComponent:@"coobjc_cache"]; + _networkQueue = dispatch_queue_create("com.coobjc.network", NULL); + _jsonQueue = dispatch_queue_create("com.coobjc.json", NULL); + _cacheQueue = dispatch_queue_create("com.coobjc.cache", NULL); + _imageQueue = dispatch_queue_create("com.coobjc.image", NULL); + _networkActor = co_actor_onqueue(_networkQueue, ^(COActorChan *channel) { + for (COActorMessage *message in channel) { + NSString *url = [message stringType]; + if (url.length > 0) { + message.complete(await([self _getDataWithURL:url])); + } + else{ + message.complete(nil); + } + } + }); + + _cacheActor = co_actor_onqueue(_cacheQueue, ^(COActorChan *channel) { + for (COActorMessage *message in channel) { + NSDictionary *dict = [message dictType]; + NSString *type = dict[@"type"]; + if ([type isEqualToString:@"save"]) { + NSString *identifier = dict[@"id"]; + NSData *data = dict[@"data"]; + NSString *fileName = [self cachedFileNameForKey:identifier]; + NSString *filePath = [self cachePathForFileName:fileName]; + if (fileName.length > 0 && data.length > 0) { + if (![[NSFileManager defaultManager] fileExistsAtPath:self.cachePath]) { + [[NSFileManager defaultManager] createDirectoryAtPath:self.cachePath withIntermediateDirectories:NO attributes:nil error:nil]; + } + [data writeToFile:filePath atomically:YES]; + } + } + else if ([type isEqualToString:@"load"]) { + NSString *identifier = dict[@"id"]; + NSString *fileName = [self cachedFileNameForKey:identifier]; + NSString *filePath = [self cachePathForFileName:fileName]; + NSData *data = [[NSData alloc] initWithContentsOfFile:filePath]; + message.complete(data); + } + else if([type isEqualToString:@"clean"]){ + NSString *identifier = dict[@"id"]; + NSString *fileName = [self cachedFileNameForKey:identifier]; + NSString *filePath = [self cachePathForFileName:fileName]; + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + else if([type isEqualToString:@"clean_all"]){ + [[NSFileManager defaultManager] removeItemAtPath:self.cachePath error:nil]; + [[NSFileManager defaultManager] createDirectoryAtPath:self.cachePath withIntermediateDirectories:NO attributes:nil error:nil]; + } + } + }); + + _imageActor = co_actor_onqueue(_imageQueue, ^(COActorChan *channel) { + NSData *data = nil; + UIImage *image = nil; + COActorCompletable *completable = nil; + NSCache *memoryCache = [[NSCache alloc] init]; + memoryCache.countLimit = 50; + for (COActorMessage *message in channel) { + image = nil; + NSString *url = [message stringType]; + if (url.length > 0) { + image = [memoryCache objectForKey:url]; + if (image) { + message.complete(image); + continue; + } + completable = [self.cacheActor sendMessage:@{@"type":@"load", @"id":url}]; + data = await(completable); + if (data) { + image = [[UIImage alloc] initWithData:data]; + } + else{ + completable = [self.networkActor sendMessage:url]; + data = await(completable); + if (data) { + image = [[UIImage alloc] initWithData:data]; + } + } + message.complete(image); + if (image) { + [memoryCache setObject:image forKey:url]; + } + } + else{ + message.complete(nil); + } + } + }); + _jsonActor = co_actor_onqueue(_jsonQueue, ^(COActorChan *channel) { + NSData *data = nil; + id json = nil; + COActorCompletable *completable = nil; + for (COActorMessage *message in channel) { + NSString *url = [message stringType]; + json = nil; + if (url.length > 0) { + completable = [self.networkActor sendMessage:url]; + data = await(completable); + if (data) { + json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; + } + message.complete(json); + } + else{ + message.complete(nil); + } + } + }); + } + return self; +} + +- (id)requestJSONWithURL:(NSString*)url CO_ASYNC{ + SURE_ASYNC + return await([self.jsonActor sendMessage:url]); +} + +- (void)saveDataToCache:(NSData*)data + withIdentifier:(NSString*)identifier CO_ASYNC{ + SURE_ASYNC + NSDictionary *msg = @{@"type":@"save", @"data":data, @"id":identifier}; + await([self.cacheActor sendMessage:msg]); +} + +- (NSData*)getDataWithIdentifier:(NSString*)identifier CO_ASYNC{ + SURE_ASYNC + NSDictionary *msg = @{@"type":@"load", @"id":identifier}; + return await([self.cacheActor sendMessage:msg]); +} + +- (UIImage*)imageWithURL:(NSString*)url CO_ASYNC{ + SURE_ASYNC + return await([self.imageActor sendMessage:url]); +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMNetworkLoadingViewController.h b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMNetworkLoadingViewController.h new file mode 100755 index 0000000..04313e7 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMNetworkLoadingViewController.h @@ -0,0 +1,52 @@ +// +// KMNetworkLoadingViewController.h +// BigCentral +// +// Created by Kevin Mindeguia on 19/11/2013. +// Copyright (c) 2013 iKode Ltd. All rights reserved. +// + +#import +#import "KMActivityIndicator.h" + +@class KMNetworkLoadingViewController; + +/** + * `KMNetworkLoadingViewDelegate` is a delegate protocol for the `KMNetworkLoadingViewController` + */ +@protocol KMNetworkLoadingViewDelegate + +/** + * Notifies the delegate that the `KMNetworkLoadingViewController` retry button has been pressed + */ +-(void)retryRequestButtonWasPressed:(KMNetworkLoadingViewController *)viewController; + +@end + +/** + * `KMNetworkLoadingViewController` is a view controller managing network error statuses + */ +@interface KMNetworkLoadingViewController : UIViewController + +/** + * The object that acts as the delegate of the view controller. + */ +@property (weak, nonatomic) id delegate; + +/** + * Display the loading view. + */ +- (void)showLoadingView; + +/** + * Display the no content view + */ +- (void)showNoContentView; + +/** + * Display the error view. + */ +- (void)showErrorView; + + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMNetworkLoadingViewController.m b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMNetworkLoadingViewController.m new file mode 100755 index 0000000..0931d81 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMNetworkLoadingViewController.m @@ -0,0 +1,72 @@ +// +// KMNetworkLoadingViewController.m +// BigCentral +// +// Created by Kevin Mindeguia on 19/11/2013. +// Copyright (c) 2013 iKode Ltd. All rights reserved. +// + +#import "KMNetworkLoadingViewController.h" + +@interface KMNetworkLoadingViewController () + +@property (weak, nonatomic) IBOutlet UIView *loadingView; +@property (weak, nonatomic) IBOutlet UIView *errorView; +@property (weak, nonatomic) IBOutlet UIButton *refreshButton; +@property (weak, nonatomic) IBOutlet KMActivityIndicator *activityIndicatorView; +@property (weak, nonatomic) IBOutlet UIView *noContentView; + +@end + +@implementation KMNetworkLoadingViewController + + +#pragma mark - View LifeCycle + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + [self showLoadingView]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + + [self.activityIndicatorView startAnimating]; +} + +- (void)showLoadingView +{ + self.errorView.hidden = YES; + + self.activityIndicatorView.color = [UIColor colorWithRed:232.0/255.0f green:35.0/255.0f blue:111.0/255.0f alpha:1.0]; +} + +- (void)showErrorView +{ + self.noContentView.hidden = YES; + + self.errorView.hidden = NO; +} + +- (void)showNoContentView; +{ + self.noContentView.hidden = NO; + + self.errorView.hidden = YES; +} + +#pragma mark - Action Methods + +- (IBAction)retryRequest:(id)sender +{ + if ([self.delegate respondsToSelector:@selector(retryRequestButtonWasPressed:)]) + { + [self.delegate retryRequestButtonWasPressed:self]; + } + + [self showLoadingView]; +} +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMStoryBoardUtilities.h b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMStoryBoardUtilities.h new file mode 100755 index 0000000..841c382 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMStoryBoardUtilities.h @@ -0,0 +1,27 @@ +// +// StoryBoardUtilities.h +// TheMovieDB +// +// Created by Kevin Mindeguia on 09/02/2013. +// Copyright (c) 2013 iKode Ltd. All rights reserved. +// + +#import +#import + +/** + * `KMStoryBoardUtilities` is a utility class that helps loading view controllers from storyboards + */ +@interface KMStoryBoardUtilities : NSObject + +/** + * Use this method to load a `UIViewController` from a storyboard + * + * @param storyboardName The storyboard file name + * @param class The view controller's class + * + * @return `UIViewController` instance + */ ++ (UIViewController *)viewControllerForStoryboardName:(NSString *)storyboardName class:(id)class; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMStoryBoardUtilities.m b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMStoryBoardUtilities.m new file mode 100755 index 0000000..97d306a --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/KMStoryBoardUtilities.m @@ -0,0 +1,29 @@ +// +// StoryBoardUtilities.m +// TheMovieDB +// +// Created by Kevin Mindeguia on 09/02/2013. +// Copyright (c) 2013 iKode Ltd. All rights reserved. +// + +#import "KMStoryBoardUtilities.h" + +@implementation KMStoryBoardUtilities + ++ (UIViewController*)viewControllerForStoryboardName:(NSString*)storyboardName class:(id)class +{ + UIStoryboard* storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil]; + + NSString* className = nil; + + if ([class isKindOfClass:[NSString class]]) + className = [NSString stringWithFormat:@"%@", class]; + else + className = [NSString stringWithFormat:@"%s", class_getName([class class])]; + + UIViewController* viewController = [storyboard instantiateViewControllerWithIdentifier:[NSString stringWithFormat:@"%@", className]]; + + return viewController; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Labels/KMGillSansLabel.h b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Labels/KMGillSansLabel.h new file mode 100755 index 0000000..a9f2b6e --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Labels/KMGillSansLabel.h @@ -0,0 +1,39 @@ +// +// KMGillSansLabel.h +// +// +// Created by Kevin Mindeguia on 24/06/2013. +// Copyright (c) 2013 iKode Ltd. All rights reserved. +// + +#import + +@interface KMGillSansLabel : UILabel + +@end + +@interface KMGillSansBoldLabel : KMGillSansLabel + +- (void)setFontSize:(CGFloat)size; + +@end + + +@interface KMGillSansMediumLabel : KMGillSansLabel + +- (void)setFontSize:(CGFloat)size; + +@end + + +@interface KMGillSansRegularLabel : KMGillSansLabel + +- (void)setFontSize:(CGFloat)size; + +@end + +@interface KMGillSansLightLabel : KMGillSansLabel + +- (void)setFontSize:(CGFloat)size; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Labels/KMGillSansLabel.m b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Labels/KMGillSansLabel.m new file mode 100755 index 0000000..11a53e7 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/Labels/KMGillSansLabel.m @@ -0,0 +1,167 @@ +// +// KMGillSansLabel.m +// +// +// Created by Kevin Mindeguia on 24/06/2013. +// Copyright (c) 2013 iKode Ltd. All rights reserved. +// + +#import "KMGillSansLabel.h" +#import "UIFont+GillSansFonts.h" + +@implementation KMGillSansLabel + +- (void)resizeFontToFit{ + + UIFont* font = self.font; + + CGSize constraintSize = CGSizeMake(self.frame.size.width, MAXFLOAT); + CGFloat minSize = self.minimumScaleFactor; + CGFloat maxSize = self.font.pointSize; + + // start with maxSize and keep reducing until it doesn't clip + for (int i = maxSize; i >= minSize; i--) { + font = [font fontWithSize:i]; + + // This step checks how tall the label would be with the desired font. + CGRect labelRect = [self.text boundingRectWithSize:constraintSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil]; + if(labelRect.size.height <= self.frame.size.height) + break; + } + // Set the font to the newly adjusted font. + self.font = font; + +} + +@end + + +@interface KMGillSansBoldLabel () + +- (void)configureWithGillSansFont; + +@end + +@implementation KMGillSansBoldLabel + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self configureWithGillSansFont]; + } + return self; +} + +- (void)setFontSize:(CGFloat)size +{ + self.font = [UIFont gillSansBoldFontWithSize:size]; +} + +- (void)awakeFromNib +{ + [self configureWithGillSansFont]; + + [super awakeFromNib]; +} + +- (void)configureWithGillSansFont +{ + self.font = [UIFont gillSansBoldFontWithSize:self.font.pointSize]; +} + +@end + +@interface KMGillSansMediumLabel () + +- (void)configureWithGillSansFont; + +@end + +@implementation KMGillSansMediumLabel + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self configureWithGillSansFont]; + } + return self; +} + +- (void)setFontSize:(CGFloat)size +{ + self.font = [UIFont gillSansMediumFontWithSize:size]; +} + +- (void)awakeFromNib{ + [self configureWithGillSansFont]; + + [super awakeFromNib]; +} + +- (void)configureWithGillSansFont +{ + self.font = [UIFont gillSansMediumFontWithSize:self.font.pointSize]; +} + +@end + +@implementation KMGillSansRegularLabel + +- (id)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self configureWithGillSansFont]; + } + return self; +} + +- (void)setFontSize:(CGFloat)size +{ + self.font = [UIFont gillSansRegularFontWithSize:size]; +} + +- (void)awakeFromNib +{ + [self configureWithGillSansFont]; + + [super awakeFromNib]; +} + +- (void)configureWithGillSansFont +{ + self.font = [UIFont gillSansRegularFontWithSize:self.font.pointSize]; +} + +@end + +@implementation KMGillSansLightLabel + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self configureWithGillSansFont]; + } + return self; +} + +- (void)setFontSize:(CGFloat)size +{ + self.font = [UIFont gillSansLightFontWithSize:size]; +} + +- (void)awakeFromNib +{ + [self configureWithGillSansFont]; + + [super awakeFromNib]; +} + +- (void)configureWithGillSansFont +{ + self.font = [UIFont gillSansLightFontWithSize:self.font.pointSize]; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/UI Utils/KMButton.h b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/UI Utils/KMButton.h new file mode 100755 index 0000000..b143379 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/UI Utils/KMButton.h @@ -0,0 +1,13 @@ +// +// KMButton.h +// Movies +// +// Created by Kevin Mindeguia on 09/03/2016. +// Copyright © 2016 iKode Ltd. All rights reserved. +// + +#import + +@interface KMButton : UIButton + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/Utils/UI Utils/KMButton.m b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/UI Utils/KMButton.m new file mode 100755 index 0000000..1dc42a4 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/Utils/UI Utils/KMButton.m @@ -0,0 +1,83 @@ +// +// KMButton.m +// Movies +// +// Created by Kevin Mindeguia on 09/03/2016. +// Copyright © 2016 iKode Ltd. All rights reserved. +// + +#import "KMButton.h" + +@implementation KMButton + +#pragma mark - Init Methods + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + + if (self) + { + [self setupLayerAttributes]; + [self setupMotionEffects]; + } + + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)aDecoder +{ + self = [super initWithCoder:aDecoder]; + + if (self) + { + [self setupLayerAttributes]; + [self setupMotionEffects]; + } + + return self; +} + +#pragma mark - Setup Methods + +- (void)setupLayerAttributes +{ + self.layer.cornerRadius = self.frame.size.height / 2; +} + +- (void)setupMotionEffects +{ + UIControlEvents applyEffectEvents = UIControlEventTouchDown | UIControlEventTouchDragInside | UIControlEventTouchDragEnter; + [self removeTarget:self action:@selector(applyTouchEffect) forControlEvents:applyEffectEvents]; + [self addTarget:self action:@selector(applyTouchEffect) forControlEvents:applyEffectEvents]; + + UIControlEvents dismissEffectEvents = UIControlEventTouchUpInside | UIControlEventTouchUpOutside | UIControlEventTouchDragOutside | UIControlEventTouchDragExit | UIControlEventTouchCancel; + [self removeTarget:self action:@selector(dismissTouchEffect) forControlEvents:dismissEffectEvents]; + [self addTarget:self action:@selector(dismissTouchEffect) forControlEvents:dismissEffectEvents]; +} + +#pragma mark - Motion Methods + +- (void)applyTouchEffect +{ + [UIView animateWithDuration:0.1 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ + self.transform = CGAffineTransformMakeScale(0.9, 0.9); + } completion:nil]; +} + +- (void)dismissTouchEffect +{ + [UIView animateWithDuration:0.1 animations:^{ + self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.05, 1.05); + } completion:^(BOOL finished) { + [UIView animateWithDuration:0.3/2 animations:^{ + self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.95, 0.95); + } completion:^(BOOL finished) { + [UIView animateWithDuration:0.3/2 animations:^{ + self.transform = CGAffineTransformIdentity; + }]; + }]; + }]; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/ViewController.h b/Examples/coobjcBaseExample/coobjcBaseExample/ViewController.h new file mode 100644 index 0000000..644e4aa --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/ViewController.h @@ -0,0 +1,25 @@ +// +// ViewController.h +// coobjcBaseExample +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 ViewController : UIViewController + + +@end + diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/ViewController.m b/Examples/coobjcBaseExample/coobjcBaseExample/ViewController.m new file mode 100644 index 0000000..ec076f1 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/ViewController.m @@ -0,0 +1,39 @@ +// +// ViewController.m +// coobjcBaseExample +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "ViewController.h" + +@interface ViewController () + +@end + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view, typically from a nib. +} + + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExample/main.m b/Examples/coobjcBaseExample/coobjcBaseExample/main.m new file mode 100644 index 0000000..099d054 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExample/main.m @@ -0,0 +1,16 @@ +// +// main.m +// coobjcBaseExample +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/Examples/coobjcBaseExample/coobjcBaseExampleTests/Info.plist b/Examples/coobjcBaseExample/coobjcBaseExampleTests/Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExampleTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcActorTests.m b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcActorTests.m new file mode 100644 index 0000000..720e752 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcActorTests.m @@ -0,0 +1,253 @@ +// +// coobjcActorTests.m +// coobjcBaseExampleTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#define EXP_SHORTHAND +#import +#import +#import + +static dispatch_queue_t get_test_queue(){ + static dispatch_queue_t q = nil; + if (!q) { + q = dispatch_queue_create("test", NULL); + } + return q; +} + +SpecBegin(coActor) + +describe(@"actor tests", ^{ + it(@"create actor", ^{ + __block int val = 0; + __block int val1 = 0; + co_actor(^(COActorChan *chan) { + val = 1; + XCTAssert(chan != nil); + }); + co_actor_onqueue(get_test_queue(), ^(COActorChan *chan) { + val1 = 1; + XCTAssert(chan != nil); + }); + waitUntil(^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 1); + XCTAssert(val1 == 1); + done(); + }); + }); + }); + it(@"for in chan", ^{ + __block int val = 0; + COActor* actor = co_actor(^(COActorChan *chan) { + int tmpVal = 0; + for(COActorMessage *message in chan){ + if([message intType] == 1){ + tmpVal++; + } + else if([message intType] == -1){ + tmpVal--; + } + else if([message intType] == 2){ + message.complete(@(tmpVal)); + } + } + }); + co_launch(^{ + [actor sendMessage:@(1)]; + [actor sendMessage:@(1)]; + [actor sendMessage:@(1)]; + [actor sendMessage:@(1)]; + [actor sendMessage:@(1)]; + [actor sendMessage:@(1)]; + + [actor sendMessage:@(-1)]; + + COActorCompletable *completable = [actor sendMessage:@(2)]; + id result = await(completable); + val = [result intValue]; + [actor cancel]; + }); + + waitUntil(^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 5); + done(); + }); + }); + }); + + it(@"for in async chan", ^{ + __block int val = 0; + COActor* actor = co_actor_onqueue(get_test_queue(), ^(COActorChan *chan) { + int tmpVal = 0; + for(COActorMessage *message in chan){ + if([message intType] == 1){ + tmpVal++; + } + else if([message intType] == -1){ + tmpVal--; + } + else if([message intType] == 2){ + message.complete(@(tmpVal)); + } + } + }); + co_launch(^{ + for(int i = 0; i < 100; i++){ + [actor sendMessage:@(1)]; + } + for(int i = 0; i< 90; i++){ + [actor sendMessage:@(-1)]; + } + + + COActorCompletable *completable = [actor sendMessage:@(2)]; + id result = await(completable); + val = [result intValue]; + [actor cancel]; + }); + + waitUntil(^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 10); + done(); + }); + }); + }); + + it(@"next in chan", ^{ + __block int val = 0; + COActor* actor = co_actor(^(COActorChan *chan) { + int tmpVal = 0; + COActorMessage *message = nil; + while((message = [chan next])){ + if([message intType] == 1){ + tmpVal++; + } + else if([message intType] == -1){ + tmpVal--; + } + else if([message intType] == 2){ + message.complete(@(tmpVal)); + } + } + }); + co_launch(^{ + [actor sendMessage:@(1)]; + [actor sendMessage:@(1)]; + [actor sendMessage:@(1)]; + [actor sendMessage:@(1)]; + [actor sendMessage:@(1)]; + [actor sendMessage:@(1)]; + + [actor sendMessage:@(-1)]; + + COActorCompletable *completable = [actor sendMessage:@(2)]; + id result = await(completable); + val = [result intValue]; + [actor cancel]; + }); + + waitUntil(^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 5); + done(); + }); + }); + }); + + it(@"actor cancel", ^{ + __block int val = 0; + __block int canceled = 0; + COActor* actor = co_actor(^(COActorChan *chan) { + int tmpVal = 0; + for(COActorMessage *message in chan){ + if([message intType] == 1){ + tmpVal++; + } + else if([message intType] == -1){ + tmpVal--; + } + else if([message intType] == 2){ + message.complete(@(tmpVal)); + } + } + NSLog(@"actor cancelled"); + canceled = 1; + }); + co_launch(^{ + [actor sendMessage:@(1)]; + [actor sendMessage:@(1)]; + [actor sendMessage:@(1)]; + [actor sendMessage:@(1)]; + [actor sendMessage:@(1)]; + [actor sendMessage:@(1)]; + + [actor sendMessage:@(-1)]; + + COActorCompletable *completable = [actor sendMessage:@(2)]; + id result = await(completable); + val = [result intValue]; +// NSLog(@"actor cancel"); + [actor cancel]; + NSLog(@"actor cancel"); + + }); + + waitUntilTimeout(5.1, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 5); + XCTAssert(canceled == 1); + XCTAssert([actor isCancelled] == true); + XCTAssert([actor isFinished] == true); + done(); + }); + }); + }); + + it(@"counter example", ^{ + COActor *countActor = co_actor_onqueue(get_test_queue(), ^(COActorChan *channel) { + int count = 0; + for(COActorMessage *message in channel){ + if([[message stringType] isEqualToString:@"inc"]){ + count++; + } + else if([[message stringType] isEqualToString:@"get"]){ + message.complete(@(count)); + } + } + }); + co_launch(^{ + [countActor sendMessage:@"inc"]; + [countActor sendMessage:@"inc"]; + [countActor sendMessage:@"inc"]; + int currentCount = [await([countActor sendMessage:@"get"]) intValue]; + }); + co_launch_onqueue(dispatch_queue_create("counter queue1", NULL), ^{ + [countActor sendMessage:@"inc"]; + [countActor sendMessage:@"inc"]; + [countActor sendMessage:@"inc"]; + [countActor sendMessage:@"inc"]; + int currentCount = [await([countActor sendMessage:@"get"]) intValue]; + }); + }); +}); + +SpecEnd diff --git a/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcAutoreleaseArcTests.m b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcAutoreleaseArcTests.m new file mode 100644 index 0000000..f9d50c1 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcAutoreleaseArcTests.m @@ -0,0 +1,316 @@ +// +// coobjcAutoreleaseArcTests.m +// coobjcBaseExampleTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#define EXP_SHORTHAND +#import +#import +#import +#import + +static int state; + +static dispatch_queue_t get_test_queue(){ + static dispatch_queue_t q = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + q = dispatch_queue_create("test_queue", NULL); + }); + return q; +} + +static dispatch_queue_t get_test_queue1(){ + static dispatch_queue_t q = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + q = dispatch_queue_create("test_queue_1", NULL); + }); + return q; +} + +#define NESTED_COUNT 8 + +@interface TestDeallocator : NSObject @end +@implementation TestDeallocator +-(void) dealloc +{ + // testprintf("-[Deallocator %p dealloc]\n", self); + state++; +} +@end + +@interface coobjcAutoreleaseArcTests : XCTestCase + +@end + +@implementation coobjcAutoreleaseArcTests + +- (COPromise*)makeAsynPromise{ + return [COPromise promise:^(COPromiseFullfill resolve, COPromiseReject reject) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + resolve(@1); + }); + }]; +} + +- (void)setUp { + [super setUp]; + co_autoreleaseInit(); + + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)testEnableAutoreleasePool{ + co_enableAutorelease = YES; + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + co_launch_onqueue(get_test_queue(), ^{ + state = 0; + @autoreleasepool{ + coroutine_t *routine = coroutine_self(); + XCTAssert(routine->autoreleasepage != NULL); + + for (int i = 0; i < 10; i++) { + __autoreleasing TestDeallocator *d = [[TestDeallocator alloc] init]; + } + } + + + + + XCTAssert(state == 10); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [e fulfill]; + }); + }); + [self waitForExpectations:@[e] timeout:1000]; + +} + +- (void)testEnableAutoreleasePoolAwait{ + co_enableAutorelease = YES; + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + co_launch_onqueue(get_test_queue(), ^{ + state = 0; + + @autoreleasepool{ + coroutine_t *routine = coroutine_self(); + XCTAssert(routine->autoreleasepage != NULL); + for (int i = 0; i < 10; i++) { + __autoreleasing TestDeallocator *d = [[TestDeallocator alloc] init]; + } + id val = await([self makeAsynPromise]); + //TODO: NSLog会导致autorelease崩溃 + printf("%d\n", [val intValue]); + for (int i = 0; i < 10; i++) { + __autoreleasing TestDeallocator *d = [[TestDeallocator alloc] init]; + } + } + + + + XCTAssert(state == 20); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [e fulfill]; + }); + }); + [self waitForExpectations:@[e] timeout:1000]; + +} + +- (void)testEnableAutoreleasePoolNSLog{ + co_enableAutorelease = YES; + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + co_launch_onqueue(get_test_queue(), ^{ + state = 0; + @autoreleasepool{ + coroutine_t *routine = coroutine_self(); + XCTAssert(routine->autoreleasepage != NULL); + for (int i = 0; i < 10; i++) { + __autoreleasing TestDeallocator *d = [[TestDeallocator alloc] init]; + } + NSLog(@"test"); + for (int i = 0; i < 10; i++) { + __autoreleasing TestDeallocator *d = [[TestDeallocator alloc] init]; + } + + + } + + XCTAssert(state == 20); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [e fulfill]; + }); + + + }); + [self waitForExpectations:@[e] timeout:1000]; + +} + +- (void)testDisableAutoreleasePool{ + co_enableAutorelease = NO; + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + co_launch_onqueue(get_test_queue(), ^{ + state = 0; + + coroutine_t *routine = coroutine_self(); + XCTAssert(routine->autoreleasepage == NULL); + for (int i = 0; i < 10; i++) { + __autoreleasing TestDeallocator *d = [[TestDeallocator alloc] init]; + } + NSLog(@"test"); + for (int i = 0; i < 10; i++) { + __autoreleasing TestDeallocator *d = [[TestDeallocator alloc] init]; + } + + + + + XCTAssert(state == 0); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [e fulfill]; + }); + + + }); + [self waitForExpectations:@[e] timeout:1000]; +} + +- (void)testAutoreleasePoolNested{ + co_enableAutorelease = YES; + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + co_launch_onqueue(get_test_queue(), ^{ + state = 0; + + @autoreleasepool{ + coroutine_t *routine = coroutine_self(); + XCTAssert(routine->autoreleasepage != NULL); + { + @autoreleasepool{ + for (int i = 0; i < 10; i++) { + __autoreleasing TestDeallocator *d = [[TestDeallocator alloc] init]; + } + } + } + + id val = await([self makeAsynPromise]); + //TODO: NSLog会导致autorelease崩溃 + NSLog(@"%@", val); + { + @autoreleasepool{ + for (int i = 0; i < 10; i++) { + __autoreleasing TestDeallocator *d = [[TestDeallocator alloc] init]; + } + } + } + val = await([self makeAsynPromise]); + //TODO: NSLog会导致autorelease崩溃 + NSLog(@"%@", val); + + for (int i = 0; i < 10; i++) { + __autoreleasing TestDeallocator *d = [[TestDeallocator alloc] init]; + } + + + + } + + XCTAssert(state == 30); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [e fulfill]; + }); + + + }); + [self waitForExpectations:@[e] timeout:1000]; +} + +- (void)testAutoreleasePoolNestedUnbanlance{ + co_enableAutorelease = YES; + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + co_launch_onqueue(get_test_queue(), ^{ + state = 0; + @autoreleasepool{ + coroutine_t *routine = coroutine_self(); + XCTAssert(routine->autoreleasepage != NULL); + { + @try{ + @autoreleasepool{ + for (int i = 0; i < 10; i++) { + __autoreleasing TestDeallocator *d = [[TestDeallocator alloc] init]; + } + @throw [NSException exceptionWithName:@"test" reason:@"test" userInfo:nil]; + } + } + @catch(NSException *e){ + + } + + + // co_autoreleasePoolPop(ctx1); + } + + id val = await([self makeAsynPromise]); + //TODO: NSLog会导致autorelease崩溃 + NSLog(@"%@", val); + { + @autoreleasepool{ + for (int i = 0; i < 10; i++) { + __autoreleasing TestDeallocator *d = [[TestDeallocator alloc] init]; + } + } + + } + val = await([self makeAsynPromise]); + //TODO: NSLog会导致autorelease崩溃 + NSLog(@"%@", val); + + for (int i = 0; i < 10; i++) { + __autoreleasing TestDeallocator *d = [[TestDeallocator alloc] init]; + } + + + + } + + XCTAssert(state == 30); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [e fulfill]; + }); + + }); + [self waitForExpectations:@[e] timeout:1000]; +} + +- (void)testAutoreleasePoolNSArray{ + co_enableAutorelease = YES; + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + co_launch_onqueue(get_test_queue(), ^{ + NSArray *list = @[@1, @2, @3, @4, @5, @6]; + [list enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + NSLog(@"%@", obj); + id value = await([self makeAsynPromise]); + NSLog(@"%@", value); + }]; + [e fulfill]; + }); + [self waitForExpectations:@[e] timeout:1000]; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcAutoreleaseTests.m b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcAutoreleaseTests.m new file mode 100644 index 0000000..520fa6d --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcAutoreleaseTests.m @@ -0,0 +1,553 @@ +// +// coobjcAutoreleaseTests.m +// coobjcBaseExampleTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#define EXP_SHORTHAND +#import +#import +#import +#import + +# define RR_PUSH() objc_autoreleasePoolPush() +# define RR_POP(p) objc_autoreleasePoolPop(p) +# define RR_RETAIN(o) [o retain] +# define RR_RELEASE(o) [o release] +# define RR_AUTORELEASE(o) objc_autorelease(o) +# define RR_RETAINCOUNT(o) [o retainCount] + +extern id objc_autorelease(id obj); +extern void * +objc_autoreleasePoolPush(void); +extern void +objc_autoreleasePoolPop(void *context); + +static int state; + +static dispatch_queue_t get_test_queue(){ + static dispatch_queue_t q = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + q = dispatch_queue_create("test_queue", NULL); + }); + return q; +} + +static dispatch_queue_t get_test_queue1(){ + static dispatch_queue_t q = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + q = dispatch_queue_create("test_queue_1", NULL); + }); + return q; +} + +#define NESTED_COUNT 8 + +@interface Deallocator : NSObject @end +@implementation Deallocator +-(void) dealloc +{ + // testprintf("-[Deallocator %p dealloc]\n", self); + state++; + [super dealloc]; +} +@end + +@interface AutoreleaseDuringDealloc : NSObject @end +@implementation AutoreleaseDuringDealloc +-(void) dealloc +{ + state++; + RR_AUTORELEASE([[Deallocator alloc] init]); + [super dealloc]; +} +@end + +@interface AutoreleasePoolDuringDealloc : NSObject @end +@implementation AutoreleasePoolDuringDealloc +-(void) dealloc +{ + // caller's pool + for (int i = 0; i < NESTED_COUNT; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } + + // local pool, popped + void *pool = RR_PUSH(); + for (int i = 0; i < NESTED_COUNT; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } + RR_POP(pool); + + // caller's pool again + for (int i = 0; i < NESTED_COUNT; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } + + { + static bool warned; + if (!warned) NSLog(@"rdar://7138159 NSAutoreleasePool leaks"); + warned = true; + } + state += NESTED_COUNT; + + [super dealloc]; +} +@end + +void *autorelease_lots_fn(void *singlePool) +{ + // Enough to blow out the stack if AutoreleasePoolPage is recursive. + const int COUNT = 1024*1024; + state = 0; + + int p = 0; + void **pools = (void**)malloc((COUNT+1) * sizeof(void*)); + pools[p++] = RR_PUSH(); + + id obj = RR_AUTORELEASE([[Deallocator alloc] init]); + + // last pool has only 1 autorelease in it + pools[p++] = RR_PUSH(); + + for (int i = 0; i < COUNT; i++) { + if (rand() % 1000 == 0 && !singlePool) { + pools[p++] = RR_PUSH(); + } else { + RR_AUTORELEASE(RR_RETAIN(obj)); + } + } + + assert(state == 0); + while (--p) { + RR_POP(pools[p]); + } + assert(state == 0); + assert(RR_RETAINCOUNT(obj) == 1); + RR_POP(pools[0]); + assert(state == 1); + free(pools); + + return NULL; +} + +void *nsthread_fn(void *arg __unused) +{ + [NSThread currentThread]; + void *pool = RR_PUSH(); + RR_AUTORELEASE([[Deallocator alloc] init]); + RR_POP(pool); + return NULL; +} + +@interface coobjcAutoreleaseTests : XCTestCase + +@end + +@implementation coobjcAutoreleaseTests + +- (COPromise*)makeAsynPromise{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + resolve(@1); + }); + }]; +} + +- (void)setUp { + [super setUp]; + co_autoreleaseInit(); + + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)cycle{ + // Normal autorelease. + NSLog(@"-- Normal autorelease."); + { + void *pool = RR_PUSH(); + state = 0; + RR_AUTORELEASE([[Deallocator alloc] init]); + XCTAssert(state == 0); + RR_POP(pool); + XCTAssert(state == 1); + } + + // Autorelease during dealloc during autoreleasepool-pop. + // That autorelease is handled by the popping pool, not the one above it. + printf("-- Autorelease during dealloc during autoreleasepool-pop.\n"); + { + void *pool = RR_PUSH(); + state = 0; + RR_AUTORELEASE([[AutoreleaseDuringDealloc alloc] init]); + XCTAssert(state == 0); + RR_POP(pool); + XCTAssert(state == 2); + } + + // Autorelease pool during dealloc during autoreleasepool-pop. + printf("-- Autorelease pool during dealloc during autoreleasepool-pop.\n"); + { + void *pool = RR_PUSH(); + state = 0; + RR_AUTORELEASE([[AutoreleasePoolDuringDealloc alloc] init]); + XCTAssert(state == 0); + RR_POP(pool); + XCTAssert(state == 4 * NESTED_COUNT); + } + + // Top-level thread pool popped normally. + printf("-- Thread-level pool popped normally.\n"); + { + state = 0; + co_launch_onqueue(get_test_queue1(), ^{ + void *pool = RR_PUSH(); + RR_AUTORELEASE([[Deallocator alloc] init]); + RR_POP(pool); + }); + co_delay(0.1); + XCTAssert(state == 1); + } + + + // Autorelease with no pool. + printf("-- Autorelease with no pool.\n"); + { + state = 0; + co_launch_onqueue(get_test_queue1(), ^{ + @autoreleasepool{ + RR_AUTORELEASE([[Deallocator alloc] init]); + } + }); + co_delay(0.1); + XCTAssert(state == 1); + } + + // Autorelease with no pool after popping the top-level pool. + printf("-- Autorelease with no pool after popping the last pool.\n"); + { + state = 0; + co_launch_onqueue(get_test_queue1(), ^{ + //NSAutoreleasePool *pool1 = [[NSAutoreleasePool alloc] init]; + @autoreleasepool{ + void *pool = RR_PUSH(); + RR_AUTORELEASE([[Deallocator alloc] init]); + RR_POP(pool); + RR_AUTORELEASE([[Deallocator alloc] init]); + } + + // [pool1 release]; + }); + co_delay(0.1); + + XCTAssert(state == 2); + } + + // Top-level thread pool not popped. + // The runtime should clean it up. + { + static bool warned; + if (!warned) printf("rdar://7138159 NSAutoreleasePool leaks\n"); + warned = true; + } + + // Intermediate pool not popped. + // Popping the containing pool should clean up the skipped pool first. + +} + +- (void)slow_cycle{ + // Large autorelease stack. + // Do this only once because it's slow. + printf("-- Large autorelease stack.\n"); + { + // limit stack size: autorelease pop should not be recursive + co_launch_onqueue(get_test_queue1(), ^{ + autorelease_lots_fn(NULL); + }); + co_delay(2.0); + } + + // Single large autorelease pool. + // Do this only once because it's slow. + printf("-- Large autorelease pool.\n"); + { + // limit stack size: autorelease pop should not be recursive + co_launch_onqueue(get_test_queue1(), ^{ + autorelease_lots_fn((void*)1); + }); + co_delay(2.0); + } +} + +- (void)testEnableAutoreleasePool{ + co_enableAutorelease = YES; + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + co_launch_onqueue(get_test_queue(), ^{ + state = 0; + void *ctx = co_autoreleasePoolPush(); + + coroutine_t *routine = coroutine_self(); + XCTAssert(routine->autoreleasepage != NULL); + for (int i = 0; i < 10; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } + + co_autoreleasePoolPop(ctx); + + XCTAssert(state == 10); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [e fulfill]; + }); + }); + [self waitForExpectations:@[e] timeout:1000]; + +} + +- (void)testEnableAutoreleasePoolAwait{ + co_enableAutorelease = YES; + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + co_launch_onqueue(get_test_queue(), ^{ + state = 0; + void *ctx = co_autoreleasePoolPush(); + + coroutine_t *routine = coroutine_self(); + XCTAssert(routine->autoreleasepage != NULL); + for (int i = 0; i < 10; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } + id val = await([self makeAsynPromise]); + //TODO: NSLog会导致autorelease崩溃 + printf("%d\n", [val intValue]); + for (int i = 0; i < 10; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } + + co_autoreleasePoolPop(ctx); + + XCTAssert(state == 20); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [e fulfill]; + }); + }); + [self waitForExpectations:@[e] timeout:1000]; + +} + +- (void)testEnableAutoreleasePoolNSLog{ + co_enableAutorelease = YES; + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + co_launch_onqueue(get_test_queue(), ^{ + state = 0; + void *ctx = co_autoreleasePoolPush(); + + coroutine_t *routine = coroutine_self(); + XCTAssert(routine->autoreleasepage != NULL); + for (int i = 0; i < 10; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } + NSLog(@"test"); + for (int i = 0; i < 10; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } + + co_autoreleasePoolPop(ctx); + + XCTAssert(state == 20); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [e fulfill]; + }); + }); + [self waitForExpectations:@[e] timeout:1000]; + +} + +- (void)testDisableAutoreleasePool{ + co_enableAutorelease = NO; + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + co_launch_onqueue(get_test_queue(), ^{ + state = 0; + void *ctx = co_autoreleasePoolPush(); + + coroutine_t *routine = coroutine_self(); + XCTAssert(routine->autoreleasepage == NULL); + for (int i = 0; i < 10; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } + NSLog(@"test"); + for (int i = 0; i < 10; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } + + co_autoreleasePoolPop(ctx); + + XCTAssert(state == 0); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [e fulfill]; + }); + }); + [self waitForExpectations:@[e] timeout:1000]; +} + +- (void)testAutoreleasePoolNested{ + co_enableAutorelease = YES; + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + co_launch_onqueue(get_test_queue(), ^{ + state = 0; + void *ctx = co_autoreleasePoolPush(); + + coroutine_t *routine = coroutine_self(); + XCTAssert(routine->autoreleasepage != NULL); + { + void *ctx1 = co_autoreleasePoolPush(); + for (int i = 0; i < 10; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } + co_autoreleasePoolPop(ctx1); + } + + id val = await([self makeAsynPromise]); + //TODO: NSLog会导致autorelease崩溃 + NSLog(@"%@", val); + { + void *ctx1 = co_autoreleasePoolPush(); + for (int i = 0; i < 10; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } + co_autoreleasePoolPop(ctx1); + } + val = await([self makeAsynPromise]); + //TODO: NSLog会导致autorelease崩溃 + NSLog(@"%@", val); + + for (int i = 0; i < 10; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } + + co_autoreleasePoolPop(ctx); + + XCTAssert(state == 30); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [e fulfill]; + }); + }); + [self waitForExpectations:@[e] timeout:1000]; +} + +- (void)testAutoreleasePoolNestedUnbanlance{ + co_enableAutorelease = YES; + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + co_launch_onqueue(get_test_queue(), ^{ + state = 0; + void *ctx = co_autoreleasePoolPush(); + + coroutine_t *routine = coroutine_self(); + XCTAssert(routine->autoreleasepage != NULL); + { + __unused void *ctx1 = co_autoreleasePoolPush(); + for (int i = 0; i < 10; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } +// co_autoreleasePoolPop(ctx1); + } + + id val = await([self makeAsynPromise]); + //TODO: NSLog会导致autorelease崩溃 + NSLog(@"%@", val); + { + void *ctx1 = co_autoreleasePoolPush(); + for (int i = 0; i < 10; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } + co_autoreleasePoolPop(ctx1); + } + val = await([self makeAsynPromise]); + //TODO: NSLog会导致autorelease崩溃 + NSLog(@"%@", val); + + for (int i = 0; i < 10; i++) { + RR_AUTORELEASE([[Deallocator alloc] init]); + } + + co_autoreleasePoolPop(ctx); + + XCTAssert(state == 30); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [e fulfill]; + }); + }); + [self waitForExpectations:@[e] timeout:1000]; +} + +- (void)testAutoreleaseCycle{ + // inflate the refcount side table so it doesn't show up in leak checks + co_enableAutorelease = YES; + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch_onqueue(get_test_queue(), ^{ + state = 0; + { + int count = 10000; + id *objs = (id *)malloc(count*sizeof(id)); + for (int i = 0; i < count; i++) { + objs[i] = RR_RETAIN([NSObject new]); + } + for (int i = 0; i < count; i++) { + RR_RELEASE(objs[i]); + RR_RELEASE(objs[i]); + } + free(objs); + } + + // inflate NSAutoreleasePool's instance cache + { + int count = 32; + id *objs = (id *)malloc(count * sizeof(id)); + for (int i = 0; i < count; i++) { + objs[i] = [[NSAutoreleasePool alloc] init]; + } + for (int i = 0; i < count; i++) { + [objs[count-i-1] release]; + } + + free(objs); + } + + // preheat + { + for (int i = 0; i < 100; i++) { + [self cycle]; + } + + [self slow_cycle]; + } + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; + +} + + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcBaseExampleTests.m b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcBaseExampleTests.m new file mode 100644 index 0000000..4618578 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcBaseExampleTests.m @@ -0,0 +1,49 @@ +// +// coobjcBaseExampleTests.m +// coobjcBaseExampleTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 coobjcBaseExampleTests : XCTestCase + +@end + +@implementation coobjcBaseExampleTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcBenchmarkTests.m b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcBenchmarkTests.m new file mode 100644 index 0000000..3b9a9a1 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcBenchmarkTests.m @@ -0,0 +1,178 @@ +// +// coobjcBenchmarkTests.m +// coobjcBaseExampleTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#define EXP_SHORTHAND +#import +#import +#import +#import "coobjcCommon.h" + +SpecBegin(coPerformance) + +describe(@"count benchmark", ^{ + /* + it(@"create 100 co and thread", ^{ + __block NSTimeInterval co_cost = 0; + __block NSTimeInterval thread_cost = 0; + __block int co_run_count = 0; + __block int thread_count = 0; + + + + NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_%d", [NSDate date], rand()]]; + NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://pytstore.oss-cn-shanghai.aliyuncs.com/TMARDefault.zip"]]; + [data writeToFile:filePath atomically:YES]; + NSTimeInterval beginTime = [[NSDate date] timeIntervalSince1970]; + + + dispatch_semaphore_t sem = dispatch_semaphore_create(1); + co_repeat(100, ^(int index){ + NSData *data = await([NSData co_dataWithContentOfFile:filePath]); + co_run_count++; + if(co_run_count == 100){ + co_cost = [[NSDate date] timeIntervalSince1970] - beginTime; + NSLog(@"co cost: %f", (float)co_cost); + } + }); + + for (int i = 0; i < 100; i++) { +// int j = i; + [NSThread detachNewThreadWithBlock:^{ + NSData *data = [[NSData alloc] initWithContentsOfFile:filePath]; + + dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); + thread_count++; + if(thread_count == 100){ + thread_cost = [[NSDate date] timeIntervalSince1970] - beginTime; + NSLog(@"thread cost: %f", (float)thread_cost); + } + dispatch_semaphore_signal(sem); + }]; + } + + waitUntilTimeout(10, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(6 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + NSLog(@"co cost: %.3f, thread cost: %.3f", (float)co_cost, (float)thread_cost); + done(); + }); + }); + + }); + + it(@"create 1000 co and thread", ^{ + __block NSTimeInterval co_cost = 0; + __block NSTimeInterval thread_cost = 0; + __block int co_run_count = 0; + __block int thread_count = 0; + + + + NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_%d", [NSDate date], rand()]]; + NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://pytstore.oss-cn-shanghai.aliyuncs.com/GalileoShellApp.ipa"]]; + [data writeToFile:filePath atomically:YES]; + NSTimeInterval beginTime = [[NSDate date] timeIntervalSince1970]; + + + dispatch_semaphore_t sem = dispatch_semaphore_create(1); + co_repeat(1000, ^(int index){ + NSData *data = await([NSData co_dataWithContentOfFile:filePath]); + co_run_count++; + if(co_run_count == 1000){ + co_cost = [[NSDate date] timeIntervalSince1970] - beginTime; + NSLog(@"co cost: %f", (float)co_cost); + } + }); + + for (int i = 0; i < 1000; i++) { + // int j = i; + [NSThread detachNewThreadWithBlock:^{ + NSData *data = [[NSData alloc] initWithContentsOfFile:filePath]; + + dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); + thread_count++; + if(thread_count == 1000){ + thread_cost = [[NSDate date] timeIntervalSince1970] - beginTime; + NSLog(@"thread cost: %f", (float)thread_cost); + } + dispatch_semaphore_signal(sem); + }]; + } + + waitUntilTimeout(10, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(6 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + NSLog(@"co cost: %.3f, thread cost: %.3f", (float)co_cost, (float)thread_cost); + done(); + }); + }); + + }); + + it(@"create 10000 co and thread", ^{ + __block NSTimeInterval co_cost = 0; + __block NSTimeInterval thread_cost = 0; + __block int co_run_count = 0; + __block int thread_count = 0; + + + + NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_%d", [NSDate date], rand()]]; + NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://pytstore.oss-cn-shanghai.aliyuncs.com/GalileoShellApp.ipa"]]; + [data writeToFile:filePath atomically:YES]; + NSTimeInterval beginTime = [[NSDate date] timeIntervalSince1970]; + + + dispatch_semaphore_t sem = dispatch_semaphore_create(1); + co_repeat(1000, ^(int index){ + NSData *data = await([NSData co_dataWithContentOfFile:filePath]); + co_run_count++; + if(co_run_count == 10000){ + co_cost = [[NSDate date] timeIntervalSince1970] - beginTime; + NSLog(@"co cost: %f", (float)co_cost); + } + }); + + for (int i = 0; i < 1000; i++) { + // int j = i; + [NSThread detachNewThreadWithBlock:^{ + NSData *data = [[NSData alloc] initWithContentsOfFile:filePath]; + + dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); + thread_count++; + if(thread_count == 10000){ + thread_cost = [[NSDate date] timeIntervalSince1970] - beginTime; + NSLog(@"thread cost: %f", (float)thread_cost); + } + dispatch_semaphore_signal(sem); + }]; + } + + waitUntilTimeout(10, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(6 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + NSLog(@"co cost: %.3f, thread cost: %.3f", (float)co_cost, (float)thread_cost); + done(); + }); + }); + + }); + */ +}); + +SpecEnd + diff --git a/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCancelTests.m b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCancelTests.m new file mode 100644 index 0000000..58ca20c --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCancelTests.m @@ -0,0 +1,97 @@ +// +// coobjcCancelTests.m +// coobjcBaseExampleTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#define EXP_SHORTHAND +#import +#import +#import + +SpecBegin(coCancel) + +describe(@"cancel in the same thread", ^{ + it(@"tes cancel", ^{ + __block int val = 0; + COCoroutine *co = co_launch(^{ + val++; + NSLog(@"before"); + co_delay(1); + NSLog(@"after"); + if (!co_isActive()) return; + val++; + }); + XCTAssert(val == 0); + waitUntil(^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [co cancel]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 1); + done(); + }); + + }); + }); + }); + + + it(@"cancel after routine done will do nothing", ^{ + __block int val = 0; + COCoroutine *co = co_launch(^{ + val++; + co_delay(1.0); + if (!co_isActive()) return; + val++; + }); + XCTAssert(val == 0); + waitUntil(^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 2); + [co cancel]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 2); + done(); + }); + }); + }); + }); + + + it(@"cancel after routine done will do nothing", ^{ + __block int val = 0; + COCoroutine *co = co_launch(^{ + val++; + co_delay(1.0); + if (!co_isActive()) return; + val++; + }); + XCTAssert(val == 0); + waitUntil(^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 2); + [co cancel]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 2); + done(); + }); + }); + }); + }); +}); + +SpecEnd diff --git a/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcChannelTests.m b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcChannelTests.m new file mode 100644 index 0000000..f2d6af0 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcChannelTests.m @@ -0,0 +1,448 @@ +// +// coobjcChannelTests.m +// coobjcBaseExampleTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#define EXP_SHORTHAND +#import +#import +#import + + +SpecBegin(coChannel) + + + +describe(@"Channel tests", ^{ + it(@"Channel‘s buffcount is 0, will blocking send.", ^{ + __block NSInteger step = 0; + + COChan *chan = [COChan chanWithBuffCount:0]; + + co_launch(^{ + step = 1; + [chan send:@111]; + expect(step).to.equal(4); + step = 2; + }); + + + co_launch(^{ + + expect(step).to.equal(1); + step = 3; + id value = [chan receive_nonblock]; + expect(step).to.equal(3); + step = 4; + expect(value).to.equal(@111); + }); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + expect(step).to.equal(2); + done(); + }); + }); + }); + + it(@"Channel with buffcount will not blocking send.", ^{ + __block NSInteger step = 0; + + COChan *chan = [COChan chanWithBuffCount:1]; + + co_launch(^{ + step = 1; + expect(step).to.equal(1); + [chan send:@111]; + expect(step).to.equal(1); + step = 2; + }); + + + co_launch(^{ + expect(step).to.equal(2); + step = 3; + id value = [chan receive_nonblock]; + expect(step).to.equal(3); + step = 4; + expect(value).to.equal(@111); + + }); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + done(); + }); + }); + }); + + it(@"Receive just before send.", ^{ + __block NSInteger step = 0; + + COChan *chan = [COChan chan]; + + co_launch(^{ + step = 1; + expect(step).to.equal(1); + id value = [chan receive]; + expect(step).to.equal(4); + expect(value).to.equal(@111); + step = 2; + }); + + + co_launch(^{ + expect(step).to.equal(1); + step = 3; + [chan send:@111]; + expect(step).to.equal(3); + step = 4; + }); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + expect(step).to.equal(2); + done(); + }); + }); + }); + + it(@"Channel' buff is full, will blocking send.", ^{ + __block NSInteger step = 0; + + COChan *chan = [COChan chanWithBuffCount:1]; + + co_launch(^{ + step = 1; + [chan send:@111]; + expect(step).to.equal(1); + step = 2; + }); + + co_launch(^{ + expect(step).to.equal(2); + step = 3; + [chan send:@222]; + step = 4; + }); + + co_launch(^{ + expect(step).to.equal(3); + id value = [chan receive_nonblock]; + expect(step).to.equal(3); + expect(value).to.equal(@111); + + expect(step).to.equal(3); + value = [chan receive_nonblock]; + expect(step).to.equal(3); + expect(value).to.equal(@222); + }); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + expect(step).to.equal(4); + done(); + }); + }); + }); + + it(@"Channel can block muti coroutine use send.", ^{ + __block NSInteger step = 0; + + COChan *chan = [COChan chan]; + + co_launch(^{ + step = 1; + [chan send:@111]; + expect(step).to.equal(4); + step = 5; + }); + + co_launch(^{ + expect(step).to.equal(1); + step = 3; + [chan send:@222]; + expect(step).to.equal(5); + step = 6; + }); + + co_launch(^{ + expect(step).to.equal(3); + id value = [chan receive_nonblock]; + expect(step).to.equal(3); + expect(value).to.equal(@111); + + + expect(step).to.equal(3); + value = [chan receive_nonblock]; + expect(step).to.equal(3); + expect(value).to.equal(@222); + NSLog(@"after receive 2"); + step = 4; + }); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + expect(step).to.equal(6); + done(); + }); + }); + }); + + + it(@"send non blocking will not block the coroutine.", ^{ + __block NSInteger step = 0; + + COChan *chan = [COChan chanWithBuffCount:1]; + + co_launch(^{ + step = 1; + [chan send_nonblock:@111]; + expect(step).to.equal(1); + step = 2; + }); + + + co_launch(^{ + expect(step).to.equal(2); + step = 3; + id value = [chan receive_nonblock]; + expect(step).to.equal(3); + expect(value).to.equal(@111); + }); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + expect(step).to.equal(3); + done(); + }); + }); + }); + + it(@"Channel buff is full, send non blocking will abandon the value.", ^{ + __block NSInteger step = 0; + + COChan *chan = [COChan chan]; + + co_launch(^{ + step = 1; + [chan send_nonblock:@111]; + expect(step).to.equal(1); + step = 2; + }); + + + co_launch(^{ + expect(step).to.equal(2); + step = 3; + id value = [chan receive_nonblock]; + expect(step).to.equal(3); + expect(value).to.equal(nil); + }); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + expect(step).to.equal(3); + done(); + }); + }); + }); + + it(@"receive shall block the coroutine, when there is no value send.", ^{ + __block NSInteger step = 0; + + COChan *chan = [COChan chanWithBuffCount:1]; + + co_launch(^{ + step = 1; + id value = [chan receive]; + expect(step).to.equal(4); + expect(value).to.equal(@111); + step = 2; + }); + + + co_launch(^{ + expect(step).to.equal(1); + step = 3; + [chan send:@111]; + expect(step).to.equal(3); + step = 4; + }); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + expect(step).to.equal(2); + done(); + }); + }); + }); + + it(@"receive can block muti coroutine.", ^{ + __block NSInteger step = 0; + + COChan *chan = [COChan chanWithBuffCount:1]; + + co_launch(^{ + step = 1; + id value = [chan receive]; + expect(step).to.equal(7); + expect(value).to.equal(@111); + step = 2; + }); + + co_launch(^{ + expect(step).to.equal(1); + step = 3; + id value = [chan receive]; + expect(step).to.equal(2); + expect(value).to.equal(@222); + step = 4; + }); + + + co_launch(^{ + expect(step).to.equal(3); + step = 5; + [chan send:@111]; + expect(step).to.equal(5); + + step = 6; + [chan send:@222]; + expect(step).to.equal(6); + step = 7; + }); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + expect(step).to.equal(4); + done(); + }); + }); + }); + + it(@"receive_nonblock will not block the coroutine.", ^{ + __block NSInteger step = 0; + + COChan *chan = [COChan chanWithBuffCount:1]; + + co_launch(^{ + step = 1; + id value = [chan receive_nonblock]; + expect(step).to.equal(1); + expect(value).to.equal(nil); + step = 2; + }); + + co_launch(^{ + expect(step).to.equal(2); + step = 3; + + [chan send_nonblock:@222]; + expect(step).to.equal(3); + step = 4; + + id value = [chan receive_nonblock]; + expect(value).to.equal(@222); + }); + + + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + done(); + }); + }); + }); + + it(@"send and receive on muti thread.", ^{ + __block NSInteger receiveCount = 0; + __block NSInteger receiveValue = 0; + NSLock *lock = [[NSLock alloc] init]; + + __block NSInteger sendCount = 0; + NSLock *lock1 = [[NSLock alloc] init]; + + COChan *chan = [COChan chanWithBuffCount:2]; + + for (int i = 0; i < 2000; i++) { + dispatch_async(dispatch_get_global_queue(0, 0), ^{ + + co_launch(^{ + id value = [chan receive]; + [lock lock]; + receiveCount ++; + receiveValue += [value integerValue]; + [lock unlock]; + }); + }); + } + + for (int i = 0; i < 2000; i++) { + dispatch_async(dispatch_get_global_queue(0, 0), ^{ + + co_launch(^{ + [chan send:@(i)]; + [lock1 lock]; + sendCount ++; + [lock1 unlock]; + }); + }); + } + + waitUntilTimeout(100, ^(DoneCallback done) { + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + NSLog(@"end"); + expect(receiveCount).to.equal(2000); + expect(receiveValue).to.equal(1999000); + expect(sendCount).to.equal(2000); + + done(); + }); + }); + }); + + + it(@"expandableChan will not abandon values.", ^{ + __block NSInteger receiveCount = 0; + __block NSInteger receiveValue = 0; + + __block NSInteger sendCount = 0; + + COChan *chan = [COChan expandableChan]; + + for (int i = 0; i < 2000; i++) { + co_launch(^{ + [chan send:@(i)]; + sendCount++; + }); + } + + for (int i = 0; i < 2000; i++) { + co_launch(^{ + id value = [chan receive]; + receiveCount++; + receiveValue+=[value integerValue]; + }); + } + + waitUntilTimeout(100, ^(DoneCallback done) { + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + + expect(receiveCount).to.equal(2000); + expect(receiveValue).to.equal(1999000); + expect(sendCount).to.equal(2000); + done(); + }); + }); + }); + +}); +SpecEnd diff --git a/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCommon.h b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCommon.h new file mode 100644 index 0000000..902ede2 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCommon.h @@ -0,0 +1,31 @@ +// +// coobjcCommon.h +// coobjcBaseExampleTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 + +#import + +@interface NSData (asyncio) + ++ (COChan *)co_dataWithContentOfFile:(NSString *)filePath; + +- (COChan *)co_writeToFile:(NSString*)filePath; + ++ (COChan *)co_downloadWithURL:(NSString*)url; + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCommon.m b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCommon.m new file mode 100644 index 0000000..1955494 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCommon.m @@ -0,0 +1,131 @@ +// +// coobjcCommon.m +// coobjcBaseExampleTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "coobjcCommon.h" +#import "co_queue.h" + +#include + +static dispatch_queue_t CODefaultIOQueue() { + static dispatch_queue_t pipeQ = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + pipeQ = dispatch_queue_create("cco.IOQueue",NULL); + }); + return pipeQ; +} + +@implementation NSData (asyncio) + ++ (COChan *)co_dataWithContentOfFile:(NSString *)filePath { + + dispatch_queue_t pipe_q = CODefaultIOQueue(); + const char *filePathCStr = [filePath fileSystemRepresentation]; + + int fd = open(filePathCStr, O_RDONLY | O_NONBLOCK, S_IRUSR); + if (fd == -1) { + return nil; + } + + COChan *chan = [COChan chan]; + + dispatch_io_t pipe_channel = dispatch_io_create(DISPATCH_IO_STREAM,fd,pipe_q,^(int err){ + close(fd); + }); + + dispatch_io_set_low_water(pipe_channel,SIZE_MAX); + + dispatch_io_read(pipe_channel,0,SIZE_MAX,pipe_q, ^(bool done,dispatch_data_t pipe_data,int err){ + if (done) { + [chan send_nonblock:@"sdfadsf"]; + } + }); + return chan; +} + +- (COChan *)co_writeToFile:(NSString*)filePath{ + dispatch_queue_t pipe_q = CODefaultIOQueue(); + const char *filePathCStr = [filePath fileSystemRepresentation]; + + int fd = open(filePathCStr, O_CREAT | O_TRUNC, S_IRUSR); + if (fd == -1) { + return nil; + } + + COChan *chan = [COChan chan]; + + dispatch_io_t pipe_channel = dispatch_io_create(DISPATCH_IO_STREAM,fd,pipe_q,^(int err){ + close(fd); + }); + + dispatch_io_set_low_water(pipe_channel,SIZE_MAX); + + dispatch_data_t data = dispatch_data_create(self.bytes, self.length, pipe_q, DISPATCH_DATA_DESTRUCTOR_DEFAULT); + dispatch_queue_t curQueue = co_get_current_queue(); + NSUInteger size = self.length; + dispatch_io_write(pipe_channel, 0, data, pipe_q, ^(bool done, dispatch_data_t _Nullable data, int error) { + if (error) { + dispatch_async(curQueue, ^{ + [chan send:@(0)]; + }); + } + else{ + if (done) { + dispatch_async(curQueue, ^{ + [chan send:@(size)]; + }); + } + } + + }); + + return chan; +} + ++ (COChan *)co_downloadWithURL:(NSString*)url{ + dispatch_queue_t curQueue = co_get_current_queue(); + + COChan *chan = [COChan chan]; + [NSURLSession sharedSession].configuration.requestCachePolicy = NSURLRequestReloadIgnoringCacheData; + NSURLSessionDownloadTask *task = [[NSURLSession sharedSession] downloadTaskWithURL:[NSURL URLWithString:url] completionHandler: + ^(NSURL *location, NSURLResponse *response, NSError *error) { + if (error) { + dispatch_async(curQueue, ^{ + [chan send_nonblock:error]; + }); + return; + } + else{ + NSData *data = [[NSData alloc] initWithContentsOfURL:location]; + + dispatch_async(curQueue, ^{ + [chan send_nonblock:data]; + }); + return; + } + }]; + + [task resume]; + + + + return chan; +} + + +@end diff --git a/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCreateTests.m b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCreateTests.m new file mode 100644 index 0000000..b4a9570 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcCreateTests.m @@ -0,0 +1,194 @@ +// +// coobjcCreateTests.m +// coobjcBaseExampleTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 + +#import +#define EXP_SHORTHAND +#import +#import +#import + +/* +SpecBegin(coCreate) + describe(@"create with co_create", ^{ + it(@"create with default queue", ^{ + __block int val = 0; + COCoroutine *co = co_create(^{ + val++; + NSLog(@"test"); + }); + XCTAssert(co != nil); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + XCTAssert(val == 0); + [co resume]; + dispatch_async(dispatch_get_main_queue(), ^{ + XCTAssert(val == 1); + done(); + }); + }); + }); + }); + it(@"create with custom queue", ^{ + __block int val = 0; + dispatch_queue_t q = dispatch_queue_create("test", NULL); + COCoroutine *co = co_create_onqueue(q, ^{ + val++; + NSLog(@"test"); + }); + XCTAssert(co != nil); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + XCTAssert(val == 0); + [co resume]; + dispatch_async(q, ^{ + XCTAssert(val == 1); + done(); + }); + }); + }); + }); + it(@"nest create with same queue", ^{ + __block int val = 0; + __block COCoroutine *co1 = nil; + + COCoroutine *co = co_create(^{ + co1 = co_create(^{ + val++; + NSLog(@"test"); + }); + [co1 resume]; + }); + XCTAssert(co != nil); + XCTAssert(co1 == nil); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + XCTAssert(co1 == nil); + [co resume]; + dispatch_async(dispatch_get_main_queue(), ^{ + XCTAssert(co1 != nil); + [co1 resume]; + dispatch_async(dispatch_get_main_queue(), ^{ + XCTAssert(val == 1); + done(); + }); + }); + }); + }); + }); + it(@"nest create with different queue", ^{ + __block int val = 0; + __block COCoroutine *co1 = nil; + dispatch_queue_t q = dispatch_queue_create("test", NULL); + + COCoroutine *co = co_create(^{ + co1 = co_create_onqueue(q, ^{ + val++; + NSLog(@"test"); + }); + }); + XCTAssert(co != nil); + XCTAssert(co1 == nil); + waitUntil(^(DoneCallback done) { + XCTAssert(co1 == nil); + [co resume]; + dispatch_async(dispatch_get_main_queue(), ^{ + dispatch_async(q, ^{ + XCTAssert(co1 != nil); + [co1 resume]; + dispatch_async(q, ^{ + XCTAssert(val == 1); + done(); + }); + }); + }); + }); + }); + }); + + describe(@"create with co_launch", ^{ + it(@"launch with default queue", ^{ + __block int val = 0; + co_launch(^{ + val++; + NSLog(@"test"); + }); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + XCTAssert(val == 1); + done(); + }); + }); + }); + it(@"create with custom queue", ^{ + __block int val = 0; + dispatch_queue_t q = dispatch_queue_create("test", NULL); + co_launch_onqueue(q, ^{ + val++; + NSLog(@"test"); + }); + waitUntil(^(DoneCallback done) { + dispatch_async(q, ^{ + XCTAssert(val == 1); + done(); + }); + }); + }); + it(@"nest create with same queue", ^{ + __block int val = 0; + + co_launch(^{ + co_launch(^{ + val++; + NSLog(@"test"); + }); + }); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + dispatch_async(dispatch_get_main_queue(), ^{ + XCTAssert(val == 1); + done(); + }); + }); + }); + }); + it(@"nest create with different queue", ^{ + __block int val = 0; + dispatch_queue_t q = dispatch_queue_create("test", NULL); + + co_launch(^{ + co_launch_onqueue(q, ^{ + val++; + NSLog(@"test"); + }); + }); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + dispatch_async(q, ^{ + dispatch_async(q, ^{ + XCTAssert(val == 1); + done(); + }); + }); + }); + }); + }); + }); +SpecEnd +*/ diff --git a/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcDelayTests.m b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcDelayTests.m new file mode 100644 index 0000000..3b24e48 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcDelayTests.m @@ -0,0 +1,54 @@ +// +// coobjcDelayTests.m +// coobjcBaseExampleTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#define EXP_SHORTHAND +#import +#import +#import +#import "coobjcCommon.h" + +SpecBegin(coDelay) + +describe(@"test delay", ^{ + it(@"delay must run in coroutine", ^{ + int exception = 0; + @try{ + co_delay(1); + }@catch(NSException *e){ + exception++; + } + XCTAssert(exception == 1); + NSTimeInterval duration = 3; + __block NSTimeInterval realDuration = 0; + co_launch(^{ + NSTimeInterval begin = [[NSDate date] timeIntervalSince1970]; + co_delay(3); + realDuration = [[NSDate date] timeIntervalSince1970] - begin; + }); + waitUntilTimeout(5, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(fabs(duration - realDuration) < 0.1); + done(); + }); + }); + }); +}); + +SpecEnd diff --git a/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcPromiseTests.m b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcPromiseTests.m new file mode 100644 index 0000000..afbcfaf --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcPromiseTests.m @@ -0,0 +1,184 @@ +// +// coobjcPromiseTests.m +// coobjcBaseExampleTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#define EXP_SHORTHAND +#import +#import +#import + +static id testPromise1() { + + COPromise *promise = [COPromise new]; + + dispatch_async(dispatch_get_main_queue(), ^{ + + [promise fulfill:@11]; + }); + + return promise; +} + +static id testPromise2() { + + COPromise *promise = [COPromise new]; + + dispatch_async(dispatch_get_main_queue(), ^{ + + [promise reject:[NSError errorWithDomain:@"hehe" code:-1 userInfo:@{NSLocalizedDescriptionKey: @"hehe1"}]]; + }); + + return promise; +} + +@interface Test123 : NSObject +{ + dispatch_block_t _block; +} ++ (instancetype)instance; +@end + +@implementation Test123 + ++ (instancetype)instanceWithBlock:(dispatch_block_t)block { + Test123 *obj = [self new]; + obj->_block = block; + return obj; +} + +- (void)fire { + _block(); +} + +@end + +static id testPromise3() { + + COPromise *promise = [COPromise new]; + + + NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:5 target:[Test123 instanceWithBlock:^{ + [promise fulfill:@13]; + }] selector:@selector(fire) userInfo:nil repeats:NO]; + + + [promise onCancel:^(COPromise * _Nonnull promise) { + [timer invalidate]; + }]; + + return promise; +} + + +SpecBegin(coPromise) + + + +describe(@"Proimse tests", ^{ + it(@"fulfill will return the result normally.", ^{ + __block NSInteger val = 0; + + co_launch(^{ + + id result = await(testPromise1()); + val = [result integerValue]; + NSLog(@"test"); + }); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + XCTAssert(val == 11); + done(); + }); + }); + }); + + it(@"reject should return nil, and error.", ^{ + __block NSInteger val = 0; + co_launch(^{ + + id result = await(testPromise2()); + if (!result) { + NSError *error = co_getError(); + XCTAssert(error.code == -1); + val = 12; + } else { + val = 11; + } + }); + waitUntil(^(DoneCallback done) { + dispatch_async(dispatch_get_main_queue(), ^{ + XCTAssert(val == 12); + done(); + }); + }); + }); + + it(@"after cancel, the coroutine should not execute the rest codes.", ^{ + __block NSInteger val = 44; + COCoroutine *co = co_launch(^{ + + id result = await(testPromise3()); + if (!result) { + NSError *error = co_getError(); + XCTAssert(error != nil); + XCTAssert(co_isActive() == NO); + val = 12; + } else { + val = 11; + } + }); + waitUntil(^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [co cancel]; + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 12); + done(); + }); + }); + }); + }); + + it(@"cancel a routine which is finished will do nothing.", ^{ + __block NSInteger val = 44; + COCoroutine *co = co_launch(^{ + + id result = await(testPromise3()); + if (!result) { + NSError *error = co_getError(); + XCTAssert(error.code == -2341); + val = 12; + } else { + val = 11; + } + }); + waitUntil(^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [co cancel]; + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 11); + done(); + }); + }); + }); + }); + +}); +SpecEnd diff --git a/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcSequenceTests.m b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcSequenceTests.m new file mode 100644 index 0000000..bb86362 --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcSequenceTests.m @@ -0,0 +1,283 @@ +// +// coobjcSequenceTests.m +// coobjcBaseExampleTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#define EXP_SHORTHAND +#import +#import +#import +#import "coobjcCommon.h" + +SpecBegin(coSequence) + +describe(@"test sequence on same queue", ^{ + it(@"yield value", ^{ + COCoroutine *co1 = co_sequence(^{ + int index = 0; + while(co_isActive()){ + NSLog(@"==== before yield val %d", index); + yield_val(@(index)); + NSLog(@"==== after yield val %d", index); + index++; + } + }); + __block int val = 0; + co_launch(^{ + for(int i = 0; i < 10; i++){ + NSLog(@"==== before next val %d", i); + val = [[co1 next] intValue]; + NSLog(@"==== after next val %d", val); + } + [co1 cancel]; + }); + waitUntilTimeout(2.0, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 9); + done(); + }); + }); + }); + + it(@"yield value chain", ^{ + COCoroutine *co1 = co_sequence(^{ + int index = 0; + while(co_isActive()){ + yield_val(@(index)); + index++; + } + }); + + COCoroutine *co2 = co_sequence(^{ + int index = 0; + while(co_isActive()){ + yield_val([co1 next]); + index++; + } + }); + __block int val = 0; + co_launch(^{ + for(int i = 0; i < 10; i++){ + val = [[co2 next] intValue]; + } + [co2 cancel]; + [co1 cancel]; + }); + waitUntilTimeout(2.0, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 9); + done(); + }); + }); + }); + + it(@"yield promise", ^{ + COCoroutine *co1 = co_sequence(^{ + int index = 0; + while(co_isActive()){ + yield([NSData co_downloadWithURL:@"http://pytstore.oss-cn-shanghai.aliyuncs.com/GalileoShellApp.ipa"]); + index++; + } + }); + int filebytes = 248564; + __block int val = 0; + co_launch(^{ + for(int i = 0; i < 10; i++){ + NSData *data = [co1 next]; + val += data.length; + //val = [[co1 next] intValue]; + } + [co1 cancel]; + }); + waitUntilTimeout(5.0, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == filebytes * 10); + done(); + }); + }); + }); + + it(@"yield promise chain", ^{ + + COCoroutine *co2 = co_sequence(^{ + int index = 0; + while(co_isActive()){ + yield([NSData co_downloadWithURL:@"http://pytstore.oss-cn-shanghai.aliyuncs.com/GalileoShellApp.ipa"]); + index++; + } + }); + + COCoroutine *co1 = co_sequence((^{ + int index = 0; + while(co_isActive()){ + NSArray *list = [NSArray arrayWithObjects:[co2 next], [co2 next], nil]; + yield_val(list); + index++; + } + })); + int filebytes = 248564; + __block int val = 0; + co_launch(^{ + for(int i = 0; i < 10; i++){ + NSArray *list = [co1 next]; + val += [list[0] length]; + val += [list[1] length]; + //val = [[co1 next] intValue]; + } + [co1 cancel]; + [co2 cancel]; + }); + waitUntilTimeout(5.0, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == filebytes * 20); + done(); + }); + }); + }); + +}); + +describe(@"test sequence on multi thread", ^{ + it(@"yield value", ^{ + dispatch_queue_t q = dispatch_queue_create("test", NULL); + COCoroutine *co1 = co_sequence_onqueue(q, ^{ + int index = 0; + while(co_isActive()){ + yield_val(@(index)); + index++; + } + }); + __block int val = 0; + co_launch(^{ + for(int i = 0; i < 10; i++){ + val = [[co1 next] intValue]; + } + [co1 cancel]; + }); + waitUntilTimeout(2.0, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 9); + done(); + }); + }); + }); + + it(@"yield value chain", ^{ + dispatch_queue_t q1 = dispatch_queue_create("test", NULL); + dispatch_queue_t q2 = dispatch_queue_create("test", NULL); + + COCoroutine *co1 = co_sequence_onqueue(q1, ^{ + int index = 0; + while(co_isActive()){ + yield_val(@(index)); + index++; + } + }); + + COCoroutine *co2 = co_sequence_onqueue(q2, ^{ + int index = 0; + while(co_isActive()){ + yield_val([co1 next]); + index++; + } + }); + __block int val = 0; + co_launch(^{ + for(int i = 0; i < 10; i++){ + val = [[co2 next] intValue]; + } + [co2 cancel]; + [co1 cancel]; + }); + waitUntilTimeout(2.0, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == 9); + done(); + }); + }); + }); + + it(@"yield promise", ^{ + dispatch_queue_t q1 = dispatch_queue_create("test", NULL); + COCoroutine *co1 = co_sequence_onqueue(q1, ^{ + int index = 0; + while(co_isActive()){ + yield([NSData co_downloadWithURL:@"http://pytstore.oss-cn-shanghai.aliyuncs.com/GalileoShellApp.ipa"]); + index++; + } + }); + int filebytes = 248564; + __block int val = 0; + co_launch(^{ + for(int i = 0; i < 10; i++){ + NSData *data = [co1 next]; + val += data.length; + //val = [[co1 next] intValue]; + } + [co1 cancel]; + }); + waitUntilTimeout(5.0, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == filebytes * 10); + done(); + }); + }); + }); + + it(@"yield promise chain", ^{ + dispatch_queue_t q1 = dispatch_queue_create("test", NULL); + dispatch_queue_t q2 = dispatch_queue_create("test", NULL); + + COCoroutine *co2 = co_sequence_onqueue(q1, ^{ + int index = 0; + while(co_isActive()){ + yield([NSData co_downloadWithURL:@"http://pytstore.oss-cn-shanghai.aliyuncs.com/GalileoShellApp.ipa"]); + index++; + } + }); + + COCoroutine *co1 = co_sequence_onqueue(q2, (^{ + int index = 0; + while(co_isActive()){ + NSArray *list = [NSArray arrayWithObjects:[co2 next], [co2 next], nil]; + yield_val(list); + index++; + } + })); + int filebytes = 248564; + __block int val = 0; + co_launch(^{ + for(int i = 0; i < 10; i++){ + NSArray *list = [co1 next]; + val += [list[0] length]; + val += [list[1] length]; + //val = [[co1 next] intValue]; + } + [co1 cancel]; + [co2 cancel]; + }); + waitUntilTimeout(5.0, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + XCTAssert(val == filebytes * 20); + done(); + }); + }); + }); +}); + +SpecEnd diff --git a/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcTupleTests.m b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcTupleTests.m new file mode 100644 index 0000000..618496c --- /dev/null +++ b/Examples/coobjcBaseExample/coobjcBaseExampleTests/coobjcTupleTests.m @@ -0,0 +1,239 @@ +// +// coobjcTupleTests.m +// coobjcBaseExampleTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#define EXP_SHORTHAND +#import +#import +#import +#import + +#ifdef DEBUG + +extern int co_tuple_dealloc_count; +extern int co_untuple_dealloc_count; + +#endif + +@interface TestObject: NSObject + +@end + +@implementation TestObject + +- (void)dealloc{ + NSLog(@"dealloc"); +} + +@end + +COPromise* +cotest_downloadJSONWithURL(NSString *url){ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:url] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { + NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response; + if (!error && httpResponse.statusCode != 404) { + NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; + resolve(co_tuple(dict, response,nil)); + } + else{ + if (!error) { + error = [NSError errorWithDomain:@"error" code:404 userInfo:nil]; + } + resolve(co_tuple(nil,response, error)); + } + }]; + [task resume]; + }]; +} + +COPromise* +cotest_loadContentFromFile(NSString *filePath){ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { + NSData *data = [[NSData alloc] initWithContentsOfFile:filePath]; + resolve(co_tuple(filePath, data, nil)); + } + else{ + NSError *error = [NSError errorWithDomain:@"fileNotFound" code:-1 userInfo:nil]; + resolve(co_tuple(filePath, nil, error)); + } + }]; +} + +SpecBegin(COTupleTests) + +describe(@"tuple interface", ^{ + it(@"tuple created", ^{ + COTuple *tup = [[COTuple alloc] initWithObjects:nil, @10, @"abc", co_tupleSentinel()]; + NSAssert(tup[0] == nil, @"tup[0] is wrong"); + NSAssert([tup[1] intValue] == 10, @"tup[1] is wrong"); + NSAssert([tup[2] isEqualToString:@"abc"], @"tup[2] is wrong"); + + tup = [[COTuple alloc] initWithObjects:co_tupleSentinel(), @10, @"abc"]; + NSAssert(tup[0] == nil, @"tup[0] is wrong"); + }); + + it(@"tuple unpack created", ^{ + COTuple *tup = [[COTuple alloc] initWithObjects:nil, @10, @"abc", co_tupleSentinel()]; + id val0; + NSNumber *number = nil; + NSString *str = nil; + [[COTupleUnpack alloc] initWithPointers:0, &val0, &number, &str, co_unpackSentinel()].tuple = tup; + NSAssert(val0 == nil, @"val0 is wrong"); + NSAssert([number intValue] == 10, @"number is wrong"); + NSAssert([str isEqualToString:@"abc"], @"str is wrong"); + }); + +}); + +describe(@"tuple macro", ^{ + it(@"tuple created", ^{ + COTuple *tup = co_tuple(nil, @10, @"abc"); + NSAssert(tup[0] == nil, @"tup[0] is wrong"); + NSAssert([tup[1] intValue] == 10, @"tup[1] is wrong"); + NSAssert([tup[2] isEqualToString:@"abc"], @"tup[2] is wrong"); + }); + + it(@"tuple unpack created", ^{ + id val0; + NSNumber *number = nil; + NSString *str = nil; + co_unpack(&val0, &number, &str) = co_tuple(nil, @10, @"abc"); + NSAssert(val0 == nil, @"val0 is wrong"); + NSAssert([number intValue] == 10, @"number is wrong"); + NSAssert([str isEqualToString:@"abc"], @"str is wrong"); + + co_unpack(&val0, &number, &str) = co_tuple(nil, @10, @"abc", @10, @"abc"); + NSAssert(val0 == nil, @"val0 is wrong"); + NSAssert([number intValue] == 10, @"number is wrong"); + NSAssert([str isEqualToString:@"abc"], @"str is wrong"); + + co_unpack(&val0, &number, &str, &number, &str) = co_tuple(nil, @10, @"abc"); + NSAssert(val0 == nil, @"val0 is wrong"); + NSAssert([number intValue] == 10, @"number is wrong"); + NSAssert([str isEqualToString:@"abc"], @"str is wrong"); + + NSString *str1; + + co_unpack(nil, nil, &str1) = co_tuple(nil, @10, @"abc"); + NSAssert([str1 isEqualToString:@"abc"], @"str1 is wrong"); + }); +}); + +describe(@"tuple with async", ^{ + it(@"test with main queue", ^{ + __block id val0; + __block NSNumber *number = nil; + __block NSString *str = nil; + COTuple *tup = co_tuple(nil, @10, @"abc"); + waitUntil(^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + co_unpack(&val0, &number, &str) = tup; + NSAssert(val0 == nil, @"val0 is wrong"); + NSAssert([number intValue] == 10, @"number is wrong"); + NSAssert([str isEqualToString:@"abc"], @"str is wrong"); + done(); + }); + }); + + }); +}); + +describe(@"tuple with coroutine", ^{ + it(@"test with download from url success", ^{ + co_launch(^{ + NSDictionary *dict = nil; + NSURLResponse *response = nil; + NSError *error = nil; + + + co_unpack(&dict, &response, &error) = await(cotest_downloadJSONWithURL(@"http://pytstore.oss-cn-shanghai.aliyuncs.com/monkey_live.json")); + NSAssert(dict.count > 0, @"not load dict"); + NSAssert(response != nil, @"reponse is wrong"); + NSAssert(error == nil, @"error is wrong"); + + + }); + waitUntilTimeout(2, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + done(); + }); + }); + }); + + it(@"test with download from url error", ^{ + co_launch(^{ + NSDictionary *dict = nil; + NSURLResponse *response = nil; + NSError *error = nil; + + + co_unpack(&dict, &response, &error) = await(cotest_downloadJSONWithURL(@"http://pytstore.oss-cn-shanghai.aliyuncs.com/monkey_livexxxxxxxx.json")); + NSAssert(dict == nil, @"not load dict"); + NSAssert(response != nil, @"reponse is wrong"); + NSAssert(error != nil, @"error is wrong"); + }); + waitUntilTimeout(2, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + done(); + }); + }); + }); + + it(@"test with load file success", ^{ + co_launch(^{ + NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"testxxx"]; + [@"test" writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil]; + NSString *tmpFilePath = nil; + NSData *data = nil; + NSError *error = nil; + co_unpack(&tmpFilePath, &data, &error) = await(cotest_loadContentFromFile(filePath)); + XCTAssert([tmpFilePath isEqualToString:filePath], @"file path is wrong"); + XCTAssert(data.length > 0, @"data is wrong"); + XCTAssert(error == nil, @"error is wrong"); + }); + waitUntilTimeout(2, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + done(); + }); + }); + }); + + it(@"test with load file error", ^{ + co_launch(^{ + NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"testxxx"]; + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + NSString *tmpFilePath = nil; + NSData *data = nil; + NSError *error = nil; + co_unpack(&tmpFilePath, &data, &error) = await(cotest_loadContentFromFile(filePath)); + XCTAssert([tmpFilePath isEqualToString:filePath], @"file path is wrong"); + XCTAssert(data.length <= 0, @"data is wrong"); + XCTAssert(error != nil, @"error is wrong"); + }); + waitUntilTimeout(2, ^(DoneCallback done) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + done(); + }); + }); + }); +}); + +SpecEnd diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..72c2f5a --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Alibaba, Inc. + + Licensed 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. \ No newline at end of file diff --git a/Podfile b/Podfile new file mode 100644 index 0000000..218c467 --- /dev/null +++ b/Podfile @@ -0,0 +1,16 @@ + +platform :ios, '8.0' + +target 'coobjc' do + + pod 'fishhook' + + +end + +target 'coswift' do + + pod 'fishhook' + + +end diff --git a/README.md b/README.md index c0206f2..ad2b228 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,512 @@ -# coobjc -Will comming soon... +

+ coobjc +

+ +This library provides coroutine support for Objective-C and Swift. We added await method、generator and actor model like C#、Javascript and Kotlin. For convenience, we added coroutine categories for some Foundation and UIKit API in [cokit framework](cokit/README.md) like NSFileManager, JSON, NSData, UIImage etc. We also add tuple support in coobjc. + +[cooobjc 中文文档](README_cn.md) + +## 0x0 iOS Asynchronous programming problem +Block-based asynchronous programming callback is currently the most widely used asynchronous programming method for iOS. The GCD library provided by iOS system makes asynchronous development very simple and convenient, but there are many disadvantages based on this programming method: + +* get into Callback hell + + Sequence of simple operations is unnaturally composed in the nested blocks. This "Callback hell" makes it difficult to keep track of code that is running, and the stack of closures leads to many second order effects. + +* Handling errors becomes difficult and very verbose + +* Conditional execution is hard and error-prone + +* forget to call the completion block + +* Because completion handlers are awkward, too many APIs are defined synchronously + + This is hard to quantify, but the authors believe that the awkwardness of defining and using asynchronous APIs (using completion handlers) has led to many APIs being defined with apparently synchronous behavior, even when they can block. This can lead to problematic performance and responsiveness problems in UI applications - e.g. spinning cursor. It can also lead to the definition of APIs that cannot be used when asynchrony is critical to achieve scale, e.g. on the server. + +* Multi-threaded crashes that are difficult to locate + +* Locks and semaphore abuse caused by blocking + + +## 0x1 Solution + +These problem have been faced in many systems and many languages, and the abstraction of coroutines is a standard way to address them. Without delving too much into theory, coroutines are an extension of basic functions that allow a function to return a value or be suspended. They can be used to implement generators, asynchronous models, and other capabilities - there is a large body of work on the theory, implementation, and optimization of them. + +Kotlin is a static programming language supported by JetBrains that supports modern multi-platform applications. It has been quite hot in the developer community for the past two years. In the Kotlin language, async/await based on coroutine, generator/yield and other asynchronous technologies have become syntactic standard, Kotlin coroutine related introduction, you can refer to:[https://www.kotlincn.net/docs/reference/coroutines/basics.html](https://www.kotlincn.net/docs/reference/coroutines/basics.html) + + +## 0x2 Coroutine + +> **Coroutines are computer program components that generalize subroutines for non-preemptive multitasking, by allowing execution to be suspended and resumed. Coroutines are well-suited for implementing familiar program components such as cooperative tasks, exceptions, event loops, iterators, infinite lists and pipes** + + +The concept of coroutine has been proposed in the 1960s. It is widely used in the server. It is extremely suitable for use in high concurrency scenarios. It can greatly reduce the number of threads in a single machine and improve the connection and processing capabilities of a single machine. In the meantime, iOS currently does not support the use of coroutines(That's why we want to support it.) + +## 0x3 coobjc framework +coobjc is a coroutine development framework that can be used on the iOS by the Alibaba Taobao-Mobile architecture team. Currently it supports the use of Objective-C and Swift. We use the assembly and C language for development, and the upper layer provides the interface between Objective-C and Swift. Currently, It's open source here under Apache open source license. + +### 0x31 Install +* cocoapods for objective-c:  pod 'coobjc' +* cocoapods for swift: pod 'coswift' +* cocoapods for cokit: pod 'cokit' +* source code: All the code is in the ./coobjc directory + +### 0x32 Documents +* Read the [Coroutine framework design](docs/arch_design.md) document. +* Read the [coobjc Objective-C Guide](docs/usage.md) document. +* Read the [coobjc Swift Guide](docs/usage_swift.md) document. +* Read the [cokit framework](cokit/README.md) document, learn how to use the wrapper api of System Interface. +* We have provided [coobjcBaseExample](Examples/coobjcBaseExample) demos for coobjc, [coSwiftDemo](Examples/coSwiftDemo) for coswift, [coKitExamples](cokit/Examples/coKitExamples) for cokit + +### 0x33 Features + +#### async/await + +* create coroutine + +Create a coroutine using the co_launch method +``` +co_launch(^{ + ... +}); +``` + +The coroutine created by co_launch is scheduled by default in the current thread. + +* await asynchronous method + +In the coroutine we use the await method to wait for the asynchronous method to execute, get the asynchronous execution result + +``` + +- (void)viewDidLoad{ + ... + co_launch(^{ + // async downloadDataFromUrl + NSData *data = await(downloadDataFromUrl(url)); + + // async transform data to image + UIImage *image = await(imageFromData(data)); + + // set image to imageView + self.imageView.image = image; + }); +} +``` + +The above code turns the code that originally needs dispatch_async twice into sequential execution, and the code is more concise. + +* error handling + +In the coroutine, all our methods are directly returning the value, and no error is returned. Our error in the execution process is obtained by co_getError(). For example, we have the following interface to obtain data from the network. When the promise will reject: error

+``` +- (CCOPromise*)co_GET:(NSString*)url + parameters:(NSDictionary*)parameters{ + CCOPromise *promise = [CCOPromise promise]; + [self GET:url parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + [promise fulfill:responseObject]; + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + [promise reject:error]; + }]; + return promise; +} +``` + +Then we can use the method in the coroutine: + +``` +co_launch(^{ + id response = await([self co_GET:feedModel.feedUrl parameters:nil]); + if(co_getError()){ + //handle error message + } + ... +}); +``` + + +#### Generator + +* create generator + +We use co_sequence to create the generator + +``` +COCoroutine *co1 = co_sequence(^{ + int index = 0; + while(co_isActive()){ + yield_val(@(index)); + index++; + } + }); +``` + +In other coroutines, we can call the next method to get the data in the generator. + +``` +co_launch(^{ + for(int i = 0; i < 10; i++){ + val = [[co1 next] intValue]; + } + }); +``` + +* use case + +The generator can be used in many scenarios, such as message queues, batch download files, bulk load caches, etc.: + +``` +int unreadMessageCount = 10; +NSString *userId = @"xxx"; +COSequence *messageSequence = sequenceOnBackgroundQueue(@"message_queue", ^{ + //thread execution in the background + while(1){ + yield(queryOneNewMessageForUserWithId(userId)); + } +}); + +//Main thread update UI +co(^{ + for(int i = 0; i < unreadMessageCount; i++){ + if(!isQuitCurrentView()){ + displayMessage([messageSequence take]); + } + } +}); +``` + +Through the generator, we can load the data from the traditional producer--notifying the consumer model, turning the consumer into the data-->telling the producer to load the pattern, avoiding the need to use many shared variables for the state in multi-threaded computing. Synchronization eliminates the use of locks in certain scenarios

+ + +#### Actor +> **_The concept of Actor comes from Erlang. In AKKA, an Actor can be thought of as a container for storing state, behavior, Mailbox, and child Actor and Supervisor policies. Actors do not communicate directly, but use Mail to communicate with each other._** + +* create actor + +We can use co_actor_onqueue to create an actor in the specified thread. + +``` +CCOActor *actor = co_actor_onqueue(^(CCOActorChan *channel) { + ... //Define the state variable of the actor + + for(CCOActorMessage *message in channel){ + ...//handle message + } +}, q); +``` + +* send a message to the actor + +The actor's send method can send a message to the actor + +``` +CCOActor *actor = co_actor_onqueue(^(CCOActorChan *channel) { + ... //Define the state variable of the actor + + for(CCOActorMessage *message in channel){ + ...//handle message + } +}, q); + +// send a message to the actor +[actor send:@"sadf"]; +[actor send:@(1)]; + +``` + +#### tuple +* create tuple +we provide co_tuple method to create tuple + +```objc +COTuple *tup = co_tuple(nil, @10, @"abc"); +NSAssert(tup[0] == nil, @"tup[0] is wrong"); +NSAssert([tup[1] intValue] == 10, @"tup[1] is wrong"); +NSAssert([tup[2] isEqualToString:@"abc"], @"tup[2] is wrong"); +``` +you can store any value in tuple + +* unpack tuple +we provide co_unpack method to unpack tuple + +```objc +id val0; +NSNumber *number = nil; +NSString *str = nil; +co_unpack(&val0, &number, &str) = co_tuple(nil, @10, @"abc"); +NSAssert(val0 == nil, @"val0 is wrong"); +NSAssert([number intValue] == 10, @"number is wrong"); +NSAssert([str isEqualToString:@"abc"], @"str is wrong"); + +co_unpack(&val0, &number, &str) = co_tuple(nil, @10, @"abc", @10, @"abc"); +NSAssert(val0 == nil, @"val0 is wrong"); +NSAssert([number intValue] == 10, @"number is wrong"); +NSAssert([str isEqualToString:@"abc"], @"str is wrong"); + +co_unpack(&val0, &number, &str, &number, &str) = co_tuple(nil, @10, @"abc"); +NSAssert(val0 == nil, @"val0 is wrong"); +NSAssert([number intValue] == 10, @"number is wrong"); +NSAssert([str isEqualToString:@"abc"], @"str is wrong"); + +NSString *str1; + +co_unpack(nil, nil, &str1) = co_tuple(nil, @10, @"abc"); +NSAssert([str1 isEqualToString:@"abc"], @"str1 is wrong"); +``` + +* use tuple in coroutine +first create a promise that resolve tuple value + +```objc +COPromise* +cotest_loadContentFromFile(NSString *filePath){ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { + NSData *data = [[NSData alloc] initWithContentsOfFile:filePath]; + resolve(co_tuple(filePath, data, nil)); + } + else{ + NSError *error = [NSError errorWithDomain:@"fileNotFound" code:-1 userInfo:nil]; + resolve(co_tuple(filePath, nil, error)); + } + }]; +} +``` + +then you can fetch the value like this: + +``` +co_launch(^{ + NSString *tmpFilePath = nil; + NSData *data = nil; + NSError *error = nil; + co_unpack(&tmpFilePath, &data, &error) = await(cotest_loadContentFromFile(filePath)); + XCTAssert([tmpFilePath isEqualToString:filePath], @"file path is wrong"); + XCTAssert(data.length > 0, @"data is wrong"); + XCTAssert(error == nil, @"error is wrong"); +}); +``` +use tuple you can get multiple values from await return + +#### Actual case using coobjc +Let's take the code of the Feeds stream update in the GCDFetchFeed open source project as an example to demonstrate the actual usage scenarios and advantages of the coroutine. The following is the original implementation of not using coroutine: + +``` +- (RACSignal *)fetchAllFeedWithModelArray:(NSMutableArray *)modelArray { + @weakify(self); + return [RACSignal createSignal:^RACDisposable *(id subscriber) { + @strongify(self); + //Create a parallel queue + dispatch_queue_t fetchFeedQueue = dispatch_queue_create("com.starming.fetchfeed.fetchfeed", DISPATCH_QUEUE_CONCURRENT); + dispatch_group_t group = dispatch_group_create(); + self.feeds = modelArray; + for (int i = 0; i < modelArray.count; i++) { + dispatch_group_enter(group); + SMFeedModel *feedModel = modelArray[i]; + feedModel.isSync = NO; + [self GET:feedModel.feedUrl parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) { + dispatch_async(fetchFeedQueue, ^{ + @strongify(self); + //parse feed + self.feeds[i] = [self.feedStore updateFeedModelWithData:responseObject preModel:feedModel]; + //save to db + SMDB *db = [SMDB shareInstance]; + @weakify(db); + [[db insertWithFeedModel:self.feeds[i]] subscribeNext:^(NSNumber *x) { + @strongify(db); + SMFeedModel *model = (SMFeedModel *)self.feeds[i]; + model.fid = [x integerValue]; + if (model.imageUrl.length > 0) { + NSString *fidStr = [x stringValue]; + db.feedIcons[fidStr] = model.imageUrl; + } + //sendNext + [subscriber sendNext:@(i)]; + //Notification single completion + dispatch_group_leave(group); + }]; + + });//end dispatch async + + } failure:^(NSURLSessionTask *operation, NSError *error) { + NSLog(@"Error: %@", error); + dispatch_async(fetchFeedQueue, ^{ + @strongify(self); + [[[SMDB shareInstance] insertWithFeedModel:self.feeds[i]] subscribeNext:^(NSNumber *x) { + SMFeedModel *model = (SMFeedModel *)self.feeds[i]; + model.fid = [x integerValue]; + dispatch_group_leave(group); + }]; + + });//end dispatch async + + }]; + + }//end for + //Execution event after all is completed + dispatch_group_notify(group, dispatch_get_main_queue(), ^{ + [subscriber sendCompleted]; + }); + return nil; + }]; +} +``` + +The following is the call to the above method in viewDidLoad: + +``` + [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; + self.fetchingCount = 0; + @weakify(self); + [[[[[[SMNetManager shareInstance] fetchAllFeedWithModelArray:self.feeds] map:^id(NSNumber *value) { + @strongify(self); + NSUInteger index = [value integerValue]; + self.feeds[index] = [SMNetManager shareInstance].feeds[index]; + return self.feeds[index]; + }] doCompleted:^{ + @strongify(self); + NSLog(@"fetch complete"); + self.tbHeaderLabel.text = @""; + self.tableView.tableHeaderView = [[UIView alloc] init]; + self.fetchingCount = 0; + [self.tableView.mj_header endRefreshing]; + [self.tableView reloadData]; + if ([SMFeedStore defaultFeeds].count > self.feeds.count) { + self.feeds = [SMFeedStore defaultFeeds]; + [self fetchAllFeeds]; + } + [self cacheFeedItems]; + }] deliverOn:[RACScheduler mainThreadScheduler]] subscribeNext:^(SMFeedModel *feedModel) { + @strongify(self); + self.tableView.tableHeaderView = self.tbHeaderView; + self.fetchingCount += 1; + self.tbHeaderLabel.text = [NSString stringWithFormat:@"正在获取%@...(%lu/%lu)",feedModel.title,(unsigned long)self.fetchingCount,(unsigned long)self.feeds.count]; + feedModel.isSync = YES; + [self.tableView reloadData]; + }]; + +``` + +The above code is relatively poor in terms of readability and simplicity. Let's take a look at the code after using the coroutine transformation: + +``` +- (SMFeedModel*)co_fetchFeedModelWithUrl:(SMFeedModel*)feedModel{ + feedModel.isSync = NO; + id response = await([self co_GET:feedModel.feedUrl parameters:nil]); + if (response) { + SMFeedModel *resultModel = await([self co_updateFeedModelWithData:response preModel:feedModel]); + int fid = [[SMDB shareInstance] co_insertWithFeedModel:resultModel]; + resultModel.fid = fid; + if (resultModel.imageUrl.length > 0) { + NSString *fidStr = [@(fid) stringValue]; + [SMDB shareInstance].feedIcons[fidStr] = resultModel.imageUrl; + } + return resultModel; + } + int fid = [[SMDB shareInstance] co_insertWithFeedModel:feedModel]; + feedModel.fid = fid; + return nil; +} +``` + +Here is the place in viewDidLoad that uses the coroutine to call the interface: + +``` +co_launch(^{ + for (NSUInteger index = 0; index < self.feeds.count; index++) { + SMFeedModel *model = self.feeds[index]; + self.tableView.tableHeaderView = self.tbHeaderView; + self.tbHeaderLabel.text = [NSString stringWithFormat:@"正在获取%@...(%lu/%lu)",model.title,(unsigned long)(index + 1),(unsigned long)self.feeds.count]; + model.isSync = YES; + SMFeedModel *resultMode = [[SMNetManager shareInstance] co_fetchFeedModelWithUrl:model]; + if (resultMode) { + self.feeds[index] = resultMode; + [self.tableView reloadData]; + } + } + self.tbHeaderLabel.text = @""; + self.tableView.tableHeaderView = [[UIView alloc] init]; + self.fetchingCount = 0; + [self.tableView.mj_header endRefreshing]; + [self.tableView reloadData]; + [self cacheFeedItems]; +}); +``` + +The code after the coroutine transformation has become easier to understand and less error-prone. + +#### Swift +coobjc fully supports Swift through top-level encapsulation, enabling us to enjoy the coroutine ahead of time in Swift. +Because Swift has richer and more advanced syntax support, coobjc is more elegant in Swift, for example: + +``` +func test() { + co_launch {//create coroutine + //fetch data asynchronous + let resultStr = try await(channel: co_fetchSomething()) + print("result: \(resultStr)") + } + + co_launch {//create coroutine + //fetch data asynchronous + let result = try await(promise: co_fetchSomethingAsynchronous()) + switch result { + case .fulfilled(let data): + print("data: \(String(describing: data))") + break + case .rejected(let error): + print("error: \(error)") + } + } +} +``` + +## 0x4 Advantages of the coroutine +* Concise + * Less concept: there are only a few operators, compared to dozens of operators in response, it can't be simpler. + * The principle is simple: the implementation principle of the coroutine is very simple, the entire coroutine library has only a few thousand lines of code +* Easy to use + * Simple to use: it is easier to use than GCD, with few interfaces + * Easy to retrofit: existing code can be corouted with only a few changes, and we have a large number of coroutine interfaces for the system library. +* Clear + * Synchronous write asynchronous logic: Synchronous sequential way of writing code is the most acceptable way for humans, which can greatly reduce the probability of error + * High readability: Code written in coroutine mode is much more readable than block nested code +* High performance + * Faster scheduling performance: The coroutine itself does not need to switch between kernel-level threads, scheduling performance is fast, Even if you create tens of thousands of coroutines, there is no pressure. + * Reduce app block: The use of coroutines to help reduce the abuse of locks and semaphores, and to reduce the number of stalls and jams from the root cause by encapsulating the coroutine interfaces such as IOs that cause blocking, and improve the overall performance of the application. + +## 0x5 Communication +* If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/coobjc). (Tag 'coobjc') +* If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/coobjc). +* If you **found a bug**, _and can provide steps to reliably reproduce it_, open an issue. +* If you **have a feature request**, open an issue. +* If you **want to contribute**, submit a pull request. +* If you are interested in **joining Alibaba Taobao-Mobile architecture team**, please send your resume to [junzhan](mailto:junzhan.yzw@taobao.com) + + +## 0x6 Unit Tests +coobjc includes a suite of unit tests within the Tests subdirectory. These tests can be run simply be executed the test action on the platform framework you would like to test. You can find coobjc's unit tests in Examples/coobjcBaseExample/coobjcBaseExampleTests. You can find cokit's unit tests in cokit/Examples/coKitExamples/coKitExamplesTests. + +## 0x7 Credits +coobjc couldn't exist without: + +* [Promises](https://github.com/google/promises) - Google's Objective-C and Swift Promises framework. +* [libtask](https://swtch.com/libtask/) - A simple coroutine library. +* [movies](https://github.com/KMindeguia/movies) - a ios demo app, we use the code in coobjc examples +* [v2ex](https://github.com/singro/v2ex) - An iOS client for v2ex.com, we use the code in coobjc examples +* [tuples](https://github.com/atg/tuples) - Objective-C tuples. +* [Sol](https://github.com/comyar/Sol) - Sol° beautifully displays weather information so you can plan your day accordingly. Check the weather in your current location or any city around the world. Implemented in Objective-C. + +## 0x8 Authors +* [pengyutang125](https://github.com/pengyutang125) +* [NianJi](https://github.com/NianJi) +* [intheway](https://github.com/intheway) +* [ValiantCat](https://github.com/ValiantCat) +* [jmpews](https://github.com/jmpews) + + +## 0x9 License +coobjc is released under the Apache 2.0 license. See [LICENSE](https://github.com/AFNetworking/AFNetworking/blob/master/LICENSE) for details. +
+ + diff --git a/README_cn.md b/README_cn.md new file mode 100644 index 0000000..756c931 --- /dev/null +++ b/README_cn.md @@ -0,0 +1,500 @@ +

+ coobjc +

+ +这个库为Objective-C和Swift提供了协程功能。coobjc支持await、generator和actor model,接口参考了C#、Javascript和Kotlin中的很多设计。我们还提供了[cokit库](cokit/README.md)为Foundation和UIKit中的部分API提供了协程化支持,包括NSFileManager, JSON, NSData, UIImage等。coobjc也提供了元组的支持。 + +## 0x0 iOS异步编程问题 +基于Block的异步编程回调是目前iOS使用最广泛的异步编程方式,iOS系统提供的GCD库让异步开发变得很简单方便,但是基于这种编程方式的缺点也有很多,主要有以下几点: + +* 容易进入"嵌套地狱" +* 错误处理复杂和冗长 +* 容易忘记调用completion handler +* 条件执行变得很困难 +* 从互相独立的调用中组合返回结果变得极其困难 +* 在错误的线程中继续执行 +* 难以定位原因的多线程崩溃 +* 锁和信号量滥用带来的卡顿、卡死 + +

上述问题反应到线上应用本身就会出现大量的多线程崩溃 + + +## 0x1 解决方案 +上述问题在很多系统和语言中都会遇到,解决问题的标准方式就是使用协程。这里不介绍太多的理论,简单说协程就是对基础函数的扩展,可以让函数异步执行的时候挂起然后返回值。协程可以用来实现generator,异步模型以及其他强大的能力。 + +Kotlin是这两年由JetBrains推出的支持现代多平台应用的静态编程语言,支持JVM,Javascript,目前也可以在iOS上执行,这两年在开发者社区中也是比较火。
在Kotlin语言中基于协程的async/await,generator/yield等异步化技术都已经成了语法标配,Kotlin协程相关的介绍,大家可以参考:[https://www.kotlincn.net/docs/reference/coroutines/basics.html](https://www.kotlincn.net/docs/reference/coroutines/basics.html) + + +## 0x2 协程 + +> **协程是一种在非抢占式多任务场景下生成可以在特定位置挂起和恢复执行入口的程序组件** + +协程的概念在60年代就已经提出,目前在服务端中应用比较广泛,在高并发场景下使用极其合适,可以极大降低单机的线程数,提升单机的连接和处理能力,但是在移动研发中,iOS和android目前都不支持协程的使用 + +## 0x3 coobjc framework +coobjc是由手机淘宝架构团队推出的能在iOS上使用的协程开发框架,目前支持Objective-C和Swift中使用,我们底层使用汇编和C语言进行开发,上层进行提供了Objective-C和Swift的接口,目前以Apache开源协议进行了开源. + +### 0x31 Install +* cocoapods:  pod 'coobjc' +* source code: 所有代码在 ./coobjc 目录下 + +### 0x32 Documents +* Read the [协程框架设计](docs/arch_design.md) document. +* Read the [coobjc Objective-C Guide](docs/usage.md) document. +* Read the [coobjc Swift Guide](docs/usage_swift.md) document. +* Read the [cokit framework](cokit/README.md) document, learn how to use the wrapper api of System Interface. + +### 0x33 Features + +#### async/await + +* create coroutine + +使用co_launch方法创建协程 +``` +co_launch(^{ + ... +}); +``` + +co_launch创建的协程默认在当前线程进行调度 + +* await异步方法 + +在协程中我们使用await方法等待异步方法执行结束,得到异步执行结果 + +``` + +- (void)viewDidLoad{ + ... + co_launch(^{ + NSData *data = await(downloadDataFromUrl(url)); + UIImage *image = await(imageFromData(data)); + self.imageView.image = image; + }); +} +``` + +上述代码将原本需要dispatch_async两次的代码变成了顺序执行,代码更加简洁 + +* 错误处理 + +在协程中,我们所有的方法都是直接返回值的,并没有返回错误,我们在执行过程中的错误是通过co_getError()获取的,比如我们有以下从网络获取数据的接口,在失败的时候,promise会reject:error

+``` +- (CCOPromise*)co_GET:(NSString*)url + parameters:(NSDictionary*)parameters{ + CCOPromise *promise = [CCOPromise promise]; + [self GET:url parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + [promise fulfill:responseObject]; + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + [promise reject:error]; + }]; + return promise; +} +``` + +那我们在协程中可以如下使用: + +``` +co_launch(^{ + id response = await([self co_GET:feedModel.feedUrl parameters:nil]); + if(co_getError()){ + //处理错误信息 + } + ... +}); +``` + + +#### Generator + +* create generator + +我们使用co_sequence创建Generator + +``` +COCoroutine *co1 = co_sequence(^{ + int index = 0; + while(co_isActive()){ + yield_val(@(index)); + index++; + } + }); +``` + +在其他协程中,我们可以调用next方法,获取生成器中的数据 + +``` +co_launch(^{ + for(int i = 0; i < 10; i++){ + val = [[co1 next] intValue]; + } + }); +``` + +* 使用场景 + +生成器可以在很多场景中进行使用,比如消息队列、批量下载文件、批量加载缓存等: + +``` +int unreadMessageCount = 10; +NSString *userId = @"xxx"; +COSequence *messageSequence = sequenceOnBackgroundQueue(@"message_queue", ^{ + //在后台线程执行 + while(1){ + yield(queryOneNewMessageForUserWithId(userId)); + } +}); + +//主线程更新UI +co(^{ + for(int i = 0; i < unreadMessageCount; i++){ + if(!isQuitCurrentView()){ + displayMessage([messageSequence take]); + } + } +}); +``` + +通过生成器,我们可以把传统的生产者加载数据-》通知消费者模式,变成消费者需要数据-》告诉生产者加载模式,避免了在多线程计算中,需要使用很多共享变量进行状态同步,消除了在某些场景下对于锁的使用

+ + +#### Actor +> **_Actor的概念来自于Erlang,在AKKA中,可以认为一个Actor就是一个容器,用以存储状态、行为、Mailbox以及子Actor与Supervisor策略。Actor之间并不直接通信,而是通过Mail来互通有无。_** + +* create actor + +我们可以使用co_actor_onqueue在指定线程创建actor + +``` +CCOActor *actor = co_actor_onqueue(^(CCOActorChan *channel) { + ... //定义actor的状态变量 + for(CCOActorMessage *message in channel){ + ...//处理消息 + } +}, q); +``` + +* 给actor发送消息 + +actor的send方法可以给actor发送消息 + +``` +CCOActor *actor = co_actor_onqueue(^(CCOActorChan *channel) { + ... //定义actor的状态变量 + for(CCOActorMessage *message in channel){ + ...//处理消息 + } +}, q); + +// 给actor发送消息 +[actor send:@"sadf"]; +[actor send:@(1)]; + +``` + +#### tuple +* create tuple +使用co_tuple方法来创建元组 + +```objc +COTuple *tup = co_tuple(nil, @10, @"abc"); +NSAssert(tup[0] == nil, @"tup[0] is wrong"); +NSAssert([tup[1] intValue] == 10, @"tup[1] is wrong"); +NSAssert([tup[2] isEqualToString:@"abc"], @"tup[2] is wrong"); +``` +可以在tuple中存储任何数据 + +* unpack tuple +可以使用co_unpack方法从tuple中取值 + +```objc +id val0; +NSNumber *number = nil; +NSString *str = nil; +co_unpack(&val0, &number, &str) = co_tuple(nil, @10, @"abc"); +NSAssert(val0 == nil, @"val0 is wrong"); +NSAssert([number intValue] == 10, @"number is wrong"); +NSAssert([str isEqualToString:@"abc"], @"str is wrong"); + +co_unpack(&val0, &number, &str) = co_tuple(nil, @10, @"abc", @10, @"abc"); +NSAssert(val0 == nil, @"val0 is wrong"); +NSAssert([number intValue] == 10, @"number is wrong"); +NSAssert([str isEqualToString:@"abc"], @"str is wrong"); + +co_unpack(&val0, &number, &str, &number, &str) = co_tuple(nil, @10, @"abc"); +NSAssert(val0 == nil, @"val0 is wrong"); +NSAssert([number intValue] == 10, @"number is wrong"); +NSAssert([str isEqualToString:@"abc"], @"str is wrong"); + +NSString *str1; + +co_unpack(nil, nil, &str1) = co_tuple(nil, @10, @"abc"); +NSAssert([str1 isEqualToString:@"abc"], @"str1 is wrong"); +``` + +* use tuple in coroutine +first create a promise that resolve tuple value + +```objc +COPromise* +cotest_loadContentFromFile(NSString *filePath){ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { + NSData *data = [[NSData alloc] initWithContentsOfFile:filePath]; + resolve(co_tuple(filePath, data, nil)); + } + else{ + NSError *error = [NSError errorWithDomain:@"fileNotFound" code:-1 userInfo:nil]; + resolve(co_tuple(filePath, nil, error)); + } + }]; +} +``` + +then you can fetch the value like this: + +``` +co_launch(^{ + NSString *tmpFilePath = nil; + NSData *data = nil; + NSError *error = nil; + co_unpack(&tmpFilePath, &data, &error) = await(cotest_loadContentFromFile(filePath)); + XCTAssert([tmpFilePath isEqualToString:filePath], @"file path is wrong"); + XCTAssert(data.length > 0, @"data is wrong"); + XCTAssert(error == nil, @"error is wrong"); +}); +``` +use tuple you can get multiple values from await return + +#### Actual case using coobjc +我们以GCDFetchFeed开源项目中Feeds流更新的代码为例,演示一下协程的实际使用场景和优势,下面是原始的不使用协程的实现: + +``` +- (RACSignal *)fetchAllFeedWithModelArray:(NSMutableArray *)modelArray { + @weakify(self); + return [RACSignal createSignal:^RACDisposable *(id subscriber) { + @strongify(self); + //创建并行队列 + dispatch_queue_t fetchFeedQueue = dispatch_queue_create("com.starming.fetchfeed.fetchfeed", DISPATCH_QUEUE_CONCURRENT); + dispatch_group_t group = dispatch_group_create(); + self.feeds = modelArray; + for (int i = 0; i < modelArray.count; i++) { + dispatch_group_enter(group); + SMFeedModel *feedModel = modelArray[i]; + feedModel.isSync = NO; + [self GET:feedModel.feedUrl parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) { + dispatch_async(fetchFeedQueue, ^{ + @strongify(self); + //解析feed + self.feeds[i] = [self.feedStore updateFeedModelWithData:responseObject preModel:feedModel]; + //入库存储 + SMDB *db = [SMDB shareInstance]; + @weakify(db); + [[db insertWithFeedModel:self.feeds[i]] subscribeNext:^(NSNumber *x) { + @strongify(db); + SMFeedModel *model = (SMFeedModel *)self.feeds[i]; + model.fid = [x integerValue]; + if (model.imageUrl.length > 0) { + NSString *fidStr = [x stringValue]; + db.feedIcons[fidStr] = model.imageUrl; + } + //插入本地数据库成功后开始sendNext + [subscriber sendNext:@(i)]; + //通知单个完成 + dispatch_group_leave(group); + }]; + + });//end dispatch async + + } failure:^(NSURLSessionTask *operation, NSError *error) { + NSLog(@"Error: %@", error); + dispatch_async(fetchFeedQueue, ^{ + @strongify(self); + [[[SMDB shareInstance] insertWithFeedModel:self.feeds[i]] subscribeNext:^(NSNumber *x) { + SMFeedModel *model = (SMFeedModel *)self.feeds[i]; + model.fid = [x integerValue]; + dispatch_group_leave(group); + }]; + + });//end dispatch async + + }]; + + }//end for + //全完成后执行事件 + dispatch_group_notify(group, dispatch_get_main_queue(), ^{ + [subscriber sendCompleted]; + }); + return nil; + }]; +} +``` + +下面是viewDidLoad中对上述方法的调用: + +``` + [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; + self.fetchingCount = 0; //统计抓取数量 + @weakify(self); + [[[[[[SMNetManager shareInstance] fetchAllFeedWithModelArray:self.feeds] map:^id(NSNumber *value) { + @strongify(self); + NSUInteger index = [value integerValue]; + self.feeds[index] = [SMNetManager shareInstance].feeds[index]; + return self.feeds[index]; + }] doCompleted:^{ + //抓完所有的feeds + @strongify(self); + NSLog(@"fetch complete"); + //完成置为默认状态 + self.tbHeaderLabel.text = @""; + self.tableView.tableHeaderView = [[UIView alloc] init]; + self.fetchingCount = 0; + //下拉刷新关闭 + [self.tableView.mj_header endRefreshing]; + //更新列表 + [self.tableView reloadData]; + //检查是否需要增加源 + if ([SMFeedStore defaultFeeds].count > self.feeds.count) { + self.feeds = [SMFeedStore defaultFeeds]; + [self fetchAllFeeds]; + } + //缓存未缓存的页面 + [self cacheFeedItems]; + }] deliverOn:[RACScheduler mainThreadScheduler]] subscribeNext:^(SMFeedModel *feedModel) { + //抓完一个 + @strongify(self); + self.tableView.tableHeaderView = self.tbHeaderView; + //显示抓取状态 + self.fetchingCount += 1; + self.tbHeaderLabel.text = [NSString stringWithFormat:@"正在获取%@...(%lu/%lu)",feedModel.title,(unsigned long)self.fetchingCount,(unsigned long)self.feeds.count]; + feedModel.isSync = YES; + [self.tableView reloadData]; + }]; + +``` + +上述代码无论从可读性还是简洁性上都比较差,下面我们看一下使用协程改造以后的代码: + +``` +- (SMFeedModel*)co_fetchFeedModelWithUrl:(SMFeedModel*)feedModel{ + feedModel.isSync = NO; + id response = await([self co_GET:feedModel.feedUrl parameters:nil]); + if (response) { + SMFeedModel *resultModel = await([self co_updateFeedModelWithData:response preModel:feedModel]); + int fid = [[SMDB shareInstance] co_insertWithFeedModel:resultModel]; + resultModel.fid = fid; + if (resultModel.imageUrl.length > 0) { + NSString *fidStr = [@(fid) stringValue]; + [SMDB shareInstance].feedIcons[fidStr] = resultModel.imageUrl; + } + return resultModel; + } + int fid = [[SMDB shareInstance] co_insertWithFeedModel:feedModel]; + feedModel.fid = fid; + return nil; +} +``` + +下面是viewDidLoad中使用协程调用该接口的地方: + +``` +co_launch(^{ + for (NSUInteger index = 0; index < self.feeds.count; index++) { + SMFeedModel *model = self.feeds[index]; + self.tableView.tableHeaderView = self.tbHeaderView; + //显示抓取状态 + self.tbHeaderLabel.text = [NSString stringWithFormat:@"正在获取%@...(%lu/%lu)",model.title,(unsigned long)(index + 1),(unsigned long)self.feeds.count]; + model.isSync = YES; + //协程化加载数据 + SMFeedModel *resultMode = [[SMNetManager shareInstance] co_fetchFeedModelWithUrl:model]; + if (resultMode) { + self.feeds[index] = resultMode; + [self.tableView reloadData]; + } + } + self.tbHeaderLabel.text = @""; + self.tableView.tableHeaderView = [[UIView alloc] init]; + self.fetchingCount = 0; + //下拉刷新关闭 + [self.tableView.mj_header endRefreshing]; + //更新列表 + [self.tableView reloadData]; + //检查是否需要增加源 + [self cacheFeedItems]; +}); +``` + +协程化改造之后的代码,变得更加简单易懂,不易出错 + +#### Swift +coobjc fully supports Swift through top-level encapsulation, enabling us to enjoy the coroutine ahead of time in Swift. +Because Swift has richer and more advanced syntax support, coobjc is more elegant in Swift, for example: + +``` +func test() { + co_launch {//create coroutine + //fetch data asynchronous + let resultStr = try await(channel: co_fetchSomething()) + print("result: \(resultStr)") + } + + co_launch {//create coroutine + //fetch data asynchronous + let result = try await(promise: co_fetchSomethingAsynchronous()) + switch result { + case .fulfilled(let data): + print("data: \(String(describing: data))") + break + case .rejected(let error): + print("error: \(error)") + } + } +} +``` + +## 0x4 协程的优势 +* 简明 + * 概念少:只有很少的几个操作符,相比响应式几十个操作符,简直不能再简单了 + * 原理简单: 协程的实现原理很简单,整个协程库只有几千行代码 +* 易用 + * 使用简单:它的使用方式比GCD还要简单,接口很少 + * 改造方便:现有代码只需要进行很少的改动就可以协程化,同时我们针对系统库提供了大量协程化接口 +* 清晰 + * 同步写异步逻辑:同步顺序方式写代码是人类最容易接受的方式,这可以极大的减少出错的概率 + * 可读性高: 使用协程方式编写的代码比block嵌套写出来的代码可读性要高很多 +* 性能 + * 调度性能更快:协程本身不需要进行内核级线程的切换,调度性能快,即使创建上万个协程也毫无压力 + * 减少卡顿卡死: 协程的使用以帮助开发减少锁、信号量的滥用,通过封装会引起阻塞的IO等协程接口,可以从根源上减少卡顿、卡死,提升应用整体的性能 + +## 0x5 交流 +* If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/coobjc). (Tag 'coobjc') +* If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/coobjc). +* If you **found a bug**, _and can provide steps to reliably reproduce it_, open an issue. +* If you **have a feature request**, open an issue. +* If you **want to contribute**, submit a pull request. + +## 0x6 单元测试 +coobjc includes a suite of unit tests within the Tests subdirectory. These tests can be run simply be executed the test action on the platform framework you would like to test. + +## 0x7 Credits +coobjc couldn't exist without: + +* [Promises](https://github.com/google/promises) - Google's Objective-C and Swift Promises framework. +* [libtask](https://swtch.com/libtask/) - A simple coroutine library. +* [movies](https://github.com/KMindeguia/movies) - a ios demo app, we use the code in coobjc examples +* [v2ex](https://github.com/singro/v2ex) - An iOS client for v2ex.com, we use the code in coobjc examples +* [tuples](https://github.com/atg/tuples) - Objective-C tuples. + +## 0x8 作者 +* [pengyutang125](https://github.com/pengyutang125) +* [NianJi](https://github.com/NianJi) +* [intheway](https://github.com/intheway) +* [ValiantCat](https://github.com/ValiantCat) +* [jmpews](https://github.com/jmpews) + +## 0x9 License +coobjc is released under the Apache 2.0 license. See [LICENSE](https://github.com/AFNetworking/AFNetworking/blob/master/LICENSE) for details. +
+ + diff --git a/cokit.podspec b/cokit.podspec new file mode 100644 index 0000000..857c779 --- /dev/null +++ b/cokit.podspec @@ -0,0 +1,28 @@ +Pod::Spec.new do |s| + s.name = "cokit" + s.version = "1.0.0" + s.summary = "cokit." + + s.description = <<-DESC + cokit. + DESC + + s.homepage = "https://github.com/alibaba/coobjc" + s.license = { + :type => 'Copyright', + :text => <<-LICENSE + Alibaba-INC copyright + LICENSE + } + + s.author = { "pengyutang125" => "pengyutang125@sina.com" } + s.platform = :ios + + s.ios.deployment_target = '8.0' + s.requires_arc = true + + s.source = { :git => "git@github.com/alibaba/coobjc.git", :branch => 'master' } + s.source_files = 'cokit/cokit/**/*.{h,m}' + + s.dependency "coobjc" +end diff --git a/cokit/Examples/coKitExamples/Podfile b/cokit/Examples/coKitExamples/Podfile new file mode 100644 index 0000000..6f095d0 --- /dev/null +++ b/cokit/Examples/coKitExamples/Podfile @@ -0,0 +1,19 @@ + +platform :ios, '8.0' + +target 'coKitExamples' do + + pod 'cokit', :path => '../../../' + pod 'coobjc', :path => '../../../' + +end + +target 'coKitExamplesTests' do + + pod 'cokit', :path => '../../../' + pod 'coobjc', :path => '../../../' + + pod 'Specta', '~> 1.0' + pod 'Expecta', '~> 1.0' # expecta matchers + pod 'OCMock', '~> 2.2' # OCMock +end diff --git a/cokit/Examples/coKitExamples/coKitExamples.xcodeproj/project.pbxproj b/cokit/Examples/coKitExamples/coKitExamples.xcodeproj/project.pbxproj new file mode 100644 index 0000000..41e8b69 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples.xcodeproj/project.pbxproj @@ -0,0 +1,679 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXBuildFile section */ + 183F729321C8E8890041C32B /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F729221C8E8890041C32B /* AppDelegate.m */; }; + 183F729621C8E8890041C32B /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F729521C8E8890041C32B /* ViewController.m */; }; + 183F729921C8E8890041C32B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 183F729721C8E8890041C32B /* Main.storyboard */; }; + 183F729B21C8E88B0041C32B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 183F729A21C8E88B0041C32B /* Assets.xcassets */; }; + 183F729E21C8E88B0041C32B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 183F729C21C8E88B0041C32B /* LaunchScreen.storyboard */; }; + 183F72A121C8E88B0041C32B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F72A021C8E88B0041C32B /* main.m */; }; + 183F72AB21C8E88C0041C32B /* coKitExamplesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F72AA21C8E88C0041C32B /* coKitExamplesTests.m */; }; + 183F72B621C8EA7C0041C32B /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 183F72B521C8EA7C0041C32B /* libc++.tbd */; }; + 183F72B721C8EB430041C32B /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 183F72B521C8EA7C0041C32B /* libc++.tbd */; }; + 183F72B921C8EB8E0041C32B /* coKitNSArrayTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F72B821C8EB8E0041C32B /* coKitNSArrayTests.m */; }; + 183F72BB21C8F91A0041C32B /* coKitNSDataTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F72BA21C8F91A0041C32B /* coKitNSDataTests.m */; }; + 183F72BD21C8FC3A0041C32B /* coKitXMLParserTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F72BC21C8FC3A0041C32B /* coKitXMLParserTests.m */; }; + 183F72BF21C9E3240041C32B /* coKitNSDictionaryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F72BE21C9E3240041C32B /* coKitNSDictionaryTests.m */; }; + 183F72C121C9E5CB0041C32B /* coKitNSFileManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F72C021C9E5CB0041C32B /* coKitNSFileManagerTests.m */; }; + 183F72C321C9E8320041C32B /* coKitJsonTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F72C221C9E8320041C32B /* coKitJsonTests.m */; }; + 183F72C621C9E9DE0041C32B /* test.json in Resources */ = {isa = PBXBuildFile; fileRef = 183F72C521C9E9DE0041C32B /* test.json */; }; + 183F72C821C9EBF00041C32B /* coKitArchieveTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F72C721C9EBF00041C32B /* coKitArchieveTests.m */; }; + 184C4DC021D3182600C94113 /* coKitStringTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 184C4DBF21D3182600C94113 /* coKitStringTests.m */; }; + 184C4DC221D3183800C94113 /* coKitURLConnectionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 184C4DC121D3183800C94113 /* coKitURLConnectionTests.m */; }; + 184C4DC421D3184800C94113 /* coKitURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 184C4DC321D3184800C94113 /* coKitURLSession.m */; }; + 184C4DC621D3185700C94113 /* coKitUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 184C4DC521D3185700C94113 /* coKitUserDefaults.m */; }; + 18C43A3E21D1D4C300D75A9B /* DemoListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C43A3D21D1D4C300D75A9B /* DemoListViewController.m */; }; + 18C43A4221D1D4E500D75A9B /* AlertDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C43A4021D1D4E500D75A9B /* AlertDemoViewController.m */; }; + 18C43A4321D1D4E500D75A9B /* AlertDemoViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 18C43A4121D1D4E500D75A9B /* AlertDemoViewController.xib */; }; + 18C43A4721D1D4F500D75A9B /* ImagePickerDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C43A4521D1D4F500D75A9B /* ImagePickerDemoViewController.m */; }; + 18C43A4821D1D4F500D75A9B /* ImagePickerDemoViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 18C43A4621D1D4F500D75A9B /* ImagePickerDemoViewController.xib */; }; + B69C0BF8A596D935C0699599 /* libPods-coKitExamples.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 99D6883D2680E3BFA9DAB310 /* libPods-coKitExamples.a */; }; + F064595A2F028ACC5DDFD2FA /* libPods-coKitExamplesTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27560A6498385D06468C99EF /* libPods-coKitExamplesTests.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 183F72A721C8E88C0041C32B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 183F728621C8E8890041C32B /* Project object */; + proxyType = 1; + remoteGlobalIDString = 183F728D21C8E8890041C32B; + remoteInfo = coKitExamples; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0B050894E8D9C44FAD9E1407 /* Pods-coKitExamples.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coKitExamples.debug.xcconfig"; path = "Pods/Target Support Files/Pods-coKitExamples/Pods-coKitExamples.debug.xcconfig"; sourceTree = ""; }; + 0E6200D0DCA05AA35A7A25DE /* Pods-coKitExamplesTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coKitExamplesTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-coKitExamplesTests/Pods-coKitExamplesTests.debug.xcconfig"; sourceTree = ""; }; + 183F728E21C8E8890041C32B /* coKitExamples.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = coKitExamples.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 183F729121C8E8890041C32B /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 183F729221C8E8890041C32B /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 183F729421C8E8890041C32B /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 183F729521C8E8890041C32B /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 183F729821C8E8890041C32B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 183F729A21C8E88B0041C32B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 183F729D21C8E88B0041C32B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 183F729F21C8E88B0041C32B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 183F72A021C8E88B0041C32B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 183F72A621C8E88C0041C32B /* coKitExamplesTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = coKitExamplesTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 183F72AA21C8E88C0041C32B /* coKitExamplesTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coKitExamplesTests.m; sourceTree = ""; }; + 183F72AC21C8E88C0041C32B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 183F72B521C8EA7C0041C32B /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; + 183F72B821C8EB8E0041C32B /* coKitNSArrayTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coKitNSArrayTests.m; sourceTree = ""; }; + 183F72BA21C8F91A0041C32B /* coKitNSDataTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coKitNSDataTests.m; sourceTree = ""; }; + 183F72BC21C8FC3A0041C32B /* coKitXMLParserTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coKitXMLParserTests.m; sourceTree = ""; }; + 183F72BE21C9E3240041C32B /* coKitNSDictionaryTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coKitNSDictionaryTests.m; sourceTree = ""; }; + 183F72C021C9E5CB0041C32B /* coKitNSFileManagerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coKitNSFileManagerTests.m; sourceTree = ""; }; + 183F72C221C9E8320041C32B /* coKitJsonTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coKitJsonTests.m; sourceTree = ""; }; + 183F72C521C9E9DE0041C32B /* test.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = test.json; sourceTree = ""; }; + 183F72C721C9EBF00041C32B /* coKitArchieveTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coKitArchieveTests.m; sourceTree = ""; }; + 184C4DBF21D3182600C94113 /* coKitStringTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coKitStringTests.m; sourceTree = ""; }; + 184C4DC121D3183800C94113 /* coKitURLConnectionTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coKitURLConnectionTests.m; sourceTree = ""; }; + 184C4DC321D3184800C94113 /* coKitURLSession.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coKitURLSession.m; sourceTree = ""; }; + 184C4DC521D3185700C94113 /* coKitUserDefaults.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = coKitUserDefaults.m; sourceTree = ""; }; + 18C43A3C21D1D4C300D75A9B /* DemoListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DemoListViewController.h; sourceTree = ""; }; + 18C43A3D21D1D4C300D75A9B /* DemoListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DemoListViewController.m; sourceTree = ""; }; + 18C43A3F21D1D4E500D75A9B /* AlertDemoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AlertDemoViewController.h; sourceTree = ""; }; + 18C43A4021D1D4E500D75A9B /* AlertDemoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AlertDemoViewController.m; sourceTree = ""; }; + 18C43A4121D1D4E500D75A9B /* AlertDemoViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AlertDemoViewController.xib; sourceTree = ""; }; + 18C43A4421D1D4F500D75A9B /* ImagePickerDemoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImagePickerDemoViewController.h; sourceTree = ""; }; + 18C43A4521D1D4F500D75A9B /* ImagePickerDemoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImagePickerDemoViewController.m; sourceTree = ""; }; + 18C43A4621D1D4F500D75A9B /* ImagePickerDemoViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ImagePickerDemoViewController.xib; sourceTree = ""; }; + 1CE3597AE2C44A214FE0E307 /* Pods-coKitExamplesTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coKitExamplesTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-coKitExamplesTests/Pods-coKitExamplesTests.release.xcconfig"; sourceTree = ""; }; + 27560A6498385D06468C99EF /* libPods-coKitExamplesTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-coKitExamplesTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 366D2FB22FB851181026E310 /* Pods-coKitExamples.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coKitExamples.release.xcconfig"; path = "Pods/Target Support Files/Pods-coKitExamples/Pods-coKitExamples.release.xcconfig"; sourceTree = ""; }; + 99D6883D2680E3BFA9DAB310 /* libPods-coKitExamples.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-coKitExamples.a"; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 183F728B21C8E8890041C32B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 183F72B621C8EA7C0041C32B /* libc++.tbd in Frameworks */, + B69C0BF8A596D935C0699599 /* libPods-coKitExamples.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 183F72A321C8E88C0041C32B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 183F72B721C8EB430041C32B /* libc++.tbd in Frameworks */, + F064595A2F028ACC5DDFD2FA /* libPods-coKitExamplesTests.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 183F728521C8E8890041C32B = { + isa = PBXGroup; + children = ( + 183F729021C8E8890041C32B /* coKitExamples */, + 183F72A921C8E88C0041C32B /* coKitExamplesTests */, + 183F728F21C8E8890041C32B /* Products */, + 8DB7CAB4EEEB082AC80ED915 /* Pods */, + 7064582F092F34FE36CE95C6 /* Frameworks */, + ); + sourceTree = ""; + }; + 183F728F21C8E8890041C32B /* Products */ = { + isa = PBXGroup; + children = ( + 183F728E21C8E8890041C32B /* coKitExamples.app */, + 183F72A621C8E88C0041C32B /* coKitExamplesTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 183F729021C8E8890041C32B /* coKitExamples */ = { + isa = PBXGroup; + children = ( + 183F72C421C9E9D10041C32B /* Resources */, + 183F729121C8E8890041C32B /* AppDelegate.h */, + 183F729221C8E8890041C32B /* AppDelegate.m */, + 183F729421C8E8890041C32B /* ViewController.h */, + 183F729521C8E8890041C32B /* ViewController.m */, + 183F729721C8E8890041C32B /* Main.storyboard */, + 183F729A21C8E88B0041C32B /* Assets.xcassets */, + 183F729C21C8E88B0041C32B /* LaunchScreen.storyboard */, + 183F729F21C8E88B0041C32B /* Info.plist */, + 183F72A021C8E88B0041C32B /* main.m */, + 18C43A3C21D1D4C300D75A9B /* DemoListViewController.h */, + 18C43A3D21D1D4C300D75A9B /* DemoListViewController.m */, + 18C43A3F21D1D4E500D75A9B /* AlertDemoViewController.h */, + 18C43A4021D1D4E500D75A9B /* AlertDemoViewController.m */, + 18C43A4121D1D4E500D75A9B /* AlertDemoViewController.xib */, + 18C43A4421D1D4F500D75A9B /* ImagePickerDemoViewController.h */, + 18C43A4521D1D4F500D75A9B /* ImagePickerDemoViewController.m */, + 18C43A4621D1D4F500D75A9B /* ImagePickerDemoViewController.xib */, + ); + path = coKitExamples; + sourceTree = ""; + }; + 183F72A921C8E88C0041C32B /* coKitExamplesTests */ = { + isa = PBXGroup; + children = ( + 183F72AA21C8E88C0041C32B /* coKitExamplesTests.m */, + 183F72AC21C8E88C0041C32B /* Info.plist */, + 183F72B821C8EB8E0041C32B /* coKitNSArrayTests.m */, + 183F72BA21C8F91A0041C32B /* coKitNSDataTests.m */, + 183F72BC21C8FC3A0041C32B /* coKitXMLParserTests.m */, + 183F72BE21C9E3240041C32B /* coKitNSDictionaryTests.m */, + 183F72C021C9E5CB0041C32B /* coKitNSFileManagerTests.m */, + 183F72C221C9E8320041C32B /* coKitJsonTests.m */, + 183F72C721C9EBF00041C32B /* coKitArchieveTests.m */, + 184C4DBF21D3182600C94113 /* coKitStringTests.m */, + 184C4DC121D3183800C94113 /* coKitURLConnectionTests.m */, + 184C4DC321D3184800C94113 /* coKitURLSession.m */, + 184C4DC521D3185700C94113 /* coKitUserDefaults.m */, + ); + path = coKitExamplesTests; + sourceTree = ""; + }; + 183F72C421C9E9D10041C32B /* Resources */ = { + isa = PBXGroup; + children = ( + 183F72C521C9E9DE0041C32B /* test.json */, + ); + path = Resources; + sourceTree = ""; + }; + 7064582F092F34FE36CE95C6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 183F72B521C8EA7C0041C32B /* libc++.tbd */, + 99D6883D2680E3BFA9DAB310 /* libPods-coKitExamples.a */, + 27560A6498385D06468C99EF /* libPods-coKitExamplesTests.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 8DB7CAB4EEEB082AC80ED915 /* Pods */ = { + isa = PBXGroup; + children = ( + 0B050894E8D9C44FAD9E1407 /* Pods-coKitExamples.debug.xcconfig */, + 366D2FB22FB851181026E310 /* Pods-coKitExamples.release.xcconfig */, + 0E6200D0DCA05AA35A7A25DE /* Pods-coKitExamplesTests.debug.xcconfig */, + 1CE3597AE2C44A214FE0E307 /* Pods-coKitExamplesTests.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 183F728D21C8E8890041C32B /* coKitExamples */ = { + isa = PBXNativeTarget; + buildConfigurationList = 183F72AF21C8E88C0041C32B /* Build configuration list for PBXNativeTarget "coKitExamples" */; + buildPhases = ( + 66A9FC6F6F04E954F19CFE67 /* [CP] Check Pods Manifest.lock */, + 183F728A21C8E8890041C32B /* Sources */, + 183F728B21C8E8890041C32B /* Frameworks */, + 183F728C21C8E8890041C32B /* Resources */, + 24A92622A4331EE56ABFE7D5 /* [CP] Embed Pods Frameworks */, + BF68B3A67305FACEED8A7FCA /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = coKitExamples; + productName = coKitExamples; + productReference = 183F728E21C8E8890041C32B /* coKitExamples.app */; + productType = "com.apple.product-type.application"; + }; + 183F72A521C8E88C0041C32B /* coKitExamplesTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 183F72B221C8E88C0041C32B /* Build configuration list for PBXNativeTarget "coKitExamplesTests" */; + buildPhases = ( + 0B9A54E31577DC1D5E93A841 /* [CP] Check Pods Manifest.lock */, + 183F72A221C8E88C0041C32B /* Sources */, + 183F72A321C8E88C0041C32B /* Frameworks */, + 183F72A421C8E88C0041C32B /* Resources */, + CB2CC9A54B12823E5E21B0EB /* [CP] Embed Pods Frameworks */, + 866D6F23B88BC4316C965F2A /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + 183F72A821C8E88C0041C32B /* PBXTargetDependency */, + ); + name = coKitExamplesTests; + productName = coKitExamplesTests; + productReference = 183F72A621C8E88C0041C32B /* coKitExamplesTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 183F728621C8E8890041C32B /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0940; + ORGANIZATIONNAME = fantasy; + TargetAttributes = { + 183F728D21C8E8890041C32B = { + CreatedOnToolsVersion = 9.4; + }; + 183F72A521C8E88C0041C32B = { + CreatedOnToolsVersion = 9.4; + TestTargetID = 183F728D21C8E8890041C32B; + }; + }; + }; + buildConfigurationList = 183F728921C8E8890041C32B /* Build configuration list for PBXProject "coKitExamples" */; + compatibilityVersion = "Xcode 3.1"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 183F728521C8E8890041C32B; + productRefGroup = 183F728F21C8E8890041C32B /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 183F728D21C8E8890041C32B /* coKitExamples */, + 183F72A521C8E88C0041C32B /* coKitExamplesTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 183F728C21C8E8890041C32B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 183F729E21C8E88B0041C32B /* LaunchScreen.storyboard in Resources */, + 18C43A4821D1D4F500D75A9B /* ImagePickerDemoViewController.xib in Resources */, + 183F72C621C9E9DE0041C32B /* test.json in Resources */, + 183F729B21C8E88B0041C32B /* Assets.xcassets in Resources */, + 183F729921C8E8890041C32B /* Main.storyboard in Resources */, + 18C43A4321D1D4E500D75A9B /* AlertDemoViewController.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 183F72A421C8E88C0041C32B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 0B9A54E31577DC1D5E93A841 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 24A92622A4331EE56ABFE7D5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-coKitExamples/Pods-coKitExamples-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 66A9FC6F6F04E954F19CFE67 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 866D6F23B88BC4316C965F2A /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-coKitExamplesTests/Pods-coKitExamplesTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + BF68B3A67305FACEED8A7FCA /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-coKitExamples/Pods-coKitExamples-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + CB2CC9A54B12823E5E21B0EB /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-coKitExamplesTests/Pods-coKitExamplesTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 183F728A21C8E8890041C32B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 183F729621C8E8890041C32B /* ViewController.m in Sources */, + 183F72A121C8E88B0041C32B /* main.m in Sources */, + 183F729321C8E8890041C32B /* AppDelegate.m in Sources */, + 18C43A4221D1D4E500D75A9B /* AlertDemoViewController.m in Sources */, + 18C43A3E21D1D4C300D75A9B /* DemoListViewController.m in Sources */, + 18C43A4721D1D4F500D75A9B /* ImagePickerDemoViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 183F72A221C8E88C0041C32B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 183F72BF21C9E3240041C32B /* coKitNSDictionaryTests.m in Sources */, + 184C4DC021D3182600C94113 /* coKitStringTests.m in Sources */, + 183F72BB21C8F91A0041C32B /* coKitNSDataTests.m in Sources */, + 183F72C321C9E8320041C32B /* coKitJsonTests.m in Sources */, + 183F72C821C9EBF00041C32B /* coKitArchieveTests.m in Sources */, + 183F72AB21C8E88C0041C32B /* coKitExamplesTests.m in Sources */, + 184C4DC221D3183800C94113 /* coKitURLConnectionTests.m in Sources */, + 183F72C121C9E5CB0041C32B /* coKitNSFileManagerTests.m in Sources */, + 184C4DC421D3184800C94113 /* coKitURLSession.m in Sources */, + 183F72B921C8EB8E0041C32B /* coKitNSArrayTests.m in Sources */, + 183F72BD21C8FC3A0041C32B /* coKitXMLParserTests.m in Sources */, + 184C4DC621D3185700C94113 /* coKitUserDefaults.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 183F72A821C8E88C0041C32B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 183F728D21C8E8890041C32B /* coKitExamples */; + targetProxy = 183F72A721C8E88C0041C32B /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 183F729721C8E8890041C32B /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 183F729821C8E8890041C32B /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 183F729C21C8E88B0041C32B /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 183F729D21C8E88B0041C32B /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 183F72AD21C8E88C0041C32B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 183F72AE21C8E88C0041C32B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 183F72B021C8E88C0041C32B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0B050894E8D9C44FAD9E1407 /* Pods-coKitExamples.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = M8CRQC87AC; + INFOPLIST_FILE = coKitExamples/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.fantasy.coKitExamples; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = "bcc7d503-742c-496c-bb14-900889ad7953"; + PROVISIONING_PROFILE_SPECIFIER = tmall_dev_all; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 183F72B121C8E88C0041C32B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 366D2FB22FB851181026E310 /* Pods-coKitExamples.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + INFOPLIST_FILE = coKitExamples/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.fantasy.coKitExamples; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 183F72B321C8E88C0041C32B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0E6200D0DCA05AA35A7A25DE /* Pods-coKitExamplesTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = M8CRQC87AC; + INFOPLIST_FILE = coKitExamplesTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.fantasy.coKitExamplesTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/coKitExamples.app/coKitExamples"; + }; + name = Debug; + }; + 183F72B421C8E88C0041C32B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1CE3597AE2C44A214FE0E307 /* Pods-coKitExamplesTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + INFOPLIST_FILE = coKitExamplesTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.fantasy.coKitExamplesTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/coKitExamples.app/coKitExamples"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 183F728921C8E8890041C32B /* Build configuration list for PBXProject "coKitExamples" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 183F72AD21C8E88C0041C32B /* Debug */, + 183F72AE21C8E88C0041C32B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 183F72AF21C8E88C0041C32B /* Build configuration list for PBXNativeTarget "coKitExamples" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 183F72B021C8E88C0041C32B /* Debug */, + 183F72B121C8E88C0041C32B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 183F72B221C8E88C0041C32B /* Build configuration list for PBXNativeTarget "coKitExamplesTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 183F72B321C8E88C0041C32B /* Debug */, + 183F72B421C8E88C0041C32B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 183F728621C8E8890041C32B /* Project object */; +} diff --git a/cokit/Examples/coKitExamples/coKitExamples/AlertDemoViewController.h b/cokit/Examples/coKitExamples/coKitExamples/AlertDemoViewController.h new file mode 100644 index 0000000..764c4e8 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/AlertDemoViewController.h @@ -0,0 +1,23 @@ +// +// AlertDemoViewController.h +// coKitExamples +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 AlertDemoViewController : UIViewController + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamples/AlertDemoViewController.m b/cokit/Examples/coKitExamples/coKitExamples/AlertDemoViewController.m new file mode 100644 index 0000000..d10aad2 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/AlertDemoViewController.m @@ -0,0 +1,140 @@ +// +// AlertDemoViewController.m +// coKitExamples +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "AlertDemoViewController.h" +#import +#import + +@interface AlertDemoViewController () + +@end + +@implementation AlertDemoViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. + self.title = @"alert demo"; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (IBAction)showSimpleAlert:(id)sender{ + co_launch(^{ + NSString *title = NSLocalizedString(@"A Short Title Is Best", nil); + NSString *message = NSLocalizedString(@"A message should be a short, complete sentence.", nil); + NSString *cancelButtonTitle = NSLocalizedString(@"OK", nil); + UIAlertController *alertController = [UIAlertController co_alertWithTitle:title message:message cancelButtonTitle:cancelButtonTitle otherButtonTitles: nil]; + + NSString *result = await([alertController co_presentFromController:self]); + NSLog(@"The simple alert's cancel action occured."); + }); +} + +- (IBAction)showOkayCancelAlert:(id)sender { + co_launch(^{ + NSString *title = NSLocalizedString(@"A Short Title Is Best", nil); + NSString *message = NSLocalizedString(@"A message should be a short, complete sentence.", nil); + NSString *cancelButtonTitle = NSLocalizedString(@"Cancel", nil); + NSString *otherButtonTitle = NSLocalizedString(@"OK", nil); + + + UIAlertController *alertController = [UIAlertController co_alertWithTitle:title message:message cancelButtonTitle:cancelButtonTitle otherButtonTitles: otherButtonTitle, nil]; + + NSString *result = await([alertController co_presentFromController:self]); + + + NSLog(@"The %@ alert's action occured.", result); + }); +} +- (IBAction)showOtherAlert:(id)sender { + co_launch(^{ + NSString *title = NSLocalizedString(@"A Short Title Is Best", nil); + NSString *message = NSLocalizedString(@"A message should be a short, complete sentence.", nil); + NSString *cancelButtonTitle = NSLocalizedString(@"Cancel", nil); + NSString *otherButtonTitleOne = NSLocalizedString(@"Choice One", nil); + NSString *otherButtonTitleTwo = NSLocalizedString(@"Choice Two", nil); + + UIAlertController *alertController = [UIAlertController co_alertWithTitle:title message:message cancelButtonTitle:cancelButtonTitle otherButtonTitles: otherButtonTitleOne, otherButtonTitleTwo, nil]; + + NSString *result = await([alertController co_presentFromController:self]); + + + NSLog(@"The %@ alert's action occured.", result); + }); +} +- (IBAction)showTextEntryAlert:(id)sender { + co_launch(^{ + NSString *title = NSLocalizedString(@"A Short Title Is Best", nil); + NSString *message = NSLocalizedString(@"A message should be a short, complete sentence.", nil); + NSString *cancelButtonTitle = NSLocalizedString(@"Cancel", nil); + NSString *otherButtonTitle = NSLocalizedString(@"OK", nil); + + UIAlertController *alertController = [UIAlertController co_alertWithTitle:title message:message cancelButtonTitle:cancelButtonTitle otherButtonTitles: otherButtonTitle, nil]; + + [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) { + + }]; + + NSString *result = await([alertController co_presentFromController:self]); + + + NSLog(@"The %@ alert's action occured.", result); + }); +} +- (IBAction)showOkayCancelActionSheet:(id)sender { + co_launch(^{ + NSString *cancelButtonTitle = NSLocalizedString(@"Cancel", nil); + NSString *destructiveButtonTitle = NSLocalizedString(@"OK", nil); + + UIAlertController *alertController = [UIAlertController co_actionSheetWithTitle:@"test" cancelButtonTitle:cancelButtonTitle destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:@"testbutton", nil]; + + NSString *result = await([alertController co_presentFromController:self]); + + + NSLog(@"The %@ alert's action occured.", result); + }); +} +- (IBAction)showOtherActionSheet:(id)sender { + co_launch(^{ + NSString *destructiveButtonTitle = NSLocalizedString(@"Destructive Choice", nil); + NSString *otherButtonTitle = NSLocalizedString(@"Safe Choice", nil); + UIAlertController *alertController = [UIAlertController co_actionSheetWithTitle:nil cancelButtonTitle:nil destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:otherButtonTitle, nil]; + + NSString *result = await([alertController co_presentFromController:self]); + + + NSLog(@"The %@ alert's action occured.", result); + }); +} + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamples/AlertDemoViewController.xib b/cokit/Examples/coKitExamples/coKitExamples/AlertDemoViewController.xib new file mode 100644 index 0000000..8d63363 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/AlertDemoViewController.xib @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cokit/Examples/coKitExamples/coKitExamples/AppDelegate.h b/cokit/Examples/coKitExamples/coKitExamples/AppDelegate.h new file mode 100644 index 0000000..07812d6 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/AppDelegate.h @@ -0,0 +1,27 @@ +// +// AppDelegate.h +// coKitExamples +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + +@end + diff --git a/cokit/Examples/coKitExamples/coKitExamples/AppDelegate.m b/cokit/Examples/coKitExamples/coKitExamples/AppDelegate.m new file mode 100644 index 0000000..f5d0083 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/AppDelegate.m @@ -0,0 +1,69 @@ +// +// AppDelegate.m +// coKitExamples +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "AppDelegate.h" +#import "DemoListViewController.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + + DemoListViewController *viewController = [[DemoListViewController alloc] init]; + UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [UIApplication sharedApplication].keyWindow.rootViewController = nav; + }); + + return YES; +} + + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. +} + + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. +} + + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamples/Assets.xcassets/AppIcon.appiconset/Contents.json b/cokit/Examples/coKitExamples/coKitExamples/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/cokit/Examples/coKitExamples/coKitExamples/Assets.xcassets/Contents.json b/cokit/Examples/coKitExamples/coKitExamples/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/cokit/Examples/coKitExamples/coKitExamples/Base.lproj/LaunchScreen.storyboard b/cokit/Examples/coKitExamples/coKitExamples/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f83f6fd --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cokit/Examples/coKitExamples/coKitExamples/Base.lproj/Main.storyboard b/cokit/Examples/coKitExamples/coKitExamples/Base.lproj/Main.storyboard new file mode 100644 index 0000000..d7c78a1 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cokit/Examples/coKitExamples/coKitExamples/DemoListViewController.h b/cokit/Examples/coKitExamples/coKitExamples/DemoListViewController.h new file mode 100644 index 0000000..e97c711 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/DemoListViewController.h @@ -0,0 +1,23 @@ +// +// DemoListViewController.h +// coKitExamples +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 DemoListViewController : UITableViewController + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamples/DemoListViewController.m b/cokit/Examples/coKitExamples/coKitExamples/DemoListViewController.m new file mode 100644 index 0000000..f8643c0 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/DemoListViewController.m @@ -0,0 +1,132 @@ +// +// DemoListViewController.m +// coKitExamples +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "DemoListViewController.h" +#import "AlertDemoViewController.h" +#import "ImagePickerDemoViewController.h" + +@interface DemoListViewController () + +@end + +@implementation DemoListViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"Demo列表"; + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 3; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; + + // Configure the cell... + if (cell == nil){ + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; + } + + if(indexPath.row == 0){ + cell.textLabel.text = @"AlertDemo"; + } + if(indexPath.row == 1){ + cell.textLabel.text = @"ImagePickerDemo"; + } + if(indexPath.row == 2){ + cell.textLabel.text = @"XMLDemo"; + } + + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + if(indexPath.row == 0){ + AlertDemoViewController *viewController = [[AlertDemoViewController alloc] initWithNibName:@"AlertDemoViewController" bundle:nil]; + [self.navigationController pushViewController:viewController animated:YES]; + } + if(indexPath.row == 1){ + ImagePickerDemoViewController *viewController = [[ImagePickerDemoViewController alloc] initWithNibName:@"ImagePickerDemoViewController" bundle:nil]; + [self.navigationController pushViewController:viewController animated:YES]; + } +} + + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamples/ImagePickerDemoViewController.h b/cokit/Examples/coKitExamples/coKitExamples/ImagePickerDemoViewController.h new file mode 100644 index 0000000..48e853a --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/ImagePickerDemoViewController.h @@ -0,0 +1,23 @@ +// +// ImagePickerDemoViewController.h +// coKitExamples +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 ImagePickerDemoViewController : UIViewController + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamples/ImagePickerDemoViewController.m b/cokit/Examples/coKitExamples/coKitExamples/ImagePickerDemoViewController.m new file mode 100644 index 0000000..09e0cc3 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/ImagePickerDemoViewController.m @@ -0,0 +1,63 @@ +// +// ImagePickerDemoViewController.m +// coKitExamples +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "ImagePickerDemoViewController.h" +#import +#import + +@interface ImagePickerDemoViewController () + +@property (nonatomic, weak) IBOutlet UIImageView *imageView; + +@end + +@implementation ImagePickerDemoViewController + +- (void)chooseImage:(id)sender{ + co_launch(^{ + UIImagePickerController *controller = [[UIImagePickerController alloc] init]; + controller.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; + COImagePickerResult *result = await([controller co_presentFromController:self]); + if (result) { + self.imageView.image = result.originalImage; + } + }); +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"选择" style:UIBarButtonItemStylePlain target:self action:@selector(chooseImage:)]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamples/ImagePickerDemoViewController.xib b/cokit/Examples/coKitExamples/coKitExamples/ImagePickerDemoViewController.xib new file mode 100644 index 0000000..eb40877 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/ImagePickerDemoViewController.xib @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cokit/Examples/coKitExamples/coKitExamples/Info.plist b/cokit/Examples/coKitExamples/coKitExamples/Info.plist new file mode 100644 index 0000000..e3ef9da --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/Info.plist @@ -0,0 +1,54 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + NSCameraUsageDescription + 让我用一下相机 + NSPhotoLibraryUsageDescription + 让我用一下相册 + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/cokit/Examples/coKitExamples/coKitExamples/Resources/test.json b/cokit/Examples/coKitExamples/coKitExamples/Resources/test.json new file mode 100644 index 0000000..c8f1d8c --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/Resources/test.json @@ -0,0 +1,22 @@ +{ + "glossary": { + "title": "example glossary", + "GlossDiv": { + "title": "S", + "GlossList": { + "GlossEntry": { + "ID": "SGML", + "SortAs": "SGML", + "GlossTerm": "Standard Generalized Markup Language", + "Acronym": "SGML", + "Abbrev": "ISO 8879:1986", + "GlossDef": { + "para": "A meta-markup language, used to create markup languages such as DocBook.", + "GlossSeeAlso": ["GML", "XML"] + }, + "GlossSee": "markup" + } + } + } + } +} diff --git a/cokit/Examples/coKitExamples/coKitExamples/ViewController.h b/cokit/Examples/coKitExamples/coKitExamples/ViewController.h new file mode 100644 index 0000000..8e4444d --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/ViewController.h @@ -0,0 +1,25 @@ +// +// ViewController.h +// coKitExamples +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 ViewController : UIViewController + + +@end + diff --git a/cokit/Examples/coKitExamples/coKitExamples/ViewController.m b/cokit/Examples/coKitExamples/coKitExamples/ViewController.m new file mode 100644 index 0000000..7c1e56c --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/ViewController.m @@ -0,0 +1,134 @@ +// +// ViewController.m +// coKitExamples +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "ViewController.h" +#import +#import + +//@interface Channel: NSObject +// +//@property (nonatomic, strong) NSString *title; +//@property (nonatomic, strong) NSString *link; +//@property (nonatomic, strong) NSString *desc; +//@property (nonatomic, strong) NSMutableArray *images; +//@property (nonatomic, strong) NSMutableArray *items; +// +//@end +// +//@interface Image: NSObject +// +//@property (nonatomic, strong) NSString *url; +//@property (nonatomic, strong) NSString *link; +// +//@end +// +//@interface Item: NSObject +// +//@property (nonatomic, strong) NSString *title; +//@property (nonatomic, strong) NSString *link; +//@property (nonatomic, strong) NSString *desc; +// +//@end + + + + +@interface ViewController () + +//// 0: 初始化状态, 1: 处于channel中, 2: 处于image中, 3: 处于item中, 4: url, 5: title, 6: description, 7: link +//@property (nonatomic, assign) int state; +//@property (nonatomic, strong) NSMutableArray *states; +//@property (nonatomic, strong) Channel *curChannel; +//@property (nonatomic, strong) Image *curImage; +//@property (nonatomic, strong) Item *curItem; +//@property (nonatomic, strong) NSString *content; + +@end + +@implementation ViewController + +//- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary *)attributeDict{ +// if ([elementName isEqualToString:@"channel"]) { +// self.state = 1; +// _curChannel = [[Channel alloc] init]; +// } +// else if([elementName isEqualToString:@"image"]){ +// [self.states addObject:@(self.state)]; +// self.state = 2; +// _curImage = [[Image alloc] init]; +// [_curChannel.images addObject:_curImage]; +// } +// //... +//} +//- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ +// self.content = string; +//} +//- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName{ +// //... +// if([elementName isEqualToString:@"link"]){ +// self.state = [[self.states lastObject] intValue]; +// [self.states removeLastObject]; +// if(self.state == 1){ +// _curChannel.link = self.content; +// } +// else if (self.state == 2) { +// _curImage.link = self.content; +// } +// else if(self.state == 3){ +// _curItem.link = self.content; +// } +// } +//} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view, typically from a nib. + +// NSData *data = nil; +// COCoroutine *xml_generator = [NSXMLParser co_parseData:data]; +// +// co_launch(^{ +// COXMLItem *item = nil; +// Channel *chanel = [[Channel alloc] init]; +// NSMutableDictionary *image = nil; +// NSMutableDictionary *dataItem = nil; +// while (1) { +// item = [xml_generator next]; +// if (item.itemType == COXMLItemDidStartElement && [item.elementName isEqualToString:@"image"]) { +// image = [[NSMutableDictionary alloc] init]; +// } +// if (item.itemType == COXMLItemDidEndElement && [item.elementName isEqualToString:@"image"]) { +// [chanel.images addObject:image]; +// image = nil; +// } +// if (item.itemType == COXMLItemDidStartElement && [item.elementName isEqualToString:@"item"]) { +// dataItem = [[NSMutableDictionary alloc] init]; +// } +// //... +// } +// }); +} + + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamples/main.m b/cokit/Examples/coKitExamples/coKitExamples/main.m new file mode 100644 index 0000000..d090b99 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamples/main.m @@ -0,0 +1,26 @@ +// +// main.m +// coKitExamples +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/cokit/Examples/coKitExamples/coKitExamplesTests/Info.plist b/cokit/Examples/coKitExamples/coKitExamplesTests/Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamplesTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/cokit/Examples/coKitExamples/coKitExamplesTests/coKitArchieveTests.m b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitArchieveTests.m new file mode 100644 index 0000000..f01f951 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitArchieveTests.m @@ -0,0 +1,95 @@ +// +// coKitArchieveTests.m +// coKitExamplesTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import +#import +#import +#import + +@interface coKitArchieveTests : XCTestCase + +@end + +@implementation coKitArchieveTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. + if (![[NSFileManager defaultManager] fileExistsAtPath:[self tempPath]]) { + [[NSFileManager defaultManager] createDirectoryAtPath:[self tempPath] withIntermediateDirectories:NO attributes:nil error:nil]; + } +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; + [[NSFileManager defaultManager] removeItemAtPath:[self tempPath] error:nil]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +- (NSString*)tempPath{ + return [NSTemporaryDirectory() stringByAppendingPathComponent:@"test010"]; +} + +- (void)testArchieve{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + for (int i = 0; i < 10; i++) { + NSMutableArray *list = [[NSMutableArray alloc] init]; + for (int j = 0; j < 10; j++) { + [list addObject:@(rand() % 1000)]; + } + NSArray *tmpList = [list copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [NSKeyedArchiver co_archiveRootObject:tmpList toFile:filePath]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSArray *resultList = [NSKeyedUnarchiver co_unarchiveObjectWithFile:filePath]; + + XCTAssert(resultList.count == list.count); + + for (int j = 0; j < 10; j++) { + XCTAssert([list[j] intValue] == [resultList[j] intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:10]; +} + + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamplesTests/coKitExamplesTests.m b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitExamplesTests.m new file mode 100644 index 0000000..02fded6 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitExamplesTests.m @@ -0,0 +1,49 @@ +// +// coKitExamplesTests.m +// coKitExamplesTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 coKitExamplesTests : XCTestCase + +@end + +@implementation coKitExamplesTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamplesTests/coKitJsonTests.m b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitJsonTests.m new file mode 100644 index 0000000..dd99731 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitJsonTests.m @@ -0,0 +1,122 @@ +// +// coKitJsonTests.m +// coKitExamplesTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import +#import +#import +#import + +@interface coKitJsonTests : XCTestCase + +@end + +@implementation coKitJsonTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. + if (![[NSFileManager defaultManager] fileExistsAtPath:[self tempPath]]) { + [[NSFileManager defaultManager] createDirectoryAtPath:[self tempPath] withIntermediateDirectories:NO attributes:nil error:nil]; + } +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; + [[NSFileManager defaultManager] removeItemAtPath:[self tempPath] error:nil]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +- (NSString*)tempPath{ + return [NSTemporaryDirectory() stringByAppendingPathComponent:@"test009"]; +} + + +- (void)testJSONParse{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + NSString *testJSONPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"json"]; + + NSData *data = [NSData co_dataWithContentsOfFile:testJSONPath]; + + XCTAssert(data.length > 0); + + NSDictionary *dict = [NSJSONSerialization co_JSONObjectWithData:data options:0 error:nil]; + + XCTAssert([dict isKindOfClass:[NSDictionary class]]); + + NSDictionary *dict1 = dict[@"glossary"]; + XCTAssert(dict1.count > 0); + + NSDictionary *dict2 = dict1[@"GlossDiv"]; + XCTAssert(dict2.count > 0); + + NSDictionary *dict3 = dict2[@"GlossList"]; + XCTAssert(dict3.count > 0); + + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:10]; +} + +- (void)testJSONGenerator{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + NSString *testJSONPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"json"]; + + NSData *data = [NSData co_dataWithContentsOfFile:testJSONPath]; + + XCTAssert(data.length > 0); + + NSDictionary *dict = [NSJSONSerialization co_JSONObjectWithData:data options:0 error:nil]; + + XCTAssert([dict isKindOfClass:[NSDictionary class]]); + + NSData *resultData = [NSJSONSerialization co_dataWithJSONObject:dict options:0 error:nil]; + + XCTAssert(resultData.length > 0); + + NSString *jsonString = [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding]; + + XCTAssert([jsonString rangeOfString:@"glossary"].location != NSNotFound); + + XCTAssert([jsonString rangeOfString:@"SGML"].location != NSNotFound); + + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:10]; +} + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSArrayTests.m b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSArrayTests.m new file mode 100644 index 0000000..be23268 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSArrayTests.m @@ -0,0 +1,258 @@ +// +// coKitNSArrayTests.m +// coKitExamplesTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + +@interface coKitNSArrayTests : XCTestCase + +@end + +@implementation coKitNSArrayTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. + if (![[NSFileManager defaultManager] fileExistsAtPath:[self tempPath]]) { + [[NSFileManager defaultManager] createDirectoryAtPath:[self tempPath] withIntermediateDirectories:NO attributes:nil error:nil]; + } +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; + [[NSFileManager defaultManager] removeItemAtPath:[self tempPath] error:nil]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +- (NSString*)tempPath{ + return [NSTemporaryDirectory() stringByAppendingPathComponent:@"test001"]; +} + +- (void)testNSArrayInitializeFromFile{ + + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + for (int i = 0; i < 100; i++) { + NSMutableArray *list = [[NSMutableArray alloc] init]; + for (int j = 0; j < 10; j++) { + [list addObject:@(rand() % 1000)]; + } + NSArray *tmpList = [list copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpList co_writeToFile:filePath atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSArray *resultList = [[NSArray alloc] co_initWithContentsOfFile:filePath]; + + XCTAssert(resultList.count == list.count); + + for (int j = 0; j < 10; j++) { + XCTAssert([list[j] intValue] == [resultList[j] intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 100; i++) { + NSMutableArray *list = [[NSMutableArray alloc] init]; + for (int j = 0; j < 10; j++) { + [list addObject:@(rand() % 1000)]; + } + NSArray *tmpList = [list copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpList co_writeToURL:[NSURL fileURLWithPath:filePath] error:nil]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSArray *resultList = [[NSArray alloc] co_initWithContentsOfURL:[NSURL fileURLWithPath:filePath]]; + + XCTAssert(resultList.count == list.count); + + for (int j = 0; j < 10; j++) { + XCTAssert([list[j] intValue] == [resultList[j] intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 100; i++) { + NSMutableArray *list = [[NSMutableArray alloc] init]; + for (int j = 0; j < 10; j++) { + [list addObject:@(rand() % 1000)]; + } + NSArray *tmpList = [list copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpList co_writeToURL:[NSURL fileURLWithPath:filePath] atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSArray *resultList = [NSArray co_arrayWithContentsOfFile:filePath]; + + XCTAssert(resultList.count == list.count); + + for (int j = 0; j < 10; j++) { + XCTAssert([list[j] intValue] == [resultList[j] intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 100; i++) { + NSMutableArray *list = [[NSMutableArray alloc] init]; + for (int j = 0; j < 10; j++) { + [list addObject:@(rand() % 1000)]; + } + NSArray *tmpList = [list copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpList co_writeToFile:filePath atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSArray *resultList = [NSArray co_arrayWithContentsOfURL:[NSURL fileURLWithPath:filePath] error:nil]; + + XCTAssert(resultList.count == list.count); + + for (int j = 0; j < 10; j++) { + XCTAssert([list[j] intValue] == [resultList[j] intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + + +- (void)testNSMutableArrayInitializeFromFile{ + + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + for (int i = 0; i < 100; i++) { + NSMutableArray *list = [[NSMutableArray alloc] init]; + for (int j = 0; j < 10; j++) { + [list addObject:@(rand() % 1000)]; + } + NSArray *tmpList = [list copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file1_%d", i]]; + [tmpList co_writeToFile:filePath atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSMutableArray *resultList = [[NSMutableArray alloc] co_initWithContentsOfFile:filePath]; + + XCTAssert(resultList.count == list.count); + + for (int j = 0; j < 10; j++) { + XCTAssert([list[j] intValue] == [resultList[j] intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 100; i++) { + NSMutableArray *list = [[NSMutableArray alloc] init]; + for (int j = 0; j < 10; j++) { + [list addObject:@(rand() % 1000)]; + } + NSArray *tmpList = [list copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file1_%d", i]]; + [tmpList co_writeToFile:filePath atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSMutableArray *resultList = [[NSMutableArray alloc] co_initWithContentsOfURL:[NSURL fileURLWithPath:filePath] error:nil]; + + XCTAssert(resultList.count == list.count); + + for (int j = 0; j < 10; j++) { + XCTAssert([list[j] intValue] == [resultList[j] intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 100; i++) { + NSMutableArray *list = [[NSMutableArray alloc] init]; + for (int j = 0; j < 10; j++) { + [list addObject:@(rand() % 1000)]; + } + NSArray *tmpList = [list copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file1_%d", i]]; + [tmpList co_writeToFile:filePath atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSMutableArray *resultList = [NSMutableArray co_arrayWithContentsOfFile:filePath]; + + XCTAssert(resultList.count == list.count); + + for (int j = 0; j < 10; j++) { + XCTAssert([list[j] intValue] == [resultList[j] intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 100; i++) { + NSMutableArray *list = [[NSMutableArray alloc] init]; + for (int j = 0; j < 10; j++) { + [list addObject:@(rand() % 1000)]; + } + NSArray *tmpList = [list copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file1_%d", i]]; + [tmpList co_writeToFile:filePath atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSMutableArray *resultList = [NSMutableArray co_arrayWithContentsOfURL:[NSURL fileURLWithPath:filePath] error:nil]; + + XCTAssert(resultList.count == list.count); + + for (int j = 0; j < 10; j++) { + XCTAssert([list[j] intValue] == [resultList[j] intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSDataTests.m b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSDataTests.m new file mode 100644 index 0000000..1cd8de7 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSDataTests.m @@ -0,0 +1,144 @@ +// +// coKitNSDataTests.m +// coKitExamplesTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + + +@interface coKitNSDataTests : XCTestCase + +@end + +@implementation coKitNSDataTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. + if (![[NSFileManager defaultManager] fileExistsAtPath:[self tempPath]]) { + [[NSFileManager defaultManager] createDirectoryAtPath:[self tempPath] withIntermediateDirectories:NO attributes:nil error:nil]; + } +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; + [[NSFileManager defaultManager] removeItemAtPath:[self tempPath] error:nil]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +- (NSString*)tempPath{ + return [NSTemporaryDirectory() stringByAppendingPathComponent:@"test002"]; +} + +- (void)testNSDataFileIO{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + co_launch(^{ + for (int i = 0; i < 10; i++) { + NSMutableString *originStr = [[NSMutableString alloc] init]; + for (int j = 0; j < 1024; j++) { + [originStr appendFormat:@"%c", 'a' + (rand() % 23)]; + } + + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + + + NSData *data = [originStr dataUsingEncoding:NSUTF8StringEncoding]; + + [data co_writeToFile:filePath atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSData *resultData = [[NSData alloc] co_initWithContentsOfFile:filePath]; + + XCTAssert(data.length == resultData.length); + + NSString *resultStr = [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding]; + + XCTAssert([resultStr isEqualToString:originStr]); + + } + + for (int i = 0; i < 10; i++) { + NSMutableString *originStr = [[NSMutableString alloc] init]; + for (int j = 0; j < 1024; j++) { + [originStr appendFormat:@"%c", 'a' + (rand() % 23)]; + } + + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + + + NSData *data = [originStr dataUsingEncoding:NSUTF8StringEncoding]; + + [data co_writeToURL:[NSURL fileURLWithPath:filePath] atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSData *resultData = [[NSData alloc] co_initWithContentsOfURL:[NSURL fileURLWithPath:filePath] options:0 error:nil]; + + XCTAssert(data.length == resultData.length); + + NSString *resultStr = [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding]; + + XCTAssert([resultStr isEqualToString:originStr]); + + } + + for (int i = 0; i < 10; i++) { + NSMutableString *originStr = [[NSMutableString alloc] init]; + for (int j = 0; j < 1024; j++) { + [originStr appendFormat:@"%c", 'a' + (rand() % 23)]; + } + + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + + + NSData *data = [originStr dataUsingEncoding:NSUTF8StringEncoding]; + + [data co_writeToFile:filePath options:NSDataWritingAtomic error:nil]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSData *resultData = [[NSData alloc] co_initWithContentsOfFile:filePath options:0 error:nil]; + + XCTAssert(data.length == resultData.length); + + NSString *resultStr = [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding]; + + XCTAssert([resultStr isEqualToString:originStr]); + + } + + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSDictionaryTests.m b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSDictionaryTests.m new file mode 100644 index 0000000..d299618 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSDictionaryTests.m @@ -0,0 +1,377 @@ +// +// coKitNSDictionaryTests.m +// coKitExamplesTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + +@interface coKitNSDictionaryTests : XCTestCase + +@end + +@implementation coKitNSDictionaryTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. + if (![[NSFileManager defaultManager] fileExistsAtPath:[self tempPath]]) { + [[NSFileManager defaultManager] createDirectoryAtPath:[self tempPath] withIntermediateDirectories:NO attributes:nil error:nil]; + } +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; + [[NSFileManager defaultManager] removeItemAtPath:[self tempPath] error:nil]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +- (NSString*)tempPath{ + return [NSTemporaryDirectory() stringByAppendingPathComponent:@"test004"]; +} + +- (void)testDictionaryWrite{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + for (int i = 0; i < 101; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + for (int j = 0; j < 10; j++) { + [dict setValue:@(rand() % 1000) forKey:[NSString stringWithFormat:@"key_%d", j]]; + } + NSDictionary *tmpDict = [dict copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpDict co_writeToFile:filePath atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + + for (int i = 0; i < 101; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + for (int j = 0; j < 10; j++) { + [dict setValue:@(rand() % 1000) forKey:[NSString stringWithFormat:@"key_%d", j]]; + } + NSDictionary *tmpDict = [dict copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpDict co_writeToURL:[NSURL fileURLWithPath:filePath] error:nil]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 101; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + for (int j = 0; j < 10; j++) { + [dict setValue:@(rand() % 1000) forKey:[NSString stringWithFormat:@"key_%d", j]]; + } + NSDictionary *tmpDict = [dict copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpDict co_writeToURL:[NSURL fileURLWithPath:filePath] atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + + + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + +- (void)testMultableDictionaryWrite{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + for (int i = 0; i < 101; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + for (int j = 0; j < 10; j++) { + [dict setValue:@(rand() % 1000) forKey:[NSString stringWithFormat:@"key_%d", j]]; + } + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file1_%d", i]]; + [dict co_writeToFile:filePath atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + + for (int i = 0; i < 101; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + for (int j = 0; j < 10; j++) { + [dict setValue:@(rand() % 1000) forKey:[NSString stringWithFormat:@"key_%d", j]]; + } + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file1_%d", i]]; + [dict co_writeToURL:[NSURL fileURLWithPath:filePath] error:nil]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 101; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + for (int j = 0; j < 10; j++) { + [dict setValue:@(rand() % 1000) forKey:[NSString stringWithFormat:@"key_%d", j]]; + } + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file1_%d", i]]; + [dict co_writeToURL:[NSURL fileURLWithPath:filePath] atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + + + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + +- (void)testDictionaryInitilize{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + for (int i = 0; i < 101; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + for (int j = 0; j < 10; j++) { + [dict setValue:@(rand() % 1000) forKey:[NSString stringWithFormat:@"key_%d", j]]; + } + NSDictionary *tmpDict = [dict copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpDict co_writeToFile:filePath atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSDictionary *resultDict = [[NSDictionary alloc] co_initWithContentsOfFile:filePath]; + XCTAssert(resultDict.count == tmpDict.count); + + for (NSString *key in resultDict) { + id val1 = resultDict[key]; + id val2 = tmpDict[key]; + XCTAssert([val1 intValue] == [val2 intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + + for (int i = 0; i < 101; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + for (int j = 0; j < 10; j++) { + [dict setValue:@(rand() % 1000) forKey:[NSString stringWithFormat:@"key_%d", j]]; + } + NSDictionary *tmpDict = [dict copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpDict co_writeToURL:[NSURL fileURLWithPath:filePath] error:nil]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSDictionary *resultDict = [[NSDictionary alloc] co_initWithContentsOfURL:[NSURL fileURLWithPath:filePath]]; + XCTAssert(resultDict.count == tmpDict.count); + + for (NSString *key in resultDict) { + id val1 = resultDict[key]; + id val2 = tmpDict[key]; + XCTAssert([val1 intValue] == [val2 intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 101; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + for (int j = 0; j < 10; j++) { + [dict setValue:@(rand() % 1000) forKey:[NSString stringWithFormat:@"key_%d", j]]; + } + NSDictionary *tmpDict = [dict copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpDict co_writeToURL:[NSURL fileURLWithPath:filePath] atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSDictionary *resultDict = [NSDictionary co_dictionaryWithContentsOfFile:filePath]; + XCTAssert(resultDict.count == tmpDict.count); + + for (NSString *key in resultDict) { + id val1 = resultDict[key]; + id val2 = tmpDict[key]; + XCTAssert([val1 intValue] == [val2 intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 101; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + for (int j = 0; j < 10; j++) { + [dict setValue:@(rand() % 1000) forKey:[NSString stringWithFormat:@"key_%d", j]]; + } + NSDictionary *tmpDict = [dict copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpDict co_writeToURL:[NSURL fileURLWithPath:filePath] atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSDictionary *resultDict = [NSDictionary co_dictionaryWithContentsOfURL:[NSURL fileURLWithPath:filePath]]; + XCTAssert(resultDict.count == tmpDict.count); + + for (NSString *key in resultDict) { + id val1 = resultDict[key]; + id val2 = tmpDict[key]; + XCTAssert([val1 intValue] == [val2 intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + + + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + + +- (void)testMultableDictionaryInitilize{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + for (int i = 0; i < 101; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + for (int j = 0; j < 10; j++) { + [dict setValue:@(rand() % 1000) forKey:[NSString stringWithFormat:@"key_%d", j]]; + } + NSDictionary *tmpDict = [dict copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpDict co_writeToFile:filePath atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSMutableDictionary *resultDict = [[NSMutableDictionary alloc] co_initWithContentsOfFile:filePath]; + XCTAssert(resultDict.count == tmpDict.count); + + for (NSString *key in resultDict) { + id val1 = resultDict[key]; + id val2 = tmpDict[key]; + XCTAssert([val1 intValue] == [val2 intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + + for (int i = 0; i < 101; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + for (int j = 0; j < 10; j++) { + [dict setValue:@(rand() % 1000) forKey:[NSString stringWithFormat:@"key_%d", j]]; + } + NSDictionary *tmpDict = [dict copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpDict co_writeToURL:[NSURL fileURLWithPath:filePath] error:nil]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSMutableDictionary *resultDict = [[NSMutableDictionary alloc] co_initWithContentsOfURL:[NSURL fileURLWithPath:filePath]]; + XCTAssert(resultDict.count == tmpDict.count); + + for (NSString *key in resultDict) { + id val1 = resultDict[key]; + id val2 = tmpDict[key]; + XCTAssert([val1 intValue] == [val2 intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 101; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + for (int j = 0; j < 10; j++) { + [dict setValue:@(rand() % 1000) forKey:[NSString stringWithFormat:@"key_%d", j]]; + } + NSDictionary *tmpDict = [dict copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpDict co_writeToURL:[NSURL fileURLWithPath:filePath] atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSMutableDictionary *resultDict = [NSMutableDictionary co_dictionaryWithContentsOfFile:filePath]; + XCTAssert(resultDict.count == tmpDict.count); + + for (NSString *key in resultDict) { + id val1 = resultDict[key]; + id val2 = tmpDict[key]; + XCTAssert([val1 intValue] == [val2 intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 101; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + for (int j = 0; j < 10; j++) { + [dict setValue:@(rand() % 1000) forKey:[NSString stringWithFormat:@"key_%d", j]]; + } + NSDictionary *tmpDict = [dict copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpDict co_writeToURL:[NSURL fileURLWithPath:filePath] atomically:YES]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSMutableDictionary *resultDict = [NSMutableDictionary co_dictionaryWithContentsOfURL:[NSURL fileURLWithPath:filePath]]; + XCTAssert(resultDict.count == tmpDict.count); + + for (NSString *key in resultDict) { + id val1 = resultDict[key]; + id val2 = tmpDict[key]; + XCTAssert([val1 intValue] == [val2 intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + + + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSFileManagerTests.m b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSFileManagerTests.m new file mode 100644 index 0000000..2ba2de9 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitNSFileManagerTests.m @@ -0,0 +1,118 @@ +// +// coKitNSFileManagerTests.m +// coKitExamplesTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import +#import + +@interface coKitNSFileManagerTests : XCTestCase + +@end + +@implementation coKitNSFileManagerTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. + if (![[NSFileManager defaultManager] fileExistsAtPath:[self tempPath]]) { + [[NSFileManager defaultManager] createDirectoryAtPath:[self tempPath] withIntermediateDirectories:NO attributes:nil error:nil]; + } +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; + [[NSFileManager defaultManager] removeItemAtPath:[self tempPath] error:nil]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +- (NSString*)tempPath{ + return [NSTemporaryDirectory() stringByAppendingPathComponent:@"test006"]; +} + +- (void)testCreateDir{ + + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + for (int i = 0; i < 10; i++) { + NSString *dirName = [NSString stringWithFormat:@"dir_%d", i]; + NSString *dirPath = [[self tempPath] stringByAppendingPathComponent:dirName]; + BOOL ret = [[NSFileManager defaultManager] co_createDirectoryAtPath:dirPath withIntermediateDirectories:NO attributes:nil error:nil]; + + XCTAssert(ret == YES); + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:dirPath]); + + BOOL isDir = NO; + BOOL retValue = [[NSFileManager defaultManager] co_fileExistsAtPath:dirPath isDirectory:&isDir]; + + XCTAssert(retValue); + XCTAssert(isDir); + + [[NSFileManager defaultManager] co_removeItemAtPath:dirPath error:nil]; + + XCTAssert(![[NSFileManager defaultManager] fileExistsAtPath:dirPath]); + + retValue = [[NSFileManager defaultManager] co_fileExistsAtPath:dirPath isDirectory:NULL]; + + XCTAssert(!retValue); + } + + for (int i = 0; i < 10; i++) { + NSString *dirName = [NSString stringWithFormat:@"dir_%d", i]; + NSString *dirPath = [[self tempPath] stringByAppendingPathComponent:dirName]; + BOOL ret = [[NSFileManager defaultManager] co_createDirectoryAtURL:[NSURL fileURLWithPath:dirPath] withIntermediateDirectories:NO attributes:nil error:nil]; + + XCTAssert(ret == YES); + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:dirPath]); + + BOOL isDir = NO; + BOOL retValue = [[NSFileManager defaultManager] co_fileExistsAtPath:dirPath isDirectory:&isDir]; + + XCTAssert(retValue); + XCTAssert(isDir); + + [[NSFileManager defaultManager] co_removeItemAtPath:dirPath error:nil]; + + XCTAssert(![[NSFileManager defaultManager] fileExistsAtPath:dirPath]); + + retValue = [[NSFileManager defaultManager] co_fileExistsAtPath:dirPath isDirectory:NULL]; + + XCTAssert(!retValue); + } + + + + [e fulfill]; + }); + [self waitForExpectations:@[e] timeout:1000]; +} + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamplesTests/coKitStringTests.m b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitStringTests.m new file mode 100644 index 0000000..e3687a0 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitStringTests.m @@ -0,0 +1,203 @@ +// +// coKitStringTests.m +// coKitExamplesTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + +@interface coKitStringTests : XCTestCase + +@end + +@implementation coKitStringTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. + if (![[NSFileManager defaultManager] fileExistsAtPath:[self tempPath]]) { + [[NSFileManager defaultManager] createDirectoryAtPath:[self tempPath] withIntermediateDirectories:NO attributes:nil error:nil]; + } +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; + [[NSFileManager defaultManager] removeItemAtPath:[self tempPath] error:nil]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +- (NSString*)tempPath{ + return [NSTemporaryDirectory() stringByAppendingPathComponent:@"test100"]; +} + +- (void)testStringWrite{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + for (int i = 0; i < 101; i++) { + NSMutableString *mutlContent = [[NSMutableString alloc] init]; + for (int j = 0; j < 10; j++) { + [mutlContent appendFormat:@"%d_", rand()]; + } + NSString *tmpStr = [mutlContent copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpStr co_writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + + for (int i = 0; i < 101; i++) { + + NSMutableString *mutlContent = [[NSMutableString alloc] init]; + for (int j = 0; j < 10; j++) { + [mutlContent appendFormat:@"%d_", rand()]; + } + NSString *tmpStr = [mutlContent copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file1_%d", i]]; + [tmpStr co_writeToURL:[NSURL fileURLWithPath:filePath] atomically:YES encoding:NSUTF8StringEncoding error:nil]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + + } + + + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + +- (void)testStringRead{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + for (int i = 0; i < 101; i++) { + NSMutableString *mutlContent = [[NSMutableString alloc] init]; + for (int j = 0; j < 10; j++) { + [mutlContent appendFormat:@"%d_", rand()]; + } + NSString *tmpStr = [mutlContent copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + [tmpStr co_writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSString *retStr = [NSString co_stringWithContentsOfFile:filePath usedEncoding:nil error:nil]; + + XCTAssert([retStr isEqualToString:tmpStr]); + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 101; i++) { + NSMutableString *mutlContent = [[NSMutableString alloc] init]; + for (int j = 0; j < 10; j++) { + [mutlContent appendFormat:@"%d_", rand()]; + } + NSString *tmpStr = [mutlContent copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file1_%d", i]]; + [tmpStr co_writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSString *retStr = [NSString co_stringWithContentsOfURL:[NSURL fileURLWithPath:filePath] usedEncoding:nil error:nil]; + + XCTAssert([retStr isEqualToString:tmpStr]); + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 101; i++) { + NSMutableString *mutlContent = [[NSMutableString alloc] init]; + for (int j = 0; j < 10; j++) { + [mutlContent appendFormat:@"%d_", rand()]; + } + NSString *tmpStr = [mutlContent copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file1_%d", i]]; + [tmpStr co_writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSString *retStr = [NSString co_stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; + + XCTAssert([retStr isEqualToString:tmpStr]); + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 101; i++) { + NSMutableString *mutlContent = [[NSMutableString alloc] init]; + for (int j = 0; j < 10; j++) { + [mutlContent appendFormat:@"%d_", rand()]; + } + NSString *tmpStr = [mutlContent copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file1_%d", i]]; + [tmpStr co_writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSString *retStr = [[NSString alloc] co_initWithContentsOfFile:filePath usedEncoding:nil error:nil]; + + XCTAssert([retStr isEqualToString:tmpStr]); + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + for (int i = 0; i < 101; i++) { + NSMutableString *mutlContent = [[NSMutableString alloc] init]; + for (int j = 0; j < 10; j++) { + [mutlContent appendFormat:@"%d_", rand()]; + } + NSString *tmpStr = [mutlContent copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file1_%d", i]]; + [tmpStr co_writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil]; + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSString *retStr = [[NSString alloc] co_initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; + + XCTAssert([retStr isEqualToString:tmpStr]); + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + + + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamplesTests/coKitURLConnectionTests.m b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitURLConnectionTests.m new file mode 100644 index 0000000..a38fa20 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitURLConnectionTests.m @@ -0,0 +1,87 @@ +// +// coKitURLConnectionTests.m +// coKitExamplesTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import +#import + +@interface coKitURLConnectionTests : XCTestCase + +@end + +@implementation coKitURLConnectionTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +- (void)testRequest{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + NSURLResponse *response = nil; + NSData *data = [NSURLConnection co_sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://raw.githubusercontent.com/DaveGamble/cJSON/master/tests/inputs/test1"]] response:&response error:nil]; + + XCTAssert(response != nil); + XCTAssert(data.length > 0); + + NSDictionary *dict = [NSJSONSerialization co_JSONObjectWithData:data options:0 error:nil]; + + XCTAssert(dict.count > 0); + XCTAssert([(NSDictionary*)dict[@"glossary"] count] > 0); + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + +- (void)testRequest404{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + NSURLResponse *response = nil; + NSData *data = [NSURLConnection co_sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://raw.githubusercontent.com/DaveGamble/cJSON/master/tests/inputs/test11111"]] response:&response error:nil]; + + XCTAssert([(NSHTTPURLResponse*)response statusCode] == 404); + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamplesTests/coKitURLSession.m b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitURLSession.m new file mode 100644 index 0000000..896c24a --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitURLSession.m @@ -0,0 +1,89 @@ +// +// coKitURLSession.m +// coKitExamplesTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import +#import + +@interface coKitURLSession : XCTestCase + +@end + +@implementation coKitURLSession + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +- (void)testRequest{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + NSURLResponse *response = nil; + NSData *data = [[NSURLSession sharedSession] co_dataTaskWithURL:[NSURL URLWithString:@"https://raw.githubusercontent.com/DaveGamble/cJSON/master/tests/inputs/test1"] response:&response error:nil]; + + XCTAssert(response != nil); + XCTAssert(data.length > 0); + + NSDictionary *dict = [NSJSONSerialization co_JSONObjectWithData:data options:0 error:nil]; + + XCTAssert(dict.count > 0); + XCTAssert([(NSDictionary*)dict[@"glossary"] count] > 0); + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + +- (void)testRequest404{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + + NSURLResponse *response = nil; + NSData *data = [[NSURLSession sharedSession] co_dataTaskWithURL:[NSURL URLWithString:@"https://raw.githubusercontent.com/DaveGamble/cJSON/master/tests/inputs/test11111"] response:&response error:nil]; + + XCTAssert([(NSHTTPURLResponse*)response statusCode] == 404); + + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamplesTests/coKitUserDefaults.m b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitUserDefaults.m new file mode 100644 index 0000000..928d449 --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitUserDefaults.m @@ -0,0 +1,109 @@ +// +// coKitUserDefaults.m +// coKitExamplesTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + +@interface coKitUserDefaults : XCTestCase + +@end + +@implementation coKitUserDefaults + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +- (void)testSetObjects{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + [defaults co_setInteger:1000 forKey:@"int1"]; + + NSInteger val = [defaults integerForKey:@"int1"]; + XCTAssert(1000 == val); + + [defaults co_setBool:YES forKey:@"bool1"]; + BOOL val1 = [defaults boolForKey:@"bool1"]; + XCTAssert(val1 == YES); + + [defaults co_setDouble:10.0 forKey:@"double1"]; + double double1 = [defaults doubleForKey:@"double1"]; + XCTAssert(fabs(double1 - 10) <= 0.00001); + + [defaults co_setObject:@"hello world" forKey:@"string1"]; + NSString *string1 = [defaults objectForKey:@"string1"]; + XCTAssert([string1 isEqualToString:@"hello world"]); + + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + +- (void)testGetObjects{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + + co_launch(^{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + [defaults co_setInteger:1000 forKey:@"int1"]; + + NSInteger val = [defaults co_integerForKey:@"int1"]; + XCTAssert(1000 == val); + + [defaults co_setBool:YES forKey:@"bool1"]; + BOOL val1 = [defaults co_boolForKey:@"bool1"]; + XCTAssert(val1 == YES); + + [defaults co_setDouble:10.0 forKey:@"double1"]; + double double1 = [defaults co_doubleForKey:@"double1"]; + XCTAssert(fabs(double1 - 10) <= 0.00001); + + [defaults co_setObject:@"hello world" forKey:@"string1"]; + NSString *string1 = [defaults co_objectForKey:@"string1"]; + XCTAssert([string1 isEqualToString:@"hello world"]); + + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + +@end diff --git a/cokit/Examples/coKitExamples/coKitExamplesTests/coKitXMLParserTests.m b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitXMLParserTests.m new file mode 100644 index 0000000..8b9de6b --- /dev/null +++ b/cokit/Examples/coKitExamples/coKitExamplesTests/coKitXMLParserTests.m @@ -0,0 +1,87 @@ +// +// coKitXMLParserTests.m +// coKitExamplesTests +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + +@interface coKitXMLParserTests : XCTestCase + +@end + +@implementation coKitXMLParserTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +- (void)testXMLParse{ + XCTestExpectation *e = [self expectationWithDescription:@"test"]; + COCoroutine *parse_generator = [NSXMLParser co_parseContentsOfURL:[NSURL URLWithString:@"http://xxx.xml"]]; + co_launch(^{ + COXMLItem *item = nil; + int testsuitesCount = 0; + int testsuiteCount = 0; + int testcaseCount = 0; + while (1) { + item = [parse_generator next]; + if (item.itemType == COXMLItemDidStartElement) { + if ([item.elementName isEqualToString:@"testsuites"]) { + testsuitesCount++; + } + if ([item.elementName isEqualToString:@"testsuite"]) { + testsuiteCount++; + } + if ([item.elementName isEqualToString:@"testcase"]) { + testcaseCount++; + } + } + NSLog(@"%@", item); + if (item == nil || item.itemType == COXMLItemError || item.itemType == COXMLItemEnd) { + break; + } + } + + XCTAssert(testsuitesCount == 1); + XCTAssert(testsuiteCount == 4); + XCTAssert(testcaseCount == 12); + [e fulfill]; + }); + + [self waitForExpectations:@[e] timeout:1000]; +} + +@end diff --git a/cokit/Podfile b/cokit/Podfile new file mode 100644 index 0000000..62d5e4c --- /dev/null +++ b/cokit/Podfile @@ -0,0 +1,8 @@ +platform :ios, '8.0' + +target 'cokit' do + +pod 'coobjc', :path => '../' + + +end diff --git a/cokit/README.md b/cokit/README.md new file mode 100644 index 0000000..89cf905 --- /dev/null +++ b/cokit/README.md @@ -0,0 +1,345 @@ + +## 0x0 cokit +The cokit library provides a coroutine wrapper for the Foundation and UIKit system libraries, which relies on the coobjc library to provide a co-processed wrapper for time-consuming methods such as IO, networking, etc. + +## 0x1 Install cokit + +```plain +pod 'cokit' +pod 'coobjc' +``` + +## 0x2 Guide + +* NSArray + Coroutine + +```objc +co_launch(^{ + for (int i = 0; i < 100; i++) { + NSMutableArray *list = [[NSMutableArray alloc] init]; + for (int j = 0; j < 10; j++) { + [list addObject:@(rand() % 1000)]; + } + NSArray *tmpList = [list copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + + // async write to file + await([tmpList co_writeToFile:filePath atomically:YES]); + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + // async load from file + NSArray *resultList = await([[NSArray alloc] co_initWithContentsOfFile:filePath]); + + XCTAssert(resultList.count == list.count); + + for (int j = 0; j < 10; j++) { + XCTAssert([list[j] intValue] == [resultList[j] intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } +}); +``` + +* NSData + Coroutine + +```objc +co_launch(^{ + for (int i = 0; i < 10; i++) { + NSMutableString *originStr = [[NSMutableString alloc] init]; + for (int j = 0; j < 1024; j++) { + [originStr appendFormat:@"%c", 'a' + (rand() % 23)]; + } + + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + + + NSData *data = [originStr dataUsingEncoding:NSUTF8StringEncoding]; + + //async write to file + await([data co_writeToFile:filePath atomically:YES]); + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + //async load from file + NSData *resultData = await([[NSData alloc] co_initWithContentsOfFile:filePath]); + + XCTAssert(data.length == resultData.length); + + NSString *resultStr = [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding]; + + XCTAssert([resultStr isEqualToString:originStr]); + + } +}); +``` + +* NSXMLParser + Coroutine + +```c +COCoroutine *parse_generator = [NSXMLParser co_parseContentsOfURL:[NSURL URLWithString:@"http://xxx.xml"]]; +co_launch(^{ + COXMLItem *item = nil; + int testsuitesCount = 0; + int testsuiteCount = 0; + int testcaseCount = 0; + while (1) { + item = [parse_generator next]; + if (item.itemType == COXMLItemDidStartElement) { + if ([item.elementName isEqualToString:@"testsuites"]) { + testsuitesCount++; + } + if ([item.elementName isEqualToString:@"testsuite"]) { + testsuiteCount++; + } + if ([item.elementName isEqualToString:@"testcase"]) { + testcaseCount++; + } + } + NSLog(@"%@", item); + if (item == nil || item.itemType == COXMLItemError || item.itemType == COXMLItemEnd) { + break; + } + } + + XCTAssert(testsuitesCount == 1); + XCTAssert(testsuiteCount == 4); + XCTAssert(testcaseCount == 12); +}); +``` + + +* NSDictionary + Coroutine + +```c +co_launch(^{ + for (int i = 0; i < 101; i++) { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + for (int j = 0; j < 10; j++) { + [dict setValue:@(rand() % 1000) forKey:[NSString stringWithFormat:@"key_%d", j]]; + } + NSDictionary *tmpDict = [dict copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + await([tmpDict co_writeToFile:filePath atomically:YES]); + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSDictionary *resultDict = await([[NSDictionary alloc] co_initWithContentsOfFile:filePath]); + XCTAssert(resultDict.count == tmpDict.count); + + for (NSString *key in resultDict) { + id val1 = resultDict[key]; + id val2 = tmpDict[key]; + XCTAssert([val1 intValue] == [val2 intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } +}); +``` + +* NSFileManager + Coroutine + +```c +co_launch(^{ + for (int i = 0; i < 10; i++) { + NSString *dirName = [NSString stringWithFormat:@"dir_%d", i]; + NSString *dirPath = [[self tempPath] stringByAppendingPathComponent:dirName]; + BOOL ret = [await([[NSFileManager defaultManager] co_createDirectoryAtPath:dirPath withIntermediateDirectories:NO attributes:nil]) boolValue]; + + XCTAssert(ret == YES); + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:dirPath]); + + id retValue = nil; + id isDir = nil; + co_unpack(&retValue, &isDir) = await([[NSFileManager defaultManager] co_fileExistsAtPath:dirPath]); + + XCTAssert([retValue boolValue]); + XCTAssert([isDir boolValue]); + + await([[NSFileManager defaultManager] co_removeItemAtPath:dirPath]); + + XCTAssert(![[NSFileManager defaultManager] fileExistsAtPath:dirPath]); + + co_unpack(&retValue) = await([[NSFileManager defaultManager] co_fileExistsAtPath:dirPath]); + + XCTAssert(![retValue boolValue]); + } +}); +``` + +```c +co_launch(^{ + NSString *testJSONPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"json"]; + + NSData *data = await([NSData co_dataWithContentsOfFile:testJSONPath]); + + XCTAssert(data.length > 0); + + NSDictionary *dict = await([NSJSONSerialization co_JSONObjectWithData:data options:0]); + + XCTAssert([dict isKindOfClass:[NSDictionary class]]); + + NSDictionary *dict1 = dict[@"glossary"]; + XCTAssert(dict1.count > 0); + + NSDictionary *dict2 = dict1[@"GlossDiv"]; + XCTAssert(dict2.count > 0); + + NSDictionary *dict3 = dict2[@"GlossList"]; + XCTAssert(dict3.count > 0); + +}); +``` + +* NSKeyedArchieve + Coroutine + +```c +co_launch(^{ + for (int i = 0; i < 100; i++) { + NSMutableArray *list = [[NSMutableArray alloc] init]; + for (int j = 0; j < 10; j++) { + [list addObject:@(rand() % 1000)]; + } + NSArray *tmpList = [list copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + await([NSKeyedArchiver co_archiveRootObject:tmpList toFile:filePath]); + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSArray *resultList = await([NSKeyedUnarchiver co_unarchiveObjectWithFile:filePath]); + + XCTAssert(resultList.count == list.count); + + for (int j = 0; j < 10; j++) { + XCTAssert([list[j] intValue] == [resultList[j] intValue]); + } + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } + +}); +``` + +* NSString + Coroutine + +```c +co_launch(^{ + for (int i = 0; i < 101; i++) { + NSMutableString *mutlContent = [[NSMutableString alloc] init]; + for (int j = 0; j < 10; j++) { + [mutlContent appendFormat:@"%d_", rand()]; + } + NSString *tmpStr = [mutlContent copy]; + NSString *filePath = [[self tempPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"file_%d", i]]; + await([tmpStr co_writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding]); + + XCTAssert([[NSFileManager defaultManager] fileExistsAtPath:filePath]); + + NSString *retStr = nil; + + co_unpack(&retStr) = await([NSString co_stringWithContentsOfFile:filePath]); + + XCTAssert([retStr isEqualToString:tmpStr]); + + [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; + } +}); +``` + +* NSURLConnection + Coroutine + +```c +co_launch(^{ + NSURLResponse *response = nil; + NSData *data = nil; + co_unpack(&response, &data) = await([NSURLConnection co_sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://raw.githubusercontent.com/DaveGamble/cJSON/master/tests/inputs/test1"]]]); + + XCTAssert(response != nil); + XCTAssert(data.length > 0); + + NSDictionary *dict = await([NSJSONSerialization co_JSONObjectWithData:data options:0]); + + XCTAssert(dict.count > 0); + XCTAssert([(NSDictionary*)dict[@"glossary"] count] > 0); +}); +``` + +* NSURLSession + Coroutine + +```c +co_launch(^{ + NSURLResponse *response = nil; + NSData *data = nil; + co_unpack(&data, &response) = await([[NSURLSession sharedSession] co_dataTaskWithURL:[NSURL URLWithString:@"https://raw.githubusercontent.com/DaveGamble/cJSON/master/tests/inputs/test1"]]); + + XCTAssert(response != nil); + XCTAssert(data.length > 0); + + NSDictionary *dict = await([NSJSONSerialization co_JSONObjectWithData:data options:0]); + + XCTAssert(dict.count > 0); + XCTAssert([(NSDictionary*)dict[@"glossary"] count] > 0); +}); +``` + +* NSUserDefaults + Coroutine + +```plain +co_launch(^{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + await([defaults co_setInteger:1000 forKey:@"int1"]); + + NSInteger val = [defaults co_integerForKey:@"int1"]; + XCTAssert(1000 == val); + + await([defaults co_setBool:YES forKey:@"bool1"]); + BOOL val1 = [defaults co_boolForKey:@"bool1"]; + XCTAssert(val1 == YES); + + await([defaults co_setDouble:10.0 forKey:@"double1"]); + double double1 = [defaults co_doubleForKey:@"double1"]; + XCTAssert(fabs(double1 - 10) <= 0.00001); + + await([defaults co_setObject:@"hello world" forKey:@"string1"]); + NSString *string1 = await([defaults co_objectForKey:@"string1"]); + XCTAssert([string1 isEqualToString:@"hello world"]); + +}); +``` + +* UIAlertController+Coroutine + +```plain +co_launch(^{ + NSString *title = NSLocalizedString(@"A Short Title Is Best", nil); + NSString *message = NSLocalizedString(@"A message should be a short, complete sentence.", nil); + NSString *cancelButtonTitle = NSLocalizedString(@"Cancel", nil); + NSString *otherButtonTitleOne = NSLocalizedString(@"Choice One", nil); + NSString *otherButtonTitleTwo = NSLocalizedString(@"Choice Two", nil); + + UIAlertController *alertController = [UIAlertController co_alertWithTitle:title message:message cancelButtonTitle:cancelButtonTitle otherButtonTitles: otherButtonTitleOne, otherButtonTitleTwo, nil]; + + NSString *result = await([alertController co_presentFromController:self]); + + + NSLog(@"The %@ alert's action occured.", result); +}); +``` + +* UIImagePickerController+Coroutine + +```plain +co_launch(^{ + UIImagePickerController *controller = [[UIImagePickerController alloc] init]; + controller.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; + COImagePickerResult *result = await([controller co_presentFromController:self]); + if (result) { + self.imageView.image = result.originalImage; + } +}); +``` + + diff --git a/cokit/cokit.xcodeproj/project.pbxproj b/cokit/cokit.xcodeproj/project.pbxproj new file mode 100644 index 0000000..7244a28 --- /dev/null +++ b/cokit/cokit.xcodeproj/project.pbxproj @@ -0,0 +1,525 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1826DEA821F8487400E89A16 /* UIApplication+Coroutine.h in Sources */ = {isa = PBXBuildFile; fileRef = 1826DEA621F8487400E89A16 /* UIApplication+Coroutine.h */; }; + 1826DEA921F8487400E89A16 /* UIApplication+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 1826DEA721F8487400E89A16 /* UIApplication+Coroutine.m */; }; + 1826DEAA21F85E8900E89A16 /* UIApplication+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 1826DEA621F8487400E89A16 /* UIApplication+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183F724721C7BB7D0041C32B /* COKitCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = 183F724521C7BB7D0041C32B /* COKitCommon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183F724821C7BB7D0041C32B /* COKitCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F724621C7BB7D0041C32B /* COKitCommon.m */; }; + 183F724B21C7BF5F0041C32B /* NSArray+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 183F724921C7BF5F0041C32B /* NSArray+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183F724C21C7BF5F0041C32B /* NSArray+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F724A21C7BF5F0041C32B /* NSArray+Coroutine.m */; }; + 183F724F21C7C36C0041C32B /* NSBundle+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 183F724D21C7C36C0041C32B /* NSBundle+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183F725021C7C36C0041C32B /* NSBundle+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F724E21C7C36C0041C32B /* NSBundle+Coroutine.m */; }; + 183F725321C7C47F0041C32B /* NSData+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 183F725121C7C47F0041C32B /* NSData+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183F725421C7C47F0041C32B /* NSData+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F725221C7C47F0041C32B /* NSData+Coroutine.m */; }; + 183F725721C7C7890041C32B /* NSDictionary+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 183F725521C7C7890041C32B /* NSDictionary+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183F725821C7C7890041C32B /* NSDictionary+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F725621C7C7890041C32B /* NSDictionary+Coroutine.m */; }; + 183F725B21C7CD010041C32B /* NSFileManager+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 183F725921C7CD010041C32B /* NSFileManager+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183F725C21C7CD010041C32B /* NSFileManager+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F725A21C7CD010041C32B /* NSFileManager+Coroutine.m */; }; + 183F725F21C7CD3E0041C32B /* NSJSONSerialization+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 183F725D21C7CD3E0041C32B /* NSJSONSerialization+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183F726021C7CD3E0041C32B /* NSJSONSerialization+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F725E21C7CD3E0041C32B /* NSJSONSerialization+Coroutine.m */; }; + 183F726321C7CD560041C32B /* NSKeyedArchiver+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 183F726121C7CD560041C32B /* NSKeyedArchiver+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183F726421C7CD560041C32B /* NSKeyedArchiver+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F726221C7CD560041C32B /* NSKeyedArchiver+Coroutine.m */; }; + 183F726721C7CD8E0041C32B /* NSPropertyList+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 183F726521C7CD8E0041C32B /* NSPropertyList+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183F726821C7CD8E0041C32B /* NSPropertyList+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F726621C7CD8E0041C32B /* NSPropertyList+Coroutine.m */; }; + 183F726B21C7CDBB0041C32B /* NSString+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 183F726921C7CDBB0041C32B /* NSString+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183F726C21C7CDBB0041C32B /* NSString+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F726A21C7CDBB0041C32B /* NSString+Coroutine.m */; }; + 183F727321C7CE070041C32B /* NSURLConnection+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 183F727121C7CE070041C32B /* NSURLConnection+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183F727421C7CE070041C32B /* NSURLConnection+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F727221C7CE070041C32B /* NSURLConnection+Coroutine.m */; }; + 183F727721C7CE240041C32B /* NSUserDefaults+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 183F727521C7CE240041C32B /* NSUserDefaults+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183F727821C7CE240041C32B /* NSUserDefaults+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F727621C7CE240041C32B /* NSUserDefaults+Coroutine.m */; }; + 183F727B21C7CE3C0041C32B /* NSXMLParser+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 183F727921C7CE3C0041C32B /* NSXMLParser+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183F727C21C7CE3C0041C32B /* NSXMLParser+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F727A21C7CE3C0041C32B /* NSXMLParser+Coroutine.m */; }; + 183F728321C7CE690041C32B /* NSURLSession+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 183F728121C7CE690041C32B /* NSURLSession+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 183F728421C7CE690041C32B /* NSURLSession+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F728221C7CE690041C32B /* NSURLSession+Coroutine.m */; }; + 1888C63521E3423A0098055F /* UIImage+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 1888C63321E3423A0098055F /* UIImage+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1888C63621E3423A0098055F /* UIImage+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 1888C63421E3423A0098055F /* UIImage+Coroutine.m */; }; + 18C43A2E21CB88D800D75A9B /* UIAlertController+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 18C43A2C21CB88D800D75A9B /* UIAlertController+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18C43A2F21CB88D800D75A9B /* UIAlertController+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C43A2D21CB88D800D75A9B /* UIAlertController+Coroutine.m */; }; + 18C43A3221CB955B00D75A9B /* UIImagePickerController+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 18C43A3021CB955B00D75A9B /* UIImagePickerController+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18C43A3321CB955B00D75A9B /* UIImagePickerController+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C43A3121CB955B00D75A9B /* UIImagePickerController+Coroutine.m */; }; + 18C43A3A21CBA0AF00D75A9B /* UIVideoEditorController+Coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 18C43A3821CBA0AF00D75A9B /* UIVideoEditorController+Coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18C43A3B21CBA0AF00D75A9B /* UIVideoEditorController+Coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C43A3921CBA0AF00D75A9B /* UIVideoEditorController+Coroutine.m */; }; + A37DDF811E8A62DF00E11BD9 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A37DDF801E8A62DF00E11BD9 /* UIKit.framework */; }; + A37DDF831E8A62E400E11BD9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A37DDF821E8A62E400E11BD9 /* Foundation.framework */; }; + D85037D81B9C6D8400864DF0 /* cokit-Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = D85037D71B9C6D8400864DF0 /* cokit-Prefix.pch */; }; + D8B050571B9ED5EF004F67D6 /* cokit.h in Headers */ = {isa = PBXBuildFile; fileRef = D8B050551B9ED5EF004F67D6 /* cokit.h */; settings = {ATTRIBUTES = (Public, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 1826DEA621F8487400E89A16 /* UIApplication+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIApplication+Coroutine.h"; sourceTree = ""; }; + 1826DEA721F8487400E89A16 /* UIApplication+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIApplication+Coroutine.m"; sourceTree = ""; }; + 183F724521C7BB7D0041C32B /* COKitCommon.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = COKitCommon.h; sourceTree = ""; }; + 183F724621C7BB7D0041C32B /* COKitCommon.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = COKitCommon.m; sourceTree = ""; }; + 183F724921C7BF5F0041C32B /* NSArray+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSArray+Coroutine.h"; sourceTree = ""; }; + 183F724A21C7BF5F0041C32B /* NSArray+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Coroutine.m"; sourceTree = ""; }; + 183F724D21C7C36C0041C32B /* NSBundle+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSBundle+Coroutine.h"; sourceTree = ""; }; + 183F724E21C7C36C0041C32B /* NSBundle+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+Coroutine.m"; sourceTree = ""; }; + 183F725121C7C47F0041C32B /* NSData+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSData+Coroutine.h"; sourceTree = ""; }; + 183F725221C7C47F0041C32B /* NSData+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSData+Coroutine.m"; sourceTree = ""; }; + 183F725521C7C7890041C32B /* NSDictionary+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Coroutine.h"; sourceTree = ""; }; + 183F725621C7C7890041C32B /* NSDictionary+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+Coroutine.m"; sourceTree = ""; }; + 183F725921C7CD010041C32B /* NSFileManager+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSFileManager+Coroutine.h"; sourceTree = ""; }; + 183F725A21C7CD010041C32B /* NSFileManager+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSFileManager+Coroutine.m"; sourceTree = ""; }; + 183F725D21C7CD3E0041C32B /* NSJSONSerialization+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSJSONSerialization+Coroutine.h"; sourceTree = ""; }; + 183F725E21C7CD3E0041C32B /* NSJSONSerialization+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSJSONSerialization+Coroutine.m"; sourceTree = ""; }; + 183F726121C7CD560041C32B /* NSKeyedArchiver+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSKeyedArchiver+Coroutine.h"; sourceTree = ""; }; + 183F726221C7CD560041C32B /* NSKeyedArchiver+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSKeyedArchiver+Coroutine.m"; sourceTree = ""; }; + 183F726521C7CD8E0041C32B /* NSPropertyList+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSPropertyList+Coroutine.h"; sourceTree = ""; }; + 183F726621C7CD8E0041C32B /* NSPropertyList+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSPropertyList+Coroutine.m"; sourceTree = ""; }; + 183F726921C7CDBB0041C32B /* NSString+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSString+Coroutine.h"; sourceTree = ""; }; + 183F726A21C7CDBB0041C32B /* NSString+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSString+Coroutine.m"; sourceTree = ""; }; + 183F727121C7CE070041C32B /* NSURLConnection+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSURLConnection+Coroutine.h"; sourceTree = ""; }; + 183F727221C7CE070041C32B /* NSURLConnection+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSURLConnection+Coroutine.m"; sourceTree = ""; }; + 183F727521C7CE240041C32B /* NSUserDefaults+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSUserDefaults+Coroutine.h"; sourceTree = ""; }; + 183F727621C7CE240041C32B /* NSUserDefaults+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSUserDefaults+Coroutine.m"; sourceTree = ""; }; + 183F727921C7CE3C0041C32B /* NSXMLParser+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSXMLParser+Coroutine.h"; sourceTree = ""; }; + 183F727A21C7CE3C0041C32B /* NSXMLParser+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSXMLParser+Coroutine.m"; sourceTree = ""; }; + 183F728121C7CE690041C32B /* NSURLSession+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSURLSession+Coroutine.h"; sourceTree = ""; }; + 183F728221C7CE690041C32B /* NSURLSession+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSURLSession+Coroutine.m"; sourceTree = ""; }; + 1888C63321E3423A0098055F /* UIImage+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImage+Coroutine.h"; sourceTree = ""; }; + 1888C63421E3423A0098055F /* UIImage+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Coroutine.m"; sourceTree = ""; }; + 18C43A2C21CB88D800D75A9B /* UIAlertController+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIAlertController+Coroutine.h"; sourceTree = ""; }; + 18C43A2D21CB88D800D75A9B /* UIAlertController+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIAlertController+Coroutine.m"; sourceTree = ""; }; + 18C43A3021CB955B00D75A9B /* UIImagePickerController+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImagePickerController+Coroutine.h"; sourceTree = ""; }; + 18C43A3121CB955B00D75A9B /* UIImagePickerController+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImagePickerController+Coroutine.m"; sourceTree = ""; }; + 18C43A3821CBA0AF00D75A9B /* UIVideoEditorController+Coroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIVideoEditorController+Coroutine.h"; sourceTree = ""; }; + 18C43A3921CBA0AF00D75A9B /* UIVideoEditorController+Coroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIVideoEditorController+Coroutine.m"; sourceTree = ""; }; + 65890A9216C64A84EFCC64FC /* Pods-cokit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-cokit.debug.xcconfig"; path = "Pods/Target Support Files/Pods-cokit/Pods-cokit.debug.xcconfig"; sourceTree = ""; }; + 7357386444926A53E70FEE78 /* Pods-cokit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-cokit.release.xcconfig"; path = "Pods/Target Support Files/Pods-cokit/Pods-cokit.release.xcconfig"; sourceTree = ""; }; + A37DDF801E8A62DF00E11BD9 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + A37DDF821E8A62E400E11BD9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + D85037CF1B9C6D8400864DF0 /* cokit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework.static; includeInIndex = 0; path = cokit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D85037D61B9C6D8400864DF0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D85037D71B9C6D8400864DF0 /* cokit-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "cokit-Prefix.pch"; sourceTree = ""; }; + D8B050551B9ED5EF004F67D6 /* cokit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cokit.h; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D85037CA1B9C6D8400864DF0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A37DDF831E8A62E400E11BD9 /* Foundation.framework in Frameworks */, + A37DDF811E8A62DF00E11BD9 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 183F724221C7BB490041C32B /* common */ = { + isa = PBXGroup; + children = ( + 183F724521C7BB7D0041C32B /* COKitCommon.h */, + 183F724621C7BB7D0041C32B /* COKitCommon.m */, + ); + path = common; + sourceTree = ""; + }; + 183F724321C7BB490041C32B /* Foundation */ = { + isa = PBXGroup; + children = ( + 183F724921C7BF5F0041C32B /* NSArray+Coroutine.h */, + 183F724A21C7BF5F0041C32B /* NSArray+Coroutine.m */, + 183F724D21C7C36C0041C32B /* NSBundle+Coroutine.h */, + 183F724E21C7C36C0041C32B /* NSBundle+Coroutine.m */, + 183F725121C7C47F0041C32B /* NSData+Coroutine.h */, + 183F725221C7C47F0041C32B /* NSData+Coroutine.m */, + 183F725521C7C7890041C32B /* NSDictionary+Coroutine.h */, + 183F725621C7C7890041C32B /* NSDictionary+Coroutine.m */, + 183F725921C7CD010041C32B /* NSFileManager+Coroutine.h */, + 183F725A21C7CD010041C32B /* NSFileManager+Coroutine.m */, + 183F725D21C7CD3E0041C32B /* NSJSONSerialization+Coroutine.h */, + 183F725E21C7CD3E0041C32B /* NSJSONSerialization+Coroutine.m */, + 183F726121C7CD560041C32B /* NSKeyedArchiver+Coroutine.h */, + 183F726221C7CD560041C32B /* NSKeyedArchiver+Coroutine.m */, + 183F726521C7CD8E0041C32B /* NSPropertyList+Coroutine.h */, + 183F726621C7CD8E0041C32B /* NSPropertyList+Coroutine.m */, + 183F726921C7CDBB0041C32B /* NSString+Coroutine.h */, + 183F726A21C7CDBB0041C32B /* NSString+Coroutine.m */, + 183F727121C7CE070041C32B /* NSURLConnection+Coroutine.h */, + 183F727221C7CE070041C32B /* NSURLConnection+Coroutine.m */, + 183F727521C7CE240041C32B /* NSUserDefaults+Coroutine.h */, + 183F727621C7CE240041C32B /* NSUserDefaults+Coroutine.m */, + 183F727921C7CE3C0041C32B /* NSXMLParser+Coroutine.h */, + 183F727A21C7CE3C0041C32B /* NSXMLParser+Coroutine.m */, + 183F728121C7CE690041C32B /* NSURLSession+Coroutine.h */, + 183F728221C7CE690041C32B /* NSURLSession+Coroutine.m */, + ); + path = Foundation; + sourceTree = ""; + }; + 183F724421C7BB490041C32B /* UIKit */ = { + isa = PBXGroup; + children = ( + 18C43A2C21CB88D800D75A9B /* UIAlertController+Coroutine.h */, + 18C43A2D21CB88D800D75A9B /* UIAlertController+Coroutine.m */, + 18C43A3021CB955B00D75A9B /* UIImagePickerController+Coroutine.h */, + 18C43A3121CB955B00D75A9B /* UIImagePickerController+Coroutine.m */, + 18C43A3821CBA0AF00D75A9B /* UIVideoEditorController+Coroutine.h */, + 18C43A3921CBA0AF00D75A9B /* UIVideoEditorController+Coroutine.m */, + 1888C63321E3423A0098055F /* UIImage+Coroutine.h */, + 1888C63421E3423A0098055F /* UIImage+Coroutine.m */, + 1826DEA621F8487400E89A16 /* UIApplication+Coroutine.h */, + 1826DEA721F8487400E89A16 /* UIApplication+Coroutine.m */, + ); + path = UIKit; + sourceTree = ""; + }; + 8F2FE39BD123D2CCE2F531A0 /* Pods */ = { + isa = PBXGroup; + children = ( + 65890A9216C64A84EFCC64FC /* Pods-cokit.debug.xcconfig */, + 7357386444926A53E70FEE78 /* Pods-cokit.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + D85037C41B9C6D8400864DF0 = { + isa = PBXGroup; + children = ( + D85037D41B9C6D8400864DF0 /* cokit */, + D85037D11B9C6D8400864DF0 /* Frameworks */, + D85037D01B9C6D8400864DF0 /* Products */, + 8F2FE39BD123D2CCE2F531A0 /* Pods */, + ); + sourceTree = ""; + }; + D85037D01B9C6D8400864DF0 /* Products */ = { + isa = PBXGroup; + children = ( + D85037CF1B9C6D8400864DF0 /* cokit.framework */, + ); + name = Products; + sourceTree = ""; + }; + D85037D11B9C6D8400864DF0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + A37DDF821E8A62E400E11BD9 /* Foundation.framework */, + A37DDF801E8A62DF00E11BD9 /* UIKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D85037D41B9C6D8400864DF0 /* cokit */ = { + isa = PBXGroup; + children = ( + 183F724221C7BB490041C32B /* common */, + 183F724321C7BB490041C32B /* Foundation */, + 183F724421C7BB490041C32B /* UIKit */, + D8B050551B9ED5EF004F67D6 /* cokit.h */, + D85037D51B9C6D8400864DF0 /* Supporting Files */, + ); + path = cokit; + sourceTree = ""; + }; + D85037D51B9C6D8400864DF0 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + D85037D71B9C6D8400864DF0 /* cokit-Prefix.pch */, + D85037D61B9C6D8400864DF0 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D85037CB1B9C6D8400864DF0 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 183F726721C7CD8E0041C32B /* NSPropertyList+Coroutine.h in Headers */, + 183F724B21C7BF5F0041C32B /* NSArray+Coroutine.h in Headers */, + D8B050571B9ED5EF004F67D6 /* cokit.h in Headers */, + 183F727B21C7CE3C0041C32B /* NSXMLParser+Coroutine.h in Headers */, + 183F725321C7C47F0041C32B /* NSData+Coroutine.h in Headers */, + 183F726321C7CD560041C32B /* NSKeyedArchiver+Coroutine.h in Headers */, + 183F726B21C7CDBB0041C32B /* NSString+Coroutine.h in Headers */, + 183F725F21C7CD3E0041C32B /* NSJSONSerialization+Coroutine.h in Headers */, + 183F724F21C7C36C0041C32B /* NSBundle+Coroutine.h in Headers */, + 183F724721C7BB7D0041C32B /* COKitCommon.h in Headers */, + 183F727321C7CE070041C32B /* NSURLConnection+Coroutine.h in Headers */, + 18C43A3221CB955B00D75A9B /* UIImagePickerController+Coroutine.h in Headers */, + 18C43A3A21CBA0AF00D75A9B /* UIVideoEditorController+Coroutine.h in Headers */, + 1826DEAA21F85E8900E89A16 /* UIApplication+Coroutine.h in Headers */, + 18C43A2E21CB88D800D75A9B /* UIAlertController+Coroutine.h in Headers */, + 1888C63521E3423A0098055F /* UIImage+Coroutine.h in Headers */, + 183F725B21C7CD010041C32B /* NSFileManager+Coroutine.h in Headers */, + 183F725721C7C7890041C32B /* NSDictionary+Coroutine.h in Headers */, + 183F727721C7CE240041C32B /* NSUserDefaults+Coroutine.h in Headers */, + 183F728321C7CE690041C32B /* NSURLSession+Coroutine.h in Headers */, + D85037D81B9C6D8400864DF0 /* cokit-Prefix.pch in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D85037CE1B9C6D8400864DF0 /* cokit */ = { + isa = PBXNativeTarget; + buildConfigurationList = D85037E11B9C6D8500864DF0 /* Build configuration list for PBXNativeTarget "cokit" */; + buildPhases = ( + FD6602A7EE5C3E1F8FC2D07F /* [CP] Check Pods Manifest.lock */, + D85037C91B9C6D8400864DF0 /* Sources */, + D85037CA1B9C6D8400864DF0 /* Frameworks */, + D85037CB1B9C6D8400864DF0 /* Headers */, + D85037CC1B9C6D8400864DF0 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = cokit; + productName = cokit; + productReference = D85037CF1B9C6D8400864DF0 /* cokit.framework */; + productType = "com.apple.product-type.framework.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D85037C51B9C6D8400864DF0 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0640; + ORGANIZATIONNAME = "Alibaba lnc."; + TargetAttributes = { + D85037CE1B9C6D8400864DF0 = { + CreatedOnToolsVersion = 6.4; + }; + }; + }; + buildConfigurationList = D85037C81B9C6D8400864DF0 /* Build configuration list for PBXProject "cokit" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D85037C41B9C6D8400864DF0; + productRefGroup = D85037D01B9C6D8400864DF0 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D85037CE1B9C6D8400864DF0 /* cokit */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D85037CC1B9C6D8400864DF0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + FD6602A7EE5C3E1F8FC2D07F /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D85037C91B9C6D8400864DF0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 183F725C21C7CD010041C32B /* NSFileManager+Coroutine.m in Sources */, + 183F727C21C7CE3C0041C32B /* NSXMLParser+Coroutine.m in Sources */, + 183F725421C7C47F0041C32B /* NSData+Coroutine.m in Sources */, + 183F726C21C7CDBB0041C32B /* NSString+Coroutine.m in Sources */, + 18C43A3321CB955B00D75A9B /* UIImagePickerController+Coroutine.m in Sources */, + 183F725021C7C36C0041C32B /* NSBundle+Coroutine.m in Sources */, + 18C43A2F21CB88D800D75A9B /* UIAlertController+Coroutine.m in Sources */, + 1826DEA921F8487400E89A16 /* UIApplication+Coroutine.m in Sources */, + 183F725821C7C7890041C32B /* NSDictionary+Coroutine.m in Sources */, + 1888C63621E3423A0098055F /* UIImage+Coroutine.m in Sources */, + 183F726421C7CD560041C32B /* NSKeyedArchiver+Coroutine.m in Sources */, + 183F727821C7CE240041C32B /* NSUserDefaults+Coroutine.m in Sources */, + 183F724821C7BB7D0041C32B /* COKitCommon.m in Sources */, + 1826DEA821F8487400E89A16 /* UIApplication+Coroutine.h in Sources */, + 18C43A3B21CBA0AF00D75A9B /* UIVideoEditorController+Coroutine.m in Sources */, + 183F726021C7CD3E0041C32B /* NSJSONSerialization+Coroutine.m in Sources */, + 183F727421C7CE070041C32B /* NSURLConnection+Coroutine.m in Sources */, + 183F726821C7CD8E0041C32B /* NSPropertyList+Coroutine.m in Sources */, + 183F728421C7CE690041C32B /* NSURLSession+Coroutine.m in Sources */, + 183F724C21C7BF5F0041C32B /* NSArray+Coroutine.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D85037DF1B9C6D8500864DF0 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + }; + name = Debug; + }; + D85037E01B9C6D8500864DF0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MTL_ENABLE_DEBUG_INFO = NO; + }; + name = Release; + }; + D85037E21B9C6D8500864DF0 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 65890A9216C64A84EFCC64FC /* Pods-cokit.debug.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD)"; + CLANG_ENABLE_MODULES = NO; + CLANG_ENABLE_MODULE_DEBUGGING = NO; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + FRAMEWORK_VERSION = A; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "cokit/cokit-Prefix.pch"; + HEADER_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = cokit/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_CFLAGS = "$(inherited)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALID_ARCHS = "arm64 x86_64 i386 armv7"; + WRAPPER_EXTENSION = framework; + }; + name = Debug; + }; + D85037E31B9C6D8500864DF0 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7357386444926A53E70FEE78 /* Pods-cokit.release.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD)"; + CLANG_ENABLE_MODULES = NO; + CLANG_ENABLE_MODULE_DEBUGGING = NO; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + FRAMEWORK_VERSION = A; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "cokit/cokit-Prefix.pch"; + HEADER_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = cokit/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_CFLAGS = "$(inherited)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALID_ARCHS = "arm64 x86_64 i386 armv7"; + WRAPPER_EXTENSION = framework; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D85037C81B9C6D8400864DF0 /* Build configuration list for PBXProject "cokit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D85037DF1B9C6D8500864DF0 /* Debug */, + D85037E01B9C6D8500864DF0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D85037E11B9C6D8500864DF0 /* Build configuration list for PBXNativeTarget "cokit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D85037E21B9C6D8500864DF0 /* Debug */, + D85037E31B9C6D8500864DF0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D85037C51B9C6D8400864DF0 /* Project object */; +} diff --git a/cokit/cokit.xcodeproj/xcshareddata/xcschemes/cokit.xcscheme b/cokit/cokit.xcodeproj/xcshareddata/xcschemes/cokit.xcscheme new file mode 100644 index 0000000..a22a1bd --- /dev/null +++ b/cokit/cokit.xcodeproj/xcshareddata/xcschemes/cokit.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cokit/cokit/Foundation/NSArray+Coroutine.h b/cokit/cokit/Foundation/NSArray+Coroutine.h new file mode 100644 index 0000000..b22c492 --- /dev/null +++ b/cokit/cokit/Foundation/NSArray+Coroutine.h @@ -0,0 +1,214 @@ +// +// NSArray+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + +NS_ASSUME_NONNULL_BEGIN + + +@interface NSArray (COPromise) + + +/* Reads array stored in NSPropertyList format from the specified url. + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + NSArray *array = await([[NSArray alloc] async_initWithContentsOfURL:url]); + NSError *error = co_getError(); + if(error){ + NSLog(@"load from url error"); + } + }); +*/ +- (nullable COPromise*> *)async_initWithContentsOfURL:(NSURL *)url; + +/* Reads array stored in NSPropertyList format from the specified url. + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + NSArray *array = await([NSArray async_arrayWithContentsOfURL:url]); + NSError *error = co_getError(); + if(error){ + NSLog(@"load from url error"); + } + }); + */ ++ (nullable COPromise*> *)async_arrayWithContentsOfURL:(NSURL *)url; + +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + NSArray *array = await([NSArray async_arrayWithContentsOfFile:filePath]); + NSLog(@"%@", array); + }); + */ ++ (nullable COPromise*> *)async_arrayWithContentsOfFile:(NSString *)path; + +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + NSArray *array = await([[NSArray alloc] async_initWithContentsOfFile:filePath]); + NSLog(@"%@", array); + }); + */ +- (nullable COPromise*> *)async_initWithContentsOfFile:(NSString *)path; + +/* Serializes this instance to the specified URL in the NSPropertyList format (using NSPropertyListXMLFormat_v1_0). For other formats use NSPropertyListSerialization directly. */ +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + BOOL ret = await([array async_writeToURL:url] boolValue); + if(!ret){ + NSError *error = co_getError(); + if(error){ + NSLog("%@", error); + } + } + }); + */ +- (COPromise*)async_writeToURL:(NSURL *)url API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0)); + + +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + BOOL ret = await([array async_writeToFile:path atomically:YES] boolValue); + if(!ret){ + NSLog(@"write error"); + } + }); + */ +- (COPromise*)async_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile; + +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + BOOL ret = await([array async_writeToURL:url atomically:YES] boolValue); + if(!ret){ + NSLog(@"write error"); + } + }); + */ +- (COPromise*)async_writeToURL:(NSURL *)url atomically:(BOOL)atomically; + +@end + + + +@interface NSArray (Coroutine) + +/* Reads array stored in NSPropertyList format from the specified url. */ +- (nullable NSArray *)co_initWithContentsOfURL:(NSURL *)url error:(NSError **)error CO_ASYNC; +- (nullable NSArray *)co_initWithContentsOfURL:(NSURL *)url CO_ASYNC; + +/* Reads array stored in NSPropertyList format from the specified url. */ +/* The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSError *error = nil; + NSArray *array = [NSArray co_arrayWithContentsOfURL:url error:&error]; + if(error){ + NSLog(@"load from url error"); + } + }); + in the internal of co interface, it will await the async interface for you + */ ++ (nullable NSArray *)co_arrayWithContentsOfURL:(NSURL *)url error:(NSError **)error CO_ASYNC; + +/* The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSArray *array = [NSArray co_arrayWithContentsOfURL:url]; + NSLog(@"list: %@", array); + }); + in the internal of co interface, it will await the async interface for you + */ ++ (nullable NSArray *)co_arrayWithContentsOfURL:(NSURL *)url CO_ASYNC; + +/* The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSArray *array = [NSArray co_arrayWithContentsOfFile:path]; + NSLog(@"list: %@", array); + }); + in the internal of co interface, it will await the async interface for you + */ ++ (nullable NSArray *)co_arrayWithContentsOfFile:(NSString *)path CO_ASYNC; +/* The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSArray *array = [[NSArray alloc] co_initWithContentsOfFile:path]; + NSLog(@"list: %@", array); + }); + in the internal of co interface, it will await the async interface for you + */ +- (nullable NSArray *)co_initWithContentsOfFile:(NSString *)path CO_ASYNC; + +/* Serializes this instance to the specified URL in the NSPropertyList format (using NSPropertyListXMLFormat_v1_0). For other formats use NSPropertyListSerialization directly. */ +/* The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSError *error = nil; + BOOL ret = [array co_writeToURL:url error:&error]; + if(error){NSLog(@"error: %@", error);} + }); + in the internal of co interface, it will await the async interface for you + */ +- (BOOL)co_writeToURL:(NSURL *)url error:(NSError **)error CO_ASYNC API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0)); + +/* The coroutine wrap Interface that return value, usage: + co_launch(^{ + BOOL ret = [array co_writeToFile:path atomically:NO]; + if(!ret){NSLog(@"write error");} + }); + in the internal of co interface, it will await the async interface for you + */ +- (BOOL)co_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile CO_ASYNC; +/* The coroutine wrap Interface that return value, usage: + co_launch(^{ + BOOL ret = [array co_writeToURL:url atomically:NO]; + if(!ret){NSLog(@"write error");} + }); + in the internal of co interface, it will await the async interface for you + */ +- (BOOL)co_writeToURL:(NSURL *)url atomically:(BOOL)atomically CO_ASYNC; + +@end + +@interface NSMutableArray (COPromise) + ++ (nullable COPromise*> *)async_arrayWithContentsOfFile:(NSString *)path; ++ (nullable COPromise*> *)async_arrayWithContentsOfURL:(NSURL *)url; +- (nullable COPromise*> *)async_initWithContentsOfFile:(NSString *)path; +- (nullable COPromise*> *)async_initWithContentsOfURL:(NSURL *)url; + +@end + +@interface NSMutableArray (Coroutine) + ++ (nullable NSMutableArray *)co_arrayWithContentsOfFile:(NSString *)path CO_ASYNC; ++ (nullable NSMutableArray *)co_arrayWithContentsOfURL:(NSURL *)url CO_ASYNC; +- (nullable NSMutableArray *)co_initWithContentsOfFile:(NSString *)path CO_ASYNC; +- (nullable NSMutableArray *)co_initWithContentsOfURL:(NSURL *)url CO_ASYNC; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/cokit/cokit/Foundation/NSArray+Coroutine.m b/cokit/cokit/Foundation/NSArray+Coroutine.m new file mode 100644 index 0000000..bc1149e --- /dev/null +++ b/cokit/cokit/Foundation/NSArray+Coroutine.m @@ -0,0 +1,303 @@ +// +// NSArray+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "NSArray+Coroutine.h" +#import "COKitCommon.h" +#import + +@implementation NSArray (Coroutine) + ++ (NSArray *)co_arrayWithContentsOfURL:(NSURL *)url error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSArray *array = await([self async_arrayWithContentsOfURL:url]); + if (error) { + if (co_getError()) { + *error = co_getError(); + } + } + return array; + } + else{ + if (@available(iOS 11.0, *)) { + return [self arrayWithContentsOfURL:url error:error]; + } + return [self arrayWithContentsOfURL:url]; + } +} + ++ (NSArray *)co_arrayWithContentsOfURL:(NSURL *)url{ + return [self co_arrayWithContentsOfURL:url error:nil]; +} + ++ (NSArray *)co_arrayWithContentsOfFile:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + NSArray *array = await([self async_arrayWithContentsOfFile:path]); + return array; + } + else{ + return [self arrayWithContentsOfFile:path]; + } +} + +- (NSArray *)co_initWithContentsOfURL:(NSURL *)url error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSArray *array = await([self async_initWithContentsOfURL:url]); + if (error) { + if (co_getError()) { + *error = co_getError(); + } + } + return array; + } + else{ + if (@available(iOS 11.0, *)) { + return [self initWithContentsOfURL:url error:error]; + } + return [self initWithContentsOfURL:url]; + } +} + +- (NSArray *)co_initWithContentsOfURL:(NSURL *)url{ + return [self co_initWithContentsOfURL:url error:nil]; +} + +- (NSArray *)co_initWithContentsOfFile:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + NSArray *array = await([self async_initWithContentsOfFile:path]); + return array; + } + else{ + return [self initWithContentsOfFile:path]; + } +} + +- (BOOL)co_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile{ + if ([COCoroutine currentCoroutine]) { + return [await([self async_writeToFile:path atomically:useAuxiliaryFile]) boolValue]; + } + else{ + return [self writeToFile:path atomically:useAuxiliaryFile]; + } +} + +- (BOOL)co_writeToURL:(NSURL *)url error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_writeToURL:url]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self writeToURL:url error:error]; + } +} + +- (BOOL)co_writeToURL:(NSURL *)url atomically:(BOOL)atomically{ + if ([COCoroutine currentCoroutine]) { + return [await([self async_writeToURL:url atomically:atomically]) boolValue]; + } + else{ + return [self writeToURL:url atomically:atomically]; + } +} + +@end + + +@implementation NSArray (COPromise) + ++ (COPromise *)async_arrayWithContentsOfURL:(NSURL *)url{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + if (@available(iOS 11.0, *)) { + NSError *error = nil; + NSArray *list = [self arrayWithContentsOfURL:url error:&error]; + if (error) { + reject(error); + } + else{ + resolve(list); + } + } + else{ + NSArray *list = [self arrayWithContentsOfURL:url]; + resolve(list); + } + }); + }]; +} + ++ (COPromise *)async_arrayWithContentsOfFile:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSArray *list = [self arrayWithContentsOfFile:path]; + resolve(list); + }); + }]; +} + +- (COPromise *)async_initWithContentsOfURL:(NSURL *)url{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSError *error = nil; + if (@available(iOS 11.0, *)) { + NSArray *list = [self initWithContentsOfURL:url error:&error]; + if (error) { + reject(error); + } + else{ + resolve(list); + } + } + else{ + NSArray *list = [self initWithContentsOfURL:url]; + resolve(list); + } + }); + }]; +} + +- (COPromise *)async_initWithContentsOfFile:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSArray *list = [self initWithContentsOfFile:path]; + resolve(list); + }); + }]; +} + +- (COPromise *)async_writeToURL:(NSURL *)url{ + COPromise *promise = [COPromise promise]; + dispatch_async([COKitCommon io_write_queue], ^{ + NSError *error = nil; + BOOL ret = [self writeToURL:url error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + }); + return promise; +} + +- (COPromise *)async_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile{ + COPromise *promise = [COPromise promise]; + dispatch_async([COKitCommon io_write_queue], ^{ + BOOL ret = [self writeToFile:path atomically:useAuxiliaryFile]; + [promise fulfill:@(ret)]; + }); + return promise; +} + +- (COPromise *)async_writeToURL:(NSURL *)url atomically:(BOOL)atomically{ + COPromise *promise = [COPromise promise]; + dispatch_async([COKitCommon io_write_queue], ^{ + BOOL ret = [self writeToURL:url atomically:atomically]; + [promise fulfill:@(ret)]; + }); + return promise; +} + +@end + +@implementation NSMutableArray (Coroutine) + ++ (NSMutableArray *)co_arrayWithContentsOfFile:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return await([self async_arrayWithContentsOfFile:path]); + } + else{ + return [self arrayWithContentsOfFile:path]; + } +} + ++ (NSMutableArray *)co_arrayWithContentsOfURL:(NSURL *)url{ + if ([COCoroutine currentCoroutine]) { + return await([self async_arrayWithContentsOfURL:url]); + } + else{ + return [self arrayWithContentsOfURL:url]; + } +} + +- (NSMutableArray *)co_initWithContentsOfFile:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return await([self async_initWithContentsOfFile:path]); + } + else{ + return [self initWithContentsOfFile:path]; + } +} + +- (NSMutableArray *)co_initWithContentsOfURL:(NSURL *)url{ + if ([COCoroutine currentCoroutine]) { + return await([self async_initWithContentsOfURL:url]); + } + else{ + return [self initWithContentsOfURL:url]; + } +} + +@end + +@implementation NSMutableArray (COPromise) + ++ (COPromise *)async_arrayWithContentsOfFile:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSArray *list = [self arrayWithContentsOfFile:path]; + resolve(list); + }); + }]; +} + ++ (COPromise *)async_arrayWithContentsOfURL:(NSURL *)url{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSArray *list = [self arrayWithContentsOfURL:url]; + resolve(list); + }); + }]; +} + +- (COPromise *)async_initWithContentsOfFile:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSArray *list = [self initWithContentsOfFile:path]; + resolve(list); + }); + }]; +} + +- (COPromise *)async_initWithContentsOfURL:(NSURL *)url{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSArray *list = [self initWithContentsOfURL:url]; + resolve(list); + }); + }]; +} + +@end diff --git a/cokit/cokit/Foundation/NSBundle+Coroutine.h b/cokit/cokit/Foundation/NSBundle+Coroutine.h new file mode 100644 index 0000000..de6c2e4 --- /dev/null +++ b/cokit/cokit/Foundation/NSBundle+Coroutine.h @@ -0,0 +1,52 @@ +// +// NSBundle+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + +@interface NSBundle (COPromise) + +// the coroutine wrap of loadAndReturnError method +// usage: +//co_launch(^{ +// BOOL ret = [await([bundle async_load]) boolValue]; +// if(!ret){ +// NSError *error = co_getError(); +// NSLog(@"load error: %@", error); +// } +//}); +- (COPromise*)async_load; + +@end + +@interface NSBundle (Coroutine) + +// the coroutine wrap of loadAndReturnError method +// usage: +//co_launch(^{ +// NSError *error = nil; +// BOOL ret = [bundle co_loadAndReturnError:&error]; +// if(!ret){ +// +// NSLog(@"load error: %@", error); +// } +//}); +- (BOOL)co_loadAndReturnError:(NSError **)error CO_ASYNC; + +@end diff --git a/cokit/cokit/Foundation/NSBundle+Coroutine.m b/cokit/cokit/Foundation/NSBundle+Coroutine.m new file mode 100644 index 0000000..e83f84c --- /dev/null +++ b/cokit/cokit/Foundation/NSBundle+Coroutine.m @@ -0,0 +1,62 @@ +// +// NSBundle+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "NSBundle+Coroutine.h" +#import "COKitCommon.h" +#import + +@implementation NSBundle (COPromise) + +- (COPromise *)async_load{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSError *error = nil; + BOOL ret = [self loadAndReturnError:&error]; + if (error) { + reject(error); + } + else{ + resolve(@(ret)); + } + }); + }]; +} + +@end + +@implementation NSBundle (Coroutine) + +- (BOOL)co_loadAndReturnError:(NSError **)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_load]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self loadAndReturnError:error]; + } +} + +@end diff --git a/cokit/cokit/Foundation/NSData+Coroutine.h b/cokit/cokit/Foundation/NSData+Coroutine.h new file mode 100644 index 0000000..f4e4656 --- /dev/null +++ b/cokit/cokit/Foundation/NSData+Coroutine.h @@ -0,0 +1,300 @@ +// +// NSData+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + +@interface NSData (COPromise) + +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + BOOL ret = [await([data async_writeToFile:path atomically:YES]) boolValue]; + if(!ret){ + NSLog(@"write to file error"); + } + }); + */ +- (COPromise*)async_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile; +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + BOOL ret = [await([data async_writeToURL:url atomically:YES]) boolValue]; + if(!ret){ + NSLog(@"write to url error"); + } + }); + */ +- (COPromise*)async_writeToURL:(NSURL *)url atomically:(BOOL)atomically; // the atomically flag is ignored if the url is not of a type the supports atomic writes + +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + BOOL ret = [await([data async_writeToFile:path options:0]) boolValue]; + if(!ret){ + NSLog(@"write to file error %@", co_getError()); + } + }); + */ +- (COPromise*)async_writeToFile:(NSString *)path options:(NSDataWritingOptions)writeOptionsMask; +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + BOOL ret = [await([data async_writeToURL:url options:0]) boolValue]; + if(!ret){ + NSLog(@"write to url error %@", co_getError()); + } + }); + */ +- (COPromise*)async_writeToURL:(NSURL *)url options:(NSDataWritingOptions)writeOptionsMask; + + +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + NSData* data = await([NSData async_dataWithContentsOfFile:path options:0]); + if(!data && co_getError()){ + NSLog(@"load error %@", co_getError()); + } + }); + */ ++ (COPromise*)async_dataWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask; +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + NSData* data = await([NSData async_dataWithContentsOfURL:url options:0]); + if(!data && co_getError()){ + NSLog(@"load error %@", co_getError()); + } + }); + */ ++ (COPromise*)async_dataWithContentsOfURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask; + +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + NSData* data = await([NSData async_dataWithContentsOfFile:path]); + if(!data){ + NSLog(@"load error"); + } + }); + */ ++ (COPromise*)async_dataWithContentsOfFile:(NSString *)path; +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + NSData* data = await([NSData async_dataWithContentsOfURL:url]); + if(!data){ + NSLog(@"load error"); + } + }); + */ ++ (COPromise*)async_dataWithContentsOfURL:(NSURL *)url; + +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + NSData* data = await([[NSData alloc] async_initWithContentsOfFile:path options:0]); + if(!data){ + NSLog(@"load error: %@", co_getError()); + } + }); + */ +- (COPromise*)async_initWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask; +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + NSData* data = await([[NSData alloc] async_initWithContentsOfURL:url options:0]); + if(!data){ + NSLog(@"load error: %@", co_getError()); + } + }); + */ +- (COPromise*)async_initWithContentsOfURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask; +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + NSData* data = await([[NSData alloc] async_initWithContentsOfFile:path]); + if(!data){ + NSLog(@"load error"); + } + }); + */ +- (COPromise*)async_initWithContentsOfFile:(NSString *)path; + +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + NSData* data = await([[NSData alloc] async_initWithContentsOfURL:url]); + if(!data){ + NSLog(@"load error"); + } + }); + */ +- (COPromise*)async_initWithContentsOfURL:(NSURL *)url; + + +@end + +@interface NSData (Coroutine) + +/* + The coroutine wrap Interface that return value, usage: + co_launch(^{ + BOOL ret = [data co_writeToFile:path atomically:YES]; + if(!ret){ + NSLog(@"write to file error"); + } + }); + */ +- (BOOL)co_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile CO_ASYNC; +/* + The coroutine wrap Interface that return value, usage: + co_launch(^{ + BOOL ret = [data co_writeToURL:url atomically:YES]; + if(!ret){ + NSLog(@"write to file error"); + } + }); + */ +- (BOOL)co_writeToURL:(NSURL *)url atomically:(BOOL)atomically CO_ASYNC; // the atomically flag is ignored if the url is not of a type the supports atomic writes + +/* + The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSError *error = nil; + BOOL ret = [data co_writeToFile:path options:0 error:&error]; + if(!ret){ + NSLog(@"write to file error %@", error); + } + }); + */ +- (BOOL)co_writeToFile:(NSString *)path options:(NSDataWritingOptions)writeOptionsMask error:(NSError **)errorPtr CO_ASYNC; +/* + The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSError *error = nil; + BOOL ret = [data co_writeToURL:url options:0 error:&error]; + if(!ret){ + NSLog(@"write to file error %@", error); + } + }); + */ +- (BOOL)co_writeToURL:(NSURL *)url options:(NSDataWritingOptions)writeOptionsMask error:(NSError **)errorPtr CO_ASYNC; + +/* + The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSError *error = nil; + NSData* data = [NSData co_dataWithContentsOfFile:path options:0 error:&error]; + if(!data){ + NSLog(@"load error: %@", error); + } + }); + */ ++ (NSData*)co_dataWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask error:(NSError **)errorPtr CO_ASYNC; +/* + The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSError *error = nil; + NSData* data = [NSData co_dataWithContentsOfURL:url options:0 error:&error]; + if(!data){ + NSLog(@"load error: %@", error); + } + }); + */ ++ (NSData*)co_dataWithContentsOfURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask error:(NSError **)errorPtr CO_ASYNC; +/* + The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSData* data = [NSData co_dataWithContentsOfFile:path]; + if(!data){ + NSLog(@"load error"); + } + }); + */ ++ (NSData*)co_dataWithContentsOfFile:(NSString *)path CO_ASYNC; +/* + The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSData* data = [NSData co_dataWithContentsOfURL:url]; + if(!data){ + NSLog(@"load error"); + } + }); + */ ++ (NSData*)co_dataWithContentsOfURL:(NSURL *)url CO_ASYNC; + +/* + The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSError *error = nil; + NSData* data = [[NSData alloc] co_initWithContentsOfFile:path options:0 error:&error]; + if(!data){ + NSLog(@"load error: %@", error); + } + }); + */ +- (NSData*)co_initWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask error:(NSError **)errorPtr CO_ASYNC; +/* + The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSError *error = nil; + NSData* data = [[NSData alloc] co_initWithContentsOfURL:url options:0 error:&error]; + if(!data){ + NSLog(@"load error: %@", error); + } + }); + */ +- (NSData*)co_initWithContentsOfURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask error:(NSError **)errorPtr CO_ASYNC; +/* + The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSData* data = [[NSData alloc] co_initWithContentsOfFile:path]; + if(!data){ + NSLog(@"load error"); + } + }); + */ +- (NSData*)co_initWithContentsOfFile:(NSString *)path CO_ASYNC; +/* + The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSData* data = [[NSData alloc] co_initWithContentsOfURL:url]; + if(!data){ + NSLog(@"load error"); + } + }); + */ +- (NSData*)co_initWithContentsOfURL:(NSURL *)url CO_ASYNC; + + +@end diff --git a/cokit/cokit/Foundation/NSData+Coroutine.m b/cokit/cokit/Foundation/NSData+Coroutine.m new file mode 100644 index 0000000..b433688 --- /dev/null +++ b/cokit/cokit/Foundation/NSData+Coroutine.m @@ -0,0 +1,304 @@ +// +// NSData+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "NSData+Coroutine.h" +#import "COKitCommon.h" + +@implementation NSData (Coroutine) + +- (BOOL)co_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile{ + if ([COCoroutine currentCoroutine]) { + return [await([self async_writeToFile:path atomically:useAuxiliaryFile]) boolValue]; + } + return [self writeToFile:path atomically:useAuxiliaryFile]; +} + +- (BOOL)co_writeToFile:(NSString *)path options:(NSDataWritingOptions)writeOptionsMask error:(NSError *__autoreleasing *)errorPtr{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_writeToFile:path options:writeOptionsMask]) boolValue]; + if (errorPtr) { + if (co_getError()) { + *errorPtr = co_getError(); + } + else{ + *errorPtr = nil; + } + } + return ret; + } + return [self writeToFile:path atomically:writeOptionsMask]; +} + +- (BOOL)co_writeToURL:(NSURL *)url atomically:(BOOL)atomically{ + if ([COCoroutine currentCoroutine]) { + return [await([self async_writeToURL:url atomically:atomically]) boolValue]; + } + return [self writeToURL:url atomically:atomically]; +} + +- (BOOL)co_writeToURL:(NSURL *)url options:(NSDataWritingOptions)writeOptionsMask error:(NSError **)errorPtr{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_writeToURL:url options:writeOptionsMask]) boolValue]; + if (errorPtr) { + if (co_getError()) { + *errorPtr = co_getError(); + } + else{ + *errorPtr = nil; + } + } + return ret; + } + return [self writeToURL:url options:writeOptionsMask error:errorPtr]; +} + ++ (NSData *)co_dataWithContentsOfURL:(NSURL *)url{ + if ([COCoroutine currentCoroutine]) { + return await([self async_dataWithContentsOfURL:url]); + } + return [self dataWithContentsOfURL:url]; +} + ++ (NSData *)co_dataWithContentsOfFile:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return await([self async_dataWithContentsOfFile:path]); + } + return [self dataWithContentsOfFile:path]; +} + ++ (NSData *)co_dataWithContentsOfURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask error:(NSError **)errorPtr{ + if ([COCoroutine currentCoroutine]) { + NSData *data = await([self async_dataWithContentsOfURL:url options:readOptionsMask]); + if (errorPtr) { + if (co_getError()) { + *errorPtr = co_getError(); + } + else{ + *errorPtr = nil; + } + } + return data; + } + return [self dataWithContentsOfURL:url options:readOptionsMask error:errorPtr]; +} + ++ (NSData *)co_dataWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask error:(NSError *__autoreleasing *)errorPtr{ + if ([COCoroutine currentCoroutine]) { + NSData *data = await([self async_dataWithContentsOfFile:path options:readOptionsMask]); + if (errorPtr) { + if (co_getError()) { + *errorPtr = co_getError(); + } + else{ + *errorPtr = nil; + } + } + return data; + } + return [self dataWithContentsOfFile:path options:readOptionsMask error:errorPtr]; +} + +- (NSData *)co_initWithContentsOfURL:(NSURL *)url{ + if ([COCoroutine currentCoroutine]) { + return await([self async_initWithContentsOfURL:url]); + } + return [self initWithContentsOfURL:url]; +} + +- (NSData *)co_initWithContentsOfFile:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return await([self async_initWithContentsOfFile:path]); + } + return [self initWithContentsOfFile:path]; +} + +- (NSData *)co_initWithContentsOfURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask error:(NSError *__autoreleasing *)errorPtr{ + if ([COCoroutine currentCoroutine]) { + NSData *data = await([self async_initWithContentsOfURL:url options:readOptionsMask]); + if (errorPtr) { + if (co_getError()) { + *errorPtr = co_getError(); + } + else{ + *errorPtr = nil; + } + } + return data; + } + return [self initWithContentsOfURL:url options:readOptionsMask error:errorPtr]; +} + +- (NSData *)co_initWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask error:(NSError *__autoreleasing *)errorPtr{ + if ([COCoroutine currentCoroutine]) { + NSData *data = await([self async_initWithContentsOfFile:path options:readOptionsMask]); + if (errorPtr) { + if (co_getError()) { + *errorPtr = co_getError(); + } + else{ + *errorPtr = nil; + } + } + return data; + } + return [self initWithContentsOfFile:path options:readOptionsMask error:errorPtr]; +} + +@end + +@implementation NSData (COPromise) + +- (COPromise*)async_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile{ + COPromise *promise = [COPromise promise]; + dispatch_async([COKitCommon io_write_queue], ^{ + BOOL ret = [self writeToFile:path atomically:useAuxiliaryFile]; + [promise fulfill:@(ret)]; + }); + return promise; +} +- (COPromise*)async_writeToURL:(NSURL *)url atomically:(BOOL)atomically // the atomically flag is ignored if the url is not of a type the supports atomic writes +{ + COPromise *promise = [COPromise promise]; + dispatch_async([COKitCommon io_write_queue], ^{ + BOOL ret = [self writeToURL:url atomically:atomically]; + [promise fulfill:@(ret)]; + }); + return promise; +} +- (COPromise*)async_writeToFile:(NSString *)path options:(NSDataWritingOptions)writeOptionsMask{ + COPromise *promise = [COPromise promise]; + dispatch_async([COKitCommon io_write_queue], ^{ + NSError *error = nil; + BOOL ret = [self writeToFile:path options:writeOptionsMask error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + }); + return promise; +} +- (COPromise*)async_writeToURL:(NSURL *)url options:(NSDataWritingOptions)writeOptionsMask{ + COPromise *promise = [COPromise promise]; + dispatch_async([COKitCommon io_write_queue], ^{ + NSError *error = nil; + BOOL ret = [self writeToURL:url options:writeOptionsMask error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + }); + return promise; +} + + ++ (COPromise*)async_dataWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSError *error = nil; + NSData *data = [self dataWithContentsOfFile:path options:readOptionsMask error:&error]; + if (error) { + reject(error); + } + else{ + resolve(data); + } + }); + }]; +} ++ (COPromise*)async_dataWithContentsOfURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSError *error = nil; + NSData *data = [self dataWithContentsOfURL:url options:readOptionsMask error:&error]; + if (error) { + reject(error); + } + else{ + resolve(data); + } + }); + }]; +} ++ (COPromise*)async_dataWithContentsOfFile:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSData *data = [self dataWithContentsOfFile:path]; + resolve(data); + }); + }]; +} ++ (COPromise*)async_dataWithContentsOfURL:(NSURL *)url{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSData *data = [self dataWithContentsOfURL:url]; + resolve(data); + }); + }]; +} + + +- (COPromise*)async_initWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSError *error = nil; + NSData *data = [self initWithContentsOfFile:path options:readOptionsMask error:&error]; + if (error) { + reject(error); + } + else{ + resolve(data); + } + }); + }]; +} +- (COPromise*)async_initWithContentsOfURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSError *error = nil; + NSData *data = [self initWithContentsOfURL:url options:readOptionsMask error:&error]; + if (error) { + reject(error); + } + else{ + resolve(data); + } + }); + }]; +} +- (COPromise*)async_initWithContentsOfFile:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSData *data = [self initWithContentsOfFile:path]; + resolve(data); + }); + }]; +} +- (COPromise*)async_initWithContentsOfURL:(NSURL *)url{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSData *data = [self initWithContentsOfURL:url]; + resolve(data); + }); + }]; +} + +@end diff --git a/cokit/cokit/Foundation/NSDictionary+Coroutine.h b/cokit/cokit/Foundation/NSDictionary+Coroutine.h new file mode 100644 index 0000000..0fd4e65 --- /dev/null +++ b/cokit/cokit/Foundation/NSDictionary+Coroutine.h @@ -0,0 +1,119 @@ +// +// NSDictionary+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + +NS_ASSUME_NONNULL_BEGIN + + +@interface NSDictionary (COPromise) + +/* Serializes this instance to the specified URL in the NSPropertyList format (using NSPropertyListXMLFormat_v1_0). For other formats use NSPropertyListSerialization directly. */ + +/* +The Async Interface that return COPromise, usage: +api return promise can use with co_launch and await, like this: +co_launch(^{ + BOOL ret = [await([dict async_writeToURL:url]) boolValue]; + if(!ret){ + NSLog(@"write to url error, %@", co_getError()); +} +}); +*/ +- (COPromise*)async_writeToURL:(NSURL *)url API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0)); + +- (COPromise*)async_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile; +- (COPromise*)async_writeToURL:(NSURL *)url atomically:(BOOL)atomically; // the atomically flag is ignored if url of a type that cannot be written atomically. + +/* + The Async Interface that return COPromise, usage: + api return promise can use with co_launch and await, like this: + co_launch(^{ + NSDictionary* dict = await([NSDictionary async_dictionaryWithContentsOfFile:path]); + NSDictionary* dict1 = await([NSDictionary async_dictionaryWithContentsOfURL:url]); + NSDictionary* dict2 = await([[NSDictionary alloc] async_initWithContentsOfFile:path]); + NSDictionary* dict3 = await([[NSDictionary alloc] async_initWithContentsOfURL:url]); + }); + */ ++ (COPromise*> *)async_dictionaryWithContentsOfFile:(NSString *)path; ++ (COPromise*> *)async_dictionaryWithContentsOfURL:(NSURL *)url; +- (COPromise*> *)async_initWithContentsOfFile:(NSString *)path; +- (COPromise*> *)async_initWithContentsOfURL:(NSURL *)url; + + +@end + +@interface NSDictionary (Coroutine) + + +/* + The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSError *error = nil; + BOOL ret = [dict co_writeToURL:url error:&error]; + if(!ret){ + NSLog(@"write error: %@", error); + } + }); + */ + +/* Serializes this instance to the specified URL in the NSPropertyList format (using NSPropertyListXMLFormat_v1_0). For other formats use NSPropertyListSerialization directly. */ + +- (BOOL)co_writeToURL:(NSURL *)url error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0)); + +- (BOOL)co_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile CO_ASYNC; +- (BOOL)co_writeToURL:(NSURL *)url atomically:(BOOL)atomically CO_ASYNC; // the atomically flag is ignored if url of a type that cannot be written atomically. + + +/* + The coroutine wrap Interface that return value, usage: + co_launch(^{ + NSDictionary *dict = [NSDictionary co_dictionaryWithContentsOfFile:path]; + NSLog(@"dict: %@", dict); + }); + */ ++ (NSDictionary *)co_dictionaryWithContentsOfFile:(NSString *)path CO_ASYNC; ++ (NSDictionary *)co_dictionaryWithContentsOfURL:(NSURL *)url CO_ASYNC; +- (NSDictionary *)co_initWithContentsOfFile:(NSString *)path CO_ASYNC; +- (NSDictionary *)co_initWithContentsOfURL:(NSURL *)url CO_ASYNC; + + + +@end + +@interface NSMutableDictionary (COPromise) + ++ (COPromise*> *)async_dictionaryWithContentsOfFile:(NSString *)path; ++ (COPromise*> *)async_dictionaryWithContentsOfURL:(NSURL *)url; +- (COPromise*> *)async_initWithContentsOfFile:(NSString *)path; +- (COPromise*> *)async_initWithContentsOfURL:(NSURL *)url; + +@end + +@interface NSMutableDictionary (Coroutine) + ++ (NSMutableDictionary *)co_dictionaryWithContentsOfFile:(NSString *)path CO_ASYNC; ++ (NSMutableDictionary *)co_dictionaryWithContentsOfURL:(NSURL *)url CO_ASYNC; +- (NSMutableDictionary *)co_initWithContentsOfFile:(NSString *)path CO_ASYNC; +- (NSMutableDictionary *)co_initWithContentsOfURL:(NSURL *)url CO_ASYNC; + +@end + +NS_ASSUME_NONNULL_END diff --git a/cokit/cokit/Foundation/NSDictionary+Coroutine.m b/cokit/cokit/Foundation/NSDictionary+Coroutine.m new file mode 100644 index 0000000..f3b7497 --- /dev/null +++ b/cokit/cokit/Foundation/NSDictionary+Coroutine.m @@ -0,0 +1,266 @@ +// +// NSDictionary+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "NSDictionary+Coroutine.h" +#import "COKitCommon.h" + +@implementation NSDictionary (COPromise) + +/* Serializes this instance to the specified URL in the NSPropertyList format (using NSPropertyListXMLFormat_v1_0). For other formats use NSPropertyListSerialization directly. */ +- (COPromise*)async_writeToURL:(NSURL *)url API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0)){ + COPromise *promise = [COPromise promise]; + dispatch_async([COKitCommon io_write_queue], ^{ + NSError *error = nil; + BOOL ret = [self writeToURL:url error:&error]; + if(error){ + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + }); + return promise; +} + ++ (COPromise *)async_dictionaryWithContentsOfURL:(NSURL *)url{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSDictionary *dict = [self dictionaryWithContentsOfURL:url]; + resolve(dict); + }); + }]; +} ++ (COPromise *)async_dictionaryWithContentsOfFile:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSDictionary *dict = [self dictionaryWithContentsOfFile:path]; + resolve(dict); + }); + }]; +} + +- (COPromise *)async_initWithContentsOfFile:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSDictionary *dict = [self initWithContentsOfFile:path]; + resolve(dict); + }); + }]; +} + +- (COPromise *)async_initWithContentsOfURL:(NSURL *)url{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + if ([self respondsToSelector:@selector(initWithContentsOfURL:error:)]) { + NSError *error = nil; + if (@available(iOS 11.0, *)) { + NSDictionary *dict = [self initWithContentsOfURL:url error:&error]; + if (error) { + reject(error); + } + else{ + resolve(dict); + } + } else { + resolve(nil); + } + } + else{ + NSDictionary *dict = [self initWithContentsOfURL:url]; + resolve(dict); + } + + }); + }]; +} + +- (COPromise *)async_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile{ + COPromise *promise = [COPromise promise]; + dispatch_async([COKitCommon io_write_queue], ^{ + BOOL ret = [self writeToFile:path atomically:useAuxiliaryFile]; + [promise fulfill:@(ret)]; + }); + return promise; +} + +- (COPromise *)async_writeToURL:(NSURL *)url atomically:(BOOL)atomically{ + COPromise *promise = [COPromise promise]; + dispatch_async([COKitCommon io_write_queue], ^{ + BOOL ret = [self writeToURL:url atomically:atomically]; + [promise fulfill:@(ret)]; + }); + return promise; +} + +@end + +@implementation NSDictionary (Coroutine) + +/* Serializes this instance to the specified URL in the NSPropertyList format (using NSPropertyListXMLFormat_v1_0). For other formats use NSPropertyListSerialization directly. */ +- (BOOL)co_writeToURL:(NSURL *)url error:(NSError**)error API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0)) +{ + if([COCoroutine currentCoroutine]){ + BOOL ret = [await([self async_writeToURL:url]) boolValue]; + if(error){ + if(co_getError()){ + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self writeToURL:url error:error]; + } +} + ++ (NSDictionary *)co_dictionaryWithContentsOfFile:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return await([self async_dictionaryWithContentsOfFile:path]); + } + else{ + return [self dictionaryWithContentsOfFile:path]; + } +} ++ (NSDictionary *)co_dictionaryWithContentsOfURL:(NSURL *)url{ + if ([COCoroutine currentCoroutine]) { + return await([self async_dictionaryWithContentsOfURL:url]); + } + else{ + return [self dictionaryWithContentsOfURL:url]; + } +} +- (NSDictionary *)co_initWithContentsOfFile:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return await([self async_initWithContentsOfFile:path]); + } + else{ + return [self initWithContentsOfFile:path]; + } +} +- (NSDictionary *)co_initWithContentsOfURL:(NSURL *)url{ + if ([COCoroutine currentCoroutine]) { + return await([self async_initWithContentsOfURL:url]); + } + else{ + return [self initWithContentsOfURL:url]; + } +} + +- (BOOL)co_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile{ + if ([COCoroutine currentCoroutine]) { + return [await([self async_writeToFile:path atomically:useAuxiliaryFile]) boolValue]; + } + else{ + return [self writeToFile:path atomically:useAuxiliaryFile]; + } +} +- (BOOL)co_writeToURL:(NSURL *)url atomically:(BOOL)atomically // the atomically flag is ignored if url of a type that cannot be written atomically. +{ + if ([COCoroutine currentCoroutine]) { + return [await([self async_writeToURL:url atomically:atomically]) boolValue]; + } + else{ + return [self writeToURL:url atomically:atomically]; + } +} + +@end + +@implementation NSMutableDictionary (COPromise) + ++ (COPromise *)async_dictionaryWithContentsOfFile:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSMutableDictionary *dict = [self dictionaryWithContentsOfFile:path]; + resolve(dict); + }); + }]; +} + ++ (COPromise *)async_dictionaryWithContentsOfURL:(NSURL *)url{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSMutableDictionary *dict = [self dictionaryWithContentsOfURL:url]; + resolve(dict); + }); + }]; +} + +- (COPromise *)async_initWithContentsOfFile:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSMutableDictionary *dict = [self initWithContentsOfFile:path]; + resolve(dict); + }); + }]; +} + +- (COPromise *)async_initWithContentsOfURL:(NSURL *)url{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async([COKitCommon io_queue], ^{ + NSMutableDictionary *dict = [self initWithContentsOfURL:url]; + resolve(dict); + }); + }]; +} + +@end + +@implementation NSMutableDictionary (Coroutine) + ++ (NSMutableDictionary *)co_dictionaryWithContentsOfFile:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return await([self async_dictionaryWithContentsOfFile:path]); + } + else{ + return [self dictionaryWithContentsOfFile:path]; + } +} + ++ (NSMutableDictionary *)co_dictionaryWithContentsOfURL:(NSURL *)url{ + if ([COCoroutine currentCoroutine]) { + return await([self async_dictionaryWithContentsOfURL:url]); + } + else{ + return [self dictionaryWithContentsOfURL:url]; + } +} + +- (NSMutableDictionary *)co_initWithContentsOfURL:(NSURL *)url{ + if ([COCoroutine currentCoroutine]) { + return await([self async_initWithContentsOfURL:url]); + } + else{ + return [self initWithContentsOfURL:url]; + } +} + +- (NSMutableDictionary *)co_initWithContentsOfFile:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return await([self async_initWithContentsOfFile:path]); + } + else{ + return [self initWithContentsOfFile:path]; + } +} + +@end + diff --git a/cokit/cokit/Foundation/NSFileManager+Coroutine.h b/cokit/cokit/Foundation/NSFileManager+Coroutine.h new file mode 100644 index 0000000..9e1ac06 --- /dev/null +++ b/cokit/cokit/Foundation/NSFileManager+Coroutine.h @@ -0,0 +1,254 @@ +// +// NSFileManager+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + + +@interface NSFileManager (COPromise) + +/* createDirectoryAtURL:withIntermediateDirectories:attributes:error: creates a directory at the specified URL. If you pass 'NO' for withIntermediateDirectories, the directory must not exist at the time this call is made. Passing 'YES' for withIntermediateDirectories will create any necessary intermediate directories. This method returns YES if all directories specified in 'url' were created and attributes were set. Directories are created with attributes specified by the dictionary passed to 'attributes'. If no dictionary is supplied, directories are created according to the umask of the process. This method returns NO if a failure occurs at any stage of the operation. If an error parameter was provided, a presentable NSError will be returned by reference. + */ +- (COPromise*)async_createDirectoryAtURL:(NSURL *)url withIntermediateDirectories:(BOOL)createIntermediates attributes:(nullable NSDictionary *)attributes API_AVAILABLE(macos(10.7), ios(5.0), watchos(2.0), tvos(9.0)); + +/* createSymbolicLinkAtURL:withDestinationURL:error: returns YES if the symbolic link that point at 'destURL' was able to be created at the location specified by 'url'. 'destURL' is always resolved against its base URL, if it has one. If 'destURL' has no base URL and it's 'relativePath' is indeed a relative path, then a relative symlink will be created. If this method returns NO, the link was unable to be created and an NSError will be returned by reference in the 'error' parameter. This method does not traverse a terminal symlink. + */ +- (COPromise*)async_createSymbolicLinkAtURL:(NSURL *)url withDestinationURL:(NSURL *)destURL API_AVAILABLE(macos(10.7), ios(5.0), watchos(2.0), tvos(9.0)); + +/* setAttributes:ofItemAtPath:error: returns YES when the attributes specified in the 'attributes' dictionary are set successfully on the item specified by 'path'. If this method returns NO, a presentable NSError will be provided by-reference in the 'error' parameter. If no error is required, you may pass 'nil' for the error. + + This method replaces changeFileAttributes:atPath:. + */ +- (COPromise*)async_setAttributes:(NSDictionary *)attributes ofItemAtPath:(NSString *)path API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* createDirectoryAtPath:withIntermediateDirectories:attributes:error: creates a directory at the specified path. If you pass 'NO' for createIntermediates, the directory must not exist at the time this call is made. Passing 'YES' for 'createIntermediates' will create any necessary intermediate directories. This method returns YES if all directories specified in 'path' were created and attributes were set. Directories are created with attributes specified by the dictionary passed to 'attributes'. If no dictionary is supplied, directories are created according to the umask of the process. This method returns NO if a failure occurs at any stage of the operation. If an error parameter was provided, a presentable NSError will be returned by reference. + + This method replaces createDirectoryAtPath:attributes: + */ +- (COPromise*)async_createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(nullable NSDictionary *)attributes API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* contentsOfDirectoryAtPath:error: returns an NSArray of NSStrings representing the filenames of the items in the directory. If this method returns 'nil', an NSError will be returned by reference in the 'error' parameter. If the directory contains no items, this method will return the empty array. + + This method replaces directoryContentsAtPath: + */ +- (COPromise*> *)async_contentsOfDirectoryAtPath:(NSString *)path API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* subpathsOfDirectoryAtPath:error: returns an NSArray of NSStrings representing the filenames of the items in the specified directory and all its subdirectories recursively. If this method returns 'nil', an NSError will be returned by reference in the 'error' parameter. If the directory contains no items, this method will return the empty array. + + This method replaces subpathsAtPath: + */ +- (COPromise*> *)async_subpathsOfDirectoryAtPath:(NSString *)path API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* attributesOfItemAtPath:error: returns an NSDictionary of key/value pairs containing the attributes of the item (file, directory, symlink, etc.) at the path in question. If this method returns 'nil', an NSError will be returned by reference in the 'error' parameter. This method does not traverse a terminal symlink. + + This method replaces fileAttributesAtPath:traverseLink:. + */ +- (COPromise*> *)async_attributesOfItemAtPath:(NSString *)path API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* attributesOfFileSystemForPath:error: returns an NSDictionary of key/value pairs containing the attributes of the filesystem containing the provided path. If this method returns 'nil', an NSError will be returned by reference in the 'error' parameter. This method does not traverse a terminal symlink. + + This method replaces fileSystemAttributesAtPath:. + */ +- (COPromise*> *)async_attributesOfFileSystemForPath:(NSString *)path API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* createSymbolicLinkAtPath:withDestination:error: returns YES if the symbolic link that point at 'destPath' was able to be created at the location specified by 'path'. If this method returns NO, the link was unable to be created and an NSError will be returned by reference in the 'error' parameter. This method does not traverse a terminal symlink. + + This method replaces createSymbolicLinkAtPath:pathContent: + */ +- (COPromise*)async_createSymbolicLinkAtPath:(NSString *)path withDestinationPath:(NSString *)destPath API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* destinationOfSymbolicLinkAtPath:error: returns an NSString containing the path of the item pointed at by the symlink specified by 'path'. If this method returns 'nil', an NSError will be returned by reference in the 'error' parameter. + + This method replaces pathContentOfSymbolicLinkAtPath: + */ +- (COPromise*)async_destinationOfSymbolicLinkAtPath:(NSString *)path API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* These methods replace their non-error returning counterparts below. See the NSFileManagerDelegate protocol below for methods that are dispatched to the NSFileManager instance's delegate. + */ +- (COPromise*)async_copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); +- (COPromise*)async_moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); +- (COPromise*)async_linkItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); +- (COPromise*)async_removeItemAtPath:(NSString *)path API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + + +/* These methods are URL-taking equivalents of the four methods above. Their delegate methods are defined in the NSFileManagerDelegate protocol below. + */ +- (COPromise*)async_copyItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); +- (COPromise*)async_moveItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); +- (COPromise*)async_linkItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); +- (COPromise*)async_removeItemAtURL:(NSURL *)URL API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + +/* trashItemAtURL:resultingItemURL:error: returns YES if the item at 'url' was successfully moved to a Trash. Since the operation may require renaming the file to avoid collisions, it also returns by reference the resulting URL that the item was moved to. If this method returns NO, the item was not moved and an NSError will be returned by reference in the 'error' parameter. + + To easily discover if an item is in the Trash, you may use [fileManager getRelationship:&result ofDirectory:NSTrashDirectory inDomain:0 toItemAtURL:url error:&error] && result == NSURLRelationshipContains. + */ +- (COPromise*)async_trashItemAtURL:(NSURL *)url resultingItemURL:(NSURL * _Nullable * _Nullable)outResultingURL API_AVAILABLE(macos(10.8), ios(11.0)) API_UNAVAILABLE(watchos, tvos); + + +/* The following methods are of limited utility. Attempting to predicate behavior based on the current state of the filesystem or a particular file on the filesystem is encouraging odd behavior in the face of filesystem race conditions. It's far better to attempt an operation (like loading a file or creating a directory) and handle the error gracefully than it is to try to figure out ahead of time whether the operation will succeed. + */ +- (COPromise*>*)async_fileExistsAtPath:(NSString *)path; +- (COPromise*)async_isReadableFileAtPath:(NSString *)path; +- (COPromise*)async_isWritableFileAtPath:(NSString *)path; +- (COPromise*)async_isExecutableFileAtPath:(NSString *)path; +- (COPromise*)async_isDeletableFileAtPath:(NSString *)path; + +/* -contentsEqualAtPath:andPath: does not take into account data stored in the resource fork or filesystem extended attributes. + */ +- (COPromise*)async_contentsEqualAtPath:(NSString *)path1 andPath:(NSString *)path2; + + +/* subpathsAtPath: returns an NSArray of all contents and subpaths recursively from the provided path. This may be very expensive to compute for deep filesystem hierarchies, and should probably be avoided. + */ +- (COPromise*> *)async_subpathsAtPath:(NSString *)path; + +/* These methods are provided here for compatibility. The corresponding methods on NSData which return NSErrors should be regarded as the primary method of creating a file from an NSData or retrieving the contents of a file as an NSData. + */ +- (COPromise *)async_contentsAtPath:(NSString *)path; +- (COPromise*)async_createFileAtPath:(NSString *)path contents:(nullable NSData *)data attributes:(nullable NSDictionary *)attr; + +/* -replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error: is for developers who wish to perform a safe-save without using the full NSDocument machinery that is available in the AppKit. + + The `originalItemURL` is the item being replaced. + `newItemURL` is the item which will replace the original item. This item should be placed in a temporary directory as provided by the OS, or in a uniquely named directory placed in the same directory as the original item if the temporary directory is not available. + If `backupItemName` is provided, that name will be used to create a backup of the original item. The backup is placed in the same directory as the original item. If an error occurs during the creation of the backup item, the operation will fail. If there is already an item with the same name as the backup item, that item will be removed. The backup item will be removed in the event of success unless the `NSFileManagerItemReplacementWithoutDeletingBackupItem` option is provided in `options`. + For `options`, pass `0` to get the default behavior, which uses only the metadata from the new item while adjusting some properties using values from the original item. Pass `NSFileManagerItemReplacementUsingNewMetadataOnly` in order to use all possible metadata from the new item. + */ +- (COPromise*)async_replaceItemAtURL:(NSURL *)originalItemURL withItemAtURL:(NSURL *)newItemURL backupItemName:(nullable NSString *)backupItemName options:(NSFileManagerItemReplacementOptions)options resultingItemURL:(NSURL * _Nullable * _Nullable)resultingURL API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + +@end + + +@interface NSFileManager (Coroutine) + +/* createDirectoryAtURL:withIntermediateDirectories:attributes:error: creates a directory at the specified URL. If you pass 'NO' for withIntermediateDirectories, the directory must not exist at the time this call is made. Passing 'YES' for withIntermediateDirectories will create any necessary intermediate directories. This method returns YES if all directories specified in 'url' were created and attributes were set. Directories are created with attributes specified by the dictionary passed to 'attributes'. If no dictionary is supplied, directories are created according to the umask of the process. This method returns NO if a failure occurs at any stage of the operation. If an error parameter was provided, a presentable NSError will be returned by reference. + */ +- (BOOL)co_createDirectoryAtURL:(NSURL *)url withIntermediateDirectories:(BOOL)createIntermediates attributes:(nullable NSDictionary *)attributes error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.7), ios(5.0), watchos(2.0), tvos(9.0)); + +/* createSymbolicLinkAtURL:withDestinationURL:error: returns YES if the symbolic link that point at 'destURL' was able to be created at the location specified by 'url'. 'destURL' is always resolved against its base URL, if it has one. If 'destURL' has no base URL and it's 'relativePath' is indeed a relative path, then a relative symlink will be created. If this method returns NO, the link was unable to be created and an NSError will be returned by reference in the 'error' parameter. This method does not traverse a terminal symlink. + */ +- (BOOL)co_createSymbolicLinkAtURL:(NSURL *)url withDestinationURL:(NSURL *)destURL error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.7), ios(5.0), watchos(2.0), tvos(9.0)); + +/* setAttributes:ofItemAtPath:error: returns YES when the attributes specified in the 'attributes' dictionary are set successfully on the item specified by 'path'. If this method returns NO, a presentable NSError will be provided by-reference in the 'error' parameter. If no error is required, you may pass 'nil' for the error. + + This method replaces changeFileAttributes:atPath:. + */ +- (BOOL)co_setAttributes:(NSDictionary *)attributes ofItemAtPath:(NSString *)path error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* createDirectoryAtPath:withIntermediateDirectories:attributes:error: creates a directory at the specified path. If you pass 'NO' for createIntermediates, the directory must not exist at the time this call is made. Passing 'YES' for 'createIntermediates' will create any necessary intermediate directories. This method returns YES if all directories specified in 'path' were created and attributes were set. Directories are created with attributes specified by the dictionary passed to 'attributes'. If no dictionary is supplied, directories are created according to the umask of the process. This method returns NO if a failure occurs at any stage of the operation. If an error parameter was provided, a presentable NSError will be returned by reference. + + This method replaces createDirectoryAtPath:attributes: + */ +- (BOOL)co_createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(nullable NSDictionary *)attributes error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* contentsOfDirectoryAtPath:error: returns an NSArray of NSStrings representing the filenames of the items in the directory. If this method returns 'nil', an NSError will be returned by reference in the 'error' parameter. If the directory contains no items, this method will return the empty array. + + This method replaces directoryContentsAtPath: + */ +- (NSArray *)co_contentsOfDirectoryAtPath:(NSString *)path error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* subpathsOfDirectoryAtPath:error: returns an NSArray of NSStrings representing the filenames of the items in the specified directory and all its subdirectories recursively. If this method returns 'nil', an NSError will be returned by reference in the 'error' parameter. If the directory contains no items, this method will return the empty array. + + This method replaces subpathsAtPath: + */ +- (NSArray *)co_subpathsOfDirectoryAtPath:(NSString *)path error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* attributesOfItemAtPath:error: returns an NSDictionary of key/value pairs containing the attributes of the item (file, directory, symlink, etc.) at the path in question. If this method returns 'nil', an NSError will be returned by reference in the 'error' parameter. This method does not traverse a terminal symlink. + + This method replaces fileAttributesAtPath:traverseLink:. + */ +- (NSDictionary *)co_attributesOfItemAtPath:(NSString *)path error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* attributesOfFileSystemForPath:error: returns an NSDictionary of key/value pairs containing the attributes of the filesystem containing the provided path. If this method returns 'nil', an NSError will be returned by reference in the 'error' parameter. This method does not traverse a terminal symlink. + + This method replaces fileSystemAttributesAtPath:. + */ +- (NSDictionary *)co_attributesOfFileSystemForPath:(NSString *)path error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* createSymbolicLinkAtPath:withDestination:error: returns YES if the symbolic link that point at 'destPath' was able to be created at the location specified by 'path'. If this method returns NO, the link was unable to be created and an NSError will be returned by reference in the 'error' parameter. This method does not traverse a terminal symlink. + + This method replaces createSymbolicLinkAtPath:pathContent: + */ +- (BOOL)co_createSymbolicLinkAtPath:(NSString *)path withDestinationPath:(NSString *)destPath error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* destinationOfSymbolicLinkAtPath:error: returns an NSString containing the path of the item pointed at by the symlink specified by 'path'. If this method returns 'nil', an NSError will be returned by reference in the 'error' parameter. + + This method replaces pathContentOfSymbolicLinkAtPath: + */ +- (NSString *)co_destinationOfSymbolicLinkAtPath:(NSString *)path error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + +/* These methods replace their non-error returning counterparts below. See the NSFileManagerDelegate protocol below for methods that are dispatched to the NSFileManager instance's delegate. + */ +- (BOOL)co_copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); +- (BOOL)co_moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); +- (BOOL)co_linkItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); +- (BOOL)co_removeItemAtPath:(NSString *)path error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)); + + +/* These methods are URL-taking equivalents of the four methods above. Their delegate methods are defined in the NSFileManagerDelegate protocol below. + */ +- (BOOL)co_copyItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); +- (BOOL)co_moveItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); +- (BOOL)co_linkItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); +- (BOOL)co_removeItemAtURL:(NSURL *)URL error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + +/* trashItemAtURL:resultingItemURL:error: returns YES if the item at 'url' was successfully moved to a Trash. Since the operation may require renaming the file to avoid collisions, it also returns by reference the resulting URL that the item was moved to. If this method returns NO, the item was not moved and an NSError will be returned by reference in the 'error' parameter. + + To easily discover if an item is in the Trash, you may use [fileManager getRelationship:&result ofDirectory:NSTrashDirectory inDomain:0 toItemAtURL:url error:&error] && result == NSURLRelationshipContains. + */ +- (BOOL)co_trashItemAtURL:(NSURL *)url resultingItemURL:(NSURL * _Nullable * _Nullable)outResultingURL error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.8), ios(11.0)) API_UNAVAILABLE(watchos, tvos); + + +/* The following methods are of limited utility. Attempting to predicate behavior based on the current state of the filesystem or a particular file on the filesystem is encouraging odd behavior in the face of filesystem race conditions. It's far better to attempt an operation (like loading a file or creating a directory) and handle the error gracefully than it is to try to figure out ahead of time whether the operation will succeed. + */ +- (BOOL)co_fileExistsAtPath:(NSString *)path isDirectory:(BOOL* _Nullable)isDirectory CO_ASYNC; +- (BOOL)co_isReadableFileAtPath:(NSString *)path CO_ASYNC; +- (BOOL)co_isWritableFileAtPath:(NSString *)path CO_ASYNC; +- (BOOL)co_isExecutableFileAtPath:(NSString *)path CO_ASYNC; +- (BOOL)co_isDeletableFileAtPath:(NSString *)path CO_ASYNC; + +/* -contentsEqualAtPath:andPath: does not take into account data stored in the resource fork or filesystem extended attributes. + */ +- (BOOL)co_contentsEqualAtPath:(NSString *)path1 andPath:(NSString *)path2 CO_ASYNC; + + +/* subpathsAtPath: returns an NSArray of all contents and subpaths recursively from the provided path. This may be very expensive to compute for deep filesystem hierarchies, and should probably be avoided. + */ +- (NSArray *)co_subpathsAtPath:(NSString *)path CO_ASYNC; + +/* These methods are provided here for compatibility. The corresponding methods on NSData which return NSErrors should be regarded as the primary method of creating a file from an NSData or retrieving the contents of a file as an NSData. + */ +- (NSData *)co_contentsAtPath:(NSString *)path CO_ASYNC; +- (BOOL)co_createFileAtPath:(NSString *)path contents:(nullable NSData *)data attributes:(nullable NSDictionary *)attr CO_ASYNC; + +/* -replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error: is for developers who wish to perform a safe-save without using the full NSDocument machinery that is available in the AppKit. + + The `originalItemURL` is the item being replaced. + `newItemURL` is the item which will replace the original item. This item should be placed in a temporary directory as provided by the OS, or in a uniquely named directory placed in the same directory as the original item if the temporary directory is not available. + If `backupItemName` is provided, that name will be used to create a backup of the original item. The backup is placed in the same directory as the original item. If an error occurs during the creation of the backup item, the operation will fail. If there is already an item with the same name as the backup item, that item will be removed. The backup item will be removed in the event of success unless the `NSFileManagerItemReplacementWithoutDeletingBackupItem` option is provided in `options`. + For `options`, pass `0` to get the default behavior, which uses only the metadata from the new item while adjusting some properties using values from the original item. Pass `NSFileManagerItemReplacementUsingNewMetadataOnly` in order to use all possible metadata from the new item. + */ +- (BOOL)co_replaceItemAtURL:(NSURL *)originalItemURL withItemAtURL:(NSURL *)newItemURL backupItemName:(nullable NSString *)backupItemName options:(NSFileManagerItemReplacementOptions)options resultingItemURL:(NSURL * _Nullable * _Nullable)resultingURL error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + +@end + +NS_ASSUME_NONNULL_END diff --git a/cokit/cokit/Foundation/NSFileManager+Coroutine.m b/cokit/cokit/Foundation/NSFileManager+Coroutine.m new file mode 100644 index 0000000..d281b8d --- /dev/null +++ b/cokit/cokit/Foundation/NSFileManager+Coroutine.m @@ -0,0 +1,864 @@ +// +// NSFileManager+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "NSFileManager+Coroutine.h" +#import "COKitCommon.h" + +@implementation NSFileManager (Coroutine) + +- (BOOL)co_createDirectoryAtURL:(NSURL *)url withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_createDirectoryAtURL:url withIntermediateDirectories:createIntermediates attributes:attributes]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self createDirectoryAtURL:url withIntermediateDirectories:createIntermediates attributes:attributes error:error]; + } +} + +- (BOOL)co_createSymbolicLinkAtURL:(NSURL *)url withDestinationURL:(NSURL *)destURL error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_createSymbolicLinkAtURL:url withDestinationURL:destURL]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self createSymbolicLinkAtURL:url withDestinationURL:destURL error:error]; + } +} + +- (BOOL)co_setAttributes:(NSDictionary *)attributes ofItemAtPath:(NSString *)path error:(NSError**)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_setAttributes:attributes ofItemAtPath:path]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self setAttributes:attributes ofItemAtPath:path error:error]; + } +} + +- (BOOL)co_createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_createDirectoryAtPath:path withIntermediateDirectories:createIntermediates attributes:attributes]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self createDirectoryAtPath:path withIntermediateDirectories:createIntermediates attributes:attributes error:error]; + } +} + +- (NSArray *)co_contentsOfDirectoryAtPath:(NSString *)path error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSArray *list = await([self async_contentsOfDirectoryAtPath:path]); + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return list; + } + else{ + return [self contentsOfDirectoryAtPath:path error:error]; + } +} + +- (NSArray *)co_subpathsOfDirectoryAtPath:(NSString *)path error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSArray *list = await([self async_subpathsOfDirectoryAtPath:path]); + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return list; + } + else{ + return [self subpathsOfDirectoryAtPath:path error:error]; + } +} + +- (NSDictionary *)co_attributesOfItemAtPath:(NSString *)path error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSDictionary *attr = await([self async_attributesOfItemAtPath:path]); + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return attr; + } + else{ + return [self attributesOfItemAtPath:path error:error]; + } +} + +- (NSDictionary *)co_attributesOfFileSystemForPath:(NSString *)path error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSDictionary *attr = await([self async_attributesOfFileSystemForPath:path]); + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return attr; + } + else{ + return [self attributesOfFileSystemForPath:path error:error]; + } +} + +- (BOOL)co_createSymbolicLinkAtPath:(NSString *)path withDestinationPath:(NSString *)destPath error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_createSymbolicLinkAtPath:path withDestinationPath:destPath]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self createSymbolicLinkAtPath:path withDestinationPath:destPath error:error]; + } +} + +- (NSString *)co_destinationOfSymbolicLinkAtPath:(NSString *)path error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSString *dest = await([self async_destinationOfSymbolicLinkAtPath:path]); + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return dest; + } + else{ + return [self destinationOfSymbolicLinkAtPath:path error:error]; + } +} + +- (BOOL)co_copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError**)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_copyItemAtPath:srcPath toPath:dstPath]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self copyItemAtPath:srcPath toPath:dstPath error:error]; + } +} + +- (BOOL)co_moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_moveItemAtPath:srcPath toPath:dstPath]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self moveItemAtPath:srcPath toPath:dstPath error:error]; + } +} + +- (BOOL)co_linkItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_linkItemAtPath:srcPath toPath:dstPath]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self linkItemAtPath:srcPath toPath:dstPath error:error]; + } +} + +- (BOOL)co_removeItemAtPath:(NSString *)path error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_removeItemAtPath:path]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self removeItemAtPath:path error:error]; + } +} + +- (BOOL)co_copyItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_copyItemAtURL:srcURL toURL:dstURL]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self copyItemAtURL:srcURL toURL:dstURL error:error]; + } +} + +- (BOOL)co_moveItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_moveItemAtURL:srcURL toURL:dstURL]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self moveItemAtURL:srcURL toURL:dstURL error:error]; + } +} + +- (BOOL)co_linkItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_linkItemAtURL:srcURL toURL:dstURL]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self linkItemAtURL:srcURL toURL:dstURL error:error]; + } +} + +- (BOOL)co_removeItemAtURL:(NSURL *)URL error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_removeItemAtURL:URL]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self removeItemAtURL:URL error:error]; + } +} + +- (BOOL)co_trashItemAtURL:(NSURL *)url resultingItemURL:(NSURL *__autoreleasing _Nullable *)outResultingURL error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_trashItemAtURL:url resultingItemURL:outResultingURL]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self trashItemAtURL:url resultingItemURL:outResultingURL error:error]; + } +} + +- (BOOL)co_fileExistsAtPath:(NSString *)path isDirectory:(BOOL * _Nullable)isDirectory{ + if ([COCoroutine currentCoroutine]) { + id ret, isDir; + co_unpack(&ret, &isDir) = await([self async_fileExistsAtPath:path]); + if (isDirectory) { + *isDirectory = [isDir boolValue]; + } + return [ret boolValue]; + } + else{ + return [self fileExistsAtPath:path isDirectory:isDirectory]; + } +} + +- (BOOL)co_isReadableFileAtPath:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return [await([self async_isReadableFileAtPath:path]) boolValue]; + } + else{ + return [self isReadableFileAtPath:path]; + } +} + +- (BOOL)co_isWritableFileAtPath:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return [await([self async_isWritableFileAtPath:path]) boolValue]; + } + else{ + return [self isWritableFileAtPath:path]; + } +} + +- (BOOL)co_isDeletableFileAtPath:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return [await([self async_isDeletableFileAtPath:path]) boolValue]; + } + else{ + return [self isDeletableFileAtPath:path]; + } +} + +- (BOOL)co_isExecutableFileAtPath:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return [await([self async_isExecutableFileAtPath:path]) boolValue]; + } + else{ + return [self isExecutableFileAtPath:path]; + } +} + +- (BOOL)co_contentsEqualAtPath:(NSString *)path1 andPath:(NSString *)path2{ + if ([COCoroutine currentCoroutine]) { + return [await([self async_contentsEqualAtPath:path1 andPath:path2]) boolValue]; + } + else{ + return [self contentsEqualAtPath:path1 andPath:path2]; + } +} + +- (NSArray *)co_subpathsAtPath:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return await([self async_subpathsAtPath:path]); + } + else{ + return [self subpathsAtPath:path]; + } +} + +- (NSData *)co_contentsAtPath:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return await([self async_contentsAtPath:path]); + } + else{ + return [self contentsAtPath:path]; + } +} + +- (BOOL)co_createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr{ + if([COCoroutine currentCoroutine]){ + return [await([self async_createFileAtPath:path contents:data attributes:attr]) boolValue]; + } + else{ + return [self createFileAtPath:path contents:data attributes:attr]; + } +} + +- (BOOL)co_replaceItemAtURL:(NSURL *)originalItemURL withItemAtURL:(NSURL *)newItemURL backupItemName:(NSString *)backupItemName options:(NSFileManagerItemReplacementOptions)options resultingItemURL:(NSURL *__autoreleasing _Nullable *)resultingURL error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_replaceItemAtURL:originalItemURL withItemAtURL:newItemURL backupItemName:backupItemName options:options resultingItemURL:resultingURL]) boolValue]; + if (error) { + if (co_getError()) { + *error = co_getError(); + } + else{ + *error = nil; + } + } + return ret; + } + else{ + return [self replaceItemAtURL:originalItemURL withItemAtURL:newItemURL backupItemName:backupItemName options:options resultingItemURL:resultingURL error:error]; + } +} + +@end + +@implementation NSFileManager (COPromise) + +- (COPromise *)async_createDirectoryAtURL:(NSURL *)url withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self createDirectoryAtURL:url withIntermediateDirectories:createIntermediates attributes:attributes error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +- (COPromise *)async_createSymbolicLinkAtURL:(NSURL *)url withDestinationURL:(NSURL *)destURL{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self createSymbolicLinkAtURL:url withDestinationURL:destURL error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +- (COPromise *)async_setAttributes:(NSDictionary *)attributes ofItemAtPath:(NSString *)path{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self setAttributes:attributes ofItemAtPath:path error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +- (COPromise *)async_createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes{ + + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self createDirectoryAtPath:path withIntermediateDirectories:createIntermediates attributes:attributes error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +- (COPromise *> *)async_contentsOfDirectoryAtPath:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSArray *list = [self contentsOfDirectoryAtPath:path error:&error]; + if (error) { + reject(error); + } + else{ + resolve(list); + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + }]; +} + +- (COPromise *> *)async_subpathsOfDirectoryAtPath:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSArray *list = [self subpathsOfDirectoryAtPath:path error:&error]; + if (error) { + reject(error); + } + else{ + resolve(list); + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + }]; +} + +- (COPromise *> *)async_attributesOfItemAtPath:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSDictionary *dict = [self attributesOfItemAtPath:path error:&error]; + if (error) { + reject(error); + } + else{ + resolve(dict); + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + }]; +} + +- (COPromise *> *)async_attributesOfFileSystemForPath:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSDictionary *dict = [self attributesOfFileSystemForPath:path error:&error]; + if (error) { + reject(error); + } + else{ + resolve(dict); + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + }]; +} + +- (COPromise *)async_createSymbolicLinkAtPath:(NSString *)path withDestinationPath:(NSString *)destPath{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self createSymbolicLinkAtPath:path withDestinationPath:destPath error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +- (COPromise *)async_destinationOfSymbolicLinkAtPath:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSString* destPath = [self destinationOfSymbolicLinkAtPath:path error:&error]; + if (error) { + reject(error); + } + else{ + resolve(destPath); + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + }]; +} + +- (COPromise *)async_copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self copyItemAtPath:srcPath toPath:dstPath error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +- (COPromise *)async_moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self moveItemAtPath:srcPath toPath:dstPath error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +- (COPromise *)async_linkItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath{ + + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self linkItemAtPath:srcPath toPath:dstPath error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +- (COPromise *)async_removeItemAtPath:(NSString *)path{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self removeItemAtPath:path error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +- (COPromise *)async_copyItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL{ + + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self copyItemAtURL:srcURL toURL:dstURL error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +- (COPromise *)async_moveItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL{ + + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self moveItemAtURL:srcURL toURL:dstURL error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +- (COPromise *)async_linkItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL{ + + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self linkItemAtURL:srcURL toURL:dstURL error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +- (COPromise *)async_removeItemAtURL:(NSURL *)URL{ + + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self removeItemAtURL:URL error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +- (COPromise *)async_trashItemAtURL:(NSURL *)url resultingItemURL:(NSURL *__autoreleasing _Nullable *)outResultingURL{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self trashItemAtURL:url resultingItemURL:outResultingURL error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +- (COPromise *> *)async_fileExistsAtPath:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + BOOL isDirectory = NO; + BOOL ret = [self fileExistsAtPath:path isDirectory:&isDirectory]; + resolve(co_tuple(@(ret), @(isDirectory))); + } backgroundQueue:[COKitCommon filemanager_queue]]; + }]; +} + +- (COPromise *)async_isReadableFileAtPath:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + BOOL ret = [self isReadableFileAtPath:path]; + resolve(@(ret)); + } backgroundQueue:[COKitCommon filemanager_queue]]; + }]; +} + +- (COPromise *)async_isWritableFileAtPath:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + BOOL ret = [self isWritableFileAtPath:path]; + resolve(@(ret)); + } backgroundQueue:[COKitCommon filemanager_queue]]; + }]; +} + +- (COPromise *)async_isExecutableFileAtPath:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + BOOL ret = [self isExecutableFileAtPath:path]; + resolve(@(ret)); + } backgroundQueue:[COKitCommon filemanager_queue]]; + }]; +} + +- (COPromise *)async_isDeletableFileAtPath:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + BOOL ret = [self isDeletableFileAtPath:path]; + resolve(@(ret)); + } backgroundQueue:[COKitCommon filemanager_queue]]; + }]; +} + +- (COPromise *)async_contentsEqualAtPath:(NSString *)path1 andPath:(NSString *)path2{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + BOOL ret = [self contentsEqualAtPath:path1 andPath:path2]; + resolve(@(ret)); + } backgroundQueue:[COKitCommon filemanager_queue]]; + }]; +} + +- (COPromise *> *)async_subpathsAtPath:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSArray *list = [self subpathsAtPath:path]; + resolve(list); + } backgroundQueue:[COKitCommon filemanager_queue]]; + }]; +} + +- (COPromise *)async_contentsAtPath:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSData* data = [self contentsAtPath:path]; + resolve(data); + } backgroundQueue:[COKitCommon filemanager_queue]]; + }]; +} + +- (COPromise *)async_createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr{ + + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + BOOL ret = [self createFileAtPath:path contents:data attributes:attr]; + [promise fulfill:@(ret)]; + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +- (COPromise *)async_replaceItemAtURL:(NSURL *)originalItemURL withItemAtURL:(NSURL *)newItemURL backupItemName:(NSString *)backupItemName options:(NSFileManagerItemReplacementOptions)options resultingItemURL:(NSURL *__autoreleasing _Nullable *)resultingURL{ + + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self replaceItemAtURL:originalItemURL withItemAtURL:newItemURL backupItemName:backupItemName options:options resultingItemURL:resultingURL error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon filemanager_queue]]; + return promise; +} + +@end diff --git a/cokit/cokit/Foundation/NSJSONSerialization+Coroutine.h b/cokit/cokit/Foundation/NSJSONSerialization+Coroutine.h new file mode 100644 index 0000000..017bb8f --- /dev/null +++ b/cokit/cokit/Foundation/NSJSONSerialization+Coroutine.h @@ -0,0 +1,86 @@ +// +// NSJSONSerialization+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + +NS_ASSUME_NONNULL_BEGIN + + +@interface NSJSONSerialization (COPromise) + +/* Returns YES if the given object can be converted to JSON data, NO otherwise. The object must have the following properties: + - Top level object is an NSArray or NSDictionary + - All objects are NSString, NSNumber, NSArray, NSDictionary, or NSNull + - All dictionary keys are NSStrings + - NSNumbers are not NaN or infinity + Other rules may apply. Calling this method or attempting a conversion are the definitive ways to tell if a given object can be converted to JSON data. + */ ++ (COPromise*)async_isValidJSONObject:(id)obj; + +/* Generate JSON data from a Foundation object. If the object will not produce valid JSON then an exception will be thrown. Setting the NSJSONWritingPrettyPrinted option will generate JSON with whitespace designed to make the output more readable. If that option is not set, the most compact possible JSON will be generated. If an error occurs, the error parameter will be set and the return value will be nil. The resulting data is a encoded in UTF-8. + */ ++ (COPromise *)async_dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt; + +/* Create a Foundation object from JSON data. Set the NSJSONReadingAllowFragments option if the parser should allow top-level objects that are not an NSArray or NSDictionary. Setting the NSJSONReadingMutableContainers option will make the parser generate mutable NSArrays and NSDictionaries. Setting the NSJSONReadingMutableLeaves option will make the parser generate mutable NSString objects. If an error occurs during the parse, then the error parameter will be set and the result will be nil. + The data must be in one of the 5 supported encodings listed in the JSON specification: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. The data may or may not have a BOM. The most efficient encoding to use for parsing is UTF-8, so if you have a choice in encoding the data passed to this method, use UTF-8. + */ ++ (COPromise*)async_JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt; + +/* Write JSON data into a stream. The stream should be opened and configured. The return value is the number of bytes written to the stream, or 0 on error. All other behavior of this method is the same as the dataWithJSONObject:options:error: method. + */ ++ (COPromise*)async_writeJSONObject:(id)obj toStream:(NSOutputStream *)stream options:(NSJSONWritingOptions)opt; + +/* Create a JSON object from JSON data stream. The stream should be opened and configured. All other behavior of this method is the same as the JSONObjectWithData:options:error: method. + */ ++ (COPromise*)async_JSONObjectWithStream:(NSInputStream *)stream options:(NSJSONReadingOptions)opt; + +@end + +@interface NSJSONSerialization (Coroutine) + +/* Returns YES if the given object can be converted to JSON data, NO otherwise. The object must have the following properties: + - Top level object is an NSArray or NSDictionary + - All objects are NSString, NSNumber, NSArray, NSDictionary, or NSNull + - All dictionary keys are NSStrings + - NSNumbers are not NaN or infinity + Other rules may apply. Calling this method or attempting a conversion are the definitive ways to tell if a given object can be converted to JSON data. + */ ++ (BOOL)co_isValidJSONObject:(id)obj CO_ASYNC; + +/* Generate JSON data from a Foundation object. If the object will not produce valid JSON then an exception will be thrown. Setting the NSJSONWritingPrettyPrinted option will generate JSON with whitespace designed to make the output more readable. If that option is not set, the most compact possible JSON will be generated. If an error occurs, the error parameter will be set and the return value will be nil. The resulting data is a encoded in UTF-8. + */ ++ (NSData *)co_dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError**)error CO_ASYNC; + +/* Create a Foundation object from JSON data. Set the NSJSONReadingAllowFragments option if the parser should allow top-level objects that are not an NSArray or NSDictionary. Setting the NSJSONReadingMutableContainers option will make the parser generate mutable NSArrays and NSDictionaries. Setting the NSJSONReadingMutableLeaves option will make the parser generate mutable NSString objects. If an error occurs during the parse, then the error parameter will be set and the result will be nil. + The data must be in one of the 5 supported encodings listed in the JSON specification: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. The data may or may not have a BOM. The most efficient encoding to use for parsing is UTF-8, so if you have a choice in encoding the data passed to this method, use UTF-8. + */ ++ (id)co_JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError**)error CO_ASYNC; + +/* Write JSON data into a stream. The stream should be opened and configured. The return value is the number of bytes written to the stream, or 0 on error. All other behavior of this method is the same as the dataWithJSONObject:options:error: method. + */ ++ (BOOL)co_writeJSONObject:(id)obj toStream:(NSOutputStream *)stream options:(NSJSONWritingOptions)opt error:(NSError**)error CO_ASYNC; + +/* Create a JSON object from JSON data stream. The stream should be opened and configured. All other behavior of this method is the same as the JSONObjectWithData:options:error: method. + */ ++ (id)co_JSONObjectWithStream:(NSInputStream *)stream options:(NSJSONReadingOptions)opt error:(NSError**)error CO_ASYNC; + +@end + +NS_ASSUME_NONNULL_END diff --git a/cokit/cokit/Foundation/NSJSONSerialization+Coroutine.m b/cokit/cokit/Foundation/NSJSONSerialization+Coroutine.m new file mode 100644 index 0000000..5ff81c4 --- /dev/null +++ b/cokit/cokit/Foundation/NSJSONSerialization+Coroutine.m @@ -0,0 +1,180 @@ +// +// NSJSONSerialization+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "NSJSONSerialization+Coroutine.h" +#import "COKitCommon.h" + +@implementation NSJSONSerialization (COPromise) + ++ (COPromise *)async_isValidJSONObject:(id)obj{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + BOOL ret = [self isValidJSONObject:obj]; + resolve(@(ret)); + } backgroundQueue:[COKitCommon json_queue]]; + }]; +} + ++ (COPromise *)async_dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSData* data = [self dataWithJSONObject:obj options:opt error:&error]; + if (error) { + reject(error); + } + else{ + resolve(data); + } + } backgroundQueue:[COKitCommon json_queue]]; + }]; +} + ++ (COPromise *)async_JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + id obj = [self JSONObjectWithData:data options:opt error:&error]; + if (error) { + reject(error); + } + else{ + resolve(obj); + } + } backgroundQueue:[COKitCommon json_queue]]; + }]; +} + ++ (COPromise *)async_writeJSONObject:(id)obj toStream:(NSOutputStream *)stream options:(NSJSONWritingOptions)opt{ + COPromise *promise = [COPromise promise]; + + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self writeJSONObject:obj toStream:stream options:opt error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon json_queue]]; + return promise; +} + ++ (COPromise *)async_JSONObjectWithStream:(NSInputStream *)stream options:(NSJSONReadingOptions)opt{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + id obj = [self JSONObjectWithStream:stream options:opt error:&error]; + if (error) { + reject(error); + } + else{ + resolve(obj); + } + } backgroundQueue:[COKitCommon json_queue]]; + }]; +} + +@end + +@implementation NSJSONSerialization (Coroutine) + +/* Returns YES if the given object can be converted to JSON data, NO otherwise. The object must have the following properties: + - Top level object is an NSArray or NSDictionary + - All objects are NSString, NSNumber, NSArray, NSDictionary, or NSNull + - All dictionary keys are NSStrings + - NSNumbers are not NaN or infinity + Other rules may apply. Calling this method or attempting a conversion are the definitive ways to tell if a given object can be converted to JSON data. + */ ++ (BOOL)co_isValidJSONObject:(id)obj CO_ASYNC +{ + if ([COCoroutine currentCoroutine]) { + return [await([self async_isValidJSONObject:obj]) boolValue]; + } + else{ + return [self isValidJSONObject:obj]; + } +} + +/* Generate JSON data from a Foundation object. If the object will not produce valid JSON then an exception will be thrown. Setting the NSJSONWritingPrettyPrinted option will generate JSON with whitespace designed to make the output more readable. If that option is not set, the most compact possible JSON will be generated. If an error occurs, the error parameter will be set and the return value will be nil. The resulting data is a encoded in UTF-8. + */ ++ (NSData *)co_dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError**)error CO_ASYNC +{ + if ([COCoroutine currentCoroutine]) { + NSData *data = await([self async_dataWithJSONObject:obj options:opt]); + if (error) { + *error = co_getError(); + } + return data; + } + else{ + return [self dataWithJSONObject:obj options:opt error:error]; + } +} + +/* Create a Foundation object from JSON data. Set the NSJSONReadingAllowFragments option if the parser should allow top-level objects that are not an NSArray or NSDictionary. Setting the NSJSONReadingMutableContainers option will make the parser generate mutable NSArrays and NSDictionaries. Setting the NSJSONReadingMutableLeaves option will make the parser generate mutable NSString objects. If an error occurs during the parse, then the error parameter will be set and the result will be nil. + The data must be in one of the 5 supported encodings listed in the JSON specification: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. The data may or may not have a BOM. The most efficient encoding to use for parsing is UTF-8, so if you have a choice in encoding the data passed to this method, use UTF-8. + */ ++ (id)co_JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError**)error CO_ASYNC +{ + if ([COCoroutine currentCoroutine]) { + id obj = await([self async_JSONObjectWithData:data options:opt]); + if (error) { + *error = co_getError(); + } + return obj; + } + else{ + return [self JSONObjectWithData:data options:opt error:error]; + } +} + +/* Write JSON data into a stream. The stream should be opened and configured. The return value is the number of bytes written to the stream, or 0 on error. All other behavior of this method is the same as the dataWithJSONObject:options:error: method. + */ ++ (BOOL)co_writeJSONObject:(id)obj toStream:(NSOutputStream *)stream options:(NSJSONWritingOptions)opt error:(NSError**)error CO_ASYNC +{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_writeJSONObject:obj toStream:stream options:opt]) boolValue]; + if (error) { + *error = co_getError(); + } + return ret; + } + else{ + return [self writeJSONObject:obj toStream:stream options:opt error:error]; + } +} + +/* Create a JSON object from JSON data stream. The stream should be opened and configured. All other behavior of this method is the same as the JSONObjectWithData:options:error: method. + */ ++ (id)co_JSONObjectWithStream:(NSInputStream *)stream options:(NSJSONReadingOptions)opt error:(NSError**)error CO_ASYNC +{ + if ([COCoroutine currentCoroutine]) { + id obj = await([self async_JSONObjectWithStream:stream options:opt]); + if (error) { + *error = co_getError(); + } + return obj; + } + else{ + return [self JSONObjectWithStream:stream options:opt error:error]; + } +} + +@end diff --git a/cokit/cokit/Foundation/NSKeyedArchiver+Coroutine.h b/cokit/cokit/Foundation/NSKeyedArchiver+Coroutine.h new file mode 100644 index 0000000..f386b0d --- /dev/null +++ b/cokit/cokit/Foundation/NSKeyedArchiver+Coroutine.h @@ -0,0 +1,56 @@ +// +// NSKeyedArchiver+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + +NS_ASSUME_NONNULL_BEGIN + + +@interface NSKeyedArchiver (COPromise) + ++ (COPromise*)async_archivedDataWithRootObject:(id)rootObject; ++ (COPromise*)async_archiveRootObject:(id)rootObject toFile:(NSString *)path; + +@end + +@interface NSKeyedArchiver (Coroutine) + ++ (NSData*)co_archivedDataWithRootObject:(id)rootObject CO_ASYNC; ++ (BOOL)co_archiveRootObject:(id)rootObject toFile:(NSString *)path CO_ASYNC; + +@end + +@interface NSKeyedUnarchiver (COPromise) + ++ (COPromise*)async_unarchiveObjectWithData:(NSData *)data; ++ (COPromise*)async_unarchiveTopLevelObjectWithData:(NSData *)data API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0)) NS_SWIFT_UNAVAILABLE("Use 'unarchiveTopLevelObjectWithData(_:) throws' instead"); ++ (COPromise*)async_unarchiveObjectWithFile:(NSString *)path; + +@end + +@interface NSKeyedUnarchiver (Coroutine) + ++ (id)co_unarchiveObjectWithData:(NSData *)data CO_ASYNC; ++ (id)co_unarchiveTopLevelObjectWithData:(NSData *)data error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0)) NS_SWIFT_UNAVAILABLE("Use 'unarchiveTopLevelObjectWithData(_:) throws' instead"); ++ (id)co_unarchiveObjectWithFile:(NSString *)path CO_ASYNC; + +@end + +NS_ASSUME_NONNULL_END diff --git a/cokit/cokit/Foundation/NSKeyedArchiver+Coroutine.m b/cokit/cokit/Foundation/NSKeyedArchiver+Coroutine.m new file mode 100644 index 0000000..d325805 --- /dev/null +++ b/cokit/cokit/Foundation/NSKeyedArchiver+Coroutine.m @@ -0,0 +1,136 @@ +// +// NSKeyedArchiver+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "NSKeyedArchiver+Coroutine.h" +#import "COKitCommon.h" + +@implementation NSKeyedArchiver (COPromise) + ++ (COPromise *)async_archivedDataWithRootObject:(id)rootObject{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSData *data = [self archivedDataWithRootObject:rootObject]; + resolve(data); + } backgroundQueue:[COKitCommon archieve_queue]]; + }]; +} + ++ (COPromise *)async_archiveRootObject:(id)rootObject toFile:(NSString *)path{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + BOOL ret = [self archiveRootObject:rootObject toFile:path]; + [promise fulfill:@(ret)]; + } backgroundQueue:[COKitCommon archieve_queue]]; + return promise; +} + + +@end + +@implementation NSKeyedArchiver (Coroutine) + ++ (NSData*)co_archivedDataWithRootObject:(id)rootObject{ + if ([COCoroutine currentCoroutine]) { + return await([self async_archivedDataWithRootObject:rootObject]); + } + else{ + return [self archivedDataWithRootObject:rootObject]; + } +} ++ (BOOL)co_archiveRootObject:(id)rootObject toFile:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return [await([self async_archiveRootObject:rootObject toFile:path]) boolValue]; + } + else{ + return [self archiveRootObject:rootObject toFile:path]; + } +} + +@end + +@implementation NSKeyedUnarchiver (COPromise) + ++ (COPromise *)async_unarchiveObjectWithData:(NSData *)data{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + id obj = [self unarchiveObjectWithData:data]; + resolve(obj); + } backgroundQueue:[COKitCommon archieve_queue]]; + }]; +} + ++ (COPromise *)async_unarchiveTopLevelObjectWithData:(NSData *)data{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + id obj = [self unarchiveTopLevelObjectWithData:data error:&error]; + if (error) { + reject(error); + } + else{ + resolve(obj); + } + } backgroundQueue:[COKitCommon archieve_queue]]; + }]; +} + ++ (COPromise *)async_unarchiveObjectWithFile:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + id obj = [self unarchiveObjectWithFile:path]; + resolve(obj); + } backgroundQueue:[COKitCommon archieve_queue]]; + }]; +} + +@end + +@implementation NSKeyedUnarchiver (Coroutine) + ++ (id)co_unarchiveObjectWithData:(NSData *)data{ + if ([COCoroutine currentCoroutine]) { + return await([self async_unarchiveObjectWithData:data]); + } + else{ + return [self unarchiveObjectWithData:data]; + } +} + ++ (id)co_unarchiveObjectWithFile:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return await([self async_unarchiveObjectWithFile:path]); + } + else{ + return [self unarchiveObjectWithFile:path]; + } +} + ++ (id)co_unarchiveTopLevelObjectWithData:(NSData *)data error:(NSError * _Nullable __autoreleasing * _Nullable)error{ + if ([COCoroutine currentCoroutine]) { + id obj = await([self async_unarchiveTopLevelObjectWithData:data]); + if (error) { + *error = co_getError(); + } + return obj; + } + else{ + return [self unarchiveTopLevelObjectWithData:data error:error]; + } +} + +@end diff --git a/cokit/cokit/Foundation/NSPropertyList+Coroutine.h b/cokit/cokit/Foundation/NSPropertyList+Coroutine.h new file mode 100644 index 0000000..f79d93c --- /dev/null +++ b/cokit/cokit/Foundation/NSPropertyList+Coroutine.h @@ -0,0 +1,78 @@ +// +// NSPropertyList+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + +NS_ASSUME_NONNULL_BEGIN + + +@interface NSPropertyListSerialization (COPromise) + +/* Verify that a specified property list is valid for a given format. Returns YES if the property list is valid. + */ ++ (COPromise*)async_propertyList:(id)plist isValidForFormat:(NSPropertyListFormat)format; + +/* Create an NSData from a property list. The format can be either NSPropertyListXMLFormat_v1_0 or NSPropertyListBinaryFormat_v1_0. The options parameter is currently unused and should be set to 0. If an error occurs the return value will be nil and the error parameter (if non-NULL) set to an autoreleased NSError describing the problem. + */ ++ (COPromise *)async_dataWithPropertyList:(id)plist format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + +/* Write a property list to an output stream. The stream should be opened and configured. The format can be either NSPropertyListXMLFormat_v1_0 or NSPropertyListBinaryFormat_v1_0. The options parameter is currently unused and should be set to 0. If an error occurs the return value will be 0 and the error parameter (if non-NULL) set to an autoreleased NSError describing the problem. In a successful case, the return value is the number of bytes written to the stream. + */ ++ (COPromise*)async_writePropertyList:(id)plist toStream:(NSOutputStream *)stream format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + +/* Create a property list from an NSData. The options can be any of NSPropertyListMutabilityOptions. If the format parameter is non-NULL, it will be filled out with the format that the property list was stored in. If an error occurs the return value will be nil and the error parameter (if non-NULL) set to an autoreleased NSError describing the problem. + */ ++ (COPromise*)async_propertyListWithData:(NSData *)data options:(NSPropertyListReadOptions)opt format:(nullable NSPropertyListFormat *)format API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + +/* Create a property list by reading from an NSInputStream. The options can be any of NSPropertyListMutabilityOptions. If the format parameter is non-NULL, it will be filled out with the format that the property list was stored in. If an error occurs the return value will be nil and the error parameter (if non-NULL) set to an autoreleased NSError describing the problem. + */ ++ (COPromise*)async_propertyListWithStream:(NSInputStream *)stream options:(NSPropertyListReadOptions)opt format:(nullable NSPropertyListFormat *)format API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + + + +@end + +@interface NSPropertyListSerialization (Coroutine) + +/* Verify that a specified property list is valid for a given format. Returns YES if the property list is valid. + */ ++ (BOOL)co_propertyList:(id)plist isValidForFormat:(NSPropertyListFormat)format CO_ASYNC; + +/* Create an NSData from a property list. The format can be either NSPropertyListXMLFormat_v1_0 or NSPropertyListBinaryFormat_v1_0. The options parameter is currently unused and should be set to 0. If an error occurs the return value will be nil and the error parameter (if non-NULL) set to an autoreleased NSError describing the problem. + */ ++ (NSData *)co_dataWithPropertyList:(id)plist format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + +/* Write a property list to an output stream. The stream should be opened and configured. The format can be either NSPropertyListXMLFormat_v1_0 or NSPropertyListBinaryFormat_v1_0. The options parameter is currently unused and should be set to 0. If an error occurs the return value will be 0 and the error parameter (if non-NULL) set to an autoreleased NSError describing the problem. In a successful case, the return value is the number of bytes written to the stream. + */ ++ (BOOL)co_writePropertyList:(id)plist toStream:(NSOutputStream *)stream format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + +/* Create a property list from an NSData. The options can be any of NSPropertyListMutabilityOptions. If the format parameter is non-NULL, it will be filled out with the format that the property list was stored in. If an error occurs the return value will be nil and the error parameter (if non-NULL) set to an autoreleased NSError describing the problem. + */ ++ (id)co_propertyListWithData:(NSData *)data options:(NSPropertyListReadOptions)opt format:(nullable NSPropertyListFormat *)format error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + +/* Create a property list by reading from an NSInputStream. The options can be any of NSPropertyListMutabilityOptions. If the format parameter is non-NULL, it will be filled out with the format that the property list was stored in. If an error occurs the return value will be nil and the error parameter (if non-NULL) set to an autoreleased NSError describing the problem. + */ ++ (id)co_propertyListWithStream:(NSInputStream *)stream options:(NSPropertyListReadOptions)opt format:(nullable NSPropertyListFormat *)format error:(NSError**)error CO_ASYNC API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + + + +@end + +NS_ASSUME_NONNULL_END diff --git a/cokit/cokit/Foundation/NSPropertyList+Coroutine.m b/cokit/cokit/Foundation/NSPropertyList+Coroutine.m new file mode 100644 index 0000000..9a03cce --- /dev/null +++ b/cokit/cokit/Foundation/NSPropertyList+Coroutine.m @@ -0,0 +1,158 @@ +// +// NSPropertyList+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "NSPropertyList+Coroutine.h" +#import "COKitCommon.h" + +@implementation NSPropertyListSerialization (COPromise) + ++ (COPromise *)async_propertyList:(id)plist isValidForFormat:(NSPropertyListFormat)format{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + BOOL ret = [self propertyList:plist isValidForFormat:format]; + resolve(@(ret)); + } backgroundQueue:[COKitCommon io_queue]]; + }]; +} + ++ (COPromise *)async_dataWithPropertyList:(id)plist format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSData *data = [self dataWithPropertyList:plist format:format options:opt error:&error]; + if (error) { + reject(error); + } + else{ + resolve(data); + } + } backgroundQueue:[COKitCommon io_queue]]; + }]; +} + ++ (COPromise *)async_writePropertyList:(id)plist toStream:(NSOutputStream *)stream format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSInteger ret = [self writePropertyList:plist toStream:stream format:format options:opt error:&error]; + if (error) { + reject(error); + } + else{ + resolve(@(ret)); + } + } backgroundQueue:[COKitCommon io_queue]]; + }]; +} + ++ (COPromise *)async_propertyListWithData:(NSData *)data options:(NSPropertyListReadOptions)opt format:(NSPropertyListFormat *)format{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + id obj = [self propertyListWithData:data options:opt format:format error:&error]; + if (error) { + reject(error); + } + else{ + resolve(obj); + } + } backgroundQueue:[COKitCommon io_queue]]; + }]; +} + ++ (COPromise *)async_propertyListWithStream:(NSInputStream *)stream options:(NSPropertyListReadOptions)opt format:(NSPropertyListFormat *)format{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + id obj = [self propertyListWithStream:stream options:opt format:format error:&error]; + if (error) { + reject(error); + } + else{ + resolve(obj); + } + } backgroundQueue:[COKitCommon io_queue]]; + }]; +} + +@end + +@implementation NSPropertyListSerialization (Coroutine) + ++ (BOOL)co_propertyList:(id)plist isValidForFormat:(NSPropertyListFormat)format{ + if ([COCoroutine currentCoroutine]) { + return [await([self async_propertyList:plist isValidForFormat:format]) boolValue]; + } + else{ + return [self propertyList:plist isValidForFormat:format]; + } +} + ++ (NSData *)co_dataWithPropertyList:(id)plist format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSData *data = await([self async_dataWithPropertyList:plist format:format options:opt]); + if (error) { + *error = co_getError(); + } + return data; + } + else{ + return [self dataWithPropertyList:plist format:format options:opt error:error]; + } +} + ++ (BOOL)co_writePropertyList:(id)plist toStream:(NSOutputStream *)stream format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_writePropertyList:plist toStream:stream format:format options:opt]) boolValue]; + if (error) { + *error = co_getError(); + } + return ret; + } + else{ + return [self writePropertyList:plist toStream:stream format:format options:opt error:error]; + } +} + ++ (id)co_propertyListWithData:(NSData *)data options:(NSPropertyListReadOptions)opt format:(NSPropertyListFormat *)format error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + id obj = await([self async_propertyListWithData:data options:opt format:format]); + if (error) { + *error = co_getError(); + } + return obj; + } + else{ + return [self propertyListWithData:data options:opt format:format error:error]; + } +} + ++ (id)co_propertyListWithStream:(NSInputStream *)stream options:(NSPropertyListReadOptions)opt format:(NSPropertyListFormat *)format error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + id obj = await([self async_propertyListWithStream:stream options:opt format:format]); + if (error) { + *error = co_getError(); + } + return obj; + } + else{ + return [self propertyListWithStream:stream options:opt format:format error:error]; + } +} + +@end diff --git a/cokit/cokit/Foundation/NSString+Coroutine.h b/cokit/cokit/Foundation/NSString+Coroutine.h new file mode 100644 index 0000000..9617559 --- /dev/null +++ b/cokit/cokit/Foundation/NSString+Coroutine.h @@ -0,0 +1,82 @@ +// +// NSString+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NSString (COPromise) + +/* These use the specified encoding. If nil is returned, the optional error return indicates problem that was encountered (for instance, file system or encoding errors). + */ +- (COPromise*)async_initWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc; +- (COPromise*)async_initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc; ++ (COPromise*)async_stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc; ++ (COPromise*)async_stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc; + + +/* These try to determine the encoding, and return the encoding which was used. Note that these methods might get "smarter" in subsequent releases of the system, and use additional techniques for recognizing encodings. If nil is returned, the optional error return indicates problem that was encountered (for instance, file system or encoding errors). + */ +- (COPromise*>*)async_initWithContentsOfURL:(NSURL *)url; +- (COPromise*>*)async_initWithContentsOfFile:(NSString *)path; ++ (COPromise*>*)async_stringWithContentsOfURL:(NSURL *)url; ++ (COPromise*>*)async_stringWithContentsOfFile:(NSString *)path; + + +/* Write to specified url or path using the specified encoding. The optional error return is to indicate file system or encoding errors. + */ +- (COPromise*)async_writeToURL:(NSURL *)url atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc; +- (COPromise*)async_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc; + + +- (COPromise*)async_stringToJSONObject; + +@end + +@interface NSString (Coroutine) + +/* These use the specified encoding. If nil is returned, the optional error return indicates problem that was encountered (for instance, file system or encoding errors). + */ +- (NSString*)co_initWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError**)error CO_ASYNC; +- (NSString*)co_initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError**)error CO_ASYNC; ++ (NSString*)co_stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError**)error CO_ASYNC; ++ (NSString*)co_stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError**)error CO_ASYNC; + + +/* These try to determine the encoding, and return the encoding which was used. Note that these methods might get "smarter" in subsequent releases of the system, and use additional techniques for recognizing encodings. If nil is returned, the optional error return indicates problem that was encountered (for instance, file system or encoding errors). + */ +- (NSString*)co_initWithContentsOfURL:(NSURL *)url usedEncoding:(nullable NSStringEncoding *)enc error:(NSError**)error CO_ASYNC; +- (NSString*)co_initWithContentsOfFile:(NSString *)path usedEncoding:(nullable NSStringEncoding *)enc error:(NSError**)error CO_ASYNC; ++ (NSString*)co_stringWithContentsOfURL:(NSURL *)url usedEncoding:(nullable NSStringEncoding *)enc error:(NSError**)error CO_ASYNC; ++ (NSString*)co_stringWithContentsOfFile:(NSString *)path usedEncoding:(nullable NSStringEncoding *)enc error:(NSError**)error CO_ASYNC; + + +/* Write to specified url or path using the specified encoding. The optional error return is to indicate file system or encoding errors. + */ +- (BOOL)co_writeToURL:(NSURL *)url atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError**)error; +- (BOOL)co_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError**)error; + +- (id)co_stringToJSONObject; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/cokit/cokit/Foundation/NSString+Coroutine.m b/cokit/cokit/Foundation/NSString+Coroutine.m new file mode 100644 index 0000000..53b00ef --- /dev/null +++ b/cokit/cokit/Foundation/NSString+Coroutine.m @@ -0,0 +1,375 @@ +// +// NSString+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "NSString+Coroutine.h" +#import + +@implementation NSString (COPromise) + +/* These use the specified encoding. If nil is returned, the optional error return indicates problem that was encountered (for instance, file system or encoding errors). + */ +- (COPromise*)async_initWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSString* str = [self initWithContentsOfURL:url encoding:enc error:&error]; + if (error) { + reject(error); + } + else{ + resolve(str); + } + } backgroundQueue:[COKitCommon io_queue]]; + }]; +} +- (COPromise*)async_initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSString* str = [self initWithContentsOfFile:path encoding:enc error:&error]; + if (error) { + reject(error); + } + else{ + resolve(str); + } + } backgroundQueue:[COKitCommon io_queue]]; + }]; +} ++ (COPromise*)async_stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSString* str = [self stringWithContentsOfURL:url encoding:enc error:&error]; + if (error) { + reject(error); + } + else{ + resolve(str); + } + } backgroundQueue:[COKitCommon io_queue]]; + }]; +} ++ (COPromise*)async_stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSString* str = [self stringWithContentsOfFile:path encoding:enc error:&error]; + if (error) { + reject(error); + } + else{ + resolve(str); + } + } backgroundQueue:[COKitCommon io_queue]]; + }]; +} + + +/* These try to determine the encoding, and return the encoding which was used. Note that these methods might get "smarter" in subsequent releases of the system, and use additional techniques for recognizing encodings. If nil is returned, the optional error return indicates problem that was encountered (for instance, file system or encoding errors). + */ +- (COPromise*>*)async_initWithContentsOfURL:(NSURL *)url{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSStringEncoding encoding = 0; + NSString* str = [self initWithContentsOfURL:url usedEncoding:&encoding error:&error]; + if (error) { + reject(error); + } + else{ + resolve(co_tuple(str, @(encoding))); + } + } backgroundQueue:[COKitCommon io_queue]]; + }]; +} +- (COPromise*>*)async_initWithContentsOfFile:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSStringEncoding encoding = 0; + NSString* str = [self initWithContentsOfFile:path usedEncoding:&encoding error:&error]; + if (error) { + reject(error); + } + else{ + resolve(co_tuple(str, @(encoding))); + } + } backgroundQueue:[COKitCommon io_queue]]; + }]; +} ++ (COPromise*>*)async_stringWithContentsOfURL:(NSURL *)url{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSStringEncoding encoding = 0; + NSString* str = [self stringWithContentsOfURL:url usedEncoding:&encoding error:&error]; + if (error) { + reject(error); + } + else{ + resolve(co_tuple(str, @(encoding))); + } + } backgroundQueue:[COKitCommon io_queue]]; + }]; +} ++ (COPromise*>*)async_stringWithContentsOfFile:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + NSStringEncoding encoding = 0; + NSString* str = [self stringWithContentsOfFile:path usedEncoding:&encoding error:&error]; + if (error) { + reject(error); + } + else{ + resolve(co_tuple(str, @(encoding))); + } + } backgroundQueue:[COKitCommon io_queue]]; + }]; +} + + +/* Write to specified url or path using the specified encoding. The optional error return is to indicate file system or encoding errors. + */ +- (COPromise*)async_writeToURL:(NSURL *)url atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self writeToURL:url atomically:useAuxiliaryFile encoding:enc error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon io_queue]]; + return promise; +} +- (COPromise*)async_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc{ + + COPromise *promise = [COPromise promise]; + [COKitCommon runBlockOnBackgroundThread:^{ + NSError *error = nil; + BOOL ret = [self writeToFile:path atomically:useAuxiliaryFile encoding:enc error:&error]; + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:@(ret)]; + } + } backgroundQueue:[COKitCommon io_queue]]; + return promise; +} + +- (COPromise*)async_stringToJSONObject{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlockOnBackgroundThread:^{ + @try{ + NSError *jsonError = nil; + id jsonObject = [NSJSONSerialization JSONObjectWithData:[self dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:&jsonError]; + if (!jsonError) { + resolve(jsonObject); + } + else{ + reject(jsonError); + } + } + @catch(NSException *e){ + reject([NSError errorWithDomain:@"jsonError" code:-1 userInfo:nil]); + } + } backgroundQueue:[COKitCommon json_queue]]; + }]; +} + +@end + +@implementation NSString (Coroutine) + +- (NSString *)co_initWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSString *result = await([self async_initWithContentsOfURL:url encoding:enc]); + if (error) { + *error = co_getError(); + } + return result; + } + else{ + return [self initWithContentsOfURL:url encoding:enc error:error]; + } +} + +- (NSString *)co_initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSString *result = await([self async_initWithContentsOfFile:path encoding:enc]); + if (error) { + *error = co_getError(); + } + return result; + } + else{ + return [self initWithContentsOfFile:path encoding:enc error:error]; + } +} + ++ (NSString *)co_stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSString *result = await([self async_stringWithContentsOfURL:url encoding:enc]); + if (error) { + *error = co_getError(); + } + return result; + } + else{ + return [self stringWithContentsOfURL:url encoding:enc error:error]; + } +} + ++ (NSString *)co_stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSString *result = await([self async_stringWithContentsOfFile:path encoding:enc]); + if (error) { + *error = co_getError(); + } + return result; + } + else{ + return [self stringWithContentsOfFile:path encoding:enc error:error]; + } +} + +- (NSString *)co_initWithContentsOfURL:(NSURL *)url usedEncoding:(NSStringEncoding *)enc error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSString *result = nil; + id encoding; + co_unpack(&result, &encoding) = await([self async_initWithContentsOfURL:url]); + if (error) { + *error = co_getError(); + } + if (enc) { + *enc = [encoding unsignedIntegerValue]; + } + return result; + } + else{ + return [self initWithContentsOfURL:url usedEncoding:enc error:error]; + } +} + +- (NSString *)co_initWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSString *result = nil; + id encoding; + co_unpack(&result, &encoding) = await([self async_initWithContentsOfFile:path]); + if (error) { + *error = co_getError(); + } + if (enc) { + *enc = [encoding unsignedIntegerValue]; + } + return result; + } + else{ + return [self initWithContentsOfFile:path usedEncoding:enc error:error]; + } +} + ++ (NSString *)co_stringWithContentsOfURL:(NSURL *)url usedEncoding:(NSStringEncoding *)enc error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSString *result = nil; + id encoding; + co_unpack(&result, &encoding) = await([self async_stringWithContentsOfURL:url]); + if (error) { + *error = co_getError(); + } + if (enc) { + *enc = [encoding unsignedIntegerValue]; + } + return result; + } + else{ + return [self stringWithContentsOfURL:url usedEncoding:enc error:error]; + } +} + ++ (NSString *)co_stringWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + NSString *result = nil; + id encoding; + co_unpack(&result, &encoding) = await([self async_stringWithContentsOfFile:path]); + if (error) { + *error = co_getError(); + } + if (enc) { + *enc = [encoding unsignedIntegerValue]; + } + return result; + } + else{ + return [self stringWithContentsOfFile:path usedEncoding:enc error:error]; + } +} + +- (BOOL)co_writeToURL:(NSURL *)url atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_writeToURL:url atomically:useAuxiliaryFile encoding:enc]) boolValue]; + if (error) { + *error = co_getError(); + } + return ret; + } + else{ + return [self writeToURL:url atomically:useAuxiliaryFile encoding:enc error:error]; + } +} + +- (BOOL)co_writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError * _Nullable __autoreleasing *)error{ + if ([COCoroutine currentCoroutine]) { + BOOL ret = [await([self async_writeToFile:path atomically:useAuxiliaryFile encoding:enc]) boolValue]; + if (error) { + *error = co_getError(); + } + return ret; + } + else{ + return [self writeToFile:path atomically:useAuxiliaryFile encoding:enc error:error]; + } +} + +- (id)co_stringToJSONObject{ + if ([COCoroutine currentCoroutine]) { + return await([self async_stringToJSONObject]); + } + else{ + @try{ + NSError *jsonError = nil; + id jsonObject = [NSJSONSerialization JSONObjectWithData:[self dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:&jsonError]; + if (!jsonError) { + return jsonObject; + } + else{ + return nil; + } + } + @catch(NSException *e){ + return nil; + } + } +} + +@end diff --git a/cokit/cokit/Foundation/NSURLConnection+Coroutine.h b/cokit/cokit/Foundation/NSURLConnection+Coroutine.h new file mode 100644 index 0000000..7cd5d9b --- /dev/null +++ b/cokit/cokit/Foundation/NSURLConnection+Coroutine.h @@ -0,0 +1,119 @@ +// +// NSURLConnection+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + + +@interface NSURLConnection (COPromise) + +/* + if any of the methods below report an error, you can call co_getError() to get the NSError object + */ + +/*! + @method sendAsynchronousRequest:queue:completionHandler: + + @abstract + Performs an asynchronous load of the given + request. When the request has completed or failed, + the block will be executed from the context of the + specified NSOperationQueue. + + @discussion + This is a convenience routine that allows for + asynchronous loading of an url based resource. If + the resource load is successful, the data parameter + to the callback will contain the resource data and + the error parameter will be nil. If the resource + load fails, the data parameter will be nil and the + error will contain information about the failure. + + @param + request The request to load. Note that the request is + deep-copied as part of the initialization + process. Changes made to the request argument after + this method returns do not affect the request that + is used for the loading process. + + @param + queue An NSOperationQueue upon which the handler block will + be dispatched. + */ ++ (COPromise*>*)async_sendAsynchronousRequest:(NSURLRequest*) request + queue:(NSOperationQueue*) queue; + ++ (COPromise*>*)async_sendAsynchronousRequest:(NSURLRequest*) request; + +@end + +@interface NSURLConnection (Coroutine) + +/* + if any of the methods below report an error, you can call co_getError() to get the NSError object + */ + +/*! + @method sendAsynchronousRequest:queue:completionHandler: + + @abstract + Performs an asynchronous load of the given + request. When the request has completed or failed, + the block will be executed from the context of the + specified NSOperationQueue. + + @discussion + This is a convenience routine that allows for + asynchronous loading of an url based resource. If + the resource load is successful, the data parameter + to the callback will contain the resource data and + the error parameter will be nil. If the resource + load fails, the data parameter will be nil and the + error will contain information about the failure. + + @param + request The request to load. Note that the request is + deep-copied as part of the initialization + process. Changes made to the request argument after + this method returns do not affect the request that + is used for the loading process. + + @param + queue An NSOperationQueue upon which the handler block will + be dispatched. + */ ++ (NSData*)co_sendAsynchronousRequest:(NSURLRequest*) request + queue:(NSOperationQueue*) queue + response:(NSURLResponse*_Nullable * _Nullable)response + error:(NSError**)error CO_ASYNC; + ++ (NSData*)co_sendAsynchronousRequest:(NSURLRequest*) request response:(NSURLResponse*_Nullable * _Nullable)response error:(NSError**)error CO_ASYNC; + ++ (NSData*)co_sendAsynchronousRequest:(NSURLRequest*) request error:(NSError**)error CO_ASYNC; + ++ (NSData*)co_sendAsynchronousRequest:(NSURLRequest*) request CO_ASYNC; + + + +@end + +NS_ASSUME_NONNULL_END diff --git a/cokit/cokit/Foundation/NSURLConnection+Coroutine.m b/cokit/cokit/Foundation/NSURLConnection+Coroutine.m new file mode 100644 index 0000000..f92b75e --- /dev/null +++ b/cokit/cokit/Foundation/NSURLConnection+Coroutine.m @@ -0,0 +1,76 @@ +// +// NSURLConnection+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "NSURLConnection+Coroutine.h" +#import "COKitCommon.h" + +@implementation NSURLConnection (COPromise) + ++ (COPromise *> *)async_sendAsynchronousRequest:(NSURLRequest *)request{ + return [self async_sendAsynchronousRequest:request queue:[COKitCommon urlconnection_queue]]; +} + ++ (COPromise *> *)async_sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { + if (connectionError) { + reject(connectionError); + } + else{ + resolve(co_tuple(response, data)); + } + }]; + }]; +} + +@end + +@implementation NSURLConnection (Coroutine) + ++ (NSData *)co_sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue response:(NSURLResponse *__autoreleasing _Nullable *)response error:(NSError * _Nullable __autoreleasing *)error{ + SURE_ASYNC + if ([COCoroutine currentCoroutine]) { + NSURLResponse *resp = nil; + NSData *data = nil; + co_unpack(&resp, &data) = await([self async_sendAsynchronousRequest:request queue:queue]); + if (error) { + *error = co_getError(); + } + if (response) { + *response = resp; + } + return data; + } + else{ + @throw [NSException exceptionWithName:@"CoroutineError" reason:@"co_sendAsynchronousRequest must run in coroutine" userInfo:nil]; + } +} + ++ (NSData *)co_sendAsynchronousRequest:(NSURLRequest *)request response:(NSURLResponse *__autoreleasing _Nullable *)response error:(NSError * _Nullable __autoreleasing *)error{ + return [self co_sendAsynchronousRequest:request queue:[COKitCommon urlconnection_queue] response:response error:error]; +} + ++ (NSData *)co_sendAsynchronousRequest:(NSURLRequest *)request error:(NSError * _Nullable __autoreleasing *)error{ + return [self co_sendAsynchronousRequest:request response:nil error:error]; +} + ++ (NSData *)co_sendAsynchronousRequest:(NSURLRequest *)request{ + return [self co_sendAsynchronousRequest:request error:nil]; +} + +@end diff --git a/cokit/cokit/Foundation/NSURLSession+Coroutine.h b/cokit/cokit/Foundation/NSURLSession+Coroutine.h new file mode 100644 index 0000000..9611cab --- /dev/null +++ b/cokit/cokit/Foundation/NSURLSession+Coroutine.h @@ -0,0 +1,99 @@ +// +// NSURLSession+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import +#import + + +NS_ASSUME_NONNULL_BEGIN + +@interface NSURLSession (COPromise) + +/* + if any of the methods below report an error, you can call async_getError() to get the NSError object + */ + +/* + * data task convenience methods. These methods create tasks that + * bypass the normal delegate calls for response and data delivery, + * and provide a simple cancelable asynchronous interface to receiving + * data. Errors will be returned in the NSURLErrorDomain, + * see . The delegate, if any, will still be + * called for authentication challenges. + */ +- (COPromise*>*)async_dataTaskWithRequest:(NSURLRequest *)request; + +- (COPromise*>*)async_dataTaskWithURL:(NSURL *)url; + +/* + * upload convenience method. + */ +- (COPromise*>*)async_uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL; +- (COPromise*>*)async_uploadTaskWithRequest:(NSURLRequest *)request fromData:(nullable NSData *)bodyData; + +/* + * download task convenience methods. When a download successfully + * completes, the NSURL will point to a file that must be read or + * copied during the invocation of the completion routine. The file + * will be removed automatically. + */ +- (COPromise*>*)async_downloadTaskWithRequest:(NSURLRequest *)request; +- (COPromise*>*)async_downloadTaskWithURL:(NSURL *)url; +- (COPromise*>*)async_downloadTaskWithResumeData:(NSData *)resumeData; + +@end + +@interface NSURLSession (Coroutine) + +/* + if any of the methods below report an error, you can call async_getError() to get the NSError object + */ + +/* + * data task convenience methods. These methods create tasks that + * bypass the normal delegate calls for response and data delivery, + * and provide a simple cancelable asynchronous interface to receiving + * data. Errors will be returned in the NSURLErrorDomain, + * see . The delegate, if any, will still be + * called for authentication challenges. + */ +- (NSData*)co_dataTaskWithRequest:(NSURLRequest *)request response:(NSURLResponse*_Nullable*_Nullable)response error:(NSError**)error CO_ASYNC; + +- (NSData*)co_dataTaskWithURL:(NSURL *)url response:(NSURLResponse*_Nullable*_Nullable)response error:(NSError**)error CO_ASYNC; + +/* + * upload convenience method. + */ +- (NSData*)co_uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL response:(NSURLResponse*_Nullable*_Nullable)response error:(NSError**)error CO_ASYNC; +- (NSData*)co_uploadTaskWithRequest:(NSURLRequest *)request fromData:(nullable NSData *)bodyData response:(NSURLResponse*_Nullable*_Nullable)response error:(NSError**)error CO_ASYNC; + +/* + * download task convenience methods. When a download successfully + * completes, the NSURL will point to a file that must be read or + * copied during the invocation of the completion routine. The file + * will be removed automatically. + */ +- (NSURL*)co_downloadTaskWithRequest:(NSURLRequest *)request response:(NSURLResponse*_Nullable*_Nullable)response error:(NSError**)error CO_ASYNC; +- (NSURL*)co_downloadTaskWithURL:(NSURL *)url response:(NSURLResponse*_Nullable*_Nullable)response error:(NSError**)error CO_ASYNC; +- (NSURL*)co_downloadTaskWithResumeData:(NSData *)resumeData response:(NSURLResponse*_Nullable*_Nullable)response error:(NSError**)error CO_ASYNC; + +@end + +NS_ASSUME_NONNULL_END diff --git a/cokit/cokit/Foundation/NSURLSession+Coroutine.m b/cokit/cokit/Foundation/NSURLSession+Coroutine.m new file mode 100644 index 0000000..d9ff86e --- /dev/null +++ b/cokit/cokit/Foundation/NSURLSession+Coroutine.m @@ -0,0 +1,287 @@ +// +// NSURLSession+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "NSURLSession+Coroutine.h" + +@implementation NSURLSession (COPromise) + +/* + * data task convenience methods. These methods create tasks that + * bypass the normal delegate calls for response and data delivery, + * and provide a simple cancelable asynchronous interface to receiving + * data. Errors will be returned in the NSURLErrorDomain, + * see . The delegate, if any, will still be + * called for authentication challenges. + */ +- (COPromise*>*)async_dataTaskWithRequest:(NSURLRequest *)request{ + COPromise *promise = [COPromise promise]; + + NSURLSessionDataTask *task = [self dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:co_tuple(data, response)]; + } + }]; + + [promise onCancel:^(COPromise * _Nonnull promise) { + [task cancel]; + }]; + + [task resume]; + + return promise; +} + +- (COPromise*>*)async_dataTaskWithURL:(NSURL *)url{ + COPromise *promise = [COPromise promise]; + + NSURLSessionDataTask *task = [self dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:co_tuple(data, response)]; + } + }]; + + [promise onCancel:^(COPromise * _Nonnull promise) { + [task cancel]; + }]; + + [task resume]; + + return promise; +} + +/* + * upload convenience method. + */ +- (COPromise*>*)async_uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL{ + COPromise *promise = [COPromise promise]; + + NSURLSessionUploadTask *task = [self uploadTaskWithRequest:request fromFile:fileURL completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:co_tuple(data, response)]; + } + }]; + + [promise onCancel:^(COPromise * _Nonnull promise) { + [task cancel]; + }]; + + [task resume]; + + return promise; +} +- (COPromise*>*)async_uploadTaskWithRequest:(NSURLRequest *)request fromData:(nullable NSData *)bodyData{ + COPromise *promise = [COPromise promise]; + + NSURLSessionUploadTask *task = [self uploadTaskWithRequest:request fromData:bodyData completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:co_tuple(data, response)]; + } + }]; + + [promise onCancel:^(COPromise * _Nonnull promise) { + [task cancel]; + }]; + + [task resume]; + + return promise; +} + +/* + * download task convenience methods. When a download successfully + * completes, the NSURL will point to a file that must be read or + * copied during the invocation of the completion routine. The file + * will be removed automatically. + */ +- (COPromise*>*)async_downloadTaskWithRequest:(NSURLRequest *)request{ + COPromise *promise = [COPromise promise]; + + NSURLSessionDownloadTask *task = [self downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) { + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:co_tuple(location, response)]; + } + }]; + + [promise onCancel:^(COPromise * _Nonnull promise) { + [task cancel]; + }]; + + [task resume]; + + return promise; +} +- (COPromise*>*)async_downloadTaskWithURL:(NSURL *)url{ + COPromise *promise = [COPromise promise]; + + NSURLSessionDownloadTask *task = [self downloadTaskWithURL:url completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) { + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:co_tuple(location, response)]; + } + }]; + + [promise onCancel:^(COPromise * _Nonnull promise) { + [task cancel]; + }]; + + [task resume]; + + return promise; +} +- (COPromise*>*)async_downloadTaskWithResumeData:(NSData *)resumeData{ + COPromise *promise = [COPromise promise]; + + NSURLSessionDownloadTask *task = [self downloadTaskWithResumeData:resumeData completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) { + if (error) { + [promise reject:error]; + } + else{ + [promise fulfill:co_tuple(location, response)]; + } + }]; + + [promise onCancel:^(COPromise * _Nonnull promise) { + [task cancel]; + }]; + + [task resume]; + + return promise; +} + + +@end + +@implementation NSURLSession (Coroutine) + +- (NSData *)co_dataTaskWithRequest:(NSURLRequest *)request response:(NSURLResponse *__autoreleasing _Nullable *)response error:(NSError * _Nullable __autoreleasing *)error{ + SURE_ASYNC + NSData *data = nil; + NSURLResponse *resp = nil; + co_unpack(&data, &resp) = await([self async_dataTaskWithRequest:request]); + if (error) { + *error = co_getError(); + } + if (response) { + *response = resp; + } + return data; +} + +- (NSData *)co_dataTaskWithURL:(NSURL *)url response:(NSURLResponse *__autoreleasing _Nullable *)response error:(NSError * _Nullable __autoreleasing *)error{ + SURE_ASYNC + NSData *data = nil; + NSURLResponse *resp = nil; + co_unpack(&data, &resp) = await([self async_dataTaskWithURL:url]); + if (error) { + *error = co_getError(); + } + if (response) { + *response = resp; + } + return data; +} + +- (NSData *)co_uploadTaskWithRequest:(NSURLRequest *)request fromData:(NSData *)bodyData response:(NSURLResponse *__autoreleasing _Nullable *)response error:(NSError * _Nullable __autoreleasing *)error{ + SURE_ASYNC + NSData *data = nil; + NSURLResponse *resp = nil; + co_unpack(&data, &resp) = await([self async_uploadTaskWithRequest:request fromData:bodyData]); + if (error) { + *error = co_getError(); + } + if (response) { + *response = resp; + } + return data; +} + +- (NSData *)co_uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL response:(NSURLResponse *__autoreleasing _Nullable *)response error:(NSError * _Nullable __autoreleasing *)error{ + SURE_ASYNC + NSData *data = nil; + NSURLResponse *resp = nil; + co_unpack(&data, &resp) = await([self async_uploadTaskWithRequest:request fromFile:fileURL]); + if (error) { + *error = co_getError(); + } + if (response) { + *response = resp; + } + return data; +} + +- (NSURL *)co_downloadTaskWithURL:(NSURL *)url response:(NSURLResponse *__autoreleasing _Nullable *)response error:(NSError * _Nullable __autoreleasing *)error{ + SURE_ASYNC + NSURL *fileURL = nil; + NSURLResponse *resp = nil; + co_unpack(&fileURL, &resp) = await([self async_downloadTaskWithURL:url]); + if (error) { + *error = co_getError(); + } + if (response) { + *response = resp; + } + return fileURL; +} + +- (NSURL *)co_downloadTaskWithRequest:(NSURLRequest *)request response:(NSURLResponse *__autoreleasing _Nullable *)response error:(NSError * _Nullable __autoreleasing *)error{ + SURE_ASYNC + NSURL *fileURL = nil; + NSURLResponse *resp = nil; + co_unpack(&fileURL, &resp) = await([self async_downloadTaskWithRequest:request]); + if (error) { + *error = co_getError(); + } + if (response) { + *response = resp; + } + return fileURL; +} + +- (NSURL *)co_downloadTaskWithResumeData:(NSData *)resumeData response:(NSURLResponse *__autoreleasing _Nullable *)response error:(NSError * _Nullable __autoreleasing *)error{ + SURE_ASYNC + NSURL *fileURL = nil; + NSURLResponse *resp = nil; + co_unpack(&fileURL, &resp) = await([self async_downloadTaskWithResumeData:resumeData]); + if (error) { + *error = co_getError(); + } + if (response) { + *response = resp; + } + return fileURL; +} + +@end diff --git a/cokit/cokit/Foundation/NSUserDefaults+Coroutine.h b/cokit/cokit/Foundation/NSUserDefaults+Coroutine.h new file mode 100644 index 0000000..6c5066f --- /dev/null +++ b/cokit/cokit/Foundation/NSUserDefaults+Coroutine.h @@ -0,0 +1,152 @@ +// +// NSUserDefaults+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + +NS_ASSUME_NONNULL_BEGIN + + +@interface NSUserDefaults (COPromise) + +/*! + -objectForKey: will search the receiver's search list for a default with the key 'defaultName' and return it. If another process has changed defaults in the search list, NSUserDefaults will automatically update to the latest values. If the key in question has been marked as ubiquitous via a Defaults Configuration File, the latest value may not be immediately available, and the registered value will be returned instead. + */ +- (COPromise*)async_objectForKey:(NSString *)defaultName; + +/*! + -setObject:forKey: immediately stores a value (or removes the value if nil is passed as the value) for the provided key in the search list entry for the receiver's suite name in the current user and any host, then asynchronously stores the value persistently, where it is made available to other processes. + */ +- (COPromise*)async_setObject:(nullable id)value forKey:(NSString *)defaultName; + +/// -removeObjectForKey: is equivalent to -[... setObject:nil forKey:defaultName] +- (COPromise*)async_removeObjectForKey:(NSString *)defaultName; + +/// -stringForKey: is equivalent to -objectForKey:, except that it will convert NSNumber values to their NSString representation. If a non-string non-number value is found, nil will be returned. +- (COPromise *)async_stringForKey:(NSString *)defaultName; + +/// -arrayForKey: is equivalent to -objectForKey:, except that it will return nil if the value is not an NSArray. +- (COPromise *)async_arrayForKey:(NSString *)defaultName; +/// -dictionaryForKey: is equivalent to -objectForKey:, except that it will return nil if the value is not an NSDictionary. +- (COPromise*> *)async_dictionaryForKey:(NSString *)defaultName; +/// -dataForKey: is equivalent to -objectForKey:, except that it will return nil if the value is not an NSData. +- (COPromise *)async_dataForKey:(NSString *)defaultName; +/// -stringForKey: is equivalent to -objectForKey:, except that it will return nil if the value is not an NSArray. Note that unlike -stringForKey:, NSNumbers are not converted to NSStrings. +- (COPromise*> *)async_stringArrayForKey:(NSString *)defaultName; + +/*! + -URLForKey: is equivalent to -objectForKey: except that it converts the returned value to an NSURL. If the value is an NSString path, then it will construct a file URL to that path. If the value is an archived URL from -setURL:forKey: it will be unarchived. If the value is absent or can't be converted to an NSURL, nil will be returned. + */ +- (COPromise *)async_URLForKey:(NSString *)defaultName API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + +/// -setInteger:forKey: is equivalent to -setObject:forKey: except that the value is converted from an NSInteger to an NSNumber. +- (COPromise*)async_setInteger:(NSInteger)value forKey:(NSString *)defaultName; +/// -setFloat:forKey: is equivalent to -setObject:forKey: except that the value is converted from a float to an NSNumber. +- (COPromise*)async_setFloat:(float)value forKey:(NSString *)defaultName; +/// -setDouble:forKey: is equivalent to -setObject:forKey: except that the value is converted from a double to an NSNumber. +- (COPromise*)async_setDouble:(double)value forKey:(NSString *)defaultName; +/// -setBool:forKey: is equivalent to -setObject:forKey: except that the value is converted from a BOOL to an NSNumber. +- (COPromise*)async_setBool:(BOOL)value forKey:(NSString *)defaultName; +/// -setURL:forKey is equivalent to -setObject:forKey: except that the value is archived to an NSData. Use -URLForKey: to retrieve values set this way. +- (COPromise*)async_setURL:(nullable NSURL *)url forKey:(NSString *)defaultName API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + +/*! + -synchronize is deprecated and will be marked with the NS_DEPRECATED macro in a future release. + + -synchronize blocks the calling thread until all in-progress set operations have completed. This is no longer necessary. Replacements for previous uses of -synchronize depend on what the intent of calling synchronize was. If you synchronized... + - ...before reading in order to fetch updated values: remove the synchronize call + - ...after writing in order to notify another program to read: the other program can use KVO to observe the default without needing to notify + - ...before exiting in a non-app (command line tool, agent, or daemon) process: call CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication) + - ...for any other reason: remove the synchronize call + */ +- (COPromise*)async_synchronize; + + +@end + +@interface NSUserDefaults (Coroutine) + + +/*! + -objectForKey: will search the receiver's search list for a default with the key 'defaultName' and return it. If another process has changed defaults in the search list, NSUserDefaults will automatically update to the latest values. If the key in question has been marked as ubiquitous via a Defaults Configuration File, the latest value may not be immediately available, and the registered value will be returned instead. + */ +- (id)co_objectForKey:(NSString *)defaultName CO_ASYNC; + +/*! + -setObject:forKey: immediately stores a value (or removes the value if nil is passed as the value) for the provided key in the search list entry for the receiver's suite name in the current user and any host, then asynchronously stores the value persistently, where it is made available to other processes. + */ +- (void)co_setObject:(nullable id)value forKey:(NSString *)defaultName CO_ASYNC; + +/// -removeObjectForKey: is equivalent to -[... setObject:nil forKey:defaultName] +- (void)co_removeObjectForKey:(NSString *)defaultName CO_ASYNC; + +/// -stringForKey: is equivalent to -objectForKey:, except that it will convert NSNumber values to their NSString representation. If a non-string non-number value is found, nil will be returned. +- (NSString*)co_stringForKey:(NSString *)defaultName CO_ASYNC; + +/// -arrayForKey: is equivalent to -objectForKey:, except that it will return nil if the value is not an NSArray. +- (NSArray*)co_arrayForKey:(NSString *)defaultName CO_ASYNC; +/// -dictionaryForKey: is equivalent to -objectForKey:, except that it will return nil if the value is not an NSDictionary. +- (NSDictionary *)co_dictionaryForKey:(NSString *)defaultName CO_ASYNC; +/// -dataForKey: is equivalent to -objectForKey:, except that it will return nil if the value is not an NSData. +- (NSData *)co_dataForKey:(NSString *)defaultName CO_ASYNC; +/// -stringForKey: is equivalent to -objectForKey:, except that it will return nil if the value is not an NSArray. Note that unlike -stringForKey:, NSNumbers are not converted to NSStrings. +- (NSArray *)co_stringArrayForKey:(NSString *)defaultName CO_ASYNC; +/*! + -integerForKey: is equivalent to -objectForKey:, except that it converts the returned value to an NSInteger. If the value is an NSNumber, the result of -integerValue will be returned. If the value is an NSString, it will be converted to NSInteger if possible. If the value is a boolean, it will be converted to either 1 for YES or 0 for NO. If the value is absent or can't be converted to an integer, 0 will be returned. + */ +- (NSInteger)co_integerForKey:(NSString *)defaultName CO_ASYNC; +/// -floatForKey: is similar to -integerForKey:, except that it returns a float, and boolean values will not be converted. +- (float)co_floatForKey:(NSString *)defaultName CO_ASYNC; +/// -doubleForKey: is similar to -integerForKey:, except that it returns a double, and boolean values will not be converted. +- (double)co_doubleForKey:(NSString *)defaultName CO_ASYNC; +/*! + -boolForKey: is equivalent to -objectForKey:, except that it converts the returned value to a BOOL. If the value is an NSNumber, NO will be returned if the value is 0, YES otherwise. If the value is an NSString, values of "YES" or "1" will return YES, and values of "NO", "0", or any other string will return NO. If the value is absent or can't be converted to a BOOL, NO will be returned. + + */ +- (BOOL)co_boolForKey:(NSString *)defaultName CO_ASYNC; +/*! + -URLForKey: is equivalent to -objectForKey: except that it converts the returned value to an NSURL. If the value is an NSString path, then it will construct a file URL to that path. If the value is an archived URL from -setURL:forKey: it will be unarchived. If the value is absent or can't be converted to an NSURL, nil will be returned. + */ +- (NSURL *)co_URLForKey:(NSString *)defaultName CO_ASYNC API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + +/// -setInteger:forKey: is equivalent to -setObject:forKey: except that the value is converted from an NSInteger to an NSNumber. +- (void)co_setInteger:(NSInteger)value forKey:(NSString *)defaultName CO_ASYNC; +/// -setFloat:forKey: is equivalent to -setObject:forKey: except that the value is converted from a float to an NSNumber. +- (void)co_setFloat:(float)value forKey:(NSString *)defaultName CO_ASYNC; +/// -setDouble:forKey: is equivalent to -setObject:forKey: except that the value is converted from a double to an NSNumber. +- (void)co_setDouble:(double)value forKey:(NSString *)defaultName CO_ASYNC; +/// -setBool:forKey: is equivalent to -setObject:forKey: except that the value is converted from a BOOL to an NSNumber. +- (void)co_setBool:(BOOL)value forKey:(NSString *)defaultName CO_ASYNC; +/// -setURL:forKey is equivalent to -setObject:forKey: except that the value is archived to an NSData. Use -URLForKey: to retrieve values set this way. +- (void)co_setURL:(nullable NSURL *)url forKey:(NSString *)defaultName CO_ASYNC API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0)); + +/*! + -synchronize is deprecated and will be marked with the NS_DEPRECATED macro in a future release. + + -synchronize blocks the calling thread until all in-progress set operations have completed. This is no longer necessary. Replacements for previous uses of -synchronize depend on what the intent of calling synchronize was. If you synchronized... + - ...before reading in order to fetch updated values: remove the synchronize call + - ...after writing in order to notify another program to read: the other program can use KVO to observe the default without needing to notify + - ...before exiting in a non-app (command line tool, agent, or daemon) process: call CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication) + - ...for any other reason: remove the synchronize call + */ +- (BOOL)co_synchronize CO_ASYNC; + +@end + +NS_ASSUME_NONNULL_END diff --git a/cokit/cokit/Foundation/NSUserDefaults+Coroutine.m b/cokit/cokit/Foundation/NSUserDefaults+Coroutine.m new file mode 100644 index 0000000..1d39b98 --- /dev/null +++ b/cokit/cokit/Foundation/NSUserDefaults+Coroutine.m @@ -0,0 +1,357 @@ +// +// NSUserDefaults+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "NSUserDefaults+Coroutine.h" +#import "COKitCommon.h" + +@implementation NSUserDefaults (COPromise) + +- (COPromise *)async_objectForKey:(NSString *)defaultName{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + id value = [self objectForKey:defaultName]; + resolve(value); + } onQueue:[COKitCommon userDefaults_queue]]; + }]; +} + +- (COPromise *)async_setObject:(id)value forKey:(NSString *)defaultName{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlock:^{ + [self setObject:value forKey:defaultName]; + [promise fulfill:nil]; + } onQueue:[COKitCommon userDefaults_queue]]; + return promise; +} + +- (COPromise *)async_removeObjectForKey:(NSString *)defaultName{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlock:^{ + [self removeObjectForKey:defaultName]; + [promise fulfill:nil]; + } onQueue:[COKitCommon userDefaults_queue]]; + return promise; +} + +- (COPromise *)async_stringForKey:(NSString *)defaultName{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + id value = [self stringForKey:defaultName]; + resolve(value); + } onQueue:[COKitCommon userDefaults_queue]]; + }]; +} + +- (COPromise *)async_arrayForKey:(NSString *)defaultName{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + id value = [self arrayForKey:defaultName]; + resolve(value); + } onQueue:[COKitCommon userDefaults_queue]]; + }]; +} + +- (COPromise *> *)async_dictionaryForKey:(NSString *)defaultName{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + id value = [self dictionaryForKey:defaultName]; + resolve(value); + } onQueue:[COKitCommon userDefaults_queue]]; + }]; +} + +- (COPromise *)async_dataForKey:(NSString *)defaultName{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + id value = [self dataForKey:defaultName]; + resolve(value); + } onQueue:[COKitCommon userDefaults_queue]]; + }]; +} + +- (COPromise *> *)async_stringArrayForKey:(NSString *)defaultName{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + id value = [self stringArrayForKey:defaultName]; + resolve(value); + } onQueue:[COKitCommon userDefaults_queue]]; + }]; +} + +- (COPromise *)async_URLForKey:(NSString *)defaultName{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + id value = [self URLForKey:defaultName]; + resolve(value); + } onQueue:[COKitCommon userDefaults_queue]]; + }]; +} + +- (COPromise *)async_setInteger:(NSInteger)value forKey:(NSString *)defaultName{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlock:^{ + [self setInteger:value forKey:defaultName]; + [promise fulfill:nil]; + } onQueue:[COKitCommon userDefaults_queue]]; + return promise; +} + +- (COPromise *)async_setFloat:(float)value forKey:(NSString *)defaultName{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlock:^{ + [self setFloat:value forKey:defaultName]; + [promise fulfill:nil]; + } onQueue:[COKitCommon userDefaults_queue]]; + return promise; +} + +- (COPromise *)async_setDouble:(double)value forKey:(NSString *)defaultName{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlock:^{ + [self setDouble:value forKey:defaultName]; + [promise fulfill:nil]; + } onQueue:[COKitCommon userDefaults_queue]]; + return promise; +} + +- (COPromise *)async_setBool:(BOOL)value forKey:(NSString *)defaultName{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlock:^{ + [self setBool:value forKey:defaultName]; + [promise fulfill:nil]; + } onQueue:[COKitCommon userDefaults_queue]]; + return promise; +} + +- (COPromise *)async_setURL:(NSURL *)url forKey:(NSString *)defaultName{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlock:^{ + [self setURL:url forKey:defaultName]; + [promise fulfill:nil]; + } onQueue:[COKitCommon userDefaults_queue]]; + return promise; +} + +- (COPromise *)async_synchronize{ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlock:^{ + [promise fulfill:@([self synchronize])]; + } onQueue:[COKitCommon userDefaults_queue]]; + return promise; +} + +@end + +@implementation NSUserDefaults (Coroutine) + +- (id)co_objectForKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + return await([self async_objectForKey:defaultName]); + } + else{ + return [self objectForKey:defaultName]; + } +} + +- (void)co_setObject:(id)value forKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + await([self async_setObject:value forKey:defaultName]); + } + else{ + [self setObject:value forKey:defaultName]; + } +} + +- (void)co_removeObjectForKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + await([self async_removeObjectForKey:defaultName]); + } + else{ + [self removeObjectForKey:defaultName]; + } +} + +- (NSString *)co_stringForKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + return await([self async_stringForKey:defaultName]); + } + else{ + return [self stringForKey:defaultName]; + } +} + +- (NSArray *)co_arrayForKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + return await([self async_arrayForKey:defaultName]); + } + else{ + return [self arrayForKey:defaultName]; + } +} + +- (NSDictionary *)co_dictionaryForKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + return await([self async_dictionaryForKey:defaultName]); + } + else{ + return [self dictionaryForKey:defaultName]; + } +} + +- (NSData *)co_dataForKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + return await([self async_dataForKey:defaultName]); + } + else{ + return [self dataForKey:defaultName]; + } +} + +- (NSArray *)co_stringArrayForKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + return await([self async_stringArrayForKey:defaultName]); + } + else{ + return [self stringArrayForKey:defaultName]; + } +} + +- (NSInteger)co_integerForKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + COPromise *promise = [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + NSInteger value = [self integerForKey:defaultName]; + resolve(@(value)); + } onQueue:[COKitCommon userDefaults_queue]]; + }]; + return [await(promise) integerValue]; + } + else{ + return [self integerForKey:defaultName]; + } +} + +- (float)co_floatForKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + COPromise *promise = [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + float value = [self floatForKey:defaultName]; + resolve(@(value)); + } onQueue:[COKitCommon userDefaults_queue]]; + }]; + return [await(promise) floatValue]; + } + else{ + return [self floatForKey:defaultName]; + } +} + +- (double)co_doubleForKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + COPromise *promise = [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + double value = [self doubleForKey:defaultName]; + resolve(@(value)); + } onQueue:[COKitCommon userDefaults_queue]]; + }]; + return [await(promise) doubleValue]; + } + else{ + return [self doubleForKey:defaultName]; + } +} + +- (BOOL)co_boolForKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + COPromise *promise = [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + BOOL value = [self boolForKey:defaultName]; + resolve(@(value)); + } onQueue:[COKitCommon userDefaults_queue]]; + }]; + return [await(promise) boolValue]; + } + else{ + return [self boolForKey:defaultName]; + } +} + +- (NSURL *)co_URLForKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + return await([self async_URLForKey:defaultName]); + } + else{ + return [self URLForKey:defaultName]; + } +} + +- (void)co_setInteger:(NSInteger)value forKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + await([self async_setInteger:value forKey:defaultName]); + } + else{ + [self setInteger:value forKey:defaultName]; + } +} + +- (void)co_setDouble:(double)value forKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + await([self async_setDouble:value forKey:defaultName]); + } + else{ + [self setDouble:value forKey:defaultName]; + } +} + +- (void)co_setFloat:(float)value forKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + await([self async_setFloat:value forKey:defaultName]); + } + else{ + [self setFloat:value forKey:defaultName]; + } +} + +- (void)co_setBool:(BOOL)value forKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + await([self async_setBool:value forKey:defaultName]); + } + else{ + [self setBool:value forKey:defaultName]; + } +} + +- (void)co_setURL:(NSURL *)url forKey:(NSString *)defaultName{ + if ([COCoroutine currentCoroutine]) { + await([self async_setURL:url forKey:defaultName]); + } + else{ + [self setURL:url forKey:defaultName]; + } +} + +- (BOOL)co_synchronize{ + if ([COCoroutine currentCoroutine]) { + return [await([self async_synchronize]) boolValue]; + } + else{ + return [self synchronize]; + } +} + +@end diff --git a/cokit/cokit/Foundation/NSXMLParser+Coroutine.h b/cokit/cokit/Foundation/NSXMLParser+Coroutine.h new file mode 100644 index 0000000..f88af50 --- /dev/null +++ b/cokit/cokit/Foundation/NSXMLParser+Coroutine.h @@ -0,0 +1,101 @@ +// +// NSXMLParser+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import + +NS_ASSUME_NONNULL_BEGIN + +#define COXMLParserCancelledError 200 + +typedef NS_ENUM(NSUInteger, COXMLItemType) { + COXMLItemStart = 1, + COXMLItemEnd = 2, + COXMLItemNotation, + COXMLItemUnparsedEntity, + COXMLItemAttribute, + COXMLItemElement, + COXMLItemInternalEntity, + COXMLItemExternalEntity, + COXMLItemDidStartElement, + COXMLItemDidEndElement, + COXMLItemDidStartMapping, + COXMLItemDidEndMapping, + COXMLItemCharacters, + COXMLItemIgnorableWhitespace, + COXMLItemProcessingInstruction, + COXMLItemComment, + COXMLItemCDATA, + COXMLItemError, +}; + +@interface COXMLItem: NSObject + +@property (nonatomic, assign) COXMLItemType itemType; + +@property (nonatomic, strong) NSString *name; +@property (nonatomic, strong) NSString *publicID; +@property (nonatomic, strong) NSString *systemID; +@property (nonatomic, strong) NSString *notationName; + +@property (nonatomic, strong) NSString *attributeName; +@property (nonatomic, strong) NSString *attributeType; +@property (nonatomic, strong) NSString *defaultValue; + +@property (nonatomic, strong) NSString *elementName; +@property (nonatomic, strong) NSString *elementModel; + +@property (nonatomic, strong) NSString *value; + +@property (nonatomic, strong) NSString *namespaceURI; +@property (nonatomic, strong) NSString *qualifiedName; +@property (nonatomic, strong) NSDictionary *attributes; + +@property (nonatomic, strong) NSString *mappingPrefix; + +@property (nonatomic, strong) NSString *characters; + +@property (nonatomic, strong) NSString *whitespaceString; + +@property (nonatomic, strong) NSString *target; +@property (nonatomic, strong) NSString *data; + +@property (nonatomic, strong) NSString *comment; +@property (nonatomic, strong) NSData *CDATABlock; + +@property (nonatomic, strong) NSError *error; + ++ (instancetype)makeStartItem; ++ (instancetype)makeEndItem; ++ (instancetype)makeErrorItem:(NSError*)error; + +@end + +@interface NSXMLParser (Coroutine) + +- (COCoroutine*)co_parse; + ++ (COCoroutine*)co_parseContentsOfURL:(NSURL*)url; + ++ (COCoroutine*)co_parseData:(NSData*)data; + ++ (COCoroutine*)co_parseStream:(NSInputStream*)stream; + +@end + +NS_ASSUME_NONNULL_END diff --git a/cokit/cokit/Foundation/NSXMLParser+Coroutine.m b/cokit/cokit/Foundation/NSXMLParser+Coroutine.m new file mode 100644 index 0000000..16da2ce --- /dev/null +++ b/cokit/cokit/Foundation/NSXMLParser+Coroutine.m @@ -0,0 +1,284 @@ +// +// NSXMLParser+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "NSXMLParser+Coroutine.h" +#import "COKitCommon.h" + +#define CO_XML_CHECK_CANCEL() \ +if (!co_isActive) { \ +[parser abortParsing]; \ +yield_val([COXMLItem makeErrorItem:[NSError errorWithDomain:NSXMLParserErrorDomain code:COXMLParserCancelledError userInfo:@{NSLocalizedDescriptionKey:@"parse cancelled"}]]); \ +return; \ +} + +@implementation COXMLItem + ++ (instancetype)makeStartItem{ + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemStart; + return item; +} + ++ (instancetype)makeEndItem{ + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemEnd; + return item; +} + ++ (instancetype)makeErrorItem:(NSError *)error{ + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemError; + item.error = error; + return item; +} + +@end + +@interface COXMLParserDelegate: NSObject + ++ (instancetype)sharedDelegate; + +@end + +@implementation COXMLParserDelegate + ++ (instancetype)sharedDelegate{ + static COXMLParserDelegate *instance = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + instance = [[COXMLParserDelegate alloc] init]; + }); + return instance; +} + +// Document handling methods +- (void)parserDidStartDocument:(NSXMLParser *)parser{ + CO_XML_CHECK_CANCEL() + yield_val([COXMLItem makeStartItem]); +} +// sent when the parser begins parsing of the document. +- (void)parserDidEndDocument:(NSXMLParser *)parser{ + CO_XML_CHECK_CANCEL() + yield_val([COXMLItem makeEndItem]); +} +// sent when the parser has completed parsing. If this is encountered, the parse was successful. + + +// DTD handling methods for various declarations. +- (void)parser:(NSXMLParser *)parser foundNotationDeclarationWithName:(NSString *)name publicID:(nullable NSString *)publicID systemID:(nullable NSString *)systemID{ + CO_XML_CHECK_CANCEL() + COXMLItem *item = [[COXMLItem alloc] init]; + item.name = name; + item.publicID = publicID; + item.itemType = COXMLItemNotation; + item.systemID = systemID; + yield_val(item); +} + +- (void)parser:(NSXMLParser *)parser foundUnparsedEntityDeclarationWithName:(NSString *)name publicID:(nullable NSString *)publicID systemID:(nullable NSString *)systemID notationName:(nullable NSString *)notationName{ + CO_XML_CHECK_CANCEL() + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemUnparsedEntity; + item.name = name; + item.publicID = publicID; + item.systemID = systemID; + item.notationName = notationName; + yield_val(item); +} + +- (void)parser:(NSXMLParser *)parser foundAttributeDeclarationWithName:(NSString *)attributeName forElement:(NSString *)elementName type:(nullable NSString *)type defaultValue:(nullable NSString *)defaultValue{ + CO_XML_CHECK_CANCEL() + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemAttribute; + item.attributeName = attributeName; + item.elementName = elementName; + item.attributeType = type; + item.defaultValue = defaultValue; + yield_val(item); +} + +- (void)parser:(NSXMLParser *)parser foundElementDeclarationWithName:(NSString *)elementName model:(NSString *)model{ + CO_XML_CHECK_CANCEL() + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemElement; + item.elementName = elementName; + item.elementModel = model; + yield_val(item); +} + +- (void)parser:(NSXMLParser *)parser foundInternalEntityDeclarationWithName:(NSString *)name value:(nullable NSString *)value{ + CO_XML_CHECK_CANCEL() + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemInternalEntity; + item.name = name; + item.value = value; + yield_val(item); +} + +- (void)parser:(NSXMLParser *)parser foundExternalEntityDeclarationWithName:(NSString *)name publicID:(nullable NSString *)publicID systemID:(nullable NSString *)systemID{ + CO_XML_CHECK_CANCEL() + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemExternalEntity; + item.name = name; + item.publicID = publicID; + item.systemID = systemID; + yield_val(item); +} + +- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary *)attributeDict{ + CO_XML_CHECK_CANCEL() + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemDidStartElement; + item.elementName = elementName; + item.namespaceURI = namespaceURI; + item.qualifiedName = qName; + item.attributes = attributeDict; + yield_val(item); +} +// sent when the parser finds an element start tag. +// In the case of the cvslog tag, the following is what the delegate receives: +// elementName == cvslog, namespaceURI == http://xml.apple.com/cvslog, qualifiedName == cvslog +// In the case of the radar tag, the following is what's passed in: +// elementName == radar, namespaceURI == http://xml.apple.com/radar, qualifiedName == radar:radar +// If namespace processing >isn't< on, the xmlns:radar="http://xml.apple.com/radar" is returned as an attribute pair, the elementName is 'radar:radar' and there is no qualifiedName. + +- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName{ + CO_XML_CHECK_CANCEL() + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemDidEndElement; + item.elementName = elementName; + item.namespaceURI = namespaceURI; + item.qualifiedName = qName; + yield_val(item); +} +// sent when an end tag is encountered. The various parameters are supplied as above. + +- (void)parser:(NSXMLParser *)parser didStartMappingPrefix:(NSString *)prefix toURI:(NSString *)namespaceURI{ + CO_XML_CHECK_CANCEL() + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemDidStartMapping; + item.mappingPrefix = prefix; + item.namespaceURI = namespaceURI; + yield_val(item); +} +// sent when the parser first sees a namespace attribute. +// In the case of the cvslog tag, before the didStartElement:, you'd get one of these with prefix == @"" and namespaceURI == @"http://xml.apple.com/cvslog" (i.e. the default namespace) +// In the case of the radar:radar tag, before the didStartElement: you'd get one of these with prefix == @"radar" and namespaceURI == @"http://xml.apple.com/radar" + +- (void)parser:(NSXMLParser *)parser didEndMappingPrefix:(NSString *)prefix{ + CO_XML_CHECK_CANCEL() + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemDidEndMapping; + item.mappingPrefix = prefix; + yield_val(item); +} +// sent when the namespace prefix in question goes out of scope. + +- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ + CO_XML_CHECK_CANCEL() + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemCharacters; + item.characters = string; + yield_val(item); +} +// This returns the string of the characters encountered thus far. You may not necessarily get the longest character run. The parser reserves the right to hand these to the delegate as potentially many calls in a row to -parser:foundCharacters: + +- (void)parser:(NSXMLParser *)parser foundIgnorableWhitespace:(NSString *)whitespaceString{ + CO_XML_CHECK_CANCEL() + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemIgnorableWhitespace; + item.whitespaceString = whitespaceString; + yield_val(item); +} +// The parser reports ignorable whitespace in the same way as characters it's found. + +- (void)parser:(NSXMLParser *)parser foundProcessingInstructionWithTarget:(NSString *)target data:(nullable NSString *)data{ + CO_XML_CHECK_CANCEL() + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemProcessingInstruction; + item.target = target; + item.data = data; + yield_val(item); +} +// The parser reports a processing instruction to you using this method. In the case above, target == @"xml-stylesheet" and data == @"type='text/css' href='cvslog.css'" + +- (void)parser:(NSXMLParser *)parser foundComment:(NSString *)comment{ + CO_XML_CHECK_CANCEL() + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemComment; + item.comment = comment; + yield_val(item); +} +// A comment (Text in a block) is reported to the delegate as a single string + +- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock{ + CO_XML_CHECK_CANCEL() + COXMLItem *item = [[COXMLItem alloc] init]; + item.itemType = COXMLItemCDATA; + item.CDATABlock = CDATABlock; + yield_val(item); +} +//// this reports a CDATA block to the delegate as an NSData. +// +//- (nullable NSData *)parser:(NSXMLParser *)parser resolveExternalEntityName:(NSString *)name systemID:(nullable NSString *)systemID{ +// COXMLItem *item = [[COXMLItem alloc] init]; +// item.itemType = COXMLItemExternalEntity; +// item.name = name; +// item.systemID = systemID; +// yield_val(item); +//} +// this gives the delegate an opportunity to resolve an external entity itself and reply with the resulting data. + +- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{ + CO_XML_CHECK_CANCEL() + yield_val([COXMLItem makeErrorItem:parseError]); +} +// ...and this reports a fatal error to the delegate. The parser will stop parsing. + +- (void)parser:(NSXMLParser *)parser validationErrorOccurred:(NSError *)validationError{ + CO_XML_CHECK_CANCEL() + yield_val([COXMLItem makeErrorItem:validationError]); +} +// If validation is on, this will report a fatal validation error to the delegate. The parser will stop parsing. + +@end + + +@implementation NSXMLParser (Coroutine) + +- (COCoroutine*)co_parse{ + return co_sequence_onqueue([COKitCommon io_queue], ^{ + self.delegate = [COXMLParserDelegate sharedDelegate]; + [self parse]; + }); + +} + ++ (COCoroutine*)co_parseContentsOfURL:(NSURL*)url{ + return [[[NSXMLParser alloc] initWithContentsOfURL:url] co_parse]; +} + ++ (COCoroutine*)co_parseData:(NSData*)data{ + return [[[NSXMLParser alloc] initWithData:data] co_parse]; +} + ++ (COCoroutine*)co_parseStream:(NSInputStream*)stream{ + return [[[NSXMLParser alloc] initWithStream:stream] co_parse]; +} + +@end diff --git a/cokit/cokit/Info.plist b/cokit/cokit/Info.plist new file mode 100644 index 0000000..dff01b8 --- /dev/null +++ b/cokit/cokit/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + com.taobao.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/cokit/cokit/UIKit/UIAlertController+Coroutine.h b/cokit/cokit/UIKit/UIAlertController+Coroutine.h new file mode 100644 index 0000000..c1d8cee --- /dev/null +++ b/cokit/cokit/UIKit/UIAlertController+Coroutine.h @@ -0,0 +1,47 @@ +// +// UIAlertController+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import + +NS_ASSUME_NONNULL_BEGIN + + +@interface UIAlertController (Coroutine) + +// build an UIAlertView style controller ++ (instancetype)co_alertWithTitle:(nullable NSString*)title + message:(nullable NSString*)message + cancelButtonTitle:(nullable NSString *)cancelButtonTitle otherButtonTitles:(nullable NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION; + +// build an UIActionSheet style controller ++ (instancetype)co_actionSheetWithTitle:(nullable NSString*)title + cancelButtonTitle:(nullable NSString *)cancelButtonTitle + destructiveButtonTitle:(nullable NSString *)destructiveButtonTitle + otherButtonTitles:(nullable NSString *)otherButtonTitles, ...; + +// present from keyWindow rootViewController +- (COPromise*)co_present; + +// present from viewController +- (COPromise*)co_presentFromController:(UIViewController*)viewController; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/cokit/cokit/UIKit/UIAlertController+Coroutine.m b/cokit/cokit/UIKit/UIAlertController+Coroutine.m new file mode 100644 index 0000000..80b05bb --- /dev/null +++ b/cokit/cokit/UIKit/UIAlertController+Coroutine.m @@ -0,0 +1,145 @@ +// +// UIAlertController+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "UIAlertController+Coroutine.h" +#import + +static char coPromiseKey; + + +@implementation UIAlertController (Coroutine) + +- (void) co_set_promise:(COPromise*)promise{ + objc_setAssociatedObject(self, &coPromiseKey, promise, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (COPromise*)co_get_promise{ + return objc_getAssociatedObject(self, &coPromiseKey); +} + +// build an UIAlertView style controller ++ (instancetype)co_alertWithTitle:(NSString*)title + message:(NSString*)message + cancelButtonTitle:(nullable NSString *)cancelButtonTitle otherButtonTitles:(nullable NSString *)otherButtonTitles, ...{ + UIAlertController *controller = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; + + COPromise *promise = [COPromise promise]; + + if(cancelButtonTitle.length > 0){ + [controller addAction:[UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + [promise fulfill:action.title]; + }]]; + } + + if(otherButtonTitles.length > 0){ + [controller addAction:[UIAlertAction actionWithTitle:otherButtonTitles style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [promise fulfill:action.title]; + }]]; + } + + + if (otherButtonTitles) { + va_list args; + va_start(args, otherButtonTitles); + while (YES) + { + NSString *title = va_arg(args, NSString *); + if (title == nil) { + break; + } + + [controller addAction:[UIAlertAction actionWithTitle:title style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [promise fulfill:action.title]; + }]]; + } + va_end(args); + } + + + + [controller co_set_promise:promise]; + + return controller; +} + +// build an UIActionSheet style controller ++ (instancetype)co_actionSheetWithTitle:(NSString*)title + cancelButtonTitle:(nullable NSString *)cancelButtonTitle + destructiveButtonTitle:(nullable NSString *)destructiveButtonTitle + otherButtonTitles:(nullable NSString *)otherButtonTitles, ...{ + UIAlertController *controller = [UIAlertController alertControllerWithTitle:title message:nil preferredStyle:UIAlertControllerStyleActionSheet]; + + COPromise *promise = [COPromise promise]; + + if(cancelButtonTitle.length > 0){ + [controller addAction:[UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + [promise fulfill:action.title]; + }]]; + } + + if(destructiveButtonTitle.length > 0){ + [controller addAction:[UIAlertAction actionWithTitle:destructiveButtonTitle style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) { + [promise fulfill:action.title]; + }]]; + } + + if(otherButtonTitles.length > 0){ + [controller addAction:[UIAlertAction actionWithTitle:otherButtonTitles style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [promise fulfill:action.title]; + }]]; + } + + va_list args; + va_start(args, otherButtonTitles); + while (YES) + { + NSString *title = va_arg(args, NSString *); + if (title == nil) { + break; + } + + [controller addAction:[UIAlertAction actionWithTitle:title style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [promise fulfill:action.title]; + }]]; + } + va_end(args); + + [controller co_set_promise:promise]; + + return controller; +} + +// present from keyWindow rootViewController +- (COPromise*)co_present{ + + [[[UIApplication sharedApplication] keyWindow].rootViewController presentViewController:self animated:YES completion:^{ + + }]; + + return [self co_get_promise]; +} + +// present from viewController +- (COPromise*)co_presentFromController:(UIViewController*)viewController{ + [viewController presentViewController:self animated:YES completion:^{ + + }]; + return [self co_get_promise]; +} + +@end diff --git a/cokit/cokit/UIKit/UIApplication+Coroutine.h b/cokit/cokit/UIKit/UIApplication+Coroutine.h new file mode 100644 index 0000000..2359c2e --- /dev/null +++ b/cokit/cokit/UIKit/UIApplication+Coroutine.h @@ -0,0 +1,30 @@ +// +// UIApplication+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface UIApplication (Coroutine) + +- (BOOL)co_openURL:(NSURL *)url options:(NSDictionary *)options CO_ASYNC; + +@end + +NS_ASSUME_NONNULL_END diff --git a/cokit/cokit/UIKit/UIApplication+Coroutine.m b/cokit/cokit/UIKit/UIApplication+Coroutine.m new file mode 100644 index 0000000..6d3c29e --- /dev/null +++ b/cokit/cokit/UIKit/UIApplication+Coroutine.m @@ -0,0 +1,44 @@ +// +// UIApplication+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "UIApplication+Coroutine.h" + +@implementation UIApplication (Coroutine) + +- (BOOL)co_openURL:(NSURL *)url options:(NSDictionary *)options{ + if (@available(iOS 10.0, *)) { + SURE_ASYNC + COPromise *promise = [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + if (@available(iOS 10.0, *)) { + [self openURL:url options:options completionHandler:^(BOOL success) { + resolve(@(success)); + }]; + } else { + // Fallback on earlier versions + resolve(@(NO)); + } + }]; + id value = await(promise); + return [value boolValue]; + } else { + return [self openURL:url]; + } + +} + +@end diff --git a/cokit/cokit/UIKit/UIImage+Coroutine.h b/cokit/cokit/UIKit/UIImage+Coroutine.h new file mode 100644 index 0000000..07c51e7 --- /dev/null +++ b/cokit/cokit/UIKit/UIImage+Coroutine.h @@ -0,0 +1,65 @@ +// +// UIImage+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface UIImage (COPromise) + ++ (COPromise*)async_imageNamed:(NSString *)name; // load from main bundle +#if __has_include() ++ (COPromise*)async_imageNamed:(NSString *)name inBundle:(nullable NSBundle *)bundle compatibleWithTraitCollection:(nullable UITraitCollection *)traitCollection NS_AVAILABLE_IOS(8_0); +#endif + ++ (COPromise*)async_imageWithContentsOfFile:(NSString *)path; ++ (COPromise*)async_imageWithData:(NSData *)data; ++ (COPromise*)async_imageWithData:(NSData *)data scale:(CGFloat)scale NS_AVAILABLE_IOS(6_0); + +- (COPromise*)async_initWithContentsOfFile:(NSString *)path; +- (COPromise*)async_initWithData:(NSData *)data; +- (COPromise*)async_initWithData:(NSData *)data scale:(CGFloat)scale NS_AVAILABLE_IOS(6_0); + +@end + +@interface UIImage (Coroutine) + ++ (UIImage *)co_imageNamed:(NSString *)name; // load from main bundle +#if __has_include() ++ (UIImage *)co_imageNamed:(NSString *)name inBundle:(nullable NSBundle *)bundle compatibleWithTraitCollection:(nullable UITraitCollection *)traitCollection NS_AVAILABLE_IOS(8_0); +#endif + ++ (UIImage *)co_imageWithContentsOfFile:(NSString *)path; ++ (UIImage *)co_imageWithData:(NSData *)data; ++ (UIImage *)co_imageWithData:(NSData *)data scale:(CGFloat)scale NS_AVAILABLE_IOS(6_0); + +- (UIImage *)co_initWithContentsOfFile:(NSString *)path; +- (UIImage *)co_initWithData:(NSData *)data; +- (UIImage *)co_initWithData:(NSData *)data scale:(CGFloat)scale NS_AVAILABLE_IOS(6_0); + +@end + +COPromise* async_UIImagePNGRepresentation(UIImage * __nonnull image); // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format +COPromise* async_UIImageJPEGRepresentation(UIImage * __nonnull image, CGFloat compressionQuality); // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least) + + +NSData * co_UIImagePNGRepresentation(UIImage * __nonnull image); // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format +NSData * co_UIImageJPEGRepresentation(UIImage * __nonnull image, CGFloat compressionQuality); // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least) + +NS_ASSUME_NONNULL_END diff --git a/cokit/cokit/UIKit/UIImage+Coroutine.m b/cokit/cokit/UIKit/UIImage+Coroutine.m new file mode 100644 index 0000000..5c8946c --- /dev/null +++ b/cokit/cokit/UIKit/UIImage+Coroutine.m @@ -0,0 +1,260 @@ +// +// UIImage+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "UIImage+Coroutine.h" +#import "COKitCommon.h" +#import + +@implementation UIImage (Coroutine) + ++ (UIImage *)co_imageNamed:(NSString *)name{ + if ([COCoroutine currentCoroutine]) { + return await([self async_imageNamed:name]); + } + else{ + return [self imageNamed:name]; + } +} + +#if __has_include() ++ (UIImage *)co_imageNamed:(NSString *)name inBundle:(NSBundle *)bundle compatibleWithTraitCollection:(UITraitCollection *)traitCollection{ + if ([COCoroutine currentCoroutine]) { + return await([self async_imageNamed:name inBundle:bundle compatibleWithTraitCollection:traitCollection]); + } + else{ + return [self imageNamed:name inBundle:bundle compatibleWithTraitCollection:traitCollection]; + } +} +#endif + ++ (UIImage *)co_imageWithContentsOfFile:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return await([self async_imageWithContentsOfFile:path]); + } + else{ + return [self imageWithContentsOfFile:path]; + } +} + ++ (UIImage *)co_imageWithData:(NSData *)data{ + if ([COCoroutine currentCoroutine]) { + return await([self async_imageWithData:data]); + } + else{ + return [self imageWithData:data]; + } +} + ++ (UIImage *)co_imageWithData:(NSData *)data scale:(CGFloat)scale{ + if ([COCoroutine currentCoroutine]) { + return await([self async_imageWithData:data scale:scale]); + } + else{ + return [self imageWithData:data scale:scale]; + } +} + +- (UIImage *)co_initWithContentsOfFile:(NSString *)path{ + if ([COCoroutine currentCoroutine]) { + return await([self async_initWithContentsOfFile:path]); + } + else{ + return [self initWithContentsOfFile:path]; + } +} + +- (UIImage *)co_initWithData:(NSData *)data{ + if ([COCoroutine currentCoroutine]) { + return await([self async_initWithData:data]); + } + else{ + return [self initWithData:data]; + } +} + +- (UIImage *)co_initWithData:(NSData *)data scale:(CGFloat)scale{ + if ([COCoroutine currentCoroutine]) { + return await([self async_initWithData:data scale:scale]); + } + else{ + return [self initWithData:data scale:scale]; + } +} + +@end + + +@implementation UIImage (COPromise) + ++ (COPromise*)async_imageNamed:(NSString *)name // load from main bundle +{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + UIImage *image = [UIImage imageNamed:name]; + if (image) { + resolve(image); + } + else{ + resolve(nil); + } + } onQueue:[COKitCommon image_queue]]; + }]; +} +#if __has_include() ++ (COPromise*)async_imageNamed:(NSString *)name inBundle:(nullable NSBundle *)bundle compatibleWithTraitCollection:(nullable UITraitCollection *)traitCollection{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + UIImage *image = [UIImage imageNamed:name inBundle:bundle compatibleWithTraitCollection:traitCollection]; + if (image) { + resolve(image); + } + else{ + resolve(nil); + } + } onQueue:[COKitCommon image_queue]]; + }]; +} +#endif + ++ (COPromise*)async_imageWithContentsOfFile:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + UIImage *image = [UIImage imageWithContentsOfFile:path]; + if (image) { + resolve(image); + } + else{ + resolve(nil); + } + } onQueue:[COKitCommon image_queue]]; + }]; +} ++ (COPromise*)async_imageWithData:(NSData *)data{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + UIImage *image = [UIImage imageWithData:data]; + if (image) { + resolve(image); + } + else{ + resolve(nil); + } + } onQueue:[COKitCommon image_queue]]; + }]; +} ++ (COPromise*)async_imageWithData:(NSData *)data scale:(CGFloat)scale{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + UIImage *image = [UIImage imageWithData:data scale:scale]; + if (image) { + resolve(image); + } + else{ + resolve(nil); + } + } onQueue:[COKitCommon image_queue]]; + }]; +} + +- (COPromise*)async_initWithContentsOfFile:(NSString *)path{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + UIImage *image = [self initWithContentsOfFile:path]; + if (image) { + resolve(image); + } + else{ + resolve(nil); + } + } onQueue:[COKitCommon image_queue]]; + }]; +} +- (COPromise*)async_initWithData:(NSData *)data{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + UIImage *image = [self initWithData:data]; + if (image) { + resolve(image); + } + else{ + resolve(nil); + } + } onQueue:[COKitCommon image_queue]]; + }]; +} +- (COPromise*)async_initWithData:(NSData *)data scale:(CGFloat)scale{ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + UIImage *image = [self initWithData:data scale:scale]; + if (image) { + resolve(image); + } + else{ + resolve(nil); + } + } onQueue:[COKitCommon image_queue]]; + }]; +} + +@end + +COPromise* async_UIImagePNGRepresentation(UIImage * __nonnull image){ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + NSData *data = UIImagePNGRepresentation(image); + if (data) { + resolve(data); + } + else{ + resolve(nil); + } + } onQueue:[COKitCommon image_queue]]; + }]; +} +COPromise* async_UIImageJPEGRepresentation(UIImage * __nonnull image, CGFloat compressionQuality){ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + [COKitCommon runBlock:^{ + NSData *data = UIImageJPEGRepresentation(image, compressionQuality); + if (data) { + resolve(data); + } + else{ + resolve(nil); + } + } onQueue:[COKitCommon image_queue]]; + }]; +} + +NSData * co_UIImagePNGRepresentation(UIImage * __nonnull image) // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format +{ + if ([COCoroutine currentCoroutine]) { + return await(async_UIImagePNGRepresentation(image)); + } + else{ + return UIImagePNGRepresentation(image); + } +} +NSData * co_UIImageJPEGRepresentation(UIImage * __nonnull image, CGFloat compressionQuality) // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least) +{ + if ([COCoroutine currentCoroutine]) { + return await(async_UIImageJPEGRepresentation(image, compressionQuality)); + } + else{ + return UIImageJPEGRepresentation(image, compressionQuality); + } +} diff --git a/cokit/cokit/UIKit/UIImagePickerController+Coroutine.h b/cokit/cokit/UIKit/UIImagePickerController+Coroutine.h new file mode 100644 index 0000000..562878f --- /dev/null +++ b/cokit/cokit/UIKit/UIImagePickerController+Coroutine.h @@ -0,0 +1,63 @@ +// +// UIImagePickerController+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import +#import + +@interface COImagePickerResult: NSObject + +//(UTI, i.e. kUTTypeImage) +@property(nonatomic, copy, readonly) NSString *mediaType; + +@property(nonatomic, strong, readonly) UIImage *originalImage; + + +@property(nonatomic, strong, readonly) UIImage *editedImage; + +@property(nonatomic, assign, readonly) CGRect cropRect; + +@property(nonatomic, strong, readonly) NSURL *mediaURL; + +@property(nonatomic, strong, readonly) NSURL *referenceURL; + +@property(nonatomic, copy, readonly) NSDictionary* mediaMetadata; + +@property(nonatomic, strong, readonly) PHLivePhoto *livePhoto PHOTOS_AVAILABLE_IOS_TVOS(9_1, 10_0); + +@property(nonatomic, strong, readonly) PHAsset *asset; + +@property(nonatomic, strong, readonly) NSURL *imageURL; + +@end + + +@interface UIImagePickerController (Coroutine) + +// present from keyWindow.rootViewController +- (COPromise*) co_present; + +// present from viewController +- (COPromise*) co_presentFromController:(UIViewController*)viewController; + +@end + +COPromise* co_UIImageWriteToSavedPhotosAlbum(UIImage *image); + +COPromise* co_UISaveVideoAtPathToSavedPhotosAlbum(NSString *videoPath); diff --git a/cokit/cokit/UIKit/UIImagePickerController+Coroutine.m b/cokit/cokit/UIKit/UIImagePickerController+Coroutine.m new file mode 100644 index 0000000..b263dab --- /dev/null +++ b/cokit/cokit/UIKit/UIImagePickerController+Coroutine.m @@ -0,0 +1,289 @@ +// +// UIImagePickerController+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "UIImagePickerController+Coroutine.h" +#import +#import "COKitCommon.h" + +static char coPromiseKey; +static char coOriginDelegateKey; + +@interface COUIImagePickerControllerDelegate: NSObject + ++ (instancetype)sharedInstance; + +@end + + +@interface COImagePickerResult () + +@property (nonatomic, copy) NSDictionary *dict; + +- (instancetype)initWithInfo:(NSDictionary*)info; + +@end + + + + +@implementation UIImagePickerController (Coroutine) + +- (void) co_set_promise:(COPromise*)promise{ + objc_setAssociatedObject(self, &coPromiseKey, promise, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (COPromise*)co_get_promise{ + return objc_getAssociatedObject(self, &coPromiseKey); +} + +- (void) co_set_origin_delegate:(id )delegate{ + objc_setAssociatedObject(self, &coOriginDelegateKey, delegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (id )co_get_origin_delegate{ + return objc_getAssociatedObject(self, &coOriginDelegateKey); +} + +// present from keyWindow.rootViewController +- (COPromise*) co_present{ + return [self co_presentFromController:[UIApplication sharedApplication].keyWindow.rootViewController]; +} + +// present from viewController +- (COPromise*) co_presentFromController:(UIViewController*)viewController{ + COPromise *promise = [COPromise promise]; + [self co_set_promise:promise]; + [self co_set_origin_delegate:self.delegate]; + self.delegate = [COUIImagePickerControllerDelegate sharedInstance]; + [viewController presentViewController:self animated:YES completion:^{ + + }]; + return promise; +} + +@end + + +@implementation COUIImagePickerControllerDelegate + ++ (instancetype)sharedInstance{ + static COUIImagePickerControllerDelegate *instance = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + instance = [[COUIImagePickerControllerDelegate alloc] init]; + }); + return instance; +} + +// The picker does not dismiss itself; the client dismisses it in these callbacks. +// The delegate will receive one or the other, but not both, depending whether the user +// confirms or cancels. + +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ + [picker dismissViewControllerAnimated:YES completion:nil]; + + id delegate = [picker co_get_origin_delegate]; + if([delegate respondsToSelector:@selector(imagePickerController:didFinishPickingMediaWithInfo:)]){ + [delegate imagePickerController:picker didFinishPickingMediaWithInfo:info]; + } + + COPromise *promise = [picker co_get_promise]; + [promise fulfill:[[COImagePickerResult alloc] initWithInfo:info]]; +} +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ + [picker dismissViewControllerAnimated:YES completion:nil]; + + id delegate = [picker co_get_origin_delegate]; + if([delegate respondsToSelector:@selector(imagePickerControllerDidCancel:)]){ + [delegate imagePickerControllerDidCancel:picker]; + } + + COPromise *promise = [picker co_get_promise]; + [promise fulfill:nil]; +} + +// Called when the navigation controller shows a new top view controller via a push, pop or setting of the view controller stack. +- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{ + UIImagePickerController *picker = (UIImagePickerController*)navigationController; + id delegate = [picker co_get_origin_delegate]; + if([delegate respondsToSelector:@selector(navigationController:willShowViewController:animated:)]){ + [delegate navigationController:navigationController willShowViewController:viewController animated:animated]; + } +} +- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{ + UIImagePickerController *picker = (UIImagePickerController*)navigationController; + id delegate = [picker co_get_origin_delegate]; + if([delegate respondsToSelector:@selector(navigationController:didShowViewController:animated:)]){ + [delegate navigationController:navigationController didShowViewController:viewController animated:animated]; + } +} + +//- (UIInterfaceOrientationMask)navigationControllerSupportedInterfaceOrientations:(UINavigationController *)navigationController { +// UIImagePickerController *picker = (UIImagePickerController*)navigationController; +// id delegate = [picker co_get_origin_delegate]; +// if([delegate respondsToSelector:@selector(navigationControllerSupportedInterfaceOrientations:)]){ +// return [delegate navigationControllerSupportedInterfaceOrientations:navigationController]; +// } +// else{ +// return UIInterfaceOrientationMaskAll; +// } +//} +//- (UIInterfaceOrientation)navigationControllerPreferredInterfaceOrientationForPresentation:(UINavigationController *)navigationController { +// UIImagePickerController *picker = (UIImagePickerController*)navigationController; +// id delegate = [picker co_get_origin_delegate]; +// if([delegate respondsToSelector:@selector(navigationControllerPreferredInterfaceOrientationForPresentation:)]){ +// return [delegate navigationControllerPreferredInterfaceOrientationForPresentation:navigationController]; +// } +// else{ +// return UIInterfaceOrientationUnknown; +// } +//} + +- (nullable id )navigationController:(UINavigationController *)navigationController + interactionControllerForAnimationController:(id ) animationController NS_AVAILABLE_IOS(7_0){ + UIImagePickerController *picker = (UIImagePickerController*)navigationController; + id delegate = [picker co_get_origin_delegate]; + if([delegate respondsToSelector:@selector(navigationController:interactionControllerForAnimationController:)]){ + return [delegate navigationController:navigationController interactionControllerForAnimationController:animationController]; + } + else{ + return nil; + } +} + +- (nullable id )navigationController:(UINavigationController *)navigationController + animationControllerForOperation:(UINavigationControllerOperation)operation + fromViewController:(UIViewController *)fromVC + toViewController:(UIViewController *)toVC NS_AVAILABLE_IOS(7_0){ + UIImagePickerController *picker = (UIImagePickerController*)navigationController; + id delegate = [picker co_get_origin_delegate]; + if([delegate respondsToSelector:@selector(navigationController:animationControllerForOperation:fromViewController:toViewController:)]){ + return [delegate navigationController:navigationController animationControllerForOperation:operation fromViewController:fromVC toViewController:toVC]; + } + else{ + return nil; + } +} + + +- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{ + COPromise *promise = (__bridge COPromise *)(contextInfo); + if(promise){ + if(error){ + [promise reject:error]; + } + else{ + [promise fulfill:@(YES)]; + } + } +} + +- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{ + COPromise *promise = (__bridge COPromise *)(contextInfo); + if(promise){ + if(error){ + [promise reject:error]; + } + else{ + [promise fulfill:@(YES)]; + } + } +} + + +@end + +@implementation COImagePickerResult + +- (instancetype)initWithInfo:(NSDictionary*)info{ + self = [super init]; + if (self) { + _dict = info; + } + return self; +} + +- (NSString *)mediaType{ + return _dict[UIImagePickerControllerMediaType]; +} + +- (UIImage *)originalImage{ + return _dict[UIImagePickerControllerOriginalImage]; +} + +- (UIImage *)editedImage{ + return _dict[UIImagePickerControllerEditedImage]; +} + +- (CGRect)cropRect{ + return [_dict[UIImagePickerControllerCropRect] CGRectValue]; +} + +- (NSURL *)mediaURL{ + return _dict[UIImagePickerControllerMediaURL]; +} + +- (NSURL *)referenceURL{ + return _dict[UIImagePickerControllerReferenceURL]; +} + +- (NSDictionary *)mediaMetadata{ + return _dict[UIImagePickerControllerMediaMetadata]; +} + +- (PHLivePhoto *)livePhoto{ + return _dict[UIImagePickerControllerLivePhoto]; +} + +- (PHAsset *)asset{ + if (@available(iOS 11.0, *)) { + return _dict[UIImagePickerControllerPHAsset]; + } else { + // Fallback on earlier versions + return nil; + } +} + +- (NSURL *)imageURL{ + if (@available(iOS 11.0, *)) { + return _dict[UIImagePickerControllerImageURL]; + } else { + // Fallback on earlier versions + return nil; + } +} + +@end + +COPromise* co_UIImageWriteToSavedPhotosAlbum(UIImage *image){ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlock:^{ + UIImageWriteToSavedPhotosAlbum(image, [COUIImagePickerControllerDelegate sharedInstance], @selector(image:didFinishSavingWithError:contextInfo:), (__bridge void * _Nullable)(promise)); + } onQueue:[COKitCommon io_write_queue]]; + return promise; +} + +COPromise* co_UISaveVideoAtPathToSavedPhotosAlbum(NSString *videoPath){ + COPromise *promise = [COPromise promise]; + [COKitCommon runBlock:^{ + UISaveVideoAtPathToSavedPhotosAlbum(videoPath, [COUIImagePickerControllerDelegate sharedInstance], @selector(video:didFinishSavingWithError:contextInfo:), (__bridge void * _Nullable)(promise)); + } onQueue:[COKitCommon io_write_queue]]; + return promise; +} + + diff --git a/cokit/cokit/UIKit/UIVideoEditorController+Coroutine.h b/cokit/cokit/UIKit/UIVideoEditorController+Coroutine.h new file mode 100644 index 0000000..dc89e05 --- /dev/null +++ b/cokit/cokit/UIKit/UIVideoEditorController+Coroutine.h @@ -0,0 +1,30 @@ +// +// UIVideoEditorController+Coroutine.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import + +@interface UIVideoEditorController (Coroutine) + +// present from keyWindow.rootViewController +- (COPromise*)co_present; + +// present from viewController +- (COPromise*)co_presentFromController:(UIViewController*)viewController; + +@end diff --git a/cokit/cokit/UIKit/UIVideoEditorController+Coroutine.m b/cokit/cokit/UIKit/UIVideoEditorController+Coroutine.m new file mode 100644 index 0000000..e516174 --- /dev/null +++ b/cokit/cokit/UIKit/UIVideoEditorController+Coroutine.m @@ -0,0 +1,117 @@ +// +// UIVideoEditorController+Coroutine.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "UIVideoEditorController+Coroutine.h" +#import +#import "COKitCommon.h" + +static char coPromiseKey; +static char coOriginDelegateKey; + +@interface COUIVideoEditorControllerDelegate: NSObject + ++ (instancetype)sharedInstance; + +@end + + + + + +@implementation UIVideoEditorController (Coroutine) + +- (void) co_set_promise:(COPromise*)promise{ + objc_setAssociatedObject(self, &coPromiseKey, promise, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (COPromise*)co_get_promise{ + return objc_getAssociatedObject(self, &coPromiseKey); +} + +- (void) co_set_origin_delegate:(id )delegate{ + objc_setAssociatedObject(self, &coOriginDelegateKey, delegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (id )co_get_origin_delegate{ + return objc_getAssociatedObject(self, &coOriginDelegateKey); +} + + +// present from keyWindow.rootViewController +- (COPromise*)co_present{ + return [self co_presentFromController:[UIApplication sharedApplication].keyWindow.rootViewController]; +} + +// present from viewController +- (COPromise*)co_presentFromController:(UIViewController*)viewController{ + COPromise *promise = [COPromise promise]; + [self co_set_promise:promise]; + [self co_set_origin_delegate:self.delegate]; + self.delegate = [COUIVideoEditorControllerDelegate sharedInstance]; + [viewController presentViewController:self animated:YES completion:^{ + + }]; + return promise; +} + +@end + +@implementation COUIVideoEditorControllerDelegate + ++ (instancetype)sharedInstance{ + static COUIVideoEditorControllerDelegate *instance = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + instance = [[COUIVideoEditorControllerDelegate alloc] init]; + }); + return instance; +} + +// The editor does not dismiss itself; the client dismisses it in these callbacks. +// The delegate will receive exactly one of the following callbacks, depending whether the user +// confirms or cancels or if the operation fails. +- (void)videoEditorController:(UIVideoEditorController *)editor didSaveEditedVideoToPath:(NSString *)editedVideoPath // edited video is saved to a path in app's temporary directory +{ + [editor dismissViewControllerAnimated:YES completion:nil]; + id delegate = [editor co_get_origin_delegate]; + if([delegate respondsToSelector:@selector(videoEditorController:didSaveEditedVideoToPath:)]){ + [delegate videoEditorController:editor didSaveEditedVideoToPath:editedVideoPath]; + } + COPromise *promise = [editor co_get_promise]; + [promise fulfill:editedVideoPath]; +} +- (void)videoEditorController:(UIVideoEditorController *)editor didFailWithError:(NSError *)error{ + [editor dismissViewControllerAnimated:YES completion:nil]; + id delegate = [editor co_get_origin_delegate]; + if([delegate respondsToSelector:@selector(videoEditorController:didFailWithError:)]){ + [delegate videoEditorController:editor didFailWithError:error]; + } + COPromise *promise = [editor co_get_promise]; + [promise reject:error]; +} +- (void)videoEditorControllerDidCancel:(UIVideoEditorController *)editor{ + id delegate = [editor co_get_origin_delegate]; + if([delegate respondsToSelector:@selector(videoEditorControllerDidCancel:)]){ + [delegate videoEditorControllerDidCancel:editor]; + } + COPromise *promise = [editor co_get_promise]; + [promise fulfill:nil]; +} + + +@end diff --git a/cokit/cokit/cokit-Prefix.pch b/cokit/cokit/cokit-Prefix.pch new file mode 100644 index 0000000..4a38576 --- /dev/null +++ b/cokit/cokit/cokit-Prefix.pch @@ -0,0 +1,5 @@ +#ifndef DEBUG + +#define NSLog(...) + +#endif diff --git a/cokit/cokit/cokit.h b/cokit/cokit/cokit.h new file mode 100644 index 0000000..baad07a --- /dev/null +++ b/cokit/cokit/cokit.h @@ -0,0 +1,37 @@ +// +// cokit.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import diff --git a/cokit/cokit/common/COKitCommon.h b/cokit/cokit/common/COKitCommon.h new file mode 100644 index 0000000..821eb09 --- /dev/null +++ b/cokit/cokit/common/COKitCommon.h @@ -0,0 +1,56 @@ +// +// COKitCommon.h +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 + +// cokit common interface +@interface COKitCommon : NSObject + +// common io queue for read from disk ++ (dispatch_queue_t)io_queue; + ++ (dispatch_queue_t)image_queue; + + +// common io queue for write to disk ++ (dispatch_queue_t)io_write_queue; + +// common queue for NSFileManager operation ++ (dispatch_queue_t)filemanager_queue; + +// common queue for json operation ++ (dispatch_queue_t)json_queue; + +// common queue for NSKeyedArchieve or NSKeyedUnArchieve Operation ++ (dispatch_queue_t)archieve_queue; + +// common queue for NSURLConnection operation ++ (NSOperationQueue*)urlconnection_queue; + +// common queue for NSUserDefaults operation ++ (dispatch_queue_t)userDefaults_queue; + +// run block on queue ++ (void)runBlock:(dispatch_block_t)block + onQueue:(dispatch_queue_t)queue; + +// run block on current background queue or on the specify queue ++ (void)runBlockOnBackgroundThread:(dispatch_block_t)block + backgroundQueue:(dispatch_queue_t)queue; + +@end diff --git a/cokit/cokit/common/COKitCommon.m b/cokit/cokit/common/COKitCommon.m new file mode 100644 index 0000000..c6a1bad --- /dev/null +++ b/cokit/cokit/common/COKitCommon.m @@ -0,0 +1,104 @@ +// +// COKitCommon.m +// cokit +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "COKitCommon.h" +#import + +@implementation COKitCommon + +// TODO: 并发数量控制,是否应该用 NSOperationQueue. +// TODO: 是否应该用异步io接口 dispatch_io? ++ (dispatch_queue_t)io_queue{ + static dispatch_queue_t q = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + q = dispatch_queue_create("com.cokit.io", DISPATCH_QUEUE_CONCURRENT); + }); + return q; +} + ++ (dispatch_queue_t)image_queue{ + return [self io_queue]; +} + ++ (dispatch_queue_t)io_write_queue{ + static dispatch_queue_t q = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + q = dispatch_queue_create("com.cokit.io_write", DISPATCH_QUEUE_CONCURRENT); + }); + return q; +} + ++ (dispatch_queue_t)filemanager_queue{ + static dispatch_queue_t q = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + q = dispatch_queue_create("com.cokit.filemanager", DISPATCH_QUEUE_SERIAL); + }); + return q; +} + ++ (NSOperationQueue*)urlconnection_queue{ + static NSOperationQueue *q = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + q = [[NSOperationQueue alloc] init]; + q.maxConcurrentOperationCount = 2; + }); + return q; +} + ++ (dispatch_queue_t)json_queue{ + return [self io_queue]; +} + ++ (dispatch_queue_t)archieve_queue{ + return [self io_queue]; +} + ++ (dispatch_queue_t)userDefaults_queue{ + static dispatch_queue_t q = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + q = dispatch_queue_create("com.cokit.userDefaults", DISPATCH_QUEUE_SERIAL); + }); + return q; +} + ++ (void)runBlock:(dispatch_block_t)block + onQueue:(dispatch_queue_t)queue{ + if (co_get_current_queue() == queue) { + block(); + } + else{ + dispatch_async(queue, block); + } +} + ++ (void)runBlockOnBackgroundThread:(dispatch_block_t)block + backgroundQueue:(dispatch_queue_t)queue{ + if ([NSThread isMainThread]) { + dispatch_async(queue, block); + } + else{ + block(); + } +} + +@end diff --git a/coobjc.podspec b/coobjc.podspec new file mode 100644 index 0000000..bea2c21 --- /dev/null +++ b/coobjc.podspec @@ -0,0 +1,33 @@ +Pod::Spec.new do |s| + s.name = "coobjc" + s.version = "1.0.0" + s.summary = "Coroutine support for Objective-C" + + s.description = <<-DESC + This library provides coroutine support for Objective-C and Swift. We added await method、generator and actor model like C#、Javascript and Kotlin. For convenience, we added coroutine categories for some Foundation and UIKit API in cokit framework like NSFileManager, JSON, NSData, UIImage etc. We also add tuple support in coobjc + DESC + + s.homepage = "http://github.com/alibaba/coobjc" + s.license = { + :type => 'Copyright', + :text => <<-LICENSE + Alibaba-INC copyright + LICENSE + } + + s.author = { "pengyutang125" => "pengyutang125@sina.com" } + s.platform = :ios + + s.ios.deployment_target = '8.0' + s.requires_arc = true + + s.source = { :git => "git@github.com:alibaba/coobjc.git", :branch => 'master' } + s.source_files = 'coobjc/**/*.{h,m,s,c,mm}' + + s.subspec 'no-arc' do |sna| + sna.requires_arc = false + sna.source_files = ['coobjc/util/co_tuple.m', 'coobjc/objc/co_autorelease.mm'] + end + + s.dependency 'fishhook' +end diff --git a/coobjc.xcodeproj/project.pbxproj b/coobjc.xcodeproj/project.pbxproj new file mode 100644 index 0000000..d18bb96 --- /dev/null +++ b/coobjc.xcodeproj/project.pbxproj @@ -0,0 +1,784 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 02656B86E0FEA409D7988199 /* libPods-coswift.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B83F808983E7DB693B20B7F8 /* libPods-coswift.a */; }; + 1807602621A256B5006FD552 /* co_queue.h in Headers */ = {isa = PBXBuildFile; fileRef = 1807602421A256B4006FD552 /* co_queue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1807602721A256B5006FD552 /* co_queue.m in Sources */ = {isa = PBXBuildFile; fileRef = 1807602521A256B5006FD552 /* co_queue.m */; }; + 1827C573219AE57E0004CE59 /* co_csp.m in Sources */ = {isa = PBXBuildFile; fileRef = 1827C561219AE57D0004CE59 /* co_csp.m */; }; + 1827C575219AE57E0004CE59 /* co_csp.h in Headers */ = {isa = PBXBuildFile; fileRef = 1827C563219AE57D0004CE59 /* co_csp.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1827C57A219AE57E0004CE59 /* coroutine_context.h in Headers */ = {isa = PBXBuildFile; fileRef = 1827C56B219AE57E0004CE59 /* coroutine_context.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1827C57B219AE57E0004CE59 /* coroutine_context.s in Sources */ = {isa = PBXBuildFile; fileRef = 1827C56C219AE57E0004CE59 /* coroutine_context.s */; }; + 1827C57C219AE57E0004CE59 /* coroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 1827C56D219AE57E0004CE59 /* coroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1827C57E219AE57E0004CE59 /* coroutine_context.m in Sources */ = {isa = PBXBuildFile; fileRef = 1827C56F219AE57E0004CE59 /* coroutine_context.m */; }; + 1827C57F219AE57E0004CE59 /* coroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 1827C570219AE57E0004CE59 /* coroutine.m */; }; + 1827C584219AE59F0004CE59 /* coobjc.h in Headers */ = {isa = PBXBuildFile; fileRef = 1827C582219AE59F0004CE59 /* coobjc.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1865B8F121B8C4B5008C8727 /* co_autorelease.h in Headers */ = {isa = PBXBuildFile; fileRef = 1865B8EF21B8C4B5008C8727 /* co_autorelease.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1865B8F221B8C4B5008C8727 /* co_autorelease.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1865B8F021B8C4B5008C8727 /* co_autorelease.mm */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 1865B8F521B8C9C5008C8727 /* co_errors.h in Headers */ = {isa = PBXBuildFile; fileRef = 1865B8F321B8C9C5008C8727 /* co_errors.h */; }; + 1865B8F621B8C9C5008C8727 /* co_errors.m in Sources */ = {isa = PBXBuildFile; fileRef = 1865B8F421B8C9C5008C8727 /* co_errors.m */; }; + 18BC88C021BA8BCC00EF3D9B /* co_tuple.h in Headers */ = {isa = PBXBuildFile; fileRef = 18BC88BE21BA8BCC00EF3D9B /* co_tuple.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18BC88C121BA8BCC00EF3D9B /* co_tuple.m in Sources */ = {isa = PBXBuildFile; fileRef = 18BC88BF21BA8BCC00EF3D9B /* co_tuple.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 18E74C1C21AE80EE003A9065 /* COActorChan.h in Headers */ = {isa = PBXBuildFile; fileRef = 18E74C1A21AE80EE003A9065 /* COActorChan.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18E74C1D21AE80EE003A9065 /* COActorChan.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E74C1B21AE80EE003A9065 /* COActorChan.m */; }; + 18EE50A621AE7D6300F244B6 /* COActor.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EE50A421AE7D6300F244B6 /* COActor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18EE50A721AE7D6300F244B6 /* COActor.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE50A521AE7D6300F244B6 /* COActor.m */; }; + 18EE50AA21AE7D7600F244B6 /* COActorMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EE50A821AE7D7600F244B6 /* COActorMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18EE50AB21AE7D7600F244B6 /* COActorMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE50A921AE7D7600F244B6 /* COActorMessage.m */; }; + 18EE50AE21AE7DA400F244B6 /* COActorCompletable.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EE50AC21AE7DA400F244B6 /* COActorCompletable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18EE50AF21AE7DA400F244B6 /* COActorCompletable.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EE50AD21AE7DA400F244B6 /* COActorCompletable.m */; }; + 5D7EAFC6EF37EC2817208282 /* libPods-coobjc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 539E1B31B66ADA95F4988159 /* libPods-coobjc.a */; }; + A32FD4D321B64E6D008B4295 /* co_queuedebugging_support.m in Sources */ = {isa = PBXBuildFile; fileRef = A32FD4D221B64E6D008B4295 /* co_queuedebugging_support.m */; }; + A35C04A121EC369F00AC7D6E /* Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = A35C04A021EC369F00AC7D6E /* Promise.swift */; }; + A35C04A321EC36AD00AC7D6E /* Chan.swift in Sources */ = {isa = PBXBuildFile; fileRef = A35C04A221EC36AD00AC7D6E /* Chan.swift */; }; + A35C04A521EC36C200AC7D6E /* Coroutine.swift in Sources */ = {isa = PBXBuildFile; fileRef = A35C04A421EC36C200AC7D6E /* Coroutine.swift */; }; + A37DDF811E8A62DF00E11BD9 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A37DDF801E8A62DF00E11BD9 /* UIKit.framework */; }; + A37DDF831E8A62E400E11BD9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A37DDF821E8A62E400E11BD9 /* Foundation.framework */; }; + A3824E91221FFD5400B6BFE7 /* coobjc.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D85037CF1B9C6D8400864DF0 /* coobjc.framework */; }; + A3824E94221FFEC200B6BFE7 /* coswift.h in Headers */ = {isa = PBXBuildFile; fileRef = A35C049A21EC366A00AC7D6E /* coswift.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3D67CE121EDF56E009328CC /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3D67CE021EDF56E009328CC /* Errors.swift */; }; + A3D67CE321EDF57F009328CC /* coswift.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3D67CE221EDF57F009328CC /* coswift.swift */; }; + A3ECCFCC21B7D17300CC36B7 /* co_queuedebugging_support.h in Headers */ = {isa = PBXBuildFile; fileRef = A3ECCFCB21B7D17300CC36B7 /* co_queuedebugging_support.h */; }; + A3FAA91221A261CE00605F27 /* COPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = A3FAA91021A261CE00605F27 /* COPromise.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3FAA91321A261CE00605F27 /* COPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = A3FAA91121A261CE00605F27 /* COPromise.m */; }; + A3FAA91621A2B06A00605F27 /* COChan.h in Headers */ = {isa = PBXBuildFile; fileRef = A3FAA91421A2B06A00605F27 /* COChan.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3FAA91721A2B06A00605F27 /* COChan.m in Sources */ = {isa = PBXBuildFile; fileRef = A3FAA91521A2B06A00605F27 /* COChan.m */; }; + A3FAA91E21A2B09700605F27 /* COCoroutine.h in Headers */ = {isa = PBXBuildFile; fileRef = A3FAA91C21A2B09700605F27 /* COCoroutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3FAA91F21A2B09700605F27 /* COCoroutine.m in Sources */ = {isa = PBXBuildFile; fileRef = A3FAA91D21A2B09700605F27 /* COCoroutine.m */; }; + D85037D81B9C6D8400864DF0 /* coobjc-Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = D85037D71B9C6D8400864DF0 /* coobjc-Prefix.pch */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + A3824E92221FFDBF00B6BFE7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D85037C51B9C6D8400864DF0 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D85037CE1B9C6D8400864DF0; + remoteInfo = coobjc; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 090CF6E574DD4748505F69A2 /* Pods-coswift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coswift.debug.xcconfig"; path = "Pods/Target Support Files/Pods-coswift/Pods-coswift.debug.xcconfig"; sourceTree = ""; }; + 1807602421A256B4006FD552 /* co_queue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = co_queue.h; sourceTree = ""; }; + 1807602521A256B5006FD552 /* co_queue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = co_queue.m; sourceTree = ""; }; + 1827C561219AE57D0004CE59 /* co_csp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = co_csp.m; sourceTree = ""; }; + 1827C563219AE57D0004CE59 /* co_csp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = co_csp.h; sourceTree = ""; }; + 1827C56B219AE57E0004CE59 /* coroutine_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = coroutine_context.h; sourceTree = ""; }; + 1827C56C219AE57E0004CE59 /* coroutine_context.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = coroutine_context.s; sourceTree = ""; }; + 1827C56D219AE57E0004CE59 /* coroutine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = coroutine.h; sourceTree = ""; }; + 1827C56F219AE57E0004CE59 /* coroutine_context.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = coroutine_context.m; sourceTree = ""; }; + 1827C570219AE57E0004CE59 /* coroutine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = coroutine.m; sourceTree = ""; }; + 1827C582219AE59F0004CE59 /* coobjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = coobjc.h; sourceTree = ""; }; + 1865B8EF21B8C4B5008C8727 /* co_autorelease.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = co_autorelease.h; sourceTree = ""; }; + 1865B8F021B8C4B5008C8727 /* co_autorelease.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = co_autorelease.mm; sourceTree = ""; }; + 1865B8F321B8C9C5008C8727 /* co_errors.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = co_errors.h; sourceTree = ""; }; + 1865B8F421B8C9C5008C8727 /* co_errors.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = co_errors.m; sourceTree = ""; }; + 18BC88BE21BA8BCC00EF3D9B /* co_tuple.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = co_tuple.h; sourceTree = ""; }; + 18BC88BF21BA8BCC00EF3D9B /* co_tuple.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = co_tuple.m; sourceTree = ""; }; + 18E74C1A21AE80EE003A9065 /* COActorChan.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = COActorChan.h; sourceTree = ""; }; + 18E74C1B21AE80EE003A9065 /* COActorChan.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = COActorChan.m; sourceTree = ""; }; + 18EE50A421AE7D6300F244B6 /* COActor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = COActor.h; sourceTree = ""; }; + 18EE50A521AE7D6300F244B6 /* COActor.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = COActor.m; sourceTree = ""; }; + 18EE50A821AE7D7600F244B6 /* COActorMessage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = COActorMessage.h; sourceTree = ""; }; + 18EE50A921AE7D7600F244B6 /* COActorMessage.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = COActorMessage.m; sourceTree = ""; }; + 18EE50AC21AE7DA400F244B6 /* COActorCompletable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = COActorCompletable.h; sourceTree = ""; }; + 18EE50AD21AE7DA400F244B6 /* COActorCompletable.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = COActorCompletable.m; sourceTree = ""; }; + 1C21392EBD5DCF258D11E284 /* Pods-coobjc.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coobjc.debug.xcconfig"; path = "Pods/Target Support Files/Pods-coobjc/Pods-coobjc.debug.xcconfig"; sourceTree = ""; }; + 539E1B31B66ADA95F4988159 /* libPods-coobjc.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-coobjc.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 78543E2E7A973683F37BF1C8 /* Pods-coswift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coswift.release.xcconfig"; path = "Pods/Target Support Files/Pods-coswift/Pods-coswift.release.xcconfig"; sourceTree = ""; }; + A32FD4D221B64E6D008B4295 /* co_queuedebugging_support.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = co_queuedebugging_support.m; sourceTree = ""; }; + A35C049821EC366A00AC7D6E /* coswift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = coswift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A35C049A21EC366A00AC7D6E /* coswift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = coswift.h; sourceTree = ""; }; + A35C049B21EC366A00AC7D6E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A35C04A021EC369F00AC7D6E /* Promise.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Promise.swift; sourceTree = ""; }; + A35C04A221EC36AD00AC7D6E /* Chan.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Chan.swift; sourceTree = ""; }; + A35C04A421EC36C200AC7D6E /* Coroutine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Coroutine.swift; sourceTree = ""; }; + A37DDF801E8A62DF00E11BD9 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + A37DDF821E8A62E400E11BD9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + A3D67CE021EDF56E009328CC /* Errors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; + A3D67CE221EDF57F009328CC /* coswift.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = coswift.swift; sourceTree = ""; }; + A3ECCFCB21B7D17300CC36B7 /* co_queuedebugging_support.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = co_queuedebugging_support.h; sourceTree = ""; }; + A3FAA91021A261CE00605F27 /* COPromise.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = COPromise.h; sourceTree = ""; }; + A3FAA91121A261CE00605F27 /* COPromise.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = COPromise.m; sourceTree = ""; }; + A3FAA91421A2B06A00605F27 /* COChan.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = COChan.h; sourceTree = ""; }; + A3FAA91521A2B06A00605F27 /* COChan.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = COChan.m; sourceTree = ""; }; + A3FAA91C21A2B09700605F27 /* COCoroutine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = COCoroutine.h; sourceTree = ""; }; + A3FAA91D21A2B09700605F27 /* COCoroutine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = COCoroutine.m; sourceTree = ""; }; + B83F808983E7DB693B20B7F8 /* libPods-coswift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-coswift.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + D85037CF1B9C6D8400864DF0 /* coobjc.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework.static; includeInIndex = 0; path = coobjc.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D85037D61B9C6D8400864DF0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D85037D71B9C6D8400864DF0 /* coobjc-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "coobjc-Prefix.pch"; sourceTree = ""; }; + DFFA02577192450EC6C700AF /* Pods-coobjc.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-coobjc.release.xcconfig"; path = "Pods/Target Support Files/Pods-coobjc/Pods-coobjc.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + A35C049521EC366A00AC7D6E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A3824E91221FFD5400B6BFE7 /* coobjc.framework in Frameworks */, + 02656B86E0FEA409D7988199 /* libPods-coswift.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D85037CA1B9C6D8400864DF0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A37DDF831E8A62E400E11BD9 /* Foundation.framework in Frameworks */, + A37DDF811E8A62DF00E11BD9 /* UIKit.framework in Frameworks */, + 5D7EAFC6EF37EC2817208282 /* libPods-coobjc.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1827C560219AE57D0004CE59 /* csp */ = { + isa = PBXGroup; + children = ( + 1827C563219AE57D0004CE59 /* co_csp.h */, + 1827C561219AE57D0004CE59 /* co_csp.m */, + ); + path = csp; + sourceTree = ""; + }; + 1827C564219AE57E0004CE59 /* util */ = { + isa = PBXGroup; + children = ( + A3ECCFCB21B7D17300CC36B7 /* co_queuedebugging_support.h */, + A32FD4D221B64E6D008B4295 /* co_queuedebugging_support.m */, + 1807602421A256B4006FD552 /* co_queue.h */, + 1807602521A256B5006FD552 /* co_queue.m */, + 1865B8F321B8C9C5008C8727 /* co_errors.h */, + 1865B8F421B8C9C5008C8727 /* co_errors.m */, + 18BC88BE21BA8BCC00EF3D9B /* co_tuple.h */, + 18BC88BF21BA8BCC00EF3D9B /* co_tuple.m */, + ); + path = util; + sourceTree = ""; + }; + 1827C56A219AE57E0004CE59 /* core */ = { + isa = PBXGroup; + children = ( + 1827C56B219AE57E0004CE59 /* coroutine_context.h */, + 1827C56F219AE57E0004CE59 /* coroutine_context.m */, + 1827C56C219AE57E0004CE59 /* coroutine_context.s */, + 1827C56D219AE57E0004CE59 /* coroutine.h */, + 1827C570219AE57E0004CE59 /* coroutine.m */, + ); + path = core; + sourceTree = ""; + }; + 1827C571219AE57E0004CE59 /* api */ = { + isa = PBXGroup; + children = ( + 1827C582219AE59F0004CE59 /* coobjc.h */, + A3FAA91421A2B06A00605F27 /* COChan.h */, + A3FAA91521A2B06A00605F27 /* COChan.m */, + A3FAA91C21A2B09700605F27 /* COCoroutine.h */, + A3FAA91D21A2B09700605F27 /* COCoroutine.m */, + 18EE50A421AE7D6300F244B6 /* COActor.h */, + 18EE50A521AE7D6300F244B6 /* COActor.m */, + 18EE50A821AE7D7600F244B6 /* COActorMessage.h */, + 18EE50A921AE7D7600F244B6 /* COActorMessage.m */, + 18EE50AC21AE7DA400F244B6 /* COActorCompletable.h */, + 18EE50AD21AE7DA400F244B6 /* COActorCompletable.m */, + 18E74C1A21AE80EE003A9065 /* COActorChan.h */, + 18E74C1B21AE80EE003A9065 /* COActorChan.m */, + ); + path = api; + sourceTree = ""; + }; + 1865B8EE21B8C49D008C8727 /* objc */ = { + isa = PBXGroup; + children = ( + 1865B8EF21B8C4B5008C8727 /* co_autorelease.h */, + 1865B8F021B8C4B5008C8727 /* co_autorelease.mm */, + ); + path = objc; + sourceTree = ""; + }; + 4F83B0FDFBBD64656B7DCD45 /* Pods */ = { + isa = PBXGroup; + children = ( + 1C21392EBD5DCF258D11E284 /* Pods-coobjc.debug.xcconfig */, + DFFA02577192450EC6C700AF /* Pods-coobjc.release.xcconfig */, + 090CF6E574DD4748505F69A2 /* Pods-coswift.debug.xcconfig */, + 78543E2E7A973683F37BF1C8 /* Pods-coswift.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + A35C049921EC366A00AC7D6E /* coswift */ = { + isa = PBXGroup; + children = ( + A35C049A21EC366A00AC7D6E /* coswift.h */, + A35C049B21EC366A00AC7D6E /* Info.plist */, + A35C04A021EC369F00AC7D6E /* Promise.swift */, + A35C04A221EC36AD00AC7D6E /* Chan.swift */, + A35C04A421EC36C200AC7D6E /* Coroutine.swift */, + A3D67CE021EDF56E009328CC /* Errors.swift */, + A3D67CE221EDF57F009328CC /* coswift.swift */, + ); + path = coswift; + sourceTree = ""; + }; + A3FAA90F21A261A300605F27 /* promise */ = { + isa = PBXGroup; + children = ( + A3FAA91021A261CE00605F27 /* COPromise.h */, + A3FAA91121A261CE00605F27 /* COPromise.m */, + ); + path = promise; + sourceTree = ""; + }; + D85037C41B9C6D8400864DF0 = { + isa = PBXGroup; + children = ( + D85037D41B9C6D8400864DF0 /* coobjc */, + A35C049921EC366A00AC7D6E /* coswift */, + D85037D11B9C6D8400864DF0 /* Frameworks */, + D85037D01B9C6D8400864DF0 /* Products */, + 4F83B0FDFBBD64656B7DCD45 /* Pods */, + ); + sourceTree = ""; + }; + D85037D01B9C6D8400864DF0 /* Products */ = { + isa = PBXGroup; + children = ( + D85037CF1B9C6D8400864DF0 /* coobjc.framework */, + A35C049821EC366A00AC7D6E /* coswift.framework */, + ); + name = Products; + sourceTree = ""; + }; + D85037D11B9C6D8400864DF0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + A37DDF821E8A62E400E11BD9 /* Foundation.framework */, + A37DDF801E8A62DF00E11BD9 /* UIKit.framework */, + 539E1B31B66ADA95F4988159 /* libPods-coobjc.a */, + B83F808983E7DB693B20B7F8 /* libPods-coswift.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + D85037D41B9C6D8400864DF0 /* coobjc */ = { + isa = PBXGroup; + children = ( + 1865B8EE21B8C49D008C8727 /* objc */, + A3FAA90F21A261A300605F27 /* promise */, + 1827C571219AE57E0004CE59 /* api */, + 1827C56A219AE57E0004CE59 /* core */, + 1827C560219AE57D0004CE59 /* csp */, + 1827C564219AE57E0004CE59 /* util */, + D85037D51B9C6D8400864DF0 /* Supporting Files */, + ); + path = coobjc; + sourceTree = ""; + }; + D85037D51B9C6D8400864DF0 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + D85037D71B9C6D8400864DF0 /* coobjc-Prefix.pch */, + D85037D61B9C6D8400864DF0 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + A35C049321EC366A00AC7D6E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + A3824E94221FFEC200B6BFE7 /* coswift.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D85037CB1B9C6D8400864DF0 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + A3FAA91621A2B06A00605F27 /* COChan.h in Headers */, + 1865B8F521B8C9C5008C8727 /* co_errors.h in Headers */, + A3FAA91221A261CE00605F27 /* COPromise.h in Headers */, + A3FAA91E21A2B09700605F27 /* COCoroutine.h in Headers */, + 1827C575219AE57E0004CE59 /* co_csp.h in Headers */, + 18BC88C021BA8BCC00EF3D9B /* co_tuple.h in Headers */, + 18E74C1C21AE80EE003A9065 /* COActorChan.h in Headers */, + 18EE50AE21AE7DA400F244B6 /* COActorCompletable.h in Headers */, + 18EE50AA21AE7D7600F244B6 /* COActorMessage.h in Headers */, + 18EE50A621AE7D6300F244B6 /* COActor.h in Headers */, + 1865B8F121B8C4B5008C8727 /* co_autorelease.h in Headers */, + 1827C57A219AE57E0004CE59 /* coroutine_context.h in Headers */, + A3ECCFCC21B7D17300CC36B7 /* co_queuedebugging_support.h in Headers */, + 1827C57C219AE57E0004CE59 /* coroutine.h in Headers */, + 1827C584219AE59F0004CE59 /* coobjc.h in Headers */, + 1807602621A256B5006FD552 /* co_queue.h in Headers */, + D85037D81B9C6D8400864DF0 /* coobjc-Prefix.pch in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + A35C049721EC366A00AC7D6E /* coswift */ = { + isa = PBXNativeTarget; + buildConfigurationList = A35C049F21EC366A00AC7D6E /* Build configuration list for PBXNativeTarget "coswift" */; + buildPhases = ( + B52C0F8BBD444C4F13BA71BA /* [CP] Check Pods Manifest.lock */, + A35C049321EC366A00AC7D6E /* Headers */, + A35C049421EC366A00AC7D6E /* Sources */, + A35C049521EC366A00AC7D6E /* Frameworks */, + A35C049621EC366A00AC7D6E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + A3824E93221FFDBF00B6BFE7 /* PBXTargetDependency */, + ); + name = coswift; + productName = coswift; + productReference = A35C049821EC366A00AC7D6E /* coswift.framework */; + productType = "com.apple.product-type.framework"; + }; + D85037CE1B9C6D8400864DF0 /* coobjc */ = { + isa = PBXNativeTarget; + buildConfigurationList = D85037E11B9C6D8500864DF0 /* Build configuration list for PBXNativeTarget "coobjc" */; + buildPhases = ( + EAD5836EB0D80604FA3AF3D8 /* [CP] Check Pods Manifest.lock */, + D85037C91B9C6D8400864DF0 /* Sources */, + D85037CA1B9C6D8400864DF0 /* Frameworks */, + D85037CB1B9C6D8400864DF0 /* Headers */, + D85037CC1B9C6D8400864DF0 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = coobjc; + productName = coobjc; + productReference = D85037CF1B9C6D8400864DF0 /* coobjc.framework */; + productType = "com.apple.product-type.framework.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D85037C51B9C6D8400864DF0 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0640; + ORGANIZATIONNAME = "Alibaba lnc."; + TargetAttributes = { + A35C049721EC366A00AC7D6E = { + CreatedOnToolsVersion = 10.1; + LastSwiftMigration = 1010; + ProvisioningStyle = Automatic; + }; + D85037CE1B9C6D8400864DF0 = { + CreatedOnToolsVersion = 6.4; + }; + }; + }; + buildConfigurationList = D85037C81B9C6D8400864DF0 /* Build configuration list for PBXProject "coobjc" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = D85037C41B9C6D8400864DF0; + productRefGroup = D85037D01B9C6D8400864DF0 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D85037CE1B9C6D8400864DF0 /* coobjc */, + A35C049721EC366A00AC7D6E /* coswift */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + A35C049621EC366A00AC7D6E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D85037CC1B9C6D8400864DF0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + B52C0F8BBD444C4F13BA71BA /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-coswift-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + EAD5836EB0D80604FA3AF3D8 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-coobjc-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + A35C049421EC366A00AC7D6E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A35C04A521EC36C200AC7D6E /* Coroutine.swift in Sources */, + A35C04A121EC369F00AC7D6E /* Promise.swift in Sources */, + A3D67CE321EDF57F009328CC /* coswift.swift in Sources */, + A3D67CE121EDF56E009328CC /* Errors.swift in Sources */, + A35C04A321EC36AD00AC7D6E /* Chan.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D85037C91B9C6D8400864DF0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1827C57E219AE57E0004CE59 /* coroutine_context.m in Sources */, + 1807602721A256B5006FD552 /* co_queue.m in Sources */, + 18EE50AF21AE7DA400F244B6 /* COActorCompletable.m in Sources */, + 1827C57F219AE57E0004CE59 /* coroutine.m in Sources */, + 1865B8F621B8C9C5008C8727 /* co_errors.m in Sources */, + 18E74C1D21AE80EE003A9065 /* COActorChan.m in Sources */, + A3FAA91721A2B06A00605F27 /* COChan.m in Sources */, + A32FD4D321B64E6D008B4295 /* co_queuedebugging_support.m in Sources */, + 1865B8F221B8C4B5008C8727 /* co_autorelease.mm in Sources */, + A3FAA91F21A2B09700605F27 /* COCoroutine.m in Sources */, + 18EE50A721AE7D6300F244B6 /* COActor.m in Sources */, + 18BC88C121BA8BCC00EF3D9B /* co_tuple.m in Sources */, + 1827C573219AE57E0004CE59 /* co_csp.m in Sources */, + 18EE50AB21AE7D7600F244B6 /* COActorMessage.m in Sources */, + 1827C57B219AE57E0004CE59 /* coroutine_context.s in Sources */, + A3FAA91321A261CE00605F27 /* COPromise.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + A3824E93221FFDBF00B6BFE7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = D85037CE1B9C6D8400864DF0 /* coobjc */; + targetProxy = A3824E92221FFDBF00B6BFE7 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + A35C049D21EC366A00AC7D6E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 090CF6E574DD4748505F69A2 /* Pods-coswift.debug.xcconfig */; + buildSettings = { + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = "$BUILD_DIR/Products/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; + GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = ""; + INFOPLIST_FILE = coswift/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.nj.coswift; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + A35C049E21EC366A00AC7D6E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 78543E2E7A973683F37BF1C8 /* Pods-coswift.release.xcconfig */; + buildSettings = { + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_SEARCH_PATHS = "$BUILD_DIR/Products/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; + GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = ""; + INFOPLIST_FILE = coswift/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.nj.coswift; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + D85037DF1B9C6D8500864DF0 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + }; + name = Debug; + }; + D85037E01B9C6D8500864DF0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + }; + name = Release; + }; + D85037E21B9C6D8500864DF0 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1C21392EBD5DCF258D11E284 /* Pods-coobjc.debug.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD)"; + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_MODULE_DEBUGGING = YES; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + FRAMEWORK_VERSION = A; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "coobjc/coobjc-Prefix.pch"; + HEADER_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = coobjc/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACH_O_TYPE = staticlib; + OTHER_CFLAGS = "$(inherited)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALID_ARCHS = "arm64 x86_64 i386 armv7"; + WRAPPER_EXTENSION = framework; + }; + name = Debug; + }; + D85037E31B9C6D8500864DF0 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DFFA02577192450EC6C700AF /* Pods-coobjc.release.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD)"; + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_MODULE_DEBUGGING = YES; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + FRAMEWORK_VERSION = A; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "coobjc/coobjc-Prefix.pch"; + HEADER_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = coobjc/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACH_O_TYPE = staticlib; + OTHER_CFLAGS = "$(inherited)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALID_ARCHS = "arm64 x86_64 i386 armv7"; + WRAPPER_EXTENSION = framework; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + A35C049F21EC366A00AC7D6E /* Build configuration list for PBXNativeTarget "coswift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A35C049D21EC366A00AC7D6E /* Debug */, + A35C049E21EC366A00AC7D6E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D85037C81B9C6D8400864DF0 /* Build configuration list for PBXProject "coobjc" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D85037DF1B9C6D8500864DF0 /* Debug */, + D85037E01B9C6D8500864DF0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D85037E11B9C6D8500864DF0 /* Build configuration list for PBXNativeTarget "coobjc" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D85037E21B9C6D8500864DF0 /* Debug */, + D85037E31B9C6D8500864DF0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D85037C51B9C6D8400864DF0 /* Project object */; +} diff --git a/coobjc.xcodeproj/xcshareddata/xcschemes/coobjc.xcscheme b/coobjc.xcodeproj/xcshareddata/xcschemes/coobjc.xcscheme new file mode 100644 index 0000000..6ff910d --- /dev/null +++ b/coobjc.xcodeproj/xcshareddata/xcschemes/coobjc.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coobjc/Info.plist b/coobjc/Info.plist new file mode 100644 index 0000000..dff01b8 --- /dev/null +++ b/coobjc/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + com.taobao.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/coobjc/api/COActor.h b/coobjc/api/COActor.h new file mode 100644 index 0000000..eba8aff --- /dev/null +++ b/coobjc/api/COActor.h @@ -0,0 +1,65 @@ +// +// COActor.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef void (^COActorExecutor)(COActorChan *); + +/** + This is implementation of Actor model + */ +@interface COActor : COCoroutine + +/** + The block of actor. + */ +@property(nonatomic, copy) COActorExecutor exector; + +/** + The channel of the actor + */ +@property(nonatomic, readonly) COActorChan *messageChan; + + +/** + Send a message to the Actor. + + @param message any oc object + @return An awaitable Channel. + */ +- (COActorCompletable *)sendMessage:(id)message; + + +/** + Actor create method + + @param block execute code block + @param queue the dispatch_queue_t this actor run. + @return The actor instance. + */ ++ (instancetype)actorWithBlock:(COActorExecutor)block onQueue:(dispatch_queue_t _Nullable)queue; + +@end + +NS_ASSUME_NONNULL_END diff --git a/coobjc/api/COActor.m b/coobjc/api/COActor.m new file mode 100644 index 0000000..7e0547f --- /dev/null +++ b/coobjc/api/COActor.m @@ -0,0 +1,59 @@ +// +// COActor.m +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "COActor.h" + +@implementation COActor +@synthesize messageChan = _messageChan; + + +- (COActorChan *)messageChan { + if (!_messageChan) { + _messageChan = [COActorChan expandableChan]; + } + return _messageChan; +} + +- (COActorCompletable *)sendMessage:(id)message { + + COActorCompletable *completable = [COActorCompletable promise]; + dispatch_async(self.queue, ^{ + COActorMessage *actorMessage = [[COActorMessage alloc] initWithType:message completable:completable]; + [self.messageChan send_nonblock:actorMessage]; + }); + return completable; +} + + + ++ (instancetype)actorWithBlock:(COActorExecutor)block onQueue:(dispatch_queue_t _Nullable)queue { + COActor *actor = [self coroutineWithBlock:^{ + + } onQueue:queue]; + [actor setExector:block]; + return actor; +} + +- (void)execute { + if (_exector) { + _exector(self.messageChan); + } +} + + +@end diff --git a/coobjc/api/COActorChan.h b/coobjc/api/COActorChan.h new file mode 100644 index 0000000..739933e --- /dev/null +++ b/coobjc/api/COActorChan.h @@ -0,0 +1,42 @@ +// +// COActorChan.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + This is a subclass of COChan. comform to protocol NSFastEnumeration + + @discussion can use for...in.. statement get message from the channel. + */ +@interface COActorChan : COChan + +/** + Blocking read a message from the Channel. + + @return The actor message object. + */ +- (COActorMessage *)next; + +@end + +NS_ASSUME_NONNULL_END diff --git a/coobjc/api/COActorChan.m b/coobjc/api/COActorChan.m new file mode 100644 index 0000000..f548cfd --- /dev/null +++ b/coobjc/api/COActorChan.m @@ -0,0 +1,63 @@ +// +// COActorChan.m +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "COActorChan.h" + +@interface COActorChan () +{ + unsigned long enum_state; +} + +@property(nonatomic, strong) COActorMessage *lastMessage; + +@end + +@implementation COActorChan + +- (COActorMessage *)next { + if (self.isCancelled) { + return nil; + } + id obj = [self receive]; + if (![obj isKindOfClass:[COActorMessage class]]) { + self.lastMessage = nil; + return nil; + } + self.lastMessage = obj; + return obj; +} + +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id __unsafe_unretained _Nullable [_Nonnull])buffer count:(NSUInteger)len { + + if (state->state == 0) { + state->mutationsPtr = &enum_state; + state->state = enum_state; + } + + NSUInteger count = 0; + state->itemsPtr = buffer; + COActorMessage *message = [self next]; + if (message) { + buffer[0] = message; + count++; + } + + return count; +} + +@end diff --git a/coobjc/api/COActorCompletable.h b/coobjc/api/COActorCompletable.h new file mode 100644 index 0000000..689f1bd --- /dev/null +++ b/coobjc/api/COActorCompletable.h @@ -0,0 +1,27 @@ +// +// COActorCompletable.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import + +/** + The promise for actor message. + */ +@interface COActorCompletable : COPromise + +@end diff --git a/coobjc/api/COActorCompletable.m b/coobjc/api/COActorCompletable.m new file mode 100644 index 0000000..8358067 --- /dev/null +++ b/coobjc/api/COActorCompletable.m @@ -0,0 +1,23 @@ +// +// COActorCompletable.m +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "COActorCompletable.h" + +@implementation COActorCompletable + +@end diff --git a/coobjc/api/COActorMessage.h b/coobjc/api/COActorMessage.h new file mode 100644 index 0000000..b2815a2 --- /dev/null +++ b/coobjc/api/COActorMessage.h @@ -0,0 +1,88 @@ +// +// COActorMessage.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + The message object send to COActor + */ +@interface COActorMessage : NSObject + +/** + Reply to sender with a return object. + */ +@property(nonatomic, copy) void (^complete)(id _Nullable result); + +/** + The value pass to message. + */ +@property(nonatomic, readonly, nullable) id type; + + +/** + Create a actor message + + @param type the message content value + @param completable the complete promise object. + @return The actor message + */ +- (instancetype)initWithType:(id)type + completable:(COActorCompletable *)completable; + + +/** + Trans value to string type. + */ +- (NSString * _Nullable)stringType; + +/** + Trans value to int type. + */ +- (int)intType; + +/** + Trans value to uint type. + */ +- (NSUInteger)uintType; + +/** + Trans value to double type. + */ +- (double)doubleType; + +/** + Trans value to float type. + */ +- (float)floatType; + +/** + Trans value to NSDictionary type. + */ +- (NSDictionary * _Nullable)dictType; + +/** + Trans value to NSArray type. + */ +- (NSArray * _Nullable)arrayType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/coobjc/api/COActorMessage.m b/coobjc/api/COActorMessage.m new file mode 100644 index 0000000..427d6e3 --- /dev/null +++ b/coobjc/api/COActorMessage.m @@ -0,0 +1,90 @@ +// +// COActorMessage.m +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "COActorMessage.h" + +@interface COActorMessage () + +@property(nonatomic, strong) COActorCompletable *completableObj; + +@end + +@implementation COActorMessage + +- (instancetype)initWithType:(id)type + completable:(COActorCompletable *)completable { + self = [super init]; + if (self) { + _type = type; + _completableObj = completable; + } + return self; +} + +- (void (^)(id))complete { + COActorCompletable *completable = _completableObj; + return ^(id val){ + if (completable) { + [completable fulfill:val]; + } + }; +} + +- (NSString*)stringType { + if ([_type isKindOfClass:[NSString class]]) { + return _type; + } + return [_type stringValue]; +} + +- (int)intType { + return [_type intValue]; +} + +- (NSUInteger)uintType { + return [_type unsignedIntegerValue]; +} + +- (double)doubleType { + return [_type doubleValue]; +} + +- (float)floatType { + return [_type floatValue]; +} + +- (NSDictionary*)dictType { + if ([_type isKindOfClass:[NSMutableDictionary class]]) { + return [_type copy]; + } + else if([_type isKindOfClass:[NSDictionary class]]){ + return _type; + } + return nil; +} + +- (NSArray*)arrayType { + if ([_type isKindOfClass:[NSMutableArray class]]) { + return [_type copy]; + } + else if([_type isKindOfClass:[NSArray class]]){ + return _type; + } + return nil; +} +@end diff --git a/coobjc/api/COChan.h b/coobjc/api/COChan.h new file mode 100644 index 0000000..88a01a3 --- /dev/null +++ b/coobjc/api/COChan.h @@ -0,0 +1,135 @@ +// +// COChan.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 + +NS_ASSUME_NONNULL_BEGIN + +/** + The channel object. + + Channel is a implementation of Process/Channel, which defined in CSP(Communicating + Sequential Processes). + */ +@interface COChan : NSObject + +typedef void (^COChanOnCancelBlock)(COChan *chan); + +/** + Create a Channel object, default buffcount is 0. + + @see `chanWithBuffCount:` + + @return the Channel object + */ ++ (instancetype)chan; + +/** + Create a Channel object, and you can set the buffcount. + + @param buffCount then max buffer count of the channel. + @return the Channel object + */ ++ (instancetype)chanWithBuffCount:(int32_t)buffCount; + +/** + Create a expandable Channel. the buffer count is expandable, which means, + `send:` will not blocking current process. And, val send to channel will not abandon. + The buffer count being set to -1. + + @return the Channel object + */ ++ (instancetype)expandableChan; + +/** + Send a value to the Channel. + + @discussion This method may blocking the current process, when there's no one receives and buffer is full. + So, this method requires calling in a coroutine. + + @param val the value send to Channel. + */ +- (void)send:(Value _Nullable )val; + +/** + Receive a value from the Channel, blocking. + + @discussion This method may blocking the current process, until some one send value to the Channel. + + @return the value received from the channel + */ +- (Value _Nullable )receive; + +/** + Send a value to the Channel, non blocking. + + @discussion 1. If someone is receiving, send it. + 2. If no one receiving, but buffer not full, store in the buffer. + 3. If no one receiving, and buffer is full, discard value. + + @param val the value send to Channel. + */ +- (void)send_nonblock:(Value _Nullable )val; + +/** + Receive a value from the Channel, non blocking. + + @discussion 1. If buffer has data, receive a value from buffer. + 2. If buffer is empty, and someone is sending, receive it. + 3. If buffer is empty, and on one sending. return nil. + + @return the value object received. + */ +- (Value _Nullable)receive_nonblock; + +/** + Cancel the Channel. + + @discussion Why we provide this api? + + Sometimes, we need cancel a operation, such as a Network Connection. So, a coroutine is cancellable. + But Channel may blocking the coroutine, so we need cancel the Channel when cancel a coroutine. + */ +- (void)cancel; + +/** + tell us is the channel is cancelled. + + @return isCancelled. + */ +- (BOOL)isCancelled; + +/** + Set a callback block when the Channel is cancel. + + @param onCancelBlock the cancel callback block. + */ +- (void)onCancel:(COChanOnCancelBlock _Nullable )onCancelBlock; + +@end + +/** + An implementation Channel for `co_sleep` + */ +@interface COTimeChan: COChan + ++ (instancetype)sleep:(NSTimeInterval)duration; + +@end + +NS_ASSUME_NONNULL_END diff --git a/coobjc/api/COChan.m b/coobjc/api/COChan.m new file mode 100644 index 0000000..5e78468 --- /dev/null +++ b/coobjc/api/COChan.m @@ -0,0 +1,227 @@ +// +// COChan.m +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "COChan.h" +#import "coroutine.h" +#import "co_csp.h" +#import "COCoroutine.h" +#import "co_queue.h" + +static void co_chan_custom_resume(coroutine_t *co) { + [co_get_obj(co) addToScheduler]; +} + +@interface COChan() +{ + co_channel *_chan; + BOOL _cancelled; +} + +@property(nonatomic, assign) int count; +@property(nonatomic, copy) COChanOnCancelBlock cancelBlock; + +@end + +@implementation COChan + +- (void)dealloc { + // free the remain objects in buffer. + if (_chan->buffer.count > 0) { + for (int i = 0; i < _chan->buffer.count; i++) { + void *cacheVal = (void *)(_chan->buffer.arr + i * _chan->buffer.elemsize); + __unused id val = (__bridge_transfer id)cacheVal; + } + } + if (_chan) { + chanfree(_chan); + } +} + ++ (instancetype)chan { + COChan *chan = [[self alloc] initWithBuffCount:0]; + return chan; +} + ++ (instancetype)chanWithBuffCount:(int32_t)buffCount { + COChan *chan = [[self alloc] initWithBuffCount:buffCount]; + return chan; +} + ++ (instancetype _Nonnull )expandableChan { + COChan *chan = [[self alloc] initWithBuffCount:-1]; + return chan; +} + +- (instancetype)initWithBuffCount:(int32_t)buffCount { + self = [super init]; + if (self) { + _chan = chancreate(sizeof(void *), buffCount, co_chan_custom_resume); + _cancelled = NO; + } + return self; +} + +- (void)send:(id)val { + + // send may blocking current process, so must check in a coroutine. + COCoroutine *co = [COCoroutine currentCoroutine]; + if (!co) { + NSAssert(false, @"send blocking must call in a coroutine."); + return; + } + + co.currentChan = self; + chansendp(_chan, (__bridge_retained void *)val); + co.currentChan = nil; +} + +- (id)receive { + + COCoroutine *co = [COCoroutine currentCoroutine]; + if (!co) { + return nil; + } + co.currentChan = self; + co.lastError = nil; + + void *ret = chanrecvp(_chan); + + co.currentChan = nil; + if (ret == NULL) { + return nil; + } else { + id val = (__bridge_transfer id)ret; + if ([self isCancelled]) { + return nil; + } else { + return val; + } + } +} + +- (void)send_nonblock:(id)val { + + channbsendp(_chan, (__bridge_retained void *)val); +} + +- (id)receive_nonblock { + + COCoroutine *co = [COCoroutine currentCoroutine]; + co.lastError = nil; + + void *ret = NULL; + __unused int st = channbrecv(_chan, (void *)&ret); + + if (ret == NULL) { + return nil; + } else { + + id val = (__bridge_transfer id)ret; + if ([self isCancelled]) { + return nil; + } else { + return val; + } + } +} + +- (void)cancel { + + if (self.isCancelled) { + return; + } + + _cancelled = YES; + + if (self.cancelBlock) { + self.cancelBlock(self); + } + + // releaseing blocking channels. + int blockingSend = 0, blockingReceive = 0; + if (changetblocking(_chan, &blockingSend, &blockingReceive)) { + + if (blockingSend > 0) { + while (blockingSend) { + void *ret = NULL; + __unused int st = channbrecv(_chan, (void *)&ret); + __unused id val = (__bridge_transfer id)ret; + blockingSend--; + } + } else if (blockingReceive > 0) { + while (blockingReceive) { + id val = nil; + channbsendp(_chan, (__bridge_retained void *)val); + blockingReceive--; + } + } + } +} + +- (BOOL)isCancelled { + return _cancelled; +} + +- (void)onCancel:(COChanOnCancelBlock)onCancelBlock { + self.cancelBlock = onCancelBlock; +} + +@end + + +@implementation COTimeChan +{ + BOOL _isDone; +} + ++ (instancetype)chanWithDuration:(NSTimeInterval)duration { + COTimeChan *chan = [[COTimeChan alloc] initWithBuffCount:0]; + return chan; +} + +- (void)send_nonblock:(id)val { + if (_isDone) { + return; + } + _isDone = YES; + [super send_nonblock:val]; +} + ++ (instancetype)sleep:(NSTimeInterval)duration { + COTimeChan *chan = [self chanWithDuration:duration]; + + dispatch_queue_t queue = co_get_current_queue(); + + dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); + dispatch_source_set_timer(timer, dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), DISPATCH_TIME_FOREVER, 0); + dispatch_source_set_event_handler(timer, ^{ + dispatch_source_cancel(timer); + [chan send_nonblock:@1]; + }); + + [chan onCancel:^(COChan * _Nonnull chan) { + dispatch_source_cancel(timer); + }]; + + dispatch_resume(timer); + + + return chan; +} + +@end diff --git a/coobjc/api/COCoroutine.h b/coobjc/api/COCoroutine.h new file mode 100644 index 0000000..76964eb --- /dev/null +++ b/coobjc/api/COCoroutine.h @@ -0,0 +1,220 @@ +// +// COCoroutine.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + Can used in a generator, use this method to yield a Promise object. + + @param promiseOrChan `COPromise` or `COChan` object + */ +void co_generator_yield(id promiseOrChan); + + +/** + Can used in a generator, use this method to yield a value. + + @param value the value produced by Generator + */ +void co_generator_yield_value(id value); + +/** + Wait a `COPromise` or `COChan` object, until Promise is fulfilled/rejected, or Channel has value send. + + @param awaitable `COPromise` or `COChan` object + @return If await Promise, return fulfilled value; elseif Channel, return sent value. + */ +id _Nullable co_await(id awaitable); + +/** + Await a list of awaitable object asynchronous. The tasks is concurrent. + + @param awaitableArray a list of awaitable + @return the value result list. `nil` is replaced by `NSNull`. + */ +NSArray *co_batch_await(NSArray * awaitableArray); + +@class COCoroutine; + +/** + Get the Coroutine ObjC object from the struct. + + @param co the coroutine struct. + @return `COCorutine` instance. + */ +COCoroutine *co_get_obj(coroutine_t *co); + +/** + Get the lastError generated by Promise. + + @return NSError object. + */ +NSError *co_getError(); + +/** + `co_setspecific` and `co_getspecific` help you to store a value in the context. + */ +BOOL co_setspecific(NSString * key, id _Nullable value); +id _Nullable co_getspecific(NSString * key); + +extern NSString *const COInvalidException; + +/** + COCoroutine is the object owned coroutine. + */ +@interface COCoroutine: NSObject + +/** + Call back when coroutine is finished. + */ +@property(nonatomic, copy, nullable) dispatch_block_t finishedBlock; + +/** + The code body of the coroutine. + */ +@property(nonatomic, copy) void (^execBlock) (void); + +/** + The `dispatch_queue_t` coroutine will run on it. + */ +@property(nonatomic, strong) dispatch_queue_t queue; + +/** + The struct pointer of coroutine_t + */ +@property(nonatomic, assign, nullable) coroutine_t *co; + +/** + When COCoroutine as a Generator, this Channel use to yield a value. + */ +@property(nonatomic, strong, nullable) COChan *yieldChan; + +/** + If `COCoroutine is suspend by a Channel, this pointer mark it. + */ +@property(nonatomic, strong, nullable) COChan *currentChan; + +/** + The lastError marked in the Coroutine. + */ +@property(nonatomic, strong, nullable) NSError *lastError; + + +/** + Get the current running coroutine object. + + @return The coroutine object. + */ ++ (COCoroutine *_Nullable)currentCoroutine; + +/** + Tell if the coroutine is cancelled or finished. + + @return isActive + */ ++ (BOOL)isActive; + +/** + Create coroutine instance. + + @param block exec code body + @param queue the `dispatch_queue_t` + @return The coroutine object. + */ ++ (instancetype)coroutineWithBlock:(void(^)(void))block onQueue:(dispatch_queue_t _Nullable)queue; + + +/** + Create coroutine instance with custom stack size, in case stackSize not enough. + The stack size is 65536 by default. + + @param block : the code + @param queue : the queue code run + @param stackSize : stackSize of the coroutine. + @return The coroutine object. + */ ++ (instancetype)coroutineWithBlock:(void(^)(void))block onQueue:(dispatch_queue_t _Nullable)queue stackSize:(NSUInteger)stackSize; + + +/** + The coroutine is Finished. + */ +- (BOOL)isFinished; + +/** + The coroutine is cancelled. + */ +- (BOOL)isCancelled; + +/** + The coroutine is resumed. + */ +- (BOOL)isResume; + +/** + Cancel the coroutine. + */ +- (void)cancel; + +/** + Await the coroutine to be finished. + */ +- (void)await; + +/** + The designed for Generator, used as yield/next. + + @return The value yiled by the Generator. + */ +- (id _Nullable )next; + +/** + Calling this method in another coroutine. wait the coroutine to be finished. + */ +- (void)join; + +/** + Calling this method in another coroutine. Cancel the coroutine, and wait the coroutine to be finished. + */ +- (void)cancelAndJoin; + +/** + Resume the coroutine. + + @return The coroutine object. + */ +- (COCoroutine *_Nonnull)resume; + +/** + Resume the coroutine immediately, in current runloop or another queue. + */ +- (void)resumeNow; + +/** + Add to scheduler, if scheduler is idle, resume it. + */ +- (void)addToScheduler; + +@end + +NS_ASSUME_NONNULL_END diff --git a/coobjc/api/COCoroutine.m b/coobjc/api/COCoroutine.m new file mode 100644 index 0000000..fbea01c --- /dev/null +++ b/coobjc/api/COCoroutine.m @@ -0,0 +1,464 @@ +// +// COCoroutine.m +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "COCoroutine.h" +#import "COChan.h" +#import "coroutine.h" +#import "co_queue.h" + +NSString *const COInvalidException = @"COInvalidException"; + +@interface COCoroutine () + +@property(nonatomic, assign) BOOL isFinished; +@property(nonatomic, assign) BOOL isCancelled; +@property(nonatomic, assign) BOOL isResume; +@property(nonatomic, strong) NSMutableDictionary *parameters; + + +- (void)execute; + +- (void)setParam:(id _Nullable )value forKey:(NSString *_Nonnull)key; +- (id _Nullable )paramForKey:(NSString *_Nonnull)key; + +@end + +COCoroutine *co_get_obj(coroutine_t *co) { + if (co == nil) { + return nil; + } + id obj = (__bridge id)coroutine_getuserdata(co); + if ([obj isKindOfClass:[COCoroutine class]]) { + return obj; + } + return nil; +} + +NSError *co_getError() { + return [COCoroutine currentCoroutine].lastError; +} + + +BOOL co_setspecific(NSString *key, id _Nullable value) { + COCoroutine *co = [COCoroutine currentCoroutine]; + if (!co) { + return NO; + } + [co setParam:value forKey:key]; + return YES; +} + +id _Nullable co_getspecific(NSString *key) { + COCoroutine *co = [COCoroutine currentCoroutine]; + if (!co) { + return nil; + } + return [co paramForKey:key]; +} + +static void co_exec(coroutine_t *co) { + + COCoroutine *coObj = co_get_obj(co); + if (coObj) { + [coObj execute]; + + coObj.isFinished = YES; + if (coObj.finishedBlock) { + coObj.finishedBlock(); + } + coObj.finishedBlock = nil; + coObj.yieldChan = nil; + } +} + +static void co_obj_dispose(void *coObj) { + COCoroutine *obj = (__bridge_transfer id)coObj; + if (obj) { + obj.co = nil; + } +} + +@interface CONextBeginObj : NSObject + ++ (instancetype)instance; + +@end + +@implementation CONextBeginObj + ++ (instancetype)instance { + static CONextBeginObj *obj = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + obj = [[CONextBeginObj alloc] init]; + }); + return obj; +} + +@end + +@implementation COCoroutine + +- (void)execute { + if (self.execBlock) { + self.execBlock(); + } +} + +- (instancetype)init { + self = [super init]; + if (self) { + _parameters = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (void)setParam:(id)value forKey:(NSString *)key { + [_parameters setValue:value forKey:key]; +} + +- (id)paramForKey:(NSString *)key { + return [_parameters valueForKey:key]; +} + +- (BOOL)isCurrentQueue { + if (co_get_current_queue() == self.queue) { + return YES; + } + return NO; +} + ++ (COCoroutine *)currentCoroutine { + return co_get_obj(coroutine_self()); +} + ++ (BOOL)isActive { + coroutine_t *co = coroutine_self(); + if (co) { + if (co->is_cancelled) { + return NO; + } else { + return YES; + } + } else { + @throw [NSException exceptionWithName:COInvalidException reason:@"isActive must called in a routine" userInfo:@{}]; + } +} + +- (instancetype)initWithBlock:(void (^)(void))block onQueue:(dispatch_queue_t)queue { + self = [super init]; + if (self) { + _execBlock = [block copy]; + _queue = queue; + } + return self; +} + ++ (instancetype)coroutineWithBlock:(void (^)(void))block onQueue:(dispatch_queue_t)queue { + + return [self coroutineWithBlock:block onQueue:queue stackSize:0]; +} + ++ (instancetype)coroutineWithBlock:(void(^)(void))block onQueue:(dispatch_queue_t _Nullable)queue stackSize:(NSUInteger)stackSize { + if (queue == NULL) { + queue = co_get_current_queue(); + } + if (queue == NULL) { + return nil; + } + COCoroutine *coObj = [[self alloc] initWithBlock:block onQueue:queue]; + coObj.queue = queue; + coroutine_t *co = coroutine_create((void (*)(void *))co_exec); + if (stackSize > 0 && stackSize < 1024*1024) { // Max 1M + co->stack_size = (uint32_t)((stackSize % 16384 > 0) ? ((stackSize/16384 + 1) * 16384) : stackSize/16384); // Align with 16kb + } + coObj.co = co; + coroutine_setuserdata(co, (__bridge_retained void *)coObj, co_obj_dispose); + return coObj; +} + +- (void)performBlockOnQueue:(dispatch_block_t)block { + dispatch_queue_t queue = self.queue; + if (queue == co_get_current_queue()) { + block(); + } else { + dispatch_async(queue, block); + } +} + +- (void)_internalCancel { + + if (_isCancelled) { + return; + } + + _isCancelled = YES; + + coroutine_t *co = self.co; + if (co) { + co->is_cancelled = YES; + } + + COChan *chan = self.currentChan; + if (chan) { + [chan cancel]; + } +} + +- (void)cancel { + [self performBlockOnQueue:^{ + [self _internalCancel]; + }]; +} + +- (void)await { + COChan *chan = [COChan chanWithBuffCount:1]; + [self performBlockOnQueue:^{ + if ([self isFinished]) { + [chan send_nonblock:@(1)]; + } + else{ + [self setFinishedBlock:^{ + [chan send_nonblock:@(1)]; + }]; + } + }]; + [chan receive]; +} + +- (id)next { + + if (!self.isResume) { + [self resume]; + } + + if ([self isCancelled] || [self isFinished]) { + return nil; + } + + id val = nil; + COChan *yieldChan = self.yieldChan; + if (yieldChan) { + + id beginTag = [yieldChan receive]; + if ([beginTag isKindOfClass:[CONextBeginObj class]]) { + val = [yieldChan receive]; + } else { + val = beginTag; + } + } else { + @throw [NSException exceptionWithName:COInvalidException reason:@"next must called by a Generator routine" userInfo:@{}]; + } + return val; +} + +- (COCoroutine *)resume { + dispatch_async(self.queue, ^{ + if (self.isResume) { + return; + } + self.isResume = YES; + coroutine_resume(self.co); + }); + return self; +} + +- (void)resumeNow { + [self performBlockOnQueue:^{ + if (self.isResume) { + return; + } + self.isResume = YES; + coroutine_resume(self.co); + }]; +} + +- (void)addToScheduler { + [self performBlockOnQueue:^{ + coroutine_add(self.co); + }]; +} + +- (void)join { + [self await]; +} + +- (void)cancelAndJoin { + COChan *chan = [COChan chanWithBuffCount:1]; + [self performBlockOnQueue:^{ + if ([self isFinished]) { + [chan send_nonblock:@(1)]; + } + else{ + [self setFinishedBlock:^{ + [chan send_nonblock:@(1)]; + }]; + [self _internalCancel]; + } + }]; + [chan receive]; +} + +@end + + +id co_await(id awaitable) { + coroutine_t *t = coroutine_self(); + if (t == nil) { + @throw [NSException exceptionWithName:COInvalidException reason:@"Cannot call co_await out of a coroutine" userInfo:nil]; + } + if (t->is_cancelled) { + return nil; + } + + if ([awaitable isKindOfClass:[COChan class]]) { + COCoroutine *co = co_get_obj(t); + co.lastError = nil; + id val = [(COChan *)awaitable receive]; + return val; + } else if ([awaitable isKindOfClass:[COPromise class]]) { + + COChan *chan = [COChan chanWithBuffCount:1]; + COCoroutine *co = co_get_obj(t); + + COPromise *promise = awaitable; + [[promise + then:^id _Nullable(id _Nullable value) { + [chan send_nonblock:value]; + return value; + }] + catch:^(NSError * _Nonnull error) { + co.lastError = error; + [chan send_nonblock:nil]; + }]; + + [chan onCancel:^(COChan * _Nonnull chan) { + [promise cancel]; + }]; + + id val = [chan receive]; + return val; + + } else { + @throw [NSException exceptionWithName:COInvalidException + reason:[NSString stringWithFormat:@"Cannot await object: %@.", awaitable] + userInfo:nil]; + } +} + +NSArray *_Nonnull co_batch_await(NSArray * _Nonnull awaitableList) { + + coroutine_t *t = coroutine_self(); + if (t == nil) { + @throw [NSException exceptionWithName:COInvalidException + reason:@"Cannot run co_batch_await out of a coroutine" + userInfo:nil]; + } + if (t->is_cancelled) { + return nil; + } + + NSMutableArray *resultAwaitable = [[NSMutableArray alloc] initWithCapacity:awaitableList.count]; + + for (id awaitable in awaitableList) { + + if ([awaitable isKindOfClass:[COChan class]]) { + + [resultAwaitable addObject:awaitable]; + + } else if ([awaitable isKindOfClass:[COPromise class]]) { + + COChan *chan = [COChan chan]; + COCoroutine *co = co_get_obj(t); + + COPromise *promise = awaitable; + [[promise + then:^id _Nullable(id _Nullable value) { + + [chan send_nonblock:value]; + return value; + }] + catch:^(NSError * _Nonnull error) { + co.lastError = error; + [chan send_nonblock:nil]; + }]; + + [chan onCancel:^(COChan * _Nonnull chan) { + [promise cancel]; + }]; + + [resultAwaitable addObject:chan]; + + } else { + @throw [NSException exceptionWithName:COInvalidException + reason:[NSString stringWithFormat:@"Cannot await object: %@.", awaitable] + userInfo:nil]; + } + + + } + + NSMutableArray *result = [[NSMutableArray alloc] initWithCapacity:awaitableList.count]; + for (COChan *chan in resultAwaitable) { + id val = co_await(chan); + [result addObject:val ? val : [NSNull null]]; + } + return result.copy; +} + + +void co_generator_yield(id _Nonnull promiseOrChan) { + COCoroutine *co = [COCoroutine currentCoroutine]; + if (co == nil) { + @throw [NSException exceptionWithName:COInvalidException + reason:@"Cannot run co_generator_yield out of a coroutine" + userInfo:nil]; + } + if (co.isCancelled) { + return; + } + + if (!co.yieldChan) { + co.yieldChan = [COChan chan]; + } + + [co.yieldChan send:[CONextBeginObj instance]]; // 第一个等待next开始 + if (co.isCancelled) return; + id val = co_await(promiseOrChan); + if (co.isCancelled) return; + [co.yieldChan send:val]; // 第二个发送value给next +} + +void co_generator_yield_value(id value) { + COCoroutine *co = [COCoroutine currentCoroutine]; + if (co == nil) { + @throw [NSException exceptionWithName:COInvalidException + reason:@"Cannot run co_generator_yield_value out of a coroutine" + userInfo:nil]; + } + if (co.isCancelled) { + return; + } + + if (!co.yieldChan) { + co.yieldChan = [COChan chan]; + } + [co.yieldChan send:value]; // 直接发送value给next +} + + diff --git a/coobjc/api/README.md b/coobjc/api/README.md new file mode 100644 index 0000000..9a1ba5c --- /dev/null +++ b/coobjc/api/README.md @@ -0,0 +1 @@ +# api diff --git a/coobjc/api/coobjc.h b/coobjc/api/coobjc.h new file mode 100644 index 0000000..8652c79 --- /dev/null +++ b/coobjc/api/coobjc.h @@ -0,0 +1,203 @@ +// +// coobjc.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 +#import +#import +#import + +/** + Mark a function with `CO_ASYNC`, which means the function may suspend, + so the function must calling in a coroutine. You should make `SURE_ASYNC` in function begans. + */ +#define CO_ASYNC + +/** + Assert the current code is running on a coroutine. + */ +#define SURE_ASYNC NSAssert([COCoroutine currentCoroutine], @"co_async method must run in coroutine"); + +/** + Create a coroutine, then resume it asynchronous on current queue. + co_launch will run the block in next run loop + + @param block the code execute in the coroutine + @return the coroutine instance + */ +NS_INLINE COCoroutine * _Nonnull co_launch(void(^ _Nonnull block)(void)) { + COCoroutine *co = [COCoroutine coroutineWithBlock:block onQueue:nil]; + return [co resume]; +} + +/** + Create a coroutine, then resume it immediately on current queue. + co_launch_now will run the block in current run loop + + @param block the code execute in the coroutine + */ +NS_INLINE void co_launch_now(void(^ _Nonnull block)(void)){ + COCoroutine *co = [COCoroutine coroutineWithBlock:block onQueue:nil]; + [co resumeNow]; +} + +/** + Create a coroutine, then resume it asynchronous on current queue. + co_launch will run the block in next run loop + + The stack size is 65536 by default, in case stackSize not enough, you can customize it. + Max 1M limit. + + @param block the code execute in the coroutine + @return the coroutine instance + */ +NS_INLINE COCoroutine * _Nonnull co_launch_withStackSize(NSUInteger stackSize, void(^ _Nonnull block)(void)) { + COCoroutine *co = [COCoroutine coroutineWithBlock:block onQueue:nil stackSize:stackSize]; + return [co resume]; +} + +/** + Create a coroutine & resume it immediately on given queue. + co_launch_onqueue will run the block in next run loop + + @param block the code execute in the coroutine + @param queue the queue which coroutine work on it. + @return the coroutine instance + */ +NS_INLINE COCoroutine * _Nonnull co_launch_onqueue(dispatch_queue_t _Nullable queue, void(^ _Nonnull block)(void)) { + COCoroutine *co = [COCoroutine coroutineWithBlock:block onQueue:queue]; + return [co resume]; +} + + +/** + Create a sequence, the coroutine will be a Generator. + + @param block the sequence task. + @return the Coroutine + */ +NS_INLINE COCoroutine * _Nonnull co_sequence(void(^ _Nonnull block)(void)) { + COCoroutine *co = [COCoroutine coroutineWithBlock:block onQueue:nil]; + co.yieldChan = [COChan chan]; + return co; +} + +/** + Create a coroutine will execute on the given queue + + @param block the code execute in the coroutine. + @param queue the queue which coroutine work on it. + @return the coroutine instance + */ +NS_INLINE COCoroutine * _Nonnull co_sequence_onqueue(dispatch_queue_t _Nullable queue, void(^ _Nonnull block)(void)) { + COCoroutine *co = [COCoroutine coroutineWithBlock:block onQueue:queue]; + co.yieldChan = [COChan chan]; + return co; +} + +/** + Create a actor. + + @param block the sequence task. + @return the Coroutine + */ +NS_INLINE COActor * _Nonnull co_actor(void(^ _Nonnull block)(COActorChan* _Nonnull)) { + COActor *co = [COActor actorWithBlock:block onQueue:nil]; + co.yieldChan = [COChan chan]; + return (COActor*)[co resume]; +} + +/** + Create a coroutine will execute on the given queue + + @param block the code execute in the coroutine. + @param queue the queue which coroutine work on it. + @return the coroutine instance + */ +NS_INLINE COActor * _Nonnull co_actor_onqueue(dispatch_queue_t _Nullable queue, void(^ _Nonnull block)(COActorChan* _Nonnull)) { + COActor *co = [COActor actorWithBlock:block onQueue:queue]; + co.yieldChan = [COChan chan]; + return (COActor*)[co resume]; +} + + +/** + await + + @param _promiseOrChan the COPromise object, you can also pass a COChan object. + But we suggest use Promise first. + @return return the value, nullable. after, you can use co_getError() method to get the error. + */ +NS_INLINE id _Nullable await(id _Nonnull _promiseOrChan) { + id val = co_await(_promiseOrChan); + return val; +} + +/** + batch_await + + @param _promiseOrChanArray a NSArray of COPromise object or COChan object. + @return return the NSArray of values, if value is nil, the element is NSNull. + */ +NS_INLINE NSArray *_Nullable batch_await(NSArray * _Nonnull _promiseOrChanArray) { + id val = co_batch_await(_promiseOrChanArray); + return val; +} + +/** + yield with a COPromise or COChan + + @param _promiseOrChan the COPromise object or COChan object. + */ +NS_INLINE void yield(id _Nonnull _promiseOrChan) { + co_generator_yield(_promiseOrChan); +} + +/** + yield with a value. + + @param val the value. + */ +NS_INLINE void yield_val(id _Nonnull val) { + co_generator_yield_value(val); +} + +/** + co_delay + + @param duration make the current coroutine sleep $duration seconds. + */ +NS_INLINE void co_delay(NSTimeInterval duration) { + co_await([COTimeChan sleep:duration]); +} + + +/** + co_isActive check current coroutine is active or not, if a coroutine is cancelled, this returns false. + */ +NS_INLINE BOOL co_isActive() { + return [COCoroutine isActive]; +} + + +/** + Check current routine is cancelled. + */ +NS_INLINE BOOL co_isCancelled() { + return [COCoroutine currentCoroutine].isCancelled; +} + diff --git a/coobjc/common/README.md b/coobjc/common/README.md new file mode 100644 index 0000000..734d0f8 --- /dev/null +++ b/coobjc/common/README.md @@ -0,0 +1 @@ +# common diff --git a/coobjc/coobjc-Prefix.pch b/coobjc/coobjc-Prefix.pch new file mode 100644 index 0000000..4a38576 --- /dev/null +++ b/coobjc/coobjc-Prefix.pch @@ -0,0 +1,5 @@ +#ifndef DEBUG + +#define NSLog(...) + +#endif diff --git a/coobjc/core/README.md b/coobjc/core/README.md new file mode 100644 index 0000000..244ed4e --- /dev/null +++ b/coobjc/core/README.md @@ -0,0 +1 @@ +# core diff --git a/coobjc/core/coroutine.h b/coobjc/core/coroutine.h new file mode 100644 index 0000000..82cdf95 --- /dev/null +++ b/coobjc/core/coroutine.h @@ -0,0 +1,142 @@ +// +// coroutine.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 coroutine_h +#define coroutine_h + +#include +#import + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + + /** + Define the scheduler of coroutine + */ + struct coroutine_scheduler; + + /** + Define the coroutine's entry func type + */ + typedef void (*coroutine_func)(void *); + + /** + The structure store coroutine's context data. + */ + struct coroutine { + coroutine_func entry; // Process entry. + void *userdata; // Userdata. + coroutine_func userdata_dispose; // Userdata's dispose action. + void *context; // Coroutine's Call stack data. + void *pre_context; // Coroutine's source process's Call stack data. + int status; // Coroutine's running status. + uint32_t stack_size; // Coroutine's stack size + void *stack_memory; // Coroutine's stack memory address. + void *stack_top; // Coroutine's stack top address. + struct coroutine_scheduler *scheduler; // The pointer to the scheduler. + int8_t is_scheduler; // The coroutine is a scheduler. + + struct coroutine *prev; + struct coroutine *next; + + void *autoreleasepage; // If enable autorelease, the custom autoreleasepage. + bool is_cancelled; // The coroutine is cancelled + }; + typedef struct coroutine coroutine_t; + + /** + Create a new routine. + + @param func main entrance + @return routine obj + */ + coroutine_t *coroutine_create(coroutine_func func); + + + /** + Set/Get userdata. + + @param co coroutine object + @param userdata userdata pointer + @param userdata_dispose callback when coroutine free. + */ + void coroutine_setuserdata(coroutine_t *co, void *userdata, coroutine_func userdata_dispose); + void *coroutine_getuserdata(coroutine_t *co); + + /** + Close and free a coroutine if dead. + + @param co coroutine object + */ + void coroutine_close_ifdead(coroutine_t *co); + + /** + Add coroutine to scheduler, and resume the specified coroutine whatever. + */ + void coroutine_resume(coroutine_t *co); + + /** + Add coroutine to scheduler, and resume the specified coroutine if idle. + */ + void coroutine_add(coroutine_t *co); + + /** + Yield the specified coroutine now. + */ + void coroutine_yield(coroutine_t *co); + + /** + Get the current coroutine. + + @return The current coroutine or NULL. + */ + coroutine_t *coroutine_self(void); + + /** + Define the linked list of scheduler's queue. + */ + struct coroutine_list { + coroutine_t *head; + coroutine_t *tail; + }; + typedef struct coroutine_list coroutine_list_t; + + /** + Define the scheduler. + One thread own one scheduler, all coroutine run this thread shares it. + */ + struct coroutine_scheduler { + coroutine_t *main_coroutine; + coroutine_t *running_coroutine; + coroutine_list_t coroutine_queue; + }; + typedef struct coroutine_scheduler coroutine_scheduler_t; + + /** + Get the current thread's scheduler. + + @return The scheduler object. + */ + coroutine_scheduler_t *coroutine_schedule_self(void); + +#ifdef __cplusplus +} +#endif //__cplusplus + +#endif /* coroutine_h */ diff --git a/coobjc/core/coroutine.m b/coobjc/core/coroutine.m new file mode 100644 index 0000000..fdf3ee2 --- /dev/null +++ b/coobjc/core/coroutine.m @@ -0,0 +1,331 @@ +// +// coroutine.c +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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. + +#include "coroutine.h" +#include +#include +#include +#include +#include +#include +#include "coroutine_context.h" +#import +#import +#import "co_queuedebugging_support.h" + + +#define COROUTINE_DEAD 0 +#define COROUTINE_READY 1 +#define COROUTINE_RUNNING 2 +#define COROUTINE_SUSPEND 3 + + +#define STACK_SIZE (64*1024) +#define DEFAULT_COROUTINE_COUNT 64 + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wincompatible-pointer-types" + + +void scheduler_add_coroutine (coroutine_list_t *l, coroutine_t *t); +void scheduler_delete_coroutine(coroutine_list_t *l, coroutine_t *t); +coroutine_scheduler_t *coroutine_scheduler_new(void); +void coroutine_scheduler_free(coroutine_scheduler_t *schedule); +void coroutine_resume_im(coroutine_t *co); +void *coroutine_memory_malloc(size_t s); +void coroutine_memory_free(void *ptr, size_t size); + +static pthread_key_t coroutine_scheduler_key = 0; + +void *coroutine_memory_malloc(size_t s) { + vm_address_t address; + + vm_size_t size = s; + kern_return_t ret = vm_allocate((vm_map_t)mach_task_self(), &address, size, VM_MAKE_TAG(VM_MEMORY_STACK) | VM_FLAGS_ANYWHERE); + if ( ret != ERR_SUCCESS ) { + return NULL; + } + return (void *)address; +} + +void coroutine_memory_free(void *ptr, size_t size) { + if (ptr) { + vm_deallocate((vm_map_t)mach_task_self(), (vm_address_t)ptr, size); + } +} + +coroutine_scheduler_t *coroutine_scheduler_self(void) { + + if (!coroutine_scheduler_key) { + pthread_key_create(&coroutine_scheduler_key, coroutine_scheduler_free); + } + + void *schedule = pthread_getspecific(coroutine_scheduler_key); + return schedule; +} + +coroutine_scheduler_t *coroutine_scheduler_self_create_if_not_exists(void) { + + if (!coroutine_scheduler_key) { + pthread_key_create(&coroutine_scheduler_key, coroutine_scheduler_free); + } + + void *schedule = pthread_getspecific(coroutine_scheduler_key); + if (!schedule) { + schedule = coroutine_scheduler_new(); + pthread_setspecific(coroutine_scheduler_key, schedule); + } + return schedule; +} + +void coroutine_scheduler_main(coroutine_t *scheduler_co) { + + coroutine_t *co; + coroutine_scheduler_t *scheduler = scheduler_co->scheduler; + for (;;) { + + co = scheduler->coroutine_queue.head; + if (co == NULL) { + // jump out. scheduler will enter idle. + coroutine_yield(scheduler_co); + continue; + } + // delete from the scheduler's queue + scheduler_delete_coroutine(&scheduler->coroutine_queue, co); + // set scheduler's current running coroutine. + scheduler->running_coroutine = co; + // resume the coroutine + coroutine_resume_im(co); + + // scheduler's current running coroutine. + scheduler->running_coroutine = nil; + + // if coroutine finished, free coroutine. + if (co->status == COROUTINE_DEAD) { + coroutine_close_ifdead(co); + } + } +} + +coroutine_scheduler_t *coroutine_scheduler_new(void) { + + coroutine_scheduler_t *scheduler = calloc(1, sizeof(coroutine_scheduler_t)); + coroutine_t *co = coroutine_create((void(*)(void *))coroutine_scheduler_main); + co->stack_size = 16 * 1024; // scheduler does not need so much stack memory. + scheduler->main_coroutine = co; + co->scheduler = scheduler; + co->is_scheduler = true; + return scheduler; +} + +void coroutine_scheduler_free(coroutine_scheduler_t *schedule) { + coroutine_close_ifdead(schedule->main_coroutine); +} + +coroutine_t *coroutine_create(coroutine_func func) { + coroutine_t *co = calloc(1, sizeof(coroutine_t)); + co->entry = func; + co->stack_size = STACK_SIZE; + co->status = COROUTINE_READY; + + // check debugger is attached, fix queue debugging. + co_rebind_backtrace(); + return co; +} + + +void coroutine_setuserdata(coroutine_t* co, void* userdata, coroutine_func ud_dispose) { + if (co->userdata && co->userdata_dispose) { + co->userdata_dispose(co->userdata); + } + co->userdata = userdata; + co->userdata_dispose = ud_dispose; +} + +void *coroutine_getuserdata(coroutine_t* co) { + + return co->userdata; +} + +void coroutine_close(coroutine_t *co) { + + coroutine_setuserdata(co, nil, nil); + if (co->stack_memory) { + coroutine_memory_free(co->stack_memory, co->stack_size); + } + free(co->context); + free(co->pre_context); + free(co); +} + +void coroutine_close_ifdead(coroutine_t *co) { + + if (co->status == COROUTINE_DEAD) { + coroutine_close(co); + } +} + +static void coroutine_main(coroutine_t *co) { + co->status = COROUTINE_RUNNING; + co->entry(co); + co->status = COROUTINE_DEAD; + coroutine_setcontext(co->pre_context); +} + +// use optnone to keep the `skip` not be optimized. +__attribute__ ((optnone)) +void coroutine_resume_im(coroutine_t *co) { + switch (co->status) { + case COROUTINE_READY: + { + co->stack_memory = coroutine_memory_malloc(co->stack_size); + co->stack_top = co->stack_memory + co->stack_size - 3 * sizeof(void *); + // get the pre context + co->pre_context = malloc(sizeof(coroutine_ucontext_t)); + BOOL skip = false; + coroutine_getcontext(co->pre_context); + if (skip) { + // when proccess reenter(resume a coroutine), skip the remain codes, just return to pre func. + return; + } + skip = true; + + free(co->context); + co->context = calloc(1, sizeof(coroutine_ucontext_t)); + coroutine_makecontext(co->context, (IMP)coroutine_main, co, (void *)co->stack_top); + // setcontext + coroutine_begin(co->context); + + break; + } + case COROUTINE_SUSPEND: + { + BOOL skip = false; + coroutine_getcontext(co->pre_context); + if (skip) { + // when proccess reenter(resume a coroutine), skip the remain codes, just return to pre func. + return; + } + skip = true; + // setcontext + coroutine_setcontext(co->context); + + break; + } + default: + assert(false); + break; + } +} + +void coroutine_resume(coroutine_t *co) { + if (!co->is_scheduler) { + coroutine_scheduler_t *scheduler = coroutine_scheduler_self_create_if_not_exists(); + co->scheduler = scheduler; + + scheduler_add_coroutine(&scheduler->coroutine_queue, co); + + if (scheduler->running_coroutine) { + // resume a sub coroutine. + scheduler_add_coroutine (&scheduler->coroutine_queue, scheduler->running_coroutine); + coroutine_yield(scheduler->running_coroutine); + } else { + // scheduler is idle + coroutine_resume_im(co->scheduler->main_coroutine); + } + } +} + +void coroutine_add(coroutine_t *co) { + if (!co->is_scheduler) { + coroutine_scheduler_t *scheduler = coroutine_scheduler_self_create_if_not_exists(); + co->scheduler = scheduler; + if (scheduler->main_coroutine->status == COROUTINE_DEAD) { + coroutine_close_ifdead(scheduler->main_coroutine); + coroutine_t *main_co = coroutine_create(coroutine_scheduler_main); + main_co->is_scheduler = true; + main_co->scheduler = scheduler; + scheduler->main_coroutine = main_co; + } + scheduler_add_coroutine(&scheduler->coroutine_queue, co); + + if (!scheduler->running_coroutine) { + coroutine_resume_im(co->scheduler->main_coroutine); + } + } +} + +// use optnone to keep the `skip` not be optimized. +__attribute__ ((optnone)) +void coroutine_yield(coroutine_t *co) +{ + if (co == NULL) { + // if null + co = coroutine_self(); + } + BOOL skip = false; + coroutine_getcontext(co->context); + if (skip) { + return; + } + skip = true; + co->status = COROUTINE_SUSPEND; + coroutine_setcontext(co->pre_context); +} + +coroutine_t *coroutine_self() { + coroutine_scheduler_t *schedule = coroutine_scheduler_self(); + if (schedule) { + return schedule->running_coroutine; + } else { + return nil; + } +} + +#pragma mark - linked lists + +// add routine to the queue +void scheduler_add_coroutine(coroutine_list_t *l, coroutine_t *t) { + if(l->tail) { + l->tail->next = t; + t->prev = l->tail; + } else { + l->head = t; + t->prev = nil; + } + l->tail = t; + t->next = nil; +} + +// delete routine from the queue +void scheduler_delete_coroutine(coroutine_list_t *l, coroutine_t *t) { + if(t->prev) { + t->prev->next = t->next; + } else { + l->head = t->next; + } + + if(t->next) { + t->next->prev = t->prev; + } else { + l->tail = t->prev; + } +} + +#pragma clang diagnostic pop + diff --git a/coobjc/core/coroutine_context.h b/coobjc/core/coroutine_context.h new file mode 100644 index 0000000..8d490fa --- /dev/null +++ b/coobjc/core/coroutine_context.h @@ -0,0 +1,132 @@ +// +// coroutine_context.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 coroutine_context_h +#define coroutine_context_h + +#include +#import + + +#if defined(__arm64__) || defined(__aarch64__) + +typedef struct coroutine_ucontext { + uint64_t data[100]; +} coroutine_ucontext_t; + +struct coroutine_ucontext_re { + struct GPRs { + uint64_t __x[29]; // x0-x28 + uint64_t __fp; // Frame pointer x29 + uint64_t __lr; // Link register x30 + uint64_t __sp; // Stack pointer x31 + uint64_t __pc; // Program counter + uint64_t padding; // 16-byte align, for cpsr + } GR; + double VR[32]; +}; + +#elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7S__) + +typedef struct coroutine_ucontext { + uint32_t data[16]; +} coroutine_ucontext_t; + +struct coroutine_ucontext_re { + struct GPRs { + uint32_t __r[13]; // r0-r12 + uint32_t __sp; // Stack pointer r13 + uint32_t __lr; // Link register r14 + uint32_t __pc; // Program counter r15 + } GR; +}; + +#elif defined(__i386__) + +typedef struct coroutine_ucontext { + uint32_t data[16]; +} coroutine_ucontext_t; + + +struct coroutine_ucontext_re { + struct GPRs { + unsigned int __eax; + unsigned int __ebx; + unsigned int __ecx; + unsigned int __edx; + unsigned int __edi; + unsigned int __esi; + unsigned int __ebp; + unsigned int __esp; + unsigned int __ss; + unsigned int __eflags; + unsigned int __eip; + unsigned int __cs; + unsigned int __ds; + unsigned int __es; + unsigned int __fs; + unsigned int __gs; + } GR; +}; + + +#elif defined(__x86_64__) + +typedef struct coroutine_ucontext { + uint64_t data[21]; +} coroutine_ucontext_t; + + +struct coroutine_ucontext_re { + struct GPRs { + uint64_t __rax; + uint64_t __rbx; + uint64_t __rcx; + uint64_t __rdx; + uint64_t __rdi; + uint64_t __rsi; + uint64_t __rbp; + uint64_t __rsp; + uint64_t __r8; + uint64_t __r9; + uint64_t __r10; + uint64_t __r11; + uint64_t __r12; + uint64_t __r13; + uint64_t __r14; + uint64_t __r15; + uint64_t __rip; + uint64_t __rflags; + uint64_t __cs; + uint64_t __fs; + uint64_t __gs; + } GR; +}; + +#endif + + +extern int coroutine_getcontext (coroutine_ucontext_t *__ucp); + +extern int coroutine_setcontext (coroutine_ucontext_t *__ucp); +extern int coroutine_begin (coroutine_ucontext_t *__ucp); + +extern void coroutine_makecontext (coroutine_ucontext_t *__ucp, IMP func, void *arg, void *stackTop); + + +#endif /* coroutine_context_h */ diff --git a/coobjc/core/coroutine_context.m b/coobjc/core/coroutine_context.m new file mode 100644 index 0000000..a23c9c0 --- /dev/null +++ b/coobjc/core/coroutine_context.m @@ -0,0 +1,70 @@ +// +// coroutine_context.m +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "coroutine_context.h" +#import "coroutine.h" + +#if defined(__arm64__) || defined(__aarch64__) + + +void coroutine_makecontext (coroutine_ucontext_t *ctx, IMP func, void *arg, void *stackTop) +{ + struct coroutine_ucontext_re *uctx = (struct coroutine_ucontext_re *)ctx; + uintptr_t stackBegin = (uintptr_t)stackTop - sizeof(uintptr_t); + uctx->GR.__fp = stackBegin; + uctx->GR.__sp = stackBegin; + uctx->GR.__x[0] = (uintptr_t)arg; + uctx->GR.__pc = (uintptr_t)func; +} + +#elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7S__) + +void coroutine_makecontext (coroutine_ucontext_t *ctx, IMP func, void *arg, void *stackTop) +{ + struct coroutine_ucontext_re *uctx = (struct coroutine_ucontext_re *)ctx; + uintptr_t stackBegin = (uintptr_t)stackTop - sizeof(uintptr_t); + uctx->GR.__r[7] = stackBegin; + uctx->GR.__sp = stackBegin; + uctx->GR.__r[0] = (uintptr_t)arg; + uctx->GR.__pc = (uintptr_t)func; +} + +#elif defined(__i386__) + +void coroutine_makecontext (coroutine_ucontext_t *ctx, IMP func, void *arg, void *stackTop) +{ + struct coroutine_ucontext_re *uctx = (struct coroutine_ucontext_re *)ctx; + uintptr_t stackBegin = (uintptr_t)stackTop - sizeof(uintptr_t); + uctx->GR.__ebp = stackBegin; + uctx->GR.__esp = stackBegin - 5 * sizeof(uintptr_t); // start sp must end withs with 0xc, to make the sp align with 16 Byte at the process entry, or will crash at objc_msgSend_uncached + *(uintptr_t *)(uctx->GR.__esp + 4) = (uintptr_t)arg; + uctx->GR.__eip = (uintptr_t)func; +} + +#elif defined(__x86_64__) + +void coroutine_makecontext (coroutine_ucontext_t *ctx, IMP func, void *arg, void *stackTop) +{ + struct coroutine_ucontext_re *uctx = (struct coroutine_ucontext_re *)ctx; + uintptr_t stackBegin = (uintptr_t)stackTop - sizeof(uintptr_t); + uctx->GR.__rbp = stackBegin; + uctx->GR.__rsp = stackBegin- 3 * sizeof(uintptr_t); // start sp must end withs with 0xc, to make the sp align with 16 Byte at the process entry, or will crash at objc_msgSend_uncached + uctx->GR.__rdi = (uintptr_t)arg; + uctx->GR.__rip = (uintptr_t)func; +} +#endif diff --git a/coobjc/core/coroutine_context.s b/coobjc/core/coroutine_context.s new file mode 100644 index 0000000..6c97346 --- /dev/null +++ b/coobjc/core/coroutine_context.s @@ -0,0 +1,268 @@ +// +// coroutine_context.s +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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. + +#if defined(__arm64__) || defined(__aarch64__) + +.text +.align 2 +.global _coroutine_getcontext +_coroutine_getcontext: + stp x18,x19, [x0, #0x090] + stp x20,x21, [x0, #0x0A0] + stp x22,x23, [x0, #0x0B0] + stp x24,x25, [x0, #0x0C0] + stp x26,x27, [x0, #0x0D0] + str x28, [x0, #0x0E0]; + stp x29, x30, [x0, #0x0E8]; // fp, lr + mov x9, sp + str x9, [x0, #0x0F8] + str x30, [x0, #0x100] // store return address as pc + stp d8, d9, [x0, #0x150] + stp d10,d11, [x0, #0x160] + stp d12,d13, [x0, #0x170] + stp d14,d15, [x0, #0x180] + mov x0, #0 + ret + +.global _coroutine_begin +_coroutine_begin: + ldp x18,x19, [x0, #0x090] + ldp x20,x21, [x0, #0x0A0] + ldp x22,x23, [x0, #0x0B0] + ldp x24,x25, [x0, #0x0C0] + ldp x26,x27, [x0, #0x0D0] + ldp x28,x29, [x0, #0x0E0] + ldr x9, [x0, #0x100] // restore pc into lr + mov x30, #0; + ldr x1, [x0, #0x0F8] + mov sp,x1 // restore sp + ldp d8, d9, [x0, #0x150] + ldp d10,d11, [x0, #0x160] + ldp d12,d13, [x0, #0x170] + ldp d14,d15, [x0, #0x180] + ldp x0, x1, [x0, #0x000] // restore x0,x1 + ret x9 + +.global _coroutine_setcontext +_coroutine_setcontext: + ldp x18,x19, [x0, #0x090] + ldp x20,x21, [x0, #0x0A0] + ldp x22,x23, [x0, #0x0B0] + ldp x24,x25, [x0, #0x0C0] + ldp x26,x27, [x0, #0x0D0] + ldp x28,x29, [x0, #0x0E0] + ldr x30, [x0, #0x100] // restore pc into lr + ldr x1, [x0, #0x0F8] + mov sp,x1 // restore sp + ldp d8, d9, [x0, #0x150] + ldp d10,d11, [x0, #0x160] + ldp d12,d13, [x0, #0x170] + ldp d14,d15, [x0, #0x180] + ldp x0, x1, [x0, #0x000] // restore x0,x1 + ret x30 + +#elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7S__) + +.text +.align 2 +.global _coroutine_getcontext +_coroutine_getcontext: + add r0, r0, #4*4 + stm r0!, {r4-r6} + stm r0!, {r7} // r7(fp) + str r13, [r0, #20]; // store sp + str r14, [r0, #24] // store lr + str r14, [r0, #28] // store lr as pc + mov r1, r8 + mov r2, r9 + mov r3, r10 + stm r0!, {r1-r3} + mov r1, r11 + str r1, [r0, #0] // r11 + // r12 does not need storing, it it the intra-procedure-call scratch register + movs r0, #0 + bx lr + +.global _coroutine_begin +_coroutine_begin: + adds r0, #0x20 + ldm r0!, {r1-r4} // r8-r11 + subs r0, #0x20 + mov r8, r1 + mov r9, r2 + mov r10, r3 + mov r11, r4 + // r12 does not need loading, it it the intra-procedure-call scratch register + ldr r2, [r0, #0x24] + ldr r3, [r0, #0x2c] + mov sp, r2 + mov r1, r3 @ restore pc into lr + mov lr, #0 + ldm r0, {r4-r7} + ldr r0, [r0, #-0x10]; + bx r1 + +.global _coroutine_setcontext +_coroutine_setcontext: + adds r0, #0x20 + ldm r0!, {r1-r4} // r8-r11 + subs r0, #0x20 + mov r8, r1 + mov r9, r2 + mov r10, r3 + mov r11, r4 + // r12 does not need loading, it it the intra-procedure-call scratch register + ldr r2, [r0, #0x24] + ldr r3, [r0, #0x2c] + mov sp, r2 + mov lr, r3 @ restore pc into lr + ldm r0, {r4-r7} + ldr r0, [r0, #-0x10]; + bx lr + +#elif defined(__i386__) + +.text +.align 2 +.global _coroutine_getcontext +_coroutine_getcontext: + push %eax + movl 8(%esp), %eax + movl %ebx, 4(%eax) + movl %ecx, 8(%eax) + movl %edx, 12(%eax) + movl %edi, 16(%eax) + movl %esi, 20(%eax) + movl %ebp, %ecx // fp + movl %ecx, 24(%eax) // store fp + movl 4(%esp), %edx + movl %edx, 40(%eax) # store return address as eip + movl %esp, %ecx + addl $8, %ecx // sp + 8 as sp + movl %ecx, 28(%eax) // store sp + # skip ss + # skip eflags + # skip cs + # skip ds + # skip es + # skip fs + # skip gs + movl (%esp), %edx + movl %edx, (%eax) # store original eax + popl %eax + xorl %eax, %eax + ret + +.global _coroutine_begin +.global _coroutine_setcontext + +_coroutine_begin: +_coroutine_setcontext: + movl 4(%esp), %eax + # set up eax and ret on new stack location + movl 28(%eax), %edx # edx holds new stack pointer + subl $8,%edx + movl %edx, 28(%eax) + movl 0(%eax), %ebx + movl %ebx, 0(%edx) + movl 40(%eax), %ebx + movl %ebx, 4(%edx) + # we now have ret and eax pushed onto where new stack will be + # restore all registers + movl 4(%eax), %ebx + movl 8(%eax), %ecx + movl 12(%eax), %edx + movl 16(%eax), %edi + movl 20(%eax), %esi + movl 24(%eax), %ebp + movl 28(%eax), %esp + # skip ss + # skip eflags + pop %eax # eax was already pushed on new stack + ret + +#elif defined(__x86_64__) + +.text +.align 2 +.global _coroutine_getcontext +_coroutine_getcontext: + movq %rax, (%rdi) + movq %rbx, 8(%rdi) + movq %rcx, 16(%rdi) + movq %rdx, 24(%rdi) + movq %rdi, 32(%rdi) + movq %rsi, 40(%rdi) + movq %rbp, 48(%rdi) // pre fp store + movq %rsp, 56(%rdi) + addq $8, 56(%rdi) // sp + movq %r8, 64(%rdi) + movq %r9, 72(%rdi) + movq %r10, 80(%rdi) + movq %r11, 88(%rdi) + movq %r12, 96(%rdi) + movq %r13,104(%rdi) + movq %r14,112(%rdi) + movq %r15,120(%rdi) + movq (%rsp), %rsi // lr + movq %rsi, 128(%rdi) + # skip rflags + # skip cs + # skip fs + # skip gs + xorl %eax, %eax + ret + +.global _coroutine_begin +.global _coroutine_setcontext + +_coroutine_begin: +_coroutine_setcontext: + movq 56(%rdi), %rax # rax holds new stack pointer + subq $16, %rax + movq %rax, 56(%rdi) + movq 32(%rdi), %rbx # store new rdi on new stack + movq %rbx, 0(%rax) + movq 128(%rdi), %rbx # store new rip on new stack + movq %rbx, 8(%rax) + # restore all registers + movq 0(%rdi), %rax + movq 8(%rdi), %rbx + movq 16(%rdi), %rcx + movq 24(%rdi), %rdx + # restore rdi later + movq 40(%rdi), %rsi + movq 48(%rdi), %rbp + # restore rsp later + movq 64(%rdi), %r8 + movq 72(%rdi), %r9 + movq 80(%rdi), %r10 + movq 88(%rdi), %r11 + movq 96(%rdi), %r12 + movq 104(%rdi), %r13 + movq 112(%rdi), %r14 + movq 120(%rdi), %r15 + # skip rflags + # skip cs + # skip fs + # skip gs + movq 56(%rdi), %rsp # cut back rsp to new location + pop %rdi # rdi was saved here earlier + ret # rip was saved here + +#endif diff --git a/coobjc/csp/README.md b/coobjc/csp/README.md new file mode 100644 index 0000000..ff89943 --- /dev/null +++ b/coobjc/csp/README.md @@ -0,0 +1 @@ +# csp diff --git a/coobjc/csp/co_csp.h b/coobjc/csp/co_csp.h new file mode 100644 index 0000000..c46b9bf --- /dev/null +++ b/coobjc/csp/co_csp.h @@ -0,0 +1,211 @@ +// +// co_csp.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// Copyright (c) 2005-2007 Russ Cox, Massachusetts Institute of Technology +// +// Licensed 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. +// +// ** +// Reference code from [libtask](https://swtch.com/libtask/) + +#ifndef co_csp_h +#define co_csp_h +#include +#include + +/** + Define the channel's op code. send/receive. + */ +typedef enum { + CHANNEL_SEND = 1, + CHANNEL_RECEIVE, +} channel_op; + + +typedef struct chan_alt chan_alt; +typedef struct chan_queue chan_queue; +typedef struct co_channel co_channel; + +/** + Define the chan alt, record a send/receive context. + */ +struct chan_alt +{ + co_channel *channel; + void *value; + coroutine_t *task; + channel_op op; + int can_block; +}; + +/** + Define the queue used by channel. + */ +struct chan_queue +{ + void *arr; + unsigned int elemsize; + unsigned int size; + unsigned int head; + unsigned int tail; + unsigned int count; + unsigned int expandsize; +}; + +/** + Define the channel struct + */ +struct co_channel { + chan_queue buffer; + chan_queue asend; + chan_queue arecv; + pthread_mutex_t lock; + void (*custom_resume)(coroutine_t *co); +}; + +/** + Create a channel object. + + @param elemsize the element's size + @param bufsize buffer size + @return the channel object. + */ +co_channel *chancreate(int elemsize, int bufsize, void (*custom_resume)(coroutine_t *co)); + +/** + Free a channel. + + @param chan channel object. + */ +void chanfree(co_channel *chan); + +/** + Non-blocking receive from channel. + + @param c channel + @param v the pointer will store received value. + @return 1 success, else fail. + */ +int channbrecv(co_channel *c, void *v); + +/** + Non-blocking receive a pointer value from channel. + + @param c channel + @return received pointer value. + */ +void *channbrecvp(co_channel *c); + +/** + Non-blocking receive a unsigned long value from channel. + + @param c channel + @return received unsigned long value. + */ +unsigned long channbrecvul(co_channel *c); + +/** + Non-blocking send value to channel. + + @param c channel + @param v the value's address. + @return 1 success, else fail. + */ +int channbsend(co_channel *c, void *v); + +/** + Non-blocking send a pointer value to channel. + + @param c channel + @param v the pointer + @return 1 success, else fail. + */ +int channbsendp(co_channel *c, void *v); + +/** + Non-blocking send a unsigned long value to channel. + + @param c channel + @param v the unsigned long value + @return 1 success, else fail. + */ +int channbsendul(co_channel *c, unsigned long v); + +/** + Blocking receive from channel. + + If no one sending, and buffer is empty, blocking the current coroutine. + + @param c channel + @param v the pointer will store received value. + @return 1 success, else fail. + */ +int chanrecv(co_channel *c, void *v); + +/** + Blocking receive a pointer value from channel. + + If no one sending, and buffer is empty, blocking the current coroutine. + + @param c channel + @return received pointer. + */ +void *chanrecvp(co_channel *c); + +/** + Blocking receive a unsigned long value from channel. + + If no one sending, and buffer is empty, blocking the current coroutine. + + @param c channel + @return received unsigned long value. + */ +unsigned long chanrecvul(co_channel *c); + +/** + Blocking send value to channel. + + If no one sending, and buffer is empty, blocking the current coroutine. + + @param c channel + @param v the pointer will store received value. + @return 1 success, else fail. + */ +int chansend(co_channel *c, void *v); + +/** + Blocking send a pointer value to channel. + + @param c channel + @param v the pointer + @return 1 success, else fail. + */ +int chansendp(co_channel *c, void *v); + +/** + Blocking send a unsigned long value to channel. + + @param c channel + @param v the unsigned long value + @return 1 success, else fail. + */ +int chansendul(co_channel *c, unsigned long v); + +/** + Get the blocking task count. + */ +int changetblocking(co_channel *c, int *sendBlockingCount, int *receiveBlockingCount); + +#endif diff --git a/coobjc/csp/co_csp.m b/coobjc/csp/co_csp.m new file mode 100644 index 0000000..e38ba20 --- /dev/null +++ b/coobjc/csp/co_csp.m @@ -0,0 +1,414 @@ +// +// co_csp.m +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// Copyright (c) 2005-2007 Russ Cox, Massachusetts Institute of Technology +// +// Licensed 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. +// +// ** +// Reference code from [libtask](https://swtch.com/libtask/) + +#import "co_csp.h" +#import +#include + +#pragma mark - queue + +static void amove(void *dst, void *src, uint n) { + if(dst){ + if(src == nil) { + memset(dst, 0, n); + } else { + memmove(dst, src, n); + } + } +} + +static void queueinit(chan_queue *q, int elemsize, int bufsize, int expandsize, void *buf) { + q->elemsize = elemsize; + q->size = bufsize; + q->expandsize = expandsize; + + if (expandsize) { + if (bufsize > 0) { + q->arr = malloc(bufsize * elemsize); + } + } else { + if (buf) { + q->arr = buf; + } + } +} + +static int queuepush(chan_queue *q, void *element) +{ + if (q->count == q->size) { + + if (q->expandsize) { + // expand buffer, example: + // ⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽ + // |█ █ █ █ _ _ _ _ █ █ █ █ | size=12, count=8, head=4, tail=8; + // ⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺ + // ↓ + // ⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽⎽ + // |█ █ █ █ _ _ _ _ _ _ _ _ █ █ █ █ | size=16, count=8, head=4, tail=12; + // ⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺ + size_t oldsize = q->size; + q->size += q->expandsize; + q->arr = realloc(q->arr, q->size * q->elemsize); + + if (q->head <= q->tail) { + void *copyaddr = q->arr + q->tail * q->elemsize; + void *destaddr = copyaddr + q->expandsize * q->elemsize; + size_t copysize = (oldsize - q->tail) * q->elemsize; + memmove(destaddr, copyaddr, copysize); + q->tail += q->expandsize; + } + + } else { + return 0; + } + } + + amove(q->arr + q->head * q->elemsize, element, q->elemsize); + q->head = (q->head + 1) % q->size; + q->count ++; + return 1; +} + +static int queuepop(chan_queue *q, void *val) { + + if (q->count > 0) { + + amove(val, q->arr + q->tail * q->elemsize, q->elemsize); + q->tail = (q->tail + 1) % q->size; + q->count--; + return 1; + } else { + return 0; + } +} + +#pragma mark - channel + +co_channel *chancreate(int elemsize, int bufsize, void (*custom_resume)(coroutine_t *co)) { + + co_channel *c; + if (bufsize < 0) { + c = calloc(1, sizeof(co_channel)); + } else { + c = calloc(1, (sizeof(co_channel) + bufsize*elemsize)); + } + + // init buffer + if (bufsize < 0) { + queueinit(&c->buffer, elemsize, 16, 16, NULL); + } else { + queueinit(&c->buffer, elemsize, bufsize, 0, (void *)(c+1)); + } + + // init queue + queueinit(&c->asend, sizeof(chan_alt), 16, 16, NULL); + queueinit(&c->arecv, sizeof(chan_alt), 16, 16, NULL); + + // init lock + c->lock = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER; + + c->custom_resume = custom_resume; + + return c; +} + +void chanfree(co_channel *c) { + + if(c == nil) { + return; + } + if (c->buffer.expandsize) { + free(c->buffer.arr); + } + pthread_mutex_destroy(&c->lock); + free(c->arecv.arr); + free(c->asend.arr); + free(c); +} + +static void chanlock(co_channel *c) { + pthread_mutex_lock(&c->lock); +} + +static void chanunlock(co_channel *c) { + pthread_mutex_unlock(&c->lock); +} + +#define otherop(op) (CHANNEL_SEND+CHANNEL_RECEIVE-(op)) + +static chan_queue *chanarray(co_channel *c, uint op) { + switch(op){ + default: + return nil; + case CHANNEL_SEND: + return &c->asend; + case CHANNEL_RECEIVE: + return &c->arecv; + } +} + +static int altcanexec(chan_alt *a) { + chan_queue *altqueue; + co_channel *c; + + c = a->channel; + if(c->buffer.size == 0){ + altqueue = chanarray(c, otherop(a->op)); + return altqueue && altqueue->count; + } else if (c->buffer.expandsize) { + // expandable buffer + switch(a->op){ + default: + return 0; + case CHANNEL_SEND: + // send always success. + return 1; + case CHANNEL_RECEIVE: + return c->buffer.count > 0; + } + } else{ + switch(a->op){ + default: + return 0; + case CHANNEL_SEND: + return c->buffer.count < c->buffer.size; + case CHANNEL_RECEIVE: + return c->buffer.count > 0; + } + } +} + +static void altqueue(chan_alt *a) { + chan_queue *altqueue = chanarray(a->channel, a->op); + queuepush(altqueue, a); +} + + +/* + * Actually move the data around. There are up to three + * players: the sender, the receiver, and the channel itself. + * If the channel is unbuffered or the buffer is empty, + * data goes from sender to receiver. If the channel is full, + * the receiver removes some from the channel and the sender + * gets to put some in. + */ +static void altcopy(chan_alt *s, chan_alt *r) { + chan_alt *t; + co_channel *c; + + /* + * Work out who is sender and who is receiver + */ + if(s == nil && r == nil) { + return; + } + assert(s != nil); + c = s->channel; + if(s->op == CHANNEL_RECEIVE){ + t = s; + s = r; + r = t; + } + assert(s==nil || s->op == CHANNEL_SEND); + assert(r==nil || r->op == CHANNEL_RECEIVE); + + /* + * Channel is empty (or unbuffered) - copy directly. + */ + if(s && r && c->buffer.count == 0){ + amove(r->value, s->value, c->buffer.elemsize); + return; + } + + /* + * Otherwise it's always okay to receive and then send. + */ + if(r){ + queuepop(&c->buffer, r->value); + } + if(s){ + queuepush(&c->buffer, s->value); + } +} + +static void altexec(chan_alt *a) { + + chan_queue *altqueue; + chan_alt other_alt; + chan_alt *other = &other_alt; + co_channel *c; + + c = a->channel; + altqueue = chanarray(c, otherop(a->op)); + if(altqueue && altqueue->count){ + + queuepop(altqueue, other); + altcopy(a, other); + coroutine_t *co = other->task; + void (*custom_resume)(coroutine_t *co) = c->custom_resume; + chanunlock(c); + + if (custom_resume) { + custom_resume(co); + } else { + coroutine_add(co); + } + + } else { + altcopy(a, nil); + chanunlock(c); + } +} + +int changetblocking(co_channel *c, int *sendBlockingCount, int *receiveBlockingCount) { + int send = 0, recv = 0; + chanlock(c); + + chan_queue *ar = chanarray(c, CHANNEL_SEND); + if (ar && ar->count) { + + send = ar->count; + if (sendBlockingCount) { + *sendBlockingCount = send; + } + } + + chan_queue *receiveAr = chanarray(c, CHANNEL_RECEIVE); + if (receiveAr && receiveAr->count) { + recv = receiveAr->count; + if (receiveBlockingCount) { + *receiveBlockingCount = recv; + } + } + + chanunlock(c); + return send > 0 || recv > 0; +} + +int chanalt(chan_alt *a) { + + int canblock = a->can_block; + co_channel *c; + coroutine_t *t = coroutine_self(); + + a->task = t; + c = a->channel; + + chanlock(c); + + if(altcanexec(a)) { + altexec(a); + return 0; + } + + if(!canblock) { + chanunlock(c); + return -1; + } + + // add to queue + altqueue(a); + + chanunlock(c); + + // blocking. + coroutine_yield(t); + + return 0; +} + +static int _chanop(co_channel *c, int op, void *p, int canblock) { + chan_alt a; + + a.channel = c; + a.op = op; + a.value = p; + a.op = op; + a.can_block = canblock; + + if(chanalt(&a) < 0) { + return -1; + } + return 1; +} + +#pragma mark - public apis + +int chansend(co_channel *c, void *v) { + return _chanop(c, CHANNEL_SEND, v, 1); +} + +int channbsend(co_channel *c, void *v) { + return _chanop(c, CHANNEL_SEND, v, 0); +} + +int chanrecv(co_channel *c, void *v) { + return _chanop(c, CHANNEL_RECEIVE, v, 1); +} + +int channbrecv(co_channel *c, void *v) { + return _chanop(c, CHANNEL_RECEIVE, v, 0); +} + +int chansendp(co_channel *c, void *v) { + return _chanop(c, CHANNEL_SEND, (void*)&v, 1); +} + +void *chanrecvp(co_channel *c) { + void *v = NULL; + + _chanop(c, CHANNEL_RECEIVE, (void*)&v, 1); + return v; +} + +int channbsendp(co_channel *c, void *v) { + return _chanop(c, CHANNEL_SEND, (void*)&v, 0); +} + +void *channbrecvp(co_channel *c) { + void *v = NULL; + + _chanop(c, CHANNEL_RECEIVE, (void*)&v, 0); + return v; +} + +int chansendul(co_channel *c, unsigned long val) { + return _chanop(c, CHANNEL_SEND, &val, 1); +} + +unsigned long chanrecvul(co_channel *c) { + unsigned long val = 0; + + _chanop(c, CHANNEL_RECEIVE, &val, 1); + return val; +} + +int channbsendul(co_channel *c, unsigned long val) { + return _chanop(c, CHANNEL_SEND, &val, 0); +} + +unsigned long channbrecvul(co_channel *c) { + unsigned long val = 0; + + _chanop(c, CHANNEL_RECEIVE, &val, 0); + return val; +} diff --git a/coobjc/objc/co_autorelease.h b/coobjc/objc/co_autorelease.h new file mode 100644 index 0000000..8796e5a --- /dev/null +++ b/coobjc/objc/co_autorelease.h @@ -0,0 +1,54 @@ +// +// co_autorelease.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. +// +// Licensed 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 + + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + + /** + If you want to use @autorelease{} in a coroutine, and + suspend in the scope. Enable this. + + @discussion Since a coroutine's calling stack may suspend. + If you suspend in the @autorelease{} scope, autorelease pool + may drop by the current runloop, then cause a crash. + + So we hook `autoreleasePoolPush` `autoreleasePoolPop` + `autorelease` try to fix this. If you want suspend in a + @autorelease{} scope, you may call `co_autoreleaseInit`. + */ + extern BOOL co_enableAutorelease; + extern void co_autoreleaseInit(void); + + extern void * co_autoreleasePoolPush(void); + extern void co_autoreleasePoolPop(void *ctxt); + + extern void co_autoreleasePoolPrint(); + + extern id co_autoreleaseObj(id obj); + + extern void co_autoreleasePoolDealloc(void *p); + +#ifdef __cplusplus +} +#endif //__cplusplus + diff --git a/coobjc/objc/co_autorelease.mm b/coobjc/objc/co_autorelease.mm new file mode 100644 index 0000000..73d038d --- /dev/null +++ b/coobjc/objc/co_autorelease.mm @@ -0,0 +1,740 @@ +// +// co_autorelease.m +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. +// +// Licensed 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 "co_autorelease.h" +#import "coobjc.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#import "co_errors.h" +#import +#import +#import + +BOOL co_enableAutorelease = YES; + +// Define SUPPORT_TAGGED_POINTERS=1 to enable tagged pointer objects +// Be sure to edit tagged pointer SPI in objc-internal.h as well. +#if !(__OBJC2__ && __LP64__) +# define SUPPORT_TAGGED_POINTERS 0 +#else +# define SUPPORT_TAGGED_POINTERS 1 +#endif + +// Define SUPPORT_MSB_TAGGED_POINTERS to use the MSB +// as the tagged pointer marker instead of the LSB. +// Be sure to edit tagged pointer SPI in objc-internal.h as well. +#if !SUPPORT_TAGGED_POINTERS || !TARGET_OS_IPHONE +# define SUPPORT_MSB_TAGGED_POINTERS 0 +#else +# define SUPPORT_MSB_TAGGED_POINTERS 1 +#endif + +#if SUPPORT_MSB_TAGGED_POINTERS +# define TAG_MASK (1ULL<<63) +# define TAG_SLOT_SHIFT 60 +# define TAG_PAYLOAD_LSHIFT 4 +# define TAG_PAYLOAD_RSHIFT 4 +#else +# define TAG_MASK 1 +# define TAG_SLOT_SHIFT 0 +# define TAG_PAYLOAD_LSHIFT 0 +# define TAG_PAYLOAD_RSHIFT 4 +#endif + +/* Use this for functions that are intended to be breakpoint hooks. + If you do not, the compiler may optimize them away. + BREAKPOINT_FUNCTION( void stop_on_error(void) ); */ +# define BREAKPOINT_FUNCTION(prototype) \ +OBJC_EXTERN __attribute__((noinline, used, visibility("hidden"))) \ +prototype { asm(""); } + +BREAKPOINT_FUNCTION(void co_autoreleaseNoPool(id obj)); + + +static BOOL DebugMissingPools = NO; +static BOOL DebugPoolAllocation = NO; +static BOOL PrintPoolHiwat = NO; + +/*********************************************************************** + Autorelease pool implementation + + A Coroutine's autorelease pool is a stack of pointers. + Each pointer is either an object to release, or POOL_SENTINEL which is + an autorelease pool boundary. + A pool token is a pointer to the POOL_SENTINEL for that pool. When + the pool is popped, every object hotter than the sentinel is released. + The stack is divided into a doubly-linked list of pages. Pages are added + and deleted as necessary. + Thread-local storage points to the hot page, where newly autoreleased + objects are stored. + **********************************************************************/ + +namespace { + + struct co_magic_t { + static const uint32_t M0 = 0xA1A1A1A1; +# define M1 "AUTORELEASE!" + static const size_t M1_len = 12; + uint32_t m[4]; + + co_magic_t() { + assert(M1_len == strlen(M1)); + assert(M1_len == 3 * sizeof(m[1])); + + m[0] = M0; + strncpy((char *)&m[1], M1, M1_len); + } + + ~co_magic_t() { + m[0] = m[1] = m[2] = m[3] = 0; + } + + bool check() const { + return (m[0] == M0 && 0 == strncmp((char *)&m[1], M1, M1_len)); + } + + bool fastcheck() const { +#if DEBUG + return check(); +#else + return (m[0] == M0); +#endif + } + +# undef M1 + }; + +# define CO_AUTORELEASE_PAGE_MASK 0x0000088ffffffff8ULL + + + class COAutoreleasePoolPage + { + + public: +#define POOL_SENTINEL nil +// static pthread_key_t const key = AUTORELEASE_POOL_KEY; + static uint8_t const SCRIBBLE = 0xA3; // 0xA3A3A3A3 after releasing + static size_t const SIZE = PAGE_MAX_SIZE; + + static size_t const COUNT = SIZE / sizeof(id); + + uintptr_t bitMask; + co_magic_t const magic; + id *next; + coroutine_t * const routine; + COAutoreleasePoolPage * const parent; + COAutoreleasePoolPage *child; + uint32_t const depth; + uint32_t hiwat; + + // SIZE-sizeof(*this) bytes of contents follow + + static void * operator new(size_t size) { + return malloc_zone_memalign(malloc_default_zone(), SIZE, SIZE); + } + static void operator delete(void * p) { + return free(p); + } + + inline void protect() { + + } + + inline void unprotect() { + + } + + COAutoreleasePoolPage(COAutoreleasePoolPage *newParent) + : magic(), next(begin()), routine(coroutine_self()), + parent(newParent), child(nil), + depth(parent ? 1+parent->depth : 0), + hiwat(parent ? parent->hiwat : 0) + { + bitMask = (uintptr_t)CO_AUTORELEASE_PAGE_MASK; + if (parent) { + parent->check(); + assert(!parent->child); + parent->unprotect(); + parent->child = this; + parent->protect(); + } + protect(); + } + + ~COAutoreleasePoolPage() + { + check(); + unprotect(); + assert(empty()); + + // Not recursive: we don't want to blow out the stack + // if a thread accumulates a stupendous amount of garbage + assert(!child); + } + + + void busted(bool die = true) + { + co_magic_t right; + if (die) { + co_fatal("co autorelease pool page %p corrupted\n" + " magic 0x%08x 0x%08x 0x%08x 0x%08x\n" + " should be 0x%08x 0x%08x 0x%08x 0x%08x\n" + " coroutine %p\n" + " should be %p\n", + this, + magic.m[0], magic.m[1], magic.m[2], magic.m[3], + right.m[0], right.m[1], right.m[2], right.m[3], + this->routine, coroutine_self()); + } + else{ + co_inform("co autorelease pool page %p corrupted\n" + " magic 0x%08x 0x%08x 0x%08x 0x%08x\n" + " should be 0x%08x 0x%08x 0x%08x 0x%08x\n" + " coroutine %p\n" + " should be %p\n", + this, + magic.m[0], magic.m[1], magic.m[2], magic.m[3], + right.m[0], right.m[1], right.m[2], right.m[3], + this->routine, coroutine_self()); + } + } + + void check(bool die = true) + { + if (!magic.check() || (this->routine != coroutine_self())) { + busted(die); + } + } + + void fastcheck(bool die = true) + { + if (! magic.fastcheck()) { + busted(die); + } + } + + + id * begin() { + return (id *) ((uint8_t *)this+sizeof(*this)); + } + + id * end() { + return (id *) ((uint8_t *)this+SIZE); + } + + bool empty() { + return next == begin(); + } + + bool full() { + return next == end(); + } + + bool lessThanHalfFull() { + return (next - begin() < (end() - begin()) / 2); + } + + id *add(id obj) + { + assert(!full()); + unprotect(); + id *ret = next; // faster than `return next-1` because of aliasing + *next++ = obj; + protect(); + return ret; + } + + void releaseAll() + { + releaseUntil(begin()); + } + + void releaseUntil(id *stop) + { + // Not recursive: we don't want to blow out the stack + // if a thread accumulates a stupendous amount of garbage + + while (this->next != stop) { + // Restart from hotPage() every time, in case -release + // autoreleased more objects + COAutoreleasePoolPage *page = hotPage(); + + // fixme I think this `while` can be `if`, but I can't prove it + while (page->empty()) { + page = page->parent; + setHotPage(page); + } + + page->unprotect(); + id obj = *--page->next; + memset((void*)page->next, SCRIBBLE, sizeof(*page->next)); + page->protect(); + + if (obj != POOL_SENTINEL) { + [obj release]; + //objc_release(obj); + } + } + + setHotPage(this); + +#if DEBUG + // we expect any children to be completely empty + for (COAutoreleasePoolPage *page = child; page; page = page->child) { + assert(page->empty()); + } +#endif + } + + void kill() + { + // Not recursive: we don't want to blow out the stack + // if a thread accumulates a stupendous amount of garbage + COAutoreleasePoolPage *page = this; + while (page->child) page = page->child; + + COAutoreleasePoolPage *deathptr; + do { + deathptr = page; + page = page->parent; + if (page) { + page->unprotect(); + page->child = nil; + page->protect(); + } + delete deathptr; + } while (deathptr != this); + } + + static void routine_dealloc(void *p) + { + // reinstate TLS value while we work + setHotPage((COAutoreleasePoolPage *)p); + + if (COAutoreleasePoolPage *page = coldPage()) { + if (!page->empty()) pop(page->begin()); // pop all of the pools + page->kill(); // free all of the pages + + } + + // clear TLS value so TLS destruction doesn't loop + setHotPage(nil); + } + + static COAutoreleasePoolPage *pageForPointer(const void *p) + { + return pageForPointer((uintptr_t)p); + } + + static COAutoreleasePoolPage *pageForPointer(uintptr_t p) + { + COAutoreleasePoolPage *result; + uintptr_t offset = p % SIZE; + + assert(offset >= sizeof(COAutoreleasePoolPage)); + + result = (COAutoreleasePoolPage *)(p - offset); + result->fastcheck(); + + return result; + } + + + static inline COAutoreleasePoolPage *hotPage() + { + COAutoreleasePoolPage *result = (COAutoreleasePoolPage *)(coroutine_self()->autoreleasepage); + if (result) result->fastcheck(); + return result; + } + + static inline void setHotPage(COAutoreleasePoolPage *page) + { + if (page) page->fastcheck(); + coroutine_t *routine = coroutine_self(); + if (routine) { + routine->autoreleasepage = (void*)page; + } + } + + static inline COAutoreleasePoolPage *coldPage() + { + COAutoreleasePoolPage *result = hotPage(); + if (result) { + while (result->parent) { + result = result->parent; + result->fastcheck(); + } + } + return result; + } + + + static inline id *autoreleaseFast(id obj) + { + COAutoreleasePoolPage *page = hotPage(); + if (page && !page->full()) { + return page->add(obj); + } else if (page) { + return autoreleaseFullPage(obj, page); + } else { + return autoreleaseNoPage(obj); + } + } + + static __attribute__((noinline)) + id *autoreleaseFullPage(id obj, COAutoreleasePoolPage *page) + { + // The hot page is full. + // Step to the next non-full page, adding a new page if necessary. + // Then add the object to that page. + assert(page == hotPage()); + assert(page->full()); + + do { + if (page->child) page = page->child; + else page = new COAutoreleasePoolPage(page); + } while (page->full()); + + setHotPage(page); + return page->add(obj); + } + + static __attribute__((noinline)) + id *autoreleaseNoPage(id obj) + { + // No pool in place. + assert(!hotPage()); + + if (obj != POOL_SENTINEL && DebugMissingPools) { + // We are pushing an object with no pool in place, + // and no-pool debugging was requested by environment. + co_inform("MISSING POOLS: Object %p of class %s " + "autoreleased with no pool in place - " + "just leaking - break on " + "objc_autoreleaseNoPool() to debug", + (void*)obj, object_getClassName(obj)); + co_autoreleaseNoPool(obj); + return nil; + } + + // Install the first page. + COAutoreleasePoolPage *page = new COAutoreleasePoolPage(nil); + setHotPage(page); + + // Push an autorelease pool boundary if it wasn't already requested. + if (obj != POOL_SENTINEL) { + page->add(POOL_SENTINEL); + } + + // Push the requested object. + return page->add(obj); + } + + + static __attribute__((noinline)) + id *autoreleaseNewPage(id obj) + { + COAutoreleasePoolPage *page = hotPage(); + if (page) return autoreleaseFullPage(obj, page); + else return autoreleaseNoPage(obj); + } + + public: +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-objc-pointer-introspection" + static inline BOOL isTaggedPointer(id obj){ + return ((uintptr_t)obj & TAG_MASK); + + } +#pragma clang diagnostic pop + + static inline id autorelease(id obj) + { + assert(obj); + assert(!isTaggedPointer(obj)); + id *dest __unused = autoreleaseFast(obj); + assert(!dest || *dest == obj); + return obj; + } + + + static inline void *push() + { + id *dest; + if (DebugPoolAllocation) { + // Each autorelease pool starts on a new pool page. + dest = autoreleaseNewPage(POOL_SENTINEL); + } else { + dest = autoreleaseFast(POOL_SENTINEL); + } + assert(*dest == POOL_SENTINEL); + return dest; + } + + static inline void pop(void *token) + { + COAutoreleasePoolPage *page; + id *stop; + + page = pageForPointer(token); + stop = (id *)token; + if (DebugPoolAllocation && *stop != POOL_SENTINEL) { + // This check is not valid with DebugPoolAllocation off + // after an autorelease with a pool page but no pool in place. + co_fatal("invalid or prematurely-freed autorelease pool %p; ", + token); + } + + if (PrintPoolHiwat) printHiwat(); + + page->releaseUntil(stop); + + // memory: delete empty children + if (DebugPoolAllocation && page->empty()) { + // special case: delete everything during page-per-pool debugging + COAutoreleasePoolPage *parent = page->parent; + page->kill(); + setHotPage(parent); + } else if (DebugMissingPools && page->empty() && !page->parent) { + // special case: delete everything for pop(top) + // when debugging missing autorelease pools + page->kill(); + setHotPage(nil); + } + else if (page->child) { + // hysteresis: keep one empty child if page is more than half full + if (page->lessThanHalfFull()) { + page->child->kill(); + } + else if (page->child->child) { + page->child->child->kill(); + } + } + } + + static void init() + { +// int r __unused = pthread_key_init_np(AutoreleasePoolPage::key, +// AutoreleasePoolPage::tls_dealloc); + //assert(r == 0); + } + + void print() + { + co_inform("[%p] ................ PAGE %s %s %s", this, + full() ? "(full)" : "", + this == hotPage() ? "(hot)" : "", + this == coldPage() ? "(cold)" : ""); + check(false); + for (id *p = begin(); p < next; p++) { + if (*p == POOL_SENTINEL) { + co_inform("[%p] ################ POOL %p", p, p); + } else { + co_inform("[%p] %#16lx %s", + p, (unsigned long)*p, object_getClassName(*p)); + } + } + } + + static void printAll() + { + co_inform("##############"); + co_inform("AUTORELEASE POOLS for routine %p", coroutine_self()); + + COAutoreleasePoolPage *page; + ptrdiff_t objects = 0; + for (page = coldPage(); page; page = page->child) { + objects += page->next - page->begin(); + } + co_inform("%llu releases pending.", (unsigned long long)objects); + + for (page = coldPage(); page; page = page->child) { + page->print(); + } + + co_inform("##############"); + } + + static void printHiwat() + { + // Check and propagate high water mark + // Ignore high water marks under 256 to suppress noise. + COAutoreleasePoolPage *p = hotPage(); + uint32_t mark = p->depth*COUNT + (uint32_t)(p->next - p->begin()); + if (mark > p->hiwat && mark > 256) { + for( ; p; p = p->parent) { + p->unprotect(); + p->hiwat = mark; + p->protect(); + } + + co_inform("POOL HIGHWATER: new high water mark of %u " + "pending autoreleases for routine %p:", + mark, coroutine_self()); + + void *stack[128]; + int count = backtrace(stack, sizeof(stack)/sizeof(stack[0])); + char **sym = backtrace_symbols(stack, count); + for (int i = 0; i < count; i++) { + co_inform("POOL HIGHWATER: %s", sym[i]); + } + free(sym); + } + } + +#undef POOL_SENTINEL + }; + + // anonymous namespace +}; + +void co_autoreleasePoolDealloc(void *p){ + COAutoreleasePoolPage::routine_dealloc(p); +} + +void * co_autoreleasePoolPush(void){ + if (!co_enableAutorelease) { + return nil; + } + return COAutoreleasePoolPage::push(); +} +void co_autoreleasePoolPop(void *ctxt){ + if (!co_enableAutorelease) { + return; + } + return COAutoreleasePoolPage::pop(ctxt); +} + +void co_autoreleasePoolPrint(){ + if (!co_enableAutorelease) { + return; + } + COAutoreleasePoolPage::printAll(); +} + +id co_autoreleaseObj(id obj){ + if (!obj) { + return obj; + } + if (COAutoreleasePoolPage::isTaggedPointer(obj)) { + return obj; + } + return COAutoreleasePoolPage::autorelease(obj); +} + + +static void (*orig_autorelease_pop)(void *ctx); +static void* (*orig_autorelease_push)(void); +static id (*orig_autorelease_obj)(id); + +static BOOL co_is_autoreleasepage(void *ctx){ + uintptr_t address = (uintptr_t)ctx; + uintptr_t baseAddress = (address / PAGE_MAX_SIZE) * PAGE_MAX_SIZE; + COAutoreleasePoolPage *page = (COAutoreleasePoolPage*)baseAddress; + if (page->bitMask == (uintptr_t)CO_AUTORELEASE_PAGE_MASK) { + return YES; + } + return NO; +} + +void co_hook_autorelease_pop(void *ctx){ + if (co_enableAutorelease && coroutine_self() && co_is_autoreleasepage(ctx)) { + co_autoreleasePoolPop(ctx); + } + else{ + orig_autorelease_pop(ctx); + } +} + +void *co_hook_autorelease_push(void){ + if (co_enableAutorelease && coroutine_self()) { + return co_autoreleasePoolPush(); + } + else{ + return orig_autorelease_push(); + } +} + +id co_hook_autorelease_obj(id obj){ + if (co_enableAutorelease){ + coroutine_t *routine = coroutine_self(); + if (routine && routine->autoreleasepage) { + return co_autoreleaseObj(obj); + } + } + return orig_autorelease_obj(obj); +} + +@interface NSArray (fix_autorelease_crash) + ++ (void)co_hook_autorelease; + +@end + +@implementation NSArray (fix_autorelease_crash) + ++ (void)co_hook_autorelease{ + { + Method m1 = class_getInstanceMethod(self, @selector(enumerateObjectsUsingBlock:)); + Method m2 = class_getInstanceMethod(self, @selector(co_enumerateObjectsUsingBlock_proxy:)); + method_exchangeImplementations(m1, m2); + } +} + +- (void)co_enumerateObjectsUsingBlock_proxy:(void (^)(id _Nonnull, NSUInteger, BOOL * _Nonnull))block{ + if (co_enableAutorelease) { + for (NSUInteger index = 0; index < self.count; index++) { + BOOL stop = NO; + id obj = self[index]; + void *ctx = co_hook_autorelease_push(); + + block(obj, index, &stop); + + co_hook_autorelease_pop(ctx); + if (stop) { + break; + } + } + } + else{ + [self co_enumerateObjectsUsingBlock_proxy:block]; + } +} + + +@end + +void co_autoreleaseInit(void){ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + rebind_symbols((struct rebinding[3]){{"objc_autoreleasePoolPop", (void*)co_hook_autorelease_pop, (void **)&orig_autorelease_pop},{"objc_autoreleasePoolPush", (void*)co_hook_autorelease_push, (void **)&orig_autorelease_push}, {"objc_autorelease", (void*)co_hook_autorelease_obj, (void **)&orig_autorelease_obj}}, 3); + [NSArray co_hook_autorelease]; + }); +} diff --git a/coobjc/promise/COPromise.h b/coobjc/promise/COPromise.h new file mode 100644 index 0000000..9c8f0db --- /dev/null +++ b/coobjc/promise/COPromise.h @@ -0,0 +1,162 @@ +// +// COPromise.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// Copyright 2018 Google Inc. All rights reserved. +// +// Licensed 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. +// +// +// Reference code from: [FBLPromise](https://github.com/google/promises) + + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + COPromise is a implementation of promise. + */ +@interface COPromise : NSObject + +/** + Define the worker type + */ +typedef id __nullable (^COPromiseThenWorkBlock)(Value __nullable value); + +/** + Define the catch block type + */ +typedef void (^COPromiseCatchWorkBlock)(NSError *error); + +/** + Define the on cancel callback block type + */ +typedef void (^COPromiseOnCancelBlock)(COPromise *promise); + +/** + Define the resolve prototype + */ +typedef void (^COPromiseFullfill)(id _Nullable ); + +/** + Define the reject prototype + */ +typedef void (^COPromiseReject)(NSError *); + +/** + Define the constructor's prototype + */ +typedef void (^COPromiseConstructor)(COPromiseFullfill fullfill, COPromiseReject reject); + +/** + Tell the promise is pending or not. + */ +@property(nonatomic, readonly) BOOL isPending; + +/** + Tell the promise is fulfilled or not. + */ +@property(nonatomic, readonly) BOOL isFulfilled; + +/** + Tell the promise is rejected or not. + */ +@property(nonatomic, readonly) BOOL isRejected; + +/** + If fulfilled, value store into this property. + */ +@property(nonatomic, readonly, nullable) Value value; + +/** + If reject, error store into this property + */ +@property(nonatomic, readonly, nullable) NSError *error; + + +/** + Create a promise without constructor. Which means, you should control when the job begins. + + @return The `COPromise` instance + */ ++ (instancetype)promise; + + +/** + Create a promise with constructor. the job begans when someone observing on it. + + @param constructor the constructor block. + @return The `COPromise` instance + */ ++ (instancetype)promise:(COPromiseConstructor)constructor; + +/** + Create a promise with constructor. the job begans when someone observing on it. + + @param constructor the constructor block. + @param queue the dispatch_queue_t that the job run. + @return The `COPromise` instance + */ ++ (instancetype)promise:(COPromiseConstructor)constructor onQueue:(dispatch_queue_t _Nullable )queue; + + +/** + Fulfill the promise with a return value. + + @param value the value fulfilled. + */ +- (void)fulfill:(nullable Value)value; + +/** + Reject the promise with a error + + @param error the error. + */ +- (void)reject:(NSError * _Nullable)error; + +/** + Cancel the job. + + @discussion If you want a `COPromise` be cancellable, you must make the job cancel in `onCancel:`. + */ +- (void)cancel; + + +/** + Set the onCancelBlock. + + @param onCancelBlock will execute on the promise cancelled. + */ +- (void)onCancel:(COPromiseOnCancelBlock _Nullable )onCancelBlock; + +/** + Chained observe the promise fulfilled. + + @param work the observer worker. + @return The chained promise instance. + */ +- (COPromise *)then:(COPromiseThenWorkBlock)work; + +/** + Observe the promises rejected. + + @param reject the reject dealing worker. + @return The chained promise instance. + */ +- (COPromise *)catch:(COPromiseCatchWorkBlock)reject; + +@end + +NS_ASSUME_NONNULL_END diff --git a/coobjc/promise/COPromise.m b/coobjc/promise/COPromise.m new file mode 100644 index 0000000..df598cf --- /dev/null +++ b/coobjc/promise/COPromise.m @@ -0,0 +1,284 @@ +// +// COPromise.m +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// Copyright 2018 Google Inc. All rights reserved. +// +// Licensed 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. +// +// +// Reference code from: [FBLPromise](https://github.com/google/promises) + +#import "COPromise.h" + +typedef NS_ENUM(NSInteger, COPromiseState) { + COPromiseStatePending = 0, + COPromiseStateFulfilled, + COPromiseStateRejected, +}; + +typedef void (^COPromiseObserver)(COPromiseState state, id __nullable resolution); + +@interface COPromise() +{ + COPromiseState _state; + NSMutableArray *_observers; + id __nullable _value; + NSError *__nullable _error; + COPromiseConstructor _constructor; +} + +typedef void (^COPromiseOnFulfillBlock)(Value __nullable value); +typedef void (^COPromiseOnRejectBlock)(NSError *error); +typedef id __nullable (^__nullable COPromiseChainedFulfillBlock)(Value __nullable value); +typedef id __nullable (^__nullable COPromiseChainedRejectBlock)(NSError *error); + +@end + +@implementation COPromise + +- (instancetype)initWithContructor:(COPromiseConstructor)constructor { + self = [super init]; + if (self) { + _constructor = constructor; + } + return self; +} + ++ (instancetype)promise { + return [[self alloc] init]; +} + ++ (instancetype)promise:(COPromiseConstructor)constructor { + return [[self alloc] initWithContructor:constructor]; +} + ++ (instancetype)promise:(COPromiseConstructor)constructor onQueue:(dispatch_queue_t)queue { + if (queue) { + return [[self alloc] initWithContructor:^(COPromiseFullfill fullfill, COPromiseReject reject) { + dispatch_async(queue, ^{ + constructor(fullfill, reject); + }); + }]; + } + else{ + return [[self alloc] initWithContructor:constructor]; + } +} + +- (BOOL)isPending { + @synchronized(self) { + return _state == COPromiseStatePending; + } +} + +- (BOOL)isFulfilled { + @synchronized(self) { + return _state == COPromiseStateFulfilled; + } +} + +- (BOOL)isRejected { + @synchronized(self) { + return _state == COPromiseStateRejected; + } +} + +- (nullable id)value { + @synchronized(self) { + return _value; + } +} + +- (NSError *__nullable)error { + @synchronized(self) { + return _error; + } +} + +- (void)fulfill:(id)value { + NSArray * observers = nil; + COPromiseState state; + @synchronized(self) { + if (_state == COPromiseStatePending) { + _state = COPromiseStateFulfilled; + state = _state; + _value = value; + observers = [_observers copy]; + _observers = nil; + _constructor = nil; + } + else{ + return; + } + } + if (observers.count > 0) { + for (COPromiseObserver observer in observers) { + observer(state, value); + } + } +} + +- (void)reject:(NSError *)error { + NSAssert([error isKindOfClass:[NSError class]], @"Invalid error type."); + NSArray * observers = nil; + COPromiseState state; + @synchronized(self) { + if (_state == COPromiseStatePending) { + _state = COPromiseStateRejected; + state = _state; + _error = error; + observers = [_observers copy]; + _observers = nil; + _constructor = nil; + } + else{ + return; + } + } + for (COPromiseObserver observer in observers) { + observer(state, error); + } +} + +- (void)cancel { + [self reject:[NSError errorWithDomain:@"COPromiseErrorDomain" code:-2341 userInfo:@{NSLocalizedDescriptionKey: @"Promise was cancelled."}]]; +} + +- (void)onCancel:(COPromiseOnCancelBlock)onCancelBlock { + if (onCancelBlock) { + __weak typeof(self) weakSelf = self; + [self catch:^(NSError * _Nonnull error) { + if ([error.domain isEqualToString:@"COPromiseErrorDomain"] && error.code == -2341) { + onCancelBlock(weakSelf); + } + }]; + } +} + +#pragma mark - then + +- (void)observeWithFulfill:(COPromiseOnFulfillBlock)onFulfill reject:(COPromiseOnRejectBlock)onReject { + if (!onFulfill && !onReject) { + return; + } + COPromiseState state = COPromiseStatePending; + id value = nil; + NSError *error = nil; + @synchronized (self) { + + switch (_state) { + case COPromiseStatePending: { + if (!_observers) { + _observers = [[NSMutableArray alloc] init]; + } + [_observers addObject:^(COPromiseState state, id __nullable resolution) { + switch (state) { + case COPromiseStatePending: + break; + case COPromiseStateFulfilled: + if (onFulfill) { + onFulfill(resolution); + } + break; + case COPromiseStateRejected: + if (onReject) { + onReject(resolution); + } + break; + } + }]; + break; + } + case COPromiseStateFulfilled: { + state = COPromiseStateFulfilled; + value = self.value; + break; + } + case COPromiseStateRejected: { + state = COPromiseStateRejected; + error = self.error; + break; + } + default: + break; + } + } + if (state == COPromiseStateFulfilled) { + if (onFulfill) { + onFulfill(value); + } + } + else if(state == COPromiseStateRejected){ + if (onReject) { + onReject(error); + } + } +} + + +- (COPromise *)chainedPromiseWithFulfill:(COPromiseChainedFulfillBlock)chainedFulfill + chainedReject:(COPromiseChainedRejectBlock)chainedReject { + + COPromise *promise = [COPromise promise]; + __auto_type resolver = ^(id __nullable value, BOOL isReject) { + if ([value isKindOfClass:[COPromise class]]) { + [(COPromise *)value observeWithFulfill:^(id _Nullable value) { + [promise fulfill:value]; + } reject:^(NSError *error) { + [promise reject:value]; + }]; + } else { + if (isReject) { + [promise reject:value]; + } else { + [promise fulfill:value]; + } + } + }; + + [self observeWithFulfill:^(id _Nullable value) { + value = chainedFulfill ? chainedFulfill(value) : value; + resolver(value, NO); + } reject:^(NSError *error) { + id value = chainedReject ? chainedReject(error) : error; + resolver(value, YES); + }]; + + return promise; +} + +- (COPromise *)then:(COPromiseThenWorkBlock)work { + if (_constructor) { + COPromiseFullfill fullfill = ^(id value){ + [self fulfill:value]; + }; + COPromiseReject reject = ^(NSError *error){ + [self reject:error]; + }; + _constructor(fullfill, reject); + } + return [self chainedPromiseWithFulfill:work chainedReject:nil]; +} + +- (COPromise *)catch:(COPromiseCatchWorkBlock)reject { + return [self chainedPromiseWithFulfill:nil chainedReject:^id _Nullable(NSError *error) { + if (reject) { + reject(error); + } + return error; + }]; +} + +@end diff --git a/coobjc/util/README.md b/coobjc/util/README.md new file mode 100644 index 0000000..8a8e885 --- /dev/null +++ b/coobjc/util/README.md @@ -0,0 +1 @@ +# util diff --git a/coobjc/util/co_errors.h b/coobjc/util/co_errors.h new file mode 100644 index 0000000..e5f86f7 --- /dev/null +++ b/coobjc/util/co_errors.h @@ -0,0 +1,30 @@ +// +// co_errors.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + +extern void co_inform(const char *fmt, ...); +extern void co_fatal(const char *fmt, ...) __attribute__((noreturn, format (printf, 1, 2))); + +#ifdef __cplusplus +} +#endif //__cplusplus diff --git a/coobjc/util/co_errors.m b/coobjc/util/co_errors.m new file mode 100644 index 0000000..ea8319b --- /dev/null +++ b/coobjc/util/co_errors.m @@ -0,0 +1,47 @@ +// +// co_errors.m +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "co_errors.h" +#import +#import + + + +void co_inform(const char *fmt, ...){ + va_list ap; + char *buf1; + char *buf2; + + va_start(ap,fmt); + vasprintf(&buf1, fmt, ap); + va_end (ap); + + asprintf(&buf2, "objc[%d]: %s\n", getpid(), buf1); +} +void co_fatal(const char *fmt, ...){ + va_list ap; + char *buf1; + char *buf2; + + va_start(ap,fmt); + vasprintf(&buf1, fmt, ap); + va_end (ap); + + asprintf(&buf2, "objc[%d]: %s\n", getpid(), buf1); + __builtin_trap(); +} diff --git a/coobjc/util/co_queue.h b/coobjc/util/co_queue.h new file mode 100644 index 0000000..71b0669 --- /dev/null +++ b/coobjc/util/co_queue.h @@ -0,0 +1,35 @@ +// +// co_queue.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 co_queue_h +#define co_queue_h + +#include +#import + +/** + Get the current dispatch_queue_t. + This is a replacement of `dispatch_get_current_queue()`, since which is deprecated. + This method may return nil. + + @return The current dispatch_queue. + */ +dispatch_queue_t co_get_current_queue(void); + + +#endif /* co_queue_h */ diff --git a/coobjc/util/co_queue.m b/coobjc/util/co_queue.m new file mode 100644 index 0000000..1c84162 --- /dev/null +++ b/coobjc/util/co_queue.m @@ -0,0 +1,48 @@ +// +// co_queue.c +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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. + +#include "co_queue.h" +#import +#import + +typedef struct coobjc_test_thread_s { + void* queue; +} coobjc_test_thread_s; + +dispatch_queue_t co_get_current_queue() { + if ([NSThread isMainThread]) { + return dispatch_get_main_queue(); + } + thread_identifier_info_data_t tiid; + thread_t thread = mach_thread_self(); + mach_msg_type_number_t cnt = THREAD_IDENTIFIER_INFO_COUNT; + kern_return_t kr = thread_info(thread, + THREAD_IDENTIFIER_INFO, (thread_info_t)&tiid, &cnt); + if (kr == KERN_SUCCESS) { + if (tiid.dispatch_qaddr == thread) { + return NULL; + } + coobjc_test_thread_s test; + test.queue = (void*)tiid.dispatch_qaddr; + if (test.queue != NULL) { + return *(__unsafe_unretained dispatch_queue_t*)test.queue; + } + return NULL; + } + return NULL; +} diff --git a/coobjc/util/co_queuedebugging_support.h b/coobjc/util/co_queuedebugging_support.h new file mode 100644 index 0000000..bb414ac --- /dev/null +++ b/coobjc/util/co_queuedebugging_support.h @@ -0,0 +1,37 @@ +// +// co_queuedebugging_support.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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. +// +// ** +// When set a breakpoint in coroutine's code, we got lldb crash. +// This is the fix of queue debugging issues. + +#ifndef co_queuedebugging_support_h +#define co_queuedebugging_support_h + +/** + Since `backtrace` method could not work in coroutine, we provide the backtrace method in coroutine. + */ +int co_backtrace(void** buffer, int size); + +/** + Rebind the system `backtrace` method, make it get the coroutine's backtrace. + This method can fix the lldb crash problem. + */ +void co_rebind_backtrace(void); + +#endif /* co_queuedebugging_support_h */ diff --git a/coobjc/util/co_queuedebugging_support.m b/coobjc/util/co_queuedebugging_support.m new file mode 100644 index 0000000..8edc17b --- /dev/null +++ b/coobjc/util/co_queuedebugging_support.m @@ -0,0 +1,131 @@ +// +// co_queuedebugging_support.c +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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. + +#include +#include +#include +#include +#include +#include +#include +#include +#include "coroutine.h" +#import +#include +#import +#include + + +#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__arm64__) +#define FP_LINK_OFFSET 1 +#else +#error ********** Unimplemented architecture +#endif + +#if defined(__x86_64__) +#define ISALIGNED(a) ((((uintptr_t)(a)) & 0xf) == 0) +#elif defined(__i386__) +#define ISALIGNED(a) ((((uintptr_t)(a)) & 0xf) == 8) +#elif defined(__arm__) || defined(__arm64__) +#define ISALIGNED(a) ((((uintptr_t)(a)) & 0x1) == 0) +#endif + +static void +_co_thread_stack_pcs(vm_address_t *buffer, unsigned max, unsigned *nb, + unsigned skip, void *startfp) +{ + void *frame, *next; + + *nb = 0; + + frame = __builtin_frame_address(0); + if(!ISALIGNED(frame)) + return; + while ((startfp && startfp >= *(void **)frame) || skip--) { + next = *(void **)frame; + if(!ISALIGNED(next) || next <= frame) + return; + frame = next; + } + while (max--) { + void *retaddr = (void *)*(vm_address_t *) + (((void **)frame) + FP_LINK_OFFSET); + if (retaddr == 0) { + return; + } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wint-conversion" + buffer[*nb] = retaddr; +#pragma clang diagnostic pop + (*nb)++; + next = *(void **)frame; + if(!ISALIGNED(next) || next <= frame) + return; + frame = next; + } +} + +static int (*orig_backtrace)(void** buffer, int size); + + +int co_backtrace(void** buffer, int size) { + if (coroutine_self()) { + unsigned int num_frames; + _co_thread_stack_pcs((vm_address_t*)buffer, size, &num_frames, 1, NULL); + while (num_frames >= 1 && buffer[num_frames-1] == NULL) num_frames -= 1; + return num_frames; + } else { + return orig_backtrace(buffer, size); + } +} + +static BOOL co_isDebuggerAttached() { + static BOOL debuggerIsAttached = NO; + + struct kinfo_proc info; + size_t info_size = sizeof(info); + int name[4]; + + name[0] = CTL_KERN; + name[1] = KERN_PROC; + name[2] = KERN_PROC_PID; + name[3] = getpid(); // from unistd.h, included by Foundation + + if (sysctl(name, 4, &info, &info_size, NULL, 0) == -1) { + NSLog(@"[HockeySDK] ERROR: Checking for a running debugger via sysctl() failed: %s", strerror(errno)); + debuggerIsAttached = false; + } + + if (!debuggerIsAttached && (info.kp_proc.p_flag & P_TRACED) != 0) { + debuggerIsAttached = true; + } + + return debuggerIsAttached; +} + + + +void co_rebind_backtrace() { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + if (co_isDebuggerAttached()) { + rebind_symbols((struct rebinding[1]){{"backtrace", co_backtrace, (void *)&orig_backtrace}}, 1); + } + }); +} + diff --git a/coobjc/util/co_tuple.h b/coobjc/util/co_tuple.h new file mode 100644 index 0000000..a6213a4 --- /dev/null +++ b/coobjc/util/co_tuple.h @@ -0,0 +1,82 @@ +// +// co_tuple.h +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 COTuple : NSObject + +// Creation +- (id)init; // Empty tuple +- (id)initWithArray:(NSArray*)arr; +- (id)initWithObjects:(id)objects, ...; + +// Getting an object at an index +- (id)objectAtIndexedSubscript:(NSUInteger)idx; +- (id)objectAtIndex:(int)idx; + +@end + +@interface COTuple1: COTuple + +@end + +@interface COTuple2: COTuple + +@end + +@interface COTuple3: COTuple + +@end + +@interface COTuple4: COTuple + +@end + +@interface COTuple5: COTuple + +@end + +@interface COTuple6: COTuple + +@end + +@interface COTuple7: COTuple + +@end + +@interface COTuple8: COTuple + +@end + + + +@interface COTupleUnpack : NSObject + +@property(nonatomic, strong) COTuple *tuple; + +- (instancetype)initWithPointers:(int)startIndex, ...; + + +@end + +id co_tupleSentinel(); + +void** co_unpackSentinel(); + +#define co_tuple(...) [[COTuple alloc] initWithObjects:__VA_ARGS__, co_tupleSentinel()] +#define co_unpack(...) [[COTupleUnpack alloc] initWithPointers:0, __VA_ARGS__, co_unpackSentinel()].tuple diff --git a/coobjc/util/co_tuple.m b/coobjc/util/co_tuple.m new file mode 100644 index 0000000..403b720 --- /dev/null +++ b/coobjc/util/co_tuple.m @@ -0,0 +1,302 @@ +// +// co_tuple.m +// coobjc +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 "co_tuple.h" + +#if __has_feature(objc_arc) +#define arc_unsafe_unretained __unsafe_unretained +#define arc_autoreleasing __autoreleasing +#define arc_bridge(t, x) ((__bridge t)x) +#else +#define arc_unsafe_unretained +#define arc_autoreleasing +#define arc_bridge(t, x) (x) +#endif + +id co_tupleSentinel() { + static id sentin; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sentin = [[NSObject alloc] init]; + }); + return sentin; +} + +#ifdef DEBUG + +int co_tuple_dealloc_count = 0; +int co_untuple_dealloc_count = 0; + +#endif + +void** co_unpackSentinel(){ + static id sentin; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sentin = [[NSObject alloc] init]; + }); + return (void**)&sentin; +} + +@implementation COTuple +{ + NSPointerArray* storage; +} + + +- (NSPointerArray*)_storage { + return storage; +} +- (void)_setStorage:(NSPointerArray*)newstorage { + storage = newstorage; +} + +- (int)count { + return (int)storage.count; +} + +// Initialization +- (id)init { + self = [super init]; + if (!self) + return nil; + + storage = [[NSPointerArray alloc] initWithOptions:NSPointerFunctionsStrongMemory | NSPointerFunctionsObjectPersonality]; + + return self; +} +- (id)initWithArray:(NSArray*)arr { + self = [self init]; + if (!self) + return nil; + + for (id obj in arr) { + [storage addPointer:arc_bridge(void*, obj)]; + } + + return self; +} +- (id)initWithObjects:(id)objects, ... { + self = [self init]; + if (!self) + return nil; + + va_list ap; + va_start(ap, objects); + + id obj = objects; + id sentin = co_tupleSentinel(); + while (obj != sentin) { + [storage addPointer:arc_bridge(void*, obj)]; + obj = va_arg(ap, id); + } + va_end(ap); + + return self; +} + +// Protocolic Obligations +- (id)copyWithZone:(NSZone *)zone { + id newtup = [[[self class] alloc] init]; + [newtup _setStorage:[[self _storage] copy]]; + return newtup; +} +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id arc_unsafe_unretained [])stackbuf count:(NSUInteger)len { + return [storage countByEnumeratingWithState:state objects:stackbuf count:len]; +} + +// Getting an object at an index +- (id)objectAtIndexedSubscript:(NSUInteger)idx { + return [self objectAtIndex:(int)idx]; +} +- (id)objectAtIndex:(int)idx { + if (idx < 0 || idx >= (int)[storage count]) + return nil; + return (__strong id)[storage pointerAtIndex:idx]; +} + +- (id)first { + return [self objectAtIndex:0]; +} +- (id)second { + return [self objectAtIndex:1]; +} +- (id)third { + return [self objectAtIndex:2]; +} + +// Unpacking +- (void)unpack:(id*)pointypointers, ... { + + va_list ap; + va_start(ap, pointypointers); + + arc_autoreleasing id* pp = pointypointers; + int i = 0; + while (pp != NULL) { + *pp = [self objectAtIndex:i]; + + pp = va_arg(ap, arc_autoreleasing id*); + i++; + } + va_end(ap); + +} + +- (void)dealloc +{ + if (storage) { + [storage release]; + storage = nil; + } +#ifdef DEBUG + + co_tuple_dealloc_count++; + +#endif + [super dealloc]; +} + +@end + +@implementation COTupleUnpack{ + NSMutableArray *storage; +} + +@synthesize tuple = _tuple; + +- (void)setTuple:(COTuple *)tuple{ + NSAssert([tuple isKindOfClass:[COTuple class]], @"tuple must be COTuple"); + if (tuple == NULL) { + return; + } + if (![tuple isKindOfClass:[COTuple class]]) { + return; + } + _tuple = [tuple retain]; + int index = 0; + for (NSNumber *number in storage) { + if (index >= [tuple count]) { + break; + } + uintptr_t p = [number unsignedLongValue]; + if (p > 0) { + __autoreleasing id* pointer = (id*)p; + + *pointer = [[tuple objectAtIndex:index] retain]; + } + + index++; + } +#ifdef DEBUG + for (NSNumber *number in storage) { + + uintptr_t p = [number unsignedLongValue]; + if (p > 0) { + __autoreleasing id* pointer = (id*)p; + + NSLog(@"%@", *pointer); + } + + } +#endif + +} + +- (instancetype)initWithPointers:(int)startIndex, ...{ + self = [super init]; + if (self) { + storage = [[NSMutableArray alloc] init]; + va_list ap; + va_start(ap, startIndex); + + if (startIndex <= 0) { + startIndex = 0; + } + int i = 0; + id* sentin = (id*)co_unpackSentinel(); + + do { + arc_autoreleasing id* pp = va_arg(ap, arc_autoreleasing id*); + if (pp == sentin) { + break; + } + if (i >= startIndex) { + uintptr_t pointer = (uintptr_t)pp; + [storage addObject:@(pointer)]; + } + i++; + + } while (1); + va_end(ap); + } + return self; +} + +- (void)dealloc{ + [storage removeAllObjects]; + storage = nil; + if (_tuple) { + [_tuple release]; + _tuple = nil; + } +#ifdef DEBUG + + co_untuple_dealloc_count++; + +#endif + [super dealloc]; +} + + + +@end + +@implementation COTuple1 + +@end + +@implementation COTuple2 + +@end + +@implementation COTuple3 + +@end + +@implementation COTuple4 + +@end + +@implementation COTuple5 + +@end + +@implementation COTuple6 + +@end + +@implementation COTuple7 + +@end + +@implementation COTuple8 + +@end + + diff --git a/coobjc_icon.png b/coobjc_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..94c5e3718c64fde1ca8e8803554af972b55387f1 GIT binary patch literal 14189 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 'Copyright', + :text => <<-LICENSE + Alibaba-INC copyright + LICENSE + } + + s.author = { "pengyutang125" => "pengyutang125@sina.com" } + s.platform = :ios + + s.ios.deployment_target = '8.0' + s.requires_arc = true + + s.source = { :git => "git@github.com:alibaba/coobjc.git", :branch => 'master' } + s.source_files = 'coswift/*.{h,swift}' + s.exclude_files = 'coobjc/util/co_tuple.{h,m}' + + s.dependency 'fishhook' + s.dependency 'coobjc' +end diff --git a/coswift/Chan.swift b/coswift/Chan.swift new file mode 100644 index 0000000..678b242 --- /dev/null +++ b/coswift/Chan.swift @@ -0,0 +1,153 @@ +// +// Chan.swift +// coswift +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 Foundation + +private let co_chan_custom_resume: @convention(c) (UnsafeMutablePointer?) -> Void = { co in + + if let coObj: Coroutine = co_get_swiftobj(co: co) { + coObj.addToScheduler() + } +} + +public class Chan { + + public typealias ChanOnCancelBlock = (Chan) -> Void + + public var onCancel: ChanOnCancelBlock? + public var isCancelled: Bool { + get { + return cancelled + } + } + + private var buffCount: Int32 + private var cchan: UnsafeMutablePointer + private var cancelled: Bool = false + private var eleSize: Int32 + private var buffList: [T] = [] + private let lock = NSRecursiveLock() + + public init(buffCount: Int32) { + + self.buffCount = buffCount + eleSize = Int32(MemoryLayout.size) + cchan = chancreate(eleSize, buffCount, co_chan_custom_resume) + } + + public convenience init() { + self.init(buffCount: 0) + } + + deinit { + chanfree(cchan) + } + + public class func expandable() -> Chan { + + return Chan(buffCount: -1) + } + + public func send(val: T) throws { + + if let co = Coroutine.current() { + co.currentChan = self as? Chan + + lock.lock() + buffList.append(val) + lock.unlock() + chansendul(cchan, 1); + co.currentChan = nil + if cancelled { + throw COError.coroutineCancelled + } + } + } + + public func send_nonblock(val: T) { + lock.lock() + buffList.append(val) + lock.unlock() + channbsendul(cchan, 1) + } + + public func receive() throws -> T { + + if let co = Coroutine.current() { + + co.currentChan = self as? Chan + + let ret = chanrecvul(cchan); + co.currentChan = nil + + if ret == 1 { + + lock.lock() + let obj = buffList.removeFirst() + lock.unlock() + return obj + } else { + throw COError.coroutineCancelled + } + + } else { + throw COError.invalidCoroutine + } + } + + public func receive_nonblock() -> T? { + + let ret = channbrecvul(cchan) + if ret == 1 { + lock.lock() + let obj = buffList.removeFirst() + lock.unlock() + return obj + } else { + return nil + } + } + + public func cancel() { + + if cancelled { + return + } + cancelled = true + + if let cancelBlock = self.onCancel { + cancelBlock(self) + } + + var blockingSend:Int32 = 0 + var blockingReceive:Int32 = 0 + + if (changetblocking(cchan, &blockingSend, &blockingReceive) != 0) { + + if blockingSend > 0 { + for _ in 0.. 0 { + for _ in 0..?) -> Coroutine? { + return co.flatMap { (coo) -> UnsafeMutableRawPointer? in + return coroutine_getuserdata(coo) + }.flatMap({ (ud) -> Coroutine? in + return Unmanaged.fromOpaque(ud).takeUnretainedValue() + }) +} + +/** + COCoroutine is the object owned coroutine. + */ +open class Coroutine { + + + /** + Call back when coroutine is finished. + */ + public var finishedBlock: (() -> Void)? + + + /** + The code body of the coroutine. + */ + public var execBlock: () throws -> Void + + + /** + The `dispatch_queue_t` coroutine will run on it. + */ + public var queue: DispatchQueue + + + /** + The struct pointer of coroutine_t + */ + private var co: UnsafeMutablePointer? + + + /** + When COCoroutine as a Generator, this Channel use to yield a value. + */ + public var yieldChan: Chan? + + + /** + If `COCoroutine is suspend by a Channel, this pointer mark it. + */ + public var currentChan: Chan? + + + /** + The lastError marked in the Coroutine. + */ + public var lastError: Error? + + + /** + Get the current running coroutine object. + + @return The coroutine object. + */ + public class func current() -> Coroutine? { + + let co: UnsafeMutablePointer? = coroutine_self() + if co != nil { + return co_get_swiftobj(co: co) + } else { + return nil + } + } + + + /** + Tell if the coroutine is cancelled or finished. + + @return isActive + */ + public class func isActive() -> Bool { + if let co = Coroutine.current() { + if co.cancelled || co.finished { + return false + } else { + return true + } + } + return false + } + + /// running + private func execute() { + + defer { + finished = true + if let finishBlock = finishedBlock { + finishBlock() + } + yieldChan = nil + } + + do { + try self.execBlock() + } catch { + self.lastError = error + + } + } + + + /// The c bridge + private let co_exec: @convention(c) (Optional)->Void = { p in + + if let co: UnsafeMutablePointer = p?.assumingMemoryBound(to: coroutine_t.self) { + + if let coObj: Coroutine = co_get_swiftobj(co: co) { + + coObj.execute() + } + } + } + + /// Create a coroutine + /// + /// - Parameters: + /// - block: the block + /// - queue: the queue + public init(block: @escaping () throws -> Void, on queue: DispatchQueue? = nil, stackSize: UInt32? = nil) { + execBlock = block + self.queue = queue ?? co_get_current_queue() + co = coroutine_create(co_exec) + if let ss = stackSize { + co?.pointee.stack_size = (ss % 16384 > 0) ? ((ss/16384 + 1)*16384) : ss + } + coroutine_setuserdata(co, Unmanaged.passRetained(self).toOpaque()) { (ud) in + if let p: UnsafeMutableRawPointer = ud { + let coObj = Unmanaged.fromOpaque(p).takeUnretainedValue() + coObj.co = nil + Unmanaged.fromOpaque(p).release() + } + } + } + + /** + The coroutine is Finished. + */ + private var finished: Bool = false + public var isFinished: Bool { + get { + return finished + } + } + + private var resumed: Bool = false + + /** + The coroutine is cancelled.? + */ + private var cancelled: Bool = false + public var isCancelled: Bool { + get { + return cancelled + } + } + + private func performBlockOnQueue(block: @escaping ()->Void ) { + + if co_get_current_queue() == self.queue { + block() + } else { + self.queue.async { + block() + } + } + } + + private func internalCancel() { + if cancelled { + return + } + cancelled = true + + self.co?.pointee.is_cancelled = true + if let chan = self.currentChan { + chan.cancel(); + } + } + + /** + Cancel the coroutine. + */ + public func cancel() { + performBlockOnQueue { + self.internalCancel() + } + } + + + /** + Calling this method in another coroutine. wait the coroutine to be finished. + */ + public func join() { + let chan = Chan(buffCount: 1) + performBlockOnQueue { + + if self.isFinished { + chan.send_nonblock(val: true) + } else { + self.finishedBlock = { + chan.send_nonblock(val: true) + } + } + } + do { + _ = try chan.receive() + } catch { + + } + } + + + /** + Calling this method in another coroutine. Cancel the coroutine, and wait the coroutine to be finished. + */ + public func cancelAndJoin() { + let chan = Chan(buffCount: 1) + performBlockOnQueue { + + if self.isFinished { + chan.send_nonblock(val: true) + } else { + self.finishedBlock = { + chan.send_nonblock(val: true) + } + self.internalCancel() + } + } + do { + _ = try chan.receive() + } catch { + + } + } + + + /** + Resume the coroutine. + + @return The coroutine object. + */ + public func resume() -> Coroutine { + self.queue.async() { + + if self.resumed { + return + } + self.resumed = true + coroutine_resume(self.co) + } + return self + } + + /** + Resume the coroutine, if on current queue, run in current runloop. + */ + public func resumeNow() -> Void { + self.performBlockOnQueue { + if self.resumed { + return + } + self.resumed = true + coroutine_resume(self.co) + } + } + + /** + Add coroutine to the scheduler. If sheduler is idle, resume it. + */ + public func addToScheduler() -> Void { + self.performBlockOnQueue { + coroutine_add(self.co) + } + } +} diff --git a/coswift/Errors.swift b/coswift/Errors.swift new file mode 100644 index 0000000..c9e2c96 --- /dev/null +++ b/coswift/Errors.swift @@ -0,0 +1,29 @@ +// +// Errors.swift +// coswift +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 Foundation + +public enum COError: String, LocalizedError { + + + case promiseCancelled = "Promise was cancelled" + case coroutineCancelled = "Coroutine was cancelled" + case invalidCoroutine = "The operation requires execute in coroutine" + +} + diff --git a/coswift/Info.plist b/coswift/Info.plist new file mode 100644 index 0000000..e1fe4cf --- /dev/null +++ b/coswift/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/coswift/Promise.swift b/coswift/Promise.swift new file mode 100644 index 0000000..2d3f134 --- /dev/null +++ b/coswift/Promise.swift @@ -0,0 +1,288 @@ +// +// Promise.swift +// coswift +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 Foundation + +private enum PromiseState { + case pending + case fulfilled + case rejected + +} + +public enum Resolution { + case fulfilled(T) + case rejected(Error) +} + +public class Promise { + + + public typealias PromiseOnCancelBlock = (Promise) -> Void + public typealias PromiseFulfill = (T) -> Void + public typealias PromiseReject = (Error) -> Void + public typealias PromiseConstructor = (@escaping PromiseFulfill, @escaping PromiseReject) -> Void + + private typealias PromiseObserver = (PromiseState, Resolution) -> Void + + + + private var state: PromiseState = .pending + private var _value: T? + public var value: T? { + get { + lock.lock() + defer { lock.unlock() } + return _value + } + } + + private var _error: Error? + public var error: Error? { + get { + lock.lock() + defer { lock.unlock() } + return _error + } + } + + private var constructor: PromiseConstructor? + private var promiseObservers: [PromiseObserver] = [] + private let lock = NSRecursiveLock() + + public var isPending: Bool { + get { + lock.lock() + defer { lock.unlock() } + return state == .pending + } + } + + public var isFulfilled: Bool { + get { + lock.lock() + defer { lock.unlock() } + return state == .fulfilled + } + } + public var isRejected: Bool { + get { + lock.lock() + defer { lock.unlock() } + return state == .rejected + } + } + + + public init() {} + + public init(constructor: @escaping PromiseConstructor) { + self.constructor = constructor + } + + public convenience init(constructor: @escaping PromiseConstructor, on queue: DispatchQueue) { + self.init { (fulfill, reject) in + queue.async { + constructor(fulfill, reject) + } + } + } + + public func fulfill(value: T) { + + var observers: [PromiseObserver]? = nil + var stateTmp: PromiseState? = nil + + lock.lock() + + if state == .pending { + state = .fulfilled + stateTmp = state + _value = value + observers = promiseObservers + promiseObservers = [] + constructor = nil + } + lock.unlock() + + observers?.forEach({ (observer) in + observer(stateTmp!, Resolution.fulfilled(value)) + }) + } + + public func reject(error: Error) { + + var observers: [PromiseObserver]? = nil + var stateTmp: PromiseState? = nil + + do { + lock.lock() + defer { lock.unlock() } + if state == .pending { + state = .rejected + stateTmp = state + _value = value + observers = promiseObservers + promiseObservers = [] + constructor = nil + } + } + + observers?.forEach({ (observer) in + observer(stateTmp!, Resolution.rejected(error)) + }) + } + + public func cancel() { + self.reject(error: COError.promiseCancelled) + } + + public func onCancel(onCancelBlock: @escaping PromiseOnCancelBlock) { + + self.catch { [weak self](err) in + if let strongSelf = self, let error = err as? COError, error == .promiseCancelled { + if error == .promiseCancelled { + onCancelBlock(strongSelf) + } + } + } + } + + private func observe(fulfill: PromiseFulfill?, reject: PromiseReject?) { + if fulfill == nil && reject == nil { + return + } + + var stateTmp: PromiseState = .pending + + var valueTmp: T? = nil + var errorTmp: Error? = nil + + lock.lock() + + switch self.state { + case .pending: + promiseObservers.append { (st, resolution) in + + switch st { + case .pending: + break + case .fulfilled: + if let fulfillBlock = fulfill { + switch resolution { + case .fulfilled(let val): + fulfillBlock(val) + break + case .rejected(_): + break + } + } + break + case .rejected: + if let rejectBlock = reject { + switch resolution { + case .fulfilled(_): + break + case .rejected(let error): + rejectBlock(error) + break + } + } + break + } + } + break + case .fulfilled: + stateTmp = .fulfilled + valueTmp = value + break + case .rejected: + stateTmp = .rejected + errorTmp = error + } + + lock.unlock() + + if stateTmp == .fulfilled { + if let fulfillBlock = fulfill { + fulfillBlock(valueTmp!) + } + } + else if stateTmp == .rejected { + if let rejectBlock = reject { + rejectBlock(errorTmp!) + } + } + } + + private func chainedPromise(chainedFulfill: ((T) -> U)?, chainedReject: ((Error) -> Error)?) -> Promise { + + let promise = Promise() + + let fulfillr = { (val: U) in + promise.fulfill(value: val) + } + + let rejectr = { (error: Error) in + promise.reject(error: error) + } + + self.observe(fulfill: { (val: T) in + + if let chainedFulfillBlock = chainedFulfill { + + let ret = chainedFulfillBlock(val) + fulfillr(ret) + } + + }) { (err: Error) in + + if let chainedRejectBlock = chainedReject { + let ret = chainedRejectBlock(err) + rejectr(ret) + } + } + return promise + } + + public func then(work: @escaping (T) -> U) -> Promise { + + if let cons: PromiseConstructor = constructor { + + let fulfill: PromiseFulfill = { (val: T) in + self.fulfill(value: val) + } + let reject: PromiseReject = { (err: Error) in + self.reject(error: err) + } + cons(fulfill, reject) + } + + return self.chainedPromise(chainedFulfill: work, chainedReject: nil) + } + + @discardableResult + public func `catch`(reject: @escaping (Error) -> Void) -> Promise { + + return self.chainedPromise(chainedFulfill: nil, chainedReject: { (err) -> Error in + + reject(err) + return err + }) + } +} diff --git a/coswift/coswift.h b/coswift/coswift.h new file mode 100644 index 0000000..fbf3d7e --- /dev/null +++ b/coswift/coswift.h @@ -0,0 +1,31 @@ +// +// coswift.h +// coswift +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 + +//! Project version number for coswift. +FOUNDATION_EXPORT double coswiftVersionNumber; + +//! Project version string for coswift. +FOUNDATION_EXPORT const unsigned char coswiftVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + +#import +#import +#import diff --git a/coswift/coswift.swift b/coswift/coswift.swift new file mode 100644 index 0000000..9c69374 --- /dev/null +++ b/coswift/coswift.swift @@ -0,0 +1,101 @@ +// +// Api.swift +// coswift +// +// Copyright © 2018 Alibaba Group Holding Limited All rights reserved. +// +// Licensed 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 Foundation + + +/// Launch a coroutine running on queue, and special the stack size +/// of the coroutine. +/// +/// - Parameters: +/// - queue: the `dispatch_queue_t` of coroutine's code running. +/// - stackSize: the custom stack size of coroutine +/// - block: the coroutine's body code +/// - Returns: the coroutine object +@discardableResult +public func co_launch(queue: DispatchQueue? = nil, stackSize: UInt32? = nil, block: @escaping () throws -> Void) -> Coroutine { + let co = Coroutine(block: block, on: queue, stackSize: stackSize) + return co.resume() +} + +/// Await a promise object +/// +/// - Parameter promise: The Promise object +/// - Returns: the promise's resolution +/// - Throws: COError type +/// +/// Examples: +/// let resolution = await(somePromise) +/// switch result { +/// case .fulfilled(let val): +/// // the promise fulfilled +/// break +/// case .rejected(let error): +/// // the promise reject +/// break +/// } +public func await(promise: Promise) throws -> Resolution { + if let _ = Coroutine.current() { + + let chan = Chan>() + + promise.then(work: { (value) -> Any in + chan.send_nonblock(val: Resolution.fulfilled(value)) + }).catch { (error) in + chan.send_nonblock(val: Resolution.rejected(error)) + } + + chan.onCancel = { (channel) in + promise.cancel() + } + + return try chan.receive() + + } else { + throw COError.invalidCoroutine + } +} + +/// A Convenience use of await +/// +/// - Parameter closure: return a Promise object +/// - Returns: the promise's resolution +/// - Throws: COError +public func await(closure: @escaping () -> Promise ) throws -> Resolution { + return try await(promise: closure()) +} + +/// Await a channel object, blocking current process, wait the channel send something. +/// +/// - Parameter channel: the Chan object +/// - Returns: The value passing to channel +/// - Throws: COError +public func await(channel: Chan) throws -> T { + if let _ = Coroutine.current() { + return try channel.receive() + } else { + throw COError.invalidCoroutine + } +} + +/// Check current coroutine is active or not. +public var co_isActive: Bool { + get { + return Coroutine.isActive() + } +} diff --git a/docs/arch_design.md b/docs/arch_design.md new file mode 100644 index 0000000..3018717 --- /dev/null +++ b/docs/arch_design.md @@ -0,0 +1,151 @@ +# coobjc + +![framework_arch.png](images/framework_arch.png) + +* The bottom layer is the coroutine kernel, which includes management of stack switching, implementation of coroutine scheduler, implementation of communication channel between coroutines, etc. +* The middle layer is a wrapper based on the operators of the coroutine. Currently, it supports programming models such as async/await, generator, and Actor. +* The top layer is the coroutine extension to the system library, which currently covers all the IO and time-consuming methods of Foundation and UIKit. + +coobjc's architecture divided into the following: + +- Switch context +- Coroutine object +- Scheduler +- Channel +- Api +- Cancellation +- Swift + +# Switch context + +Since `ucontext.h` is deprecated on iOS, we implement custom `getcontext` and `setcontext` method using asm, support arm64/armv7/x86_64/i386 four architectures. + +The following image figure out how we using `getcontext` and `setcontext` to implement coroutine's `yield` and `resume` operations. + +![context.png](/docs/images/context.png) + +# Coroutine + +- Pausable and recoverable + +A coroutine can pause with `yield` function, and recover with `resume` function. + +- Custom calling stack + +Coroutine alloc a piece of memory use for calling stack, the memory address stored in `stack_memory`. + +- Four state + +Coroutine has for state: READY/RUNNING/SUSPEND/DEAD. The RUNNING and SUSPEND states may be switched multiple times。 + +When entering the DEAD state, Coroutine will automatically release. + +- Userdata + +``` +void *userdata; // Userdata. +coroutine_func userdata_dispose; // Userdata's dispose action. +``` + +You can set a `userdata` to Coroutine, and set `userdata_dispose` to cleanup `userdata` when Coroutine DEAD. + + +# Scheduler + +How can the coroutine be used in our iOS app? How do you interact with existing code? Which thread is scheduled in the coroutine? So we designed the coroutine scheduler `Scheduler`. + +`Scheduler` is responsible for scheduling all user coroutines. It internally manages a coroutine queue, and then continuously loops out the coroutines from the queue for execution. When there is no coroutine in the queue, it switches back to thread execution. + +Based on this design, when we want to execute a coroutine, we only add the coroutine to the thread's `Scheduler` queue, and then `Scheduler` is responsible for executing it. + +`Scheduler` itself is also a coroutine. + +![scheduler.png](/docs/images/scheduler.png) + +# Channel 的设计 + +Channel is the implementation of Process/Channel in the CSP (Communicating Sequential Processes) concurrency model. The Channel implementation in coobjc fully references the implementation of [libtask](https://swtch.com/libtask/). + + +Channel transfers data between cooperatives. Channel's characteristic is that it can blocking send or blocking receive data in a coroutine (the blockages in coroutine are not real blockages, just only paused). + + +Channel is divided into **no buffer**, **buffer**, **infinite buffer** (automatic expansion of buffer) mode, the following figure describes the difference between buffers: + +![channel1.png](/docs/images/channel1.png) + +The main feature of the Channel is that it can blocking the coroutine. When a data from `send` to a Channel, if there is no buffer to save, then the current coroutine will be blocked until there is another place `receive` from this Channel. + +Similarly, `receive` will also block the current coroutine until there is data `send` to the Channel. + +![channel2.png](/docs/images/channel2.png) + +# Api的设计 + +The basic design of the coroutine mentioned above is based on the implementation of c, then how is our upper API designed? + +- ObjC Classes + +We implement ObjC Classes `COCoroutine` and `COChan` for invocation by the upper interface. + +- promises + +Simplified the implementation of `COPromise` based on [promises](https://github.com/google/promises). + +- co_launch/await/yield/co_delay + +`co_launch` is the entry from the thread into the coroutine, is the encapsulation of `COCoroutine`, + +The `await/yield` primitive is implemented based on `Channel`, which uses `Channel` to block the characteristics of the coroutine. + +`co_delay` is a implementation of delay, it is implemented using `dispatch`. + +# Cancellation + +The cancellation of the coobjc's coroutine is required in the **collaboration**, similar to the cancellation of NSOperation. + +Because of the forced interrupt a code execution, memory leaks may occur, such as: + +``` +id obj = ... // Create a object + +await(...) // await, If we stop here, the cleanup phase will not execute. Cause leak. + +obj = nil; // cleanup +``` + +Another way to cancel a coroutine is to throw an exception, but exceptions in Objective-C can also lead to leaks: https://stackoverflow.com/questions/ 27140891/why-does-try-catch-in-objective-c-cause-memory-leak , so the coroutines in coobjc we need to use the collaboration to complete the cancellation. But in swift we can implement Cancel by throwing Swift.Error + +The principle of collaboration cancellation in coobjc is that when canceling a coroutine, system just mark it as `isCancelled`. If you want to design a cancelable coroutine, you need to judge in the code whether the current coroutine has been canceled to exit the code logic. + +``` +// in objc +COCoroutine *co = co_launch(^{ + ... + await(...) + + // Check the current coroutine is cancelled. + if (co_isCancelled()) { + return; + } + ... +}) +[co cancel]; + +// in swift +let co = co_launch { + ... + await(...) + ... +} +co.cancel() + +``` + +# Swift + +The bottom layer of **coswift** shares a set of code, but a separate set of Swift interfaces is designed on the top layer. Take advantage of Swift's generic and Error features to have a better experience than **coobjc**. + +- Use generics to specify the type of Channel and Promise transport. +- Cancellation does not require collaboration and can be cancelled directly. +- Using tuples diff --git a/docs/arch_design_zh.md b/docs/arch_design_zh.md new file mode 100644 index 0000000..7b575c7 --- /dev/null +++ b/docs/arch_design_zh.md @@ -0,0 +1,146 @@ +# coobjc + +![framework_arch.png](images/framework_arch.png) + +* 底层是协程内核,包括堆栈切换管理,协程调度程序的实现,协程之间通信通道的实现等。 +* 中间层是基于协同程序的运算符的包装器。 目前,它支持编程模型,如async / await,generator和Actor。 +* 顶层是系统库的协程扩展,目前涵盖了Foundation和UIKit的所有IO和耗时的方法。 + +coobjc 的架构设计分为以下几块: + +- Context切换 +- Coroutine的设计 +- Scheduler调度器 +- Channel设计 +- Api设计 +- Cancellation设计 +- Swift设计 + +# Context 切换 + +因为iOS上ucontext是不能使用的,所以我们自己用汇编写了自己的 Context切换。主要包含2个操作 `getcontext` 和 `setcontext`, 分别对 arm64/armv7/x86_64/i386 四个架构做了实现。 + +下图简单描述了协程如何通过 `getcontext` 和 `setcontext` 实现了 `yield` 和 `resume`的操作。 + +![context.png](/docs/images/context.png) + +# Coroutine的设计 + +- 可暂停恢复 + +通过 Context切换实现协程的暂停和恢复操作,对应 `yield` 和 `resume` 操作。 + +- 自建调用栈 + +自建调用栈,通过单独申请一片内存作为协程执行的栈内存,然后通过`coroutine_makecontext` 构造成协程单独的调用栈内容,再通过 `setcontext` 进入协程。 + +- 四种状态 + +Coroutine 有四种状态,READY/RUNNING/SUSPEND/DEAD, 其中RUNNING和 SUSPEND状态可能多次切换。 + +当进入 DEAD状态,我们会自动释放 Coroutine。 + +- 可设置userdata + +``` +void *userdata; // Userdata. +coroutine_func userdata_dispose; // Userdata's dispose action. +``` + +允许上层传入一个`userdata`,可以用来记录一些额外的信息。在上层Api中就是把 Coroutine的 ObjC 对象传到这里存储,实现了对象生命周期的一致性。 + +# Scheduler调度器 + +有了协程,但是协程怎么才能够在我们iOS应用里面用起来呢?怎么和现有的代码进行交互呢? 协程具体是在哪个线程调度呢? 于是我们设计了协程调度器 `Scheduler`. + +`Scheduler`负责调度所有的用户协程, 它内部管理一个协程队列, 然后不断循环从队列里面拿出协程进行执行, 当队列中没有协程的时候, 就切回线程执行。 + +基于这个设计,所以当我们要执行一个协程的时候, 只把协程加入线程的`Scheduler`的队列中, 然后是 `Scheduler` 负责执行它。 + +`Scheduler`本身也是一个协程。 + +scheduler调度逻辑如下: + +![scheduler.png](/docs/images/scheduler.png) + +# Channel 的设计 + +Channel 是 CSP(Communicating Sequential Processes) 并发模型中的 Process/Channel 的实现。 coobjc中的 Channel实现完全参考了 [libtask](https://swtch.com/libtask/) 的实现。 + +Channel 是协程之间传递数据的通道,中文一般我们叫管道。 Channel的特性是它可以阻塞式发送或接收数据(协程中的阻塞都不是真阻塞,只是yield让出cpu了)。 + +Channel分为**无buffer**、**有buffer**、**无限buffer**(可自动扩容的有buffer) 模式,下图描述了有无buffer的区别: + +![channel1.png](/docs/images/channel1.png) + +Channel的主要特性就是可以block协程, 当从一个协程往一个Channel `send`一个数据时, 如果没有buffer可以存, 那么就会 block 住当前协程,直到另外有地方从这个 Channel中 `receive` 数据。 同理 `receive` 也会 block 当前协程,直到有数据 `send` 到协程。 + +![channel2.png](/docs/images/channel2.png) + +# Api的设计 + +前面讲到的关于协程的基础设计都是基于c的实现,那么我们的上层Api是如何设计的呢? + +- oc类的封装 + + 我们封装了 ObjC 的 `COCoroutine` 和 `COChan` 类,用于上层接口来调用。 + + - promises + + 基于[promises](https://github.com/google/promises) 简化了一个 `COPromise`的实现。 + + - co_launch/await/yield/co_delay 原语 + + `co_launch` 是从线程进入协程的入口,是对`COCoroutine`的封装, + +`await/yield` 原语是基于 `Channel` 实现的, 利用了 `Channel` 可以阻塞协程的特性。 + + `co_delay` 是个delay的实现,底层是使用`dispatch`实现。 + +# Cancellation设计 + +协程的取消在 coobjc 中必需**协作完成**,类似NSOperation的取消。因为强行中断代码的执行,可能会造成内存泄露,如下: + +``` +id obj = ... // Create a object + +await(...) // await, If we stop here, the cleanup phase will not execute. Cause leak. + +obj = nil; // cleanup +``` + +协程取消的另一种方式是抛异常,使调用栈回到顶层方法中,看起来是可以安全退出,但是Objective-C中的异常也会导致泄露:https://stackoverflow.com/questions/27140891/why-does-try-catch-in-objective-c-cause-memory-leak , 因此 coobjc 中的协程我们需要使用方协作完成取消。但是swift中我们就可以通过抛Swift.Error来实现Cancel. + +coobjc中协作取消的原理就是,在取消一个协程的时候,我们只是标记它为 `isCancelled`。 如果要设计一个可取消的协程,就需要在代码中判断当前协程是否已取消来退出代码逻辑。 + +``` +// in objc +COCoroutine *co = co_launch(^{ + ... + await(...) + + // Check the current coroutine is cancelled. + if (co_isCancelled()) { + return; + } + ... +}) +[co cancel]; + +// in swift +let co = co_launch { + ... + await(...) + ... +} +co.cancel() + +``` + +# Swift 的设计 + +coswift 的底层共用了一套代码,但是在上层单独设计了一套Swift的接口。利用Swift的泛型和Error的特性,拥有相对于coobjc更佳的使用体验。 + +- 使用泛型指定Channel和Promise传输的类型。 +- Cancellation 不需要协作,直接取消。 +- 使用元组 \ No newline at end of file diff --git a/docs/images/actor_diff.png b/docs/images/actor_diff.png new file mode 100644 index 0000000000000000000000000000000000000000..25874c444c8c1ee0ff29945d9ed4af15e2711201 GIT binary patch literal 497907 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

YoGaYz1AXJS$@&Gtb6MQu%GW+i;(> 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�XXbK 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 literal 0 HcmV?d00001 diff --git a/docs/images/actor_theory.png b/docs/images/actor_theory.png new file mode 100644 index 0000000000000000000000000000000000000000..92471561a9d62f54be2aee1ce699948f97c1e651 GIT binary patch literal 149291 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

5(HL9*i5G<jdCchK#I&qj5$F;J@-lp72RA6^Q zL)GoCz5H3du5|(l-3>k##7^({VoJo?-5LuIs$K_s=!zadZVDoB-Tu5NW1An!^&<(- zr*tHTnR3eV$zcNi9a3zvkM70ZKD3Cj-v zYL9q-l4B{j)DKnF@vCkQXW|1UUk@lUNq$hZ$-j6r|6*+0HIDdZDUPS&>@btW{z?s| z=8hP;6xAeV-=QB{KiLf7rllUtr}Iap#o%<&1lJ}I5s^W3G*oZD|23Y$!R#opTRD2G*0{4cZ!D>W0$KVrTVB?r;+_c<_a(FKNAxwf3>4S z6i{@bCqs9Q%X&1yYHQxo#W#%B=A8R!rk_8CQvJb_hwSLH)oNMZ zLEE7t1=fR=1~${*SHF@PqhMuyEwi|0`SQ%s%A5iFBrN(f`v9a4;*)XWP`qj!0ITO8 zaD#I%k_1%O_^q}&RE~Ug{JEN2IUQ@qiz@rRL@(Vl$)&E6kC{Uy_!ZYvuW~(XV>`zN zWKYU%$cd;^dOm<};zxHsWh5-EZ+7 zJ-&ntw|=XxQ_OhI_cnHtZ`^aaMt(%pp;-8X`>KL?{E3nMo&g)FMX|QQNc-Y~re~Ee zJ6C2+!Uxgd7n`IP69sNRpv`l=`@RDu1I@*~Fab5rF8#ScE1%6d5?+;rZyf4UW7)Jc za&5)|l69PDrQX#ViR$gMeihW{9i5k zzsw9G0ocv*wc^rSC#=rj>D2e{p7>~5IL`iuM~2)~;E32^_3x#fn2Emwmpf+1+~Tk9 zp%ZKI_p=T)@XXB5WJKV^>;3JAO-;cm=-MxT{2!i`12Mcd(-ebG?1`=OuNMkSJ+_kN z^=>c!!!r>;MI}ecL|MH)oh1fBLi=Ms`d-}Pl;rG~g8T0){&yAs|BX6xbZ+=bAmUPa Rq%0Bm=x7>f6sz40{~tfQ!%zSK literal 0 HcmV?d00001 diff --git a/docs/images/channel1.png b/docs/images/channel1.png new file mode 100644 index 0000000000000000000000000000000000000000..aae80970fdbc18f991a78baf0d846c7384274fdd GIT binary patch literal 36743 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 UvlTX8&}9GuPgg&ebxsLQ04K(lfB*mh literal 0 HcmV?d00001 diff --git a/docs/images/channel2.png b/docs/images/channel2.png new file mode 100644 index 0000000000000000000000000000000000000000..6957e93967cdc601dc326e0af37b651d964f9980 GIT binary patch literal 36673 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

(k`dcIE;5}YuTU~tiB<_e!we+~3*j_dgU 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

KX_Yvu$pQXd2C3JUp5J@l(+0>(T4< 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 WoKKJNH-{c(00K`}KbLh*2~7Y@Lpv`3 literal 0 HcmV?d00001 diff --git a/docs/images/context.png b/docs/images/context.png new file mode 100644 index 0000000000000000000000000000000000000000..7f2c8f5b5adffef79e40fb6adaff6d0854de4119 GIT binary patch literal 46991 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 literal 0 HcmV?d00001 diff --git a/docs/images/counter_actor.png b/docs/images/counter_actor.png new file mode 100644 index 0000000000000000000000000000000000000000..fbdc2d55fdc162c9ae01f2faca01267e4e497e6c GIT binary patch literal 148859 zcmZsBV{~Rgv}J7Dwr%GNJM1JKn;qM>)p0tuZS#xOv2EL#%*>lv@4cCSweDSYs_Im& zs=fEw5lRYDh;VptARr)!GSYybARrJ}ARwTgFi_uLsu zn@umpldq4de=6A~qvYVSvmZj*b6#%QURP~L*=6{NLj7QFj^e$D0V-etNKugF@9)>5 zl2itD+j;Lg0_v&|#9g0B^Is~ZgGP0|OH0_}DU6~3cN`>Q-oOxeW>IzZCB?kAOQCks z?NEPwFk6_`|J)D}CN(%V_jPmShFC{A1_k2-k=NB--cUkr7z#{m=5oJ}|MGjlOoy@S zc|Zyj4@}7N0WoWM@pCD?bZGm}asDInbwil{R8`$|gFd(|$X_FvhbwTa(#D0^Rxx+JS=6Qkqw@m)m+`hY`*t28# z3M_YMyZ(Px_kZJVQzL_N8}CpHhg^dGmyP+a;aW+r_e6UyI&XkMT^*+XJynGy23(nx zjm$n!UheLHRduOA>7NJ?(TwWYMA->R+aU)49LO!!kPXYBOoFMg!TES9Aa^BbAO>s zwy!!C^2ovQoe!z5Ej;lUD}*oi8w9C zb9aB|nOL2gQgC)j-#I!W|G1g)$}MYyt*WvSyc|V0Vz6&O_g_D!+Y6jP2vn&N{+vLq zyB?=l>m9#9uDNAH;9n?Me_QEhRDt8hJMW`ZFLjbXZ6iPD8H? zp!6?Kc#ydd*g#2d#qfC#PS9n3R%;maeGl;{EIi?)auR2GoeaqACIKuUaKPZ)` zScF-leZr#p;#oA^RCw)oy+*KPbT|w)imLijZb897SNB^jNjSKec+k$p1*Mx-6O1zW z4TIt6^d{QPO{a&G!;5KZZc!0tobV0CV$~bg=H_M>reM((KYvGjwh-VIH3tRSPgqzJ zpV+S+U@vfmRei13V~3kXXqNUah>CR-mCHj6K)S}H(AQm!Oayl+WwM64Ls{XYB7z$H zGQ1IjiM*FEsb`iG&9y{;~3xiTdAFhl1XLR{0AYOxj&7_tjxVV^V|M2j`0GcCW>haN4R7kR5mJ;psDR&)m z9fb!GWqW02#THAUrKBZ{rCU*){gQ42g~tV@R>OV>Gj->$)1h=$6t-XZ>Z+%^=cB@E z!bnV9oVc`f_+MBL50CzMdkF?U*NkUD4hldToOoDqL2)rwCYR00EJhHvV-^t%@phO2 zJ>oH;frzm@zbrCmE<*|Eq|1fEZ;@ujRW_1|@NF96V8m+)>A$d9HfE~WoCOwsg5^<} zxdriSuuftYBMR(bTq~`p*dNroTSmT9Hs%)6p#{j!{ z$AD5gOEE8%BV;jg$9LTLK@T5VUIn zTMa5v=%rgw4j6(jozH$YRoCj!FJR+jlk{n+G za5QwAe#-^#-0p57zt6j_mh4)9cpRAZtK4ANJIj`<>lo>4rgTq z-0Ap+hI!9x;7?@a#-+Lo2??lT;}ymYUcWzP-%bi>C4y5p*dWYxk|PIE`&isPESPBd zIF_1suAh=MZr(*XRGU_G|9a%Qzu~bw+)_jfP$PAd?svz(i2Mpd(k0ZT5uEc!ydoIb z|q<#{Ae9hmZ=qc^5Vt z;hD(7V(@WhZf2sj*BoA)k?}QLlk{Vb&c>$Cf#yzv7cb;SjQL}|sQXTh0BXBFTOdVd zb&fMXzi2p`IQ=>#NL7z7BmjQZ^%g3U*Vss)uIobR7)yAD*_Oqy9G(`6C=V=@L7$ml z4^$M^C0k$WMysM;>+a~p2m1&BxnXC952BU;@idqoL*rPuue@B!dEM~%K7$J=B)-J_ zt_ZfBJA7rH8|@Fz*8_2{gzf%cgKE+ z7K7bqKOx;(sTkJ#~=6MBWCh7>WMyfnL?(8+z}f9)TAU-Na#~#wrE@ z7xFdW*3u4NC&fcFp_}LuBqTQ*h6%K`<1DDElSgT283ifm0d+VLO>;X^a&C0p-5!Q> zS8@`aLWDP4=YiQ{lEW|yZTlCU5{k5=_d`<{9E~l=VW%tod3S4tr?G7PQ>h-TtKwf^ zny4>K%u_=Bx%TR_y&=QjU5}Grgs7E%;n>A`$#knk@@g0TSzo-YSgjgsYh}M6cl;k4 zSvo+k&7b`T*Kq$8?-XZNOa0cw{Z*+Ev8p8jp3A&Va^pUXt74;Bw#h}|!-7O8=73?M*mf#7j$@tBHk}@#uIHnx z>gvTFv8|bnLL3KqltVrAbg>p!lUn2aTUPWH$h{nX_bEUC-XI1VrEuJtGOS>TgX1H( zb8!|hh)N0*@z4kTbSZW@MTbu)#lKZ|L~Sq}^ZOe19_-Aj+6LPOva1BCJ0Ke-n#J(e zRK`Ge{F7NbSySe#wP(7O4^o9mF|=fs#C2e@kaVqM+mxgC*j(g1o&=T8=d)A~)s{CQ zRs{z$<(L|;fsjylZaDX5XSww`4Q}|~tqfaQ>RB`{>j==L0Y;Z$e8A0^S_#dQ;+QD7?$hsu6$*FA~)d08@V zC*NS;C1^(3`j6AGLYKJzgnxTG-@4;C;WZZ>0>tieI{Q@rMavdlw7P_T&r^F^(8S8q z<{QY}v>t;Nrx)y>Lhe7O zn~Eft7fkSS0oiHpGH8MMJ`lLXD>@NXIas*@EwI^Cf}z={A*@G3@N!|+sXbYxAN{1CCT*Aksu zW?~xzA{cLWb`$d0C0q_k#3Y}1>^2j^!RoH#-S&aH?`bYroL^zw!O!xR_i^$!t~qj* z&02ZAk3-5zF-m@?^D#Iv+$Ksgiff#nqt3ijVjS#Se7u32@R^*mv#Y^EIj4oS_309o z1HkdaQ0}j^X39wwqPoZYW8=YsIYiN88~Y4fO|$J3;&|!w0$cT|p-={~++P-jNjd}( zOW{h5I$4ygiuz`-Mdr#MnV$3|kIIuk%Au=MrzWO{uGh7dqlm_;Dyg+lEo|Wzoi_#T zL%-d(h;5pS-nS_8MpMPd4%fCU5TT!`6&M#%9v7a^R|C^s&rE!pX${_fN9#8NytAB3 zD!f3hd53n->h6}SF!;xb*Pl__czL*W;+@rb8@X@p>~hh=xN3X<5KrO1mhqM$3+XTgGV!9 z!JFBf3$Yo8tFu#s#iLt8!8?kYJsL8;-nUN!6L1(-qvdHX&wu4(Kk5e+5GHRusNd; zYIEx!=w~q=)-0_q11$nJb}ePAcd6CP30Zc3CaH~EoE;q1J3W*w7Ij~hF+h5>c>v{Oe)sI(XJn|c>Zr!JyH}) z9d1_=y1G6!mZ=n4&r(38{oR{C_-UCb5UAXIZ6VcYcV!2vO!#kNZ>+MSIxG2(#tnMS zlaGHXyUm4w0_T64t72mn9FE0GnC{D0S0uK;2`#Lw+*XCo4%U@jRFerDK5lu>4%nyY z)Zx}#0lw$-34NsruhL#abn+P~&w1 z5qh3$h}Tb2x;|Yj&Ci#9l(b%J3Yilt?gz9yBi!#Xib)tx1J_F*At1x)O# zYZLW{jn89hg4DNvog{yg+~9LAK$y?TusG;=rS4)ZM{G2%V%^mR&2!D*Cw0TyUb4_1 z=<=MH^6OAzMS=S^@0wk>Lt;TBiaR25!>^VlUVvR%ud%WbpY3`(TzPq*3*$owx3oCt zH|42ZH;dm%@ZmjB&464NK-rFp`;9ttY3SIT& zF%RzY%)TXL&LXrK^x|`mZ}wL($b;;F<1V_|I0|~8@xU-Eu0*sMSiGt~Y-d<}d|*>J zyr|DUswUuf5;*6Eq^h2>qEvk9uGlc(eaxBD6#NoMYk6v3xE;JQ&t{cRd+?Urf*Xt( zOz)!H?FWs3O=I^;G4VOOcnSt7URkZwY`C5U=8O$V3~f!Fk|PPdov+-M=jVgvFlnCt zw8=Pvnv5=W7;_QzgCpK-f%oXBz^qawR7%(i-xWt}y}u$y%|4GCoKPA>fCF4s*t51ghVjSA&q^b|MZzN|Er)>sVPAFG|n@#wJUieK?oM=m>a(ep&l=%;l(5If5I`@*>$Y)+exPB@2 zuzuyt$Hk=X^Zu2W{c^zN^oB~*_$RN{u}{b)@?hTsW-LiOYl9$jL72-VimREkOIp!Y za6$#3)yZ22dff_4TOw>xp?}avV67)$xt;*2zDLn}_Pxfpm-qzgfZ~z;B>`8_d}cE>)u~VgD9_E7O3! z;&DC&-o87TJ`TQW#B!u_kKAEbxs*0$u3`ZP`JVs25d6uA zbLKy>wsf!kfI`=Gl<9IO1cR+rQDVWtTOTGM?h zJ2*USFt#t_{&Jw+_XbdGZENv-d&}NCK0PJQTECNDT?HrdmANl7m?@}hM_fzAg5gfh z)R9-6yNoczLOMp!8d|}CS#eS$-L@qM~)VF^sks9vmn&LaXPUOVp8qJ?@2>aID$fj+iMlfnEh!K8T2e8#$S? zPd~EUZr)n@dyCruK(ngNxZKqVb2A_o&%uXrgDZN?hI@WnvG-FrV*Z%LVsKr90s$Ed zI-X-7mrw6A8}IzN9_FQ^98#vt^jSt8K0`Zxg!2V|P_D463Emic*mygbMWZq^1A;1@ zqTT&0u6zi!5P4T<@U|0h>foqT;&fy= z0lCvLt-AM>Aeaa)!?~i-e9C?g3RJZu-5})8W^Gk}wdd8>*=gqWd%9g^Zfx-q6jCm3 z?iJm|Hsy#)caH@!-o?JH{rPNuJEplgC^9-axQh!L9#0NvecvXq@f07*L^NPbwRI?y z2?Bm(2=?E&ypt1YSy_lTB~{g6MEq`GB4y6ra^1RZs#oaGwuh80gSq{PO~-LNk+Rw1EAG9~l59+qQK5#cp3etc+^>I%!qnjpx8uxx$Fl|7S65My zk#y&)UC?&jH(ZbBlUQUK+mr;myGBJeY@iHS>~nK-5V!M>?$0}Zx$^y;*QnUdkTspR zd|cM=-T2DD0Tyw6OZ$ms))SZA0Zc zl8$d$AKBkew$>*GAV5V8(6;@=JYElhFmZHDitmc#murqZyw`|Dg=J5rE7D&*N!Qbcx(QG~5&(hLyc)YNP7r?li3 zCa3Y&sw2U3GXbJnm8*O4^v4+~d7mU16E8i&iMb>R8!d>?w~}XdE}|w1U*E$xkasmU zyI|`o+l$J5Hz&g02}&M>n!OEfC(O*cK)X#_h;rVMI~SB#j|c%JaGa&aaNKH%|RDu9+WO z0A2g|8p&etg&r10;`FOAEf50uD(hGNL(ASEi|we%bkf!M@P*UFlA>5QJ$UY~WTg)y zG&oxj>*+dAF!ihK=IWdo!N#wUN#cVj)#ZfiUq{yaysXlAn4#ei#Hd=T2b_jyb7C08 z<-q97Ilz$5WQ9}$utBW`d@bAE0gbI#iuULrN-EfOW>IlDI-Qu>1Fqq$?pERetvm$x zD9tofF>ZL9HenZrg=Q`|C6sIbqFilpJ=8Hi-9)`bkJ@q#6m@gtvsi9|rs?Vcjqo6- zp;{3$!~CNIXm1fj22iF3bnPPu(&GhDOOgnzAcK-_?s{kJnRJD5tJ$k8Ul(bm3IT*pu&IAU)-XHLBrapC9nBs>0^x%ZA&DK2BqF0!Mj$|fa0P!hzFvi>_ZpiP-j@K z?Hm~Q=0>18wp9u&27hOH^lv!=dsk{0%xL!)3HERFeiR&AG-4fmZ2ZFLcH8ickHAhA z1LxAl9xpXkvOnMnTucNvxB)CL9&ozFhw8v##cFOg0rsiLzFwIfm><`uo=L0N^RF8X z?HF&1Nx20@To`i$$Hopz%$K5PU~L@}UEqK*~oZRqLJ_s-)L(uK!LMxerPY<@(3q#JwKk3Ld zi#^?~HUzh~@$jK@p^zga1MlW~D|T+Wp~Bbb);KQF)mA2REY?J(-pIan2PUg^-VcvO zLT|-nq#gN9_h`$7OGUc*W4a~IbW<)Yp>lDXh5D-B4a=!)*SZkQ>qCtR} z+uQ@1lCrRfTw|Pl!$h}Qn>B^LqF7^UIb5Nq&bz6hLD;>6&Axg_$dKpDw@H$V4)bZf zbYd4G1t9gCL}&Z&J2M6y`|g=bSlAmL=i~4nI$m^dc^k+dRZG6VvXZH0kIJMBlH#PL z&&Jn+4RX-|HoL{PR+l1|&2)oB(79#xYA~Qg6BPD>otV|{pLX>7wV^%^I~JIi6%rn{ z1=5zKl0#4*Vx7U{velQf7i#&SJIh?CQWCb{V@ONn9y)1h#@9-DE5Yp+tt4et+Xs6A zkHt*ZudN`P-PzJOsDaC*pfHgvdF8=6y_d@Y(o{m^5O-fJsxX3!lskzGD3?6sstD<5 z5o*kYXrZBz^DD0FGX@Ak54E0#=@q?4Wgr-ZMc2G9!&}ZFL%$+&VpEtCC7;uSnYZ~m_%La zz{SITK%%g8{nvcmqDWvbluCbbk+G}1KBabC4Gmv$1^m_FM5Q$|Gc%YtPPo3kPl{qX z6X;ICuss_=P2VOqc5ARn?vULd|G`W7=F-%}b5_X?kyr6RP4!B~$_o02T7Iy`&xyX- zW{t@Pg~)_PF2}bRCDzi{7Yz&G82fuDa^d)V9mIwLZxJ02&06KpLCAYm%jO^O(7$WE z4dw)_;Oeam^Lbn*?oe z`^|K|*>{4sd2r;=m7mEO|Bk}ppsw3StkdBXs+U+33hc>qE00_zp9IdMF3juy@dDsK zy+42|!3ViiII)}E)4;|Rr0kggmMOEKoq>%thC_sR@SeZgvR<>e$MP};7q4_Ecp#mX zl6P>3DD5aaD@PvsYo?r8*l4>R2q6Jp_9I~~{tK|MJ2*j7s2GJ}Q&%pghY`2O8yf)N z%gQ%pj1C)JQh~A5OLP|9go$|&KW&9EnJ68u2R0~sHuhC_{!@6kAzhwK;oI?PvuU_1NiMxjYw>sIyI=ONAO;58C&QGl&~yTt`nMG+($Og~+-5NQK<$&NSw4x3=%_ zBpGIu^Pg2e=@4A+&+3n{0hB-*TnF2?(Oh%iuupd-m;-muGoj(@6h?{p0iz^G%B0zE z&BLAZaNwb5r6iXMH}VxC@LKE z6NgU_%1U1_@M?29xtkBoeXt32XGdE0SL1B#!67V@^0aUh^OR78@ky8W;>5|V=gVz! zX=UYLJ#$Y#rn(N@ApM1Bi|xi`Wvc-Bj-U}Bl*ex$+>`H!pj~zySyY*7*4~f^E?WAE zhbkxx>7~OG;1ytO<_t}x_y_b8HJT10>3}1jtVV`Iu<;;b+QLY?wFQYv7<@IO-K3^g z-?uOO`tc@7h-ghSru`Oc_UCNM5ndUit>n}q-Sw^P#jhL?X2Zf;wn+f2+ijYXhm=k7 z#g8Z!$7-Z9V{z1EED|crBB?W*H$YWRE~!(HlhAoIjl27wIvZ5){JSTN)r`j9W5+1o zpU=LH-1N@$clN>v8F-{`ImXIOL2{pZI2^pPHe!8VX6(%jv;f#9I~zNUlGFk7L4(5@ zXju7?Zuk$la1a(!c8me@;oUpx$DNtsz0c8BYH%{S{`Y*zkaNZ^q$bKLX}Lzb%~6Ku1kyj_g~7SBAR-UFpxR4mTJl(T-{uW@deGvkx|TxdvJha^F3o!j~UnlHn{n+?`oL zc6#Hec#<1O!GcXCqovdh<|F$shTcw<-av0Sa5|jXvQLdiKr5%u-EK;q+f# z!oB+8-N}|s318oC49Y+LdwB-YZ~7njtVTRctp=dq4=!a=a`MU)!=>`v!k6!J4i1O3 zp-8#U_05f_wOsT}x--i2c>^R}O94-dk;Lx6~7cSIo2O${ZSevmV8L*tOayq#zHrT$tzGk6oLGm5B3?8DEO;_s0 z>L%p9k#6b|ik%%lK^h?oYe-N-7Nu5RuSEob*JE^z`g^C;4ER+?>enn|vOTw@DZzdX zl7AGWLZB-v&==c2`43O3v1jxg9E~Lmg5CVSnT`oDty$p#J07j1w0R}GL1T=ISmcSz zH)^Ple%e&{X`krFt*Hb;d?R_QC`BSuu_U1+zK|G$n}z zD_QMU;{O!2wKUhJj|VW)l;3PCz49Ck_93-j|~ zhP=7jK?Q+W2*GW`r36J-RsZ$%40E~73fo&wDDZwbmXL83)UWGky7lr^KLRVLTx=*Z zT(v2ud5lwE=YSL;jV6M6>CdK%Os~yaH+r`a)kGSvF4NJxn8DW5#WGT)zD$M1anOGD-u){GdB{6B(Y@N7tHEoUNcmyT`Nx<95b(p>;W4D#X?||G*#`P> zBArqT%X$A;ZVYfZ5)8X%Kk%SFu)jy1f!CO`(QX4>>LD_U)fKLy^|-dR9^CO+YGGD; zg%EbP?!-(+!2>`NVN)ND!KV-Z`gjrsn5s3!X!d^oqe`>1l>Lc=x1{$5Kf!NaEkMUu zR6KO#Xdo#iwRg_ju&=b;H-7VemM29?jLO1^MdbUetSJRCb#>J#-}*40k;Z8ix=&BX zB&uwf7tK$~3Tj$(Ap4K{CI?!1xK{ZYDEt}g57HyF1Q-TGE@|2Fy(+XhEY0Gu@P?pb zki`%f4;Og*m6~thM;QH?J;Fn;mDXhZD3JOw%G~2N&7QXbU|d^G=%t>VyDuHY0tY1@DY70fGKh>g{C5j!_`4z@;^fnD zAvSW$p}D<6lyV&PTK~(Wh8}&G^Ml27B3u##S8E`M_4S-5gw)v73|GJ<&0D5k2c|Ss zSAUaEVa#uxiic$XJ_<1UavqWm-lCeS*pF4hleG4NZ~)DGV-=X>d}bRm~gx!1XebuN!PovF1Ot2W@?b~?iY)Uw;8Lng~pxoo)8i^2W;y) z|CsJ%U&ojdP(cY(g#A#g^cKb;JF8^ca-pT(=*||w<}o-4&6!r!KxRV?O<<|?*2@gF z^hbGr8T7UlxPozp%OWl2)#t*#cv;P;qSFV`N?MT^_pv&3MGG?Pkr`eSir1Uh&?a{l z4oIW_gilUj3xDeN;fKc9M=SaExL`8=V$&~^AL>HoWf2iGxqL52Y24q#xQRQ<(jp#Y zv?Mz(lK>Qhg_u`O>hjb!V|TerktmcWkV zyRH8Fu>5L^E2|TOB56XvVXb~P2(l1I=4aPx3@q)7Zz2I5|Gk+nBcM&CpAudP88OEd zV#%>bg-*`1DCOOq@WOf-NWrUp>-uY8+r_)fX%pwsu{T@^RoYRQXhk((_|&y;VKBi2 zC*fw&f`a47)s=b9xeQpdt{zQuJ&s=k97#y$xtl0+KP@}DK2RU8YGjw!;h$NbBYPQv zDa;UHUY&>VJ-ymiRrvQjf@$f>SxpDj%F3GrzgX9LSV-t@x7QU`F&GeV z5m=?&oLAK)Zoy;u!nWHh&#f1?^|dp-VURz!PfkPAxqTw>yIx9uqYaf}xfao^!Jxo?vA$UhCPyEoKQGP{ zbM^C!ROdfc{y_e+4r3`=X>VxgRTK6!WvC@VCEx@J*TAQQNWD7^UvEvvUt5L1ZXg#> zm-p2(;$IsS@3V9|?SzsZk@YYaoGGm%(fDUADz4UXyOGDD49Z*17(>{9P`n>r{&S4% z-!~PmHaZ63%b5v^rRK$AgIPUY+rhNOCC^G z{rGrzK+MM_ogiPWN5$2~g?EOLq^P{$@2T)9c_l_hV>3!~Pg{TO;IH#}L&7Cr``o=V zb^m-R5upOVQ^pTH{aqVjD6Xd-%sE z7g|Jm9|^0ZnwMTa#E=$AhBi903`T$Qv(ISHq<+_dfo1 zqj1pv4ENM~bQdB30wYg5FIwPQqR{i6{7ZHGUT5?Sd7QS;ZTWlXhV!9A$yv#9WXQ!( zxOrfB*D8WnraU8&=JW0Ss?ywNUL15hbEQ`!{GNPN=qx9T!telpL=3V1A#I(YF59)L zi1B~U0TP&Q>z^Ljp=&Rk4$ikT);}fkdb1|ZS`7n?K7rS+8x*nGo({P{_5?Ez0_-J% z0U`b8B{@TX>KNFe)t0zOjARaFi$LViEKJJg<%i^|=k3o8Bjjm^yUv3bfvd;7e2;%u z0S`a@Q$zgi(b=YBF|~4^?FofE4X|aAxTUv7opbk&C7w(pO+4TGA@;4yPKy@1yAD0~ zLd>2kEhIT4b^`bqy6sY7hGkJ;2b#}XJ25Ps8*%vi z_5Cg|MTw&KE2VGcs+Lf9t_~_wO)}Hm5OY{ z4o4&9 zZunEO_!VBLoZd=#ySoYvsv^gKPW*xAsv4n>eO`-cd9rI!(8K-2-r0&$=yQ!|K7|{8 zQl#MmcL{MYsp97j{yw9ERNO@=8hZ96=lut)kFSIN?XJR?Mx4-VJdCHspORDJ*ljnY=!Y<{ z>*+)HSkLVF{m%4x+AljxKgxcKo2f1&6@GDt)$=^zz0qVfo1mFRDgNc3k#kSS z8Jga$+3*X(yl_;8+L57;c^X@`8cjh2`+cah|q z?GBSb*8^|y)M!U#uP%O7!}2aGWMWCVsj8_k9a(x=LR(B{@CoTqfU2^OuW6D)Ai!$M z*3I?DaACHjgeshAB+s4Oi9szGkAeEk`}-F(7&EA zy7junc59}x1yu@XoVkX6;84~iSqlz!Wym5Pa>fAqNZ)U1=zSDYP5AQ3QUD&tcb6Cv*9 z@3Cfz#6>-C%@n^?^QqUdCleBugClH%=}n)&_h%WL+4Vp(oJLIYgwj||N*wkunx4+W=B0IGqmx@IJ)HD~!PCRQ9qCX)OIl6t^F#oJ+hYFWo5E@TKe+T+r zOm4>U`}w6-nqy*hsY!L#yIpnLLL1o~5NzF%Nv@feFR&AC{0bn{$AYmXC9Qb677>@A zU+i+hF!wBm*<^>pHK1+Sm5q{sk&ryhTm869ru7F_5a#>jQ>q-*kMM#0=9p z+LaFN==Yj=h>^O&Zc}@yj6IbDNa{jDRWc3#uehXI7UifCCrQkn8#HO!p1v`ZkHZD> zU8_(n1UbGgq7|#i1Ren;iX#N`;c+l#uI2~QXdTn(wKS+-W_%8JH|CG-0e5o6+(oXP z0_R$q6hfi%&7jDt*xZH}R#FbLKIDMc^myE0WBxe(pS;4A3)U`BBSI?WKSr0rkk7Fg z1=#d3)T;!x_L=PG3{tzHJ)*GS4F7g@BdiHACq~5vemYx}S`V!*#gWmi5Z_bB^N?xG z7ZT!A2L)m$e|rk|*HyMJNhbo{H#ns;0Zy=rI6eZH)DC9wWIw^T4ON4YzO5|SX-Zas z5egi?ujG4>J5jPu2jMXna!(Wk?3bSvsx6Qb%ceXi92_mgaYvH!Q{X49Edn*PtJ7Sw z<@}ai0fEf#;ut4y+;;o9_tIUx@-~^Sj~x1i5L|4OB24nm9E{GvO%9Kl?!bR4q{X8e zN)85!AL#kQl#u3Gyz(%k3l%-6HY^#yx~UInq)1B^SSz;olli*5ygcoVLEU*XHk1w~=Ch?81a)6FXWlH`4p%X=%elOQ$^3I} zmk#Zh?n2TsK|C}oG{l)sLe4-b8k-VWW_d5DXgJKjB4+84`qFoa=>RjVBm28VF@lw! zhIgDI?>db=SoqjS;eQ-c9uU7VW{uu4=+IN7L=BI!+Sx%G#_G+p<`E3$rA<((s5csm z-Q^>nwY#u7Q+T0ZdTCMnXBGiP44mlsHp!qF#6WAMwD%y4Z$4MBtaxGyrUG&>)aUb6 zhmv!yf`y@4P+>zCKcbAl266kA13_h`nW)#V)bMnUgyPL@(jDp1`|&i~Z^wn=tXx44 zXVcdDc!i!o@Pi$pgq3mXwsC)wIXq!|yoUlX2kn4-f`&>Z*5;0zkeJ!;6{J*I&IXfe zZcKnaEQgSpN)gmhFH%JYGK8n1c*%TyV14{a_?krM_1IX)=Ye@Y(Q79JJ|w$fJ1{UY zjM!J{7z)nu`zLzm+veLZeZxqOKi?&e0?F_OF-ytMtuH}F=iJlrNUP(9=~Tn}G-V?+ zxt%{Xad8%eJg$x(uQBc~$x9)=_xFV)BP89`-S4MX>+SrNl zUbFe*MRXaCD8eibf>>Bsa88EHGtQ`%vvL7)s8uO3&B$?rpAg3bLndrv#$B5XhD*$P z&UxP#ad0q9%!mWuw|&udHw62W9L@JJ(=S9q;`u#_Ii#*P%F_hUdLLm5+rnBP1+V)f zO{pO1kg^b0hB=W{s@?f=eZ|O;pTj5I;^tPNa%ejCgC~89FDoofOXZJ$r;a59j)2!A zv^&|wHzYU1z~!BJS0+LDgu*jpdBoBmo&64U$L)d%@NHebux-UolvF6_J>cL)B0F{t3Qyn92y1 z!{bYci>@7xK5AA)jf4clslAuceeFo)>^`p9LNN!f0)VVvzWb~WbNxrBL-DDUd_Q)G z&+_oFfrSUMXfi(~A_$Z?>jdr+Nb|_ZR{atUa~CH&E5rT*1N+Gg830mJ5m^FvS*ML| zTSB6hNeUGa0K@DB*I4OnGh~9JGHHN6ICQa*QihRwi{%4eCZ4W>LTqUjYQT(SOkTh2 zkMR)Yf@XQLKNDERA8*JoJJRSdoT#puE!IQ%Q8h}$D}9TPwK@7QVfz$AW@&?`i&c-V zUX`&neoq@_hA8$ivw0?V_T+|g`_iozOL4Nf4-J_c^$o;LoK5|m$B*@?&$I43g6kxk&nMBpn0Hene+=%%|Y=81G}Ykl{`2FL1K))#-MtK zWw+y{tn*L>UH4`En3XwH_Rc7yLNm=<+|sl51zXs%y`3>oq!2PJbcpm`A?|@bq;*o9 z>U?{1yHZoEMT0rQi8jCqAxtO5)*Cj%I@uME*<&bfyZ)+Qa<`>wbJ(pny8yEGuC{-l z1Z27Md&PNx8NZybBS%dS-WK`b(NL@LW_0E{>x^t+Z-dj7GA2jJt% zmZPH`j6cmOlc7+@$j69HP!I+vu&U&XrE1%

tG=Tg9r`Wjoi&op{A_>??-SFJcNgGwYS6#-E%Zdz5c9uVq>*r6i8B*F7EkZJ z(AemDq<*Cba>-mP|2N9upJTyjCBib2bk&uxb{o+~2b{?RR!aM{)-=c zB~yfp(2v*H>W*yewI`@qOVDPVJSQa3LH?@#h$iINrc7*{Xf>be-AKSg>7&ZQ2de~3 zr77!WTmeHCvY#129kXK+75WV*gYm_uBY@DgA*WjZQXclch@!WL8UA&b`~k8za5B{` z%v+|e2)8f7(YRV&f-iOk9XI)qH0&P?BvG#<{3li3_HKXc7Q;>4(QW3lqk8NaxWb{i z*?-aW7Lq*u+4Xj$@jS;JhBeG(WwsL|dy4T?{TIhr$b@AzO36o9?H%!Zd*4zP;Sc8~ zK`*AsP_as5k}blgw=Wgx_oz07-mD6Y7i}Q@xy$%lOo`!7LzG{8KxWI1&2?t-fHAe8 z_2-*|vkg>8`r0RxODCNffI?N9#CiV2J%gTJG>~)p<9YT>A0+%G@2`Q*$scNJ`s)bksgFO}a}Tm{cg1YX>p3~PG?x$9W$C4+Ak|VLTRm>8 zE(DH#aapbie$}BZN~DLboJ2*CU^-tsTY7<|9MA>45!8?cYCH3tEg-2Pfv!<`W-H`= z8`eq`iZ|#zZ9oWuj0}F4y%=X6xsiM^nZ`nrOZQlFQNXIt(p}w-Hc@82*D@kdxJdCv znUJfB=uwG^^v&~mutCPCI$#{Q^EURMW@@YQZ4*&R@dRoVcVJLCWeg9{jS5IjSC!8Er?o%o1v=w99_}0DlW>ljhsVD6=U*gQ zduST(%l$z;Oi)l0{H}*^V#5EMQ|bpJAM;2^zQkWI(Q}jZ0EOp%vZlmSpM0I?ysff{ zJax-NiIiypn!bXC88^K0NLVXZCwHrIjRlxXaYBau4yfHo8=V+6I+w^nKAcqE`9yTu zDoJOctfmxUr}?aG%J_h{5gqpjQ1r7tY|r07zv;x!7wecX4f{M-Wown=E5sBRLs5yk z9*TB63%Ef$9t+f}Q1wP8{$h(eBkt-aj|7jRwZ;%;qjDR+4f+tMy}=l{+HdADs<*74 zbb&(k`wy13W_M6*M6rf-ZW*CZgJ$jaW`~?lpsbPxazYtRo@Pyj8zY_1*=w;LOpcqqmETXc(z@Q)ZeSM#1 zjK1NHXPmH*MTt#(E|Dm334BLpCxXWF?kN`iVhb7hZ9l|!5_Q_bVy^wSMRV91^JzpI zu?VmDffqe2>Ay0GRCU5iBel@G^0MBj<1^|M($) z^~~kXSMXXBW_<983iv%NY_6C@m+NJbxpQu8@ z8j!b6xKm#<#9xwSYyC{$Uus1!;5q+TCSUg6iCPrzm~%f<=pbh`)XqGSDH<hPY)LcJm1_+N9e(9LLV|-S* z^!&J;f-UkyyTzaKC1P*eG+oaQROsDEdC3N297%jN`)7oZP$*Bu@CUKld$(xX2eN?+ zA;VZhxl0_`2iX9f&E6-G@8^3eP|kPnv=O+QkjOnI5`K)$d27HDMy_LXKAk*^WGt`H zZGAfKcpb-F;fV*X?Uxwh^uRPS+u;>+7b2cFNOcNaUXK}c`wHl9zRZO`BeS3gjs{dk z{NWJw2!ZPspJ-);R5aPLBh3ZsR;V}H1~sZfkmN@Tl_hnqath}JFw&7K&`?>^CLWym zBwgk~#;B=zw0Y$~4hWs3q6r?BtZK>Y8@@)d2K8h9wo(=SfgAI%^dvRE+9O+WipLSh zB)`3#TocLC_QhyN9g7jAuGF-3L&^(zAq6u>Jwx0Er9J8tMAc4o$2=kZt4|JXudyHT zCq*N*qO8+x)leRDH-De^1F+HT9+R;vJ;NXnD}t=AUT9kRT;Uf+G%aT?k)ufJ1DcGZ z4|hSM`nOK%h8;W{tgb`7~&|I@t`*dC-Bha*c3F#78vbM_7#v|r?-TxTMXYd z>+UUE#T5d7{uFTbx^7O_84r`H!K8xusY)A1ax44ksN-x}$?a%0uJ<_P-&L2^+;7>h zKK=@)KCo5>@f7Xs->IbeGA~mk0Zo)DPZtt}dplQMv1=(;+FCQ4%5K|whC`K844u_g z(A&An=4E3+;F+;+EDt){`%Jw8-q$C8pyl~e+8DY8aM{Su-IO$BW7}TV1(%Sv?_nj# z$>{>ekNyn&(b?o}=y#i%DPfwD3Pl`}bi^Vj&-1I3b+MEA13Db;Efd=2pxUp|8<+)0 zbAHf8w?xS_3^sF*G71by>)X`kA|50s9YM+BV;9AbD6;H35lah|K7r}_UvVmQIvdi! z$hPBoIdcg?2bKW|2lS$Ph{fFjy3Gnp5oX=Txr=Cv^Re6+zrcVqOq zdtK%9lB05p3J6Gls(VoJL4##@t{`Q`4I3VJ{%Md#CyO_?mhE1SsLTsDoO_FZ9Kc+? z-y#WGi!AUoTsG`0mbjjpEV95U|Bk}lC9G8SZ32(6b8K^GXa%}==W{(?&ajXGG)Zt3 zKVSd13wWo-WRU`H=zoNM~VzMJmmBoX+b?kp+gNx<7kL zRQsP>A_juvpO&F04JWwr@A&QbVJAeU;R1y{3aFxuJvfr1DEvF^1Fx;rnSXO?twIy7 zRw5%8{>X7^lylyg>!;jz?-d;vSU}d_*zuN!v2S!lY%)PHw2A3M_Fk z6Adn$N|&da0YF>TL|syp06+KSX~rF^(pOeAiEUqPkS{wY%j^G6xBV#>s5@Gl|%X0`Qy#j%`oZCeYznvPZ6*e@^XG`mQ0LiTW2OYxmOwXyDm*0cNv+wBI@@+&3Z zxZN->nnkTlT>3AdN#Fu@p@$G&r6`rPtAzj0giEKMt~{L1X=&eK3m?f0>e#HCe2Y`6)bG0SC&bqK!5N zarwDG(!*2H(wFm9&x)?on5%QOOOX+Q^RM74BaaD>n>y!#$iJ{wI&r<|-+PM7A&Hm= z_9bkp177amKO%+hyVT#9YILXCHb40zGB&0(OBBj8GExJ8>an3`rR{WRr;X>Na>Sf3 zp-_%kn1kuo-Q(~O6qF>=>~j!+#%Ix1Ri(O_cz(FfSLKC_(%2HH!wM@ILsB|68(rx) zc7{kQADB+13s2u3bQ@Hrx335ruqWxF5+jS&KKJ7ck1{}z6p8uL*~_#>J`VX((kAfc zDf^@qK+5oO=j#Ghmm#W-{cOXd>ekEIiRkV~s%NU4Ia)=?B~}mAWBf?(#`HMLP%kvI zPs(u1l=z{@Kc30=%TN>*31AgXrD8icnG1ih3K?-f^EJ;071KGE$;lX$3?3@pTL8aR zam;J53-3VC{_dNG28*eZWI`ApbRLhN)ZBTWNe_K_H6N;5Bb0Y6k|jpgZl2VzR2;XY znvv9i2j*6qPx~^i6i-keh0EL+^rWCH-lvd?M){GgSClf@jHeh=9)5OH@JYX!G}lIU zWBoZLI@3-{GFEt>Epun;pmW2yvtIyQWPD5>xfrw8|6|teu=(kmX>qM$RUBqtxECzB z3ESZK!#VG)^N@N=0nnQ<-WP`n zQAD9+GN@fH{j7c8q}s*U74xoSnt6PTpIdLML-~?>9Kgb(xUFVK(fSWPRviNEx!_UB z2?<^4^MFff+&+C$Y%X_U?T#DUA27%>iKbq(EWH@T+NL2!CN)~w6705WR$qitbtJRl z)DUc_`dGWFMb5aq`B*HR=9B07w3sHMa}a4zU6*JF&h1*a{?!S<;%F*oaj0*kC!{WD%u&2! zw@@i-fKRE$OldX(+$B7m_d8#fuwMIQ)F0_&JUVxVXmbD{R+{Xo)7@I;-uo-*3m+;D;wwyd|ndWRVm{B5%s zI@7b*=izQiOqSD!Y1)SO69O19ija-zr<%TX!nK?E@p6yC1RbRyhw4t&m5-OyKHN|X z-7JHd#~3Cb*&hcVeA8caWGki_Iu|~t7u=@H|1f(1Sxm&@?Nz6*@<>!}{R?F3qR#cr zyc0U-uHz(hqF3dDa6MPH{)>k8`yanA6OnwC{QTG_#0p=5^zTTG(gb~=$A%;Bwk@)s zP~R;%dhKJImUA^AEe4!Wo|V>lB`6!MkzYyvcV@iR)Ww@bf|RhXGaxz|GGT4g_5^U& zd~T%6(FK39g_$*wZl1-ZHYw}}Xys3YEQc&T4=dzF<-w3NwxPJ4y}@%>QJ%Pb9s^aF zo>oCr|E_5KmsZMVk#%nAH`DvPFsISeDeA&ROwx!9;9X;$IPA;mGzS%a8Bz*I?6Nfb z!lF_uXHoeted5P3XpeuM-yU^9Q%*dd0PZbu`NwI7nz>Qk7fLUy-yj*%{Uz^l zvZ;tf!9&0~+w6Wkk)F7^UV*sXRkuXt-lc_rjhMpy5X;jq8hGkmo@5X|_xHUHp0sq> z_pbSy$)*YHTpEIempZ3Jp2R3f4^vyPcuCytH#PdGs2lgp%uEr;1-V}!JSq#5VeJ0r z(6#J^6Yb&D$)tDVmF7fziBbY6;z4+1;tEKYrbRQK`ux@Z%EGvBUcbHWTh#2slV2#l zO_6FQrNpxuP17D+K9e# zBfe^I3=HNvD)I6`nW$1o(37{kbYIz`+aZZ|byv75pF$-jGlLV7sMPkMl;r6%N zW^&<_ZDt{_EFY**eCn{ zUMFM9jF4602TKKV7>DV{49=>pc#vxZ!+qR#F%#yI zDflyU`BtkX-l)~#9!u3al4d8(nd;ZG-;duboBTyPRm=o5H%8g3@ov{HO>Z<<+a&x6 zbTVxk2C{XIfB=b?mfhYexASrfP}TRnyeWy7FL(cSWK@xtB)e*^DjgFW(zs7T67mzv zvJeK61R!OkE3dfT0IWNH_oYW%o>ijSi`>}gmp_oUJ(eje_G00k9z9t9m;c)*j0;72 z@Z9B$ePMPN&7^SJbxBO+qn&fJ3!wu(gMB0?U514UCxyBG z9dpf=H-5fW2hbK@AW2Pk`6K7FpcnYptDd>S&{JX>0M4lhNIF1akD` z4hj9V(lCb0{C(853_#82Uf)#O#nm9hM|O}WA@VY@BzztvkR;H7sK0n}t!mPH&Mp`G zw!3M6LJFzbePVilMcNPeBmnb@QAPkG2j2AOGU+7r@?0&~EHoKc%`v!Cn6}Pet{|2S z)M%5ayP8y|82gmojFLAp_Z2bLRnx~7q%+LZxFU3Vaj;>#gFx1J&yb)sJaBt*XjORt z8@r~#nzd zRk8D}B5ndV)(Q!n4zb&$uLqEq33mvLrqe?q$8jq=V zig)I4awvwF08*5~`%v6G&b^+-rM-WI^iNN*VMY#Xnl$OLoE92>*=3v~F5L9_XX4Vb zMzmH6qxWp;Toq(}#qutPlv8>n7mP%eluhud_vC0mDEK>4LNDDhyIK8>2KeTrU&aae zOJ~)vhGkPK4p8XW>#BphgT`)ho0@=;T;|^;Toh1HtP*-srHWilCRsLOM2r=g#C&gC zoLlO&I=b}HQO^LL)L7z#9o`s@-$Q;#TWHjDV-91JoJG=Hn#Yh-!P{^AMjKOb99^WSN6N5<63*UGCKp?ggX)Nbq6A}E?vVlO! zwX~zeDDLj#%v{Gv<5#2t;&gsf?5&PqMff--n{PwN%4d?6BY|r4HrZ~klsHHgzA|wn zJ0ixPIw-`zZuK!z=+So%fEsTa~bp!KnfSt zg6w+1@cO+(qA4ZzvV}n~VpcdXVIGXY!8*R-FtjGGr3@mV@R27P(@*w0A2xya%dP$w z!KuQ*fWZ2@gs?;t%OK)#e`s11H}I=y!kr7+8Ghu1zMA>ezw;`3X}bp|7vFk`{VJ7c zYlGt!TmvK9zkyRx6kpEMIGT9ySi;c@4M652tPDK#M7a3lt{!8IRn7*pyVhtFTXaH_ z4AniIC`PqcM<)@wN!y27KCL#9>y*eeAI{=CgKH=o>$E>{BoNyNz7mQy<@OWkNjgWy z(lPlnS5-B>%C%MIW~%=@Ac1Vnmc4X{#JS@}MY8X)K1%ctXS{(HUq8Y~{$L17ETZmS zAJla9wrxMF%An#j{nB^86-JqvV)6Ke7wLjUi&$7Ip~7#@i_Tu5g#z`7z5pKgI#%js zi0>(iAe@^HP~iOrma}g5k$aZSvfZzT-r!%`3$v7#k6RR3-RlGi@8YD;U&jECWCEcu9(qvu`IjUUG zE+yOnrp@1tG+qIDo7VM)9`2SyRb4qp1XyCX!P}_vxi1#pRNU8q=$FxrmucPQ6O2T{ z5LWV9;uV>V?=FVlG-*zo6_n)fWkNr9PxS&M-J6i`zAj7?Gg14R@0;b4PHF^j5Kw%# z(Q{b|KOIAoEs8`9O|+0KsQb#VL``)p;f+Qr%M)+MAgS(g#ir_+s&9{ZORryowL=(K zHejDlV0@J9VY0#SrcAi)bi6_)DO<+rz=NGOb4dV(%!K!E_Tz~M-e;ZnZ(90wEFhe} z%D=g-AHqJ8e^m_8Zl)?(SDnQ$vV?F2*(Dr9%EEk?msNA>1*q$+@C6%?$w_0`BpZrF z+X$?4v*0aJM_tcH1jJoHM{X-ifx!#;l7KY~(Plw`pL%rhMesPFAhkuhKbbT`m;9wU z+AzAMUck+{s`pl<)Mc`d1I}eo#8sFj+ZryC*zs1%ku>3pK6)I5M;O2Ex3$UkAa8&v zFG2}Z@@jL{bmWi8k7ttXSWpD$&3_44KwM8=@(qU1GdTyyK=;JWKzBotJLQe8k{!qU zcFKls#X8r=M(YDPGg8U2y_f5GBWB6~IPd(^RlPM!&*Qph_oZ~F$vHLiQ@$rhw&6V8 zo|17C#&fLg;&U}PH{uP|^}CUG74LLr=#0IRn#SD^Q|7G*-Rs>q7usTf z?foeO(9EFy$DaIs@h|hw@bSHo?B&(}W=d%1`17fTWP+wu4O6G$hI8 zrrE?ftv2&wEkBYT|5*q5>L=Gp9_P?SPIGYG1%%wXck4O1KGw^8>Cpf#)!mIh2zsZb zA^qGHiQ_|SAx|wyF%KM0P9`RN1z$U}AY#{;p4M&7DpWSJF) zpn-t8cy2{%(Ice!N7s-uBw1-C_b)K#9b_ci=;I4u z6%>oRB{hGp?TMKV0`&P8e4HbV8r%yPeCz=dv+!{@TM4yiu^kfhX*k)SrGQT1a_6e2;6NV~$J-vykC(GT>tTJW1dgDpqeAR4QN_grH`Rg@r`_viL-P z#f_5nCXfNJQ`dqsJlrb~`6ijG|g`6C&jy=CN&?5?9YZS%;oO3?LD?F7KC_X`Om=O|ZnJ_%o26>J)mZbFEre zQI9NZ$tUB`9f*@Rk@~LD`0CV``m*x3X97e`H?dXZOFOK2v44dZ7C*m|)al^XHZm_Z zOHR7~E^2sDXFJv_Xlkc$938oY!o2gnd0LbA`%#<>lWv}}zNFIhr1ev(jLkbVw%LcD z9(Ei$rM-UW`c#u3|#3(a^UcTFEDo@gW(-G&R zJ`M=|S8|71!59Sy<2UGg`qccDTh9rxQ{mGP)D5QT5Btol8^c9CP%BAK=L*BQbvF9AwBjQUl<#kj9h3HLp zc%&50L*kzs)t!zt3{k1B`5e8`t<76;SYS`ZPe~Cgw`}SptoOOylm^Pp^bw;p`tE2g z40sL5433)JtO@+DOAKGMDI>W!c8xL{6ugm*@Xp2qbu?>p)PM_q-ME|8kbhF$oLG{- zI7$Tgi-}uk`9!r(cc5FVcNrHD#|N@YOL+WUp6q`}%0h=^@n^C{!lj#MdE2Z8)yAMV zScp2!k96yTtQA){Lh;iY-7}KHIF8BQO>X!Vj*xQk{;x;0$1|DxDMqHPds5jK6@T_l zSeCM0v>oCm0MLjye+2l`G8m&*iWMME>4f}S`Gk>06i3%{RnZtk1h)Sd0fpV%*zd!@ zw%$%)$KH;l{@|NrBZdX~3q!KHwFPV=ul>W3k6+n4krlQO`Tw=g}zSo!cHZ=6D;4pTR@_~zsDjA17T z6C<>ja>pq~4Ht2S@1=0;=1rfmVg+prgm}1$SU)8XZrQm#b;?pzs3lx1q?Tt1hWiWP z2xrgE3~wnI1XL%t-wfY-LeVW{$;Cc21#0}CZ46^>V z+r2ga0>5^@wiA=sp)tO)P-W`+y2kxCji1~8-PwIN(+&y_TFqPW$@S?sgH&*`1Q;R- zaLxOC=M`BL7|kLjEZ2(7jcf-A@1v`FNbGh{luShW zUxuj1tGaihbzYbWpQ%xnK`C#)P0fSXRFA7QdSKdW^bka64}ynKUXbYntQ$3=^Vr8D zgDmtW7KXjnIAf1b0SA*c_v@V>)dtprG(zmmaY*_yAepoWN z?cpQzoS~{ag}Y~FuK4`!KV3o=0=}4K*|;polBLexRdadXzJ5@<@nbw{pvJ)E?dWKE zck?vh-v0FgkGbunM%6~x@x^-$DC+-m;g$u%3Uvg>>_V6DlS*tm02yU8A69P7wF-_af5#Sy%sw-=T(Ul zDi2k;|3US1a@V62WaWjw0GJ`~@|yYVGfx=}cSf>HG7$J}pge~Amiex_Q3>khGP+yVeLuX z);0l|NL1R>-PLUtMC2zgKq-s1-LibOv?{AfU@exa{F$YZ+F}ddD#P6_+C9~SwJYV) z2Kru+Yhn5bkXfz>G*%x7ws5cZR^9$;pVmBmY*C*!s;yWrVbuf>tB%FK(gBKsmLi0@ z$u0Gfal^-kXy5T*Td+1cEMbZ3cPSjx4airsvKK!iXPYI*k*5Y^ny%{82Q>OfMSo=jLUj}U zqI6a72GTKt>eL3_4La|5`@(x)INv^js!h(96Jbzb~)p=OUO{Z8&wGSHq6$)c`91(tUoh*0Al@j_WoCNY8m> z9Nn=#F)p_qJ7)ku`nek?#WbWNB)PuY<@${MUkTf;TLa`53n1O?yy;1xH4Cf?-c&$*1O4!f&5$tMaGE+Z?x4`Wa#KcK|@Dk2X${Oe*wkIq5eXpG&G1 zq%4~GSox7o`#DE~cY-6q;`NjA7ipEJkJAi#`FZ|6L`?J>M)cEQ^y)vL9AMzY!@m?t zncG>$3b2zsLZcg80fYhz&5Dr$RzNwB4-m7tgiBs5da#s?`@S(}dP}mn6c`Gi2+)Wd zThfu2g=iMR4WwkDS|B9ueckmf545Clkd=I3qqg^`%CmdEFs?Sx4gx@>mus$c0VqkY zcF{in>e%~8pA3jqn`oD+u`&Q;0bA)~RD>!#tAjYJOJy2}nt`vRv;Qpa>kj~x;PE;! zi&z7gbxs{kvZ94%&>;fC>L+pP`@+jk2_;$ax}^@>LoXZ6FOReO^yBHcHp=LS?s>c) z{eH@y(MbexT5u$cM*5A`ekHz+{OjZEyv((qj|9Gsaun|dy`gP~_k@;>w=$0e$Xn!l zS9kOnVDcWhD%nh)I9d7F1T%kRs}4$UqFX=F%{hBRN8OdY8!WqbgRUp<2|W*9A3xra zzJ=&M@BBE@`7gCUP9>Ka(8JG1g8Ue(hQeYPVzs}2C?R}$kS)I$qy|0 zb{YVXP9Grmyf16IUpou}kYYiapO?2avLLMkBZl+1)a#w$LjM&V|1$;wNQc|J7_IbQ z(eYbV`L8>2c9_!cGctthpKS?Wym2zsRb>%lLh!lZsV!bV`T0K_$8Tnx1?hFNAU#P| z?IWfA*3M<1|A0M6ZS?#n8==}@HvZbklMgti{5BI3{aiqd4E~9rU9=MIZ=V##9iW8( zUN$pn25<;CX>Mo*UN*^sl6^;6h>q5n0D4*+ReD>b)`_{#B~Br}vg)XE_#&GHX%@H5 z(h@LGi`SGxep`?b=*VIKb{U-jZ7CYi*R4oNxA^zxg)rxNwI{PGRa*xHqM)G;@pNSH zU$q~p{i}EUGJ03(KiEkcm(@Ei_2V$c>F-uNJ-yvw{DGec%@d|&KxgLNAd}_D)hIWm zOGLBU$0vh$H;{foSmHj>(u?k<4VZf$x9!$63!R#TAWI&Sg+MH zn%v##jcTPn9*f>0i>rlaVpjku1_ri;Fh^ z|4;Xy8@5|lUYfGt7NmYX;F#z?CiFrhfb=8)(or=2^#Ca@b^%C-3?sPznTy>BARu}0a?nl#cjYxCZ>J>Q%M7VIzWnB z#n>Lw&`mYYGH|Y|%)&^;*#bEAkl%n(MG_CV%RZ+DvI-bAAXj;Dze_p;bp@PKHb8Nl z9}z6JMP!}&LNfclmdh??j}&scaFsugcSk4vB3~!IU=H}0r+G09<${`otK43F{L&{qG~v)MWFOk- zh6c~P8)P5Un2ymtq{vVYRX`ItjV_RU2WUn9MynIaZRrz1tEN}XyFrV*8z>!r28!w& zox^$ZZh*d)PLzJby8#~=&A;T^!FGVl0MfWOY;9gK7Cy&(Tw+|3KS}=7cq7T*6_>wB zuftC(N3J0A<9kte*mc*P!k&A*GcUf<`7ofsIpw~wI&w^14xrxh!n`vFY?3cnb(6^kS4jhdgwn~`F~J=R1MC{qT$;9rQzQJE_QQ! zkSomeHGjPgOI82Y+wMlXY8co_7vk~g3B7Q?_G8K)DN}p+P4tTo0V9Wh3=GsF zGj460HrY0`ZL@D&5N6RBuv4HPf89M@W}(T#GQek9M;?1@|534l?Xju!EL2wn`U%Q3 z5Ya$Cfro&TJy=T0a>qc|3_PWLd$H9*G{9&@i`?Yx6S%0=@a)w}HK`8D24-%?8dZz4 z++`6QYMT|Q%EXG4wwOrLV3?IBi@Hij8p`lK**wk$ELy8#{mEiD>8Ve(=|1Jr?;b7G z^R+U2p4vSv3Ri=b3-Fs+nd+Jlf#p~~z_4+K)fpcSOSsYHk2dPhtZ(U=wSh*2(Ea4y zq4%L13kw01o#am(d&o(MSG8k|9e7=fAM5#xaw^d!QXtK%;V~}|!pLjf>z1ah8#?wp zP7JHrPV*Fyk;qp*hVlKO?IRTQf%2KGmpmptdr%{@eScBQuXJ{l48}tO^_X`9_N!Kz z$-BYpdpB5g&5Tf*KUcb`=G`F8pW!iol3ujwJqDi(l3sV-j~w89u=Mj1-DBI1=)LHm zgZB&DY_ny)sB}IIDDd0g{w~~i@582h;s;N0)Z-`*Y+%w$OV9r+I)76B#DDb^Nb_$+ z=U)h?HLxIM4^lL~&pDTWe)Mr@E%$|WI{LyZOPa#`uG-qwa2S`R*@LvcKi;o3)qY+@ z*AnO}wmKmbWZK~yx!zPXFFWnFho z_6?Q49w5cV?w1-^kS@#kdmERv{jJT+_nxpwZJ)iUDRlPMN?K|4Z)E^!&62M+B_fk@ zO=a<@E@%b6T?p3FsTL56y@@zj;TGS%YwOf7a z>FTuEOFx*$N@QgM^18JtWt9c8viA^HsU)*SciJa9#r8yzMB7=Mw|!Z?tq{z>;mopD zSFnJkHI1It2|*MLeild!t;mXHDo2ws$Pd-q|H4yY$?d-qo#U6%2EtlTs4E6ql$T2? zjY^GHSrWQJWFcMcUNJu9hg74JelSAPYx%j8=EZQ73&>175}176c+1ef-GMYyAIE6% zx(B(7oc0fKklXS;p!Db%3#dq7R|%URu(iJ6pHdUyOs1(9bJr8qx5|zuYc0` zM+&6pvZ7oV&itR(>#yfxH$SdriNX)PeNotc-LA0F#NM#BKp~fpow7f8{N+lx>d!6V znm@M{z#8U@z77po4=ztQ>%np1mgigSJz(>x-Qf#6%`X)5%f~vxH3A#*^KzgCX-oLL zTy`=p2X4GL9KOZkLK%0z&=P)n|M;pL_nY*;qSv+`?(?eF0iy=s-m3zIeUHQ#TO9v< ze%dv@r8j(kuX!GA#~G^cPSv}O==q7Q7KXP^?+#jS4AAn4xn;XI zSPE>v_|4UZdZSMeEjbjn>c3tAzi!eSE|EKl1j4;T;=v zdQ`i5imrat=H)Zf2TH1Zj0-tdi@VCE^G?F|7&YF?~#r$Yhev+ zjQ#fZ(Nw%amBLY5EDC#W*cs^S1c9R-UJ<}}qslq|(T?!+tL6`>%2$?ZDfJ?t^(lM5 z>c!ge(m%C_>;Bvt-m!jn_?T$DwnjqmV_hz zZb{f|YEPIhu+PI1@!zd#|HV(ViwEUJOMkU;LfCQLC6WWh`9t1Q?;Rf=ei>lB_RRF= zDc#|pw_o5z$D#d?{P+C)=5WW~Dwh84zqN#G#lx{3iW-7` z|N4&C!p4);fm}HIp>g5n=c4?`_n#y?yrI*0HkaJ`e%8a$Ww-ac($p6|y49kv_1fKG zBYjAarx!f@=$vx6>gl#{jrLAmD2sLvo}c5)56rgt?f2ZpuC+<`>E9`PzY;n$XFWiN zuiaX64W4iRhyH$H*zJu)-v8Y7lk~All4SQ& z?cvfV+eF{m_~qNbH1zlMw7=mVq;!Dd{YXL&o|$75H-4vf^n8A--6=AA%AcQxH7YsX z{8+n_=(jrf4~t1$y<)l8vi*BP^PAopdb_18TU(_tu@a5eoXuK%)^fFm2k=n>SPKZ| zx>k$S72NRZ&n#{fPhf$W1@1~ET9dL^9f8R>-*BDi!7P1Pj3%oN0F-7)nE|3qP~Y#< zEPE6Iz)BeoW&$u0S5|!l>bE&3p+b9EIHwG_%Kj^kcoureXTm4D##Ju$Kz~~(H$YXn z=$nKQX<0O4j-zzVKMcV6)aty4^+Cy2~Px7lq2WaBK=r8JUG+yufIm%M)6jF zZs?PBDWTxq0DUCcYL@-TaV>(Ao_(NkmyRqpuL#PQyc?h&qdr1rH1clH_2|u^?~gO9 zAMc>M2rFa!lU}RQ(TJM;B>A1>H}kUoxn{KTgL^Yb}|sIaRvmLFtrW#MIk zJM2N~?eXJ=6MMop-}zd2%UVV7!Sm&huL-F6#5I!*F!lUAUHsw0v-8Q8`urQWO$e6> z7$WSTJxEVmfjvkmW8=x);a7(i!CFAAeSWEa(_jT}H^&_WV4l8z5vcmrAKSvW?wFvv z%I)HRH14wJR>cQ>D)UOZxruMw#{pa}g z-Chd^=V(AF?>>L6Fi#fE^>P&;^FP(+jRh1974!;kpzu%cA6MmreEK(x?+)MCeSX+h zAnQ;;_BG)r_l*l@XJDJB&9~p_=lA>w|KLvg&f|)6<_C9=m&JA|d|mYq7I@bD_FWUg zMUQthY=3*DFPyZ~0`X1_Tpz5g%l_0B{&VI8f%G{p7jXOY16~PlU%S}R~AQ@zDUFe?EA9 z9+%Jmm3Pb!|FC(H4kunaNgreY$VNE;kp9hg&I_AP8Jce>ANl$5tEUJUj~3WY2ks5D zAZ^heq>~HsM>;&xW zli+QVX+IV{%pu~;GDmz77qPLz(M*v7Fl!v+m^ha#PUTn~TFAx%#pV_Oq|V*iCxVc~ zsV(|!2!Jqxwg8xMpVB_t6OD?*k1CVk?e=*Ju!%ccKv)A=Et$`3<~qP{Y#SD#W-V$U zs0vg67-#yx;yDZF?7`|FsR5_Dj|*KE<&73vtXGr@WY1LrpaMr-&JbsAeko7sZ2@29 z(tj*QZ67z=+yD=u^ADi@x ze31Ae&5J1SmQ^mWh;YYE@ge%oyGq%@HPl?Was?0+J%M+FmK_fX<@MiUAYDb?4NT5U zxFO5=kM3D2?*@RVTJ%O{+Q&O6K$U~ON!|^ldoulsZZP;6y{s`{XrU3us?L!v>V4*+ z&~?w1qP^V9>qDtb{npYbBI%`?E{55X{Eg2jQCc`XYELTZxg zd`WU;`JU@WtNgHs79R2xtdG2ZFN0i7`QwZl3-oKz$2j%6hL1q)C1DNmPkvrD+Jh7q zyLrBzE=$o%51kv@bCykv-B4jcS1Ekxipk*_S^uF|frghKARRA&G=e<{MmoGSEZumP{Qsu*ku9y-4c?kLbe`dS+;lp(nbN_hNOJQ>vz4lg8#5;20oaEvBS4z3zecSh{nj1V6RtSo<-(le)B~hg zkbdzdx9pBRx~Ty``u@wN8a?a#fATK#!(o3{wB+6A7gG%&weilLOa6V=dEvdA)jp(X z(BwkYpI>c~?4D|KHQ)aF`hEUK-iqyqz69b*xY#9;hgy<2XvF&@^)&f7Pw)5q+F#W2 zX+2Fo&eQunzfSoR{bA5NuQ-q7TjH^7NvCJKd&!Jq$>J_XucZVbvC})g=Qu)i*42Kqn2>rpN!(=18VJ_A2((u<-j_A1VV2EvCw6_4vI z@~Id-bkGO@SQdiq)GRew7>OXR-8Jx&GhA*_j_oI^^jrhbQZAq}?JenoYk*c;TvoAF zz*n`BpMTKM7oPz`4MY`v`J;T&8R*=(I4rvSdupRBoCJYCtj zo<7EsFXbQ8^vig~`5^H{q=3^S&8x<81&baBNS$XKD1AU*U9T+qnbp7KH-Ki#9>;{H zsq34JY*7P{od%9d-Zq<@1-wJ<3Ve}#M}G5Rit7brA|JgVFwtws#7c{-NzoY+{I?`ybSk?@E8(ML)!6_Fg^TpZxD%v=2v|j_Ei&DDd2K&xaXjoMYR#6!ySQ&$aQL zSHpxH^x$$b>D8oH(|SRi8U76Ab7V+eQ}tf3hWJNv?X>;og&pfGNcRz#kbmB3WT^xQ zaMz1+Cn93z?Ga1y#g7kZL zkCR)}tR5AHT)OSp*#$t?K|-$!_mrRAzG%5QKh&bwFa~B0!($6zMlE30zMAO0UrRVt#xBST63{0>rI|(#>=hg<^S-q z?U(80aC8^RFUZX-mU5eFOl>JMm*|06mGF_Prc`5`*UvdWgt0g0V8LDN z=JiS=3({i+_BDDg`^N6Cg@fuWNcWHhDSP6&UgF91mjbyqXT?tEiO5yFYq-9Ugd|-+DuuG;0;I3H# zbKlE!e)Bwj-7GNkuHy!uGcSq{|1!TUm#N(at3xlxfz5nfAKh|c_@pce^8w)cLAh9+ zBU-#!G{VxhK79Gc3378={HX6ZStXuWXZ`%r!csU?H0zPY=|%def_-iC0qe|LWt~ab zS?+C*dD~)}Z#%uAs{le`iTRjZcEcAp{YCD6WwG68{E2gVS)uwluM(&^2ozN?{!2{vtdVdN4vNa(Vj%%U@Uj7n=TXIM-o zzG^iI$Y&8sBM_A`^iq13oQ_`V|EtWf*momi9yIo^0<{TiA!L%GayK z{w2TupV(j0=?{92bpA{2*T9Ph;2GGKU#^PhD_{S_I#zzUG~DOQn&?-mfA!EmZ$WBo zoBIJM&AZ+$@^YTXUyuJZ8<2gnBE|i9$3FiUN)z;@p#BDUHxNL|hdIa-^KKy72*`;Z zBF^$C&MhGMfCoK=sxkSkdmb#c>V=Q_k1O8f-C%I<20e414@<5;+W>2`;?V~@Nv@k9 zTBk93a9_%OnWclU6JPkhJHoIKjmMs`IG3E=;zX6dF1b!zd$%n4$pIZXHrj)9p9|OG!AEyZ)rA}68rJt}WE`-JI_5W%3wzydBg@Vi zb(WoR?@L^}#=4rcp6BOYKjjgowD*NG<+gLZ30kAd1wfnQemhz2UCTzJAuUK%yssDB z_JKKd04e)$*4nbREX}U0vovGh&!aD&T6o`>+TI(kJ+cUFo+Fo^-Eb;0f9%aG#BfpbTk0CacwZ1XB9=VFjAEASI0lK-|aG zpJ!fc4u94EOP`1qxSwrc4GUNTZC+9yryp)`zay8qQ*zdxl>G$(tvCLqt;#>_WBI*3 zi&lbq-3{Nlb3*vt)2-&}c4}L1__RQ|L+jjuQeMG=G#kH004XkZ;huW_`MNAf2LPn! zO$)DeJ4hsOaOjaCO-ydL-WMa#Z3GVr~={a#ih{%Pc5m-Kv`@bRlB zYoE~?;M&Ma5X;+R%{6hHe^`S5`mmP^A2PrvpSo_c?UhRV8UF(}StQrR^R*^i(>r%O zUkRVO7H~Y4MSEH0`1wJvgukx?$LZ@l?a})Mx$(^h-1UB4A3Hez=I76KN6s$r+V%P% z;G}HN;98xOR;xdsKTkg_Q~#~bb?>Qib$rGHd_+;pk2~JaY*z$}kNeG(@UZ3s@{c`W zZ`Hn`dGHgLx5r;ORUd{ZiT((U=D=^BY|Zu#B}J^Wkp<~VH$~Ui-u|18nNt9}sjsmG zX@59*mjweXNDUwrZ_|E;kB=ALGOeb6SWAJf*Z(E%$x7?CnAROm(f-J5<@TXnsBZwU zy6rUA%1*OdUuduQKgNoAGXANq*KD=TuKgxZl)_mlpRsVRhLMOub*7LjFy&A5GoFAe zYK&Jn9|8Qs#K1}f%NiD;C+z=Ep=mOH{ppDWs?64Lnaeecp9VPUoH=1upQO{YU{RVm z5*MeX=yYxQ*z*&qtb@6xReW@{8}r$O%_bt2k+#SU*eOd%B~=-M9C1M_Yf2WoX{WV8 z8r`gZ^iphPP(BOZ%G4x{XJut>6d5M7gw;LUGnF~5vPcUPD@SHM%7dOtQ#=dlEQ;G* z9iv522DGX!((ngeI5%2li|o)t6&gLLhkcBQBF^fybSewl=nnLtPk_eeqE~&SJg);f zVnMa!((f2u%o101niZ*)5XZx+AfNv1oQ7EcR*n3+?~bCMdaE@3Bnl)7BnpTEMT^qq zkxP7}67@!RZ&zr4&u2qZ>p0T|C>{HlMgk65kGyoR0LVP#D4Ib+)E2pY;neofMD}Md z61ESi((s`TmD#?f(jzL4tQL}Y1JOeC8q~YN{JCM_RX;Ir3Alc5hH(0CI*c(;D4Z{+ zUb^p&+Dn5Kntl=m5(N?kG79*IInnhlkrLu2$K&&FCeDkpNLP)Xm(c_L_S_xc1OD|Z zpG$Neh7_1HdrtWAk7h`JSF-oh__3>oU19mgKk1oaIMAs{i2}oj0{(7ufA&!hO=B&{ zUODu$BJ#)9m8`FM`4#mP<(|6lE82s!w)RrngEXd@u0`{!-dEfQ@kjTJ3qOB2T3Y7i z;;#>%6W%zn25|mmUUN81)?}~uyxyw47SE8CQ$5gvbt<4BK%eW??bnfu-2;js)%Wg_ z1?i*3{UYl@Hs6OcPuCd&WVczT)_2Hsz(twGV5Z9t+H{Hbdn^Kg$H*G(kFrKvmT?&j zAjSRa1&_(n%-(Tq$Zf<=*?V5tb%Ua%qFHs_uDuv}CDPwl>s;*GFze?>_lyt!_fXDy zE$ho9S+QRA{+A1Y&mz(Iz>B6vm$b^8f3Dd@mc>7+0|cKIU~@#y<>#5Q*4wIXFV6qE zV|@7K9|zWd`u?wk?Q{E&(q6M5Jy$NBbN#O$J9n{5`uzAoe*n^Y7rSu}QYaLA^P7K| zQvlv6<5Sm62{T{7qOdkEwq2)7)`vxFyDJ2ao-B}*vg+MY)1HrAH7VR9OX__4i9hqe zxnaxP9-S`;h&(8>I;L5a_j>$O(UNif9;B50(JLp1`(G;ZAMTBB7nqkVMUX5ow!3HU zi>dFE+b#$n-ExuL^Pf}xFfN?+P{)Awe__Yh!qIQ7?Qe+z(E%5&6#$m=?cZpUTTt;`uX9smIv2aOJxKe*jBY8Ir5u?p4rm{3`(gBFPsGZ}Ai z%5C^W$5>6uuK`Q+8`1m&s0c>`OadNGJ>)Z?Z`@RYrCnNh)2g zLW-Y&T^l&eC@DJze;s%4I-Xuv(JbpTg;ZU53tFp6)?x<~086l7hMMQ#?P*^`s6 zVR{6P0*Y2D`U;EvLscyE&x9szXK~zsQN<&O6q>bHs^CY9C(0}>t)HdP)zxX~sMA1L z&FHuQ&fM0#2fS1std>|*H!PD`ZxcWAySLAPTKHde($0#Up0fv=1I|V(3LpVZRe!J? zRRcn|_9G=7R;RS3r6O04TA&A*rF?)?@qI# zGyCQ6!yo! z%+G3b3_scTRRN?mAP#^O3({pNcU-wI93UX^Uv{2v`Ld$J^RhHO_*dFL&%m$7>)`bA zdwb3s;I_0!uU?;)JI=fQ=HOGz-^j)8_vK!-j_YazElA@&oOxOtvH7C#FYhQ? zxqVA+C4cpJbms}JzxB>}VgF5P^Z`Tx^mY3A7`@)OOqLbp^+y%KmS`Oo%c{@6tw6^a z2NvCbLW@smA5gEe5kPv8+qKOP&4=_aK!8>3ms`Qh!@>U%35)#X9euRTi*0)tcdDdH+w^X}$r-aSb7u+u761 z?Q(y(N*2fK&YrKs0@_qt6vG%O59}D6cbzt!+nrCOr zm9@8-IygUG?y5gi=dRl8_v0t8nH28)TXd~kpC9@)vLO8;7T-$jyx3^`y{!87e^)YP z&s<-zYTok#cfB0K_)1^6@#s0Cv9~aU)9&k#m8m}bU>!b_S+7_BIDxT;Z?ShFAS zG2+>L{+R->^FVUkgLIPdvbX;xwJ8rQKRLHK9C>-&M$(9!nQ%;pRLsaZzih8L?({c&v;JSv(6YtnZMoFzZN zD1o|cl2eZUvk;EETIvIAv}SROKgu;wRWHZ9BrA>tl+Ao?GLV4u!AQeD52w$(SJ?q{+y(et0eGfOB*ei?CUV$>&!!B>SW)*}8kY4NnpduUe>&rVY z2=Cvb=#G@!sqn+Cf%Pr`Ngi#e(!)S&&xgr(Cxk+rY)H+{4ChDW&R| zB+&A@Bj*-ClAHh968>4PSLr|R9oHQ-J50{)p?UiK9pUu*$5;D8x}|w8!nzDAxqP@v zE@=Pl=1GI*zv1ZFh5bAKHeXhVqNjC2?f;rATMwz*fAb#=go|!?sVh&vBLxV5sSXhS z(v1_twX$TRvw8Z(s~`aRwQxk;K8GLp?UeASEaafyjYrSTcPU)?l=^gw_B*xGiuFVD zYvist@5<9HNb~jA?;l%r6|4NQ*f@Tie?wNZ16=H$FMzZwuKm7wN_Y6hdy7ExSr2yv zz&`RX?f6xi`vVq$tP6O+LYlVO^PQCx`^)b-nJ;)GhJ?+z3$mIMU}$d8!idoes|Gg@{nIm3(qZxYyPy0kgtEkiQVCCawoj`)ZXx> zi9O*>+Fx}e9rHY4ne+odihJXH{+Z&RJV09AgVg#JYaDbBQfo|+e*Y%7(TCT$t=>m_ zkg~5XrG0LP`QcdY@tP0U{<%fQWwntu`e&`&{f%8=T;0bG4#v}up~kPC{*)UnNY%OO zVwxsTd>K+P1@Qw2U%$m(A=M|rT@Rr97NB)7wv1G*6Ap3i^ z@A1JbFQuU$SmIOxO!XarkiJFmP>a=AJ}PZRV5tG4c18IS6g6;E_q9xI zpr}rxg{c<0aqp{SHV5rXU|sae1uYM8HqrHK?rC`_(0>CaRT+6o?0c%T#Fh1uj1?+? zqmWo@n-!XkRdjJ1^IDhm=p`Bfp2B1122u+(ORhX6 zT98t|XiuR0B)>#G2q@b5T=Ov;?(=U=jbENtVj?bU@@y2ywKYXot9K00uhBj|EL5|2 zaQ}l*Mz5$`LT?}&(JOqwvevO*)r*4wQ+-ThdrwO)6OZg?an$uO%#1AMqZ`s9e`yPQ zI>(PtD8K zZR$v2_)y@v=l&MX_~}{p&S~$BQq-oqrNh&6ZF;Ux?=|VY&fg2FN6B^m<#lC#y`W7W ze>T!Jr_LzJJ3+K^8!ErAL99&qlW*&(a=}=zAYD`n`~Ff!4R!t6YI>)v#1;(zeTI_W zWD1}b$5*a4CqT8fGoZK)X8n zeMw;Sk#8viCdUcvd}NNi%Xk5y9opNlE1X+LpPxO@9)5CP zW|3M~Kjohxx29MpdZ=2E=IXDv{xyK~a#@h_;;fJ#KinS==3*EAdH05L9a^_X>JP+U z=U@rB40?T&$=%_iLyJJG_hD&|GqQb1^X(ssf67`jxa&hjQ2p0Ww1scT&2l6D!yWQ2 z>(?wqY1hu@$bz(2>ksPd?H`<7*nf0s+wJLQ{!ROk$~AGL_HR6?J6s@ZV>v!71Y8T_ zS{HZOjmFRW-_U~e23e3U=lfn+mc!S{o%Dp<#|_Z#KW?9B?fuMkb1LULXq~jQQP5S>ru>P1QUW$%V6cq0Y?h4x{>d){;8wT%jw3?L z`kR@xBj8^%R+7vX%{=;MmY+JZKnzF-I7%5zL@hO2x2sm7q*pxGHVOF(LjP=$Sqsnx zB5Go>n93qF3(_oj8&Ift7O>6DFL?^IL=ZZ~l~DJhT#U04aby6Z()i@3UJ}uMYm?e+ z?apqH-}ka39VL}n99J9qSuE#B8|Wo_oa#$uK;S<46|uUkc<2xno4IvVTuC&-EiMc2 zw3#}o5|_bP?6Oc#x!ku!W!=L~G2j3+i59E+iha?%u;h2A%SuO!(7I0<0~P|*X2!^= z0bN``swq|v`8896eJXyX5>3{CHAdfrQVH9c3Xy5}mslXrl0fUa3X^Di%I>-SZ37rXg+ zv90#${Gs;5Y|mL2<;&30lH6yugbig;g@vhy0zj%2q4;tY*OB(ycuDxC+}FB%^*rZ4 z+8(}prz|uFnU^~>+JjVp*LmjpGh4F~UF$(M0MgF^km_E(&iyx8tai-z>h1Vhxs|;2 z`POj4Rtv&EZByH`u^y-+@zUyrMlN>0uDvZU`;#o%Gy&~B*Vo)KzW6`6*xh>V8o+_u z;hhAKS_b_#aG{Wh+Fx@JMDHs||a4{k>bQdvzxsJij{ zx>=AG`?QB#?7k)!yU4X8HeVSZkL@$MHY;p4JUZq)uw zv|s1>2Nm}srQCV4Qa$3*so`b0@ohAI-u~;gXK156NUJeQ>?a%W~ZI=NUk{ z9P}4Jx?6-+GJsKPeI4uGiwIG3}V7U!sdqAn}FGg=Lu+t=e+>l<)KgzN%)AQRdRJ z4;px_v`H@|y_}v)*2HsJCK*SOUTcxtL)SO< zA=ms6or|0=kfA)khZCcy|E2C~Y3$JOJq-atRydP4)~gp4(Pn)2Xs{ zs|Ovf!G&k$a(1wB*?!&5fi89(AkEQrpo`sTLCX7Gl;yGi?E;Rl>}-omlNNcA_8|SQ znG*-}=LdI>*B*@eu*q~m%pcER|9y3ez?k|yNZIr7r}yLPwQ>F{j+hhH&Fy*l+-ptY zkW1uZH>>|^0tf3|?6N=Tq8`c{_`dLww=WK#-mbVWrh~zQ@#W`tTrj{*=f|&_6z-nY z($K>87mu}v{}uq*sD9$kIAE^EzvhZH0;GU2>Q**>ja}@SyOj6t zH_3u@uc9l}^B-*s-@R)>96+NbEvwZJf$Q5peOzC-S{8};GA-N{@@w2jqsJ~h3+4UBr=B`#2q}E^x$mMSYkiJ7McCm^kJ?)>~Q3C}Z zol_22RW5D&XD@0Fzn2T@`u4MQeD-^a*3Q?eMl5ZzYSkDs^y`Xgr#07$JE+h9db?l zu*UN7mn)%Dd%RwJ=*wYafy5qc57Nx)+2vn7Knnky#6GLJ`G3v!tTyV(84?(@QXHm!Y(ut-+CKlp>>O_tx;VtAT8 zN3m#Z*>ca&yy^C~;4IY70KX=)e5?r)CJu|y0DxHC*p$%3#Nv@ZzU0MPlKEpHJDAHv zK3#)GimO^%DldPnTD;b&m1!11F}GfL*?JD(QD1b+4Y1ZN3mRg%9%fytHew-F(O1yW!Mdb

r6VS4rnR&pi>kXI^T6X%qYG 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 literal 0 HcmV?d00001 diff --git a/docs/images/generator_execute.png b/docs/images/generator_execute.png new file mode 100644 index 0000000000000000000000000000000000000000..6bda8e6ac2b6f1f68f8269d7b728e944e059cb0f GIT binary patch literal 266900 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%0DiK==52f0rcbjw^W5i`S#Gb6fX^HZ^)tX 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

-vZ)>sIgV6| zULKt+e4>xH2l%DjcewJ>mRSp{w1(!o+A*#LSJGzAP}?a>-g6y_^>#hEJ23-%>yT;0 zzdAS*UHTz{?|pIxC53&LP!nvU+7i_zrbzeJUs>OJ22MNM)Dyq3o~mxZ2=x<9!jv_rmT28vY0ATy6q;^-cYOMjS#hq!D|firLTr4qmA z&I&upptBKe|qF zu3U0)lOIqbM%SJ0lt(X&mK7BuzNA_IqJDC7(I`2N3RZw_&_8lTe5rGK)a^(HQLN#& zt(Nlp;xayVGppqem)j41>1~z_U8^zG9g(2lNr10h){g7zbC-~lJlm)dK4&%4y4JEs z;l7)NRW%PP2wLD%sf@Bx;L4w9F|x!Xl7VL!ZZnxI6AZ21mvh}#MdjlXHw`9f7ALb2 z@Z0s5pL9=g-8Hd2hHZRLk~FxW>rW9DCjT6O(LD^9iNm*W>#eU;7B0#0)2Q?*--qE} z^Quy<6ND9yz{hub&LP3;PqzFK=qv8*xiturZ4oOROf4g1(z zW}}2+=|F?NebeRmYq#h>N^a0f;L;tm`fe*dcM1oF$(yBO(dN$D_qGBc=rE-_Fv>yN zK+#tu?lY6p`Hc$lWkZxt|2gGW4t;6c4GRuZtV4xD9_7MdUlssqiyVYl2SV zkY1NIEN2fJe)Y(lZ)uV~^ojG|%zvne#=go5cHF=GQV}sV-A6?l2Uz!3+xYx4YGIYM zfot4+uJ&Plg_g*)>|^*=4-)8mwpX46y;`fAdRo;Ul;EK()fO*Z$T*TCq%qqBREpKM zCG)DT8}td51%NQv2^~TpL$BS zFp-~q2e0N~!C>n4d1<>*{_U-|e*kRj%B;i_y`k<(!z9Mz=TvtFDIIBSfUol8U|PWB za-1$FmR)WuL?&T`pV=S$axa z+z1tf7jM)oPsj7l6&I%FV7Gl|A}QidQV-rr*5M;jqV=cbL7QwKLuV1OcM7a z`^Uxm;JQ*N5i!Ly&{&gxU*%$qHveCTA8okW7gehNK>vv`HlJvaj`>FG%ChN<-Yn|G zrhhcBYBh<>?r<1jY*ggO6hak?`I!Ne^M+jPrLd~a!2h)lWJyK5f%mrAn%=**V{+|y zFlu=YsI5lyoJK^p&A+ni=JcHR6^`u?tFx_RP#nI+l^Gjfd4t{Jhy zIM{3dV*$^IRQf=1(Q+k-%t+V zX0a0y^RlOY$VU()(_BV=`Dv1m>#Qp&bqGCd$^B=YNn3-_iEh1Mo%0gyX+`g246-BM zTUqHO08XnoBzNAl!K_eEJFJcPZC`&GASYixP@uolF)Djw7#A{ZU|NrQZn(S*mea7P3K~2S9qWqQd4DvCY*RLzNe!^Ne z6|%dHZFj?J-WHZ{X^lf6{HGSwmxC&;AB;z#Fxjj&Av&X;-(e<}zSz^Q8G%Hr1q+r? zThx;l>A0DPRZJ|I*s=%#WN&}U&`qD4KD5G41T9uCyno#O*CF!@nF4|Jf?%{nlLa|z zqgsXkx_@%iX78`{FRUI9)6?2sowvQ@@1MpQ_W5|p(jeMz9w%F}dck1pl|>tvd7_1{ zg-YRsChe5=-ff&~bV_5BOKhUhvL%MQ?fw;pUPSi}SA9+k3t`x0_?ypQqZNpXBEvm* zja(J_#(`QqFq(^RBS_mbBvHd*#9V{boBk+fYw-CwHv zzkv6E?a;3>yJ5Xe?&+gH)5GF!Z(x7J4IY;px@}Zp!jsP<6{VsZOEY{ro^5Q>I8-z0 zzq6jj1f6qiMs}7$@IPSckeYytFK(eNV~%5{ZL?)B^xf9aUYjE3U$R>NRwxQL(;VT6 zh6h7qnfH@_)E!Y#_`y+}hI4FijsR!&Fh*>Gc(<}-7x_l)`0t+oI5!H1+vxAQQ2{n# zJzE|s8ksCk4_--G+{t;LO9#M^zVm$iOkoqYtM41cry;zbd|hY#dw zR-W%nDC$f%d}YhGwYgpyiOa!*f1P`UVw~GQi1-x23*wsx@#FKuLKgW!1{96*4_;?$ ztQRE7M%#HzGXBOT%1o3`u|IqY-IZjvDJ2yHkHBsuS@1e=bCNJOXLa_kH!m~PLJjC> zh#8i_`ZT%2#?w2d<0Y35OD*MNwz~Zx-&W#RVSlTOm@7868);nEg>AV!JkoF{pA!BCL7M$wq5>(+= z&6uDPow9a?$#}CRN79(j#K-^OiZk(4@@~p1Nsf+H25)VPrjxTxeY|l~j!d45v2x{W zZVHV`_wj_)x$K9Bu#Jx!d+Z{D&}MXcv-c%(F(m0Wt7)z8(SkxhPKq#R|BUn#LL0dD zFSN#5#`S_lsAKCiQVnUszw;n<cNWshKGfveqRfn5#>9xdb^6CKk${>#S~7*X@N3fTu1L-G z*dO4zFnn8(CjVuu_Vccw`PY`la`&%mB||d(AGFgOqDSfFdxP>X)4f>a3+=5Py~rS| z8W-aR8aYP_8I=l+zt{ZsI*1!74xncAHS5_$L=VbtOoTMSz`$sdz=U! z@9%cbt5F+gN1iF56CN73m9++qA#H=X3SXR1_M>T(PklZDPq)iz3VnNC{dhiS?{qh) zZ+kj>+LmISH#IA#4!ZBR0W4oGoBNb}osg@}PuRBFm~Xu(b9;0ll$pbN!4z=x$+{)> zcP`YvAzPAC#4U5A=ya5Gv|Yc%{*~f+LFO*Gga5O`y@cH%VINa3v$v-Y1STDMcY?F* z;rOFsqse$#Wtz;~k`s~RS2EA@Gt^`n3I@=bk%bX+jec_PkU8}8E`2feYstRnG8^e3 zW<8$FWg9u#va$-7s5H2anEi^Cu)0rGK#I)GONsQ!B7hjOJccQCpgRAiH;U32>Gdb3 z;XBto=m{%!2EgeHzSk8g6ej@buKqz1p=E%NH9I5C-}+r2WR$m*A$}D$o;UWu7?u@L zUw*XSOyhx@4~K1}tbr43%k~}m@~q^$FS{>ab0)JJrGbj`YjD6p)(Iy2=|-UBFI@iY zZnT#XJzN$NHsNT{>#f*6|IRd&G`Bk`d;Wgs=*=7giw5_@eRLjo_W>?9*c?8=KVil0 zUU`@Xxm%X~b)1uQA6my{*pYJY>9uF?1+&XdYM9&`LgK(aVz_=RMbUbtDa`{Ve`s?W&Xyr5ZHuNdm6Y6 zs^W@Cq|EMt7F5FOJzq8!R)J|Z)xHvi>wr7DSBS1*BnQANV<=*L4zl*Fr~#g?YM>=AnVKeAv(+=(P`x_ZA7VoIrDb?T zT8R?Kmz}q}Zh3ZZcO(A8SCW;V2)dJ^_b;SIj~<<8x0Ib)Tz(~{I=)tz^8<>S2UaFm z?mG`ke>bxFxiiPkUHd2#Fm{(R1P~_L3$x>M%OSO+p68Xs52sK@9XYbGRcCa=1L8$# zKB%uKbu`Af z!`V2E_GEP(Z)%yeeW7-j{ZM_`ZwtluVIsqs9)X(i5?i?;93ilv{@!|f{HHXJi3zyMVolPQ-1caJ=XaCh!{xxce zZd<=L5W@tQdvZ1z&Xob^0^)@=(7D-idC!qI%e9&GQWxLQrCu;*CLpE=PO#;YldsN~ zaz^Qq$%`I(^*d)J{ZD2)riF>cRV`V;P`^rp#Bc|^J#Ix0B-GtK9HwkCEoP3ZqF||`5B_|A8_!TrZMyRsR z=o}@Ria-@W39Ga}b%B57Hjqw?T=tF)vcn5>?@l;PC$&LAcf?+btbb!tVt<>N?7f{f z0p*&_v1tzNYTI4ki4?-RjDw$hr37l866I&Hg?4Sr5(L&_Vlb1>Ph+n$iUaXv6VXog zuYxI>!v%xx8NE%&TY`Jy;c%2v1s@xGe^X2?0*{y!63G){l@k4 z27YFoN7K^G9|oZ;@pZjk3Mvbda-v?K{GQpqcf^nH1w*+i&(WV6U~(_6Asly>oGd+tkcbZeJ+ztSAy zf;`AJT`uP8&(UtQ5rDIh;qUJ66=o{!>~~i-mmyrDPjq~bzO7k}q}keQsQpkWfVfY) zJ+!*XyTkrj2{Jw&3jezvb!t;g8D3?`cP;&k+0zvF%DqA6QDDw9nQ*(;+T?S2>YCUzH zoca^;7fFz^N?lk`i=WrkdgXsu;WsVb?NX<1Yg9==cwO*V9q;&jl2PMcF2DG21Cf09 zRx0fE*#5(2%%|x~sih7yzlq;-8FU@EVR>|k6144j9FYi6KWVTE(Y*q9}byW2!i za|1Iqk_qB?r}Nj+3-U5ZuM0v_a=G5wGOFKl;ImwRLAO1S>lcT#_1pnj`R?DE70(^X z?qsmr8tJNQlrWPPm!l%esqPnOpP#waqrI-r1|i3KLRRk{#ku?;QM-@foS5&cES0lR zJe~R>><7dbuabY~;e{hc&k@6k*nsrK8W7q%#)Zauo61e?`&hynGwUF@Np04SuCsJ) z5a9wfxon_#8q93jMcpW;W5%UyQpvpo zLXZaqICjg~$JN#j^pKe*#{ibEVjRATW;kt2tyBCRe230uz}AWqP}6ofD$B=@oW2=| z)(Vc$aglMXf03$E4Objy5GhVM=HqlmoU7%L|CSGv{%k<7W>hzr0=-~QeFi4&#g>ei zKxn2rR1bo$R3-tQ3#MNBiyCgw(QMOe$^0rB!^&6hn?ws{Gz90R5VzPvBW?Z%dwKy1 zUY&;JVczLs?*OCVBOvVc=eIh?0)yp>dabg)pB?N{Q$agS$TSqu7;Mk~61z)g-5OXN6hb4XA zA5R{+b=e8=487Ca1%h=2YppK1ak4ZZN?I@U#;U!L zR6qw_5*B0CF{BL=7v za~q5>Klc&Fn*h;l`@P$BSFd zOSGe}l&+yov z-Bd+XEKzoI@RX}x;e#8od~6m?QITqXz*n?WH)X}6);r+%#&lWm7An@`j6=<`cH>XJ z{V40S?ySa?JN^SATg5akx+cN0*_wSLDy2&Sauk8+zpE*B`<6;_Idc_d&Y`5?faGu@Z0AD?I zS=5NAN-2FbBfj>H;R~bNlTaH>p20ij&cWSvS{_jt_k+9Y{)`>HlpzT&f$!RGM671y zumtc0z8xV8L9zx2keg7VT!wBs%c!tQGjB0^yKha9Vx4_){>~r99?VfTAQf&=L|=c* zAC0_QbuH*8oot}3>G~;Ef6P5;^u_KAF8Sr-uY-NHCCznBC(lI62p7a9@$D9uk;5p= zc_xzO@>-nPO1UTAa^?27UEjk@OU%ThGK9u`et8_X9Np|v^-cl&>B5UshK_qI%RGdG z+x!VoW50$aop%(Qs0nOCun2n`0FRi*vVXPPJ1soYN%@Gt`{-7Y%^ufVX;h74EdvxgA#)hT2|!_m7Of1)UW^K0R&%s@UdvsHN!ROkMxPBkMuEfaGXT9l z4v#;TojAGOQ4|5^&Eev5vxYd0@k{g1yzthz{K9`PQw+8ohZKuBxOzmkJHmp;D!<5`U7uYvr!8WFO3R^DcztZ+VboTwSkH=E_P_D5~!_g9nq0&AIrK)d14 zSYT$zpw+^)ei4rcwV72BdVMl9AxHa>zoH~9?a(+)!FDtLyBA0+;}106l10@I?ihHD zsHk^|oC&y~-B`V5gs^`?WVO=24s_KnQfFUZ?!506w=p@Y__j)E9*2+Dme|$8{5cf2 z^{cU~o=YO_^<{1q4#a}0t~t)%F$$=)f-X|8%r-h8$)!S$=av;CbD`bT+3OtYUSa>=VO@g z(&))?7gZ9GsjrM6&hjrX0F=-3Y?{MG_RU{t_`F9XhD2#3yzj^jxjqr1tv&a}Ag(G^ zBX2n-nD$(B`*q~53@t_p=#JFj0?h@>c0{}4gZ%DTequE{DV$!;G0(owhFa9z>bav( zD5A^+TcP3FIx~r5Nwvu)puj!XKuG_>DEMhfS#|Go8B0z0q-226_E-Kj(zE_fv~Ji6 z-`PN{Cc`~fPCQM6J>^;|p87kciTYo>xg5LZJGs&3p2>>aeD3}su+jBU9&rqwq27zy zQ~KwM4{8#7mNoW#Z$iS*Zt_I?7~j!0?Id?&5NGR2BYjs(1%qSBrPfpAuej`&ZzA?U zhK{yr`qTe4gt=rzi;VbcA3x2Cw^|&TQgj`fD?AV5Zec3-YBPQZ9r~WmkLyMhF3o}O zU3XwrsCNFnY%(&XF8;JjsQNJY#b42^??fr&7V2bYtyvK&vTNvdhDWRcd@ut$%jJ>} zW`d5l?+IrYieB6moAE9BBIc(QzF{*zRrrHeo0zqdZl}i zM)WxL)v9dlxxPOEAdYC|xVGFp#`{Ev4_E(awRA7dy0QMt)6V#nh}&~E(dm(@)jWX& z&1iW;hlX?Ln89Lc%4P;}Y+PIAt<{aQ*IYHsZJs0mjLd^t^aZQpx$Nl# zoknuC@hh}n4Hcb8%i-OS1%Kh`xyU6xK8+ptaOKQ;aqjJo)W1w1aok18fSj-3R$kF4ans*jWwFVX zA;TInkUCeL4_fGOp)YJ}qGx{hT83lk4R{mY3t~9(aB#lJ|%bAk+GjzhBA-1_Z@= zb)9Z?Ou3ku{}v5S*OeUKT*{0;5QX*?A?#dsLiT*S(V?Du24ziaB9`6pAd}PkM!^FY z_JqVLqRVc=;?QDa#zpk9m$`_?aa&}o{!+~Z+eQV5t3piiJZ3DXzZl5_eJkonjA6Ep}zjo11DfTS9 za7~qF?o2r_!~q|$aZMk#&EGaA*~~B&1x6#2)kw&fq8rlcfgRbD%G`UrI~;TeWEQa; zd2i=G4p@fO&+ldNjIB^98XJ~Z4ez<0vX)DovS3i^S|g+5CjvrF0=H{Vq#4%vl1pHd zHc*hb+4MgCc)OKL{Bimu?54?#l;J01=XlGm8*VvZo^r&%#|R5SDN=AJmQ!W=Dh=fA zK^UbVu~rBO%>X0B!XtEvG71zPxm1oNkLQ=SpN=$EJ|KqTQvE(hNi&bdpMX{cej*CC z8T6y=4b0V#-u{F9B*$sum)xjL_xKzQ4-CaR4hK)9||7bm1=PCzVQ;6l9a>TF14Jf6QgxkbW<=bU?t6;r7Id3 zcK;#09m))q+1;5X)*hd1rXM9u3xE5WqI=japit+z2d^vy8DUlMuZ}K;BdMZf~_G)fVgj0)30KzBz%$ z1j|PoA-tHCDUal#fT2PdlteuhVurDteqM%$fk9jZY4SBmW==%F(C%C^zUkbhl=DIV{~i{ydKQ0Ka)&N^!ei zZ(dN!jrcR}#%sqR_KI4uDJJambp`kzs-AdREDL2`tMbWWutq*IXY zZbol3W7Mc;zyE#T&)abvJNAa_xW4CkUY~Pj@%fgIiWpF_5T{jSkd%e?)3zhBQ@U`_fSS==o6e8_<8{!lGnN@Ox=cdA}u zKJ1m)U61Vqq9%(*6sBjaJjZT&qJU~X8!6Sk$J6Q?_VlZtb8Q({ZI=z%GITRXxrDBA zqL|wXo5yr|7+d^*y__DgE_>!T4rJ4nZwQL>%Zo!|$mE99k!dwU@T5*ROC+N~*%AM! z5o#ox90(G+DuCE9=t`~!N!%nfUdKLY)zO)r7-fp`VyF5@vP2<~O%i})yi1)|Gq>MRnlI>bZpE^R5h7h6q0Lx zI`fAB&UicLJk|qq5VfvZE@_#Yxc+t0Dt?odcYQHJfc2iH7Kp>=kMiJiw;rZRvShaO3=F<8<@+b;P z!laSouJ15*&YgdFEVX=k1X8I#?%kF#S^ajtOp$+cEdL5_(%NJ>P=7n^=7UL_uIo5x zg2(NdKH6+brjj(y^%YE=0b?2RO=KH=x`!p8Y|7nowcJ1Fg1U(S3E&5u#{F!d3;&1L zUAUJF(rjrpC=v05s8i*w*^y_e>c>_Lm;Y6jQv97KZV!?Y$maH{`;v3GgT?B?*wkEcHfi@wiw2Q+ZOcw+)`M z`%Ex0{rTrFnjyX`hq~+-36F^q@~XBo^2OwP?3QmG6%;o=L|q zzF%O|+y$N{i(nG@ik+qAy6hH?su{5O`xz^@h1XyzA1y=s`)gtr$-Z4YVuVagG(KQM za$aNeV-BZ=1~j{Sn=3(iL#V{zinf#+5V~H&PZ#G`Y~S7Z*2`!1WH9?lsvXh(+FWFa z_~C@#Z;&iDHul2jMR-Cu{fV*Bcy9*k0fh2A*Jw(lbj-5kw|E6*Qe$(wIZIe^|P3JfR8Z}!I% zqlvYy9*gZxr|8Zf6M+}&5A=yUteXlz*FuMtvMdhUp|Wy@$-}&3&nI-5R46Y+H)a7} z4mvybld?C_p1#x)$&*sLEW&S2{aZi$d#P|nb{z!R>fM17a!WC`BnO+ST{o<*w!RJ! zHF^vkI+F#QsBZXA*5G{qPk!gM1119%zfBXhI2So>Z|65Luh#jt)BS_W{~9+C($W4W zq}NnVwkt(_SpK-%T(b{*NyE~z6I1e8(eKh@-V8py+!`7%!NWwWECvYBZYcFFe69yk zwl(@MW+&hJ!=C8TgT;|y6?P|!_j?5gf2;g4(g!>V6vc5}s zWn#U-VZBW#AlAml252D6lEvO3|MUD{mR?!sm9vy0v>Wct#jmT2?PoL{q5+z7SZo8$ zFjDvinZg0*zG(TJF!Cn(*akI&{%^6XBZd50M5ccgpv1<_7e8eC+MaXwA@3ecFqGEq z_l1DBrc%sWKQm*nmk0`)Vw2i`zL zhIc$?-G)MgmHkE@c|05g=7y0^1(p4ztA!kMaepf^wPI;k7hE2*kjDCMdDm7o4f{sfF>;MKnnZEzJa|4 zfK9M&4pqf;~0*3!tpPAT)EY~4-h!@9xCUmYP#tRvjRXS@v>(-aGgYO;j-TGtInC+Wq z-T#B^DuGv*4}T)XfENoPx0}WGuUjhjt*=X$=bzJf(y072$@^s~Gx=$!h{EKjIU?Jy zAtt~x(P@d`Y{%(3FH6n$^Tk;CDgTynKrYoN)$+reNq6YeD2n)ifO_5XleoB^f_+pZ zhj$R|Rx$t0w(9^b;OowQORoL(T6|sUsJ3HMMH#VO0H-vv5bPXhy4LTST6b-?mAcAH z5z>Ms$`;>}l`d#~VP*4|7sD>YBl|d_NP>$CdhL{qTeEEDVXY+4WwF&qg+^HI70dV~ zt+xc4sk8jzLFZQLDJ@h!2LaN0Fuvg&p)?tJtGNla01w{CF zLBcGYRA@c%Uf;Ddcb?=H2@hvXJ%qE2X(PLe1)sVpb5 zRNWn<8^bElgFow8pSI4VOJHFfnFE_A+lTMtzmg4?;d9}&^4q-zM&*CZc3N-MZ%cJK zPtj$Je_GFC(d9VL|^0i9cNI3SpQ^Q zWFE*Q-D-{q{mub!Wa!~Fpc8IqSV zZ>RgOhXe8VC3kOU=ip%*OiUfZ3J!_9kSzSn%u8wJzs{gzi!{<*RR9Hv$p{B|X#9Il zs}tBp<_lAkJsWxI4{?fk*Pp|L3WCMx|k%KivXdO2Ot zC1w{1W~H!FySp)Gbt1VCA|c+oa{C75gla0}d4N;zJ0xD6IfaW8DXtomw#7L>&r$>o zWE>~odZjG5j;oj+skOc**8~?Gd?WW$yDkLlPpAg=dg^-PsxE(E2$_uT_=+3kpl=pp zLl`vcFvp%8QYZxSsQ+8%)9NT1WcxW4;5$ttwCJZRgYH!u*AVc8VuOhGOY&Vq3XTTi z)t-NkgjE;B@=dU>l6`P$#RYCoa>RTsKz zrK-|DT=$s1FM@KZYR9N=D1CpOCTi>YD56MV_J_4Nwc+bld>2A8+G7#r`T;PIUkt{o zcvaBH>@+(4`7Gr~e-$MT_ubH{nApD#$O*33MydGLeoaQt2sd`qiP z&$KIGPN2^JLA2PYMk6x@lKJ5K!28H~s#4iioZivDbWe~u0njw`P{C=0c-U%O&SfkJ zmj2f8m2TVS)+sR%r7l=TH22eg)_k{B^C|wi2p_vuNzG{Z`&)dL5u#9uMOz$)5Jhz| z$(F(9H* z8iH$O>jjAX0N@9DxM6#5v<|YGe)I0~C6iiq9+WEJ!L_v|2bHX%^m^S?I9v;Sp%!R)Yk~~$5fNXH-2x*V5$fG46Mm1)P zQRNmlYbc2*(ixvC$;Fxe1P!ymZ6_9ttJ=bObUD$>jQ&fX$_@mvrH_i3WBc&-g+GBq= z8uBgu$tn2Eh2KH|H!2cqUAInXr}Ku;f8q~r7cjsRNdbQ9LdTZL;vG5f4J#>wa^s=^ zR8|E2dE9{p?_^R`%n|5-LASwQ(P1X7&~AD7A!Hc=V9=Z>N9nC2TE|+?snih5?Q~5s zRv^952tMrdu7`)DF^0&`!*vSs*UJ{qB)W(}xB`H@^P!mBq1Ky#hk&d~0Puno#MBAF z1Zpy}tmxQQ%K6-)LcOmZpVoS+Hymk$RBZ% zBOQX+sT^lH>d5jnm%2JYr1U#BaeZ^?HR6%*P5Vn86SD%*+EMC4izJ|L+;z2pfdkk z-mNuZJX)haqw`clazHO3Rs8RxB~*;0tY3<8GF4i_-ET;R><7)~%B%NX7jRFZ_9#tp zDVI_WlAKp`WzjpU39^o~(H?5*PUml|IR-y7XTC}J)n5eVMX}jHW6u3IGITh<+75z* z_r-i(ZygSTwE2A2Bi

^?s~Sd8goRbMfe#lbc;WePM*Tv5k9a)%>^2kEzmY^Jq?- znheME5!bxcaP3A&zfv;Zx3#A@{W@Yl*jf41H-6f^t6aQPKFXg1-lEeZ`OLSXB2YOD zAS4jeCM8Z;$`#K`0rhsoF}3nnpRVbo$j{-NewK^xJ!EekiBv-DD3LpA83<{Sf4FBt zx%G{9z?<>YHdS%zY?ZZ7Qdp2kZa12GHRi){Bt;sJ_X(}7eIye5C7%>P+x4LPk=X77 zC84|KYD5T+FFY*L>npqcdU2Ay&YyyYf!|$T5bDb6yk(oGQjvC+Y-Lwv?vo5yAp`gQ zMmbv67`UIVsBsWjv%yHd>g)GKJ9=}JSKH?qT0fz=8ZbNOfnZc=k@=xNsUuHiv&5cu`1Wk2cjb&iB?Wybo1Ak6Qdwu@>483n|1 z6z`vVVsMOq-f!P&R^YITlr7Lx>C<9}I&+ASMc<|GOFzBGvi+>{*V6k)0WKqKMh&st zdKlQV6E2MK7}fT#=CBL|JGbenwBp{J&01<3n#-(lNRYhsdymn0LKJ6VYWJg(+{|HH z$AO9`oZZ}A;cWDu+O586gvF2Wa@_6CxLLsc0w0I??}tj${$rE}s^!&C=Gy4>I+Hr6 z&ca+aI-u&~rx49sZaYzUtTLfrr2My|Z!IbQ!zupX2h*|YW!OC|(P7YCI;P+sSVPPO zeCRx*B5j|_Sm(k8=x-l>=?bB_UqIf5Xf;y7JoP83fHDY(fB?Q2BbRme2LfxM-K<=m z1L*aqej8^)ChZkL8`B@$e~*}xyBNN1C}%!2bh>F?wJYaMU4j{U%_g1lMjSXhUlf_@ z4)7^E=D`!x@0^e3T3<#Dr1~B`+Rzm( z+i|$#t?VxB!MMh0vA)eKmnZAESlYiR?d3g+)qEldd|Sv|b^OvQbuim-3AcELV~Uzc zL92xWp|>U*4Cz;XQY*o_DdYYZR^!U}$}*4zL@thO%i{LXG`j|mw7T@&f8;n}fB%(u ze^K#{p6x{D3Ga7%T15_g$jdLJyNl7v)#oLn+nV^uBpGIo_C?WED1aF|MjM&0bPgms zOJ-s`%=JTPy8^WjN!mV`CBJYmoOXQ7wBa&KJnZ(E0q=5>*2T?vf8LcJQA_{x{oUo>T(6ngCBv*5Gwhr4WtW2G zggGM2wHDqZL7fI$Q{I;O-lpF1^U)Ty4*!_5{Oo)29y71)iS0WySuAfDdslNp9GDxw zyanWX#=4P+M*R}K(I7Igc@SPXo6CiBUwslk$l`3MoIsnl_IUHYe03xTSRd)!LOt_1 zr1m&Se|APFzbQ!ASpQ?jm*oC9t)tM7eUaongwXRYhA1lbKqc0AGiDg_($tlWiKZ_Z zEJZTnDuqOdol}btxEb3fhxqy@6G5(+9cY!H-mBXU)FpSCDKFyY2!6xty7qFx>V)dadZEaGFa@n_TO9 z1k|fN1nPpaFnSE|g9>$CTUMetwMizI(0w0i&f7dcYd$+9i;ZDJvXi}^JH7nM0aHBS zZIwqbUth2FO#`L1nWC9eIEMT`*Pl0JPYd7wzDjZ3a~QYPl6xqpEKWTOvux_G^WNP* z;2WNUbz|O)`kr}pdtX_7=JhT#c8mF{qkKjo!(w>qa~0k1QGTPavi=?x>Z@wU;iB)r z*@6cd9;tl5-WwpRojRk>zQnnXo75)zwfY*QRhc_FrCaom5Lw-Ins=*tj5zRPx9oTN z13w=VWLc4PQKDuB@1n z?mKacPB>Etu;M4YzpWo-T zSygQFFQ|Q`Zq&jw?^d`)p^+$sG<<)qYw}kls&FI`EvqA_yO<|7eF-DQ3(3_N8-W;HVQgr8R0rJ=?!KFa|vhdX_YmmLhI;@Q|um ztP%5jHl?-t^sLvUD0Pzi4cMTezrVE>zU2Al445%B*dMoaR8%>;ePZ-CNN!toCj~k* zp@d6ogy*`SHb9o%x*Is@wE12mb*BYV7b-D5(v5Zz07udM-Im^xm%kCFH6JfdpB7J5 zkI*hIif6qka*(ljxLbSk`<>KYtzArk+uqf|RHl*XZGn;M*rUs%Sl-k%K|`O{*G^4y ze=#kHWy$;dmGg*X53_0=ZKgvHMaY@w@%=4CcG&7QQt&L9#bc77oZ#z&^~6Nb2InKV zd_Vdmt2ZjZyY%nXwcD>3Ask80%+{t4Nrov!Ow=KrKdn@mbxMZ_?q+tbIsZL+1W1P8 zO;Uel^Y5a65+O@m_3Ubehy_KRGbkrUx}wmM`P~FGB$)B>@M*@)Gd41lzOMM^aV)?8 zo^cnHtpG|cBDoQ0k`ZNYOdAB8M$$8KtVEd-=DPYVqr12(Sw-HtN7XR*5kv^423f9F zWX~)a;XZtuHifq7MJyNl5R9 zlo+bOFxowSZ!(r01N2G+AByx{mmbL0!%qwBb*fn3@|IS*11Q&6?je%)lSJAf>Uw#b z@b_PF-{LZ~E~8rdx#&EwLCefA(e#>83KyjFtMnX`vO{XV2pK_K-3gobV@a1iC1Ldw z5)Xl$DXff~k;YJ9-7ItQUN!)6O9bQ-LmA3?R;)KpdU=K=X zG>@rtabiM;90`=V>nni8PKq4pI?XGP4M|T;zlCQvjj_2RpfOS6ZX4i&!D!mhEz@-< z2yywQ!0CKShHP22$$u)=YIsP8}pwzycpHVG=1A|^-~P{F^O&|0f)^B*BIeFl>(lpW^86vYno@ECah1^BLq zf`R@D>0pAa(4M=dyR`cIwynuK0?;%W!!!I{QhFqgzucYJC@Hx4Cd`p*sqi{&tuJxw zPi(+Al;R>_`6dQUgL#+QqzF_SQ?;2f$%z;9;mi~&vNi6hTd(-VMGfaFZ3u@gWMb*va(Ke7f?;X2+BKtvE(82WR z#Zd8(*GhIDBkvotP`46jqo3QF>$KwA%Sp(Ae;!tMPqx{EqOE4^y%c^_HA~}H^UpK z!z;=T27TGQjKhA_I8L`~YXrqs@|pbFCLH!}=yH4la|$k(_+;8J%Xr-Xv(W^4e?KuD zk*psO5c2OFAt#@FJa@wsMQ@Tkblc~}nj{4ryK4vd8FRAWSADTT>bZ#g`~IPYBjPQ@ zf%%LaPp*p|BBBKO3d!%6tg2&botK zex%<{$7Rk1!&iPCis+v?x(7T*K}GHm?aoxXg6l^qD0?Ot(4;*Y40m_E)l5-^TI#y9 zb@6&n>$<2E4|aFIDXSpc;^T4&bhhKfpS4JUlvMS(sXWNy^aTB5vsasFlLMF96rlLt z5LBXysb@k2dGeA&gPl{`3yF0lA_$2PDhzy%8fu8J1!UhOx{|+FqSXAHQt0Ly!zgM9e5e=Z`6!!%CjRtXw7<( zVH;0pX)q|c&PfN12%w|fL|>+JN0h9$C8JILNLVQFu#- z=ihH@M}{tnT?9x)s3ca?Kc=5F1`sn33P~YxAWZ+%kanuuyUXlnI6(chZUv1(d7nFi0TWm;_w zdOYzM%r;rN%CzW<_YcV3PyqI*&A4U`_PI2+7Tcdkp7a~0`V})Dhs1xA7rB^BOFZx! zzQylM^5c+4!_A6JQOTM?n4H^G`%B=4o36})t+lcDTdAABx)+ymHURmya`_FajgVm< zRj<|Xc;4*GjkJxz_<$%~PLStjYu!=_)7(9`yh_7bl#ZAUNAj%5&X=K_wCahpE#cKv z3Z*%snmKVJ7i6wox|;EchKyy|#`o7*JNaute9<;eND^94OAZ!kWI|k-eY~39QUds@ z7eFar&8f5XS+}u5YvfIvIMrk8-G{K1{tja#1T6K#&XmGwHYF(QBf6cob?)`iqd&bn zG*RBt(@bMIfV${(XjB34_GG)ZV?63RDM-|9eD`IQ zDos1+;_3Vho0La|c2+>|*WT}OHL4YYV(S7+yBbxz{c~kww0`Vxsf~UF_W1Q?B=KhI z09P8A8q!?qw;hu9za+fo=RMH_8jnwdulLAL!%yDd#wttORq>jxJ#C!Z-46LvyynR1 z@31D~6Ldv;PC-4J}mI$2s%%|h(<)(g|r6B>mo1*=82NoPIJ=wx53`~Op2YxvG%sQ~+I5PVK|0Yay zFMTI@gQrm&yi)j0f_iw_oRc3D*GxEC7`p*|8_)sQdyQk-|6hIrs4|6AmceoBa!>e@p~4TMq=p8PGyQ+me7Fs7^#@J1O~j zu6kBxX`&RRu6a&$)`-GWTxk{-^951Fwf0e$qKuWm2gVLC$DWjZ*Y=WkzSHu9}UmD~R0 z%jkM9I^pmZP3(#Mp}sggqF38_IekXn0*_2At_k~5*P|DE@{1Ge_)BMpJYy{5hgQZ% zie<)6IL*f16TH4B_UF+HFl&MLEI3~%ZA(KwH z|L5*}J)N^&f_(hsHz`*gT)M)~wc-;4aTI%7=0%FvTtZlz}83xA@;*f%ESU zBW!_hZ$YhDIPBs`6^o+Mhvw79cS1*|^t64*iGL!LoXonC-<|VTjDHpTYy84|66t7* zO}cO3@AB;5dvRDYoX$YTP$uHhZ&JRA`fi?ka*8%d;T-%!?@??@Wx1K^`pjmtBc$>AQps#Hsa#IAj>yVgB3RvLc3hx?TAVnnmGAijZl@lPKa?dm6Tz3lbN-!TzVCPSXR z^u2WoW*-Og1C){gHX;IPkvDhj(u3?9fVVU1`|SjAF67_W?skbHjfWhy6ixR6Q$7Qw zl$d;rQ?qq$tuD68TPv0gG^E;3WCM>h>g+jN%y&%sg>U_Qr7kg_ueV*Y2>-qBE~0b0 zI}}~Jn6EXivV5=D)>VvqLHKOQ6{D-eZ`QhMjJCZS|EDLlf?g_qg(=ENwzz4d@qlN! z;i|Pn3B!;|S_V17U8>4eG&y#6^yg16%&c7}Og^eLHPIQd(+&8c2ah)lNXK0G>0njx zrCTcO(l8kX>(#A>*B2!g`)`WWEAwkyg54gplE+T~fVD47=eXSBC?ZQEeT{R~k?X#u zcZcNAhZ_L!vPaVoO`BY!dFKZW=Jhg${6OE65IP3}YI?lGEVu|hO}bI5siuV#EB~n1 zusdH2ZbHWwt&P-@?%&(v-b3X&LPy>RzG<~N{V|*WF`m0pu3@iZyg8_cxxYLkopXNc zfW!OE+^&Yi$5RWND&88NE414f`td2}bi`blr?`~L?cs-;e{)+)L{B9q7mEMaZ(Zv5 zNg`9tE}NknJ!sw$t335~yL=}7lZ|xRQ|G#J!48+gql0^Mg}+Vdos6Au0nRw6_3)9I zgY>22NvZHn@R2yR*B|s7(QTF0kuq@p0Z*J9{9L7Z4oiry`IVpVc;dgl=Em+)?4rZ@ ziDUG-F)75W-4svAyUtSE#odaE*Tu&wx6Z*Vn_Dj!rQvluSm{Vu0RBw4;;M8}7z3yf z)awo?x!Jcf6?J77jx>H_K-(dPGUkXm;39@l@0q8+&3>k;n_=2k(Kx1Y((5k%(^*Kk zy}j-Y+s?iF_N!tXI{xB0l~Ky_l&`sQ?!l|RuUT2F-)7`Vj=rG8o&b*cnS86zo!nGn zbz74r;v#+4Lfz`*&G=qkY#Ys4jv)Q`8c2cU3sLs;BtgU#vCTWxFQ4yD`@-UBD7qO5 z>epPa_H#G4hg&B_5_A3sSV1$>Y?2a(HabjfE&|=Xo&_Q+Qm6EWf@XEgu^wF zvUOy0sVOi7EY{$QBtdd8k*S?;ocQ&ucvI$Mf>X6@*n%k%TRlb;OY`_eJ4qwD#Y zp8&^G)z6>iY#t#&X_t*r_^Km;>??j zc@M+$`Fci2e-9x!=*MiBrV#sduHG+gT|~w~-WUJk#e)}m!iFL{#`SxjU%*KX7g`!* zQ8WnwU8?7lk<7K9Zh2i9E0Pqxd$bT7Lw-FP#a@cGM)Y&r$^UA)Zk2!0;y3B#X8%eW*IOLi zrmAu-{FW`Vo7ZF|i2N{gU+7L%S6}>Nqta%tS<6_}6r-)Bmt~n!&BmWE|9Df_{!uE^ zU2(ZT@5YK#y2LjkwV!9hQmHODfg2&W>l=_1{^_L>`=cK1{*1ey`wl)D>ys^8B5}&z5Pbt>&LtBqzj>@zmObPf77hUDcfJ1zhjy1*cBRtRAiSvn0 zq^TNEz{MYL>Ll%sY9!kJ6N$p34L*O1c=sUkszopD)fwPDDRmI-KXNX8I!-j6CtfZ- zK4*&Y;Hd%IQ#oYCDw|47@4l=JhwIQgl`zF-GWgJcRr~zfwb_1@gcIQ)7!EEHvd^n;_!jRJ65vL?=rg`Z_4}d*;W-4=){1Ml8AiWL^lW=@ z$P$0ms&g<)04n`a_jqq(<#$Ugcezeceha~=8KO(h9hk0 zVIw{9I3hY(CHjgP60~|g)^621%T0M)GbkrZYw_2di zt1ja|!1rd)ev-gfuvWek78iA87^aEmOy*o$XBD_7(^h@@RqAo4v6$IJuj z_!y>6sob|ddLANLwmo5T7BOtBg08F_UWXrIl-$L$I0IMCLwtiIG7cX%j)$&QlEew8 zX|s;W4Y}(tM`v|EGpU_Ftk|e-)_E+tHT+~)#;Uavx&P^Q0NnDIW8VcaPKr%Pl_hLo zHK!YWijEoVp=0Tg5Go*`yMU*Nn5$aQkn>5-zcm@ONUs7<19`=w0!vwn8m=hF_8mIR$>1JUWcdJ@-J;?#wL(=%5m>fo>Mj8pF?LdKN_X6?1#2^mv@p>y8Q5r%1Y2v)S&9A3D?gvJT}Q% z!b%XINH3e5;KNCM-7?ek+7ms_muNJ>7y>puWJ^}{)7_6-dZwpj_%>9Amm_u>YL><& zyI)Liaygia1Z{G0K&Zzh8AczX24L^ZT}`=W9ig?`z#@GI$L-LlR0Di&?c(*gHqjtfCado1|l4&N+0( zwD~<+k-oja08B6-V0Fa$STOpwjTLZ@>76=_qMOS07Y=$~^Mu$tt+`k0G>RNnfO`fu ztg3x`Fqj$~CVd`?3la@ZoMRI7Or8m0@~iR% zEzbfz@D0=vQm#GANZQX{C7|@8bWtY-l4}z$hkgH;Dd7HTw!W3W%1`2FTGLj9_4>h-nY~ufzKh4mh@H?nOGP?( zFD}(M2HmusGCoK7MJAGVg*4iWnP_&gmhjnfqa;nvm6OPW5l^-6&cQbXx~Lz zR|`ae4Gwdo2Wrw9zGq_|1K9uzdiy2-3DJoc0|`G=49{^axiv!`P>P@ygF#3ehh9urXJn948KpTZ5cBZ$Pp{T zN~DiE;_$nX1ravPAIpygvK0vYD3*eJ;t+;V`wC#(FY;0N9;Pp>CyF7cBT7VBtxe4)aAUGU$IE_*8BqfD3f;MC?cs&-mGy^r#} z-6dY3Y~v!buHqdm)0yxJYwa$UqD3sH?%*GJ_S#05mMw$ES;%_nW4C|vcoVk7Z!=4_ z130#cZEPhw!1u|{zZOo*2d?RWN*w0A5v6AfI`pbmgsc6W>Jdu)$f<18w)7LuUR)er56j5zKD7iCiT%OGS{1N7s;o+jz zPG>+!X{IBHjQKnI4_M>nr*EE1WsQ z(u9lOd10+Cj2p&RY$>XX=7aqtTSZZ2pn~dL-0p(YaZnuu?RKi8nDHm>UEBy3G>XF^_%@pehNZ0E5!7v+(&N zO0Z1aKN^2t-ONv!1t6qUa=$b+AM7#HS@p6^T&eEjX}S0tFDcSsX8`o?zJjTbuV zl6j9mk7hqEYdn?2?_CEgHc;SilTpg%oGA~*uTaavmh7T{F|*%P3ylXOP@8e=(=J6- zJ8;o5L265yysmVRtj#ER_FLM5-0M{e-=p{Bx!Lb6WNTm+VVB9yO3>?hWtoPy2Y-28 z8ko`*Ms&={6=}^wR2f|%FQ$?i=rOWc_v2*aPc*CtI9NqD*oT`Q^ZMdj$e-+d72Lm6 zpRa6gh1t}f*6iQ_{38G-LZK|@*_pm`B1iF>NTb@k9SY4O%M#a%P5{G7bjCz9n3&pr zJ-?(!wMR+uFkFyLIxO5pS(p6MO9g8Q$^(`j4l$9vy0;#4t*i?=9@VT>kMONI=m~Dh z9PnFoYg)0D9K{z4@;iZ&?tt50fMD%UnY^ZqB2*WJAUVcAA?s`MryaPYn5l{}Z92Ip zl>B8Q?&(wlR~R8OG0c6}!-W=^chwp;d3Km{svIRoHfae#^wYg%X<7j^ai9F!In#;8 zIPP^B_!HXHVf*0Zi&*pcsp_Gh@pgz)mF6pA?VoQ6p0Ly(jQM2p6vsQ*3kN7~ge}V%R?fFM@X^Pq>`KSi0 zIbS!o`$a6FzNa!Hb%a|k>ytp2T{S$+D{ZU%OOop4P#y0bEt;gCHK%aO%9@@GMnB=y zl)w0-XweET&&*a>yuiI$ z18L7jopT9z5r0VT?^a~Vnpxe$;-?3~>N=Zxa4kX?m1GXv6e3&&+FlmR>S(-jYSa8% zxxM}-ro-+eAq9WN(6+M?Ai_^~{vrTp$w3ML&gw$r+%KK|&v-CmMha1!?aEy?@% zC0WvOW$>HlLA#rU#f-mtM4W>L9b|be5J!ET?!O_nh&TvdyCF5fufvCoYB=y&%-vjd zMl4Cu-MH155FVv2M(12j=YVO0XXe71tYGi2^*aacce7fYm{=tVT|)sDEE`t#-2CV$ z!~lrqZZ{Dh53o9cZDR&D7~8+lxRt_x!qVR1F8Ra0;iZ{H?7WhFdB zpYGWOIZqryt0B-!kaDi7`)2$5pl`i(_vQM!{IKSJFKPP(-uYdu@H4#K2K|j%n0kq5 zMFv~@ggAyNHQaoQPv+DZ%SYu)pp)Uth4jZWq_BzPcPAH7yaLj-h9@S>t|JvPzg ztoly;1uE2A@B5A>dW6jYVKQ4EaSs-hzb8du{QQT^rexcTdm!0d%c4?VS9YfNC1q;) zrNLyf*vkvDwEH8vEUY`fGhMQ!iD>0V)B{1bBXuVo)3c!5^hYP(_ckP11dS%L)gIbc z@&3q}wK@aL$?&Ir9Q|``Jg#G7O=D#m%y;q8Ny^hwOV{wb+^;=GKOsutF5$NioKAm~ zQP?UCg5<7FQE_Y7YtPvN96DlKv@Nb;+p>vGE7>LNChD~T}Xwm z4RpS#V6dNit_fC;koS}5`rWcp1b5}~4BTO=X`5(s`G`NW@ZJ_LKX6gfr=@(Hp}bJl z9zn$8#YdYIU&WUmjlYoab%_tzbzE7gCIl*}MG)Ro1#f-Yc>e!b05pCw-F!-gs*GfW zp;apn1)649L!q|rFm-vGV6ZiW$;aeqrzi%c2#_Ugy7<2qPZ;+nG|SJ`h^FMQUS_Mk zOy`C(?i6P=@K{utD=zS=2gvN&0k{ZN8-N7`>DsjOCaJA<(KPA)BL#Fju2WEA6Z%g$ z>RtHW2_C*ule+_u!)iWLSr5|bBh|t($pz~&68ODAyKxvu@(E_$yiHkus$JM_v4aoN zWiMZLx?b?>r~0)X_WiPJ52Tx|AKNV9#rB66nEzTQEW|U4%t_j-mZS~Ut^cNojZ?>s z=N5vaefkuhL64;ih+P5*RlV$rS zxEgbBzApv1u-+v1TT$!W=IFoMhU;gm1l7E#>FM-e<+j3^H{)kiCrUUbza)9BTh@4_ ze{oA!2N!l{Vf=tlDS$0Yo}#Gx?I@de+I~dAIJiP8CjOAk*)8BJa}lsIeNq^-|!xiK)MT88*D%$9alPp|(1A-vKJ8@+SSB@OKt7+Z*PQkjQ3FWJ?yo z*M^UzhAHnu)b$&7y6qRJYpw0@pJX$Qu4K#T1_{Hd&#Cf1x5h0jqR(K+mY5!oU$Uek zK$^oDxMYcBqgc$&<7>XdpGzAab`K7pts(HL`+)jJ|NZ_E{5bpDR}85C$rjP5;Qni} z>{wGsa9`ed@<*DF)lROTVN$10g2Kp|)OGF2)CCG5aRajGHnRT=8TC}!NT=I0)G#ZH z;~Z>)13p8zAR_@k?_gHgD#wbRO+(^EM`%=AHe$l4DW{^IM4NNvd*k-MeIHbc9vdWj zVv`>9_~=0j$a*fTP|!1f1fy@+<`g1Kr9|i{J?r$eVy3-Fe%~p-(}q+r&0Prg*Pvdm z=`-O1hbg4c@|oBbJH1Gm9L0Rdm?=*&vH~0B)Dsb`MfCFwNDJ_ECupAX!0B>DJX3(1k zXKFULS1e+W!ogqp*%zgkvX;c#a=Ps&Q9pe?BjT!KJauPoBm7F-glEov-l%mlbR zXg1&fHGqxY8lRmtuY|z9GcV*D;nkl<(S12r z;|8TfSPD-iM%X{m;~NR2Z%w`*xMz1;KaG?%m!VXZb}_>dIJel;swFkqrwy)%0`iyL42f&NUikvL3&}72l=KuK+kpfml7a!n$ZbcLr>eTcE z2@zW}o9Hb}GrWWK`t-z|JQBGg<4G%)&A=7F<(Y-m9lle?9!Sj>g6f{`x+rhb+P!arQR0s z&?t|7UG=|8{GRD^YKnZykCPr$v=yDUWQl_L-y&~23n{-b|FJpFnPJPM6rcQ@%7$v`S zzpIab%=YRQcVvQ(DcomQk7AcLzArNQJr*qNFO66=dJG~<&=cr_GIVo9365^Rq-D?& zU7mSVOm`-0Lz?KCrYn8;A2FIioh`JYL665_osF9ko|^vUPq)T5m2m&|#Q!+K=HWTx z!1t;|v*2;oQIm;SO>rr8Upj!eGZl8DRud*g)yJw6CkxZd8GJ z17o|xF!N`c7=6V%uN=&CZqP*3utAnJK`P<0DqU;3Y{t=`*GLl~Z(0=;_5zOMQi&k> zqZbuUZJu+f=u~Z#B9i>DWJwBdG%H+tJJ&INvScTfz+20Ker~3*^UWRW$m3qHBB=P} z@kA1HdsETKG0iFXc!c<(^fHaMXC>+888SAboM;~EvfjWk=7+rmG{z4mT%x-c^IEuA z0|dnbPWfV;GCAaEyfzT!x)Gei{nP5Qp1D?Olu={xTFmVzR>U$dfww+)i&Skq=}v@T z_->cvB*gKRRa|+Tf<{0y&+A?@z$mF%jVP zfKu#WE#||UN34$EhPiMC_sFTjY~MMEQII3E8%MpFirG-Mg z5xLJ1UCLjuTwj9N3yuyA#<+$ypzJ;*brb!r+Xjf1z6W%9Y@MlCE4snuCCQHFk-{hy zI3zq)k*_wMb6L|G*S~n6cR^n|ZW$Ha-#WrqY&+3%{#96_M@8lp)=fpOC$1jL^KWaU z>J)6Lmk1KJd{fojC|dI&b7JZUNSPa{u7@pPg?gvroHm9~FW>8~y168P|GjAv-r^(M zBSsukRvcIU7S~!_1*^<*&RpfJ;-E6g#wxq+iTvBnV-t>#pBK1V)J}apEw$};bWmM* z;0R0KM?_V1boYKgc~U2yFreXK{o9!16P^)&o<;;CbDQp|7FzpdZ)oIWXq2)Ql7E|j zdrN-Zf_j;&OeglkB5NnKWc+jUe5SL5?)qGI(9gqrp0NBjbHkuqgsUDQRe|&X1rVsm z<|VzfTudI39-G}Juk|>xDj!auv;j#8>~4ZC^#|3P_Yenm3ZCx&k@?0=ZaBI;Uralt zsVv#y-zgIsR1^D4%fvH=R3t6p&GbhmPJ`zZ51m=HrliH&Ao|1+L`=|Pvk0;y*JF81 z+`Mqo>cN({oL4Iie)Hb|q%x7aj3;3~BV{mp;PfKfb`-Kq>6Ydd-cDQB6J6}i^hJzT zy^!o%64(;^P5AopV7!{m2<2=!=v7ek9HDc8amZ``Q1;T^a4krnL;Yk)(oVv*7j4xJpQ2$EOb?YP+AIV~`k9pR*XpbOFFMCtX?M>!~UU z@?ypD&wM+r{_y{&1fZ3ZaX+P917H`jI%(qQQ3hw0j)o+puYP8pvzH17Xd!N0i~tDD za=R=a!<_A8G+2xjM|NP&g(sY=?T&0OKze_Owr=T3&;HGsPPGW$>b@l@+9bJLx$FF9 zbwyK(Z0f>iN`HL+_{P-1b`Q<@>qMS8@b5o*-R1146_#;{z=0OO^0_u?sI-_xU_C9j zO(S^aPskgVk~CHNfYPgd(xLNc^N3J@>pirL35GC9$CG$;nn#r{34FT041dC%US~lE z(u3vdyGLsDD5Z&oWlDW(ja*P^?)fa6-oJk;t)a@f5_2rrtQD01-0m^N`~>XE41L2| z9}zi`HHAPL3ZQaS$E{F0h|xI z{4%J-jWk`Ejb(UQ-8;X3das}HxniARz!Ln8@44F$E6G_@71OkFy)ph^nR%F>{!x8d z!zb3RFZZvPo1Hpv=Uy_Xduw*9e<@70Y1yjWk>}G2wlwk=^=X}KBFt4Qop&$+osl_+ zmdtHDz{QdHEc@A?6_T?q(HWi64WEG>;8wx~#_z13B93+?&AJ=yl zu{*iP%Fntk^B3_sdd(L%7*idic=^bCylJ-TnF`=kEOA7N?$(xd>Pw$32J!NE4{GSa zRX&q~mr)(s46}dx@-5CYf5&~SJi#}AZfT|(*|=M9&Ct*0?D!h&RUem3 z{;mo+n6(7%MB3gdE|?;hp+-D&JaiYwM+bviMXB$tISR|G3{7kgr?8{z)hk z&MG9GQ=xAOOgsy0zmwX^L&n!S3+4Q@2E1bpEf>BqY&+aiYt!!elP>M59}ydR=!h*; z5oR+%61uccNDb#tEU z5xCS;;o4?oCJiNn#Qy{XLwk$1k`_(qJjq<*@2SP?etqewf=!sz3NOH*!}dh(Ga?|*GuoUunsP5 zd2dk|H9WjDE7v*_a1;di@aePjjAhf4KC{W0pLUIdi54;YFz>^J{KLa7zb6HST6H#J z%flP7vgUymBixewevKC|Fb&LOeG(p8wf)fs9$OXR=ARrVs{0E3PC}eJ2lNcUJ+GbQ z3w@$dXi-cN>)zW*1B;!CD454!s=h;tZ@5YFY1|gf!K&EbXlg&ZS<=8|rQ&3~x|h%P z+8#Rg%tW`O>F@#$W&%j4=NcD?Ry{y)v4vuHOg-nh2$d^Y;SdClW!BfqVR$#IF_ zzXTm`ed~`d`g)&KI&9dKop+tmG5+0nd>8s`*CrJ-Q(@vc&?(%vsiP+{G0?zhy&9=6-FkHa@n%pYnJJlj6!z6z&b%*bxM}X!ek(ql zG-|zWGc~-TesKjoR4a9O{GEh?;Jh_Cy}&^ixc`}OC9-4pSiUt7&QFcJ)q_hN{p%ub zAA#9<1C$#3$sWvJ%9BoLKAg3|~o}tGE(f+c_yGiErJ71zN0-&7xCkB+L9c z0R}@%l$5=ZiCNT9T!~4zxFm?Mg_5Jf!PLgxoAx_^iqsEDOVFUz=ZyQ$8J@GRY@U6j zd(rg{`-rX#Ch>DQKD9!$Hq6jaL*1`qiCkE*m(a0y;qbkzv(USYLpMzId~5FZs?K1Q zfca}VC9CPjwNDNRCoK{w(stt?99I?W#~|vz-tlpM02m)D6Xq7NNz_NS{_V5?E6Y4zlR)Bk1a4H~kh#08R-IOB$K(8}8BzSo!IS2Dr1kG-e>Z=a zkG5z-+S)q)xi%b`@kYKUW`E>mIsNvOkCjPgpDB*wN8{`If0`1OdO8?CBL95yvw#M& zk84^yXy!m|ze)#+H-gI7c;7@Ze6|{o-j%PLVOdM*SF3c`XM5-O?=o(wKbKMu9N3rb z2coM1eMKJICaikE$-3Fe)Rp3Lxb0reqQgz7=uILfqhZBC$YtjTv$5!(;LU#KzaA+! zXxG^FUqYv1O(n$!JfxF@f-*66z`@{dm5>rq9QymvouLE*iL=~;XCjy-L$mU>u72}$ zhPLE{0v*WPgI6WeYAbKqUUPV@@&+@K!>2%)1Pj#8$(zZ-tp%@&vm*pTU*TYEtoLNL zUv7g#@hvQWpi!me#A{4tm$>)-0?@w92)gIs_{8>&zPx@;Ns{61FI>%DQ|)}cQ)1s; z0Omo3lq!mQ-bm8h658j1(t&vnsA1BFe9fRIIUa0k+){d|6F9ERvE|p*QjP6TD*Ycz zhVNUmY!<%lCeGfIb3gS+Jk~RiD$FU-vo^yOx}c0oQlUWyJ*rmN^rt%-m+@1eonhSh z>y~#4uqCVBMh}<^bk}mo3E)R1zjd4NI{$XmLTPBXYP;U7?efyf2Y1)vM&4_}WJ=50%#Os*skS!h_v8!`&icY> zJi`^g`Wa*N1L)2{Y~ckIa=7eTa;n=G$;FgYR=y`{7QZB<1iN<*cE#M@$)CF%xV7-B zr(N@bKiHUDy<1OyFx(ub5^gKW`D5FgTiNF5E*~-({k(gp(N=Mln|epVhaYbMk5ux` zf(^VrsJa#E)d0>zuOi*YwNi5RM#z#VJ=kjb{iEgSLa!C5jPS)f&X3xk${%PC8Y)w4 z{6nGTx7-?CGS`&zRtw6~rG`m6?8&@Mb=)Mc@||s%`#mcXaMNvRctLtC$tt!=1b(TQ zxA+|1O!50jba}(0LooZ|>sgAQl@+p(z2_alRzAa#%#%=d6^7^7lp0Si5ulD({zuD% zpsOmuF5*#Um-86X^d9<8Y4=rNyJT$y9G{4LXXYZPq7GtoJX$NWNPMtXLe43p0hPZQ z*t;Z`)8ctD8F%q;2d|7*jBPO&wD@l7RZ^;}R!%2yn%8rYVS=dd($I#3HP&h(1x$^w zEKFgEYbI@KgNivT0g@msz4SNXj$eD5N?m_QvD|_VgQwUed5>8AlgC=Kk97(zHV=$# z1d@)ke75gGd(?ina`=p9lY5TU@N;{H#;`SI1cy`fy!cw&A;3+rpd183=; z$%cce^lpi%!ATl6=yn7sNm<(A^pB`W+b74~g5pZ>s+)64X_5W2QygFRejED<^zef~ zs7>|zRq@8)=HkP_-A_Oxwse|dy)o2ideT`NgNN_H2KDx~@)R8I`#-&zNs4)DB4&&A zPKx}epC{I#lP{3J?;1=Z9>y%hx*g2&pIAzV)b?t)@N+-P^CY`TTQnZOguCbdBELSX6tBUPZ<_Dfsdb z|CtD*M{-S*Pw-Lz$9Q!4SmGf{OD{(S9u#;)@$fwriv66X8GldI)&E#aR3>TrD=iIP zg<22$zKkRpjZzuu%%V?$thLQmwQ94iZ+}N%XoOwK44XW4e9|W-h4&UPzcFN6id`7l ztqRA4@Y355tqmjH55|yJGY;4GP5L$MFTnha#+PHxv%Dsc|3{v}XALlvyw-CYz(pp~ zGr(DJQ*Vr)-`5o@lN$OnSx5ZuyR{P?e^SXtBy&4&h_$lAR9efvV$u1*!m>X#| zRhwue9?%m#~WAGPZ1A_v3DFfR$XDk(IqWVTWTGM0U z-N|iqdoTN;RftYp=`uM{RnmKj@EHcy*%K z-_{Io^x0Y(>QN~i>RO!qk!cF@yrksNlQeW|s%ZPNRi7p`*ii3-TOPA^{@IS{ok{Z3 zqwCl-%+o?t!4{AqC_Ky7(#S~cdepf+T`JMuO)O@hzp3_8z3(u`7WQs2d!R4*&{AK~ zdSOt@$j=o!GdZ?s;$v|>Z_IJ(kycW_BAamVWeOj_ksZ3YL)r}j>W(t#CB`wuVI{K! zcO-Tkuw{2Mlni*OK*t@q9!!}CStmI_)wA6d^j)jzl6pA6200tACWgo5_NC;4Fd1PPRHMn`$dyFHcaB0X!u`OiOcVl7)?8_N$GYj(lCg>Xjks)B& zRc{?zCsskAUFlCV(Bz?%2)oc>_4SQ}#G};D{#3p!0NO$QeAEmlc6M!V#* z4Ofr4VoL%76un+4H4~eYP%Xv>L1G5DJm~_}@wt(J>;HRc-_|t8M>;*bMlQz?w!v{wjW=t>L^ntY2whFR!1+-dxna7jq{_V z%6bM>_(pVRA8zEz@H;eR-(q#ehgqNY%+*Te-A%&lb1l@_*m^KIw< zdDO-Av`xyNWYW3$b{_`ZhREY=YoH5h#^vdFE2@1%8la5r6pzL=t$aNo4E_$)u!FB3 z$^Ks#Oj&4-k!N#^sJ6|&4F`W^F@Avvv$F5QgG@r}jay=-@wvQT_QoS?^mOLNZQ~bh z7X~lzMUzo%_b62ukh!`{%!20^(s%!O6g@SR4y*Gb5Q5Wc$vSS@w00E6s6S0Jl_`G! z|FqY$ZR#{mFw}LQ)7{X%$*X7TCuZ@H!#q|@Ab z!W`Z+ym+#3N^e}ryeL42x{+D_JBCy~8{6{Jzj0{qPC{&~vg6I^#19pZ+W%Wij)wiz zx^C(#1zgwe`4wKBatLqtv3K*5$8#f`U&?r1`u6TQ+?qi*lA`&^cS{yiYYh<_iS*esTzd=xp^Q;MICi=8K?)gG zl_78a6iO)TTrNYHWYrvllN6SCG1Xv2$MQ>Wv(dxTq3zi7>26*-= z;+s>N1{p9pj91?0XA~8y9d$uRT;;5Z67Y?O;wecG<(fR^^L5v8(_4X*=1rk z{`lSGPtB`VXqPS4dN{o z`+KuT=|1W-P0Pe2!c_}{yx|saWyR@889vPiwTE@YcvRYQ1+COvzQ`7&T)dESRplCb z8Vs;mX^Tpl+*cPLKGK_839|pEJLH*&CPD~#qVz6^eStN17LUj-zRSLJ6!f&M0qVt7k;%2&JsjkX@lN(LyX^^4Gbj*IMSp3MZ_Khn7PnZal`TStiypiyOAhk{(&F z>-ouDv$@gt=7U}{4|AWkwhQhX#)P*f_-u|=yfeP$C)a!4Wkn;Xqoo4IRaq)gw8qexuo%d#+n;JUIi*bX-Q?czw>7* z_+LmjLauKXFd)0cFb865oO#)?cHWj)k`paO5|QNYxANS{|21fev*d8DZhkxV0zMb` zsn2&Hyi5W)D_%O{P?P^}Wba5Sw2`3G)2=NBRMiDcj~B@a`SV*e#fecBys%qg*{JT;)@Q6&(bkP=iIDec&lF- z|DXvfX_RgOw|Hwe8NC%Rm4b0XXn6+|uS#uqbZF<@ z(R9ip#lw2`9ua}1w~DWNoCi4(QeC8hFClX;+Z0Hun{AIN-o$>-0HJ{Jz z=>`E|r&v}$j+<@|C^rqEy3e)dB3hLpNxvd&U(pagOE#NtmE|fe{gz-!?fF+BuVv4Mc_J4d$Z{D=t#nAO z(Bd8d9}IL@#ibUcKVQ3 zxcsYFkk-FHfMvK5W;_ak+hMz$TMbUfxv6u??gf(~6Ll6BD#iq{0TkAp-hAm*WpA0p;x znqqYw#t*#M-_lIbsyF0_H>%*`z|{@P&E~dwgp@?{e`$IoQWfxTOx46k&#&QC$XQnn z)-d$Q-m_f@xaZna4;S<-A};YMV9`^W(oZ!>)9JWl>!8_clc51lu`)kFO&j*~%n(1`(_T>mHD7GRB^rb`6dhzL+~-{3YU+H=N^PsvWK_&A0h`3 zI*T{OQ|HwwrDwBSc04_YT|h1IPHsV*<8jYGZ_%ym^Ye7$)4!pKQrv1*BMafZr0#y+ z(8Ui!0xk9D-^6wVOKaj-x>JuQ5?Gm+8h5{J#XEv8vk`AD8>9EW7|DS_85gzS$G}b9 zVmq;BJgyh}-t@QL>Z?aopef3u>yFahQ+-6B&rQ)Kd9&;+Bu#7Xvm)Xp@t)gkaU*&* z{0a4-?*7h8dhoKyv}LXHc%`vUv&Y0a#vTPlfQ4IW;Jg7Rrs{ zeGd!x#q68$0uSSf0-mNL(?lj5It`TU@V-_rUf1l?khSUF(iUmDky;~&2;P8Z%V8lH z*7%{ZEko$>cH@xZ#${ZRT%dc9N8+DN-3?I?cbxuth1#2q$OL;!L@!lap%~rnK zi8S3$z>AL+OC=+HzQ!tK2-=XDjdd*&B~=*)$@RaUjWtb-pW6RLl9-#ri@E0A6v6zJ zut2{`X`#!m*(-3Sp8N%*2j;dogYVm?->f$mh}+${?pP@)Ig+vK-*3!261iY4K)sZ* z$jd{uwzGye5R!t9G)O}QkN%p0a7<%=N!YH(xP$jIDM3#S>EM=xHe>;ZKgMQ)(E%&2 zkpvOUJ%8i_$`jx(u2}k_qAj!mI8~7~UeJ*`^9X&G2&2vYnTM>2?DBBGUW};rQ2;q* z37}izu+}sLA2x9%RRv<_qQ>XqSI_nh?X_J$M z5D?)_=tc@||H`-W)N6UsUc+XwYE0hDQLD!=TO1YuMV z4NlAtPd5xl2qiJWk~;%ljDv;$$RHjvTHUr<7+jImc*dhv;at>uifhTge}VdQVmxEY z>p=Z?#_gpnA7i5u<4^rG{O~Co2?n=b&zSO{gD^KhSWX zbAQ$T>yrYd*&<|sizROQzWDr3s07&9{uM&A$Md`GXnm9>tG8k>{s&nLlUZs&DO4CdF_rH9Mk} z)+a@kT%Vz`)%T>cJE^<4Q5Ro)i9#-WcNGy`^$1SmhuH5MzKzJ=AgjuPBn0Yg%Q+X1 z?ZYdIp3PS4wejl?ClSuucY#SFSIfV&;I$TXoF!LYGrCb6NStEd&qrQ z;jh=ZZ+os+5q9%P#(#@Ux;L0Av-T~OhZa^1xEiw?r`%A%si6?y+M2nrl8=uqFlc2%v{cr*Pmh+${t++fczY6es2JTst|NYvtE zUW&34_X^}c55@Q_ht4H{k^4cIP<^Qc`Ie^x$Leyyr+4A$c;p`7+5}HMzS?d1snTHU zGRbc70M#Ktj=}tsHx+h*ea5HIENrG{oOGU8gtt~+fBG}H7CxBOU>u*JA?&sp7qP67 zrq`~SQcSrPMP)P0^A?si>!K)X*8k!^Ukjr=nF`SZ^hJwjVeA*pFcE(YLFdWe`3c34*C>uCYN#i#PY)3v!Qwv8 zTVY&)1m)jWTh$Pmkr`y2tHU6tsLBBd9w)s}_3I&~C<~dpV3@Nk-d9yYeUq7og8eb`9-K z7+N4YrH)?aEX%Zk~z3{j6JF>1fMee+-zb}kyzG+AJO|+ z1M|HXZ)K189SM&z36Oo??7mgDy_6MSPb<{B!qTt$a6?8-xktcj_ervK@mchn3qPDZ zpZHaNi^V)_9xxFBEzA3NcrcNs{_|20_|XGDzo$ev;>7CQIk%V{ z?7h3rFHbPMF7&0%1elt|CV3i0mf8`b|vgiDxZ`RC?F5q zss5AHb%G_AnpXV%vwGh%Eq7SK`*!TezDc65%>=4@ejJ&^3Scwc_M`*z{YSh)c01f6 zSBAXOxV&TygKtdaLwaIvIlK{uH6OjlD)yM+3BMdKgDeI&7}Am;B};5?pkU~MdY|Nl z0$M>f=Iqko)|3f%_JWHw%x7z_|Mif&eoT8 z9HEf2^t$!SzA;IdGju}6QGn6t@|m1MmZR0r63G0;_?_dTs%RwoN5vQ){*b(0XYB>w zoax9BjPwP7r+*DNo@ zbEy9#8^~CNhTDt<9NH z6P25an)r3SecnJv>oH|Pc*Gp6xcPEY@Mk{9N?ntB>1lbx1T|KX*%9jqNF7(dx8WC> zg?jA760(Bp+!=hE4xqtFFIGbMRVmD1o+>9YnZ6hNcrratctE z+^rXL_k5#$dn}zR-qj}Kg}w6;#%yBvVM+AH?2?H(mL#%=z;7SDa}Zo{Kbiv*Dzb9- zlo$awrjOzbV?+y3-V3E~g zlpj(noQC3%dbP^srE3-$7#rib_{uCUj?^`iEFPbAAA*`O*sZ$x6;Al$F2m-8PVj|`#>rM#pNOc96no;7RA_voP8*LV-a!B zz9g6K1xEYM`z${Vj;_ezYnwAoKk<+%I;n7Y(e-LuqGj~v)%E789J>KGD`cId(JJIe>f7;K3FAcU?!~UGC5^^p#IWx_x=IYD|lcjZcagO(tFN(cF?&)hi85(Jbn)@Be{M?Hj)6 zUY)hd2}Wtb8L7l_1o2@QD8ISHSjnUh)Yf}!@vv869;hx#>uIpcvfO^ggJR?|t}k$v zTOv_*B@DZ z_wk}mQf+*?)LaqU@lH-3bn41F-sQnMYa5lyM&uZj5pWPG<~BNxD+af`1ky6jE|K@o zkY?;U5>{x`I?V5s1!=10FmkF=b$m-B~* zV{gbop4pf7Q*%GlaM>$;^tCr7`(Jds@S31vA2_aC-RJeOL=keoDyWyz#bI}DLQM;?9rtZ&QFOuiZQ{3rQ0|)^{|HD2 z7f@F1S1ye|cwtO|%zc_X5rhgSu^F}^if!O=;+X9afcI%8yHYD$g~8!-@?HUC;?)t|0TpW~%%tpDgzFDno>pD|nV*`j~aj0}}Y}PI*vxtcrb5?f8Y5~l-qBX@@ zBn?hz^fi;mE-l0)<4YPH|JUmSK(C7l`(Nr`DaX}^ z^6i3=wz%JOTEgbb4*|27)P{W?RT5X*`UWqa=!#6R>AAKsnpx!V;+^RBxjMi!P@Uy8 zL+>k}{PzZRliUJ8U97qwEPZcZ3^~{}+7L@Q zKU@Z@XMAH)8*i}R8fZ0hw|%~SqZiKMKH@BpaZYccs#qnLR@bxV?2fBn+?JW6}1N@eZeH&)NjF8BN;!qGi%c0@~{ zS}QmGa&*i$Ps&H?XI{4Ag)YF(=Hy>?>jvrSVfX{2qdH2Gp$T$0Yd z(Y&C{=&GHe8m|Id*kM&ulcpzok|3pkT;yfmKk)lN&!^(wzCRK1_-E|~=IQo^Q%G5L zz`PY7mM8L!t!&IWI~LEn{u7zG5pNvdrnR@op2?ep8438JnoD6`CL4ZX7h7PSD3%Vx z*ce4uJ!-cr2&%Kbh;?xY_SScRiAt1j$^4W`s8xc~>QB1})yoLBD9PP`&bHtjGB{ln zujHlll7Eg369^KU)5~=aZh9fz^$;!`B_vlVo6^%EKP+A9^uDAh?kmdsJV{xkF|9%m z??0m$JHMTgqgERFcCk3LV3cTK)WQF<)--I#Mu;Xj)0(*4zbPa;?Bk*ioyqcRArZbk zW{Hu9f|6YKPmEi?fw>c{X(P3Trdz4*3C->9E;gPv@2$%n%AamqB!nzj?EUHAt+yKN zFCEzH?{{1~m0Q0Om3@Q9cM0PT!d|kKohqyvW9X@&+UGwB!@!sOh&i%*k*rVVe)(Kz z?C~1FJZC}%gg%-*4sgLKjT1+YH!Y!tgb>#wjKAi;9EQVgWiVI+Q~_vxMMP-*YJZ-E z?TcqmlIq;ZCF8AJK!<$qUehk8T1$r2dBFLo&XDly)m-j683`Rl&et-?w)EF}i3jrQ zzPZS~R4aXFwz%`ij#}7`JcdKT&DmZPdl_6G{fnFZBkYkXI`*W@-3cu%8?(m7w9~i`5q+vw5qo^ZJZRCO8CgOD$lN(xe>JO1ugh|q~#E|wj z31u-tOEm9(_q4eoH@WK)N3uVs$m$mZV%rSac8-)}Fh5Xqs14D9{A2ilIoZsgwUz+d zbx3<;4PR$mG6TlMoYON0zyXrUE?9hCD2ufBzgnUo5Dyy7VWh)w9n+n`O(ZtLaJ!g$ z77VOXA<}=@`fiYbjTH1pZVF8hl<_x*dY8;TrwRSt8qeQ-oxFn_T!AKg(eAuaB+QT? zI_29UKXZCSbjmHex-;(6EcbMnC~B+NqX*v@_*DcM69Q9{w||hmgpO3O0h>E1S~moc zxJ{Ni&ATT=PTj8xfb}$$%|`-{Ug9O~SPNbGcd@6OUI1H7s#PB4a6B<{ARjeMbFg$u zH`ToMu3FjsWyQXXyMlMa%NC7JAS|}arA-=fk=FLq>ZU(S@O4XxSma?_U;T>5wf)}B zO8KK~(Ddkzc6HGLz|A{2@{{#RPe6xd_|=Q-?HKzaj*56Utb5+v#9d@bA$2i&Z}gL9 z3-#Xa&tn$Juhn{!EBaFvU46|VUO3~^<0dfb(%J~T>5bUbv6%Kowcl9DZTm`IMyhU8 zTmtO4jxJ$&ds7#%iNhgJp*qu}g1srmU04$d?OfoD)R&$i8MC^i`nKbUu?M8F8L%nV zFzFH}F;SW4L1eLa?}w>TQt{z076lQ&BmMaw^kqM-DlFgeYBO4W+($CeJ`ss!;Yf>h zpOv)wm}VfYs$qCJa0k=W#^~F7FVp8nfWy5N8?)ybOK7hs0U{SM#~FlEk|Kp#0T4K8 zQj0W>S>@5l%Zqka2NR!9cq0pG6Nb81?S3Ms-fEi-$xaogeI7+q7IoTJXvdigfuy^ii!=FLd*;Ld^kYS5K{pT-D>|-|ER=Y(TfbMws&mrTMEf>CWWAOj9=U_1By|nE+ZIGZ=7X+V&J-Bk_`Rcdq~fO)rBFH` z4(-xft2vPFtrNGuUP>uf)w2{5nJ9=3Y78LN7neNm5L@{M*?{n+^%Ddc=`cHXD~BI! zi}rtfXryTOv_c)w7YG*fYvX(LQl`3JEk?vA>$ObKLj`ocW-_Ti=Ll@`9W^Bttvk1P z8#()S%$z{OIR4I+S5Mq{7lgt3!+p89#j-?tmm(bs4W6U#FaF8NSOu%Jzb>nZ{JrS> zNO9-O4q9`thsuZ+6#E^%g{5F|D6oEx;8uR&w04;Dgmzqv?y3{O+EU#uMi%|73a$Pe zTt)p6H<^lS#bmM{5v=CGny=7sfcOZFMc>J^Ss5grlf(HP>CXHdcKm{d4OhPSd50K$ z@z4#eI$561S!cbVA!+I}v{rq$ev~?s5{wOGl;`BAs|s!#1Ft7qZe5DU*LP||n&$xQFsXsDiW5!9$U(Vdx;KJRCF{FeOor;FZ7=^QtzpkKdV zC0S73udrq==L<)2P$ND78o}-my-M`)_-DAe-_hG}m{kT!*9>g^i62v392 zks+;-A!_Qb&^O7yryVNs;TeU#uWBV0Cas%FJJr+ss$T4QBkq=+#{AazeQffd{wDn5 z`jEz}&Fsv#L!tB(%1%k)J>QJlx%53I9UyPNsEqo)=Kh?j^mcx>^@$ zwqaT92nikJIjbNeIn`GORi}9-sXzXHMtL2It~6qp-SgUJeJt;biw7f?@8NMgE2b`~ zqWfP`=QshImm7XzNn!6lWwwVa!!e%1EYDX@Z}UK>bbe+t z*ENxw8V-mvpfttawchp?8j})f+qZ|f;cq8<(3$80KL1YCf9kam)OWN!?--}8cvSj= z@dnE;%MHd=Tj!;}`>=G%ED#+ef6aXzD0}fs(eWqf;^_K;u%msepVOk`Y&@j&j3O&2 zuUADX$^w8afb`#-MB(!KB9ynfqf;}Zl_jBl)yt&@XIp-wjO zV4Z4_pV7DZFbVhh!3=)jLuKd4=xGvMMvl0!*kqX^4`9}`|Jk7bx~7cjf2BR7jGkTA zgrdV1Lgb$v-u$BQ?yNJf>yY#W3?o$n^EdvhBpzb207w}Bf>V=$HnWI|*Qqf&NswK_ z>i}T^Edz58Q;h`n)L;Lf1t9K^VM%FKCQl*0u$DWYo&^!pWeoE;dX5mF5Q2Gx`ffjJ zO~2C{Q@xY;xGEa4TF5W0G)}eup2WfYl|1r4ld?-JL2?e=poT*nnm2R9|Mhc{&3pZj z{Itr$pWP(d42wj*e^uD0sw~p@D>KIVE}mPribByUamXF}6-p}SP(~}V_o(ThQmo~! zy5u&4*F6+kdyt5q$5lf{%%5(K@QLSV#WP|doN_9x^@50n4W060mPmW4=+7z8ckJpt z3CML`s*?y7WV{4)^?G`YZ9Dxmg$$^}(ffR9^wk$JJU58`I}i#(y}w_hYgi>ondwJ9^aukgI-x>K+u1=S7TJrXh z=p`3SaHPe6mzCbTZKh~0!9kA^-4J+8eaX>s4T~kD^W7UeRaltx94h;MqA;BzQBWgN zj%`cmyyz(MQ&1y#u}3#k$8TW|xNJYu(l;qRy*5VeeMx)z{-UA(@NNUsT1Yy`FG9io z)1G#M(~*bI3Rf|V=sP%d5GOuPSH0gglOrxYF);5HXHLwrKEcpNjaTcsY#Du z-t)O>*YLfvF&r$`Y9XF5b@{IS1>tE_GXa$swAFsk;AS^KglX|*)td&7ed4tmDVdId zj>BWtFksUjv&w^6Wx0vl-GSW?#vWI%`@p4VQ0P&kRyl?AST{%gsLMrk3Mv zh9BxyzZp8>(Mz{@NHGS!R@d|kjRz8F$7Iw_49 z`|y9*`s=W!|2O^{1_ulfHUTAMFccIC=@=~`Ap$BY9ZE~5jD`t_#6Y@JknV2j2I(G- z7(E(B-TQoh*L~mDbsX0}`*+9jj@SEqo{#7AJY6WfEn(*@?%i^b7Q4IGB?q#K$7GTg z*zi0L%+dONCkL=2^~TMw)X{D$ik&Sj18#T{I!;vfN{2XwF$~bn`aC~R{KxhQb{YV$ z6HsSbn0FEP~U$uQOunxsF-E$3wuyLbW(GhZZ`u__XavH8PJecDM^reJiNRGQ)l( zRL!CaP*0r@s-~cYMcYWJ+RYKSz@Lp=E1IWK3?Vc|<=9a=b_RfS$@5;2;cD2@0!bee z6I}Z)9c&;&+)^Hlvx1)S?UF=zwj)rynW0#>_0x}*h`Bk#GEN}@h-MPE&Dkol!(vr1f!76ZYJe z(?`%WDsAwWw7nn8*IKT>grcpfTi<_AcNl%GSSgr)U}gNMNOdd0iRWf3{&Pqj)C?aa0lOPFe0xWcIdZWd@GY~QmXI6out&Zv|(3_dApVtQ03 zG5xi%*CSnc`l(b^#kr}}?*&`6T4C>f&AcChRcEs>&8g-afq4&KIYzx`QR;F*Z^P}& z)RyI=x?MN#Y5nQf5Vv!F$#JeRmFD_SfYKF$X`#eeBEWMzDyQJwZ|(iZ?< z^E`%O8B@s{H}Eswy5)3^bGNtfbG`K6wX(z+H22~F-(^-km`*Lr;d2Ft>W>{37}y)QL0ZeK)rcAv(KB4V(zObF zA~nL9<=|XUW9r$LT_W}4{j%HL6RUB}fv>(N*N61YQOd3DkG`aGw&pE$USXgul{@v9 zKMwW1$xow~FLzj?3xJDxtyrSvOAQa_`ipRo6T!vv+k;_Q_R*We+w%lKh*Fwc)145f zhT0b3^Fv5)Z}Tgr-HiP?LN2BZ&%LP2Usy|CGq%+XBRPb?7EBofWXfVZ8WXN^OtQbD zzP6yZWcNBC?S$iIDglR2fysup7l^71ZTiWgK#BL9&pxqQlRg} zR7aR=%clv#yqP|D`|{m%dgG<}wXMVGRm08Ec7OK!)UiUS<=Y;U!PhA)J-a_2MruGy z_^K&-o|q6_Dtr!u@B9w?rU@1go6i|!Y%{;fvdLz4A!F)pA%#l<%_%gPLc{?2-7qJD z0bwA=5y8_Q07>Ql69eVSWeh;~}R#Y)) z^5#)*muBu%b;*j_9p-vVrFGNuB*SQ`mfi>YSQPXkW348H#C^1CwHN%nI^B9*1KTv^ zpS~3~Z~2neG&o}UhBn3Z2Pig+Yn7N8c9_%qTFgOHt+w}`VVv5u9gWlDbjz}CIYn$F znZfzeTaa|a=xhf$WbCVp=B}2v$K=1_l+H|}|94lm?Jc&DjH{y5 z!aNO9Tc^*CT-V*!d+m^JEmFFY*&{>EhV~)7xhA3Rs?75rmhXQuujYR^)a-4zn0WNX zh)%!$_QINbclRuWrt0IiXL`%oC)?6$pj+;IQegR+j$~zBk;Lwym_)Ys_-Ea@Kcxjw5ufI_PR=lv)UHi=bW~;G3-$-n+>Mtmz z0BbQ`>vd3Zhzq{|V5L&Nf?7!RL}*EDI>c;Rb)QL|Rym<4&$w=nyQbs6UQGjw zXe<>#=X$iweHXakTlxBJ!rS7emrZazhn*bnC?D2?o7#r27t0$>IVmT_8ug&OR3_xl zyG)TAq6Lxr10z@803m1iW9N{B#dQpgH`%+^qg!gZ?5{`8;=%T8oxACug%C10@BRJ+O zFBwjx&n1VOL)P7t7=O>5ROr@7vX2IzhWpw0K#a5s=UQ^`WejFi359n@LXFZq(`6jn z&Z6vZvn$@pj;n2{He3W<9FEKEz4%Av!Ad253`i*$MFhbM!&oeq=E_<=1UI#fPL;Dt z3DL9L86jSRF{8_`^Al|Gq^Z6WtPL^(%}G#g|u=geJ&D?n;> zJ29fvbk7S+=zex6hTkRn)rZ><5i<(SccTvb@RvtIx3}#-* z34v?UldU!9^nu|z;}m`kaTv+lCpN(}CgJ5B^qQZW_zgGD1})gSlK{MZq8>F;oJZQ@ zv!FkUz^g$iJfuG?S7KJ0fl2!0t~=<1=izOex9QzLWeb8 z7)Fr$WcW1U=u4wES%m1tGjs;GM^^JF_L`1DoM{PTx7LOT4r{VatiiUCyMz7;C-sdF zW06H;dhTyQt-X}q*k|d!$hNK$RxX!%-Wy5eFq=zIM4SA_xfIEJRdfv~X9e)695b~@ zv}6-CeGWtte_}|U#oXL$+;A&kP7a1he~UKt!G82N8)sl%&A(fkD4g8C%D{CkCbp!! zN+UD-h83a76p^S>>U4$pApCx;-tT>X$(I|^XKlCK4t+DL73R|C$SjU z#sHtBAXs0dE_+(5SK?ej7hWT^@T~a9>M$keodQG@*H9M~tOZ%p477TRew80>EUF!*dBe5UwW zkLK0Z5Ybt}N1bkw6W!*Su|WQHQR>rNmgabU%VA<)q-!9 z^Aa>S?Kf58eOjBYW~|AcbL=pYGvH3WJ^TW3o4at>Ey|VNisf4CO@`{W;6m+V^0*=` z8(8i#iy@^}e;-bt-8#SOPrgAjt%ct@<}zhFuFE=i*$q%SFUv?g?!vTpP2C)bMa@HtQOknl_Nsf0 zpVOT#R{NcfH<7Zg>ph7>3+wm4J5F_jxO6{g8j^BrkXmqy-wIGEh_ZhyiORI!yr^c)3K zj?;rBetnl#W1~pd5>Da_6z|vnb7i5uNkR`yHAO}~xbXWWDf{S9naJ1ODOYVO#Dz|b z=wFPui(QNOIPEH`o;fl}bHhHBOozjLNx@nLf2N)Xf_))5E zB9rx<qU#u15Ch!=&+6Ze^F>rc#3e?k2pHl@jA+!cT+`5S)VYm%0>QRX=U5aIZQ zb2#@*IqD&^_ursyL^Vx?qf92FHdZW`XZFohvl`=_>}tP*wWewUQh7Ogu1>At zaX_Y6%t#^BK^)(^Qs0(&s7L;E7+VPjPu4Z!r4B`p9kM~{bNDwVZBo1w?NH5ZQt#MG zb2e)c|0^wQp*M3UWaeSsOoE%(4E;LY&;CY(EjPGDk!n-RKZ_t!YjfnjCv=_m-GBX7 zZXvzO_2T#s5*-@iWy_OV?f3soF6A-ArPdgpL~dRNmfY5R3masWTH_kjAI{9VhA%6d zat<`qsd4E^QaTJ#tq~8>tafHEuY7-3FN&XjSN;NtpxpS7;yp3{wopK#-(~0yfj-2} zjZ@geQIS|i$bsdb5MU%iYh{ihRQ_$9qsPl!*!`}~WMWKW-f+*t`tL)nGf%f!@4h{9 zX@jg~uB$ktSwqXV|5u)`i~A8E?(3n}rlz9VvfQSfnO07ti_Pi&O6i+;x8Yxuy@2%K z#T)-MU#1I}m7R}1O@|gY*B$m(hx2Cncf>?n$J*CqTdyyDJRN>XTj65B*E$#Nr92Mv zQNa4hizhvj%T7}Jn!G&e^{BfDG*trIwhk7vbEF|r*b;Rf6dc#5woMrTfLybVUmwRk zA{<`BQDAr{yGu92`;T~TN+98aYv!Iz?<1Obukj--7Rz3%7xRw5F6-Cy;#2Gsy)-%z zM>Kn<^tX!t5{<^~U-{(Uk@gkmRve_{Nn0oZ#kQF>gxV*VoTNc6&nubygj?|ed}X!D{=9>x0GW>mC?6) z{jXE}^*#oTY6fv{=ZVI&-u}s7li%8!L(~|qMMF@cXcqe<2N_s~Qoz%5wsXxMde(jUD(!n>qt6U`RRW;E zK7o8lj~k?6l*-Z9&W@A~_w~iOmxk;8=@wJ#Pib2ASFEf~%6_l@eHn)0xz2vUCD>%8 z0QalMU;J?^e&ugQM(+)|w&lWyyf>5?d^hwKX=lIA!!#W@oFiYskz|we()=Gk#J7=` zq00wmvMCw{5rh650H|)<(60w^{AvO0u32pPTQ-M$Jl9>#S;Q<|{(p+vyKlwrRWjgveVe9qdNG$KaqzG2NGr~FgnpKTjI zGMHSHk2y@ch5@Se^G|S5165t@X8?C}VOWa`fS72}=wU>j##jK|;iYujYwT3{a0@g` z-WaS4+WJAuM{SDP&}T;}H)e$EGXQ%j?5W|VU#Xd$vMjb0_^bp^RQ&Th96-L);=V9{Q2DM6y%>3~`gX+uYv&DOiR8K9(HALfFp>K5B}>R4e^_L4xs(dB5IBe8rQ><&)B1wX}^L9$8l$&IE8-AukLPe$pA=|sF(>E#ZsKW^v zMmuQ^5+3)=_Mp1}OCXz&D^^U9_Aa7Q3pUzS|B(F?7L~k8oM7ya=-EAOQG=hZXmHg| zS_s8s`Z^u|MJMxKUgfVH(RtNFzFwO28!evAuI(I+aPZ<52A*rI5(SI2ZA4t&xWR{; zZ|fF5rpv938=${+TsHq_>Dc44h?yjR{ZGk#)M}B-!LJ59u12&dtXGe zroG#1T4oAMmm%ur(Z4`DHArvbqU^o@40pntRz;}fM%Aelx1mQ8CvHd?Zxw51pjm01rpm;RdOJuO&I^>O#mgs#1qor;6$kZbqt=snAK0yAsnO{8=24{w=huHr zN!Ip@>+>Rt0>1pTDq)YP(Lb7ckXr&D8RFT-?^AZi^)N{aoznZh`Mdy#=I^67d;OH( zCsXZC5CZtX&kr~~NQ^bJaVBA|M*)o1NtWKRyPLHHWI`I**VohC!nfPe;?6QI<@s${ zU`(=1Q)FJBg7-SLu_f4<)VXGZHI`5#YuAgM{c8MaiE|sBn0vw<&n5{smAVTy(Wb~? zXNS>{i&runf?=4X(i{5HMVTG2EyM96-4;8CF?J!930bN6I_* z>YsEJ#kgs%0ScdSiv;r4r9`(4T`P#>1o*g9LsI>7`{9)$O)G>H0?BC(84sE@6_dGD zO}d*a_dcjMW(q^H=(KSmYxfNMQS$#NKpr2>NvZEBF&zW$N(yN67`e^PwbHw?rI_HoJE z!I*VU9N2pijV2AhoOi)9pSQb!!Ldc=Nub@=8mT#lrMZe5O>3Lh9aIWYhUdOr(JXNAWNmZ&tb2GvZ-)>o6bl~lE)SyaM(_~ z6j55k*T!K6OgDx(5BZyb*y*z5;zN?Uh=62CxrNrK{GJuFrjKCgQbyxYxV?^@@A!Po zhwbTSsFUc!UDXzgq*3_Re%gEW`koN-fac1kQ!e}5UKg<*{*axj*c$F-Z=_RixZNJX z+Qi`ddQ=7U(m8kgf*{}cu>^cc=mk%IWS~MCfSuwtys5GKflz zT4;9YbD^YIfUKp>|el ze`9Lh{0f-hpCK@uvT06=s65^orC#WruIqW#_%Vwg_Kg@|>+(a8_CEp{wCcdf@&oii zeOYB$NG6sL%(NGBDeZ(%l|Zq(;7Cp|gmd@x5BfuOS<1cDd4}gDDT$4!dmmGa^Qekh za4J(qRCX2rl85({7JSz&;^k?$DR@<)avQbhAXOMU^)y>IJ9@xG*FBNF?&*koSor6#he{T!ulzXb!eng-uwf@QmcR2N4ql~o zCe|l+E+m)VP1$y-;Vw{8oO>ZAf(Uka%G6?aJF=q0y|c z4i{H7f}i5&?eQZBd4$K$T}SjwDG&9G@#7?Q|Ch{nVyXn&HIJy6qsg4q4>H2eqb+Hi zA31YMjJXjHP;zp3XMt)*@Kmgq6~AxJY`1d70)jdjq-2*pXi^3` zLq!yN+I|8fDv$ofuU<-g0awTdUlt5z08!0~Z^XQ!q(a=*3AyL>Rs!vCd}Y0f_ZKr{ zOathiA4$DUyGe3u7d@=xS*gX(?skX)WtMtTGe4Y=XY~lAHH+RT;S{{>+83&* zv1HuBknK7H3dp&W&6IlUIq4|ZOxqp_*G25}Oq^(Wc8&7tPQS8xzVQWk4E-+1Zqtx0 zzP8vPb@=e3GsrpULy6aa<;5pDw>YUe?5}DwT;X;#?N6q|_J$X3oM7!eKX|+OH0ulB z27_%k18*C>ou66`x{c+E$x+3Lb)E*x<`KJ|&?&jasZl6y$zo$RDg3sf#0HntqW)B( zva|JWX@-nj(2K{nLS)9Elm-Kg+b71|JBns{JFj~7ag7bvN_YfY^^ql`dX+)VSD-Om z!Yp~!L5}JQtHiCfl*5UAYmj8Dk<@u_AS3+`;_6*rGpaH}ZwmtK{yS%qMfHhei z@+Oyc0ros9Mj#~)u6IXiA655og+&X+$|_XpukwN#t_g11c8vglQ);CTh1Wicw!DNN zv^HgV;oFF3#(^?k9l@vFgenZ}A}L?$3}_&7d%fh`II?iqMV3s-SmE-`JwpsD5)h|m zCt`-7N`pP|=1t8)O#tqMIButpdWU(cET6)Mvrs(j=}BI2kAfOwR*}=!j0FHrQ&!?g%W52H^e@o zza0#nn}+e7{x&J;OI~31{5*30ImO*hv$-eCSn!l;>?q2zOZ|;`l6VJDcU|z$*#Zls zBSiY7O*Y=EyP90eO)8Jnht%|k2s$;xa4V9kN4DE%ovB|XD$#idELq;zOUP6b{hAIQ zFajy?=+9(O;yYH3Vz?OJ8&rwnKi-)4TsK`eiI9X5hR=YHBf`oL+FpX(P2&ChMMK1| z54@PY9}BKoagE z71v?jvO_9hw#QbHeRSO~cl%}VrG~+IhM;jIRbphKq^wejN;c5U4Ga{8=jpm}OKv3}^1YHH1Uzp~>@no+u<`;u9v>JQ>d zvh2@*=u&6ZiF>+Mqrs+|tN+Yo&1ql4&gEL+0xwsjdsx%Qw<*J`8+p0PdMwixgsdAg zD!NUtpE*2EiCozU&l-kh@)_IQQ|Ta~4o;v3i9$lrT^tb{BC%~w5gk94(PT^#SA5@` z-VmEpAS=V~16dihB^DIGIE|)lbU*7p7IpY5{mK*GS6^DBZocxZRJ5sKIB(p}J6bQU zRt8sn!_*E;yQvcp(_7B?22RPnPx{9l?XCc#25F=O#mFPw93p`cl8lxp82g(I6m5je zTtu|S;a~M(h}RvFVO{sxd@gO5kgFW-hZ*5vK9v~ zNVps}s!my@5Q?*PY1j>YdS_G}R&c3(^Mp zH}^f;>CJ6srhcb5qH`Sol^5Jy=UfMC1GX=UCjkS(CgAhIyD{>~3QQsJlwj`jA#rK6 zNdcHtA|Lcx1ZLZ_4E zY-}5Q z&yMwh+|yO`_nXKr_+;T7;ux~N@asSsTV)AuMuEbVPBB~-rT-a>1|ksRzN_j1@L9Bq zk9}D=Y7MT!Y?Hdm+kSpA@+9(;$>ZlTT6)eV37mf+oplj^FYp!kr}b&%_J0k-tD6Hx zoCec;5-Xi`gp{n2>gMTh7f*%Y%~MO+8CI!_rqgs@-q7-wy1;wNog)8GUAeRG1eZ(z zUK?}iF^*3S!r|>$rq=nB>U#xVwPqNO$ne>do)E?e>mAmPg9{4|BrZ0{Y{_i|V z`})W5XKCxXmVa9NF*k0Fqq~3Hs_uFl2!s{Y54wj98P$eww9%+j0tT-WV+e7{Zh zWu*#?TxkEr0a5;#5XXzF+8ivBMqgNpHM(gkl*0Laf4hG!a7Y zATHcQ4%jH|dob+JCW!uMb_$V!LMFF*IX4?jDPq+zEh>`oVQb}WYX3IUH*t;>nib?PWHn#sKufzZfCs^di<~AHtjO*tM5_An%PE6ch$d0RZn?n+EQd0hpfdb zJ1|I&*1LcmMFd^#nGI`duPh2!NumUKIKRms%ibLoj<8g+AS+Q+a{C>?N^kj18V3|r zf0vS5DgL-}#g8uRB9ufxRy4xU64jX#2GBP~sRRV=%S612T`T?`0{}B)o2;U1P!z-? zvJHxY@HvK?C}EGgc(X8FeI}TBEh=2n$uE>OrHQE^M#XSWQO*KGDrx#l63$|2Zz;>_ z;YWKIIRlFh*1Cg;K>#I%{5I15LLDH56*ZbCjt^Py!c^AttXIoy#5)j@u2@b@8ndD8 z2g>gmBR};~r`*^ik*UjRC|~)LUL5Ge%R8lVZgd3jwQ{?Vn3{?E>}nplPM(}?UuxjS zu8wGN4;E`$Vt?0P`ry155CxR|bp%h)F$cW~CPfaBBid#ZPw8dMO}xUnfK@Kwc9pVk zBi{t}1(pPE=zH1(_QJRz#t9njPxuv8dWm_CKCFvkv<)2|a!*5;mpLt%1EgId1M5Sq zF`jAT!a`(10%t$(^a%5z1kMf_w)jD1*w2Q#xxqAt4DScHA=9c*RBpH(o$DXx=HWJZ z_Nsak31|H+|3~)M9MDC%Xpsyk){nKWM;{~d8`8Wkot%a$E3GjIsBDRp74L_>p$kC>0abBfT+;)y3H1F;DL zm@RsRMv*wn)@v90%OKf2NfB zJbUg{S>nkZ@Iy!5d?4~B0CfH0C+bS<{aA(fdo!cy^Dn> ztjotA6#@Er&OZlg2=21rFy|-T$dh}Ej(a#w=&YR4?D~!7#x8?5)#roj2RkwuCB+Pk zDv1{Kw+x6d*2DjD7@d&0-LZ&rrR~L4uoxw8lmc7v*Z}`h)yWYc|vf&Wbb&i;!8);;n#G}4;MS&R+K1+ zl`Hx>6S!O~c`H4_dASQ8KMb9ui_P=G%&y^k=OVn2fSlg=8Wd>;MGNNJ0aEfySgDl- zBqu1=&aXY+&(2}^k&(kV&j@Qks5)#s7e>Mw{37LD@Ni}zMHDL|`!b-fkAa=dVO1@y7z}BgEZ#5fN3})&U%i*=-eSl^aS;e4ru=WBT1-*^&!=xmpo4_AAzsrfhnT| zPsQcj_JqqISU=h_2qs1&dE8yB^)c+eox_UPv zToKmuVm1vbWe}V-pR|${;$07P`we>4h zn8Wb_$=<)%84T5HMfFuQ1qh#N^5en6=}CS3)tC)A0LudTlvp+$p0PZhvjwmB=Gw92 z!M*cOe^X*NmUKlq*%Qb?A%f!H*g5LP$gV;3m?yG8cg#5Ng0G86*qmxs8sg@GfqXQp z)9PzuhAr$rmimz&`?#}G&Nb?(dqj=aER*;-K8;(H)y6A#7l)`1-;u1qKLjzxe!VJb z4gBki3Ehb{Kb?|1h^%*fC5C=-`mL$wm$>tP;?~u(3cWj)bY^Jy)Ta-jebU~)k{Rdq zi@4+OZojd8qk%!4TeVO4uel_(OUra@WXsv6CsfVQ_W9zO^rU@#<*D@cQf=X2m8ex+n+Izn@lX<-xf>@Q;BO>u_1wg)C;VUvO;vHKR$N58DXl!1B=r+NjLA`RGV^n0ptZOg|7034gfb9oe zp7VC7cV2|Z+db5C_yNIEMa^j>Fs&vkuQ_E!Mb3@7sat?Bnn+p;CX^|krSXUhq;AXs z1pVJA3q_)RhF`{|YKQD&%l1&Wi~m1lK~zHi4`h*J#)(an!T$1CvTAh`dZE-FBX`vQ z$g3aQq>?_h%}tZU=KOyl%ku|chBPc{^TrgU&+DGYtHlf3H^28HeSAm;r4`&lz#o${ zKYBmgUP0aRkw%VBpKqpT-FY zWl&v61o^gprl1qQMjOKwL~#_ln#Dxq$j#*pjOA2q%mhMro?zP&Ef6p5jK!1(KVidp zEK3h2)#oe{UxF>SU%FS3rLo;S<`oHdHvMLJ&SxYyUGW|2(6J#z9Q+y+hpVD&Hg5re zo$oLAf)-)aHv8{;=A9o4Em)UVydISkIrvI;JtLh$*e)@>Z z0TaxMs~n=?KCzNHS?BNuhOK)iF z<@0Ir(YG$htH#PW>M-aMm9!a=7b3a_AK8q~P)p8yAi>l~269dIsVXnJ#cX}?jl)`f zV7^&dk~fMukFwQ$d}DX7Q}6BW;QeRyRu4ceU&bK%_@jE3C^= zM$p2vMOn-ws2m?gSV&p=PwdVQFc;t6G*sLaeW+;OrKDp1(#Nir9KMUsHhw6TP}~j= zY~m?T9h+{aXB9k~3@F(5ZW>mE>Rx$V;~UdMyt!sommyPYDLTGo=@`%S-PW^N>~&v- zzc=#A9#iWhmwYXD`C{=qag`y{y2R?MheN*Jt&?ZT-UbuXFFPdpN0zhj0lK8$qo|xu zd&ZjEftpVrFrdYc^8XUdSU@t!>6y5IF+P~t{B|=M8}R~T=hqdLMfmC5Gt|&9hG9-> zA+Z@{1iF?;8$y`v!6-4=7~#awF3W>=2=a%q8N=KWAbocSH3#x~ZEXhtPJ{!)e*AobhA2c+rNFJW{VEGl^z9jgTcgnJPfLX z!3;|HGOjU9aK!P=2L@*vlTiKleT~ zHNup(YuDy!rY~fANer-(P{LAcOFt++zp_Ut^q8wj9-wXdV^5z)8^t=G06GbBM69Go5TwAj^xHRVfK@|US5Z_q=(dEFlVBeqLwmdcI?(%9)woC}^Zl`5&BmYb zq7*B3uL^b9o|tWo?OX1V_qp=n4ia@5sID|bvZqxu;q)AnuF2&}3xyODro;A~v>RL1 z_*0iyX^ECnY;SVnro|{Z#lDB$oy_aI`{Wy>`XMi6@K(IJ5j&*mt&SeQ z*5*vqsij+ojn0|+wa7nH?}R6(sg)lIbQ|6OPGn5>zGQxvu7#KKKkT$H6t9jcE$D&_ zUgk(vRak-H{1MwVczZA2Op)lBJ{#`w{d^H;+vz&D3~%MS^;-`Qk*xZYGq>>}x8#ex z7;hQ8dcQU)mGNx6g(oZT)ODrFwfs&Vo7*#)x!*Yf; zGEzxG&Jby%G9EL&ntWuDSLomnwC?f8dB3PqX7U4n7Sc-MJj6?{uC#AW+ zRj)XD=UyeK{^=;w@bK}*efzphlP7bgdD*Cy5N5GTJ_M~|)HYi`Iwyz1BL_C-4+J;# z#;`^Z$s@+MP;|3m+3XnP{-Z-@g&zE5Vu-~?7jNI$*9m4*eCBycjt_*zq#Pa(jb@}S zcv>Qm0AUv^6H~?E91MxK|At7x-!p~twMugc{NH%hw3z?CRdH+*jD zB?ikAM8_VsIZ|G$48;=3pTFiai8!38AKYAU#ycw^Dv1NnOeok1I`!r5AjQw?C>u_j z9x;PZo8m{q^bsO;`VNC=l%8SxILTZWVe6xOkk24p8_5#RKg}{h2?0RPQ^8T0ca6q* zP+}-~F|$5|b@DI4BWf4_!07}ThcT)R45I#rq>Gfs)}X#(Rtms9o-of;%(~m_zm%|~ z&>c0D^S(b)KTgE~k))27REau0h8~}@HJ*$+6xsLvYzZ>7?NJc7 zT_0*gIe^Q+DVgD3y%JR#u59SIn+bYvlsTph^`$dcnGx&{j{BX%l|CD^?pPpyY zQSSzWEw<(AdS5UIL|TITVAN*UN?NhA&~3xJ!?FskRQ7uTR9em9_}=h(@0@5++e$8m z6F#i3e7i8>0e+^^GUa*|HJsGH#bQY}{qsh$!X=#^S_!lsT(DQERZ7xKkP-XOl#kJ^ zRH6wTSe@k>7!0hwy>QOOo0@UW=S70JrXL1-Zf4Wvg+C{@>l&6e!aM(0H&2BW^#nH) zT1Vku(*sZFY!c<%+2B>3v|r!;9}~?wx`&BNHfFb-Qcj<3mn#OFB}|&U%*VkEYZ*N#goHhNhs`jGUQ1d9qV zs2}GmNn?JBdau3JO$kO(_`e=gR1ffoab{ta)m-%_8UBRjV1H>o3`_P$uoFtH`UO$` z$fVM6iDEw=ilQ@gQxwqw;@S$icS)el2~*#t>&V#tFe-f&IR*ug(>|Q4H&xhg>v~IO zv+DQtjve;t+dLUW_Pi~vRR8$Ly|jINasSh?RmI0deq%Hs?-Hc05v!CwN^Y^@k#6Z6 zg2*W?M-)hwaE**sU4w(PsEzoH7mNBPV#XHG#~|O^co1qm&|SKv_I@+kq+EKrQQIED z{clWf>=Z_qR`upcE@)~h?3OU^|L9d`O56u;&e|dQheqR~(|IvqE+5vYgEnom8y0?c z2Ydq>bGCPB+mZqD?ADiMrtf}2pV*qH8SMCM4&=no!)UN2VB|rmq5f^xWF`a@)(p|H31yS6BsYnc3H6F?{LKk7-=WG^)tNC&ukc5)C3_ zM+_g+d2MWW9){Anpj6rhkJ2r%o6}8Qdo_=sM>+kObW3qs*rrd38ecurJ}|gTC+%@J z-S}yUk$IUSn=^_r5n>M#GrIhrix~A2nd~TvI$*k5EoRQMfO`xcA%j@rovSM}9bU$VWI zGS7Ko#SW$!*;0R}QUv!;6)3OH!r>A|*?(Jc&=sfb=ynjLp&iCe$=)|Ji zX#MWGCg`h0I4iF4vZ>pC>%aH%yN`S;2LD-A+nN6`$C@~;mLBhY$zv2U1~4XPKGb{~ zCNuwPH`pe$j5WtjtAM$|V9{*q!HoBM5QBGOAg_hmz|?E#oUPh!?+Ner`v2Zrn+?$X zW$)CWk1TIyN~w3I@2l_E=^&fI&lGnX=~MdzOixCpTTu7w5EO>;zIzOezVN=)Fcdv7t7*BmO4W3G$jvqz~4RP^SWGN+H@F zD(7){e{d{m0?T}!ONtY z(z|6g0hN*sD2VqM$piW+^lJxnpEpN?Rwz8z7y1^4na>}~*qw^A3pont zgR7!t4i$p%sHfK85}YdN9r?B?_PWCLOZdiCSn867f7s>Lc<#U!L|w`Ri4a3L_H_`J zYciA`Z-mW;={Y2p)0<4NGkipc@GF*uAM_!JP|@HWcf&q<^OR@-V019F4yE&P%os4J zZ32=Dnju<$Z~2SjJWLJS=iFKI4%r--&M66Y-UxlR{csxNk=pb%v{z@XEz7nzFGtwDA>6W+Z~hG9>4l`!*{f?G`jk9P84e3mu^Ua9vT#HLwQG~is=;WES_dYsp$0zC{qUEpcklWIwv9)w_&ES>tWy@)sPqpye zWyP{A`s9{Jxb*m1aS?pxDr-b{;<^$y9Y_<*l&O*Yw3?D4l%0e!I*mPQ(5HA1@T#mS z7RJ>&`Zqd0mU8^07P!mu<=8>dUq)n=o=-#>0r&uFgE_G(4%16POz=*8kg_z*55SNH z{pQXPp}I;t^|!~fA-UqTA5cFd16Lc?S35RCDu;s}z}v0L+8o`ZGo2tVWG^0vlHwlX zCLF^NASG6i@;g)=2?>J(Wc{o<0KnZ8X_g3?hha0U6IpAI3GL=EZg1I}P=NhYVR&7x zlp7m4&q-Tk-r~f|+R+?J46P)JbkC7@fh0Eja=~Jp1_J7bJt*c~p`r(XAI7Zk%@93r z_be}z{2yCba;g^ZALD@C`E4&pI_*!e_!S%7#@f{`y%^8}Q?_Enhcvop$!*FUTmIIB zKfh;t9btK?i>;sjk1Y_Itm+kbTIALA8*tHMBgfo1Yas#E2m{-yrBStQD7W|m)Ya{c zq3x5I!TG06?ba5J*!IfGhwjG(h+5SQndVOgMR0U!e^%ndwv&C$>O4nRQEnuA*V{`> zsCvxB`uMMUqlR4m;z0|ef)cb=>Ot*x>DFh@<8-lNL)&JYEqobt;vlV2y!@K`Yy$DX z>7RhPt*1-r!n~`wv>CU+KEF(4LTy4aeQ+4zyLBgK<}%xNOjY!Vj)e?K@I!~8^3PpA zD!xo|qCH7N;t*mOWgwcp=AJZ!;WF;!^q@h`gnYc@5iwule8yU^zDtmzP3-1x?(_Zx z=3P}(@3Ed9hlXE&4M8etup70@t4MNh0&AW3N}j!d9(`oIasgiHp4zJ$S`q4=hL zWkk`RNBp&qpF1->xfzll%iZk_+RI4I;1lu}j=-4P5kEcqCdp9|So0lctBg{{2hZ<3 z@Bb6(=4|V2qDq8+0%)poc%0tE6WLEc(vx@=$_(gn?MD$)c(toBnYI7YcxTU;b;xFH zqV*Vh4NjWy*Z9G`S}(KdT=RDKAtU>XZ2J>sT|M91PI-9> zdAD~9xbB&9Sev$*Wj{TB`dEZaqSK<<);EFnLtf@)ebq=|1=C_l9sUSEUs&G{w9{%% z(=>{UjVg{xt@pQyIK{gsmBAGZGnCXKzxKTgzqm6fitf_kn*Q#7t_}4z$dFBTOm>F0y55K%W3x}VgxSPe z5=KX3VkbUMahg!_%{@O@NDKuSSUV31Uh z5GiSpk`{wzP()C=a~MKON~9zQ5JUuK=w@i?j*%Qv8ipQ*i94U~_jm7I_s_e|TIY{* z_S$Rjb9TJ@dEfVW9!CE7LI+@a&-vE4XH}d1Q8g->lbV|iU9?go*HzHZ-p4{Onv>b# zsmefEBukz^U-{7P2R)~~$6+#HU5mwE-k8svF+QBA2UsA=Ki_$C)RUT}x#N9R_@i-$ z)h>snH69|-f1la?hE*RIoagM@b1&ECxEzm-sxU1>PWle@Cx+{CqVH%s6YOM3I#9)Q ztKuJAvyan~7VXSC*JFqxNRDLQ`g#tw<3gUvi~pju^M~AAg?V;Yeyq%G5S+YgaW2LP^D_Yz~pS6KH( zG?4d>kIjnUb^Tg==tY;-MpdC>oU7p&9#uAgH}g$LGn$8M}e@@*PA4q zjoUo6D>OOw%wn7Tr--NRy*)~TY=f=rA>*;!VU%97Bd73&LMNMwT)XDl=<9DGWSrE2 z+qW?td`y8~xI8Rr%@^VqTL*N%ED18S4ewZ$z|^Pq9^{r9p}u3a{4K@8Av1{`NZ+yn zCtRt1*Ha0FbjrM1A?nOd`-4^A((pIDWS6v=f*(?+7NWD^1<@bH{u_p?a}M>|^TTW`rbh}3hfbvjD5I=(mcxEUqnNS^yHQWF)Df_H}h zaFuZ8lzIH3f6BLQG#~k7vieK(gYUq3Iwds!4eFc#8MBR>=@C8e7~m5W2h#BQ_jXCa z@}c!PwRDS7Mo&+wKdy1I7qBXOC|j@`lewaEey)6dNK;-r(kYWhc8@z}_1;`THqYBpDQEKkUC7WVuU{9T$zP#iV1Ftg@ z6{O1h4BBUto3n|8MDaEs+(ABmonGEs?`HqZLB^Sf-46HhcwFE8D}molv7PJxMefL zCoU=B=Pu`1>ggUz4KjYx-XSEPzxZ5^=)}$}$ZcYh=cK+X*|NrSZdIY^^E}zb>ccg) z)f6ziexmr`^KRx;1;b|Ygs(}!ZUl{Ww~q2-88-|~WmQ-|y)yORD%Yl;+_43*HiZoH zhU|(DgkEU36c~goirM=AdY`f@3jDzwf_k2LQeuJZp5a&=^Pqaq6V% zce4yoVP~w@1`0U9z>x_RTiFpl@Qm25ejaW^dfcd8BnQ0p(7E%Lp0% zK4VaRMeTE#z1tZ3uSiK6IK-W%L@uOIr*qMdgA?b*{wM>6EdgFs5ng~ z&A-5xJ3%qvTe*-X-|pQa-+*^){`&6Imo|H)E^PG*LV%HJU?I3aXFHTvlj+1@ziik* z3ixNXmN>(2GV~X^IyF~JDD%|cwajj#@)ATKcG|{Zb<))WDS_i=^*jpHvVoILXIb~$BwqO@)mI*~tkZCdYWjJP@N-f8yw~ozTg1b7kZ=*+C>+qRDHFfKsoX#EM^6_JtZ{I2= z+>#mbalRco!=Z5_;9fGk>mHAm3HQRYFY)oeD>jKI)S^UWA8=Nrro^4EQ<&?>Wbd+421e>-w83=kLuA#khql)XsXiG8iGwFRf-V=_G4X%&_Y=hv#u|Uy zm4=^rq&=S6N>hgY6!&hacA8IXB66c-6^f19b5{2&ZoJVjt?1fglwJ$UiEMq^__lJVv^bn zNQv*bwRXQ7O-I2m_yW?w*3OrD<8~(-qyISn19G6B<9uni(R!J(QC;GyW5f`JtXhY5 z2u%e zeW=j?!1y2s&!6Q1eZ`oB-xzWj_=(4z^_yAgsv08J^Pku?7DzL1T{7Ot%@X@$Jwp>v zq@DgB0@RIR;Bsj>ACd=7lq#KU6cuNz56ui~j9M?@verZrXrA4JCeqj|DSvu#qH6wL zqvR9qlxlRfhxO3^1kND9izzcfOA3|{=qXsf5#V@VuCQO*y1lZLB`@*IlDwShsHAFY z7(dto{vRD6OnmQ)Hz@vg8P)Q4NR8(2k@=xbmmFuAkom7gzv;vs10Ost(%O6gP<>m&%@3r5C@Vt^>B+f=eFYIyRnK4 z0mq)f+&_D;v=>p2ZeVr(Cj z%^Q!!_`G;*7J18(>|vnSCosi8;`F^3i=0POZp&2?W0vM@w{Ox>#;(wL8(6BPOyBu@ z-*}Bg@VlH(K=)`EfWm_DeVFfZGgJ7ENwgxlsoYE5+x=n6Gk3^|P$y@Yc49~N?P_5= zeE62Ag6+u%3uWBX{&^Hrs${}N^bJ;TM%p-il&`8Tk?TY0z*p6%v47Cv@GA}c)aTt5 zwQ6i4+1s^MSxU_aqxO>~sk4>(`w&tK^7Q=w#mJlfEEMr?XJxo|Bph0ms;s;;ETo@f z8upZ62;^MjQrenw7E4i%7qyZJ3411vSL*(Q2veQ;kWAtu$wxMyfr}AuZX<-Ba{4vgOz2_4-v=Md{(-RrJJ2UakXAw zg36kY+bF?{z-MFY>L(KPCM*HT>^6Gok3{#zY|Le>`-ME6z`t=dAwLskO5g4x961g= ztQT^x4Y+7H8I3!-h2)sa{&P$G#XmXgdqG&Z2pPbB4arTA1~sK4IQ}uF?X+Lxd^eGO zX(e|FJEwzCC0HV7O*7=oS>a<-gBi_1fzm7n&Az`?KL!Nhf3?Ml`Eq5dc0Iu#UqXK7?tLUQDKCOAJPV`x|#BBif-#|vTBn_4lp%{bf)|{J7mq{_C`8JwD6e&F#(x`t(z*z zRy$mZJlEGW-veD#3}r&Cahg4uhR~X#`ICjdKFj}XdyhmUWaw7#Nmy@FT5O)@d){Bq zPAuIktWoi_|HRG070oDAJjDG+#|1hlMK=m*(X}aoC!Dq72dgg9?P@=9@yTT;5EaE&^ZKmcsP7 z%{z?TnLwWfiL{9)pP`#~K!|K29lz}zlyW*zW_`S<#d#h+79mCFjJMez0;g<9a_cK4P= zr#)uqu!aiY(HG3KeufvuK))8dhH0urX zFRI=UIi01?u7&%#=7IZZ2>ajt-`74=W6A%HoGfw8!9-W@xxcMNnp}F!^=--w z>wReinu9qgg@+q|xpD7W*n`@qE`!eEM8?W!9Btln0M3yjM|$-oSjGJI;^XM_S8wZT zk3R#$eRA?2_hbA)qaWd{>kZvy#$ojy_fmW5R|wPRnG zZumvz%%w5&xaFgkS}R#3xG0>jWrQM#vz6&Ue)+CHFB>9UnflAsffNOZQA3@c)OPE`VN$6uJE(jF^?KcnW%gu90p5JNFY4N)ZjH-gFEq0!P! zCKsMYzUm05Mmu^|R)sUTNC8iT`OFE^G|?LQcRzCVZ|DbQ>;DH|8t_cW-!`x%?%Eq+ zWKn_iL~1;i`A@%)QRGoXo=Va2!bh!)sT7db>qPWq9=T{~9OwA+@P@sw6PZ z9TggF7)Ke0te0JJ63vH%VIh#sFRxP{u+4jo+3V#a@DTxoeZp20SufM#+t)q|;Eq>_ zBS;?+eCX9M@a6rzFD~Y$Gsg&oz1g~J#zK7c&}baZ%aDD2$5ZK z63Jx=8kND&Sm*5?x$u$%YQadn*8ETTGfGZx&i5Kx$NKJR&EuNswUn3@V+W=1A5H+? z)tX(ZsAg*e?z6*uyLA#yDW;A%`p}y4LJEd&S9>|gn;YCrw40(Gs0c&H8w~$kZw(8$ zJKB7Ul=`U`)F{3q+mW0vwDuFAB=_`FXW=(WN2i7S z^+WhtMOiz?nyy!5MY3CGA@5(rSxm zZgLvzvDl@apOrNpIAtk3Y>gHMQE{x4CU1C4R6CiU^^^YaoNBUf_<;2bmWmy0#@A~T zc5u~6dSjU`AxG=K$3zzFY^q-D`HuYF_qBFu+rH0yxg^}%RbtdD%#7S5Y94zDBO zz}>xhIJ8Zy-0A;3c15%RzGtE^4bX`agCy65z9u>!`3ULBRFho#k&Qd4Y@ET5Bgpse zdNV186$kHn`vNHB4jYS{ur#!V?r!+Z{yBHB$Zb=id3ufjP-sW|aOGTxtf) z9IW5T!#{7=A8TdqFxgJ3sSb4#^=v5VB?^-ErxkdZo4YVwDn7J5Wm;QjRww9*z5&uz$pD z1RhT=gj&&PsfH{t=Afd)4kCq4HdB5_y)gGzW%#@J5>t4k7Ni@9ANVPW^8w|ZzuSqp zQJ6>#dKaep4sEcV@^gb)s2-wS34a(NOFb~~oHw^D(L`J6$7t_^f5G$kUOOc zXa`|k6WXh<73v}FB@5?p;L-K@#Joo>OOpMrZ|OquUb(gWJ{3-@@I&Yb$FGXi5>2|B z0mEsKy&I>eBy{iyKikvnSb3%x&yM%Wq^{R7qsxVr8O!O-1zq=s&eIXR6zb_;#@49Y z>fRv9$x?3ILX*4bjNeCpTLF^VO+OviHrApf(IHiB#c836b;a{O(NuVj#{^P@QE@P` zd8xuEL`r0Ky>f5$>(}PLAoZl??u?UH=F^?q*eJSkU~*&E9P*TQQ0TmWdcX3sVdnc( zA+|JIfvczu8BeHcblE|P=tsWiAK$XIO_9b_ zDGKX-oov1fC3{<_tv*Kmh?ElKuMS}6qmdGol@Nw78&QgC@~LSa-n$gOWaKnCDn*aN$edlrQ=G`UsbB6b|iJG!f6U=9!KPsqG!{hZ^ z)ozJmSk5NMK#|I!$|qMAj>g*8t3+iRRp`}=v$>B;;N+~o59He9nm*R8ywL?`Y~vXf z&oaDmi}3bdmg8DrCG=ifat!Vbt7A$SwD4y2?{8C`aXHPX z-klXsTxr}}va9fhJGtaQGX3+c8;Ku(<?m&CvOz}r`eAC%y2tlJ2_0@C86vw`24v2v`?kY7jC_CX}^Wckgu5znmXv} zs-&@O5!+iYNrEVc?4A6&_^ccPI{>}-KmC|142bxkq65jeZp~?`f|a#c!|M-D>PJ;} zT5?(d4P$$9ZkUjoBiRNYn;mpZfAh96Xg;+=<0h!hBfw;oKltv-_8-)6fw_ui4+@<-^_Yax;{2#kANs>9wfJz5K3he zHGdY*4!qTbTIOkT5~7?g3HNh;Rpn#fBmmttN{GH&b0$*<{2pe38|QGnP#glR?*r|e zk_vu?YwVt?H;C-gEJ5piUR#?#9y_~IC>w5mQ|6@wG(8WQxQ;X^sc@))fZE@tO+O8H z2AZ0&E%iyMts9`!o<5b`^A=m5_=Nq183*XV`8_I0-f+#bd<2D9$R zkoG>NNu@R5`&hYjh*Ib$X%{$d@*zBV%vL#aIt;g z+;cr3A|4T#y-@86_KnBw1TH-eJos+|BJMQSz+b*gVHz;GGoewPY%5a61JSM#*=aA? zC;m@?%*t+jiIm+rLsoaCUfM8+_#9e!;kf`?#t7g|JB-UHO+6vt#_aW*BOpK2fqTF7 zgRiTG3;tug1@f9`^0W-1VM;A{>&o@XwS+$VrPd^SA>`)KsY##~BtzP!{yixX1f8Wm_0g@6ORAAG*_%nvKsjw8%51qCbfL79&;+uRCxHC#PC3!BBj%n<%Sn> z<`k#06cPe|14?%m-z$Tt^hpA+-)M#c3E1a8{$Jrh+-6WD0j1JZS?)Iic6bNB=}#@5 zLVS;C9S#@t~jcjmGhpa7EQApgEjwA&BcrZZk6!yn9ylQ)I{U=lbPqe z&gM!OQ&B!MmzSYA<)TLEC3isT1ZSx!FdpQyW}Oge!L3fn^ygV8+7FiEuYTryEv6|hal_ZE}dNm19m0JT~#BTP@YombpiAa6GKr1 zCpW5Eu`$5Mo{Di_dr)}fHX2$9L75P-dp$lQ?^|ypC@4qCJh=65cd#1vu_i7d{Bh@Z zGO&sxlRwtW45UM!>L=7Euk6x3IiH)cIRHEXU{mQ(+I1Vf^k2sr@L^yr@8{OFjdzZ9 ze21|w`^GQ=of@Xwx2%^;Ot&csJTTK^fA6M`R_ZE#Qw$zTnSICKoW|J0poc$2P-H4= z@*YY*hM=b$Yk|B*#8wHB=1>ZXKRs{V=u|iw-OKF7x)2V_Q6Pw*g6D5k!7YT5e;nf*{Rp_!Ct7T|mxW%Y#Gmp4{ zxGAs3v0$G-kcwC=O{f_wF*jG3e%te?xqSP%jmuTU7f)>IR_6z~f15;TCGZ zN!jXIP?-$AYC=V;m2sg*V$UPzJYrAFim9QzlffF=7#cF3^tEt{0>4MaFKE6F(aU2K zGe!5su(pPqDhZ9hR!BE{>k$d{be>iEIrBl;!=@Z=A4xgVlR%ypks z-w-?wQzIW<)a?4I%^C4lko93>l1Kx)6rm>vWaN%wv8X`pc^m1K~>jqO$=Mr8elyEV* zBE^eutZjS%{y!FGbyT(UOfbXix@p^w?@=fvd_OjPxQbNei3)lhqpGsXf~Lej{AnCW zW$_*xGxEDy#cA!EDxd8GZi`#m-jUGHcY7&I`Xna|yE*`8OxOqT6#%-A1;@AjChd>- zrp;_q!Ggs~@p`_hd+XBiecR{D@9DtgY$RkjIW-gmw)=L6N&|;Vxc%#5fJ1^fjTBna zYRoqAVyI8ag_lP$rz* z-xG3Lf1EGMh&9kx-=oWlSaHiu=mL))xtxi3$=OWzFZH>t$-{Yb#%*I@Yh~(WCxtiE zDynO=M_I|)T$wvl=<`8W(XHHT&EL`*xxa1tN1m=6QgaMnZ0ZH5hixH0*$4pm@tESb zTyZXjYz+2P)?2^D?buG0!mT3H_Q~3HzA*`**Zan|DRIA^dfRU@SG&#l{l+|-znznC?lSA@+bD_W$0v|_WFfD)L>rDIMPS=#g!Mw0C6CXjW zkdm;1#9d?bol@YGaWEOK-UkbB9%XG9Qj0a&29z4p4vpM08KzXxyn%lN9aU3F?*I9A z1(2v}QI7ffQ84tWDXxRYzkn(yMvS}dYN>Z>3|=jbTj@rKok4q=yPCmCS5csIqkp&* z*1_<#y*~~=E}H&GCmdOfp5v}t`VfI*$RFa^otI6Gnl?k)fWBVQt-&ELguoFpml_`j zD0=$*JEP(wKR$6Ei5Os_s)+{ZnRJT%J_2Vk&fMH(+GYGh(&e+Ql|Xu2+E&(wca#`4 z70TZb%A`$M#@r#Y%&AKSPt(eN*{P%*jHfP)WJK*dpx@h!S<4!Leo7jd;MxT^`|){v z@?){wuBlC_AwN`>kW& z_?}_$@9~XEmt&{0=_e3CG9H|yYK`}tyzk2#g*kF+kW7Gn2w1HCOCCVGPg z^5-eR<6{Mw=%r*faVS;U!mj^SRpYb^@a(ea13c5Nn+p3sOLNa1-p7v1q2M=#TpoNW zdr`?~2Une3gL~Rmykda2HYYlUf0YxM>a(~UuT%{eXAuMEl($WHNb%hSzKwPh4g&q{ z(Eyy}cP0b_FYJGM8{p?L)CbFK|0ijW|2-^?`$s=}#52nPq_g?Pn#`K(Wwj(r5c24R zOIjv6<$kY{ElSA9HvJXLK?HTD!Yg&QlO$?l0)k8}pS@ zl~ubWP6!h6+K=zw$&7XE{QbL#O#v}smWbuP19JD(J1hTvsLty?^_qy$i8{W@4#yz) z#q1BaP1hcR!0wy9UePf~`&_(x3gfWGHYlW4&+Q zy+6SG2{>{m#?mzc!js%Oz=1E9cn*)3#)hf%K_M}vG@rWn6pk^c?SzGu;7d~#CXr6l zmM29+Rt{>-uIuU8mYl_e?}V8Ukz>uA#u4d(TszRv77W}S9L5^}sVhu5_(fA$aKFXW z&H>b2JD-z~dp`5I;PE|$y?Z}r{yFcL!vtv)=Kh)^B`Rbbh-IYTIu8FC#YBCqdrB-* zM*YlA#&=d$zifn9257*>QBzd|e{10~N-XoKYy3O0I=ZP(FZ&n~G>M;vC361X%9VBw zwT7*IJcgwIZE@Ba1;0>T3634-@%ZjuNcBXDIP%!ND%pi@&QJgUXoLZmLeDu~q=uEX zWbus9MYDFxBdt-_=8kecR77yzsW9H(ak%yWX)Z(`#lYy3EXC+35kpb)6W{l@ctn$Z zO9JqJ#yuqlCUG0_$~vBca94x;`&m4^Ld|3-=1!x$RaAoF;#X6M%5~CcE3pzcWq=LR z5aHV;L(Dp3$q)L))G#OONena?(Cqt`vGkpQy7a~ROx@{PZTC9?qAdH)TN^hsJU!wp zIN*Y8ixN;|lxap1yxkv@NsuY*T4q%^&Tdcpt`MUa{`pZn#R?UC?hos+=37cUGtYiU zJBx(|I0ylWj1|*5V=evrc(f08#1HL^6Vob)YuoEGA!pVuqWzhIFPNg;YUwXaoN1po z%@!``^)G+l^68*XYM}3ZyH8(h8OB-ol+LmjEnNQLdpH353@ivZeQ;JYS7y|!at6YF zHC>A%ojhOvlvfM7Y?CFm zHb&6Z^0D+(AL&;4au)^npp#gv%-U<#hHW>2PjeFOvub@C7Oz}#F&)7uC#A^=5~?e0yqg5HEh*qz4~O;IA96Jc>y_+X~@pFcFz37SqnNFv#Wb?>HQUMSY+SixF0kSVYQ?kWfCdd3VW=J$bBmi%!` z?5X_MR(;jmp)zmD!LoKl+mZqAA&)NzOq@g}dWR0+FDIJ1~CM`%!Y`al)>6(X>~JNPL0rD7*Qw64!nVIL0F#*t&iTr0sR9+ZIrLh$`bte<|q4~<)JCS!O5)} zeK_Q>ozlqaJ~V%bYv)@l+9IGTQd+ss zA_vAXma=iNjXWqb;L=pu6A+;PS8EU8{Ic=-ym@TeO+is^lcd<&{4KoWMo4C32f%=h z_^np!L&1UH`$J#(c$;D;4iwQ7G9JBZRQj&#WjLS z3NdjOCXS)`pkuUa42`T`rYK3pYYS=KGx&jHZ(8Z&w*eWz_BHw zIn3zZvaYO<-`cmnt9Ru>JU+PbVbq+0rjZeZwccl=5s`mfUevdWWg6KVSn)ycAmkXp z5Xdtu;KmICq2B77{r|0Bxo=ImC?H)oHrawsP1JoE@JiE+WoKw|Xfo)i?NW>@9X@T( zY8H6Zrt?}}SNnzP?X*H=3i8j9e)#8x|MU+Ruj_)25coM{NTx!HzNAozz|*G={cC#h z=s$GqYm2g@PX`udkJVx4?6+1psO>i}_XcoWqCb4xO^J{8m_m90lMGjsR}Kyv(StOD z#p>x7#!%&BR9_z9QPpCt8VgDNEr&^a%k7icXad(C+p8VLZEEmt+H@K2QK9HrUjVgP zNKw=B3PIRyyq@-&iNQSNZyb)J=k)b1g(Nz{AB*cdy$;F{XT%#sg3ZV1JtOzhM6F=V zO(7Sh1dljT`OY!7U0lGwx!9#VN_{SFzYkoY-V?8yzh*=>sc40wE-QI}j`x8)I6--` z9Xd0NC3Z_BrzsN*al!FR_9H@ z%MkWFS{pq3W@H-R`6`+7UBfEQt51Ew(xUT!5;Pc$x?mNaSI?J*(-Jhg05Z;9WRZmA z5QU$>lXkgP0m4!HiTGs8;8735{S-N9n$6(wjqbN6`NhkUMUBl!6hTd%r>f<$Dca1Vx*q)S|Qpa-JL_ac@L_x{#r z&)X~1SJ9{!ni*>PD*4O?J#pMqnidk%29G+@gP+=(WuvPtbfYQgyCCQcHqdnLLsmVx zJHJv+zl8A<;;oEIR^8Pt8MpKf5SPDLsn!H!7DLcp@MmZyLI*CpkC0;ZeA)DuX`K~J z(v!>O1(ZttB~&U6swcPa^KR0IT9A9bLqSdP5#$ab222|EW~?lVmKpK0S?}Igql#{3 z1`4LIcwT-|o54{yc1j+fC$Rl0@toP_GvGM->>0iQ8;Y&5yCT_vNk(~6>lREJU2gt1 zgr=m4Z8nEF1)Xu!rP{oEYAz>)U7!auc%oQtKu|(hCZG!gj=>i@v>9mOoJs+lNz%z6 zEtXjmI1hht>jCQn)>2klsCzE&V>9w}L(kc>y(s()xljkmA1|o&P3* znHDGX)Y`Fs@aQ5@BmEXiflhH@*>z*qF9(RSQ@4`>d3SGvbyNn$Pjawi<pRe3 zB9lhXGkFOQrrl1G;=#sHe<~>^@lWO60~uXK4GF>KLI^z`Uz$~Fs}Pl!_(|esZ-A z7G9Jt!R|C;OG8CAZy`tq5Ce#Z2wnhNhi5NDhxR39GWm;fbri4KetO;j4yB+t;gD6M zyuv6r&`+(hW)v%k@Sb_n%!{RJ=UAR+MZ`sY zaeBGO_<+ZCzj@BAhl|RF>cH40BiP+C?@y8)h(~#qa=-Em$Nx+~HT+yM7QL$I)x;bn zzE=WT`N1Tp?`|g!SM1LX`C}@S`JPdB@6nSh>PH)EeFS_DZVyPGqwKgd<&?pO~w|NMW3+H=*z>d&83> zg018m%1s>GWYclZ2+ff4YtsqHLh79DrG&aK{#^|e`0SjOArnE^@Z`cICX#Grhn%Mb z(p}KE@(%k*j9&V1tHR53{*J~eW}f{x&*Rm4cNdBd<#By{OoO;BwPQD>)Fk1vFTF?O ze1rRn!R+>bi@(vUH70{liO=d9O{f8@6tKou9htxAJ~0Kiz5032lp8m$uK!trJ+ocw z+XzcY)VsQwH=f$uA*z`4btA>4CEx3%HbK^D-3GY;RrsPSygbFJF4fiVT2*UTAR-C& zZt?maK?72eIDQXDSY_Dq?alzs`%xT#l~$c(4QVam7je9}XfS?^5WE1|QXufHaIP%} zY*}BI*}3_Ep?_8_sUp$fSsQ)Ba*L7Q2zrWTS?kLY_~)uQc@- zoF9aQb+liHV+S_nS9F`!9w(fNl8|lQ+7v$j5>{rKYMp&+D1vk~Qaxvz;wDcHkLX#n z{V$7Eik}0R|5 zk3ZQR+%v2L;n^V=x1Ey4k@~+AxZ{xq%`*CRq-*QALHWB*<7Ta%GEK3L?=#pDMIRKoEUhRo_EfHDTI)plbWuwl%xK#wN< zMPW94rMz{`%^IW9CIc%CZ{MBMdnB7X{_tEECC%Rs*Y$C+SRd7hj1QK}`=}eRz0JSH6s}h@1Y*?T)n)h$3 zs=82~Xue9_7fprSg7yiA%_z~!=5<54nai3d=VW82fPV{npRSiGRGk05!%Ha|^2+GC z4a5@27@p3zU5`Q*NWo{CZ;5Q@H1IY7RrK;ULgyI9I#3mp(CoFeG^-@JP%5=T5$h0j6OrIkt zaLMAy_|!uwH+I~r#=F}$R^5yXNhROhFJ$?{Z^>WlaH|}s8j2!&6r++)J82}!Cq$rX zeOHMZixtc>Thle58vGF)_~RI;6!#Dv*=S`M(xa34-Y6#J`T~_UAe21}Iz|#O)Q)Tw z66WP=PBkMkWi7{;V~cXvkSk_Hv)34rQWF^zeBS^%qbr*jee%#dq;f?7W!!Fg>KokN zd@{s3dT%1~h!uaP3N<8^$71fq9$fg0_$?ekJO>{xZb3kK+tadpmWNi?Oa@ZP*?7yT zCL`smY24+IcwM07PD8`FNltm5*@}``dwatwvixG}`}#F=lxRyMl7MH(Q%-f2y1Y9% zbXw>}eX!)e8>5n!N;|S5yFYc)9Ggb;ilMseBhL^{(f{ zHM2NF$DVLRz;7BVtS{=q6-%8tT^sQ_4dd#kElpc_Q++9zjVYt0G8lfe4SV8rc-#kZ zhr#hd1Tpcw;l}dTwUfi|K+dfBQa=w=L0@AucSw0PXp`bs86r!TxGzn-sqmh#$-HT~ z0Ix^rw!Ufn2nEI{D(PKQlAxTGYs|;?hC$MCq$1IhUkX#098W?#p zmg72QFnf8XbgKWPIY|Ytfu22Die$Ck4H3f9oL5cUdUg{PN>QZpn`tEeY*~`i=ob`NIYWuQ2@W}v8cY5MV`2VX5FnmK%5Wqo7oIRYn=u8hH1N6Wp(WKV-(3z zgvXFAHe~Z&mIz@-6axTVJglo)F-kQkxz$>qwrJ%ZA?G5u2d>jmpxA7tK5W6cz`5jDFF3+KWzVM=Q!6 zwW{dPz~KM1{Qk|cqLGevO`GYyLb>km0~6!UW&RGnJ-uI2HPu_UFqXlVHHgQ=mMp=q z0eLb{R3m=XOq+Bs!h??feaQ9s_e!Q6ZNZW__ASIJ2q!9ijxe)hZdi-i)O}rPejEV^ zhIzYf$Y(cSs-S=U3>l>{e%`L>)rNT4Tp3r7!5uiam*4!=#*%MxMGDRh#S88cb$TT!XIxqB*M~u_ z5FCRSI9)NCaJRb2uLB=6NL_M=Ug*xf;%LBCngV(pIK4usLs;#Hpm5=DT-(>V{jk&} zX)JlD=FTIBGl?8aD{srAuvDw}&WS2g5}L11v_ zM-u*U)*P%C9r+2B28q3+@w!WEo82MD^c3g6ep!5Uebiz}jemXAaS8C4rao+cR}Ay6 zcsgimy>;n{-Wv0=8iZVKV$3#_t5c#x(PGZZZmI0`Ru7{@VcOj+n{MZ{mddxg(@lFS zH|rh$e(Sz<&aenh;^VjQR!A;H-!^Ce%CsUi3oH6{uo^{@&?p z`p?`XOkRFU%&vzoBdj1>$Zsl$ivy6gbGdx--=)j>%m3Pb60$kgg0aR`govDlFE(zn zKXz@hj<;Otd|M_e%d(!X+3GR$=iTB-Vn2&>{)0t%8P|Xg(8&%sl-uXHy5^7QBvIDd zrG2n*v+HrjPyENHY{OELu4;tzv3N^7&mU1ljEzD=&)Bklyrt^8ghi>OYiH?&^e)@~ z#nYRIL-~Jy{FS$qB}JA9$yV0vYo?MtB#9bJ2+2B@#yV4E-$KX|m1N7l4a1CGSt4W| zhOuQGW1BJS@BVy$*YEcibGt6?>vp})ea_=NpXW5+kre%+aI`li(7YI^isPX+$ag5E=L|%KtWG~ z@BZ`F?achAG+4b<&4Yi>2uzEfKUvQgVC_YRZ3n#%Bj>EssyBL)XM?63Hf!$8%mhv^ z^|!LXPD&M0)cmCPzOeWNWjuH!8z~G~Ilqfy5jNr8ntwgN;N5a!P!aQ`Y8}_BOcwOX4@`uB&vwVJRE#2l}C%x;>==MHvd^@q%IzQYM$Q4+pVp_OvUe_mbGDRB_e0w?z53H6b5ybLi~K1T^t{;R^DZou6_nqE zU@YWOjqkOwd0-@L5Z+C*4Gk^CiSdz^+rV0eWd?Nh!(K1nryZBj7=dI4PF&GXMCEg^ zdXCqVB&}6jbuWUxppBYEY6eG__KTv28}0&{v^Z24QN9-Qt0aHbr*-uL!*uQ*iqN-} zX)XqrmwKEfQu_qM&mnUPKPj&1TEWcU4ipHHCc zyJ}oH6utiVHeum!`J1RJ%3d>eKv~-9arb82v{_i9)8N1-6)#PFcCbIm=1Nn?=lg?l zQY8;9w3coJ%1Eesb#m;e?@M=QMI37nP1RGwHstx6PC?Te=+YHQeug3;@6oX!Uo%Uq!d^-BfZC z*lQ*w85|P_8MIXGlk<&-41W2f_fq_lkrg;b&RJpcy$2YFVuyn2o!;FSg|cbAzq%|`Jj>z{UEM!g z=?d!w%H@Ht{+*Af{MYPV>I;mvZQc7WDBs+SS$K3|RWp1RvItpkx)+gyW8UHSS0AKMjONR#6PrAo zr8pi|Wv^y-@rKkdr4lz*W)=KYPSXQ^{<4t`pFR9*tq$Z%YMD^LIb1sg z{@%fNX^rAIZX}$G+P`rQajsF2d;?LKzZOBAvMAPK5kX{w-FKb`zRA;=hvs>4p~$m% z%#@>~!%vo?xI@U)OTTeeXLwwKqwCs~*Bf&pfDwFJf8jm7fP`-K8Z^Qra@ zi6O+F+Bje@6{^EcTk#K=v)zrXZE0rZ$1EUXeEml5wYsG!`P)!kdO3RCpDdxi>~2hLzq zsS*%HOlZG3z0-8EdiJCOH5Tj{CQWIx`rur^5F}C2Qr{~}im{JtVFkm(Iy|K}JM76iJ zu#%}?mXrI)5`pwogve!RAUcJKu8FdG3`7^koC|?sf`fu+bS)_hLN>e69Y7a+(Qo z0Q$n#Cs)834@s09D@@8e^|;?+DN;uS-Z9^8>Yp$C*LGLvuVZDD?Vixz=ABoRe$C$f-*!DxLEk=s#Z|`aNPV=x}GTR#0 zsN#|m#T0VId+Vl-z~5%zd5COvb91!Cvrppt5oy(@SZUnwKfWmd}zO2b?2*m1PUclbjbHAv{u$?+Tqc38{xx!{DEw+!2spD`yGS>zPYs@_cOF z&Ch!=o`{1NOcva{LhAG3VfYkQ*F~y~$tQl{I#;lun#7{P5g42M z8{1tNE_TUh^EfjjJolob_v+t-;a~B+s!RXJqjJk_5h73mPaVJZf{i6C;i}I{N@g-k z-jgh5DkCHM(P0ScWGzS|xh#utgGIf3-6;HL^^5M)uD5<^Ko84`Irw_ApF)a*s4;K$ zy*}uV9ZO~T_Wm-Fz3(~Z`&a3iaEJrCJSnRpbTX5yRcj?!_U`{FM@>SK04*Z}Qy~1Kje{RJl6$5AViOhpuxNJ$pOOTGW@vYq#c$eQcvM#@6 zP}e~|&GVdlig$vNmbyscngrMJWcB$qbIqWJex?Tnz8PlPrXcOzy3{a2bhfF6|JoI) zEOS`^KGgf*BQ6lCndQCO|4RB~e`+!teqQ7q5`UN2IC_n1;AQJmcBUVcC7@{R{B)b# zbsuD1(tWXT?;50pHG7!UB$0h}&0H|(2TE!6R+0w0l=8QThL#ZrBqCY;nfmR1X7jK1 z5;|w_ooh=PGxr+=Q#2amt?U_>QN=E;p06VX@SQQ+)i3m(pv?wx>Q$8s=M3iQYXu4Q2H)a;)&4Uq9TZBZ*(Hu6zxOrF`Sh-IhqKc>UlZ zZ!jCR(U=3=u$}8X9f@x)Q;w0l_3iE$%(IF})jKI7F;$-i@GERXMG3Qudy$p(M|a6S zck_0=>sDr`_O>#`VczK7gL`A{^C1dbP)^wJB->&+ur!{(*$z08ak1KE2otXtm@_tn z!6*F99oDpJF$HGS)yMsaRaHfw6W~SZ7pkl76LKdB+(F^N@^WWa6pfUt`urJp=IxhG z2ERV9l0Y~HZgMPh2j}$G$^dv+U353lb%fYQli(b$&voz8Gq(I2Wy=N)4_Ym zc5Y(w4MMRkz3=^Q$Fp!k3D$%~Jc@Wap2ZO{RMpiYVx&Wo+vvhRqE6~Dqb_b7~mzlee@m}`UZbL**eJD`(N;Sx?ER8+Y2_CXo^H@{@&(pjAo$h1Tuq^D4YL>4* zpcnbR6bX<^W~r91zr;y*&GGF_Mzs!A*@)nQrqR~z6{D9Wn>jGF?)cRpzsmTd^JrxvGF18i{yH z4cRPP$B+hBUOfDf8fM$pcC;qb9+`wSlFAQkMIJRF^+TCY2#H0U5SeNf9i0zo+iUxZ z9IFDibM(wr90FFS0mwv2@YKjZb??zty%dCXUYyK*vxn1DnYIZg*(dRL5xMu;`W05i zvr#OrOVSr0YhKUTYA;|JqgWHy)ocewbx&~HW9Qqm4gCcyttAo$@0+Se8ZN-L8rN8} z-S(}uTbjIQx1Ka%=df75S@?dM#VH?mK8?^b4BGMhyuyW(>^_hNPw;4`A%#OF5d@3Ca03Db;9Q#`E^mK^>d6am|D#@ZpK&oFdRD5FxQ2+ZQvCR z@PV;*DXH9}yuIK3BJEOFZhscWRrnwXO|XMUPK`rKrma@yS^}w7XB5bp`89n+U*wUS zPl-^o`H0_{%Ty);zc+Y1Ub}{Z=h&5MtSRv6#6O<2D+wE$>illwLiO*?`U@lgc<1S_ z8U*FeGE9vtH;@dlTYTvBI0Qb}D0-c6u!H~m&W{G-4BN^(s)YYNhowTnrsq+?Jcg^&EK@BBB}OR1?VSa06Bh0k>Sbo`)6mLEXv&P z=G|#t%Yq#)e7KcziEs6#1-BoRB1BA|PDfYgFuh_lqPi@$zEk}5s#U9BVW$kAz7<6Y zx(3x+a>%Sa3C(Wb-D`)~c?pFLlOyS;jF=rgnj8T1J}BsniAcSi;;_8IM z|0(W9Ndh%6<&p?bUL26{kCx28p82itPUc4%UPkdf{Ala5;c{~q#-SvPhqS!W$~o>B zD__5w7f5xwli44s&@#lUGY4Mdn}3}n=bemRp|;j8o<5LnGnTJcCfT$M^|k$6F26GP zyLHIm0eK5>g&t`K<_ImRo4VV%xzmU{J!I1BZ|^+UwC1;7L}bdmQknTnKBhp1$w#ZP zCGd`)KZ81c01?K;@AaqPy-fM~-qI_99Np-uzNirbS6u@1>v`wHg*a_IM-K%eRn zu9GQ-6%7Qs1^pVY$I=eYu*hK@GaHAHPhqBQcT|CzqpBw=R(K{Sc<+Q*^hvYl&P(*~ zzNlEI@A}p2d&P>UMDN_&Fsc zs&D;al2d2wJF>c+I_h$XS5m%8o2~iPdwhm(Rc#z+gkaP38wF$1{?3=A_$qa}kn(Md z4}85#nDI!4D0IbAisWzYV*y#d?EQJ@0!(;$ z^ZZN=7R+1v(8paz-?o^()~wJ9f2(FjIUy~5Q2K#abvn53GP+cN z&v;Be8HsIGHrIAYJPF@9QiB5Af>MS(*{E4BU{r!UJm&hHWz^taTEw>6-8z{nGyL7W zimKMH+M97q-ij=(jQY{r1&(2jvgi1TCCduvzE5zvM(Q|fq*l_7PTj2S5|Z{Qd`;He zB@6lpHIO(-*G}`jzwGdHOQ5Ok=(TighG{Z8_+sAc988UVUw>0n1~&lK8Ze42PKk>k zX91k%qf95Zf+%wntR(1op#lgNZ7g`?jeuy5ZeCdji}z-_iD=t4pyDt{a2mw+)aX+x zHOc>~|6FPLX!wE#=@)ibcE%JmBF%#}QChY&(u1R^K}!ICbNIZOtHjD*T3^jBB?HfAc@L z7$K4Ti%n8m&oTaQ5Yzn?K#pO4c{vN*i;z%T4agVI0}_xARg3AAFR>!T;79^ULfI$8 z(){iAwUXWjksDE48)%7=>Rr@nkd@YU+%ksApUisRb)S1 zVJ4TC*l0lZOl2H%su?|cjWKI8CNbxW(wW;lRB5E- z9_jx$hGWsfH@}3ii8Z^ns};;!{pUtIbLL&)MO8pjl0jhIPkmM}YfeAEwPPrfWpy87 z*HL?M5PvCtBlbi8kFjx;vecOGe9!z~_~Qdz4|=gLGVZwY?N2M0p5nTUpX3?pc(eV2{1MP+LVn{fVez-L#u9rvteq-DEH<}# z%q`#zNZQqbsM-koMI$LLnZDNgaEMaQB7OhuoN3~Fn5f6Lt7_fZs<*z#)mQ(==e}Hg z$uevsk&md`NYTaz0gdN!bf$0CoPQ`sZkOAFJ(tLO0Y&%$cR+;h_yc9coDa$bPNtrF z`Vh&<_Ug)m*V8bW=J}?)k~*LeVzgL4!Cw0_a-ZAcaex-PkHr%G@y6McE;faKAqu>dymW@+Pj_py1j^}O?&pK@Xw#Fro>)-{e!Zqmx{C81RZU@@todn zt$XVe|D}o#ex_p$K$qrt;7xsg{>E$y$ zc5q7REw8t=W(%-Pr@>1=O;X)=GbPVgb|H~ip~zXqBbDZ&xIQsd!>n|%#K-&T9KDCD z+ie_>b7=dZU4PB14J?cAZ@A}!yJfs0=3u|2sr5-uB61SK$ii65lOnVnNcMI`u%R|N zTK8}TNp_*RZ7~NWgIB&e{oXnTaJpHNAPy*3h?6tnqUt_x2hDFsF!Rj_2{cpJn9*fv zeMbEP>dvoTVx0Z_e@Vn><)5uDdx5#`I-*USNZ)et>ez1WKaEPjfiMPLu4uCbgnp99 zHWA9pezg=#0&jct5VGx;eoW>HT}+Z@8ihJf#k0fuCISH zfVGcGf~!Fe4Nug85uV43k-A0bwutbIu4-lZdcnU_zJ?3z)OsB=%JlDJ9{NU@pA#we z*f>CEav}+juRJ~qdq1bx(R_4>^t)cAOjyj@P!gn7@o_rXyD8`%x-Tea*vmZ3o+(XL zX?Q!heO2LNRRK55YFu-!q2w4wxz>4ooSFk7lf2y#03zG5J| zY#QYKC)c$?eF>^KM;G#eBG>6}<)`=GCB{lVb?yV)ynKz)R&D1%oih6GKXSuapNY{f z|GZ28qfK4T%B%8I9?`K9IOoNSxtVwN2_I% z=U?XKOP3qQej|6+dGsz{QS(xSu5CztD0f;CW+Tn=^5SdbsyATq-T?^2$mqB5UWG$b z_8WPNtvkipjz>H80e>}OGt%dc;b9CWb^lMpk@xc2@5~X|wAN_Q0fPa>{%EUDsHBN; z4C>yNUd-aN3>XOJd3(6=K`5_O`O)Uq*UDDP#;XW#n}A7$Yl}`}r>T~bg?3wlT41dF zLWllRuZ!W9OgO4B|JJ*_du9nB4SO$jr^68UgFjrL%ew)i^viX|aC%6I>bDSzLyv(D zHEwxcsxTb4wG7S%`*`4;`?JQ)F6m6Yql-=AxVpqtZp+IX5Ho_`<*wxhTmUw>HcC~% zWuz*OD3-64pVsu1Juq8TkYO#nTeml2FXGbmqvX%=dvdS^l-te_Eg`jC%9km6j?~@g z?lT?9ZJ0XnOYB={j9jo=Kj#!%f)krvPv<8*hKrk}eDf6R|-F>>6vwcbPLX@B2n zr$ook$=*V?PSbTM`RT(a#QSw=#L=i`;5`3+&uugHQ&RX*Jv(?G-;acgV^j14Wz-=e z@+FI1yM1{+{T7Ago6B#DMH~%wJ$7aKK%XkBgAUuJGt!-+dH>^@1%01I$`uZSP9{=k%}`&|l%LYG?*l-Y)F~oMScKq2 z8d@K_<2p^ji~1ot!T)0RE<`EjnqayduFKa~vSeN6ba+v)&z%3Y>5Igu4Uj3=-J2lQ zPX6w1(_Z#<>?B8DIBol~?y$sf%5LzQ6!jdaH`8s=LMyHGXEa8pJIy$uFYlxNhAyj{ zvG!wWpi%Gm_^WAf+R_CW7yQga6Tj=U_poP1prR428Svmu%}wJ1#q~l_sbJpGIUi{4 zH<*EJxwY`(X*Ev6PyR`iDu_iKrN$u2InmbJA}(lqA#4W+yK%Qe)m~JPYx?8pyKw{U zfif{O+xwl)3EzM93XLkPeh_sAdkomud7$^FpTwP34ev2R2PYVlt3{ADfsU&xziE2T zM^qbUvmi-P`to_Hf;EEWTzB3FhrdBzBS4bk>H|Ih84un)sVc|gDe0@A*|~yA1#joH z>O)q?KfjJ@TuU|}6hWgO_Yi60hh_Og0=4_Is#0EWL4rR(k8t42u4wAMOuQ8j?^pw@ zh+0}?5r~dhT7B2-H`h|zBWmxNY;BS;6pBaKVPXr!eD3q$4?f0d*f-V5mad-niQYvW zgsShToT>iUXQ#5@1TmAUt#B{tM)BHI4yM`;M$k|AP%&eicG@YnPER9}yU(sKIEVOd zuPUf5`wlUu<%uYvd3@a>RwVGDGVo<(Y-#xPp}FS!pmxPZ{+0C>0_j) zB|)o1flYrbO8|jkgZetUA^ae(VIk0HEYG>t2bY z7&(P@+#IqgHb%}f(J3)nWVT1Lk2lYIB@E%89(#q)vp5j9@-iN_I(G(#Z7^#4IHFQcgYgA=MgwLuUL`a=&47vbfu zri9lWH%whdzI10_hGa+ZxE9cFpjH6%Qh>Yc3efpOojh5D*D^vVs4v@`1J^SDHE>Qk znzNgfJ9l<}HlzUUP6OJZ6x#`wl);N%CO+|f#i_rJwnJ&Y))c0A7!~pO)I&mlYGFtfG4H0$8$$}d*)T|l^iK(ld~@ui z^Y^D~Q?F_M#i}hO?L74_9EhRgs?Wn(XYAZYB;@PUM(MGCT$`GdH^t*weC>A8d$>VB z?xnvz^auzD8cU^t_9L!M1+Siv)ctcRY4`H={|%}+G40vZosNUdzuq#F5T>eaC1iO!8l|s3$n`^n4grA>x5vri^u>RoHgO=P>dN zmZa6>nC%c=kOy7Bt>Ex5V$9ql^GDZ3`;3Lfyeqt+LFh1A^7o&O<PTN6g;kk8nvR&H?LAX zV>)K;r6o(n*v{+eaX@-Uxg@>Y56YjD6NRwHa@bFF2Jxve_74}rfU!qk{6uz=dFhcK zg>xJ5ByUQpen*D6hDqYd)jYWExyj>zDZNF#JnveUWQWi}Gn-JGbaEYp%aJ)R{g~3J z-J$1oFYH!a2gxyTDF@f}BaZJKIc_`>wRqd8iGfO;NIdggtCR73y6z+5?br$jxTR*$Lj3p{`uf$gE)=b^!=r5eQ9S(3Klqcu{%y0*+tcba+O+TNTG=FnFA~Yj{LS}K zk=#xi_O&tm&9>@=WV#NqPwv*s#G|b%%`1V5GcPh)kjxsiJ^IGruvCN#$D)$vb+Yle3(=|+#S0kXY|4@YeJN&`?D z%*sZm=-OMGXTBU75(pH(5=`3Q-Wz>g`fKXlfBQb@# zAw{Ke>MvP>t<-tLC&U_PihOak>-X4t)HU5*I+yQ{539%3W*RTJHig$uW?widF&#W> zSUI@eqOpJZrq_c1K4>`;+;OK@AfbcgCj>Mg=KH!$NeJ9uhq_-E#5l~**};3@_`8Yw znx<3kg(2yJ(!0j0A)MkA;my^1fU>m^`1we;Ytx|w1D0r`QD(=(DeV2M1@Vsm<{Dvf zY2yrGk*QHDep#y=kj3s&vS$ko?A$=Xj7qYxZgm0+I=3eZq?E{lzuo;aoP$;k$@$b9 zHAQ!cSf5J8f?rwKyQybX{ptApwSv@6@)3f=;BWN1WcGtT8^+U@li#19D|-tAuUn=m zH$8p9|E=_8SZBr5qpr!?DSg)#=ZG!~NFVMDQ2H|+U(8`XF+81kF8%$}+}f%AiLN0B zXffTOZZGoV^W4QF#n3>@EoyZD_ar)TPHc46j&K)V)Ht%Q99aYR-mR(oh z7S*YR3FP9aE*6k&UC0W~y*Pf6koW$f8_$fa<})=juh~aGa4=$@NO$G50-^@Fxv$vt z5owHCU$GiFCb|`P7(ncUTsKa#=AMgLs*yh!{<7NPW1Zc4q|d~b3HhIVbPgDT{z%d5 zJ5FUK`_CDT+a3D)5fMIf4O3*y`h2Oc)KvQ)m<0uNakE5mlv{&zLpy7KJf)@mH<}ST z^OHd*x?42&4~pa44*IPpu`bO*n6*6bj{{wQ70eAzCVm|&UNX-@*8aA#0Bz|S4viXt zZe2aqE_`jW`=hPrfW;Lt-Rn5rLd>yt%IX6{=7E!iEwft}XXFyu;@tTem8%Wizt0XX2 zB{+8B8BePD&B+sh-aQZSCiL&=yluOU|1po!em-YE~RjM9&)>W%DCoIdn zI{}%H!8NW})j~WFVzw_zS&wVPcWW8oYRQ+;%mDHeQ}bYlU@DY+-lioT>jQJ033I?r z7J@&{ZT&EZm!~FI8H%(PeM=3Lsrv^K=K6B9|=CI$%$AMfcz zPpd&VM)ZdLa*`Fwb2%4LW}8ZaP7ii7g7>&5++WK+=HaCK#k0UcKq*j1i*=U_emVAy zu$amBHy|fDc+ZGj1=KVg)OOEtE&2M0j~^xf7Xm2exyRmx2cC{k7}HwE&kDBG>tR=T zS+#)YFyq;kN)prf+=dx@WV0vbCH|}@Vd{kKsCg~u3ey&wYOIEhmInXD=)AReg?CC` zbs14b>F;4&=!b4q;d%#d1Wwr|TQ&p{%cyDSfEVYV)dZVgd4|0|&zpH)$p-)nqRR@x&+sA+D@8*P6n_3W)$2xq7J zlEaZ~e6d<8s*L*hRDWuiA~1jc$;O!Kx4t+(b&qfvv-%OLfn@)Z3>ClunhL|uVMm6MGcX$wW42%?DQ43 z$8l`UU-Ivh9y-5z18bnIX4^l)xou}Tyj2&GlwWkXY@;(Mk9?dgnE$CqLfo$4Rm2V) zwe-4Qh=_2p&=}6nYjAc_=)J8Hv2Z`>>hq^wXu>=c8?fcupxV01jZ<~LJ6sT~d)M4! zK6GwA9{zbT-QRit&?@m`IifkCr-2NLKX5`b;<}HCC1>`o-fZNfFzfxtFa9#r((Z96 zpZ@+;{2zSm;EZdsOc5Y$@9{=<3-7XNrr`#A`EFoTrpWZ#x6un0t7l)*lGQJFXSHj4 zOkcnCFj!VBMy|+QSMpx3rtkFivoazTb2H}#k0zgXi=w`m-SV>3I+c%4BgLu4$U)xn z?pO;n{VXG5q0BD)Eq$`Bh++v$5 zd(Za9RQV`!tGeaeH+&~;xy2dth?!x~C#U6;YxB2X1HKMN?O1e{`1^DA$ql$eL?8uE zo_Zjnh#WGefOhw6w2V=Y;Si9vfJXO&8lJjh>b~+fQ^CP)-v@gU%!($e^Zr}*4)8;? zm>kf#{DZ&iz{60y()<%yg?ilR8I{p<)E(qNlrPL6eEkv9?R~~VNj^1kEWVUfcC#XxnUOx{Iu*f9Uu>}4RRR+X=6>0`br&x= z#W9OO44iiPP6of=X#d|VfUTZL!yGq&Pr|-L@NZ2(b7-xA-nX}%RsxOSYb;m`VFWmQ z7&w__UieO#AwnOc4XOfbQB4&gNJ{n2tA(jKVs}<2BFDdYAb1ctl(lzLQ+`E7$g+I= zN>`Pg=okLIh26d=ApLs&FOE==z{1Jb1LxJt3b)fvV8M>MHob)dRY!tFE@p|jfGRX_e| z%(QFnBCuTX{JmZKqI<_iNbPvjKJQ-DA~X195n5boRPq~UUXo+;Y`ILPEV6MM;9=_v z>A?>d2VWkXg~+MQ{iy%vA~HhwTASTsC=%A?$mt04Xr9ci2!-lDJEwTLdEN&~JZpaE z$xo1@`7SnOPIaL%f3mx5V0=~l+~y&3%X{Z1KRq;};ks4FDD4kujfeqa}Kj}-gZwf-lAw;qGn@V=FJBBHC zW@q!CDFrN;KmGan|M>DA);wz3P>X*X2)I{~ zAUZ)#lezw*-jL{4`4!iZ%ceBIMpG-wFw#h6WxC98eVE{zh>d@MXY%n2sw^9;(Z|GX zlD0^zyRP9*Z#+1=!-12(oKeW69po25pCi3;gqO6@> zM6YCWSShXREX%+8v6|JCizU$Cn(L*W)6V@OKprEZS+D5Td6O5u`DE`usf$Y~dU*>efG?I0to!!apsB2y>_qUybqdO&& z%_d#d)?iJAC_9BE3$d0l5yDhgqs6h~S#7*c{R-=zuO2`rT-qqXdosyAMY$*D!rG`o z`Fd9v;VZwPv_0-n!8z@9ud5m+?iCGSD}O??tBwE_mT+4ZptHVx57)`Y*}Mn3JNfv@ zPu%|)?J55BQ3(_qwXapO@7Yh=1}Xi|u|xor#Isb>h)le5BWUb#VW?0~Q<60^<3CdQ zE;p>bIVIOmGiBy^H+E%qLagL^72^`)1ySeCVaV~2^7(5hv!_=kQzJQV4Lr9xKz?Ok zG9>9+zX8P7=UJoo=dKEWS`^_nrDpcOu*AxT{@W^#Opsx;JW}I2(0|l(K6nEFwLj|k z6UX_jH^vAy$ODBo4V`rQuAGncmv5e-_BfvFRiDkalI-S%!bca5pRB6lMjj~ku59EK zdR@~Uc~{MyueDq*-hM~^qSey#^K10Do_N_}_DSV|`;=pFwLFjJBT4Z%;X#VKm`*eWaFoF9^m}3<6`#2zn0y@c_To zGb6dqdK}A-13*3jDw%Aweb8#GhTG}k{ww+O3>QWcCUNqkeh9Y+>;FFHkwiMRD^Zfc zJ($e(k`v!^ChzTu4f>)`*x;E0N!f%8+3`nH!Bxgp0j5|M_(`1hW8Naw zFZ~)V`yK7gAISLSa67muPQ>q12(2;OC?~$*RjejPzmRKQrlgB@84jLj;D7yU6|8Dk zQFT!On1!&jO_@_-j;Eb2J<PY$(e{o7gAgsw?NRR(6!lmcB_V*Xl*V!6!U(Z6e z$T4!)nfN}!7l3c_yzvX6TNWq_?qBzQb4=Mk!vgW6wksL;6A)H=i!Y3byjT`E@AJ+( z-vz^T8+Kh0B~XkWaBFSW&Avybp~7SGOgxLBuCA?iA_^JMQYU>a3G6tr4u-Qn1#$0_ z_$3}J{qHpOqWh~rfH1E8G{dk&ChEH49ZZtWE}nFL2gC?PVQYZx=aQI;?{wp2xx|&v zeRBV{_MJ(Y{iFInG`#BIfQp1pDf#Hnsz@(Y^|`z41y8WmI>nbZZ8XH41TFxM^;2yn zpA&tR%`{!nEE(t4Ss<)DS)YYa_ zKkoQn9H>j}1HV5khhfmN?NGn8ZXr&l_k6@$&|K zSVq0TvH?Zj6(X=nJunaW*Z}zd5fBk3ahG&EKkQiNPCc{#+;44etMZ)iu3aR@ZO^Em8k@ z(%2LP@KqVTvs8*VGQMv$BDrrwy~M>blk*KZ<6L#Whqd+^>sq>#=`n3y-K)if9V~B5 zdIVG!{-Y@jEv{}>#ZfJj%osUmeLO_;7(MX!RS_|?J4-JWlB%jmH)R9ncTjpv5 zd}lqS*Lz{f@TWn_KBQ%em#Vj1JKT_F+sipOui&jPGRK_VW>1^P9p@GEc_D|_00%Vp_b496*-cJ7zoi`})BEw=l3LQQn6#5b2J_*SVf2Fy^ z=!j?r4zRg)zdd}p()e}I96~=3jOEq3cw*@)pIXtUkh#Nh)ZS_7?%au{IGm@C)_(T% zkZu`z^6^(U04aN|*tiy$VJ~DE$P4OJAi^v3Nz1ku>%c3fB6lAxUAO@#t&M_%)kW zOHile@l+QGRrC1@=A}Qw6u+fF19qnjiCefl=Xfj&tOKxb8QdmhiwaYxx$HlOG&pW3 zf!j=`Q6VI?mke#(z;u6RMH%$o#9Q077uF{Eg7 zXc!HYHPvtmab@YI31QJC3;^G^mFaZocJnd%gX!r>ynv$^^}i9G{y0!X3~c2-j+H-W zK*-?+c_X-Topmi$=^R>NfGqrkwcwl}fGzaM@kx#zdI9^X*Dg{{G45~IV4j6c&2wH% zoWoA8GBhOqlW|0x9_HpH*Iqei6Vp8JpP6UL8>TYDAFsi2p6_AJ*{Q%GND);shR?`A zK7v81*Y*JQq5_e6aCejtySUOK#Qcm#Pyiqj)P6J_gap2)5Gjf5nO z?)o|gTkcM!fN(26TFBCXC!#qBOFup=ZawY~=+dr2?1vJ+A)Y@dVNz~?nK}OxeQQGD+sA025HRoeY58jo3{rq8xWY9? zZh0PIT4mH5(48gNTf=;~Xmu6-GpUyE(|oN{;!kw4nypkjm;>y^5T*PE5hvuYH0en3 z?j$f;FviJ2xGv-{HxX8R8U1I>B7neG$rG;c%4IHRi}(O|%;oS?9VIg8Q!b>hDHSPq zEsi3`?=zmgDsvW{5Ny609>_nSwLB%UoQ2%wUe02}03I*nj?BF^pDWGzez>x_T0YT> zl$hxf^hILwQM$U%C7UCbU$}~Sgv~Nrr-SWk9G5U#%d| z$BFpPQ#L$o8I`r8f!6Z%s=VQ{%D^zD7C@G@!tMi=;BDJS^(+> zOQ$1Fp10e4aH=H7Ef2~o*og&V7 zPH`a*2#dWpLY_i$A_j~N`_n}a03r0M$IV}e6~$M8r^*(R!_oTkpOTLws+u*tAc)CXStiZLzL_hhE=49za47g98vr`{1n3qqFD_@!8(YX{YtV{)U%X9c}K zt(X7|qQLN#+y;Y=yCeqvAJ6n_W?g*6FnyzT)EzPAY7R;ed?)hr{vMNHT!;xV9@HKW zTDt#rW~ov%TYGwbUAjI-%R_|H5d0CDB*g(V#k&3P_M1NIpC4Luti2u38i&FAWIj!2+6_Ms#}U)ya}D{oqAEWIV283n% z*8jXdvyx%4w7|C&*3%riJ`X}dS5^)&B^~vjz`qWj>9@PcNR|DWDTUboqnf~SldIn`1RLB#tSwyqAwIxCN>nW0WO-P{W z1u336kLh@>eJe&z(%?G#gNw>QitfLClZ&yh3(DeUpcFLN_)3E~z`HGu&gog`WhF)P zyW9DP^OmTNTW)MKJqr%b3a^!LUsO!qB%tP7Shjbo20e0IIxt5LEf7Z^TJ&>iK01qivg9aX z;psx5YyWXjh=5l&iJ+1G?6>HIkS=Db&l^6y-j@o{|I-)KFV+Ui?6H=RH(Q6Yre{E8 zMLRcz<;iluZ!mQi6$Z2=2K$8U+=}LJy2?4X9~n&cMA>A|bOgV9Tgt~tf2w#c&-&#R z`A!>tRFdx$y~T!I`jW6dq_he+ymj?^bCB4|P2`Z;9{T%$Yg6m9EWEanom(~d3MX9` z<|~gLy3Aap)X__vT&*bb zLYuGJwEsQN#o+H9rKK4K=TF&UuewN5&k+7MiE%~bbL9KSpBHUj-!3JU(2iMcA68vv zHF76>b^D{%)mVQdH?*U=1$C&(mYjNrUWfD){swffZVv~eFQDMUnzg#svYWp(iU0>Z zt#EfW+cCg5!O8SOy&FM6R&p3{=VqAFe*?QV-1aG*=a^~RUmcVIBGf+|q3Csq_}I6d zmVyuaRZ|>=Cwkv|eLbj__FvJH$&r=Nc#&Cme>2pmFlv4!q3|6o>GuW1}0rB^D6qi{gb2avmtKZQCtMnf848h>c&WPSc~~2i`>y!dgyYN z=K9{*d%qC+?C%!HGBc6ZH_@&+{DPoTjf!*9K~rkG$;*BhXV<_&sBWIQYEgD*EXge-i!*Y38r?Pz>>iRx^$n zCsM6BCYS-bD~wKg!5OqSb@i)bz~%J^Xf-e^x}=(Te}ML`W8XcN05Z>v_I5y*0h=tR z!0UT%@BGu~{XL~w<)E*$1Fd8~0O&Tb$hXcX%&uiucMT%nbmgw3YP>eOS6rQZGtwF+zMD9!rcrdwf65-g{>9G)x>H*>o3&Tjt}a9^}B7yPQbu?k2+ zjv!1HutYR&o}Z&wgP%7ox%-*-fGGKU?{^Y)it60gcQ@M$>VLGU5dm6ra8o|TYclj& z`SU3n()hj~oUT4xxO0hEnwvgrN-FCVA3s^U#QIdoGjDQQb+7yK_O#E3W3LHN%jrFN z@E(=}-EmV{oKeU*)$Du@fVrJEHH5Fw2-|C?C1qKSzpTOE?tla8Nq@djSTkKEJ*^Ch zEa&XPA6nOvJ>_+hJnf|)`8a<=TQn8my4U}=n$ERdWzvOh+FB*^*Z#J|hQ8n1e!NQG z$qD}e;Br+p?M_GS^(t$oXhkutAzQ+{^T`q`S&~82X1B&-yX&x-hF^dd(G5loUUry zWh9U+2YAb{wgGiOAaZ`I*q>B05Z*b@0$YDwSIb-Zo0fG73>>%A7Xj4YI?ot8Mmyo6 ztp5fk?KzfDMxd{JWLQy+t<9$WES(($%|7|yKcX^P3alu4pqbb^CcbiVARs3;pxgc= z@&2v#aBrHsdAf@29nPx|f;H10MEz;ZrWXpQm0j7a>-x1RF?8(whSAo=>;Vw)|~hyIJ5DS^b#*xFcFLH zzP{YqASkHflGa5`U0OKYNjTbx3-}Z0kTjCkG%(ksm_fRf)=FHbmwO23EktJaEwA<# zG_9w?z%Qv&6{gYqmyXUOs}>_`jIl^u=KCVVl4HW}U4^$&bxN!hQ4C!d9xZ*cpWT7j z<0rrUO43++B9O`P#Gick5r5DIR6G_x#FJaT;(UM_0%*yG`i;c_sEhtG;qA+t6U$dV zq7USja~5x!1O6bsdcb^^{ah}4;^FsCaKUf7U|KHXcbETuX;Zbm>z6?Cd5u%^RKe!S zGX9N``Rc+ypN`)AydnA_ju`n-ZtlKy{LvS&!Tra9z!(2=ie(@i@_fA;py@Kl@KR^~ zasrU7mH_Y!9m`wr;No#ElvQy}-!k*prQGUIkVkA^cwwz5Yg_q99uK^2-{0r&E(r-^ za-)N~+||D-ZAQ!qFdmTt;8PTklr_zn);7YI89%}$J!|{E_R9cJy3^J6Pv$|T)h8}n zuH7f(KlH8p|05(W3SXx^t<;|!PwtNb0IZ3Om0Y-Z&$5npAIA^Aq6`9%(wSfXZ3XOi zA#`l~E^HXSRV8$G#0&XrDg$0k_Tdbk!P%T4@erMsw}O@mNDbHgjg6<&=sw7l_47Tj z=KXzc?BjPoAYyNJa$nch4u9piPcDbEQ7&pQKt7IStx35s&+YsK*`P(@DCLI8|6}~@ zig*vJ0st~Vy=&z$fWt8ZhmRayZ|9oYcIz7gC}o$98A6z>d-m@*^yS|+jv-p{#3B^m z%kn9yhwYkYH1IlimXjkAcYBWOxnEqY?_vl*z;M4WB75ZUiKqDNQ)BznRo=^5pni4u z1c}WwtKBwo*u3Kj(#W$o5N-X242Z887Ww9Y6hWM?x#Ga^3ZgG zh7hoLYCJ1IR!qz=fqO;wi2BpL1rNpRa0jZ@a^~l+Lc=3OhaWb`9S{)m$(`i^l$6QA z#DA30hFu(X``jI$0$;M7Q^b?}_5a#iPOxH~1I4X~Q}`KCc8K7o!moc zryaZvEmd71+rM=$Mmjf)-@JaKbj9DXEq$u*suDxmhVxZv>cDCnbXO28EVR|qM{!EZ zKcIf6+xC{o$_Px!$ZJWk$a$B7;p-eb5AK6$yQ_7Uf{>kME*H`0aF?pY`*40!KER|` z@MIC1*JcH2;P0w%{qrh`F34N15_Vdg9H)&_hQznLsWJ8_=<|`+@?%JagMbC<|9Dwn z5^sWn>$K4PpAEMnhRMccTlAZ!?3+`0ytgk1wu}O{j4W1TL^266e|xNd#f?YKQ=%ha zBH?_Qvh0}w0MkN_kM}azZS=ck-%{81zQ$oDn6rgXE{uFj|42^Tz4NSpf65P$!vC> z!>*EP#*U|Uv2yPRuO^Ql)t&KiB=>{%WKZl->ybiVS;D8NS3y1F-ze582K%QqUvh}g z7tt-Jmodec6-G#EsoNLW+3>q^qU3H!xlpI7y>9RJn<|DHfK#zVl3ULWA=gFkrIQ$L z8^VQl<+_!fQ!uoy-LybW>HDo9=I2(+FxOV}9kR84CFhbi$YkIJJu*zy`tCJqkgoYp zS)lrPcVg#9hw#b_8>RM-wEp%Y^TjoWHOXLp$W)t7Jai!Z@Gnt3_UTkFp``SR<_-O6 zrO(`_`^P!+r7Jn~u^nN~_j3{wLJm_98+WPY`dox_(SMAhjJt(~FNr#LJ5<(a{rG`L z5Y0M8Qyf=6%^8RyQK=ikXWC;HaB;$5?YmDUfA{DMjQ3jW_F5|kdQfff9`8D*P|Qz? zQ0gAOb#GIp=F9Aw>$@2ed`{vHtf!}t5#K5JDerplSQxk?*AtuX{>F-JP^N!3R*B#$ z*&cy`Bh#I0d&$Y9eg?GIYW7~cz!~eVV7g#XlE@$(KV8!wg9`28NS?vS;@(Zwk}i|_ z8f9$caz#^loKe>3@Ld!785@_t*I=VnZ1S=Q_*xi(q(%Oew}@a*ov4pe8!ut}!VT)k zdq=8pqp6ebYp7V1>zTqcKQa`n%FZ*4{5xXLf(yfm4jenk+dKehhtn{m&gf6>me)2? z($p12>Dosb!0-^j8VoM6(rEX^+AWXlF38h}2#dYn8Gn$^O0Trw-_-~Coo8BMsu7fN z&{P7&zRx9&T{DxZ)NwQ$-?Qq5is{VD^z4J7VpThnHyEt8ztc8|bF;sVkyfw^0t8+G?2g41d_< z7}o$!;P75^YZGf)FwMzW&;Zpyob3;Ke@n??<)4mEeGu=idxg&(d1c&AsR(c`v0*-g zA#6Sw(Th&)>K#+|9VPLN;+1Py)|yJ`#x(&N^%`)^v;%(<=5!Kln&)`1eS1SwUd*8= zX0xq==$w&|F=NgBHC-TWhnX*8GpR0>FB7Y7ZpeNgU$@Jt|Mi&(U~sFQ70nvQ<@pC^ z`Wer2D73EemA=S5v@!;`=v_Pdujh)k1k$1m!EERh^dRgW7Dm|D!fnd(SM`}mjpX1Hx*rzC`kP>@``Djdg@3R`O)1J& zKtFBe1V30Tvr=j&u2M(Q(DQNP8D z$-q$SQIDN0BGWzgDtF@~jRJg_1$>8tr!Sh0SG-#sESXde4tgwifY}b#LQ2wl) zD-F2IerEcsh*Ul*vQli<@YIC|7=w$gsCQWI48huR!i>5`aK~^fn@t&!X?g>|VgA`G z6gFfibEzv+Ez=3vW*bwW(HFu|Otngt5B3s?trDzofBUXz z#+&yV%I$JOp7UJ}l*4KhTCi=9;@rG0|+Cv!j2Yy4%d_$YjH|E ztK*VnkC0l?BN-c8g|U{M@g@Ka?s+cZqnj|;oarxEBIuNE`FH&2l)uS>hS>d*Fs}Px z^v&(0mN1mWNUdtU(VcLPg7jMmw21>15*Wr8Ce~LNMj6Ud2Eta}j|MT;POtjqeW7xlV0n#N)%sS*AT&2?M_Ijns0BrDC(0$$d z7C~_nTtEox>Eu07dsb65y5?_RRQGK36YURgmS}hGoi}+W$?!DzCD6f#-SD7&=PLy8 zF3Q-0IsNd#hj%k(anaOk-~&5XH4Q>Gtj9gzRs2)+)fWgHgVTEIt~7LN@V`QZJ-RwD z-Ic!=U#GM+a8|EoD3iDer{ZXR6E$a3bB zKWu6STF_`;9-)a;;p(GK5ODK%Bn!L&^hkO;8B#x-Uxd@@xD}6MX|0t?zxk?AL}jGN z)1#jmBma`4j_>JPJs>?vh9$#h&h%X=d&(b(VDq5CXu`)0D6v0h6z*4BX-*V>L}tJi zB~}wGSGd9Y@@Lf`qfXa9{imEL+UZ!>?|#U>J*&G?T{2ou+wfzZH0$PBsWhrmXx@vn z_N7_3+v|gWemMG1PlF2i9##1TRVnS>Z|9tPaLx0Kd1~0tP;l{Nxb5wWdg~7dt5xYh zaA8=&(*m?647asW=&&VzFSdc-bEA@kFvWQlc48%xOW#ie2#QD4cTN*|sX&NGJ#Z@(*=NrM+OUH4XQuG` z8%7L*DOSd{vDBL~+<;j2$Cl`gAX@}l*_q}boRAP=#+>e^3ZsIhuJcBy+|(`u_1lZb z^n1~shR=$G>^-?m)eHY-GqvpEJulzB*>m9a4mg(NzOGYz;`SxP*A4FbEaWTaRcYDW zG?Y$CjE5eHbB635oF`day`rc%J^8G&XxGUf;p5&>^tkLH?}T-OdwH_f&F6E^a*~d} zPx-ctcGd>2bNV}KHbB6TkvXBKI{fFs^MZ;NA3@|z+gbYs2k53@QHQN1_zc%}=$P%bZu7-~#!o@FK#c`Kl( z>^xEzjEy}7+8ZaP?J8{Gr*W|6bYgYb#)EFJV7~!f* zA@pi9dQNV+)GDO5jz79E9~vEty_KV^V>3$_e4}%!=dtV%G-a)Rp^hS=G-#P@v%HvQ z$gVFPETdE9NdfPgHGHUw$nNjPkh&687Q546Eb;VGEOd+ zaIvJ&&ez50kG~aXWTG^FH21xpV6kSqNxxaIV?qHC7kI^XARf#~HHxoEyNHmjV}_w6 zigN!9fB|^GhP=hk&J-j*X+$A4)z^Q7n6+}fR%yV!hyx-HR%)K1XxSqF}qrc8<8MS&|XwwVZ zbeOhZQOA6y&`DLjLZl&*l~$OF4~5atMOM;4F{VK~47tJG4)vw^iKZdxG~9^D${ zuGvQ?#$d-(D+5{UN+`QECt%8iS2VcpY>7rfBzNb@%6D3@T{EuqJVz}<-#c80ebT$X@@`ao^V;? z|3xyRKY+_=Vn_6ZFRGdB?~+7jh4m&(7BIF#w*=N(SLS&QKx--=w=oqnpQb4x!660S z)3R4RK-9fmwzYAFKc83FX;m7hC%lo_iYsRb(7kzG4h3is{O_fOw&WReW;`2i=uX6V zcc?ZicaRer)F`Dj)OA@21}Z!6Mf+3jRd!A!t!P9vILmlD!F#1{I-e0C2w6w2qk)rn zb%zH?X+2NoM*HS)-Vx#njenhw^&jr}fT|4nrPyB>dSfX-aK8aSJZO=Oq0o_nw%pJ1 zpKw_c%{&*%j7#Wqy-@);$DVyJT#O~G>J)dlRibm|x$|2vs-g9G9}_Tm|3r)zO$G>p zwOBZI6N!^_3Z%u*9hH;FORrnz-eA9RxqW@a-Z*y3i!xz#)N6kDbxWCXhZRvMuyNm> ze_wP7)7X;LKG&1#1OvWD{70uilTl3 zJQn3vF&Sk0{Xu^1F5TB#PuKklZ{3D5t705IQWslj*mM%oqU-sVf0KJ6pb58|2ai>l zOxnxY7&tv3MUykgyv45?onUBBHesK*V(q(UN* z{#E=3PBb1NDHPRxDgHsJFW$o3vQXqfYSYvG8{Vd?Y%}8U8=<^|dAP9l)qGEx-BtNe zLzBdj-rWzeNw?e26jk%nvxJ>kp`n7NF_`vvOc$61m#LGklFB-cq4FsLNQ9i|b77=X}o-fHEQMVmcSqy8qPHjWOk7N#F(__O!X?AS7L|;bAef;bE+8 z#w}qmH&11uC=khCR6q?2p0U!byM%-c&h|e5k?#p;qJ0JB^84;PvP9^kjz%Kb`&k-d z?EhUX&im{SWDLl^|FmkpUI#w1DRY58oDr&GdX3L3|6Bvs~{2vhev%f6-rm&Xj$|XSg05bJ>oq{s*V#6=7 zD-;!tlFWoC60hT*aty>1cW5@R6X6?WxR>KVaLhQ~3lz}6Vjx+Ew@*VseW0%yJd+e# zGDyZGEvO5d^=l4mL-fll?R9hPi98ny#Pwfgl2L-GE)DuGMpwGc1V@!g;#rt zoRtl#hcwka;s0zbUVONLbqG29kUY<2KHufi)5?;2zR-WuIB7V3z!%YXPy`5b&)(te z9|T!ipYU71xa)odC#um^>ssfst)q;^p?eEgya=H#Ss5Jj71j>|5TySmwoU_8d;zz% zpkTv@x#RbgPM>kEQf;M%g7)G(X-!1VXjSMe*9DdAxdE9oF(BjgR1&#N59XUM1{uR2 zp`!iCkc|7{1+_-tM}frz?hKXGDONg_R0%0K*DfTRz(W69>V2;$m@%A5%-`~TN)<`l zm9r8aRoBEp@~tlRW}V^YiQnc!W!&-9uK#w&f27=On8R!o!Zy;K8_O^`_P+}3zbb6G zgL@?6!1Btl#-ro#(L>_L`{FZBRr3b$V(77D^Rn@kam_!A=PI?@h-5&vbeGR()5j{^ zzt0qXwnT$(fRm}kb*3#zbJT8@kHi+!6v+0%o$HB1&|IlvsWFo%rgeq@`Iq`ld=r&{ zQZQdla_~KcJ73n2l%&`|cC4_#N2l0l_#t6|Deg*UxEK7x{h?sGTUku>{qq(WrNhi+ z@r>5~$;L3+7#w^4ErfVRyDBpTP9$LfX1MZ?&9o^(Wl336gcJccQyKIEmE@1DVe?{N zEtvBW%K-ktG#M-8+aqQ6KNPZK1)@DFRP>+0t>c=mJVR8WyxE3jgpk7-8dwB?Y7M~x zWI`(kKQN;Cg~9+Y7a5l1II3!^_)jgc9HWaaRF)uhp=hTN=K=H>2J zS~k&mii>d8GUXvg9ehD=^09{Dq;*!SuA5|mh{D>6$5O_t#B6vPYe}enio$;l&8hJh z+n`O7&G>W@4pM$VhVox2R!Z^0cG&BGwl5AnS@qX{>a;Fk1}ixEpPT%9r7&u?%G2oc zCzAjM+1d1`u;&a(bvZ`@Vd! zb;l13ch3OmTXC*!H{(;e|LnrQh}ggl71Fr@dX^i~JA;}uk)h10c|$nuBfaJsht1Ua z@{*sMz^Cltb`0w-3^07w8A<$meet4Jz7}y!Yj9!VUk7GU2w>_GC!M5-fFd&Z(aPl` zYVBO+4-2(6F=ZsJ0Q~SM>1aP_)7x$m{VGT?9N1v+Uj6T?9Oj^~PA1CSqujX_BLXu5 zXFoa4j8tVBfp^-t3PT7wiq;>GP2Yr}%AoqaQ7Bq~^C}H=&=zoPXzN9iJw{;m5aC<9C&pz~Lx_^f-uAytobN>>e z2HSRmo+P{7$0l18S@T2{i|L~w53eBuUM~^_uNeW8*|K11R^V!uK)NdkU}aT(QjE#m z`>w_l^x?sk8RYvmUJRBNfQ9GW#v-DAp@KRs(jac?r;ALP;@pG3*d}ILAIItgU2`QK zU@@EaVuTC-#ofl-8G-r!RLCA|0Sw=K^*mlf)OmgtiMhOnJ!mID3G}a!pX_h*GAk8n z-mY=;hn2oKa1c&}ml@G*nr? zSqr#t`H}AV9wFi!Hpj&tDNo!ZQKdfD(ICNLaX1Z*gS2&-l}dY*Kg*WU$uM_MrvsuA zdMWqboyEfw*a#1v4(uolzE~h2=A~A;lqm)_93v43YLi)#dr$SZV8_i8Bn3j{hM;+` zdhj~&_A~gaA&#*x)60E_?B7NOX^vfB%)Z(kg8h!8JhrT1TO;(nm6- z_L2;!Dt$`-RN`a|r~G~$MpQobXx}8r8h&P10W1yQJjbw6O=xxse1wq(@Oj3q76T=i zg^NkbadoD9{y#g&f(|eX-Lf_CQkN>jm4&EOlF2kXmTb`$c$xwvHq?26tKwF zc6M}Gbz>kCJsOZ$(_|Q_KRWxtuqK_Rvv0Lhv&DACj39Ne0ldgct=(urB@cLe@mcgV z8joJkcxe>EKhK#|XIDh%bkg7lMHjaF+#-dVk8l4r7ZxzYRXC>1j2e{DWGjg@f>ezX z3smoE9Aed$NPWP?)37Co+1jM|%Hba6l7A8uvN;vawbwt9e=x0uQ3tg8{IXyAOZYvhUs6gL zvZ;!=dN2TGii>hV>$-pA0y{8A2}6FvxNy^)m10$`KEOArQmuT(I&Fsr6BuAUl~7~b zJ#_5kN^!vTP1$!q2$_7dIT7V+yIEIg4S`5aoGqQ>Z0nXPINmj^Mw+LhPn+gbl77Se zJANOK#dpm3+jqx*pAq~5iNl@z&Iz#ywg?t|(maQzX@1_}-FX;HM8H8;Dpzmyrrnd% z|8@HJ51j}3rZb6s4|4_eCEKC%s`+~8EXtkY6HR@`t5|hJ#kHissAIy1!bn41Yt5Cl zochznv+1*qnhi*5l0!LW^j7sUevae|U1i70MjXDNKU79w*r8wKqG_-P)0arHR8zR6 zxYQ6SnrQ&3b^q2tG+(4r7>gh1eekB=RInLuohG02mBR(TQ@&rZdkLlIG+@?osQL%nJ$j?8cVL#Od`w98}`7>78kUd zQkaa@j&D()F9WNa#Qs7~ci7w4>$9!sN3gnoe!{z4iGp!l4>Y;>2RBN~{hnf@NQg&v z2|DzjgU*xV1Uv$~%MaiM=Hs?=uu2Dy_HpA%n9z+$n4-Z0gAud2A|pXmpUFDP;kxx9mvqOYoXh+fhq3N-D0ub7dZR zr}?eD-cPix$xXEF{KC<9=f@u6I6vPeK#J8{QZib+{M|z=I|VQI&m+|j;B!Y}(lRoP z-i?I?%g|Gx6Y?U*xbH@oXf2~E=@2@$0-iM zaXKInASvSNYhxis2~iO7uZs8Fw})!6*1MJ`wztbqt4O~P^_HLQ`Frz3Ixq~^qDzf1 zc=s2Teiuc1D1py#S;8`}@KL2)X96-|ZTD*MdTD9Ncqx?3s%D~&eK}Xa!_!kr(cuc) zvRhl)ku3t8URpyliS1Ch^m~@ZislIU)`*<>(`p!vj3a@Kw*7n`@2*s2hi-v=!?YKF zg5Xv$0W;oJMnKKPlh(O(3RXwWfLLA(mcjwm;oHp7klbW%eboM)(;L_s;u<9^eN=-NVZ=v zZJL54kd=p{Y_c8`-uI}&)QNYQ*LU+8AHQ>8eeIw(7d5Xh5e*;y$*kq|P-xLgAQTC|bUYW%ctVc(oduw0y z-ZEC9(A{f@+Z;Zay8PY&V^^RqZZ>1z>eHvNXV$Musb6bfl&9+fA;X>>jCyrb$G5 z4gyZuZiRxCB;pQ6u5J@JuM)1} zi~Q8)-KW?Rg%<@XUl|^K@*`*^nR69c7h*mrl53i-(Cv4NTJs$V^BBGdt9fnbSfsZP z0Mb2l$|e-1lu5RFK(be=Bh>}izE`1{b;XfqW!NgKtQ{#I&gzruS1XwP);KSt_`~uX zWFk3z`EY^G<5(HNO6bc24fp!ue0n@Y6zj2OWF-ab@_d`K(?aTFYE-(kTwm<-MAfOT zu_WIDZRV!vR7sqAf{yhG$WJCo2|xt-amL2A+yr#5kW{vJ#qaB*KqP%s?na6F(`HcU zsr$w(5FoIdq_L>4mX-?Nb$F3BdxEovp`EBn{c2N|xt0t2U)f2A%;ccO*RtWPuVs7V zAG~v@`SJ5JMW+wf^Y{6NAUX#>hz{&-M{h53O0GP~Sq1EM_uYvu2Q!AbxP{6~O_E)r zf9)npCRBLcPQO zlQGZ3jcd)9ooqRMC4D23#c!2|T*RB?hoP#>PvupjEmZaIgqa{A0xojU@IW`s!VHOU z?!ne*oSnNnG}QAgbyIh!VySuze54s)Cn0UCi;3lP_4rmKj*OcT6(2<~Vv=WnV2>e? z$z3dT{IWz=4&Pxa6rUGz)=WL&#PkLn%9Zzmx9!kpSgOOD^WKlh3j*I^=8r;l0AMsa zmYlmTm!hu>n?OEdm22!G=90kOd$GE@9(Pf&?fIJ%TzMbgoEAqC-^Ttzq;R_@pB0|V zensL$MoY1s3&wTf&tfvJc`IM!xv!^26puISy6W<8{%BFpFo*Tb_0^>=&FY;l4>jkW z0nYBi{Q>1h;U~Vhm-mk6+vIe``)*Gu|41Qn8+psJ|Yz|$z&jJ`1d6NPpP6@>_Kc@e;sO(MpYv?{VA|zFkYc6!m8GI8{D6_8K`k@{xw{){3$W^Y59n#CBprzO9 zm-V2T##H}r&-d~no*}!!U7Y%t>z{7!2rGG?l2FlT>9F8JSx#RBcL~)Lg8;( zOJw|SpH(7ZsVON75AC0tdWHZFDG0n=>1_HDvdX#e>r=Dae&jRPilbGY1V#VdsMB02 zM%uxCb`5FA{9QMeF2ws`nauLn`f6ccsF}@c$di2Zi&I)Z7Dl` zF&mD0VeB3Ch+ZNJ*;FTL#&osly=C~UVKZ@geL*?1(b61IvQ@dYW5}%7N$FgId9R-P zK`Yl(YOce;JHtGE4~*-qK{_gDrDeqZ<9m_93@*L?!V4>k7yH82_nb*r2@Cpub?rZS zEpIr-g{G#lzt_hMyU75(CBy7$#LF{wJ&Zbi&ln}xW{GKki*fONeBE<%p1rd|%+S!l zaAaT(qLrz%ERplB_M{ka0+E3xPgG&1loImI zD4UnodFLsDFZw8ZnDmyrFGfNRFc&p-iUjP8hI^*(8ntZlUGl;c?p=W z(~(Ki&FItRP;3em;aIxY(o=^sjsV2=#CW*FL&r>8X%`ja{YSbVUC?7{N;4id4#j7L z^-j;ny^LGAer05x$W|yM@%#RDbJ4gne zkJt4U+GjTtT@T3tA?7LK{GG$+$BRET#x?aD^Q-CJ*DU=+jr&()e8|QAq)c8c^gkxS);5MO@cT=;T+DnIrhl?xYpa4dog{ptzrpBQRv$j|&0f>a zy}#Gi7BL`Zc#N&1pB_*W_>IQ?fvxKx`a@o9r-uQFw$6u!mk*H#>c|zfPW_ddR8&wN zdIbR#TgEy+f0V01$t8ZCl~KD3Vs2aD9(D_=Osv0|FO;SC9pY}qt$G~qU`0B87nt%s z5QoOIIQzjWDO~Ll4^dD$6vQ2U_~InFTtUk@=<3}O`l>)y=T~9eT*;9ivZt-E@H^(a zWt{x*?Bb}*yPxw~y4fu?T2AP~LRbOa9-+?LK?t1A41FlOHNy{%LgMS)_r`h^%}y>> zK-Nk<$=j%1CoiOBlWSXe$jmhIYltU6_1A*zFx3L>vz6a-Zt3oA2G)5`yUNLHr2KiL z_8!j{i3E%T|?+B)(1CPeGy?JVzq>op5lX- zh)1&GxFq^gf79h|Zo&yDNXLIlW0Aq>efgORdgyTWte~?Qb*L^fG6es{rp!)nn~>Y^ zMAU?}_)J!)Sa1X)Bw)3v@VpzT{p?WHmi7YIH~ZpON2>L0@n!+u63a7(1GJR-~<;oxU-#IEMr8fpDCazal|6ADA#d%&Hc0o#tolyvd&ze#0(K6`S!FUQ^b`LLD) zS+TG0%tFzL;LQ2_7psDIIF;z0v%FzPbF65%-96z>5r=h%!sj7L-0b}=hgS~W?jvL}Y_>M~l#f;S?wkg4a*DT3)QUk^9eylroi+kQe|6^SPKPAB1L6Y${m z80KKJb4QIat@ajiz2@y9 z#^f%OS;C-jt-cvg$WI^MVyWa+pf>Uro@ z0tiB0%I!_|1L=%a-1>VCy9MW@d1b}}#oq8q{_p1p3sMZ}cq&3YH8n3!yJdxdNmnI`(;Q@k5E9e7kGGCBg? zu$3RUSx0yxhSHouT}-)wCsya`|c~uc3;x|^3#xLh3m8~s;@Gngpwxz z9B*ag#*|?U-l5%;OF9{2O)YqydWLzIc;GpFliRM~ARQE6 zj-H4PR=vA~_+`$mF8{BlOp(w0e%hWb)u*@5+EF-nC^J58O8Ca$QyMS6E3yD& zaof?j?d;64IS5B`&m3z1=u=Yar~HSA_tqfpOCc8S@A4>Xh4o5r*aVoh5@Xefkqlfa z*Mw-V|8#=XChw- zOI2>k$gjf{fd$5{I3TNV3I!!zuUhJmZ?u)*t=^@+Zu58i`Qt&|Zekzv{OYiyqX|TC zt^GP?P8tsil3kd?(pvT)sHIf9EHT8R8k`R;Rk$($TB-1mRBk>=QD!Ryb4#HYy)tp? z@hd|r!}Kmal+;nsdCrfcLxkLe)+mj7b8X}aa;{cXU% zH0ZmH1De%)8{PPpX+y-ED1m>mrXDC&<8#)rns!I>dO@52t`(xCHZJ&8s|;Nu7&Ycu z{PJqT^dCvZF;6~vsk;9e_%yvA|W%U6|kU_0^ZpI)K4DC zz3Jl<6a#N>q8|s!_pXx-NXbp(`7%>L6!l6Eqv992m%u~kwGU_^Wt_q2QQ7)c84(^o z>^S^d1+Aa)J_~$T_5tF@j9sf9<5FXor29#5{lBQQtJqOqBQen%K+Ytc&!KS(#U!luzi^HnG8%e~M!`Q(-0iQWM5f z(XJh9A)BnxdY*Kbt5#CU>+cyZ-t}5;NOVj(Km4gn_^zJat>*TYptRRv+JkdjeMbFu z?`sY0EpJl@d!eWAj^u5|J)j*grGhB9ITa+H>6~(uAx>Bh zfB6x#U2}CrNW6%p35#ZlR(J1u_qN1igk6`xaTR}6B_T9qVeZk_E(D3(mNKWkTdF(R z-Jrz40LSxm@wO2CVwEkR%;lW3n!7kMVku=z^qOSL&HecBFo(yR+4x#3hLd;nPU$%M!zP|pI&!K<7U0FAba(3iSB9t z`70ip=*;<~s7{1cyV??sy?&!V*5eL_MIZ;daj`2IT|I?6ny$}h3!U@aCsDA2bjG1U zvoOQENd(EAKh@o>*x8A|=9IUl#2$+iZ?Cm)Wn#(!XK-6c6!|{OS-T3l!e?;B)EZ^N z!hP9p9HgQnG1N^Gty2MFHC0IP7q;7lu61)*JrHZ#{R_eOHf(u-!H@Sh zB)QXpOw2TRGCq2h7zpv#r--A4E$dZRs$iJA!t>hPF-mzJKp zqrR3J>Pd9)R(3c-TcYm`f7^(cy1J@G#7xJ5LeKuRSLKV~~*d0;@*q4dLXVs@c(E!?{GHUFYMd2MyhFz8mStg_Nov;tx&6Ii`HsUw1}Xwcda67 zmDV0Lsu$ zZ?;YYC?@d3X_}6`1XR4H2P%@O4>EdRMO^ZIERjzlhrL2=4_{$P0D=GHp?GE3eCrRw z4n})M56wgVdwHJ`U77$^bRq`;gM1m<~7!E?zzlHBV<; zeq>(TO8P{uMS%awT;rrF2}+mQhI@Z(J1yqn;50>`&ql!CUr3|vg*mp+1-u`JFI$*` zjpx9Sk$5W_`KD+6iC6F1Hv$IdQ*_R3QY&&^<`nOTrCCEcZH9zuF$UpG|}=4BZcvae|rfA$MBF zx0$JUJ6DlJ?Z-mb|Izipk?84~gwN|=VCZAN#gO1di^d5!!8$fNq;{Tb0lLCkGbMZ9 zvw*W89lSc|bkDk-7GUI;FdKo!PgQZeL2_5y-E$c1OibFmE;B2$sT4h2Q5&?p*>Hsv zZ#>^GzQr2x$Ml(>6wMcoC1ZWrPASEU_J1puaopj}AqwhOyA-{QF7{F+3@FUrQf@+B1cNpmDd6{zWb$SQcTn7 z1|ey|@>xO?I|j>~a#<78N&p$%{7S$**?~K@Odf^Qsl`TTE3Sj%jxSPOAp4nN^44n_ zC)l4)JbOPXz;V?0ohTk*e0aVNiv1Jo?Tpu2K9<_S)!%}K3}oC!zF=YzJ`kocCd-<0 zhVQ+$H9WXg{)vPx&u}1O|BC#Kd|IV@T;@Ur*3E3>p>kh0E#i3gHW=p8`aWuB#oE>p ze{)nrbe&W8T~GAY_%XJQ(I_ovnPa_zBQrY&Au%mJAep?YO0Ss7?bDO!g_J0FJ=(y# z;g4#natsb`TPA+ryvVs#=lZY94WcaKDIl9@cvF^sfgq^KZ&K@b9t+c-IPT$c;ki2U z9y6LAcy|3f%n51;59E$_v~?ODXcTAwLzjVf<(Wpv?Hk^BPob*1?!t<_jyeQWd0U<&YQE zea5Khn~;hV1KKf})|D%1`u91ph>o48rR!CLuFD!f={UNCa_UmsoEDbQh@7*Ihe7eI-I)Y4#i zGa5IZjkK~(_q4G_puf}A7E+t;X!8Uh5dMfC)RSYBbSJkk@%24jT$?C++mz+sTCZs0 zU7s8q?E4sU9FTiqK9W&!zlFh7lxYRl~5iv`z26AHx9yJH-Lej+*Nv ztR#0>E)_j5oA0sFrdgeD=!;r?_Pq)6m*2LlY;Tmacu^KPn(ssAlTY~KE-I2b;dC92 z2wTry$ii#gAJmoIx<#LLce;%n&yZG_cp39KRov$^%_aX)og4R4ivYXUnd{go`2CEu2HD{AVGldD|_6!tdDat1HXO`HALON z$lleS`I=HLdEH-w4)aIlGBw)iel^MrG?)|L| zNAUc;?|F*3vx;QgnEkl5RWXpRtH-LN!TKj-!*K@S^p4~>hidab4M&)!+dwa&NYC;< zyHstQevfP8sScJ$?-54L zJDljd{N#Hj63e*Kd4!|mKPc)XW?Pr1)}u?|}>+oq|!kwCOAPJ{PnXlX>lpjufH}%>>p@5qGvzrX*7)T?FDjWc$_eJ+itr?DS;UM zkra_k7it$KW{;mqs0-OIkD|_VT^;dj3pzb9|03LIMRC`E_J$7*y~jmo1}f9+p|0*k zC+1>t`k-aswbF+J@rmPMy2w!+;b z_lCz8Hy|Y>5}&tP@ri$PBNR1+!Svr|Qw+A}r}Lkwo)>E;Y}WXD6W^m2`;wk-ZyDa) zFTZSA6wOym@fXB{FFjeCOYy5YJyK;?gZ|nL3>V=blg*c^A7zA!#bY;fR^GL;dOLc? zqbqlC`Ytbj+AyZi2~-8Abxaq@KiR87*vA@K@iMtKk*liw**cc~+o*kQyEAV+>r(&R{DEAgp4>sgck?5>UI6pQp}=1l{qEz`UfOiTHHZDq;+&J!VHdpd@<%_JE+&Wwj zWq{FIjtMFUPX{}?{C~_X{V5e#7jz4n7*v|5117m`to07MVGPH=BJRZL-jB)HAD$?e z&Jy(Wg`r`DGs1TW7m3M!7dD=doQ z{?$dkXeDdIM_k{Xcz&SChET8d^lFp2c2f7-3c2ghzj%Ovxl0jZ(?+x$ZKnq;Bc}&4 zBfn=OrUnR?IcbYB{`}AZTES&G)0xETB3N-P!AEPZq06R5OvKEGJNCwH?&U*qk6VsG z8ly@Y*DO-&a!fDM`AWZmJhOlH91X%sB3uBLUfF-F9aFW>NYf6~Y9eln zqpCKmE4ZwEa6zkJ>w&2ooRqQ)qlgz5{aHP z$@Wu{g(`G5LWulus;x^w6xx5HpH}(;ZgSN6SRNt}pXRcn5`6fH6Wzj%hNVHnl*t)H z4r2AZcicu{5PRzL(C6OTec{v|SPkxWQdN_Yb4G(uH%oqMy3HXK4xyW!`UyUkhUjuk zUU6lxl=4=pg(2wK&!Wp%Zgh8h1e5V-m#a-IN_|E(V~eI38-~UhDk7x=Kk>oYZ0vxI zG4X&IGn)=X)utsP<7*8^qKM2p4XZzukXCv89VSuB2Mf(P*alFH1?+-RdXty4bzq zm?EMk_!QtKRWJ}R2XJLq%wTl>UPq^M>`%W!xsDL9%O3Y>WNV)1Vt)Hj4Jh<`wOUx!j zHi)@M{a#w8;_#@6<)7U6kb*G2)CXT|1o={Y6K0p7#s{~XTSfg2!rm)`c#R^@76B4n zEw-2ZbuB049ETNPcm$J&@kaG*)N*gl7;X5MvHn-lT5JkU`}c4z$Jb@60O@WSxLzeD zGJZwT`)u=IURbl(jf6pw$q%_x+8~PPJzf!-F;3CXk7HV=(YvQ`~fE46RRs}FA5M2jTP zhdr^;k_J}Rh2_ch&62Lgu>GU6fW##@7jQq3ExzjwFjsaarBx{Yc<{$(n6_jQw%W$r ztMA@KQaG2Gb1dTaaS-zqjgeHb`M#U0uW+74YOL)1bp8YFV0Ai7_c8ki4C@O>b(Pg! z@GCnCQN`)s(ooX2lrc@tR>wpKq}#&*1-r#C*P|hM{wu6q5rV8@T?wVAT@No%etM#kRNlt z*H9s4_j-1c$YO5CfmZr1AD^xmquVWfCWt0;wPgI2`gKiOogiw>8ZX+?^tvHz?ga8< zx7RLvruejWiQreTT}~{BhBZD>$lYl;E?TvhtI?C?Yx~+(l(@fwhHfKYm|Q)aJoy?2 z*YhG7{htQd8X-Y@8^QjIzUAWIw~gbpyUlv5ntL7pTAp|D;^1vb>CFXKzAw++zoK5_ zjcZqHixf|0TMtSc{?~mFGaT^iKvGs=GVnx8)QMrR?>tt4IiGsq)`cbdL5LsJY)r<} zKEwqgU%RCA3COTcAE=W4sI{~yjTS60|phZQ@5AH z<+nmPQ@=nyVG`>%>t1d3QCwgNlZMklUqO9;bWUr z4*6$S^FvaP9Jv0#6N90izPWG%6M`Bk%m9&^t;qhe%#s$%bN@(P;=Z&<_qReC@%+&T zYcQ8jrXQN2N=55=GWC-#RwgjB{CAPPLh4yr1}V3G4v#TCPqOo33yAyP?lfaJOfd-g z5UqkF2Gzn|cb*Qb<8P=lrN+dX%%yx8X0+|fbWq=-Qox1jC4kc}T4@I=DZOa&OdPwB z-w$|7E6qB4wr^+(7P#CwrdL7#0wd$FMok z{5WN+gK3BRnqQAQJOy=KD3vXuqBx{z-5X*nMr?9b+=>nThKz1M+rD#gDB6T*B9^>c zzJr%$a)C;XD97rwKxSf>J3ruKw4685Jm3+K)VkGi&*9FOV1=mS`|ar~(3SIFe5F zQgE;P`)uv&%i=Y*mZJ|kUoNA+c}4oncWs{H?8DrS^<{o;U5m(!GR_iB?){OY3LfwE zSV5+*#<(}im+OAG${74>afIn?aE#D&8HYy{{PcRbDY}Gt3bJ5h28>q7CWkH+yRVmRc9HgARMx@GY4;kU59;4OS z8eY}@9XB`~Mx4d`(}7E<0V-abz+lpwERf~tMQt_4poY_RdI<8vR*zbI2{BPNuY`kOz?R|#tx3PNdrU9#Dm#R!fFp{JJ}iq4S6 z{Fu1oAht-K$@ffmZkSkFi=#b`lE*MmJ!fk?k*IM=CE{UmX@amPd&Jt^oTIkW?+E&3 zYYV?nAe;8m*ESxBtj~yP0ZEI5`S!O&P61}p1(z(E#)5?7M%B?NdM(`qJGa^B0a2U- z@i2;w=ajI*yL#FPH_f82)D?jNIqdeB&O)YCBqwq;$tyt5e1}X73yyKwiOX@?%L-QF z$ldKeq=XTa$ydAKdgWHJx2W~al}Hs&ZW$;Zv}O=ygGEVAF`udXDUMo`T!vIQA;B3( z*za_k31Kfrxp0ug?i{)SzEm5E-jAF|hM`hq=w}z;voT8FLfXkOJs5!{sr?4glA;ya z8?ELzjN$MMle;P7ImY303~`=aR#IwqE+*A8qkb~;wx(v94%Td-uEF|maPvQ^#y97d zm%Zpw>7yN&pLQF}oXW(VWg`r_$In^EGy^(4#q{(|m*(y_H$5#i?d8T{}@xv+FHAk+oinpAKoRKac;7G%98uuCU$Fn_1;d3MYpZzuIDE>DAiE*kp?s zpX!V~lu|18+r7z>3oPwd?P4%N1ig#eMZI(OfyZpw$a>|oCpEPuR&0@PZ6HrWf#JiNm zHmv9~XhnOG;KKW`veV7S0PcAG{p^%cagxpLp(6BsyU~(R=9{oD%okX1*$-RO@Sc9A zbol&~f~Fi1Z_w`UK*ueIXNdYfhlZ4@T?|j;FR!SZxm;cOzp#}e`oe-$TKrx1bhy*y z2kk7cR^}{R&_0VcyYp-|P*)Q4)QWe|EO&_z)r@_CU&x*gMm#v4VUGM}uT2f;Lf(th zhvJNP(=SyUOAWTcsCXWTfw*{d6_6-v9Unu5N^$cj*U-9~9&rpX0nkef@FGA<&Uuo3 z<0YnBmiJ|{UYuU0JkFCLGj5V+i`*8iqw^{=Mb6nTPo$U3Kbv_YVHX2a9R2m^H?t*8 zG5o_t!^c@#ko}_I2h#0jtaEy_s9>y~hAe8XqA&!m;}b^@ny%nL~qG z{x$@9hHwW)aX{7}V*XSwQ5gJkOIhLbb9{)91D3_`9|I5dPA-MaE?4xvPI_+zRZOfn zyC=2F3ahRSMw4SrSd`~oam>#+24RS3(=wnw1i<-G_oy&fLMSy3a5aW#{GpO~!)TW? zM8x{jqgqG#qS!TA_Fd>W0|1NVUalt=pCDO!^)$)<)3TkF26w>blnYyGVWiXsfF66spgbIDm>`#o2u}K3Z1uy<#sf#8m!Aj+DbvmrBQz+6zdeBN>`voBn5dU-hmouv z5*t1E@mzf+O>Xz&U53;ur244SG}*7lS?g)_^B18U!3lxrN?P+#b8NSkS8pzCh_ru< zIXzFovK7dQ#S(VdQsU+H-C-*Y`9@DpRWt1P(${TBQx+O5M=dxIhmed%SHsOf->?(o zi?ke{7JQsr|D>p$V0p~!e{FIwd;1Gj@DE$#u0URKlS_AI7XBGcEylu5%N;#>EX zfMW7D+DYD5+$d?gr9W?G1W`PHl`VJEMN>LeZ+=}5Gk;J@)6xEkQbd{Qevd6Ol7xLV zd%@%>g=l3QTn<@GFaR9%^u1wT-H0)_1Ui6tC*VCWLwJw9^o485a$|vv>o^m%e=s9-K6Zr*x}pZQg1;)Ot$Xl+^66fe!d z7^(c3x3{+l$d=z`^zGIg84mQ|&>e;EoLfAf8AR)-=Bv#_AC+oQi&#Hccuk4E_*!6_ zbRTjf&ye=0%S)lEp`!B!R*SWG)^#?Iq|t6)j$$x1xlW7#5MH6AB4F}##x!O3G~ra? zY&FjElMM(kTVrX(9XT9Lrm#mFvvXkZKL}}Sm3`QQ2GDboi%wfjjw^;NbFaICd_F@r z_l8v17pmMegltahPqnLYi^k3_|HiFMhqb@ueF7*q74hkBY$tVF(n5<>6Vv5iRNgM#W!dhZ zxl+jz;+AaAeGSt_r717z>fGHYGvnRF&_Mb}*| z_XQC1eHk01bn%?TUApP~6WJ>NImRTR+))bG98D4ZOTzIsmk&*UUhCB_1`!=P_^HhG zibXW8&JzMz2j&``-xBDo+ZzN&8rHjYWQbY5ad> zL($)F_=*qs>x^0gD^xG_E6OF^|TPpDnI1 z#UFlhNG=b@qL+7u#Z!DR40BqRoR2xZSkwN%>c4?DAz#*X#h9{PqId@qT|&pu@&_F~ z%Ca~)Bjw`Z>mIF3({si*f(8DZn8&_1CK;v~SVK40hz7?qxtK7_ke zm{#VL;$bjbWG*e7S-vCtRpu|!biCresG^4kTPr0y{)k;UY37dy9L1h*X{iYS#Zl2A zN4}PTZpbVsy3MqQrFozE_+MXLMxdtSEU7sg$1C2f8`{w}tMtg^56;faGmc{IdqgUg z6jw3&3?sy;!1#c?1Kx?DC!7b1-X5LGGnK*5Ymp8EG2iIvJXqFC1&2@g2ebw$ME^$n z_TRWLgsS0$)%TZv+0v(;2rNB~DSVI%%#-R^w;=&K(gV1^c&I2J12*e!pFi$wWXSjH z(V{D9vgo4G`nyTJqdeGm=Wmsx?JPKF<|p%*-e%EeiK8u3_3iZg@bBI;1EwKqhkb+nBC$L=0O*K0bhSr%?H8ospHc-X-bm zAZO7TOXg`j1;PRj+aJsKjtAGI^Cv0b0&4jBVEQ5o)+5^rt7@deb{h*Hv=a)qD;AdU z=^fVR5|{qp!u0CN9JDT!$@M>kN>H$L&O(h{@$G%@{n#l&po1U9m9||rgzVW zL=-vQmgqeq08hbpphlU<&L)w|Nm1Bml<0pDvR2alT5y_=^HH!anXcxFLp{hd`DjSx z9J@O2N%qDzV>}Uk5|tx?L;jKMs{UaBt-w6KOh|f#%e0Oeh8ia(??W85F&tZTHhVvl`dEI%>=n=oCaD|m;Hy?G*0HigRC6TjI$aU z^-ubDdo_D|Wf6eQukDRM$ zXj7WGykRr3n{f4fcV1V1Wr%Kfn_dmP*-PIETub}x9oO@>UCHqCbZmjlZBO72YO$pV z{Fl~yEvNdqX?J{^eKH`3{Z@V7oFxakR z{*8ZG&EzyOkAjFAe*=9)Jumj+PegW%UT-En}3@7cVfl;!Qknp4qe9nm}a~L_;I(V_?}c-L~C+J00CI4FEsxajTxua z?adL*E?KfJQ&AP|7o#QT?0UMxVUHP(5rA_-e+_*gblZ~lIZGPbiOmlWlQHZSdV6aP zXf;XQ)MgjQ$~5a+D2ZMKgPe!Cv6R&3x!>8*jZK&3T39-efyhBFTvR`Ud4Wd{%OmPY z&u&B}b)bSDMo=8wGI;bsPTxOB(p5Y?BF*ESqVDShQs8WB*QJE+1{ia_lTGJXSFZ9j z)qvF(=v)cU68MlS^no$VNPyN6;HLdEZ#mm_?&xt-0&*^UT%OJI_Ily=cx||u_m#p@ z;0jJvB2P^hdz_=NMY$l);CNgO1k+CoXu-N!Ng?c<>>NMfT(d5gMTn@WP%U4ic|e!* zLwPewpUg5dblUgkY@G%@{^gk8dZS8dNQICj;>9#jdZ^(zuI0T%k}M^|-xQG(l?xW-3jiq~Ke`$y(Bmr`X>VdQr5UsU0) zgv1&DdFh|1au>5Bm6p%#G0@vKw&tp9GXwa#@H5;l@pz3n+VZhEr=Zp(5zbG7{$d^0 z-=f>^y);g$G_!ATnIR64XfbQJ%02LR<9YW{9z+9k8InZj+6LR->s3U_As=}IEUn3< zJj+OMBvhIbqFy8w$?fxNB%y({3#4D0W4m+BkGzJj_No6H@j*Ks1MdZ}GJh6)#m!VK zg^c26{MyCUxx^mnc>|~7CLL)oJYlNY7sTR0lWWsT6tWrhq^J%Cm=7sATa7%DI&Ahd zV}yACe!z0JH}ys)O9C0|jE%EUJwa(=9!eMm*R4AWhU+cqyZCQr>}~eX%5?-$t`U_c znorh6yCV({tkO3I9SAyc=c-FT+$d8nR@HheY&7Tt1vFzJK>@n_dPiJSbTdEL7vzLXx)Kv zsqR<`g^{5Oid6p2{C)c=&fdb{y{7#A4gJug4KKIBy}jZR+DVshNYI?>tcNN&(r!^< zKycdOLY3B)@*3!Lr0MRN7||bbe3zY&N$GV1^-S|aZnQmfB}S!}7tlD=*0g;~B%O6( z7CLsAk(*;Q^~;?{VSlq=gd;uHxz_0-ZVBlT`z49*tMIXWp^V}d37GVyM>R$Xh*p++ zkDZc*lTd+iv8fUA2jh+rR7ux1I`f|ma&i%C1$%^eMkY5US&{tGlO{@DF3<+O?H znL2z$RBGHz>;I$rS*$*HC?Q0gqm)N#x^Q=Ri;gJfiFou6v1i%^$+OO@%|z`wpiYaN zg-K{fW9$&7F#RlklPFwo2l9uUkFyRl8r+Q;0?~^y{5ePIUj7?967?}|u5Z1_aVuGk zItS7wZpgTP4>rO7BWS%;TJ1*(bE?VM4)fE-{CD__)%D6Ws1bOZz#$Y}-nKuJqsh;{ zAoF5*PW&tRw_K%6Y^^F99E(lB6EMWYfrkj+M3zy=r}Q~_+=z*A4auk~c-i2E&GOup za6jX()ALK40}IVM{m6K$On-9IF#mFXz)Pb8eQ{T!mL zBi{v{S>g$it9OFwF2D=JZJu!foN6T_8N(3?J&BDQ@LofPCgS#QVb7kBTTP!tGGih6 z0o)v>6wU#XUTqN(E}X3JfTX z>2fh(@UpMjLcv_{9Gl5c+1nOnjVxX72um&9>1gdj!%%le82pH@<6?px+kg_Itgm}? zeb(2bj+%FEe34mCa)cLoClbETk1hH*KTYaY0v!PqdQ;vehEZA4wA%~nVz_19YgTJR zQO=A3%kBk->Hp$BIaL%rZG?PYW)^C22^f8w8ftH`vHU}|=42dkK*y9{#Xo*9CaD$& zX{lFABu&(ukXB1I>o?)yi+>-~D@AnT8jpgtbGDZ?2(vLsoa#R};Qw(snNdRAaf#KE z(x4_`=y62J-%aw#hQo^~G4T4&>N=TE;T&C+SO|A4BE-53nAVPgHLw~8&>EOy4LBz@iiO4u21;MjS=V%Z zrIgf}cTHuvK)VQ8-_9?_lJn78nZ{E)^%7rZrY0J6O(x;1H`yaouv#4d9d^0jqT;_| z;^Kv10`MN+3;Je9zE_nZ>k&)~COE|kOD$@yKPO~o!}PhpTK{LPN1()s1Lyp6cO7Cw z(mR~D<7@?gKxE;Nnci+5cs=%4Y8Z8_X^-)AwN-Ac+m6y=v6%#_ z6N|2wZ(Q+#ksyY4=5+s7D8R}hpu=35&E^K=eGuEr@b&rght%wq;0%PImrR}b7|2-} z=%GKCa`E=89#1A*tYr^rEe#n0&SF;A>sK8jB|k~5l{mAgL-@6>yPOO-yDZ0VsPvWH zq+88OI>NphMOD%7cFQML$PCmTaL5}zP2J~+b$JlR`5`dOay^CprO?5;EQxon%bVEE zhzbeEH@0c+N}psBs(x+|=>YXD>Ke~%vtsIp2{ zVDI#URmcF9`49{qZunwx!N0g3t4FPoL)J#X>y%^ON-U%;)LAPnABsL z+pWRD`gfA;m+uBK(=yW z_w95LR-AaC_+Ig3IAh$svtv%oY{I1S!ZBg`h}__D3n_oN6_psV9h2NA0=BTiZS*OS9rpZXhGYCyU~fzerux2o7Q1cETk-Jai(2-9;++M6jrju zFRNEjruG96riOmx*x)RF$(%MxXka6>#m49809NSU_j0-|!xTaU>dg9Z-1NTG0!_A>m?^MX-A905|? zC|7@iVHh=(eHt?0lc|e6r$+piDIRMZuj5`2(DM!mL=aq4kGg|*=m+$O35Dg%#$Jk& z8L+9m)>4m(LDpSx=Ayc}A@iW$L$FV*iCwmnhxAEJnMjR}O<~w)gpqzeN5nB{K0fV~ z-vBUSZ}@CXXe2^zQG2Q(E9u)+N5xlII{5Tl^Wc}O?%2Lb*uOE*&m@X$QNB7O#m6Ob zP5&7*)sinpWr$MIF{kWp>c5LP3sk|$(dhT2^|mm3p@8;&N%_zXh2@?rg@jExQ4ZMhrw~h58 z(Zkj*u<$hlZV$&M_Z$%ub&g8RQiKki?eRY2k?Z5Sqme|Wg$<+0oWW+j^5UMj;j9>< zJKe))!zEUIle1N3M6y8epLwt;6SxiTz_MD35DF?UdJq}ijK0}=(0(_7R8b7$lHpT~ z9o&lwp|^Rg=lj0$djfY1iO7GP*&wOkMO_5gbTQFWrylRi9257i-AER_{~DeRa`=zd zWKK<*y?efB*K4@T&^MfC;Zf+uj0T|UvZzf~)XvmE*%R6OwMUVAx$<1~N%EG4=`K-+ zm^2qGtuFY7g`+(I?wpoQY0FzrHg~f*ZI?q-8weIY$=YsBlydWBm)c-se~HX~OpR~V zVf(7Z2VloiCY+RJ@%pvC(8`!nbcT5lU)J_MkX%1vwSf*nRsKkUM@hY|y# zD%638ePw7dm;w{$E_OvWZ|;COe{D}>q0AI=yDf$u`qoq58rdl95v!Iu2X?u?XIJyk z)eyS+47Bjpttl>gi1gRmsz#EHlCBFX&7gB(=NZ&}lA}=2MGZ!nflgNV{I*i|2ms>U zbl_({V7Vsd2^n4n3@pyAf?H&OL0fbTE&;q}MQ{so&sJYh8k1a>jfTDt2Fho6$Dj7q ziO#S@D zV(e-v1^UMJ=y&fFf~T6;DLGf6vZw@D$WnqkAbi9GbkB>%^92H&X8>9(3|}%0e;br| z=z4=?l-o%B`EP8;H7mw$>95V4Z3?!m(2S_l<&D9$h2MEXeSpj5Mi*J(Pxiy%YNdKDHB9hh zbvars1}})Y^H$D^L%#7&+ZSTqrOGvEP6gMm-P|-;lJxz8zpjXgS={xFfA`+?m5({Q zV{dKw$x;q+_(0;fpae&VprACbY)Z9*kyD(1w}fjTa4?1;bi(hA?L{8fY1p#r?#_@Y z7Xx!KM(l-aItNJlh0wnjqHip_$~A~c)(6u(w=ccRPkY&UY`SeH?kx!9GOY281p-4o z*7#RqnZUOeFyu_dh)ouaqn^G=X*UCa^9s;eL!S@bi5bqrxKN6mwfE!;)hAgTAk!wq z*V$b4dgG{I39IgU3!UVl)%x)1sJ4f?{bTg~7!p0KTnQjwtZU50dV@H015@}}Pa)ju zc79e`t#T`^NZ1lvOZMp6goMTf(ppUaZtPzP7gtq{>b>VuI{c=a)7mrG`2wo_|>*MuBMF# z>L?Oq`{MH>{P*Bn3sbT9?@2Y&0|hZ{%x+9ZIHkRac(lUfFg4JquLd`92enHN0y>K7 zJXJk%Bif5wGSUih(e0?Lc2*fkr8%PEFL6GswBB^>UYp{jc+7}+skTP;pFI6SSCF_y z)rgg{No2M5gJ#?nC&n5ZN7RhGvQ0T6#oKmu698yHsHl%EoR<1! zf910Ta`2fD73IkfE8>kQ)vB^I06u1qD7k8#-o&ijG8KAbBKrPuVGLft8=&YF=Cl7f zzt1Kxq}jlC-zz50dzGyU`YA`J@6kJD7=udIdgJAS)nsVc2ZsKZnX0~OsF3zMC%1wm zU~>VbxgyY;zp>@-EJHwi+Pl@-2&=FV9m`->mjasm_ChZLCD9L` zKi+!=cCUI>q@WVu8n4Te&xJ2b$upGgdIz`^f<6q)2y!-LK8IKZkb+LtH1m2I2GqfK zojZ$MB5a#g*($oXwJ)=TArx3a#UlYdcBp#yT@NxSFzc@0QzlN*FvCbGva|N}$gZdD zGHmCeM8By+6|VoS@L1T_S?uIku3vn{Q?t1sL>8{$1t6<+<7ItO{$|M9$=-Vw# zvqGp_F6XG&-|8qN{%K3kd~!+?J!^e9~*8al!lWolcKt7F4v zo?0k&_;Kby*oZeIt-qx!9>l(~#W+g5Vd)W^MgF(fTn1sDj<&sJlc>DT*>0NpiruJ3 zvf;$r-&WyJI@-({@$St3Q2tV)y7A<}rzb7dv>jor&}k8cbTfzZy02Fild%OCv#;xZ z97_m2&RX4SG?D9|q0=C&Wl)_pa-D}Tdy|X;Z8XtTrL5g=m8XHLUOA_az`g7pxSo>o zS1%%Iz6o{3ZVZ^ZqFqn?+gA13n89zoj&^aj#_R8o5lahd=Mq!gI-iU`Ud%>zJmZ@- z!Q=KMrUdzP5(atLV2PA`M;e1vqIB zT^(X;AIV%vm{K>~xANH!suPvE4_RhczBdK-!D^9DI&=dhrCdXp+6vg8yWZg!vj=~` zxW-VoLyyhvv6|4@-)}p+k3ahy9Jkpg?Xxbi)BbWzKHwmXQ=#f7j!8hvu|HzuwoR1w zud-5oU4m}IbyLA!NDWEo*@KlGSwq{c4Ezr{&9>MiR8SapF2XOi6m{D`#B+rhIppPN zj4-6Cv+R0DCMK`8#tPv*X+P0vn--3|Pr*EhE+5;>*mzoeyr_SKHN%tBA=#@QVnMC~ z>7LfXf`d#Z51dS%O<_OkZjmc;Io^no{bi#iYC;5Z?0zuS;inWsejlZ|)P1}0=Ge`j zseJEVGhS?Yv|ZFgQp=)4;W#v5x z({8WgUFE`mf44{RizZd??cIxE#d6U3LUcLqj0x8@t>=rg)q@pqLWOyB$k$`OKfc}pJP1)kH!Nk*BJCneE)X$qD_Oj9e-qWg{y%Jq?0Ota6^KRb*Lq!~glmE5S z!H1~1S*jo)_}#R`;&4S@9~|3m-yxnkxG-}fqIM>c9=pZm_psSfBWY2IToGUUx2zOW znykb;nArz`n?HRd&m~%l;ikhZ;b*>B9g^6#cKi2|fvwxV;Qu6tNllwWwU|#@`?#$& z&yP9$1ptonMte2wqx2kBkvUIOe;r9U1ueDSkO%e-hhbmMX?cW{SjI%T6Kd%X~|ayT6+K!ogY z(6_;XQR>+A(sH}3PDcPPC$a7wUKB1mRwggP8|+4Q@}DO3aFu#0J7eV9^Yv;UXp)FZ zrmN;xrwN#6PW%Sqp1QdbQ>;~zSLzRrIcJ8;BORHiMNa<{gN$TF3P|&>y$GIW%Of3V z)z07210Q}#g+6iR6+bj(Rg}~(Mlgy6$c~Y`&Hqo-Jhbi!o{429LTRmJk*YPa`fFds zOw!Sh#-VKt#G@BKV27vO99*-A099KrbtJnn)=|K93f{w))-8T?m;gpXKHmTy&W?gS zQfi3PNX%|*Y<`;^Q?Yyu@E%-=2YDWRhS0ivG_AN#WP6BbFE-25KW9)}-CCde{Pk-> zQWZ4a8`WJANdazUH7m_!mN@-$_gqVUB2>oEvfspf>ydnK;)96wX@Vs2^Y{P5+$jES$hO6CDf*>)GUhHdkeK{Q?zz$MeV&u%-FH_j7@A}{_^?$&;RD{ z{_jRkZX`J;Cwb?U>v~?#=i@@*svmy-8mKEdAbquwFSv_;9zRq$mT``kZhs`WIcB^m zw4PbTTP}3Y;~wej-yOL9fuUXOOpExQ*Dt;*Pn%aP5P?f57VGZrA(lI7O;`9*GOo#l z@Hjir{Vf;TLdK-lYCy<$cYZRt@#99$e@~sE0k2VADo=153kUS#rpvkHQUib>ux$H- z7H(9HU{2UFVx3U2tmFOH8F?yaQ36<}1SQuZD=8nF=yl9rkMIJ^5({~+54opYUS;~= zW|3<36{H)9OGlrs78n|!*2sgvcx8+)m?O;~!V^h7Gi* zu`dAba~c9;AnaK~U2Qhl=FJ zSYj9IU+)U-!@L#;yti&F^<3XY@a7MjZk>dJlXXix1-9paZN&%0HR416*ZZ=n!T%;8 z(rm9^-R?y6vkR!Npd;5eoD%Fe&;8}E{)@IkBj3-MT1wxmo_sPRfV_V7#r$@is6?jn zO$_f`oQ}1NA%AT7>*m*XM1ucM+^h1tvwrI+5ts-VFses3=KD=cJE}l z#Igc?)=`=`vtz$|K9{W$(nVI|Rt+u|5;zuxxvpo2Q2C0~3i6(ZIV3XWaqng?*^weU zYV*y66Z$CTwM7wGf0|ao?tf2y&guRA!K;i~75V3gTwb8LtbvmBk$d8Ci+%IRX+JEi z6n@%*H4&6K5qnodoBC7I_<|HLCIWv}=CR3kWi4~|k7ZtdX~QMY_EheRwNN~X%30q2br$y{_xLONu^jNpZxT^Mv&el+-@14l_R!cH>0jKMF4_x zfqV7EjE_O*uAgt1Gu$(eLcZjie+_1-{O?!}2l9X34|i_0I~aK2QBO<}I-`#p9=2;` z8+orMl^WhaiD?@*I`^21{}N4fPC7OF;_|c+Yb4S}|Lr;tYQ{fjc@K0nE~i2_uGH_# zp7@{e?pdYL*UgS^r&6&-v&$Vi{bS+lmE6(pZ8&tM1AQ{SvA2j4C&Y|jC#(llZEDO;gidiLg( z@~#nIEkLCwC})$4?;pCIZ*BWGgWh9)K3;tO8}b{n@C$;5m6ECvd=H+Ce?yp^fieF2 z6N1J-5byUmVuxYm8z}4lJNLfQBr~n{cau|JU%sCU((#0L4XCOlrdVBn#$IlkGWYVc zGXOf(OM}s}Q)nbQ++(~my|n^84Qmr4Hr`Pd&Yot@VxNR~t^Cv$8Ng4ivRIW9eZ#cF z;@{18@>I&s2r9E=21Uik*q<`zQywL2KxIy~ct?L?s}P$jh{0ZHp|@DAViDuFh8XLz zAHbjr8li79O(~FQNC7~J@?W*a^Y$U=N#jZSDjF`q(gErcc=S@x8&lV#nq;KZBq;22 zG6dai4lkm^#0-NownJW-4@ePa2qC1;%HO$qC;`eEEu~KAdHhv#Z+U`izqck&2amu>*HjSQWtx{Y+Kp4Kr)j}*-1K#u{es%=Xrh9)kvto%2QOu-uO&Aew!8M|Yi2b3HC=nMe?w3s~Mi)Fc_lyYb z|9yY#qUpVt?Vp~T4u8@*7AilhL*MZu0kZJ!pJ@#2JB|9GUy$HK7a_)`7a5=iPu{O+KK<<0 z{U%+6TEQ-LLM0v9=U_MarsAAW80xxHZk=t2mu)9*=f86NEnN?%eXGU#K?h>EHE{Rf zgebhB=aZgPvuq<|oGWOrMVAk9fcNZUmFWEB%t*_ro6$5)dpw7a1*o=mvukVkqND1_ z*PxX@$G6{IxJ68R?}}-;#;{4EdGb`3&U5b;`Cn7UBg|3iWkzP~79vd0zxz`K=m-1> zNWg_s8UGHF?TrXjB{r#;lL~lep!X81J?RuP}k!7oBLvjtKxpJMApTT6QlkBc~CRDyJzf_m8RCgPgu>d%0J|yk3 zy!E3v#Vs?tNVqwdYqbh*L!-KP=-^|@Vz$rb*cc0+S?_SkroY;Jy3xkr1IkjN%vygR znTd~{AmFK#iMg&P=g`Smb*(|a3Q2Zd5?>x(2VNdz22;YG4#onH6VzTwJ8)S{OxJ`p z1zgyFaCeSfIcJd}5;!ewpIWXVYnUXK3Z7I39x95T!ZX8hTCp(OW6n2xeq;|^RBEfM zy-9aiB=gJ;S_(g?k)$j=*fA4bEHH7JR<#&PNM-5U(y+9`lRjD_zOztM)w3lF6u9f( z2EBr~Q>)GRjaQT|6)nu0_Qz*(4m#QO%@<*nW8gn_{IMi`cnR@rWeVFaVxW!Dh6m(E zWyI!?;VqEL{7rkou$3vax3S}DHMc4m)%ET{uL$MO0l9|+`d+DKftg^R(^MI2Qz1>TmPfbHA@^ikf7Fe=HC&eBHE6LK6#S|pyEG}8L^d3jqa!U^Tas=!CMRvjLZp&O zcvZuLLO&CsGHuT){@z2LmivRg_``ER!|7dCP{)WAT|AvjDiALI`^)5S7WHS^4&pb7 zMD5~es+;E}ole9Ad_-eP4oxJ$Lk3|=T=zH~cHPL`*HBPriduBMb4=?oLw*Z3?*F;7 zkrDu@;-qTmf8NqjsU*=5|H_Cz$N0wR;s=zkZpef6<;L8$O6yriwZ}`K=utH)Q8mSY z*1t0_9Dw$>4aQ=rJmv!?sdi+}=)>29s>1IIAz8{@KBv$A=LWGvo8QYbP@6NJ;@?lA z->ZCBNUC-hY{Ekya`b)Fnp+#fK$u&mRKD<|zJHmQfrL0IiA2|FfLNEyZFP7mSjB(E$bWTWW1cNLp>;gi+m+RS4bijCMRp*)j+U9Cc)yyCI&-wH zVk_a$?F4J`RlJQJN#>g*8U0~GDdr-iOj)A@FlQq1?O^jOmfOWTD(dt6?>{>;I(Jk0 zq*mWEvn~Gb8;mul^RB8TJQeisj~U+pFV;rJKn+p;ye-|-xh@J&=ex$nv;1MS=N-A! z&*eelZI}U7AL^ZCPS{4xbD&rEczI&qh?9Ccm)p0eG`J*(gE68e;}e^O1Q$=Jq}06+ z-X5dzYJBbiKJZ3$+D6<^E+W9*w?4MIuE@C@!bQBvl+$j!#SJV(gNkH>0>I3QY1Cz$ z1aCCHMJ(1a*qO0S7QX?Cxd&M3bCFw%Vz*-DFQ~{6ELvZ=9H~GvzFxc0p?iE6{mSnL zRRtU|5=7EHPCfSW*YfwlW9q59I*m{>an^iXPUzQ-OUV^$x~ukkyZofqD7x#EzjUA? zW;3U@(5o@?HZBMkQSEWKgbV8qW-WAud-5#X{~DLbYF%#&6^FwBtFj^SoqQ*bv0LK; zc0e)#n3~B@3YPQVy}P%M2^Y~cxXCmx!K>d&hV?Brb?%B0D!7hVl=>XXuLzBpU4UOU z0f?>9K->`E>Ah!+h~ExvxS9NFpr`>}H;Q;9ZyODabcA^R_xUsGGRgE;1#9>f(1k<5 zPL7*2^%*?nwE|b7QVj_#R=d_-9k!7I3E=lV1 z#Kq%3t-c!7B?*jQe7r}h;Kbw6t%}Sjy**qDN8SWB$u0P4uM{DLRQeziG6gSItu4zkS z#~cUpqv^8*QCZ)O8H>fM#g-5tP}xZ5e18l{QWw_zwZsw86ItAr9-}d1JY46vcf@YL zsKO{OejR~+i0zL*0r3-moWA=c;o9dV&mgm!O-RREF7hIarYVAW2jOh;>(6P&x?@jK z1j`#QgFh!BZIda!FE$#gj;QFGPaHEVeSUdA+oV}`TH?xZ&L)W%cli3-gTP5mHbYW>*Zu6Bivq2=V}c;T^glofbiF(IKQH8bpj|YuR^a8&00jSc4mlwO?6a=JM0(ULmDo}Ah?g1CUxWB~)lK%R?|z|&wr#T*<#BNu^v}nm;)bbdH`3cQB<>;N zppiI=FFsCfC09laP2oU2rfNN|S)egD-CmMGua$dzsJFFwD3rN%P?LB`gHEB> zx`#SI`{Fqi(q>Aj%8mHoVGF!7*9gs)o&PS?xah$hNG&n=-0bBKZXDRFNE2)n@G-ka z5R)3c4>A9yOfKq8g;YR%*50F?dLpuQyA=w#t}Q3H66U;5dwhVL1}IgRe#zhv40!iR z!1^%!^g=Ch?d;A<8%f&w{t?7DbOH53yYL<#4>E8Abb6-x!s?pOmk$XmO?7PpT1~>= zjI(|x%?)RVuxV<)AffnI$=>^!w7IuCc(x)aqV+wt4>mq?YjtxC@=?-dbfG!cFxWz; zgT~VbnIY-&ZEG<_duu3N>AIxo(NpGi8{GJra1WVf$)Ws&#uL4Jh{4^n=B_YxYDa9* zHh4RKcHCNwB?d5UK%9N6f8%LLYKM<*(*WjBOVxm+m1L)>7O{UGCOcVGFSRgDhQWZ6 z^cX8KS-&(2U#)Xv@8H8x)acjtPQ%x|{%&%#3+HL6I~XUy^S$lcOwlXb<=tdj4;$QCOcky^&vScu2*eQM-f>~c8Qks= z(9f%C=psQc;`t?-IYXX4$!5y^aZH(_S6SLMGG|Iv5}I-EHvCnO)Ch>_-75Ty=P`jW z#9rqD7O)L>wB=H$ z>UIwK!4%*1jQ3w};jH-CiL&dbH)IP>nb*>F>Xib*BcxR7UjL)RP&rdGgtpbozgv4? zJQwZZeU7=3o)h&XNNc;q)6W^R6PxV~9{)uNhnYd;ltxO`LFjvA$)M!JfUZgf-KU2P zC{F<+N@&qX;s}puVMF_2Z%81P<%nK=k?fPjo!63eUsYYnY+SN?zYSdH@fTO4Som|9 zz-?3>$Ng*M2j17C13koMBaYeoy1O6jD@OLCEkmq4J`#q$-+T9Y`UH6w2z1M4 z;ejtEz|5ubBpL@4OXRHIBHJ_WOwK>9!RtPS;Vqb%VY1#+FEH5^6r%j|Dyxsp<7CzPDwL$+R|0!{ z%CHI>Yr@3fw?2i?ytAwB_!tSYWUMQn_R~y8M>?52Yz1jTr$nR^Fddvsa%ik<}|4eFJw=I(AeMF2cLDmA+e>GVpXMYf$hcuP<)u=aQ>l+C9B4jAMW7 z&G}=W;~X&mlmG*4jd>qd%|OriU=*#9?pS!U zT9$ORj3$}jAb4;x_aXwFmKVKVv&@8D#JG0U$jg4%bNp8dgZdo3AtHOtRa31|%1LJH zUO&;E40=*-{}zYA@#n_gA>#R{Ng!{aM-45_nA0Ez#RB55yz(7OG#Gpu#PS0g(|$awlev)J-o zY9Gl}3I4;*;P`Be%>-&~u`GUhVrF-6+CD$K_2Bc+1P)kTf3^F~uj{Cdq21t(Fi%IE zOdz3dp*CfajGE=ou(lVUK1pM?+Rj&Miye>P4#jyslHktDW_Me@*A`~qOB-zf{QfGJ z<3@U~XSnmL9&nQH05JZrBJi0A!XRUw`IU z3)cC)?LI}@sf?kL1SdbC4MDGhS6RRoiMw;-gyq{w2HztaMzKP0YgopiqD36rPJxb* z%_(^tpn@}~8gr|w zzwhNN18_$L-0XFPy zAI#?jcdfw2z{!gtWp5e>nRzMo1&V(9Pu5sZbeXeC1e^faONV}vxN*RlsG7%Pgf_P$ zN;G3II@|!x8S0;yXKrHzJq?X|zu6)@!cab^PlBpACOq@X66O5pq%FQGo}Zui84z^D z>_xzy4=Q_OIQBzkoH$n4KTZ+BHDzFI8Y28snI6Ci1rxmm!KI0bUo-PeEaVBBn`|Td zCT<^7{Qdd(rLHCSp4l$or6MjQ&UiD~I2JjgpU~Q_nl*LF&&m32W8Z{^WNlUZXtMLm z%clgL-*J%L1aoOPc2>`XS9#V6!Sv?KK3F!ZCp71kryFM@X=Sw!7qJ*F+-DPs2{8B@ z3h85veX?bibrms>{t|=vzc)2&xvPxyIdYpZSI*Sl^p_+1}!2`uw+eJRtKXGn(|!Vl3#Z`GYHrIA)Iuyt?2S z&GR{hab%aYPi*7ONlLe6Th!>=+%%7)?`5jPW^=^EAAGmCHU*U%L_)M)f{Trt;&!Sk znKtAW+1e7X1@1c#B<<{t<~^HLT{Pjsg#0hmRx?CD z_a*z+v0v3;kmLHifUabA?r8AjG`L^)kAG2DcZ`tcAl7eokyf<_CMk zEK|Ec)2|>#0F{g}gsX8SnyVgftA*)}R#a0o*h&G$*r;i^v%MGGUIl-_E8fm*;3Bud z|1F9@`G#r%*Q1EmSbzD>$>ZZ<{7;(+Cd1tLzGx0==~bOEdIRqq#usrD=@U;R z((Fm5ck0!xit*s`0*-2aSEc+e2e_ttJGvjOgdCq@es+3idqB1t;<*P`w6kk{P{=kM z9hOaFkkWZnFb#!0nSS5-l-F8H!}7FN-y>+O#xJZw!(I^3`cT}XNrbZ&0drncl*B4( z-&1RzznT?Fth1)2)J+TwF(7D^`;5R$@hb&o4~uk^Nzbj`)Z-v1K*w@)Y{y=YpZZG2DK1 z+bugbA;uH7@u3~7>>Cklsls<6$DOD@j78)9?hqKxf=D zBi2-W8n^6}a#~LPu#-$p`lf31&!Fkn+OzP{kB27Td?lj;7{oIA``$rzU)PpUTef=eN2@|;xx11tdrPvle4}n8 z=`ZA2|9k6J#thOfBj$~xl#D;N1GVot$7Fl$aw5Ij@D-S^`Zsz|%IjS5w37B6Nh>aF ziNAS840q;fQ-f!EKMtdMuZ%Mpsbi4qHeKK@2o32jD=LO+T-KK0l88y_azIv}%xK4m z)MU|ZbdRGWu@-F+v2W4)$Ud{cpQxVp@*DWUI$2UDrP)7Yzyig`*81)Iwyj*DU65@Tt14R^lL2+bQ=C}wkyP>8kJga3_?7R5^MQfN+D6Ufdz7VV4*5D?CK#6ZZdF61$mA;ns-pA>YR|M!Rei3lD(qRjH<7P)ujo_u*p zYg)OdpO&-uE#pE~dCm3)9VZ$(fhcm?kxE?7v%9V|I#?CBu!9~iPWc_yvB==`GbIr@ zDt>xygW|7NUz#Rq%$yjjkkQ3F9e&`B_RqT`QHl|5FN?V5;xr`Zm1>8x+k;|@QVqVu zBazp~`+wH3^{u%!g{^zBKF%{S0+xKgPFo9m22*xK{^UC5?h!wE#M_fsCVhfEY&Lk2r(7S1hc$>=1&8pq8i_d--q+I_XOz8d-^7K63BLA_V z+58?Cfhq#!a>1yKY(JO#hL@YU{n(nyqVl5i69+4-i)Wav1Et)X_RdMXRo?z~e;IwN zuzY5aRY;!msHUBg=*(ioq?VwACA#NGOt(}0$E=J=N1ame*9f894s8v|29cY2x^uoS z1}adFj;uVL@0qRt2ulMXE)-p+!k7s!&VdHmPd}9%S<4(U5nilIxgGmBb`sM$xWSN6 ziCaceqt?@|;}hsrm=WM!XF9e-y#F#o41I&%c>RjSXQ&DM$6$n;G!u*X3R(cY?ym^O*6Mg*sl+m{L}`AppsA zH`CIVZv~#i`0IMy!2@SBo~kx93|H3^guONlG8fnUh}y@ge#^;svb4kDhlrM~^p!Am zh%dM83I0hca%#keL1HhCf1_GGs*YWn%p#crA!w;$QV0gJXp;UuN$aK}HU8_+_7=iC znTL;B|FFrl$J{GV95%9f)#&p~CAHrYO@~hF?9i$Hl`fXEM{a*iOj!V~ox|gv1i{D>&`No7Of5~*Ow$fum zjGxRL$ey#2XD)d^eIT13ZgO61-}UtiGoNVpVcR;Mmg| z#&)ajTW#KQ{Li=cgl#?BZ;XX~VC3l6l5(ROum5@snHAk#az|d!8P7WE&l?S0lQzoI=`Scoeys?ruQ-DHn2aKEnSi$z&3@HDgBvCAPu*9A(tT z`fU$pLORWLvz$NtH!XD=p9axCr{3GCeq)#ZWMnWmPZ*`I3vUSQL8ya8f+AmjkF@T_ zT+7%zduz0wb$`&`#ZwI3%21ck7D0y|Z{sXsE}k7s4$>nl;xbICDt$S%JM+IR=V4-f zuXX}~iSjA_pO`A7=#gm2#1ohMRKvcU3`{#MwJNz5O>d~StBIlc=7M? z?q3qqn*|5`6mGSH2Ixq38YN|pORMMj+?t?jzZPJxS3G#p!MA(7K)GVau^SH*7NIA| zoq2OQ++l2eMwz{0Y!Ame)nB`BexxyKyTh;nNNVYqwW?XcTXc5Zx;V3)r-%4&Qn}FE z_wLL$SxlD?<^-yA4mq%8s5cyoU|533*2He>8DN{Ev%s4Mpvejd8Gd%x?FH1G?-kWw zeC4nFNZDc0$G8pnJ<2oVbHPb-PRG~re#In=>kwc^wmXnSLGdZ$nt}RUeNDrTi#l4T zpixKX13_^2HsM0zJJe)sKxQ=ej-5rirg68NPkB|+=e#)ok8D?t2SGHXh|>Jk`AIli zTUWz{iRTD|8SrPRAuqrN_Bgc`D?KC{e&&cjRLkkt&L2t!sVu`+`xHF-R=FOy>+wy| z_dc{lZsyPf&U~v1on3==V=4rT3p7-oWa-rlLwi9C2`8!6>%ua^>L&3r-5FzQE;EaE zqZJp{mM_aucXOJiciJq_$$BH=eCMJu-wZ<8nT%U<&tc_t;g-=en(I!56-fcxhqHtz zh}2Ca<9EQFL2mYlr7gg{dMg`35W`c0Nn&&+Gn}s(Hm%Q>K z%eqF5JtcgPA>ib(F0IjmjHY1w<|BsbIphm6h2<86H|Hc+m?^NSCh2JvLVrJ0K}-M5 z>vas%s6_a6E0r=o4U;IYiwbJ&mCGFwV|(S;7?-Y_I3u}vJho2-SSahMBwnUvZ@E@U=Fa}7BCGYKkzL-LP#$>M02CyG{>d+2;4uhT-Plxi*_9Q0a=y)mN_@ z`SkZab~-|=&Yzxj0x~uJ{wE;rJ~2A@@^dR&BlSf}&l{4Wr`Euy=|9wWcxrxcZ?1z{ zwQ7VKufqkh)FaUAj~Ig((>gR(iieZZGnDeL2y1DBALP+vz(K(WL*8MiB1+e;O=|}E z$2cSnNxZm?X7Sb!cK;FZdnT=5oNuo@=unk!#ePFlraHR6++8ed>>>A3;e}`~e@yb7 zSx$`LHm#C^%RB*hNiKUxG-V{w?dOfXK%qP8$WKsP6%vrdY8-?M@hiq%XnHP;LSWC+ zAFYAynO}4t=YS{i_~`Q3GSojiv&Ga9^_3^8>g@>O5VIt&deQ%FpCO)`bo?i_?4sUi z1aRO(c5KwOi$mEx#*Hb5GH5ez?v+f7f!Us~7%w;ymd9^@$fS6r5Ti|WQEfNQ3m4CT zTp$|#(pt6I{U-3|X*9%zLAvGE*qxYwkLvUOcihe20w%n1^<h9gOyUS8&0rQw& zH3CFXrF4P4D)X{6GQz?o3jw)i1A*XR0mal;n=S89#9R{YrLTjmkxM znUd0m*b|)dj3w}nKX5;m=FUpelG}SJN`3E3$yJd9Xru0r#nD5R^oOQi_{nSYtXh9g zu?M>f%-{XTR`&tk&xkBA`X)S$jnH}5Lh;cA*Ub%TN&+6$kH&j_to#?9aRZ(kD`Q3Z zdkaqSY}V)VtJ>e3o=A5tpQQF3z$9bq-3#uriuDz*OWGgILY*&+jVrqJTCl8C*99;7 zEU5>-K$uhgRz2i>(r3~+jLt&W7IsOt%Xlg8mryw+-8LdK>ErZkQzd*nW1OUzB~z*U z!BXYT(9;-_a@5-v9BMVQX!jkjjC&%YFOWN*vws&^o`h$b*wVR+aT$gq&CLAjB1iFS zPiOMHq@nA-=+$HfJt>=6&;+q+jW-VNfuo5()#?u5QU@NlQrJcb*D858#@G;X4`;HI z0$WhdHS@}xTu$T#h$@5e_F@6{M_IY1|FLo>qvtlo*pSMZ?`zRx{sU;m5#^@0Ighho zJEPl2U@q%0WcVVz#Eql%?A_;|R6&A>ck;bS8fVZw<_=q#)x`>hl~yR-;iS)Lefx94 zO(NW0^f91pe!K^`5-vsjeqy{8dw;s~9j2!gNx5dS5HH5J=;CNxVS|AoR-&YNv}{Q% z$XeAzK_!ZnEdFEFy^#3%{)c1}3vL{KZEEa3Onyn2XZ?N%_;>Tfuj8G{u&~Ar8DWd5 z(GS+y)v}lE8*ON5EORC$c}jV^=D=fc>01Te;}F?eN;TL)dRZAeVKu^;j7GzQ!8@h) zzPgZ+c$7e5cpfL_dhNL@6`m$FPnwVe!*c6J0lxxQg9gr7gtKI6(-Lyabb5PsYEFyG z1tJ4BxjxthRJBoH^X@f_wBgb)^zJWhV5;fKYJPK@ElXuJVP5Nr#0iVFh~rVwH;)iF z+7yxAn;kprhhQ(t1J5U*QQ6xRh~b!f89`R~gT3Sh9+~-AcSR)9N9TLer$pM4`)!qX zn!O>V3eN1^@8iRX=}v}SOw-AVG$yX=uPL(7GYpEh&Yt3^N4~U%VI)>%!MF1gg@;@Z z;a;#(dvNHRqMl&V4;OkF>v>7)y*XL&p_Z!&BT02heqk-@ziBeQEzVzC5P8Yf}fKeySFj=0)cP#_GEvqDZ0uMI1TzoObZGywk6~S#6)Evv%pT9g7 zaT$Lb4>@7U0MwhT-8pvZ=d**>+9oUzr>D(WqYevMAGy$=z7b&9zJ^~CRxCCK66xUepCED!BrCB+k z+li17V7;*r2zMEVvd7j(`@lVq1w6Ot72cR@oYQ3DDp^e$il;7I8V!6!99up8y6ZYVg2eT^qP^eKm zP}uf30}7=THKbi`LFwDzA7a)g_Bj#x82L227uASn9Gz*hl#Wc6l(-8WiS7L02Op&$ z&*FhXXyBmhqswS>Zr&u?$>0CY+8kOJ*gYQaGo-L(cpoAUaUzP@(j6@u$fWrbo!pri zzVc%TkbEz5O8PxuN#Hvf%jnf1W4FGb+ix=a`Goo`nPc>dvyV}?4eEPgd8$F>BF9CY zv^SG(xZ{UE8;YL_QB!+v&?zRU>MPYs;MX!4&Kv$zz?LB>LU zh)l1iup>O5MJvz}PO)A@cEZ`d))RNa)5+KrpD}amfxb0a#Xn40-mc-EyYyn6ac!4# zUbWo(L7yxRQA;v_j+@r@wiWMLZG9H2J~3TG4qYny8hi%A3DL;$xv6yRdX9Y`m)cO_617; zxQjQ&3!GQSm7w58NDLPTEMGtfZOlLG@>`i(lHl$N!Ie&z!Su*F!&|8u~Eg{jIwT8Pp?xxh!!c?OdMv z0g6e;3+7m$KrlGpPn_*QYzo&()&?eG{xJ9LeNr`7)X3)Lm)1?36Zh;myb9?ZP7MKR z2FrMYx)fAqvS+5hDPlc~)m&2%mKYa8rdy7?qxsH`HA}K5gVlryI_Z!b}Le&|3 z#^7S_oaC4Atv^HV|2ZyCKz!B2n<43sm$v&^RJOwzo{+IX$R>%W7$lE>8; z2-*Mlg0gnD+dh&0)Jz%-Da5ah2E#YcuKm_QQx$(01PG{Q;G0J~GaE!iIjy7QE0%ie z`IHaU?-}wpqTWMRTfgRtn8vh#O*)_)vNE9_oqs-4uRm?1n4@m=Yuj8bP_=lWmF~k~ zx_IiMm;NS-drKm4N)EZ^MUA%i*o|9+uKGnv$q#}aepl@UN6 z-L0+epI7?tpN15tVBHA9Y1v8L8)Fo!k5J(?jO8QjNeBrcCi&qIEz7`mLUVOKSn9PD zLCZKVALa%Ck^I0;9VT@h)me+3c|*BuFS&564i?QoN@vK;@(X^_`+A?CEq7>+rQs! zQ|WC{m6O9R(j@%By+mh@$22$B7PNILz6$40yfI3P_@ps2=k7#-w5W zXEZQ-=Fx9q-$x?&@0xu=pEu^RXV#?a{wx{yN;UR|weTr#} zZTy;C8`Spu)ROx1zzG#$IRCSg=PX~p(uMeN0vOUeP*X;nv3UHXU3#ecrf2+;nQodp zO%wL+%d0lJ_v6XZc0rZXc^p^2N`h*yju?CI4vUWqK0Rk*O@6^7DiO9U0~=AKn+Dfo z$d##T8d=8rb;U?5AO#Ny_YWA{m&8%q3U`Pq1cTa$ipG9J>wQZf%*ubh#8QPDZ~x5BbC{ zYJN&-s)e!tJPItQMTnZ{E;VJp=j?jh87J2C!LzLBaca8!`5ho=f7D-|6F%>o>p@K# z<{J5&W`m+h*<|rl5L>loyw}m0jcWI8C}SI5G8Sm{`OEDF%-FFe^lbi;jh!ihtFfu^ z7qo}?6i;%~F3gTxy0m;87r$!98J3Up3i0@9!$EHm}iYivO;Dy6Q+Mp)-w?}@Yt>nlERT6&%=!5JBVPGEDz?sK zA_ltpWk=>}wLqoMs$sQwt6VVgai8d$ z`)BlT-3*7+)C~vrSD?k11Q$}Lzhavzb7P%73)+@JcJE#{e06$rp>Zs&B89y~8Es-E z+)_M3^ykJ!J?rI8#zDck!w^NR2)BgObsdY=#R*a+r6Zf$gvM4Xq0fVVUUIKY?Df6`|4 z>=p9$b}aC!hvpIYvP;u@7W5v-)nkZ15%N{$cDH440%BEg44uy~QM}V=`Bt-qi>C(e z;F8H)6Xf<6KQ0S%Q*cP*KNypOVjTVuO)UbZS#>`2on%@Lm`@HPo_{gCQ+QDowau|s1rL#J zN?hSzy*@74STri@_2q1jW7~foqI{B`zQ%shF7)s_=pmWODLf`u?cjdIBichQ(Zl;T zPn1_9iIlLA2GGr-ewr-T#j;m#fsfkvW>RngxquT!z@C6Sj?Bf>%t6g7l1DV zgU*6ABV!tuy>s`)W@E%=s$NkDKS>QjnCY-)_`TfQa`S>HFu# z2Yh=nDLDiOs$l1q#+USuLkVkh)oRs3wRrq~eC=wUI}{A#fpC}JXdN$2&E=CQCR4i% zaDNIr^6u=D&CDN8SlFG%dk*U<2?FibZ8Zo(d;W1H0`tl-pY+)KN{FaKpYS5M0AQZlrAT;leA z3B2@Og6!g=E`ds{@-TAP&}t$kV^|O$pOpTHH;4}&Pw6utRUD)1d8!#%NR)`lh?P0B z;#exPaBuJU*(LVA3;*D9j9DX0UjMeN*oW-!=RvOE#)5rIN(R@;yFQJIhSQUTn0F?c z3pwM2vq=<5`p?h})|R`aE=r+L!+t z=QC0+pwJ&{offZsH9*32s5`(4O(e*LYe-jo^rNNv&9_fH8R)sH34l|$?_hu~1fYDL z-+ppLZ=l0Y4D0B{d5k%gOO$$A@)7w)pU5I2HacNLM~AH@-((Q^RNe4^3wk)n?bNQQWP#Q;HXNhvHsZD8*d@#XUgK;;sdX6)#YvxVu}h z;_goHVBzHZ$2hmSNG_6hWv#X6Gq=m&nZrcon^F0gCK?{bKhpp(q@dk`_W<{McsqJ4XXBYy*#P`4!fu|ig1$A9lny%!kvYd58vw~0&4AD_QzrMB7Y zuH6A}IGcqAfP2wyD~^r$9q6VGI&67Df}poe#dM?o2S_2fb+prvA_F%?d z?rFj|jD?X{!{6OQ=JWb%>x$e8ZI-R@Hm`ZXS5%@-b@;|g_en#j>7VgzeabY+UM`=* zoyhYc1`y*efyRGUEQ{Q z)@K{)^N>6LfO3gajcqrA?eO|WX>;j9Wyf_jWn+vPch7|h-x`AV+#N9`GmH%8E3AN$ z9EmU_8NaKB9To80!OU&y8F8hrp76vsw*n?vy!Ahco?L@DaIMeTybCKAHl|kFIFqyH z^`4*$?`iC-x^!HN#kgskTnk@)TRbvWPFM2rxj#uRwH!D)uNT`dUjJN~*cn60X_C6q zmBw@Th?hjO@SjIIrxu<=w=Cs`^{-LaV8qi6G3jngh~P=)>|_AM>$C?I*uR`1Faw!H zB%WwhgWWLregLQj zxmho@6z8#3auzSTd;}US%V#fy0bM2@lFp+dL;~^u)ODJXu{~qxD?3h0KjxrHr4V$d z41B+Uif;SC2GdE6m332J!#qr!NjhhY5s?QAYX^RKR4hMg(n~G8lH-s6<%!puldj1* zEPUj*jB?F_s=q)e4i&h4wn7$aVjy)97yM%T^?x$J9}MpnE~O`SM=5uVT7)Pel{~7q zPh%R}f>adM`m82IUBGBxc{6$>*f(c`F^M5p@gc9eX zya-~MXA+1r=yoMc;-!2ymC*I6Jv}K^P<*1U6QSzaWX2{^+Hh^zCELgMQmA=b*H&&? zG*DG|ZPYb<9l40)7J55#c`R3@@^WFg`U=N{xi{!=ns>EwGJIHKI*NQLZ$B6^#UL;! zWJVPQpXoXxmYl@5h34#9f(GF*o6>G_%I4@BoViS%aY1nC^?eb&K$86|P;q3kWJ(ia}_!U}S^??U1-j#(M4 z!z8uv^-*{T5Y-c|ICDJJz|ShD)Gu`{C!9&Y0J6>dgN&zdETNd}Lkou8&ErqXY!rMLjY)0Xec> zcys><@IqtI^6etx^Z$CKNC`u4cud;pjX$rSHWSHd=8#00U;pbevS@af>3KrBy>vb} z`=tRgM7rlPx(cxVoT?uu4s>H+J6ejDpG5qNb)qRWSi#FM5G>XQ;Ej7LME#c3G_aXr)Vr1LLA0AA?E)wUYnUH^61aL;9s3vNqUl+&QGi{8>6pxRb z6EEH56Gau9`s6;d-CWo4csie`t^U<)dZFK-NKecVDXATS3(;{q=F;q*GW_1ZAKO2* zT1oDc25qO6Y~-!pCAYUX*)wN}<7{K>?x4q(Xk`72RijKdRvD^G|D3<(g5egcvR!F3 z02EtbQ3ivpjm}lT2_M9e!0ST5@Ufv>r#EPvdbL+=xw4t+A=k)Kb|XqTEpF{7u7^sB z{Bvl+jN9`!axF|uG?3ru5O~xym1^u4@6)>^8^@SiG*eZ=K`9Sspk}!IF5ceMB_i$)*M|m;Gz=!k6}u~_jrd8q#bZ6BpF7Y2 zn_E8!8x%12&sARZ&_VsYR&BSl?_QU(GrhAErl5(apYtX39`h=geN&Vp;%rY|w~g-` zwx*X+n2Uo?uVTcj0q{F#^O6bGe2or_U?h^-rmu2O3Q}1eSgw5Zc ztB2~wP5X4Hok)jQ6u5PM1Fm#q0uGw(P)|GE7VOS>~toLt=E&^<(E%LLA;(2cOt+vNCto4 zzpQV7pZ9;Os__q6kl-@m_nSc}^h=cqbX`Y~IJ9MRs&{o1``or+eWMO4`R1zOe@!9I z@cBwHdnZiXimu((NV}?I^bsWi2Cp2t(0H|WwFhhwa}0mO%b`^x6S8vVHpqvrcSSHV z*DXu-xIEcBy=7<=fYIP}1jSlRTk%hO_W<%O*u9X6|INf zqE;0)bLW)>&;T}|EC1PvL!s=o=1n8R<+|KsX7`qAphmRYg7IS}{bkA!9i}Ee%u!H5 z6pLKzw{^CW`@O$h`k7xud`BZ@-0u7kG61Jwywh_>a2dC|U%>+)Z}L^O;kZ$;2mMh_ z%yP<1)u%iaDeBYTGiNZ?$>AR*9AD>kP!1*)h9v8E3|f>cV)oIOs!pbQ1AxDK6Xbzk zQ}1!o(2>fk1Nx0Z*c4MU`!S{%i-*dcD+)Bw70~x@tJ3hb^9!QQJ-h4WGJ9;d?Zcz} z*Neg45g9ja)eO;dhFeo&^;TYsA21o>8}t%~HGS~IiD8oo-CzP`5?cY^@6p8Ot@{Kl z=QR%vpfT`mA{{kipR3Gsc?s+H82&nbLaL)!`LAn)4u4j<7y8^{1Ct50V6D^Of0%(x z#WB6b2MZFe6;1~oV~^PQHv`2DU0g4tU+>lOP2T<-2%Y|gH(lu-phegmYv{SmI((A( zccLiytct9%E=qe^5%$3NULYt?eNzUxbE0ZDIVP{%Sm1^U%J{<2l58lY>-JqVMU|)t zmluo2XRM1mAG^pEwT;VzX-^aS)cS~z zquG9*ssy>{mBePJJoLMhI!K(qPr+#*~szke*1~+sxC_l6DwR| z{f(x97vpx7fb%Zg7kbnV+U8{C##Ub)RuYY8*<9{8BTt+1x?ALO8Sl5B(5>XKjcz8l zzmx(^)8=Q3o^?bX8n?K+hWWgHmUnd;u1}s+TE716{M|l20ijyf0Aw&rS$ZJ0$^_AV zNXa%K80r|hl*$YDvqje}t?uq6!miTbWprb%?t4qaNDl@Cb=*(%Va0rX504U!U3mYS z$o~&)FMV}M2KHQ!8sdW#_dXBhgd35HIky!8Cl;sNCOmuPX`*h5_WAX@Wpbh)aC{6r z&TX(A_CID5oQr~_Q>1@u!^s3NU_22cZ-g|oOnZuk0bd0);9_p83=$k6=|#9QPOiW~ z{YZmlX=RZ%f|GlW)8EXg1l!-Otu?rhJq3NlQ80%d`PCV{+w;*b9D^j-w?; zcOjCKpi6AljDf=?@z&M_oRFxyE6Q*wes5QrwYrFN(v?;G7ct)>H;)|xb)0&gs%Z!% z#);y_k+j4_L^B_pMJ`SHYSMTz&0l}?*UpTE3H?2h4G0AL}K905iOuT z*?OktHOaL5kEsVOU1bpU?u-5QIsJYgnhpb=^RbVje)qCk}$ZF9gsJKcO-Ub0+J6c`jMe}ijM#h2LIj-)#<>ggaY=F zW`-n8lX#9zWSuYlIbVy5ukh$82pLGQVMf9(#)wOqpAz{!@ue*Rv=^Y{**$G$KI2jd zX!6yFnVA;)z-QF7Ndrno(&eJ}+zuQoaAYx+)~9U>zMMb0bgu{wUd>gn|XmmjxP?d}$5~ z*+nVgDP5UMA7l%9$8&%B_!~I2@v%z*T5z5aiLhq`qdn6tO zo)gbA|Kog}g*e?%2Aojpi@4Om^7#GV{IeQ&_uZgf`XC0(a7IM4s-i^Vxl&x+vJ-I8 z^~wQhCfVYjn!!yFd4D5zUc_^jBi#3URuiM`I5NL+Td-Mf@7Zi}96kymIea!xO-i!2ncx+pLhmMdpMmp(&>BUk){d-*m{#^g8MmHqHfh zHYCyS`E8C>31idffSVDCo8VuOA0&=Gr>gyI!q}jJrJgCbA8dAhen<|%iMQ8E75)(e zrd4`goKyxqgvk6Ownhu%r70{AiZmT3VMEFAA|!2;xb&c@ZP(AZJ2%|o&FMkJWyTG$ zxt=t}mYSjyyGrbxq|}{Rn4^e;pO57m6?YOV!uH92B-|0$+QYk;@3kdce)tlV0X3|v z4bB%ei_8?1VUv8{&fTVU_MJS7aH2eZETd$YXw~?sP6zA^c7-=NKRs!oW^|^Ta?5R# z!ap%gM9{rZ_2sVh?rzGr1Gi5Z^COW7$SI6?&txc%+L!h+g@=;qHJ+;SY#qHDeS;cA zc=!qjzhe`9Z5oe-8ly(gPLk(oPrkx?so_;gM{e3zE7b=g*gHXs4^#AqBv=afWB&qE zo48)0Wht^0D-?*(z31akc2&7{X1B%v!*wnT5x)`LQ5M9K2+Ma5bvo&~0S;sPnfVMB zs|eWUyuK8`0PR&v0UE!^Ztb;M21Fu}c?)C#Vd*5b!lC=4_+3G~L=vXJopgc|# z%B};H%r0@-D8RcgawI!>D2ls(#B51^kTG|f1hgPwxB3a)X#JXD9XCByp{D&!}&PoWcD3%f(cSPA0u8te&mJ9udH=(R~MnCE3J+ z9%`@E6C%SoMxF{Z%Yi)|9F9RYUel8aXl`=iXD{BpM$FM+bY3JD1hbW#pnmbO-qC2D z?a;zgqyG7mKV*;3M`&uo+phtXCG6aXy&u&4M#kd1W*TXFrJ4o@^6*CmX&oogjbgZh zO4<9}UkZ{E0YiWN+fd2hkm;EsgujH6-zY|?_y&N8mbpyo4dg z56a+wxXWmyt?7zgB*yzdEv)cl6!e5*i! z3vs-$&W`nzc}ST6$`yff1V}8PtS!no6Ih!RW_Eu$zfQ6|&<`cn*|~5m>7doqw1@PsF%LK!dkCBc!3z?g8}CyI6EVbkn=zsQ8llJaBtAu$ zaJ%or!%|4p@&nHEuS(MCI+@_Y^w9=)9x&kdhc=ByjJ6S%=1e^P<`Fr~gLwP?}Y?i^fN+>A%S*_(9mrYx1ztX{bME#;0{RJFXbth%eT4K&FWqxpHN#daC+K{P-3^QD`3ccI zjo`foU(1LDBzLG%H;#BV=eIlblRUKN8D29MPTO=B@4UY^EZU&z@0E>BWhPaCn;`^_uPdFVC9&2R@6oh$ne7_Q_GEsuLR_^dfv{@o9!ST`R5$;%F z_ZEmHMH+1`-8p@gc=ztG2o%gvR-BGM-GX$7(Q<6X@g+CQ(O`xA;?#dSu|Qx900dGe&Am6CRduFG)kMe{F0-9esn4L>1#AXIVE?qM0-jt3YMx1O!C z#I~GkZmk8X+SdAV7=J!r_7i>*O4$H%a%2e3ekCYmb-o=NPh{0|9!qQ%V;jB6bT1hu zAsnr(d=GGwU%b0K)0GN3KjVFsiaF52c(`W^6co#ZpmToFWIHAc>+I8jb(B_|srtf8 z_X9}3{gOe$O|~KfO1aE=?iK{2cp>GCvD=nUwI-@Gi)GPu`x76F&D2fe@h>muHJAm0 zP6J=zW8F87gQksRBZ<9v&rmPl z56@bI($&~-mqkGvX5a>fsm;4JFTD|9h`sitvXxu++dpz z>=;vTa6(Tv!#W}AQU~rvFOrv2lwkXCg`VGu<}u#SLAW>}8}55FH_>855*=r>^M2fU z-nj{0t_cC!CH$AayVB#lg7T;B3Jw@L4hlJPukC(k_5I>(kB|y7MFKExJDnG+MJ!W9 zbtB|9Wwq~ajfzXu{lZ^kCv)0MVIjGR6p|Fe^sk0yyAPqigu$6b5MExzR*&jzi(WY$woHMPNyFkBn)o`*>Eh=nbApmd zkRf)+UKCyb6~4HTWj)?JCCtd%qI z^@TkH-|q#3)vT{{*V!fu>?036>3288sZC0rD>z}N?I!X5!;^6dxN#d24Cd@NFOCj& z1RR8GfY{ogWZn-FmPN-up*T>pKi}!9#`*x=3;@O|_%S##wuaP?d#+LiAA{bG>9@xB z9k;YT$S2glHujcZ@H*aU+F$;Zd<9tsFN~AW5d!xNlfgW%XkE*i2YWN#v|^7_Jcb8Q z!e7qyg+49BN1@L@|Yd3YUm!Kef4Pd1dAaQdXbHOjxPIj^;B0kVcr zi*mPM_&>v_Oq?@yzWmh>Uhyo$=vpyvl{UBn45f#wnK%&5S|QBaHN1WPdqIp2SXf|5 z5AD%xGA?+2ZZ7|k|NG^^Bfje!$w))jXd;Gu$MCT!D%~auIF%h|83166)_+v}-IMdx zAF_Vq;fIgDGPg$bx(^u^>*ATg<%G~pY&Bu>nS@ZpdZzniKXx4t3T6ti@hE!k*@JeEnJo?Qd@!dE9g1GUb?1OTZgl8}eKC;Lay2|~aznU^Mt0i>VpOo$wh%WVW z6g#>@_aQZkc94-R9Nz!62VNM5@dclqZAS;kH^WQ4M#f~)B|b2w-tyxF<_io;X4w3Y z?uiUKO)z$ufE^NaFXT-DHV!(bwU{QPjb_UA zG{3Ew3w2Ur*4*i({Hzo1SPCRN--aB(1H%{W=h8PPz@qPmAvd|$^Yi*u21U4M2{~WM zid8^115g}~PzCnp|L$RWv#ppV;)1O~@8T)d_Y%;wX2`=hIUnzNz&|xEMP_QwVxD}$%X?z{&>p(Grj}NC$gT@T2~za9%?|+m;IvIr zx7omerS8x~Re#CvL({<%4m;@A#Z?KbO6i+!Dtnc9?!e5~(D#(vrhPpnv}vJF!b{oO zAADg6(^%FOW~3Etw*&&d*(ftsCZfZ*79CX&o4(!@$qH=E4XuQI&V!e)cB5BuyOYc< zrL6Hr0oXw@nPC{*$M}ZMePjPgazAv|s%Si7W#bzyS74cE?C2$|=rgu3~1?rx967X3r^CVtje&0JqlMv-w8Pts4~Jv_I% zmKCOj44%tHSEW$VrT6sY!uj4_hnMyXM&{ysW|TTunrQ{?wZaAo(#>Mm0WVw)~6_IFN3{4{!7gZ#vkW!H;w%Y8B>O8s1o zuFlqRP~*?hh0WeA7j)Ela&CT5$KB{otTc+NS?qN@O&UtqDQKNciWpumj@vox#Utf5 zZk}(kuTEvgI@&A*{}z7Fe&p$+>czX=L|6aLfM_$DM@uIp`6#lI1g-L7v~c*N5wv8; z-n{HQ&n}T~9G`M)OpX4BXYIN*aQLwG$C)bV`i| z{#)}UsM6UBI>Fcm_m+aILO`}H)tn5VCu*ICK3evN(a3d6y}4NO)TzI3=Kh{?aF1pS^y#;xCl&L5*u{%BGDUMZ+Z_s5Ca&kR95` zo{+|jrf*kRsRr4*_J_jKGrcR#EFw5Fm+_k}1=JNPAI}sa-98cIM3S6)MDO1(zFFw@ zBEFK)jUng#vl$)37qsW%LwAvR6H8O0Zi*^M$+u&@QB5HSb~)0b)G-lK7|asu zEQT$~XeRw!Z;Y}!z3;nD{TW8Cnx8zLweW7`@w&sP#3exK7~wh{$xm}LQ)LTZ%@@>Q z<+YUIt_hOFxeFFE3SxPh1_*uuHzSmxGyCv>jI^kfgU4cmx{~jg))}0$yJ4y;A&Hv^ z^BAI!yw02qfj%C;vn4A&IS+ZydY$!|%owT~H2obY%#*tOU7VlutViHG6{w_~$Byq! zH>X(}cO!aaQIDAY_Y)H(;gQ_8y!EZ)dKu)JF9TVLh?#8v?*cevsHbU%dnE#BhwgVN zK*?y()C79po&vb23CP&75a)L#sty?wj~GjPCU1?3=sbABbw%06NX2#P`RfDAmuMKm z`S-qp*ZN4`tagCK)w^o}nS3s5({U5aXmpdt?nUxGRhxdNmZ#M8JCBtC(T)=CA`LiR zzMR~2fE{1IBiQl+3-jjBO>Qwk&Xul`YHyw=&6C^)s|WGg{NLB9%85i)1~Da^oCQho z1))m{IcNV%iq0R`lwORT{HGtM+u*~lfQ_^xvy1TZY<*^sGish4N9T&uj>dq!Kp^WQ zO100{c8~dAVD&XcA)vr8>-AI@)#Ms->8AfPr@{6{9WpO|DO!-!WaNKJ)MeA%k~OF)2>Qi+{Yl_i`LC#R99+M=q`7e;+6aA6F_$COY9Z!KVyE_El=7Rr&>(P8@OeSTPeHgwuK*K;@NcE1{~$0MZX25# za~N7b083HiN?m{X9!wZku&Sqew1qEa$#X950sbTfs5)aUo@52UYi@@!yIa!!p&$N7nWs%-<$mKN4K+g3nl)$6*)9fU|f-< zR^maK5VqLk`YPo+iN^zTqW@~*pnb1l(~DzSwA;qmEAv80N3SIdOhBEQp{Y*)KGG9Dfue~5;2&(*G2UQjqL1eK@vQbz<4Z6t@oez6H@vabfg;g`TC_j7UyA3#cZZ!< z&BGi2W&fx$Wh+s!Sm(ZrD=@qh7#VVHXC{;0M5M$y+dZzQ@{r^9*P^hVv2A$dgfazz z;iP&?a-H$#W1^e<*5>3ony3NzEiPt{JN1cxuGi#C=OZoHu>{N31=Wf4p%VQ2-(Mzv z!7wlsvHf&+X|Q+Xm{CNMOJpRQ1|T0dLWxi%+n0 z%=(V*<%%#X9m)6ikda2_S?JwFsZd#jU>bqb6BuZuxzj6N+x=4&en|w_5Tqof`ua)! zu1l8z%?UGbm;$?zGS2Gx6X9r;vCn7dCVZEWSFjEO3ig6>eao(s z_l{PME=K$vjWExTh<5TNjNFAS`F6z%0otK7XXVY@I$Tdnf4bx~y_#{RGMxOm6f?+e zveZXY`mTH26F@mjt|{rUzfailB1V(%PY{XGtyppO@j|MKiJ6{B&%Ma8W{&0S^fsH> zaVGG1>66&BEREe~`i0*I8Ve|a>kVva2Ys$gP)S|cOTX`C{MozrYT`tf{ixNMw@am{QhmKqa^aE&1NJ5XLa7Z7L{k2DQ9Sq8 zmx|Iyxl!OhB6$=AG@nrA3V;Nl)^0Vp$EFwcW?C-Sn{;;KS$u}9i-jw%1nLhn9_>=y zs#cUM@M4^-O2jdk3;ed61T2DAd~v4M$0n&{|5t4Ll_Wg}tHe(oT%;%-K4pmB$%&^_@3m5e{>M{P&g*l-K`*8jEq_*r z+Y^2)0OLN1wb_|l)#~OUjzTXPw=^B|sIsv0O#hVpfmoxS`&rGT$eBr}SnH+yp?6?xw9j0j~W!~+= z!_0w?>}SdnLhZ2oioO$JQ~Q@VW2~x8xOFE$*NATUr28mIEaoa^n!CdOD_jb(x0<9K zKu4LDx_thL8G*S=)L>5tuks6^lcfSQQS+3Q7m>LmRVyT(+w4^S&y6oD%V!qIPOy(QUji`XP`o$GMgnJb3)$3*lD3BOj1qGRr6UVjFAanD7VHc{Ck)AyR5g*Zq)!CkLs_e;Cy$YSgPRYqAeXq)5J+0Nn+TjxyDNGI>*OfP0X zhK3dq5Hpy!+QdJT0>=7%Eg|m4*!ltYrK*)p;9^-44)@(Y8Ut=U+h^%iQL5=T#=ZK& zYDlW|@1+^l)2c!`LoZ`J(jH5wXhC|5$GW9x@JpQ&UiZlwm5Hb+@R%+j3BJ&#LWzK3 z`P26tX&>cRXvo&-s7t8Qc~39njU_-tn@JHORsC=F#}Xr?5I-&c5ErX<&+C zJSx2h7-|(&89q+`Ubc^YnT&94@;14uhdzeK4223gYaAjm=EY-j3&6=fvaX(2f6IBa zYZV$}nVWMwwfnGjI_XNy1P9q^1j6Yo0~DY*KreV<3m8ho&et2Mn06vG{gcE!zq{<=EzG#j%lf>gw-euwx12;yHnBHk8W-N5 zj&8M|x$Kk)a z+RnGcn|`rUs(wC$5)XI1n$m zPy)uMFl$y|jTHGo$enK`nS&g1GC^3W%85t9UlQhuze=?Juuy5fUSG!i2^at`3UfZR z10hJ!C-M}0=Ck@k__3Y1u1*ZVUPUfCCEi&iU|aF;1gOFtIx@wZp`MU za#`Dz#8BeQuW-Z$#d9Beo;dJe%#VW!KwGwZlv3-WI*Dj^ktycG#p6TO_(r%y^>H3T z%eF9*X5zPt~PcS=##^(Aq;><+4YnkMGn!y3yf^#}XO+ zR_F|sLF=R6DgVRao~|lR63IZ*KK{LrX>y3krNz5*cv2Aw3{g8)q&)6!hQIjtpfYu< zvcA6GOXIQSlg;Uygd+8jS%mG5j&-kUY?rfV$+WGbY_PANEz!kQuy+CF{yUt-=O7IO zTmEL2$p>RQI{`#sdJt2Q4b4-YCX0 z+MHFyDa@T;xqt!yXBNO>FYD!I0-QtPJ#)xg5!xeDlxiv-pM#B!6ROKdUfuw|u_9?$ zF75EWwtT)*5q)0i)_NZHx&hQ?Hzw*<_%4e)ziSj({TN&!3juUph19bJzR3+u3GMPd zk^YMx(;0crgYOOdd3mbWO81g|AFDL@#xhdm{HQAmEbo7wwaCnl}{e6*Nq($sK+>tz8R16CyjR9k1_8vp*S}ZXb1FTV*rsEL?3i8 zK7?XZPZ`8?8P-pB631=RSC3`F98EH4kUVy*z!eiNUmC+ju;Sh?f+RMI_NrmKpWy8g zqlLwW(n+&J(*i4bo)EOJj z`X`sQDWe0ZAO|PE^g)U>PDP?@bm9=0gbDe#v>@B)X`_ARnkQ?MhCxGZPKbMF27!%A zi*YPci8CtvXP{SQrlq)3TRY`?a<TKuQ$*aE?fEbrkt; z;t`xfa`&x0(g!%Z1_=}ekvy{K+}ca&xp{zt2s;p?000LepjG}W={?G(B_m4sMPd<0 zY)Dl?;$U3N50${65k~SsjTwWNIqF@7V?@w)5Vj+u*>e#st)c@LOautvW+k^EO#V|H#EBS|-u=64@!A3#9+AFAv)jJOebQp)-0&nnYF{ zRP~?Ls=#k!bj_p0g=cWiwmT6?#Y#39QIxkx{pD)vXx5I}Uy#5v%kx z46K^ZuaqA02!pZ~L6RJqQi=E6`4%L3v;smIyBQTk*+z8~4akJLFcmT{T<&&(Q~Xu6 z+jxns39k-83z={Qt>Rnwze#>s^y}f|Ln2g7M*>=FlCs6&*N74wa$y^S#gsA9TPLox z$MruM#?}9T;k3TARXVA7#mI16_-rP$Pca^Q(w}aWY4r6G036#r5AAa9e3jo(gHxv; z27g_*D)nK4$_ol+ysno}Dl;fkRLI9S4b=}Hi#RX*w}n0;S^kO=A360qNjNbq+RJT+ zd_by++{vt<7~~N;g5RalC7k)?2&6?JVj^_=js}upcIS(P zG~~qoAx3pq|{JJwNQrG`3Gu@em;}yR`CZugG;HIvRWEIz@zAdubV=7!KZu->d zu@SzB_B#|&I2<7i!YST6L9=p-n*=&oviwJB+?YHnpA}^aO@GDaBfJZ8@!aFU~M2>^ZDL`(Y_G0 zB}&H3OrjS7Wr8!M2c?hjydi&WDls{k8Fi;%7Py(Xu;t!R%P?qZ9Ahh7t*iv$JCg~F zy#qjO87wnJjvZw_*Nbo1tczZ3VW}@W4odG01`x(@pG1t!88lK8QD7jWMtGP~CTZ{>H zU%n7w!u6p(h`aUY*+k6Sbad4tUtW|PHpB_9?>T8!Zg%7_85c&&!=59}1dodVsx;Du zj`Od6*In#h*S3gBjFy;W_Xu`riTu4&p#GG5!27*0H>o;Ocj64xGa8M>j%_g6Yr(&Y zMGF~GdvZbkh_>tyu4l}aV4U=@2DhC_psr#mmbF7UN_ZNUo)Gtlnp+(#t&`MwDD8(h zBHgo*6Z|~1W?VH*wu1!@u{Zm3>i@n($K?$iJKp~tCI|aB-249e*b2?4gyoJNE4?-S zFAInN647bI!}!f8w@LAIBNp+|dz;@iVAKvv0MmC^@G`TRfB}x8nRekx^-bOn{`}4_ z+6zn|m)XW1BqcIccauqu;d@AYW6rld%BlO4ej3H(Tg5Anfi~`+tNM4?uxw*V{3F*j zOZImu2-=@OZ^KnS$EOgfd^YhRw*IP@S2kj}sx>f@c(^_^^n4W``1|{8Nb3~*2fS51 z2-6-4um)g9vE;vkPH@sOS*N$&ERfG=O*?RM7PV?e$ob8GJ>`+M$^HvBY86Wq8P3S zD#2;GK(6GmxcNwamQE*{Z!Nb!AA9M15gy+-HS)IO{LAb>GX!-r1Nj5`BqfG?a6ln` z2lP&iTNEa8F6**lGels&0ExZ@92>7)gd>dZE5AeMPTE~}y&_cR=h#h&r27Y7*Su=v zBepCL6!#4#If|4e@*w4t_L;H$(FE^qWHiOvl4a3@GsGV|80~yg65SDH6|a%^LWD|s ztP(XTDF~o#HX`MLW5z8NnZ|rvkRiU8tXEUDr))TkO1|o>6a6mjb2Yklus-y+{3kfce<*%r>fxVti>QMwS65nE)eQ+4tlN^=n?Yd` zuw>aI{LLLc9-KFXx&AGNLk9(_48rW+bCJ>grFlsAdPEks30@N1x~Mpl-V~le<$U{w zQ$klsi~uzL2!yzfEN-sv_*27U>*B84{O~rr^Y$Mk6LE*vEXK5FmddK_L(Wj74RhBMW84-Yt;S(&CJ2*yql`@LwUQKXY>(n)3gz;kvo~5Q zQ#2W6ki0k1#0lHj%eEK!;!b*b*Jq75X)*-VaT6kRLA`)KL|zZ4}km{$KEbIU<} zPDoN`VuaYcI;4~Vk<^1h{`G5Q69;F3AHEdp%rgW^5FscM+8BF#=84)_fVON;bThN0 zNU;MFBq*)RyK~#~Ev~ie-jLsw%f&-8fQ(*I&dPO0uOqb|yo%~=LW+&R{(clUum51n zMUz?t@%**v-iG(5ja|S3Rg#+3S5IB%fA)em!#w;Bl>8lU=`*TY1cd9mg&T(yufji& zJH&k$R`=HR^z;P3ZRXMA_(5Pn>BCXC#1@NWsdYcp@ZWtLJ zJCn_Lr|o#qa{-kk$F6ST0FNJygY5@fLxb68=we$pt^AQMr#4g>&M4K{CVRp%p=+m#7BVYyiz#!%h5#qDm~FvdxPLlz49lRa_e5`cz&yslVnv# zUKz8g2~`$l=TfNKfavHWE`&})Iw-7r;_)r`tIY%fsfD)sfH|AtxySBKLJKy-8uDj3 z`D3vjVK>gtrkmZ7js<#xU$4FbJsWwskrh_WxsRu??>$UhX9?U&J5Xv$AEk%a7RaYQ z_2o}^6w0sO5SM~cnwF|7rZ`8rNbgSq;Gz@Y6Z3^slPL3BtpoD-c3stgym;J#x%r&kAfhj zF)wT6IKX`058GYYaUM=+lXK9tToc|ro#s;c<_YiHsol}^qG_~e_ZEA=M^l_6)ax%O z=G(+tMU-B}Q5pXyeJ!%z-$}X!vI+|1S!KM**CyS=E$9;kP5YJoD=iey8lEoV=UTTe%pSkg6)4tSw zn)9+wJKkCmW`rA%viZaJUhgS&1$(Zwv-E-{P$fd!Ps?%lKK}@#0aAJX+g{`jt;ZI~ z5%W26d?d2SnwZ^AA#0j|){}yKKV#;3GfBh_K6M>Gp8=sPyX*hf+ohFNgz&kjGnBAq|HuS?Q?F^dk|s`M!g z2+wwK5~4NjWUv`N-}n1<8mwyL`)NO)`ebHg;eOd`;A7p3HC??mczcq7S482=&BI5I z7vkNheRZYT#K&ZxzMLTDLFMPzD?7(SRBqWR-bpcay4Gp5z4Rh<0s8jXSsbEJf78tm zztZtyL5>Oj()-@yH5}Z8M>R9SX#*Mg4&B7F->3Vzzblg@ste*@kinNTFA4A}4^-EO zcT+f+0`d4`tJUSyl4mj&6_K^HTC5@qvnCH@<<*EciS5YW;fcj55qgfi9{qG{x#u}vD)kj9R-Yal4j?#aX z+KX0Yx3(C&)(g zu9r4btTy9c5sTq(xjxi!+`0dFKanoVoe(k_fh)oBeovL z3H{N$9Qim#++2=)ZI)kuJ}Xn&7#@M-x$aiE0^O?IcB4> zF5{qPOM1d8&?zkD@Y&Ia>$TOJ{kP81uy27S+dX!~PWL{c9uTQFBnaZacYmX9?}_EI z0q+MB5-ZCuu1k1YvTUNvfIOGg&7G~gB6LzS1J7yEI(!6GnCQB@$;Q-i&H#wC{nTWR zH>Be0Y_~86jftCRyy*14{C=Z8a03qGOqby#*}occ%HEyjPn9zixIK~OjsU>-Y7R1@ z8Fb%xp+3t(){jxL=7pArU9k$CU8QnBT~aJ6**wjEBj-pqbbFg;+B3!pZ>cyj8;6pP zo~Gm;(o%K3@>ppjlx93uY=XN5%zxr7c+kg7kvv&M6 zC=Id9XE`oQ6@CCJ_H>ay^zUBc{Yp6uwn(KScjlnn5wlKf0=sz; zOVhE+w=ya+~v-Fi6Aq%NxNyx3S!@9+}cT%a7Od^~!&n&V`9q&|5AsQWF8*Kxdgcs(!#wb_C5qORZ==`h0>F>dert-i*Tu_Y?j&MDp~zhi$-W4A?8 zT66PI=W?*z(i9Euj^svAa`o!_d(d!Rh-`xV!))8Hrog#C@IK*(m~=fvQCeMpAcTd= z=2o(I{01_AgPwS%=jxg%Cn@?@ymiTQuV(8R5`+rNUIvFVYEk>`%x9xkCMj7?>P{bx z#??r3*nzgcTRHfUNP~u;Ymsr4j~X}s#>dL8bUj^f-Lg~MxJ{clC^WVs8xktDlcm!1 z7$dE9GmzzBPh~^|V9mdOv&JzeLbZ}5tCAV{bW0>2@hWg^1zlMkKP>%!e{Ug2g8q?2FCDq$Jc;)F*7KT`UZZN8$CM&_#mc*W4_CFsnA zFw0*#Ohpc>c`8+rP9n>{eCTw%iPgRlv%0Sbi$8m-&Lu+eg5z%hk=`S7p)6(SJ_>;y z|B)>E&|7EmNysB2$Jj7bNvV(J0{CtG5z4<>qX|fE zb70d@y05V#-bU6Dg_a(-PO=2l)b}nW9fba1?E&J8le@v0&VoeB-5f@p*EuyZ!FMTp z7_L*jlwew?*x>YkhjZ@%A?1cjselZ!w*u#$ZJCB%2}Z^ImMRjg?2%Xl>x)F<;Ye}X zOK16{w#3oIdp+$xQ^y3Da&0Tqi&_9*s#Zgocz0Y|<}1;N7uuXOG;2L0>kPlsyhx7Sn z4mN$?%}|<`YtPZpyO-WX9u#ya_tP4CCF}Z^HD!@|m|DNz8@8%!EI;dQ8KgEuj4*QV z*|0TROk7{7@_oB%>oO!iVKm&epOzw9VN_rDo0eoQ()9CW8Yn? zU`7)ijt^4H*{~(DeDg>L-TSF}#G<-&lXF#XIa`(V8siv;To)f`AM4Sn<2l%HI1r^O zTQKj{>m^Zq(}ocP-MAZ&#_K+gUizWW-X*Ilmji$aD9Ju^4ws1P%qD|rv~99Tr`0qy={-GmVhTg0@gGh2GjKT=N90DZeLvYgV}D5T75ve>n@-z=oZa( z9l+t%%1Bp}nRXA=#?4S?Wn^UD3#Q-~vd!0yuV10X?P3ajmL;NZ3s2Z@FoJwsPhm{qewTyGVpFml^0pv zXBl5)nzUDb3;V1+P-h^N-!afCUV+Fo-oYJG&Ll?v{8Se8(#ClOcNcU<@!VZsq4pEY zAfp5>J4ar~KH78?c+{ICkJcPV+l=p{K9GpB+RU%eFU8hx+G7c~P); zY>7}5%_A$NB;1)y<$Yjnfkq%($IYV`4{v_DuGE#b$iUQcK+PT@A=6<-!y-MZnMX~u z2??LTawRrZ)l%1~yo@3yVL$1npV{l$s ziapHR#ga~ajOFZ5B7$idW8hmq%ygfWR8;>;gJwuW;%wvB_cIQ))3V{k`-5G@qTtj| zE=6%ACwy~XBC@$x58`;0@AT>@e5ud!!qCm4){_r=E=8wsUsQ>`!?guBhiUvg`HAE4 zeoPUQ^g2pjhNa8|ZX4qtKGsBcaRj-8)la)~U}DH#H*4aeEJ-Y`^f#oymP5 z+^7xU_{LypNzrfQU#+?)%9ia6O9M>>UdqR1TSiQY?f*3-E;qG{?oS13_kAN*z@+(_ zS|m(4QeY~>Dl#ei>p7UlLrB@kSF~SCIiA(fKK*4XrKOE{Bc)}s4){U5oNfzy?nAfV zn!pTJwSC$TA72fqrN+tm;OC`Q^$I$v9tjOND&0A^6i#zlr;&{|0N&(e2B&f4*k+jN8*YH68)lMEuAGC1eO z=n75OUo6KvZ7A4>#AuOtzMida^PJEn&B6xZHwuM=}L>!61qHBy!y)2tEkoA@| zpsY4!)@F%?g|zy18={v*wd)PXMU>x8^p5%Nx1&n_#B*Z98DE=e=6 z1ap^5sHl{deGdNZ#|X^0j-O@+iB(O)P(tQIR}}O^*FD}QdVk=pk+ESk=0pEyro{Y( z`&G&Pa$e=qa8@ijZ?T|d!OtWTt^f#MfAaGrK z<&|5nZ^2lU?kDE+l&D@zd+4= z*|RF=pV&Fl(rfkI=>@&O!)`yX>-;o;9#h#xZI7!MhirXL1o798FUR_Ucz?=d%NPfr z5yeZRyZ_z(WHJ-ERIH8&m2t-#@oof7PYwW%Lb>HKXFSR_MH4pjWQYG#PS}qbb}hSG zdZAQ=)$rw`_0QVX4etvg1wJ(dH&ugGH-`*W&W$esvhW>(P;Zbeb4)_ni!pJQF}>2u zmZ3V857w@DTX%;?KavEXKR0HcImb-=q!}{c-hL&3>U>&u7UsVyYyIR_v?(J;d}6mh5%+>~H?MTv*UTNg#FA-#g9>1=AwVo~LpoYKK>& z%bPRcfni$!?L=QD$^)^q*thpSz>@YzISxS8-RRjuOOAts=5lbc~0bB)GLe@f4 zr?T3W3iB+n&Jnq$BcZ-s&q?Cked!*`en6Yx8%XpThlql#8O?lFDU=Y?X30_%j`NWs z*d6hr@L`XZB{buL8cl6G0Q-HoS%j?26Jp+49DAHdoY*c3S}a;Q1TQJdJUsCUE!`ZO z=?dTuqWqaq3*T`X&6^vQ!=>lQOL<5ejJK2Cgxv<(x$-J|UjOF8>C?(DbF*3D-q~zm z)Ap0$@p%byCpQl>G+&D$JaqIS;mtA!uO>#v<;6vLY~7JX<5hRfy>fjp>5B|T;4E`n z^S-bW#ObY($>3X~7;BAuIicDKoy!`sv&Ttp31@OfOUB_&v;C#SAnO*sWLqE_$f0cp`4jfs!FS~h?bl395WH=<}=;zfdCO$5W^iExs zb!#c#>)$<ajKlq_8HmXWa&?hvN*@a@P;Q?|(2_~SNLrDq_`6__lOiN_(OFi1 zIWy)v_V8TnP1qjGfLPJTS^1x>@9|R1v00`(>+k~K?+dv~`SFHM)e9%Kk=C@^XZ*3) z3dxh>Uf}ph0bC4PE3 z;4^NaTcjgzT6cNy2uE8v+rXs@>neW`P20l#o0$^dI!#@0K+9%!D{6A&aWoF0&xu1B z3vs52j$_j8KoC*-lr7*NFz185*DA0Wch=kDO578~^#6ty`p)z419hw zqj|KB?|Sb0-goN@#80Vg-P!EF9Rf);eu8g5y8Lt!^QG@MRq0i}!OMW`R4h>}!4ON@ zmdgK;q2HP>BxTH({5#BUX(v7|oF!*rT52KNDXtLzC!Yiqc-)19LD2mJ!lC|LQQ7m; zN5p9Rv#!eZ=MN$ZkkITKEozdm#1+9(g%SN+^Z4<*wtA>A~kM@Gte+xJ+lf{Q3J_cV?lhi5MmTz+@JaWCB^|JgB zKi7mNZ(Z<)VJl;OLvaE3$KzSIH%WR}-GzbNW{H>^mBvGZ6ZvoL2J55CA)oXO)UrxD z2-JbdfJ{WKeI=jOcLY!ULS#nkUK1hanT*_z)}X-??L$-eS;4D%X;ti3mFS2`_3cN& zuAdaQzxDMi#W@VFZC_wnDp&M3mn`vAfAZUeGc!ZJf4}<+6mN?)wkKa`eea`c`Nd&- zSOk#eyb2cfiYZi=h4era*HgBggb)5{Ps07@>LBzxvROlmg^QMI=xa&Dk9lSH#t1qco`RcA^59(%K|4If%Q9k(T4L2;AefHd0X18 z2NmY9&PfcjT}o!Ze(Rw_?=*vvR3kb$Q*!oIvL-FJ`Ht=N|8XJMRsXnYYH*g_1MW!v zdeQHp``SmnQ<0(f15#&>QPLpR?>MsY12PvB< z%48XbP}exr!f0kC-vW-x+LST^1{(g@?WMpZQ;?PboBXS#OEeTn-JX2(AuU7`IDD=0 zd$V8uMX?&Udv#3UZ1TkGmw|w=j6wx+K~!)nnz5o?2oO$bvA37A9bs91B>0y1kACH_ z4Bu-TaVL@%&(?aLx~m|+QGT(^iN?X*FL!-Wjf6M9J!t{0PU2dQ5d*~okDDEUqwio` zH#%rx1P!veCCsPzM!)})C}NkGjEPG4QEpTbcK0Uljme5_k^ve{+<4}1xuX5x4x znp}F(m7#PXHyw=#H1#@}b_V_$(!HBiqF!hT4q>e@MpoyG?eEbAY%7D zAhNl8s`0k)h@jJS6P7$*ved)>_Otv7)A%8>^)!a9rCuhM<>S5A+mIqXvLTA05V5vB;LyTZ54RZ0Bos`$X>2-)%Y480{O0WjCzZH zS>%Y>4)ou5*-kj+%$uN(ltBc%X0q$6{`lCgXxlTo*y) zp2Y?jMikn1u${XjaIRKe}=n(9HzfmZCGY&cs>$+TE(oyM}KC2%Qp+quL`sg&^+8Fe`%LKQr z&?#3_D~GWtyaQUOd!%3ls!9&RL7c^n zE~D5}WjY(RReiSmZ!T>nl$w@NV`_C}*t1n4VGZvsJLGZ?K>mGk=&Q8?(>`^(H8=ho zmYR`|oj5Q^M=!3em2RM%K3-4VA}Ed@l@4^ z1zypk`DUUb?bY8Hj5@XxHGAF)CBGK+qf3>XH`_Af5BRq+JXX31z zlOj?q!b!+RfuK~I@iz&>9{A=ktiJy1K*LE1J6K8TyzV$dy7Q&`DEUJH0CTw=jf2<6 z8Ka9}GM*~XTh5O-%{(zy-ZEv9vZHcS`>0TxX03A_=}9}2gA{f|Hva!x0Fq+%HX*Q? zWQMjj%cn9U-Cy)P-b5cIKtfG`*q+JF_TH$t5#d~GeU*FMPol!qh^*c~mB*=#I z7k-|(z|RWPKn9wdzwBoEEkNpOz%?`Jv+2K&qHpNvl199=k;zI+uSzH2_(YOAR77#A$=}TWJM(bGSyYtwT5Rg*i&*5%CdxF8|nAG#ahvnK|-jIN`G1;)Z z(q9>|5xTLkjh3;G=ZaVxC|ySd*tU%8dtlOuBtv&emeniG^qa+8J$?O04#AUwG`6`D z^y*z#L*qJe+!6PAH{ky|HqElkFV)zB_3yZa#$Us86?CY#W6(~d3gv&veCyYJYLb@tWbyhhcD-F}f1*sFcyd2xL)U+H=jt_E{!i_m7@ezFSZrs99r>L>+0MCyYLcWQ zX)eCu*klU@F1iHlSWdY@otMXDvH?r5`Z>g6mm*5PwQLoJ#@2 zlrs(JvCn#GIJdlJoEFXeY#ljRPWj;{SNJ1mfrs9tsrFWFli6H03I&WD7DacdP| zEm4mVRMw632pRE5OpO%mM6U=L!9XpFqZcn_r9TR)qI6G*&-hhA-1t$aq%YNN^sYD8 z6`=7jk}(g^6dR4HJ>arb7ZPtPSHt5=QDgMy?(eg{s+#fYs(8(&NN8x@i?y=c(~k7>B*jPuTwONq!1S_~*_;YuDitMS=55KSmXAbYAGc5xv@}y_+Mi za$B2s4-}z~2&FiSQgXAxzyYms0nEL3RkNLt`jFfzlc6gs8EsVw3Rn^FNm^cT#jOtK)0JW%sk!tGi zA2#Ku?#WZAEtF}Im}&mqww@qM+-+t7C(@_?6vKtzki>fBp*;axl`!u0p)=JlKD<%s z1KIdl;Q8(IN8`EZt!|N&I|`c&-ay4;W1dD`HK2f3)@aZ`j47Nn-c*3I#5P5n{wU=c zDI*^`J7KH5-y{^u_}D=N8ys>g=GlO;x*Kcdh5zhel;=c<(&r7aUX-k-c*^G1ZtIBE z4nZscQOPFtb=CdmkFw6Jm`_1cl3sV0p0?CJQ*2^Qjyas+ZH%RQoaORsJ>F~3)lAi< z61MP1Y?x{p$8z(}Ym*_WyUmqKOYhCCMP0Ch@i`I>Ejpmk9VoC3ac>Gob%P@g`ryBs zC~f)wTH7yffC<%VQ{1ZEBE|OO0N$>vDn8^=xuZXvXR~_K(EzfY6mYw2?@mM6w!!G! z+RL-6$goFRay%4h*hO^aP$ekqHr2gpfiN9#g^&&>HmL ziwgv2mC!C{I*7iguhYiY_<076Ed0R1jn5RTL zb2&k#w4>c%e+}OHygtfkOFpML#cFc5o(hGCcXW%iDHbf=&(hLypYd%q*UvS+L*&^1 zrk8^FLsNjiJ`u0&bY#gj(N$iT@d9TR*q-=z+b_lvaO2?q+to34_0JA6cAPg1F}89F z4UPCl2Wlq+li6n{+ufj9^;$@Oaf~Wy#IP;U9NhN)?!n`+&ycLO)^^Wm0bZCPw{*N9 zzW>`^$u7x~!#gNB^;;Js0%u zuy8E<@5h(tKUlEA@VQL3{q(zyUn@AlWfrDbL#3ypOC7Z}I!CTsZ&R|TQtMHci5UT9 zK8N04)Ca!i?hCBa?2b%#r7JBZAsCnUX{B8adE!f$Os5sF4=B#j>B)Xs=C^deD;1ss zrIQ4V;K)&cQr(nkt*I5rA}6ph@4}p80E~P_xO1wvTV(o?VFgkk1`;_(ENSd#89QbL z+0A{uQv}%DbJ6lzms;i;PrzS?+~P==dDXw=;semB;Ag<-L;GDbqRuCBb|ue>IPK|!}H6c zxYHUAQc%$+wKtw3}wE1b88m~+ro zaq`-*d;vlF1m2x%bKXaB{53fnMOg=FRX_lCDGr$uT_!#qARNMA^EsBis@ z3zSN2FvI?PtKhJbG5d)x77sDfLh)>gTq@~R+Yzivjcq#LZ?Do$MUE)>p%o>2xws;z zqvh9GxOAsJm`2;ImDUlbgnwK_Lwunl?9kV&VpwkoiTR$IK+NI;{6OZ28(WG87?Wjk zfiWPj#kHPOfYavA7QNLs7T3tAh=~Id9@NvDKfm;TXX` zLLW0_RbE0M(|&XMk;O0OL$chDGZ0xJoz$iqiOC4#b0FyGY!kW-pmLuvT`F;eS?jC1 zSD{tU=z6vGP*2(31Mi;7^idRbNrt!~2+HkAEd<7*_N-nH_0wyh{K#3uumSzQeejqx zSvp|?RpBj+9t=&*`))8*MWJp>U&Huc@A`hv>vjrUyk2Lvj8YS~(SB%s{G zx!X&phk%CA@1kY75&(71%mp)kJ&IPT#uQ6E<~b4058AsE@0CxR7D)tCngWi^PM>FiD=qhnj^z&JisddFO%dEa zJ9!FG9A|!@B7Z3 zfRoC*d(&%hJV?mhVc+7>^?|<@&JpGeV~ibUzSK19i;V6PbZGYyWX9R=?vDKlMA3}a z8GhbpO65WLLy}0RT|e;u*@_aNLO~`dbh>Ux)BXx!WH2Pfz9{VvKc^@E#5d=@iJrDP z;=V-0$f7xyxOXF;MDb{HyMeE6!(NEfQ4A|X}4CLp>#5= z8^32Zz|6H2%z#}z-P<9oeC;2;XXi|${pxbRdy&#|kUGb`0rr(gGDOHADXvjV-+|q-zjv!?! zEZo5wkpp=lX3&swpPsWlkQ8)MdbHB18!yrIxM+scn2hFs9GcOVA?!oU3Uvd7eG$V=~G)*5y)_ zH~FK@{v+bz)XP-lnylyIE6JczCkFGCHQIuLgJo3#szX_wmlErd1Sz^ z-y@d@-{P%EqA~l@=U2cdNZy#+nHSX7d4|)>cc+TS3I}elq1(I868=CcF4ve(o&$!h zqIRy7%j{JZiMY03JeZfWHoM|*_0a#{o_dPt`kFJiwN9e(@+XU5V*#u2=2|!|I!9j1 zB*~5fl_P(WF`bzve~D2C_Zdq%u%{N>kCH4m9%X0s9i5w(FuM7{rlhimPr3%yS|7n5 z;CTC*EEve;`c9+XR>KkYM(>ObY%-H@l0mJ>)!$(vS$pfAotb+;^gUON4aB>ae^C8b zTmzk+0S*q%sy_buCT4#kqPaGr;da2!`x{>S(Do~FYVDLe*9XuonM7SQ7`BAFOA&d6 zNiNv9L~mII20zxxxARsBITrAOEH5cD@UKE^gR|`pOjPxbBlS<81tV%?MfiH{dQ`Y zY{T+wwHNn^nfl4yz&?+=qXXO@e&U*aeZP@SIw^IC-t4wSlzF^NXWyp$=RHDJ<@q=N zKF$EyT7Wn(;lRRv!A)<3xS6TLbN1>uGz)#P0|e<70_=T4gS_9Q+5Z;uvPV>!hW8K| zf0`?%wjMEZbon9KdiiuZ9ViTVNjrWS)iS5k@q_XtWA)0Z$nIC_87v-J)%Q}`dx{g3 zaXC9(l|mB9gZi)mPg~J;sa{Tz+jgciV4)VLF%43`t*6LweIL~Tj+;hf8+sjc#gIF^ z*L{WFQWt9wYNMl4Oa7}ZUMYOM6tBKeA~!o>_4ag}|9k{S0pF8ImGM%-dN_0eiL}iH zRnTtgoe`;b-fNWHpF>{GAk5=6O)MFL+>G3Pv4pB!&6CdZip!ZpdbGP;WX&3*SOXnpX*4>b}!raGZ z2HL?*3X#php|+%aQ^B^F;6SD4ChNres~*f&w{JfGVBNS!b|pn_X>rX!0}md8v+f*- zKL3~FIc<>4Dp|ku*j*twb*R-Irc+un?sOLq$vEt(t4|G1L75)qRgQ98rOYHUch0Pv zb{`Nzhih373tVr)4#+#K;6;%wq2!$WcXrMK`NYAyq@qM=bf7qen{S(@-qvO&S z`7@EkH!9tqhAV3Q(^8yDiUI4Qgd_oFj;H`8Qwr+t<;gkH)` zPq8qCW>uQtr;7l8rYmPBjvLgMTvYq|S(|&GpAMwS3uA{SDtE8SlT7WAY=re-(1|;e zC|z0)5PlbPQO=7@%_%Ppz`M48Rb(DEj3l;#Adkf4W%_KDoOO?88M!T>I+z3O_uKK5 zUn$^vrs40be+C&ekS3bSWFOQnkOM>Ipfd;B{5&cXz(HvAR-sAG&iCZ@y?jWw2yEIS z3mLoYYgVc8XHJ-_zB)fF&t{1a#MCf7|pFS(^}>e@A^ z&uQG2i=bq#G$u}&Na=rf5xwqSYGQ0r7;v`wC1Iv6qLZn2NB|PLpYnYYO#{6lSWF{b={=-QHYYTxpvO~a* zu}i0sv{y!(k7W!QI-)*h@dz7LX1%woXmaps#kXu3;H1?r}m^t4kX+_ufOi%_rCv|`p3)GJbEzGLO=A@U};H;;a6pj0F4MYAF z`Afu5ZbtW4mv!gF6#{y7N_c2d@aWMg>)tA5#b{9;8GWXXycsIWJbRvLIGOEb$n`=p z?XoXH>9$iovdN4b(3EzkFuss{m+tN@{+s?3V{ongiboe4B2>Wz;zL&Px}65UKE$N# zPqddvMBMlDHu+nAi_WR`bmItd^n+Lwy@30oK)N+22JU{(|AQ)iy0k(g-J z`u4H{rWLU}SzG~11NsHu32l}l!tPOhQ@lTMj;{Djj=`3m&KVRkTNNqgS`O_?$HbYN zpFax94xH`o{Q1M@SOWXl$lW$Gz`%!cu<@saVznRP&DnnE-^U$x_a-B`Jmwfja4{S^ z`KgV@ksEuo0cY=Ph6ay}zIV~|@`T%zeJ@iRNlz6pQb)j6))bV^oktXdpFmfi^c4@a z6$9&$FW_5zjKKcP%^T1-hIY?&3jMa8|t8|-mC8^}o%L({sdDoYd zw;6w<2Q3pK5du>!3O8Y7BRMM8plKs>kdIn#kgNG(NPgj?-qhu;FON~@F4aFQKf}O8 z2+X@R;vIH|f-2=+EI2|uLb;N(Rc9ri>ySYIm5?`C?^6n_BMM@naakT+hE7di<6oOZ zdCp)_2>)KcordUPnp<4a-eC=S`eBg8V&({M80+BUTP_=Bgc9}*z0$(=4<_VfnN2>r zi;}iI3Y==3qU4;LqPLdYh%xx}t=-_)VUWrNEr9LTDnqnp|9z7U#&z)UM`28?lhAbA zS+UBM+r`wrM`ZO@lso`}=~ZX)%LzUSCj?Cx&vX`_u%5Bx5te`Mj)A|?=|Ehn1f<$; zoKiW(Rr1%Z)s$tTFJsfS9n!VKw%Ctw4|noZ=mnZLl57MP3^3-p$k;~hh={Gyarchc z>eX|z6~HHegpH?t-2<&M*I7fyy&iyZ>oe}s2PS;d$C>EB#_muVf0w;7P}x*-%T`J% zj}oitoBg{d>p0o*Daih;wgXe*DCt{TXEc)ls%PjOmz<{$mf*nTI%^*OekQz;Bj&x! zhX@?Apx*UTt2I5Rv$q)*p7OXd^+I`Tyo=yWN&!R~j~opZrBzr=D=TX34qAHP4%rKM zx9l~N`FYv~;o!WkQf>H=g*!%36&$%`thOdMkthJ78OeVgxt9G5ARr>793EPH@#~ea zujsFMWGaDGSH%_QVOdsVo+C@E-dNukvh?=ytjaavDdLXlB!ic)Y3Nn|_sz1`;$(9+ zs_bQFF3(E8?$@obN_iD(am0jE8r=J@HMk`GO8c&=AdXKLwp>tg4_(wPPgSw581vR_ z7fGagNg{mle;wWuNuHlcYKIB&|8&0?hI!QiZ%!0HWBpfkNAf_vMv>dT9l34w(W+UP zCSjS^;6fHBCT@G_{4sm5SI5{Z|CO+6@`3=~=x^iu_LIX@k!MFzu&VOTyv=Zgy(K+e zIhB}9QQI?_^CQ&!qh^kg5Gxi&z5)(OQG~^>2EhMV0BAw;G#;67+5d;7a&>7tA5w5- zilq;6l~iQ2_@LBjzno=)OjDz*dJjb}=y*MP4Bc2&Z)v@a==>ATHB(ts$Hw!`{}J1} zcZ$DX#3Xq@7}w_}T_F`cHTspR&``yEbZm#dWJGFE!P20J`iYWx&Ok-`>@eFEK zKgY2x{HcsQacwStkzG&opriUglr>_A)9tzlp!?AllXSx?8F)kCtM-Q#;B5{awk@-f zb=`}t{KSca{E+W$18i?^gG1K&cRf)>DRCoiR6Ba6m=I;%&KVJGVtS&=&_UZ=Gnd?T zIhw+K#r{*j;_!t*6!` z*8=j>T-ay*ZXLc{YNwt|J4#dc`q7w>x!NCngb$+P=bHio^YD}R|q_o~R3w}(J z&AmuhT+QrbX$PRtFBvH~|3z#9U0Y(hTl`|&)w zci-2`574?qj+{R^VAmU(E;6vKy;(^PZ8X8ev^GXtDf%<_R;>3fQav(s+tkFsXIgfD z>`@6{W@?JsKQuG_kMnD0kx74QT*EWEin`7cV-~3_bh0}*@M{ZgGz$sir=gmWIroh) zxoyazpn7G=pSjbUmyVB0THc7VEEBg|Ml{b3NQ3^F8?DHV$k3%-@+5gQ|2}!_TaoM5O3pLD!fn&}dDywg%3U7(PYp2>!%ZX4NgduP zs`%`0E&QC_>Cc`TR<=J_Xe+Iq3`A;Yp#nx}fWtb-lRlS^eRNdU`qDCg=SDJt^^*g{ zMScyTh|EvKbC8zHFV&;oeX1RHmBuT=cH04xNQr9wV0VXdmBIj2blGrpkEf zty4jm18g4~A@L@{Uk%F)90jm|CCZ8jd3eBgTx&*lW0uhPev*B>yzhM5U-1`?G*z4^ zq+_F4)Q?TBa7dP1yo$?fc!ip?!QEMHRp`9lSat7{@0ELNi2_i#SSA5mX;4pFty(K_ zW_fb>WVwfTA(?{0R-Sh3?q=d~C?RSJZ??+3{A0DAVsfG8Wz1`;fi{t%8rWu4v>yb| zFT0xQ_8;VmGS^)E6f=o-dv*+CG|T5lm3eJb=zn6|IXOM>;9ynABJ{kD4T;ko#a0U8Wr*1 zVc#B-SuQ{~vO))iEXk2FdNFBAvYmvOYr6CV^sD9)cl^&}N5%w>4#LXEP0gWG+RY#J zZlP6m|F5s_j;H#4{};(DBxDp3LRMrRju~YoNg3xDam?&+;+%{~_D)uIWtEYUJ&tk6 zI7Vc1%;Fp)=N!lJeR+TW`u+36!yg`a-LHFG*L7dl^ZC5q)&oH-T-L{KQqvN!s(-=` z#^L}N+m$(gCxz4nLEKF#Zb(ml(f-={InV1myT)y}q$~{ByN1(NWW(+d+AhNlLWi`K|wOI%~$Cp06cDmnUTi@Xz3)}eh=fioYCe7@GyPnrI3C}ASw(_ zTa(deRvH}NlXnA`onF8aopF??J0oVVImD0%CN04o+D!V67>MpDC%NQxcfT;VkRB6m zs&t%Y6k6nkpOR($F_5$aklF2~A1DHW>}{0nWXd|VO{>5N z?p2siW`?EA!-@M%A>6FUg{VrSJcJ#ZH`tIBbSsi=cTz>KIi#4#RabT`3+gqYzaaLCrCm}~WG?Rw zve3i>Mb}&5UHYh}G6w`J$d{=LQfX+VPkCNjeNPt|S~ayjQsQHFqwu0%4Zul9&*?6V zyM!0)@u+V}__yymo}}QvFxRCDBi97{lQPV*53Xf={}dy0@vjSprwd{n%sQO#{j(_c zlN-@$Qa5+pMah2S5j4Qx(S5*{-ofGE;mPBkN#93KEf@Fp)cgi~jxR(Jg@fkO#%Ys{> zP_r*6@vUm|6H~IJpT2$W{ms1#mp-=B>g;7yE{Tq4&|K*5S}_?dGPa9B1tiGx_bN;ZdVN1(tHvMFJ93s9pcIW4YT6& z(wSf>Orf@2RZ9V!Ez5Q|*oqwKUcq6*Eh#Z!{z--H!1JBk_vS&>w&m;smbcM~gnqXu zOdD~`7ozmgMna~}3*E_}D>c9uBSH21zq;zG7B}eFcR}qvV*R5r(rYWi4e|6LNcQ`yhJ*? z_Pi#zBya16D1da%AyKKj7eRrNYShf16Re_cDO@h&qD>xk=vQTPZPC>a($wcQLpc^Z zTX;_mb|M$BulY+mK8jY_cmKjCLtYT4z=AX}Ym-^`y^6eD8Rt_m-UbfzkuBB>{Z2BD z)8w9nrSqA+a`8$B_ha8)9g*2H<@c6N#nuW~WKEV#ZbjS-a`T{O1X_RmY_u*dQrjvF zo+;# znFDKA{?Yx}U|&J8)~{mAhu7Nn3~yJDc|WmevwaBY3)^VaD5UCviy8^c{l`yB&AQ? zQx>K!cWoU%7u9Qq7N%0Qy?k|rCa<7@?ftn)98HFk7gagaYkvRh8mf10cK%S$A7(yr z;}?UwDa#oPGu^|5r_1#yYU&c4(V4wMFv`ASK&hush=O#v0P>(94SVNyXnzA$>qv0p zS?c_)!6l8su!h6r{V{_ron@+>L9bYU+UIf#=_(J(H@aV0g2Y-aX&s@AhV!5kZT^{T z3jR0zw>1;p<4=%V_0$+9tZ4m1it6tu3{p~C@Zjy`E^Az5b*6ZPBuQQ3BuY7eh|>>r zAUr>Jq)Dz>3Sg$tX8wGgar?@))eZL#JI2V39$t*eLV28)LeBE920`g8=joAwwJUyM zLKRiXWk$-2JtBbmjH0mv(0@1#fa8_^c(9{5Kb=EaW~u#FKI8?(3(eY_+B_(s-vv?; z5x=oa=`et)*S6mSo_y$zvp3YdZkI@;&EX`L&ii)pe%Ni^7s8KMObcA*j_8O|oO-6Z z6bv`kL@Q3vf#W+OlmdO3)mTUV{hK2`c&Nabkya$zn69 z37(1rqnq+Qwn|?>X4*9#AV{c9hpm!JGjZ;~58K(=43Esq@4OSaG;Ih`c=ODm`d?A5 zYoUTZLrRo76@TY=jLC7)zTvfTz4w98zha08wiwV(*;K;^y)83!KWEgHU#6l##A46M z`UwR96Tlx2>Mnk<7i9fz{d~clrXfc}rGa^up7A`^YW*r|Lp3B?JsN*;{#`zE#=o() zrseO(1iL?u*G#}(n-bo^;6(Vo8f-w-hUgbl=KhN3h(Oo;Z(_$N?%Y*;GQH^W%lg9# zz2Z?l!~yO5G003o+(A-f!8ODp+tYAwMN#(8LNWkf#5A{w9^guKb{E?$d-rP-JOOJ& z341 z_?-GS6$^=GH?IV_N8FZ#ExuW%8v!@d(m~tVJm*!%&KOROtjfOYwxl|K{eZ9Tsj*4M z&l{t^I=BAvse2s7&GFMfD)r77{QkBhS7`B_lGIDrK&AHWHQkCo= zYfoqty4NyuR#C-U|QIp-dZh9ZVd=rGa`MCK-Q=WMwAp6x4!i< zMgbA$@7Qo(ed}f%C?eVfG4mXBl{dhzT3X8gudm~$k}$4?w?7n^t;RJMQlznCd9|9) z6rwO(UB*c+8RQ0c85nt0v{~LYNm{0}^ly8*jPK=ek-v*?r}&XDuOLC`zstNL)-{X+ z_oe>0T#U<4R&f?}D3B!84c{#bj!6odj0x@hYOa1aAZ}OdlEqNQ4LO;6Pl?OBql4 zeKqlUAK16Qw0Jg4P6>c43Kl=z*o&m{f=TgE-mt=Y3^*|}v1Mk_D#BH}Z^#`iFN{xr zNme>-v+uco`PPA|0xnrbuUIcN1o}QjK!pRmfjuahbB~M)_*b&6LhBb|w)b|(%EPdR z&4beWJc3KAYltfpmB>bYZ&k7VL0}Fn8T{3qa4t@i3Oop!UYsE5M_z7CBbYUP##J%G}MmW7vr%q$TO1#M8R^()M15 z$za|4k`q=k`CZgyZ^vA^fF4hKiCZZ**b0?>_%rzNQfjY;elxa;^q{p?`?o<Xw08`$Em#*dThcn9E^8Ca=W z?jF;Q$|kIq8ri#(j}t zDXu%xBJslMjX3^bmwsQXpXJ68K&pUVd4KZf!O_2lOuN3!?0e(t**4G5u`twI-};qJ z1C2Nus&2sUF>+R9T#0|P_JQ)V8;P1Ip?Sv?W;F6}vWxtuoq9&-oXW)5NR0S-DbKm; z*Mv+fAhab@+%SJ3x41gDJkR*{2x}(n>AzP$FbfT3aV(W`*wrY`wdS}U(&Xcon|~tG z-hWJb!m?jO(_M*Y_PJ@6k*7I|V?WRN$@Fzl09kgHRUF+}+Fn+Cd-?aHUFF#v%4+ZT z5-w6iv*LwkSB0WL?2-GfW|?p7B(oh20U$rw{));)uT6jxRZEBKa{}4nXbG%NzL8!y zdOm~eb6?f)PCKe9=Q{7b2q}F;C^1?H+JAX}AB_{+Xd?_x19*k0A~ot$55l!KP=&zV z{>#)0Lqn2n$CGMR2`@Ge7Lp;qMpk=y7*)`RGxnX-={C-jnj{JwhDf z;Y!~6#F5+2@>j@jO}NJr3yYSVr9%X=RkV&*^KTDtj%nkjk-#=!xQ zE03ddmi&y-dwGN`#9ltmE-`rHGEv<&)_Od~!0IZ!c^@dRX#|7!&{++tHQ*0q=v_%) zisRZJ<2u-mtw&Xe%2l_$C%<`ijauuUdEo<7{VgJ0 z*Uf(@#C{1z>0cl7>SjX`P!svCiP3U@F)x<`{O_cx7ln*D^Iv^P=d#JAz8NGN;YBjZ zx(W$0g>5^9)Th9hUnwk$owVbg^9=kl$ZY@6^g8Fa8M3h{t#!#cVEU3b$ShKx&n}O` zVN98+N64R`6nyi!EPwqnzi!+@5;n+~;4kU^xSnvG+|2m|yylFx9G=9U8{ipC*Kj4| z@KUZ&_U$_o<(8*|R}Ns`FO?!UPqLDQ&N2q=6@Vg%l=A+18}aAC)b3=AL?1UaXUIUM z1nyLT9e8(6%68PpjyBz4r09_G^%%Uzagjf!%;@e7L2Fg9g-gQ-5kvK$%exz^6ZV?J z>I`9f1$ibS1E>AGM{`{E{4mW=G$tmUa#rKd~d5HYxGB?9E zd__RX!ei4^E@MIJ-zvl#cdj#SXQn3npily-|ATw9~ft%_>9-!W-a@>fj=YE88V1NF9qSOS;toNa*G_ zO+WX=l`B4$LPH#WJiok9s3r9+NEJ~tEAve6pF9-Q$(6CUa*pg7>G&MyE%SFT>|Ll= z9$5)VnAnv3#>4#xMWUa+xiV(r;bGWzDrA*%X%KzOY$_1-^bzKX=&}7l$LsJerOSmz z%(u!*={-H>9$Dt}g%3NN*Ew})$X4k3)Fan+)V!{SVOgN$+b+7==#}di(cni ziH&;(FKKHiGLyC&BPJR1Wx=jCe#%gh*%0RU7E4HQ2sU{7FtQfg@LBPM3UM{(g?-Uj zTXuVqA+rlZ7c$*q;F03t^Ffy=1gpsP4A5$C&#g?@7)CVMR`0{bEV%K4m_bWXl5}eq zUrS2YCm;p37GL)DGmHA)9eVW*B|tPWHkuu|p$aOSGG3@Nt;44+BiFqVmMvVl-9z(}h~2HNu{InkXH)UWPn%X$$2lr*@AwD)=UvoiC632n z8?-q2qY~F&0BRSxzzCz#$B9t9y%XMo{k0mMW9wKVbqJ>>9!8kmS9m8h_tNvg`+>B< z|4D%g_U@<1At63%r{iex;GbgkRkr#EAEHo}l~iwfJGl%dJR98u>#ZS6)+-B)oUn1= zidG=&#wzzfUPbP}2^yL?Ei6S5j1#ofA7Q!jl9P#!l&+cjo=btHR5}>9c7Rbdo!tJx z%(hIpje_S}dor9$xc!m7X5?IM#91cS5l0m;rbYDJEc}Vw{Gp0bJ=z*_sQjC0BKW}0 zDIBXlQ=&DMCC_u!o8|tgO>U42fny#dNclwg^D`pjqp!!<^!rakB9*Dfb9Y1#ODDV` zT8IlTavo4UnPwIdLXNt_0^szzd(yNxbkLfzg@A5j-CG`Y-HEIFGcBfl|l(a^zwF+0GA7A`WZ`!pKoW*Z5 zgiHRU-g24yUMKYM)e_HkA#jEC5is^FTR+cvm6-+A;i)`FSHa3fVH#$DI#s-uo6~$q zVp)iUr7Qq#zu(h@ENhi2yo~eb^*4p>;ReB5=Oe{d7&(!**wyvrLt+iRk*PcCeb8Y8 z-q<+L;J+K)H-}Sifd8^NF_Qz0N$?ZLK5B${d~lKlw;Aa@JbHay-K=fk>ogtiZRsV1 zQt-gvodMetzu0P=41pW(5*{28dJX_NIwEl1(E-0*=NB$KuCT)CwK#t(+qT6(yj~Mm zeh)VvcpF42Ls(az#SN`kPojT)=2t2)sWl1#l>$s5Sx=}^=C?!^7)=(brO?g6J5*x-fEI zBKECIUTu4as0*#d3ds=!4y56wC#jRJ(&Ti*|6dv) zGCB;D%^Eo=(>^86^v!Qo)3S+p%0Wh3m0E*#KX?DNRrQ5?IwHE0wbo+)rhLAgsi!=o zj{Fe@H_g%aJAKB9r`TV~dczsJhhAJQ?0(f3UnoHIGSAi9TB@+(q|P>ce&h9U-JQHt z>V047+4q#qBe0^!1~=CdEoSEoNBb(@nhD7sMFGW9`+l_WMVcL2|-s{P<~qRuo1$ z_~74xbzWkgqQbKcfvB2qePL0s=Sng+bL5`~bB7$X?*cPM9b7f@1GV#wN!_!?S<RWjY%HQBI6zmjPqR9p4~c*+}wS1eUx)}6}o4?>nGeuOP8%rz>WOz`iRER4(VMboXaN?SnCig5E* zV2wB_6uwNA!FaUFSdWj;AtDw7rb>31|}v- za&=UUKc;HvISO1)b$CKk>(kP=T_CKXdEvYi(>00HN4S7iI{9^9Q9ecx8oq8I|(^&+kPTsmN>)kx=V&k}_Q>~p4W(CL1!e8kGp z|7$}x;Oh9d1ExqxXVUn=0#FBDe+>p|I^3n=CM*_d4;%aP;h*31)B>WL-zVA#nvz9; z2pw1RZMZj%NnvS^`A@ZgvC>`?LH)*p=xVq`AE#H>V^xKO(|-v^C8wIDD+}u7W~$cs z6(j57aJP{Lu8RUtbg}(Y$qWlGDrqm+@@axNSgHhc00^>yX*#0WJR#Lmg600nV~&#_ z5X+N?o5KC23G>YgArE=mq@6?jY=XYms*k0onpAqYwmc3Fbo@wd4IpTwGdk{fwaako z{h;)U$v|bBl|8l(c!L+bo=~pBWKbSoY+~Q?RUp_I?%W%3wCh+A^`Jdsf<- z$UgENTiJ<=n0@=LC1eUeZqg>?>71dy)MucYD$0K{-*< z?<9gl+{&vTQJ5p0%L}Qezb$z;z0yf$yiL}jmTp3^iS3pl=ZuvmmU2gx!<3>9HSUe! zSF&MjQ&=Y3i*2Iu;1LOeIHQ>5<&f$3w?0&tvq^5gE?6CmTpa}BBsTaNS*Oclu(?EdgikWXKHx`d>KRn^-kcb~(y&1))y`VR-Z z1-v$X{h_xRg}>EqcE)nEp0oA`*E32bI(u2Jb*)gQ|m0l=l*mL-}_B`JP;k2>sJ?Q3q+cTDa)2#Kc=$NW*?MT|FI z?zTy!1e5mN<)LSue~7$l?znHJK{6-WGX}?vT$Lu^{np=Sw*h8#n_CpSr*Riw5Ez=n zl{^)g3L>T#0kvV2ljKv8z^`I4c^5r8l@uO^+Ht0~@4B=+cwyym@}miIj0^&@r;;A4 zq&RB@?*#Y7bZefm0^;%@`g~G46N@O9)BEW5HJtftD4tP?rc`&3>8Vh3z|G)iNY(6}|HgL8^XS3ce15 zFW>toO&JycmZx;s<%SWX%znyG9l#nx-SMxun7ADpyXN^``S*R8h~Y-j?5_Y(a>fTF zxE3N_D?5wJb83`=2}TJ z&hYVLZVrnFOuP-L6+?Y+-?9A)Fgfd5lJA_*9}#i#;y;%&k%NeQEt*qh4hrNBSxjr+ z@6L6k*#n#Mp6V-{rh*r=+ip}SRw*7Rq}p@d(}7L$H)?VjfmxQJ5=v?u1cxHo%QkUD z6Qt3PdzL4rr`(-lM3umwTGMxWdB3Zqy}hA#fd%^N3(ns|BjiEp3ixvw7Lw|X@2LP{ zW=PgFP=>?*YJDKJr(0^I6HZs~S@jhiCP7y_KsVJ>VlQClkI_Q%66?wh3y)VTPhwn* z-;eV)!TTL=WF(qcK%}BfGIi5h0SP*+`1_WzmN-5gz9eX!RI>G>cUbmF9W{JdXr35~ zDRWh0ts*TzlVUC0qHyA<^wOliVQ>It9q2AJcr~hZEO<#4Pa8T5X!{i8HebJ-g9{VR z3)J`*`1f%HJVL7Krp;Z-kl*A!tV9m|#@crP!P|Tb)%B z)#aW>Vam>w=0^pdP;n#;zrM!&HTRvue9q$=U+A!SNQ}k zZvX03`36;e@=E5~ok#{usd8{_$a>bkYGLmL;Ep7+8!ZW4_5meeea*RgSNm~2Q!!T^ zJI!bKLx$DROFE+6!&vhsnb6u$_DkZ~FP9~v=E&BLP0jh@Bl6_eI^UL=+WB!@t^DK| z@Q6=5fA!)VF4_KYt-_f~r~u$k_6Ac&xYcveu~*?~_JP8y)I9_Yc30X8of(bg^a>Lq|(( zZX+0Pst<1?#->hI4T5v0PKv;8af5ModH6(^R8inZasj^<nt`nXg& zL}Tb-=?1)g#or);t;tXbMsuj{Wm|RqKyuArLeF}|LCQjzDpNSn&;Beqg4t;`*TMyT} zdx2rJ<>s#YBU`L=58q`PJHffnD}uRhC{V1W$fMES8Fxhu(XO3gzd6*# zY$F@KDM5+xe#xhaRZc;V(c0f1VtqYTWwkR$8D~C^uV2Zi0tpqi+@h4dOcV7m?>AR} z$JHt(vjs1rm@O2>wgL9#=UecT$6?@+Cm!NrD5Yob-tnKeS98h#Gbb8UbeE!d5`N7h zo-(^B8?bpQwC9h$KFW@mN7=OGSe34NxIcb%>trCXmMh^`tL~^_vV*&%1@lV!b|;;e z-DDLNx}7b|xXa{#9gvE@v97z9D1W;kdcHkSKRb8Z5&&|>&NYgHkaOxOw!yVv zjLk;kuUD}~ znEq6z>**dnl~)g{4PTRY(hSkEG`8eEunoJLz(~A-xBRmOP2=`vv4Py(s`w;c^)c=( zt=!zE!!e!2hA<@%vpG8hyX68+V~n1g)IK_!`doR+$J)0PcbS{rzfBga5fslY@#HuB z=BtcTht>yEgoOiS5HaszK;Km%JT;POeK>Y%nK)mldj;>AZ5)xPRJ<`GD}On(MsF?5 zTz9X2BaYw$7pZaVe`}Q@A+#di7UM^ZJHmVVgSDRa*3D zyRK_c#p(@yCB;6Vpn`g&^;CW2oN@G{K9*>t0v<-2QR+{=+g9eiH62#6-iGIQ@=_sL zM8lG+CWoNy5B3~!=D#^~4Tdbvx*}Y>R%;#f0XsmB>sEQ`;r;rG=I!zZja>ZD?JmK7 zs5eX^VQ)_cJH2@AW>Do{u-u*Tr{a20o zMBD_k%Up&f-z6J&@;|)yOOnWH2sUX3ddt)WO4Zo)eCE&#t0~+5enM5r60X+K2oAph zhn#ybly2u6x<7?OY7wF+Jy*DbZYkw*K;@uJuGRP_Qa?M&D^uDw^%5Cc`si%eRB3xk z^1}Lc@uy|I;EzS2(jVzNKr2vgvT6OqRPI#Fs9U8Jg#PpJ#j5-`)9JMQn0>y}MRtpK z(g%d_YLoP;aMd{Q5ZD+E&NFX>xba~Ox9?U=*^D5}xBWN#Br~MSti`njeQ!#lcFk|U zw=3~z#QDxX{JDMrbWd?3yO7w<2TDj}>Bu3UCb&^_Z>f~S@@^4@wOHG(zkh$fq{MCs;z8v+d!ggcc%U5h#70xpXwCifP5Ez(+ z?>!-m66CrHHcR`8iF*4cnzs7vOA%V(Z+_O=8#X$(4xG%$gW*1c5OI_JyTce)#D}Wk zuYne1HiXSHGWUVE)~T%c+D*Y)`7WJNIn#QG-|k9tSqLgtV-zhhX3~+x`_(YANsvlbi1-Zn%Bw#J_n#zhP-2 zH=uZJ*FZK~O5=d`Y__MQNBr&{Z6>v?ZOcsirEFe=o-KxeIS@_$yf0;YuTe-zYdlue z2&`u-*M;5Nhnf^pMlfqJky<+3#74F=%N8^jqIx`rfSZTVx>*;30MDQ-(8#@Vdi-H8+c_szb8cEcqJoUO}h` zXM=qNN8}B`TVCOJe@XXvs|930qx8F~@THrjz)BBCW$@RreT#UCPD__q?7AFf30MG^ zMxRs>0akC5949fZxEA8NijJi;l1#3_l2kYqY$~;jHuvxttSR@{-+GAoWA48l!9UKj za>gSPR+Uu--_p0YSzQ|EfhcneBW95R@lauoG$;9?wKX+aG(AAXp0v#gR8tA+R$A2y|LOHNr;i9zO%f#VBugU3}VOgMF`c^LDV z@1Ws7ttz+1)dIPz|9v>SzviMJBhPxgAhx&lh|#Q|~=e z;{ghX#~I&jEf4t%Pf07@G_{B^Uw-0gD%B-6ip{`1>-f54@vFK!)3E_x>Q%g1x)~*W z*z_u$s2A6QFTfXU77#m4=|SjVHhlnqS*3GF%74>QiEsbTR@$2%z&lpb8N~HbFu@hX z8FQ?gfY*xW%5KfOHp!`ule777X>lqZHUETN#z=AP{+LOPmVVjrIEH?TSG%Zc#GXTH z`E#31Yie|%mn)!^&!uZ02hJ}qX37om{4SDmj%UU7=uQ@Iy5h36*Sq(b_!2B>wb(d@W(h=+x-+*(gYjT!n>W z{4s|Zy{U?+S_u0*MWf}XMV7dpf(ZRa#J|9rf-g^H-yW|_u~h($mj}61%6^N%qPDg` zVtFe%(HaBY=fBadk_*Zrn0YxjIRh}Xv*fRYrBto84%B)x!NN@1x$)BV-*v4EB*gY{ z%RHN011b3A3%Ym*oZRSF{tR@j!@!>DK^nr(W)fI2l6T;!-=VYL1kR11#t3Z&4IY`5_DCR2l)Z<0V#hPoJfA1AP@Cu>HGM~duhCbmeZpF57Gf>Yb?I(S7cG*J02?@bUoMICXC3;JF&zw?sFF&N+efaR#87C1XXMX$eqK)loVfE@fp z_2j&y)2aR}#~Od^N_S&x=gQvurqi?cueY|6*=7%#TMUmWugFk5ZLTJ>gVfokUO}q< zG=GN(*)-$p@%4vIliQpFGtt#A`Z{zcC5FIPd!rpZT7Lz9Biirx(AKCXSum?t_rZ&a z1-(RO95_$^`Ir|^)tpaq^a^(dt_k`XIL;RDM+m;)3i*>+mK0pl8b5958ovaEExX;b zp?vZ3hiHC6cDHXzJn~WQc-@ZK1wBwDdSSThHCknM&yc5b$->K-+{kYc#xL3-vPlrd zGPG74r*_<>aPaXUOs=20ifnnVIIak@IyVLH`2}VFd76OswevuytwD#{J|H`1Yw%L7LgSaTuy(_2nFH>e(8hLC70*7BC}s2B*{!mXQM1jhU({OTxUQ^|Q6 z(njE=>qCHdV&r<~cvb8JQk@$p@Bj|%Yy*aBoPC$f5N5w%*8By2|7_@zQ$iE)mT8}p z>Evyo^U_Tz+7DFcU{_;ywV1C#QoFls0Sd-f`?cmv@gSR4+Zh}U___XE$fST~+fPPbJ4AOSO>LH2*JWik8}lJAbLBaA zHUN>I97LWXe7{^vu0!Dx#-Rf+{C@#3Rj z5KY^I`1a&*B^AZ!;BL{1^30Xyl8vr88)xo zPWfM?fu?{=G{4f4qRm|!ZfSU%*4vSnMZyWUcD^ltM$30Lpu52e>L=5~dg=oY`3ycc zeTwc0qM{kS_KkUX6Ua;|lD95aqw-4f*7%3O!&2Zq5pnxZfP(`D*PJ;3uwzM9SO0}yz0f!D)xXEqHs#o_8Ra%ptUg)f5obh_9X$5N8 zN>cXz#liJtL{na>96VmoX@j_++r=`g(R4OJ;}qDhZdW;4zK*-VR5b#z&XqVWBd*R+ zT8K`YGcZ$U9TCv4Y#t^1d@{*^RJk^)3yhFnpbsbA;BESUY}e+#M$SvKu>uR`3cvWt sZOW(Of0on!g5=a7BXd-#P37sS4cq?s<+a8WD&XV3uCY#~mTlPo0eJ7H5C8xG literal 0 HcmV?d00001 diff --git a/docs/images/scheduler.png b/docs/images/scheduler.png new file mode 100644 index 0000000000000000000000000000000000000000..f1a8c370829e85b0b16d526f8c6c6c8882dbf733 GIT binary patch literal 49441 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

baRL(kXnbhNkUDhUM_CTbIB_x!hho7gTY znPakA!E0NKz)&;5E0VPIyG0C8WWC3S}1 z84gc5bNM@Twy7C|KLb8&zX44v}7^jJ7 zt=mQn1I~FroCwG!CPePfib|e@6ur1y;`ga#Er0huTS6nhfv!jjMycjF*DqX56$#-^ zG2jd!ANc_~$bUT4yjV!>P$ECPrQW90_h)B^LN0noEqG7P&m+s;t{C`F?%vRl%C3|f zt=;Rmrr(3IvO>JqABjYtUldn-_d70bKj%2OcC?5D zYSlW{LV|MXa!>yg31$=-C(7Od3J+1b)V@dWhBYBxHjnp5tgdGPHzWP0>l!N8ZXtpw z&Volv!^b5FnAqjE*mn|;oK7Vrl1h}Mc^m<2oL9!{EwP7Q!%g~%Ep1^N9L3p07V69f{~^sd_ZV$dc2yh;zsA7F&!W#K=nYLxTfZv^QKN5p7d+`Nhs`z((-L)fV^Psl zl7x9av}vbqRS?}5b&kd^mM+!Tq6M+Hj*cER%F>|H7 z{l&yH`;KmyCw@?S)Mhr>pd>Bav^U#!;<6JWpU*`iP^9BD3EMPmnSK zZgVC+3T#_UyPlXXdz$x{=dfnhR_EIL1YzC{NLl(p}IxMbeDoISywtB%ZUpOsBW=y-`!4GVcV^ckU`K(*A{ z2-Eyjk4Zuq)de;C>aw|%?6IS29E*W0*Ui@v>X+25epwrkX3j(W$F9*2$rUy?GJ7`O z&dX-shIodBe)@5%$4y5YsE+j{6m$M7?eN1>aXa9ulDW%U$-t?ZPaj9f72$`hRleIb zo9>pisGg*+QK!CRR30yuX&+MlMVsfs+kEpMbtA--E=qN_tnlD@!>ERsNr~}lhs=Be zmRBUTA}*ZIKw`Yf%#am2WAurnBCaH!eGE;f<;WFp(UkqZ=Z4SvI0AksFIzNI>gu1M zfqhaqp9S&n(zF&<-5_DE-4g06F~NyXzgvpmlR5(psyQ>1P$)%F;A^^Y0@;O;zvITwF?-!x96Ok;%{fHX4?D>Kdiz5snPK7}Ex>D{HMuv`0$pLlw0lBVwHfRl?(# zA(Kie;nhUBgCnsUshgdV5`p09x9(&I)e+PdR}IPx_ayK3JxXgN(g z6zkl*!WU;1V7uD5RH|bwlK{-Iq<;eUAwj^vUx@ zhV_x|9e0Yj$)Y4cfB*6-cUD_Zu9Hn>3dVOh7y~-i6kLwYR!ZVa<4Yz3Wn{t+?k7CZ zJ?rildN{-HkCE56;-@EX+`kjxz97H=EjPj0oZd>N!ej?=Cd z(m;qeMPfH98SdYHF`pJ~bk7M?r>KS@A|e$QChHIj{;kh3JPsTilEuf{jfCMBs%hBu z%(I`%4J6T1TYjcv)p;j(cu-N?F z0Cf|weRGrXG>pBmK>Wf1K-bHzgXT`#NENePk9Q4)^i#P!z$$`I<52%r0@N)U%^h4i)wL>c|;@q z5*k+y?V_Esu^B(3W|KBi;<$=vx^UaH)3z?szG#OE0WrMRtFEyRv&kF|KxOlN^CvM$ zv~niPcR6mA<5npWk#U*6rOHC&)_H-1O^&Pa_e4QdaXR&9hOPr8<-dLnFxRvr>1ot- z!Su)kJ%|JG@HyOOQ35Up<{vgAzd>%(NOAG;Lu)$q*eoGPR5>1gKx^o6WuLcEXl{af zXEZ+4d@#0tijS3`#L`ly{Q*8H7zkl+zu@|!I2z^x?n6XEGJ~}X5DPhB6w=VTZiw@C zK3v&5EYzx@ketg`o1r} z(4e`eNV-%hGs@OFJHEdk!51m@cC;o9-L?dy-?JygJt>ou7#A1!z201H!Nbfpwql!U z?$7m_LGSffxRl|Nd`4$U$&d#zO!BN~xF9i$eX{=jyrA&YW$&R5-RiD9%CpXAEH!oB zHcUiBIm`DRJ&60ko|oJpu;Vk<%i}L=lj9IZue%S6cYbw)#~w%t?KwX$-N}o7YC3Zj z)+GLcXAAmv-rJ&}g^d7!#+=(p4_#(Q*9qNL;X8JZUB~ zajb~TRn9)mmJ@mv*JkpmLh@}roBece!=AERZyt^^NNhf5$>9PMTW05=fd6WWuMY16 zryxFzGs$HM^682J&_?d)iCH^C_g=iG?tFt3Ke(r>gZQ87%{RMt(%uAABX!{Ttu2!g z{FoaN)O1=3chd_zlpGi?7>{^3Ou-Sbi^4HaUJFU+3Kw8fLTMFXdf!xPMdov9IJ@8S z0+SavFN>2K>)+&vj4UjvL?Zxs7u-B6Q}i-RLbPKF88D=7ijz=I@FVB41T`zygQw5= zTImTKuCb8iuV&cukQrVxb5v%@hol}8mJ{91bhjc3?yqGQe=83Kp2wJ5EPb1ycylM) z9NDYQM2$M9WI6NNmHP;OJ*N3^_RCRD#n4=Zifi(VxPu>#h}zd|jf9-h7`3GNgsHQYJ@u!}KyQy}m|+}|pSZOluKC*mYmKa6QvnID(G z3wlG~kC|L-%;`LKRL)$zZ`wr~GDD^e z#kncKFtTe_OviF&X9$gtp2?a=CNq#EJO8%JD+VT8knJ zu7@Kv?YR(4N(u=Rh=SE_Ln4w)mMaWi_kfQL5A$bLEzjb>Pt*PrY3eci^>I%}kNmNM zPI-!tSUGA5Q9fc14J$Sf0m_UE}5p;`PNw=)FQ&byWqvSV4VR9-T!R`SGeZ z(P%Oks=2%iM{eMmtrD>qp{M7qjg3urI8knb@AckB0=6(9EICbv?HxP6Gut5xTgMJf zf4_9m@82KQ)RHo|EV=OT@h=a|gRT;FMqJl?-7h!b?}yJOdV3`ikRvx5X6Vh1Qimaj zrOSU7W&!w!UVfL{XsEI_@+bkZvP!uDA8BZMMRaZyj^LlOC`(?BtJ^*{uLOkRy#4s` zWf8#VedZ8LEI@`Wd=Vw*8&8}Y&OMpEr2c*%@of=E06bl63j5A!HtBKUac8;v z9n$nR`7RZs$}1PB8u;(l{2YG#$oE$D;I%thr&;>bf2B+!VK4d1?EVfl>?ArWhwGzU zm(ekJ@C#5c)uzhUH7R0fDzki{Rs)5F0mVy^xoP#jJrN-@wUy8G+xdjVn%ug{Mhy|w z>$HFk3megN#xpFve4$}^d-TitN?IY;L4b0Um^sUjP6Ik=!MmHO+Bv>n^>6Swn?7Ch z+eg!@?>g2#Q_Tn-nM=C^aZel_FHo`Y&`U?9(J&xR)aq;*hzzfh%yt`!qnGWrREMHB zdt3(?9?>o|jGRcDQpnvOh~Yx>YIIicCUOzhYfTzHH%7&mJ%?ZaQRDYiDK_?Gn`V0? z&||hY`BhFx6yKkj;!y6j^d_h8?J=2HJSB2k@~gv?XlTl zlwrlinwOfTh!Vrf_<>=dfXNiwOqDczVFud0wn9TcI5+b9?Car8wiQat1$Z;+loU|y zJEtY2E+=DhaKj&P@rR9CU=|8+d>xcAhjozDITyD=bZ?;fGiG5!ffpMpJKh{F9)2@e z$hM1gwk6CaTlpN+(>KRE8QGkyg#RX)Tm}kF>6qglgL;Bj>d38FNPP%fUkx-T)cGFVVk`SvhuLH z6(kaG1rB7@xW2Za1*Z1z%mt|e)j=GDqRHXqsZ^Tej!AmAq@>|v+~$|CK%uX0wVi>= zwjw+bEpgk%Jz|Az67AH-W_uYh^7b_>^aB?;BG!^`6#e}DqH6L5C2za_N zaxk0&uFxfs30Yy3Dv2r|xegDYUtY@PZT#6ZNH{BDBNw)zGV(igj!H-f9Way7(5Qdt zqY(Bf4}4v%0P;|X-0qm8prD8=D`N%(D4BiD5)J%V{dTHs)=p)+1B}e9pGf;FC5x92 zD`xZJx9#~GowS$Zy+*XEjD9+nX}vuxCW00e6r?#n+dXfQ{9>K!iv;xU8|T9EBQ=l5 zuLi-hsf*y^GsL=^x(8Jri!0TO`0qF3`ei${7+_Y(#1z=wV6DGf62 z17t;JGi4G!0kTo~JkI2$G(l#X6!;RgXQYSj1W@O1!B0fp_s)B?uCi zMUhZ>c)8I0`-8D)9xE%%sAB2Y&(6c|ce92AaLnula99Zb= zI^Ve`GD5u9bXl~-cwzcZt?&3&Tyl8M4BPHawg;6LTHJ|p1CB_9pN8Ne#}mu0Qv=!? z+V$3`!G>*K zxPB|)6+^b^tC<;%Yaix3dM0dn-MBZB5{MAm6J=lX+Blo(%ah!XCD;4qy`tI8!?r4F zG~JX1!+!PH--@6Qh>~FWI|VK8la+8%r}l4A7Z9-d#ltrC=8F6NR^$9zcwHSAr!#yF>M*_b?Qfbcfab-ry>^kV<+e}j!$M{QuG-w4+x{%o6L;+_i?!WY;Jr& znfKc!@RGa~Pss14oKZS?Uq;&?VrfZm#eW^1D^x{3iYRaEdLkz>= zCdT+EjKbdaAUs#88-q*{pqZ9dzH)R-YQp>cBi5j>bvKPPyu0&x&Fp2H@-5X%BHZ^} z#Cvl>$O#&O3Hqw58y+zz%hGyfN4BHc@wPXS3PsA*5t+fG?vSh z*4e$|lUltLy9D22BdU&IZ(bjnYB%o^EfRF89raN}6Qyp(O768MV5jriSEy2l&pr^} z4(mkns+}7*BP*(DkX{;tGNjNMC@t;)c-bm!G*dlGQGBa=IS-q$lKQ$10E_A~{~j1A znSUqoEAWr?oF>mcf!Y1co3uF)yffN*F9?_fMf6T;_o$C|V2hfq3cpNPANW5C-*`Sh z@a_IfYY$m_K@fU)e@!Ih!~ze(c(G|~kIq|B~2OtZ3B2^jKv zx4ID>e)yl@U-E4hSS)nA3y=L3HbWw4ZwK-gE1sW|_j9Qy^WFNe78$KSRSZ6nQicl% zBW&lk5mCddBZ5xSiHgknybeJgihs1){1CHQQjR$uuR5a?vHM#GB8NfQ0z@*o(bo0`!B6-} zHL5qwGTf}z-mz)357`@yXw&XOfDgOZyJp`6s!g{gJN(S`8_#vaf=+-NPiit2zGa9g zXf>hLEvB+z;!O%^Feg2Bbv-SrQEyuTFiBTZ!Ud*RD~hjlrlJ;=Eq=JovIo*4cn$nG zznJe5O?Zkx`U7#hU+r?%_B@huI%{>Cvg8sKzAO_P{Y|e8q42pdQp)0gSC+$zN*Q<) zo&EN(ZK(s^@(+tZ+TKlv(GxD)SHI?1e~V`hOH~~C407H5nLc_BrSQiy4t$LZn=IV* zdU*h6@VkZ(Gpl&5BODv38*J$w?()mh&JQP==~7xiseJ${IdtPcP zI%YDNXTy5Vi33(v$E}I(=dYWr{&v_{l}xufO3}DmGTxzX68k-FST1D_S3qCl>;HlBVYdS_p(v*L$5Vg@!%&P=kT6>P)lw zgX|ZQ%W(|znhCs9}5LJchC;FWk&xf%}k>a-=S7mYjSKGlGpte z_K^LNl=Ko*QA1=F_~26QpfoZr6tX+2y>V1gBN<@8a(BAS{&;xQ(;6Px#?q=hKF&p3 z8e*2I$?`%APKb?7O|+Ja-`PGa%abxR%vm`f=UX2f!tD#!nHl(=roSaCz{vOZ@Z52q zzR~$ik^1h-P5iQ)Hq&gM7?bG8_4H`X*36`6`gx9_BuF7pDzJ@rUbi!En>f8yp&Lz9 zFBqt8Oa-dGN()%6wt4cMI~yC!?P?FcVcw&5Q=%_~VoT{u;U8fWM%^~JJbvVO`ff#% zzh+ZaEd@)iN%TB#G<&x@&07`IKrteJ?3CwcOqm+kg*xnBMs2t9b%9ljc$_}9W-X)v z-MTSlS31ZgG~L+)GRiP_5)*|Rn&fw;Yg1t_y*uFmu2$Dlw8Z3Hy9(3!Vo95^Mg?p5 zwtP?RHNu!dBiWxk@{_gIWI>O`rJ+f3{}^7;RiNqZQeYm5%lk!fEgda+pX5`)&(5YB z{Dy`?uON!1m1pgYKFL4-1mS#-RU@^qJ&sb(JN}Dap>myOctJ5^>W;{@Cxjx{i@!7m zIb5=iLbeiLWBz!0=Z@C{!V~RtxVP)Y`lyM^ItX^gu!TQLAarKO@UC*mdC^ocyeUcg!4I4@2DlRB<8YrAg!9*+ zA~l8`xA`kP;&DN+U-EZ0zq!U8r;E)A4+f?L-tER?-l)Hj&e`{8UsvkuWLWA0xg;%R z{!W_^pbH4RhXPx-AD>9R);1HyoUdXz>gG--DUB?Y!3V$xTKt_}vm&anG5?7u_HvAK zP;G5niz-lTg!LgRHGZ{XO)&OdikWzkl6ZNIw8RnGJ9P;>HT`<>;3TW0 z^nTZY(ZwrhAY;Q^^J4ZwT_sB9%ogs)?HW&kp4?j#a*)0LfMswJmYrf&_|BJA{*7d3 zVoyd9%}8xvy%C1e4t~GmJ>LMam>8;QH0%QXP9iYV-ZFUJtt5UhcYW0*hS+uv2Ep3h z-7O6D&E*dZ52vOzuO+6;^*bWb{adUOw4LW1?Dvz|b}icPaZ@fgku&wokq4*oUn|h( zGE&kEA0ICapy54TsIM{eeQ%FGL4}Qp2~SKn?bo62)T1CdMZkp`2~>yezR4w4r+r6? zWLwus^<_YRB7Qx3U{D!kSpqhG1M1xN*^yM}%;PJcR&QJ%vVhHfl^V_zs7d9Z0B$A` zp)Iho(AbQw5e0*egTM<48eh!&{5*_d0BeS%N}Tv+r=E+p;n&obRn}j^k1qV&g6$P( zk-TYrJ95Y{^Th=YN%KI<#$;|;FAm)h4miwRRxbOUt6+idFu#4&M4jI{SZ7Fs?jEaO zcRstIcLsLJP0iGDe}V%~c&u*}nFvTsu^A9k zIBIHyFnS7JLrahqj08JIxo6SN2N+0ss{9g!pBQ#_cei_x&(l{I0W{3ou*?h)iGv{q@@2CTAS7#@3ZcH!k`fTTCFIrbfNS2 zF!Gy`5w+>>1Bglh#I^zgk-nPNPQ?y$`_r6etD{Aj3w%<&;CvdoitoznTH#|7{KArH zpf#O}aX#K)cdMuNqoLbNDf_RL_5MbK0>0~|3_30W0ip^964n8O?xI&?zuV`lQS)li zUE15fR~IR_CE@A7ab&EWsLxp=QI9RSv9Q_(Ea+gr{Hjk}^H_T>p^4yy_lo#NVBT5h zwNb-OU6p6LkFlr*X2sbRY}Wk*^q2=scpxdG_U-XVtzH|GJ^iGWn>O{mkl^@hqhlUR zNhBs|)I|Y2Zdy|OpD~XIS-Fi3vGk^tbZIu8dP)zc0g7ocf`P%$xo(Z@eks^T?g@of z+VML6j;vMXqr-Bm!3M;D-hNKq27A9-Tkmc%(qQo9>UOk>2^xAt2be_Q?TNV2-%Xgh z4d~;u2lIFn6gno4q#Lj3y+07#<^LzZ>I9Es(#S6K%uxm#Y|Iw zHKV2D$?`(aly+6ntBGuE|0pv$-+N$hXYKRn>TWMZFb&~nwXg5;??2Nfx5S!0BB+3$ zynJ%pQ(x>Zrh;30)~iwz-*!eo6(u=!Z=8CZvjWhodytsZ8ERW)_p7EW?> z03mH__qlIW+p#)hEwuQ3lM3BatDgLI^+<9}+HI9>^z%$C=HuLZ?Tvqf-JQq*ifb%k zeko4TdvIHJc;2GQY4Len6w@8uatzX-ZUHjERC1@p+JCZCiD*n2=ocpa9DN+xbg9U! zc=NMA!ZS{}vMq+4Y$kn7u|wT>ifJ{wqC0j(`f*r{CK=wsJ);MmuPOitykBLC&iP^< z%4fUn(|yUq!}DQ)Zh(=6DLGEHJ>tn}zuNFrp2afX)#MEZ|F6lE3W;|mD+HE46XG8i z(d{v4Zv{T)1ie(h-c3N=6pVDw9GlkwNR;uEfloI{4r|+yUaQdoS8J8$^P}2PKbvU@ z8PwB~;=omZ*%S}5WxSO1ptHwucwZ_?)*98i#VP|I$oGnjnbOhqK!-Pu>5Cr-i1}=y z-67hW)ov}%dJKfhPl|^aD(Roog~&QG82OxCkp{-qbLh#xYOK)AAB{sPveLBcAN2Hz zf6EFTeY8HP0jMnN1(2QcAl|5u1O4)zN;+q(NAxj%$$w4LbfY;7ZEY||E3NXk?PKyOdTM!vV6l|~)1UKwqIQEE}_ z)*#zopYWib%T45LT`gGNR>1Sw%jWwQ-mX^w?yQuyvac^Q=+958}i+#(tAufInB`Qc~aCglw{mv5_U z2#}oalf1l{Q5|u}hP4?OG2rrM#-DF5d3HP&Pg}0CrV&y%X5p2}vl5;TFjfotrpvWg zR8*+x9H$#jnYH6&-ASy<0w)d9TVreM?k0xiaH=b4~frhQz~@ zv9}xx+mz1=6#RJgqkxYjv7hb|Q^=wyxyPP}^A(T0%CXMZ_991nI7Z@5^tn{$W6+36 zUq>0QJ*i#&b-ufxN%KNNcH#_d zii=C~1kg$fo1;9NuEK<)QKm9!JX-UN^^2HO^~wtGuBf1#@fxu|+0eQxjKUN>LfYPv z9l(xFpSiEzGkk;&vQ-Rx-t?AQ8EvB+9kkwWaNU0alOK~2`jFzuC~LbK?9!KBQ<6o5 z1^46|v!##Oq7qPAIg@);`jE&~X+`eLd;Ge$1v2Qazd9!AT*^)!(wg!=$HyiE^=sP* z^F$kwOCk-JE5f36GRBbRjfmJ+h`&@E*??wcV(|W48oekxgwh6-U{pudRg*1GwpVvS zFx*NSnjonCb83&XAc{j!>Mt!BC^7!5;Dfzqd9pCd-X)E4I@L?lz{59+U^MDon8%X7jko#& zsR@OFV@W5ziH|S17g~Cy<#}!yd+T_58A8n^&04l|!A7CmV;7h_y;iP6EOBum+)2LP zmQ?&B+SwHqF$Rj6vFOJ+3nY+!ay)awbz;R7%yCRDp7~~Kz#MidTqxwDORQB(z@L@a z55!izTgcuc6aH;~v5fB>2A7n!cC$(z5kbXL4Q{BNDg9Rv4K-T0(>ne`(9zLQFfI^k z)p$n28E9F_$|k1c95O1a5@`)j5ChMVg?Yh=f8kZq{7k+7Fj)cLGsC$ z`j5>(>6NM5k^;=|y}fiNAI%@LwAnK3wSeo-(sDAJGpb$P$#j%knbx`Q$-63k|8{vk z<=b|i6bog@^ZQuS`P9mi>E5z=Gs9p$H%4;R+LE77wc>Ui2f1w$0=h|^#;tTrNQp^C zB)-SNC*K9V2NI{O!`mD% zci#LyIj|;aXF#o+>se+Np1-COD8W0(&}rtL;5S5JSx=LsG&-ZV1UfZ5pWe=Uv=^^B z&x<59uU#5pJg6=n_=zKqwr64BI(df;VgZdBoeXD+>S>ese#My7T3>bn*Ks8xBB?e-Z>o;pDwQ=W z!h^~+VsuGx`W1HIZP>mcu=A{me(qC^rC28dwdtH~6qx{V%Q+D1scq?FmWgAN*~05Q z4RGmUVt@+61J_0XNORcoJ=EKl?oQ;H(2Z8oG(K9ozxJJc+W}cITXyvCD*vxd@oev_ zmECxNmR)rSmSRrfYddENXU*B*v5BSk6_)l6ZYe60IjTqK3QC{>dQfV|`9RY#X2|bF+nH&fu zNzy-tprUJZV;)nAw4xKpfh=k;X?YE9n>m+QTVH0+mO0_iWxD1eHzq7W)TE$vf~d>* zlscKocnQrfCQ!v4KIq&|F<^0Hj6f{@Q?hq{KYaT6F#acxOo)bJ(XUB+ClakR$^2_9yNzXC`M@oZZ4C&R| zMsnXFw4fPD>4&VN0y^Y55tRNw81rtsh|aBhbDZGJ($i$8<|zvQ9`<>+PV=kwJIy`5 zLRBkbNCj}z8alGe)(OKe0|VpO~xU_{-Soa~6;ff>L&1?M z!}(PP*7~1_S>f*4jAfqrI_y>Q z-(h0AzbvUBdF^2zw9w#-&erv!?y%PI&B}2}{rVpulhXK}?~~yxh?&!U&*KH+lyh=3 zZ}qbyNn*4wVxk1oi#LwvQfPZMi6=$r3UdFwz;O95gR$wT4cbZN&1Q+%aY0|?fD^CR zn2m)MmhF5?COi8%$^^gp@AkX%6w5pX3%HS<3xguLxb8?rF~W+&XqFTWuknHJus#fl z!POFnidbovf!*|>(%KTrKpLn`Rl#nCkWMCX+LwC3O!I<%&$VBv=P{qjdFShv{pdoN zIW#tToBRz|Y%aw|PEH1`x?$xCvS&wiTG(#zlKpFEdgj^e{;Z=etCy~}ejNXbuBPHOzk%`VpcVJ7V;5$G2On@<8n5LVX;4= z5iH*gyZ-~nB`On#(I?W<$%*5~GXaCY8cVT2=Rny2!Nc^U==CK9Iyx<82DdZRnlu?2 z8M19`H{(`jdH55H-u~kUgO@@Q!9Vdo;@T`U(kFJ{-wsg1?o=;zzBKy((Hqfe#KYD? zi6vLDCk^e38e>U_-Vc2)q1voOEnn-zrW11@Twng}=)Xxs8P}Qqf=1tp=2D$MU(`}7 zy+U}Y5P>z@*c|H=W-Rjd$H=K+m)a3;nSon@U!W&(?E* z+=FX1U!O0e8>;+bxQ&dUIHbI{JHj$bCc=&i>!EjeDTZ@AQxLP<%BUFd*rg@?%z&zE zJy6utPVlS^K9}J2$b=90M52!WdsRBme$q9TqvWb+}(K|Ei`I z-q7$NHje|#IPf;^!1G8uUTiJ;iJgW^@@YM{!yoLrO-NGohynRkQQz-QR&gjqiia1H z-%Yjn)(Z}8RVOv4UEMuft0!7987B~~&hq}|WPN{hMhqp<^E`)aYoYQDel=eqDk6z& zZEM;V0QXP#wrutV0I)IpDnUr2SQ4FtX-O!96RIIKUARJNL`98YWtQAnjS<5%^s~v{ zQq`-0r*vK}$*rxw+InmLU2%{}X3*PRjFf|7288#N!1ce$E6w62j>D2EW)1B_$nD2C(>fz~f!R zBg%%c_|IE0lbhSBqTw~eL`24QI1N!!E5~cgcmkFev;_s4qn<+vv0~&Lt70 z(&5YoP)FP+VTd&ycdEV<=o4b9LvO8~q_xg(?~>9NE+1#kwb2jVmTd9=*xCNHm#@}^ zMFY}?(~TWgW&?N7s<&)h9aW11&f8PtCUb+@+4Cg4hfTQh15SB0oz~)pT>A`k7lC?} zj7DIr0;wm{1H&!}qbI)dNdX$6?UcRTPi+tAT}Cl;S08n=u*s9-cdo7TIcsoyor9SA zznivVymNaE+kIEJ9WUg(9#me!4}8>v4x|9;l>^IoETR@=Y6(2kko(<;)23y4jO6vdNlACSJk!iZEL1`=0JgwS^bofMG9$)B2Pf3^2^XDRAbfHCdq`lT6Q6|0$KQHj=Wiqv5H7>C1CrD4U>jtWs5GC8 z$Y#w==>0W>hh;0#{Em|JQvuJTm0AS1A~^*cGt}N_6tT~DDkpe%8aYFjTb6cfkL?Np zZ+jw&9-U#TLU1W|&I)-jI~{QQufzLs=&E@>|JNW5u@(`J*^up2hL^IK!%I2byB>O_ zc76itDXUBj8;EUQL!H|Up}7P1KS+Xbh3aQc3T(IBT6RxAoZz+hPTe%?G=&0XkZ1pdoQNC4{XZ9jg3 z{EEw9p=Gv5M5D!cDFkk)P38&R%LXrCkU9Q|bpg$u@ZF!3Dcqq1FVl6VV5S@*vdJ|UQ@q}-qC{|lUP&&7 zeRh&S+k2zdK;q|Z2wC-fICA!<(RG9qSO}U``8H+-I^ICAvQ+a*e*)p3*}Ub zoZ49m_^W9?P^Nm`bE411VW#z7_H|@8du;Ia^%xm^8Y4N$l3cTFd5}~eG;b`(#iyv7 zwN(2!^ByCE7?~1(J$Wa*aJlTEZ64cnP#Hc+fK}x~o%B&c&z5M^8@p&byTjlpI_PRE+EQ&0};q`mHL z3gLitE>OMmI?jmOdi=IMHQ#WM4Omq^_?&b7xL?k=XbvvH* zvzjRD%5Y6khkQVILt)I1A3cBQ0k=ym)8XTnqkC(fd$*OeyIpUv$cqc9d-K6X>tV{t zB;r3?qp0sjizG>SSt?fXreuhW;9#607aO!b&!_kORiSE#kjHp7w3XT0{j%Id;aGmK z-Cw(C?PWFNue`F!K1Y+28+Xf2gm~lQzDlXVPPEzG9F(ksvC2Z;6AoWd?V{P;eIAma zhM=2Rq~TFNOcE}g(JkLJz`(w-%P^|4XoIA|gIyOeQ*~?d;&W`3Jf$s+jg5_v88Y|0 zGp@2`k>ogMCbQONOyy>Qv~j0zDJI(LKsT0Tdcb{;fzfivHANi&3y2n9#0Dk4PCuK0 zcVsIi<_+NT5~(f`9oec7)>8*&6TLq~uE8**&fC%8t6Sjo&tEG{Dj!R^68^y_Uq(z^ z1~xtWiXU@jm5H&OzPo)wpI7L}Bk|W~DPP(8Au(?Fw2CcLeN4>QbrJIoML|_^^d7skz z%tVE31e@X=H;o_lpPeg$w+0+8gDk}gzg<@l)$J;419agTWP%Ab73(oUqHNv2gUIJh zgf>-^zdSXbJ^YqOA!99M0U@RTtf7>?OW5VwJ0wr!9=W(^AjY3n zNqCHKHcR+M_r~&%L0l92Q+5}|9_q*{Y!Lijn@M+e5mqV(k$cDO*4sVAv7V~m&D2VBDVCFe&R^8b)2%bUKd??k% zuQZVbBjp!@jw6F+q~=p zMbdS?WX|7tcVv#eYX|lrk*$~{ar%w>%ZXP!ZVYn{3FqK*QTYdk6IT<57n&C~x=-eI z)IALn*RG)GYZ{!8@MYwgkCQsLhZh$E#zd{@fkDr#>KIUx&M526-fNN5WWPjqOtTO0 zt@pOn5J<>iqK?6fj*#2`umDfzI%4w>yT0`|SRFADv1eqEQfykS%~WIEVOm7YziURi zD}KjuTkfORWEBrIg%cwsz~bAqIm7DjuJA72(b*xK+qSg@U98%IjhFRp$AUs-r2oO* zJHJQvZEe3D+Z{WpsAJoRPqt zoMVjp9-qPDk*>gW!qbX0ZBEu`U)|0b+=d~I$Uf}U#)8Lwy%iHv5!be9JPSs42a)!I z4I3g2SfP{NP@qm@X6%%Vwr5IkLSltpwpFJ~!#kIAWI4=a)sWNmEIXqE9M8XTX_C7K z*6u3)L=m99CQgW8GQ%BPKz(;V(jME7%A-Wn!aWC;SrVJ<9jM|LEh9%mLDD$em|sp5 za#jI>sk<)_aM=4aRmLPWh|ss9CP7_K=yk!1sSN=O8k5shMk4vS?FjwadKGvZxo!BC zg1-)%)>eOuA8>TA!~~CGOM2VK|LW&kDdLz!}?BLK_cbbP|&fLl3^ua;n6&GDSnN zpX*WFO8$_1Tbf?-Y)8X2QBoqTQE(C`!zH`D;-Ga94ueP4ClmuU;C;>vi9|@-ZpGs1 zYR?yXvkMXqV$AdRXE@?F4+fM2YEdr+Uw>U(sy$xFB=T%j6=M@!$}dYy>(awak0i>t zm;g$xOKZ%h_=vS)61Y#ZT81ZhNuD+RQ?oNNND5=BMt8?kT=T7i#GZ=$f}ut#wd}_8 zWn|hr<#R>)MZ}H$-Pkg4GI?xcYv-W8k&+7U{8rKg%C3f+onTJ9jOLv6Qgin|b&cv= zK|RH9Oy`otl7HkbGSa}gmnzjvpNw%878OORX3^W`wQoe$Dzqr5C8}v>%9ghdkdfs? zLeavu$IzEZNXjN$ii(n<)u)QenKp>m$NdDf{55QwN=8e7avBj4v+{VJEuwbb2BqMb>+Kme!L%5T8)|G>!F8aBibTs;thlxqjF|Le{0phj|-WmQ;w}&dkQ{ z+`q8r;*T9ZeWkUJ1GkFGAPb{nSM=6a<6OX!g~U$l-C5eiyGfOz#Y;|2Gkq{vLnV>F z5zAe>y}*x3aDI`9xn4nqOAHH(L_E;$#_CMGvDD3FN`Lc>=im?-c6S!Wg>{=B&TKmp z8e)&QMy~{X5;J~m!Npk+FQPK;djPdPvj!*6oLv(A+U_QknH?jP{R8%e@9Tl|5>XQH@gD=;GZg_B0r#qEnpD4jN_XddvD07vT~AbF z=Uh%dRUmD`j0zPNaSHVu)HLq&qa5@K!6?wklN|G>Y1^Gc@Y5eA{%2HDRAlzfKP5Gj z-vBxEVMZRbTEECt($k`fK8oy$SRb}}f`6BmS{_1@r!PN`Iv2DbGjft?!b`NdU8D|k zg1tQUCA@)7QClyYYmjf=N%#&#DOAnM(vliSnB&c_@Q#`1OXKLX^k35emKts})bxlk z)DKKs@Psw!C~jl`jXD*$OeWB8ja;$RxoRJO)a0<6=a- z-=WE8o|_?qzn@pT^<0_g?q@WH_#4Ij9H$~C_R`_N^E@kcv5n_^iT-{hwx1vIYK3UZ zyM{R)%W)SX&Ank0pbg+&u|IFE^mC_WfA@fQvZr&uswz`YR0?zy1E$GUB$SlM_Mfl0 zJ8^g6-WNj;=WQa6<2k;FA8&t*h59Y2OtO@}V<|x{D#1jSSPLhSH#PYH7XD~wsd`f& zkP=+}R$02%WILS_o5E(fzMd@Jzot`uoowH5x@m@!wj*#vvF!XE5b5NSs!uJQr2M+B ziLc4FKfhrtSG1wo@pPu^IxFSuTdRkEZJE2<^%%`ji|?phAmi|Cmet7Sb2DN-OHgkv zw5jU$FzF*N`750(XP5O4nwF7f?cF77lvm}x$&B@vWNVJ*tImtswxmE$i}gZ+nLT8D zQ)_vaLIz9v`aK+zs|4$|-@&P$&GJn)E4Qg$*I1-u)3qm+#^y}b%eO3jk(N(hY4V>M zdhRk!C%iK#?YGx$d&YiEIhUhDDICgb^hf&{l{fC~@=aZwd@G!uj{7^jET;xTrZYJ>xg<|z&nmy>yW@ScUnJl`APYDW`{*{=ZB;_`I?&QOm zfY@qIn3o*>W0CUg8ZjpBdE{DdT3w)f4?lPE2B+iYu^&xWTZi%)2OzaWQrB==7kfSX zbb{AkDyNbQjyuP!$mE&--d&xkb`C&6Vffa}n4L)8B3In^Gq?ryGSyM%n8aa%wQDeO z;If&`^oI;nCh*5@>U&7`vUrY7GW{0d!pe_B8~GF1ZiU_28*x}7z_lUWCii+KOF&D{ zud6}0IIt?q)P8Hd*_Na{)>rE-EaaUePJOHLT`s4ssUa=NG-xN*oza^hPaeaZXXbPo((`3Ku9I#g4g5y$cVm`k&C z&R(GOTRlOoO>DF0 z_xP{;LsqRsGlUvy(C%j^E<2?o%X5d0sY^L@3Ww;R#U!9-SUMkO)fPV>+(-cE0P|Fr zoHWfcxp3^csjq~DTtA#6Llt3DX};!@=L8~yt6!?tkWFLnMGCTa^)IDig{_lRvHGgX*;g0`Bu zsZL);Oto5Q3mkcR?U3UkhbD0U+^f+#H$dTAnb1~Oi_?W|B$@?g1!Dfe4}EDb0nnlCy^bvvK=_^rjK2wPyIJqpvFv}yF`|==SA_A|C@z& zrHsN+BvIaX5YRW%Ddh#0$Ntt{Sn-bk;oNm*i^u_j zKyZOL!w;FE{RIgs`RP(C2CUez0(=9#y5$&cyG{`0Uvgp&3doK2n}M13&mG9xdR2)) zTHL>X1#F-)dZ2Q6|4JaRAuHWS^4m&zWs$8G4Y1jQa1@bMz@NvQTb1!#g|4_S@Obet zJT4cdN>4ZVU`6f7g;(3e5Em8tS$A_WN0Lf))+(<`sVx9^n<=<4Dp@V+AkwmIz% zr0ESrp>MiMxp~r#W&drzYu-^xPEIy@zCq`R&nC5lz#miV`p4qWvVzWH0;FP$x?bY< zRPGO0)NxJw>wGm^=Ye+P#@za3M?EcK=OE&P=qOLDs)AA1ZILK11wtTTzfqU<2d!M+ zG&Zuu5b|R%o6Dssr|CJN_&pgm3@tVo`(*?sB_-`&IZt&3G=03&y}iE~GGY5;sE6)e z7RUZ$YkGP{wh%WmFM1jbD@ins;|Bg zv@(maR3Rtw0P|%X#!KpsIb~1p-HnS9Ebn&ZO=S7VzO2B%V$o60{Lt}>*C_41L$4tG z-IuW)$)4VK-4hDVxOZc0z^@F$l*Mar_0D$0Hnc`IsOA-VRu?9F?;o12^HzPs37S~k zZeJfR`2!lP{m*7=rE-^VF|(q79hl+qd0+vt7-D7z$Tq8u1#{LK6#Dx5B_gV-=x^`i zLI!d3QojFqupLfFwuozVVjmcB8NKX4XT?HE0V_z~S=I0~bYpd?qYUa+c>AXf-Mjhw zL$>Qs<9S%{Kny#7f3xfDyp&F;s}zE!m7I+vC-w!n$!XDe(*-yc0{M1ZbGyhtj^cn+ zfY^(Yp2@1{8I{#70elOkf26+kP>cvS~a5C4D`3T4nI@*0R*G|h*8UjBxr z@id?)pKz=B71p25Xy%7%B}KE;RQr{oHKKNAD&(j6;Lpx{bpFmXsKlLkEdH1$RT2_q zP?QwBhy$*&Kip*0@L&{!Tjyj}GIJ#M>;_R*Zeu z$_g0&;fyFlPU!RToTky`M+&Sl?3^8&Z||q+3tL*29BLgjXsw#$PZ!JQC!agq*<4?o zJ1ai_<4k^|_o2UZRc14!T z*?jK${r2q2L+k@koG&K310rXP_QyYJgrWeFb=v0+ZdX-BO+wn4U=M6(g#RBSZc@@Spy~4%?h(r ze?+56eRG65ZU>~|sM%uqmI=C_)Yiav|-#=Oe4 zAmGZIQLz@4D908{LUF@IPS}eZ-V?xEQHcb~K!%p}`6YuySX%ffiE-|(HipH&NJ1^=Rjx=vB+az z5n;ivRxz5|O}{2oPfu|Mt3Bwa=hqQWF+e(pVS6*qn#ZoaqMl;ls$Cb_^D{(LzZd(L zd)@y&_y|DK-yolX9%UkK$rn($65cyyWg29}66B zivhWfN50SrV5x&_^(>7&PoGO|unaAwb?>p2ZQg7bko~+=#DHcX7@ZrMpLXF`YbWy5>Q_tKq@aptoW zvC=G8kKx`*8i^(9TTrAYLO{nz=;LR*FrZk)6?s;c;f{-CfkQ#pCYW(NoDrebVtUX7 zez9SDT`pW%#|oPZ`pJOpN448Jq>jV3X`IX| zzwqbB^YG|s@3MJrB+wktV^-I|=yf`AT72>kh^zw-G;}1{2nlDwK>N^s-QeQ4q8jvL zBHxVJttf!3`Bm?(L!T_QA8i5RPPcxn>zT3sn6FM(2I3`l7gp>wT-}VuI!%~5Vx~M) zqp;~3hVZXSmWyB9G!yFrV?@Hyb5Ak(HpLUm8S2$m*R#`d!pU1x|!K4`ZCxN zdu^<`RE?WKa#BBLhohw54N>rdbEBFtYz`GpC38<{)7EM2291<^w--)qN0Q^QL!a)3 z^GMd$4WT!Jz(SR5_J+4nCCfUvBs7kVq)Dr_2olx5cS8~wD};=WN|kH2=>a=i1|wPn zQ^nuE{a;9M9x?}z7$*c~yKwAu)&3zuUcF-DH#oBl zId9Y>OP-5~>&lW&B)6x63@WD(+_{BK{McjRX*xrVOJUcDC6&80C z4yXSnr{8UCNSyI1*@ULmmm{&3R8iSxVEWh+i<=)!+?_4Y!I<@q&vum#DYgf#Hf)fX zkzJ~=!?OTQAU1`O1<@G8BudWi90gA5VIex!Qa2KPK@4+{c34C?1;4?REhZ~7Fu{2? zG|vh_`LO<1e^dr49As8kdSFO6d4^o`qLniU4RD8`wtc4!i&*>=!o z?7+b%UMS;ufF$M~F()w4-QjM)`|J44;EgON;0|XR^cDbJXp~B*Ffqpn!rXFfj zRfPI+ToEv0z#@gU@&IVU|Ee1Pk9gXr7#e!sIuO^)Xn8{!%jbdSrxb0OHc3(M|e`SXFSQ^@UcefV(oVl?|N+G$_m zuoo4I`V%%F)OftV6tAqW^n5R2eeryBdB7el0`ZigvJ^8-K@S@O(C zf?&qI5AnU4jU#@6Uktv3##K&#BlW6Qa(PDLoDf1d9Yj@B_BW-KkX4t(3{(*pMB02` zfsDlHcOl_WUHCz*vqC_ShLqk{9Xa~aIE}YmVnnez!M9QJeUZN9v(#I3(eHWT;9WVT zm_g|4{;K%35*FH81CDDmk!CQp-CiY`>1^;o8~`X8QcKTY1V zPkJF$VUB)o9TyXdceU$aa|Z*akD@!x-`_8UbiYOaBYCvP4J1Mx8_YsYC@6YFBOo*fiD$~K zg?(HW`)<_P_?}wRu#{Cp*IMD!)M8xihi-sLt}olmnj=KcZsXi>Zve=1I-l(~Hz0mPHk0i!!jEReN==R2f+aO8 zE9mCNsa)e))Z+HPH+YcHZkTWZ+zHi05!CL=!pWPc5XPRE7{eL|?zi5JJS)x4&faf{ z+6Tx%D+7%UQ9>}paZSYt-Mi=a?DafFdHA9@a1&+sf}H+TGF z-4L&jgcjG>tFrN++$hzu_!^~1)9y4y(|~iAzM_Ao;b{1QY>7)bXAC1mx-PD%?F950 zv~;=X{^r=gGT&dm`+qWakWc|QP+LF^Z)D8aw)6bFX0}ewrG)O!I;WGYe}1m}5i?Ma ztVYMoypTTSAK~}kq=q*#z$l$J@>i+!e_tC|9nuE!;+O0p%;qEhc{u@jlIgM&aNcD_ z)ij|1KId$?mydb;rd*v+vsY-!nAIUseAWM{o&=&H1%6_qj-}Cq5lu_bFlY$i4r>Pi zB0B9N2$$GA=L69oL1>Tq&X$>Hrl$i`%N8VvpwW|m9@3#O#zsf?m1{C9sA`5boGvtJ zbMgcBJmEN`7j1s}rGUwm$^PeN+;M>VX7pPH!e9Z2*f@nq%vtBznnV!bB2pprBQzid z8N#sR;|U;&Cm;??@dH1!u{{C=;atMDZbWi=P}BEJX$8@JUe8g?Y3-3UFCYWWx|Y%& zloYZ-uA@P5E0Z3TA_p!A) zybz?Mq|g%(z@=>ecLx%vBAGUqq>&_uTp2MxFj_mtj*yKGSuPa!b!B#=qwiU1Lh3Vh zk2FbDA_bmm%Jh>%@s^emvP^yRXQKPtVCM6jKusPWj94>7rM0TnZmNT01}-&NiG zLl|1&aCulEZtbvw-cP?>&%cH{F3^j?F2DaxRjBJ;ZdNr!1_^Bf z1DveqXcUh63JmGoHMoKn-xQP7DcqC*2z~;PBOX+$@zWWYWwvxz$`zIGWN{aWQFwy} z5HLR!B_xo9M?T1}J66>rXkPtn@=JmTcHkaY|NH?@n_J!v?s>U+-6tmH#b0$l3z@e% z7kbB6d+gxsF&~{ZNx5cYW9>b+g0Wu=3IGRk~`><_czK%EBf{ag~4*m@liv~ijwtB$iS_n)t;>*kKTLoTp1#L$mXjRgYESqTRhk4D#k#jSba@ybB|K5r^~#I) z%Ih9Fj)e#qQQ06&Vo+JX0@Ual<)DJEK=2ctjgT=+Mdnf9u<(Ks52vv#2+}ZjG0Y4f zQoydJ2rGtu(z4=<5u8?J9%n8{OXd#sp@hbkHi*?NhamC2L5o5m{j97+421~Amomhb zdyE>RA1F%G3Av?j2iI=0Q%@My0)pD3vAV7gR+k#Q*?~ndhx%p?%63M67LU-2_w)CN z?~#G)8!^h${1(Y_l0$qb|0X_TCS`e_?xV=R_dTXB>JYBlUl*Mz zygxGJ&-snf(zuJw%ao$SeXi1-;`fcEJeS=p)<52Kmxz}4YVU-R-m&dF-s$wb z&t*eGA*634ywc-FjA{($OXq7%@CgVuenA}UCvtp>)RxV`IOcx~qCYlZ!3ip?1*nb7 zqoaI0SEjK?+|~Lf+Qe#-I)x++X@n6{@es70ZTt$}+yRM=_CLdXo$_ALd zS$B$NVPo4FqgNNSXCUICDPJcbauJ)9!(_siFyLbd+ zI0w)8%_>5>mVI&sso_L`nW!ifuu=H)&ik7IFFBdh)W1)GMkYb?l?X4l<5NeR}8hY`cU z=74?EfAN&+dY2<>sVlf|y-fz{u4Hf?xDnl|& zAxZPBWTaLoK?v7X8I}_!Ln|awAW2`CD*aOQii<*EEn;KEVKrt$xuJ_>oIZ6VX+GVz zekRxx_6MsCY1dlptqWXg}Ka=9wFo6c_KUk<#r zVuPeigE3c>bYsFVNy);NfN7iC2u9pnrDQ2k?;iUhgQYtb6@r=`HS3{j%MvVB3NS+6 zM!3@r9sue}H6@zZ;>3S6FBy#xf+|$$yDvmIcS`a^X|^vJi!sM@4)6DiThE93y`!pSK&*2taKHsDW6>XW zc6O*&iRv6rf^qrUvHn(4Qc}lRNeW^TCcJA$M<<{D2o!_&ad9eAvW{_Sr_}iP0E%26 ztlgpS!azcL{9I^pZWu&ycGT;|Cz#&z;_39M3ot-undE)68P8;gLJUU(VopWmVBLH ztxULjE$`MIYkK3YW<*1i-l_}IHj7h}CPo2CN>;y5wWaWoa$p)VGX4b3O zIYnW8fe(t|U=digxhcenl#SBl`E{?BS>G7{Cr*p;j^l@}@wTJa_2cQH!Fan&)<=?| z1U?pNDV8oaQKYt!QNDzpJpVh(cn&k#-;U<^ndT*qw}VA@=s;85T>lR;wJOc%cPLng zV^ej>dqBzM+pBBBU|6I0jVR1{QJOAQ|4pp^2Rv{`z_@6>r32R1RU=4N?QLw3kBMQf zb_OtE1K+3o`34C;o-n5kY;Fo8^Ea*vGVS`!b1MWiHL=%dm3Ap|-=IEjXDB>ATKo;B z^FW^Ft1eL@53H*?BLu;qNXW^>PV$l;H6oQ{N|n|eht7vaqr?gS^2QoU#sI14wSMG@ zADeFndOnRdE%6#gJpLa@z|MiWePI$NCQxp-vwqQNdQ8^j{(g`4#|!O`o1rruOeT+Z zy_Q%lH9d;rx$QaG8N^ck|Agc&Xn~!QMgtS*TdvP8=)yzg>_?^}`fECh@+wuqt0SgL zj)2pt%3IJ0x6Ls<`>(X(iXVk`M+v$OOO5&9%9B&#%C5|69eRNNNqr5y9)=%mN}l1rzJcoKZETnE+CvaHeK#405% z9m->FQrI^QaZ_q2GOMeg5pr791p`??zOpz8`EeowL8PM2!60tF3bc3DNF?|5^@)(Y zpIF;NM^226hKw9}zd`H{lJ`uRFu^Wl&o8e#nNUHY2`KraWud8w zIS(rZCQKHzRvZO(JJDu`oMG!C_zTS`cZFUnbrNls^vxtY(K6AWu7r7J0&}ER4!Ucq zx}+`GkkDf3_Np)L=dV^AAU7X3fg$k^aC-yo`k3hW{hLx;MJ2h*DwQ}A0Y8pkxEnH( z>DI~$lBUo2Z4Py+uH&v=g^{K8R=w-01WzI8_}XA;nm92MZe2VFf(ukKwj90#~ z$Cqx?o&EU_ZpPJSQSS5g#cxDZja(cNaZWD2PVYy8p6~C4uhfZN54o#vOLNt;)$@Mb zl{K&C9BQS8@d|akegYO@k?U2mDgRfQK?)R*T5xB$25p4I>?M(92*(cMWsXegKvV>R zclZR1DWxcnm8fafzEJoMHBwG1WfOf17Cgmn z^ub>>^jC&imtTzwNAgqng@3T(-|nMDJ?A0`aBC|o6YS2;P7vqA$wAzzt`Pr^Th4@q znHOEsg3Y`ia?uW0I3N?_wib8d(xh~Z&~WjU4<`B&0OiCapp)H{maFF6J4Vy4eZ@6wl$!z#P#$`$UZ|4MjSzi=<@q zu;EQjFCwnW{H|tP7#}X+Y8_e;z)ZAT>r!N}Tcf`y^cB8NtDQqJK9d!Yjbb?sgv`DoRT6jE~XqVFc@0R=YLG(9F+voT* zQ5d(NJUNNdRe_+&rick0$7K9=ybMf!1BxoK?a~m#+0~&DX zres8gO_`-0StUFn(bK)x4bsQGXuRF{aj4HVZpBa_W#xLF=IW}=RUzEysNq_LW5}~5 zEOT4U8j#Ia{Vu1rHmY=h}7j=&w*S zG6R38Fy)v|ZKpM~Xwmi@Cb_7+k(U~5^(PGK*{X{sWTXZYCNGu(FnOsReeWmp2_yHt zE=sF0ex>tyS!M#-$$=9?FxYHYf(D}LQGJzBC8TJmWB~*K-ti%RFTA|M)FFv@ z(CgG&L>xrHcIa}=I=z!^h+k!N2V{!0lr&$#DuD60)M|P3+T&T>?Qu-<%eD?&NM?uDto&GkDM&3R z4xPlbCp2;LQgw%1KZ_D|TnPoqC15TqWSdb-)~2jYRW}O+z~Q=gb^nxDFVwZ5V%(T4##Cku@d!kiPI5S1@U^NC^7uJ zP>z-;8Xs#QDtPq~TD?@}`$k*+CN>_A$Zr0MqK}fTEhF1 z{DT0#fx;R=+8s*xVQk8IG!7D7p`EMg1JyN6_vs_#SRtED6{+%{*M}2vsjF9CEn~B5KqbMa3XrD=VhSt}Q$mUh5hy2xD0!kC(d< z30YZm9`RT#;tJVpE{Ft0MWM;#^MDVF20paY_I4gdhVt_A{>kh%GJW>elG^`hYk3Hu zzKQ*bEL^s9?VpF)9OtRTJ97=2OW>X`%3RvbB{d_+2DnX ziwyhAU5Lw5#V|WPN(4S4WL5$!VDJQ_$|Dh>W4`<{Pw^bP6zKWZ{0tRu_XhzRBpj-`O|Vg$my{%}vH9HngLnaOG}S zvb%Zq+`)8PjB>JhEeHH|YV5GLMOXVMLpDAzH@vtH4%t&$d_0<*uV&XQ^cT&vzS`Dz zH+Yy2F7$iIq>INIusK$KRq(7HIfP>G=8(bxYOB9krDn%#HvyJPyr`6@EpdE$JNkNv z02`NJR$zC{wE^;yoQ)0qMc1Vsr-^0l)}5$%pH;()BpO+>^v7$-le=!UK_|GhfteJ> zV#O*EpCwgC5pETf-zSk>`!?6xQ)A}4?ANbfr5J*R!x3Lk;gj!}jJ;p+VU*v|!)>Y& z9}3i!BR;5#{$yNZG)XdqBM?UM^FO`j*~PnjY(GAZ)SR4HWp!TRCCn;i_?^UtxiY%5P0aKFFoM+V}-(0m^gx`r#2IscE{Cl3z#C=7vcb=}<_ zv-I7qHl8M<4?*G>GdTIp0_(e%3cekx?!p0iTCPehJ3Q1Fw0_C+4Df9P?O^4?_>^!Q z-|YG0fhTHWYNePuD`}dZL^&idh;*`Hp}P6V7bosSr+fojm!CDW7;j3y9DiuW6`o0G z;AZD1b{E+|YDtVneU1BqBe)Qs55Bl?B&1ss%2$JoVJRRaR`{C({J@mYI|;X;Xn_ro zD19MweVh;>#~{reL#gK5|84j2$MRhGZ}Il8g-8(zjO=Qx1v>^wA?xTQ8%B6(>G+{$ z(QxnG8YdQCi@z6ocL6w(^AkN1i6F>x3J8@UF{XI{ z;5mnlbNjtL!Qm#F-0@fmM9ede{JwLE%?U>@KFKdUa29~r*mvw|B62Pq)BXLWrpqrD z4q`zgJeDOT5%Lk@hK30egvWBxGgTUxWa~D4CT!c&J$=jI603Rqt0c- zGF*6@hP*Ebcavym=@@$``xA+1=6%SLII2(EVE$V)ae)6|R*;@hIHNvs-y^m^9*_xy z?Jb_nzFp!Hu7n*Q8(BR|%r|msj4{@DP4B>IG#j+#MO*;kJG7&m@-F{aG zXe|LvSiwNV%y7-L(|@U4>w-iYck|ha6cT!gxeGbL@>!>7;PH;xwOeX&+;KQ z;H3;9S&8e@w?AJ4!K*rMHU}6J{|MZa-v8v~S>^t8>p`y>gs%8sSohAZuj6XlKf!e3|k<5Po@83h6mOd0&@iNrlgI$ zLBUnSfwI)JH?%@U;7fnFKd8YJGh@OZvpGRBvUdrXku#?IY)f^+r!!l3COQ9z%GX=-7O_!wN}uG@)`UsDjeUw3wQ-v~3yt12t?NZ<(M*EcPEO5=s{;)th< zCCf3g0_eXl)kCLGcmdr>2KFv5U<3|AG4kL0<1MK;>KiajArQ`Arp}BPCpLBEmY#Q$ z;!_D}e_A#Oz(TPv=G{2V!LX|(7QgwuGnkG79KEKHt0=e<_M^=PV~&r~(pFJx;DcAr?18uR{q?;1E#B-Os<%4$Bl zDI2H@NL6pUt``7K=`s@;%a20g1{A{ogR5W&i+tUb_az$b8-eep~j3k!}=t67#BwIWn9@n zPVVY(pX1wNX~5wRH#M9Obf8^{+VFeJYS!}lfO<0ug3a1SUx zaz;qQ1^4_$Lv3>wrCMlrghtFn)1!!IV}Qh5V}`tZ_k@yqU=!FJ+dk=%J$l-}aknCu zs3x@(AiY0+uzFTsS!ex57lmobjsIh@|dn|T8nv0gh#iw=OuAz;NS2+n(EDr?E zivdjC08jpOG!LwmE|K9Gfw0_n4@kkCK z)sf2EMpy>46{Yn>D>~0Pp2USgV`S^UT;#I;h(VQl^q^3;rCL3=Dnna**Sq(FLG6V4 zxT4^>Swa)Kz|i+0u539Nl}lUp?o!va4!rEi$iU%wcv1$IlF)B(FfbOv`fJ(r)DL{$ zt|=6?)uB2z0;(CD74(|sf&c*knT)T4iv?7?Ta{<7_e`Np(r~r?K3QV6 z&4_J-t2mL4oylMB#6V9|+v#k4w@Mb;7jwd6G|_yiIRZVsJ+(<|rn;_}cnF%1&wAE#tFsYxPn1aNsBZ-=lF#P&4P-mu^^L5Y`@<) z8unKc>IMy$vy`_VEDDvbDmQJz4lU~2_qV#9_8`4Mz{#PZo^nD4?$?caCYRCnE0cwG zKmIG}d(Qu>wnZN9<^L?jzI=E5bJ(%}Z!Z8YEam$ZD43jF?{XJT=*%s1&3+fzQeEq; zzpdxS?p?3(l|b=g&*^nke<3eETW2{H$rfyK@~y&9@@s{(63-;P%_K1ayDO-#S0K;9 zef|9RxjVOI;?$x)$+${vg?1ym*H5RWZGelP_qFF?R@^7l=ML=Niu_!iLq)oFO;A6u zk3H^YKKr;YJL!Re{LcqeGMX$ER&)?LG$(!+&Xw>$b#l8LV*>2l#Z~fg8VZ{QY51pN z*)1AO4_=L8vG^b1Sjw|M_sw&KZpUu2$H?CIIaAF)rWKli;sPZdUFf=qq{ z#R{X**s19H()4xsLqlDA{~Vra?-?}|5fdN$Sne_~Ys3?&8;ESKm&m%lMZw}Dl~ohx z^RjSPm{0D#Y1y}mbep>Mg!Qet#op$v+~qvEYJ{#15+b_gaNW{W9eeIJr>fWUB+wRd z)N8urJP_V-^%ms?)Z4jbP4VZ_>UJ~Zs8k_3EUf`eRmpr@8NI$q0@J_aoQL)yN8rCF zr8nPInHR_OfRNf0rA#OMQMg%}{zFw#lcE;T+Sb{Q;i0K-9_bsf=%3AD?)1G~*O+S3 zlrB*TU*ZYey-ECq&?|cxz#soqe!W(6F*e!yJKI=y1wk0El>H*v&!s-=vWO%5F>rjl zBB^6bCI+l}n{fu=i$d3DJc}hm=8C}tpNBR>{7qIBN8IhkqW6GZ;1W3br16T582+{~ z*`y{=TmnvZ6LfT}8Q0_u+^ktq1-2Gako-+JohoryI3fNFX+Kx-F5QcA%Aj=qJk!&R zU1N+)|12OL#>bD-r5<~4c9z3&wStu6WEL-!a4ll9dD)|Us3^ITpB*2UG{4&W8k3$K z+kYm(QErE~p%yJmNGPf-TSt>}6Pm>eKxD4M3aI*U{%WWQnN>>(we4v3Cq=9JxWMR4 ze^rbAG|RisfRS#su^xPPYFKDvSfu&P?yFrz&r1_hLCL~J?)Yo+#%qHz&+B z)%I_$KOwebqt<PM$rlAJ)VRK2z6Zm;$x$V4skDka>Y|l114;STit;YGBU}S zNRng}dgQ2tvEJcog$1Yuv^1^Xu)`;L1=U}x4_$dC8t*9-j~tA@Yx zu$%8@qZ!S{Em&At4bL-N|JL_{Q-_u}3kyY#`wAt|_KK>_r}TWDwuhc;cSHSr)N5BdRR z3HXe38p3qLgw8mqhhRcM>|kTZQO=fOEG#hV0yqfVzZMZKG)5;(eIMH1WbzPwoch?6p&%-P6Aw65ZBYM&PGI9l7Rjdfx4( zSa3N|Mhsg4(!gWEYwPwX6yCTv#PphVBCr$V&LHMc*eUg)4TXCQ@pNyuOmh!gU1d8CKkCJj)F}sDl3z2vhUA5CKGrla#=t<4=1gkIj&18ReU?p z#QAi#yM~q^4~>j%Si&})sH~dKgYPA%oTi=w?|yjo?^Ab)T~knp#xwJeoOI((ii*hL zY!wn0K-p#DL+N=DHrAFdwCdU^&JXiiSL%chpRr)|PGCJpTW`B^fD{lc6rgil?X=+# zUOdE08tm@uTs3`qBlm?N^klG}Iy~||j=(0cA-T6HsRE<-aFnAYK!UyZDH+{b|^OJr1=}MujjssR=fdks8F$XDeiR2u`>x%;>2yb3z(Q#Ly)ri<*)+ zG$x>A3L-DrU)j4J99UaXq}PKB0f1wT;}aSekdUlJY|HV=K?)Q6osbh73T~gjw6#g4 z^@7DS9lpDb0jMoDHG*ack29A0Yn2PFrxAi$uhycq+N=+eqSebN|7KWrr`tgYh90`~ z+VQcOMztD8mfU0(3lgAqji={vhenj0waU8o zd_My5(Gn*CEyzDga#AuUGe1CPlWCyt{tj%>z#zk`*xQIP~RJT z1oYGAB@gbBayQ|_1}VOdNcrrqaYe+$c0V7c#Y{|!7I^^)k7zt*Y%Hv^wg+{07|)_$ z8Y(6vdEO_=k!XCnH;Hh`eFnzH_LEeulW|J(ToWR+;t9Z(4%})4C zHrqRt54Q$i?l2w!0KYIm90Qmdfd5QRF-b=dH^NBrFB1E1I0~$Q;3BCovCk_Z87oBk zn+0DCTThLZ#9f6aR7Oh7MF}&7r$xJGIQSGke0ZNfC-`tvLWQ6{9D4RoQX-R+9hctM z6FJl5p%PPZ&7fJy;N0cNAW8p#2ZgHeM|-uKHLuMoXNm-2_G@#Lor>51t0 zgTAs&2PLz7n zF#5_;o^)hVqR2Hj7QuW32iXUIL80oHw)oR;5(>}ty8J89YpEEo#%Au->3nfK@dx1X z9|Wk^BV{vNn>2aPl|rbK00&Hx|N0_3UI0|UqNUBie&5OULN$*`axDPd=k?@jw}n>! zz6t*R_s1o{N8M49Q9|2)0Fs#==dS~F6XTtAsnc$+V9`v*=O&re^K6eB25tcWwFOB1 zaf=(y7NH)-Mvrbc|GnQon$MUxLkIp?Tksb34bV+@9R4-g=JThEu$_+ zmFRQ%-2mK7hTaQWjuvpRL)se}`gG{eKNnjgCiV$6V)!IKObf)OFYueScQJ=SF>S*VyH6mh1P^LNcLQ zyWX!+j+@O!$LTe5qpfu~;;*8OQs)^?=}n=nw@U9i&j&M7GP1q=-Y>95^QpdYq`|u- zb(}Ahwkq~vA(O;pQ0xNacwTV<=UTjZi;%l zS_lBSh6&5{RtD{J-6reQ`gq1Wd-muwlQ{tA6z9NdJcEJu`g*rj2bf*QPmgr6!;4*b zY-Vso6H>R#3Ujv$q2=S1hPbC%ixwICGUV)BznhYe>92(jZ&zN7E306n4RwaJ`sA7J zv#5EVeafHn6pJKDbJ5JoLCUZMp0=+vaQE!1t$3@-DzoR6<+s6j%XuJva&PWSpkevO z)X<@%ZZ^2lyAiqH4Hq8Hx)+@bKU(IAg~`jHT+~W>*qzd)XEL1`Sof-N>H7|c>*t>y zpZA@b6CkLb8x+lnqS)Ij;S%dzjG$5)0Xv#!J&mE%aL<0Br-}u%L_&VnY+1culuWFaB=e!JJKD(I3#NPDqkZqZMhK7>5d$^tpjYVaig)M zWSZx+rKV!PKFmNNa%5_7pVS+&vQ%I{4^CN&xLJ1Tg6rdt1+C{pK%a@1-bi6|c%@F{ z-4BcF>EG_daf(PI0o*1{@kTa2G%KMWYLn67&^5OdN4 zYj0lpInJ?tscq=ar2>vR8mIoY6pBYF>gzKguQfC{si@3n4!ZX$Eo3{EbpdL4LjN^< zJB$~V!KTcc(4a%*wGO<;6$S=HqI{8iRcp~DHQ(JgUvo(~EEQY2Hf0ROh~knr0exLH z4qN&~^>`J`VH&3ik8CfJrl?m@f_1d{Vx)&4m?@vJm%oAShUni7uTqM%x#lccZ z4GFs)cy>O|FTRvp+6>YeqL~$S_O_hl**ggJ<9n2)rmgU&{PaL>Q82l^8h<*JD&qlY zbY;=CCp)Z=)(@o$0U3ZI_`17se(NYILQU0og!>N#*YP?t`h4r>9~&J|RoA0FOeB3; zGuQ8n&F(bu-~IC~AuT=ZpXwLdy5lD`s=hEmZA2fmK- ze~GGKt{!9PR}Ez}TRX0QDko$l1`dYBN&Jw@XFy7&5_n%iB@8KT1suHZ2K^Y^?ME>> z82BfrrhcTx#SyG6V~c3%Y6Mr-whN9ddXalXy~r5O3HFn`PP*4od>gnDkGpaEaFqvi z6DAxv4;}WNc*0%az8*$wmGNy-PTY8_r$#9*{(%|~mxB!|Zo$$Kd^`Ud{I8D)P#^n( zE9n`0n3JV>zWov*3z5dB2a}%nHY~SB2iEpoq^`gRAf)@VE!afkq#Mg#1QDiwg^FQQ zxv0h$iAI=%PZkw-1`FciA-5x?AuxjZk%&w9tEJ8M_(R`ts{4+4HLD>E`cwcMynGBN zoAB$=wZQ$G0*m@{C5+PNfMivw!sIQp0(e+jo#ba=0Wl@<^g&3#4*wQtN4a}%l#{HF z38Wz;8PCtWycXdXeD?>I5=E@wzaggZ>(r18TW?V>S!C>rM?WEs2V(!UmhCBS* z!Id>gvFqRode15Z8*y3`k1al+>!$%u3Id>t6wF3L6fC9d6H zo;`6b{@s|>Sbz;$GnbT2>^F}-Y4Xk?2!%s)(>%j$C4?FGoMRNn7J-(UKWhxPw2e1y zPwYR52u&xQ)e($0m#htAnnZl`Y17e5#$XHQW4?h1f)a9ilTjW`*?Qs#C=Drhed+cZ0(&x#qlbipJUG>nWoQ$+)= zKIsZIw2atI^cwsQa^Ti2!1(uop9%65BA&qZMVc_5cze!+Xe0|&c4WZRW;5L$)20QV z0$2-jQ;e^$gDhj7hZx}QJcv3^q2pf!7ZQFakVoC6Vy<=Ul~tx1KyjtdXmgb;yt({5 z+3nbif0^=4DO4YU8*&?6E(=$nR@q-HUl9fz@r<|2{J)i}9?utVAnhO+!vyj)VLdgU zz1w1R6by2cd7*u(agf#|lz96%{-TuaKk`=Rt{EgT953pHj8=N&03^7K*D7G^T&!`* z+;m4ta~9#r;tAXEc!K5BrY|;jxwBe{`YM{ddEU=6OKprLCnl1ai1^=W+=yvwN1eMZ z7&i5lpDt~6PR=(TzaMT*=QH&j5?OvRg5o<|Hmf!Gw$}sN=R@wyK@ypC$SH zLFArtZOIOyiL%G8EvF4uUnM!15tVWG9}<#6LcsW*ueEu5s;a82vACSTQA^Yv?ON@9 z`g;23F-Q}AY?=&7&l49je9R0>D4TS8sA*x>#bvPyo?UV)Al&E;0Iq3#oa3QNG*Eu* zEN`pXdd2YJxO(SpB65|hicgrIzTP?q2$&lu8oZe+avl}9#h_&k+V)5ap}K?h3T{PM!aNAO$*o;1ayw?_xgKRRL7p@ z(^KRUxHmS+W*QZtQYtQbh7@)1>UrSyKah^&Jc)OY{wBUCBkA_cdMQ~r$rrE|yUyM2 zY|>&L{hBz5Tp9K6C2)_a01gq@5&3VGMvhUclweN!5Z#}B#wG$JMO!Ew1gxCW)DP+J_V+HOFe;bIbD?CTWCdW}1kEWDOtH;Swi+0gq5Fdhw zP{!62eV6Z#8(^{cM89L<*&7I!`9+L!ue;vw{^+aWRqD4FR2`YwjBpNOkTA1o-hiU@k@xZIzzOfg z^B<*uG(T?8=M%O@zsh|XaZ%tI5b=!%l83*7Nf$isPp7$0q7-FVh2d^H|QOTM-OwHJdZi|cTymFHk7K=As%6nxsgCm^;q6Yzk z4r^E8XQ?rkGhf>;xBd&@9ZGT#ZPjjyD3J1Uu*;q13SmVaJBhqswf}sIQ7lXPO$0QA zV251M3RRf;0>^{LK3Ozt+!q(0{B}Bj_x$16-W~4v!_3<>eo`2gPR`$TGMybmBn*Dg z7XVDF-BMtl6Niu8P$5QiYx_SDfDKo*i=;nt#&LpM$yCaAas z#!E54!kfshGnyRl9|BAMeI6Kiqa18!sGM91hNi*u_WE&_xVsjt<#=y%Eqi})sT2^S zlN))coOHkX4W8KDwU_385k0{;T@c=ELwdyOtXJl|saSu0g0?yeS#mL%X~9E>_Y8hI zsk5`wkV4eZ_0COK+>~}pgmuLX|Bn(6mO^vik(2SrV>v)efI9FG<35YC@pe|&zaOCf zzdaz>*yk@Q*hnaAmb8e+PERAG|aQ5xoo^0I3T3se1%|GbS{E3 zmv674;%LBEf$FmoG4T8^NbRoTzhpUVPI4e`<=H^&OA18ci5a1_Mb@bm_Z7Y7(y3Ig zXKyA6YVraRPsjDk^XV3R;_{>5e zhQxSWf79@nLPswW4nGgA^ayD)eW|!kQe*|vTjVH=d8547r0J0z&L2f+Ts(MV6;fzYa&c*wEJZmyz_DU5Hl|IJ?0tnVeO_%MKKUh+JXmBC z?0vSaFrE{9#%yAnK2XoyuQ_c+1)UY!Qn=jeDs90>me19oW2{zguc@!1w!1hkfBalo zH^WhqR?Z#`FH2Se)S^9OEA*p7#p0m$B%$j5s)J;Om0Qh9Vy+vz%JKnb3PZIBJyodd z`+`WP%!aqf_xy`v)p6A$a*zRiKg^bgB8}mI_fZYWS5|Ty*OwcpIVvt_N<-RL?@$)tm|H>DHmr6x+AN^ez`-l4tuubil7Y?1_`DK5xC7qcqeGjpeD5r# z01u6y!bOgPGCzr=!N5+mBzSZAN=indlR;-aFV8(y~6w*lyM3mdC}B>AsG)A8x3vjuVz8g6A3!jTvpnkU(G zF05n5#(4Eu|CO38UGj!YkeKD3Pp4+YzC8HQ%iBUBLo?UlfCm+gpY8Z%N2R)m`kPIT>))g(x`u9P{`6D}FfnR}D1J;1tvd ztPyc*qOEa={vsIyO1d_|g{rcjGgX{@k{TgK_^vdtEZwIf*B zN3NXi@+&42SLFBv>R@40`Qt?fetawLb0l^$oqpJN6o%2JZ|nXT1WnQQWk@697C%Ht ztuLsxWJp_{5l?vJ)5dJu4`G9uEb#Snp4Ak($YD{GNP2Ru+r~EA3obvnBqZmJ)lgj& zB_LnlfSsNiJA@P@f{dGzERYd#ngx59&7|$K$hNYWe|~{y`_Iiwzy=joBAXMvWRLTgr^j|E#+;s>ih0s5Ee7W`Y^~eROVJo#i6{bg(fPV>ySP2^%@D6MMpXbR#vAE?Z z1j6;7gX4V6-*jl6B)$n1lrbh*&t!2of`IS^Eb`ts1U$u`Jk+`g<;7y&j!r$=9011; z31f#tK4HoNx%LP+oWEUmOr}LsIJ=id61iI zHzPFDXI3B${_J4jo((USzY#S}n3>O1(m>uwni)e^h4!*B2;XunHQy^@ZZQ0PQNJGo zjJvG};;XSDN&6vQPJu$9iA^+T<^OWcD^w;Ffkv?h2t@^9E>5NM!WfUnrZmus|9+k3 zzKLK-ps#DX$orBK>#qRA6cc*zLP9qiSa-d+8!MFG9l@y?#_N5Qbc%|Em(ri+aZc#1 z>En`^<*LX$%!){iV(8T&^Znk7Svfc+*eX*E@cnp>atGTEvhgp2e65aMXI;KofG*!U~AY@9(8)wNo zf~mPjBr4#%E!!WM8Sv-qmNY$RacI@DKjwupQoZoaWJdq>9Wc!LHKh8hs z`1bDAZh$(8a9_p_#_kQ{@tCUZH}fti0*3MA*bmkWOUa7R|4Y$XDJJt-y$Jt3<3Q% zpxt^S_B5iaf_cAEX8i(EXo_zn!d?sU&d414c}pyUFc~y`6l!q!Y;fCrqFArzu;wxP z)32lj7HNpR5E*@9j)nvZK+l%H?s(2#?1_i$bSATSWngmie^L zYeWNqHyu=^cC^`q(f6dK<)Xa&`Tk1C&IT);h~V{p9uLk<$`092R3ci%9yj!~v+gly z<~p@cv4VW8mxzPV%DiO$`Uj82gE=>+NJ&$R$jkgp;{cWGSx{KW9bDegq4j9hNpf{v z*MQFFg4lgwQc@HYAFn4=*b#G#Iw>7f^H+nvfpsjH2(6(fNDVm7>A! zTT5;tN>r?$+!k6%(~&Ow>L}u^ni_(ANvtl$bZqre6;6&?Rksa=Q}1`8t#R+HovjV z$D*^Jsp&<>O2h5(!m%AO2Q@COi}rLtrY=P#lDq75Q)Z68S$)C0=1)L)6Dj7v;4B{z zh>dEqgI1N0Ra|!K$jL`D87@s`_`h)h6SK%N>a~eVLn`{zh_FLeM#aAodZhli}jKO_3jrwN=W#j$6X5I zDudlZ-K4F33Z!-yp;sYLf~MtuWK<3zu(F3$BBHvtWP6#!?1`a?*zZR(=P*od8f((A zpdWIhOuN?T%%?eBj3ntr#){9WH5<3No8G78%tJjg_^w`juTw>y@1X@h!9cY?ZopCK z*|A{+?@>N1`c7x6N^;z_et<=a9rT?g;t1f15Q@(B0cJ}V#sp482}o(;$#UM1>*~Rv zeA)w6R>(#c+rXHjsEfT`p5S^bfLoG3Qc4pEU}<8-+zX!ZxUq>6hK}6Xo;N(RK9y!M zU<~ku=h&plB!ydyDFzLa)b4?|i8d}cOd+L-f2^mCdsqjf&vm}EYqdX1cu!rtBSXJh z5(FMWmFQ@zZ7%O71^yWHdL1ol##?2;Kk;0iQ-sEo7JuuxI#4c=5wntNxH-1$Hypm7 znVVh3e2jM31bi$cg==LIK?N$zmAoe zB0fm+*xKzS{NU0u<7drP^SPVS9u=DHa)8RHpFmsBfJb(`RHN^HFXdacdUaRM)a3Ij z&Ck*1miVYyLsvZ0!w2#FSM)XOA?UByl@9g^-%rMs8?FAGXlEtp70c3beC<_iK>P(} znf{0;HK_C%!3|U_x4?iW?dD;RJpxK>j7O6WVLxdeLY6vZ0zRjch&2AQewgh>i!orV zx!?og#|VN0_R{z5$i?ksS&x>3Kc@D6 zB9%`40NMS#Wg};aDu2x1m+1pwD<~jQqh5J+?HJYnkKui%1t$F(A0H2oj*f>6RbhDT zN%-dTzEc_X1`ALVZPhE+Q?2;_1MeXM@`M5dT8fHm`&@Gv@dXs;s;-ov@6-S=_<4z@ z^!Fl_HQ-f<7C{1)#Uh!?=l_?a2O!cJ5&_W2C=VTFdQ|_XVG2Md z2mVo_I0eOZt$0Do%Lg9R`~74l@y|FW*pKrJ@So<70lJQgRh7%W;R1%;x_Igs{?hbL zS<$VPJi3GewLl&EMg6FTbgooGajp)y#sBE&ZLz-i#KiB7ZM(zZir!&+0z8^XRdes2 zFS#;!f=*`Afaop~h63a0F!*t-EwKkdN&aN6?}gTzm%G(!{|8*sx{^}~K(i|Pw2B2# z*#6aF^p(;%;71yZ3mcl?vdB8HW}%4QyYt!5qMe8-pTqKBN)S9qhtVsop~4QM!v1O( zU@&0v9bti@H3GOlbr2GDI{XS?D6it2qdV+&*2$FM{`(3>1@i2rjmUV)8J^uT9p8P# zJ`k*nrchBr>V`Nxo&=ml>2%O5gF#T^jxz2jv(qk?f_Az)jxyPam~kXDZNrLC~g62Ti^zZ30) zALrlhNY`Jz$iIxaUW>W^lr|>*GBq{bzZ)e;l#upP*=+d7 zZ5Bw+YyT=89}5{AUW1NqxpW|BWQNPQYm&&0s{KDZgFP3UMbwG*&i&7@#xyxlhNabv zexh#PHZG^(L?Tp7+^`E878E)=5wFFhM~fO^&>DLL)w4pvlSNc)x4}|};j{BW6iY^< zCfkz|ypL_#GP7r~;AS%c8@5vOSq%pbVnf&baW+kfF$kRoNKO7U;)$f>MaFOMg*~Ii zD=MKgbL+j9)pep$u884jhj>66CBjus@Y0dS%DdaZV>&zp=z;_@y=!CfC^^%m7hFtERrmym*9s8js~gC-ZnjY_<*%NLIICPF&j) zoX=HYyN-FPx}W@1>^IR+)w?>Mn0hDn0z21$+PLA{DW9-me@_pr@Q03G3mkt^VR|hX zjck9CPqn1n0V4r!6)!QaWROg#2+NuW02&|We1VuuXZ*qQ_r^~tJeuW$)>s9Mr~G_? z({L`soF=CMkc-64w$-mVcI~`loYwH~+5807c5UL}EXKvHsjot%EPfBVal|}S@G)Uh zUL^=utjn3BTpGNmQ{&Rpi@O=t{^3JIpqCr&0*{O!4`qOgE6_O! zpvJn}Fi|T8h*$@+n-jz5rs_OFZ_brZ>9TV;`)&3B;zKU=i>O^24HQpS8nY;x!o7P z;wq#zZjvA6yug%ByWN4nlF3!;35^&iTb5MaSGJe+`Z}&FqI7}0fzG;D1dxRYiMn6X zW!?Z<)%HP?-gM?5&?`V&lH_S9Hr}lC?`hYjkWe z)OaN_X4=}`KPrA$QZxp%^ceHjlvMUf=xK8DS-CNP))|Ydrr{NmV>VvI^|V71v%~Tp zUPAPJSUR>Hs0PFz#hpaap7}c#Qcd4?f=nX1a5zN{^y#`8-pzpaNL|Yz1nZ zqw zZf<3o0p1Mlp43Lo&yodBFS=24)!yv1S}tLSt{9y*rJ*vO6K{1Urr82!$ByGq+d90< zWK3%7RHL|2!)rv*L+LAM4MSW!Zh&S|ID^-7$7N>7sFVCd&$0!!CHk7UFo-G6V2C;zn{}~76?BT!JWc!-pg#ncsy}#AWhuDLYyS8d#tXFKQ+604f7IJa|>=^ z^T4;HPhnwUFy%tc^Gmp<^@BofC1e?777irK47T6Rz4fok@nG;ms5|Cq@$2>KvI!~| zl4i7?xji9=C^uYzrwHZQj}K@f%5}eA=@UKZIEv<@yKU3na4T5=|M(QN@Y;-{GX0ZYDl`GKr6a{g4cHNMDgh z8qOr;nymfQT6Vh&5=(*PEc}&?9gP5)%Q)u_=uL5!Sz6g9t$~AY;fb0WNlt`J(9n^gb-Nc_POD!=^q4?Da!m6jp9bJ^H5wu3lQtC~Ax&>0AtZ0- zSVqK1$@54SjQJOEseKBXbk4;QgLAEXA@v1P3Ku@(qNj{`5VU4o9doBMfhf5@;rCyb zvd3UaSblek;kkV9{aZ=-FHd4i<2;Ae>%jw4-nIxH$i&s?TXwk!%BHN)Y*%8Xnka~? z#VE9_u9VxJked3RkR*7cs7_K4!rACd#^QuNivq8rA%hy4A&K1pz<0|lGbvq-1__sV z6jo#u3nMRo`&Z0bWD<=!6i8`0tSm*Fns|y&_<-$4ywj8os7oZul=sv)&jw7`UnIiE z(}q)}Hyn=7_1_5#L{VRQR#$+?YM)7iK;;r4F)=RGo#TBrX(VYVX<{xZZ+kprU zw@Z#3-)Asf{v0yW7*ZB8GAw7a8IfGR?!CSI(YeAiKx~-?5KRZl%U-!wYyc=_H>m5EkJ?R^^4xlEBuWZEHhJ4*5z3Xm_BZHF2V z_|an;m=o;aX!I!1lUtjG0=Mu7#5Kz$eGe0Q4`%ZRIXrd|YqT85ESzVCub zd9)2N6j96jU}cN@)DijTzbmkhQ^tsuacTMB@C7HH$No3hbVm3fgMZ%S#bYTNTc>oR z=$M9_QI?Iha%J(-MS@(SWt_@xE+#~!TGajEXmFoc3|@31Z`j@n6}n-NSN{H(<7+U4 zaOFZI`ZPBW=p2ez!S5?jCv{t($HNgdCgZ#-TVFe-*zR6r^dvMb23}z9VPS$(3jW39 zw;{2}B&_BEbYYOD&3TloDlk4IL(JPnJjk;I+Iwu83M6(zP@`#rP>{IZ0OejA-s*(r z)vnJE9*082u#P|_qGLl4FXA$9^Gn}LIE@(k!&?@iDZj$!B)3uCn|86o3Mp=&?p_2X z^htr&UA|Sf(I165KAv#@V-I0&XIl6J5B(C;sGQH z3uqjVX*Xi{Rytfv)eL^}NlYXTEBLfN$kF6Xoa62cK?Mc+J7Mr0Iw3aqH@X%A-Z^yS zUTQL7@ES756f6p`}K4zRWVT`aAc@=MI z`QzcOv-`z*vN7sHZZ?g2J{zPNtsW)1?*A!WZutLdZgwrJt;L|Db?(@4+n6#6`UVtr zC3aW{!lT23hm8Q+5!Aq-pgO0cmDNsr|H1?b5r!N-w8ykscFbUl?za)^TZG%N@_e9^ zID#mE8++6HCa6vWd$!Y^q3dp>a^FKmL4nX|GMgI)Ll;0eZ~1Vy*lobeBOnmPWpld@ zb>4IZtgdRPsHx@G)gk@|K$}fv1dNSA{x`uS{m3{W%;X_O+YTV_*aWvCjKh}|1{lN8 z={leQk;B9ufK_E(hE4Jpx0?(i1yyy4sr3zk|2vj=EUv9cA5OrbQ{NA(k6{|ioewNP z$R!vM(16aeg~^zg`}z9*zFVxGvN~D7f*l+hO7xppDBRV@Co6v1bb?PrY=p^^(*dhM zH!RC~rG|>*rfY8A?sApMNV(JTfZS8iLfzcT6b%S)1+Wo1TqkOr=kYv_={JKB>2eYI zooi&hJCgi^FJjMV84(V<4?3gdPJ>_XgZDiHnv4H?#T$74NV}L#oqS~&<2#YWR_Ef> zu#AJq>GbRO_7}3@mpA0vq|P%O*G%T+X)b8+;q39*4F_FtoR&Z$IC|ptd!W+g>xFZ} zksNZG%P>n(&$E8=C5H(~VG~JZp>m2GZj4aaGkVNX#8IWgdfa z(B>1j&4I%&zDeLO#h!y-@O&>d7Jonz_vcP(*$J&44MbqqqPv7VOU=bspfE+?)?wi`iPxd01?GnNw+lz@VmPRG-~ zFLMfN5qUY|ryp_JNUqxkCSASAPa(w(#W!f^(Weh#1@9vC&-`C(74!0a%q**F?vI4H zH;;7Garmjt6Z*X%?Uk*8Eo)r}1*5QH!*{rs-ZoSf&i8wJS75@PWGp#eht(Saa?TV) zJ`w~bzVF?LhBczAyLv(nZ^$N9)!ep$2V9oyql=TGqeBJ*U?;|lV@MuP%`1CHS7gB! z?@g9%Ps=!hMooTSVy~|rQOqj~GdvVU(IPJ`qU;C9nfCGTHCvfi{xtGG51uybO;{7( z9|WYNLkGv&=p@X{D7n5JGU0TRny#*_#!`lUfAa+Fs+^s zJ76MubY31I&->VpV?Wq|1@M_8cLFjz>75Ur?mNzMN4vZI!nWk~ zQUtE9PvMc#eUWJTdv6$ef&fNnn%|!`2QZ#*GKUxC=KI6f@o@k1`}-vYaSYZjE(W*-=3fgX( zYY@WrXjMBAiM9|5`by+QDaRIIIPUpuwTOB|Km{=@OUrAaivlfs3qMbs6>%q#%dI9W zL_`dW)8J1M4VHG=sC9RuM!PFaYE8py`n7`F>v%#2l1G0}BN6TjCO z<0yXrDY@Xs3!((9zz&KCPas!Y9U88v;+{9AipB?1-ZL4Ej*~hI4XpVI1%-iDoU}@- z`l}jqgNh0?U}^@%bWS7a`FwNat}-gVM9apXBV5Z3$t3h__>n{>oB-Y&5(Xh~y%nn= zlf3s;$z%d4jCS7xV-b>zvy-53q%TEv74k3UdSP$qmHVUARD*|Oy0-5QYloRF_izxz z@rfjPK47n!9q*l>*SpbN(Wvo<#qD|eMADR+a!`8(YL#=5_C=lhRnl%1f5Mw-QUTldw$K@gv>SH$>$ zvzs$$i+-nDP<&_awtJi~X{@}xPm3pDG-{pUg4yfaJ2Axx>bB2?KJtOvY#-3;ZcrSq zt=5N-?Ai5}x8u{mg{gFJ@p~4tskQyy1Q-b)&&OpHCBTU^{|eafMU;cG7B2cFy*A>n z1P#n;sffYzIQ0t)D@((Xso&BN)lyn2Bm{YFt*U1RTkiQzE&*APXD-z zQ4;B~!G5Oi5>W+iPC#;J5mi)v)20@-te&$atNkGwY|8OElP_F}a*Ny8&JhGsV40Gu z*7}qJ-o?6Pcz`?GfCI_xfzhHP5L4?DW0>O{hz&G%Mv+o{*6x6WyPJ~X`Jv)cna~6QpE{XYupQmL$n>N)y z+Oqa({Z14^;df#q5&dL5o=EuaPC`mfAkPbTNm592ZiixD>0BLVD|CO&Mmd(h4BfA^ zUXQ2rvY31q08uIMcv5O=YEX1Noc|%8J-qR=0Y&|%R2a3@o}|~`UZmJc)NSQxRY0SU zkjXyJwko%mATTI!sQivatK}4GZ*LC}=oOqU*GY(Km`$f5`AVyn?$qfz85|Tk+AM;h zD3DG?B{IOBSy@>zqejMpVqlQ(7rZtUEi>cOEbZ#T?fq=1Nyjdg_xAQ~)`po_&YBrd zS}UunaN=loq$eXIn?393pIA8iwz%-hLa)@_k~gXZup;bg#Zo` z$B85@!TM(8vR%o{R~-Fdpby%!PHN{MfI zZ-546IUpQ>g!Wmb4snWn;o)u3CPt6~Vb6tbCm-1s1d4g5+RBW~*c8GlY`&Hp)3Ab( z#(CN^8xt$7Qdw9pgwiMzbixjAP)s`YsZl&=^bp{-{4JL#CH80b)MhW7qs2l@6hsQI ziWeA|^+2vj8fmzm@7a`Ck;L-q=hpU=u?}!}$Pv=DOR(@tABWw;OD>V+lT<1TQ5$io z?t_GO(J^6(ye0B=ybP*Eqtmu2v7~Hr zk@p*Gb{v`lMj)_$KWu-DO-@>+cH24|v+>%)?6^z~fVI7BcOKsFEt2f}h!#kdl7)=X z*h(&!o7(C$#X3(vNkVE$Wb5+&6KI{ibFT6I!|}!cUOl4tq59uC=}h7VmZAwr)4;p`o0Qq;fxMqM0Vt7BQxVbIKPe-V^2Qq$nT=dQg&K_i^e#!D?6v649W zrN>AAmjy@`5hszPS(h$L|7Q2G&<}v^0FreZx<`4{U)^UGrGUQXg)3DIO%nqe!^&b zj{119gYmNS7%F0R< z@6Dyk9($1-D(38&{R5-?)di;va%GT#0b2%j=(WNsR@RoSK!jA^K>zL!0ti70EY)wl za$B2=u2p&}PNdcyH))zvAt5cMe*zzpwD#ghq4ut6J59jNCkG?h6ba-Fa#=%wJ38&V zV#m|C(h(I9-Ib5%BM2OFI%>m{L2%?UX2MYeS*Tr?q;0iKI@YHp3ZLKpR_W^SoTA}C z?APU%_F3)tG$Jyc5C8J?fb`s|y9G+Kwi+g?oJ(n3Jy`Bnu}|i6;nQnLuGOLgl!yYv z9rEbZO6T(zO2@}+mFPZ=NEBD=v>_=7gc3tjidGju@CAV^%Blq45@g27hcEEN5RygU zLygzuy4RXS^nm=rvH4-KZv23f)+k#l=1@XmdW&>REdb5K5%m`FN7QqyLCWOYofldf>dCegT2l|&IS>)^QoZsVkOgJ{}hTzw|keiZZYy9?`y z#rf9eCzr4O{rtk7l;fKs*N+~n&1@zEN}fU91fM&W`=$fK+D{Y4o`7IBDAy#8EzL$e zQ$rNTiiK^AX(p+zIqc6I6cu3~MnC|N5q_V7ZnTy_%-QRmG2X@xv{^J`yekh3)wpEa zV`96sj&rJ1^llAhf}W0wCnhtKD@IWm6asLLy{BVVGIijZydlW8LE|(AE!MM#?qgpo9LwN^bEPg1(C-O64WGLrfbVPf6EMz_8-Vte5Wc z$qzzHF$rFw3?uX~084ciEBaiSQMnTQ@2Q>nBk+-H(yOlW$fbfmBlyg2-4D^C^yB4}R^xJhtKv(c^DU*#BHK%pSUkg%w8QDhm@KFPowlxNGTVo5E=g zf_M&=7fKF(JfH3DjBkPe>byfTY2=mV4~SfpDVN8BZoL%#6fI=htshRbQ@=O}S-l$s zW9Ldt@Srw>xFj*029>nirPEyC8t65qwStLCxa)^b$6*a_A~5x!MFz^Sn+0E#E)*ST zauk|h6H3H+%TZ8zhvcFoLt?T;8sUJnzJ5qTd59+wOgIlXb;Jz2@VL`krGpI^qV-c1nu-cY3Ky-`1EPc*Z))s$KU;jR=hPIW>iNFuvgJPDI&g-H*gLsc7$I7yLv zWRS+ju}OftMmXX;yl=<9FCnF=GFIV@jk_iGhU{7n$^=+3QPF`#gG9_~+<=^i zgoHgIJHYfVisvMrn+h2hUNbzqhlLRq5)u?%Z?{opdA>-1#I3-+RGPa1pGKSAMUvss&^b1)2Hc)pn7;N!+m#6pA8Y^n=0 zA|hMxiut2x%U&DW)S%!G98ODesKI5z|u)XN-Cnqhv}_$uE(J`U~zY2JCS0`;TU*UVOx}H%qVB0 zV^g(gn#SDImK9;9$)(_54(Pa)K{f^UwM!e7|1}Dyp%4%n+! z4G#bLfCmL98i>g6ngwvdGm?V>itk~77jCG#2}CB;pRIoBoC>dOp5%TT4cutWzEjoO zrNH&}rdEF87tvH{!tXZ8LPOfhzB~CI;Y+YVTWoT3pf|+j3&pOlyrI&VTpny#RnaL5 z6lByJ*}uCFO}#}Ut2DC+iX`Cctp_;q4_8{V<5IWQrfd= zY@b(oRZs|FbWXEqWosn}&Y=*cyM$W zw?2$Wcu764+q*~-p30nV<#UIS^QxbTVWZ$sFvtZ{CwbCW_h2+biLISf9kaDi_ul!G0W zRV&v!q}0C+UIu{^ z5CKWrK|}dUbY>#0K>+daXvk#L>Z*)@@2Sb{DjL zf5Ytp43MR7{M;6JI_m#e=zNFu`dE2GXLOBwtpcfUm(=ls{?NL&X|2yEuE{XYdTRKS zRlo7-WgyA0r5@{yXcanlKb#oVA8IA65EC9%!&9ka_h&AmAdDtDA%n&U#feJWzpqbd zkXd8xbHq;P>zMqvNDDt@@-Vb-5`;jt!k9qF`SPOzDee`8$B#MUGz@5P%Rctr@ zZjApJB?XF6U)~88!xn_fm8bVs2n$jTo1l%GfDO{@6B2 zG?=|QREDezj>eEw>G1*BM+E&O#G^PHiP>4v)~<4ciPahSk_}C#syUN5QnRqOM+sj~ zDEoAdIsyNigC~!4eY1PkltxF6dJY|A>Nb1r=T(J=@X$b=GU;E#Pti=sc2hkRCy1LD z!MCV9J42shFFtnb!YXFT`h${H!`65qBe_R+U&j;Q!`qY1Jatb&q; zf329%=3D`i%1{n_DQzLxN+YA&M^BHR5tg(u$}Qmmlv&kAzDBYO{EJip{)3HB(q>nc z5fzi#6&z=~#wHgKRorZ1lU}{KEdR3lcK>u(V~why^C1SwsDnGMyrs-EOt#b0LK%i8 zp)tGvmHTjXl#;KEysW`md)VPXR60x5Kbnou2ge|o* zl3?vmXXPPLcG@UNSXe~FFb1Ju&+rkZ{5*U7p)a?gKjPSGWqIyoZItw}ko3%wmz*@s zVM*!+!vZBm=+O-m*SeCBz|#+K{1ITLQ(5pupH0O(M0$Re8vISoVJPF zugRTZyyzE}JW$kI60cWZlP6eLgCjSY##rv-n00_ zC_nuA2riWLmoy`C;?vT6#}PL64*Q1PefMJEuR+2GnChJtjs*)S)&tjjo_0Y&gjLS| zgfp0~1PxrElJ2Q!es<>-3U3_r-RUis>MBSmsUhWef{N*Z``G=+JagwtUA=vi9whAw zbHfgI;Ve=0^C-8I-WD_TWu{kWWaIjKA~9H2IHfcqI^pTOu#=d%MnAZ(N9=dXE8`_R zL#1bX*2s?uJL0u*J7oiTy1dnECllGL(Pn0q@j9B9T)VX#pa_26in`Mq$-3%Gh$Vl2_6PlsiaJvx zOv2LAw)5v7&p#Vy**Nf8;Z~3=r`PL!(qCHZ~2EE$H%^Xd>ykjBo zG$oqoE9!iJGcUPBsbQ$Z6Df zczZN~i0;N|eZ3r;tJ~t3XvxBv+@?Hqz{lsWBNO(0TlrnCwiO15nKOn)q7i|xaKGMm zmWj89B>;B<^#wUZHb!tIBsZg`;<$&j-k)C$T6d}sKZKON%HP*kr zePzeXc4*w>`CN)?yojhi`hUt)2qpspm9W%v6cnKU|MejYSwwvQ0p;wV`p?Mt+o${2 z<-;h-$4tg%cRHJ33<46EuAsN`?q%u47*Vx&O%Ge*JdznOT&(ra)+*ThkMa_6HXQey z+!t!Sd~GG*tD5}o%8cw=MutWB3RQgzaXC*4k_#4TP+?}sLmYG3D~FQ48)Qs`LdYTf8btku=OG?*_@{G3TE6p0ySYZ?!5Y_uOz4E^U; zbTv!sF=J}5kPU3uQxn_C@VAqQwar(8Fxv>^Ordp-achBHa6(^3X}kjzCgjOufa(EXH?oat8!8q(vGn1v=N; zp&4s6pW84P^VO!Ou#4oG^x_RAa3%0@2k>!mB+2Vo+dZZbzvTCITLZ5~I1X723Tf>V z_alQoEjFZ9JQrAIvg;&P$?0-ZZJuw@xnCrXWogo~tFV_g-hEHMm6E^~Icb7FuRDP; z;o=Gyn8~J(TMAhiPrrsD@;Xq}bm~Ngd3l8}F1_yyPB!W@z3$}5yVBw8m!uRJG~+mZ zdy(w0#dPoC%rZFu0g6i`TRtl^RLVl(IKIHHSC^T^dpDh2?1A?Uj)Fm^3)OnvViZ+Y zp*GdFpGim-lUl8?3CpUiSoCgK@jI_AwhOP7Z*$2!Ec;xSoc3o)X=)gfZ&m0pRdk#R zp}F;2Idi|g$89b{;6#t!nFxmdAi0HqG0H_8sF4tl9lb3#Gvx&RTKp^Ik^N!d`8Ao- zIDr^{v05MPcc|oe@N0FZcDpM+10m>2!v&v*$6F;K%W341Q6i1UXMoMg0bxr1Gih2s zdBQEHsNn}Bb}t8+zHvb^O3fv~BVa~4Yc-2e3QX7H_LVpPop+Is}IGSP#8f^)9P3JCfr zrA3NRGpet59{3@5yMfzs?*tn6g<5cuO|M*fa(IrkTh`URkm|?zVYM^JZAXWg+l!(J zH`mq*y$IybzTghF`zi9nfxd9?ZA!zR8B#C! z_|oK&%UW*HfbY4?Mm(16PrdK~wkOIEP{mqq5{h9~Qrvsq*$Fcdh3}?JxiG7CuKqqg zPL3&HZ1MQPCuDhIR*#7u-hf_affIA2t5(#{6)SK(lzCFw`X!c3wkJ<~Cd$E=Rqj3t(7z9@^YVgfA1??eIU-i`@2AN0;YLDa*29-@ zEYzD2tju9)|z$M3H_L27CbFH}()bJyM`5vPAB!RQBuee-p45yE{M~_j^+G&Tq zVKTX5*6efrU<~PxrI7``p^oY>by=e0QHtff&k3GMH7e6t%P(_G4Y~2n$<%CZ1{e~K zxW3~P5S}(u0AiRAiMI?vzA!$}A)2r#P0v&lKg6yoO&V8-6C_e5V4fTl;_Ufyj< zc951bXSR}KKd=Z|x=N`WNeKK}|~S9k2z=1Nbj~2>4)pNSe6}6jISy!A;ki+0!O)Ou1 z99ZE_YQpty4qeAszVdIug(^5lcu;y-)ur0gw2f1HSw7sPoY0@tly~d)tvP-CFi2yz z<5H%3eFDWP%E>7lotPOnXLJHHRdJnGn;f8!NVG6Jt9!BjRzo`O;2ge4 zA7Ei<7(dobO$%W@c;(^YfryL~ewt>krfBRwF&;Lj{dWoXgokAEe169zHYFD&B zv2;`BfGJcY!vX{vDAKkrGy0_AmbrbJ4NuuDE(WIc?jKn>9aXcL@2O*#5m2J9yEh2a zl%HMk@Md>+37qbfQ7qP0`ix@XC$cKiC+`X*5ohyb7Y9%+mqN?FmFkuhHQWtD_+48s z9I0>I6K_=~A<~!8>d|0^cl9}|V*bTUA<2|01UzJZA|r!Hwj&N;g4qvzAqaGcr0uUt z#O0d}1{pd|4x8o%yk;Xr6HjP;)@KC8S_aI7=R!2GUmk3el79?81$4dBMRHgn{EIfN zzP6_2P4Yn=^%4Q9gWc%{)2u9@ifg@%>$(l)NVdwA!uUl1~ zL~_w(9mOB+819!}zsTvBGByy}8F#_CY@n^_)EPl9mPC)+y%v-Ga3kQLj0<3cBHaaR z)0t7I<*3}}s@{PmW;RMEY;HMa5cTc-obcO^#=MKW)s6hi)zI@7TtWw-6?~rn#Iy>P`9}b&D`sdZZZGbmfLH%KyWwrkz;+LZQpE3 z^BTJy^}cUh#1s8X!;3QOW;S<}IG=-^C&%)qQ^Y;;;&*lL@md()|YqhC~-!`ZU16zuc;88!I%;S`g5^D8Bg zQK=OirEqY+Vi~;yJkBI^BDwG334}1iQ2{q*=j&o)ISmamuhzH#aFhEo47QI~o8XXe zesLQp7K?RXS)M2Cxw*OUcT_P)(-hr0~uAY2K4H=N*T` zS$dG0{;(Pvpxd*wJtK-dqi&Ug(Y;M(a@sD5Rvgf&&qDF97q`S%y}fAAVB5Kto)f_!98Z z3Vfa459=>kQykWGBe_v44N;C24!XMd+O9`xx5rD!txgx+++NL{!UNa}yagZ0M?2E+gg0 zneCDw@9tip@6xkqf?6cdk)4VZa_TxV+*dRUj|#AH|7~b#p$j*?}AE{YCxa_HwoxvZoC*D|tQFCZI!QY|e z59h6LL0cVq-bE9Z$6!%FS5QbAjf-&dV689QP<@vVM~DUk{K>TGVF9*Q??6X~&*P`~ zPD7pP-11P(`Y3We`{!%lXxlp}aK|J67_Fe}h2yPno3!^$vq~}cZb6@S79l8qGPA53 z<%`tpq=_H8yu{~xBQu?Qawhn>{}~cz8q4k64fjX#Qk5Bg!`ioFN zHzgY%)5ZQV$CM)lsG`Q{Hx#Nx=YXItUQ$q(6UQ!d@c=lPm1$B&&=yCLk3qCvS{9@q zgEc=(N=5sI-tn7d06@pU;}s{X-a>2IMP_G@oEATBv;lYOaIzAsjRSnE%kE-1{kVvw zhH&qBNvy?;1GB^|!1{}Qgz)a659IMQ#!II28m{jc1*XkB2TK7din6i^hWHo2 zMq~ah9y#7wBUeymf6mzVd5 zkbnU9?h8>JCM+oEYXA&+U$oZ>{OSi9;7O=CRb^y^D>{+EO{dpKcYC-F>(%@KGWhYy zao~A&^=f9V`ZfGleemz!0tbCUkIrtA+%biHdBjujwHDUaRkx#|#E%c_ZfF&)j@eNb zF*krU$*Sv#G&-C0C(CAs>a>FGRqcv9@$rT^ z>q;J=@n#=Icx0}$h}K?kmi@DigBobzR^PlI@P}((&(%h;d0{Fv-*xQZcb%CmThCzy z7|;h%^=_JBHp2Decc5$!Lf_uk{Q5n+4z|L?OQ^>{ZnY@`$A2AI?xB$Y6pMYth5p zrp1jUs`R2t=@Yqe;@A`{WndHy=18AlQpYK&v8z7mIPf1bZEL67{u8wIm7o;?LysuR ze#s!o?4}szRfL*8O(4c*!y&j;k zKXy5@y2GO0*CrpjQ={ykm{2TM!Md@vUw0=6T|LjF`^jYq1W*7m%YgC&OptYMVMPi{%uLLh zOseShrUPZ3T4-&xmA=C{?D*K0BfpfcrVWoaL+5n*lA4 zT^ncT#h$?E)z~WeSV@Td(tRDDSh8B1l`|(FI9+>4xBa8Ry?ov6KIqG%!pxPE6{cnQ z_p_gQxa_|pdEfa25 zRNV91yzAyG?F7f810H&T)_EVW<3L0}2=?N+0S|=7`z@au zO<#?yT=Cd81s!hJdG=8Y{bZb$Z}ZwcO74FA-C1`+rmYYw z=YlkvGV;ED@yqChPp3`wofgC>9LB+8Q-{SIp{V{CW{t8v!xnE|RbFIkoVe z%ny7SO9F1iO@PRbIp6<^=bvz_UhQ#riXb$X8>P|^9aP$2^PTCyvnT*oEI3fsAW6tS zYZwv=$Q1T?=5BJ(RFN|XMIva(=xb7DN@QaEnLQ9kZ&FWOErWi;`O??}6IBRmZRi|>!UT%!QaZm@2U)Y-L25g{lf1SaqfJo&Pgbp9a46`; zF>#`%eXI7j3Iyd8xbOWlijfbzs)6vlui&2p0$4bWO26^GJ~I9#$N{~?SNi=8Qm;dB zp%?A`js#K=Ab?p0ua50Sy zF{;8wF-j4#tum;dg>R&1{A$5yUSgMDZZF6V5%sTH#@HIYTZj zoiVnurCt|#{Ozy5HbAD$5GPF1jeTQ|dOB(JTRF3z&w10$%~{C4H^9B;X#w}a(MMcu zq!f5|jBNpsH-A7<>iB-=@*PguRaUlIr)+{!V5B~ANSQSxwYo;aoYEpgI9$YJ287xB zRdk%%9yPtj;;7|MvDs29@oVDD6 z2zY8UTyc{>cVC>pJgp4nD#p%tT=Vxj+Dm*r+rReRCHW z5{;Nb?yk##1b)WTtabi9Zt6YDDb4Op4}{APETD-Yf*P8Bmd;;Am{~#RrP4fAvWSrr zx2<9(gGC&HDla^>T!;*#3HGc(wd@iO%71r#EsNDMoGBbxi-brq5nVCh8@Ch zkg>0W37oHmTEBZqn^RD3r_aw4{yIGg{1JYe%x5}(6f}UDLF}EQuKz;Q7b|Ha& zZ7%x{!&MzR2DPs|nE8?~8%wS(g5$irD%F*>C@S`ez7A=MpLbsXnhossn znvHz=!1LKZt=OHkwUl6{b2^#bju+IKj*`8EhlV0+XdvlZ9vq}`kPxJs$V$e%c77*z zplX9~_i*n+jIhc9BIiLLE;hWXgz3izKGG#=ll>ynIesfIoati1+S=J&?IltMNVS&F zjEJwRj9V>^bP^A?Z%Dk-eXvWd)gbL!98vux_%{ZNFrD&gQ}8u20yH z7_uO?y-gPB!&^)5@gB=YNbcxu_!60;J3|BRaQ2<063KP6S^#s(fJBNN{@cqmPzVRx z7_W{f9YLGsa_yyDR*NWnxN8XDQh4{HjE|RX-7akQI-ON_OktMC9&-HHF%0n=J+pz= zp$&6=7$#*YB0k9QdCwAw*osY}@%HZ}8q!J2qH=Jo1v7kQ@k}{3*YJ44ateK`faqmI zR1Bo6m0N*I%|-c;;vU7~Cwqdd5X8X)5OGhG#EI_3 z5?a^UNx_rv?0W-}lkIK_wK2aPD=Ipc=rJlv&y@&(;UF{%oHWm){V)H)aGjmZYHjRN zaVBND&Q;whjV3Zev|8^slf8I?LJMUDKS18BH`?JhTTak^pHZCg8jmG~KD(~GA*14c zDWBi}KIoR=Ps4G1JBmIr#dDhy0NqEtS&)kQbK@PXW)B+=FKDjRgd>N_L?0^trfp;G z8%LOQnstYXBTz$E-!ldqaVrrjDS>`aZ#bxI!>NrgM0p7K(7BSHszBuAS1cF zBFhX>P8l4hVvn+nY zGscw=V%7PwW$sXZpZixD!YQ~3 k-so4`@rWo7^r?#Szi@&O6~i1yhvk(T1;g%6 zvGVxjci&s*Tj&LyhuCH`6pUkn+dy(gMck?I>ed<>x-0LQ_Jf?=H?6`Ia1)16LZLk{ zqKAXT7Q+_+V^&5SDv|_KS6!DJ5;eAfin3yO=vQ`#Cl@<-Ce8?)YP!9H zETb=#UvRy0k#xUREL(*l*deeDWKHFn8(WK<{9e3zvJ<%ylMiL`psrY>*biss%Ir^P1l85vk5mQ5NHpofwr&6_lsCBO57dt%PpKQgy zxel+gUtV7e&4xZp@t5DbsL_C zdmAD;x_4U}D7K8WgTGMA=Id1r&S?a;dLL7^_OsOKDu(?dL-JV8p3lksG4&t^2304eW9KY$azr$(ucNQU*3vJm%CPZdzPOF!1LR5J`K zdm^fQ*6AlrIB=d=3~p0CCwI)9&1c!r(wcYD{`G`cu(0);a{uRU@D`Hk&wiDSu3k&z zjo&86e+9HYb}&A6seK%j#sJA{oY6B}xgf@+Y>0FC8hf)NA|#7Wkll1hOsrPJ#oZUk zVs32}cg_>`yAJsh?qYLHzkeyn#!$R2$yMPuLxDCK?iMrq6C~CmGGKxY4V)HGd!#CD zLf2d*qkErfj~B(0Fr@$rDZ#m#agqm0biIUn`%u4vG3$B}s!tj-eBFsw=so4^GBjM^ zwSVW+a$80NX4Pn4`S}-OZI*8U2U{e?8#3v`jlgX72@su!3MR3!sFg$Ft!hlK_bhsE zcC7g$$RiJ(89TcMles@_=?kz>GTO>jxxgclW(IZ3u7;%Hu?9D=x~|dzYJ&g(vP9lK zGB=vEIVTp1zy+@yk^?6p5&K@$(nbhKQbA$sr9vdH(ft1^4V1iP#5i>DoXzSF*>*su zoTnoib$e;D*1bz^k&)0?9jCv;xZBg)Dq97vZvbaFT=@1(+TRW5RyE8r3OeyNzH#a? z)Q?UPwfXhTm?RaHS9=0MuqV(Ti(;x+n3F!LbjAHu9hWe-vDR9K#e?AR9J}d{uCT5f z^$2gcZBRh}A>pxnYA1-G&WrV^_Sz(Y2$ib7j0%eCLN)?pwJ=mjH%niur~e={gzw3RX*P|*I!WhpAnS|<=k?e&wEJb%oQc3| zErO9$g4hrc@b&HgS@Ab;c5@3M2Wi|BCq7)fJ!{+;pDl0=)ZFNldA9D3LqKskk zHqbj?RlB^u4(zwQ79T&IDcEf4<(g07y+?4hj#;9jv>!i0z1-?*Y)XYMjC1l<2*1YTCi~oHn_dF@~;bJ zl8FY@(4^IH@X)c@O{h#{TaW$1{i^k@;hX%(QQ3kJqa0Il0VM3~Q}T^PMd*M}h0R## z4KzUX$XS-PI;_CC@c$4m<12huKz!^axLkQ_d=Ae>(vUTKO=~zUZXSI0B|M+^&8=K2bJ*x)L{Z^-!px=)KqM1WJ? zQqUosSYKBUG|*nJbM<#5`ZBzHE(Fxn@Uts*&+|i6Qc-xukuqh8?4IN!38}2EFZlAD za-N|$WZAM}z`g$`qdsX2KQ?V+`%kfI!G@=gTfwPp5?re@8yXQYZ=x1U6J@AC)Exnn z5hI}pyvW5nYw&&CFzEEg8xjVdyWv8a`W}cCvl;?>U8M=&_|eBy!@g0Tc!(&W0BXkT zkxTT~1OjPYeCq3rY59wV$})3TeophZKMez4zg!lk8_W*9AI@E1MrT(Pp%hE<)C9oU z4JQd({Mrg!W4nKs=#xSB=^HH&>vSM7)CGl9lx}A;q_^QeZQ810LV%7HVhCOY$?%9M1d>6(L|N#)h89!+8*g02d=4 z!;vo+IxwkTmyW}E&qdX8N7{V*_P{Gq<4>+ggJRp`DMs~iHM!$_JS<9l`i(hZcHZN9 z*f@#D!z{PcF5im-0eGk}$0#b$+4MO7l{ncJS5=9{z{uH&GQ8bPlwR#?Tx=eHzUkjj zhzDv6p;jGFaA;Zvu|5Zno&M3#`&t|j^z`)8XcrRzbTSe-baQkd(6pDs{S`Dl5h%4m zg+z}Ue0}}-bWlsHyKvr~V`y{>K9K8i+1;sk>XN$`w{?-&_%H04Ec=SL7VwShd*npyxI{ zXVIXLhA`qBae``QjZF+p@Dx~U&E+uL(G*NIRLgIS@kLewOk8gs{k7@IiETX`bY&ng z!iEtR?z9}At~7s=a|wb9V~qxb*uQ3@brMmRe7l6H-rAp6R?3Yo2ar95G5BEQ`a&KX z#LLhKglmmh6>zZhmO9MT{fQ1-+UQ!3;wB&P~ds zj4=I%aG+!ihxM1?p(vnIsZ%L!0<#B+i_Z=$H&qX$w5<1TKKDJ7X5jipLOa|&0%hn> zS?pBk*CSFIBKH$$=(QL;h}pihFZwzTPyIE@UwsTanIJat;%_jkxi5J2`Wy=d+1jo zF#H>~^+rU``m@Ks_D7Ki3BT!hZu$ZjH&;|#S{NYP{F|f0O^wsx*^zT*(DePDAGF8f zb#s%?9(bsLzRZ}0MX1(=8sfw#F62a!njI}BywUw2U!kCFlEC@$Z0rj<5G5@+ieN!u zm;e0U9zg$yO5^ zubGWFUA${p#^&Bpz$%x9Lc-;x_2C^ybnF}5JNdyb9K3PzyUIogV=Njt_?N7rDo6)M zDwm99*9us{$oRyScQgjnD!uJ38Ig`jI*czXjrA4N@E6FWgR0ldk~vRCTtBxfbW3Ly zdH)u9-_ifUax{a5{0STn>9((xtj;kf7=_}NWc2!kydC{zfK6faU}57B7HwVY$!Vg$ zPr#YjGxi{j zy18{0*GHD;0(Iu&nq`$^Q_bZoo@aSo7&@l<7ZZTw|6RZn?TQLQKLyb#^wwCP9r8QP!C&I3!yS*gC}ssuJDMo$s*$!WW|e9x7&;h| z-Gb3ecZ<15{DeHZN?I$ZaQig2(_ zc00uffA9FX7WlZD9jJ=!ejE57t=JoTOj{Z9HhOz1qM#={O(sI zrXdb2y-qHONxl*&4k$pT*_OF;#NzCw{nFTLyFQX~jkBxBJU7tAQHdG0`>JMtmRqmy zRMXmEDg$@mTCvmUc)EK3apGoY=ftYxbdVC;%I&ZOu?Gn-_n4PJ{e=02VfueKY#%#l zA3J4aH_PraiBiJLPGN6&ujPkn|LkpD4v7bxYE%1f<>w#D*bYqJd_JH+XIB|0lOr49 zB_t&KDiXY)&E$c?7vSxY6|=~@-%?VmfQX=B#WO1`xxf8d(34AeDJtw;06XGQiL}Uj zOi_BHfLH|(&MC-6&_%!rd6EIt7zw&z4|lGV0<_Z${BgPf_3t5r7XtKH=Ot4=eNL?e zSi%2u0c*LO_$i(l``qw<{`k)#&yFDX2TEPlcv+c#od_B%I+ODLhlFa%K3AYdQq79w zpMVJ)jVBmc1*86iKg?1S7>>m(e`|LCz8=AdE(`IizhW2`;VxJ+|0$>DK6LyOZC{?B@p*V~_YC*GQ&E@+qYliQue&AMh5h~= z*L5pJG(sh2ys{tGJrv>)1cyW1s;I4Vsf=@Rx(zeZ3 zUdUpL1?T+*?<6UqB<$&KDCyQ#&<81HVq#_xEEWqpsBtV6!^v2ksp4PX42%@9M+wQ% z%Rj8dZGp-|J4>AeaWIV!Yi_Is(y6~iab2)=+?#s{YHxy3p=%fEq>F+Kf^tsJCH#iL z_uY&$@jPBJ0BB4td0~k#iMUELwe`G3i{Ztj9&@$j5Uxz4vAcZr+(2pKU;4Fw-SgKc zgvZ`k)tD*(<+XlT3%%NwtkeTC2`mV!iA{z3`*Tdo%gcp-7&_#7zY`Ds{P{BmK0{q7 ze|LXhlE$i_dbU|yDr@$Iny2_%2Fo4c-(Ef4Ydx zV!aoM=Ta58Yr6_^^({ww)OE9+(a){9n`(zq<+69f^4&Zuh30g!@1c>AtmjSo(QPK~ zSN*ntliX)BcMWLkjq&W+XZCD)4X|Ea$-4ZQ)E*lK8ww=r5obP=VHa? z%gM~Z&;{{^0v#^V=c~)hzRq=*cH!~@hKB2<6c~y22KO3TUL8D5k308}=%(AdMv`CQ zi3_HBBldN(ZE(k&&^w|V{+n5lM(4s=UQI)1me?t9a;>ibsX!o*!N`dxcVPj{2%YQ-(Ah&UF2P8ds_Sv zb#;&X3Sz_v=9fACaBj&3_*Ve5ws;jfkNfu)$1~8_;nNDU)^VHj-|4nL9O`wqcXo1- z79F#Tl$HN8t?US`)$5%j#yYdR{mEm=wqhg?w&zq5bypg2^k{%8-^1qRRBO=DP)Vht3_<>nlf= z(}TDrRLgWkW?XSi&DUQGOC@fN73i#%Fx$x6m*bu9M0wXa&}3g-@>$yjV*XY`BXE$d zxBJA=!@j`av7qz@!tq;3Q+uk{t3#H^6b4jQ(z<)J^?zwFjy%sI@0P4|?o!vU-^=9n zdz#Jzl&R>F+HQydo`QU4sjQ6pe0v0I#;UKc4}@P<20Pxvv_R~gFVzMyIT$}klF|5O zf2H(t20a>N&8?^aT~iqUwIKKMfD`u){xTDD@gD($zRhXGyxKJR@nfRyb^FcaAX zjdT6Ge*gR0MD?+Y=!@CSD>N2cERBmZP%YzoIA1fcm5+{wgopO~R#y)*@C=J3ub_Us zm=OV-uX7`LeD)|i5}sK%?71zQw$#Ux*m3^$E4kX+g-%?1!y88&EFHYAo_X^K}gW z4TRa!M`U~Hr^w^OWh+Nk+-)d&F??0)AXI9FygJovP->;8V;VlK&K5b=tN?}M0E*8N z(E>J!p9lzKRxMZo|J>Dd!&-9zNQGxFC+8kuOb;b9+8M92+l^zuNA7U6!DdTF=GyTc zc#ngmgK=hoaz*mfzxVI?i4D zv>2V~Bz+tS1ULHR5W2sd!C$wUnn1R-ae-%5W65>KCA`1xu)HQif^W3DJs=%j2H|;t zPLH-VnlF7--+Os{98%_XP{KlnR3PW4p`@(EncPf*-$@D!=dAM?j84?JA+>UO6x4U_ zWm0N)K3^icI?QG44jA(N9D2DWYRA8(!F`B5$)5F}50Ba7GlN{noafJo9mH2wRV9~K z9oN-hh7-E~C%3B?@(Ucgw+s#^ArYgZ#9F%>{GpRlfFJ}s)TIIhZd_bKPF~)uk!Ic} z;!#~WmH2o23h?UeYy!|aJTLPGZ(}q+=o0EVlX)tMnu0v^ZJP!g5}VMBbx5fJ#*H%Y zOz;X#p(<=pkN!c$>;$g-?$yFf&xod`27n9cKxZ}s|4VRYdcD^t&@UJ7mJZJS_s4#3 zWV@`4?W=KtENZY=A*e{^a5@eKjMA?Dq}Ve-rE@s&wK`h#Bao9Y!;1VyDCc+iEccK? zd^IMf{v+c~3(CNBRk&RnR27sXb~rdL4y6p3m$wEOh4elS!=s~UQAZ~SE8odYJ@$~C zpMg~gl9q}B31LMwN>+Wt<-uds_9Wf;ehDoPXE40=HjD=IxHR-#=0C&X5c~1LZgVX3 zbR1Fk{&bDZ+hVf|q^PI}h3tvb={!MSk9;Z*eqk(33LQoSOE~19A>JD)?Q=dF>Yf|7hzT%tS2TH8sEj#tHheqdm9er)mW^m%?*zcq)ar=^9ZrD?+8@d$Yu8yNT= zgVEDZ5r(WaT6KC8NpQ)MAQ)WNQQwKm_47JRP+nljkkIfOxxex+o#V0VHGN_`u2i^i zJYAH$+Q+I4oZaS}?Rgzs=))`$-^IiGKHpWcAK#^x9C3B$_OD6wzXNl-t5X3<@>9Rym+2Ws14<5_ z_oz?GxDs+oO5k2zUZ;!AihMEcHQtO+c$viq;Q30@_&^Y8iY^m+|ESNDNe{58l2=y< z94V1_y&koyalk`D3PVKuWkW7}`|yA~d;z>(*AyTB_>{OI6qHC)(edF4H4xbf^RVW` z`ki{ckrx+-vte)#c_6p0P0D?>B#?cMGQUEj(E=^x_Or*!@9Gtxuy|@O^=tF^H~_?> z!W-Dsc`tqX_zqI_C%0ugW(&U8gf7H5sFQ_SNdC$O9wN?OXR?vC#o@#kn9@HdaHYR` zmN0RI%4Xb5to@M=TXzojZB6}EPUM-MKa+X%-_!GB1^ZFOSJhVr6YXrNRVB=?;bIXa zwzTxoPFh9=k@D^BWydg7+lN?!?Wkv%NA6jaTkZXdH9!BSwBXg{7{sR0+PtxAN9#)k zC$XuTS~GT)^{FaqPfv>8{uqSCc>&ej9Llfde(K&pSgh#GOj?@;tBnu{yp-_P^EOx& zEr)<`6wuy89T%J+IFiNdns)O|_!1&HhIW%Fy|I)#go@U4^;NHrUIEUhevYQ*mRyy_ z5Xj3=l=ju*6f-5|cmlTXUw#slTaZ|6ydi%LjR2t&<8Xy-dVl_9*y`2YLn|kz`n^NT z0t)lV&;A<<%I{M83{c0tZ?V?I^iWq!ak=bm+v- z{@=XT3u_P1IwvJJS8bU0q3&t)J0h!|E7ZUpbbR~|%FbsXriJr5^-Mr+ zLUGi25yZhVeq$qW7qDvnKdbBmu*!a^{&4#np-KWc-x z$<<%XO%i2@0X_yZOUr|`mxlSn)%?FF^rrhhFrUfp-Hi^P_^^CVl0Q|J&=_;@##gog zvwX7z;=liy?|@H`UCzy_J-hhU`R|kUe;0*+J!;?i;STZd@eF{*-M^o`|NalY9kwjL z#epkn+5G<=FMnUYgtz5`sQ$pexyy0*|KAaF5M(W-z{Z{POz9SFv=>oIB-e6w_LC(= zqQSkqskLLl>)i4|>Bl_#|LM}MC63EXyb|Dd z-Jf`p=~dC)@mBBAJRg1P^-Ldmba!R)%T)kqRA46GOjJ|j|5ts5I+d`BffhB7_R<@n*T@EJ8YNHMZ?EX{^S3c75ME>^u^qO#+4ZSGe137jkayhu zBp@a%oX<>0Ms|<|A_ZDs$T(7_NG66`iDdX|^4E|+DEi#AgWHRr8ome6Sd1MU8fviB z(W{`TS@I1UZ*_c52W;=?Dq=9xQNO&(70%eB>hbY{_vXyXZajdxT61{6f{vbyfT2Trp3yv3I{Um6QS@;d_NVJv*+Wl*k~dF|#XPV&K7g%m`F{ zjtJNJuGHN|y;5!tm1p*cQ+35XJh*GRUEyq>XQo=nVpP{kyw%9CwBIT(7plW0?Le94M9U>XN7pcwz#-&%U}iNd3<&(I?msN-&gTRO3WSOg%os zBxI{A5CtWgjoy=CjTsJ?S01j$f1*mTA)_y;BMWvkF7s7e#|lpnb(4khfQ4wp==%CP z?xaglPkx3}P>R#Sg(Lm8yTmdtfCSQBL;jnOz92S60x^*J#gP=iH>rEy<&S&(Ej}e#Dy{ zLI=QqQpYzU)9P_@CekNaT2?6j&;<=j^iGdCD(`zs-yR*6EIQJ*zFsxLR3|)0)YbK< zRWVk<*G&)g>3L(A$?7tCtDyag@N@l{)s9oG6}>2~iuX?GsLuO#V{`*g)wJ0?f*n1lfao(+ZDS)~a7ld$KyAsI-#N-kE!L31@MS6dLl%u8izOYa-QC^*kw&S7l zKkvC|c4%i5uNbar={unMajUexH@~+pz@-+HH0n(y zheM^c?^nI!Us>A$R$N@1AfLOv)t-EA8@~Ca$p8QBMt$V zki)~0+OLBB^3vSFIFcY{-%WM$(xTlEY~6m~#0F!-p(Oe~bmliLVaIxt2>}y>#p!Z2 zT^Aoe@M|>bUwt4;gP~Ka3Y;^>n8&#OB4~@iXw-AD zUI1hs^?DU##vP z_OTNHYIY;W5`#Z&YihXccZqwRAHAw{I^|x#J^EO$daoF1N`Xc(krk&If$)R`B>))! zitG04M|0x^CLWD5YIJyw#+TFzoKEDf?{E78-f#Xsb`sTDuQ|3|=en#I%^#uL4`U`8 z_nWq)-Sk5f4esm^ac(mcprY=9{WP2Q#IRbfva;`ORZ%G%th2vwqldG?CKPt2@^i+= zMM}(sZ%B}-`N&%O}e%AN; ze-HRc9QccrGg7+jtk4)81=U`>LEi9t#1S2&@p_^G>lajf{9sA}0S+B@Fg9TPl^PkJ zpzGs8fPe*D@a`wsoO9(y&}+V1y@I;_qF3A9Vy)NBE5~^q9Z(ELTKcMB<2np4s3KI+ug4a!AjWn*Si6y>(%g% zPL6;B+^g$-`J8l(4hWc?A>5+K)w1mr1(5<*-%~$I+-|(cV2>PtzUmD!og$6T%%tm> zS0VYr;>ZQ|_O7U+9%fnjE4nY*5&`fpm7Ye-mqpXktbFf=^YMHdc;MWOs;aV%2a^z& zD6q@bHQ%O}c>!sS8zWYlfixSUVx1A(7jzGdWw3d`p$d4r#6I6)=XDi;B_Z*@PNGwRsLQ+n8?607 zbSn%@+hj&8oA@sYRN< zd#^+e#2h=4`-VaM6_6em)T>6rlAGH3(fwhF*75oc{1}T6W#=ylxj*V;5Cx$kKj>J{AVk z`sK@KC+Fvp8@9b0lqN-~q2cJG28+KU#o=W2*E?M3Z99H@8k-UhR<~}2Y;`^jOiZB1 z3hI#@|^Gx;(2ag}wOn`S|h=L4MkN&HF=ry32Yl8Ssr!=(K;r0WFi;wUv|l%aJqYA5BLaR=2xqv4*)`{ALr?Kq?I<`6yB@N|}B zwaWuu*Y}8hPTEWd9uCerPc6*6&rcgCfsj)kUBJ&AKEd_4|IoCL;;BipcA@}Tdf5KSVR$u^H-F;Veh3j^IHkBeAqPHqXD3q9m{;%~ z7d!ghs!=gb^(UyZ7RiAEiLciQ$Rs9~;y0=7Ntiin+>m5?Q)6%~S}G z56#ck@9WS9$l>=c=P5R%!$qjFr7;BJfy$|3sz>=X5{0mfiJ7b}86|_|_tz>AE-s*e zH%#12iJxad?KaTc>#`mDX04Ryphe4WNPY-Pg1dRAr#lqQkHScDBwtsLR z((t^6fOP7+jEuzHvEsnaSJ~3>Sdd7q3k16^0m(&B7$mnpt2F*s&nGzzmY0^qDLJ&> z-d+Dd<=w03OfeY^b(P@fJ1qUTwuvH!^wRlqlb&xWA7Qz^Z;&~*W`|^L_#Oz9Glw(YB=f7CWL) zoz5qz?fD!=#=l3YJIsd#!lWKov-#ap&C;PVqfH3q<>hTB+t6_-DU3%ahvpCZUCM}1 ziSR8SNrB*2jk{+iV&c+}u8iMAR}|x~;cqbBRRiZuFWz^ThA=1m!mx?Y&n!fweIb|q z(!(BuG72=j{H)(;R3l1X#1vg2eZ6=I)jnJCBsRC9Fo#v`pIG-d%#iYkt05@eY)(t! zdMY;Q-_!Fl@*BEvlaH`)wCPn^Y%u&)z4I>bH`{XqI(bzf_YA*9^V7!o{s))s6a1f- zq3Cp_bb{JLXU#sh;%-^|oEOZxIKx|2aCy@`&MVBihGD@$L3Kh^k-)$p6XAGENEK_dWfB$^ zX_=xLvNaihGz=W-8Ad`D?Uw7ca2MdQ2rmgQ9bd9&Q`P1r$l5@`8HdD!paW>} z***#yed230m&jFcmyjki1Jnc#a^Z^j$;lyXZEK{svWR_RT@18u!}KEqXc^&}ZguA- zcKqJzH9;5yUVlSkt7KZmC8~f0(RqO3e1}THRt>*j&^K(i=Ix`B+9=LLvZ?Ipw`Z}8 z1a(7B{Oj^yb4HV(T0iX=AZ2{8LNvH8F3D`}NgoA;U8Rxc?_a%IMi;d+%4zA_+9lAQg>M?T}HEz+j-48B2Z>zKMCIEoL4bFZIX>qjsF@t9Rd2b}s z7Imj6>3BXZ8cMywE>|cXGl>;>w2$rZ%QMA~;6O z-LLwnMh88`f_CtY`wK;D-2?L3Lch^pwy^DvLwQEPBPJw0tV{-uzpzmJ(j_FN>wFKc7U=Pdt)W?Z@L zZ6$9TwNmc{+$b0r80gTYabb_Yf`L+qH`hWynwtE`&9_-^YI$j_inGxH<@{l>67bjk z1_7wqg1NC9XM+$))e{h=zbs$)_1cIElTn7w`;c*Nf26vyKVDf=esHBpuif^y>TIaN zw~C74?{6D`J)F7T6>Wq##mpl;XJ&Pz7H;anc!#LBjFw^i*YuWjCHZB8{WW$sv^T1=2-)CEByN~$yho}a=uy>^!9ho;`T|c zZL6$mX~mNZq$awAp)j{)$(F{OCl*xsWm{L_eoo|jz z;xoS%VyVcF*}dfVs`Gu{!SC~U_+KqR0TVTojz2(LkI!^ob?8(rEG*1JPWrw-w36=a zPh9o93cvlF$EMYx1uXVPqewV{zE!8>J%9HrS?O|!(;a80j=V;>l-&70Sp@pwxANTBy^KbC8s?^a6m`n)Y?~9U)cioIqVxE!SMsk_Ih3d?5-3T7{P6W{J4{gAm)--8u26_S zzfGm)QsoZ`Bo~w3LXx$P-j4zQkN4}j(5wB@TtCzq7^9IWEIUlE$4m4+hBuBjeW1B& zzh-=9MjizNlna#9qx&{iaA+8NBmJfBo@cgDlC$gf*00`kO4HeVhwy+(`&cSr6TQuW zrOs-__Qv9E=%8`f3o2HtWM`eJ_f2AaY-(zB08($a=k;DKr2 zUFjxtLO=usi(m^Mh&mJ75$Gx1arrfB)8TjKHYSb-SW82yKhgF4?qv|^s zR{RXa-CHHo>^m+tI>HS!ayUHi(ROW*^9%2P=!7ize?)<{{TeMxxAUaA17&T*;gF#9 zsrc=v8Jhs96iJ>z)_Uo3>JJ*(A+ z=JRtNQ^mod-d}z>-2bwM*DjG~_90;(c&2^Abi2LaR$q@+Ow?QcxPgj3x={Qr9Fkvp z=VD^x?*rDfUwbeSzPFbNb7V)cGuxi$I^1dg-U=RNZ82()DHh!`;uG)4lSwU|08PG2 z6kWgVa|OQXy%5ce!)8Cs#+QFKH<~jrh`bY3+rU(hJ;;{lQLJ34Gx zfqMz{*bDbcfO5aVHp5S{jN!FPy50kW}M)Gpy!*@xa~E5pTx!!|SDdlmh8o#(rAx zr`MI&FDUmTVbRaR?(AaRWK8yEkOK1BnzWJo*15i5@hdl3uPJp2IiD>m-qxH8 zmgHM;LUmA(#j5I+(M5k~{|5v(i2!GGxaj1;rpTg$`;Z(b(a%$Mk;fHWLOnIty_2qJ zdTO!}!99V1f{^l*iGtw+G$EEYA!t=%XVhdkXQPqaaZ!<{Y*pK<$qUl;s1xP4}zk0AhlD+0%c{mK8J%?Sk$0c zC1*CqH4Dh|ul<|jmxPvZMMFcw5&pI}D9P-6s^4|@i09a`4Cs6;&N-9lS^Z@23kygg zRf@<`1K1#uhqMhyz)(U2JYj-mnvxx`Vh32>h*;? z`t&-^c=iZbi|J(GX#3H-s-^|?+1mRyc66fJPRoV(OLORA3lPKZ1NFk7$7Lp|rI^GW zY>QpRs!t(7B;3Hg-?qfI^2lp9k4^mN)tUU<+B|R+HPu7LS-(|7Mkq<@<0BKbd{I!e z6qe2@iRh=TtKlPvp|X!pd6KP3D z5OYJFTxeBBmFp?zEN<6%A?S!RxT5Dr)$^m>-+ZG4F~{?a#rYJ43hC3r{^-(ovk~lB z*z57Ys=j(KGEEnO+BNSxHcAMOa zLXI36+Wk(j8&Y@t(SXWYJ8t_1axEF+C8RiWe--hD`6Qxlf+fP8GF6E ztm_wqBIYH3*7m$$^?vqXP)}#@o z)U*oe|8FuI`UhRgSLZL>)}DYAtGyMfH1_C!=H#Ui3l|r{lgT*KShU2d>G}Sp>GTXD`Y0<0P(7g|p*ZKzUXydpMw?_YEBiU?0;Fo~iTKx3 zv47o=KjU=8 zRL1Mq!b-+U?oUmr($n01kQ2v`HR%1gj>TQ`O5sezpLY(IoIitu`3>~Gyg#j-fbh;j zV&BIb8GQRTK9uk61CoG&DpVn;*|dO2&b$2^V!j_7Wxd&o&V!q6sXNyruk;OT9MM%+NXihI;&>*NxMlq|*EHy&3Uo727=z^i?5I0XgYd zwSc-)BE+!JIK=V*bX6vxj80tJ6_RuFzUieF0YV3NL&`^iJ9y*4_umo425&z z{@9>yKElKNBuMfJU#)hBZnD>lnHx5pqEs=MFl4K8i^sttzvKlsV=>vp`}eOji(ENO z#V4yoxs}$6N(*3@P^JE2?X3aKlH{}CnZ8mj*%6eHNtS&RGl)GTm&_es6w`D9_N!QF zmeTd~Z=(lWn^Frd@b#oy(|yK`{lDT$Bb{sKHg$}^t*@;V^877y$wj$1?83d&1Rd*y zx3@P!!tL93(taJm9_?_fs*SZPP2fEdzjXf@8k%phpunxc%+D`+Y$qvHwl5JJO4ei% zhTlGA)Owzn!jXhEJ;lf2eS3u7KWM%BNdFlCZD#m;KG!OHb(D{W3y)c!3!s2oFygbb zqltXgJw^C>jP+`(s^Z?L>-p7$0Yyl}!m{J4!T7{@e3CPUtf;8NA>dtv`2#WyWh`TE zHsvk!L*y~feysshz4MZ3!=b2DGkScSHj2pa%Rhad-+MFYzjz{Lg>i3bCrix?d<_i+ z1?tfj9$)vU(b!nYPF?RC1!J=l!-l z;&D7!yhcUc0nCST$B)GWCm}@J%V@gXb0jyW3m5~LKo}lp?SRWR0AO2xw1Z<3WE|2~0HApr!D9XQRB14{)lcrRkQVbmgRh!} z9;F~{UYQE2rv3GU;_4qa!sNCSkn+ctoWvM~R}rG)+uq)HlZl1ky0Je?v zk*z~jC$PZq%PxBK$^L5;C*VtVY4|3+M=6RRMe!1gjbVSyYHoi(ve^flJ}R!`dtj5Ypp!! zl>*$s1zET2&TSy|-GO_@7DM^bYd>h-(~p(jpHcfbU?0T3pMVryG6~7ajKLnTyy`ih zfJEhPNz2(fIdByXPHp)&=Thlk3_z>}#+aXn0whSmx;8lDY1i9Uo$nm#klnBSxqt`s zdnS)>J&6T=8OVw<~0j#kH2wmGjr_uy7^e#F3qIA%LHat(mh^mU8z*ZA8ghe zX;9PCi?}q4$9%Z9SWUL?Oiclzh6l;yHTtvylBTS1u4c)~uknRBqte_88mb{)mmVnn z!U0mU-&$+xEU6CsHC0u^bND+BDk^JGP@aKtasOAm7-;73Fom3&XtR@p?hJWWE_--f!Kp(^C_9nXeBy95UF_W|eNCyN_Msnw()e;E0pdzgWx z>WtmUH7y5sWe%8++xhWX6F^I5JvRJOo1pI)1Tu!T1?I4a$q<*T8v%YE)349k$FvF_ z5TA3($_MuP!(@Fuf~#s_mYFU3F`#`DjL>|f<@TC|gnIlN`Dn#OR(;awL<;5)Qo4Gn zdGXs56#VIos+*b_?8S* z_%KKJavmPwAN=*wc;}xm!yr=fs?LXfPg!{2Y+i!($LPEuR@W(ifGH+|S_$w+=}gQk zBxxBWmsE(TT>Pn7c09`51tm|$+N-^umpQM?)HLc#!Z9vQGI+X0;0`7)u_9(n!$;iF zcU$YOSFzwBJH(^N#NL|4?VsvmHXFxH!gPRtBu}tT8CF0pkC1qE$IXT~Yo=IOQWbI@ z1<`)+cBA(&;9U0Ag#f4ccr;lQ@^@7zYQ3hVYA;$=x3T}4*VQItzQ1q!T3Zgb3F}L? z{%o*L*KNEaJkj*=sk+0r<{5Ys4EZ*bFV97{SM*%*F)~Ce_)!xybEp-0DV+9ZY)0>E z&C5ZRJg~H-=}2IaHCLRYm;vaNkvF}rbhw9)_yMU;#sj;Q{bLJRR z+>InZk;Qxi7f-HCYR&Xr*+hB#&&5S7Rj#)R2vcm?@z?1U%jq8u7qymzCtuBO{^rc6 z0^iSvE_D4PKL127Y}#UqoPz@k96bEFwXyH1HFcl}((Jd?x8SQ@EifiKCcNb6rSM|8 zZ-9go5N|;L>v`8|v8}ut)L*MWr=TQAZm>cB8I5)k8ZmL9K0ghsz^|MwN3q8*%p?e7 zbDj^y=a}5TJsbVIk|C)DheFrGqum?-^70Z5xB;u=2rC-SIxX)aK#xL9lQ0**&e>l# zAn9YB4VJ(1K(Wi*bLnSnM%%M=gh5OwmD|XddrM(Yl&U22m}LE(#9Ztz>IhVHzNO|r z;4t@JI+pe!%}YZ1N-=bIJg1nv}nxt zT%!=YtX>7)+z7IrU|i5lD_Tjg1@pJ@JMDRl7SZQSsautDsexhvQFa|WvYueGDEYn0 zla-$$&dAhR;AN^9npWPL{P=7sKo7b2A5Aojy-%~+Af2G5U z&zrmr@R>MPS2Qgq{85CPadmnd!S|T3x!CeE)_{YMvmohzWhmo3L9gl8%o*75 z=#YwA@kL#s5W>dg-XjneSGgYl@r$i!WKq)Ul$;Ee&y*5k&=~dn51Eqm<)v(%55_ow z8L2;WD)O`y1Dx_#Lb{&qQc+~Qe+?E1E@n-{xL9K`44y-wZA649$vm)}5F28#azXz5 z@h~i0*^-fje66F*{&52%X~;SzPCEdjS9_q zXs+aBJ2wtCSdrs^)^me*(8AYCF)xNPRjDMY*i>iu2okr$@miG`D(z~%YSz}KsNOb$ ztG8&B7T(Nn^Q_?)H~RJyxoT`6w)Uc2hjA1o(q(i1(b0pQc4FKFyMTUYfrYO038Kr| zH<6bD*S}rly!Y{8;h5J(QDP~>@_cm=6805+6gwvJ@%=Q|dt!=pd+p>~U{i~KlnH(; z&0gz+tdY&`%wOD{rWP_Cs8pU7>Fnjlq0mD=ZSAZ{<=XBK%AU7dy0?cFPx=o-(Eash zKnkkFV*C1dL4H|T+Z_OG!cgZcpV3TMJ`ruMHjqOVZKYmEUFUn3u$-aU*vYl;o7o8& zl+lA`(_pz1+BWRC2X;%k(<2niiNvW&25M^P6||LNOsP)2U={SC&nQ&x?)I2_q@DfV zm%o40fN@QK@`Sl8lbY>)!P^Hw*}mbyP`EpBi_Q*QC&BdCBf1~Unp-&0P<%H-g<(-) zLJDy$$*yZAMzhsg*cK{5{b3KlH3(>tk5oK8S#Q^*J6tYE=YG`c(kZFC!o3Q4Y7LJ7 zT07JJ!39xD^vE^Rh^*AfEER4xBLkXjZ`2$f%7k@ z8ju7+Or$VicLW9n-7LiR?l!NSNJ*;QudWo3r!tFS}vT5WmiVWMjuib1tE$`T2PRw_CCuP-icUheD;gE2cwb(S9n zH(B~6MWG3#NY^S9AXGRu_8ggPR?7X@jD53TY*4n>v3sZ2VkZYf*7w8F3p+uLF71$! znb3XzUfE)pq>|Yx;JoNU%owZPJ`(B|TUA%hjk|2eCK?SwURF}@ln1vsG z49KxBu72K&iYxVQ(Jh$N)#qA=%qG5#evE``#ivH&-Hw8(; ztoGwzMjn}jw_K{_SbF6W^UEnS7r+%rl2$b{!8MMfa^}(8ex<9s9TWxAhuy3gXHah> z1_eOi2#iU=0d#K3Z*gs8*nWPQ!I8G+Apr|odzGUt`73Rv=3Bflettd}H+}>`V-+HD z+vyXPdvimWHcT+WBmH0~!Y!T57_xzU3L3h2=Gp4$FS$~BRHn@Z1d-zBl9s*+49AQC zID8CP%pj=sJz!k5?p2ZgR*xPsF@C;2L^0op+E-Z$p4!Zti0~ z)RULP*&R@wp@(vs!pFW1^4A|PKwzBw(ErO|16fr4NsF4Kj$xSl8g=vTK zo_LnPTZexA-VV+w{Y&!ElKS(WFx%Ci*c_uw*yzKjeaY5|>B+E-jWKm`%<_r`%kYH? z`MQ=}PB1@jN1X5tCm;*2JLF=zUi?OmU(E>aYK@bd!%27n#fb4(S~XJuy#N*Ugvy`I z#!i64+Y2LH%Sq?~GH`sawIv|467|T$)R~Ylppf_WdUR71$5GizZ1|bP!Hdv0yK%6Xpj7|#SxVIcDbd&{N~8*hh;xxqTyj@=#st75%i7Jn%P!>G6K(7^1%;Ho>6gP zT3R%T!ph0&u9?Zns-+zqPW~wp+sc##4zfG->bBc!`nS>NtP$O$3MeQ@ne;5O#)gLL z`>!)(oSgFZFp(vP?toUA#bX{KO7^em5ZBA=>JkCD3_~4sm|Co?Kbv7seBXp@`D0ic&v|OQ3jkVZrI1F$Ej>pm|!6SlCn&Kcz+yk-2JVX?I4W6x} zm>(rE(Y3X?{wgJ_vf}E zhK31?^=h?*IDGDTAX>gCE3&;kO=o3YHX&B~QREkbFJlR+b``GIX zlvA6?W++jYDAA$^aO2SyQ)W?uQ6ZX%7F8&>o50tNf58@OnE5#qeF+Jk;%2>3nm=4w zM6d4-8qyDW$y<~B26^a;v#D~b#pcBe!vizF>IPou&HONY31hPtRLFZ5hpHE5O7K2c zB42kJH}2ZrEjE*rF6Y}wKnbYsdBNW<=B2QgQ}@Kd_REm-mn1b9g~LsZY`SSV~bx^^i8eX4{=ct>TKL$^_b zJtam8MTeja(pV_dcFgN*+pf2Ow>sYrO%EhAfr#5Oy(xj2j|)R~Q>QzJkos}bzQIC; z#Eki0DndyAbm5pwVSkd8imsT1go?0#ZsA0Rx%Q~P{c;5aOaK9cS?vi0ARsXk@rWhxx1s3o`2;KGUNblJ}14heBR;2%{1vnDPB~^Oq?k7$-Kh$ZL+RTXj z;S+?4e-zSnsC2EoE0RQK7@I+`4PZmxLrLs9K@q>KzTUPD6T5n(1&!$JB6gn z%0yQAt$xXa*_}b^JzH}sY7m>7nse5bM{!1)+N9P;OEgUFzll9@)79f77ppd)L`2;+ zp4o!)kBZ6QRqMDz*q39eCeY>lCWVh61DF7YFPkbowc?E}#0E|^Qa;=xEq_oU7%6?g zHsez@f4)VrDgZuIBQKVgLy_zRdu(jURi?-FFT?Iuu2L;`_JR?Exl9*3Lb-069?FHKf^mX3g6ce*csFtpzFqC?XG zPu;t)z=03LqC6e`7}xo75tX8t;`;ttOg4HsW-{$PO-X6`osTx#2>!gUJ@dvmHujTt|n;tXkPb9F!M_nIT6#Es?uNb+ATD}%ZJz3^@1B`Haz$z}tW zspp!0Qq}bE@VG!{gTwu!z0?_HqYTSdj8rD>cv2pIBxS7u z-M;v?FQ{>da|1AyU7yi0?M4pk83EoDvA1b1)5vy3CG`|xly5%Tfy$bAx7#dn+eJg< zlW7i_&MNZA$n-id)!)&k_kG`P_^z1%kB+qu&`kv1y6G8;;5(UXq6q2lVzu4%<>Tvt z#NpA=L5kMZ&<{m3`_cEO9SXFq%Gw?@dH#p2q=_-p&ky(S**pZ`(1<9yMMXus8CG^f z$!gj$K+uc&_}kq~b1+Fv(UQl^FbIVyK1Tb|+EoOOwx?ex`q^lBgr{NdR@EaUD#^cUN11k3pg=zi(=!)^!6Rk!^){q~{D##A0EkH*U|WA`jp>PPUiQ z+pa58!Y(ia+2LbW$?3CHsBbo!SrL;>RM&stF|1eW?Cu@>tR>tb0ZHAk#oj`R1XXJm z+nFd7@96hz;D7mU{j+YBQvK#exGKX->TJ8qiMYnMhnKOfAw-HHS!F$*W7G>$GZf)V z)ZSnyPfv}D-@Q327QJ@x&mmbJPYif0Uy>Zwzuj4U3ZId>P@BTxSQJW+Qn4Tu7Ltqr z5|mOE9BT^&stfT5w9aG0hj5$NyL^RNMfn`8fx5A++b;}CyBFg`Xs?gHzq-oZpg^bV z4;{EFYHg^}>_byUCtZJuC`yImI`921X8w&xfz`bQ44Y0RD9vk>QeoyL!mOiE!%L9f z*BLLOVH|QbP#0`6Llg1U_j{|*eOnVZn%mI2wtoAd~M2l$av%h=6nGxfYxE~D^x@S&Cu|LnUQ4y2yGn{aO(1) z1;A2Em=T zH>jnUqGxfCd3MM4%i76+x~=eTLhH58D}*u`&r=x>p*$g{DLadlEc^Awv4mZu!7KDPw zJC6H-7w21?g4D|ZYVetIbQXi~9^&{jgR*%kHovORnCSu10x z$Z}+8O=lL6aNw_1_{h_jHu)zU+LYCUtn_Z-L8*ZYbQ_U*i}KmOYjvZd9gyXctCm7( zZz#D+_jtKdxqjqOwl!>=Qb*;k!M@j6h7VmlH|$apyrsO0@(Kyx_>v zqPDh-mpvz-7hcun{R1I)CXC#Zec1(_=xE>yx zexS>PsK9K7u$1|H1GVPU8XtO9@p)9@NY5v~p+TuA31j8!wG0a{6&F%q7l*Z@t1cWx z;biP?Lyr)TM$VdNH67y}Ni-%VCR)e?JzXUVovwhwJ*%#@b(NGZHq(dZB57B5mx7{V zObC20iv3Qp6ICW0ct2b6PCG$jTpY3YMza@kLu2ER9>d+EeQ8gW6RfVzy``9AYEA-P z%Qybt;_|XiIW;XeG+)U6vTHU;3-6K3+_ep>rRjt}=uufXe1|H!9LKhI>&Ik)vAv|& zs2{*C1hs&UG||dcY9D8XS9-*T+07q{1!ulHJn{B+YTniiKRi|!L5;Z_7mus~C1oi# z>FSJyy?6;BWhw-_!D|pV2?PlaKr7PeEj7F%`a;@mu(doXFErY}XTDw#E|p_(A=@o( zi+pUBa&ToAW4XI!E;RqB{YNV~fY2zDq%Ivh;*R!|Yp+Q7;RIXP`^%LUgG)9Aso%u- zxOnuD%07=)9`}S^js``7wGpDiGE^_A#a9dT-m{sEnjBZDpW|wj({R3p8M^N56$Zg2 zRG#)eEvG6Yj|d|3m)?Igk}VSdR@`?fG1*_`rnlKUBCJ2yMU1mfp^x;ikD@G(tO%TG zJWuf`j4IhjK5XpzP;`T;_eY)Gy)Dxe7cE*%AWIJ0M+p_u_rd|jz2Hai%s{2)YQf^L z0g?r(i(ir&0UG4d#}T+|_0)81WMug$W#Pf`SoxcjWn@x*)D>vu%oI^6xY45-6~VV_ z=X@-niS!WOTlKyUU`SPC7(TL2;o?=-8_00YXK7Bm`?E^XJKF-p0!5uMQ9_-dvcj<3 z#kp(|g)*SnTz`ln?7AYRxkqE*Y^oGqvIaQMTi$BzE=T2SFGR(qlZ#H&o$cRQ?sM0{ zwuLWcxR@{%-;NQNFpz8~2auWmV9~Hpgcn0*_y@8%xkT1&J%}gjgW9fw4tyEH5?07zrF>i`eL?KyG&Ts`86x}AYBwK2 z_Xr1eGW8V*XC`^>w? zIf!KKflQ}0=yO9K-cDN&;yxqh^a@6)t@3PxlYY!E#kPe}wVb|u1T zPwa5Je4dY1()iCwnqsXYdzbC%Fdv?NMpM%=js$?;fEm)G#W zv{gAV`HBSX^~#0;gv(Xm;adrsgckbJs_8sHzTV1X&E)8gxJWSdlRg;WFm{-u^k{bp znd_gpvA2&ei`v_xz*sjUOMV4epp?S~&D@kjA#z)eo_rCgdoee4Y=OxPsX%{#9Em?Z z$e}o4KksgqZZ0zXazR?tVLs>kT$pY1@}r1_dLAAMz4fZwa%zT+RlyQAYShb?-x87? zDL0dDaSW2gviMVOJ z$eaUT>sY%SN-Gbjt^J+ja1m9MS`)H zErpESG%1Vmv4eT@JQm>%O+FS1DpOFZKVZv(w#{0ddp8jGoze%WENwg=X=v-KIROQg z-wk98Y}^C05kF<<+&%+OOzkNKS9*o@zVE7oyViOFV&vT@F)~ z-Bs{l444#0^r08TP|a*32cYPdSx1*CIKdW9#IMkzva-#G=f@^sE-|$})ou)|r!2vD zNDue$tTIOgppJ5m<%gpo|A(z}jE*eYx^`^aw$-t1b=0wK+qP|VY}@K|Y}>YzxBA|3 ze|_KYI%8DTsa^Z5wf3CP3=QzEtrGW00N4Gx5)OmYP`gH8$Ek7(`t+$Dz_Ax8kUL+Z z|3^xh;B}ksMl>7no{rI5$E#Hj;@UKIshNLD=XQ+L0{YHd_Pn7_x3K7f1 z!N;^KC?LM$Wnr1)X0-B|QvL}_iaFK750oCQ&1C6Qxcgokn|$*8t%*=~>vVr7I&^(~ z9haFoI|fizlPULh zSF$uSuV0;0UUS7`8NW3pnxqWbBef!ClR+g?3n4?d`~X>`O>{dhVru+IJ{xVIl*5Zd zz+Yd7pm@J~$@&Zm1$X8W$yo^=Uu$lW!HnXM(hL`JWo2jcK zjx7ztmI5lDdeMugfS$*x`#5d@+~{2jza6Xn26;V<3gN;|s|2uve3Sf08OFGH;lroy zytDq`LRC>#U}gIIlWb6|J%tj>_D3lPj&!vX zMn+Zl`2(~Z?*B-KJ5TS2sG~u`+3#0gP*J^aIDn{z1e<%W>voY`CuD_k^3lJ3R{D8| zSMWYlKc`bKM**E13KF58B3Vu5jC5szQ76~Zx-E{Acggm*-yzWOH`=5gn|r)F@=Dk0 z>#0`hPd{JdDSkEte)5tv7>`53%A1Ax>8OPilX@eWu$G@0=5X+IX(&fgj06-~Ob>m6 z_=N9>Ma-`(F*r=sAgibiyJ{vL(2u|W0?KI}$H1gaGc*bkM0wTPv*1AaJO94O4)0q( zv!eNUdquO9)aPGPV)?{i@NO5NC58)pMFc3VJzS#7Z+o~Gzp?#)!Rv_LsahfzCD-O{ znQX!=I990kLR|4x@Uu9dh{4ZA=)AldvXL>k7-FYca#c)ToS$ECsM6lePYfMfO2QJ} zo=W@Gz#Y-#Z>!SJm>IJ5_;^Ah*c2LMV-wHv?<|qKi0QQDXv;|@Kr1-_8)^gGBvP#& z0}K8WMY9cFMC{&4!GyXS;2i3p+;P!J6E>QLJT1`uOfHP4tAU;&kl#}%-8yDXd6Q<+ zL>k*&QXGZ{_o1~(!<=&m31c1nfb0>$1-!p|hyFaU8>Uk-$2GzttoeiB zo(W~Z?#F=z=CX0NCHf2MmT zqmh_9+lixU5*=ghH|y;lqtYS1YkGzR17uUtcC`VXK}Ah~FsQnBagvQ- zt50xq2|y-X+wek3v)?-66#g*~8X7ukZ652{#m&{1g5i^!nwqx$AVx)97{X5;+N7xh zGvi|F2%(F_Idc=q1Wg;e!nuouUp>#6 z90dz2{IAjI5Dzd9B@aby6Ps~&`TJmlMcrT%0L>Hm^Z4KZt?TOzuau~bc+qUjhygnU zkSeQN2;fE3wtWX=P%b2(qLsuYXGRVsYiX*kVG#C1kt00;@QZqy)TsWUEf3;zQ`(b> z%ftCLkWmM7AZJC6u;~mLC%WMQ7Uo2Y4QBBtGbPuI){?67v2o{+mE)p zm7F1>oM@U!Epk{T*KJVuc}AfR+BiU-tQeZ8GL(f*6C6illX`u2TJ6f4#xQIpS?#!H zr}Ss!g%oL!tdET%hFRnR2Q3U?>@y;uVtVwQ;0Ark8W-Q^SnR%TI6VA6GOtyRuxCdQ z(>B%#WG#~0_xI`LG3b~py_7Tx=|ouS1! zEO^8B#_Cz(?G6}6L1M|Ta>d))afjDM4NNmmrsn!;_iyamxPcQlbW8j5R?l?ffD*VL ztbZ;|)L%*pjMBCcyZA?V(LL}JoiR|hG*>X*SE65BFrvj-NcYowKu9-Qn47Vz-mU;8 zqpOSybN@~fDC`6azs1{Rbbo6%I(e)f>V$NODOaAI5u_$?lWAMA-r@pc&H;5WwjxMp zR0R#)n!&N%694#`0%q>8Ht&hO<-}kLZZ;?R;Kts@n zFIJfIePC^z!pTp>lRK@WFz83@CQ>=tSh&M&m@4HNNqG9}h=XQZbhOedD`wiAD97Vd zmsGAyOIO;hIF_ol^t{jwbyn+=vdjCXBo0r4gGt+V0{Ks73Vf>3ktc||dG|g3k{6j6 zy8OrpmiLYRew~(^>xZWLM^tq8#5y$!oBGR3L8#Yit8@G1Wf!rF5%9ibvn~`t#ls5U zoch@Vk`_%65y$V1$jcRM%OM_v7mGo!xdTX_X?!g(>3MQ->!PfFx<-%FY_%=%C8_b@ z;X+6Q!0z^zX2@l*gbTX?oG)ai{!8PI5*Vm^G#L}kHiFHJ%G01oevE?`ao@kBwl{Eq0c# zIui3dBh9KSZ$U}qn`?ElI5zfkTa7eDYF{+)7q6uFTLHEw>?|naL9lI) zasuhuRMfx)0SIx*-3MC;hWbJgXgb!jy`=c}KeY|F4Vr{4# zX>F|mh>smI1;P2lJ*Z#)Ge7(LV^$3n2L=&@Ghf4}^pAE86J9<(O-R-r;4xa2ABcop zV9pL^uNnFmIv7zzmF4ONQS-b(Hg6`fbH=0?Fec87!Xk$@*V4V#jK(Hy>fD#q!OKViA`mMfY`slAum+xt%*a%zjp6*{$2wgF? z;|zmB+;7~Qg}zj(3Pw9XL3ps}92X$BUF^m-P!)n@`s%cPCDWkDNXL6L(eU9oUdB=;GtDez#NJ}B9=v%;rZC2;V{=3G0DFgK|0DbyA6 zo8pB?w}7rW!E9H}LjtZzj%A&xGoN`-E3BOK{WC}qKL4vUxSA{cd>Ku>cSS_Lz;f@J z;;k#Y3Eksh`>Xla-c;qFzoL839PGQAndJMN2zVUuZ!g~5KNMGKRge1voHl+1U3oW> zloxtFvONL>=JlUxXbEd~VEoe5r8w&$S|Y{A{JMpFT6Foq+i$tiQR? zi>@P35uvqGe?#e)yfeKm9kwZ}X_w%q8*W2Z@isj|cY662;R&>UCPvC!MGh91b{bA3 zq9wevTvawhPS71s`KO>K##t(=8ffK?Vmh6n&pY51O|jnp zQ40_@VO&o)kkfQ4hGQb5hq|A)B1ZGvHGBBhy?=)bgwP6=La0<8_5p)Say_Fa$>unw zw7nSXMTJA9aXoaL*Pz>hL^m3rP8aSCI~S7*^a3s1mq?VfZu^2(e#Ld41H~0}EPX%e zJZ_nccR$-k*2mPJayrk8zz54i0fR^p01FG-6_5v{ArUylxPr&e#RKi&0w z|DCdQ?M^hYj-JdqSJri~o zDxdLsuP^~OS3UQK5v1r2Jyo|l;SXJn^;~wjuPha5`?1!#mD$QUp*c=9DO~`3$m(tbxAHxl0+(N< zIBF`fTu=0waG{qt#8DWMZ@4NX zW}JDngTUuYE7iSXUxG~m;1kOy{qf#Eb$j^3h!l;Dej7`^kFm{r{9#)dZMKfHTQ?@4 z{O-<0ZGTSV(A4I;?gHm^Pxdu*Lwz>Bds-z~`&VIGtA+w6#PxR$WM5y1Shex_flCPa zntwgfb78t#o1-4zJvecj)4-oNf^8`F-tL#ONBI(~D{D61f1N#B4yPnj;}M4u^PMi_ z5rqN;>OvV4vGnBCQ$YID%`(o`ARdYsFolE8Wwg~ zfNoTOd|vBdFq{B93GP@3@ycz&(Op;Q@dO1Q94Y;bXYBqBpOVA5it9w{qA$ymdgXtUb*#)N!l4ztcXe|U6&m@BVV9;L%)gFInMR7X!R+wdY78;4OE4oT&pYK1(94O@LACFJQdp$3pass_xKEiol2r{ z|C*dLDXZLT=MQmNRI*eXTL+<1#{k26S|lZP zR9DMUw5C#2pen9S071ab^+{2QYa2w+-{0Z9Cjyw#LWEG_m6er%+PPbR`~i;;VM*v& zE4lE_(^C^Cn<4Ec2vN_{5~riHQ&e4Y0(U7dHI?SW*4jD}uA5vs+Z%4Q z+<;53PFo*Uxq44A8_iOW{J7h^J)k{7>pd% zKq2~zRGH0cxwk~m$2aqdeT+jcnGLE!z9W%B#Ph@HCC$6EDO?D<&65>IOV8JcD~>CV z(}&I=>NcImWFi@Yx&A)qRgx4lA{edG9c;%*oN&;YxkN784$liBdPhy*UD!v}mUbdL z-p0C!GpSSvK`4@Ylsch^mWKPdl~OZU{S1$kaB;{gx|ob%R5r6-KisUde3}R;IkvOx z2uWVJc9?Aa^T5K4_0cMaMYlNW^QQlQ^7(R=rGP-YKj=^a9%HJMWHZ#J_cF8CqE;1F|Lmonb+gQNCv0$8N=$F-CIvN+P&CP*drXFz~&PbK`0faBkyo#Mta;a)?9bL78GOG`Iq)#F z@Z;dz3aQp6nKm;tcX`&>=dPzyH-emUkYU&rJnh~64E&+hD zg}buFO6&3qT)<9LZ#|kEnEtxgA*>Fw`YY?C4EV%z)szfh(!8W)u#k=AM5$W2a3b%+ zPAP`GLp2UGL+5GIB7SeBM|?BBCJAtHgkjP7N)sG5ehc6!M)a?SFTa<>bVsrjvPZ#W z&V24t$~m@1x6UIB&EF|uVwa=9zy|Z>otU#x|PF!I*Yj@Rs5Emh{ z!|S=#JuEsS-`{Y zr*~W&bdITWtyHS2ljfdtX}&zaIliu*RsXEPXrq8duVRyQ2?!M6M{yUTFPbaK9sN>n zZC!rO7^%}*XSBh$*4qu6a|`r3QboN^f=E#~_jSb(gtwb%uTZin$i{6yOQ*oJb zZM~?uYt)tI-~PPz`r}$-+L>eWTzvVJta|^jD4;qmdl|)EtEtg^^3?&t5~%RRT#)D>@;LQlaU_2etfqaloCc(*3GHVkd0)~F1AfEywkOg{ z`K_`uQ8OhatMCp2CzMkwJMXBRR_5dShx%H+2~Ale=F)l-Bim8Fn3>9UKrB6@*xl1o zYg@<*!DT1n+-N#Q(H7{gXRpGyN}_RWeV{wFDcqikQmv03&dO-dRtV4JX}THFlW%aY z&ccNEt^4?S_hR`Hy@z40+-3JB9|iuc`RS#m-LhM&j*ah{WB#uD#WJ3;%a5H{_E7 z!jSpiMV{!H%KyhcKl2Z?u4#KR`v0KvA;BP>T>?Q3(|x^3hEo7DmSAC~UuC?jQ6=Yb z3KjDG{0D-H+4{Icqt(PCox}WO`x1746!hYqW2b>YnNt@9xEQPOby( zBDUz_Pj$nluCS})L&F6`3!@0Wm>^Mddu#X)+k&dhAE+8_>|1Wv0)C3I?2=%Z_BT;ZNAgI zGcRQfvktSh)n0oQErA`WtAd{iEKL9%u5ZlMWi!wHKBTpmTjfz1*ohVsT#c-A-n zV2x)f1|tsbgRMPiCS(*-KXf%Gj~9=kKI65;3?v5g=2NoSJ32iyoFPQA1AV%HTWOpN zAuzKc?Xt-sDvK3{sR}|7u2uMRG44K`C^Ftf$_Tq}+Xe*v%4KhCqQ96EC)2jI()B*b z74UmizmKRBbX5&j^V3(wi}wTu?4Sce54x^7V&1C{7iK`%FEm+({(h!gvH#5-7dEh9cY-0S+26#^ay3t(QmB;zkaGeEg8&QWlex_ofTkS}scb>MI%0p(T-&j`Uc;t)Y*YXf zSZXqsZNIc!ahw}Qc2`k~0SOKoD8dydnF+O#h>{@S0+;O~XRg)jQ7bL|xyj&c zR~xo!DYhKD_GwVICl3X(B7^|x%a;$!D zy*<0lah~F%p$?1E*lc%gGV8`gBFuknCA6huA{mp^NpI!YQ0FI_mg&!k&&^#6+4z`n+PNPqP4U8a$qEM?C88EG)Mv5KA&G&Nb& z*?J?Cs3dFGm?dl1(mFztXYu?Fw>)h(2#tDQeoU&k*r24VY@qu<{eEbvS{G5mb@gUP zKU9+v%i*>hW^CyI78~xS*(Kk~tJ+^Dh&cG5pPY&3!ko4?xgj~U<17m+ zOz9_!H&#JFjHOAC^oqEaE5yj>6G|~0VQ^}Si8*7X{||Cxu0{&|2URnfj6cWQ0Rh|- za1+OfL;-ViS&TxHka~qCs@Sqi_R$aNZ$*J&mCp+^0UNIBwINc6?X``#6Si%*sbr8F z@bpZYdqa9@{1zj$+WakkXC|*Pqma5$1w!;9`mYwER%DS6bAsits-|NJI>c(`>^@Y z{o~_HRW-bguK+hT4p*q!Q4%#SLuqV{W}YX(&rkWw$JDsPg${ST+UlOOtLiQ1M(kDB zPD%ap$ONlqV%9Fuq9>^}RxDBS9f0@`p%Ma%+3d<-Ya|DCs{?L#@+ z@h+n6GR|#eva=JD8hvVfJmK}`%5QsA@2W>(uU@O#=i=+amekYtA7bX|A27|e7c2BL z4eC;ji`+NS5aR^uG1}z%YY>LCMPuKLH!rzqdGP862;uaRr=@`8>j3KgCIH4)m@4o}H???;U^>h>MUtAQeWE1$3ek z^Cl%8dGh)tpcx;Hu^Z;iky1b#lGfWR5NdDKOIZHmKB_S9-49;W^=GFO<&&*kDvyxy zy5d1P_H7>q_crpds9EBlF`g226uyB8)r^mLASZs+gQO6Q6Xpuw!QK%cJP%$!4VX7e z_N>$!VS`|dfM6;%S-_UvR)B8=C?Wy=>PBUxz?gP)gML|AVu^o#-6&bX5@7S=VWOk$ z^wLk7FM7*@3rkzuwiNh_h^47rroC03EhhHza4ru5DRUx5R zDBbZQ`D+67{8~@mLQb%G_Glk=!w7VLFZ890kyaqn@I6s!?3dxM$4jJ<7UmuZg0bBY6vjIi0I{iDlQ|u zsL*zf;>lxX=Q}q&ySPBfluXP02kCh^bpTWy0^Q7;w0wnEW^?`^(H(bmSeLF?P#8f% z&eql9uSL@&C%0n2m<-w!QQ%^u(;~CTkb_F`;Cfyhn#;*WciVOaUJ~6vwDbDd}$_x6tp?Z1RH+_qUy*1F{Sh--gNyYv-$Na8YU0AaKaTW!7KJ?7D) z_Td$9z(IjI5BrBp5)goiKtXstc#L!Wj%O64#RL;EsCBjc4irkiU`NYy$GStv2pk%~ zbMMSH*R2QE((^#v)UpzNPS5w}E)(6Lr{(CIUxJoV4)lNdT~ev^wGdTDK~CjQ3kJvi zX>P25PYD!{*+>~Pu;68jv~>e&G^!<|_?QaP5`}>moj4yWI(CYzICk5>X-%c$4R_I= zamU>7#ONooX|^3f=5_*3N$fNriOn$;;lCXxr_dez)SN|{nux)bmH|)xYOF!VTxy6=BQ^!xS7M_Dp55Ey)N`m3m>5ffGdzb&V1ge$W)Oh^|_4=OPZ*yOF^37#l7N_Umg!7o{g*_4U0GM0rT z8HK*5@hGyd_b&Da#)Upc8AO*ys0%J^#L=XKRz`At-HJQPLq{P~eA=p}H z0+&&?WXw2fk;p8t+Uf7&%*4I?<*?#HZ8EgOg0qz8kXohK(irjLIQ-D)+d(Do2kV!$ z&YA9J94Qe9{W0v({=}2M%+B0M$$7}UPAHKneu9POORCCX>V9HE@&)|gqUrhqbQtK$ zlJD7r2x8LGk=dv-{GWe&3+ZM~uPRn-2b~^c>_Y;_n10?^_%uKY4hc*|{g)-t9vd8-6LSM$gh=pl0Qvhew3N4FxO0KJVZO841bA;3T8R z$4s&5o0}ro+yJa_dq-XVjW3`jPM!pdmK{cs(18%5Dq>P=2vTlgUqwS6c4laWXuJT~ zM)V2pwR(Civ^4~2nZZX~j=kp8BPyxdzv@MEZXv9pP(NShB|CP%C$zRKO;Lr0%0e89Fm#bAE@1F`L}5oM;!M%V-*h2hWi8QYXoLco z#5h9bL`(XD?;Z3fE6U^@4X=%*Bt`@FY_(K_6$1P)>N=O8;91lD-=(@kseawWo>kys(*wcVUm)Q3X8E?`b2$~O zS(xTzsXSIBkr)JlEst4sch7NszjPSIjXtoj+~+`&vpEURuf1@G>Tx?e48R$@uh0f)xS z!Tp~ZL|0CGB_U!pXV;zXRE(xq(3>z2$yN=p0|(U1_1hGAOxLze5UTTTeru=Bo#Hd8 zHa)OWtBy_wgH;HJ^%S%Ez0HUu5^#Ax;JKe+1p503lN`jtux8(z6sNveymi5g){uxCEzW*E)-`N8s z*luiL03Th5kiK6zMk-+fzq7ZZ{?HY(5ndm?_WB#Qzm~~OotvAA@o3P+KIS7K+ zSQ?vx=nou)5Y}0b{+P!w_}i}wPT^-(nT?{VFfVCvOzxQ7aCI6@3Jk7Rf?iSKC^~Ow7Ke9-M-q3uX?tRPQ)!=^$DC= zf^8@rt7K^;y_I$oc>VQMcXoxr$IW3NLh6g0VsL%|SvfePXf8~WUQ#}O{HmbY_^BFl zB`8?asF2s%x?3R#^b3O(;2QPrClaS1>$7CvFX`Z>v#=8hoCPyu3hz}@H!={XK#}FE zeKAggE<#1E-#i_XiGeSK==ZdUZ)xg=hb%22-nJa3NRwHBF|T_vpG4qQ)uQ(~_Sz|K zwgNwpa3XGL{S+{J-;^&!`$y=ST@kVSwo-B~Vr7}TE#>*98rGJ_{CYUi(+fXt%dgI7670qd z6l6-Va6&IGOQ^&1o0 zQu^YxzIoMlDwVUBEgYs72Fb~L-LatbN;?8@fvF;~6Mh%{v6zrJKH)N2r@+d8ar^+HVXjrJqFMi5Dr08yO$ z$vv9LU*SiV0W;R^P&hKl4~k6{R;<(=|5bg_mc>X%Ora8z+0rcf)|u*uAkQJ|PJz$M zQx83fNU#*H>`nP#;bPP0H1e~G)>gNjuXnsFPR&V?o45LvWQ9k z#`mw)Mc_ra_*&oVJ1>&I<=+8XL@dKRt*{XM+BlWO=U4owz`*CjwK;FqKfESD%PTxP zlMob(Fq&7d+;MS)Z3~lJY{;D(jF$pHBa9Y*qKarLXSPsw*nR;?D{zC5G76yf*kWof zTL(ARD8V&aW0$|1!?Ij-M2b7{SKBEC`LlEopfVyFEQO~*6hcbZwk#JEIYL%!y?~t> zg&OWvrx9EI!6HMT5j_t5Q-&ByF!kgk>WvEru~Q7o8fg4YHINz zp@7z%PZ7A{?_R6Os|lsJ%qA>CL9tk<2dw1*+{Qyx}hwdqMa=@OEQ ztggpbka~)iN-%0VN>xW^F&icDq@Fqn9O z4H9`_vullTp&Frc(~ESVXd=E*%CC(NT}@fk@N- zGWrEVVH7A*uAoyS0z|6qproFZKmZ(@MQdBp)A_|{{;OAvmwbg~E}qrsgC7uBb;M>^ zs1Et&WJ6mU&w1A+56UK^3A6D?4<%hDOA3+OgYv`J^m@r-)(^axfZ)W$XtX*n(B2 zI9IL;HK*e)^4&izfV44%Dvpfe)R=aFB9Mh?lqBcrXo|A5=1DJ)F9?bp#ezroOJTQ7 zp5~EN2eOM~Tb^0{jv3dl!ld{6hR2mN*Fn+>&GsIl88v!o?YHtSDxnHU24 zC@6R+&ISPTy>e;Lb)c>*p>ICJ>Eb`iZyh36-MnTi;`&n7+B6ptQIxOJW+WuAG=Btn zS>EaM%di#wcrNt~(cjmJb zCTaugqVI@mDSN) z9|2*JjjE}um_xRsb|l@!Qtx6uT^@B&Wdr15SH70OZ5fWW8j)-}u;FoR)Ap1}TQm}rAH7pMNZ5BW1eRc|*0$N^ZNz0;UDemUUTH5gjFGL^0_-f) z+_@7&1G6AdqM)XLMRx}pc&q}czrIa5yInbGF5J0I36zE0SC-d7#iR8ww5Y%=O+=&3 zfW0lY+K!bFPh{iho0pzLA8J_f#dxYeR1K2`DUyidprM%=JZqw%Q-Q6mr4kqx1}~Aj zNK=8i9d@-zKRBk@-rk0)tzZ>0IDuj<$Q{Al!V6ZPfBn<1|k z$f@6`?IJ6&D zbAnch(~W{+!xnE)PWaT0w;x`WEKwQ;Oxq-eP@V&7EQeK&mkddpgK?XP-(j56 zrm&{G!mgrw$_OXzhi^9ueI-XE3`7uYyxlnHos#{K&`pbr;ky-~6tiu)diNJ{gIVq$6b7TVZmjNL3=#7ywdoftVkz}44@j;GCai>hL)2%OBXlHqmois!OG{?8!-uzGV1rG6(D3c)1n$N>9iKOi~$5K?IpNS67 z@x*%$`i9C4F99)<<>g$KOk>@4YwOIcq@aGdT*}c+Ec9xB@Iyi}3xX zDBYPB3DpNQ`B?RG3R1(w*clpITajvcc5x4XUk!vF5%`ThpiXILr>|!v7)4D@A#~k$ z#TJ%1F3>ks#s9#9q3KONX!NH|QuJg2CtcQi}5=!_@TbGsATrs2E4%QwS!)GUymqcYb3tV;GL9 zN~5)#Tsn2=OUnyBMMFncE3~O^Xtt68%=8;PBrb)-^A!So5eAsKB)+=Pdm6{T&9+5P zZ|{d@#7v+9mRdOY#f7DS9RU+Wp;AIp<;gR|p1{&}_!3G2VvP3<5psAFL;+gm%_^y) z1TGUcketoPA0HRghKgj$M@;U2@>q3>n>N-;zbZ@wl19Vd1kHwBXHrzxGh>kT+Q3dKuf6d^rnnK> zAr;hs+^C@J!i1lH_jZ%{D}ZN%kag&+*nhKPxqd}RVyi_yFpKCjW!29fito2p0vka^ zkb@h>k1{{ExIrtLe$riAc!A_-wM|xvZWTIO_J8~;bnK4{^=Bk9aYW1^`5i({_SPsjEuEghwKhbo*7y#@;`AOq4HaC55Wvewz(p@DR9 z);@H3m3~H9P>*Bf#$yrZ=Av&|TM8$R2LqbpoBI!t_G4&>8{40tUtKm?lBsU$B-QMF z?E)TmWMmW+VWFliGpege;gk4psKiHtEZa!?Q=hC9vf zx8>&M<^z%Fv?jhcJ^vlETiEw8IW7cW-va^~9(1q8^6>H>yQry&txLO{)IgL&@yUsd z_t;s06My``j_s0N)%~4C!QD>jA47FNI|y{XsOeO`INugN_0XwvhEASrQwSO%#^pZ? zw;ao@F`vkMe!E@dqRN%J>0V1>P~gmnH?^3X2JL0a-Bpc$Qd0vN1eA_~N+wFvx{U5Q z$erf#i;0|j$Hq3OvmSh@2`#}8yaR1n;IGUgXsAF;lslZD|N8Zw39)bsUOFm1$@r6t ztHcXhPLS6ZF!NC1x0aVC3vbTm4SO^63pv#S#ob8afj=M5&*DB6Gy5xZ|H^<74QX?L zR)dQ|u}M=95$GXm!r{)Xo#bH-lK!2LQOQtF71$<`UusP6axvFPK$Ya=J#9Zbk?Qk^ zca{PbluDzzFzN5DeoncF%#N)^SZfJ>>H?W!hk_vQ{j3(bZRf| zTgVpYKm{aNlC#_JOk>lR8B?HWlG26+@)%2f)u6F({US`(Y_MjnM08C9JqB>UbN6s| zIR&aX8AajJzEJ0OoJth7oXRs4aBUneB^yDvX){*M?R}()hFj)%FiIyVMv;&TMj588 zeov>j;=63Q6~HKx>-UvMMX%(~*Keq$#Urob40CpNmV#Jd4-7%pcKTayKf7^yi0_#n zNL*`OtH7XKSg;n0WBUU)+j)*81D6el=Wv0wzSOhT((h64KZksX{|@=SvBEx6VFCww z5-}7dd+LCZ1FE5TJ%QDHmL^#0=TI1~3`3^!h!PE1%HaeCWWqPyp2=m0es50$k zbY~GW!hB0Nqd{krLfwSV9J~yHhQ*e0pASI!%s_Lgam%%vyCK|DJdXmhaewS^wkF@s zuSMlbF1AW%n<}*7o~1D+F?-uw^s4&qvaV1UL#Sr?T-*npRDPVy%}pDDaLjpYcyh=7 z9TTlt{Ig@ba^<)maLEH0=tfSjtT=XZtDj%e6RJ|HwDShAc}QXBYu2TWPkF^MUg72^O#*#LGe&_!2QZFehiH2!W|NOpg zYxk<+DJ>%tpCob(Nj$R>)z8%A{Gg`WTl1gZsQ+JYgtcG%v;5Fsz&|)ZEdBLn(lDj> zW8^(Kgc>1y0b@SySr0*xTh=A605ca37Jh@f6Zp)4l3O&#;PEo9pwavM*%5z47q#m3 zMF~`7XcHr*9%}2P^HEUt0@Y{ut1urb4IMpV7iSTzEX#^Hv#zHTcG-H1Y(#HceW0V$ zo7kM(U!}<&eN*GCa6~3~YfLv+EVof>L+;!Rp`q`2zRfGTOfR zWoKgN=-(0Kifg`eczPmy{M+VjuZiRJ-DvR;k;r60e|EgNn4I+B7BKCK>R?O_Qd+>e zFt8&Nruz+w+7TLo_+7`Cyd*CpJwkkXit@J)8&1D*A|y^zb7t?^&kjA{B=v#y-?9a~ zqaWUk(8U)A1-IDeF3_e=NKBw1AIL*#TdtV^;EoZ|fNw-%q9aO6(;w+n8eNobuBsc) z`o|=icAyu5Ano?7nn#zhUeIzsxc)b0q>hmb$>v7`qt?>;99JDBp1%7MR#7QmxjbWM zo_(Knpar9p_Hz=!B`S+KohkDLzSJW>v4)-Ke-od)0zjKEXOjLW0Q(nmlK&sYRsd+^ zzv?4DREARRznA{|?Eih;A8%$6`oUv{5n(0QZrg=7YRRO^n-`O5w)h4Xq96~8UQWCXNy*JZYs3gdaBCOsCrHB}{s zOfV)xDy$Yw%Tp(;*LkI{PmR4`>fjYR`&T1v9@rBgen0d}O_u?mo|blCzG&h}I_o}% z{n&MrryJ_D@H<7zwtta2i6jcMsERVD6U*cfmlOrTqc2mo^)V%r*@I=^kwz|`3Yzou zU}&Y)L7A*(PCV>OoC(jKPQkE{E-f0$oi`Hn*BkC5q<&*svZQ|cDbx$7{a^M`5aFAW zCE~}7Xp{sQ_~zWpqA`QiR1Og|zwJT$W}!D8liCCq zd^NoWFz5)tCZ%?VXqVoBGQfMe8E3Kk+r&@voGq@OBdNZY`GPs1X_=BZ6dGk;N*%g1 zNhXr%=q+a;A%Wt)@S^V6p#BMd(2HEyDQG8xu%u(JZkDMK%gE1#zw(q?X<)cScY~JI zeDw9(O|sUsDc5*zx7MU+B8)2M+J7YMtR+=4?V^-x7m>(j5-EMe`zkHO zrvUahV-I4()SFL5vZK;<>n@fT{&`dH_EtnyjW3lym+sJ=_gk`?p&enjw}hF=;r{Ii zfjHnV7*nfRW#{3?bjbQ)WM{#CQ=Z;B&p%&}t=)b3c8oysP^*ipD{(6;Tu<2R*Cf+^ z#0{>n0fyYYKVAfaYHF!;N{^55DB#r1799f=avSNXM*U)id3nq<*QK=6!qbz`>hGyN zd9GtE_4?9$c}Ssp%~;q*p*xus*TJdt;rdAbeTjRHiXB_)-=&T;T2N_;GEoZNAG}x}(MSe? ze0=BtIRhcQo_EWPH^F^S=5%lMtGa>Xbh%n=ewn@4ZrTf(xw(y%G`YZQd7^DQsnKPOigZEk(go6bFr7~ zYehy&Q4^c3u9hYX0OP=Fd{JlhX+aQbp(LrQD<+G02qTI?f%MYF7~b~AR)Rp6+IqT^ zR#!?&@R}8k?!Kb~)&)_o!dRJ4(w~tP>B~A@`5KlWa{s0H69B%(t0afnPJ@qb0a&B~8M{-zIstMB$z*lTzq${Y>>;#NtqA7FXLM8Yy4-Nx2 zr`XE_+Xq*#E3~2@6Snc21$(Zp2}e)o&C6p1unu#tMr+z{sQ3ywzpPw|Wn_HC*F(8!ZXQuX&i{4* zAZ4iH`X5z2gX7zL;ng;O`GkR7rbCyBN){s2^nCCG1d#wZN7rAK3PJGiV6y2F+Rqxf$Y2RNeryFm|#E z;&|Qn;}TK6fHQDv048#9Xhw3JD@Da;Ld?$lQUf)ur~+5&29z)#+OF-BD8wYvgm@Qt znTY9|DiPsWtm8i5*_QVrbM78D>F;&<3%6FvlD9ksj=9O zxOe#yWe4j9{I^+2-1t}~()lgq?xpKff^wVKpM<^x+}8IUM5=v*=p$UGq><2@73@kt z;rbl6l(TrBGJ zP_H24)9{a5Y=^ETy3^DiX4ug?9SJ^%ZQ4=K1h72~Qn1^bliO+}{!m-t*d*#H(Vh%Y)u^Y1~Rj= zL)PuS3ER|^l%lDXDRv*1xBIp1dZM;JuPBVoO!l+gzG&AObZgYk_CWpKPD^%1LnQQj z{ee$TPLTN4dp;xrS8>cTRkC_c`g4rt4CoG4T))k8Y2 zeSuUfSbnGXG&X`^X894APNq>b{C6%e7j@( zTV%`ZfFckpusksdGxw>%t9UFFa1>Y?J1Z%|Yr z2vogU@lj#vuC>*|KG`FX-D zTzC8r*Ymf6u)nQ9u9-(d$Aeud^tYry86n<7yW-Q0)5)4Px>yAgnriwEX9*%9l(G^@ z7SGubQsvvGd=Wx(I=e4eXf_}c2uDGdd@!KTZnS5|h}tVdz+;75cXibhv@>taZnXHz zjMQV)p8#j0a96`w^=bur#h$m)VvLIK7Rp!-H!OHVHo=w6y8&li*O!sbggu~ro}7|V z^y{K*cbw*TSxwhuF5)LJ}j1$skcO12^7Mw8~3Imb&kGkh#_`2G5xw3_?;u zvvpk$0g$X9e!_paNSN5Pke~A1!J##(qwb=J-rHseV$+q-RQ#6gi4YjXXkgql%>ZBx zakjmkcb;R3{VB4Z}+nXXB@h`HN-StPpew zj9mJ1Vq$nADyHP;fGE0V@X9soSYSYm69BiuF%oYB&Uj6NI@@EYCvjU%Ku?SZrO4~W%=>L z;rkP@&$`)MVDTMKKF}GbsqVT9R0C8~OY0UutV;Pkg)v$I>JSvc|0VPb$~$K0_uoIx z{}{tW7a{l=*XA<=9z*T-MaNpD9(RTRNHS!2Q2F!QJ;WXD$o@o4+I$m!DxWg_hZTvn zd=HIhlSe~|6yJuY4BfOE8K*cX%Lp7g5RR35B5N)X_I}tv@(EI}tUW$U#sCc>%q)8b z9F)>Lg9>!tt*LvRN4Zvda%GCISr_w zq2Snh=``h}cs?tV`4PAwx1KJ-sfi`A!{yr2Wsy7E(N{{toAi-^UkmX+Dy4_{i~4N%pa~8_3L=)7aT~7Iz?PY-%QQ@=>SUPc%bcr+iRU+b%e+AHxL= zhLCIHG=Q95Sl)3K5%<`HorfTQJ``DEq+4s`dVIoO%r!_O4NBTcoD~Y$GbLW1I?cl;akQFBg{n@>O1g{&k z1pc=+AM2*k5!hckwrpIi|HlGoH^oTevjBw}9pxTv&LG`5YVm_PDUrZn5=0;DdAs9i z_TMWG-00w;$YM_Cgg|rXk))OR3}8?zGPyypP{s_`pI-?d4_67$Q6(cb8_T}s&>mu+ zuV@!VOIQ$x>bbMbi^KItZVTYO?yzc1<&P^c*+I0ITh6r?<3)hCVY!bBzY1!*4s71I zT%?oxpaogU2$8}7u_&TYi*3}g zu=4V9m{c9tqE60Mm+z&_nn7?!npRSOzRQOOhuO+>_me!Yq7Q7dKVeC7+Q9-JyBKgd z+L6y&h(wf>xXLB6DVNFTemXBMO1{j_za@7rxO*^f0ELH@Qu=^By#azQFf~ z43nLVOccPUVp|XF=I&heCs>vl9X~o)?YH}z-|ex$HfY>(*c_<@z*govvSCIu8n6iX zMP~s${+_hba=K8mH<*(>YxcCZ#{IE>>KC~tnuGm(_%jLmubp4$Mmj2!{@iZq>yC`G z+FuJQ1#JoB8)RqWpSV%jh+EO2MOL%T?b;6<9p#py<>e&I((b1Nb#DbV05YK=f!P2I zilm_=M(7bzFXBp9Nh;14uf=!YW>qPlWZgwOnM$l`CHA`dyMgWl)s~ZxE9~b$IZuw@ z@)FJ}#WCk-3MFQ;J`y&n1n~~6{({JNe{ZqWg6J)~g9jLu!d2H!&ly)ZZ zJVXL7nEuADpHRGvqgtln99vE3ClMb|0Jx=sEghZd~2=3_v_ez}DT zwkdQ(rGm=uVVjRt+mBy5HXXI=CJdU`9LxTL*I1sAQ9Rh{>w&EE5}%2Z(qID~Gk2%< zlq!t_6@8|Mo}BXu5AiIx`s0!Bq;i9S2Fl2`6G|*>MtHbTG1vLeec-&!bV++$PhUpQ z$4_U+f4H7Q`DNnkS-|}Na86QYCmbNp8or5=|Bcv^m5!=-|8>0b@L)xPUVI!a zn2M@$c(PKjWTI!L*)=h@bDB0r-0qN#Mkxj7tyt5TVGs`-}Lz zA|hz_;CM{B<7~9aHx3E?i_< zr;N08Qip4G>RXnAls)-(1Tupg<8lq7h>ebq=y*rw-_z9rKrpM4AN}pX-#_do)lm=o zC&dqT+l}bAH&5$|augpm{=x@i1*selAZyjklSWr(XTw|Ui5}!xcusBxrf+h>(xNYKOeYI#;^H?B-xV!7V~7cRc{v!Gg0+j z1GWQi@Fwo>mu_O8`Zqg5rR8e`ifZxwJ|81B_R@Aa9&b5|ix=c2LLWy;L*;-yY60Ufy-eD>Uf);{%cwR4wyx7woM z{z6BVf)=SufvNNhq=9zt6IcL{^oqBc&4}w3KW@fRhf3_!RkWbuzf&kgAY4I2GDh-@^agJc(YO>7KE!a67}1@WUvuHH@X(I#j?~ zTVhQ0Q05xIp_X@ zQl72nnPdX*Ro#eGE;bt7x@1khEoz01i?^&;$-H2*O*xFI+@+{no#nDe1m_1I)!zqN z2`85+R+MYD*wHIDvkmHg+dm?G8Es$!g;;CUDa+9SQf}tKjlUmjN$<|TQ&}u)-68XY zic6YARJ^oZrt+%+07JCoNX7OW8gP%E3IiO*k5bjSt^x?Kcd#zp98c)%-+xcmbScls zy@Zu}#><_Q?l+!PV+k>BOn$FC&A;C%PP}eBJkoHwEk-)0aLfB znpe@Gr2-A5q`~1=#vwCSk-~5UDDD*>Zuq?I$Kh?TER?)~jz%@#7Z~WBM_-=DFQ+b0 zRB2sPGw9vrfqGK0f#?$#rM#I~WWJm7*e@aqsh~Tb5lYQ>wxt>K%g-GQ8k|d#kOvMh ze?U$P~oi(hSVETjBA~IR>2fb~7^E?&D#Dh2HaK z8y*RMC1F*)4tWVLRYFTLjE8Z}AsFS0kma56E~F5<7ZfIcIhgRz%iFe~YOh?jVUuJV zb6t7^vZ{RSVDNi=0q1-E1*W8CYwo~tl|jB#@a$11WJMc4V2<+w4bW_azVtwmxw6#_B)fI0*n;tD2iP%|6@;v{ zb`NR#GV&O+i#iLX-hx=As5YSu#lRa!Ek#98xoTml{;BOLAFV_`KLqdQb7P6J62|)V z1N48G%mN+Y^MhIpK=!3%KotxSSIk%4-b# zFT=^sM*(pvJsWuUlbrimrha|`{@+!4am9t)YxB1c_>jka>bb(Xyb1u&0kF` zFN3fk`X*Vfb58`@2yxlmPd-a#toa@7a{P{E>p#2iyN=Esqt;-Ll@B}+mMieTbUeWL-5xy)?>|MbGVq& z(zf)KYBG%^$GJ&+V$yRXC>K9eqgwd`JG(p%qWZ1dIUD}%win6;vz%zK(;wIA>F*sH zxd1CS-i61F;jF+FEpPp-BA3MF155Jt};nad}NE?ZE*#OYx2ZXec9zFb)nK_@k zHau2z_VJ-(4FGC`RcNcVEcA(uTeow!;q=FB$^QhB+Qbdhe-n z)~$@m$!xwIst@;fi0N?hGGUx*n2%6Fz(F&ds?GM;5o619_;Wr52qx!iG4_+0&@z^W zXha3Usp7Pk=Plu4%zqKg=Lj-EgxVYHCvZe`9hu2)q(`MCYB8V1_!84N8DEL$%aWLO z(gt>_Z3gGhuLB$E#RXwS8jhyY3102z=7j|fC#H~|WpjB5<_(*A|70Vy>!9Qo(brZO ziAb(iv*IY;@2Zu)JZILfpfe&|G_->f`^*6;KS^%5&g~4Iqly$qQyUrcWJ9OcbgFyObT|lym@6he5y!LPg~|`>dUo0ex58! zt27|^%lL{R28$rPbfCzzYJG>S_`T|uKVRRWS#jVYY!ExU(cBFJ_agKg&l7qqi z&`+InbWJ1+m7xV|eRW=0Xv;~$|BMSRUSFzqV0o=9+G`X@&ny)TBNq~~eKtr8xaTNY zv=APbYWfTM#qAlCHgq3y(E<$ho;2Fei&`<>@hClt*?I+u?){0U6W~etscN$>L-uh{ zzUqhe;_Fz+cf%t}O;(g~Mu_SAb-RJyJ$=6^Lrg|aE|m~EOwriX6v1y{VL^>Smqz#t zJ*K(TY{GfV!;F-fS?JEx#B4WusASB==6$j!uM&@%nwoPrc>kb#WFNiOs}KBmx2)tV zlG#W+Do&$qHSU{gwd*?|%%MMD+5Q8X^7-xg{+AX2#M6au*ZwFb#z6gl#)!j-GpzHLh}x zYG$jsXXd)td>Tuq%7!#@tBD*zOryiVKCUp^g2)AvNrYPj{ z@k8&z3IvXTB4T_ZgHGO_Mt|B6EG#?Kt zs_iE^#mAEp^ZXpcVE*&*edLvqp+#OR|H7R*RCu1yv6<^MD8e=7pIt3S?2)F@5IECH_&CR6 z7S#ftXaujG*-l34k3xa%n++w4=)Jm7+gRLVFc)u)*ob?Bp0QnC<-#~^>SBOvpi#gLHbgTqxbSTbwTn15DQlwii;$!driqJ zQQwN6vJpUqDKq?s#M2{Ma2#|jNr%2&jYX2=HVq#%J;_;2NmkLTql~mB)-h}=??dUOYFSq z>5%%`($Y2?0x+#K4m$)(OUt1fx_rWwxLu-Lci&o%%ofuB=C+d1+Czu9($t~wp&cv5h_ zSJ>L;QsmY{S_5)sw@@-1HDbHH#2`zD1E!tqEbu5adV-K||ah$)$ov+ZL3@Ak;w;cK`K4;H-3qbLWoiTii&zNhX;1QrU&Rz&l^&&1$Qfj9UyN^ z0P;SQ!pvquWL+bbESg}VXt$imU`7xxz z1I7;eCQ$-T^r&?gr8y0VEXQ^N0&}8uPGREj%0>Y$-6ghINRW}_c2l9*{zAq8N`i9nv!3yA-W>4@xh5e0kd9|4+s!&S6$6~-{&45Yt&vfl-!PaRYwnl#!?;09M4UmL{2>Uft$-DK!L`K*aZ^1GYt+t;xOLku z>ODbwf{_k_j8r_gkW*AZ>K|$w=lyOLdo{*l#h1R8y%CRIj}oGKH=HxKgQzO68jJm* z!93&JaUey;PlFhDtlcXIg9L+8^@g9ktVjZD*{YQr8>Rsy>jbtcB2^@aPw0@&;p>%5 z%zd@P;u9R$*_&FX7_C@MMa6PUuMWdO48887{+c86@ol;-?op18yGBbEBYhaC&^hZ- zE78slO({N05%vlq@S}n9YeMIrAXD}@Zs_3?z1<~vpl>TxGs}1MA1^$t=qX?jnc{RO z?Fq~H_*r>Ua&n1mL}WD;sx{E75Uyx?n}{*~Bz1WXuQ@#v5H$4k;DBlodG26DL{r*G z`YrqUu#EBPW8>pAtG@B@IBG{usSNBSAA(j^9-DOV%sC5m{%cwtQw)UH_m9*knqVuA{qfje~HvDQy%Q=(4jFx+vpb}Y@GlEl9KgF+7NI!?7zTv18t z*nafPnAE9{7tZZnMQ9fE$MvAo(_v;rNPw(uz3Ro@C3`pFZTJWH(s~hch+)7uFg^w% zb_2Ki1x>_EA@arT`n3W@?1z$=>`7__bnO>C$1}g1+nj9xrI<6G<0d@!dr1=TsBp8n zsxMw4BevV^?O`T1jZW(3qIydYx*e(1@-g6Wna%u`>oHi?J$*P~3&_B>Md*bmQKF0! z>NkN6-f&z1YENH#ennBg$T0owI<^?^h>Qn`_2*68KBLD``HyUpm*pATcAhqs2|MY2 z@M$>Vl3t_9;$*_;LV^Hh@!Wyn1-+A7)TzWR$Am!)l*Cg%Y66!Vgn8z9rB!16gx8x5 zD9W1r6#n1k`UoJYpE;;;iEb5}b&&7;+Lco(>U5*Lw^V}&rf4+^n339assa>NMzqt|I=ee%iE?!e7+x_M_ILva3e42Xc zRHDp(D>UqFD;ag0oPv(*`B0>t$bMD#Ti(ZV-#wMg;l?=qK{0AAvYPmJc?)GYg`J@Flp2-smWhBOb<`e@FbN!DuXv}+L(~zgH;b@GdIm+;lb!~=Xw&ow3 z5R-%oYk439il`R8jp6y6!mafXaSm>G-rEi40hqG7vO ze_+1_6_udd#`ijR$(6uW|1h12Z|@BWcBUV00t#q1Xv(#9%S)?$(6UEK97YfsFJun% zIxPRmVk8^_ejf#eIMP_AtY2WE*)g~p_)fgqgZ=Kfa zjw^~)dm$7EG6rY^Rn_8AMOD?%#66|fjcSqVxgDOwM&A2L)IAyphC}=w2o74u+kcr4 zZ-lLA`$@#rB5JulkZ3(h+->Ev2gwoLVavugArAiVC|v`(ID7sW21>M4rT_`)(ykHu zm31pwsvO4+BC+-DSGrXTPy6-YpB$r0_)yEo-NC06*1wP_nzXH?N?y20KuCK;$@({8 zV36L86l7bqls6j7<;gdCLIb>=WC3wa;+_ZA$U{`D_t!7lAimj(AULXrcugN;pZ#jD z!F1a;Jd@vs8Awz-7A<8Pk^`A`ox#b;OCc`WoL+C(W>G9gJrExhN#5t4JPR}$=Zw@M ztFdb&PuHV;I8}4U4GEd8fARUwsNzwqNYbB-*w6(Qwc;9RZJ$6%8s&_WOa$ zdS1x4x3>YM+NG1tnLasn*M*Kp96elwEgRl^-2fY6fL-^s2@+CxsqY0QNaWxZru8>Z zLVE_yJT4tzQ(EEIsH1}_6goF>dKzDPdU{h(vh-Y>Sv_#9=N$q`=q-vT=ES3Y)yoEO zKb~vve!qGLwyD!)k(F3xXR-M@tv@wDD7pu%s}te{wSL7syZh)`uhdfKZnBSaJCEuQ zw!n5MvTg^sJ*+c^ouP%p|FC?Xl*bB2Q{a)F1Uwo0QrO_z%iwU2+Vaaa*}qvuLKYTg zXTF%;Oe8go9nzY87;=iLm^eu)1&fgphDDGA9&OMd=u9#mEk6UP#1v5d{b zXu<$Es_7KTj%^Yyhs{!Vm7s8Z6Pcgaj;;oo_YB|j{;Am?t7SXvz>1trQNeUnXVlW~ zzxv#57iXVA11>I84_FkO+Wx@~70MOpgnoC_vD}t8u>!U!ABrLq)N}+jU0)ddpBJze zf`Nxd-0cuQURLwmyQoDABwl0OPaMN6iPl5lNyt34|A?T#UIxgDxfT1sO6{#tZ0VYg z8$vrSEJSz*9JIsi%X1*{gJ~p~+04%wGY?zbYrS0(WW>JgLrK^srS0a&z=gi!e_Yf? zb3@Inqm0xToL>dIo4qg9#V*S+W7>T6GNyX`_ziD-- zpzrKgMV)hcbCD4fGC!7MIWIa0OuzsnaE6n;BAShFCd`Clmur+PD(o(ox2}kkXBx3! zhsKi{D;pC0tpUY%9#u6-U6^4RRr(rHZ(R0MQ~N1!4cEL)iH|j^j1CnT8lbgUWTXz` zE1FSk;_qn#{4iB{G!V#Gpm&BZ>Y<4Mqp}iv{Wm{8bQe{qk7y_b9^rLTm;XI32L_nI zxc=?)?n}j@+!+ldo4B`I*5aKE*#7hz0epVYZoJ-LBl7DN|9u|&6;gdEsZ*DCgKvzmKG@md+@d1z^_JrRtxCB+ zyvQ2q*zVs!amHrUO@_BjRHEeh|LSNM9EddPJ1jc*b0;GW&9GHX5B1kivq?@E0L2>~ z5h3o;#zOlN5-DU-@UM}n0RukF-od1kWH{Q3#pgB0w5n4#U~k#XxWPn|Fe&=aFa3pg zYQ+Q-R)Q3q4Y~CL-Kla%K>qiZ{HMzgaDXxL3SE{*$rx-ZY7^^3pJiw+D}zP|+ozP$ zBG3P?*8G5hn`+OAlIutIg=DSaD1K)7L!-tD0{nbXQ1%jXdY*|S3+h$=Yj9qOb0sf? zsD7*s+itXCmsymh@!OQQZsBm|3T*kl>l~Kt5G99=EB)uz2Mi$o(>8UnG6!Zwb8(pO;tZnBhyEh;! zT)Tb=1q;gqHD5{xcqjhTbv$3d-S&zfk1lK~E>^wJCnY8Q`_uqghNsf}?_d3aqPhly z%-a~ON>BspA=;_=cQ1EtBmk$@tA&%&Yw|<&`KOQgv-$Gz$5uYJ2o2Sl( z2cyU@=X%#DsDb0-(!B2%u=R5RQ>O1Bg$k?x?@RN)kNt}akv$UZsCyI*obCga%d^E%;?`WF8rSh4A3J4%*9`UCekD_JnFq*QA3rJP`*MJzf}J< z5FhPG3P)f)`W}uY3}65M?(OsIA%Fl{CIFlLmGZBq{<&PpP{8{Q z8JZJW_3zs#NNkUUq(JsWoA^zvnz{v!**k27gVAo@`U{^T=>8q#av@4tK*VjXG@Qpx_v zM+hNSEXqpMTXni=>&asI=x@oAuHWP;ySkFvp{+^yQ|`8>K71oFasJ#D)b;F`(I1F* zU5YZ>AJ)%_Uo%6i*3C|+1U(jg?eMPm)LD|;rEO!UYg*FGO*iPOJ25el$)KO}m9xB} zLL^ZcMg5BX3E+G@m{w<0XR%<~x_K3E(2;bVhY>n8n6~d_G@kA=r@k+2WAQ`QbRmy| z!u#Sk*WKyC3>Ye3YuUaaGE!RCO}o#HhmZf*vVl+P-i_z(V=V=9WyCiKWX{0IWzqW9 zGANk9at#lSOc|u?&zV6+D~a7lZ}+7I1dTB6_!+G4)UQoBU1TEG*mi5(ILxlFq5ZTd z2qKED*hKtCzBdY91{D3AMquFZN0vfC;x7=BJXi<+V+9tbF}Zahkym8UxOGaG#7CvG zVtKC;P_#=w67F~LCkI~j=Iq~g^8K!myib=KDZY~@38T|jQInH!#wI2t#Kgddhv>vf zL?z)dF+=ET9~eL4(gUj2oAb)b+LYTwD4emjF4C3=Lm8bo!zafvFfpTWZC`$P78T{` z^;pyC)hVrsb@j1!L(;NJ=q(ig>;o+AkWumJ!Cd!?r~a|du| zsH^|kiXWIH&?LqW!$gw!WI#b`ZN=GeZUkFSai-QWBcIw34Wvw*kV5{1(hB?B@>1w& z3J$u(lXoDmU~ttA_-PEp4FtPPPZ56Ox(p-?bc(|x>n9?*d60%73X6DIY(&@M-8$FZ z!B~o_q^6b0TCtVJdN)s=DiYNW>}LB+#l8aanfCpg-hme(NHgk}?3IfpxdnvCrzC9{ zj3reM4fe`?21>KIwG=TT5kmV#u1}_`WLXsqRuVfgaGY|@wPY=#%3a8berslfGpa^mUA|LDS5UJJSzPzK1s^69a^Nl#7?A*KB>Rh7IaWK5jZ^ zjL`CmL@VSxaxlzu;dLSM(HG_LhF(wUPz6^_&g^62oIs<_zo;teMWdTY^>~x=6 zJ3VCA%Qf=nK(@?)+E1tWgudF4l_o2<(b_y%`UjoFy~akBkMp@OBtp!Rzg(#CnH~7B zGn!om6Lf$sNDqcptPAL(WHRG-1Gn#U zbu%Z;tKIVKt>CQe<{2TPzI?&@ z3o0{6M$bWcXfq1JUqRXKRe$jN8sn;VwLq$(Ah4cgO3Z1K;giC9pRKQ>r*E4uOY?^{q}x(-dC znywhJ;;0TNP>hoA-@A8r_+S%Zww2TK{+Pw6e6?ph+UA7#jFTLeK(raoc!mYVZ(Khe z9yNO3IS@dUSgnTWd^!GQUgl;vI4PUueF^1#yTVTAW5i*-n>Vp_Xm50f4a#)i0xBkl z;7SD=L2vT?R(7fW@c}4u^>HiZE8Ba6Z4oX7GqNTRyX$IxDIXVbX#kczIo0F9`W73J zx`HPNNMkGhT8#d1`K$ir%CC8*b2;gU)nczj44xvYDh3(R#>3+ zZ4Nkn+<`<2>w5+=77O1m2t*c{0a>WH)!-v;jz8b~(kkfeqdSx;?R;$`tYK3ZA<2`H z2?38o`?thS?jRT+CUml_pY<7QNS0P<;M+Zou-m-ZlqMPR1QEmwO5_9+91LvQFis1{ zV%hLPUL;3C@DdQ$Bf((P(<(R{|K+1 z1#a|l?@B}1_P;-GpE<92Lz|+GR1v*$fBe4KCnY7Rb+KX~@VVHY=UD!`G-fK*2bOXz z_El>(qnn(Z+<$y;IP>QtzM&&|oxpVD;blWXT^-@##F)5;&`-jN41MZKJEPl89Fk5hEiW$8r0Q9aL0Qhk?gs z!_#?_mxl$$5c_k&a9?)mN%xQazT-ZF2Q%;KZBHzequ9OCAlr}Q84TMnT)T~Kg53mF z)+J7%Db<_4S~4xbRtj_!mr20{!DO zxf?d(pHrUMU=8x0EN0$lf*$vxniB2>qN-yAJrr+}*zsM;Q$ z+4)hqKCVfWQ_yNb(_L0O?tKGl!}<`r-HfyFVXyFlx=Hs!pf2AEQ4A7P;rO`W7iOk_ z$NIw%tx>8h-g4Eme4f<@i-V1pGo;aMs>B?(&Ec}L0)N=y#&Fo`#8qvh8@!Zfh=r-r=6jPKL>XA14>X8JS&JG%zB+%ImdCpIZl6dY~w+TgGK@fJa z2uTm$vOub7L7I{U9uZz=@SGvdy4=2lNOPG`5V2cEZ}VHIo^<9Q?5A=fLhWqP{J<%T zyC{TBJh4HkO`{glZ*vKo2+-GcD}#KPc|Ub)3>8fFF|Ybh!>-jkn=&}(cevOQu{Z)~ zI}THGXD;r<)R_pAT%WVt3+J{6CnBA#lU$vI#zT+g*1GDnDt1{u4#?dE4C}XIG=>(& zUIQLlJDuX49}&lZ>cS4E7YAcW_P0Yl zeSp33?c2HC?m-)+!Cbymo#_;J=Xc*oKyBZv^K*s|K3gAIhKi|Tx-nv2mcGVpqy5BE zRhr)#$XxgG(o(asG&A1&N%#$vw$CHFxrGI?SXy$CUg^$PYRjuOV!?CIu-k0Tslg+Y zC-3JPmYJU~ch07q9JXv#P*L)-DMtsmb6eI`7%RAKT99(C`I(xe}TA;||mx zQgrvQuRJN4>UDZu2FiV z!d2$$EQL?W7D+&L%Db%0C3t0Q@T|46%eE=gA(|>)!SM9(wzZ(JQO(eKyUrAG?ROX- z&sQ;bnQQ!s12ARoRb-*Vaj6{ zcq;}C0u&CetX{$l(a7|*L(#QV;}$TVzT$8lx0x>a4Fl@iUMS5CtT8j3lGt8`gvN2v z11aPt?#GO{#<~4>Yd0p$7+YKzq-I4%uUfBEn;LOru=U8>w8D)hIUi1$`hwOaS(}KI z+FW1@)2CtCw6tI&j5(ts!?o^hsV$XwVr^{U(Xa!RGLTYUH$(ev=H;&a7-LU;kg4lY z-J~e-DX65z87yQ^5#moL#$|qnCFhu1$3Frp(%Svy&jz204uv%@6I8X|uBF1GoAy87 zIixnpJd!>4DNETqH2xp1&N3*jF6z<=8r*`rI|O$K?oM!bcW)%PyIXJz?gZ=L?gV#t z*KTC`o%&{~X8w2G{&DM^yZ2seJsZp^VRjBzr*q_?XzrY6wXw6DY_ryHf7`9DJ|<3^ z<%brt!DNZV*E}{@mkPlyd z>NrOEy+!f1K)1PW~st2P#PR-y^v(f@p0f=CQ+uodkZO- zQLnzsbXxQ45o{FAE}dnE&aa8JDgSbT8?a0a@i}X6$gRPNS&-h?%s2_zKtgC;a)Pc# znwjJPCw+zn$sf~x+;MJt?1HR@2LQPl~)519mo zG6YSy4@lwLK9C)I*Ut*?#eGna4Zy(`d$1@a#@Iog8rFZ*;{<{4YiL6W5?_mIS zpP3QK{g7(Y=FQakHa{YY*j`^Q(;c~d^PAWRfOBpU>wREs9ve9fcyf}OO(!6quGTyEn`(FXYQKXs`*ksm z$85o++X7=EIm5GX`WgmVgkO>1{P!*mlRpP(4v@id-sJWTgdEj>FZniWWz9rkc22jp z78#e1Z93Qq2pg%NKN;;+3WB#l_PE~YE?9|^eh zqL|Q447#oPpGE7sug@S7dR!J>-vba=W>*0#C_Wl@l8Nh&rRP8Z)QSBq1yf&euey4J zlRR^mFl)GyJcfWQoAfbx4@f}%&#|r8hob3tP?@166)_)H@?c5umZPa}s2`fumH^B4 zXvyz-{HygA(Fshvgsl{zxo{gRE3@l+Lz!dj@G@T>&${1zZPQoZJzP?@Gx-Ebnm%}u z1vE8{uTwR$4&UDo46Lg?x0lD^VkBOrdi+hwEk`PmlpGQ>@_wTMcrbuQ@3%9gddm(;h-oVeb9*M>Bg=g8o54ADT5v3^s_mE!{fZ=CxODsuMCc$=gBNTM4X zjJfm+ZNnfZqvbGAG)`~RN2obb;0qZ(Zvt-_E`_PX^Wh0`@_TFy+{pInu$HIUNe%$& z0v7%*q`cI0E^FoZp9maI4uXZiX~X@6A3Y(eW2OkaHKa_8n>5N8F*e;j(TS98EG}G) zs@Y06y}9e$wmme4$75q8md@KU8l$gN4qezlBFX*a?LRklv8F~zWklO8TDP`CeFoZm z?Y{Mc7^Ul1&+!5Wc>k1jS2Z{!*8^JW#Uq~k<4LQ+nC%H$`;pPEKZ7?G7BqGcE9pno zsAX`*$H!gX9@+}3y9B>mt^irIo#6u9dVS`?=MK{yF74`i&{d#nv>W6=Y6emJ55CT0 zm2S?DD@YbX@hj$ipa;U6b2nDwo82oa2h4x)B<=8%ip<795q}UTlTiAkbEYIl3PF8)fbh#bhu_=7ZX(j8`^##cqNPSgOM$yp zaqO#l6NG2UBwFSYCm8J{GbfcJBcF+@+Q6M@s#sK7fD=rWo=xSMOJj}VD(A_$yyI3l z{Yc7K-w7Fce5w#aOlaJ$D!-K=0<`1XyqP7k31R@2w2BKCLlEwozP)A|(oH-4>~`Xe z&s@UI0n!iF{!5$t{EY%!&mD2ES>shvSwrv8+kA%^mWX3tojjCh-aXyUi=6i>+(CX! z!qJws2(xd-%9$u0=o*=by^19zv6jfk{uy$E_MY9F-nEq$C1D2(lffOmdgLk;AHA#4 zkPyQWWrhBMIbR4 zuM4HOoq5+5<~^bC9GyGTv;URp;>vk0^j0&9ND#s@`TL{YF8wR8mS@IP>q94TkbDm( zAZP3-OR}ThPKa&ElRTm1QJ&(%2})25(vLV%tdn5$}KbH6j9e@ z4*9g*cm;Rk6WG6uQ{-dX;d30m+ThVlT!i?qoi?0|W0u^<^d;SK9K6ouYay`}g~wUq zjjpiKEvryVSPX?hf3L9_o$@tDN$5{)0-4M&QCF}y+F+|KXG)D&H|ceCYnDCQl>bKg zdOFyer>!o4OJatdGn0Jbp;jE5AM3Y8lfrbE>#l3G@T1vyX;n^Qc+GkDpSXnlgcIGu zj;rssySK@MT|_3%crG;FyCv}{7a815cb_DsL1VY(7!yDNGoHUqBzMx#??s~4uisuo zxx3;R&5jaGI;$)C$1bt2ozaWnFg9r zNfD)l3lZ8i+{94a6MT)Sw6dTir$nsVXvbkjQL-TfBgcuGN_~BFs1?=dA|5tilQ?gT zXZWHyvxVGz?6-cA2uy zl(GmhjYZaaHO)b9Lo_BsPH+XKvy>NzMyW{Xguh$DWD&Y4j9a}Aa;SF-X|nBz%o*sv zdgrZE`se{oLcF*5uDY5mS`%O#?+$CkR-g5+o}P33j}9mG>aAz_cJa4!-EidA2V;P^ zlBp!EDNJa`7-wh(wk|t59zR+#YZdd@@hj=+i%kBlXM#9Yv>b&ZKo}8R~2IV+mkl@fnH_sMJ@7yv5BwPWFg4^49bzqj- zoNyq?z;J)?BV@yPx!FXfDjnT&M07Ob1TTcUDDuwRb=@~E#NMz?#>!5PjC6&EvKW$A z#n1q7D6JOH^iT~Ppo!Q4KH1y$=R&a-1iapVNqp{x_}_1r)_4E*!Itm!05`E`7*6;a z8&$zxU}CSr!JWVBe6%||5%1w%oBn8MBCo9Ep2+=(GF~LsB?vRM ziX7z!Hu#x)ZFqFHlbe8q_?De({jBObxcLQS@wp8$y1w*bWi4)kI8R46ciy z;C2p8zyCpj)w4C%RkhA=-~Ty{qL7&pwNP#C2eM}A0hmNsqp5)661|3;0nm$uzhQ8d6FeytGZQoQ&#zEqQr8hwZ&%{-QL;<)PKN}#)r zn)Q=Xc^nEi-tYBVlgY;-!`fyJerT+ZBRRc=^g`S}tt{;_z6+Vdc0mThY$%@J)_(y< z{)?>X9dKa2f#hiIJyVvK)naVf^eiAiv%p*DOChswJ|-gM(N`O7#19AYpAby_AT zLH_jd;0-c!)EKPYY&Is*=4>iVRTuEnh1dP#5SR(v$J|oHY-zxMR=1bLB}j6$+4Q-^ zV%(CM<^OmAn3gn|$t@1RsF|6ev%`-=j}~d(dy6gB70!JGCPS4=aRV5%R;I`I8ccxB z@27}+PM}6~Nd0H{W$fH8+~lAWa5F2?I#SdkYh_N!!X*~jrOLABlss{|Yni1QDZ4OX z^jKXt^vffS9qVrp6?}YQHf$?)bsc4bqVx|{O2cj&;zx(dboLUOm*p)~99FEMSD7!7 zI2<1mpoyNn|q(>tDKjzcDd$r3-c%Y319#xhzet%X%LV}bJu4Zo*XCElEk z5j>oTo#B#kCX^^s6UVsbkol>z2%QXM7zc+CG#0~C4kpy$H&5d#gIWbAXhI;9l!vNW zP6r;5$a6OInu#>^_+QVxrBZM36bifcj`7}vp0wFBo6VeM^;@$HVMUIj_FKSbVP9(` zCD5D7M2GjM^saU+BcT>zt4%gIO3N}zVLs%R!MHCmtudCre0uzc`DZJV2T`+YAAFZGR^*5_A>=`fi+=6Or~m4U=Lce~MpP@cZ*N&J@(Ff{$Hy!ZoqPMG zDJWKhd7KOwy>HZ)R{w4DT!6CQG<(2em71h)t_JgP(=s;bau-V!KIXSL=V|Ip-xMC3in%yPOgd zsMI^8CjkHYVQDgi>Vqy=ciS&#hK=Jg` z_wL6&(*rVM14c_?=`_wA7DCzdR9Yi+snCAQ>u%e+jE}i#rRa?`^k@V~R2SU<_)(fkq=MCU zALkdFmlCvJP1i76$^&QH3qp>QR+MdW&t7;>{F`=FDSer&HcOS_J|C`S^jb8IeOkTL z(0TO-@;SJzNcE|3?vjSck5EtR08)|{t0j{^&Os>t%BVP$Tt4StLeO@{L~KV(=4K9; zsjHq=;T~SD?rO;aw&hQ?RZ=d7&>+&J(7qZJ;|L--JH^SP)+_me@N{B61eAlZw?ci+ zeFu(LpW2cDB)0jvrBi_n29OBOM^wn=X2_li(q1rRPajmPwBF!?@dj-eo|~yt2}*3x zN_Eg!!)GoBmI$;oaQ62L8u%|%muawyYVffk!75I}P8r-~R0GXvcGN7EY=S4%4*LVR zR))N5-*0n)wQ8qaqleKSm;ISo9Oxv)RXZ)~d|^(FPnagNlma<$RSK#Jo`|a3x$utrwU_Nds`r|23r(t6Ai|9hsBEm~^t^hnA z_fG&a7j4=5_|7Kxd*`8gQ1{fX#}ob}mW(;y?dkc<-O{u{7+3iG0oP_RH>64 zql7I``$lz?=ma*X)%jK6%4tuprCnG_AR>l4rRo8oOJiYyZR$AxqL*dTq%*ToU#NNO z`KzaF(8TKZ!wL+r#WgWe#!7aRAyAm@Cb2%epz9Edm8Jc5G+3m@SvEjcrc#!gyp(?Q zr|hVj5)m>U+9mrB^||1#(gQpX({SraubNtPux`#qBk*5ersNVZnp1}Jq$qZNxWnobeeEIz(o4L% z=l}?bBT733X9(yVNicUhhjSn0bjF&4#Q&n`f8C}?x3)n>gB?54T2nc-LPNS)MQ?*? zI(p(iCa0&wVjX>?%f~|V@HvTX{Rct?leKkP&>`KV<3c)LsCAocCd`UuU+Wd)_1m~W z=-+WSnxn7<6ydAc9q6LH77xVXH%GEE*0H1xWpk8L~U<*k$v*V9K?gCoJW;UxV*Ls;rs8K#e1XIeIfc4k& z^cC39nJ-RWW5Q$-GiVH2;b^4c0#{v%IMfE-kcBPIhc=lUM^vvn*;UtlF?EsU!OFrf z3UKqeYF5kP;Zm=MMO(YouvW&8=U9UZmyjwr!~34$yO@mR#I(=xTUEd%6YJz-H#YCk z?8m(~)826f9eK&#aKa$?3W&1Wf2v5N2!BkIS_ZRD78P+nYpPZEFze@p2`FRskW%i7 zIEwUkNIzIOla9=H=r-7S8h1*D?w!I{K;zKpMMHzpuC$JkgOYE8vgJn`>OI+E)@$u6 z!m`PS6z|u?&xIbmoV0sjM%=BWY)en=`^;-M9x5q5*>++SN0+L7PoI*{+isrbsa5V? z)6LXF&7I(!yiZy~>Sn7SBjybUr5g+_VpMIuR%QwbjW+UrZ=rJh!;5grXz~}hEyl1p zzb(cRP>2%zY`=92YwXV(m63GZHKo&<``QxWN`+!h8u!u^+4=@8)8~hqN8JRt0H&sju2qzh7XSs>k7eKf^Fl;cs_j;|ds#qrA0-Wr+9S!&{rw^-3rNpE5K zAX&SUc>aZSPIx$>d;a9MMxtiLwBn851HZ;c8N_OwOs`~kb-S!9Tu+I9OGh=NpFJoi zRHPN=N1gEC$LBRH(bmo&zFA6u%+i0;++xMSNHe~h@MNkghtyrg5)vSB%LNuP%%HN% zyn}4X&t5lU9}J(qp{Gtv2gtT%+$rTT4xFd!UH-*23JmG$5@bv0+)qY22#}C~X^;BZ ze=^YJLmNZPG`ZRHeoA=0-k{!R=sPOe*n~5A<#|5CE&IF@_JPkq$HdS#mR6+;Rwf;g z$6VTIjy!AXV&>S9G8YBRE5|LPBa?jO0r<-6If@qH3JV-^E#^)Q4Y8y<55r4*2}!$*IvAsTq`w zNs?VQ02CDk%my|JoV%Tl>m_zJ6PZ~(VdQ5+)0U2KTD=dQda5rk{8ihdutSD8A|;!$ z&~tE5t%~(D(baiZ_h(Tuh30~%NhT%b^VH9w58jT2qX@nNQEZeAE$@$$cpsOu@)EUE z&cp9UL`ZSLE4BTXQ2nk?yxkN0DG~c&G3Cb|WTi%&AmsSoR?_S+CbnN|unIzLr0wX( z4|k}2fYA-SFh>%@P|p%FSn*i9ZH!1XpR^zGZJ7ScNA-=t9p z;gyIN5)xNNcE9I8PnX)v!lT(Qen~L0tHuhX8QlT{Mg-tb{b{N<#idCS#Ad_>hnGhNpX3=Dm1l^ zL8SlR1R>u+j*@}L#!4Nxe=UF~639lo$)E?G*Iz3Mw+X-#r}yvi>Po*tK0~{jyYNiH zgn+H#t#l@6UY}1%zB<-oJo%~d{E19%LM7)N3K}Wi^$hwse~=ul?DbV&V=#pByVAv7 z$jp^T(!^&Gno+$r&+Zbpg?pRrFC5yGy%E(Vsq!CYc<(1mf`oewZrhzRb&OAbmnpwk ziZyNf-PiQuTW_CmWC&>U+@Yl6@mS_LSlS3FrI7pYriG|$`JTz~=PyU)v4(wUr_-1{ zKAt10T+WzzU^HV0<_m#Zs|6jp?P=AEG0tNdRYpGfNSd+mQN;e5uBRDYVZ=O_OBJ70jhfK0>@Rp!Dcn#U+i zaCez5u-H$$%rCHGvapKPDn?IpD1om5Et#WeAbfFF2Bkm;$7CiT=@;(M^l0K##+7vE zmKiHyXbdSIrv88w`%+%W!2}R+*-h$pIMIL3cPIWnnI(V*>^_%ki0Xc-+dvuztz0OD z=GFEya{tbK7e4KJhv+huX?624=WGagd>jU+h!I4liGl06%7h{E@iqGDR5y%Pcb@zUaML89lD!ofRc=KIP$=>a`erJnf2?^N zCQ>t?p1~?EjzZ{e7TF41!EpN~CT9A|k&O1J(<_*|bc=ic6DH(91}w8m`AG5=DM5Zd zwtnIv#MAjcXZ*_ebzNbgJbWB6aEMs26qm)v9+T!*`oBxS+@9CbM2EB@C6Kb?ga2W5 zCsLt4YJ-OD(Cu*eYH?#XWUaCrnJf05k^bq81ik{loI7vpc4Y4uky$B{4c@s}`8Y1M zhb`!_AkTiCJRy6j0O+~X(Ox(@^GUjiusA_EBg~TOh$)|q_CDz%o*qyUGGEdAa<}R| z)01(f;N{Y>(V1G>j~g1MbDpH*HI$zmbnM-!>1oI+HE|jzpPw1bMq4Hin5o^x<3I*Y zUd6Y@V1u(~y)>Z06%?`bTw5z=qfB_;4rh6fYT2@Nq>q=7<=Bqr%yF{XL-gHEdFMcq z@@oTLD2{C*rk>uTVY>QElZwd85e?J2Z2{fhG{z-EWl}C!lH5j`nlv%hAkuEM5$-m%0Sx_*CddID57 zCngkb7>7{^cn_54Lzb7db^geTZ7wWFLZta>d)~j%ta&;%S?%~)>=u~60GA@$5t9j# z@75yE-`9LXDQllLKUBJqAg1$_XNY=jL5|B~ETgE{+qM$4!5(Igb8msIeku6wX|+4%3Q~tCDN?IHwUK}2QpC@# zoPb{QPz6Z4^Y*femEN)mzU_Hzhru9obJv)x3Emm0Ko2?aoTNv2X2x6Aog-okK8$YX z$|cA~{VfVq_*;8$5E+TqzfDiiKG}X6;-5{bk%O<#)^YjP~Y8^60P!PLhv%q*E3Hk*I1 zT1?mTpS-@*mpA+~P76f;8V*9NzGC}KuYTwDT*H|NdU%z`FEN>eOo4#9%-Y1}n@(a6 zeg5O%=$@D?&&3h%T-OU{?Lh|}tn}_~t;m3zNB*03QB1()+g<~}Bdt32iibs1-@1h- zf~}vx5l)ESnFDSkAjqekK2H zjyiqopgXO^Eq!a#5WoCj%5cPcikkB#v~*-t$osM-huKECq&8SJ$XU@*Z{i~Ogg$7K z5W+Z3Q0${$LW#)oJm@?fAZ3O(_#=`&>Lmbbcb6E9h{FGBFzLd>m#$?I)OsE5p|)x& z!n)Uq1*P!jO_2@;u;RlU+9ssZWf2u2G#Xyu=oMNds zbdjq2&wvHhc?l%>r5_rRukYC(5nfyVXtdLLagg7j7E2{aNczBrqY?*0;G}ZewR6CS zMZ)WH5d+#E0DtOr^&{CL}Y`Nx(g)^QrMV}koLq$ayPtu>Iu^kO#Lyksii+|m)`oy5C0s{Uy|vTB zn62$0R{3v^N^mrDX0lf@HfAY}Mc>SAqmfTf5LJ`3iT~xlOdv`N^r$OmjVr5o*8i@o z?A`8#9xTXZ_A?U?QSd+OG^yV{sY=_imLb;1c+@g4>yLizi(%c{1Y8a{v36>|?%jmU z-W7C3Mcwcor1Aw-!o;7`f!F^uQJ+B^++ELeRTTLwNYZtIFXKY(r>Em=F1s)j!Y433 z61z8-omWVrRwPdwPhRA}J0&5AbAb)$9~RbrR|~j-cx~Z4-%UwYrz|b;QRe<3OkzA2 z^5&vyXe|{qL{*vU5sCy<6Co?)bHhR)NZtnrOH?SEXhg!Kpt!i%J0m{zW{v>W!L0vALvA+vzjrmmiS#SM8(s@n*+m_Qna>l za{U(Pwrwt8pjeMSAj?vfOU$g3wL5MZHdVJ4)2B#Ni4SkvJSl0opo*2wDQ}%^--flk z%*J`BKbwl{-!5tGKq~v)3MAKW=DMuf)xx|vkda-$XB?4Ebv-T;&VTq!y4NiY7{~!Q zej6$Ey)FWsmK~E1N?k5z1QT8EiRj;ItIIuOwFBR;E}m~ZCd(P&p)5L2Z*D#8%+-HZ z?;woe5z)d}8#yxf1h~R`R?}f|%UNCN=K*iKyO%-4JaaSI29A#PmwRH!ycGDH4`e%f zA3lYt_&Q7i)Fi$u(QEDA9yw8b+r+> ziljFnVs|CFB1R|Y`EL)5>q+k9^G5+zZEb_jBl}^I${Ry3ncHw4CS(f+fidBbpEmo{ zpm8K>>q}eMl!0!zklpY4(|-R(6qfPe?46PcYaN*3Fwued_}i0#!1E~lZ+gtjO+A?7 zn^U+`1J|VQW-*yV&h=6bbXJ7z_@bah?R$K&nnb0NphI7HU0Va0u>!X@O)MD9`9uB) z?hBS|yZi<0Man%;Sewnl7`1oQnR)t zCS=HKv`!=ui;du#U%TM@us{p|LmlE5-HRlocFOS^5FybA1Os4Ul_JLpW6tu@@CVdZPnPs(Hj@v zK9A#7UJ@+rgzJ6CbSg{xi!5M~9tMH68=A=LT%jg5S80VMg9P^eJ)u$Xex`Wa7X{=l z^!{uH@#bHDgQ&;ynDN}drv>l2tc|9H?Skx6|9)SW*)jS6@%#!n`IQxuI;2mGy95=y#($}whid%kjf4l$U{8ch%IvzD+9@dsO4xW*u`-}DI zYy5@@{+|00kH{y@OvrQ$o|Y((3Bq`=?0R~KcaZY+Q-b#B#zIlbh?A?A{oJ28qUPvJ zuzing5H>p$K92$F9h(+et$vh~$7+IBnsufcf(s-4^zod;E)epS^JSc zHJ0|ayzOEc`>7~`0$&ZV*UI{~@`RU7gW=I2jfg}TUuB|*J&|m%FHb1*Rz@%P4qN1H0W^On=JR}WHpxB znsnAT+dW1jXegVT7)gQGAux5}?a_z_K~^Vt2wy}7B;37ur|`!e#oJkUAl#qx;2Vh_ zDT#aDpw}GO^|1-m`&7boFE%64olzp1f&@yp+N#1*dK_hf2em96m;@-qEcud739os7 zLk9Z_A5pN8fB-EBM_U8IhE5cw)$Aj6b*?f7R-M0PsxfNvUw9ZLwWKS=7WTq?7k~KX z36&pm2@5MBSINtdTev}Yo1Wg>cRieKyGgU3+}v~YharwfPlyPcZT6bP-eh@cElIuL zr3dz2l|-EU<}Cr(Ur;_+yQa5y2ql_~E18jnV@%=*@URhDE5qRrWh!ee^_~#!5#-OWFt^D`RVQ>FjsPCC^cN*V z{sitTD>APODAI7AXUBWGUMP0Y_6x(ox;ImgL|4=y#dDPtgEY6J3saq9bsk4;1C8hJlp5uMXn1uK>R^6M(MH4 z7fl}K7|q`Fy3rN65BTk`&3vU|^3ZOOho6C12eF33ry5SwRaWXm+B^H18TL+l*NhXK z;_sc_JUk(z4j=KKSQrtk=M(I4IBG2o-Q%YRW}mU{r4($vJ4ra1P0r2On(%8P!Ic)W zpb-U4F{oQrUO9D5&Fyp8F7rzEVrS^zFc7pA$bfU&NR&n3sR`SWA5>vT!k<5d%p>)n z#;?7&nH~RnOAk*cRilOPkKFpl(uYS1&$HdTloy5~Sj@ff+rdUwKr~y{@5Y5i6dw5WPGch%JT-HM>}DdvsPYdi?k@?-r`YS8lPE& zFUhGPI2VtPDghOr^SNw)Rx%IwrQ;UtZ3|Rs5v6fjMVNx907?TEjXb9d2iw;PR*y(8EPV zJN!q5iz&U7d!z2D?48%+YqMxt($_2Jc+GCz4hG!?1o+3a60nGXRdzxo)5wHGo6myR zISx$YJQ5jIoDH8-7tq4~*1>;nmFL?_X?|PtS}bJGcZ^(Z`?L@*K^;!npiK1}DQ8CI zpQbwaOjM#f>VG%}udDwBwwE-EPW`_^1;AMISnoF1wzvuW@L$cX5*1gxqyPSYGvUs3 z6a^CqsDo;%?DQ}JP%s0demrw0wulXcvK3_iHz58zh+!=Pe2$4JVE=z$0{`J5{)bnP zf%yN&#=nsL_v9ckULpzfPT96YJ*C_huZE%N@brb)zl@Wsjs6B86dGWMT zYtm*m6pUciA%p`|;s0{&uk5`0)MP;@S81W=^U6OvdoTc-&tDxQ?tb#al&$Q{8nh7- z(_C{1Is-V3;Qo679Gh`d#?UYG4<2J8|0aob)?4M+hzyW;uTdqeS}8t$o5=KhIsvWrg3bXJr> z`&TY|Llg`Qn2_4b@#*z@Z-JnDURvIUR%_!SmjTWR>M|OqKeo|->3h!q-tr7xgt#tZ z-CD>!J{H?`@XIxSZiQ|eN}63;-@@pnSzZtN)6e)Agp=#!yqu+j@J`vay3Tp`fWio> zSe-j7@_^^>&+FM(_Lc_My*w3bjac=qj#hS2UqYxA*8WkKc+)tjRWiG-@S}%-6T!O_rvuPD%Ba#1e=_=y`syUpe`Np+{s&JSq*&Fiwd|)R~jl z5ncwoCQ>)B5;4 z3`CQq@Ivi4t6fVR^Y)jNlF89TsSIW6*`|N2IX23Y}`AH4BC z?=DRc)UrK9_#VqKEl9jBmhxUdt?$edyXJJ-SkVMIPR`F1*YnK;5m#Ww(axYxQ5OAE zP@I>HQu01r*^Iv*_3or^vC`3F5YY5vuA8Y=D*H#sm^29)mhAgZ^+%xEV5!LUB(dg_e$51=A7EWqwXM&_k z%frcS+}Z@IcSfkX=LtVn(CJMQy`yi)T043f^D=7F&g4~vzJwc&+F$4L8-U|iq|#8^~Zyub2K%P6QCLe8%n0^KdlPn#}QoPMf`q{5uyic+gJubDgzGF#U0p>RLvTVeny^3qJN5tJID}x34iYh=)ax{n#f^I_cS`y5Aqz@jyFz{rr^WfU|ILU^ky6)o7eq zhE`JP1daDq>6&A64`t}-3VjZBOT~r|N_F!hp(ps_BLIaY0&4|HX<(*mDr9tr>H9+DdxurhSW0l<4 z+KFCI1C#gy-47uvP(TTly`9ShZRG~pAo+0X6V4wxrAHf%<87(<_KHH=;7^j_(P_(r z&vfE3&{H&y)4y$$9-bGR`y`Qbukml^^Y0W^qJ{N>i>5PRHck58J|YH^Lh4_3aChh! zmYm7xIT8WAlV>5!3}Vey1Btr2`D-XmKfn@E7IVvmkyE4J-#d+r_uiEI&&X6C3(tpJ zGVibBMsfw9U#2B`CByqM@yTI+wf^%{ z-qTDS2znSNAVzS@L@|tz-y9^spt%yu5+mLlio-zJ?C?0VNN}Q5z3Gd1p|3o4KRm%sOZlW6KJMONFefCnZgA_3BvwMqPVA27zRsW%a zo*(`LCDqj_1SazoK~i{1G*au%^wvl8rwnzt9-WBwCs)&b^XJwa*h)~Qak1ZlO_r2z znNeSq6~99D4GQ~Azu`Xo0j#2@|4a-bnXN-YJRPN%R#2jWd$%Onjd+ZpW*|ZlcrsZ! zBc%jSV9nM8NLvMOi^@#ca@bDOw??nxyhISR%u+^VYOJ>AnCST&pxhqkq zR^2hB9DfBHeIvC|ABM5lNTH1#NTqee^(T`BZ+Za-YTJads@awJ;P`MSLfRU1nr#H~ z1C=MxU2&$uh3J(o9Xg(5zxp?ceIsxmT#+IPE_QCOhkDlLfV;Y!&@cKtcE`MgIJZw&IliXMXfweT*8)u=!eHL_g7U`S!J(q&4|J*3t0;st$wJchbVi%4G$&DqpslGM z1Gs&H`9jat+h0uK;x+Y&sivm?zFpfqTzY$D*L1&)b8q#$$C&a}N{5exX?cxiQ&v`% zm$n8MBrPFB(y6C=ZEJ%dT>Bf*+BZu$>iPg5AM&rCIm75&`LESv*}^3xM}wQT9L6Q% z)~L<1U_9mYnOGFBC|xCWsz)3k2>}ag@2W1rMBt4s+HyqY? zC7Gk3{gXQ%=zMEwq$gA=e{8M)YD4$`T^rKJh|6KxN*O4@pWZ(9VOoYv+e_6|?rlFj zLs9k7edDs`JDM8&yOkUMJ8n(&cBnjZ>N2F+W-pYCrSp`fIaRAAZ|&Z7Hc7lW;IkrA z3mtciHIuA;pE~BZ!&XLgk#^EkFYE%#e@X+WBYh)htYJb7n7?o$RFMZBCuhDebA^F= zC28rSB8iu^C<7MsXM5ZijAMb|gnB8-5iu^SAI!;+oa4@iSK)H{<(qRuBDYYMW4=IU z&I9b75vEWM3T0h4Ot+O{@)M&$BSF$hr7N)jC%m2GGyJLNIri>92!Qh_c160-@(y+3 zV&voF+yK^3{|88DPnPC#j&rW;@{(CITHW1+9u)~Grk_;Xe8nPZkQm3yD*~rNeTmbi zIu5{|GW!~Ml+$I-uDD90F$c+TZgoA?{sQlJT?J5JTIJ0~b}0uWUgFbJAFTgd?AKI7 zPJnl-pSBtPEWF*_HF4PoFiJ4B*|gzraDL@pxEj!3vd)_0{QcG8(i>cxW+$6w+l% zIkB|)zM4!MEy9`ia3z_{&xIWXsCBq5mK=`q^8LR-a9xI)(OonG`jhBs&~ltybK(fp zC_R~e!>fdWH`;l_aV>Fi$r0g3(h|c3R26RzG8Bp}FutrKh^Rxm9sCkm3hh+X_^Ii& zcGd$G^(wjfnUT{BV-2&GSe2&@Y;4|ic0Z2=KMb{yB8FqKR8{e?al%*Q2-$#T1T@`- zAa5&6n)v7#X~h)cJG&|jEB3wCdv~_KMes-tL{yt8loZ$de|x{oo?ILJz_vF;Lye2> z6UurEqXX(_(x~a8h$Q&t z;R)H6X!L`+nGFRy^y(PO|LafnAr<1qAGanWfRvDm9QBg$b5SDJZ+MArcUJdFVWWni zyyEiU=O{`OR_5X84}iuOq>N;UuusXK(`??B@dNb5G6p7jZnfH{{O_4lY{^og>nMRn z-6qxehAhW0QV{c-1FYu99X{`GTS+wc0YzL&lSOYIlb5G3--3YPsYP|FfqSOyI=Szz zgQZXBxFX*-;kTlL)cWpS@W9hRa+e`q$OZW~16YixXLtFImi%|0-Yk*RPLLtJra!v# z*Uyw>sT2$y+`QoGJ0*$L_5OxK5!OCy_9FWoIgOfSI$Kz*4*=3{Ehnje9rhY5MiCv8 zJ~iRaRD?cPfg$UVG4VN#&`V&2ehWs`rB6rRCc_WZOvs}pPl6AQ-6ojG8(j9n3!jgu zmtS|mJ@1){6dwO>kGh{)Qj2q1L~$o1pMS=Bwu30eek3He)9v@X!8RIs8-1atKKoxx zonv%dVZX)O*luj2v2ELSW2fQ7P8!>d8#lJqsIhI^PVVV@*L~Ohc0SBHGqcvrbDn4a ze|v9JqIT)*ft=<^v4C?gwii<*AN3m%(p|-+SQjtf_`;K zXy;XQbWZa3=1M+WA1p6hC$%c835h|vGc1l)GH?m>m=!j*7ztd{xS=9p;IWvyJ2xXT zIHN5Q(#_?Dg7|0zA&?F1xm$COmoWIKU!u`65mO!3$@i9;WD^oEn`YV6yu4|#Pr>J? z8RTRzeKs@e>aK)6({Js(wYYu~@j=`qB#4i!2(e>MNkUz7-9Lj!R@G9qW|U&}yb=+n zB(1?ER~mfE@RO2Kr1OS`hV0AHE_HH+m&5^YhHrX$8vhHEvi#%OLI~5N-=tfm7i|-8 z3Z3jjRU&T;Q=IfY``Kk2{i|+SI*i(ByS9VoD@FwCVBTYxxZ^wr@x$1JxMCus6T?=b z9E+98{NI^aYvn+@(#3DV3+F-uL?^~fxTqQNw5@5n8y~p$)7DcbwzO3}^ADX8tGn@) zh0TffuAsDautuMERye_TgJ%;2IFUL5nCOrJ$GO=)OT>VlZZxkEr@qK6gzTw zx@KRzon5K^l3ZVg@`&!{rtYF4K9DC))l~GcZJNR}n$(OFZMm2b>-ym%-i|z!HPr{U z=SW{6ew~sM6cYCF212E_yq z@1d7-PLjRQTw()q>St$xXMA4O!v26WrHQMRi%!Y&`O0kv7a;w@glRX2F-pbf(;Q){ zOOA?|A}hO@Pk(}L(?%H1cg>d7X3L$>`J%g2z`-jcU5X;@HvthW`rAgv22%4QW#wbP zwfp&x#FQevtu>ndIbw7)DLuVoTyB%JoU{lL4Q)3#q(B3NjC1-tCr5Z8%ZL%iQJMbh z3{;;b({|9c-D5!>p+<+W)ZGb15f=r+=dC}O1eV8pxCq$zXn`Va1YNUgeaj;E+84F0 zxXO}JESWVC{xgF) zHrmMW@a~POHVHU3j^)coQ$>^EX)`|^e&YvFt}_jAW_ke!(ncSkk2|X6872-oKIlUY z+zCSsyab-JUHOi`!zndz=ptmFikqE9wMm)d!jD#;$ETVtWqcD#Kq5^?FC{8?3f3Oz z9&GGD03|Al`|Em{ebGbY&?daV%u=Jd1jX}t(QaErg|IU#xPV-RG1Evzw#GKrE3Mm9 z!m+jT$;7h*chd{ABc`hK*j+8lDuS5VU_b@1Kh4877u0kD?mm1FTO7P&F5j(yQzy)D zn1aYPNup7sPR;9n*fN;1Wm=<)3=?LWZuNO?9TX^EtCKM1hYoh2&mX4jgY(=#e^Iv0 z?;0ABlJGI3RFn>(b>ox}ab<|)D{4o?5tMn!e7)&+`S-?jw4z$pDnetO`Y~2Bzs5u+ z-7({b(S=xAWbZy_IM>7mm=>N>qsOY|m$z&lSEILi# zx!Rx1%kL|CiJbU3_7%ITGi>|T5>?hxqT0nK!7}_QUlOL}wQoLJA%LpUvv&lcKMj2R%y<&g*|!gveMXhHKt&=!SQQCt~o z%NU>S&1reR`H5M}rD_OYF&}!ZlDq`>s}u$Dw6JOAk2{V%>nWj)?Ch7oT%j0kXvCNo zPlSAl&JsyL_m+K|Yp9g4xW!g(qru9vk|vc$@-O^?e^!utCj>3nub(*6Aj=+r^uz5V zP64{9Lt22iLi(x`zF?sEt2&R!bARM4U-jphFqQW26Wr)2xy0VDSH;`22H(%b<^phA z;cq|`U|6G?&3Ym*(7Kh6CcBnex83HMh&Scs#;5(RdPZ$t-*a;4lR^o<5Jay2k;rNS zCc@bYTb*P7y?Bx~@T6gw2Btk6WI|R=M7)056fd|(GeXvb^^an$H)E)3L z;eQtW3?fm1R&Y>^-f`9FxaipOn1IOaXUV;`5Y!5=4>nm3T&uYQ2lSjutMAA`+<$4y zpfPQjRAL1&o;Uq3e;Y93@2OY!i<6np8W|cvfk@K0@R?m;=g??X*R7y}Vj)27+av+L zW_Oh6mQM~5_btiS&>6>Q{eh-f;LHq?ZEN&eTt1zSZ}6vo96I}tJpHeK&+Z@vaPuHA zB;1=5-!*H)#Ka2w7@!`Ssxtvsz$t?GZI%p@70nxD5ssfm^Aj^I)*370LcOznO&;lL z0WTvZDtA%ps!EoqtwK@ub*zQdGfQ)Zl8K<%`rje)P zbF?^x;~Xck@gJ@J7$RB;pHsi%8dlVwQ_zRGLf+aJW#Beezej1URpJ%xVt5;QG#lz1_zDxw9?`nc69)%JZMfJ~RklI%rihfxA@#^kE7$h?)pf zq4y#+$b65n5jyVq`V|Q&K!r{_VemC*5m8K91gp2|t=8ZwvD^@*?^l{?mFvNiNn&EL zINOQqjZ%Ayiq{SxSQw%>28fumz8#6>tFVaTPYH%P4>Mk$=4h8G=4T>;V?Tcx!KxJ5 zn`RHs;lWKL?1WXfsYT7gkA0LTn^IE=06KmWg-~8|b89qL`%w@5?ymsT91;7{6O(Qb zDo}}1F?==T`Czm7V^mi^*J&KTDA{s|LFjLDUfSiPe92N4BTo~BAY;71%z%cL1Z_fW zR%rEK0TV|tcS91N#BX0$I(5T&WG1cj#OwSSWj?9Mf;=0-PFNJu9e0Qcf|Orp!9@#{x(#O!27X|P@!OWYHGI)Y zEd2p%jTueG;LH6PnJ{vRL3h6=8LZyAQY=}4X}pdab!)+iZM0FE7UeWSg7CX5Mf@RR zgN~DgNT8HZ5F*sY=grsuV*%1!yNPXJ-sh@v>h-r>wo2{9>E{~Vrv}!o=${)qeeR1_ z_j=1hL2}_yy{th{CO#dAL6s!f=$Mr68SFnKhL1*`L9bf+(PZ1(m%X{dj|H8=h2vzR zq9J0V>>Df!3D(cC1Vn@}UaT(>oRA<3qjh6c)HFlw0O#Tx#g@r@jHKP9Gv~It{&s*T zLg?-5yBeXZDrnC)i9P&%?4rhe1^F9@Q2#Rg^}-Yv%-Z9$!tglj-@Iy*7!WN3ST$ej zi)YnYr)Rovub80Hx2{-N5+|U|U+Zf`f)6JW`$xts4HU36)<5uT$8#bVulnMgrcrC7 zWH)kw-PZp1Uf@(m=T?L?9d{rrkVDFg->9g3!#?W!mO)ZnOZ zDpN{oQHT>AK^1keSf&_=*b+Z!U$3zsDEf(?!fB+k*o6y&LUP`|1|Un-Q%h3-CfUWu z*%cA3o#H5AEeRs7@{{VP7WX(dFWf9wMCTX@iCz0!J6u7ZislTHPf%Xc6oB3@{OHdX zQ8wVDBFG-s&tsXZu8jC7Ezs~@YwuowSpNQ0(L6)?bna#QHI**+V1yec*{s(V6!10OB%0kZlxyTyb!J%&nt3-%!Y zttm5bNBt~APcBD;V+gG&&6;60Y>1+fT(U=uXBz zs2j9|ncDOw+SbaSFKZJK3y?{l=x^z-nA4tD1(iCi(Nor*!xei)dZmvPS;cZ@(Qp{P zCH05zCivQPC{XFRnx<U*l$AnnJ zXRfVvwbzSHUx_0($9+Ow=AK8LUp)?~l^cYZ?s%8Je8m<>NqaIKE-QH%RqD-O?zVI= z*65EW`0;Dod3Fz@8wD3kQ@?>MH2=3oT`~~sfi5Bk`TB@%tLB+KmL6(0BGmv`JJ$rYF1}wm= zP=P4u+ge_FY1->8frv@!#sx^6YbI06gEZ(h!W4k-{X9*Q5WCWL@L@}q$@+* zbWM8d`_goruf9fXq)js6<9><$#(e+z`V^^MStm-y7rVaP>A{`n`PUU=C8{KS&PV5c z=9A~TpCRubU)K1?>vli>q`_Z0Umsl_rASIYMke~UbtE8Iw`-Fy@X=HKA7mSM8Y^3X z+JJ?Am%VhDAJO+XXvePGErIdF8gDP$i*RpX+%5(1 zNkYy`Il*xe9CVTj-#lMq&!f^Zv4HXy?7TDBn9fPeC)pb$5EqzAI>REq4ZZrtbHD)gW(z&}Gp2 z;{Ia&wjxp>IKF7N#l~c}ugs^`9kd_5;{L6FZu3#tO+NiaHO}vn6KyC<#uInfiWLQ&~NM-r8>6Q7r;Jv~fBCM(NEm9@zz!IDhtdp< z{?0>QyA3|d#JoAU)~2ZMez8G4Q0?@;&7-4u%P?>s9+Ga;?vE5xr5z@lBE1((c^1cF z>iKo6CG%Zf>+rnVv2#-GoBaA&syrlf@mP}o^%U`k0o5X2NTUYY=x_8$1UwKmHOzK9 zHc%SBb)rK%}@;o8BVZt{SFV%TOM%P2C(a9i%4(KKMe7-Y%xNkr1u3uiKa=>!$5Rad~L zfn-ukwn}n2B8<%1!*AE`vLo2+9PuZvhhj7#Kb*zu9$SS$2c|>ETa3pj|74Y?z=n!S z!W1JbIs#1J2hJh|6&2P>quqvS{BXUjnB5mJXx4w2!QZ+rJkta4rwp6ly%p&*6w}Fk zNuRSk=byAXUy&o!yYS}f&7FAGum$be#<_Ob02*9UtKCC7_F+Q`VO;P6KMJ2+5FqR4a&vSH~GM1)3ve*U^O01y}eHqx1xw{@*v}MLC8kDFD z_0*P8pcG)NfM%{BwEnV@Ywv?p4L@CR7u3&1%>fov#RV>WHD#n1v+T!ToV`w^8&M{a z1Jq0sx|_LQ4Pb3w_968sOOE|{5PS`vo}LC@ub$X)F&WQV`lp2?62oU~tcMYKA}I3T zo&JoLYgGLGX)atO_kc84%61|N$pyyNZOhnsxEAp2wUnWmnhsM^H>96;%n&W=P z$Lz!kV$x|;^j>r^o@(&F;AXwQy%=8?Mxbd^lalJC2w*YjMHR`WUc|qvKG*x0($m7> zDk(4ehsr=hI?|p|KuF2aPoYZjyQO@c!t#DsEv8rgVI2`6w6S9zQP^;KlS4xCdzG+1 zhA=Q7H9MgC-6yw6>r*Ox^omT)(_XC7^^VEpn{M4oo$=xrwsz8H z%L%S>3kaPQ$}HFZ%=~bf&&qZAfZsXr?9e}{kE#z13o&M8Wp~k3EQKg&G=*Vsk-1=3 zTglLHgRU?sO62~mX@iW@f-Z{z>rXU6&?sZqBGuIf8F~TjzrrduV9A_|Q(DO;-E`q% z_Uoylrlkc-ofneEtN+vr%PokYpRgJvb_0Z|J_3p?2sjUMxRgVRELEo$4*6?H^XDLDH2(dd9 zvS`Rq8!@#Hys6wXOsV!SG(mbL<7tJ0q^*zf_YjBrQ|No~kp}#4>EkYTW+NH8O!wuP zc5e0k<$DheYggWuK1VVJm4EH+8kB%lZz+bSOno;s)!2b%&(@7gSo#QQn6XNaXx-c+ zWBIyPu0K~Us`aI+S}e4{%-+pw)85(NnyjD?`1!JKKfvTeJWNm?DgS{}ijqD4w0Vm&2&?!kc{yfou z;8(H4F@{00(ITKoe08C{sg!m$zBSIRi#c%q!@v_U$NL!v$aCjG;4fdB(7`$L-1ah8 zn#tdBdKRPuyRfkPyJ~&sT)y_QToW^5b5-9&1fnLu+Vi6B7+#KE-#sabt=&gIvN|1qNAe; zaP61`KY-MEarz$nrh;F;+`_`RZZ1C)5fa91ZW2F@ftECksE1K(!Vhzm%h1uR#l^I^ z+6|Dc%WTAG(b6{docq49kg~9VVb(zcqlJ>n%H-6l57{W@1$~C@Ek~)>JN^(33cGzH zRU21AWLM%R6MIH`GD9X^c}L!MrZmLrU~J=Z*WR;BV)AK(AZcXX=sJr2UyAW5qFLOd|?PK{X8NMU&z-BjZZtV+%S<0a{kA**ney*Vb_P!OuU7dn8;P2#LXv3u&{ zer?C}CXx@7j)VMTw88BA$wN14tX{xz)Qg>)8z%?~vAfk3k4Fu8lOG%7Tl@j|hZB#! zb5~7;-}akDLuj{oU7vM>Ogdm^Z22%XF$w;vp`p>JTe}c$1cZxwTPBKKYxf*zZhnuP zKqhbr4@XEn&@nBLKYy#PW-85`Ao~zgFWEGT#Aj zo7i0&Bb`V&Bzb*2XR{nFJzD&)2CX{=C`oH0qdb=4MA?K7Cw~C4$a|ay38SN;Ts%>3 z#P6qNKl(Hc{o4Ba_*iJs9#(y*V)*YZgF`~{tE*uyIzC9=AG#KFh_)*@+1LlE_}N~uztn@?tnh?x`^{*@DESy zr6paRo5ZvjY-R*aeNS$QXk40app$t%@2de#kN1$&kZNl&jl^G$~?!MZq^u zc-HW#BZyp|z?v?$Nn9Ez6fUdP#_d6USXn|JF>P^_f?1TQQ9T z(~629V6q;A#HjIXkNSDr!uACu{6gW-1U=OUox9O8NXAD;02PUoT+Weea)lf5yl==J zVRsuIkWYvAGnvwpPUE-aUP6OWrd$$jX0IqJr!Uv(%4ponK9+wZ`4V~Sw0O>2@NVBP zV!m=lkrFE1#2uU7oqz@h7Kx2F&HiXSN{AX}2VUoOpd0Ka^@+S9=@JJK+pUjJ4Cy$` zJXVos5Ez|%)ohhEi5;IPf|d^c$vmEam|;d`g1EV05T91!KAsq<^N&R%b^Kj=&xBu- zfZC`x>R|Kx`1ZzW84RBXJh=5YnQ*RyuWr4LQ+-7WvW|N7V)A%i9}T%;=@Mp$zyoyu zyqMSkU57IBffiB7(Bqxv_9T@iR1Ryr4TFNh4)mKmS(1n!nse>Z{V1kM9PH`sL2x@S z?452mp6bzw+kVw@)oVik@opi6>$W;QJTiI!p0Pcutjt=^>uk=1?QTEwVslE8D3zOp zMqd6bXq2Ht3&z;Rg-y!Y@52Z6r^mHbQmSS>n)ZHlZ0z7asJK*>ii|{n@aYNC<1M<0 z+59hcAvx7fek5ZmvZDaFR7@<_Hp<_&OFkeO8(UadSgXsJ>|gDn_vO3fSrzAo?ZthU zH|}e{2s2neLrZ z)SZvlHo+mG+moUeTR`o5h(so0*K2LAJ|{zlyFg%2knoyH;!<#FBGuL(yx*eAQykTN zuA@@e7p*rMB&}w9dn(ZMez93TTrATwj^iy@GF~Dau0kLXkBNz?;~`01wd;w7_uX6* zHb00Qs5xLr$ckiaQ6Vq&jxaO38=O%TjCpM4Dotfv0SxHdW#tTE>}(hh8z27lUByy1 zZ9SvcoST*|1&;cNw@}$qY+-~6FkY2yZ`VGoMhMd+4D=Ag;AC-a6=)4+98vrNUxF;i zjb8S7NWx8H<$E$Nnn>KWzaW_N$Fvz^OAsYTZJ+XdV=NN_Mz4PeQUiwyiQC=Yh#Z&n zO{n{M6x+PmdQHAkYpIffT1v_C9ZyS0VBlB_JXEveAntP@IIM)Y#@qeaD&oy;AB!-e z*%fXxF~SO}aK28j<{11?@Lm2nxX288Pmxa-nS!J0JKuYRV5y8U;g7%fcnQK3aw0z46 zzQ`{85KDQ&b^alisxeeP7!)3m4nvd%rD_@OeQ24cBqGzHXVP<(@>+{v-=+`qUVXxt zbP@C#+nEYV=d^!?iE2HeeIlmOZ-*N%vW1&Ee|A)h>KupPvT9gZ72Fa8l4@BkMW&Y z{;%Y$RGe6X?~mxAh(w`XuX}1wLT@V#ob@IaHCmTdFBhm_vMR4*z)qK&2DWL#Es>9? zgro2-9aI@c!~q}6{~X7M-1)T68&62&)Nd?O%TLI-?sXAlAFnXZF8EHRkVXvgbE1X@ z_+wNyt>1--zG(n^W1fE#Yz2SiFn6NQGBl61fc;i=57KpM&+p4H)!p2t=Ybv9 z$=|L`z|JVjx=^c&W~g?<(26gc@->-E)4-|JLxk(~QuGQ)M;MtVr{MK@zU@h%7=zI}4@3`2gUdo93`SXXSp(iR3dk0R@ z!X~pb8stM7;Bz}gb@_;{7{pirs3z^tBk){r^@&$N21}%U<~_^Ib4PLG?US~)WgpeY z{&k+ilAx)J%SmLTKJT{Guz%$!-PN(HtZ=Q@{+p>%bt`VwMm>HaAjQIRB8jRwQ}dm} ziIGE+@r?&I2qtaLK+os>nnjA7^PjoE3#z!P37@FWca)EIj8m4RB4b$(3?ahUESKcy zKDs34V}L1sGsSq84@dn1c?7QydE_5Kb(egTBUn$^)s;v!Eh(ct;qwjbPfps8y__%k zowd^B?WLlmsD!3}sE{lACaQM3ji!yCEKs@bFGNvLi6Fppgx(W+-Ga_N!t5)0pC3Xx z3c+*@UNFQB$FXWN_`EWtxY2*b2-CPKw?JIjNsMf%qD)gMBP7lX+}5HPlzonBePiiY zAl$PF{u!6i0l>d-fvRXqmroN~ADg3&OQ-oPOxGU_(9$gEMPYv~l}Mt;fnxYfC_SD0 z`e|i#x&&?6<_1>*8h*PG`oU{n!k~^^Y$hD$&3sky<4n-suK@fuIc-6F5UuFbeA$;b z98dwTDDl|sLeyqs7p|g9_WaYWutcq*`2h#Rhusk7`_`o)(|Z73obNHd?S~WUDk29- ztyS^g&?(#~*Vy*JK;*9EmV$oIUT{ugfLs&mJt-*@KKr9r@!T~iRuq7?IF$GH553DP zt*8|r$larpJAo%IbQn#+uh4104T46NxKE*9Z0Bxs-3!ugsaF7k*Or{)dG1eANyt-( zdIBOIsAnXJd;+@+{ovp4o65zo-v0IH>btK+zI=FcjtjiVkyB8b^o2$PF+So_QZNEQ zpX};g?2D4VKK;XsO;tw}4(l&63U1gC@s-Uh5VPyZH^!Hv_z2 zsh5EJ=bM$oTPUK4NdajAn{bBErWXyD7=b^J9h(qP!ZEl_AbL zx)RZmlf9s|pTQd9_EpTv$g~KY(V#}lMO$7NDp>5db~U0&^4RuqF8A8@b&*CLuZ;@uqMvf_g`qsfA%^3U`r{mFfnzEh z7adjc&a*B+CRF9r*yHL47{d^h%8IoWM0#3+>QQ zK3ng1$o6{QGE@B^PyUtys*{(OA6jYsV&$WXib)u=zfbD1N{E1;Mq#$$bHHDr+hlO= zClF-dd54$Ady5ZM@FnrN}>xq zZj!~D#Bn`Sbp}7O?8ruYN>f{L6%m+rBvqK-U4+#Ezzgt?k(86e2n-Ay*zD_KIO8<5 z)cal7P)sKXAH;Ei*JH*0ln-vlq^CjXIbIgZ6Mi4zJar? zr7MwtDqd$e#{-UnZ;yuNy-v0>B`3=E^WfT{9ulem$+$*XAkcQ&^rmWWNLwRvAw#t80kc_YrZPm{%EYnQs{WKPppfTngoe0IDaahnG42%o*0sT z{7xdRQbU>9F-hYYAzR8jN@8)OY}1KLH*@*~vC{J_iK|gcGd&eeijjUy*ZGELizsy| zQ`+*aXqen;Hn!*hk>rYJSd=~dmr84ijVk{o8%K|}G8s?f+EwWCsG*;^A!iilz1$y-*YwY>>%@jg%R$S6Sg?!ZXcS~X+EDGcg2-JK{ zxliY=)JO|Oz=A_H=H|bpv38!q z)Z&Y__j_)-VO1ej72q2|*UC>!Z(CtGaj7|s)}JNExY6F~o*T-QM1|mWw*02Uf>Qe2 zLl+M3fr;@`vEgzjsW788Ay+n%c2E4tVpl%H>wcEy1oZp5>i4M-hLQ@n0B|%wyF(tb zI?>LiqWhpR-P+M`DC!PVVM5slYs+9R%eTIYeteS?b8sI{l{ zZXb__qNYt%P?~nlbBbWmG?qW&Y+yh{s{?_cY(cu~&G2iRYOx<-O3`y4w?z&tl;q># zj^e;e;C=q}L|d`nOfqKb#mde@Q<24|d3Jx^e<{8lh|~F-R((-q5Xro zzsi17R7u{`49~(qN!JzUp&H}Rz$k=4!o4urMfdgu8uZA)OEjsyMHF+Zg zTpJvtgwAx)uS|myz1rGjtqlZ7t#v{8IivK}$Ot0USLsdSwQ>pcH^xj-nfOEz9MVnY zov0+zPWcljZk({%`B!-SEWl$Y&wCh``FJ|K8dXZ7~k>a#`(_myl43COh;`>ER+tnXD2Wj8myO%+lszjT@>l=6UJXJobs(V4n zHzS=hX6yXKoDx11`XxtQ(qpZDulO$2e@fH;uW#OgrY>1?aoM=6l|NcKU-; z9BD12iC3c)SQx&tgV~|gnG}kQN4pN!s-vmvn=_i_dNLm%KvG)PjfJ}Q92^W085aDo z?gI{Rj9=b#Q+BjU3Ncy5iBOrms!VtCsQm_EbdAX?tWQYp6ufZUTrjsLVsASY6)6M1+VYN4 zaZX|cd`?FAXVvX3H;}UC7Rm)2c_S(8nzGRHvVnzQ^Q*ion6G18KYN=V6NGM@+bIcC zXlQ*IdbRa4OXb80Wk1W#ESYg5RL_oMw%Kj}IdqfkYO;@K>I=}iK5f$qQ81N2sIqyevl9MEi86sQL zb&lX$d5P;&8j%eCdrGaD7o**?RMSht3CNeKc+d}g>1KT-=%~D&aQq~iV^o*&qNCTw zzy-8j|KE3npu>&k&DZZ&8K(7QA(6zwSCf#lxd3bhCInJ;j$kt$>Ee;h*-`9^&o7Z80FV|cuCpCT)G z!B5}^!B4_u-TTis>Lluo6|#wzr*<7ZW`eAfETr1o@E(ni2q&26`y&cgA{$b{_nlEv1pcp|cVfm!n?*>&m<^$pqCuP9g=u81W%4X_bma{bLOA2AtsOE9vE!n>EB{lidK zmcuz+X`1}HP<&!C0(QA)DDpK#d)&kj{-Th|!ZHxNpd*x#*uL14sO-y0jwrLDEOX){ zxGM=l3`qQ_*SsDHgNpm;X$sHe0`mc0U@1Ywwu?zhPD7|n2Gy;t8k@x_h}BhoP14QL zJ|;p<#pjJ)wqP4dK?%oP0NuA@+1EJX7rzPr{%-hYe5iC2IxSSJ%LfNcNTc!=vSZU= z`zYk-`&R!%;fJ3I(uda7E8Foo<8-ipf!hfq z)znlFI1;B!4bAt5Ko2!y8ld1cm#<1El-vw^a&vBBy*~(f zJ=X8z#Q@*8KhM(E5@W&Vc0?pq7h$k+ZbBe2&ACGDdv4_KY>IsXrfv(%M)NV9so}HV zYVHAIsq+!O3GU|!o#VEYj>+2J9f?Y%Uve> zQAZ+ehYl(0u!p3h<~Ftz^yHbhcYrrP#7dTDc6L@O^PaLTi|Xo^>y^6Z8)B-V8|))m zHj7yT7v~31EqnR6qZnZU(J7~OF%;j&{QVDt=kWDj|GNdy$z&tsXBLg! zPvGtLyBxNl1~~^H0kj@&)auha(c~C_L&-&B1yQ>#8SJ3cO#9O~iKvwSIMccW{gz@r zLiKMg!6zzeWG~`iV{d*;2`e8av#-bJh!r~+G1QKTJvR&z-8VCyWWz1-tnu~5DQjF} z+UoB#sTNNV+19J?1Qf1EXrzv6K@})*K%~Nkq@$}b)BY0EY91G*eZqQ!^}F;BZ&MWt zjm@7l?89gtF1)qJw>PlYYZ)Z`Xf~9YNS)phhbDMw0?sC6DEY`#Gdr(rbivM~AV>#W zyJEwVhMIDEis%zUFZIF-=AAGSHZmM}Gxf#G#}lbcFRrWxfjP`l;Pkzg0tPTvG~coX zu>ka|`WID!K-;G!M!#U;)U0JpW!dX}(>;Dgl9Tp(&!+a*&rk;5xO!2Y;=ML(xy*ie zDQnj-P=+8}($ITREl{loR_?{(7-M_bNHX3x?u{L%9&Lx9%6hQO96!S$vJTQXlm*-6 zAC(T?KSsWs_{e@NZ@!V=&)S&@8F*iff05HT8=Rq{iA!k{Eg<4!_!d=yM0&PhY&J3!gJ|E9>N$PvhUjrVhG<9GJv~s`XtLWFzgkZ^d)GGpyYadPVv9u_O2o z;|=UjA$vfB9zJYq@BI`GBLdSHGWc5q9)Rr;Fxi{jpz@hro(+)@_aEfDZ`p( zO3t7fj+&>8>7hqBtC{c#Tq2T?uy~^N=guiBxytK^y}k}?>I@k~USm5fx}w~`(L+@K z1EXzElcGJw1(eQ5sfZEV(SYICJ0qM+|2*q-HXp4e;}8CN5T}$QglaWmw7S9~PQJ#) zcj#YpOUd+eOdcJR*9Ju20?S(oe@gHo^xQ@X-NELJNZMrEBi~}8|7BJt#db|ukgBIC zBT)j;2}9QZ)md+*o}Bu8r_QgY4YSP52+KZ)_jL-D)U3!)OHw>}R-Wj$4w@VSlrqld zoJ9lzmdHg}Y1qmZib=`dUdnTmTs~lQh>CAA__63DDh}Q3?D=VH&$&H#gq@690FEaJ zb^KT-eu#rL*va2XU3cA*dr&}C6OerRUBbu>F!`8t{)(7OZ)axPlMDuUHh4u^bE`3$ zz*VTWeSnWzzo?;a@iX4o+?PIGF6AfhNPd%ivDN)4xV2@(CUo{>%E5eE+cGzlV1}NE z#_YKbp-i_}OM&HrJmi&Q{n^mxsRm_sN0F}({a5nZ zXHGp8PI$jlFV=vO(C1W|?_o7kukB%2#6)gs}B{#Xx#D$o(@Y2_(exyF} zFfj73WkEYdc5ZHmglTg z&UI=u#a=d`N_;ras%E=sK*e+!Q_p)FM&-Px28F^wtAt5xhtolml8y&1ym#Vr%hCml zHJ#)_R9#EAFI5TEVx*<2a9Zj9j&QSR>*%YAKYURG8~Uvyp!6CrZS4T-+r4)Gr0YUg z@4f0q!B}_mjA~N(ur>J^>lSg{UF5k^|G?L0&k6T;bjJbi;Q$4JI!Zoj7Diav7rdI& zedw*<4u!4>ehxlex-VZ9!g$-~b>W}(l09!uL~VX{6X7;4Uu7q4xo#}+_iQiwm7I{*kI z*K9-9{%F;v8ZOr;_WSURvBrRfg~cz;GU?pjRv{UAHD2+@iO40F*Bt~Mw2bl+SF3pX&o&gjBXRCVw8mr^x~6$G zA)gCny+LDX!QbV9>qoezbkTWoW0CI@pvry-JT}Z}8?+c?WNz6zcYkA!ByVQmMGi3> z8*F4eh~yF7^ls#sQqIv;gnB&$Fsu^8j|S0fJ9pQ$i{o|;2cu5?vpW2n$Bl^qvqxK# z?nLPKn{Y80@54MltFhsfV;Qx8<3m%9>T@?pUAMF_TIHgmJ>O!VLe6RhwDnx#NDl_> z4iG(10KIazRt0va3gDxMpFUGWoPEM@l_GIuBI!oPC>ZvykB>L8l*nIDJLzqdZ=fEl zeCYVwHn@dMiT!Y@CC#EMMOIXI+beX$td6Djd;=55rvk_0aY-D}`~?>iu5B!)($iC` z)s{O8=|F%i5trHAZ;|mokm%Y!GIwoIW={>~RtMtoyzsoT@$XmwV77u1r#*v)2p+Wz z{srzD_BL6xzDTYP&-SK^CMDzO1G;;;FPA5)S`L$S=+}vsCaLB`Q96e30#{cr7TNqH z>MtUQYx(pN!rvV_+15&jZ@qz5x(>N{9vxZ+*{0&N+>!CF#~^O-f$v*(+Y{-JR)^pI zy-MQu|3_yx{l$UL2JUvOHu&G<#D8ope)~UeHpu(#e?T+mzW{>FZUVUh7as8W3hl`0 zX%zsx$S<*c5xB|oVA^VLGc}v^|3ddaRDE-NU0t_zY^SkpwXxI2P8!>2Y}+;(v$5@@ zQDfU~Z0p;3?|Yx`x&NNuIs2@=_FikvIp!E+sz@!4yu5%VCMP$*he^5cA>?z}_rb)q zPg}`bS|ZF>YR6#dzHA_&Ew5Rr?)?v8`Q!R>Uj-k-P9*>?+4FY9?4D*;bSO;9WTsssMsMP?5B6^pTW<(XI(^`!l%5~KYV~@1QXo#oev9Z>NvXIPfIsJT?mnhGYWXm zJJ`=d0?`2ycx3lHM|I9w#+*cvGqM6Hes1bnyGgk^`FVMl{Rc!O0I~NV(`O2)6#8w) zxg!Yzg_$r5rCn;0vY<9%lU+ zsHLo|oL^I;K<*2$Nzj6)vMtSxXg+^N>**0vG?kI5K>0ksm8}--BrGi2UCfbFTMCC1 z0#1MI+%`Eo+ozXMA(Fab$xg=2jfNQkiHL|;Tv>@~ZcMyn!B8JTg#TQLX7^XpAQRuh z*0%a4Zsf(z&Mrqo&@dlyZf?%MNu^3?pG@iZ*pKU;E5FvN6Yyh7q`sdkYZ9Y)cz6*C z`J%);9`ILJaLW>|E=5R5V*l{LpW!|<5*X9aYCPnn2tyAWVsB*RQe-0O?4~=v(yh^Z z8PUF?6&Dl;^S&*T{TUe%+vxOS_IzOWydHCT*dD2}J0NHRXo+wFuQy*lwCE&_fu!{G z2w1wFphyBI@-!QhlQ08FJ}+TK)!whcD&XWPBT-@KgFB^kOoNlT0jOwb{up$sTlq2k z{agnbVTDr3TL8|AT({&xlTaNO$nsu1MTUw>813)>)$?(0!S$&HYqOf;l(=DaZr1h$ zH|~U<>DrMkE|kb^7q$6px$N@9fyn@9|HWy4xAl48#s6#j>wKH*-rPb^tUbSIG(o`o z%Yk=~XnKrt+5BeX%9-!T>3VL=NgYs!?X2N1n+qQ#^1uer7hyLy$o;XlPk0enjks^x0p=8*eL)7_okEpld%7P>&VNeqmt1=nX;c z2eQ?mQ9`HLxKws4T7cpn^gqTPww_Oi2S5?^Jn++pyv2YXsAq-)d;?S(njy}UYISkB z^N70f77(^MHc}CMX5tU(1T#=Bt+v~t1UPx>;`5m<>riz=fxrE~s(+@cCwB*jx*7Z~ z#~%!ItO2^uPEa#4_C(^$*e)4k_2T~M=eu9+TIq{+iZ93pN~Wn?UTN6kPV7Md{kr)) z8#$-5)4NIHbC{u#5yaD-O#cVGIlT)c(gY+VJ*oU&xYnJI?qPdxK#^J^v!TIBt==r` zr4d5ic63TCJW##pJPo2bpT#!g^3o2Q-Lg1?()(KoVh?v0a(MJ`iQ#{y>|=jg)cs&9 zcEz4=ohlO91FFpCo$1M*a()BA5cz*5ySVU4o1ZB&-VGrWOQB7 z0vPfXk|)J$rH=*w{cH9CComfi_sthN-ud~MX4$o(EQ-B7bAHeqUE6gEif;SMs@g+= zE?p4|KwVz5Y2QhrH8m?Mddg4~5~*#Cf9SI^Lo03U9vXkbn91Otsulyb{rj>-)xZbL z_043gk7L6#CKja*Wm(gv4V)eg10(uy=2t!1gLCHL0MdcSO5#=a5{ko>!di1YNOP2biII- z5MUp8&7$3Y6N|)V?@mrmYx5+9NBz^rBd9+b!t0+8vb}ruQncy0`!Va(my;ivaYeq4d7lpTwVGGE z0Bk$rG9RCw)ILwSraG$U@}vLmrG5b)w}^c9xDk+l?}j|t^jBYzR+5HHqD+l6EE`1E zVOEoXlNkOW%Om;kgkml3C;Y(J%}wXm++{FWD=))*YzLeu{%sT1w7!Z@$M;kuj z@(}`WaHZ6=NX#G|cg;+ZToOu^m6zFjSzayL`$?W`xep?F4<89ClVp9mODX6ox_jx< z|B7{>c|PgL&T>Zj;etkQL<*T-kpEE)+ijLr&ZaflJ~)&cx6c55=968ZF?esP!nHxlajsGWK2 z)t~(oihJS8WMm=C3yhxr`ZmS($*WFLx0Z)H;l_lxWa&V`*C`sCA7PNd!?7*8O-rX- zw@U$`zp{B-anrl$anFUUQ}|2 zty}g89~}k|$eKN^hKb|YVeyBsup2r=jwGPdh??=4@1upqb$k@|32-7 zfdDUyla4P(E>Z1QQPEbd6cZY3evjFwviD+YWJ1@?Y}+=i?VR^GF+!}*BA?4p3FC{q zy^z8V5TWuP0*pcY>n7gd6`u-nDjSi$7s-f9JJv^L?BTTgz8v<(@DIRJ;YX-{Dcb3{ zUl&}T_q^1VT2Lal)rbYx#n}X)bM%d}6fIul4_X1h4E>-zv^L$iNy@>HTePJwVziFs z3A>txom%W{sCRZdXmo+E8C^CD1heAjZ>&e`XEKo|K_qrMKi^OE0sA#b)gakf<3}<( zJ3nvuC)TgR4d=p-U+?+eaNS30z4Yh@@6+Fe>J?x|79bxrL4N|=4z;yv9ZSUZaYBVC z{@I#tgg+QSVRh5sPr?#9YHG#eLSrTo;v_gh5e3#)1+ZTU%SubhNt0)`KGlkM$fI#d z{(z5Y^gEEimPj-^)cLMS7gzrgD<0c4LoU3XRxvn%0*qLY79L}r* zQFvsxUV!C@>&uX-@O@+1v|*I|*`c|92jVTFzl@hvN328zqJcQrcn z;vVF`{wY8um9%A>79$-M(B%_lsodsAzty1GiwFzD+^9jo6x>sjl8?!W}xnV&yh`#FR49s+1s_w7R>X1ikLBB`xtCp8IsgV|^A@+Wq~LCI zd|2a;Vxs2x3}L5YAX9?6!qz}l*jMUxnbfdl`7WvDTOTT=_R6y*?t#hG}8l2$0KP#xpUW+b!(_7t6xsw zb(&@=Z$nM*{#Li4_5OC=XY|d=#j!o#@Xh$e$Ay9^jK52)wytUOAp0N!VzG-4_2` zR>D-zQ{w#JVSkvl0sQdB5Sh@U@o1nw3~X8_gICS;d)Y7cYC~A3f;Jcwi(7?B?HeVo z|1Pw}l#e9RE3ENHnI=rEQo~d7sS0B0ZqoGOYQSb`=|AHI+(L^# zWT8Yd9I%$2o*B&%wM!@4^85k|a1cIGin9FU}*3D|%snPauiAa zYj7V^(G~*~YuaMwvd1MzEo#)rY2#-O0kOZYY|*bxIq)*tf9YX2bG`|(6u+|WInqwp zmX3|Bzs`csmH#)Z{!ilT2mX;;-}kO6c;)2g5-KRfVe^`yShC}#rQtv4Qk6>lpQiv# z2{v49AuyUgxZ{V!4e+RuzL<`8Pv(A$O~sD6J?04aE{A(pFW`Z*8b#h47?)?unvRyk zEd}RoV!}t3(Ei>d_Gc*`K4qi==EOS{d9L7JcLPlbgcWBYTwkyqfxM(NFz2<4=gm(f zA~|#ctZu2D$UQ&p|MYgS-Td%B_D=hfKNPyW%$=B+NJ367%!_eSR9S5DufYH)h%F5D zImEO6FnP1kmqgSB?{1xc-=g5TAaJ&NamMIWVL7*H`x8JwL-(HA^&a1z^b!{T`oB*c z2_liZhd)iMbxsm6EhPyV?e;By`^b!x%NBAfD|N(A`HzBsi2k!+fyXac^`GmrMlq(q zgF~BawOUj`QPgTSS@#2`{!H=e2}AWU?zw3nipzigYmx_L5|Qw8X^RU&p=pf2d$md# z1|Wj6<<2ZFE=Hj#pDOMobH5ucS^w99nnVXc5ND!sxG?%TxKsqFfGgNGi!(cNwvfE)8O3%k@n27%0~2&FGiO1z0yp(vp8^HOh>rrJi}l=}f5!I_3j!b* zaQrrWFN6B^|KAtiuQ~T0iKusmX4q;2(Tb|fKN;%BlIN61l@Hc_HsAkiB2~1*A^hd8 zC|k{4%C?P<85ePzCHD(ws@!#X_uI611qVgb3_MOe5;OK(leSHoCR=g)TUO|`2)YcPBQ2XGwyBXzJ=-*|EdBo zG5!^7BCsborWrsARJ099diz~AUSSeSu1g+#?kd5g$B%w=?bOwsWhEKyoQe8dz>ttM zOVLbYhD$|Yn)w;L!ZS>70h^BW2g<@jEa>zkV1PjIh6S^UCSyA$i`;&>R5$}kgi&17CD(EhY)uR&+&?ai4r zz+ofbeZDDQz`sBNX<3yYbdNsA)wW%CUzOyI!TaqIg|zkrwedxOFPklD zL0_oE=jv5QN`UMg{Agu?@(+Irk*^bR#K!CX({)r%V|Etx%|X-h{OitD$1>(?c1UHL zgRhqyWGqBvMz04N)GdYeebveH_?|rw>-GE@AC7mEnN_o_v$K<`acunOsC#~$byI*WK zwva~|iFO&Lq1uXEstatd!eSZ#dSw!Q60W;euVDY{xSVqiK63wkBLR5|R-beK3RL`0 z{huFoe+QokhwQmlH_3}Q2-F3-G%}&4hPLDb@A*RcSqUB4SM-k^U$?2|3F$Ur+H*cl zVE_82r9qDN6a=n;cqGLm-&Cf3wC?lU#G|?o8#SFUIxv#CeqLQccRsAqy^KCE)PK^m!GZfbmnGypde-URn zZd^;SS{Y1&--f-DOWVE;YfFY}=;f(o2rvC`mzzN}Ukc{6P}3FW><1uvlvxar4;S{QP86 z?eZxYz@C;k?=v11eKM+G3*KF4Djxpk%jtjq*-GKSnE~K7aN~R~oxHl&JGg+ckAKJZ zCB=2^l4ZQE9{<{BzCI2T6pv7x)~=I9m=%qc>XY<6;1GgKrq`w{BM3hP2gegpQ^S6H zd(dTZ*jJd|Tv_2UVxB*|aedCbN5bw~CP3119})r66L`5m_w3kBC%h&dJ6^C7bbGX( zotu*?G6+FHIPnBrC7Lh%ujN&AqLKL@IH{?Tr0>74*I8y(IG?=aA~{>&!>KOZi6c?j zBW>gK8dSRr;Vk1-tbs_xz#?BkQb@t7D>QEtq3ee;hmuE4v!?VyM#&;)Hep%Z;CenS zs=QpRGeX+p@4CEWB_u4+fRox?od*+}I^rXk6lS_Ka@BaLvvt07c{;K$2}=$(yM0Hu zn`R4uSj9%vXwD#HRZ+hj^MR}0s#~+=@*CA>;e39ZDyA_XwBV>v@GY06gIB$JsK*P@ zyBWe!d$^!1e|O~AU*$(=NkF??+F7~iZKIe(=LNG}&cwF+3N_wrMP3@AahbhQ5!^8s ztw2?{HQFY&IZ||0^U^?y-RqBhESrwLGcnN*FkT!)BOM|#an`+!1$S3Z zKx&J~?5zTo7eDs!wx+n)1``hsQoU<$_Kqrlgor!Z;>B4zIFNvl+rNA!_}wW*T&>Hi z1H0n3u>*vB#-1dNpBz_2fE@;AX86eFowe5Nb#Rc(T#!7uz54qA)LldIE^~(as~$o| z7DQbT8Y}V%JF>HtS>J)2mDt?43K0PxD~RUO;$t%&)@ z^PQ*L1i{kjBai?1A)E@!&eaH`-|8lf-H8+rKLr~9z(AWQ=s&w)79m~5YxiINg(LCb-y^ZgCF{rT)`5E(9FecGmG zWi1l(Y1VDUoV z<5}Fi1uV5S0`@iNZrp?Ja#s3QChtVtY*jbj;%D^w`AqjXi^ zib-9=W$JR?`ygg9n{piu$?Dx1s4;TuW6`j@Q?LWu;Sl)K+Rr%;-FbKGTs+(bSj!$I zT6G4LXI?UVmO4q%M>!APSj5kW!nPZn7F$YD_iYJ8Gg5%Isjcf4;>%7dkIkz$%| z@Zj#-@-;G5^_*ETh>yah44p@=1V?;w+QDk8F*GK)Qk~ViDLG8_bjIxTt^_&xkr*4r z%a4&SCo6Wj>~5*9g_tQsbvlu=V9-}Xqjpc@$7~S~@-0SRtO#b475mQ8u&z@^l!3L? zD?nVf><>0SkK4s^6pM_{feJ;P;z8vk;eH3K8cwtPjm|dv-Jd%|MtuTr{`w41xXQ$cknawYN9CW_;-*a`DFri~Wa%1Px@g^lk#o!RvP zY~h4f`CL+CJ}@a&-j4*ynZ(iGz(L1;Rh3n{*(D`*ZB%1x-JX}&hINt~-s86>G5t|1 zj+UT@z(PE7E&28R9K0*1^WZvbo7y3?Dax+>>Pmet$tPQdyDDzC|BL(S`(enrbqRUK-!8AmQxzru^uZfL;%D%2JObxHN5To%eCR zdyO`&gAXfX+X-oXV{B z?;(Qa8u=lQDHxd6HN^Cz^htw4Ast~WpCQUleBXei6D^sUYI7a4A~UCl5cr&@mN7uV=|xl$xXy^HbOZ; zQT$Gh5apUV=`=KBGRrLV;l2=?O7qeyhHb|d(V-CQpDVa zp+S3k0Xtg*Iq^+Va#d@I;zquIr(OW5H`Y8X)!mt$-`%rpx1!!KK&$LU-@{HVDZg_s zXhUFnFlYjr!q1Ixj&rSu{UgR9;~gxF=7*X~Y)%H) zrTp#c*K}O$-UjBMQPZX{(=D3_5ub;RWIGkEhTbZnriVI>qFKA~OF{;~9UHmyELIxb0Sj3#QEpu*t@B(Pz&v+yo9{Ln3_ND=C}HrEl-pfg2=W(zbU)Nz#k= zURXE#=31_>tZiBcu5ES4=Lj*BVu;~J8r-t($ps}UoL=BnM89$7V0Q zY$eZsr@d#-Z>k_cgxaS!UuN)zR_8MQ@BTA3wQ)YleFb6`xBn>U4D6=oOfPLrw zDiPGRm3bJ?VrMFo zGNGoXW?Whtse`A8Na1AS&z~fm`L%hUAq^O?>uTI@pVn5 zLFnFSfkYY4jCQkaXYsVF;0*7Ysjdt+0O9tQtVtJ z8NVHi{sAP0@2y~RMAVu+-L@YiMIz1n^>g8+&1yZ)`@PSEet-CRK?V(tx$9lFTz<1F zmc4x~fJYJ2YuvD5GCaZgJk4Z=hKHl^uR1@kd9kzZgg-xQAPh|Ae>dKf336#(eR%mv zuy|=zA%{D1K(nO4c|1X;&un4*bvuXm{w&URDf4r&y`cANqm!A1(#_cezlSuwiOw?7 zVL+a-|BuR}KH$Kq*=`_>8@Bb2kU|{fLXH%bQQ(QUCyV7KMoVnOtgIX?;Xn$SD(`Ky zDZSjv*W9Xa@dW4egM>DPg{WX9zruYi_Py=1fFd!q#9x0OF2Sc^L3JaU+X2+-q zEh>=}g+Z|RqKu)^u9NrIjyAPF-QZooGU12E5e@s{fv)cMT_RxfgOrx>w{D;ho>TMD zBn$+WQIPs8-NtI&`dn*)Rp3SEd&JC9ll9Bur;3aNx zp)&B_tQ7E$oSpRgE&4fM_w_mNhCy9#e_={@5kunyJGdP7k{k^73<-Jt`I*MrDPurWq*EkL~NEQi7H6HxMhFsXy@JgB==wM%h2Mopu z$mDAqL0zH6SA`m9wVDf2BRtUaOuJEn6SxG?idl}#GY1+hriUPl$5XfyqU_M{HcXRpt3 zz5SNzsUoo9+IEr4u-MQ!wV>+JiyI{xl9y)?#%+C~=6U%@itjKg-NLlgP=-fsv_XF} zK)~aS(D|}m#%Cub+17tL)`U!sR3oAIgEq_K&YYZ*Qn8QB!3XFz@pciCuJB#+7_te) zSCZ_utg>DD2|KEL8-R#5JDLJj#$N&NzCHq%w;`&GJd~)#?O?ph!9G}Y;n2Co#Xy@* z^=PUrPh7y@70l#d^k>j<=hy0g)J0d9$&*!Q`*E`WXq7UM>D@9hAQJ5Hy43j@vXkADQ z<;iOYDgMk?yS$-0$9l_x?X9HcemRQe;>4{v#9SIUH)|Zhtn64LnTA3vMn4o??xxOo z-o#GLzgfI;YQTO*$Vdy^sTxgyy|^xFl3LHuGZTzYBnW#s{~_{Q1ClA zG`rt(Zlv0eM@s~qR@phMPkc%}0}Tr=Pzh9WSK+;{qz{a20Gi(2asLXbs^u+FwY~20 zuG@N;{#bjos`VA=^ z{adtDPdG>TR&^_dw~SqxI19}wucZ(;&G$!4YX%Ep4o-T>h+%(BwKlD3Sxt+IPAgq? z5NxMZuVdRtPIjCi3*73*ku~unqOjaA2_lf2dw41%{t_&yb)h79z|Eu9qS2G1sos3aU zOEG&cBYtDvPh_1C>uspcya*0TTa<)WQ(k0#`CpOqHrCwW&)W*Y* z|CY~lCYora(753+@Yk3`u_0f10NZ+n=AMl&P~BI!jB+gTcJf0YZY z;#P%7Z`;{>X& zv^N%LgBoh&mgOkal(rc4d&60yLQZ!RT#r6SjRhcNB(Mv2Pn9>;w$lRGwK?3alJksD) zRFc~EMS7RlJjSbefej|6WwTaa-J5;ae$nFoXav_$Ccu@Yg&f1CA+(mnTuZJGND^AIB!lQd%`_7K1je)f)GpFm4A9>n%U!yUg1FV((1msqbSFQ zMFQGIRzlNADN#H}j%!cY$k@0i=bW*@copy^`}xdhRQ11HfMXfa{L$A>KWY$Uu?FEP zeC-Dei3MdPBzk7#UI|{G5B_izrvOTF2%t(G?E1C&u2mp3Hu5X2WVRgdmKweK3nJi< z4t3UiiU~TU>sbQ>Xj3{cax&>LGRkeyb2IzWjaZT;Cyo7ITXE==i&iC4MEfmA9iO$Xb|E6U*a*rtn7(PNhlF~BdWA2{?nJH3 zhlY0t#YCrs9nWbl=nt#E0&i4Ytu~Cyx2g!SFuAv3jnVSP@VIb_WeAU=&*pnFvaz1* zOeL5Ex>rJ!P7D>Xr>;BEx5YG;3ANIE9MDBC-Y~^0Vg!2DkF}BL2R8|z-dnxtB6+_N zRGA{X3+18)o7HjD8mbYjoU}Vdq-2~uiImG;WxOoP&ZcV}x-Il5V<<7E1hK3< z^dBl0G0ITyR(WisOtdzSe-a-K>#H{WzUT1+7wE{d7)io{&B`ai(%5E|Sv4k?mQE4u z+{g%7Fs+U2LZ{Nv1V5a<`a#DNT&A|?Z~OkdA*|`u2hE==EF9MV_XW|EBoVZ$@14` zt!|g)No*seh=GL(tW9W^W(Ogg+0Y)0m8oqkcq1{R8;L_~W`4r-uF}4%g>WxgIEcdG z-zqp9C6w`B7?DiZS@1~*Zophi7t7td5Te>JIt-ISo}c%k18EeQ(A17TcfA(fg3120 zUa7^^dRT;r%L61^rz53>^WpbrYt+P-M_9jLfNpeWx1q9dy*9cT;fu4(J*!FT!ri00fa=n^{|?qmHsOgJ)4KHobPdVf6_Ck zj|9p6bDqi$od2AGMP1nsM*m)x8#Zb;c{h@O+$U?r!om;1#ltnmid%=>ALSyDN@45; zf-iMvl$LZ!6e-`qn$jM;lz6p)LgK^mHteQv`#x;eO#EJg3Y_x_!xAM$#V8)D*sRpZ zfUx|x&%1O+4Ho1z}%!JJhziR=K#TKy?jyb} zA||%8@%|)W$HT4vqUPE0fVYwHHY$+S@9^%9I>GzOxj&W}00;*~BbRl(_C!WAxX2(3 zUg>sib1WF4C2(^okVl^yTc9 zE-;?jGuNb;vY!KBO64aH=sOr~DV7%(>2m@dRFmv9Jw#vJDgt4|)v@%EKds+6U@E3c}E z_vYS6WKysMzeio^YkTu{-jq1=x38s@yFRKR`HZ9e7lw*PsN2;Z)jQAJyOFAxq@cQd z1x>pgBXlR%&WMfQmZp(6X|UE-y@;vl9&`>9W)FXnM^E>MnVOJraeSQx>{_oY8O~6A zm$VFndiT-tNjvjpsVGXG%Q*H)xLY)$>Q(JEL7=eWzj{o({uJaUSs_)NKJTpj>Ldh@ zVA3I-#tKCyUbw=_R_(>)(||3Lq@Bu41rD>-j1hsn;BNc)_@h@w%G8V^#0@dFScfR4^JtjZz5- z7i-KsHIyd<14m&LgyIMoDxglIoN+i{727oM!$+FgsYWr6XjhEmB-s2zIrE$A%IM9$ z$=J0mBHLExNW#vsncWPF=olJ@Bt}O(h07o=w$@8NrOlsWIt2x<5g3FB_DUbE#D~De zEG8%Zu06Z&ZvtV5>e$nA0-V)1k-NHN9lyb9wA4vdi>;)H5xRi{@kCtoB~1L$@;Icx z+P;rmS%P#(Ro~Yck4Ti}zq$aYrd|xA%6=O3KG@CaySXA+iJ&F9b8Vg2@>8#_fHXi~ zcR*4Yba`h5=%fiNfNy#PBI2z*PlXD-POTDoE%+7GW?8?KmpMEfoH0_t8{M}dMv;oV zT19mbrxe6z9~#HkvVD-KLbFJx0y+2{z24{%LB5oqVnh^K@SLzySImGVdt`?aIOhO5 z^T?84a#v}cbB+6nTi#O%ZOk(tI{P=37McHD0?V=%0OI9UAAdwKEhg7sl1 z7n04aP_O1Zs-TLIQkLyNR)nnN$kUB^{mp8#K2uSk_@;O%R4R`3Ng{IPQ0SX-$^;~` zHrkYLdBZPwiIzD25f{l{YMmEm`QkdSBVyWLa9c&lQ~mwBz2Y|3r)aXc?=V8nIjQd` z&fc!zJ>}kJ40O}dXNR-c2l}I7Ud(BZZxbZ$mC#h>6XWsDZz&svlsVl!|51G z4dodEL^XS(WrIsgx8#7{zFyeH%lCFmNIW1CptZ)!UH35Xcj8J zNH4p?&Zy2Z6PD-{>pPEgtQ%9PZGO9kvsBk$;7%|P$YVZfW<|(I1(A$TFRNH=sI+N~ z57()bxKS?YA|%9u%2y|2oLdZTzFjw*1bf_2@jw($GS@P%pZO^#}5JP;WN$Nl8*CQd}{~3?FeVbc-}Z)Mg4w0d|w;Oj5F?xObQIWXYQz5tAAWIAXv9*pq6a$9{?zEkzZ`{?K(HL^jVw`dpW~h&{A*IY@{qgnJxVD0(uaj6U1U%NlA|*$#2Lrl@;~%K>)l!f+Yi2Q-)H6a_u@XV)#PF&!tOv&7$nQu}Y{&FjJuBKI9Xr>Ku0`{4)q0BV8t(I* zB;JGXZEw!sKG_@6jBd4dRY!yKws#UOM(&!9h%)XCq-4W;Q{1>vh4;8pVu*)3*(yb1 zDzy|mJDjcU+F}C__+?xx#ilqrN|Eg7tm)L;1q$@*94G!2zl*s&QO8=yL9Hw*?vW8) zn*N(>fF}qVmEFuH8y15*`?OSBprIs>U_!>uq#_v6x>h#us{Rs=iVWmm;|Evajy2xu z{Z14*b0AJsJH(+T-Zw8oLnO+q)IHzREp=-PHEX(~iJh>k>3UlyaUCbk_zb3WwHGO^ zi`YGNg4BKRN!=@6srvGbDr#>x@NoZN`PY20#v_5pX;oW!*t2$ITS3J%?3+rt!Qz|H zbF1mHJ8r8Bqy6f!EM48);Wa?|omAudERCr5+aZ`7RKUn*G3M26hrndkOzb3uC$dg1n*uB!*dL`G z#pr11SaN)Pv^=LC^T3B6OR9@ukcz-fNBI#=5+t0{%?wHHpl=2#uylP3`XErb?K)Kk z$H-J-zdex5W4hSzzi&&iva!>&F+$Wb_8X!)g*<=O4G}ycDbLWAR5?-8Y_jYPqryi% zTJwB99q#?w`tIxx=g7G^8H3+D?w|QE((8jh2fALTKO>WZFdYpJUGrk?+6<|x?Zmac zvwd;a1}|S-cQI+z6`Dv6vmPHUJ`{_-&kU~8*#OV#yXA~Y!Szx|<}OL>>ct5T`JGiG zrzi;4)I`5~7h+c?Qp`z+Zn&xGZMj0IL#}LvsxAis(SCjIxQp1b&kLky#J9+f*7JGkfvQT2l ziRN^<0K2BJ0UMcO$X{QtwmAv0c^;P}8<0>6pk-jfs^XOy8_Pp}t~$u-DJjaLe=1U{ z$e&UY6@_XoS4m7dRoP~5*o@|Ri#%wzOHbFV{xKJ05Ziu!{w8cwI5u-yQ2Q)S3pS|h zPP(af`R0#&(OWvlA0rYusI5^Nbqm=?xc>8oYI|qmwhl@`yzCKV$&_!jS91>4NP9pNmBA{X`p+CrS21h6B`_>(05|5D>7Owb@{0JNP{+ zn8wJCl~{<6Xh9))-<171z_)w_FHF5dN_o&I*y9gsgD60glVF@~AAT{Zfy=U&ZEW7# zey%n{mwoL;(Rw|n*_MpR`D+U;o3WCz02ei=&4t23vqk+-i8;?sh`9KAe4{1!E!CTB zN7!Hd@K4{DFZ~umUT#I(e=^ZS*C=!dito9Ny_3c1)%gi4xQ~D3HeW3br*_FhQge!L*)5X;R84?{0~( zFvQZxJFN0bhOGiVGxImJNWa9&cVX5PaWuVTu@iQ{&C+_jSgqeFZh61sCz_xNM!k63 zPi780)>2ZY2hUlF!{+@$a|6rXb|iA!6hWK$h%-8`)@YRDJN>)~@re86W!c=!4f5_J zfskpElDi&{JJUNCC^)8LNp8JU+wl9Cj2hVC--<;TuWNzcae2RTrX`t^=@_r=<1+AI z-J^&@^N{G2`KTu=R_2x}#_Gx&8H@hT1HGY=f^u!jFHEH0VllJo2f4Q^MWyp_5+;Vx z_?`rvzQ~r^WHJ>C-PbGL^EkWhq6a-pSyo)b?7VyE)^*a2X2HGG z<)%$guXIJ^yTF~8q?XA;TfK!!ZM7!r03(r=Pvb@S7T76wq@B&OJb-hPr=1%v<_=ve zs#ksiQ%#baP7ejGm2}ng(R<_sSM+tWn?;JUrIu(E{#N?^+@tm@KVmb^`xPCdi04-@ z*ZPVje9E(W%+7cAXr4PWmOI6r^K%aJur;C(q$v-TUErh&9ZH~*+%qvTksQBq5#_^1 zGOJhfJjjGxYe%ZC#c}7ux%byO>X{Cj8;DB(Xlo#y!Av-kT=mzP@bh6I+xEGSPenNj zEPp~gS|ORh>#QMI^UCtd#iF6yS9NuT7R`vXH12ZsI!s5e+u;$W;W($03|+4dwRSAq z<3RrFb@yj&ExX4;*Ta6Fp+lXM=2-&L9B)AFUGTkbREbel)p!^3Tv_KNg2S=B9O|he z-i!4=y2M+giYb_ZFC5QD#b1t{7E>@#8>MX^nB10Yc8ca(gH2ckWEi zvti!J>1=4IN#l`}iQSRF9#>va^9zL`&i!f7zZ~=`1$JRAaeoL=BQnd5h2*K*eC?S* z=~PP$m;G&jZ_+0DDNn#ME;{3F9NyyoeQBIl!kyCvLvMx3zx=kmX|}j>YEaPAh>6{d zIJm>gjM%~zq0vh- zWB@MN=G+Ftd*(eWB26#E>|t<=?fO(|wfp9|wa77}lPiQEJu-JD!R~Mdy+1Q~J_phd z22n7%UHn4Z%;^ zwUG0)VKwh}VT!t0Gyw{m(XbBBVX{ox$Z@}}iE!xR`{&@LYVLO6Kzrkx#K(NMiH=!b z7C&WpAHziQvwd5wW>a?BE;EHMm~$# zOYg-T6^-W8ee4suQ2eTA81>x``!MMH8(%cKH68tNrX<48En8KdE(1Q}xWLG_pkTX* zQkoSAe-pmT2V~%!@3}Q-A#W0H%#bbw#b|;f4*;F7;AKxU4Wf9)EW$dm7;CJ%7UM-e zgh9%J`6bmz>+VLFYc4#8(n_2asImJSetnb7Dk!dZOAhL8F_HB-~avTYtQ9CyFhX5-^>WyD$U15QpaV-x9BcM9c=RH%11dS5i{ZRA-%N$7JS9 zgqSA^v^z@98#iCnY?8A$H!d%mGTMbj^>z|zqLr13>lq(~#otIH_2v>Ml06Qy%N^)F zy%oLJDPy8F6NU3c?hAY|x4&>JD907{V(AaRO*$^Sq1@yV!wF1FAjK^}xTRson>aO>@&!}40tVSuy zbpCAJc1sB?dn80e8G};+gFaik3pw3#AGZtsm%Fr$txT5dw515_pIY}X$Db<;9sS`$~Pbo z@TgwNfG`^|TQ8gW2S9@O$p_r$JT_kdSf%lv@4u}w!th@d@>;Y~Ilu2?6_4dqU*yL@-xB9KGxE9XXCzs+aIWFc^B zU>)UCHMb;0MIqx4MVm=-PgHKS&XpS0w*S%JS)?;;1cv#GvqJ*|;d6W(CdTcpTlodK zT&zq=OWRQ5Vh#epvJZ&v%yj`wuz1{}zL^;rc`J({bNCrswiwrbyF?K(ef*|lgz1cD z6mf}g)muBl+dzq55GD+@6 z`AQK9a|qYul!E-f6xdfla+j0@KA%(oa5x$NTaMqJfQ6OSO^y8SU3k*pnm@Ymfxk*M z=d=sp@)8}hftb18S`t>Z-1p}*Jh@zxB*Mu}H4!sQ)E+w?Bj>Rw_~hg5Hrw%87{d&Z;$+Z3^?I76 zREa6O)hH}d>|UPHyF5;~afk2WVnS^dliE(S-yQ4AFy{sX*JHh#E>8k&l<}&bQPlRI z*a10|d%sz7(ei(RAM6Fs0LE>4PVnV?y>Zrx>O5IgBA~8d(sc5MwpV7H3PURC9xg3`($~YI$Wp`% zqUve_N}T^)^XKw6et0sk8aJgS@w6VDt0hdduvDF2UMfhSIG0%8AWD|=zEWVQafK3! zf>^-{lnLfyL)`llSrGaKe`P#Wu3(CdKDsvOuRvE+KG47p1pKYQ_bohNXK*=%(8=or z5jcQ;r|Ol5?T^`HmQB1)|H8;db^*gA%8t7N37vLrWoZBs?E@lMP=rL`dB0bnG`7-T zw@>2cYV2ApE*4 zzuNbWisC<(`)=U#yS@Fb)rDB6#1k3tly$^Psz^* zn}p3{6Wjf%lL-DS^q%2!6A+WeETGfJFgaYmWthK$WtMM!;T-TQ7b19pa9Q9~PJ1ps zUWgZDC^Md)bmU@UlB~y^%QYTg8kC-z!L;#mTuUQ1Ae*X*8>C5if1WtnYWy_dxW{m? z_z(n5$t7n`B#VZoj((Bf)1`+VS`_qVtE)4)JkkqH|YxSXpL&7mrE5 z-(Hp!X%1ec%JHE@Vf}bVcm4PbTW75xmyE{@uSlK4OQ;-xO60#q;6pyXo!?c&(=Y@Il$N8acaXR+PL0*W#9L3vU0lvYxlSWcW~ z-m*?iOtj1eot#*(GqKIWlD~3(t?s;LH~_$=r9V_@A>bR2A+w5FYFC4h(Ss@+wVmJK zx=zz}MVpTTGQ9U^rMU-dCpi+9mhDr^OR2@?1vTqaWgR8z+g72l zc-;^IV-zAk@E8!DEO+l9!pZO@FweR^etEsPV>jI|wpsiateajtLAL^fTGIfzGDKk% z4cGCs$pIzM5j(6J+2_H1MuL*GJ_-u5VdKX9>MA9&CK_uZ_|wN9?IYhfc>{&6Jr1sb z`o&wG&n+6oh4z&}J_JwfDoV6H(HR@9nU_s)*v$^)APPFc(#I@sDhI;b!`D3oVh;wq zxeb`3?OF-&?VEi0bbrr+zju-pjocTrg^b^iuw302qc4+5B&gk34uLt&>g>l`Y`8E4 z+kwe;Da72vv_}U_u~Q^zFqA+D+DBvZ^3-^A@WtNiBAr&d2HPYq(;+Yv%892E8D_{f z)y?D2j6%E@qHvq~W{`1A5z;^x?cM#+AQ9wO*-6Fmg#yYb%d>+t zTw#K2Ls=mV?>`R9$D74-w-9weRsB(BYTVZS6TXj(!HhKs=-tAJYHz>qBlC`+@2j6o zH~c3WBYhb9sVS58ZneVyX#s?NbfvGqL=@hbV+FdqcFc99c5@q<;T@uPje|QX_2gW& z>MFgTXH~w?d-n_s0$yZA_?dR>YbhdT$U8CL-%cuzuX0nRv$f%$GS8i!S~Cw{o?>C(W{k3O-KX1C_A{pQlKC;jKO#GOZ@_y>4Nq%2Z3nd;j)iMi zJWe#=uD=)gUU!4yI=%Z}KbN5V3~aPs$$hjfUj*2uKR)1$yeg z7%!X0)(Gx=JZfV#?(=&{d08E}W?1GpWz;Rh$aQw$ck*XeB({n6Gr3ppQuAC49+VCC z-%l@x!5+x$qhn(3ppqpeTwG!#MP9^I7#eQSLw1Z;HFB&`qDMJ>wz^dWS|IK#6oh+! zSa1ys^NC%*V}UINA=bk^jaLDVw;7=hfzndTkPvShIN0#7C?9_hnGMo05ne$c(&9(| zoU?I0M}Cjt;?s;O``$geIvKlH`USFm9CEP!yv;{>=mVp!zX-b;Z`(+-pyHPXFH-G*#qA1osup(f>f= zJ}r*9E1oym=kedFdRf83j~mf zAJW2qHv~Kh1t~zGnR$8XuBOo`TAF^q&-5@YgYh973P6Mq#)Whs90~|J5R}Z`-F?N7 z#@p|kO#$hLZ3sk?8Mm@)oenBS;Dhkn@!!n@}l9zE#ZL>BQ;qm0ux!wCH|C{wo=J`-5n4kVk zHupQ<%OrbKgMA(^u6Nclhu@vEXHla=_)Y}y?RHD|1SKh+OZPq)&MQId_P&(oe+t&@ zn_Tj4i(mFmckeP3SmVSo(G+t*bgV)+hGPLHxKprkBq}M1kLwyzr&KiktXJT@PFt9LFlG z#dEuNeW*BKBBsH!f1MfkH{mI&Tw=TkLQrTO`&dfY#3hJ{DfHY=9XjUpl>=H9pz%{1 zG_n;Pk6O5f5la5qpLXzI5LFEVrA`THD&uZutFu<^K+^@TSPC-5zE%f~!d^UKA|VAh zCqlWvL%6!S8mBH(hgBiZRRkEaEt-aI9f-$l#exPQ{q@Y&b^AN|NA!k4Xs>ICG%GDD z@ZgHwThky4xl-+yy`U=4kUBzfGxi&dw_n>0)HF)8xagU4S;Izgc1gzcseOmyjkEIy zZ*j$9iCq7d+YbGm>e)r__ZKh#19s&Vpb1cF{hv4914CDE@7GlXh^ygt4C2jzh#li@ zz{d}uj@o?u;`kUn%jr7A5w%!a$FSpnr{QM@m;LGQW&@7g?@}3wxwS4cii{TYe)Sdq znMiGiQD;I~B0|;?QR4vvyHGANqZ_FiL&3p}X-%gK6GBDqg@xgq3DfAvU@j^k+fI<< zSBtcSeWm70iMGugzPjln@#~PrzfLpdx2u;4$&>lGt(7dNV%mrE7jyc$v1+|PQIgF7 zG9I5#?ktpHVo6N@?oL)rIFJ@%Gd%vz#=n3_u^ppPC%ZwZ@+1vzS^Z2DzpIEu)4yUOeaJ#z>^_4>Qb}4z|kBJ$5!D_s7S1f*R8g_Mhupwz?EYQvJmnEd|p@ z1D%5syN#iqo9e2hxvE0kaWS9g7i5&HT9gt-vG{DrZkrBKFT8Wz{~bbeV&jnnhKucBC3SR^He!iNk#1{E_T@&C8L`C`Kd z3tlP=z8FktKn1gE!(p>qk516sfEPFPllp#x?W?zjatCI?b(@QP^qzp$vSII@o(f;J zTJ5=V_R+b5ORKKCsZl1#`VkUJh%g)U6{@w|N#O)Rue;-2riXX1U$^1zAMwTZqGdU*Z(ttpWMn@f+j=W2JT7MfU^XB-jDcf5PCcXbvj zTmcLrO8+LDIiq&oNNV6Wa@hs9={-u(>km&M_ffYd#M z`?K607g^mSip;qEbx3L9e&vng+mW<|9CYr{#-Hz=dm1n!AE&##GTQi2>?3P;JMTTF z*?^lS<3*6!KxBRC)8-1%^*E~Ur+%vnZBUwA2B^0__acDp?|yC=L(WU!QPEI*Kmxa4 z1a&SF=W*J!yR#rZ_ZGcwCkcU=o?hLlGcjK`GaVdzD~>`^s_+u?swvRCRdG|&<~~Dl zJsQsR^i!F?AE=mgcUc6lm9Um;S$v^%GwJnp*#T<{Sg;XN7@)YOu1(>}K}488I7 zzRs=e_P4#RM?6llW16j2puV=&-+P$P_V7I75pxOcG^$?VbG`4mWXVa~XWsjdw+1Oh z;{Ipzz~~D=4F3XCT>u&D5ZeedGXUw4)S0SQ0&hwEJ6w! zW&C6Phyz)z)cEdmJ>Z_GO+r$@Hye@DDvC+6);3Z3JJk*x+dcg6}GUPv7R4c(1wo+3eDi{x)*XC2x&d3=EL zhR@@PIIxhY^m$ymdjIN|bnn4yq1lM0lG_b|MIoE)7W>cjba2oxd`_4EiGIPP!WQ#@ zIG+r0{?|2q<}U?cx9m00?BUDAx_Vzdb)10&6vODa(9vsAa~C>YJ@))HL@fF!#Cp?x z0j1>2q!y$x9AI}~`}?FLldrlN>nAyTovSTp3#bgKOe!L9PZ>3pzQHq z5;C0#b9X$T?4V2lRtkpY&P4J~VddmH+)~?Ke^-&I=!NsE+_!6$l~s^ZCE7x(Gb)L6 z?I75AgnMZTwi>*cC%p%YpPkXtPG3VhE4Jud-55j7{FOM*1q-45M~(~PxaWy&FuEiw zW-xk*om;06Rk=XYp-+*19B7b`zcZk`5N1ocAx;%L2;hJ;_jMz`O1p3;%`UHz?o z_&1=p`nlV?OR9Ox@`u=;O;m#T=DuB$>raQ#M_}*%y6O9S&_#+Ym33DQ_4!wJDpr2tL+F28rs2Q2?JGfscQ7XZ|`c| z+Mfp&`zANYm?;wTnev9}p6eX*xvpkKLF#_B^LdoNPR~@3v(iB$d12KxP{~m}gEema zsdklujjd?HIToMR3*O4a-K|-?Xp;;q3x@KMgZ?rzqWeQgjH9Cimd*KQ5>Sx_KbS6+ z95C@_{3WXvQfuv<+Wz$Y9B=>Bm1E%$zE%7wm+``T?&)*GlG0JUZ>cT!C5O6he^K6; zaJhAVfkE%QYTi#~`M`qfvl);c*tgd|48I_yWcXJ#$_G-BCln}E_5S3R={|xulk1;=~4O9I?A#sJI`r5=VgKd(8z8C{Ks$9UmPOy<%LQi|hV+k#FpJWRr{85sGy z)9!9hLrjPPijiV;Xt(z3ffTNv+3ervOs-7i(MFZ|Lf^5VT4==l-#HPO*3lRi6l4cu z*{nmkyjOQis_p8^khKj2N+EtOeteD6Vw1dK;6(K>W-AQzCG~^ibL`b|gI^pk7hy&z z_DLHyoLuzyXzV!n)LS7mDvONd%*e&+G`0-1LmAI4Bn3f}*-7v3;MS{kNB|uuaVR`q z;8rKi5FrgEiPu}axLyV7`bw#1Iy)-e|7?WaxR3#>26kKcs^e|NmljqMPxowd*iXb_ z6TFt(v{HAQi<>ldwkRihybxUG+0pCC7fLVhqricS3K^kFFS>CzeqIb66@PpdB*y*w zR{wy&wVT3hWLCx^6LibBG}8TtfPS$v8kZGWOv$#GW)NQjK#1D+jQ`H8<79NsBd4I= zfHiGdvWiO(($XPuH!6{)EiuStF#?<1bmH5l>NxXU#n1sJ1}?as6Fn~LyT^;nY4pdo z@YVBO&$c@+Ft5bcHx8*hR!pcISebSQwh@+;WI8uGQhU0l+vv`GlS`>29uJL`StXy- z^PRp8;?4rY9E}*Sv-3QA*TC$kd9GYJD$-9^irEFW4+7jpi;y{#N>RJM{dSjSm}D^ zO;wq8oegO;Rv;iQAG~rk+S*c}IS1jU12^#Ef6w-X<({Zi zd>`jv6xE)y+lJc4h3e_FTVVMCP@Jfq;0zy6m4H)JpMc4Wme__Z`Y>Xi3fSZSuRWN_{2c~dw6l_vNZ*?h z#y%8mLN>U0M4O4`E&7(qFqc*@SLe0?nAWMvb)%PZ8bm?@Je;V}2k`zQ2O}drymdX> zEM$x@oJOa;VDO)cviSEX7EDH3YUrGQ>fXz%{wT%=x3B&Is|(xY+^sD8`-}`!P*xio z-peFM^Oj(sFh1IJk6S6~-(;sBY;V0T8?He0U(75*zdZ8-7F@+T;APX9r5ftBt09t4 z0v3>^G5$N%3JClcoz2$D`=X;N6^zmC;Qe^Y2ogN;CX&Nq=nWf!DtBNA{AR3DYhHa# zJ(<%|0;%36{6+iqN=2+i0;%G5N)d%My!TfPFt+rl%fAjf~{eb5J7GB?hZ7V z9Hn8r81xg^-HkGG%LvoO>0^g9 zA@C;N(p}lB6%*mt3n!H*o_{$wEbX0qY6vC}ZZ6*ma>hbIY;;e#1 zO#HIXh3P%rKE`{%$!bFvyqzbp^@3v>5YK8uJM#1NyXk5*B-AFP?8kvcoBhhaaFRL- z6gcr-A*JB)s}_leQ$o;su|?SWebOmXH5L1pc8r2rfM=JBfVJpxRpDP&m!@B<4RNWF zG;Cfnl?ojdo*a}vk2vwU^qF`dwP{glN*20R@d4T6%G-`R$VFO!!yD$(n8-fH~6$iyZ@TMnMn)Ac{b>`pl~L{!pO%G;1zF zP5ox!|M5nGv@bL66U3Xxti}hg#*bmG0~xA2Pg`{#I)i()lVe-YqUYR{7d?9u7OxB`hyTYK9N{C2%Z9*tYm*IH;KH9xw1f3o4@L_(*}I_e0pMSW$nWq*7xJfleV*^)di`RtaWsQ=D8JllCc+Wcy#nob?YY*S36f4w;A%p#Kf?V z#u!dN5F=|6Dd5yi^xvslL$f@rN|N=HkT7pn=KC6C%3;7k8xL|eR{Y=QfzsWR^y)>1 z()XS*P&feLmZ8tKVC3yo1V$yHfCz<8VFz9<6xPx}4P=!xCT?0BCGxfKf-$)Lk4Rjl z#g%44Ks#{BgyOBpe*3Wdn~3fxmu|2o#2`Z6LX(+nid!i$kH0#HyU8=?^y!&#1W9zx3iD$2L%bd}w zcj1-Cw z1w512(s|PMRe>t_L$}&;aQaUvVLM&a0y`S&+XUWoW5$7R!Rga;b@jM{d7vBs_sdj0 z*ZQK8oizZv0WFi=hKm#*0p7nzG2y@L*K4{1A*iw6Z-73QEDX72e??&6Hj`mAuX0BG z$4Oqy$`UN26+OVes@hP4g9Kk%cVpsD-C6$0?mf#$e(>DCCFt(?Jj`oR&D|ERIW?79 zOdTZ1Q?~u>2yneEHrbCpzWFs)La*=fNO(Ktsxk_T81d6-@wJ*85nBk^Zv;+~Im4*w8(ZCq!`f6T!L`7Y>jm2R_N5&VC1bi_=cf7&W zcV5E_YP;gVMtj1^@@#Z_^`gt1jl{_+BK@C}>%!cyW6=MV{APlGSjl&Fp8FNGs!bC` z8bl_0UA_F&kftbb>DpmbT_fTw?>WbyNUWiyRo;a5w-20x{q_?ISo%Dhxn&M9zOzET zZ&W&K_YItshqM(m8$BBziJNX4i(R*mf#rCBVcSbsjTb|6J2`iw&|fuK*pr;F?dq&8 zr0?FI$%PW+EIK?qo>pgLeb-gRc=M$^6j`rh{vD7@6|uF2r|*0u1{hq&M6y0-9vR!a zQl7ydq5Zd=^zy<#`j`UHI835Tad{X4aSgyPG99Jv`MOlJ zbh-3nA~C*--8n^VU|x!ZsW(E^WpcRM4;T)J$M=RyXc4^%;pjX?V6lDESe9*fpJh&2 zF|?w#7sGI>_E6997)ZwbLok7%0+_fXRop%#w;qQi%0TlE19vv?XC^yFcxLtauz=wv z2?sGXgA8eB%#zQOZTScPLKKW|BDng$ck(?uhJ;7@NDS*M8s-3mdE#YdR1Z>7 z0>ca&qQzUGAudl_q{EbA|six(yBlA&0(emtT#jYugSYqtMH><|}gr zKb}t_TLWcgMXxWat;tJ`!1p<@~b z_D%8&lm1bZDld4o`Cy}v`77K>NtY*q1F*IQqvM)cs?B@oMKfvsH51xZ0FQUTe-a^Y zt@#HTT-SL738;PvqZk^<=UDtvM(iO)_|)CHauQ5LxT>w_oU%G_<2MQe3`i{x!QZb1 z!1VIVuPhOow_LuMQ&Nk1PS^_H2ZAKWuDRMP_7uyB3~BuZT_E-(_hJx8nj`Hh8YEuW zCgtQIYLLP|2Kw5zWz2}4o{qc}A9fTG5z$|qst?&X9?h}iS-Np1x7lG=0K*;!5a$gG z)~?%P=&fwlF?R7;x2;mvSXvD?q>!J2pu>eFLVzv~Slvi0o$oqfyEb#-0qf^huExOM z_tS8(Uo`DI1oYUbEe8)unHxO(?p6};7z*D@XsRn4D=pky>B7tv{3nZH&rRn(1{AcN z$3y(}Ab1K_4E0~Wo@6rMdOw%s<7#fj_ZW9KSX7|mQ$>#>!Z4~P`I6p4UaGuJLOMEG zrA>Uti*G>r;K)bAr5n?I{-$#BMi8WV^$|{HOX7$@wq@pQN7Wyb!Xp*OM(l`KZ7Ro) zcuMMS*9e3>N0{x0G=jo#G?OT1*t$8!7%7+4CE6b}@-`tZGdj3_5H(ecnTcBGVa`$v zLDifY%70lxQxqXN3<{C(4Wi?Wn1J^%WCek;cht)Re~6>Z?>(nx!!;@VgE^p=nCuanm@>UwI|IU*7)?q|B)o*fnm{qM-VXkF3WAfkY6TGr;Wmim>Gkk~Il zDh?q(Q~i|FH zYM7_&G5$IFFv_v%lzDn~>?9{yDu~+*dj39yc=DwvfP&^wDNJF%0kc7sQ68}|Jz)os5=;knEzYcn!cB?!|Fb48l8s6@6O zq79b>5Xsa~I0~1rP3}eaj#eZLQ zKx+>Q{lQ_jf{V|_n#zfYYXT~#N_dqhh)CX#z4k3_iNunHE_}tsTqo1Q=S+!tY-fsh z!!Kpp_d&D!I}#W%d6ar^$nK~%U+2?h`rjnVaoN#S3R@w^pU9dCD2N=6gxu1uh0guN z!z5xT(= z5QU+Mn&$e`wt3hMH@*Hw(aJQCRs!7bzjALbx1Xf7#}lk46TGh^3~e}4VtVU?L@@l%FTL-w<$FJ^WxK9C zRev9i?W0ETOkPB%_!{U~Xr`IFsj33RO+>>nSL!PZfyruWoDA&nSOEd6{d1OZaH}c? z4B%GpJqr-cSD-WsC3xO@$}Ne)B6kNvq7jmPlpsL9rVsnc;faRd^0%$oj=r5RAm^@P z=(}T?nVCsUxh2zsZDQW}9~qhV?Q|msxnVtaA}a!qA^@S)k1FW6RhFRIWl<5N>+Zj!quS)0~`W9Lo6aPgR*?1WX4WH}2|dUt-xfmFUzGVEow7W<8@P*{%lg zF?2^o+H~siXVcLk|Bi5w2Qenm1)gDO@ z@x~YZIZnptRZVNylJWOvo?~A=zRjL}Ahb9F&1r?jZUPusWX9l^mtHrd7PLR!j|Up8 z6Pkb*vN5??L4FZ(CcY0>tOhar`N?Wyjr{07?Gm8Wz^kHA*Pr|@bZ2qr{1pC5c72dmLyZccoJsV*t8=ci=-$gxiw?%HfOoh>|SKdLEP zr(@mm3xdh%%Z%`AIP2WH>~+>v??c22DYPgJ2N24xMT5zth(bPnt)Q^BLy7JZkvU^7XH{`Vi0o>=a^~DYfuyA+tfJ!D0h7VtY0gJl5bBWtxI`)apgYFo ztMpKNfnUOZukkfbCe!gBUv-KuaPr`?c=UV@YKCx(@d7#$bYd=6Oz{yUewKgwPdnZb zj;rBQwV%t|*xiw|(MY}?z1nQlSLHX3}j9G(`w1BQLe*iF-S zhc2`>g3C+Mro=gBOAsA1?446-qy>Y1^LTT-m<`{jNFd`wuUkJhrhjeCTeq&lwi3Jr zRZ-ua$zka4PK6&CZ8?VMsNrfVOGq}Iy4HOBW_SqVYV=Q58X4NcFq7&_dWa4p`$Dj^ zpV!vfe}?UrgR%ANhIcIaRqa}|lTEzt5(=l+Z=D%AOm4MZ_l}?E$GMY4r~|HHAPRg> zu-|uaqw89lc(Lf4t{XQF$5^F%+g=2HRx&#lsU?*s&&jd${LVP-`yZ)NrNtc`=o-2n zaE^}8cue(|7hN3+P?P~ZGJ;~(J2sgB@gOvc?RMaSJ&oz1l+ws@)$i{Q_9VO2*yY}j zNg*Vwtl*vwI(dyH5Q2djN%CA-8YM(hSmDZC&!@QSq#)t&o~me|i81)Fib5qMBt<-h zOXh^9bBa{jSjge3pG~SnAUD2lRI(l0V6LU3!mK8H^tRW5kq?5KyI_21VQo2cz~CM~ zW^jUPyuiMdw~Tl#e{Z3~_kj)t%Wr&G)Sl^#r~%F{=2<94vvQJzG&U~aOVM@31f(F8 zw6xZ0=q&Q(!sAjyxY{TKPI9;d!3vu>0A<1CkMl-Fd3nD=KgN)FV}2KdCJ71<M~M)_xdcSNM!@750OI1O(7*fJP*CtR%bDER+#rSH!47&L>FmvLn17*XrbP-<`_ zVgGr;V#TF=02mrc#aP@Ono+0 zR^CgUMVhs%uY{@U)w76Z+N!p3R$2uz8W*}}ml=AU#C_bny|!3x`CP7M>T`l(`!FK9 ztT3hu+M~s;W>ci2p zEGBM4V3*xVO~MFbysObtMqnK{&17kXN5npdtM`!hygFk2v9jX(aA)245BUZVcqV=Eru;O#92tHj|;6bgJ$@>oYt7{S$Cn&$N{-u?h5w7Z?BzHTkI_Plm7@`u4WNF@TAdowc=O7}C508%U*rTrh)weEIhF{t2e*so>qx}Pj zy`OJ;nCHv!5d(tn&ZRO6290g&n3x!1dYhKP+^NCOz@Q*8L#h0(Q0vvgnu-cxrFkHa zRSymjy7ZbWUw)wQk>Vy|Y^GY; ziBjt5COjdgMTDGO_$l#(O9Yf6%dyt1$r>J2M7qGM*tp^E`^>Y<1ImaLhR1&#sF?h> zh-6kB!CG^yy|q||Ff=?L8gaKx5@=S)ve_ZVOQ%O>%(n%HL$3rSJd|0rr^eczkwuG2 z^M?20GyPBP*dg?VCA`YO7P#<}Tsj_%*x_-b7ST%*st_ z{53i`2+%fO#tK^b_Rf8x`&VVrZ8SQ5&uT-_N_j1y7Ug(JS2h98wl0dIxt(uQ`fY~% z00@GFG1Zad(dKo>2mj@I^T%y44p{wgU{jRBXdc$Vk(TQ19f$oA$1nci?pfgX^>MF_ zKf`lT3KEx1^^kyjoZkvPLNX$Sv))wh<5{E5ziEj9R7h?R4SfeK8uZr9cZtib&X-%w z*9r-O4L5g%6Ml6px|w+jL&)Jog`B7{fXj4l{J*Z#Q%YT*C$zDd?IjZ*QM@XPdrjUlc=6poYF)WMAJeR1A!$51=(BS@p-E`84Mr2BmHq3>v#0 z15gSvh*Ypx+?3FAzc)Bn{x5J>{`*)fTA_ajwf&bjp3z(xnMfQ~z~tKwAb;-R4TqoH^4eRj^W3kE z3zc=jMn(y*ytThv^KL7b`A}j<-f-oEi^z!fips})ZfH2QbtlKM1wP)JLO>^}f5-lY z5Jo;Qgn|>Eu_7q+9BUKRJS+nI$F&!O7Lnr}pT{|Gr#+LZw>QhoyGTfM+ zkl(E{X3Y7;?N}j`8bPxiUj|j8GA1fv!0g74jHL8w0bMUC`P4L>gXV}@ydRejudjs) z!NX^z3_}Qh?#;ZtooYS48Jc3&0yb^iwCrFMKX+fp&K>HL`G%$lb1ULT7U8(suj|^D z=@@ZvFffA%we8rGDSmXu;iHUnKX1qhVH2s}X-)7d(T+S1Q!Md_0+6*`?-`m#t#-42 z%#=)hoBC$b`Cu^gocXuiALtH`kAr$dH@(~OaZUFe6$}AF^OOC<_n0>)llHb;KbG!V zZ?Zk6@3<#`XsWNn1xHa|32Jb3xzpDsYV1g?SEn6XC;&*A;iiLY4a=U}>@KjsbhiIG zb(;s1KMD`V0fiArKGo8GRqcf6D9fX4wE^X0`wKbt+;d14FQ`bx+~l&hb|f0*rBAAp=+-6VCT{ZLtfFR$!WOBm@pRAG9X)t$!IL?Ax{$ zWB2d>=4Vjuw3>LX%;$Yio)_Hg;Kj-cb00iJ22LitcHL%=_thrVYk^af;X{yuKRc7Q zgTm|bvLv4y|L#%kW((eHYf}Djvnbu9;nKL|WUpm;&31Os{?mpL42+QEx}j(+UhG&s z31UJ@c=nGTv8}M_z^5jpml>S;&bx-k+5+)rx!L-(_7KwK5c@OousD|vjg~zZ8Oc=XayrX+__o!HL z;-h0Uql3;%aW!BqIm%#;Je-N6h0DQz!Bp5vD|0bBd|O*KYm9MvduN^LS0Gpc*jDeI z?Bwr0+!Q%s{pCV!#P39zVecuK%CJng?Ja61@pK0N&Ff0B>pSzt-CaN1#{TBkX|*kR z_|3YoFqpU!%Rob#Td3=pHh6?uPgOo{<9N20YpZV^w>8@vlSM|*QNuw{Bei{HnUrq+ zq$NONkXHAx)*AmX0g-*Yv2ZB3TBmC2?T19&axFf5tXE?muS@M)UE|X*HoJqsAN8h> z&-CY&h~~x^(@I__A>oFedF&~uL_(Rd;akxOy+A*A;o*w?29q0c30YG3rY%D{y z?BW84!w!y*H$w=^dPZs^vlqZl7e3HEg)|!ZPE_d&gF3;33U-&oS!Soz+`;% z&v?Hnnqzf66z}d2k(eAzw>h2AZ~FZhh+4;Cb192n_WpcvK3}fEWKN$W)uZYF&|$=w zZMiz8rl9-##$rPa_{qs?$^;~S|1!C)2D7|5v3CDt3kxr)AZnDn9Vts7DLEUBq{iRnNK=hBGhZHJ-P z`#LO)-1-}gU=%o=U(R$jnD!j-Pn{ub1|QVZ8${i8i-b~QHbms^XIx5Dh{fqX3zNmO z=%vS<9@pmlJ|Yl0)9*IT)6XeiNNMcgG^xTPv&%c;yeOf(-ZpYpjg^Ap`n3n(ywhg! zkjVh^+4M;R7Z2(yS?J6CTmL#ev=)ZiRGQmlkkvfqtr>oV+`VN+HJ$ z6RyMw*GR)wErydMvk`e@twUgqjOQbhjE4h@_J(iTs@7{{Pt9V%ks+J* z5DGY+K148)lm2aznj%4a)-9d7{C_U^Y6xX*poApUXPZm^Q2m>kTq=JGSIWYu$OxHt|^i@b)Os7@q z-(~?wS{RzYgB0hD*^=e7ecCqSeIw=9g@!0sgyYDnn8kE%)*ve~en^B&HV^$=#>iRF z*9HPkwL*9G1Nl8=pm4=#`^YBnu%b>bF_XmRkXrN`IGBWmNY5GT>MNN_vo+omqMT7+ zKn_ZbA39{Y;5D|A4wqMj*Dlpqvzzb_FVZqf-eocSu?0D@RY*0icGQ)^CLU@ZR{G?K z+=el*B7*LepHt|p>S~4gZL*u5>nSm__}>TJGv+@=cDAWFGWLd*7t^Xcza)H2E-u%^ zjfj*X_!nt~0&e4u#)_a~j*=ISbH)v`k90=OBQ*Yzqge0dFYGZvfR8nfl*sOH;`Y5}s*;DgaZKXw$un@TaS*_N=0*I&vNSKJ>bBaAl z{sIDz{*ZR~8ft1WG_~*fZ5X#e{pqiORO*Nvhko3=3A0h7wvw`PAOJFi>F0H*q^h<& z7PNa_S<|;>o*e*(!ycKd?BW6kAj<${`Hom}I?T`}rKCjc{NuUlTFJk?D4VYGRwURT zHiG<)y+57)VwGHQ*X*tRMKpdV$>j&+`uRboa56+0RXz;W!^xR6j=`IX#I8k0JaW3x z@zLHojIGpe5*PlfhZm3SiSc72p3{w5THV?|Xz)lyK0aR_nzQhVN;+Yd7Ya+D15)Sb z6BW8w_h@2pPtZ`Bn0)642Gyq-Tj%Gy>yp4@%XmnhfPw)%vH=k368%vwK~3Jb03;6y zy~e|gm5wL57^&a~Yj_cuP*}uX*;oD*T5r%_dU``uG(Kn}0CD3&;&7=}RVW>ZhY#12 zw<3BOco=NLMl<8+cD#=}IwDWR%ghR&#*=CSe=21f1aH3d3eU*g1R0Nbp+r>;?`LEk zITN2;F$`@PtuCJsS@zQc7Rvz>zZa9>IBAILTHdhk9w?maZwi2EcJAu%4hXU_(`N<@ zB8vyB^*oY2`2}47Ue&l{KPQN_Jm(S?7HyiN?ED8)24;q#EtjNG8ma=H$aAb8H zZ`4<=FG(Pw@3v}m*PUaUDe2hqMgGR%vtRep%)*pah{zt6K-;gsg)F-SNZ_uz)a+(N z7v;ren}6xlOmvC)WZp^E`)(njHI;htc-%;jB^uPW*8t6#*;-CNN>|@^QM#5up0@_)eYQD0(A)6 zGtGHw{XubnF*iDVN|nav$5n}v{o3^y&81$m&1z?cUj!@qn1?Rl1d zdq5e3vg*Dfpwwd2SsApZWX8S9P*`ripQ7U%C3ccU^*~_T{)C{}@pz>kS^^J$lh~;? z^gRBX>p7$VQ(8)DB$uGWfLz*Uy$cM$ryGPa83E8}{ixNswP|8vgl}qi>`-<{;m-tK zKBF+Rl7c-RHz;Xo2R`2(?B9-32LM?J zf^YlI#{`mr!D8>jmwy{K`%^6PgL-aTv<=mhLcP1dV$a@eYG_`P=fw2#$DOO9(NQNkOPxu( z$$|_TFC#j-az+Ah5X$dqQ>8s(`+!z#Z2k2+3W~f^Ej0TAA*nFGOcT^xP_{^O7+E1F zcHQSgNkfs=IF=%xY!w$bc=r`^uE9vNQBJ;Zc854|(!znYiU^fkR>W#9&(fq=wiw4X zTyoDv=tr@gJ>4!|U}Vb^uYkh5!23!4(60m7NF?#E{em-SaEQ@z?Kfzc*HYlo?$&@5 zp36s69pJtcA|gS|D;5gV@o}YDpw4{5@|G{txM`*q3gb7z%E0zqu#cTjY|1T%A=&fQWcnmdr_WGB{#fL=gTl)RX|bQfev3OYojy0xI3JkZdJ`#WcF5qYGU zYErnH_+usP?I=|5HxT%Amj41^4t+dhKuX6-3~ZKTeuP=o-=Dk`dcN=@J(=ma6_$6P z2RJAhbJfyQri>e-u9(uKaI|K^55ImRSjN~P(O4{KIT=MkKJa&Xr@{~CVam20hzFOD z6`W>1m8~ZS-R@apvYImoCZN=vw<1Iq=f+Gstrd_kx$n`|zovS(3W-DQm&8dd46Hfw z*?#}OvfeT*uVvX94U!Qc#Gz48SQ2Fu}6+1?7>`=RVimd`l&xP*~LZ19&{j&gdg+q!0U z7&*_$iV_mH2^Y#WMK_b0-7yR$upc_$3_ zy%^?kNC#hgTVClEpk-|S)S%%9eqWbLWEY^Er+{rUAFwi5|*)jcXYSr)Xab#~lWN+x(vD=H4 ztoy+{mOD^z&_y*JlZtQ+D93iavW)eZPDr#pBqo_52!X!r{KL`^BV5%|$jh2I()^kw za?wDd%XFRCd5No67CYciDV}KL7?KNw{LnY{nL~u@*`x?Ha=fcsXXz(JmhDJO4+mC* zf#`(PLA1*BQx7dVv!_h|bjB~p%5j^v92^E9T0(;X!7K?wV|cnQuoTbN3LzPb&qG9C zLBG%0g8IIJyxi=n?$7ZK@}}~`FT^b_s{U4QP~RD(vB2id;b(mDkLTnCaH?8JlCM+LshSl6B|bt4xVo% zaeyX#4bI}k6t19QEA$iuEr;I8D?f?Iuh#k_A6MdFT^H)Dec4a5V{I(5&9?GT#BZe)$SMER-VM| zi+WDu8(lG0h%W_w?2<>IM5$&aNzW52y-z3b{6x1|n|ngY52y5Uq1h`-KuQXMCvM^a zI1NAUTB3ftKcOd-E|Og5h`Fzn2@22j$|6^Jy0WXz5*_`VM?%663REg2wN!(pX)q4h zFJ7xr;3+#^I47icE;y>!n}~#gCglElvB5rg#06CH*=fB`)uLRpM*46$CUCE1f))-$ zfRA5~d5!q1L?P{kEYS)D?P+rdVo+`|^J*s4b@-p7ES8Db_9>@-uh|?+JZKN6h?Wx%bi7=Gpb8+hTs0-Q#ex^QtPnJZZuSSk`R6@=x+L?b zCF<0rcxk=5K*{hp{fmG@KxII-gd9HFs}9A00Zze}j874H`oaMfyL z5^%n2KaT7iS<8*Sp8{Q_S$NY8OqFfu0omXE|CbBU{{Gan2QInIx(;RB5O5{yvSoypV!3&gR!9NdU`SU$d}k~}6nxa(%`$r9akWfbT2i>xa?K9dupw4S?ERE! z(o0+I$`p^sMkg3hoW=1-Sk@&pv&DJy=_3Z=1=j;iP3FUtIP&MaYYjA?7U3txdwXl% z-qBbkIK%0$Dq%ApF^LR}cu?e1i4U<&XiW#97B0J6NOF6d|A1nqqLw>}wKX37l~DT> zO3yA6B|8j|&CE{*#dU>irs?9xT=^%+}460QlgCmy59|kpQ}&lYLQ~#vD4@n z7oQ2eq6({F?aVjM%x(a~#Xy4N53DpFqrSK}lV*lNlhF^?>^lRxr~CBmY}usq(D8cq zxCt>6?#Jy1e(ys`J&?y8eWgy zf3;qx*WXRa?;9Hoq&N?tf3U9;T?z%TAblkq!)Ed;rC}_VBNNJSwd<=<8NaG;wvGUz zeGFX<=g}$^u2G8fzJgaqFKdshjbj6SwbRag*SnAqX{a9trqLE(icm@RXy$Aru6ku5 z`v;_2*g6)pnF!HQXs7diwRhjyZMzWXXs9omu zk{p)+BRD6A=n3TWnn-M|nwbIZ@HlPHf*bP9sDpRNKaShuc*mS?BJz3l-bjt&0lekn zAhb}b6k>I-fpaPx(L#juru7UVmoiHH;dV@P>?k`_xp4MgE*4YmaEbon(?|R?5|J(- zi$Jdzkx{(Ik7cK=Ll$B4W5140)N^*3P=A5x(6PIQ;xC5_y>mgX#R}yYi91A%^bc}` zF$o{{T13qxbD-HD#-=dmJy3^jYw+dBcgugnSo_ItE~sg|Z|~(r4PSF}^Pz;2*UI~x zdOj}be#(a9riEHVcN#{5ugzM%Vm4V93>n5qpQc&izvI;&-F~TcoH8?=y~uAKYT(;* z6r@`gw0Qgn&e8E{^R!5>F7QKuz+eBF&Jk*`3eAvf7$eIcP{^F&T!uRVkG=NY>b$47BwifT(;-`v5`^NGmT+sY8>FeO%8ELE=1N5y#|~r1 zipHrn;^I6n=LbDo<(;0~iji}R*waOu0D2Fk*v`-M8}h4)^5*@%?k7W$fTCpCBbwJq z-8(aWI4yyy!^RVihu#maf#DVIe2*&;uFu!)+o%=^ag3G-KhZre%I@AxH4hD{_4kKR zKhwx*4JG;WcVJxw(cf+H!mTzOjg@1al<{EmI^4qm>xPKf=C1ZFWq+2ekB$jx$hw$1Jgs)>G zA5VxQqvgHYPNNVv9<6@Iby4|1-EP*=CaUWg|GtCPfW%^ z`vuGnQ%akSP&mN63{(~spSKjE9`6#aInqD_BT`*wL!pYId#H(D>f@OB4g@2gvG|;9XRTDgZTCiL?M+AEk>*HZMHX0Tc=R2RG-)VeqxzGy$qdnni z>m>np+CCExeL~2RtB9R3(e|!|CyTCz{$W<+`y5`}1Ng^RDpL!~lkiSkp@i#JreHpmd8;bEB{q7}Bf8lN;eqne**F+FoXD`wi1n4`BBdQ(jQQssg zHTo|YNnyrC&;`Z~nz$fb4Ht`VUC@Y;_CmC|YPk4X%%e0ILj7q4W@nbCn8_n|F14XP zCKrni$tL3&|b$%T24LDr|#S_y0>g@}zxh(L;8*1Rqx30~1a7`cX!x5=lQ@5LA ze^y*(xsji~cR@Jf=#jUuFk=FT>XUrujlE`7KP-xKTEY0!mi4q5$AA~APhuGQ)8QX_ zwdeE@JsYzG<)njOn|7pUib6k=R3%0wP~7$=BplDw9gtbQ=o)F#YN}ww)=Mw>5WVo{ z7X_S+u*#!Lwc+qcEJQTNBuRD;K&1yMTAn-;$+(q9`wNoD<mVj@_O$j$NMLrl&RTzSlMBIj0g>khQL z8@2HcOZ)R}#cke;AK`IQhZ1FY1~$u|_7{@SHUFK%;yEGb2cv29WUL z!wCtOW!&b4|Gur^X!|pZtj`&Kf5A8W1>4&WEk+aA9~>_xo^H$7jI-7fD^+0=$1ICE?|xD;v1)NtG|%xsdSKAxL!Y23&G zd$Jeiqxp?8{2m0-^Oj=Q(Uxif{$vXsK92dJ8128|&uImEjzihmBkoL_%$f=}_DeFo z3%)coyQeZG*iNyfu4X>}f%+c38OdVPj3+F0uI9454%|LX%=$+T>D6=#l0kb5gP~kH z{uV0=*EO-S25U_5r6Utsm(%Fu_KM$k)U=?IrN(m0YaZHwieDtN5`R?;*Vn)(x!vo* zKnsne9q*fv8Sg9%$x2A9r=l~?`~CB0!1S8`Z#z3ll?aNm)3GTIcJz2@wg=CNplwSUsa{xV3Wv_EmyLKD_ARan)-_ZIm!3fb z=027VKIu#jb2DK~1ongGTbzqSnZ6MsY#d>XrAEDdtXQfGQZBIau$ETp#uBBT!}2r7 zL&8I;lwlSkeK(fK&#RdePL&(w7V()7;V#yewBkykSn%!-llE&2nBF`$($3 zTil#V>>N0fWePyKfjo&fv$1g9k3l~E%}*p~p4Fd*oY`LEEutbG*_O34nHv-u?bfA2 zN}!m{y>?~#p)Rci)gxY3SFj$N4~CU1=h7E|GrS(j2%1|#?%&l3 zxx~dR3C#lA)gUAK!Vv`@uz>5-Ks!T)&S6G=O8wkmIH`EwSGtpos&J#Sfmk&Z6if zsJMHxC_9ksMDGkTQDag)vq~CtrNWBu%O|qVHW1OmeQdsvsu~@12wB=O_V~PuPvh3I zZVskDko)6@@SmQ~+Tz+vIa<7sLax#mTWcg5DJeEPhPUH&mN+aifp0UTM3C2hs(`F& zO=z9f;dmququ7&rHvQ^Mi{-&$p!RFne#z1XGb@TwPacbQy;aE*z3BD%HmB3D{c-J1 z6vHaVmR7d`9)1^a>7MXx!z9}ia>WrLN=@eBT=TT(ikHbl+QZ@rpV)u7?1iEylcXBZ z-j0s%xb6)TfqE+1Ab+YHU* z1{+nbgC4GNCd;a2}kaRLNlULb0;&9&4mu6zLS^4%k)74{WX?|f<-|N3ETO09T2H%me;^FtmM>SeAQ>;F-ezja7j$_R2 zkNK_`%0J!)-{L_Gr=fq_{s7i3@g&-9NuJ3kBI>x)h&%;0=zZ_SHqTiLTP0=)@yc#1 z9EPA0b4e8d_SGO;7CMJy0xMJAJj?atZHvQw)&BB5B^jsjHGva!y z)nJg9O;xC{P1oSIE2|w9DJLW1bdel7En}ZXF|RBdDaHiOQ%&}(w83;?LE&#pkjuIk zVI;f9VL@_EYwn71oL$Y9Oc?4=EUS)a3nm;&Qh;+R+CfM?O7F z{HVSIGaRpOl^uUj)YJ7?jRFWa%ll`3#&^y(9*{m>O^=6{K=dTVVkf^ErcxJEJOY;}|ax9-ofUZ7gsfRyORT=`a~7bvB_9xT2E^M|GA~cri>KfQ89` zUWQmNkFV52*K}#p32haS6B3d|^GAgm9L_2UWA-j%|4leI;p)b1?+jRnNqI)A9Hq}a zq$vCBo}y{3T8A}*zR%nhK6JzW7eUfK+Vvr=p3hH4cWw5II#p?>uUDE?I#avCrKMM? z7Rtdq)B)UNNL~8GLO{)_MU6urCYO;U z%TsANR?q1Vit)qz_DBN&UlFY3*<32BQf(hE8)%VOjO$|yj^;IfKS=b5+!Ne6xe&Ul zK%Y3F5oajw8oYbx-gyAqC1q#-3{cIA5s#QOy--bIg-0mJxnZ#E*-sIr_U^ONOVI7$ zn3#^x4S(WP{z`IR8jqY7N3u_)4a8viM3M%t`l6i}1tjToYp{u>&h6!9&KI}K zb+x^JIF@UZQkCx$kB`R@I1iB%RJLrJ35d2wejJ`KE7#IOMLD_%ui6~*A#$3eMu|x( z=c(?_?4w~WijtsF&v4zcj3ne#iDYN1w!Q50cgkm^6Op#pY_hN0*NMk}J`t z|MOglqOp@F;oEb&LPA2)OPLh^%XNCGoEs`|F{`%o7PNMC0hI=y6TG%WNTH7@wUe9 zN6ajLz}eMaO2>y%2`PzXCMYjb9fwit4``C}f(N5Pw7RwF9y+y!caaE+D2SEeTB2R8 z`56_?sTQ@z)7;@;Mk-rz{*Ov42l-8$i?*wr z8vVtEg?V*^Znl~Mm*%i5X_f6M%OK^p%m=6@|7{1!OuKJU&DiM7Q@B12_g8!U*<2&z zN3$4%yF8;PrP{nhgS%T^&pIu^g!Fe)i7`7Jqs}W|alE z>p(nN^P0=syO@OYF7?;RYEtK@vU zQ<1koIVyKpRkjas5p%k8r2VC*XlY0hLeNdn{dEL{$K7&0x4!W`g3+;N!)O}=a7o)P zWN-LlRzaHOg@bX*3^nbp=eJeHNA=Em@mAxL$*(HN%gLHWh>1}u+}6QdN2O+~Qb(DH zx-=_G;S!{B3YYBBprQRAL!EqT2!*5((L+m#4%c;TS{x~Dj)sQ#QFrzI0^asMdU`o@ ztd_@=Pz=Gs^D(4dy-4t$Fs^}xcGW$137&3I*xltNZs$vEI+6m>`t4sp@>8`uBd(K9 z>|P}Sye~aUf_ol;m#257R^IxnR7fqF!6Ho74oPFL$L82PXc{BwnV1N}a** zG9oL$ZHYRYt_qpv^>WDPr`2HR_L|Jy=|dZdFp;AD;|+->4qj$5SD=b-G;gDVn-?>r zk*jEoOs@| zfbui=pMNgz9vp`8@Rmn>D$vFV(OY5gGUavG2p+p&%Tkmm&Zy;?x;6lEl?MN4@Mfuz z*cmR%zwn60@x0zs*&RIPxBHxo)wvbddVa9WkI6IvMU9t~^YygF9C89fJXO<;j!jCc z*O}N&E`P zq8R-k0@5sM7uFrZSP7Z;v&NUBAOHJkxUXz2OA_6QD*1djjbFQP&b8xcyCMbsU&PcK zEYd*&fJBl%KZtqrx6j~SalXx{R|X|aZ1KoG3EtF^ZG#G{|I>y4d#qUk0J`0}UURWS zFjJC~>+eOHqs;l!a@!eG!fK*d^Y{OPqWNDG6aaUk2EbKqGiSA((b(}}yr8GN-l?5G z3P1pzir{hF=kfX*c3Yr=Lf(J6{`V7pDv&dj_2|)gw@}I6kEbn(jYj9U=PjBq3M;S} z^gJK+^?w*d@w=POWhDL;%zt{tbOv1-vWhx_><_|AnxxUkueDVh9Jhj z*tLB{rjL5O(B>fy9C*`0O?Ni9~2kRyq+)8=l4#L zI8&kW8;0J_5eN#ow9xkek{z%inO$vBI4l=JlQ4>cSN;rGm5BWp zIOZPWt6|^~;!sjE!Fe;xn5@58U4cwM5d0Sx!aB|c@9n*(a(IRKPoMwd&DJ5=dxo*VD%?D$t1I&B8zh3l~X_d6e;|03aXh_N&EhIR(G zpgaaLZzUJ#eSCbhuQsr1gR;K-cih>3$DQZQnm$@wUM{Sz&J7L$(beIk^sg0$19lyD zf>T7A7Cs5nc&@Yx6-}ivD*I0(T=IWstuNT*tN+7;yB#hx0s;o1T1d}i1o?#0{~_uA z&Ve2hpc{0)Nysk&bgEcmJV$Is`9-AU#!Pdi+95+j(o7nD)^9}p8C;tZ04E-mBG8i4 zm;d}Z*m&#_F=^RgxZN-3x)bL!w8Ky`>#pW@)b-{it~KZsapPzgZZiTKcF^v_)GIp? z(Ywh>MYC_;#NFJQpw%M89+BHt(A;_c5wzYrU~$aKME!=*(kh_kdWT-E2+=mz@y;{ zV9T`{%>R5{2nJ3IXd23T`P=B59m=E!14vawZkS0cl5#k)4WSM|_x-q-T7R=&Cf5H- zo|Il(5eE$~ax>KsIXM>kWp#2-8h0!4W+JyCuhp^R?PehbR)$ypES0Q63L84>-l&AF zBvnSHnqjK*$PRT1GYAdxeMslxRMo}_>Fl(@f8mbO8=)wlkv&B1Zs=H>k$NfN`zMf7 ze=o)dWvudUn%=CkmDdhR5@v-Ruku#ejF%%!-;}bsC%pZ#0NA?pPf)UlP~yb5x~)JM zr9MLE>805Vm=w>sIP(E{$AZ;rXXPSuFOwYJHzQ6@V~5@=VL+Oj3$VIb&{$oBPL!7~D_%>A(NrL@{pLz7;@$1mh>|M~6Y9})O%2mM8w z&P-9%U>j1%p)fbQozSpxaylJIZw%C;7Ip5J_7~RC>VwEmn14mTQE8vS+knAaR%|(E zM(S68pAIH5mi%yYyb#{~q?Iy?kxg#Lbu3BHU3<8YSqC5Vc*!Gs#0s(c^NsMpBs&}I zaeUEFXqC5&7&L{5`ejr6AC`E4Vb}NMGFu7hA@$2;t}C#2hizx~I8F?e2ilpaK#njqEU-&_sT3iI`n{#C z8Wzidd|=P%---RKsyVIyz>qs(^hPTjF#C<6E5_8!LUUBA{X=p{a&ia z_V#WsD-d5&G^EVUuYA{1Z*@3RJ#?j5Rh0r%#i+WXC@jorEyYSSHa@dJJ?~89K!`VK zo-WMKDXqm)-aVPFCP1soqm=CroiyBZoI;{}Fa8v;e?OPqi`n|-wlF(W0e zi42sATA>_%I9%as9jcp0YW-zlu2@5EEmrz`xv2fn=bil%)Z2i16*ZM)fwEn4@{Q`c zfcR-1Ig5?Odi_jj^_syz{PelHnp2#^E2TFdY!mKeqj6|mnsEMfacH87i_RZ1p;UK^&7*&|*m z>W%^D;lHZNmhP`&6Z`WbEG!g(8g=c&K)x{8)DmAGZ+S)eW+}l*f@j7kBL1c!Y>{T4 znHw5xLCN~XYaXK=bv5#4`nfoOWA29Jwmeidk84%R0xvK7?SFNkiw(EWr=~Ri7a0CO z<_H|oU#0xn@SE}*9bnsv1gOE*+S<9df`IsoUk95>(LjIGH9SVhhwI+*y*(3K7-e~X zmh{mJkgGXYS439SD{sLb8{D0R7hxP(E-L9 z?&Rd;YH>4#^1rNt3djd1NAPC&1xt?9mA(&Wmq+unhZXa&Nt$okYm?U#Di$ydQ;Apv z2P}dkr0c*pk_U8@OwKxxHL=jV#Pfp#$dK&q>-$k&uG41;(vfiIcq7g$8b5E|s^J__ zWKBi&u)9E4*=&yYA2Blg)oTj#Ds!OkA8$({{J^9I|IwUa5 z+sL#oL|*;ia@qvXFD&TZG{Y8>D^ON^J18dTtK|bo@%P8hyi-7CLzm!c2!K0#dIr6A zr_~+BCf1>Avk&EYL0FqgAZ?`+E|-=jZ1(mm`-qL#6Tq6VF+H?5*Z+geW0d{~BpVt*x!y2&Zii0mxKRI6SQnZilIRI}2Pde-G%FB`u56f3^*k zpSJ>V3U=6hD*LaS0gy!qf@g(kYw_hYHK{{4nmlUq!mIWnsfxRo)LqsN5UTv^V+oy; zWJDx$o3=#E%*cOleu5u9?CkC8kES^RM&$*y5w%``Ke*l4B4+N-ChWhHf9%{cUMo>^ zme%m5&k3F9QbMA1?}2w@&y&(xPy#vBs79tB zF-b`#fTloLS6vrZ_4iV0os1StZeCvHK}L;!1Ft7}q8Hkbqk@^GCFClm;~R_juYmc< zH^SugWcL7dM3i5X-1>zcoi**)=)in-GMv^#RzC#&G%rQ(zAGI-u zceT1XoZm{kfWxk{%Ik&_KAmaI%+5YKDxV3cbkP3e!v0k|e)W)^X&Q%6xJXF8K+O(7 z1t7~c-SY5fL(hCZeu^vKQYXk}#Hy zhm#CP)9R>bXu1JX8c}_H=i^sANnr0tK^=nPFeB(kY| zFwB#acl#X#B8G;Kja80*#-(c3;;!ZOrUf6n+P#|YCSxjqa*ct|YK6?HONBEXZ?q1; zXVUotrWUnIPHyz>e%u-fti}1no$q{S`uF&7a;&De_X%7BiD=I!ksaB@#992TxKH)< z^$4@G>{~W6AItykm`UeQLN0}=nXq_2alw>1y+R=B_l1Lum?0SGk1X;k<)oyLU+0E? z4Iz}3IEv}fX@slGUu}VZ{D)WNKMucN7Lu8bhLggA!H)061#IfZY@Dxg>wIG)S0olQ zTwh-w02>CSw(e?U!KyuUtU27`yKV-V+HStzcj8hXdE|Qj@A3FQu8JozFdxPjNs(8q z^%nagFQd-9h4QJ93kzzNOSSLCf`SCZ=rCnNqoTTM&6Su8?wAr1lOHqQ?UnfcrT%%l zQfkRJ>?m_4cEU9{e0&0fg8YVumQF_TVb#O60XLeiedp7l!=Ob)Uf;kcsHZrL<-0rK z(C|o6V`K7q>(vk9!V~|}VF0yLpl_(!Ls4N7Vjln-@UNXQ0_aHa(i<$_Zv%nYs9nfP z8HVt6{ZgETZ&$c? zITQk3>=j)4?4-CVc*$(=XnMnzkYd#`Vg2?M{%+pmzZb6We=N=EyKOV?FJuk1T>3TY zyjL~+Y5Vi7|9bKR0$4=g%%7kKH9CU43cARNk3};||C(92&)`YEzMWti>}5&+QqDr; zdSOv=c*RcB?r+R?z&Qtuls$PSp?mYXH-;c^gn;?ILZOJubLG?ZtX z?%m5>SQPdBzwez7%f0t`=9!u2%*^R?CZuJn_8$EUrKqS#9*;+1VPXG5?^3>}P(|`6 zR3VB8IW%J^EG$w;h!h$c`memx|5B%{9o7)A4gu)F5`@4ZhJeQ-6%`fQ`U>vpLk!%% z&|H3gfz3-qL_`qR{slM&AN_kE5Ts3#r>ICp1%(QO7YaW#{MFwxTL<4Nd_i}}#Kc4!F8~aI=b>0j z2zV;;n8Mrp-+o329V^1lK>dH7h%wfvqy$y()=r*~5asPj|5wJb9|-;FTfj3ZDM`^W z(aO%sJ|yqOI$`gX?z=)8Ur^xv)6*1u@c$_U{&9g61YN6EEj{_fBkJG3ufG5O2W4hv z{$tD@0%h~aYI>~tKy{6-ueMP&^-b1t?e*lEwe&#q*ekY)x<=PiSV*Y06z;WWAVQTY zRnjAm+^^xohiUfgIoi2%m%_q=meK>k^UvI84PA2ag}UXI8?|-YHZ5ATxU8kUpiqSc zg(gpi_*ttxg@vZMHDq5*tWBGnU!btaa7892C_Fk!1v$C$(1x2sEV2cKDk?1Wu2nxm z@7hI>sAGB}ZR-HN?uB}_QnZnXB)i7+e zYuD17Z@!|Fh7LAn@TZ@CHYMPJUftVnJ9R9lU97Ir(a}Q56%`e!%*-rf5CeJe&=xp| z@^3PYi~*Pg8l!^;b$B;lX4iek`p@`*FMr*-byfTJ?bM=qGc|ACOii0M(XL&)O~LBs zz_t7T^^>{F&&TWG&?_Cl8BtMDy8phrb>8`BYxeA4Z4Em3XZchAj*!Pnz4 zI>NQcgvyGj94AkHfeLc-jBfbPiK9UgG0}=lidRT@xC*jz6jDqV{O1fPOG~ z>sI);$-y4AyljjPyJUsHf*4yk3OdP zu|ItGPrXa9pT7qJ;eSuF<+mCV5~?e&xKxK9-d+zs{Fou^$jHd@A2`H!5E$}Qs2op$ z5+t*B;+l7$LX|Lu=%U2#Y8{=TSNF`+yxdI+4+%A*zH8SmeKYwx6OyjI_9|U^$(1Vd z;KKXQYbX!&F8`nJV-4-m<0xHl!MR$!dX4-UQV4s)QTiE@P^Br|Yi0N-bJ6_iaLB zPCrL8XU_Up1@AHg`U^jpI~2za8q~LW+p*)&GW-bs=bd-9PB`H>efrrKw#FigX-`pp zfvR_FuSTcz*S4SMYTcyCrLL?61*+1qwVIqZP%GbrW-U@EZmuCAN;&ap)$P|qG1aR` z5#h?;nWoJ@%+!X@zE@$6S1>h@6cj49PE9o&aiWr1H&qzIYhJ$6m#@|8_r6lvlGWZe zi{S?>BI05dlTux|sk_XIc}N6C1pVTD>ZFIE#q%e>h@IKci%%nq4YmsPXCS} z{G%p3+!8vpZ)=v(6)RTi&9~ku!)zRi7xW-a?57|=uFc=AtG9olyLU~|4cos~YEg#5 zRX!+uTg1XDPk{=G;|N?=xc9w3=>yIGeSv!Q?4hnlbT&5(cmLn~1R3!6Z9|Sa(F8h{=#t_?}jtRR( z9*?5pE310<_KI&-Un<=HTqU(>X3tluS4*+Asw%!w9n~3dtlHgjkq*1&9EC?kmb~+U z;924O{{idg09(7luR_I&thdn6Fun51YudDFvsvV@8ad0@L3Q>wRNmiS`Ww0n*yP_e z1_xvR_E8dS+qO;To;OYxj=NOPJ^!K{!yj;feivz%HeI`{0R+$|pLkejoprjZRja1; z8#XFCCr8H~+e6Ph^SFBVI@YYTt|{7J9lSm9HJyF-8D;LdI*0Ppjn%hJckTM?uGZ_X zy=06Y!l!R>?|Il^t<i{|tQ?sh7c4?zVrw>+a!`c$oNlAr89z|ELqH5hcD7sp*Jm7znrz1{Ohw&GhfSH$; zq1{fhaf2w9h z<~cGlTtEEqv%dWDYqe<6Onp!6^OyKM_?b^X`&_4;c9uqrJWaRV=2d#);q~8CFeLQq zd5rD7V~**u58eb{;h}QG5uJ6y3B5IP#K|RaNmaB^yG}%=dU1d)#HQR=QH)DH17)!W5>ckTB(V z@{M;5RF6bPl&M*3^h4HaMTUeaI%HokP>Zq9OH@d>SyV}ZR9-=QmYJEYci)+$_U+ng z*hxb*b?UTzssjUvKW;p1G&KIM;HH3J>t7(GzV)~dBj)Qa=Gt}70%O{TQ32_B`zq`1 z;Mzsd5-FZM`?l-a<9X^+2LlD4fySGc2h-=BC+ZPXn_p01Rt?4hV)B1S#uytLYjGJn zckC=zNx`$Y@*UB&vuU4yp7x8qn;WD1#I-g*JI4gXnmxN}!{zm0!PSzET7a9z1^J+&NnifPn$&0nf@AAeV3Wrbk@ zCcY(5vI&?J#zA2{Aj;LR@tsBJ6n^pP$Q{Z$Ah6&U!ol{BzX0bt~O)!!6~y;<86^o0>G~BVBgcMH)PK zpzgl=zJ1mw>yme3KjLoW3Ls&vd*9bxW!i}?E3L;J`eLv67XNysdm7ik$P$LvxiFR8 zquxDDd$j9|D_kF?``>$ox%0;>fyMwX0^gL5A>>boC%7>%0>%$c2~>RR{rc-%>pvzY zW*?ZjXMO9J*DeA{@7}%Cwrv~Dm@!K?+<1#NZro_N=D*+wK`% zDpHZBP|?XrYB;Qq^3wO}_q(3c_L;w1Txe43ChBnOMXEcvmo|O-i+26K%mmLmeU4UQ zi-zWLv*f9_mAi9~A}hzK=~+Y7qd( zYaLwZiwcTEX51R06`nEYa)NZ?NawJz(Tpz%RT{ z@iMSmA)z6P^x>nyGt>!$gNner#feCPjc?%@hoiV22(S3o4}Sma5GXqXf4#kOTVO$v z$f#4Nj>^i)*0i6e?}OZN#kxANhZ;sCYi`a)y_`N*5h0=GR$DWyk}gWc=l__$`O5*}+-)pyf>SAohhlD;p@#+o^6mI>PJ+qW^| z`Q=yj)z{xx`)uSR zkL;#_1N*B{!-h8IU+4a2%r}YxU&e|t5X3+HhHR9f|9FL(OYl6 zt=C?EbDy;VoLNKdJG8U0{rKZlrKP0_rZi9qAx^W%V=hdo)8{FFZ)O?#=ANlsx28g( zBDM9$*-Bfy+8d`+RHRK`{j9`RO-!qeFbg40Tf9W z7p>IlcfKr*IYq?J%~MkQ7K*D=!(4zv!$MV~XBQLJU_ky#0T#LGd%X!GLPM3gVT;0| zBh~Sa%T%@VVOsy`6l)$Wd1O+85X{k%hebvzW5X70{c)DkSFBSgS*}qoM1-ly*(WI~ zG2Y^2apPM5=?|)P+!3nLt%D*eSJIxPE4BRDcTJn_cm>?hYV_=?xLVbeyC+?{eqXB1 zU;m0H@ z`m-*&=mK@>*g=&mRZ?EQS0G>xAY#{CbEPseGBjn%j~ac-2sLipQ0aR!^!=0{^u?E7 z7ZXFTG7B6)Y-<00ebugA8&jw(U%pabeEF4@En8l)?jgKb>8O`qfI_NBAAIn!3FN1r zahmGat7}5-Bab|;nX_iwbBz1MKF90C6Hic`I(3wqnyMKyXX~SnK2=Um*+grMqifgB z##CYPWBe%4KKbNx+nX>OjGRdET&Lliqv( z1Dk)}alxQ8Y0}6pef06CTD5AmDp#&#%+jl`zNvO?+gjKKOdD%w^yral-mIx=)Tm+4 zbnVhv_uPGlF=iyDb^G?6+PrzoK6B)Y=NUJJvD5DU3gfO(qq>F;9c)&M%JG#ofBph}`swE; z*gBZuR($4}V@%*DPOfg96ut858%j;xZgF@B$nU)Uo~C^NgW+}hW{!LIJVwVI*UPNA z&`>P4pMUR?5-{L^mefX{7QfjD9|6|RXTadn2 zi=UdP^fen*tz&D|KB2qeDBhEO%Xqi^FslqLfc6m++w#mICQxT@PF3AOy%bx!x^j1= zY1`B}+BWSs>))gWn3s@H)jqzfS(sz0CMj+8Ms4|Ws*<|2R%E3(t$yQEuhP{KrhTBg z?*;Z6f2}q1&}Ov*a?4GMij36GUAq()8>a#N`|0ST zy6eiTt~2Hd0!}titcS62v8s}stV(flmW`5l8CRM#X>7!v%{FMz0Ns1f9rkV@n+6T) z853~KF-Pm-i?1+kFo>GAK`Ia2f49YTAxI*y!psjHJVJ zcERUA#*v%0SE)08SN%b~l+y1Qt$OoQh3|vdJSxb}wU`&&mvEP|jDXY&3)LSFy<)AR z0rpx6!?pHr%qpD(RS6B9iEsCpCQ}qV-vIJ3BbHidH zrHC*ISGOXM>JIFw!>&Bj5Cx z3WJXI-mh;Tbw9G3o_p>^+n9R@O8@9%PZV2PymJF#XMe!VqfClV zNH9Uqtvwib_A|oGh~dMGFtbMxY)~TMGI{qs_uE+6>-Fo`*HceDs%A}_Sh5(H1%$rg zBTmw|3oq4g#Y{2#u6C_jI=o|hB_<@8G7sjx=dnGMoSanh?se+cQQ`EN3JEDRp$#|A zoSYnUJ?-A@2-{m-x^&Vt*W9SWLT|=TnE6qohU?~=Z%}kplo9d7=FN5NF+J4d=%aMS z71x;ch%uzpu3bEaL=ndm79MU%o)Qy@!1tDvIw>leHOKv|&?jR+n7QNjTMYhbY3XX! zvZea=J;B^^!3z|J&%u`{Gx-hUfo1ULsng0ZGSsKtVJ8jI?YG}zb*$Z1E!D4IA8p%~ zYJ!CuAZ?Mnh;n52ZsvvubHdyL!?71$V)zk!!d}Dm^{AtcEMZ#e*RN-c6VFrUk41|$ zW5!Iwg|vOuRhJvX!+k;vs#dLLmdEE`cu5aE^tk0N1IG0m)HfKzw8h26T88g|1N+%} zw82Rx`~efE%wRl~D#h8j5SpMZjDfgkm@DAmTS#C;9iDRqA$lK_=x*-k)6ub~pL)z< zP7xT{W4P17_+57S)fRV36DcXR1;aXc&;aG-<|!dDL5&+XR#tYF#f-re9@eU*7A;<4 z3@z{&H|_#mcIibng3X&Yt5vI3MteGU?x^uMPcVxeu)tGh)RZ|(mn|z6@Vo6cLgWq?~U8FrrSDEEMu3l|bYu7?y@s$*6 zmgP{T^y{I>gi0#R%C=!gCRR4jBWO*P&TSMzQkuvJYZLmk<@=dsUJnEtUMW`f1|O%S zHq8}PHPP@&VRnwHbZV_yy}D}Qy)S6vS3jHOleuVq{>f@MdVtaDtZh4$fO7NL&L(7I zv0d}_7n0$OiqTZo@Yu2E8SZ)U#g_#?lAV*StjsLi`|xSxsaUdjsVU)n1rXN7o;~Td z--)?qeJom38taZM$~wO8+ADST*=O3`zzT{osbAj{)uwH0-Fxo?wqMHv=D@$OHbPTK z3W^Yj(vf{k*6~3D`{|;KuP|X5_t*aYPE@nz&5U2G6dPweY1bpVs7a$nij0ahL&xUL zoAvhF@7Y)wAMLVdx22{Ue+=y)UiPAkFE?DvTtI(tsXe?yd*k!4Qs?F6TKgCtuD<#P zQ?LT3$jAs&tU~voH57O__Mfw=e)G+DLWx9y#-Vr%kBBf_iS>E@{NL@K?|;CTY}WVP zdzaBTeuIbLU!iT}dwBbuNv0S=i3pzP*RQY14d94|4eDFsDEMUJ%7NwRQ_r-y2e)+S z&|Z%}{*Y?csA2R7?-LYG{rjJ&i!Qp{l$Y=Z!E$IJP(qzpXb>?>>HGV0jKaYVgZ5$4 zU?k9_WM*XUvmwzbeVMgP*#+6E8=9!*5!K}t{z7zQOnp<9{hqr;3-h+xX2I2#Btru=fe)G2*o^V<2}Znp>#}hu zX#24Q4jw$rl6QRg;m1Zy$Bi3nNi#s0@utB!!>mF#-gJuw4?bBZ4?jf<7ye;PESet} z0fg0`f1a*^gNEtWTkf#-VNzfqZ@=SiojiQBC8xkz17c-tr;Z+F@E>>4WtQZFL?39_ z4sYMivRt}(<`Xw-l8iu%hn+mi#!CzrCcD`A001BWNklhap#@c4)y%;mh$k3r9 z_1karjd2`2c!0kC`Wu~j*7-ILglLdIV{m2D#!c?4ZGMF&nd;T58M5E9WlNbh z%GBl2&@gTIxG0xm_;vR-DcG|x}!Qje7zct8Eme;Bz(Zd z*0(@h^U^a+_(YH;aS;S`{b%26$Mkt6F0wom5)rQ5i&iLo^(NIgri-}@BUlkby7_yU z8sC=x+;?D()ylFf=H;tW{n|$8aW6*mjjL77W4f3yy79}OG-K=p&A8xJEq(4?MORHS zt+Y`EgvPvl%^m-^ei=7G>C4tCszw#n?A2B4KAxgk7vHI0#!k>555BCT9Ithd_p3YP zIOSz#>DTKX)Qk&n)AS1_2xhBl$2Ll6QqMcKq9TirYI@#qV4(O+>tW1mb8+P(3I^&FUO9UVU8RFM=@7}F3W6svlp(8YO*eKItBWN~j+Sv9d zdlV(rRaaha0s@Q%$%9TBHd4R*GQ*e$ye6Opi~)vVz<^_Y4?#lHPge zJ!{_8aeeW-TD7XW?6QlE&OG_#v(_%S4eJ^Lr0+8bo>+xZ3NSBky#BJzIp<7MwxOKB z^Mt|}n3ucmzTf8TrklMdrG4}5cN#Q!n2ig(2%dw!IT(*VWuz%6&pzh@4IVN=XP$MQ z2}q}%I$9|ywQMZF7|)df15VPbuf1XY;5CB_-<4NhtCNO}vgZ~qTx0?&nOjdfd6ZqB zH}7{7urC;Uk-?6-<1V_?=FT5~!o(t|b?MUC{*E}Ji(0lUo50Ay@j#!zV%&x2n=m?Y z;=9E#K3VtN`+za4mtW?cSL!)+JJwZ4MtXT7Uep*o0lPBp1g!!kkl>*K4l5QG*8$HyZQDAB)tqNn=ZX z#~z1<-FVZjw%6_{Rt{l_A2{eFn>*l!#|@SySAZY$NKCOSn>KB+_wk1<_amdCl$@Ms ziLQ3-+*K}ZLa5t0d!dDK)Htf6svXhJ6n3r;KA|&&V(k2NvElT?@4Zs3EaV7ZY&?3PI^B1b>JRR%_$Cc3%)!Dgiq|oC{*U`#)Gz1UWH=TD z;kr+zX!`lL>X(ae*Dn{`svUC|*>i+Qta|lhO+Dj!ZTNDk!Xm;{r+*J+tX!`-*F2!< z7v84XSKlw_XIM;>Qm4)_8Uw9ZaM!cuAw&|tfQ3xeIk`qBcFbC!=@;B;eJ^|F9W>9X zH@LS6qbM`+?5RKWcon4W)$eyat(jvdXx4?dD|7u;MO91QSD+8rVd+KIWlVImI(0f+ z7mhtoZ@u}dDdP#F;2sLCci(x_@M)*c9RtoK?8*9d>#b2-x_t}llKpkY8Dq?1iJ${M z9)0Q=TDx|gP9HPclsEoLBi}XxeP?XAqF#R4#l~|Hr#xuzaKlN@KKFuo#awv7c_q9P z_$xmzPuE?0qsETA#ONK~aA%)8R@Yo}gS~6pHeLlkc<74DFEL^Ci6@^iUK9HC{PQoX zUcI`O9L9_S`eizF>Qg zeFrYXD-gkzf?}71N6$R-yrQF{bpH8gD>O8`IMB|j*njM46jT^97A#n3aqo=x+Urof z7Md4gT;*7MM=Yt7AAg#vzWoNsI#sR^SbUUe{j z_0>1boAA7I&$f0;M-%*Zs32e>J`0S=N28DXs9SLUoq&jOYr^#JECl{_%KOb4cG}4_ zvW^B2IEeXNkh4Xr3U;b>R812?f6iI0>S2}CA*!}DJvC>I(u;B}2~n+xcr}ZxYHiQUeO-td>{M#y<4$W3~Z+_dWMKU>X=S zy=)9J$g;7nx%LKQY?m(ey7pjQhEZ+PrnOR1QcC8Ejf7FSb#=oA`>o|66^Lo%90?hp7=$XcD?WqF)jDzDbv+r+-N1WZLZqK zcG2Ed8_o4M>>%7t_i4NsaYrX7%9B@MF{JTL8>s0y!^~X@hKE8QTc`c1-3yi~W6eh8 zrDxi8vIo~c>3GFdOIAd5q*w3`39f3GrmbZ%K%AcNf*zXle$YQUYevDN3>N^$HNr% z;kTH>EG9KSCs#$;IcBBin1lJZKdqe$mzx%y7eMn5(^k>Kx_j)gC$(U~0zpjfx%+n8 zE4bLB5ys;G&_j=D(gz>fb?Upqd&5-k-J5Qg2s`k{kJMo=q5Q$^hc*4y#CMEflPsrW zr^7Yp*SRLFAc+3>!%teeY`F<`wDsnj6Lsbpr`f&-4}0TQLX3gP%FebJS2}0iJx$$Z%a-Z#E3PrG3@lCTPxcK=KUT(srWg|_>VM_7y$eNvzO$R7oP7$Fv=SlKa@!pth}=RfcRS!&Tr&zUnhYY-9 zPCr|z+fub=?OKr_Ywfyq`sJ7D<_1>1dUdmA@(i)8SZ0|sZ$G<*q7Y9T)+lfRAJQ)U zI|Ux~xrg;0w`8pKJWrdhaG!F^_#51%l27LF)YHzgb;ffQDeMJjg~aXlfd?P4cZJ@( z@chf_-K(crN@~@rY2$Zo;*z^$$uiBDIm;{R%K{Azp$>pm~PKv-n>{?bdY z>g%t+HRbHaO`G+^6Hn{8=bkhg2~G3W8NKq#>w53q_Z1xzqjl@o>)m%J*&4@7$GsO8 zYGB8hDTI6AdIv3|xVf_*#s2~Gr=NaS8`f_y*M3|VeQ|@U>z$u4+ehoxZ77Lrboa}A z0%ng#tKa@YHG6hZlhFgTea8GUIEAx2!NH3jdCjb!)sO6;CT9$_Ebf^bQ?-58?^^TT zSIXYF%`)|Zlef*7uf>nNW_3`mlEoe6Dau7cFU(2_(C{AGm1e?X?(Q`2Iicy9%HEP{ zR!zogxV3maV10!idWZpxid6Qx&6+#@G3BK0R!Eq4&A6CTvdu#W5P~|OHz2H80GHRqr{et6`2sHRHf2R`?@>uxfINuW8Wjr3wZ z51PRGccrMPK;60>VQcECr=K&W7YeQo8#n3M=Uz0=G{Ue5wK$l<-m6)=hV3u-!N(qd z%J4JSaX~%)xZ~8hOGi5c7oLtajbaOT_k@H5^AG`t5ieh_ULE7r@TemM0?!K!9K?}7 z{`gY{3)+3+$)|Mu@x2UpVj0Eb&y`iH*I4)!LMMCRwb$Pg$~5pJie2y%g+z3WhrTI% zy1fS+fiIt~fKPw;;U`n3o^bqeI`YV_B^FdyhrNkal|)eM)~?fLGf;%-!w)|(MFR9A zIWbXbyZ4mDB7gnWWW!0&V!~l2fBT&s-7|0A0>O796hp^r*RE}OU{Lry`P8#U|AED0 zk3VT)1bAlPA>?mZabpX9{&@(PKnk$Y@Z&yJIlg=$if%}G4H5ArdKKxO^+rDwrw#Fc zj&SGQMcMi}d#zeW)iQxHHY8F_BdV!>c(QgEW@&2XYK1A(gvG?r7{!N1E8CNAR#Orh zMTCSY%af-?`P zbVEU!wicu-C4B!d;tVOu{)8snyFiLA26FeFJr;+6`<}bTCI&&^A3tbNe{+9@=sFi7 zUqtCPw!8M*ym^}X^EA_{`)+o|h1M8`0GE~LpLkjCt4PX9b);8bDrm>#8NVBiHSIKRgnKdz~Z3`u}Y^0VKk5=V| zDOz~{OJ;?H^5Gs7RW-@tAjwA+Rw-8T4eBUkLu#3PKLE@ah3UUpw%_LGjj(4{z5As% zo|PD_vW7U{VeR)j`zSOrN{8QZnT?BBqUhuVQyQ%M=sP8CCaT&vv+ zmuvSQE6n1&XVFT9@NOJkU|EP0OgN2i-bih(KhGPtDv!co2E#%XlbmEiHF2Yi0fq>s zEHpA)J7zD`?!~JtCThPx+0RYdWUswH3HP6c=8A*Wl7coCix=Jlu`w|wO!_wE<>5j~ zuCu2NPCk_oHc;ZMU%%cge(VAE(C-Vpih(Lss+3q(V03Wp8#VG|`$WN#n3U*U^G1_P z2{ZlBmg^5I&Vq%1lyT)`80;IAV4UfU8|+(ez3Sc5zs|L@5a-SR-P&N^AncNOg@T3P z!3XcPzG(yZCHksSy@tI9c*1`SQ@;OESfF6A{%m3WlHHcV@hc7wG6ocCT=NYzpq|5P zfdmIP4sW|v0=5f$XxCrR1tw_uVGa?7j_BIeH1FWHR^zWX#toNi`eh8%ceIb32mI#G zw*WKN)ru7>bo5b2>5MbSm<2p0Hrhfpz@1nET=9o7ahNC`If})g}?9w-Wo8Y^g*00G10CdbOR^) zqp**lF+~O5-{3;-8Lg4jtM{=M`r)1-426Ocmgn5stFy{IY)TK&!!UbkBmZYWQR6>qi{`R${~C>e_nK87}L z{Cb-8NtXJ3O7VHNVK7%dO1*vRxeH+-N?*5G`5BpB8bb!`yaMIzN>fC=S|v&B2;*RF zr7c}!^n&*d4T-REt%c;l$f&?2z8*~QG%dH8?0{>H58O_(2avBJWmb-6hg_#$(k@> zd3Vyr9dL%c)ZIwT0)or)YZn1#v!LX8G_?~;v zIaii1TW$(m1W3k)0J>wxE*l5eP_nWA+}?9-^2xp{Z}0I8<9_DZ=gn&gD>fcE&<9s& z12whvC)ugm@E#p&j5GUnK$0k^2D!A8U!?<#S2$MB+Jb+qfU2V8C;S82LNy zxV2>dfhVx%eUg)sML39iCpWI(=U;<>QBr_P%-$7OU1v;L>9m(^oCzUD#R)5A@9zH> zi_B?sS=i-GBykKsX0Os|@g3AGqM8~+B&&0D9mRx2YEIS$t<2wHf+bc?tdCE zwRI!ltkIl8uR9OIE5ZTqbRa_Ep0`+v5bqhKE-Nq3;?7%80V$$d)vDGM#H_sH-K?cr zHQ?hk|9oeIpeZI6YVe?ereT7C;7EeF3NVA~)~+|A9ca^Yjm?ghc;LVR#+Z^^gn|nj z47xi`h4-dD8?{Z_!wjhbUkV5gP2HZfvS&(h4}dn1Ho)+HWTO zRPWYKtu8-9wR#<48EX-?5MD{h&}ejjJ6dM;#LP9Dm9b&7w|Of02*{oyk7>{mYX3^% zJ<-^bIrQ9f&s2l@^^F-pNdn<~@PT_Q{+dK65V^9r$s0=sk%!S>&#+#73%?=sjMo*e zvHmG;O`}XXY3LB$dh1QbIBeRq$q2fe2jAyiJAAs{u(Y|lW$qW_3liTD!;X7BXZ4~5 zrvB%jf29ex-Dw(eo^!F(Bqys>DYk@gQx_ouOP+smW5AQ*P!tE_+}xa!cLHYMfUKOH zKix&3c4>@vgZ}u>9a+IC(7!LgoNTayA;E?B#v87+1VY5fL-ztPrhx{^JHU88_UMBa ziv%4Yp%GbKS#RYP2jevcWB04P+7-L*mMX5-F22=039SAsEjMO5B*cVw@-sM^Kx`-p zUr?s{!rJ#c{g?dqdrg>S3QQ#ef~!Z)2fPYM)aS0b_wW@?LqbY3*9Y1w?wN{y(ig%D z!}MoxT^rPasYRJWGAca5Na|K@;jGTkP_3Ob*)qI07&Sl}znW^a#XW=K6UG@1frNQG z7kE8HI2Nq+WoIb4V=K#JfTb17IIgXX1B)VI6B{Q_S5#u0>JIFs=I0Kxd|xoKM&937zQL0k$kORfI{{`2O6evsL_!26D_zFot8JCJbfDwXp| zA9yK@7;%zLJ@ph*#yRh<1`QhM#TTB@OE14>$s?Ip-ru*d$Ds)n_BXV_w~+gQ(xho) zQ-ZnYd5(2#F`7O~Dc@)J_uY~ZN@ldcQs>&`8N4zG7lY3D4Y#C8-})sNO{wL5Ka^lc zbnQ~6U2qo)Jp?%4=Y6wOySDu2&Rsv)Pw*t(GlW`@Wa-2c`zSBJG%lX8keKO_M;@?5 zOjvGFFd)c+*8+{hckGPE{dS*jjE;t&Ebewh*OGeN$J)DlPnrsf^D($*f}e*50w$0$ zAuvy9;C+-30eb-X1rl-sR`$8bB(tyyJSOQ4XTGt4{E2*cNSK!7rD|zjsyav4Rj=sA zW+}y-^h5S)WqS(jm=?BAo~O|M;zA=79~xB>+ldfaBf{%en^}~nA{8lI71u`PdJ4=k zR4FvltfL$$1Hp|8jZ~$O@)-&?0n7}^PjH{bHNh=zA5hp=GW?<4afN5ARr6X>5cD9j zB=JBPo%`E7OXh&)mqVC||3pyTUrFDaUS=ct*WJ4})7%l>n)t3E%vP;hS^^FjSu%y< ziiMU4K{PAJ>moaL>?P&`;$<2_yxBjAVI;P}kI`aH!K9NR)PKYKj|C)6JOZ$D7L!2F zP!Bf|5{ocig5M9sP;nni-u7v~DW!KeWp3J960^g&U53Fe-%eM4MwY^Hkt;0Jrf+Ac zYNs};H|%&z45Wq2?Ku)c5TCPm#ajJ#)1zuOc9iN5?X5;5`)cVk@5nb%5eI`qM7MoE zOLcm8Q|ccpgaDS%sjh;jyzFy`yQ?I zMJt6h7|NJ$+Dd8TXFpnUsj!%6Yb}JhWBMpYI!pR60=Zb+Dg zU_qQSM7ML7PP+4sdvyK<=U4)Z9>*MQ@s}_lZr`&0t5>OFUJ1ChmdBi+oyLOT3YJI` zols!Tc}3zpFTQxJd5ACuVm4udh>M;)`7^U3yXOOa;_^~Ut%{e?J76OLDtN6GW!t41?UK3CmvMyl3_Ho2brFHhFnLHE>;5+be9B zSI1ok52AoM5WaNv_xDM1E(9=K5IH}Q^}@OW7R;*`F5aUw_Seon_gI_7uHg?p_^7`6 z>T9DxyeTx1zd&o#t)G3`3vj{JWnWjMux>iEZ)a;``SRrf=bJWBCU4xh*%G!iXxKmt z7nIGGzfWIbp~~2>)sp13IDe#cVh{7av3doCN@&x}ETXBi<||{(=8~gRb}v}2wI6+} z#P%&L13Z1B_^fl{Q5Jf!Wy;Kw49U|3&n*YT~l-eE4X-uPtJvG*tu#^Bqg z@3ZB72Ug$~`Xtd0c|5#)mlqGYy~jRrUUucRRrWgVdXH}-_Xi;vf!d{C-!UI}?)-Ww zUN_|_Udz_@{vu;|uiia%?m1`Ln6_>8T4=%5BqAg$Fz);lC%z|6pa2G(Gu*H^5m}%% z_jk?YisFQDGiT1Wa5LxK$NM`N`@>>?Z3gdE90Db~h{eSsWaI4b@6QOM42OkGA{tU< zlX(?ieKwANVL>27az-dbV^n-wwTP^y)PlX5p1sy$M|lQq<@Ul1bMZykBqo&eLV31b zWNmed^u|}NDcEVri+BdBsuN<1ytH3@VqxVv7EpAdI|{R`ow(2_om{D{38iRg`&VkA z1`$bRtg*i1XOkdU;TDG52mbrM8`!sQm#&@6{RjdKF(VB&LKZ?gRv3sd8axW|rgMLr zZ<;s=B-u0l3mYUiFV{8<_t37Q!9vmC3uh1^?p7dN&SHdFCYFd}4zQY1Nb5~|)=p88 z)~sG*mUGfy@7ldvyLYGAI6HRepewGp!~}5H2QZ*d`k@UFD8Idk)S4{w9~+$Pl_VCJ z_|~hs?%J#DzU$w&GJVYZ&6{xz7yyd{6%z{c3$*I(&n?MMT!T6#0uYF?X76rlcfG7%(S0XTQJ!}kjK%%AL)2Y0K5=P<86mEfKa1~l%mQw` z(NT)3lBn$MyR>ckeC6)kt%A%fZ%j^7d=shEkYk$&G%3Azo`V5Op8+FR*`uO9|Ob8-$0C(2&&%a1_+^zO*jJh(#24c@QDoGX!(5$cmi1P z{tnl;Yh34=xlV6QwRa+hi|oIyU6ROwzYwG-ydS&pw9`gw!i1YGyD)VfuBukGis5I* zK_<&GYod5QP$W=ta?0Xa)`yETB^C;+Gwxkgl9Nneaj>hQQA83S_E8xr`!&eL=D-j$*m= zl5ytxSKioNfBv80SPhF4#em;|EA8&sxl?!@U3}44OXf$r6_la;yD&P$Me;Pz&i>#G zd`Qp&U7GmTYo<_6KtJTP+VQKt#NmEcXtWyA%tMT8w>7E;{?w-zhX9$MHGj_Zjetd6YqDaBg*^e}zQbkr| zaC4^V%goZ&`A+Y>9ok-PfK#UtmF;n&HO9LgigryZ%5Htfr*IzDqAFcvVV`MbmrWbA z_e}IElG?9tR^!Ki=#}?O;jw)F*LgAvd*W!tKxw(GB#RLXw$AS(3BQuKQz2~Vc;o(X zVuI`is+yi#2$lpnCe*y2LaoM5PtWs2<|yLynjpuHwEY41AJG|$2o50Rz*zF+%mL}i0$#u|3a@Tos~pjMprapWvwA=9*~At?3AENII0-25hvmW2 zPm^{%&h#lpeD{OJgXb*#EGsW!`taLny3x)Nej#3uvWOELVNjM}$V~2%H6H=0HeG+i zgMQUpMyg_5)x&}x|C^tI{CK)PiTi~;FA{FBN%i8|-IndE=5c8|-f@~vqo#ow8*?~i z7gJd%kqiy;O?$+s$;x@pkMzA21Erq7le6< z99MEz>7}}8uIwY$wHg6d?Yd7q6+)l_VYx(~G8-zl*}I?DSkUwG$QFq9nqh7sEaU#h zR|d9ucpQzxQbE4d<+KwZU&95c&r88Cx8`)8hR}aN3(IpKq#qWC7%LS@Y?z&?GBQ zj{)9xTfTjmR`(klC)U~h(dfP@TLS=N(zBiG1x|yV556HS51*6R=5)=n7}Dr6)$~&Q zv{O}@nkK)*Ws79)_bz1Dvqp??Ag)%XG^1gb)6P(v%4+@#OWkx)B3Qnd+ngRn#xTu) zEmw-Dc*;ywRv*SKGg~#EmxNSbub%qH+&r0R7Z{Nl;Jq*|ry>8-<{Rq8`vbaH^;X;# zo$`7eB#9aZS@peXMU(ZelMq|UMKr#}{y`2dCVt5mpIE*Wi^|H@K+FLgOatxkstg?} z8h|VFQdNko_Pp!o3cppL9aQ1FVr*T6EZ ztDe8033)b;ORe7P<2oZAu%SkEnwVQ;xA`U+19C-Ye*4b}k&)SJly>nsHDZ5AH1QIc zgrEmb!Mo{GMwHeKrD6IU2m1Ku_T8u;sNuxeI(el#|IX4CdBV_I-JUfSz-ZjIxX=?L%Zej6_LaOri$Ohq-{$uo);!?A<(9N@?)TQAFJcP=87 zXzk9!@gr5Ta+_JBx^YmIB=9=1Noeev`Ir;i0Crz4PZ3Ktev@Q)|FXkgbD=nz^%B38 zI;?l~UHAfDjintZ{ZA%0^aaxQK#u~H9qvLNxuQEsLb0D~~0Z_2PeHx?ebH##E5jg#Q;N6?5r3hHo8Zq#`Ng}nr z1E&(sPRz5p;bIyLJmf5*BRd*pnV!k5olh5YqCxQ_u&~Ttc*D+ zL_wFAU|!cl$j$m~V(E*+nc+`Yvp1Y^5~zc2IvqMQQ8fMJ1kMJfrfMOF2ABuZ319b8n<eN@oK?VMXWS~F3^DJu+<^@>SGjix zVQj_nN7(2G0(^S1->WVfM##Oi*gLQ5FR-VVXla5wVFAV{xU7wl0oNI0+kao1+zh<` zI$Su8JS@x8qw)>0h7W^mApQJnRyB=>Gkvy4OhGs*2=-Eue1CpFqn^j?IP z13M~)CE>tAO{cD#;q~DReFu=BEIr`1UflNbis+*c==ZdVgGw&?T}c=e=dd}vU#66^ zfBwu=Ki+eHn-e+&di^x$(Y#UjLZBEbrkxTRb94xm#73jMZii2F6aSTu>melFyg^on zI@K>o>s&+%xsQddl2O??Q#7S|IQ#V>*1GJHbL+0Z){JdtJ8#5IiF?Ih<2R$+2+yL? z9HSc=qg>z4nl8Jr3MzHEIPA}VH~(m-RLoSmFSj55(ESwDpQ5fP^Kr3V|C(dQqIx%a zYK5t1okJkb_caoamB&!rpvZ2!8Z0pT)e|tUq*j8+Dl9Jpp!EH-k1KwyWp79_HqZAT zzGCE}MTZyAV;EJ}tsI+>V_;$4p_r-FF8}%j3pI%896S_1S&BtsMTTDw z#WsF1ShRuN=yszSidRVclo}AI+#02S8;%mS0`y3qY|xB{ItHW>@#{>2DgI<_c? zQr;stb_df4Vfd+vAW8s?kGEK8uwz(44MzQE*yx zpTtmb?73Zv?UMJhpyray=zf*wjj^c#>yHurZALbRl6RX2FJiQg_eAG7bi)yzoYNj; zjldg<`ny$>9B;^_TMqZuPV0%kqVqQ2*cG+pXyo`S|sNRA6qw z)$7HVJZqzggRvRSfnA?P2NMHlg(C*Y1ioOIWcEcb|BkCq3=6qJ?c+?`FeeCWoU?JD zVta`ZLpbHGO#_%{67fCHAFCd7C9obrW?EfS?})5r(hs=hQG+S)h#hsU2i!E*##0h{ zz`2n#5?cthU*ExosRmEE(n66+k9QTj_7@EyN$834lrX#HX#SWL*A)X>ufPw9J}22P zz7EL75azWj?x1GG{UJ>DcNN2F@O-b+cb}V><$#0fkR$i#y}Tp0n|W8M?lJ1z^819w ze*VVva|hX2oYC!A@98AFx+h58>p#$Atw+YRUEZN}=H2t+!!0CCcP-U8E3# zJ$!kqs|cHpBQVA>K4*F!Lq)V=Y4$M+{`%OOx?q>BP+&>}gr0V@cW@SDSg^l`bIeeT zhM+|KeM?Hn%{t4*x~l6y^gb`>h+4&I-s8>vee7i~4@JW|Ky{EvjsSw|UnE zN>NAco-}<-`$NC<*)aR3ntyDQm9I5L(>hbn={_D^=-ls2SUKJh6y1x+y1tTIufY!Y zInpZ_cpIE3XzF?)1XgT+eA|^r#AEX}P4W?cMi}{Hn<=a~VUT{n8`<6$6v}A5Y35jo z{M>YsCKY@w$JMr7?WaZDlV!(i{q#jLRL{4awr(I|?RK6M4u~~7)p>7sk=`>HBS4+u z8C~$D3=B|7($eqSR*w}1EXAJK>~C;7`}4oVfq?Sovik-U)ZH!{Rz!XnOUl z>yEuLc&TEUD5h&S#CmcQCq)fuSrzb1?>BJ*k4Y6m_8$4L-I9y28w=&etgvMfis~)5vFn6-bcfpYn^OGm`n;?FG73_S3HGPF};QzUJw|D}Sh`xT5F1+Tf7;^C^ajas{(ZO}*PJWv~CdccNHp^+;L5OX3Q|x%7j&>M-o3risKO}-2 zO@jE;(2;5^_mCi4L_@<%LGA&d%Pcy$ul11><(p`vF;H(q$h{vp`F>Q&i&Nn9nwd)< zal?Nhkz?1jRDrXf6>vB!N%0?FPV^{KYTZ3|dG;JEou7rl-AkVqvd^@o@Y_?-VqsZ6 z*icf6A4*D4Tw$eJ;d@|Ur7q79vUT~Is*23jSZP?&jC-zbQpfR)G$ug8{ejo8&5Z(2 z2#LGti(d-uxA7;OGApepZPkjP5ew%neb&+SO3z*SZzz#-$pJ1^>|Yz&DR}tq!StM8 zcu~4`ZJRMZ4&BGq=vyDH`<^Fl<~cm9%L_BYHQ;tG5Y6K2_!QGS8jrv2maie&;o@RN% zyqrYybElGr#W9Jfn1QZ{4y*goZneBohFO7YPnMRx+-cy;_*R`-nsp07o{O>M^}fT^ zH&oTc9&W`n-4^CNZRmz0qde)~%#4*usTK_ozb+cyOwOVrn^-zQwY!4VhvypwQK-6= zRpZfT3@l%Cyi#gd?|f-}p1u1NBcLa+(|LbN1ET8HfJ{C&Ohdfo*3~~~WSz_s#~-XB zrKZ#5H2(?38ars%u8x@EY3c) zQmn|tI^T+U&FTg>RN3BQr_4R#!bG3sCR{3oacQ_=tcZVbFZ7~DEZPd7agG(7r>~h0 zuh#78!MFL5Y}_^Q+poQdyT-Q%Gf984sxYZX2>fm4TjPgfon6ANK)JTdV%lZ8yMSd&+S{G1BOBE~W9m!XsMYgKT{5Dz!u4l`WBiB^>qi`_XPX2EcnCS(CzJy6OtP-^XI5FWxRUtt0c-44r_LShM_pRwL!=bPNB(#I#q=k0r@ z)LecxiZoc<>?H(gv^sK|gYi;v;^B>@3gjl8wu`MQ^2@(iT6Rpg!o>iqwNCI%okGvc zh`_n|MSmf;^+vsKD40@?nB@=>(A=)8T-mtS0D-{v?vM zqqpoz<2|4CX3MHI#-{HQ;k>ZS0zT~^LGt+H6n5RbMi={OnAf2A!3qdkObutSg41Vb zxO4X?hBvBBx7pittm9?bbQ|Mapc5uCr}YGoysh1v>$2H)eYI_PFeH|Qcep>%0-A(4 zDbui(%jd%Eu;hZZ&v+KSGLndN~7X6pKvQ;)h?>6 zT35h{xVN=yrlgFp2Pio{SZRA(`g(?NE!!<;4>6;zP;VqL?!5F<$*h#wZAl=w$#}r7 zb(jU-E_BLy>`W7rBb)p7=Ph>LxtpG_nPe=}5*8iW)#bFvJN<9>); z;b8}nRy|#GG7AJkygE!Vy)mPOM()>0YM>lZm~rWsD6uEb;K zeBZ8DM?O40Bo_G{Q&)XcZpf~h<3`<2EiH0Q$t~Go;$|+gz{UZw?O1&ib0Ku`m6@My zg?_|8el_aR8+qoo`y9BHw*PsZNo|jSXL(J#Md|MG+|53N2?b65T_hBKHPYQ)Tx_(z z%WKAND(x;Z^cX7@XJ&;~X5-jxbQo0mn~Q*|0nG7t)LNSOmM>dj*ngNtIhxbcNFx<1bK|M$h@NOQ@T3k`tZc_efil4P+8_?Z848S#XzSc(mp*t!Aj zVVH*zeRKeke#TmN(uYA+U`af;dM8R?&=~aA2P7?OGV~(_1PYrRMIgyb6c$s117 zuN7Ahsz3B{Fn%EXjq3|+bX=hG0ap&+DqV+9VdgtG0FJZ#b#z-;?tTujBFCzi4b!Vn zm6ki_6DXW;j~=;u9Zx=2DVLTUSt%auu}1kmj}>4~X~z}lliT>3bjH8?Eyn-JoZJ~z z7+R{A7wOtjfI~S0)LNQ<(cb)R{Ye#pAHUj9bLOc5XL+jv%{ga)Y?}q&f-raZN z%a*eSoaVzC<0m`NOuHx`r&@7a>8e%1Smk5g!L`d7!C244!L`=u=|jxlXeN84)HD+B z)$^9$>;l-hG8ZTA9@VNcQBJJ?&DmmIWPcqUZ_p=5q2l``!aobflmT~Ca{MdmZMO~J z>*Joo74G&8>}ie;k9p%j$>!~8yYKjH$S)#-ux!thjLC0ES$m}!F+lxd(z|4fv3+|6 zuL-o^ks+-On@D6i%K>~b#H+O5jmxgS2%_4^mG=GhdrU)MQLCtitl5$83+|^Y%BMz% z=1l>-e+Z)3;OjkW(c9KU4%ZCGE4JyY<8$v*3sCQPebr|~E#9px&{bfzV;26&2e+kr z|ES|?%lM_$v4gXZ8P3z-^?t+4+3xw!NMLp(50lPzD?_sEc>ZXfY!AQ@}t;QdH_RrDH>Fy%4kKH;ISs#9n=(7ExVElh*siPeoPc zyk&blZ$pIp9g$Mp|7duexhFV3^h1R@*Q`kznpvtMz}S%Ej$B`u)b2@tqmE)&38ek+ zydZu`2m@$aq&@#0(a&Ct*fdfwZ{YG#@2H!Y2$zuy&i>W6I9WtQC9Q)0!?>Tp9w&3V zN3^C7F8~7p#@}y9lE{MMlX<1{61r8$J$(6d+zWo28^Qlm0|CQJ`fpCgyx&;|{5JD{ zR|>#*?x5V+@Sl6wO}EaY3fg)O>3ZJ`L}(`eZ=C#?VaC4{e^%+i62n7jJ-+`Tg{8#) ze*@@8iGd^i`8loUa3FyILwTKp4!Nh~(@@c|f%f@AjUL1C-^rPf{Cm4CaDBdLvH$;T zAxKjEUq8eU{d2`%=^^pGS^lrX|J@~mjgT6VXPsBrmvHG{1>%Bfs7)lHTD2(XBLK-25mn%aEsE0A$ z=~33WrwzRy6Nf^yJmSL|_Ij~db6&aahY!boo7AzlA~MVDX{dq^K)+yLLil5tyUh zi%=*2O$%5@*;MW9e0QGN=I2S$2LivV5{kGK&D?+hZ#8$%88MdnI}-Gu!2g_P7i&!m z%T>Ax(=1!tshHjvT!QxTzQSa$H`#$_*#&6ktWTGl3zuL(^#1SGSrIReoO`J~{sQK_ z&kQ~c2fZe%B^Eyf?;$Z25=CHRn$mNG`2C0BDcSidslD-WHu-NMhHD%~gCcL(eN!7F z%1`v==#hPO0$fKr=NqH0L&!73)8v(5gHAL9Y_*DVE0?p}{tfTL67zS~w@DAL#R!mRO_f3aMbDv)-NG*Dl{U!jBe_FmN3?tlgH~bV&&mep6<~CmUXDQ=f=ETD> z&98#sMH+p~Tp}+*SO)1u?6De3IHJP3$6B86TM&)3{BIaw3LeA!p8jb}Q)AKPVkxmJ z&|ei&XH7M)wW9+@l7ePXB;zCJX>x1o+zc8qspleP0^7{(XtJrz`90IRvR$RK`EQ3F zpXN%-5Gzb7#sJmx+X=&NC*9RDJsi)++-{+uK8w|{&r4!=K6$f81WYV zlwCW@5TUk~;E54VQSpGGlO8^A*;x+Efc+OPF3CqzQAaLPFpehFCQq#exG#3Xs(yid zL$jSF6hlXIBYe|NM$hd2lx}g(oz{5KasO0agbWAWNzy2V{%J38+!;src(Q=}aJsZF z?Vp<6zc-##VY=ys^-T~6rtOZvU-ht#XMlYdNaViHH-y;KP9RCi08D&hWCJmSG_v`+ z&5kDl*2;7A&&y6{q7ZcAfW*WC0ufK)TVy2A&*H?hLW#hyF6Xmk9d1{BpbvNx+gUE_ zh9m{u2y*2sl{rtPGljnQj2IkoxmY59UHhzvt8U%j#|Ej4+tUVuaP#-#1^lnCJOL?l zFdb3~HnqgHo!1nq%(t1|!2w;pYY2D)X-3uy=GFF*ePPJn#FUcM^^68 zx42o}zh+ml;4=F1;#!Cu`jbOVWkNw@+5Pe(wz*EEW}38U!20jE=!ZkJ9NLpV1g5i?Z7@(|q00l+o%K}g76imwx=Y`VT}(o(8VFhKd*I@a zfx}}(XSJ8r$J1ryVt098{O@Nnr#^SvOJ6QFJLu_@(tpqNq(*z(;q^`^=<3sOG=2d~ zE?rErrw5}5m5`m! z{1ckE=`S3%=*0T(rXfa-4oi4@q*H&qWrkk;-JlO1AoQ}w@2atcgH_^GC@@Bf944)@ z_2fXf5XVe`Tv$Yj)y(<|&b<;ual&pv*|Z*Spc3#<#yHxLqM_g-yafEQa_+{{ZiXYd z&O5LL>>fO+^2+L`50@>N2&Jy|fNB=|ARE6eec=vR8R%${c`pTBN5=dPhqBZco!7J< z&noHuUoF5;o}gI%y-SP@V=oB7Ce|&C{4cuiTztJ?2lnFxxk|b^BJ)Sf`Yy2^d2%lV z4#^ifJB|p$tc7P6^mxabT6F}%mXr@5;OzN>?28M5LNdz$?+PHCQH>74t`z&LEBhz8 z+c$-khZVg*&e&eZtWmb?pSdIF<3+W95?CsG#xYw6puV6ZP|_(jwTkg&l2{) z`hZ7q)X{t)V`4hL^+ot8+e!7tw9tNc{L)&xg+{uz|JOWc(7L847+*h?@xj1l7Xsk( zkfhamZSH-&OFvzwmU_9~!cVv1K&tO~f?KK6b!1=AH$C=>t@JEP#QSX!Oo4{{^Ec`W z|NWVMS>Hz;pqVEtCQQVKu_a3can8`PZpfF)@p8cbm2uMX7B>i$`*pXj*1whjU__tw zz6RU;idV6fXS*DcCwf zt+w^wj=_u?1eMmX{wgx(0K543`?kY*Xc3h~{Q%CFf>&3m^V#mzhg0*>Z9f>d0!TA^ z_Q9z0P&j;-K%j*PCYQo|gM-ViY9XlgJB-##bLpUSzgsAIq_=k`CZ>wP+Akp!)gPuNxs^W`;3h_f&{v^ZX(j02(-2q@cVCVl zBxlGr>+Ck+CbNXLmG?&^;jjD)AO zGE}O}KQ_bqH@;x^fE;%?cg3Mr{BY6V>FENejn|k{K-21MG^7_EV)mzXJfyr!My*=j;Gs3_x%p|-6pCs zZ#Wve&g2A%9mUgW=*s8FFyJ=Jk;HsJE%Q!+y^A0(kJ9~ciNDr(pM|rYE6Dvr$CMahm!#%I~>$!?|&8<`3dzzzm zd|pGJExE~Fw=Uhgc*l^PO=)oByepbndx%UvKau{MZ%d`$xU_xR<(=D|vs=^JhNk~Z z({G@NpGoz$f5N0qUQ6dOF{%Hnp6-4x{oR2VR~n0j(|{I@J{JtFw&3V`4i(;fZ()eV z<`LX;5Ula1*EYlk`--9Xe30W;0QBnowRAg14>DVaueVjIO^c__pM!LAQHc zm2EGM;OsMWtV6L!9=|MZcfdG(2C9($I|8G#pVTD?=jGy()@|7HGa%#B(?2mRIT*oU zfrg2nZ-z}qnrdWpnq;kV~aN3-Y3+xQVt-IXF`NA^72jpSWy# zD6BSU&JfW6GIHn~W4Tf1FBz|mw5QHGQTd+UlW2u+sppct+d!ATYwTUGn>If3+knSn ztU_OT_jLK-fOYmH27OM(#QNN09|R_6U{-4LM3qfWz+fR+bf*Fu&S3} zCkh>*bzK+Wmv+(_$4EmB3-pY67EV8BFS|U9s?uG}>7h4ga?p@fZP+aHL;ud=BGYO* zS=kaZJBx(YNOIV}zmOyNRRLoY3S`G3b#(Pc?QovjaRR<^l~<%QU9kmXY}m}jegGPs zZGJ+`W7ou<#4G%Pi4}N6eDnm@?)|?{j_35S>kzh=IYD7}Unui6TRzY~cebMxMR`^^$MTg)_D4 ze;^c$jp$aNd=?a|Em7+zjVSs8>4t6F+TIx4A1)e{Xk>9JPhT|azdEiLJ+|HpymqL~ZGKya7Lqf(#lYoR>`e?s;ZlHIAyVmVLHX`6BzDPPIRH zVF#?OzAu!B#T+tgAn6y4OeT(Db6CsN$v*o0+xGzK!c!np~**$DD>)^IBQv zfi=QAWSh8KT;w4Ubo#jrmDHUbk&eD4wD9G~rzu%ogoHi^$Zn+w0}H#mW?eG~jV^o+ zWAv%Dv4THR+B0l5Wwvr9mBAg@Jgpt>u9`L^q9uwqyx-wdk>pc-K)Sio+29=Gd-DMg zzar)N%9w^d9qDD%<)TR@{EzCuQXbP)IQcbV3~c7 zAn+R3Q_FSQytI*yyiYU%gsp!gCk)bQB}Ybn8V6tN!Y6-epDfl&bkqYg8|gt6$tgzg z`gvBH?OT3MKi2aQpZI%i_v*(b2_ox`ai`qcH1Cu%Q=@U{y(}nxfAxL!Y;>zm$$j*C zx@yktHQGYpNRs5!mG>5{Fjrp{>K7a~-x6ep!Sas}wyL?uJYr0-N6A7^J5n&CWvw%- zvMe})&oJUjDF`?-aHz>cQp6_`K|wqGDe;Zy7M(P3 zZek)>NkwhY^9216wT!L1jCm;`N)ocmJTz80fO+vYR>`vJU| zZO&xDI#7XPPL zxXK(ipY#S8@jWn0893W$nb68(x6w%GeB{l#rYh3VfAjXN!|D61>~gh?ib^C6UXP&- zdy?7oLd5c$%r>>P{|fkgA;x(XY|iZ!@4OvH{x{$D2ca;Nn+qz4nSG@m>Xzu3m77|P zXPAcKGWhDSn3&%9VAM#!^Pb?c#e-s&#caLw=?LNC0kYcYQeN-ye)-m8-9aQ1=#jtUc z`uuXRHKfn1Kin@mKO8M%z}(9VLx!DiD1t2yqSe)Z**$x!m?lh_n`9=T{?MfwWBwjA z8FdTwuF*;^hIff4nQ!PpBZ0#6yz{toH@n$E`H!`;>wpHldkdpB)uxihj**@;nVp3X zKTbm$k?!YStzm?F<&%JRjzcKaRhZ{swns)wG}TZToc_svg=u-Wp1;g#e8HE9kFV(w z)Sp5-ioQImd_XSZzi6Nl!51fK1=`&gxV~wj3Q7wzWQK6g?SbY)9nmvXtNScylXQ@_ zX#8swjV!e>3JS0Z)aAuA**-Xp*9m|qz$|(R7PxHWf0Cr zL+W+J&kC(&t1^0Qpt4@qKleFPNK8rW6{Cbh9YI-)6BToSjssq&TJStn^WyxnM75jk zA&!|e2>QJW7uK1}JgGsBLn0Vcfb1(bolTt-P(1~A73Ud7=t35t!xJ#}OXBsEb#$$r zm{aPN!s|@G5L7S8GNw*02?aLdtH2{ZW1*5(K>3R}wO8>}X0UxIEX2 z%wfJ&jG9+%I*`pJqBwG>^qqe2=DG=Z$+boxu+E z#b~S+on+Nu14r!b9vS>O%1%eqQ8(Lf`~NlYjZUOyWb3DPUy$|n@d}Hw2LC9D1Xk+_75Kb0CrHOoVr8~uW&&_f#ERjS&?D?D3 zaW>1?=VjPs(vV3<{W*S81N@8vZoff{#Fn(pa>Up!mSS3LSF=`ji|(w2M@J8dz0^Z?&Jc;FIBJqp} ztj4aU5=4=4W7)1ZCNqtCDfjJ{)!N+(9t3uSJlVinl0C%l)pd3{Yl0&Onxj(Sy$AH& zk>7FQiFe5#x=jf7Nc?)|`rsDI$qf6h$p3m%Efe;DkrnQ`{r-(W&5-A3fhZC|5^zoy z^XxF>f%xWP<7KtQ-YyghT=q^KKcMm>Q)$ zw#oHyYVY#DJ?uz~0(PYHA}v)H1cPH+nV7CYLVB-aPvK4Myv9NjPN}z@)%+xeFPR#+ zQOk>P58xF-?sSGZuFVLZ1=M}}kprkB4DEiGPdua}k7V%l$wxQ~HAYUMbl(4=MX+t# zvVU+pCBSn`ALMGmhUCf=Pu1Qe;a(H7cQhp(;wEOmljDY)=B7_=#?znSn^15TyI(;5{es182Y0_$^GapaUcPlN zIC&Re=NTEfm)>vDpXz^&go?FtINGhJ(qpTJ`Msg}N^bmJhGA;j6{!d(`HWXlIuIm+ zk%|#LpZ|;G)2OTwd#(gIW>P!s{ezLswpHo0M~8yei6Wn7Un>8{pri>Q8ClHbW;>N2 zBVx<8V+#krwD010H`kqq%jt#+0VI-u2^%;M6b;4;q9fzI)7&kTt0M!1?Renyc*HUI zFfq=K;s+az#eX9xu55E?pVAH7PcCp5qPuX?-ja*jlv1pjXZuJ5F<}wlVSVID!SA1x zkm3KT^ZS(G0k_I{oqK!NPZc&T=g=Vh$V^R(B*WU>PNMn(*#^PB zzwjZ2WTYD^mCpNwI``{7FWB(xFG-MoeqsQZIr01Rzo;!gI*`G@U`gRom^qotaKhM# z-wG+(Sl`;$okZys+Y!B~C+1xKHhi%a7DXBWDt z6XlV2$Y2bVaDz`ZpbaTgX!$~4$5SRh)*g#UTXM(xS~6AeH&wiraL4nYJY8$76MtCT z>Nqo&&qsPh>$85g1~wwRG4I>{647uAx z8>B1nu5gIPMlxjxxr@G!w+e$*^vA})6UMppc9$a-vC^ypA=G%Ujakt!qE+b7ZkIw+l<}8h-eOFYje*1#Wh=jCbJ3(4XoIR1g^ONodGG#`Ds!& z<{wpm^Q+_{5sx7Jr0*@*lU0y@({LD(>O{yU;4LIn0!Uu0D3uLE=S(CWoTxejpm&L} z!{4RkFyjaUSNpn(>~U1bIvfFwKf!pGMoXr(ANqH(;o`#~Sps~1@dK*4RmAOEFgy`5 z@1r1uuTfH62ktoLN4@`SB|fIB#8J=Jgt8@e>;7;tM>$)5KJx@MD#}{^5FM{~p0jas zJ|I`X&L8$A`>-U8YRW|$v^F^f8)QTIx4h*5*GNc_(zUq`5;AKKD+bgTGnp^xYWtJO zc#(+kXe3zH(2mVLIpp=uP9`x;Z)Q=XLPTvIZK)i)UliTP#_@KmfLC`Im}D{d`X>1p zk=_&Xis@inlRj3aqW5>Y&Zn1SL~K#Vc}1#!m?g96;K-36ih%Qb5E)&D<$Nn=s%_#^ z*p+URRXCXFAGw!sAJRXu3EX6Jj~M43KABtUQ8 zW_s8Q`7v9p$Sf@If$1?aD1t+idS9r$P;9Z)S%zRTxLIiQlkG>UdqJa;S@Jbby@AJ} zjEeWs(P6mqY{|?ER}3-TcT8EGK5!Nv!@m2bes*+Y10X-Y4DKj}LMDvxB*w8xm@e*3 zh>st+V&F$OCa(wspYX$>b08EQQ*!|9}4z0!?;KswO_5)LF;F~bRv-96u(>&!V7|LwC<5ibdM=9yK2TJb{wUf zewh3g=5r;9?H_ba4P6*oo+kP8pkc{ih?q6#9PGer3+;!9%R`O9L`yz92_TUCDRt`;K-zv4H^Phb38pLITWFqjTD`7Gh=_@YJsPt$PI zfFNCtREqIaf1An6V}=I-w;2tcVkeoJT_$9Oo6=J zkw<<&B&8JmZgEDj5tzevTU7xXeOl{gebt+lV~YpAzn?irTc~=G!#V zoPw$+GLNTGu0cJ5lfj|wfWF`#HqgoE+`!pdZcHlP2J#kM!?l=AVI(Emhj+$Kvf5o; zIm3`?C~uMZg?9(fJ!2R%EkN$uXtYvAleIs=lOP9ozD zuwl5M3y5<$_KXSp$fc6KVuocg*N~JX|K0pO3^|VDNYcjd(kE6u5ubB#BxI);5g{yA zR>G=X;EI5iPDNkMf9iGAd^I8hHd!*m55R-;P)j~N1VSgRm4$x)MU>m;ku~@>v$szh z5&$Q%X5Bja3)7d{bjw~xpn4PSGh`0IZi`^csIPVod-gQ&dDn-xreY6Ei+aHD@ge@v zr=TBmzFP3S$kZviCsHYEcq}QyaGnsK;h*fiMd)v{XpFfk*7v=9m}zF3ufp?CfA(q* zfZsbDSQmVZcq|aM7xW(ilcwMR*O)d*_3qn_wEU#d6GWjI?Y&Uv^B{6joh-u&&bR`I^)HV2&Op z9^m+58c-Wn7%rgoPnOT(`s-Y-nxRpB_Ad2s1Z+H!3Ky%1TWNTSc&F!sjw3Uv;OQ@A zEn3HXVxk;Va;>nh?1W-JV!(kOvuq4eDEL1+;Ql$7{j1%2Li8+%#0sja#^DV_Uu<|n z(8(jgR%1L62$U-90p(q#abm9=CkD31Al2b)_&j~g&&(OK;hL3$SGeF4BXTWz*cx5? zG$e9z=4|g%K})~YYtHBMyT8A9Q+X@{oY9^q!!V^}QmLi5tQOr*?gqp8!404>)QZ33 zm`q1`9IFa!(+FhBf#PT9UwiBQwtYj_^)6ufxOh!u<;B(Ijo-`RSBM@d85oqe?UzdQr>BZ z)RkB7uYi7Y{(%Yyz?+4OPZpm`-AWZjPbu_?$w7YVN1zUQ;gw4rW6GGSmGCT46C$*@ z?~9t;cJNqZnH*b>*o$!Dd5YAYqu2 zrglcCMmwjuE2;BoBL1?y5O41*A#o~C6Vrjvy-Ud<&`qq4y=gG+j68U_B*cJWOO_eM z_oOKPGlz|eAi+%y0>=+OPy&l|P9&M|ZcS7fm1Wa;iVlZFIE1%F*gpxIe7I~WL+0NG z*S=z9>NAJN4^No0D_=BIkKp_<7Iv25SFh}m)3Vq|4y))0jFoMv2H)OO##qC{!O+@| zp;*I$jP9YRPLa@Bv(tSo!57TRjyG+boarK^Orqq8csnkao+qWS{>K#2;c@weI;&gi zuey!0Vd{&pdc63#5lDk*CxLOzinOA#r#bf=e4+x_TOi+ry3|XNCf1*1D$4E8dz{Zs zk0k;77KD_bf9oauq96Crj&tX$d08A0???B+<6NGc9A&7E8E-yFO*q0Q`C?Z0?kL2Z zcu!kTxr<_+_g@#0%jsLApKS+6ji{pLAAJASa^A|pCF%mAh=p`^R{7R*A1t@Kp(W8R z1oK?a?@ty2p3G-JNR8tvUyqV`a70feze$|Fp3xgGmPXQYGv0uD{h?>Uy*v6$&!M}7 zM=P<80ZwDMlK8T*-O|FquPLdJ>bpQ0VsND~jx(MtiqMO3xoVptVib%n`1#88Q3Wv^ zOHSYa51!mR$Y?-zg8c2<3<;Bve9z*$V!C@40zzYU0$;-ACh*e*)1APY0HBn?->;PI z5{OWce$3 z*wa;(o8|!pXMCG}W5~0}|Mnu;p-(omfSaK~LGB)j9OVvCnNp7{U84jfcBMhaIqc4Z z2;DEsLThgXqOvTrKYuOIYTsaAx~e~AG)7WVw`}^hRA%H2$SEW+^n0cIF?AUDzVLeV zVAE~UfV+aVKvK&^r`Ve=rrv-jdHJkrKbKkJE;|6Z<%e206!S>U>rfq+5L;E`&u)P4 zP!okc_vPM1o%xKY%8|>(+ECk(rAV>kZ|y*BF^{5-%XUqcd!4N6ZQGLw7d0tmmY zmo8R?>~)9PMEY5pK)oem}2&_lFuD^+e5JQ-AM$Ny>pp1Gegx6JV0T4dR`r8B`bvp_;* z&e!J>_uG4_gVhLWj^a?F<5K|A9bYD(6Ru?0PG&N=3uB``91p6nV$zUHVbbEU*{5`c z3o%Q-6?yE>a5z>fVkAT9w>-`vlSBc<{*cCRlI9{dVazNI+w*(v-u;1Ez~csn=~3C; zaFojS7sSfUTLz7-YmCQE&WV%0!RvHAZn3@y>npj}a>ZXB(H*t;KdLvvc==~~BM{Mz z_o3OtZ@2dLS(B&Ku}h2(2Tu|*!vpA9`?Hafp7s5G_xL(5A4_NlKHI@jG$`+95YRsM zH{DHbQqsV$2ibk*kOBHiveB8!bPm!9`tSI8nbk9ggK2i&X(f+VdC*Vy&tk`G+%uiO zizYOCPxk|5B7H|{df2dvOC?N#EZV}thG2pB?j*u4T7chSfPeX(7rdGQkoS;~koj|( z1yub)?$^1k!_C$!cs=j8#BNuA=^ZIt+SJ$Bvaw${viS9+2_oxuLUU+3NcK(sH4ob) zut-;%w2wxuGT8)7#*!%v4a83Nj^uc=rCU;sC(NrZp;qd3=yOdYE@-Rxmt=dQZMM5f zG?i zeW*AW6qtuPG=c@u$z$hFHSXW>5_(PKM^Dmetkp+P%8+Id?5TcSuKe1B=__#q*PjrS#bFqjKfs{R1#&kzUvA54 z@-}J#B@%FHYP_26=O|LV0-i5<4iuzH+w1Cnndk_9+NEi|pYh6m=xCI(z)6HCZ*iXA zPk=M4-81O+s9;|=16HDb%gf4IYnN+PQPYE(fHq$O`jP71-bk;8V5V|jX*)bVvGw^p zlRTmn=?x6(bo|Zn5Dx5NmpVPJQ0bJ+#JCko@+$_0ScgIbhr}b0%8W*0%a~6mXDR0K zlHdPOGP}NZ-uOp?nxw(pL>XxrQG-qo6$O)fM#Lm1U)G?WQ)^mtRzc4r%xFA|UO)AO z;==HVJnrCyEru<-wIRqtG$b=E#--y|1as5aaWkfL754@2kvK6V;Z}6%U6j z?%>nJWxZqXCn4x3O$X+w-Hren{dgqciD(&HEf(ABwVSLOzhxpVee+;zRjFy|Cf$bq z2(RE(-@jR|X?~T0W$Y4r2VGt|DXLF!bRaI2WckhLI`&f4ocHu-DBt&djp$~)F1RN3 zMLSgL2_3PmX&(IO$aamloc_X{&f*&7&@|kyCx8Vw_PoZ=ozWyy8jT;69DJ4k<}qve z9*AK&EXk}jna%4ir2ZT8Wtl&Vid1*@&#FMT*zocC?Bu)I~SE^ ziri6LdB!PFcvTO!LmZv;%A@OUgb#bIw>Pbgj$X|Rg~G`tt^o=Cw!IX)QWn5=y3&2S zJ%5!S)&+Z9y0z>+WWsE!+)v1#+bxE^R~e&fmfh+6!`>_# zi}v1nzZh`44qFf7NpfZshxtMT>v1^Pg-|HBYv2QR#+zvXx7^{h`WkDKt8t3&!4UVosk?(_(*P_stuCoXM~ zR{Cegxle&G;f+AIeSmS7n6U>oZAH!Esg{}+qkqM~LUevyu0zX4_eE)JnMRmaM#h+K zg}>7Z=6L3ZE@1#d350l|-~MD0Gub@`m@et3nUu2pM4o4FQXOG90Y>%YuZ@LfE4L?V ztwGV^z@7a9XsJly>mIVThim+lQ>>`F(>Ke{ti@tA=skX2 z-4HBu?y}k=RszSKQxGFB!XtdF&XD>X{}6ykw^*Lo1Dd3cS4BpC;DACSiK77_Cb;cV z+Ga*EwI#VmC2mvv@{A9A3=uzX0Zv|tyknlIKBiv!fu-_f^Y3o?>=vWXa0IQ+v_QZx z!)h)w8)2AOsHt(mB&=z{S?O>F%G-l0qF1#qu;u_v6pLbjZ6#8iL@l0zom{I%xy>w4 ztvj~0L?eww-^`DjXyy)w_}V4iz@^^Qk29*kNIVwwUR1G!?s$(ga;NfM!xZaW7`~_q zA3=C+cS??074tAq?_@x?TMt;2iIFF*C@FU8t_?{12YN@1OU8geg;EB?Q<-QuMxmss z$UFLn`_)5+0?cc0bGwgEZA+F&V+P0W7JDiBJ9ZHNWj(*G;v%AFi=(QdrW~(Naej7& z1{YX_377Dr z4g+(4Y-`u3Fuz9k9^E_szMPpQ%VeyZ5xDENT_Ov=S+MEvLtkVc+^2Vb(ooKx)HFDe0(*)jS+uh(tbt?Mao7Nr8DX>GKMx< z`jZ-PPTAI3T=ClNbWP(F5+m_~Bha$(D6sD3AW>$MxK6)#G%8592Yv@Q%XVGARnAkh z{OAb?IH(@%Xlo&NhTswa-X(@Q_wRWj-0F0Wbkd}K+?W=suOp>K?PSeXaz1^J5g z4=CnDr)8{JoojlDaeG{D(dgG)3ys8dVsRui`u3wYLrTQX1T?i@Dau&S6sN$tYse~W1{$iZdxaL z*`|%y;7xCp3gFH^&@dPDGaOz+pb)C=KN|%WoH}-PxXqKigkIjXg;z~6Ke5-qyeV4j zJ;+T+9ESqX;zc-Di?$um`cv|hKMaWc?K)iJd6nRBMUYUYCu(q*Dgy8>cn)5tDXdNA$>JDV()Y#MF#)2jYgr4r>br*SM;|K0+p1Yn zJv~uL*&rS@fRZE-|GTN-Mu%W^f8Bqs0)Wq7>a(nzeTfJGRg!=@p||{GeY0 zf{&~d_pmwaTjf)wg&SsK;$dmkt0hPu!nh(GH_-NcZ`(Jdu`bz}w8KBhq_HcbZZu|* z15-~hr4}fQTGK-`nPurKf?ftk@xo#GrdBB9+2~~tF?AXg7zXm z`aq66^SIukh{9LX7n5`BeaO2kAHkL*_13{HlM8R__~UFE8`7iHS+iPG&!_{}RA~N4 zk?8+XA3;$X4CEFRJiUt4UtX0w2`^FN?5{D);wU`nAm{$Mbj!Mqz|fG?vCSe#>KUJK zhl{H`XOSq<*{M_p9h^6L2qhtVCIA#9&hoa|zv;bkaBkkNH%&)I@$a2I&iOQ%LQc3K zXj>g@SAUR}m34Qz;Hg&wgi_TIDgq*IuUEGND|x@8LI0N1!U9hIPFOE}v2MD84feyR zmCBzJEk)>4X=NCMui3|TFe&&6YCKj4S^Df5O%oNf(YxDu3#!yjsReSVMC#s65?EuQ zu7-0V`AomEBOJv(+G27B!YY1WlQzjLfa!UiWtesI-A~WfNl21<4{$r()UOqECyECx zkzF#~#vw}H58XxLtf4uJ&Wx^Hz0c_X5N_?dt z_}>ORD2gm_z1#Wjh@i0v%s4d*_5W;(*DgyV$@ThU4|7uH(cOg)vX@1Jgn=T(n}=aQ z2&~vbsAErN1XZ4&L`vja05eX$jV{5soNAx3@$Tz~JILYA=g=#Dk|zC%&0BCHDezLuf5fVvq=9T}+tC`t$zbo`YM58A)<|(p8{w1dc~?=f z?I^?y$)JWqk9YJG6j1Hh&lW7Qi~Y3ddj!pU^uL1x)8S7w-*m`+G`)vW)$*~^w|Q_; z9mdRmQWyiS2(ov-kB;D2v4<~a>&l|gsHE;$p7;~|kmOiL1ZKSRl3difm@>Mgt^q*; zIh9YR0Wtf0U6SGmhiy+%8Q$b)C4G0)J|%&9fT*^JT{-tK_eGa!kyg(HfHaVqZSErG zEqqBi@a7wk17;|YjFeXqh~o3kj`|}xm<>q0Y9d+*sQytBK0&{9l(6j84k@=RpfUX` zlSMDvyYrS)jjk_Pea1Y7Mm@SBLoNG?h84sXDk~fU@ZLN>dizLTeOL>NBhp zLan!EX34jPM@Lgup^a8~=5b22s%#e-G;*xcepNRET zWJVZDi)aRvI!9POC@-YR%F9Ye&^V&+d!=r&O)d&NN}jdBMH>BCU|bOIFVGCPQ`z?_o!Up87yRdWu|(4@ zCEQf^581q=B!mCeqFzM_ZL&~h&lOP${|s>u6%Pv#?6)on>*JK z{}0IIoQ6OdQb-3MwYb&3%TrCF;>_?(R`?epjd2nEUV04uu(UQ>>{x6A=3KLAB(Cp> z(oZta=xKKOClJnQ7nSp&*W`l#-OQP)C>izo+CobF%eMiKNk5vmj61 z{|F5JLwSse|K(L%QRgige>iqYguGrU;CB%rW%6Txud-_nS4p#D1|37zq-102RNGj9 z**|sGY9OMz4ZTPCiF}#wGOLrb7o+x9VEYMamxiF<2;0H$&g&dX4MZObxjdH`EvRfx zd5{4{h%OCbgqpQ}7St+8wcAaqXO}%-<)_CVUsB4ODte7T>jeZ{aJ~1@UrbfWk_1^ak+{?Cr{yn1A`*8jKa@nYT06WpLj_Hg)+Amnqi$=9@_j0JX4>AX! zb;-cZ7E7<1Uao;q5-^QlHsZQWO)GVXnDJp=QM$6ohWA|G85xcXLx8Xo=GUzghD|d^ zMate+<9B)Hfyxj?n2UVe=}peCT!MubcVVnYUOsRlkCjjOr4jsLC4(Gfr&kJ z_7$sZR1U`dsO!W7+EjtbgmWe%NzSyQsxuQzS3*9ZyCyM{kICYLuJ3+)Y(lXd^m$%( z$v67TQCl<>gH z)C21zitD}U=n@lKmq?s(06&6oYm4`Spf)z+?|=&4s9zN zPdcd)$`>*_x-3jkVLclU9a0+#KmQQ@D7dv(hU0LS<}lY1TYj=nn?9)&e*lYj2K! z8l?>|vl%K(mRJn8RF*%THkD$h*F=8MCzr&O^+aC zive|qPT0IMlqf)*{FFbMdt04`3W@$>h4e_dr zfDyj(!*SGYsbyt}!Ddu=g;H2A^fz1~7h&u$N9kUkBpt5l=F!x!3RK^rhV0J}&9O=p za5B<5pO}sfVSCU!tJFZ(~ zeh#0M29Vj(6QT%j5vm_*P10?K#BwZAHKJWfh7${NMtxlRMy1{+#JEs$6&_@Y6|Bpr zlX)*tFu%VKXy}o?|G~ZF1gDgU0l=^wY(zK3x=oj%dhkzuX+%xeDXY%3bq!_6XxV(> z4^ZDYPdm*rJA~`caK|mMj`kF#k{R2$8BjUz^Bv?_G}+j^Cu$`@DN;Vwpjzuh&zLJ zgB(9|grP6g4|h(Lu<9fUx(bw!{q5q(SG;(h$&Ldg1WZprl=9S!3~aUbj!%a^>d{w$%4a z*-1q7e?Z&Nl|h$o>s9_io95Naz<|mMftLQl-cl>_-hR;tq;danFy|R`M>I4vGTUJ7 z8XiO+k{mh3^yYE$XuV{;Q9WBwEYH<#D))e!kuOwbMEn7-2(N?oL!zw)TT?y^vh}>+ z6yn`K&osWWR()CJY0SOGqSNf7Q{4jj_qR>XgQzv+oW z67qurnN4zrW-pA@Y=^jXTkX(HAv`5+Q>x_qSB|7QvegZalu+LbvOW1_=q4y&_FsN; zGM_uq0?3GjcY*@VJIq3hSEDtR*fo(R1;*4#b_*gX^orLF9oRHS-ja&A^*nUE;yiYg z52VZTmWkFa40|c94i|qtW6M8RFlh(DB%3lxq{(l7#XD8Zs%bXX$={<7K&{h}&w?{F zoMUADD30Mk#Kbm-`p@ULGow{M0bqB6thVGvQ+{T=m+^$>Q#3ywXZtx4E_}U zj&6Efbo?A29AuD`0+{U&kD0y>bNteZz%;QI6vdd){U*aynMNHQ5}BItxDoJ_8o;Nt z&fvb|jq zG(0K#qjfhR{e{B8vaiAV&;o_|Nvg%zudDcwYM^xG`J$33{Y7&{R`%bxSsHxmkwk`b zl8ytZjt(AOR1haLD+K(6VUG#M+oK>7o26g`h?v&*iASby5x1qU z9+&(421Uf+f=(WmURd4oT!Kvq@~Q$ zpQ_V{t&BkHrv|OQ*F6nxx!IYjF**8SK{m9!*kMHJi6KiSLM{pRI~qwn$BO4wbh zut$gOjtPp==`sxO!x8y`NNR3(vzC+mz%TI@{XI@(Gve9hxY!-|P8mg+D)YMaXsipQ z{{DtVsk%_&g(Id&^=8=|*~%mT0)OOwEm^g{<(k|wv=dHw96xSC6M_@wgAHR4fBPoA z;&eM1N*Rh}d_Zun|GZ=pe}{N(W6)$>f6eZ84wN#Cy>%qP)G5_vs&sNkQu*93UFiC@ z4vC=%FG z<&i9zabp|pL}gspVpgM=XSZw9+;4*_>vT;9F(X#oKEH`?lIb|d2({P2I^jqNvWh;7 zTKCoxQtM!fpkVFZ?&B)7c^2aMzMU$HJr(o(XsYH>8ggM#{7yQqbS|U%fBQ`123aqf z$6yzs80YFl$-*7#x&jG3ShvW^GliqD}hwRlnK7xpH~`R4;1L?-}d&#rB5vZL1>$( zF&h*t3w#qC3h~W881qj%b-TPWp`o_Yj;gr~Q9cwEaj&iAD=`?3WYZbZ_Em)h&oe}s z%^UiN0^e}94C2-!iTod7wBOPBGho&?M|DwwcQ}*?W}Q>pw^v-Q;@rnCHY(7P`?mW7 zhU8|adA_dT0jvMl3vewaX4W>B0mp=|6ehS(k(!(gwZIB%tSH1G>IFd=)Nztk`3qP5 zz)ASn$Ml{mJeL{oO5am1x!7QefAYng22o_jeH1uaM{-iV*Y)Sy=zP5r4_8cF%4#Z& zK{qkrA|*CmcR@Ll#LlfLt*lV9_F6}-cAk30*@tym!h5iJ^h*1z{nvgpp$>i5NcCQZ zX~=|yP6N*=hzN`l!w>v2m$;yiO`9Yv(=>3-B$p^|P8x7Ytk!A(dR#9lZyg_+nD$*c zfQ;NqEltT1Gq*(6T-_;=WQ0Cvf>h+ABP!gvc`1EcKy$nXyLD)t-s=Xz4rPg&2|3pYRL+xj z{XG9F_R(h^>4lhrY_t<-EkEMU${2Lgm125@tsm>jY=i{FBp3&t zTPy!bPWPrWK}Sr>gM9rHp60_C?fUsLwz}kb^oLu?2Y3GD*LwBu{JUC+cd;OO#fB(h zeR3LQXYtG>Z53rk=>!8LBAA$M@=iRbPP~elUb?lofF9|;#2+3*R(3SfqGYnvystw8 zqi132;*vQpO1tSg`PuSgiqeCL-ZA7Ti9UIExl~xSq93<#f4Hwj)+PDZ)wLVhaxWTe+& z3D{~Rhb(B{b`ORIM=WP93yEF5Yb>2b6V|^+W|Rw>_7Vp#!dAZDV#ObIYDrYXdP}k% ztWFmAg0i{)OGOh2pmh5>lcGTFlQwwWm1qu;N_i@M)jOHGV^WHd@>n_x()Bj&lB-qJ zF)mXkK4-ZDZr4l|jV|PqS*}*fVdb91x^H$OevyiDV>;m6?u8&77C_x3KYq&X&x(iv zk8>Q&L@fpu-pXLvMwHQ}yA{;;C3dEwCwmq;+Kdk=yWTdk8(1F6kZc({$mz+4@GEiA z66|7d@XvMRrg?$nru*&=seQ3=Ixa*VxY-mfsVi|b$y5jNn~v)G$OXVeNed}_ns>PY zvC>$0%EdNUHeYpWVxfo2hXcaFP!jqaQGZC08M;%@X}shELO7)&Mufji~dijJl*Ud z)^9D+{7Ic?-(X*|3H(TGSpl<6*gMfL#+;i?XafiB@3TT#27n|Fp82Bf_35yHSR-BZ zt?`Uc6}2F}1IzHU3p+bhQ9__QWS&zF6wBY39afIdP?^_4^|CkV%*5V-5(9um# z;fN+q7SO>!6qV%K+?#k`i!1MU*>(J^G!b2477zaKA6dH|&Bacq26{vAupYa*jm{?P zK4qIso8}FF4|}U6oMJ})?RE?3Y1 zp%l7nR0n?Y-}9njO9?SpfN_dYcM8uO5; zT+3+;{FqHg$Y#hRD`tJNCc1|+qq5R?uF+)-#o7Uq$i{(V0R%P%)&SS7?LRdMI~OaneiO8 zk3W;ChF$Ib!keS=A&uQbf#RRt^#kaKhC)tu7A8q!I3Th6znPN$MODC9nU39x-7Zy{ z5Qxt7lS3*pS`VZ>7?X8!sO`9CrPpoId!he)OI5-^fJ?5kbCjU<{XM{UqcObPU1jncj>9cZKeV z8pZhI$TYb1LGZ%rSb3}926cUe7V_|sWH!nFRSMDCGmeDyMiG+j@P_3Tg9Ux4o{mm1 zz@{zhRVln!aaMDlJmUl@-xZcUOXWoC8pDsH^+e@P(Yh7UP_Ua^^B300M+|4C5 za-Ouf-teinpLkekM@0`5Q0%fGzoal1(;&@|&K+&GK9fc_fIF)Vwbp98HC6$K=D|>nTsIOM2ON>-yP~FlX)ABNEUZ?#s#|mf zcD^hP$&tNGRR8&+l^AYUloL)l5aI=UJ78#kQv`lFk1)Ze9uY-uwr!dWSL&TRxDUusN z*&Gl`OhWSG?ymkIeBubJ)5F@jMEdNka7aFH*Y6NRn&$fr&oL(a4+}00&1fiyOygGSgB8KwD?cxYg$Pl_Z zRPEM}K@ITbRO2d!C)v)q;?FKGxb#*gFlfPzt?WMoBx2fd8yzJl8bOg$)oU8hZKvdX zJD2J$o5#;%o5HN53G6Jc-t0$d(&}uP0CB# zzv;5>4RrAUXOG7sO&Xo5N5n!WWC+l3?z~H|{ZI8bk&J=`v87>jnsZwHJR&$C)E*z| zdyQ?dA|MHwxszePTLg^a&{{hH<$fJX@*C`+&fSWh0dSRTKNu` zx~6$Gs8r1z-{g^&A`>puvF#PH5@P5^4jW%uz|Nx^!;)X ziQ@T>L-*F;pWxV@+iVI0ItH5l9shR-$y-5Z2%rzS!f6`qqu{TvhY z%ZnGgZ5DZ&SjWvm;cA7ttaZp#18t5eW(V>jtwc}`rkTZ~`DSzgvP3^8DCN%jPjya8 zUViYIfKRNTERYEw56FBqSCDI$JHTMgU28UHJ*-|=m3$KktKOlv0Fhy;8phtYdO>%S z8qAn)Duj`%(K2jQmcK`<}i#M`nH zpQ!OPIUFJa{BUjFbgj<0QHwS+B`Ub}fD3xEddVu)viH1Z3MeNSqQTum)Xdq|bEdAQ z&*QcCH+1;6I|m`{VVa|41#*>r^R#uK{iws8DF@02Zg^y*W7p;DgwNz#eg6gfaJ#`= zw*KDI(mZIh>q^K;sl{F8CfWTV=gL)ZVnQbDdNFv)iP%B32$eHDA_A`04OE=1t!o3X z7TxH0wA=R8p5~R{@agBMH=2|E6ADQt5+PZH6+Fr|%So>jUFmiEmh1G7JF6^H{-IBi zFUu~<`-Cq#>pABPaMbeU({ZzA7z}{1U?cd?DWk7U~K>$Obm zj>U9j@dea6k+TbRZfhz_{Smvvt&>OLP*%KoL^sB@#P!;Fi+3bSZO8dg!LUVJ4jcXbkFi$!p0l%ImJS%2i8GZawo#TY^ukQfJh8*8`Q9gx_q<)q-0-S8GQs2k?jY3klf`qX#A@>qZ^|z7^xb%n!BeK(9B+}@e zU?3@&SO5y5f!Myq)Ddv1ilmmS!p^4duo>}xa0V8{xrkSO_+FAXcoK=7pX1AqxdNEa zJ1P2zdRS0y?}2EdV#*enu&N5&=UvUh{`HX)0T&nEQCIYmI|XX{80>-rjLsEXHNy}q zckpOp3r}gEmd4iz$+hYuvH_yY!c0ux8B#|j#Rc?qlHguGZtL>D!wi)73rO)TuhtSu zlSj#nKaAE@KbJb}8KeD{)!jcd;fnFW6DfpzP+7yUy>lbO1I0vq%!G@j3!>^di(~xa zd$rL~)MqPrw*%4gp8mbx*NI{m0SM{R6Z++K%l5pMfFZrsLFR_b*pFZ|+gksoPyGFR zF{&!kfl^JWlX%U=_HXWkj;!Epg53w>nFD1=F>pU?qKIbC9{fWyl2t zNN@ND`%zY!_-Rh0%>>7g0Mb?`4g?JhR828|+kC0IS8iV5tW0n=znWaxjG&t#Bph>I z`BTRgUbCRWU<$D8Il{&@72fMtlHz(u7Bae5^J-Zzmdt6}8|zVrDfW1ddZ;q`Q@4)y zWbo$cRYniQZsJ-HWzzrhc2Kil+`}gt6(`Bc((9%O&fRlI#eL3xSU9^tv2wdJy8QNH zL=0?Js%j2kL9ucNK0)7XK;o74(&D);LcG<|e{hzcnX+=iD!aW_U-M~9_43vHL&T!X znfCm9i+dMGh(ygl=$IFH-HUPUG@5(S(Gt$yb-u&I0m3NX<^ndUVhxD9uUb0)2bUrT z4*{z6VtgsP-~Su&FTJDjdQOHFdd?2}bRt@8@9UTe2|pEBu6(;V&!c){*b(lyQGJS& zR1B{8`pTSX_9nhs>G995#t(tgk6bm#))pr=7f8KPDDw0h?HX}@(EBzB<%GSe^>e%i z#JN}8X{;)K;x9vLESIg+z4NL9y~zvp1bN7ywzTeaJd zw@uRY=AyIqc_VNLHg)vvXR*L#w&KO6UrD8O27@MZR9Oux4H@%TEWt7{1woXYH~Y*?7ruO*PsL?|L6C zd7|rqLu$gwZbX4z;hkX<;dh+Y2?g-Y{6NEJVRPLlz9zBFb5*nM+KzMO`v3By0xP1G zm*78S<6-aGJX?9igvG8DmbL&+fh(V_gqi1?$4^-b|H=Z+00%tAT5AFFd+pfUqXVEm zVY*b_3t-aY0tcWuwifa)`I6hyu(rjZs^L1?d;Dh%jTRsV4 z{`DQ6O3xP(X`rP{a!oU#{2)y0Oi(A}2TmmynS+xfd%h2jNyH;$bsGrYGjCJ+)c{te zVV9zXs(AI0x%y(iuy`=dwTtqhK_F<9y}Vy{;Z)Bz^Q;!Zm*@PgPjLP3x}&W9ZVAbg zd!Vk)AWzd$c}3{ddTV(aW%QWQ=nSxszY5t>`mk4CTOqG_ljEEfC_X=;q0RO1>I6@J zL2$PD^mtu?2UiQ|VJ#n7e7|Kk@XvmG*yyV`-CC{ds1Z_;V$ak&ul(vMb5(TRhnew@ z$B2E`%PH>>VjaD9J^9i-lvS&3GIjU&2y^*#Fa7Eiv6&$9DeHc?hB^qo{9@3MoE4b2 zS8pw|+^S9db}Bi)IIkGp=)1SRhr7PI^O5($Q)I4?w8U);b{5hYO>ZAue&jM0&3zB- z5K=?<6g*^ea7S+8P50qaI-PC2BW*5kREPDz=DQ|Djoj?07xd_pLMj>pc|y%OhV3R{D~b)pwEW zpkpjNb#MFk@W370WAJs9?Mh8D_B=2DH?RtPMu6c4H%^~nw4?po_v9$Eq7BK_AZMoo%6B)D?3LrJ4zildhjW|1lac z#}Ua$WwuhWi2F4fuE&+rf%7jrsMi?MO!UTukGwW@p4frk?%A$JG*EQ)>of~lQ>^s4 zRVxRx^SfR8B@ow%Anr3T>!rg2VDZ-h^2?R2?+@{TS`l@|)qtiFOijB`zJJ@b0i|VN zA>x5!_759d0rR={OApZ0NbJ#llN7htyL|k6ArGa4>vIyq8=}qqZ>7-- ztINPM^A&^=2gnPHy>E9&Y}(_4pGvYYi^uEVtBFe-23$Yg*_8f&ms=r@pYCAi-%EfR zJiGsW+pquk<-^rtFHnWpoKpRbXEpWv3!d3nR$988y!PcL;dz#T{W;i2y_d{$)McA0_2S}fO%VU6jFOpir&r}p649e>0RI8b89`-*>D$6 z7yr>g@u8QPFI`yQ=AVrs7+UJjq;?#ALj5?M?||VSz$;>=(8snuX*}5YFB=$CR7BR* z-91c0P9VAySx3>c(Cw=k8qq2SLWd)ph98pSM{eGFllihxfo41O$R7Xq$iFlK0-uK2 zj;IB44h|0Yng#|M_69Z6w7o30uYux!T=sc+c=mHWclz`XM~uF|LO^3kcg6I?v_cI$ z;N*v~A2D_O^f#AD1YWW!S9nypy;^!#>BQ<|Jl1^1e9`R)-UGASEwSBB0|pFC)Y~g) zv8?tEyrGk`8G-Fwc^G<9RuQ2oY7w-#06abB`Jea%T$GRAPAw{uveLqqDdsN^#`%|| zYd~sQpnC2={!|h!JlB_}AU#Qe*4o_cpP7`09%~3DML=m}9n;jPS=Lu(RFP1}nw0gY zj68^5P+21KrrQt{l8;;{wue&6$@G^ONtb$u=hlyzba|egnIy>F^+QFFK=|*lgW~2* z_taiNxc_5G^tWxSt<-eo7t}uU?<5Pz&c*yPj5+dH%-_|Wban!IzwcdAPHe?`1&IKO zT@)fO=MQPA032}j`wEYBq84itfl7MK`y)YXmv5^kzefWvPk70J(rxN#rhoXWscJrC z>Bht!d352fwIh?SBy5wndh@v;aRjmM$s-~)F0Lvn+U0tE!WGnQ%LZ_{ub?adAPwT` zHLB@Ao=T9MeLSl|<7`2BOIwfe2h8|s=#l-0c4M{K!Xc>Lg)E=V*$;969tpCw-_-t< z--(MJtFE5uII5P_Tni{uAgFtsq-gWs`%g?lVjomT@MZ;Xx4OIx(Yh=6pMyiqKx}Pw zt-H11vANLNN;9b!kLS>&7S;E}#J`e~{ngS9rJ-kC$LZ0OabSTwK;y;zxWblm*ByuG zeddYt`$?18f8(?5^t!&yi-kZkfw0r!R@tdnIp6&;$n7&EXd{f$N#mS5DlRq_{^RRi zXUg}8_9916-9q{R`Fk)bj5uw%(wOzeJqe%@WsF&*v|h`xa8 zJ8j^v4OTsBfgk+jQfII4ulrN$u49vvl_)3vFyt`0X}Y9b>po zW(N-x)AnBO&{iM!_SViQ+TANh#%9Ka)zsYLoc;mUzQ#X7CqXfLX5)cvZkHEq5Y45$ z_iT+ZDpCR%|66g?DM$PMC*zkt>|;%709>afGrtbUNd2oU=xHLOwf4xnwqo}A&#$8? zJU2T=5Bs%VI`Yk(EUA?U{U}k)_pEJGxz^V=PRW>lr_1k1jEWeb2ATE=;5%zCkF*@e)@xQ&d`KKEhW6!~~L;N+ZqVr1_C)j@xXgB_09~olI%zVZp zbwA{ZI-ph*5V`M8uy9=qtMKFd1EBGI`9Sw9C@v;B=chIbOQblBjylzd;3dEi@LDL^iP@w8(Oxv zfPerpu8!{x9Zp~r;}9fFGpn+C^%5ox9bH6zJ`rZu9WJNiPPG3!qMoY--`zP#r0!c7 z5V_@#2g;yDDOy@ucD)QV2CG(bq$MQ+_DE$_cYBE5a+(E!1E@L+i4G3AzzRzHrSTos7(y(>p^H+37iHi z{?3FWkEDX+e~_)g2n31QyzTiSUoN{h+XoB+jfSY4oVj{asI~QV6A*>-<$3eQ$kCB0 zCc}nIztdg9AfSeLZ^XY{xmT5x`*~(QgY{TYE`uA#_Zk0pb@h3PM9o55y(zQzeK)p{ zG3xU*-+#Jz*}OrerQWU0&HY);fIk^2p;J@zJjC4J;nHn)Lz-?2D1*C1_AQJ5*9%bd z%$AAzQ3|{N?LMiQxw$5s zkQidGXSxP89j(Yn6x=T!3Z0FxGki?=T90XCYg00*oVZ3%QqxrkbjU@1w2_-h4)t%0 zqYz$Y4Hn6>;rk!54b|>K!pYLLg+fM6*b1A_PDDrVFHmDYIb4KBFR%_dZp1CZrNhh{ zQP&fbX4eJq-J7B+r6h(0ucg?C0gea8n2FS5L`UJp_WE|#1fIl?#7362m`YeEGS|5u zKi=z}?teXJLPwojYwZReuwhBb<9AnL{|DsZu=hs%Q(z3(hXuAw@2&8|m%qm!9P}sS zsumT3wbabqUL(iH1m+{tP*armdv1l^Qk9N*vQo*w!R@1B#!@Cr3~;bRN1W0xT(VQ# zOj|u2nI%S==SDA`+Vgso>kWW8KOT!Ci~QnJAPL3;F9i6`lD@UdbKmW()-_c7C@k?l z;_i*K)u8Ow3UBO|DP^RDAH>>{wbwQaY32%(q^C+j+=|%S=^|-h8X|r7gCBdj2P~r)RA(Q|x!%Au z#`-Q6c0^l~^58IV0Nezt^bzltqHK9Pq{xn3b@%7f~-SX=0z|M|B(BBEw$xQ;d zos0+`*VBDKZ4_SCjBd%_{`4#(2YY)m)cLzZs{VxuRL}_nbw@Bb)F5ZZYzP=?r_8$@ z`Ot*m!shggU2|Gtr)qAV?Lp-NfVQO2Y$}TjVv~_c*Se0~5J+1>IQfjP_%T?4l&Jp) zV?mt0RMifj?91F&=HdJ0Kj7TC3n(rrx$1dlf2d9Q_FMB&T2_jYBkw|KY0awNlHbt@ z^+Q5LIQ7V*Pa-BJMrZ-<2XneS2;4A`;-(utdIW|K8-mB5cos=XNhYOTT)>5eg;>7g zCm|$9j2wo)Hg7QrEe(k(uR`SVprsmtwY8?g!-dF$hXm=QNfWVQ!$w(NdW;kM z%ir0biVFUf!-g?@bZSQY%~Uz9{W5(y8yl-C{WI<}>mjGdl)8g)pDy*C#1)A)3k#|x z^Fq-2Zb;xspG!)s*ktmsC@wAnps9B#;tb=3aoT$Y9m6lRHMQdNZmvK{a zXJMh2B(iU;k1*pntSl|%JL^#WS8b_!wEDGrm`CL`gt5xY`QRV()s~lKnAg?SRn}=r zN~*q}sy_83oV#@CB&sim{yr>RNy4{UDlJ1vK@mLLw}9VG9TE4(4p`gi@`;2{Tk}Nx z{X4XTPxp36-Fp;A=6{0xxD-*X3mVu9;ZNU>u)78$W#>VZZM3l?Wpx8Z{*%vMeKTv$W9JvqCT7m2x`u z&5ANjJ&@90GA^icY$5iqRr8A~pzeLvnP^m0M8L|BlWZY%xkML5m-);Z>lT`a&D=Y zVoEs!657Cub|PWZ9*yYa_$bZhzO=U1h#g8Ebnqf<6cNJy5OykQaAO}Kj@#^X|HP0l(j5Pu@m1JF8`t@TW#2e>IX)72saoHa^ z?@Z4>_cR=1!YtzQs8n3+ak}yeM zdwqc(Uox(rM8L^Yr$t?Nz<~Zjm{OI~R9yGV#hC~Lj+05wZd9PSq!^Yo=K!h@;??p} zTdRh=s(oF>uom2gcmjlgC2`F*v^Etk#5T*ZbJuPu=HTE^BP^IflcuuY#ND+18VU&r zTlSfFm@xsx_e=^8;hD~N>^JlBkM$Ea?4zkVRQ-UZXxwYZC~;m5ACv|-qVjSiC#T@v z`|d|xZl2g-_U(5wramwk56+y9$cQMc{Oxy{NA`n%tTQ?~4iOPif(x3&S9JG^HWsZ9 z>=XakfA(1=eLd_p66CZCcAg$oE`WR#seWm7AG)xd5rcK>hC4t-{4|3+)FD2?Q>_Hf>sA*svjJ z)~qS=^YZb_ufHKXD_heXxT=p(Zb z6dWYqmoEKAk1(*$ZQHcQkfDPR-m(Qs%gV5O*B<=z^RGxsO0Ka_2Hi9Hk#OWiGi1me z=+M3$oSYnG^RHX~2lgL0BnK$RaLkGjs(n<)^k3U|5 zq~v7y`}>K`KZ(S4?R0sk-7gFU=B3B9j~9Om&I=E%r=EHoetz}j5F|nM)zWV;XwX31 zdTW0;IXmI(*>jjXcb;5S_3MXV+SL1DXKyD54*M1x8;8$6`%-^s8V{70z?jh^F?{$? z5cX%zoWYMj{(>V%k4gK4ZM$}DarfP0@%!&BW(-9XNk1v;gE%VED z)46j;Ap)(ftq1EI@Y}I-H&(4$tCt)T#x5?-7&&6NNY#CPd~xRNS>fz% z-@ZfEv7#wBuK|937&B(1v|(#&CwW(|UWeVg_f(r_UK~`dp_)30(l5UJ3g3SFeYJdq z3D;+b_U&a2ZvJa4^78WKU^Rvp59x~H5}~I;#|}j5-Xkc@E2x%@$Gl^3Jy=*q05aqG9itwlp|`a)@{MxAL@6ldk2Ff9|M89B(g5QqHu6m)+3N%;5cikROv zA?tjMNK>hT$GX{Xrrf9m#QglHAdsdIHrf2B zG?aFr)>iOr-9+kYJZS`|_DRI9B)0$;zFj5bCBoNW7+Rd?ck+l1`1 z(bb3vB8~RG-UzzA7d)DU!IJ8L(FsV{xC`k=&+3tHBHmsdS|VUTPsFU;24Q=(s^5C9t3b*24vMzPh}d_ZsAl z!?~}1le~rmUhuGfaBUm{8&5ZxXU{gx(CXqLEzAS8f~Ckn^`9=Aa3neH8gpa6_>*Q=1%bG z))vt}{|Wb&jo{b2qi7dUA|LzPrmB*8U0wctyTZ47J2?7zBQGvVh%%2B4Mm0Z>}Nlr zEWhe}RB6=27oKB0g9v}#kBu5NlyjBe`JVI1`_T|_Gf~Y|zv3BJT38HAdwYb9y90lp zURZ?*APsP!XGWB4kX&8i(>^#{YWhIty4)H@7wJg?e zM`3D)&YIREV`Slim7@r0qU5AZ=bnO!_9ii#2O!&($3 z>Gl@S;PP_VxH_ZBlu^hyehvjOi3l3j4^Bb;D9*?PZRC^w+N;4ue<_s0DI@?vxA%r? zl z4eDdswENM&e?Kf-v>3d%Sk{oKd#Uzn`i*^H{alNb0@6+|?P9uQ=h|dnjMt{D+tM;@ z*suvCNXcYf_4}G?P4I4P-nj2RDr_yO-3jy)$k7oU9kS&iz$?0=s= zy>aK5QG$2H#>L~e-+mVyhHxVcXdU8tFrkd%aD$B!dBI|nbl_$($&xCa|IZAM;R0S4UK7Xxp@U|tuU0f z^Mm6%b^45`fE&^a?7Hq~HXMria~&b@pCw4ik?Gd0v#5rC_W4p#m(9yBKtVyFa3{D} z?zwxM5CX5f@_H3@0{%t`Ds|JlcIhm-_DM-}Zlpnv2Sc~6UGTw&@4(&7O>7|fu4j+# zICuWM9Eg;v9z6KB6ySlobLTDu2M6Pxd&UXDa^XUR$*CwQEft4K)RpJOpOTy+7yqrd z_LGhB@T|v>lanh%AMGD_0MR~`hUqPuH^bmTw+mrLeR~q0+#FlCY?HPI47f$?A^98a z8%Q{I>evCd+|n1*raz42+6d}3*SZS)~y7#JScc5jT$uqk3RYY z{@k!hHZxTmdiL%CHy2kyK3P?}cJ1`AFDxv;S6?ra%Y}J+_3jB*7Z-ir_U+p0y}6RZ zM0FS*GCU}nG;Soe1-$e~kOuhsVbGx4rMJvO1AZPjyZ{{?o#cSGcd!=%kZQ9L5s~=n zt8evvF&ZX@4jnA&wP|S=g`q)J5!z8c^w6Wig;W>r&>@2maUoI;G7`#cn*=N`530>9 z{puSzAbC;s?Q@gfgVb(HUa(2cJgKHlE==%WwNqD3>AXCnS=pM87kspqij_qA2H)11TGZo3sNS~QpT z@4jm+R;^kimy5bI6g&vSR;^mf*Mo=tu6D4ie017VoRNjpeaBFLXg>tq)(aPwuhrZ8 zseC-7%kn89w}5y1a3rkXh2kvQ@R3VviQ{j6E?G$=5H2c_(4#66rGQq}R-)EMM2vQU zu1!Occ`5?7P7WXvZee311eHUuKeCRVMcl6&<&sr(@ku1l*3%6g=FSqSE{QAJ9R}Xq z34wjP;Pl7K5wU!&CXsV?f=}nxu(Y)mn>F4vo~@gSoem}4MVVQMT(J(Q&v(u=QG=hisz_yXj`Bx(}WiV8FuKNKXKX_JEiLlL_F-;IS+FE_|@h8YMP@AKQ zX5yCJ@a@_LVRzkuw0%cVoReo*l@Ph*MJ1>xDuGjg54_s75EWlidX~0UNZ$E3QnnvL zg{1{7?W|E=P%M&EM}Kbt*F|Z_yC-hxCPOqY$_?3PC|iI;6b-p3aR!Nom6$$H~^hokX* zBV`W2j3M}G1}`1S4t-_EU(u>C-#_66${;gHUum9@1H z^A``F(g<0q&gbRh&~xugMv*#`Ig(!_XA=qk^uwo7T13efnM-+9@^Y_pPx$KAgtd#K zFjIXyhNHBsTqLI43sJKFOJQMaBLtw8y*->m1CZ|LBOaCO_3nhS+Acli;8)92^mu!QXjQT3KG&_p@cM)nmXDe`1YIN*}AEyw{!iG;pY+FNSHTt4i~+0 zlO_$PeQa1TI=uFXXaW?ZW}qy;0O5~MLS9S)T$_anBQRy}5m;U(#>YFOe*OA*;_=z| z;fJ5`=Z1}XJcxcWcpnZKG7y9AxE-&~dmRZ0$@p#6YBX#ZCIsncOFj~!XYnVW;mnzH zLP#3lHJ7tI*pHbrr@`6D39O4gKr|dL9|eVlA_O4uck0v`eD~dQVG^r)$p}7n{G>3( zh`SKqGEBTTd-v{zci&kc_?70J)e?PfzDXPf-T%N0ae_$L6KCw)xsxzzXp+U$xN&0y z1_g?0DZl@*euEG#Y)A4o3=@@2{?@cfV*~|P=3URcWo5Dkspi?dSyRD3*p9W8HAamZ zE^YAa;UDn>K3R8o%a)?n%Cnrf4ac#3#Sfspr7?_|hr});4N#~;{FAV_ZNROVGv`%& z_x+C|H6^ow_=dfm9e()nXK9;d+1|k01_)ucWXb0uFrnWR!ia(%s_ioMzNweovD7Ma zc5xA=H{Y`k!taIWpTXF%qvbqFOiaSfH}@7*+!oE7WBwa&Ngam&2nYUgJiK#PuU?CL zC*Ff5O&Wp3B}sp0|gG0tP@8f(aDGlO`0?o z;N-t@zKYh3dg3nxCm`px0c0E8_}4USTQW; z0#pl#BjCb|iH;S*lSH3VDdh$tQa)qmR3S!x`DLYC(nWm~s|Fqkt2s;{P=O0KmV;NFi`!v)RTSa+xI3p#5QdF3k%+S2U(d}7&>$io_*#?kr@89 zd8-^c@$vDPIAMxhRu4ZkUFP7WmtVo2J$qqeV=J4K7YfyzL*9C({tcq@MR8Tom6a!BOn=E=nu5fOpA@3~io z#mnP|6&jIvsd4f!d1JxbSoPa#sf(B3$PvRZb=njhICw}Tg=)@ukr*b<6)y!Mc1&Dn zlmvhI<<|%eZGg{~d@R!R$Depw4m2L*lsqc+A&!sIPO3yv3jXT6`N+=BM%S)g@Yb8J zi>eA86Hr>rHpuNIG0L_1@|;(tO>*_-&6_LxVf`N)^cMktwfVnnG+Ew#GPLK&9I=+XR6O;osAN;N_!tqSXfz$lyvv(*G28k+Qk9g7rrR#$*8D& zrCMajkiPKh*aC@v?Zv4@--%5aLoc*>b}AZ89EQZr`%##Ziu}lU?3wkt5U0(ik3&G; zE;#!7Vv*F6xS$8m(wscK8s3>tm*d=*KZ^u~65FOzMrqOuG4$sPrXX)?Z~Eqf6>tS`Jfw?Xu;n*=6Y@7|rlMdg)J&Eot5 zJ;A{B*{)q{Aw+qJlk-eQ5E)TX(a|8+StUv!bIwJJZDrGGcOu}no`_ghRf<8Ph<3qT zGY!VvhIVrv6bTXSPIE5Aq98U25snGsl8gDG(R8KVw+`wxHVf5^ZOQIinN$<7yNJOj)K@k z99!@?3gVIlZu#-a;vgyg&`Io?Iaj>GI{12`+ea@}s$DAp=$@i#X<-4!0AC!Q_lc|l zY7vA#I#Gx%pRR30dP*$aqwbT~H%!2YM-K~Z{^>;UL z-bD+GgxL_gZX3=oU5S$X0tDUC4b2|B2O)!RM%=pX!nmriun=joQ)nP!*X_W$&woN` zZoW8>Yw_@SO+DV|&N6P#_&d##8q^OKgq;%4Wy_Z1#K}`~FOVR)^Ul#2F?OllMNg=Xjt+SHo%iwUufNH< zCSF5kG#U9{eDRgs(>%v$7sx(QI>6cVy;vaDvGPFt1bMKPaCC)`@HvOkidyeB`A}(T_c%~D-VHWmb?b`L&wr#sO zA^P~E4+K6`vCYpf5F(Y@Z3@?B*<1Sc5&Vu$rk;N01;ob0p<$yivCpLT%=$n6l!zC` z?W*sr>tcF3A|j)NSfoZ8nGMwZqmK|0gA`6JTKK+6Um((lfdk}xqhR8hXJ5ei^AQLM z2^Jez3VznCStocm&%%`}e-}K=)zuB3ezH)s1SU@I2TG@(XYwLX)CKM#W&&s@0;p%7v}&CmOEPWi-9?a+C8=q{ld_ zl#qz#A;QD7w4@Xb8#WY4#QODriaH44keXV8_di%D2P-AP)M>9PGQoN_Z{CI@hsPiy zGEyXW#8#-zdjFLBM0!eTCq3zsYf3I1Z60`VGEudLmlf+_;^D%JLgnRQQ9Z9_oUaZw zmg7ajxnX{8baKI-c=A~pkKzjQFk#)yM+u|4(AZXOY1_6P`1I4yrGG5HV8J^g5hn+a z5`vtZ$l9vV|IR*eOysx{HtYxIj&NXK`8)qqzd0UC-#Ip3PUp{G5O}TpZ8duK=!U!Q z8Y_n$Z7Y~4`L0ZCD_2x|8JdM$J=Uu(80I5fR`{y6o~ca>dZ-G(Os03ZNKL_t)e4AjaBxl!>r z`uZnmGG&Z#_{sGzEi6J_WE>JV?m^VA8zdx0m4ZfJ=sC9}J6CM|7+!^)C9zhTohxG{ zk!Uz(qvGO~)vIlD6ldq*+>)Qfb1xCr8GL1NkNf>nxNFByik({8@JEC+IhIay;W0Wo{7ZyFMk20YOE*v_rJs|anRsC zaBmhSM3gE|A|!FsZbba@r>OkVi*U^Ee}Nun9sGR+Ddt)t0=oZ+H$hcrsyAzrnKUHt zI3PB44nCeDC9$w#_>?k~6qbm(AXN=ZGqP~_vRON&P2hZ zWn&?js4h&&G$pEqX&HiaE5x7hfAGQSm@@fZS-)I!pMSnoGzX~aMDDwBBEd;VLcxRk zAawLVByQMkl9;C&DpNrJZm2(^Kk5&^MVKEK51mBhinYi*O(#;;()V+p{RkrYTHaex ze|Uf7r=%m}&`FVkXPt@Et44GE&>pckAWQ0}>Tx0GS?7d}{ZrCR!mYGGgBxtDQIeXD zLoY9s^-VaE`XJmyl37}citG{@i?supan*^AN?2G30UZ6y2E?u1CTh@B3yoQ`6<%Fh zi^{a9TbGr=qe-Z&qsX8BK^wM1H*s)9I zj-~~?ZpHpKKGKGxploiD#v*FpQwhOb@~G0*KI@C*gHf`I{uFxRVv_`BjI@b z%`ebs!ccg3YzY$XQ~}R97lXJpTM$ca1BPQ`-UBCa;;k>xaQqPXbP9)Wx3-cu`&MUREgA#c||XC!t4|Jz?YGh~kS`qTcJ;q=68} zXFpz!+=OIlJNoy{;xsJmu0fS`UgjriIBeU#6Jy5QgGrMn2oW=^bg&Q~bLYGuwS52m zkNE2AZ$y=pcMKEP(#DOOuxIyP3>rKTlP68YBeNe84V~wneG$iwpQs|myi|8M-r}Mn zJofn0qEbsn|9kJgDR&o%Jra!65aV4ou-Jv`)aW*(JTx0RKqX3KX}x6s~I?j8H0>Z5d)+%($y(lZ|Gs!L+KhT~?x`JM08 z7*u^+qqL9ZZ?k4SC)R(jz}LUB0udm8~UWe)~(p&yWBkLBYf)KdHHryi_wb<)K)2 zkueXY6{ZqxAxTKvINBraU_8ol3p4_X$Zbi55L8r0rn(^4p{j+_6-p6VH~YkSDbC0d z!k0vo5KN#XuK@XR$?)#nT08^WdAP#D!49qsg6K`7>bb)HYJ(F(J!RKnWM7Dbl|!ZU zQjMWFHy_E{_QP}L-SFIN=eBAv4Poo$jtfgyYL3EW4QTsKty}g-{tOsVsxRDw{Ns69l$tJmqVp=QE#str z$KPr=D^wZgrAj^>w()G@WlxoDdTO@w_JpOiji@VH+1bF(-4z81sVKadA&e^?AnXtA z*fr-`>O@hs*Z$<#4<9{>r=EUZ5PpUMW8xYhp7YK-lt`88)i(JX%kU1(FDSs5OTQ8G z7RG(2N-9-F=_pSTueJ9;!-q)xP{Mfj+ zhW5j}0}T_;Su%fV)--$8gR$eEHqfU0RpCgc<8nYmF+> z7cX8k?YlwOF571ts*J9SCLia{okLDeo<4d3_d0P~5~TE7K~sggB(|x>t=c#KuIl5x zK(%6~vExQ-s<2j?14|P8Ou<1xmoW~i2Rlgq!lKI9(`=ux=i0_u(y?fy2pI2Tont@>*=FgQ7_~&nz%C@fQ zCoXgnnzs+U4G%mpN$fgFJd#+Vt>Q~BJtxvk8dsA5R2xTig7k&AkB@w%U6Wx_3!H?l zp>&OP6c$u>+@i|b+1kkB<{}?3U;qvtI;@Y6#60XXo%qaqbq?;hW1vV-sXj?*si{Ma zWsLi6{9Uyz_I3bVoSo6Sb$FF>l$<3dCTfUoEtjCGPd#~v_rIkt=Fgu8cXu~&4wRLh zEmB!>t?EXmsami6si{m9iYGP_yVoie7HWr_s*iA1>OJb6dU77GRZ=zalIMX*8wnDk zDv=36uCj7=#eBS&8A9gXd&h(J5A-a}KQbGrQccw(W5ki;QER8B!<#4z`;d{5C7e?y zM@_n``eO1a$Z!rWe76Qvd8Ep!BsDPBNoi3<1iT!Y9jnhmemm&BqGXk^Qth3m|r3Fbw}B1YR&X}k)n}! zG0{+21Q9}C`io| z@1ooRW54Ikd2RIlWD;pydx zPd-^BS~m(&R_6%YVOdIQC?4kg)^xViwNIj15u1eQUp9)zT!#JOIbxWoI?KK=)-hGO z6E^RIowFnS2lhhC>Elp;a3690MO9l8Wv24d!CCX^V-YgAFJf13(bRIU@Lu736eXvl zOecji?CX_$=E|ZZwW8yT^&i6s7Nb_U_X&e5>`ph8OGy znf6o>zWc5_Me~9LD%+vz@RwhFDh_mh{dJXSMH#P6YGu%_kE**>i5xnMa3G z)W#fe>n&LH(fi`Sj}9jP7uqB>_3OX-{y$5Qa$((f?|3}<Xz41 z2t_)zQsqpwU)Oi^21+79CDu*5T&ja;2aEcJuGqCWvwXucG^p1kt2H0ygg^g`lOh7i zwIp2czki0TXLV4jxno(S_RKn{`a-8eH0%!!4ipt5I`Mk+k%zEt`wmfWQFSms!v@e6 zhaQQk^36-i)LLMB6l~Jw-G78uS zI>~{Bs1eG#He4&0rYQw!tw+zfJ=-I8^=6!2yh2o&IbMdpXgqOPjlCohRF+pzGl6eq ziJX`OaRlQL-WcwU>cgj7J0W5vcBqc1W&`Z^vhS8l%w3vM(COKdB_GL|M8uU&zf7(r zD>{nGLBw~fg{Y?2Vo8idQ&ujHT6}x7mp(95hDeJ5WJks$`lmlouV)9?`*?^0Gv@|@ zFr7C}m>z!JJHXD%Lvy~x?PvsBQ}%quz+(}rh!eioiXJs?qo(g%pW;}<-9?x)`g~TF zqRLC+y)H>xf)nU*{Ld~7UpDYor4ceS_?9d($Or5Dmw77Suen}?>asAVwl9ttI zVbxIPTD+$A1sz)1dAf=tI1=ibN>v5yz1^!x`YxwU;wpV^?k&#qcrVe$l0G-+ZS?sU z<_Ob!%H;ddyLV4ayzhSO-LqHLC8bVW5B!Zbdh~8jmD<&7*2-OKa{t%RA$8}`j{=

vtbt zpDMTq;X-_eNmKc)tdWi&33nzwY;A07m7+4ADpOfgz6r5SjV`VEfeR%POAgzKFiiFtO`RG(qp=Fe3jaP>Dw)%yNt-?$)oK+&*#?6~pxX4!ICG*m5( zj*b=k!dbH(!;e4wT+O>Ik!~6y^RS{FC*6B1{Z=< z)Ns&Tocj+P6c^)49hVz|iHlkt1cwhF74=_oqFIIkoUb%lTUm<4kcUg>E}ewfrl;17 z%q-b>GiOW{LY-s0)W$MypLw}qNtos2=3?u%9bzL&=RpkBVobzUmM51~i`PZ945}GZ z^_Z&B#_jXFVcw#m0+V@pLGoZy2N>((cb3(ipZeyRM{7@Omu>K`@?G_Q^yt|`Y(_ZG zobL`D+KWd$+D7nTq0knjTviVDXf$ag zJX$moXGrPC&T64v7^;HyUd1I6f=1UM%E&~Zjh0f;A~UI^6nU{paH!`c_GWY#LYq&j z+O?Q90iEA}26O^sIEN%oB(@~geSN(of0cT5ou%YP-v=Eb&Uch<$a}__w6YX+x}uD1 zxV3B~j*Zv{{@J>@z`til3B!^bn{Y)4r1F+~@$hNnMQV;(7&?M>vxdw8nG;>O395if zV(0`)Z3#!?HB9@|qEaMp-6x?k!X^%bbNv9M?m3FWi&@qB$~De4`P}m_3!+NfAbNQI zZrN87+mdkvO|3gof!%gc!qm_cG1a_DK#&>X5a5eu58Z<%_m76PgPp)kBtO&$X&5Zh z+M$ylbrv};z zgbia_D!B0}(ry!Qle}UlsCfux`&?UuG5>^U(4c?$|1B+%pO7qlVC+@Sd0AnJ*aOoW zEuCL!>Y0~crG^-mV#A*sh3J@g?-a4`BEm+g!tULBF=^5RVrTdJYK^E+NE;E##!VVw z&dV=|7fpr+V~CDxl_(7^x|o5;AJ)Rw%~|#?=ZNZYRNZedqCdhPzfV-MO9~1#xE7bl zKDPDs6pai@M=7DHKeE3#5%Or&6oz>n{e8sI8X0B9nc3pGSoNQ07tbNCIa_x(lohIT zrSj}%UY=8$B$JGa3i(XW(8dy7=H8Yj}3EZiYvrX%y3e{RgY4?D7oq@NgI0>-@P35~U$CGfVE} zn|k-WMAs~Ian%8u(Qpqayu!GB9x%lcgPnN;q;6ArdH>U6Fk!^R`&!{l#%CqJ^LOKV zOubWsU~~qmOOvs{KRQ~ZPZ5^U{G(V4gPL_xNJ9+?!kwCi-Me)Wm0OO}II+L%JBd7M z&k=WG9mLgC;vAB}&BVE2`^0V1(=!FXCNqIHrfTfWr^YC7C@d1s%}+e>h~Q6L3$*7X zF3YwR98{aE$M_x3I6AsyqTMm;C+^0-Ns}gG`S)Mrrki@|G(9An{8QtjV9L$aO<-a? zK9!r}WIHTV8-cFMn4i@l@Sl~C@<2L%;v^0qIVy(}?dGUsP7WQ3C=!-y)~*+4E<}>l zB}x$R(j-#PIvA&ln}lVUxX`&tsaJm2U3cQ`w_e9rUo8`Yj4C5xp`q2GSnZ94IP;*o z3sqcHvaqm1Y;3GZt7!k1n3N<&@q-87A+fSlzPdg+4jScCHI5$5KK$@KeE~;qBusD#KKN zX8cY=)fvOQbbdewLWxOo&b(D8@gdS{dO<0-k#MnHd=}CawVY|AZ(@nj5;gwfj#=d>~#aNz_cqU`QSgj>G$0B!c!5goM%|cmunb@vSU4?mgk*)ge zcic9hKj>+XswrfYv~ANyv;c^L(a{3O#*2Xt8pe;mOKd>sy_5_Ua4laL{?#}E%h0*P40Z`dgz6PiDGH|%^oksq53 z-(DRMcv~-I96f`Aq_isM1f}1MeaSd;&1Q^+Q&2t4ev=pZzM~ouOtr?=O~pQxNU3wf z5Fr5hj^klJ=?#{|FdYujIZLytV?ghn(Lb&iDH}t+cy(xj#I5_qAq&;-%c|nMdU%@p zKvluKxMXRUUPRds#>8a&L3$A;(WDXyB}%IqK1JdcmY2i1VX%1nq)jUON=dPPE_f!| zSR!@*2^3$$;?aaL6tevO3cwN<0)z!!w2F zgGyy(rD)u^k$h#Cu?y!f)Ot>+vX}d$hvS5eyAga_Z@9NE<)<7LVFdzo@((;z8Oe#1B!wY^piQ$|JG1^e+FwWW% zUhP`J+SyUgBu76Vkz{&zX(fylnhs>1ydWATTA|wilNrdpkho>9*wB)>=GM5r*dP1d z+y(9}8*5Cp+N-LPgL6$MdN02`PjCj}P{ggY^`U75?caYuyutF0NU|cPhi9Q5%hf2hFGq??irP z$UPEAy?XY*6OTV4nnS&M^~AVwqigIg%SA>+2{ANw>?j#G?XJn#+`W6Bo>*c9RE>>@ zh>|??7sC7GtUm8v@ovkt92y#mfB-)P1qDjG)J}47)y@p6Lz59M=Za`a*@@?4&IOs_ zbW%thg5Hej--G=-aNv;igOw2u^oc^daE8$%K{a~RNFk7kFVcpVOor5yRQb$!%{ zO_%@-;X}J&wk;mp44}exD0QU6Gcv~Cm_JXX;Dj~tXF3jIInLjoe{R5i_l*}PnDpC1 zK~h*)sKgZY_p2vNFJ&6X{?gycLl4amyWa+(4Ma18%mc=nXRKGY&HNN9FKz7oOthe35Rp?Z4P=!JYdO>DC3=;)UWJpo7gSZ-TQl6K_`3%dLKUamorLoMad9S-~ z+=%>R;$pZE5h-r03kvc@qGd{Th>N6I^Ja2T(IYHlHgeM#CQ8E=F8o*|gXE|@|NPVP zGdCaAlIVWiFpwuS7YVg33Hm-xVq_2!%J zN`U6u2M&<)TSl@`1)Pd?Iac-ZjK;@X|?DJdzF!;S~AahgA03z5P@ z`Sv@83E`%&Y9eIh4$|wJO7!IW$tU!@s~Pcg{y+HeV^ND8H+D4m$HR~pCSBn3u;mz4 zBCL5~5`L6&4jg!^{PA}>Wjc89kX-USw6<*BF7ddyUdRnpi7FuU1V=k)!pzdLT!`id z_3LBU@F93@-W-)xJPyA8`T`;14KHW*gOZLhqeqGKe8=`(HL8;khB2{mpiRz{DfbCe zhIOj>QjJ+yS9kD3i9+P}>rk&-JAD9ldWlWmeo#VbgpC`7Cie{&B#c)a3B|NMM{x4} zZ%`&Syj;%^>1W8`J|Z!tB&;YcQ|dVX)k8Dz>Mleg z?WsEtA>#YBXfU!r+Ru4N2&l}{kx1IIAAWr+&jJ$WB;q@~{+JL|l*Y&C){4as|t2vL`HA{rSd&sTw!Vc*neBC1raXJ`a^u^v8rh>mfj%fYkT zfH0(#H0|JVnQIc$+G4OkX?C7?NNqW50(`o(5fxpv%NU3A)Hkb;zW1nvo}qdsJ+CsH z4P#0A_3Eg%bI(sm!G*7X!^M5agwR#}1R$Jj=k}@gbDI$+f0}?w9QV~ycbS^_23w! zIb<=Y;<7#}LX+ngkFWy={}!*v{LXuZ1c`BCzD5lj%4^2t&dtk{d)GK$UA|jbY7YGL zWpwd3FMPim9l{&wp-zUBC6YfCTQ3~j|YwVb!?Gm#SamiDoR`^>PuOMPZLikRd* z$2jK1e-y*h@J=AEa`fm?Ftpj4HS6VGG___f)m}}%8LmwdEF^ZabFw9SO>2{Otc)#A zJ5xqKpc5Ze4-4|1OGr$_E3eMS^Upmc-og2vQn}w(ufedPL#p6(s&5=KJ^Q}@{vxrr zri4wU88c@I^OkipN#0YZB`*m(dK^}1`izH#k<57-F=D9TiR!l}o_JJ!#ON`1OJoK1 zonvQ22;x45f(~Y;r&pCINhTASiSQvY&UP4nMkNxhyw^Ei_A@&t2gFNXeRYn+EM?qM zCgMdTbV=N^4#UKwn;v_8>-ma_4+&|e0|yUc*RDMRW7bVo=x3gNQE;G1_e})$dHJJMkU&0G)8EJZv)|Apx5<{e=$~ek=kU)=9#belsRd*24Qqg@D9*SMlCy zx-@z6G?{ne<5U@b^2tYqnNNm36P>mZzap_~xIWkqw*BFv#qjd>7U!09aLL56?b@|u zy>oOVVb|_GnPj4gZFZ80ZQIGjnV@6awr$&-WMbR4ZQDNmobx{4ch)+8^jf{Ts#n)t z)pymt_rCV;(u`TU!@pB1mm&92R|kh{zfeU^M&>8e8{3*FbB0!Dv6*Q+rK;!{cghF| zA^(ab%P;TK(&eGS@P4jBN}A&Ts+Gu=!OukNK+Ve!ASySu&5QHZg+_2U^l)7?KxqqI zFCmY@1@(yupOd+MW4O7_rE@C~i!$7c3mD%5p3_V@Su3GT13 zaSH55i;9W$_4LSnXH?P-rm`!yMp;O#XIh6El8a_LL-=V$6e6qa7}<<`*|O>A##5e7q5=waKF znQ>3_r70rzasGaJHsoL40y#^EiggEuB?vA^_qpTyd+J?m`?iNRQ&Ht5cDDrnh^Pa1NNRHx0md1(V9E9>yHc1Ip zoVowIinlC@rg9$*UEFfUE=_O}@(LY&h=DF|GaD@ORcX)&W}Fk9MtgI5c*y8`q87)G z*D#S}u93v)LwiduC%Nbd=hE`2S-TDX-qd(C_pW`Qo|nwM_ZiYIh4nKwx3aE^dZpWo zp_)^?%wTcheI0;W9G3zHf?G38Uc#oske`;e=Nb{gdo$l(`h);kuY|~FUu;O) z6sytdVi(|$ccz~Nr6L4^AysrIn&-kP2%bpyd4%kZ4{hy@oA93)#Hg0#2GeUPX+3ET zt+yqj*wG@fz1rfm+RcH=h@n_N8yIM{2Sp!1zbpPnlg4Ck-}k+c#V{uZ11t7gP4bqD z*(P+p;MSPYMyqxcQsqDm)Q|Y|=qt=?qt3YuGb0cpKg-WGXzP^RP;jfpM=kPwa+e$U*h3Fmy=?WmqazG05lI@kUS}MiXqW_vKaYhKTs(FLICqQG z%y6&|JI<#tF!B*5-$|0#M0{y!wr78d@Yo%R44pkO-El1-`a1mMFZI?O=S5EP9j}W^ zCne3|tvGLk?Jg4}$_)5$baQZWD=6P*J*Ph!8lA+D1AEZDxP+5d&;7*>)uNzL3U|qQ z6#H#vdfI`{5!zfq4gq$z{Jsb&YKOGbRw{wQWFeP^kJm4ff0%#IyyR9GHszsCGu(!Ns{VF;%1vd5ry5$ z2a!}Wxq@Cd>prjJE9S017!~KNEGO5{iucJ^Z030+>>PkdP*%-DDi~{+@gT{U9P^ z;3VP=8+X7juz8?ibILr+#!CsNfY}aq(vXqC@(s5g@vc)j;W_w@%zOAV{72KTkQ~;Y z1f$SBR5gmreojegSz$xv`cB{i+fw(l$0dra&~7k|^ul9x*Nfa@=%|VJBAg#?IMH9X z)K&WRX=Py?#~}fRL8QI?IB12Ri_JWDO1ol((ftUB`$L32B83?M3Ce|iu%00CXfi~W zzW#x+zBni}%u+pl?8T}6t(T$p@e%}}C!5}$OAofl!*VYJ@?4VHQVl%sw!PtqF%l8GG;jeeyl<$J<~(Cvzsdida;_i@J{N z3*1i8MA%@QiiP-s$+NN(DzNfRG0Y;yd~l=HIfTgjHMZ}p6?iE*Liw5P@fd2K2ki3NirTwQ3=0jMp!FILuWpSx6nFh7FW|gi#s$@*9 z^BfD@d}r}ZQk+uF4@W90uBBY?cNJ5KhB%jH(g#UQ<`-k`^Q$aX0Z?#DFh|+8yF9br zO?PYZBEpaeH+YD^fWL9NuUxRr^o0umq4IlYj9`M;bQ<+&=Ab~qI()Ja| zCv#}$`9_Ihe!Mx}c-}kt!CcvIc_V#wE|CpqGR^;QPfLDvIh~sd@g#Vfy!l4it5a9S zot%-{6vz(r>D$%#=s`v8Y0m41z}0F|Q9i7OmDkxMt`nr4cD=iKI0q|ti!Cqsx}$B5H)xR1roc`?72{t1I`6VqQs!OCRF2p% z!FblbepAL}RxORnV1j89cbLQHRSbJ+xGsP9BnAE6MIymz*&zAyVvlqu_1o+e4K8fjH-k=K#>^80DeptkGR~Sf_ z?T(l5Z}+lSl%wpcDYvxz&LSpK&;Ow@nH?It)0E4>`|~BNjD)seznbHK1fjDX30r*1 z94?fL-S*{&E8TCQdgF&`-Q(Jsf-4MGF5&$5TMOo+b{y#65&dlzn)M!ftr9obxG6vv z{O=zkxFol43mkQ>qE5k^3oPzgDP+ibp^OIkM_gB}EgoNb(6ODFk%&SEuC0Vi*wMW`iSYE~JF1thPIPETtSU0%4 z3(oH}eDljbr0VIAUi|3YoiL!q#~3>GKidw3d=Ubw)-~?!H5rfEETN|x*BfWU642q! zL+RV%E2bob>dD(`E2=lNgtLfstyIV=Gm5a=Dwv@sevBhA2ybr%_+n2zKk3^1pK<-? zv+n;4@c(-A>;n(REcp86{yGuB{{L+KpZ!01q1S&);V(s~{a#(19>Y~hH?L(rxEeP} zO-4I zsK+5ZE2G@59yRd(bRib#?JH97YGy;|84#ubUHs3l@Lvb%Da(P7O21@sed3_^GLQY6 zwP*O)utw3n4By!3eD`(^^Ng-qpfQ)nnWV<4&`#Atpq6-_G@@@w72nsyE=9F@9fFheuO@W z7FBSiJ`)lp(_wtY*7GLXtYa2j-J*5u^*<*E!L}5W-oJl-<$J%PitBvcmqRNqnkfKP z%yo)LRg;&ZLR20XCg6sHu|2 zOGW5C@RNmnt)%7h$`K+Wx@xZF_6n^n?Wb5yjrI@BDkg|f>h&t)Mn*(LfIvt{JfFvw zdS$B0i4jjPHk~gBAZ@uDtJtrrQZuD1@vl!W#;b-O>K(@T=avSC^7Q*hn7X%#Wuej0E#~BR3-@DMi~pT^+qXov!bpX9R4`Hb`9j!Ef`WcTlK^E| zWc+qK3i(dV1d5HH_EsvZAbt|LOll!=>8TNZc6*`6{c-Tg+@-j(G7FpKGBhsgEY9QD z(h#nR~J9f%SkRtnvai;016QwL#{@M;glisjE;Io zj9f^-mk^}d4`^?1H@}lsAJ1e&_j+9q1TD%VWiuL&vA-K)$av|(TDP`f5_p`O0m#Ty zNY$%B!qj=liyxK~q4yl)>gW)$h8ih?*)~x+vtp$mq7d zes(0hvN9GkB{bp6J80Iww-x#E;NZHg4D~eT7!lO@sJ^n2&%%v4@)k{E|DplnR;!Xh zQ&VlD?L%oIs(}_nerzsFVssMj`T3<-=m$n1KoA7X%^7RlbIU*=3P`97(w!EMOr(5yh zU2(=&^!hp;2-u@Ae%Nb9o?2~_!`J+nPJJNy3c^-~s?Hm->6?)9#@XOf+jK=C9vyO>ec8?)3Grz(f2@|X>phg4I%P;FQMo1 z6o&yjIM+}-;zE)WccPeCF?CZd-$3T9n?~&t8b4prbg#Dsn_o|<|Jm;7FJC-v_Xiqp zkcz{FEZ`tJ@7|01iC(@eveC4iVT%-!=b0%n`tO_DaP8a?Gco@N>wD`10>NF*s*GJA zQJd01MvP82ryFBT^E7PMRD<+t>pybTpd9Ma`z~8>=6NpDJsCv*Aje@*Kx8k`Qikp7 zm{nBXpxPE7R~;S_g>9&aJu}}gjPtqU1+TlO8J6nQVPCT0>fhGRyk(*yrQ`&Vx$yjm znIK4<@L;)$EF0!?|L)zsk5G@6;;h3geTXf_Y|4QBZ*T4@=y=rvSGT&-NF{S%^!!m53Aojjl$izb`v#`eIF2!LfK+?lQt@Y3JUQk!j+mGNa(O-;tEtgT6Y@|{)NO+QRF>*2} zv<}T;$l;r+)WHJ-q?@LRf4zf;hVlk4*2%cHI6+U6l%tBVgZ}<7)WBG07Q{u^+l^+= z7ufcXNss1j`lFr11o_?sdEPp;D{k51$CHQG*zCCI<6~3L_nVUD%U9e3H+h$&Nqr7e zqlFS70peVw-_Uq?(C<4ilxpIfH+rj$f1xwjZQ@jBZQlywraABs040Ek>XC}-Pec%^ z2S9@nk;sk%pM^5a3y&E_CprCGV^9dc<-_lTSyyDsWZH;^the&_Pu$o=@YGM!JFdqR z>iKj|s*$jbo$hp2Zza*rP|4oN;0?rTX*RVhExNTfR2^;G&#~8KNN;=liImPojN~0w z{fV>o;wbqcMm+*r#uzrYZAJ>7RhPw{_WQU4ymg%}if!hzlKgqkGbF>hbApb^oUG-P-V&q-u0yi=F2<@&@&X?I`fi8Tk4)T-p z8BNK#W_Ji!G{tg~@T`IJi8BzhL;RmWN8iom&(By-YecrrcQC3$I^W6l&(@NG#VWXi ze{g~ZPaN0>BuEoap)qv1Uh}szg$)}d$g&K)+0Jf1pa=z`{sOR(bf()`)qy3b@k`Bl z&_G1pu!wWzx-n-4 zJjPhTLc-p@=+>vkavOxND^(D9!x(M7L&S_lloFKvdVf2R$l|~=3yJQIo;vK&WqNH` z@!N`?G(~#vUr)iQL@>zTIfU{*?05Hh+X?8gOtv#5=mGeW-MOc0Dm>iTGYMjGH~+kD zC0E=3F&M)T0mF!BDux#?bVZo`7*qGvR6TdnhXT}3OHKV2u<2WVdg?sI{&~AAOa4wv z0d=;jVYl-7@XKLV3nMiMmd4twpVzI!R!b3Ov#LCh^Lh^%RU6Xs_J#Lqg9R1-1wVx4 z&m?n>@#7fRi^=0xw{YDkW3_?-)f4U8upNRawlFhu4t1-l z|BL$R5dY*lc`qq}wWtQ2`j!2Zx1Vq|-E8cD#kAwc%8Jb!&5s8Y@FrlxR!~$5QRLvA zEFiH{UtV>{#&L?9hnU)HK0)*{ZM*@Xgv(CgyMlr1e~hch@33(6F>D!nyx8C z=OcC^_a<>v651CN2I1%U#H^B81kTrP+=E?wq$EtY|3zEleD$EI-Ke8VtGjU+ndXTl9<5zwE z{gDIsK*pvVPGdr@`MA@o*APwk!*_%^Pp5N55dtW*o0%P4jE7bBY!WcO5sN^!S{ti5 zSwQ^Q&l&ID3t(mc!7HCZl71dY?6uE6eH5>>V{VP^R#mKOnf*|MWMvMV8^RL)j;u5oEO_qY482SX8ZQ{^)@{gdXhs{z@r)RB(hM+O@fVgNu`kB=YX*C<|5Bz^ zk6tyhm@#-&C_QQ(|J0+9M5O7BB;bX8TK5V;N;=B^Vh7<}1GXKK0* z3jpDOOn@?>irU`zyrYbiO#j=0O4c;7m7&WA;EyzWnw^F@PVj&TX^){uO`o59dHIc% zuow4iagy=x0*5(f23k&R)eZvOwbg4?6|%+pM#wt{tP=w+PD+>%G62z>rC`=rP!106 z%^xdxJUCM*-_@-$Nl6YWM&#`jkupHi#?Ez{7@914*jd*a&SsrlA24NJv&AEd_q6KK6?> z2)&&oKqObuP^(t?oh_9fA1ndphcrq~;=lN&;n=h={xF4z&7b-fwD+%CqoiM7AC2#<*9 zE0h%1zb_TG?bESIE{&^vdNxxMt()W<00m6Bx$MT7?kFgzsAQ${vBUxY+!t`(TW#ZF z6(K*GpR#>Iot@7Xt%ips`a+TWjKGWz50*l&{uTdNT%Ajjf2Ab9p9ony3Ff4OMJ@{y zf;&~U3M2+7hsAalx}t45z@tDud~XONXo5-;j}boHw^O(K>QZ1k!o=c2k|%DtmtUA~ z1(R_q?&g)HT>C(<30fDwbrv86%t zkcp<8*C+290;kSpdT{2zvKjj}zWBz~GCXWU4!c^ZwV(;(`PTUkh~0@64h&)Dbo+5XfISv=)$F%Tk5 z!zAA}pJgub`RZhDYC=cOzzP;?GreAZ9|zRozRmHzRs>!$de9EuWC<0(;! z&qc$$;KL>i>U199`|LVE{^V034htPM0@0#e;mY2?P8wBgsGnG<8Z%#9a5fBoy%6qG^Y z8OGG?%<#`eiTki{p|n1~Uje{zy`h1@y>=%Hg;U$mKNr)Jw}V3gZYz+7M!3sec#qXK z{P$teVrH7S=X`{dQg;a_XY5w}?ZJa`tUbiPgLu&*A3i09KDh^d@Yo#Ka>RNjF>Jjl);us`)q8j4c|8Vqz4}1B8E2-47Sty&U-gbCLj*^^ zF_MTcUBF(AzQj`^jZaJr#I5R51unC1y}NjROlUF6wtlu+yd(dZ;>CU1`1;)hO?g00 zL9zFWTZQiLycgA^Ke>Jt$nxCa z9MBC&)`5;!dEK$zY)9vIKJRWh(gyf3R<%7+ zWqQAsHSbM&07w`yF_$S8g%cR$+&LY{Bz^Awy7cSZXVy*iQ{;G(*9r}F$Jmifa-BJ{ zu(9nta$ln4lol3>@VpL#3r#}7zwpDJbR8sj!PM~X-DB?x7p0+uG+MX}0pv1( zFW)qQU&<^dymDNy;MJTUuW;e9_+tRvMMz+tSIxx+ea+{|lHm-Q*}ec=%Zq-YJYLwS zTg3ZXA_Q#weLu#2uL?g}tAGHVoaBZxR608b%%6hwaRYK9qg@FWE2`epA)uJF9k#xG z9mBN^X0L8TH!3uNNR5y!wqd9U6M!+FK7c6>z&v9(ACEb~LoeooR5N;s13+T&-nH`xv zP@z{{9uUzJ(fNknF_{&u=b{xoN|=)Sx|C$PT8sa8z)1h?grZ&GY!T(%{o+G^mS=mk zF3zt17fsidj_IZJx>@!V)_7TC z7Ps|(bDLbbSv;(~;M{l!o*GI4<{>{}V8j@M8h*U{ueB4@$NC~sM*xA|ivbBn_9IvWK`c>DX@6LNmN@90+IDz8FHmciw(ZXw| zu82}hPPSVXuQ)Q=EnQMltlPE`yvAnJ1L=WlPfBuaC`dSS+zC`5zA!OH5jWpuCarAt zo+E#sUG~K)Kz=$rFpv@Y9vv#*?L$2(T9wiDvjYJ;-i6fL%o1+@g3JvuM!tIt{XkIm zV!V=uxB%4R(i2fsB(xkOEz`Tv;l7hzNuWMEPjmEc)1gb><~V(Lle=<|{K)*>K4C3t zk-=b{Oizz#W>kL&!N(UsXMK6$5&wjh^WoXVkc$EiGaKkOk?y2tu2S;9b6CDY+q&Z0 zh_VtR%qOT)`hD`|1I{U?Vq@*_@bK|b9>prEs*qk1FZS!WQAu5L_#_1+K}ZVVElu{>c71(@xL$Q28WHyJuXE`MEaQb&$T>4-P= z!BlV9xUW_j5bMY+Lf<$TbsaMwn>XayZ=$@{8-+Y$g*#Y;iutAIY#!mo_&dl$OU+TA@QqQfC$DAQ|%O;me_?zrgS)2wBIn?LecIn%Tr zFg9ms&S(J13Pb!tsE+8xJhyme(Acb(!?!vU^q-UC(Cp8W3kAJq>h*9N+h37QrKA-l zWr-%TJ+fI~Za!`mfC{vQR(BPIFlD3ZOvs>R-FMC*LNN2lGgZsjUu{kmY@uc~OBX=} zRf6NGoZd2%ujIsT`dqT4QAmGT8q(<6eggUABOzVSaBJSHj`~g1O_-j+n|{38uUMyl z#>d*XyXsufoyd~kxNLmRX!$5_Q&Bj3zGlT5TDXUEB+nUg>*?CS%+`PE*yPz6#HHG) zef)!1vu6$hgj57nfrD(*JDX{3xy!4KeMm26vj5KClVwDr^oRCGL9qHCZWGY!J3=bx zubr?E#vhBn%BhfbR#k`=&B4SM)h$*AM}5wKT~P9qKDbAQM+rvE1r0S`353lNuTHNt zG)ORG>X|Cnr|viQi5sfzOq5H_3@hTk7#ooxNK1$`k_oXiM=ApM>~|^~Ec!7M++3@A zPr9EToH!_W!6}WI8@YwNW88T^)fDKAhvx5-xwBl`%B3WXlgWfEvHgMfJ?#s#pa8>X z2+&VDrXSZ{xH$s}E;iVo-)r1gM@Clq(5!b2R;{A4dt3;JjEN8q9`L7S(~Rv7?rvTa z)_>RkgS}Zza!}v5 z({B*N8%E#tPW8-(I8hyq{-4}6Xx?v&{b%08&{Evt#LbiQWC>250q8XNE68r@WH1e(bI=+k;~=arBNO`-mHdl;CL=SMIQsG2cE;g>c4ZD5*=0lkkTHcnSk zkI6|7hc)ek*}}51u;0iuYu;@(eQ^^C8Gj(zpDIDc3kFYR5(MzO$3Ae?a(F;Dg|QqH zn$X|k>nMV2veHu)A>WmsAXgigoWzPsD4sk(_jVAB*Y|Nn?ix&Rve=*CcOI0ZV9~0~ z<-aP)@%F2mS|*eKC3yW} zxD&9~-Osoy1l@!SLk_tQW7_0qz5FlF^)PKnj|t}>n?aLC{}Gfd%`eEGUY|udSNc7e zjqv@6XXIx9no}~I82G80jgW&v*|QTl!bM0cYsPf5Icj-ImDpKyxVHc1v6DNR&kHZk zk|peG0g40UDDeyWJ3LpIx^&lgag?Z#=`zM^NuxDwP+bu`m+;ZWX=Mk`)uAfcfr1xkTN3K(M_OqED@A`FXwgz^bhd46_VW_dKL|E~+X(Zg4lpq0 zWyx}4l#%K*)j=FcXJ)F?k9ZMMnD-HDw{Hr7qw0=d%Rw72TR`X6au&d4-xX8Dp6t)r zqtWa-&1J_`XweNa1(x|Cq`VulA?^Rt3f|_-N`0{(!-nM3-vGo-4jQ}S$(2QL++Gp8=&<5WiSK?{%=e4v`14w7w zbU$U7M&xwwUQ^W|I(gGBUo9S$(KFmEUJmr6rz{xQL!Mjd+uLI#A;*v;Pl#RfAC~aR zEkHurr+aX(;oA-k@^W3i?QSx4tVLE`Nhw4D;3N%@H|9OBtmBOMAkaW=2a9=adu$^{wy7(G8XJRZ_4$8YS$$ zez8Icx_kQdr?HWF*x#Ri?#-V%a%0BT)6fh+w*WXlf6(h(JKy*MeurpDLu3Md0yX|- zK1Z7CJXg+0cnx#%tzg|O5`?1R+DqQLi20P-Em;5YHs_t=D;qJ&Ei8F`6x6fCD?fLh zA(`D*C(zMb?QK1gFCR&2gn%%&7hV%r#7p2k+TwzEC1wnXXPgwi(Ra7~jTzU7bHqN@SdtoIz^ zl}3&7!>(=qV3)wXb~};P&{_8|+ib>g9Hx%c>a~ttEXB``TdXhF2#FniU6X#=9r2cy z{S{VnU^WK2GdBCZZ35&@SsadH_&y=l&)8;hD5V%5GjNRI4WfrWW#)6)DmOvyQJTnc zIP^U(ObCQO#LQ`%w*fGGA`|MS`NlFsyms6W+_Sf~XxQT+z*Kr zysdHOdh+uodEy1<5D|vP{-IY%jy0KEkqbGY%vcq3xs{OPOqoJLHWc`IF8V*H{gp-a zD56(hKlEj-%I_0aiLBbe`{bf5)lkkz5ZdNKT}0*DcsyDkJo#MDozboDvYL#E`Su070xZl;uh%U05D<&t^H<7ke7y$2`N7l z%9W~W{>mPVxk!LNHzyG`nVqF`Tbv~u4A=t6mi-L%jG<8GOsIVbDb_DZRP_AF1-XVd z$Jcfaa!QyWyBpW)cD$IY__$5Fu16zzB#W2lm8ACbkiIkFq_MEN zrK-43^Mg?8oN%GhhBume|A6h(pUEF@Pf5v%=f5r)tlGpCPhR1@pX`49e4jwtdLvumRt4^6iJ*ejb^7%`K~hsi_+SL zp_RPVu5?3rEi6I_>bj8MOh5(>&dmHYz&l|{%ZrSz_4@nGhT+D$flou%v_oUJTXw+- z-iL8Z$q{H#4sv_JOq8x$v8Zm5YLq%@T&am(G_tl_sa1K`7>Xnyqh6l>&7?cs53^?n z;=oHx=XBtsULHx-jwNPg{Rrv9IIiB>qQooCte<|m*ZKP7x8+~TB;b|}9!WRl8mqTl zfvwc+5@ac7Dazuo)8eqx<~m~MeiWx9V7I0LJ?Vddr&BQNU&FI&1%N1L;-T7L9 zx&uD*I}r800+Hcowxe#Z1Wa-LhOz_^J?z?nss5JBqZYrLEb-ai->hsiP^{N_KWMl& zOHl5EasDCrBvROK5G;>Y=+R9&ps=)=^84YC;z&M_P= zo$X8|KH)o;gH-ae=vBzDUl|O!O(JVfYk1eo+6+Sj5=6hMH^P!H4v50^64yGJrv!4w zCfuVK*a`HXE_58Du$yU)+|Ephz;~H+S8Dgk8 zpv>SG1{~Ue2t2tRGPa*X-mQyIWdd7cl8S#n&)zW%%5s>2Nn}0IUTMwlRe6+FDb1%? z47W9`amOnP(CdJ|`TbVf1%^f3VP3iJ#|VoN)U}iwXEr6>pb2Zkb7vlyi_M1rkh3MG zeGziiG#3}QasP^yGj44qG8Qf-RNGJh8)MwUp5Hsrwdm_xVfw@}E1IGS%EwX55XIWq z)@XjQn59)+!O9-SpZh;ayoxULyX-m#SN>j#0+HL>;(HEK z9}nGD8x||H{-;{-j~{v21AX(;QU%lK?#IwyHhTvLBM*=f0BjLpYJ%fHH>bsXK_hjdEhKe6GBAu@v5LS#1A@S2y&n6nGlyPd z3B)NyvFUh;HpPtL_of<*Aq+v}e}!Pn5Pqj?Q5i{P4C&Tokh;c?CweW$cUiC59UF1S zqD>a`0~v=#zTEkIYhrV|Y@xUTtz^RyDW1mg_^shKzqUzX9t#?ZDu`k=z1~NTICcWf zp5L}?#O$S*K;H}P34q*rzncPU>U9NGC7;}91$yi3_Q=f;Na0J0it<1@ESBj1n9MP3 zD-1mJEY zZ>d3}h%m`<`+n8=+Km2*r1>s~6C@7&c2qq?{|H&%7)FXQFOSTytB1A(#tS)MD z;{M7Ed$zf@+DF79Y|FC#^vGzK*Nw?N+r9odcJc2z(OaB7H!_MbEu%W37bp&em*96q zg9Q5U;VfDU&R&BJXR^q>3pKQ7+OA184}_!g%5!RbXK&H49M0xK28m*tnDNQL3L4`z zYhsV%@DjFbx=zHSe(+ewN-WZAQ}^cd z&3`eU2@r!5xvwDn-W;4bgYdGB#d;dM-N9?u%K>UF?mFNcvJk`nH(?yGkUKOJCh6K) z50PQT#?xZpF|C{oNc0F$3|L+0&jjSI4>?+D@m!vy#b`x{K63I#dxVga?JT{z&&0lV zbhlBh8<7oI*bF`PWBVj^U4h;-91aO_N2zCvX&yE#j?b)Z@hII~XTU9-{i z$AWXK3*hhR<75;U_Y+;5zzwUmmZ^uxZC&3&$Bg+ULqET|bL;@4#q-GJ3BUM3_W##$ ziRwOCo^&@Btu@?`xi0=Of%b!@<*`~-zK%I5h~evj_vtW7$;D}3d?=GEy}usvtcf3w zwcW74i{iLyuj~1%!6olqx9sl^6oQl#z+Nx;`&Sm2?-_S%cr?Gy zD0E30!$bF(IzD72mhFDacmeWr*!1`!9%4bwa(VN9pma+vyPz8y{bkIpQ>NLotj8YDH7648iv zku$~;5U0i+$FfH{B^;QGEaiS$y9yLg0xuXb`6`j)Rd^lrv{V}M(sjG+qVMn@Nr+Co zP)nUMWHRXS4|2VH@!6S`ru+U8o7!wOg{d<+IB!rg?DDxM!tdxW40qtcAb#wp18P*= z`0D4sY=;Llp^`tdRuNP~5qdwvfROhu9kU4kHs9-ti5+fTXVhOzKhK;=T?Wzivl!7M zvs*t0nr5!w*BDaaf4%7QRbo@tZXHdpnS{#&G)HyC&w#E<5`+Qs5Ukqnyt9b-VfUnB zLCzB1wD1<}1x3wT&rQMyDq{y*i!Hcy5~z9RRwO)Z61)^$W8N`J8K=0i6Hu5g`^ zqG>t8-cIqzjgR9$!2fdpq7IX&FzHvvY0i)>{d7XdYH3ZOY$o--C)(7vF_W+1h8IrQx5Ur0^{PXhGRHT{f{^E$d%@wa;*?F{ z1$pU!;&wDc2JGK_E`B1XvKbuT!K--HLW};k!zX%%KK-wX;e5Zc*>CvS@~)U0YGrB3FM-Un`_%iGfey z0OGi@r$&~(>%lDY-r?L%@e#C85Ynb-G^Xgii95tP^u}#Fli{OY&48XDy){bFf`*0Y zTT^d>>xj>h223aS>MN_^Dzvm5{LHA*85uRDEtIA3WSp=^gsU~#wp%CsuWnZGwY21! zDRE&Lw^;BR^8@P3)4pxtjbSZSnjaTSa>SIb+fZKzqdMXf2%L8 zM{+(mr6$HUTR3pVjj_j&v#XoBxCQXb`Pde_l$XaE*KUvBJFaiEb${93zW%E%!hW(` z3+8Il9M3#i^3=4JzmE=sIm}ZTUf|^XGHzl}CwUw(j}ia^vmw+@LKB8>T>CSVE9NUB zKxKwsP4u_7_JTgR2Zf0L)dEOapY{48orjRKv$76!eT*K`>KhOIm1&kgDwfR1&7z|aD$EYo$AH?19##Q_Qv!y&!=T!hadCJ|$=`B}2~Fv3 zb2D@%3aeZnL&f&g+*+$0MNP?|)GhPCAdz2G+~|xioI-)=;m*)2cwfERrGIL1q_12x zR=eK;u?oD*$XOX=ZkmnfNOe1@o1D7!K$zt|Prt{(`_Z^=fq4uztLrNtoCQ+h?@%*7 z31P)OaVut@T)ix*g_TYoEyL%ooK)1Zk5`tIRB_vU_}Jgq1dT`79J=H-Ga5%VU{FL+ zm#4jci=tXJ5K+*Q=t$#*~6zWgs7PS}hrrd6bc4JhRbz>m*wZ4GQkOCv4 zYoiVS%I(41pu44Y9kCx@wj9)Fb){vsB;^$_ecFEOcY1^U7`pXPZD)h5rwS|6=r^fI ziLui5wF_q!_jP;Rf9**gGa7$QZQB%fZHL`nZJ2uLS@YA3BZf5=W?>-{CmYp8#-tN8 z`0{3>j0^va|EgWPyBQpXwZ; zvY|mzd!B~*#wUA$$|?9w^p4A}jKU8dznu<`xwGd7W@bo+&1(fuNHYZoCfL_qPRdPp zK+NzRlQP`U*Q!NzuZr4aBJFsyX-m^o*Y6e{@?fof&-0lO2DjTd`#d$p0zG3khGOQfyaaAW#M5b%@2dJ%4v-;emFc&5XRvB!wYf;XVHs zrru-?4l?>}AB#xoH$7iw6oR14NYExv&r;-GQm`0)RHXCjO-*_cp78jiIws6NW*esY z%Td+X#h%qu)^E7ree%(wcA3sf2uY*5E0g~_+1mJs_z(=VYz2obs?S<%Fa8-^3m~LY z-U3SAv0vCCVR3N!_MWt;mHB>E?)-g@tucYA1+#MIcxl(%jf1V7;F9}_lD12=B-zFV z%fhYgRni_aG8Cs6sp;n01`MTH!hfW+08Gc=(JF-p52jj;*{-Ru0M-%c2cB8h$fWRBE{!e)!>$kQ11;Thx+IjU9iRo%< z(uiFNl%Pgdz+bHxfh!|-Z614$D};Ct3rG_}Ty~Du8Rl>y7Y5}`k(jU1S#RexFgutv z9|2LLBmLVM^kTE2e(KIgbH6g~q`Be$sa{-qhm7ytx-oK4;T)Bi=;|sbiVPXmuf8WvIgi!;s{kya;OK_wFV`o}cz{_p!oa5*Yj-QnyBn)T8<3 zbLEkZ@ob#RqZ&UkWAhxVL1L>yR3fEp59))+6Sz^7M<_6XWAGnZA4N=|BJ4( z45(wvwsi;u3GTiL9^Bnw0~`0??k>SK1b3I9!9BRUdvJGmcYizGr_a6Jx8F~ss#dL9 zI_5X#Qh@#ZM>O_bgYXsLC4M1fTry1XRR7A{hfNgf*Sx!x$`p79_M1 z_Maa%VM@KO^G+Z3ojVe9ql_qK&Ei{yaWU%?JOCvg`H+e*YpN%F*o(}4aO1b;NPJ_4 z77`K!cXJ+*Rkflhhd~FMs9G(D^Efx!|A5jzLm`0;55#Zk{8!H!DiUt`d}6+q7xMc&`hR-R{IC>qq)-@kF*jr<|R zNN>z}!Sng)Y;XA0Ha$iWZ30ZrApm$`FYN8d@vrT;wACsN$TgN0kzlEer)6yhEf^0P zeIDDS_&c^tfbxR2&sVsRc0`()Q7@!6+z-nx>r@i|`E=ixsBa{>PefZUI*=Tn<>ci0 zS6o&g!g|q4%fb8(*li-D?Zt`8 z73tRrJ|5{*YdSQ1ZaMd1#B+)CaoH(;{y#;8i~tuA2JhlUK6AnhsGz_kn{JPV;0`Hm zf}Y`is1RKUJ(H(@NRHcbzX{Li=}O%8c!=-$JZNgiNsw*4qM-QRPyfwU;mqlY(NhBp zNuVA3_3Tntp`}HZHBUcfsZ1%GO}1{c6y~EsOBGn9X~GB;@J&>n3dTa>hY*)(K`R>M zgG$NTo&Kt}eiv3o9`i&jMoxvubpy8h+ zTaQb7IPsPZio!Jddd9;e1Aobuqfcoc1R?9WrBDP>q}*1?wDbX8G+KSV%rY5jMtu1x zez2zI*e&O#GCJ&sn3>j{Hy&CXVQocV$4(r|g0_7~Ik zci++T`Gk^Dc^s7zFD>*f_q$IV1z{w50Z|kf1eqA04S<`Qa*7i}4$(@fm$I>fp&hOaSLoDT{yf?S2em zSZ_EuWP<73tUW+%%=>bE1wJ<$Q7XE&F5rpGJY1%7Gx~rpnuivGA`C)hNwd;jmW!RP z5RGK}${jV%s@MPPrGDf%X|*kZ77_yzPdm04APEuYU43`hneM{(L~b5O_txl%X$zfJurJo)+@M4G+CurDg4$)!H?OzQhiAhZ!wv3(i$+}qI3A{PY2$5@-!TIgZZ zBxty*xf9Vb{SXqKGS%?t&9X4d%I#`2R@J5E6CcTEP8;bqyHA~C)gsuK+=H{HthG54 zF(EkPdmt++9sjXC{_y=^sOtl^EbX>PU9%KEqk&Jnc5kgdbvpH50JbZGytMuw_OM=8~}~99HSAqZErLjSCz)Thr_@s9bY}ki6T^F|BoQBZ9dG4&9 zui9XmMM0w!=)0qD5W}+SNMID{ZPXnuBqXHaKK4gpX(^gInUjo+j5dWNo`kPYa<-_soSp8-)4I9bi9v1;Is89oU;vv{aK6r5cC-G zdcVs~>spQ@p&rAzH-Y+Dea-*wOa~(6bP{Ub_^!ijR)n>d3X8yAf#IH4r^RdRqr8Vj z9Ujv`6+e!L1(H}sbVTD@J!-xU%4AIq>$3Zi%qQGc?Z+`GhAl9Zb;A5RJb%f;vLjZ7 zsPiXBml@-ktmipi$T2vX{r5GnJ6XSaVH*ISp$zkXriwKP@GOnYxKD;TEve{5nfb05 z>|hx4;SW}?))5!+@=IQx+-4DAKz4KEWAeD2Gsw2AOP-L|jRM;xu=Az4@W6Sk;^{Qa zVkIUg5_&vkgV0s#EGB}hXlvcs*lG)Z{ep|tw2)~|HB+<*9}k0`)|-SosOD(uQNDYl z*G6HC*|{a-pYW_>;}onqsB#PVyoi@>R#f|RWnYr`?Tx}qZf>l+r;ePhkfFMBV)w3H z`$C4RFEcJGnGAm93%VA2l9ktHjT_LI=LhA_ju_iVd4W=F*G#VzP7-dHL zVg!>oO7FK|@U3hj;-R`uuVce}fG`C%uJ^M;(|acSrOF(rBpv5o04av;(ii{W;8W3F zztquxu7v(9XKp`$S81p47|q0f zyK&&7I5A%z=PWOltK|%4irEb68o`#+=j$tm>_!sbb9XNg2!t{SHdS;~kMY6fbbg}v zDHaDeF)@+7kSq7oWOHf8BzoG+$iH9u`PYk+ifq5`Qyu{Br$xmXG zYU7GWutR#dyLT{TmmYSf&u!HN#D+cqj3&cH>;@>gqxhHJ6atrP;Ye*R)?xsB}$tn%y(3H@mvQ?Qo~vC%kX{-bE#F zsNg@>eDg%GpM{$QJ-Cm}+siKyG1Eq(BZnASpS;4sEchioM0{i8(wyCM=B@ z4#(99S`3gG(Psg(+tPp<#=qDm<*!-hX_^`SjpsbrG0pYp6A+jx-maZjgbbV^C(f0#bdZfVQ>#rgKEjh%n%upEoKdTGu8fl#4f;b?`v)wJtpM3HnjC+G zKlsAZ*IWS>ENi$AD!I%4&%1hnN46D@jE2?f>riz3v07c)GHwDh3vw@G|_pI>5z31xg#h<0R|47}>hI8Hb| zVt^4;=$5Cbo%!>xY+6Y5$p<N${=srDgqBIYqt( z0dv(56>+sfTySWO;LrKsKvB`nttf$RYoB(dn!FTgv<4w@lTSWIXjon~ki9hc z2anJg;Zj19HsMxtlM}!M{tSe7@zJQh5wdkFa!?06lA#tAI4B8b!cwj1ONlds1wsWP zoykx=BVV@DLrTNggG$|4iqVY5Akcq-KrT949SB>x+W~05 zU%zPBfW#(GJ9mA7M-R^!Idfm6MrUcI;+$ng9~%JmTi36U@%PW^`k;ULrB&OXq741- z)eYY1y^4XC(=QQr!JcUKv$O2s_#9XtKD3Tko6_(8enEoHK~2(eh}qVvF$+O~OX;y$ zZuzk0C4j6H$%Qv2aEI}S6(mlW$|nq~H0%!!oH3~m6VUVYBvR+;$gej z{^pW{9Xan1;@`!#WJRFt^P=x;%g4l=Nt^L2!G zVRC2gE>uBtF?5wQHfDwciQE!zLJJ+19-}a3yT-vX4CR27;nc4|nI@$;{k(}!?M(@j zpbXG(Vl$0VZ?L{`z9!_=Q3JudYCa2Q+M;fnOI~+1Fs&1g^WipY zzN$iFpIF9QYL*pro_jeeGhbB*EkbF$UgH5@`Fw?T(7ir*fMe&%-S&1y0oMX_SWW<1 z;qvY`pY5J7dAN8vO9+qVgTkrPpu@;N0_x$5s9KE`K2d&Uj7)LmLV$iG@~Cj!3948~ z?S=Z`Ki$4o`eAf*RISn>;gWb|YrhcTKjv4M_kU(rs3BkOXa5=%)-abgTR#LuSTA^&gQpbec})%SBMt^Dpiv8MfKnCXa|3Myp-ySCc4(S@$T%*!StW%czj@$MRb!`v zxb6)03uXS0P9bzPV6D9gw|Drc$7=rQc5}F3Rs<&fn1|cWAT-|A@?yP!qi(Y~sUGw# z*SYKNJRn&SzqK5ltsgbfjDSg>V$%TK_=$izZUsQ;Pz@iG$s-KQF&Z&vn-avXnS-K8 zPqDqd4GX8;u1{KAQnD1W)Mir<`+p{zed_m3uaJRGCQ9=vxYW8Fs6QVpwX_Hv+>LU? zWs#X`cUGg9X(r`RT+rCjB*GTLzw>_>I9foLO+p7#fQDP(q*Ay!i4nVvsHmv>3oMjo zRST68fO>qe>YqnH+u7r={3TGxDKs>+=UTOSwvx9!Zr;e$bg-?+ipEQe=dnB%$kJ;H zBqpBvXqg5lqvEV=YZ+6f)@6<-GTcL!oW-)gUel;h-HHfE@{z)UW)BT#A#HVGCCMH& zE3V8jP+~!=E)}M*l+x%HD=~JnOvAk}M`aYp3;0ycCo{u-ftcX!*20*A2wvcbDLP|l z$s!+0F3N*dVXv&Z8$AiuK^cjGfZt%hBSCV?bjl)$D=(|@tnb}Yy31v1f)l*^k_I)o_jjE3pZ_|42m3j0#Ve{Pwh)E05JfLn`!ObvLd+Nmd#91d zO=PFYFrZ`gQ$_n3NBMAjS;DFr>?uzR$H}ppSY51x$Mcg|>g}jye7nLXYD&XcjpX0o z=)Rh?!ge*+$2ng4?K`YpThAcQ9Sowl*)qMr1yjna=a7pm7T>R1bg|P)3(nxDA$Cn# z6EX_2q3s2jOwYR7+N`WB`=nMYIxKiJbhO1iYikh^!>5)`d=k43KCK@Oy+}-OGA+AK z9$6etUL`r>moQJ2U_t&XM@{-NbfOwTVJ>R!_@mJTF@pM`?5e!m(_`|T2@nVcb~F2B zFYM0FegWI$YMVLyaGSoaUlH4@2>|Z~1ZTeQ*iEyY#xW6l@7}BBhU0$JG)6p3D!;R> zTTZWY8W>)amULhq!K#i{By>c>Y|hVjPU_7?5}i@~yKQwDV%}TWi^2_~hiW3grw2O~y|>>i!yJceb$0%|lRT(-|CRwaPKrI59w!5j+}Z zp`g3iBnJ|zn1JaN>fARXGZE`Lx`Csxnw;&eH7hjZ`Q)|JiW?LA?GF}nW3PAZK2Kw* zP;JI0P8~e?yG0~x>gd_;vzz66H$U~eC*P@qE(LKwwiU6|X^If+cObE9hB3#Z!udQoIX0~Q66mf<{{ ztmi8!4)PPf*fI*v*`x1#v)g4#rE}dJ6jvB;P6|(2IuZN&75>$sGw(A4gQ^Ei5I(Gv z>|g!pl@;9Z9}94YUgl6OzD-^l+U-BIM$d3S&#J+vIU^6va;*1r)amyZLr53 znL`v3t~AwP*%Y92ulP=(od`gIO273W(B$iIpkS5g1P3h`bVSx7&ezo-AtfFCJTA!( zkd%?>48<&A^m&b{0IF5ktUPM7E}vZe>H!-kKV1G=Vk@76&sq4UP_UJ0Z&e?aX_8<3A-5Ua7IV6_Bu$_xXN>8fgQPZ~(s z+FWd*j{@A@^agUJuW{nP)!S%?o><})#>YrBel}v|YOmyik+N@9hzhl)bG?YoG`6t~ zXN0BTw-7_V1ZEGiz6BB4uR$UcPg*2|{2DY`%-hjeb-VKEc|qnS;Acqaba#lnAO05$ zz?Z+m_>NR=-?xr}a)^ViTW_4W#D}*E20>8T0jkYgzg0Kv5JJltnK#3as6_kSL01Sv zhDKE5+X6yTH)QP8h3U5MVjE<_wHPUwlk1biUPEG#so64M+E<$1Yefay@Hu&yK2S79ouvDT0Gi=ab>A@X-(F9zn?qr)YOdsj?{Dreg6{)7!*AIg-aG7y&0Q772@`JlvpCRhHN(uP`-Vz z-< zKGAl&#wwhzmD2gyuyGdSVYUd-U9UZPe54r5OgLBflDfPhm>l znWn0Zov#Nka|_6uz3dgz<2{_Yy;(Sx4o-pT-c__`&aMizW$NeEY7yt0MKT{z9ioY1 z->H$3^w`?U$*gGW)Gvj3qbn-7TCo?0X`XLDmQ)(b_(_Mu05Sr%-q>M-q|baYb;0D$ zVW6H0Gd(>~3v_vSkn`9HGk{;PPo!Q+U7TE5yj?maGnD6Rko~E&%{d^O$Z`Fyhuz89 zHq;Zze*G1-QU6pXWmhqBctcbQ4DpLWKfR-3YJfG_NSuoUu?`yKq)^>M32uC znk{I&kD7xwHAqXA3@S@43>NOrj z?C;rzgMiA2v)n!iDOPv1PmQmoC4H{Y}w*?U0()K>hClC0F6dLn6evN;#cf%5f;ub({4*n z833GZ7--*`Ff8{}hTNDs!`byG$v>F=`nnmUuG#TZgfEEP;91?xj^`N<11%`u0tShX zQuq0V6C(3&$b>diJG4fJ2`oGZ7nhADUuDXe{c;LE&Zp*Sdpa|@CQSNX>U$9^TQk5` zmtw?9#e*iUHIL8bhrV9pCf|~c)ZW%kXdMx`4h)APX73HvS7HWEffY~%&B;)euR}cu z?D2wf84KXUuuFF1x1tXg6bpuTg(j+Q9n47<4efaQGJiyg5?PBoe#Z^yHzpez){9`zcJ`pb@~MIpr8(?*o6d}pM#ZsH!+Ru53A|^eAsCgl(*DA5my!I_$ROhHF?u;Ttg$Gic28t zGKl;&bL6!p$cY=wCPVdHpTITnT{e@T(t2M>v05)p{EmvFs4vHAsKAdns>|MQEw4F!5^xe+{h@@K zx(1op!%3VC&TOPFD|;^B5)K{j&5q0#rW!1i~wHuXu|lW3=fsjF@i-i4-LShET|j5o>ufB zP^<&8CtqEGlMX&%DW&puNwNb(7l=$z0s$EX64wqv6lkl%)XLz{L=2Xy?!wR)w6MWw z;U{!Q2o{&rAzM7uW)#~;O|l7CLIhHZeqx>t&(3o)`&HLzcCp4RRt-ShVIO&0V^1c% z_AaBNywn-keyQ;YBxUXl?+azm-4@LmOC}>T5&fh1!DZ#B1C~5@Ujp{IH~~&O&hsf+ z`|8P`y}ZwUfl~^2eNaPITDvF`c88JsEvQ_IdxObNw%7AhPZ@2KrSyK^cP9Imq%v$c z7`VZND;yg4HOF6Bk)@OW7B3-u&PFSIGvUUY`Rwvz4A;hPXLcvu+H!ay5S~JN5#~dV z(s`e?)P$m;El13X@lWq=xVpRXkS!+H@lQ#+%!ugny z>>Qzqvt4Fzz}dXn)t@jDRJHxJ}Wr zAAEyYTF#fufB_n5;hQ?Fc?~VFbj%G6_~APSP><-%On^EYwKJ?^_#K0QrDccap6No; z;taDWNsR(dQ4K}irVIEY@Eof<(@Zq?+4bzE`I2^floR?l7QR(pLNNV+=%W7y2$v0N z_{=z~Oo0b+c%GKNUnj`+D%MZTIhJ}^z;d~YtwuhSKyMwN4ec8!?yITE@4a+Jf zOb{3Mp?vCtl;nF_`-#GPX9!Qt(5071a~q<#q=;j1N{l*Ftn9DVf&y|mZ0|$-;G@;% zk;80VVav!dtL6=AG*Hvyh=Izcti<`M?9wq`1c-MwAv$B(_b=Y&n?Ig6gx0?NvR&qr znPhh=nAZH*nv5vilJnavG>j>~SSiqkW|nBQ4%5Klh+n3utrDu`{%I zgzG2e!zTCJtydA@*erX=3a|-#ZH$F#zH%X2}gr3EX_6ocYX{%KwuY)g^ zm50sD@;FSV(;1wXvEC#To_mRFxiDmzWDtZW*A24S%JGVV6s_t}bi)>mN8cX?2;+jM z&Io;9(c{LIcRErzUIIfA5rw@akkqkT4`ZjUZJnx>x)UT2GcoC;; zaKdByjX#~K(nGzlaT5Z7eW?nyEvU9y?FjMX`8N@L67|Tv-v-U^A8JQ88O0quyzH92 zgw@(SnUUj*V}l9Y_38UEV*T{Rb4h);@^S?ot3JSFX43q2S#9>p13is=Aw_C$K<-OV zqhpU<<8KG#r^{!-_nMft$9*H@xxrD_vN=nkNR{E;TC^JVP-SEIL>MVsGX(uTr?$0; zl6)Y5#-h?#qL#CX89IYeSx9;$v||ssytgTnW_x)9`>uEYfUkpzK}QKjY%D~w!k|aN zypYDS_xMRQi?tjg2F@hSbIA^Yn-lYDZ7|8OCp49)MGkGU`{KZ_B>GMY6TyTq^1j_0 zhm8(i1W8JCu!%bv(oj6&+x9W2G*dT(E2>=NYdX5R$QI+(Y!;5E8MU{!Axlc}%a!Le zocg|(APJVY{5RW-wNHw#IxrLio~e#s7`8{tg)I$JYkWKm>uL7p87vifnWK`wC1yL6 zy043}+EDwGQ$fHids9sogo|$Qq)eB~2shF=IXNMc2ZtC2kv{cwk2mDu(7ZjpPk|rS ziwx`Q7#~2r@U#>ZYgWwdPfo7ayD|n& z8D)XfRfglb^8+Mc#XCt6)fK49AJ}Ojw2~5`=D5SB7{tbew3X3}9uHeD<;z~`v57eG z6GXuDj`Xw%ZD(z?KQM{kpI@*3#JaW{WpkrR8<*!^sB3UfZ1oY5gxvU6CY9Y!Q3(@# z0{nW>zx1vOIg&qqS1wxb@?UU2P^*I18h(D1;-|uRFZ!MRE&Y9R8FUS6gI*2Jx|O|C z3AV6ex{YgE%}$O?F*eakHQK|l1@JIuVa~knEA8^hF>h%IMW+!UQR<00w%;~m;Zski z(FFY95{PXOS3OvkImZFM2mK7(a74WlW9d{&G_mYT+DqQ4M0Ib`F$Vltw{UuhxEI9d z^J&~68#PJPBqvryN}Cl4mR1q^iUQLIt^H<+i`9~JmgL{ms&;7(7f6^+HL0IbK$Ntd z_8Dc*I1?jml$398F;(mS;D!!|lN@uQdsDAUp0IW_gGp`B=DzF0b{IojI5rM0@L@$so4**yTe-*d@Lh^i>RPjW_sB1a-fWi7#QLi_`BziZlI zlSmW@yH*QL-QB2;qxoXdX;{zJAt$R?<#9=QtEb6LGlq!~dP3q$e5oa@Gnk7|^-+x^ zuMYFup?@j`k`*Z5k)t9Vn-6H&)^c6!Ot}?Oo5gZ9=oLr{GMP#7B6qLrhlnX_KZxJbq6L10J{o1gNbH| z#7fkUwGI|Iyv=;_X!m#plQC zYVX4`6&`oWH`C`8G@~}T1c*=8nHUSmpb(cEB?N6-FL42ND+UJvb6XDGE89L46MadC zqcz6HXjByB#m&iuZEx*wt)X3AB$aS)k4LuKItr5$+EB{c`G0LNJTSp=jyvk-rJ`kc z|K4OhB#xg3QgNKi<7wX+e{ZFU&j!c)`pYw951z!&3{ug%HUdbPXtb0AvJ;#bgIv;( ztS8HVxuRg3N~icCp5JeMuPY2~|Q8?qQutDG>8R?%;DTb#X z!WcSKS{6xcxQO@LK|=aa?bqO$bbxHE8gv}-dbmXM_sNv9RO{@?!Wh!#QAE=)d@^j_ zU9j^QV3>Hx9MrRM?I9Ly{h2Vg3Q1CubaP~q!Xu6a6kf~i+)s%e?dEn=X@R*V>YSd; zz{|Vb9(}^Sl);xXSE%!3VQkpdKN`ti*Jobk^ffNLh#heKTk6T6kIDF0gCc1K9DM%y z=5J(#93iUQf_ZJ077Y%zuM;p+xqcWf+n2YojD!FEB`KVEFF5hqod}PH(BPc3`=Fi3V7AhW8$7D2c5}mrf z430g(rCD?v07;~oS+m4o?$ky=dEEJ@V-~(cXd1ZqGL;*Ja>%_m+`Dl@MYZe}~T$7Pwdh6$1P+|ReeF?Q>pD*LU<3bAaPbig*=h|~PyCVH_w zmuR4eZNxjv`Z(8or^!y`)UON++st_6uaxjJmqRXo5RZ`@=5uUk6D(;WulFU^=zd>= zeV)wX{O$+7##m7OD`m$wVLgFA5g;$ebFvyi8W9*ltX@DSHgs0OEA&)W*jNdqh%5-r zNj;sDdb2CT?Er2P%>?B}$9A8ZHy7+DJIg-#66JfPWv8ULVDUAKFQ2??+eHV6w)a6= z-#zUzb7Rx&;Kb(z>$(bG(Q{81m%F>L|6Zx8m-x3w{YxYwJhdo!l0{Qe8#kcoTTkiL zd*{>r$XRo(zQ$v3=IY0%kDf2mfDwJ~1nyW=?%%}p@x1aR7p7!rlUw-!KXh46@8;gA z!0V?opAMaRV)BVQS9#Ud&=KEC&`2myriiXE`^dS8$wEU;nu`HjSD+bi#ZPN>G>7!% zPMP?Oj{**og3J({qU(Nh&IQDexw&Q>Drct=6dNAfR`x;V%)n=9S*3vSM5eSW>yEcLo2bhV<(W?p=Yof_X;KJfW6W4$v;-#SAd zD{CoCYZZ`}%`W}E0J**cgU~lI`{TFUgDU;)81|ISoZhhVF(En_pLuL4Ed*&M1rk2; ztkYw+sV^59Z?}{ytJW{a4oOCHk3&p9`+7!jr}SBIFGe}maw;n17otz`(hjNrl3VA8 z!Gd>F63ow%!=hbD72&?;V=iWhi-V0qI&0Je+20TsoF^HO@>O*JM+-9NRFa5Gk}}rmkC_EjYM9t8HCMUSq!f~5={2YUnpg`dlH@a=)lF6O(cKY3JEN(J z)YuEuHXY=@v+P$$UkGc|G$A3SHmAo^tEp4!4oD$jwYqK?<3x5P)K<(i>y00byLb{9 z#Fc(7x3#pT6g^H9QO>k1wGfqxgKrfhC*ke;zN--wPnb?XaiN-OaiVrDl!am^8QMbs zEfrFkn4*7=J8m@^*Dv-kE1ucK)SiYt7i`gFXn)L?f}_H|DJy%5M5N-72vwa6aoMb7 zsWy5(W-nMrO~435?Kk?wJn_8`&$Ql6T)9P^EGF;hP(f*)7LeI(FuKo24F_;Zg|e)d z{zm`NzS$Ek)}&(_11_d!bJ$@Y@!INRI48BzaVS`@`Lto|S}rd<9PwdQL<8R~{0?Ui zA*94v&PlA^0%WPgHd!Ym8*eugL%pYNXeLS1kfND3^sC5nr;m_w@Pbg#~*=>9n;h0hsNi1Z>p?Se~9%~8)` z)ArzQ-akn`9G!Wl;;%d||Mpk>P|ru?A7ew$es~^rJDl4U4bx+TbeiX!9c`u(bew1q z6H8UV&)3UYELSaloN$zx$)+k3xE!VzT@kWKliPJQ1bz}y5buHteKDv7=kPng<^VH^ zm?e-Xg94c7?9C?1u1*VwYT>9q;SsQJ|HLTW>Wnf8BW8F+fsZ4*^Ucs5)_s_tCeW|$ z8xL2ir+YAZPVsjv;>La*K9rI+2JAiIa9t|r{ATs+@dd^>UPTqxscdQl0TS&lPufh) z_m;`1;2ldGXR<&`g90q&powc5W~=z*ULu7vtIfAmWy-e+8YDtWc-rBOpnt<&FaB40*_126baIW_D3R$8W-~46Hz#?#2x8zoOtsLn||= zM-=M(7)Y^)Y8fp9+h?%hRDqf@i&}}^H#BJd5gi>RV`4xP>SIh5&<|dX*Sg=DNKdne z&XpPxC@)_}5o1dQ(j2+TB5+3unI6f z3AQ)mHQ20b1&%!44kpk#TGg0eVV$>qk@$P5@kILm5U~z93Xf}nW2`hu)ay-x3M>}I ze2mK$dwLnhuXJ>_mnWH%H}Ah=u<43Py6Yb(;$u9#m!8MdQoHwt2m~Zj|8`f)n1duU z3EaAV1H8*w_#|rt4Tz;)mBsD82F7#-#54(95Wlot+_dlt$tPZ zkZq-I>pnUWuuv^Jx#@hbf?2S}3v6kew4Y+x8}o~+6mH(|PUx}o*p|nu!G8rO&^Ne0 z*N26N7xD7qla!QfRu+|&lR9E9r>!|kyWc-e;5-a{-FFgv{}_I=B_=)lT!X30-zZA} zGIvg_Y2OB8Ed-hCuJ@jdDG{Ht-Zt`NlI_H7)9j}726bBMAliMjLpQ{YZCJ{=iA*I~ zAP;NO7*0wMt%c8<3%8+nu?PV>qa{7d{d4-8xP124m@j$hfO6zKOZ@X4B{#ICFLCa& z+&S3LfOrJSFA^q2ZXIf!=m^{w^t^kOPCre}TAlV(JP|3-i?N;qWy(jz%HyK?##7&j zt;;lPA&l4P1RwPc{hSwTe8NxTBJ}IEsUyFdT_4&vpd=(jZoIWYapwpPjJ3eq29zvB z?k|^GUou0RGTI7J?P@!gM9(E|mZ^EI!SDMV6b+=g!&b?1BAmPG)6n-XCJ6|yT-Ih! z4)-zTO7zM}>AUUHU32f4UAJ#5|Im$3iw*zfw#nv7#e`7Et)xUsK>^L@ZuAlNWUgG! zj@S7BUL^z(`kKp>8%-QBupfN%$d2#aiP+gx!FT!?H}4xi1_>N|YmNIo`6rk#-OZw% z^QD~r+oOPudfi>y6uo1hkqvv`ntPGnas@xp)tfD$CsK;weL5Fc$x#f)5#e?Qi#9uq zyL9UN^oigE7lE+AQBg*`5kY=YR^z?O75pX&k9tAEo42{kUmuq^}3r)2f z8)yEH<^N(>eZ3$dR=)XmFSUoy;b zT>YKhFfEyl{eeDcBm}5s(coIYl42`jZC?#CtTE{^t&?9pQVb{ zW8|gdJPY%s3bXENRenMw7$hF6j~S^q@zZCHO-6?6skZI?DyrHvK($nn5s&+gAcNUz zxw_$}8;-S&;*xT|2|Y7`H7y-5Gz}UI0UF5qqx?=0P6efN$rTk#PNHHNi%ExKF0*D` z(fpuMUSdB$&BUd@O+myg`~D-m9vO6qOKb>oGW!j;3ZtyK_nb9ajl4uPS1K+n#z{bD z!)jIg)GrJZ)1fq}qS~jHWBoPmikW0K{4mxeTE5zgcN8ZIVX2W_=)n#?%DFEfk38ghbPDa9 znb1a5O;RywDiUob@lvvL0tXOS5#K|9<<3iAllbK^-7VxRBge=DYViIKI4LWPv>W!K z=Gv;d)=+Am zyGS(liUFosSw@<13Rq~_Q2StM#)*Mu6{{)SocJ$ybzBsZxx;0eB^zM*!UY7fqB8;J z7Ie%^BX~HKX<3BBLO#uyGmq0$q0{ZCybhwrhEVr_vyQ2uZR)|Yggx3xiPpxCJ`mr5 z)NsIHtIGB1iqx+Hc7JfnPo{p{xg5EFu>cw0Vq;^S@xL%LICAqoji4v&&t}=m?1Ff0Bfm2$_~l2&O9Y4ib-p2pL-XHXuiuTxzb^8 zlYGmKBYbt*kPmnOE=iFEp)9dQ^|ueql5uOerO%ezl6Di0Sz1Rs)eD4nve((COeIAk z>4Km>8yhvVT@GE=ZfOl&aW3s6e_3mbTA@mUXO9&wUa;uVIf9qS`4Z(Uy*Po}7w-^g z7ksjjpDF$U-&}jl!O^b!~V!bQoO!YcI(c| zo%UK%{q&iM8K%sjx@K);*i5*^uR@FaH=&DFbxb*Ifv%x@dNND;Fbx;(g#Ed3xih3G zq`rvaWr!oP%-#dUaj5wCq}HZS=}44qFQ+gyV8g-^>?RjC>!Z=_6G%?3JA_5Hcd_;; ze#nNhp+w{_K&`^(kChdGM@bJVRWKQ8F~l*L>i$MgP{TMqTyBf0cW|8TteDI~58pB%AQJsTL*l zT|oP?GznGS-3i#8Gd}gdY;CtZP<5Cw$1d9Q?Rdv}uHl5_+8zo0gvP3S|H@>0=KF4D zqv)c-SgNh?@)Rz}%m>*>h2gKi>e>E*asXod(>7+vs%6E0`7?dn-@R8Jd*LZ&d;1V5 z>m>A7`{x$YgBi+6*UCcr|M7)-9Dgd(=A8m&*1zVHKltMRIKNiJ_1aYz5>SZH_WUzM z%sp_?Y_p$S3u*p-*?)KWA`@5WqASKKg!O*U?E!-G*iO&Pggki|YgPxDL=}tu-7o(J z4dr2p6;mCdvO+@?*Gvl>9vq&Rk6mhZlfs zCBvQ^E{203Hr}R8{%_Uz_xsMfpw6Gc6+xG|&dmr-J7VI_$SeGJ!}OZyI)exZjwzi$ z6bSsp!~{`RR%XYY{zQLSZ2b4_{sxD@_B`9j4)3#R5WYb1aeiKYs9}!x%j3|-zyPfB zmoMh()Bie_?Qe4UpC9>H1a==9f#5ZXu`V~|SLe_E_BSU|S)LONU)SM8&yi%e6p)m; zW%2*vj{mxv2ljYQ$5}+*v3Z4aGdRZ%JjZ4i4F-Zuu?9OsGwb%142YwpZU2X){l~}X z&=LRhieCJLvi#=I;3HM+yCdGZn$NsHqbZfl6vH0qWSSI1{I_@2(}a3u_E#>rBIYF_ z_yhDeU2`OlQY1^~TYHp7{>K~s^M*Z^((jL;|lKoPak=Le*eTqOpY578VYoFW_NI?0viAVnws3_ ztw!Z_obDpv@-_bJrA@+m?G(AP1?b&D$lcX)0uX)^@A^o*9unphR8yFExkaB5PKNxzG8Ui0KLHGL;|oCJEQf^{WQ7HKw-|8}9HZ-=)GXn}GuaxyR; zD&9vdMZtXs0MAK7o5_}{|`fkg93LUUFYm>>ahP-r}D7J z_f8vL)3rK8RFkB7gHv+&D*`?$XCgzukPm2%pL zgC9Kk8BeL>7OYlJGW>Ccg9h~&2Tc2YN;3fwwLNQ&pL+$s<1|m$x3MEIS?MbavoDjM z-YUKG6h^x4)Y#dW#etjkgfF19%umGYS$F8jctP=yO3@bO`A!&h|8RxO4Gh&+tPwT{ zubFEntfXHm>-lz5|PXsv2Gnw zeFAhS_7s2EQ$)0FNHj4dVW2E@v9~sohtr8px1p(Nb`rj$??~T@Kkl$Ji#j7YKhi^4 zncDR9d}Q>A)za;qr)T}Sml2cZI=aS3H(T2k4ctrqtGie?78Vx&a4hVkW5>Bhtl-d4 zVJoXrt4QmWCQLvSdp3`D_)y_r6G=0iZ#yC}`2ik_2?jJ04vOdCg?7Esfnuq4YQ0<> zm<9{@(N7TYw(OLO@Wi#J6YO?{6`WgB?e??P>Q8p+h6c_UgQhfkTJEk!defdDMvkSVBD7_QOIDm zCwRO**djtE+WxxH)jMCIzs1i70Ox7OewHnO2V*DsgdnI8IQ!#Z^5K2gQXcDh)yvp$ zV?rKW$Z~%CU(oowFI&#@mtk2)!qn~MH6AW?q;6fX{-*gId&H=Ba75+mEogMc2_EtO z54?bV&u>%|Xo>S?u6#P2#TM&zJff0~GMQA3UmNv*UQf<9V)e4m9rr+F_J>u3lZ7{2 zIrtY)8cvl|SMFBM=`o(AreMeGG3Ou)3fa?tl7qZdu>^&g+SW$910g_g2yOuycL^@R9fG^NySux)ySux) zyE_d*8+X0E|2pT~x>fg)M~d#nT62!?8(fU8SGmq!Ssb@4Z{7Avu~>1(f2iCSqE<+# zE11EVv-PZnZq zT>f5oTnvCux`&f%)0JJ&+fQpfJv}TwYns#3GeclOK{#{KV8FNg5wFiKXecPCRiA$r%7&p62-YoC_pA1N3Gu7KvTSWqrm^QF6Has5eWCla^gl6 zg%6~p!qaZSq%BIKc-oar^y#VP;dpq~g+UU0>)p0hUdk`aZG3;mzjNy-aq?ZcNJRMV zBJ~3gL3(4Vn@u*Jp;&{am9qgFF+3_r&Bk}(j6ZC^k6beRTEWXJmYc~YeJrx%<$hrO zukof_Y>Wj{gRQM5jrDpbY(+*!fScf}qA2J`3-po<=H?YY?&&P|>xPT|+<<;xg4e5_ zn*zy)f@&ykLp=i#)wdO!waCt7R+^_xAlV5tp=ab%pzFygc&QN=A3txMpg7Qbbh{5~ z*%<&E;fABwv?I`|y`f2qw9I(y3^++h@K-)=sp3MXKMoWUlall5>f{y+o9zFmi#=ES z`oS8QIA3Ox?S*L5eUFIe42{UQ|7X(?=v05a(-7;@!`l1~UKI_Fm1O!QCoBKJz@%xKJ#`ZC(Futa((#TK3*mM z6xsO5d`mzn+L;u6FD7oyNCzuSn$G6s2*KV0lqD{>VFv1SN$TC(7k^^R@)tMAQ}0() zV+%qbgtHtUB!Uh!4rV0LnT6tSO2!-O;_m^?2e$%Z2CnAB=l4;zic8R9W{*nnL8Ih@ z`m0tcMBb)4ER{2&@9EME!lJ}_LO$@HkDq>2gQPlOUEB4&J9j83E?n;Oojm;LBT@;e z6ALh7Rkhj2me!7!Gn>sHT2;{eMbg?GrnpqB@kgTnt)UHI+osb*7_v~1>sc}U7tXb* zH6eUhb({SYE@e`3p&mH&pqRf66QRM?bG_=yAD$#nb|{#bqq8?i-uT6^V5-uv@|XF zg%*^HP=?hxploZ`U#~`|qg*)vyze(;X(mCZG0kB8dafi+*2H>V+mDFd`dhzE%5owc zow}%UdVKNbhPlOse(l<8*H841swzxD+&mf~4TfZgmazoeFWAElusx?^t6LBjuP#?H z$w#XwtIt1GQDr6cI|eMJQk`=mC;bX^!q_aLfxa-FDl}%w+tlFBI=i!`V|?Z<_v=Vg z!-nuL4X=)%s9?t1wyjJ|?-H4H?!8viFe?Nr=$Ko!nx&6MDC7yF_e235$33_D=h?-B zlpoJ$cl3!(_0MB%qnxYS$>2&sK!+f%E6-=4j^A_P```OF8Jb2RE~<|@8}90<=UMxv zPOf)sQ^;G7)>-W?x!NMg3>mZy@e$E)UEtbAikt_o!99eLu@cBrHgx@G+L*p0$0ibP z8bNuOw%m0FD^j)Q#IyTnQ2tnwDIxyogo6}5{`u%NqFY+bydC~ zX%?I+;>xsLcA-ns!=3`Gwd~*DKOWe%#5j(B!*>Af72j%M++@381yhy&md)&$Cq$dK zLcNIAmG73mlYP*!p^m_#GpU2u_m%CJr0nK6;4f0F+adtI>t6nj`_R<#-Hei3reqQc zRi1PGdPXB{^vaFh07Gp@?&%jbOgkg<6t+KKE}^!4I5^fQ=xbt4@|=B`A~w#38o}i;q2a^7 za94l@_rDF8=koOPBqkl3+ z0!XE$865W(OAA2eBRh#AOhM((^$1dqiGzh!mQIf8g-t0G*Y3$f26$%M2zf^Jcp&bW z21Ag`hM|H+~R9=$A7bZwJs>f`ogU)xJy~aCXT~%W5SCo2_-Bp)e!h3Qk6s3zbyn$B5mD_?7z3 z)Kt?<_wlh*b~Enzh51^y35?0CTTn|4LntvOJPw6VK0S)HJso9`Oab*SxC52|SPGexRdE?zH_QDJ6xx@dx$3 zNHWER(g{@QrG;;RdqUwK5de!e92RH`ES7$HyQLQbDQXyAxm$5ZibRh*BrT}Yf%L#E zh+!llA7U9L{p)FHTx@Vx3dv|Po$|ClQDb{MwKC!KZy$&; z&tv}X*x9kF+0B7?eJVD)sc-4zbVduZP4_b^cmZS72Xt&_biWfLinQr^uP%+9%Cz&p zOS%R9>xhow`=D8^ugZ);Baaj{G%VEQa|L%Ey`H1#drWxyd=AL|>(vSsKpsy{#yI%< zFg!*+)!WdZeT<4WEggL=&MZ3!)`#jfsn?n+s$Fb!0S2A@XX={9_0>w%E5|B8+Ji93kSSg`I8} zS*%nI>5u6_M{PmK`x(~U)VtspE1?1T$g464Af-$YAqLgjg-%KYbo2%HukG;L{35x} zg#>Rnv>FpFgZeCmdMc)aH!gaUKfSPMQoK&=&J6*PxX}oc8tqD>QFnEsI84#JFm~@A z{3cBO%BsQhH9o>yQy7T+R@4w6sg~69@y$btHWEdTxQO=E`Ah!m zec-k}gxIPV@4+NDs-56V?++BZC(=kPUzE?b@bhn+31854W<;N3BJ$X9^x%;Od@H8? zIhZsr%7)+M6DL0iILPtC2IT?{J@4y(slKjO2yBB>+FuwU-TeYnX4rBjqTX8gM1jHm ztdpzs5#Waex8zkZj`M@KC~>(7*`_pYsd^(s5TOsWONCZ#>`{bvNMr$dn7N~&I#W7z zxzUBtVIfJe4!s<(I8Zyor8D?(w(Ic?8aNUotiA32cDs%{RGj@tHKy3w=L^;f3mrOI zThUf-9utQxozyO!^y8wVKgrf;ALC;L?^v<+xtM&!(L{$u4ntv|#Ai9hz0q1(4qBie zg2H#(;1-yL-kW;2!41A+qc(LwzkGqrxcK0)I!4u%^+@RN5r6*L!uT0J2apgm@NmFF z4iE>jSKFBNK`SMJ7K7DT!wx484Dm29L*Off$Gr_KphSd3@>EjMT@EpGIevnS+IXsz zGqdCUA@lQvPdny~2SSvRR2NrU5!|d+;Z|E>$q#0Rg^q< z0zrq0NB^1E?aqk&J0#H*oBh%cesB1SqmhRuMs;iyAmW7ukVy+U%U}?AKV4g+(Z>IZ z&lw@~5rfgt-u^Z_K&YfqBE^9vJ{IQs@th*GKgt^G$o;S?s82oWiLTM2KM9`pdCmgr zraaHDOWL=-B}gdTSbT^f zc-+`v^`7fX+EE~lO9>d^jeosUh|xb7g%tAV7iWXrNfbmB5pl=K_PP+ZYweGMB*<`n zQ@qB)Lqm%IBej1N{VDqnTD85ONmZNQ*xp{wJo|u&3dZ}>T-HfY@F0}}1AW`R=cCy7CY|rjEuP&9UX9&9Wejfxg)0`WJq2h zUB{bw8j`qp7}&fj4v)<(HfpY=#e>N4^b^nf_{XNhrI#ys{MEtZoN2At*9ai}ZBq!C z@J;PrE0qit{>aD~fbQWmsLdguub1Wc21(C_P=)@>bW;;BZT+Injt2fR>p%Ap29W=r zZnO|%p?pR|YR36eWEe7UAo!c=z&US(F@f>v1M_1iCD5LPX1f&-JQr_T=hpMGv?HgBHF{xauuY=_DAzTlahkA zQoM^~Ww6*uw@?~8>ac~|@3g3b%jHL*Q*Ok}&+Fnq=2?2eBDuG%J?+EiFDW^G=V_v$ zJjGS50_Q@|(FFd9bAokm59GV0R>;jjbIar#c`|(8s@voNxfKf9*;n6RG2Q#0)-2-q zdS>FG7YQWK&j-2Y^ghfd(%%+`Ywi=o31&}pqoaK}IB^)??UA#SBUgDj#Im@*Pm5%T zMUgbjLmEBnMu&;0%5!(hAXQRc*A9;4zGb+Xj#B$pOPkUkBmy>$9KT~9vaeR0p={AZ zgYl>SANWC?Cfg8q-{OY2~sV>Vv&gVvqiqz|~=%3mNFK@D!9Zt3qk%AE6MmS?W*Zh`_o01SevU}b8M z%8Z$l70!M#XeUaT$BTb1H1Qzp->#a^PB;y&KUV381%ku&B6J(X{QAsZ)-?88ZjYXs~NZ544H56>@r(P8r4 z{`<39GTjM@F;Woc%+zS&RG9Pw2KeUIJDB>BZ;w~Z1~b>>wwbHgDyxc>eYQi$)8AiL zw-$_115FMf-3twLeRCKP@dV$Y48a|Axk!#dB`MoaEqm-H?=B_D7Aw4Jh-{`RRq7-e zNnH*ez!kUKjV^~U<{T#$ow2d$az-mQ;AeNK~crtjrvW*Z%OU!zxdT#&hT62Rj#eMRE6t%==g z*>+dawg$kEXWC}Q&e`<5erehHAiRcQx842646^H4E?)vx*=4=A6I{#`kMI!aogo}J(*$ETX+ruoP*zu~*ug*bT@g<;~f*Tu_> zk6yzsz17(~0dM-&U2bgh^<{fM{xI^M9It7pdd90>$j5%;hP_P(`u;|CEa*|Lh?A*1tJyp;aYIIKgK%JtBWGih{tV=USGCRK~b}cAPh~h_8zjPrFTX>3_3hTFi6>g6rv_x;!2S&uZS0CX(NSE2_JdGk?zk>CS+|eiMf()TE5Gbd*E= z!jg8EJTAMNVDGY(%jOmVVvY}q-Z)W0Ty}D_%Z?Xe49`cSrOYJz_18`3jUL;1apqpP z(PC7#;*xB4j0V1EyqfMC|JVaun>V)Osi!TMo!>RvJi-IMdma=^e>*>)fU;LRuLMF4 z4%8x1IF#E-;-@`try0H}6Ufc8-9Z~~`8@gx-muA<9yv7S(kOaZpPN|%7|ml+9e*OQ zu|;JBER^suv|RWsHNwFebAg@+S(Gsy!x<^L=Oq}NPTo|5f>`G(Q=-E3#fT$u;~@`P zgU4Z^f}@iW*fzD-yA6u8+XCd$Y;uBVZ4+5EC4D&(7?$vZW`z<-MPLa)nbn!X`JTvV z|4VH#K=<}6M}I*h2NIE-DTYg^6V?Rp7fRyykF>D(y~JyhSf~Cx(@oXTq(|PE@LK_aQiO7TTPq%A!icVvdwA^pixTc!Yu-OqN=^EL<%~g5 z^xnP*^j^NLU%Kpe-&gYN_byd$k1L2#irQITC7d+LP_Mz~C1Tf*f1T`>|LCNm>Oy?% z0Z}JR6~9~F;TIj?ZDJetA@~-M6oXZ!onoFlG4rxShx{{H4fEH)tF}l zgi@!ry&4g~P}wAvIS<8fIJmYi>%RmTm}xLPISnZ` zaUhp)u%8?mC6GE>dH4v=G}5pC_VSN5tJ__)H-Ss%uOD)WjxhgySKD6yO9 zO78kTzka0~8%1V%QItc`rlLnn`dhG%YHO3DsfqJP%lXd+(W*6Js8-enDXQ-J2r6#8 zF|BM!weuPIrHgq3!_W|8qNGL{9v`m-xlE>SHcx}y9@LS9Df9YaMd5#@`rus`*UbDw z)PwcH_h9=yxDcvnMbReJD%D0)#%;GF9!-a-B-DAst@cjqIQ|RK1z2PSMMJN+NGMc#{tuzzUSCBN6v;xNjWyp zYt4JrI<*{ml;Z)b5W^!PW{Z{em!;)v#tV1~3Iv-uP~TJ^JTAQ`P8-Zl%us8RfJQAF zMpC6@6FZYCIy=aj%$aO?5o8!LA@U6-KK>5V9Qfo}+=73RYT(GSd?t;3Zqi~0ZtCqB z0LTlN;L8~JRKtUXg%t?Ru$<}(+6F%|{l~{84yty1x4S&_`oLL9*NGW=WO4eXqA>C! z#xSNX+J)j2R3pxXmxF~F;i#0;!OhOuzY4WlTrUC}j3El6!PyVqUnt+3Q|7W2kOGEm z8my#4g&p+L#2&=xSi2rzH=8l!q!HE$!NbEznUSlGYWN>VI%5i)?GJG(b=RO7(nLtX zaG^r7Trl4Gef!;iQv1fn9moub#Gyj%vf5}UAmNPjjNb&arxm3=^Tr84t!tqEAJQaw zKKI@t^%{|67e({OnO9^s29-?Y!=6{DQ)Me(qDcr*HB#2@8^-uy1i{T&Zw7h6exQf~ zKdg7pnc6`%A0+I+3sJKVeH=pzhDz>T2h^yKOLZxn0}VygL#w9k`ubuBC1?>3X$%ih z>ute$Wfy}ogKjdsAB+QT!x8rXbl(2R1~YDAPhK+X3+;Z0bule{ziR@zs=v6+bOtPk zQ^hr^&^;j_RIvTDR`r3^0+v<_8p?dDyk?|$IfqW1e1~$6K;hMZW9?$Xr8E!~OU;Nj zx@}X^&3M=6-y^#=3CMcZ946(skXzt5J%?#>U;DdU+NoOCVo)S^xDIm}W!^V2Oar(9kII zd}!J{8KkUG1{=PyD7h6iBTFPCUW~m^o&Cs^McvE?Bpl91FpBAqnu)GobH3%J=%$S0A`r|1)TdfJIb|^!s?qJ?hqAg94 z|I|3Y{2Z)I2cHFWP8XSLs@Ja)bq#O#DQ;j*xz%i3bR!X|+UU^ziWZ~>vr^xi)#&&I zim9Loo5pN%Rs<;>Kw!*pW3Ac768bY$MY2=mbs^d;M{~86#~W6?l&Z$rTZLC#(R5?X zdDHVY%G4~+{Ab-&u8C|3_<0SxDEP{4mXb2KN^1qQk%%{H{!_KAiySHb_p%kJ z%#M#p^k=YI*4oC5Zh-Xau^MpFkS*-I?LwIlt$6O7=+p5}*Gv{2D#tq7a`l>T`_6Kn z@d?f!`DHppGW>s%6n}n#I0VWYyBo5Dn=*{J+xYb(!vd%E<6=qgY%O4JZP@2fx?#&yzQ!2EpU+8C@^`VxxOlj7fBa0Qb82kT4Yoo(xG=dV9t3j#N#2!R^Ur#!08p1 zSaKdSWdwF|Sl|jJC2NOmRawVbFTZ7n1mhA4IPO>yIbILEkl4BU+;!;&ixI1AedhOo zzM$(#+>=86brMb5)0KRN|IQs@TB7zgG;>pF$!4tn_ct%BK|_~YpIgn!KzGx(i(xV| zzSj}yu;q03!CQ`zD|T(de^WS4MT*&e%5L~a{vAWnfAg6J;m>N8wl5MMx0Bx>EH_)l zFE;)_8%>s?NUzHTPwQ^;y)9(k2V#tK6=gDJ9lGOF5LG#K2xqZ1!fOl4PuM$)JobWa zC2++!Pn<_j?i09^(IiaNK9x(*fcXZt%Ici%YP6vYSOD*G?UBdtHM3!Zzxob(2ydP~ z^3AP!%TSA|hY&+tp_gAon)KcA{xU!HZSwjhFQ}o;(sSdHWf6!QGqX0mura#gUsF18 ztk>E;lNKpjU4#ZH%RcgY)vD9jhxwqTux#~o?ycTDPnnq2WOHD-?S9dvNP~jI)brX7 zwzgJwsZpY8`Onhh91r4^jp#6fcUO~`n^+SD29wIO4~!D%_xTG`&{4)g4Nv#&%?O8~ zSn<<$ol9go{XM~Ac4i@y!6GkjPtkH`%=UVKnsmQ_a!YHV``pj|(lsC)U)GdYm&d>U zM_qjx#Ohem)e)Z((U|PJNY6;g|58hR=-3&o8vBosNMJ-`Yyf|x`Pu2$i29pwYlA#J zsmrmrIFt|eGC#ZOva0(HM3qMR7Lx0eCk>01=2~O?P2m)%N@V4K>BoJc@OM}(`i@NR zm`-(U&DFTT;BzR`lJ<9T@k20uN-e_?&2^y~cQX&HNfv8tOKrcM)(|ci&rp%juCOql z-2jpwsc-L+bG2jv&g9cZyk+MBt=S9}u{hciW|Sbm=dq!!oU~9r(!50fA_8vp{`LdJ ztnZg)Bl+&&3#!}Bt+$3)6$*f==^mV&NXfm;+oiM?n^nVT!aiP&n5Uk)txgV$Fv6aR zh1`0U&^QMo4fR$`=dS=*EDgnQaWkC|yhjANdb_!ltmx@q$2g9gItp{to9>ROvx82O zSZ)6d_{PtyE8+g>B9;YYQyPTmT}5FM9p=jIYnD>>&>W{ZdpNnc%hX_+C|(R3KOO&5 zwjjmj6AM^5+ID6Rd?<{6gRn_!uqT;sus)WSq=i~vuqh$pF0vwXvcwLfP$-2~tD^9p zPm}w4lwT5s$K+EANCaHYw0bl;J6bZo+N&8OX{N=&cC1ie^HNS#8hZi}k*KTSAD9}W z-ax0dutS}jxwdXRp(ncE1@2ir!^IM$94677uFy1^qkO-p6UtfGcu zo1QetE^iY<8qnDhan_+6Ee8z^9{3meWo}+h%1d}giYV2=}V-sMa zy{-#A%?jH#k;T-QY8)6bxW&zRCSCK}zvC3tI8Knkf<|)7v?eM}R+X4-JY*9uM_dkM z=j$e#B8j`*5NSTVpEr}$bkxu`rxOayI~o)1+c@p5-yjfuKaH~8$f_k9*1NHIw9z5P zliwkH9&dJ6KhNj26b~0P@D~3=T#eKcPFvPxSg{kVP$L>+rl1=ZF7)xL6F!)Rs*Ho5 z^4X4OCR#0cdN2oe@bv-v2Nk?Ff%viE3d}Ud;4z~v%;r8rXJN6ZvQWT;P&<5tc20ZwNzjDbzBgMM@XCX zj%+;WK9MqH*YEYR&ks5}G0RRs@&pz0vg*q#F9C_$z74_3`Mv8oc>XnL5W^cPo-ka{ z-i~9jTsZ{Zp^*nBI0u8_lzIjuTvn@fz$ux2T zV0I08W0)^$v5~XUAi8MX961$b>>YGpPw zCyGz03Xjjp9vZ|-khgl9%1V%~KtP9~Mn^geO=$n8!#;-NFU6+MCl404YiwzObIH5F z_{4Y-4>Udt${myBktm=iF?rkWmA3WZ^8-b7^E_3`S()v1U<#!?S>Zm#>o8yJOv7a5 zk3_p|pMD*h(J?w*b7NhJ`!60uhmjofgGLl*PA%Qnf`S5Jgq8*-7sp7Do+=6F*EG*r zp~l9>@zuI6aw#sv#~qiL)lci1Ev+T~C5hp!141S1_sw;}h=dV}raoLW5E%sAWGjyH&LI;m&*CBC zRfkLY*%{n=0Al<3B5-%m{Hk8)MbcauGcB)4Ti)&6Ld@QrD8Zm4{S@jETOKZBBgpc) zeU6?+Gjv(RgSvXB5mxp`$}X_H$~C_g2D55LuzSmftxX!(?BENCMwQ|u+9yX-(tOUk z59Z`wmth3ST$>5sYr5~yy0F)_7pYnDq@9cgvd_`P<1*&1s`s|-UGF|U3EkDI7g|e* zV4spj@S=I9!{FqC%;UDAxA)?(2(T&Z6vQ3ZVs01aZCz@##aPn^o13%>J_-r(N(Kjo zVEu-U*qTIGj=bkB*)5I9WTuM4KLOstLO$40sDy9_{ zq_FLHitdLqB~HW=1q^Y(k7X8TOO((@K0nR)Xj8^7f>n-sv%OzXBjTw-KRuqCtYeye z;(kyMM$@Y-qod)|!i6o!WK+iTa5g?)bPxs#*+I889wWsCC6R1`BCqBT1Gx_=)BiiQEGM#jtzd|9Zf=)r4%W)iFfB^FeSwT~dm{=xjtf66vH(;Y%_zj6i*nsl zvo#Kt8iJF9gG+d}&nE&xO|QP-q#v$2(~${m!-BeUSa}fjEU=Xl%lqh%BJH&S>)T&E z9|{^qIq#V^h-mdzV2t3>8Y`>>qPNK3Wah04=l1?uDSquuqiiDtOped0uP{vG zEI^DpYsvlF(zGA<-0M-pKSVzPP?Ubz1Dt+y^_oULc++{VG;*bNH!+crlosysey`OV zD9)vX4BNxefJ2Ol89*ZyVR7Y7RZyUn@o$8nL^-ckj0Mn*m=CQUo7zPR(RT@DWjo9u zdw7OI?+~7z`a8|pJBo%GDRyY?-)U!te7~`j zu65%9Df+l9Zbu)rT@Se+>|EpJfJnRfqS^QV)cJkhEpU|Ps=+8Nc8JlWgyH&hCOjLjhkeDM>{gc^wy~T6WVbYI?zj4wS&~h!ar)FNg}2nz$4MgV-r{ zJ5CvHJ9P%69z46Jyql5ByHyFKLW~G(@WPUo!0TK*(`osn^=~@0|4OBH0|s~tki(v% z_r7VT1y;{lf2>sfivspB(5vUKulx&Ha5YbEWDRQRpw@JJI*hQMih^&pSwDt&t5mN$ z#Kr`|h;(+-g{(ZBaHKz0Q@~V9v+i&4i<=$g(TMhnv-x>>KqVZhQ{ps=2}pRFmrko4 z{yIX^nDqF5#J}__&U`&n|;S=#Yec` zc~wurFeNKUfoW=%SC;p=a*{A6L|gwI4jZIig`$qXUgDhDI@>qg^~f8FYtxB=Mix0R z7zR9Kd1VDNk67@I!}HzJlfP-i)ptI3No+j}WwLziM3(kFF1sWfAxg1(@A{w#^==LV z-Xcc+p+5YDYC&J?dw4m^8vMbUcHHF3d(nDp9ryinX9!cG?M-yvd&dhY9QtI|4P&x4 ziylCVqGpC=KM=GZ8T{k{l1c3!U^s5S<*(@ghXqTu>SPMls)I!;J0CgVTkqh*aMQi| z^W-@PdMk78>B^HUQS0|_T}eHmCrZ?99_}7)L-Tl>KkB7mDB*N_R`@=7;q{aOQTWk* zDp|CxDzvI!H1sG@MUfEh{HObT{gHZ-pYma$5r=avru}9>{Le@ca!ZSWl?G(5q&fO4 z$NlT%+9SKTbV4t2XmM_n`~sN~M{gA6H8?DlIk$O_l%jBI;Bq^mC`K8FV*Kx!u7Rs| z)oyQ2i#0PLbGt4~Xr0;F>T2J3MjXW&2}%9l-g{;WK1oYRK%ubnh@5BzDf;fIRUcMa zyTg(#ADurevRxs&WVtZFl*u8|?fz|;VVq1TR&mh#QsjafstKwrgKMTd4Dekhe2JhE%E2XIiBDl}+5lMEgyT99HzO zf{;*Vs=odcf$2#Svs{>fIo~Cup2%PXsCkX7m5wUIOyIajy!qf2@T`fe_S7$hVb`2I zUKB}q=hmcm%UpD=SPu!=@lEt7Ys_`NJexTS4MY!l}7b zm~3y8+FEN*?LW=F%tYnbPAQ@0QMmv|L&qN%r%QkFMuE5CD;u9ef5(f*$TARmmRBMc z<6E3f543sX1Ws^fZrL6MED4Y+#mWWDa+VNX%VXE*tXZz!xZ8Zn#e{w3$0G> zGgyJknRrs6VST=p6zp5pMA=}jbZ){N;V;{n<5O-qsvQ~Rw1oHw0>_sPry5MS(=%IH zem^k-7j(341#H%+ORVjPL~VurZMA*o$oVebGUclBAQn1Sj3lL{(U}=h zX=$riO*?+Em@-9+b1FtD2`49MTRGW!0VPRy%&3@{lvqrFu42j}2DQ4HrJ#T(_shds zz-lU%qOy|SL^8zUa&r^^L1%D5 z(EVJQLd-A;5}&WpL^3enN3(e!azJ=85DLhXzN7 z`tmS^-id7=s5&dMWchIESL-t-E}n}os}eTt9-5=OpF>|~(zY=r zR0dFrEo+x1=Z@q{$Gq@motv@97|2#yXG z^FHSPCHAysok~oCoQxN9wFn^kF;%27*WN^iOtL`VMp9N+3<#&PnQfEKWo$&aZ(h}_ zDT8B;0Vvxrg&)M4S4L`#wPr!m@j>!L=lDaVY=yo2$|yoa)gtMNf0+C_FtciLs<)vD z@M0Vp>6eoOk*ipSZ;+UGpsZmt1ZwEkR0>PVar86C3!6{usONW4fjGI~yareouu;1f zn$aE=ez8wdxiUl-H+0v%KmXoK^k$m2aCPQ1rJm@lI#k;K8vc$*WYI=o(N|;QDPxO!$`K#Q;V{oFXVh+O+sp}nwCRz6rpiIfrHb0qL zzHDQPMX?x<2OUsEP4kba776#DK#i!YdOYDod3rOGCvPgyKsOvFq$?lC@xutdLCi-} zx{4UPWU8j1m>~MpJ<{z|IZo!&{$k3O^@*q6;{A5VLeHLXMR5g2e6K-BGP4z*PH7P_d-xWRSs(5=`pLKp^nppsz@TOocdP&=7H72Z9O{hY#{eRjcIxM3qeqGd-9 zXCv0EPOKD@(^@|j*ZsH%bUq>&9R702*z<|FK3$(wnPJGeWyntl%szFZaA2<++NK(G zQyHTe@snBF_BulN*AOEDxnr~l&*6M}_j|RBRg%Q~dDC`)&u%X0XfFs;XBZNRyK|~T z%@^hk=#V+{^11DSSuDdN5`EL=FzKeBF1quF(X&WSIpdyO{8*9Yw>CzLue2RY@U)WF;Bb zWrJ@AFmWhxPkSRdfs;YWW8QJGF}Q5QpZ#Rw3nzwlwYGEnR;MOhr5L1o!p&?1e%JHs zTh|UMBZ4H8gCYZes4IXrRWcy<*YUwO{JNzZQzNsL8|KF8S>U=$@&sQp|Gf@pj6R3d z2DM5@wLunlbyUOh@~6oqRqsLh^aB@f!v)=1E7zbP_g5I$zO4Cu+8?HQVtzP{jfc?R ze^6h@vmm2F004totyatR7hGJtpSRx3E=<(o&IP|`rkLBD&%2Md8;*E#t~EU#)vA+M zdTrSp&jn`+ymO>RU3DgQUU>GLyr~np%?{11lD@e-@S&UqPS~kq{GOjr|L2+u9jT6g zEYy|HdSnkH3``sjylVcJ1z;*qlJO_kc5Z^(Oo)^-ia8vA(;+u+Q!|k<-R&F80A_r!!NgHm0=9NA_Y#OF~7QEBV3_+T+iYwW3!R{xaOr+(#O=0chQ(8 z&=wK~@-`xG&aQLpon=HJQu9c!V^uadspK zE=RO>76)}xK|(bD7d0g|Gb&n~)V(@>?aaww&Lc<|Td*^*3$3c2@J^A$1zH-J%x@|4 zn_1wc?Ga6anJTmoo*e}bAnjn--nA!WDwypR;dgfd_T$AG34xoqyiZ(q7_LKoU2Z)p z+vO&aTfZ6e?RW}49<{3Wlh@d6*yod%9XAd*LzQokZ)AD!i!PH+{jTbK;FI+_HC~3U zllJWt_j$vqwJ!X9GDuuPZ(%_`sJFqgBWrIky7)fJ^-q%Gf6}JvKd%yq3Td+?vK(=~ zNbtAG-E3?V8p(V=<|b#T+9L%0wp?6}-IDpFg{V6Bm=! zPf%PE4fn03BW(Y)L~Pe#gyW5Yjtfe7-@jWn*!2m47918~m&?{x&cV$l*jDGYIZQ#f8k7 zAdN1O=vIp^&cE?pf0WA?KrI=2qjY+!n^msO0DLNP~#d|En^Bfce^4 zPQmj37q9;}u5auAuTkeKWc7c$3jV+S0^j}qfsinI1a!fwhx%QeYJ_0J_LM}ULwrWS z%$^_vb?liLlz}l@V5HQUSdh|g;VdcqT2A0OVB(@cMJ*WN^!Lt9hpub!Rh5%z>6OQ+ z>i2TZ=1o0@ zHy8C)Z*amIzklZE-IA<%bY8i3<&xxFvB!g&vt@ibwd*D<*l2k&n5-!ckektNRnA2FwB%TW=@C+GT4YX+>uIfKiVt@wB zx(umuS_)W^2^$}$a64IGNjiX(EO=L+do?{>9bB=1|JXyAC$Z%BpY0#`^ML|^pP__T zFs{h><*V4S_xo7}qtmz$7W{Cm!3?f-C-#n43!d@qwF7k@tg(Oq_jD>FzHtK-D$^E{ z;>x1#cIUHzB9cfb2a5hjHjl?oHgXOB2xcFCeiT-4x!T~J>to%_8Dx;qw*=n6jk?kV zyZtU}LPvLZ;9HnQ{i|mv;W~63PlxWO3iWPjrCEyD_v*ezMxOTEM6(JDK{RbJM2%KF z3Zohi+%sz&P||{q^~Hij<#y+cI*$)KhzpQwux37OK5|J-bl0>t%(27yw(Y^wiAb)z z`GQ=&Z0)!03K3ET-1S>IbLz8<7SfdB1n2lpaU}L^7bUM^1H?zTwK3bBu!G=CctYR$ z5nLaEJ3&KVc`pj?~w~ojUgc zXa*c9y-)&nM^3F&W)s$n?z0yAxSd?^?2@{sJ9>n`0|F!B@VCCxe^ILMeuQ5j$Zd@u zNqz&rvNE!=eygjibA3Ks`6H(WcFg+j@5cjq<$wTYQVyt=Eq6F#ViEz_$#zWI7mSej zS$luCSF4`kq7?1G(b~?;Ol=2Hl)xWBD1s13nXd`<1+l5{0lIFzbtRUZ(HM_-mwVauNFJ8vGjdOgW znwIUz?kyXBS{^BSd;8>aJF0UcMhWqAVj6hUsgAgn$)=U6uNd3}l&TJ{PpTpt)JZ;cEi{uEkDKZE-!p`WkW;R86Fxb z-mtO_?;`mX{h^+5Eq0yc{eA9&94c!?u;aG)5Sv~zn$BRY4(A9eT+#wXAD-1=ZjkgpNXgw@XNoBs4KDQ4*<(7)lSHo139^E{#>_srhH0RJ~v|I3= z&nkrF%bTvn9ux0|0Bg2=gwVQ|?dqM^9l!Y8C@I78XZF5&D&p|m6&DpPM&K&hPF>ew zy_9IgGPJUt3m27cwc;lassge(k?XoT^xp|{1lC;609`X@==G;1?N;Qh0c)Y*MrU<* z>#w^`?X#Nlh+cng*2DCp*(pigIgVrmm(xo0PL>{X^=$U^iaG#xo9nO9l!th$CY*Gc z@5tegHUlXUIe}Z+5tVlz>`uo}V&bRaD%)+ah$bYCKbD}`YF47WyGn?;8t9d)Uy(g- zQV5eH2_owJ&7Ue(Du)_ROu`(Q87aTecRhLHqH9-Wt!D$*3&AmmX^sX%%hwgOPZ2Y- zGE>9Eq$F6irFnvsF23BK+<)V%kC}O)WHq~g{34Z}B@DnS#0!vb7uu^23DH~gcuswt zsbV0248o8Yo}hL%cwTq09X`llwA{6vd_9eG-rK|KHab(bTy2$m`8O*fAhvcCvW|Ff zO+b~?{y%@EA2161haSP*8%UHT7B%bdJ1=J+`-y$v^&$4%RR$UZB<zy4U>#M<*=G3lfT?inLz~6oSd`G75zM~?xY>rLW6SW#&PXraMoBWnm zE`jV^JKgfB-ng<@>>{*%4T_9%vK~D}8 zhe?+qN0sETA%7r-Et<|vAzXOc{BlGIQd){@^v=OtGsy}b?CX+i^MqvOe&Ys*mi21Y zXYb=1W^YZ7a$gS{{xs-ih_N=gubOysQq-qHsiG?G*C5$6tSS?vs=n@_Q_}5hV4O4x ze6e#M^AtmAvx199aWS^=@5a_ZD$n`K~x;m5^|&1idP$Mee6d4%*B6& zeNR?WGD$eQzds+tYm$?s(k_+zgX~9=XN=1BGbv7bdG5+do%O;9F-pgAW{<(BubOK8 zz7dun%?MJ$Sa9F_jQ_;p;Cd9{*NjEw&5|f|Ks+99W1as<)lSQAb$a-3JW^!E2$9SH zkxsIi(uKY~+n;{-==)Y{odLtq=GyU2O$~dM+QXK8CwR8ZZ)Tj^ zp+!SnXZMi4c*3v8Mk zmYp@CJ@m+cC1b9>4hbvWY7A|JM3I&hS^|#W7~dsg#FXzr^_(r2SE{Ep(yE1nP}khy zmHx-V#+>R2Ol)l8-4Gdef~ZBoIS?-u^-a$j9Y81 z`I~cIAm-v{kd|Y|G;_HFxn*g`UunR?(pZ-*w7zf22B2P?fAbQ`g@YV;lU))MCT3KK za~n1by;#GAh`@{rdXcNwr7T~xv}Ra2AmOwcmo1dR4>(?jWw*eVy`1U)FbAKZ+Q3^Z zh06ttIX6N;#RgWL?*7^Hd!t?zAxLd%9IxKT^(bdck9Qts)WkkrhH&xIY?ZIVvzH*D z=Sy&MS`9@!^37WaT?_udQYHk46B(x0#!c51LcQ>51TNOa=^mxYP7^Ui_KWjIP#c0i%sD4NJ-=Tgw`QDOZ?^u-sD0bA z38ShT=4&lwGM^WHz03PL3Od&?^$tnbDXNe8cvxDVk+z8rZMWijk>D{itq51p2fGTN zE{SHj@x*csvy?B=!l2rHC{=g9$WLx1F8N(R-5w!P=}cH`rP+Cb{Yg9hi?JqtjTFFI!|2e;?uW-KH>=_^>8mOJT9l~YxwX?#rCzV= zDi{eR(Y)T4onfBAc2a%fM{=g6PO0;+q1Bn=pJSS_k;jU6Al9pK&^x*ouY9ikaR1yZ zpvRuA30qo4-PfIecf94nI2-Swx3qaNI3wrUK8bg;!F@B1`KLz32;|BJ;WrAt_bs#} z`7ByTLzME#KW9UqPXNuqr+4Gr*~4z72z}QN@|Td8R{%S_I8dN>kfP%+S0J)$^0fov z;J|N`m^9DfaJ*mV{S`9pqs?j~=8Rliyz}d0-Qy4oo93Np0A|ZAzm^-*y^Rf@XFD89 z&Ch7s0OYGx+=?Aj+aR(I+@NS};{y9xhO<14q3*ge-LKqmQQtFJvC>dvhE~6Fhs_RI z@Hwf7b2Svl^!akt_(c~w*)Uj!*cDoT5#eW*Hn`)!D^{&VKKk(>rlt9hEo}WLm|3K8IV4Hl z%b!tf)e*HCzO@tObRt;Xc&OpyoZOZYPTkc9#q$dAFHObcFx}Mg)1vc&s@XzP=OaXG zJCYLV$)F2pSqXd2deIGw5T44J;GdoL2E-*|+XZmTR|-r(I?-F!u@SPour^&+fmKn$ z-F1uW|A{QqfiOj1FwP>F&C6^`Q@P|EjSp zVaN|*%47=gNAw*Y8WS3LZtdwaZrigF_t-{>3Ny_<=es;yskZ&HnrBIjNNkjefhIz7 zYD@p95bP!~PQegL@Udh~v`{49l; z3n|GO;MoHa0KXX8o6{0l3FWHgtwz8o#A!GVeCy?nY(L1!u`T%&r+ zMFU>8QE)l4#rnhbo1TYcIqIlZfnfV&1k#Lg;l9w1Tm$+O-3W%@;ZNN*C^hF{Vk#~o z22C(V9$1JO`h6#CcZm$4R?cjYjimiKOM6ZQg^n=6u&Kd`h1Sd6FB*iiJ7$~?m0blU zSu9{;Vq)=07l$S}6A26%Z~3f$3)(U*|0o+PJhq|F9A)V|FP3#IUH9!7wdM=vf+8Y& zDm|SbKtdP(`QbDK`~`h%KXUd*hL01y&Z|Q%z|vwe=s-3nD^%0KTFBdiu;OJfW5oBR z+oR<}&MOa}X8rS!!6XmZw3jRLqPKYdsfd;tllI#Lm1~!`WLq)$u;x6t1O5sTYoTy? zzkJoo4l0pon22B{<{NoQUh#4?!tZCEPdzn$q{D$X7uY1T6P3IS%MF~mKJB+vo?kp% za@fV&f6ge#HnyQ%toQKK7ZqoY90c^`r;KV?mc#AUoWYwUU|;ao;yqbd2-b5RwEx2J z5L3x?cV<2O+9kEhKb0L&Y?50x9H!#a071G2w(m5?vcaG$4k6zmWN@)c)i`_2Gq{G> zI&>s~2Abs0W8)pHMdt&RGvGIFW-xOxnL}(b%$`W6Mb7yhVCe2^c^0!1u0HQ$Q#{{V z)L~9=T7bH1dH6{-s!=VtPB6&zH9}Z=>^gm(d?QPBCUV#D@b1NCLV5Ar?G?3Y=x-~5 z;*D>t6{C5nXv@cP4+a&Fgeh&4pOCK!VdxK!Lg0zGHagX-O&uhZ-wa}!zVn}xlcFr! z3JK;3QoYIO>67u75HO!Mm`8aSV+sryfc7zT#%kB`X3bo1Qhn$}Dc$IVfyhAhvhKua zJCYPy#N4a9Ns8g~FS~h(W%5AYeRlq~Lmp9kH@Y-LO@FQx@_MCm>^zf3@vaYjHe@8Q zuCnnA6rzaaXwZr*&d)4gE}6{KHt>sAVXj=65iZ76G zQKMciIv`Cl8E}s#(}GO0-(*TGdCJ7(RF-@zYPyxPUx34Mkk0RC71viCnH^wC;veM2 zhpJoBpm0#%rRXrhMJk4t)a`1|)%`w2TZenWzzA)!HG{7eLaw{kVsyQ6z9kofZmmv9 zVt0@GHf`X@xY^|cMg?(t05futtIAL}_*i(r!A=2!Dud z>f~nU<)TG*Y+p=%c9CXnP%;2-bKxJT6Cfyog8rnNMaV;kpM{VnYYfu_N?pF7Rfy7- z+6$S8N=Z4}Q3)nhc6M^tA*FLYICyeCIHcXmao+U9(1kS`A5Zr&n!zncI9n@qmX(Q- zrA^!$1D5$Q3Vyq`O8ZIY>!q|P&2Kiv6G`xK3}k}C8qWJ{=I!9gz3xC6bC6*z3!6g*ZIYQpk|P z>CIHob6Bw3pK9Ms`B3Q=q1{3~95E+s%8NEtKK~kugg|LkL+*g-h zT8eRin)JAF@k_|wo)HTROAszayYc1zgjl;?$LCGzi`sRTDev^kbi>peWJwM$>bDTM zI6EQYrMzOC``(z~VBzI+XZB-ym=7Za(WtBb3vrRCUq&n!eOoa?v}gCk%_0K zgdFoxQD4&c)z;zhJ82Ozr9dV?Ykp9x!()|w)|kr0^>prG7aUHlyG+YkZYe`U%g{z! zOzx~xQ4BaK0`R>0lr2L(n%fR*J9kfdb%IS-t?NWqkTQ?f-H*G}%UvEZuRKrBr$a<< zzxHD{`c@Sg|1QFgc)*sMD`o}y2mc9)6%c#hu(|q9>@y(MQ8SRva$2i@K=nnvQI*U+ z(^3|fo|jg6b!ZeIwG5&|Svg!#Zr2aOjg~wvQPn(wqM6jTs_LU( z{3mGv05c(!!VfT;>%*yZEbFD9s=h{YHFWwW&sH$*_xPZhgM2_Np7VBRH}!QQBYm^y2l`;j zEjJ5$?#u%vBDsZ3j1wucGo4mg(wh`fUe0g3WN&oNzI`s*H7JxevReusmDAZ)hY!yS zDqB!U2QHM4f%3JIV8;w8@-oR($hvCI(94e3xF}t7wcMJPmrv{Qn}&^ev5Fx@dK-6l zQICM*-)=!kW&0o{dm!0rtO~KPN=L@}Q%8$MJlzYI%ON)}_*Q#W zXY6qd)2eC5W0E$XkIR?Ce@nR!Vt?exnu_->?qp zq}FqZIga(>ONgHO`kUy|I(@=wbAp&k)kq!~HvX%unLz*`2^oCczoH06`L3evrgbK0 zlEZ`I^>Wt-j-E-~Gm+7 z%3eq+rEQK7Cm^qLG;O?%@|;g$E7&T8ExZfuJBGQYKNQe?_(|3IP!eTd!$J#L!R5HI z$3Gl-b?ot?q#vT%;zh^ZhmqwdIKL^Z@nbQ=7-jXD(~1Xaayj6>D9_|bu&oZ7Hw5M| z)s)Zp_k20h40E{jjvy{xZq`W@7h6k)E(X9 zwu8R5EFcFZ?*F=U&C1;{HAP`rBD>nhLQPw?ZmW#YJdOM9p*b9IGFKA*x$)v4B@~VW z7klG9gG)|Ji+IQ!MuKEmE-tYjT$KIA^kmj(xy?ZZszsJ7dJp8ZX!UDR9}cy;!AMZq z8`tU8bC!ke&q__hyBMJhJ4y^s_u^#}pZjH2wO2yB^Kmj5w-cn+<32)tUfK2z5SAi% zW~DaWh)<&WTngH*>iUw`QxB6k{B$FJDVbC4UTWat&2se>U^FWOI=}gHNFp{&8w#W| zwS!VT8b|!AJehZz@T|(Hdj1NT(eS|MH3q(CFFhjxl9S-+!sqKpCA)-#gy|{^yy~7E z^+-GxWT5ne@cj~iG<=LkmbHde^|`pfhvFdEEsW^tEo31$0lX{lXpv%RU<7SeJt_yO^_8qiEd=kA~4Np-$9$3e8zDf z`wVuzT`BSA#!v!9uz9liMpBJ8JBG!nt(a0*YWeGY`uDNw-36Cp%rw=%wc?0gC75DRuz zqgMjfnBv6_8F<;oB~Z2DJ(|I|bly-3vY_Md)8M1Nfj)#Yx6j+=jS-4T$coJ1-RQ*! zOsY>fLPfhcVxJbU3MSSNP->EDV2jip35*+7YW0W2ndOJrfW`nuY%FTMCgFixgi@!u z?8KH5sZMZ|5v`ckRL4rq7kC_LWWc!e8K zYLe?B0xYB3%Oikwzd$&uR}Ihrfu0#Tyr}Z`b-(cn%XL7Ufwlgzr+4E z@~pZv7*-%Crvqc_%}=)f4zM5#*~ZLP2b!3O?^5YB@L1YX{)h|eemetx4xbyMd)EB zTJJO~4Qx8L7lv|FZU6Id!+>UGz~QHml?tqV^Gyf^VluA>QwZC?I({LJf(&%hTlQzz zbP}uS>+1_H4?u6czZK;t15`7NI#Mf3%g@+zkB{u!w!gao_qR^?H)830Rn~L9Cj6SK z5ooLJ^agM>vl_3EcHz~VdexK|LIH(|4|{3@UuCoBKqDl2iOkwF-uA|6OVKZJKii=7VpPQEQU=A+;IBO z5o0V)#uiLqliYBB}Nx^&E|sm@rGU_*5!<~;<0d!!^9i*EVG zHF}cn(D>Sm{_BC3k-)e~gjlog;su26H4D$suNvnb+%3BG7^fW6u=znO)Jrs+#lQi4 zM&pv9j|z@~gAbJ(aR@R2xRC{E%=!e9&~=350*R?yK*x5uh2U$icIf#U+@^8LtG@d_ zk)5f|D0vdrt$xhUY8%1V?ak0rl;ma)TI7&h=;a&;jbm%)eEkVD)%e{wm-mxhq@_Ja zzvdjXz2FF{+AhR0ET~Csj(!seAi0o_cKQ~Ufz73PODpYkc4~58Pxb5+XH=&MeQ}?E2R^35L>?VtuizOSfgXk$&I z3S>mAtZ0o$hx( zp@vG>)Q!yRYrEsul|>y`LI!@$`OuiGSLssytHyI6)-5t;k$bbmd>8Go--ha&TtWfY+$Oj_bUo-XXwVxB zJHp~|%X06ik&x(K??cDO9N5*1v)Z1JqUVlUhpZh8zk4r?rBH_u+lnO$((pj^SCw%4{5b zC$#RA;AC2J-?;Y}vr9(y28!tqxP%v z#-PjZopIxRVczLQ=grfi^R%v)RDv?I&eWB|37P6`uL8c+d22&gB0=0{Bu4)tMy}gF z!PPGiNBt&lbke#%?_eLBic9ERXIueNKsOoCu|kdKzv7a$dh70b246QMiOYrq=Ht;6 z=o7iEP0nb#t_SpBtLj_IO|jnhH?}ZzwfL|z%sqaDPIYztVfGv&Ne|k& z&CvWO38Pso@d`1hfWo@V0B})kHdsKp@}nUIQ95nuOU@>_;)`OXzVGh&5Iy!Yc7uWZ zG>!w4{UA?6?segl+(VIwZq|_hY)$gO#`KpwbIx!`T(SkLHR|#s9Nb(yGfaed<4FAe#OHm23 zP#(-(MnvpHd4BO?WLBvLIMX<)8q(XsvR`UnzBsgE)w!*KO6IttKs}XlE9IS)Y47V3%#g(?aNr(i zvfcKbW@qwTmbL5rX0xO2=E!Z_h{bUIN{jrGa>b8bk$KES2xoVq3{1z6ZJ7&q$jY~Q z6MtFyj_UWSwcMj5Y1(Pd@Anmh-|Az_Ceduo^)?|#_TfM>q)%N>&%BO{gd8jQRo;;^@w6cxbL|5)yGEq`HE z95@Au)I;**#zS{^$?g>AOf>WqN(-d&^@*mUmY^Y&N;jKHF>% z*$nu0AouXsc4$k4L{CCq!edKBt>^?!0t+M?Ioq8l28u7(0InYv(BGWDD>C~%48w<{ z9EhsKixH7VE0jp~13nTymp8i3+fUj)Z&kAD(ilsXY7vF|K#`c;Co-9AC~*l6O0SDI zgv%)(UNRJPEBovDgc!Zuz&UzrO}?SnzO#`?%pjnH_{Vzz!dGD@DJfI`2{D<6UmLd1 zCv&x)E1xPgF;lmjmvSs4=1%&T>k5Rt{(uwuUcq(5)mBLoep)&T@0wo|nCNmpONl1f zQbdBZx@fWR`gl_Rl+Y+YWt4FW(<MkecQjaNDxlR&AV@lvDZqd!+C$B0Uh81IH%3Of;kA4cOCIWJ1`eA zoQbMsR6hH3V@wz+5nvj^PPOBDAZ^g7a9e80Wi9K2?~?pqw^`{yfKNyhf4E0yi) zaw~pOF$k=PF+otA4Hkgy1`#lYxkij0ltY6CU2)Gl=Rhmgf6P!|SpWN8<071g4BfZ& z#L1nRS&5j-0`d7SJ#ehtQ*rSOg-bx3KMI1ApD|c;*{|d%4&UkS;CRV`YF6G|_oaHM zmTf6GlzNTtqIt_^GxATp*XyHQDy!9};TUY{S(#w%G%lCyMu|salmqd;Dg1iCK@!xPm>_!%8 zHp|n5^7jCexqq>04PM-r9nTJ%$-Qv?=^5K5fa)E~x^ske?uMpEffMTIS4v!9YC}xP zg{*;|V$i3sHnYC{X~hiU`h!xCvs{JDIT~fQ6^AnY@MXJ9M4)SZba_A7<11%es6FgY z7BZp!&d-*W$YB2cKA0j7}q~&Gt zd)BW9pLq-5GQWd|oz@wS&a$c|tWTveVFy6K_5P{0b-Oui!H6gVn+L|{ z|E=q>hd~`b-{P)|Kb?^@ANmxUOD|`8Udu^la0-#t@vhE+Aa}lJ*r0`wL<9zy5fc-~ zCMO32mE~!Va!xI!rGjL!nFMCoV*;CNYcT)>31ivb#|*=`_#cgp^N1_+ z*A^bh3P6gh9~${aZZ{!5J~BNWYktAb-!<2orl#2hC}SQCjSh=P{JevVKm!-#*0^I} z8q}(YU0FvayQ`*Unqo_}YosE9vmSC37Rmx0moKu`&M4BGhgfpaXTQfpgp^_&m+Fn` zfi2{YnPQwIiy+<60{1)bHc{KY0ELDz&S(u|epCAhzNn}$hRQ8W4JmXg60w7&9Q;NE zBnG8O`XG?Gj7AnGKR78OnGVgKeTx2#MEicm)%dVAQ>>*$R<3E@lri zBe|A$^iNLa19V7H>Y^Ucudm)1#Fo3qq38P^pVN}a7{n;~n^F|N4+Pm3JhzG(fW4H` zreQn{UhsR&qxN`1DUQMw8R>X*?dGvjaltj;8a}3HnNrb)6jUO=(|c%_1?qWq;sIny z#5qzh&I<6!St@4Kls~MN;pPON-I0m(&j<#evw}{x^UOWmoI-CU{Bx-+%+;xmtC~w| zp%QC@eTcPlATdXI>_**whb$jEp3$m?g@^OhuIS6D^x(tvcu@&5HZeBweCvY5?AZJ3A*ImzG32D^Y$VpS5L}-#}2sOxx>fh_juqs;o?w zj+G%Rt4gs&Ra9!p_7Z+y`+7K#v&Tn?XchieR77aTb-{p-zET?2*IKFw&8zBNOdeM< zpR|WOuyEPw(JPN4A+}5GLs80YDQuDVNjV5JCjb=s8~eAF|z^q1AFbU$S4W7Bwy$IngX18!8O`YUwx@ ze+Jr%q0YJ7(ygV#V_^hrY4*py2R~Hu^7HfI#_haMMV+b}x=(CN^(2dRFH23|Lu0-ZWPCIPu1FrxDnj31)iX5Uq>QJ5b2T_KU?Y zyC*RBL6<;b9d9HSN`#7^&igqurv!>-)Lt_T09BP{fhmX$7ovh|6<=dnRkdqzL&Vp- zBUXFHpxY&9PmEYGK*{ONmYQO(#jIIV8CcrTJ;BPm9ACkr*v%Il$!O}Jngdd=aEX<7 zo0O?zUUbtcCED4SlleN}`Va`V?bx0Y{l0U05Ov-gV|+0lygT(P&4fL3J5{jsx?N~K zhojcXmU%A7VhwB(S;cXz78DV*qKA^84(S7jUrn?xaM2tVv9jS>=eoFSi^Iqv-e+X$ z`YI_L;kvNV>V#*iKy?ls2}KkBFo3|x{&U8vQgf^6hzlAL1(YsT9hQ*uJTu29_0t*<%9qaSufV_ z^8QxzX&B;#Z(`rY%!|vF32plk0rOralgziAjGEZT5?c@8;Lmr^PP2ToN^ZaIZnquC z@(V**Fs36hIbDiXuBW8EW@JFMEW|-~FJ$CLY9WbVh=d0$c4asxA=D*cJ%w9FYDtO= zX7evhyuX5E?TH;uAl8X|4IF4t+4t>KN;!Trn5+}{5KsT&>8UZ@1} zKY_&CBE1o|hJmFo_V&M=ICrXTK8col>qoF8@}X`jF2RNy$eaBFC`p*9{k@O_P_D?0NSJ= z5pXU3zki+xX9g9H{{X_{+^$)ThQMD!NrnQ}kIxzS!C=9SJDV@^YjF8IzkdZjtxm+) z{HPdTFa9x8nA|8vsJYh(iKBnH{NFIofBm#=3Pd1DMA7?_XGoeSDH=MGW|9q3F*L4v zLcm{DR@S%Pb`w~N7pWN^Iy^L#=kvQ;G&Ck9_lhA?(UA9gtq)+^uq`Dn>sk3 zzEUjh7KD8>h&`EzO1CcSR7teKA>)4i#{B9!WT|_q<2wi;NgoRQV)Kx{m-)XgMX%nU zKvON^+a(J9qZ=?0wQhS778DW+!qSwl$KUeoQr(@xTm_I=k@2Ctx7#_>6)ID*ym;dr z4@8!$iVo}0lm=2{E@1-l&LsC%l|l|(8c>E2!#Ja1`1ERb$Ij;YiE8yt@5_lEBvu^5 zZl1h!z@{;LPFN>u@DT^#8!@vg8N5B@?5v^E^`BcS7v5qRREPgJ2KMhZh8KV>x_jE5 z+mRySzvdcmgZ8zJ805jaFnc39Zg(`b`wt>9Ou1$MN$YYLWV zvBn+$7f3=M132v-g9!%8htezdF;EK3^Em@h+SIq)+ly$eh@ETp86KO@#o5ld}v z;^fXm6-)ax~!{Z_IBI5zzU73PfxzEc(zyxPGuLfijB(DbiXLUf^Ag2a$?Cv4+I zxPhD+z#=z#`jCU4-#z{t)CnBr#MA~e8H9g98*I%~*I+xZyaqnMf1UAQlxOZV3d3vc zfc{ttFvoJ$y}!s5b+vH}*gmzz=!yPLQ*C~BnqNFeztgH}A}Ihe3$^N26ciM(KdR7K z8yn64BHjPqM>(j*DOG93^WOn?v0vh##OryHrky~1zL^I)jNSPwG~MMUJYbP z6n=!m6c6Ov^8p|y6BB6pFPB?*fpaH`o|bz72t1Mg{{7C-*Lm$xg$#t$$i$OB_&2u&9(xYS$qLXmh}WaX)@448+hl@Bd2_;eC3zLb zZKk0dDM$FEM}HbrXV0H|l=>MqD=sY2dPd)+-9!pi`LzX+MJQ_8W%fPs(QO^?@xUzL ztR2qO9Rv29j;~P+tFzah=1^2nh)h>!2Euadjz&_rqVxz2%|>tscqB?j1eYxtO3SFB zQ3r;?6{InPd%nIB5EbNKUjL}s9VO3!rr`}lE(iPjx%_7e3M~vQQz)>lYv)5oDO!O5 z939fh=}xuB8w|*e*^LgN>(75j`m=cCR#s|;5|HK{WpiQsJl)_63bfnpk<}p?t=buk zY@;u&6O^~77d8^d2*?Az=CI66oX5BB*hE$?E^3mZqO(L~`Qr0&VSV&0(;;vloXGLb zx_s|7*%SUrU)Ni_lyI5%I?Nwi8<1Tf^jL7AKWh82jDlIlDB>rV6QNWKHl|NMs5I!1 zlv{#8TM9Un(7v6@0vJj(DF%g0`c5nZ=Vs;wj8d%9 z+3i3XnV5=rOs2SDYP#;x0BcEfN7N-Dh%DQGJDdLn8K(I7e)L}<(jL&n@QG}vyossySn958&tTh7{EsU_)=EHNn zq&%R@p!>(r`0Kiw-AEbmJT_G+1Ts@nA^}~gR-*1+wJPHXUjYY@Rf+8(k${$0*)r~& zc524bX@9B$?Kfv*9n0lg4)fEecMO4rYpvCKql&=$o!z14^R=1zc}H1FcZveef1^zQ z>yF@<{MoTjerTc1-tRSJj4-4kCx^*kv*9-|KzV|tmU-gQL6)=+o zE?r`Aop%dy!hgH~qJ6B>Xm>9)_XdE^4+xZm@=%2x+#8{mQd$TbW@3_MK>s@Q9gIDY z8(PwPfKasO@n*;7$^Y~ve*nM&PJtC33KR1ZgIe%X3`Ucp(yKdNGP~BEWqDyZx|7wv zjPzNuKnp|8_*;XZToshx9H_jW)e0uC_MkU2+;jYGQ308Mnb+?Lu}NT5**9Y8=^t8$8CTh)pmQ4S~Wd+Q$;_uCA{~0!P2*-j=TYNMdtV{3r6`tM=Foo{tSvtvYZuKVwr+(~VRD z`gxCzj-9GtiO^c}d2dzA8=A-cSuOW{ zy6jIhbD3KEc(GNDZm%g$*qp4WPQtKbMs|=lvckNR@ao6IAT8DFLp*4yxwL!t4PIzC zhx@FzK?|F!MRmYLZd&a`NJ%Zf*OEoa7@Lgb;@@T}Ax+ zBSJ;M+DP~ZYO2?u&fm0t&kFJUWW8cP9o@*p+N-XHSA$(9wqdua=EJWj2+EuOfbQAz zCXpJ6Mk5x%vxSruZDrPmI71Z2DfiFm>YwK*Q}@q%+vl5r;o8OP36u+_ve|UUrT`Pd zb=QF=44|fvovr=1-&g2S%jUHrr$*eamtQZ4NJxZ7Bs_`M^_2xl=FW##YDdR2#6=T{ z9~S558wrct1MrlDoIT%{m6!F$L&a-zrIQZK2X=hI6&UpL$0OvxzqKF%!oYHHuBVqle z>u^3x`7CWqF)@}C-|uKvh$G)#Towj4w?PJi?s4KGTMent7Jk)&BH+xrA>mRC6{_k+ zvF4QxQxeIQ!!aeogc)nKf!#x(yGM%;U%TArRadHg0(8LM!3y`>>U>NI?JZ($-*3C~ zU`mY~vzDSYt=HxlQN_N69a2=<(|M((t#hn}icHasLpzyFzkMqsyHy|0=N^qu095ey z4Wy;<$yw;8OHo}XnB7{BfTwabHND@<2sOftKGz)xLX&m^4_><0$99mTdK z+^_)>Fhh`SUm~6LMV{_3Dk==M-)ZFleZab9;M{)i2Ea1~J`<$PLmlMh611Jqm88VV z6&t)IHV3WMJX2WSp3v`)OI|g1JnwUojPkC`!9N4?k zo27FXZB2gu6vEE6%I?z>E9=q#Y1DzmVCv3kyfK5Hfu2OfK#g3InFSY6=7p+Qj=-kK zA*VF$TRjkO*OwEld+}3TF1KjxVv}V7S-IFzg{PU0a-=qGrS&n7Q1xrgN8=2TH}ax_ zHOes6%UgJQVX7<^Cqv?7%@4pV@LVq;p|e@pgBKv^OfVI%hiPvJ7v$A_ibJ|e<#_vr z2y*ZirNKJ@#K{Opgz;j~VNVCZ!&cilE!P{{6j(<>EE3xP^PnOB=er=kA5DNiD(=t# z=Ca{L_p9wiS~Al$T@+VMQA-Oq`}v_^S8mBL-!RJC-0|^r>z(jQzyu)iZf$v_XqsS> z6vS{}r^d>O_s-7F?(>SlvmuMV11X+l*=$s56)~P2l2F#tSBCRER(EGDfW(<7C*u2)r#r{-7^qjhXdYqQrS6wO{OK^=R;G0d zDbcG`D6hTV+?i)zL0c6O77@y8HT21-S49XTJf}O!Vr5+j4^?IQNrh8N*&NYT>_<|& zK<3uTD@dw7_)D>7sqg&OKVIIBV({L>lU@iTE)kdVXA4{sydvrb|$QfT5v7pP2Q{YgN=zzrToJz9`hR)V7M6)Kn@ zi)T3}T7P({EHKeXl%|g5Q|n#Kp_m3)aVn_!5N6Fhdh8bz0d_aLqO{iS_SS^XVEA2E z6R6yHd_EPb_q8L4;r#2A{kz!Wd`uksHQJ~3T~lPhEA|nW)=Ffy@u3u#G+$jijF^g1 z>|FfCBYp^;#3Js=){SDul1A?w%FK`#dH0)D9y3VP(Kk|_lZVpewV5awR3s!;L1E$i z++4)9mW$)d-EShNvM2xXIR&bd;$!hB?WuAEwnh9upi={98o_i;1qBaPj~)C`gEHg4 z;^V(|@~zMV%m zQ@3l>v9vI&`^dp#@FdyKE)`)9se?GE;-Y|Y3pU=V zk_|K85|uZNgCp6wA6E2~oUt(k5fPCNKB6b$6rpQOr6_9rW!BJvSeU8`~&{kZ8i1?N?v&oZ;9hc_M-_rvUXEqutDlz!*+Y=hX;boD8 zHwK+#1R?=R_j22rHRVT;*o#a{YeWCVoAUL1=#ET^+5V{kNylR{xJ4 zFu40xP%*K0PiP|wI@#tyV8nmfPKe?dAcs&O6q7|wbv2{I=67VyW&e@gjO-*bI&8RH z$>MV86}(ox64=nWU?*){Hd3op4ZqTL2QHWoRc~}?1Ug-{dLDC7fdi@s0&fm__hokj zR_#HC{J57ROeEQYOO*$$)htC}mh&f1Yc^P86h|^*oC77(?{vX=N#bVD`!j$Ofjd#z zhPhu(dBu8l@eZfLLHvUkFaD<6gBK8$!4(xY$@U_9zB`}W&0I&4H(>u`3fGh z6p(plsp-5j6dE4M?YiWn|z)CANlh8()PtO>XVS;5(uoZj3!IGvfB{NMy>b*kJ6krv7ywOS}& zaNQj(LDFl0PJ>E`HYYVTQ>oUBBG2X&RhPck!edrkr9A#-uFYI2NA}sKBB)0jQY4_m zi%`MBQzOSBihb70WDJIH_F9W`)}1R|req*_M0>c|WYd3Y2k0D{o4E;B%Vns97oZhQ3>nb}nt=t@U(USoI=1Ns zfBEd`ad4qaM;lU&I{_EWzS`kJm%UjB__i?^4MP#-&oiKtR(|?Egkj$#Y*$GA&uae9 zXY8n;eCYI^-{u1>SwP~Roq`pdRbf12)=Lvx*-~|#Anx{EEj-T`B#2s^mH}!fOiA~| zv(gdjmTLd0qmd_|KdcA3EcGR3f?`FDZnh)VG4W>yqfMcBmS4UiWePav1jJ*f_hYA@ zd!g-^W>zdggI*2(ax${X=9=%nx{@gig%ZKc-wJa-Z3W$2tIc!w9=4s-;3#UbSknzfEf7& zyi$u>HB)YsV#?ci%78Abs81c8D}h&EO0m*!+?MVeSAO*}Hq0V%{HzaGS%sfWmk-OW zKD@$Ra%$PKG2_N7#>rl-aKo^MFsE+(N1>7_Dx*RLz|RYR;l9U0nCpEH#nT#VeB^ za8Q-+(AD^F>YCzP)Eyn{y#!FrdmpEMRn@VWm5?uc`;ttLdLQ7+cTzuLEF|p=A08e7 zXjt=yxV)muPHO*l=L!UK55AmHz$mQ5Fo1fe*FH^qXi^1FeiyV~qBwT+{%l<}^7G+A z570sczO%bco#2OzF5L~L%Y3S{d-skNon0J5Gw6%V@F>U|3k#Y$^Ibdm_MnjP|Hyjh zx6I!4e>mGVCQo)vnrzQx^Uh87o$Z=zPM&Prwr$s)>)U%jd+*Oaj^`g(zpQhu>%3lM z**0I_cJMG&X>_q=B`C|p1DbME?u&_5J?xH}HyW?6Vc-Qc=;$f>%Jtxqm6D(ihmf*7 zn=&2UKC;+r!92^$^=5JY#Pf0C;#VLQ^z@>4fa%*#)Li~lf9{N$yBKT^5Lj^EQkqB_ zJ&swMJj4VHn|+s$BPPU2Gx zUbaU0*Dvy#!EfCuOg~pwuMYC-k9amvcj?mbR6Q|}k@APvXcV}lgQwjVT!? z;)>A}lX9H-@j}t0F&qOL=vX{$$Ok4zLq!^J}LAlHcv& z?qOR^FG695&+g`fQoQuIR2+z}Krl+}Wsr74KO;I6?0)1d9=dP;ETm0KgNRs<9BEv! z-@2z}&`|$+>UInHb0zIJQ!uM3?_mqrvN6WiLtw#cddz%Y*>K_b_3?Lfq%Rh7+G|IMo4#+c z0LIzUUR~8%xbGl^)!6KG0Ho_iOpZAKb0Z-t)hZRd-{<-^JJb%e-79(BJPE|Nv9X!v z^s4zb=lnm2i2~_A=L%`7>zjfl*rA?UWQ@0W4FLTV)hX=2ejyDaadNT`@}pW54(g}i zgdCsLnB{}h%)BbfNUd2b`tE^wUhPDbn;|dVdhjd!@Rer(ZCZSAA`zd5R=dbeh6R^A zA|^hSsfn(_0o_}pPqdBcZywe+e;q7&*?_XoP;+Uzrso&-!tzP%t|i`75tYl2nDebA zw(yLm?PBa9!sNgt@D!Y{u}|Ryd|=(mtcxB*vwtUx*C92pX3hF7I8vqw~%Q>g1uK-T*R18LZMG zporq)FnpKcIu4zOUQOR=UtgL~c*NSRQ^c+A%L_Ccvf<$y?ZMsG^ueC_b8*>vM2jbs zMCJ@%fB0dyMDThkP#SZ`%0yTAhem7%*!$BH^oS+cya4OfMx7^RX`)J4Z z#}<|Hr!`8qXNW(1OHq9s^b@VW7)H!Yx86V8w7Jw3evZmB8s9V-jXh;E_r_&Mb(DUC zdR`yWZU*B${An=w;1jXH*s3s<<0sPgD_lQ~y4M0=w@O#iO zT*5ljic`RHFuYom-AvhRihbQPA^Ap?Sz*+{<{n-&i1t+7A zst;L1wq^yg>FucBJx*g zZ<4tTlGS;?R>4;6-9z*3;Oz0FE^eFpH@6!a&uOPRT(fj|L05w%spQ_MXq%8;80(fs zjMXguXhI(~zZ>XOx4TZ)-L3(gHBjr56uo^{oVBoeEuryOw%D}Ot|Hj7zuO;Q3&)2? z9e>?Fm>C?Td7XJSE6aH#u$^l-*@UGW3qF*+E!~R*I2mr3iZ^ZPk9KbfD2resz*pHmVL;_4h;5rlj}>RB`W;3T@J?%tji~RK89) zEz9MAGGQ0JB$U4-t+C*&SCH`Etn2bj$m6BMTM6=kM^rNQp2>#)-DVDv6mXqp4Hg|r z6M}3=q$Fy8f&U?J6`9h3qvu6Z1bpMds?>`Fal1%HbQ0H#SE zcQa`27?b6+(^m4r-O>Ioi)QPzh}Q{E^8J-1+M&1iRPw3f6e|5Obe-epg`i4+js9a8 z;I`Q7oNJFUD=1Uw5mIL`9W22N9wQI`7LCq5_|*K&U5k^0vr&q2=QF(jljg+yIX^GM zM}QdrT=^fpj-M;~=Z|<(+AzTKwH^s|m(hn!tioRSfI3 z`)EK==Z1Afe$3Pf_?-2FzjkSC5rDQIjdbr$lz%_+*(&xUBy4MmH*0Oy+Z++y|jvUI4 z{USJA^|}wYa{6r0kgD8Sg{b|m7iIPCY38(~v--IN#ATQco<97{v-E@=LxIsp*ou;j z4uiMbPQ<#F#4+Co-`A;&-tNF-#32G6V9yCWq(M#RqEa^kv>Gph8*5=3=1lO)ai$7f zV(GfggVPEXb0XX*-CIM+I1SVxxe70iF_w2 z5Y&&hhyrh+u8#Y@uWvV)5x&f$r5Pj&i<+&RmeE8#r}#g|yu>HKGlSmcF2sy4@?E3` zS}g>=V*V{Jmj$o>JAc^bKyi!S~mY79sCD|3Ij`eB%XF$wBiPb!=}o5L4e1XKbjkiyai>>Id9@W+e(M5(Yk z;BHZqkF+NXb=i>Up1cqIt}R;AkA|^{3-j~4OVtF|;O2i>oc{+*y4oPid7t;TvlpyT zOPTR?3VTnY%zhSriV}AJa+BfnTqo2@ARzKeR*~t#S?okHtk6#--gGBaG~(_2(i#}3 zLMX|;k&6<)E}W>A2dOF*#axkT07gSh;dAretF1jfzlC$VdDQ>7y6baF-MXmnihPDL z_}yf($)VhCG>QA_`SdUe)xwK=@{YUyR2tt!=OI6pHa*p^XhhFx?moY>ckr=ZYNQ6$ zR^%_KSGc2ujx$EN{_iJ*kp8M4FO~9kL!>>qZb9dY)=q_6*!cTTbWM+hCr_EbaL|MwX&)$HX3-IhX&(B&pGgMxKg1YUTe0PlSKJkDZeziaJZn?BK`*xxxAgb zh@|_*DGHMCi2|*MnxfJ!r=4y!91zvViYB^ao(WydMuFb;V|7OO2|5+_w_r5gGKvir z5q;1T3&#yX@xqO`$^y~KOgOHO_jiAe>f1RL(z6?5*2g@!n*g}mbAZNussomyB5@NHQSc;opm!uR zNDR|swfN3)WwF*~^}$EB0M5kc_Ffm|TDPOfEzFRB^i9 zP1Bh4?lExXmi`aqZh-gs9*AL59$q-|<=A!@XU!us6a3C*DC>T(yNJyQ-tZA>%VI&GDeSr6=v^g6o8i3o_u^5tfrItT7tOc<9Epc0F!Cun;l z=^gcjYY#|wWkfyv4F6aOTbaj%?e+?;A3PTIpl84t{Y!v_vG)8N>^KtgBb#sJ(;=%U z&&oOXO^+t}anC$sc%>}AVj(EYg;|a|;PHtqCr*#sYWtyKMKDr7mI^%|UoQM~BFnn} zOcvn_ok<;tXK_x?^BFSbFAwf&7Eg4COVQ2LtN&!DI}x6j)os8$&82}gyd_BmP6{UG z*6D@lWwl3`maOB}85Q>5LdraKSQ-b?`uM!=`$sesz*iyO!~5aa^syp3?S;S5pm6QU z*a8qN0^YLoyst@|z4YsE%nxHoof04A%A1hYcFl5@2-jU3jJcQFT^%o{r_Lo)J_HBN=|Apct zI4}CG7xVn%{|Jh$xql$#IaW`_3zpPKfWSh?TNS6_^iL`yl4eiu04UbdM~z%D4uPg- zaR)!P93<#_(C!-^JB_GH#oXCh?3TcOL@m|kAB8qr1L~qxRvYKw0&PQEnIfNDQX0qT z8K;J0fFef^B}KMb5+y<^S+n8Yk2FoDc0(kccEP$IAn6NLU48WJG6IPm4=w|>AuGzi z1$A?QoW#fd|lh1Xl?H6w3E=gP;Ir9cR-?X^pBm}8B$bfTUmj@QlCrvY%Cc8 z5@weR6D&3F0?}k@_dvNH*djfQ)69y%T z@Oj$?+%5w8#m<~;+|xde@lG~aiUY3)L|p0*5fV<@^Mx4JqwAPc{wVSa(_^_5*wyO- z%$y_jL5qnpIh6x4&u>M!00#m*DQO`olx z^8wVf(g8y%vZq?wqfNslZ{UVh$JkQMG5ZLGDZRnu1X|5f^$VH@ihA$nY|IMKx@(Ww z2cx#*L32*<4dM08cCSh&aE@-*{xwy7THBqUK)A{3L%FWw9;GIET)aP~Bd}<(p*udw ze@0e)h``F*xEMwEZdUOI55@1)|9!#S;YzpLiD4PhOa?())}NRqeS2tJWSP^d;N-ia z5P|+GHP0}7TH8P+VLN0^hY=GV(hwhz5-|+Q*OE7|B3LdEK~x2tgsuI`+F-osSpMr6-+s zC{M%Y4Hss;=U(zpFab(VD=mQT@G#uvc)pdM^)%0`IcARx3u@-}tm*7jRZRBS6_!eo zPSq`Ttlj?5hlAt@yv_-zBFIStj#$Zr&L#nYeiaxh6 z?uC2Amr%tNOHGb1u~50BRTI$k^~CXmn%QS=vX2Q_|8VPNg~ zbyvCF89UUj-Ygy=8*aZb({Im11hBFijH8eYp=ze0>hDe3H-n(yWS2)%y_vd81+p`Z zB^zkAW>pPNn4g+3^<3tsqu#U? z7jkxt`;|A9(#+H^&$^6-)&j5_qcD+qAaOX=?|1HBO8;)H)ck2?ScH*r~S(^koj(W^1Y%oJj&5 zP!APtn+Cn-*2K$neH8|EI)1%k2a=;daes0}-=m@~V%W*iM+0(`UUFzsLnz)HY0;FkV8mFeSjV6Oa3=; z|6~mnU+L^tWfF}vdDwP6p3nN0V-O)&0{k22Jz%2-Q@Be1)0XEpb;xPSSP-baO)N-5B--- znAx=1eS>?~T6{ER#A8)F!!0+(9|A@RcpuU2q`+*ND)w>ew=-+|PfTfI;4x_Vv6nGDXfO81?bI*XQCT#Vg9n(Y=_3id zTJ5~1tcs(I>y(TOyQ;;A{n6y@kM{>u6=-PVotMdE{qFNdpmHcG@YY}%n|@;Odon#UA!Z*+I57-_@n@l0ic?CVFPNHL zfOi!|wARFj3-P~l28o^iEu!q+`-?Kuaf*vC8@i(K>=qxEEu-l#DW5GsPaNIG;6Aoy zlX=C}h&b^Le||Mjv%K3RIG+VEI)ee~MaQ1Ap=)(RAT%=mhjPOE=Z6-AKU)lcL7k8O z{vGUeK{rA)M1dkong=O=9Kp)6W+PKLyN`SiRmPrH6AK3N?6@Q^*OYQ=sW*NvaM&=U zDxbb|*rc7h)l?(WLQkIEZ23I&#{lPG_wtNtA5{7z)OebJHFHfsf9TTZv!k=$?<5_f z)nFJNhA3io(>I?l;C;5{awgKbVIS5#xlc|`?4Pg~^Ex|$OY%8Oze+Cut5Hyb%i#Sd z%AYqlztpcLp0PVHqJsn9f)^xg7FCTsW&LY4p?-HoZcYybH zd+%Ek8zr}JMTTHyEYgqDs;vW#?FPO>S=$-&_f0_}_gZ;>l5vg97}*XUc*enJ`^m%4 zPR>bg7Ksvm7;ez-Ch=!#V*Zf#VhiUPR!>m*5ndz=Btd%GU#rEeBVHFx`gFhLT62j> z+2sN1vlW4+vpOTLuG-~fS8M2G4Jev`XV8-~GADIY;wvBV+Me1n zS{P?83sPzFq@WDzkM#b6i%>PyDmKCXsMf(4 zZjzGz{_O0~Qy`nRTpV4Z>ZmO8hR}x>RHf}^SW(6^kECDv2I%E}c-$WZLgD{-eHPZ; zdU7LGsjzRkB>Py+U;L9%HsVKyzPRFXjo0d z2Bz(8?iZ0;yZERkKKl)zbMj{GS5yzfb!mP@KS*6@_&OTI^Sj0))Bg~#8haQnoOst7 z@=m$zvl~@GlXA?4mK^DMv??J;_#hXf<94++m_&?_pF7dN!G7ktebGCKnjJGRKush> zavc->gJZ6?PqvR*fDu_hKwzoioRRf53V0BF9?|kYCdDp%iX4stbENH(pWhvqg&Ax@ zSMl%F>c~ZPUjAg|@j7(x{g4x6h8@=Afo zy!3z9t_6JKy!I3)H{@G}VBg|GBnwEsK6nJN+h*Ln)rW*?*WeX z_^N$Sr~c1>Q04!a&;CEtN2GL~(*Mu?@oyNZ>&4HPZP{B$$$Z9Bdbj750TNbzAn{`c zjO1i>7#;38^?-)*U~D8AwCCpiLuSgH8w+m4ULI#u8nVRuhrRMHzbD*PdvE7bfMCi@Yc6`=p27ojU^e)CL$29AgajvsD~;iCd7#YkEH3*hVw#OD zpk{;h@}fNVvap!vK^Y=QUr2@3cr7fTv$)t&BNP`{P6t~(|L`rY4LrA>kKOyFOUQVT zAXrS16t(xj!P0^`yN86n9L6gU;0GpWcAN9#Tkk!ihai?e6)(Iy{UOECO^!vc8YAwn zI^XA;EHW0Avz8{;ZO@tP+9kM6J32bLq2Y;{-O=IOsfC5;iHV5>K|=Ft`qHoeo`FZS ze;B40mN38XVEV5+ho3R+;ll7sLbuEx(c|fxzVnveq#n+oG!sglgyGOWB))hy>#G*X zBg;FoEo78E1Y}4@W_q0bYk^b3@A8|&Gus*MBpt1saeqILURIl*Bywg6Vo98Mkw-T7 z29u*vS|}^*SW?Tu?Bmg+ot)V2yYX>+TZa z)`C^BdW036p%?~S*Ksg(+GL!Zm_dQ@L;fh z38X7`|0CNQGOAI(Xqbl(@D@i8q#tGn6&k*IF^rNg(QjAv&d8@hiY;-C4&>nrSuvpV zm%5rC$&j>qo`N!!I?$2|)CO$iQ_E4o>W#TK9mVMO&Eg3PI3=SwNHT*-D23hVGpuU#dpgr zNMRtF7Y&}g@3eJr<79|u=MB#Dw>GxL!@E4vB1fDEXg=4A0p`m`#-{FXK5H5}uIuxE z`ObRRauxntN@n2p4@5?i?s|_Pu1akHyvmidzXMQ>nbiU$Cbdq$y&>O`IDb+2eeaHN zrwWoHAk&(d(L8Q?AFPc_u@yh>U~-yojn&)3nw@F8G2y?8BL1^6jbe%VxW^T{M)PW+(%Mz|(& zcTb*ug)db3xOvT;apqzDq)IpXBB8CvJm@(A`nGUNBHvy!Rqsy@1QU+I-Hz20WWI^AU!w2kS65hThO6#U*GZu9^63as^3O^U;~KpLxi;>Qn@-XU zS)z1YS@5tPpgUkEPlOZPy(J_rdXBkAxhOj;vsAemjE^nuL*2P6sA^<00A;6=lDgR% z;eE||D0Rf=XSCUv-uPM8*7=OZ4||mRPnUDKq9LCFmoHlnFV#-R7~}=dH&bO{A9HUC zKidM`Oy=zV^~1QDme^wWIQ^K0xpk6IoTYAEX9~P?x`^ovDXNmFMK?oyo9R*BKD0i# zENG_PXO8GaDqDxh<|BKL|74nFZSey3~-S(ioB6#oRLmT?}o?ufK~mfnOSS{>jWy zq`Af)iAnIE1B{{=5FJ->(-KiObXu1ck2CJpd>ez4pLLUWYEt^oh*YAAErqQJ={T=Qr8=m|R+7MyQK+8sQx(~t+;kh|WlhG>Sl zu2Kvmzu0mP4a*+}cy%KS@R7=9IG?meoqiDe}?$|nF$Iq{%jvFlL;kOYasxs^0? zXGrPY*Wj?rsYS$Akc~Rz?Tq`nE8yfwjPRJNM0cULlH<@x%l!Hk*9KWu7L)lqhiAHe z*ja82f_%z6^Rk<~1ubUc$VYO4Zj%`VMGxU~?k$T1xq+7Tc&+D7eW0rx>Aaa1ey+G^ zxVu^U$%2_E9i2@D>}KtT7$DhSGQ&>G^CcvU_rL<1ExQL`-) z=HU{;c#u9&OavH4dD$iHjaR+igP$J)3RFG_qtf9AQ&Lhw^Ljp6Sdx&@{crS+0xiQT zh5uG%Z|O*oDIoAAx0XJ0eSwJ6eI6clV7=XeFiGYWzbfUM3g9L!6F$#UK>tcRge9-o zTMDEbTva3<%)%uU3nd?xlWN$`V^+Y>A54CC(g+3D-COW+Mqoq8gnJA)vH)$>dzP`d z+K^K-jrs{p`w!#`xE=Ae#%7p`Uf2ELAUWg&ZbAH7W=65=M6Aa(^0_n1!2#Il+{S)lDl)7@wusC>P33s~sZK-?QS^xC@^@q)6C_*&W5WS#U;58zfa%(H1BNMZK z>tc*K&>0L9$84D3*wV@P?GiQD2bjDj8Cg3>nY%Od<&$Uk>o<#MJ$LIMk!)-T11on8 zF=Y?W)Npf#M<_1pPBIYLZ{Yd|Lc6W{+I`)g>Gsy~)y5_+pDeP3-jUT2dC`pRbp!0{ zrsd#*q}68>KWV0UbP$y5g{gQ-!&h7jcle|8t2{Gx8ZIFYH~AxP{Bv_2Jh7RkFIW}2 z(f^XTrA_P4`u-zvYq6R1eWEOM1A8jNAqU=np~N}tUEGLDqtX91Eyk_VU~vCsuSyHa z{8v_@0H{yaU%gKT*ANJn%1+ZAmmQQQsV~<1%$No&oDPikmQ=d$noW7i&K94DN8sqF zK{nJ)CqenVOZNpT>PNj|-x}6vPJ0*N)GM|HMrXc&TVg?iQz{Y#+$iejLraC<4Wpst zUAiHnd|Z=5d3S)b4V}V3BB(J-Y?KB`ePtAz+Lt(OXy*YfMO@X@p+1(?luw7|$tIE6 z^?UI|+yQ+FOfP>sZE;n|^LcbZCJO&o3cXmDi zva=agm>Xzy7OwUMSLZK=(DO8~+p>CVV)G5&b@OeJeI;jiW$deLPfwYQG7A+xJe^wg z+|rW>g-b;h=FY%Dzy?~8PHcqxsm#^Mx};LOsHe~4nF$u}zOF`l1#vn_d6MTrIb-4j zmi)e`9}Aa&60&(3c0?7UxI;7~xFT502Y}h~%ca(`)Hb!22~)|V*`|na6jp8KSq)|R zdn5cGk5*#i19P&nA-a1PF1NqWo1^>9Yaln|$KqCwtB!aJi-cm$i|Of zMD?D0uvvw%4fxy-r7Ch7@d0x>d@HBxOV2~B@PSFXCw&P*>#%mD>r{0e*H4GH+8mre zH_nkmTCPDtC-zQOvUMBNf_ByWQWBp5Wml`4?-;Yi^8Fj_FIPd#KG?dty5Wff5QQE8 zS}y!zXg{$EA1P`qBB+bIekM`|I-J~C-?>6l8laz2{F0Yz zBqv`Er?6|tt?Gr0(ACzXEEK5Fd%c|u5of2FcBTUh>X90**-g8gL`&%SWM+mK9E@1& z%a;}SU$gm4U9%`7P3{J=)kDD+b>;&)Ccp-mM|uKpYp#z_K?akE$Od(K%R!Sh#y$RW z*AzLWmSzRIt5K)d6h>v`6EOM)3$_o`WfpqwQYH_JVF$le;6S5YO3+ zYP&roH$S#Md)%;_u5m90h-o(Lg(I@;%W_LcwM#~KCmQt5RRIw?CP=zSLmMbf7b|)a znSE3yoJki(CLUuHyJwdfSLF2I(j)&Knz3zSuDB9ook9zc#V=b5FTUsR+*(Y^B>PJG z06XU-k)4l!ml?QF=QNh0z|_LK<1&0#>o;k8Ti4I`e({+G1R+Z_OUM&Q3)I_Ls8aW& z#W7L-OiYN=3n^19wf>J5z+X7>WpAJMV{D!+>mp$OuX&Nt84Z*8${oDhDd7idca|V| zo)>6f(*b(KP7_vNQK$v=XKz}3=*}qf_k(ijB~ZP-)D)#=vKjlCg$3Ma4}};+t>$bz z`rV2lOBx#WDeF`z8PWRpJg#g1-=lGHSxoKPp2OmgFPo$o>`Hok^P)8Q-0yi1sX+=H zL>J(j^w5|I)wT*S@wMe{`xp5u2RgKrR^B~33}=B zwZVPo@7{IXz~af6IUQIvpB9}B;ZL=qNaW!7XkWch2DElO^thx)--+=+e-N#HV$@3~ zsG&(lDSw!^`KlK4@6ifd)5|O1+e}CuKVRkhI}#Ls9agS$0Qv@tG+Qj6AU^4b1@w#q z@t^h8p!W%%MCPIRPRS2XZjcQi{=on%R`pQ?(eHY9(6IZ}-C^#$R5X?7 zh<7`!oG3WsP^6?4B1`1v7iL&auUwX__kAC7kL*XFBdd!GOh(DE+f!x!(tFIe$98g7 zVG4I?sfI3V_PkEfSs#hg->3+=tDmzB$I;J$xJ^Y~2$MiCQS8%!`bI2hl1#m`LOR*= z2#r6)FcXRn-B=Tj1dnz1{PuI{DmnkE**~R)A6ETsQEsf|FW8HoEdfj1-Xop{?Ych= zum<-<-zo`|wD}F?aFb1q!&!0zFb(yTQo~VAVasu?{p*y6VRqEk1|1?X{;+F?@KXkS z+#j&H9<(AroYT26q8QU#lRjuPVcM_p(F$o^ARXFo{pXUBsA^L?Nd7@R4E5r*O!n8) zViB0=BS*LdwMkd-hd{W%hjo{{>zMHHozv^vDxbZzIgQ|3@skv@+^2LZyh9KHS@4H`x`5cx!KvAIvHbNzcUe{k_lRY<0=M82F6x{LOoaR<7&! zW_t8p8`St+47G2bjZEJT;mFkLPPgdhMpz4^u8{;|&&|E*9}Vr$C@&M>ltv_04cbUfoyZZ2Nt^`{?qa7ya0X7*Das}{pjnH5=*{|ZoG z8&_&lm_BS?tIu`T1>wZdb~r(geB7@9H1mg{tjtR5j_po~rUq)h!2CJ6zy>N>Sz<&Q z;n2%lS`C}@ONXNo z9=M!6e?|}0Uxv=dfg1T-2i*it{*JvYHAnzCG&WFf`a({wX@7eDlZfbYkDtfQ57 zUEgBN4X2$=m#*amK1Doa241j1uZGJ+5&dB@^6t12b?IwoJ4KVx#ixI_EIU+-4Mu9L zf1ICnjedAS3CP?2GPHMoG2lWq{6ehlKIUpOOU*!Ng8FgD#L(=6w6LZZ4M})<)u*`8 zEuNho3ay?@#wi5OIRAD-lGa3t2qTI&xmm40=35e`>tKw(;N|j#Ix{zzp-$$VH{0_t)UTr?OH2Nl3|8!4_F!E)=X{$_WvILn->Q0i$cj0X>tH|05IHER zG~^cnaBI&tH92pK1DR|sgywHJ9>9qM8g6(ztRMny%c>B*CD>;RwR1p7@#3dQ);rIz z$SfIMa5bhiPFd>wckp%e;Ysyv&@=5ohNy)2h0R0wa(@3n=rH*7#DTn=-zH{H8IU&| zWg>GtGB{v;>GeBjI4}`I85VpStj{Zh5Oq!N6Y_zV^;fRT;8-l|8sjg`@ML5`aIw3a#4X9UUIqxxXGG|M3R>glh2&YP!}sP50csJn>`X zgoi1ECa*$`ZnIvhVG9H!0UrFU2xn2ceUu&2{RUg2I$(JSILOLI)^5O&ZvdsL*Zm6d zI~mj$0l7O;u2|QhqMz@R-D+x%!UTHzkjD^c5>6r2Y(_ELiQf)18ageBIcmCJ3W?RG zt7ySF=0W;|)B@;Bfe)R_=@o>4hn2tm~Lq5$nkqXioD zg?$hSticQTh;Wtkr4T%*D(3UpPF7>=xP<38u z?FS?BXxEfG9h?~d{n18LyXu>hTZ+g$}WvTPoG6?&3(FsmogGLPs5`kB1{2Vo z;HET%<$zTJ;K`Q0Xu6$(oK*@~-Q13Wb4t_4u9E%+6(H<&=F}oCG`E9){JHW-!bOi; zz%~-$jWC=0ADp3O}wR?HMJ$!+rscXlWJ=TJq!4d z>thvpZG#aFZ|f0$*#y%EJMTl-RcN{UD2Zbfcr7?}MBH9ri5C<!LG=Abo9 zJ`B(2V~=Oi9lp^W4o5kuLg_~EPrC#~8Rai9?g(%>#KaWC2y5EFzDu`7M`Vqs)a%E` zj~_XOrMQC+&bvz!E}!yFgwFK9M-Du3y!ZrmW01-4xpb#eT6bEei$+HD5j6z2TDi2s zXXD!4A}9GCa@Sty9yAKnv|~9+$?O0k#u{D@uz1*Ve&pGIx@Ow|tet_+SqF;KN9;i4 z%P@)oGxS)RG<~*dd&U|%QtpRFd&;XNc!=C*g-VW>BpQKuy0-xD(H zl3|f&2emQLn?4oRVyZBXmGT?&Nh!>D{F^5OdD*z;(}+7^5{x1yi_4zeO(C*9G5;^( zD^ugv_XmZONQnj6q35!DeB->_HY*ILamQi`+I(NZ8zOgLx;Uh~%&)wAikic!ANnQE zd~)@?@;P^aC+UuCkwaQSb%oIDjJ7NQ{1`u*Kynz~9=d6w*`Dq{^IgvULTUSs!+rck zH|w*6U5`N=h2vsch7i{9W<2o>Y!cU+IHO5u86`M@$cA-49xN{#q?A}}A!dLX)X)4H zLhx1ZKCPe-_I#TfyQkd*=-L7#KCRMc1-?aAN7co-xxAVh8IF8&fxH_yyfWE;Qxf*J z6rTr7vw%?k39-0#TIx-XOZ=Xy5bbwmUm;yX=_*OV)Xl$xsOq@+zffAffOEH1#-=n= z6=@lpo&dV%)}W4y3q(WFC@e9JQQyO}!n|^ii2{&yLHBebM4#8k+{XE+O6q{m=81=( z`!JDYnY1OJ0T~z8C`(gVE9a1}rH#E^vXontn*4v(zI{p&hf>fS+YRIhi*M#n@535m zFc!Yj)S?siJjTq_N6b@g#^!!;}4BJTZaSB3`8kWb4q%bTjCkjuc=fb&0M2TDL z<50L2*%=;>b6W$ztm#Q^^2nP`j3Zg9te(8Edb^W2j3%%g&WMcZt5XW6lf1p#IyJT^ z5+@s=6@EJB`&RA5x^{&p-({N8R!!=8Zvhbatx9zhvx{u+v4F;WT3I79!6gsqZWgc1 zb{0(rksFh?I4i8@miCLhc5U6crSsDCzVbwkSyH*{5 z`y1n(+5$Z9o}=&%bs$|=7dIr{b!&GYTthWG@%cR+a9aXwl{a5hMG1e8Safss@#GKh z90VkCa_o%BqF!{1BIb(x);@b0GVRrS$e~5egi+@dlkR;7H zc@RT9<;WikUYBW^X^td+*k(HUYP^eV0#OqFNiYhz4F%++L}YM~7`rumFJcOo2!1R8 zUF9k4QKh+U$ql ze#X!;97JShW?qJYN!|)b5SpfCy>wQKz8YJAl2gnEQ#6mKkx@~CPD2FSqOr;V!JgVB zpoKiAZ?iUkdF!y)8OnAgtU>KFk-+ySIBS~jD3OPY!_(@^eF;|VBDLSj38T2ChR-Kn zZ61^8cqQkg=fdPX-O)SrOlY%n=bKHCy0Fn-jvjjBQlrPhOO$K+-`Oe@ku!DPRS-S=7Q5bo<6C-k#PK zPKhdW{-m8r3^q8jNbz zD{c7g?cT+W2gnl3S66q?aT%$f6ibG22UK&>%uQxIX>(zVA_JAl7{njpF?G&!jsO>7 zIbHnnP%H000fZLdiuO|nn@al=2fQ7U3AIF@*P+1Z7N50;dtyM@F}BeA+ArypCLVgr z)UNwo*V(9^zygNW1BdR3D{nj2h*f{v`z}sJ|MBl8?ZhPfkLQ{G6sNI3`V{!!0Zt zo1RSP<4=jhVaJe}8m;Zaj*IK%(FUcL8`~XP%b{C%nYC`=H<=&wW}f)NycF4wr&A0A zvx=_(euu;R4rZTQ)%EB^&a&YffexVbEDlh~&ioaNJXAR52*~R!UWsO`um3%-5oJav z8mxspUYnVG8cGoe#>mOkWPw2dM$I%L;m|+~mqh|jl)H?{6bEqObT7EX#4)Ad++-3= zB+{3uggosKARe_NuCkEpn`EFYkv}pfxKh#1w}5}j>`3lo(p$pzv$=1b6hhsoCV zVezWv4?b&Kd2HLKvAXJprQkT^`$PQ(4+r#=qbk_vKbZi*Fq6zEsM68hmKV`x5Hp%i zTG{P4XgF)tY@G@Yc2`gD79qSu6NUsi>;Y)?A@BqHU#V61a>ZAOwXV^hnQmEoj>QIm2{AHs_6wvVe>j!JdfSxJc8=p>>?!DkG(51s%UqQ zeT%c2X(7j(FAO7#-kwb#T&hzwaY*iC#<->F zc z%4-I{dXuif1OD}5F_^0RXp_PqoZ_;*doX(ypm;BeDPL!p1Pcgto@?H64(SHdpH({; zg~?AjbFfK^1eERHgW*|Zc6WtB4}57hMAce+b}aTGc+_4X2zyT!^}(#Gcz+Ye{*;D?%8*@->*4yW^Bu{Wy_KtX<-Hy z>dru;5Xqe9tUDzFUi*5T#lc!Fv;fLrOd6JA26zBH2s;hW82Dw7DF0xry+ARLjA;R0 z?rYs|0F)w6^KO@suq4AZHZQPX=0|kCD8)>DAzX9X{&1z zn51MW9@4$xoY-UI3!aLDy-^K}Y7GN*jK7=#pPQVl7)b#VJgFynz3uCc`Owr!sm39Lc=fPvz+M>v86Rh|Wo6fE z!~|_$urKZJTr(Z5U&EZ~k27+$QUfA+`HIsjZ>cEM`DX$1>O9 zXYwHCTxM&D2KAZO@|u?)(~b?SWcy;s;jM>|^Fe+u!BoPCeoAKVIlqF3z`%v1nkjcZ ztq?ud@``P-rZ;_mkTLgl!J{pf`mI%kJcuS;b#CS+)iP7y(&mI-W_K=jHr14Jz0HvC zu+2U(P-}krcr|9Z*lL9AJGHM5BkQMP$Zjx%#UEa4v3qfULp*UV{CZtMdXV2#HK$R2 zJQzv0+X&!*mZeMnt3bGv$^fUYhUl-ysiYIrw>b0cP@V;NOahEU_^(u0eL5a2@A%@wfa^fu&u{Q3B6_8lHs=}{|;hV*;G z9b8`>vzP-fY7;$B4}jyWNKs{`3Zbpbl=MS!2^ygd^+L+NnaM0vzZj2y+zv#U9V@ZZ z5UBZjaj&H*(@-><)J%iYMtG~99|`)6>#w`V*+aE&br`(h9eyTu;m)L@rHwJvT3?~K z{~|CItEe*n50`kS1oU5!>Vc-csLPcmjNjwq@uC;c_e8u*N)O@QHull^fdm)h0)$CA z57ac*m3w#LdAS80dvI=q34)^Naa7)nmPddNfnWeX2N)WrnbB1>ez@t=kd6e?@fJA5 zp$eu&vhcu39b`&fp`zoW60Y9k;U#Vr-x?)E?)+&ifkzzi69oTdKA)i>*J&W{NOO@O ztE=oyJ1C}Up(B?mZkV37JAd6V?>xo)+56+C-Nk(@KRJ*Jb27OU$~0H+1;eE3gU<*#HVTB)RGx{5gNewL0CmZ@5GU}qgO4iM@v7Qd`zdj7 ziav<3?7hdJ)z`0XhpgZc?;4spxp3B0oC-e<{R>cZSf6jjd7~BIH~(v%zjAt4Q1@d9 zLd8}bVE!`;3)(pEGjDT?SDrBaFeB<|DcfV*b$mBRU1Ao0ws}tR;|4zC`tfAL63R`e z7)@RfY1&uIQd0d%)dcqgQx9!Q;5S)=tVfLES?}XZT-m%2c=>Gm+`ral!zKJG@n{6t z2)Fl5LGG|5YyQ@|d1=~aU)hB#okaX%9t9hL?%a=7TLa<2J`BIGP#f#1G5&jah2x`!G@#W zgLPfw%|F3Oxr-2oVKq$pi@e{%2)BQLou@~WD@f^U<}-IUp+S5-17nK)ff*0&qmJX# zaP(#t!_r81cm2?68x&ulW8#L0qBCdFGclNjTIot^a{7@!8j-AqI4ku*9&L z{Q{1!&INqzXvgXeHcnuG6Nm8KkMauUG#kr~qGq9#?vU)IIro9Ju{%v%DXSX2UJFTH z^RHpV;@TevtucvZi;RHkjNR|SuCptJKUL}Yk7iz$_0D&xSL)LtY#AHB9C zpgjL#D>(sww<|!<4{}xz<4Xnf?bF%`Gt)oMsY3V&4T|vExDc9ZD}NB70z$VpeLQuc z$3Em&u*q5U$0@n)h4mlD&VSugkPY7vy4xO=uo9X^;a6MfHM}t*K}8hKJArzX&wu2s zt6r;2APwK!Tbb@y2#xk}i7@AXY(KNQHw5MMNpbRE>ISxsx{L@~pM4;Fztq+Ceij9$ zXMgXTPmK5uN>5;^$jK%~YvD{4z6=Us>4nHn7Z|oBU|>oz?{9GvA)R|ai@{W+y(-`8 zfNN^v!e%LyWk>oeu3L?5hmuK3Mn=Tfm!FrAVa>xV`z4*j*udrQ5+(eOFxV7wSsvAX zM*@yHt;-+xY_IJ6yrAc_8>JzZ86`8|A4WP}cyxVSwgvMpBw1%;pIE}e!WUCeikn;u zFv!9v;=mX@wfHpk^RZpU!2pF;IAZd|A7u&Gm-kSJ$e$#dnrm;qSf``lOQ~)l!K%PJ zqgag%GL!Lx{J6%LoUw6MAQvu{&A_vmeO|~nGv6`Rk{HH9o(U<`AB+^qW;2>;KRyuy zV{ieZWZ+qm^W3d*UnrP*=x1-MI(8<3*cL2-0f{L`A?;C~Ug+#-)1`Sz#!uKuCP$cN zLy{&U_AW>#Zz{;74#xh4wY<>a?fPUzVG_!Wipa(Sl1uo-NkU6|>MtRE^w^@Fp1Amk z&}r#f#y+BT`LVFr2=VIhZi)|uA7ndp(i)jNXqKJGQg`{chPaIQ&@PSVE~!l- z@Vw+hL}^^v>but$oxpKsxkc2(=ok^Ne`%uPpbvkh7+4!4v;jMWY+@HCHa0cxG_3ob z7TtvY`U{E0ljKb1#4AQU=J(}mlEz8!q9v-6S2^(=z?k(822yy-Y%oW#x1y|2Pu4@l z5!E=8IR+1@MhC!2;8pR~*0CJ=neHRWbl2O}E9N@p@bzN686$SmJ;bob(~JI%)?MPO z>+M6IcM3)G$T_~2KsFNpa;;{rpO0D%v`?8WnF&t;lJ_|ZQrgD!dviq(bT$KwS+&Mm z7c0-(d z>Z^#utSV5T3uO^Ly;Di28-LA2rYSJ40IN8qCq4%}x7+bWjc^xA3d9)y8 zep;Xka6ohc)?M~(B2%NaQN9hsEJ&@!nkR^SvJPB^S(bcKZ>*vdVF)nkle# zO#)ST3_7)7B-tOOWGR`#6~;DS265cS@Dt@sFH?V zX56l$*B(0VHmT|#>{k(7F8CyC>@5X~4Q8Z>m!sO(cL>lq%$O3zvdugQYwvsP&m&Tn z^Yly*w+o|PEb$;G4JR3%Sc*Di^6n+FP+l9}@DDm}Ve^dQUGO}x`dgP5+~Ot`UJbyS zwfNlku$~qDDkUV3wvLA@PvVWp_b)&i0qObO!o6|rnWSRtL;WIjR9R6GG8(1)#9Xm# z1z4g)iQ-ospKhMjQ`hb5>~}ZsLqK-V>%BnO`_mgz7rMZ|s&s)Y!5>f*DO%2ZxN|1z z+|GGG$wbF<=3I!BVIiPW463j}8RPU>5k~ooHb2MWJ1e^X{DAN0t4Mqb4H@aKp&_ZS zt$`xBHI{j@ujn$c&Z6BWjJ?fMI9QW68(v1q-WTcX+xYCk_XS2A7KC$a^Cgy~>`~7S zJ&?GzH;jgC38idk27f z0e5786nHzYyl>zrsk9CN#R0N2XYY>uS5BOMkyZCNCt=qSAPt{=Z(1~B#w;fOsF_hV z(6$m$MNMv0*u%pal9vTy9m@Fhst3R`08yO=f>;3v68PY0D15)w1?mWZ#Cc?{Pe&?BAH<*$4c9mUBW= zrZeZ9iH!6sgQ)B2Ww^usb+&N)GWKL;b*!l4V?9CMoO{9WrvErIgYF=;Sbu6WsZYa? z8y)vl_789ie=`gf!XX#${mP?&P#@O3-dQl9kp8UosTkRv17)MxXepC=*h!I*7(*NY z#u{YmUpi!CW4Ohk$$VvdcTK9qA=g`G%Cx`xEX?YpOXU4(D}{0`lnrfZD$)JB~DHA|r=5Ps64&(|FOq zy(R)-u8jBGog;qT!~BU=g%C1RMuAOR_#tlq4%uiOT zuj+pvn4rW5@vBbm+=>1!hze0hX)v`Ecx64%=`YmgYtRtw_l$JNuoUw_x?8dHKuAoGZl2OcH;N8;Ikqcu`aU7w9!tzzF3G$y#3r&JsM^k+eQa3XVIY33tmik!+y#W?GRx;iO{ zj@<6Cfk>^_|H$OUK3pqd|-7b5rDgOr5*+tGYs0ET8{-;Q^m zkgsh2lMer%fG0|k&V+ib zDagqMT(#p*RDM7e>0^}j#JqAm}hIahNltElACcOxtEO?5s zXoq_4BEYyU{u8`wOb3FWH8=s;t4)`Tf+Fv;01|zJmTz{;L`l|vWVnFLhX5mX1Os&B^a-`KZ*p~U`~)tgfSnNc>4 zm&H5kW*68j#G<2l>U*88H$Z9o(m3N%T8Ih4%fclOleZU|&Gt}P@5`@aoUR{sm@_V9k91MRLVHt*X|aIfn>fyzzhTo6Q6 z^f|&1(n~_@)q0^bu+2d2L8RD?hW`$uPge*|n31Q_XlKd|T2uUXtVQL?kMTOdH> z%#7M@Tdno|&))vkH~uvY{xm#w>SSdlqqF%sBAr&9XvsIanD}%+Tpa4{FRu|dxw8Kt z;_qhX|7gaRuhZ<@ZB@|<6Te6{(Bl1cxDT?b1STiXU#_`o3j80^{z+(*1w_=LlVmY* zWEhMDsLIM08k*S5Hn`N(<*z)RvTjmzt^YIc461*Og%>VMJ^uOoAOv6$9?<8QSDQJf z0%GIeGyfMK0*r72jFya(f2WU{PNc>{{ecAZ03*17?c;@HBRDU*vi}*53Y?M^d?+Ss zVzeSr?Z3MR6Wizz5yY8#NAw!i_`~RExL_ud3I}`hLp1+q?f${Gi*;gqVa9@+-eYHO zB)DDDa4+>wmSlgV5DJB}97mZs*R%$5Ggj#W36`Hq<%oPQ!u(=UiM7E+hpS@Z6L|6K!CiefZ5vagJqdOgjW2SD{ z8OhKIls$6_8j(}Aly^s_LUIgNHWbxXwzh-|>=tLtS3=t7&HmVhMATnhphiRuu5J=x zhuzX7=eD+@Q^Xf51uy-$@%Iz_JXfI}F?4km)NjLz;*~CgTDI-wmD`XJ{|n zW`Zo2tKL>SbR|QlQk@ooy|!1*641Ce8e8u`ceisA(iGc>K#_xl@qdN!pWoh?!3Quz zq$7X&=_7Mb#wsbHu$So|IFUY!XUd26o`M{b-zE7ZS2}>@zD0lH#{|_s+S@hRaFdg= zlAz+LF-TZApvdlplz_y1vfc?RI7C9f=O~eij^38lHvixd?vGol11Q+DvZN<}*6|!; z76qzTnr|~e|9i0x?T~lx2g~qU`UM{skMAJ(>gb^(0QEO9ouW7al*!SCE;X* z@P{5VBw^H}Lx-*ol1$4`V`EZ+ZPGam+~&r_32>Nfg^ynyoLtY$S?Q~Y^RZD;!Vgl^ zPlkuZy4u?iSeok`Ea>rFQXCEu8Z}DhK8!5Xv8bfzqTveA+`607lm-1kwxPfWctxZ` zCI{w`GMn#2znVa@m+KPC78HY-i35*M2O8Tfx9Op8<07m4f#-P0VPHMtpJ_>yGl*Wf zpRE$mF$gQy6C7Txw&OqrLkpT}I>a>`a?R}!IwNT^ztkPhK@KqcKX}5Kgh*`#72s#WRo5X6)pU!O0&Uw7H@%#Hgru>EQWyDet{ zDd`y-9sS5a)QwG1)ncWU7ZmK(JwXnE35WhlVBo7m4GYWnO`DNnhFg%sCtXQdJvicu z+1Of+@6IcJ?yvjpzYk_o!Ood>5$WwOt)!9%9bwWTwFCad=F7Qgm}9SCsan&xt4KqQ ze9(wu>30NG_G3uDSLWQc$D1e6lh-`ke0&T_exb@)i0pN~h;OCQUEJ|FYm>G|M>EKp zqJ5$Hva+N+{&K7Phheud0*um#P4Y$id%LXJ4HV=NGvuFzT!X=5s~i~9vE4WtLu)Qq z^Ka9ar9vA~agD_9{T#>~bYy8e_?(-cohEqxAWTuvpv4PGNK@!sEGjNHBPEd19zVbN z!|0$hIUB@qx5K5BkNF`v+;NQvJ{9Bt#hHH{6I>8c7C*(`@!`|r{;+Q&Iw!?J_fCFf z7d2>mYuKqLqV{dHqOxQ?p+@#hae#a&wn5TV=V(gZ05J@La`QU5S! z^Z>t)0o)+TKNJOE(jjAG`{(5u?(FS#o7Q|Xda^SvxA?;@&w#reyP0TbpCOnfq@7Uu-hvpWmW#CIbB4P>W4=}WEvJoU$1m`3zup&5Ta~u z9!&qlVs1F^Ok=Y$sGHl=iB!1x^{3`JFfZf~NA{^JEKkD>aEiLRA(=eY7fV(Qc^2^x z9SN1b1%GaZ4-c9rHL0hU)~54QZfl-)`}Nfo_rm>?{GZq-i1HuwwZJv2r z4d}I&i{MO?lT>unVnRZ>8A_JDvn79O?N4%{hHM@~{KF}KD-N}wun<;7+O8!C8VO{Z z<^EQtn@{NW4mmB9% z6!`NFW(G%KE?{G01HEoVqt8~WtQTRmeMS+ezR(9`S1^Fm7wV143aI|~!SK)R4-bKB zEP1FpuQ}{quGazftd%QkUDX%8t_Jbq|p`&1N-cxYi2kIRbD+|Fa0;gQ+|tQkReB)eW>cpRJ%67#M&& zj1uDFg`BL)kk@+yz@XPl&F#2W%o5B@?GuBpH%; z6U1-FV9{@hKsKd6Qi6sT@UitIYr)?9^p9Fg6edUqCZsE1Bl=@=ZqRX~361#rXAQ0v znKKthxxs5Q|9kyj{-305LwrNvT3^(zo%c9FK0%fuzC}=CyZ;mA$p>$Jag3A7PGE-? z_}q`ee#CEL1R}4`Wq-YB8kW0A!)MTLI->8xQ-Z8y=Oy2#@+;(f33FV&K}6w$mCI;n zzrii-{g!!V@KG`fUEM@p8auhoj!k`+2BmJM*>HiM1z2ggxYTWI?(W`ZPs!544TSb= zs(L=^9p(<$<|P#sEl^9eJY-bHqoPgbnK=DbRNS;p`Y@uy35V%pm9cPEQ9M$b8?mkde!_VK1o zO(8n&T^`t+_8;nPWCSYp2yG4hSO|xOTer5iC#p@Hf3I_9=^}tF5>tlaP5rtgyM>?(g&Pa~6z&=27_ww?yx$0r?P>_1Oz1K#7 z6gJa~>Wa&~&qBM87eOiAny&vWxR=;0*urlf0OZ}TqgQzSNP^0gO*{;+^&&c%k9npyCg2CR&F+!<94TEVJ^=fF4w2^Y4JHU91e?q4?030<-!ACe}&eQZHq z^B=U1v(sZmuV7>Fci%fZLWruN7JuX2mbVY1;E4%!oa|E#w*AsHXZ&d zsgTfIsyCAU@`hF7J0n0k$G^7r*ENWm#uikOU4cAXGGE$vG;8&yr(Pu&5k7H!J5z6rD9tRWRM_y9B48T=V@fr>^FB_(5GD;v7%p3B=s3vJL8lpE{3 zgi>l*K}A`a2A9{dW{JkQZOEhMCQuFS@}WZ3uAna|fF=z83`fRLv+YisnV04vdzi#2n%Y0jMyt-#3XH8(4S zM|x99JLkq*Woz#b)y!&}tl20ksu<|G?#qY<)$j6g631HgM0IYF7QBxcb9faUmzYrS2hq#tjTpnp z6{2_LI({t-Ea$<&rU$Dnlt~PF-+@42M`mFF-eYS<2Jhs-6p)vP2ha3ciTw2kRV|^U z)L9@LJtq?Sh|kNV*+OP~P<8c{I1|TF&OF-3fLE3or6PtOU9V4BWI?uz)w>Uu1KG#s z_3995GtF-V>Yume$_$J$VZ2R4(byt=>4e49Whsn#q#23tWwbMS&>GHP3H!z@4cL## z)SrVqnB~$AnPX7C*Fdq=nP&EL%!G`kcL=5wjAe2g{*LJ~3^8fFZ;gXt2^7Ni;%8a& z&_$xu6>)d~#uL2b4)wU(c^{{miQH#h;(6H>^p&8bbgZt~<6wtE;8S{y+X3w&Y1Sd3 zAwOOAKY-X$m?Ac-C+IBmWxLq$J*iRjptj~P2w(dlimNA9( zW7&;(8<1UfJ+KbO0Jo&$2d1gVs!TB)H;S{+V)(JUrB0*-FqZS68PO*uP$Y&%rt8X% z&yMH%dci}ht9yZfB&KiZBziCJU?tR~_$(&z*;J4tR^JN}QgGzghm^K9ow(B&|JO9F z{H@#a_RX#<9}RI#Se1r6=Y89Uele2E>dAwr4Y@duqgw^3z*B>lS($79dqNw^)4?0w ztl7sE$(pMBtXL#UTM>s|^iidsbbRrAab9x+>+3`Y2D#9$K%=L0J5z)0emQJb^ADcR z=TOq=$Ix9r>(Bc6Dxl%AE)g;3S+ZgYvvG`;-1j`#)`)0zNPR^P@y>x(A`U=a^{5Wq z6mgTUiHy|7;%XJTfXnTQ&f*>k!<`}~_xn{O#F#Cwr0@3#kfidjZqQz~y=+^oN$lGm z{SMr6Q<&akw~+xU!QVr+X4P~%am+F(C@gABeWD@Zd?k#HA#9s3p;nxyZxMXe1bn0_ zW8aUGwl~zV9U^Zc-=-D$A{+bbVo!FfP(lyc5|Uzxs&b3BXCw%FFE)Eb(Tu&9)t|im ziku@^d9T^qw;K>3x7+qP5c)u~iP>B40-w+CohxJXypaSwI=6a|1itre5$_Z>{p?_9 z?FpQ?sRe^MUJ;*zBbBSkW_Zc#Hn_VrfJU`3TrL?GnKCg0bUF>VUB_}cAr9SRe%>6( zJ@6jDsC@El+1tV830$rd?&Mql`gbhA)hoy6S{0JJvZY|)xUb+E5e>=&8I%r%4&b0& zM+o5;gy!XfCGu1|c^svJplY_Ung-Bgo(jF<Y5 zh^Q|j(&k(SEEBxpUbMVCBtPxW&Tm*enq&=*>mb)3(^@yaD%9CIO)imKJOKfL#ge57@Ihw_M1z-04rp#a z(6b1Zc<0c1P%_!%6Cz?*79TYq~I+xp0 zqI0frcDpS9ot?2fgyQT%lx$Atx#>8f)kZYA0uJw8O_Aq-uKEMUp8SwFfFNb5tfi*xpbe(K7s}v?Z`77cj z2Yvu_WSi%u-hnyDQA`vpK9CZVdboRaQSzd%~j0 z@|0f{26}XmafS>HNi!MsC+GDMy6oZDD}VmVP?>!lZ4{~&Wfo=iW~zG|#ANI3%4PTZQY;eEG78YFH3Fb%}4XeJdeybgN<{Ij*y{FW}MgWHX{OaJs=0JX^GnEW6G|X zHuH$JfbTI5koBl=nUTdbVRU_5;R(;dx`;1~=W-`8;1SQJm&VTvDxZj@E$6eEfUP+# zQ(MRr#U&s-O5EIBGP5?EVS2N1`(cA~({9hLa-zz}tJWfZCrbb~V%Repn@M}*g}RqS z#d2nzAp3dW5}*0KuKfZ&rOgsYTD&OpUFX;z%{SH{jA#k^2al^kU#5c5Dw>@^56ijX zqD^$Zdk?!P(n&z&PCfIu)3U_Mpw9*oT2vX4chIhzKv3i~e{aNdA@S{Q^d<)WXH4Eg zP0wEAO?<0Zj~VJ$unnHE(c1&ym$qQ1)DY<6-Hx zJGP4re7lizR_eXx&Qq#d~9P6y55^OvRU30 zoJNM8{Vh)xTD0F{a(@*S_5M~e3lo6rFC)6U=g>Q}L$_z2SqEMk0E3>k^V=^8hb><& zwW36Hn~36*LbJ5`INPz4$6;Y%tL*fAGnqCuO#4~VZM`}dnC7OKAXHql8(OthMYE7<{%iKFZgyFc=3>6?OICM4E3h`?tZFrZq^R z*%4#>RS#{=b4NL`E)gLI^X_g`E;>A+NgnY~FrR?39x^4p? z$;ZCDD8+_1z$TL{>ynt(8Oxu4B8rIjMiYce3fQZ68k)Y4?K+Q3Qo>};?=mIQCRl;% zd5K3hyzDDaGi+6>1$Ujvq>8k2-__TuF{Lw4nr-LfXdf`RKf}N8R@Ko7BIHvB)$3}x zc*J5s!AA#Pj|-?lvEB>$f}E!hcP)!?Ahfu=BmTyIh7z$Y6 z`0to|ZTKdnaMSP3P{RF}@d{=zLT=M?962r}NpW-23Ifqc{4eShU`e-I0EW(#8VQ+Z z>v#;BZ{c$e*L!p>OCj;*@f33QvtN_LLwG1CpqA@xdfe7Wle`sr~`dii6bU3I3r!7(kH-(DnF6U*CR@(7fVB7gvrCcwtLNnXaJOl0S@I`A!qV zXBBY5V&bvjT0g}c>?$d$SYk@Glz~{%fVCBJlk`0S?R_0#<^mUJZDGn@?{h;y((EEA z8T##vPsI2^c&T2rTcZbgshpgapPy)(m40r@!jPj+?i?EgvXWm zbz8&SJz=LT2B)N^!U;S&lc%pIRt&-{!&XH+HbKBy%g?XB+kcZhm426^7+u~gu z?9yQak>l+Eoeug%y9gg_K}Y;aA$bdn)EgcFKflTP_-}^qd*CB|iSm*_K0Rd#0ESEw zz1Y{U7;!Dm;*ye#L&G`_3;p;KyBIn~dTuz@g?xS6 zy%6>2gIovQZXXW zYdeu|rS}3JIqpG`>DSsg6=d-AZ99gb;!rS)^C`&<&;U$^zT=7xYEw<9fDy;*x7O>i zu2i!q(Peh2z+tUM z%k_N1!ek5D)2o4dj=fRWGkc>J?)Po?ASP6tHN{*mH&_8mDwlvj9XW`D8*U*f5>_$JX>XKh`Pqa?w6@?RL;-AM(kUnRd#U=p8XC!bb1+Geti!Df z5pH}@Z!430Bk;aO!x2AFZ9lI5e0PeBdsHpS`Ft{YFk2E@FkW?cWHk+%A_McAIuwzB z9En-Byoo4*BMbtzLh08VBnwxfZ%`dJs}7}&d#jWHEsr7c5qBSPs>~5-A*etQQB$) z(H)ZY*j3spKlzEl&4P;9aidP9p|ZM_*U(D(waJ(Xme;&RZ_fe`+Nl@#{EA~o-e{%) zFahKfM2~n=iW#xHOWg*{xg-_H>FXflNY-rM4|@2rZy-IZQ|W8a3kF`F=p4y&CBg5v zN2G^-@gaWYdddNp^iNnMjV3JWK`)y{rQ+QnCG9BlM0(gzd`U~sa2)nd=BKqu_~H6T zHc-*^Z{J8r!kYqsw^g2Cc5>WKGtK?C{n68?j5B3q0p4;(OGTHa9uLdL)wk0^pu)V z^b?e~hr3z8P(%XSXFIAv7JHV9T{}w&97*FDKfB)iZ$F!B@p;TfCAM~rCbm{osx}|* zO^~8cLeisW-ULVd%fs+y z@NCNYkYZQ4J9RZ9={I1T(aRTs6ZAI7JdKpFbA=?0Dq6wL(!y^?a)x8W zj>r=b3e0y1yqDBZh+~^ZVlv8SrP>x`B7zTdwXBA-QBOcwZdvK9^c~iQb$AvPHLk zfdGiD%=0KE>d|6<|LGjVC-df@RK4L;q3q&-Lp#%3Ig)V0lVLbE($*lR<@$O5eiz0Z zGt|@!QB1Pso4O;&a7x_O>m%a|tr;nRc3RG(m*I$BzDlwr-;Z#-f;nvK*Ih>x0TdA< z|8jNL$wP~uYXbtCPYQ~#`x;-n5ThJQ&0LKN;q1kUoRNtC&GZ!c-!Z~c#K^P zX49czn#ooVrw0bM-8OBX2EB`htC_3#X>-+Q6b zYsGn=ML}NIkD;a=@vTgAt1#UTjUo`v@BVC+@ikHn86BMpeioEvlhIt?4<3603yty( zN#KoBq95tnj9-JNW&#w(T6>s4rHcx>&p@FKK%@b*0n~R+wHSl#jP6rpkb9Z)z13-= z$q5=r1&H>X+V#2em6Ji%>&>G0 zJdN!*xNA$h&m+VOP0#C8ju;eRQjxV9o7%Mc+Qu~hS6HdlJbLWQHI9QhDiOnT8lkUy z^~ivBdSGDCWR01dfo*?ei?-~Iy1u4E>)X?Cx8V6&8(w;YHOlq0N+?piw3GODZ9f+; zJ^MEp9_IRxX|#Ik_chOF9s6O}dw{Z{VX&0jIz2d28bq82&tbtDNoU)^mQ1jasW$2m z=yt*sk9T?sLBQ*4Jx@@P$D~LcYe=HipjdFU9UUD;6K>J#Xur6<6npoj3;;6Lk$?TV zdx3P3%jrb!^X!F|5j`Do%#%5u&`+ea zKlr4l-R6{43BMKyj?Cj3WX5d}5kXdL2qv74h%JJ0MOd!G+EnoAl{(e8zek$eYMhNV z=tMoJJm)$p@JBQlcXDtm*DqB@Z81tcC6$a2af25PhLrpndxL8jxeTgN>HJCS~W6vr>gR{ClylBd2l|9{lHnhYfi}i*F2T?A7JZW~Y6=eiE?toO zu-C)W1Pi9+Oma&@;c;=w2ErN?Q<<{q&Y%780`6Zzju{i($$^=X=xoES zRw0z9+|<9(7Cok1SgtKTbptEb?*gEv# zeUI6oynHE=uAc96mjcBND8Lnl)yqKVD6;EcTSp0G+V^u&~kn`dvSfQR+UE(?O*Q#_>q|)^1*q+cYfEv&lFI2N^B(flg)6Rs_Ujk4qWf&F6ahW^*rgz z>hFKVRv$n2aE9S%Vo^-r;<|VoVI156cU|{UVSIijGG@**-S&HLf!rR51{rbRXoKmt zV>UrI|VqUM*h*) zEDr61yRsFkG5_wCdXWl?d;Rk%m*0Bv5qY;-N*SrUd5j2w;qWSQ2vch>$|*mRj3mNt z42QL{0l_I0Ro)C;!-0Wi%YDmsvhTJFcV}v0XVYRSOBo(AlZ7_J+$N7S0_N4d0?gj5 zP7#t8&@zf2zBt{7i>AZj%EehkCEo2}xA^JMZV%bk81>Yg z54}n;tb|S=mTh9-(gI(~x%>hPb#9ogE1adIq+WXAk03osb$$2asm6!Eeq2cg{FwOpHi3h8Iv>s$JT6&xQW;6!~OX+lerao*>dRAByz$7N_#boz!hm z)0ja$Bv|E{*!T)UG&_M7-uvh{JA5utQ^V_P;)Z);N>#;VkY0L$XzTr1y8HPn5{hPv z-_4W^LqABzB@WCx_j~xXw#L5&1p17^kabcw5(f?NjkMmwlj&12WwAX&^FC~-K4#$- zV(Gcd7i{}@-gmb?cED8$Zo+NH|IVEzEaY=N!HzYK#`S>meS5@`N;7)eZ|c}cKQ|4B zo~I=A6TPdV*KLJ}7Py43uC5l9QCCu;7X@dFBo)s9N4?x;XhLmqJwL z424Aa8N8S>%llhx`Hbq62i~w(W58=%H?^j;BI&5d{@t=&7w8cckjm15YJfkzwbJ7O z2wv+=w@UzB81jAlEbYh?L2ocw*>|-t^QPl(Lb5)O1WY#ObVi==Sx(iLz+OT~ZyL4o zq-NPv$81KipYV7`n7)}#V;bE+M}~vd_%p0B+)>-XUWal_TXgy|u6xR9-Uc{dwcN5B1(kDcIFDUQ=E-9Rfxln=Y)ml@Zlns?hBq7?bhr9A?x_a&~f|(-`lT7 z0Ss**DaeG(iLCY4@GjfggOL z3lCSU-nX+2?oX-vNakjRU9V1Nk%Z*HI|MY_Sbp&u9n?|26S~S2PJU}sbsI$UB!tgX=VhTk z>}HEIE`x4N>k#;34HmBEWUaF=Nl)1E459A?hd!bqbJRAdk1Mj^&E}IDLb*yeZcD<%XXet#}~izE(${$wOEj1C(fz0=B@N8|arCLy$2~A(wj4Fj*^NX7;1a?5tjj2>m1$m^gu; zy}9Kw3ncwnD1iuNa^3w5w&V32%zHTK7}x9vTGHnd63x{gxQtj#?lDrc&2!)wznLEM zIVmWs01$Wdx1CQFR))t(xh4hmg6RK)|z))e?UQ^z@OS28O z+ZTOqfv&1RX?u3UhJ$*jss3iPaQMaeM5CdNCx^rHJ?DAYH!g&1I&v&I@wW3|;{0eL zGyxJZFOix;OqO&lU3!f(H=20%q}U3#WHs9t2?K4!NGGAr2v2oVm^2mP8G)&Xeu$Uq zr^)=Wu@r{b$=Cd79z4sm0CzIA|NABV7RV_fZJiV`t)n}YYr*6BwH}ip>f3nnG3_h; zfgL#e_2N?BHdb~0rjfab790kvIP1Aox0IYRX}ob?!8i9W2u+iRXPYg` z^1Tv1s{U?*+jebfH~ zIW&uH{}@0Qqp#joFj~70+QjC>L6U>m1&>f@M ziA))KPvcgL`k18ICKk7U%vklyBa3nNw+#G$6wG#B`%w>tF*`N;_)yCi)`iKljzYW( z-BTcU$r^wUJ={NSQbk&bV)gHn`aX}cM8es|6K>Zz8kNMn(x{b^l9Nj}N#bAATYy>t z5;j~uPw~1wU4u$4SFIr#6i^BXrp+ zrr_I6i~!?VuL6ZEab-4HlxE+NoAa*Mm(TY+@y5*pF&|U&s|0}5Q=Z(7@W|Ek?iXq_ zI_sosi%2-dQje-nKTnfir~ATFZP#6gW%;^#mMYg_b?a`@Vc?Lh)DUtFr^z<|ceE>G zG_KEfvFeLM;Ikk)h7CNHrS|i7Yhx%$Y;@!;F?+S=$-0&2U4=zx2G_|i)^<~A8RdqY zb$7|$y_92OG~iSt)81jc#qZJ}N#dQ4lZvuDEF+ju$Sc<`O>)GFL`JAelK#LTsQ6m1 zFJL^S*uVe91t{K@hGo+0z(LrbsA z*6kGhd{Hx!_As+!-ouPQGMw5I7g@(h>Xr9h|G9ay}$?+;d9w&rRkh3|a zj<5$Zgk4Ci#3Lkr&U>&5u{qcuqV|IGU&V+z=Q>Sv7l#eUjc!f6K)dT=JkhU{2g$*6 z=3q9`DQI(J-|@Y{8}4H0X#q1=feH+UGH;5e{!hVj3FjeIe~~_*1XCOHJ|`A`Fq(G)YiF9=|B?!f2wasM^FG9Aw_j_MS)m#M@V}qe zA`FQ}M16w~yL-C$F$pe7dD!KC>8&Ny#&DdXvD;T?B({BQf*N{XNe!BojEdLWetDRWMdTGjcF-IS{jOZkMnQBZBFW%=5Q?P@Q@v zu8KL(7Qm?^2u+68Z!Q!$>zgjP4i9sUi<9GvZ+I7oHSJ($HrALn@u|u>`EET?H>(n+ zUg|h&Oyua0K7uQL0fzR?cC$mFsbpkGB#2!=K&^O9cMY4{N@dc!{}nJHD2HyIyvK1u zu;kKESe!>mu~fc-qWjWrkOEK@;6C=heQUFRw5HcJbW;VScfj{q%-pw<`EoK+o_ zeB1kE$L%>>E8uK72XeKMM!;p`{CI~?d|GK;>$L6OoQIh0ioRHeVu9!&VkN(b}KX(!fS zsnC$OB6)AXJCWb6>qu_<*k?mtMCNQJd|DD4x+x<2;<2FG zm6RLb&pYB&WcrW(JV$K6P#oN>0XwMBJE~`{4fsmCqE4p z3-ZMokp!zNColp3nEcLU$~0wF_MwCfT#T%&l+EUMr4BL&qj&+|!0VXPU;v{qDvs_Hv!B@Q!xea-+xZ69RJYqb=>Y&Bv6*LpmX?E#i4F z{N5gt?~-))wem00Tww=UMqb1F8xijVbf`1IX2b%xuw6nE{eipkdFgY{-zF9L+YJ(8 zg3fa=tgLj71xfiozS&@TIhB7|@0)F8-)ll!Bhhf181~qL3mytGv)XKWTsV$CKHUw( z5im-&ea;(=v_3}n@!rm+W5izTo^@n@+~`6$INFs$mzqkhOSM@f%j*MqQqTUtmL4N2fQ&MhBq1)Sqcx~a&2SBQFK=V(l@C$6 z`kjD{(5xQ@0l?~|SX_NFlp;h)f`4D`Wf!hdYM7rVJDrWQxX1spnkhql35kfPg6vXP zrAJ?KwVerj-TN{vILVkiP%s%OD+k?i^Pm@Kh>OYUr(&^g(sGOdZK(@{1X6ku9=&nF^QO^ zhY8Jrye2zgCI=H*Ls>?!Q_yc*pq7|IXNI~@lVOyJaXpSz=HrGg7(--B_VgSY!1(8L ztH8vkz~zOe)k1l$!P;$55d$ZDaB6p!1IF0~>b(eUExygn@aZDYaRi6#=8WokGFJ_L z^Q_74^J7<>+okw$P!tL)tIXe|0z^z;tDTQ&qHPU$o&Ic<~Nrwq33;Pc`Ic|M95;U zx<%z!LHmy%3upo`X=sTW?$+*#!NfPd9_2p%a@F6cJbCdg>5)v&QrTqy`@%_=jOuCg_>t2?RXS-8*HuOi3$?46)PkhF)kX9`C`C&9;R0tP>tc zsqzpDOoC}9iD9!|!jZn(!YM=K)A~Fe+8@cXha#{Z1D8j%5vZMK4}om{yG3cFtA&Cd zI&x%vBn2LELLCYP1=GcL;HkgPq${p{i1GcMBGO+mb<1Q~Q)oM{Mh3ItA>M+lQiD}n zj~_n82jQPD)y{icd8PuX0^?=|)rk^GB;0`IZP)Bx3qzg5D|7`H&KhT0e4vs%BuFhQ z$fu)^#*gg$z*A{ytf4967TxHE@kyQjcPTWqk|aNSA-Gw;6n@J&9_B zFICHEMG4JX5CKRsUWeAWXkd&WOND2R$aH&s*OB|4OtLQN!ygq$6cVwl47v%QS@>!GFiD`Oi|>r;R<9j1 zrQ1E%2{SRD%_^8z=N%Uuivk?S=)ui?S)mIc&iM#7o?yS-0mD8!V!PAjoV=ULA)dKr z#H+)WOk1$n!gNCOA;$J$MK3nFpY2M>&%x53TgZFP?@w%CJsQB!i^z7&>5AuP0;ij@ z%U(P3h0xRROYRgBM>b=1Ay)Q`cC|l4@bn?+0NH@VeILg>EJ!aO9cWpMv;%TGL6(}( z1NvxrBO~p^sxq=!Ln3Q#M|r@}(HJ4m>W3Z|;po`5$8H>mP9oeQR%O&70fM(065U;F z$wz}+bz(rC^d@n!v(@QK;$CaKNPTOo&wp20$W)wV_9Gi^c*Swhobu!4Yz%(56PwHS z$nt&54)5a2?qnjZd;N^e!3aAmiy8dgrDFN85O}I9GE6u0o zAi%tVWec~_FL9(bp@Lsvtp`rFlSat*JZldj{|mGu@}u*S+rF<&TnD`eSQaS?D@sa% zqei~obJWG#apdXzdKjwIPS}Sn^$+cN*+D2*IVbDcrlr(B^9P$}1%bl!Yo}A;F0OuW zVTTEnZHN+~p>88!^@T-JnUf1sIZ|Oxf~AjeU;b}i$X7k@f~}6d^>+mSc;0EJ!^SmT zwtyIce!zTS%e*`{d^^{wn`t6iY#Z7t=%iVHWThxxkh%x8O)6kAwR$1}SNQA~s-xN$ zzM<=gQ+eNvc7P+{KfE5m@BN_uUUdeY2sV7{gMTRG)}*Z)PsV!7_K3F*v58=pL+6Z2 z;5j<=NbbCN`M=}E+ZLgDMd4ZAiAQiF9+!CzQqmyE`sp;IB&ej_*Nj4!r<=T4Yh#9X zYb?VqGFU5K(NsRro%VVhsP7INGw6%lEs%c}Vmuq_vsu+@_vaFbZD z+zvL#1r;&96q#Fav$!Mk+hLv~cf0@s)V1ZwCe&>Pr^<*lIV~3kmFM4+cnLhcGR%lD zp2eIDbQjGPobIQ&VAUqN5ub%_667&WFV6Ub%#J>l#gh7VKiJ51!^Ee@#yMy-5DNV3 z;Nq<6Q05xR;o7|J126_E{Cf>MvgxgirD^cE_7+*BfxfXHv2@ew_p5ejjV0z}Fa`Wf z264LkJ}1+D`GE{s#^-zn@QtRoPDqhK(>M*i?9?n^J0v0ta&2Fw;}KvH1RF3uX;s4= zRHbBRcP?{J|LUbXF6gT=-a5EVnD0ObyWH7hIjxYlV%|oxe>gw^7^SCaY$x0&0s>huYW1N#}>)nT_AjkPU=@|$aBqw*^C(j{9 z$H0iuG}|dgV4e>k%t8og8+fn(a_*sl!}8YTzid)_&YHr3TkUl2wKOpqr)GMtcP1j3 z{_DwjK;W?xmMhSK;4&eQc_B$r!l=fUSt1~GX$A@1Mh>i^v2JZO57XUHWV%j_4!E`C{Hcm=sfu? zr%T0WoZZISwqbZcI?1fC8DW)YX4}T+Uh2bu~S;=m^zr(PZ)8`J)FB=4Dn3 zSLE*;b)8cMe7!m0-E>?XPafW2%RYMgmWN?EkhOcnGziTpk!f+5=L9t-i0VXGNuYwd zB%>2;jURbMIN;|s&EDNLe6ya!#sTvPRE9p)GYsd#sI?j}oQZNNSp!^O{Y5-<-c)pf zip=`TGTA(llJQ_lkEj^`rJMn{I)AnO~p2S{v?&kSb#as%(lL)n|`i`eQB zn7Eayu;Z+`?&uSCzIrA4(ld*HXE&idTA&I_X_NU&NkQM4AlXM0$Me|XbN)6Fhw^ASxnNBNPN)%T74liKkOLphJV5uyg4|Q%!nuQ3 zAOG5!p1jH7KvP7e!qh&E26LyN7bvQlAeLOTC6OK=Ng$gaNsrfT~ zXOXQK>9*Y`lM0Cu2@9PXn)KtVjb|HHckL|l`4y0xDwa-zw3TK+{2p++pVZGG(*es> zn$=;|D8H9XsYW~M@_-F;E=Y4uEV@wNo9ywOj9+ut|DoP@=ul4!RWiQ(ibnv}C50c9 zq~$^oMDjoE0sjPuIlbB*S907refj(0#kLB$9nOSI;Rr?CLwudWay3dtx++hWg3fxZ zEZtX_wLsbI6l2;SYwYU$eScVr#;GH5zSg9hx<72^@$LQZUAQYR#y&o%{)h!Ji9(r=TKwUS zYV!IFpMrJ2eu7%+1zGLUL<@L=`y}}(ffjrEsy-4a(wmXZMGf#n!B@`$5IDbj*Qi~6 zP9)0Myu=8pv$0I6Fy!8sSl_>m;OO49mZ6Hh4>=EMFxkH;)7x>%jn{3`mE+!$H>sg6L zRI3DfYOV|ZJ4Z=7yGXGNPln9w^VG`z9#3aKHrolkR=yQZAJ1M@<7~33%D@azlpUtD zom}Cy0*sVIX&@Ak1wW`Nb$^21_cJ*S0b?+PTRn!wE{01GAfUi?_V{qsX^%x2h{?pi z5QNAb%u>qJo8)NzeixBsu8=jBEmBR`ELq$AMoPKmSgj*A@fzgy2hQk*9%2``8QA8e zctj+SxHy#V0yim6^{Xt8Q}iUe+G_I%8-q3CJEUrxRHN;T5ItWv1{D?6Y6b#I>ji$T z?cbOOL@gpOUCazJ!J$(z7$kpWMD1h&4#tlA$H-OT|U7j-q0#a z=WxIERTQCwSS+S;O)XL6e+tO`rEit=7=+1>eu2E|Yhabsq=$m?6`(DcY;GRuo=O-3 z%#!THf7PP56ts@Wj=x-A2~T2uXWl#y#nMNsod!uJVoQbrry;jMsg2t$!_V8b8eU+V zI`dAU7dUT|0~4;Sb_sTn*U9Xs^jjP-R`I@Ech6VI<|$tEixnA)$8GUA_h(u&WW4l& zkBP76O8jo!MK%P^%MAA72tEUoHGqsYFq@2<3g?Vj&wmy$!giP?rbn|@h-C#GCjnoQ z&XmKb=R5y8V9A+EIU1&7ap+zC@c@hr{jDSB&0eWMvgOfe9$nT|Z!(+W^1jBht|9=j zJ}_*?mw=%gMQ!u@0t{H;%;vtF+%}5<$}ao*K$$034Q``}IsS2Q@x}K+gUA2jEH0NY z43qWu{zmUr@|kdK(XmfZl$ysd8v_v{r#cZQ6U(hy@b4nsrLh&C7Pa*X1GeL(TtRRV%lNtlR=x)!wia; zrJ@->a(=F!i5$0$E0xgi{oxFXw~bh2AG8_Bz}_Baz$jRFrEbP)-Or!gH69C?xCD^p z&9jIuys)7yRMI@vtRp%I5e*@p_>ZQJWxi8Qur@*k5bB|?Rc2Vep7tjo8vPPMYw3EV z=n(Qo_*28L@pK!3lNf#v#<=zCl@Wt+ut|ABqjuLNz*^jy&o#%p@gj%STDwhk8^xeEH{j<6-YS*9w=;vXestw^Im8*Y2zafBcCx$xWGH}gLdn$QkI)o#FXG! zo$P>2RIHW(bWpnafD|&FOQG#PdXI=8w2j0M6e?Go>1~95A=$4=I&Mn?>69`e>E&-dl8-YkD_<=FyhFVV_pU4nCW@6=Ryjz^-$a*I4CyGyVBFe%3_UMgK zZw2+Nf=S!^)JU$0dU2c#koAQFE?S|YLi1(RSSF3~!xdcQz0tnt-zGg%2%T;#TzvIoB>jX1i@zsqgK&P1UJshrk>p;S1npc3|3zvb zW5LUtphU`E+mM;@8D$|7CFeb%+*p^jBW9Eh6GxLUmq!N1Z3+9fEgtAH47SW&1v8?_ zQIkug@+~#bfI2g*^ZG5%lM!UibqMJ@Sf4We5PH9Gv6WN8I*A*?A^1QIw#f4X-_pRw zM<)evt2qh-*mL{G7Tdgg4!du&{Q?0ws?<_&0iuoO2jwC6sGD;UaxUJ4diV2Ec@tVe zL+8OLJ0l061I9L}D`4?W(6xlJ(N1k7=N;>W;RDAZ55T^~<=@HlfUT0xCk?$pk8Jis zw(s5E1}nBfXVstbM8G^Je^IJtdkB)E^54NmAuT3t*}1B?P4-j#DE(k7MMbc0&%A8d zX8QsxCp|VjdAyGz52x#TEg#wb8x;qAA#oQ&TPw`dWg{~Kjd+WRX<6YQJjDL=S#3l- zL@5`@x;6Yt*!t&&UN;VnFiSEh7nls-iQ_j3*^|8P#>b=gC{rXDZgjZbxTFL5nd6E% zWk{z=JS??++egA>u)#;lpp!&R;=t_vNXV25zQ@1sx3PjRmNCalLE#kWy|=hwqa5Zi)} z;D4fcM6XM8&xE6tYcxTodYadFVJG4y!_yKVfR%IIhMsfXftx7MnNLoJ&@;bp$y!x= z(J%jX0kbAIu|4x3Z;l}AZdyd^L3E&WhEV%W=zEDpltOIe6fECYEM1m0*8?;&bE3C<>D}M2 z6Z|jN>#YM1Tn1^wVz_{?N3}{xWGmi+E>w3K_CW!@?4%vd9t6!N&@VR*+^xWWPwaLn zejE5?A0|2ti1^pvBUoxI@_(B=oT@a0-CRr;4j6mBUp%wUICyQLTQSd|(2S33_8J9y zx}5OjG}-5~vCq0@prl}f;7JQqR%XH^c#DPia%swoq(S)FZ*|uV4lcQ!ucdIt8#5-_ z{$F+lbDkHyOS1YPYyzu2_wy~kH|w^B9%xiJ$r{qxVXzNRY~RN}7(uq&#wmUb&+`^L z=PqI;wR|=tecfN#%F=>GTL#(yXccQpwu0@MTD~Sd8x1L>v=x3wr}?1MFgv{sm#`?>j@&Ognj+(+8;*s!?r$nGC4Q?w(z?rZ#9u%DLKMk*iOAQ1fmdMFFh>EWwM_euA2+k)u zhai_6N($gFFH>u_LiL~(6w1V%Z6fWDUn;l%7Ycg8_v)>6$?YsK}}|NprFg%Z)XpxqyTj;UhbIG_v; z@J{4QD!<(q2t1aTBg9}an;2vTu-L_+^saYw=>0|Mm)fAl`1^GA4+@9 zjy_#ZJIq5wk8FTgfoPNofg?BcJRzSQW{&{Hx^hU&N9pM{)7Ne-9a9Zqqc=dvs`FbwfYC|@ijzx8C!y=rz?~yQk=FUcnFHM5v|Hvm z(x}knsC%JdlIH>)P4E7Pf>HnCtUQKY$<&W#q!}N=%i-okMApsh(V@EC`F2!+Bj;&D z9?Po9?9Pm^UW7D?Jty(n=Dh6`p2W8{ z<0<37cBdN1ToMz``Dbi>j)5K$k?I6%x2{a@bxIv?H-os9cs`LQdhZ81Vq-j3+^pW!R@9+LzVny* zhJY8|r&VD3#YVSI3ly4KoK4q1h*3Jm%-)9smxVL~uj8+T9JL+mk#$T}$D2NqrOIPn za`O0LHtq^+&&TG~5=1{A6Wk}NIF_a>%lWR1DYT`F#feZ+vQ2V=zumVZkd9ZNT`me~ zhRb&G0%J0j0V|WI=4PAj&_Fc)YNp8UlskS@nMJ8Zg^{{ivtBjMVP73oPI2$l=Oq!o zDpEGuQW*)oeTEa6IoK*H=040@FPn(-4BRWgy@M1bi8@AclKEV5U~jYV-@t@9;<7#h zG)Clqo~n=lfhRUUU53~WeLYz016Wbw?1)mOEc%_+tKNX}i(bd;7xIZw z!?5^%avx5YOA0d|;YSHJ!gwb*&bKiq26?gBwzC%SWZnxiaI!_^n_{e;DACA4Mty&r zLHN!KsaQ^E(xHp!pE`t!n|G+DH(^-uUXE+Zr**sp^lg-1IBccSVMmcvk_Zr|H3Y|| za;l~RB5X8D z?~*)Pi#Um&1TgBz5mVt7<|@&mxD5@?hV|K(=|Qe@#nE&wy8C707}KYkf;eytj=vNG zY6Sp$;?F?*qb-Q@;S`w@rIA19fO$WY!g^k zH}fP*Aob7rivz?>#6`%l=4tx<|u#FPce#LC?N%MDO zKiW{ajHRUo*XZ~7He4}=N=(l<>ciAca=Uz*RJ|_5G@qHJZ1GbXF6wWBD*Fc%t=tq4 zuHyzRY0D|?<~zq2gzyF<474IDvYD{MRh=W$zaoOc>aZ{o4vXgBdv$q`>$k0ZmbUJV zeM-jnsvOMWO$1%n2KTfQ-dYqc+7G%sZ)>R;X$KfupRh>swdE06S=ojQ1CLK}P@eeW z5KJd3{7UfrGNTjc_w)sy(4bGI8`hZkp{y&?TYK`D9cnmTy7B=w@Dfdx`8cKTv`r)5 z9Enh$8y9tBc2L2bc=7q_d^9-j87SM`_*!qbg|zw|MwW4@Ve^=w*0LvXSC>ShefUmXUSBVh^rXKdy_=r-j=L(TuwfC_)c4ql)u?|jh(^KJ>&nGQmDZMmLJ{DG zi?(HK)ZCALiefK!8ySbX3-;YTda+SAI@rSF=Zv4ZfkOr!;tnQvRJF4!_PsIHq1R%z zQciTTw$aSr>U`z6m_$C95W%8ajn`K(xdE>sYnLk+ip=a$@Qm%cb|#Ie9YD!IOvRgXMc|GVpVK>V0pRM?J5H6z=+UDv8M+%8 zz)$pY;?HHg)wbH#J!3nX3%-f>N)o4~t1GLdl=d{@Ol$3+jax6ul2tP8+@Je_HA=aF zHD+SI1!?*yn{_5TT2bkx(n5m}JfKrp z7IwWni`|MILZBPc`OXmFgyPCxd{MIi!+$Aozn7PKrOVEYba=OUTRFU(Ry(}!qf}7%cDDFS{I8(ULSG7p^$+TNm&ZEY zof>a1+@?^@v@rQRDk@$0^2|MPk|temnDcAx+xt0nif&5jXvznCr^u2P@A64Gx=wt( z8od7XAFTttp0Z;WH68QfS}w%oX6?;H)yNiRhlEN*B7>Q0P6J2c6@QZiD-%RT`es__ zbY;9^^b+X?MB)Q|deYuo3{{!rYjsOr)qCt8~I32U!Y zhMIF7q;tLF*J=wbJc}^!?%vO;8TR}*u09T6#7!^5j5o7!ntUYF$c`@Q$LI!lk9@pp zsN_6Y$^0dx^YCtNd+T699#yEu_rtx+C~M%*eNiOhpI27VjYW>rnhJM4owVo)2!m!Y z(9a9TfhGnw+x-odrcJz&l)+l#Bm z1jzRcRUZge4g-D}2mxJ`dTEjuqJAT^Zcz%Wow90AY_wl(DKaEAcrfmQ+0UBElRFHu zgkrMT+ug~#hTFO&46DbXF@`&B_{3|pI)$0vnO&rA^7*|v-;)_+lQ9}hJ}=Hs^R^2m zeQ?n0j#kZoZv!4-B?KHnKFNPVx5JGNBl0|b>Zo)Zcnk#q5s>9Swc~o{7dPl|%CmBiF9NbSTq;d!*u-yiySv4Y0)7lHFC;fBXl%J0_qS0{ zsJmV*5wcnMlVZZ~t3AvWK-Q~b3s{qTKV8Hrnfr!u?RsPJqfZJX5W*ie8Ae9LdbCXPv$TM2T3?|ql-1n?%KPhv8I37?co~LgkOFP+X~bMzH>7K!$%E)hx^zswp{ejtO|*$Sf5C| zW4<&d>sfW35AXF|_q!{od0i=4!p;SN&rY=v)Iwqpsuh~F;(0}ICeur$U+-#6=xjj{|pf^=tlD$s3 zbNeOm-z=X1e6X~U1VJQGoss^@S*(&!i7`2DlDN0F*5Ro;AHV@73@8AK*fp>z{U%G^}DgUoYO8?EJVZ;TaNYH0Dr49Ul ze?k`?GI{)}L|Emx0JRMfHJ^+B3b?mprlfDe6iiEv{sa7f&1L#;wHju~WMS=on37ic ztm+ROd;Z{mzHt#_H*D3*-Xql8pi9We z@RFISD8YN`>hir1azs_Y0S!r%j=A&aaYvA zLYMnpvenD!p^}QOZj3+I_HPY+FD-VB+ypa0e$YIXBJ#(@pea=s;IEQBSec6Gf-3W z1F(#Fmh693ey4e**YElcVjm>2rYB5w2wuCGpM0u9vhdOGP-^;m!m=x?8iqCxAt#k| zt{`Y&_my!`mxU@NiSHZCxIDMDv#VT0uD%+rFEN>1` zBH=Z{E|~;I$woX2wq|z>Mc!$1U7ePPW8R2XGS%7#Uz8EFkO6OfCKqkTtP^wd)CfC0 z48_T9OAkPt_QtI$iMwBLEKR=ua{e`KB5qt+wr)}kPuQTKS?vx9BKvJ_>Od;CaI}bc zl!;zFZ~dLRXLucbDr(lj9JbKzJmG6G+6fPV99$j6YWMP5_{2$jg^xr2tr)ASwiu$V zL_QGSL-^N-?)$@|RYWD@V&+nX$}z%+fb*X#Rxkw375 z+lv)#e0<#Em}aQr>wmoAHMo$BK7q;dPQlQRH*+^6mb*PU%w6FqL?BfVeKTEk9RjzS z?lBS@7dKK@fbyT!^6q^su_(RQkfi6$8k2g=I*4rXCjMF5`&qpJF0;1h4c&UVGBm$W zIC7!Zz@W)~8yz|rjWP)gl+7PG|9XBJwvo~MqZ)nww{RGVC8Fw>Nz~}z6Tj-~lN#Ah znht}VhC71+x~Z)M8uvLuQrs;d8B@#2R|9he=!jVMWX=;hqsnL90xOn>hE!(+8dWFx zl7Fo5Yai<^^@QsYT%SHg$H0HDfHPGaecPg(J6-CgIh|_i}0oxf7))gTZEtGXM+c^aXk;GJwj+o z_dpd|ScTfI)S)C&y~D15m3BAubS7v2sftpe^)jvJ>#@e+tjeYN#!++SY{bT&Y$IQb9p1 zmRK>z!_zR>n46J5R_{5lycgxVT(Cy-g5|sI=uysgqAsS@#7$>d5MQVczI^U<h{I<0OvYJxYpR%a^OPFu1mtu%DDtJF z!s<)|b#iK|e$6(U!p{UJg9x)gLd`Ar?y&!L2g5Z~a(&Op{31t}ZX# zRI0-V^c<6!HXdsO3%Agxa9T0KS4tz8S5H!L+w5#jTu%)!;IbABOI8|Xs5iD$k;+g2 zhEE853BKGg{Pv~ie$DePo&v7;$_P~YJJ4&y=Jh`j-(GZX4*&AiJ19iWt+*-MJ$QE! z;=28f+3uz2H)bKDYKCnzSVQ)yKw1_2NwiH=6-=>+OzLj}KZThT5yXyEszrTfxy}W> zj0a`%ST(50dQ2=UXIofJ@SslD)YFdJ!pI%DROD5-ZtB}>=y0K%8sg<}Eve!TH&FR% zGN;3!^7j|^fXRm=FA3KAc<9U3tDWeeTl{drdA_zLznKuSgA8AE7y?wrZpgsuG|)cT zF9jf*mi;FR3IWr=vC}XsKhpksXO)DC3QH_ZFeW(sK;njgReeCE(|jo`L_F*SZ+5{|BV)Mwi5dsef_WNvrKBQ};(^IvVIkaAbnY`_c}FZVogd z;0J=NoLsSOi`~e72C|#+m|2N;A=5F41J`ITFL?H|$LIUO52$En`z@QX@o^E5G52=8 zjHpm9O|ik!<>8d2;5d%Y9>d6WIO>Pcos=PV8#7swa&Jyv)K(wCn9CLx;MvEODT3>nf zk?1g0o-gH^r4Of8>54hKQ6jE#3r+R5rN+oHp@BbwKeAw1`)iXG(ctK+)L5C6UW*5G zkH<)Lxj(wXCmSwOL)~3JjN0(R?}y9nPAm|ptxth#=Xb=7}%^qTQ2an&{DEMzW&T&IDGC@1{JWB}hpj%sY3kNEL}=VwNQF>hLQFe{gKN()jp%1~@TR;X|%b&_I( zxuD}a*foFEqX;aa|~@ zw6+fW%hDp9mF(rODLWW)<;;-aTMIAOIbdO7#q^Hs=>%VO_wIGK zfHKgct%A+$860djZYV*QKR>q&C_eln-&2PAyAH)6*{P}FWVkuSM{WN?kNx2|dYfxb zLmPk=X&_8xhibtR$&6$JQm*wp zY0~r!#@ypEbH;0T88({g)VlUJ&JrL$r(1@gAk7v}XXP`79^_}EG3_^umE?)a`q)ey z49U>97b6_L5)9dveAo1)1B}YGot!8ss51i_J_{K0-+oa?M&tH3dJ2hG`E%O{$F^kn zgC+6(_(YY%^|a}9$YME9cmCNiLD9xPXNC5^cBjhk3SF*(!1C?0 zQXf*F#W;yB1+I$w*tSW~g+yo?qVKyyyhcr+%DHQlbdaI0RxxxR9QlP%|B!oO!~7m< zuxOv`n)rYupyuhEcf-x%EV;8q1Tnq2sk3S)(Q$K5l&_E#0GFuob0uq1WbAl2zO+iO zPuw(dwUYa|82NDi3|o~y`@qnNR(I*4@g&{ArRbBoUze$#xjkO(4(EKn*YHJJVq$1# z=O1VU7{L8_M$x-rB}-~Z(T z)cleA$9041b5q@Mbq5v`Q|GPPGjP~sZ%BFc*-FSyn~tWk69gB2F|5RUfHD&#=Q)x8 z)bw_*z6aPrfx4RGIXiiczP_S398ThM&&2tRGDrGssph?obzVD994s@t*hYUuu2`eni2#>2Mu{~lbvW=wpS%T$#8w(*lv&i?E&WY`N6UUm?OvR z*dwD_fkc*M%l6w#Q0h0fv_YP`RnnHQBBEV%VZbB{8*{Qy@8gS4>o{?YEX>$sKgoON z7`b<@J>+bRIc*krHoCp;aGg)JCh_EHSZr3)C=|9vUhQbb-PkfSGxupYJzXmb5_fdG zv@15iWn_-e9Sxb#!hAG#Mp@al87AK0g4-ejD~6GUDmCrrROoF$z}nh#jaU|@tv zD;)S;5sM+>yYs!iz2&796^S<)Z)(P*bK$9BEoeH?K5w{iEjyV|zcke!9GCpN=e5l* zVjER+v7xBK{DQyqXOrbRMnK+{FhWtS(Ts9k^k^zp5Gnx4uPY++U>vv`97aLO(vm^C zJ)EJ?w=FyzkrqUv8c}k~WgY&~lwmPlR`H)~g1pQBb=%aC>TI;98s^~H+h*g6kXUdu zRe{Dz$#nAm{$3=P`&(G|b#ZaIVuvTK_^_Vs%$e7bP71ZMhFje5;o3l@HQZ#r1-P;0 za(t~(1&QtR)?Z<^*^K6-BTtibS3tJ7O56~~6PZ+`e0 z>TymzQozuE!%zJsqYjrsMLR5+a_4#xkXD~sDW&e&l(czzA+Jm$XMb&Ozd8F3_M zuvvdVn)3drFcaWBO7SCgpz<4!zluxR|6s?^bv_l}8#Rs8+Fz^?(do66q>FUE_3ymT z+CxkWiZa@_e}Fu!xgp8R%L5*Xc1uo0G6R-59b-X(<+DBoZ8=kW8ETv8ZKpF3D(|M; zj!Z|)G?h+eZ^co~Y0c!&kXXmz)i>u+9pA#%~H z)ah!IYmmA_bu?Se932*%s7ys)OE?s{C{1|3BMXp5cd6kGxz8=LKE62h3Av(tp~e|l zvuwidukSBQpp@y5!ZteGLHlPhp%*$~d(%;YM=wt_Y z@`JgA#S1z$M(*DQ5?)P*y|_>UA}kIG z17EgT_TNTVYQ3WGqoQ;u)zfI2BaSBr@;1MlO9A=3zv7k1k7`Xx7dU(I^cUt|zPOS4 z+4r$zEg-sD6yuE~>}{V(A=nBTj)xabn1Tj0zY*m8C`YHjb$v?SOPh`nM0%0Jo5f!t zjfl)tjmW4*Tane!iDgmaWh=!)w?+}n_1MDE5wQBsSfdb{N7HtoL9cCAfuN^VRx1`T zG(vGC0b3>=D5=)p8UtC1r}b_W1^LZ0XUNL7y?)d|h2SmowY;A1ToEWTsi9LX&fD2t zZ}yS6bAubZHH0Kv^LuyDi*So=~$(&MMyaTk}k7pnHdML}+!pZ%F1HLl zGrE}9{V~YI4>MA-S_{*V+frLgM7B!f{Ya>Ij_g3n)wM9P@Xd%jMfF+@SzlVFgeG9Q zqgB$Z-B~zvhA}E3(lI}oUP#Lo*-jx;n8VQZ8}c-i>l*DSWkRjitzs6gP&p~eab{xv zFFev7edFtpka2ED6evXS3_4+nNiFXa?~wOX!Q}%@?tjvT)D$TXYO&w%qkCA=|Fv zLbMcq?KJD=btV(0K7j78DEG^#$<$ywpJ_-Eh12OG2#F{!or}d{Q?Ujws+g&fEg{FR#-d=BGje5T44y(I)K`ydj zBR9&;nF(-W0BCc*TjKW5^b6i+WZmF_>P4&M4*(8AfYvc(aoPalR+D+Q`qlD-gQLB` zK3#1(W0V~&Sj3w|WAy0k68wW}=AQur#1Ck(85nSH?#vYQUY0$N-_MYT&1@}9u356U zGPxdmc(q?>dN1x)B>u+`s6lS17ltT6Y)~Wtg>+Ia{^Zp|CfuE*G`Hw67|NOc6yHk~{?UVHEoG_r zAA$d`KYb*^`8j>!d`&boz`&s(eDIlNGPp^NiL?%FsS;B-;xqq0@L@A_9Ew;m9^T6; zv&lk5cp7z+<%%OW&pu}wZ@PPzvAb5YY;g+Ze;$0ka3?C3s!Lh|(U^TPnr4d?kFT%q zWV?qtE|(+dO5;V;4sM?v#Y-GQ_fzzp7qBC5g`bQbye}B~!f=qER zE7s$qHs$*Y%3{3^U#?a!JX0X`S-lXwrlvMJAp!E7RZ-yIkCp#^-ro^_z=5K{=DE1I z1Vu)Qwlr8y=7=zJ!tPIYIa?^;JAGiZDysc!eE;@_Hbk3K`q5)XqWR+S44$u{z>V`; z0^J*edV^KZGXl=s6@AIkzy07}Q_@K)(3#6`R<9-pU0q$7U*YaIVO?f)~%&V1ob8lSqlI@AD>0KJS6U*}5S{~WOZB+d%DC+T?R$o0+X zJg7vmWP2ZwPpyfGk=8zDQuO@K>nQ6pusUXqYPYrmf9F`Pux(!aI$_&v+@p>&)|`|5 zS8V+&IRC!DW(Ucw(2K8sZ^xzZtI2Gp2rpB!TCz(f+Yyqve#JghkpQ&M74QewPo4qvlkkL*e8 z$Gf;a>s#{NKk&hTjZCBK-JKojndrDi_&oDXJ5wIL#?H0S#9VQy)1cRxFF+zABa2B% z(aJQkiCz|4xhIHKxOC2Nj9sbkBjFstEWGYytSe6U_0r0$=C_cP6NR4;-}|WR!oc%u zbzjwLXnFKbi`F8U2^1vv_Iv{>57&)fuF-#z*+}F z#E*g`Wp)sdm#H$efJ@5s$y19v-VSY!7ww_>Zd{`<(0kF-K*m!40gL2&hu+3!=>)c< z?%{az&9k#TO6t2)FMfV~GQho+)ZxMr;X5xYWFTT+&&UbHWvgNeX^8P4FMs&jkyyDblOzB}g{ zj1fX87g-C$hd5{%HdGh!66_RF1rGME4~|Dot0CvhP$Y5~8HuFNdsXZb4Gk~3zRvwk zKv!8km(h`T?yQ0%4Qli6kAB5N^TQ_40NGFYPnu<>Vl4uG52$Gp&z97*11EiuMvdfuy^lL&P2t; zP`N}U!^6UUlQ<{DGiWFZrloN>>A_GguUX9NkhZXd_uTX>(`>}=c>lv6p~^*oAR^L7 zK}8kgIS$b@fbWLMTB3}RJuuGLZ`5~?=@m>O8Ziv2sp^w>g#?S%*Vi|_L3bzTKuVgA z$+Qa+hJW|_*OSh|QvX_SL`3d)d!QShA9C@FXs%E}Tm) zCDv)YSv2=(!@Yj#tY-3Zy~TRxuv#DU+byzc-McopD4o%-vt=0e`!=nT@$BLAD*d-V z;g5R@Ps)-V`g@BPn1J*1-tl{8WFx!#n|pL>DmmyMvbdUXrtr#2`sX488Lnp*LK>Xqh>`A1U> zQFkXCkmqa~z=qLfM}_@J_wkVP8pIPzYWwtKWIlH;H8((RiF=7KQ3y@j79Hr z$?a)SPpxO4kBnCo+ZSAAq;f5SfV{nvs+Y3~{;uX6pc&9cn5CFr&9#AtiBsfAb#Oh^ zyJurubp1*gbIzq3t&4o(2@jJ>PyUgc@`$BC`t7rI$KAL7Fc;XKKt9NV8L~}#^enA+ zQ}BwTWrzi>6}*knl<>Tn!jX354w!>bKsz?u@l4H*r$cH4i|Nm=laTYZ$}aZWb~I}A zaZ%LM_D4O)*Vor!7*a_Q%TwQg(5q2q{ea&ecP+JNKf^100fBGDI-0);1LmLSyOW(- z89vnS4e2z;-XDE;AHQp(Bz%g)Z>i)chvG>dzz&DPBkm>rVaKWPgoZXlMgB1Z% zm8NXAnKUIFDdVwY2v*@Ghk)H4_vm<5E0*jfz~RDoA$_f8>5 zEev8Ro)(c$5!bHc&!c(7eL}BJ6K~cIXj65kozA)oS?6vnWnL;;?Xd4ZkCwDpl72|M zf4)(REG0Kid4l*L=2>z>A}MnbGC1e{WFD>Xxp@=*Jv-1xhhUyN1b%HLWgkK4WXm{DM4WTQ&o6vEJ|ONSQnTf`2LOR*>WUA!ZY(>Xm; z|KR`+Y$vW9e!3DwDXkjatr-b%=J zmEceVH+RA{O3qkU4%V1`T&IIl1j`?vQ&z(a4OqjpFM$X)D!RWI>#+G}3#z246DoxP zu=ocLQ26P}ts0A%=!~d9sCX^EcvNd&jyJtM;_jPUH#fx$oTy_O9BnFWiE^)hrTc0n z!eU|y5Cv_J3{Wux;gh+-)im0XU|_nk+#o}iR>+xo6HB$YhMQ&yT_K)wjXroe-UgK7 z3=Bqk$DPRdv{ih;bQmyo8<)1!DRHGfnBfKP%tVjn0jV22oU`; z&v`EAL0-*5XZtwNM9nwo)S2EIz3*vdVb)tK@lr*mQyV_V5;b>{l(ei4bhsY-W%-;2 zADfVAbiPBxr%E~*WYb2k{acO&MJ+D0jj0mAOsaLVyh&W#2K~>>rgBIz9VR{jBBc0d z%k_Q7bLQjtwGO|GwbVQ<^fO8Za)t-EpenxoVL4sOtY_lBGcE66rkpW3a!`$b<0imU z<5UBstz>4Y;>&D-r?nJO4u|X>Y#m%=I6Ud%py2}i#{B}h;raNqk)_vO+S}o2wR!c` z_D76oshBPsmn;NTR44$ePr$3gXp!~CselpNcC)jK2_8#(WQ4~W0V6o;MTQ`*4)jWKsC_%r3eDB5e`w`X#yxv`+P>kb4h}E(E6l_XKAPd{|BaBkd2&J` z@@J-eN{y`)j|17%B0Z*Ro zG)hED(BS&sm-H)t1#Syx|2%;whS};o$`VxM_N|PBE`4>5d?9+#bQ@kP7+BR4-$kdI z>{r_p9(N40bvxP`q^9izHRQQy+m#+JZ(H&Z9f~^xA4o8>^?4j0*3#|U5-A(h_|7bZ zljkmxhc^xWA(5HEm^NK?Dmc1jB(E20X*vxAb7@}OTd(Yi*ywuqr`FX)GB>s18tMlj z0vYNV#YDTS_gyJr;il0w)uko0eSQgF`i_(Ub?dW0!1fKI)@Ur+dh8&>cb@HWT!E`# z{{j$B-d=culT%akMW;>C-#^IAnsqH8a2rmXsN5nnA1dd>=u6RELm{FnzQ7BS84{{_-*0o68QD6?J5M8Pg_& z`Wk}QV5g_&-33R+gpQc1z~JDceq7bHU?LDS1?358ZLkCvWl8TF4==iOi13I>Gwv1$ z)`!T2m}oS(E+^AXk&YLgA)AZj8_p}%h(SEyc#bCQNL*p`a6AXloSeZtpG_+qbR2nU z0a;&TQv2TE#C<*7uR|KLxx;8w9`5@?&bXg~(3Fp_udj9Mmw~3VCwH~>u!&nqz-~4y zi{H!tcK|G&LAxs5MlF~j678_;-P8I*0-#okEUs4T7wTkBDD*_sIUTJc1Nmmx zMMotXLa-KBNuT~YTPeajYe|+-2mT`84pdUBMl2(_L^x6X^5^9|I^UgRLfavN#j9n9 zxLu5HXp$IZOW~Ct`pEV|%D68VdZ=W^gj=aDK_+XMj2?do4abbWRxA-4{j3(U_ET12 zaFl-h{4{{Fg@%5>vIF{gE}vC;RGrSKi>(wb+A^h+iwU*LR(A&;MQqs+sdR<8T>4zu zTn_nODxGv$+03ksSa8yL)-ULM9(~U0^!FRVgwN70i+({5Y(JyIrvgIhKn4*Jh7{U8 zaITaRP7TZW(FDaL0J&3?LNOR9FRU);DN~oOY>EpOJ38+Q_i!h(Z2KaSI1LFBMDYO)5t!P7_fd;NV~l zYxX_u5~9;%N%VubP=t*&w9sR3N&Tk0ySs^x$d~gf3`ac&@1_3yK*zY{kd{p?&=a?QeyDbg78RjVZs|ggLT4gJ7s@SPQ^ znxcu{0n2QG(i6gcin!ZdB-sfIY{H18AJOG)c{uIbA<2koeOe>EELkDh@9n192o5MD(dO7S&{^!THJD-PmDn-GzKh=wkUVPKj(<4*GeWc^a z(a22|2lbon-GFOTVtj7jmLfWgB^&ZLbA(gsWucbR$gA{Gf{IcnXXun zTL!sezN+GVxKOHfutG+kr4j=qz^@gnVctpNMXUK}b|}(%BP#toee;1ke6+Dm$Y-fU zbuM6EE7xITBl}F3gd{NT6;l<@&$Q5OMx#7Ct7p){b|F}{BJ~A+6o-{-xbH2RQd6PZ zYfPW>_S@kac^bpy=0)tKhQ(xT_=c9@k`#k9pkrhj2KO}gpYA~TRoYkAvyf{a=3_B8 z#s_(qA$#~JXOE#Jg3i2LwE2aNN^)QI7TI}$qa*w;7eL>8J^?HK?6!9(R;9@V<{XQI zf7B8%m@P2ingrtZ6dfY0Uqee_l84$a6u z0oVY>b!=GW7|E;Db23sUBLU=@+vC%--s2?^CgXN-jqx(q85NAiD~VTa1THm4;O?F+ z{5K&X7aGv~@iH#31Fi;5I>E#0NrrvQK3iXXJ?V%UCb`no?|y&YUywOSre6E%Y6L{T zf6vkF`Q0siwpcCkP5Vg?!I`y{UCmik|JN3BYg9Ej8K$oNqU_2SpWtW@k;Am4X6&2m zhprKw7__tYciSfRB8ZYyp*<|tjMPwRJ=ghfU*if!cxBG<@G#c#(%sFxL224fnci|* z{hUe6^IzvpvdP$15BZ^{7%?%@At($O+qRAd%Zus3h+0_H18JqcC4Qw11Gg6AS84+rm1CP#y(kK9Qt!ykZ{1w;Ke9eeMZsFO`LI00;^#qS7u2N_*FupZ`}%A8Q;?A*H$D<_QaesvBcUG zMQ$LO1{wzvP&jR4FfKUN4mnp!-)Q1}>~t?6c6Q9*nk*L;_gg{2b6^Of zbi`jTw-H0F^%>lqN~Bv$&G%J5SnP2hW45`GfLM(MyuLZP1xa`0=3-=>YFd<5@C?L5 z?kR=sG6G)chcv$3Jt?8*{=^`U-F4V+C8ZsyqF*P!0F@A!cSgCY#5h9x10v*Wdn8=6 z?6`fqxylRT#h5Lhv4}@&Pc(r)_nqyRFiv!3r=BkgPX(x1^j|O4W#J6j)C~klj9M3# z5g(xBzd*@=Um>C(-<+PXj;1yhkC6tec^g!V`ObWNA+umL3Dql?N(?r@tk*D;P>|R4QVvkFIc(1 z-8C9|1lyX;mjw^SZv5?E9NtG6$H~(liZKLyRfV?5u^s@(sJjOVA-+1{2IJ&$Y#~$P zWBXCU)8q7p{>PKM=rSOBFq!+pdbpg=tW>742lJcB6_7Nh)rY{7vh51hzrIE*Wzg?8 z9-N?$Y9G2_0MzBXaNE5#wCqLzM|UxP|UL?AJ-x(){o}c8MI$SCJJ< zgh`GZn3T#?0!(LkQ8|ThBB{Shw>>Ho0XXGx8a%aLe0nLVR{`W{mVv?HTbP^R;pAXj zH7ZvbhlSL@9SFiC2&?QIW{^UIhAh9ukvc?pYfh9EeP{NxgKlpzW!q8*krvzqf^{xd z^1a~hawxLZZO<48g51ED-=gxKf;Ft#ESTK;eG?`EFkv~t2n?Zq-d zEMQA}$XtFWyE9Uil|t9L?^9Oo$ium8b`sfie1W(G*y{-*zc?(IoaceG8mKRe)lmZ7 zL+Ia|Rcpzdx1K(N25*-Rv=hpIPFWnS3xFBU1&+eEflhyI0-DS)9WFj!eIB$sGELam zI*r3yZbU(_oH3Fzh$++=gn1qHHW~;bLJF}D^YR%PK(L?(%L0D;>%2ZD zPS%;~yCh^}(CypJPMb<%K(U<%6ElxZW(#pm#W7X5y=;2;J>PxB4={Roz@GdWq7du! zI*?z(9#_z^nrO;?m?WhN0~I3AEL^LcuPmBpy%Ku*7AWFp!jNkFx)2|epX`gI%u0*? zwS3WAJY6lvEOR`_P4BZ{>a395cXY(DN93B2b3Jq^3plQOk~&i`;a}FFv*m8c)2$IE z`pgZdBC>vJSum#`*n`~FVqg!ndl*AhbyEfjiZ&HWfov6_N|k&N68xW-98X1Ujo7-? z*}um!3JL4GY%j!*$2+&+aRx?YbI`)Ye{1|AWwcWW1w4aiH&a}|)-fVVoJhsD$7k`y zN+4Z;Jy^%Zbxa<7Awt06p#f0OK{&}w@{TFP&GswZHt^OXXhnb^mmzW4`)>QGyJ@wf z#r8IJ+@s;U-)VrVx;^*cJV!Y+ver05tih7vL{kP)!}-wSRYC<^|>9o^Xn#hscX29JCV@Oz^63&iK_t6@u)nS zWiqvj)aikyUs;qi>M+QiSeR`si}T!MdA*N1=XJ#_j@OcNmCBY6Y}>)-lR|)p4JvBRtT4a3q>OxRK1<&DeTgyX{f#k2roC87iCS3 zvhll;P>X~ZKLVWDr~qi#OO32e^f(xlegGTUA-spTwMAff@^eDQ#`b-D1Xp!1S!k$d zkj5_mBKMFvDSPOkwHpknIScnpDQLUG#^gA|xBzrt8*ceX?v_@ze%+rk&>LD+u2ez* z7M;i(RlKdvhXBA<__=HxrWuu zq^weyh7tC!-_HF~p zyWJ_ugi4%gd>n{ow#^$XhPl)gOEmVfwyqH>RW{X;1$(F(#ZN3Lk`zPZwCa+;N-vCw zu73L@h&>C`3Rn*W^=Efpg9eVOw}@ZQuba?13*@4-mLckcDr5s!jTW3K!XPVLkq zSx3jcPU}%3sc$bxe;bUlf5d*rv{}F_QqBE_@40KcySqE|*x4?Z>&j}e(jfGV=MlBL zx2HF;?qRZ05FQo{he0P`XIE3_L`N*0_W0WbKJl$V&{=nSwN+ICc@=|RmFjMbnEECH z=&aV?yT{|or*E`gKt$qo?zoI&QBS;AP=UT@Zm6YFED?Jd8yx(EVZMY>R6P5@^-i|& zcq!B)e7Ig^OJZk#GvWK&gRaC5wLs>DA9vao*$imPXWFoxn%tN`s%*day4IxVj9oWl zR5V1)SG`@Vp5UlntQAFnfNf6Yazj zfnm^Nz>pIvgRs@wh(W%sW14b`g23jw)4rK-$(UT-e2A(gsU9}dpn+_XiO>v*(3WG9 z>xIiZzD{Ty5h0^ZMb?s^L)(VP4#h&nH7rz$#9DmUN<2B%7-3?xfQsLTgGC)>PTxJb z*?@^UJ8d{xnor?n$a56r=R+-U?sI`fK^TGkMgyQK%}H{0HC|VJ2fJcmRxyQ;(Sq3I zi)$?pn@<@1!QbQjc2=xEGELCb>P*O_*^ACLVdsHr_S9Jl9dT5H=?b=bgGIcemGq;e zsL?oQ(>EwhrX6781qVFk>9KR5&O0ywu5v0o?yNUcmDH-s!5MMbc-j-%y1RJ}!vb*g z>N&{t2m(BHu{J!pa9%Xs%K!3of82~MF!z0pAtOa0Yo)~b7$S`BnvwKK=EJ%OPh}$_ zvH#=?3T9X}JUkqCAn1M0*T93QHag(pJu4EMiAoWxWF@R}!@*e1Q*VR7)NnzK5pE=X zq<&9mIYal;YysYqoYyZb9V)v1<@0poxyZc_iFB-dV$_eJ$QOPjk9QP7oH>ztoR&~@ z>y2C0!3aLs*u+Ey3PVbCX1g!aojMFeB?=O~UiT!#Tr7!bhrNn8$g3O;xU^pTzun?@ zUpY!GJ_!h?l2w5}W^X!BmGzPO5|+NESo zr`>mo+WUhXe^$UE3fDKxJRXN3*t$I)lV;YS58ds%;HU48|Hgu0WDMl2IfRTNxQui7 z&LlZ4je*+n;uNG{#*Khq41CFk9qlz@=I7dmRsG=ZpMAW})Y$MB^kn^Rh2viknCi!e z%p0@KD#xMCl?b9Ou}NIklyDyp-B1hjdNvKCzuDVv3W5#braasDm<-1~*q%+?`0MKM zd=GO*eL%p5=JVp4I%lARNM`OLd@!&XngytS#EgtrqvnYaAY%bVcsV!lW&sqP(Yn?f z?d7L@nl-oV$e&W!&51*qGd=Dh+TUFhR9I|&J+B2@hoE4<2I7(oa+hnpaiP;{QKfLg z=AnL1q*ae-+;EYJ$lk&fEdR74uY%&k!T5vbv$JG)W+q>T`!%D(#k^u&gT|BbI=9_P zMa#LcV7D$j&U=vx7enL+_e-70r;AfB95U&&uYxx~n@+V(mmc5-{0Ui%GR*GRTYB(C zXrWs8?@-<4!7AJ6lXH-_zOb9(!i=tv_)-XhZ?9N<=Y2KSoz}uBglNU~ZS9?t1BOHCBhbFbzJxUocCxYPbf$M(jHka)_jfP}u$RfCa}K|JU-tX z(8mP8y26tpbBOWe)FcS-@E{Gs2uuw^d%jzMZHR2{=!s!D?EBX z?%3bikY#P&`;~|Y1n5!0Fk<5+5~!L+*CvfV;hV<8#-?&ArYtrDP3MicPhEk$M#}81 z&P*gZzw%)U#C_JQxL2!y%>8kHY%fQDzn(gEx}-b!=Sj`rl-oND4=Sozzr)#e;r<#U zzhI~LRWS%}7HRCA8CSLOmL_zhPY||LZ8c02D!TealQG!xZGHy2NDhLF%-ugmGLaA5 z5<;wBj~T$J{Pg+gM0!M_a_-+633C+nabG-VG?q>;!jBto{g)P? zUU)OYb8GiUG*DDJ$kZYTh+0#Vz9kA>zOuhYXnfx7UT&;yM}?zr03;>|C7mr>Ii|Ar zM~e;l^ykOZmM)f*o6CJXywy=y?4=tZ8nj_K;BV(;P^=)$2*_nzm7fPf(5MaFP;dTB z@)K29Z=4f{$*T|W_O)HCX54k<1s_i5qx^9=4+FY|s8OO!vDn|^7Z^QX;Rp%X-g>OB z-d|!35s&OWtdXf?(!Y_qOqz9B)$a^N%jgeH8w#SoAVZkDMrt*iv4(`EXCyzxVDADN zFPde-O>?Ce2yIvEZq}g;?^^?z!zu%|8Fi45;5zeV^bn;3_ym;85|;2}l?4#IE3Gcn zo)IbJ8=KE3Zabxw9dlZVnwD&VNz*gWLA;7uA03T`G`r~K^hV>IzZNt@i)VP_n*BHY zeG2BRTRD-fTdzt+kz;w2e35`kC^K&|-8@>|BnkT4%PNsCZNS|J_k-^)4mx&-=?vMB zAOsro?CSAAC{y=rq!%eDaa0YFtTXo2WA655mt}fcmqpI!vOP`TNH@NszB zk*51lxys^`ffc^G7FO0E~^2q8%U!v-Ze4wbhYC%sOhEY!X@Fb!NDz}6S zo!a9wQNyn5^`pc@+-q(*oIr<&0fLs#dh}4pOfludMnF4?nM656YuJZfAnH^i%24$ zs`Cl6H!@0KP-L;*3n7F8I~U1fXwZL=2DYX&(-N3=cI+`jUtFlI>WRpnY@t8{Ch}Ox z(We1x0Wu#+7IIJ6Ak<6V-#!$$f7hl=g<}ensAbgHMTo`fnIjJ+1?PwK2U^ zbJ|t?H)c8>LnduRu~u^XT!KXvMCH+o<^zza_iGb`^NHz!sp}oZ6>?cElgR;__k!O( zFGhz$Y&pM3X7Qc zN#F*)IWwpTiW zGZwRzaUFMK@*=DK0Y151C%Hs|x>|={qPd|sY80DL?w9N~K5CSf(g91pU;a4|&CbFb zph8EagSSDag1w4B=M~cgSnB@PxS@MM#7nQ0y=TX2CJ#C*SZw}K`B`Itc;>jY@FScN z&noIFIFl1Y^nk{0+L|p`2Ump$TPs_jJ8Tb6#y7E}@)U%p&D}4_4r0ET&Y?=zjx~Y$ z>6L93d>2omHzSx?E-ry`G&whKmXbyT+^@5tS0tA2U440$oS!s}vS+N5#$b zd=9|<=xi!0MSqMviW(F3Vc=M2-@ z=FugRj+Hr%>J#eGJ)qMG=rkEjXvx|{g_UB1O}ICUMk_XMBvl2}&fqlBI~=8%I!UK<7eAK%k#Uq+xY&G z(UEK&jy=~$6OXM&cW-*P>G}Tdv`&^HA#+rsR8G7WA&Tk{4j_>(U z==|&EX122_2?j}&oitJV>?|1>8O(UQr>8vK!;$rJ9okxp6Iy7B$4iaKNVf|o?|T)E zoh(j|&GjzjlJ@s-|HMXn=}m6o-!T^yRWC#94q%QJ8$^;+W68y9c|sI073a5e3$?q4 zU+E+j%=-cmn5I$Pm&UOk!#^_HYP~CuP2S%x_WM!3K%bu@q7`lZ!Z`l^mi<1vwif=U zads_BtBBv$$>|H>`OwSLc$=HOojr;m!Smq9Si@GD+j!a7QhIuFdUF2RtH?9n`&$>g z`JT&xroqW)dw&v-lAd@J3%JqNTHmgQ;qG^z`O3Fju6kbgpsE_xkF!d2-8r9leOr{h znHptY`Sk?&dLA=>`IZLd<<5+KrkHw*@@8k9hU1*F+@#T!wCn~^B&4qGjHov5Pc4Si zx07llzKK3ijYhTvy`iRv)Pr$TQpbdlpF-woy~gKqjQgQbgGcd98c`^+?vjf9tc|a> zzo9wyfd<-kJm&@vYgMnWl84mT*Beg5*W>c4JWk4En*WeLF&ftFP&Ma$o%fepQBAEC z#%cf1TpQ;hD%(x}*j29`=eyMDJVj;qVKmOfO5sX-8JFf3ePFO^V`SAh+70|px&ZfB zOcE7?sh#AC5(&zl^P@wO?LFk`;pIX>a%q-mFjN;te$CnL&bhMpiQh-;8Box$C}YOB zxw)aKfCi;h;>>iu#Yr3PjCd=FFQwh^eS%YzRWV@6l;MBFHJ)jbBf&YK&>{PHRxcX6 zj6LmjJYCcR_qbNuuXYO>0rlv~2_z{@YEiMy`$|q7J45Je)a2uWp(DA zvELhr?`UI!u`s3%B?PYJSSgCJBX$!PH?)Hj2bJ=ZpY)f9y&rBW zRr4s~43@KPh#j7y!^(Hr*TycV;KDa@Q_XNMQ6)5N4A^BogG0k_?Yao+{d#~j#uG{j z*EVy=K&e``lzzBTnfYX;hFa@7wABYOQgS#us#+_Bx!3Z?Rf8;uMXd-hho5tVxWw}| z8B1c6$aH^AR;o}#ljq5nt3qZuIg z2!rVl`9ul})1Sob#~B*svW2OnOyv;LD%~8H8mnLk-y>-aSY{=wCZp$pOkKg<{x286 z854SR{f9|9WgwqqWF+Ua*vgpjr)&+D2MV=r4Et->$?TzycPpb-hFc#ew8c)`#9E5V z=6!Kyg1%X=^;d{}j1b~rh)hmDn>9k`pU^GNB%%oHM*i2U+?K0F)mvR>WYYwR(0el4 zB=ucgr>C&^&{hJzw%v9;2XGWTSuWJd6Z|8lA*?fM&a?cAf$TM_wUZvaHffks>^)Od}e-;S#S*qtzCX}5x zo&)*K+t|Q4A}0{pb2E2~!)JOqnuO2y9zIEj=?p-l@rHd6z2RKo zuFDtC6V@iSgMGw@#-SpJdrVsE*{hpss0el z);KgBg;IY5b9wNbT0hO3G7gXPNs?m=ui%fC{l)*G>a4=rXv1|~oIhGwHP7_KcamTY z<`X<+`S0SY2gm9+(|jJ~7o|IaM)gA z;Z%m@y~h6CZ|nED&C@1dknwOf9S}pFD{Lh81&hl?>K^G-<73R2xC0WbL7-zKL6Y6 z1;boycRQ9*&RVtHUwWUVH|3E7w-ZPVc_>zF8~tXtw{>q~vClVhaEb3R{Hh;*xOAe| zVXJ=KRsNi<`gXYyD{_qNdbF;0r=EbD^M^c;r_SkfHgx4zTW8yPT?@RtKqEq|Bnjur z#$W#jJAzzX2xis~w$bw-aqW2*WH*JS4@wyQRg&$N!iliVk;ciKQ2K0TbNZ0|pcI1rBb?EKnvoN8vZ}rLGSf*6UjHfj!qP*J zh1KzNqIR@aF#1Sm@+0<|IyTqGsyKezx0Gm1I7`oAoccU>_F<*`;np26X4zinbo2U_M*?>=CR{3*4TqfcG_X+kJpEGzn*K}5=M(- z;wHg2asyz?3%kNq3~ZFvB%tQ4Dkgc?oZ0&o8~1Fqd8m-hBCKA!Qtj=jiYDCPe2$|@ z^bFax>+&luG*J7dNE|T0w|58wAsMijuvcz-*l{LvTEHHd9lT7WBod)VdQ=*lqcY#eBxCV1JG-EujbwXdnQX;) zsK|Nwm`9y(le^yl*@cYECs2o7yOR&GX84mQ#|MoJc#(lMthcq~ZzQKa^N6NyONgls z);eIEe*MyQQ^Z(xahQgR4$*26P(~dfBMaN^>@I0sjUXD^QHF#iq{j37@w}D8xD2&3 z1c}pmzk%i|OYWi8%jwj#zowO@GKWp?A*>#*{b@YsTk#s=$x@t64}$lACa=XXW!2lQ z_g(9YVnGA(O$cF)?bB*s^oO;ZNX{ys{A=^-=jFud7e!RgW}PLg*E?9aNpzybMO^ES z+D(K3z>s!o9^N!$)w&j8og#b*x)Y&TE7=E+@i;aq(C7U2D6$T11hjwwCrS{{g~Da^#3uSk)S` z)|WF@9lJ!avfWL~1E7u#oc(N9RI7PB`9xEjV|P#61^bvhHRnFwik;L22}hLs$8I(=kUFHhS?73%NsSWX`!=NG^)H@wg3GnX7b&A> zziuQqxJ{PV(7!1*i)X`4X(Mn7XusTCC1r2a=3Mkh9x^YAE-$mD$R!J}eGTnQ^PsV8 zz}95Bc{lsn_b<~6vpX2oAuW$}$p>Luf1>g{~xrkPD12L`ai*R-1aSnK{)$3r7O;f~iT+vNht zy;$7YT2#wm6r|AoaOwVh=ANNPtf|*-RqJES zj;}~6f<&m>MEj_3Aj#%87tn3^3Co#NM>7;#%^gteT&3loEF%Xj-F=#UPpPx>J%q8k zGuvw_)l~|^P_GyWv$+e~0;Mg3@vx`_(-~eNdUh^@s!{7x=oAMDh^Dl5^EI4sKT*V2 zs(Pk5Or8!43sL6vmx*QG?F4D%$2Fl7W;kDWgo|!Qlp*uV)Gxej_IOEY$R$Fw(jg+5{&efhonV;`+{u zLng~WRwWsK5 zMm!goFGNMY5W?>%U-Le7cr^IRkdLmM)O67^xz}>kd&=FOY=`RbnY2e~Ed;!0u&dfG zaD=D%aKE;NnCq;`t=jy)!h&*#x)DDe>d1K?GuP-AJ+WAqJ$jKQEGT7J5ZPH?@k}zU zn+lfpe*Wv=>r~8>{GCx=BrCDK1c55@=FwF`oeWLU#!}+6KmRxDCr`e;Br(}c#<6%- zCO1Qk)5=*s>Id^^+D*gsf{ANbZ(bhPTCX8)EmVKum?}}(Dsy!$^~qUQ%*bwEueJD3 zk{LtO^#bP2TYk^_n8*Zl$W+SDK(kyuo~q2O9z3=d1VqH&Vye)({^G0*>A6(u2IpV? z_JDd>o2b7*s|07x5knnvd&6FC>xp=>MQQ_~%~5jOUwvq0H?tVVvPAv!u#ys0L}p{l z#7v7#B;~xVUrwxQFmAq4j-s6Xz6#>gT??{axe^qb<$3a(-f%yhQy4jpU2{OkN_5n{ z#*T=UEOiP#mbDB$7$9@H3&RGavXSPbnsTzWQ9qevd_z}#-os!wtLEzIRm@TsXl%xW z5YI~R`MdQd=yPj4bH+AjEflf(+0Zyvh`uSWL04rBJKhyTqkV34?Ja)r=8a&{EU#p| zI3ia6Uy~EnldSpwc4dwpqj2K!Idv54Pp79!D!8&HkrGLa$R;F=1F{YxE^I4;Ae@|f zH!9a$cqZyk(=M0#+Nw6i9q_W(G(HyC8N5rq&u?YfIx*}ys=#Iv)KpXoQkZ(7*0l&$ zMhQ-tep5uF8egLM?FN^PTyL4PyHVF;x3`FZ4LG36@f0g^WxQpx~P2;!)&kb&m=8c-}kW$Dz_G4bt68>XchWaMF4!Vx02?Ds5WTizMzCf7Z0f@Jg1989HI`=#wf z2^aeV*|MF-dQ9m^LoqUneHxh(HB+wZ@KF@SeB_y;S#1gV|Pn(YgvT9 zE{uhlS4ez|<91LGj(at)>PAQ#_bjtLcCnfqwph5NJNK`BQz@F33w?hv~t1Cwn1<5Ow@l_;4k5VvOPZZt+Xgtf|3F?B*s6*dJIAhh! z=TTM;7rt|o)LUb^Srn1z!mp~srYbUR`K^p<#kd#AO7%AW!m-rOO`J;CzPvz|dwyOKS&VY@GR;Gh}z< zuqbUpDUfzoV6nno1+{wM!JK%nW&!cDuwxxcKr5#=iM(WIyTqU#x*Jy|yH1(7zx~sMKj%=%*8W`F1`y z|BU&;YCfny~K&^@C{t$g^_AnbhsCF3#|BKATl_pyb&G0+%`-reIWGh zzrw=_ix|kgqnU6k!K<7dPWXYUKL|x3ZfYhJ>6+yJ^?PhAs1$RsoLs0vld%;uWb9gf z`D&ShTUsQ#80(&<(W;iSKY{VF4#F)U*|nR#I?Ie)6k<6fK%Q410+^M!QkzW&Hb}Mr zo|P4%=I#_WJ!?WYoVpj!BseaXjy=(O#L8G4QP#&&*xbn^hJR!;BySZMi8SBAtBI3;|* z6a^esRy$zHV)mlz*u<2b$Q$*3xq?SOvODY50sc8Fx>Sv0eT z@mLmxp!bK>kOjxxs6InZ>;VUDyz$eDVSyM}r^v+(PxE98XMwYM?%mEgOFs7n;R0(r zgF(rlwyKX>$X+q`#|2(z1`)`S@a*QaHS>BS;U9!=$ow}bFQ4|zm1dwjb4Z}QH~;cI z=rR^Q`G&Jhbm8s#TC7nDWT6QnwuXcB@ziHT_Rw07oV^}$uT+P%|BH)g7;PBedVqqY zn78AQ!YITp(EM^G2{IdWt1yVl-&%~!)j|{Xd74aRe>eyduM#IM+>e^!Ve#haeUlm) zE+0pr1;w(;^i{r|A|+$0jyj$+kbiq?<#XlRAz!p#>z``btDH+IxUZA_bL2l&*Q)@p zJ*MBRPt@~1;8qIpd9VY#S~S1NeYC6BaiDIrDOVCz;+BqLPg^Js(I;-KdDPh{ko>y+ zKw}G5X@49k1J#-8h5W5)>ET}IWF>4+NM+{q7kjz8BzZ8%693Up@*z#qOm zoE=G*fK>>Y;jPllnI^!7{hIfu|Jnj7;$Rd1t@@nk|2hD#9Qa8oL&OLQ)}L*d7AZQK zw<`TMa^KwX&1usU=4K$!_jXoB_f~6j;H3qyyaeU~q+xSa(30I?itjCGC~GdWWGOm* z`&~d4C$J97qLlqoG3jLU!B@(DdUY6?`ZQ^G8g6o%ATdtlX#vPPHe|G2N`=v~XKDk- z1xtZ9$%pk_?fY3dUiyVN&IL4Ppk5$D<`DmNb=8vh-|tsQQ+u0?;3#h{iR4eI+Q6k9 z6_s5duo_ZqEyTp1yD!iciY^|bY>)^uouW~CT6B!tM%9oq=-T?Dhq$qe{5hXbJx5_7 z3K#Jp7P0X)fd6O`qw?9viMgeL4@3BYJnCVs$Q~b6yZ;J46VAp{=*|4!x0!y|-6DKA zn9@$bZ@)dVPsC>jKK*#i2Egt9YVwE%k;f%yOFL3lA*)08V{EcFWTVCQ{q>$*3PGm* z_IPogGTmXLe(3s7oM>wKJITrhI8)k&O{OiE`1=o+7o{3wVWvw8LEY+3lupeVuH&+E z{=J~lHu$7npFZAAk5$ESJ(rJD61N^iWPKa+PiS9)W6`KoQI}ANAz0Zq7%2+aG(Ofc zq$F-DeKe!0CPnZui1@Lr0X+D)wnGoBNlPsTz5PM%v+SU!=O2JK-<0%E#}!>F&_I)n)P0U8=WNQ*MQ|r$Ad=7{uDH{%YUTHOg?8o7eq~^L- zvJ)39{(9KN6Bps(-X2#n;79q?^WM2g)bx~ip?EgM3+td&soBYQom^3vt6CxYu4en% zUUtJjvN~%%l(rgLL-(@x9w;`(Yu1T<`)81smXCmo5ay42J-?>FZOj8p9|nrnMzyw9`LSSn^uB(NN;r8tK?CX1B0K zA`zn?jCKFis-p1}7JTt>zKe95!&Wm)uFnXQm8%Vl<(3LjZzyO3teO9k-gjL3o-@25 zBy38)H&yPgC(OJnX%~|C(wJ1e*iKlmv|O6tEE|81UA+gFV{+;K#v{(t(b|%1FHPWm z!(S*Wlf#MFEO#>bhqw*j1ICeFtg4Nc2aBkRGRzv`6daP5HC7Q zAB#0bE3565LPw(glZ^GDFR70ma|$=iVp#jwx8Xvq-2amBp@ZOtWX>*56@gS3ypAc^ z`dcE(c$BM{xeWD_d6I^9>2iIsL2c2S6LT_E;Irn}aM%%+PlWY32&26zo6PCBs<`f$ z=v-=S%E&Q5h{*H0x7XPnZ;Y+g9K|2!OJQro&!idFnZ7cEvXoO;O)=JNnh%=Lbk;|0 z+Ci8+ToVm~vPpwxpaTIsp$9>OeNC5Is)=763CQOj$a(rA9LTWY{vL#Q0#YUoMBLW# z`b&+!I*ZL#-AK}RcQukd_jE@TQ)i8};=U#B=7WHWD99*7>{p5<@}dRp(-~k0$Tmd` z59jw;Q58%NygXon)dB{S!zCssTOOEfcwb}*ya&2)c~22rfDcm@B&Vo_L;~{~T$;io zOkN6$pV2iH?ecAd3(WJA8ono6ZC)4h1qO4npFqwjO+3^1R(y_#a_ojOOpuvf^n0qI zf9GVJi$*tpAr$kvfp0%Dcyua6Gjn-l;y6qSltf=`?^6GPL-4L6?;ka_b9dB({WOJ!v>E^_h&T=%2isO zR0ayhUM9@a=LHFw>zL4{oK43X5j&pNoJi+u$;+4&q;q?u`U56|iYAj+$~p~{Y_p_m zRPN_<>xIYDy&tq~esQtd+Ee9sZsAY&Z3>nF$$MNk6&(TBDr{kjAA_$NK@ma(8!MIHA+^^ z$6LhN&{QUl_F{$gg}rYv&91O$Haai+)mh9A&2acCiA`wn^z$Ji58DM}lauUL;X{v0 z1{dl_lSRWe5U7$p^G5coVJw6A<3D&xQ#B4JME09V{*4A}6^o~|c^B{$cV5t=oIemB z-^8b_y7ijFX_LAi_7RUoztTF}bLypn_?tA&=-ST?jU$7WX+p9~{xd5zA%4X#kksvLvq@Jl4W$85_YDz0?D z-U}MJOrm{pnbO0XO?f%hbcBaXfjN!6iN0}+pb{5;aU!KdVT5?E-Jjimg5V|b%=}oQ zNlHR?OA>$I@`U(eUms#m_hL-jQbkvVDXuwWhatUFkpbH7(}`R~EL!~`09#4hHleU@@yPaDvsU1ga&Bw~M1LnoZE0Zq-{l?DEOLpE9 z0Ssm(EL0jXi1&Y{x7H3HQnsvs$r!No9R(3p8EbX=&GvfQKSx}K7FE>7gYG#6GDUm? zJ{F!zIN_kx;jSx}+w0hxshOgUTd<5S4WMnkTERMxXkh5rrMgM)wJ2trjr?(aMOAY% zGKvLr;MM)}xNpN(+IHL;u8{m1N7P`Q;~GlOz{m0ZtlgF8r%{^WU&tF08DW&;@KK3= zE&tfyIvxV1jFKAOG;-%snG0=6yn5eXr=|4!)UxUiNG(_5oMApv|eWcgjVtzQG%ea zml>YOEY1^NnCUWW5yifLi*%017+GdTo=+{DRD0P`qD!(#X=C|aEJoHw+MnNzKRvWV z4t4TAzwtIEertNZKPx)O_MM}dO|#Bs#1ljW^3Kx1%dTNDvqHm#A*;50P)BH4LcaOp zXwG-5<~4ak_;UE7Rad(FuGLVrwf!wou|*Qf0a{8yje;?Vi4&?Lf?QB5I||%sI~z5kpZqb!Ng0 zJ$wnDSzzaZf=kFE;2<0R${EYm$k?5kW%yq{Wh?wNh2+9FNsbBOXnIh+)+)c}?h1+n z(eDz{r};`f&P4^~`rmkLXhImwV7G1tq`x|r=j`@{U6=!xk_I+{l9O53c<6h6i8ZMHc^V0fH9x{%>rzqYqGA!Gy6LS>Y?fp z_I)C@nNnlie5(2xs1uTQmVf{btuIK#4x#@grxqVM=U)1?hwW=^NAnCi=u2XH{)6-# zU?lIu%DRum(vQV&zL8bmL%0A#@Nu0cDX$oZQf}337C!yU`T^* z2Rt*f&QhEE%;&Ld8eaUgd3eCz@o{c(TGkq|;4KJ^4W2(S7Uu6s-Xemq4DW;Y>gGO! zk*V`CGGcX6!G;;pLvp^DhzKolzitGWyv&DIKBA1pq~LHWb+*MKkywH4XNe9^Bnv5!9#Q{zh_<@5D}AT$ zg490<-lPE?4-IG-9wtKe=Z0mbTJcSv6wngA{Yo|qx!?h_L$a;Xn>n4gh3*u2@pRi` ze4n)VPfx$ZLZC$F5{G7Y$m zyUC=YzMf&F{hb~s+PxT(tmL0JU-@l+FrwFld(8SkI*2!x$ATG-RZ{lC@5mMp*>PAY z&i*X;FU;1eZ1VCop+&-l0SVxHW^QFa$nFOxU z`sbU@vf?nc#W?ktr6D(9P7-bI3xTgi?2I2R9siTO$hPNCE=1noIrWYMLQjI_!bqNF z&Uue+!bqiHUWbg07nBmRq&^?Su%F!>JT60!l%{k~q|Crhq5x(&I)@k$Z_uC%2p=22 zqLskrJ5=g$3v7a7!f`Yu?ZVFIc#~RgBR1_|~5IT2%SiBqQYunm! z-05KkS+l7oq^(O!{mfzH6%y^Ks2C3%*AJ$&FzqvFs?DVzH8g|OX8z%NR$7e~4|--5 zv0$nvcR!ocBV4=W)+aRIG@9)t7gEZ6DEe49Lh7E77I4+w{@5pYy-JCe$r*uq&+ila zfrvh2fS+L7=&`retrfDP1KP2XbFJ+Fg=l7gZIc{^3n0?sza)~^}aO2 z+Wy9>AY`*CWUEnF9X3=H8tB3N7;D{2fqZ*9yOD(U;Ng8z>od_IdpkTif_y;?pduiW zSK%D_WGxXG1HxTV6%F+L*K#+zhIsLWJ%-tN)!*h`P4?dhw(sP4-hw~1i4b^Zh7v93 zbTSZTw=Za7dndD%j*EsB+F|r7;bVygOP2w^JlZW7m-@ChcZawH_Ye703PJ##yxhj$9 zaAy(8#*-UI_!Geu+ZU`x#7h(`4ki~gQ7nlrREc|=i9VIX&cIE{aj|R9^I;_dp6E!=^>qzbS4X zOV4(J@M@H+q4OZwMJ+*eq24AElWZoQ?iW0a{3o>?=4Edc{+*tIar6@AO$hgXO_`w% zB3t}6rSJ{d39_@CHM`e~Sxqpoa~J&Xwtv&fv$fKUOvbDw$tQLrE z#@l17v5ibjV{24CAVz}t#>?Jo9&QQWL3!H9Hgcj)f_TiP8W!-r#n#J0FP`uP?X+kx zMQI|v(#9aAd0MZsvnhkgbne}Ouk6I(f6j$wjXoAOL1~`>-*tc+YVflHRZ~C3ZH*{g z2_E9ie?KaM(wd({L8I+sC;weo;M2<_K`&0)_Ae3618M;WPx80G9_6by-h%Gx2k60R zi)~T!`e)I&CjUIR)6xZggLhQq%5i<@Epb5KDgWJ)tgxEjm7sK>*B>4ZNGXH;tA=IK zEEgTlm0(5c(?VI58FcLPAasNtp48({r^Y* z=N|v(rH=3bfy50XNnMhMci&H#2x&MZBpMcf`Zi*qi)s;u-ASz~TOHF1aO}%qvYtlQ zW+wXPb7iw+4DtfoW_j-DWG& z>C_7LLyt@J7Z?}*z-pFPVS)#h*)}7+0(S&AojS?YrhT;jHMKRL4p6axM_FZS;cjat z@V%4o5bBg%1-OzGqr-K;!C@M`$;M0k@}7=_9e#CtT<2EzgH*TM7d}-|bUa`HKo)T@ z$18O~b1gs7NTwU2hE6#=s>|Sm&1|n@+V$vmAbh51H*aV(#jkt^ zYEcL0Co5*#t#t~Xya|q*S1&>Zw?Rl3mSKf1x?V;LS3TH!9VI_xg6Nq)Z|rw?ZSg-` zR^ShFz`vLMG$QveeCqUkU%OCqbN&|%i4)OUW__9eNB!HkeIxW3FIgTg4{@rbuj*n|jVI7l_7V>oVPJzz% zbttbmH(!bvTJUrl#RJn%nQ~g9{U0~4&~b34@S*<{*)E$*J|U@ZT9#XUm0J5vA+M=| z8on@>xJrl+4QL^aBb(Lz4sq2Ii8xidb5Hme13!qePBC6#l`VI5i;zmlelg~U*Wo&Pxs-ya603wu{j^_c!(c0MEhqo4s%3tK^CFjM=Z!hU^p z5SaYL=ACWs`zD_ZZ+cPz-w!su(LNqnFRxAJ(7p+B)_+QLReSA|kB*#W)SKsSaZJn~ zm}Wr(v$C*iy|<yTREBX zHR7Wi*vLuQ*whrJ4+d0J6zPy;HS&4zD{UFMZ^yN^gQ}BwKz=^sXdb&%Q?P4tMsr=G z;alrrIcgf*6RHkgt9BT=TFHEzrju1{vvO9&I?h>FG#>7RHKpcRvdr zq~3IN3A!{ZFVr|3D0H~??FZCNkByHBX#c?EmS(H76B;W+5?N>YGPK zhUn?(%zW-v>Rdu;)JUDm#7VuY8$_Fz6*-P&;cG5ste%-?&H4UkOTUMa`N6*S z?Sbz~Cn2$fgYwWjc)GMz*IOq&gREXx0$D4`B!ZcUvCh-tF~1cMazl7{?W6r`txgtQuS*r6M$d*RVF+b%a`JJ= zK~7!P=x^Ifl_JX`P`zgqcp|F=-^4@j2A_$mKju&SMRyR_c^WO6g^jPm_!tg8k-h%b zMfbb7#fb46Yud^j6pTuA46=W-McszJ8Q@c5s@{{J=(5O105^Ge5$632;*;+z$k;d+ z(r_SK&h+OzV@CUR&!DumlL(|Fw}g4G|g!BjWr7=LKvG4+uR!g_vTVVl0*%N zKc1nxUKInB1Lwd70-|}$*wTjCToHNOEq(i*w8Dhb^^GxEOJ=>Y^*e*44!f>Mx9@Ul z{+xc_gr84%C+HK_a6hts+_5|Zxq2NRIki7muesi7rJm&b8(KZQn^;K8RbMjdWidY)->U*Lm>pg$zVisi}(y6+tBOEp`img6am+|U3KK1+E@ zwJH){=Vjo{ud5+^5GX=S7D}e;+Vq9MVaGm9zU*#96E-ZisE{dTJ(bWWxI;Pzh+CnT z761ba8lmDe-{&*P5|kwtH{Y~uSme;1mV4sRO1PK^Eg*+Uk)uYz@!Pn0>xkJ~5 zq3Qx=D@gGY z*LOGl5g&g4YB}Enb=JfT?hjYlridK$1N>ro8CI@xXk77Ur zK4PqWzdKkI$iP?rZc6o*T>fbD6`3BgxwVM3oYmI`sa71bHglZbaHv?hiG%pMvXMF( z2(3FDM=luS5kRKcJp>uo*3eUz7qR_bD{6ND+nl+pii(PCHyzv7b;qSaLwwZKQv7W& z(phdr#l=9($9WY|s9AoC>jDb?p4kZ_$q#^gI+?T?RpA z@l>z3^Q=%p!(3npj0RO4CF6pUqqe#_P0yCjp2P=E*Gut&g>GL#->V^=X0b5T0-G0D zFcnOqHZq-W0W0!%V=M~dCGPOqFKqeZ6P2S*)6HaBq725C-OffS?KMw>EvgZVU}tT^ zi)#3eoTowFmaIjT@N)OYk_A#EybRehW+qlF|0UMsu;Y@f&CNW$EbUt5gC9>~QVg@b zt=jEuu75UkP6IRna4LqY>tU%x{4#ec1)s5TG7>89X-UhOq1nWkVov@m+F{0OV|6h{ z##A3mOFL{so9iWq+3S{WRVSXXLN8PVzZpW4o27i0$-a%@czr|%{? z?y)}uget?jqG0#N$%R40|WiPD8-)vv4&05;N%0W?fx-7nYnSzgC~LH_TrT#nlxl+rkw#?WE+g8ye1vNYS{Q3&3@nh~6Mj4cSm$6o<-j&Fd$p;|9?qSKmyZib5H9aEOv(jF| zo(hf6!2{BEaDv%0o;ZQY2i~UmZ1nVMFKtOcoZm8stF>kYA8Th;p$W*!E(mCT7z)U! z`vCV2btje?JJ+|no#mfzblASVAn4csO4Hjg4b>;9HuB{*qS~2=fpKVy&sM7*C;RAs zPU5)Z0Y_Sq2aUE3I>u>Df5TWW_=e73`k8DSAh@qK1-0zD&iyT61d&ydq@__Hh(T%K zPEbONz*%Era%yTx#?S5zCf|G@r~2sYU{fOZ|Xne%Q1L!q7LRtU+ZWRVS9ok z^1@`cN&dt?ghl!UxGr8q&4K5LjXLkJ8C%pe6RMSn%AekXRsAX^f*0rj^pmrq&G4o~ zGSnyOjd}8SBRT=Dp6gBK!WfRo#@WMtI4P;}`_$qmtPx$)e`ZdO$b1l%^sui}N^2`6 zONwuo#pR5?KN^`~Rio2xXSg!<>PUX5+^2GrvG}~Za9o=Qy4)Ze({CTcS^ORs8K?0} zKEY?!F9W0QE@9#3nsf12Prw+kP1e9aE04oJNgsVp0T4@2T)JX2*?ptOxgR4JsWZ(u zr8)15L}vk(2-0danG8EG;*mku(fko@wZ*N>P#`0sQTe=UzIfC~rKPS~8YB9Wcb%Yq zQs6q&aW3_bG0%Jh_g$kYNYNpS?&{_g@^pA<`emB*A zcICnYNg+PKUh>ZGR#qSf9hO17{v`F9?A_hHq|}_6%8Aol?N*Myz*?%WMa4^;`HG&v zx_pvC<5W6U3JP%`_w4!ahzb(~gplUn9&3uEG+!P6{{1U`Ns*pppsucufYCc=rD&0m z_*sb-kqK3=m0Wr?@2#kij)i4uq7D!F95U7bJ1H?xJG*P@Cs{0ZrI@xJOV$6lBAw){KVx@dlo4@5@O-o_=GEj7n zZnJvT1v;w#Lc35SB6TuZ<D=O2=mF>VFQUpZ-d~majh+~nou=428}dk;Awei##fz5qm4x8WZYDSCKm$( zp_HCSy~9sJmj>W)`tGWTD?5I>+Q?>WTQESyZf)XsvD+dN_QFB?&BA?f(87;VWBseA zgGf0g^{DtDtxjeQ&Y!;WYu5ZL4hsiQ&~qN3=d2j(zk%_uX&(R-5e#TgzwlC#=f4O> zO<(Ztqy+66_5T~eU*8yvD};uD@me09?)Fu}wbZO)<(+TPh`r!D6`<7`#p_6fzg?zz z(XkvimZq4}1sVx}%7#B?UV~FLyk?QmfSKAa^}yM#-P3h3k;Z1~qT=|w{$(&}=FPzk zLX!Kkp>GJ(GE$zX!ar|AV0pPYi|Xf+lbl?DA@U##oxKF13*MT(zIkf__-OJ^8TP?o zdVc=Dhj?7{Q1_D!?61*`+@h&l3?cBr0paBJ98WeaHBEVL?TihNpYfXesj8e)#H>F2 z2S21I99^PZ`WdZ56bVAWia3$HeEGv6jEwQi_q?^A_|1Ds;}H`K z-z}3ct2Io|wzCz)E+#>4>9dfuZJqzakZPfi69?4l#CH$gH>eNgwox^Kiize5<$6LV zEFOPY4*x@RzGQ|wGw){LIxin!bRE!Or`eVv@Qx-+a3{VY65?Rl5#N^N1+0Im%c;g_ zeC|h`Uc4pblz^@AKB!I_7v2iwA8E{E~3_4weR^@W3`+QAb<1RYhKkA=k1$!!zXLZ`Z(pGy zo@BN3ii!Gu)%R`26x==KtlD!T`fO%LPSuC+{jF`9>gE63m=|rPH^+e8V)NDhx*>#m#T+Y_ zlV8!iPQAFv1Z2mz-sIN~ShQcyNfvG5jI~UceTC(M$a=&l!_KPq_j)v!`f;yEh8P5f z9dy7s^5bxwzk3$kv?3__Vk;D^rii%EiX(~;LU?4%PfF-$_|>S}JZXM$I5;X@4?P40 z=4&RH*l>l%L#yl$3|)B zVRgzmvOD4i8!@`jo3XyH`PctmcfZIg#`S@8VfNvVdvHW1!ET>`Hr@Q5?U+Z-v1o2&v zO(f_rqXGr{+d$z##n4Mh{Fl^CR%#;=Xq;cE!?&#whNwdIa7|W|`p}9>R<`fClm!#{ zudjGw$oFjrnMDH_qM86uBTvp>&l~*1vJ&X!ZwZHy#cq+%KnhTwNW-Ql1dcJ$t&hvh z?*#m9S_HG%Qfn5jlbSg{mC?SeW86{_GuJ++Xw-D)bTtbeC|J;htr zEh)O?y&-I@tB7hjX`7&b5^*SF=1H2|4Uoe)+aTPrE`iRp>ZepT6b7&bO9Mn_htDE+ z0bbnp?cHNWjq@A~PZ~~0*^xKbn%bKA%_FgMV6x&;QXyrDz8kErxw2JCB@j_i^c}9CYs94pu+=Ej{3+rrJNRQ|mtr65;*%YfGm`kS=ev z9PqzcfEdt-k78=qRodK>J8ukgl;-B}uc}9n{3XA~sI$gEVZ3_jSMSnS`Y^^K4I%@! zIcwIrrJQ%oHEi@Hu-tsp?P8o#ZFR5PqxLtI@5S3pNfWIu5mRKLhDuh&a|1tK``B8JUuf^xSlVr_w5j z96FbPBPvklGGqhtXI2LU`%T1ZB2D1mHryh#r$fU^IqkZH)cZw_*`%98lGo-N)Pefz zY9)&6*C7ne*B=}0T2O30Cz+UHvMs9w>VDR*IUC`d+lDXv&cXL<4rEeNkBuIG)w`f8 zB`ffu4R34Vk98_#kt2B5^Yv9=#Qu1y{fpoQw9ke{v!D63@D2J@MbI@&dhUmqXDG4x zZcd>l-EpTIVasOA7wP2XW=d_^SU4#OSSS^Rcl3%OGWUGpYqM7aR#Uw(u;J@)H7q;H za^G5pGUp2K&p_#v{8Ur}o3o^*4^(a5%Tww05icoEn4fgXI^0iahSx88RM>?Ky^eId zAm`7}Wd-kP2Ils`5dMhm(kXxY&6M}I*J2W=l`F>U{;=5pWsd`}+P(-HZZ!pv`u0O* zp=AZ^fv1P&*%1-tM5)!RoA!lE^(mY>q@E9cF1C3uP#45L_}|gfi31c6IsR=g`sEVk zzo@2kEWu9{$80p>6_Xsl>uy|?4&I;ZUzbGT8w=t@BvMV>BJNO&NXBrMUTAZ^=#*7` zx2mN0XAGqLG7H%*FGQt|`WQ;G8>bU~P%rplZyAxQH%k`t;bZ*Mt8j;vh zjr@sb%f&A1C)xA#diKmJJFASdw5UYg-|%1!OX_5N2)xHTS+n(a_DtI|r45dkpuaow z8ATZF9oJN2QwFP7LUSeiVpLFGsu_jr_0;y?w4i8tB>UZC=F8@eS)MDmGTxtJkSu>vlya#+$;Jb$7v2Zz-j7JC$T*8{LZw!e*^nYq2X> z?^(lvo&O}TZB&v){FE}a9yM5)4ij`Su2Fpxf(Jc*gUZW&ii+_oecF62c;a;vF7Zq4 ze$6>b>(fU8qqYIE#J<3SK? zF)?2K{sgW0{Kra)YjDux(leCUqOn$g`kmSxGfJu5I;gayR5{C5Yst$WY5TmT0il#B z>hr1H(IeIJ&>>1{*+ivW{<+vBI|I-4gO~iI>)uTsu z?Xl-TrEg6)tssPDpTT=8?ao_u#u?{W@C80HLe=xnJ#D+35FLb7h~br2UTO@$lTSTs zJRTaxu3b8-X_Lm9H*dZPhIid{n`s4S&YG>kgZ4I|76*NHSDQC)uBV@VTpc@f(4T)! z*U!I9(xAQfvc<1aqlV@qL0civ?2N)3Tzv6G#=yM%%ImfuL&$se?5@!#o~D&6SK00k z8cCwPjvae}1(6`o4g{@#|Gv8MhHGr$d-;{uj1i=N*IaX@1rI=bIc3T;V}fAJ==W)- zpKazMERGzr@Q;67pi3^k$h6--{P2t76XG;%=n(bl)kB2^1^Vv$fHsc>iACs{XP!{I zwrvFS_4Ch@%rD}i3(qq@m|JeW!$c|Xz}l62x8Rt{#h;f$RNG`rx9#Kqma^22|- z=imdsRiX&8P+-b5aKHfl`R5FUD?ZslZr!StQc~)fsV)kKaLqR5){jb1x!acA}{Pol@Ix*ymkMM?Ouvv7f&|&(65$#-?clVVA z?6~CKx+86rEpVGla+F)1uNM9kos`l~EIc=6Ob|x8BqHpQ#-#44C`Bo&tUwK-64X1c zneJ?Kpf+vJ()_|Lp+zGAUGu;6IZn~Kz2OLrO6nrCz^jY5*={ZVB9vQDUaW8Pmf7xe z&81a-TOQ>zL2uoczo^>H#YT%DNxq~+6>ZN{ zQEr}%I}5lJG`nZv*fD>pVp8kbLPzj}KG%#14(oWqkIn5TVZL=0CCNWVB`gd3N%g!*<>MFa0Dlp&F z4b$JXTNe{rp=;0xcJ0g!V8J5w?$y&wiBUYlc*5`^s2+dZG1gXm|Jt={V+z2|ojdCE zGtQM0s^}9tz641_*rtqr{rc*N!w)q(^fcCXEOmM;>{&9)9RPL(d<7Of>~;pnv_0F@`=vzre+Q`|YbIpLo=QNB#EO zA4<>2(2xW6v&gCm@ds-@7Gu7 zoO_}Em@-YVv9)KlsE2WZ;EAObf!OxiYY*cS7_(kH(mvp6tC>T`#j0)FwzdO{5bEBe z=w*FnF5!baciwzco*`_agg_x1o~Va@-hcl+HfB(eeE8wVh8yM~O89fmxzKjp;VFog zO+Y{t?(j{tXZWxo8ZmNMuxJm}3a;gEzWKJ!9&@JclKwJjvbJyE9^MQSxX(QEG@DO+ zOK^+_p^{+jPKRbJ3zDW*znPQ;*pWC43dU)6qvCsfQnV z%*s9F;Dhw&qYoHPQ63=sjvP5m_uqGyDXlOi_woXKmoA+QEeUDVcJUl(ltQ0q&xcZpx2y%uS>tW+yLn4r#Q9jy+h9Bzu> z;{1v=$@=B2PuV^o-#Rk3m5^C^4z z8kHB9s?i=jRWGf+x?gyr8t>Uld7CqoyLzKpIH2T&RuITBbMY#b6%{L?X+t&MyN@Z; z!|4jY3DlI8gN#n+P>7{3F;po)4 zqcH?DyGM_1ws=4L>7^KIR8&jV&E+@eJ@z4YR9whPLR-<&xC zVKO?}r(wf}D8HaU7hiI@5pIb78KqA$ciyVgPd`;Z{P?rMB9Nk)L>PVLmDhCt1CJP^!vglo%g>p%6>TDs>}h%KE5s1LIpN)t{gprTIY(q1S9QP$C2!PgLgz5~-fu z^$cy}Uh%D!QI@Nj1shCQ#sp|={e5h=a_{)oYV1$c`V!1c0tqeY+M*r0DPy8m7H`v` zNnQ2Nv>|HfPt@T_J>wiRP0n9sxOJvUl}oAq7eeHQ?|xI`LH*SF@S$2iVUjYJtge&+!4(3J7O=-Z&r+8Q zPE?B#gOomJu`=f_Rr>V#7EC~xyub|RxdU`MO@$N=n)IZKSt5~KiF#%tc% z&6;(`(?*bcUp+>x4mm&zo_NzVi1>$uQdE>m3yZaQ+;}M_TB)5{E4fo!7468@?Ax9) zLNAV?iH)(~0%#F)SFhLH`<^#5mzetXY+Kd*aO*^5`&4sDn7 zN2}A>$Efk(e%d;9zWgzMwLWx+5}KrG^@kI+=*hRtyeF<{BlW-SVm0jF4Kt34f@^ul zjuQ$&b_K_cdqN+5^oi=@LmCsUtFOAktTCX|fuJ5yAsXw7hmI5QjNJzmL(E+-gI82s zth9O!gaYo-N1rrd4vUr7UVXtB)3gR@CT!t<+q-u!V}_r9;U&HI-iO9mLc{L6_b#Ia z&_R-;ulS;$d)`Gl`J~Z8@i=+%ZyI~a6}tSgi*?22m#9ta)~4XYzZFKDz%u8bKUV9_ zA2LQa-E_U}#$s;#(#x-!(lBtG%^(ZhbKdzEX~&K%Gc~^U+N&(EO|xcA?FbLr;m()E zoR?iJ1SV)V!GnlS3cW{QroG?hQI@Y2z|HryIg9`8QeDpkC<)ZFM0Pp5162b z5&&TZfz++}t~78OX&vAhLMY|($CzeUA7SU=haa;@vIN|_=)&_YNEf@)e@vO`imlZZ zJfL`>JQ8N9C|Izla{ciZ#CL{IVK=>H%NF|nyRS8C<{bTF?4?z33M@(t)_nTWy?b|k z{u#lJs?K?YKa@KtFqjjUU4E5WKe*jnl-(#SKK$?#!^5eko@m18tFOIjZKvJr7>|4A z2{RY>w%Ofd8TQWj_jJJp=h`mwxMyE*uk4C|$gU-Gnj>%SzyBfq_|q?jhs!Rz*p%u- z3C79+Sa#yr1-|5x%S|Z%_@nm>_Pq1{VH*)2eejMc6%c3{gY1}tQ~EaHn{RD(re9Az z`IuR;egFLr=JMpmCW?24>dYWUE&&BaHQw6rkL2jv+}~Y(ssVRgq8$q&!xC(9^W^E;^vj=$O|7RvPu^tau`_OcQf0-( z#-ms}g8T*LuX=BS?T+@n{bIE`Xn#fb=%j_?-qD&beo{HsMscww4C6{fxto5TYP>?z z{RXJg9@sr9ty-B&2BUsu)Z&{|uj&QW|?s^P#_ zQmT0mzoK>DOp>pxTn+c?t-d#36evGv=@6ls(4(reDD>)o;|4;(#DDIEm&^|l?Hr84 zFOz;X&3EHQjg3%2)V}%VTQg~b&|*db?7DU9%xnaK1VW4dfFm69=FT@_gn24;ELpNt z1%*YH2eT104loG)`t`BJ>$A_kwBH2lfdGB=)z`Y>ic5v|yh30LM7P5~1k+l~*AQx7 ze)SE#``(APwa=na8uT^cD@^|NcTJe^ZAdGN3Gay~9&fv+n9pwCk!d@fW6rt27BYOF z@TDy&Db}2M^GqN``%fQOP+_ppjDGpmH<~>8cVk$1hlvWf!FLIUh(#I#j204eoKHXd z(gZqiw|Vmxef{-BjU9WTI(6!x88c??@_@m-u~E}BJ@n9hW}=4=4m%_;wbN(J(gz=W zTuD2*D-|#9{zj5t-=TuqV-!`v_&uMn5xY30n2y~$s`S_r+nrqb?$=uL>Gy#zA04f=U;L<&oLsd%-V1wR1?*=(RGeXoTW1)t zg)xeRsH%sS+hQ%=$;CyzFI1z^XH9re{$-f`SdMXyu@fzk{KQGe4MT?CdtzEO$ep46BJ3)46AFddfYeMG{9H5(+2cz(Gbi~oxCXJhD)Toi> z(}z;*w%hIu^$%F`yY$XG@0sF~{^P^;+;cDL=%bD>#VRzH9aZu?{K(_F@BW93p1c0d zpFiJ~vu!J#^^)YTlx`mF3!7+bg&rU2*xvh9}mR=FOYg`UPEn`swE^E<<>{huW53 z6C8DePfWbQ^-C|mW=dz;K(HjthOfWw>Y9qE_8s_PJfMVT-J~vjC%Mj@JJ<4|lwrL8 zl|9kG&&({Ion#0c z)?6Lhw>R9r_SzdZR^emj&tGWnMOXbl_O1gwifV1YThe}kdTD*w%L;ZdB4fo%x-p5zy_Yf6J}@TJMEpB zbIy0ZcFPR`=T%}u2KK!3&c)@IUn-geX6Bf~1aY|Mp8MtbvF!~1MjCGNGtqe(X_#!X z5q$u=v-Zeyr$zv^Ehr%-HVjonTU%~IlUXFg%yr$5OO_%gHb!WE{$;s*Bh*f#mKDDV z^$dB;&CSK7mrfJ!!Bmy!#=g2QjWGQe8WtvJ4DX|GH{JIBq(dK?0xhW6AQHWWm0NL6 zb#I&&)g3AJXpsnm&Vl~m#LZ}KYG0E3j!aWjtK}v()n{q{$!GzwmhcAa1NQH$if#C~ zVl%?5cF~9$5^gv{OtnWL&KhRelQv`S;kzAS2|?G;BzdP6J9c5Os|3l`2yCq>z$(XH zv617hu0`wq(?WZrBLOIi9-B7vqd7%Upn~q$Wjm9_&auhJ5MXt(z?P zIMHzNzzN}+Yi^K%UOm%bWi)o3?*SKazx=XXCahqS1}9YF$D|f`!OG>c&2>}t)d@Rn zvRg@sD7#NJ*FRIDtw*fIj)}2@Fg&6iTHE6gUFSf7?W})d^{u8#NS3Qa7*#tg;t?;) zX?#nZ1VUl+s`%FD3jT{sFr5v!YTf7_nv9RzTvkVH*q#zkN?$`oUzjZlzCa3A3*EBk zEnS6zB`eY9&4Ly)~BEpLxSHhsSRc9GbUQG&ok>DPDPFA?U3<6od}n%^qFJ>IVf5L1}4uaa@@`~2v@BO%^!a7X_FXN@^i z#zyAh0+%VhRV!h3*$2)?ufP75m|IXwg^U-aK|d|~8SgLnNX}J1)O(VZMY~eNc@Qxo zZru1I6QF2STPfW<{?P8;0_s78jXuZn|(YUVY;{ z(wU&703h?bWyl-)uDJD<8!=(RMcBVT-=MGipPNCf@3KoLi&{BtH)U;8=gHZB9^*4H z`X?`>j4A5fXWRKmc%-8=J}a6uEm$zmTPMro*u^}2PnEs5BH(p;4$sNS6EC~!+f?_> z$LcD>`4t^qk_ir;EXZ^g%j`#{k7hJ9nPH-I@z0c~_0%IYMZDnl2~9_;ElT2zavbBm zz{!FvSFteLToaIq-R&$Escr~tvQbV|-{#E!L^0Z87frRAS|`qn>WgzD`$)B9R%s%{ zlwyqu+>~ZsrQZljKzD!m4Z2Mohqk93Ye*#^G*LmMRu-u-51(d>u5V?Afa~`v>G`a@dJ9G@9eAa%T523xTG?N%eQZ? zOc;(v*A=AZyPdO$S{au5`Q21Zi+++JEvtm1s1!DP-5kk2mm20y++gQI(i$Ero9Y!g z`^Em2PMIW8i!9qP9cWIyhdo2ePI8jwLuf3K*_t$Q0`9qIw(RsRTJ!^Q_veaw?f8q% zm&IFS`5U{(MKu{3+K-l3)I02;1dxjp#`;o&7AM0`KK)DrVbkb-=+GgejzW7V#_GE6 z`kNa_8~yu6!)EisfOWKK(?;TScI(zfoH5XwAs1`3VW1t8IdQON3gq!h4cv;JsM0Ga zcSXr4Qi`FxgtA`tkvo-~Sa{AvRT%T&%l31j!-X5w(~SODV6)q>fB$}5GVxO6=IqCy z!2|H(oM+K0Jslw-q0OF%Ra*lc*(N?4F7(th@TcP@LwT9u+$S|HRVGumQQ_oIZ+KY~ zWE$LR&V@tdJ(^R6?2w1ShI^AvkyvE(lDndMANIP6kz}pVdKLfxAOJ~3K~#&v@!|Af z7btN7G{N%{;(i1_x$MgnR0cV3KJ?JP9>7Hxj>EIhy(nt*=DhsPv4K)EZXi)>B+$3VI+{xSZk38KRe))G zd7$8cFhR6K3si1XW%}P|m?=6*QsW8hP_&f~_BHvQ^ z%2{PCVZP3BkP@Y(KQ1%Aow|zIH~!Jimv)~V^OjwYksJ`$z+fAu1y~5KhhMUC7c?~@p(_vGP zLDs+6KkYf!HcV^RtVK?4Zv8vYNC9p)sPSMPN{mNdH`vOvH<-f4I>^nCdGp>AheeYn zPQ?E{{@6=SjJfIl&woCEQ6o>3?{4X`pHNg-B$82TiUoeQ-Xfa(!SC?LAD0@Nc6HQ? z7cT*s$^3l7j?cdk^-WkTp+1{gW;%XP+=ybLqf7I=lo>WKQXCB6zBQQle#5zXupROA~h}1lU-egYB*Y@zzUnt|_?Q z*iln>$a5<P=+FiH-<{G+@tsE^^`s6&nSrdtG_ebrM>DJ89h2JDa=R2dP%W z0h5d$U$keRd% z+O}OAS?I`6BV}2|i!R-ulhG#AHF)p{$eA|3j<#O_ux`s`na4i-H1)UzVN6~@@l(W6S(Jk|Ctc zDJ3A>J*Azl;TGPQ)VT;{0CY0+T(HoFgA1;wpMK6e0kT}Sk$)7faA~^zpKzCo#K-q0@z={yorT z$~oA-cqKC5|5C!Ta6^Q_p$nF+hI{fku+dd{EyO*0FxvcOtI>JV*|3F&gHDNj>@B_T zpkX`Q)O;)9U`z}8gYA2B^Kqx0lc~GB3K8ka2#t#thXiC!Yh50MrzMG-d4F~1=9JHG zkPH!-QQ9BUMxSFE?L4oz@)~f{kLvxm-Fl;pZydMOcgXLwUAuN7U7{3`_@}5vo5yf&q_VG6ou+*+Q|B(7W$xj1CfWgW4r0pLmn-AG!h_f7 z;EMAv8GyO--o@Q_&BWBpCX16AmZ50*Tm3Pg`fa9>N}BN>%jEl2SzV3vR_UMzT}tHG zAL2l7^iqeZEY?G;Y0In<&&l+srKZX~Ug!Fuefw7O&Qm4)vdgB6?m2Mb0j)-oHqR`6crVV4KNv0GNcES*f*MA@qOg`eE0wTP5PnU7q(rk z+5DLUz6XXOCcatis)(}J^OdJFW zlW30@ueyvQZcdzsN$)m=d@*KdwXRTG4#rx8wER=apO!u}Xw%xko`7su39i`xKDO25 zqq5eCzo(4GfbfRSu~-(%>10okvZ=X672i(QMA0gvRF&%z&i|z2b{E^ATEQdF)H;as z80lFj!_%#-$;LklzZEGh+eb~VaBB#-2BMbNp(IKwD{}I&d)`9yx^5EaDW7wt^vUT$ zyKyIrNBb==&PVZv?V>TodA~ZZP<&IQju-|T1vGS=IqnqDW-|~iz3Zor7>W>6{N@Jj zt{Z0?T=%5>r0^}asWp=?^^W!2&O9flgGn5mXp6$Zi#wvMg9`zw3SV)>G|Zd(297!AXqlWj zxYFw`jr<>f>|t3D&}MbhrY+($L+bY~YU^9W#mh0r9EIwtDw))|AmIXwJJxiY&IcbJ zX7r8yVoW+Rfn7Rx#@MlE)fYrHKAR1DviHa$gq|6>I3ga5%|*vfRLiBa3F2W4&b87% z?ozUUJhFeB(7E7b|L6gbVJUX**eOiuF-IRIF+JH|wufpxmtStEYOYL%yj%s zOmcGfOH5O$Tv5_PuYm`fIB?SI8^@2H;VI$_h<1~sBfI0mn0{~uko3@oBEcGtcx$-0 zD(4_f2`9bW@;c+1ssWlzoIx8_PiwI@przf0Quj%;M+)=TJ0uNLVh0D5Mp9Lis)-Ew zGAgo*glf4wcBt6LazfbSEP)HgcfxqAY(tziLR4pn6`u;v>0y}t;Z(;qZ>u=~XRQl; z!c%cxbRR@o!o-erM%>Z(u=N!DH}!0ZyGGm&B@yq;c?;nvDMwgBoY$^X-j>>0qzvna zP7}u z%u}*63!$;m;yo}VGF-yIM7B>y#@JKprtcOMYHIWgb6ys&o3rn_N5VnSCY&2q9OE8; z{3(pTcoP10|KCLls=i@n=l4#p===`p`J7&H&G$`JH2IU`66>Vh3++NV{*bYwV<64} zKD*mZmR3(d4GTI|VH!L39IV9i1GJ$ss1}Ux+*APh-@ZfUx3kYaQ^s_T^|XzndC7wh+zWczWn$b+N_abV>>yrz*)Pr^lyK97 z>>IDYBpU{70~g?|hnSMFB^@_M8Sk0nHq)lfn+0z#Q^J_FJ!E{P+tbZ&`V{F#5D5 zrP&bkvOM~i7qj5?w?t&1O*X#;l^A}fPw!rM^pS@oJkleN{9B?dsOP5W zc;tA-uru5UGQt6-dY`YEuDQQCX2`k%wMe!_VSH?VBwHgfIIIn>ia)wRF`WC=nu7DP zrOp|Yey4@uT=oEzO6XGHfDMsvTr93}2*sgqF%j5bGz*L}7v1Xfv7@H*SW`JBw?PA45j z)r#|?qr%&ZZEA)s4iBZAiH}=difiJJ3fi7PZ47pe=4#ms7o&LVPJ}W9i?RHaF~J@Y zfmS1rLYIkWBP=djJnYiTE*Z1bV+Mha3M=>INK8&!WH{1B9wloKZU&Q1Xj|3OR_w{C zZw47Xr&E}{@RUR`Gh%2;Syz~1kTL_;8Fa>|9ONaUseH1?ZP(W-(XROJ>Rp=T$wJ!6EBbFNK4cA$9iWth9>q{Ci9%7KM{{)qz^ zlX0}jL_l}pj5Yb#qYsJKINGy}7;%CO9NYm{$u}=Vl0)WIC3Btpz2JinWmk_X!Svim zJ5U=4g?EGMoWv%__OHb$IrfCnVeo z}+UU2?-NQjRYMwJVtcI}KEE7d15&O3KzV*dLJ#3q9t zgui33^6+r+s7DC`B^(@_IiM2S_vSAE7c}&KOZ?cMZe6=z`0!!ayKf&dGmRbR%-z{| z>#eyW38CH8xns{3n-a!;a0e z_19e^r1WaY#2BqyY%pHj6Hh!{XMbgs#z~X5Rh(Ry*#EX|Tl-8d2Bq;o`}@HMA4!NG zdK+fw1eT$2GpP6uSQ@B8aPa0o#r*MYT<*w5S#7oK*4>>n3OCgrCrns{y9RDb8oZ+# z5NfsIiR7_p9}*9Gk4vzHqsHSD2KKn{4q{(1uWTJ2F8)r!r97QF7VT`lv}Z*1kQk?Q zT0}=g|0(_+na(2dlsh1-HExJI4wGUA$<8VVbr&60sWwQj09&m^b|D$k=GoM9Wzdhb z(!#?E#u)pkVx#Ox($)Lfkv(x+;s{jLI;DNYClaA}Hf@}&5Xx&En7;o#-pl$ZsWtS)jHg2t+mh|Ok^RYc=rU!j_Z|a5 zmu%jNJqv%3I9WsgeJk>RT8EnQ3dDELK+=#tsM=qEJ)eCqM*F1QyKpfw#*V_!|J){C znF~Zm~Y1`3&hTZyR8g46Wy_mI00b1 z)E?JP5GIL(`JNBI5yuDo201~*bZjSW;5vd~U+m$bh;H8+eQup9)iS({I3}vD78_Pd zI(^^Qy4LX{t{cDD&g@UWL#q>qq3xKH5ZyUL>`vo*c9KBg!sMFX3)R1-j>LkD)0Qn; zWo%+QsQnQY9W9%69Jd%6fk}P;{LRH4Z8NDILPqZ6|9$F>rD(3xf2>gVc%6y$Q4N(U za@4e7C<}=txoV9_?KoC3DSDNsxksvIu3EJU9G@AYiwxS5AD4-JJvR(#qd4cqS7gD- zF_unMl9Cg}Q42S?xDiL`8smpj>a=_X!%z7-HKIeeH{N(zB!;xh=O!e_CC1q1LYcVH zc5Thtbr>{g0A6_EX>3@(QNo^)G4$^rnGJ^3VCXBV`5t%dF{0kf_EOSHyFJcNe0F4z z7}kXwlw?$?T3lRGB9d1+Yoh8iCADM@=%tl7&=iE8)|W2*S;oqvjv6Xzl;3>2Nak14 zvJDDz^=|T<{a^?Y#?PEGzc$fUR6e-EcGB=RPQr|skb8~XB zalZM%pyqeWwZ!YMzl4=5R>=kjH?x@-iL_0 zt7~j8H%p#CJr)cFwYC?@F)V z58QvRFqrf&!tY?n;DNG!qX%m`QZtuFts>ghDvgMglq4i3#>)nrYJ)oRJz?9w{$>%* zIr}Wp{Ce%RH@xqUqBGVF_3H=kb>Xz@ud|<dY1etGV9$1KPDz{@$SQ|Wey%FD|gE#;x zT)R~yjBG2*VF)_L`s{eoXbigl23cdsT4U1=>{;-o*rjrUG0p^ty2}(oY&DaZVHZ8&1zS{xv5Z_6#W{goa01mjRAE zNUQ8h@g8?Vxlpm&t$6&uPmAjAm@#MK;_(-W$F(P)dPW9l4lo{%TV4Y0&@(T03i&|j znJq7`Kn7jDB%H7~p>kJ@gEkqwYp%Tk*Ihe924KcE<-o>?nZcuJ6t6r8GS948cjNl& zX5hpVN60QXCkF1|(sLpw0G7$!ca=W;@MBavs=*y}-pkvchqvCDhu2?!Th7@g?!4c2 z`%JN)8hO%*(rzvs-h1zTQB~t$PdX+}V3b&}pA0lj6*snv4jx{Z^P+f>R0A$)xzN1k znj0l{Dy5-Z9B|i|L9ZElfD;ettkzo4Z96CJ@fTkxvHw^f>t-04haY}ayxno2<_k)U z8AFi$m%+?pY#hA)`kNAS@c8480XJ z*WM7@VcPd_5k>q0CAR;|ufD;QOMA}G)P3rlohzk zCA}af42co+@4{-g&9gOSKrIZJaEvk~iN?8(c#TSK6yU zqx8j7gV_fb;wsls7!lD48TNQ#eA$-w%GTkX@-;rpu_}a+=`DjtOWgzK-6&tbR)deWsyweCY?eSpKlW)RN zRD$$TN1^q}$Czk0V8^Q;pmfttpCHooY?`-ZCDuLq3fi820uuXo7jJov+yd-;<0EfB zl8@?#q=CIeZI&0=4q=!%!F;?3bpmK#2pav_iBx$V`eVQFbme-~C+5 zc2`wPd@+&I)=i`$@pijVRaoM6LO^fBh3mFq#mq<1W$HM@b#0HRwy7vuvqfxLdd!&M zjYsQkbTfbO8&ZjFrq}SK#BashH{X{)-yRpT;}|xpb0>WI+2_J+`P1>+&d<-6Z(dDo zGM0(CM6q1wc*$>sOfAD+-F^2g9DUR}@+o1PG2?pNaQ(F+ zMKq*afl4woipzerj1M} zRdx4dXXC!VJtz_zIto&WV;9G?+issFAuPy5aO@@1{@imfiiwHfNNtR;P%sW7=MaW? zIqkHQWo#y1Z@)7aPd@paw3Rq;u9$t-y~3bUTZfygOsty>)ss&?BV#n{V)7jYSf)8=sbu(lPG#Bys<4;PM9x`wAbj&%Q-i^C=?}}kVhss)j z;~dq?Z@Xg_?)kr2=-02GJZmy^)C8Du^_5~j&2stP@_F+aaMPNJ&z}7w(?(pG7~7m4 z`3>6RrS{R@<+aYWT|Zh$j!?qwS&)#bBbq9mUTDeIwh z@8+9t#|<}LD{8Zhi_3PeTektvJo`L;`sruycfDxQcM>va`n1bMot4fNxxxI&Ckt`& z%{Ta{;&UUJ^-?md-U&XZAAVRY-v6m(r5u9q`REk8=SWg(*3f|h9Nz3}y)#PG!!9rXgf2{bUpo%O#1n+T`;KJDcC~_O^W!Xmm zs!;5y#+xN8K}{`6Q(YDh3Y`^rwQME6s@N`)TB;s%Jx2zX>mJ5=XQ((??{F<75?%u# zZeDM$$-~Y0|HGB>!_hY+9Ubh6!r=Z?orRZ5f58t`nNqH|kIneOVZ~KmX~Y+;^Tf_< zR72hW{cd^yW2{BBCvKZ>k#;{=?#P;Zf zj4>nOs;HDuaw$jkmpZv=O*1AQnMfPcB}3L7>;u1lZpMeFC!uxQRN46EW*I}=5DSK- zW0*Vf{X#!~GIv6xu{9Ed)gg3T!*DI)sdAwG1*ajt7cr{Ap8tJIRRMIKaAq^m2P{2% z4QL+g+N|P!eNG$%Pds2JSqQdE(9*gQTnLQgGdWsy%E2cT1`6R8WwQ z^71OsEk6f9+66K8DJ7$G=Ddst9{i_FB=jzqpO-Ha9qTg>mRuaM%#`FLX*WGIvM%nn z*3>veHBPmISnw}CE)HqwX>d5Ih3PIYuav&}&-d&H`_2AEM@7rP&z)M9Z=Mi|4{5oG z;KWCq_U+pzix+<^$n>%v14q>|D+I94N7m#DsMaA2pc= zqGcIWuV&0QPI%L%&yYz`Wn^{qGb?j4(?1m(xY9XjVds9QpH!5&1*(2wW0>h*r(MV z7xF#jDD^mG(qO$UO`IesA$9ZFn;JqU)J`waR*TO)UT179TTB!pQxai|j)0@E7}a@2 zq7qAHO{JF5syx)uX5212L%4*88H<5B+X_V^Avwget*OCvww;_H%!!kcHI!{K5H;W9 zHMUXZAtP>~ogY1aRGWPBjhAH+dHJ*}8+f!-c~}P9&hOZq zI3{uY;n>alOe~k<4&zbN@eUWMw58;@%=V}hc*lC_CxFhHI47`vMaz6MXWou0ueco7-*AhB$D!IR zpEyIyP?c8EN(1Wp$F{M5lsuCG;iepI9;yD!_L>v>7D?5z)~&?(9LwdRoc&c}o1z!m z$Vicbao%IxQR2sWhV&{a9O!_KJ`S~Oa4-M>AOJ~3K~$J8JA0oI3${*OQPHYr#C|iM zN_<|#n{zdp2!*lX`L|x`Wv1sm)y&OymCbu(8>!w*$91fWUX4#2ah${%XE>pMJ@l}b z@t1eVYDG$Fsy8lfK|!IYf3v-6USi>V&U{a3Kgs8!{3I9~<%T-5Y6Sc1kGZXHct&Vnop{zqVu=&u|HJD-ngThTvZ+7lfg8}~lw+~w=uf?rP1V68+si+er|8Z1&A(OIJSy5??O>Vg8x!5aQ(EOuYqYE3 zvtyn>_tZ6Wo78XrveorqWts1rf3w|GOXlQ92?ZxERkrb_@&AVGlQO~gzaz%@d`B&i z$wf^BtkX=Z@|)Y@`@5dHCA2JqE#^eRe+J8GI1dQc2G&%chwZMf+uWw6+7T!h?L_4{ z3Ld0TQ<1skX8u+Kr2p;-vo~>%gFGh`GJRZx$j(ThYUyC5xwI-j^VGFL-W_xMRJ#(a}{jwz-2<{Tx-8Hxq+=Dv=4ess) zcXxMpcXxLS9^Bnw`aR#Ad+&TF^UR<7*}Hpp|E#K3RjoB<30={`lQ5-~c;T5j0%g>B zdc*yFBeDG^-v}l!fT<_t2YR(-|(lJ zy2`B*Uc?Nvi878}7L+qAHPf4an$zgllJm@(P@U-V9AjJ6<1mcn%)<-D{m0r= zc+S2=juS;P*c@iJgMATAaBw+sI+dm*O^Rb^taOBDsf;b{XuUTv(R%D`YyE5$+cyI{3&tVqb_R zgece^2)`doD>NSxb6JfA2QXCoyZOI=3%i{|KuFou#g8)<>_PvLZOEdbq%iv#}B4M9p2+ z&mWi|bKxE6OuRLQ`)dYp^8;uqX;{8{?wjAa{%RneX2D8VS&wmg+|D^~cwAQFl=;0Y zYgotjo%4}BNyU+H+F!4=$cyb{S&jb{7E08-b#i^C1J+x><6=^r-xhOL3=SCw#Xm5( zb!su`K#I`%ittqTy~<$9XA{j{eSdSpbus_v+xtbecN(@i zP?u>YbTfK)mh{is+ONgY45Q+5gj0!ZwdRXW+6;*MM~)*Po!SZ=7&5CELWdHYxP~h(_tKL)cM?`*wToB(cB;kHnFYv z09a{t|IqkIm%75A?aEr5VnwlD*5i$#!TxOfqR1aSysLt&jm4ZO&*d-K$kR}-_fYe# zygP&;Yzz*u!kWpcvoP@%tG=~(>Vx^EIZ^*!a6``&#`&nFVR3eDBi&O^I*^ByxgiyRDk62g-8I6wN<}}i`iMnoUVGM zVj`8rt4s8q)r?qC(iE>i(rxbQ!E@g%a$)(Sv-xC|1r*zt1QDc^)?Pd38{C41*#JU= zdaOZ=1A%KYE)(yLRmIBVTkuixdGJ4XA0ifLXr1oHFZx&xe7iHVuB85>iJ1Mz?6Nvgv)psngatDNsaic*0KC^fUtxnp_yD*0XXO6%(RUDO8qU<< z@X-DL|IPpR!^<=xq~8N4)+&1hn$@*fdNlQ17H@Ug@Tit4X68pvO;4H5CsNa0|9NAO z2!S!AM=7R!Ls6_Bo|jv`#igaap=f1ZXcQ=hf098t^G!~5#_$)c#U|JqP3Is0UN006 zHml#XAiqD~9Wo~6ZQMYV35ROvjxOMI9 zPjc3;?$CJg!A3Z$3ZHMTB#vdWf`*O4>bdZselYy*&u&C%3&|o>V z@U?QNG@)!JmT)F$79vCSFE4sRY}3z}Z&*ngVzJa1(QglXFD@h`bagY;wFSU@qD7N< zwt%!;_nsXD2}TJ;LFuaj9^iHhc`1IAEUYvbLP+MY{nZbz9B`%MU{TNLew_MrSVAL} zVA(medCYY}nm3WxYQ^_3MR8lm_OhvZK+Dg@hHh(nwcP0mspD~k=JEcdI?O-`RqR!M zeU$e<7tFs0>X8+RqZ~_N02c+SG*ic6+clZ}f-b+P2-?7;(;6ad>0s(Z0JHP!6fQh- zNxQKu&(9P?wvyPiXrv1xfsx1At0+n83lWUWD16@57si4He7_LodY)M1@{$rkVHXY* zR21R$q$Tw%$@qOy5fLKN{>bWT#{7Z;32q5gR8+cIHAyD*L`e%VnF!eJZ9Q=b*+i!} zDz>CDlZ6@Mued-n0&cHAa}_`ba(MWc$G_Ahwo&6|B^DAbtjNy(gfB-|&PLOF{Hs>M zDDh!;clW!J(rKUJ)iXe+`CXWW#Nn~TCKTZGH)U=k&U?*&!W z{`yOteIizv*(xA_Y`N8lW@mR-B-Nx-E@bEFAS=xM-I~qq;W*^(WXWK?^{)9a_r~_^ zZpp_;aY31>5~#*jYj+7@47Ql7&Jp@0Nw$uUXw`OS{M%vIQQSHqlE7Ol5MaU9|1*qw zbx4BfTF{o0AJ-HGVEpp{kS z4`d9Cg8_eOa%DRT9lILFbVQyddipy!LA_eds#$^LHN&(%NW*opD>1g(iv`4k^JXsdd-#XcG&0)@5l_}u2}qUw{=^X!}PVKr5fiV zA|f!Khf%p;C1qsLST_J>m0h6w9)nwERp0C8jF?vAHiI$p9g%{T77U=8AHdM{A}ehs z5sU0ztXT6L9{!=CqN2BYTQ(5LLP`n-4Gq1cWcn5up+G;Cz*)9nCZwW*4g(7tlcY;% z*2nF1{!Lw-)6VW*N>}L2$<$s{G%#MILBBCAR`-4{%^H3CxU49Ql!c2+WAq1ipWzv0oKfjQ0a;jTMlH}!L#}C6Qk&%BMxv#P0 zDXO5Yx=OE1KCED8BiFc&!e&Lu@_f$ueE{B=602V{7jSq;S)*#S;r)8Ec{p2uIvB}| zbCAW3u;PBd({gYCHbDJj_g3U@b876h4q!$DM_wF>6DksHUBd~Y2W$pgbK@3>HU#_c4IE5ABl`p2%d z|42buIf1eG^aaqx2#Mma>?u_)ySg5m+Rcv>-P%*tK_y=bkE0eMVEqr51tg-oDxzC& zELvgKWwnID0I0UQJZswA)kS=R90C+&jmMion>O4i0^#ue0ni({&Uhm*%j+3>W#y&) zN@8SOfqA9FUG>Ws-0t_c7ri>Haq1MNpgtn+k`k)m@bE8%vB!12U`^IbhhMXWW5d^v zin2nlFtk6lWjw(-#Y6@H<*$U}lo<%?wg(n9AGB4)-Qi_b943MDpfsanH2Kuj(njvTr5(xi0z`=DlS=$KP#L8+wY z@}3>c+*qT-(X9IE4;;GYn6&T^K*lE`HdZ0sV^kcDfKRC%KCb0-p^iew(+C0IV~g)7 zuZ6Buyx_TP@=pFg-50=z#s^jziUM=w6FB(e^;p#a79v*Ha4=MVzi?Q6RQTq3Iqm6k zgA}R1F(Vc9KWZ0$fadjgIZRm{1O1kP0W!dw;2lqQE`Z{jAHfZf2PJo3D)q3HKwVPR2XRXom} zUp%vgbuyGbI;7&^8871BfO`)5>ztt>b68+0=nDi&OW>AZOEEOR+*}XPRP>aqcf`sC zU}fM&U^}9ShI8nA%bSL!OHsFnfrszGvF;?Hu0SQ%BCX-0vV67J#^{~b=6UbsvI}z= zGkQ$U-O*?GYFejG_6m~$w(cmHvudvgvT6(MWZZO}sm&f!`gM@71q_uTfj zD+O`#^72GWY6Qw5M|w;8H86AOX>9}pA_LWnC1?ldn^Cc|%+@O(o;#-T2}!%JK$kL5 z8M$riUhTZe$1^<5YTdP#oz-7lU;iZl5@x2s9OJj^P{mG;^GK9bOh!i&h?8;nt@U3| zlwv3~w|ngD*KJ%gb#E6hx7Y$|+K!!6vWQZ>dXR#j>jzoh*cn_-{S8a&qg(&Jm0YM~^5b+QITt+fN5E86ajvA_ zu=p||TZin9I6|DVq!k($sF@^B#(uOQv`m@5-#uo80e;q6qji#fB3^mac;9>U zlUC#DPd#yw1y^U4&!(j;!XHI{4NpY=2~X;&w1%tYxmujo-H4ROjSQZKr>~+U_MAD) zJo0ne@oB-^hED3CStK3dT#`2OYy`Rc;@l1Lgo zEP;}#aT+cvD8$Z`D$|^CU*W4BL7Dyi7mFpKt^PV8(Me~`;^~7(bsQ6 zr9bCl3iG!GGmQzFN@NL_@#$flx*f#oMCxyLSb$_&8tmBbC)-y)^11)~!+%Ab-BrFm z#^T=aUmUUiFSpPKi*yN$j||4#ty|nRMM+PbW>Zfl|H}*f6NQT+bL3(vK7L6ij$aRn*uN9gkrl5$BM1NzTgwYjmf5e*ssFi1{|Vyj zaecdSHO9uC=Ju-9$`8NVP@d-Gs5M<<%yX3XaOC>NP9tE3Mn``y*KWXNMG*VGD)4mo z*N`9^*@P2Rj8y2@scnWlkA%zNC~*8tGrEofl}&Riy6oFpX1#Wed0K8m1Fl4d(BF=H z6EF?`ZseipSx$KqHOyx?>|d#7kZk1|A*-w1jd}U-Bxl_@K;o{(*3o7aJ*PC}|1zKw zV38bw@kBaY4~HT1Dit+GK(7kHaL@v_+K%b;J@V?r$zt}SfX??-@|bzB|I4fs|0{rx zoj!a7yFF&d1kST+qqo-V$Z&BSoGhQrH^|&e0sKZQwY-!W^bW36wZFX%E;gvx7op=4 zaJPE`|Ken|a@{M~QW~0HTok1h;BIi3;l+oT<*2Kp+4VsXHIo&8+Y~IIzDOMUm$T9thUP^xz!EaBV`am}VHwLhzUo~!*7HRN~L?1Ia?V<~n{^M}^z7N*P*#NWgNV9v(B7W6!&%yG=G> zb^ly8ua70p5^o_@c=e3P zrcGO4(F{5lMcS0I#{%6l!;>1z1pUCNrQxj@@$y;tKlcg8Eb>1v5FhTUiw3PqJQ@bu zQ@Q@mZa`sqbF;*1AebR*TA9)s%4#6%5zXH=>sFOdw_Zi<7$iU!PpKeLI?k3L37aOj zR$ac&oHxGm|G01}TBCf?xXzm{=Z%KPV_ocT#^zFtc)DKgD#{|GQu9Bb{~t>bsRqU( z3i~7C`8<*PL zJ6z@5^Q52+R_r`hQPV5mPTdGiP?&-r?y#f8_CJ>mfVx*d&P-6AJP>Zb_PFNrsUxHG zaxB1iGy+Mj0{if_GvA@zL^qBo@YJ#6lcoR0ZZBU5Z4Q6WUd&CBn{Si4PjVVCUgsk} z-quZB0em*>qj1y^vuAANKUIFztstYLuV&NF=95wwY-NKCPi}+(B6xkc#(`mefNmBX zAa^&q1rrRL{p)jpTAP!0H@JwOB&gO8oDr}W3g#AHbgFj;u~AN2!okxzEawG&zN{Y) zUnaI4EWGc@lPgTE zAclsim7M#k#WRqTZSLV(+Qx3UUvdRq*U%|5$&r>Zw%aC3dw=vExU+itY>7VQUDK#~ zP7ky^;+`baLQ0n!;5GtE!|6j&f9p1<9Cgg?AGZ z*-l9JR8y6=9hNRJ3tFG$>2THG`*$tC#rghw^NOE_%Zu50)`D5j<#wMTJ`w(D>D*rb z^&ZW(4Tr~|dt?A0jQLL~Isg=odCaFr$fXPcu2rWe#Ln(cbOQy>TH}R@PeY6L|L{h= z5W#>Z?08fM2L~3b)+?@h%QXl*E{ARaU;If+{D#g3mT;@5r-#XUOnQ5?KGp`M)}=?X zKlRZa6tlPEGrQ=1kr5FmhaUix+XVoyGzm+6rmbTO&*5?jNv7MeZI1HzT&)rRc5R93 zsJ#W%=aB)SG`5O=pgTfl;%|xifS29U@^bY@aVj@AmzdE0-o2fr%Ly+YF8XT!>(x&V zw0A(R6fo%W09Y#2hxa}||3yhzIj_Ec{^$0+dDBf3eN?!dnm$jf3_n54nI;JfF>Y7+ zZ%Wu(ztS|=w_zxM;p;c({&7!liZ53&{n|H-FP8Flt&@Dv?q9!pSMP*Dmuf5blLNnYEEc0?# z8k)ktGbQ8o_Ra7zqY$CfG^#4=H}&~SHsKJFYdy~ETe3aTIJ5}t(=FhKV!M3TYC;yn zX3qSo(Ih%mZ1P=n93I_jt|Pq;1BaUWGjq!Ms)hp`;*cd4R&{`X_qMIUT_hfeY1*7n zqo4GRa)ky72@meaaz@A~*O7Vkt6`~T+H>3wL_zCs#b{^=953lNF&PDGFFU0=#M$uqqN^kepYLzC<2S^Qk$Ib$I zgU#qtM!G)U_|jbmO^yUbj0#Rsit-Ef&woF7kUNRVzz^y=_%h~gdelJyI&bRV9e9fHeqt1#l=LAn&0lZ) zJ>aw%Kt-qZgf7q9ZfY1PFxbpHOuu3%bhzDj(^R$lw6}YxdjRUf!=MolT+ZkIO&cC) z|Df&XtuK7S!u|vre(&AC(ZkRxYwd8=TIA6Sz-ibnMK})8SXMwbUPARdUVupj%dp`SuNCIFtUDP_Y6ojHM~JkK zMO->nFuu;DK!t>`kS522a%<0urL7|%n&~yHR3BX})!e)>{6NfpLMl&ry+1|PJM>uL zsK@aH{kEgujXBsLOA*>+s6SSBvDF<4&zBtIE5mJtl-p)V_>yNGV9S$y!S_9FxDU;8 zIWlzIBK~|eEHxL!PYPD}6;g-fE4Eq9R-hABa&%@OlG;`=IB_|;1!YzDCbP4Cg@mMp z<7$ZI>drBnrOi!a#j=9D?~~_?fvY-n+pPGXd<_(Z%~(rCCp!Tw-y;gN%V>TNy99MSVhmgM&9^ekU) zUhW4qeZWl=L;s0=Bx+p;Z zA)y(_du{`yf-bW@ctUGyuYJZT$&%6^Uv7^gzKUi=(rGs7-JiM}LZ*)A*U3s2;eQ&7 z2#Xl#mm2g#83S}L&=ACA1R8Yqw|n)cGA%sr?udo`gT{Vwk@}E|Buw2`BaqX>jl-%n zQqY*Q4`#6Im<$U~Wqq)nvbC{CQ4f7AtF`1Sqi6-Bm1^!O9=z|x>dap@w-E??CK@r; zz$s^Pu|GsDxnyy_l8E9)Nik&j7f2=PIWOX?9iMuuL!e^(IOR{7f<~q9C5hr8UlM+s zFcva21nceX1C<KHqhOy>Ka1psYIsMW6mu!7DI06^ z^6izG|4EcqU`QmH9r(1gz^k0pj#$_pKOb+o89`9APBzttj~cM6`-oGFwG~&6-b_tX z<9%hf+$*%_WvBrY3vn;}bne;Pu70M%hZ%n{fi^f#;jP&0%5&&&rGCh43pe`pf#_y^ zN?uVRvY)79+N}TkZ3ZVE|K=s4(%wE!ICYmn6XX#EoM2m>Z2$X3QlGrqIEHFnbR=P~(aeUjgi*fG7e)_fAYh&tA#-qd*^vL$Tn z_ovOSf1Dtj@`{wMuNNⅅ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 F@PB>O9C-i$ literal 0 HcmV?d00001 diff --git a/docs/usage.md b/docs/usage.md new file mode 100644 index 0000000..28adc3c --- /dev/null +++ b/docs/usage.md @@ -0,0 +1,623 @@ +# coobjc usage + +This document instroduce how to use coobjc. + +![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2019/png/2121/1551055808980-bd786387-b24e-4bd4-a9be-c311d3cb54d3.png#align=left&display=inline&height=560&linkTarget=_blank&name=image.png&originHeight=544&originWidth=725&size=33366&status=done&width=746)
(reference:[https://dkandalov.github.io/async-await](https://dkandalov.github.io/async-await)) + +#### Simple Launch + +You can start a coroutine anywhere. + +```objc +// Create a coroutine with block, and just resume it. +co_launch(^{ + // do something. The coroutine just asynchronous run in the current `dispath_queue` +}); +``` + +You can create a coroutine, and run it in a specific queue. + +```objc +co_launch_onqueue(q, ^{ + // ... +}); +``` + +#### Await + +Define a suspendable func with Promises or Channel, then `await` in a coroutine. + +```objc +// make a async operation +- (COPromise *)co_fetchSomethingAsynchronous { + + return [COPromise promise:^(COPromiseResolve _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async(_someQueue, ^{ + id ret = nil; + NSError *error = nil; + // fetch result operations + ... + + if (error) { + reject(error); + } else { + resolve(ret); + } + }); + }]; +} + +// calling in a coroutine. +co_launch(^{ + + id ret = await([self co_fetchSomethingAsynchronous]); + + NSError *error = co_getError(); + if (error) { + // error + } else { + // ret + } +}); +``` + +Define a suspendable func with Channel, then `await` in a coroutine. + +```objc +- (COChan *)co_fetchSomething { + + COChan *chan = [COChan chan]; + dispatch_async(_someQueue, ^{ + // fetch result operations + ... + [chan send_nonblock:result]; + }); + return chan; +} + +// calling in a coroutine. +co_launch(^{ + + id ret = await([self co_fetchSomething]); +}); + +``` + +#### Cancellation + +Cancellation is cooperative. + +You should deal with it after cancel. Since ObjC was not suggest to use Exceptions, cause leak actually, +we can't use Exceptions to cancel a job. So you need code to deal with the cancellation. + +Coroutines that have already started can be canceled using cancel +:

+```objc +CCOCoroutine *co = co_launch(^{ + val++; + co_delay(1.0); + if(co_isCancelled()){ + //Do some cleaning operations + return; + } + val++; +}); + +[co cancel]; +``` + +After canceling, the code inside the coroutine will not continue to execute, and the memory of the coroutine will be released. + +#### Error handling + +In the coroutine, all our methods are directly returning the value, and no error is returned. Our error in the execution process is obtained by co_getError() + +```objc +// make a async operation +- (COPromise *)co_fetchSomethingAsynchronous { + + COPromise *promise = [COPromise promise:^(COPromiseResolve _Nonnull resolve, COPromiseReject _Nonnull reject) { + dispatch_async(_someQueue, ^{ + id ret = nil; + NSError *error = nil; + // fetch result operations + ... + + if (error) { + reject(error); + } else { + resolve(ret); + } + }); + }]; + + promise.onCancel = ^(COPromise *pro) { + + // Do the real cancel job here. + }; + + return promise; +} + +// calling in a coroutine. +co_launch(^{ + + id ret = await([self co_fetchSomethingAsynchronous]); + + // we provide the `isActive` just like kotlin's coroutine. is false, means cancelled. + if (co_isCancelled()) { + return; + } + + NSError *error = co_getError(); + if (error) { + // error + } else { + // ret + } +}); + +``` + +#### Sleep in coroutine + +In the ios thread, if you want to delay a few seconds, we can write as follows: + +``` +dispatch_async(async_queue, ^{ + [NSThread sleepWithTimeInterval:5.0]; +}); +``` + +Through NSThread sleep will cause the thread to be suspended, the entire thread can not perform other operations
In the coroutine, we provide the corresponding co_delay method, which can suspend the current coroutine, but the thread will not pause, other codes can still execute normally.: + +``` +co_launch(^{ + ... + co_delay(6.0); + ... +}); +``` +co_delay can only be called in a coroutine, and calling in a non-coroutine will throw an exception. + +#### Use Case +The most important usage scenario for coroutines is asynchronous computing (processing in async/await in languages ​​such as C#). Let's first look at a scenario of asynchronous I/O through traditional callback:

+``` +//Asynchronous loading of data from the network +[NSURLSession sharedSession].configuration.requestCachePolicy = NSURLRequestReloadIgnoringCacheData; + NSURLSessionDownloadTask *task = [[NSURLSession sharedSession] downloadTaskWithURL:url completionHandler: + ^(NSURL *location, NSURLResponse *response, NSError *error) { + if (error) { + return; + } + + //Parsing data in child threads and generating images + dispatch_async(dispatch_get_global_queue(0, 0), ^{ + NSData *data = [[NSData alloc] initWithContentsOfURL:location]; + UIImage *image = [[UIImage alloc] initWithData:data]; + dispatch_async(dispatch_get_main_queue(), ^{ + //Dispatch to the main thread to display the image + imageView.image = image; + }); + }); + + }]; +``` + +The above is a common asynchronous call method in iOS development. We often need to nest callbacks in callbacks. The indentation and logic of the code become more and more complicated. The readability and maintainability of the code will follow the nesting level of the callback. Growth becomes worse and worse, entering the so-called "callback hell" (the nested hell)
The same asynchronous calculation, using the coroutine can be expressed directly (requires a library to provide I to meet the needs of the coroutine) /O interface): + +``` +co_launch(^{ + NSData *data = await(downloadDataFromUrl(url)); + UIImage *image = await(imageFromData(data)); + imageView.image = image; +}); +``` + +# Generator + +![屏幕快照 2019-02-25 上午9.06.24.png](images/generator_execute.png) + +Another classic use case for coroutines is lazy computing sequences (processed by yield in languages ​​such as C# and Python). This lazy calculation sequence can be generated by sequential execution of the code, only when needed:

+``` +COSequence *fibonacci = co_sequence(^{ + yield(@(1)); + int cur = 1; + int next = 1; + while(1){ + yield(@(next)); + int tmp = cur + next; + cur = next; + next = tmp; + } + }); +``` + +This code creates a lazy loaded Fibonacci sequence, we can get the value of the sequence, by take or next:

+``` +for(id val in fibonacci){ + NSLog(@"%@", val); +} + +id val = [fibonacci next]; +NSArray* list = [fibonacci take:5] +``` + + +#### The difference between the traditional container class and the generator + +![屏幕快照 2019-02-25 上午9.08.55.png](images/generator_diff.png) + +#### create generator + +We use co_sequence to create the generator + +``` +COCoroutine *co1 = co_sequence(^{ + int index = 0; + while(co_isActive()){ + yield_val(@(index)); + index++; + } + }); +``` + +In other coroutines, we can call the next method to get the data in the generator. + +``` +co_launch(^{ + for(int i = 0; i < 10; i++){ + val = [[co1 next] intValue]; + } + }); +``` + +#### cancel execution + +Generator cancellation by calling the cancel method + +``` +co_launch(^{ + [co1 cancel]; + }); +``` + +#### use case + +The generator can be used in many scenarios, such as message queues, batch download files, bulk load caches, etc.: + +``` +int unreadMessageCount = 10; +NSString *userId = @"xxx"; +COSequence *messageSequence = sequenceOnBackgroundQueue(@"message_queue", ^{ + //thread execution in the background + while(1){ + yield(queryOneNewMessageForUserWithId(userId)); + } +}); + +//Main thread update UI +co(^{ + for(int i = 0; i < unreadMessageCount; i++){ + if(!isQuitCurrentView()){ + displayMessage([messageSequence take]); + } + } +}); +``` + +Through the generator, we can load the data from the traditional producer--notifying the consumer model, turning the consumer into the data-->telling the producer to load the pattern, avoiding the need to use many shared variables for the state in multi-threaded computing. Synchronization eliminates the use of locks in certain scenarios

+ +#### Example + +We next demonstrate how to use the Generator for XML parsing. The traditional XML parsing is as follows: + +![image.png](images/xml_origin.png) + +We need to set up the Delegate and handle all the parsing logic in the Delegate. + +After parsing with Generator, our code logic becomes the following way: + +![image.png](images/xml_co.png) + +We can traverse the parsing in a loop, which is simpler and more convenient. Especially for large XML files, we can only parse a part and then cancel, which can save more memory. + +# Actor + +> **_The concept of Actor comes from Erlang. In AKKA, an Actor can be thought of as a container for storing state, behavior, Mailbox, and child Actor and Supervisor policies. Actors do not communicate directly, but use Mail to communicate with each other._** + + +![image.png](images/actor_theory.png) +(reference: https://cwiki.apache.org/confluence/display/FLINK/Akka+and+Actors) + +Mailbox: the queue that stores the message
Isolated State: the state of the actor, internal variables, etc.
message: A parameter similar to the OOP method call
+The implementation of the Actor model has two characteristics:
1. Each Actor, in a single thread, sequentially executes the message sent to it.
2. Different Actors can execute their messages at the same time. + +#### create actor + +We can use co_actor_onqueue to create an actor in the specified thread. + +``` +CCOActor *actor = co_actor_onqueue(^(CCOActorChan *channel) { + ... //Define the state variable of the actor + + for(CCOActorMessage *message in channel){ + ...//handle message + } +}, q); +``` + +#### send a message to the actor + +The actor's send method can send a message to the actor + +``` +CCOActor *actor = co_actor_onqueue(^(CCOActorChan *channel) { + ... //Define the state variable of the actor + + for(CCOActorMessage *message in channel){ + ...//handle message + } +}, q); + +// send a message to the actor +[actor send:@"sadf"]; +[actor send:@(1)]; + +``` + +#### cancel execution + +``` +CCOActor *actor = co_actor_onqueue(^(CCOActorChan *channel) { + ... //Define the state variable of the actor + + for(CCOActorMessage *message in channel){ + ...//handle message + } +}, q); +}, q); + +//cancel +[actor cancel]; +``` + +#### use case + +The thread security problem in the traditional concurrent programming mode is more serious. In iOS application development, we can use GCD, NSOperationQueue, NSThread, pthread, etc. to create threads, and then execute the business logic in the thread we create ourselves, once it involves more Thread calls, there will inevitably be a problem of multi-thread security


First let us look at the reference counting operation, the Objective-C object includes a reference count field to store the How many times the object has been referenced, this field is modified using atomic operations. Atomic operations ensure that the reference count field itself does not go wrong in the case of multithreaded contention. However, using reference counting is not enough to ensure thread safety.

+ +The existing idea of ​​object-oriented programming is very prone to problems, because the methods and properties of the class are exposed to the caller, the caller can call in any thread, but the thread is often not the thread envisioned by the provider of the library. Once thread safety issues arise, the library designer will try to fix it by locking it. Over and over, more and more lock problems are exposed.
In theory, we can design through reasonable design. Make multi-threaded task execution more reasonable, and tell the user how to properly call the interface we designed through rich documentation and examples, but this problem is not completely solved by relying on manual design and documentation, because everything depends on Design and communication to solve the problem, will eventually lead to new problems due to negligence


![屏幕快照 2019-02-25 上午9.32.55.png](images/actor_diff.png)


Using the Actor programming model can help us design a thread-safe module. + +#### example + +In the traditional way, if we want to implement a counter, we can do as follows: + +![image.png](images/counter_origin.png) + +The traditional way to ensure thread safety through locks, then using Actor, we can use the following way: + +![image.png](images/counter_actor.png) + +# Actual case using coobjc +Let's take the code of the Feeds stream update in the GCDFetchFeed open source project as an example to demonstrate the actual usage scenarios and advantages of the coroutine. The following is the original implementation of not using coroutine: + +``` +- (RACSignal *)fetchAllFeedWithModelArray:(NSMutableArray *)modelArray { + @weakify(self); + return [RACSignal createSignal:^RACDisposable *(id subscriber) { + @strongify(self); + //Create a parallel queue + dispatch_queue_t fetchFeedQueue = dispatch_queue_create("com.starming.fetchfeed.fetchfeed", DISPATCH_QUEUE_CONCURRENT); + dispatch_group_t group = dispatch_group_create(); + self.feeds = modelArray; + for (int i = 0; i < modelArray.count; i++) { + dispatch_group_enter(group); + SMFeedModel *feedModel = modelArray[i]; + feedModel.isSync = NO; + [self GET:feedModel.feedUrl parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) { + dispatch_async(fetchFeedQueue, ^{ + @strongify(self); + //parse feed + self.feeds[i] = [self.feedStore updateFeedModelWithData:responseObject preModel:feedModel]; + //save to db + SMDB *db = [SMDB shareInstance]; + @weakify(db); + [[db insertWithFeedModel:self.feeds[i]] subscribeNext:^(NSNumber *x) { + @strongify(db); + SMFeedModel *model = (SMFeedModel *)self.feeds[i]; + model.fid = [x integerValue]; + if (model.imageUrl.length > 0) { + NSString *fidStr = [x stringValue]; + db.feedIcons[fidStr] = model.imageUrl; + } + //sendNext + [subscriber sendNext:@(i)]; + //Notification single completion + dispatch_group_leave(group); + }]; + + });//end dispatch async + + } failure:^(NSURLSessionTask *operation, NSError *error) { + NSLog(@"Error: %@", error); + dispatch_async(fetchFeedQueue, ^{ + @strongify(self); + [[[SMDB shareInstance] insertWithFeedModel:self.feeds[i]] subscribeNext:^(NSNumber *x) { + SMFeedModel *model = (SMFeedModel *)self.feeds[i]; + model.fid = [x integerValue]; + dispatch_group_leave(group); + }]; + + });//end dispatch async + + }]; + + }//end for + //Execution event after all is completed + dispatch_group_notify(group, dispatch_get_main_queue(), ^{ + [subscriber sendCompleted]; + }); + return nil; + }]; +} +``` + +The following is the call to the above method in viewDidLoad: + +``` + [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; + self.fetchingCount = 0; + @weakify(self); + [[[[[[SMNetManager shareInstance] fetchAllFeedWithModelArray:self.feeds] map:^id(NSNumber *value) { + @strongify(self); + NSUInteger index = [value integerValue]; + self.feeds[index] = [SMNetManager shareInstance].feeds[index]; + return self.feeds[index]; + }] doCompleted:^{ + @strongify(self); + NSLog(@"fetch complete"); + self.tbHeaderLabel.text = @""; + self.tableView.tableHeaderView = [[UIView alloc] init]; + self.fetchingCount = 0; + [self.tableView.mj_header endRefreshing]; + [self.tableView reloadData]; + if ([SMFeedStore defaultFeeds].count > self.feeds.count) { + self.feeds = [SMFeedStore defaultFeeds]; + [self fetchAllFeeds]; + } + [self cacheFeedItems]; + }] deliverOn:[RACScheduler mainThreadScheduler]] subscribeNext:^(SMFeedModel *feedModel) { + @strongify(self); + self.tableView.tableHeaderView = self.tbHeaderView; + self.fetchingCount += 1; + self.tbHeaderLabel.text = [NSString stringWithFormat:@"正在获取%@...(%lu/%lu)",feedModel.title,(unsigned long)self.fetchingCount,(unsigned long)self.feeds.count]; + feedModel.isSync = YES; + [self.tableView reloadData]; + }]; + +``` + +The above code is relatively poor in terms of readability and simplicity. Let's take a look at the code after using the coroutine transformation: + +``` +- (SMFeedModel*)co_fetchFeedModelWithUrl:(SMFeedModel*)feedModel{ + feedModel.isSync = NO; + id response = await([self co_GET:feedModel.feedUrl parameters:nil]); + if (response) { + SMFeedModel *resultModel = await([self co_updateFeedModelWithData:response preModel:feedModel]); + int fid = [[SMDB shareInstance] co_insertWithFeedModel:resultModel]; + resultModel.fid = fid; + if (resultModel.imageUrl.length > 0) { + NSString *fidStr = [@(fid) stringValue]; + [SMDB shareInstance].feedIcons[fidStr] = resultModel.imageUrl; + } + return resultModel; + } + int fid = [[SMDB shareInstance] co_insertWithFeedModel:feedModel]; + feedModel.fid = fid; + return nil; +} +``` + +Here is the place in viewDidLoad that uses the coroutine to call the interface: + +``` +co_launch(^{ + for (NSUInteger index = 0; index < self.feeds.count; index++) { + SMFeedModel *model = self.feeds[index]; + self.tableView.tableHeaderView = self.tbHeaderView; + self.tbHeaderLabel.text = [NSString stringWithFormat:@"正在获取%@...(%lu/%lu)",model.title,(unsigned long)(index + 1),(unsigned long)self.feeds.count]; + model.isSync = YES; + SMFeedModel *resultMode = [[SMNetManager shareInstance] co_fetchFeedModelWithUrl:model]; + if (resultMode) { + self.feeds[index] = resultMode; + [self.tableView reloadData]; + } + } + self.tbHeaderLabel.text = @""; + self.tableView.tableHeaderView = [[UIView alloc] init]; + self.fetchingCount = 0; + [self.tableView.mj_header endRefreshing]; + [self.tableView reloadData]; + [self cacheFeedItems]; +}); +``` + +The code after the coroutine transformation has become easier to understand and less error-prone. + + +# Tuple +#### create tuple +we provide co_tuple method to create tuple + +```objc +COTuple *tup = co_tuple(nil, @10, @"abc"); +NSAssert(tup[0] == nil, @"tup[0] is wrong"); +NSAssert([tup[1] intValue] == 10, @"tup[1] is wrong"); +NSAssert([tup[2] isEqualToString:@"abc"], @"tup[2] is wrong"); +``` +you can store any value in tuple + +#### unpack tuple +we provide co_unpack method to unpack tuple + +```objc +id val0; +NSNumber *number = nil; +NSString *str = nil; +co_unpack(&val0, &number, &str) = co_tuple(nil, @10, @"abc"); +NSAssert(val0 == nil, @"val0 is wrong"); +NSAssert([number intValue] == 10, @"number is wrong"); +NSAssert([str isEqualToString:@"abc"], @"str is wrong"); + +co_unpack(&val0, &number, &str) = co_tuple(nil, @10, @"abc", @10, @"abc"); +NSAssert(val0 == nil, @"val0 is wrong"); +NSAssert([number intValue] == 10, @"number is wrong"); +NSAssert([str isEqualToString:@"abc"], @"str is wrong"); + +co_unpack(&val0, &number, &str, &number, &str) = co_tuple(nil, @10, @"abc"); +NSAssert(val0 == nil, @"val0 is wrong"); +NSAssert([number intValue] == 10, @"number is wrong"); +NSAssert([str isEqualToString:@"abc"], @"str is wrong"); + +NSString *str1; + +co_unpack(nil, nil, &str1) = co_tuple(nil, @10, @"abc"); +NSAssert([str1 isEqualToString:@"abc"], @"str1 is wrong"); +``` + +#### use tuple in coroutine +first create a promise that resolve tuple value + +```objc +COPromise* +cotest_loadContentFromFile(NSString *filePath){ + return [COPromise promise:^(COPromiseFullfill _Nonnull resolve, COPromiseReject _Nonnull reject) { + if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { + NSData *data = [[NSData alloc] initWithContentsOfFile:filePath]; + resolve(co_tuple(filePath, data, nil)); + } + else{ + NSError *error = [NSError errorWithDomain:@"fileNotFound" code:-1 userInfo:nil]; + resolve(co_tuple(filePath, nil, error)); + } + }]; +} +``` + +then you can fetch the value like this: + +``` +co_launch(^{ + NSString *tmpFilePath = nil; + NSData *data = nil; + NSError *error = nil; + co_unpack(&tmpFilePath, &data, &error) = await(cotest_loadContentFromFile(filePath)); + XCTAssert([tmpFilePath isEqualToString:filePath], @"file path is wrong"); + XCTAssert(data.length > 0, @"data is wrong"); + XCTAssert(error == nil, @"error is wrong"); +}); +``` +use tuple you can get multiple values from await return + + diff --git a/docs/usage_swift.md b/docs/usage_swift.md new file mode 100644 index 0000000..d226a4b --- /dev/null +++ b/docs/usage_swift.md @@ -0,0 +1,141 @@ +# coswift usage + +This document instroduce how to use coroutine in swift. + +# Simple Launch + +You can start a coroutine anywhere. + +```swift +co_launch { + // code +} + +// running on a DispatchQueue +let queue = DispatchQueue(label: "MyQueue") +co_launch(queue: queue) { + // code +} + +// set custom stack size of coroutine +co_launch(stackSize: 128 * 1024) { + // code +} +``` + +# Simple await/async + +Define a suspendable func with Promises or Channel, then `await` in a coroutine. + +```swift +// make a async operation +func co_fetchSomethingAsynchronous() -> Promise { + + return Promise(constructor: { (fulfill, reject) in + + var data: Data? = nil + var error: Error? = nil + + // fetch the data + ...... + + if error != nil { + reject(error!) + } else { + fulfill(data) + } + }) +} + + +// calling in a coroutine. +co_launch { + let result = try await { + co_fetchSomethingAsynchronous() + } + switch result { + case .fulfilled(let data): + print("data: \(data)") + break + case .rejected(let error): + print("error: \(error)") + } +} +``` + +Define a suspendable func with Channel, then `await` in a coroutine. + +```swift +func co_fetchSomething() -> Chan { + + let chan = Chan() + + someQueue.async { + // fetch operations + ...... + chan.send_nonblock(val: "the result") + } + return chan +} + +// calling in a coroutine. +co_launch { + let resultStr = try await(channel: co_fetchSomething()) + print("result: \(resultStr)") +} + +``` + +# Cancellation + +When cancel a coroutine in coswift, a `COError.coroutineCancelled` throws. + +Simple code: + +```swift +// make a async operation +func co_fetchSomethingAsynchronous() -> Promise { + + let promise = Promise(constructor: { (fulfill, reject) in + + var data: Data? = nil + var error: Error? = nil + + // fetch the data + ...... + + if error != nil { + reject(error!) + } else { + fulfill(data) + } + }) + + promise.onCancel { (promiseObj) in + + // do the cancel job + ...... + } + + return promise +} + + +// calling in a coroutine. +let task = co_launch { + let result = try await { + co_fetchSomethingAsynchronous() + } + switch result { + case .fulfilled(let data): + print("data: \(data)") + break + case .rejected(let error): + print("error: \(error)") + } +} + +task.cancel() + +``` +

}2#5c-oRtt*w-u=E!L1brT*D@duU-;VzE=bXY5-AyAMX$muyIb z1a;brApg5(p073WC}To1I#zXHGH$kTvY*>z>ijI0$x*&~vz==qMd?4nNQo*D16H1@ zOeVHQBYQIo2{D|p?|=RHAR_w<$F+*)*RXjO&r}Jk$jy{2SQ_@H?Fok*+m6lsQ>_fq ziM@0dc$3fnpzEEZD+~TM-|miW+qP}1W81cE+qP}nPCB+aCrQV4a?kI5XJ*}*x%bbr zPVHUzR@K^7^*oH9`uHMZAyG{PN560;H9}IPyuSAIWXM{kxqLHMH0jb|(=*=xbjsBf?z~G)hQG0XKmYeIuwpQ1oz?L=ho*y<)Mi4(AVsdG@Qb)KY zAl-S4_&Ak0D~|;`ydC*2R(=uNYO`A?#2j;eGY%f6hfPdjR6Q;io4!Qs0Uv#)%QE2* zQDq4xE@6fhe#L@$fMcRroyuGP&5Y@M|G3s7hpFZtSHJO=%7Q?j;6__Ihg<^fp~J$~ z8sT0mifG24NSs?PC~K?J+nO`FM%s^u)Fb0$zfP(DosfsLD z{{*8s|4?gr$&t4svh~XT1yOSvxJnb1Y3B%JdtQ=D@OKR?HGmAx@>n)%w!iwW1PV^P zS6C#90In224FQsknq2+TtPn?eER z;$GY~sP`>;66^L|Hm7)(;`Dl@Gz{m8e;^R5WepB%9B?~JNg{X1bFz5?I54Rc(H@`d*li{WuqUHzIajXuLimiWa4f2bt-fF3W1 zqJw&G?L^1edaZ7_b?sBBg&0#R;{f~jjn~Qbw}rO8Z)LMW44B>@OB@M!Z-WX& z5iL$uL)GW!n+HTup;YBV#?8+pYsolzGK?qf2M;_^(1%spiMnCph`PQexlXuq*Bb=o zWsKHvTA5~CG8b`wX%5<<0~1(VdSd#5j26OMYFPner}0w>&vWsj4U@ukka^iDk1$)JRcG z_s7liI^=SS92jQEiZ{^_k(Ioe11yiXvvDDuymWm}I3BkPUU@=Io{86DXyoZUj9bq=S<6}&KYH1e*pMg?4UfK-)#ql~B7ljbCs#yX_2uxQ64~!(BNmR` z^=<##eHkonHK#N3?r(t_EaIPVnr&ujSd6tNT9d$;ZqVBZ zM08sW;HnVWQCV3gk`c^5DDGi}`L9grns!tA!dk?X$6z%QWUhemgfq)@a^V)?@mD5cObMBiw|qC);d_W8|7k=*A?fbTGK7b#d|y1cwS1kFVX@>Cr|SS@RgWyP;}l8r`x>)xumu;X zZ4UL{46$f*I<;DuBw<;|U_)_Onhza_CQmof1M(ga+0632pQIW$%)3=rR*J|3<$|A{ z*cW^PpFVoa@Vj^3$(=Ty`E3N5=_xfx`2MaVk5AMo-UrI!T}3XXuA^hgE|Z!Sy~3!F~reR$WHu{o3*yGdgoo$!-4_D;>uzhrGu1tKsi((hGbpB z2m~)!)#xNC8#lTb5^X%!ea#msVph}M4U0o>mRzY&+psPBOISWzrAYsoLdocM@l0?W ziJ|{15gY1(UygW!=%JF3*tme>*AQ>0h_pC(B4oEjZ6uL$D&`o_=gkZ+SC4j*)R$+_ zKa}hIuhwusI(qHV~@xtO62MZ}%Z7(5+W_rodaOg9}HhZPQz%}sff zw6B104^>jWK;Gz#I!E;qGTuGlra&}C3%FJM z)w+MQIQ~oK1B&-0KAh2fPFBZbQ25r5$L~YK=i#>8<7P0tgg$jzdWedZcKOUK3C>O| zi!_6iJT5T_x6jz<0YsuG+L!cpq*Ym4AbtnNr($qj$hZu75HWD-SImdk^nxkKtS>3HXg&@Y4=8Un27fr=|7 zoVZB%wF!;V69+x&jJ-y6_H7$J1g}%2e0?OfOSS70UgM9Um;jaz&oj}_G_?DqijD;5 zi^4y&j_TIBCsZUgx(I-m92SI=Z6?P#Po|;}1qbSPyV2G-&-cgdlPt~KXOT&wP&l}j z=v9>=vk#D7(dq#-TT5U=^6uef_PaDqdQpk3tyZxPP#Bf(l_tx4rYl^AAHwbG-BDj^ zJ;O32FNd|r5J$Rtkh{Q+EC(uSjc2Fmng6t1;NsWQ!XoZ^`JG#%ZM#FA)2TnX?qHM6 z*|9shhu&hFJK=8ioLB+Cnss*Y7-PKcx~ii8L%w`U^eHBX7=~Co z(K^mVE8`>R4|=lAud<4pJ7)LYBe?urSx10rh%Dhroa3}WpHey*{g*+B(ZGaqDsI(q zWm-Zo{6LjVPM9O94p!j-rA&llz8M{c*B7p6XR2#rx$q3*nf)a2V5Br&7d~vi zY}v+8!&TfpLh4b(6kp_y+PbPb_h|$DmPNQ($MA3EU_uR=;{`MLp?R!$U|X)AKZY`6 zwLb`p?-^#db+cpPd8+SK;TnuQiqD3xrOf?^w{2~%k)3(FB_6i~0RBX_^nDW5DJ|bx zxA1*Q4BFd3H}eJAxuR}QU{drzC!UK#F9RDkz58G2FeT6C4=aHMn*?&oH9j8vKB4j9 zzUS^jWsLv~ab~FN{%d^37;Y4Xj%CKpK3g83{o3(jdN&?J&j$+zBadQk{!GUD4rmAj z`U7s(jTNBbhF+D)-dw2Vi1M3Dn6o&`<5-)TKYTsK-x3pvCph=FnPCAZ`m`uoasM9V z2%H8fxX1&eC8c!vE1o^Dj`FkwHAb%*oB`CN6=YAe^G zgFWYnZflz*?aHgf;zaOZuHj=)haj1an%Lyu5m=Z36)A#5RoR%x&54d40Rf2iBXBTD zeFQr?bcL%bC~)ZI)XGB(g0vkx%DC60aj;{Hw&S*moLrW;G_72N{rC zVQ=7_H%ZFrIVl#w?cDf!r(p>5hyYNoLLh;OFa$kO&{H!s{LJmxRuO3?` zOI%)c+iq?}{G%4m(xbBk($0RXB-iR&1^M|~O6ZGT-dm31&l1FRY0j><=MOr)kHXlk zNt=|Xy^k&Z1K>hU$i{}2Sps%^3~p~SaD=@=N*IkfF7}^|C^awP@}vAZ8Tp9u0T|5R z9g2KfBv;;Yh~(PtUILvF0+lV}BCm}Cq2LDd_(K;ZygWvE@X`%<>9Tt2TE`c-H9SQcJ#Jp4+BOS=B*XIcdxQCGPzdKjq($0!O+CtBmO!(^kAreDix zf4aMrXl`*5$sFaE2Yxv2Rxqn&2EVX*85HRJdhPCts0!(o+1Gv4^qmV{5?IC=Wa4+? zztB+&%AJGP!mrwN+Cx(t=jg)5gkDm55Gb4B$m}ov4nKaUr z2XU*XL>3QWAy(J!UwW*W9k5_S25yb`$6#Sn&f(x4pr>L}!ZU2(<0(U$HUSiEIn1E+#5=tP)}t|+yX zX)<#yfC_1`Wz%oz#hAsw!z|8~4}gG^7BLbI$}uJVkZ+&Fco!0PG=Mb#l;%yAPL1L^dmAt5vYE%nBoig-eFe>$M>GX_GtHm7*(q(jZGhl)eVW znPCyD;JBq(C-<>{%SR0a%ow<|xKEWh_O`AjhuMUu$3sN|_4!%*6ozz@5h}^t_EN>d zp_X$CVRWuhOI%?L3KJ!25%65z);DJYPn%5Nk|Ig`+8*vOICW8;CF_!RMK zbL?B>v#wB>c?m14DA7l)t_PNC@n|iXZvjmPus}=8N~H|)3YWa~g>{Q!hDuerx7&Uu zrmiULAYNu>;VWVng9^R24f89E;z=BGl22LJaw++q?p)gpGxE51b#ZLNW?+TCE6`Jbe8Cvdo+3sGSE>7s}RZ(-+y0^XvA6Z zvUkJl_b4Ghh#RY0tkXD8P%xjSWhj#9xv7$$bInNO;Zc5tSnp4Wj}_P^FR;Pt5BIOW z!T)78`OWo7@uTu+XtYLnl$};RYl(0o1G#(g{_rmk0yD9N6aN{e(^za}hMOz15d?(v z)=mP+C(*)q@B>Z+&ILmV@A(1e3kBpJH$u+(TNQgC(O#(>ti<*LVInj)TTIU2329r)=Yjhw(RB-hmj;Nh@2FpL^V8E-^z8&m{82i`PK2g+>A3GS5rI>`h)P&fwawf|B? z&ahdpMom%UomKcR|I%oE!6Q_$Mlba-j95RAL+9CBjo=ZRo@^_nN-d2T$K+f-Qw$KVF!v^Gulq|-k z20hF8&WLBF@epEC`9+nbl$81*(HYy6=J1j8jQc~esk%e6!>tGtf7yN_G;_V&m_d|b zFnek}Z(M6-8_!X6TtS_#ey1>t+h((RB)gQMwq8BG*M zJ~6<}J~4|yY~!(lPSGYiTsCfCKN1OAo8D=o~ekjPVUx4lheRokHjDw#nF{n5RZcMBep zLmCy)o&ce+P*Maq@b^No5lsS;kevQ@OB+sAJ`_ufpkLGq*&=1y3p%M)Ko)SOH|@dnMnsMbuiWx{)mAZ5g@iQ-5; zmIde@I_E1rg?Pnkk4(bk2(YRc0W}Zgv#H^-QKGV0{fviJ(AlKev9aefY}YAaDmQ68 zOZ#H2zH^?FgWxL19Fv?_ZS1~UDjZ$;GkkLt=ZdF(;^RuzT%8JwHf0XVG_B~?7EzF-`56hF}ZR0W>UPv4Z zGJ$Uo{_x>F~ zrUazVtB%}9-6x6ca*6NU^`^TO{w2kpgs3Q?^@W9}tiNMus2Fqlrq6fmp7)x@zEIhk zl+Ts%RyCuC66qmJu;XjLxZ!k?a0*}<<|m_xbO@nb6}u8&>aEXK7Pr`JePt<@rJyG^z;=Q3@u!`PLtw2EVFqr7*@5`L(E}B zE~YgDzSvY!Y7fObp*PLN!w=Iv4$~pkvSxZ|#R}H}(Z5q5Zs$qAM&RI3zmYJua|7-7 zrcyOdU7C`a_`r+jVln3U_=*U&f76Rb8OT*vl`YQ0=#|k&M$=jAC@_rbIXT=f939%) zUT~8Ap+qa|u>qcsr?@Cv+Nka`}sWEVTxu@N^8I_^6w1~1a&n^hPX7+ai8L+c*Tz9wey>C>mi z@%*F{S+A!yR=Zrzj+0~;D4}@A7avLCJe`S2a8$;46m{eIyG(4_EJU$sVe9O*Zpde3`g21P257Ls*;V=Rpr6C`O{Vw%P zPBgt%L^Qn)rRvpgF9rkxzMIqne&bWF@5?7%I}s2VtMaYAwQ0cUQB+c*;b>P`jyfpP zqJfF;0yMx)VDo^_^L~QreaufIQ%6?00xkAjW3dD@w*HSRYslA{)1fEZNuFfZGylLc zu^Ch#RPG&Z7pm>;C3ld__&&*nW?h%}xHl;3>XW6mhv8D`3^FzXfu;sj!y%xJb$_ef z`FBUXUdb`Z$!OG?lT)Iz+e$%I!RRXet)a18wa06opDpze#Ea45p12VZ7Dvgm{UaZd zAtsj~{(z+jEdAuNQv8d4%#}Y=kH(bi;cd!IQN7IezM|8yg3fLo_X#Pl4Exd!{jKYSPqcF&g%$Fy!!fMrNl(Sc!;fY;uM7MuP zc|HfTl&qxLw-IAnpISiFu-jr1rne?~7eW+DAcKcQuB9fs909ydVW0`!W%VmQ$*b?|iu!)@JRo9hqjHX_ z&@}XYw)4uLz?YbPpLLvY@#}q000l81XsLn!0k7#!;N9_d9z0SC?WBV3J31MTChq#7 z$0DYa7e}g7@vy_?`j4?u(&!g}rNML15H@#1Zq;nKvoY0h^ld&$QPTzkWoyv9+;~9c z8&_5RAR!sM14rH&rw)X}M=2&yd1)kYZy^(_VJx%3^~-S4L;4H}3?P*hb&q{A8=H?d zy;$!8nax8jBwuA&<9e{rW+i}xx=i6CZ`tl|ppDiA7li^>WA}Mz!Z*e*pr#QYIc@w5QCpdd4t#Z2@e=>-PC-;CNrgYcT`p**}l^o>J# zE@G9CsIgB;MPnCGK3VTO%$kz198kIjYp5=F^znM{*WBesIu zYJ9GAxrOtqRw3$tY60qcM@~}vraQu7BJOzX%>6fwXpP3m0p_z5nGU_wsTSn@9aJ43 zwZb~DFTWk5JQqPg7HkD+q1DoZ&;8zNFehEVe|&fOUsKn;TmPEZa(Gt&@U*T;{?4og zkICB+ft0c%zT;Ft4ks})gGSofcz&8(E-kjCMK8{oYVsLP7bbjJo3mR~A-wuxYuQVr zUz^kUzSR(|b8caSKcdyR0kiw~dKQiS`m=!%{awzn_g0?+J>0rN*S<|^hLJOW+7h4b zremBZZScC>QGg}X@8>(}codAV9k2fV+QsP&#L!aO^?$0Fn7=E0bEh`-MYZ^Cqet1p zSgHG8cU6nQ08MIpsC(eO-p@m$7_&n&nJ3b>E;$GJ##_|RH3m;Hgh5PdMDa0x!2OC#27Yf&NbSB>D zy^A4Pr3yBLyz(`49Q0e(Wts$=f@8*|EbmXk8!hFf2HX;8i6~^{%U;t>BMStcqG z|1+n~jAKC5+(zRtIH2)1g@|PUlb?}zTAc!AJAUKU%VnG`Utl3q)(g7orx62^O{0ygTberRQz0kFY-Z+`LK`NovkoFMKW}3P z@w=xOyMCvaov`2(b|9{_^pu}a?L#eLy<>mZ&xsjqRzj2h`&7eu)F1k=_P>WaqawH`xcRuW!1;6wkyse}ZzB@;%L@31bhQ)Z*AfRiSZ?S{*udiBE*b7)R*Y$A_Y%y!;r0-&a7% z+CN>V7f2oXa>fQN-JwG?y8$*73Bw}@T@#*F`}GLd^VR5Pd}LY#fsg2c7lY;ZEB_zY z{oewf2QdT!^!soglZT~3TzKD8T}sx5$5X1zlZ)GdDCD`EO}z3zP0!0qGFOJ{pr;Z2 z?Tax&`%s*flD`i?p`c2G^HKY-#dv&9kiXKB>Sbg8t6ps9`y)MFtUA3QQ)aFj7M8IHVQ-kEqfiw$~3v7>v1((G&uCOHS*@7c|M6{BQwsERRwSJ?Wq+a(5na9U;0fgYAdF^&Q-T0SA->H zilWx*{lomTfx=^XBlLSsKSFa3p1fMICslbmX7fj3U_81z3)jiKpFu%Sc356^V4!*F zJ6rlzLNaTJozHw3_ca@@jaa_up-|zAt zW+64dJ?b5F$=vFxhZ~$(45FEg-{^XoF3a*3L@3O_9uietOW^q=NWuRhznPBqM<-*z*rPME75z2|!>!>Fn8LDZ?UTHcqOUJj9NoDZpCSb;FlI zl0dJfk}xfi^DGS>BRfM+PU|rU8o6gzls)I?P*dONt=%?piNjyljt;3mN%_=X?Duf? zUv9VJ!1Qa7@>uIkDCF@<#p$mCM)qHHKXd1oi^QT$Z{=M7InQyy0QIE=KwtwHV0WLn z6MU<)1(j|Fcapo$3sx3e3r_7gT0G7ZNP026! zz2-2Amr#QzpZm9^vm2uoo_ABcvf9v&K1zY#@ul{tMw@cIArD95s`-wSfo!B}jt{en zo*hW~Jx$#k@vtjrwWq5TYI%HFO1Jz+Vc`5Us4@2p)9B1~-yx_MTJo+g{@bbFI}CBZ zSRh8CR|TH~Z<)soLQU<_Cw&lsmcR3Y@jO*i&ZcT`OJAczHddhs=r`KJ zG7P-5{@bO;S$>g^a~h*|cULU6es94XOeLJlZJy4shwG-hok6aszjIaX2n8nUtsiEd zq$WxCMh+|XVUy0%`D72tLIl=pA9fuNIO9L#$39=qF4r47SQ$B(`KIYLwEcW`2rNg| zr<)T5w)(Fq49EHmdGR@VZm!=KG%gY8P6XeBasPtXx$Z~*)!dGtyN8Dv#7Q?CChNzh z#U@i3KS|75t}w&#EU{iMaBY6VVpm$zBlVwS!~Bke=qLYCujowVu`|S`eY2Tq>CxZR z1U=9H&YS0Ph_v|8b29`ZDoGZJ+@nUsH4#gSjB+4so;~Lo`Gp?_k4KBct*+x(nGiRl zP4m1^C~~^nYwHYI>$_>b?&ZkLC&cL(lZMs63;j0FdykvvbBM&`4j{*l#Ika+2>GFG zyV(Nf?|rOliL&H~l0Z6C{q0dHw$;M^dn?ToJXz!WYkte)v~YaHr^Hn5)MAAMFoB`# z5xC8*q7$RQpNryFiqa3BbNVtSz~uD7$mi}Ihqg>on7vY;RDEQZub-Q5bNdup`f}>NB_@|{ z$z`~3W&1Z2cYwRb&%R%_BS%ylY-8}Y;5r0#k#`@o_cB_kznIP+%q0D<auJ7) z7UIDkX=Uf9cZcFL-{*EUp4SEWTz1By%A>K}bf)h(K!O8vrOu6Wqi{axh&@bvw+(zy z_H=a7Y-*7(mPB>~X7ab{@lxd5{?}}3#{IUPjkXH*K+I%kz=8a7L8WC=27oDZdHujh z0}{!KRgi+Zw8ghLiv0bh8ahX1;>vct1IigNGur11c6Vcepl8t;qcHA0onD(z+}gEx zU~q583MP>SdL!h0H@P=a=XoP&o`=e+UaLp)^^2LMdlD(7XAUC!*`ojH1x4Wi$g;F= zMNE3I<5;cJq(~-lpKkR^64U9tli|HPMJf2i-cYwfYmkGj!HJBJq3?vWYlqRN)mWdp z7dRK}?l@a2m&$S9dndd|%%W{>T#ReAUggOCwT_5}NA`KG?)zYLb#h<&NoqaO@CT44 z5xB@653kYUW&Lu;f%ks%p@%OcH5)jq-Da@Wb{Pb6?W~^v{l)l#5l{`}r7W9N{N^s|Ms9LQyU5Cg< z{ZeFvE#I*1>~86A{)5(V=JnQ~D%m}A~HjBYMu<;GfJ z*W>Qm=?`yx#l4z4OwA8J#Rx0H^?g`R-HSm15O~X@AGT1mT~E<5QSp z(*B_wA|=bl8B($8W8w}6JWYd{Nv3nCb|x;=hP3lxpyQ6>n!gfV9GgP#aP$MzneA4P zekZ2le{cKv_&r&#F6txhi7i)Iw_gQ{yIjDG!*akxv8zOS5`w|Yq$s{+FZ>arXcgl3 zw!?U;<0ikRqBE~jRW2@=UpHA!| zSNsz&+-((#S)kRf#^{b&>Dcsok31Omh3rPl1r6=0_0GlbK}sQ0EMl3ofO|Sp=b%gm z;B8i3C0G_O*Z^}ci)?@DVab1!F1Mh&>82Y5l?joOhfCm^J3yKd@VCQ&x2aBxg{sw^ z2^Rf2*l{J^7hi+`qY+N39t?gYKr=o&e^20Hmhxf0)KVj#&k2K@K9Z--XG2z4hAbNQ zL9#g;SiKqpbdtS%yy|i`m8(he)n2IObLVm@mVj^|Kl#l2Haa9CwrmpjsbM_RryM~B zovTIYr-OmNu0jM#j3?;Sfy7aEe8#-okafRJZT4Ou8-Q8@-R2QV1+867{Y+eJMA8M^+*8AbX3xeKt*Q?${e0=sy#Tna^Jh zB>LiBfAOEZ@sUwrgOHa_Z8zBpRU&TEokO^s;{!SC|Y95m0w;lkmt8{6)@H-#H^CEr?C+wbjthi>rQg4gU{#A095 z42m8n8K2|-{)j#V3G{1ic@271`us|YW=LW?`CvddT&vrmTb;-u=_Kd(e$#C7^Zo8c z7%d06-zQkp&{2N+x1ro(s7b!$!1tDp@lBmIk;BrF_r5E=lZ6Z&25@gV>~@Q zecS)-OY0P@CeW6?Hy$^OA#uzK_i}oqVEQ@k&1wjgc5DT()*Y^hkuRv(V!wI0)R~uQfmKI;V32Omg$QuNV&1Njm5TExX=$&gCf1 z9)<_mJo@{56Y|oi$!Brjc}qhct!Pf)9toyA@Zf#+JFNvDDVwe)H5VN?I)&nQdC6mv zX$a&m#jtZ42`nOpQ8(Eg&1aEqQ6JZ$4#71`em~OY+{_CJsxrxxKq=m$mjJ{jiIe_S zA48m*4wcs8y5o@kURf@|nEg?wk{kQrw)f@8ZI-P_&Q34EIwy z28h6OMU!W8G{|lpRfuj85@>Nt&^WllqOj>B8m(J6Kzib!?D9DVop*U~!OOJ~k}VQb z(X^hzB}Q}zl(das@B@&}IDLQ+>TtXhcrefTy!xyJ2B!+sfUJ0K;$&#)z69JB#>Ykq z+1bG#q8utxjjyFZ-U_18%Q3F}vB;;5_vc+o|5wC|k`YZ{#pR&1w4AY71tA5>l}gN{ zNUl`HdCQrWl!T15Yiw*>YJ-fnZM*i1z)xNpRYDT>#?NAZSQdzj!KZG&xAvJ_U>Zm&EM@EwHp|H zUeht!xLO+~^8Q#m&1BBuWBTs4o25GgY%2*@atA%=I*4(S6AOHES&2B8iE&-qqy0WY{;Ff#Nq41tc&(0>!8H^72O)r|afsrwg(gQ| zdWEAn!)IY3nBAnGd9n|}pZK40@EX^@w=*F26l|=s>&=rK@bP_5(!e6s=nss1Up5v8 z+(D*cd>L5$!LNkxOi25*Be@iu4kvNHl%a&jVE1axdV91>{GM(oG#ln$;*Pwt|MoMA z3!$0i-+qpS@=bzO)v4oKipp6Qzlaw>v#q4B2-!22DOvF~Wtd+^R-{P_lV*9WaGzW*AgIU9|>2bE(! z74>gXCY;f+&%9SkkmeH$wg%eJ%b5fP~l5zteQt7@i^G{$_f{tsco6c~nR1 zz%NdAn%i5Jw6gYrNT1)mW34w#PEJZlPX`HJq_oz64kHE6RH$g!L_1fn)9mb%lamvZ zc0$gfrvP3bN*uS+*;c$T#YPK-Vp}`e`^NQO6*+GYlS{mW7&` z*`dhbrq^MQs@vfb51X?da1uYZr|+q_IyjwHJD_mYry#$)0GYACs{5IJNfO69YVXv% z$6g!b-+POm=k@RT4})#&usjNk7N7~;#_h+1bxweWq<6BNgH~PCM^m&vMc`RUl5Jhn zN2Mv#Xp4_kR`1F?8bL;&+R&|n?d{5e7aN5wOCP|Y+A}WI1JCC9R!eH-Qvd|*@BGv4 z(k6X=kUGQ?C3z!A)F>5{DMA_sZ45ZNh8+3P%_3j;gTuc%EC6ksb>!=@Qtu=BT?L>`NJ$3`7)a`4)=0|;2y%RXNd zqy4SWEu^U_csQE-fO~xprC0$^fT@N@b2Fk2up=Z&iWj4a=Y8f#E{vW}@{*{qz$e~N zQp;Oq2>jYpk%KPg+c$h^dd9oSl}}LLKidSCkJ&By0CWG;SNif{UT(#{k3=F{WEd@w zjjx8!oxrB}lY_n76~FfOyoJLX7M-2e&e6U4@mA8HB`|-4I)QqbjX^woT&@}Sxmlfx zC9^K~dc8xokJ5Dg#L+gjbjHc93uKJJW!mn`Hf==1MuS0&XcG)Zmqk3Sg0NgfxXq8< znqEZg_Lb{`lWl>oPW%K}?$$38yo@}~*0qzbJ{!N7EzdMf1v>iv_LW$ry0*mP*?NkJ zb~Nz7CeRqc<4tO18HPs~&)rRLevz$`W0W_~A}5en7pI;2NBito;IZawI~IkBU$V!n zwVS_xB)$ks*tmAtjx_=S9sJ4q6X5lz)9-W7Bo0aoaLzS%}cKiVB{i=Msjw!3J~A3(7vd?o&85b&rF zk1FAE;6@<=Jk}kxeBSS+;E0|qF!RR8zTUda=J~)QL+_(={USdvyv)m#BWL<7T4J<4 z_;6j0hWS0~iQDhot^fwiQ;?_tk&_FwLe-EF(^NTL3$9R$j3V9oMA?ykt%XC9Iw7UV z41163GBm9V_i|L_8TG%5DoBJF@`DdRu&cUb=nTnCRsDA{Z8DCV_iJiajs#xh$G7Qzq2i&P}ZPg|@~|`X|bTt?b#eq01oO z)D=JxhsN>CIsJFFP4<*FuyDU2eRd!dZ~+9v9AeZBHdcAJ@uIHg0FTnf8`pSD)x7_% zfe2zjEKR&DZ==V#J>#*~X0a25ZfLSdz~2C}DDx2a95O_nWAOHz4o9a_Ki^7?wRIPq zusKPLW(4k39`wIGx98Q7)KdSI8zm^Pih*;41rech1*M17|M~edRPe`7YW&}b7qSHg zKExF5xs%u3nCh%(+#o!7)G#;YP+CSjwQM(_eQff{%mMYBtM( zHK7FUBL)>!yBwK&Rac3<)@eJyWz16~j9_Sqvo^_5v{jE)1g80~3m4r2o}*|Bv*7L=NEpX+e26 z;z>}xhY6PP!6KIZf@`ClFFe`|k-GU5VObncaA{>aOf*ZoJ&0~7%m!H`|jFLdtI6)919 zX3?P%mVxv8f~h4?1YWD>7gC1{8)WDu{CJ4%S`O@focNfvb8#;#f*4$G94aU-#*CSp zF5QYszNpwO0kOd^)rE7o+)$-a_5VHU|0%?rAZQbmPn(Nzlm@3M0qq z^WwI)cz*ZU<%;U+6r>{SpymT&NzlE{6b66|1VSn%9B~jrbi^Oq_yy*>ptL$)#H%(Q zI9`0Ic`5gQSPHgOQT|_D^1oY%A~qmNn&&6pC`J2xbU97hp~$`4x{DcV$JFm*SD)iK zoW}*CCCq3SW7r&i4jXQiIPE_7A|z_7a>N2P>HOVZ#?Kl{3k#bO=lM^p*49>Y+Q$9c zjs(p7(EIXl0%R1gh>hW|U~NS;#SltuUZ*B;5^84rC5qj+;^X(9bf6(kPwL&Ef+EmbVX@Q0m=HwjE* zs1L{2o^0uv_ovU7kc5k$r^%=H*njXec);7E`=XBTD+!Qu{&BT`&l7Bhy}#F*CS&_G z-hv;Gz)vvC@nH!E4)TIQ-vHabMc0l=p@Wqb`HN&xbnseZAs=VSt2bbClFJ6rKFjPO>wtR-{WV9P;<@7P3*tU~^xd`5x_FH(%*pnkyzOjAO{l7;)C&+(h z4=C=$A+0pcSG%T~s!$hN)6ciHaokvP1)uMDND9;tV?(=jbS&bU z*Zmd=mv*?&z@kNWh8axx)jMk@@_dykY=+CF6crX02J~SX8z<)Fk%Nv528aI=1zj>X zHz#6dMm|19qokt~6BhpE5lNv#`t(*vg-*xcA|Xd`Yoeh9 z`JY+;!3R_P*Gh8b!=?cW$raI1wKm@~NrkP_}TwTNaB2!I>OS{2qJ;z^r}% zopxIrp{YEIi3;2QM+bES#zdHB|0ZqeWHjDb!nmu}y*inIa^~7K_2^w<51lS(p+@qD z4h9RVx+px7Tqp+)d(nVmT(;5u;tnRw5GL4?S3XGfMflBDl^CVtieUXx@#Oi~u_K71 z?Slhn?-$;^MX(qvX2p(!_XX!R?s-_9rg0!VX@0F<6o(auYh^z~5;W?RedjSm2D>XX zGxHyi?m0NP*mWQWOz-u*TBFHCbH6JL1Wd*X%;&nx`ad^x6SJ@=hdAw)YYGVo5$$?k zgY>*#K@hiCVMCxkNyOp?3Vfa+G;CdZ98T^TU2S_dXwYh{BKrdsRvtHj?~3~R@!EEs zcw+C*(F;@D0#EBAr(5L+U!VEyjh08`+kWr1r+fYO0iqREbz@Oz`ar{**H2Qi7G2k} z*_n&5^8ByZmQ)EkaWOHOPEwvcU%>M$XqdioNFRjW_nNj5@!)$ob`YB|cNT`@Qbb%_ z85Bl*iL{R}IWkJqAPP|wyq%!!j$(!^($^{Xz{z9LpdML1Yv9Bc5QsSS1n$FV@!Ev9 zv9a-T4>J#4IdYz^>jq`_b`am-`yNMMS+AD%rt*K!&3&4nsErFhKZ;@1)*sXgHmU=+ zPB=ss-dz~aH^UR2&mI!9z)|S9I2noW-c1l)A~$VZ6fFSih9tk)0;`HNH0Hy48G+x!Ew!^29S(qw#m{77M*KNff)wzOG~ zTTKlt5;}~LkrAWWjK#y*77mc+O`uk*wG*UMFyKAU=MG$C`yhY^>!TD`RbhMe!Y{L9 z@>&pr!=A>6ynyyR-0l5JEiDZt8wz@P;S?1U8#HSMpJDiw_yb6qk;1KJ6PAR49@7E} z0mOB5XvyU<{~x-}Ik>WLY4@>h8xz~Mor#@H?1^nmoJ?%nw(VqM+qUnXgRk!W&bfc3 zQnj*cRo2>XcR$asyF<^aI$>sKXN8qxgTf*rP$$D-O|t;F9@M(`(}ysIBBvPv8FpSC z$w7=}+N95ecT=bq5`jXjD=a=3Y~{Mj3z_)KOMYxZCOqN=CpVI$9Ui9}Qn^~?2})FW z%dykw@P(~#Z|}kk?)zT4DKbR@I_j-mPYp23fhyWAI%X!sjS-Hr`Yxx_NDfeG&)Rv6 zgYjMBqA--&Y4QJ#*4s`JIo_quPIkJOf3kfL4;QY4!pm_8G8I@+UsIKt{=^d?-LBDu zkO6(oQVNFcM94Gv;2Almi&_N$ z-lPgHV1RXz{!8h+Dg@ZaeAi2ImW|FAo%ls#9zahHlE&~;4S;-r#QL=W+);yOj-Ar2 zcY?w~iD0}qkQ@;uC8eCrPpizYY#U<#+d#k^1=pJDj;dao!bMotlfy+66foV3hd^E4JJ)2!{tGb;V)!A$7@Y@1( z`iPz?@RHO8g^#_1M;|aN8xlQd4+cwFgJCh#qFRm&1LEXLsYTz3rmPmL`q$lI87+3f zh>cv%mxHH|rVvx|8>9>9|4Z^*Ob)0Djs=^=j$`^ocQWPCcyJ>bb4GOiU2&Rn7SE7` zd%y|#OSYm{lmcTd!%&p{q6tcOdUBR#WdgtUp#uK0 zfdzjC|51fW>lsTd7bW%g0sH1P-%A{Psjlyh&$iIGd*=rR0_wVDY-|K#c|D$7jV6?7 z3W8fmk=NvQy28eH7Tr*5!aJ zK~SB(J+bD@9^IxhK7SiK{czM`k?BGFRg+r)>}%z#4~|EMact)2gN6kI1DhUW$*YGN z54zTT)fWOE^XrZu1rjaR0zrrc^p(wExy#sWnG}a=88aCV!-$xi9GkryosDh1@~TZy zQPFQm+!L0>&$*yFI3&b_7=ty>&t@?!rm9@%$dQ_%dZ5<$z|f=P!t1y`kA{_kGY@Y{ zoVaFrJU>L|7uBAfkg6&P4o-Qk`HPH3{Z9AH34B;s7)Cdtd}!xno2ALM9z1zGWF?ucl zF?ZmSpBKP0S?PKbB@P-nv{+1RpR6CDuct>pg)9Yq2Zs|eN&wg zq9Q}q4Lzn&=pcDbxgBh0=&H~tZ0FkO|53=m__JUFDu#?!@3kLv`BEV(CJ1L=e!{I3 zDL+HGb&z_Q!(?Z788a!IvLcHFhv)Dp9U2_Fqp}AArbvC=<`D-pO+&-M@oNC)Jb*rl z(9N>}M8NF+wQaFE#NG>(K1C*>53y84GfvJmGqW59$Xv+C2J(Hsx*YLH!a?O? z3mJl`R48^raJwk`cCUP%AkWv-iJndb{JY?>jyo8rnNc3#;r$!XxZ8i25OHuw?Ba2& z()u83&?n;R$S3bh8S;>lb_O$!anEG;*BFX)!=z{*l*U2d|1gNEk=A8}(-Pw!g|%*; zKk17v93MQ%RXc>PpFgRw*gHfOKT`z5S5(pscpZ`+5HHTl?Sf%zln_<%KhdPLq`jX? z1xla-;f=qwKY3)YH+|Q{%!(o0aw#9sY_Vrzw_Ak^9iAs&MYqAIu>CJbus+S-BN%91 z$ph96jZ7qH3R?RPIp*DF<^|!YHE1< zWgC7V1cG1xj-ZH0;GbZNv(vL$Kn8Munn*c?UERII{r*txD`9M$50&V2?zR`T1Q`~L z&*LhE6R|?O51Pq&+W?v+%jA4&(s6hB<~Tt*-l$dC@?x3>7YWtyQU0#1Hl^z>*?N@i zOaF+D=I2A{HMxpyeO1a$evb+(4?s@KhUD8fPhF-0mT7P;*QAJ-S)>!9n$EC^GMtm?k(Ru8rT@-@AFar z?ia}^gpA*2^VAB+HNf&GQtf-9fQwW+GMI6l2_Q4B!yx)a67Oy_KWvu+qKD5F4-H9_ z6f4Whh9C*Of_C~t{pG;{^X!S?2$|5do2*52tl>;2)53i|UZqbF`QM==VqO=H-ThCt zUY~p&rntj5F#O{(4Z%Lkww<6)(Fvnon5&{Oqpc7o?! z^f2qWeQJ8Wp5V3c+5XKGEdV{4{e3Fv$Nj9G3x$BRGqLrW79p9XRMwr{*HL&LcH0ju(6@}Ju&{3vDISPM z#&h-sPMFFGo`wT65r$D=A;V{Vr%`tKwY4}9fm}K+fbr6zdiCNkjoL0(n>5}P6 zQ^eMU5DB=j>9L$4!bR#KM6kR;7kl9uKDC>%`{_0qM=~hTSp;K5MG8_7u$)aracK?V z*!mKeYpr-gZuS)TMU0F{E?Yj-uAjcE>(Tr6a#iScVodWrC1V8egMZqrxoqc#5)Stx zet|&W+;Dz%VBcb9H09(VDSW=Va(X>W8c=GJvVA@_s{^zF`rX}KMgu{Cm-)FQJpM>> znWUYx@@lj>Qq`8lAoVom2J{Bbi#XH@Sn%EMj%Vh});IamJ%A?==&SYow)GXhV6~XV zT-)<5yq24IDtZv+Cx{P{s!NAi;eJ= zU6K~Xk++PMhexJt>XX~;+928B-q|pB?7swA?hwH>W%c2??3-FidTVS6q(LypP92j=%T3U_m2gL6r0x?6SxPhIAnVybsWZkc)XMi=< z3`KI8ksVp?!gbFb{1)Sve4d7k8A37f@}Ue%-NCD?%KI@bFtxQ7jM#M7ZaO7)B?E^x z*+v(KPy5YP@O6=#rayjwzdmgDip)*t8k3>fJ^a(3_Q8-{ zD13f}p3uHdqPF#RD`fI-V_S4t#?6P-0}{jx~jBM7?SSFrWI?#+fUH zv)`N)3AG|TCtA812#xs5^hUylt$dSEm2|~xl;L397LgH?euF6B$>q>&Y=t#EmIkaT ztGw_57i4O#>khc)ApL-vkzohX*Gp}v=OiSstolEr`wTxwC3)53o-gHR(Otx z#>`3n377>>f&eruD!BG>%#svjP_yHeB03LRcpuBx>DigmS_S?#W{JW~i>WUx+B=nX zQnI?FJ3jhQqob5bjdeWI{ZkHjdE)_7(yDXPk{%J4eI94-Nn_hJcR2K7VZD3M;fu|u z4Py#GHC9s7`=-T&=jqW2JjCur4b~j|e1EbbL(i2d&tus6^#rObQHy{^QhBr|r>?6j7E4Me`q=lA6&3}Q zxUkhO<0Gjj?;~lo+W(TYRsT)eyf(thZ_z-^I6?jZ^dT83DQI3j2DNG}(p8Erbml|2 zE4>BYf0=Xtyqmuk6b;z#m|(To64<}Ls1pg&p~gesiwV^U{oBX;pG*H*iK2oQv>B-% zWm<(u&qK&Wxj6y<`E2YDNoO8!K+SyCzQg|Kt^Tzn|6vb`0rGbHUqEI1|NAWe_Z83d ze>1o%$E)(D|MH*w$6sxuAp^8#Dv*-+|L+y;k$xl?UE`hAtN$N!2*zJUR4^09;s3dn z=PFWw8o&MU^4F7^E9Hy0dUaF0_?Khie?lV|0CW(rO=m&T%AqzPEa_LP5qwzl&v6cf+A+whtt3zd^1gn>X?2eyzf1NQ& z(G)}gw5~u6N^YPSi0n!IZIrW`(}FD{Ll9Q`R_LZS=jKh-AivjWtV9-DT>vY zHP6YE7_&u0#NSiCpP-_V5T<6^ud=Co(f(9>& zk&hHKLQJQvIHgWg)Le(E#$-HpHn;jIO-eeUMvCHS9Tv&auXiQp^nrm#C96SXs=f()V2kb-Ux`sW>DYz3e}613^_$w|%NRzZpj9;UPoJ!!jIQ z^fe(WC>?Gg@!^K9z5Cv_$g=dYfvAlE?{&^Rl%lqwmZ(CCfghxv=*eV?>12P#E8n%s zOy<`D#mL}up)ctl@4uA&FY2gY?=& zc3}raTs$BCbBZ4}SeQRIB|>AwUfcx zJZ|gv3b6JhLUgzQHY8Dz-U~5lTeKnl%!md(rm!&fK9j}%y~kd?i-D?x;hM`mkrKL} z4JalX@`$^0)+61lue*Qi0$f$;fEsH7Hy~8H#Oqv1wPRb96AUJ>0q+ziSEoVZtHp`h;jpeuAYL( z$NWUrEE%7sdHO4X4^~@f>X@!G;M{ciE8M?;*r%vMM(3C+lM_m_rT;1_UOdRx&t9Cn zrGt##94(y$fTU2>{oD+%RPbI(THkS&R>MZ^_iwzv&}(;Q=51wpA_D4A%0L3yFwWMuZtci-Cc_><}hzY_70T^*?z0uxnBQMur z5m#}?;#jmwUqQ7Dd1!cer|ql?nIyNP1LVu?!8z8NF@4gIMyNip1PqqKn*o!Q{v07t z3Nf(vD%t;Sl?;D(zH)>hE2yygqJQiQt!ZNTNM!4Vit}lzOY)e2+$1RaBz5sjL{=FL z&>v4^CQ8Ep{Gg_q#0oJ2j)JHehyrM6>l(qsqO>q~5faL5Cv?D8bHYUmod9-tzE8!^ z8|)F&H#fjHPN+O)qsQKO8EfL0_}K$ zi8~x2e&$p!9k(6e3Bg+$!K%GmT422V40`3dF;JP%4jwer9Z_!OE~xALgptKYKwoq= z4*47O10caF=-j{j5VNNj zpID%fkHhCO^aBwLog_t>_+wyxy#}IcYKY-_+S;LSzOOmv{PuJMFY>8EPH0l-3jgpz z8$Re4m zdYgxR=6g8wHJAAkQGLs`FOGo42!qSD#+bB8*99P3?`V;fdg&1k>Zbh%w|S*g!50xS zN^Q+*F58~b^1_!TWLR?CvhB5))DgJ*{F4|d?4=T9rhJTwBhcBy5g&lvM|Qg4IAxiV zli>q7Cnq&SDRC^k!1K1J;W1g82(AedE(4|54xfAgc^a)8^D@x>l$DGKhx zguh0q!sHwCrk~N=boJh!cI0-_;4cR#%_NA)c~Im-wHdFN81-biPifM-loOzg(ndn2`|K#L2Fceb8{2@Apnd4Ecfkf9~4kLiN&RIb3fRfw~)lA`9hzo_ru#(lB z%9-D{30`jIu>|P`S=@+}kLVIbOhIvY*?aJX{YghE%JPou;Kaqn zy}9%xYScU`M-bq4R?XV{)M{M)1HB|-o=X+b;1LgO%> zda@FK7##|hI-e(MhW%;|^9_L~Bpi6}z6|V~TCrvZw$|49HSWVD8uSM^L8aDW%J5uU zoqqB{fC?Mi+gNObucZ-(khc|mp)hLllgMegX&=gTLjY)0Q)vW0F;dSsq1Ng|33)&8 zhB@tF1Um^RVeptk+fHa&DO}@eG#8=tDuFClP)@eNfbqDn!XDRA%ga*NEkn;O zEmJ<8$bsjb($V~7W=X^o2aY!RWdz8Cq;u;Dcr@MK-}%0UHLa8@1c5Q_eY4)8Yu6c2 zKb;j4rgT%03gsC0lkfxvrF>toaX4x+h4Q2*~DfNB_Iq` z!GFrgP=C-mKfLaz-k!W$j#Q{iyc^%{A zlePN;o5lM};S6^d)ApQ^u+kcy!{}fMgPX~=_knZeYF#OVY0tWry!dCs+m)}Pd^~hA zp(~Cqee*d`oqlQA1XqIm3@t_knFA-DeLG*?OCNr3(|InJM5_*g8*i1MI~rQc_ElKV zwqyH_i-kq&SxG`&N*AgBMG*vMFad&MG1K7V&J=DV}&s4eYqWF$vmmq;JX_}(SQ z_~vWX{l8fNGp)t+<=V*(`N)?}y2(0~!OBjTM(3DS4=)CYP>O8aM7?%S`+c6$N~DaW zE4eh(+s=_E-GV8yz2e@Z-w71QP%q_hz037@Mx}-uv$|G~$Y1Xtms{{0=?b(35Xo}N z&7^yY(5h;vG!@jkWBQFwzE8jDyFulahu{OJ)d8cSu z$v%K*=QC&Nq_)FB;E{721P7W7s6>i!XcZr|LQ|4sU}Q=@vl%*+&spP-hM!zCDT>5e zDX|nI2??r-HJ5*fCddc-x%2nk&bG=C7V_P?WB+3d`H=5sDD#nQa*#L552qMMVLxYM zQ&Pf!L0_fFT`$+802h&z~xrPTCpbZ#qax;Dd0Wqml zGwkwX56~0^9lk+=yfyi2j?Y$K04)txGrP zr_Va3cs(*7#Bi>GZYxw9so4Y23+$`1#`UeOD%ui90+3GuqIFr{d-CIU8D+>X%g>pg z?S@ac#&unDCO}n*6UgHC1lc45J-Kw>YX;M2EA28;^sQ4=)=7N6K@CK;-<)*r%@`Y0 znB&h#1a%Gt$7ixFH{N35!P9;4Fv>M|)s7tFgI2GFj)=lm%!<3=5!_>?`PItlfh~@4 z_)%KyMXva{t<4I0@QB zJ}SwKoe@raoi!kWDe4~xzVwO%rmSEFg!g&0Nb`GErEwC+KOIX`tSiSDTq}PE%VQr2U`C#V??iAXO#macbdHsz zUeS!o9G6DMCG_7kP8bY7YGR1asa>R+4ownUYgutHkonGHOK>bT;bfR2INk%!1A1o2 z^cO=WBI%pUiyjE^MI#D(h$RkW^0=2oLqp4}sXYRlAt!z>7*%DDqvevY40HSy{KYdyQzdyFmW>^EpuJuEq0F4Gn0r zX`BRrSscRF)^O4IH2r2j4~?d?I#YPvNnRh$Xr6tLhX|uX)_#w^91G+Swwbvk_z>ID zs8_{jYQT8xj3L-aNci4uu+9Kxv5>qq+~)T@CHEfFAJnZ(_K3A#fr`<8ol2Qbvk6N;98Yp4GTs@zXvV5u4j$*-lvO zRRYKaEDm|m%cirV8xKc| z8wrD0T3XebP4iD=@*plOuvLzk5@71H!j_hnF1I+4vfHlHPG9azp~j^p!2lG*yu6QH zj(|_nRT7|ZZE+9op~y*z=`8mVNd*ySIrzout+0jiCBF-E8XJjW4bPip!U3O~UGkRg zfIB2)WPjxT(6OJJdTmXYaTq%pn5NQpG~sRk)-7!QvajrZJ3k2UQ%%D95RD{AH<0L7 z!8_!qm*6&JnVyx-v0kb^%z_A9VqkgjhfS0QH&W4z(QKnelY=!P`Gp%$->I{?X9HSj z9U1v8m!r+f)kmh_rJyc1;hG9|LT6uuX`d@mycv(-G^`nV03e=Ex)Z_eMEEBvmHBkp z(zwyPSjAi!Y4$oe9EU<@ken=-PY6J|GR>?`PG_ZaaRH74iE%~?6ERCm<$|l*v z%-n54%0p)Cuao9`aib?mjr_=&bSIJ=4z`v9w0L)h3-R95TQx02>uS2G$h*s9ntd2( z=x8YzmS_my6hQHk~2exQIAR*HF4exQK;sI4B71xK-kaF23$? z*#g}%P`L(^&`FcGMH_Rlfki)hjM)74Qv4qX9Q7a`?J9Z(tZofzjvee}5>vn|$P%`T z5Qiq=WPaCz+wvqO8ST)#DXN&-1#2^gWWLDfws<~WGN!^Uw>Jxdfza2qMvQJdwSly! zuG1A#I>U%I{4`DBc1H2>TB}@ESNs;h8H^SJpur#$X8rE(opd}ezB@*J&AP8;x^6~9 z;c|exY*XQ>2)15rW*fXe*OGiQho*1cCqY&P%%;HvOx`CPbwj|o=j|JVzpNY^5uj1K(1$%96Lj}wu06=kuIA2;h^EM!&%SpkC+#B zDnT`*@&6gPUv~Rz|+I2#1 zq4(h2eOUB!8g|LDI}2U1T-rHUWfLy3y4xFFjtbZEuk{t+e80(xs>36Shy1NfXO z4|ZRjk0a|RRup#taA4wOXMg#Zgg;s|J9Nmui~F|}H9*6DH6dc80|N$Jm~e2?vw^Hz zP|8b0tkzsDo(LLVEq_AXV_|{P=v2ycS_!lZQHIs$FacmgCl*}1W~3Z_zAwp*QX1a*Fy!BwLE6U z!A+qu1tvC9O0pTccTVvH$zMlBXve7N)jRQ_e#G6?Wz1)S%7LD4tBA|1=JY;6 z97zvC`U<>9J_6yFzYkRhZ=|S;j^%jT0NKFGzL0DgI(Dbg0GjbW`G(l`Lb`L#p?~Kh zxk*&X6$JVeH&ZuY&K2W!g%k3vdgo7|s0Deh+5D>(liqwcv#1Og(9A8l2H8zd>w0r%bGMm&(oS_+)AyE``~CRrrwfUh8{ zpG=4Gw7tp3S48uxonZ;#cTaO z@Qlgp+1~4GC_Pwb24kP^&T*EG6#xD*EB!3n>at~zJ(c+JN`Oe1F0-((u*hij&**ZU zbNRl4P*~HH0^b8?2pj>~5>|Ih0azS6?q5b1KykjGstbtx_?~!PWO@1r1-qwlNhe&! zOrKVODl)DitVTRXe~Vw(`r2H#v)51meRoH#4`Do;>yCHbeb~lmN=Z{Q7%-k|ocB+; z83BNdXY_gJ#K;lwxxv!ulp8RanVGL= zs(qsC>X>JVW`eMbE|#hheeV9CN=i%rZd+Ph%&Rf)Zb%m$mlJsA2atFNdNtRhusF7| z0w$6?Eg!c+s^8Ui?^^FbEsx`Os6L0EFpqpbjkj?};1QkpGtH+OlRE{f)Hl6TLo{@7 z`S5BX%HI$7g>U^KIqsIn%8f$|EmV-3c%mC;`m7kfP&e{NCzhFBod_?cYM}Qqj#se5&9I$5BjqbYjvpa>zVlVN<9Bd3g$&&F6BRArm%K?^38X4vN zm;kH|&jbK^p?D`Hg@!!tIQ;;YS6fs+LQ!!E$!-!P98k^z@N8*1#S6s5lR+$E!P2s$ehcGRXuP;db=Lmq1tu0N zffp1erJp=iPj~`mD}3w`*0Vwsz@A>%7t(c4&?%ZRi(tytc_%s^2=X6RQO4giVb3x5 zCdYfAN3$-8&8I_Uu{q}AR+421xI1uNq#~!(YCwO^{4wEa7?T2~_#72kZ!q`J>iAAE zDJZVHj(_)Ahf7f|6f`84jb^+SpiIn;!cx(4zmqFD9x+tM0dsS(_9k{FM3eAX^~cY^ z6U*F%`8M8~NhG&Mv!)5}PH&wqC`!IsLb(Y2Xnhk?GjMP4<)G@vFkoJcAroQlhwn|a zWyeE3y!|pCmWvMs{mToH=wLddy>#3C!Ko{v!CIg4ii4S#rN|!ws{np;3Pug5<*pL6 z6;hNzV6&+iFzc6Hs5xfRI2LZH*Pmza{aCK<@~~P_8suhTMtu+Nb7lvSr`MzPJW3s% zTB}2-;!|CX91yZ{BH2t-c`LP9KJ*ilO;z%UuX2*;LT#n9QC!m(eM#=*yT$-oyz@4J z>Fo29Xmo}}09zvB^dpC@yiQy+mGSu;j<^73DRHmAxGA@(L+Un0Dyrv2;3SlPPZ?0^ z!>D!E6T*L=^5cTYhK+ujt@jKwMZk~yylP$x?jS-=_``>SdFvFD@ePiv8CR{-7s+|} zd~WN!xPlm3STs)2pzCM$R&XEuz2BvXNe8xy?MOmf+#e(=TE(AVZZagc9ISgTH3ZrG z^(vC^;;8GkCv>0k9#K*##c91Q;6D~ht94{m!p0`Y(H9OWv)#}z^__@)zU~QkoL<;4 zj#-H5=+K+jy-?{p?2FEA=k)suq)-81{UJd0v;TY^J~BzplwT+j5+n{aoA}yIjtOJD zza3`?yPhw1WzZn4AVFgaq^a&ul?121-txK=0B|VPep#z0_5PNJF#?aVv53v<@1RP} zMMy=^mS}&>I1*q~zq-G=AQc@r;X%jWW-A5YVqu($-X>TWwnt`_nb=5E0g3YmVSGXY zc~_FW59^ofAbNeUD$@GqD}$a-YRduypa*C+RJ4EJbhpVczhu~|1^j4!*ut> zaN$;XpRz2^*ghjs1!R_0Ja(wc{vTg`+4_AvR~@0RuMpVvyg#z=&Lb6HYuP@l2gI76saLRMtcB2 z*TGTgO+B+F64I8`fFNXSq$e7ct*-y!``87_8+~f|w$W9-Sx&wdZ!MMN+23NE76pt8 z6@;*Z7&}886r06BtS?D)04qg=1Vu-7ZyPA$(A)WBJ6fi8MPqUH)nUe3zOo>lgo~AO zCXuz0+IlgOnd-UeIpvwvpVj#WS`}KMfe#6WZtgx}7Hwl7ARbNIS55dD>_-B4QeuD= z%R%yg93#!|<~RJ+(AS#nFo6Q-u?0S75g85pI3w}6PynVRs^G6hENf2_6ELVGB-Na? zf&Ol9vq!`s0huPURpoF z;9_tAi)SRrjR(fwFdJQonca)NeyKYoiw5FVgMQ6u9qWrSaj*&V2j|?;HL6Qwc>ZE7 zUggL*b0N$uYu!LhZFbkCY7NAiNifldaKeQY^B=*v8z-tGSq+%?wOf-mK~vFP{=lXO z(%f=Gjp03DU+ZKHPEU3rRtvF^%1rrO+|W;);I4DD-7%sB{!{FQ)=ffZbK5u1Oy4*l z!UOXP@U&=Z=-5KF6xCNlT3C5PGUI|2viXQ8E>{=y9ZC1)CDC#MQq{Xu18fMt{|W{I z_Iv&1Li=_E42OeE;{{VHk`Jz`_`#~H%kSju0$sBm#v0KGF$|XY!x20-OhIk{RaFM^ z0V~mp`lG>1<9*o{*!EbjN42gJlM|^t-Dg| zs*QtOSXg~nu#{ONY-lrE*u+SJkX4HAcyw5Xae~dSM&Vf42tquG{T`wop)5qLu^DoI zU@cJ{8+U&naU36Ts2Mdg7^z|H7pNn~KcD0BF~ zaOGTqSMqla>S<;b)jo@{(gkQS17tSY%v6$r6dIN#aWUvjN>)97bVMnLs%FTAEqrSR zJ+lnlf4pINi{nyu5E&IAl=&#z2CHP+RkjhGzKc>zeX>r5zI=-)ZB-At4?va@Uxhl$c-0hk%|A z9o05TM!6TzuFCs4pi)v<4%+%NEnO?%H^w0y9UUrT5Dfg}czL;1u!8?KEVSd%WID~h zV=2{W-ZPS4ZhTT!Qpo%Jj-x};sN%2 zvCQY+elZ5$-1XCdeRhvO-`2hAshe{_#w0^f-($AeeUeXk6O~am9^2k+2bFViiSQ-S zJAPN8PB+^2=%+3ANPtK@JB)0Ebr;YI0@N*_CuNnLC>=1WRLt^@lV-Tfy=n4m~&;aKBS-0aQ#6YlOucYT_%G_P~;p zt5y}DlHY%R=e!Lw^&dku$ZE8^1lluwvti3|xYFZ&T8}V7?m0Vl6zw6=$xHNW;j!LA zu4&6Dp8$xj_Ggt_Nybv)zsO}<-Wyhl7_Vm~2w|ayo9vcrpr_yOxFQMol%wM!{D)KB zyp`k;U|?YOp8(-E1keum9k~4EBWHYePk|S@OJJmx+4E8MeJlHm1OqYG5q2qSk8g2( zokY_jZoq!E;TnJt(j@?$#P~b|0dyrJV2K4!xh!Z98L!Lx0>FvrM-QwELP-z&VdH^@ zeOq4^RhLs3x66ehGn%c&aJn_y==U5wDXike?}lkCj)}bM z!_Del^Y4Pbo4+#c4Cd~@+Q_rCtG^Gu#JV|&+f@@(M|{X~9A_{2j{41@AsYVb_vo^} z*hy#+z^HACp*d?$Rx|Dk)*Sg3HZufo@okTl1_m%#_b@~G{n0uvUUsLGq>c#`!nNH7ZXqL1 zB4buBG7cIhqH8jyS|~Q@v=nGK)l*efU^y-p>5I`|l__uz8Fe6aj;(!h>uNY+_A<>S z_Bo{xGzctUn<5hy}RPb**4;AG%lA#)mv3I1b z4muR@(HKj=hhQkjnjpucOrk0m@Jlw=B7YMj_k9pKTB+}2Xl>TMA8O>D{iT;hiU00m zwSUZ5se>7DgnP4XNQmZSANsXHhs zsTjzakbS7J=Gw%I4nt~PfOr|BaePDLShtV*miila^g&)t8R$IgDeMuKYliz6M&sz` zF6j}l+dDzH(|`sFd6oFN>jLpsJZ+9g9#>s5`ljF+07*N#gQ*sB;+Xl|is8qQ0k1r# z+L8bqnjN2q+K%1keEo08X;8<2PK7eR2;yn&N*7}KgZdsODSJ75mJUiUh|lNZ;eo;- z%UY=Afj!zSqsE+5$;L>;!yTCR+i2)Y?Byn#c0XS&TS)OdfUOo9$rIqyunfIqnO8bNjGGzfs{v?Ks*KLSBDByx1t2ttN-?0tL>$l3J7 z1fZKmrP{2@)h_xg>@~|!;3e{boPmIn%S^Qy7ShTjY_yy2v%s%B_wxJj771VR--DqI ztZNfx#y?oa?Q66<)^h(>E1^?FjyCux-gol2?uCSn{P2-AZsb+PFF!;YbR&8EMG8d9-o0$&;_c2${HT3u8#Lzm3JW0 zlIlqG9i2L}Iw3 zL%vp2u@YSa<4yJ;eLozJ7mRoyQLua`R8=~D;(`z#Sso^WE=87ZU-?Cfe9M|S$4jC9 zp2q>q`K3Upn3f(buddIs zR27zmIA%Cnsh@V_a_c=5jA_v?8tI)1)qOd65TRdn8*(M^wBo3Rls4NyAoA0!QI?G7gTuwyRlqxuV77~%4HHVLc1KOF5uwG3$?V!{(ju;QTE zYvXg+L`7-oV9OFGN(ZMHB$PGL@SkxLh^gPv+ z?W?MN2Y-;FYp<_|Eesv^0EXpNAZO&#)QrnwF=Nki>u6rr@Tpn<6R!|Mm#ujVv*57` zo}sQiNHhV*Q933Idsx1Nca>xuib1b>2>s0=IQ?yPz*D*zORHmqr?(G^J1tq`Y0#+^ zT8_4?u#ij82dBz6Al?W0Us(}$T4{!Zs7X*!h>htEq# z>Sd2Um}y%$YvI#TUbUL2jlrKnuwQ2?eQ_uJ*1VjO(o@TG`HVo{Zf!Wj(rX1p!Fbau zFDKQ@{)O=3UG_;j(<`bj*OnC2uE491iUPKq^pvfG1Sa?O9J;kLEbzj`|KZeX+h|{A z8?RUO_e-l!1AW}nN7c2F5o7NhYKtZhEwkboFn5W__H^YPwJIxLr{$Gd^4M_i=&o1| zz3~g%u6Z~*1(Yeg>3U^k+m7iM$xt0%CP51iUtUHn9W*wANsK&@6x<1d!yv;j zgbo5HvC0{aDq2K|XnIg=!7b&e0g_m3!tW_HJEY#6CMKN)gjwXq;u!C2l3hG?S^}at zN~|X24MU&>5Gs9j9^=h7G@4&sp%EEoWY8fOa4Z~Z5pbJzU#6&OR@{l-9}QjLLdTZ${f4(Pv@h+B_PG2nz{>p+>LChi-=4ei<{@o4%|D=M5)%tKz$@M<3Vp07_(uMm=ED8*I1#9u z8}&NvRIBF6s&w&+1&T&SdX;Iwfs&i%dkbjc*ZKL7n73?S=yv*t>UP*_6#S;Sn~w?u zs4TBCsduY^)4+UO+xCO~HWU#x*!R7qcAHT1PO9qZetvqlvUw}f+OoSy+T_{r{qVO`%5}aKQCq)CrIFaQarC<>jR662+d1|4~r3OchtMMrHaNl&jt8! z=d^1(2$`Zk1tWS{PQ5vGPFcW~`u8gN;83!A-fZ~KU>Q6Xj!idw+s{WikZ(clrbNR! zh9eL!K3DmxdSYe!6}gnJR_%{(Li~`Q4~Y||s1s^aEPdm-)n3CM83Wa_UTRpxB==m( zRqlIvCNpE+zB*lV&M0_{CRHY)!(G|Jbk zDl15m;E1$M@9b{H=Ffs|DfDT!7w*}Ur@o@0va?Yfml#yaSCiYl@zJ?h;uWJ$yvN9qW+t$Q3C$?>Sf{7;9 z_T0O7cWdkSZz|ny)tl58=Q-zmz`<;VNldhQvmN0bTs=aF>MQ3d_o(srmBc@!=6boj z3j;Z=+&bb>m(!Y~41848!!V>ELLk|=Hxj_cIFg#?}2TwShATbGNvx3mSpVR>ddnR14#kgfyJSwo{`MIXvM zsE{Kt{K@!-0)DR?<^NiWNnydRTpCY3$Tl3f#YIJ+m2^|dzUE_vGS~eMRfthFDntq2 z#O!ecn>DMuKn{k%;iW4~E(PNM#r|zRb`Ws$R*M*aXTlIGYMi3PfkY(THSLHSV~6iI z?!exOzv<75g~NPY#(7XpPjU^4KHeUxy)UWi_E}Tm0~Iq)_N@wD-Mp(sc*T zu;xdJ&X;X_V~GVE7Zi95*BY?P>@DK26R3i-cpU|W->xYI@8isa7xF&|VtrE&q;h6^ z-XA(azS$x0yYtyiHK8&10`;f1it#VVAap_YHCr?z0D}kRC1OD)XOC@c>Uvh9r+2D# zGjz-AAyP*|c@1Va$9-p{V#%8ND`b&DG%<(V+qosiG#qlz(~y#~o+_mgskX?5eEh+m z&MP$K0EUtY&8q%+vk9sWun4f6OJZ?j*@f#5i~+C(NrNmc;q$$Bc!gxh5miyUt1em} z&8g)9y`InBKC<=@{k!{T1vFi;zH%EUvpgpxg*T1cxJa75(mDilRve6PlC?W}ddv|O z4l8=CQP?OwV^`gsa5^n^=xN~QUIOzR^Jdt30>fU|f1!!V;07g05NqZtg=P5KOjILDOLu?p6dGoZIP9-LL40GdWX{c!xOSshk*|TmoS&Mj3$4;{x(uEpN*^tr-L*}F!&vqe zh17Rvj6gc1k}i_vpshFc@;%9Ud}RuBhI`58SSylmFxKsA7psD5!snxB$V>|LbjQhW z@4)>0;edHIk%LeNDsukx19)_%YFIXob^Bvvpy)c-7dT+sc$BL7hb;d{i$|TOCUcg| zmQ2gvFV$n)J99M6Cf1g6Z1_4gipd#LnmChk+QpIhGd497rOLNhjRw;Sa&&Q~3@wRy z94894CN!zfAZtAf>oKAYD=Z%VD@noK7YINCn?_S>$E?~~!IZD}tF+lrmLT{dX9{ad zbZ0qzY<}QW_$gEt-8EH^sY|qe%)WpE6|6Bn%a=HcZ%+#YjZi zw#hD$>g22uTCl!?7-Wo44i~BTN4;c<4qc0IMs1pzdLjs@6fd2_tHw_(O8&Xn1m}6y z^I=`d;cslWRh(6RmGV!Ri;n1Zbl3E$$O07tb?*mqdu4c>0DTHikbVd8Ozbi98^h!h zCTY|;o`+s`lVhE*^Lo2Tpw3kyL<$7O6oqYeYs`HW11FD;x%!35Dk9vYF|5VVqdUmNV{%^vS* zk>gX4LIGgD6-UWIm`ylSty0oLydRe%#gYgi?7aVBN*A&YtwLE?GCps)WEJ?)hNQ)f z{e|Ws?_IavIA!yAbCW2Z^L8GH6K?qkjXQ~*FIAnFiVjkbdk)2Jx4<88TxfOMAE&7NtQPBl%*lxn z{DZ00RB*f5y0xwvQ;XN+)|5PZe_X1a2DQJ|Ad9w7pJ;&~tXD6xg$h z1&d%_(!cdvLZ=8Qzl86U=zGK2b8^Ni0cNMIOa5`An^2Mhfz8z+7cDG6%w2PsIOf;W ze=VOD+CYp)erLLu|QfIFeR}1L!n4M2ZMvCqB7&NbSk4(D9!zA$LRh2fBSjs zl@0YeH5ZMKCi)mQbcv!B8z{_;F^K9lkn%DEk*`vt&cToR9=J4I-~z~fF2a;#2iI4C zA;~c(a883%8}+-elnE+mVL}seyVW~3xc-z{xpJ$(hnVj#`^!eVKSy_}Id5SAcKBUN zYE%LQdb?-5w4DQ`G)7AkD2r*WeKu@kmu{{PYvEbYCGV03u5qf`F_Z4kUykO)`zw&D!HxDZcG+h)#bu|29%fr`s%#r`(OdD69$68Myg3{Hcl8sb2w!xz*U}ccV#ig z&}bmmP!3e2+H^)*@s*xBrO}fUEzKBPpho=c&&Wdi7W_SsY)uUvP)!-O9xM?^mJ-ba z8PB5)|Bed)Zac@i(}eO8^Z22qemLhze(v(c-u;~XatIpBpTw}w(tNY$ROiKRFJ24L zN}gj!+S=2UvJRIFPE+&x_aZU~$3kxoE9K$OVf7z}o zeQ7qFFI6d(NuLyM;Gqi;1eZzq+L90n_5Ra*I-U9PVGFcz?#;8SEUq4d+@rlmXZ=+f z3&p7Qj`aacRxQELV{xqZ+n(Xk;k_eyjMx~!@sQ_sir0-DVZa~qCZh1GSmC}d8y!$J zn7@4>8Dhk9S=B93kqFiyYMOFx-!F|e*~}~*YEF`X5RRGb=)LEGdiN{eJw-#`mKZy7 z{NKL|){b~&&&S6BP+Iw$pzc0p9Zi-;Dzer?Q^vNo*3Et#k7(F2?895kcs4kDv>y9) zm8l(KVbsknT>+?ZS;;pkS_s}lb+WPnFF9X?#2^e_GQ46ysr%-Qp7vZx$~Xuhh{FvS ztp6MG7#!(l?EW)!xkck*vl$pkrabh+vbn$ByCV6<#M1t>*(PbU`j?(=$TYuoi385H zx^ycn;LKY?CWatFo5MVRYmJ%Ah?ug%LX=}XAVSC0;8jOx_@uT+((p2REC~YLXt`RC z<^GNYg%dvGPLyT2cHuu`EPv(za9OhSW(!g6zfmxN0OlUt34tgvcEC6MpBaTW6Tx>5 zj*D>ej;05ht85-*zBq+3<50h*S7Kd>k66W2C@x_TrPt?K=W-*EfYE9bGfq`=u@Nou z(T(PYfkK!P9ZV!I*0@t4<#?=SDC50r=6Tp;=?GafU>63eVF17@3?zd2&)u%8W6Ffe znnRpAyo6lbpmujGGA15=FeK%S1HPJ{_S$O9c4SE4ZMy*!DwAa%=tN}p1IZIGCjEgn zDuSLq&&(lWIbCq$R!z7_DZH=4f)R>n=;kTbzXe3zGl`xlx92rBLhkL;5cbF<9*-2{ zl*LJYyctJ`9>pJeo#hG5LzyQ5#c@EmSQWIOK_mcFB$Yf(QSj@zX&Dfb^}V8iEWZ~=3y1#9SlcIapPq74wlb2gJ z@OFqPL%41%f#XdB3#KBO(%GJ#83=)quu1dHAj-!{?u#9xUGKcru2*~b{(ZZV{Gp z-wh-X3iyMx)AOk>__X`p20GRzq-GK*e<_=!qNUykVM=<19ycSd{62;EB6r7GrZU?z z{kGdrz6cQoQB|o{BWsby)q}v8ZFkcf*9&=qbU64>5WmMosgK_7W{~SXNCC{L4U59u zTs+X>f4{0N$xwN#JE7=qY4 ziaQ5=wOsERo7=71sHkQ92gYn%E=C98DGYds69bohA+w+H@2{wGs>~hN5StF~&FmVy z$6q=;k5V*uK{s46P;%j0rj8<>nxRyeIn@{2i&%`r?Brli=NVjwAd{uxL$>xzNEKMe{yU5^J z_i;0|+;fEzLNeO-Dd}-4LU0H-+7zhpMMf6qXAJhUH-GF|ifnFv`4Aw@fYt%Ksw5tW@oh92#P9_iG-F&V8V{mIvM!wPCjpO`Q1>tU*n_E z71FJ}qHl?~1`eI|$#q|l3h%NG)FXobhGZ8eZjJDf+MsOg&v850Fdg(HwKZ}r8y#_- zb3Aw)!?TmhI~`5jg@Re4&xiHA@OAd9 z%(8_D20I0M+Mjr8gPK+5_Y?3vqFp)mlwu}QwL-%mfY4|q(H~-r%%6E|7Iar=L)`4^ zjFrm`g%_~GUN>mtk4a8T5GUG$c}us#4@;!En;OUx+c7 z*h{%40-Bpwf9;0{yO`#v&C9Cs-VN)nQZR)pv;fuMy?)~3ZgN2ARmWo7I>WhD{PHHf;W~>}jcsgL!JPm0jU)hCr4n&=rGJJ)R8Njg?bG8lB zicrQc4M9}(ib8zVSeENqivvy3BQg`YIW_pHy$|xy9m8iF!kxO`lK}Lp>%$S9bKw$M z1j^2J>Q#Kh2I(P_g}j_H*h3mN;PYmoO9L@ft3v#$wKY+;7?T zt2kX+Jk8#a0nsX>L<5t;OOB!pK^#47TAONcxr-^NsjmcS#xnAm61|K`&F)0F2^)PH zHr_o%jWtD^6po(Zo2$NFt((g|n#^RO0G?*lk;Wr0F$G;uQ)Apq?#>I<8;x3(6eq=9 z&x>^0TPvw8om4TigQ?c-z7Sk}Fu*|csKYRRlJd82G~)6MsbU|Ik(Mo7r>(}+lJ zd{;7NiVwzs3Os^OPs5H{cCO!tLAs!2q3%e^S$&aAQB#+06^h02l;i|#pwK#2{6^N* zZvQhb9PZ$frd|LCjS><=E2zy3>wLKubyLPxd!+H|*2_WPl$j(vi*ko8Rcrt%aeO{= z+L(1OpiTRF;U$V;9fp#`Mk{(nSAc4N?q<=m;r4oaHso;aM8B6(>XYFhARl|n3lu6E z0)+ew?lM=?%JaA-r4^iBYRQ_Uv03ZFR+yR!kBS*0ZuOJdbRi(fibo@5sS)r_%Z`;z z&}kg4E-O>+ZOQw*plvhVgHQwAl!sL86k~1HK0dqN2*$@JAniy5A98ehVmPML8Mh8P zgY2-rH}?0qEG_K}PG&4X%sdoGgk6so`C%|X#k$+>3xF17kbCWrHP0aQLy*QAI!{TI z7l$l(S))>m=O(AWJ9N3c+F)npe}|=R>U>Bh z#~0FAe#^HXhB7fm<-L6sh{&fxakJ)i#gsY*qFEfUnGAEjJ@$~oDzr3j)oaP;H%NZo zG}?_zeADM-4;>-}e%ph1wdCIL*$BYuL?0vK|To!86MdC~Q8L z=AHyfnWSJ6?o{`_xZ|xy;ioJSzhtqz^la@bvh5Wz-qg>KB%!7EzWnm#B>vr7k%nq= zc~0H%qBN9g2wNnE23KDE_1h5=+F#38>FXj>Ye+$62yFDxyo5-z8B(OGZ*@!)xdL?K zC+T<zCAQ)0Ndc0ecdb~S@%UsOb#RHM_hdpfZ!V*1!H zpvlE8`d9b;^gH$P);D?_ZfU;WTT`5Y0t~ zkW^(Rjc)r3H)t*$=tIL55uJuW%iUuTdkF*tRne~MeuY< zOb-*OU6fLl9fWa#_|eVYLg^#or{vxwCq9cdrS1Iiv@c~w(o!G;y3*LtoG$@Z?PF}W+hOg8cIPo7Y~uA zfxO)lk=J@Ug0;1vUJ={EtbUM`3I|{qYej#XF2T6z>3Po4vPVzPpJ_R3txi?>>V)U_ zbdXo?d@`N?#yRqFdF6{LBMCK~DWnR9h7Dz;|1x84W)5G9EDO;*X2k_;LTGspxY`K= zIeEe(V){l`(Vet?e1gE32f~iv`*bZ9p~hqO(6HOzzl_ohjM)yESN>C26V#7pyRA2z z8DDkHTUbeA=OW>%(F1W@767BZ9b$AE9#tb3JQQEyqGG~X)4lrkzIOLPCG{a-cI|%B za?C9q1)-+GIUeY_Z`0U`Hl^<6WdcAH<5h#)-pHf8dx%gqeems|>oGEBHbHZmayj<~ z?dtxUn+byt7T>4cM`&e=`m)R~$4_sFpBRishg&r6P9@c*W~ zR0Mf~C$bNT)zOLHq0)C*K%cDy%LOz%Ehe@^_l!nLOG#J6`Yt z2AnO)`~Sy7y^rww&ZRstXLCe zV~J-8l*;5IaMPMSJr_-Bg%;?rs@qX#NJX%s*L{{{l`^cLB;*d_8}(EF6{@4yJ}x-5 zIxE&1^nt115{5z?X#V+}EMEf0>3v?JgMJ2!{|%uXYoCL{jGE6#Jbd@7&W#S>DU4p6VSaE-i z=0Lz}F|{u3LUjk~PAh}Tj!QwJ|9JuEymgPv_wN&KxRFFSq~5OLF6^b&YKDbVd;vvB z5u*-CRDM4ZAzq7VQe`Rw|8C-GLz|nzf7n%DVg-%|ouALH9sglfhcQMzt=`E)4sdQ9}RiQVHvu#+%wNThQ zC2HA}A>^#1tg%PujD*csBU=dWV__be;!#GpA~*uW_)lEQ5sD#+m| z2Hfh!>}wRZgxovbO5e6-XX!j^X$0gb|gC!>*&rtm4`Ow`S= zHl9QoM+3$n&ljNJO(NlDaNzP36VA`fT)N|FMtW(#P+uX=}~1-x6rbC@P5n4&msTm{7q8)fP{tg*1o3#xT`| zv6>gEvQ(6{ct-Blo6n(}RL{TX&G31l?C+ZlFt^9VG5)KVQrt6g3n=5c1gfZ413p#qm!s$ypfno>-HW*VO3el0L|0Jt-Ed zV@gP||GMr6K1~h8jRy9L_Bu2(LSU$t$PZ)2iG-e>TJUYI&eEZO_x%hLfp6#9@%b_T zzf+Y-5@_B^l+_h1pP&IJFO7$8ge0PktjWlS`=#H4C*6p`>d#~U(PKo4cpDv>`26WX za;4v>e@O|WGg$=baR?$aPM*GECW+UDy~lCh%zdV4NUBuG)WL&nxJ=~$BPLSoQ}^o- zmO&+1$Z_$!lpRFP_YI=&-~<-2N}rC3!jtdS-R!j!mFea(>D1zoMP%_Z{+PM5U21Zk zxeMrl*i=X7O5Qd>bRRI`>?G-1Ztj7$j~yv5<)_ZK{oU~s0ej2?^xFmRC-%ied4=Bd zlId(C(7Y;7r2WS?3A2^sULv)+sgQreFqronI=YM{#NzSn*#A7n^C z+5MQ%~Mh7R}Z8vyS%oT;N|MnO1m}tyb;<0VSMO;^BY712t6%v zO4%~cMW!oSKFsvd%091gwm$CqYMD;+$q9C?+I7^HG!xx%wmKqJuZ zNe&$fto4_=H$_OE@;Ui;TL(_Tt zhn)eFuZ&3y8Q+e+WGQW#XW^s7L;c{4DWQf*K?Qu+08h^y7mLe8qk{9T7pi z7P2@OL2tL5;7j#s-HAf!;h`E<*`dCE9lXNA3<%1#F9Sy(-c9j?K%!#&PAori>yv~u za!qmx7TFj(NgV8jT3hUBzBFH(oDu%J;%`fIf`=5!<1>U>)-xb85_g&pp*fr$%&IW=O zCEGOVR|aMjXfYkFkoHS@$bWE@(&oIkJJ>Y2fWoGgT0o^?Mye=^Bc)AjjiZSBUH7$T z|JYF;U#WknN=MQs`c@cTJIt(dgn$ezJ>Mvr4^%8H5Pw*@9QnwC`7{u2U+zTo3Fvef5?px9q*5=91v4>&qKS zN_$>>iR0?Yys~huyxJZ4c!MR+FDiT)z4{CuiV{X+fCs2aNl`j{KK?-$m(lRaAuXjV+e81fO`|`30{u!Fe6V5FS0GfEbKITu= zn9r4yO;29&C!V+0!Fw<--Jd_g=F6}eHR#6KS(<_HG$Dd$<> zHkKYlUMCbB^X&V`)nlJ2_r%+gBw-&rJZl*l{E382qXYjO|NYy)Kk+HXQ-z!;EKYZY zyT(=8KO<#3IiHgdbR_O0 z6$#;$Gx(g(ur^&s+(UNA7j1H&0;7X(o(`1Yck>~8OQ)(A2n+vb+5Y#$-~`YD9E=|6 z`{lnDm=OT@P~Z+~qIcrY1)L$?KmL_ll!qniu-|5v_Jja3gZ0am2A@YM{u>9Wvq2#t zAsE#DzL!W+vJfMnQ3)tTp!{}tkG;rpCA6$l^Z!1loB5vuw00tA`L!JM(_Z>CumGq; zMY&{Du5U!oY)CNh6Zmq=9^-^RH67N0{-!^m@WRC%vn>=FUMbK7F9nKul>g_@`OiyQ zmo+pjfa-QLo)f70ugSn94XntAwX1?&u;8s8x9sF;9O#eqM3Z#Mu%q-V=)doF_P_ZZ zO&y4{%yrGqv>#Xh6)69udj8{K|Ns6PXg;C}LX>OqQX4NJF8$y8)qm`)|Gy6zp#J;M zS~(Ct|MlO1(Es79K%Xm>gy64pkQ=PPt@uAb?myq%O@c8yM%Y90`26$lJZewy3F&o#j<;~0nkvpT}?w(nEs>ZA!@biXEktlf($%w2DN8~MS+U|dA3M9 zyW73G$9?kzzhwU81|ZH3CY|*AFLwGiJIJU{2i{HiekLfn9rr@81s~}mx+au8<7!}e z{AMrO-ra?J|7a(&{CqB2LmK|G$(CQ+4CSZ(dnQZVKNrV@b8Yu^DnAkqV>Ergqz+Am zV6{i9506{Bm67oDO6P6B?kD7@sK+l*8G>}b4YzC;$d6v*dt}U=Wz_f$l9ck^cpp6{ zM^9M{;ojqP*_1t?{%B3wb{{dt)k`q9D3Ea7`=y&XU_lQen^R_ZEnXWB^2vXmSmD&k zDLd~E)8~(t8LQ@gV>ZN7LPl^Aet!NS)SO5Iq$EpD3K|wdHa=|&CVH9kf?HLUB>fVw zqrIX0AiupMr-rz%^$n8i=vg9I$6sIx+==`v%R|^gl-$&Rc#>n_S+$y&s&UE*2-Hoi zp&0KNn3X$!j6Zr=?7uZOHr|!pX&$$3*s|h9gQ8$5QryQvxr6P@pF}9IHg1H`Fh!FA ze6%Y`%;43a_anxD?9-zJ-}a`ji!VeV5}w5**D+-%9l!n=-E2P@ zv%Gvw1{G|7++RJ}909J62$|7&+fECg+g>W{$Fs#=#g8RlL_R&SK|@;Rs^#nFfs}I6 z1!@O=peW503MP)QR`8o8J-esYy&U}Z=Yk?Dqp?Wb$;mcT52?>L%KIfe#qw?d0^Sw& zj^0k^l^v*J9L7|v9n7~)h~({W>1R-6q+GV#1a#g?*x^kG-fNVAQB;(exd|fo=BEzl zC6lmOD&m=yqrqeQ$&=>9`mjZ7Kc4g)S;e8N8;r)B*UL_0sTNuJ`7fc7*DXSSb;F+L zfgH7JxaT)FiI0XR!+bmD&yWe%Z$t+iBQz&lF8HCkKbVoEF)LQ=hK@$1a^ zbNfjvaIr+wJK{;`FnDo=l`jy_KWfzDZgNSf1uV*00RRL)!rVBuEMn$b*qyab*on+c zLyp|;Ws2m~XnbGyj#vCYT4nOjS$8W8%soiB`n)WsoKj;AA0LMzbvA2}!Y8#*;J0^S z2d|GiK_L7V z;sb9P`Eds%1J|Q`!Pxw{P!RD3htx+5NrBX>9!O2_Uxw?kSw%zKq;z0 z2-lL5v??8!;Z**1RzK#;F2b}O9gTzDFk*dWvruEKLgCod+Xe>@r(ORHIChuRF^p<} zqOp^i82MeVkCWy4TFxO>5F+D<1upxkzBv2Ij_e^HQ@ z)Bq6u9&;iUuqK>y+GXXBT?}C6y0A8g$WL6k4Cu4>pR@Y#4iFFYL`NBn9fg#qdD68T zL?K18{z}9jx9DS5jjJb2YRrU#B`Il`J`kXl1ieIp`_R&Q5WW$z&dkH;0{{DQoJi0&f_&66)aX<(( zy`YK;3H7sZ>MZ_Lp~2jr`tGqS^J@dyopgrsBo9=g(>EBgcT#)Rowj||8i!~XhME@H z4C+8N0U^kvggPIMm(I9AY(L1<)R6{`}U<5QJ_~ekndxzJ>T_0Z8F450CA?WX6LJq|{U~L3hDmQyp$=&Tx(`PSrt{7wu!_t&?PiRju zFr1fya7qFJaouX`qS&-%VKdpCTM^5@hQ1I95&1^p+Y-GhFd1ko2Si>iw()Kz<_7$( zcZ{r}w~yuOA$`puegc}|3s=>qIj;-!&3y?!jcXrZC8xmw5}Y~g1VE0~eY;WfC2t^h z6Vy`=kO5A-Kv6Few)PYePch>f+iJ9J+FdxeFht&;xLhr{A-MnpWg+Z|^De6&{PA%N+^%Flj}zodB8bSa!3JbwK{h1GPQAvnSc zXCgw3Sn22x{=3ZYjrDwD!^6Y3z5WrXvwpN|Y67L&!XZziXHJIF*@__Y`&&T8!hNv7 zL2Q$QVWyGYQ9=Llzrb#c|C|N~Z3XXh>IkB>=DSHrdT^gpv6@~xuXi3GE$-SymGgTB z1*KXzbxDTQxj<&w<|qF83H2BazcdHVRRtU(m!+_GURC%nU&06erNfqzHPv>D{dyp} zwO}K=mY0^I)-+UAo%2zmhWK~WDi_uQTDO1Tc0OKU`+esgv}rl*75C%O7jd7&$Zu!I zerb0<9#}gZPHL@^2HKvSlq^OytRD>t#9j2}OWmB>xEC3lb3BEIWxNtOe=5qsWCjv| zC#_M@v`H5g$|uODUWTburL@N*LQd6mns-nYaNb0f<~-*n!}vIcD9^ndCLLWrV}T`$ zN?3bkfg$E;RwB`0614moI))_)5#mF)4P%&fs$+Z`e~#ded|b8p`sdde-D8WAHPpI! zRy0EXtj><`T&j2XGcp+V9i&oEWCM?Ia=n5mEkJ-c44CJH_DCwsN^``wyjneR zH~%h3SA!w6MPVVPofm!h_=1*_8^|W|3z=;IX5i$ucVi9u8!KyujfNKHe!TmZR5*TW zOf{-dY)y#<-f!PxSr?vgmdU=;Ja1U(O62oDugC-~S7CF1`Ggj?YRF&nd?4?$+yZIh zro7~K&z)e8u``c-f4g^j3uouWhZ~$6Qfz;hGLwPjZf!0c{4H6y6dEzdhKGY6uyb-u zKJlkF3HykwypY>bWlYW;`r8y9_J)SOiAEfL?Ds1Kdgs=K2>Yvz7+o2tNCE!3%3s8( z3!BJ+@0|T`QGJLykAiD*&vl>4h)4)Hc#Q1mq_|Tc{VrA^i+jSpb%PS&BQS~u3v>)S z=zeGiYcZQZ>3XX5I{Tcp=Fr9h+B zwZD80@jw5PR{T53r37~iRY1X^FR8*~;0AXpV>ALB{lSM?Xq9$xi6o^Ou~ z*NlUeLhLlVq`{5Uiw?RRM_bY{PNwY(f1Ii&r>4Tw$9(&kYw?y{Na?q0C0&8?$7JOa ziI@lFW_Q(Odo8%bNq>%A2-Vbs?jwsslkuJgwG-vaoEonA-Tm|@yq2Y3eb=eF8N7Q_ zhmOkDcc2V-+>>W6B|xTx65Ukf$}J=(iDWzL;IRriTJO-c+S_oEk0=0kTy^L&^h}wRXfd^qq)B&UhiEk^RrFl-oqUFKQ;P;vC(CN${ zqUy^?Fij+MA>@+nB66;KN`%OGKbE{DQKy1y7eZdDy&O)5+=u2vde!#ZybrhP&=S`0 zzwn!2u}|}14%ITj8>EiW5KO z{;i||*OPdu*qT#aCH*m5PNP#$=F(=hgiD_WhbfPK-G>@A7Ys>^yn0j-Ad`yKDYEP2 z=s_x!d8hBO2mLjqu?VuZ>xH0dIp8%s#CoG#utZU@?Fg6=&hpwT@^S14LHx$L&=o_U z4TP;l)txwx;q-ZcN%z;bGl&?+1jpB>bj6P`-YZ~g>_NpkFO~|Q8-45ZF~nzV?0Kum z$bH~X9qS@O6^B}tImk#etMu!V->~D-F}Sy`Reuq7XfHP-z0#_cDBeL* zDnWw{&1$?QpjmrKW_rZ7Rt;gTDpg2Um|>wdxVHb;=c>S%a^p1~wS;hKYEPl|QNY1= zQATxausMUl6hHr3tI{f`-(p~ir74`z;}sxH0jwitEMC;WL2nZJ{H$XtzVk9;&81;G3)Xs;uFi6D*7Dat$f3#h z@zp>2=%SG>VrvA;^Dn7lx=Bc+{qz3Ji!ZL@P<-W|0-o5J%rsQ0E6tgw{0%V735_0u zf-C&y9rksQB{$s{s z`%mb%C^mc^csd^^wWn4#p<^~Ue45^E7{n>fc%QREb)~fAmsK3fAKPC&^gtMl6x!Cq z@Li2qXw&5dmKK!_=H>w_{4@Lej$R?248w@n;Jy>ccIrTk^Endb5%t~bQlT|3gX%1a zfF0WLWZT2Mzf#2Rne}B%QtP8I7N#}FNezQIoZdanM|F09h$5LdsA|@BiW=_|uUzo^ zAHwh)AXFCx0AWax_77#*>=JZMoAaN3wG+1kP3oa=&MXHNCxD&2(g-RliGNR4nKIM4 zN2?fnX$sx>WsSh3$xkYZJqINK_Q zkv}i8iV>DalMM+w34u_COP5CmsqbbtM93r%lB^;$!gN=XQFOi4#*y%48>$C&?U*J%ANdG9 zJIf?<2>5RA=*ZS)xUDOn<3yJvv62PjjuP*}u??9y7x~Cx2`XBe-GG<4qSb00yjX1!}<#U69EP7-%y^)k+@Q$b_mo+LGBy4qVJWGe~BvcCcw$f4IKkL&cw|PbH|du zSwhCb1M(YGYM9IwqAGuN(u()9{Y7hHpw12(r`Wsdi4Q_8h?{m{Pt)L9$*tGBt0RMa z3y`&Gy@~8hg}0-#u?sbL(PdOw4g^1sq!1ko*X#y21#aiowlU8Vp56R3f^vXyy*6y) zu457uj?1l~W2Ry6yMyHmzlU#6BKQ8>8qNnYVok{f2`y6~=&G6tZ2$0pwF0giHPHDl z9ReE?xY$wjWA^(RR=ZtmNu;0u9M>T*!xPgokBaY2su8WN1gf);4$t1meI_*&9eUdH z?+<=(HLo_6eciKy%Ro<*pa6x|9Gy9ek>NAYuRDC`HkO0$uSi0NjQjC-Kxd8D)3J9$ zPY5(Ls#&eC={~;kGGYp9qf2}hBsL6I*0~K)>K*=@hd;{swTO;BIDgm zaR!ZFxFp1YiOscXd%G{+(wS(|FKH%!+45e@Y1n+^6S;;7uzK#1A(3FRJPu#p7J4{S zf)sYFX$0GiMYnjeq@&pMj8G%h#P~$am@*Frf=U79j$##FasZtd2R1s_3T`KLJBh-z zb4@m?bFhLaTC)^PBmO1z5%1Hju{O0P?awpM%hVa5w=W7iOM1jb-4@4XnXAy#o~=SyFX|yOQ@AgLbqjx%TwDFB4+#re z(40UH~$H0OazMh079G(X%K#K;&CY>aU?K z(F}IO-wj5<*f9Ea@=Kd-oxqw|ri#EJJWeb@Xe*cpsmb5fQpOskA#zJia$v4eY`)@$g^{O^%O3WJ^>)E%Yy{U;n^HbX)d<<)i-P2aPV5p9En7orBeiIxvrG zGf+{`xU@7z#x9&r6hz^inaWp=CO$yK?TYdNX7jB5GxW@7&KCtVtLNJk2u4=5*WjCj zI`f(Be7+OQMcrTY22TG3_p~>d+=^q&sTj_0Y}2{$gl!eQlmM$MT>X%l4!K?A;hSQ< zCi!r-b=ECmEc|0Ua02gL5onQEwl%gbPAa(b)_9_ZBBTjWuv0QKB!M$Q&h_ip!sK6W zTR&XdbxV&B6G;Dns40^|pStyBctYQ?oSdD0ZV7%g=6!tW*U@)f!gh-O^f8&GHr8;P z5!y*ZC8gb0iw#4a8Ib6C;RC5-gl(w;<@EH0RV-Q_=)Ui>16u7?t}M_waQ8F54-&d= zzo~^VnZfAk>Ddd~p7x(T9@cPgT1P&aZ;^A}?kHVe-R*~}Tepc!@%!IGLZFR>Zr82t z_ub>((5tJN#2y1HNhxJwdap=6n(NT436&mxgno4Wod;eIkiM&lqA=C%Iki(Y%|HI> zgw@s#YSN~*nGcLQ33~i|yPHN2d93yGAwouu2@nQ2O$^og-Xlg|N!TIc>INHpzO=rF z;v-i)Y59V}V~%>v-}TZUqk<}1#|Qa^DKRoA_gP;yU2JsK0^;&k<6^mEjm*r}(M_c1 z+B3dPN1_!<1G3aw;McLHWD)QA`wD*gF-N zs#4PE^1|_9VnX{H`T{m+lE7QwoFALV5xoBVl*F2rM?{lqAPPmNs&g4Tu`W$^svqj2jAX{OV|EODsJpA2MXuZ_bj|Yk=*Bu4Ow9)(TTDz&sT& zck+{*iHE=|RkP^9flwY$z)(#s4+E|+JVi*wuJ`!8o$;js7RoGgS}{zhpTfyRq)}#g zU?RmKWCclE>IRQT1d~*_1$QG=4X_){&M5gzan1P{3xSoB0uuo?|0@wE?T_emn`CsS z16rzJ%^|XnBJAp1k}p0sKY-2BTq%GHK#_0b*afOA;j@BOr&0^UlrM~s zJ1O&La$kvEhF%76-+DIFj+h+!?1=B<7eS1(u!P@3mUGZjyzcWAE-qK?khp+!UEHRD zSCWL>!2XR|>Dy#Bh|@9!a$XD(8qy5hN%5OI`=X~MRIJ@XFZJz}wPL{yZv*5pe`JBku9#uBI>Ik{nnFlxy@AMm$`on9&Bpkl((Uos89wQA= zM6CE&7Abrw)E%&sLp9#>1F4R9{GGek^CwKq#v}R3*>gBPHv!;i(iLXe zuB}blnH+I`Mn_p}-?X5bNtyE(x>QW=)ZHgQw{OYM1ygiaUFwK61D*#$HA3HECZbE6 zt3B7brWt}oZU|h@Cjb^Pwcu1)Z*DxI@b40nW{)2V2M&h#A|k%fq%R3+uvc?O$HeyW z-N3h*>xRBc7BR|KwxAYA93+$=e3T;N$jb+>xl_%zzl-*9 z_|oKoNK8?r15ZyL5d#y>UXK?+6Gy@{z9F;hN=NpJL_;%cRzsj3CJ;`f7H*Z*eA>p; z47EQ+JI&4kHHy9!Zg+@AZO`gd||t%Qbp&ATCc-f4_1T zNDIQQJNkIN8hRjfN4Tr4$iEv9+udyd;*LYb;2?Z{%rF%C#}NyB)3{YtRdu|Z+UXz3 z^Ny_6X@&ODE!$M3@3|R1hf*seQ#l6K?mAe~BOrtxbUDuqU+)b#J|CqS4@J&gZ@)%` zw2G(D^D+9q9Kb^6L!6hoLajxdO!6U8N@I=gxc7J=f{I69t+?4n;vTMTX~@mZ0p&(!W41|^Tc9Dwx#Mwrku@S7Q!dYz(2RAZ?O6X#85%0uk(LvU;WJW@ zRS<_W7G~q%+B)p`qzXox;$}jiV8dI75tU$*iECD295QJ=;PPSfM-@tV#O|*-=g z)&-)Oa3!?1xD~Je?>11$&m10ui3_tN@1#qzF?e)5T%BID)pw%lNT-k&nrvoKs%7FQ zq;Nj0f2SOWw>1lpKv~A8+A-ncECD36bGmTi;Y8ijXv7#NR zIWfqaoCK@Ggu>}57%?LiTbA^IB6QD~^Q~N@4~vDz$9hGvSj1eM2LiGZ8e+h;$8FqFzKuL*g0sN@d6;Zmf|7%yQJ+e*q& zzj3!%D{xgkY0@Y-(vpz(txM6k`;aK#rwgFOXK>gx7a?`_WRRbsy{rl~D>uX4){f|` zOe9SmBOp=kjSJCH+ko=_t`d?>=5sZ-qO+zEmbe(i7UW^X?bqVai*KW&t^w|jF8NlG zmqT#_>Xx~H5|EINl^?H0Ye}U53$!Llm{24Z9o3(06zh(FjEn}f>?;WZWH?@%b{@d? z-#iI#R~HgS6(aM38FCMYUNH}`!-q;l6L&*1I;$ICa@gVL%d|Tp6x&p_d_7$CO$xV^ z-w#Wq1KA7DhB=bJTK_L4jsaT8Fq*}n`7;IFs9v!FwA^6W)RgJtbaL4xT(k@5My0mJzVdO~6NKK#ggv=Uy=ac7|lQ2v_IdS3y z6yy)&KKOB7>I{4@{Ro-G-R!N!Z))EMgE-ol zY&`U!sSh%BWk>xpAC$?-NpgeZa%*c_SKSV}^^ZUCAN=ia_lXYk3Hrn{O{G*!@@l+24>BiDL4McrY78S>up%GW}U=Zc@w?ysALhUJfdqu(tj6oFzlHnn`x}ai3Z*{XB6wc- z0Ak-%K1`lGNd%=&KV68Q|KgWuZf=o%o_gw8{Oe!$gE^HCn|&w>3i3hs2s2j1amO7a zf#~zJW{`Xp#o7qlZKRGj%Jt`S#*@#^aJD%j&} zSod)iR=r<=3-3BuOx;ILPQ#`})$;bj7e`l%7oR;{EL~GjJ>sG<7Ul?6ZZMr^OLaTa^Ao|bZCqFto*bjVkT)g;!^WhDOGNQkb#S%#V2`tg_hBy##^p$` zV(Dw8c<*1E;cnv#K9HW5fOBp?2xDhuA!|gEWcyh1a)}I#N|NCdQgQHUBSkPNUE6>c zf4druJl7TrzIt^h4nL+>Of z>_}wIFaqp$*SpLh56?wney%75Hb3$r%HI7<%&uSdqzaY!Cph`6Lg zX`fso3-3Er0E|5Thz>$bAXXbGIo?G25P=ojrI5Z8_w!_`90F) ze9Dh5$MBQqb%;k0*=Aptsep>3U_EWTWJPG)vK_1Ld;o0~HPR#n>*+UNjo~LBDVY;e ziVD!Uep{DTAAKE1U+PgX&OKxb^1gAH#2{!`yBTZ#@`PA+$XT&iFye%{n0nK9;7Ce9 z(b*@UYSD58+#VS}h2D~v-o>#Bh|`Wj&f(Kg`_($sui7ZeotCYo@H*SYLV*IO z6h2qHKJ1$R84z3uDy8y|o{g-TlR>4?j#u7C?b3A}-9~uth;Z@Xva_OAtQdUlE(F{@ z3_oR_q${-!%Mk_1=Eq(}HOK4qN$^U0VjTSKp0HA?Vf7|7tlB6;;&m67k%|$g9t}rI zQm=7ZJU6Err4+XR^&_aAX_lb~}=6 z7L<8>;m{lj77OO2rXwRh9RX z>Cc$7?*2(Y6$|_4c^$B$GTj%bSm3f~fqT(9_pJ6CN&tT_fZBjllnOKtZ-)=%fo3!Y zT!>6G#O3IlEKRZF6O6PtE|(kaE>{P?>Rt@xYun|ck3NyU`5<4rX1ypDwr}4dd4w6s zee2d@&_aNLDEY?+KP@y4KkP8M*-H-MzuqG^a>iqzu)=kZKK2BT`^GUcvp;?MRIwUh zT|OW<1D~3jBK>k!jr>@T?J}kT9}L%h_j(biYpQEH&DgVzlw`v+ne`;NWT-x0K6dQb zi5qUb85tSrsH@xUhQJQlcX@dQuD$jL@}kFh43RMqDypjR%Ku&$#R6kM&_bcKbXPdQ zBo!Sjv{0a%1!G7ggwDO!>%qVN^(dGsX~y(vvR~wX9l5pP?z``izD;h7X8hP=Pv9Hh zI7S|l)22_A9MLAX$hP{lY~k#-4OYe!m04`#N+y50A5b~);$5qdlp2S&CPrfpTVzUi zR4}j@DH9_`AVKXYWJmupcJCt-Kg`^~79Pws=IbiLAD$F`{1V$g6B{3)H(m?LKzD7<-mx(Q( z+m8<(-GZv()`+@6EO}uE#>~pXq`A3bu@K#7f4);WQ@y|9U8rGU8Bp za2CFNWv5hU3<< zqKC5YzRPTKXdDt?Gb&(TwOVe=_{=o;TH3>k z%T7&FC_Cy9DXFJSW%|C6`?yx{0hPo)CWP}0R>%M&l7t-MCk9kPzM z&56wqJ&%lOY zLBqPOyMLE`?RX&SQHfJD67g9X@H8}G+kf8>3lqjhFw3s@K1as%i87O)G%^qA;|o!@ zYLgKI!)is@hl>%PosQ8LpC+yViNkVGc;+`S@>|D>(A-*FhMLcoVb^<$;Av^?V09qE zk0={E1`XzVUNffafH{`vPub6AC>(emc%S9(*6Va()&F}4b*neS&On%QV-CXC*3pf} z>|fgDv$l&Mi_!g>-zkg+;vCrd)CVYicOmSKIO&V+RDZb|^(!{Wb!^3xdsiX*^ z!sEfs+qNLVW<|BfV`A#?$-3;%oN8iUeX&@xTC7;uSdT}`$`G&^V`f_$oo)D_z5!R} z=Ofu>N4DL8=1{f_-h&TGO_ldkTJGMns}xmkPuSgoiihW_t8hq4inv6iTCGU38VVKj z@Y%;2XB)n=VV%4?Gw@}i)r$G`by(BZ3U45Yoo*NG`{;g77d@tnWT9dqIXOA>j?~d@ z#^rM1(n~JJrI+q@*{!dy$8*oUh{vCJvV(lt74pDi-uo*lPsL)RByp9;ra! zjhEZF&fKTlLG)Ie(QPC9ZX+LtyovJ$ZJGnR-CSlKV8ikt7_^8fCgTFgb2>CUKG0}- z#?si>gyfVI(H_f-4PQ<|ff;$DXB>k3`~rDEIGx5!C%2dEG}4h}Wo6;+zy1-=Jo`M> zu3awyA}cB?uyW-pFb)G14Y6h_DmhCK2#8QmiwasGEL*x9Rn^s~tgOPi^&7;3fy#l% z`Wz!4TvT4TXmXmFiP1%cGCN{-IOIjnjFrKcn&{w-w1Qx%uBpL_xe% z#;0KC>PEEGx@23$mKGzJpq=T`I*z~ZJ;$y|e|`G&Z~L-NtR^BA36aaOYw!75zN|Z& zJSf}P*zwpbFkBqUoES4J8}@h`90_)K+c`@WMCJ&?8mX<>i;`9KGFG#9wn;Y*x&e$o zET@w)#N4kxpHyzFT~LXMb90fD?!frj*;w{Am0cDjq}nlhW+v=$7Hs>n9`&VNUn^Bx zo6%D5>R?eomx=PtO=zlY7sWzGUc7lbklAp$U&JTc(AHq2{bGy>_G=c-t~Xa3(dpxp z?MOnXWh6ng2$t(#>4cfeZ zt7Nt4@FTWZ;M`duLNo)FI#QG1ZE2I4^2Gc+Al@PFAhpZag)Jz;V+;h)ytx>DT6#pq zDv1VUo`a7+`BY*vaXZc3qo2cOJzA~u9gWrqp^Uz=$$TB7rIxvD*5PNYbz9ooFgiX# z?j5D=9&B|wC6@#w-9XpMFKWS-cMRQ9Fd?A;Zj(h7jCD4(8Di%8O&~Jl`00mH*LQOU^FueWtyAnuo`0xV!?B<&!ZUn6h z824bwk}vVv>u*Sw2a2G_t-25`h#${cQ(1?K2*X`fzVRpLeL+U0mIcPXg5~5L{VoqgDQr%_J4s^9^04I zqrTFG+!0Bbc+@Z~duNv@Lq^ZaLiX?^c~hpgC{hWHdaxS#lQM<^dU^*01o(B!{y zLos%~^$A9wa{>~E9@*VYbib4v$z1NOvWdm5V&aJyxHDo*&@FpE47 zEkIjI1=ijFUoqcL9#w#}F(Z*Z=OE2&mY{=cw6ltWOb& zEkNDUb>jZOSRs3}@YucWE_j&6GTPdKahVwCG^#MJfGsHj{JpeS)WYX7gwYPW*=(Xb z^E+Lzge(<1Y>)cFaZr(9o|mqa3X#=V|k;6w4gsy&^vRB#Lw{7s9C$ZFh{>2S#SD!lHPLCU$mClG`OMw;Qs`sT76XVm$o zazU&<%$@epCxbyVV-^eFsoUCO$C!$b=R4#J`0C50$jr*ZdFP%bLA!6ghq ze7Cwn?4xrwRJ(jX7*zlOAOJ~3K~&lMZ=6GwjE;Ly5a5HbEu`7zvT3G2C>^ z{o>@^Z1?+_ycASd*T@60s=CHdJcPzVcLZ7$+<4Q^!R!;Koq95|v$K(wmMXq=^shVN zgyV7AX{SgG0=C0CX5liG6u-IicUZT6J%#U|V2j7URcqvXuyGJQLlAtQD%4w628T@_ypf6VB8g_{IU>o|SF zm#HwfnwkMMt*3BIbNRRL-2evRJLsh0NXtt=GELy8W@6NoASNA|gXzcTORC4J;+C+< zeDwJH`<*W{Zl_Ny2>6@XSB2N<9-FF$uIm78RJ$njL*843vqo(VZfyRn3I$h;L;koF z2|`)DqXi?UWgs;>K{7?qYNG2AGR|AX4>W49;cZd7@YGPiVL(C2B*7QdNX-J>f||YJ zUeO#$ysD20QS6-9!m8Y8mEfbhZFflJ1j`S3yPZ|T7f9D*25JsFh4;%jRw2`jS z9^+NT0(hHR&{|q4%GOxNOGN^In;lAsu_zuR1mDPgg1&xSb6vE_8@a`9!_*tTEm;CM zGc6Vujm_}4IN|mC#l${|GyPFRjvU+9wai&}7P_v8`%0{V1cIW_<#WW`->4Hb>R9N4 zV3SmnR8Tam-Gcfxn^E?`=O{S#FiiaZ#bUXTH}_y9=4XcjGsfzuf9rS+`dXZD(=uQm z-6IY8JnAOU!(q_ffrTkM>2wgQ$oc5%nu}GTm+K6XJBT>3E9JT8Z({d_$y+uB^A=wK zd2tS8+8h#_fB_zN@72rB_VRAA$#vhUc?=!~V(p>88XQ~so8l7JLGxrQEu0 zo47GB0ObiMoPfXG{l`vyas>kku?)-073E3vG1JX6J3BLGT|W22+_r9&fS28Iqoo4J z!($z&!kGvP^oyR~fu(Qm!tjad;7m1zRb~jt9G)mC7mvPtEMEWfTKK&YQ$7PV2)_F9 zT(tY(6)S-OYZgt%I`JKRcn(Mul#;B8YLRLkT#N`1 zxO+no5_cfNO2XXc^LUYe*mOzLX?569`_*dfeDy;#Z`mn9{g|FJsjvX^?!8T7K$!Ig z#V2E;gaYqzcHf?mAn_=og>oJ{xBFcl$s8eL4`orXrzZoxfW%XvFwFC53uRcLa&71Q zg-9Pi8bueJEXs$Z5xHpF#elLAH-v$LLDvMD=eykdOtH|Hp^E~?@0Vbablu?WdIuVT z0Bp$#5<{f7sxSs<<|F_M-xc^5UHD6@@p#1rB8jeh5uKX-Bw8#uH*Xl`q-Wre~;sXZQF+0+B#7z z%$YMAk3Jd~PK7h52j8c`S-=x9Gq8!E z&zJ`vfBXrUC4p`vhaWy0f4lq7$j!~cF~=N*d+z;*WOFd<^OJ!j`Lf~j`q19)#F8(* z#HR}vNxS1GjKkmm_GeKt%st|8WMpKbiVrCUa{b$t@G|>!589fGGW7$QF6=A%qndgjSr>jTyNFxG!Q>`m(;!YX4xwaiX zmtO*Ux?BCI-{tJ!YQgizw#+OPbb}bYuddNly8q5uYw$i32uLbE1}S8AfS}cil;L@p zaqD%+IdmG5$BaZmUN$_6jJv=9W?31C%S?l(v899WItAX8u_L-nBPf{z zSU)FI_K8en19T-6AhQGE2zKguAIFtQasylRSEaJgdAeH=I?qvdoMUW6nPXh3B3i zDL9w^`hGNTEfEucvmT!h{O77~5T&vhFa?dkfSs=Sh!w2Y-_rjU`a6Qy^?6+}P$rcw zwxlGajLbvxj$PCSge%aRE4d&K_LL-8LRkmG8>1GC%Q1*^&p8Wco^^)A7kcKI=dpP4 zk`C_|tVXVNJ}=t+J`8unBTg=IKRkXvHqnAK;76j(hHDFk8#k#y08KtW{##v%9WGag zcmz?y7&2cg>4F;wppbzM?KZS}0-`|R0r2<9mPfdVmZ4!fI-2v15mkrfvGPsp7Z4zuw#^q|j1 zNuBtQ`~QwhF1bh^5ahvajL&fEtv|zk_ud^&&1kjSBxNVt{Njr*(a=yY?NiW>G_PbE z@$qrE_S&m(-#vFrYz4+f;A4a-Kk2KycI`Us+Eo^+Psz`C$gnOmFqm3yj>YTq$#;(1 z=cAiM7EU_JNCznmMEu8@YxB6XvNCbqbyrK%w1VIaOMAOZTrdtjWL8A2-HYsF%T|LM zT`hXzc4-8+-L3R-DF}JNo_En0T=d&nIR3hcl6sM?F}?xg1XOHpMq>ptn$V)u@S*PN z@oWS(Gz7~0v8nL5L)kr;;UkpgBi2aw*bO1Fk3 z7{T=@fFE_)7zzBy%m>WK;CA^i=8!CmKRkD@##LdUs^(gk1dsH&0vJChN76geI-sT2 zjjc;+M7Zzj06EqXlhP%?q{qeCK$?RG;q~}2`&*-snrkQ)>UJ8z%GeGg($|$b#j1pX z8E2g_+)ygeRGia;yf`dDv7)%-53_K>cPEOHLSig*HIRM0p1=9XzsT+**K;|t&^2My zS>MF0JFmx-A6^Q3vf+y_v)vB61O{~OtTZC;(=sc{(j&4hzWCFvqRYPsw<^B#(@LVP ztV&#VQi_J7;OIl)_j<$T{XVxFIkTrBW9oPjDmwJVFM%LjwakVCq>mnfq~W=u7~wIp zo%pmA3_pIJk@X_-xOp73uAnb}NC6e__#|K>l`Nc@rZ0W|v4?jM96R+N%{-zHT3AGK zH}B1z+UUayDr8#ADkX>@156G(ZjM}{;-(Zj_Jo{Fj6D4qz#ov90c|{owCbQzxwTak zF^Qw{G3u=2id@Uc89XkRePdio^ zclR^lQ2894edr;$^Um8bZ|)H|@q};UuYdVJj2}0)(*%X=PuD?@4iI3AZjfN9CexV>-;elmJA=BA~?8#7wNK#r>KZSlMv zbIj4w0N>4)FI!>UU;Eyq)>Hyr5>ShUF3}v=8))J+HZBX_Nk2rQ`H}`B1dp|6O6nX6 zF()KWKtWy#Y!;iCimh^2;>G4QU^L-@EPTMe{q}qjEa?t$;f3encfb2%hpYhu+27aM z7A*zl&wn4^x$+7ygTjxl|A8nJ-gx6JxLs~cnmiHbpLY(kw?yzAY3oL_%e2s?37uI3okeibLJc-eQ(&XL0lYIkAF<7Sy^FNTTGlV9yi_a zBRu-p<6y4rLl2#b>wow?3FsJ$FU^zR|KLMh`R&V)n3O2Tn3$M=x89mB?ec}_(n~Lr zV~ACs+}?fneO&b&a?8Q>Km5Lo>5VtuhTG-B#7PFXbIviiEnT`?+NCu`zY8-TxcqP= z+A!_-e2i(P$+`tA-Yi93S-S`lvrZd7SOVev@K%9Hc6X;HNit0K}CIO@Q8t`brmIOFDNNY76|@zQ!Z z|I>~uz`RR}L@D8Q`LJmb6e81NxrtSsD%`t-3*=*SL<^r^oREU66c*b$aop-PtN_%AuT+E~sgFo9%9Xk@k zzi~v&nL_@)Jk2d=SiQyQTV~$9sQYRyMxA*)>(-sfo;d~adD)o$^J}p6iC1KHK4nw^iq1b7Su-aa0Rba34TR!KFvTVN zNytdUgzub#&5yqLsf&x~vMxg~KuG)MMn@Df!>~Xx*_(1f0wXMHqkCw~%qrB>B#`3+{&I zPUoH1Q(JkJalHkD7=8Xp!mDQKTKJqUu{>c$1<4c=zCjx9EmVvL{0@n8VIIFF&Ms~Q z7KdGwO##0zrlpE4!C|<#P>`hpK0Q_L57g_}laoND2*<`kg$d(F^tXt+%!-X@*|7`h zQ^q56`Xn6kn;&848y~@0Sqm!0iq1X(>66DI;PryROuH*oSTdlpIcv>*sl-3*@Y&d~ zagziyHtX}r#CO2rb|=OsC*kazT&$vUh*?tt0lZaLYbKYJD%^jdvpbMxn%x$5F<`&R zjJAuQq-dnT?+o}wkwIa<&F2T>I}AjzOIpZUT#=uTytsH=Q&1rD0rTr>(Cqi)q^vCb zV8lpd#W}=!c3DfaWV(;$=0c?YlGm|Dw#1V53msXc9U51jKJHuRi(-p6I7N+hr ztw?)QPxm=638-S>z&!6g9yLA3M%Yqtaq>(=S|a#^0Z}Yab38R}7^cS=xxO718`3PB z@LbcXy`orH@bRbEv}p?_O`3ocj{hc}`1gNNQC< zQCthy@`@F!@Y?HdhEsB}E@LA+|NM)XGG&qo;XnG(_eGgdUtcGI6V2c~45-Mw#6CaW zDt5n+a8~2Zx8BCdC!c^3BSzq|%Pz)w=bbIe0SfPQp1%+ZQM2BEX^WjBcT z9^8ag@0NF%eU}&GI4jP%Wg5oL&It#!HCv#{IwHgR*dVneN~H>?phU7 zn2SE1?!Hr4Y$$KTC;#4x(|%-R^&y%awhmZfW4QJgl1DV4TG3UHO9DMR{al431uputd27WS4>8DR^lk>s0 zqKn7tH8P-tW+fRUb#E4?O3a--6$kz5`x2*sZ`_{#N}mU;&m5b?B(Awlv*}BDnD9+ReyO@ zvTX2JY0Z*4b`)m*=7&hgNJr3S70U~rt3&^IGY|@z$;=At?t2PVi%2- zUhC=8#)UIkSQ8WAEUl2tBKAbX%)P6w_zqK1X}B$#`|x~42XHpGQIP+nu?Z*To+1HK2F}h`R=Ag2}BZ5#X=+vUG6}@X9>a=41mgn$YKrIqfz-lcL^3+ zGkAl(E`<%cP}t~28Jb1d6L)C}jSUSAc=E}o@P|L#g;AqM;*yIlz&-aqAU9dF&B!rE zFVhVF?6c2;)7d6t;LY&MFTX-*X<7JXKe|rjcg~)ldfG`iXy$ZrJ+RyCSiNQqHgDeA zp*~-tIbPn3`NzZMCxvSkLn&c!@P`5@ar_isOn9u%bU%y{aK+`9;E+RRAthz^%v5u8 zGhTV+HT>tvrzE~Xqz0J+_#1D&joP|;Q79ZX`w(%RNJ<(R?*D@i7vRY!pT?RsYddM5 z=?bxS?Rxz1`Wq!Uvfy@uK|s#ww&Lx$?9z)cW5)Eb;)t#=Pe1b<5)%^f zlb_xYW@V0vpTh0A7bOeD6_;O%S+kwhzNJz2D zFO31BXth9pWV5hNQkp{oAc`Wv_(>um6f}_6AmbC*<962x*OixKz>#Q2Vw#cK(A*aK zX^RQI5uS=B{1y>-&8yXF2^!a~mDf8P3w0iD#JK(`d|E>9ACcz#9NV%t%iwJC;fM=H zW7PC?I1&tnOGCL6U%t8vKDQqy{%~U0zcr%iPK#_ibc+!Sj!rvtv%>2RNV?E*hh!sY z3u4#WCR7#Ex4$#D$Y!W)+5CAms&=$u-i4!)Ta+TddG1qR>BJW=?ZnD=%0w{`*_O?2 z!ImX8c;U7cIOg(ka?LOZq**-eUabD00-ry-9Ti&{d!q9=*!QtVABDVOc@jCEzo|KM zjF~C3odN$OV5?31x|vc?rt;*}8|U6)w}*u~xi|Z~qWm<2AyQau-BpQ|cRqkImz;r| zIWv%unU2IHBX2x~_lA`lu;Y~vP_;117g!W$0a0?9Y5SsuPxE*wtW$B!_ROD)+-Lj& zZ20H1aMjdf{(MozWv-K2v=PLD&{Xj@yqW@YyfixpIdp3 zDnI!O6yB*2$eb}zQYkW>qFETcvV6Y5pmE#I4skEcedIF;Z2tGFl4ddQ=tDqD5hKO` zWY*rW=!p2OP$^@#N_tDihv097%(zFqnWE8ZfsZji;$puNTjSyk?hzSkE#e$V0kk@qB1g&cV;b~q-s8*&?o%t%6p)k{`k#c%FM(YYrgd-ilu;Bh>j zx<-_}Fdt2uiZS(u%VDt?>6SaR8}WtL{=$Wy;jOplJk&{E-H zzNzvS75dr9yD6<_P%=_W8W>5Ma!O5hI3U zctHVbYU@y5R*s6wiXJuA9CvC;ij14F9vDrSfgl--v7(|9_4V}~Oef90`AN+>-8k4U zgE0EMUX+zrptyLuynu`xHBw%6<{RW1n%Xu2G9*9R2@G|x}Uh(~;i9q|cPPUeb`&Flbl6)**83i~Np38FZN zc>n6ud|QJ@vR0V&!aG=il*|M;60N)6#=;vrFEEQjYrR`Gkau!MyeKjJo*-K4Tw-ky zT`MU)PTU1Ntji#Vp(5@Y@eCB|7a@?d{z>T$akXGz$NF7uIR4s+_{O#4WuJduy%=?+ zZ5@Jgnr-peX{nK%ZDf&Pea{|b#$arR*=LT#IlnqcuA|SM-j28L+aOj0W*_D!`=a~9 z4No71q*MnMzqkW$-Max9!;&y;OsX71LuEUfs@f%f1K)CESsSoDo@>TgVDL&RCF}_{ zwAFdgP}zp&YL^^CEbA8IeiMf$pL`q#&6sWut;6Tp=Ujk|8#i}Qes&O z{SLpaR-e-vocyTFmH_Gs$#Eh)YjJTy{E=M+}o}0__zwBJ{f&n#IDvyeFDN zr5gr=2Qqd{w|!Fy;qi*a16f5DL%_2jaaguwps=SV!`IS^wq2EItEj=m>n_BEE6z0w z?_2-?AOJ~3K~#iuS0%pq$sa)%hDbq~0UYV?o>-78A}LQ82C+RLkj0j)c_D-zp*fr>Lyg(Z3NI^+5FG_}Fg z$Uu4_=;EH^KzvSmm)8t;($mBOqP?~u?1sZ@oxc&f8qvojAv*){+38}jK*d5!SrvxOnSn$9 z@Kacl60q{tyHWn>QpwEGX>g&54aQ5#AC@n|a79IhJa4I#k5yO2Kw~fgmy+c8pF;Kw*4>yl?Ds zyHMfwpp5Tqp+JtYN7eVWd=I+ot~+q~WtYTkgek!peABcTjoyjZ9^GEZp10 z&h+COeu9My7j;=Dx($Bk`w}OX9{9&Sm^N){hh6Uf$Afs_frke6`O={W{W25@#8%G^ z#Us%%4=4fNEL}k#w!4i$f4ym(FMza4h*eqxZZ!D~fug(pV%6n3KKPhE@UM5@gM|15 z$q;eyLDNOC&|RHv+qO$SUOrtSUr-r)pth#A!@B5p*e5L-=yJgKfDZMoRuPsvtYf-C zw;LrTMxaS5Jk0GB#3>x}yZI2OSzAfTPU)8G%ze3n%Ty#ZH@ApZn400p!u?|@6^yz@ zx}et9R!OPIbU~4Yb!nNs)B54L2bRY$x(s zVW2?v6`rE$xO?~;XUn7BXN_$^pry9GM`6WmNPY{US$vM8t-)<58qC0h=8h4c=01^i zIg?j7BLhcYHdcarE_|vO+rF%o_yfF+(0zkSi?N622#?yGZSb@iFOCsShZotl*KK51 z;L0wKH(bM5ptTVDO39ALtTPHlAZV_2W8H$v-5DyP>O_Af2hMyM=WDm(gvUXvg6;~> zHI+5hJ6ch_-N;xV`-kp1v6KpCd;HyO*sw_iLsNK`m+)Xvtb|%x+RR-C?voZ)41!o* z-QzVEc^r|~EZ1`eobeXgDUepzqjAIb-A@lbOS%v)DO5VkYkJ>z453Ms1VNy^vKH+X zwer)Evqa`m_u^RK=u+WnYL$!%9skyxPCkQV1p2=fS!Km;r2qu68;{w!1Lj0bxOt!f)^%H`^5Un^WtrH!MlAI znzu(hTSC`sS4su8Wpjk;mR6v3X9cPko6nWdy{Vh?9yt~X3K@j(7bQZZh6$hbuO4dos&3)bWWQKqz0q0-I$hVLW{guJbI_cNH!;jRi}D!g4+ zCldl!bJjjN6{qFK<22+LRrns&?#9E`as=R&dtg^>?a6wcJx?Hroi10{3ZbX^v@kHw zx=}xX;&vm}MdY@~cAWkIihW)0!*(223z~g?tZZqOKeIlm?ai19JTE(UmKyIcA&r)K zZ|8NziJ9nosyQ}(a)O1EQdB&wS+frByz`z|r*x%=h^!mA%=alyCjI(1zr}?Yo-dO{ zjMv3$sl42#Y#nRll-cey4^|71_6` zpy{@5NO8rJ9$D9{)6@9mxMRf2VEyjucDK#!drv;Q8%KBT^tGNGpK*hf=3}wzuHO#Z z!uQ$UwbCDU{W)I#uo>T@yArc~s}=6L2BZ`fAZ5%bal2u_#>xd>z}wu0#DW|Ye(Rga zJN7UMs@Jq(J6cQ1yLKT74S;>cdIonjJ_^sT*VJHfQxj$+C1X-@5)!ONz;0SCtaY}c z(&Op(`(1SZB*w9Jt@enn(eXR$_w>%$n|;_Sbv0BR@5{pXS6bA*_FCWGU#Sq-x^)|F zxbdgP_0ini=Vt-0m({D+$|M~FsK+P7!)CS0?1F((g!k2gob3N6MuBYE)6X1EJbphij z&~=51h2Q`F&QMGWW?BFG#}c5jw*o-y9(C>4PJrnqOWUyE-&=9~HRF*}n1s`A znkudV;sb57z!7JY;FFAD@WsnJ#j=1IHwLOO_Qag?i*WFXhDkPm&n0W>@X5c6MN!aG zKejlF1j964Z+qH*Z)~T6w5y^oeO;01em&zM&{v<92@K|_MG5R{0=yS_n%l7DiT`2p zk1t1JRtCmjekR6TbgB^}g6|(R^|x8kxOInQ81c2X_o!It%W=?hq0#Hb$4!k`*tFXU z&rJD90bYM4eIeU@o&LVR(v5+xq@Un z*oPhg-W+=?)N|kN{(3t4uIl!-|DM{{?FIpI=0kAt;w32Fu>)zTDPX`&o82yE-b|yp zY13vr^w6Vt_~FMSuw|sOK{*aR0-U(y%Sq|FMpSNXfg`NFWmsL?vMq|chKV}_cXxLS zkl?`~xCVE3cXzi0clQuHXmEFTefbws;aeY7K+XH2@vyb zS>7tvmV^1Gjavy+5h6#yek!!FI8V4NJPIF$=T6P~M(*g&H@X^g%UU}=W5Yyev1yEs zDyuI0Tgx4Zs3X(z-8mf`5)IsFJxX@t*}?|Z2RD3H>hkQk?>wuKky&e<(~>2T_q|Kl zt>T-iHNf8++mKcaPO=F_f;+j$t*S==s(c1^L$alQHtKjtl-Uzc zFry>io4VZHt}d^QJ-(>YiW4oIayl6@0I1m+Wo{3?OWh;|MJ`mQ34~+V`4gnHj7;)O zI(wUuQq>$M6+aPIss4I^LK1@BRTy6PDa|sQB}|Z`Oiij8&NRz;{=`;DThsvtgAR<) z@tKm9y_#4U8W_J#S7cE|CE=7;*zpG+(;tWLI#jz*zd(QvU9IunkOBVa8dN6;BovE? zhy-~&dl`5`i7gkm_ZVR@_HdqpVNJ|4F`tIMLnU@kQsssR<@uo8z$JEjOLaRsFbgT1 zv_G`05mpmT+B_%}@=Q?-`*?V53N-Vf=;u7 zIb5f4Cn}al>%brTK(P<@zPfz42~F&drPA-DPsfhMP)=1NBXa z;ilrN5AR&7N0M*$d`GxC{+bv>@lQY96c4x$F6t1n`g-s7ExTvEcqC8c;HklZ5lr-b zrvxD@{GUH?3ZYbLn57jXQT}U#ZY7dGy|YVpjQoEd`oC|0p#iGak)|;U`ab@@Z~fl} z%pkZ@Lj&qe3c`ZF|Lp%X@Dq^*iXH>5`}eE=`CWfCK!OI$3J!v)%uwmSJ{)MEAN#Hv zb=v;m&%^iW@K6CFfbaqo1o*;<^TShmNZ|_IKYGjz2ZYoN(6T{<@$c?i0jZGK%*;rD z1Ru(1D7q)ZwgafKcvVS4)Vm9tdQJMsZ(JgRN!!o_8!0e z<~XWDc?0w?9M7(B*Ty)$`A?rrmhqUbM=*UP%b`Fk$ zni~6`Z2644pf&RlcDf=-(MSqA@SJ_N{t*%sI;@*viSqK2cQpdh89!ap!K4^@;F z_GrU!a=HNuq2Beh(2-_|@+3jJxwS~k$%z>n=EKb~FfdTl(P77f+Q|`vE{>1s59+GM z!itL}#qr^Btaqh7qM{V^J+y~fFD@>CH1=Sj^%NG~EJh^a?3m+9dG1XD{S2p@o6@px zBHG&8R3ceJ>B;E`-`7G6+*)c;hfc&pyQ(;~y!ZF)08fqM_N?j`TGL|1oM@wH zo_8lFjGot15Q&M$Dm$X;-Hsi9U!(i5eybftcLk7DVK%% zhbQ(%+f<{pj;_Gi$Ij4g?uoK;yre26fgOSOCzkmO(_L74C1HiZ6{>C>z zM6xknGR=151z5{vp#s2h)opCDXZZFq>+F`fqKl>iKnO1YjMV%p#g*6C`0dvPzJ~}1 zTvIbGUt`@q-qIG)8u{a=PqA^?(K9nMt7-{XY+o*o`JX3+#AW)zQ?$Q=1NFQi)C>$K zUn@IKgXwv|JqVd9dBgTj7%Rbp%jWy*O@13SOBCPfy zBJ_{skq8lE$(gFdh4fLLLf7XH|M&s_nXa0#iVTphAf@1dUVAy^Nab^hj$GOK+Go=w zBRqKUt9WyKZ8^BMmbHe2xr$Olh@2b}P>y0InT+cey~u{}E+=qth4d{f6ko6wSQG7U z5YuKM18ChBRm4+sI?4uEhyhT?pa|j!go(8o$`fMnbbDez7r9zr^z={LI?3jjUF4s= zG${Z$1qokKD-#nKo7Rh=d=OOEUsHCj^~@ld{7bsomyqT!$eo$@84QL!a1br8_oTADhu)-ToT~fI3YB-j9LH- zh8Cf(&b&UeApQiVDDwfUNE9f#*7e>|t<-5lF*h%3UiZK1$Ma{zQ1{wf(rC1jXto_B zNfmn2IbPO8$XR1L#aMefZNTBANBxsRtn2Z@5T+@t0~zGfs>;sE5tM{lGx+FKNeTK~fQr%Slb0xlPi;~y+fOQ6iE?2cK60x=UBN)3lw0_DS!~6AKaSH{jVfystx)m+b>5dsuzz9Bp|A2%mjMe>5FUo+UfUE zL@lA~>=uzA%)f0>Vd5ca#BBLfp$&{#{1p6ko+HVwr?*2)3Ucmawpvy52q z+CR7v>D0gV7Q_gEw_;Xmbx3Lxl&S#!K^<0$;r!`}sXY+jLxCSOBdIOu>{L#K_jy~= zD#YPUhA3~&&Ta#5*kv&e5``nNtmyb${H zeI>k$p%~7PkLEp;j>PApO!R{|fAXZJ#iIacVo*c;z;|LSpURBl+=l+i--{J&x9zMm zBtKu2!0TFhx|2u4BtDhfJm2$6+q|{|g%xKXN1&5iw&3HwQCNn4tAm|s^dEqF?Pc{Q zmCcmXN-d+mUY{P$=2!kd{C9UZ5K`^!zMPr6g@niyAZGbmNbuvE&X;%*(vKuXhJKSz1zYfj92hpF|5y>J|C(a5nZ?VW`BX1|8wJ__N>**O!+gSdZqSqsM-| zN@l3_@Dd|$v|9X4Dh9)~y}Jt>L1ZBGrdxaJE7u!^nSG0G4Ed`SU(J>OVU6|A{tWi& zPDK@}Cd43pCn*#@3sgQT#YgHGkn7kBeRb%8cjA<<)o!DiB}Coo>T4v&-0Ss^+kMu{ zl&fi~>!mW_3q%z^4zd48gho&@)h^E_j_MDzi1=@x{{E#ee~!|x zY%^H5Y!D#n&!0c$Z7>@`h!asltEJCh#n`~sqv>zBw+dJH5AgwNF(KvUhbRy% zO+|%;K$u$R*3#Tugnkwpde@8sY{^ts1}17bWdJnUcJ%Ay*4Lb2Z1cjk+o%A-_vZ5w z5a(Tn_{N186XRn%?nRD>$;6lEK^}g1zh<=^NfOisz%E+zp!)9>d&!NZN z{QJ!Gim`v6y!v)q4^6?m4X>oZ@Vzv4i<)|PXg^0?%ej^q%cPML0D`HgqwBkoLsh$Hb6%X;;t@TR-nJxDi)< zQ&Wa&QH*j>fw%#>Zc7Rl89CFrEBO#kh1@3@eVeVWjHp4!r8Xn8JQ*P zcSu7BtgNI@GvBk~!$ce+@~Aha;XZ9PVg?vK&PREbtrlC6#~2t4i|h`Huz!y7m|khl zpEwtkmcq?zI~6H8@GjNZ|JtoqQrK{x|E5zLRRjM)@BpeN_}ta=+}$hR>b~dh8{&}f z!smT+hVGg)*{BwWJ^h)|I99Ayf%6!IcL?VJRm|33BqiNLTv2}}e~)EBZLB$T{rg3s z`&C%~j{We}j@=zeRv!#*velOcSG`grY_Se?0La4~5PNGS1~PHOp^W&S&lj7|d#~23 z`NZ?iZ##a8bNa`(od zmH*K6%tB~<{JWagRCaT+KOp=cLM$a^W#~a6Gi!&9+<53*t5z!832 zpS-=Cy@d+B9H8bZc>(e>KlI*1$nZSG_-yu}VuxBnHPtZA15NJ8$jOn12tAMh&tm^M zQYHKk6&8`lvk-8>u3m~7MOTsctY61yzZ!4jzL`mg1MW&k-`Z$vKYKRrJ8bW64>#ur zIeqFb`P#32s+7hEOG+W^@>I<@bh&TzHh6vTi`iybqo!Sd8KRDzi)-ui8ZRn9q`>lI z_*7K%r8lkyz0@u&I!?b4^N0-%X|rWdulI7NLaE)0@A!5VSA(Tk3^+1Vkkot<4@N(P?DdtZ6^4G@Fs zZ7EYBQ5|_!k*C*f4_pI?;%O+KKa^n1&NjGS45VDlx1FK8ga`IRdEU%^q}S{GcsM0N z&c}yeXEG+P`Xz~)+6-9)+E0@^W1<-ygYrY{mIsgmNs()~eLv>qMgWv8YFsbw*)_Hq z59XW_C;%)9W@i0!)=SJjuTS}bVX8St+^0Kq>R~sqNgQ!TEKdigbmP+NXW4@T0qv3kz_xlcduBJ9Ddl2rVFl_<$~~V z8M3T9X{6n^>Dsq`IpJ#Uc=g_Mh4C=R9fHRg{K*Wc4pe);JffUZ26#R53jTdPGSB=0 zJW8`z2)_e1R_9$VoixC!-CWKbx>b_H2vvo3%ibuKLbwm}_s4Rfc+n?u5VKDz$WjvWa5wiDF!+iK78f=xe)I20v#YCi!|;fkQSxkkIBy!B3W zqDscUwWanWl?GrIvGc-%SOC@7&-SIoXx%IL{11df_}%_z@fJSLH~0u6TAIn zx|1_9eD?g@_T6U$&~sILs}0<$7p+UHs>CEEVE~6`8cf>0$oWW+j{N*-|9r9LJ7&`N=!9Qwaf7Eye=V)-@;@jJ z@HCH*F~k4n0{myLj@O_ZTixCSyIura^_i&|QR{W@9XH4(1^g+fsM^-7Eg}EDGyVbz znXms0#C}en*Hh49dumK7)jN#K^u}iU0BhiabO* z<|dFU@8LO9uaXO4usfQD!{^M7fPfGipB@>N!3jy);ZKWmi<YpF#T1z#zH(S=g5) zc58&b6MG4X34f$R+$DKYgseCjJNF^9?Rwk*!pT8EM4sbiyOWRbcfvmpP_p_;XiDm# zBKCN}gCtg*_?^!dG(_(AEGlX$Be@9)32`|>^7J^P_lRO!W{!#fZJg1d*iF}kmH35! z1MBL3uIWQxR#yw*!NEZ;^dEz7W@Fy7JN6kB4Z%J2zdVlihdnNi-LXXuA~Gj7HrBV| zd+WQjv@|>3EZ6g%kc(}f9Ldia7$_k+DY;Zt2@8E*q^lp?s@6K>qrX% z_F-IVYN$RMH^50s%kyH6Ez8Y^d~1W|B{}}v zh3_MYbl%%zW}ch?s6@x0#y*`!Rmp!A*Z&UKLd+k}AjF#n=|%15OI#os)jva%FaU@m z1?>(}@}EzHRNK73ELb)Aoqk;U$GzxJNBl@7yIH>+j;^EO*P*x&qwDX6*l!Ky0y$-Z zIjBIgF*RL9tYUH6jBxbRzPK6JzxwVcBL4?#zu!g*&U<(PpZw|+wiDc%3qneKm9XRbOBnwX@MZ~gaf`|I^+5x|5PDo;86tFM2pQQ_}@F6ip1j#U4$ z&wqI&5-ebW_2=gw{d+I`HQu`D)pr(5f4&_sU2qWRu#g*%SP{^i8og_Gv!cwyaX3Ln z`(@&%#2vOihj+y`jy{h%@Ib`kISd+d@NCquAs1VyF3(Qm=>+G=BL*Lixkngmox%v5 zUM=eg7q0mCAPEH;lBl;s`|8f?!j;D`iNHI;ITEVLHIFt;pWIdTvD;AV+}{M1C4Z*v zX7m_#>yrE$EzF+&*}#ji*C{gZ_(s(^0<)w@zW4YZo%*g}eWh`X`hw&3;U2kWz!l@< z#AxyCj+~JZMJ)pp+z0G=^;6BFRrR3j)DCiO$s?AAe%+Gcs<0;4CFRmDZpXHFI0#Us zDt7M|0IFAs;Li3Dmt<9z55H*SZ#qXAS*qg?wPu21ISYqpaA*z`y@YAYILi7U{0I zsjk=!YdYCBWR22*key3x3UvLf_JcpB8aF+sd<;`})vRp~ypUA~KZzbQm=G{!e%uk5 zoEqrjVA=XgHYzA`dnrbB=A9&{_{kx}uj_5nG71Agy=ULmMAyQ}*tAX4R{5E>A7J|; z-jQ7D%%5DWuX?=s4GtEkhC_azk0^-YeOHp>jXf{9o9P)}_ZIE9#wvqpMVCiQx~ca z6HiOSy$7F`k-m&m5<`6N2vKZQUK8b!qH0y)Vtw{@mEGpj5U|eOZQu^O%`x0}!kZGV>?6~UnS5UoSfduIK){RpnDdyom z*ZW@E9C=g%WwQ{lxcn)&{Jir?B*r3uZsNx|>=SoXmM?jnpkLJJm}2O5PP+CNx{01) zI!50)WAQDyGsB-JKI-*O!9uk;&6$~eo;IMJ(yP!>3YQ>osVxyNBX5o}w}h2XSD98h z7J8^nXCMn5ryWcjRl(Y|-{Th>57*H`FVI<8Suzvfm+@(7B{vQ$gb*VJB2#qTF`3${ z5%@8PZQ{KsnNSfGKl{dSk{KHp$_X&FHzU}#U(AV2tcNVkg(be7OC5^mzk(R3j^SeS zUOxw0?&@ z5sYC^d{yMaHmq@CM?f;KHjn(O_<-!%-+<24b_>_dT+M1@HpAO|+P2mogw2?cqh96C z)46~$I&ns(IeB3B`mmRqpHHTVwd`>Qxqo>0p_LgUi%`gbAepI)+k7!NShD@`_mPYb zpVQS09KivcIGM7z=r$6#K$_bP``1EDB1xXctZd7k{Y6a(S~Pha0VYISA+3N|A*6JP zOzJTHn4ZcIHL3KOf~CANL})TNSjFg@bbU*AcV4w`+9-94{H0g39_9AHeXH;6j!I_> z29vuN{~&=j?qg<5=n~>mC`4flO-RLUH~O6Oz9C)~ihJF~WQ-1^I0R{6K#u2m4p=k? z7lx|d8WA-2QM4m}M*$_xsUr>~}1Msc{0Ptd44k`F>zu zO%!}-_y{|9qZ8(!sBxlt3up6Z3`K$l{Moa>t3-sH-39jHg4f|g^5)M2Q}{KVv>pU- z!g{g8q&q-Zl zfO@Y&2sEQz%#YFGZYCdljNLJS;WZk-biuJ6SNOv^Jss(O%CMW2w0_-3C;7$qF(=G^ zkYC(z9UL1@c7>*;$vkQjr6rT7^;J<8rAjh_p~pnq|AN{4deYJnqTErceG*x$Ttt5N zXSC*hrWcGn-XV=y?yvK%T1@mi?Fd8`%GeRiQqYOJoA1UE=R&WVYP1%^!X)yOO6KDUnCcN~U^74egBZeG=Dl+rp$ z{G^dWKl9;MYGEOM&82BVoSwOqS*kF&dIs0oT7(O6MZjvTRS~Y_7L^j#w=dcWHeD|+ z)r*OH1CTqL1Ez+(ffu=Ia~B^H6Fm;`(cz);>WWDA9eaK)bJlM^Q^S)5WU)CwP`;l3 zL~wA6eRQNGw|KpQC?|HMJ=l06kx*>Tfzsy6h~;b~n9JuE|6)5Wj1h(K%h1dsV9xNJ zus~c-L0}f`Q-b&P7h`#%fML76K(&ZRD&5{}j~oy~SOFngI%6?tCwIG@Ew;;1Fw%Im zA-q51$-8^N;F$HVbXoZZMFim8GI(vyo5f85d74Pmf9X;mI*uf~IPI zKSD(lG=<}`Y+OE)kN_IlZ4;QF^~d~o$JfmlV=HY_IOkjHUka+Z1t8CO+AgvV1@_^C zVc=)D=l%2003mY^Wo_;ETBgRACGu&30}No0Vw3x63A|U(m>rk^`^wny>vHHchZG{Fh8tYc*`T*|cAz^3{?x z&dQE}Wz7v?3{j4?t$#32yK#cN@z!}MsBPUDBmYSljLQ~o;?;ys^23<_JfY~yBZ@@0 ztN+Eub)8`?zPb2HZ^X3O&Ps(41wWmP3nyII;7M&Y9*Ic>b7SUL2g3SB<9 zn5d9hbgn1i{Wm2BQ^LwFIfp3ExSrpQ*(INJ$9%C@IU5U3mB)G3UPpR@H)* zY})WeQuxYX!1i3Hc&=D3>#%z}zN4S{9I3;#2*75+4&|eMl#0yz)_DehZS@@swn^u+ zGwHTKC!WYqIaS(qUu8tqrT(gJL*$vqz+kRsYTFR2*&FFC1=Urg| zA`2U=vA}*4?(ZKP+;JSW7HDR|WL~Uc2qSq3t=Ro!=2D(P$oPSUdn15%4h5F8Nj69R8*%{iG$)RCBUj9B^` zXk$Mopt9$yp3neIPU_C*A|^wC$|sf26veDppEWJ`Q&8m=AQ2Zo53mfYH@)I9wO_N+ zOD1IcEDrui{{W6ib(A0w{qiv}KC~32Lwqu&JD>yqoSGA!VpSS#zHp*j{lp>WK30?g z?sr+uO5SIp)-C$)^x{%#-uvmOuMtdmyXNI9d6|NI?z( z-iv~BOzc0-Tl`&*dhiNO(l#wNHtaxKX7^{ao5-p4tnFBX3JgNx=h+4xO|v;UX?uH!_Nx~;h+;JI|z`4`l(#2cXv-)-`+qp zbFUvBC_0?RhpG8%=;vKWj9`qghdMEvqWN=lhu7LHLd^E30+E9ehd4D=7%2b!Rh^ht zsT`?^Z|-Q!Khk+&$dhxT65~C$88ZE%Q8|s)*uGQoAX7&jMN00EQBJl8DC0(}ew>p+ z*be!Y@S4P5MOfJa4qFj0J z!oL`OMrDi>&t6BFWqfS3cOEhP;)6QZA>^xwV3P{v=a+4bviZZkFn(|LFO%j@)q|s4 zC?RSMK8HXmy1+$y`L7_#;rSP zX{CEQ@n$V_oq>I;oUaYXao)8Jex2m56U3^ckY*#yDzfxHSte$*pdy*goEAJr5UzG&G|~Y+W=@C}do-+KW(9_x3;WAJZXvL8%ZY7a->79CsSa z-w(0UPbdnyCntTytC~@OIoFqAnBdh&_BrG*-&*T=cU6AE#&l$4DDXT!kr)5FQPe}P zWg}6+O1(;tVd(5R%e>V7(^YAG9sR+2i599*jC#JiA-{@IFSx9EM$J7;ll-hVZXNTU zqWDN1$|`CI*$X??{W9z$Z)`hcVbXN=2Xd!4N^h=`L-b3jZKk*uwI#(u`Cj=;H)6x= zvX?I}qjVGe@C+aI;yddUJ}}(+ec7V=fV@WfrCpjBgCfJz@wp%;(E2+k%@@N!Hg^g4 zY}}%R=^($y^F^5JMz^OMKd17u=-;+Zm4>s|Pf9rv)19m#Gf3>}q&@b$JRGxv)!#kU z-#>4n5t>Q>Dj^zcMTWbodq;UgdPO_rFWbLCMoP2JNoWbRN;Ig_FB>E|iN(3zgS7HJSK8OPVw7Soy9tx{FT zFHHA5%UyqeD0q|fTev;p`y;nauUU(OxH};sBZGc>Tt>vno!cq5T;ji>*x8l7AsFJkmo>JWg)~2i`F_H~dHu^>Hcs7=kC6%%+Ra*6wzR135BI!!6eM<<08P@w~Bcf5f0;|rj79NBN*T$``aUF=S z?_URN7au{|<~iYxSrS;gQ;+oaDq^p>Dml?PCfO9Z(XHISLi*}X2{pD>)=;(AC8ZM^ z+S}#R7g`(u)u*E;LcDiNuiW2dER~f>0m&n_UIM{~?Oz&h2Va3yE98@ttoxsOufa~l z-l0GVF%q_pBltBh;i`uZ!)fP}uCnO|<7*n_T((BG4|<_3S0)7jH$z!jS!q?-03VPu zq^{=$Sp|eU(*0w3cEC3)B}~^N*|74Pn>7kC8XBAyTCMqXJufH-xF=&lx#*I#??k@r zn1MT%mrIh<(LoXt>MVTfP$x5JzgvX`dOBShE#Q}wmS<7@6eV^YZ-I^>GrnqMy5k@ID>(Vea*JlSqF#fWtr)F+Tlw%Mo|)+{w$YQOaXz8 zfL#a$L9{!npsPFa^jC(|j&>-Ct!aZ=TCdd?U3}dx zTPD#?w0d`j;_Oep{^jib=fCc&0}IftJimb}%#IgoAzpVdZ&Zq^jE;+2X5m}rEK}Xc zYijvczN66oqMiUdYx%qSBns;SpXK~`h=pzGI^SH0l@t;;NG(tl{djFT=;loTtWGt= zd=ERq`0^yga^32L4Oy9;W=1t|U3_h!7UMY!5Bt!yf^e&6HQl7Ya)%=SVzRys+cHNm zmjLUj97Bn!gdVewkl^pAr{ z+_2ZUvm+Rcq8f^4y*DWNCf!UPq%(&oN)TX?LF{hVZtTevcg6(`ZgK@`P zgIT`)h4u>K(4YKJbgWdWB$k8X8sV3@Y`AD;} z_Qq8+juTvQnv;FvMU$4H&Nt&T;~3870LT3_NY+pYHt5LbNw~7V@`>s<`6=WW1Wf5@ zXrzoTWn@{+jlL8z|5#P-oL~AiB}VJrOuL4Vql4gczPw z7v~1~3vxgw={1AUbMQ{%m~25&-`hh@b(}UA;)G+3uHisB)o{w?EG*^?a4v01S2?Pe z4cEOA`7L=04G7Zv<>uYde8lfc;*X_HmuZI6d6aMYiy(G{3M3lZ8&FP;n(i`SEwb&H z1Fy?jK}?^ad`!6xU$5ScYNCMXvtzDV$SKMLOIiqZGMw`bW|zWcB;JvPYk;Me_DWE=u6fvkoo^N2;M`lANB}dhSeC6y!6N=+{*$QPv!uoz%w2r&dIYuSZ zJyPqSYP<7`hn&|WS4uHS-ILT{x{oDf6j)Khgo&&=ye6sPH4ChGT+Z!*bJh5d-mZn| zSLZ^wB6mc8|4z2$U}6D1G? zMR~p+BnB+|_y_vv8X!jt$Vuv{{j#?)h;KWX%<%b%&^;|JxBqendo%bqgt#ZmWi=>zeB9{JGXd#xn<9w&sUk`G2eYg=ENi_n5uJ$y^U1Sl<*O;->YGaz zx7c>@cjji8(bhsx+JNJNwC!GavcDRtyq?h;SwIM-f# zS>~y8;=)?!iX*lhD z^Tt%#R3zDGKN>Qext7<&#XXJB`j#3Ob`fzYjAs1XO@dj&Y2n^5fce0S&baF^_(cK- z3rqrIn#Ea{6VI8aX72^Xk<%Rp3=A(aJ0Z#~hc;jyqyJme5*j?DvOq4E1@l&~VX8Gu zT>6+M4}=lcHXJh9`ldrpRsi6aHWt^c#8!f%y+_HeaO8PMyV^kxO!zdps3Jt!w(ytd zY4TmUa1$>!QkBP3x9$sl4wI3_ps|)T9Q%t+oPrW*f80YQqscr|%LZl{m98@`Hw+63 z?zlF6yg~0RgfcmKE`SUxe>jyBMPe^2xb>|)^0!pB)H%-5M1suEbd{iy?|RYoBXQwS z>@ch*6Il=*5;UGwCph*Sn(uh8y02^zkf*VuV1o7-11W^$dKJ04WUgX5_kbGC#JFI8 z3dC5gcvu%}a$e4p<0Bq{j?WA@USkNLtR}Q;@H`6+G&36RH};E^>Yc{6$-0u)TzPN3 zBH}SjaMOU5;L8bZ-%Z2`v`SwiK|xEw)L^cQ%*Z3-AF?a07S(J@ULzaXA{D7SMRd6BIR_;2V4DWv#@> z#6z!Am0O8|)L_4?)yql;Tub}QD4$tvyr4aMdFR&_U-V=0ldCjVQ-G&3pJ#u$9dQ6V zlT=@B1>-xMFjwsNJ+@RKAEIPN&C2)?MIU#HRqYq7RaYY?p*pzR#lk85dJ57UO%q|Y0Y`GZ-Q4hPGZ|kkJv^g@t6&-7wJ=+*?T(= zYZSgI(6LAvDWoPZ9lJ6zW1~WMrxNPxTpi`A7^59IGVZJ9er06ya@8IZJ369DG571h`IVC!L&Y=CU`oxLd~* z$#R^p_@q7o9Om^p#7P895;UJ$csd^YQ7kgwM($vrn6opM6{o~+5y{kd2OGTE2U0Uq z=RqM%7Wk==lJZ%+nwv1DUrY@EEkBY_W)peL!=pQcmDU^Xqe`|Q`y4KpWHVl+0AGAC zLRsCr725%kARy;+^Q37F9V23~&eU)u@yGh!gl#K&PS>v7`Ge<6H~6&ONkdLd0K(C{ zPv~B@2RLONu9f9@<|57~)gXMIOGwY%@QIrQH9M;xz8KHBIy$DN*soXppB9>Ig=p#M z>>kY#gXYdWpYRtN9JqAdACkNcPNn%M$Y@I^Cl^A2QjVS-N28722WlD`EQZMJQ`_}m z;%Dwxao2qVt8E~3>|w9uht9X^btW)rzgsAS!BSlQ?&0B~m!x8s@&ds%6fP*R@w3e< z?#PHNbWw?OFOa$uXDHXB88M!?Cgku?66E&wFxCZP%Qvb~W~CK*rRE!NcLsfAQ`on; zF}#Y1G80-yr*RxOrr(aN-l${(hz`DEEUj5!6~}i6OyKqwtK-Ecf5B3svNfjtN_QLz z)wl3q!pG0(eygrVju3fkeejN^{kMzkPQ|?QdJvy8$$C`ic9*_YI`eHrm$sij0v|*+ z8vi(2rnT-=B%J#XLb`@ayS9fUlloZ?@s2DcTZ=|`jEPZC$A-NyX^FiEhp}$pGi1uRIok5INunBEQF4I z+o(eQr<_4CE}@MOm@PQ|Y{3ddiJ2SE(#)fayM5ngt4dSjf-2)d+p2~6TfPz1Why=1 z8CLEp48vH+;kQ~`hfR(mw#NzYf0aPu_R5%I!gc?VNxCAE&EQyPTW1@iZP@TX8r*n2 ztCXJ@zi6Q#^#dGykoqLk}hfxhNARPlmrAb`_|@yiq+@gwvt%M zh!@$Ydew9zmDTAJq`_xVg&<|?Lu8HHapL?Pkz`eb=8v`_sqQdjBP%-Xp$SyU2R8D) zci^vNxcE)))Yp*5xjZ64wRxZ;K!GqH{E}*YRIC-}veQ!{S;WXtT-_F4Q!AJx55ntq zTzHL+m+KKbZyC7<6Un`_p{FHdglE;6h8~GuL_Em}B5q_Tj?4rfv>)VUg}lB+W^{Gn zTN7KMQ$^5FKo4hrq)3N0>T=)^?IcNG)1tydgF=Nk5jc0c?M_V&ul%7}+U`tYLF|t5 zs%yF&DU!OQ4@a6V#5{n5lUxD=t3V#v2%5sPQ%UMk`{-K{-K->1ZMk+hzDw9E*8mJ+A%Jy7h_gxZ%g%gz$$X!^fFUlLYR} z#Fpq%vqKPLc12(&!FgnmZ@&+y97>G&w>6I205mIh8`rV$T{iEO=y0ka5ljWHo9Vdd z-8kON>rqg%CjHRzzI5NhcRj!B3(S1zex6^Q2C!thU8A@jJ8(iOqt`CBey#cEn$vGLj-4j1YBqDmTQMQu4eEoGK#-(Pdt(^JG;>x@-x z;>&&xbBmeh$PviOz9QhVP~nkG1kp*Ikm42EMc^^WgT9Vsl)!~Gk6-aS=U2*z#rlle z$B7Uzb42V?sZ*{G_rn zYA7b5So@?BhPC$&t@D$*Az^TjJhG1L)bH?OR~pSDn^_#tu{3GXB7<3eX-E28S4LUF z#)7|T|7Hgb6uxFDGua$?Lfd+nA%JC?;D+I|jtjTWk!hiuex_3*+~>xN-}+)+u1tJ9 zNTF~yl!nJ^@$7XAooYN9vnS`=}Up^s7QzH-W>`f5l_JN9w#{$(!838_@OvkHk^-&(0?D ze0vh=O-G&EK%CbOB7WJ2VZr}XeJYWI$k_mq%+!t6%f#u^E%{~ms!g$aKB$m!G5g(14h$lCL+I@Rt@Cn+X)|J8m;72qHF~gk z?DM7xyz#h{x(W$7xfobxhWD!+|K0Kx>ucf3Mfux$G@o|_kOVTC$%9<6=KeVw)`y&1 zNtp$q&g4T1)gPiwZI>5hGh5pfF(LD}BfVE@Eeu4gQA`Ku;1O~i&v7UQ9LqHG`ELTv zuO4esPEJvtCFTQMofoRw4~suTmS;33C{nZmYB8=sp_hjb%MKGSaQ!IdKxCBr)p6*I z+5MV2)8q6b|Mhu6u6d}mTu~DFo74|bT6ZKr-E%e?z^X~r*f|Y{T;!~b%*me;j>)AU zYLkXMkT6}d7ofJd@MGQG9n$rMI9!XY0drSdE1V+9{2Vr4F2(qNaQo zf~L6Kr!U%u-Rewo5?j)}6E{fJ8Jr!-gkku&^YLz_^r0H#T10p-^%YaPq+GdXXGiip zCQJ(^D9Kq~yZ??KzAo7~RXX8Een17Cuc^&i_#wwhe8f$Ho8XZgCUdG2P8~D$XI;y1 z84ABznFE9^BBTPNE?C9oTKK3o%oDh2p0`U@`ewuJSRgJy)7L5S`;gNqzho9xDqB+? z-ON4r5=X+}Cc)-@hWLY*y*Bs{s5 zz$4!9xZLt7PEC^%$zrHjXW@3}X@h5y%o3zPFzC5eM<$|{MQ}Uo;;7#HzIZW?#lhc< zk2$|*FlPmRzEe{3trP$dJ@kZ657+|3@8%9C%m%eT9CVx<$Ht|IFu7HS*z9^)gekk{h4L zfwJJ_MPYxT8FF<{tr_n#`d5#voywg!8XqgH$MSf*M%8UB2>t%NAU=0&Laj^k&Gye*(Kl7wAgHDI{t zvjv@?ZRfLEZ(bM3%-;VTH~I5zm%;1F$B@MWZo!dv=Kk5<2XaP>n}Gp&fQH5pi>24N zSFH(u+z#%W5}aBDwA#hzDRm4NG}arqkc}vC;+gmB0*^!b!y|rSWRwsfb>ltw?jDEd z98`ktm$9hx0k979TNU^vjZ7#<;|#1UEcKlo(iP)CE}Y(pBg=CY%Zy{Q%D01C=V$Y4 zvuzxOW?m*@TW1$UX;F;mIbpP>lM3uwSLZi1dw5CB2yu+96sHEWr1MxWl{$e>qwvlFr#P{E&)GtYUcuK`=k_XLE(QpDe4!J5Ak_u=N4|E-EU@pvdoe3LCHEF7 z`W$}bnZIa4#^=hbsH@0v{%KEk7g%}=AX%dP!5A@co&67wDoU*rI~C-|J!frdM(VkQ zlu<;dc3?ioo>KCpW&mzw!94WQKk9W*T%nWv5ND~;BC@&{C*{5y;Q{q|q5~`fva|LXw}Nlj!LDK9 z!T-nBIYmeEh5b6VZF6GV9ZhUI6Wg|}iEU17J2SCu+t%s-`qp=G&N^3h(Y3m|dv)zy zd%wT;c{uwptG**5fb#A0A|c&C=?_{O_~2i`q-Xv7El9+J^k!*M&krj|YS-?;yI`&PuqQ zr}?RpQ7fKQammu=L$~zJvsuU;9Ik!8hu)C6B8D!6#e%`shM-cQ9~aUY=(*DW{9#Ox z=E}erP3CjI9BJ*n7eIj_rAhEuIR*w#?0wI9jR;z8*8@vSOK}`PF4lXAzrUuF+Z-=& zZV^S^@bU2W^M?=8U%_*J{>S_RAFm3Kwzp@xdfCr0)&>$J7xPD_{dDNDCNg=%{MPGD zfE^{rpdQ_zC&oY8T~x*WvDlk|Gh^S$EM|E{1)=IP>gEhcDMrr9Zn#(B%@YKGE{FuV z%vz=f{kz>0-3E!xYaP?uwrAc-8CT7(a`_|nGwC`qV^I_~?~Z``)))k097XlS@@dzA z%MJurqdRaK<#r|p*8F+M*{AnBgbK-18s#w7yQ+S_CY2jp_8S@Bz@qP^@lJ_#3KU-s zAj<-6hJeqtM2bMkA*kQ!jr?SLi6w``DUoncU33T*d zzE(AkdnLUW1BboYU^1B^A2ikePXQPue`Wr9Kr0hSfI4k;xijIpKTGNOxGijH-U9^w zmHslG=(0(XmBQYkA}~D>b`6y--Ye>r_j!h9*a#;H-}-2V0uSl|2@;T}R4tsPIghNW zz|;YTagM58AiQ+p_A|M)Ok7pGDJz$a7mgXh{&Xm&KMtAERv@F1AcF8FGX(p`xA68z5~dEK5tvxBW=5VRaxjEKTA3zU5Wp4oR_%`PYDUY1P{k- zeabm3a!Td3FGJD-qGRYn`n1JUfIxNlEd!WLRLdG@t_KEV7yNp)KfK z(dSfw0ea_tl3>m6hjXb~dddEFc#%o;_i{8ByBc*6;u0B?7ppUnETkjd@-&g|8b=K z>_#&3M*+fh;A^Zo$3GH=neYH(Wgtpc;*rk2H?-oDt`Q1FpzlQ9sICg#WK@hlbMV+} z^rO2d?-TgU;bJT~actBfHvbWc)NKg1=#Ig0Z?YQXEWQtigw@Pa!-DoqNdJ~16bSP2 z7DE$Re*+Fv(fP)+8D--=@7vhwkrLa&4mqOr{1RI;qQ%dq7a1oS{nd++^Rj+rfN`!KVM|gKvp~ts2{cEI_`|$24M1HZ25rSxk+48oXpZ8FLlg>*Eq_Dn7ZRYd)RjPg zt>#8xC(}bR52Y#@up`)0kSO7m>m}AUO26tOAU!)5e@f|Iq1A?~}c0y1A>KUK%yn06}c%${XIMs(cdNW&}0b- z32$CMX=vyb7obcmSdk0lv}&16tff}k9l-s98L=*f}m_V19u=4DuR z0t;btjWp(OV51yf3{)`lOXOwa=98QFd8q8Cg8fGU2r98(n}~4i)RcVntD!&)R5!Pu zEJEl|i)GKvHnu^~_OV!|fZT+pMT=-2dN!DqUy#^?dNoxl5O9=OYxDj2EEEw8*Y#IS zNy8oczotCXKCpY77>QZ+9aj?*wrcgNbPcJJJw7r7Fj~PpgSApInHKMAw30`57LvZY zhb)r>eZ&5*O92OW$emNz2sS~usFRg=Z75=K?fV5m_G`xxT;CQ?gieBMunawWdz5!h zcUn|5<6ab1*q6bRm1C@Am?CNDBCYs*4IU74jFK_78{Xh@{dFYXYE|?}*pDleC;Lml zYEw)ICScMrB@aytY~@vg?T49Z^!!i*E$+(4&!R4S7Z)u~4zYlsj@TTFT6aX_v&Gf< zuI0!-SWF18W@rz2!fTz{{B^}8{kdZJ28XJ6h>{}ns6}c_+C)U=D3&~_J)Wc>Dj1i| zj21`7|FRoOGlo(`ZSQHkzw5D(A9+!qJdBuem2OMM4W}kWk4JKDT%XBi_A%Z)Do5sH zL_{@^#2G|z%Al1p84%J}vXe#1H0q3pU+Yr66j{*HQb_FFM!)EWjyy!bSUG9}tNz9Y-#~WSAc@4NsBz5^o{|29@JT+>WTKUKQa>;;N zmO(zJ*`lI;Co!t4DJ_xOp82D6+ zdeopeFo;8FGZ_8_)pb@eLS>+m%{aF|lQCRDiVa}}zmec4fj}2)o;;sKQmzy+IApRL z$yM+a|Cw}*DFI?wNU=q4WiRdaCq8GcAA;a7*aWTQXtXRlSKEHvcH~kpFXpPVojN5Y z9D45W4A9DErA`q!KiH_Q;dHM+`8E)j!&mQm?pAHks-I2c#UD(GSlpkO8a7PFh-v`K&L^dy zfNcvFy%>~&QT5YI=r8|i-TLL7j*7FhGNu68A%tYuPpBNExO8mmH|MtF-0x^`R{FvE zqHB0C7Fl4ZCxKhlH{3Z7fhEH#6C@@#E4b@URretn_QnO;!BB%K)BQQhKI9EC=jI&) zIx<}4JMo~TL!d}9K}6_E8b7pbIX>S2)^=@~s3b$_MWA0KhWI|+CJHOGYO?l4@q~^> zVn!-kEGSGy7!FGk#?uvZ|M&xKbNqM(9D zfXQf&nRli@WrNhVoW3}yc_TJX4pgvspb`&q1)+64K14aQ)+6_KrwQr}Ym1NQEsfzc zD>(+jpbbY~N}*&E<=Ql@zUY<01SRG0!^-yElGg!K=6_kwnAfM@Wc6j0?$>{Kfp>Rs z9C9nUl%yN9G&@uI_w$dYnswGOjGznBPpY=(*)4q@GG(|aDJ)qC3c#aapwhlC;$lpEnw7S*+yQ7#R-R1z2654VsQO4wO!8-U)8S<;MKHFu*XH3>= z5k^e|)%`~HZ;}(ma~`a`YVV!)?478&V3XN_o3ou)=|?rJn|JXQ4hP11s^I<*V2Bm9 z(L}OC?BiD~f!2?n#&TG1U~xQ$H56wnA@83nYrODY5a2hX{{zXHF#@>sXwWE0z24i8 zwlZ@<9~dL?e*joaX@@{)DG8Nyi-}PT6;j6fxY0`i`yJZjClOL=HRTf+mWsilbaYO0 zb`M#0hJ`2j5CtN3e!Es1q%JCxf0K`<@|9g7Q_fLvxY87)j>@y8JOpUXEdXJW$zez1 zhsd};j6Sd91_>t^2x?l|yrN&JdJaV8o({lIxu5%fB38uYcweAC=(^o0vap+;)(1ka zF_Fum@+Ij0XiiCW7c2D6^R##!Z_nz(s9IYT1_XjZ^rrx95hb1thk!6CmQO{0nGe;x zs_koqF2dd;Dk;RcVCqBLGFY%d*{AicUl)b>dbH?r)^TcR2CxF4{IBCR>7LT{A%?Qj zTrl_CenvK?PKa~^@g(Z40 zFW+^ID-%+!MKywMoz3``gQifCcIR76C-wDqNmM>T!daONr??Z9y?p*#FG}Tzs4l zo~%i@zV$bdC&oz>o@{m^>*2dUNeAwOS9g7-oH<=8E@OYm{StO@HfDYW{Ultw%Ydo^NN9aO4Iiw7sl2FvwLaPe>{z)1*pCWb5DF&N zy$R`~`S?FE7t9An@C_@(o-yyZ3>Zp)IXCyao~#aFcVY0 z`HVi0{UWYozQrjFeVYt6MBOzYPsCm0JkRoa$mxh1uL(E$_>Y4i#28V@hp`b zc^sH7ZEHMUoU+TBA-WghHq#_O@fF!~)XvNny|#{0qaOC5&LM@)XU2+qbCgwedpBMS zlh19r2l27J{Y8NM_<1w=Y?Mzd@rLgz7qj#LV60O2coQA4cok_9=;~iAfR&;C| z`7@u@Va{R#5HF+Ty#kIdt_8fe5Sc_@yq~rC_tyenkCbD$4hsQ!ajarc4X(5>62Vf7 znGQ9+SnA$Zlm`@9W~xwD+77=HGwh1+|dW1rvAfmhr8W!8%rwgWba>IdBN zh`JyAn@nZ&FGae%vT|rBa=+waqrLIAxz-OCh#s0WjF4=R7T(FU{u37rN9L zuXLNo&z!n+IJ}+0-=44gS0t@nCud^G@~p0YUR4>qcuRy8P8Mv*d>n{G2vQ(G3FLZz zL2kG%Z+^ZlrfIZko$l9f5LDpqoIUL~`(N~T#xECn$l~46%`2*Agnh8M84*<-9rmqW z_22hygRYGe&!cM^Ko8e~TNW^UM`j-+&inC^w=etuu~q;16rZ*fDsg*QXD)|d%0LG& zD}eMYxg`3!tmtR`>~3#9SV@!eaf-?q=2VKQYL7W~*fR{XxOma3x1eD?|Sk|k6rEgx3E z4W2dVLLmNnL5A_fK`pY6mAPmEfrj!`z9D5X_|QgyrP)PG&Y(~lNYB^8Wa7FZtEi2p zalta_tt+&uPY?>o&OldexIh3^>fpQ_`Z70=yuRXv@YdTiOtQLW^K&00xrA?yi$7Oc z*ciUm$Ivc<BOO8@9AR{|iixs5ZUWhhpq}_8|y?355JvkmmwXKl~)is4bGj zpSe!}-xzJ|)6Z}(YY7V`ssd~hTD2D{@)alUuKEEXrbU}&&um7{m& zUS>UBv9Cem3}&prrEkV7cTKRl#Ux4G$Bf>ns9EF`d-;tjYDm--UNHg8HOVj*z*hqp(6RZ>#(0#&y10WlrlyG=75oNJvot@DHcM0!C zb0j;9A=5LL=-G;6;xRLhEI~7p!@$+1`-hOBdCW%w?`gdfDGa#Xkniv&6YRRI2^TMt zb^p~F2+&t-!HWe!4Q|abnfo1Ig0{AFT~mQcRaZRpW9t2?eH6poObDwm&ZNl4jiH8N zPPBtuZvq>JfP%HJ!ARK;pU3Rzfcr)S0K<8#M7iDUnO!`)_5^Y%TT-NS^9!|qW8K!95e<6|RKwmjmky2ZG4q$`F{pyj ze5^zIET>K3rXygk$H+yp(CXqsOtjcdH5HrdhDSQSC6S@P zFn5>>Uzcspis!MIgk_r~7kRJbH%NaSK!1lPOb~Sp`<~HRC(%ZV~E2GDLInPd_MUVZgY1Dp44ehvQv z%56(eF&u9T*&MfCWp*9CZ(e%yP>y4L#L+ z*D|6(;G1+}$FsR_OJoHB>=GzuNb(>*s5wSdq5B;@6y+TgNuU-<(9U-};_n@g`r#(~ z>}t-@awU5`$tGPEcP)O`aMN~rRH{gFf+?|wc%cGdNJCiurAJcI7D0*{hJa^^GxH9~ zWklad^&fgrd^_o8aEfQsR$ji6kw(Vt#6j#vK~R7Nzv-x=LtayVRUr72;Ehl?6A?{( zVqA@PWB5n; z@;kYz7sT$;ekL+c$yA_a5;MFY_~rPk6f$e>`Bp~KC^wRoo1YOcov7}RtjdX4xS*lu z32E1RnKl>pW71H|i34Z>(dUOK{=nLISrHu1oW!aa-+$~ob%7J^_bE^W6v|O#N=c2Z z2&LApRy|}DFxK|G{g~azXP~hxA)f$}h@+0gjoXK;C05F-YLa#4OXd54C__MW(53SS zHxh6a_X6~>#jM+RLN0Xdgn2JSnq5ONnCUAA9SUWJ%nS0dP7%y2k%mVUz^$L_4k)s2 z$jVw|Hd(UP^WU*{2&+p+0VGM12UyU|#65MT$B8B<(;Xz!xBZUU#ZTB?zGm5}esLH( z_3=zA{=Qd_OL?Tkh>!xr22h9W)g#4ZW)PZ>#drLrz*L+s?i`NpV941cFEn<;DrKU> zl1%y&N8;AKP6Z;8ROl4l2P3AODn9{YS-J>yJ!?KtObID9u6E(i_td%fNg^feoDRgi zMNbC6M&FCm1v`sBM)vbkF)$3=<;f1<=HWvYiI?$z7r?xhUnBDvVF*Fq!p_^XqLR+$ zpKQ!C--a<6KVYlVD4%O`3tADo*ljTg;*8l?aisX(d2l@x$A=6=K#3XCDR{pQ31#w8 zfI*}bvo(=E>#RqJ9!z9MBy2NzzSxEO`oTV)q$?J158!Z@x(uz)QU-zPSSAAg7}7{Q z{kCOU6Tdobq(C4I4Dr}&mWS>hChG&0gN3nBY>e?$w^$%C?^m@z2&Npn_3~hG*g((3 zebDI*lKcuiLd*@r0t6dr-Zdt&`DX?|SV_r0ZCbPzoOI1o#ORM5hkN@w%Z>xc^CN9d zQRhZdicYfU0WO2brBrdGpRA^G_|%EEIKKu|wrK*QGpWC%*;3PS@h8ozLwWK!VMdvI zBu3bX2crY`iK?{8NFUxWSDOERwVmNYX_7nFq!>{K8)aBSSXwBj@U+97qW?hhq$(^0 zn^tJu@`9h@dnVBJI(7QEMefBU5nL4EDgI@d)+oXV(2fAY}gsP^(` z{{@ms`S9>yI23{U^0wTIwye0);|uK)vqEz0JDeTZH`#v7h#Hpr!2fkk?YPqi%7bFi z;>2Snn@9EPez}I&x{jIlF`ot&2w(bd7V~8;?GLI-)YKFsC|}RpqBZ5uP*a?ncxZfy z%9n*Q^(g1zaV7)UU?t?ItX*m#2QsAUPlxD-00PYqgH`)A1i|lZY!QYSps3*EERAay z+5dxW>5m>$ADl11=TydE=wkJ!)IVUdRB6O5zllog6S{j8B`%QpLJLb)PaVNM-XI|C zahfZ?Q|p#h;4zylMc&vHJhpr>8I*GJuktA9Ff_yOO`L1aG&54@bz5 zwDI>`!|QwxA87NAz+q3eT)2%&mBxg*COIy>1iK=#H7^@E&x}}a(6*!~-2Qg&^GUXmnY(kjsc&%?9|MuBULp>ggK?_Uj$ZxSnF*N91o8C&#w`0SHGU5o&W$&& zKl*h}aD7Rb=dt%%RJjMO(Kj*@1xhgoaVT7cx30%epwW%cj}3Myq>&0Nht$|Nk?fQZ zhaWgoCFaH-WP(W1^HUs0QURc}V9EbIYMXP2C>$va%!&`Y2QYW@M}!YB7q2P$e4Xx@ z1WXY;3%x^anCg-%VK8RKX0M``;O8!J)(2xpJ_W?Vij^()v6vNufSr9@q{&rbLM_iP zPyshbZQjGzm6|SOPhuou-Ui@sE@&;ZyXCWy%;a(cqoxhO2z_5EZh!Z={%d{)VWn2@ zPs)nCUDk`;bpM9lN<~_UzE|}6Yiv4Az$7f$TaJW=NeW@$UB(=m8pEFA`{tv%{Z8zW zxh_5)=!XrL#)xv9csKQQF13waBMm$Lmv67OubjJ_T$6I&j&t}^4iMB|{CQGk>!AVm zVzUOS@d*lQ`jbfqu0|;ye7aU5zY`kQM6&Q9>X%fNDj8mLZzpPQs#`()we7lh)=qb| zTA>hzK^x44*r!S@5YM1=R~*kE`Ij;}k;k_y0CkhkdI*)`ot;^n+z9d@{|Qhj=c9fy zp)jbnOtZ`1tW6jspQcOQ!*uqR&fVfO^6_VD|BXH=2Q=0xTTO^~LIyftxA(8TrL5O* zH5Jt(HBAysCPMjHT@M<)rSGv=Oq&I2lNsAjMqYTlZcqmM8u1lu6cn4GyGBE&Vp0Nh zEQCdnNnD^M1I(KqgX5mX31d)4rAkT7_t-a%*B5)iyPKv}v!0#~zjbLjk~WZzV5G>F z;g&_^zR}ML3c=4c7cX}V=iWrk$UbCihg=(1X63& zNsy3R&V$JI2KvTMf$Lw5dQ5%kP8#`mKXW|a1`+oIZ}zU#=yG%v%aU0z7f#=1Y;2^C zc{cZe!J}U-LX=+Z;G;Mtb8_vCr?5j%BIAi}QvPuLiFenoiHpeY#MoV8I+y*Qg*Koe zX<=cB5UVafY2aCj%%_4&{%-oeBI#E^e3N&|hkLlM$4oP7Nf^Sx`Nf@RjZ{X+eYJ^E z2oh9{G0>oPYdP%(T;(YhvJ7DXH+Du~UxXPzsjMKF2OyH=Oa{~{;EDz)7x58y)Z97N zcF>@*CZ6td3ES9z6$T*h%X#8h{|lu?3y`h~*N{b_5VFiOg=lY{|wV7_u zIH;8h7lJxs;|yDx2_M={ttqlIkUtBnc*}Hb1}YzuDJI2V{1p66uBcqtx*uK9_-<)Y zCvf|b9|%G}FDtH$YN>g+8C#aKZbC%~UHk3eS2C2bo7m$psRq<@46m9q4FD^aG-q0- zKH*t3mu18O0GHgXQ$+-Q<8FRghd}l5dtnhBzd1L0^o)(nOl_kv%RdQ;iE(+K50Woy z8oeQgz;yw-s&kNl_tV~~dG6&h|7n3j@Nu3$DxC(Sq?Q)0-}Cx91%j!hIkl6s6JS3$ z6iBF#N;B|790^g>x!8wi`ZMr)oEJSYfuQSs$)VZvVGLYqMy}COej$htvG`oven))6 zV=nA8dOWosht{_O2_x{!K1eQKQgUEk=<<#0!@I?JpQMQnbKSqrIXAxhg6A}%hrvda zdR_{D6_$u3gjUql=m`f8HJovbUOjScVT_8E<+PxnQ_J_|eLr}g@|~Lx!OV7n)SZ=R zK-lnDDUvREaO3pHab>dXR`Z);XtG@2vC8t6psAX>jpB-0=9_%u!^L|3e(wvJz}CM-@?VE_Zew5G81M!p)T z=-QgTQ;j4el6$GkXnB6;cXij5_?P7Hl&4R-u6rqlRKIRzQ6~A`IvA7bF-($vW3C`n zbYA2(BRQ@SIk334{$PyaRAKZY_l34$uCOVo#Rr&{T07KB@XfwtYf-(F!-poXM83H& z89#Q=KS;gRw6sX%2w2^KBw$L0?QF??Q44kMSyG&bcfVX#0QO2@qoHP)w!} zEGuBzH|t_)`X;u&g(+fHZ>a|xKar91T_@E~WKDy}Exez_xTkaCQ|8EG+74_Ea(M9j zr-(wxjf@0iPu*yjKhE$x);q!;c!c|mfMb)A&u)gax6Jxi$Edo|w66k;qQp_1$skfw zZ!;03%+X+GUhJ$v2SQ0&4*50g`l8Onjq76sgr8xF=>wjDA9g74lmugur3-1PDm+>v z3R(fKW7D8S28(;U3E69nY&1_RlLz(XL6%Ag$Y`_3CZ3Du-~wt~yV>ncaEl4)XNt_9 z#aPECABf98(|?A|qEjtfp$3ekr=eo5nfT2W4w? z?Uh)lwjfa0(2P`+()5Q${%;~X+kOo1A0z7*+zbNX=r$E61#YqGbOrP(6a>F8zAdZ( z3}T{{h*dzDsCm(RqyQt=4`thQlup6#aJ;Y|CQEH1IIPU7-$K zp}lp-^Lfh8%Jc_~lk;)aiK7Sev~rkkjT}4O0;lD_+m>3S=f^*TSpJPKI*O;fYts=D zvjd9nlW**>`Jq39HzfUQ*MrxO(r-B^D{C+vj2&_du9@SmOyWPGzpuab!W-t4v;Dt# z+JKCOFvf&~w5~3GAYTFcZN(@Qo{{p&)Cc)@8;n8*D{kC_3$230<9DMw;f^Eb@>^Pq zRMl3eH`f(TFz7tr2-LicXn<-`LYgFAh&)LG*kAI3=Na$vQruv^Huv$Qnl10up1Jq0 z#*V5*FUoO5)AyL(M_ZMt59e!(sSK5$KYuD|X)TJ~jZ3GSK^GuYk#@m!E0kutLQ)@j zzGWN(0$gW9?*VFweDD&5mVJAaGPg5g@%hEY^!dJq{N}Ik-*@gnMxW8u#yub*Au9{~ zD_zs?v;p(weVYiN=PNKFa;XAu`grErc3P@)6K$Xy4mNr%xWr32;k3KGV~t;~U|=jZ3* z$ZdFkSGZYL~Z^?)frYT)Ug^oVy{!2x3bS01ETfgcRvT^WAzywUsEf>r|ur zv_(+Y=b5lEoAs>CmzP~zGJ-L}G#Yv0)4qgxB=q1;miacG9>jX+y|My z$YGnuaCTGqE1+O>wfa0PYAC#$BgL7nLYC)eO*UvRR-5X6-YJ(Su<#?%wtp#(4vp_W6*~M9z*2%YRx@d3 z9<#`vadZ1gqX9QdLsI+-!2u2B>U%Dt^}J5IPBBQ7mIeu*q5Z~iS{OP#kv-obdf<4R zu+4#M9$}apgvF-qmSQycsbGAtc%Q)RhGTO|dv{JjzE<+3cYBL=;j_O_^o1NFub2^l z^tBU>p&gXs5<~BVVIDNQ)F>GQFS(v~bfON^b@;ItjvU57EjAMEc@j|n zbpE*Vb+K+yYnr}()oZ6Jn1!sf91;TE#9=ybkb?0l5@qUa7{Kt11#vEU2&Wm{x8*d1=W@y=e^@0qQQC6YU=mZV9cT9wjkce$iJS{gjo z#{nO@|0ZRpgjm}sCciYJyS`F$k(oxzV}!u(_%64wr$WxEO&dgDNb+jMnsdjo5B zc+N{6P?TYn&{RqI6&21f7j#ou8u-6i0A7Pm?nL@0_QHYnxxPUdu>7a9G?Ee#DFCc7 zHzCG2jU;BmS6EhzP5lG2G=Fy?(^A(b_4u8Z2A$1{_baAobbmO3G#H>m#z&{Z&hT%X z?mx?%R%ncnarTa;Vx5=|H3}aU9Ml-Mil~A!LW?v*aO#qJ0gwN>+lJ5mwIfg%DYHGz z?c8F)jB^)9*+?%8(s8lbFJ64J8>Plt!nx+N7J2II}X_qM{_t$Di^p zcT_8Zm!@S|=w>M52(Ova7KWpUO>r3$L2P_XTttWTtZzIdah`= zS6EM)ue=*|t#@bwhoV@rfAtKt7cR^p&}!}idYqXR;xs~kGP$27~<`z(#eBcVMpB}lLhRhWV-bp+v^3tuG71zXU9jgao78E z>~0R{oTouHE>{<~OrbixcQ*{NKojPv*j@tL57ZV4_{>TIi|V@IbY>eowgrgSjm^0f*mc9hBYze*|+z0y8}}aPTvVjK+NQtUThvPBnhu zxM#jQyC3G?KmUGhF70iJnF$}YYw1qncwlH`xBkz1 z$F3Ml^ci}4_c3S<@^Z>QY)BCt~_48g`lJ1N~Ifv>nOTr^GCTVf=EoI~9Pw}SO+pyj$Pd6axr%=PHXKQ|HwsaNDAuRjo`dkmThf;M=JCj64|vJgnaTfi}nK9f@M$u&`HNB{FqSFS@QL%DxL z$;pgK??Oo5H`%pr9MswjNZn(N`F{P4tynnun(;tfiyOVQ<%oJGVXQu~Q&C}}W%JJ8C?|FgpMtxT9mcCg z9u9IGt0X)q1ni6{3&=#&az}5)lREMd(*e4DYO+zY!E-gtm&+%xp%9Dqx-JG*!eT5v1?& zuJ!4+-fJfjVQg8h4+L;`A|a^D+yc+xV=9YHVT5_(g@vhCF6>(nsG<M)<&W-`l+3JvlY;?kiNqE3@CX~~Hlp^Z2$cR|d4(c=6B(Nn&={PUQCC(?dl~-``9@@D|&3 zM(diLzghkl?a@TpZRPnn-)9`whn&=|CQ7nK!b(aN+}HcQRGpiFKmr5g-BWoU7-KT- zZ#6ZV+G>QENg=Ee;+UQ{fe{`H3%431*8g&kiOE7*vOhO=;B)E`cRJF55YLY`( zX&GJ=^SxFt{TE-b=fY=`Kd|Fjy1f^ zmAd=}=&9X*c+YJ&*aR|bN;((Md;=`zKwcy~_)iTZr4A?_Skn*;V^34{>i7-|Cl7^pNwC#Obtis zF~XW!;iR)x>18dvwVJtcQW8^9qP`mB)}u`62bw2y{8^_ra*%yuE*b!z5rEIq%K;me zn||-Wq1P;=%a$vY2(agOZeTZSVvZ}{Ii6ANpXXZXv4q>uHMzaEwzI4u0{}@cF$n5X z2#0}T&d{WBU{L|C8*kr60D&QjY+EFf3oLoVg?Be89rfX3&GP?bq*e|c_~;Ait!3PiCyp#mo63f(!NZhoES&fY-G1pVwxU0TC~ zu>z=~Ea>wmINPpETQ8P3o-2P5Uwb-Ne?Eb3)^vc$ z3CgIA0ndPgYghVB7)6fYn+oX@UpFx^sG26)!ZoEM+sKzf(K&Dc(n{#Y+)xY={HvrO zzfg$w2P>MJ0rcG^l8f7$FC&h>Lpv0*zRpuw&)30j_7DdN2UF~8q~w>b3*g-0K^rkt zYQYXDR7NGndr*1$TP8pr@Tkpw0?Og@`h1wGb3LS{p%(`Pf2|hpbq*@tggc$((D9{s z*Z8iRK#ZlR#EwguhPkIbrNCa*^eC2g3fbbjzGmF!HeE@37Uc@?G)#U{*4^xH)!?;L zyWn{Kjj&s5f)#o{WiqPQ9;zV5mhYzg0;LvvEAzfet_vO+vN<^BAcTK<3jaOvNS)^s zS0bYUv7{iO#fYP=qwUQ+>NCPQ$a0Y#63i}ElDTyUwU%%bN_D|tRlSX3jN^JGtv6J{ zWfSw}#TV9spUp%dX!=Iz1})F;m}+_$_pg`O4}nhIhkUt6GIj{r-vjZ#%;PdVmd~u% zI%%6FecF8SPX5wTAQaFUs0q&#zwA8X=h77N8I6BW>Gx z4c&*1O`a^q5_mTCSjC8u!y41qeQ|1!WUA8m7||w7gi%H+%7BD=U(Xumolc#;$E8#e z`|7?fTNcAf8PW}+h_el}mee_P2DvF$Pe3R;q1rIfd2}tz2P-ST?NR{1< zzAh+`DaR7x#|Ey9p>N5d$M4rltcMaU4Yv74y%k2XW$)=Y7BzvzpwnAe9CUQ@&c_Ft z{&K|gbsb7Cz)eR-{GX?D)I__-H|8<3;akg!^xX7_4GX%h@;~Ag{IzPj4T`G)Gw*vgpw9(96J{?P={{m$#JMw^3>DVeS->(752 zID@|5cVPzOW^iH>PmlT`q@)hf=gYt8G z@BYjr%ZGU&29l4vi1B2MfzQc=))T1{p6%P0FH!%2nfT&T#Y<@&p#y*CkaAj)viDI zox^=wi8_Xx69I3R3DTMq7;s8XhSuT{4TBlA#A*DBKYZimW8{l?!2q_P%KbEFljy7o}8cfl((q=@~16 z3WSTxKqG?*fE0F;WC*AgLgzJ84|sv-mw4p^9QL2q(#qR@t;yPgUD?!Q}o z|MhJ>{I`u-BjIg?@ic#iBkBkK?2HV`Oe*%yd~ISe3W4tpc;jUaHLd1o&agcX2U6jF zA~oOWWv+sPCc-66w!Qg6R7`VJXBaEV<=;(4uUW${dlg{p>TAzcih&l6j_fW@KX5_| z>L&u_4Al0M!&?h_hKQJ-VZwh{9?N^%RAN5;ragGw>;XKSC+-Y>V64PFF3WMfDMp_St7mkyvu>S675{FhVI={zVHVXZ`VW zYy7Fu>B8q#4CCuqkNZ5!i+ggTXv8f!0}pmV9|nsgp=ZXsv!Zl6epSDIKJ?e5Ttrla zaOPqVMx*!#r6OCw)P8@`k;I09a!fov-Vg?9dW#bb+21~7?7Z(mKu`|<1JBK zSU(C_-o*$6J6+F#opN6d@3zgtL!C`bB-4zDXP0S{(U7Fp=IcV^ZHSywY@cmxMYP}% z&&P&Pt($>o_R<0VQ!oO95kcXw+Z^EJ!b5o0m~+TM~HR?StEc^`&nz5%8L@AgolI=@!-p66Q<2q z2}1)G6#yK2{_n$uKk$pzeX}g$VSez$sQksP_N9_CIGn34#64 zT=`D7iv9n*J@8_E|A())jH;^L{)VNyyGuGZ-5?FpC=Jrx-QC^Yt$=iQgR~&s-67rY z^8C+zo)hUDg52Tm(ufip*6GwtF*#1HFH1AE9Q8TT?wWpY=M&M)1A&7KY zM?)olyYZ*7?Q5@iPU@s_oqK&!o7V%JfXIywkigEoo_O1P(K#iFW+qx-k;t@7->IbTF|#l7N!{J|Fy6XYJoT&F=;=bOu~yX*ykIUtp~OV*gXwyNVQedWAGCs~>Z2LrkL)Ol!K|S0 z?Fk8spQxYavGP{erjBj6PoEi6aL0JAOm>W-B|lmst)=^N9c9Y6(8s}^4sANfRR;di zs?D(Mj7?{Y?YTW&-n8Ss6K>WM`79@>oCrg~<_*a@BU$i`lcd2pxNRUSAb4-jDt`?FVPOtz`?=$1tcyVvw4az+ju<6W(4?|tP@^9djh3NBAVswe@7 z8LHgCq$K|K`@OelG>>G*0JixVH z(JxJ%9acBN3jz4TkaJou)l0Gyn)H>d{&Q*L4nl+NGT;s3tI$z_bP0Xu%G6@EJI#If zz`K*9lrkCZIR;RcD+7(6GQo}co=*v!ZkqV7p3HBc9%t8U$4u*OXY1NJ@tvPWAM6ns zEoWQWTBE$6Cjj>IN1X{oKE8!e`HN;gk3e$_)36r?%bn!;uv7fqfVJ{&fqaT)$~PW! zgc61CNUff<7}}9_tC5Y+rW>ZVm*uH2`-kT((=J>#-bw6soCl`s-Y1c7t89TQ?a6`FUPYuUaix*kswNou=>if3Z7=`5Mq@HWa58mYf5`exzk^rIs_I9f7t z?)g#)61WVl;3wB0zqzh~eVON)^n8(%aNpM2t*QDg@!BzNSZ|obb#(kX=UKWsOdwlm zZ!>F282#wk=MSEDbmUdB{u|_NY;Zq?N6t_%W#$^L30Lt3_>9LNpw7BHyxvvCU9Bc_ zO7QHb6718zHX+WQmT*E)iAcv>aNr!y==_MGOL1 z_{QefY$Ua`GFb$@7rhvwn$5$-9XtZLL;d~T z2B1K7?rdbBN{q1DF>Mp1_faY=l#vSBBoXf9qmE9;wGapdh8>9|pNfIpW|+F#;XN>Z z(6>hHU4I!1S+LDekYF1V<2UpR&b1B4s9CNA7K8<>)&={{D?2RaoX#>DQ)2P-chA~R z0(pKX{FqXFwM2S1fA*SuKb0iKPeL%$Oqdw#SQdVev{Lnw?1ek;)Y?wSx zrzr7TwN+$hekKyDOI5L<$5PiVb6c0d$+5YMbAog_^RQ6)oU@jUcTnK(dnHz^OwuaQ zE_nGi%&xkv?;_TNrYz)AVABf60+c>g;Gt2mTB775*KZW--ahfG`-Rjrvp>&!Q26m#^*$%puGe1qVIo`n-fJ^8EFxm50fg43h z#OKe;ib^fg1z17W{0CHrC0`Ma$ecfYyV~Ih{5I*O_yn0oIdD0p>M70{<5XX{s0OjiQk|tbp55BE9PE5Jy;vYwZ@I($My(}% zHpykP?U)P<6XPqNDN;T;Mb z7HNdV#t!}7T?edo6+1gR9$uq7Zp!{Tl6k4Ymg#M_iRdm9Rl{n#EDiwnd@btNzy4s{ zHbduMgt6D?)xHm&`}ndAMiWI6_+HT?l5is4+}yZrkGo!6^u>;V w2T*^^J9M$Yk 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 literal 0 HcmV?d00001 diff --git a/docs/images/framework_arch.png b/docs/images/framework_arch.png new file mode 100644 index 0000000000000000000000000000000000000000..472ea214ee34461d8da825dc00c26a45ccee1523 GIT binary patch literal 94845 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 literal 0 HcmV?d00001 diff --git a/docs/images/generator_diff.png b/docs/images/generator_diff.png new file mode 100644 index 0000000000000000000000000000000000000000..eed4b3c6bcc41ce838efa9fb06e7b478447c3992 GIT binary patch literal 531777 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¥Nq`D*lw);oQ- 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 z�=V!Z~^v;bhJ+Y+LT}-n^$#qHxUpeELB9+X?#HT(4dNp{C{fGxsIOZ2Je4H>fi3 zqRh-0waUW90{@#LcJPh3dFj!f=K_L!9&PTJ!N;r*DigASm4L3KKNV%+_I>2gEG}Gf zy#IuR`fLG~kY%5;_h5@vLeD*82;pzL9v9hxvtTj2C>pJe)kbgf&OtBSId0_J{?4TG z4%f`QEA!@N^Jioo)uJ>~2i&(VEkGrv&enAc1Px2*jczPh`xR5bdugZmOLnH3w>;T$g ztUFAybr=UU&8p7V3>+^o!_;bt+39(+ScnSmP>&Ew0GW=I`eD9pjECjM*5rd4SJeHf zF0T1dPu+DtU`^*uB7^^uVlA|JR#ojUi#_~0vb|t2qV|iDp)L*6?y>I~)>uh*FLg)G zf07x@eNK{hTcAE8glY=H};o&Gp&AfdIF{YqL+^kGy;> zp0cYf#D53>IEhig^=kCcVF`X0FtpWGwm#aY{l zh4E~axahJ>RXT>6_RQ|QGqx(rv}6U=%5Ru5sD%@d9Kgvq60_YVz6$uX~UBLU6y}9I{slC!GK%Z@&b9H0Y^2Kh=!OMn?w=vF% z$3FJGhuQb{jxfn9@N4iPk)j2)vGYv?mhe&Y%KPE;z8h7+pD89|9$(@eGG>7AkE+JB6T5q;=<9p#~U^T06 z+f6Y9M00HBVs-b@%<$lC93!|S;w4b~X?p;v-@98KhkTFCc+-|giHnb&oaQ<;jE+sc zAG&B^ihtR@C1o{hPk6G1RQ`>0|Q%Ui)sF z{d4yjZ^o`GMCAAPNmoeX`x&Ch=ntI8Onj7uWqg@pyQOxxada~U*1VUudYPvh;6`k5 zp;%n~a<}7+{NLcodROvYh6gL%^;;X8(G1cs2))u1;*PYpKA?JuL5<;3<7RwjhE&JTA2%4`*)13??lVY=ZOh-HhxC7QODf~# zj4RnH-60#=v0i`9!S1{w6EZkAz6 zz~>6fjD!nopn7l=PoZ!!Z(;tKg*x!jRacJjGv$!qah+vHs2OSj6)&N6#;p03t}>vl zqUsGYKo+UF2bSn#eE3XrtnhUbkSDXh_QPHww=;=S_-!2D=!>!*K=g$8vU~>{OjOa0 zOtcdKyOyQ={buG|qnvHU$!09WY3+QHyxs=YZljR2>EwdOKMI33q;G45?tJ~v)7L(6 z482>v?;##DTTg!keOjbUFu;n6Y7I)b&SsBnO>g;habY=;ovwF@dw2}&?__mn^)1xT zRhR?x%|X374E-pXINJk^FV4Qh%qm|U;ftu9$#ofskGe(SicIm1-jxzDz8JJ|Eh>~& zXtBE%PFiHZh>2n5dBdOn2~yyZnUi^1&myLSvB5asG}{J zBhk6gPF4ou4sUHYg%)Y(zF8>?)|nvGsrQsJA~p3{J2YxNC%pLWm_Pkc=a^Ix;)a4= z^uN!%VuUr-_^BR_wwgf_Vu&8)=FhJD&nLG?Gxw=IiDoUul4_I~VB>ObTjMxnrY z6F@La?<>z)vG z#V)IMk@>uatW1EZ$KNHqPCW@~(X6e7N|6gICLey#Bcl{chG1iv{wxI|&kr<2RJn}j zEj5rqOAg+Tf%w;5^(7oedpmg24)iMM7|N~NEkq2JQ_qEpX`B|&+s9(eC^*%iC~cOj zCy~jhikwPnjpqA(eWG<;xd#qNM3bYQ{wW<$Ujc`~Lrj9()-t)zKC%Z%SfFQB^ zZ^iS?`_4tKioEX+7kvH32WJF|zSC8>et5GdD9R4uR$1Q=!%WnUo~%y54y`R87L@ZB zGppZlj%pzy&?eNSX^Otp5&BeYkzQ?H-N0%za(L63`7n&LIE%Boyhv+S1@~)EeJzJ^ z(JSonh@YN3Pa)#=#J1pA{l7wu;9Z9(^UiW;aoSEZUE)bh?i8zMH*}Lnl$~RdzKUkf z5xm2e?8D0chxM#t}B+F>|wjp$q3NBk|$tr+1)Uy zsjg-mSUploZ(O4QwyrZw(L=B!!y1~H4P@(TRUqW*>>VvHI&d#CxfcGo4-IQlu`6{a z8acNY2F`g0E>*iFeUUf`y1HFVU%lQvVmG@<%ii_j9CVJ^agTQ;&f=5nvF!t~dQ+NZ zFfoGk-+)Ah765A>!*kJy4|E@Wn`$>6w)OQuVi&a}V?3?Jy!oHCr|%ayO4JtUiDRPB0D+5|~`< z7Of6HBRGmzCLf%d|BR2nyz(hy3Bux~@QUK_tI#@YnM>E}Q$l<`>}L_9pw0H99<%n` zOi}OR#(?7ErdFx)Rn2USc+AeeP9{L36X%n#5A=m;YBCvE|EMUSnn5pbM8={jLosn) z&%sqNolcqCSF)qJ!fka+Vx5EbLYL07ZvUbqAs}U7)S@oF_o}arKU8dWWfj%nUH=cC za+?)38>TI-1n{PWiLSc58&ArX(4hNxw>k=D z9Fg{|QbZ(0F2YVpc3+nz*y&Z0=}M)3D6d32!X}-jfMM!=0Xzd{#dIbY=3d=aN>upC zgB>|?uA^aN`aaS04>}82)nZ5|2Mor?q`>4p4F|rkDT(gkMK~=Zx4e)%W1p#sg5C-` zILliXv&5hh*Y&E#{I1twWVu)})Z zhn#zkshe+MS-0!vLYjU%K5GQrbTs@v@=%AzXkJ7~iFOwD+U3vZ5l1+6vQu8&)51=ezy?%WTx)M{RaFm3HIi7FCfnEKyX)nbX@HghUda9DenlQbdWwgb- z^2rZ4jmfikLNq*B78%f`dR_Rb-A$*d*C$}P^IfUw@@PY+H?w)&55>W#9`-KhPFizgypy}|oDU^$q;9MUxDfTrH z%CSU?U0jr$a_MpG`$ZXmAjQ5omde7$A=W7qI2aSRfw%*YqT75TF{s;O1bLG_rwIU zPv*7guB@WTCIQ61(0nKMnIH~oEe1i2A>!eNCP9uvi*%vl_Dpjj+@|4$!zH8){hFY2 zpqAMEI$22(c$la?jqM_VIM=Hq7@@#ijvclA3QGXRhmdJK_EiR9 zJ9jbQK3-CVYA=?a5y2{M4Fe?3PIyx6@ux9gwM&N%9%I{4767SzOjp0t63!lCgIZ`8&YQFr=ZI(ebdt?P*)g#`+JM@{CZ? zx?Nt1q%d{}Z_M+4OsJRc?DgAMcq>ZfAY*8l`{K&F1o~s*79BLhbuzE95;MEXBNcdU z^y`mFETzB4-w-zWz`hL+@xl^^0nlW}R0*0^3D_+GIm^!l8`EbR=Py~jhQ%WkE6|Ay zvo|p-UYPk#ZD>9(?X0^$mj%p#T#2*zxT=a1w%hml?z^M)ae;qHj%4WXTyEDRBo`Y- z&A8Rz9FU>BHkN~#y!)U1V(*^(8ac%_oibaWQ;B%_Kui1Ji<;bh?CWf2s&Sr|M*fE2 zIaBkvEuBqU%~|h9<%%l{Rrm$ZuKgHmY_;+1HEf5VCF$#QF=b`B>F--1?}uYAtbO5$ zY$u1+zga)`|2#=}21L$}Ch1?O7R0NK7wzGY#j-z~Hq>FqS!jCm>YaMPJcP7%)29VV zSqMVwRB9bzA&qqxIQ!~w$YZ+2#fz(2Si(vCi(k<6d5ZLVxrVqkyo)D6j5=_ zA84&ac|xpuQdgr!cmL6n;ljuM)b@e&5OMFg%Ln>R<0XwzX;t0;B$YozTcL|j4f{r5O;NlfqrkXP z=-pm(@r4o)y*`j5a0U2Sbv(V*T#d1tqcly7Da_y-b#A&jl*Na5Ofra2>r>l%D%&7A zEy>scdC4=qz*@w{QHuQXB;DnB`cmMDKfTjF8P@6ckQqwp_OFezefAB)@kl!x>2bTf z3n;GcE7dS1yl{U$CIg{)M7gwwTecZC;ltUJ@~4*CqQKs!-glT4B_@sHThe{7oQzlB zFq%)`E+T&z-Q$@k+VU>kDn3@;o!A^o-c&}gptqUvTo**}KlM8Qe+I z9rOJ*SEZxXt+rRjDL=c}n^Kf}dcxv|K_I)7V@gqmoHExqmREMMUxr&ikU})CN#X2Xn zgrz{Reo!7Hw%d`LEa+Wt5}5dV#Z!K%`JCPH#2z%aI6M0{*Yu3W=y}Z`6CH|S_Ay|W z;wKr@PUpKQPRqCN^2#XXhj->Zf2dj8c2Y;L@T}uP?{+S%#Etc`$7yWZJpxYfuDY+R zz7vWP26!gHgs?+i=9#p8CgIVu2ayvRD~b0c1g-=wLVB~t)z;1m8eGpA!k#UzV6;qy zTZwj(lV4*sgcyX7N^?@T<~I#P&7U^qd30x;yxx_jRyr_KpSoFG^;$yqFfYy8NG^Lh z-D)g}fxz&=rH*3lq!wYtu#o1~M{|8QA7HCYj&Zr@r0QA#2i==gdf{LL^2s9cGk+G8 zNXK2`6(6jv_>ZR<(P4+u=$)CL87~+VA|os>mhv=|N&H~@37gWA{amKR5*=b4r{Q+( z0pbOV5o(}5cF*>@znEh+8B<=o!6;_SJZ(REcNFY0XR?d%)^CNyR@PSrUBq4{bAg%z z;ZcqD-cJJATLI_SlnQ4=;q$LcJ+i9blbS*{nm>C)r&(;`T(Y8`6DU<4Ly4akqM>b` zMGRW{!q%7C*X}n+2DmtkQdgOa+{{GMtXp2TGtX?q{&LKsqR@AQwP9Y>W#HQKl}r$N zHE3THY9zdu5L88eXxPhKxWZ^?wE* ze(&Ddvw`5s7ZC)C|2=p1tJ)P&CAy=)=T1sa9ZEn`DQF|= zsry~=+jG@8|L5}K977en_in=?dZQATuSa>cO$THLu#g_+(KFlhF0zlY)PLw%#5M-) z(!kE^B5`a=CWUbt)%IH#Ru|Uwj@(X9y$&7;H42Dm%*{Z2ACqpDH ze#MAn!R~&lfky?;obW;&I!0v@AR7H|ZI+I~27M&#nvTB&P5X|qGk^sR&&8^hz#HeE z7dy+8A1rX2quP)a3q8?ton%?K9vShx@Mo$x-mfjbmFFd?4eCPed z^53uDp_&D+nNNJ-vj33M<4J|&g}1omOaUsiipEVozD>f8)zs=3Z}PLB_iesf_!(1C0;{Z!H9x?h&==cT+^SY1&LD@45UbPN%=PE`nLLUWseUK z*}BIUtRec%q09tVGXe>g;Gh2UyCK=r+@wvmN+p13Ojc-8YNGv>@B^%Ye5iz$iQ^xj zp#0j#{Aly=6=eCIy;<_L-@E8Z;Wy2l>j@8E`PvE+Td949WU|>~c-M&q)*pNEHm#{T z9);t428U7`iMeMtcq5J;I$pQ2l zp(|oeU>nb&k6U1`uM*Aak9fGw-^Lb_@Hb4$R(|24iWq!{$Ji-Fc3gR)KT3}awl~F8 zjt=OCOABkB@fk0DZ>fldvaT5~xwcgXtyY_2g1acq!YX7Rgy~UtZ3XTO;Or=m3AQon z)eh9F;1_5rtWAnP+@r!=S?V7dl_XC4Mzym0MA-NYXPh$-%UGiJ;umcs2=UlE@8#`c zh}oI9>H+<<5R3;t@P)dkh%_tYQf?+>zd{$-DuI$v??K|bzFaBotRJk@ zH2&~q^zv(qs`NGwst=Psi$7i?)Jd8$LvKoC4`0nstFm7_KMRG6JP8vA<;lMQ=40q4 z?fj*)x!*oxj$rm|;UGD`j)R+Dp3-Ml`{6L~9ku!h@vC2b_aYTO={@&FsFO23j59iA zZK|E;WiR{@@13aLq#u%od&27}^xM{5^0p1{8e4C!DVMoD0{>u=x%1Pj!UQ&q<2It|aZ*ifg=t zLI4E)zlR8FPMV?@C=DVma%sQDQB$ClDWWA73{zAK@EYEdpL2UtdDyfD4up}9^?~fY zKXU6O^?7jSv+CMNFltA*3-htP-C?SrB5z0On^TJwBaZ?mNbZ=~Qp}I|WeJ_W#{bVtp6w6WgdWnw)Kp93L zKweL$=C>yD?==coGsRJDU+RjlW{M5CyrgrOcC0rIo)&yR=U35Y>U@BB&T9}bT>z;| z0@WmxuFMKWxJSj0eHV5uA2g*p|GVDUN^Rbn_`}Nw58P;8K011m8`cg<(*S~<;p3lm z{&(b!A@ZkIbJvoT_6(0jbW-sGqSv6Qea>LSP9|_R^e6 zTrW9EIWL><$o4vIvG(7LZ}~#V$(mMgbSmuk#mAZs%s!Y$1!b+P1-Olzt5aYk&{0O* zd2B{w0^sUGFF3}z)*?A?*l&z*Q%N3%)$0;ZcqRAmfYkE-E0}XY@iyjPNuUu?fEiKyfo7p#P+S%1QjuhXbuZen$n}+Unf74`1Ujadr^m z$2Y-j%Kg5Z`Rf*er8Im@Tvg8Rn>Zt=55Nd8QP1Hblm^l0w8GF%oz2x~WA#?cmSMEU zIcD9MilCh-DT3l+JC9DF`QO$+%&?q^3Qm+;-DtbE%VJ`XP^m~jm)>(S_bU&Kso1=a z(=?S^^pMaQJ1hh!fjmT{Oywvy?(F)}fnBj!Pnu$`{OgwMmUCzLT6e$az?$3rN2ENr zTN6@q_=|r-fzG}5evE&&;NPMZlzJv( z8(w3zDp(jou6za_u~(BoZ^Ju7Wja4~51{Tt2COpqUpdBHz3R4_4v2;KxT5ch zTusqI@xlOW2e}FLEE^R+Iuepd(2i|_8@8hyx}ivFLn(q9D!gh2QT{k=rUDBn2X8Af zqqT69ZHE5+wufQCjO!*lM6Lfe3vNlZ>-hklvW?gCe8}w=|1Hdg`dO@aHt^;*uY`4c zss=*L7eRdj_W{9TxjI*?)!?!Nef>fM)aaO2NP#@0V26h%cTY&2WG~*LK({E)Hi;cc zb}yHuAQ>W*QW$5;oD724(`<(xGIH#26}d{z4xRnqkHdB&V5_LY@_(K5ZwexE06kK; zwblwu?Wr&FjZ-#+hg?ZjzE$Hx4Pt@PGen|qO(KKN2i>-w$0n*t)o*4eWUqhS zib}{%p!a!wgK?}txgmVBbvy}e_aBmc5{Liu;}=pYqCk1_9V}js#-{m~ zE}DwwnVLd}LdQVra>4WeF0*6pH#_9R(d(K5OVvQL!7G9bj35j#!lQ1QW$5q`Nyd+W z_<%&7W<`eB+U1qPI9~(FrT;npN8qRb_mgR$Ux$Yf7a2N-aC-(q{Hh~jOy)RGY znz5ayhX(pG3%|a3bHfC5OZ<1Yt;+Q0H31F(bNuVu;s5uOMPi@*1n(Pg!T!&&OmL!% zlKo9018}Y$x^=kEj9mze#ZUO4`L~9FhxgsHL|mxtzE~@HX$^P9E{?)`zUdT|I4u5 zRh5Cw_`<_-^p$RtR@3Az_+L|?urdAsNJoh&xw~bhJc90odC!iLwR@>TcZ36dF%8IO%cG3Lbq=iz;3bBG0q@S0u4_w z?rS1p>j<0xaGNk4Ij3~Y(}9R6SNL`}+!}7?X139jx4i8;U^ZYj!VZQBE#|vOcU+-f#9>8l&$HE!WkN*CLh+KE_QchV5D4mvD|TygA(eg!9qdC&I~}h5{Rx1u8pj za8V(3>t+XWmjlcuI7gN84%J3=EF@gPBBK; zp8qqMQc$e-?#)Q%f8Kj(vhhDLsW2wv1fy8)(NFOUA;0Mh2|N5>=lo-h#bSQ{;1gxi zX_0=c{%jfn`Q1(#T1!HF&`qeJHbr7~A&dXK0KH5T6YCS`hyEaHKJ3R;NNAGyh2$Z2 zaW~|b(^|Ox>B|H(oV-uGXr~@>nl?AHlrF6sRomRUNS>esVwZG{iiq9n&wB z@N;C%RdRbC*Kt)w7fIPS`Z7^Y_S8xCLVY}aT(rd9v{@QTEzbC*g?{QGAY{zH{Rkjs zdK(=1RM%{aSTTX{od1wSW2&6|j7NYJO(eg9UQF_Rfc)WTXn#~;5kh@`&HQUw4uE-E zHA;4_Om1#^mlAAB?YZE?kpMQu>tIKlhM}1HQkBK415JprU+xg#9<76S!fB<;z18Ym z(r&bJg}eb>+#xFaLwia|vu132mPN6lA9KL^TdLuHW5>AD5%AAeA;Ym7pzI1BXeH%7|y=xMa>fIR=~EKQ_0 z<7qL%ZGXF`@L!dE2`mjf-M000SQ&Q??|+HCsk__X`mn?QEjYo4)qNGZ95g9SlsFrA ze-|Tor!WFugozAmT(n9Q?%}+S1R=$6h`(r@#Xs?H`yVcVDYEGAn#g?h;}Pn|ij&+X zXYSW$`E*fSQC!UN2&oZ!J5vU0W54E|dVxxbtaD_~McN$2A2};7<9|}=tJ*j;eSWzC za6bR#%Xof(F0sDo@#LQ)wlmc}Ph+1h(=P?9E8TyTigYMEXWHf%gAT}yoqx!iGiYF& z?kf%Q#tv&p`^>bd0?pGzXTeJsH|aHVwu-lyH6R|T9&-C}p%dA%bD_ER2R!T-llFyk z#l?-2_LC=tbB>!eUa6lo&o})ze>f=oe>8msRMY?Wz92|RsC1(s-L1fg4E34la7;|xxOK_15cNxoC6^0Xd^{5id0w2)YnF2p~pqH%9`G#-IH-( zc;!FIV_S2q@bvzr!@sKX4?xxOggzLG4cqoCD})f!JVX~JDz1!V(PTWW8d)5G2pjPu z_)!LT_e-%yJxv^ z|A#e1J>M$p-W5YMb6z!Hl^g7S-x&I2^bdsX_52Tn70;@#gcX6NE%h9Z*+VZCs`Eyx z^OG1=)1{Hj2jb~KFN46+E2n?c0Fk^*Bu@c+ln=-30yl?^=g zz3H{OAd`KUKGF<(1R*Bx|3$!`I47W}i?t=}6$zHj8eOas7kqM>2kWHiQ<_o)eExL! z$Ixkp%KRn&0{deG7GGnltBA1l2mwOgTrE`5HiLrVLxI*|;tUIKAs`Mr2&^us3G1F2 zEloF46jXod44k+8#d!7118W%Ysk$TAh`N@hmfTCP%@BLMEH!R3g%O*8^r*k)cC~tR z{X6m&PkW9g6)iaDU|Yfq$Gl>Ke_O-FSeRp8*U?Fm7ODM7Unk*EIvX__xZ2Y5u?(Hh z&#pKt*1}d|6%C!s=prsugBCzO1xNd4Hyz!!c-P0y52nT%SF3(}Ut|%;Aw>JiXWpak znwS=dy#ogTQE5u)EVEtDAXlb`*KE_H|%&AdWJw5Dsv(~WXUB?trM93r)yMRo( zw4-X^Vd}rEN|7+bn_m2X_*&}PrG`~gh*&4i@}b^-r4)4o_$Qk*zw879@6C2)qVChe z|C)=|H5B@o2LR6%(@T?Bph}B$Hu~6tGh}@;(X`Nz3ZW^ zb}V6&*LoD7_a~C|s=`CoK^PsC#}%acw`v5Kp3y#Xv&Lw1*fRCLY^Y-D&hxOPv6!ih z$@M#aJSGnFRTQIXcGCMNPilzK)60}kue0as=l3?o{fJ7I|E%6yn;tYDNEYMEC~~2n zXg-qWMG#@_Y1m#p4i+9(`(}T~k7&QUe0WY}Q730%y_9s!syI&aO0cB5hf#?Oo9U|p zbYzW6^E&BaTmNzzW$phCb4_#WCDTc9g@_Vfv4+}RD?)-o(7&`x9$sg)jQy5go!`FG zkX!fCopb3)kY}d|zCBNY4<#DGz@^yK zCEDO_*48Vnso!3+hq}mT5mH57l-$=;3Qb0S#VevCdP1E$*@1YZ#yI6-oHmG*|3HDCOSeT>v%r9lpYzLrQ;`Ke2ZJ zN+upVa>ME^rnbd5zNZVeeu- z&*T%#yB!H{%^YhNUIiXr&m5O7lB?8}ceBZPp+>1YM6VYK#2zg7Q(CC%-pq-eRG3`r zg;1l$rUn4iu{&|X0{{12v!=Mn<3}SY--_q*ue##4%TSTpj&ZR)%DyGv0K5*pc>cxVq!|?kO`< zfepQuMy1KCelCVmfSnIr%kQ_v&W0cvtP2ubKP~Rbd*#8mC4cq3GAJtE&$IkUZ|1(+ zEEGhmhJI2>qHk)>G5*S^e@RfP7OECXW(g{hu`~CQF2;7sGwT1CU*dE!mh`FKQjnk} z=4GC}j8eqGexppUVR+(iq-|6L#t_ZLl=RFSqnzZFj zLaW5rEB}E|EW|n0hk^ektux@{@jsZ==dJ^z{}4uTRS}>(&g%s9oZmB;3_Xj#c}G;x zVN4oM9cM2m`=3X!kUeXaKFHOzM)tOc+{rI=o8i>iFW7YxYzRV%D*MSCf*6M|zX(G0 z%*-s^TQRGr@9o!~#ePe!r+Z*QkI6B8J?{oSEc@Biwd#hMNtZ>CfXz)&yr&q`3P`}6 zPteq7=0Dv&_vuUR-upB=$dR-47I{eLpuy}q8>fmVW{>ntIeotOx_CQ&fS|s2cXVK2 zPTBzEMQ%L3n_!c=KhFVj{KSO-058qj(3mDas!yhrX8zya4EXa{`4N0%RrCAz`0S(l z@3|mj@{C&fgv=#m-S6WhvMC7uC`RjjqQ4(zHCEJqVr*jUhd)r2aAw=rqO({p(%%DZzvzSG3DEK9CkugBJ%toP-0R->cUONstuOxZB z$_H!p%l|#wX6>3R7xL)*cpqa??~sXrMzieF5co-f%EmG^P+)P?959Z5`D0cHc3Vux zXDr$_jUOglMpAhlFV})vrO#K)U#fg<(yJ7aQr38>oD36r+$YaQLJe!ve86$Uq zg-4F=$VsCi7rih|==;dr;K8wM$R9@JA!qbn>`lJs;9;5Fwc1`;b}bFPUIjl39$_=& zlU30A{r&h%Y1LR?5KH{nWZc_z#mLLdQGqUYZTE|4$$jL-c49BdJ)A{|CG_??;<|O6 z9Rgn%ErfTjd7xU#oKn3ULW=Sqk<;0RqKBWYi9|0#)>0v>&9U%U3CBBccvgvE>wcg^7 zj@eK2M^8zAE><|ltRg=9GoGWoCRbat8Qk0QG-dI$D`{cN=a5X3CThZ5<6oGdE_x8n zitr_-98{B)IzDe?VSSJN``5(1_XT6&Bxr}3@4dWiKpM|}u*~rqZ%8NaA=Rv)LUINu z1v|vn2EUWDMaLp|n2n&FNwmDs&Z1_I{ikr?dbvzp|GId(-5DxY8RFB-N(zqHr675# zKpoM|OA&CmK8ictm7czq51SZwG^{hIo6IF{fQa3QL!~~Cz0-X4doDgzQZ6ed8K33=bY!}TW8<~6G+5eYt-1S$ zr566ryM+vC7~6#Qyc-lU)Gtl$m6A{DFItuRvquI7~bFWX#j|a zKb|jHMdkzpT>3xTQQ>Wck#joaNuJA=scwV!DtQId-|ODNQ1JEa*kt?6`Km6jqPuhU zIg824O$R9paV1sAbi6f6A;|=N|;_Gzf`F2MOKiqgy1ep$O zvW0wLJ9?8=If=sg!N^!w$ZHTkQ0gJ>OuSONE?O0s@yhk9NqgXD#6vae5t8s?tx@W6 z`iwwd=Re_c7$k{aqejbz<@^<7IljaFb*1m6?EZq!;k!oIe!3-yRN-WD1~{%Y@ICrt zZPUo}VDztV({`s|&F{C%fk@n|R^aO0HE^xHvm|x95^+@-z#f}D)P`NFxQSq27W;R zb_4#-43`(87o0U98KK;#BoVGF4F_vO+cUcILs(xlPpZVKl)=>9WPc#_|DAtg{xcWk zil>o6uxT)n@Y$Tkq79w^(&6V(7w6D{Y~7mKer7VnqvwA7;pae-mcZ|6Vnt>m7#$9tB(#;Z`0FQ#?5?$CS~B^2@lKs zj?brROMe)Ov(2fi2SCtwRX>2m-~WO(9wgnX;c^*V_zX^N-dHYFo3PTFxgR*07HW35 z?G1D0r{xQvRf^DGPtAJ08aoYb>zeEYh4jkCZ*xy_#`X#vw)jhy)ujY zvoOSd^K4VLWAadzxK!}UvBvWL+ye?Qg(YVxe(pO-FK)5m41_ROotAS9 zkuF-=2y~o0_2%YVJ2VMfBRptCxh8B{TvT81b*qC=hx`fe(S0k?n4-PXAlQm+95p}d zi)_#>X<1R;OoEN&dGTcj>}WGI-52;3R{Zb+G2gutA*Ue7eh z2}s9%bTM;%Cwr|gfvC6o8z*izS3&eq-~$^*AM!SzQRNC?iin;)u01^-8|Jicl9?`F zw`%e|7AVO1BdGnv_joT=g47)hXSDL4@O++-U)+M(f~F(E6T9nen0M8_RQu)rz__*Z z{_W>bi}?M>XU@Qw#ng;vIldNS7*HZ+c9jf=ThfRt%GvQR1&2h^-D5#KpN68zE^{5k za*LxK*U96)e5om3i&`)Om)fwWkE?Dh>|tQm^GMjTi&oF`YJ=rk^f_cqwLa%)wj;jH zrX?1cz5WCS&Gmz;KGqeuEw-ZK!;K~b2}S;VxkNcQz<>Tla$Tb3SYqG>+3*W3h*hSk z_tL++7s5H2Yd7|rpt&%Nm;bG!sv1vFd=VZdmDgR_R#Y=6_fJKUBXjdiS0H4eBr z`>PtEB2frZg11s;Os~38cEZ>0%j|N?qB?gM)|)+LXX_Pe*iC+~pLe%TegIrkZuYSg zU2H%((Y(FCxX_8AWu@${pbU)LNJtkUl`EM>T4bD|P;l zxD&luoG2%}%RB!j6&SmAkB2^9;1iMd&ar9I%$J@V%MhNNAS$;~0yy@*^}e1rS`rIX zDwO8$6$Ibnw*8u@OnkVA^DsJ_H2de@hT-(qHLv1K8BZV9)j~9_tX+{wqf3irt%|tm z)AK(+2XnkehJUujCfgaq^)+@Cicrz&nEUfln>UXc3h?8O*KzUHx9@@;aDrdB#Y-E9 ziH%xTG!yFUo;jbNHb{UXtj_0H8I*lk+8C2#C7JBBdLA zk6)H)_XOXG{5?K)@3aks)48l+K5Y`n48-*18ll$_f}e))TTzw@7eN%>bAT`qrh9c` zqU&4fwz?q1iC*08Sp^2O8k%buKPE*;V3o{ zO9=dsSF&A$JPf%f7dQKP60@(Y-fsf}cJ6G&kIf7;xy1YHHF#MxVfr41xw`_no_wK~ z=K5Ca)9$p_q!sWkd4_)PmKN~p?E2`*)}M3CZO6yp&_!M5o>v?+!-Ilh`w_T_O z(t3#BiQInZDcap@-v^3Wg8HP22R{H#^}Q|EWGH_ABrmb;X<=mzA@S5Ud46oqI9AVa z(3L31=ILe`47GJG48Ae3&rITo%b*@-5V3!7NyX(##w_FCkBIjCu+&_%vG#Cqs@k~p z>qYaHAn9H{08nJ%mp2%}hGupi0LsUk6F5O;KbOKvzITzWlA>;-$203ulOJF#XC zIpLOp4q6UM8;1c<;r)hukO=En-!Aa{K(4=C z+t52+ZD^qY-*33W_x0v7QY`sQjXxS-bkjRWkMnloV6@ID28ppvUN{2$g`b}cO(cLRCu94n&S8KQ9(!} z4Co|z+>nUAj2GMvfJ)s7r1YYbiFb+DL*QN9=FP!LDBM)dx~@H^4#4fR`zmY$_IJIP zQY7tmpnn@P3+Bp8Pn->q-eXC4?#>?IJmqhZkzwPXE+zO>1e*97lf%01`+D;3R5Mio z+7>sI`Z&WMLWdpMQrbQrVGA)z0k$Q9`oqNzqoeEE2yf(R`kDJU@}Tc#BIL{uML!62 zJi!RGf0iT8=JFxl2Rt*(H&b*2zWR9PdUF=Sc$>yBgXKrP)A%D%N@0SUf|;Jk z$+CC!u3r1y3d!*omGYa7GuD7D!=V&t2 zyWXCId`8>B6S&IgT*a@~mn$jw12?Rb)q5_mq;!VA$QqXESX z1I~J^hX*GMJrWduxObx$`WA;`+xX3eEFw%gIr)H%GYJ76jk}h_KnCe>BU9Q%rJP(# z5JGt-dU?IV+I6-~$0DE{bkLgu4M@QdJl}h1vYCDuklP#5GW35>Q&gZD?FAS{#r^w^1H+k~2TlZX`u%MZ0w}=l*^DtE0to-l*h- zJzG~Cn$5{y22yMq7^TAez5Q=xomen-FOL^0go}?rI?lutqUkMokM>DlMNuzY5`fLT?23{-Q@TkdtrwQ1n0Ub{0Nd`*dM9Htg{A}Vda+_KEJ=LaQ^23xfw zHdXiSLHXY7OIlYe0UWZ_wfdAhqCLCr8(93XPp6PJmdTDc_Wc0x6Yy}M7%K>}D%!JM z80~_T2Jj#kThz_;3S}tULki$UKUZiD>6Eb7s69%#4J8;7g?wz`wU=3*ohXO?@3!Z7 zbZ)40ueI$~$|*ET_pT4Hzagrqj~d=hEV9hW{|}Gqs}*Lsu_W3@;PxKH0=MiG_zorR zj-$tXXsy^60kz36!%DT~55nohupMuknxpx^c69#ReFnNo7S1zd4{eD{mq>&_-Un_T znegF$d+NfZt|4_yh!iH(2$;t%P_pBT*01~fyAw7MWNa3YFSYP}f2|{_&4h}Ly~XPL zS3`?k9D@vk&!e&30}kMNMC0Gz1EKg-f)Z7Y({CX z4DfYUtij6lqUEtkXCV8(j`ByQSinm>KzWAKJWp0Hmd^0@-W4H#OlK?Mx<*}q;cs1G zcS9UF#irTpWBV@&cR=Q(9A>8T^3vJvG-`Ygv2XcaDKc#=7)v2!W{Jy4{*K#r>z7!L z#guwLKrODjBWa(qXI4HMTpkNTvNk=8kjL&2{DbmSBlHwfuFwT_mnT!t6rI66Fj-i- z-ni?Gduu&ZXMkgPU)Kk@1qpev3^pqHKIv*e=gt$Ih5E{=GpW5-_H?Nk# z3twl8kM3B|a_;9z9gV%-+D*6MS(pRJf4dv0a;G&Vk?Y*ofxRN@Uquh6@^bPSkZha0 z();nA&U=uqd>M=;QCNe;3=jLksQJVpzj|M-05qzvJCKF9%YHz`Y=~}TV;OeW>tK4K z<^=(rN@58V1QGD<@s%T4{L)=PY;V{@mh4L^=K#lxZu9nnLx{CdaFbc$aE%!w=z9G}&tIp|2@CRU=9ng>DY4B<<+d+~U--l!MzyBV8vjY> zGRnt1ebn)EQVx0XVvMHgG{{VX1P4t?u@bQFy64qT%|4OoId#chtr_sE-nx%kx)Z*1 zlnR&$AXOCjAD-5YML)M?kB-iy4;(qWFWVIbs1(()%Y(9B%~i zw|1rh805p+E;$jOY`Ks{-_wg`YaA?Y(- zI9_mlntoKhIP+(p+%()iawDfNKCx^(gBPV}^nQLb^mc?-AToOo6$K;SmoM97)U-nW zvDhG0Y+Dg2jn7Fs7q>fa%>fTtnQ;+ z)92U`+w&We9qm57F~ia<_$^Yf&9KC=lfNY60sFfm^Hl~Se(NC}!>OVKiiuX5tr(>~ zU#>1$RJercN(O`N?!aB$+waIw2yFxa(RalnrICW$hgzt`+Oy_ka)`154FF_yBH0By zKW>F3B;hItnmB=*bmDeN()TBrUpD&6eg3oUUc299x%)iEay$OWJjQn(2VqbFA5d>h zEr`!WS%T}=J?ex4jx@N6o@*!*UqR4I&i!W7w&^yjUpr0eF)OX-A%7XVBfLM2XZ!sI za;}8(1m7I2_593_ArI4qPZm%)n*Y!>@rDl2jDVXkpR952a^rvMR~s*wRz&=C<%1SdaKQieJeh$~fnBa`kS2u8yuAy%^Jyntu-v(g2x zhg9`L&+u0+#8x^U(@8Ale zxJOqW;EIEu>k7WF@hdf~EBFuP0+6iXO`9Mh)J+pGv;BDT$Ht-SND zzEdBz*L{E1VDeHUM<6?k;L*(+**pf>nU|nKk@w2lEUXROz;K z|Be2_6qc2Jx+Eq!kTYK08FSl2OdX=6lF))0x%~>WBjA6KUSn+Y=4-femX`M^=A_(C z65F9uy6W%;t|2+>dfADqi3utpdM z=;aDbda4P|dNJgdatKX=^A!FV@NbizkX~M&3%G^g?>?AjhQmCTRe*<6-KC5&QUe5T znf7CUhX1T68uMMGyF_*Pr~$QyKlpH%HycMjK#4)3pO`Uzfs`scAZNji5iev)j<@3L zrvcX~dYwhkbn1=7laR4vQ2-{w^F_k(Q$Gg0B}x}(lnnb1oX7|G%;70q2J?QZIR~Kg zu4qwmicaBO*MiLGaJ5}a@awg<&>z&?|H#iw1POvK0R6>l^tJ1qxv0%TFr*qX)+w#` znB0wWp=RCX5h=4HLjTZ@nes)&wC1LRntWv9;P?_fcz^>FXHW=x94#u2Z!qlx~2P8H5)S#Pz79I(rMFf0~WaisB<-&p12 zx(Fr29kd-a!iiQ0L-g`v;sv`!=A9%W3btO$kj-G;6Gn7=baQs=5^v4sxCByh{y822 z;7vpBa+~n0BrtFi8&d4M_0NgZ8wHlQ1E7qx2kC7V*6pcH^d) z8RDaKnIx{$Yj2C;mOLg{bVh#XPM8sAS2GfQ@2*mfF%B-WsOAp1|4thvX^xS!t_3D%%2=n2t7!?( zJBf*G50Oz7=7emnXb(5PpybbwsGr!%i3*4f*0dduF5o(f0vk8k71PO31{L=)F0O)` zNsO6mBSq-(J(URHPc|DqgS$#8THe$QN{oF8H9ELkT+P=#thGCRnPJ^2J;?hY&qhe4 zk?E}U+wsBmaqC;PvMNjRkuuF^BW2hnx$sOG+q9GKTGG28;^WsmCTewSx}`6sIm<+Q zKejETWJN7<7RJoAm|4btW-7yAmox;db!kVG@qOHYUFDq7WCwkdklWsDbriaT1FmT| z^5H6yoU+lVR(CRiR+#mIiBZ_A)1=#rUspjsQJY2FS^s+r$Sbd{S%ybW!exejqz+i| zO%dPood}ozyCTPHwa`(^dP+PnNd7i3%%t1rXLnK+m-%-ZC8YO$Zfh2^#WF!eZCC=D zy!L$g=egZl;5}0!wZycg_8vcRm`m@eAe?$N=xPXT=fANsVAn$m_a=QJnS*QmeBdwN z7y#-=)N9RVinRE;h+oOI@r623@Hb=U>zkp(+~Uaf#Qcu~FjJYjp>=Whua{9D-&?p2 z1=BAMc!s(I6Bd=DAp&0JCxIs^#>W17EpXZEb6b-*A1iGv!AVN7hIl;sG$Y?I+s*v< zzO{6_8|vk3xzT$ajZJ%#w$>E#)_f47#5cdqU)t9DwX()ieZ8ZL6nv&71%*L+G!>;% zzDtZQYd7?R_^6IsNjGB}0mI`zJZ(aPMhy}Y?wLNnCdyN`Pui4Jh;)W4p1amypn?Mhzp%O1lnr zEDf1taC>auOYa6tJKamx;u2CDfn))QL14eUCr?vm>1~gi|Jn^r$c8JaA@DP`?^Vf( zC$I~<&wh!wv-mjA7wD+Nc=+ODK$ZzrNmG>Xh+H(@y^O1{?AX&DoSflk8XKUoaHz^9 zx0b8<)M)(eNAN-&E}2Dxb%xRUqva48qgXZVH$p0 zXBlN5Z;x6SbgaTLFa__BsZV*s%mUI5!>5(=+IF;ZhH`$z`g!big8^9D^+UGf||6`zA(?z52EJAvf(mh~rT#Z04SafF}eDt$kba zn}7F#6wZ%KtxND`t>>kgY`!BaDyAzx3gAuDMt)SY^{A~dgG2_vYFaty?h_4h`=W1J z|8mKMqOK)3sXGcn1{sKV;c_=60S-gpU$9)-p;c*uSN;tv_4lq5l2km4QT2xf=`4p9 z;0TymsPC=fD`N(heL&?wI??(eF_oiozkhfA#;506y1Yd-QWU78`a6ud@%C8$YmNeK z#rO|VEPvo=G&`~!sl-ddL(wKr!puDJ25RZnKUTK;l;2LEedoDz*hI@S@+wE2VQu`K z#R{ZBmA;UXg=c1~p;9S1;4;Hldo>uQS^u)~lmF0SMw8XGQqLK|JwS|CSki3`Ecyv! zOS_0~B|RB7A^wdgrh$|XyDUL#bVqKS$9IYMeZnu(PyxOgl-T~OwWtsm55F@fF)#Z1 z5bT>hfFDYUzAiNH{ph{7?NL@V|1{LuBXKaC+T^0kQCSQx<4l1|1{og875UkGa_Jbi zAqzpvEDMZop{X%hv&T@V)UgUSDM4Jcn=1`VJMC>B3gSpV@k_l5z#j<~gxqBX5CUJV zMLyTiM~|eAWHPu#JTUhVdq4iJ>SG{7fn;3v6OnL3L;U!ZzAU&(ih|68cc^d%h7$-e zXt5dfGf4`h0l_+W2t6Pxv|xm}jlH2W;zn90Xaxca#S0QR9=C&II93}2dY7jNSc18Z z`@AQ|GZj?_*>A!bo6#HgU-d7_i;l4txV-rB$E?PbZ#f{LMwFllCZvD`zLqxe)jRn} zeK6fSq6+h4ZugfL<(E~wE@kzpz;A?Sohh&3*LF)Essoq`ex5OdW$ZjbCiQRWg3an%Id74(?Rw76nMYl35rUI8v@EEH!MrV)x68E`uXfIS+a=1W zc=#>#!fTB6uFfR?yNHE2GncMFU*rn9_&LB-=5Es)Q+`JagZdHAwk?MeOGOWUlzh3L zlpfmLNwq`EHlGJBjeZ%T;--M@ZeH4s0faIA+xz~RfSKum+R%}J-68V_Bqk_*`N@{|g3@=hPK`Wd&!`TH$_-cT>c!}ors{Kr zy_wBzCzM3$Fi~WO@k)#LV%gSwQy)(|f*?8o{2?7vv-&$zZL>WgiZRJEKMrC}D#?wFO8}5gVUaw?l5aQc__^2JAF#$pmbamEo zMzLt=U=SeKsXnf#jCA%_vub!}E8~t(UU8z662ix6x)Fnhuv?m+|L|Z#?SW(ipr7U21g> z`wWl3|B;;`&^TO-%tzf!ygq;aj?^Lkzbwm{=nHoonjx$aMuA-bTCr4i)JjG}001pe zt|GDMfG0n6vjal|3CGG4y)ENEeHNG~(YSg|ezQNBnbV(@XyG$}a^FhS)YpXJdI^^|v8>!)cuDAppOXp{)hX3(fDPQ64)hXo~6?d;+i3q#* zBvC>k8%S7^aqvac6q9W}j1;zE$2w=wc90Z~~(&*+PTWFA9`lO$N&? z`s!2Cytq_K-4`L8VVqU1nZBs6$AhHDc$AYxm(ZZGZ$ze`cM0%!+G&N#!A|n=Xvf)o zyrs#)W>TAFS^wQvJ}+mEz!%j1;+{1@{uO4Wfgz$~BThanwD>15GNvH^1>lqQ>-Pi1 zSrRo_JuR3_oxi(uR4rJ+7C-gLCc=h@vX5)dV8icvOmsph_tnqAV2wC>B3=bsstMjr zq#6Lk^PQV55A>E)-ob)m_WX8_rEYc_j<$Mx*dfpHhiY^mzw_Fo+FN$gSC)#Bi~Vsl zZlUf=syDW^eg2Gc)sSI7Oc!u|!g7LtrC9ecZ7qdXg!OU2CAB!D2miG2!q&FU;gs=` zwNI8Z^=)u%>-<4*wNdv$`1v4QKd?`Be_*VBr)0)5Md<1o*ZhUq5aQq^;jMX2rbfLvrk|Q(SNugq~%vUe_E8F`^8Xn$4x@L@oyD_u&tA&33 zn?lo`;fWz>YS-f?fe5&_`y?rx6JRDwHpZ{Aqp9pVdC03>SO`a%s6X9Q8 zI3+1a>F4uqK`em)%|q$w17yCGXNg!=J<%&(C`K|RneL z($H*_*l^{;q=TCzY6-5|*VA7cs8>4J~bwL1sM zF|9sne1p06V@mZ*!$CF`(h!pHXMVH49=0&mKVp(9h~_qJ`}AR(Wje5gf%SnT18;-0 zFPp<=Dp_{JW4le{VI!^Itn#X!kP^s1J%vG_&vHp7Bk~@8DzKDt7q`@dg=E42 zgko(?wjtiuYp+@J@;pHqqUl7>N6}j_-#kA{Mn+)rNTp8P! zcqK$Vrze@u#(WonuF&F+Z2B1T;~S8Yaj|%$K^CsXrCcb&~N6Z$%EV%lYAQ+ zgOett&S`9YgBgvb>M`Pt3!^`cB1kOi_+H>1FiKA>EZV(_D4%8fZ~o?4BvAG>es!kn z))Xneu6rl+u55{dm@I+zhD{pzJAW2AAlWTe{LyJUt<8p}YcUD=4XTJk>d zRrY_Gp_dF4L$)I&!arFM8E&r+!5L6?69Bne#$J~5(`>a%KLz8bvs-T;d?D+owH-4A zv&yDGNAJwdg}jM2soX8P{oDhd`HX8;6HvZG0505tG8`w zO4HsOv{x=~WJ7LLXNm)TXy(x1^-1S}KobbF?dM2No^7X8a5hM~gJW|4wM*!$Wy)Ou zg?QlHL!9&(zIqo#R+y9=jP--B1tLz{YKgJVt#10MmIDDblVDU(tt}heoKd}RV$+*;W1v{P= z(cuEl@D59JK4o*DkZ*iVvFzP@`$U3>T;mAa7?S-mXiRyyL${dX8EH{q6+__d!Z53; zNT;)adjg}eZou4h<1_6(tWy4U)A`@b@)?VdNv2;9ecG>j8<=k zy~YPgISGE-3R)lb?kXeJcZalN-23u}yfyWYq8GN(zS9LGwW4XFT(gbv;|Mz-o2$IqjuZ+Zt9r6kO!stYej^fh9f!sLk9sM^;F3C#6h<<96moG}n*M<2vJ~H+3)p1% ztW5>((BIf-JDT=ugoEuJMetK;ajjjnvHi5CaB69ti&w6 z1_3Zq%)9}8C=n8%7q4KVwP)PcZ$sjQYep(Qu?EKVgkX#;LHsbrpL%W zem({83<~#$k?4z@Jc=AJ0tQ)(yvAyCfM5Bq(-Uy^X`2o$!_d5~(1C5Z4B6~B8* zN0Xo0pFso@HG9uxsP=cV_t;2-VVP`&^?(J@IKX0cpPyXy+>oMW@7lK!5LT>3PFzAj zs&wRGQSY%f_bFUDHEaKQ&X*1WLXu6yYH^2sVF#eLZ~b{*q;{d%uc7?I{jn^rhL2q| zgTGsCDHb;~SS}LPdh`Q*@h8n6UfjbtBGQ&X?e3jx2|*tIR_kw$57i8g9jBjbuXj0z zJXQ7#WGV8ZtyIbdWyZ5@llh8l4{^mp5ODs*$&X2eg&d^&xfJLMY=B6x2FQffYZ4sGMy#-ZbnpzMww017+c&CE0zPb>bZ z_gOS*qA6(Nt;Y@rJh0Npjp z_?F0rrd(>vZslbC&(_>Xv(HNlAlpIsWL0zU;b)be>lr&Uj6CB36~FGU(P+rr%ubXg z^p*7T@YA5V`7AfAkjXtW=CK@_8j$8gh)jM`E7u40ezf_`hlxyGEAr8~9bu^j|L!AF zvsmp+fjx^A294UPgV8FanzCZU0oN=CBQV8_1cr2HO+N>=Xo#xR4}LC_h}lJ0#)?PcBB6ReHB@Jt zUXy)hv`UzOuZ39N33~69n4(0;tm*hPj%E`(ReAks*z+j(N{J|Q{;5N(#_2sEWB*Ou znh3d@T1^z=yQ6VSPmwxLd)X!PD4G)S^94;ClkjnP&+ospDZPRHdC@&8`4abH>RYs1 z9Dv{Va753VbcGV8J;Vf>izDwycAhKw!u4E;1!24Yvn8y1&zm^rkUm+Bz#4r{4u9_> zT6Q5$Nf$>w#2Aw`O!N1mX0s>fc(p*OJTK-6BBC=rxWJ^%d|dDxF;rMJGjM5clm{Qw7S3W=_D_>*e)cytD1u|320(#Tck%z zuE%&iHiw}9jSj~@5nRIOS*GMRoKCzxsX4w}@lGc+UG?cKf7-u%-uVz7eIDCVT-8?S z7=2&+8__{k4VDf)YeN}6F?XWpk)7Tq7#exU#VL!ubPp`h?a&%T!Yv@`v&ju<7srLr z3cl$FuL+6=C}JA$y3kq&Nn~6aO;s=x2uo+fEHL072@%fzM8^WAA=7uc$6ti7I&;s4 z+wc3dkSpz}qJXXJ-}~k;S%NBBuoVQJ_d1!dT6Xb(f)$(p(_*egA#~QxwVN-P#dr;C zlt_DgtxXYH%Pjkehvmp1^H9hIk(PSL!KDx3mh+`qoe*&$%i7?rFU%-X(Okv9Q)i=< z4HTxkXY?fa4X=mi`rig`txQoJ+Qz`+xccavh{zl`@aSzH*vf=!E^;d^t;#s~Pp?VFy=vh7X~zkGZ2MoOZY+|9*5`7!vR)Jc8^$Ak=@N8>kt->tRi z(w5mgfFZOgnaKV2u??Ly84)*=-?{VyHk%vc&KQhOgnS{K9iPWKO+kv~tegttJt3_^ znIcA7N9i&l|C=C`<*4y>lPmJe8nOW63vRRr@Ik#>HoXQ6E*Y6xlq7kNNG_x z;q`B0BjV<=3LSSVT)g+eDn$;D9+3O zzZbxs%{)D60rWmvau^3>`e8>whL5Jd>**5hgDLls5*?3c$@L;7LM`TzrXIFeAqASI zfYrq|Pa0_tr@pL+=HQA%LIazz`00u1mV)67mca3&AeTx@Kx-&q-XO3r{_S!H~<}tTH zStX;kcAM{)7Zhp6*?ogcUOR*P`RW2)gh-=jHfIx`ls^c0UeFA=ieF5gQ+V;BD!z2O zK&#~yc{HlS@U7KO0o!A<<7L;QxY4sdo0>+3Y7m3^G++ED@zjFRqbEOpV$ynuN2vaD zsFokEyN1;tzI3o6xs|!O5}l-*V9;PFo!1I2FGxex$tzfbRHh@&EBc`iM{%ZB?OJP3 z#oHOZQa+bfGBO|P<)ce1{Ypwn9PqyiE>zw6De(2HQH>rrE8#fBCK&{?kucxG;M^YY zc3#TkHx zudVAeCh%#i_>=yPLhe7wuX*wo!J!o9Kmflrbla;S0)JSmX&Lf7qTJNl73T-hly{F3 z`jHnHZ(HHT7hy%z0aip%aMAvXvcN7{0&W(+!aBg`T^-k2j>jW@dvOVStKfUaWdB$^ z7laOFw2;ua(7L>`@z)<~!{B;8f4;n$OUC5z5#!(*d%K;N(w~%G!WFo#|CoUa3tP7A zK+)djyK$pnOm?QB>+F`TI-7ln?W_IQ8y2^vOBLg53w=@6W|UyFE-@r|Af>k;BW;GsI>rBQiE>cit~S+bg4a0BVO0H^ZTS|}hf4fE24G3N_~ga-;d z@oB{{2(A|jrsX$(04!*zxJTgJ%&-w>;ILbPhurt%MSFezz5DLlu|6CUQ0NKIZ&Wg) zwL0AqDkSDpJONI1FxOC+90tzMbSY1PD?dDsdz&{DsfW$qt=NOFmB(zTlhSzG^cAm&F?mV7OPh{ihbf<9*UZT`>;nE ziM^5w0YxajNW;8D0Y2${ExbKZq4{ojWO2b$N?c)Sb;fB3FSCV8iV2{{1IBDs{^J{Z zkD3h&QWxsfZ(&}CWh>#<+j5)96GpkO4V9D`!_jFQqlGEslxqJeJs2Lx{pN1mxDDUs;Q{=m9;bfg71rgw!(V5vkLo|IFI<0|9~4Ms z{_$vpM5K2pZA`zIeqo+CV&gBwYe%eHVOsxBJg>y#I-b|!c|A1O#NV|O=eq_AQo7jn zI3S?qpc4b%IrqvdiDzV&M1IDFbPwmO8$~8TIxdc@K?_%57dAlMdJOQ~9Kw~0f~SSa zg?Y;Lb7MlwRK|4S0XjE~$pH@tX<;TyXWJ&Y3W5a~-O;#UH)l@$-Me;xu%M)yOaxvp zQQ(DAm3}<5qcFhLMy3my@o*uN9R0-2qtkx6uxZ=A8_G?&{cJPoO$(085F^Kpw-rDX zKYse@XG8a&Vx8!>KkV|9c?whT0zpVN#NAtq*rTT*{vmp+C-1*<1){Ry!}aR^uX2ft%dCv|y1#+;n1X1FiU8@><7%aUDw@rxML*ci=*m0B1ik0gnwh^sq6b3#p!mQr_&GZ!N zPml4GJNNbGt~>95hV}L48kFlEQfXOw70aa+YrSTn$4VA2Z2CHGeVNX>`I1attHS(S zqedmuu1#|-R<0vp6}24k`bg8$V4=+zzAnfi%Z@$r{tCo7S_lhF7kc-B&>b$E6Me$B z(e=w?{y|;T>UUlFlHbc$QpJWuekz){iWYPQTLlLYS{AjpZ*bhnGIn9d&b@&{V*Yab zf6##7VHx9|R-l_}pFie8xxp29TQ`{@{)tkAXoXnHJa}^3&jU$n@81idIOq1uF{e@K zBRQbeu;=F7!@p$7B5;rDSu1NE&sFg!QjbR|+*yU-6V4>xUraMYhmH2+0Vo?5gmsZC)NI|Z zE38JJ5tMXY(6~{ZfO6RmSO_uRxr_gKh{e1LAsO6nVkcNaJ^b*a9@&w4`qT##N+xXscTf4K(^@4x%bJ7h*N0Q_<2AI~2k2gzb-;?pRZ?^;a16N7&abzEf2 znhpD@d(G{)-z@PgFM^eQN^8w!h(S(;P360m%^O3Zsv4P3fH6DELNQhqPQ9m?5r7zD zx4WSb=E05X1PCm(Eb?e-_!Cct)^LH!Fi$^Ak0Gh&|LpV6VI}`lpw6)6;lf4B&4c5n z$dFO|k-^*zF9`JJuG-1vcQW3 z(ll7K2!|XJkC%MK}!}c@rTL zIPW&BT@tYB6bpgb3v8OJ5l3;}?8z)ufC8S<&`w>CxGnBRR4u$DQ2-Y_A!Q@#KPi1W zXhdFPXcbYuT7*M$T$l`gCDjI|^uA=m&x8 zrcK+tM}9gADrs@xg2YpO?nS}dt)ETFm?6D+XxD~7`?=|+wWL5q`_De-EU}<;-Lty& z@t%kI?&j?|)ZerPg>!i6(~nlOJVq?JtW1AzEs^+IKjjnWE!7t+i)vQ?=F(q$dO#%{Mg_~tT2#?ZO{{=WC z=H{H%%PtT2#hQHiOL_5Ylfgf#{j^f0g=-aPo2zhH%S*U0hU+54oMr6Y!-0fA7`cI4 zm(Fcq$ye4E^#m+^8FNPUAzUXO9^f~O@9VV6(;DpksxPH>T{ zKtUD{Zm0<00Vcf?M9)RYw1ge7=cM4QcC|aU| z`S~YUJ0gG7{Fz+)!|{YDWbFfCYZ(985KOxMU=)rWB$?Yvp@v>8G9&q z?i;iT<~3-R*QFo_Y1t1C!HUZjc+({~m0rUAR~c5OojbL$<&c(zVA=XTE%R_s;J6tv ztbf3*md)Vbgy*z?1u}5z3X9f?70TFb@4mZFEQ+-b%VQ4x83&jy%Uq~hgYJ#@nOZfg zm^Q8H0@?$*C#MT=fg?Pwq%$47lHklr19c*?PrImgC3zR;KP>uLD>PrSAI1VMk*yyZYqv&4PSosmC&ED+;(Gba>EOZhFilW%dn>M z`z6W?MeDX*Adr04wqKA1PT_e~;^QG69m`_;bjDFvpjA5+$;1l=A8OlhTefUcSL)sx z<0ol9J*>F#3*U!=3tg>?Cle_Pg;~CG@9{E?{1@jJ?hcKGn1074|LEAmHMMz}@kM*} z>J$)+amXoz*B*Q>$|tnU_vclHm$?;|rV7c;>$D;dE2nhn25(Bc_u8_gj8yOsd-!1< zT6=!}+2FuVzgfmuVaIPF*Z)8%c~F74p$sJNFV;%}G_#fwV8GUk_`fA&&?7ER#!p%MB=fkJDp+x5FH z&ryHalLh0VHblq@ej~WX*|u$UU_3C4&%{a7{d#cmr&7hgSC3AnOqm4kbWxulf?2ke zzemmZL4U~Djr-;3>K9I++Bb5KA9lWW@8kZ9`Pbu>)Yj!O|M-in_`B@P zCI6rKBi-$H!h%!@&ntlwn%sI58nyU>A4X@QV|qV74|aIK;{xOD@sQ5Vzidg+?c}O8 z8%zbqjU)4mD_B@=5SO&pFL*FB@?3h^#b(}|DS?Ab>)uD(i=@=g(q5C;w~O!}`s2{UcVa6Q%{~mpC$^7%6mt^!gibnzgi?^4-cEJa|wn z$0*?Y!?Ak`t%FJ%I6 zY7NhY;GV9RT*#BRsQDc(oLv63?bU?ZpP}}%e-_Q39uV%*B`!6iX%+eSqrPC>FNcQ$ zzd_SiKb-QI75ilMknny#_SjQq=rI4V8THPEn;Hxz8UvD4^!iwEfnuPfI7dpj41U7Q`o2{+m28D6F7+L|U$De$8ip zhxkYFXaB7V#W@mwmpGp&#m7G?o-c*cD-o-XB)$W}oeATE)&_L>EEez)^gjjhO1ExW z8Hi6bea1X9edauA-}@iHvbDZP0^m<~%>(-N2poX% zC0z_tv4#IXhFD${0AKT!SK5yj55<#Lg0zu0_#M~(kI|o&Bl+{^g%!~) zup+wDq-sS39veAoyd8(^A%SH2uS}`pf%O5?GXB|gtR^Td~YVjH7zjkfu&K3vSK8WjB zI~RKVTdPLpfU*JIq0_ydZL`t~Wl*u}mRoN&_vgLaTy-V9V_beoz}iad(d#Fld}hj& zuVKrgvIS$tyWq`rui}w6ei$#5aYGgOZ7y5BdLllak54*$t9NW&W!yOI{KiaxM-a}d zokCXoERToSQNSWOZzxb{=KlPiSCXjpv&2c4pYN!z|e=2cQKrk}9B^8X3N zKkR!2oo93$;vK!Y(DKb4n@r9*;T7zsUWBFFM^JnVyU%sqgNo;%?P~)bF9Pcmr~VQM zg}^w=E~sGhQ2K>oM%+*rpTiY*DR|hC)@qxzy;_<6cG|D&eR{%imHs%76~Nm5;Ezyb zQ}FYL-RHje(kq5;Tor$b8TvpU%_UdQo5!dASoG&X;2E|KefW{bOegVdf^4Yo@=Gr^ zi$Y4rjhn)15-#xFaa|hp!=h1-IzfG68{(qM*WBSMR|2OBwnE#Fl|9LKU{qLYGQhBc*8WNe`KzZi>2z9!B zkJnKe`Gty>Gv9sty;qLEfaReS52qC9y47{N#zP}&9r8J|&}AZpG78^dvr-P$3HHOB z4E`G-pgG$SB1$Y0#5EC|@rN$fR=_oy>qh7AD0r&afEL07ylBko57 z2qGjw1pOl2%u4&wun_%mZU~%%T9}O2Iu3$QS~dLo%dg0j&YTSQxZIq%0;+Ck`!2*| z(e^9-cEftrr2*5?rBA!I&81oVGkNMPGkeaW1kG89wj~+*OXd*%HV^VME@3!+j#!}W ze#9%A1t9DM9iH!1`f1e{KtXbCttyv$0 z3$KL>mq|I9Ao$+BGe{fj=1a>8^accy?*l<0s;~PEfP2wRwD9ne(LUz`y$6{e0*|-~7mQhT4itV|x5iVaBVHnfSbk9{ z@ujvqnAWc|&Tsi5wSM`3)2~p$d?LJbzlVZ@|0is{!N=B%M3~1y^NNm(W;pn3P#^0T z2ZjtCV^*)-fG0t|lq4*dWkrlDmww@O72WC;hMV;tp@4LJmB~Yv>6RzZ0=Db1{pVYv*MuF za6fo)=K9;R!WONbi@`EjAK`mV08SI(nvz0rh1F2h8^UbX|{&9Ip?vvqPX_w!pN%F+? zC*dDU%T&g15?aRe_lA(=HQaD)66`bohmP6g_%FHVD2{W$#E{|`z4xqyLLa?IXupKl zJF-831-xK{`lI4nR;}Iu!m{^0gcV0*pj*=_mCF%%0mgMM3Bl%}wrlf-<$+Kad*EWc zGhB@;&WAcLgu{M#9yl5TN1ygecRUHlh+MRIg<&WSotIj*XdLjMBG!b3U`^qoXNXri4w; zxSeCiPBxFgP5n3Dd}r&QIc>ZMNj0IhQsx66C+_{TXFpYw7;Dw4IO9!}8(UGRLJV$} zbJ?XyJzHkRs_Ida56 zgx9&ps|SA>JGEgWoS|r)PFlDB?R%!<5A8GeKE!`Lu%yIF& z#z`yjjY#IZ9FOZ`U|f@zh=G)aT+;Dh79U$3KqQIO(GU+ z);%N8u=x77;%W!hMlRUJx{rS!#MdZQvZ$NnkngQ~J!MpsuwedFbLAD6+p?A}TLmko ziQaGG8lqoVFeic(xHa+?_d)vK2TQAw!yz>Cft$`Uut>DD;B#cDP`-@m)}^f`lWQrs zUSiCdaQzGCPYYO@(sfboT2<}Fn_ASgoZ!!C$+Z4E;Cg5R zToAcXx@5lTSVw z)?y0-n@U%ZMy+Jh#D$u0qxTlHcLVKZ0-qiiAWj+uL#~i|=OPO`Esjpd0-dnm_2WZ14lVJ1I@fVqav3k_eORkn2=R}{U~|9yrzsiMq*P(TryC-9Q8 zlPOo2f$0fM!#{C;km2Z~U*m?JTe|SN#IquL&Co*TqmMp?l}A5zqy>H(KiL1F9T&E3 zZhtei|C^Q(Zd@|HdSJ*Xvv#d-DX6rG$ls)KJ#z^?F7O@L>N~in9SWfy$3U;{LHBly zp?7j5f>!)Dh_p%>$o3SS=Hva_A?G6y8w=qK`rJ&{m}iyo46T$RRN(p_JPhm^u) zu#WK&P@V%CVVB*z_v|%Yy7om`K8}hFekO;14un|=hq|yXOVf~F=WoTIzZp~1jX5nb zki`Q?8sjv4>x%waB$s??GnUj@{n)!V_9U=0iMJg^yu@OAAuBKE4ZkV&St^ zuq>4L^nUw$bnjrw!9BTxSWRO8CBQT+6!?d~G4ysaot|_giI*lyk+3zwk>E9O$ z*^FhckXYAx`NQ}Jek+ZTnW1A`E8)bt9cxG*U#SDd(t30QzK@v@@<*X{n=a`NyB~h~9SC*9!Y!Wy|#j^V{-# z`fc7A6#NImrnu?-tl|7xhm@Vl_>ZbT&hJxzw2tZL5ktpz%zvN2QI>#Q|^ho@w|!umILy<6s3QfI4XPMC&IPB>u>f6?lXMf=dGb zOW`K~QHbYsQ3t>m0g;EKwR3kP-dI14);@JP>vTRbl*Zf~81)yYcl9T!X`1 zaVv!SQ=*?+fBkwj;NG~QHpR0*qZV}p|Aph-*i5)#e9JoZnhX8e{)**GBaTZ@ILrfx zUVR?07Pe9cQAY=#3Rj}ty0$Zg3+3Yj0a~b3tX$h1K0YzrIPV!a zOqV%_E}eX+R;_~R&@Mq6J}z6K7OW=GuYUit{!=h!cu2;WPGQR>9_%nC<Dol z;NnmE^b5uFwU+BX&UZnBdmIkHTv)txr5Q73lF(QCkM5tT&F(6X(E7J!o6hE$r=R!w z0yN_x%mr}6sW1rw@@e7aVML6%96rtX1p5 zy8YGH-b8Ug9{)09?ZiW3H*PnDvUK_TBCKvSL;>fD@Zmhe0?>83j4`xr@xqyyTQBx- z#ov`sN|JA;|AccqLp``q9r3UwZYam5(|;Y>x4<{Hf=w!x^7xJuXU!+ka@X{TI%kR{l$_{y0B6B@N>@rXTqh z|A+YZsN^4Z7UtmO`t_W1&Xzex=69wAhyvZNJ-9;y{Wj8#E#29=Fau#MrcwAto&j`2 z?8pigO4}sjA%%*rq53msNT0-lQP%$Ruy#5Gx_TZ#`r7(<)3I}}#2U@PKe_hP5|i#r z6~Zy6MWGXxwBh^(3+6LJLduUC>r-jAXu))Ix#K~FN@iSp|KYny<#&<7SPD{IaYdhKpfX9(rBS?=ta^3Kv5!29NSPfsXnE^u$@dTe69)nFu(n)<40Ig zc`@e8cw8zk{L6g#Z;y+({(pB~is^q`(LZ59DhnZeX!Oc&PIz(TzSD)0|7~KR-CaA@ z1%x5Anp_H3Mc#r!%VP$EIGsu3aCvWxp?kxf+@SjPH)>GJ&~hRSbbUi>Q(A9ihA`$l zXin12QIW#=0|H74S}2U!3&D~spi$7Y$zx6K+&9=Fxk;>8r4FnDKDTMKei#1@>y{X9 zs$Fp12;X!=QmxC1mFpN<(*|hk(~k%KN!-lB#qF+#9=7dw>knI}GWJ&aO5Ak*A$VVn zcwIda|J1dHBCZl+McjWX=Kco-KclQ8H5Cs{>o;f#)X^D!|4U5Jie)v4TxrEhixo{H z5B>gg@mKm2*%8C~BYsXETTVh#*MH>XKks~4T!uDln$fx#LX%iO1-R3v1~p%q_DxuO zQc(K-2m4_S`pCFmZ?GOZQTW5Of;blXb-R2b;i_=zW;hLzfW*}$HQ!&}C5 zDOR*lVAIchj2X&}Jt2Mi3=-chSI!*rn}2?W;FMN~dmedI;+__OQUEvMuE35~ymXst z-324xzya7aqYVmQfAfuL)TE91{<|N@M zb*u}n8`p4t#^QA?dE9(-DMr^~T0i6F+=CcMF7Tj$TI`J9`4L>fo_6|a(q}gy{v`!| zF7P0O?Uu2|7id%1%8`$m&V`H_GX?~2?mJp@Hf`Qsc*bp85gbwsf(4}u?mWQf4-D)b z5W4dj`ESL_wdTVEADe5hzDlfL&jlYU@PNL4qn5%8UVZ7zgQ0jr2avZF4q|?Uz@0+C z-~aes+PZw%9COiy7idvNEY~Uglmi80GJxl{Al|U+dW(r^$;*h8h#50xuqDxQfCo(~ z*rcXAE!`NS&xQG_NaBzC@Hk*O6tHXi-To7%BV7o{PYc$%z%vSHeMW(u@_kOsZe+zHkA!e`HjLaQ`vR zGUF{P$U24AUg+njSk>aG1GEp&-KT?;A@@F?5Jmjv;rFiX!S(Y<#74pEkj+H3Bf1b>2sW9%#^{DEK$^S z?${=OxZ<%2i@cBYXFKt>i6%QMlR$_e?gA$1|u9hyECHrwr z!z*J_GAzx>*|Nz#jaH%j*0{jEROM>*{CSSvOfp01ctb#mP^|qoY_@5bKX0D94Zq_q zh$kKFhg|%_9-BN*HTC_n(&22PSdtjwR7B=n{M_>|iqcTQ{P&wuNaucIJcaNfD2Eez zQY&G44x+$W`_H|G>B%-E+%p?^OE}B4Y|%)pQr-4RIHE$OyqMSiccCK`dZ@^yKmjSk zw|s+r57!sJ{sw_K(uUVOkHaFGicN|?(}b<2StdOOQ6ZY1o~VRG?>DaClWE)#8vM;h zZ-cU|>v3oJNO+OqdIPi)@bTxqcPNy$U8qp0j`@&hC zreDlI$Nu>7IN4+7cwBqbi23^1=j-^p7W_Vuv*YhNXyUJ5+%Ybr-ha+}_nq<)pU3n& zZ2I{EQisSPLi=ldTR{@KOZs%MfV?1yMn2|%If2f zKa~z={aLX=TE28{z>3aGnfhM}Sm^p^=R=QxQM@DWLWpNdiy;^6VLKl>j23SH>{$~H zV{N!lzhNu$$}6wQqp&6@UEmdV;?!vSnV9!H{GSktexkEabq63X=cxbi_pn4y|LoIP+X#1(rVtuP1~9mXqn*;Q0AG3gIZUB60lfg#uVtM zbuwAljZQ!a<0o|6AC7azG6)0V8gD&a<0+v2!EnpWcyfmW%T}y0BS((6{Kw|dCEuKx z69Vl%l(NSlmds*UJiG0$f*6j}GEOUympkKNcJJQDC5x67j&tgkr!GcmZ5g&6903=H z%jx1!CtuB&LjRR11H}edQ7gznH{#`rJ6L__!%=? z!dKV&ny=FW90Sdvt#2)WeBy{}X2;4gEoEsMS`oHI{GxXuv{W3G=3$FsaVL&Vynx^S zqD6x-{IuNUuHSz9od|d-z*j~g|1*x!#dNC~0p0=7x3GdfSz->mmJqbw-@IjKfW|#w z8Cnj4h(iI!6YS8b7X+4nDq5oXPj_qz)F!37TMBH$<9{S9FBo4>K`dJlPl&W+{MAPv z*^=at?Bh>96?fB@UUIPr#5J#bO~gwA!BIaC_s)lsi~{F8x}0-)O#6>%>^*QOTe`Sd z&1zovN&)$E&%KzWU1=%T9?GylpD%cI=QaHY(4A|Yy3Gs)g~b1wtCI>2sEBpo z!;giJUHGQ!|RH$Hvkfa2gMW= ztLtl)N97s1DLO1X(c&>wC+2eOkSjmfuPR*KkkSuQhWk{bsiJ+M4lv#5S zA_A#zg-gN7u>5pkFf5zaP!Y=cu9C+_!-D1vDEKH)L1_}KW7&UE7Of31M{=&T;P)RZ zcImJEukCm7mxNkCoZt3;Og|aMmPakmfLH9j!@t5p#~}ZRm5a~+QSFKnRx&x2qPQNr z@~X=*W>5D^2wut|emj-+I36=+f)H=l`oP+?Yqx%8*X~E`yrlJ4hE-wbPOWWW^j5=I zj0b-@cu3=V3f9$bs0&-*A>4H8+}k|7_c7`8@Oo8ZP8TfWS$v{Q#h>%qRLrk8-+ZI3 zNn%cS>=D3!Jl2PjFIzfC&MUm9L17-}g-lS^TZ8Yj>%v{rCU>QxHkB5C`Q=xsFJq>RBGh#i{|3N4 z?FJ}&y59vU4+yqv(+nPpDhG<^-ilVpry%?bm9pHjG~p|+zHaI_ghva%am0UAD1N7= z<+Ta+^UuHdiqMwIlC-*2phfi5X>&Y!`D4EpLYTBcc$q_ix3OPp(5RL9`KO;1Em^~d zL&}I387N>&g%190S|XfH?W(p)jzcP3`AH(_r!V7q-6N;+n57x0Y44ANc|Bg&us411 z=Rc046NUd%`>qRRPC&ZE9LVqZP898c#d1w!Xqj-sOGG)k!xR7%Khl5;zSEy85;&`Uk z{t-iihyAS5b^k)wzOJiQ#x-f(4s_9W>(wU;U3$81X05Q%?JS3WHL3+&@r0UeC`6kz zdm-Yrln7W{apN;{_WT4M+9|+?aYN|dEey0OW9&{%s`PsZ@y6WE8ZCJ{b?J@lzIy`} zlnnk#ha8AQ%b1fc(AtZdx@>M#{tAdK+AS1Ylu4_=-RQo3?=zF--<+__q+3rnh9c9Z z1UwK}uxPoN23oP3?8nBZKMzwzjTmHOv!+y*zM~7qi4f9IdsrIAg1rXfP#_Zy8pfna z=t`~Xp~J^u!~BBHFP(||Qw?2)9V(Cp)Q}!Geu`m?-$1_!vPLYF8KXymTJgR64hhtsC37a>7uW5$ zrVn4Ae)>7ncfc@1t1pif_{-f6AZ)>;d3gZDLpr9q^A0Flj2oe^Da z@|rYxRuW}`ZnU(AOLVsX^wYDO?OTF<-MI@aJRbHfJeY`t)vNx%Z$7#WLY2uOp$Z=R zeA+M2ui7tKMBu7F{Bn~U7c5(o2Cn)e&hK@VKQBb_m69rO)gOmIzpJl-Fc6lZF3^f- z%CtE$jnTrqMDZeqLN)ih$MnKuu=r1ouafKkC~J9^_catfo`bONt+(D4g)q7m3@c@bpsr-zWwfd$m$J} ziilzEx~WfMA;e1j@g%Mk9i=Uq3;PTX^dDo5-vMPX1%^Cm)4nUL;16Qm^@Di82+tFY zGgr5MGqLJq|KAMH5WNu}F8obj2TP(sgRp+_d8Kx(DyB6KSrs^k7eFjPwMggqrI6KC z^5Q(_g*EUS<@3)q5xmh7@$vo(>vYzaC39wR2k3gB;5UCdT%_-Q_%ZNHdQ%|(eNaj% z8Bp{fPStBRH1q(%a!P`~`Z^veIQQP4pBA>To<)LxlK+KnXs=xLhu{9>_*ZD_lS;G1 z`AL-^|HSn3X!5V|uXaf?{leFap>&#@VkzHqowaGpcClRNZ-o+Yv;Fz!UrNb0Vl6l$ z6t9u-7e7ZBi}1MMI4@bEh!$fcWCB7s9Ll;PeR_ntfX5~`)P*hZ5N?WPpFx%2%P0n5VWYFUVRsAkQ|rfutHwg}hS-{q^YKvvw=_Zk?$pTfql$EIP!A2cgh zV}AyG1b{!?)bd*s{@z<8{2O{NSPq5S$x~)aoNUd1-8EMmDpR{q4fFlG@9YbF7Zv}@ z@tvm|VOL4Z&C7f4nHY-WzP$I?S5(}i0-r2YeEh=}vYMD@1NjP+Ha}yZn+wWT>q7hQ z_V6(ED8dZsP~kOG#!QBxVhTd3JT+ij*00}U9z;Cw@8J={Ehp@8hr(at@*A#X7Z-o7 z!*6xMFImf0QZD{3Me>hJKbP)aVj(d8#Po~#N4P-Pg#%RQpJR@Hl%-ggUxQ{~9k?ar0YP&4@4fdfGa7NQTzCZ5ag3wlE@U+S8E2d>uGPwy zE19AIg&W#=^B2Q4=T0z;#D=9S4r*!17Y1sR4jVBJ+Rtwwu1?Suu*S`@v_NKU zYp$G0V|vjo53Mc^eDqPE|E|0C8fJJ4l+>kTI z+E;KxlwAG9KWmn(rXGaaHEUFgw0_p|Dd=Cgc)7$rBaX;whnd{tCux--LwdM0tuBWz zQJZldUeAFg9OKOWhC@@OAB$63UkJCV-8#1o#4qD}#=~p_;XLy&-W~7c1 z&-<5Neid$C7s7q?lOALF`L+L|tY*Vy@Hct=i!Z*A!|KNnuV~x$U1Gtmw6HYy`B$xq zGUISuLEMQiTlGKot^-hyqUuf{p|=ovFG>gLV512L(xpj9dR0JbXrYHLAShi>5L9}J zG(kk9{D>$hhyv23_mV>Xd+zL+o!z%zcu8LQ9`6j{&F<{n+4=6?d+ynp-PsQM!!^aS zk@lYui*a^j+uw>`A z*50@gf3X}n22sZKhV|dh}w8z4i8h?{wDtKg%pLg@HJa}+8#s&>>z4C-NEB^ezLyl?h*+VRNLnBX^q`-Gk(YvqO(xUkrt*E!| z`dfrI-+Z&N|2WR`LmvGEX66ZY@jZL^0&fSWy0*dXCcV_#^^@o4l6>3gZ=&BKvTqb8 zTgb0<4cCZEu%CquL-CelK2ZtV=}dCIaq(s4ISX7GWby8{5x=c`leshP9b*rd;CohYXo9KNMbnJ7w zgJDU&v?Cw3fDC^h`d|N^Ie5w%##280@WZ74U3b~uCY^WS={`5d665$@^&|FeZP&T| zIoRU&X0}uz6Mpj!_Gts*N3@@GO>BeP$>$3D&+WH~SLFVOZOOZbCO7>e>Msodn`6;# z(hn}m7O}TP@hOJ-Djo3C8|{t1pPX|+SjryGsIS11?(Ix*TWz^%*xx1?nSfjC*#v5` zvF!Z6zUt?dHyH5=iR0|;LiR7o#gGtp0x*C|6mW? zV&ab}|6~VrG5iGkw)VGH^ zVfXOVQ~&Ou{{Gnn^{Ib7?Z%Z~zb!Z4*dFLB-x9{8?&`ME4(zdR zf7JhGcCU)1cJsGsab7$$iIoPhY;Ap&2(-7gt;B$pb9jDy0_YHnC*S@ z8#15hWB${bxK3Q9-zO|6%->xh*MV?FxT?6)r*T2J-nVhR-L79;VizufXyK8h$i1v2 zQj8rQRLDY6hp7kUXRwLVdFGnaCnE9PQ9Q}|vJFyVV)W%#UI{P0@Ul%dd=}YY0eJ1y z|8y5g-60=O{e8*41-Zz=U-s{zzG0I9xLL!~si_@rvvb!EOPb<4fcedjFFB0w=d{ot zCRwhtB`vYkoi8!_{m(Pc zh39SQ!)VK~sd4!qo{q*t1egrQ#OIrDza8GNC)_<1rhp0KgKUDmY5BtO`Th0&C%dB^ zSt+|N4&)ti1Rl9zZbQWxts>=x>^7rU^6J^@V-l$!olwfbY$Eq8#%Ed7g&- z!sLwGoISmcH@eZ6XP$k|CPkksmddrpI%&V1>3{wFvE#*GJJnK4EN*WS%-b+x0A7)@3q(8 z($X*S=EW()k1>pxrm2Za8I}+~`P3hWKiaq1(LMGHo4>xwmi4y&G2!hX3{-l`^uP2n zw)~-e&pl5&7oS#$b?vYDW&Mp!*2kNq_>L;hzxQ6d+IN8Mo2e}lCM>XI_FjALTzNR@ zBzutKy6eg%ZEvy%9VqCb2mk;;07*naRA!xZ=G4k%_8`u=KfNgWv6U{d)O!AUld%uh1lhvSsL zu{FnAu_y1(aIMA2%SO2~IVYT0dhc1_0 zZs{<;VICfwz0EC0F&=iR|!PSf&6$qX9boQ`;w2krg{=_rk*ZpYLM{m<<+>9^=ktNxQ)rMw^X zA8$NzQhOhJ^X|ci{*pMRuAl7JHPBD}cQyM)>Z$gvR3^Luj)|L(>@P@&*bs;#@)7jW4_!U z-X8ta{ST!$&+~7ywJm>W-%n%mrD1*PypiPqp&i7k1BcmL@b%?_N7y%1j~;fC_kU`8 zzz5&AZd%R{ZycR`%8%{Aq38W!u6(rxe1mkG?RWF@%{=pvaO+LKW_LV4=#aS7HhIF9 zTYNYC=m2{=vq=6~gY`FW0jkB26$9l_DjgA}Sy%DyRXZiAonCp(QF! zK$;){5n`dJD4_{~0FfFX6r~t2p(GF@E%Xx7?&149_x=IzPw$$wTrSNyXYZ+>nO#Qb zZ<>qD#>zyo!?e!hXCbQG8o}sd?rsMbx z{uREsWPc84JLnvzCJ!ED$NCkfRv;10IwfF{`s^r?dMiM3cB^xx)f6vJ? zMfyROT3W}Hwzy~T*~fx&U3O&3gu0gadf`VxxuqTonI_$Oi~roO?pL`;(S*)gh5V+T zIC{@@yfF^64^-z*{PMQhkgrYy}59`>D{C;3jV5O`Z~_~>nqLt|rOPkGE*#2lo-GNEC@7OqW5Q9V}1 zp(a+*EI5LXmsEtKW*%{28w)xJrzTs7O9(d@;e;fewHrq2x4Q`_-*_i)Z0L!KL4?iJ zN|P+M7Mz_Mu^E)J>n>;NIWC)C$-iac1)S<%JC?LG^KX}6X`6-ED@`hMEj@GqQ0)X-uY|){WYpczjzii(%N|qJIT)EW!`^%Hau_aXY3=a<<_yanUI>!c#M(-Cr%gaiX#hq(=YaoqMGY9|1wh(J$Q6FT63+8Sh_E_nD zzPPySwpL01F=>)i+~u#AqFyG<(oWAGf;@MdAJUP2p?)T_?zGt#s2};ZI+V_KhW*_{gk}2BA6& zntN~y4YF0E4`jo=KW+M{?ys2L_<<=obk$@H8$h1Ni+iDi8X{8)HhD*8j(7&UTM+b} z_<4AqY%Vh7XI~V9GuaeCaN1a{<*rq6XF2tWkoougc^}QL$c@nxjnamr;S1bS8QsNT zw$hRG08z^Kw~x?>Gj|<{xaRJw{8c^vm2j~re zN@B+wOr49cCI62`bAfC{^u}nj)p*B)itj?Y7hb(~i_Q6>lz$9#x}Uja;<>5k`eU%6 zk@(M8ZFj6vAarxqJw;aPp(2K#dL*h@9fX`A@+~fr@KTkHJQAL#?)p}0T6d~OiNs%ve;!s&?4|o-32Tds-6{(S`&3v<1n+? zS6G$<&jKv4XS*yar7=l}-^_{AO*&NBQ_7qYS~ce!0uVfSuWT_^1L%5PrUiE*8eSUt zm#}w|=yTsK!~I%_?i-n4Q=((_WKgh-0M_>-zFBM-(gn0RqJ9#Gi1EYcPxB3iyQ?Wm z7n9|(nQxzR|88tO*Cg`4rXOtr^*>vz?%xdlcZ3~N1He$-#ZS@Ct0`eto0I)^Hc7i@ zj$$uka{m+uT*e;bOCY4%51*tKElL?mXNGYaK9-ubs{Tg>FVD5Q0DmhOO|aIr7#@oz zqiMCXSL-hRFRAsPm2JC)R!&klvdeZCC3Z(k&b=v-#n*(^G~SMZa`e&rMC6$RMl``7 zYFu-yxZHk7m@MS5eHsz$i3+%~BxiJfVXL4=hnwh-;9&PJGKLoR%AIza7EJr`AFa7W zv*lWYTY(FD4(cpP_bgg2dXFs3BJjD)4IyoO-;8^|)ZXk*EYVw&=?#?o$8P`LGa+6Y zl}FpNX4?@yaOJ1(m8JQ7*=g~RqwILl(Gawz;QL6E;mZ=6->$8@*Io)s=e5&xTBIzS zwW<%F4K-eVcky^A1(9)PqI>VE3YUJ+ek7B7A+jAg3290hZR}NxI0)W{dcTue9&iUs zF~Mr{rFb?XyyGQ=LwS4|O#I)hLpVv`7akB=3@xU<#Rk z{l$QPr`5u3sr7mpt?^-h1A+eSQ6b;4-vFW*1lDW{YNB_!CBNMFGQOIPZCuT{qT`wS z$MgD);jGpN$*rQO1lBYcm{~QvCba*}RkgI=c ziR+khlJ1RA$xk=hgkE*Vi=DZt(1bF5cX=yHF~i`-O#UZ756E?gWl*#S)oNO68U0YA z#`Y-$u_Gnxnd`DOs~|vg!-9IlfBZG=oYkC8aNp7)UFhcb&DPECEHEzBWv^_sa7&DS z>`OrK&!!nrhq{mEnZtfd{W^|IR)AlSE%C0qIB_~uL<%##-+976Re$q?#qOLd$vPQt z>8<6CC)-rDD%}MHe`-&3J6I;qUvdU=&~~Ja!23XnrZizlG+;rRbkxOmc|y1sy)H-yXwg$Uls-@2 zOUF+7ryhlVw7=xeZ9Bt4Na+Rb)uSLnYXrc=8Q(31hMVM219OsnsZX zSoc%n+{B)#_i{SF;LqEv+v0#>Y5{BzlsKi9L^>-jhmpWA-JI)RoG6pGO*E|aOn#!F z5Vb?(5+#}Xu3$)ue&uins`h1}7B@}M@>0s(G=Lw`pqBkpO=EdUAfp`G+kk9D92Bb! zRZ}`y6q!o295{fHKpaO@x^ps|I>F@M;KO!VS|zL6V@0Fc*8D!?BjKS0j?2;~vx&G8 z>u_h;tph>SuK_Zld$1q> zNi82`^hX=_QqLZ-Go^h~pgm(MFk$$+jZT7Ag4UEqZaj!5+J}vJ8*VTCL?EH$0nhV< z3_0ctefL4{E$h*Y-7*%p)V#50S zIGF&STD@DmP46d?G{I{(ps%^M3OYBS7%`D}K$Evgqr?UZP2+_*AQNU2X638~jgB+! zwRpFB^pY(JY7ML?YT<7zf1vl4aNdU-&2c{i;OO}<$vHZ1NV zpovV_$zBFgh2~$ZAMnjrKChvzd+=U4NJX$j=%ITPH?B_)N$t;7w|i;D&_nS=%|()UC^q__#+?G zx~J80o5pvfSzyI%AJ(}ZCESaMcM8j7Trar#E+H~pRlnhS)Q5*`S@dXpo8zB~;v=CN zgxt!3L?`8GyY(o;?{r9$IMpk>O+0nq#`V_I*Y>;JlIW5qNt0T=k0Xvat2-C7k2ZAd zd`!+~O-c{xz^@$;qV8rqdg@h1m{ z{c~3OWPDznaykb8;e@|3Zo%hX7A0#WH?P(o9eXwT{_A7`WH^OGIF;(2u-Lr1b5R;` z#=Odxa}8<_71}9@iGOET2d2H*R(iPa82!h#)@)-`Af^W&B1&VpZi{!fBl`c+nqR`~ zw%xfK<9aEdyey6`ciiw%ajn}M^|H0ZGjP|ln#l=eEg(X^iN3k60w9&W5V9Vk9f(r% z4^fJ@mk#Izg=qpYsP*~Pr7KIFx0i6YY65;h=~f%FwJr>JGVLosj}^$$n1?RTAFw6t z;1NuY>_ertX|2VdHHqC<^<;tgU4XRFz$m7UDkmL0c%8KR_LYc+M@7XRg-^E&k{6mT zr#adJVd~NQ2=C-riSB6szQ(rHcd71CgC3A_5Wozfv%l?^iek;0RH@~(*Koyvvvn;` z$Bjg8ZKHto`_Mc`zC9GP2_E=@EyN0%T!TiPykMqLq6zpztrCHQF^Po&)Q{xnv=;!K z10@JMC5;g=*jn2f0N!~!*X~0_5s>WEEhKI1U0FAcWo&70aNG}@Fb3X=u)-LhZZzZ+;5VNU{5)X$xhv$ytzD}UF6%(K^MOpp2 zvh#Yume68!5q{gYXjbJ~tT*0gv2Kq)k2tIwLI)Of;2JiKyGlxsW57-$K#Z0OQh?W% z!03s-Bpu0uJpy7-i1o9j^-muqo~6Dr+FW{dwuMIP*fp0gANJ=*=j*r!`P<4Ow5iOw zWT-50FdEJCIG6$WK>;Jrc<~>bS4~#6Lcaby(0Xerp-Dr=VVhdDT8fYB;m&hzLt)4J zEp%uy!}T?Q1pzj+Q<`>*c5A-3SQ>yiwgR-%a#lXYfftr$bfhs#2ga1UpA`xipFLLI z^a3JxRCO2q?Ps${`r5av`=GB;JP*h+=z^H_wrxwe|J6ibeXCsYHxy26Wv)+O(y)5% z(t+{7{}vw?p%s)QM$0y(d^O*j)zqu=l(Ps@hf0HAfHc7x-~`#56Yt>`w?MQ#vFQ(_ zeR~q6NfVw=f^GroZx1b|VQF`7ffBr>4wCu|FD-?Y7!U6t_P-^*Jojk)$B=IG%9)z; zTUGyKLRJ8p@u_Wmyt4WHTHH_(_O_%}Yw)2Mc-ruD+FO9`f?j!Z74h4Cr)3uKxU;RZ zNu6u~_gc&}d*k%~*wz31IdX{9FQ0$V-|hH=(a0i$!!vd=uJ6e93PzI;t{+01x+!)z zyvSPhx_yrPQ}Cy#=9}TFIm|#DfV0xmekS<0BWr~q`6TA=;s7UXj}ZpY(L!vdprJHr zCH$FRt#i9;$egNQ2 z`~4k6#bWGbx_N}S`cDf5E1KTq>lBOQ(=7%G>hhm;09U(h%?HGz(FYAo|5RS*Xw>$F zaBo00eJlfS)is@s;_aBybbcIAfSt)Y!2w4Kn15uK!$E4eR43gB?K;uIO|3JV8G#zx zR&P!y-Uhxhq{Oncro+pjLeyH?T|e>r2sxd@n5EYM_7o6}|FqzhzmKiZ^`PfrLS#Ot zt$9NgeMx=QqFxWh`*_0xQYywuSyYj;2$Q?IIs9oeo2~rwE_Qd)UR1R8@4eC1OtFx- z>!VLUL`Njoz@2U;ELN1tdc<^Z7S34(n!SylJBOe)C_{A}4uID+z;A0~AWdlVL`V#) zR&*BOG$B(v_RQ)6>=*Z9ofRzdrNc{yLq@;~d(^m*=t?gzM#D?QV3xNi_PLBF%iwC} z&exMff6^`R*^-Kgd;cN9aS1Ufpt?eM?(o4)Onq}|GWe4x0zVaksBr)e{(W)t!?ypEzbK4~0haF#n&@)=Gl_NO zTY_JvtHMs+;WQO4|1HK{F8L_k!M1t7O8Q;m0XdzUwQzcP-~OD=0?0Jx#gB6IMac9w z{-$lF=1qhu{~bPuQSoSqxCn} z&Y8MiHQR@JidThxXC(yO3T%D%@x>d#EL+4;j?W)!2ZBpmafu&_lx5ueY4-0)(wi_Z zFjt-_-TAOdei$E6L(@vIb~=ojFuX*C+Z6h2)V#IZa?LnGPk!s7ppag->a~8I@H8t{ z%4V`0Ejd7k{8qXzdkJ8gmH)U9w=~bH7=VR9-cV0PE#p7$WT82BJVV}w%o@BWl9~{( zNA5t$eutRiiIn0dARF?hsZYSoPyj#*?+1G#%OS&KvT+VN|K*&~GT?7%mUeqhFAeoZ z9U!Kv{5Ye=`V5-J{77m?+?~D1Q{g`sj0Sy=%r9PwD#H|$>A@a2iocA>ofJ~u+MS-r z4iwKKSJ~=ufjsr`fVgj>@fA=0b;C_9_M`O^EW1jHEzzKiPUJ_w#p+y+6{)}sBOKQ1 ztpWuw8NA7qBvD1~z$`aRZ&}EDb`7j0R$a-(KAB6ItFBCg8Um@ykyZJrn&i@4viOWH zovtyVH+}l?%Po(**}ddGG^f17U=nbJZkAfFHg`?L>6BUH@8|t2=QV%d^}t?eeC_P* z^>Vp}8)>gG$1nb;deNY!-l{~00)S_0iCOk>=!v9*r2kd^21DJN~`C4%qj7BKf z=fct_F0H5}5h$t+BM_R-J3S;Zn=cjRHeUKCockDt~~ zzLV5~x#syzF~c;&{qp}ZrtrCfR18`$$yXZkabcB%QKZ?KGcI=+!A_hWXIv&4H_0>Te=$Dy{YhQ1kIk0Ui*g*)zM1 zSt*>NU(XglxsT^)a59{o1j>uSRlxQhqy3uBhq*+cbYP`=?3)B8ko*&!FEw{orzz!z zc=nn1Ir+tb!{VzCH3wUhSC8XfySzc{;A>Dm_9HBJPG(}YSR&qSG1fP;R@K>Q{8tbJ zcF?0CHnMe1@@0&c-;wA$tp!~U(y0Bb?N5(#4j>F#QdWUf|DapX{q*(p%bxO2Pn|#V z#~mEnZ(oSA@unB9$_A%RUtYHt`6b))cJ=yQ+Zt7N8uzTgGCDpPQeZ!v$vOV@e8}nF zA(os6VCS2y#R+49Ry=inlwdTF1N866+mUyTb1WYYhQ`mNx~PV~y@va!5Y)PM+}VMX zYyuPlKtO#>f|n&IO%lE@4c;#slb9f!kmxHbE2Iq^+;`W)ynlgToWHoE+Ub-!-?GND zO8cXt2Dosc;@r;F*O;qMuABWz{BN#%fvkJ)kv&S1%Hev5&9kWg)Zg|V%k!8G&!O&S z9pz}uo_#I*qLa0qf1Yb8wmH&-*^kgHA#TT}Jyf^w5&t93jHP>lBN5UO7wZb$Wc}1c zH~xcB|2KAzoJp?ZBowP0W7~StZ9Qvj8b)qb zf6+#DROkHv<>9JY&B4yYxU5e~)!7bi*^?jMXM9$f0+4H5)lVpI;=N?#MZl39K!n`k zToUcTOgbzVPl~;&?+ScI?vg<{X_$O@Z`1@ui`~NF1Vr%L0`9BggUrN(8u^vf75B8gXG2fpylsBpP ztN>5@e)nY3MW2_*T8KJ$7Hkq$_IDNzMqvmeKxWktca2KRjXE=v0hhUKNox`z6@feEGbgs zXte^L0veZ|ZEE2EJ;1-OZ~goYdm&N-tOd3^3tjh5eR3Hpgt@Bi^~`~+DKI`!H7Ux; z$4|aoYWM&zHtJ8Dv*MlaIsl|ikA&+FLlgk$d_x=M(y2pk)an1Kb{Kg8^D`0yzh&n9 z5-7n+RvZHG=7iZJCmq|(BT$(VgW;HfTiD|q4K;&PquES}Sx&L~1TZ9kUjIjuMp_FS zZ#QRKS_**jd!<`Plu}PybT@6^;+Ec=N~lnz^>VOc&G7@gsN1rW?W)C}cvUEgy#zrWNx%gqy+O5KJZ@&US%j(~?^c`_zLMw)(i4KqY++ z05boSplYK7K~y^i?XHtQWkF{v9pLt(mG-n2Z(7U!bR~)lfaU=@(>)vUBBN*btIHT| z6G{fsF)lPTf43@7fh$M=}3hm^0CN z*?QyhFdA5lBpoq7a#io5p4VJw${K^M|IZ?DWXCD%j@!}2O}D6zg(996|FX*RVx}jr zc|m1#P68?Wx*Vbjw2hc!hy{W-zDa`DL>bL3BI;C-#+k!UjzI%5UD0G#;DH!S zWN>T1rYq#!n}DXvMRAZ3{(JxG*C3;ZeE}4`xHwFtZ^7cPsFdgrR!XuLlN1Jr%zJBS z3B(u`F^Dd(kflcgvMcbpGD7o*IFOY2 z)}lLxu&#NYRgeiaRX90Us=GE|9|uCO_3P4Luw!u#oT_?xiXrVh*Ia+3mMO0#om%>V z5Dgm(7w-=K2cgS4Jv~BNSnaoy?csH>sD(KQ##(6IsJWVfxas||QmWu=G;q_~83p~P zj&Sxo>~%>U=+8MY{ufGCga8V^koBnW2(=FFq)<{b)z%rfo}xcA1{)h`D$MaY#N#e_ zaTNR;mJT8=5XbO8IV&+z$q@anGqYXPkBMM$2j?~NfO?e+3TTp;+njmNM>3DSuu@X& z;LJr6-EdA3>$(>EmLP~+_HuayXuNSv2j3LMiF$)V=TR8oVL-VzY z5k7Atrj2(`r38P+D_iy5Q`&Xc#ywNwc;0+4m9hfSn5yA}EhX zLe_yyolzjuW)Ysr!Fx}s0mSdsalqXPM0WJnobWOf=ndSUh`=r=QR_EG#jTVg&%tRR zyTXYKi=EX)*&&bdO4i^qM=UoPr&#gpSPEmlVvg*Mkq|Sw4_aABY5Gmbo8%>r-Cckn z`8VxtWn$3*PaVUiRht$TcVB>G0PPX= zc^nT@z_;-G);$3v-nd$JWeI$Oe34HzQVJ206G{(7`gp>?kd?#kcvY~FmVez zZ`$EwxEqM<{m%ypa%zYPc^6Us1~MhKSqx$ju{B+k#AW#3MbvmU{kBq45EPY@zG^)G zEns70<8)Q8`3D`VJKRAB_C@$A1_|@o+?=oj+JJFjk)B^vO_gj;4`xtTPxgpbj|8Il zV(X1;G#C7DS75;WkK5u%BnM5s*8E$1lppYpdpBaqa;{ojwEwD!tqCTd{HxL?dOpM{N;!vfgHMr`H+oO%lx}_2CC^pFT7$WsSX#muJaS!i0kT$2 z2Ajlwum0P$w4$5Xt0SLRRf|YPdzTnDU7o5A>Nd981UARUS?kn)ybdu{KU3N)b}vS; zihR6oby*8xc0e4?<3Q)e<|?`$AA&v2@*fRty5-;^j|gd0{bKj9cmC_o;7pvMlp80Lf4A7ZRO$niaN z05S%j=njZ>JzZkf+iQvfxvfW!l`S^87$oZ*eHSui7l19}XT;gg<2L-Lxv)`DE5%5+ zO-4HZ3Zs|ppM>SwKt`S-l2yCxE^?SXx||Hqr{>Fo40paJezev*j=N4iS;yxIxek?5 zss1UDG=$K${n?py-z+J{X#ap?`;9;WOD88Ttb+b{vNun7m()Bq`ey~%`!m%&Szbvg za&=);9B_pzFuT+A3~Gy1@_r(i{RVK%%!)($rmwi#ZDob)NANSpUBu&*>Rb+;4yz=j z#3>ICOh9ny@#f<%{ zA0Ro3QG%kU{6eDxH)L{gAjIU-LGdf!E}jo&$=rq-C_FOFrf`8R0Cth*BG+TM@mrrjZ!5Ju4I1K7##wiZfg zp|SpY&&bNe!%8q;WkS^$hGfjcu79B~xcnpPDLupS2e54alA0qwI@V{G#~sE-JOmib zxW8uYv;K8d{m)|qc$RDyiDuC;f(#x!4S3^C+weJFOaSbEV6y zn&msmL^<)a7z^LGdY5yPaQ^oKU=&O}r>}To&S8>ibr^;w*RU;7(9s*1I&d&EIb0$S zU*gc-WlFT^vFaGO zvcvepJ#xjE*I0HLAx~0?MRe(Bt*mRh(3u?dyqvlnb zV=W_A$>o8Wf#YscuwJqkpM?_=Rq)7yKa9bpaGvJ7h_4rb@sx6FFACQO2dRayq+_uiWI|?=y+B;ho*?A3-7UQeU82YdWhSz|? zn!5oxrb6!H>xG%Tg&oe^se1-JZeK=`dEU?WFof0RZb#wxU4UL7g6c_(z{%jyC$Mob znq1p~hf)Y7sdhRemsDCi&Kw`W*U?CCCbs>;STJfHka!-}g!Vi)pT2+&FEP$_e~$YE z94O#g&Pb6lL?klqd-M7p80gIE&>|;Mr&eU9LWi}0_6?EuDq}~rk6_BebJ5{uRd(4> zgcgoJ6hl#TV~tVJOF38UOjmHoqPm29>CLOrOZv#8dR7XF_+;{}ttYFr9$8wQa zht2UQaRn(*HTz#7uL9F=Bk;}q%p@h!=J{X^bQGh;yjoxCG_|St9UDH1a6+uz^3^6p zm@$~&R}+>y)X-fE=*AKLYLO6k^x?q2>qe1%flf*ab>_?-#K~T|dPUi5_ehG_6WA+U zN@bave|3z@2goEa2#z}lRs_yLK(HnOut7Hp@WwTseM8U40(LfUH3x{P4e>bS=5MPL zfjghrQgRvoTikS!td_Qp^_4)_lZ}lr_KuN9(+-K?8_Bo{1UojzZ*A)#`b;sgC~%|5 zhr%s&-ATy}Ug4F^5zUzhxEze{+c+{WeFBNpV&+w&iMT`dK@llt zA^Y$7DG^2_NW6`iSs8qR2ojl#b6HPx`7s9sCE`^w;6X;)MgsBcH0y1pncn)~6C$sk zFu@#W;>Bd0IKr6ThDk1Cp|{4QZC#Jqv%(Jj76V0O-gyx6>fZh5tO$xC#SGHJD-&Vg z8{)Ju55th_*?gK+C5L-bw5&`)o=k|8ZyV_~ovr&1F7lae^3nAh<$;>5rXC(ItMbW)C1+vsTpfjV5Li_!FWL9#b zrsX4bo$O1A+?<{^1ayeykKumb4r(l&VS2-l8DwCiA}Oi?5NvYp16bG>VDPNV+P3KpBJ&iyua8 zzL!l28hnxPf3?gD-@~rxJnkY~gbp)>MJ}=!sO(Q<6k1TI<7?xW+eokBOuh-cc|>RMbU2@?v4@zRnu~G+uRg|Ho?7is7RPE{Xfpoegj`wtljF}e=M8u^)Q!KO zIyg9IB)j-a?IfU|zC{BUBXmYpVmzhf8vG5D<$ddd;jBTUmpx}TyED*UB{jQz(jK+E zG4 z!SAJ;-93MtH~g<4_KuLTB;8BF^!%Z~S^r2$VfqGl`gtjT=lQa1k7eI>P$_@Zb#}pb zDtM8>Hd#2n)jnobss70DqjQzB=3kV0pDXNJ#?95$3u)+-LLe0WHRR_gUwc79 znP^{Jkc}~28oZpJmOWoJHj?t=wZ(hxb5V}2;?wr)RAx9YYb$1%V;Z8&;U&v+AIKB( zBAIyC#1nY*%p{i(nBQ$UW~2}?E>274wocL){BT+w<2!mSSY#`x{DXIarNlZPsWbAv z-)l=3t9-GdPEm2SfnQsddS>OX(?zA-CvnhTIm?=2F6 zsNF8bd*yOZqIaAR|JEEu!P8`Aqhk(ky_R)9>hZ(>`$CkX#(l-fOAm$8MIq)Z$HoX~ zbT0BT_TOuGdU9mvBw5zw>D8a-PhL`)KXRl+;HuH&8n&LcOpIOWF;m3lfmtjWAjfQr zJK}g7(%ai(a#9;l=|jM~vh+%{Yy=mpCw8nQ_)=`3Pk!5#PVW;B9(TR!tfi@XycjxF(cd&dBD47=Hcw z+XV)<$aGF1r0MBIw@OnWq1CZ-+X%!>qRsSu>!uC1w=XX_b>5F7SM=)L!!Ffo-5C+0 z>E7>Ncho@{NBm1^YLowt@~9e`VK-iWa{UG>dsxusXIaGM%f&&xAf~X8QiKO_R)`fP z&T$=TT73S9t+-LSZ%y4~RX8|JS0a?)ODcdbdW9dN2|-Mcajy=1*$_5#Ci~)4#X|oE zSA(|3gX)!ncXBw~T*Ivkhj%aTX!i?eGRnV2*K*--pKyphw&MZ0AnaQdpz%2f zm;iFKRd}wq)IFBmeRb()%simpMqk{Je-8J0J{M^q8h!^TocV>BG zaGGn0Yn$Q9z*$(lPsd20Li}1;{hzzVhhdQYIeCi#owwRXW+R`A&~vbCuM>W+em&G; zCcE1*ELfhXJTFS5gwK|M>CeYDM#^+Rbeno`{r){|BRby#Ve9B+*>}jyzztQW-IT~+ zoKWMWt|Ym;I#31vp+omM&i(A0`O_V*5^)UQpzuI;HwwVdGcGP(;;DJ_jL#creXn;R z=h{XHu?vS_z$rRIlhwp!_|K`YS`#hGe|NwL%~iHshVfghiPFn_k)Q#qre>W|%fdk5 z!^K)y6E)4$Wgbwfrf^;C_+(GGVi2n*V0%pC%zKgk_Wn{x^Ay~~hcuiY{z%|PToP`f zrZ)vhY3p170BiS_|G*~-r=n!@Ks-d5PN^S7Dp(Bz9l(BRGOw~q#+gE(uu8LM8-z?! zZ${s9oPPs7`QMX1*{a{_&MCbU%sI&Hd0v$S>FHbCc_jq_@#Ff6u%<86HhHT}zfn{K zE*@uZjv>t7rYI89mU;GtCn;tqA%?()duNSF=a6566NCA4=C}LBqHXuR^y7^dgmmyCcr>q6MB2Unmp=N#)RFpi%e~S4~ zDxO;;!qH?f@A>_(4=a5atbCrO#zg#Tv??%X=u`Y?Og@KUf5H<(NJtyLj z);WsnmMJs2<43rUwmO43Mh;^<&0VRg8A-scy!(dQD3gI%IUSpMqn|T8q^Jb-dfYk^ z#M;8LH@CrG6wYuB%>}rv^w?>Iyp&fC3t*+j?H_dj!TeiCj-=?hE?O6&ht7|o zhOs6$ipTm|M)a7YR|}iXKV7@-pk>iu;uMo{?eXy0Cd7+pq9@bwwb|^wPul`6+VN%ewhL-jcW7DUo;q zG4D`rfYK}Z9Z^|N05sV>|EQ=8o|=SXY-?`kTm`A*O&}0D&nTO6+CM37SpsrtSSeu} z@E+v31GD9uhnTrixI8xKvF6E+{PaV&$DoH{V=U{3=m1#deje$7C5bTiFDU1eZXMm2%Rw_ za;*Z9A;z3EzUCg_2Ce8V{=S?P@b?ShIz|1GPW@cxKuQ?8)J5pANUhZ8VbIiP{@|P2 z4;4JV%uMHUAu>)Y-s3f+0a@{D{@sdA0s`_cDU=MOm#YT)FhIeW#=dKL+n zz5ftrZ%nN`d%MQDuwGm(W5G#KV+Kw^|c|g9!h(Vz{rb^Pq zn(*dzbqI+eT0YPlWiS(^?fuPDyh~b35y&}0bzSeFm3_k=Co!6gzeZ`hH~*dWqe9JcI zl&!YvEDl!X5P?sbZVip~Ev&`Pi}#*h%P{zdV2A>gAQx?90JV)QW#7{PM?;lP?Fg;23^?ogVs$8hkPBn$ z4Rp}q<|1L;y3MOb3X21Cg*m=s%Uc!==Iu{b_0(C%MSN0>|4yv$onXR)c55QBWuwS- zal0g%uTtR_AW`}<;7k7r-2ju8sBJ;>)V8rg^H1hLRs{Sf)VkCI=d1uT4fT%8jQT4?1xFv9Lf_WV1y8BE~0 zIjcNFGYUN4jAa94-<|jIJtKxAZsEW@oKg5<8JJhjHxv;R(!O)hBGVUE7AKFkc$45# zijD%NQfQG`XFKzTF@i+Odpv?;(+I;ld7sSNo8si}U=ZL8_xEz*Il4fMMJNp%-j=4j z%$}CrY5^M%*(hxQ>9g4P0yn|{!)ym4gy5aUOcnA}O-)L*EwgqaR!rRRqY^upp<(6I z1M+K05Cz`vdlaybw@Q9pDW4GFl=ye=a1+!vpn|q%(3BqhTkHnla3SI|=K#FjK=-e6 z2gOtBzwk{#Mt67t6K}nJO?#@J>3Pb?m&BSK%2wmK88TRpAaN2~gw&^4x zI!<1vVG@_^P>Zk@9q717E+ zb_RYMj|1ih8+z0$M$$of)0mF7#kcTkxgLFOaq`#En*JadahF$jby zobRMxTX)LwXgs7Og=GV!@|hQw_+|6!K+$Bv(b*8?Ph&>t#jnjQvl1_7DLc*nPsr_b z*Z#2;;LdWB^c+I2S4;!SBAc#}@+SCg+sJRQB-t~${5B=mw;a$>eAd%6+f>?oSY><$ zaS7lwHzV!fc9Z~tcw$UK%aR1-0&i^XQDj~F7}PKZUUS=3du;pg|~hKdp%kk=Jj2y#t~v}W5j?{!ir}{9M~Rztjve!K z8RFkwX0awDaT=PEc70zZZn`V_Q~=luOes|!G-=e|-2`kY*B*;<;0_y*yXg*he`oso z+;t=MO7ka|9jo+^gCOg<7aA2}$KXl^X*y-X2RdBVyhfl6kK&zDNp;{VmPtU~Ofj#j zrNsD*6uF0<nj0z=>G>sI`mRAF`|9cm}_tIz$fI<3B3de}E_f1ehRa%iVZKD0=ML|xP zhcUa`6xE9wYTbP%bD7TC{>H*X>$xY{VD0WH>$#7=j}Fqka(y2VjKF2Wk!4~R;CWD` z-Py#auA$kCyl``_*g!F{*N5ok#v(^#gR2s2haOyI6?)dfMM9mF#D{kj%iftJuHO!Y z7HVPQe2=Y*E<3uRfX9uWYEPp{jRw6@^V5Zi#PSx^kcH*yS7rHb_WbLh4%85rn%7`M z`rZ1ULUBgAmXyUa@!hEDCaEr)Q2zB;?vFpvk<6iyYDYIx=6U3*-fcUE>&_YXXZx(5 zy8<%Th*BM>nLI=Gh+Gf)aSNYzqCfZwe3NQbzn|UxZW-=vaH7l`P`XFfhbB&37&z|+ z$R;`N3?Rhd_)T?`5R7ns_oiuE)IpQd2s>c4Xr(lM+vfX&d+RrnR<@{Zdx`Yrl|zn& z!rO66yEq7@{iZ8p1LQd*1cOkR>VKf_gR7yhBF3}JzopdiLSNmpqBu`Wc@C+IBmmq+ zC<#y$8CHr@EaPR>kj9ZRj*~qe18GgE9hcjb^R z(87$fLYBnE4zBgOj~mgmDzt$V^}6ZjcK7ySoz8BvjdxS_Rt3H8&v1;j(xh6OZPgKG zI{TyM&x>j87O4)(R}B#c3I{$ounU9v((KYV24LCCo2G)B8ky6(U<41d+48GSN@$5; z-)cqf2SJe;_b=A#ImR9uV~^uU>YO_D2=#I`;dk9+cUiiT=Vn(=+Ax-OP!!RGpB{&2 z&qf0_C;ARY=ygxUt#Cd&0DQE9Hvi{uC?m&1ft`AthJbbcH(J|A#PTUL;j?y`@bjZ( z{;7nhdqSX90YZ~&D?{&EQgCVa%Kh*JO*I&QoS~;XL@-ns79Sweb25i46|1a`r{E_I z8B9mlSc;jy2}&K1*ID@H9!hTf8a8DGm_M4Z1IC~1KYqKyoL=^J9~RCF6&Y~FXIF>- z+i!HtU|t~9sc>;G|cZ9PXjG+P1bB0+sh)A2n#TBe!lVY!D@P4LZat_1C~4|B9grXWbNi7|XU3OjgmnBLH3Qx*7VT zxL(PqGwma+P?0CF_Of{n)Rv+coaU&*l-a6+|J>HPiT)5Erc5p;0{o(3!;9_6gLEJ$ zg@E3r;287EFqK|N%5yt%fojNbC~?>@Pm5ov*z?@(U+GnZlEHNltQX=-FqmBq-^7Lk zu?`Cy6C|g)-su@>BzKJb7OLv5%^*U2<9gi#fZ+}SkRtMLa_}7?eeLG;DzcA6$QG~a z1n`F148W&$6Gm1-hLKY}Be2sh>>{Ph=jNiGx-(=j_A}Yis%_BYXK`gr0Puuvo;^$TxFO&^gm9en^7yu77e^d zIK0_bnM7)^)A5J*O`v6QznF+xz5}&Me(c`m}4Gt#I3d zO6!6XaQq4Cf09+%0v1rL6!r`{r_wu-X5{!=`T)1{f6uw@|8)?NA)d7t;y&=+R@pf~ z-q_y11zo4Z3i02tW-K`2Qh5dZ(H7PJw!6um);&_EoI+<+ajpOd5Z(s-@7Bs?(8K%Z zXv-}$p`Jto+RJk_W@YnNoUwxBb2Fm2Ol}A7<5~yrZxcV$B{0~<@wM!p8X+a^sB1%C z7v!PiF7?`qM7h+uJ$}=esPF9nUz$?(X0+H&9gf(Kv=yk2LDwmD1v_04#a`V$3fLk% zqA7Xtr7UbQK0ikiIQSB#S3=ca_2Lwo>GyV(yUZ5g$uS5dzip2b(uvPgkY(3$Pv)H@ zEV%Xs&({Y^Lj|T?widnznhv8m7_CJDYRK~ZJ8qYk@9f2cvmXW?lLW7*f~-37@yqk> zLzn&X%h7YwhgjmTn$s7pHp%QImA@ZpZ(H?%bIBd2lz|=h8~=x@w+?Ii`~Uw1L=*(1 zO9W{d(j^KLl@bt<7$}S`X#^xUx{($H5os})bThh@c64_Lj2zq8_c>qh&-J^0*SRkK zp!U3;=bT5K$NhGcL}MZC3|?juxu;Aq+e1NsY#X?;po0{c4)%l0=HLG$Q~!iSK1%P}U`ZB04wi2gg^EE{Dil76)+jaD|FwJ!_&TwMq2|M7Fmh{jXj<+I4rQ0r%zoJhp?z|;cBlKwOl%g`?m`DFypqDa6MD`CP8{Q7j;G(<1ZzoHr|; zj<TQ_)K@JEt^l06A+YObWYC`98F=yQ+c@Zv2dJZNOFUD++kZ`$R1!vv#3I#9WAki&q9 zVbS(Z+Ha?RQu{Pey!ba!S~B(M-M3x%JoaMIBH1L2vlG^5W4 z%^M63CVGv{ItS-7?+=|Pt9I(q#^e~U9JC__fde!%HSW=~tZqw2_BN_)H~ZC@#RZX@ zQMZh6@f5>Pj0bBhgIA=QCR!Rm!jR8L>k3JDYi}Mx^exi2bQh^Wv-5@|?)yUg(Ugs! zcCNO&w)?M--qpq_G$D1B?^M)N^=pq8?_t=A5cH*UxD$MmnU((&|1 zig=uf(45o~^l=7&7MJr%k|0s;S`kh8OsG_iR@Y=Nz{Jd@bG*w?;C@LXsd?WedlLHl zLTbWy2W2Z3?qI$IY$EajDbatgrlBjrdly3Ih+n+a$<&#qaQec;;J<;}V&xF`5pI&+ z2A2CWAU!ToZYL zvqI^IQV;ySHa;qyFHFJ z>E-?2mHq54F^~`Wj|A0;@@yHx5Z;Ale(%pwRzNA@jO*M1sSHrQ7CN4nTg2zL-S1<~ zt7SjF4b`1`VgX2=-kseuuVXUgm=2D6WMTUdLoqPAeeT^;qe~GT@#p7VUp;xomHNu- z_2qncl?r#89vIJaWi}bpe*_QOH9}ep*cjTGeA>m&k2jx6Sj2 z`+lUq@MecIp}dd|p&>yxbYw*6N>lv+nnUperV9`p?hoU!vIk?I^(DJlu%pO zkk}IZ5Y5)TxUN2H7W|l~C*B62VJ+q?2KgAog*#M}D@*9?_I!Kb_DXR3-uYeRd$TOI z9)uJ@2uEuCbaw-_@ev2PaI_twxwvnRVS*gO^gkAfzYy#HDAa_BlH_Cen2Ci~SV6fl zj2(qwDL+;fTizA9VV|$vjaq;R;!fNXKuEV~h`S-G!fI%ea9M^N0MR_K1&Okpe6C#~ z(Qr3*uY0vDc}Xz#*K$1g!}q^(PYnbVEy-e(LrTLOODPs#T7b}8Z>i(o^4mw9x6BX7 zHae7?-wvv;pZRdn%^^rMSh&@x zpykGTJn?Bnk+0Kefr$w zO_sRK%8gIn=tmeGj~vEr0AV6n&Q%lU5p60@!vLV@mVKZRfeIg2a^o{RILD7uxE}AG zyQi*tZFL`70p4Qk1aMS@6;|Dv1YE{`en)}{3r6;+J9Yb+-(CFm^Ioq|d_8On_-%f( zEv<8q*KI$oo<$DM7q0D z-wHDYA1fR$CyRLr;M3}FT(q!T_60t<(6gkeOxeDI^}>&Bk0ro$SKpYfOrt^eyhXUF zQd|0V$>4}(~ZjsAfy4L!1=m)(pYcRtWxWj6#{M!pMGzc>u zcFy!&9av{cc*b`R;Xzi3J=QicVBNdVX-7L2D2{tSI`iaYc=L+^YD8klN6F3qiIkNI zB@HEUtL&)lfAGEw$q<_3l;8`giuD#KGW(}7Um{;3Cr_l;A&Co&WC3a#i#=L9_ur%* z@<6tX$s6;sQHS*>-NCs4E%XbYuRX88hWraUjs-pvZz;TKiAHLy8BwmMrZH)3>HNg~a|*m@|R6luzup3X82v?JUX z`e$&1#PN?V^g6FEQarD?K32&9fPp$`JFC7Xv?&1~Hu?^t82#Vq!-A=30)tURtjjix z%<0)FM++(6!PKK`M0QhP>c1a=O8w>EJSznh<)YBh)kfQva?p1L?@O+ppvxn_JGoQ) zsGe8`a{cZKEH`M$)u)|%t$~(lQil(VQu-(1pVTA~#&8`!o}AsreV+bS$ak58Pd^*9sS&RO+q#ySbaV%OoJ1f^&#q3fnI(c|HTm05PNJXJnXJQ?O=Je5?Zeo~YCT3hWHhRPg}}%carS(rg=$ePx@0JF zf7B^2eK`_Pm)-$1PD$I8z+^I}`-4SwMEV$Ft>m)Im+DUmv zp6p}l-=$;1VOjeZrOhJqiU|lc!nfPJ;8EP|PdjCvynEJtOaf#QnRU8JZV1b;Ae~p4 zE>sIP3wk$Q-Wy2g?q?YD7Eq*^iJ=`v!~*zG(VQPuJkP#s3WK}Z}Hw3mdxeb6l1e5 zX93_C|1c1vXLJ;aOsJMp0J_lou+wWIj6#eU{VtJ+AJi`?sW(>t@CEo|R_2uUN_0{@4h5=6Mk9e_&Z zx%uD`?#i8(LbSEd$FwUO=KG=DKL>mDSJai{Lp*vL-pFo7)(1CdzVojG9OQ>9nLCe9 z^kzDG;q1Erub}FH;#}XPUCRNr#T5GDp6iX$Yp8(F^xn3F@!iKKf&^Yw=}C%&x@=;k zTy^%Mn|6mNFh}j?-Fh1aA~Gt-fp}ZE6!y$y*BJii+`EE60B-=?&R z@3G+e1vZx=ve=)q@IvGlrVm!Ww4s*(moilVW~GR0djXK1bV{f&v@VTzuYoB|?m9g_ zo5Y?Ow}MR5?LV*ma5L(Z31W_GOI~^zJ--w_6i%EEpLk`f`{;T~D9hR1=E8r5M-WOi zbVcYTJ>u?ix{vep;Z#f$^T{{hrT#Zug1*$g`yyV}C;$}WicAU}TDp_2SoHKQ%clLU zs4!OC`7dEImNyqBkjP&H)X9OjVf%NC9z@yfJ687C9SB{qVam;6_$V|KeZF*>ry^dku<(eCSgu6ZT8*ZMR6-!raVEvfy}z4Q{^E%qM+C;_@8vqrh(_1g|3 zn!k1+UNSy&F1*i2#*8rd0>XMKV9h0H#-+oI57g z7T(+;s!d4~kxHxHT{D;0cdeaM(BH>|NU>A9(0g{33M^th@k_9TDioq&-=9c743O+N zF7mhODf+F`e}-8u{A7KUYNkqk6k(=1Glt0}*)(emIfX76WG@>KW#LC`=Jo+sMPHJi zBoWn{Q&DbJZ)%015!jQAFfPReF5>TWIQirPwE()-6-L0VSnB`ffg)!pzcCHIE1RVE z(M<23hvl<*2UMiqy-~|&HqLaUhq~saGTW&z_G9HfeeTz11;`OOhsR?Yvw!lOHQ;sH zx{$GK90I-spM_Ynv@u-|Sc#U^tx1bwYXjt?@3M(XeDDb)J?s{^; zdc<-`wq61$9=#Z&nC%1GX93Sm3{8GJ=VF&U;+`OK+_svbp_# z<&({t{}lJ8T&O@GG-jjEN|<)P^m$qKu`oZ6y1Q64V|Q=Te1p7@0IYHpDGMW{ORn@ub}!to zAI^x%!o1s&RK?7dYXUVsL0OeoJ$t%nXAGjN-$#uHN@La*$UY|N#8); zVXL#68WS44=rcZ)=eNwQ@!*!G5d?jGW`xT*@3mCnC;*d$|BR24pmPMCDPe<2F+QiQ zaKnGB0oZ&`UiDDC?kl&yy%Iu9k(`wquQU^xA$g}h*+c@VNeo$0n+*}3wd8TXV>Oy{ zPxoJl1ThhOPjn>1%=MOyU(c>MNP{j>Q-8nypi|p9&f1+`#yNdq;5<3u%G1Dt*i=tj zh7gBW=T>g{%|tNQrJK9TKp=8ln<`$>uwT(Ib+{vTZe_Zd!nGYi$v9=B;4?ATo=Q|I7$cw9b?+U&Ng6 z4te*sz%{WxncBS$rykC&Ky%MPB<8-iI=YB~Sh^6=6e8UAmEZy4_On3tA@wbWuzY^p zjwvoK*T7xd`wo&(R7E;2*m4YjXadZuB7yie z-d_JBpV>u6a;1oT7GbsX)V&V0?BN$$>7!iC+VVCQRPEsNaU-hRK5+n*#Op<$rxZlyDv5x`l;P!iu16!lwcWBd0p~MnMn-HPfkKYezJAF=4+Zb{_)cHwnIjnN0_7r5I7EeKC=0(~D&7 z58NW9SmJ~$l-7z8QV3p21RIzjfNAPQ)b}8U;yUk!Aw2iqaf0+rq|zAcgZ#b#U`60i zfowr2&@$xU@xTAs`hMW^3dD2;68=nZLX2MwYOOSh+7)b8-WsBZYtdB%$zGAWB7Y#* zWfWoN$b?paN-+EX0#;igvK}uYZLMEx*(BGd=Sp*ZdQL&=m*8aTPVptC(>s$ov#>C5 z+x$)5tK1@1@6ZR);4;{zzv;Lrwml#Kt8#BGnG3o7lt|<%KpwP`Pf@>_OxRI78GY;H za0Kb};`$OK8S~_U)jP{culX`ZsN7mTtlW%P@x z`IEc;8NZ;q>xX-jbjL(E&592n;m$*Yvqg4pB~KaHpXudhw>#{&j-Lhg09CzSW=ex7 zmKYWWxeueNVO&dIO|9GZk;f+9CABovM0yyIQ4-;m`*v*yHMa)q#Qx2Nzzl*|D#z$- zf`ME?dP$CQ=(@m@ySEp(-C@$yu+AmVAddllE+(M3s5rK}-Y=`1iBx{tU?B=T4-uAQ zOSrROeD>-Rm3t^AY)Ngb8o#^b4WI;)6Vk08A-(~@^gUbVmJ;BIj+B~F+)QbQZ9JLg zhFk^}JTK%tldxZo4mtFbM0xFIp$t&Og2HS7q_Kr^31KvVLDO*r$ zTUuP}a^*IV6_4J7<^xu-;4HXj()KibE?0IZ{mfmn^ltE?D?;1$ zb?ei0T`wa`D)1};95!1^@BQs}|a7GwNL#pg|P=F!%f(YR|AKaQY22TdC7cWAZKVe4dKIxcoCFE`)s z7oXu%CVq!_S{jfKxV{Sb>+@S2w|s0oP}`NE zN>tmT`|d3-khRR~7hW%8Y8qj4f`7_6x8`GGV3rM=xDqY2E*TI)cYoxeKW}rOoL6s7 z#<&V^yAYE8Bl%LX1Z%Fimv!SFtwT)2v~*4&@{j*ARPSp1e>C4WnT+i>W`62f-`ZX( z?S3%pT6Np(HzEzVKLc{H9hD}oea0j+WO`83FvV0#tf$FS=mL4ap2?e=dkFU*xGN6V z?R43Ss0rdF^B*!2&Xj1FbfdktmA?ul9Q*#XTNNzp{fUS8hy}PNB~0``Rhkl@gJTjL z+H?pC+D20Xmj?+auNLXDQfHP=ZkIrt2%z5=8uE)-dl77a!YAS~rkx=F*k@E=CUFZb z_#N$ST~WbV{x8S4(k^T|Zcz*|S->xr zzZyGfeHaXCW_kb7S6>g+bbUQs^y1YvLD$Ux{&%GLp=-o~9O9!)fTSP2Yv_4ayMUff z*?jGO;xH6SIGnVzYR4pKvxs7_(rJ%VyJ-ode-L54JLLiRn91++IT2EZa6v7Z9#~vq zq}d0Noxt@(kMbgW{`5gO{DrD6!Y?ko5vqUl)V)#2%D^ys*1~}T8;wtD1Of*4_0Pqg zg#^YYJz0PIyeA?3;h?qF47Rr_&$*r_?$l53ygW&l<_4VCHTXFj04@{6S!HO`7Bi`Z z#kQ#|T7ug<>6tvuMk2fKyR%{WVW86VTUs0C4|MP&qLSnrr^Ncjjhn233*0Jff#C*W zTw_t|EeUIK>h7$4mN$g2$c&b9A@0Y z$oiBLQ6fmS2&#y?{%!Ek!Dx6+74Phw33m3Rcj2ogVR7u-*{NVlS%R?Arvl6Ojf3fFA#GIT}EkR{l zPavVxx#o*@q9~W3dhtzpS*PlKH7KFCM&PjKIpVB)Y_ZC+jRk0$nv-qv%$95SOqrg} zC<=A_lqvkcDh09klFP2LMu8;*ra$3OLfif*R1LGTK~qC>jf9whhUvoUO z#~`jS2sne!55qx^|bCy(=$9BSuksGL^aLvYX^_~zpQWaGX_@~`O%E1prfWobplxXXUH5`Do z=%L_CJ7CParFtuwo#;E8SIFzl5+c^>hvYwZDfjy_&LYUT@^o4hfgGJ*ESjNU_yy0< zBMa48H!)oa?)ihq*E~~rrk`9yA(}a4&(YmV#=a|oqb&VRFV{yBqVe-~A5Pn7Gy_gT&Ms@;BbpZlhANt*Flg=lzI{^1bjHr4Q0ho_G<9g1gstN;U}I zvE6d&5_M-)_mrp;E?l3>Z+v2F$5zjX!HnnNJ0?{Z+jEF-&X%W@kwvFmX3}ZD!O_}7 z7XjIFPD?(X^6Nfg$&NLq?IvAVC}Z~5W4LOTc=KWdBK*z{|5Vn6l#2Yt zpj5`+ulPvxdbW$cykmTg(}$(OwkkrVjweGgnP<g}rCd@?JvV(c>~CkW@&HdgZ$nC*hAY2)9{#fN}(Sn=v`uF=D;#n5OaT?`?Yf ztKbyjWQJat-ym?j!`Wt$svo{HLi!+;8@Z#1OueunUMesj_D)VJgP4JC!xVKDfQl^8 z+eAglzz*4J^qgFUlnvVDwT2*=PHEoNV*q&gQ9dtV_GWOXk}Y2cMLWQtYtgrT(gYgrT4!t_AH*dVxNP8ye{y<$<0 z&H(?q;R3S-kWvIe$L7uX)dxFsY;DiIy$M!R`-)59&}wh59VYlM-$ z=(9MdcwaD0yYr*7w}a0tT)k+1H`q;EwLd!99R&S>j{=H@sv7G<${j*5sF9<(l0R9Z z#5b`itsiZFB#=xQ5-8@CYI-Wyct7hyGxWU0_QP;Z9^oUmiq2`Xm77mbvr1;aTsAnp z+gl;~zUeV8S&T`4t7Hrb_>Mcfd6(k#FCm;*uy?S*&?+6I2e!<`ruO5QkO>-ONLmFr z{FmOEzAo^gx05NtXJ< zVADmhJ-y_Y4*`2HZ20u>>?W=U)K|I!DOBu1%&;$UE%x~=#rQPgijQ)3s7H9zL&sLx zm%P{PeZ^0m84kh}n)u*B+FzZkHq@$}wpJ{V^V8Fx=Zbe~#?HarWBKh>9LQS&Rdq_w z61(Qymjd?v_<}C#DJ9 z%!y4ne1pE>`UAF}Y23#8s_hTfh7GAqS%?42zSI9}4GG=@d%E{L-HT}Wlrtj`>pa4+ zuKWmz|Jb}fP4x^cX;Nj8OVOzPs)9?T)xYx`IFZWX{?R)qxoV%aUs>qp{OOI_tD@6r zIcHzcAPfIhySOf=2DZyk5le4)w6-GX~tKEaLn{hfbq}_>O#Dt?2Rw+;tM+ zIOL@Z1rru!@G@JZ=gP^AC0gfLIB9zObtTSI-4;TYlpb^62im#)(YK(tCTOl*|QRc{#gg8iI4#(S@(eUKluYVBKz z?9~|x>z3k999iSa*Id?2(QGxM8E9$k^0E<2?|Ugah37TZXZGveHv{8tcWaeqnXs5% zv0O0s`*oDr3mmb3i^y3>&jqO)6nzQ0Hu$)e!TvTO8I;%`mDqHe*Ja5rnC~?4m=eQ2^rCji zI(&TtY=aoB9+WLIXe1Pkb$gWrA06zy9&IwCaCxI^G}R@iy>L2Q29F8eZ?Vf960Uup z=FK$nvxy~^?yPL@^+=%EJ-Hf%gU<#I*kfEc^st0{4?nrS8X;|`k+%P-d$&^SggYDg zAf>+SfRP2ajzX8lf2k6Jl}ydM9Hx14H1J;pY6u*|>fGIsUmEu;-?m(46Lf6y#a1rF){^eOK6h2~;V4q`qMEaSrylF*XkCCB`)%GzLDmT5@ z9lS*j)+2=zlKZ);=KDe!=_}38RIEu}9Bd43P#lpyrNTkNxF%VmzpB(D)oiNRVU5? zRy-^I%S(xiJ8c4m2T;-pZA2C{fi9=lCZ%7PnVXA#t3i4tnTF2IzXAF1M$D#1G~ttf zjaaIn`67MihUrx^8koXwvQR_T;-@Kjg|A@fq{A<;cv6L62&HMP!T1R*1uCRQ8pP|^UhU|zX;TJE|LA`?c4cp}|9qIxU zdaJ9fvCrKrqxtQC$yejT#HskHIK!288xgDCV{_y$g0z{6T~pniK(yL|F!Slv>0Pu+ zn7ZeyZg|No^Ednb?c+@(-2DSLqJ9E@l<-x0Mcb8Nu<2UD2>#{_Dj)li*{wQ3I+Z^x zEU_T_-S`Hpy2baSjhI6hq{FinOO`7yE+g>8Zt#y?aK!$nJk-IhZ@p+3w63dD?#FvI z1eZ*XPb}n|mLu)Z2Khn_ULSH)5KV0_ywTQ>{$4CuK*bazQ-@5m`;LRj;vSBD-jNrT zmpgx@C}5)ub{v7&42v#<670f)_bdF^AARCO7!ybsxvkDH0pt&oE0cwPZBRTUVaw;r z&xx{oNW0kwc6{`$3$^i(+a|y{fb&3dOFE(=ov$85S`LU}4|D6MNiM)puresEv!1trzsnj{i^M^$vBeV!^=RyBO$xAKD zzvj6G!o=efQcx>?iMet8kY3?}go!laNB+>Jx{naor$*Y?2Ir=ar3&V{bSw=MmWQFR z-!j`G-gd99qADG4{G@$NE$b9RayV$7qbvIL%1D3FSYdC)YgL(GjrPIoGq+h!n_zJA zDuFul24F91F z3Dh6lc68CZhDYAr>z%51r`eqoihTK}KYwlKYc2E6u(FUj$i~)Ib(pE(5pN@fL+As) zh*NJoCdY|Ah$%069k~UjDw&oA*{`6gHj`X^tA3=unS7L6BzL%v{mF%3w8^Uc4zzZI zZ0OE(J;@yg)7gh}CUW$1v`dS-zyk~>@6KABg~RvR?@GJD!Oo4$=y#G!21LBNhCdjB^u^OnG3QQ~ zJ1Ad-y~~%&FRUB>+MhgygjX6SK|vE+#=KioQnA4TJ( zZzkYu8T`^uxAk$Qt~H7EPF2aGz6jAKiC9SDQ*)=-Rx#HPQY&45-}xBv0ggXYjRj!l2qQZkkQq%)ulKR*m5L!L9h7xO63#RYZ{$dqDIpl+4f|jd^K}!>-A1K7;kuKG@bbnX z|7(ML;;kvKd{G2<95r}|d?jp|qqTjRE1#=N)krWKLy_w2x!Z5B?6~Zh;wS*v$q!JS zW9W0GE}0^fvx(KR0tc$FJ0Q(pyVAWd9^`CN2U~tRx=l2wSx~vAPnG%Kb4+BK3eN74 zl|0*eJkR%I^BF~*=cj#CG@MT}5%bp^ed(HwKGd}2)^C63-!!LFp4!(b3ZhR=XI<`5 z&(ng`$ygeoSg%!!8W!1nU#CmgbMA}Zq>y=2&uFPgp0|{^gh4FhwK^a6fz;h#{zQWxY;e2EkR<*@1QRg@-(bBq|*T-mTxJ`aUMo zjK424kgHaI!P{kQe!P=VweiXug57(%K#znUPSqVf&1rcUqo__7a(l0=G4|UF81JYI6p?ItEHz(WpA=gO`2n1<}n;fXp{L2PR(87nV)KG((?IAb} z`=haYdn5D-p)e2LPAgAd>##G72r?oiu)zw0xXvGAFLkS;XfAj1g+rz4FF)x*UDT3( z=WRWUw76>#*V}-)X9NoTY+Npe%taibiY@hb4E+?~oo$}VWLOg=R zt)>4`M(DoJ&|8jgX4LS=s^J`7`B6~tfb@kFrd|582gFM7E-CxuCBLfgt74zjrh}HL zWuQX}+NGrCz~n)+5K&IKNOx~KMp=TN$P=Ig5}hKYFthl=Z?hF*so(sK=m z{dN1d8~zR=M7_my$u?i_$6ha(yH#Ma)+|aGnrjR>EI-{IUSZp5W3k{oU?FqJ;^(_E zA{J|`%sxhVf$*(V$qw*KIwfzS!-l*cx&XwRBe6~654U!e*%w%(65Bdm^6-&+KT}2L z-d<}`s!%Xh2sb6XAA;N8DwUh(OMq@F=DgpJ`SWbBOjlNfjI88MTEL|}?aa_74X=e| zRehDeX3$OWiOJldn$h?B_y{km>0&`bq_YSw#_IHRBd>APj2rT#`3#-c2u`m;&cr)v zmFjcXS>o()kiId(c01q@nolxi9=hqxJM-3rS2V`o{S*EEUVp~*c{rVRc8<27 z_L4%=I)tTxBJTC0Z|E6k!$_prr&m=|SnO`XmbY^?I%0kc=pPnbB1kTCiQ`|dl=qU; zMbHS|6EPO$FfArArSOxUb)n zu7gB%*h4`N`{kEIom*=SM@@hB8S=_b^F~&<{?ER#%yRaaaiDrY-!@mx-#L=SZCjH& z$loB%4kzRNV4PBxFipf%sEUtJL+7vFw^;3Z z!-nd!-EO7yx84_!Oc7CUGdr?7kA^Phrb|EfUsOb0m}II1LS3Fvx*uM<4)bIddSp7tJmP-;@K%9;9a91CM5pMD z=h^O-IE$tbsO4| zec0cVs;|r=wMvIyo>e^xQD*b6-a5qMi}7LWsPX2vaNVp=I12_B=t9cJy<0!HZCDyU zM~_#6zoTqKMqnT_4+015+;a0wP=lZfc6bUFQG1%~sESfWHA5wuBZR#qOXZt(_C5S& z&$@vj$ex~w6XGZCyDl02Mnoo5vdP-7_bB;a;|_O5PG2io3det?=?Ab-@HH-$Z3bCd&)ZGCJRXpxAk9 zb$EGxJkKB5CH$f?nuFhYEMwvMGyefcj8K z(mP7Sq^?hNlXZW0;vTufr~N8S{49kL=ACmNY6VH>3H9DoO^WK157}oPmln5(0lR{! zpw1)#b@4CVlN+!?)f!=X2Q%^-{{XC3@-c^g18ECC>UuQUcly=(5G4f{LD|Hwv8E+z zS*xGSrsse9-O_%L3`z9xpnxjZ^Pt#ZtGCXE73#KR;~~SQ*(}eQ<}!~?`9F+dnY`a- zwZO63Wg$ndnbq7`=Sb$-iO#zukfG}Kw?+ak-f&DhB<$ID9nc|O(cFFXb9{j3*-8KA z5}rAh2bf{G*^E+65x>tQhEyvxG+onYi}E#6V&$?nfq#4wUWfR%8$z0iEX8r^;n z)k{F%1{c(jPRZ2SddwbWZpuWF5x1Sn-HBRNeQRG1)CZ{DWhWC}>!AN_$LU&IvV`r9 z&Qcu+nm=uZubh4PD(G0eM99~wP5tl=+@o1ic-~zTsxoDf+cUrd`>G)q_^wF?Lq&za zYfsqhWM{MVZS~!G^HtB^yZ;+Vos&iv+u+(1Qu@FxY3x*p!&D8{6wOM>$$X>lN!HJ@ zV-KjqR1$TP6pPJpGz0rcdCT3>KW|MN;J}6eJj6Suq;IWzO|altQ{q&Jf&N?s`Z8@Q zHpVb6t~$tUtm$k&7v1}DCs8v+@{4L3sY1;!%dPfOJA!RZeRsU;LpWmK-Ej_(C|~AK z$D?~M{7Y)4Lywr6=c~9-cSkO?WN&cwm3oOSjOQDTPt_Wd;2U^CX<*F~5T=^{ogvKXdgX*trvPSBSKW7e#oXp zx_e@h{wnv0dcT>tC3^Z2q_g+!|5yOj7rpDJo818LqwP{;_IoAVUS@~$;W=0X{s$N( z8!VE12K9;brNLj~N_p4@%ri_xxR!ZRV!Mz6NG%vd6>me_owB7?lXiQK(FYBWEd6pN zx5$0dDoz#to})Dg{}(UT;s=hN7#P5G-i9m1EVkLRpe8qS604o_!c>nf~f>IGQZKIfwFs%D}pWE6r5| zcH2N+Z(UO#zxva=uBaRRuR??+$96m&Ug*w#BI-T)Fq6yL2$<@NlyTK-xTjlS5CR=y z)it%R_u!^8;vFF##)udx;QGsvLdCzupWk2pS@V5P@RTHunvlq%W(W6K8@s3YFslDyH z`y74J+~Jl1m1?r}(}t481e(QdA5YvWxQ+D@OHF3Jn!aB@bNi)oo><}Hv7{)H7xAFc zEk|YStMVGj+=cQmEjtvGGhqn47Ho8vk80d2bO7MlLbEY^MHk_W?2GvA15iUl0J;OQ2nZ1Eo<>|{y=qhmNHO?Foya)ZJWd%|Xen8ot6WC(T!i=;fEwuun>i~08R zw#RgRos-b7d;_Q4tg0`Rzbr$y%T1sdBh|s2&cDtzrCEbr=1|*Syj<)ouFbqwJ-$jo ze3AJnfd`s!F+G}v?%I3-eu<1 zK5yk8SbfwS-EHdBR}cIgL`3U`gNL;fO^5$^{mOVxE<!!PAwp4g^m0pSTwd-`YDVSU2ZP(N}^ zUrMdc0WN(>Bw%fcfhSspGSB9e&BcI65m+Vop+f}-ZmJa>cTjnb>2@UgP z(r9@ORZ!PF%%{JsDAtb_+$|4#=T!C4bls4l=9`O&(iJMIMDGhK58YVZ?yXA_I%81(&8pvdHBx=SNlTIL=Plzn~8{hZ0R zsuY1(>>4YZY)mTyWe;6;(ZL7S{p7mYV;|_cq4cL}_x`;yV;aR7FA@vaKG-t*2x7;! zx)v*E^Y#ZXEhas4{CDv%_|Jl(#xNssUx0NL}cFE(RwmwEZpA@KdA``n0LEA@?8OEVOeIWcIjI zut4ci{1_7#2gFO%4O6og_iQRmJ;@se@$vDWH7CqpHoU$q^CL~i>ua50C}^&K9?@Uw zRWVY8kFoOYoS)h|YdJ>*^wH+e_h};YdPnpTY^H|LdaX$JwBelL9Pq{4d{~@EU$=ko zu@*TK?fR`3!wRv)~edcsM*3f1kUKyC6JNQ+ppYt{lchXwp}503{u{ICi) zp)2L?Y=2@MZ)F!Pn)w%8$?;HLBCUD#n;p~0*MQ1b$k4aWjW&htK_~FVw`IQ|*cPTq}CG;{fX?a`oA5E0xtFtwD-r!$b_#UA9@nes0CQXli z-SWh~)H!gb(7F)xy8#S!8N!U6?8EgQ&azW7Uf*YH}OY2KqZmtjQn^)BD12a-pZy+T?6B*H-624 z8iYtY{qSdBQw3Bq5(kTeYr!&bGa2V($!z6nUTnXQjh3x5d-+o|1=6)dowe%pleHu< zR_N{(onADBLIdBe@>6PVMy~A)6Nx%Yk3#FZ7s*-@7sN4HizCZ6pr_4*Qama`dHwBb z%Ku;@Sy$=4`a(mpw~Kr=k|60xUgDiesiz2O&3mc-J9G|Z6;PLp`SBnzYX3%@TV~7k z4=e1&956cQUm*oK+|5l^ytuZ{gJmub!V{b&?*EbXo#AkOU)0ezvYA~-R#F;hbsJla1!GaIua}$i6BK4n^lKbu}SQ6G{mAO7xM$e%w#|?DX08{tC5np)N_>VD|(hW}zX8fI8#+5A8&qybl_9GWbW-Q_7T-aLK z*xt7vy#Qq}ZPZ$sDl$8bFC-*=m4Y-9GHt@o<6uK=cq(~sorQRuo*JK}OBDa;i+8l$ z&5-oY%!i{epWEklSbe8UZ7&@QnM8JOi}T5znKrV_hevL|Yui3G=;~EWZNuozN&_3BorE&;F4kGwL!*O*~9r+;p5i9@3L>i|{OU zA^xsGt~u!m0h3}PW22@A72oOmnK9$dn>WKBeddVjlFtjr>$sLv&HMe7OD!F?HsvmnnA{MBAm14>O1e<0NQ( zoXmK_06RWda#<_Fu*~qA1f}Vwm4A?v_NDKr)5AFdJZiu?$rNbbx`Ce;uuyI zzRrYU!O!}159_74Z$q7BSW`PD*I!_NF0z4SUPA#32_?{pHAVGeGkJ-~|mRmmqSk z19Qo~0b+m}I#hSKpc6_^W+N68VF6`{>r+G6< z_xQDDJ^xFt6w}JCK@K5uX?v@$?|kw$G9J2K?g3sM*C76MZ0`#hj|KD52WF+&hcpj- z<2zV|M%ZkPJ*Kd>NjI|9hwfm<{}_db z_RMK?U26w7jS`H-nr*$OP_`Ki8LXlOOQXziN#z3SOOg>d==m_csJex^lHonavF+*E zv{vWi;Iqb_Y5X)kgN!r=8UQJC5+nJMcG8^j-o$;CO<_WGTD0q${!?V?nXwt18K`Ap z#Y?A&U1*CVpOf&tni>kaoeibkv#U$_Dk4d={`32Y-)r{GV=}tkN+i9wf9FxetBxH4 zRk%T+ll4NlV}pA`DM-Zz4lttcMg%%TvsJTI(`lmw215kg_HEFtI62U-U&ex$B-?Nw zRrucKY4tEwW$-IwWT`$ZjboaoXzE3XvoBsRnK@x2$giViLQN}lM z6_|{1q@&dD0X=ArrNqmpI|1cW?-{We4S1OU2aNkSE8+%2T33Nj8FllW0{%ym6W#&g z4V<&&5wXsQ++}E{abkZ%vp;S!e{TKr8WT0y$~2%KPa+K$_-%= z=5Sn3^$9fPy*JKtbL`erZc?~e(x(b!2#{PnYb-&USenQys47c`3N*CS`@j@qLAWYc zH$#u(2-j4|HlIl-Az*u-uj=+*Gf70mc~J3aoRFaeZHZb%CbdZY7iU>d7{I3EwHraG zgsS0YeY!)SrGhQOglq1|_rJ_#&F#**1nbQEDhitycYmx{65WA1QJj-d~y5BpGh*GUH`B-PW&dUm} zXIdMNjp%{)KsWXN+rdh1=1h1_Ttjo@Q*aa{3NrW;qF!30Q+e)2$VV3Zue~FdJn?+Y z*j!@;sz$xi2vif2E%my#+5NO@t6d{6g86-&P~ zKjSkkV7Vkbd!MM-E!|aUIyLEMMVdW9eOb%PsWyB}&f0 zS%L1RP3Okfs3PAB)Acv3;JG^CKfP0#`)3!^*Dp_9NAya)gRk3dlA+D$HLY$=@w2|F_Z)iFeC!0NA zhXFW*9m}q%W>`hQF{~fJ&G3Nr-mRGQrfo-mvWLA-+D*A+08_8-9mA-~T*nWx z5DCi{@r0Nj$)S+4@tzV=@(+ejAv3^(`Vc}=HFB(@HxazJjQS1NW(CjI{q~LKyUxgG z$fP_UteCprd~1C@z+_`9uQH-7)szUM4?!F$aauCQED@abR;Yfe0qZQnL?aH)743Yq zYH|A~6)l~-yV=9&KfZmFJf6Zq14ksM1XB^-UjCw8tvcFws_v~4i!_Q_C8iyr1d~w^ z$s2LC;+n~75AUyjC~D@s*b~=rckc-_5+Y8EMZu?{lEgpXe&w1~xQu`GKF`-0bBk0a zwI&mez?fOR#a<>8Dk}THuYkU44BRdBi!Of-NB)Sk5S!BumsO${_LR=eftt4}Ss?Nw zN0sL^+^X*)&7zqLEvv+vWW^C>854NY7O|fr{!Wm@GoXU_rOmecZ zw@qg2G`figft{eAR&oBgCCG{PZ*XZzxNE~^O`|nxhbc9wfOG_yeg1A7RBbz*bH0=+ zpO~2V;1F!+CEF|x8J9jz|M0UT!_0YTBZ>1?%$|^(ME%_+TlF#biC*6l0q4gm!pV2;*DM2|K^c(}RahgsdZ?$6_&yvAc;ph9pu z?!)(Vfo+IaC#a)U2HEOb0C&r_<5=k@Ti-(t&0JIHHe&n^i+M(wO~*cpTq#d9ZUTSw zEOY=24EElD zJBOuW$l3Oc2NbegwlE5^S16JCtwE7ZiyJ{1+e^&mM#u4&Xk(qFjSlkoTXLyi)5Os5 zS0a~1T9}z8FA?w4IIHT~$8xx?37g$XpkdM}G-uhrk30)6?sK33h-6z8q=j6u3;BN< zz8qTAEG_22r7WYq!pSCXiJNd*X!HSgoJ=4I#^6Gh-p6gW76T(g;&v}$xSE(3(_zuF zhaWDF^YQgncf2iE!g|NQi%|5Rrlhb*=i%j(q+DuJfR1et*Yj`5MtV3|e8=Dpq1k2a zg?O$PM|Lly_}hgq{l;Pf7KmJ(TS`C4w`}yq_?MD{?%Vhd%{i>!W{sb%d-2hfgF(@& z0NJq-sw96bAF1^QDPpLg|H6hm>dCm-oP2ZitV0v8QM2&^A%EPYXu)oj(;GvRCT5jY&>UR{i{(jkoB7B7`rq>5d`n3OtSEKHfOj zYu}I%)NOFRSB;pAqPj(82z@9N)|f`X|HJhDtw4q1P? zQf#~&*e;r!;jx!*mD|_%I-fsTYh4wi)=&6{GPKw@gRSQ_+x-XCDZRS4@8M_B+|lyi zqWTGtc#jjb_K^{}YKvNHPkpX6^;^5M1D||$OFj9l2rjlhXnJH%pqIuk`yLZgyFB22 z;J;SJfX%rqP5`7ZsO+10@#fSi4YJNIBb1;5V^ zTV(6kJ}7)`r}wh@E6VO7o`3~;YmF;$rOa3ab&j;Pd`eZwo|wapha}WFoal>~ZJZb% zkmhejpBS3?9>mETSuS)bbU8*;b_{z1lWa}Ed|NLUN0Q9O2^&q#SF!(DVLI2wOu3@J zmdftcE?&AVUTI%V_KJAfJ9qB@L^G>?Zq#nnkHKQz$t}l{U@9sqo&fpi2}e8FeKw5e z{A!IBT#$$aA%Te~iDmkzcE{YvG*HC(_TOHrWZ{O^HE=M9YA(n9*=2lGLOEkvTTic~ z*P+S#hB0O@dW=lJ3tnHVnrdlHTHG32V8W2WL&-+CtTjrDB375QiRNl13#(?;OVJfbE4 zm|>ZN8=s9-PZH0Zph*1?g#Tidy|vb@nz8^u(V;X4|I|cMos1Q&b5FEBjRD9N1m*yt zhM?c=z*_4BBu)jj4g)bzX8=H#u~$bS0*dK`k5ZqczHxP=>d6`tWbE%N>2lQXifmi& zY$8{us5xygO@7)U;H3uTawT8SdbAZdQdnq+K7MecHPZ@^mkrw;j5*Xc>@kO| zitpycgqHn?<(8mBwXlTRND30D%I=NdaK;I~7UO>o%gvU;ZmQy3zwVgMvbtVMp-v^1 zyO-?rtLFlgWwBbt*2|o*>_m}IVF9S9nckifS=14OE51)fQO~H^o5tI3T=hdTO$G~2 z??~YOLT>zXMm-JJ1^?`w1(!*VowND<>GfCo6(8?y^W~`j>%39ofd~OOzM-|~jmj^= zBR=u>NC%{Un*VGto-hXMrD{fvOE#Qc8U(tp{hR^-0Hn40^bAA=`Y9a`2a3YW&23)@fjuyN4m9*6R^3qh|DPuN^v zIp`mad@Z|Q=RB%#pOXK(#C)+?tWY=o0xzv3?n9E)UM(F{JvY+UN0fHL(UicZ5OR{u z!SCQ{b3=Pn;VU+z{;Jc4>LaJRg)Ii&DJ21*G?4K#cOuSG=79%q%;yHn&}pWifyj z8$ELEN*cOGI)JyERhW!?AE!Dak6kZqNGxW4a*OEBC~jwUi=maqol0c}8){oVk{Gcs zA|73CG8xOV$g!IIw8&bAJx?0G=dG;!*p>cp@E%%|g*i_3tufNEVGPOw;~Q%@rRJ`wcBUkQ~35xuiPM~00RZyK%gKUMS1}Gjyc6HH}!yLlIDn5 zU>?Qxe{kUK){5@M%ZnEyVi9?)_?yJn5g8kf(USXsn>d*|+Pr0vmP1(B-nfho++rjk4Ul}?U!DwNQ ziBH4KRQ8%Zbr8_`ZS)xfU|se`Nr&i^=x=U3n~+*KF_OkKmFR6bM*LqdvnTf|;B_#YYBA_bd z+Qei=K=K`0kvK=kf17v}2CilvS1JT4P$Q9T5G!8#R62c;<{=stF(q!5=JY0k>5Hw; zDO@w+UnNn8`}}7mfSlmh-RVMxEgtxdO_<~^>E$*8nq_at0SZZT(=XedV!S#Tsh|AQ z`}Xh=p+!%XgrSFJ7{k?=dKhG7>Q(Q_Qu%DY23J!(JDhu{iu_<4QjPo~V}TCv`D%(< zNAvo3#`FEm!Q@H8>sPnwv<%<0IV=oje~fEVJQFINT=qzB*5M;5ZQAwLD~AsXc)s(* zj9nENH#g`Tg&nH^p~_0b(k7^+fmU`*`|uRy`nJTfMsAEJNDGBOD;7xe^?jthu8m`9 z!CgL=K8SSbo^Sj1{L7=_@MkAi72N?T-n}34VYh^YfU;n&r z#~Pn#SaY5fl|^tbeBrSEDM2T;ZSp>M0}i65`#_|BfsTk-?Y+s2?II5oVkZh<#&_Ag zNZ@KC>s1DIPux5bx(u7RDX4IR|EAp=5Wfeik-Tnt?e+fo66Bfq+Xp4gy_!^4n;QYW z#~UYwX3Yuq&>yW;I6`|qn}5j7ijl>(81k+b(ix^p-TCT}YCnEIT0R7wAcl?BZh%P{ zq!Gf5&ymG{C^b&)L4I`3RvsHrEWVB1KM|Pyyo|SIb?2;OYApKm-iqNsJ*-nZTwzxm zY^Wyd!+v+`0#%70Ul9qZciEy~X7{W0hn4ZQ`5+>6Qlh=LemvxRhSw|e2Y)}KJ$)DI zPBD5=dray`_v@+NKu;UzKSlu^*ln77!r#c#BsuDKvl1&mF&NTycs9(JJdZGV0SaW+ zy;x_VTo|6=Zh7HoP(;LMNs%Vpl}e6*H9zk?*?qf=_S*aGF;*}pK(#pYv9_!20~nEU z1Z_npE%_n*l6v?&cV~)Ju$T8A9E@FYuuI!ZHiI@hwE!VAZ@#w*c3fVK^$(=4f`c)k zQ$?C`$MR}m4O5BlCS^XW%d>wFcMU}I74~uELXEgnrTjqeQN<;0?XLqOQDPR92jfq5 z(&)7oM0FggL7_qLsWltYn>>rw_NaBbCn3yKYOv2(^gzfKdYybq zirV^nq2wxNz46TW^g^gHskFDq$mIU>q{VfWC1#C#u6O+|rfM^dzf;LzypJi~fQ=z< zbrB}ep=_nb`>Vr0Mz-G$ZN>@wQvNYBkWT@bb6_FhRh3q25E}c{B7OU(m!r{ysPc6_ zSnPYuOa$y!x5#{r9l)TU``zAvqzOlVW198#UAVweS!Y)dq?_n2r`W-(td09JVsN>>NEmA`*3} zae>DV6-9AHL*>Nlec_ffeZ1*f%g9PY_x_8?`1AJ@H_qRMR{9h&W7o4rNPKq(-{B=K z<^H1(UkFd4^E>)s6B@EYTMd9B{bA`VV*L(fl|F;Mm-~M16ExuUr_{Rt!Wh$}`F&Qs z&ZtJ6i;ldlZ_uEvI?zl7ln9dFt7E-sd5s7^tpP;ENpyv`a;Z&Z+;0kx1BUVCz+#CE zkZ9z`&aJ?J8ULQ9^o7~@G|F@N;Q6_BE86T4{FSz@+;hGNE_Gj_JcAXtl>iEMn#~1H zz%u8R(Vpz5a^u~J^VtOB_Ow~6%Ep&8vmn&BY|RWA@uy1pY;G?cSRhWOY+EjqPLo31 z@Awhbf26sm9^ouygkY4HS|h9EkNbed1%CL&u+^4@KFC$-`GB#HGf=K|Ygg6cFr?h% z{7AK4pxH^mV2Q!ED^()XliB<9K!AKQ_FSdp_FV4Bj^?P1k7x~YVQ`LuIv`kZ`6-n&G-!<+#~6|2)Ej(gDg?k2cGQ_5v_G`9)t5Z+2 z4*q&Of7V3vhF4mtyKo#^wQ~KbO}Nlfv#Cqv5GTneAnTOdOxb%{({NAFV~w5}%Z{1R zTgt7}&0{9|qb5}pJPj`j7&hQ!_t`vO(>-Z1xaHA5zzR{L#ALDEQU>t|{oBDXsOc6U zHP6D9mMP5*H%pbH@bAyGd6RT74-M6EaSoTOX@;uJ?&FkLix^T}>_iE{9!T|(gNq8I zt(d{6CT`j){o|)XOR9(M%f|hR_mUjC!+ff%<^yEeMM!n%U!0$6BQacTE8}_v2fk@!o`Fb)!dtw@FGk<2p6G{X5j-Q3O3_M@A zD6$Soh4M6C9bTCcnq2v*EezXsSinF^9?K{Gv8^HJIfqL__3!aP;I{o*2iATr@^?#` z3}(rH48~6^(!N_@f{Ik)pIN=~gjRE2X>AYR@7Tj**Z90|_PiIET#XZBF!q!Cq}BAp zs1el5zjRNJ((z!aQl$!XM#vxvNE)erwTckN0(=rCihx7X%R2=nkrsR;0AjZO!7xo%okWh`v&>kj$l5@Y|1gU;NZKVEQ`l?$pH6@^gP0=RDY&e;n?K zxga{UT!ti{((j1uK=*601FG2=dsJVxW`z}r)$D>5qS<=GueP_u1hVNS3h`Z_dG2{? z>3%>9Zer@NI!V9irlkLYBRQSXWORrPCM|*wH3ca zIecPZA z?>-627D6ZCy#kBS8vV#g#_V69l-AuA(PM21VZ4}woF96XdyR#Tq5otHe}MX;74r+s z&VPtonaJ{O-uj5u%S|Jm& z*r;yjZMyMID{q~{wVkyOA9}mQ6zKDnCdUKB(No{QKV4%x^?OYYi!W&o{?dedQ>Y65 zu9#<$3pkUSas-uLqG&R@R{;`%1~s!^-7Nz*$5c+E)Y-E6WqJV^8GYOxcLd?--=oBZ zxfZPO!?7b@80n)yCBRe>S4YqLA+rkkG&FL+9n?Ah4a`5NV#+n33s_5#=B|P^Wg1UqmvD&;7%Rk3n2c`FbLaMzn_Ys_^ zxuDmg?)#ql-F%5vO~y}MT(O3rdd=aC}sqRtD+|ST9e31`il>|e|Fzqk=bRB4b zCrLuZ7FmON#-TJzRtFgx2i<-LXY-#`4L(mj{6zQC1#`5J5WkaWKpgmFVl#{~zOn+U zcg{&>5KDqx9Ol3Iyn;`WMpNeEX;huhqx+y0YjMf62mJ--fdIM8Mnr?&@TzUut;X5K zp!3+|zuqKQxeraXt1Jt8(*wa#TdBGWZ0P*EKP;u}ey8=LF9oBoWz#O?3*wc-enVY00-LfgvwcL(B? zo~OjxIScc~2|D$OhjvNvE8`Y(vS-E>k-whmt6f}RqPyJIEpBl=sgHQ>8uB3^U?L8o zs2`)2vbe*YS4$?3x#=iB*stBGnena6+;<6LVW@Tp+kn}0F+Q*GM&EbUQfav8DKa8! zFRiDO_PP1um&dKSGy7cp4!J zOw70tXoi6=jvA%_yvYStGTOdDNpSRzhd^iL=c3`_NoCRWPC}$?Bb>49?yea952czn zj%5f825je%2J2hz+}w2ev77OI}K-!8={^xp5@u^{muOQ z)b}by!Lv|HLcGG^&dl53#jyvb<~JBfF9d&?-}aso=G8?>Y(B$82;arNtg>cjd>Uvc zjN_K35&B!S_B|ddsNkQJ1*yQ@GQLCnm}!kD;VWIu4p+HTUEr#i$IU;JRg7Kckgp5 z!zt(S7|p0WdXGhcnC@hUCBvN-#A@%`lcD5s*>;?hEr)u^Tu|d_C_98$EcD!Zw&20y zz~NVq`Oj9bHBV!F@75*D;&R$METUDy+?Q-9ym$L4EV^NbpznED1k)}-RF{U%>aB{^ zxwfwT-Xq}OEZOsgK;;D|C3|Ptr?Ha$58%=C=VJv{CXRs4%{Xo`ehtW@^K2jZ=FHCA z-k0b&&}D&~>*|G41j;Pyo^yEIt9V0aF+WWIw%PsgTP*npV|8`znH8Sw@mV%323~y& zH^K0r74GOU@(zHse;|hZvh5GcvmEscrLUicSl(A|sasbnM-`Z5ldH9gJ;u-B#7|8tI3lNUklk(^ipW-sS0&tC{Jo)oY}+pbawFwLfKGZ0DWgpyyLNUx~|OS$H$* zav_>^;<*^SwuPO5Ek(j_?ni~UemKzl1sFNabC&3}(@A?wdxMt^n!k27l28rwzOzL-QcjS$kO#$|j z1%DxaYgkr(ESh{CJ77}t4Y@s>(cxA31iIvEZelwYKe=K@dpKw-cZ4=fe=F<>mz=TV z0+FWD0XhLe#^RS0RdwR7VT>sYI zUZaqo)(2xbYmkxAq32YiEBF5Q%*KohSt!mh^6 zhR|uu;Lw@%MgD`rm)e*w$5hhC6PwcKpl8dWhs{?yg{?R0rjAC-d#SFY(S|M1+X9jcN>$hil_^g>p@TKK5nIc8Ny*oONMTfVc9O z>iC@>9RJJ%%~qc5mA0-otE6X#?AP2SBCwr8v?u>gpMU)Yev~X`_a;BhS*G;Ufqb>y z%ukueShj9HP&x63!P02lZ=~%sAYY9Nw4t;(W9TE&j2y5#6kkF+!4})swvVSn=sr zyiusFpImCNO<%>>4xxVXavfxUv&nR+H(s~)aS$@PtipMM=2WV6IRFLay@%=Rv17a+5{pvk{;juN{SaifU6lQU0jr z{=N3rR>PB>7lYgrP9-zNO&JVpKd7!}CcY&idqDDCY7wt2;;L@ei3HPWo?S zc^R>SpUYwlw(ixwnN%k}y5*jIH+IULNj$nHmU2stS>)enA-Q@}LaBarcvNnJwL9PA zirKm_ZSr7y)ZeZC9b#MqaI@_@*#+6(aQV9o!)#VZ8?J({Q@c$RJE!hY7oe4-imCfb zI(pvKt)_yKk&vr2D!jP`PkuH#CbL!0E6V1}q#@6hfaez<9C8M~;KoC;qkHw<;-idD zpN;G7MvF;~66Qw6MHr!q!O!zasqc%2hlE@`@voLdgg%A&(cIFNJ9P{OiNl^U3yEY9 z^s1r7VsIk zh|buP-WpVB3m4TWxLL{HJeU|MK_4HR9VP9P}9EfXk~Hi!R;A zu?sNTLpQUJ&q{oorQLRJOy^!9WiR^`sYTN zY!mWE#0IzD2)m-guOx$D3b-UZ1p?$YaoP8c7gJMkMkew0{^YipcA| zePV>ky4wA*2;vX)r%;qW#(Q;!jFw|z&NS=G4z1WU4Yr-L$g?W|Vjs~e@f!8@(=Y89 zfGj`e7P!XIrf4+~0Q!Mdz*-s2Z-X|z2kucsqBe-DuUDm)yd87p1 z9XHcJmyEHxGp>lUEBzx^1Bn_etKPKh9636%%ph1Xq~y5rn8v{Z_SP4Se>gUYUaQ^X z8b0meh>z_J!@Pd@Mz5!IaDWwuGkvN6U`&JrA&!~^t=E8#D^rkAci7P#JqPDQUTPi$c%K1cRmjm?MqX%5f zrme(F=kB)J(2zB_eYH_3bhqd={iqyfd&v761RsWkV1HUmHLh-+WqzR+7-e5j{qo4B zd19+unNb>^G*C3(tUtvpU$Sxu~<1~cV>&yaF=aZW;YGLHDvijmYk`iFJq zGU-M_UzN)T^3;=M?>Ccgwq9NubcEkMi2vP$pHfJjpU90jq)VRd8yd>>J4e`KJ0z)E znF3qa*vAF9b7X3ethy!6Zu?F*h@`vVByv`=iWnkI_w`?x2O~Nkbeqq5&cBp>B-+G^ z#e8dKz4JHu!If?3RhLt1AjEej)VdOx&UT{tCh2%03NkuI1=e4aSUY1aFfvVfq0}4A zstGo7c~5_F{C~4_xxrq7m}QmX)-u>z_`384x~O?%NFE7YTj1| zJd>H70m7e>x{KakvCH{`jQMh~7fK0Nhs{RFc6n)+X@@G0oynQY)jGA&Q}CL$;Hjsk~d%kY7tqUMX4}P&ACUmoyxdpVhD=4I_F&P zn(Mo9gZ1|77YZK^t-5tjxHsjIGJm%hNlt^|MEtK}zDoj5j=Qge(j9vEKyz5~uWsW} zz%KJn@+FPp&_71xq{!pc*Ej`Dz2k-nr3la-)~ zJ_n%_LehMWrPo^ldu2YeB8sp1&{o4q>Y+dX8Afp_hlbkV17Psv-skr<&&$SqZ#mD80S0RrTf(a(h_riEmh8rCLg5JUupU3?xJZ3|MldGL&dO~{D z^cM9viUx)MX;B(*qXk5g!I94QntYkco-0b29YkjR`?o(#w;5El=%)qHNnIQKB<3AX zAID7`9G_Tv46yv@Fy7%iFxYPUZqrp|tj@TtNUccc55L!~EsgxIct5oZ{IHvehLT(c zS7B*^;k8v;WDymrb;hzQ<|`w(xk&k;=u=hcRO)^>y}-I>$^CzEhXwgS zEk`0zz)-8+al}Ysf(ZXl;P3fAD-*f}j)w(uQ@Rs$c3zum{goltnCAmW+`V&PZcn}YFMG0|- zoLbB6r@AvBGV_RvaBgJt>a~#>+n%SqUt22}ecJa_KGnG+{F=N`W85#J*V)cnQ^E1> z8}7E~ui%oj0X|(P_4E?)Mu6Yi*j1tB;N2v3xhA-$7NDJ@5WJdoOy@pTV8-9bcD8ue z*lj3E^veRN2S5|L;CzBFS6w{QkHleIO6o|I4e0L7=*&B)%z`EX`80B&WhN;#1{NEy zf2qhy7(*G|;Nv{S#38fq$x|7BX*S3b(Eq$B=4VmIo<8D-3Mx;PpZ)GM3HYZG?SZN; zPfFLz`O>;P+jzps+Np8&QfG%(p=~kIdx=|3`8z}uhpO}T6T?U;tUD&t`yq`e#^?*e8B91rx;c+NZ<-VmjnkOfv1f=Q$R|3^m zyicOQy>jO5xSZxIRDLjKEJ737?9Hwms0ot#9pZ)fTgjgR7x_de=Fl@sFojEO+1>}T znDM2P0KP3*X!Vz!@Mn4~U1fYTW|2YPkv`p6@4Q;Ei06dKDGZ<1*QlDIx6Kq!_TVo2M-hq_sb3zPCKyRqK9cvS;|-ix6l35IOmGogSzqkRBHAfKU5Sh-jPIAiNbF5BL;+lw6`l{9pfX#V(j6+_Hg3MhS~ z=)=0-hSuE>-ABXeFQt}SRD&b7Pp~;ZI_69M{H(rN%8Jcm%5HlSvW*jR&XHDWh@+t5 zM>Aja)+Oz-!Q~)H0*Qz5pZk4`nkBbhf21Vgsu0SID&s6|@!IOA=(LkW$DS7ivUWl7 zMo$j>8#@94yDz{dVlsw*qI|cn`-N_f+KwzyTJe$<$sP~-s+VL4Xv1WX9oYE=;<5eZ{(;seZZHiapy{(hp$p>UzJ>X`Hc^*LJIpx42L&ck_UV$-k9d~1YIt2 zez_~r&;O(A=oU#CIgknTr_TNHyv^o)+i<2~-$=~*hM261;X5y{-W7cX2f^r$ow34+ zfS~4=gBESPC`3N43pnZbD&iN?)(Ijo4s*+h_x+2pkg@yik`o_f;xto55J=^YI*li@ z)54&hD96PX zf+wR=BAJ$yq|iHBkqb-r@>T~KmH`H%ZU%7N=eMUQqx~1^wy19Z?X+`d*;j=`Q%*!p z(TDEPqW0v7D#L6zW!dH^aXU;RIJb$I709&zeXTQ@WFGitw7h!^?N6jKQRb3$g+&vN zG!V3(hpLVO%}}RJMuE@Z-!6ug$Z#z~<=hUwu&Iz9z^Ptq1MZdipKZ%A0h}z>;y~bY zavJCLG1E8!cGk`jG!PSzfg!jQtp4}P>^B3x-U?4F=6Ly&>rRwW_}5So(vx=#UJLcT^+qkmc8bBBhf?Z&2-VMW#A#MMz@`&G#krgN>kT zgFXvDK6NK(G1ri#QejopV7p{^*w%0DqT|GQz)ik)KL8_f&-V-lun;QCjpA6VV{S4v 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