From 3046da1cd3fefd4a0346f98d202dadd63fac3ba9 Mon Sep 17 00:00:00 2001 From: eonist <30n1st@gmail.com> Date: Wed, 15 Jan 2025 04:57:56 +0100 Subject: [PATCH] Add improvements via o1 --- FileSugarExample.xcodeproj/project.pbxproj | 464 ------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../UserInterfaceState.xcuserstate | Bin 48115 -> 0 bytes .../UserInterfaceState.xcuserstate | Bin 49370 -> 0 bytes .../xcschemes/xcschememanagement.plist | 37 - .../xcschemes/xcschememanagement.plist | 37 - FileSugarExampleMacOS/AppDelegate.swift | 19 - .../AppIcon.appiconset/Contents.json | 58 -- .../Assets.xcassets/Contents.json | 6 - FileSugarExampleMacOS/Base.lproj/MainMenu.xib | 692 ------------------ .../FileSugarExampleMacOS.entitlements | 10 - FileSugarExampleMacOS/Info.plist | 32 - FileSugarExampleMacOS/View.swift | 35 - Sources/FileSugar/FileModifier.swift | 38 +- Sources/FileSugar/FileParser.swift | 35 +- Sources/FileSugar/path/FilePathModifier.swift | 2 + .../FileSugar/stream/FileStreamReader.swift | 46 +- Tests/FileSugarTests/FileModifierTests.swift | 5 +- Tests/FileSugarTests/FileSugarTests.swift | 22 +- 20 files changed, 105 insertions(+), 1448 deletions(-) delete mode 100644 FileSugarExample.xcodeproj/project.pbxproj delete mode 100644 FileSugarExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 FileSugarExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 FileSugarExample.xcodeproj/project.xcworkspace/xcuserdata/andrejorgensen.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 FileSugarExample.xcodeproj/project.xcworkspace/xcuserdata/eon.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 FileSugarExample.xcodeproj/xcuserdata/andrejorgensen.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 FileSugarExample.xcodeproj/xcuserdata/eon.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 FileSugarExampleMacOS/AppDelegate.swift delete mode 100644 FileSugarExampleMacOS/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 FileSugarExampleMacOS/Assets.xcassets/Contents.json delete mode 100644 FileSugarExampleMacOS/Base.lproj/MainMenu.xib delete mode 100644 FileSugarExampleMacOS/FileSugarExampleMacOS.entitlements delete mode 100644 FileSugarExampleMacOS/Info.plist delete mode 100644 FileSugarExampleMacOS/View.swift diff --git a/FileSugarExample.xcodeproj/project.pbxproj b/FileSugarExample.xcodeproj/project.pbxproj deleted file mode 100644 index 0dd9c6d..0000000 --- a/FileSugarExample.xcodeproj/project.pbxproj +++ /dev/null @@ -1,464 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 9DF43467229E9A9E00996EE7 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DF43466229E9A9E00996EE7 /* AppDelegate.swift */; }; - 9DF43469229E9A9F00996EE7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9DF43468229E9A9F00996EE7 /* Assets.xcassets */; }; - 9DF4346C229E9A9F00996EE7 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9DF4346A229E9A9F00996EE7 /* MainMenu.xib */; }; - 9DF43473229E9B3F00996EE7 /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DF43472229E9B3F00996EE7 /* View.swift */; }; - F14965002432229E008C1847 /* FileParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = F14964F32432229E008C1847 /* FileParser.swift */; }; - F14965012432229E008C1847 /* FileAsserter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F14964F42432229E008C1847 /* FileAsserter.swift */; }; - F14965022432229E008C1847 /* FilePathModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = F14964F62432229E008C1847 /* FilePathModifier.swift */; }; - F14965032432229E008C1847 /* FilePathParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = F14964F72432229E008C1847 /* FilePathParser.swift */; }; - F14965042432229E008C1847 /* FilePathAsserter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F14964F82432229E008C1847 /* FilePathAsserter.swift */; }; - F14965052432229E008C1847 /* FileStreamWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F14964FA2432229E008C1847 /* FileStreamWriter.swift */; }; - F14965062432229E008C1847 /* FileStreamReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = F14964FB2432229E008C1847 /* FileStreamReader.swift */; }; - F14965072432229E008C1847 /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F14964FD2432229E008C1847 /* String+Extension.swift */; }; - F14965082432229E008C1847 /* FileModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = F14964FE2432229E008C1847 /* FileModifier.swift */; }; - F14965092432229E008C1847 /* FileUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = F14964FF2432229E008C1847 /* FileUtils.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9DF43485229E9BD100996EE7 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 9DF43464229E9A9E00996EE7 /* FileSugarExampleMacOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FileSugarExampleMacOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 9DF43466229E9A9E00996EE7 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 9DF43468229E9A9F00996EE7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 9DF4346B229E9A9F00996EE7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; - 9DF4346D229E9A9F00996EE7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9DF4346E229E9A9F00996EE7 /* FileSugarExampleMacOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = FileSugarExampleMacOS.entitlements; sourceTree = ""; }; - 9DF43472229E9B3F00996EE7 /* View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = View.swift; sourceTree = ""; }; - F14964F32432229E008C1847 /* FileParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileParser.swift; sourceTree = ""; }; - F14964F42432229E008C1847 /* FileAsserter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileAsserter.swift; sourceTree = ""; }; - F14964F62432229E008C1847 /* FilePathModifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilePathModifier.swift; sourceTree = ""; }; - F14964F72432229E008C1847 /* FilePathParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilePathParser.swift; sourceTree = ""; }; - F14964F82432229E008C1847 /* FilePathAsserter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FilePathAsserter.swift; sourceTree = ""; }; - F14964FA2432229E008C1847 /* FileStreamWriter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileStreamWriter.swift; sourceTree = ""; }; - F14964FB2432229E008C1847 /* FileStreamReader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileStreamReader.swift; sourceTree = ""; }; - F14964FD2432229E008C1847 /* String+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+Extension.swift"; sourceTree = ""; }; - F14964FE2432229E008C1847 /* FileModifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileModifier.swift; sourceTree = ""; }; - F14964FF2432229E008C1847 /* FileUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileUtils.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 9DF43461229E9A9E00996EE7 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 9D1A3B69231D0E87009E2B77 /* Frameworks */ = { - isa = PBXGroup; - children = ( - ); - name = Frameworks; - sourceTree = ""; - }; - 9DF43465229E9A9E00996EE7 /* FileSugarExampleMacOS */ = { - isa = PBXGroup; - children = ( - 9DF43466229E9A9E00996EE7 /* AppDelegate.swift */, - 9DF43472229E9B3F00996EE7 /* View.swift */, - 9DF43468229E9A9F00996EE7 /* Assets.xcassets */, - 9DF4346A229E9A9F00996EE7 /* MainMenu.xib */, - 9DF4346D229E9A9F00996EE7 /* Info.plist */, - 9DF4346E229E9A9F00996EE7 /* FileSugarExampleMacOS.entitlements */, - ); - path = FileSugarExampleMacOS; - sourceTree = ""; - }; - F14964F12432229E008C1847 /* Sources */ = { - isa = PBXGroup; - children = ( - F14964F22432229E008C1847 /* FileSugar */, - ); - path = Sources; - sourceTree = ""; - }; - F14964F22432229E008C1847 /* FileSugar */ = { - isa = PBXGroup; - children = ( - F14964F32432229E008C1847 /* FileParser.swift */, - F14964F42432229E008C1847 /* FileAsserter.swift */, - F14964F52432229E008C1847 /* path */, - F14964F92432229E008C1847 /* stream */, - F14964FC2432229E008C1847 /* common */, - F14964FE2432229E008C1847 /* FileModifier.swift */, - F14964FF2432229E008C1847 /* FileUtils.swift */, - ); - path = FileSugar; - sourceTree = ""; - }; - F14964F52432229E008C1847 /* path */ = { - isa = PBXGroup; - children = ( - F14964F62432229E008C1847 /* FilePathModifier.swift */, - F14964F72432229E008C1847 /* FilePathParser.swift */, - F14964F82432229E008C1847 /* FilePathAsserter.swift */, - ); - path = path; - sourceTree = ""; - }; - F14964F92432229E008C1847 /* stream */ = { - isa = PBXGroup; - children = ( - F14964FA2432229E008C1847 /* FileStreamWriter.swift */, - F14964FB2432229E008C1847 /* FileStreamReader.swift */, - ); - path = stream; - sourceTree = ""; - }; - F14964FC2432229E008C1847 /* common */ = { - isa = PBXGroup; - children = ( - F14964FD2432229E008C1847 /* String+Extension.swift */, - ); - path = common; - sourceTree = ""; - }; - F1BED60621B4182B00A0D3D4 = { - isa = PBXGroup; - children = ( - F14964F12432229E008C1847 /* Sources */, - 9DF43465229E9A9E00996EE7 /* FileSugarExampleMacOS */, - F1BED61021B4182B00A0D3D4 /* Products */, - 9D1A3B69231D0E87009E2B77 /* Frameworks */, - ); - sourceTree = ""; - }; - F1BED61021B4182B00A0D3D4 /* Products */ = { - isa = PBXGroup; - children = ( - 9DF43464229E9A9E00996EE7 /* FileSugarExampleMacOS.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 9DF43463229E9A9E00996EE7 /* FileSugarExampleMacOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 9DF43471229E9A9F00996EE7 /* Build configuration list for PBXNativeTarget "FileSugarExampleMacOS" */; - buildPhases = ( - 9DF43460229E9A9E00996EE7 /* Sources */, - 9DF43461229E9A9E00996EE7 /* Frameworks */, - 9DF43462229E9A9E00996EE7 /* Resources */, - 9DF43485229E9BD100996EE7 /* Embed Frameworks */, - 9DF4348D229EA34000996EE7 /* ShellScript */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FileSugarExampleMacOS; - productName = FileSugarExampleMacOS; - productReference = 9DF43464229E9A9E00996EE7 /* FileSugarExampleMacOS.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - F1BED60721B4182B00A0D3D4 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1020; - LastUpgradeCheck = 1130; - ORGANIZATIONNAME = FutureLab; - TargetAttributes = { - 9DF43463229E9A9E00996EE7 = { - CreatedOnToolsVersion = 10.2.1; - }; - }; - }; - buildConfigurationList = F1BED60A21B4182B00A0D3D4 /* Build configuration list for PBXProject "FileSugarExample" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = F1BED60621B4182B00A0D3D4; - productRefGroup = F1BED61021B4182B00A0D3D4 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 9DF43463229E9A9E00996EE7 /* FileSugarExampleMacOS */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 9DF43462229E9A9E00996EE7 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9DF43469229E9A9F00996EE7 /* Assets.xcassets in Resources */, - 9DF4346C229E9A9F00996EE7 /* MainMenu.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 9DF4348D229EA34000996EE7 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "if which swiftlint >/dev/null; then\nswiftlint\nelse\necho \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 9DF43460229E9A9E00996EE7 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F14965062432229E008C1847 /* FileStreamReader.swift in Sources */, - 9DF43473229E9B3F00996EE7 /* View.swift in Sources */, - F14965022432229E008C1847 /* FilePathModifier.swift in Sources */, - F14965092432229E008C1847 /* FileUtils.swift in Sources */, - F14965052432229E008C1847 /* FileStreamWriter.swift in Sources */, - F14965002432229E008C1847 /* FileParser.swift in Sources */, - F14965042432229E008C1847 /* FilePathAsserter.swift in Sources */, - F14965032432229E008C1847 /* FilePathParser.swift in Sources */, - F14965012432229E008C1847 /* FileAsserter.swift in Sources */, - F14965082432229E008C1847 /* FileModifier.swift in Sources */, - F14965072432229E008C1847 /* String+Extension.swift in Sources */, - 9DF43467229E9A9E00996EE7 /* AppDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 9DF4346A229E9A9F00996EE7 /* MainMenu.xib */ = { - isa = PBXVariantGroup; - children = ( - 9DF4346B229E9A9F00996EE7 /* Base */, - ); - name = MainMenu.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 9DF4346F229E9A9F00996EE7 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_ENTITLEMENTS = FileSugarExampleMacOS/FileSugarExampleMacOS.entitlements; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = B5CC9TD7P7; - ENABLE_HARDENED_RUNTIME = YES; - INFOPLIST_FILE = FileSugarExampleMacOS/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - PRODUCT_BUNDLE_IDENTIFIER = codes.eon.FileSugarExampleMacOS; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 9DF43470229E9A9F00996EE7 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_ENTITLEMENTS = FileSugarExampleMacOS/FileSugarExampleMacOS.entitlements; - CODE_SIGN_IDENTITY = "Mac Developer"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = B5CC9TD7P7; - ENABLE_HARDENED_RUNTIME = YES; - INFOPLIST_FILE = FileSugarExampleMacOS/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - PRODUCT_BUNDLE_IDENTIFIER = codes.eon.FileSugarExampleMacOS; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - F1BED61F21B4182D00A0D3D4 /* 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.2; - 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; - }; - F1BED62021B4182D00A0D3D4 /* 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.2; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 9DF43471229E9A9F00996EE7 /* Build configuration list for PBXNativeTarget "FileSugarExampleMacOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9DF4346F229E9A9F00996EE7 /* Debug */, - 9DF43470229E9A9F00996EE7 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - F1BED60A21B4182B00A0D3D4 /* Build configuration list for PBXProject "FileSugarExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F1BED61F21B4182D00A0D3D4 /* Debug */, - F1BED62021B4182D00A0D3D4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = F1BED60721B4182B00A0D3D4 /* Project object */; -} diff --git a/FileSugarExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/FileSugarExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index a75dd30..0000000 --- a/FileSugarExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/FileSugarExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/FileSugarExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/FileSugarExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/FileSugarExample.xcodeproj/project.xcworkspace/xcuserdata/andrejorgensen.xcuserdatad/UserInterfaceState.xcuserstate b/FileSugarExample.xcodeproj/project.xcworkspace/xcuserdata/andrejorgensen.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 9f7e16ece4fbba3e01a07fbb4e33e3ee5cfe5b4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48115 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ˡyNBzH2tN+KUV;?AB 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 M|1Vh1jn&`(7Y@uNw*UYD diff --git a/FileSugarExample.xcodeproj/project.xcworkspace/xcuserdata/eon.xcuserdatad/UserInterfaceState.xcuserstate b/FileSugarExample.xcodeproj/project.xcworkspace/xcuserdata/eon.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 0f7997349269b5865cf1383eb801a9bc6f91b8a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49370 zcmeFa2VfM{7B@ck-r3!0Nj8O0(@22;DTI>H(+GqPDRe?emSiExhTVi-<|2XuHbg`~ zF(HBof`TFb7>>&z>(!>`P+GDqpKFvqwFw!AWz4~OPI zo@4bIkkQvR&6c0!4)h);aAH2+&$dA+bTd<53Y{lNV0rtmDa8n$FgK-!R$C0=dj>a*#9d3^k za3|aicgM*%1^2?eaX;K255_}qHXe#c;!$`k&c!x79#6m%u>+UlGF*1;qUPG_*Z>w|Zon#l;O8hbh^VV(M$^XBuW2ZW>`4X&Pl3Ybr1~ zOr@qtrdg)hra30nL``>^7Mt!dJ!D#Ddf2qaRAqX?wAQrFw86B+wAJ*S>3P#G({9tt zremh#ruR)Bm_9U}Fnwe?Y5Lf7%Jiw}qUj6M_og3AKbn3s{caY`l36w@W)HKsxsf^8 z9Aa*6jyA`bW6f>NapsQZZszXhG;=R=Z*!(O%baZXWxm_I(7edJ*nGeFVe@M9b1 z`Iz~*`IPw+^J()1^F{Mz^A+!B_AT8VLSEL!qhATnH6f3vGlbp@Yy-NET9rRH3JkCiD>o z3&VvG!bqV&C=~3%1Yx4!5GD&#gsH+bVY)C^xI>sHtPoZTtAs~|$As0w<3fc{DXbCJ z37dq?!VAK7;YDGuuuphLI3&C)yeAwMjtd_P=Y`LN&xPNGKZI){Cn6DxMC3)2Xci^W zTl5i|h)u<2Vwe~%wiV;Vc4B+6gV;$-6qCesv5(kS94rnIGeo;ML7XTSiN#`x=nzZA zNupD9iDhEBI9Z$`P8H{hcZl=EJH>m%hsEXMBjO5irMOC5E3Olt6t{?5#plH5#h1lB z;$HDJ@eT1k@vwMAd|&)nJR_bHzY{NuSHxe%Kg4Sik$6dvM9D+)lzb##siD+JY9<9p zF;cA5R*I9_N$sT$Qb#FX>MZq>`bz_(fzlvpurx%45Zx zbVzzvIw5@|os>S7&PYEkDq zMs6p^%L#HPxwG6|PL@;Tbh(c_SRN`5lSj#83*nk`p{hwWs}@yIMO9K| zRZ%_GbKzVB*Me)wMRKjU)?6DdO7&E|DBer)s}vul_#2A9rT9CFzgHunbjeOz?!;1u zy`;>Qlvie-40cR@jNH&>Tm)g zUIsWr?Irn+DK035{*>f&=9UydZY5=@wsGYJ=_TVG5InRZJna!Fh=m!kTqdFm8(CIcpZSe_%_7Omae z4RSh|4VY10%8D9YH;1}ma;%;8m_YWv_IhCl*$Q%9<*osak~DjfEn^yhQk>x^cjnnr zAiErEi(5tR=O{3$m1B*%RY-R>H7Oei^x+0@(QCNATtBYA+CXijHd(_BVS&^ab1Cd&oXjj=gO zVvNGMV)AX1V{%;O1-Z@`t)6wCdQQz{j1fJRL0k&h9_B`Jqqx!Bm=U@tmE;!NhUt$s zSJr?GAYvta&KWi!W1wb@*DhtAR-(o^)~wr==;lSKDP_H~)y}F=%c^OPHTAD&Ra0w& zCKEXaqe&50%$2ACYM>glhAZVJaZWW@ZKFmpZfv6w+u%dDRJ!@!K)s(MPZK^6oYpr8 zo>S)?lOa7BgOlneKFDdCYlgX=;et`Y1P(o5jrrrkTU3 z9OdQ?cWDJz0i@pG&VZvvLis7ts9bF97tGWwU7<&G<| zrP@K0IZAS!)7EfHxTRdqr~w%@@AN3kxQBDB0d-Qno^ETn<=i7&&h3Ih&Z*g%*GJZK zS;?&ek!AXFS|zuV%Q3Kcj9bk`KmIu5q?^^u2)c%QlBvil?g?%!w@!^wW7W25Tot#T zdy3n@ZB*N-Noum%hb7grPIYuNqg|RZ>j&CC+68^>vdMPalpFJ}!D5-Y&H|fTYik^K zH=FO^ zc2#mOaXZzHYBx2}NZ@7e70!PRw};!y?Nj5`1hvx|?p0`bUspRrW7|dTIvSEo&xf|i zKHhF~j$*%D*>;y5m?g(*g`X^&{<#Gu_Of!O^+RekdHm%r4o%u~LYX+K#So*yUvl3t>As8mT8&V9RdU~Q zm(<>Bx*D0Sm-~j*7+x*tMlx5ppLD@6Ui`{kW9)yG`;GgZ`$O%g_E!g}1FH~+5WkdI)*7D=SG$HLE^Mi>`3)IB<6{&He2m(vqiXRn zYL7agj=;w`>KJu2C|W^qLoJMzml+bzveUXrgF z4bcNKGRmCxl7b%4mnkWTngTr*_!X6JcY@*Ta8B!XQ#-G^kP$3qd2WHNo2EgcYpli$wIa7Jq1dg0o}MYoN1()p>mWx4fi&!{}8+?0|j)5eb*Uq0EEH?_E+e4=w)UU|74LMNBoi}GW@hRH97 zQE5mBdPGt7QU-|20K{FqLap5YV`ck$@JR>maTeS1?a-ffMVCPTHs3b29@5d{G%#<7 zVNGCnD4paEm>6){^C8i~;@r~zYb#SNv{8;JB~fLX2^OXE%l|Vq%PlI3Dshz5lG6Xr z>UnE%jj@;H6@el6e=Rq;wVAH)T`^M=I_7k2|NlsB+`1H+jc(UzS=OAmzv_(DO|N(q zv|mNGD7(YOLPXVQSQ)VlbR;i=#CkE@f>St{f~K0M^TYBx)<#j zKi*}7QMiy>hAOg`KzF5Cy)ewINOKhBgUO)VSozGxvZ+OCYyEd2H@ynk(FC}P)MB*+ zE{EFM`o2}R`i3UzJrmA)*r;4qH;7@b*W{QXeyefmaCK1u36(D7uOhLIH8}d zq@b)&&tf(={c*Lm_X95&iOfawm|1j(I<*4bsZOtJ7A@4wqG>tSIKwI`aumRDR$P2q z&!mL7l&IwRl%7%T<5H8OlGBpgMa8G4#K(7vZ`ZD4`}Rf#_n`Y&2KTBnD$rCYA5ft2 zO}nW^q^0OZE_$;y3_XOFp@-3O^axskR-#qtQS=yEjUGo8s1mI~Rp<${7Og{1qV?!0 zv;l2IPoqs}GkOL+i?*Px=sEN}+J;_0+tpd>9F?kfsCTLh)VtM1>OJax>I3S7>O<Lcn(^-*=TTA{8{pHSDS>(veF)9PmRS#_)Wy!wLrqWY4$OMO}0tG>dDv;)0_cA{Nq zH+mWEL3`0Y^a^?vy@p;#`_TdP20Dn|L~o(D(L3l6dKbNi4x=OJC_09YqxaDV=tFb@ zeS}V;kJZ=I!|G@1PZXIbYC=&AMO`QwK+$lDY!taDnnTgu6s@9YEk(~#w40)LDLO&X zd5U0gnxoj4;sA-9m!h9)6rG)8?ZXVqTa8Rs zH-0s3e2mMPr~OKD!Eh$n4$)e3Uu*CWeXgai=2(Z_F8$k%eD=@H8<@c?-&7FK0x(hP z=k}GB+uR&$#=o80tuy*g%V=JXb>Lsms2aUNxlVwuer>L3nauwywb6AASmtcJym}n@ zW*J@8GP*0rI`&_#P5q2qWiUBXtmmvf4t3gZ#2Od|K4DONVUBgcznp7LwG0l-Dzg{4 z>OqK2S{{pYtlj_RJO<_FO@wY){WK*l&3kjK+5d8y)#Y}NnZ~doE!JscP09^e0DEb9 z-Tx<8pgQSVG-u$jK9=@s5IppEk>4 zqgDR}S`E><*!8Oxr{(xqj&;OerS%9WkJppwn<#ahq-9g}C$hPD%UdncH|LTxEt|FfRs&z3W;d%; zUoE#MbF5?jWe%y|QvFFT8KmX;)L)T<+vIt(T4rfEZu}E`c>@kHnwIKM#*5pvH6yfK zH|1D+-45I8q-%6yHK*L9A1Cea^3T9cH3@lr!Cgf-}j$mhnr{h zfR@#(Io8pCfjkC#S98Ac;s)JBZ9N)ZiXVZ2A^Z?th9Abu)z{Vi>H+nQD!c-(#H;Y5 z>Ou7#^)2<#|J1+`u7ZIf{Dk_ZdteAZ2?Ik=+NanBrF~nwT3b1*cj(KPw3$54J#vD# z;ODhLA^aQ+3cU-1Lihz3ba_whdfjl4H|}jj*@<6=g>!fp-i=?zd+=Vo55Iz6#jmMH z)T8P#^|<=J`hohPdP4nZJ>HKGXn$|wx1cZw@FDf2dP@8IL_H0~I;EbwEtK^~#$1Jt zDgEswc9<-<;ous4W-Gr^*t`Pt(Q>Rox)Ne9jWIk3lU_1eUq1lL9sb-vUj1~+90dhM zw)~Vrwweyo`D;UctU^iUWrYqWBvHS<*N+6^j~KyEsvjE!|3oMFD!_OZpsN417D9De zbJf(ofWHK4Ld?y04^;M)Z=|Z}aZtBnKFY2%A)hg11B$6bOto}w3 zM-gm+!M7#%pOe|YCXv^R97$(D_ECQ~fb0)Ik^y8OyVO6_YueS?>SgU5ni!_boi)O! z^e{3~2Wf-~1GR*qG+HgE2o^J6CpzBNZAPSVqzI&kflQ>xOp%2m zfg+J2i6WUIg(44%JlB(AU5v;i;v_B*Bgn){mm`XNDe|MJp?Zpueyeab0?=T6IV>O2+#@1$x~zl*+@}SikeXrKv5t? zK@WNFLbj6UfOED{6lQQvONt^XYQs23TRMBoIkA5@r=IfI$2jK| zioy-fd7W|2esX|a6h%juge~cfc518@g-EBc9hV;t9j36JW%f8MK}2 zL(4ZeBFTIM5HMchJ$O&vi?{OLybtfogLdsoQ8$XZQ`Cc^M2eCqN~S1&1(21*GR&Q`( zy92PiQQz^rT}P;pAvBaBG?BqNtRAe^X-1qmYGPu4J+ zM$s4@BW5A&-SOw0L4_!az0ipEn^Kv5w@_A35S{xN#d;G*nYxq<6qP<+s-hX#4vk_ zVdkulnP0Vn-^0JgFx$)T<6q%lr3knSqD-b}N)`XQ##(PsSZSg)Y1%He{~gwPmm&5Z zg>^dmiXZ+cL+luToLv-6r)Y+L2gF2cPlHQ7=1=P|eZpXx#bElB!8E%*O#Ev`q|f=U z7)%%Vi~JY-mlUZK0aJsudq)-jwFc8AistDs&HvwGte+T6KT}wbVGrQTm&PfLxgdmXa?~ZiYg6=a{*%V3qPM-nk@}28`#ykHIh|mny3Rb zfdN#-B&(Q7))Vy*_9jMCXmXmSFo;~HGE=z;6!SWYpqW@t(Nk5XsTxF}<~HaMZTjDW zXfA{34vID!5Y1;?xPZ9WMG-V>4fQ+lpFz2!IRzRje!`zEd3-^l>e+WlSi0TXhKNPA2NnZDj@ z+Gl#j^s4DK)9a@FrUNEu>|ds64@G+^+D8#|%E2ahjiT2n+P~iPX0^V4SJT%=C^}H1 zuiw=5^*gsk_aA*-PhZ0nMTO}!MQ<29aF!{P1*Y@t(nih>>UZFQFoT9)n!W)^!52+m zvmV-8jPRG3q`X~^@YZLIIG0U7>(ccTldeOzh-1X~!%UcHT{ClLWX2SM#dVk>ApOxQ zGtcyo*+S7VUH`m)TiXAfD%$J`sG7YfI_^f*?88uXfr^GpQ$C=gK?T*QXmew8GYube zQ-;q6fR8zlVftY`OudyAZivjG=9U1FIm{exjxe{N=p%|wQuHxJr>e}68br_(f1*S5 z>Hii)?HEMuDLQRH6b}&Lr_7z$rM^wk8U5DUDjBuyVNTW|N@5V5We}w@h|blA2ro7w zrJLath$?d*b6;~mbAO6Hqv&&rE>Lu_$~;hmXb44L=n#GNzXj271`%|*zce6%mcI&k zXg|BO{%eGOuWsng`Q`#0qVWu(uNg#k2GKY5AyT#*5S5sxf=V_!%%$c@W~bR@E;E;# zC!42G1bvI|DEgkFA1L~fqRSLrq39=yeqL{$W~gNIY^IXUl%ij1RPt3_CI4|-K>tz6 z*Q;dnJ&f$oVfob{`vXiev`OUJ)5r$(mYY`s$?-+=3Z{&IV zI-gWAKDl;_NJfkeW;jV;y?LYgY4axYX7e-VXU$v8Tg}f=j3~ww6N-6?O%$6cwooik zEUq_i)0u>9F~7tg2PWA~v7|EzMJ*}zgq|{tu43vcV?r0GpT( zkp<>M=ED>#tl5S;_JEdqq*XEK_`dms&MqGUyI?Oy`IEpd*jk@mlubsYGv;$TyPO4f z!9KT$WW@Nw{4Gzzi<{h*{C{iX{VN0Z zD#eWrVE?$4{8>yELBqykVc0YUY%CH3v{^kst@GUISiCHLfR4p#@wWI_VE<1b#X%GY zQyfxdX@K9vt1OKuZmxa;y=5HsKZTA3Rw`6jproO0bS$B)QHp_aRk*Z)XE1Gg)i!M` ztt?SGLTwmA;S8Y|hEPO3guKbG21M;GupnW*rGurTCEk)?>163_>0;?>=|(Xqj!24I zQQVs1HWWuu98GZy#j)!xJ&Z=llFAw-OD~GsRyRtxoz^Jfj<*H$pGN8WM#+-F$PQc6 z;taA6y`@l$vE*u6#xj;^nf8q2d5q*8>XF>~oe?4j$XE1AUGQvL5#G8VRI!7`WP?gpN0(E>l;vVdL8 zs>3i-$?l-NjaJ)ok42xHu&~JqoWu}flM^_(9;)7?tpU=*mI@|F%Po&sR#;YAR#_gk zJZ4#Kd7R=@ihEL=MlpyuLi!tc=Zr)dEnV*caF26Q)6o?5{Jj5557} zjd2#so0fNUrTaGHm5f_NG8pBktjcmilctX;9$ggPw@x?)C&MAS-|J8OB=t)((g5(erx$&$LBkS&nSk^j||k&^+2`GF%bGi zfDwuHmR~JbEx%cQxBOwbCU620!1~Rhcr3*ruj44rqd1>p8^z-(E?6({hA0Ul6D0vm zvceisny8CX$!+ocN0hD?C7}^eU1&_P-A#3&8BiS+34!cV9TZQ{Z>_D!O+g_{XrYOc z5Wz&L2&gVZGO8EXqq;X6wjo17R9rxgmFTikS~A)&7t@Xisw;$ z=l>Q+MGT~3id6%oQUFPq1ax)5EElHCZl4R1-P+pQS{j<@@18NwGAchqn5`o=iy=0j zA*M3K7Su<~YD_f!+K%9ut2y=xLa5#ED{zA_Xzh=d^g1lDPBbJVv6sf7~b4R z@%l0oIHX`j1cIn)*lX1%Dx2!r(~#c;lfHrp$_&y@NE zvVdJ|63s`y8LI|_Q^FY?ozo1RN`}r^2I-pmkoqk#0JGi@7x-5}N!p|V*2ZXB>Z_;InE#k({GMNWy zdhWJ>{v%D-OOt2;vWo)6o84p=Wgxq#kOl0b_!(xtX?KvOxo#?ozM{V-O=1HkOD*otDX-nUcyBE>tZ#5PQt zL>PT|NtdSGwR3v7i*~C2B3NxwM`a#>iDEGd|qbw z^kSgysShf$8lzXAut!l~c`;IKh`YkiKj!S%cSwBr(t1Tw`j zod0?;OUxFBio?X=;s|l1I7%E%@oN;nPBADkP^xcGe30TdDTZRdy#yO+LVKPq z-8B@BfGo1PV7HgGI(&An)1J$YvG=PT);NJ04ztu>Yff^?-~h>TC+uuwvCN$+aXJP&apPnpInx&6*j5} z&cH5$^An3p%i*Aw&f3pHhpQ}GKbdRL7{E8#;g|^Lv9;~c#yH4HoF>kK6S&3c;tUb& ztz#4)r}+If;%sq_s8S5wzON}h!0g6vh{1L?`*PxN&Qt=@b4orgX=_yw7h6!w+^l6k)2yqZp-6>!!Z{OTy#Cp8|?n52!k^9szSDiYk&%DYUH#= zg~7pD+8LNewDltFAgLEk+$3%mpP~3H#pftKuSSL@T6K$aNM|U-tp#tJxZ_4iz9jAx zcTxN~#TO{P2ub#E?@)Eu?Xb9y^AcYXUuEa!!?~)t1HJuo#u*-`5GK6IZ29Y+rUWt5 z>2Q>Rn<;CstoZr`1_ifj9n-0Em#*R6lG6M1?bknJ=!l$gMXs``Gu)mlJUqRu-ac?_ zzMByGnfh=(c~Tji_BsxP#04HJf>bg*qdYIqX3MwbA8Fw4*|15#4g6eGHfpT$s;RPR zGw?dmL~W2gAR`S9{DF`ujv|NiSV;5GFwgLa7A+&;ONM>A4e}kIR+L-dVh5tzTzO7= zDKHIuWGXN;F+!(@_X;a`u&}6&M@DC)4akT}E&>)i?AazN8VP_j%GKPx@U1)FQDBWtI(vk$D4wcZ9B5z=hA zOlM`-%D|;XfvZ*!tDd4(NG;LB{+`_vD|&!434d0c=OaCdbzg8#Dwyj~oR;dOh%KMvobCgV*p%=Ykp%K?-AY-MmpbcF3{3 zeA{@>f0g>Zrvl%1(fII$Kqr1k^YCxiJ%fkpzpmAlFu#Trj(FOy@rl-S_5 zR-!gl1CJJ$I6O-y^>tdJAJ3wfo^GL943#>>ztWu@%7H$3}I%p8&e&!ad_P~36h zH5b&&Rsx3w=LPqIQ~iT`8+@2Zk=PxGPvj@O)BFEw8rDe%O;JFVxk1L;;l?2ai;CbVCXId6K zcZcT>3d?)5=k^>&{HGUY4u$7Hc6n_7mJMQQ!f#V*Nznk7Zz4P|v$?eT!f(^@vcgP8vp9}3H!pK$ zvbaz-GaSs7mJZKp@I1B9*_*wG`kHr_7HND2n3#WamJeZdhdNr)Y$aI?L&g_suCr$^ zcm}L2JGpF>3r+zY+&H-BaV6XtE|_zHlfcQ^QvsI?&O&nGT^xju19yTp2xH@%5W>Yx zg!cvTe7^cS`^{poIHmB#!HtKIMG((;8>~4Y)Z?)<9B{E;EZqxQx_R#Wq9MPOz$dtJ z_+H3;1>XzdsXupGdovZvR}8;X;B7g4D}d+Pxx@h<#eu&WR#v?X>^sZlqB|D{#K_n3 z(&MpO=0gaUrX9jfhi|NGTFv=}uyLv#TwP$tQa3&p-uHrZa=B?-l=i->_Rh$)rsk|} z7prrf1Z8D8Fw|J>*;5TNI>vheuQGUB1T`#i18k@LXq(J@3$cm)!Nf5!LGF9#w~K18ehz#wq#r_yY1W9X7oS?(dFr!SL@n zaE*5Xo|sd-lco==%QFbdZ}0=dUdNySaL|9%a8{o7hS8!3{uo{Am$QaudO9pjtrQT^ z@?|`mq@}{X7Q@9TYtxX|=~oWVWk8kjTI?v`n3_^v&ry)t{+T-)alywI?|Fj@-e`UC zKy~eckMY|_9Z~kr9A9#OlhV>LYiC}ymDYS^bg(TLaAg2Dw@vIbv0uej#cquKA@)>F zh}idIzm7c?TLE9bBoC73!962$)c6(`48L}Olg1adr;XsaaVL4UI$m84*DI|9CsiVn)XQ*dePm5luDiaq<%{u9Fju>lOrzOrOBM0}$<%Ywb;9+Wqse0($;yJ9?A#P6hZAsR z(q00(B)Co(riqyr0**u@H5%SP68J#AEx6l^g$1#`d&D`1C!rar`LQ7k#ojDcUSf+8o;Mx-2gOkfX@Z5=o zDzi-m+k@j$9HrBo_JYE)U^r>0$QGPlk{8`3I4-s=v~J91VqrM$hryaHg#6#iD|b%T z-|_4p6DNT^06Pv&lkm-&#pFfezSDj*!#jE7)mbhK<$1;B>VMxLVEP^I(tYY<@9p ze|!?Q1HKAwQqS<0_&;D}m!@mMf$3|Yq0gJHn9XK?piex| zZMb=Yc?P%_eH0cK?lHe-K5M>gu~-^gT3fn-E6`k6;4vRoFl@BE4DLM7gY!;V2omDJ zE$0ZK1YB<}6P^-wgG0^Fg{z_!TxE6^2f~=pG#D$W5_gD)#Pi}+$y;h6b(1os3E*^c zIXIPk4V*{*01hIXgEPp%vRzie$>THf0r`yli{b-L8dJa_V>!56T&L_&K2(12@bHN6 zNc0%tQRZ>4$9j)fJWhH1?CI+n?V0YG?>WbFrRO%!!=B%GiC*DeNnT^Trh6^(+Uj-4 z>nqp-7-3DZ=2~Z4S6W|$W56$a`+B$a9_U@{z1aIH?>D?J_*i@*e0uui`^@uMYL)5=X-~5mG5i5=l#rnE&S5`CipG#d)n_Eze^2#8nkba-C$~il?`?^IPFjT zBmC3-i~R5N-{ODV|JQ~A4U-z$8s6P-Q^Ugze`?gUQDP%oqlJw&H#*kn*T%t(dp4ff z_<_bRH2$~=-=tNO!A+(#d92B6O}=XC*R)I1yrv7AZfSa=8E)39*^p*4nyqQ}RxtRzzKm%19t~r4Dt=?9%K(%8uW6|7r_mJlY)zamj}NZd?}<^ zNbivHkcyCZLasJ%(LAg9+~%8`e;g`>CWMX;T^hPC^io(*SpTq@VH?6ugp1(`;f3K3 zhwl&nDWXNh(1-;QFGO5u(Wpgwi|H*kv^d$)qh*hllUi1`JQ`_^Oo*Hq`Do<3t#GRj ztqNPMY;~wLZr!o9z4fE5-)m!P)2U5Ko60utM=4QBQIn%KM4gHDkM0*eH~NL>Z(_n? zM#MZ2vp?pK*bcEp(7Jup)~9WswsYI=X#0I!tGK+lm2pSgd9+JwH>ch9cHgyc-QL#z zvGyNy@a@pQ!-5X`I{e--zN53_rj8fm!{W!ruZn*^!7pJ@!s3JjolKpQJI(2|v(qn~ zJ9aMXyruKEU81^7?DABX3td}uwRNrPdbV5hZn@nmx}EMG+}YdU{yQuvx?29NuKOefahfmJ!(_){eM5 zvggQ$MxGzlVbuIl$49pqJ$3XOW15U98nY|MDsZs+p<|yK`&;h7+{)a`@d6dDRiLJdFs5gclNq- z!+g*A&iU^z=(1q-UHo14yWY9G-QADe{l~)mg$EbKE?Tzex5asj58l)Ep5^ykyLbG( z@7&k%zQ^u2-(Pb7@dtW5@Z=KjCDWIjeX#$7+m;3|UAXkehjJczV_ExUs~?sgE`Rv+ z@_x&=KN9xH{g3>%qHx8rmB}kNuWGjH?o~fMn*ZqG#}Xggv^rq*qSe1XZh!oPie44l zDkCbFtue2eyymm2?5h1wBs{TxZIiW&*8aY(WZmf}hdlY}`uO$hpKA8heH-wG@(mX^ zj@tO{)2UBy-xRf}Vzd9|MbB{0lt1&uvtyq2<*7vmoucy8K%KoJNFCXZ3VCNg1-+1w0!oe5b?D*!kw>rG_ z{M#Mge*T?~?`%61e`x!=o!;H?Uf1__AMSB@?~&9auOCf6`sT3#$KE@hb^L?(N4)dbW=Y8h!*|N`rK3{(!?!wNCX&2x9V&oU+zbyUo>R0o>_WpX+H!Z(;?%Tv~-?}vH z()sV4-(CBD@ehrESodT5ANO4zbotbk;wx8wTKIG0pP&3C;g|it4*m7>t5bfn{I>k} z$lrJT(f5y&*NU%QgR!3S$#q6>DyIyo^BY1;n{EsdR!(E%OEYI_!#vf4YWe!$WaVra zV1nVF>)*qOjW@?U;6`eeMLM`H9n57wPk1JG2e+7ekb9h~1S?`K_YBw&FLMXEx4A>y zd*Bf7IQIc}0{TT4xgWuX;E^{tEDHe_ViBk%YK1zYE@&7y(HNzcmTMi&j%Z#6x`4= z=kxc&fs7l#)%hN62)I=E&;{Y#r>nJJ^C@f zQfuJV0WJqd;@B@^wEUp>Hh3Td8$h2eI9Ul(1&7!~0qpb1ZXeyQeFv8n{IPn%K=x5? zR|V&zlA6he55yDT@PfUo5MiF-k{YRpJXIZ1|NSYq>v1(ve?HGme+pHKpNkj7i{cmJ zm*Q9A*Wx$gx9Y|9NXfBd&jW_BN^ zsZFrm(jx*#wPQTt0G*l={H~Yar@!G8Q3>mL{qkQrhxH~t3?z%5?bSbV8vCC({*}$~ z+~k~DNzrrq{XbK|KYLiY0MgHr@duvA&NP$uW z7rjmjl7giWsksy?g-PL*m?$w*VxdH!M5IKbL|!Mgzz3vA2+^9&O;e)4Y&7xEzI(E% zX*F^TOe5-kywjN1J$<@Tf03CxE;-jZG}myTI@DfPm;sYAMK<^XPH0(7!@as5BWFOy z5b&4ia5Cq-ns+0n0O4d+W3JLx9RZT4@mT?`HEJhT_gnj(JrmO6+Qmo3#>IhOpxD^< zQJoSxr9>rkNRIE2n$R&NH7*|9|5Vo_6MQ|5%XQZB`^qMQYgeh(r-n0TB*eA}?hrex zP4JAiaqKxhK7Q6LZ9-8>5MLeW&2PVcA~9lE7@Qf)4(1;omg~$b1b>3g%&;;?>98=j zV|pJB%?FnNUIQ}v+NOcSb$6gotX_gB$%;NX=8UUumF{B4o9i<~cBiWhBEg&w zcv1v+;wj9PG@Ay5&(*2+%bn&ZFLS}?jIwD(w*I-UiP}V!o@X`D(o^+pdpS$Be4qsB z`BP!aOAj}oym*|=sUm2&%z~(55yXO5Emkkpq&Bp2-gj1Rwl;!E%2usmim_9V#H3zq z<}@>F*r?HCa`kyrIM_BJHaH<6n9(9QzFnu_Somw(zCFB*j}Oj<5_fLbengE|3ou-2 zvyNVnK`_k>Zw-gVHH>y71_oC;BmiR36K&I6P@8Bs#j^DY+RAqAVM!SJHb;@rw%De9pl<}Od9ECyoA`;S%;HTQhVNL))7Fiok?YCTJ^jmD`W5U z?%M1t%M-+%53S}OJ=@Cc zG*+VFBZjakT$bj|gtTs|T77^?KzNf=a>jx!T;mG7GAC_J?9}-2xw+#KI_1UL;$!RC zwiCFioC=1*gENrB;GEr-q!n1LBS;P@fwNktlIdh7jDIaB&%kK-KJuDwkXBo$ zqWlfmIREQrzz zyh!CScXj5Zw!j8+{B9TPBWh9@ zQKV`8OwekuoGe>!(e%$5<>QLA#bCjPS3UiGHAS>jzz2ahD8>wo`1ppT=1Z|J9aO=swqVd*a_eY*_jUnW(gT3W?8|aF&z--sDiIHIDoxWub)vG zt?kXPn*%glP$qXVwA6HNYhXljGnJMk6sP4avA080>MjFldN;29Y~#x^9YfgAy}@dC zON*d`CM~2SvO-!+Nh?Oyn>e?Z?g#JQ(gV^GN?KFWwz`)mJtRE>PPV0G(!rII%+*(X{!WYO+q2`jip*gkMUcj^gMHT|7U_8kzSCt zb6!Goyh(ZyAO-7&oj}icPxnCyd{gV4w&IPF1ie5nNjt%&sg6)7?c#E3zc7$^S=v*_ zvA6V!1m^)(NUu`Tr9yh0lCF%L;X00PCb$`g8)+Vt-eO6-NlCW~>1|57tC5+^EHl2p zCmmzxAC`_tM=9w+Ng^dlYoz0#LqOLiGaZq`(2uN>tH!k%plM4Aw8!c;PSb~O9(R|} zkX>je>!i`k<|ww6Ij3pE1kx#3lq-EgNlNt=8tGH%3)WhkmCi}$rO%|#r3=zUN>VB5 zNl6+dy(sBTNjfEc)=6JVUrAp}-$>s|m!$6~=}SpJO0p;!Ny#WmMpH6IjU2`Lq^u{v zR#}bIi{cjOM!IRt`U}@fvA5oUz?bwgTd{7jHa1MU8+>bOe5-bwRkNULr133lNI%dI zrRC$m^SSQ)C(7k0cjnm)s{AG+&c90fUHU`1Cc}V8e@X^WGLVu%RWfF)t7YhC4c1my zlMF_lTkbghJ6BiB3J_9;&fO6A>T1~vtE+E(5Tv`daznX^wz^tw46Cb2CakXJZ*mCa zF*#Tc;k;maDpU?bQ{@OQTW$%WX8>!gKps;AIulVXL@{uE&1=?IV-h@Yyb-tN8zpS3 z78#)e^4Y#~uIc|B;by}`=PbFk+=k1hWEdsGRqn6!wX4^^Y94u9w{kM6=?^(pZVT*^ znw@DB)u?8r9LE&cjXvoy+shsFE^-}Cy&1Px${ks9tV{i;!o$MGDa<2gOSTY=;oLbN z#H+KN;o2EAmA_WgdY&_LtWm?*UWaJNr?0&%S{Fs5Zqb9lBdV+1RpSQbNX2;7$e)!LZA#RS_pN6 zY-;sWjR52H02A~8fL%3D)*dD`LKm=FP*S878f5AEz$duba*)#U*-Q9ZVWq3G*FY_oa7UAuKb`gN6J< zn8zAuXCZI4q@OLH?^yyY1X19X9=9KOg{e-?$ffqn>yvZjsbJoesGP4`z_00~m@306 z_=X^DnXo{@;7UW{*2vT48H^4$3vgp;G&J2Tc`odlk!QcbyZ~O;%KE6h8VnWgIkkO-{5U1xu3Hzf zHDIO6Rq_**%%Eg;wUsJADQ~=i*(g8Fh0B{MnaQlwS!&m6{6Z7wsI|>b`8j#}jpDxu z@n5234vVkC7MW^HA%W653G9*gL4oDHl+3Nr&Y)tZHVpE(97Q&e5MWzI6ulDrVS+@4 zk;G!Gzq8NqY(&wBPBvg}V#vJfU^y0Zfkkc|-webjY*R(|IzPrt>>%)83`O5McX_P=SshS$UZeV;db;u0E z2Ps)hNfpz<4^y(HcKh(1{5@+Q*mwhUitf?d2lXu-LpZs4jr_Cxi~K7k_fm2nCHL3p z`ML_%(3^F&toyBE(zWRWH`AtWI|GL@JA-0I#t|L`v1fn4d8@VU&ZOeD zR^&e$G?~$o<|ty#j>Z#86xbh1G$oI@ZC#};SOhmZ*x8_8g3?9XoT+q%&6(u!KXE9t zlBDQP92DlnfmGfq%D-w@Y3-fTSAoumA2crY^gyN3pEY$i{HDhpsJI8Y>%`TRQKd4N zMP{v5{f`D78Ol)DXr*K-Sqc~!>nM4WlJ#qpVajj?Y_q2**+GeRKyW~{fyOLGUEP4* zi%xgB%GnT{x6#Y2{se8(P2yBraYiY|D&W0pgOaO^Q}UF2#ioo`3Y0>{u1ruSQnG=P zjg&l1$tFsmWqF1Y7;4x;$yQ39qvZJwAW&4R)(piF!E)~XN^_Sz;P2G zONM9d&@2J>J9m;p%1g@ZZ1RRpctI(l3Anx*`jkj@j=h|Y@={2|uV!REF1~G>;Eo;I z!B9C{Z=k@AM`P81a<{S&jDQz)E?cbJ0~>u{GghUtnDNw~ChYynau`8S9#EDj4=PKQ zhm>UssK=d@?4o2hB`;I5hZ1PO_pMVN0ivzcNcWhsnvz!-onF<+19msJiqKPS&|fomK+7U-Q_65CEqk1M{2JP$f@eL#^PSu^L;$3ay_D z8x%8GU(bLIXIBe>L0qi>`Uqon8hY@0^hk)CHOml;rxdWUDin}_*D4f{fY*(2INc^p z(&}UcepcBE_K*USvA;qA$vD8cyk1|y2)$j|%|$;Uk5hIiFDW|}AP7jw8o-c?ugUA02kg{({PF6r9>l{0$$0RTd|2UOrsM>pN=P{{*dV8EybTP% z{1mXk3c!Y}F`80cnnZd?nnb$m0c(9>-<)otdsrzs>9){4e7Rj~Jp4Qwc=%KDF(s!d zIa_V!dNlS3xPh7N5y*vm1XFT~X~<6)SJj)V2~C`&ncIf#;}Pxw4j=0cOMA3}l-f{o zhNbkWzQbN`Z}c(Z`|4Qz9&J53+$fQb_<%aUJ~9B-i4*uM}_0U z2f_*AB%IK3TKGY@Ec_(=D*P^TA`#7^C@P{SEYwbhh1%oAN5l={0r7-*S-c_ugw#q(oW4WmuAP31Iayn1`}@hbPK@;c)68!Ql4te#eHtFN_zHPRYqjkk8PcCmJ|_OTAOW>~YV zL#<=1W3A(?`PT8)GAp$%wQjfWwH~w{vYxb_wVt*c`)%*T-bcNUdw=BpvG*t5XS^?X{|-yg z{d^ku`1>^S3HOQiiS>!|Y46j~r-x6HPYNte@8y&3QwEFE5Bps86?|o14_~XVkFTF^ zOW(G>9eopgJNtI^P4^w-JH$8BH`{l#Z;o#+EMK?zx_njN2Yp}gebx6(-?x1a`M&4- zf$s_5lfI{XPy1f<{lm}VC;2IUo_;}oA%3BL;jqlT#BYkBCz_pX_DeueKuW;4fQbPmu!P+iFe6}I!2E!_0u}}=4!Aeq{(vO`O9LJa zSRJr2;Mst!0nZ2Q2-q30J77=1>jB3CP6d1ta3Brq#*XyAyzQGsIurw1+wJREp5@Oa<{fhPh_2A&E$9r$VBxxmi?F9d!O_*LLH zftLcm5BxFkO5o3dzXtvm_(u>IgoF4XbC3`u1t~$ELDnFjAip60phiJWf^0zru&jP! zP;pRckSl0%(6peLL34uU2HhESSJ0xMdxIW;CHD^ptq6KF=<%R6L2HB72W<@69JD3q z`JnAVF9q!m+8gw0(EgxmJq@mh}$|8yxmb*sidb!}f-~ z65b@dMR;U*>+q;>8h&s1{ozZ(mxg~4{!{ob;a9_dj~EqUkC+%y9N~y~E8@e5k0L&f z_@qU0i-9c$x5#Lb)na{%Z7sI9*wJEVOKZ!3mO(8;T86fq-EvXOds^Pt@`0A$x4agK zB1xnvGCy)sq${#Ka!TZh$j>7$Mt&Ljb*uPRsjbpl^={P%wh27h>Zw*6TWxCfM{BvY zM{BRv-mRUj|4$S5`PTH=HgMd%5uuJ+SDi(H>=3f|Ad8TMOp=gEg4R*0#Z?Te+61y7 zBq3z}g0oU_Q8$8%TCH_Y+zUq)cO4JMald)4H`o7gp6BOVmTpb2NUuu2n0`0?e)_}o z#~GB2+>E>oQAU17YsSHh_Kc2Ce2M*_-(~^KIsP zP##DPDg^0322dyH4Co5z8t4Y-Cg?V(2lN#59P|Rz3wjMs1!sc`z$?L(;9tP&z&3Cl zxCtBvN5OG$0=yo)5xg0^1KbWi3O)|*0-pw-0iOk*2j2xh0Kb9^g$##`gd{Aj$)C=`N{m>Y+1-b*e3)%+V4?PHNhju_uLvKKDL7zc;p|7EDp&y~2Vf|nO zU@5Svu)fRy3<*QQ&@e0v4mHX$R(7!p7>BR3+qAX|{zkUNmOkY|xEv&Ls-XQ{K+WC2+nS+}!#vYutV z$m-4dh#HIg%g&K#Nfch4diGraJeaCA!6ahs>QBguvK1zx*pe(5QsD-E! z)KXL_Y6WT?%8S~F+Jb69wW4;S+E9B@2T<*(PSi!z71TA<4b)B49n^i)BUBIS8S3Bc zr0k47T=GM`bWG;}&T6P<-7_Hh$BnuX?|dFWhp9$JAeLN7osL@z-v zLzkjgqF1BsXb0Mb4x!`d1bPGdH*^cS6}?L#u_ahq^ka9eS|-@%`}w@k8*#@DuQ}@R@iB9*)n#qwy3x9nZw);JJ7{em>rX--$nmzmC6& zzk|Pre};dH|A7BQ=tmex7)%&S7)zK)m_(RLm`RvTNF&T6pb1z4i;zbU6Ql$MK}9eT zEQI-l?+J?uKM)**orKGTcf|h0LByfN;lxzpB;wRQyfcgV9dRx(otR0)5Q#)Gkw(lR za)^AQfT$trh>M7&#FfOKiB@7Iv4-d*dWc@4pV&xjBiLNkY<)w4{Zk64FvqDQPvSj8smlBzZ_)Qk=Af)Iw?{?Ig94+DVCRYC>2gc zQc-=72}dPR$y6$}kXlBKQ;$%4Xh}3EO+Z^jE2XWZ{Y+a!TSs%#>S+zM04+!h(IT|p zXsxszwB59Qw1c$6v`*St+BMpBS~u-B?K$lg?G5cc?K8bUeGq*JeH?uTJ)I7sL+J=Q zicX?a>2x}i&Zcwe7P^DJo&FE~D*Xoi7X1$W3H>$w9sNK0XGVX5N&7ISeEtn?Yyr8F>sbL&{Jv^b8Zj%qV7j&sfB;Gg=uJ7_S+hnf;lAm_wM!%&(b~ zm{Xb4nX{O4m}z|&3&X@QiA)-k!OUTDmh79C}(L- zW6u7ZTkL-9Y3ww1Ivd1>u+eM^o6csjIcz>#z!tJKYy;cGwy+nn7qd&)OWBp|YPN^% zV+Ytx>=+whuV-&$x3Q0~PqELi&#^DEudwg1@3SAWAG4pbpZ7sC7)Qcc%K4dNXVn0thKjC+E6fqRvEoqLmekNbf8nEQnL zANMnFByTKl0`D8%6yCSIxx5S>hzH@pc}Sj+SIP_W_VPM;$9P@5lf3i18@yY*ySxXy z$Gj)J_q@;ie*A&_Vf+#NBz`h~Dt|g3#3%D%`f9y`IY=?ew=@pe?NCvE+|)!`(q!aYt7x8dmy(xwmBDXj9P40iWp9K8`0|Y68v4ZJ>If67nx&R`836KJmfFTeGOahBwfnbr~2fwh)P7uL@PzBMQcRmBA3V`iikFfwuo9pt)iWx1EO|Ohv6???>VxPE492UpKfOxxjm$*ZGL3~+!P24TMExspy zDDDwI6TiqGls`0oc>c)zr2ORk)cmpe zk;o)kNwH*sWT9lS<;vCLJLiB~6y5NI_Duv{c$4jY#9tX6Xj$Ht8Pee(51;hxDlQ zxU@@pQF={!LwZYkU;0qmBYi6UDE%TEC7ULjA)75rlcmc*GN=q8L&-2Qo=hMU%EU5> zOeRyxR5FcBCo{;bvWToxc3(b94w4JyOXNBX z`FZ&z`E_}>{I>kAyjT84F;Fo~F+!1~NL7qgOi)Zzq$!XJf`Y7|DVPejLexhzWeSBt zrO+r=DPoGFihGJ@iWiDkiZ_Zc%3;cp%F)Ucg*%HNbN%9F~Tg5&~dfwW+G zK~urLf~y603mz0aE_hP#y5O^_pK73LuxglUgld#(qH3z@Th&ZenrfaZQw3HLRAd!j zB~s<9WGaJ&9ZjaK8-L^WB> zR*TdUwOn1G)~L1Wh3XRZQgx|%wYp4QuC7#j)LwO5y+z%kZdLD8x2fCJo$6!iF7;pP z)9NRhR85v9U!(40ss@covq)2_S*cmAS)(b}RBEa; zmcp9CmcsLeZ?%)O7_D5Z(;BsAZLzjQyGmQ8E!S3Q*J^*&+O>XdNE^|{wHvgXw7+Rv zvgG9o35Lwo2^UJ&C@Y;-|Jku z-*tcJ_UR7l+I3yJv%2%TOS&t%>$+~;6Wt44ukMZRKiwyNKm7oGihitqx*nlN=`nh| zp410&8TuSOSD&lb>5cj#y+uD?zfiwK|D%4Hez|_7-lyNKzpDRam}%&nF&Wkx)*F5| zY&YyOv>DnBU5395e;dvkE*LHut{5H|o*14PUKrjO-WmQgd@_zQCL1RkryFM)=NQwC znMQ~aW+WT=MyXL@R2d8VM(7KSi;PS9PE?l}OO5r$y~b|iXVXyA2vd?N+4Qw(x@nea zj%ltb-IQqpn{XzwiE3h)I3}J+U=o_NCWC2-=||H~rWK~urZQ8FDPd|g9Wfm@{b@R7 zI%7I#x@fv$x^B8@>NUMFy)%6?MM*^yie?mHi}*#xq7_AsqV+|G zicS{&Q}njzbI}*`X!9iV4D)PrnmOGJGb7E}W~>=+UTn6R0rPL>HuGNd0du>#(|pW) z!hFGe-F(x0$9&)X)coB1()`-|*7B`|Z&_inTIwuO%LdD4%T~)aOPgh{<$$H#(qTDb z`O|XA(rvkIxo3H3d2V@Wd2M-T`A|Htcu4Wo;`CxzF|s(j7+Xv!ruQLePBE`oQmiUA z6)#+KX3e=Z*Vpu{dAa7jb%=GOb+k3bI^O!Vb&_?8b(VFG6>NoB5!Ng#)ylB4tQ;%f zDzM6}1y;4S&}y+3TNhZDT7R|Ltq!Z(T5t7P8?7O0)CySFTQ^#FS=+38tozHqE}vcg zUHRPd^z!U-OgXNcSl&<$lsA`eDBoN$x?)nrl!|E;Gb&0esw#e|SXW`McwX_b;&Wxc z%7K-J$|aR0l}js2EB~&%UfErFtMYCYwMtN>snS&$tISpNs}@!*srs?1qN=)TZI!L6 zw#rrIsj9DPsA{e{UG<@QanF!4?5eOkDPCu z@0}l=Ut9xRgIvR1<6To+-@0bH=D0Fl5EsmabfH{&*GiYi6?BDNF&E(4<~ro+a2<7> zaGi9WcKzcz@4D-H;Ck$O>iXB!>w4pQ@A}U@%sti(c2nIN_iFb#ci6qfz0=+1-s?W# zZg+RN|8k#ppK+gaUvT$&CVKFm0*}#S_RRNu?^)(4^OSq4JZn8RPmL$w345X*z_Zb_ z*|XL2yXT!1k^Xf9|z;&=XY#pnPQ^&6p)V0*L)t#z4Tlc8$W&M=; z8TGvS`Sq3cJL=o(JL-?rAFn@Cf3E&w{pI=>-XY%M-cjCUZ>o2km+2LF<=z6X#;fxh zy+z(1y=C4i?^^G#-Wspl+vwfnJ?OpR?eRYIzVN>CerXuhklc{kFs>o90n>nQAU04M z@*93`sBhTRaG>E#!`+7Wz9e6=FV#2JH^n!{NAfX!THjB;N?(o7>GSx!KEE&KOZYbU zHv6{ve)s+1JL9|NyYK7uee`|t5AYB65A&z^zw(dsPw-FlPx7Pv6900)+aLDF{D6PG zf0KWUf2V(sf4~2b|FHkG|APOr|C+zsf8YPe-{XJg|JVOMFd&c|7$2Azm>ifEm=l;A zNDqJlkN_q?4G03FfFvLfCcE;ndB73y2K<3wARK58Yz%A(v;?*V_6Lp! zZUp`fybpW~d}-|8IHGZOV_IW+Be&7qXm1QP?rZ$J@mk}D#!tb1!GXac!QsJC!O_8# z;GE#xU`7xegar{ne2^Ao2H8PgFgI8b)C6@wWAKOI(qL(DWpHiK7OV+6gYn?+!Pel; z;O<~&@M7>v@OtoO@J{f4@KNwd@OkiM)8M9IO(U8{HH~f>)AUu-xTXnB-!x5bLO02p zRyBp1I-Bl?Mug^uSfRX-I3x|pL%PuX(8AE-P)TTM=%-L+XkEw_sttKU-jF}k7}^xt z9oiQ<5NZz{4V?&`44n#H4=07khcm;la86hlE)FjW{}QeXH-d4wiJklCD6L}PQ7abLy6U9XN(c)-X)Ef;)BhgrNb976zCE6A}5bcQGkM_m}#0JNP z#YV=-7N6EnxkVw+;8VmIT-@i}pLJS&clYvcZSFdmM_;)(c%`1bg&_#g3o@q_Wh@y__k_+Rl0@muj{ z@!t5G_`CQgpdT<07!0HWlYptfbYK?n9RLB~Ko)=oZ~y_I18g75%30h z4}1i^BnBh~CDIbm1T29_kQ1~7BaxHfCin?yLY>ei42hzIC9y2AITP^SI{8&C{BvH_vLG X(~SP#@@c?;|NTjQ$-w{rnkoMWs6Zd% diff --git a/FileSugarExample.xcodeproj/xcuserdata/andrejorgensen.xcuserdatad/xcschemes/xcschememanagement.plist b/FileSugarExample.xcodeproj/xcuserdata/andrejorgensen.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 1e24494..0000000 --- a/FileSugarExample.xcodeproj/xcuserdata/andrejorgensen.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,37 +0,0 @@ - - - - - SchemeUserState - - FileSugar-macOS.xcscheme_^#shared#^_ - - orderHint - 1 - - FileSugar.xcscheme_^#shared#^_ - - orderHint - 0 - - FileSugarExample.xcscheme_^#shared#^_ - - orderHint - 2 - - FileSugarExampleMacOS.xcscheme_^#shared#^_ - - orderHint - 3 - - - SuppressBuildableAutocreation - - 9DF43478229E9BD100996EE7 - - primary - - - - - diff --git a/FileSugarExample.xcodeproj/xcuserdata/eon.xcuserdatad/xcschemes/xcschememanagement.plist b/FileSugarExample.xcodeproj/xcuserdata/eon.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 22887ab..0000000 --- a/FileSugarExample.xcodeproj/xcuserdata/eon.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,37 +0,0 @@ - - - - - SchemeUserState - - FileSugarExampleMacOS.xcscheme_^#shared#^_ - - orderHint - 14 - - - SuppressBuildableAutocreation - - 9DF43478229E9BD100996EE7 - - primary - - - F1BED60E21B4182B00A0D3D4 - - primary - - - F1BED62821B418BE00A0D3D4 - - primary - - - F1BED64921B41A5D00A0D3D4 - - primary - - - - - diff --git a/FileSugarExampleMacOS/AppDelegate.swift b/FileSugarExampleMacOS/AppDelegate.swift deleted file mode 100644 index ffd8ef1..0000000 --- a/FileSugarExampleMacOS/AppDelegate.swift +++ /dev/null @@ -1,19 +0,0 @@ -import Cocoa - -@NSApplicationMain -class AppDelegate: NSObject, NSApplicationDelegate { - @IBOutlet weak var window: NSWindow! - /** - * Creates the view - */ - lazy var view: NSView = { - let contentRect = window.contentRect(forFrameRect: window.frame) // Get the size of the window without the title bar - let view: View = .init(frame: contentRect) // Create a new view with the same size as the window - window.contentView = view // Set the window's content view to the new view - view.layer?.backgroundColor = NSColor.white.cgColor // Set the background color of the view to white - return view // Return the new view - }() - func applicationDidFinishLaunching(_ aNotification: Notification) { - _ = view - } -} diff --git a/FileSugarExampleMacOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/FileSugarExampleMacOS/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2db2b1c..0000000 --- a/FileSugarExampleMacOS/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "size" : "16x16", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "16x16", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "32x32", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "32x32", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "128x128", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "128x128", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "256x256", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "256x256", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "512x512", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "512x512", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FileSugarExampleMacOS/Assets.xcassets/Contents.json b/FileSugarExampleMacOS/Assets.xcassets/Contents.json deleted file mode 100644 index da4a164..0000000 --- a/FileSugarExampleMacOS/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/FileSugarExampleMacOS/Base.lproj/MainMenu.xib b/FileSugarExampleMacOS/Base.lproj/MainMenu.xib deleted file mode 100644 index d4a776b..0000000 --- a/FileSugarExampleMacOS/Base.lproj/MainMenu.xib +++ /dev/null @@ -1,692 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Default - - - - - - - Left to Right - - - - - - - Right to Left - - - - - - - - - - - Default - - - - - - - Left to Right - - - - - - - Right to Left - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FileSugarExampleMacOS/FileSugarExampleMacOS.entitlements b/FileSugarExampleMacOS/FileSugarExampleMacOS.entitlements deleted file mode 100644 index 51a7cc5..0000000 --- a/FileSugarExampleMacOS/FileSugarExampleMacOS.entitlements +++ /dev/null @@ -1,10 +0,0 @@ - - - - - com.apple.security.app-sandbox - - com.apple.security.files.user-selected.read-only - - - diff --git a/FileSugarExampleMacOS/Info.plist b/FileSugarExampleMacOS/Info.plist deleted file mode 100644 index 733f526..0000000 --- a/FileSugarExampleMacOS/Info.plist +++ /dev/null @@ -1,32 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIconFile - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSMinimumSystemVersion - $(MACOSX_DEPLOYMENT_TARGET) - NSHumanReadableCopyright - Copyright © 2019 FutureLab. All rights reserved. - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - diff --git a/FileSugarExampleMacOS/View.swift b/FileSugarExampleMacOS/View.swift deleted file mode 100644 index 5d0084b..0000000 --- a/FileSugarExampleMacOS/View.swift +++ /dev/null @@ -1,35 +0,0 @@ -import Cocoa - -open class View: NSView { - override open var isFlipped: Bool { true } // TopLeft orientation - override public init(frame: CGRect) { - super.init(frame: frame) - Swift.print("hello world") - test1() - self.wantsLayer = true // if true then view is layer backed - } - /** - * Boilerplate - */ - @available(*, unavailable) - public required init?(coder decoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } -} -/** - * Test - */ -extension View { - /** - * Testing getting content from folder - */ - func test1() { - // Call the content method of the FileParser class with the expanded tilde path - let result = FileParser.content(dirPath: NSString(string: "~/Desktop/").expandingTildeInPath) - // Print the count of the result array - Swift.print("result.count: \(String(describing: result?.count))") - result?.forEach { - Swift.print("$0: \($0)") // prints all the files on the desktop folder - } - } -} diff --git a/Sources/FileSugar/FileModifier.swift b/Sources/FileSugar/FileModifier.swift index 9512e3d..5a5b0de 100755 --- a/Sources/FileSugar/FileModifier.swift +++ b/Sources/FileSugar/FileModifier.swift @@ -238,11 +238,39 @@ extension FileModifier { } } } - // fixme: add doc + /** + * Appends text to a file asynchronously at a specified index. + * - Description: Opens a file at the given path and appends the provided text starting from the specified index. If the index is negative, the text is appended at the end of the file. + * - Parameters: + * - path: The path to the file where the text will be appended. + * - text: The text content to append to the file. + * - index: The position in the file where the text will be appended. If negative, the text is appended to the end. + * - Returns: A boolean indicating whether the append operation was successful. + * - Throws: An error if the file cannot be opened or written to. + */ public static func appendAsync(_ path: String, text: String, index: Int) async throws -> Bool { - let fileURL = URL(fileURLWithPath: path) - let data = text.data(using: .utf8)! - try await data.write(to: fileURL, options: [.atomic]) - return true + let fileURL = URL(fileURLWithPath: path) + guard let data = text.data(using: .utf8) else { + throw NSError(domain: "Invalid Encoding", code: -1, userInfo: nil) + } + return try await withCheckedThrowingContinuation { continuation in + DispatchQueue.global().async { + do { + let fileHandle = try FileHandle(forWritingTo: fileURL) + defer { + try? fileHandle.close() + } + if index >= 0 { + try fileHandle.seek(toOffset: UInt64(index)) + } else { + try fileHandle.seekToEnd() + } + try fileHandle.write(contentsOf: data) + continuation.resume(returning: true) + } catch { + continuation.resume(throwing: error) + } + } + } } } diff --git a/Sources/FileSugar/FileParser.swift b/Sources/FileSugar/FileParser.swift index 1f7bfd8..8820fed 100755 --- a/Sources/FileSugar/FileParser.swift +++ b/Sources/FileSugar/FileParser.swift @@ -163,7 +163,10 @@ extension FileParser { * - Returns: An XMLElement instance representing the root element of the XML content at the specified path, or nil if an error occurred */ public static func xml(_ path: String) -> XMLElement? { - guard let content: String = FileParser.content(filePath: path) else { fatalError("Must have content: path: \(path)") } // get the string content of the file at the specified path + guard let content: String = FileParser.content(filePath: path) else { + Swift.print("⚠️️ FileParser.xml Error: Content is nil at path: \(path)") // get the string content of the file at the specified path + return nil + } do { let xmlDoc: XMLDocument = try XMLDocument(xmlString: content, options: XMLNode.Options(rawValue: 0)) // create an XML document instance from the string content return xmlDoc.rootElement() // return the root element of the XML document @@ -199,20 +202,22 @@ extension FileParser { * - Throws: An error if the file could not be read. */ public static func readContentAsync(url: URL) async throws -> String { - return try await withCheckedThrowingContinuation { continuation in - DispatchQueue.global().async { - do { - let data = try Data(contentsOf: url) - if let content = String(data: data, encoding: .utf8) { - continuation.resume(returning: content) - } else { - continuation.resume(throwing: NSError(domain: "Invalid Encoding", code: -1, userInfo: nil)) - } - } catch { - continuation.resume(throwing: error) - } - } - } + // ⚠️️ this might be the outdated way of doing async + return try await withCheckedThrowingContinuation { continuation in + DispatchQueue.global().async { + do { + let data = try Data(contentsOf: url) + if let content = String(data: data, encoding: .utf8) { + continuation.resume(returning: content) + } else { + continuation.resume(throwing: NSError(domain: "Invalid Encoding", code: -1, userInfo: nil)) + } + } catch { + continuation.resume(throwing: error) + } + } + } + // fixme: ⚠️️ the bellow might only work for swift 6? try using if swift 6.0 etc? //try await String(contentsOf: url, encoding: .utf8) // not working } /** diff --git a/Sources/FileSugar/path/FilePathModifier.swift b/Sources/FileSugar/path/FilePathModifier.swift index 4ab5dd7..7391aa4 100755 --- a/Sources/FileSugar/path/FilePathModifier.swift +++ b/Sources/FileSugar/path/FilePathModifier.swift @@ -38,6 +38,8 @@ extension FilePathModifier { * Swift.print(expand("/temp/colors/star.svg",baseURL:"/Users/John/Desktop"))///Users/John/Desktop/temp/colors/star.svg * Swift.print(expand("star.svg",baseURL:"/Users/John/Desktop"))///Users/John/Desktop/star.svg * - Important: ⚠️️ Tilde paths can't have backlash syntax like ../../ etc + * fixme: add: let path = NSString(string: filePath).expandingTildeInPath + * fixme: add: let base = NSString(string: baseURL).expandingTildeInPath */ public static func expand(_ filePath: String, baseURL: String = "") -> String? { switch true { diff --git a/Sources/FileSugar/stream/FileStreamReader.swift b/Sources/FileSugar/stream/FileStreamReader.swift index ef567f6..e76a440 100644 --- a/Sources/FileSugar/stream/FileStreamReader.swift +++ b/Sources/FileSugar/stream/FileStreamReader.swift @@ -22,7 +22,8 @@ public final class FileStreamReader { public static func read(url: URL, startIndex: UInt64, endIndex: Int) throws -> Data { do { let file: FileHandle = try .init(forReadingFrom: url) // Open the file at the given URL for reading - file.seek(toFileOffset: startIndex) // Seek to the starting byte offset + // file.seek(toFileOffset: startIndex) // Seek to the starting byte offset + try file.seek(toOffset: startIndex) let length: Int = endIndex - Int(startIndex) // Calculate the length of the data to read let databuffer: Data = file.readData(ofLength: length) // Read the data from the file file.closeFile() // Close the file @@ -46,27 +47,34 @@ extension FileStreamReader { * - Throws: An error if the file size cannot be determined * - Returns: The size of the file in bytes */ - public static func getFileSize(filePath: String) throws -> UInt64 { - // Create a URL from the file path - let fileUrl = URL(fileURLWithPath: filePath) - // Get the default file manager - let fileManager = FileManager.default - do { - // Get the attributes of the file at the URL - let attributes: [FileAttributeKey: Any] = try fileManager.attributesOfItem(atPath: (fileUrl.path)) - // Get the file size from the attributes dictionary - var fileSize: UInt64 = attributes[FileAttributeKey.size] as! UInt64 - // Alternatively, get the file size from the attributes dictionary using the fileSize() method - let dict: NSDictionary = attributes as NSDictionary - fileSize = dict.fileSize() - // Return the file size - return fileSize - } catch let error as NSError { - // If an error occurs, throw an NSError with a descriptive message - throw NSError(domain: ("⚠️️ Something went wrong: \(error)"), code: 0) +public static func getFileSize(filePath: String) throws -> UInt64 { + // Create a URL from the file path + let fileUrl = URL(fileURLWithPath: filePath) + // Get the default file manager + let fileManager = FileManager.default + do { + // Get the attributes of the file at the URL + let attributes: [FileAttributeKey: Any] = try fileManager.attributesOfItem(atPath: fileUrl.path) + // Get the file size from the attributes dictionary + var fileSize: UInt64 + if let sizeValue = attributes[FileAttributeKey.size] as? UInt64 { + fileSize = sizeValue + } else if let sizeNumber = attributes[FileAttributeKey.size] as? NSNumber { + fileSize = sizeNumber.uint64Value + } else if let dict = attributes as NSDictionary? { + // Alternatively, get the file size from the attributes dictionary using the fileSize() method + fileSize = dict.fileSize() + } else { + throw NSError(domain: "Unable to retrieve file size", code: 0) } + // Return the file size + return fileSize + } catch let error as NSError { + // If an error occurs, throw an NSError with a descriptive message + throw NSError(domain: "⚠️️ Something went wrong: \(error)", code: 0) } } +} // reader extension FileStreamReader { /** diff --git a/Tests/FileSugarTests/FileModifierTests.swift b/Tests/FileSugarTests/FileModifierTests.swift index e1843d7..2045d7f 100644 --- a/Tests/FileSugarTests/FileModifierTests.swift +++ b/Tests/FileSugarTests/FileModifierTests.swift @@ -5,7 +5,10 @@ final class FileModifierTests: XCTestCase { // fixme add doc func testWriteFile() { let fileURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("test.txt") - let data = "Hello, Swift!".data(using: .utf8)! + guard let data = "Hello, Swift!".data(using: .utf8) else { + XCTFail("Failed to encode string to data") + return + } do { try data.write(to: fileURL, options: [.atomic]) XCTAssertTrue(FileManager.default.fileExists(atPath: fileURL.path)) diff --git a/Tests/FileSugarTests/FileSugarTests.swift b/Tests/FileSugarTests/FileSugarTests.swift index 7f8d423..43cd707 100644 --- a/Tests/FileSugarTests/FileSugarTests.swift +++ b/Tests/FileSugarTests/FileSugarTests.swift @@ -24,7 +24,13 @@ final class FileSugarTests: XCTestCase { try? FileManager.default.removeItem(at: fileURL) } // If you need to support earlier versions of Swift or prefer not to use async test methods, you can use expectations: - // fixme: add doc + /** + * Tests reading file content asynchronously using expectations (compatible with older Swift versions). + * + * This test writes a test string to a temporary file, then reads it back asynchronously + * using `FileParser.readContentAsync(url:)`. It uses an expectation to wait for the asynchronous + * operation to complete. + */ func testFileParserAsyncContentOlderSwift() throws { let fileURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("temp.txt") let testContent = "Hello, World!" @@ -48,7 +54,12 @@ final class FileSugarTests: XCTestCase { // Clean up try? FileManager.default.removeItem(at: fileURL) } - // fixme: add doc + /** + * Tests writing content to a file asynchronously using `FileModifier.writeContentAsync(url:content:)`. + * + * This test writes a test string to a temporary file asynchronously, then reads it back asynchronously + * to verify that the content matches. + */ func testWriteContentAsync() async throws { let fileURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("temp.txt") let testContent = "Hello, World!" @@ -56,7 +67,12 @@ final class FileSugarTests: XCTestCase { let content = try await FileParser.readContentAsync(url: fileURL) XCTAssertEqual(content, testContent, "Content should match the test content") } - // fixme: add doc + /** + * Tests writing data to a file asynchronously using `FileModifier.writeDataAsync(url:data:)`. + * + * This test writes test data to a temporary file asynchronously, then reads it back asynchronously + * to verify that the data matches. + */ func testWriteDataAsync() async throws { let fileURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("temp.txt") let testData = "Hello, World!".data(using: .utf8)!