[
  {
    "path": "Example_iOS/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  Example_iOS\n//\n//  Created by Benoit Pereira da silva on 22/07/2017.\n//  Copyright © 2017 Pereira da Silva. All rights reserved.\n//\n\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n        // Override point for customization after application launch.\n        return true\n    }\n\n    func applicationWillResignActive(_ application: UIApplication) {\n        // 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.\n        // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.\n    }\n\n    func applicationDidEnterBackground(_ application: UIApplication) {\n        // 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.\n        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n    }\n\n    func applicationWillEnterForeground(_ application: UIApplication) {\n        // 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.\n    }\n\n    func applicationDidBecomeActive(_ application: UIApplication) {\n        // 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.\n    }\n\n    func applicationWillTerminate(_ application: UIApplication) {\n        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n    }\n\n\n}\n\n"
  },
  {
    "path": "Example_iOS/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example_iOS/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"11134\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11106\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Example_iOS/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"12121\" systemVersion=\"16G29\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"12089\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Example View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"ExampleViewController\" customModule=\"Example_iOS\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"H9G-Fk-kuC\" customClass=\"UniversalImageView\" customModule=\"Example_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"220\" width=\"375\" height=\"80\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"80\" id=\"CTa-T9-1dw\"/>\n                                    <constraint firstAttribute=\"width\" constant=\"375\" id=\"cH6-qK-nna\"/>\n                                </constraints>\n                            </imageView>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" fixedFrame=\"YES\" text=\"Nb:\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"BSl-Jk-IGZ\" customClass=\"UniversalLabel\" customModule=\"Example_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"3\" y=\"400\" width=\"114\" height=\"21\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" fixedFrame=\"YES\" text=\"0\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Bom-Gs-9to\" customClass=\"UniversalLabel\" customModule=\"Example_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"130\" y=\"401\" width=\"229\" height=\"21\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" fixedFrame=\"YES\" text=\"0\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"PM8-HY-UXF\" customClass=\"UniversalLabel\" customModule=\"Example_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"130\" y=\"429\" width=\"229\" height=\"21\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" fixedFrame=\"YES\" text=\"Sampling:\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"4bM-Ka-odS\" customClass=\"UniversalLabel\" customModule=\"Example_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"3\" y=\"427\" width=\"114\" height=\"21\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" fixedFrame=\"YES\" text=\"Drawing:\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ob4-iP-Iik\" customClass=\"UniversalLabel\" customModule=\"Example_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"3\" y=\"454\" width=\"114\" height=\"21\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" fixedFrame=\"YES\" text=\"0\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"eL6-Kb-Axk\" customClass=\"UniversalLabel\" customModule=\"Example_iOS\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"129\" y=\"456\" width=\"229\" height=\"21\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"0.0\" green=\"0.25098040700000002\" blue=\"0.50196081400000003\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"H9G-Fk-kuC\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leading\" id=\"XiZ-oW-9Sa\"/>\n                            <constraint firstItem=\"H9G-Fk-kuC\" firstAttribute=\"top\" secondItem=\"y3c-jy-aDJ\" secondAttribute=\"bottom\" constant=\"200\" id=\"fOV-kS-w9w\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"H9G-Fk-kuC\" secondAttribute=\"trailing\" id=\"yWc-Gi-ZRz\"/>\n                        </constraints>\n                    </view>\n                    <simulatedStatusBarMetrics key=\"simulatedStatusBarMetrics\" statusBarStyle=\"lightContent\"/>\n                    <nil key=\"simulatedTopBarMetrics\"/>\n                    <connections>\n                        <outlet property=\"drawingDurationLabel\" destination=\"eL6-Kb-Axk\" id=\"9Qs-jJ-z9U\"/>\n                        <outlet property=\"nbLabel\" destination=\"Bom-Gs-9to\" id=\"syW-2h-DAM\"/>\n                        <outlet property=\"samplingDurationLabel\" destination=\"PM8-HY-UXF\" id=\"VcE-7G-4dS\"/>\n                        <outlet property=\"waveFormView\" destination=\"H9G-Fk-kuC\" id=\"1ed-rc-Bo9\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"24.800000000000001\" y=\"35.532233883058474\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Example_iOS/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>3.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>2</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example_macOS/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  Example_macOS\n//\n//  Created by Benoit Pereira da silva on 22/07/2017.\n//  Copyright © 2017 Pereira da Silva. All rights reserved.\n//\n\nimport Cocoa\n\n@NSApplicationMain\nclass AppDelegate: NSObject, NSApplicationDelegate {\n\n\n\n    func applicationDidFinishLaunching(_ aNotification: Notification) {\n        // Insert code here to initialize your application\n    }\n\n    func applicationWillTerminate(_ aNotification: Notification) {\n        // Insert code here to tear down your application\n    }\n\n\n}\n\n"
  },
  {
    "path": "Example_macOS/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"16x16\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"16x16\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"32x32\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"32x32\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"128x128\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"128x128\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"256x256\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"256x256\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"512x512\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"512x512\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example_macOS/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"12121\" systemVersion=\"16G29\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" useAutolayout=\"YES\" initialViewController=\"B8D-0N-5wS\">\n    <dependencies>\n        <deployment identifier=\"macosx\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"12121\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Application-->\n        <scene sceneID=\"JPo-4y-FX3\">\n            <objects>\n                <application id=\"hnw-xV-0zn\" sceneMemberID=\"viewController\">\n                    <menu key=\"mainMenu\" title=\"Main Menu\" systemMenu=\"main\" id=\"AYu-sK-qS6\">\n                        <items>\n                            <menuItem title=\"Example_macOS\" id=\"1Xt-HY-uBw\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Example_macOS\" systemMenu=\"apple\" id=\"uQy-DD-JDr\">\n                                    <items>\n                                        <menuItem title=\"About Example_macOS\" id=\"5kV-Vb-QxS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"orderFrontStandardAboutPanel:\" target=\"Ady-hI-5gd\" id=\"Exp-CZ-Vem\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"VOq-y0-SEH\"/>\n                                        <menuItem title=\"Preferences…\" keyEquivalent=\",\" id=\"BOF-NM-1cW\"/>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"wFC-TO-SCJ\"/>\n                                        <menuItem title=\"Services\" id=\"NMo-om-nkz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Services\" systemMenu=\"services\" id=\"hz9-B4-Xy5\"/>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"4je-JR-u6R\"/>\n                                        <menuItem title=\"Hide Example_macOS\" keyEquivalent=\"h\" id=\"Olw-nP-bQN\">\n                                            <connections>\n                                                <action selector=\"hide:\" target=\"Ady-hI-5gd\" id=\"PnN-Uc-m68\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Hide Others\" keyEquivalent=\"h\" id=\"Vdr-fp-XzO\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"hideOtherApplications:\" target=\"Ady-hI-5gd\" id=\"VT4-aY-XCT\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Show All\" id=\"Kd2-mp-pUS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"unhideAllApplications:\" target=\"Ady-hI-5gd\" id=\"Dhg-Le-xox\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"kCx-OE-vgT\"/>\n                                        <menuItem title=\"Quit Example_macOS\" keyEquivalent=\"q\" id=\"4sb-4s-VLi\">\n                                            <connections>\n                                                <action selector=\"terminate:\" target=\"Ady-hI-5gd\" id=\"Te7-pn-YzF\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"File\" id=\"dMs-cI-mzQ\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"File\" id=\"bib-Uj-vzu\">\n                                    <items>\n                                        <menuItem title=\"New\" keyEquivalent=\"n\" id=\"Was-JA-tGl\">\n                                            <connections>\n                                                <action selector=\"newDocument:\" target=\"Ady-hI-5gd\" id=\"4Si-XN-c54\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Open…\" keyEquivalent=\"o\" id=\"IAo-SY-fd9\">\n                                            <connections>\n                                                <action selector=\"openDocument:\" target=\"Ady-hI-5gd\" id=\"bVn-NM-KNZ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Open Recent\" id=\"tXI-mr-wws\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Open Recent\" systemMenu=\"recentDocuments\" id=\"oas-Oc-fiZ\">\n                                                <items>\n                                                    <menuItem title=\"Clear Menu\" id=\"vNY-rz-j42\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"clearRecentDocuments:\" target=\"Ady-hI-5gd\" id=\"Daa-9d-B3U\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"m54-Is-iLE\"/>\n                                        <menuItem title=\"Close\" keyEquivalent=\"w\" id=\"DVo-aG-piG\">\n                                            <connections>\n                                                <action selector=\"performClose:\" target=\"Ady-hI-5gd\" id=\"HmO-Ls-i7Q\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Save…\" keyEquivalent=\"s\" id=\"pxx-59-PXV\">\n                                            <connections>\n                                                <action selector=\"saveDocument:\" target=\"Ady-hI-5gd\" id=\"teZ-XB-qJY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Save As…\" keyEquivalent=\"S\" id=\"Bw7-FT-i3A\">\n                                            <connections>\n                                                <action selector=\"saveDocumentAs:\" target=\"Ady-hI-5gd\" id=\"mDf-zr-I0C\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Revert to Saved\" keyEquivalent=\"r\" id=\"KaW-ft-85H\">\n                                            <connections>\n                                                <action selector=\"revertDocumentToSaved:\" target=\"Ady-hI-5gd\" id=\"iJ3-Pv-kwq\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"aJh-i4-bef\"/>\n                                        <menuItem title=\"Page Setup…\" keyEquivalent=\"P\" id=\"qIS-W8-SiK\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" shift=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"runPageLayout:\" target=\"Ady-hI-5gd\" id=\"Din-rz-gC5\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Print…\" keyEquivalent=\"p\" id=\"aTl-1u-JFS\">\n                                            <connections>\n                                                <action selector=\"print:\" target=\"Ady-hI-5gd\" id=\"qaZ-4w-aoO\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Edit\" id=\"5QF-Oa-p0T\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Edit\" id=\"W48-6f-4Dl\">\n                                    <items>\n                                        <menuItem title=\"Undo\" keyEquivalent=\"z\" id=\"dRJ-4n-Yzg\">\n                                            <connections>\n                                                <action selector=\"undo:\" target=\"Ady-hI-5gd\" id=\"M6e-cu-g7V\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Redo\" keyEquivalent=\"Z\" id=\"6dh-zS-Vam\">\n                                            <connections>\n                                                <action selector=\"redo:\" target=\"Ady-hI-5gd\" id=\"oIA-Rs-6OD\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"WRV-NI-Exz\"/>\n                                        <menuItem title=\"Cut\" keyEquivalent=\"x\" id=\"uRl-iY-unG\">\n                                            <connections>\n                                                <action selector=\"cut:\" target=\"Ady-hI-5gd\" id=\"YJe-68-I9s\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Copy\" keyEquivalent=\"c\" id=\"x3v-GG-iWU\">\n                                            <connections>\n                                                <action selector=\"copy:\" target=\"Ady-hI-5gd\" id=\"G1f-GL-Joy\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste\" keyEquivalent=\"v\" id=\"gVA-U4-sdL\">\n                                            <connections>\n                                                <action selector=\"paste:\" target=\"Ady-hI-5gd\" id=\"UvS-8e-Qdg\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste and Match Style\" keyEquivalent=\"V\" id=\"WeT-3V-zwk\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"pasteAsPlainText:\" target=\"Ady-hI-5gd\" id=\"cEh-KX-wJQ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Delete\" id=\"pa3-QI-u2k\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"delete:\" target=\"Ady-hI-5gd\" id=\"0Mk-Ml-PaM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Select All\" keyEquivalent=\"a\" id=\"Ruw-6m-B2m\">\n                                            <connections>\n                                                <action selector=\"selectAll:\" target=\"Ady-hI-5gd\" id=\"VNm-Mi-diN\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"uyl-h8-XO2\"/>\n                                        <menuItem title=\"Find\" id=\"4EN-yA-p0u\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Find\" id=\"1b7-l0-nxx\">\n                                                <items>\n                                                    <menuItem title=\"Find…\" tag=\"1\" keyEquivalent=\"f\" id=\"Xz5-n4-O0W\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"cD7-Qs-BN4\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Find and Replace…\" tag=\"12\" keyEquivalent=\"f\" id=\"YEy-JH-Tfz\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"WD3-Gg-5AJ\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Find Next\" tag=\"2\" keyEquivalent=\"g\" id=\"q09-fT-Sye\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"NDo-RZ-v9R\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Find Previous\" tag=\"3\" keyEquivalent=\"G\" id=\"OwM-mh-QMV\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"HOh-sY-3ay\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use Selection for Find\" tag=\"7\" keyEquivalent=\"e\" id=\"buJ-ug-pKt\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"U76-nv-p5D\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Jump to Selection\" keyEquivalent=\"j\" id=\"S0p-oC-mLd\">\n                                                        <connections>\n                                                            <action selector=\"centerSelectionInVisibleArea:\" target=\"Ady-hI-5gd\" id=\"IOG-6D-g5B\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Spelling and Grammar\" id=\"Dv1-io-Yv7\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Spelling\" id=\"3IN-sU-3Bg\">\n                                                <items>\n                                                    <menuItem title=\"Show Spelling and Grammar\" keyEquivalent=\":\" id=\"HFo-cy-zxI\">\n                                                        <connections>\n                                                            <action selector=\"showGuessPanel:\" target=\"Ady-hI-5gd\" id=\"vFj-Ks-hy3\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Check Document Now\" keyEquivalent=\";\" id=\"hz2-CU-CR7\">\n                                                        <connections>\n                                                            <action selector=\"checkSpelling:\" target=\"Ady-hI-5gd\" id=\"fz7-VC-reM\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"bNw-od-mp5\"/>\n                                                    <menuItem title=\"Check Spelling While Typing\" id=\"rbD-Rh-wIN\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleContinuousSpellChecking:\" target=\"Ady-hI-5gd\" id=\"7w6-Qz-0kB\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Check Grammar With Spelling\" id=\"mK6-2p-4JG\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleGrammarChecking:\" target=\"Ady-hI-5gd\" id=\"muD-Qn-j4w\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Correct Spelling Automatically\" id=\"78Y-hA-62v\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticSpellingCorrection:\" target=\"Ady-hI-5gd\" id=\"2lM-Qi-WAP\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Substitutions\" id=\"9ic-FL-obx\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Substitutions\" id=\"FeM-D8-WVr\">\n                                                <items>\n                                                    <menuItem title=\"Show Substitutions\" id=\"z6F-FW-3nz\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"orderFrontSubstitutionsPanel:\" target=\"Ady-hI-5gd\" id=\"oku-mr-iSq\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"gPx-C9-uUO\"/>\n                                                    <menuItem title=\"Smart Copy/Paste\" id=\"9yt-4B-nSM\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleSmartInsertDelete:\" target=\"Ady-hI-5gd\" id=\"3IJ-Se-DZD\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smart Quotes\" id=\"hQb-2v-fYv\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticQuoteSubstitution:\" target=\"Ady-hI-5gd\" id=\"ptq-xd-QOA\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smart Dashes\" id=\"rgM-f4-ycn\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticDashSubstitution:\" target=\"Ady-hI-5gd\" id=\"oCt-pO-9gS\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smart Links\" id=\"cwL-P1-jid\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticLinkDetection:\" target=\"Ady-hI-5gd\" id=\"Gip-E3-Fov\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Data Detectors\" id=\"tRr-pd-1PS\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticDataDetection:\" target=\"Ady-hI-5gd\" id=\"R1I-Nq-Kbl\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Text Replacement\" id=\"HFQ-gK-NFA\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticTextReplacement:\" target=\"Ady-hI-5gd\" id=\"DvP-Fe-Py6\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Transformations\" id=\"2oI-Rn-ZJC\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Transformations\" id=\"c8a-y6-VQd\">\n                                                <items>\n                                                    <menuItem title=\"Make Upper Case\" id=\"vmV-6d-7jI\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"uppercaseWord:\" target=\"Ady-hI-5gd\" id=\"sPh-Tk-edu\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Make Lower Case\" id=\"d9M-CD-aMd\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"lowercaseWord:\" target=\"Ady-hI-5gd\" id=\"iUZ-b5-hil\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Capitalize\" id=\"UEZ-Bs-lqG\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"capitalizeWord:\" target=\"Ady-hI-5gd\" id=\"26H-TL-nsh\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Speech\" id=\"xrE-MZ-jX0\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Speech\" id=\"3rS-ZA-NoH\">\n                                                <items>\n                                                    <menuItem title=\"Start Speaking\" id=\"Ynk-f8-cLZ\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"startSpeaking:\" target=\"Ady-hI-5gd\" id=\"654-Ng-kyl\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Stop Speaking\" id=\"Oyz-dy-DGm\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"stopSpeaking:\" target=\"Ady-hI-5gd\" id=\"dX8-6p-jy9\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Format\" id=\"jxT-CU-nIS\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Format\" id=\"GEO-Iw-cKr\">\n                                    <items>\n                                        <menuItem title=\"Font\" id=\"Gi5-1S-RQB\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Font\" systemMenu=\"font\" id=\"aXa-aM-Jaq\">\n                                                <items>\n                                                    <menuItem title=\"Show Fonts\" keyEquivalent=\"t\" id=\"Q5e-8K-NDq\"/>\n                                                    <menuItem title=\"Bold\" tag=\"2\" keyEquivalent=\"b\" id=\"GB9-OM-e27\"/>\n                                                    <menuItem title=\"Italic\" tag=\"1\" keyEquivalent=\"i\" id=\"Vjx-xi-njq\"/>\n                                                    <menuItem title=\"Underline\" keyEquivalent=\"u\" id=\"WRG-CD-K1S\">\n                                                        <connections>\n                                                            <action selector=\"underline:\" target=\"Ady-hI-5gd\" id=\"FYS-2b-JAY\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"5gT-KC-WSO\"/>\n                                                    <menuItem title=\"Bigger\" tag=\"3\" keyEquivalent=\"+\" id=\"Ptp-SP-VEL\"/>\n                                                    <menuItem title=\"Smaller\" tag=\"4\" keyEquivalent=\"-\" id=\"i1d-Er-qST\"/>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"kx3-Dk-x3B\"/>\n                                                    <menuItem title=\"Kern\" id=\"jBQ-r6-VK2\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Kern\" id=\"tlD-Oa-oAM\">\n                                                            <items>\n                                                                <menuItem title=\"Use Default\" id=\"GUa-eO-cwY\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"useStandardKerning:\" target=\"Ady-hI-5gd\" id=\"6dk-9l-Ckg\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Use None\" id=\"cDB-IK-hbR\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"turnOffKerning:\" target=\"Ady-hI-5gd\" id=\"U8a-gz-Maa\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Tighten\" id=\"46P-cB-AYj\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"tightenKerning:\" target=\"Ady-hI-5gd\" id=\"hr7-Nz-8ro\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Loosen\" id=\"ogc-rX-tC1\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"loosenKerning:\" target=\"Ady-hI-5gd\" id=\"8i4-f9-FKE\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem title=\"Ligatures\" id=\"o6e-r0-MWq\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Ligatures\" id=\"w0m-vy-SC9\">\n                                                            <items>\n                                                                <menuItem title=\"Use Default\" id=\"agt-UL-0e3\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"useStandardLigatures:\" target=\"Ady-hI-5gd\" id=\"7uR-wd-Dx6\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Use None\" id=\"J7y-lM-qPV\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"turnOffLigatures:\" target=\"Ady-hI-5gd\" id=\"iX2-gA-Ilz\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Use All\" id=\"xQD-1f-W4t\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"useAllLigatures:\" target=\"Ady-hI-5gd\" id=\"KcB-kA-TuK\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem title=\"Baseline\" id=\"OaQ-X3-Vso\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Baseline\" id=\"ijk-EB-dga\">\n                                                            <items>\n                                                                <menuItem title=\"Use Default\" id=\"3Om-Ey-2VK\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"unscript:\" target=\"Ady-hI-5gd\" id=\"0vZ-95-Ywn\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Superscript\" id=\"Rqc-34-cIF\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"superscript:\" target=\"Ady-hI-5gd\" id=\"3qV-fo-wpU\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Subscript\" id=\"I0S-gh-46l\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"subscript:\" target=\"Ady-hI-5gd\" id=\"Q6W-4W-IGz\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Raise\" id=\"2h7-ER-AoG\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"raiseBaseline:\" target=\"Ady-hI-5gd\" id=\"4sk-31-7Q9\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Lower\" id=\"1tx-W0-xDw\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"lowerBaseline:\" target=\"Ady-hI-5gd\" id=\"OF1-bc-KW4\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"Ndw-q3-faq\"/>\n                                                    <menuItem title=\"Show Colors\" keyEquivalent=\"C\" id=\"bgn-CT-cEk\">\n                                                        <connections>\n                                                            <action selector=\"orderFrontColorPanel:\" target=\"Ady-hI-5gd\" id=\"mSX-Xz-DV3\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"iMs-zA-UFJ\"/>\n                                                    <menuItem title=\"Copy Style\" keyEquivalent=\"c\" id=\"5Vv-lz-BsD\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"copyFont:\" target=\"Ady-hI-5gd\" id=\"GJO-xA-L4q\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Paste Style\" keyEquivalent=\"v\" id=\"vKC-jM-MkH\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"pasteFont:\" target=\"Ady-hI-5gd\" id=\"JfD-CL-leO\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Text\" id=\"Fal-I4-PZk\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Text\" id=\"d9c-me-L2H\">\n                                                <items>\n                                                    <menuItem title=\"Align Left\" keyEquivalent=\"{\" id=\"ZM1-6Q-yy1\">\n                                                        <connections>\n                                                            <action selector=\"alignLeft:\" target=\"Ady-hI-5gd\" id=\"zUv-R1-uAa\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Center\" keyEquivalent=\"|\" id=\"VIY-Ag-zcb\">\n                                                        <connections>\n                                                            <action selector=\"alignCenter:\" target=\"Ady-hI-5gd\" id=\"spX-mk-kcS\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Justify\" id=\"J5U-5w-g23\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"alignJustified:\" target=\"Ady-hI-5gd\" id=\"ljL-7U-jND\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Align Right\" keyEquivalent=\"}\" id=\"wb2-vD-lq4\">\n                                                        <connections>\n                                                            <action selector=\"alignRight:\" target=\"Ady-hI-5gd\" id=\"r48-bG-YeY\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"4s2-GY-VfK\"/>\n                                                    <menuItem title=\"Writing Direction\" id=\"H1b-Si-o9J\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Writing Direction\" id=\"8mr-sm-Yjd\">\n                                                            <items>\n                                                                <menuItem title=\"Paragraph\" enabled=\"NO\" id=\"ZvO-Gk-QUH\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                </menuItem>\n                                                                <menuItem id=\"YGs-j5-SAR\">\n                                                                    <string key=\"title\">\tDefault</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeBaseWritingDirectionNatural:\" target=\"Ady-hI-5gd\" id=\"qtV-5e-UBP\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"Lbh-J2-qVU\">\n                                                                    <string key=\"title\">\tLeft to Right</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeBaseWritingDirectionLeftToRight:\" target=\"Ady-hI-5gd\" id=\"S0X-9S-QSf\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"jFq-tB-4Kx\">\n                                                                    <string key=\"title\">\tRight to Left</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeBaseWritingDirectionRightToLeft:\" target=\"Ady-hI-5gd\" id=\"5fk-qB-AqJ\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem isSeparatorItem=\"YES\" id=\"swp-gr-a21\"/>\n                                                                <menuItem title=\"Selection\" enabled=\"NO\" id=\"cqv-fj-IhA\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                </menuItem>\n                                                                <menuItem id=\"Nop-cj-93Q\">\n                                                                    <string key=\"title\">\tDefault</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeTextWritingDirectionNatural:\" target=\"Ady-hI-5gd\" id=\"lPI-Se-ZHp\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"BgM-ve-c93\">\n                                                                    <string key=\"title\">\tLeft to Right</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeTextWritingDirectionLeftToRight:\" target=\"Ady-hI-5gd\" id=\"caW-Bv-w94\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"RB4-Sm-HuC\">\n                                                                    <string key=\"title\">\tRight to Left</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeTextWritingDirectionRightToLeft:\" target=\"Ady-hI-5gd\" id=\"EXD-6r-ZUu\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"fKy-g9-1gm\"/>\n                                                    <menuItem title=\"Show Ruler\" id=\"vLm-3I-IUL\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleRuler:\" target=\"Ady-hI-5gd\" id=\"FOx-HJ-KwY\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Copy Ruler\" keyEquivalent=\"c\" id=\"MkV-Pr-PK5\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"copyRuler:\" target=\"Ady-hI-5gd\" id=\"71i-fW-3W2\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Paste Ruler\" keyEquivalent=\"v\" id=\"LVM-kO-fVI\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"pasteRuler:\" target=\"Ady-hI-5gd\" id=\"cSh-wd-qM2\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"View\" id=\"H8h-7b-M4v\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"View\" id=\"HyV-fh-RgO\">\n                                    <items>\n                                        <menuItem title=\"Show Toolbar\" keyEquivalent=\"t\" id=\"snW-S8-Cw5\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"toggleToolbarShown:\" target=\"Ady-hI-5gd\" id=\"BXY-wc-z0C\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Customize Toolbar…\" id=\"1UK-8n-QPP\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"runToolbarCustomizationPalette:\" target=\"Ady-hI-5gd\" id=\"pQI-g3-MTW\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"hB3-LF-h0Y\"/>\n                                        <menuItem title=\"Show Sidebar\" keyEquivalent=\"s\" id=\"kIP-vf-haE\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"toggleSourceList:\" target=\"Ady-hI-5gd\" id=\"iwa-gc-5KM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Enter Full Screen\" keyEquivalent=\"f\" id=\"4J7-dP-txa\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"toggleFullScreen:\" target=\"Ady-hI-5gd\" id=\"dU3-MA-1Rq\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Window\" id=\"aUF-d1-5bR\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Window\" systemMenu=\"window\" id=\"Td7-aD-5lo\">\n                                    <items>\n                                        <menuItem title=\"Minimize\" keyEquivalent=\"m\" id=\"OY7-WF-poV\">\n                                            <connections>\n                                                <action selector=\"performMiniaturize:\" target=\"Ady-hI-5gd\" id=\"VwT-WD-YPe\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Zoom\" id=\"R4o-n2-Eq4\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"performZoom:\" target=\"Ady-hI-5gd\" id=\"DIl-cC-cCs\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"eu3-7i-yIM\"/>\n                                        <menuItem title=\"Bring All to Front\" id=\"LE2-aR-0XJ\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"arrangeInFront:\" target=\"Ady-hI-5gd\" id=\"DRN-fu-gQh\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Help\" id=\"wpr-3q-Mcd\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Help\" systemMenu=\"help\" id=\"F2S-fz-NVQ\">\n                                    <items>\n                                        <menuItem title=\"Example_macOS Help\" keyEquivalent=\"?\" id=\"FKE-Sm-Kum\">\n                                            <connections>\n                                                <action selector=\"showHelp:\" target=\"Ady-hI-5gd\" id=\"y7X-2Q-9no\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                        </items>\n                    </menu>\n                    <connections>\n                        <outlet property=\"delegate\" destination=\"Voe-Tx-rLC\" id=\"PrD-fu-P6m\"/>\n                    </connections>\n                </application>\n                <customObject id=\"Voe-Tx-rLC\" customClass=\"AppDelegate\" customModule=\"Example_macOS\" customModuleProvider=\"target\"/>\n                <customObject id=\"Ady-hI-5gd\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"75\" y=\"0.0\"/>\n        </scene>\n        <!--Window Controller-->\n        <scene sceneID=\"R2V-B0-nI4\">\n            <objects>\n                <windowController id=\"B8D-0N-5wS\" sceneMemberID=\"viewController\">\n                    <window key=\"window\" title=\"Window\" allowsToolTipsWhenApplicationIsInactive=\"NO\" autorecalculatesKeyViewLoop=\"NO\" oneShot=\"NO\" releasedWhenClosed=\"NO\" showsToolbarButton=\"NO\" visibleAtLaunch=\"NO\" animationBehavior=\"default\" id=\"IQv-IB-iLA\">\n                        <windowStyleMask key=\"styleMask\" titled=\"YES\" closable=\"YES\" miniaturizable=\"YES\" resizable=\"YES\"/>\n                        <windowPositionMask key=\"initialPositionMask\" leftStrut=\"YES\" rightStrut=\"YES\" topStrut=\"YES\" bottomStrut=\"YES\"/>\n                        <rect key=\"contentRect\" x=\"196\" y=\"240\" width=\"300\" height=\"120\"/>\n                        <rect key=\"screenRect\" x=\"0.0\" y=\"0.0\" width=\"1680\" height=\"1027\"/>\n                    </window>\n                    <connections>\n                        <segue destination=\"W5w-8N-xO8\" kind=\"relationship\" relationship=\"window.shadowedContentViewController\" id=\"wIo-gL-brF\"/>\n                    </connections>\n                </windowController>\n                <customObject id=\"Oky-zY-oP4\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"75\" y=\"250\"/>\n        </scene>\n        <!--Example View Controller-->\n        <scene sceneID=\"7lh-6R-wcX\">\n            <objects>\n                <viewController id=\"W5w-8N-xO8\" customClass=\"ExampleViewController\" customModule=\"Example_macOS\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" id=\"OWz-zu-i81\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"860\" height=\"228\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <subviews>\n                            <imageView horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Mhq-Nd-dQE\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"98\" width=\"860\" height=\"120\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" constant=\"860\" id=\"8yH-71-YAc\"/>\n                                    <constraint firstAttribute=\"height\" constant=\"120\" id=\"dfp-kh-vBL\"/>\n                                </constraints>\n                                <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" id=\"cP9-DV-3Cb\"/>\n                            </imageView>\n                            <textField horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" fixedFrame=\"YES\" allowsCharacterPickerTouchBarItem=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"6ek-L4-xGh\">\n                                <rect key=\"frame\" x=\"5\" y=\"55\" width=\"84\" height=\"17\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" alignment=\"right\" title=\"Nb :\" id=\"O8h-0r-kMK\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" fixedFrame=\"YES\" allowsCharacterPickerTouchBarItem=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"iIR-C9-jtl\">\n                                <rect key=\"frame\" x=\"93\" y=\"32\" width=\"204\" height=\"17\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" title=\"0\" id=\"Yhm-df-ia6\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" fixedFrame=\"YES\" allowsCharacterPickerTouchBarItem=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"fpp-Wh-yk8\">\n                                <rect key=\"frame\" x=\"93\" y=\"9\" width=\"204\" height=\"17\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" title=\"0\" id=\"u6k-VT-i91\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" fixedFrame=\"YES\" allowsCharacterPickerTouchBarItem=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"cCr-t9-Yh2\">\n                                <rect key=\"frame\" x=\"6\" y=\"33\" width=\"84\" height=\"17\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" alignment=\"right\" title=\"Sampling :\" id=\"sa0-ap-Mrf\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <textField horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" fixedFrame=\"YES\" allowsCharacterPickerTouchBarItem=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8MT-Om-LEF\">\n                                <rect key=\"frame\" x=\"6\" y=\"12\" width=\"84\" height=\"17\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" alignment=\"right\" title=\"Drawing : \" id=\"SAa-S6-INL\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                            <box verticalHuggingPriority=\"750\" fixedFrame=\"YES\" boxType=\"separator\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"gJV-SG-RkM\">\n                                <rect key=\"frame\" x=\"-1\" y=\"84\" width=\"863\" height=\"5\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                            </box>\n                            <textField horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" fixedFrame=\"YES\" allowsCharacterPickerTouchBarItem=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"pGA-2Q-WWb\">\n                                <rect key=\"frame\" x=\"93\" y=\"55\" width=\"204\" height=\"17\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                                <textFieldCell key=\"cell\" scrollable=\"YES\" lineBreakMode=\"clipping\" sendsActionOnEndEditing=\"YES\" title=\"0\" id=\"Gub-1I-YO8\">\n                                    <font key=\"font\" metaFont=\"system\"/>\n                                    <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                    <color key=\"backgroundColor\" name=\"controlColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                                </textFieldCell>\n                            </textField>\n                        </subviews>\n                        <constraints>\n                            <constraint firstItem=\"Mhq-Nd-dQE\" firstAttribute=\"centerX\" secondItem=\"OWz-zu-i81\" secondAttribute=\"centerX\" id=\"1mc-sL-LwX\"/>\n                            <constraint firstItem=\"Mhq-Nd-dQE\" firstAttribute=\"top\" secondItem=\"OWz-zu-i81\" secondAttribute=\"top\" constant=\"10\" id=\"JFg-Hx-Uta\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"drawingDurationLabel\" destination=\"fpp-Wh-yk8\" id=\"es2-46-ggF\"/>\n                        <outlet property=\"nbLabel\" destination=\"pGA-2Q-WWb\" id=\"3nd-Va-86o\"/>\n                        <outlet property=\"samplingDurationLabel\" destination=\"iIR-C9-jtl\" id=\"kRE-JH-7q3\"/>\n                        <outlet property=\"waveFormView\" destination=\"Mhq-Nd-dQE\" id=\"fgI-tM-3u0\"/>\n                    </connections>\n                </viewController>\n                <customObject id=\"dYH-Xq-aK0\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"112\" y=\"704\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Example_macOS/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>3.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>2</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>$(MACOSX_DEPLOYMENT_TARGET)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2017 Pereira da Silva. All rights reserved.</string>\n\t<key>NSMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2017 Benoit Pereira da Silva http://pereira-da-silva.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "Package.swift",
    "content": "// swift-tools-version:5.3\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"SoundWaveForm\",\n    products: [\n        // Products define the executables and libraries a package produces, and make them visible to other packages.\n        .library(\n            name: \"SoundWaveForm\",\n            targets: [\"SoundWaveForm\"]),\n\n    ],\n    dependencies: [\n    ],\n    targets: [\n        // Targets are the basic building blocks of a package. A target can define a module or a test suite.\n        // Targets can depend on other targets in this package, and on products in packages this package depends on.\n        .target(\n            name: \"SoundWaveForm\",\n            dependencies: []),\n    ]\n)\n"
  },
  {
    "path": "README.md",
    "content": "\n[![Swift 5](https://img.shields.io/badge/Swift-5.x-orange.svg)](https://swift.org)  [![Platform](https://img.shields.io/badge/platforms-macOS%20∙%20iOS%20-blue.svg)](https://developer.apple.com/platforms/) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n\n\n# SoundWaveForm\n\nAllows to extract sound samples from Video or Sounds files very efficiently (it relies on the Accelerate framework). SoundWaveForm expose an optimized cross platform drawing that renders the waveform into an Image.\n\n## It supports \n\n- macOS 10.11 & + \n- iOS 8 & + \n- swift 5.x \n- if you need to support swift 4 use [v3.0.2](https://github.com/benoit-pereira-da-silva/SoundWaveForm/releases/tag/v3.0.2)\n- if you need to support swift 3 use the [v2.0.1](https://github.com/benoit-pereira-da-silva/SoundWaveForm/releases/tag/v2.0.1)\n\n# Screen Shots\n\n![MacDown Screenshot](screenshot-1.png)\n![MacDown Screenshot](screenshot-2.png)\n![MacDown Screenshot](screenshot-3.png)\n\n# Usage sample \n\nThe framework is composed of a SamplesExtractor and a WaveFormDrawer.\n\n```swift \n\n// Configure the drawings\nlet configuration = WaveformConfiguration( size: waveFormView.bounds.size,\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: WaveColor.lightGray,\n\t\t\t\t\t\t\t\t\t\t\tcolor: WaveColor.red,\n\t\t\t\t\t\t\t\t\t\t\tstyle: .striped,\n\t\t\t\t\t\t\t\t\t\t\tposition: .middle,\n\t\t\t\t\t\t\t\t\t\t\tscale: 1)\n\n// Extract the downsampled samples\n// Proceed to extraction\nSamplesExtractor.samples(audioTrack: track,\n        timeRange: nil,\n        desiredNumberOfSamples: 500,\n        onSuccess:{ samples, sampleMax, id in\n        \t// Let's display the waveform in a view                     \n\t\t\tself.waveFormView.image = WaveFormDrawer.image(from: samples, with: configuration)\n        },\n        onFailure: { error, id in \n            ... // Handle the error e.g: print(\"\\(id ?? \"\") \\(error)\")\n        }\n)\n\n\n```\n\n## How to extract sample from a specified timeRange?\n\nYou can define AVAssetReader.timeRange.\n\n```swift\n\nlet asset = AVURLAsset(url: url)\nlet audioTracks:[AVAssetTrack] = asset.tracks(withMediaType: AVMediaTypeAudio)\nif let track:AVAssetTrack = audioTracks.first{\n\t\t\n\t\t// Define the timeRange from second 1 to second 10\n\t\tlet startTime = CMTime(seconds: 1, preferredTimescale: 1000)\n\t\tlet endTime = CMTime(seconds: 10, preferredTimescale: 1000)\n\t\tlet timeRange = CMTimeRangeMake(startTime, endTime)\n\n\t\t// Proceed to extraction (refer to previous code)\n\t\tSamplesExtractor.samples(audioTrack: track,\n\t\t\t\ttimeRange:timeRange,\n\t\t\t\tdesiredNumberOfSamples: 500,\n\t\t\t\tonSuccess:{ samples, sampleMax, id in\n\t\t\t\t\t... // Proceeed\n\t\t\t\t},\n\t\t\t\tonFailure: { error, id in \n\t\t\t\t\t... // Handle the error\n\t\t\t\t}\n\t\t)\n  \n}\n```\n\n## Installation\n- Via SPM: add `https://github.com/benoit-pereira-da-silva/SoundWaveForm`\n- Via Carthage: Add to your Cartfile  ` github \"benoit-pereira-da-silva/SoundWaveForm\"` \n- Copy the two source files : `Sources/SoundWaveForm/` \n\n## Inspiration\nThis project has been largely inspired by [FDWaveformView](https://github.com/fulldecent/FDWaveformView) and [DSWaveformImage](https://github.com/dmrschmidt/DSWaveformImage). Thanks to William aka [@fulldecent](https://github.com/fulldecent/) and Daniel [@dmrschmidt](https://github.com/dmrschmidt/).\n\t\n"
  },
  {
    "path": "Shared/ExampleViewController.swift",
    "content": "//\n//  ViewController.swift\n//  SoundWaveForm\n//\n//  Created by Benoit Pereira da silva on 22/07/2017.\n//  Copyright © 2017 Pereira da Silva. All rights reserved.\n//\n\nimport AVFoundation\nimport SoundWaveForm\n\n#if os(OSX)\n    import AppKit\n    public typealias UniversalViewController = NSViewController\n    public typealias UniversalImageView = NSImageView\n    public typealias UniversalLabel = NSTextField\n#elseif os(iOS)\n    import UIKit\n    public typealias UniversalViewController = UIViewController\n    public typealias UniversalImageView = UIImageView\n    public typealias UniversalLabel = UILabel\n#endif\n\n\npublic class ExampleViewController: UniversalViewController {\n\n    @IBOutlet weak var waveFormView: UniversalImageView!\n\n    @IBOutlet weak var nbLabel: UniversalLabel!\n\n    @IBOutlet weak var samplingDurationLabel: UniversalLabel!\n\n    @IBOutlet weak var drawingDurationLabel: UniversalLabel!\n\n    override public func viewDidLoad() {\n        super.viewDidLoad()\n\n\n        let url = Bundle.main.url(forResource: \"Beat110\", withExtension: \"mp3\")!\n        let asset = AVAsset(url: url)\n        let audioTracks:[AVAssetTrack] = asset.tracks(withMediaType: AVMediaType.audio)\n        if let track:AVAssetTrack = audioTracks.first{\n\n\n            //let timeRange = CMTimeRangeMake(CMTime(seconds: 0, preferredTimescale: 1000), CMTime(seconds: 1, preferredTimescale: 1000))\n            let timeRange:CMTimeRange? = nil\n            let width = Int(self.waveFormView.bounds.width)\n\n            // Let's extract the downsampled samples\n            let samplingStartTime = CFAbsoluteTimeGetCurrent()\n            SamplesExtractor.samples(audioTrack: track,\n                                     timeRange: timeRange,\n                                     desiredNumberOfSamples: width,\n                                     onSuccess: { s, sMax, _ in\n                                        let sampling = (samples: s, sampleMax: sMax)\n\n                                        let samplingDuration = CFAbsoluteTimeGetCurrent() - samplingStartTime\n\n                                        // Image Drawing\n                                        // Let's draw the sample into an image.\n\n                                        let configuration = WaveformConfiguration(size: self.waveFormView.bounds.size,\n                                                                                  color: WaveColor.red,\n                                                                                  backgroundColor:WaveColor.clear,\n                                                                                  style: .striped(period: 3),\n                                                                                  position: .middle,\n                                                                                  scale: 1,\n                                                                                  borderWidth:0,\n                                                                                  borderColor:WaveColor.red)\n\n                                        let drawingStartTime = CFAbsoluteTimeGetCurrent()\n                                        self.waveFormView.image = WaveFormDrawer.image(with: sampling, and: configuration)\n                                        let drawingDuration = CFAbsoluteTimeGetCurrent() - drawingStartTime\n\n                                        // Display the nb of samples, and the processing durations\n                                        #if os(OSX)\n                                            self.nbLabel.stringValue = \"\\(width)/\\(sampling.samples.count)\"\n                                            self.samplingDurationLabel.stringValue = String(format:\"%.3f s\",samplingDuration)\n                                            self.drawingDurationLabel.stringValue = String(format:\"%.3f s\",drawingDuration)\n                                        #elseif os(iOS)\n                                            self.nbLabel.text = \"\\(width)/\\(sampling.samples.count)\"\n                                            self.samplingDurationLabel.text = String(format:\"%.3f s\",samplingDuration)\n                                            self.drawingDurationLabel.text = String(format:\"%.3f s\",drawingDuration)\n                                        #endif\n\n\n\n\n            }, onFailure: { error, id in\n                print(\"\\(id ?? \"\") \\(error)\")\n            })\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "SoundWaveForm/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>3.0.2</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2017 Pereira da Silva. All rights reserved.</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "SoundWaveForm/SoundWaveForm.h",
    "content": "//\n//  SoundWaveForm.h\n//  SoundWaveForm\n//\n//  Created by Benoit Pereira da silva on 22/07/2017.\n//  Copyright © 2017 Pereira da Silva. All rights reserved.\n//\n\n#import <Cocoa/Cocoa.h>\n\n//! Project version number for SoundWaveForm.\nFOUNDATION_EXPORT double SoundWaveFormVersionNumber;\n\n//! Project version string for SoundWaveForm.\nFOUNDATION_EXPORT const unsigned char SoundWaveFormVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <SoundWaveForm/PublicHeader.h>\n\n\n"
  },
  {
    "path": "SoundWaveForm.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tE54A51C41F2729D400BDBD18 /* Taha.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = E54A51C31F2729D400BDBD18 /* Taha.mp3 */; };\n\t\tE54A51C51F2729D400BDBD18 /* Taha.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = E54A51C31F2729D400BDBD18 /* Taha.mp3 */; };\n\t\tE5732E2B1F25EA0A0077642B /* ExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5732E281F25EA0A0077642B /* ExampleViewController.swift */; };\n\t\tE58D2F201F273CF900C7D97F /* Beat110.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = E58D2F1F1F273CF900C7D97F /* Beat110.mp3 */; };\n\t\tE58D2F211F273CF900C7D97F /* Beat110.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = E58D2F1F1F273CF900C7D97F /* Beat110.mp3 */; };\n\t\tE5A0BF791F25F20B0024564C /* ExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5732E281F25EA0A0077642B /* ExampleViewController.swift */; };\n\t\tE5B0ECFC1F238A40005D1A58 /* SoundWaveForm.h in Headers */ = {isa = PBXBuildFile; fileRef = E5B0ECFA1F238A40005D1A58 /* SoundWaveForm.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tE5B0ED5A1F238B6B005D1A58 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5B0ED591F238B6B005D1A58 /* AppDelegate.swift */; };\n\t\tE5B0ED5E1F238B6B005D1A58 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E5B0ED5D1F238B6B005D1A58 /* Assets.xcassets */; };\n\t\tE5B0ED611F238B6B005D1A58 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E5B0ED5F1F238B6B005D1A58 /* Main.storyboard */; };\n\t\tE5B0ED6F1F238B9D005D1A58 /* SoundWaveFormTouch.h in Headers */ = {isa = PBXBuildFile; fileRef = E5B0ED6D1F238B9D005D1A58 /* SoundWaveFormTouch.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tE5B0ED7A1F238BB2005D1A58 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5B0ED791F238BB2005D1A58 /* AppDelegate.swift */; };\n\t\tE5B0ED7F1F238BB2005D1A58 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E5B0ED7D1F238BB2005D1A58 /* Main.storyboard */; };\n\t\tE5B0ED811F238BB2005D1A58 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E5B0ED801F238BB2005D1A58 /* Assets.xcassets */; };\n\t\tE5B0ED841F238BB2005D1A58 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E5B0ED821F238BB2005D1A58 /* LaunchScreen.storyboard */; };\n\t\tE5B0ED8B1F238C44005D1A58 /* SamplesExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5B0ED8A1F238C44005D1A58 /* SamplesExtractor.swift */; };\n\t\tE5B0ED8C1F238C44005D1A58 /* SamplesExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5B0ED8A1F238C44005D1A58 /* SamplesExtractor.swift */; };\n\t\tE5B0ED8F1F239050005D1A58 /* WaveFormDrawer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5B0ED8E1F239050005D1A58 /* WaveFormDrawer.swift */; };\n\t\tE5B0ED901F239050005D1A58 /* WaveFormDrawer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5B0ED8E1F239050005D1A58 /* WaveFormDrawer.swift */; };\n\t\tE5B0ED971F239D69005D1A58 /* SoundWaveForm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5B0ECF71F238A40005D1A58 /* SoundWaveForm.framework */; };\n\t\tE5B0ED981F239D69005D1A58 /* SoundWaveForm.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E5B0ECF71F238A40005D1A58 /* SoundWaveForm.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\tE5DEEC8D2010EB7500ADAE3F /* SoundWaveForm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5B0ED6B1F238B9D005D1A58 /* SoundWaveForm.framework */; };\n\t\tE5DEEC8E2010EB7500ADAE3F /* SoundWaveForm.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E5B0ED6B1F238B9D005D1A58 /* SoundWaveForm.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tE5B0ED991F239D69005D1A58 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = E5B0ECEE1F238A40005D1A58 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E5B0ECF61F238A40005D1A58;\n\t\t\tremoteInfo = SoundWaveForm;\n\t\t};\n\t\tE5DEEC8F2010EB7500ADAE3F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = E5B0ECEE1F238A40005D1A58 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E5B0ED6A1F238B9D005D1A58;\n\t\t\tremoteInfo = SoundWaveFormTouch;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\tE5B0ED9B1F239D69005D1A58 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\tE5B0ED981F239D69005D1A58 /* SoundWaveForm.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE5DEEC912010EB7500ADAE3F /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\tE5DEEC8E2010EB7500ADAE3F /* SoundWaveForm.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\tE54A51C31F2729D400BDBD18 /* Taha.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Taha.mp3; sourceTree = \"<group>\"; };\n\t\tE5732E281F25EA0A0077642B /* ExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleViewController.swift; sourceTree = \"<group>\"; };\n\t\tE58D2F1F1F273CF900C7D97F /* Beat110.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Beat110.mp3; sourceTree = \"<group>\"; };\n\t\tE5B0ECF71F238A40005D1A58 /* SoundWaveForm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SoundWaveForm.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE5B0ECFA1F238A40005D1A58 /* SoundWaveForm.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SoundWaveForm.h; sourceTree = \"<group>\"; };\n\t\tE5B0ECFB1F238A40005D1A58 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tE5B0ED571F238B6B005D1A58 /* Example_macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example_macOS.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE5B0ED591F238B6B005D1A58 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tE5B0ED5D1F238B6B005D1A58 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tE5B0ED601F238B6B005D1A58 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tE5B0ED621F238B6B005D1A58 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tE5B0ED6B1F238B9D005D1A58 /* SoundWaveForm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SoundWaveForm.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE5B0ED6D1F238B9D005D1A58 /* SoundWaveFormTouch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SoundWaveFormTouch.h; sourceTree = \"<group>\"; };\n\t\tE5B0ED6E1F238B9D005D1A58 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tE5B0ED771F238BB2005D1A58 /* Example_iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE5B0ED791F238BB2005D1A58 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tE5B0ED7E1F238BB2005D1A58 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tE5B0ED801F238BB2005D1A58 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tE5B0ED831F238BB2005D1A58 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tE5B0ED851F238BB2005D1A58 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tE5B0ED8A1F238C44005D1A58 /* SamplesExtractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SamplesExtractor.swift; sourceTree = \"<group>\"; };\n\t\tE5B0ED8E1F239050005D1A58 /* WaveFormDrawer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WaveFormDrawer.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tE5B0ECF31F238A40005D1A58 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE5B0ED541F238B6B005D1A58 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE5B0ED971F239D69005D1A58 /* SoundWaveForm.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE5B0ED671F238B9D005D1A58 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE5B0ED741F238BB2005D1A58 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE5DEEC8D2010EB7500ADAE3F /* SoundWaveForm.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\tE5727E372549C48100387730 /* SoundWaveForm */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE5B0ED8A1F238C44005D1A58 /* SamplesExtractor.swift */,\n\t\t\t\tE5B0ED8E1F239050005D1A58 /* WaveFormDrawer.swift */,\n\t\t\t);\n\t\t\tpath = SoundWaveForm;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE5732E261F25EA0A0077642B /* Shared */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE58D2F1F1F273CF900C7D97F /* Beat110.mp3 */,\n\t\t\t\tE54A51C31F2729D400BDBD18 /* Taha.mp3 */,\n\t\t\t\tE5732E281F25EA0A0077642B /* ExampleViewController.swift */,\n\t\t\t);\n\t\t\tpath = Shared;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE5B0ECED1F238A40005D1A58 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE5732E261F25EA0A0077642B /* Shared */,\n\t\t\t\tE5B0ED891F238C24005D1A58 /* Sources */,\n\t\t\t\tE5B0ECF91F238A40005D1A58 /* SoundWaveForm */,\n\t\t\t\tE5B0ED6C1F238B9D005D1A58 /* SoundWaveFormTouch */,\n\t\t\t\tE5B0ED581F238B6B005D1A58 /* Example_macOS */,\n\t\t\t\tE5B0ED781F238BB2005D1A58 /* Example_iOS */,\n\t\t\t\tE5B0ECF81F238A40005D1A58 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE5B0ECF81F238A40005D1A58 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE5B0ECF71F238A40005D1A58 /* SoundWaveForm.framework */,\n\t\t\t\tE5B0ED571F238B6B005D1A58 /* Example_macOS.app */,\n\t\t\t\tE5B0ED6B1F238B9D005D1A58 /* SoundWaveForm.framework */,\n\t\t\t\tE5B0ED771F238BB2005D1A58 /* Example_iOS.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE5B0ECF91F238A40005D1A58 /* SoundWaveForm */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE5B0ECFA1F238A40005D1A58 /* SoundWaveForm.h */,\n\t\t\t\tE5B0ECFB1F238A40005D1A58 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = SoundWaveForm;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE5B0ED581F238B6B005D1A58 /* Example_macOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE5B0ED591F238B6B005D1A58 /* AppDelegate.swift */,\n\t\t\t\tE5B0ED5D1F238B6B005D1A58 /* Assets.xcassets */,\n\t\t\t\tE5B0ED5F1F238B6B005D1A58 /* Main.storyboard */,\n\t\t\t\tE5B0ED621F238B6B005D1A58 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Example_macOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE5B0ED6C1F238B9D005D1A58 /* SoundWaveFormTouch */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE5B0ED6D1F238B9D005D1A58 /* SoundWaveFormTouch.h */,\n\t\t\t\tE5B0ED6E1F238B9D005D1A58 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = SoundWaveFormTouch;\n\t\t\tsourceTree = SOURCE_ROOT;\n\t\t};\n\t\tE5B0ED781F238BB2005D1A58 /* Example_iOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE5B0ED791F238BB2005D1A58 /* AppDelegate.swift */,\n\t\t\t\tE5B0ED7D1F238BB2005D1A58 /* Main.storyboard */,\n\t\t\t\tE5B0ED801F238BB2005D1A58 /* Assets.xcassets */,\n\t\t\t\tE5B0ED821F238BB2005D1A58 /* LaunchScreen.storyboard */,\n\t\t\t\tE5B0ED851F238BB2005D1A58 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Example_iOS;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE5B0ED891F238C24005D1A58 /* Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE5727E372549C48100387730 /* SoundWaveForm */,\n\t\t\t);\n\t\t\tpath = Sources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\tE5B0ECF41F238A40005D1A58 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE5B0ECFC1F238A40005D1A58 /* SoundWaveForm.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE5B0ED681F238B9D005D1A58 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE5B0ED6F1F238B9D005D1A58 /* SoundWaveFormTouch.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\tE5B0ECF61F238A40005D1A58 /* SoundWaveForm */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E5B0ECFF1F238A40005D1A58 /* Build configuration list for PBXNativeTarget \"SoundWaveForm\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE5B0ECF21F238A40005D1A58 /* Sources */,\n\t\t\t\tE5B0ECF31F238A40005D1A58 /* Frameworks */,\n\t\t\t\tE5B0ECF41F238A40005D1A58 /* Headers */,\n\t\t\t\tE5B0ECF51F238A40005D1A58 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = SoundWaveForm;\n\t\t\tproductName = SoundWaveForm;\n\t\t\tproductReference = E5B0ECF71F238A40005D1A58 /* SoundWaveForm.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tE5B0ED561F238B6B005D1A58 /* Example_macOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E5B0ED631F238B6B005D1A58 /* Build configuration list for PBXNativeTarget \"Example_macOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE5B0ED531F238B6B005D1A58 /* Sources */,\n\t\t\t\tE5B0ED541F238B6B005D1A58 /* Frameworks */,\n\t\t\t\tE5B0ED551F238B6B005D1A58 /* Resources */,\n\t\t\t\tE5B0ED9B1F239D69005D1A58 /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tE5B0ED9A1F239D69005D1A58 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Example_macOS;\n\t\t\tproductName = Example_macOS;\n\t\t\tproductReference = E5B0ED571F238B6B005D1A58 /* Example_macOS.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tE5B0ED6A1F238B9D005D1A58 /* SoundWaveFormTouch */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E5B0ED701F238B9D005D1A58 /* Build configuration list for PBXNativeTarget \"SoundWaveFormTouch\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE5B0ED661F238B9D005D1A58 /* Sources */,\n\t\t\t\tE5B0ED671F238B9D005D1A58 /* Frameworks */,\n\t\t\t\tE5B0ED681F238B9D005D1A58 /* Headers */,\n\t\t\t\tE5B0ED691F238B9D005D1A58 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = SoundWaveFormTouch;\n\t\t\tproductName = SoundWaveFormTouch;\n\t\t\tproductReference = E5B0ED6B1F238B9D005D1A58 /* SoundWaveForm.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tE5B0ED761F238BB2005D1A58 /* Example_iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E5B0ED861F238BB2005D1A58 /* Build configuration list for PBXNativeTarget \"Example_iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE5B0ED731F238BB2005D1A58 /* Sources */,\n\t\t\t\tE5B0ED741F238BB2005D1A58 /* Frameworks */,\n\t\t\t\tE5B0ED751F238BB2005D1A58 /* Resources */,\n\t\t\t\tE5DEEC912010EB7500ADAE3F /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tE5DEEC902010EB7500ADAE3F /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Example_iOS;\n\t\t\tproductName = Example_iOS;\n\t\t\tproductReference = E5B0ED771F238BB2005D1A58 /* Example_iOS.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tE5B0ECEE1F238A40005D1A58 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0830;\n\t\t\t\tLastUpgradeCheck = 1210;\n\t\t\t\tORGANIZATIONNAME = \"Pereira da Silva\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tE5B0ECF61F238A40005D1A58 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.3.3;\n\t\t\t\t\t\tLastSwiftMigration = 0920;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\tE5B0ED561F238B6B005D1A58 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.3.3;\n\t\t\t\t\t\tDevelopmentTeam = LX7WHQV846;\n\t\t\t\t\t\tLastSwiftMigration = 0920;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\tE5B0ED6A1F238B9D005D1A58 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.3.3;\n\t\t\t\t\t\tLastSwiftMigration = 1130;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\tE5B0ED761F238BB2005D1A58 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.3.3;\n\t\t\t\t\t\tDevelopmentTeam = LX7WHQV846;\n\t\t\t\t\t\tLastSwiftMigration = 1130;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = E5B0ECF11F238A40005D1A58 /* Build configuration list for PBXProject \"SoundWaveForm\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = E5B0ECED1F238A40005D1A58;\n\t\t\tproductRefGroup = E5B0ECF81F238A40005D1A58 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tE5B0ECF61F238A40005D1A58 /* SoundWaveForm */,\n\t\t\t\tE5B0ED561F238B6B005D1A58 /* Example_macOS */,\n\t\t\t\tE5B0ED6A1F238B9D005D1A58 /* SoundWaveFormTouch */,\n\t\t\t\tE5B0ED761F238BB2005D1A58 /* Example_iOS */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tE5B0ECF51F238A40005D1A58 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE5B0ED551F238B6B005D1A58 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE54A51C41F2729D400BDBD18 /* Taha.mp3 in Resources */,\n\t\t\t\tE5B0ED5E1F238B6B005D1A58 /* Assets.xcassets in Resources */,\n\t\t\t\tE5B0ED611F238B6B005D1A58 /* Main.storyboard in Resources */,\n\t\t\t\tE58D2F201F273CF900C7D97F /* Beat110.mp3 in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE5B0ED691F238B9D005D1A58 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE5B0ED751F238BB2005D1A58 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE58D2F211F273CF900C7D97F /* Beat110.mp3 in Resources */,\n\t\t\t\tE54A51C51F2729D400BDBD18 /* Taha.mp3 in Resources */,\n\t\t\t\tE5B0ED841F238BB2005D1A58 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tE5B0ED811F238BB2005D1A58 /* Assets.xcassets in Resources */,\n\t\t\t\tE5B0ED7F1F238BB2005D1A58 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tE5B0ECF21F238A40005D1A58 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE5B0ED8F1F239050005D1A58 /* WaveFormDrawer.swift in Sources */,\n\t\t\t\tE5B0ED8B1F238C44005D1A58 /* SamplesExtractor.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE5B0ED531F238B6B005D1A58 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE5B0ED5A1F238B6B005D1A58 /* AppDelegate.swift in Sources */,\n\t\t\t\tE5732E2B1F25EA0A0077642B /* ExampleViewController.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE5B0ED661F238B9D005D1A58 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE5B0ED901F239050005D1A58 /* WaveFormDrawer.swift in Sources */,\n\t\t\t\tE5B0ED8C1F238C44005D1A58 /* SamplesExtractor.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE5B0ED731F238BB2005D1A58 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE5B0ED7A1F238BB2005D1A58 /* AppDelegate.swift in Sources */,\n\t\t\t\tE5A0BF791F25F20B0024564C /* ExampleViewController.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\tE5B0ED9A1F239D69005D1A58 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = E5B0ECF61F238A40005D1A58 /* SoundWaveForm */;\n\t\t\ttargetProxy = E5B0ED991F239D69005D1A58 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE5DEEC902010EB7500ADAE3F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = E5B0ED6A1F238B9D005D1A58 /* SoundWaveFormTouch */;\n\t\t\ttargetProxy = E5DEEC8F2010EB7500ADAE3F /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\tE5B0ED5F1F238B6B005D1A58 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tE5B0ED601F238B6B005D1A58 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE5B0ED7D1F238BB2005D1A58 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tE5B0ED7E1F238BB2005D1A58 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE5B0ED821F238BB2005D1A58 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tE5B0ED831F238BB2005D1A58 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\tE5B0ECFD1F238A40005D1A58 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.12;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE5B0ECFE1F238A40005D1A58 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.12;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE5B0ED001F238A40005D1A58 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = SoundWaveForm/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.11;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.pereira-da-silva.SoundWaveForm\";\n\t\t\t\tPRODUCT_NAME = SoundWaveForm;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE5B0ED011F238A40005D1A58 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tINFOPLIST_FILE = SoundWaveForm/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.11;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.pereira-da-silva.SoundWaveForm\";\n\t\t\t\tPRODUCT_NAME = SoundWaveForm;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE5B0ED641F238B6B005D1A58 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Mac Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEVELOPMENT_TEAM = LX7WHQV846;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tINFOPLIST_FILE = Example_macOS/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.11;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.pereira-da-silva.Example-macOS\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE5B0ED651F238B6B005D1A58 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Mac Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEVELOPMENT_TEAM = LX7WHQV846;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tINFOPLIST_FILE = Example_macOS/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.11;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.pereira-da-silva.Example-macOS\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE5B0ED711F238B9D005D1A58 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = SoundWaveFormTouch/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.pereira-da-silva.SoundWaveFormTouch\";\n\t\t\t\tPRODUCT_NAME = SoundWaveForm;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE5B0ED721F238B9D005D1A58 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = SoundWaveFormTouch/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.pereira-da-silva.SoundWaveFormTouch\";\n\t\t\t\tPRODUCT_NAME = SoundWaveForm;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSUPPORTS_MACCATALYST = NO;\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE5B0ED871F238BB2005D1A58 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = LX7WHQV846;\n\t\t\t\tINFOPLIST_FILE = Example_iOS/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.pereira-da-silva.ExampleIOS\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE5B0ED881F238BB2005D1A58 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = LX7WHQV846;\n\t\t\t\tINFOPLIST_FILE = Example_iOS/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.pereira-da-silva.ExampleIOS\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tE5B0ECF11F238A40005D1A58 /* Build configuration list for PBXProject \"SoundWaveForm\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE5B0ECFD1F238A40005D1A58 /* Debug */,\n\t\t\t\tE5B0ECFE1F238A40005D1A58 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tE5B0ECFF1F238A40005D1A58 /* Build configuration list for PBXNativeTarget \"SoundWaveForm\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE5B0ED001F238A40005D1A58 /* Debug */,\n\t\t\t\tE5B0ED011F238A40005D1A58 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tE5B0ED631F238B6B005D1A58 /* Build configuration list for PBXNativeTarget \"Example_macOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE5B0ED641F238B6B005D1A58 /* Debug */,\n\t\t\t\tE5B0ED651F238B6B005D1A58 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tE5B0ED701F238B9D005D1A58 /* Build configuration list for PBXNativeTarget \"SoundWaveFormTouch\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE5B0ED711F238B9D005D1A58 /* Debug */,\n\t\t\t\tE5B0ED721F238B9D005D1A58 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tE5B0ED861F238BB2005D1A58 /* Build configuration list for PBXNativeTarget \"Example_iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE5B0ED871F238BB2005D1A58 /* Debug */,\n\t\t\t\tE5B0ED881F238BB2005D1A58 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = E5B0ECEE1F238A40005D1A58 /* Project object */;\n}\n"
  },
  {
    "path": "SoundWaveForm.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:SoundWaveForm.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "SoundWaveForm.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "SoundWaveForm.xcodeproj/xcshareddata/xcschemes/SoundWaveForm.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1210\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"E5B0ECF61F238A40005D1A58\"\n               BuildableName = \"SoundWaveForm.framework\"\n               BlueprintName = \"SoundWaveForm\"\n               ReferencedContainer = \"container:SoundWaveForm.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"E5B0ECF61F238A40005D1A58\"\n            BuildableName = \"SoundWaveForm.framework\"\n            BlueprintName = \"SoundWaveForm\"\n            ReferencedContainer = \"container:SoundWaveForm.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"E5B0ECF61F238A40005D1A58\"\n            BuildableName = \"SoundWaveForm.framework\"\n            BlueprintName = \"SoundWaveForm\"\n            ReferencedContainer = \"container:SoundWaveForm.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "SoundWaveForm.xcodeproj/xcshareddata/xcschemes/SoundWaveFormTouch.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1210\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"E5B0ED6A1F238B9D005D1A58\"\n               BuildableName = \"SoundWaveForm.framework\"\n               BlueprintName = \"SoundWaveFormTouch\"\n               ReferencedContainer = \"container:SoundWaveForm.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"E5B0ED6A1F238B9D005D1A58\"\n            BuildableName = \"SoundWaveForm.framework\"\n            BlueprintName = \"SoundWaveFormTouch\"\n            ReferencedContainer = \"container:SoundWaveForm.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"E5B0ED6A1F238B9D005D1A58\"\n            BuildableName = \"SoundWaveForm.framework\"\n            BlueprintName = \"SoundWaveFormTouch\"\n            ReferencedContainer = \"container:SoundWaveForm.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "SoundWaveFormTouch/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>3.0.2</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "SoundWaveFormTouch/SoundWaveFormTouch.h",
    "content": "//\n//  SoundWaveFormTouch.h\n//  SoundWaveFormTouch\n//\n//  Created by Benoit Pereira da silva on 22/07/2017.\n//  Copyright © 2017 Pereira da Silva. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for SoundWaveFormTouch.\nFOUNDATION_EXPORT double SoundWaveFormTouchVersionNumber;\n\n//! Project version string for SoundWaveFormTouch.\nFOUNDATION_EXPORT const unsigned char SoundWaveFormTouchVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <SoundWaveFormTouch/PublicHeader.h>\n\n\n"
  },
  {
    "path": "Sources/SoundWaveForm/SamplesExtractor.swift",
    "content": "//\n//  Extractor.swift\n//  SoundWaveForm\n//\n//  I ve been writing This extractor after analyzing a bunch of existing frameworks\n//\n//  https://github.com/fulldecent/FDWaveformView\n//  https://github.com/dmrschmidt/DSWaveformImage\n//  ... \n//  \n//  - added supports iOS & macOS\n//  - ability to setup a timeRange to restrict automatically the zone of interest.\n//  - improved performance\n//\n//  Created by Benoit Pereira da silva on 22/07/2017. https://pereira-da-silva.com\n//  Copyright © 2017 Pereira da Silva. All rights reserved.\n//\n\nimport Foundation\nimport Accelerate\nimport AVFoundation\n\npublic enum SamplesExtractorError: Error {\n    case assetNotFound\n    case audioTrackNotFound\n    case audioTrackMediaTypeMissMatch(mediatype: AVMediaType)\n    case readingError(message: String)\n    case extractionHasFailed\n}\n\n\npublic struct SamplesExtractor{\n\n    \n    public fileprivate(set) static var outputSettings: [String : Any] = [\n        AVFormatIDKey: kAudioFormatLinearPCM,\n        AVLinearPCMBitDepthKey: 16,\n        AVLinearPCMIsBigEndianKey: false,\n        AVLinearPCMIsFloatKey: false,\n        AVLinearPCMIsNonInterleaved: false\n    ]\n\n    public static var noiseFloor: Float = -50.0 // everything below -X dB will be clipped\n\n\n    /// Samples a sound track\n    /// There is no guarantee you will obtain exactly the  desired number of samples\n    /// You can compensate in your drawing logic\n    ///\n    ///\n    /// - Parameters:\n    ///   - audioTrack: the audio track\n    ///   - timeRange: the sampling timerange\n    ///   - desiredNumberOfSamples: the desired number of samples\n    ///   - onSuccess: the success handler with the samples and the sampleMax\n    ///   - onFailure: the failure handler with a contextual error\n    ///   - identifiedBy: an optional identifier to be used to support multiple consumers.\n    public static func samples( audioTrack: AVAssetTrack,\n                                timeRange: CMTimeRange?,\n                                desiredNumberOfSamples: Int = 100,\n                                onSuccess: @escaping (_ samples: [Float], _ sampleMax: Float,_ identifier: String?)->(),\n                                onFailure: @escaping (_ error:Error,_ identifier: String?)->(),\n                                identifiedBy: String? = nil){\n        do{\n            guard let asset = audioTrack.asset else {\n                throw SamplesExtractorError.assetNotFound\n            }\n            let assetReader = try AVAssetReader(asset: asset)\n            if let timeRange = timeRange{\n                assetReader.timeRange = timeRange\n            }\n\n            guard audioTrack.mediaType == .audio else {\n                throw SamplesExtractorError.audioTrackMediaTypeMissMatch(mediatype: audioTrack.mediaType)\n            }\n\n            let trackOutput = AVAssetReaderTrackOutput(track: audioTrack, outputSettings: SamplesExtractor.outputSettings)\n            assetReader.add(trackOutput)\n\n            SamplesExtractor._extract( samplesFrom: assetReader,\n                                       asset: assetReader.asset,\n                                       track: audioTrack,\n                                       downsampledTo: desiredNumberOfSamples,\n                                       onSuccess: {samples, sampleMax in\n                                        switch assetReader.status {\n                                        case .completed:\n                                            onSuccess(self._normalize(samples), sampleMax, identifiedBy)\n                                        default:\n                                            onFailure(SamplesExtractorError.readingError(message:\" reading waveform audio data has failed \\(assetReader.status)\"), identifiedBy)\n                                        }\n            }, onFailure: { error in\n                onFailure(error, identifiedBy)\n            })\n\n        }catch{\n            onFailure(error,identifiedBy)\n        }\n    }\n\n\n    fileprivate static func _extract( samplesFrom reader: AVAssetReader,\n                                      asset: AVAsset,\n                                      track:AVAssetTrack,\n                                      downsampledTo desiredNumberOfSamples: Int,\n                                      onSuccess: @escaping (_ samples: [Float], _ sampleMax: Float)->(),\n                                      onFailure: @escaping (_ error:Error)->()){\n\n        asset.loadValuesAsynchronously(forKeys: [\"duration\"]) {\n            var error: NSError?\n            let status = asset.statusOfValue(forKey: \"duration\", error: &error)\n            switch status {\n            case .loaded:\n                guard\n                    let formatDescriptions = track.formatDescriptions as? [CMAudioFormatDescription],\n                    let audioFormatDesc = formatDescriptions.first,\n                    let asbd = CMAudioFormatDescriptionGetStreamBasicDescription(audioFormatDesc)\n                    else { break }\n\n\n                var sampleMax:Float = -Float.infinity\n\n                #if os(OSX)\n                let positiveInfinity = kCMTimePositiveInfinity\n                #else\n                let positiveInfinity = CMTime.positiveInfinity\n                #endif\n\n                // By default the reader's timerange is set to CMTimeRangeMake(kCMTimeZero, kCMTimePositiveInfinity)\n                // So if duration == kCMTimePositiveInfinity we should use the asset duration\n                let duration:Double = (reader.timeRange.duration == positiveInfinity) ? Double(asset.duration.value) : Double(reader.timeRange.duration.value)\n                let timscale:Double = (reader.timeRange.duration == positiveInfinity) ? Double(asset.duration.timescale) :Double(reader.timeRange.start.timescale)\n\n                let numOfTotalSamples = (asbd.pointee.mSampleRate) * duration / timscale\n\n                var channelCount = 1\n\n                let formatDesc = track.formatDescriptions\n                for item in formatDesc {\n                    guard let fmtDesc = CMAudioFormatDescriptionGetStreamBasicDescription(item as! CMAudioFormatDescription) else { continue }\n                    channelCount = Int(fmtDesc.pointee.mChannelsPerFrame)\n                }\n\n                let samplesPerPixel = Int(max(1,  Double(channelCount) * numOfTotalSamples / Double(desiredNumberOfSamples)))\n                let filter = [Float](repeating: 1.0 / Float(samplesPerPixel), count:samplesPerPixel)\n\n                var outputSamples = [Float]()\n                var sampleBuffer = Data()\n\n                // 16-bit samples\n                reader.startReading()\n\n                while reader.status == .reading {\n                    guard let readSampleBuffer = reader.outputs[0].copyNextSampleBuffer(),\n                        let readBuffer = CMSampleBufferGetDataBuffer(readSampleBuffer) else {\n                            break\n                    }\n\n                    // Append audio sample buffer into our current sample buffer\n                    var readBufferLength = 0\n                    #if os(OSX)\n                    var readBufferPointer: UnsafeMutablePointer<Int8>?\n                    CMBlockBufferGetDataPointer(readBuffer, 0, &readBufferLength, nil, &readBufferPointer)\n                    sampleBuffer.append(UnsafeBufferPointer(start: readBufferPointer, count: readBufferLength))\n                    CMSampleBufferInvalidate(readSampleBuffer)\n                    #else\n                    var readBufferPointer: UnsafeMutablePointer<Int8>?\n                    CMBlockBufferGetDataPointer(readBuffer, atOffset: 0, lengthAtOffsetOut: &readBufferLength, totalLengthOut: nil, dataPointerOut: &readBufferPointer)\n                    sampleBuffer.append(UnsafeBufferPointer(start: readBufferPointer, count: readBufferLength))\n                    CMSampleBufferInvalidate(readSampleBuffer)\n                    #endif\n                    let totalSamples = sampleBuffer.count / MemoryLayout<Int16>.size\n                    let downSampledLength = (totalSamples / samplesPerPixel)\n                    let samplesToProcess = downSampledLength * samplesPerPixel\n\n                    guard samplesToProcess > 0 else { continue }\n\n                    self._processSamples(fromData: &sampleBuffer,\n                                         sampleMax: &sampleMax,\n                                         outputSamples: &outputSamples,\n                                         samplesToProcess: samplesToProcess,\n                                         downSampledLength: downSampledLength,\n                                         samplesPerPixel: samplesPerPixel,\n                                         filter: filter)\n                }\n\n\n                // Process the remaining samples at the end which didn't fit into samplesPerPixel\n                let samplesToProcess = sampleBuffer.count / MemoryLayout<Int16>.size\n                if samplesToProcess > 0 {\n                    let downSampledLength = 1\n                    let samplesPerPixel = samplesToProcess\n\n                    let filter = [Float](repeating: 1.0 / Float(samplesPerPixel), count: samplesPerPixel)\n\n                    self._processSamples(fromData: &sampleBuffer,\n                                         sampleMax: &sampleMax,\n                                         outputSamples: &outputSamples,\n                                         samplesToProcess: samplesToProcess,\n                                         downSampledLength: downSampledLength,\n                                         samplesPerPixel: samplesPerPixel,\n                                         filter: filter)\n                }\n                DispatchQueue.main.async {\n                    onSuccess(outputSamples, sampleMax)\n                }\n                return\n\n            case .failed, .cancelled, .loading, .unknown:\n                DispatchQueue.main.async {\n                    onFailure(SamplesExtractorError.readingError(message: \"could not load asset: \\(error?.localizedDescription ?? \"Unknown error\" )\"))\n                }\n            @unknown default:\n              DispatchQueue.main.async {\n                    onFailure(SamplesExtractorError.readingError(message: \"could not load asset unsupported error: \\(error?.localizedDescription ?? \"\" )\"))\n                }\n            }\n        }\n\n    }\n\n    private static func _processSamples( fromData sampleBuffer: inout Data,\n                                         sampleMax: inout Float,\n                                         outputSamples: inout [Float],\n                                         samplesToProcess: Int,\n                                         downSampledLength: Int,\n                                         samplesPerPixel: Int,\n                                         filter: [Float]){\n        sampleBuffer.withUnsafeBytes { (samples: UnsafePointer<Int16>) in\n\n            var processingBuffer = [Float](repeating: 0.0, count: samplesToProcess)\n\n            let sampleCount = vDSP_Length(samplesToProcess)\n\n            //Convert 16bit int samples to floats\n            vDSP_vflt16(samples, 1, &processingBuffer, 1, sampleCount)\n\n            //Take the absolute values to get amplitude\n            vDSP_vabs(processingBuffer, 1, &processingBuffer, 1, sampleCount)\n\n            //Convert to dB\n            var zero: Float = 32768.0\n            vDSP_vdbcon(processingBuffer, 1, &zero, &processingBuffer, 1, sampleCount, 1)\n\n            //Clip to [noiseFloor, 0]\n            var ceil: Float = 0.0\n            var noiseFloorFloat = SamplesExtractor.noiseFloor\n            vDSP_vclip(processingBuffer, 1, &noiseFloorFloat, &ceil, &processingBuffer, 1, sampleCount)\n\n            //Downsample and average\n            var downSampledData = [Float](repeating: 0.0, count: downSampledLength)\n            vDSP_desamp(processingBuffer,\n                        vDSP_Stride(samplesPerPixel),\n                        filter, &downSampledData,\n                        vDSP_Length(downSampledLength),\n                        vDSP_Length(samplesPerPixel))\n\n            for element in downSampledData{\n                if element > sampleMax { sampleMax = element }\n            }\n            // Remove processed samples\n            sampleBuffer.removeFirst(samplesToProcess * MemoryLayout<Int16>.size)\n            outputSamples += downSampledData\n        }\n    }\n\n    fileprivate static func _normalize(_ samples: [Float]) -> [Float] {\n        let noiseFloor = SamplesExtractor.noiseFloor\n        return samples.map { $0 / noiseFloor }\n    }\n\n}\n\n"
  },
  {
    "path": "Sources/SoundWaveForm/WaveFormDrawer.swift",
    "content": "//\n//  WaveFormDrawer.swift\n//  SoundWaveForm\n//  Drawing method was extracted from by https://github.com/dmrschmidt/DSWaveformImage\n//  I ve added macOS support and fixed and refactored.\n\n//  Created by Benoit Pereira da silva on 22/07/2017.\n//  Copyright © 2017 Pereira da Silva. All rights reserved.\n//\n\nimport Foundation\nimport AVFoundation\n\n// MARK : - OSX & iOS compatibilty\n\n#if os(OSX)\nimport AppKit\n\npublic typealias WaveImage = NSImage\npublic typealias WaveColor = NSColor\npublic var mainScreenScale:CGFloat = 1\n\n#elseif os(iOS)\n\nimport UIKit\n\npublic typealias WaveImage = UIImage\npublic typealias WaveColor = UIColor\npublic var mainScreenScale = UIScreen.main.scale\n\nextension WaveColor {\n\n    // Cocoa Touch to Cocoa adaptation\n    func highlight(withLevel: CGFloat) -> WaveColor? {\n        var hue: CGFloat = 0.0, saturation: CGFloat = 0.0, brightness: CGFloat = 0.0, alpha: CGFloat = 0.0\n        self.getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha)\n        let brightnessAdjustment: CGFloat = withLevel\n        let adjustmentModifier: CGFloat = brightness < brightnessAdjustment ? 1 : -1\n        let newBrightness = brightness + brightnessAdjustment * adjustmentModifier\n        return WaveColor(hue: hue, saturation: saturation, brightness: newBrightness, alpha: alpha)\n    }\n}\n\n\n#endif\n\n\n// MARK : - Enums\n\n\n/**\n Position of the drawn waveform:\n - **top**: Draws the waveform at the top of the image, such that only the bottom 50% are visible.\n - **top**: Draws the waveform in the middle the image, such that the entire waveform is visible.\n - **bottom**: Draws the waveform at the bottom of the image, such that only the top 50% are visible.\n */\npublic enum WaveformPosition: Int {\n    case top    = -1\n    case middle =  0\n    case bottom =  1\n}\n\n/**\n Style of the waveform which is used during drawing:\n - **filled**: Use solid color for the waveform.\n - **gradient**: Use gradient based on color for the waveform.\n - **striped**: Use striped filling based on color for the waveform.\n */\npublic enum WaveformStyle{\n    case filled\n    case gradient\n    case striped(period:Int)\n}\n\n\n\n// MARK : - WaveformConfiguration\n\n/// Allows customization of the waveform output image.\npublic struct WaveformConfiguration {\n    /// Desired output size of the waveform image, works together with scale.\n    let size: CGSize\n\n    /// Color of the waveform, defaults to black.\n    let color: WaveColor\n\n    /// Background color of the waveform, defaults to clear.\n    let backgroundColor: WaveColor\n\n    /// Waveform drawing style, defaults to .gradient.\n    let style: WaveformStyle\n\n    /// Waveform drawing position, defaults to .middle.\n    let position: WaveformPosition\n\n    /// Scale to be applied to the image, defaults to main screen's scale.\n    let scale: CGFloat\n\n    // Should we draw a border. If borderWidth == the border is ignored\n    let borderWidth:CGFloat\n\n    // Border color\n    let borderColor:WaveColor\n\n    /// Optional padding or vertical shrinking factor for the waveform.\n    let paddingFactor: CGFloat?\n\n    // Draw a central line (used to represent the current time position)\n    public var drawCentraLine: Bool = false\n    public var centralLineWidth: CGFloat = 2 // The width of the central line\n    public var centralLineColor: WaveColor = WaveColor.red // Its color\n\n    public init(size: CGSize,\n                color: WaveColor = WaveColor.red,\n                backgroundColor: WaveColor = WaveColor.clear,\n                style: WaveformStyle = .gradient,\n                position: WaveformPosition = .middle,\n                scale: CGFloat = mainScreenScale,\n                borderWidth:CGFloat = 0,\n                borderColor:WaveColor = WaveColor.white,\n                paddingFactor: CGFloat? = nil\n        ) {\n        self.color = color\n        self.backgroundColor = backgroundColor\n        self.style = style\n        self.position = position\n        self.size = size\n        self.scale = scale\n        self.borderWidth = borderWidth\n        self.borderColor = borderColor\n        self.paddingFactor = paddingFactor\n    }\n}\n\n// MARK : - WaveFormDrawer\n\n\nopen class WaveFormDrawer {\n\n    public static func image(with sampling:(samples: [Float], sampleMax: Float) , and configuration: WaveformConfiguration) -> WaveImage? {\n        #if os(OSX)\n        if let context = NSGraphicsContext.current{\n            // Let's use an Image\n            let image = NSImage(size: configuration.size)\n            image.lockFocus()\n            context.shouldAntialias = true\n            self._drawBackground(on: context.cgContext, with: configuration)\n            self._drawGraph(from: sampling, on: context.cgContext, with: configuration)\n            if configuration.borderWidth > 0 {\n                self._drawBorder(on: context.cgContext, with: configuration)\n            }\n             self._drawTheCentralLine(on: context.cgContext, with: configuration)\n            return image\n        }else{\n            // Let's draw Off screen\n            NSGraphicsContext.saveGraphicsState()\n            if let rep = NSBitmapImageRep(bitmapDataPlanes: nil,\n                                          pixelsWide: Int(configuration.size.width),\n                                          pixelsHigh: Int(configuration.size.height),\n                                          bitsPerSample: 8,\n                                          samplesPerPixel: 4,\n                                          hasAlpha: true,\n                                          isPlanar: false,\n                                          colorSpaceName: NSColorSpaceName.calibratedRGB,\n                                          bytesPerRow: 4  * Int(configuration.size.width),\n                                          bitsPerPixel: 32){\n                NSGraphicsContext.current = NSGraphicsContext(bitmapImageRep: rep)\n                let context = NSGraphicsContext.current!\n                context.shouldAntialias = true\n                self._drawBackground(on: context.cgContext, with: configuration)\n                context.saveGraphicsState()\n                self._drawGraph(from: sampling, on: context.cgContext, with: configuration)\n                context.restoreGraphicsState()\n                if configuration.borderWidth > 0 {\n                    self._drawBorder(on: context.cgContext, with: configuration)\n                }\n                self._drawTheCentralLine(on: context.cgContext, with: configuration)\n                let image = NSImage(size: configuration.size)\n                image.addRepresentation(rep)\n                NSGraphicsContext.restoreGraphicsState()\n                return image\n\n            }\n            return nil\n        }\n        #elseif os(iOS)\n        UIGraphicsBeginImageContextWithOptions(configuration.size, false, configuration.scale)\n        if let context = UIGraphicsGetCurrentContext(){\n            context.setAllowsAntialiasing(true)\n            context.setShouldAntialias(true)\n            self._drawBackground(on: context, with: configuration)\n            context.saveGState()\n            self._drawGraph(from: sampling, on: context, with: configuration)\n            context.restoreGState()\n            if configuration.borderWidth > 0 {\n                self._drawBorder(on: context, with: configuration)\n            }\n            self._drawTheCentralLine(on: context, with: configuration)\n            let graphImage = UIGraphicsGetImageFromCurrentImageContext()\n            UIGraphicsEndImageContext()\n            return graphImage\n        }\n        return nil\n        #endif\n    }\n\n    private static func _drawBackground(on context: CGContext, with configuration: WaveformConfiguration) {\n        context.setFillColor(configuration.backgroundColor.cgColor)\n        context.fill(CGRect(origin: CGPoint.zero, size: configuration.size))\n    }\n\n    private static func _drawBorder(on context: CGContext, with configuration: WaveformConfiguration) {\n        let path = CGMutablePath()\n        let radius:CGFloat = 0\n        let rect = CGRect(origin: CGPoint.zero, size: configuration.size)\n        context.setStrokeColor(configuration.borderColor.cgColor)\n        context.setLineWidth(configuration.borderWidth)\n        path.move(to:CGPoint(x:  rect.minX, y:  rect.maxY))\n        path.addArc(tangent1End: CGPoint(x:  rect.minX, y:  rect.minY), tangent2End: CGPoint(x:  rect.midX, y:  rect.minY), radius: radius)\n        path.addArc(tangent1End: CGPoint(x:  rect.maxX, y:  rect.minY), tangent2End: CGPoint(x:  rect.maxX, y:  rect.midY), radius: radius)\n        path.addArc(tangent1End: CGPoint(x:  rect.maxX, y:  rect.maxY), tangent2End: CGPoint(x:  rect.midX, y:  rect.maxY), radius: radius)\n        path.addArc(tangent1End: CGPoint(x:  rect.minX, y:  rect.maxY), tangent2End: CGPoint(x:  rect.minX, y:  rect.midY), radius: radius)\n        context.addPath(path)\n        context.drawPath(using: CGPathDrawingMode.stroke)\n    }\n\n\n    private static func _drawTheCentralLine(on context: CGContext, with configuration: WaveformConfiguration){\n        guard configuration.drawCentraLine else { return }\n        let path = CGMutablePath()\n        let startingPoint = CGPoint(x: (CGFloat(context.width) / 2) - configuration.centralLineWidth, y: 0)\n        let endPoint =  CGPoint(x: startingPoint.x , y: CGFloat(context.height))\n        context.setStrokeColor(configuration.centralLineColor.cgColor)\n        context.setLineWidth(configuration.centralLineWidth)\n        path.move(to: startingPoint)\n        path.addLine(to: endPoint)\n        context.addPath(path)\n        context.drawPath(using: CGPathDrawingMode.stroke)\n    }\n\n    private static func _drawGraph(from sampling:(samples: [Float], sampleMax: Float),\n                                   on context: CGContext,\n                                   with configuration: WaveformConfiguration) {\n        let graphRect = CGRect(origin: CGPoint.zero, size: configuration.size)\n        let graphCenter = graphRect.size.height / 2.0\n        let positionAdjustedGraphCenter = graphCenter + CGFloat(configuration.position.rawValue) * graphCenter\n        let verticalPaddingDivisor = configuration.paddingFactor ?? CGFloat(configuration.position == .middle ? 2.5 : 1.5)\n        let drawMappingFactor = graphRect.size.height / verticalPaddingDivisor\n        let minimumGraphAmplitude: CGFloat = 2 // we want to see at least a 1pt line for silence\n\n        let path = CGMutablePath()\n        var maxAmplitude: CGFloat = CGFloat(sampling.sampleMax / SamplesExtractor.noiseFloor ) // we know 1 is our max in normalized data, but we keep it 'generic'\n        context.setLineWidth(1.0 / configuration.scale)\n        for (x, sample) in sampling.samples.enumerated() {\n            let xPos = CGFloat(x) / configuration.scale\n            let invertedDbSample = 1 - CGFloat(sample) // sample is in dB, linearly normalized to [0, 1] (1 -> -50 dB)\n            let drawingAmplitude = max(minimumGraphAmplitude, invertedDbSample * drawMappingFactor)\n            let drawingAmplitudeUp = positionAdjustedGraphCenter - drawingAmplitude\n            let drawingAmplitudeDown = positionAdjustedGraphCenter + drawingAmplitude\n            maxAmplitude = max(drawingAmplitude, maxAmplitude)\n            switch configuration.style {\n            case .striped(let period):\n                if (Int(xPos) % period == 0) {\n                    path.move(to: CGPoint(x: xPos, y: drawingAmplitudeUp))\n                    path.addLine(to: CGPoint(x: xPos, y: drawingAmplitudeDown))\n                }\n            default:\n                path.move(to: CGPoint(x: xPos, y: drawingAmplitudeUp))\n                path.addLine(to: CGPoint(x: xPos, y: drawingAmplitudeDown))\n            }\n        }\n        context.addPath(path)\n\n        switch configuration.style {\n        case .filled, .striped:\n            context.setStrokeColor(configuration.color.cgColor)\n            context.strokePath()\n        case .gradient:\n            context.replacePathWithStrokedPath()\n            context.clip()\n            let highlightedColor = configuration.color.highlight(withLevel: 0.5) ?? WaveColor.lightGray\n            let colors = NSArray(array: [\n                configuration.color.cgColor,\n                highlightedColor.cgColor\n                ]) as CFArray\n            let colorSpace = CGColorSpaceCreateDeviceRGB()\n            let gradient = CGGradient(colorsSpace: colorSpace, colors: colors, locations: nil)!\n            context.drawLinearGradient(gradient,\n                                       start: CGPoint(x: 0, y: positionAdjustedGraphCenter - maxAmplitude),\n                                       end: CGPoint(x: 0, y: positionAdjustedGraphCenter + maxAmplitude),\n                                       options: .drawsAfterEndLocation)\n        }\n    }\n}\n"
  }
]