[
  {
    "path": ".cake/Batter.swift",
    "content": "// Generated by Cake. Regeneration will occur! Edits will be lost!\n// Modules are sorted *topologically*.\n@_exported import Kitchen\n@_exported import Processor\n@_exported import XcakeProject\n@_exported import XcodeProject\n@_exported import XcodeObserver\n@_exported import Modelizer\n@_exported import Base\n@_exported import CakefileDescription\n"
  },
  {
    "path": ".cake/Cake.swift",
    "content": "@_exported import Dependencies\n@_exported import Batter"
  },
  {
    "path": ".cake/Cake.xcconfig",
    "content": "#include? \"Version.xcconfig\"\n"
  },
  {
    "path": ".cake/Cake.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 51;\n\tobjects = {\n\n/* Begin PBXAggregateTarget section */\n27CCC44DFA86333E66FEE34EA8063784 /* Versionator */ = {\n\tisa = PBXAggregateTarget;\n\tbuildPhases = (\n\t\tB0CCAA5D1D192F6963E1F5560239A386 /* Determine Version */,\n\t);\n\tdependencies = (\n\t);\n\tname = Versionator;\n};\n818A4854C95B333066E8C4A9D0FE3104 /* Cakefile */ = {\n\tisa = PBXAggregateTarget;\n\tbuildConfigurationList = FB1419C517BF03EBE4B57BA190D11DA2 /* Build configuration list for PBXAggregateTarget \"Cakefile\" */;\n\tbuildPhases = (\n\t\t6F67EDB0066A07EA8ACEC9D4D60F4E3F /* Regenerate Cake.xcodeproj */,\n\t);\n\tdependencies = (\n\t);\n\tname = Cakefile;\n};\n/* End PBXAggregateTarget section */\n\n/* Begin PBXBuildFile section */\n0009CA61F364BD503A015792C9A7D2DB /* Utils/XCConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB67A28ADBD062CE337B8DF5E1ABA3B4 /* Utils/XCConfig.swift */; };\n00E35D78B4FC58C677091AACE488F66C /* Scheme/XCScheme+TestableReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DB4EE450B414ECE6DEDAAB4F40019D /* Scheme/XCScheme+TestableReference.swift */; };\n0126D7996A8929E3D9BA9BC71806216C /* NSNotificationCenter+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E32B9B4F0137DD729D7F3D74688CF6D /* NSNotificationCenter+Promise.swift */; };\n0144937EEB86C307B33A65EB2B058FFC /* Dependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD06ECAE4D53F31C5FF63EB1A4FAA0F1 /* Dependencies.swift */; };\n02A46975791D4B6AF393E02BFC7B4FA7 /* Cake.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43F867ED701FF56BC9AA1829B4888F2F /* Cake.swift */; };\n03B4231C554E2D2E022A5351927EA1E5 /* CakefileDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = A931901826EAFC85E24FC30A1708944E /* CakefileDescription.swift */; };\n09418BE9EF8A8148100DCB62874E428F /* Module.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A565382D53C145048B6FC0422270BC1 /* Module.swift */; };\n096E09CF05DC89BF84A52E377522B07A /* Scheme/XCScheme+BuildableReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DCF2ACDC813D1597DCDDFE3EA904191 /* Scheme/XCScheme+BuildableReference.swift */; };\n0D24E42A01A5B57AE961FAF8C817687C /* Project/Xcode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B89F8E5109BA12DC10ED95129E77944 /* Project/Xcode.swift */; };\n0D607F811A55D6665B3CD26DA7EEF595 /* Path+FileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A77AFC4AE522827E286DEA7B38C2C006 /* Path+FileManager.swift */; };\n0DED5DA8786393351690A30A1BCCA529 /* Scheme/XCScheme+BuildAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E3AD59FD7C82A5F84B7C248687AB331 /* Scheme/XCScheme+BuildAction.swift */; };\n0EF5EC3E38F3F4D8F51F23394EDE32D5 /* Project/XCSharedData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C408218005B7BC75A3ABD08133612D9 /* Project/XCSharedData.swift */; };\n0F331239AFB8578C44E0FD3CC8A66D01 /* Objects/Files/PBXContainerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D719F3BC31505ACB101E7D6737CE1E5 /* Objects/Files/PBXContainerItem.swift */; };\n0FE036E5308002A02EE147D00659CB89 /* Objects/Configuration/XCConfigurationList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31C617BEA32F179B393AF1D212E944A9 /* Objects/Configuration/XCConfigurationList.swift */; };\n109244311B8CF9298C2586C085606327 /* Path.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25F48703B70EEA7E7DCC6D2D2F06C9B8 /* Path.swift */; };\n13A12CCBECF26AF3B18468E445CEF598 /* Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9667E7EC96A4E5AF6C72D9DDD7ACC033 /* Promise.swift */; };\n1494290E678712CC86B906C2DB6FB93D /* Extensions/Dictionary+Enumerate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DB463DC57B0C69C11B869C0D1D1CE34 /* Extensions/Dictionary+Enumerate.swift */; };\n14E416B908FBFCEBBF146F35813A1A4B /* *Target.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB353A7BFBF179F59387515435E68F1B /* *Target.swift */; };\n14E42FB6998F4B82759AA499D800F15C /* Utils/ReferenceGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C0E03F6E6EECCE50817B52C201AEAA4 /* Utils/ReferenceGenerator.swift */; };\n15934D6E5683C82DBE917FB0A535918C /* PromiseKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 53E3B23BDD8E313D1CCE46BCBA847860 /* PromiseKit.a */; };\n173AC44E5DDAF718CE86EE5D54DB1A23 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53C5D7D1835891126DAC0217D2976BB3 /* Configuration.swift */; };\n194436C50CBF102CE54CD461191FCD0D /* NSObject+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38AC374D097346CE8B4226D78BA0156F /* NSObject+Promise.swift */; };\n1AFCBFBEF3EE85C4735EB8CD7919633F /* Extensions/String+Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0917A3E0211FADCA757E973E033A8CE /* Extensions/String+Utils.swift */; };\n1B8DDA4AC227EC58E450FF52FA21B600 /* Cakefile.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAF60D50AF8D2A0115E908C973003A12 /* Cakefile.swift */; };\n1C2035785DAAE2D64C8ECA6619C181D7 /* Project/XCBreakpointList.swift in Sources */ = {isa = PBXBuildFile; fileRef = B41FF1790C8AA4E84A29A33DAE05468B /* Project/XCBreakpointList.swift */; };\n1D4E36D03223E04D12357D0E3E9E4F06 /* LegibleError.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DBCAEFF3AB28195D7B5E09B52FDBDA9 /* LegibleError.a */; };\n1E85BDB96874D3515EED27E275942738 /* Extensions/String+md5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64ED4F4E164410F7A62B935BAC757997 /* Extensions/String+md5.swift */; };\n20C156247AA940F1663C87213EB9C7AD /* StreamReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05103104AE592402CB93C1FFE5E2D1CD /* StreamReader.swift */; };\n217FABB189F4D49A3DD1422949D0C8E8 /* Dependencies.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A7E89000FDF44A3427FBD44B878A9C1 /* Dependencies.a */; };\n2239144EE9AC530773FD403B4EF8BE35 /* Workspace/XCWorkspaceDataElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = E32BB1D0A32744ECAA417C6154B85B6D /* Workspace/XCWorkspaceDataElement.swift */; };\n22CB02677F3EC68D952CDC73F88B79B9 /* Utils/PlistValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B52A49D89C35234D21902B915BB0DB7 /* Utils/PlistValue.swift */; };\n238D7E0FA67C18E872F921129F546762 /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF0430C986F4136EE13A64A2653D32D9 /* Version.swift */; };\n23A997BC2064A2B26B67A7A75C7A6FD5 /* Objects/Files/PBXGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71B38B8ED5DB9DCC0B70E3CC1E44402A /* Objects/Files/PBXGroup.swift */; };\n23B2B8C2D650E5A33B73053661E5F544 /* Scheme/XCScheme+AnalyzeAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2274AC91D7F94448E0AF2969D9BCDA58 /* Scheme/XCScheme+AnalyzeAction.swift */; };\n23DFC276FAE69CBFA8C76347EF724B84 /* Objects/Targets/PBXTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AF5A7DF8CE28184F27C6599C742AC25 /* Objects/Targets/PBXTarget.swift */; };\n264255B2DC375A38E16541D5A507613F /* Objects/Files/PBXFileElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5FDDB74202F0211F67EAD9C489FA153 /* Objects/Files/PBXFileElement.swift */; };\n29AEB14B8E509CE62DD39ADF72760600 /* Objects/Targets/PBXNativeTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D3C314B487A12D0E1C0D029FE36371D /* Objects/Targets/PBXNativeTarget.swift */; };\n29D6CA4B5F8DEB04CADCCCDF08E5B9C2 /* Objects/BuildPhase/PBXBuildPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 531404CEBE08B993CDAD51AF95383C04 /* Objects/BuildPhase/PBXBuildPhase.swift */; };\n2B35177067A9C34EDEB33A8164DE4588 /* Resolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36F4FC690CAF8E887E4358E57F7AFBC1 /* Resolver.swift */; };\n31BB6F1989688A30CC2AA71C1067102B /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = F487E1726D5CE70C1C4B0223DF5AFFDF /* Diff.swift */; };\n31E2AAD0BE0B7ADFD948BB0CFFC57C1B /* Objects/Project/PBXObjects.swift in Sources */ = {isa = PBXBuildFile; fileRef = 722A12F4645B5D35D39B45AFA1D76983 /* Objects/Project/PBXObjects.swift */; };\n32BFB1DD9292D0F15B2D465C68898EBE /* Scheme/XCScheme+EnvironmentVariable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B6CC87C2DDD9FDBA1C2CBD27071D4AC /* Scheme/XCScheme+EnvironmentVariable.swift */; };\n3514CFE553B87C0B30A58801F8271A27 /* Version+Comparable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EB24F5AA5F9F47F5FE894B8910CCD3F /* Version+Comparable.swift */; };\n35CBA8E95F73F7C579D312B15F0D498F /* Path+Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA500C91598D251A97067F063150DC2A /* Path+Codable.swift */; };\n35D4B501F6E7D131FA2E4C2EA4C4FA98 /* Scheme/XCScheme+ExecutionAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 576C9C9EE9D61D301635A94562588667 /* Scheme/XCScheme+ExecutionAction.swift */; };\n37638F440D45770EB2821116E0E870D8 /* Scheme/XCScheme+LocationScenarioReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76C9275C1BF293F18BCC5970643036F9 /* Scheme/XCScheme+LocationScenarioReference.swift */; };\n37C01C838BE8DE1C664691AA547031E5 /* after.swift in Sources */ = {isa = PBXBuildFile; fileRef = E682DCE6918902D7DDF557BBEE1F747C /* after.swift */; };\n3823977F02656605E34F410252572C97 /* z+buildSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE28E6555AA9082953164CAB96DC7EAA /* z+buildSettings.swift */; };\n382812E7E9599D9487DB1B4EFF573337 /* Objects/Files/PBXSourceTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B70D9747ECEC5C6AC9E6368CFB36889 /* Objects/Files/PBXSourceTree.swift */; };\n3E3B8B3CAC69F14B8ACADC5E7FC66059 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA37F59BD9DAFFD0F15694AABCF3B54C /* Extensions.swift */; };\n3E61D76C08BB1902E0D0D05A19835679 /* Processor.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C5744C074FEF959972A62160544D24F0 /* Processor.a */; };\n3F5CEF2D4DDC859B3FC26CDBEFEC015A /* XcodeObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6A3C3E306641683ED6A2DEA9A9CEDFA /* XcodeObserver.swift */; };\n41CDD68A2C49542AC87B2D654662F8C2 /* Objects/BuildPhase/PBXFrameworksBuildPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E74C31BCB0D74EF97C4278031E8034D /* Objects/BuildPhase/PBXFrameworksBuildPhase.swift */; };\n421A097788CD15E31F890B1C9EC609DF /* Utils/Decoders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A4F661909381C2B72260EC5E92EB852 /* Utils/Decoders.swift */; };\n4296C1974AB9D91026CA47FD9BBA5C52 /* +functions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52A4C823A8934B7C4408E5A47FF4FECB /* +functions.swift */; };\n4719E9FAA93FD3E79F912CA463A0640A /* Objects/Project/PBXProjEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = A50CE25F21E57E92B7A610699FA83BC1 /* Objects/Project/PBXProjEncoder.swift */; };\n471B2B419524B9D1842BC520539060D6 /* Path+inreplace().swift in Sources */ = {isa = PBXBuildFile; fileRef = E81FE693D4FBCAC3084891079AC322C9 /* Path+inreplace().swift */; };\n478F14753835EFC15EE98084B682FD28 /* Workspace/XCWorkspaceDataFileRef.swift in Sources */ = {isa = PBXBuildFile; fileRef = 949BF795030FD942ABF42746C69282A2 /* Workspace/XCWorkspaceDataFileRef.swift */; };\n48AE346FE31B6E30412FC556CC270BEC /* TemporaryDirectory.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7C16154EA6E8025D3F05AC2433A61BE /* TemporaryDirectory.swift */; };\n4AEC1425A72131B2D9A01091B98794E0 /* Version+Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A6EF02B86E86BA90A2AD45729B1EA6A /* Version+Range.swift */; };\n4BA6617EF1A234421360DA3D234D522E /* Options.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E28C010F6CDF44DDB15986B219FCDB2 /* Options.swift */; };\n4CFAE96FAE35BAFB253A76001331128D /* Objects/BuildPhase/PBXShellScriptBuildPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 852615CA271D363F36FCE47BCF0265AD /* Objects/BuildPhase/PBXShellScriptBuildPhase.swift */; };\n4DAA0F96F543E4A6D90BDB8AC22BC759 /* CustomStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30BDDCCB89500DCBDD7BBA0272926DD0 /* CustomStringConvertible.swift */; };\n55623940F01DAE4B639B481D91CF88E9 /* Workspace/XCWorkspaceData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755B5AE0CCEBAD76024C7BACFD3769CF /* Workspace/XCWorkspaceData.swift */; };\n5613D97DEBC1E4931C7CA4E1F053D4B6 /* Utils/JSONDecoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D18DB9B60F9CAE6DB1EE58AA5CDCA1C /* Utils/JSONDecoding.swift */; };\n5633CA07142F6FC4A6C648E4C90225ED /* Batter.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F573D976FA9A0403F17F22F1A4DAA55 /* Batter.a */; };\n56DFD2E22C495FA82E39886F365DC33A /* Cakefile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DD6BC9A2C80C818AD36364182F42223 /* Cakefile.swift */; };\n57D07CE56DF2981508F693E48A3CFD54 /* CakefileDescription.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 11D3B38D3F7DA37A8300F924107470ED /* CakefileDescription.a */; };\n58998CE0A4E32171CF4950F2639F378A /* Objects/Files/PBXFileReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85B557836B8BE6B8B5590ABD761653BA /* Objects/Files/PBXFileReference.swift */; };\n5DBB296966043F75007BBF4EB1C2DE76 /* Objects/Project/PBXProj.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87FA10E492A0664C5F376C3AADA117AB /* Objects/Project/PBXProj.swift */; };\n5ED3ED0B77A5F3EF6B01955153AD6064 /* Project/WorkspaceSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A946331648AD8B89896F7F8669B8E51 /* Project/WorkspaceSettings.swift */; };\n5F9F2D38AABF99927BA45359420DD85D /* Process+facade.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC29E1DAC3B9B8D9CD1097C65196C1C /* Process+facade.swift */; };\n600AB0C92CD900012CA02DE69AB001B9 /* Path.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A49E0E264A02682CCE9A823B02A46706 /* Path.a */; };\n619608298AB26ADA9558192FF85A703F /* etc.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDA44BF315E7E72F7AF8D8FFAB5D39F6 /* etc.swift */; };\n629230A8B878757F42804737F332AF0D /* Workspace/XCWorkspace.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30144F1A4CC788F25022BF92EA083F6 /* Workspace/XCWorkspace.swift */; };\n653928F76893E06F6C79ECE7A573380B /* Project/XcodeProj.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9CC5027FFDDFF68DBEF95C7EC0B2677 /* Project/XcodeProj.swift */; };\n656A6AF815F06DF3D24C506289398B6D /* mxcl∕LegibleError-1.0.1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4144D0D13AB2A191101B99B2DEDE581C /* mxcl∕LegibleError-1.0.1.swift */; };\n66B12F7477B5AC215FDB2A2EBE445EFD /* Sequence+KeyPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 804B783359D6CCE7145742C88183EA36 /* Sequence+KeyPath.swift */; };\n67A0030B6C4B30446D3B7DF510D2AC95 /* Objects/Files/PBXContainerItemProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD0C6AC2F04C53C676703889CB39A3FA /* Objects/Files/PBXContainerItemProxy.swift */; };\n67F5E702253087EF74E83502C0FB55E6 /* Extensions/KeyedDecodingContainer+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87D5D97095DA0BD5E5541E880541B51 /* Extensions/KeyedDecodingContainer+Additions.swift */; };\n6A041CF38BC28A5262F4A2C130435DA8 /* Batter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05D33FD3DDE7FE2483580EF428D7DE21 /* Batter.swift */; };\n6ABA75F07503C93AB3B3C7F0B38CCCB3 /* modelize().swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA174BA4C5F72220DACB263A133F3A1 /* modelize().swift */; };\n6B38FB50EC08F4DF74CF1EC447A2D496 /* deintegrate().swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D3944D256EB9C28558C204F63F624B5 /* deintegrate().swift */; };\n6C310B5FEEC48AFC22A70CEFB2CBC38A /* Weebly∕OrderedSet-3.1.0.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1F70701A65B3979718758A9C96B7E74 /* Weebly∕OrderedSet-3.1.0.swift */; };\n6DD8B2226655E5DED755A1BDC37C2588 /* NSEventModifierFlags+HotKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A124F661FEA3E444A56EA4D521A515A /* NSEventModifierFlags+HotKey.swift */; };\n6F224F8B3EC4EF42D0BD03AC5A01CF9C /* Errors/Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1426181F4046DE0C27F56E6BD5910905 /* Errors/Errors.swift */; };\n7114D9D184985B859F50ED13FE2C6FC7 /* HotKey.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F2CA03F28361DA2CD3C82B19DE28C91 /* HotKey.a */; };\n71612AAB6911E5BEC04F9B2258C187CA /* Scheme/XCScheme+AditionalOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80158EAEB4E68B546727248C48EF0F17 /* Scheme/XCScheme+AditionalOption.swift */; };\n73F5DBA5C3DF8C27AD93C9DF7F8B616D /* topologicalSort().swift in Sources */ = {isa = PBXBuildFile; fileRef = 749A8E67AC5834C6A956EAADEB64557B /* topologicalSort().swift */; };\n742C6B1F749FF4B6CDFBB53EFA544C37 /* Objects/BuildPhase/BuildPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB0670D14B0D218E1BB9BE836B9392C7 /* Objects/BuildPhase/BuildPhase.swift */; };\n748E5C904992666724C802B55121D231 /* Path->Bool.swift in Sources */ = {isa = PBXBuildFile; fileRef = D32C35009D5CF449E0D419124474C625 /* Path->Bool.swift */; };\n79C7F45017C7722A800FFE0401AD9277 /* Group.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5D258EA5994282BD85C7216EB317673 /* Group.swift */; };\n7E1152B6B2580D8CF2CAD150E04E60A8 /* HotKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A81CC9DD3104D5CFAB0E095D7A73FDE /* HotKey.swift */; };\n7EC2598830532F6C856E584A4E66B0CB /* Scheme/XCScheme+BuildableProductRunnable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C8796C21F96CBC0C0A4E13733B4CD0E /* Scheme/XCScheme+BuildableProductRunnable.swift */; };\n8086409EA5DD7B797084592C543D5EB3 /* Process+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0D8DD1958D7B1AF9E5930838B61C63 /* Process+Promise.swift */; };\n80978F6C6C23060316D787E18C24BFC9 /* Objects/Project/PBXOutputSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = B14C812ADA5BF5033A67333BAF077A7A /* Objects/Project/PBXOutputSettings.swift */; };\n8132BA30BD6E920DDBD31451E9400E45 /* XcodeProject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B014E5511BA57DD4C34DEC96713FCC0F /* XcodeProject.swift */; };\n853B75D491EC42D972FC45BC6A062A2B /* Scheme/XCScheme+LaunchAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9164B58D3D030AD7DD1D4633988ECCA /* Scheme/XCScheme+LaunchAction.swift */; };\n896F7E7C12011CA77277E7BACBB7F99C /* Objects/BuildPhase/PBXSourcesBuildPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 830FE1BA33BC05A8FF3C2ED99884F684 /* Objects/BuildPhase/PBXSourcesBuildPhase.swift */; };\n898163FBB3101F0C1FAE974B73CB7271 /* Objects/Files/XCVersionGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B09953A76D3C953D379A46546E39FC8D /* Objects/Files/XCVersionGroup.swift */; };\n8A7FBCE750BACE16FA0C7D24A8E0FC26 /* Guarantee.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF647C9C376ED858DE3D33BD092CCA7F /* Guarantee.swift */; };\n8A8B0E9BDA830045CCAF38F0E83A5761 /* +platforms.swift in Sources */ = {isa = PBXBuildFile; fileRef = 618FDE59E88C49B7C9ADE5C5A9159A06 /* +platforms.swift */; };\n8B8A210C9BB8D8109AD1AC239AB9552F /* Kitchen.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BF52CA51D11D9A90EF84861A2B5938B1 /* Kitchen.a */; };\n8C9643A4FA9E488BCB63EBDA4286C997 /* Kitchen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3142C0085C1236B2B3772F4960DBB8D9 /* Kitchen.swift */; };\n8D090FE4A3B4FAED3A0490D986C15C85 /* Version+Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40CA625F76FE45EABC6548E7FA9081C9 /* Version+Codable.swift */; };\n8EB5125F4FEFF56B991C39CB731DE87E /* kylef∕PathKit-0.9.2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8936109BF1AA3578412FAD3077209014 /* kylef∕PathKit-0.9.2.swift */; };\n8EF6B805944AE9C3AEB822AFCA5B852B /* +functions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7A4900D64F8DD98FAE29B44BAC9C49 /* +functions.swift */; };\n90E680E24018A067844D7A6860BDD036 /* LogEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D25EA9B892F8852C3D86F85B8647FAE /* LogEvent.swift */; };\n9149D0D156D1A47AD9708C11EDBFC16E /* Workspace/XCWorkspaceDataGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8483ADF0C01E41D32E3BEA6C2F50FF /* Workspace/XCWorkspaceDataGroup.swift */; };\n931B8B12E76BBFF3D918AD5F204D0FD6 /* XcodeProject.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 937C922F7F6999DF1895EB3DC82906E9 /* XcodeProject.a */; };\n93ABEAC4A39B97F1DAD8B82CF4A66A3D /* Version+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F32012741B387F7AD9EB83C1E2AF212 /* Version+Foundation.swift */; };\n93B314409224678C08B72E61C1056C2C /* Scheme/XCScheme+ProfileAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3185556D97EDCF571118B9C60F3D4DCB /* Scheme/XCScheme+ProfileAction.swift */; };\n947BC673F4E249FE2276A9A7C9354813 /* Objects/Project/PBXObjectReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D674DA388038DB2C7C2DCC6B13CA11 /* Objects/Project/PBXObjectReference.swift */; };\n953FA1F79CB127104231051399E7F96E /* Scheme/XCScheme+SerialAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = A909F2285D6BB302E831CD131B206FB1 /* Scheme/XCScheme+SerialAction.swift */; };\n954EDC5169A2DAA27CD7EBCB0D9AE5D9 /* Objects/BuildPhase/PBXBuildFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C21B018E286AB818EEF5EA83B02C86E0 /* Objects/BuildPhase/PBXBuildFile.swift */; };\n95B9262AE9089B839547533D20E7BFE7 /* Objects/Project/PBXProject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 559797E564267A36E62DE4ADF60465B7 /* Objects/Project/PBXProject.swift */; };\n962D45FFD864AA7F6C523E102A1046E0 /* FSWatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46348EB9B861968F7D43E2F325955D37 /* FSWatcher.swift */; };\n96CAE3141B8C653FF20D854469F10C2C /* Dependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858CCCCD45F434A16E8D273190765092 /* Dependencies.swift */; };\n976C83FEFB06BCAD121AAEEE1C719482 /* XcakeProject.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F8732C7CBD899BD5F0398A832669E75 /* XcakeProject.a */; };\n97C035E3EF4FD8C90AA7FF8D9057B91F /* Scheme/XCScheme+ArchiveAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49E819CC92D95188B91ABBEDA33B46C3 /* Scheme/XCScheme+ArchiveAction.swift */; };\n9809C7CF76A4546695F8874775FFC18B /* Base.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 372DAB40CDD5A8EEE06A79D6C8AC5536 /* Base.a */; };\n98DBDE552368194486604B4E85BD8EDD /* Objects/Sourcery/Equality.generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 675FB47A04E79CDCC955D8FCF3A4BF80 /* Objects/Sourcery/Equality.generated.swift */; };\n9AD25944060C73EBC3D7D4B8ED647F55 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97EAFD505287A688648A6F468128EEEC /* Error.swift */; };\n9B85910EE0235B89957B660EF71DD726 /* Workspace/XCWorkspaceDataElementLocationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 669A914005810A46DA64A779CE45E521 /* Workspace/XCWorkspaceDataElementLocationType.swift */; };\n9C7533C705D0687317351F2003399A02 /* Element.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DA0BC07DF161138B4D7A43E6A219B05 /* Element.swift */; };\n9D4FA985555FAD0E3D818DD15FDEEE9A /* Utils/BuildSettingsProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01B73C1D9BBF582F1B4CA11D1FD2BCD5 /* Utils/BuildSettingsProvider.swift */; };\n9EC43026A52EADC5AE278DAC71294A6F /* Path+StringConvertibles.swift in Sources */ = {isa = PBXBuildFile; fileRef = D39E04B4AC317B13678FFB83CE930458 /* Path+StringConvertibles.swift */; };\n9EDD872806677188A87EFED76893CFF5 /* Objects/Targets/PBXLegacyTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8581BD4238C94C7B078D7E65968660C0 /* Objects/Targets/PBXLegacyTarget.swift */; };\nA27CBDCEC8A2496D7214446F54EBCFFD /* OrderedSet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C62C6619223819ED3301991617A91BD /* OrderedSet.a */; };\nA297A74AC30EA716F40100BBA29D7C00 /* Objects/Project/PBXObjectParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = E94C0950C8BC14BB473DDD0C09FDEB12 /* Objects/Project/PBXObjectParser.swift */; };\nA2A8C2A61706862AF67AB27B2D159F04 /* Catchable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FDA939D602AC0EF1F3928012DDA0DC /* Catchable.swift */; };\nA308AD5923DF4D916E0F13D2E6F95D39 /* Objects/BuildPhase/PBXResourcesBuildPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B1F1175C209C392F423782054651ED5 /* Objects/BuildPhase/PBXResourcesBuildPhase.swift */; };\nA56DC1AF5566E19B4D632345C9866CCA /* xcodeproj.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E05502AA06041ADF62F3BF7E7659260 /* xcodeproj.a */; };\nAA8312CFC7EBB6F598BAF659D0B693EB /* Extensions/NSRecursiveLock+Sync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 308336D6CA83EAE1E8D36F4DE09DE65E /* Extensions/NSRecursiveLock+Sync.swift */; };\nAC0DAA07C9191967E505AE9B19BC007B /* Objects/Targets/PBXProductType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BE47230D3E16F17B6C53D4CD9ABF0A7 /* Objects/Targets/PBXProductType.swift */; };\nADC757B7E9013417B979D184C8EA439D /* SwiftVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72C3939CC65CE41D34872BE7C25A01C5 /* SwiftVersion.swift */; };\nB13883DB62175193381A7119D4F9CD64 /* Extensions/Path+Extras.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6B09E05AFC6DA8F82260DFC1ABE4BDB /* Extensions/Path+Extras.swift */; };\nB29D6314F9D634233005F3BB6C0BCF82 /* Modelizer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BAD9493581EF0180B01D541DF06A6E4B /* Modelizer.a */; };\nB363F49F2AF887172600F5CD67F7C4F2 /* hang.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7AEA2479B3032443714E1D228FADF0C /* hang.swift */; };\nB56602EC4F80DEC5337994B59B3FE640 /* NSURLSession+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = A365FC1A53413924C32E4651E9D67AA9 /* NSURLSession+Promise.swift */; };\nB5709AC26DC8F5D630260A3F1DB425DC /* Objects/Configuration/BuildSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3875F50A4E88DECD4C85498B13194B4D /* Objects/Configuration/BuildSettings.swift */; };\nB59EF1525752B4039C257C311422F13C /* Extensions/OSLog+Extras.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EB733203A51041BAF8B7325873B8F8 /* Extensions/OSLog+Extras.swift */; };\nB6DC0EF01401A3BED2CBBF306449424F /* AppUpdater.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F01C205BDC9FA3129D8949BE2CB5C4 /* AppUpdater.a */; };\nB7FC5A115B5F3955E30EF15EC52D6EED /* Utils/CommentedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CD7DF2A21452F6F3764E31A50E68AF2 /* Utils/CommentedString.swift */; };\nB80D12E0404E0D4FE891853C54CC0298 /* Version.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD62726177028C4BC3DCB2230AD84705 /* Version.a */; };\nB888FA01811554E0AF55D0A54886A893 /* Extensions/AEXML+XcodeFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06BD24A5E56306FA76A42CE38A938E0C /* Extensions/AEXML+XcodeFormat.swift */; };\nB932800411795A587A5D035B3F67E937 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 835E3CF62D03CBDD1679F357A3702A9C /* Error.swift */; };\nB965111421F5F7EA96A6384139DB4AD1 /* race.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41AA2ABCDA2F333EBC153257903CCFFA /* race.swift */; };\nBB63582548DBD2F5B1E488AC04FFFDB4 /* Scheme/XCScheme+TestAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7784500AEAF00A3954F252BF7EB9186 /* Scheme/XCScheme+TestAction.swift */; };\nBBEF2E8BE5E69BA2026069C53E90CB13 /* Utils/OSLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04110D4A7CD13051C705542C94A0A7A9 /* Utils/OSLogger.swift */; };\nBD0BA7D75497180DD3012CA784CC7BCA /* PMKFoundation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 69787F8145CACFA492EC131CC2A0AA1D /* PMKFoundation.a */; };\nBEC710FA022A69539DE83D3DA26D2D46 /* Thenable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C217681598D56FE79A522A8D0D7CB7C7 /* Thenable.swift */; };\nBF795C7DC798F6DDEB96C936AAE3A38D /* PathKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C29E76D627B188CA3643C87B68EC436 /* PathKit.a */; };\nC5C90186A870052853053FE8BDE97F81 /* Objects/BuildPhase/PBXRezBuildPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 835B1909D4EA60D2CF046ED021E060E7 /* Objects/BuildPhase/PBXRezBuildPhase.swift */; };\nC973731BD5D1ADF0B68DC9A8B71371AA /* Objects/BuildPhase/PBXBuildRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FFC5A15BE7FEEA7952C65C2124CDB1C /* Objects/BuildPhase/PBXBuildRule.swift */; };\nCA4D400E3DDC6CBC15A3D71ECB3CD4DA /* Objects/Configuration/XCBuildConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7713E4DEB1439F6B933AD7032A4CB4A4 /* Objects/Configuration/XCBuildConfiguration.swift */; };\nCB172787F2E9E15E6E4D0069701694ED /* Scheme/XCScheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DB38989A054A4EA67BEB37294BFDC38 /* Scheme/XCScheme.swift */; };\nCD29B1158D97E7F2767B742E15BB5F1B /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D70A7A1D451A574394BE9D849EF26BD /* Box.swift */; };\nCEBEADC323399BF84D2A2A41841A8DBC /* z.etc.swift in Sources */ = {isa = PBXBuildFile; fileRef = D719A91C09C4BD993022462D57904F4E /* z.etc.swift */; };\nCF94FDBF239BD77C694AFB7B9C375141 /* Objects/BuildPhase/PBXHeadersBuildPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 435DE35726152C660A49F9A23B51B7E3 /* Objects/BuildPhase/PBXHeadersBuildPhase.swift */; };\nCFBB1B1AD3BABF755259E1B5ABF0B453 /* Parser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B828EC0B6BCB9E838EF8719A040E05FB /* Parser.swift */; };\nD079F107A87BDA6D93E3B909821C6AA2 /* Version+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 930A6BD4B016A2539E9D5013E3FCA04A /* Version+.swift */; };\nD10A7E8D4601C0821314BCB968F68F73 /* SwiftVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FDDFD13C38B75004170652473061F3A /* SwiftVersion.swift */; };\nD3395990728EE7111BEE0C57ED111C98 /* Objects/Files/PBXVariantGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 410CE76CF11E01AD634AF853AB480845 /* Objects/Files/PBXVariantGroup.swift */; };\nD51C1066BCE4EB4087BAF0686C5AA8B4 /* Path+ls.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EC126C205BC396E4B52986041911E1A /* Path+ls.swift */; };\nD59C5DFA9636F14344F65784AC4AF22E /* AEXML.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3FA20E1A308B36BD34D4F6FA38D3BF30 /* AEXML.a */; };\nD620D9DF46FAD133FAD0654540D93506 /* Objects/BuildPhase/PBXCopyFilesBuildPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA48C5FCF10729DBC5E19A78CD728387 /* Objects/BuildPhase/PBXCopyFilesBuildPhase.swift */; };\nD884582231287F0F5274AA2BA4A0BC2C /* Dependencies.json.swift in Sources */ = {isa = PBXBuildFile; fileRef = 902419C27FD761BCEFE0A9AB8BF4FE87 /* Dependencies.json.swift */; };\nD8FF5F97208C6033DC9443168546626F /* Scheme/XCScheme+SkippedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57A5610558926A1003CFFD244AA5DA23 /* Scheme/XCScheme+SkippedTests.swift */; };\nD93F5CCFC45D073036572B8910C27C33 /* _PathDisambiguation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAB66A0A047C8351A0114D24BF9C84D4 /* _PathDisambiguation.swift */; };\nDA00E6F1BBD45869C0D4178FD7737F15 /* KeyCombo.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB6EB63265EF5234402E15E3F05EE1C0 /* KeyCombo.swift */; };\nDB218EF8F94D531927B2D342E41BA5E3 /* Scheme/XCScheme+CommandLineArguments.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9AB41547E4057E3F4F4398F9B8E294 /* Scheme/XCScheme+CommandLineArguments.swift */; };\nDBF24B2F67D4AD415385D407F78EBFE7 /* firstly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C473431F71F14C0C7B094C7AFC1BCB1 /* firstly.swift */; };\nDC560344DF4532BABE105E25771A2285 /* XcodeObserver.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F9CD3F23A3EB056C8061881D18FBD601 /* XcodeObserver.a */; };\nDC86CA0F4A8831D94959D21DD78C26C0 /* mxcl∕AppUpdater-1.0.3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EACC5F861EC78E815F715FE0D7F0DB8 /* mxcl∕AppUpdater-1.0.3.swift */; };\nDD2127A7693447EA31FC5844269A5476 /* when.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2FA622D9453DC325EF8DD4097AB2C2B /* when.swift */; };\nDEBA5D57958559217B612C305D80D18B /* Self.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63FED00F5F6CA5AA95D6FD33264CC27E /* Self.swift */; };\nDF2738497A69CFC60A7BFF7546A79383 /* scaffold().swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EFD929CD18BA53DE82AB2B4BC7F03E3 /* scaffold().swift */; };\nE08267E7A19CE4F86CF11AE46F1F9CFE /* KitchenDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C89B0D3A65F18AC6AE103808E1EF9054 /* KitchenDelegate.swift */; };\nE1BA243CAB80D7B010397756DE150F4E /* CakeProject.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE016ECFF05687BA82A5550BE83957F /* CakeProject.swift */; };\nE2FAA3397719FA0DC93535F286C47BDC /* Path+CommonDirectories.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94BE46F8140D74E37611092ADBEB53BE /* Path+CommonDirectories.swift */; };\nE39FA5C4830B1C6286C4B8B0A11A6279 /* Objects/Targets/PBXTargetDependency.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB42F45DDB75F843BD744639C008C84B /* Objects/Targets/PBXTargetDependency.swift */; };\nE641E4491384EBC7ED294BF3AFBFA63B /* XcakeProject.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF0DABA4951DF1D4D2F4308EA9757D27 /* XcakeProject.swift */; };\nED25BB88C9183FDB03E55618895F3A3E /* Objects/Targets/PBXAggregateTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76149DDC4F8A2B10AC9F40DC12C04A01 /* Objects/Targets/PBXAggregateTarget.swift */; };\nF10ECD50FB9CDB0EF1F3ED6535B00F79 /* Objects/Project/PBXObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF68BD1B8B7E31E3692084703149A9F4 /* Objects/Project/PBXObject.swift */; };\nF1773AE9122717504710FDE32E039B2B /* HotKeysController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293B693F5D2B905EAB9D47603FF004E0 /* HotKeysController.swift */; };\nF1A9E165928095B7FB7D9C8664C2B533 /* Extensions/Bool+Extras.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1529B0E38393D8746B29EC816E6FBD3 /* Extensions/Bool+Extras.swift */; };\nF2EDD3CF836DCC600B513BFBB755CF5D /* Protocols/Writable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 381C3BC031CA52785EC98BBE0F7D2F6F /* Protocols/Writable.swift */; };\nF5CA27B2477A402F4A5820741101B61C /* Objects/Targets/PBXReferenceProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31102E62D8DBA38978DFFDA3A5FF6AD9 /* Objects/Targets/PBXReferenceProxy.swift */; };\nF7E7A799FBAE4D353AE3728E97367F61 /* Key.swift in Sources */ = {isa = PBXBuildFile; fileRef = E18FDE6CB448ECB4CA03C90F660EB53D /* Key.swift */; };\nF8373135B8E73DC04E741253EF8538AF /* afterlife.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA87092A5BDAB632904A61E928DE49B9 /* afterlife.swift */; };\nF967CC7B7762819FA7DC1F4ACA76DA87 /* Path+Attributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE8AEF64C23D070DC58781BE7913BE2C /* Path+Attributes.swift */; };\nFAD7EFC6A9B1B2F1AA0A4A1548B922BB /* Extensions/Dictionary+Extras.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023860B7D6084F6464BEA7B2304B2114 /* Extensions/Dictionary+Extras.swift */; };\nFB72D613AD5B0AAF539728B89A41FB8E /* XcodeScriptingBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 278A53C448758EECE7FD6B78133E40C8 /* XcodeScriptingBridge.swift */; };\nFD4509FBDBD52F99ED185069192B4611 /* Objects/Sourcery/Sourcery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40B08A9630C2EF6944BF3EE3F4CD8A04 /* Objects/Sourcery/Sourcery.swift */; };\nFDC90EB1D93E3B5852C55A9F0C16EB8C /* Document.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48324EC36DFA0B91BEB4A8CF50E6133F /* Document.swift */; };\nFEB9BA4D068A75074CBA587AFBC15867 /* etc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C15151125E344471378CB5346737FA7 /* etc.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n0116FC39B24582BEE9036286F9430EA1 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = AC6B4791DEE2977626A076B8F9A7666F;\n\tremoteInfo = \"Deps·OrderedSet\";\n};\n0EFDF076DBC213F64A00B6683D0E6B67 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = A49235A78CF83BF260878E68B866C986;\n\tremoteInfo = \"Batter·Base\";\n};\n144BDEC13717CB09678A9A83D9431ADF /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = B49CC989FC5BE99773DFD32B46D8E82C;\n\tremoteInfo = \"Deps·PathKit\";\n};\n17D5F07BC8B5B3BC93A4EE4B2B28AD4A /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = DF69393E8DED4E7C87625E2008C40E41;\n\tremoteInfo = \"Batter·XcodeProject\";\n};\n18BB34364DC319E58561C144CFB5F85E /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = C8AC307C08B1141701DFEAAD12667716;\n\tremoteInfo = \"Batter·Modelizer\";\n};\n1AD18862BE00E9D273C5119993BF1EF7 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 818A4854C95B333066E8C4A9D0FE3104;\n\tremoteInfo = Cakefile;\n};\n1C49E795CA5C037A31C025E2A56C01F7 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = B4280F358AD4C3799414724EE00E6812;\n\tremoteInfo = \"Deps·PMKFoundation\";\n};\n1EE1EF930A5BF3D0012B58E4A1D22BB8 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = B4280F358AD4C3799414724EE00E6812;\n\tremoteInfo = \"Deps·PMKFoundation\";\n};\n2271E804C9C352B20C61ABBC68327426 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 8B4D032D3EA2708E1BF1B498E5AAC085;\n\tremoteInfo = \"Deps·LegibleError\";\n};\n25BC92DB11B4440F7308DC364B2A9CC8 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 76CCBFA038A347F71E7B5BFB1521AC8A;\n\tremoteInfo = \"Deps·Path\";\n};\n26A6089A74D49C04CCF423ED317665CF /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = D1CE66C2AF312DCD9A12B6444FB0D2EA;\n\tremoteInfo = \"Deps·AEXML\";\n};\n2AB7C8C5BF907C9BECA079EDED1FFC18 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 8FEBB13B61D6321603EC90A5606F8C4F;\n\tremoteInfo = \"Deps·HotKey\";\n};\n2D6EDF33EC661363ED1E5889EA9EF52F /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = DCF843C187E023E2097ACF9EABA93DD6;\n\tremoteInfo = Dependencies;\n};\n3609D632CDBAAFD820788391BA3977DC /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 818A4854C95B333066E8C4A9D0FE3104;\n\tremoteInfo = Cakefile;\n};\n3A6C290700F171F09F36630EAE33952A /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = DCF843C187E023E2097ACF9EABA93DD6;\n\tremoteInfo = Dependencies;\n};\n3B18052B44E98025F6CED9B8801DAF2A /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 818A4854C95B333066E8C4A9D0FE3104;\n\tremoteInfo = Cakefile;\n};\n3CA790475701796546AEC8C8F9BEC467 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = D4D58EF887FC75ADD1D795BF5B47A879;\n\tremoteInfo = \"Batter·CakefileDescription\";\n};\n3D570B61F4B7B186FBD4FB45CAB2344D /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = BD398413C05B07BBE2B6E2D14C9EE8D9;\n\tremoteInfo = \"Deps·PromiseKit\";\n};\n466D0E195DB547397C597EF346516148 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = D4D58EF887FC75ADD1D795BF5B47A879;\n\tremoteInfo = \"Batter·CakefileDescription\";\n};\n5EDA6990A1DDBE6E9B607D100EF8A5DA /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = BD398413C05B07BBE2B6E2D14C9EE8D9;\n\tremoteInfo = \"Deps·PromiseKit\";\n};\n67AEDC266F822DBF18B34C4E257EE1E9 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 818A4854C95B333066E8C4A9D0FE3104;\n\tremoteInfo = Cakefile;\n};\n71C00BC3AFA055F16733B467637C32E6 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = D4D58EF887FC75ADD1D795BF5B47A879;\n\tremoteInfo = \"Batter·CakefileDescription\";\n};\n756891CE29B59469D117CB86600830B4 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = F5D94DE7A2DF28D8FD6E0C310044455E;\n\tremoteInfo = Batter;\n};\n7E33F2A58E0B9F911C5089934C28196D /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = DCF843C187E023E2097ACF9EABA93DD6;\n\tremoteInfo = Dependencies;\n};\n80644EB6FD3773EE45376C2EC9869F30 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 50A4D32099C32D3207892A9614D37B66;\n\tremoteInfo = \"Batter·Processor\";\n};\n8CF6B72EF378FFC5EDCD3344A04E6912 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = C8AC307C08B1141701DFEAAD12667716;\n\tremoteInfo = \"Batter·Modelizer\";\n};\n924C0BA9D531ACB667362E847E2C2ED1 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = A49235A78CF83BF260878E68B866C986;\n\tremoteInfo = \"Batter·Base\";\n};\n9552D2A44C21251174A336F563E786A6 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 0F64CBB97351A503B1F408F40AB7E996;\n\tremoteInfo = \"Batter·Kitchen\";\n};\n96CF6D0F301321DD90DAAA34150AF9C8 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 76CCBFA038A347F71E7B5BFB1521AC8A;\n\tremoteInfo = \"Deps·Path\";\n};\nA0AD5420B6DC1AB939BC61EDDB8218B7 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = C1038750BB9B8EA5926C885645506714;\n\tremoteInfo = \"Batter·XcodeObserver\";\n};\nA374EA6D4F5157415110C114CB7D2C2C /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = ED829D4B109C4E4B415B8F01358C62F3;\n\tremoteInfo = \"Batter·XcakeProject\";\n};\nA451E2841D294632F1518CB0121B3EE9 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = C1038750BB9B8EA5926C885645506714;\n\tremoteInfo = \"Batter·XcodeObserver\";\n};\nA6534538102624A3BAD54587BBECFEF5 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 818A4854C95B333066E8C4A9D0FE3104;\n\tremoteInfo = Cakefile;\n};\nB01E0633294DEAFA1B9F52960E14C230 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = A49235A78CF83BF260878E68B866C986;\n\tremoteInfo = \"Batter·Base\";\n};\nB06116E54C8217994FD5F06F7E592CF2 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 818A4854C95B333066E8C4A9D0FE3104;\n\tremoteInfo = Cakefile;\n};\nC9302B77BC2BA2C40C288B30160EB8D2 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 818A4854C95B333066E8C4A9D0FE3104;\n\tremoteInfo = Cakefile;\n};\nCDAE6F16BFD0F82E6454C65CB8F164D2 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 9CF1FA8024CC8159DE776A7595DC3523;\n\tremoteInfo = \"Deps·Version\";\n};\nD46696C0AE71459DAAF917F866D13018 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = D4D58EF887FC75ADD1D795BF5B47A879;\n\tremoteInfo = \"Batter·CakefileDescription\";\n};\nD98236A2D881CAC7928673239C8BFD51 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = D1CE66C2AF312DCD9A12B6444FB0D2EA;\n\tremoteInfo = \"Deps·AEXML\";\n};\nE19C66FA1ADEB89F9061C2604746306D /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 5D1C4ECF6D5347A44CB1E59E5BB558E0;\n\tremoteInfo = \"Deps·AppUpdater\";\n};\nEB36CF19BE9565CD2F536DD00DB99F43 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = B4EB89E549B6ADCED02958295D4FAD21;\n\tremoteInfo = \"Deps·xcodeproj\";\n};\nED11063682340B41D483263E6FE5EED7 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = B49CC989FC5BE99773DFD32B46D8E82C;\n\tremoteInfo = \"Deps·PathKit\";\n};\nEFB035A45795006B3E0D3D4C5A2F75D9 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 9CF1FA8024CC8159DE776A7595DC3523;\n\tremoteInfo = \"Deps·Version\";\n};\nF312C1044F70834D556FB7F4802D1893 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 27CCC44DFA86333E66FEE34EA8063784;\n\tremoteInfo = Versionator;\n};\nFC06ED7DAB16B02502FC9309C805AAA3 /* PBXContainerItemProxy */ = {\n\tisa = PBXContainerItemProxy;\n\tcontainerPortal = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n\tproxyType = 1;\n\tremoteGlobalIDString = 818A4854C95B333066E8C4A9D0FE3104;\n\tremoteInfo = Cakefile;\n};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n01B73C1D9BBF582F1B4CA11D1FD2BCD5 /* Utils/BuildSettingsProvider.swift */ = {isa = PBXFileReference; path = Utils/BuildSettingsProvider.swift; sourceTree = \"<group>\"; };\n023860B7D6084F6464BEA7B2304B2114 /* Extensions/Dictionary+Extras.swift */ = {isa = PBXFileReference; path = \"Extensions/Dictionary+Extras.swift\"; sourceTree = \"<group>\"; };\n04110D4A7CD13051C705542C94A0A7A9 /* Utils/OSLogger.swift */ = {isa = PBXFileReference; path = Utils/OSLogger.swift; sourceTree = \"<group>\"; };\n05103104AE592402CB93C1FFE5E2D1CD /* StreamReader.swift */ = {isa = PBXFileReference; path = StreamReader.swift; sourceTree = \"<group>\"; };\n05D33FD3DDE7FE2483580EF428D7DE21 /* Batter.swift */ = {isa = PBXFileReference; path = Batter.swift; sourceTree = \"<group>\"; };\n06BD24A5E56306FA76A42CE38A938E0C /* Extensions/AEXML+XcodeFormat.swift */ = {isa = PBXFileReference; path = \"Extensions/AEXML+XcodeFormat.swift\"; sourceTree = \"<group>\"; };\n0B6CC87C2DDD9FDBA1C2CBD27071D4AC /* Scheme/XCScheme+EnvironmentVariable.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+EnvironmentVariable.swift\"; sourceTree = \"<group>\"; };\n0C15151125E344471378CB5346737FA7 /* etc.swift */ = {isa = PBXFileReference; path = etc.swift; sourceTree = \"<group>\"; };\n0E05502AA06041ADF62F3BF7E7659260 /* xcodeproj.a */ = {isa = PBXFileReference; path = xcodeproj.a; sourceTree = \"<group>\"; };\n0E3AD59FD7C82A5F84B7C248687AB331 /* Scheme/XCScheme+BuildAction.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+BuildAction.swift\"; sourceTree = \"<group>\"; };\n0EB24F5AA5F9F47F5FE894B8910CCD3F /* Version+Comparable.swift */ = {isa = PBXFileReference; path = \"Version+Comparable.swift\"; sourceTree = \"<group>\"; };\n0EFD929CD18BA53DE82AB2B4BC7F03E3 /* scaffold().swift */ = {isa = PBXFileReference; path = \"scaffold().swift\"; sourceTree = \"<group>\"; };\n11D3B38D3F7DA37A8300F924107470ED /* CakefileDescription.a */ = {isa = PBXFileReference; path = CakefileDescription.a; sourceTree = \"<group>\"; };\n1426181F4046DE0C27F56E6BD5910905 /* Errors/Errors.swift */ = {isa = PBXFileReference; path = Errors/Errors.swift; sourceTree = \"<group>\"; };\n19F01C205BDC9FA3129D8949BE2CB5C4 /* AppUpdater.a */ = {isa = PBXFileReference; path = AppUpdater.a; sourceTree = \"<group>\"; };\n1AF5A7DF8CE28184F27C6599C742AC25 /* Objects/Targets/PBXTarget.swift */ = {isa = PBXFileReference; path = Objects/Targets/PBXTarget.swift; sourceTree = \"<group>\"; };\n1B52A49D89C35234D21902B915BB0DB7 /* Utils/PlistValue.swift */ = {isa = PBXFileReference; path = Utils/PlistValue.swift; sourceTree = \"<group>\"; };\n1C0E03F6E6EECCE50817B52C201AEAA4 /* Utils/ReferenceGenerator.swift */ = {isa = PBXFileReference; path = Utils/ReferenceGenerator.swift; sourceTree = \"<group>\"; };\n1C473431F71F14C0C7B094C7AFC1BCB1 /* firstly.swift */ = {isa = PBXFileReference; path = firstly.swift; sourceTree = \"<group>\"; };\n1DBCAEFF3AB28195D7B5E09B52FDBDA9 /* LegibleError.a */ = {isa = PBXFileReference; path = LegibleError.a; sourceTree = \"<group>\"; };\n1F0D8DD1958D7B1AF9E5930838B61C63 /* Process+Promise.swift */ = {isa = PBXFileReference; path = \"Process+Promise.swift\"; sourceTree = \"<group>\"; };\n1FFC5A15BE7FEEA7952C65C2124CDB1C /* Objects/BuildPhase/PBXBuildRule.swift */ = {isa = PBXFileReference; path = Objects/BuildPhase/PBXBuildRule.swift; sourceTree = \"<group>\"; };\n2274AC91D7F94448E0AF2969D9BCDA58 /* Scheme/XCScheme+AnalyzeAction.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+AnalyzeAction.swift\"; sourceTree = \"<group>\"; };\n25F48703B70EEA7E7DCC6D2D2F06C9B8 /* Path.swift */ = {isa = PBXFileReference; path = Path.swift; sourceTree = \"<group>\"; };\n278A53C448758EECE7FD6B78133E40C8 /* XcodeScriptingBridge.swift */ = {isa = PBXFileReference; path = XcodeScriptingBridge.swift; sourceTree = \"<group>\"; };\n293B693F5D2B905EAB9D47603FF004E0 /* HotKeysController.swift */ = {isa = PBXFileReference; path = HotKeysController.swift; sourceTree = \"<group>\"; };\n29EB733203A51041BAF8B7325873B8F8 /* Extensions/OSLog+Extras.swift */ = {isa = PBXFileReference; path = \"Extensions/OSLog+Extras.swift\"; sourceTree = \"<group>\"; };\n2A565382D53C145048B6FC0422270BC1 /* Module.swift */ = {isa = PBXFileReference; path = Module.swift; sourceTree = \"<group>\"; };\n2B1F1175C209C392F423782054651ED5 /* Objects/BuildPhase/PBXResourcesBuildPhase.swift */ = {isa = PBXFileReference; path = Objects/BuildPhase/PBXResourcesBuildPhase.swift; sourceTree = \"<group>\"; };\n2B70D9747ECEC5C6AC9E6368CFB36889 /* Objects/Files/PBXSourceTree.swift */ = {isa = PBXFileReference; path = Objects/Files/PBXSourceTree.swift; sourceTree = \"<group>\"; };\n2BE47230D3E16F17B6C53D4CD9ABF0A7 /* Objects/Targets/PBXProductType.swift */ = {isa = PBXFileReference; path = Objects/Targets/PBXProductType.swift; sourceTree = \"<group>\"; };\n2C62C6619223819ED3301991617A91BD /* OrderedSet.a */ = {isa = PBXFileReference; path = OrderedSet.a; sourceTree = \"<group>\"; };\n308336D6CA83EAE1E8D36F4DE09DE65E /* Extensions/NSRecursiveLock+Sync.swift */ = {isa = PBXFileReference; path = \"Extensions/NSRecursiveLock+Sync.swift\"; sourceTree = \"<group>\"; };\n30BDDCCB89500DCBDD7BBA0272926DD0 /* CustomStringConvertible.swift */ = {isa = PBXFileReference; path = CustomStringConvertible.swift; sourceTree = \"<group>\"; };\n31102E62D8DBA38978DFFDA3A5FF6AD9 /* Objects/Targets/PBXReferenceProxy.swift */ = {isa = PBXFileReference; path = Objects/Targets/PBXReferenceProxy.swift; sourceTree = \"<group>\"; };\n3142C0085C1236B2B3772F4960DBB8D9 /* Kitchen.swift */ = {isa = PBXFileReference; path = Kitchen.swift; sourceTree = \"<group>\"; };\n3185556D97EDCF571118B9C60F3D4DCB /* Scheme/XCScheme+ProfileAction.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+ProfileAction.swift\"; sourceTree = \"<group>\"; };\n31C617BEA32F179B393AF1D212E944A9 /* Objects/Configuration/XCConfigurationList.swift */ = {isa = PBXFileReference; path = Objects/Configuration/XCConfigurationList.swift; sourceTree = \"<group>\"; };\n36F4FC690CAF8E887E4358E57F7AFBC1 /* Resolver.swift */ = {isa = PBXFileReference; path = Resolver.swift; sourceTree = \"<group>\"; };\n372DAB40CDD5A8EEE06A79D6C8AC5536 /* Base.a */ = {isa = PBXFileReference; path = Base.a; sourceTree = \"<group>\"; };\n381C3BC031CA52785EC98BBE0F7D2F6F /* Protocols/Writable.swift */ = {isa = PBXFileReference; path = Protocols/Writable.swift; sourceTree = \"<group>\"; };\n3875F50A4E88DECD4C85498B13194B4D /* Objects/Configuration/BuildSettings.swift */ = {isa = PBXFileReference; path = Objects/Configuration/BuildSettings.swift; sourceTree = \"<group>\"; };\n38AC374D097346CE8B4226D78BA0156F /* NSObject+Promise.swift */ = {isa = PBXFileReference; path = \"NSObject+Promise.swift\"; sourceTree = \"<group>\"; };\n3A81CC9DD3104D5CFAB0E095D7A73FDE /* HotKey.swift */ = {isa = PBXFileReference; path = HotKey.swift; sourceTree = \"<group>\"; };\n3C29E76D627B188CA3643C87B68EC436 /* PathKit.a */ = {isa = PBXFileReference; path = PathKit.a; sourceTree = \"<group>\"; };\n3C408218005B7BC75A3ABD08133612D9 /* Project/XCSharedData.swift */ = {isa = PBXFileReference; path = Project/XCSharedData.swift; sourceTree = \"<group>\"; };\n3D18DB9B60F9CAE6DB1EE58AA5CDCA1C /* Utils/JSONDecoding.swift */ = {isa = PBXFileReference; path = Utils/JSONDecoding.swift; sourceTree = \"<group>\"; };\n3D70A7A1D451A574394BE9D849EF26BD /* Box.swift */ = {isa = PBXFileReference; path = Box.swift; sourceTree = \"<group>\"; };\n3EACC5F861EC78E815F715FE0D7F0DB8 /* mxcl∕AppUpdater-1.0.3.swift */ = {isa = PBXFileReference; path = \"mxcl∕AppUpdater-1.0.3.swift\"; sourceTree = \"<group>\"; };\n3F573D976FA9A0403F17F22F1A4DAA55 /* Batter.a */ = {isa = PBXFileReference; path = Batter.a; sourceTree = \"<group>\"; };\n3FA20E1A308B36BD34D4F6FA38D3BF30 /* AEXML.a */ = {isa = PBXFileReference; path = AEXML.a; sourceTree = \"<group>\"; };\n40B08A9630C2EF6944BF3EE3F4CD8A04 /* Objects/Sourcery/Sourcery.swift */ = {isa = PBXFileReference; path = Objects/Sourcery/Sourcery.swift; sourceTree = \"<group>\"; };\n40CA625F76FE45EABC6548E7FA9081C9 /* Version+Codable.swift */ = {isa = PBXFileReference; path = \"Version+Codable.swift\"; sourceTree = \"<group>\"; };\n410CE76CF11E01AD634AF853AB480845 /* Objects/Files/PBXVariantGroup.swift */ = {isa = PBXFileReference; path = Objects/Files/PBXVariantGroup.swift; sourceTree = \"<group>\"; };\n4144D0D13AB2A191101B99B2DEDE581C /* mxcl∕LegibleError-1.0.1.swift */ = {isa = PBXFileReference; path = \"mxcl∕LegibleError-1.0.1.swift\"; sourceTree = \"<group>\"; };\n41AA2ABCDA2F333EBC153257903CCFFA /* race.swift */ = {isa = PBXFileReference; path = race.swift; sourceTree = \"<group>\"; };\n435DE35726152C660A49F9A23B51B7E3 /* Objects/BuildPhase/PBXHeadersBuildPhase.swift */ = {isa = PBXFileReference; path = Objects/BuildPhase/PBXHeadersBuildPhase.swift; sourceTree = \"<group>\"; };\n43DB4EE450B414ECE6DEDAAB4F40019D /* Scheme/XCScheme+TestableReference.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+TestableReference.swift\"; sourceTree = \"<group>\"; };\n43F867ED701FF56BC9AA1829B4888F2F /* Cake.swift */ = {isa = PBXFileReference; path = Cake.swift; sourceTree = \"<group>\"; };\n46348EB9B861968F7D43E2F325955D37 /* FSWatcher.swift */ = {isa = PBXFileReference; path = FSWatcher.swift; sourceTree = \"<group>\"; };\n48324EC36DFA0B91BEB4A8CF50E6133F /* Document.swift */ = {isa = PBXFileReference; path = Document.swift; sourceTree = \"<group>\"; };\n49E819CC92D95188B91ABBEDA33B46C3 /* Scheme/XCScheme+ArchiveAction.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+ArchiveAction.swift\"; sourceTree = \"<group>\"; };\n4A7E89000FDF44A3427FBD44B878A9C1 /* Dependencies.a */ = {isa = PBXFileReference; path = Dependencies.a; sourceTree = \"<group>\"; };\n4B89F8E5109BA12DC10ED95129E77944 /* Project/Xcode.swift */ = {isa = PBXFileReference; path = Project/Xcode.swift; sourceTree = \"<group>\"; };\n4CD7DF2A21452F6F3764E31A50E68AF2 /* Utils/CommentedString.swift */ = {isa = PBXFileReference; path = Utils/CommentedString.swift; sourceTree = \"<group>\"; };\n4F2CA03F28361DA2CD3C82B19DE28C91 /* HotKey.a */ = {isa = PBXFileReference; path = HotKey.a; sourceTree = \"<group>\"; };\n52A4C823A8934B7C4408E5A47FF4FECB /* +functions.swift */ = {isa = PBXFileReference; path = \"+functions.swift\"; sourceTree = \"<group>\"; };\n531404CEBE08B993CDAD51AF95383C04 /* Objects/BuildPhase/PBXBuildPhase.swift */ = {isa = PBXFileReference; path = Objects/BuildPhase/PBXBuildPhase.swift; sourceTree = \"<group>\"; };\n53C5D7D1835891126DAC0217D2976BB3 /* Configuration.swift */ = {isa = PBXFileReference; path = Configuration.swift; sourceTree = \"<group>\"; };\n53E3B23BDD8E313D1CCE46BCBA847860 /* PromiseKit.a */ = {isa = PBXFileReference; path = PromiseKit.a; sourceTree = \"<group>\"; };\n559797E564267A36E62DE4ADF60465B7 /* Objects/Project/PBXProject.swift */ = {isa = PBXFileReference; path = Objects/Project/PBXProject.swift; sourceTree = \"<group>\"; };\n576C9C9EE9D61D301635A94562588667 /* Scheme/XCScheme+ExecutionAction.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+ExecutionAction.swift\"; sourceTree = \"<group>\"; };\n57A5610558926A1003CFFD244AA5DA23 /* Scheme/XCScheme+SkippedTests.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+SkippedTests.swift\"; sourceTree = \"<group>\"; };\n5DA0BC07DF161138B4D7A43E6A219B05 /* Element.swift */ = {isa = PBXFileReference; path = Element.swift; sourceTree = \"<group>\"; };\n618FDE59E88C49B7C9ADE5C5A9159A06 /* +platforms.swift */ = {isa = PBXFileReference; path = \"+platforms.swift\"; sourceTree = \"<group>\"; };\n63FED00F5F6CA5AA95D6FD33264CC27E /* Self.swift */ = {isa = PBXFileReference; path = Self.swift; sourceTree = \"<group>\"; };\n64ED4F4E164410F7A62B935BAC757997 /* Extensions/String+md5.swift */ = {isa = PBXFileReference; path = \"Extensions/String+md5.swift\"; sourceTree = \"<group>\"; };\n669A914005810A46DA64A779CE45E521 /* Workspace/XCWorkspaceDataElementLocationType.swift */ = {isa = PBXFileReference; path = Workspace/XCWorkspaceDataElementLocationType.swift; sourceTree = \"<group>\"; };\n675FB47A04E79CDCC955D8FCF3A4BF80 /* Objects/Sourcery/Equality.generated.swift */ = {isa = PBXFileReference; path = Objects/Sourcery/Equality.generated.swift; sourceTree = \"<group>\"; };\n69787F8145CACFA492EC131CC2A0AA1D /* PMKFoundation.a */ = {isa = PBXFileReference; path = PMKFoundation.a; sourceTree = \"<group>\"; };\n6A6EF02B86E86BA90A2AD45729B1EA6A /* Version+Range.swift */ = {isa = PBXFileReference; path = \"Version+Range.swift\"; sourceTree = \"<group>\"; };\n6F32012741B387F7AD9EB83C1E2AF212 /* Version+Foundation.swift */ = {isa = PBXFileReference; path = \"Version+Foundation.swift\"; sourceTree = \"<group>\"; };\n6FDDFD13C38B75004170652473061F3A /* SwiftVersion.swift */ = {isa = PBXFileReference; path = SwiftVersion.swift; sourceTree = \"<group>\"; };\n71B38B8ED5DB9DCC0B70E3CC1E44402A /* Objects/Files/PBXGroup.swift */ = {isa = PBXFileReference; path = Objects/Files/PBXGroup.swift; sourceTree = \"<group>\"; };\n722A12F4645B5D35D39B45AFA1D76983 /* Objects/Project/PBXObjects.swift */ = {isa = PBXFileReference; path = Objects/Project/PBXObjects.swift; sourceTree = \"<group>\"; };\n72C3939CC65CE41D34872BE7C25A01C5 /* SwiftVersion.swift */ = {isa = PBXFileReference; path = SwiftVersion.swift; sourceTree = \"<group>\"; };\n749A8E67AC5834C6A956EAADEB64557B /* topologicalSort().swift */ = {isa = PBXFileReference; path = \"topologicalSort().swift\"; sourceTree = \"<group>\"; };\n755B5AE0CCEBAD76024C7BACFD3769CF /* Workspace/XCWorkspaceData.swift */ = {isa = PBXFileReference; path = Workspace/XCWorkspaceData.swift; sourceTree = \"<group>\"; };\n76149DDC4F8A2B10AC9F40DC12C04A01 /* Objects/Targets/PBXAggregateTarget.swift */ = {isa = PBXFileReference; path = Objects/Targets/PBXAggregateTarget.swift; sourceTree = \"<group>\"; };\n76C9275C1BF293F18BCC5970643036F9 /* Scheme/XCScheme+LocationScenarioReference.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+LocationScenarioReference.swift\"; sourceTree = \"<group>\"; };\n7713E4DEB1439F6B933AD7032A4CB4A4 /* Objects/Configuration/XCBuildConfiguration.swift */ = {isa = PBXFileReference; path = Objects/Configuration/XCBuildConfiguration.swift; sourceTree = \"<group>\"; };\n7A124F661FEA3E444A56EA4D521A515A /* NSEventModifierFlags+HotKey.swift */ = {isa = PBXFileReference; path = \"NSEventModifierFlags+HotKey.swift\"; sourceTree = \"<group>\"; };\n7A946331648AD8B89896F7F8669B8E51 /* Project/WorkspaceSettings.swift */ = {isa = PBXFileReference; path = Project/WorkspaceSettings.swift; sourceTree = \"<group>\"; };\n7C8796C21F96CBC0C0A4E13733B4CD0E /* Scheme/XCScheme+BuildableProductRunnable.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+BuildableProductRunnable.swift\"; sourceTree = \"<group>\"; };\n7D3C314B487A12D0E1C0D029FE36371D /* Objects/Targets/PBXNativeTarget.swift */ = {isa = PBXFileReference; path = Objects/Targets/PBXNativeTarget.swift; sourceTree = \"<group>\"; };\n7E28C010F6CDF44DDB15986B219FCDB2 /* Options.swift */ = {isa = PBXFileReference; path = Options.swift; sourceTree = \"<group>\"; };\n7E32B9B4F0137DD729D7F3D74688CF6D /* NSNotificationCenter+Promise.swift */ = {isa = PBXFileReference; path = \"NSNotificationCenter+Promise.swift\"; sourceTree = \"<group>\"; };\n7F8732C7CBD899BD5F0398A832669E75 /* XcakeProject.a */ = {isa = PBXFileReference; path = XcakeProject.a; sourceTree = \"<group>\"; };\n80158EAEB4E68B546727248C48EF0F17 /* Scheme/XCScheme+AditionalOption.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+AditionalOption.swift\"; sourceTree = \"<group>\"; };\n804B783359D6CCE7145742C88183EA36 /* Sequence+KeyPath.swift */ = {isa = PBXFileReference; path = \"Sequence+KeyPath.swift\"; sourceTree = \"<group>\"; };\n830FE1BA33BC05A8FF3C2ED99884F684 /* Objects/BuildPhase/PBXSourcesBuildPhase.swift */ = {isa = PBXFileReference; path = Objects/BuildPhase/PBXSourcesBuildPhase.swift; sourceTree = \"<group>\"; };\n835B1909D4EA60D2CF046ED021E060E7 /* Objects/BuildPhase/PBXRezBuildPhase.swift */ = {isa = PBXFileReference; path = Objects/BuildPhase/PBXRezBuildPhase.swift; sourceTree = \"<group>\"; };\n835E3CF62D03CBDD1679F357A3702A9C /* Error.swift */ = {isa = PBXFileReference; path = Error.swift; sourceTree = \"<group>\"; };\n852615CA271D363F36FCE47BCF0265AD /* Objects/BuildPhase/PBXShellScriptBuildPhase.swift */ = {isa = PBXFileReference; path = Objects/BuildPhase/PBXShellScriptBuildPhase.swift; sourceTree = \"<group>\"; };\n8581BD4238C94C7B078D7E65968660C0 /* Objects/Targets/PBXLegacyTarget.swift */ = {isa = PBXFileReference; path = Objects/Targets/PBXLegacyTarget.swift; sourceTree = \"<group>\"; };\n858CCCCD45F434A16E8D273190765092 /* Dependencies.swift */ = {isa = PBXFileReference; path = Dependencies.swift; sourceTree = \"<group>\"; };\n85B557836B8BE6B8B5590ABD761653BA /* Objects/Files/PBXFileReference.swift */ = {isa = PBXFileReference; path = Objects/Files/PBXFileReference.swift; sourceTree = \"<group>\"; };\n87FA10E492A0664C5F376C3AADA117AB /* Objects/Project/PBXProj.swift */ = {isa = PBXFileReference; path = Objects/Project/PBXProj.swift; sourceTree = \"<group>\"; };\n8936109BF1AA3578412FAD3077209014 /* kylef∕PathKit-0.9.2.swift */ = {isa = PBXFileReference; path = \"kylef∕PathKit-0.9.2.swift\"; sourceTree = \"<group>\"; };\n8D3944D256EB9C28558C204F63F624B5 /* deintegrate().swift */ = {isa = PBXFileReference; path = \"deintegrate().swift\"; sourceTree = \"<group>\"; };\n8D719F3BC31505ACB101E7D6737CE1E5 /* Objects/Files/PBXContainerItem.swift */ = {isa = PBXFileReference; path = Objects/Files/PBXContainerItem.swift; sourceTree = \"<group>\"; };\n8DB463DC57B0C69C11B869C0D1D1CE34 /* Extensions/Dictionary+Enumerate.swift */ = {isa = PBXFileReference; path = \"Extensions/Dictionary+Enumerate.swift\"; sourceTree = \"<group>\"; };\n8E74C31BCB0D74EF97C4278031E8034D /* Objects/BuildPhase/PBXFrameworksBuildPhase.swift */ = {isa = PBXFileReference; path = Objects/BuildPhase/PBXFrameworksBuildPhase.swift; sourceTree = \"<group>\"; };\n902419C27FD761BCEFE0A9AB8BF4FE87 /* Dependencies.json.swift */ = {isa = PBXFileReference; path = Dependencies.json.swift; sourceTree = \"<group>\"; };\n91D674DA388038DB2C7C2DCC6B13CA11 /* Objects/Project/PBXObjectReference.swift */ = {isa = PBXFileReference; path = Objects/Project/PBXObjectReference.swift; sourceTree = \"<group>\"; };\n930A6BD4B016A2539E9D5013E3FCA04A /* Version+.swift */ = {isa = PBXFileReference; path = \"Version+.swift\"; sourceTree = \"<group>\"; };\n937C922F7F6999DF1895EB3DC82906E9 /* XcodeProject.a */ = {isa = PBXFileReference; path = XcodeProject.a; sourceTree = \"<group>\"; };\n949BF795030FD942ABF42746C69282A2 /* Workspace/XCWorkspaceDataFileRef.swift */ = {isa = PBXFileReference; path = Workspace/XCWorkspaceDataFileRef.swift; sourceTree = \"<group>\"; };\n94BE46F8140D74E37611092ADBEB53BE /* Path+CommonDirectories.swift */ = {isa = PBXFileReference; path = \"Path+CommonDirectories.swift\"; sourceTree = \"<group>\"; };\n9667E7EC96A4E5AF6C72D9DDD7ACC033 /* Promise.swift */ = {isa = PBXFileReference; path = Promise.swift; sourceTree = \"<group>\"; };\n97EAFD505287A688648A6F468128EEEC /* Error.swift */ = {isa = PBXFileReference; path = Error.swift; sourceTree = \"<group>\"; };\n9A4F661909381C2B72260EC5E92EB852 /* Utils/Decoders.swift */ = {isa = PBXFileReference; path = Utils/Decoders.swift; sourceTree = \"<group>\"; };\n9D25EA9B892F8852C3D86F85B8647FAE /* LogEvent.swift */ = {isa = PBXFileReference; path = LogEvent.swift; sourceTree = \"<group>\"; };\n9DB38989A054A4EA67BEB37294BFDC38 /* Scheme/XCScheme.swift */ = {isa = PBXFileReference; path = Scheme/XCScheme.swift; sourceTree = \"<group>\"; };\n9DCF2ACDC813D1597DCDDFE3EA904191 /* Scheme/XCScheme+BuildableReference.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+BuildableReference.swift\"; sourceTree = \"<group>\"; };\n9DD6BC9A2C80C818AD36364182F42223 /* Cakefile.swift */ = {isa = PBXFileReference; name = Cakefile.swift; path = ../Cakefile.swift; sourceTree = \"<group>\"; };\n9EC126C205BC396E4B52986041911E1A /* Path+ls.swift */ = {isa = PBXFileReference; path = \"Path+ls.swift\"; sourceTree = \"<group>\"; };\nA365FC1A53413924C32E4651E9D67AA9 /* NSURLSession+Promise.swift */ = {isa = PBXFileReference; path = \"NSURLSession+Promise.swift\"; sourceTree = \"<group>\"; };\nA49E0E264A02682CCE9A823B02A46706 /* Path.a */ = {isa = PBXFileReference; path = Path.a; sourceTree = \"<group>\"; };\nA4B1E5C1B830E94800A96F72DE371A05 /* Cake.a */ = {isa = PBXFileReference; path = Cake.a; sourceTree = \"<group>\"; };\nA50CE25F21E57E92B7A610699FA83BC1 /* Objects/Project/PBXProjEncoder.swift */ = {isa = PBXFileReference; path = Objects/Project/PBXProjEncoder.swift; sourceTree = \"<group>\"; };\nA6A3C3E306641683ED6A2DEA9A9CEDFA /* XcodeObserver.swift */ = {isa = PBXFileReference; path = XcodeObserver.swift; sourceTree = \"<group>\"; };\nA7784500AEAF00A3954F252BF7EB9186 /* Scheme/XCScheme+TestAction.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+TestAction.swift\"; sourceTree = \"<group>\"; };\nA77AFC4AE522827E286DEA7B38C2C006 /* Path+FileManager.swift */ = {isa = PBXFileReference; path = \"Path+FileManager.swift\"; sourceTree = \"<group>\"; };\nA7C16154EA6E8025D3F05AC2433A61BE /* TemporaryDirectory.swift */ = {isa = PBXFileReference; path = TemporaryDirectory.swift; sourceTree = \"<group>\"; };\nA909F2285D6BB302E831CD131B206FB1 /* Scheme/XCScheme+SerialAction.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+SerialAction.swift\"; sourceTree = \"<group>\"; };\nA931901826EAFC85E24FC30A1708944E /* CakefileDescription.swift */ = {isa = PBXFileReference; path = CakefileDescription.swift; sourceTree = \"<group>\"; };\nAA87092A5BDAB632904A61E928DE49B9 /* afterlife.swift */ = {isa = PBXFileReference; path = afterlife.swift; sourceTree = \"<group>\"; };\nAAB66A0A047C8351A0114D24BF9C84D4 /* _PathDisambiguation.swift */ = {isa = PBXFileReference; path = _PathDisambiguation.swift; sourceTree = \"<group>\"; };\nAB353A7BFBF179F59387515435E68F1B /* *Target.swift */ = {isa = PBXFileReference; path = \"*Target.swift\"; sourceTree = \"<group>\"; };\nAF0DABA4951DF1D4D2F4308EA9757D27 /* XcakeProject.swift */ = {isa = PBXFileReference; path = XcakeProject.swift; sourceTree = \"<group>\"; };\nB014E5511BA57DD4C34DEC96713FCC0F /* XcodeProject.swift */ = {isa = PBXFileReference; path = XcodeProject.swift; sourceTree = \"<group>\"; };\nB09953A76D3C953D379A46546E39FC8D /* Objects/Files/XCVersionGroup.swift */ = {isa = PBXFileReference; path = Objects/Files/XCVersionGroup.swift; sourceTree = \"<group>\"; };\nB14C812ADA5BF5033A67333BAF077A7A /* Objects/Project/PBXOutputSettings.swift */ = {isa = PBXFileReference; path = Objects/Project/PBXOutputSettings.swift; sourceTree = \"<group>\"; };\nB1529B0E38393D8746B29EC816E6FBD3 /* Extensions/Bool+Extras.swift */ = {isa = PBXFileReference; path = \"Extensions/Bool+Extras.swift\"; sourceTree = \"<group>\"; };\nB1F70701A65B3979718758A9C96B7E74 /* Weebly∕OrderedSet-3.1.0.swift */ = {isa = PBXFileReference; path = \"Weebly∕OrderedSet-3.1.0.swift\"; sourceTree = \"<group>\"; };\nB30144F1A4CC788F25022BF92EA083F6 /* Workspace/XCWorkspace.swift */ = {isa = PBXFileReference; path = Workspace/XCWorkspace.swift; sourceTree = \"<group>\"; };\nB3CDEF324226D91C75D2BCBA3E3D7952 /* Cakefile·Completion */ = {isa = PBXFileReference; path = \"Cakefile·Completion\"; sourceTree = \"<group>\"; };\nB41FF1790C8AA4E84A29A33DAE05468B /* Project/XCBreakpointList.swift */ = {isa = PBXFileReference; path = Project/XCBreakpointList.swift; sourceTree = \"<group>\"; };\nB7AEA2479B3032443714E1D228FADF0C /* hang.swift */ = {isa = PBXFileReference; path = hang.swift; sourceTree = \"<group>\"; };\nB828EC0B6BCB9E838EF8719A040E05FB /* Parser.swift */ = {isa = PBXFileReference; path = Parser.swift; sourceTree = \"<group>\"; };\nBAD9493581EF0180B01D541DF06A6E4B /* Modelizer.a */ = {isa = PBXFileReference; path = Modelizer.a; sourceTree = \"<group>\"; };\nBB42F45DDB75F843BD744639C008C84B /* Objects/Targets/PBXTargetDependency.swift */ = {isa = PBXFileReference; path = Objects/Targets/PBXTargetDependency.swift; sourceTree = \"<group>\"; };\nBE28E6555AA9082953164CAB96DC7EAA /* z+buildSettings.swift */ = {isa = PBXFileReference; path = \"z+buildSettings.swift\"; sourceTree = \"<group>\"; };\nBF52CA51D11D9A90EF84861A2B5938B1 /* Kitchen.a */ = {isa = PBXFileReference; path = Kitchen.a; sourceTree = \"<group>\"; };\nC217681598D56FE79A522A8D0D7CB7C7 /* Thenable.swift */ = {isa = PBXFileReference; path = Thenable.swift; sourceTree = \"<group>\"; };\nC21B018E286AB818EEF5EA83B02C86E0 /* Objects/BuildPhase/PBXBuildFile.swift */ = {isa = PBXFileReference; path = Objects/BuildPhase/PBXBuildFile.swift; sourceTree = \"<group>\"; };\nC5744C074FEF959972A62160544D24F0 /* Processor.a */ = {isa = PBXFileReference; path = Processor.a; sourceTree = \"<group>\"; };\nC89B0D3A65F18AC6AE103808E1EF9054 /* KitchenDelegate.swift */ = {isa = PBXFileReference; path = KitchenDelegate.swift; sourceTree = \"<group>\"; };\nCAF60D50AF8D2A0115E908C973003A12 /* Cakefile.swift */ = {isa = PBXFileReference; path = Cakefile.swift; sourceTree = \"<group>\"; };\nCB67A28ADBD062CE337B8DF5E1ABA3B4 /* Utils/XCConfig.swift */ = {isa = PBXFileReference; path = Utils/XCConfig.swift; sourceTree = \"<group>\"; };\nCD06ECAE4D53F31C5FF63EB1A4FAA0F1 /* Dependencies.swift */ = {isa = PBXFileReference; path = Dependencies.swift; sourceTree = \"<group>\"; };\nCDA44BF315E7E72F7AF8D8FFAB5D39F6 /* etc.swift */ = {isa = PBXFileReference; path = etc.swift; sourceTree = \"<group>\"; };\nCEE016ECFF05687BA82A5550BE83957F /* CakeProject.swift */ = {isa = PBXFileReference; path = CakeProject.swift; sourceTree = \"<group>\"; };\nCF647C9C376ED858DE3D33BD092CCA7F /* Guarantee.swift */ = {isa = PBXFileReference; path = Guarantee.swift; sourceTree = \"<group>\"; };\nD0FDA939D602AC0EF1F3928012DDA0DC /* Catchable.swift */ = {isa = PBXFileReference; path = Catchable.swift; sourceTree = \"<group>\"; };\nD32C35009D5CF449E0D419124474C625 /* Path->Bool.swift */ = {isa = PBXFileReference; path = \"Path->Bool.swift\"; sourceTree = \"<group>\"; };\nD39E04B4AC317B13678FFB83CE930458 /* Path+StringConvertibles.swift */ = {isa = PBXFileReference; path = \"Path+StringConvertibles.swift\"; sourceTree = \"<group>\"; };\nD719A91C09C4BD993022462D57904F4E /* z.etc.swift */ = {isa = PBXFileReference; path = z.etc.swift; sourceTree = \"<group>\"; };\nDCA174BA4C5F72220DACB263A133F3A1 /* modelize().swift */ = {isa = PBXFileReference; path = \"modelize().swift\"; sourceTree = \"<group>\"; };\nDD8483ADF0C01E41D32E3BEA6C2F50FF /* Workspace/XCWorkspaceDataGroup.swift */ = {isa = PBXFileReference; path = Workspace/XCWorkspaceDataGroup.swift; sourceTree = \"<group>\"; };\nDD9AB41547E4057E3F4F4398F9B8E294 /* Scheme/XCScheme+CommandLineArguments.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+CommandLineArguments.swift\"; sourceTree = \"<group>\"; };\nDE8AEF64C23D070DC58781BE7913BE2C /* Path+Attributes.swift */ = {isa = PBXFileReference; path = \"Path+Attributes.swift\"; sourceTree = \"<group>\"; };\nDF0430C986F4136EE13A64A2653D32D9 /* Version.swift */ = {isa = PBXFileReference; path = Version.swift; sourceTree = \"<group>\"; };\nDF68BD1B8B7E31E3692084703149A9F4 /* Objects/Project/PBXObject.swift */ = {isa = PBXFileReference; path = Objects/Project/PBXObject.swift; sourceTree = \"<group>\"; };\nE0917A3E0211FADCA757E973E033A8CE /* Extensions/String+Utils.swift */ = {isa = PBXFileReference; path = \"Extensions/String+Utils.swift\"; sourceTree = \"<group>\"; };\nE18FDE6CB448ECB4CA03C90F660EB53D /* Key.swift */ = {isa = PBXFileReference; path = Key.swift; sourceTree = \"<group>\"; };\nE32BB1D0A32744ECAA417C6154B85B6D /* Workspace/XCWorkspaceDataElement.swift */ = {isa = PBXFileReference; path = Workspace/XCWorkspaceDataElement.swift; sourceTree = \"<group>\"; };\nE5D258EA5994282BD85C7216EB317673 /* Group.swift */ = {isa = PBXFileReference; path = Group.swift; sourceTree = \"<group>\"; };\nE5FDDB74202F0211F67EAD9C489FA153 /* Objects/Files/PBXFileElement.swift */ = {isa = PBXFileReference; path = Objects/Files/PBXFileElement.swift; sourceTree = \"<group>\"; };\nE682DCE6918902D7DDF557BBEE1F747C /* after.swift */ = {isa = PBXFileReference; path = after.swift; sourceTree = \"<group>\"; };\nE81FE693D4FBCAC3084891079AC322C9 /* Path+inreplace().swift */ = {isa = PBXFileReference; path = \"Path+inreplace().swift\"; sourceTree = \"<group>\"; };\nE9164B58D3D030AD7DD1D4633988ECCA /* Scheme/XCScheme+LaunchAction.swift */ = {isa = PBXFileReference; path = \"Scheme/XCScheme+LaunchAction.swift\"; sourceTree = \"<group>\"; };\nE94C0950C8BC14BB473DDD0C09FDEB12 /* Objects/Project/PBXObjectParser.swift */ = {isa = PBXFileReference; path = Objects/Project/PBXObjectParser.swift; sourceTree = \"<group>\"; };\nEA37F59BD9DAFFD0F15694AABCF3B54C /* Extensions.swift */ = {isa = PBXFileReference; path = Extensions.swift; sourceTree = \"<group>\"; };\nEA48C5FCF10729DBC5E19A78CD728387 /* Objects/BuildPhase/PBXCopyFilesBuildPhase.swift */ = {isa = PBXFileReference; path = Objects/BuildPhase/PBXCopyFilesBuildPhase.swift; sourceTree = \"<group>\"; };\nEA500C91598D251A97067F063150DC2A /* Path+Codable.swift */ = {isa = PBXFileReference; path = \"Path+Codable.swift\"; sourceTree = \"<group>\"; };\nEB7A4900D64F8DD98FAE29B44BAC9C49 /* +functions.swift */ = {isa = PBXFileReference; path = \"+functions.swift\"; sourceTree = \"<group>\"; };\nF2FA622D9453DC325EF8DD4097AB2C2B /* when.swift */ = {isa = PBXFileReference; path = when.swift; sourceTree = \"<group>\"; };\nF487E1726D5CE70C1C4B0223DF5AFFDF /* Diff.swift */ = {isa = PBXFileReference; path = Diff.swift; sourceTree = \"<group>\"; };\nF6B09E05AFC6DA8F82260DFC1ABE4BDB /* Extensions/Path+Extras.swift */ = {isa = PBXFileReference; path = \"Extensions/Path+Extras.swift\"; sourceTree = \"<group>\"; };\nF87D5D97095DA0BD5E5541E880541B51 /* Extensions/KeyedDecodingContainer+Additions.swift */ = {isa = PBXFileReference; path = \"Extensions/KeyedDecodingContainer+Additions.swift\"; sourceTree = \"<group>\"; };\nF9CC5027FFDDFF68DBEF95C7EC0B2677 /* Project/XcodeProj.swift */ = {isa = PBXFileReference; path = Project/XcodeProj.swift; sourceTree = \"<group>\"; };\nF9CD3F23A3EB056C8061881D18FBD601 /* XcodeObserver.a */ = {isa = PBXFileReference; path = XcodeObserver.a; sourceTree = \"<group>\"; };\nFB0670D14B0D218E1BB9BE836B9392C7 /* Objects/BuildPhase/BuildPhase.swift */ = {isa = PBXFileReference; path = Objects/BuildPhase/BuildPhase.swift; sourceTree = \"<group>\"; };\nFB6EB63265EF5234402E15E3F05EE1C0 /* KeyCombo.swift */ = {isa = PBXFileReference; path = KeyCombo.swift; sourceTree = \"<group>\"; };\nFD0C6AC2F04C53C676703889CB39A3FA /* Objects/Files/PBXContainerItemProxy.swift */ = {isa = PBXFileReference; path = Objects/Files/PBXContainerItemProxy.swift; sourceTree = \"<group>\"; };\nFD62726177028C4BC3DCB2230AD84705 /* Version.a */ = {isa = PBXFileReference; path = Version.a; sourceTree = \"<group>\"; };\nFEC29E1DAC3B9B8D9CD1097C65196C1C /* Process+facade.swift */ = {isa = PBXFileReference; path = \"Process+facade.swift\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n0B026A614C2516F4FCE621E12A0C2BBD /* Frameworks */ = {\n\tisa = PBXFrameworksBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t5633CA07142F6FC4A6C648E4C90225ED /* Batter.a in Frameworks */,\n\t\t217FABB189F4D49A3DD1422949D0C8E8 /* Dependencies.a in Frameworks */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\n110D4C6492AD4DAAB8F0701D634714CF /* Frameworks */ = {\n\tisa = PBXFrameworksBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\tA56DC1AF5566E19B4D632345C9866CCA /* xcodeproj.a in Frameworks */,\n\t\tBF795C7DC798F6DDEB96C936AAE3A38D /* PathKit.a in Frameworks */,\n\t\tA27CBDCEC8A2496D7214446F54EBCFFD /* OrderedSet.a in Frameworks */,\n\t\t1D4E36D03223E04D12357D0E3E9E4F06 /* LegibleError.a in Frameworks */,\n\t\t7114D9D184985B859F50ED13FE2C6FC7 /* HotKey.a in Frameworks */,\n\t\tB6DC0EF01401A3BED2CBBF306449424F /* AppUpdater.a in Frameworks */,\n\t\tB80D12E0404E0D4FE891853C54CC0298 /* Version.a in Frameworks */,\n\t\t600AB0C92CD900012CA02DE69AB001B9 /* Path.a in Frameworks */,\n\t\tBD0BA7D75497180DD3012CA784CC7BCA /* PMKFoundation.a in Frameworks */,\n\t\t15934D6E5683C82DBE917FB0A535918C /* PromiseKit.a in Frameworks */,\n\t\tD59C5DFA9636F14344F65784AC4AF22E /* AEXML.a in Frameworks */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\nB48E25CDFE3DC639D59FCE85ECC280D9 /* Frameworks */ = {\n\tisa = PBXFrameworksBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t8B8A210C9BB8D8109AD1AC239AB9552F /* Kitchen.a in Frameworks */,\n\t\t3E61D76C08BB1902E0D0D05A19835679 /* Processor.a in Frameworks */,\n\t\t976C83FEFB06BCAD121AAEEE1C719482 /* XcakeProject.a in Frameworks */,\n\t\t931B8B12E76BBFF3D918AD5F204D0FD6 /* XcodeProject.a in Frameworks */,\n\t\tDC560344DF4532BABE105E25771A2285 /* XcodeObserver.a in Frameworks */,\n\t\tB29D6314F9D634233005F3BB6C0BCF82 /* Modelizer.a in Frameworks */,\n\t\t9809C7CF76A4546695F8874775FFC18B /* Base.a in Frameworks */,\n\t\t57D07CE56DF2981508F693E48A3CFD54 /* CakefileDescription.a in Frameworks */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n0DEFA17E751F338E5C334A3E676D734E /* XcakeProject */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\t52A4C823A8934B7C4408E5A47FF4FECB /* +functions.swift */,\n\t\t8D3944D256EB9C28558C204F63F624B5 /* deintegrate().swift */,\n\t\tCDA44BF315E7E72F7AF8D8FFAB5D39F6 /* etc.swift */,\n\t\t0EFD929CD18BA53DE82AB2B4BC7F03E3 /* scaffold().swift */,\n\t\tAF0DABA4951DF1D4D2F4308EA9757D27 /* XcakeProject.swift */,\n\t);\n\tname = XcakeProject;\n\tpath = Base/XcodeProject/XcakeProject;\n\tsourceTree = \"<group>\";\n};\n11E4BAB2730301EFC996AE1C090EA04E /* mxcl/Path.swift-0.16.1 */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\tEA37F59BD9DAFFD0F15694AABCF3B54C /* Extensions.swift */,\n\t\tD32C35009D5CF449E0D419124474C625 /* Path->Bool.swift */,\n\t\t25F48703B70EEA7E7DCC6D2D2F06C9B8 /* Path.swift */,\n\t\tDE8AEF64C23D070DC58781BE7913BE2C /* Path+Attributes.swift */,\n\t\tEA500C91598D251A97067F063150DC2A /* Path+Codable.swift */,\n\t\t94BE46F8140D74E37611092ADBEB53BE /* Path+CommonDirectories.swift */,\n\t\tA77AFC4AE522827E286DEA7B38C2C006 /* Path+FileManager.swift */,\n\t\t9EC126C205BC396E4B52986041911E1A /* Path+ls.swift */,\n\t\tD39E04B4AC317B13678FFB83CE930458 /* Path+StringConvertibles.swift */,\n\t);\n\tname = \"mxcl/Path.swift-0.16.1\";\n\tpath = \"mxcl∕Path.swift-0.16.1\";\n\tsourceTree = \"<group>\";\n};\n16D9CDF666A9E6EE114E86B1D728EB67 /* XcodeProject */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\tAAB66A0A047C8351A0114D24BF9C84D4 /* _PathDisambiguation.swift */,\n\t\tAB353A7BFBF179F59387515435E68F1B /* *Target.swift */,\n\t\tEB7A4900D64F8DD98FAE29B44BAC9C49 /* +functions.swift */,\n\t\t618FDE59E88C49B7C9ADE5C5A9159A06 /* +platforms.swift */,\n\t\tE5D258EA5994282BD85C7216EB317673 /* Group.swift */,\n\t\tB014E5511BA57DD4C34DEC96713FCC0F /* XcodeProject.swift */,\n\t\tD719A91C09C4BD993022462D57904F4E /* z.etc.swift */,\n\t\tBE28E6555AA9082953164CAB96DC7EAA /* z+buildSettings.swift */,\n\t);\n\tname = XcodeProject;\n\tpath = Base/XcodeProject;\n\tsourceTree = \"<group>\";\n};\n1717C67F49587A83891553ABA9B0E3CD /* Kitchenware */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\t05D33FD3DDE7FE2483580EF428D7DE21 /* Batter.swift */,\n\t\tCD06ECAE4D53F31C5FF63EB1A4FAA0F1 /* Dependencies.swift */,\n\t\t43F867ED701FF56BC9AA1829B4888F2F /* Cake.swift */,\n\t);\n\tname = Kitchenware;\n\tpath = \"\";\n\tsourceTree = \"<group>\";\n};\n190054F2AD8B53FAE15AE8A14391B137 /* mxcl/PromiseKit-6.8.3 */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\tE682DCE6918902D7DDF557BBEE1F747C /* after.swift */,\n\t\t3D70A7A1D451A574394BE9D849EF26BD /* Box.swift */,\n\t\tD0FDA939D602AC0EF1F3928012DDA0DC /* Catchable.swift */,\n\t\t53C5D7D1835891126DAC0217D2976BB3 /* Configuration.swift */,\n\t\t30BDDCCB89500DCBDD7BBA0272926DD0 /* CustomStringConvertible.swift */,\n\t\t97EAFD505287A688648A6F468128EEEC /* Error.swift */,\n\t\t1C473431F71F14C0C7B094C7AFC1BCB1 /* firstly.swift */,\n\t\tCF647C9C376ED858DE3D33BD092CCA7F /* Guarantee.swift */,\n\t\tB7AEA2479B3032443714E1D228FADF0C /* hang.swift */,\n\t\t9D25EA9B892F8852C3D86F85B8647FAE /* LogEvent.swift */,\n\t\t9667E7EC96A4E5AF6C72D9DDD7ACC033 /* Promise.swift */,\n\t\t41AA2ABCDA2F333EBC153257903CCFFA /* race.swift */,\n\t\t36F4FC690CAF8E887E4358E57F7AFBC1 /* Resolver.swift */,\n\t\tC217681598D56FE79A522A8D0D7CB7C7 /* Thenable.swift */,\n\t\tF2FA622D9453DC325EF8DD4097AB2C2B /* when.swift */,\n\t);\n\tname = \"mxcl/PromiseKit-6.8.3\";\n\tpath = \"mxcl∕PromiseKit-6.8.3\";\n\tsourceTree = \"<group>\";\n};\n1C4FCF6098FC3226B2546E8140B7A700 /* Products */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\tB3CDEF324226D91C75D2BCBA3E3D7952 /* Cakefile·Completion */,\n\t\t0E05502AA06041ADF62F3BF7E7659260 /* xcodeproj.a */,\n\t\t3C29E76D627B188CA3643C87B68EC436 /* PathKit.a */,\n\t\t2C62C6619223819ED3301991617A91BD /* OrderedSet.a */,\n\t\t1DBCAEFF3AB28195D7B5E09B52FDBDA9 /* LegibleError.a */,\n\t\t4F2CA03F28361DA2CD3C82B19DE28C91 /* HotKey.a */,\n\t\t19F01C205BDC9FA3129D8949BE2CB5C4 /* AppUpdater.a */,\n\t\tFD62726177028C4BC3DCB2230AD84705 /* Version.a */,\n\t\tA49E0E264A02682CCE9A823B02A46706 /* Path.a */,\n\t\t69787F8145CACFA492EC131CC2A0AA1D /* PMKFoundation.a */,\n\t\t53E3B23BDD8E313D1CCE46BCBA847860 /* PromiseKit.a */,\n\t\t3FA20E1A308B36BD34D4F6FA38D3BF30 /* AEXML.a */,\n\t\t4A7E89000FDF44A3427FBD44B878A9C1 /* Dependencies.a */,\n\t\tBF52CA51D11D9A90EF84861A2B5938B1 /* Kitchen.a */,\n\t\tC5744C074FEF959972A62160544D24F0 /* Processor.a */,\n\t\t7F8732C7CBD899BD5F0398A832669E75 /* XcakeProject.a */,\n\t\t937C922F7F6999DF1895EB3DC82906E9 /* XcodeProject.a */,\n\t\tF9CD3F23A3EB056C8061881D18FBD601 /* XcodeObserver.a */,\n\t\tBAD9493581EF0180B01D541DF06A6E4B /* Modelizer.a */,\n\t\t372DAB40CDD5A8EEE06A79D6C8AC5536 /* Base.a */,\n\t\t11D3B38D3F7DA37A8300F924107470ED /* CakefileDescription.a */,\n\t\t3F573D976FA9A0403F17F22F1A4DAA55 /* Batter.a */,\n\t\tA4B1E5C1B830E94800A96F72DE371A05 /* Cake.a */,\n\t);\n\tname = Products;\n\tsourceTree = \"<group>\";\n};\n2B096CC3B26D21065DBBCC42279425A7 /* Kitchen */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\tCEE016ECFF05687BA82A5550BE83957F /* CakeProject.swift */,\n\t\t46348EB9B861968F7D43E2F325955D37 /* FSWatcher.swift */,\n\t\t3142C0085C1236B2B3772F4960DBB8D9 /* Kitchen.swift */,\n\t\tC89B0D3A65F18AC6AE103808E1EF9054 /* KitchenDelegate.swift */,\n\t);\n\tname = Kitchen;\n\tpath = Base/XcodeProject/XcakeProject/Processor/Kitchen;\n\tsourceTree = \"<group>\";\n};\n2D9C8EE4960B9A8646E9915D1E8E527F /* PromiseKit/Foundation-3.3.1 */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\tAA87092A5BDAB632904A61E928DE49B9 /* afterlife.swift */,\n\t\t7E32B9B4F0137DD729D7F3D74688CF6D /* NSNotificationCenter+Promise.swift */,\n\t\t38AC374D097346CE8B4226D78BA0156F /* NSObject+Promise.swift */,\n\t\tA365FC1A53413924C32E4651E9D67AA9 /* NSURLSession+Promise.swift */,\n\t\t1F0D8DD1958D7B1AF9E5930838B61C63 /* Process+Promise.swift */,\n\t);\n\tname = \"PromiseKit/Foundation-3.3.1\";\n\tpath = \"PromiseKit∕Foundation-3.3.1\";\n\tsourceTree = \"<group>\";\n};\n4E61B53DB50DF6EB8EA193F7CFCB3EF8 /* Modelizer */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\t902419C27FD761BCEFE0A9AB8BF4FE87 /* Dependencies.json.swift */,\n\t\tDCA174BA4C5F72220DACB263A133F3A1 /* modelize().swift */,\n\t\t2A565382D53C145048B6FC0422270BC1 /* Module.swift */,\n\t);\n\tname = Modelizer;\n\tpath = Base/Modelizer;\n\tsourceTree = \"<group>\";\n};\n50DCC4186C454A8A35C359EBE7E6484B /*  */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\t9DD6BC9A2C80C818AD36364182F42223 /* Cakefile.swift */,\n\t\tFF9225349CD1E19735206C8679F1CCA6 /* Dependencies */,\n\t\tA954EB6899ABE9AAB9499DFC4B34F9A5 /* Batter */,\n\t\t1717C67F49587A83891553ABA9B0E3CD /* Kitchenware */,\n\t\t1C4FCF6098FC3226B2546E8140B7A700 /* Products */,\n\t);\n\tpath = \"\";\n\tsourceTree = SOURCE_ROOT;\n};\n6939D6F5712F4440359CFEF39DD7D5AA /* tadija/AEXML-4.3.3 */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\t48324EC36DFA0B91BEB4A8CF50E6133F /* Document.swift */,\n\t\t5DA0BC07DF161138B4D7A43E6A219B05 /* Element.swift */,\n\t\t835E3CF62D03CBDD1679F357A3702A9C /* Error.swift */,\n\t\t7E28C010F6CDF44DDB15986B219FCDB2 /* Options.swift */,\n\t\tB828EC0B6BCB9E838EF8719A040E05FB /* Parser.swift */,\n\t);\n\tname = \"tadija/AEXML-4.3.3\";\n\tpath = \"tadija∕AEXML-4.3.3\";\n\tsourceTree = \"<group>\";\n};\n7201B1D348675238ED3B979060D4330C /* Processor */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\tCAF60D50AF8D2A0115E908C973003A12 /* Cakefile.swift */,\n\t\t858CCCCD45F434A16E8D273190765092 /* Dependencies.swift */,\n\t\t0C15151125E344471378CB5346737FA7 /* etc.swift */,\n\t\t63FED00F5F6CA5AA95D6FD33264CC27E /* Self.swift */,\n\t\t6FDDFD13C38B75004170652473061F3A /* SwiftVersion.swift */,\n\t\tA7C16154EA6E8025D3F05AC2433A61BE /* TemporaryDirectory.swift */,\n\t);\n\tname = Processor;\n\tpath = Base/XcodeProject/XcakeProject/Processor;\n\tsourceTree = \"<group>\";\n};\nA954EB6899ABE9AAB9499DFC4B34F9A5 /* Batter */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\t2B096CC3B26D21065DBBCC42279425A7 /* Kitchen */,\n\t\t7201B1D348675238ED3B979060D4330C /* Processor */,\n\t\t0DEFA17E751F338E5C334A3E676D734E /* XcakeProject */,\n\t\t16D9CDF666A9E6EE114E86B1D728EB67 /* XcodeProject */,\n\t\tD4CCC802C372135B66030BC32FFBAB2E /* XcodeObserver */,\n\t\t4E61B53DB50DF6EB8EA193F7CFCB3EF8 /* Modelizer */,\n\t\tFFD2E5EF8107E15A82A521FDB473524F /* Base */,\n\t\tE2FEFEF0660D278EDD39D2DE868810FF /* CakefileDescription */,\n\t);\n\tname = Batter;\n\tpath = ../Sources/Model;\n\tsourceTree = \"<group>\";\n};\nC7D91F2BBBEF05D5A7E012382449D80C /* soffes/HotKey-0.1.1 */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\t3A81CC9DD3104D5CFAB0E095D7A73FDE /* HotKey.swift */,\n\t\t293B693F5D2B905EAB9D47603FF004E0 /* HotKeysController.swift */,\n\t\tE18FDE6CB448ECB4CA03C90F660EB53D /* Key.swift */,\n\t\tFB6EB63265EF5234402E15E3F05EE1C0 /* KeyCombo.swift */,\n\t\t7A124F661FEA3E444A56EA4D521A515A /* NSEventModifierFlags+HotKey.swift */,\n\t);\n\tname = \"soffes/HotKey-0.1.1\";\n\tpath = \"soffes∕HotKey-0.1.1\";\n\tsourceTree = \"<group>\";\n};\nD4CCC802C372135B66030BC32FFBAB2E /* XcodeObserver */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\tF487E1726D5CE70C1C4B0223DF5AFFDF /* Diff.swift */,\n\t\tA6A3C3E306641683ED6A2DEA9A9CEDFA /* XcodeObserver.swift */,\n\t\t278A53C448758EECE7FD6B78133E40C8 /* XcodeScriptingBridge.swift */,\n\t);\n\tname = XcodeObserver;\n\tpath = Base/XcodeObserver;\n\tsourceTree = \"<group>\";\n};\nE2FEFEF0660D278EDD39D2DE868810FF /* CakefileDescription */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\tA931901826EAFC85E24FC30A1708944E /* CakefileDescription.swift */,\n\t\t930A6BD4B016A2539E9D5013E3FCA04A /* Version+.swift */,\n\t);\n\tname = CakefileDescription;\n\tpath = CakefileDescription;\n\tsourceTree = \"<group>\";\n};\nE5CE8DDF1C7AE826DA871BE9AD9AC15F /* tuist/xcodeproj-6.6.0 */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\t1426181F4046DE0C27F56E6BD5910905 /* Errors/Errors.swift */,\n\t\t06BD24A5E56306FA76A42CE38A938E0C /* Extensions/AEXML+XcodeFormat.swift */,\n\t\tB1529B0E38393D8746B29EC816E6FBD3 /* Extensions/Bool+Extras.swift */,\n\t\t8DB463DC57B0C69C11B869C0D1D1CE34 /* Extensions/Dictionary+Enumerate.swift */,\n\t\t023860B7D6084F6464BEA7B2304B2114 /* Extensions/Dictionary+Extras.swift */,\n\t\tF87D5D97095DA0BD5E5541E880541B51 /* Extensions/KeyedDecodingContainer+Additions.swift */,\n\t\t308336D6CA83EAE1E8D36F4DE09DE65E /* Extensions/NSRecursiveLock+Sync.swift */,\n\t\t29EB733203A51041BAF8B7325873B8F8 /* Extensions/OSLog+Extras.swift */,\n\t\tF6B09E05AFC6DA8F82260DFC1ABE4BDB /* Extensions/Path+Extras.swift */,\n\t\t64ED4F4E164410F7A62B935BAC757997 /* Extensions/String+md5.swift */,\n\t\tE0917A3E0211FADCA757E973E033A8CE /* Extensions/String+Utils.swift */,\n\t\tFB0670D14B0D218E1BB9BE836B9392C7 /* Objects/BuildPhase/BuildPhase.swift */,\n\t\tC21B018E286AB818EEF5EA83B02C86E0 /* Objects/BuildPhase/PBXBuildFile.swift */,\n\t\t531404CEBE08B993CDAD51AF95383C04 /* Objects/BuildPhase/PBXBuildPhase.swift */,\n\t\t1FFC5A15BE7FEEA7952C65C2124CDB1C /* Objects/BuildPhase/PBXBuildRule.swift */,\n\t\tEA48C5FCF10729DBC5E19A78CD728387 /* Objects/BuildPhase/PBXCopyFilesBuildPhase.swift */,\n\t\t8E74C31BCB0D74EF97C4278031E8034D /* Objects/BuildPhase/PBXFrameworksBuildPhase.swift */,\n\t\t435DE35726152C660A49F9A23B51B7E3 /* Objects/BuildPhase/PBXHeadersBuildPhase.swift */,\n\t\t2B1F1175C209C392F423782054651ED5 /* Objects/BuildPhase/PBXResourcesBuildPhase.swift */,\n\t\t835B1909D4EA60D2CF046ED021E060E7 /* Objects/BuildPhase/PBXRezBuildPhase.swift */,\n\t\t852615CA271D363F36FCE47BCF0265AD /* Objects/BuildPhase/PBXShellScriptBuildPhase.swift */,\n\t\t830FE1BA33BC05A8FF3C2ED99884F684 /* Objects/BuildPhase/PBXSourcesBuildPhase.swift */,\n\t\t3875F50A4E88DECD4C85498B13194B4D /* Objects/Configuration/BuildSettings.swift */,\n\t\t7713E4DEB1439F6B933AD7032A4CB4A4 /* Objects/Configuration/XCBuildConfiguration.swift */,\n\t\t31C617BEA32F179B393AF1D212E944A9 /* Objects/Configuration/XCConfigurationList.swift */,\n\t\t8D719F3BC31505ACB101E7D6737CE1E5 /* Objects/Files/PBXContainerItem.swift */,\n\t\tFD0C6AC2F04C53C676703889CB39A3FA /* Objects/Files/PBXContainerItemProxy.swift */,\n\t\tE5FDDB74202F0211F67EAD9C489FA153 /* Objects/Files/PBXFileElement.swift */,\n\t\t85B557836B8BE6B8B5590ABD761653BA /* Objects/Files/PBXFileReference.swift */,\n\t\t71B38B8ED5DB9DCC0B70E3CC1E44402A /* Objects/Files/PBXGroup.swift */,\n\t\t2B70D9747ECEC5C6AC9E6368CFB36889 /* Objects/Files/PBXSourceTree.swift */,\n\t\t410CE76CF11E01AD634AF853AB480845 /* Objects/Files/PBXVariantGroup.swift */,\n\t\tB09953A76D3C953D379A46546E39FC8D /* Objects/Files/XCVersionGroup.swift */,\n\t\tDF68BD1B8B7E31E3692084703149A9F4 /* Objects/Project/PBXObject.swift */,\n\t\tE94C0950C8BC14BB473DDD0C09FDEB12 /* Objects/Project/PBXObjectParser.swift */,\n\t\t91D674DA388038DB2C7C2DCC6B13CA11 /* Objects/Project/PBXObjectReference.swift */,\n\t\t722A12F4645B5D35D39B45AFA1D76983 /* Objects/Project/PBXObjects.swift */,\n\t\tB14C812ADA5BF5033A67333BAF077A7A /* Objects/Project/PBXOutputSettings.swift */,\n\t\t87FA10E492A0664C5F376C3AADA117AB /* Objects/Project/PBXProj.swift */,\n\t\t559797E564267A36E62DE4ADF60465B7 /* Objects/Project/PBXProject.swift */,\n\t\tA50CE25F21E57E92B7A610699FA83BC1 /* Objects/Project/PBXProjEncoder.swift */,\n\t\t675FB47A04E79CDCC955D8FCF3A4BF80 /* Objects/Sourcery/Equality.generated.swift */,\n\t\t40B08A9630C2EF6944BF3EE3F4CD8A04 /* Objects/Sourcery/Sourcery.swift */,\n\t\t76149DDC4F8A2B10AC9F40DC12C04A01 /* Objects/Targets/PBXAggregateTarget.swift */,\n\t\t8581BD4238C94C7B078D7E65968660C0 /* Objects/Targets/PBXLegacyTarget.swift */,\n\t\t7D3C314B487A12D0E1C0D029FE36371D /* Objects/Targets/PBXNativeTarget.swift */,\n\t\t2BE47230D3E16F17B6C53D4CD9ABF0A7 /* Objects/Targets/PBXProductType.swift */,\n\t\t31102E62D8DBA38978DFFDA3A5FF6AD9 /* Objects/Targets/PBXReferenceProxy.swift */,\n\t\t1AF5A7DF8CE28184F27C6599C742AC25 /* Objects/Targets/PBXTarget.swift */,\n\t\tBB42F45DDB75F843BD744639C008C84B /* Objects/Targets/PBXTargetDependency.swift */,\n\t\t7A946331648AD8B89896F7F8669B8E51 /* Project/WorkspaceSettings.swift */,\n\t\tB41FF1790C8AA4E84A29A33DAE05468B /* Project/XCBreakpointList.swift */,\n\t\t4B89F8E5109BA12DC10ED95129E77944 /* Project/Xcode.swift */,\n\t\tF9CC5027FFDDFF68DBEF95C7EC0B2677 /* Project/XcodeProj.swift */,\n\t\t3C408218005B7BC75A3ABD08133612D9 /* Project/XCSharedData.swift */,\n\t\t381C3BC031CA52785EC98BBE0F7D2F6F /* Protocols/Writable.swift */,\n\t\t9DB38989A054A4EA67BEB37294BFDC38 /* Scheme/XCScheme.swift */,\n\t\t80158EAEB4E68B546727248C48EF0F17 /* Scheme/XCScheme+AditionalOption.swift */,\n\t\t2274AC91D7F94448E0AF2969D9BCDA58 /* Scheme/XCScheme+AnalyzeAction.swift */,\n\t\t49E819CC92D95188B91ABBEDA33B46C3 /* Scheme/XCScheme+ArchiveAction.swift */,\n\t\t7C8796C21F96CBC0C0A4E13733B4CD0E /* Scheme/XCScheme+BuildableProductRunnable.swift */,\n\t\t9DCF2ACDC813D1597DCDDFE3EA904191 /* Scheme/XCScheme+BuildableReference.swift */,\n\t\t0E3AD59FD7C82A5F84B7C248687AB331 /* Scheme/XCScheme+BuildAction.swift */,\n\t\tDD9AB41547E4057E3F4F4398F9B8E294 /* Scheme/XCScheme+CommandLineArguments.swift */,\n\t\t0B6CC87C2DDD9FDBA1C2CBD27071D4AC /* Scheme/XCScheme+EnvironmentVariable.swift */,\n\t\t576C9C9EE9D61D301635A94562588667 /* Scheme/XCScheme+ExecutionAction.swift */,\n\t\tE9164B58D3D030AD7DD1D4633988ECCA /* Scheme/XCScheme+LaunchAction.swift */,\n\t\t76C9275C1BF293F18BCC5970643036F9 /* Scheme/XCScheme+LocationScenarioReference.swift */,\n\t\t3185556D97EDCF571118B9C60F3D4DCB /* Scheme/XCScheme+ProfileAction.swift */,\n\t\tA909F2285D6BB302E831CD131B206FB1 /* Scheme/XCScheme+SerialAction.swift */,\n\t\t57A5610558926A1003CFFD244AA5DA23 /* Scheme/XCScheme+SkippedTests.swift */,\n\t\t43DB4EE450B414ECE6DEDAAB4F40019D /* Scheme/XCScheme+TestableReference.swift */,\n\t\tA7784500AEAF00A3954F252BF7EB9186 /* Scheme/XCScheme+TestAction.swift */,\n\t\t01B73C1D9BBF582F1B4CA11D1FD2BCD5 /* Utils/BuildSettingsProvider.swift */,\n\t\t4CD7DF2A21452F6F3764E31A50E68AF2 /* Utils/CommentedString.swift */,\n\t\t9A4F661909381C2B72260EC5E92EB852 /* Utils/Decoders.swift */,\n\t\t3D18DB9B60F9CAE6DB1EE58AA5CDCA1C /* Utils/JSONDecoding.swift */,\n\t\t04110D4A7CD13051C705542C94A0A7A9 /* Utils/OSLogger.swift */,\n\t\t1B52A49D89C35234D21902B915BB0DB7 /* Utils/PlistValue.swift */,\n\t\t1C0E03F6E6EECCE50817B52C201AEAA4 /* Utils/ReferenceGenerator.swift */,\n\t\tCB67A28ADBD062CE337B8DF5E1ABA3B4 /* Utils/XCConfig.swift */,\n\t\tB30144F1A4CC788F25022BF92EA083F6 /* Workspace/XCWorkspace.swift */,\n\t\t755B5AE0CCEBAD76024C7BACFD3769CF /* Workspace/XCWorkspaceData.swift */,\n\t\tE32BB1D0A32744ECAA417C6154B85B6D /* Workspace/XCWorkspaceDataElement.swift */,\n\t\t669A914005810A46DA64A779CE45E521 /* Workspace/XCWorkspaceDataElementLocationType.swift */,\n\t\t949BF795030FD942ABF42746C69282A2 /* Workspace/XCWorkspaceDataFileRef.swift */,\n\t\tDD8483ADF0C01E41D32E3BEA6C2F50FF /* Workspace/XCWorkspaceDataGroup.swift */,\n\t);\n\tname = \"tuist/xcodeproj-6.6.0\";\n\tpath = \"tuist∕xcodeproj-6.6.0\";\n\tsourceTree = \"<group>\";\n};\nFF166AA65D3F9C011EA163E87B9A8DCE /* mxcl/Version-1.0.3 */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\tDF0430C986F4136EE13A64A2653D32D9 /* Version.swift */,\n\t\t40CA625F76FE45EABC6548E7FA9081C9 /* Version+Codable.swift */,\n\t\t0EB24F5AA5F9F47F5FE894B8910CCD3F /* Version+Comparable.swift */,\n\t\t6F32012741B387F7AD9EB83C1E2AF212 /* Version+Foundation.swift */,\n\t\t6A6EF02B86E86BA90A2AD45729B1EA6A /* Version+Range.swift */,\n\t);\n\tname = \"mxcl/Version-1.0.3\";\n\tpath = \"mxcl∕Version-1.0.3\";\n\tsourceTree = \"<group>\";\n};\nFF9225349CD1E19735206C8679F1CCA6 /* Dependencies */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\tE5CE8DDF1C7AE826DA871BE9AD9AC15F /* tuist/xcodeproj-6.6.0 */,\n\t\t8936109BF1AA3578412FAD3077209014 /* kylef∕PathKit-0.9.2.swift */,\n\t\tB1F70701A65B3979718758A9C96B7E74 /* Weebly∕OrderedSet-3.1.0.swift */,\n\t\t4144D0D13AB2A191101B99B2DEDE581C /* mxcl∕LegibleError-1.0.1.swift */,\n\t\tC7D91F2BBBEF05D5A7E012382449D80C /* soffes/HotKey-0.1.1 */,\n\t\t3EACC5F861EC78E815F715FE0D7F0DB8 /* mxcl∕AppUpdater-1.0.3.swift */,\n\t\tFF166AA65D3F9C011EA163E87B9A8DCE /* mxcl/Version-1.0.3 */,\n\t\t11E4BAB2730301EFC996AE1C090EA04E /* mxcl/Path.swift-0.16.1 */,\n\t\t2D9C8EE4960B9A8646E9915D1E8E527F /* PromiseKit/Foundation-3.3.1 */,\n\t\t190054F2AD8B53FAE15AE8A14391B137 /* mxcl/PromiseKit-6.8.3 */,\n\t\t6939D6F5712F4440359CFEF39DD7D5AA /* tadija/AEXML-4.3.3 */,\n\t);\n\tname = Dependencies;\n\tpath = ../Dependencies;\n\tsourceTree = \"<group>\";\n};\nFFD2E5EF8107E15A82A521FDB473524F /* Base */ = {\n\tisa = PBXGroup;\n\tchildren = (\n\t\tE81FE693D4FBCAC3084891079AC322C9 /* Path+inreplace().swift */,\n\t\tFEC29E1DAC3B9B8D9CD1097C65196C1C /* Process+facade.swift */,\n\t\t804B783359D6CCE7145742C88183EA36 /* Sequence+KeyPath.swift */,\n\t\t05103104AE592402CB93C1FFE5E2D1CD /* StreamReader.swift */,\n\t\t72C3939CC65CE41D34872BE7C25A01C5 /* SwiftVersion.swift */,\n\t\t749A8E67AC5834C6A956EAADEB64557B /* topologicalSort().swift */,\n\t);\n\tname = Base;\n\tpath = Base;\n\tsourceTree = \"<group>\";\n};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n0F64CBB97351A503B1F408F40AB7E996 /* Batter·Kitchen */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = 75705B7E4DE90E787B5587BB39A9C36B /* Build configuration list for PBXNativeTarget \"Batter·Kitchen\" */;\n\tbuildPhases = (\n\t\tA9A4A9984792079405DBB34A1D20B75B /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\t86F70278902535F201592D638128287A /* PBXTargetDependency */,\n\t);\n\tname = \"Batter·Kitchen\";\n\tproductName = Kitchen;\n\tproductReference = BF52CA51D11D9A90EF84861A2B5938B1 /* Kitchen.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\n50A4D32099C32D3207892A9614D37B66 /* Batter·Processor */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = 7081C02CA5D1323B9B25721C60922C92 /* Build configuration list for PBXNativeTarget \"Batter·Processor\" */;\n\tbuildPhases = (\n\t\t3BD3E2AB91B7EC4954112ECB41545554 /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\tFCE6F711BDA27F1587A676EA4E1A223E /* PBXTargetDependency */,\n\t);\n\tname = \"Batter·Processor\";\n\tproductName = Processor;\n\tproductReference = C5744C074FEF959972A62160544D24F0 /* Processor.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\n5D1C4ECF6D5347A44CB1E59E5BB558E0 /* Deps·AppUpdater */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = 1CB785113119F8BC5FF59CA4741AA37B /* Build configuration list for PBXNativeTarget \"Deps·AppUpdater\" */;\n\tbuildPhases = (\n\t\t01DD71F8D6077C0F16AA033CB312695C /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\tDE622C7A094011A28248907BDAFD9AD7 /* PBXTargetDependency */,\n\t\tC2464976BABCABAA3A72863AE3E78F30 /* PBXTargetDependency */,\n\t\t47F528038C3330D21B21869C0B0FB0A9 /* PBXTargetDependency */,\n\t);\n\tname = \"Deps·AppUpdater\";\n\tproductName = AppUpdater;\n\tproductReference = 19F01C205BDC9FA3129D8949BE2CB5C4 /* AppUpdater.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\n76CCBFA038A347F71E7B5BFB1521AC8A /* Deps·Path */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = F96FF9FDA0DC746E15BB01A0E5531883 /* Build configuration list for PBXNativeTarget \"Deps·Path\" */;\n\tbuildPhases = (\n\t\t9E7097A7C3D241A0B2CCA4D3B78A8A83 /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\tB05A9D037029AAFBD5DCAD6ECBF89F09 /* PBXTargetDependency */,\n\t);\n\tname = \"Deps·Path\";\n\tproductName = Path;\n\tproductReference = A49E0E264A02682CCE9A823B02A46706 /* Path.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\n8B4D032D3EA2708E1BF1B498E5AAC085 /* Deps·LegibleError */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = 5375538FF4A3E415410EE0F07030C0A4 /* Build configuration list for PBXNativeTarget \"Deps·LegibleError\" */;\n\tbuildPhases = (\n\t\t0D2313C56B49445FFFBAFA66F386B894 /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\tFDED9CB4A42F8E451B9CD92A9214BED0 /* PBXTargetDependency */,\n\t);\n\tname = \"Deps·LegibleError\";\n\tproductName = LegibleError;\n\tproductReference = 1DBCAEFF3AB28195D7B5E09B52FDBDA9 /* LegibleError.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\n8B942976617019A6C464818315598CC1 /* Cake */ = {\n\tisa = PBXNativeTarget;\n\tbuildPhases = (\n\t\t9D57241684611D5226E52EBD3A97727C /* Sources */,\n\t\t0B026A614C2516F4FCE621E12A0C2BBD /* Frameworks */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\tCB56305824BFCA6B67740F6043A4B9E2 /* PBXTargetDependency */,\n\t\t3366830391752771A1D8AFE2C77B8DC4 /* PBXTargetDependency */,\n\t\t6F2865C025F7F740FF65DBD4991157C8 /* PBXTargetDependency */,\n\t);\n\tname = Cake;\n\tproductReference = A4B1E5C1B830E94800A96F72DE371A05 /* Cake.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\n8FEBB13B61D6321603EC90A5606F8C4F /* Deps·HotKey */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = 525C58D15460DD55EAC5A3285814107D /* Build configuration list for PBXNativeTarget \"Deps·HotKey\" */;\n\tbuildPhases = (\n\t\t61C5A1E04CE0BF1806F68D0A00D9CA69 /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\tA6D31631D95C3A51C9FAABBAA253F1D7 /* PBXTargetDependency */,\n\t);\n\tname = \"Deps·HotKey\";\n\tproductName = HotKey;\n\tproductReference = 4F2CA03F28361DA2CD3C82B19DE28C91 /* HotKey.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\n9CF1FA8024CC8159DE776A7595DC3523 /* Deps·Version */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = B372C3FDAB1008B4B28D830E0B8DF1A9 /* Build configuration list for PBXNativeTarget \"Deps·Version\" */;\n\tbuildPhases = (\n\t\tE2BAB0B95B059BB004904ECA59F68448 /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\t8FE2AD32E33987A961C4396477BA6D4D /* PBXTargetDependency */,\n\t);\n\tname = \"Deps·Version\";\n\tproductName = Version;\n\tproductReference = FD62726177028C4BC3DCB2230AD84705 /* Version.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\nA49235A78CF83BF260878E68B866C986 /* Batter·Base */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = 54C3D682088F52A98460F95C69B3AB03 /* Build configuration list for PBXNativeTarget \"Batter·Base\" */;\n\tbuildPhases = (\n\t\t89F171C5C55F88CECBB4D9F919595B44 /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\tC94339126C714AD460BE58DB6BE8A056 /* PBXTargetDependency */,\n\t);\n\tname = \"Batter·Base\";\n\tproductName = Base;\n\tproductReference = 372DAB40CDD5A8EEE06A79D6C8AC5536 /* Base.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\nAC6B4791DEE2977626A076B8F9A7666F /* Deps·OrderedSet */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = 12501F7CC58BB1124BB427E6ACE8AAFD /* Build configuration list for PBXNativeTarget \"Deps·OrderedSet\" */;\n\tbuildPhases = (\n\t\tA51B210879B02EBF2327F37032BF81B3 /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\t0565BAB4E438C2EA664F8C83EB0CE946 /* PBXTargetDependency */,\n\t);\n\tname = \"Deps·OrderedSet\";\n\tproductName = OrderedSet;\n\tproductReference = 2C62C6619223819ED3301991617A91BD /* OrderedSet.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\nB03189C2563DE1C075659DC03EF81210 /* Cakefile·Completion */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = 3A3934967D7790F017425C98A64CD375 /* Build configuration list for PBXNativeTarget \"Cakefile·Completion\" */;\n\tbuildPhases = (\n\t\tA55DDFC1E192780D65C32457CB5F07F8 /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t);\n\tname = \"Cakefile·Completion\";\n\tproductReference = B3CDEF324226D91C75D2BCBA3E3D7952 /* Cakefile·Completion */;\n\tproductType = \"com.apple.product-type.tool\";\n};\nB4280F358AD4C3799414724EE00E6812 /* Deps·PMKFoundation */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = D6F76942AA26F8FE33C0B9E559F048A3 /* Build configuration list for PBXNativeTarget \"Deps·PMKFoundation\" */;\n\tbuildPhases = (\n\t\tDD25F76D9BF91196996408AAA2D08CA6 /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\tC92758E700B37ED68776342F73765D28 /* PBXTargetDependency */,\n\t);\n\tname = \"Deps·PMKFoundation\";\n\tproductName = PMKFoundation;\n\tproductReference = 69787F8145CACFA492EC131CC2A0AA1D /* PMKFoundation.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\nB49CC989FC5BE99773DFD32B46D8E82C /* Deps·PathKit */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = DC551BFA9E078B27003D39F40946DE59 /* Build configuration list for PBXNativeTarget \"Deps·PathKit\" */;\n\tbuildPhases = (\n\t\tDCA5BDE643D482824931150E443818EA /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\t478D6FA01AC7470AE22A47A14BB76D0E /* PBXTargetDependency */,\n\t);\n\tname = \"Deps·PathKit\";\n\tproductName = PathKit;\n\tproductReference = 3C29E76D627B188CA3643C87B68EC436 /* PathKit.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\nB4EB89E549B6ADCED02958295D4FAD21 /* Deps·xcodeproj */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = 06F4E05BD565282710B442AE5EA794B4 /* Build configuration list for PBXNativeTarget \"Deps·xcodeproj\" */;\n\tbuildPhases = (\n\t\t6EA74799AC8908A90D1133CF4872622D /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\t52375388D4F28520E6EDF71CF9157BD9 /* PBXTargetDependency */,\n\t\tC705D93D65D5402E574821CB2982B55B /* PBXTargetDependency */,\n\t);\n\tname = \"Deps·xcodeproj\";\n\tproductName = xcodeproj;\n\tproductReference = 0E05502AA06041ADF62F3BF7E7659260 /* xcodeproj.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\nBD398413C05B07BBE2B6E2D14C9EE8D9 /* Deps·PromiseKit */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = B961BFD93B1016266AB52B4C43632B1C /* Build configuration list for PBXNativeTarget \"Deps·PromiseKit\" */;\n\tbuildPhases = (\n\t\t0330731A9D0FB38F456E61DB3932B0FF /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\t327C41C1F24B05BA591F163701AC5FFD /* PBXTargetDependency */,\n\t);\n\tname = \"Deps·PromiseKit\";\n\tproductName = PromiseKit;\n\tproductReference = 53E3B23BDD8E313D1CCE46BCBA847860 /* PromiseKit.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\nC1038750BB9B8EA5926C885645506714 /* Batter·XcodeObserver */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = B12860ED6D40D093F21670917F129409 /* Build configuration list for PBXNativeTarget \"Batter·XcodeObserver\" */;\n\tbuildPhases = (\n\t\tE73EE8C4A3772E20E3C2F0C8C36A37E8 /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\t9872C58C32FAF03ACEC329FFD2C13162 /* PBXTargetDependency */,\n\t\tB9568118D2B144E528AFACC9A3063C8F /* PBXTargetDependency */,\n\t);\n\tname = \"Batter·XcodeObserver\";\n\tproductName = XcodeObserver;\n\tproductReference = F9CD3F23A3EB056C8061881D18FBD601 /* XcodeObserver.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\nC8AC307C08B1141701DFEAAD12667716 /* Batter·Modelizer */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = AE6ECBCB9E2BBD1C00E2B864AB33FCFE /* Build configuration list for PBXNativeTarget \"Batter·Modelizer\" */;\n\tbuildPhases = (\n\t\tE5782A25D53239D7365C8040FEACD39D /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\t7B00EE4575A017E6BDDA5BFB0B5D5383 /* PBXTargetDependency */,\n\t\t315AE0B2F6C88E934BB5814FD47A2FB0 /* PBXTargetDependency */,\n\t);\n\tname = \"Batter·Modelizer\";\n\tproductName = Modelizer;\n\tproductReference = BAD9493581EF0180B01D541DF06A6E4B /* Modelizer.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\nD1CE66C2AF312DCD9A12B6444FB0D2EA /* Deps·AEXML */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = F77D98629B64E24B6FFAE21718CA106B /* Build configuration list for PBXNativeTarget \"Deps·AEXML\" */;\n\tbuildPhases = (\n\t\tDEEC3979981A3F4CE78FAB1F8FE83F39 /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\tF47DA310FEED1D577995EC51108D5E92 /* PBXTargetDependency */,\n\t);\n\tname = \"Deps·AEXML\";\n\tproductName = AEXML;\n\tproductReference = 3FA20E1A308B36BD34D4F6FA38D3BF30 /* AEXML.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\nD4D58EF887FC75ADD1D795BF5B47A879 /* Batter·CakefileDescription */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = FB3F5BEE27646BEEDCE7AAFF12A2910F /* Build configuration list for PBXNativeTarget \"Batter·CakefileDescription\" */;\n\tbuildPhases = (\n\t\tE8E64701521367922653F85FE4202F81 /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\tF79E560CAF7B3FC1F3068CFE9B10BDE1 /* PBXTargetDependency */,\n\t);\n\tname = \"Batter·CakefileDescription\";\n\tproductName = CakefileDescription;\n\tproductReference = 11D3B38D3F7DA37A8300F924107470ED /* CakefileDescription.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\nDCF843C187E023E2097ACF9EABA93DD6 /* Dependencies */ = {\n\tisa = PBXNativeTarget;\n\tbuildPhases = (\n\t\t110D4C6492AD4DAAB8F0701D634714CF /* Frameworks */,\n\t\tB72D8CDE7B96F674B97F50DBA7722D81 /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\t1D8AB91B1934ECA2B505C6183A5FC38B /* PBXTargetDependency */,\n\t\t3A19463D99686825EC39E9ED03F9589E /* PBXTargetDependency */,\n\t\tBD6D1B5E2089F89F86DB1C2CF90CB984 /* PBXTargetDependency */,\n\t\tFC5D401D66B2304DBCA5DBFCFE9A79CA /* PBXTargetDependency */,\n\t\tCFF9303A30E7F181CB5ED4393B13666C /* PBXTargetDependency */,\n\t\t47FC00F222C163921E063D31FC5EBDFA /* PBXTargetDependency */,\n\t\tFDB6A7614F45C42C95995739384B5927 /* PBXTargetDependency */,\n\t\t74ABE28A43D4DE4FF4BC639358381F75 /* PBXTargetDependency */,\n\t\tCCD24D36751009E477715FE65934C8C9 /* PBXTargetDependency */,\n\t\t5F6E912FB8A1E2C86A4158675E8BB16A /* PBXTargetDependency */,\n\t\t168122E044F80C89406C3809470BA6C7 /* PBXTargetDependency */,\n\t);\n\tname = Dependencies;\n\tproductReference = 4A7E89000FDF44A3427FBD44B878A9C1 /* Dependencies.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\nDF69393E8DED4E7C87625E2008C40E41 /* Batter·XcodeProject */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = AA3351F9CE1B4053E2CE65B0FC1809D9 /* Build configuration list for PBXNativeTarget \"Batter·XcodeProject\" */;\n\tbuildPhases = (\n\t\tB32939C0E66AF37C44610611EECFDF0E /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\tA4389FBC591F83984259446503E7520E /* PBXTargetDependency */,\n\t\t53F2F8E019D9AF0707A740E3371C45D4 /* PBXTargetDependency */,\n\t);\n\tname = \"Batter·XcodeProject\";\n\tproductName = XcodeProject;\n\tproductReference = 937C922F7F6999DF1895EB3DC82906E9 /* XcodeProject.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\nED829D4B109C4E4B415B8F01358C62F3 /* Batter·XcakeProject */ = {\n\tisa = PBXNativeTarget;\n\tbuildConfigurationList = 9CF1F52C15FBC9D5635FDB05C6CF216F /* Build configuration list for PBXNativeTarget \"Batter·XcakeProject\" */;\n\tbuildPhases = (\n\t\tEE6483AD0BF951DAC3964ABABF818D90 /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\t01A54B9D047FC8AE6C2A5B51C43EA12F /* PBXTargetDependency */,\n\t\t3184BA9F3D3D5E046B7C5470349375F9 /* PBXTargetDependency */,\n\t\t13C0C02DD80211AD05DB9A4AB0A60C5D /* PBXTargetDependency */,\n\t);\n\tname = \"Batter·XcakeProject\";\n\tproductName = XcakeProject;\n\tproductReference = 7F8732C7CBD899BD5F0398A832669E75 /* XcakeProject.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\nF5D94DE7A2DF28D8FD6E0C310044455E /* Batter */ = {\n\tisa = PBXNativeTarget;\n\tbuildPhases = (\n\t\tB48E25CDFE3DC639D59FCE85ECC280D9 /* Frameworks */,\n\t\t86204B913285479790C8B40218A6D01E /* Sources */,\n\t);\n\tbuildRules = (\n\t);\n\tdependencies = (\n\t\tACABA24C3D2AB0E217E730CCFD32A5C1 /* PBXTargetDependency */,\n\t\t8C19EF95D17BAD3069694292CEA096BB /* PBXTargetDependency */,\n\t\tCE7201A86F96504B6EA253FE9AD95394 /* PBXTargetDependency */,\n\t\tE19D06FB14E30A3A83D27D6B41D47C4C /* PBXTargetDependency */,\n\t);\n\tname = Batter;\n\tproductReference = 3F573D976FA9A0403F17F22F1A4DAA55 /* Batter.a */;\n\tproductType = \"com.apple.product-type.library.static\";\n};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\nDAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */ = {\n\tisa = PBXProject;\n\tattributes = {\n\t\tTargetAttributes = {\n\t\t\t5D1C4ECF6D5347A44CB1E59E5BB558E0 = {\n\t\t\t\tLastSwiftMigration = 9999;\n\t\t\t};\n\t\t\t76CCBFA038A347F71E7B5BFB1521AC8A = {\n\t\t\t\tLastSwiftMigration = 9999;\n\t\t\t};\n\t\t\t8B4D032D3EA2708E1BF1B498E5AAC085 = {\n\t\t\t\tLastSwiftMigration = 9999;\n\t\t\t};\n\t\t\t8FEBB13B61D6321603EC90A5606F8C4F = {\n\t\t\t\tLastSwiftMigration = 9999;\n\t\t\t};\n\t\t\t9CF1FA8024CC8159DE776A7595DC3523 = {\n\t\t\t\tLastSwiftMigration = 9999;\n\t\t\t};\n\t\t\tAC6B4791DEE2977626A076B8F9A7666F = {\n\t\t\t\tLastSwiftMigration = 9999;\n\t\t\t};\n\t\t\tB4280F358AD4C3799414724EE00E6812 = {\n\t\t\t\tLastSwiftMigration = 9999;\n\t\t\t};\n\t\t\tB49CC989FC5BE99773DFD32B46D8E82C = {\n\t\t\t\tLastSwiftMigration = 9999;\n\t\t\t};\n\t\t\tB4EB89E549B6ADCED02958295D4FAD21 = {\n\t\t\t\tLastSwiftMigration = 9999;\n\t\t\t};\n\t\t\tBD398413C05B07BBE2B6E2D14C9EE8D9 = {\n\t\t\t\tLastSwiftMigration = 9999;\n\t\t\t};\n\t\t\tD1CE66C2AF312DCD9A12B6444FB0D2EA = {\n\t\t\t\tLastSwiftMigration = 9999;\n\t\t\t};\n\t\t};\n\t};\n\tbuildConfigurationList = E7FAEEC4302D535402308E4CA6048DBC /* Build configuration list for PBXProject \"Cake\" */;\n\tcompatibilityVersion = \"Xcode 9.3\";\n\thasScannedForEncodings = 0;\n\tmainGroup = 50DCC4186C454A8A35C359EBE7E6484B /*  */;\n\tproductRefGroup = 1C4FCF6098FC3226B2546E8140B7A700 /* Products */;\n\tprojectDirPath = \"\";\n\tprojectRoot = \"\";\n\ttargets = (\n\t\t818A4854C95B333066E8C4A9D0FE3104 /* Cakefile */,\n\t\tB03189C2563DE1C075659DC03EF81210 /* Cakefile·Completion */,\n\t\tB4EB89E549B6ADCED02958295D4FAD21 /* Deps·xcodeproj */,\n\t\tB49CC989FC5BE99773DFD32B46D8E82C /* Deps·PathKit */,\n\t\tAC6B4791DEE2977626A076B8F9A7666F /* Deps·OrderedSet */,\n\t\t8B4D032D3EA2708E1BF1B498E5AAC085 /* Deps·LegibleError */,\n\t\t8FEBB13B61D6321603EC90A5606F8C4F /* Deps·HotKey */,\n\t\t5D1C4ECF6D5347A44CB1E59E5BB558E0 /* Deps·AppUpdater */,\n\t\t9CF1FA8024CC8159DE776A7595DC3523 /* Deps·Version */,\n\t\t76CCBFA038A347F71E7B5BFB1521AC8A /* Deps·Path */,\n\t\tB4280F358AD4C3799414724EE00E6812 /* Deps·PMKFoundation */,\n\t\tBD398413C05B07BBE2B6E2D14C9EE8D9 /* Deps·PromiseKit */,\n\t\tD1CE66C2AF312DCD9A12B6444FB0D2EA /* Deps·AEXML */,\n\t\tDCF843C187E023E2097ACF9EABA93DD6 /* Dependencies */,\n\t\t0F64CBB97351A503B1F408F40AB7E996 /* Batter·Kitchen */,\n\t\t50A4D32099C32D3207892A9614D37B66 /* Batter·Processor */,\n\t\tED829D4B109C4E4B415B8F01358C62F3 /* Batter·XcakeProject */,\n\t\tDF69393E8DED4E7C87625E2008C40E41 /* Batter·XcodeProject */,\n\t\tC1038750BB9B8EA5926C885645506714 /* Batter·XcodeObserver */,\n\t\tC8AC307C08B1141701DFEAAD12667716 /* Batter·Modelizer */,\n\t\tA49235A78CF83BF260878E68B866C986 /* Batter·Base */,\n\t\tD4D58EF887FC75ADD1D795BF5B47A879 /* Batter·CakefileDescription */,\n\t\tF5D94DE7A2DF28D8FD6E0C310044455E /* Batter */,\n\t\t27CCC44DFA86333E66FEE34EA8063784 /* Versionator */,\n\t\t8B942976617019A6C464818315598CC1 /* Cake */,\n\t);\n};\n/* End PBXProject section */\n\n/* Begin PBXShellScriptBuildPhase section */\n6F67EDB0066A07EA8ACEC9D4D60F4E3F /* Regenerate Cake.xcodeproj */ = {\n\tisa = PBXShellScriptBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t);\n\tinputPaths = (\n\t\t\"$(PROJECT_DIR)/../Cakefile.swift\",\n\t);\n\tname = \"Regenerate Cake.xcodeproj\";\n\toutputPaths = (\n\t\t\"$(PROJECT_DIR)/Cakefile.json\",\n\t\t\"$(PROJECT_DIR)/Dependencies.json\",\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n\tshellPath = \"$(DT_TOOLCHAIN_DIR)/usr/bin/swift\";\n\tshellScript = \"import func Darwin.fputs\\nimport var Darwin.stderr\\nimport ScriptingBridge\\nimport AppKit\\n\\nfunc print(_ objs: Any...) {\\n    let str = objs.reduce(into: \\\"\\\") { $0.append(\\\" \\\\($1)\\\") }\\n    fputs(str, stderr)\\n}\\n\\nlet apps = NSRunningApplication.runningApplications(withBundleIdentifier: \\\"dev.mxcl.Cake\\\")\\n\\nswitch apps.count {\\ncase 0:\\n    print(\\\"warning: Cake.app not running, Cakefile changes will not take effect\\\")\\ncase 1:\\n    guard let bundle = apps[0].bundleURL else {\\n        print(\\\"Failed to obtain Cake.app location\\\")\\n        exit(1)\\n    }\\n    guard let projectDir = ProcessInfo.processInfo.environment[\\\"PROJECT_DIR\\\"] else {\\n        print(\\\"Failed to obtain PROJECT_DIR\\\")\\n        exit(2)\\n    }\\n    let path = bundle.appendingPathComponent(\\\"Contents/MacOS/cake-build\\\").path\\n    let task = Process()\\n    task.launchPath = path\\n    task.arguments = [String(apps[0].processIdentifier), projectDir]\\n    try task.run()\\n    task.waitUntilExit()\\n    exit(task.terminationStatus)\\ndefault:\\n    print(\\\"error: More than one instance of Cake.app is running\\\")\\n    exit(3)\\n}\\n\";\n\tshowEnvVarsInLog = 0;\n};\nB0CCAA5D1D192F6963E1F5560239A386 /* Determine Version */ = {\n\tisa = PBXShellScriptBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t);\n\tinputPaths = (\n\t\t../.git/refs/tags,\n\t);\n\tname = \"Determine Version\";\n\toutputPaths = (\n\t\tVersion.xcconfig,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n\tshellPath = /bin/sh;\n\tshellScript = \"v=$(git describe --tags --always --abbrev=0)\\nn=$(git rev-list HEAD --count)\\n\\nif [[ -z $v ]]; then v=\\\"0.0.0\\\"; fi\\nif [[ -z $n ]]; then n=\\\"0\\\"; fi\\n\\necho \\\"CURRENT_PROJECT_VERSION = $n\\\" > Version.xcconfig\\necho \\\"SEMANTIC_PROJECT_VERSION = $v\\\" >> Version.xcconfig\\necho \\\"SEMANTIC_PROJECT_VERSION[config=Debug] = $v-debug\\\" >> Version.xcconfig\\n\";\n\tshowEnvVarsInLog = 0;\n};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n01DD71F8D6077C0F16AA033CB312695C /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\tDC86CA0F4A8831D94959D21DD78C26C0 /* mxcl∕AppUpdater-1.0.3.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\n0330731A9D0FB38F456E61DB3932B0FF /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t37C01C838BE8DE1C664691AA547031E5 /* after.swift in Sources */,\n\t\tCD29B1158D97E7F2767B742E15BB5F1B /* Box.swift in Sources */,\n\t\tA2A8C2A61706862AF67AB27B2D159F04 /* Catchable.swift in Sources */,\n\t\t173AC44E5DDAF718CE86EE5D54DB1A23 /* Configuration.swift in Sources */,\n\t\t4DAA0F96F543E4A6D90BDB8AC22BC759 /* CustomStringConvertible.swift in Sources */,\n\t\t9AD25944060C73EBC3D7D4B8ED647F55 /* Error.swift in Sources */,\n\t\tDBF24B2F67D4AD415385D407F78EBFE7 /* firstly.swift in Sources */,\n\t\t8A7FBCE750BACE16FA0C7D24A8E0FC26 /* Guarantee.swift in Sources */,\n\t\tB363F49F2AF887172600F5CD67F7C4F2 /* hang.swift in Sources */,\n\t\t90E680E24018A067844D7A6860BDD036 /* LogEvent.swift in Sources */,\n\t\t13A12CCBECF26AF3B18468E445CEF598 /* Promise.swift in Sources */,\n\t\tB965111421F5F7EA96A6384139DB4AD1 /* race.swift in Sources */,\n\t\t2B35177067A9C34EDEB33A8164DE4588 /* Resolver.swift in Sources */,\n\t\tBEC710FA022A69539DE83D3DA26D2D46 /* Thenable.swift in Sources */,\n\t\tDD2127A7693447EA31FC5844269A5476 /* when.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\n0D2313C56B49445FFFBAFA66F386B894 /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t656A6AF815F06DF3D24C506289398B6D /* mxcl∕LegibleError-1.0.1.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\n3BD3E2AB91B7EC4954112ECB41545554 /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t1B8DDA4AC227EC58E450FF52FA21B600 /* Cakefile.swift in Sources */,\n\t\t96CAE3141B8C653FF20D854469F10C2C /* Dependencies.swift in Sources */,\n\t\tFEB9BA4D068A75074CBA587AFBC15867 /* etc.swift in Sources */,\n\t\tDEBA5D57958559217B612C305D80D18B /* Self.swift in Sources */,\n\t\tD10A7E8D4601C0821314BCB968F68F73 /* SwiftVersion.swift in Sources */,\n\t\t48AE346FE31B6E30412FC556CC270BEC /* TemporaryDirectory.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\n61C5A1E04CE0BF1806F68D0A00D9CA69 /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t7E1152B6B2580D8CF2CAD150E04E60A8 /* HotKey.swift in Sources */,\n\t\tF1773AE9122717504710FDE32E039B2B /* HotKeysController.swift in Sources */,\n\t\tF7E7A799FBAE4D353AE3728E97367F61 /* Key.swift in Sources */,\n\t\tDA00E6F1BBD45869C0D4178FD7737F15 /* KeyCombo.swift in Sources */,\n\t\t6DD8B2226655E5DED755A1BDC37C2588 /* NSEventModifierFlags+HotKey.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\n6EA74799AC8908A90D1133CF4872622D /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t6F224F8B3EC4EF42D0BD03AC5A01CF9C /* Errors/Errors.swift in Sources */,\n\t\tB888FA01811554E0AF55D0A54886A893 /* Extensions/AEXML+XcodeFormat.swift in Sources */,\n\t\tF1A9E165928095B7FB7D9C8664C2B533 /* Extensions/Bool+Extras.swift in Sources */,\n\t\t1494290E678712CC86B906C2DB6FB93D /* Extensions/Dictionary+Enumerate.swift in Sources */,\n\t\tFAD7EFC6A9B1B2F1AA0A4A1548B922BB /* Extensions/Dictionary+Extras.swift in Sources */,\n\t\t67F5E702253087EF74E83502C0FB55E6 /* Extensions/KeyedDecodingContainer+Additions.swift in Sources */,\n\t\tAA8312CFC7EBB6F598BAF659D0B693EB /* Extensions/NSRecursiveLock+Sync.swift in Sources */,\n\t\tB59EF1525752B4039C257C311422F13C /* Extensions/OSLog+Extras.swift in Sources */,\n\t\tB13883DB62175193381A7119D4F9CD64 /* Extensions/Path+Extras.swift in Sources */,\n\t\t1E85BDB96874D3515EED27E275942738 /* Extensions/String+md5.swift in Sources */,\n\t\t1AFCBFBEF3EE85C4735EB8CD7919633F /* Extensions/String+Utils.swift in Sources */,\n\t\t742C6B1F749FF4B6CDFBB53EFA544C37 /* Objects/BuildPhase/BuildPhase.swift in Sources */,\n\t\t954EDC5169A2DAA27CD7EBCB0D9AE5D9 /* Objects/BuildPhase/PBXBuildFile.swift in Sources */,\n\t\t29D6CA4B5F8DEB04CADCCCDF08E5B9C2 /* Objects/BuildPhase/PBXBuildPhase.swift in Sources */,\n\t\tC973731BD5D1ADF0B68DC9A8B71371AA /* Objects/BuildPhase/PBXBuildRule.swift in Sources */,\n\t\tD620D9DF46FAD133FAD0654540D93506 /* Objects/BuildPhase/PBXCopyFilesBuildPhase.swift in Sources */,\n\t\t41CDD68A2C49542AC87B2D654662F8C2 /* Objects/BuildPhase/PBXFrameworksBuildPhase.swift in Sources */,\n\t\tCF94FDBF239BD77C694AFB7B9C375141 /* Objects/BuildPhase/PBXHeadersBuildPhase.swift in Sources */,\n\t\tA308AD5923DF4D916E0F13D2E6F95D39 /* Objects/BuildPhase/PBXResourcesBuildPhase.swift in Sources */,\n\t\tC5C90186A870052853053FE8BDE97F81 /* Objects/BuildPhase/PBXRezBuildPhase.swift in Sources */,\n\t\t4CFAE96FAE35BAFB253A76001331128D /* Objects/BuildPhase/PBXShellScriptBuildPhase.swift in Sources */,\n\t\t896F7E7C12011CA77277E7BACBB7F99C /* Objects/BuildPhase/PBXSourcesBuildPhase.swift in Sources */,\n\t\tB5709AC26DC8F5D630260A3F1DB425DC /* Objects/Configuration/BuildSettings.swift in Sources */,\n\t\tCA4D400E3DDC6CBC15A3D71ECB3CD4DA /* Objects/Configuration/XCBuildConfiguration.swift in Sources */,\n\t\t0FE036E5308002A02EE147D00659CB89 /* Objects/Configuration/XCConfigurationList.swift in Sources */,\n\t\t0F331239AFB8578C44E0FD3CC8A66D01 /* Objects/Files/PBXContainerItem.swift in Sources */,\n\t\t67A0030B6C4B30446D3B7DF510D2AC95 /* Objects/Files/PBXContainerItemProxy.swift in Sources */,\n\t\t264255B2DC375A38E16541D5A507613F /* Objects/Files/PBXFileElement.swift in Sources */,\n\t\t58998CE0A4E32171CF4950F2639F378A /* Objects/Files/PBXFileReference.swift in Sources */,\n\t\t23A997BC2064A2B26B67A7A75C7A6FD5 /* Objects/Files/PBXGroup.swift in Sources */,\n\t\t382812E7E9599D9487DB1B4EFF573337 /* Objects/Files/PBXSourceTree.swift in Sources */,\n\t\tD3395990728EE7111BEE0C57ED111C98 /* Objects/Files/PBXVariantGroup.swift in Sources */,\n\t\t898163FBB3101F0C1FAE974B73CB7271 /* Objects/Files/XCVersionGroup.swift in Sources */,\n\t\tF10ECD50FB9CDB0EF1F3ED6535B00F79 /* Objects/Project/PBXObject.swift in Sources */,\n\t\tA297A74AC30EA716F40100BBA29D7C00 /* Objects/Project/PBXObjectParser.swift in Sources */,\n\t\t947BC673F4E249FE2276A9A7C9354813 /* Objects/Project/PBXObjectReference.swift in Sources */,\n\t\t31E2AAD0BE0B7ADFD948BB0CFFC57C1B /* Objects/Project/PBXObjects.swift in Sources */,\n\t\t80978F6C6C23060316D787E18C24BFC9 /* Objects/Project/PBXOutputSettings.swift in Sources */,\n\t\t5DBB296966043F75007BBF4EB1C2DE76 /* Objects/Project/PBXProj.swift in Sources */,\n\t\t95B9262AE9089B839547533D20E7BFE7 /* Objects/Project/PBXProject.swift in Sources */,\n\t\t4719E9FAA93FD3E79F912CA463A0640A /* Objects/Project/PBXProjEncoder.swift in Sources */,\n\t\t98DBDE552368194486604B4E85BD8EDD /* Objects/Sourcery/Equality.generated.swift in Sources */,\n\t\tFD4509FBDBD52F99ED185069192B4611 /* Objects/Sourcery/Sourcery.swift in Sources */,\n\t\tED25BB88C9183FDB03E55618895F3A3E /* Objects/Targets/PBXAggregateTarget.swift in Sources */,\n\t\t9EDD872806677188A87EFED76893CFF5 /* Objects/Targets/PBXLegacyTarget.swift in Sources */,\n\t\t29AEB14B8E509CE62DD39ADF72760600 /* Objects/Targets/PBXNativeTarget.swift in Sources */,\n\t\tAC0DAA07C9191967E505AE9B19BC007B /* Objects/Targets/PBXProductType.swift in Sources */,\n\t\tF5CA27B2477A402F4A5820741101B61C /* Objects/Targets/PBXReferenceProxy.swift in Sources */,\n\t\t23DFC276FAE69CBFA8C76347EF724B84 /* Objects/Targets/PBXTarget.swift in Sources */,\n\t\tE39FA5C4830B1C6286C4B8B0A11A6279 /* Objects/Targets/PBXTargetDependency.swift in Sources */,\n\t\t5ED3ED0B77A5F3EF6B01955153AD6064 /* Project/WorkspaceSettings.swift in Sources */,\n\t\t1C2035785DAAE2D64C8ECA6619C181D7 /* Project/XCBreakpointList.swift in Sources */,\n\t\t0D24E42A01A5B57AE961FAF8C817687C /* Project/Xcode.swift in Sources */,\n\t\t653928F76893E06F6C79ECE7A573380B /* Project/XcodeProj.swift in Sources */,\n\t\t0EF5EC3E38F3F4D8F51F23394EDE32D5 /* Project/XCSharedData.swift in Sources */,\n\t\tF2EDD3CF836DCC600B513BFBB755CF5D /* Protocols/Writable.swift in Sources */,\n\t\tCB172787F2E9E15E6E4D0069701694ED /* Scheme/XCScheme.swift in Sources */,\n\t\t71612AAB6911E5BEC04F9B2258C187CA /* Scheme/XCScheme+AditionalOption.swift in Sources */,\n\t\t23B2B8C2D650E5A33B73053661E5F544 /* Scheme/XCScheme+AnalyzeAction.swift in Sources */,\n\t\t97C035E3EF4FD8C90AA7FF8D9057B91F /* Scheme/XCScheme+ArchiveAction.swift in Sources */,\n\t\t7EC2598830532F6C856E584A4E66B0CB /* Scheme/XCScheme+BuildableProductRunnable.swift in Sources */,\n\t\t096E09CF05DC89BF84A52E377522B07A /* Scheme/XCScheme+BuildableReference.swift in Sources */,\n\t\t0DED5DA8786393351690A30A1BCCA529 /* Scheme/XCScheme+BuildAction.swift in Sources */,\n\t\tDB218EF8F94D531927B2D342E41BA5E3 /* Scheme/XCScheme+CommandLineArguments.swift in Sources */,\n\t\t32BFB1DD9292D0F15B2D465C68898EBE /* Scheme/XCScheme+EnvironmentVariable.swift in Sources */,\n\t\t35D4B501F6E7D131FA2E4C2EA4C4FA98 /* Scheme/XCScheme+ExecutionAction.swift in Sources */,\n\t\t853B75D491EC42D972FC45BC6A062A2B /* Scheme/XCScheme+LaunchAction.swift in Sources */,\n\t\t37638F440D45770EB2821116E0E870D8 /* Scheme/XCScheme+LocationScenarioReference.swift in Sources */,\n\t\t93B314409224678C08B72E61C1056C2C /* Scheme/XCScheme+ProfileAction.swift in Sources */,\n\t\t953FA1F79CB127104231051399E7F96E /* Scheme/XCScheme+SerialAction.swift in Sources */,\n\t\tD8FF5F97208C6033DC9443168546626F /* Scheme/XCScheme+SkippedTests.swift in Sources */,\n\t\t00E35D78B4FC58C677091AACE488F66C /* Scheme/XCScheme+TestableReference.swift in Sources */,\n\t\tBB63582548DBD2F5B1E488AC04FFFDB4 /* Scheme/XCScheme+TestAction.swift in Sources */,\n\t\t9D4FA985555FAD0E3D818DD15FDEEE9A /* Utils/BuildSettingsProvider.swift in Sources */,\n\t\tB7FC5A115B5F3955E30EF15EC52D6EED /* Utils/CommentedString.swift in Sources */,\n\t\t421A097788CD15E31F890B1C9EC609DF /* Utils/Decoders.swift in Sources */,\n\t\t5613D97DEBC1E4931C7CA4E1F053D4B6 /* Utils/JSONDecoding.swift in Sources */,\n\t\tBBEF2E8BE5E69BA2026069C53E90CB13 /* Utils/OSLogger.swift in Sources */,\n\t\t22CB02677F3EC68D952CDC73F88B79B9 /* Utils/PlistValue.swift in Sources */,\n\t\t14E42FB6998F4B82759AA499D800F15C /* Utils/ReferenceGenerator.swift in Sources */,\n\t\t0009CA61F364BD503A015792C9A7D2DB /* Utils/XCConfig.swift in Sources */,\n\t\t629230A8B878757F42804737F332AF0D /* Workspace/XCWorkspace.swift in Sources */,\n\t\t55623940F01DAE4B639B481D91CF88E9 /* Workspace/XCWorkspaceData.swift in Sources */,\n\t\t2239144EE9AC530773FD403B4EF8BE35 /* Workspace/XCWorkspaceDataElement.swift in Sources */,\n\t\t9B85910EE0235B89957B660EF71DD726 /* Workspace/XCWorkspaceDataElementLocationType.swift in Sources */,\n\t\t478F14753835EFC15EE98084B682FD28 /* Workspace/XCWorkspaceDataFileRef.swift in Sources */,\n\t\t9149D0D156D1A47AD9708C11EDBFC16E /* Workspace/XCWorkspaceDataGroup.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\n86204B913285479790C8B40218A6D01E /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t6A041CF38BC28A5262F4A2C130435DA8 /* Batter.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\n89F171C5C55F88CECBB4D9F919595B44 /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t471B2B419524B9D1842BC520539060D6 /* Path+inreplace().swift in Sources */,\n\t\t5F9F2D38AABF99927BA45359420DD85D /* Process+facade.swift in Sources */,\n\t\t66B12F7477B5AC215FDB2A2EBE445EFD /* Sequence+KeyPath.swift in Sources */,\n\t\t20C156247AA940F1663C87213EB9C7AD /* StreamReader.swift in Sources */,\n\t\tADC757B7E9013417B979D184C8EA439D /* SwiftVersion.swift in Sources */,\n\t\t73F5DBA5C3DF8C27AD93C9DF7F8B616D /* topologicalSort().swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\n9D57241684611D5226E52EBD3A97727C /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t02A46975791D4B6AF393E02BFC7B4FA7 /* Cake.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\n9E7097A7C3D241A0B2CCA4D3B78A8A83 /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t3E3B8B3CAC69F14B8ACADC5E7FC66059 /* Extensions.swift in Sources */,\n\t\t748E5C904992666724C802B55121D231 /* Path->Bool.swift in Sources */,\n\t\t109244311B8CF9298C2586C085606327 /* Path.swift in Sources */,\n\t\tF967CC7B7762819FA7DC1F4ACA76DA87 /* Path+Attributes.swift in Sources */,\n\t\t35CBA8E95F73F7C579D312B15F0D498F /* Path+Codable.swift in Sources */,\n\t\tE2FAA3397719FA0DC93535F286C47BDC /* Path+CommonDirectories.swift in Sources */,\n\t\t0D607F811A55D6665B3CD26DA7EEF595 /* Path+FileManager.swift in Sources */,\n\t\tD51C1066BCE4EB4087BAF0686C5AA8B4 /* Path+ls.swift in Sources */,\n\t\t9EC43026A52EADC5AE278DAC71294A6F /* Path+StringConvertibles.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\nA51B210879B02EBF2327F37032BF81B3 /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t6C310B5FEEC48AFC22A70CEFB2CBC38A /* Weebly∕OrderedSet-3.1.0.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\nA55DDFC1E192780D65C32457CB5F07F8 /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t56DFD2E22C495FA82E39886F365DC33A /* Cakefile.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\nA9A4A9984792079405DBB34A1D20B75B /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\tE1BA243CAB80D7B010397756DE150F4E /* CakeProject.swift in Sources */,\n\t\t962D45FFD864AA7F6C523E102A1046E0 /* FSWatcher.swift in Sources */,\n\t\t8C9643A4FA9E488BCB63EBDA4286C997 /* Kitchen.swift in Sources */,\n\t\tE08267E7A19CE4F86CF11AE46F1F9CFE /* KitchenDelegate.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\nB32939C0E66AF37C44610611EECFDF0E /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\tD93F5CCFC45D073036572B8910C27C33 /* _PathDisambiguation.swift in Sources */,\n\t\t14E416B908FBFCEBBF146F35813A1A4B /* *Target.swift in Sources */,\n\t\t8EF6B805944AE9C3AEB822AFCA5B852B /* +functions.swift in Sources */,\n\t\t8A8B0E9BDA830045CCAF38F0E83A5761 /* +platforms.swift in Sources */,\n\t\t79C7F45017C7722A800FFE0401AD9277 /* Group.swift in Sources */,\n\t\t8132BA30BD6E920DDBD31451E9400E45 /* XcodeProject.swift in Sources */,\n\t\tCEBEADC323399BF84D2A2A41841A8DBC /* z.etc.swift in Sources */,\n\t\t3823977F02656605E34F410252572C97 /* z+buildSettings.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\nB72D8CDE7B96F674B97F50DBA7722D81 /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t0144937EEB86C307B33A65EB2B058FFC /* Dependencies.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\nDCA5BDE643D482824931150E443818EA /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t8EB5125F4FEFF56B991C39CB731DE87E /* kylef∕PathKit-0.9.2.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\nDD25F76D9BF91196996408AAA2D08CA6 /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\tF8373135B8E73DC04E741253EF8538AF /* afterlife.swift in Sources */,\n\t\t0126D7996A8929E3D9BA9BC71806216C /* NSNotificationCenter+Promise.swift in Sources */,\n\t\t194436C50CBF102CE54CD461191FCD0D /* NSObject+Promise.swift in Sources */,\n\t\tB56602EC4F80DEC5337994B59B3FE640 /* NSURLSession+Promise.swift in Sources */,\n\t\t8086409EA5DD7B797084592C543D5EB3 /* Process+Promise.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\nDEEC3979981A3F4CE78FAB1F8FE83F39 /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\tFDC90EB1D93E3B5852C55A9F0C16EB8C /* Document.swift in Sources */,\n\t\t9C7533C705D0687317351F2003399A02 /* Element.swift in Sources */,\n\t\tB932800411795A587A5D035B3F67E937 /* Error.swift in Sources */,\n\t\t4BA6617EF1A234421360DA3D234D522E /* Options.swift in Sources */,\n\t\tCFBB1B1AD3BABF755259E1B5ABF0B453 /* Parser.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\nE2BAB0B95B059BB004904ECA59F68448 /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t238D7E0FA67C18E872F921129F546762 /* Version.swift in Sources */,\n\t\t8D090FE4A3B4FAED3A0490D986C15C85 /* Version+Codable.swift in Sources */,\n\t\t3514CFE553B87C0B30A58801F8271A27 /* Version+Comparable.swift in Sources */,\n\t\t93ABEAC4A39B97F1DAD8B82CF4A66A3D /* Version+Foundation.swift in Sources */,\n\t\t4AEC1425A72131B2D9A01091B98794E0 /* Version+Range.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\nE5782A25D53239D7365C8040FEACD39D /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\tD884582231287F0F5274AA2BA4A0BC2C /* Dependencies.json.swift in Sources */,\n\t\t6ABA75F07503C93AB3B3C7F0B38CCCB3 /* modelize().swift in Sources */,\n\t\t09418BE9EF8A8148100DCB62874E428F /* Module.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\nE73EE8C4A3772E20E3C2F0C8C36A37E8 /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t31BB6F1989688A30CC2AA71C1067102B /* Diff.swift in Sources */,\n\t\t3F5CEF2D4DDC859B3FC26CDBEFEC015A /* XcodeObserver.swift in Sources */,\n\t\tFB72D613AD5B0AAF539728B89A41FB8E /* XcodeScriptingBridge.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\nE8E64701521367922653F85FE4202F81 /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t03B4231C554E2D2E022A5351927EA1E5 /* CakefileDescription.swift in Sources */,\n\t\tD079F107A87BDA6D93E3B909821C6AA2 /* Version+.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\nEE6483AD0BF951DAC3964ABABF818D90 /* Sources */ = {\n\tisa = PBXSourcesBuildPhase;\n\tbuildActionMask = 2147483647;\n\tfiles = (\n\t\t4296C1974AB9D91026CA47FD9BBA5C52 /* +functions.swift in Sources */,\n\t\t6B38FB50EC08F4DF74CF1EC447A2D496 /* deintegrate().swift in Sources */,\n\t\t619608298AB26ADA9558192FF85A703F /* etc.swift in Sources */,\n\t\tDF2738497A69CFC60A7BFF7546A79383 /* scaffold().swift in Sources */,\n\t\tE641E4491384EBC7ED294BF3AFBFA63B /* XcakeProject.swift in Sources */,\n\t);\n\trunOnlyForDeploymentPostprocessing = 0;\n};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n01A54B9D047FC8AE6C2A5B51C43EA12F /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Batter·Modelizer\";\n\ttarget = C8AC307C08B1141701DFEAAD12667716 /* Batter·Modelizer */;\n\ttargetProxy = 8CF6B72EF378FFC5EDCD3344A04E6912 /* PBXContainerItemProxy */;\n};\n0565BAB4E438C2EA664F8C83EB0CE946 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = Cakefile;\n\ttarget = 818A4854C95B333066E8C4A9D0FE3104 /* Cakefile */;\n\ttargetProxy = B06116E54C8217994FD5F06F7E592CF2 /* PBXContainerItemProxy */;\n};\n13C0C02DD80211AD05DB9A4AB0A60C5D /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Batter·XcodeProject\";\n\ttarget = DF69393E8DED4E7C87625E2008C40E41 /* Batter·XcodeProject */;\n\ttargetProxy = 17D5F07BC8B5B3BC93A4EE4B2B28AD4A /* PBXContainerItemProxy */;\n};\n168122E044F80C89406C3809470BA6C7 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·xcodeproj\";\n\ttarget = B4EB89E549B6ADCED02958295D4FAD21 /* Deps·xcodeproj */;\n\ttargetProxy = EB36CF19BE9565CD2F536DD00DB99F43 /* PBXContainerItemProxy */;\n};\n1D8AB91B1934ECA2B505C6183A5FC38B /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·PromiseKit\";\n\ttarget = BD398413C05B07BBE2B6E2D14C9EE8D9 /* Deps·PromiseKit */;\n\ttargetProxy = 5EDA6990A1DDBE6E9B607D100EF8A5DA /* PBXContainerItemProxy */;\n};\n315AE0B2F6C88E934BB5814FD47A2FB0 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Batter·CakefileDescription\";\n\ttarget = D4D58EF887FC75ADD1D795BF5B47A879 /* Batter·CakefileDescription */;\n\ttargetProxy = 466D0E195DB547397C597EF346516148 /* PBXContainerItemProxy */;\n};\n3184BA9F3D3D5E046B7C5470349375F9 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Batter·XcodeObserver\";\n\ttarget = C1038750BB9B8EA5926C885645506714 /* Batter·XcodeObserver */;\n\ttargetProxy = A0AD5420B6DC1AB939BC61EDDB8218B7 /* PBXContainerItemProxy */;\n};\n327C41C1F24B05BA591F163701AC5FFD /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = Cakefile;\n\ttarget = 818A4854C95B333066E8C4A9D0FE3104 /* Cakefile */;\n\ttargetProxy = A6534538102624A3BAD54587BBECFEF5 /* PBXContainerItemProxy */;\n};\n3366830391752771A1D8AFE2C77B8DC4 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = Versionator;\n\ttarget = 27CCC44DFA86333E66FEE34EA8063784 /* Versionator */;\n\ttargetProxy = F312C1044F70834D556FB7F4802D1893 /* PBXContainerItemProxy */;\n};\n3A19463D99686825EC39E9ED03F9589E /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·PMKFoundation\";\n\ttarget = B4280F358AD4C3799414724EE00E6812 /* Deps·PMKFoundation */;\n\ttargetProxy = 1EE1EF930A5BF3D0012B58E4A1D22BB8 /* PBXContainerItemProxy */;\n};\n478D6FA01AC7470AE22A47A14BB76D0E /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = Cakefile;\n\ttarget = 818A4854C95B333066E8C4A9D0FE3104 /* Cakefile */;\n\ttargetProxy = 3609D632CDBAAFD820788391BA3977DC /* PBXContainerItemProxy */;\n};\n47F528038C3330D21B21869C0B0FB0A9 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·Version\";\n\ttarget = 9CF1FA8024CC8159DE776A7595DC3523 /* Deps·Version */;\n\ttargetProxy = CDAE6F16BFD0F82E6454C65CB8F164D2 /* PBXContainerItemProxy */;\n};\n47FC00F222C163921E063D31FC5EBDFA /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·HotKey\";\n\ttarget = 8FEBB13B61D6321603EC90A5606F8C4F /* Deps·HotKey */;\n\ttargetProxy = 2AB7C8C5BF907C9BECA079EDED1FFC18 /* PBXContainerItemProxy */;\n};\n52375388D4F28520E6EDF71CF9157BD9 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·AEXML\";\n\ttarget = D1CE66C2AF312DCD9A12B6444FB0D2EA /* Deps·AEXML */;\n\ttargetProxy = D98236A2D881CAC7928673239C8BFD51 /* PBXContainerItemProxy */;\n};\n53F2F8E019D9AF0707A740E3371C45D4 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Batter·CakefileDescription\";\n\ttarget = D4D58EF887FC75ADD1D795BF5B47A879 /* Batter·CakefileDescription */;\n\ttargetProxy = 71C00BC3AFA055F16733B467637C32E6 /* PBXContainerItemProxy */;\n};\n5F6E912FB8A1E2C86A4158675E8BB16A /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·PathKit\";\n\ttarget = B49CC989FC5BE99773DFD32B46D8E82C /* Deps·PathKit */;\n\ttargetProxy = ED11063682340B41D483263E6FE5EED7 /* PBXContainerItemProxy */;\n};\n6F2865C025F7F740FF65DBD4991157C8 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = Dependencies;\n\ttarget = DCF843C187E023E2097ACF9EABA93DD6 /* Dependencies */;\n\ttargetProxy = 2D6EDF33EC661363ED1E5889EA9EF52F /* PBXContainerItemProxy */;\n};\n74ABE28A43D4DE4FF4BC639358381F75 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·OrderedSet\";\n\ttarget = AC6B4791DEE2977626A076B8F9A7666F /* Deps·OrderedSet */;\n\ttargetProxy = 0116FC39B24582BEE9036286F9430EA1 /* PBXContainerItemProxy */;\n};\n7B00EE4575A017E6BDDA5BFB0B5D5383 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Batter·Base\";\n\ttarget = A49235A78CF83BF260878E68B866C986 /* Batter·Base */;\n\ttargetProxy = 0EFDF076DBC213F64A00B6683D0E6B67 /* PBXContainerItemProxy */;\n};\n86F70278902535F201592D638128287A /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Batter·Processor\";\n\ttarget = 50A4D32099C32D3207892A9614D37B66 /* Batter·Processor */;\n\ttargetProxy = 80644EB6FD3773EE45376C2EC9869F30 /* PBXContainerItemProxy */;\n};\n8C19EF95D17BAD3069694292CEA096BB /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Batter·Modelizer\";\n\ttarget = C8AC307C08B1141701DFEAAD12667716 /* Batter·Modelizer */;\n\ttargetProxy = 18BB34364DC319E58561C144CFB5F85E /* PBXContainerItemProxy */;\n};\n8FE2AD32E33987A961C4396477BA6D4D /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = Cakefile;\n\ttarget = 818A4854C95B333066E8C4A9D0FE3104 /* Cakefile */;\n\ttargetProxy = 67AEDC266F822DBF18B34C4E257EE1E9 /* PBXContainerItemProxy */;\n};\n9872C58C32FAF03ACEC329FFD2C13162 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Batter·Base\";\n\ttarget = A49235A78CF83BF260878E68B866C986 /* Batter·Base */;\n\ttargetProxy = B01E0633294DEAFA1B9F52960E14C230 /* PBXContainerItemProxy */;\n};\nA4389FBC591F83984259446503E7520E /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Batter·Base\";\n\ttarget = A49235A78CF83BF260878E68B866C986 /* Batter·Base */;\n\ttargetProxy = 924C0BA9D531ACB667362E847E2C2ED1 /* PBXContainerItemProxy */;\n};\nA6D31631D95C3A51C9FAABBAA253F1D7 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = Cakefile;\n\ttarget = 818A4854C95B333066E8C4A9D0FE3104 /* Cakefile */;\n\ttargetProxy = 1AD18862BE00E9D273C5119993BF1EF7 /* PBXContainerItemProxy */;\n};\nACABA24C3D2AB0E217E730CCFD32A5C1 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Batter·CakefileDescription\";\n\ttarget = D4D58EF887FC75ADD1D795BF5B47A879 /* Batter·CakefileDescription */;\n\ttargetProxy = 3CA790475701796546AEC8C8F9BEC467 /* PBXContainerItemProxy */;\n};\nB05A9D037029AAFBD5DCAD6ECBF89F09 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = Cakefile;\n\ttarget = 818A4854C95B333066E8C4A9D0FE3104 /* Cakefile */;\n\ttargetProxy = FC06ED7DAB16B02502FC9309C805AAA3 /* PBXContainerItemProxy */;\n};\nB9568118D2B144E528AFACC9A3063C8F /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Batter·CakefileDescription\";\n\ttarget = D4D58EF887FC75ADD1D795BF5B47A879 /* Batter·CakefileDescription */;\n\ttargetProxy = D46696C0AE71459DAAF917F866D13018 /* PBXContainerItemProxy */;\n};\nBD6D1B5E2089F89F86DB1C2CF90CB984 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·Path\";\n\ttarget = 76CCBFA038A347F71E7B5BFB1521AC8A /* Deps·Path */;\n\ttargetProxy = 96CF6D0F301321DD90DAAA34150AF9C8 /* PBXContainerItemProxy */;\n};\nC2464976BABCABAA3A72863AE3E78F30 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·Path\";\n\ttarget = 76CCBFA038A347F71E7B5BFB1521AC8A /* Deps·Path */;\n\ttargetProxy = 25BC92DB11B4440F7308DC364B2A9CC8 /* PBXContainerItemProxy */;\n};\nC705D93D65D5402E574821CB2982B55B /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·PathKit\";\n\ttarget = B49CC989FC5BE99773DFD32B46D8E82C /* Deps·PathKit */;\n\ttargetProxy = 144BDEC13717CB09678A9A83D9431ADF /* PBXContainerItemProxy */;\n};\nC92758E700B37ED68776342F73765D28 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·PromiseKit\";\n\ttarget = BD398413C05B07BBE2B6E2D14C9EE8D9 /* Deps·PromiseKit */;\n\ttargetProxy = 3D570B61F4B7B186FBD4FB45CAB2344D /* PBXContainerItemProxy */;\n};\nC94339126C714AD460BE58DB6BE8A056 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = Dependencies;\n\ttarget = DCF843C187E023E2097ACF9EABA93DD6 /* Dependencies */;\n\ttargetProxy = 3A6C290700F171F09F36630EAE33952A /* PBXContainerItemProxy */;\n};\nCB56305824BFCA6B67740F6043A4B9E2 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = Batter;\n\ttarget = F5D94DE7A2DF28D8FD6E0C310044455E /* Batter */;\n\ttargetProxy = 756891CE29B59469D117CB86600830B4 /* PBXContainerItemProxy */;\n};\nCCD24D36751009E477715FE65934C8C9 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·AEXML\";\n\ttarget = D1CE66C2AF312DCD9A12B6444FB0D2EA /* Deps·AEXML */;\n\ttargetProxy = 26A6089A74D49C04CCF423ED317665CF /* PBXContainerItemProxy */;\n};\nCE7201A86F96504B6EA253FE9AD95394 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Batter·XcodeObserver\";\n\ttarget = C1038750BB9B8EA5926C885645506714 /* Batter·XcodeObserver */;\n\ttargetProxy = A451E2841D294632F1518CB0121B3EE9 /* PBXContainerItemProxy */;\n};\nCFF9303A30E7F181CB5ED4393B13666C /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·AppUpdater\";\n\ttarget = 5D1C4ECF6D5347A44CB1E59E5BB558E0 /* Deps·AppUpdater */;\n\ttargetProxy = E19C66FA1ADEB89F9061C2604746306D /* PBXContainerItemProxy */;\n};\nDE622C7A094011A28248907BDAFD9AD7 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·PMKFoundation\";\n\ttarget = B4280F358AD4C3799414724EE00E6812 /* Deps·PMKFoundation */;\n\ttargetProxy = 1C49E795CA5C037A31C025E2A56C01F7 /* PBXContainerItemProxy */;\n};\nE19D06FB14E30A3A83D27D6B41D47C4C /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Batter·Kitchen\";\n\ttarget = 0F64CBB97351A503B1F408F40AB7E996 /* Batter·Kitchen */;\n\ttargetProxy = 9552D2A44C21251174A336F563E786A6 /* PBXContainerItemProxy */;\n};\nF47DA310FEED1D577995EC51108D5E92 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = Cakefile;\n\ttarget = 818A4854C95B333066E8C4A9D0FE3104 /* Cakefile */;\n\ttargetProxy = 3B18052B44E98025F6CED9B8801DAF2A /* PBXContainerItemProxy */;\n};\nF79E560CAF7B3FC1F3068CFE9B10BDE1 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = Dependencies;\n\ttarget = DCF843C187E023E2097ACF9EABA93DD6 /* Dependencies */;\n\ttargetProxy = 7E33F2A58E0B9F911C5089934C28196D /* PBXContainerItemProxy */;\n};\nFC5D401D66B2304DBCA5DBFCFE9A79CA /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·Version\";\n\ttarget = 9CF1FA8024CC8159DE776A7595DC3523 /* Deps·Version */;\n\ttargetProxy = EFB035A45795006B3E0D3D4C5A2F75D9 /* PBXContainerItemProxy */;\n};\nFCE6F711BDA27F1587A676EA4E1A223E /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Batter·XcakeProject\";\n\ttarget = ED829D4B109C4E4B415B8F01358C62F3 /* Batter·XcakeProject */;\n\ttargetProxy = A374EA6D4F5157415110C114CB7D2C2C /* PBXContainerItemProxy */;\n};\nFDB6A7614F45C42C95995739384B5927 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = \"Deps·LegibleError\";\n\ttarget = 8B4D032D3EA2708E1BF1B498E5AAC085 /* Deps·LegibleError */;\n\ttargetProxy = 2271E804C9C352B20C61ABBC68327426 /* PBXContainerItemProxy */;\n};\nFDED9CB4A42F8E451B9CD92A9214BED0 /* PBXTargetDependency */ = {\n\tisa = PBXTargetDependency;\n\tname = Cakefile;\n\ttarget = 818A4854C95B333066E8C4A9D0FE3104 /* Cakefile */;\n\ttargetProxy = C9302B77BC2BA2C40C288B30160EB8D2 /* PBXContainerItemProxy */;\n};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n01749ADF071445F3D44FE9321492F1DF /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = PromiseKit;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 5.0;\n\t};\n\tname = Release;\n};\n0CAA1B24A1677E42C56C03ED4DA25A52 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = LegibleError;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 5.0;\n\t};\n\tname = Release;\n};\n0F006438EBC883D6DAF7464CC0DDABF6 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = XcodeProject;\n\t};\n\tname = Debug;\n};\n14B4BDC3A8A21514BA38D5A922B852AF /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = XcakeProject;\n\t};\n\tname = Release;\n};\n1542C6C2D7059A7EEC04A25093C8FB37 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = Version;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 5.0;\n\t};\n\tname = Release;\n};\n1FDF228DCFCECD2E29608D6651871DC8 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = XcodeProject;\n\t};\n\tname = Release;\n};\n2844F622FC5B65DAF12AC70D4AFF5996 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tSDKROOT = macosx;\n\t\tSUPPORTED_PLATFORMS = (\n\t\t\tmacosx,\n\t\t);\n\t};\n\tname = Debug;\n};\n29E540EA274DAA3506C22D6A88BE09A8 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = Kitchen;\n\t};\n\tname = Release;\n};\n32D6FC9C351006942233B9CFE73E4993 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = HotKey;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 4.2;\n\t};\n\tname = Debug;\n};\n36FDC3D030F4546E2131F29F814A5F55 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = AEXML;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 4.2;\n\t};\n\tname = Release;\n};\n3C084769932C95D3A2801BCDC01C9B14 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = Version;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 5.0;\n\t};\n\tname = Debug;\n};\n3E37F9EC3C830D4424F936E9DF318A0D /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = PathKit;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 4.2;\n\t};\n\tname = Release;\n};\n3EC07005C8E3F33BC0190690803F509E /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = Base;\n\t};\n\tname = Release;\n};\n410BFEF56CC5175724CEE7B0902B8F89 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = AppUpdater;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 5.0;\n\t};\n\tname = Release;\n};\n41146688A2C9C1ADC6CE5ECF08220617 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = XcodeObserver;\n\t};\n\tname = Release;\n};\n4F22B98D5732335D56A43BBA2E277916 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = OrderedSet;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 4.2;\n\t};\n\tname = Release;\n};\n53A5ED01504F5692461D83AC41FED6AF /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = Modelizer;\n\t};\n\tname = Debug;\n};\n5414DEBB5462ADF390A78B4FB3176ACA /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = xcodeproj;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 4.2;\n\t};\n\tname = Release;\n};\n54504CD556F9BCA94769A4E0404EC81A /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = Kitchen;\n\t};\n\tname = Debug;\n};\n5B0253CF35CA61DC4C802193B10AE866 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tLD = /usr/bin/true;\n\t\tOTHER_SWIFT_FLAGS = (\n\t\t\t\"-I\",\n\t\t\t\"$(HOME)/Library/Developer/Cake/DerivedData/$(XCODE_PRODUCT_BUILD_VERSION)/lib\",\n\t\t\t\"-L\",\n\t\t\t\"$(HOME)/Library/Developer/Cake/DerivedData/$(XCODE_PRODUCT_BUILD_VERSION)/lib\",\n\t\t);\n\t\tPRODUCT_MODULE_NAME = Script;\n\t\tPRODUCT_NAME = CakefileScript;\n\t\tSDKROOT = macosx;\n\t\tSUPPORTED_PLATFORMS = (\n\t\t\tmacosx,\n\t\t);\n\t};\n\tname = Debug;\n};\n5C8E84147B6537BD038619517173D299 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = HotKey;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 4.2;\n\t};\n\tname = Release;\n};\n5D6B9672AD5355F3F9519229CDA07709 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = XcakeProject;\n\t};\n\tname = Debug;\n};\n5FB2846AECAA7414D01A3C49C15041BB /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = PathKit;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 4.2;\n\t};\n\tname = Debug;\n};\n6DC3C515934279B0C9ADFDB208AD4DDC /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = Modelizer;\n\t};\n\tname = Release;\n};\n787C252C3F61DAE6E109B354CEC2AAF2 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = CakefileDescription;\n\t};\n\tname = Release;\n};\n81D3D4DB9973AC28F206BDCD037C6B74 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = PMKFoundation;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 5.0;\n\t};\n\tname = Debug;\n};\n84967217740F703D00B507627CF65AD9 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = xcodeproj;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 4.2;\n\t};\n\tname = Debug;\n};\n97A193D0B309D29E270701A52EF85AB1 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = PMKFoundation;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 5.0;\n\t};\n\tname = Release;\n};\nAAA43370FFAEBDAB6ADCE93C1A2E0385 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = CakefileDescription;\n\t};\n\tname = Debug;\n};\nBF01A86C4D19E080F58AF28A3610DF80 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tLD = /usr/bin/true;\n\t\tOTHER_SWIFT_FLAGS = (\n\t\t\t\"-I\",\n\t\t\t\"$(HOME)/Library/Developer/Cake/DerivedData/$(XCODE_PRODUCT_BUILD_VERSION)/lib\",\n\t\t\t\"-L\",\n\t\t\t\"$(HOME)/Library/Developer/Cake/DerivedData/$(XCODE_PRODUCT_BUILD_VERSION)/lib\",\n\t\t);\n\t\tPRODUCT_MODULE_NAME = Script;\n\t\tPRODUCT_NAME = CakefileScript;\n\t\tSDKROOT = macosx;\n\t\tSUPPORTED_PLATFORMS = (\n\t\t\tmacosx,\n\t\t);\n\t};\n\tname = Release;\n};\nC01BD67412F7D01E7E37440909A3CB04 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\tCLANG_WARN_COMMA = YES;\n\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\tCOPY_PHASE_STRIP = YES;\n\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\tGCC_OPTIMIZATION_LEVEL = s;\n\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\tMACOSX_DEPLOYMENT_TARGET = 10.14.0;\n\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\tSDKROOT = macosx;\n\t\tSKIP_INSTALL = YES;\n\t\tSUPPORTED_PLATFORMS = (\n\t\t\tmacosx,\n\t\t);\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\tCake,\n\t\t);\n\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\tSWIFT_VERSION = 5.0;\n\t\tUSE_HEADERMAP = NO;\n\t};\n\tname = Release;\n};\nC410D3BA7B21321C1380A8F61AF726E5 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = XcodeObserver;\n\t};\n\tname = Debug;\n};\nCC732CD549C750F7CD04EDBC7ADB55A0 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = Processor;\n\t};\n\tname = Release;\n};\nD49614ABEFCDEB137B8860ACDE9FA8A5 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = LegibleError;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 5.0;\n\t};\n\tname = Debug;\n};\nD4A347FDE8735E33183BC68A9E6DB430 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = Path;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 5.0;\n\t};\n\tname = Release;\n};\nD62CF9D1772A1414748B609CFFEA1559 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = Path;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 5.0;\n\t};\n\tname = Debug;\n};\nD85DB4BAEAF6C73A25136BE3DF43F204 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = AppUpdater;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 5.0;\n\t};\n\tname = Debug;\n};\nDA49F997348D1FD710E75C7ABD77D37B /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = Processor;\n\t};\n\tname = Debug;\n};\nE05BAB2BDFF639B0BF23680409C4D9A0 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = PromiseKit;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 5.0;\n\t};\n\tname = Debug;\n};\nF217A8AA6DBABB214741C52ABC90012B /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = AEXML;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 4.2;\n\t};\n\tname = Debug;\n};\nF5934BDF56DD92BB93D0C5E53B4140B9 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = OrderedSet;\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\t\"$(inherited)\",\n\t\t\tSWIFT_PACKAGE,\n\t\t);\n\t\tSWIFT_SUPPRESS_WARNINGS = YES;\n\t\tSWIFT_VERSION = 4.2;\n\t};\n\tname = Debug;\n};\nF6BCBDB02D5733D803C90FCC60A48E00 /* Release */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tSDKROOT = macosx;\n\t\tSUPPORTED_PLATFORMS = (\n\t\t\tmacosx,\n\t\t);\n\t};\n\tname = Release;\n};\nF7770844F3B732A8F6817F4CB5DE795E /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\tCLANG_WARN_COMMA = YES;\n\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\tCOPY_PHASE_STRIP = NO;\n\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\tENABLE_NS_ASSERTIONS = YES;\n\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\tENABLE_TESTABILITY = YES;\n\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\tMACOSX_DEPLOYMENT_TARGET = 10.14.0;\n\t\tONLY_ACTIVE_ARCH = YES;\n\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\tSDKROOT = macosx;\n\t\tSKIP_INSTALL = YES;\n\t\tSUPPORTED_PLATFORMS = (\n\t\t\tmacosx,\n\t\t);\n\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = (\n\t\t\tCake,\n\t\t\tDEBUG,\n\t\t);\n\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\tSWIFT_VERSION = 5.0;\n\t\tUSE_HEADERMAP = NO;\n\t};\n\tname = Debug;\n};\nFD451F7448C7B2F7682282B733D7ADD1 /* Debug */ = {\n\tisa = XCBuildConfiguration;\n\tbuildSettings = {\n\t\tPRODUCT_NAME = Base;\n\t};\n\tname = Debug;\n};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n06F4E05BD565282710B442AE5EA794B4 /* Build configuration list for PBXNativeTarget \"Deps·xcodeproj\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\t84967217740F703D00B507627CF65AD9 /* Debug */,\n\t\t5414DEBB5462ADF390A78B4FB3176ACA /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\n12501F7CC58BB1124BB427E6ACE8AAFD /* Build configuration list for PBXNativeTarget \"Deps·OrderedSet\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\tF5934BDF56DD92BB93D0C5E53B4140B9 /* Debug */,\n\t\t4F22B98D5732335D56A43BBA2E277916 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\n1CB785113119F8BC5FF59CA4741AA37B /* Build configuration list for PBXNativeTarget \"Deps·AppUpdater\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\tD85DB4BAEAF6C73A25136BE3DF43F204 /* Debug */,\n\t\t410BFEF56CC5175724CEE7B0902B8F89 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\n3A3934967D7790F017425C98A64CD375 /* Build configuration list for PBXNativeTarget \"Cakefile·Completion\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\t5B0253CF35CA61DC4C802193B10AE866 /* Debug */,\n\t\tBF01A86C4D19E080F58AF28A3610DF80 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\n525C58D15460DD55EAC5A3285814107D /* Build configuration list for PBXNativeTarget \"Deps·HotKey\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\t32D6FC9C351006942233B9CFE73E4993 /* Debug */,\n\t\t5C8E84147B6537BD038619517173D299 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\n5375538FF4A3E415410EE0F07030C0A4 /* Build configuration list for PBXNativeTarget \"Deps·LegibleError\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\tD49614ABEFCDEB137B8860ACDE9FA8A5 /* Debug */,\n\t\t0CAA1B24A1677E42C56C03ED4DA25A52 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\n54C3D682088F52A98460F95C69B3AB03 /* Build configuration list for PBXNativeTarget \"Batter·Base\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\tFD451F7448C7B2F7682282B733D7ADD1 /* Debug */,\n\t\t3EC07005C8E3F33BC0190690803F509E /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\n7081C02CA5D1323B9B25721C60922C92 /* Build configuration list for PBXNativeTarget \"Batter·Processor\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\tDA49F997348D1FD710E75C7ABD77D37B /* Debug */,\n\t\tCC732CD549C750F7CD04EDBC7ADB55A0 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\n75705B7E4DE90E787B5587BB39A9C36B /* Build configuration list for PBXNativeTarget \"Batter·Kitchen\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\t54504CD556F9BCA94769A4E0404EC81A /* Debug */,\n\t\t29E540EA274DAA3506C22D6A88BE09A8 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\n9CF1F52C15FBC9D5635FDB05C6CF216F /* Build configuration list for PBXNativeTarget \"Batter·XcakeProject\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\t5D6B9672AD5355F3F9519229CDA07709 /* Debug */,\n\t\t14B4BDC3A8A21514BA38D5A922B852AF /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\nAA3351F9CE1B4053E2CE65B0FC1809D9 /* Build configuration list for PBXNativeTarget \"Batter·XcodeProject\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\t0F006438EBC883D6DAF7464CC0DDABF6 /* Debug */,\n\t\t1FDF228DCFCECD2E29608D6651871DC8 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\nAE6ECBCB9E2BBD1C00E2B864AB33FCFE /* Build configuration list for PBXNativeTarget \"Batter·Modelizer\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\t53A5ED01504F5692461D83AC41FED6AF /* Debug */,\n\t\t6DC3C515934279B0C9ADFDB208AD4DDC /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\nB12860ED6D40D093F21670917F129409 /* Build configuration list for PBXNativeTarget \"Batter·XcodeObserver\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\tC410D3BA7B21321C1380A8F61AF726E5 /* Debug */,\n\t\t41146688A2C9C1ADC6CE5ECF08220617 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\nB372C3FDAB1008B4B28D830E0B8DF1A9 /* Build configuration list for PBXNativeTarget \"Deps·Version\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\t3C084769932C95D3A2801BCDC01C9B14 /* Debug */,\n\t\t1542C6C2D7059A7EEC04A25093C8FB37 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\nB961BFD93B1016266AB52B4C43632B1C /* Build configuration list for PBXNativeTarget \"Deps·PromiseKit\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\tE05BAB2BDFF639B0BF23680409C4D9A0 /* Debug */,\n\t\t01749ADF071445F3D44FE9321492F1DF /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\nD6F76942AA26F8FE33C0B9E559F048A3 /* Build configuration list for PBXNativeTarget \"Deps·PMKFoundation\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\t81D3D4DB9973AC28F206BDCD037C6B74 /* Debug */,\n\t\t97A193D0B309D29E270701A52EF85AB1 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\nDC551BFA9E078B27003D39F40946DE59 /* Build configuration list for PBXNativeTarget \"Deps·PathKit\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\t5FB2846AECAA7414D01A3C49C15041BB /* Debug */,\n\t\t3E37F9EC3C830D4424F936E9DF318A0D /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\nE7FAEEC4302D535402308E4CA6048DBC /* Build configuration list for PBXProject \"Cake\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\tF7770844F3B732A8F6817F4CB5DE795E /* Debug */,\n\t\tC01BD67412F7D01E7E37440909A3CB04 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n\tdefaultConfigurationName = Release;\n};\nF77D98629B64E24B6FFAE21718CA106B /* Build configuration list for PBXNativeTarget \"Deps·AEXML\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\tF217A8AA6DBABB214741C52ABC90012B /* Debug */,\n\t\t36FDC3D030F4546E2131F29F814A5F55 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\nF96FF9FDA0DC746E15BB01A0E5531883 /* Build configuration list for PBXNativeTarget \"Deps·Path\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\tD62CF9D1772A1414748B609CFFEA1559 /* Debug */,\n\t\tD4A347FDE8735E33183BC68A9E6DB430 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\nFB1419C517BF03EBE4B57BA190D11DA2 /* Build configuration list for PBXAggregateTarget \"Cakefile\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\t2844F622FC5B65DAF12AC70D4AFF5996 /* Debug */,\n\t\tF6BCBDB02D5733D803C90FCC60A48E00 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\nFB3F5BEE27646BEEDCE7AAFF12A2910F /* Build configuration list for PBXNativeTarget \"Batter·CakefileDescription\" */ = {\n\tisa = XCConfigurationList;\n\tbuildConfigurations = (\n\t\tAAA43370FFAEBDAB6ADCE93C1A2E0385 /* Debug */,\n\t\t787C252C3F61DAE6E109B354CEC2AAF2 /* Release */,\n\t);\n\tdefaultConfigurationIsVisible = 0;\n};\n/* End XCConfigurationList section */\n\t};\n\trootObject = DAA9F9B983CE55D38B2F125BAD56FC0E /* Project object */;\n}\n"
  },
  {
    "path": ".cake/Cake.xcodeproj/project.xcworkspace/WorkspaceSettings.xcsettings",
    "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    <key>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>\n    <false/>\n</dict>\n</plist>"
  },
  {
    "path": ".cake/Cake.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": ".cake/Cake.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "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    <key>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>\n    <false/>\n</dict>\n</plist>"
  },
  {
    "path": ".cake/Dependencies.swift",
    "content": "// Generated by Cake. Regeneration will occur! Edits will be lost!\n// We only export _directly_specified_ dependencies.\n@_exported import OrderedSet\n@_exported import PromiseKit\n@_exported import Path\n@_exported import PMKFoundation\n@_exported import xcodeproj\n@_exported import LegibleError\n@_exported import Version\n@_exported import HotKey\n@_exported import AppUpdater\n"
  },
  {
    "path": ".cake/Package.resolved",
    "content": "{\n  \"object\": {\n    \"pins\": [\n      {\n        \"package\": \"AEXML\",\n        \"repositoryURL\": \"https://github.com/tadija/AEXML\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"54bb8ea6fb693dd3f92a89e5fcc19e199fdeedd0\",\n          \"version\": \"4.3.3\"\n        }\n      },\n      {\n        \"package\": \"AppUpdater\",\n        \"repositoryURL\": \"https://github.com/mxcl/AppUpdater.git\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"ba6661149dc433ebe9620498063cbce8389de0ba\",\n          \"version\": \"1.0.3\"\n        }\n      },\n      {\n        \"package\": \"PMKFoundation\",\n        \"repositoryURL\": \"https://github.com/PromiseKit/Foundation.git\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"04b196a1cb3ce65a404724c4e6e87c43c56542a4\",\n          \"version\": \"3.3.1\"\n        }\n      },\n      {\n        \"package\": \"HotKey\",\n        \"repositoryURL\": \"https://github.com/soffes/HotKey.git\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"59d991a951f596236aa2b4f9b1f4b67d4a79e65d\",\n          \"version\": \"0.1.1\"\n        }\n      },\n      {\n        \"package\": \"LegibleError\",\n        \"repositoryURL\": \"https://github.com/mxcl/LegibleError.git\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"c615c01e461e8a3495ba4ea75f5d671c76820105\",\n          \"version\": \"1.0.1\"\n        }\n      },\n      {\n        \"package\": \"OrderedSet\",\n        \"repositoryURL\": \"https://github.com/Weebly/OrderedSet.git\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"4247c60cc190dbbaff63ecfe42bd7a1f2cbaf225\",\n          \"version\": \"3.1.0\"\n        }\n      },\n      {\n        \"package\": \"Path.swift\",\n        \"repositoryURL\": \"https://github.com/mxcl/Path.swift.git\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"7e774b6cf56f3f516df373718bf8fc2b7a9b373c\",\n          \"version\": \"0.16.1\"\n        }\n      },\n      {\n        \"package\": \"PathKit\",\n        \"repositoryURL\": \"https://github.com/kylef/PathKit\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"e2f5be30e4c8f531c9c1e8765aa7b71c0a45d7a0\",\n          \"version\": \"0.9.2\"\n        }\n      },\n      {\n        \"package\": \"PromiseKit\",\n        \"repositoryURL\": \"https://github.com/mxcl/PromiseKit.git\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"db3b2aaf0b26299c1828e0a302adf1a5523f4af5\",\n          \"version\": \"6.8.3\"\n        }\n      },\n      {\n        \"package\": \"Spectre\",\n        \"repositoryURL\": \"https://github.com/kylef/Spectre.git\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"f14ff47f45642aa5703900980b014c2e9394b6e5\",\n          \"version\": \"0.9.0\"\n        }\n      },\n      {\n        \"package\": \"SwiftShell\",\n        \"repositoryURL\": \"https://github.com/kareman/SwiftShell\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"beebe43c986d89ea5359ac3adcb42dac94e5e08a\",\n          \"version\": \"4.1.2\"\n        }\n      },\n      {\n        \"package\": \"Version\",\n        \"repositoryURL\": \"https://github.com/mxcl/Version.git\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"087c91fedc110f9f833b14ef4c32745dabca8913\",\n          \"version\": \"1.0.3\"\n        }\n      },\n      {\n        \"package\": \"xcodeproj\",\n        \"repositoryURL\": \"https://github.com/tuist/xcodeproj.git\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"3fe1bd763072c81050b867d34db56d11cb9085bb\",\n          \"version\": \"6.6.0\"\n        }\n      }\n    ]\n  },\n  \"version\": 1\n}\n"
  },
  {
    "path": ".gitignore",
    "content": "/.cake/swift-pm\n/.cake/Package.swift\n/.cake/*.json\n/.cake/Version.xcconfig\n/Sources/Mixer/Mixer.xcodeproj\n/Sources/Mixer/.build\n**/xcuserdata\n.DS_Store\n"
  },
  {
    "path": ".travis.yml",
    "content": "# only run for: merge commits, releases and pull-requests\nif: type != push OR branch = master OR branch =~ /^\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$/\n\nos: osx\nlanguage: swift\nosx_image: xcode10.2\nscript: set -o pipefail && xcodebuild -scheme Cake PROVISIONING_PROFILE=\"\" DEVELOPMENT_TEAM=\"\" CODE_SIGN_IDENTITY=\"\" CODE_SIGNING_REQUIRED=NO | xcpretty\n"
  },
  {
    "path": "Cake.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 50;\n\tobjects = {\n\n/* Begin PBXAggregateTarget section */\n\t\t63537994220E8343008449E9 /* mixer */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = 63537995220E8343008449E9 /* Build configuration list for PBXAggregateTarget \"mixer\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t63537998220E8350008449E9 /* swift build */,\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = mixer;\n\t\t\tproductName = mixer2;\n\t\t};\n/* End PBXAggregateTarget section */\n\n/* Begin PBXBuildFile section */\n\t\t6307663221CE716600236F1C /* Menu·Xcode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6307663121CE716600236F1C /* Menu·Xcode.swift */; };\n\t\t63402FC121B87602003F1B8E /* CakefileDescriptionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63402FC021B87602003F1B8E /* CakefileDescriptionTests.swift */; };\n\t\t6343042521858C7D004A45F0 /* XcakeprojTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6343042421858C7D004A45F0 /* XcakeprojTests.swift */; };\n\t\t6371BA8021EA767E00AB2A41 /* iOS.LaunchScreen.storyboard in Copy Template Files (without compilation step) */ = {isa = PBXBuildFile; fileRef = 6371BA6B21EA75AE00AB2A41 /* iOS.LaunchScreen.storyboard */; };\n\t\t63756DC32209E43100DA9D7B /* TemporaryDirectory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63756DAF2209E43100DA9D7B /* TemporaryDirectory.swift */; };\n\t\t6378B33E21B603D4000DC86B /* Menu·$CAKE.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6378B33D21B603D4000DC86B /* Menu·$CAKE.swift */; };\n\t\t63983C6721CAFE8C00487B21 /* Cake.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6378B34C21B606B8000DC86B /* Cake.a */; };\n\t\t63983CAD21CB0A9C00487B21 /* Cake.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6378B34C21B606B8000DC86B /* Cake.a */; };\n\t\t63B53DB121877F7800D863E0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63B53DB021877F7800D863E0 /* AppDelegate.swift */; };\n\t\t63B53DB521877F7900D863E0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 63B53DB421877F7900D863E0 /* Assets.xcassets */; };\n\t\t63B53DB821877F7900D863E0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 63B53DB621877F7900D863E0 /* Main.storyboard */; };\n\t\t63B53DD42187B3EC00D863E0 /* alert().swift in Sources */ = {isa = PBXBuildFile; fileRef = 63B53DD32187B3EC00D863E0 /* alert().swift */; };\n\t\t63C0A9EE2185614900A00C8E /* Utility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63C0A9ED2185614900A00C8E /* Utility.swift */; };\n\t\t63C9152B22282ADD006492A3 /* Cake.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 63C9151222282ADC006492A3 /* Cake.xcconfig */; };\n\t\t63D49E3621BC81740023DB0E /* AppDelegate+NSMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63D49E3521BC81740023DB0E /* AppDelegate+NSMenu.swift */; };\n\t\t63D7C3DB2208CA6C0096BF63 /* MixerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63D7C3DA2208CA6C0096BF63 /* MixerTests.swift */; };\n\t\t63DB0B9C220DC78F00CEF31A /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63DB0B9B220DC78F00CEF31A /* main.swift */; };\n\t\t63DB0BB9220DCCBD00CEF31A /* cake-build in Copy `cake-build` */ = {isa = PBXBuildFile; fileRef = 63DB0B99220DC78F00CEF31A /* cake-build */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };\n\t\t63E342E9218508FA008CF796 /* ModelizerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63E342E8218508FA008CF796 /* ModelizerTests.swift */; };\n\t\t63EEA08C2188F2B70056E113 /* Menu·New Cake.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63EEA08B2188F2B70056E113 /* Menu·New Cake.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t632378E32215B4B000CA2E13 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 4F2CA03F28361DA2CD3C82B19DE28C91;\n\t\t\tremoteInfo = \"Deps·HotKey\";\n\t\t};\n\t\t632B988721E5391F00FE1FAA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = B3CDEF324226D91C75D2BCBA3E3D7952;\n\t\t\tremoteInfo = \"Cakefile·Completion\";\n\t\t};\n\t\t633E10ED21C17FAD00BF5956 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = \"Batter·Base::Product\";\n\t\t\tremoteInfo = \"Batter·Base\";\n\t\t};\n\t\t633E10EF21C17FAD00BF5956 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = \"Batter·CakefileDescription::Product\";\n\t\t\tremoteInfo = \"Batter·CakefileDescription\";\n\t\t};\n\t\t633E10F121C17FAD00BF5956 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = \"Batter·Modelizer::Product\";\n\t\t\tremoteInfo = \"Batter·Modelizer\";\n\t\t};\n\t\t633E10F921C17FAD00BF5956 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = \"Deps·AEXML::Product\";\n\t\t\tremoteInfo = \"Deps·AEXML\";\n\t\t};\n\t\t633E10FB21C17FAD00BF5956 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = \"Deps·OrderedSet::Product\";\n\t\t\tremoteInfo = \"Deps·OrderedSet\";\n\t\t};\n\t\t633E10FD21C17FAD00BF5956 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = \"Deps·PathKit::Product\";\n\t\t\tremoteInfo = \"Deps·PathKit\";\n\t\t};\n\t\t633E110121C17FAD00BF5956 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = \"Deps·xcodeproj::Product\";\n\t\t\tremoteInfo = \"Deps·xcodeproj\";\n\t\t};\n\t\t634604D321DDAC11009FF5A4 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = C5744C074FEF959972A62160544D24F0;\n\t\t\tremoteInfo = \"Batter·Processor\";\n\t\t};\n\t\t63537999220E83A4008449E9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 63E342C52185029C008CF796 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 63537994220E8343008449E9;\n\t\t\tremoteInfo = mixer;\n\t\t};\n\t\t6366DAB921B73475009BD71D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = \"Dependencies::Product\";\n\t\t\tremoteInfo = Dependencies;\n\t\t};\n\t\t636FB04E2210B62F007CE1CF /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = FD62726177028C4BC3DCB2230AD84705;\n\t\t\tremoteInfo = \"Deps·Version\";\n\t\t};\n\t\t6371BA7C21EA75AE00AB2A41 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = A49E0E264A02682CCE9A823B02A46706;\n\t\t\tremoteInfo = \"Batter·Path\";\n\t\t};\n\t\t63730F3F21B704CE00F2F2AD /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8B942976617019A6C464818315598CC1;\n\t\t\tremoteInfo = Cake;\n\t\t};\n\t\t6378B34921B606B8000DC86B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = \"Batter::Product\";\n\t\t\tremoteInfo = Batter;\n\t\t};\n\t\t6378B34B21B606B8000DC86B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = \"Cake::Product\";\n\t\t\tremoteInfo = Cake;\n\t\t};\n\t\t63983C6421CAFE8800487B21 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8B942976617019A6C464818315598CC1;\n\t\t\tremoteInfo = Cake;\n\t\t};\n\t\t63A0742921CDB35100FA09EA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 7F8732C7CBD899BD5F0398A832669E75;\n\t\t\tremoteInfo = \"Batter·XcakeProject\";\n\t\t};\n\t\t63A0742B21CDB35100FA09EA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 937C922F7F6999DF1895EB3DC82906E9;\n\t\t\tremoteInfo = \"Batter·XcodeProject\";\n\t\t};\n\t\t63A0742D21CDB35100FA09EA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = F9CD3F23A3EB056C8061881D18FBD601;\n\t\t\tremoteInfo = \"Batter·XcodeObserver\";\n\t\t};\n\t\t63B66A7C21CD1DA300CAC566 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = BF52CA51D11D9A90EF84861A2B5938B1;\n\t\t\tremoteInfo = \"Batter·Kitchen\";\n\t\t};\n\t\t63C9152922282ADC006492A3 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 19F01C205BDC9FA3129D8949BE2CB5C4;\n\t\t\tremoteInfo = \"Deps·AppUpdater\";\n\t\t};\n\t\t63D6506722305A370088523B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DCF843C187E023E2097ACF9EABA93DD6;\n\t\t\tremoteInfo = Dependencies;\n\t\t};\n\t\t63DB0BB3220DC78F00CEF31A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 1DBCAEFF3AB28195D7B5E09B52FDBDA9;\n\t\t\tremoteInfo = \"Deps·LegibleError\";\n\t\t};\n\t\t63DB0BB6220DC81D00CEF31A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 63E342C52185029C008CF796 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 63DB0B98220DC78F00CEF31A;\n\t\t\tremoteInfo = \"cake-build\";\n\t\t};\n\t\t63E99EF321F8AF68009B72CE /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 69787F8145CACFA492EC131CC2A0AA1D;\n\t\t\tremoteInfo = \"Deps·PMKFoundation\";\n\t\t};\n\t\t63E99EF521F8AF68009B72CE /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 53E3B23BDD8E313D1CCE46BCBA847860;\n\t\t\tremoteInfo = \"Deps·PromiseKit\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t6371BA7F21EA767500AB2A41 /* Copy Template Files (without compilation step) */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 7;\n\t\t\tfiles = (\n\t\t\t\t6371BA8021EA767E00AB2A41 /* iOS.LaunchScreen.storyboard in Copy Template Files (without compilation step) */,\n\t\t\t);\n\t\t\tname = \"Copy Template Files (without compilation step)\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t63DB0B97220DC78F00CEF31A /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = /usr/share/man/man1/;\n\t\t\tdstSubfolderSpec = 0;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 1;\n\t\t};\n\t\t63DB0BB8220DCCAD00CEF31A /* Copy `cake-build` */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 6;\n\t\t\tfiles = (\n\t\t\t\t63DB0BB9220DCCBD00CEF31A /* cake-build in Copy `cake-build` */,\n\t\t\t);\n\t\t\tname = \"Copy `cake-build`\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t6307663121CE716600236F1C /* Menu·Xcode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"Menu·Xcode.swift\"; sourceTree = \"<group>\"; };\n\t\t632B98B921E63B2500FE1FAA /* Documents */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Documents; sourceTree = \"<group>\"; };\n\t\t63402FA321B86FE3003F1B8E /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = \"<group>\"; };\n\t\t63402FC021B87602003F1B8E /* CakefileDescriptionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CakefileDescriptionTests.swift; sourceTree = \"<group>\"; };\n\t\t6343042421858C7D004A45F0 /* XcakeprojTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XcakeprojTests.swift; sourceTree = \"<group>\"; };\n\t\t6371BA6B21EA75AE00AB2A41 /* iOS.LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = iOS.LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t63756DAF2209E43100DA9D7B /* TemporaryDirectory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TemporaryDirectory.swift; path = ../Sources/Model/Base/XcodeProject/XcakeProject/Processor/TemporaryDirectory.swift; sourceTree = \"<group>\"; };\n\t\t6378B33D21B603D4000DC86B /* Menu·$CAKE.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"Menu·$CAKE.swift\"; sourceTree = \"<group>\"; };\n\t\t6378B33F21B606B7000DC86B /* Cake.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = Cake.xcodeproj; path = .cake/Cake.xcodeproj; sourceTree = \"<group>\"; };\n\t\t6378B35521B60700000DC86B /* Model */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Model; path = Sources/Model; sourceTree = \"<group>\"; };\n\t\t639FB0D321BB179500DAE087 /* modelize().swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = \"modelize().swift\"; path = \"Sources/Mixer/Modelize/modelize().swift\"; sourceTree = SOURCE_ROOT; };\n\t\t639FB0D421BB179500DAE087 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = main.swift; path = Sources/Mixer/main.swift; sourceTree = SOURCE_ROOT; };\n\t\t639FB0D521BB179500DAE087 /* etc.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = etc.swift; path = Sources/Mixer/Mixer/etc.swift; sourceTree = SOURCE_ROOT; };\n\t\t63B53DAE21877F7800D863E0 /* Cake.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Cake.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t63B53DB021877F7800D863E0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t63B53DB421877F7900D863E0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t63B53DB721877F7900D863E0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t63B53DB921877F7900D863E0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t63B53DD32187B3EC00D863E0 /* alert().swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"alert().swift\"; sourceTree = \"<group>\"; };\n\t\t63C0A9ED2185614900A00C8E /* Utility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utility.swift; sourceTree = \"<group>\"; };\n\t\t63C9151222282ADC006492A3 /* Cake.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Cake.xcconfig; path = .cake/Cake.xcconfig; sourceTree = \"<group>\"; };\n\t\t63D49D7921BC782A0023DB0E /* libSwiftPM.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; path = libSwiftPM.dylib; sourceTree = \"<group>\"; };\n\t\t63D49D7A21BC782A0023DB0E /* mixer */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.executable\"; path = mixer; sourceTree = \"<group>\"; };\n\t\t63D49E3521BC81740023DB0E /* AppDelegate+NSMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"AppDelegate+NSMenu.swift\"; sourceTree = \"<group>\"; };\n\t\t63D7C3DA2208CA6C0096BF63 /* MixerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MixerTests.swift; sourceTree = \"<group>\"; };\n\t\t63DB0B99220DC78F00CEF31A /* cake-build */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = \"cake-build\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t63DB0B9B220DC78F00CEF31A /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = \"<group>\"; };\n\t\t63DB6E4D222ACF0700E69628 /* Cake.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Cake.entitlements; sourceTree = \"<group>\"; };\n\t\t63E342E6218508FA008CF796 /* Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t63E342E8218508FA008CF796 /* ModelizerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelizerTests.swift; sourceTree = \"<group>\"; };\n\t\t63E342EA218508FA008CF796 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t63EEA08B2188F2B70056E113 /* Menu·New Cake.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"Menu·New Cake.swift\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t63B53DAB21877F7800D863E0 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t63983C6721CAFE8C00487B21 /* Cake.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t63DB0B96220DC78F00CEF31A /* 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\t63E342E3218508FA008CF796 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t63983CAD21CB0A9C00487B21 /* Cake.a 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\t636FB05D2210B855007CE1CF /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6371BA6A21EA75AE00AB2A41 /* Bundled Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6371BA6B21EA75AE00AB2A41 /* iOS.LaunchScreen.storyboard */,\n\t\t\t);\n\t\t\tpath = \"Bundled Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t63756DC42209E43700DA9D7B /* Utility */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t63756DAF2209E43100DA9D7B /* TemporaryDirectory.swift */,\n\t\t\t\t63C0A9ED2185614900A00C8E /* Utility.swift */,\n\t\t\t);\n\t\t\tname = Utility;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6378B34021B606B7000DC86B /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t632B988821E5391F00FE1FAA /* Cakefile·Completion */,\n\t\t\t\t633E110221C17FAD00BF5956 /* xcodeproj.a */,\n\t\t\t\t633E10FE21C17FAD00BF5956 /* PathKit.a */,\n\t\t\t\t633E10FC21C17FAD00BF5956 /* OrderedSet.a */,\n\t\t\t\t63DB0BB4220DC78F00CEF31A /* LegibleError.a */,\n\t\t\t\t632378E42215B4B000CA2E13 /* HotKey.a */,\n\t\t\t\t63C9152A22282ADC006492A3 /* AppUpdater.a */,\n\t\t\t\t636FB04F2210B62F007CE1CF /* Version.a */,\n\t\t\t\t6371BA7D21EA75AE00AB2A41 /* Path.a */,\n\t\t\t\t63E99EF421F8AF68009B72CE /* PMKFoundation.a */,\n\t\t\t\t63E99EF621F8AF68009B72CE /* PromiseKit.a */,\n\t\t\t\t633E10FA21C17FAD00BF5956 /* AEXML.a */,\n\t\t\t\t6366DABA21B73475009BD71D /* Dependencies.a */,\n\t\t\t\t63B66A7D21CD1DA300CAC566 /* Kitchen.a */,\n\t\t\t\t634604D421DDAC11009FF5A4 /* Processor.a */,\n\t\t\t\t63A0742A21CDB35100FA09EA /* XcakeProject.a */,\n\t\t\t\t63A0742C21CDB35100FA09EA /* XcodeProject.a */,\n\t\t\t\t63A0742E21CDB35100FA09EA /* XcodeObserver.a */,\n\t\t\t\t633E10F221C17FAD00BF5956 /* Modelizer.a */,\n\t\t\t\t633E10EE21C17FAD00BF5956 /* Base.a */,\n\t\t\t\t633E10F021C17FAD00BF5956 /* CakefileDescription.a */,\n\t\t\t\t6378B34A21B606B8000DC86B /* Batter.a */,\n\t\t\t\t6378B34C21B606B8000DC86B /* Cake.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6378B3A021B60D54000DC86B /* Targets */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t63E342CF2185029C008CF796 /* AppKit */,\n\t\t\t\t63DB0B9A220DC78F00CEF31A /* cake-build */,\n\t\t\t\t639FB0CF21BB176300DAE087 /* Mixer */,\n\t\t\t);\n\t\t\tname = Targets;\n\t\t\tpath = Sources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t639FB0CF21BB176300DAE087 /* Mixer */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t639FB0D421BB179500DAE087 /* main.swift */,\n\t\t\t\t639FB0D521BB179500DAE087 /* etc.swift */,\n\t\t\t\t639FB0D321BB179500DAE087 /* modelize().swift */,\n\t\t\t\t639FB0DD21BB1BD100DAE087 /* Products */,\n\t\t\t);\n\t\t\tpath = Mixer;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t639FB0DD21BB1BD100DAE087 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t63D49D7921BC782A0023DB0E /* libSwiftPM.dylib */,\n\t\t\t\t63D49D7A21BC782A0023DB0E /* mixer */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tpath = \"Sources/Mixer/.build/x86_64-apple-macosx/debug\";\n\t\t\tsourceTree = SOURCE_ROOT;\n\t\t};\n\t\t63B53DC7218782A600D863E0 /* Detritus */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t63DB6E4D222ACF0700E69628 /* Cake.entitlements */,\n\t\t\t\t63B53DB421877F7900D863E0 /* Assets.xcassets */,\n\t\t\t\t63B53DB621877F7900D863E0 /* Main.storyboard */,\n\t\t\t\t63B53DB921877F7900D863E0 /* Info.plist */,\n\t\t\t);\n\t\t\tname = Detritus;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t63DB0B9A220DC78F00CEF31A /* cake-build */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t63DB0B9B220DC78F00CEF31A /* main.swift */,\n\t\t\t);\n\t\t\tpath = \"cake-build\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t63E342C42185029C008CF796 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t63402FA321B86FE3003F1B8E /* README.md */,\n\t\t\t\t6378B35521B60700000DC86B /* Model */,\n\t\t\t\t632B98B921E63B2500FE1FAA /* Documents */,\n\t\t\t\t6378B3A021B60D54000DC86B /* Targets */,\n\t\t\t\t63E342E7218508FA008CF796 /* Tests */,\n\t\t\t\t6378B33F21B606B7000DC86B /* Cake.xcodeproj */,\n\t\t\t\t63C9151222282ADC006492A3 /* Cake.xcconfig */,\n\t\t\t\t63E342CE2185029C008CF796 /* Products */,\n\t\t\t\t636FB05D2210B855007CE1CF /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t63E342CE2185029C008CF796 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t63E342E6218508FA008CF796 /* Tests.xctest */,\n\t\t\t\t63B53DAE21877F7800D863E0 /* Cake.app */,\n\t\t\t\t63DB0B99220DC78F00CEF31A /* cake-build */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t63E342CF2185029C008CF796 /* AppKit */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t63B53DB021877F7800D863E0 /* AppDelegate.swift */,\n\t\t\t\t63D49E3521BC81740023DB0E /* AppDelegate+NSMenu.swift */,\n\t\t\t\t6378B33D21B603D4000DC86B /* Menu·$CAKE.swift */,\n\t\t\t\t63EEA08B2188F2B70056E113 /* Menu·New Cake.swift */,\n\t\t\t\t6307663121CE716600236F1C /* Menu·Xcode.swift */,\n\t\t\t\t63B53DD32187B3EC00D863E0 /* alert().swift */,\n\t\t\t\t6371BA6A21EA75AE00AB2A41 /* Bundled Files */,\n\t\t\t\t63B53DC7218782A600D863E0 /* Detritus */,\n\t\t\t);\n\t\t\tpath = AppKit;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t63E342E7218508FA008CF796 /* Tests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t63D7C3DA2208CA6C0096BF63 /* MixerTests.swift */,\n\t\t\t\t6343042421858C7D004A45F0 /* XcakeprojTests.swift */,\n\t\t\t\t63E342E8218508FA008CF796 /* ModelizerTests.swift */,\n\t\t\t\t63402FC021B87602003F1B8E /* CakefileDescriptionTests.swift */,\n\t\t\t\t63756DC42209E43700DA9D7B /* Utility */,\n\t\t\t\t63E342EA218508FA008CF796 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Tests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t63B53DAD21877F7800D863E0 /* Cake.app */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 63B53DBB21877F7900D863E0 /* Build configuration list for PBXNativeTarget \"Cake.app\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t63B53DAA21877F7800D863E0 /* Sources */,\n\t\t\t\t63B53DAB21877F7800D863E0 /* Frameworks */,\n\t\t\t\t63B53DAC21877F7800D863E0 /* Resources */,\n\t\t\t\t6371BA7F21EA767500AB2A41 /* Copy Template Files (without compilation step) */,\n\t\t\t\t63DB0BB8220DCCAD00CEF31A /* Copy `cake-build` */,\n\t\t\t\t633AA206220F2D8F004AB319 /* Copy & Fix Install Names for mixer */,\n\t\t\t\t633860D42229ADE5005BED0E /* Kitchenware */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t63D6506822305A370088523B /* PBXTargetDependency */,\n\t\t\t\t6353799A220E83A4008449E9 /* PBXTargetDependency */,\n\t\t\t\t63983C6521CAFE8800487B21 /* PBXTargetDependency */,\n\t\t\t\t63DB0BB7220DC81D00CEF31A /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Cake.app;\n\t\t\tproductName = Cake;\n\t\t\tproductReference = 63B53DAE21877F7800D863E0 /* Cake.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t63DB0B98220DC78F00CEF31A /* cake-build */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 63DB0BB5220DC78F00CEF31A /* Build configuration list for PBXNativeTarget \"cake-build\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t63DB0B95220DC78F00CEF31A /* Sources */,\n\t\t\t\t63DB0B96220DC78F00CEF31A /* Frameworks */,\n\t\t\t\t63DB0B97220DC78F00CEF31A /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"cake-build\";\n\t\t\tproductName = \"cake-build\";\n\t\t\tproductReference = 63DB0B99220DC78F00CEF31A /* cake-build */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n\t\t63E342E5218508FA008CF796 /* Tests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 63E342EE218508FA008CF796 /* Build configuration list for PBXNativeTarget \"Tests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t63E342E2218508FA008CF796 /* Sources */,\n\t\t\t\t63E342E3218508FA008CF796 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t63730F4021B704CE00F2F2AD /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Tests;\n\t\t\tproductName = ModelizerTests;\n\t\t\tproductReference = 63E342E6218508FA008CF796 /* Tests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t63E342C52185029C008CF796 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 1020;\n\t\t\t\tLastUpgradeCheck = 1000;\n\t\t\t\tORGANIZATIONNAME = \"Max Howell\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t63537994220E8343008449E9 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 10.2;\n\t\t\t\t\t};\n\t\t\t\t\t63B53DAD21877F7800D863E0 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 10.0;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.HardenedRuntime = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.Sandbox = {\n\t\t\t\t\t\t\t\tenabled = 0;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t\t63DB0B98220DC78F00CEF31A = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 10.2;\n\t\t\t\t\t};\n\t\t\t\t\t63E342E5218508FA008CF796 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 10.0;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 63E342C82185029C008CF796 /* Build configuration list for PBXProject \"Cake\" */;\n\t\t\tcompatibilityVersion = \"Xcode 9.3\";\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 = 63E342C42185029C008CF796;\n\t\t\tproductRefGroup = 63E342CE2185029C008CF796 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 6378B34021B606B7000DC86B /* Products */;\n\t\t\t\t\tProjectRef = 6378B33F21B606B7000DC86B /* Cake.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t63B53DAD21877F7800D863E0 /* Cake.app */,\n\t\t\t\t63DB0B98220DC78F00CEF31A /* cake-build */,\n\t\t\t\t63537994220E8343008449E9 /* mixer */,\n\t\t\t\t63E342E5218508FA008CF796 /* Tests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\t632378E42215B4B000CA2E13 /* HotKey.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = HotKey.a;\n\t\t\tpath = libHotKey.a;\n\t\t\tremoteRef = 632378E32215B4B000CA2E13 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t632B988821E5391F00FE1FAA /* Cakefile·Completion */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = text;\n\t\t\tname = \"Cakefile·Completion\";\n\t\t\tpath = CakefileScript;\n\t\t\tremoteRef = 632B988721E5391F00FE1FAA /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t633E10EE21C17FAD00BF5956 /* Base.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = Base.a;\n\t\t\tpath = libBase.a;\n\t\t\tremoteRef = 633E10ED21C17FAD00BF5956 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t633E10F021C17FAD00BF5956 /* CakefileDescription.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = CakefileDescription.a;\n\t\t\tpath = libCakefileDescription.a;\n\t\t\tremoteRef = 633E10EF21C17FAD00BF5956 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t633E10F221C17FAD00BF5956 /* Modelizer.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = Modelizer.a;\n\t\t\tpath = libModelizer.a;\n\t\t\tremoteRef = 633E10F121C17FAD00BF5956 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t633E10FA21C17FAD00BF5956 /* AEXML.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = AEXML.a;\n\t\t\tpath = libAEXML.a;\n\t\t\tremoteRef = 633E10F921C17FAD00BF5956 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t633E10FC21C17FAD00BF5956 /* OrderedSet.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = OrderedSet.a;\n\t\t\tpath = libOrderedSet.a;\n\t\t\tremoteRef = 633E10FB21C17FAD00BF5956 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t633E10FE21C17FAD00BF5956 /* PathKit.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = PathKit.a;\n\t\t\tpath = libPathKit.a;\n\t\t\tremoteRef = 633E10FD21C17FAD00BF5956 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t633E110221C17FAD00BF5956 /* xcodeproj.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = xcodeproj.a;\n\t\t\tpath = libxcodeproj.a;\n\t\t\tremoteRef = 633E110121C17FAD00BF5956 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t634604D421DDAC11009FF5A4 /* Processor.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = Processor.a;\n\t\t\tpath = libProcessor.a;\n\t\t\tremoteRef = 634604D321DDAC11009FF5A4 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t6366DABA21B73475009BD71D /* Dependencies.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = Dependencies.a;\n\t\t\tpath = libDependencies.a;\n\t\t\tremoteRef = 6366DAB921B73475009BD71D /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t636FB04F2210B62F007CE1CF /* Version.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = Version.a;\n\t\t\tpath = libVersion.a;\n\t\t\tremoteRef = 636FB04E2210B62F007CE1CF /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t6371BA7D21EA75AE00AB2A41 /* Path.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = Path.a;\n\t\t\tpath = libPath.a;\n\t\t\tremoteRef = 6371BA7C21EA75AE00AB2A41 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t6378B34A21B606B8000DC86B /* Batter.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = Batter.a;\n\t\t\tpath = libBatter.a;\n\t\t\tremoteRef = 6378B34921B606B8000DC86B /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t6378B34C21B606B8000DC86B /* Cake.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = Cake.a;\n\t\t\tpath = libCake.a;\n\t\t\tremoteRef = 6378B34B21B606B8000DC86B /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t63A0742A21CDB35100FA09EA /* XcakeProject.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = XcakeProject.a;\n\t\t\tpath = libXcakeProject.a;\n\t\t\tremoteRef = 63A0742921CDB35100FA09EA /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t63A0742C21CDB35100FA09EA /* XcodeProject.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = XcodeProject.a;\n\t\t\tpath = libXcodeProject.a;\n\t\t\tremoteRef = 63A0742B21CDB35100FA09EA /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t63A0742E21CDB35100FA09EA /* XcodeObserver.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = XcodeObserver.a;\n\t\t\tpath = libXcodeObserver.a;\n\t\t\tremoteRef = 63A0742D21CDB35100FA09EA /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t63B66A7D21CD1DA300CAC566 /* Kitchen.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = Kitchen.a;\n\t\t\tpath = libKitchen.a;\n\t\t\tremoteRef = 63B66A7C21CD1DA300CAC566 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t63C9152A22282ADC006492A3 /* AppUpdater.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = AppUpdater.a;\n\t\t\tpath = libAppUpdater.a;\n\t\t\tremoteRef = 63C9152922282ADC006492A3 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t63DB0BB4220DC78F00CEF31A /* LegibleError.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = LegibleError.a;\n\t\t\tpath = libLegibleError.a;\n\t\t\tremoteRef = 63DB0BB3220DC78F00CEF31A /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t63E99EF421F8AF68009B72CE /* PMKFoundation.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = PMKFoundation.a;\n\t\t\tpath = libPMKFoundation.a;\n\t\t\tremoteRef = 63E99EF321F8AF68009B72CE /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t63E99EF621F8AF68009B72CE /* PromiseKit.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tname = PromiseKit.a;\n\t\t\tpath = libPromiseKit.a;\n\t\t\tremoteRef = 63E99EF521F8AF68009B72CE /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t63B53DAC21877F7800D863E0 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t63B53DB521877F7900D863E0 /* Assets.xcassets in Resources */,\n\t\t\t\t63B53DB821877F7900D863E0 /* Main.storyboard in Resources */,\n\t\t\t\t63C9152B22282ADD006492A3 /* Cake.xcconfig in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t633860D42229ADE5005BED0E /* Kitchenware */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = Kitchenware;\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"set -euxo pipefail\\n\\nrm -rf \\\"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\\\"/Kitchenware\\n\\ncp -pR \\\"$PROJECT_DIR\\\"/Sources/Kitchenware \\\"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\\\"\\nsrc=\\\"$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\\\"/Kitchenware/Sources\\n\\nmkdir \\\"$src\\\"\\ncp -pR \\\"$PROJECT_DIR\\\"/Sources/Model/CakefileDescription \\\"$src\\\"/Cakefile\\n\\npkd=\\\"$OBJROOT\\\"/mixer.build/checkouts/swift-package-manager/Sources/PackageDescription4\\ncp -pR \\\"$pkd\\\" \\\"$src\\\"/PackageDescription\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t633AA206220F2D8F004AB319 /* Copy & Fix Install Names for mixer */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"$(OBJROOT)/mixer.build/x86_64-apple-macosx/$(CONFIGURATION:lower)/mixer\",\n\t\t\t\t\"$(OBJROOT)/mixer.build/x86_64-apple-macosx/$(CONFIGURATION:lower)/libSwiftPM.dylib\",\n\t\t\t);\n\t\t\tname = \"Copy & Fix Install Names for mixer\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(BUILT_PRODUCTS_DIR)/$(EXECUTABLE_FOLDER_PATH)/mixer\",\n\t\t\t\t\"$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/libSwiftPM.dylib\",\n\t\t\t\t\"$(DERIVED_FILE_DIR)/mixer.done\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"set -exo pipefail\\n\\n# sigh\\nrm -f \\\"$SCRIPT_OUTPUT_FILE_0\\\" \\\"$SCRIPT_OUTPUT_FILE_1\\\"\\n\\ncp \\\"$SCRIPT_INPUT_FILE_0\\\" \\\"$SCRIPT_OUTPUT_FILE_0\\\"\\ncp \\\"$SCRIPT_INPUT_FILE_1\\\" \\\"$SCRIPT_OUTPUT_FILE_1\\\"\\n\\n# In CI we don’t code sign\\nif [[ -n \\\"$EXPANDED_CODE_SIGN_IDENTITY\\\" ]]; then\\n    /usr/bin/codesign --force --sign \\\"$EXPANDED_CODE_SIGN_IDENTITY\\\" --preserve-metadata=identifier,entitlements,flags --timestamp=none \\\"$SCRIPT_OUTPUT_FILE_0\\\"\\n    /usr/bin/codesign --force --sign \\\"$EXPANDED_CODE_SIGN_IDENTITY\\\" --preserve-metadata=identifier,entitlements,flags --timestamp=none \\\"$SCRIPT_OUTPUT_FILE_1\\\"\\nfi\\n\\ninstall_name_tool -rpath \\\\\\n    \\\"$DT_TOOLCHAIN_DIR\\\"/usr/lib/swift/macosx \\\\\\n    @executable_path/../Frameworks \\\\\\n    \\\"$SCRIPT_OUTPUT_FILE_0\\\"\\n\\n#install_name_tool -rpath \\\\\\n#    \\\"$DT_TOOLCHAIN_DIR\\\"/usr/lib/swift/macosx \\\\\\n#    @executable_path/../Frameworks \\\\\\n#    \\\"$SCRIPT_OUTPUT_FILE_1\\\"\\n# ^^ Xcode 10.2-beta4 stopped setting this rpath\\n\\ninstall_name_tool -change \\\\\\n    \\\"$SCRIPT_INPUT_FILE_1\\\" \\\\\\n    @rpath/$(basename \\\"$SCRIPT_INPUT_FILE_1\\\") \\\\\\n    \\\"$SCRIPT_OUTPUT_FILE_0\\\"\\ninstall_name_tool -id \\\\\\n    @rpath/$(basename \\\"$SCRIPT_OUTPUT_FILE_1\\\") \\\\\\n    \\\"$SCRIPT_OUTPUT_FILE_1\\\"\\n\\n# build systems AMIRITE?\\ntouch \\\"$SCRIPT_OUTPUT_FILE_2\\\" \\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t63537998220E8350008449E9 /* swift build */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"swift build\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"cd \\\"$PROJECT_DIR\\\"/Sources/Mixer\\nconf=$(echo \\\"$CONFIGURATION\\\" | awk '{print tolower($0)}')\\n\\\"$DT_TOOLCHAIN_DIR\\\"/usr/bin/swift build \\\\\\n    --configuration $conf \\\\\\n    --skip-update \\\\\\n    --disable-index-store \\\\\\n    -Xswiftc -suppress-warnings \\\\\\n    --build-path \\\"$OBJROOT\\\"/mixer.build\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t63B53DAA21877F7800D863E0 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t63B53DB121877F7800D863E0 /* AppDelegate.swift in Sources */,\n\t\t\t\t63B53DD42187B3EC00D863E0 /* alert().swift in Sources */,\n\t\t\t\t63D49E3621BC81740023DB0E /* AppDelegate+NSMenu.swift in Sources */,\n\t\t\t\t6378B33E21B603D4000DC86B /* Menu·$CAKE.swift in Sources */,\n\t\t\t\t6307663221CE716600236F1C /* Menu·Xcode.swift in Sources */,\n\t\t\t\t63EEA08C2188F2B70056E113 /* Menu·New Cake.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t63DB0B95220DC78F00CEF31A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t63DB0B9C220DC78F00CEF31A /* main.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t63E342E2218508FA008CF796 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t63756DC32209E43100DA9D7B /* TemporaryDirectory.swift in Sources */,\n\t\t\t\t6343042521858C7D004A45F0 /* XcakeprojTests.swift in Sources */,\n\t\t\t\t63402FC121B87602003F1B8E /* CakefileDescriptionTests.swift in Sources */,\n\t\t\t\t63D7C3DB2208CA6C0096BF63 /* MixerTests.swift in Sources */,\n\t\t\t\t63E342E9218508FA008CF796 /* ModelizerTests.swift in Sources */,\n\t\t\t\t63C0A9EE2185614900A00C8E /* Utility.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\t6353799A220E83A4008449E9 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 63537994220E8343008449E9 /* mixer */;\n\t\t\ttargetProxy = 63537999220E83A4008449E9 /* PBXContainerItemProxy */;\n\t\t};\n\t\t63730F4021B704CE00F2F2AD /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = Cake;\n\t\t\ttargetProxy = 63730F3F21B704CE00F2F2AD /* PBXContainerItemProxy */;\n\t\t};\n\t\t63983C6521CAFE8800487B21 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = Cake;\n\t\t\ttargetProxy = 63983C6421CAFE8800487B21 /* PBXContainerItemProxy */;\n\t\t};\n\t\t63D6506822305A370088523B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = Dependencies;\n\t\t\ttargetProxy = 63D6506722305A370088523B /* PBXContainerItemProxy */;\n\t\t};\n\t\t63DB0BB7220DC81D00CEF31A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 63DB0B98220DC78F00CEF31A /* cake-build */;\n\t\t\ttargetProxy = 63DB0BB6220DC81D00CEF31A /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t63B53DB621877F7900D863E0 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t63B53DB721877F7900D863E0 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t63537996220E8343008449E9 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = TEQMQBRC7B;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t63537997220E8343008449E9 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = TEQMQBRC7B;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t63B53DBC21877F7900D863E0 /* 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_ENTITLEMENTS = Sources/AppKit/Cake.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_TEAM = TEQMQBRC7B;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tINFOPLIST_FILE = Sources/AppKit/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = dev.mxcl.Cake;\n\t\t\t\tPRODUCT_MODULE_NAME = App;\n\t\t\t\tPRODUCT_NAME = Cake;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t63B53DBD21877F7900D863E0 /* 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_ENTITLEMENTS = Sources/AppKit/Cake.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_TEAM = TEQMQBRC7B;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tINFOPLIST_FILE = Sources/AppKit/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = dev.mxcl.Cake;\n\t\t\t\tPRODUCT_MODULE_NAME = App;\n\t\t\t\tPRODUCT_NAME = Cake;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t63DB0B9D220DC78F00CEF31A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = TEQMQBRC7B;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"@executable_path/../Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t63DB0B9E220DC78F00CEF31A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = TEQMQBRC7B;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"@executable_path/../Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t63E342D22185029C008CF796 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 63C9151222282ADC006492A3 /* Cake.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\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++14\";\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_ENABLE_OBJC_WEAK = 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_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_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\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 = \"Mac Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\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 = gnu11;\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.14;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = 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\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t63E342D32185029C008CF796 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 63C9151222282ADC006492A3 /* Cake.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\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++14\";\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_ENABLE_OBJC_WEAK = 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_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_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\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 = \"Mac Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\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 = gnu11;\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.14;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t63E342EF218508FA008CF796 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEVELOPMENT_TEAM = TEQMQBRC7B;\n\t\t\t\tINFOPLIST_FILE = Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t\t\"@loader_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = dev.mxcl.ModelizerTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t63E342F0218508FA008CF796 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEVELOPMENT_TEAM = TEQMQBRC7B;\n\t\t\t\tINFOPLIST_FILE = Tests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t\t\"@loader_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = dev.mxcl.ModelizerTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t63537995220E8343008449E9 /* Build configuration list for PBXAggregateTarget \"mixer\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t63537996220E8343008449E9 /* Debug */,\n\t\t\t\t63537997220E8343008449E9 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t63B53DBB21877F7900D863E0 /* Build configuration list for PBXNativeTarget \"Cake.app\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t63B53DBC21877F7900D863E0 /* Debug */,\n\t\t\t\t63B53DBD21877F7900D863E0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t63DB0BB5220DC78F00CEF31A /* Build configuration list for PBXNativeTarget \"cake-build\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t63DB0B9D220DC78F00CEF31A /* Debug */,\n\t\t\t\t63DB0B9E220DC78F00CEF31A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t63E342C82185029C008CF796 /* Build configuration list for PBXProject \"Cake\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t63E342D22185029C008CF796 /* Debug */,\n\t\t\t\t63E342D32185029C008CF796 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t63E342EE218508FA008CF796 /* Build configuration list for PBXNativeTarget \"Tests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t63E342EF218508FA008CF796 /* Debug */,\n\t\t\t\t63E342F0218508FA008CF796 /* 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 = 63E342C52185029C008CF796 /* Project object */;\n}\n"
  },
  {
    "path": "Cake.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:Cake.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Cake.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": "Cake.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "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>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Cake.xcodeproj/xcshareddata/xcschemes/Cake.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1010\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"NO\">\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 = \"63B53DAD21877F7800D863E0\"\n               BuildableName = \"Cake.app\"\n               BlueprintName = \"Cake.app\"\n               ReferencedContainer = \"container:Cake.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         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"63E342E5218508FA008CF796\"\n               BuildableName = \"Tests.xctest\"\n               BlueprintName = \"Tests\"\n               ReferencedContainer = \"container:Cake.xcodeproj\">\n            </BuildableReference>\n            <SkippedTests>\n               <Test\n                  Identifier = \"ModelizerTests/testThreeNestedModulesWithAGap_IgnoredRule()\">\n               </Test>\n            </SkippedTests>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"63B53DAD21877F7800D863E0\"\n            BuildableName = \"Cake.app\"\n            BlueprintName = \"Cake.app\"\n            ReferencedContainer = \"container:Cake.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\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      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"63B53DAD21877F7800D863E0\"\n            BuildableName = \"Cake.app\"\n            BlueprintName = \"Cake.app\"\n            ReferencedContainer = \"container:Cake.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"63B53DAD21877F7800D863E0\"\n            BuildableName = \"Cake.app\"\n            BlueprintName = \"Cake.app\"\n            ReferencedContainer = \"container:Cake.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Cakefile.swift",
    "content": "import Cakefile\n\ndependencies = [\n    .cake(~>Version(1,0,0, prereleaseIdentifiers: [\"debug\"])),\n    .github(\"Weebly/OrderedSet\" ~> 3.1),\n    .github(\"mxcl/PromiseKit\" ~> 6.8),\n    .github(\"mxcl/Path.swift\" ~> 0.13),\n    .github(\"PromiseKit/Foundation\" ~> 3),\n    .github(\"tuist/xcodeproj\" ~> 6.5),\n    .github(\"mxcl/LegibleError\" ~> 1),\n    .github(\"mxcl/Version\" ~> 1),\n    .github(\"soffes/HotKey\" ~> 0.1),\n    .github(\"mxcl/AppUpdater\" ~> 1.0),\n]\n\noptions.suppressDependencyWarnings = true  // this is the default\n"
  },
  {
    "path": "Dependencies/PromiseKit∕Foundation-3.3.1/NSNotificationCenter+Promise.swift",
    "content": "import Foundation\n#if !PMKCocoaPods\nimport PromiseKit\n#endif\n\n/**\n To import the `NSNotificationCenter` category:\n\n    use_frameworks!\n    pod \"PromiseKit/Foundation\"\n\n Or `NSNotificationCenter` is one of the categories imported by the umbrella pod:\n\n    use_frameworks!\n    pod \"PromiseKit\"\n\n And then in your sources:\n\n    import PromiseKit\n*/\nextension NotificationCenter {\n    /// Observe the named notification once\n    public func observe(once name: Notification.Name, object: Any? = nil) -> Guarantee<Notification> {\n        let (promise, fulfill) = Guarantee<Notification>.pending()\n      #if os(Linux) && ((swift(>=4.0) && !swift(>=4.0.1)) || (swift(>=3.0) && !swift(>=3.2.1)))\n        let id = addObserver(forName: name, object: object, queue: nil, usingBlock: fulfill)\n      #else\n        let id = addObserver(forName: name, object: object, queue: nil, using: fulfill)\n      #endif\n        promise.done { _ in self.removeObserver(id) }\n        return promise\n    }\n}\n"
  },
  {
    "path": "Dependencies/PromiseKit∕Foundation-3.3.1/NSObject+Promise.swift",
    "content": "import Foundation\n#if !PMKCocoaPods\nimport PromiseKit\n#endif\n\n/**\n To import the `NSObject` category:\n\n    use_frameworks!\n    pod \"PromiseKit/Foundation\"\n\n Or `NSObject` is one of the categories imported by the umbrella pod:\n\n    use_frameworks!\n    pod \"PromiseKit\"\n \n And then in your sources:\n\n    import PromiseKit\n*/\nextension NSObject {\n    /**\n      - Returns: A promise that resolves when the provided keyPath changes.\n      - Warning: *Important* The promise must not outlive the object under observation.\n      - SeeAlso: Apple’s KVO documentation.\n    */\n    public func observe(_: PMKNamespacer, keyPath: String) -> Guarantee<Any?> {\n        return Guarantee { KVOProxy(observee: self, keyPath: keyPath, resolve: $0) }\n    }\n}\n\nprivate class KVOProxy: NSObject {\n    var retainCycle: KVOProxy?\n    let fulfill: (Any?) -> Void\n\n    @discardableResult\n    init(observee: NSObject, keyPath: String, resolve: @escaping (Any?) -> Void) {\n        fulfill = resolve\n        super.init()\n        observee.addObserver(self, forKeyPath: keyPath, options: NSKeyValueObservingOptions.new, context: pointer)\n        retainCycle = self\n    }\n\n    fileprivate override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {\n        if let change = change, context == pointer {\n            defer { retainCycle = nil }\n            fulfill(change[NSKeyValueChangeKey.newKey])\n            if let object = object as? NSObject, let keyPath = keyPath {\n                object.removeObserver(self, forKeyPath: keyPath)\n            }\n        }\n    }\n\n    private lazy var pointer: UnsafeMutableRawPointer = {\n        return Unmanaged<KVOProxy>.passUnretained(self).toOpaque()\n    }()\n}\n"
  },
  {
    "path": "Dependencies/PromiseKit∕Foundation-3.3.1/NSURLSession+Promise.swift",
    "content": "import Foundation\n#if !PMKCocoaPods\nimport PromiseKit\n#endif\n\n/**\n To import the `NSURLSession` category:\n\n    use_frameworks!\n    pod \"PromiseKit/Foundation\"\n\n Or `NSURLSession` is one of the categories imported by the umbrella pod:\n\n    use_frameworks!\n    pod \"PromiseKit\"\n\n And then in your sources:\n\n    import PromiseKit\n*/\nextension URLSession {\n    /**\n     Example usage:\n\n         firstly {\n             URLSession.shared.dataTask(.promise, with: rq)\n         }.compactMap { data, _ in\n             try JSONSerialization.jsonObject(with: data) as? [String: Any]\n         }.then { json in\n             //…\n         }\n\n     We recommend the use of [OMGHTTPURLRQ] which allows you to construct correct REST requests:\n\n         firstly {\n             let rq = OMGHTTPURLRQ.POST(url, json: parameters)\n             URLSession.shared.dataTask(.promise, with: rq)\n         }.then { data, urlResponse in\n             //…\n         }\n\n     We provide a convenience initializer for `String` specifically for this promise:\n     \n         firstly {\n             URLSession.shared.dataTask(.promise, with: rq)\n         }.compactMap(String.init).then { string in\n             // decoded per the string encoding specified by the server\n         }.then { string in\n             print(\"response: string\")\n         }\n     \n     Other common types can be easily decoded using compactMap also:\n     \n         firstly {\n             URLSession.shared.dataTask(.promise, with: rq)\n         }.compactMap {\n             UIImage(data: $0)\n         }.then {\n             self.imageView.image = $0\n         }\n\n     Though if you do decode the image this way, we recommend inflating it on a background thread\n     first as this will improve main thread performance when rendering the image:\n     \n         firstly {\n             URLSession.shared.dataTask(.promise, with: rq)\n         }.compactMap(on: QoS.userInitiated) { data, _ in\n             guard let img = UIImage(data: data) else { return nil }\n             _ = cgImage?.dataProvider?.data\n             return img\n         }.then {\n             self.imageView.image = $0\n         }\n\n     - Parameter convertible: A URL or URLRequest.\n     - Returns: A promise that represents the URL request.\n     - SeeAlso: [OMGHTTPURLRQ]\n     - Remark: We deliberately don’t provide a `URLRequestConvertible` for `String` because in our experience, you should be explicit with this error path to make good apps.\n     \n     [OMGHTTPURLRQ]: https://github.com/mxcl/OMGHTTPURLRQ\n     */\n    public func dataTask(_: PMKNamespacer, with convertible: URLRequestConvertible) -> Promise<(data: Data, response: URLResponse)> {\n        return Promise { dataTask(with: convertible.pmkRequest, completionHandler: adapter($0)).resume() }\n    }\n\n    public func uploadTask(_: PMKNamespacer, with convertible: URLRequestConvertible, from data: Data) -> Promise<(data: Data, response: URLResponse)> {\n        return Promise { uploadTask(with: convertible.pmkRequest, from: data, completionHandler: adapter($0)).resume() }\n    }\n\n    public func uploadTask(_: PMKNamespacer, with convertible: URLRequestConvertible, fromFile file: URL) -> Promise<(data: Data, response: URLResponse)> {\n        return Promise { uploadTask(with: convertible.pmkRequest, fromFile: file, completionHandler: adapter($0)).resume() }\n    }\n\n    /// - Remark: we force a `to` parameter because Apple deletes the downloaded file immediately after the underyling completion handler returns.\n    /// - Note: we do not create the destination directory for you, because we move the file with FileManager.moveItem which changes it behavior depending on the directory status of the URL you provide. So create your own directory first!\n    public func downloadTask(_: PMKNamespacer, with convertible: URLRequestConvertible, to saveLocation: URL) -> Promise<(saveLocation: URL, response: URLResponse)> {\n        return Promise { seal in\n            downloadTask(with: convertible.pmkRequest, completionHandler: { tmp, rsp, err in\n                if let error = err {\n                    seal.reject(error)\n                } else if let rsp = rsp, let tmp = tmp {\n                    do {\n                        try FileManager.default.moveItem(at: tmp, to: saveLocation)\n                        seal.fulfill((saveLocation, rsp))\n                    } catch {\n                        seal.reject(error)\n                    }\n                } else {\n                    seal.reject(PMKError.invalidCallingConvention)\n                }\n            }).resume()\n        }\n    }\n}\n\n\npublic protocol URLRequestConvertible {\n    var pmkRequest: URLRequest { get }\n}\nextension URLRequest: URLRequestConvertible {\n    public var pmkRequest: URLRequest { return self }\n}\nextension URL: URLRequestConvertible {\n    public var pmkRequest: URLRequest { return URLRequest(url: self) }\n}\n\n\n#if !os(Linux)\npublic extension String {\n    /**\n      - Remark: useful when converting a `URLSession` response into a `String`\n\n            firstly {\n                URLSession.shared.dataTask(.promise, with: rq)\n            }.map(String.init).done {\n                print($0)\n            }\n     */\n    init?(data: Data, urlResponse: URLResponse) {\n        guard let str = String(bytes: data, encoding: urlResponse.stringEncoding ?? .utf8) else {\n            return nil\n        }\n        self.init(str)\n    }\n}\n\nprivate extension URLResponse {\n    var stringEncoding: String.Encoding? {\n        guard let encodingName = textEncodingName else { return nil }\n        let encoding = CFStringConvertIANACharSetNameToEncoding(encodingName as CFString)\n        guard encoding != kCFStringEncodingInvalidId else { return nil }\n        return String.Encoding(rawValue: CFStringConvertEncodingToNSStringEncoding(encoding))\n    }\n}\n#endif\n\nprivate func adapter<T, U>(_ seal: Resolver<(data: T, response: U)>) -> (T?, U?, Error?) -> Void {\n    return { t, u, e in\n        if let t = t, let u = u {\n            seal.fulfill((t, u))\n        } else if let e = e {\n            seal.reject(e)\n        } else {\n            seal.reject(PMKError.invalidCallingConvention)\n        }\n    }\n}\n\n\n#if swift(>=3.1)\npublic enum PMKHTTPError: Error, LocalizedError, CustomStringConvertible {\n    case badStatusCode(Int, Data, HTTPURLResponse)\n\n    public var errorDescription: String? {\n        func url(_ rsp: URLResponse) -> String {\n            return rsp.url?.absoluteString ?? \"nil\"\n        }\n        switch self {\n        case .badStatusCode(401, _, let response):\n            return \"Unauthorized (\\(url(response))\"\n        case .badStatusCode(let code, _, let response):\n            return \"Invalid HTTP response (\\(code)) for \\(url(response)).\"\n        }\n    }\n\n#if swift(>=4.0)\n    public func decodeResponse<T: Decodable>(_ t: T.Type, decoder: JSONDecoder = JSONDecoder()) -> T? {\n        switch self {\n        case .badStatusCode(_, let data, _):\n            return try? decoder.decode(t, from: data)\n        }\n    }\n#endif\n\n    //TODO rename responseJSON\n    public var jsonDictionary: Any? {\n        switch self {\n        case .badStatusCode(_, let data, _):\n            return try? JSONSerialization.jsonObject(with: data)\n        }\n    }\n\n    var responseBodyString: String? {\n        switch self {\n        case .badStatusCode(_, let data, _):\n            return String(data: data, encoding: .utf8)\n        }\n    }\n\n    public var failureReason: String? {\n        return responseBodyString\n    }\n\n    public var description: String {\n        switch self {\n        case .badStatusCode(let code, let data, let response):\n            var dict: [String: Any] = [\n                \"Status Code\": code,\n                \"Body\": String(data: data, encoding: .utf8) ?? \"\\(data.count) bytes\"\n            ]\n            dict[\"URL\"] = response.url\n            dict[\"Headers\"] = response.allHeaderFields\n            return \"<NSHTTPResponse> \\(NSDictionary(dictionary: dict))\" // as NSDictionary makes the output look like NSHTTPURLResponse looks\n        }\n    }\n}\n\npublic extension Promise where T == (data: Data, response: URLResponse) {\n    func validate() -> Promise<T> {\n        return map {\n            guard let response = $0.response as? HTTPURLResponse else { return $0 }\n            switch response.statusCode {\n            case 200..<300:\n                return $0\n            case let code:\n                throw PMKHTTPError.badStatusCode(code, $0.data, response)\n            }\n        }\n    }\n}\n#endif\n"
  },
  {
    "path": "Dependencies/PromiseKit∕Foundation-3.3.1/Process+Promise.swift",
    "content": "import Foundation\n#if !PMKCocoaPods\nimport PromiseKit\n#endif\n\n#if os(macOS)\n\n/**\n To import the `Process` category:\n\n    use_frameworks!\n    pod \"PromiseKit/Foundation\"\n\n Or `Process` is one of the categories imported by the umbrella pod:\n\n    use_frameworks!\n    pod \"PromiseKit\"\n \n And then in your sources:\n\n    import PromiseKit\n */\nextension Process {\n    /**\n     Launches the receiver and resolves when it exits.\n     \n         let proc = Process()\n         proc.launchPath = \"/bin/ls\"\n         proc.arguments = [\"/bin\"]\n         proc.launch(.promise).compactMap { std in\n             String(data: std.out.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8)\n         }.then { stdout in\n             print(str)\n         }\n     */\n    public func launch(_: PMKNamespacer) -> Promise<(out: Pipe, err: Pipe)> {\n        let (stdout, stderr) = (Pipe(), Pipe())\n\n        do {\n            standardOutput = stdout\n            standardError = stderr\n\n            #if swift(>=4.0)\n                if #available(OSX 10.13, *) {\n                    try run()\n                } else if let path = launchPath, FileManager.default.isExecutableFile(atPath: path) {\n                    launch()\n                } else {\n                    throw PMKError.notExecutable(launchPath)\n                }\n            #else\n                guard let path = launchPath, FileManager.default.isExecutableFile(atPath: path) else {\n                    throw PMKError.notExecutable(launchPath)\n                }\n                launch()\n            #endif\n        } catch {\n            return Promise(error: error)\n        }\n\n\n        var q: DispatchQueue {\n            if #available(macOS 10.10, iOS 8.0, tvOS 9.0, watchOS 2.0, *) {\n                return DispatchQueue.global(qos: .default)\n            } else {\n                return DispatchQueue.global(priority: .default)\n            }\n        }\n\n        return Promise { seal in\n            q.async {\n                self.waitUntilExit()\n\n                guard self.terminationReason == .exit, self.terminationStatus == 0 else {\n                    let stdoutData = try? self.readDataFromPipe(stdout)\n                    let stderrData = try? self.readDataFromPipe(stderr)\n\n                    let stdoutString = stdoutData.flatMap { (data: Data) -> String? in String(data: data, encoding: .utf8) }\n                    let stderrString = stderrData.flatMap { (data: Data) -> String? in String(data: data, encoding: .utf8) }\n\n                    return seal.reject(PMKError.execution(process: self, standardOutput: stdoutString, standardError: stderrString))\n                }\n                seal.fulfill((stdout, stderr))\n            }\n        }\n    }\n\n    private func readDataFromPipe(_ pipe: Pipe) throws -> Data {\n        let handle = pipe.fileHandleForReading\n        defer { handle.closeFile() }\n\n        // Someday, NSFileHandle will probably be updated with throwing equivalents to its read and write methods,\n        // as NSTask has, to avoid raising exceptions and crashing the app.\n        // Unfortunately that day has not yet come, so use the underlying BSD calls for now.\n\n        let fd = handle.fileDescriptor\n\n        let bufsize = 1024 * 8\n        let buf = UnsafeMutablePointer<UInt8>.allocate(capacity: bufsize)\n\n        #if swift(>=4.1)\n            defer { buf.deallocate() }\n        #else\n            defer { buf.deallocate(capacity: bufsize) }\n        #endif\n\n        var data = Data()\n\n        while true {\n            let bytesRead = read(fd, buf, bufsize)\n\n            if bytesRead == 0 {\n                break\n            }\n\n            if bytesRead < 0 {\n                throw POSIXError.Code(rawValue: errno).map { POSIXError($0) } ?? CocoaError(.fileReadUnknown)\n            }\n\n            data.append(buf, count: bytesRead)\n        }\n\n        return data\n    }\n\n    /**\n     The error generated by PromiseKit’s `Process` extension\n     */\n    public enum PMKError {\n        /// NOT AVAILABLE ON 10.13 and above because Apple provide this error handling themselves\n        case notExecutable(String?)\n        case execution(process: Process, standardOutput: String?, standardError: String?)\n    }\n}\n\n\nextension Process.PMKError: LocalizedError {\n    public var errorDescription: String? {\n        switch self {\n        case .notExecutable(let path?):\n            return \"File not executable: \\(path)\"\n        case .notExecutable(nil):\n            return \"No launch path specified\"\n        case .execution(process: let task, standardOutput: _, standardError: _):\n            return \"Failed executing: `\\(task)` (\\(task.terminationStatus)).\"\n        }\n    }\n}\n\npublic extension Promise where T == (out: Pipe, err: Pipe) {\n    func print() -> Promise<T> {\n        return tap { result in\n            switch result {\n            case .fulfilled(let raw):\n                let stdout = String(data: raw.out.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8)\n                let stderr = String(data: raw.err.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8)\n                Swift.print(\"stdout: `\\(stdout ?? \"\")`\")\n                Swift.print(\"stderr: `\\(stderr ?? \"\")`\")\n            case .rejected(let err):\n                Swift.print(err)\n            }\n        }\n    }\n}\n\nextension Process {\n    /// Provided because Foundation’s is USELESS\n    open override var description: String {\n        let launchPath = self.launchPath ?? \"$0\"\n        var args = [launchPath]\n        arguments.flatMap{ args += $0 }\n        return args.map { arg in\n            let contains: Bool\n          #if swift(>=3.2)\n            contains = arg.contains(\" \")\n          #else\n            contains = arg.characters.contains(\" \")\n          #endif\n            if contains {\n                return \"\\\"\\(arg)\\\"\"\n            } else if arg == \"\" {\n                return \"\\\"\\\"\"\n            } else {\n                return arg\n            }\n        }.joined(separator: \" \")\n    }\n}\n\n#endif\n"
  },
  {
    "path": "Dependencies/PromiseKit∕Foundation-3.3.1/afterlife.swift",
    "content": "import Foundation\n#if !PMKCocoaPods\nimport PromiseKit\n#endif\n\n/**\n - Returns: A promise that resolves when the provided object deallocates\n - Important: The promise is not guarenteed to resolve immediately when the provided object is deallocated. So you cannot write code that depends on exact timing.\n */\npublic func after(life object: NSObject) -> Guarantee<Void> {\n    var reaper = objc_getAssociatedObject(object, &handle) as? GrimReaper\n    if reaper == nil {\n        reaper = GrimReaper()\n        objc_setAssociatedObject(object, &handle, reaper, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)\n    }\n    return reaper!.promise\n}\n\nprivate var handle: UInt8 = 0\n\nprivate class GrimReaper: NSObject {\n    deinit {\n        fulfill(())\n    }\n    let (promise, fulfill) = Guarantee<Void>.pending()\n}\n"
  },
  {
    "path": "Dependencies/Weebly∕OrderedSet-3.1.0.swift",
    "content": "//  Copyright (c) 2014 James Richard. \n//  Distributed under the MIT License (http://opensource.org/licenses/MIT).\n\n/// An ordered, unique collection of objects.\npublic class OrderedSet<T: Hashable> {\n    fileprivate var contents = [T: Index]() // Needs to have a value of Index instead of Void for fast removals\n    fileprivate var sequencedContents = [UnsafeMutablePointer<T>]()\n    \n    /**\n     Inititalizes an empty ordered set.\n     - returns:     An empty ordered set.\n     */\n    public init() { }\n    \n    deinit {\n        removeAllObjects()\n    }\n    \n    /**\n     Initializes a new ordered set with the order and contents\n     of sequence.\n     If an object appears more than once in the sequence it will only appear\n     once in the ordered set, at the position of its first occurance.\n     - parameter    sequence:   The sequence to initialize the ordered set with.\n     - returns:                 An initialized ordered set with the contents of sequence.\n     */\n    public init<S: Sequence>(sequence: S) where S.Iterator.Element == T {\n        for object in sequence where contents[object] == nil {\n            contents[object] = contents.count\n            \n            let pointer = UnsafeMutablePointer<T>.allocate(capacity: 1)\n            pointer.initialize(to: object)\n            sequencedContents.append(pointer)\n        }\n    }\n    \n    public required init(arrayLiteral elements: T...) {\n        for object in elements where contents[object] == nil {\n            contents[object] = contents.count\n            \n            let pointer = UnsafeMutablePointer<T>.allocate(capacity: 1)\n            pointer.initialize(to: object)\n            sequencedContents.append(pointer)\n        }\n    }\n    \n    /**\n     Locate the index of an object in the ordered set.\n     It is preferable to use this method over the global find() for performance reasons.\n     - parameter    object: The object to find the index for.\n     - returns:             The index of the object, or nil if the object is not in the ordered set.\n     */\n    public func index(of object: T) -> Index? {\n        if let index = contents[object] {\n            return index\n        }\n        \n        return nil\n    }\n    \n    /**\n     Appends an object to the end of the ordered set.\n     - parameter    object: The object to be appended.\n     */\n    public func append(_ object: T) {\n        \n        if let lastIndex = index(of: object) {\n            remove(object)\n            insert(object, at: lastIndex)\n        } else {\n            contents[object] = contents.count\n            let pointer = UnsafeMutablePointer<T>.allocate(capacity: 1)\n            pointer.initialize(to: object)\n            sequencedContents.append(pointer)\n        }\n    }\n    \n    /**\n     Appends a sequence of objects to the end of the ordered set.\n     - parameter    sequence:   The sequence of objects to be appended.\n     */\n    public func append<S: Sequence>(contentsOf sequence: S) where S.Iterator.Element == T {\n        var gen = sequence.makeIterator()\n        while let object: T = gen.next() {\n            append(object)\n        }\n    }\n    \n    /**\n     Removes an object from the ordered set.\n     If the object exists in the ordered set, it will be removed.\n     If it is not the last object in the ordered set, subsequent\n     objects will be shifted down one position.\n     - parameter    object: The object to be removed.\n     - returns: The former index position of the object.\n     */\n    @discardableResult\n    public func remove(_ object: T) -> Index? {\n        if let index = contents[object] {\n            contents[object] = nil\n            sequencedContents[index].deinitialize(count: 1)\n            sequencedContents[index].deallocate()\n            sequencedContents.remove(at: index)\n            \n            for (object, i) in contents {\n                if i < index {\n                    continue\n                }\n                \n                contents[object] = i - 1\n            }\n            \n            return index\n        }\n        return nil\n    }\n    \n    /**\n     Removes the given objects from the ordered set.\n     - parameter    objects:    The objects to be removed.\n     - returns: A collection of the former index positions of the objects. An index position is not provided for objects that were not found.\n     */\n    @discardableResult\n    public func remove<S: Sequence>(_ objects: S) -> [Index]? where S.Iterator.Element == T {\n        \n        var indexes = [Index]()\n        objects.forEach { object in\n            if let index = index(of: object) {\n                indexes.append(index)\n            }\n        }\n        \n        var gen = objects.makeIterator()\n        while let object: T = gen.next() {\n            remove(object)\n        }\n        return indexes\n    }\n    \n    /**\n     Removes an object at a given index.\n     This method will cause a fatal error if you attempt to move an object to an index that is out of bounds.\n     - parameter    index:  The index of the object to be removed.\n     */\n    public func removeObject(at index: Index) {\n        if index < 0 || index >= count {\n            fatalError(\"Attempting to remove an object at an index that does not exist\")\n        }\n        \n        remove(sequencedContents[index].pointee)\n    }\n    \n    /**\n     Removes all objects in the ordered set.\n     */\n    public func removeAllObjects() {\n        contents.removeAll()\n        \n        for sequencedContent in sequencedContents {\n            sequencedContent.deinitialize(count: 1)\n            sequencedContent.deallocate()\n        }\n        \n        sequencedContents.removeAll()\n    }\n    \n    /**\n     Swaps two objects contained within the ordered set.\n     Both objects must exist within the set, or the swap will not occur.\n     - parameter    first:  The first object to be swapped.\n     - parameter    second: The second object to be swapped.\n     */\n    public func swapObject(_ first: T, with second: T) {\n        if let firstPosition = contents[first] {\n            if let secondPosition = contents[second] {\n                contents[first] = secondPosition\n                contents[second] = firstPosition\n                \n                sequencedContents[firstPosition].pointee = second\n                sequencedContents[secondPosition].pointee = first\n            }\n        }\n    }\n    \n    /**\n     Tests if the ordered set contains any objects within a sequence.\n     - parameter    other:  The sequence to look for the intersection in.\n     - returns:             Returns true if the sequence and set contain any equal objects, otherwise false.\n     */\n    public func intersects<S: Sequence>(_ other: S) -> Bool where S.Iterator.Element == T {\n        var gen = other.makeIterator()\n        while let object: T = gen.next() {\n            if contains(object) {\n                return true\n            }\n        }\n        \n        return false\n    }\n    \n    /**\n     Tests if a the ordered set is a subset of another sequence.\n     - parameter    sequence:   The sequence to check.\n     - returns:                 true if the sequence contains all objects contained in the receiver, otherwise false.\n     */\n    public func isSubset<S: Sequence>(of sequence: S) -> Bool where S.Iterator.Element == T {\n        for (object, _) in contents {\n            if !sequence.contains(object) {\n                return false\n            }\n        }\n        \n        return true\n    }\n    \n    /**\n     Moves an object to a different index, shifting all objects in between the movement.\n     This method is a no-op if the object doesn't exist in the set or the index is the\n     same that the object is currently at.\n     This method will cause a fatal error if you attempt to move an object to an index that is out of bounds.\n     - parameter    object: The object to be moved\n     - parameter    index:  The index that the object should be moved to.\n     */\n    public func moveObject(_ object: T, toIndex index: Index) {\n        if index < 0 || index >= count {\n            fatalError(\"Attempting to move an object at an index that does not exist\")\n        }\n        \n        if let position = contents[object] {\n            // Return if the client attempted to move to the current index\n            if position == index {\n                return\n            }\n            \n            let adjustment = position > index ? -1 : 1\n            \n            var currentIndex = position\n            while currentIndex != index {\n                let nextIndex = currentIndex + adjustment\n                \n                let firstObject = sequencedContents[currentIndex].pointee\n                let secondObject = sequencedContents[nextIndex].pointee\n                \n                sequencedContents[currentIndex].pointee = secondObject\n                sequencedContents[nextIndex].pointee = firstObject\n                \n                contents[firstObject] = nextIndex\n                contents[secondObject] = currentIndex\n                \n                currentIndex += adjustment\n            }\n        }\n    }\n    \n    /**\n     Moves an object from one index to a different index, shifting all objects in between the movement.\n     This method is a no-op if the index is the same that the object is currently at.\n     This method will cause a fatal error if you attempt to move an object fro man index that is out of bounds\n     or to an index that is out of bounds.\n     - parameter     index:      The index of the object to be moved.\n     - parameter     toIndex:    The index that the object should be moved to.\n     */\n    public func moveObject(at index: Index, to toIndex: Index) {\n        if (index < 0 || index >= count) || (toIndex < 0 || toIndex >= count) {\n            fatalError(\"Attempting to move an object at or to an index that does not exist\")\n        }\n        \n        moveObject(self[index], toIndex: toIndex)\n    }\n    \n    /**\n     Inserts an object at a given index, shifting all objects above it up one.\n     This method will cause a fatal error if you attempt to insert the object out of bounds.\n     If the object already exists in the OrderedSet, this operation is a no-op.\n     - parameter    object:     The object to be inserted.\n     - parameter    index:      The index to be inserted at.\n     */\n    public func insert(_ object: T, at index: Index) {\n        if index > count || index < 0 {\n            fatalError(\"Attempting to insert an object at an index that does not exist\")\n        }\n        \n        if contents[object] != nil {\n            return\n        }\n        \n        // Append our object, then swap them until its at the end.\n        append(object)\n        \n        for i in (index..<count-1).reversed() {\n            swapObject(self[i], with: self[i+1])\n        }\n    }\n    \n    /**\n     Inserts objects at a given index, shifting all objects above it up one.\n     This method will cause a fatal error if you attempt to insert the objects out of bounds.\n     If an object in objects already exists in the OrderedSet it will not be added. Objects that occur twice\n     in the sequence will only be added once.\n     - parameter    objects:    The objects to be inserted.\n     - parameter    index:      The index to be inserted at.\n     */\n    public func insert<S: Sequence>(_ objects: S, at index: Index) where S.Iterator.Element == T {\n        if index > count || index < 0 {\n            fatalError(\"Attempting to insert an object at an index that does not exist\")\n        }\n        \n        var addedObjectCount = 0\n        \n        for object in objects where contents[object] == nil {\n            let seqIdx = index + addedObjectCount\n            let element = UnsafeMutablePointer<T>.allocate(capacity: 1)\n            element.initialize(to: object)\n            sequencedContents.insert(element, at: seqIdx)\n            contents[object] = seqIdx\n            addedObjectCount += 1\n        }\n        \n        // Now we'll remove duplicates and update the shifted objects position in the contents\n        // dictionary.\n        for i in index + addedObjectCount..<count {\n            contents[sequencedContents[i].pointee] = i\n        }\n    }\n    \n    /**\n     Create a copy of the given ordered set with the same content. Important: the new array has the\n     same references to the previous. This is NOT a deep copy or a clone!\n     */\n    public func copy() -> OrderedSet<T> {\n        return OrderedSet<T>(sequence: self)\n    }\n    \n    /// Returns the last object in the set, or `nil` if the set is empty.\n    public var last: T? {\n        return sequencedContents.last?.pointee\n    }\n}\n\nextension OrderedSet: ExpressibleByArrayLiteral { }\n\nextension OrderedSet where T: Comparable {}\n\nextension OrderedSet {\n    \n    public var count: Int {\n        return contents.count\n    }\n    \n    public var isEmpty: Bool {\n        return count == 0\n    }\n    \n    public var first: T? {\n        guard count > 0 else { return nil }\n        return sequencedContents[0].pointee\n    }\n    \n    public func index(after index: Int) -> Int {\n        return sequencedContents.index(after: index)\n    }\n    \n    public typealias Index = Int\n    \n    public var startIndex: Int {\n        return 0\n    }\n    \n    public var endIndex: Int {\n        return contents.count\n    }\n    \n    public subscript(index: Index) -> T {\n        get {\n            return sequencedContents[index].pointee\n        }\n        \n        set {\n            let previousCount = contents.count\n            contents[sequencedContents[index].pointee] = nil\n            contents[newValue] = index\n            \n            // If the count is reduced we used an existing value, and need to sync up sequencedContents\n            if contents.count == previousCount {\n                sequencedContents[index].pointee = newValue\n            } else {\n                sequencedContents[index].deinitialize(count: 1)\n                sequencedContents[index].deallocate()\n                sequencedContents.remove(at: index)\n            }\n        }\n    }\n    \n}\n\nextension  OrderedSet: Sequence {\n    public typealias Iterator = OrderedSetGenerator<T>\n    \n    public func makeIterator() -> Iterator {\n        return OrderedSetGenerator(set: self)\n    }\n}\n\npublic struct OrderedSetGenerator<T: Hashable>: IteratorProtocol {\n    public typealias Element = T\n    private var generator: IndexingIterator<[UnsafeMutablePointer<T>]>\n    \n    public init(set: OrderedSet<T>) {\n        generator = set.sequencedContents.makeIterator()\n    }\n    \n    public mutating func next() -> Element? {\n        return generator.next()?.pointee\n    }\n}\n\nextension OrderedSetGenerator where T: Comparable {}\n\npublic func +<T, S: Sequence> (lhs: OrderedSet<T>, rhs: S) -> OrderedSet<T> where S.Element == T {\n    let joinedSet = lhs.copy()\n    joinedSet.append(contentsOf: rhs)\n    \n    return joinedSet\n}\n\npublic func +=<T, S: Sequence> (lhs: inout OrderedSet<T>, rhs: S) where S.Element == T {\n    lhs.append(contentsOf: rhs)\n}\n\npublic func -<T, S: Sequence> (lhs: OrderedSet<T>, rhs: S) -> OrderedSet<T> where S.Element == T {\n    let purgedSet = lhs.copy()\n    purgedSet.remove(rhs)\n    \n    return purgedSet\n}\n\npublic func -=<T, S: Sequence> (lhs: inout OrderedSet<T>, rhs: S) where S.Element == T {\n    lhs.remove(rhs)\n}\n\nextension OrderedSet: Equatable { }\n\npublic func ==<T> (lhs: OrderedSet<T>, rhs: OrderedSet<T>) -> Bool {\n    if lhs.count != rhs.count {\n        return false\n    }\n    \n    for object in lhs where lhs.contents[object] != rhs.contents[object] {\n        return false\n    }\n    \n    return true\n}\n\nextension OrderedSet: CustomStringConvertible {\n    public var description: String {\n        let children = map({ \"\\($0)\" }).joined(separator: \", \")\n        return \"OrderedSet (\\(count) object(s)): [\\(children)]\"\n    }\n}\n"
  },
  {
    "path": "Dependencies/kylef∕PathKit-0.9.2.swift",
    "content": "// PathKit - Effortless path operations\n\n#if os(Linux)\nimport Glibc\n\nlet system_glob = Glibc.glob\n#else\nimport Darwin\n\nlet system_glob = Darwin.glob\n#endif\n\nimport Foundation\n\n\n/// Represents a filesystem path.\npublic struct Path {\n  /// The character used by the OS to separate two path elements\n  public static let separator = \"/\"\n\n  /// The underlying string representation\n  internal var path: String\n\n  internal static var fileManager = FileManager.default\n  \n  internal var fileSystemInfo: FileSystemInfo = DefaultFileSystemInfo()\n\n  // MARK: Init\n\n  public init() {\n    self.path = \"\"\n  }\n\n  /// Create a Path from a given String\n  public init(_ path: String) {\n    self.path = path\n  }\n\n  /// Create a Path by joining multiple path components together\n  public init<S : Collection>(components: S) where S.Iterator.Element == String {\n    if components.isEmpty {\n      path = \".\"\n    } else if components.first == Path.separator && components.count > 1 {\n      let p = components.joined(separator: Path.separator)\n      path = String(p[p.index(after: p.startIndex)...])\n    } else {\n      path = components.joined(separator: Path.separator)\n    }\n  }\n}\n\n\n// MARK: StringLiteralConvertible\n\nextension Path : ExpressibleByStringLiteral {\n  public typealias ExtendedGraphemeClusterLiteralType = StringLiteralType\n  public typealias UnicodeScalarLiteralType = StringLiteralType\n\n  public init(extendedGraphemeClusterLiteral path: StringLiteralType) {\n    self.init(stringLiteral: path)\n  }\n\n  public init(unicodeScalarLiteral path: StringLiteralType) {\n    self.init(stringLiteral: path)\n  }\n\n  public init(stringLiteral value: StringLiteralType) {\n    self.path = value\n  }\n}\n\n\n// MARK: CustomStringConvertible\n\nextension Path : CustomStringConvertible {\n  public var description: String {\n    return self.path\n  }\n}\n\n\n// MARK: Conversion\n\nextension Path {\n  public var string: String {\n    return self.path\n  }\n\n  public var url: URL {\n    return URL(fileURLWithPath: path)\n  }\n}\n\n\n// MARK: Hashable\n\nextension Path : Hashable {\n  public var hashValue: Int {\n    return path.hashValue\n  }\n}\n\n\n// MARK: Path Info\n\nextension Path {\n  /// Test whether a path is absolute.\n  ///\n  /// - Returns: `true` iff the path begings with a slash\n  ///\n  public var isAbsolute: Bool {\n    return path.hasPrefix(Path.separator)\n  }\n\n  /// Test whether a path is relative.\n  ///\n  /// - Returns: `true` iff a path is relative (not absolute)\n  ///\n  public var isRelative: Bool {\n    return !isAbsolute\n  }\n\n  /// Concatenates relative paths to the current directory and derives the normalized path\n  ///\n  /// - Returns: the absolute path in the actual filesystem\n  ///\n  public func absolute() -> Path {\n    if isAbsolute {\n      return normalize()\n    }\n\n  let expandedPath = Path(NSString(string: self.path).expandingTildeInPath)\n  if expandedPath.isAbsolute {\n    return expandedPath.normalize()\n  }\n\n    return (Path.current + self).normalize()\n  }\n\n  /// Normalizes the path, this cleans up redundant \"..\" and \".\", double slashes\n  /// and resolves \"~\".\n  ///\n  /// - Returns: a new path made by removing extraneous path components from the underlying String\n  ///   representation.\n  ///\n  public func normalize() -> Path {\n    return Path(NSString(string: self.path).standardizingPath)\n  }\n\n  /// De-normalizes the path, by replacing the current user home directory with \"~\".\n  ///\n  /// - Returns: a new path made by removing extraneous path components from the underlying String\n  ///   representation.\n  ///\n  public func abbreviate() -> Path {\n    let rangeOptions: String.CompareOptions = fileSystemInfo.isFSCaseSensitiveAt(path: self) ?\n      [.anchored] : [.anchored, .caseInsensitive]\n    let home = Path.home.string\n    guard let homeRange = self.path.range(of: home, options: rangeOptions) else { return self }\n    let withoutHome = Path(self.path.replacingCharacters(in: homeRange, with: \"\"))\n    \n    if withoutHome.path.isEmpty || withoutHome.path == Path.separator {\n        return Path(\"~\")\n    } else if withoutHome.isAbsolute {\n        return Path(\"~\" + withoutHome.path)\n    } else {\n        return Path(\"~\") + withoutHome.path\n    }\n  }\n\n  /// Returns the path of the item pointed to by a symbolic link.\n  ///\n  /// - Returns: the path of directory or file to which the symbolic link refers\n  ///\n  public func symlinkDestination() throws -> Path {\n    let symlinkDestination = try Path.fileManager.destinationOfSymbolicLink(atPath: path)\n    let symlinkPath = Path(symlinkDestination)\n    if symlinkPath.isRelative {\n      return self + \"..\" + symlinkPath\n    } else {\n      return symlinkPath\n    }\n  }\n}\n\ninternal protocol FileSystemInfo {\n  func isFSCaseSensitiveAt(path: Path) -> Bool\n}\n\ninternal struct DefaultFileSystemInfo: FileSystemInfo {\n  func isFSCaseSensitiveAt(path: Path) -> Bool {\n    #if os(Linux)\n      // URL resourceValues(forKeys:) is not supported on non-darwin platforms...\n      // But we can (fairly?) safely assume for now that the Linux FS is case sensitive.\n      // TODO: refactor when/if resourceValues is available, or look into using something\n      // like stat or pathconf to determine if the mountpoint is case sensitive.\n      return true\n    #else\n      var isCaseSensitive = false\n      // Calling resourceValues will fail if the path does not exist on the filesystem, which\n      // makes sense, but means we can only guarantee the return value is correct if the\n      // path actually exists.\n      if let resourceValues = try? path.url.resourceValues(forKeys: [.volumeSupportsCaseSensitiveNamesKey]) {\n        isCaseSensitive = resourceValues.volumeSupportsCaseSensitiveNames ?? isCaseSensitive\n      }\n      return isCaseSensitive\n    #endif\n  }\n}\n\n// MARK: Path Components\n\nextension Path {\n  /// The last path component\n  ///\n  /// - Returns: the last path component\n  ///\n  public var lastComponent: String {\n    return NSString(string: path).lastPathComponent\n  }\n\n  /// The last path component without file extension\n  ///\n  /// - Note: This returns \".\" for \"..\" on Linux, and \"..\" on Apple platforms.\n  ///\n  /// - Returns: the last path component without file extension\n  ///\n  public var lastComponentWithoutExtension: String {\n    return NSString(string: lastComponent).deletingPathExtension\n  }\n\n  /// Splits the string representation on the directory separator.\n  /// Absolute paths remain the leading slash as first component.\n  ///\n  /// - Returns: all path components\n  ///\n  public var components: [String] {\n    return NSString(string: path).pathComponents\n  }\n\n  /// The file extension behind the last dot of the last component.\n  ///\n  /// - Returns: the file extension\n  ///\n  public var `extension`: String? {\n    let pathExtension = NSString(string: path).pathExtension\n    if  pathExtension.isEmpty {\n      return nil\n    }\n\n    return pathExtension\n  }\n}\n\n\n// MARK: File Info\n\nextension Path {\n  /// Test whether a file or directory exists at a specified path\n  ///\n  /// - Returns: `false` iff the path doesn't exist on disk or its existence could not be\n  ///   determined\n  ///\n  public var exists: Bool {\n    return Path.fileManager.fileExists(atPath: self.path)\n  }\n\n  /// Test whether a path is a directory.\n  ///\n  /// - Returns: `true` if the path is a directory or a symbolic link that points to a directory;\n  ///   `false` if the path is not a directory or the path doesn't exist on disk or its existence\n  ///   could not be determined\n  ///\n  public var isDirectory: Bool {\n    var directory = ObjCBool(false)\n    guard Path.fileManager.fileExists(atPath: normalize().path, isDirectory: &directory) else {\n      return false\n    }\n#if !os(Linux) || swift(>=4.1)\n    return directory.boolValue\n#else\n    return directory\n#endif\n  }\n\n  /// Test whether a path is a regular file.\n  ///\n  /// - Returns: `true` if the path is neither a directory nor a symbolic link that points to a\n  ///   directory; `false` if the path is a directory or a symbolic link that points to a\n  ///   directory or the path doesn't exist on disk or its existence\n  ///   could not be determined\n  ///\n  public var isFile: Bool {\n    var directory = ObjCBool(false)\n    guard Path.fileManager.fileExists(atPath: normalize().path, isDirectory: &directory) else {\n      return false\n    }\n#if !os(Linux) || swift(>=4.1)\n  return !directory.boolValue\n#else\n  return !directory\n#endif\n  }\n\n  /// Test whether a path is a symbolic link.\n  ///\n  /// - Returns: `true` if the path is a symbolic link; `false` if the path doesn't exist on disk\n  ///   or its existence could not be determined\n  ///\n  public var isSymlink: Bool {\n    do {\n      let _ = try Path.fileManager.destinationOfSymbolicLink(atPath: path)\n      return true\n    } catch {\n      return false\n    }\n  }\n\n  /// Test whether a path is readable\n  ///\n  /// - Returns: `true` if the current process has read privileges for the file at path;\n  ///   otherwise `false` if the process does not have read privileges or the existence of the\n  ///   file could not be determined.\n  ///\n  public var isReadable: Bool {\n    return Path.fileManager.isReadableFile(atPath: self.path)\n  }\n\n  /// Test whether a path is writeable\n  ///\n  /// - Returns: `true` if the current process has write privileges for the file at path;\n  ///   otherwise `false` if the process does not have write privileges or the existence of the\n  ///   file could not be determined.\n  ///\n  public var isWritable: Bool {\n    return Path.fileManager.isWritableFile(atPath: self.path)\n  }\n\n  /// Test whether a path is executable\n  ///\n  /// - Returns: `true` if the current process has execute privileges for the file at path;\n  ///   otherwise `false` if the process does not have execute privileges or the existence of the\n  ///   file could not be determined.\n  ///\n  public var isExecutable: Bool {\n    return Path.fileManager.isExecutableFile(atPath: self.path)\n  }\n\n  /// Test whether a path is deletable\n  ///\n  /// - Returns: `true` if the current process has delete privileges for the file at path;\n  ///   otherwise `false` if the process does not have delete privileges or the existence of the\n  ///   file could not be determined.\n  ///\n  public var isDeletable: Bool {\n    return Path.fileManager.isDeletableFile(atPath: self.path)\n  }\n}\n\n\n// MARK: File Manipulation\n\nextension Path {\n  /// Create the directory.\n  ///\n  /// - Note: This method fails if any of the intermediate parent directories does not exist.\n  ///   This method also fails if any of the intermediate path elements corresponds to a file and\n  ///   not a directory.\n  ///\n  public func mkdir() throws -> () {\n    try Path.fileManager.createDirectory(atPath: self.path, withIntermediateDirectories: false, attributes: nil)\n  }\n\n  /// Create the directory and any intermediate parent directories that do not exist.\n  ///\n  /// - Note: This method fails if any of the intermediate path elements corresponds to a file and\n  ///   not a directory.\n  ///\n  public func mkpath() throws -> () {\n    try Path.fileManager.createDirectory(atPath: self.path, withIntermediateDirectories: true, attributes: nil)\n  }\n\n  /// Delete the file or directory.\n  ///\n  /// - Note: If the path specifies a directory, the contents of that directory are recursively\n  ///   removed.\n  ///\n  public func delete() throws -> () {\n    try Path.fileManager.removeItem(atPath: self.path)\n  }\n\n  /// Move the file or directory to a new location synchronously.\n  ///\n  /// - Parameter destination: The new path. This path must include the name of the file or\n  ///   directory in its new location.\n  ///\n  public func move(_ destination: Path) throws -> () {\n    try Path.fileManager.moveItem(atPath: self.path, toPath: destination.path)\n  }\n\n  /// Copy the file or directory to a new location synchronously.\n  ///\n  /// - Parameter destination: The new path. This path must include the name of the file or\n  ///   directory in its new location.\n  ///\n  public func copy(_ destination: Path) throws -> () {\n    try Path.fileManager.copyItem(atPath: self.path, toPath: destination.path)\n  }\n\n  /// Creates a hard link at a new destination.\n  ///\n  /// - Parameter destination: The location where the link will be created.\n  ///\n  public func link(_ destination: Path) throws -> () {\n    try Path.fileManager.linkItem(atPath: self.path, toPath: destination.path)\n  }\n\n  /// Creates a symbolic link at a new destination.\n  ///\n  /// - Parameter destintation: The location where the link will be created.\n  ///\n  public func symlink(_ destination: Path) throws -> () {\n    try Path.fileManager.createSymbolicLink(atPath: self.path, withDestinationPath: destination.path)\n  }\n}\n\n\n// MARK: Current Directory\n\nextension Path {\n  /// The current working directory of the process\n  ///\n  /// - Returns: the current working directory of the process\n  ///\n  public static var current: Path {\n    get {\n      return self.init(Path.fileManager.currentDirectoryPath)\n    }\n    set {\n      _ = Path.fileManager.changeCurrentDirectoryPath(newValue.description)\n    }\n  }\n\n  /// Changes the current working directory of the process to the path during the execution of the\n  /// given block.\n  ///\n  /// - Note: The original working directory is restored when the block returns or throws.\n  /// - Parameter closure: A closure to be executed while the current directory is configured to\n  ///   the path.\n  ///\n  public func chdir(closure: () throws -> ()) rethrows {\n    let previous = Path.current\n    Path.current = self\n    defer { Path.current = previous }\n    try closure()\n    }\n}\n\n\n// MARK: Temporary\n\nextension Path {\n  /// - Returns: the path to either the user’s or application’s home directory,\n  ///   depending on the platform.\n  ///\n  public static var home: Path {\n    return Path(NSHomeDirectory())\n  }\n\n  /// - Returns: the path of the temporary directory for the current user.\n  ///\n  public static var temporary: Path {\n    return Path(NSTemporaryDirectory())\n  }\n\n  /// - Returns: the path of a temporary directory unique for the process.\n  /// - Note: Based on `NSProcessInfo.globallyUniqueString`.\n  ///\n  public static func processUniqueTemporary() throws -> Path {\n    let path = temporary + ProcessInfo.processInfo.globallyUniqueString\n    if !path.exists {\n      try path.mkdir()\n    }\n    return path\n  }\n\n  /// - Returns: the path of a temporary directory unique for each call.\n  /// - Note: Based on `NSUUID`.\n  ///\n  public static func uniqueTemporary() throws -> Path {\n    let path = try processUniqueTemporary() + UUID().uuidString\n    try path.mkdir()\n    return path\n  }\n}\n\n\n// MARK: Contents\n\nextension Path {\n  /// Reads the file.\n  ///\n  /// - Returns: the contents of the file at the specified path.\n  ///\n  public func read() throws -> Data {\n    return try Data(contentsOf: self.url, options: NSData.ReadingOptions(rawValue: 0))\n  }\n\n  /// Reads the file contents and encoded its bytes to string applying the given encoding.\n  ///\n  /// - Parameter encoding: the encoding which should be used to decode the data.\n  ///   (by default: `NSUTF8StringEncoding`)\n  ///\n  /// - Returns: the contents of the file at the specified path as string.\n  ///\n  public func read(_ encoding: String.Encoding = String.Encoding.utf8) throws -> String {\n    return try NSString(contentsOfFile: path, encoding: encoding.rawValue).substring(from: 0) as String\n  }\n\n  /// Write a file.\n  ///\n  /// - Note: Works atomically: the data is written to a backup file, and then — assuming no\n  ///   errors occur — the backup file is renamed to the name specified by path.\n  ///\n  /// - Parameter data: the contents to write to file.\n  ///\n  public func write(_ data: Data) throws {\n    try data.write(to: normalize().url, options: .atomic)\n  }\n\n  /// Reads the file.\n  ///\n  /// - Note: Works atomically: the data is written to a backup file, and then — assuming no\n  ///   errors occur — the backup file is renamed to the name specified by path.\n  ///\n  /// - Parameter string: the string to write to file.\n  ///\n  /// - Parameter encoding: the encoding which should be used to represent the string as bytes.\n  ///   (by default: `NSUTF8StringEncoding`)\n  ///\n  /// - Returns: the contents of the file at the specified path as string.\n  ///\n  public func write(_ string: String, encoding: String.Encoding = String.Encoding.utf8) throws {\n    try string.write(toFile: normalize().path, atomically: true, encoding: encoding)\n  }\n}\n\n\n// MARK: Traversing\n\nextension Path {\n  /// Get the parent directory\n  ///\n  /// - Returns: the normalized path of the parent directory\n  ///\n  public func parent() -> Path {\n    return self + \"..\"\n  }\n\n  /// Performs a shallow enumeration in a directory\n  ///\n  /// - Returns: paths to all files, directories and symbolic links contained in the directory\n  ///\n  public func children() throws -> [Path] {\n    return try Path.fileManager.contentsOfDirectory(atPath: path).map {\n      self + Path($0)\n    }\n  }\n\n  /// Performs a deep enumeration in a directory\n  ///\n  /// - Returns: paths to all files, directories and symbolic links contained in the directory or\n  ///   any subdirectory.\n  ///\n  public func recursiveChildren() throws -> [Path] {\n    return try Path.fileManager.subpathsOfDirectory(atPath: path).map {\n      self + Path($0)\n    }\n  }\n}\n\n\n// MARK: Globbing\n\nextension Path {\n  public static func glob(_ pattern: String) -> [Path] {\n    var gt = glob_t()\n    let cPattern = strdup(pattern)\n    defer {\n      globfree(&gt)\n      free(cPattern)\n    }\n\n    let flags = GLOB_TILDE | GLOB_BRACE | GLOB_MARK\n    if system_glob(cPattern, flags, nil, &gt) == 0 {\n#if os(Linux)\n      let matchc = gt.gl_pathc\n#else\n      let matchc = gt.gl_matchc\n#endif\n#if swift(>=4.1)\n      return (0..<Int(matchc)).compactMap { index in\n        if let path = String(validatingUTF8: gt.gl_pathv[index]!) {\n          return Path(path)\n        }\n\n        return nil\n      }\n#else\n      return (0..<Int(matchc)).flatMap { index in\n        if let path = String(validatingUTF8: gt.gl_pathv[index]!) {\n          return Path(path)\n        }\n\n        return nil\n      }\n#endif\n    }\n\n    // GLOB_NOMATCH\n    return []\n  }\n\n  public func glob(_ pattern: String) -> [Path] {\n    return Path.glob((self + pattern).description)\n  }\n}\n\n\n// MARK: SequenceType\n\nextension Path : Sequence {\n  public struct DirectoryEnumerationOptions : OptionSet {\n    public let rawValue: UInt\n    public init(rawValue: UInt) {\n      self.rawValue = rawValue\n    }\n\n    public static var skipsSubdirectoryDescendants = DirectoryEnumerationOptions(rawValue: FileManager.DirectoryEnumerationOptions.skipsSubdirectoryDescendants.rawValue)\n    public static var skipsPackageDescendants = DirectoryEnumerationOptions(rawValue: FileManager.DirectoryEnumerationOptions.skipsPackageDescendants.rawValue)\n    public static var skipsHiddenFiles = DirectoryEnumerationOptions(rawValue: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles.rawValue)\n  }\n\n  /// Represents a path sequence with specific enumeration options\n  public struct PathSequence : Sequence {\n    private var path: Path\n    private var options: DirectoryEnumerationOptions\n    init(path: Path, options: DirectoryEnumerationOptions) {\n      self.path = path\n      self.options = options\n    }\n\n    public func makeIterator() -> DirectoryEnumerator {\n      return DirectoryEnumerator(path: path, options: options)\n    }\n  }\n  \n  /// Enumerates the contents of a directory, returning the paths of all files and directories\n  /// contained within that directory. These paths are relative to the directory.\n  public struct DirectoryEnumerator : IteratorProtocol {\n    public typealias Element = Path\n\n    let path: Path\n    let directoryEnumerator: FileManager.DirectoryEnumerator?\n\n    init(path: Path, options mask: DirectoryEnumerationOptions = []) {\n      let options = FileManager.DirectoryEnumerationOptions(rawValue: mask.rawValue)\n      self.path = path\n      self.directoryEnumerator = Path.fileManager.enumerator(at: path.url, includingPropertiesForKeys: nil, options: options)\n    }\n\n    public func next() -> Path? {\n      let next = directoryEnumerator?.nextObject()\n      \n      if let next = next as? URL {\n        return Path(next.path)\n      }\n      return nil\n    }\n\n    /// Skip recursion into the most recently obtained subdirectory.\n    public func skipDescendants() {\n      directoryEnumerator?.skipDescendants()\n    }\n  }\n\n  /// Perform a deep enumeration of a directory.\n  ///\n  /// - Returns: a directory enumerator that can be used to perform a deep enumeration of the\n  ///   directory.\n  ///\n  public func makeIterator() -> DirectoryEnumerator {\n    return DirectoryEnumerator(path: self)\n  }\n\n  /// Perform a deep enumeration of a directory.\n  ///\n  /// - Parameter options: FileManager directory enumerator options.\n  ///\n  /// - Returns: a path sequence that can be used to perform a deep enumeration of the\n  ///   directory.\n  ///\n  public func iterateChildren(options: DirectoryEnumerationOptions = []) -> PathSequence {\n    return PathSequence(path: self, options: options)\n  }\n}\n\n\n// MARK: Equatable\n\nextension Path : Equatable {}\n\n/// Determines if two paths are identical\n///\n/// - Note: The comparison is string-based. Be aware that two different paths (foo.txt and\n///   ./foo.txt) can refer to the same file.\n///\npublic func ==(lhs: Path, rhs: Path) -> Bool {\n  return lhs.path == rhs.path\n}\n\n\n// MARK: Pattern Matching\n\n/// Implements pattern-matching for paths.\n///\n/// - Returns: `true` iff one of the following conditions is true:\n///     - the paths are equal (based on `Path`'s `Equatable` implementation)\n///     - the paths can be normalized to equal Paths.\n///\npublic func ~=(lhs: Path, rhs: Path) -> Bool {\n  return lhs == rhs\n    || lhs.normalize() == rhs.normalize()\n}\n\n\n// MARK: Comparable\n\nextension Path : Comparable {}\n\n/// Defines a strict total order over Paths based on their underlying string representation.\npublic func <(lhs: Path, rhs: Path) -> Bool {\n  return lhs.path < rhs.path\n}\n\n\n// MARK: Operators\n\n/// Appends a Path fragment to another Path to produce a new Path\npublic func +(lhs: Path, rhs: Path) -> Path {\n  return lhs.path + rhs.path\n}\n\n/// Appends a String fragment to another Path to produce a new Path\npublic func +(lhs: Path, rhs: String) -> Path {\n  return lhs.path + rhs\n}\n\n/// Appends a String fragment to another String to produce a new Path\ninternal func +(lhs: String, rhs: String) -> Path {\n  if rhs.hasPrefix(Path.separator) {\n    // Absolute paths replace relative paths\n    return Path(rhs)\n  } else {\n    var lSlice = NSString(string: lhs).pathComponents.fullSlice\n    var rSlice = NSString(string: rhs).pathComponents.fullSlice\n\n    // Get rid of trailing \"/\" at the left side\n    if lSlice.count > 1 && lSlice.last == Path.separator {\n      lSlice.removeLast()\n    }\n\n    // Advance after the first relevant \".\"\n    lSlice = lSlice.filter { $0 != \".\" }.fullSlice\n    rSlice = rSlice.filter { $0 != \".\" }.fullSlice\n\n    // Eats up trailing components of the left and leading \"..\" of the right side\n    while lSlice.last != \"..\" && !lSlice.isEmpty && rSlice.first == \"..\" {\n      if lSlice.count > 1 || lSlice.first != Path.separator {\n        // A leading \"/\" is never popped\n        lSlice.removeLast()\n      }\n      if !rSlice.isEmpty {\n        rSlice.removeFirst()\n      }\n\n      switch (lSlice.isEmpty, rSlice.isEmpty) {\n      case (true, _):\n        break\n      case (_, true):\n        break\n      default:\n        continue\n      }\n    }\n\n    return Path(components: lSlice + rSlice)\n  }\n}\n\nextension Array {\n  var fullSlice: ArraySlice<Element> {\n    return self[self.indices.suffix(from: 0)]\n  }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕AppUpdater-1.0.3.swift",
    "content": "import class AppKit.NSBackgroundActivityScheduler\nimport var AppKit.NSApp\nimport PMKFoundation\nimport Foundation\nimport PromiseKit\nimport Version\nimport Path\n\npublic class AppUpdater {\n    var active = Promise()\n#if !DEBUG\n    let activity: NSBackgroundActivityScheduler\n#endif\n    let owner: String\n    let repo: String\n\n    var slug: String {\n        return \"\\(owner)/\\(repo)\"\n    }\n\n    public init(owner: String, repo: String) {\n        self.owner = owner\n        self.repo = repo\n    #if DEBUG\n        check().cauterize()\n    #else\n        activity = NSBackgroundActivityScheduler(identifier: \"dev.mxcl.AppUpdater\")\n        activity.repeats = true\n        activity.interval = 24 * 60 * 60\n        activity.schedule { [unowned self] completion in\n            guard !self.activity.shouldDefer, self.active.isResolved else {\n                return completion(.deferred)\n            }\n            self.check().cauterize().finally {\n                completion(.finished)\n            }\n        }\n    #endif\n    }\n\n#if !DEBUG\n    deinit {\n        activity.invalidate()\n    }\n#endif\n\n    private enum Error: Swift.Error {\n        case bundleExecutableURL\n        case codeSigningIdentity\n        case invalidDownloadedBundle\n    }\n\n    public func check() -> Promise<Void> {\n        guard active.isResolved else {\n            return active\n        }\n        guard Bundle.main.executableURL != nil else {\n            return Promise(error: Error.bundleExecutableURL)\n        }\n        let currentVersion = Bundle.main.version\n\n        func validate(codeSigning b1: Bundle, _ b2: Bundle) -> Promise<Void> {\n            return firstly {\n                when(fulfilled: b1.codeSigningIdentity, b2.codeSigningIdentity)\n            }.done {\n                guard $0 == $1 else { throw Error.codeSigningIdentity }\n            }\n        }\n\n        func update(with asset: Release.Asset) throws -> Promise<Void> {\n        #if DEBUG\n            print(\"notice: AppUpdater dry-run:\", asset)\n            return Promise()\n        #else\n            let tmpdir = try FileManager.default.url(for: .itemReplacementDirectory, in: .userDomainMask, appropriateFor: Bundle.main.bundleURL, create: true)\n\n            return firstly {\n                URLSession.shared.downloadTask(.promise, with: asset.browser_download_url, to: tmpdir.appendingPathComponent(\"download\"))\n            }.then { dst, _ in\n                unzip(dst, contentType: asset.content_type)\n            }.compactMap { downloadedAppBundle in\n                Bundle(url: downloadedAppBundle)\n            }.then { downloadedAppBundle in\n                validate(codeSigning: .main, downloadedAppBundle).map{ downloadedAppBundle }\n            }.done { downloadedAppBundle in\n\n                // UNIX is cool. Delete ourselves, move new one in then restart.\n\n                let installedAppBundle = Bundle.main\n                guard let exe = downloadedAppBundle.executable, exe.exists else {\n                    throw Error.invalidDownloadedBundle\n                }\n                let finalExecutable = installedAppBundle.path/exe.relative(to: downloadedAppBundle.path)\n\n                try installedAppBundle.path.delete()\n                try downloadedAppBundle.path.move(to: installedAppBundle.path)\n                try FileManager.default.removeItem(at: tmpdir)\n\n                let proc = Process()\n                if #available(OSX 10.13, *) {\n                    proc.executableURL = finalExecutable.url\n                } else {\n                    proc.launchPath = finalExecutable.string\n                }\n                proc.launch()\n\n                // seems to work, though for sure, seems asking a lot for it to be reliable!\n                //TODO be reliable! Probably get an external applescript to ask us this one to quit then exec the new one\n                NSApp.terminate(self)\n            }.ensure {\n                _ = try? FileManager.default.removeItem(at: tmpdir)\n            }\n        #endif\n        }\n\n        let url = URL(string: \"https://api.github.com/repos/\\(slug)/releases\")!\n\n        active = firstly {\n            URLSession.shared.dataTask(.promise, with: url).validate()\n        }.map {\n            try JSONDecoder().decode([Release].self, from: $0.data)\n        }.compactMap { releases in\n            try releases.findViableUpdate(appVersion: currentVersion, repo: self.repo)\n        }.then { asset in\n            try update(with: asset)\n        }\n\n        return active\n    }\n}\n\nprivate struct Release: Decodable {\n    let tag_name: Version\n    let prerelease: Bool\n    struct Asset: Decodable {\n        let name: String\n        let browser_download_url: URL\n        let content_type: ContentType\n    }\n    let assets: [Asset]\n\n    func viableAsset(forRepo repo: String) -> Asset? {\n        return assets.first(where: { (asset) -> Bool in\n            let prefix = \"\\(repo.lowercased())-\\(tag_name)\"\n            let name = (asset.name as NSString).deletingPathExtension.lowercased()\n\n            switch (name, asset.content_type) {\n            case (\"\\(prefix).tar\", .tar):\n                return true\n            case (prefix, _):\n                return true\n            default:\n                return false\n            }\n        })\n    }\n}\n\nprivate enum ContentType: Decodable {\n    init(from decoder: Decoder) throws {\n        switch try decoder.singleValueContainer().decode(String.self) {\n        case \"application/x-bzip2\", \"application/x-xz\", \"application/x-gzip\":\n            self = .tar\n        case \"application/zip\":\n            self = .zip\n        default:\n            throw PMKError.badInput\n        }\n    }\n\n    case zip\n    case tar\n}\n\nextension Release: Comparable {\n    static func < (lhs: Release, rhs: Release) -> Bool {\n        return lhs.tag_name < rhs.tag_name\n    }\n\n    static func == (lhs: Release, rhs: Release) -> Bool {\n        return lhs.tag_name == rhs.tag_name\n    }\n}\n\nprivate extension Array where Element == Release {\n    func findViableUpdate(appVersion: Version, repo: String) throws -> Release.Asset? {\n        let properReleases = filter{ !$0.prerelease }\n        guard let latestRelease = properReleases.sorted().last else { return nil }\n        guard appVersion < latestRelease.tag_name else { throw PMKError.cancelled }\n        return latestRelease.viableAsset(forRepo: repo)\n    }\n}\n\nprivate func unzip(_ url: URL, contentType: ContentType) -> Promise<URL> {\n\n    let proc = Process()\n    if #available(OSX 10.13, *) {\n        proc.currentDirectoryURL = url.deletingLastPathComponent()\n    } else {\n        proc.currentDirectoryPath = url.deletingLastPathComponent().path\n    }\n\n    switch contentType {\n    case .tar:\n        proc.launchPath = \"/usr/bin/tar\"\n        proc.arguments = [\"xf\", url.path]\n    case .zip:\n        proc.launchPath = \"/usr/bin/unzip\"\n        proc.arguments = [url.path]\n    }\n\n    func findApp() throws -> URL? {\n        let cnts = try FileManager.default.contentsOfDirectory(at: url.deletingLastPathComponent(), includingPropertiesForKeys: [.isDirectoryKey], options: .skipsSubdirectoryDescendants)\n        for url in cnts {\n            guard url.pathExtension == \"app\" else { continue }\n            guard let foo = try url.resourceValues(forKeys: [.isDirectoryKey]).isDirectory, foo else { continue }\n            return url\n        }\n        return nil\n    }\n\n    return firstly {\n        proc.launch(.promise)\n    }.compactMap { _ in\n        try findApp()\n    }\n}\n\nprivate extension Bundle {\n    var isCodeSigned: Guarantee<Bool> {\n        let proc = Process()\n        proc.launchPath = \"/usr/bin/codesign\"\n        proc.arguments = [\"-dv\", bundlePath]\n        return proc.launch(.promise).map { _ in\n            true\n        }.recover { _ in\n            .value(false)\n        }\n    }\n\n    var codeSigningIdentity: Promise<String> {\n        let proc = Process()\n        proc.launchPath = \"/usr/bin/codesign\"\n        proc.arguments = [\"-dvvv\", bundlePath]\n\n        return firstly {\n            proc.launch(.promise)\n        }.compactMap {\n            String(data: $0.err.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8)\n        }.map {\n            $0.split(separator: \"\\n\")\n        }.filterValues {\n            $0.hasPrefix(\"Authority=\")\n        }.firstValue.map { line in\n            String(line.dropFirst(10))\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕LegibleError-1.0.1.swift",
    "content": "import Foundation\n\n#if os(Linux)\nlet theOperationCouldNotBeCompleted = \"The operation could not be completed\"\n#else\nlet theOperationCouldNotBeCompleted = \"The operation couldn’t be completed.\"\n#endif\n\nextension Error {\n    /// - Returns: A fully qualified representation of this error.\n    public var legibleDescription: String {\n        switch errorType {\n        case .swiftError(.enum?), .swiftLocalizedError(_, .enum?):\n            return \"\\(type(of: self)).\\(self)\"\n        case .swiftError(.class?), .swiftLocalizedError(_, .class?):\n            //TODO better\n            return \"\\(type(of: self))\"\n        case .swiftError, .swiftLocalizedError:\n            return String(describing: self)\n        case let .nsError(nsError, domain, code):\n            if let underlyingError = nsError.userInfo[NSUnderlyingErrorKey] as? NSError {\n                return \"\\(domain)(\\(code), \\(underlyingError.domain)(\\(underlyingError.code)))\"\n            } else {\n                return \"\\(domain)(\\(code))\"\n            }\n        }\n    }\n\n    /// - Returns: A fully qualified, user-visible representation of this error.\n    public var legibleLocalizedDescription: String {\n        switch errorType {\n        case .swiftError:\n            return \"\\(theOperationCouldNotBeCompleted) (\\(legibleDescription))\"\n        case .swiftLocalizedError(let msg, _):\n            return msg\n        case .nsError(_, \"kCLErrorDomain\", 0):\n            return \"The location could not be determined.\"\n            // ^^ Apple don’t provide a localized description for this\n        case let .nsError(nsError, domain, code):\n            if !localizedDescription.hasPrefix(theOperationCouldNotBeCompleted) {\n                return localizedDescription\n                //FIXME ^^ for non-EN\n            } else if let underlyingError = nsError.userInfo[NSUnderlyingErrorKey] as? Error {\n                return underlyingError.legibleLocalizedDescription\n            } else {\n                // usually better than the localizedDescription, but not pretty\n                return \"\\(theOperationCouldNotBeCompleted) (\\(domain).\\(code))\"\n            }\n        }\n    }\n\n    private var errorType: ErrorType {\n      #if os(Linux)\n        let isNSError = self is NSError\n      #else\n        let foo: Any = self\n        let isNSError = String(cString: object_getClassName(self)) != \"_SwiftNativeNSError\" && foo is NSObject\n        // ^^ ∵ otherwise implicit bridging implicitly casts as for other tests\n      #endif\n\n        if isNSError {\n            let nserr = self as NSError\n            return .nsError(nserr, domain: nserr.domain, code: nserr.code)\n        } else if let err = self as? LocalizedError, let msg = err.errorDescription {\n            return .swiftLocalizedError(msg, Mirror(reflecting: self).displayStyle)\n        } else {\n            return .swiftError(Mirror(reflecting: self).displayStyle)\n        }\n    }\n}\n\nprivate enum ErrorType {\n    case nsError(NSError, domain: String, code: Int)\n    case swiftLocalizedError(String, Mirror.DisplayStyle?)\n    case swiftError(Mirror.DisplayStyle?)\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕Path.swift-0.16.1/Extensions.swift",
    "content": "import Foundation\n\n/// Extensions on Foundation’s `Bundle` so you get `Path` rather than `String` or `URL`.\npublic extension Bundle {\n    /// Returns the path for requested resource in this bundle.\n    func path(forResource: String, ofType: String?) -> Path? {\n        let f: (String?, String?) -> String? = path(forResource:ofType:)\n        let str = f(forResource, ofType)\n        return str.flatMap(Path.init)\n    }\n\n    /**\n     Returns the path for the shared-frameworks directory in this bundle.\n     - Note: This is typically `ShareFrameworks`\n    */\n    var sharedFrameworks: Path {\n        return sharedFrameworksPath.flatMap(Path.init) ?? defaultSharedFrameworksPath\n    }\n\n    /**\n     Returns the path for the private-frameworks directory in this bundle.\n     - Note: This is typically `Frameworks`\n    */\n    var privateFrameworks: Path {\n        return privateFrameworksPath.flatMap(Path.init) ?? defaultSharedFrameworksPath\n    }\n\n    /// Returns the path for the resources directory in this bundle.\n    var resources: Path {\n        return resourcePath.flatMap(Path.init) ?? defaultResourcesPath\n    }\n\n    /// Returns the path for this bundle.\n    var path: Path {\n        return Path(string: bundlePath)\n    }\n    \n    /// Returns the executable for this bundle, if there is one, not all bundles have one hence `Optional`.\n    var executable: Path? {\n        return executablePath.flatMap(Path.init)\n    }\n}\n\n/// Extensions on `String` that work with `Path` rather than `String` or `URL`\npublic extension String {\n    /// Initializes this `String` with the contents of the provided path.\n    @inlinable\n    init(contentsOf path: Path) throws {\n        try self.init(contentsOfFile: path.string)\n    }\n\n    /// - Returns: `to` to allow chaining\n    @inlinable\n    @discardableResult\n    func write(to: Path, atomically: Bool = false, encoding: String.Encoding = .utf8) throws -> Path {\n        try write(toFile: to.string, atomically: atomically, encoding: encoding)\n        return to\n    }\n}\n\n/// Extensions on `Data` that work with `Path` rather than `String` or `URL`\npublic extension Data {\n    /// Initializes this `Data` with the contents of the provided path.\n    @inlinable\n    init(contentsOf path: Path) throws {\n        try self.init(contentsOf: path.url)\n    }\n\n    /// - Returns: `to` to allow chaining\n    @inlinable\n    @discardableResult\n    func write(to: Path, atomically: Bool = false) throws -> Path {\n        let opts: NSData.WritingOptions\n        if atomically {\n        #if !os(Linux)\n            opts = .atomicWrite\n        #else\n            opts = .atomic\n        #endif\n        } else {\n            opts = []\n        }\n        try write(to: to.url, options: opts)\n        return to\n    }\n}\n\n/// Extensions on `FileHandle` that work with `Path` rather than `String` or `URL`\npublic extension FileHandle {\n    /// Initializes this `FileHandle` for reading at the location of the provided path.\n    @inlinable\n    convenience init(forReadingAt path: Path) throws {\n        try self.init(forReadingFrom: path.url)\n    }\n    \n    /// Initializes this `FileHandle` for writing at the location of the provided path.\n    @inlinable\n    convenience init(forWritingAt path: Path) throws {\n        try self.init(forWritingTo: path.url)\n    }\n    \n    /// Initializes this `FileHandle` for reading and writing at the location of the provided path.\n    @inlinable\n    convenience init(forUpdatingAt path: Path) throws {\n        try self.init(forUpdating: path.url)\n    }\n}\n\ninternal extension Bundle {\n    var defaultSharedFrameworksPath: Path {\n      #if os(macOS)\n        return path.join(\"Contents/Frameworks\")\n      #elseif os(Linux)\n        return path.join(\"lib\")\n      #else\n        return path.join(\"Frameworks\")\n      #endif\n    }\n\n    var defaultResourcesPath: Path {\n      #if os(macOS)\n        return path.join(\"Contents/Resources\")\n      #elseif os(Linux)\n        return path.join(\"share\")\n      #else\n        return path\n      #endif\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕Path.swift-0.16.1/Path+Attributes.swift",
    "content": "import Foundation\n\npublic extension Path {\n    //MARK: Filesystem Attributes\n\n    /**\n     Returns the creation-time of the file.\n     - Note: Returns `nil` if there is no creation-time, this should only happen if the file doesn’t exist.\n     - Important: On Linux this is filesystem dependendent and may not exist.\n     */\n    var ctime: Date? {\n        do {\n            let attrs = try FileManager.default.attributesOfItem(atPath: string)\n            return attrs[.creationDate] as? Date\n        } catch {\n            return nil\n        }\n    }\n\n    /**\n     Returns the modification-time of the file.\n     - Note: If this returns `nil` and the file exists, something is very wrong.\n     */\n    var mtime: Date? {\n        do {\n            let attrs = try FileManager.default.attributesOfItem(atPath: string)\n            return attrs[.modificationDate] as? Date\n        } catch {\n            return nil\n        }\n    }\n\n    /**\n     Sets the file’s attributes using UNIX octal notation.\n\n         Path.home.join(\"foo\").chmod(0o555)\n     */\n    @discardableResult\n    func chmod(_ octal: Int) throws -> Path {\n        try FileManager.default.setAttributes([.posixPermissions: octal], ofItemAtPath: string)\n        return self\n    }\n    \n    /**\n     Applies the macOS filesystem “lock” attribute.\n     - Note: If file is already locked, does nothing.\n     - Note: If file doesn’t exist, throws.\n     - Important: On Linux does nothing.\n     */\n    @discardableResult\n    func lock() throws -> Path {\n    #if !os(Linux)\n        var attrs = try FileManager.default.attributesOfItem(atPath: string)\n        let b = attrs[.immutable] as? Bool ?? false\n        if !b {\n            attrs[.immutable] = true\n            try FileManager.default.setAttributes(attrs, ofItemAtPath: string)\n        }\n    #endif\n        return self\n    }\n\n    /**\n     - Note: If file isn‘t locked, does nothing.\n     - Note: If file doesn’t exist, does nothing.\n     - Important: On Linux does nothing.\n     - SeeAlso: `lock()`\n     */\n    @discardableResult\n    func unlock() throws -> Path {\n    #if !os(Linux)\n        var attrs: [FileAttributeKey: Any]\n        do {\n            attrs = try FileManager.default.attributesOfItem(atPath: string)\n        } catch CocoaError.fileReadNoSuchFile {\n            return self\n        }\n        let b = attrs[.immutable] as? Bool ?? false\n        if b {\n            attrs[.immutable] = false\n            try FileManager.default.setAttributes(attrs, ofItemAtPath: string)\n        }\n    #endif\n        return self\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕Path.swift-0.16.1/Path+Codable.swift",
    "content": "import Foundation\n\n/**\n Provided for relative-path coding. See the instructions in our\n [README](https://github.com/mxcl/Path.swift/#codable).\n*/\npublic extension CodingUserInfoKey {\n    /**\n     If set on an `Encoder`’s `userInfo` all paths are encoded relative to this path.\n\n     For example:\n\n         let encoder = JSONEncoder()\n         encoder.userInfo[.relativePath] = Path.home\n         encoder.encode([Path.home, Path.home/\"foo\"])\n\n     - Remark: See the [README](https://github.com/mxcl/Path.swift/#codable) for more information.\n    */\n    static let relativePath = CodingUserInfoKey(rawValue: \"dev.mxcl.Path.relative\")!\n}\n\n/**\n Provided for relative-path coding. See the instructions in our\n [README](https://github.com/mxcl/Path.swift/#codable).\n*/\nextension Path: Codable {    \n    /// - SeeAlso: `CodingUserInfoKey.relativePath`\n    /// :nodoc:\n    public init(from decoder: Decoder) throws {\n        let value = try decoder.singleValueContainer().decode(String.self)\n        if value.hasPrefix(\"/\") {\n            string = value\n        } else {\n            guard let root = decoder.userInfo[.relativePath] as? Path else {\n                throw DecodingError.dataCorrupted(.init(codingPath: [], debugDescription: \"Path cannot decode a relative path if `userInfo[.relativePath]` not set to a Path object.\"))\n            }\n            string = (root/value).string\n        }\n    }\n\n    /// - SeeAlso: `CodingUserInfoKey.relativePath`\n    /// :nodoc:\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.singleValueContainer()\n        if let root = encoder.userInfo[.relativePath] as? Path {\n            try container.encode(relative(to: root))\n        } else {\n            try container.encode(string)\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕Path.swift-0.16.1/Path+CommonDirectories.swift",
    "content": "import Foundation\n\nextension Path {\n    //MARK: Common Directories\n    \n    /// Returns a `Path` containing `FileManager.default.currentDirectoryPath`.\n    public static var cwd: Path {\n        return Path(string: FileManager.default.currentDirectoryPath)\n    }\n\n    /// Returns a `Path` representing the root path.\n    public static var root: Path {\n        return Path(string: \"/\")\n    }\n\n    /// Returns a `Path` representing the user’s home directory\n    public static var home: Path {\n        let string: String\n      #if os(macOS)\n        if #available(OSX 10.12, *) {\n            string = FileManager.default.homeDirectoryForCurrentUser.path\n        } else {\n            string = NSHomeDirectory()\n        }\n      #else\n        string = NSHomeDirectory()\n      #endif\n        return Path(string: string)\n    }\n\n    /// Helper to allow search path and domain mask to be passed in.\n    private static func path(for searchPath: FileManager.SearchPathDirectory) -> Path {\n    #if os(Linux)\n        // the urls(for:in:) function is not implemented on Linux\n        //TODO strictly we should first try to use the provided binary tool\n\n        let foo = { ProcessInfo.processInfo.environment[$0].flatMap(Path.init) ?? $1 }\n\n        switch searchPath {\n        case .documentDirectory:\n            return Path.home/\"Documents\"\n        case .applicationSupportDirectory:\n            return foo(\"XDG_DATA_HOME\", Path.home/\".local/share\")\n        case .cachesDirectory:\n            return foo(\"XDG_CACHE_HOME\", Path.home/\".cache\")\n        default:\n            fatalError()\n        }\n    #else    \n        guard let pathString = FileManager.default.urls(for: searchPath, in: .userDomainMask).first?.path else { return defaultUrl(for: searchPath) }\n        return Path(string: pathString)\n    #endif\n    }\n\n    /**\n     The root for user documents.\n     - Note: There is no standard location for documents on Linux, thus we return `~/Documents`.\n     - Note: You should create a subdirectory before creating any files.\n     */\n    public static var documents: Path {\n        return path(for: .documentDirectory)\n    }\n\n    /**\n     The root for cache files.\n     - Note: On Linux this is `XDG_CACHE_HOME`.\n     - Note: You should create a subdirectory before creating any files.\n     */\n    public static var caches: Path {\n        return path(for: .cachesDirectory)\n    }\n\n    /**\n     For data that supports your running application.\n     - Note: On Linux is `XDG_DATA_HOME`.\n     - Note: You should create a subdirectory before creating any files.\n     */\n    public static var applicationSupport: Path {\n        return path(for: .applicationSupportDirectory)\n    }\n}\n\n#if !os(Linux)\nfunc defaultUrl(for searchPath: FileManager.SearchPathDirectory) -> Path {\n    switch searchPath {\n    case .documentDirectory:\n        return Path.home/\"Documents\"\n    case .applicationSupportDirectory:\n        return Path.home/\"Library/Application Support\"\n    case .cachesDirectory:\n        return Path.home/\"Library/Caches\"\n    default:\n        fatalError()\n    }\n}\n#endif\n\n"
  },
  {
    "path": "Dependencies/mxcl∕Path.swift-0.16.1/Path+FileManager.swift",
    "content": "import Foundation\n#if os(Linux)\nimport Glibc\n#endif\n\npublic extension Path {\n    //MARK: File Management\n    \n    /**\n     Copies a file.\n\n         try Path.root.join(\"bar\").copy(to: Path.home/\"foo\")\n         // => \"/Users/mxcl/foo\"\n\n     - Note: `throws` if `to` is a directory.\n     - Parameter to: Destination filename.\n     - Parameter overwrite: If `true` and both `self` and `to` are files, overwrites `to`.\n     - Note: If either `self` or `to are directories, `overwrite` is ignored.\n     - Note: Throws if `overwrite` is `false` yet `to` is *already* identical to\n      `self` because even though *Path.swift’s* policy is to noop if the desired\n       end result preexists, checking for this condition is too expensive a\n       trade-off.\n     - Returns: `to` to allow chaining\n     - SeeAlso: `copy(into:overwrite:)`\n     */\n    @discardableResult\n    func copy(to: Path, overwrite: Bool = false) throws -> Path {\n        if overwrite, to.isFile, isFile {\n            try FileManager.default.removeItem(at: to.url)\n        }\n    #if os(Linux) && !swift(>=5.1) // check if fixed\n        if !overwrite, to.isFile {\n            throw CocoaError.error(.fileWriteFileExists)\n        }\n    #endif\n        try FileManager.default.copyItem(atPath: string, toPath: to.string)\n        return to\n    }\n\n    /**\n     Copies a file into a directory\n\n         try Path.root.join(\"bar\").copy(into: .home)\n         // => \"/Users/mxcl/bar\"\n\n         // Create ~/.local/bin, copy `ls` there and make the new copy executable\n         try Path.root.join(\"bin/ls\").copy(into: Path.home.join(\".local/bin\").mkdir(.p)).chmod(0o500)\n\n     If the destination does not exist, this function creates the directory\n     (including intermediary directories if necessary) first.\n\n     - Parameter into: Destination directory\n     - Parameter overwrite: If true overwrites any file that already exists at `into`.\n     - Returns: The `Path` of the newly copied file.\n     - Note: `throws` if `into` is a file.\n     - Note: Throws if `overwrite` is `false` yet `to` is *already* identical to\n      `self` because even though *Path.swift’s* policy is to noop if the desired\n       end result preexists, checking for this condition is too expensive a\n       trade-off.\n     - SeeAlso: `copy(to:overwrite:)`\n     */\n    @discardableResult\n    func copy(into: Path, overwrite: Bool = false) throws -> Path {\n        if !into.exists {\n            try into.mkdir(.p)\n        }\n        let rv = into/basename()\n        if overwrite, rv.isFile {\n            try rv.delete()\n        }\n    #if os(Linux) && !swift(>=5.1) // check if fixed\n        if !overwrite, rv.isFile {\n            throw CocoaError.error(.fileWriteFileExists)\n        }\n    #endif\n        try FileManager.default.copyItem(at: url, to: rv.url)\n        return rv\n    }\n\n    /**\n     Moves a file.\n\n         try Path.root.join(\"bar\").move(to: Path.home/\"foo\")\n         // => \"/Users/mxcl/foo\"\n\n     - Parameter to: Destination filename.\n     - Parameter overwrite: If true overwrites any file that already exists at `to`.\n     - Returns: `to` to allow chaining\n     - Note: `throws` if `to` is a directory.\n     - Note: Throws if `overwrite` is `false` yet `to` is *already* identical to\n       `self` because even though *Path.swift’s* policy is to noop if the desired\n       end result preexists, checking for this condition is too expensive a\n       trade-off.\n     - SeeAlso: `move(into:overwrite:)`\n     */\n    @discardableResult\n    func move(to: Path, overwrite: Bool = false) throws -> Path {\n        if overwrite, to.isFile {\n            try FileManager.default.removeItem(at: to.url)\n        }\n        try FileManager.default.moveItem(at: url, to: to.url)\n        return to\n    }\n\n    /**\n     Moves a file into a directory\n\n         try Path.root.join(\"bar\").move(into: .home)\n         // => \"/Users/mxcl/bar\"\n\n     If the destination does not exist, this function creates the directory\n     (including intermediary directories if necessary) first.\n\n     - Parameter into: Destination directory\n     - Parameter overwrite: If true *overwrites* any file that already exists at `into`.\n     - Note: `throws` if `into` is a file.\n     - Returns: The `Path` of destination filename.\n     - SeeAlso: `move(to:overwrite:)`\n     */\n    @discardableResult\n    func move(into: Path, overwrite: Bool = false) throws -> Path {\n        if !into.exists {\n            try into.mkdir(.p)\n        } else if !into.isDirectory {\n            throw CocoaError.error(.fileWriteFileExists)\n        }\n        let rv = into/basename()\n        if overwrite, rv.isFile {\n            try FileManager.default.removeItem(at: rv.url)\n        }\n        try FileManager.default.moveItem(at: url, to: rv.url)\n        return rv\n    }\n\n    /**\n     Deletes the path, recursively if a directory.\n     - Note: noop: if the path doesn’t exist\n     ∵ *Path.swift* doesn’t error if desired end result preexists.\n     - Note: On UNIX will this function will succeed if the parent directory is writable and the current user has permission.\n     - Note: This function will fail if the file or directory is “locked”\n     - SeeAlso: `lock()`\n    */\n    @inlinable\n    func delete() throws {\n        if exists {\n            try FileManager.default.removeItem(at: url)\n        }\n    }\n\n    /**\n     Creates an empty file at this path or if the file exists, updates its modification time.\n     - Returns: `self` to allow chaining.\n     */\n    @inlinable\n    @discardableResult\n    func touch() throws -> Path {\n        if !exists {\n            guard FileManager.default.createFile(atPath: string, contents: nil) else {\n                throw CocoaError.error(.fileWriteUnknown)\n            }\n        } else {\n        #if os(Linux)\n            let fd = open(string, O_WRONLY)\n            defer { close(fd) }\n            futimens(fd, nil)\n        #else\n            try FileManager.default.setAttributes([.modificationDate: Date()], ofItemAtPath: string)\n        #endif\n        }\n        return self\n    }\n\n    /**\n     Creates the directory at this path.\n     - Parameter options: Specify `mkdir(.p)` to create intermediary directories.\n     - Note: We do not error if the directory already exists (even without `.p`)\n       because *Path.swift* noops if the desired end result preexists.\n     - Returns: `self` to allow chaining.\n     */\n    @discardableResult\n    func mkdir(_ options: MakeDirectoryOptions? = nil) throws -> Path {\n        do {\n            let wid = options == .p\n            try FileManager.default.createDirectory(at: self.url, withIntermediateDirectories: wid, attributes: nil)\n        } catch CocoaError.Code.fileWriteFileExists {\n            //noop (fails to trigger on Linux)\n        } catch {\n        #if os(Linux)\n            let error = error as NSError\n            guard error.domain == NSCocoaErrorDomain, error.code == CocoaError.Code.fileWriteFileExists.rawValue else {\n                throw error\n            }\n        #else\n            throw error\n        #endif\n        }\n        return self\n    }\n\n    /**\n     Renames the file at path.\n\n         Path.root.foo.bar.rename(to: \"baz\")  // => /foo/baz\n\n     - Parameter to: the new basename for the file\n     - Returns: The renamed path.\n     */\n    @discardableResult\n    func rename(to newname: String) throws -> Path {\n        let newpath = parent/newname\n        try FileManager.default.moveItem(atPath: string, toPath: newpath.string)\n        return newpath\n    }\n\n    /**\n     Creates a symlink of this file at `as`.\n     - Note: If `self` does not exist, is **not** an error.\n     */\n    @discardableResult\n    func symlink(as: Path) throws -> Path {\n        try FileManager.default.createSymbolicLink(atPath: `as`.string, withDestinationPath: string)\n        return `as`\n    }\n\n    /**\n     Creates a symlink of this file with the same filename in the `into` directory.\n     - Note: If into does not exist, creates the directory with intermediate directories if necessary.\n     */\n    @discardableResult\n    func symlink(into dir: Path) throws -> Path {\n        if !dir.exists {\n            try dir.mkdir(.p)\n        } else if !dir.isDirectory {\n            throw CocoaError.error(.fileWriteFileExists)\n        }\n        let dst = dir/basename()\n        try FileManager.default.createSymbolicLink(atPath: dst.string, withDestinationPath: string)\n        return dst\n    }\n}\n\n/// Options for `Path.mkdir(_:)`\npublic enum MakeDirectoryOptions {\n    /// Creates intermediary directories; works the same as `mkdir -p`.\n    case p\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕Path.swift-0.16.1/Path+StringConvertibles.swift",
    "content": "extension Path: CustomStringConvertible {    \n    /// Returns `Path.string`\n    public var description: String {\n        return string\n    }\n}\n\nextension Path: CustomDebugStringConvertible {\n    /// Returns eg. `Path(string: \"/foo\")`\n    public var debugDescription: String {\n        return \"Path(\\(string))\"\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕Path.swift-0.16.1/Path+ls.swift",
    "content": "import Foundation\n\n/**\n A file entry from a directory listing.\n - SeeAlso: `ls()`\n*/\npublic struct Entry {\n    /// The kind of this directory entry.\n    public enum Kind {\n        /// The path is a file.\n        case file\n        /// The path is a directory.\n        case directory\n    }\n    /// The kind of this entry.\n    public let kind: Kind\n    /// The path of this entry.\n    public let path: Path\n}\n\npublic extension Path {    \n    //MARK: Directory Listings\n\n    /**\n     Same as the `ls -a` command ∴ output is ”shallow” and unsorted.\n     - Parameter includeHiddenFiles: If `true`, hidden files are included in the results. Defaults to `true`.\n     - Important: `includeHiddenFiles` does not work on Linux\n     */\n    func ls(includeHiddenFiles: Bool = true) throws -> [Entry] {\n        var opts = FileManager.DirectoryEnumerationOptions()\n    #if !os(Linux)\n        if !includeHiddenFiles {\n            opts.insert(.skipsHiddenFiles)\n        }\n    #endif\n        let paths = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys: nil, options: opts)\n        func convert(url: URL) -> Entry? {\n            guard let path = Path(url.path) else { return nil }\n            return Entry(kind: path.isDirectory ? .directory : .file, path: path)\n        }\n        return paths.compactMap(convert)\n    }\n}\n\n/// Convenience functions for the array return value of `Path.ls()`\npublic extension Array where Element == Entry {\n    /// Filters the list of entries to be a list of Paths that are directories.\n    var directories: [Path] {\n        return compactMap {\n            $0.kind == .directory ? $0.path : nil\n        }\n    }\n\n    /// Filters the list of entries to be a list of Paths that are files.\n    var files: [Path] {\n        return compactMap {\n            $0.kind == .file ? $0.path : nil\n        }\n    }\n\n    /// Filters the list of entries to be a list of Paths that are files with the specified extension.\n    func files(withExtension ext: String) -> [Path] {\n        return compactMap {\n            $0.kind == .file && $0.path.extension == ext ? $0.path : nil\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕Path.swift-0.16.1/Path->Bool.swift",
    "content": "import Foundation\n#if os(Linux)\nimport func Glibc.access\n#else\nimport Darwin\n#endif\n\npublic extension Path {\n    //MARK: Filesystem Properties\n\n    /// Returns true if the path represents an actual filesystem entry.\n    var exists: Bool {\n        return FileManager.default.fileExists(atPath: string)\n    }\n\n    /// Returns true if the path represents an actual filesystem entry that is *not* a directory.\n    var isFile: Bool {\n        var isDir: ObjCBool = true\n        return FileManager.default.fileExists(atPath: string, isDirectory: &isDir) && !isDir.boolValue\n    }\n\n    /// Returns true if the path represents an actual directory.\n    var isDirectory: Bool {\n        var isDir: ObjCBool = false\n        return FileManager.default.fileExists(atPath: string, isDirectory: &isDir) && isDir.boolValue\n    }\n\n    /// Returns true if the path represents an actual file that is also readable by the current user.\n    var isReadable: Bool {\n        return FileManager.default.isReadableFile(atPath: string)\n    }\n\n    /// Returns true if the path represents an actual file that is also writable by the current user.\n    var isWritable: Bool {\n        return FileManager.default.isWritableFile(atPath: string)\n    }\n        \n    /// Returns true if the path represents an actual file that is also deletable by the current user.\n    var isDeletable: Bool {\n    #if os(Linux) && !swift(>=5.1)\n        return exists && access(parent.string, W_OK) == 0\n    #else\n        // FileManager.isDeletableFile returns true if there is *not* a file there\n        return exists && FileManager.default.isDeletableFile(atPath: string)\n    #endif\n    }\n\n    /// Returns true if the path represents an actual file that is also executable by the current user.\n    var isExecutable: Bool {\n        if access(string, X_OK) == 0 {\n            // FileManager.isExxecutableFile returns true even if there is *not*\n            // a file there *but* if there was it could be *made* executable\n            return FileManager.default.isExecutableFile(atPath: string)\n        } else {\n            return false\n        }\n    }\n\n    /// Returns `true` if the file is a symbolic-link (symlink).\n    var isSymlink: Bool {\n        var sbuf = stat()\n        lstat(string, &sbuf)\n        return (sbuf.st_mode & S_IFMT) == S_IFLNK \n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕Path.swift-0.16.1/Path.swift",
    "content": "import Foundation\n#if !os(Linux)\nimport func Darwin.realpath\nlet _realpath = Darwin.realpath\n#else\nimport func Glibc.realpath\nlet _realpath = Glibc.realpath\n#endif\n\n/**\n A `Path` represents an absolute path on a filesystem.\n\n All functions on `Path` are chainable and short to facilitate doing sequences\n of file operations in a concise manner.\n\n `Path` supports `Codable`, and can be configured to\n [encode paths *relatively*](https://github.com/mxcl/Path.swift/#codable).\n\n Sorting a `Sequence` of paths will return the locale-aware sort order, which\n will give you the same order as Finder.\n\n Converting from a `String` is a common first step, here are the recommended\n ways to do that:\n\n     let p1 = Path.root/pathString\n     let p2 = Path.root/url.path\n     let p3 = Path.cwd/relativePathString\n     let p4 = Path(userInput) ?? Path.cwd/userInput\n\n If you are constructing paths from static-strings we provide support for\n dynamic members:\n\n     let p1 = Path.root.usr.bin.ls  // => /usr/bin/ls\n\n - Note: A `Path` does not necessarily represent an actual filesystem entry.\n */\n\n@dynamicMemberLookup\npublic struct Path: Equatable, Hashable, Comparable {\n\n    init(string: String) {\n        assert(string.first == \"/\")\n        assert(string.last != \"/\" || string == \"/\")\n        assert(string.split(separator: \"/\").contains(\"..\") == false)\n        self.string = string\n    }\n\n    /**\n     Creates a new absolute, standardized path.\n     - Note: Resolves any .. or . components.\n     - Note: Removes multiple subsequent and trailing occurences of `/`.\n     - Note: Does *not* resolve any symlinks.\n     - Note: On macOS, removes an initial component of “/private/var/automount”, “/var/automount”, or “/private” from the path, if the result still indicates an existing file or directory (checked by consulting the file system).\n     - Returns: The path or `nil` if fed a relative path or a `~foo` string where there is no user `foo`.\n     */\n    public init?<S: StringProtocol>(_ description: S) {\n        var pathComponents = description.split(separator: \"/\")\n        switch description.first {\n        case \"/\":\n        #if os(macOS)\n            func ifExists(withPrefix prefix: String, removeFirst n: Int) {\n                assert(prefix.split(separator: \"/\").count == n)\n\n                if description.hasPrefix(prefix), FileManager.default.fileExists(atPath: String(description)) {\n                    pathComponents.removeFirst(n)\n                }\n            }\n\n            ifExists(withPrefix: \"/private/var/automount\", removeFirst: 3)\n            ifExists(withPrefix: \"/var/automount\", removeFirst: 2)\n            ifExists(withPrefix: \"/private\", removeFirst: 1)\n        #endif\n            self.string = join_(prefix: \"/\", pathComponents: pathComponents)\n\n        case \"~\":\n            if description == \"~\" {\n                self = Path.home\n                return\n            }\n            let tilded: String\n            if description.hasPrefix(\"~/\") {\n                tilded = Path.home.string\n            } else {\n                let username = String(pathComponents[0].dropFirst())\n            #if os(macOS) || os(Linux)\n                if #available(OSX 10.12, *) {\n                    guard let url = FileManager.default.homeDirectory(forUser: username) else { return nil }\n                    assert(url.scheme == \"file\")\n                    tilded = url.path\n                } else {\n                    guard let dir = NSHomeDirectoryForUser(username) else { return nil }\n                    tilded = dir\n                }\n            #else\n                return nil  // there are no usernames on iOS, etc.\n            #endif\n            }\n            pathComponents.remove(at: 0)\n            self.string = join_(prefix: tilded, pathComponents: pathComponents)\n\n        default:\n            return nil\n        }\n    }\n\n    /**\n     Creates a new absolute, standardized path from the provided file-scheme URL.\n     - Note: If the URL is not a file URL, returns `nil`.\n    */\n    public init?(url: URL) {\n        guard url.scheme == \"file\" else { return nil }\n        self.init(url.path)\n        //NOTE: URL cannot be a file-reference url, unlike NSURL, so this always works\n    }\n\n    /**\n     Creates a new absolute, standardized path from the provided file-scheme URL.\n     - Note: If the URL is not a file URL, returns `nil`.\n     - Note: If the URL is a file reference URL, converts it to a POSIX path first.\n    */\n    public init?(url: NSURL) {\n        guard url.scheme == \"file\", let path = url.path else { return nil }\n        self.init(string: path)\n        // ^^ works even if the url is a file-reference url\n    }\n\n    /// :nodoc:\n    public subscript(dynamicMember addendum: String) -> Path {\n        //NOTE it’s possible for the string to be anything if we are invoked via\n        // explicit subscript thus we use our fully sanitized `join` function\n        return Path(string: join_(prefix: string, appending: addendum))\n    }\n\n//MARK: Properties\n\n    /// The underlying filesystem path\n    public let string: String\n\n    /// Returns a `URL` representing this file path.\n    public var url: URL {\n        return URL(fileURLWithPath: string)\n    }\n\n    /**\n     Returns a file-reference URL.\n     - Note: Only NSURL can be a file-reference-URL, hence we return NSURL.\n     - SeeAlso: https://developer.apple.com/documentation/foundation/nsurl/1408631-filereferenceurl\n     - Important: On Linux returns an file scheme NSURL for this path string.\n     */\n    public var fileReferenceURL: NSURL? {\n    #if !os(Linux)\n        // https://bugs.swift.org/browse/SR-2728\n        return (url as NSURL).perform(#selector(NSURL.fileReferenceURL))?.takeUnretainedValue() as? NSURL\n    #else\n        return NSURL(fileURLWithPath: string)\n    #endif\n    }\n\n    /**\n     Returns the parent directory for this path.\n\n     Path is not aware of the nature of the underlying file, but this is\n     irrlevant since the operation is the same irrespective of this fact.\n\n     - Note: always returns a valid path, `Path.root.parent` *is* `Path.root`.\n     */\n    public var parent: Path {\n        let index = string.lastIndex(of: \"/\")!\n        let substr = string[string.indices.startIndex..<index]\n        return Path(string: String(substr))\n    }\n\n    /**\n     Returns the filename extension of this path.\n     - Remark: If there is no extension returns \"\".\n     - Remark: If the filename ends with any number of \".\", returns \"\".\n     - Note: We special case eg. `foo.tar.gz`.\n     */\n    @inlinable\n    public var `extension`: String {\n        //FIXME efficiency\n        switch true {\n        case string.hasSuffix(\".tar.gz\"):\n            return \"tar.gz\"\n        case string.hasSuffix(\".tar.bz\"):\n            return \"tar.bz\"\n        case string.hasSuffix(\".tar.bz2\"):\n            return \"tar.bz2\"\n        case string.hasSuffix(\".tar.xz\"):\n            return \"tar.xz\"\n        default:\n            let slash = string.lastIndex(of: \"/\")!\n            if let dot = string.lastIndex(of: \".\"), slash < dot {\n                let foo = string.index(after: dot)\n                return String(string[foo...])\n            } else {\n                return \"\"\n            }\n        }\n    }\n\n    /**\n     Splits the string representation on the directory separator.\n     - Important: The first element is always \"/\" to be consistent with `NSString.pathComponents`.\n    */\n    @inlinable\n    public var components: [String] {\n        return [\"/\"] + string.split(separator: \"/\").map(String.init)\n    }\n\n//MARK: Pathing\n\n    /**\n     Joins a path and a string to produce a new path.\n\n         Path.root.join(\"a\")             // => /a\n         Path.root.join(\"a/b\")           // => /a/b\n         Path.root.join(\"a\").join(\"b\")   // => /a/b\n         Path.root.join(\"a\").join(\"/b\")  // => /a/b\n\n     - Note: `..` and `.` components are interpreted.\n     - Note: pathComponent *may* be multiple components.\n     - Note: symlinks are *not* resolved.\n     - Parameter pathComponent: The string to join with this path.\n     - Returns: A new joined path.\n     - SeeAlso: `Path./(_:_:)`\n     */\n    public func join<S>(_ addendum: S) -> Path where S: StringProtocol {\n        return Path(string: join_(prefix: string, appending: addendum))\n    }\n\n    /**\n     Joins a path and a string to produce a new path.\n\n         Path.root/\"a\"       // => /a\n         Path.root/\"a/b\"     // => /a/b\n         Path.root/\"a\"/\"b\"   // => /a/b\n         Path.root/\"a\"/\"/b\"  // => /a/b\n\n     - Note: `..` and `.` components are interpreted.\n     - Note: pathComponent *may* be multiple components.\n     - Note: symlinks are *not* resolved.\n     - Parameter lhs: The base path to join with `rhs`.\n     - Parameter rhs: The string to join with this `lhs`.\n     - Returns: A new joined path.\n     - SeeAlso: `join(_:)`\n     */\n    @inlinable\n    public static func /<S>(lhs: Path, rhs: S) -> Path where S: StringProtocol {\n        return lhs.join(rhs)\n    }\n\n    /**\n     Returns a string representing the relative path to `base`.\n\n     - Note: If `base` is not a logical prefix for `self` your result will be prefixed some number of `../` components.\n     - Parameter base: The base to which we calculate the relative path.\n     - ToDo: Another variant that returns `nil` if result would start with `..`\n     */\n    public func relative(to base: Path) -> String {\n        // Split the two paths into their components.\n        // FIXME: The is needs to be optimized to avoid unncessary copying.\n        let pathComps = (string as NSString).pathComponents\n        let baseComps = (base.string as NSString).pathComponents\n\n        // It's common for the base to be an ancestor, so try that first.\n        if pathComps.starts(with: baseComps) {\n            // Special case, which is a plain path without `..` components.  It\n            // might be an empty path (when self and the base are equal).\n            let relComps = pathComps.dropFirst(baseComps.count)\n            return relComps.joined(separator: \"/\")\n        } else {\n            // General case, in which we might well need `..` components to go\n            // \"up\" before we can go \"down\" the directory tree.\n            var newPathComps = ArraySlice(pathComps)\n            var newBaseComps = ArraySlice(baseComps)\n            while newPathComps.prefix(1) == newBaseComps.prefix(1) {\n                // First component matches, so drop it.\n                newPathComps = newPathComps.dropFirst()\n                newBaseComps = newBaseComps.dropFirst()\n            }\n            // Now construct a path consisting of as many `..`s as are in the\n            // `newBaseComps` followed by what remains in `newPathComps`.\n            var relComps = Array(repeating: \"..\", count: newBaseComps.count)\n            relComps.append(contentsOf: newPathComps)\n            return relComps.joined(separator: \"/\")\n        }\n    }\n\n    /**\n     The basename for the provided file, optionally dropping the file extension.\n\n         Path.root.join(\"foo.swift\").basename()  // => \"foo.swift\"\n         Path.root.join(\"foo.swift\").basename(dropExtension: true)  // => \"foo\"\n\n     - Returns: A string that is the filename’s basename.\n     - Parameter dropExtension: If `true` returns the basename without its file extension.\n     */\n    public func basename(dropExtension: Bool = false) -> String {\n        var lastPathComponent: Substring {\n            let slash = string.lastIndex(of: \"/\")!\n            let index = string.index(after: slash)\n            return string[index...]\n        }\n        var go: Substring {\n            if !dropExtension {\n                return lastPathComponent\n            } else {\n                let ext = self.extension\n                if !ext.isEmpty {\n                    return lastPathComponent.dropLast(ext.count + 1)\n                } else {\n                    return lastPathComponent\n                }\n            }\n        }\n        return String(go)\n    }\n\n    /**\n     If the path represents an actual entry that is a symlink, returns the symlink’s\n     absolute destination.\n\n     - Important: This is not exhaustive, the resulting path may still contain\n     symlink.\n     - Important: The path will only be different if the last path component is a\n     symlink, any symlinks in prior components are not resolved.\n     - Note: If file exists but isn’t a symlink, returns `self`.\n     - Note: If symlink destination does not exist, is **not** an error.\n     */\n    public func readlink() throws -> Path {\n        do {\n            let rv = try FileManager.default.destinationOfSymbolicLink(atPath: string)\n            return Path(rv) ?? parent/rv\n        } catch CocoaError.fileReadUnknown {\n            // file is not symlink, return `self`\n            assert(exists)\n            return self\n        } catch {\n        #if os(Linux)\n            // ugh: Swift on Linux\n            let nsError = error as NSError\n            if nsError.domain == NSCocoaErrorDomain, nsError.code == CocoaError.fileReadUnknown.rawValue, exists {\n                return self\n            }\n        #endif\n            throw error\n        }\n    }\n\n    /// Recursively resolves symlinks in this path.\n    public func realpath() throws -> Path {\n        guard let rv = _realpath(string, nil) else { throw CocoaError.error(.fileNoSuchFile) }\n        defer { free(rv) }\n        guard let rvv = String(validatingUTF8: rv) else { throw CocoaError.error(.fileReadUnknownStringEncoding) }\n\n        // “Removing an initial component of “/private/var/automount”, “/var/automount”,\n        // or “/private” from the path, if the result still indicates an existing file or\n        // directory (checked by consulting the file system).”\n        // ^^ we do this to not conflict with the results that other Apple APIs give\n        // which is necessary if we are to have equality checks work reliably\n        let rvvv = (rvv as NSString).standardizingPath\n\n        return Path(string: rvvv)\n    }\n\n    /// Returns the locale-aware sort order for the two paths.\n    /// :nodoc:\n    @inlinable\n    public static func <(lhs: Path, rhs: Path) -> Bool {\n        return lhs.string.compare(rhs.string, locale: .current) == .orderedAscending\n    }\n}\n\n@inline(__always)\nprivate func join_<S>(prefix: String, appending: S) -> String where S: StringProtocol {\n    return join_(prefix: prefix, pathComponents: appending.split(separator: \"/\"))\n}\n\nprivate func join_<S>(prefix: String, pathComponents: S) -> String where S: Sequence, S.Element: StringProtocol {\n    assert(prefix.first == \"/\")\n\n    var rv = prefix\n    for component in pathComponents {\n\n        assert(!component.contains(\"/\"))\n\n        switch component {\n        case \"..\":\n            let start = rv.indices.startIndex\n            let index = rv.lastIndex(of: \"/\")!\n            if start == index {\n                rv = \"/\"\n            } else {\n                rv = String(rv[start..<index])\n            }\n        case \".\":\n            break\n        default:\n            if rv == \"/\" {\n                rv = \"/\\(component)\"\n            } else {\n                rv = \"\\(rv)/\\(component)\"\n            }\n        }\n    }\n    return rv\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕PromiseKit-6.8.3/Box.swift",
    "content": "import Dispatch\n\nenum Sealant<R> {\n    case pending(Handlers<R>)\n    case resolved(R)\n}\n\nfinal class Handlers<R> {\n    var bodies: [(R) -> Void] = []\n    func append(_ item: @escaping(R) -> Void) { bodies.append(item) }\n}\n\n/// - Remark: not protocol ∵ http://www.russbishop.net/swift-associated-types-cont\nclass Box<T> {\n    func inspect() -> Sealant<T> { fatalError() }\n    func inspect(_: (Sealant<T>) -> Void) { fatalError() }\n    func seal(_: T) {}\n}\n\nfinal class SealedBox<T>: Box<T> {\n    let value: T\n\n    init(value: T) {\n        self.value = value\n    }\n\n    override func inspect() -> Sealant<T> {\n        return .resolved(value)\n    }\n}\n\nclass EmptyBox<T>: Box<T> {\n    private var sealant = Sealant<T>.pending(.init())\n    private let barrier = DispatchQueue(label: \"org.promisekit.barrier\", attributes: .concurrent)\n\n    override func seal(_ value: T) {\n        var handlers: Handlers<T>!\n        barrier.sync(flags: .barrier) {\n            guard case .pending(let _handlers) = self.sealant else {\n                return  // already fulfilled!\n            }\n            handlers = _handlers\n            self.sealant = .resolved(value)\n        }\n\n        //FIXME we are resolved so should `pipe(to:)` be called at this instant, “thens are called in order” would be invalid\n        //NOTE we don’t do this in the above `sync` because that could potentially deadlock\n        //THOUGH since `then` etc. typically invoke after a run-loop cycle, this issue is somewhat less severe\n\n        if let handlers = handlers {\n            handlers.bodies.forEach{ $0(value) }\n        }\n\n        //TODO solution is an unfortunate third state “sealed” where then's get added\n        // to a separate handler pool for that state\n        // any other solution has potential races\n    }\n\n    override func inspect() -> Sealant<T> {\n        var rv: Sealant<T>!\n        barrier.sync {\n            rv = self.sealant\n        }\n        return rv\n    }\n\n    override func inspect(_ body: (Sealant<T>) -> Void) {\n        var sealed = false\n        barrier.sync(flags: .barrier) {\n            switch sealant {\n            case .pending:\n                // body will append to handlers, so we must stay barrier’d\n                body(sealant)\n            case .resolved:\n                sealed = true\n            }\n        }\n        if sealed {\n            // we do this outside the barrier to prevent potential deadlocks\n            // it's safe because we never transition away from this state\n            body(sealant)\n        }\n    }\n}\n\n\nextension Optional where Wrapped: DispatchQueue {\n    @inline(__always)\n    func async(flags: DispatchWorkItemFlags?, _ body: @escaping() -> Void) {\n        switch self {\n        case .none:\n            body()\n        case .some(let q):\n            if let flags = flags {\n                q.async(flags: flags, execute: body)\n            } else {\n                q.async(execute: body)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕PromiseKit-6.8.3/Catchable.swift",
    "content": "import Dispatch\n\n/// Provides `catch` and `recover` to your object that conforms to `Thenable`\npublic protocol CatchMixin: Thenable\n{}\n\npublic extension CatchMixin {\n    \n    /**\n     The provided closure executes when this promise rejects.\n     \n     Rejecting a promise cascades: rejecting all subsequent promises (unless\n     recover is invoked) thus you will typically place your catch at the end\n     of a chain. Often utility promises will not have a catch, instead\n     delegating the error handling to the caller.\n     \n     - Parameter on: The queue to which the provided closure dispatches.\n     - Parameter policy: The default policy does not execute your handler for cancellation errors.\n     - Parameter execute: The handler to execute if this promise is rejected.\n     - Returns: A promise finalizer.\n     - SeeAlso: [Cancellation](http://promisekit.org/docs/)\n     */\n    @discardableResult\n    func `catch`(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, policy: CatchPolicy = conf.catchPolicy, _ body: @escaping(Error) -> Void) -> PMKFinalizer {\n        let finalizer = PMKFinalizer()\n        pipe {\n            switch $0 {\n            case .rejected(let error):\n                guard policy == .allErrors || !error.isCancelled else {\n                    fallthrough\n                }\n                on.async(flags: flags) {\n                    body(error)\n                    finalizer.pending.resolve(())\n                }\n            case .fulfilled:\n                finalizer.pending.resolve(())\n            }\n        }\n        return finalizer\n    }\n}\n\npublic class PMKFinalizer {\n    let pending = Guarantee<Void>.pending()\n\n    /// `finally` is the same as `ensure`, but it is not chainable\n    public func finally(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, _ body: @escaping () -> Void) {\n        pending.guarantee.done(on: on, flags: flags) {\n            body()\n        }\n    }\n}\n\n\npublic extension CatchMixin {\n    \n    /**\n     The provided closure executes when this promise rejects.\n     \n     Unlike `catch`, `recover` continues the chain.\n     Use `recover` in circumstances where recovering the chain from certain errors is a possibility. For example:\n\n         firstly {\n             CLLocationManager.requestLocation()\n         }.recover { error in\n             guard error == CLError.unknownLocation else { throw error }\n             return .value(CLLocation.chicago)\n         }\n     \n     - Parameter on: The queue to which the provided closure dispatches.\n     - Parameter body: The handler to execute if this promise is rejected.\n     - SeeAlso: [Cancellation](http://promisekit.org/docs/)\n     */\n    func recover<U: Thenable>(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, policy: CatchPolicy = conf.catchPolicy, _ body: @escaping(Error) throws -> U) -> Promise<T> where U.T == T {\n        let rp = Promise<U.T>(.pending)\n        pipe {\n            switch $0 {\n            case .fulfilled(let value):\n                rp.box.seal(.fulfilled(value))\n            case .rejected(let error):\n                if policy == .allErrors || !error.isCancelled {\n                    on.async(flags: flags) {\n                        do {\n                            let rv = try body(error)\n                            guard rv !== rp else { throw PMKError.returnedSelf }\n                            rv.pipe(to: rp.box.seal)\n                        } catch {\n                            rp.box.seal(.rejected(error))\n                        }\n                    }\n                } else {\n                    rp.box.seal(.rejected(error))\n                }\n            }\n        }\n        return rp\n    }\n\n    /**\n     The provided closure executes when this promise rejects.\n     This variant of `recover` requires the handler to return a Guarantee, thus it returns a Guarantee itself and your closure cannot `throw`.\n     - Note it is logically impossible for this to take a `catchPolicy`, thus `allErrors` are handled.\n     - Parameter on: The queue to which the provided closure dispatches.\n     - Parameter body: The handler to execute if this promise is rejected.\n     - SeeAlso: [Cancellation](http://promisekit.org/docs/)\n     */\n    @discardableResult\n    func recover(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ body: @escaping(Error) -> Guarantee<T>) -> Guarantee<T> {\n        let rg = Guarantee<T>(.pending)\n        pipe {\n            switch $0 {\n            case .fulfilled(let value):\n                rg.box.seal(value)\n            case .rejected(let error):\n                on.async(flags: flags) {\n                    body(error).pipe(to: rg.box.seal)\n                }\n            }\n        }\n        return rg\n    }\n\n    /**\n     The provided closure executes when this promise resolves, whether it rejects or not.\n     \n         firstly {\n             UIApplication.shared.networkActivityIndicatorVisible = true\n         }.done {\n             //…\n         }.ensure {\n             UIApplication.shared.networkActivityIndicatorVisible = false\n         }.catch {\n             //…\n         }\n     \n     - Parameter on: The queue to which the provided closure dispatches.\n     - Parameter body: The closure that executes when this promise resolves.\n     - Returns: A new promise, resolved with this promise’s resolution.\n     */\n    func ensure(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, _ body: @escaping () -> Void) -> Promise<T> {\n        let rp = Promise<T>(.pending)\n        pipe { result in\n            on.async(flags: flags) {\n                body()\n                rp.box.seal(result)\n            }\n        }\n        return rp\n    }\n\n    /**\n     The provided closure executes when this promise resolves, whether it rejects or not.\n     The chain waits on the returned `Guarantee<Void>`.\n\n         firstly {\n             setup()\n         }.done {\n             //…\n         }.ensureThen {\n             teardown()  // -> Guarante<Void>\n         }.catch {\n             //…\n         }\n\n     - Parameter on: The queue to which the provided closure dispatches.\n     - Parameter body: The closure that executes when this promise resolves.\n     - Returns: A new promise, resolved with this promise’s resolution.\n     */\n    func ensureThen(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, _ body: @escaping () -> Guarantee<Void>) -> Promise<T> {\n        let rp = Promise<T>(.pending)\n        pipe { result in\n            on.async(flags: flags) {\n                body().done {\n                    rp.box.seal(result)\n                }\n            }\n        }\n        return rp\n    }\n\n\n\n    /**\n     Consumes the Swift unused-result warning.\n     - Note: You should `catch`, but in situations where you know you don’t need a `catch`, `cauterize` makes your intentions clear.\n     */\n    @discardableResult\n    func cauterize() -> PMKFinalizer {\n        return self.catch {\n            conf.logHandler(.cauterized($0))\n        }\n    }\n}\n\n\npublic extension CatchMixin where T == Void {\n    \n    /**\n     The provided closure executes when this promise rejects.\n     \n     This variant of `recover` is specialized for `Void` promises and de-errors your chain returning a `Guarantee`, thus you cannot `throw` and you must handle all errors including cancellation.\n     \n     - Parameter on: The queue to which the provided closure dispatches.\n     - Parameter body: The handler to execute if this promise is rejected.\n     - SeeAlso: [Cancellation](http://promisekit.org/docs/)\n     */\n    @discardableResult\n    func recover(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ body: @escaping(Error) -> Void) -> Guarantee<Void> {\n        let rg = Guarantee<Void>(.pending)\n        pipe {\n            switch $0 {\n            case .fulfilled:\n                rg.box.seal(())\n            case .rejected(let error):\n                on.async(flags: flags) {\n                    body(error)\n                    rg.box.seal(())\n                }\n            }\n        }\n        return rg\n    }\n\n    /**\n     The provided closure executes when this promise rejects.\n     \n     This variant of `recover` ensures that no error is thrown from the handler and allows specifying a catch policy.\n     \n     - Parameter on: The queue to which the provided closure dispatches.\n     - Parameter body: The handler to execute if this promise is rejected.\n     - SeeAlso: [Cancellation](http://promisekit.org/docs/)\n     */\n    func recover(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, policy: CatchPolicy = conf.catchPolicy, _ body: @escaping(Error) throws -> Void) -> Promise<Void> {\n        let rg = Promise<Void>(.pending)\n        pipe {\n            switch $0 {\n            case .fulfilled:\n                rg.box.seal(.fulfilled(()))\n            case .rejected(let error):\n                if policy == .allErrors || !error.isCancelled {\n                    on.async(flags: flags) {\n                        do {\n                            rg.box.seal(.fulfilled(try body(error)))\n                        } catch {\n                            rg.box.seal(.rejected(error))\n                        }\n                    }\n                } else {\n                    rg.box.seal(.rejected(error))\n                }\n            }\n        }\n        return rg\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕PromiseKit-6.8.3/Configuration.swift",
    "content": "import Dispatch\n\n/**\n PromiseKit’s configurable parameters.\n\n Do not change these after any Promise machinery executes as the configuration object is not thread-safe.\n\n We would like it to be, but sadly `Swift` does not expose `dispatch_once` et al. which is what we used to use in order to make the configuration immutable once first used.\n*/\npublic struct PMKConfiguration {\n    /// The default queues that promises handlers dispatch to\n    public var Q: (map: DispatchQueue?, return: DispatchQueue?) = (map: DispatchQueue.main, return: DispatchQueue.main)\n\n    /// The default catch-policy for all `catch` and `resolve`\n    public var catchPolicy = CatchPolicy.allErrorsExceptCancellation\n    \n    /// The closure used to log PromiseKit events.\n    /// Not thread safe; change before processing any promises.\n    /// - Note: The default handler calls `print()`\n    public var logHandler: (LogEvent) -> () = { event in\n        switch event {\n        case .waitOnMainThread:\n            print(\"PromiseKit: warning: `wait()` called on main thread!\")\n        case .pendingPromiseDeallocated:\n            print(\"PromiseKit: warning: pending promise deallocated\")\n        case .pendingGuaranteeDeallocated:\n            print(\"PromiseKit: warning: pending guarantee deallocated\")\n        case .cauterized (let error):\n            print(\"PromiseKit:cauterized-error: \\(error)\")\n        }\n    }\n}\n\n/// Modify this as soon as possible in your application’s lifetime\npublic var conf = PMKConfiguration()\n"
  },
  {
    "path": "Dependencies/mxcl∕PromiseKit-6.8.3/CustomStringConvertible.swift",
    "content": "\nextension Promise: CustomStringConvertible {\n    /// - Returns: A description of the state of this promise.\n    public var description: String {\n        switch result {\n        case nil:\n            return \"Promise(…\\(T.self))\"\n        case .rejected(let error)?:\n            return \"Promise(\\(error))\"\n        case .fulfilled(let value)?:\n            return \"Promise(\\(value))\"\n        }\n    }\n}\n\nextension Promise: CustomDebugStringConvertible {\n    /// - Returns: A debug-friendly description of the state of this promise.\n    public var debugDescription: String {\n        switch box.inspect() {\n        case .pending(let handlers):\n            return \"Promise<\\(T.self)>.pending(handlers: \\(handlers.bodies.count))\"\n        case .resolved(.rejected(let error)):\n            return \"Promise<\\(T.self)>.rejected(\\(type(of: error)).\\(error))\"\n        case .resolved(.fulfilled(let value)):\n            return \"Promise<\\(T.self)>.fulfilled(\\(value))\"\n        }\n    }\n}\n\n#if !SWIFT_PACKAGE\nextension AnyPromise {\n    /// - Returns: A description of the state of this promise.\n    override open var description: String {\n        switch box.inspect() {\n        case .pending:\n            return \"AnyPromise(…)\"\n        case .resolved(let obj?):\n            return \"AnyPromise(\\(obj))\"\n        case .resolved(nil):\n            return \"AnyPromise(nil)\"\n        }\n    }\n}\n#endif\n"
  },
  {
    "path": "Dependencies/mxcl∕PromiseKit-6.8.3/Error.swift",
    "content": "import Foundation\n\npublic enum PMKError: Error {\n    /**\n     The completionHandler with form `(T?, Error?)` was called with `(nil, nil)`.\n     This is invalid as per Cocoa/Apple calling conventions.\n     */\n    case invalidCallingConvention\n\n    /**\n     A handler returned its own promise. 99% of the time, this is likely a \n     programming error. It is also invalid per Promises/A+.\n     */\n    case returnedSelf\n\n    /** `when()`, `race()` etc. were called with invalid parameters, eg. an empty array. */\n    case badInput\n\n    /// The operation was cancelled\n    case cancelled\n\n    /// `nil` was returned from `flatMap`\n    @available(*, deprecated, message: \"See: `compactMap`\")\n    case flatMap(Any, Any.Type)\n\n    /// `nil` was returned from `compactMap`\n    case compactMap(Any, Any.Type)\n\n    /**\n     The lastValue or firstValue of a sequence was requested but the sequence was empty.\n\n     Also used if all values of this collection failed the test passed to `firstValue(where:)`.\n     */\n    case emptySequence\n}\n\nextension PMKError: CustomDebugStringConvertible {\n    public var debugDescription: String {\n        switch self {\n        case .flatMap(let obj, let type):\n            return \"Could not `flatMap<\\(type)>`: \\(obj)\"\n        case .compactMap(let obj, let type):\n            return \"Could not `compactMap<\\(type)>`: \\(obj)\"\n        case .invalidCallingConvention:\n            return \"A closure was called with an invalid calling convention, probably (nil, nil)\"\n        case .returnedSelf:\n            return \"A promise handler returned itself\"\n        case .badInput:\n            return \"Bad input was provided to a PromiseKit function\"\n        case .cancelled:\n            return \"The asynchronous sequence was cancelled\"\n        case .emptySequence:\n            return \"The first or last element was requested for an empty sequence\"\n        }\n    }\n}\n\nextension PMKError: LocalizedError {\n    public var errorDescription: String? {\n        return debugDescription\n    }\n}\n\n\n//////////////////////////////////////////////////////////// Cancellation\n\n/// An error that may represent the cancelled condition\npublic protocol CancellableError: Error {\n    /// returns true if this Error represents a cancelled condition\n    var isCancelled: Bool { get }\n}\n\nextension Error {\n    public var isCancelled: Bool {\n        do {\n            throw self\n        } catch PMKError.cancelled {\n            return true\n        } catch let error as CancellableError {\n            return error.isCancelled\n        } catch URLError.cancelled {\n            return true\n        } catch CocoaError.userCancelled {\n            return true\n        } catch {\n        #if os(macOS) || os(iOS) || os(tvOS)\n            let pair = { ($0.domain, $0.code) }(error as NSError)\n            return (\"SKErrorDomain\", 2) == pair\n        #else\n            return false\n        #endif\n        }\n    }\n}\n\n/// Used by `catch` and `recover`\npublic enum CatchPolicy {\n    /// Indicates that `catch` or `recover` handle all error types including cancellable-errors.\n    case allErrors\n\n    /// Indicates that `catch` or `recover` handle all error except cancellable-errors.\n    case allErrorsExceptCancellation\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕PromiseKit-6.8.3/Guarantee.swift",
    "content": "import class Foundation.Thread\nimport Dispatch\n\n/**\n A `Guarantee` is a functional abstraction around an asynchronous operation that cannot error.\n - See: `Thenable`\n*/\npublic final class Guarantee<T>: Thenable {\n    let box: PromiseKit.Box<T>\n\n    fileprivate init(box: SealedBox<T>) {\n        self.box = box\n    }\n\n    /// Returns a `Guarantee` sealed with the provided value.\n    public static func value(_ value: T) -> Guarantee<T> {\n        return .init(box: SealedBox(value: value))\n    }\n\n    /// Returns a pending `Guarantee` that can be resolved with the provided closure’s parameter.\n    public init(resolver body: (@escaping(T) -> Void) -> Void) {\n        box = Box()\n        body(box.seal)\n    }\n\n    /// - See: `Thenable.pipe`\n    public func pipe(to: @escaping(Result<T>) -> Void) {\n        pipe{ to(.fulfilled($0)) }\n    }\n\n    func pipe(to: @escaping(T) -> Void) {\n        switch box.inspect() {\n        case .pending:\n            box.inspect {\n                switch $0 {\n                case .pending(let handlers):\n                    handlers.append(to)\n                case .resolved(let value):\n                    to(value)\n                }\n            }\n        case .resolved(let value):\n            to(value)\n        }\n    }\n\n    /// - See: `Thenable.result`\n    public var result: Result<T>? {\n        switch box.inspect() {\n        case .pending:\n            return nil\n        case .resolved(let value):\n            return .fulfilled(value)\n        }\n    }\n\n    final private class Box<T>: EmptyBox<T> {\n        deinit {\n            switch inspect() {\n            case .pending:\n                PromiseKit.conf.logHandler(.pendingGuaranteeDeallocated)\n            case .resolved:\n                break\n            }\n        }\n    }\n\n    init(_: PMKUnambiguousInitializer) {\n        box = Box()\n    }\n\n    /// Returns a tuple of a pending `Guarantee` and a function that resolves it.\n    public class func pending() -> (guarantee: Guarantee<T>, resolve: (T) -> Void) {\n        return { ($0, $0.box.seal) }(Guarantee<T>(.pending))\n    }\n}\n\npublic extension Guarantee {\n    @discardableResult\n    func done(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, _ body: @escaping(T) -> Void) -> Guarantee<Void> {\n        let rg = Guarantee<Void>(.pending)\n        pipe { (value: T) in\n            on.async(flags: flags) {\n                body(value)\n                rg.box.seal(())\n            }\n        }\n        return rg\n    }\n    \n    func get(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, _ body: @escaping (T) -> Void) -> Guarantee<T> {\n        return map(on: on, flags: flags) {\n            body($0)\n            return $0\n        }\n    }\n\n    func map<U>(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ body: @escaping(T) -> U) -> Guarantee<U> {\n        let rg = Guarantee<U>(.pending)\n        pipe { value in\n            on.async(flags: flags) {\n                rg.box.seal(body(value))\n            }\n        }\n        return rg\n    }\n\n\t@discardableResult\n    func then<U>(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ body: @escaping(T) -> Guarantee<U>) -> Guarantee<U> {\n        let rg = Guarantee<U>(.pending)\n        pipe { value in\n            on.async(flags: flags) {\n                body(value).pipe(to: rg.box.seal)\n            }\n        }\n        return rg\n    }\n\n    func asVoid() -> Guarantee<Void> {\n        return map(on: nil) { _ in }\n    }\n    \n    /**\n     Blocks this thread, so you know, don’t call this on a serial thread that\n     any part of your chain may use. Like the main thread for example.\n     */\n    func wait() -> T {\n\n        if Thread.isMainThread {\n            conf.logHandler(.waitOnMainThread)\n        }\n\n        var result = value\n\n        if result == nil {\n            let group = DispatchGroup()\n            group.enter()\n            pipe { (foo: T) in result = foo; group.leave() }\n            group.wait()\n        }\n        \n        return result!\n    }\n}\n\npublic extension Guarantee where T: Sequence {\n\n    /**\n     `Guarantee<[T]>` => `T` -> `Guarantee<U>` => `Guaranetee<[U]>`\n\n         firstly {\n             .value([1,2,3])\n         }.thenMap {\n             .value($0 * 2)\n         }.done {\n             // $0 => [2,4,6]\n         }\n     */\n    func thenMap<U>(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T.Iterator.Element) -> Guarantee<U>) -> Guarantee<[U]> {\n        return then(on: on, flags: flags) {\n            when(fulfilled: $0.map(transform))\n        }.recover {\n            // if happens then is bug inside PromiseKit\n            fatalError(String(describing: $0))\n        }\n    }\n}\n\n#if swift(>=3.1)\npublic extension Guarantee where T == Void {\n    convenience init() {\n        self.init(box: SealedBox(value: Void()))\n    }\n}\n#endif\n\n\npublic extension DispatchQueue {\n    /**\n     Asynchronously executes the provided closure on a dispatch queue.\n\n         DispatchQueue.global().async(.promise) {\n             md5(input)\n         }.done { md5 in\n             //…\n         }\n\n     - Parameter body: The closure that resolves this promise.\n     - Returns: A new `Guarantee` resolved by the result of the provided closure.\n     - Note: There is no Promise/Thenable version of this due to Swift compiler ambiguity issues.\n     */\n    @available(macOS 10.10, iOS 2.0, tvOS 10.0, watchOS 2.0, *)\n    final func async<T>(_: PMKNamespacer, group: DispatchGroup? = nil, qos: DispatchQoS = .default, flags: DispatchWorkItemFlags = [], execute body: @escaping () -> T) -> Guarantee<T> {\n        let rg = Guarantee<T>(.pending)\n        async(group: group, qos: qos, flags: flags) {\n            rg.box.seal(body())\n        }\n        return rg\n    }\n}\n\n\n#if os(Linux)\nimport func CoreFoundation._CFIsMainThread\n\nextension Thread {\n    // `isMainThread` is not implemented yet in swift-corelibs-foundation.\n    static var isMainThread: Bool {\n        return _CFIsMainThread()\n    }\n}\n#endif\n"
  },
  {
    "path": "Dependencies/mxcl∕PromiseKit-6.8.3/LogEvent.swift",
    "content": "/**\n    The PromiseKit events which may be logged.\n \n    ````\n    /// A promise or guarantee has blocked the main thread\n    case waitOnMainThread\n \n    /// A promise has been deallocated without being fulfilled\n    case pendingPromiseDeallocated\n \n    /// An error which occurred while fulfilling a promise was swallowed\n    case cauterized(Error)\n \n    /// Errors which give a string error message\n    case misc (String)\n    ````\n*/\npublic enum LogEvent {\n    /// A promise or guarantee has blocked the main thread\n    case waitOnMainThread\n    \n    /// A promise has been deallocated without being fulfilled\n    case pendingPromiseDeallocated\n    \n    /// A guarantee has been deallocated without being fulfilled\n    case pendingGuaranteeDeallocated\n    \n    /// An error which occurred while fulfilling a promise was swallowed\n    case cauterized(Error)\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕PromiseKit-6.8.3/Promise.swift",
    "content": "import class Foundation.Thread\nimport Dispatch\n\n/**\n A `Promise` is a functional abstraction around a failable asynchronous operation.\n - See: `Thenable`\n */\npublic final class Promise<T>: Thenable, CatchMixin {\n    let box: Box<Result<T>>\n\n    fileprivate init(box: SealedBox<Result<T>>) {\n        self.box = box\n    }\n\n    /**\n      Initialize a new fulfilled promise.\n\n      We do not provide `init(value:)` because Swift is “greedy”\n      and would pick that initializer in cases where it should pick\n      one of the other more specific options leading to Promises with\n      `T` that is eg: `Error` or worse `(T->Void,Error->Void)` for\n      uses of our PMK < 4 pending initializer due to Swift trailing\n      closure syntax (nothing good comes without pain!).\n\n      Though often easy to detect, sometimes these issues would be\n      hidden by other type inference leading to some nasty bugs in\n      production.\n\n      In PMK5 we tried to work around this by making the pending\n      initializer take the form `Promise(.pending)` but this led to\n      bad migration errors for PMK4 users. Hence instead we quickly\n      released PMK6 and now only provide this initializer for making\n      sealed & fulfilled promises.\n\n      Usage is still (usually) good:\n\n          guard foo else {\n              return .value(bar)\n          }\n     */\n    public class func value(_ value: T) -> Promise<T> {\n        return Promise(box: SealedBox(value: .fulfilled(value)))\n    }\n\n    /// Initialize a new rejected promise.\n    public init(error: Error) {\n        box = SealedBox(value: .rejected(error))\n    }\n\n    /// Initialize a new promise bound to the provided `Thenable`.\n    public init<U: Thenable>(_ bridge: U) where U.T == T {\n        box = EmptyBox()\n        bridge.pipe(to: box.seal)\n    }\n\n    /// Initialize a new promise that can be resolved with the provided `Resolver`.\n    public init(resolver body: (Resolver<T>) throws -> Void) {\n        box = EmptyBox()\n        let resolver = Resolver(box)\n        do {\n            try body(resolver)\n        } catch {\n            resolver.reject(error)\n        }\n    }\n\n    /// - Returns: a tuple of a new pending promise and its `Resolver`.\n    public class func pending() -> (promise: Promise<T>, resolver: Resolver<T>) {\n        return { ($0, Resolver($0.box)) }(Promise<T>(.pending))\n    }\n\n    /// - See: `Thenable.pipe`\n    public func pipe(to: @escaping(Result<T>) -> Void) {\n        switch box.inspect() {\n        case .pending:\n            box.inspect {\n                switch $0 {\n                case .pending(let handlers):\n                    handlers.append(to)\n                case .resolved(let value):\n                    to(value)\n                }\n            }\n        case .resolved(let value):\n            to(value)\n        }\n    }\n\n    /// - See: `Thenable.result`\n    public var result: Result<T>? {\n        switch box.inspect() {\n        case .pending:\n            return nil\n        case .resolved(let result):\n            return result\n        }\n    }\n\n    init(_: PMKUnambiguousInitializer) {\n        box = EmptyBox()\n    }\n}\n\npublic extension Promise {\n    /**\n     Blocks this thread, so—you know—don’t call this on a serial thread that\n     any part of your chain may use. Like the main thread for example.\n     */\n    func wait() throws -> T {\n\n        if Thread.isMainThread {\n            conf.logHandler(LogEvent.waitOnMainThread)\n        }\n\n        var result = self.result\n\n        if result == nil {\n            let group = DispatchGroup()\n            group.enter()\n            pipe { result = $0; group.leave() }\n            group.wait()\n        }\n\n        switch result! {\n        case .rejected(let error):\n            throw error\n        case .fulfilled(let value):\n            return value\n        }\n    }\n}\n\n#if swift(>=3.1)\nextension Promise where T == Void {\n    /// Initializes a new promise fulfilled with `Void`\n    public convenience init() {\n        self.init(box: SealedBox(value: .fulfilled(Void())))\n    }\n}\n#endif\n\n\npublic extension DispatchQueue {\n    /**\n     Asynchronously executes the provided closure on a dispatch queue.\n\n         DispatchQueue.global().async(.promise) {\n             try md5(input)\n         }.done { md5 in\n             //…\n         }\n\n     - Parameter body: The closure that resolves this promise.\n     - Returns: A new `Promise` resolved by the result of the provided closure.\n     - Note: There is no Promise/Thenable version of this due to Swift compiler ambiguity issues.\n     */\n    @available(macOS 10.10, iOS 8.0, tvOS 9.0, watchOS 2.0, *)\n    final func async<T>(_: PMKNamespacer, group: DispatchGroup? = nil, qos: DispatchQoS = .default, flags: DispatchWorkItemFlags = [], execute body: @escaping () throws -> T) -> Promise<T> {\n        let promise = Promise<T>(.pending)\n        async(group: group, qos: qos, flags: flags) {\n            do {\n                promise.box.seal(.fulfilled(try body()))\n            } catch {\n                promise.box.seal(.rejected(error))\n            }\n        }\n        return promise\n    }\n}\n\n\n/// used by our extensions to provide unambiguous functions with the same name as the original function\npublic enum PMKNamespacer {\n    case promise\n}\n\nenum PMKUnambiguousInitializer {\n    case pending\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕PromiseKit-6.8.3/Resolver.swift",
    "content": "/// An object for resolving promises\npublic final class Resolver<T> {\n    let box: Box<Result<T>>\n\n    init(_ box: Box<Result<T>>) {\n        self.box = box\n    }\n\n    deinit {\n        if case .pending = box.inspect() {\n            conf.logHandler(.pendingPromiseDeallocated)\n        }\n    }\n}\n\npublic extension Resolver {\n    /// Fulfills the promise with the provided value\n    func fulfill(_ value: T) {\n        box.seal(.fulfilled(value))\n    }\n\n    /// Rejects the promise with the provided error\n    func reject(_ error: Error) {\n        box.seal(.rejected(error))\n    }\n\n    /// Resolves the promise with the provided result\n    func resolve(_ result: Result<T>) {\n        box.seal(result)\n    }\n\n    /// Resolves the promise with the provided value or error\n    func resolve(_ obj: T?, _ error: Error?) {\n        if let error = error {\n            reject(error)\n        } else if let obj = obj {\n            fulfill(obj)\n        } else {\n            reject(PMKError.invalidCallingConvention)\n        }\n    }\n\n    /// Fulfills the promise with the provided value unless the provided error is non-nil\n    func resolve(_ obj: T, _ error: Error?) {\n        if let error = error {\n            reject(error)\n        } else {\n            fulfill(obj)\n        }\n    }\n\n    /// Resolves the promise, provided for non-conventional value-error ordered completion handlers.\n    func resolve(_ error: Error?, _ obj: T?) {\n        resolve(obj, error)\n    }\n}\n\n#if swift(>=3.1)\nextension Resolver where T == Void {\n    /// Fulfills the promise unless error is non-nil\n    public func resolve(_ error: Error?) {\n        if let error = error {\n            reject(error)\n        } else {\n            fulfill(())\n        }\n    }\n#if false\n    // disabled ∵ https://github.com/mxcl/PromiseKit/issues/990\n\n    /// Fulfills the promise\n    public func fulfill() {\n        self.fulfill(())\n    }\n#else\n    /// Fulfills the promise\n    /// - Note: underscore is present due to: https://github.com/mxcl/PromiseKit/issues/990\n    public func fulfill_() {\n        self.fulfill(())\n    }\n#endif\n}\n#endif\n\npublic enum Result<T> {\n    case fulfilled(T)\n    case rejected(Error)\n}\n\npublic extension PromiseKit.Result {\n    var isFulfilled: Bool {\n        switch self {\n        case .fulfilled:\n            return true\n        case .rejected:\n            return false\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕PromiseKit-6.8.3/Thenable.swift",
    "content": "import Dispatch\n\n/// Thenable represents an asynchronous operation that can be chained.\npublic protocol Thenable: class {\n    /// The type of the wrapped value\n    associatedtype T\n\n    /// `pipe` is immediately executed when this `Thenable` is resolved\n    func pipe(to: @escaping(Result<T>) -> Void)\n\n    /// The resolved result or nil if pending.\n    var result: Result<T>? { get }\n}\n\npublic extension Thenable {\n    /**\n     The provided closure executes when this promise resolves.\n     \n     This allows chaining promises. The promise returned by the provided closure is resolved before the promise returned by this closure resolves.\n     \n     - Parameter on: The queue to which the provided closure dispatches.\n     - Parameter body: The closure that executes when this promise fulfills. It must return a promise.\n     - Returns: A new promise that resolves when the promise returned from the provided closure resolves. For example:\n\n           firstly {\n               URLSession.shared.dataTask(.promise, with: url1)\n           }.then { response in\n               transform(data: response.data)\n           }.done { transformation in\n               //…\n           }\n     */\n    func then<U: Thenable>(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ body: @escaping(T) throws -> U) -> Promise<U.T> {\n        let rp = Promise<U.T>(.pending)\n        pipe {\n            switch $0 {\n            case .fulfilled(let value):\n                on.async(flags: flags) {\n                    do {\n                        let rv = try body(value)\n                        guard rv !== rp else { throw PMKError.returnedSelf }\n                        rv.pipe(to: rp.box.seal)\n                    } catch {\n                        rp.box.seal(.rejected(error))\n                    }\n                }\n            case .rejected(let error):\n                rp.box.seal(.rejected(error))\n            }\n        }\n        return rp\n    }\n\n    /**\n     The provided closure is executed when this promise is resolved.\n     \n     This is like `then` but it requires the closure to return a non-promise.\n     \n     - Parameter on: The queue to which the provided closure dispatches.\n     - Parameter transform: The closure that is executed when this Promise is fulfilled. It must return a non-promise.\n     - Returns: A new promise that is resolved with the value returned from the provided closure. For example:\n\n           firstly {\n               URLSession.shared.dataTask(.promise, with: url1)\n           }.map { response in\n               response.data.length\n           }.done { length in\n               //…\n           }\n     */\n    func map<U>(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T) throws -> U) -> Promise<U> {\n        let rp = Promise<U>(.pending)\n        pipe {\n            switch $0 {\n            case .fulfilled(let value):\n                on.async(flags: flags) {\n                    do {\n                        rp.box.seal(.fulfilled(try transform(value)))\n                    } catch {\n                        rp.box.seal(.rejected(error))\n                    }\n                }\n            case .rejected(let error):\n                rp.box.seal(.rejected(error))\n            }\n        }\n        return rp\n    }\n\n    /**\n      The provided closure is executed when this promise is resolved.\n\n      In your closure return an `Optional`, if you return `nil` the resulting promise is rejected with `PMKError.compactMap`, otherwise the promise is fulfilled with the unwrapped value.\n\n           firstly {\n               URLSession.shared.dataTask(.promise, with: url)\n           }.compactMap {\n               try JSONSerialization.jsonObject(with: $0.data) as? [String: String]\n           }.done { dictionary in\n               //…\n           }.catch {\n               // either `PMKError.compactMap` or a `JSONError`\n           }\n     */\n    func compactMap<U>(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T) throws -> U?) -> Promise<U> {\n        let rp = Promise<U>(.pending)\n        pipe {\n            switch $0 {\n            case .fulfilled(let value):\n                on.async(flags: flags) {\n                    do {\n                        if let rv = try transform(value) {\n                            rp.box.seal(.fulfilled(rv))\n                        } else {\n                            throw PMKError.compactMap(value, U.self)\n                        }\n                    } catch {\n                        rp.box.seal(.rejected(error))\n                    }\n                }\n            case .rejected(let error):\n                rp.box.seal(.rejected(error))\n            }\n        }\n        return rp\n    }\n\n    /**\n     The provided closure is executed when this promise is resolved.\n     \n     Equivalent to `map { x -> Void in`, but since we force the `Void` return Swift\n     is happier and gives you less hassle about your closure’s qualification.\n     \n     - Parameter on: The queue to which the provided closure dispatches.\n     - Parameter body: The closure that is executed when this Promise is fulfilled.\n     - Returns: A new promise fulfilled as `Void`.\n     \n           firstly {\n               URLSession.shared.dataTask(.promise, with: url)\n           }.done { response in\n               print(response.data)\n           }\n     */\n    func done(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, _ body: @escaping(T) throws -> Void) -> Promise<Void> {\n        let rp = Promise<Void>(.pending)\n        pipe {\n            switch $0 {\n            case .fulfilled(let value):\n                on.async(flags: flags) {\n                    do {\n                        try body(value)\n                        rp.box.seal(.fulfilled(()))\n                    } catch {\n                        rp.box.seal(.rejected(error))\n                    }\n                }\n            case .rejected(let error):\n                rp.box.seal(.rejected(error))\n            }\n        }\n        return rp\n    }\n\n    /**\n     The provided closure is executed when this promise is resolved.\n     \n     This is like `done` but it returns the same value that the handler is fed.\n     `get` immutably accesses the fulfilled value; the returned Promise maintains that value.\n     \n     - Parameter on: The queue to which the provided closure dispatches.\n     - Parameter body: The closure that is executed when this Promise is fulfilled.\n     - Returns: A new promise that is resolved with the value that the handler is fed. For example:\n     \n           firstly {\n               .value(1)\n           }.get { foo in\n               print(foo, \" is 1\")\n           }.done { foo in\n               print(foo, \" is 1\")\n           }.done { foo in\n               print(foo, \" is Void\")\n           }\n     */\n    func get(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, _ body: @escaping (T) throws -> Void) -> Promise<T> {\n        return map(on: on, flags: flags) {\n            try body($0)\n            return $0\n        }\n    }\n\n    /**\n     The provided closure is executed with promise result.\n\n     This is like `get` but provides the Result<T> of the Promise so you can inspect the value of the chain at this point without causing any side effects.\n\n     - Parameter on: The queue to which the provided closure dispatches.\n     - Parameter body: The closure that is executed with Result of Promise.\n     - Returns: A new promise that is resolved with the result that the handler is fed. For example:\n\n     promise.tap{ print($0) }.then{ /*…*/ }\n     */\n    func tap(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ body: @escaping(Result<T>) -> Void) -> Promise<T> {\n        return Promise { seal in\n            pipe { result in\n                on.async(flags: flags) {\n                    body(result)\n                    seal.resolve(result)\n                }\n            }\n        }\n    }\n\n    /// - Returns: a new promise chained off this promise but with its value discarded.\n    func asVoid() -> Promise<Void> {\n        return map(on: nil) { _ in }\n    }\n}\n\npublic extension Thenable {\n    /**\n     - Returns: The error with which this promise was rejected; `nil` if this promise is not rejected.\n     */\n    var error: Error? {\n        switch result {\n        case .none:\n            return nil\n        case .some(.fulfilled):\n            return nil\n        case .some(.rejected(let error)):\n            return error\n        }\n    }\n\n    /**\n     - Returns: `true` if the promise has not yet resolved.\n     */\n    var isPending: Bool {\n        return result == nil\n    }\n\n    /**\n     - Returns: `true` if the promise has resolved.\n     */\n    var isResolved: Bool {\n        return !isPending\n    }\n\n    /**\n     - Returns: `true` if the promise was fulfilled.\n     */\n    var isFulfilled: Bool {\n        return value != nil\n    }\n\n    /**\n     - Returns: `true` if the promise was rejected.\n     */\n    var isRejected: Bool {\n        return error != nil\n    }\n\n    /**\n     - Returns: The value with which this promise was fulfilled or `nil` if this promise is pending or rejected.\n     */\n    var value: T? {\n        switch result {\n        case .none:\n            return nil\n        case .some(.fulfilled(let value)):\n            return value\n        case .some(.rejected):\n            return nil\n        }\n    }\n}\n\npublic extension Thenable where T: Sequence {\n    /**\n     `Promise<[T]>` => `T` -> `U` => `Promise<[U]>`\n\n         firstly {\n             .value([1,2,3])\n         }.mapValues { integer in\n             integer * 2\n         }.done {\n             // $0 => [2,4,6]\n         }\n     */\n    func mapValues<U>(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T.Iterator.Element) throws -> U) -> Promise<[U]> {\n        return map(on: on, flags: flags){ try $0.map(transform) }\n    }\n\n    /**\n     `Promise<[T]>` => `T` -> `[U]` => `Promise<[U]>`\n\n         firstly {\n             .value([1,2,3])\n         }.flatMapValues { integer in\n             [integer, integer]\n         }.done {\n             // $0 => [1,1,2,2,3,3]\n         }\n     */\n    func flatMapValues<U: Sequence>(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T.Iterator.Element) throws -> U) -> Promise<[U.Iterator.Element]> {\n        return map(on: on, flags: flags){ (foo: T) in\n            try foo.flatMap{ try transform($0) }\n        }\n    }\n\n    /**\n     `Promise<[T]>` => `T` -> `U?` => `Promise<[U]>`\n\n         firstly {\n             .value([\"1\",\"2\",\"a\",\"3\"])\n         }.compactMapValues {\n             Int($0)\n         }.done {\n             // $0 => [1,2,3]\n         }\n     */\n    func compactMapValues<U>(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T.Iterator.Element) throws -> U?) -> Promise<[U]> {\n        return map(on: on, flags: flags) { foo -> [U] in\n          #if !swift(>=3.3) || (swift(>=4) && !swift(>=4.1))\n            return try foo.flatMap(transform)\n          #else\n            return try foo.compactMap(transform)\n          #endif\n        }\n    }\n\n    /**\n     `Promise<[T]>` => `T` -> `Promise<U>` => `Promise<[U]>`\n\n         firstly {\n             .value([1,2,3])\n         }.thenMap { integer in\n             .value(integer * 2)\n         }.done {\n             // $0 => [2,4,6]\n         }\n     */\n    func thenMap<U: Thenable>(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T.Iterator.Element) throws -> U) -> Promise<[U.T]> {\n        return then(on: on, flags: flags) {\n            when(fulfilled: try $0.map(transform))\n        }\n    }\n\n    /**\n     `Promise<[T]>` => `T` -> `Promise<[U]>` => `Promise<[U]>`\n\n         firstly {\n             .value([1,2,3])\n         }.thenFlatMap { integer in\n             .value([integer, integer])\n         }.done {\n             // $0 => [1,1,2,2,3,3]\n         }\n     */\n    func thenFlatMap<U: Thenable>(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ transform: @escaping(T.Iterator.Element) throws -> U) -> Promise<[U.T.Iterator.Element]> where U.T: Sequence {\n        return then(on: on, flags: flags) {\n            when(fulfilled: try $0.map(transform))\n        }.map(on: nil) {\n            $0.flatMap{ $0 }\n        }\n    }\n\n    /**\n     `Promise<[T]>` => `T` -> Bool => `Promise<[U]>`\n\n         firstly {\n             .value([1,2,3])\n         }.filterValues {\n             $0 > 1\n         }.done {\n             // $0 => [2,3]\n         }\n     */\n    func filterValues(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ isIncluded: @escaping (T.Iterator.Element) -> Bool) -> Promise<[T.Iterator.Element]> {\n        return map(on: on, flags: flags) {\n            $0.filter(isIncluded)\n        }\n    }\n}\n\npublic extension Thenable where T: Collection {\n    /// - Returns: a promise fulfilled with the first value of this `Collection` or, if empty, a promise rejected with PMKError.emptySequence.\n    var firstValue: Promise<T.Iterator.Element> {\n        return map(on: nil) { aa in\n            if let a1 = aa.first {\n                return a1\n            } else {\n                throw PMKError.emptySequence\n            }\n        }\n    }\n\n    func firstValue(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, where test: @escaping (T.Iterator.Element) -> Bool) -> Promise<T.Iterator.Element> {\n        return map(on: on, flags: flags) {\n            for x in $0 where test(x) {\n                return x\n            }\n            throw PMKError.emptySequence\n        }\n    }\n\n    /// - Returns: a promise fulfilled with the last value of this `Collection` or, if empty, a promise rejected with PMKError.emptySequence.\n    var lastValue: Promise<T.Iterator.Element> {\n        return map(on: nil) { aa in\n            if aa.isEmpty {\n                throw PMKError.emptySequence\n            } else {\n                let i = aa.index(aa.endIndex, offsetBy: -1)\n                return aa[i]\n            }\n        }\n    }\n}\n\npublic extension Thenable where T: Sequence, T.Iterator.Element: Comparable {\n    /// - Returns: a promise fulfilled with the sorted values of this `Sequence`.\n    func sortedValues(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil) -> Promise<[T.Iterator.Element]> {\n        return map(on: on, flags: flags){ $0.sorted() }\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕PromiseKit-6.8.3/after.swift",
    "content": "import struct Foundation.TimeInterval\nimport Dispatch\n\n/**\n     after(seconds: 1.5).then {\n         //…\n     }\n\n- Returns: A guarantee that resolves after the specified duration.\n*/\npublic func after(seconds: TimeInterval) -> Guarantee<Void> {\n    let (rg, seal) = Guarantee<Void>.pending()\n    let when = DispatchTime.now() + seconds\n#if swift(>=4.0)\n    q.asyncAfter(deadline: when) { seal(()) }\n#else\n    q.asyncAfter(deadline: when, execute: seal)\n#endif\n    return rg\n}\n\n/**\n     after(.seconds(2)).then {\n         //…\n     }\n\n - Returns: A guarantee that resolves after the specified duration.\n*/\npublic func after(_ interval: DispatchTimeInterval) -> Guarantee<Void> {\n    let (rg, seal) = Guarantee<Void>.pending()\n    let when = DispatchTime.now() + interval\n#if swift(>=4.0)\n    q.asyncAfter(deadline: when) { seal(()) }\n#else\n    q.asyncAfter(deadline: when, execute: seal)\n#endif\n    return rg\n}\n\nprivate var q: DispatchQueue {\n    if #available(macOS 10.10, iOS 8.0, tvOS 9.0, watchOS 2.0, *) {\n        return DispatchQueue.global(qos: .default)\n    } else {\n        return DispatchQueue.global(priority: .default)\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕PromiseKit-6.8.3/firstly.swift",
    "content": "import Dispatch\n\n/**\n Judicious use of `firstly` *may* make chains more readable.\n\n Compare:\n\n     URLSession.shared.dataTask(url: url1).then {\n         URLSession.shared.dataTask(url: url2)\n     }.then {\n         URLSession.shared.dataTask(url: url3)\n     }\n\n With:\n\n     firstly {\n         URLSession.shared.dataTask(url: url1)\n     }.then {\n         URLSession.shared.dataTask(url: url2)\n     }.then {\n         URLSession.shared.dataTask(url: url3)\n     }\n\n - Note: the block you pass excecutes immediately on the current thread/queue.\n */\npublic func firstly<U: Thenable>(execute body: () throws -> U) -> Promise<U.T> {\n    do {\n        let rp = Promise<U.T>(.pending)\n        try body().pipe(to: rp.box.seal)\n        return rp\n    } catch {\n        return Promise(error: error)\n    }\n}\n\n/// - See: firstly()\npublic func firstly<T>(execute body: () -> Guarantee<T>) -> Guarantee<T> {\n    return body()\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕PromiseKit-6.8.3/hang.swift",
    "content": "import Foundation\nimport CoreFoundation\n\n/**\n Runs the active run-loop until the provided promise resolves.\n\n This is for debug and is not a generally safe function to use in your applications. We mostly provide it for use in testing environments.\n\n Still if you like, study how it works (by reading the sources!) and use at your own risk.\n\n - Returns: The value of the resolved promise\n - Throws: An error, should the promise be rejected\n - See: `wait()`\n*/\npublic func hang<T>(_ promise: Promise<T>) throws -> T {\n#if os(Linux) || os(Android)\n    // isMainThread is not yet implemented on Linux.\n    let runLoopModeRaw = RunLoopMode.defaultRunLoopMode.rawValue._bridgeToObjectiveC()\n    let runLoopMode: CFString = unsafeBitCast(runLoopModeRaw, to: CFString.self)\n#else\n    guard Thread.isMainThread else {\n        // hang doesn't make sense on threads that aren't the main thread.\n        // use `.wait()` on those threads.\n        fatalError(\"Only call hang() on the main thread.\")\n    }\n    let runLoopMode: CFRunLoopMode = CFRunLoopMode.defaultMode\n#endif\n\n    if promise.isPending {\n        var context = CFRunLoopSourceContext()\n        let runLoop = CFRunLoopGetCurrent()\n        let runLoopSource = CFRunLoopSourceCreate(nil, 0, &context)\n        CFRunLoopAddSource(runLoop, runLoopSource, runLoopMode)\n\n        _ = promise.ensure {\n            CFRunLoopStop(runLoop)\n        }\n\n        while promise.isPending {\n            CFRunLoopRun()\n        }\n        CFRunLoopRemoveSource(runLoop, runLoopSource, runLoopMode)\n    }\n\n    switch promise.result! {\n    case .rejected(let error):\n        throw error\n    case .fulfilled(let value):\n        return value\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕PromiseKit-6.8.3/race.swift",
    "content": "@inline(__always)\nprivate func _race<U: Thenable>(_ thenables: [U]) -> Promise<U.T> {\n    let rp = Promise<U.T>(.pending)\n    for thenable in thenables {\n        thenable.pipe(to: rp.box.seal)\n    }\n    return rp\n}\n\n/**\n Waits for one promise to resolve\n\n     race(promise1, promise2, promise3).then { winner in\n         //…\n     }\n\n - Returns: The promise that resolves first\n - Warning: If the first resolution is a rejection, the returned promise is rejected\n*/\npublic func race<U: Thenable>(_ thenables: U...) -> Promise<U.T> {\n    return _race(thenables)\n}\n\n/**\n Waits for one promise to resolve\n\n     race(promise1, promise2, promise3).then { winner in\n         //…\n     }\n\n - Returns: The promise that resolves first\n - Warning: If the first resolution is a rejection, the returned promise is rejected\n - Remark: If the provided array is empty the returned promise is rejected with PMKError.badInput\n*/\npublic func race<U: Thenable>(_ thenables: [U]) -> Promise<U.T> {\n    guard !thenables.isEmpty else {\n        return Promise(error: PMKError.badInput)\n    }\n    return _race(thenables)\n}\n\n/**\n Waits for one guarantee to resolve\n\n     race(promise1, promise2, promise3).then { winner in\n         //…\n     }\n\n - Returns: The guarantee that resolves first\n*/\npublic func race<T>(_ guarantees: Guarantee<T>...) -> Guarantee<T> {\n    let rg = Guarantee<T>(.pending)\n    for guarantee in guarantees {\n        guarantee.pipe(to: rg.box.seal)\n    }\n    return rg\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕PromiseKit-6.8.3/when.swift",
    "content": "import Foundation\nimport Dispatch\n\nprivate func _when<U: Thenable>(_ thenables: [U]) -> Promise<Void> {\n    var countdown = thenables.count\n    guard countdown > 0 else {\n        return .value(Void())\n    }\n\n    let rp = Promise<Void>(.pending)\n\n#if PMKDisableProgress || os(Linux)\n    var progress: (completedUnitCount: Int, totalUnitCount: Int) = (0, 0)\n#else\n    let progress = Progress(totalUnitCount: Int64(thenables.count))\n    progress.isCancellable = false\n    progress.isPausable = false\n#endif\n\n    let barrier = DispatchQueue(label: \"org.promisekit.barrier.when\", attributes: .concurrent)\n\n    for promise in thenables {\n        promise.pipe { result in\n            barrier.sync(flags: .barrier) {\n                switch result {\n                case .rejected(let error):\n                    if rp.isPending {\n                        progress.completedUnitCount = progress.totalUnitCount\n                        rp.box.seal(.rejected(error))\n                    }\n                case .fulfilled:\n                    guard rp.isPending else { return }\n                    progress.completedUnitCount += 1\n                    countdown -= 1\n                    if countdown == 0 {\n                        rp.box.seal(.fulfilled(()))\n                    }\n                }\n            }\n        }\n    }\n\n    return rp\n}\n\n/**\n Wait for all promises in a set to fulfill.\n\n For example:\n\n     when(fulfilled: promise1, promise2).then { results in\n         //…\n     }.catch { error in\n         switch error {\n         case URLError.notConnectedToInternet:\n             //…\n         case CLError.denied:\n             //…\n         }\n     }\n\n - Note: If *any* of the provided promises reject, the returned promise is immediately rejected with that error.\n - Warning: In the event of rejection the other promises will continue to resolve and, as per any other promise, will either fulfill or reject. This is the right pattern for `getter` style asynchronous tasks, but often for `setter` tasks (eg. storing data on a server), you most likely will need to wait on all tasks and then act based on which have succeeded and which have failed, in such situations use `when(resolved:)`.\n - Parameter promises: The promises upon which to wait before the returned promise resolves.\n - Returns: A new promise that resolves when all the provided promises fulfill or one of the provided promises rejects.\n - Note: `when` provides `NSProgress`.\n - SeeAlso: `when(resolved:)`\n*/\npublic func when<U: Thenable>(fulfilled thenables: [U]) -> Promise<[U.T]> {\n    return _when(thenables).map(on: nil) { thenables.map{ $0.value! } }\n}\n\n/// Wait for all promises in a set to fulfill.\npublic func when<U: Thenable>(fulfilled promises: U...) -> Promise<Void> where U.T == Void {\n    return _when(promises)\n}\n\n/// Wait for all promises in a set to fulfill.\npublic func when<U: Thenable>(fulfilled promises: [U]) -> Promise<Void> where U.T == Void {\n    return _when(promises)\n}\n\n/// Wait for all promises in a set to fulfill.\npublic func when<U: Thenable, V: Thenable>(fulfilled pu: U, _ pv: V) -> Promise<(U.T, V.T)> {\n    return _when([pu.asVoid(), pv.asVoid()]).map(on: nil) { (pu.value!, pv.value!) }\n}\n\n/// Wait for all promises in a set to fulfill.\npublic func when<U: Thenable, V: Thenable, W: Thenable>(fulfilled pu: U, _ pv: V, _ pw: W) -> Promise<(U.T, V.T, W.T)> {\n    return _when([pu.asVoid(), pv.asVoid(), pw.asVoid()]).map(on: nil) { (pu.value!, pv.value!, pw.value!) }\n}\n\n/// Wait for all promises in a set to fulfill.\npublic func when<U: Thenable, V: Thenable, W: Thenable, X: Thenable>(fulfilled pu: U, _ pv: V, _ pw: W, _ px: X) -> Promise<(U.T, V.T, W.T, X.T)> {\n    return _when([pu.asVoid(), pv.asVoid(), pw.asVoid(), px.asVoid()]).map(on: nil) { (pu.value!, pv.value!, pw.value!, px.value!) }\n}\n\n/// Wait for all promises in a set to fulfill.\npublic func when<U: Thenable, V: Thenable, W: Thenable, X: Thenable, Y: Thenable>(fulfilled pu: U, _ pv: V, _ pw: W, _ px: X, _ py: Y) -> Promise<(U.T, V.T, W.T, X.T, Y.T)> {\n    return _when([pu.asVoid(), pv.asVoid(), pw.asVoid(), px.asVoid(), py.asVoid()]).map(on: nil) { (pu.value!, pv.value!, pw.value!, px.value!, py.value!) }\n}\n\n/**\n Generate promises at a limited rate and wait for all to fulfill.\n\n For example:\n \n     func downloadFile(url: URL) -> Promise<Data> {\n         // ...\n     }\n \n     let urls: [URL] = /*…*/\n     let urlGenerator = urls.makeIterator()\n\n     let generator = AnyIterator<Promise<Data>> {\n         guard url = urlGenerator.next() else {\n             return nil\n         }\n         return downloadFile(url)\n     }\n\n     when(generator, concurrently: 3).done { datas in\n         // ...\n     }\n \n No more than three downloads will occur simultaneously.\n\n - Note: The generator is called *serially* on a *background* queue.\n - Warning: Refer to the warnings on `when(fulfilled:)`\n - Parameter promiseGenerator: Generator of promises.\n - Returns: A new promise that resolves when all the provided promises fulfill or one of the provided promises rejects.\n - SeeAlso: `when(resolved:)`\n */\n\npublic func when<It: IteratorProtocol>(fulfilled promiseIterator: It, concurrently: Int) -> Promise<[It.Element.T]> where It.Element: Thenable {\n\n    guard concurrently > 0 else {\n        return Promise(error: PMKError.badInput)\n    }\n\n    var generator = promiseIterator\n    var root = Promise<[It.Element.T]>.pending()\n    var pendingPromises = 0\n    var promises: [It.Element] = []\n\n    let barrier = DispatchQueue(label: \"org.promisekit.barrier.when\", attributes: [.concurrent])\n\n    func dequeue() {\n        guard root.promise.isPending else { return }  // don’t continue dequeueing if root has been rejected\n\n        var shouldDequeue = false\n        barrier.sync {\n            shouldDequeue = pendingPromises < concurrently\n        }\n        guard shouldDequeue else { return }\n\n        var index: Int!\n        var promise: It.Element!\n\n        barrier.sync(flags: .barrier) {\n            guard let next = generator.next() else { return }\n\n            promise = next\n            index = promises.count\n\n            pendingPromises += 1\n            promises.append(next)\n        }\n\n        func testDone() {\n            barrier.sync {\n                if pendingPromises == 0 {\n                  #if !swift(>=3.3) || (swift(>=4) && !swift(>=4.1))\n                    root.resolver.fulfill(promises.flatMap{ $0.value })\n                  #else\n                    root.resolver.fulfill(promises.compactMap{ $0.value })\n                  #endif\n                }\n            }\n        }\n\n        guard promise != nil else {\n            return testDone()\n        }\n\n        promise.pipe { resolution in\n            barrier.sync(flags: .barrier) {\n                pendingPromises -= 1\n            }\n\n            switch resolution {\n            case .fulfilled:\n                dequeue()\n                testDone()\n            case .rejected(let error):\n                root.resolver.reject(error)\n            }\n        }\n\n        dequeue()\n    }\n        \n    dequeue()\n\n    return root.promise\n}\n\n/**\n Waits on all provided promises.\n\n `when(fulfilled:)` rejects as soon as one of the provided promises rejects. `when(resolved:)` waits on all provided promises whatever their result, and then provides an array of `Result<T>` so you can individually inspect the results. As a consequence this function returns a `Guarantee`, ie. errors are lifted from the individual promises into the results array of the returned `Guarantee`.\n\n     when(resolved: promise1, promise2, promise3).then { results in\n         for result in results where case .fulfilled(let value) {\n            //…\n         }\n     }.catch { error in\n         // invalid! Never rejects\n     }\n\n - Returns: A new promise that resolves once all the provided promises resolve. The array is ordered the same as the input, ie. the result order is *not* resolution order.\n - Note: we do not provide tuple variants for `when(resolved:)` but will accept a pull-request\n - Remark: Doesn't take Thenable due to protocol `associatedtype` paradox\n*/\npublic func when<T>(resolved promises: Promise<T>...) -> Guarantee<[Result<T>]> {\n    return when(resolved: promises)\n}\n\n/// - See: `when(resolved: Promise<T>...)`\npublic func when<T>(resolved promises: [Promise<T>]) -> Guarantee<[Result<T>]> {\n    guard !promises.isEmpty else {\n        return .value([])\n    }\n\n    var countdown = promises.count\n    let barrier = DispatchQueue(label: \"org.promisekit.barrier.join\", attributes: .concurrent)\n\n    let rg = Guarantee<[Result<T>]>(.pending)\n    for promise in promises {\n        promise.pipe { result in\n            barrier.sync(flags: .barrier) {\n                countdown -= 1\n            }\n            barrier.sync {\n                if countdown == 0 {\n                    rg.box.seal(promises.map{ $0.result! })\n                }\n            }\n        }\n    }\n    return rg\n}\n\n/// Waits on all provided Guarantees.\npublic func when(_ guarantees: Guarantee<Void>...) -> Guarantee<Void> {\n    return when(guarantees: guarantees)\n}\n\n// Waits on all provided Guarantees.\npublic func when(guarantees: [Guarantee<Void>]) -> Guarantee<Void> {\n    return when(fulfilled: guarantees).recover{ _ in }.asVoid()\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕Version-1.0.3/Version+Codable.swift",
    "content": "extension Version: Codable {\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.singleValueContainer()\n        let s = try container.decode(String.self)\n        guard let v = Version(s) else {\n            throw DecodingError.dataCorruptedError(in: container, debugDescription: \"Invalid semantic version\")\n        }\n        self = v\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.singleValueContainer()\n        try container.encode(description)\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕Version-1.0.3/Version+Comparable.swift",
    "content": "extension Version: Comparable {\n    func isEqualWithoutPrerelease(_ other: Version) -> Bool {\n        return major == other.major && minor == other.minor && patch == other.patch\n    }\n\n    /**\n     `1.0.0` is less than `1.0.1`, `1.0.1-alpha` is less than `1.0.1` but\n     greater than `1.0.0`.\n     - Returns: `true` if `lhs` is less than `rhs`\n     */\n    public static func < (lhs: Version, rhs: Version) -> Bool {\n        let lhsComparators = [lhs.major, lhs.minor, lhs.patch]\n        let rhsComparators = [rhs.major, rhs.minor, rhs.patch]\n\n        if lhsComparators != rhsComparators {\n            return lhsComparators.lexicographicallyPrecedes(rhsComparators)\n        }\n\n        guard lhs.prereleaseIdentifiers.count > 0 else {\n            return false // Non-prerelease lhs >= potentially prerelease rhs\n        }\n\n        guard rhs.prereleaseIdentifiers.count > 0 else {\n            return true // Prerelease lhs < non-prerelease rhs\n        }\n\n        let zippedIdentifiers = zip(lhs.prereleaseIdentifiers, rhs.prereleaseIdentifiers)\n        for (lhsPrereleaseIdentifier, rhsPrereleaseIdentifier) in zippedIdentifiers {\n            if lhsPrereleaseIdentifier == rhsPrereleaseIdentifier {\n                continue\n            }\n\n            let typedLhsIdentifier: Any = Int(lhsPrereleaseIdentifier) ?? lhsPrereleaseIdentifier\n            let typedRhsIdentifier: Any = Int(rhsPrereleaseIdentifier) ?? rhsPrereleaseIdentifier\n\n            switch (typedLhsIdentifier, typedRhsIdentifier) {\n                case let (int1 as Int, int2 as Int): return int1 < int2\n                case let (string1 as String, string2 as String): return string1 < string2\n                case (is Int, is String): return true // Int prereleases < String prereleases\n                case (is String, is Int): return false\n            default:\n                fatalError(\"impossi-op\")\n            }\n        }\n\n        return lhs.prereleaseIdentifiers.count < rhs.prereleaseIdentifiers.count\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕Version-1.0.3/Version+Foundation.swift",
    "content": "import struct Foundation.OperatingSystemVersion\nimport class Foundation.ProcessInfo\nimport class Foundation.Bundle\n\n/// An extension to Bundle that provides Versions\npublic extension Bundle {\n    /**\n     The version of the bundle.\n     - Remark: We use a tolerant parser, so strings like `10.1` or even `3` will parse.\n     - Note: Uses the value for the key `CFBundleShortVersionString`.\n     - Important: Returns `0.0.0` (`Version.null`) if result is absent or invalid.\n    */\n    var version: Version {\n        return (Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String).flatMap(Version.init(tolerant:)) ?? .null\n    }\n}\n\n/// An extension to ProcessInfo that provides Versions\npublic extension ProcessInfo {\n    /// The version of the operating system on which the process is executing.\n    @available(OSX, introduced: 10.10)\n    @available(iOS, introduced: 8.0)\n    var osVersion: Version {\n        //NOTE cannot call “super” from an extension that replaces that method\n        // tried to use keypaths but couldn’t. This way we are not making the\n        // method ambiguous anyway, so probably better.\n        let v: OperatingSystemVersion = operatingSystemVersion\n        return Version(major: v.majorVersion, minor: v.minorVersion, patch: v.patchVersion)\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕Version-1.0.3/Version+Range.swift",
    "content": "extension ClosedRange where Bound == Version {\n    /**\n     - Returns: `true` if the provided Version exists within this range.\n     - Important: Returns `false` if `version` has prerelease identifiers unless\n     the range *also* contains prerelease identifiers.\n     */\n    public func contains(_ version: Version) -> Bool {\n        // Special cases if version contains prerelease identifiers.\n        if !version.prereleaseIdentifiers.isEmpty, lowerBound.prereleaseIdentifiers.isEmpty && upperBound.prereleaseIdentifiers.isEmpty {\n            // If the range does not contain prerelease identifiers, return false.\n            return false\n        }\n\n        // Otherwise, apply normal contains rules.\n        return version >= lowerBound && version <= upperBound\n    }\n}\n\nextension Range where Bound == Version {\n    /**\n     - Returns: `true` if the provided Version exists within this range.\n     - Important: Returns `false` if `version` has prerelease identifiers unless\n     the range *also* contains prerelease identifiers.\n     */\n    public func contains(_ version: Version) -> Bool {\n        // Special cases if version contains prerelease identifiers.\n        if !version.prereleaseIdentifiers.isEmpty {\n            // If the range does not contain prerelease identifiers, return false.\n            if lowerBound.prereleaseIdentifiers.isEmpty && upperBound.prereleaseIdentifiers.isEmpty {\n                return false\n            }\n\n            // At this point, one of the bounds contains prerelease identifiers.\n            // Reject 2.0.0-alpha when upper bound is 2.0.0.\n            if upperBound.prereleaseIdentifiers.isEmpty && upperBound.isEqualWithoutPrerelease(version) {\n                return false\n            }\n        }\n\n        // Otherwise, apply normal contains rules.\n        return version >= lowerBound && version < upperBound\n    }\n}\n"
  },
  {
    "path": "Dependencies/mxcl∕Version-1.0.3/Version.swift",
    "content": "/*\n This source file was modified by Max Howell from its original\n form that was part of the Swift open source project.\n\n This source file is part of the Swift.org open source project\n\n Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors\n Licensed under Apache License v2.0 with Runtime Library Exception\n\n See http://swift.org/LICENSE.txt for license information\n See http://swift.org/CONTRIBUTORS.txt for Swift project authors\n*/\n\n/**\n A struct representing a “semver” version, that is: a Semantic Version.\n - SeeAlso: https://semver.org\n */\npublic struct Version: Hashable {\n    /// The major version.\n    public let major: Int\n\n    /// The minor version.\n    public let minor: Int\n\n    /// The patch version.\n    public let patch: Int\n\n    /// The pre-release identifiers (if any).\n    public let prereleaseIdentifiers: [String]\n\n    /// The build metadatas (if any).\n    public let buildMetadataIdentifiers: [String]\n\n    /**\n     Create a version object.\n     - Note: Integers are made absolute since negative integers are not allowed, yet it is conventional Swift to take `Int` over `UInt` where possible.\n     - Remark: This initializer variant provided for more readable code when initializing with static integers.\n     */\n    @inlinable\n    public init(_ major: Int, _ minor: Int, _ patch: Int, prereleaseIdentifiers: [String] = [], buildMetadataIdentifiers: [String] = []) {\n        self.major = abs(major)\n        self.minor = abs(minor)\n        self.patch = abs(patch)\n        self.prereleaseIdentifiers = prereleaseIdentifiers\n        self.buildMetadataIdentifiers = buildMetadataIdentifiers\n\n        if major < 0 || minor < 0 || patch < 0 {\n            print(\"warning: negative component in version: \\(major).\\(minor).\\(patch)\")\n            print(\"notice: negative components were abs’d\")\n        }\n    }\n\n    /**\n     Creates a version object.\n     - Note: Integers are made absolute since negative integers are not allowed, yet it is conventional Swift to take `Int` over `UInt` where possible.\n     - Remark: This initializer variant provided when it would be more readable than the nameless variant.\n     */\n    @inlinable\n    public init(major: Int, minor: Int, patch: Int, prereleaseIdentifiers: [String] = [], buildMetadataIdentifiers: [String] = []) {\n        self.init(major, minor, patch, prereleaseIdentifiers: prereleaseIdentifiers, buildMetadataIdentifiers: buildMetadataIdentifiers)\n    }\n\n    /// Represents `0.0.0`\n    public static let null = Version(0,0,0)\n}\n\nextension Version: LosslessStringConvertible {\n    /**\n     Creates a version object from a string.\n     - Note: Returns `nil` if the string is not a valid semantic version.\n     - Parameter string: The string to parse.\n     */\n    public init?(_ string: String) {\n        let prereleaseStartIndex = string.firstIndex(of: \"-\")\n        let metadataStartIndex = string.firstIndex(of: \"+\")\n\n        let requiredEndIndex = prereleaseStartIndex ?? metadataStartIndex ?? string.endIndex\n        let requiredCharacters = string.prefix(upTo: requiredEndIndex)\n        let requiredComponents = requiredCharacters\n            .split(separator: \".\", maxSplits: 2, omittingEmptySubsequences: false)\n            .compactMap{ Int($0) }\n\n        guard requiredComponents.count == 3 else { return nil }\n\n        self.major = requiredComponents[0]\n        self.minor = requiredComponents[1]\n        self.patch = requiredComponents[2]\n\n        func identifiers(start: String.Index?, end: String.Index) -> [String] {\n            guard let start = start else { return [] }\n            let identifiers = string[string.index(after: start)..<end]\n            return identifiers.split(separator: \".\").map(String.init)\n        }\n\n        self.prereleaseIdentifiers = identifiers(\n            start: prereleaseStartIndex,\n            end: metadataStartIndex ?? string.endIndex)\n        self.buildMetadataIdentifiers = identifiers(\n            start: metadataStartIndex,\n            end: string.endIndex)\n    }\n\n    /// Returns the lossless string representation of this semantic version.\n    public var description: String {\n        var base = \"\\(major).\\(minor).\\(patch)\"\n        if !prereleaseIdentifiers.isEmpty {\n            base += \"-\" + prereleaseIdentifiers.joined(separator: \".\")\n        }\n        if !buildMetadataIdentifiers.isEmpty {\n            base += \"+\" + buildMetadataIdentifiers.joined(separator: \".\")\n        }\n        return base\n    }\n}\n\npublic extension Version {\n    /**\n     Creates a version object.\n     - Remark: This initializer variant uses a more tolerant parser, eg. `10.1` parses to `Version(10,1,0)`.\n     - Remark: This initializer will not recognizer builds-metadata-identifiers.\n     - Remark: Tolerates an initial `v` character.\n     */\n    init?(tolerant: String) {\n        let string: Substring\n        if tolerant.first == \"v\" {\n            string = tolerant.dropFirst()\n        } else {\n            string = Substring(tolerant)\n        }\n\n        let prereleaseStartIndex = string.firstIndex(of: \"-\")\n        let requiredEndIndex = prereleaseStartIndex ?? string.endIndex\n        let requiredCharacters = string.prefix(upTo: requiredEndIndex)\n        let maybes = requiredCharacters.split(separator: \".\", maxSplits: 2, omittingEmptySubsequences: false).map{ Int($0) }\n\n        guard !maybes.contains(nil), 1...3 ~= maybes.count else {\n            return nil\n        }\n\n        var requiredComponents = maybes.map{ $0! }\n        while requiredComponents.count < 3 {\n            requiredComponents.append(0)\n        }\n\n        major = requiredComponents[0]\n        minor = requiredComponents[1]\n        patch = requiredComponents[2]\n\n        if let prereleaseStartIndex = prereleaseStartIndex {\n            let identifiers = string[string.index(after: prereleaseStartIndex)..<string.endIndex]\n            prereleaseIdentifiers = identifiers.split(separator: \".\").map(String.init)\n        } else {\n            prereleaseIdentifiers = []\n        }\n        buildMetadataIdentifiers = []\n    }\n}\n"
  },
  {
    "path": "Dependencies/soffes∕HotKey-0.1.1/HotKey.swift",
    "content": "//\n//  HotKey.swift\n//  HotKey\n//\n//  Created by Sam Soffes on 7/21/17.\n//  Copyright © 2017 Sam Soffes. All rights reserved.\n//\n\nimport AppKit\nimport Carbon\n\npublic final class HotKey {\n\n\t// MARK: - Types\n\n\tpublic typealias Handler = () -> Void\n\n\t\n\t// MARK: - Properties\n\n\tlet identifier = UUID()\n\n\tpublic let keyCombo: KeyCombo\n\tpublic var keyDownHandler: Handler?\n\tpublic var keyUpHandler: Handler?\n    public var isPaused = false {\n        didSet {\n            if isPaused {\n                HotKeysController.unregister(self)\n            } else {\n                HotKeysController.register(self)\n            }\n        }\n    }\n\n\n\t// MARK: - Initializers\n\n\tpublic init(keyCombo: KeyCombo, keyDownHandler: Handler? = nil, keyUpHandler: Handler? = nil) {\n\t\tself.keyCombo = keyCombo\n\t\tself.keyDownHandler = keyDownHandler\n\t\tself.keyUpHandler = keyUpHandler\n\n\t\tHotKeysController.register(self)\n\t}\n\n\tpublic convenience init(carbonKeyCode: UInt32, carbonModifiers: UInt32, keyDownHandler: Handler? = nil, keyUpHandler: Handler? = nil) {\n\t\tlet keyCombo = KeyCombo(carbonKeyCode: carbonKeyCode, carbonModifiers: carbonModifiers)\n\t\tself.init(keyCombo: keyCombo, keyDownHandler: keyDownHandler, keyUpHandler: keyUpHandler)\n\t}\n\n\tpublic convenience init(key: Key, modifiers: NSEvent.ModifierFlags, keyDownHandler: Handler? = nil, keyUpHandler: Handler? = nil) {\n\t\tlet keyCombo = KeyCombo(key: key, modifiers: modifiers)\n\t\tself.init(keyCombo: keyCombo, keyDownHandler: keyDownHandler, keyUpHandler: keyUpHandler)\n\t}\n\n\tdeinit {\n\t\tHotKeysController.unregister(self)\n\t}\n}\n"
  },
  {
    "path": "Dependencies/soffes∕HotKey-0.1.1/HotKeysController.swift",
    "content": "//\n//  HotKeysController.swift\n//  HotKey\n//\n//  Created by Sam Soffes on 7/21/17.\n//  Copyright © 2017 Sam Soffes. All rights reserved.\n//\n\nimport Carbon\n\nfinal class HotKeysController {\n\n\t// MARK: - Types\n\n\tfinal class HotKeyBox {\n\t\tlet identifier: UUID\n\t\tweak var hotKey: HotKey?\n\t\tlet carbonHotKeyID: UInt32\n\t\tvar carbonEventHotKey: EventHotKeyRef?\n\n\t\tinit(hotKey: HotKey, carbonHotKeyID: UInt32) {\n\t\t\tself.identifier = hotKey.identifier\n\t\t\tself.hotKey = hotKey\n\t\t\tself.carbonHotKeyID = carbonHotKeyID\n\t\t}\n\t}\n\n\n\t// MARK: - Properties\n\n\tstatic var hotKeys = [UInt32: HotKeyBox]()\n\tstatic private var hotKeysCount: UInt32 = 0\n\n\tstatic let eventHotKeySignature: UInt32 = {\n\t\tlet string = \"SSHk\"\n\t\tvar result: FourCharCode = 0\n\t\tfor char in string.utf16 {\n\t\t\tresult = (result << 8) + FourCharCode(char)\n\t\t}\n\t\treturn result\n\t}()\n\n\tprivate static let eventSpec = [\n\t\tEventTypeSpec(eventClass: OSType(kEventClassKeyboard), eventKind: UInt32(kEventHotKeyPressed)),\n\t\tEventTypeSpec(eventClass: OSType(kEventClassKeyboard), eventKind: UInt32(kEventHotKeyReleased))\n\t]\n\n\tprivate static var eventHandler: EventHandlerRef?\n\n\n\t// MARK: - Registration\n\n\tstatic func register(_ hotKey: HotKey) {\n        // Don't register an already registered HotKey\n        if hotKeys.values.first(where: { $0.identifier == hotKey.identifier }) != nil {\n            return\n        }\n\n\t\t// Increment the count which will become out next ID\n\t\thotKeysCount += 1\n\n\t\t// Create a box for our metadata and weak HotKey\n\t\tlet box = HotKeyBox(hotKey: hotKey, carbonHotKeyID: hotKeysCount)\n\t\thotKeys[box.carbonHotKeyID] = box\n\n\t\t// Register with the system\n\t\tvar eventHotKey: EventHotKeyRef?\n\t\tlet hotKeyID = EventHotKeyID(signature: eventHotKeySignature, id: box.carbonHotKeyID)\n\t\tlet registerError = RegisterEventHotKey(\n\t\t\thotKey.keyCombo.carbonKeyCode,\n\t\t\thotKey.keyCombo.carbonModifiers,\n\t\t\thotKeyID,\n\t\t\tGetEventDispatcherTarget(),\n\t\t\t0,\n\t\t\t&eventHotKey\n\t\t)\n\n\t\t// Ensure registration worked\n\t\tguard registerError == noErr, eventHotKey != nil else {\n\t\t\treturn\n\t\t}\n\n\t\t// Store the event so we can unregister it later\n\t\tbox.carbonEventHotKey = eventHotKey\n\n\t\t// Setup the event handler if needed\n\t\tupdateEventHandler()\n\t}\n\n\tstatic func unregister(_ hotKey: HotKey) {\n\t\t// Find the box\n\t\tguard let box = self.box(for: hotKey) else {\n\t\t\treturn\n\t\t}\n\n\t\t// Unregister the hot key\n\t\tUnregisterEventHotKey(box.carbonEventHotKey)\n\n\t\t// Destroy the box\n\t\tbox.hotKey = nil\n\t\thotKeys.removeValue(forKey: box.carbonHotKeyID)\n\t}\n\n\n\t// MARK: - Events\n\n\tstatic func handleCarbonEvent(_ event: EventRef?) -> OSStatus {\n\t\t// Ensure we have an event\n\t\tguard let event = event else {\n\t\t\treturn OSStatus(eventNotHandledErr)\n\t\t}\n\n\t\t// Get the hot key ID from the event\n\t\tvar hotKeyID = EventHotKeyID()\n\t\tlet error = GetEventParameter(\n\t\t\tevent,\n\t\t\tUInt32(kEventParamDirectObject),\n\t\t\tUInt32(typeEventHotKeyID),\n\t\t\tnil,\n\t\t\tMemoryLayout<EventHotKeyID>.size,\n\t\t\tnil,\n\t\t\t&hotKeyID\n\t\t)\n\n\t\tif error != noErr {\n\t\t\treturn error\n\t\t}\n\n\t\t// Ensure we have a HotKey registered for this ID\n\t\tguard hotKeyID.signature == eventHotKeySignature,\n\t\t\tlet hotKey = self.hotKey(for: hotKeyID.id)\n\t\telse {\n\t\t\treturn OSStatus(eventNotHandledErr)\n\t\t}\n\n\t\t// Call the handler\n\t\tswitch GetEventKind(event) {\n\t\tcase UInt32(kEventHotKeyPressed):\n\t\t\tif !hotKey.isPaused, let handler = hotKey.keyDownHandler {\n\t\t\t\thandler()\n\t\t\t\treturn noErr\n\t\t\t}\n\t\tcase UInt32(kEventHotKeyReleased):\n\t\t\tif !hotKey.isPaused, let handler = hotKey.keyUpHandler {\n\t\t\t\thandler()\n\t\t\t\treturn noErr\n\t\t\t}\n\t\tdefault:\n\t\t\tbreak\n\t\t}\n\n\t\treturn OSStatus(eventNotHandledErr)\n\t}\n\n\tprivate static func updateEventHandler() {\n\t\tif hotKeysCount == 0 || eventHandler != nil {\n\t\t\treturn\n\t\t}\n\n\t\t// Register for key down and key up\n\t\tlet eventSpec = [\n\t\t\tEventTypeSpec(eventClass: OSType(kEventClassKeyboard), eventKind: UInt32(kEventHotKeyPressed)),\n\t\t\tEventTypeSpec(eventClass: OSType(kEventClassKeyboard), eventKind: UInt32(kEventHotKeyReleased))\n\t\t]\n\n\t\t// Install the handler\n\t\tInstallEventHandler(GetEventDispatcherTarget(), hotKeyEventHandler, 2, eventSpec, nil, &eventHandler)\n\t}\n\n\n\t// MARK: - Querying\n\n\tprivate static func hotKey(for carbonHotKeyID: UInt32) -> HotKey? {\n\t\tif let hotKey = hotKeys[carbonHotKeyID]?.hotKey {\n\t\t\treturn hotKey\n\t\t}\n\n\t\thotKeys.removeValue(forKey: carbonHotKeyID)\n\t\treturn nil\n\t}\n\n\tprivate static func box(for hotKey: HotKey) -> HotKeyBox? {\n\t\tfor box in hotKeys.values {\n\t\t\tif box.identifier == hotKey.identifier {\n\t\t\t\treturn box\n\t\t\t}\n\t\t}\n\n\t\treturn nil\n\t}\n}\n\n\nprivate func hotKeyEventHandler(eventHandlerCall: EventHandlerCallRef?, event: EventRef?, userData: UnsafeMutableRawPointer?) -> OSStatus {\n\treturn HotKeysController.handleCarbonEvent(event)\n}\n"
  },
  {
    "path": "Dependencies/soffes∕HotKey-0.1.1/Key.swift",
    "content": "//\n//  Key.swift\n//  HotKey\n//\n//  Created by Sam Soffes on 7/21/17.\n//  Copyright © 2017 Sam Soffes. All rights reserved.\n//\n\nimport Carbon\n\npublic enum Key {\n\tcase a\n\tcase s\n\tcase d\n\tcase f\n\tcase h\n\tcase g\n\tcase z\n\tcase x\n\tcase c\n\tcase v\n\tcase b\n\tcase q\n\tcase w\n\tcase e\n\tcase r\n\tcase y\n\tcase t\n\tcase one\n\tcase two\n\tcase three\n\tcase four\n\tcase six\n\tcase five\n\tcase equal\n\tcase nine\n\tcase seven\n\tcase minus\n\tcase eight\n\tcase zero\n\tcase rightBracket\n\tcase o\n\tcase u\n\tcase leftBracket\n\tcase i\n\tcase p\n\tcase l\n\tcase j\n\tcase quote\n\tcase k\n\tcase semicolon\n\tcase backslash\n\tcase comma\n\tcase slash\n\tcase n\n\tcase m\n\tcase period\n\tcase grave\n\tcase keypadDecimal\n\tcase keypadMultiply\n\tcase keypadPlus\n\tcase keypadClear\n\tcase keypadDivide\n\tcase keypadEnter\n\tcase keypadMinus\n\tcase keypadEquals\n\tcase keypad0\n\tcase keypad1\n\tcase keypad2\n\tcase keypad3\n\tcase keypad4\n\tcase keypad5\n\tcase keypad6\n\tcase keypad7\n\tcase keypad8\n\tcase keypad9\n\tcase `return`\n\tcase tab\n\tcase space\n\tcase delete\n\tcase escape\n\tcase command\n\tcase shift\n\tcase capsLock\n\tcase option\n\tcase control\n\tcase rightCommand\n\tcase rightShift\n\tcase rightOption\n\tcase rightControl\n\tcase function\n\tcase f17\n\tcase volumeUp\n\tcase volumeDown\n\tcase mute\n\tcase f18\n\tcase f19\n\tcase f20\n\tcase f5\n\tcase f6\n\tcase f7\n\tcase f3\n\tcase f8\n\tcase f9\n\tcase f11\n\tcase f13\n\tcase f16\n\tcase f14\n\tcase f10\n\tcase f12\n\tcase f15\n\tcase help\n\tcase home\n\tcase pageUp\n\tcase forwardDelete\n\tcase f4\n\tcase end\n\tcase f2\n\tcase pageDown\n\tcase f1\n\tcase leftArrow\n\tcase rightArrow\n\tcase downArrow\n\tcase upArrow\n\n\tpublic init?(string: String) {\n\t\tswitch string.lowercased() {\n\t\tcase \"a\": self = .a\n\t\tcase \"s\": self = .s\n\t\tcase \"d\": self = .d\n\t\tcase \"f\": self = .f\n\t\tcase \"h\": self = .h\n\t\tcase \"g\": self = .g\n\t\tcase \"z\": self = .z\n\t\tcase \"x\": self = .x\n\t\tcase \"c\": self = .c\n\t\tcase \"v\": self = .v\n\t\tcase \"b\": self = .b\n\t\tcase \"q\": self = .q\n\t\tcase \"w\": self = .w\n\t\tcase \"e\": self = .e\n\t\tcase \"r\": self = .r\n\t\tcase \"y\": self = .y\n\t\tcase \"t\": self = .t\n\t\tcase \"one\", \"1\": self = .one\n\t\tcase \"two\", \"2\": self = .two\n\t\tcase \"three\", \"3\": self = .three\n\t\tcase \"four\", \"4\": self = .four\n\t\tcase \"six\", \"6\": self = .six\n\t\tcase \"five\", \"5\": self = .five\n\t\tcase \"equal\", \"=\": self = .equal\n\t\tcase \"nine\", \"9\": self = .nine\n\t\tcase \"seven\", \"7\": self = .seven\n\t\tcase \"minus\", \"-\": self = .minus\n\t\tcase \"eight\", \"8\": self = .eight\n\t\tcase \"zero\", \"0\": self = .zero\n\t\tcase \"rightBracket\": self = .rightBracket\n\t\tcase \"o\": self = .o\n\t\tcase \"u\": self = .u\n\t\tcase \"leftBracket\": self = .leftBracket\n\t\tcase \"i\": self = .i\n\t\tcase \"p\": self = .p\n\t\tcase \"l\": self = .l\n\t\tcase \"j\": self = .j\n\t\tcase \"quote\", \"\\\"\": self = .quote\n\t\tcase \"k\": self = .k\n\t\tcase \"semicolon\", \";\": self = .semicolon\n\t\tcase \"backslash\", \"\\\\\": self = .backslash\n\t\tcase \"comma\", \",\": self = .comma\n\t\tcase \"slash\", \"/\": self = .slash\n\t\tcase \"n\": self = .n\n\t\tcase \"m\": self = .m\n\t\tcase \"period\", \".\": self = .period\n\t\tcase \"grave\": self = .grave\n\t\tcase \"keypaddecimal\": self = .keypadDecimal\n\t\tcase \"keypadmultiply\": self = .keypadMultiply\n\t\tcase \"keypadplus\": self = .keypadPlus\n\t\tcase \"keypadclear\": self = .keypadClear\n\t\tcase \"keypaddivide\": self = .keypadDivide\n\t\tcase \"keypadenter\": self = .keypadEnter\n\t\tcase \"keypadminus\": self = .keypadMinus\n\t\tcase \"keypadequals\": self = .keypadEquals\n\t\tcase \"keypad0\": self = .keypad0\n\t\tcase \"keypad1\": self = .keypad1\n\t\tcase \"keypad2\": self = .keypad2\n\t\tcase \"keypad3\": self = .keypad3\n\t\tcase \"keypad4\": self = .keypad4\n\t\tcase \"keypad5\": self = .keypad5\n\t\tcase \"keypad6\": self = .keypad6\n\t\tcase \"keypad7\": self = .keypad7\n\t\tcase \"keypad8\": self = .keypad8\n\t\tcase \"keypad9\": self = .keypad9\n\t\tcase \"return\", \"\\r\": self = .return\n\t\tcase \"tab\", \"\\t\": self = .tab\n\t\tcase \"space\", \" \": self = .space\n\t\tcase \"delete\": self = .delete\n\t\tcase \"escape\": self = .escape\n\t\tcase \"command\": self = .command\n\t\tcase \"shift\": self = .shift\n\t\tcase \"capsLock\": self = .capsLock\n\t\tcase \"option\": self = .option\n\t\tcase \"control\": self = .control\n\t\tcase \"rightcommand\": self = .rightCommand\n\t\tcase \"rightshift\": self = .rightShift\n\t\tcase \"rightoption\": self = .rightOption\n\t\tcase \"rightcontrol\": self = .rightControl\n\t\tcase \"function\": self = .function\n\t\tcase \"f17\": self = .f17\n\t\tcase \"volumeup\": self = .volumeUp\n\t\tcase \"volumedown\": self = .volumeDown\n\t\tcase \"mute\": self = .mute\n\t\tcase \"f18\": self = .f18\n\t\tcase \"f19\": self = .f19\n\t\tcase \"f20\": self = .f20\n\t\tcase \"f5\": self = .f5\n\t\tcase \"f6\": self = .f6\n\t\tcase \"f7\": self = .f7\n\t\tcase \"f3\": self = .f3\n\t\tcase \"f8\": self = .f8\n\t\tcase \"f9\": self = .f9\n\t\tcase \"f11\": self = .f11\n\t\tcase \"f13\": self = .f13\n\t\tcase \"f16\": self = .f16\n\t\tcase \"f14\": self = .f14\n\t\tcase \"f10\": self = .f10\n\t\tcase \"f12\": self = .f12\n\t\tcase \"f15\": self = .f15\n\t\tcase \"help\": self = .help\n\t\tcase \"home\": self = .home\n\t\tcase \"pageup\": self = .pageUp\n\t\tcase \"forwarddelete\": self = .forwardDelete\n\t\tcase \"f4\": self = .f4\n\t\tcase \"end\": self = .end\n\t\tcase \"f2\": self = .f2\n\t\tcase \"pagedown\": self = .pageDown\n\t\tcase \"f1\": self = .f1\n\t\tcase \"leftarrow\": self = .leftArrow\n\t\tcase \"rightarrow\": self = .rightArrow\n\t\tcase \"downarrow\": self = .downArrow\n\t\tcase \"uparrow\": self = .upArrow\n\t\tdefault: return nil\n\t\t}\n\t}\n\n\tpublic init?(carbonKeyCode: UInt32) {\n\t\tswitch carbonKeyCode {\n\t\tcase UInt32(kVK_ANSI_A): self = .a\n\t\tcase UInt32(kVK_ANSI_S): self = .s\n\t\tcase UInt32(kVK_ANSI_D): self = .d\n\t\tcase UInt32(kVK_ANSI_F): self = .f\n\t\tcase UInt32(kVK_ANSI_H): self = .h\n\t\tcase UInt32(kVK_ANSI_G): self = .g\n\t\tcase UInt32(kVK_ANSI_Z): self = .z\n\t\tcase UInt32(kVK_ANSI_X): self = .x\n\t\tcase UInt32(kVK_ANSI_C): self = .c\n\t\tcase UInt32(kVK_ANSI_V): self = .v\n\t\tcase UInt32(kVK_ANSI_B): self = .b\n\t\tcase UInt32(kVK_ANSI_Q): self = .q\n\t\tcase UInt32(kVK_ANSI_W): self = .w\n\t\tcase UInt32(kVK_ANSI_E): self = .e\n\t\tcase UInt32(kVK_ANSI_R): self = .r\n\t\tcase UInt32(kVK_ANSI_Y): self = .y\n\t\tcase UInt32(kVK_ANSI_T): self = .t\n\t\tcase UInt32(kVK_ANSI_1): self = .one\n\t\tcase UInt32(kVK_ANSI_2): self = .two\n\t\tcase UInt32(kVK_ANSI_3): self = .three\n\t\tcase UInt32(kVK_ANSI_4): self = .four\n\t\tcase UInt32(kVK_ANSI_6): self = .six\n\t\tcase UInt32(kVK_ANSI_5): self = .five\n\t\tcase UInt32(kVK_ANSI_Equal): self = .equal\n\t\tcase UInt32(kVK_ANSI_9): self = .nine\n\t\tcase UInt32(kVK_ANSI_7): self = .seven\n\t\tcase UInt32(kVK_ANSI_Minus): self = .minus\n\t\tcase UInt32(kVK_ANSI_8): self = .eight\n\t\tcase UInt32(kVK_ANSI_0): self = .zero\n\t\tcase UInt32(kVK_ANSI_RightBracket): self = .rightBracket\n\t\tcase UInt32(kVK_ANSI_O): self = .o\n\t\tcase UInt32(kVK_ANSI_U): self = .u\n\t\tcase UInt32(kVK_ANSI_LeftBracket): self = .leftBracket\n\t\tcase UInt32(kVK_ANSI_I): self = .i\n\t\tcase UInt32(kVK_ANSI_P): self = .p\n\t\tcase UInt32(kVK_ANSI_L): self = .l\n\t\tcase UInt32(kVK_ANSI_J): self = .j\n\t\tcase UInt32(kVK_ANSI_Quote): self = .quote\n\t\tcase UInt32(kVK_ANSI_K): self = .k\n\t\tcase UInt32(kVK_ANSI_Semicolon): self = .semicolon\n\t\tcase UInt32(kVK_ANSI_Backslash): self = .backslash\n\t\tcase UInt32(kVK_ANSI_Comma): self = .comma\n\t\tcase UInt32(kVK_ANSI_Slash): self = .slash\n\t\tcase UInt32(kVK_ANSI_N): self = .n\n\t\tcase UInt32(kVK_ANSI_M): self = .m\n\t\tcase UInt32(kVK_ANSI_Period): self = .period\n\t\tcase UInt32(kVK_ANSI_Grave): self = .grave\n\t\tcase UInt32(kVK_ANSI_KeypadDecimal): self = .keypadDecimal\n\t\tcase UInt32(kVK_ANSI_KeypadMultiply): self = .keypadMultiply\n\t\tcase UInt32(kVK_ANSI_KeypadPlus): self = .keypadPlus\n\t\tcase UInt32(kVK_ANSI_KeypadClear): self = .keypadClear\n\t\tcase UInt32(kVK_ANSI_KeypadDivide): self = .keypadDivide\n\t\tcase UInt32(kVK_ANSI_KeypadEnter): self = .keypadEnter\n\t\tcase UInt32(kVK_ANSI_KeypadMinus): self = .keypadMinus\n\t\tcase UInt32(kVK_ANSI_KeypadEquals): self = .keypadEquals\n\t\tcase UInt32(kVK_ANSI_Keypad0): self = .keypad0\n\t\tcase UInt32(kVK_ANSI_Keypad1): self = .keypad1\n\t\tcase UInt32(kVK_ANSI_Keypad2): self = .keypad2\n\t\tcase UInt32(kVK_ANSI_Keypad3): self = .keypad3\n\t\tcase UInt32(kVK_ANSI_Keypad4): self = .keypad4\n\t\tcase UInt32(kVK_ANSI_Keypad5): self = .keypad5\n\t\tcase UInt32(kVK_ANSI_Keypad6): self = .keypad6\n\t\tcase UInt32(kVK_ANSI_Keypad7): self = .keypad7\n\t\tcase UInt32(kVK_ANSI_Keypad8): self = .keypad8\n\t\tcase UInt32(kVK_ANSI_Keypad9): self = .keypad9\n\t\tcase UInt32(kVK_Return): self = .`return`\n\t\tcase UInt32(kVK_Tab): self = .tab\n\t\tcase UInt32(kVK_Space): self = .space\n\t\tcase UInt32(kVK_Delete): self = .delete\n\t\tcase UInt32(kVK_Escape): self = .escape\n\t\tcase UInt32(kVK_Command): self = .command\n\t\tcase UInt32(kVK_Shift): self = .shift\n\t\tcase UInt32(kVK_CapsLock): self = .capsLock\n\t\tcase UInt32(kVK_Option): self = .option\n\t\tcase UInt32(kVK_Control): self = .control\n\t\tcase UInt32(kVK_RightCommand): self = .rightCommand\n\t\tcase UInt32(kVK_RightShift): self = .rightShift\n\t\tcase UInt32(kVK_RightOption): self = .rightOption\n\t\tcase UInt32(kVK_RightControl): self = .rightControl\n\t\tcase UInt32(kVK_Function): self = .function\n\t\tcase UInt32(kVK_F17): self = .f17\n\t\tcase UInt32(kVK_VolumeUp): self = .volumeUp\n\t\tcase UInt32(kVK_VolumeDown): self = .volumeDown\n\t\tcase UInt32(kVK_Mute): self = .mute\n\t\tcase UInt32(kVK_F18): self = .f18\n\t\tcase UInt32(kVK_F19): self = .f19\n\t\tcase UInt32(kVK_F20): self = .f20\n\t\tcase UInt32(kVK_F5): self = .f5\n\t\tcase UInt32(kVK_F6): self = .f6\n\t\tcase UInt32(kVK_F7): self = .f7\n\t\tcase UInt32(kVK_F3): self = .f3\n\t\tcase UInt32(kVK_F8): self = .f8\n\t\tcase UInt32(kVK_F9): self = .f9\n\t\tcase UInt32(kVK_F11): self = .f11\n\t\tcase UInt32(kVK_F13): self = .f13\n\t\tcase UInt32(kVK_F16): self = .f16\n\t\tcase UInt32(kVK_F14): self = .f14\n\t\tcase UInt32(kVK_F10): self = .f10\n\t\tcase UInt32(kVK_F12): self = .f12\n\t\tcase UInt32(kVK_F15): self = .f15\n\t\tcase UInt32(kVK_Help): self = .help\n\t\tcase UInt32(kVK_Home): self = .home\n\t\tcase UInt32(kVK_PageUp): self = .pageUp\n\t\tcase UInt32(kVK_ForwardDelete): self = .forwardDelete\n\t\tcase UInt32(kVK_F4): self = .f4\n\t\tcase UInt32(kVK_End): self = .end\n\t\tcase UInt32(kVK_F2): self = .f2\n\t\tcase UInt32(kVK_PageDown): self = .pageDown\n\t\tcase UInt32(kVK_F1): self = .f1\n\t\tcase UInt32(kVK_LeftArrow): self = .leftArrow\n\t\tcase UInt32(kVK_RightArrow): self = .rightArrow\n\t\tcase UInt32(kVK_DownArrow): self = .downArrow\n\t\tcase UInt32(kVK_UpArrow): self = .upArrow\n\t\tdefault: return nil\n\t\t}\n\t}\n\t\n\tpublic var carbonKeyCode: UInt32 {\n\t\tswitch self {\n\t\tcase .a: return UInt32(kVK_ANSI_A)\n\t\tcase .s: return UInt32(kVK_ANSI_S)\n\t\tcase .d: return UInt32(kVK_ANSI_D)\n\t\tcase .f: return UInt32(kVK_ANSI_F)\n\t\tcase .h: return UInt32(kVK_ANSI_H)\n\t\tcase .g: return UInt32(kVK_ANSI_G)\n\t\tcase .z: return UInt32(kVK_ANSI_Z)\n\t\tcase .x: return UInt32(kVK_ANSI_X)\n\t\tcase .c: return UInt32(kVK_ANSI_C)\n\t\tcase .v: return UInt32(kVK_ANSI_V)\n\t\tcase .b: return UInt32(kVK_ANSI_B)\n\t\tcase .q: return UInt32(kVK_ANSI_Q)\n\t\tcase .w: return UInt32(kVK_ANSI_W)\n\t\tcase .e: return UInt32(kVK_ANSI_E)\n\t\tcase .r: return UInt32(kVK_ANSI_R)\n\t\tcase .y: return UInt32(kVK_ANSI_Y)\n\t\tcase .t: return UInt32(kVK_ANSI_T)\n\t\tcase .one: return UInt32(kVK_ANSI_1)\n\t\tcase .two: return UInt32(kVK_ANSI_2)\n\t\tcase .three: return UInt32(kVK_ANSI_3)\n\t\tcase .four: return UInt32(kVK_ANSI_4)\n\t\tcase .six: return UInt32(kVK_ANSI_6)\n\t\tcase .five: return UInt32(kVK_ANSI_5)\n\t\tcase .equal: return UInt32(kVK_ANSI_Equal)\n\t\tcase .nine: return UInt32(kVK_ANSI_9)\n\t\tcase .seven: return UInt32(kVK_ANSI_7)\n\t\tcase .minus: return UInt32(kVK_ANSI_Minus)\n\t\tcase .eight: return UInt32(kVK_ANSI_8)\n\t\tcase .zero: return UInt32(kVK_ANSI_0)\n\t\tcase .rightBracket: return UInt32(kVK_ANSI_RightBracket)\n\t\tcase .o: return UInt32(kVK_ANSI_O)\n\t\tcase .u: return UInt32(kVK_ANSI_U)\n\t\tcase .leftBracket: return UInt32(kVK_ANSI_LeftBracket)\n\t\tcase .i: return UInt32(kVK_ANSI_I)\n\t\tcase .p: return UInt32(kVK_ANSI_P)\n\t\tcase .l: return UInt32(kVK_ANSI_L)\n\t\tcase .j: return UInt32(kVK_ANSI_J)\n\t\tcase .quote: return UInt32(kVK_ANSI_Quote)\n\t\tcase .k: return UInt32(kVK_ANSI_K)\n\t\tcase .semicolon: return UInt32(kVK_ANSI_Semicolon)\n\t\tcase .backslash: return UInt32(kVK_ANSI_Backslash)\n\t\tcase .comma: return UInt32(kVK_ANSI_Comma)\n\t\tcase .slash: return UInt32(kVK_ANSI_Slash)\n\t\tcase .n: return UInt32(kVK_ANSI_N)\n\t\tcase .m: return UInt32(kVK_ANSI_M)\n\t\tcase .period: return UInt32(kVK_ANSI_Period)\n\t\tcase .grave: return UInt32(kVK_ANSI_Grave)\n\t\tcase .keypadDecimal: return UInt32(kVK_ANSI_KeypadDecimal)\n\t\tcase .keypadMultiply: return UInt32(kVK_ANSI_KeypadMultiply)\n\t\tcase .keypadPlus: return UInt32(kVK_ANSI_KeypadPlus)\n\t\tcase .keypadClear: return UInt32(kVK_ANSI_KeypadClear)\n\t\tcase .keypadDivide: return UInt32(kVK_ANSI_KeypadDivide)\n\t\tcase .keypadEnter: return UInt32(kVK_ANSI_KeypadEnter)\n\t\tcase .keypadMinus: return UInt32(kVK_ANSI_KeypadMinus)\n\t\tcase .keypadEquals: return UInt32(kVK_ANSI_KeypadEquals)\n\t\tcase .keypad0: return UInt32(kVK_ANSI_Keypad0)\n\t\tcase .keypad1: return UInt32(kVK_ANSI_Keypad1)\n\t\tcase .keypad2: return UInt32(kVK_ANSI_Keypad2)\n\t\tcase .keypad3: return UInt32(kVK_ANSI_Keypad3)\n\t\tcase .keypad4: return UInt32(kVK_ANSI_Keypad4)\n\t\tcase .keypad5: return UInt32(kVK_ANSI_Keypad5)\n\t\tcase .keypad6: return UInt32(kVK_ANSI_Keypad6)\n\t\tcase .keypad7: return UInt32(kVK_ANSI_Keypad7)\n\t\tcase .keypad8: return UInt32(kVK_ANSI_Keypad8)\n\t\tcase .keypad9: return UInt32(kVK_ANSI_Keypad9)\n\t\tcase .`return`: return UInt32(kVK_Return)\n\t\tcase .tab: return UInt32(kVK_Tab)\n\t\tcase .space: return UInt32(kVK_Space)\n\t\tcase .delete: return UInt32(kVK_Delete)\n\t\tcase .escape: return UInt32(kVK_Escape)\n\t\tcase .command: return UInt32(kVK_Command)\n\t\tcase .shift: return UInt32(kVK_Shift)\n\t\tcase .capsLock: return UInt32(kVK_CapsLock)\n\t\tcase .option: return UInt32(kVK_Option)\n\t\tcase .control: return UInt32(kVK_Control)\n\t\tcase .rightCommand: return UInt32(kVK_RightCommand)\n\t\tcase .rightShift: return UInt32(kVK_RightShift)\n\t\tcase .rightOption: return UInt32(kVK_RightOption)\n\t\tcase .rightControl: return UInt32(kVK_RightControl)\n\t\tcase .function: return UInt32(kVK_Function)\n\t\tcase .f17: return UInt32(kVK_F17)\n\t\tcase .volumeUp: return UInt32(kVK_VolumeUp)\n\t\tcase .volumeDown: return UInt32(kVK_VolumeDown)\n\t\tcase .mute: return UInt32(kVK_Mute)\n\t\tcase .f18: return UInt32(kVK_F18)\n\t\tcase .f19: return UInt32(kVK_F19)\n\t\tcase .f20: return UInt32(kVK_F20)\n\t\tcase .f5: return UInt32(kVK_F5)\n\t\tcase .f6: return UInt32(kVK_F6)\n\t\tcase .f7: return UInt32(kVK_F7)\n\t\tcase .f3: return UInt32(kVK_F3)\n\t\tcase .f8: return UInt32(kVK_F8)\n\t\tcase .f9: return UInt32(kVK_F9)\n\t\tcase .f11: return UInt32(kVK_F11)\n\t\tcase .f13: return UInt32(kVK_F13)\n\t\tcase .f16: return UInt32(kVK_F16)\n\t\tcase .f14: return UInt32(kVK_F14)\n\t\tcase .f10: return UInt32(kVK_F10)\n\t\tcase .f12: return UInt32(kVK_F12)\n\t\tcase .f15: return UInt32(kVK_F15)\n\t\tcase .help: return UInt32(kVK_Help)\n\t\tcase .home: return UInt32(kVK_Home)\n\t\tcase .pageUp: return UInt32(kVK_PageUp)\n\t\tcase .forwardDelete: return UInt32(kVK_ForwardDelete)\n\t\tcase .f4: return UInt32(kVK_F4)\n\t\tcase .end: return UInt32(kVK_End)\n\t\tcase .f2: return UInt32(kVK_F2)\n\t\tcase .pageDown: return UInt32(kVK_PageDown)\n\t\tcase .f1: return UInt32(kVK_F1)\n\t\tcase .leftArrow: return UInt32(kVK_LeftArrow)\n\t\tcase .rightArrow: return UInt32(kVK_RightArrow)\n\t\tcase .downArrow: return UInt32(kVK_DownArrow)\n\t\tcase .upArrow: return UInt32(kVK_UpArrow)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Dependencies/soffes∕HotKey-0.1.1/KeyCombo.swift",
    "content": "//\n//  CarbonKeyCombo.swift\n//  HotKey\n//\n//  Created by Sam Soffes on 7/21/17.\n//  Copyright © 2017 Sam Soffes. All rights reserved.\n//\n\nimport AppKit\n\npublic struct KeyCombo {\n\n\t// MARK: - Properties\n\n\tpublic var carbonKeyCode: UInt32\n\tpublic var carbonModifiers: UInt32\n\n\tpublic var key: Key? {\n\t\tget {\n\t\t\treturn Key(carbonKeyCode: carbonKeyCode)\n\t\t}\n\n\t\tset {\n\t\t\tcarbonKeyCode = newValue?.carbonKeyCode ?? 0\n\t\t}\n\t}\n\n\tpublic var modifiers: NSEvent.ModifierFlags {\n\t\tget {\n\t\t\treturn NSEvent.ModifierFlags(carbonFlags: carbonModifiers)\n\t\t}\n\n\t\tset {\n\t\t\tcarbonModifiers = modifiers.carbonFlags\n\t\t}\n\t}\n\n\tpublic var isValid: Bool {\n\t\treturn carbonKeyCode >= 0\n\t}\n\n\n\t// MARK: - Initializers\n\n\tpublic init(carbonKeyCode: UInt32, carbonModifiers: UInt32 = 0) {\n\t\tself.carbonKeyCode = carbonKeyCode\n\t\tself.carbonModifiers = carbonModifiers\n\t}\n\n\tpublic init(key: Key, modifiers: NSEvent.ModifierFlags = []) {\n\t\tself.carbonKeyCode = key.carbonKeyCode\n\t\tself.carbonModifiers = modifiers.carbonFlags\n\t}\n\n\n\t// MARK: - Converting Keys\n\n\tpublic static func carbonKeyCodeToString(_ carbonKeyCode: UInt32) -> String? {\n\t\treturn nil\n\t}\n}\n\n\nextension KeyCombo {\n\tpublic var dictionary: [String: Any] {\n\t\treturn [\n\t\t\t\"keyCode\": Int(carbonKeyCode),\n\t\t\t\"modifiers\": Int(carbonModifiers)\n\t\t]\n\t}\n\n\tpublic init?(dictionary: [String: Any]) {\n\t\tguard let keyCode = dictionary[\"keyCode\"] as? Int,\n\t\t\tlet modifiers = dictionary[\"modifiers\"] as? Int\n\t\telse {\n\t\t\treturn nil\n\t\t}\n\n\t\tself.init(carbonKeyCode: UInt32(keyCode), carbonModifiers: UInt32(modifiers))\n\t}\n}\n\n\nextension KeyCombo: Equatable {\n\tpublic static func == (lhs: KeyCombo, rhs: KeyCombo) -> Bool {\n\t\treturn lhs.carbonKeyCode == rhs.carbonKeyCode && lhs.carbonModifiers == rhs.carbonModifiers\n\t}\n}\n"
  },
  {
    "path": "Dependencies/soffes∕HotKey-0.1.1/NSEventModifierFlags+HotKey.swift",
    "content": "//\n//  NSEventModifierFlags+HotKey.swift\n//  HotKey\n//\n//  Created by Sam Soffes on 7/21/17.\n//  Copyright © 2017 Sam Soffes. All rights reserved.\n//\n\nimport AppKit\nimport Carbon\n\nextension NSEvent.ModifierFlags {\n\tpublic var carbonFlags: UInt32 {\n\t\tvar carbonFlags: UInt32 = 0\n\n\t\tif contains(.command) {\n\t\t\tcarbonFlags |= UInt32(cmdKey)\n\t\t}\n\n\t\tif contains(.option) {\n\t\t\tcarbonFlags |= UInt32(optionKey)\n\t\t}\n\n\t\tif contains(.control) {\n\t\t\tcarbonFlags |= UInt32(controlKey)\n\t\t}\n\n\t\tif contains(.shift) {\n\t\t\tcarbonFlags |= UInt32(shiftKey)\n\t\t}\n\n\t\treturn carbonFlags\n\t}\n\n\tpublic init(carbonFlags: UInt32) {\n\t\tself.init()\n\n\t\tif carbonFlags & UInt32(cmdKey) == UInt32(cmdKey) {\n\t\t\tinsert(.command)\n\t\t}\n\n\t\tif carbonFlags & UInt32(optionKey) == UInt32(optionKey) {\n\t\t\tinsert(.option)\n\t\t}\n\n\t\tif carbonFlags & UInt32(controlKey) == UInt32(controlKey) {\n\t\t\tinsert(.control)\n\t\t}\n\n\t\tif carbonFlags & UInt32(shiftKey) == UInt32(shiftKey) {\n\t\t\tinsert(.shift)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Dependencies/tadija∕AEXML-4.3.3/Document.swift",
    "content": "/**\n *  https://github.com/tadija/AEXML\n *  Copyright (c) Marko Tadić 2014-2018\n *  Licensed under the MIT license. See LICENSE file.\n */\n\nimport Foundation\n\n/**\n    This class is inherited from `AEXMLElement` and has a few addons to represent **XML Document**.\n\n    XML Parsing is also done with this object.\n*/\nopen class AEXMLDocument: AEXMLElement {\n    \n    // MARK: - Properties\n    \n    /// Root (the first child element) element of XML Document **(Empty element with error if not exists)**.\n    open var root: AEXMLElement {\n        guard let rootElement = children.first else {\n            let errorElement = AEXMLElement(name: \"Error\")\n            errorElement.error = AEXMLError.rootElementMissing\n            return errorElement\n        }\n        return rootElement\n    }\n    \n    public let options: AEXMLOptions\n    \n    // MARK: - Lifecycle\n    \n    /**\n        Designated initializer - Creates and returns new XML Document object.\n     \n        - parameter root: Root XML element for XML Document (defaults to `nil`).\n        - parameter options: Options for XML Document header and parser settings (defaults to `AEXMLOptions()`).\n    \n        - returns: Initialized XML Document object.\n    */\n    public init(root: AEXMLElement? = nil, options: AEXMLOptions = AEXMLOptions()) {\n        self.options = options\n        \n        let documentName = String(describing: AEXMLDocument.self)\n        super.init(name: documentName)\n        \n        // document has no parent element\n        parent = nil\n        \n        // add root element to document (if any)\n        if let rootElement = root {\n            _ = addChild(rootElement)\n        }\n    }\n    \n    /**\n        Convenience initializer - used for parsing XML data (by calling `loadXMLData:` internally).\n     \n        - parameter xmlData: XML data to parse.\n        - parameter options: Options for XML Document header and parser settings (defaults to `AEXMLOptions()`).\n    \n        - returns: Initialized XML Document object containing parsed data. Throws error if data could not be parsed.\n    */\n    public convenience init(xml: Data, options: AEXMLOptions = AEXMLOptions()) throws {\n        self.init(options: options)\n        try loadXML(xml)\n    }\n    \n    /**\n        Convenience initializer - used for parsing XML string (by calling `init(xmlData:options:)` internally).\n\n        - parameter xmlString: XML string to parse.\n        - parameter encoding: String encoding for creating `Data` from `xmlString` (defaults to `String.Encoding.utf8`)\n        - parameter options: Options for XML Document header and parser settings (defaults to `AEXMLOptions()`).\n\n        - returns: Initialized XML Document object containing parsed data. Throws error if data could not be parsed.\n    */\n    public convenience init(xml: String,\n                            encoding: String.Encoding = String.Encoding.utf8,\n                            options: AEXMLOptions = AEXMLOptions()) throws {\n        guard let data = xml.data(using: encoding) else { throw AEXMLError.parsingFailed }\n        try self.init(xml: data, options: options)\n    }\n    \n    // MARK: - Parse XML\n    \n    /**\n        Creates instance of `AEXMLParser` (private class which is simple wrapper around `XMLParser`)\n        and starts parsing the given XML data. Throws error if data could not be parsed.\n    \n        - parameter data: XML which should be parsed.\n    */\n    open func loadXML(_ data: Data) throws {\n        children.removeAll(keepingCapacity: false)\n        let xmlParser = AEXMLParser(document: self, data: data)\n        try xmlParser.parse()\n    }\n    \n    // MARK: - Override\n    \n    /// Override of `xml` property of `AEXMLElement` - it just inserts XML Document header at the beginning.\n    open override var xml: String {\n        var xml =  \"\\(options.documentHeader.xmlString)\\n\"\n        xml += root.xml\n        return xml\n    }\n    \n}\n"
  },
  {
    "path": "Dependencies/tadija∕AEXML-4.3.3/Element.swift",
    "content": "/**\n *  https://github.com/tadija/AEXML\n *  Copyright (c) Marko Tadić 2014-2018\n *  Licensed under the MIT license. See LICENSE file.\n */\n\nimport Foundation\n\n/**\n    This is base class for holding XML structure.\n\n    You can access its structure by using subscript like this: `element[\"foo\"][\"bar\"]` which would\n    return `<bar></bar>` element from `<element><foo><bar></bar></foo></element>` XML as an `AEXMLElement` object.\n*/\nopen class AEXMLElement {\n    \n    // MARK: - Properties\n    \n    /// Every `AEXMLElement` should have its parent element instead of `AEXMLDocument` which parent is `nil`.\n    open internal(set) weak var parent: AEXMLElement?\n    \n    /// Child XML elements.\n    open internal(set) var children = [AEXMLElement]()\n    \n    /// XML Element name.\n    open var name: String\n    \n    /// XML Element value.\n    open var value: String?\n    \n    /// XML Element attributes.\n    open var attributes: [String : String]\n    \n    /// Error value (`nil` if there is no error).\n    open var error: AEXMLError?\n    \n    /// String representation of `value` property (if `value` is `nil` this is empty String).\n    open var string: String { return value ?? String() }\n    \n    /// Boolean representation of `value` property (`nil` if `value` can't be represented as Bool).\n    open var bool: Bool? { return Bool(string) }\n    \n    /// Integer representation of `value` property (`nil` if `value` can't be represented as Integer).\n    open var int: Int? { return Int(string) }\n    \n    /// Double representation of `value` property (`nil` if `value` can't be represented as Double).\n    open var double: Double? { return Double(string) }\n    \n    // MARK: - Lifecycle\n    \n    /**\n        Designated initializer - all parameters are optional.\n    \n        - parameter name: XML element name.\n        - parameter value: XML element value (defaults to `nil`).\n        - parameter attributes: XML element attributes (defaults to empty dictionary).\n    \n        - returns: An initialized `AEXMLElement` object.\n    */\n    public init(name: String, value: String? = nil, attributes: [String : String] = [String : String]()) {\n        self.name = name\n        self.value = value\n        self.attributes = attributes\n    }\n    \n    // MARK: - XML Read\n    \n    /// The first element with given name **(Empty element with error if not exists)**.\n    open subscript(key: String) -> AEXMLElement {\n        guard let\n            first = children.first(where: { $0.name == key })\n        else {\n            let errorElement = AEXMLElement(name: key)\n            errorElement.error = AEXMLError.elementNotFound\n            return errorElement\n        }\n        return first\n    }\n    \n    /// Returns all of the elements with equal name as `self` **(nil if not exists)**.\n    open var all: [AEXMLElement]? { return parent?.children.filter { $0.name == self.name } }\n    \n    /// Returns the first element with equal name as `self` **(nil if not exists)**.\n    open var first: AEXMLElement? { return all?.first }\n    \n    /// Returns the last element with equal name as `self` **(nil if not exists)**.\n    open var last: AEXMLElement? { return all?.last }\n    \n    /// Returns number of all elements with equal name as `self`.\n    open var count: Int { return all?.count ?? 0 }\n    \n    /**\n        Returns all elements with given value.\n        \n        - parameter value: XML element value.\n        \n        - returns: Optional Array of found XML elements.\n    */\n    open func all(withValue value: String) -> [AEXMLElement]? {\n        let found = all?.compactMap {\n            $0.value == value ? $0 : nil\n        }\n        return found\n    }\n    \n    /**\n        Returns all elements containing given attributes.\n\n        - parameter attributes: Array of attribute names.\n\n        - returns: Optional Array of found XML elements.\n    */\n    open func all(containingAttributeKeys keys: [String]) -> [AEXMLElement]? {\n        let found = all?.compactMap { element in\n            keys.reduce(true) { (result, key) in\n                result && Array(element.attributes.keys).contains(key)\n            } ? element : nil\n        }\n        return found\n    }\n    \n    /**\n        Returns all elements with given attributes.\n    \n        - parameter attributes: Dictionary of Keys and Values of attributes.\n    \n        - returns: Optional Array of found XML elements.\n    */\n    open func all(withAttributes attributes: [String : String]) -> [AEXMLElement]? {\n        let keys = Array(attributes.keys)\n        let found = all(containingAttributeKeys: keys)?.compactMap { element in\n            attributes.reduce(true) { (result, attribute) in\n                result && element.attributes[attribute.key] == attribute.value\n            } ? element : nil\n        }\n        return found\n    }\n    \n    /**\n        Returns all descendant elements which satisfy the given predicate.\n     \n        Searching is done vertically; children are tested before siblings. Elements appear in the list\n        in the order in which they are found.\n     \n        - parameter predicate: Function which returns `true` for a desired element and `false` otherwise.\n     \n        - returns: Array of found XML elements.\n    */\n    open func allDescendants(where predicate: (AEXMLElement) -> Bool) -> [AEXMLElement] {\n        var result: [AEXMLElement] = []\n        \n        for child in children {\n            if predicate(child) {\n                result.append(child)\n            }\n            result.append(contentsOf: child.allDescendants(where: predicate))\n        }\n        \n        return result\n    }\n    \n    /**\n        Returns the first descendant element which satisfies the given predicate, or nil if no such element is found.\n     \n        Searching is done vertically; children are tested before siblings.\n     \n        - parameter predicate: Function which returns `true` for the desired element and `false` otherwise.\n     \n        - returns: Optional AEXMLElement.\n    */\n    open func firstDescendant(where predicate: (AEXMLElement) -> Bool) -> AEXMLElement? {\n        for child in children {\n            if predicate(child) {\n                return child\n            } else if let descendant = child.firstDescendant(where: predicate) {\n                return descendant\n            }\n        }\n        return nil\n    }\n    \n    /**\n        Indicates whether the element has a descendant satisfying the given predicate.\n     \n        - parameter predicate: Function which returns `true` for the desired element and `false` otherwise.\n     \n        - returns: Bool.\n    */\n    open func hasDescendant(where predicate: (AEXMLElement) -> Bool) -> Bool {\n        return firstDescendant(where: predicate) != nil\n    }\n    \n    // MARK: - XML Write\n    \n    /**\n        Adds child XML element to `self`.\n    \n        - parameter child: Child XML element to add.\n    \n        - returns: Child XML element with `self` as `parent`.\n    */\n    @discardableResult open func addChild(_ child: AEXMLElement) -> AEXMLElement {\n        child.parent = self\n        children.append(child)\n        return child\n    }\n    \n    /**\n        Adds child XML element to `self`.\n        \n        - parameter name: Child XML element name.\n        - parameter value: Child XML element value (defaults to `nil`).\n        - parameter attributes: Child XML element attributes (defaults to empty dictionary).\n        \n        - returns: Child XML element with `self` as `parent`.\n    */\n    @discardableResult open func addChild(name: String,\n                       value: String? = nil,\n                       attributes: [String : String] = [String : String]()) -> AEXMLElement {\n        let child = AEXMLElement(name: name, value: value, attributes: attributes)\n        return addChild(child)\n    }\n    \n    /**\n        Adds an array of XML elements to `self`.\n    \n        - parameter children: Child XML element array to add.\n    \n        - returns: Child XML elements with `self` as `parent`.\n    */\n    @discardableResult open func addChildren(_ children: [AEXMLElement]) -> [AEXMLElement] {\n        children.forEach{ addChild($0) }\n        return children\n    }\n    \n    /// Removes `self` from `parent` XML element.\n    open func removeFromParent() {\n        parent?.removeChild(self)\n    }\n    \n    fileprivate func removeChild(_ child: AEXMLElement) {\n        if let childIndex = children.index(where: { $0 === child }) {\n            children.remove(at: childIndex)\n        }\n    }\n    \n    fileprivate var parentsCount: Int {\n        var count = 0\n        var element = self\n        \n        while let parent = element.parent {\n            count += 1\n            element = parent\n        }\n        \n        return count\n    }\n    \n    fileprivate func indent(withDepth depth: Int) -> String {\n        var count = depth\n        var indent = String()\n        \n        while count > 0 {\n            indent += \"\\t\"\n            count -= 1\n        }\n        \n        return indent\n    }\n    \n    /// Complete hierarchy of `self` and `children` in **XML** escaped and formatted String\n    open var xml: String {\n        var xml = String()\n        \n        // open element\n        xml += indent(withDepth: parentsCount - 1)\n        xml += \"<\\(name)\"\n        \n        if attributes.count > 0 {\n            // insert attributes\n            for (key, value) in attributes {\n                xml += \" \\(key)=\\\"\\(value.xmlEscaped)\\\"\"\n            }\n        }\n        \n        if value == nil && children.count == 0 {\n            // close element\n            xml += \" />\"\n        } else {\n            if children.count > 0 {\n                // add children\n                xml += \">\\n\"\n                for child in children {\n                    xml += \"\\(child.xml)\\n\"\n                }\n                // add indentation\n                xml += indent(withDepth: parentsCount - 1)\n                xml += \"</\\(name)>\"\n            } else {\n                // insert string value and close element\n                xml += \">\\(string.xmlEscaped)</\\(name)>\"\n            }\n        }\n        \n        return xml\n    }\n    \n    /// Same as `xmlString` but without `\\n` and `\\t` characters\n    open var xmlCompact: String {\n        let chars = CharacterSet(charactersIn: \"\\n\\t\")\n        return xml.components(separatedBy: chars).joined(separator: \"\")\n    }\n    \n    /// Same as `xmlString` but with 4 spaces instead '\\t' characters\n    open var xmlSpaces: String {\n        let chars = CharacterSet(charactersIn: \"\\t\")\n        return xml.components(separatedBy: chars).joined(separator: \"    \")\n    }\n}\n\npublic extension String {\n    \n    /// String representation of self with XML special characters escaped.\n    public var xmlEscaped: String {\n        // we need to make sure \"&\" is escaped first. Not doing this may break escaping the other characters\n        var escaped = replacingOccurrences(of: \"&\", with: \"&amp;\", options: .literal)\n        \n        // replace the other four special characters\n        let escapeChars = [\"<\" : \"&lt;\", \">\" : \"&gt;\", \"'\" : \"&apos;\", \"\\\"\" : \"&quot;\"]\n        for (char, echar) in escapeChars {\n            escaped = escaped.replacingOccurrences(of: char, with: echar, options: .literal)\n        }\n        \n        return escaped\n    }\n    \n}\n"
  },
  {
    "path": "Dependencies/tadija∕AEXML-4.3.3/Error.swift",
    "content": "/**\n *  https://github.com/tadija/AEXML\n *  Copyright (c) Marko Tadić 2014-2018\n *  Licensed under the MIT license. See LICENSE file.\n */\n\nimport Foundation\n\n/// A type representing error value that can be thrown or inside `error` property of `AEXMLElement`.\npublic enum AEXMLError: Error {\n    /// This will be inside `error` property of `AEXMLElement` when subscript is used for not-existing element.\n    case elementNotFound\n    \n    /// This will be inside `error` property of `AEXMLDocument` when there is no root element.\n    case rootElementMissing\n    \n    /// `AEXMLDocument` can throw this error on `init` or `loadXMLData` if parsing with `XMLParser` was not successful.\n    case parsingFailed\n}\n"
  },
  {
    "path": "Dependencies/tadija∕AEXML-4.3.3/Options.swift",
    "content": "/**\n *  https://github.com/tadija/AEXML\n *  Copyright (c) Marko Tadić 2014-2018\n *  Licensed under the MIT license. See LICENSE file.\n */\n\nimport Foundation\n\n/// Options used in `AEXMLDocument`\npublic struct AEXMLOptions {\n    \n    /// Values used in XML Document header\n    public struct DocumentHeader {\n        /// Version value for XML Document header (defaults to 1.0).\n        public var version = 1.0\n        \n        /// Encoding value for XML Document header (defaults to \"utf-8\").\n        public var encoding = \"utf-8\"\n        \n        /// Standalone value for XML Document header (defaults to \"no\").\n        public var standalone = \"no\"\n        \n        /// XML Document header\n        public var xmlString: String {\n            return \"<?xml version=\\\"\\(version)\\\" encoding=\\\"\\(encoding)\\\" standalone=\\\"\\(standalone)\\\"?>\"\n        }\n    }\n    \n    /// Settings used by `Foundation.XMLParser`\n    public struct ParserSettings {\n        /// Parser reports the namespaces and qualified names of elements. (defaults to `false`)\n        public var shouldProcessNamespaces = false\n        \n        /// Parser reports the prefixes indicating the scope of namespace declarations. (defaults to `false`)\n        public var shouldReportNamespacePrefixes = false\n        \n        /// Parser reports declarations of external entities. (defaults to `false`)\n        public var shouldResolveExternalEntities = false\n        \n        /// Parser should trim whitespace from text nodes. (defaults to `true`)\n        public var shouldTrimWhitespace = true\n    }\n    \n    /// Values used in XML Document header (defaults to `DocumentHeader()`)\n    public var documentHeader = DocumentHeader()\n    \n    /// Settings used by `Foundation.XMLParser` (defaults to `ParserSettings()`)\n    public var parserSettings = ParserSettings()\n    \n    /// Designated initializer - Creates and returns default `AEXMLOptions`.\n    public init() {}\n    \n}\n"
  },
  {
    "path": "Dependencies/tadija∕AEXML-4.3.3/Parser.swift",
    "content": "/**\n *  https://github.com/tadija/AEXML\n *  Copyright (c) Marko Tadić 2014-2018\n *  Licensed under the MIT license. See LICENSE file.\n */\n\nimport Foundation\n\n/// Simple wrapper around `Foundation.XMLParser`.\ninternal class AEXMLParser: NSObject, XMLParserDelegate {\n    \n    // MARK: - Properties\n    \n    let document: AEXMLDocument\n    let data: Data\n    \n    var currentParent: AEXMLElement?\n    var currentElement: AEXMLElement?\n    var currentValue = String()\n    \n    var parseError: Error?\n    \n    private lazy var trimWhitespace: Bool = {\n        let trim = self.document.options.parserSettings.shouldTrimWhitespace\n        return trim\n    }()\n    \n    // MARK: - Lifecycle\n    \n    init(document: AEXMLDocument, data: Data) {\n        self.document = document\n        self.data = data\n        currentParent = document\n        \n        super.init()\n    }\n    \n    // MARK: - API\n    \n    func parse() throws {\n        let parser = XMLParser(data: data)\n        parser.delegate = self\n        \n        parser.shouldProcessNamespaces = document.options.parserSettings.shouldProcessNamespaces\n        parser.shouldReportNamespacePrefixes = document.options.parserSettings.shouldReportNamespacePrefixes\n        parser.shouldResolveExternalEntities = document.options.parserSettings.shouldResolveExternalEntities\n        \n        let success = parser.parse()\n        \n        if !success {\n            guard let error = parseError else { throw AEXMLError.parsingFailed }\n            throw error\n        }\n    }\n    \n    // MARK: - XMLParserDelegate\n    \n    func parser(_ parser: XMLParser,\n                didStartElement elementName: String,\n                namespaceURI: String?,\n                qualifiedName qName: String?,\n                attributes attributeDict: [String : String]) {\n        currentValue = String()\n        currentElement = currentParent?.addChild(name: elementName, attributes: attributeDict)\n        currentParent = currentElement\n    }\n    \n    func parser(_ parser: XMLParser, foundCharacters string: String) {\n        currentValue.append(string)\n        currentElement?.value = currentValue.isEmpty ? nil : currentValue\n    }\n    \n    func parser(_ parser: XMLParser,\n                didEndElement elementName: String,\n                namespaceURI: String?,\n                qualifiedName qName: String?) {\n        if trimWhitespace {\n            currentElement?.value = currentElement?.value?.trimmingCharacters(in: .whitespacesAndNewlines)\n        }\n        currentParent = currentParent?.parent\n        currentElement = nil\n    }\n    \n    func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) {\n        self.parseError = parseError\n    }\n    \n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Errors/Errors.swift",
    "content": "import Foundation\nimport PathKit\n\n// MARK: - Xcodeproj\n\n/// XcodeProj Errors\n///\n/// - notFound: the project cannot be found.\n/// - pbxProjNotFound: the .pbxproj file couldn't be found inside the project folder.\n/// - xcworkspaceNotFound: the workspace cannot be found at the given path.\npublic enum XCodeProjError: Error, CustomStringConvertible {\n    case notFound(path: Path)\n    case pbxprojNotFound(path: Path)\n    case xcworkspaceNotFound(path: Path)\n\n    public var description: String {\n        switch self {\n        case let .notFound(path):\n            return \"The project cannot be found at \\(path.string)\"\n        case let .pbxprojNotFound(path):\n            return \"The project doesn't contain a .pbxproj file at path: \\(path.string)\"\n        case let .xcworkspaceNotFound(path):\n            return \"The project doesn't contain a .xcworkspace at path: \\(path.string)\"\n        }\n    }\n}\n\n// MARK: - XCSharedData\n\n/// XCSharedData errors.\n///\n/// - notFound: the share data hasn't been found.\npublic enum XCSharedDataError: Error, CustomStringConvertible {\n    case notFound(path: Path)\n\n    public var description: String {\n        switch self {\n        case let .notFound(path):\n            return \"xcshareddata not found at path \\(path.string)\"\n        }\n    }\n}\n\n// MARK: - XCWorkspace\n\n/// XCWorkspace Errors\n///\n/// - notFound: the project cannot be found.\npublic enum XCWorkspaceError: Error, CustomStringConvertible {\n    case notFound(path: Path)\n\n    public var description: String {\n        switch self {\n        case let .notFound(path):\n            return \"The project cannot be found at \\(path.string)\"\n        }\n    }\n}\n\n// MARK: - XCWorkspaceData\n\n/// XCWorkspaceData Errors.\n///\n/// - notFound: returned when the .xcworkspacedata cannot be found.\npublic enum XCWorkspaceDataError: Error, CustomStringConvertible {\n    case notFound(path: Path)\n\n    public var description: String {\n        switch self {\n        case let .notFound(path):\n            return \"Workspace not found at \\(path.string)\"\n        }\n    }\n}\n\n// MARK: - Xcodeproj Editing\n\n/// Xcodeproj editing errors.\n///\n/// - unexistingFile: the file doesn't exist.\npublic enum XcodeprojEditingError: Error, CustomStringConvertible {\n    case unexistingFile(Path)\n\n    public var description: String {\n        switch self {\n        case let .unexistingFile(path):\n            return \"The file at path \\(path.string) doesn't exist\"\n        }\n    }\n}\n\n// MARK: - Xcodeproj Writing\n\n/// Xcodeproj writing error.\n///\n/// - invalidType: the type that is being written is invalid.\npublic enum XcodeprojWritingError: Error, CustomStringConvertible {\n    case invalidType(class: String, expected: String)\n\n    public var description: String {\n        switch self {\n        case let .invalidType(classType, expected):\n            return \"Invalid type for object \\(classType) that expects a \\(expected)\"\n        }\n    }\n}\n\n// MARK: - PBXObject\n\n/// PBXObject error.\n///\n/// - missingIsa: the isa attribute is missing.\n/// - unknownElement: the element that is being parsed is not supported.\n/// - objectsReleased: the project has been released or the object hasn't been added to any project.\n/// - objectNotFound: the object annot be found in the project.\n/// - orphaned: the object doesn't belong to any project.\npublic enum PBXObjectError: Error, CustomStringConvertible {\n    case missingIsa\n    case unknownElement(String)\n    case objectsReleased\n    case objectNotFound(String)\n    case orphaned(type: String, reference: String)\n\n    public var description: String {\n        switch self {\n        case .missingIsa:\n            return \"Isa property is missing.\"\n        case let .unknownElement(element):\n            return \"The element \\(element) is not supported.\"\n        case .objectsReleased:\n            return \"The PBXObjects instance has been released before saving.\"\n        case let .objectNotFound(reference):\n            return \"PBXObject with reference \\\"\\(reference)\\\" not found.\"\n        case let .orphaned(type, reference):\n            return \"Trying to use object \\(type) with reference '\\(reference)' before being added to any project\"\n        }\n    }\n}\n\n// MARK: - PBXProjEncoder\n\n/// PBXProjEncoder error.\n///\n/// - emptyProjectReference: the project reference is missing.\nenum PBXProjEncoderError: Error, CustomStringConvertible {\n    case emptyProjectReference\n\n    var description: String {\n        switch self {\n        case .emptyProjectReference:\n            return \"PBXProj should contain a reference to the XcodeProj object that represents the project\"\n        }\n    }\n}\n\n// MARK: - PBXProj\n\n/// PBXProj error.\n///\n/// - notFound: the .pbxproj cannot be found at the given path.\nenum PBXProjError: Error, CustomStringConvertible {\n    case notFound(path: Path)\n    var description: String {\n        switch self {\n        case let .notFound(path):\n            return \".pbxproj not found at path \\(path.string)\"\n        }\n    }\n}\n\n// MARK: - XCBreakpointList\n\n/// XCBreakpointList error.\n///\n/// - notFound: returned when the Breakpoints_v2.xcbkptlist cannot be found.\n/// - missing: returned when there's a property missing in the Breakpoints_v2.xcbkptlist.\npublic enum XCBreakpointListError: Error, CustomStringConvertible {\n    case notFound(path: Path)\n    case missing(property: String)\n\n    public var description: String {\n        switch self {\n        case let .notFound(path):\n            return \"Breakpoints_v2.xcbkptlist couldn't be found at path \\(path.string)\"\n        case let .missing(property):\n            return \"Property \\(property) missing\"\n        }\n    }\n}\n\n// MARK: - XCConfig\n\n/// XCConfig errors.\n///\n/// - notFound: returned when the configuration file couldn't be found.\npublic enum XCConfigError: Error, CustomStringConvertible {\n    case notFound(path: Path)\n    public var description: String {\n        switch self {\n        case let .notFound(path):\n            return \".xcconfig file not found at \\(path.string)\"\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Extensions/AEXML+XcodeFormat.swift",
    "content": "import AEXML\nimport Foundation\n\nextension AEXMLDocument {\n    var xmlXcodeFormat: String {\n        var xml = \"<?xml version=\\\"\\(options.documentHeader.version)\\\" encoding=\\\"\\(options.documentHeader.encoding.uppercased())\\\"?>\\n\"\n        xml += root._xmlXcodeFormat + \"\\n\"\n        return xml\n    }\n}\n\nlet attributesOrder: [String: [String]] = [\n    \"BuildAction\": [\n        \"parallelizeBuildables\",\n        \"buildImplicitDependencies\",\n    ],\n    \"BuildActionEntry\": [\n        \"buildForTesting\",\n        \"buildForRunning\",\n        \"buildForProfiling\",\n        \"buildForArchiving\",\n        \"buildForAnalyzing\",\n    ],\n    \"BuildableReference\": [\n        \"BuildableIdentifier\",\n        \"BlueprintIdentifier\",\n        \"BuildableName\",\n        \"BlueprintName\",\n        \"ReferencedContainer\",\n    ],\n    \"TestAction\": [\n        \"buildConfiguration\",\n        \"selectedDebuggerIdentifier\",\n        \"selectedLauncherIdentifier\",\n        \"language\",\n        \"region\",\n        \"codeCoverageEnabled\",\n        \"shouldUseLaunchSchemeArgsEnv\",\n    ],\n    \"LaunchAction\": [\n        \"buildConfiguration\",\n        \"selectedDebuggerIdentifier\",\n        \"selectedLauncherIdentifier\",\n        \"language\",\n        \"region\",\n        \"launchStyle\",\n        \"useCustomWorkingDirectory\",\n        \"ignoresPersistentStateOnLaunch\",\n        \"debugDocumentVersioning\",\n        \"debugServiceExtension\",\n        \"enableGPUFrameCaptureMode\",\n        \"enableGPUValidationMode\",\n        \"allowLocationSimulation\",\n    ],\n    \"ProfileAction\": [\n        \"buildConfiguration\",\n        \"shouldUseLaunchSchemeArgsEnv\",\n        \"savedToolIdentifier\",\n        \"useCustomWorkingDirectory\",\n        \"ignoresPersistentStateOnLaunch\",\n        \"debugDocumentVersioning\",\n        \"enableTestabilityWhenProfilingTests\",\n    ],\n    \"ActionContent\": [\n        \"title\",\n        \"scriptText\",\n    ],\n    \"EnvironmentVariable\": [\n        \"key\",\n        \"value\",\n        \"isEnabled\",\n    ],\n    \"TestableReference\": [\n        \"skipped\",\n        \"parallelizable\",\n        \"testExecutionOrdering\",\n    ],\n]\n\nextension AEXMLElement {\n    fileprivate var _xmlXcodeFormat: String {\n        var xml = String()\n\n        // open element\n        xml += indent(withDepth: parentsCount - 1)\n        xml += \"<\\(name)\"\n\n        func print(key: String, value: String) {\n            xml += \"\\n\"\n            xml += indent(withDepth: parentsCount)\n            xml += \"\\(key) = \\\"\\(value.xmlEscaped)\\\"\"\n        }\n\n        if !attributes.isEmpty {\n            // insert known attributes in the specified order.\n            var attributes = self.attributes\n            for key in attributesOrder[self.name] ?? [] {\n                if let value = attributes.removeValue(forKey: key) {\n                    print(key: key, value: value)\n                }\n            }\n\n            // Print any remaining attributes.\n            for (key, value) in attributes.sorted(by: { $0.key < $1.key }) {\n                print(key: key, value: value)\n            }\n        }\n\n        if value == nil, children.isEmpty {\n            // close element\n            xml += \">\\n\"\n        } else {\n            if !children.isEmpty {\n                // add children\n                xml += \">\\n\"\n                for child in children {\n                    xml += \"\\(child._xmlXcodeFormat)\\n\"\n                }\n            } else {\n                // insert string value and close element\n                xml += \">\\n\"\n                xml += indent(withDepth: parentsCount - 1)\n                xml += \">\\n\\(string.xmlEscaped)\"\n            }\n        }\n\n        xml += indent(withDepth: parentsCount - 1)\n        xml += \"</\\(name)>\"\n\n        return xml\n    }\n\n    private var parentsCount: Int {\n        var count = 0\n        var element = self\n\n        while let parent = element.parent {\n            count += 1\n            element = parent\n        }\n\n        return count\n    }\n\n    private func indent(withDepth depth: Int) -> String {\n        var count = depth\n        var indent = String()\n\n        while count > 0 {\n            indent += \"   \"\n            count -= 1\n        }\n\n        return indent\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Extensions/Bool+Extras.swift",
    "content": "import Foundation\n\npublic extension Bool {\n    /// Returns a XML string value that represents the boolean.\n    var xmlString: String {\n        return self ? \"YES\" : \"NO\"\n    }\n\n    /// Returns a 1 for true and 0 for false\n    var int: UInt {\n        return self ? 1 : 0\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Extensions/Dictionary+Enumerate.swift",
    "content": "import Foundation\n\nextension Dictionary {\n    func enumerateKeysAndObjects(\n        options opts: NSEnumerationOptions = [],\n        using block: (Any, Any, UnsafeMutablePointer<ObjCBool>) throws -> Void\n    ) throws {\n        var blockError: Error?\n        // For performance it is very important to create a separate dictionary instance.\n        // (self as NSDictionary).enumerateKeys... - works much slower\n        let dictionary = NSDictionary(dictionary: self)\n        dictionary.enumerateKeysAndObjects(options: opts) { key, obj, stops in\n            do {\n                try block(key, obj, stops)\n            } catch {\n                blockError = error\n                stops.pointee = true\n            }\n        }\n        if let error = blockError {\n            throw error\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Extensions/Dictionary+Extras.swift",
    "content": "import Foundation\n\n/// Static initializer that creates a Dictionary from a .plist file.\n///\n/// - Parameter path: the path of the .plist file.\n/// - Returns: initialized dictionary.\npublic func loadPlist(path: String) -> [String: AnyObject]? {\n    return NSDictionary(contentsOfFile: path) as? [String: AnyObject]\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Extensions/KeyedDecodingContainer+Additions.swift",
    "content": "import Foundation\n\nextension KeyedDecodingContainer {\n    func decode<T>(_ key: KeyedDecodingContainer.Key) throws -> T where T: Decodable {\n        return try decode(T.self, forKey: key)\n    }\n\n    func decodeIfPresent<T>(_ key: KeyedDecodingContainer.Key) throws -> T? where T: Decodable {\n        return try decodeIfPresent(T.self, forKey: key)\n    }\n\n    func decodeIntIfPresent(_ key: KeyedDecodingContainer.Key) throws -> UInt? {\n        guard let string: String = try decodeIfPresent(key) else {\n            return nil\n        }\n        return UInt(string)\n    }\n\n    func decodeIntBool(_ key: KeyedDecodingContainer.Key) throws -> Bool {\n        guard let int = try decodeIntIfPresent(key) else {\n            return false\n        }\n        return int == 1\n    }\n\n    func decodeIntBoolIfPresent(_ key: KeyedDecodingContainer.Key) throws -> Bool? {\n        guard let int = try decodeIntIfPresent(key) else {\n            return nil\n        }\n        return int == 1\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Extensions/NSRecursiveLock+Sync.swift",
    "content": "import Foundation\n\nextension NSRecursiveLock {\n    func whileLocked<T>(closure: () -> (T)) -> T {\n        lock()\n        defer {\n            unlock()\n        }\n        let value = closure()\n        return value\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Extensions/OSLog+Extras.swift",
    "content": "import Foundation\nimport os.signpost\n\nextension OSLog {\n    @available(OSX 10.12, *)\n    /// Returns an instance of OSLog with the default xcodeproj subsystem.\n    ///\n    /// - Parameter category: Category the OSLog should be initialized with.\n    /// - Returns: Initialized OSLog.\n    static func xcodeproj(category: String) -> OSLog {\n        return OSLog(subsystem: \"io.tuist.xcodeproj\", category: category)\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Extensions/Path+Extras.swift",
    "content": "import Foundation\n// swiftlint:disable all\nimport PathKit\n\n// MARK: - Path extras.\n\nlet systemGlob = Darwin.glob\n\nextension Path {\n    /// Creates a directory\n    ///\n    /// - Throws: an errof if the directory cannot be created.\n    func mkpath(withIntermediateDirectories: Bool) throws {\n        try FileManager.default.createDirectory(atPath: string, withIntermediateDirectories: withIntermediateDirectories, attributes: nil)\n    }\n\n    /// Finds files and directories using the given glob pattern.\n    ///\n    /// - Parameter pattern: glob pattern.\n    /// - Returns: found directories and files.\n    func glob(_ pattern: String) -> [Path] {\n        var gt = glob_t()\n        let cPattern = strdup((self + pattern).string)\n        defer {\n            globfree(&gt)\n            free(cPattern)\n        }\n\n        let flags = GLOB_TILDE | GLOB_BRACE | GLOB_MARK\n        if systemGlob(cPattern, flags, nil, &gt) == 0 {\n            let matchc = gt.gl_matchc\n            return (0 ..< Int(matchc)).compactMap { index in\n                if let path = String(validatingUTF8: gt.gl_pathv[index]!) {\n                    return Path(path)\n                }\n                return nil\n            }\n        }\n        return []\n    }\n\n    func relative(to path: Path) -> Path {\n        return Path(normalize().string.replacingOccurrences(of: \"\\(path.normalize().string)/\", with: \"\"))\n    }\n}\n\n// swiftlint:enable all\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Extensions/String+Utils.swift",
    "content": "import Foundation\n\n#if os(Linux)\n    import SwiftGlibc\n\n    public func arc4random_uniform(_ max: UInt32) -> Int32 {\n        return (SwiftGlibc.rand() % Int32(max - 1))\n    }\n#endif\n\nextension String {\n    public var quoted: String {\n        return \"\\\"\\(self)\\\"\"\n    }\n\n    public var isQuoted: Bool {\n        return hasPrefix(\"\\\"\") && hasSuffix(\"\\\"\")\n    }\n\n    public static func random(length: Int = 20) -> String {\n        let base = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\"\n        var randomString: String = \"\"\n\n        for _ in 0 ..< length {\n            let randomValue = arc4random_uniform(UInt32(base.count))\n            randomString += \"\\(base[base.index(base.startIndex, offsetBy: Int(randomValue))])\"\n        }\n        return randomString\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Extensions/String+md5.swift",
    "content": "// swiftlint:disable all\n//\n//  String+MD5.swift\n//  Kingfisher\n//\n// To date, adding CommonCrypto to a Swift framework is problematic. See:\n// http://stackoverflow.com/questions/25248598/importing-commoncrypto-in-a-swift-framework\n// We're using a subset and modified version of CryptoSwift as an alternative.\n// The following is an altered source version that only includes MD5. The original software can be found at:\n// https://github.com/krzyzanowskim/CryptoSwift\n// This is the original copyright notice:\n\n/*\n Copyright (C) 2014 Marcin Krzyżanowski <marcin.krzyzanowski@gmail.com>\n This software is provided 'as-is', without any express or implied warranty.\n In no event will the authors be held liable for any damages arising from the use of this software.\n Permission is granted to anyone to use this software for any purpose,including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:\n - The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation is required.\n - Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n - This notice may not be removed or altered from any source or binary distribution.\n */\n\nimport Foundation\n\nextension String {\n    var md5: String {\n        if let data = data(using: .utf8, allowLossyConversion: true) {\n            let message = data.withUnsafeBytes { bytes -> [UInt8] in\n                Array(UnsafeBufferPointer(start: bytes, count: data.count))\n            }\n\n            let MD5Calculator = MD5(message)\n            let MD5Data = MD5Calculator.calculate()\n\n            var MD5String = String()\n            for c in MD5Data {\n                MD5String += String(format: \"%02x\", c)\n            }\n            return MD5String\n\n        } else {\n            return self\n        }\n    }\n}\n\n/** array of bytes, little-endian representation */\nfunc arrayOfBytes<T>(_ value: T, length: Int? = nil) -> [UInt8] {\n    let totalBytes = length ?? (MemoryLayout<T>.size * 8)\n\n    let valuePointer = UnsafeMutablePointer<T>.allocate(capacity: 1)\n    valuePointer.pointee = value\n\n    let bytes = valuePointer.withMemoryRebound(to: UInt8.self, capacity: totalBytes) { (bytesPointer) -> [UInt8] in\n        var bytes = [UInt8](repeating: 0, count: totalBytes)\n        for j in 0 ..< min(MemoryLayout<T>.size, totalBytes) {\n            bytes[totalBytes - 1 - j] = (bytesPointer + j).pointee\n        }\n        return bytes\n    }\n\n    #if swift(>=4.1)\n        valuePointer.deinitialize(count: 1)\n        valuePointer.deallocate()\n    #else\n        valuePointer.deinitialize()\n        valuePointer.deallocate(capacity: 1)\n    #endif\n\n    return bytes\n}\n\nextension Int {\n    /** Array of bytes with optional padding (little-endian) */\n    func bytes(_ totalBytes: Int = MemoryLayout<Int>.size) -> [UInt8] {\n        return arrayOfBytes(self, length: totalBytes)\n    }\n}\n\nextension NSMutableData {\n    /** Convenient way to append bytes */\n    func appendBytes(_ arrayOfBytes: [UInt8]) {\n        append(arrayOfBytes, length: arrayOfBytes.count)\n    }\n}\n\nprotocol HashProtocol {\n    var message: [UInt8] { get }\n\n    /** Common part for hash calculation. Prepare header data. */\n    func prepare(_ len: Int) -> [UInt8]\n}\n\nextension HashProtocol {\n    func prepare(_ len: Int) -> [UInt8] {\n        var tmpMessage = message\n\n        // Step 1. Append Padding Bits\n        tmpMessage.append(0x80) // append one bit (UInt8 with one bit) to message\n\n        // append \"0\" bit until message length in bits ≡ 448 (mod 512)\n        var msgLength = tmpMessage.count\n        var counter = 0\n\n        while msgLength % len != (len - 8) {\n            counter += 1\n            msgLength += 1\n        }\n\n        tmpMessage += [UInt8](repeating: 0, count: counter)\n        return tmpMessage\n    }\n}\n\nfunc toUInt32Array(_ slice: ArraySlice<UInt8>) -> [UInt32] {\n    var result = [UInt32]()\n    result.reserveCapacity(16)\n\n    for idx in stride(from: slice.startIndex, to: slice.endIndex, by: MemoryLayout<UInt32>.size) {\n        let d0 = UInt32(slice[idx.advanced(by: 3)]) << 24\n        let d1 = UInt32(slice[idx.advanced(by: 2)]) << 16\n        let d2 = UInt32(slice[idx.advanced(by: 1)]) << 8\n        let d3 = UInt32(slice[idx])\n        let val: UInt32 = d0 | d1 | d2 | d3\n\n        result.append(val)\n    }\n    return result\n}\n\nstruct BytesIterator: IteratorProtocol {\n    let chunkSize: Int\n    let data: [UInt8]\n\n    init(chunkSize: Int, data: [UInt8]) {\n        self.chunkSize = chunkSize\n        self.data = data\n    }\n\n    var offset = 0\n\n    mutating func next() -> ArraySlice<UInt8>? {\n        let end = min(chunkSize, data.count - offset)\n        let result = data[offset ..< offset + end]\n        offset += result.count\n        return !result.isEmpty ? result : nil\n    }\n}\n\nstruct BytesSequence: Sequence {\n    let chunkSize: Int\n    let data: [UInt8]\n\n    func makeIterator() -> BytesIterator {\n        return BytesIterator(chunkSize: chunkSize, data: data)\n    }\n}\n\nfunc rotateLeft(_ value: UInt32, bits: UInt32) -> UInt32 {\n    return ((value << bits) & 0xFFFF_FFFF) | (value >> (32 - bits))\n}\n\nclass MD5: HashProtocol {\n    static let size = 16 // 128 / 8\n    let message: [UInt8]\n\n    init(_ message: [UInt8]) {\n        self.message = message\n    }\n\n    /** specifies the per-round shift amounts */\n    private let shifts: [UInt32] = [\n        7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,\n        5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,\n        4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,\n        6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21,\n    ]\n\n    /** binary integer part of the sines of integers (Radians) */\n    private let sines: [UInt32] = [\n        0xD76A_A478, 0xE8C7_B756, 0x2420_70DB, 0xC1BD_CEEE,\n        0xF57C_0FAF, 0x4787_C62A, 0xA830_4613, 0xFD46_9501,\n        0x6980_98D8, 0x8B44_F7AF, 0xFFFF_5BB1, 0x895C_D7BE,\n        0x6B90_1122, 0xFD98_7193, 0xA679_438E, 0x49B4_0821,\n        0xF61E_2562, 0xC040_B340, 0x265E_5A51, 0xE9B6_C7AA,\n        0xD62F_105D, 0x0244_1453, 0xD8A1_E681, 0xE7D3_FBC8,\n        0x21E1_CDE6, 0xC337_07D6, 0xF4D5_0D87, 0x455A_14ED,\n        0xA9E3_E905, 0xFCEF_A3F8, 0x676F_02D9, 0x8D2A_4C8A,\n        0xFFFA_3942, 0x8771_F681, 0x6D9D_6122, 0xFDE5_380C,\n        0xA4BE_EA44, 0x4BDE_CFA9, 0xF6BB_4B60, 0xBEBF_BC70,\n        0x289B_7EC6, 0xEAA1_27FA, 0xD4EF_3085, 0x4881D05,\n        0xD9D4_D039, 0xE6DB_99E5, 0x1FA2_7CF8, 0xC4AC_5665,\n        0xF429_2244, 0x432A_FF97, 0xAB94_23A7, 0xFC93_A039,\n        0x655B_59C3, 0x8F0C_CC92, 0xFFEF_F47D, 0x8584_5DD1,\n        0x6FA8_7E4F, 0xFE2C_E6E0, 0xA301_4314, 0x4E08_11A1,\n        0xF753_7E82, 0xBD3A_F235, 0x2AD7_D2BB, 0xEB86_D391,\n    ]\n\n    private let hashes: [UInt32] = [0x6745_2301, 0xEFCD_AB89, 0x98BA_DCFE, 0x1032_5476]\n\n    func calculate() -> [UInt8] {\n        var tmpMessage = prepare(64)\n        tmpMessage.reserveCapacity(tmpMessage.count + 4)\n\n        // hash values\n        var hh = hashes\n\n        // Step 2. Append Length a 64-bit representation of lengthInBits\n        let lengthInBits = (message.count * 8)\n        let lengthBytes = lengthInBits.bytes(64 / 8)\n        tmpMessage += lengthBytes.reversed()\n\n        // Process the message in successive 512-bit chunks:\n        let chunkSizeBytes = 512 / 8 // 64\n\n        for chunk in BytesSequence(chunkSize: chunkSizeBytes, data: tmpMessage) {\n            // break chunk into sixteen 32-bit words M[j], 0 ≤ j ≤ 15\n            var M = toUInt32Array(chunk)\n            assert(M.count == 16, \"Invalid array\")\n\n            // Initialize hash value for this chunk:\n            var A: UInt32 = hh[0]\n            var B: UInt32 = hh[1]\n            var C: UInt32 = hh[2]\n            var D: UInt32 = hh[3]\n\n            var dTemp: UInt32 = 0\n\n            // Main loop\n            for j in 0 ..< sines.count {\n                var g = 0\n                var F: UInt32 = 0\n\n                switch j {\n                case 0 ... 15:\n                    F = (B & C) | ((~B) & D)\n                    g = j\n                case 16 ... 31:\n                    F = (D & B) | (~D & C)\n                    g = (5 * j + 1) % 16\n                case 32 ... 47:\n                    F = B ^ C ^ D\n                    g = (3 * j + 5) % 16\n                case 48 ... 63:\n                    F = C ^ (B | (~D))\n                    g = (7 * j) % 16\n                default:\n                    break\n                }\n                dTemp = D\n                D = C\n                C = B\n                B = B &+ rotateLeft(A &+ F &+ sines[j] &+ M[g], bits: shifts[j])\n                A = dTemp\n            }\n\n            hh[0] = hh[0] &+ A\n            hh[1] = hh[1] &+ B\n            hh[2] = hh[2] &+ C\n            hh[3] = hh[3] &+ D\n        }\n\n        var result = [UInt8]()\n        result.reserveCapacity(hh.count / 4)\n\n        hh.forEach {\n            let itemLE = $0.littleEndian\n            let r1 = UInt8(itemLE & 0xFF)\n            let r2 = UInt8((itemLE >> 8) & 0xFF)\n            let r3 = UInt8((itemLE >> 16) & 0xFF)\n            let r4 = UInt8((itemLE >> 24) & 0xFF)\n            result += [r1, r2, r3, r4]\n        }\n        return result\n    }\n}\n\n// swiftlint:enable all\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/BuildPhase/BuildPhase.swift",
    "content": "import Foundation\n\n/// Enum that encapsulates all kind of build phases available in Xcode.\n///\n/// - sources: sources.\n/// - frameworks: frameworks.\n/// - resources: resources.\n/// - copyFiles: files.\n/// - runScript: scripts.\n/// - headers: headers.\n/// - carbonResources: build legacy Carbon resources.\npublic enum BuildPhase: String {\n    case sources = \"Sources\"\n    case frameworks = \"Frameworks\"\n    case resources = \"Resources\"\n    case copyFiles = \"CopyFiles\"\n    case runScript = \"Run Script\"\n    case headers = \"Headers\"\n    case carbonResources = \"Rez\"\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/BuildPhase/PBXBuildFile.swift",
    "content": "import Foundation\n\n/// This element indicates a file reference that is used in a PBXBuildPhase (either as an include or resource).\npublic final class PBXBuildFile: PBXObject {\n    // MARK: - Attributes\n\n    /// Element file reference.\n    var fileReference: PBXObjectReference?\n\n    /// Returns the file the build file refers to.\n    public var file: PBXFileElement? {\n        get {\n            return fileReference?.getObject()\n        }\n        set {\n            fileReference = newValue?.reference\n        }\n    }\n\n    /// Element settings\n    public var settings: [String: Any]?\n\n    /// The cached build phase this build file belongs to\n    weak var buildPhase: PBXBuildPhase?\n\n    // MARK: - Init\n\n    /// Initializes the build file with its attributes.\n    ///\n    /// - Parameters:\n    ///   - file: file the build file refers to.\n    ///   - settings: build file settings.\n    public init(file: PBXFileElement,\n                settings: [String: Any]? = nil) {\n        fileReference = file.reference\n        self.settings = settings\n        super.init()\n    }\n\n    // MARK: - Decodable\n\n    enum CodingKeys: String, CodingKey {\n        case fileRef\n        case settings\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let objects = decoder.context.objects\n        let objectReferenceRepository = decoder.context.objectReferenceRepository\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        if let fileRefString: String = try container.decodeIfPresent(.fileRef) {\n            fileReference = objectReferenceRepository.getOrCreate(reference: fileRefString, objects: objects)\n        }\n        settings = try container.decodeIfPresent([String: Any].self, forKey: .settings)\n        try super.init(from: decoder)\n    }\n}\n\n// MARK: - Internal Helpers\n\nextension PBXBuildFile {\n    /// Returns the name of the file the build file points to.\n    ///\n    /// - Returns: file name.\n    /// - Throws: an error if the name cannot be obtained.\n    func fileName() throws -> String? {\n        guard let fileElement: PBXFileElement = fileReference?.getObject() else { return nil }\n        return fileElement.fileName()\n    }\n\n    /// Returns the type of the build phase the build file belongs to.\n    ///\n    /// - Returns: build phase type.\n    /// - Throws: an error if this method is called before the build file is added to any project.\n    func getBuildPhase() throws -> PBXBuildPhase? {\n        if let buildPhase = buildPhase {\n            return buildPhase\n        }\n        let projectObjects = try objects()\n        if let buildPhase = projectObjects.sourcesBuildPhases.values.first(where: { $0.fileReferences.map { $0.value }.contains(reference.value) }) {\n            return buildPhase\n        } else if let buildPhase = projectObjects.frameworksBuildPhases\n            .values.first(where: { $0.fileReferences.map { $0.value }.contains(reference.value) }) {\n            return buildPhase\n        } else if let buildPhase = projectObjects\n            .resourcesBuildPhases.values\n            .first(where: { $0.fileReferences.map { $0.value }.contains(reference.value) }) {\n            return buildPhase\n        } else if let buildPhase = projectObjects.copyFilesBuildPhases\n            .values.first(where: { $0.fileReferences.map { $0.value }.contains(reference.value) }) {\n            return buildPhase\n        } else if let buildPhase = projectObjects.headersBuildPhases\n            .values.first(where: { $0.fileReferences.map { $0.value }.contains(reference.value) }) {\n            return buildPhase\n        } else if let buildPhase = projectObjects.carbonResourcesBuildPhases\n            .values.first(where: { $0.fileReferences.map { $0.value }.contains(reference.value) }) {\n            return buildPhase\n        }\n        return nil\n    }\n\n    /// Returns the name of the build phase the build file belongs to.\n    ///\n    /// - Returns: build phase name.\n    /// - Throws: an error if the name cannot be obtained.\n    func buildPhaseName() throws -> String? {\n        guard let buildPhase = try getBuildPhase() else {\n            return nil\n        }\n        return buildPhase.name()\n    }\n}\n\n// MARK: - PlistSerializable\n\n// Helper for serialize the BuildFile with associated BuildPhase\nfinal class PBXBuildPhaseFile: PlistSerializable, Equatable {\n    var multiline: Bool { return false }\n\n    let buildFile: PBXBuildFile\n    let buildPhase: PBXBuildPhase\n\n    init(buildFile: PBXBuildFile, buildPhase: PBXBuildPhase) {\n        self.buildFile = buildFile\n        self.buildPhase = buildPhase\n    }\n\n    func plistKeyAndValue(proj _: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = [:]\n        dictionary[\"isa\"] = .string(CommentedString(PBXBuildFile.isa))\n        if let fileReference = buildFile.fileReference {\n            let fileElement: PBXFileElement? = fileReference.getObject()\n            dictionary[\"fileRef\"] = .string(CommentedString(fileReference.value, comment: fileElement?.fileName()))\n        }\n        if let settings = buildFile.settings {\n            dictionary[\"settings\"] = settings.plist()\n        }\n        let comment = try buildPhase.name().flatMap({ \"\\(try buildFile.fileName() ?? \"(null)\") in \\($0)\" })\n        return (key: CommentedString(reference, comment: comment),\n                value: .dictionary(dictionary))\n    }\n\n    static func == (lhs: PBXBuildPhaseFile, rhs: PBXBuildPhaseFile) -> Bool {\n        return lhs.buildFile == rhs.buildFile && lhs.buildPhase == rhs.buildPhase\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/BuildPhase/PBXBuildPhase.swift",
    "content": "import Foundation\n\n/// An absctract class for all the build phase objects\npublic class PBXBuildPhase: PBXContainerItem {\n    /// Default build action mask.\n    public static let defaultBuildActionMask: UInt = 2_147_483_647\n\n    /// Element build action mask.\n    public var buildActionMask: UInt\n\n    /// References to build files.\n    var fileReferences: [PBXObjectReference]\n\n    /// Build files.\n    public var files: [PBXBuildFile] {\n        get {\n            return fileReferences.objects()\n        }\n        set {\n            newValue.forEach { $0.buildPhase = self }\n            fileReferences = newValue.references()\n        }\n    }\n\n    /// Paths to the input file lists.\n    /// Note: Introduced in Xcode 10\n    public var inputFileListPaths: [String]?\n\n    /// Paths to the output file lists.\n    /// Note: Introduced in Xcode 10\n    public var outputFileListPaths: [String]?\n\n    /// Element run only for deployment post processing value.\n    public var runOnlyForDeploymentPostprocessing: Bool\n\n    /// The build phase type of the build phase\n    public var buildPhase: BuildPhase {\n        fatalError(\"This property must be overriden\")\n    }\n\n    /// Initializes the build phase.\n    ///\n    /// - Parameters:\n    ///   - files: Build files.\n    ///   - inputFileListPaths: Input file lists paths.\n    ///   - outputFileListPaths: Input file list paths.\n    ///   - buildActionMask: Build action mask.\n    ///   - runOnlyForDeploymentPostprocessing: When true, it runs the build phase only for deployment post processing.\n    public init(files: [PBXBuildFile] = [],\n                inputFileListPaths: [String]? = nil,\n                outputFileListPaths: [String]? = nil,\n                buildActionMask: UInt = defaultBuildActionMask,\n                runOnlyForDeploymentPostprocessing: Bool = false) {\n        fileReferences = files.references()\n        self.inputFileListPaths = inputFileListPaths\n        self.outputFileListPaths = outputFileListPaths\n        self.buildActionMask = buildActionMask\n        self.runOnlyForDeploymentPostprocessing = runOnlyForDeploymentPostprocessing\n        super.init()\n        files.forEach { $0.buildPhase = self }\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case buildActionMask\n        case files\n        case runOnlyForDeploymentPostprocessing\n        case inputFileListPaths\n        case outputFileListPaths\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let objects = decoder.context.objects\n        let objectReferenceRepository = decoder.context.objectReferenceRepository\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        buildActionMask = try container.decodeIntIfPresent(.buildActionMask) ?? PBXBuildPhase.defaultBuildActionMask\n        let fileReferences: [String] = try container.decodeIfPresent(.files) ?? []\n        self.fileReferences = fileReferences.map({ objectReferenceRepository.getOrCreate(reference: $0, objects: objects) })\n        inputFileListPaths = try container.decodeIfPresent(.inputFileListPaths)\n        outputFileListPaths = try container.decodeIfPresent(.outputFileListPaths)\n        runOnlyForDeploymentPostprocessing = try container.decodeIntBool(.runOnlyForDeploymentPostprocessing)\n        try super.init(from: decoder)\n    }\n\n    override func plistValues(proj: PBXProj, reference: String) throws -> [CommentedString: PlistValue] {\n        var dictionary = try super.plistValues(proj: proj, reference: reference)\n        dictionary[\"buildActionMask\"] = .string(CommentedString(\"\\(buildActionMask)\"))\n        let files: PlistValue = .array(fileReferences.map { fileReference in\n            let buildFile: PBXBuildFile? = fileReference.getObject()\n            let name = buildFile.flatMap { try? $0.fileName() } ?? nil\n            let fileName: String = name ?? \"(null)\"\n            let type = self.name()\n            let comment = (type.flatMap { \"\\(fileName) in \\($0)\" }) ?? name\n            return .string(CommentedString(fileReference.value, comment: comment))\n        })\n        dictionary[\"files\"] = files\n        if let inputFileListPaths = inputFileListPaths {\n            dictionary[\"inputFileListPaths\"] = .array(inputFileListPaths.map({ .string(CommentedString($0)) }))\n        }\n        if let outputFileListPaths = outputFileListPaths {\n            dictionary[\"outputFileListPaths\"] = .array(outputFileListPaths.map({ .string(CommentedString($0)) }))\n        }\n        dictionary[\"runOnlyForDeploymentPostprocessing\"] = .string(CommentedString(\"\\(runOnlyForDeploymentPostprocessing.int)\"))\n        return dictionary\n    }\n}\n\n// MARK: - Helpers\n\npublic extension PBXBuildPhase {\n    /// Adds a file to a build phase, creating a proxy build file that points to the given file element.\n    ///\n    /// - Parameter file: file element to be added to the build phase.\n    /// - Returns: proxy build file.\n    /// - Throws: an error if the file cannot be added.\n    func add(file: PBXFileElement) throws -> PBXBuildFile {\n        if let existing = files.first(where: { $0.fileReference == file.reference }) {\n            return existing\n        }\n        let projectObjects = try objects()\n        let buildFile = PBXBuildFile(file: file)\n        projectObjects.add(object: buildFile)\n        files.append(buildFile)\n        return buildFile\n    }\n}\n\n// MARK: - Utils\n\nextension PBXBuildPhase {\n    /// Returns the build phase type.\n    ///\n    /// - Returns: build phase type.\n    public func type() -> BuildPhase? {\n        return buildPhase\n    }\n\n    /// Build phase name.\n    ///\n    /// - Returns: build phase name.\n    func name() -> String? {\n        if self is PBXSourcesBuildPhase {\n            return \"Sources\"\n        } else if self is PBXFrameworksBuildPhase {\n            return \"Frameworks\"\n        } else if self is PBXResourcesBuildPhase {\n            return \"Resources\"\n        } else if let phase = self as? PBXCopyFilesBuildPhase {\n            return phase.name ?? \"CopyFiles\"\n        } else if let phase = self as? PBXShellScriptBuildPhase {\n            return phase.name ?? \"ShellScript\"\n        } else if self is PBXHeadersBuildPhase {\n            return \"Headers\"\n        } else if self is PBXRezBuildPhase {\n            return \"Rez\"\n        }\n        return nil\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/BuildPhase/PBXBuildRule.swift",
    "content": "import Foundation\n\n/// A PBXBuildRule is used to specify a method for transforming an input file in to an output file(s).\npublic final class PBXBuildRule: PBXObject {\n    // MARK: - Attributes\n\n    /// Element compiler spec.\n    public var compilerSpec: String\n\n    /// Element file patterns.\n    public var filePatterns: String?\n\n    /// Element file type.\n    public var fileType: String\n\n    /// Element is editable.\n    public var isEditable: Bool\n\n    /// Element name.\n    public var name: String?\n\n    /// Element output files.\n    public var outputFiles: [String]\n\n    /// Element output files compiler flags.\n    public var outputFilesCompilerFlags: [String]?\n\n    /// Element script.\n    public var script: String?\n\n    // MARK: - Init\n\n    public init(compilerSpec: String,\n                fileType: String,\n                isEditable: Bool = true,\n                filePatterns: String? = nil,\n                name: String? = nil,\n                outputFiles: [String] = [],\n                outputFilesCompilerFlags: [String]? = nil,\n                script: String? = nil) {\n        self.compilerSpec = compilerSpec\n        self.filePatterns = filePatterns\n        self.fileType = fileType\n        self.isEditable = isEditable\n        self.name = name\n        self.outputFiles = outputFiles\n        self.outputFilesCompilerFlags = outputFilesCompilerFlags\n        self.script = script\n        super.init()\n    }\n\n    // MARK: - Decodable\n\n    enum CodingKeys: String, CodingKey {\n        case compilerSpec\n        case filePatterns\n        case fileType\n        case isEditable\n        case name\n        case outputFiles\n        case outputFilesCompilerFlags\n        case script\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        compilerSpec = try container.decodeIfPresent(.compilerSpec) ?? \"\"\n        filePatterns = try container.decodeIfPresent(.filePatterns)\n        fileType = try container.decodeIfPresent(.fileType) ?? \"\"\n        isEditable = try container.decodeIntBool(.isEditable)\n        name = try container.decodeIfPresent(.name)\n        outputFiles = try container.decodeIfPresent(.outputFiles) ?? []\n        outputFilesCompilerFlags = try container.decodeIfPresent(.outputFilesCompilerFlags)\n        script = try container.decodeIfPresent(.script)\n        try super.init(from: decoder)\n    }\n}\n\n// MARK: - PBXBuildRule Extension (PlistSerializable)\n\nextension PBXBuildRule: PlistSerializable {\n    var multiline: Bool { return true }\n\n    func plistKeyAndValue(proj _: PBXProj, reference: String) -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = [:]\n        dictionary[\"isa\"] = .string(CommentedString(PBXBuildRule.isa))\n        dictionary[\"compilerSpec\"] = .string(CommentedString(compilerSpec))\n        if let filePatterns = filePatterns {\n            dictionary[\"filePatterns\"] = .string(CommentedString(filePatterns))\n        }\n        dictionary[\"fileType\"] = .string(CommentedString(fileType))\n        dictionary[\"isEditable\"] = .string(CommentedString(\"\\(isEditable.int)\"))\n        if let name = name {\n            dictionary[\"name\"] = .string(CommentedString(name))\n        }\n        dictionary[\"outputFiles\"] = .array(outputFiles.map { PlistValue.string(CommentedString($0)) })\n        if let outputFilesCompilerFlags = outputFilesCompilerFlags {\n            dictionary[\"outputFilesCompilerFlags\"] = .array(outputFilesCompilerFlags.map { PlistValue.string(CommentedString($0)) })\n        }\n        if let script = script {\n            dictionary[\"script\"] = .string(CommentedString(script))\n        }\n        return (key: CommentedString(reference, comment: PBXBuildRule.isa),\n                value: .dictionary(dictionary))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/BuildPhase/PBXCopyFilesBuildPhase.swift",
    "content": "import Foundation\n\n/// This is the element for the copy file build phase.\npublic final class PBXCopyFilesBuildPhase: PBXBuildPhase {\n    public enum SubFolder: UInt, Decodable {\n        case absolutePath = 0\n        case productsDirectory = 16\n        case wrapper = 1\n        case executables = 6\n        case resources = 7\n        case javaResources = 15\n        case frameworks = 10\n        case sharedFrameworks = 11\n        case sharedSupport = 12\n        case plugins = 13\n        case other\n    }\n\n    // MARK: - Attributes\n\n    /// Element destination path\n    public var dstPath: String?\n\n    /// Element destination subfolder spec\n    public var dstSubfolderSpec: SubFolder?\n\n    /// Copy files build phase name\n    public var name: String?\n\n    public override var buildPhase: BuildPhase {\n        return .copyFiles\n    }\n\n    // MARK: - Init\n\n    /// Initializes the copy files build phase with its attributes.\n    ///\n    /// - Parameters:\n    ///   - dstPath: Destination path.\n    ///   - dstSubfolderSpec: Destination subfolder spec.\n    ///   - buildActionMask: Build action mask.\n    ///   - files: Build files to copy.\n    ///   - runOnlyForDeploymentPostprocessing: Run only for deployment post processing.\n    public init(dstPath: String? = nil,\n                dstSubfolderSpec: SubFolder? = nil,\n                name: String? = nil,\n                buildActionMask: UInt = defaultBuildActionMask,\n                files: [PBXBuildFile] = [],\n                runOnlyForDeploymentPostprocessing: Bool = false) {\n        self.dstPath = dstPath\n        self.dstSubfolderSpec = dstSubfolderSpec\n        self.name = name\n        super.init(files: files,\n                   buildActionMask: buildActionMask,\n                   runOnlyForDeploymentPostprocessing:\n                   runOnlyForDeploymentPostprocessing)\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case dstPath\n        case dstSubfolderSpec\n        case name\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        dstPath = try container.decodeIfPresent(.dstPath)\n        dstSubfolderSpec = try container.decodeIntIfPresent(.dstSubfolderSpec).flatMap(SubFolder.init)\n        name = try container.decodeIfPresent(.name)\n        try super.init(from: decoder)\n    }\n}\n\n// MARK: - PBXCopyFilesBuildPhase Extension (PlistSerializable)\n\nextension PBXCopyFilesBuildPhase: PlistSerializable {\n    func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = try plistValues(proj: proj, reference: reference)\n        dictionary[\"isa\"] = .string(CommentedString(PBXCopyFilesBuildPhase.isa))\n        if let dstPath = dstPath {\n            dictionary[\"dstPath\"] = .string(CommentedString(dstPath))\n        }\n        if let name = name {\n            dictionary[\"name\"] = .string(CommentedString(name))\n        }\n        if let dstSubfolderSpec = dstSubfolderSpec {\n            dictionary[\"dstSubfolderSpec\"] = .string(CommentedString(\"\\(dstSubfolderSpec.rawValue)\"))\n        }\n        return (key: CommentedString(reference, comment: name ?? \"CopyFiles\"), value: .dictionary(dictionary))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/BuildPhase/PBXFrameworksBuildPhase.swift",
    "content": "import Foundation\n\n/// This is the element for the framework link build phase.\npublic final class PBXFrameworksBuildPhase: PBXBuildPhase {\n    public override var buildPhase: BuildPhase {\n        return .frameworks\n    }\n}\n\n// MARK: - PBXFrameworksBuildPhase Extension (PlistSerializable)\n\nextension PBXFrameworksBuildPhase: PlistSerializable {\n    func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = try plistValues(proj: proj, reference: reference)\n        dictionary[\"isa\"] = .string(CommentedString(PBXFrameworksBuildPhase.isa))\n        return (key: CommentedString(reference, comment: \"Frameworks\"), value: .dictionary(dictionary))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/BuildPhase/PBXHeadersBuildPhase.swift",
    "content": "import Foundation\nimport PathKit\n\n/// This is the element for the framework headers build phase.\npublic final class PBXHeadersBuildPhase: PBXBuildPhase {\n    public override var buildPhase: BuildPhase {\n        return .headers\n    }\n}\n\n// MARK: - PBXHeadersBuildPhase Extension (PlistSerializable)\n\nextension PBXHeadersBuildPhase: PlistSerializable {\n    func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = try plistValues(proj: proj, reference: reference)\n        dictionary[\"isa\"] = .string(CommentedString(PBXHeadersBuildPhase.isa))\n        return (key: CommentedString(reference, comment: \"Headers\"), value: .dictionary(dictionary))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/BuildPhase/PBXResourcesBuildPhase.swift",
    "content": "import Foundation\n\n/// This is the element for the resources copy build phase.\npublic final class PBXResourcesBuildPhase: PBXBuildPhase {\n    public override var buildPhase: BuildPhase {\n        return .resources\n    }\n}\n\n// MARK: - PBXResourcesBuildPhase Extension (PlistSerializable)\n\nextension PBXResourcesBuildPhase: PlistSerializable {\n    func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = try plistValues(proj: proj, reference: reference)\n        dictionary[\"isa\"] = .string(CommentedString(PBXResourcesBuildPhase.isa))\n        return (key: CommentedString(reference, comment: \"Resources\"), value: .dictionary(dictionary))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/BuildPhase/PBXRezBuildPhase.swift",
    "content": "import Foundation\n\n/// This is the element for the Build Carbon Resources build phase.\n/// These are legacy .r files from the Classic Mac OS era.\npublic final class PBXRezBuildPhase: PBXBuildPhase {\n    public override var buildPhase: BuildPhase {\n        return .carbonResources\n    }\n}\n\n// MARK: - PBXRezBuildPhase Extension (PlistSerializable)\n\nextension PBXRezBuildPhase: PlistSerializable {\n    func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = try plistValues(proj: proj, reference: reference)\n        dictionary[\"isa\"] = .string(CommentedString(PBXRezBuildPhase.isa))\n        return (key: CommentedString(reference, comment: \"Rez\"), value: .dictionary(dictionary))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/BuildPhase/PBXShellScriptBuildPhase.swift",
    "content": "import Foundation\n\n/// This is the element for the shell script build phase.\npublic final class PBXShellScriptBuildPhase: PBXBuildPhase {\n    // MARK: - Attributes\n\n    /// Build phase name.\n    public var name: String?\n\n    /// Input paths\n    public var inputPaths: [String]\n\n    /// Output paths\n    public var outputPaths: [String]\n\n    /// Path to the shell.\n    public var shellPath: String?\n\n    /// Shell script.\n    public var shellScript: String?\n\n    /// Show environment variables in the logs.\n    public var showEnvVarsInLog: Bool\n\n    public override var buildPhase: BuildPhase {\n        return .runScript\n    }\n\n    // MARK: - Init\n\n    /// Initializes the shell script build phase with its attributes.\n    ///\n    /// - Parameters:\n    ///   - files: build files.\n    ///   - inputPaths: input paths.\n    ///   - outputPaths: output paths.\n    ///   - inputFileListPaths: input file list paths.\n    ///   - outputFileListPaths: output file list paths.\n    ///   - shellPath: shell path.\n    ///   - shellScript: shell script.\n    ///   - buildActionMask: build action mask.\n    public init(files: [PBXBuildFile] = [],\n                name: String? = nil,\n                inputPaths: [String] = [],\n                outputPaths: [String] = [],\n                inputFileListPaths: [String]? = nil,\n                outputFileListPaths: [String]? = nil,\n                shellPath: String = \"/bin/sh\",\n                shellScript: String? = nil,\n                buildActionMask: UInt = defaultBuildActionMask,\n                runOnlyForDeploymentPostprocessing: Bool = false,\n                showEnvVarsInLog: Bool = true) {\n        self.name = name\n        self.inputPaths = inputPaths\n        self.outputPaths = outputPaths\n        self.shellPath = shellPath\n        self.shellScript = shellScript\n        self.showEnvVarsInLog = showEnvVarsInLog\n        super.init(files: files,\n                   inputFileListPaths: inputFileListPaths,\n                   outputFileListPaths: outputFileListPaths,\n                   buildActionMask: buildActionMask,\n                   runOnlyForDeploymentPostprocessing: runOnlyForDeploymentPostprocessing)\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case name\n        case inputPaths\n        case outputPaths\n        case shellPath\n        case shellScript\n        case showEnvVarsInLog\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        name = try container.decodeIfPresent(.name)\n        inputPaths = (try container.decodeIfPresent(.inputPaths)) ?? []\n        outputPaths = (try container.decodeIfPresent(.outputPaths)) ?? []\n        shellPath = try container.decodeIfPresent(.shellPath)\n        shellScript = try container.decodeIfPresent(.shellScript)\n        showEnvVarsInLog = try container.decodeIntBoolIfPresent(.showEnvVarsInLog) ?? true\n        try super.init(from: decoder)\n    }\n}\n\n// MARK: - PBXShellScriptBuildPhase Extension (PlistSerializable)\n\nextension PBXShellScriptBuildPhase: PlistSerializable {\n    func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = try plistValues(proj: proj, reference: reference)\n        dictionary[\"isa\"] = .string(CommentedString(PBXShellScriptBuildPhase.isa))\n        if let shellPath = shellPath {\n            dictionary[\"shellPath\"] = .string(CommentedString(shellPath))\n        }\n        dictionary[\"inputPaths\"] = .array(inputPaths.map({ .string(CommentedString($0)) }))\n        if let name = name {\n            dictionary[\"name\"] = .string(CommentedString(name))\n        }\n        dictionary[\"outputPaths\"] = .array(outputPaths.map({ .string(CommentedString($0)) }))\n        if let shellScript = shellScript {\n            dictionary[\"shellScript\"] = .string(CommentedString(shellScript))\n        }\n        if !showEnvVarsInLog {\n            // Xcode only writes this key if it's set to false; default is true and is omitted\n            dictionary[\"showEnvVarsInLog\"] = .string(CommentedString(\"\\(showEnvVarsInLog.int)\"))\n        }\n        return (key: CommentedString(reference, comment: name ?? \"ShellScript\"), value: .dictionary(dictionary))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/BuildPhase/PBXSourcesBuildPhase.swift",
    "content": "import Foundation\n\n/// This is the element for the sources compilation build phase.\npublic final class PBXSourcesBuildPhase: PBXBuildPhase {\n    public override var buildPhase: BuildPhase {\n        return .sources\n    }\n}\n\nextension PBXSourcesBuildPhase: PlistSerializable {\n    // MARK: - PlistSerializable\n\n    func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = try plistValues(proj: proj, reference: reference)\n        dictionary[\"isa\"] = .string(CommentedString(PBXSourcesBuildPhase.isa))\n        return (key: CommentedString(reference, comment: \"Sources\"), value: .dictionary(dictionary))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Configuration/BuildSettings.swift",
    "content": "import Foundation\n\n/// Build settings.\npublic typealias BuildSettings = [String: Any]\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Configuration/XCBuildConfiguration.swift",
    "content": "import Foundation\n\n/// This is the element for listing build configurations.\npublic final class XCBuildConfiguration: PBXObject {\n    // MARK: - Attributes\n\n    /// Base xcconfig file reference.\n    var baseConfigurationReference: PBXObjectReference?\n\n    /// Base xcconfig file reference.\n    public var baseConfiguration: PBXFileReference? {\n        get {\n            return baseConfigurationReference?.getObject()\n        }\n        set {\n            if let newValue = newValue {\n                baseConfigurationReference = newValue.reference\n            }\n        }\n    }\n\n    /// A map of build settings.\n    public var buildSettings: BuildSettings\n\n    /// The configuration name.\n    public var name: String\n\n    // MARK: - Init\n\n    /// Initializes a build configuration.\n    ///\n    /// - Parameters:\n    ///   - name: build configuration name.\n    ///   - baseConfiguration: base configuration.\n    ///   - buildSettings: dictionary that contains the build settings for this configuration.\n    public init(name: String,\n                baseConfiguration: PBXFileReference? = nil,\n                buildSettings: BuildSettings = [:]) {\n        baseConfigurationReference = baseConfiguration?.reference\n        self.buildSettings = buildSettings\n        self.name = name\n        super.init()\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case baseConfigurationReference\n        case buildSettings\n        case name\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let objects = decoder.context.objects\n        let objectReferenceRepository = decoder.context.objectReferenceRepository\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        if let baseConfigurationReference: String = try container.decodeIfPresent(.baseConfigurationReference) {\n            self.baseConfigurationReference = objectReferenceRepository.getOrCreate(reference: baseConfigurationReference, objects: objects)\n        } else {\n            baseConfigurationReference = nil\n        }\n        buildSettings = try container.decode([String: Any].self, forKey: .buildSettings)\n        name = try container.decode(.name)\n        try super.init(from: decoder)\n    }\n}\n\n// MARK: - PlistSerializable\n\nextension XCBuildConfiguration: PlistSerializable {\n    func plistKeyAndValue(proj _: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = [:]\n        dictionary[\"isa\"] = .string(CommentedString(XCBuildConfiguration.isa))\n        dictionary[\"name\"] = .string(CommentedString(name))\n        dictionary[\"buildSettings\"] = buildSettings.plist()\n        if let baseConfigurationReference = baseConfigurationReference {\n            let fileElement: PBXFileElement? = baseConfigurationReference.getObject()\n            dictionary[\"baseConfigurationReference\"] = .string(CommentedString(baseConfigurationReference.value, comment: fileElement?.fileName()))\n        }\n        return (key: CommentedString(reference, comment: name), value: .dictionary(dictionary))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Configuration/XCConfigurationList.swift",
    "content": "import Foundation\n\n/// This is the element for listing build configurations.\npublic final class XCConfigurationList: PBXObject {\n    // MARK: - Attributes\n\n    /// Element build configurations.\n    var buildConfigurationReferences: [PBXObjectReference]\n\n    /// Build configurations\n    public var buildConfigurations: [XCBuildConfiguration] {\n        set {\n            buildConfigurationReferences = newValue.references()\n        }\n        get {\n            return buildConfigurationReferences.objects()\n        }\n    }\n\n    /// Element default configuration is visible.\n    public var defaultConfigurationIsVisible: Bool\n\n    /// Element default configuration name\n    public var defaultConfigurationName: String?\n\n    // MARK: - Init\n\n    /// Initializes the element with its properties.\n    ///\n    /// - Parameters:\n    ///   - bbuildConfigurations: build configurations.\n    ///   - defaultConfigurationName: element default configuration name.\n    ///   - defaultConfigurationIsVisible: default configuration is visible.\n    public init(buildConfigurations: [XCBuildConfiguration] = [],\n                defaultConfigurationName: String? = nil,\n                defaultConfigurationIsVisible: Bool = false) {\n        buildConfigurationReferences = buildConfigurations.references()\n        self.defaultConfigurationName = defaultConfigurationName\n        self.defaultConfigurationIsVisible = defaultConfigurationIsVisible\n        super.init()\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case buildConfigurations\n        case defaultConfigurationName\n        case defaultConfigurationIsVisible\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let objects = decoder.context.objects\n        let objectReferenceRepository = decoder.context.objectReferenceRepository\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        let buildConfigurationReferencesStrings: [String] = try container.decode(.buildConfigurations)\n        buildConfigurationReferences = buildConfigurationReferencesStrings\n            .map({ objectReferenceRepository.getOrCreate(reference: $0, objects: objects) })\n        defaultConfigurationIsVisible = try container.decodeIntBool(.defaultConfigurationIsVisible)\n        defaultConfigurationName = try container.decodeIfPresent(.defaultConfigurationName)\n        try super.init(from: decoder)\n    }\n}\n\n// MARK: - Helpers\n\nextension XCConfigurationList {\n    /// Returns the build configuration with the given name (if it exists)\n    ///\n    /// - Parameter name: configuration name.\n    /// - Returns: build configuration if it exists.\n    public func configuration(name: String) -> XCBuildConfiguration? {\n        return buildConfigurations.first(where: { $0.name == name })\n    }\n\n    /// Adds the default configurations, debug and release\n    ///\n    /// - Returns: the created configurations.\n    public func addDefaultConfigurations() throws -> [XCBuildConfiguration] {\n        var configurations: [XCBuildConfiguration] = []\n\n        let debug = XCBuildConfiguration(name: \"Debug\")\n        reference.objects?.add(object: debug)\n        configurations.append(debug)\n\n        let release = XCBuildConfiguration(name: \"Release\")\n        reference.objects?.add(object: release)\n        configurations.append(release)\n\n        buildConfigurations.append(contentsOf: configurations)\n        return configurations\n    }\n\n    /// Returns the object with the given configuration list (project or target)\n    ///\n    /// - Parameter reference: configuration list reference.\n    /// - Returns: target or project with the given configuration list.\n    public func objectWithConfigurationList() throws -> PBXObject? {\n        let projectObjects = try objects()\n        return projectObjects.projects.first(where: { $0.value.buildConfigurationListReference == reference })?.value ??\n            projectObjects.nativeTargets.first(where: { $0.value.buildConfigurationListReference == reference })?.value ??\n            projectObjects.aggregateTargets.first(where: { $0.value.buildConfigurationListReference == reference })?.value ??\n            projectObjects.legacyTargets.first(where: { $0.value.buildConfigurationListReference == reference })?.value\n    }\n}\n\n// MARK: - PlistSerializable\n\nextension XCConfigurationList: PlistSerializable {\n    func plistKeyAndValue(proj _: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = [:]\n        dictionary[\"isa\"] = .string(CommentedString(XCConfigurationList.isa))\n        dictionary[\"buildConfigurations\"] = .array(buildConfigurationReferences\n            .map { configReference in\n                let config: XCBuildConfiguration? = configReference.getObject()\n                return .string(CommentedString(configReference.value, comment: config?.name))\n        })\n        dictionary[\"defaultConfigurationIsVisible\"] = .string(CommentedString(\"\\(defaultConfigurationIsVisible.int)\"))\n        if let defaultConfigurationName = defaultConfigurationName {\n            dictionary[\"defaultConfigurationName\"] = .string(CommentedString(defaultConfigurationName))\n        }\n        return (key: CommentedString(reference, comment: try plistComment()),\n                value: .dictionary(dictionary))\n    }\n\n    private func plistComment() throws -> String? {\n        let object = try objectWithConfigurationList()\n        if let project = object as? PBXProject {\n            return \"Build configuration list for PBXProject \\\"\\(project.name)\\\"\"\n        } else if let target = object as? PBXTarget {\n            return \"Build configuration list for \\(type(of: target).isa) \\\"\\(target.name)\\\"\"\n        }\n        return nil\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Files/PBXContainerItem.swift",
    "content": "import Foundation\n\n/// Class representing an element that may contain other elements.\npublic class PBXContainerItem: PBXObject {\n    /// User comments for the object.\n    var comments: String?\n\n    // MARK: - Init\n\n    init(comments: String? = nil) {\n        self.comments = comments\n        super.init()\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case comments\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        comments = try container.decodeIfPresent(.comments)\n        try super.init(from: decoder)\n    }\n\n    func plistValues(proj _: PBXProj, reference _: String) throws -> [CommentedString: PlistValue] {\n        var dictionary = [CommentedString: PlistValue]()\n        if let comments = comments {\n            dictionary[\"comments\"] = .string(CommentedString(comments))\n        }\n        return dictionary\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Files/PBXContainerItemProxy.swift",
    "content": "import Foundation\n\n/// This is the element to decorate a target item.\npublic final class PBXContainerItemProxy: PBXObject {\n    public enum ProxyType: UInt, Decodable {\n        case nativeTarget = 1\n        case reference = 2\n        case other\n    }\n\n    /// The object is a reference to a PBXProject element.\n    var containerPortalReference: PBXObjectReference\n\n    /// Returns the project that contains the remote object.\n    public var containerPortal: PBXProject! {\n        get {\n            return containerPortalReference.getObject()\n        }\n        set {\n            containerPortalReference = newValue.reference\n        }\n    }\n\n    /// Element proxy type.\n    public var proxyType: ProxyType?\n\n    /// Element remote global ID reference.\n    var remoteGlobalIDReference: PBXObjectReference?\n\n    /// Remote global object\n    public var remoteGlobalID: PBXObject? {\n        get {\n            return remoteGlobalIDReference?.getObject()\n        }\n        set {\n            remoteGlobalIDReference = newValue?.reference\n        }\n    }\n\n    /// Element remote info.\n    public var remoteInfo: String?\n\n    /// Initializes the container item proxy with its attributes.\n    ///\n    /// - Parameters:\n    ///   - containerPortal: container portal.\n    ///   - remoteGlobalID: remote global ID.\n    ///   - proxyType: proxy type.\n    ///   - remoteInfo: remote info.\n    public init(containerPortal: PBXObject,\n                remoteGlobalID: PBXObject? = nil,\n                proxyType: ProxyType? = nil,\n                remoteInfo: String? = nil) {\n        containerPortalReference = containerPortal.reference\n        remoteGlobalIDReference = remoteGlobalID?.reference\n        self.remoteInfo = remoteInfo\n        self.proxyType = proxyType\n        super.init()\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case containerPortal\n        case proxyType\n        case remoteGlobalIDString\n        case remoteInfo\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        let objects = decoder.context.objects\n        let objectReferenceRepository = decoder.context.objectReferenceRepository\n        let containerPortalString: String = try container.decode(.containerPortal)\n        containerPortalReference = objectReferenceRepository.getOrCreate(reference: containerPortalString,\n                                                                         objects: objects)\n        proxyType = try container.decodeIntIfPresent(.proxyType).flatMap(ProxyType.init)\n        if let remoteGlobalIDString: String = try container.decodeIfPresent(.remoteGlobalIDString) {\n            remoteGlobalIDReference = objectReferenceRepository.getOrCreate(reference: remoteGlobalIDString,\n                                                                            objects: objects)\n        } else {\n            remoteGlobalIDReference = nil\n        }\n        remoteInfo = try container.decodeIfPresent(.remoteInfo)\n        try super.init(from: decoder)\n    }\n}\n\n// MARK: - PBXContainerItemProxy Extension (PlistSerializable)\n\nextension PBXContainerItemProxy: PlistSerializable {\n    func plistKeyAndValue(proj _: PBXProj, reference: String) -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = [:]\n        dictionary[\"isa\"] = .string(CommentedString(PBXContainerItemProxy.isa))\n        dictionary[\"containerPortal\"] = .string(CommentedString(containerPortalReference.value, comment: \"Project object\"))\n        if let proxyType = proxyType {\n            dictionary[\"proxyType\"] = .string(CommentedString(\"\\(proxyType.rawValue)\"))\n        }\n        if let remoteGlobalIDReference = remoteGlobalIDReference {\n            dictionary[\"remoteGlobalIDString\"] = .string(CommentedString(remoteGlobalIDReference.value))\n        }\n        if let remoteInfo = remoteInfo {\n            dictionary[\"remoteInfo\"] = .string(CommentedString(remoteInfo))\n        }\n        return (key: CommentedString(reference,\n                                     comment: \"PBXContainerItemProxy\"),\n                value: .dictionary(dictionary))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Files/PBXFileElement.swift",
    "content": "import Foundation\nimport PathKit\n\n/// This element is an abstract parent for file and group elements.\npublic class PBXFileElement: PBXContainerItem, PlistSerializable {\n    // MARK: - Attributes\n\n    /// Element source tree.\n    public var sourceTree: PBXSourceTree?\n\n    /// Element path.\n    public var path: String?\n\n    /// Element name.\n    public var name: String?\n\n    /// Element include in index.\n    public var includeInIndex: Bool?\n\n    /// Element uses tabs.\n    public var usesTabs: Bool?\n\n    /// Element indent width.\n    public var indentWidth: UInt?\n\n    /// Element tab width.\n    public var tabWidth: UInt?\n\n    /// Element wraps lines.\n    public var wrapsLines: Bool?\n\n    // MARK: - Init\n\n    /// Initializes the file element with its properties.\n    ///\n    /// - Parameters:\n    ///   - sourceTree: file source tree.\n    ///   - path: object relative path from `sourceTree`, if different than `name`.\n    ///   - name: object name.\n    ///   - includeInIndex: should the IDE index the object?\n    ///   - usesTabs: object uses tabs.\n    ///   - indentWidth: the number of positions to indent blocks of code\n    ///   - tabWidth: the visual width of tab characters\n    ///   - wrapsLines: should the IDE wrap lines when editing the object?\n    public init(sourceTree: PBXSourceTree? = nil,\n                path: String? = nil,\n                name: String? = nil,\n                includeInIndex: Bool? = nil,\n                usesTabs: Bool? = nil,\n                indentWidth: UInt? = nil,\n                tabWidth: UInt? = nil,\n                wrapsLines: Bool? = nil) {\n        self.sourceTree = sourceTree\n        self.path = path\n        self.name = name\n        self.includeInIndex = includeInIndex\n        self.usesTabs = usesTabs\n        self.indentWidth = indentWidth\n        self.tabWidth = tabWidth\n        self.wrapsLines = wrapsLines\n        super.init()\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case sourceTree\n        case name\n        case path\n        case includeInIndex\n        case usesTabs\n        case indentWidth\n        case tabWidth\n        case wrapsLines\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        sourceTree = try container.decodeIfPresent(String.self, forKey: .sourceTree).map { PBXSourceTree(value: $0) }\n        name = try container.decodeIfPresent(.name)\n        path = try container.decodeIfPresent(.path)\n        includeInIndex = try container.decodeIntBoolIfPresent(.includeInIndex)\n        usesTabs = try container.decodeIntBoolIfPresent(.usesTabs)\n        indentWidth = try container.decodeIntIfPresent(.indentWidth)\n        tabWidth = try container.decodeIntIfPresent(.tabWidth)\n        wrapsLines = try container.decodeIntBoolIfPresent(.wrapsLines)\n        try super.init(from: decoder)\n    }\n\n    // MARK: - PlistSerializable\n\n    var multiline: Bool { return true }\n\n    func plistKeyAndValue(proj _: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = [:]\n        dictionary[\"isa\"] = .string(CommentedString(PBXFileElement.isa))\n        if let name = name {\n            dictionary[\"name\"] = .string(CommentedString(name))\n        }\n        if let path = path {\n            dictionary[\"path\"] = .string(CommentedString(path))\n        }\n        if let sourceTree = sourceTree {\n            dictionary[\"sourceTree\"] = sourceTree.plist()\n        }\n\n        if let includeInIndex = includeInIndex {\n            dictionary[\"includeInIndex\"] = .string(CommentedString(\"\\(includeInIndex.int)\"))\n        }\n        if let usesTabs = usesTabs {\n            dictionary[\"usesTabs\"] = .string(CommentedString(\"\\(usesTabs.int)\"))\n        }\n        if let indentWidth = indentWidth {\n            dictionary[\"indentWidth\"] = .string(CommentedString(\"\\(indentWidth)\"))\n        }\n        if let tabWidth = tabWidth {\n            dictionary[\"tabWidth\"] = .string(CommentedString(\"\\(tabWidth)\"))\n        }\n        if let wrapsLines = wrapsLines {\n            dictionary[\"wrapsLines\"] = .string(CommentedString(\"\\(wrapsLines.int)\"))\n        }\n        return (key: CommentedString(reference,\n                                     comment: name),\n                value: .dictionary(dictionary))\n    }\n\n    /// Returns the name that should be used for comments.\n    ///\n    /// - Returns: file name.\n    func fileName() -> String? {\n        return name ?? path\n    }\n}\n\n// MARK: - Helpers\n\npublic extension PBXFileElement {\n    /// Returns a file absolute path.\n    ///\n    /// - Parameter sourceRoot: project source root.\n    /// - Returns: file element absolute path.\n    /// - Throws: an error if the absolute path cannot be obtained.\n    func fullPath(sourceRoot: Path) throws -> Path? {\n        let projectObjects = try objects()\n        switch sourceTree {\n        case .absolute?:\n            return path.flatMap { Path($0) }\n        case .sourceRoot?:\n            return path.flatMap { sourceRoot + $0 }\n        case .group?:\n            guard let group = projectObjects.groups.first(where: { $0.value.childrenReferences.contains(reference) }) else { return sourceRoot }\n            guard let groupPath = try group.value.fullPath(sourceRoot: sourceRoot) else { return nil }\n            guard let filePath = self is PBXVariantGroup ? try baseVariantGroupPath() : path else { return groupPath }\n            return groupPath + filePath\n        default:\n            return nil\n        }\n    }\n\n    /// Returns the path to the variant group base file.\n    ///\n    /// - Returns: path to the variant group base file.\n    /// - Throws: an error if the path cannot be obtained.\n    private func baseVariantGroupPath() throws -> String? {\n        guard let variantGroup: PBXVariantGroup = self.reference.getObject() else { return nil }\n        guard let baseReference = try variantGroup\n            .childrenReferences\n            .compactMap({ try $0.getThrowingObject() as PBXFileElement })\n            .first(where: { $0.name == \"Base\" }) else { return nil }\n        return baseReference.path\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Files/PBXFileReference.swift",
    "content": "import Foundation\nimport PathKit\n\n///  A PBXFileReference is used to track every external file referenced by\n///  the project: source files, resource files, libraries, generated application files, and so on.\npublic final class PBXFileReference: PBXFileElement {\n    // MARK: - Attributes\n\n    /// Element file encoding.\n    public var fileEncoding: UInt?\n\n    /// Element explicit file type.\n    public var explicitFileType: String?\n\n    /// Element last known file type.\n    public var lastKnownFileType: String?\n\n    /// Element line ending.\n    public var lineEnding: UInt?\n\n    /// Element language specification identifier\n    public var languageSpecificationIdentifier: String?\n\n    /// Element xc language specification identifier\n    public var xcLanguageSpecificationIdentifier: String?\n\n    /// Element plist structure definition identifier\n    public var plistStructureDefinitionIdentifier: String?\n\n    // MARK: - Init\n\n    /// Initializes the file reference with its properties.\n    ///\n    /// - Parameters:\n    ///   - sourceTree: file source tree.\n    ///   - name: file name.\n    ///   - fileEncoding: text encoding of file content.\n    ///   - explicitFileType: user-specified file type.\n    ///   - lastKnownFileType: derived file type.\n    ///   - path: file relative path from `sourceTree`, if different than `name`.\n    ///   - includeInIndex: should the IDE index the file?\n    ///   - wrapsLines: should the IDE wrap lines when editing the file?\n    ///   - usesTabs: file uses tabs.\n    ///   - indentWidth: the number of positions to indent blocks of code\n    ///   - tabWidth: the visual width of tab characters\n    ///   - lineEnding: the line ending type for the file.\n    ///   - languageSpecificationIdentifier: legacy programming language identifier.\n    ///   - xcLanguageSpecificationIdentifier: the programming language identifier.\n    ///   - plistStructureDefinitionIdentifier: the plist organizational family identifier.\n    public init(sourceTree: PBXSourceTree? = nil,\n                name: String? = nil,\n                fileEncoding: UInt? = nil,\n                explicitFileType: String? = nil,\n                lastKnownFileType: String? = nil,\n                path: String? = nil,\n                includeInIndex: Bool? = nil,\n                wrapsLines: Bool? = nil,\n                usesTabs: Bool? = nil,\n                indentWidth: UInt? = nil,\n                tabWidth: UInt? = nil,\n                lineEnding: UInt? = nil,\n                languageSpecificationIdentifier: String? = nil,\n                xcLanguageSpecificationIdentifier: String? = nil,\n                plistStructureDefinitionIdentifier: String? = nil) {\n        self.fileEncoding = fileEncoding\n        self.explicitFileType = explicitFileType\n        self.lastKnownFileType = lastKnownFileType\n        self.lineEnding = lineEnding\n        self.languageSpecificationIdentifier = languageSpecificationIdentifier\n        self.xcLanguageSpecificationIdentifier = xcLanguageSpecificationIdentifier\n        self.plistStructureDefinitionIdentifier = plistStructureDefinitionIdentifier\n        super.init(sourceTree: sourceTree,\n                   path: path,\n                   name: name,\n                   includeInIndex: includeInIndex,\n                   usesTabs: usesTabs,\n                   indentWidth: indentWidth,\n                   tabWidth: tabWidth,\n                   wrapsLines: wrapsLines)\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case fileEncoding\n        case explicitFileType\n        case lastKnownFileType\n        case lineEnding\n        case languageSpecificationIdentifier\n        case xcLanguageSpecificationIdentifier\n        case plistStructureDefinitionIdentifier\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        fileEncoding = try container.decodeIntIfPresent(.fileEncoding)\n        explicitFileType = try container.decodeIfPresent(.explicitFileType)\n        lastKnownFileType = try container.decodeIfPresent(.lastKnownFileType)\n        lineEnding = try container.decodeIntIfPresent(.lineEnding)\n        languageSpecificationIdentifier = try container.decodeIfPresent(.languageSpecificationIdentifier)\n        xcLanguageSpecificationIdentifier = try container.decodeIfPresent(.xcLanguageSpecificationIdentifier)\n        plistStructureDefinitionIdentifier = try container.decodeIfPresent(.plistStructureDefinitionIdentifier)\n        try super.init(from: decoder)\n    }\n\n    // MARK: - PlistSerializable\n\n    override var multiline: Bool { return false }\n\n    override func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = try super.plistKeyAndValue(proj: proj, reference: reference).value.dictionary ?? [:]\n        dictionary[\"isa\"] = .string(CommentedString(PBXFileReference.isa))\n        if let lastKnownFileType = lastKnownFileType {\n            dictionary[\"lastKnownFileType\"] = .string(CommentedString(lastKnownFileType))\n        }\n        if let fileEncoding = fileEncoding {\n            dictionary[\"fileEncoding\"] = .string(CommentedString(\"\\(fileEncoding)\"))\n        }\n        if let explicitFileType = self.explicitFileType {\n            dictionary[\"explicitFileType\"] = .string(CommentedString(explicitFileType))\n        }\n        if let lineEnding = lineEnding {\n            dictionary[\"lineEnding\"] = .string(CommentedString(\"\\(lineEnding)\"))\n        }\n        if let languageSpecificationIdentifier = languageSpecificationIdentifier {\n            dictionary[\"languageSpecificationIdentifier\"] = .string(CommentedString(languageSpecificationIdentifier))\n        }\n        if let xcLanguageSpecificationIdentifier = xcLanguageSpecificationIdentifier {\n            dictionary[\"xcLanguageSpecificationIdentifier\"] = .string(CommentedString(xcLanguageSpecificationIdentifier))\n        }\n        if let plistStructureDefinitionIdentifier = plistStructureDefinitionIdentifier {\n            dictionary[\"plistStructureDefinitionIdentifier\"] = .string(CommentedString(plistStructureDefinitionIdentifier))\n        }\n        return (key: CommentedString(reference, comment: name ?? path),\n                value: .dictionary(dictionary))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Files/PBXGroup.swift",
    "content": "import Foundation\nimport PathKit\n\npublic class PBXGroup: PBXFileElement {\n    // MARK: - Attributes\n\n    /// Grou children references.\n    var childrenReferences: [PBXObjectReference]\n\n    /// Group children.\n    public var children: [PBXFileElement] {\n        set {\n            childrenReferences = newValue.references()\n        }\n        get {\n            return childrenReferences.objects()\n        }\n    }\n\n    // MARK: - Init\n\n    /// Initializes the group with its attributes.\n    ///\n    /// - Parameters:\n    ///   - children: group children.\n    ///   - sourceTree: group source tree.\n    ///   - name: group name.\n    ///   - path: group relative path from `sourceTree`, if different than `name`.\n    ///   - includeInIndex: should the IDE index the files in the group?\n    ///   - wrapsLines: should the IDE wrap lines for files in the group?\n    ///   - usesTabs: group uses tabs.\n    ///   - indentWidth: the number of positions to indent blocks of code\n    ///   - tabWidth: the visual width of tab characters\n    public init(children: [PBXFileElement] = [],\n                sourceTree: PBXSourceTree? = nil,\n                name: String? = nil,\n                path: String? = nil,\n                includeInIndex: Bool? = nil,\n                wrapsLines: Bool? = nil,\n                usesTabs: Bool? = nil,\n                indentWidth: UInt? = nil,\n                tabWidth: UInt? = nil) {\n        childrenReferences = children.references()\n        super.init(sourceTree: sourceTree,\n                   path: path,\n                   name: name,\n                   includeInIndex: includeInIndex,\n                   usesTabs: usesTabs,\n                   indentWidth: indentWidth,\n                   tabWidth: tabWidth,\n                   wrapsLines: wrapsLines)\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case children\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let objects = decoder.context.objects\n        let objectReferenceRepository = decoder.context.objectReferenceRepository\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        let childrenReferences: [String] = (try container.decodeIfPresent(.children)) ?? []\n        self.childrenReferences = childrenReferences.map({ objectReferenceRepository.getOrCreate(reference: $0, objects: objects) })\n        try super.init(from: decoder)\n    }\n\n    // MARK: - PlistSerializable\n\n    override func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = try super.plistKeyAndValue(proj: proj, reference: reference).value.dictionary ?? [:]\n        dictionary[\"isa\"] = .string(CommentedString(type(of: self).isa))\n        dictionary[\"children\"] = .array(childrenReferences.map({ (fileReference) -> PlistValue in\n            let fileElement: PBXFileElement? = fileReference.getObject()\n            return .string(CommentedString(fileReference.value, comment: fileElement?.fileName()))\n        }))\n\n        return (key: CommentedString(reference,\n                                     comment: name ?? path),\n                value: .dictionary(dictionary))\n    }\n}\n\n// MARK: - Helpers\n\n/// Options passed when adding new groups.\npublic struct GroupAddingOptions: OptionSet {\n    /// Raw value.\n    public let rawValue: Int\n\n    /// Initializes the options with the raw value.\n    ///\n    /// - Parameter rawValue: raw value.\n    public init(rawValue: Int) {\n        self.rawValue = rawValue\n    }\n\n    /// Create group without reference to folder\n    public static let withoutFolder = GroupAddingOptions(rawValue: 1 << 0)\n}\n\npublic extension PBXGroup {\n    /// Returns group with the given name contained in the given parent group.\n    ///\n    /// - Parameter groupName: group name.\n    /// - Returns: group with the given name contained in the given parent group.\n    func group(named name: String) -> PBXGroup? {\n        return childrenReferences\n            .objects()\n            .first(where: { $0.name == name })\n    }\n\n    /// Returns the file in the group with the given name.\n    ///\n    /// - Parameter name: file name.\n    /// - Returns: file with the given name contained in the given parent group.\n    func file(named name: String) -> PBXFileReference? {\n        return childrenReferences\n            .objects()\n            .first(where: { $0.name == name })\n    }\n\n    /// Creates a group with the given name and returns it.\n    ///\n    /// - Parameters:\n    ///   - groupName: group name.\n    ///   - options: creation options.\n    /// - Returns: created groups.\n    @discardableResult\n    func addGroup(named groupName: String, options: GroupAddingOptions = []) throws -> [PBXGroup] {\n        let objects = try self.objects()\n        return groupName.components(separatedBy: \"/\").reduce(into: [PBXGroup](), { groups, name in\n            let group = groups.last ?? self\n            let newGroup = PBXGroup(children: [], sourceTree: .group, name: name, path: options.contains(.withoutFolder) ? nil : name)\n            group.childrenReferences.append(newGroup.reference)\n            objects.add(object: newGroup)\n            groups.append(newGroup)\n        })\n    }\n\n    /// Adds file at the give path to the project or returns existing file and its reference.\n    ///\n    /// - Parameters:\n    ///   - filePath: path to the file.\n    ///   - sourceTree: file sourceTree, default is `.group`\n    ///   - sourceRoot: path to project's source root.\n    /// - Returns: new or existing file and its reference.\n    @discardableResult\n    func addFile(\n        at filePath: Path,\n        sourceTree: PBXSourceTree = .group,\n        sourceRoot: Path\n    ) throws -> PBXFileReference {\n        let projectObjects = try objects()\n        guard filePath.exists else {\n            throw XcodeprojEditingError.unexistingFile(filePath)\n        }\n        let groupPath = try fullPath(sourceRoot: sourceRoot)\n\n        if let existingFileReference = try projectObjects.fileReferences.first(where: {\n            try filePath == $0.value.fullPath(sourceRoot: sourceRoot)\n        }) {\n            if !childrenReferences.contains(existingFileReference.key) {\n                existingFileReference.value.path = groupPath.flatMap({ filePath.relative(to: $0) })?.string\n                childrenReferences.append(existingFileReference.key)\n            }\n        }\n\n        let path: String?\n        switch sourceTree {\n        case .group:\n            path = groupPath.map({ filePath.relative(to: $0) })?.string\n        case .sourceRoot:\n            path = filePath.relative(to: sourceRoot).string\n        case .absolute:\n            path = filePath.string\n        default:\n            path = nil\n        }\n        let fileReference = PBXFileReference(\n            sourceTree: sourceTree,\n            name: filePath.lastComponent,\n            explicitFileType: filePath.extension.flatMap(Xcode.filetype),\n            lastKnownFileType: filePath.extension.flatMap(Xcode.filetype),\n            path: path\n        )\n        projectObjects.add(object: fileReference)\n        if !childrenReferences.contains(fileReference.reference) {\n            childrenReferences.append(fileReference.reference)\n        }\n        return fileReference\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Files/PBXSourceTree.swift",
    "content": "import Foundation\n\n/// Specifies source trees for files\n/// Corresponds to the \"Location\" dropdown in Xcode's File Inspector\npublic enum PBXSourceTree: CustomStringConvertible, Equatable, Decodable {\n    case none\n    case absolute\n    case group\n    case sourceRoot\n    case buildProductsDir\n    case sdkRoot\n    case developerDir\n    case custom(String)\n\n    private static let noneValue = \"\"\n    private static let absoluteValue = \"<absolute>\"\n    private static let groupValue = \"<group>\"\n    private static let sourceRootValue = \"SOURCE_ROOT\"\n    private static let buildProductsDirValue = \"BUILT_PRODUCTS_DIR\"\n    private static let sdkRootValue = \"SDKROOT\"\n    private static let developerDirValue = \"DEVELOPER_DIR\"\n\n    public init(value: String) {\n        switch value {\n        case PBXSourceTree.noneValue:\n            self = .none\n        case PBXSourceTree.absoluteValue:\n            self = .absolute\n        case PBXSourceTree.groupValue:\n            self = .group\n        case PBXSourceTree.sourceRootValue:\n            self = .sourceRoot\n        case PBXSourceTree.buildProductsDirValue:\n            self = .buildProductsDir\n        case PBXSourceTree.sdkRootValue:\n            self = .sdkRoot\n        case PBXSourceTree.developerDirValue:\n            self = .developerDir\n        default:\n            self = .custom(value)\n        }\n    }\n\n    public init(from decoder: Decoder) throws {\n        try self.init(value: decoder.singleValueContainer().decode(String.self))\n    }\n\n    public static func == (lhs: PBXSourceTree, rhs: PBXSourceTree) -> Bool {\n        switch (lhs, rhs) {\n        case (.none, .none),\n             (.absolute, .absolute),\n             (.group, .group),\n             (.sourceRoot, .sourceRoot),\n             (.buildProductsDir, .buildProductsDir),\n             (.sdkRoot, .sdkRoot),\n             (.developerDir, .developerDir):\n            return true\n\n        case let (.custom(lhsValue), .custom(rhsValue)):\n            return lhsValue == rhsValue\n\n        case (.none, _),\n             (.absolute, _),\n             (.group, _),\n             (.sourceRoot, _),\n             (.buildProductsDir, _),\n             (.sdkRoot, _),\n             (.developerDir, _),\n             (.custom, _):\n            return false\n        }\n    }\n\n    public var description: String {\n        switch self {\n        case .none:\n            return PBXSourceTree.noneValue\n        case .absolute:\n            return PBXSourceTree.absoluteValue\n        case .group:\n            return PBXSourceTree.groupValue\n        case .sourceRoot:\n            return PBXSourceTree.sourceRootValue\n        case .buildProductsDir:\n            return PBXSourceTree.buildProductsDirValue\n        case .sdkRoot:\n            return PBXSourceTree.sdkRootValue\n        case .developerDir:\n            return PBXSourceTree.developerDirValue\n        case let .custom(value):\n            return value\n        }\n    }\n}\n\n// MARK: - PBXSourceTree Extension (PlistValue)\n\nextension PBXSourceTree {\n    func plist() -> PlistValue {\n        return .string(CommentedString(String(describing: self)))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Files/PBXVariantGroup.swift",
    "content": "import Foundation\n\n// This is the element for referencing localized resources.\npublic final class PBXVariantGroup: PBXGroup {}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Files/XCVersionGroup.swift",
    "content": "import Foundation\nimport PathKit\n\n/// Group that contains multiple files references to the different versions of a resource.\n/// Used to contain the different versions of a xcdatamodel\npublic final class XCVersionGroup: PBXGroup {\n    // MARK: - Attributes\n\n    /// Current version.\n    var currentVersionReference: PBXObjectReference?\n\n    /// Returns the current version file reference.\n    public var currentVersion: PBXFileReference? {\n        get {\n            return currentVersionReference?.getObject()\n        }\n        set {\n            currentVersionReference = newValue?.reference\n        }\n    }\n\n    /// Version group type.\n    public var versionGroupType: String?\n\n    // MARK: - Init\n\n    /// Initializes the group with its attributes.\n    ///\n    /// - Parameters:\n    ///   - currentVersion: current version file reference.\n    ///   - name: group name.\n    ///   - path: group relative path from `sourceTree`, if different than `name`.\n    ///   - sourceTree: group source tree.\n    ///   - versionGroupType: identifier of the group type.\n    ///   - children: group children.\n    ///   - includeInIndex: should the IDE index the files in the group?\n    ///   - wrapsLines: should the IDE wrap lines for files in the group?\n    ///   - usesTabs: group uses tabs.\n    ///   - indentWidth: the number of positions to indent blocks of code\n    ///   - tabWidth: the visual width of tab characters\n    public init(currentVersion: PBXFileReference? = nil,\n                path: String? = nil,\n                name: String? = nil,\n                sourceTree: PBXSourceTree? = nil,\n                versionGroupType: String? = nil,\n                children: [PBXFileElement] = [],\n                includeInIndex: Bool? = nil,\n                wrapsLines: Bool? = nil,\n                usesTabs: Bool? = nil,\n                indentWidth: UInt? = nil,\n                tabWidth: UInt? = nil) {\n        currentVersionReference = currentVersion?.reference\n        self.versionGroupType = versionGroupType\n        super.init(children: children,\n                   sourceTree: sourceTree,\n                   name: name,\n                   path: path,\n                   includeInIndex: includeInIndex,\n                   wrapsLines: wrapsLines,\n                   usesTabs: usesTabs,\n                   indentWidth: indentWidth,\n                   tabWidth: tabWidth)\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case currentVersion\n        case versionGroupType\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let objects = decoder.context.objects\n        let objectReferenceRepository = decoder.context.objectReferenceRepository\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        if let currentVersionReference = try container.decodeIfPresent(String.self, forKey: .currentVersion) {\n            self.currentVersionReference = objectReferenceRepository.getOrCreate(reference: currentVersionReference, objects: objects)\n        } else {\n            currentVersionReference = nil\n        }\n        versionGroupType = try container.decodeIfPresent(String.self, forKey: .versionGroupType)\n        try super.init(from: decoder)\n    }\n\n    // MARK: - XCVersionGroup Extension (PlistSerializable)\n\n    override func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = try super.plistKeyAndValue(proj: proj, reference: reference).value.dictionary ?? [:]\n        dictionary[\"isa\"] = .string(CommentedString(XCVersionGroup.isa))\n        if let versionGroupType = versionGroupType {\n            dictionary[\"versionGroupType\"] = .string(CommentedString(versionGroupType))\n        }\n        if let currentVersionReference = currentVersionReference {\n            let fileElement: PBXFileElement? = currentVersionReference.getObject()\n            dictionary[\"currentVersion\"] = .string(CommentedString(currentVersionReference.value, comment: fileElement?.fileName()))\n        }\n        return (key: CommentedString(reference, comment: path?.split(separator: \"/\").last.map(String.init)),\n                value: .dictionary(dictionary))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Project/PBXObject.swift",
    "content": "// sourcery:file: skipEquality\nimport Foundation\n\n/// Class that represents a project element.\npublic class PBXObject: Hashable, Decodable, Equatable, AutoEquatable {\n    /// Returns the unique identifier.\n    /// Note: The unique identifier of an object might change when the project gets written.\n    /// If you use this identifier from a scheme, make sure the project is written before the project is.\n    public var uuid: String {\n        return reference.value\n    }\n\n    /// The object reference in the project that contains it.\n    let reference: PBXObjectReference\n\n    /**\n     Used to differentiate this object from other equatable ones for the purposes of uuid generation.\n\n     This shouldn't be required to be set in normal circumstances.\n     In some rare cases xcodeproj doesn't have enough context about otherwise equatable objects,\n     so it has to resolve automatic uuid conflicts by appending numbers.\n     This property can be used to provide more context to disambiguate these objects,\n     which will result in more deterministic uuids.\n     */\n    public var context: String?\n\n    // MARK: - Init\n\n    init() {\n        reference = PBXObjectReference()\n        reference.setObject(self)\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case reference\n    }\n\n    /// Initializes the object from its project representation.\n    ///\n    /// - Parameter decoder: XcodeprojPropertyListDecoder decoder.\n    /// - Throws: an error if the object cannot be parsed.\n    public required init(from decoder: Decoder) throws {\n        let referenceRepository = decoder.context.objectReferenceRepository\n        let objects = decoder.context.objects\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        let reference: String = try container.decode(.reference)\n        self.reference = referenceRepository.getOrCreate(reference: reference, objects: objects)\n        self.reference.setObject(self)\n    }\n\n    /// Object isa (type id)\n    public static var isa: String {\n        return String(describing: self)\n    }\n\n    public static func == (lhs: PBXObject,\n                           rhs: PBXObject) -> Bool {\n        return lhs.isEqual(to: rhs)\n    }\n\n    @objc dynamic func isEqual(to _: Any?) -> Bool {\n        return true\n    }\n\n    public func hash(into hasher: inout Hasher) {\n        hasher.combine(reference)\n    }\n\n    /// Returns the objects the object belong to.\n    ///\n    /// - Returns: objects the object belongs to.\n    /// - Throws: an error if this method is accessed before the object has been added to a project.\n    func objects() throws -> PBXObjects {\n        guard let objects = self.reference.objects else {\n            let objectType = String(describing: type(of: self))\n            throw PBXObjectError.orphaned(type: objectType, reference: reference.value)\n        }\n        return objects\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Project/PBXObjectParser.swift",
    "content": "import Foundation\n\nfinal class PBXObjectParser {\n    private let userInfo: [CodingUserInfoKey: Any]\n    private let decoder = XcodeprojJSONDecoder()\n\n    init(userInfo: [CodingUserInfoKey: Any]) {\n        self.userInfo = userInfo\n    }\n\n    // swiftlint:disable function_body_length\n    public func parse(reference: String, dictionary: [String: Any]) throws -> PBXObject {\n        var mutableDictionary = dictionary\n        mutableDictionary[\"reference\"] = reference\n        let data = try JSONSerialization.data(withJSONObject: mutableDictionary, options: [])\n        guard let isa = dictionary[\"isa\"] as? String else { throw PBXObjectError.missingIsa }\n        // Order is important for performance\n        switch isa {\n        case PBXFileElement.isa:\n            return try decoder.decode(PBXFileElement.self, from: data)\n        case PBXBuildFile.isa:\n            return try decoder.decode(PBXBuildFile.self, from: data)\n        case PBXFileReference.isa:\n            return try decoder.decode(PBXFileReference.self, from: data)\n        case PBXLegacyTarget.isa:\n            return try decoder.decode(PBXLegacyTarget.self, from: data)\n        case PBXNativeTarget.isa:\n            return try decoder.decode(PBXNativeTarget.self, from: data)\n        case PBXAggregateTarget.isa:\n            return try decoder.decode(PBXAggregateTarget.self, from: data)\n        case PBXProject.isa:\n            return try decoder.decode(PBXProject.self, from: data)\n        case PBXGroup.isa:\n            return try decoder.decode(PBXGroup.self, from: data)\n        case PBXHeadersBuildPhase.isa:\n            return try decoder.decode(PBXHeadersBuildPhase.self, from: data)\n        case PBXFrameworksBuildPhase.isa:\n            return try decoder.decode(PBXFrameworksBuildPhase.self, from: data)\n        case XCConfigurationList.isa:\n            return try decoder.decode(XCConfigurationList.self, from: data)\n        case PBXResourcesBuildPhase.isa:\n            return try decoder.decode(PBXResourcesBuildPhase.self, from: data)\n        case PBXShellScriptBuildPhase.isa:\n            return try decoder.decode(PBXShellScriptBuildPhase.self, from: data)\n        case PBXSourcesBuildPhase.isa:\n            return try decoder.decode(PBXSourcesBuildPhase.self, from: data)\n        case PBXTargetDependency.isa:\n            return try decoder.decode(PBXTargetDependency.self, from: data)\n        case PBXVariantGroup.isa:\n            return try decoder.decode(PBXVariantGroup.self, from: data)\n        case XCBuildConfiguration.isa:\n            return try decoder.decode(XCBuildConfiguration.self, from: data)\n        case PBXCopyFilesBuildPhase.isa:\n            return try decoder.decode(PBXCopyFilesBuildPhase.self, from: data)\n        case PBXContainerItemProxy.isa:\n            return try decoder.decode(PBXContainerItemProxy.self, from: data)\n        case PBXReferenceProxy.isa:\n            return try decoder.decode(PBXReferenceProxy.self, from: data)\n        case XCVersionGroup.isa:\n            return try decoder.decode(XCVersionGroup.self, from: data)\n        case PBXRezBuildPhase.isa:\n            return try decoder.decode(PBXRezBuildPhase.self, from: data)\n        case PBXBuildRule.isa:\n            return try decoder.decode(PBXBuildRule.self, from: data)\n        default:\n            throw PBXObjectError.unknownElement(isa)\n        }\n    }\n\n    // swiftlint:enable function_body_length\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Project/PBXObjectReference.swift",
    "content": "import Foundation\nimport os.signpost\n\n/// Object used as a reference to PBXObjects from PBXObjects.\nclass PBXObjectReference: NSObject, Comparable, NSCopying {\n    /// Boolean that indicates whether the id is temporary and needs\n    /// to be regenerated when saving it to disk.\n    private(set) var temporary: Bool\n\n    /// String reference.\n    private(set) var value: String\n\n    /// Weak reference to the objects instance that contains the project objects.\n    weak var objects: PBXObjects?\n\n    /// A weak reference to the object\n    private weak var object: PBXObject?\n\n    /// Initializes a non-temporary reference.\n    ///\n    /// - Parameter reference: reference.\n    init(_ reference: String, objects: PBXObjects) {\n        value = reference\n        temporary = false\n        self.objects = objects\n    }\n\n    /// Initializes a temporary reference\n    init(objects: PBXObjects? = nil) {\n        value = \"TEMP_\\(UUID().uuidString)\"\n        temporary = true\n        self.objects = objects\n    }\n\n    /// Initializes the reference without objects.\n    ///\n    /// - Parameter reference: reference.\n    init(_ reference: String) {\n        value = reference\n        temporary = false\n    }\n\n    /// Initializes the object reference with another object reference, copying its values.\n    ///\n    /// - Parameter objectReference: object reference to be initialized from.\n    required init(_ objectReference: PBXObjectReference) {\n        value = objectReference.value\n        temporary = objectReference.temporary\n    }\n\n    /// Fixes its value making it permanent.\n    ///\n    /// - Parameter value: value.\n    func fix(_ value: String) {\n        let object = objects?.delete(reference: self)\n        self.value = value\n        temporary = false\n        if let object = object {\n            objects?.add(object: object)\n        }\n    }\n\n    /// Invalidates the reference making it temporary.\n    func invalidate() {\n        let object = objects?.delete(reference: self)\n        value = \"TEMP_\\(UUID().uuidString)\"\n        temporary = true\n        if let object = object {\n            objects?.add(object: object)\n        }\n    }\n\n    /// Hash value.\n    override var hash: Int {\n        return value.hashValue\n    }\n\n    func copy(with _: NSZone? = nil) -> Any {\n        return type(of: self).init(self)\n    }\n\n    /// Compares two instances of PBXObjectReference\n    ///\n    /// - Parameters:\n    ///   - lhs: first instance to be compared.\n    ///   - rhs: second instance to be compared.\n    /// - Returns: true if the two instances are equal.\n    static func == (lhs: PBXObjectReference, rhs: PBXObjectReference) -> Bool {\n        return lhs.isEqual(rhs)\n    }\n\n    /// Compares with another instance of PBXObjectReference.\n    ///\n    /// - Parameters:\n    ///   - object: instance to be compared with.\n    /// - Returns: true if the two instances are equal.\n    override func isEqual(_ object: Any?) -> Bool {\n        guard let object = object as? PBXObjectReference else { return false }\n        return value == object.value\n    }\n\n    /// Compares two instances.\n    ///\n    /// - Parameters:\n    ///   - lhs: first instance to be compared.\n    ///   - rhs: second instance to be compared.\n    /// - Returns: comparison result.\n    static func < (lhs: PBXObjectReference, rhs: PBXObjectReference) -> Bool {\n        return lhs.value < rhs.value\n    }\n\n    /// Sets the object so it can be retrieved quickly again later\n    ///\n    /// - Parameter object: The object\n    func setObject(_ object: PBXObject) {\n        self.object = object\n    }\n\n    /// Returns the object the reference is referfing to.\n    ///\n    /// - Returns: object the reference is referring to. Returns nil if the objects property has been released or the reference doesn't exist\n    func getObject<T: PBXObject>() -> T? {\n        return try? getThrowingObject()\n    }\n\n    /// Returns the object the reference is referfing to.\n    ///\n    /// - Returns: object the reference is referring to.\n    /// - Throws: an errof it the objects property has been released or the reference doesn't exist.\n    func getThrowingObject<T: PBXObject>() throws -> T {\n        return try OSLogger.instance.log(name: \"Materialize Object\") {\n            if let object = object as? T {\n                return object\n            }\n            guard let objects = objects else {\n                throw PBXObjectError.objectsReleased\n            }\n            guard let object = objects.get(reference: self) as? T else {\n                throw PBXObjectError.objectNotFound(value)\n            }\n            self.object = object\n            return object\n        }\n    }\n}\n\nextension Array where Element: PBXObject {\n    func references() -> [PBXObjectReference] {\n        return map { $0.reference }\n    }\n}\n\nextension Array where Element: PBXObjectReference {\n    func objects<T: PBXObject>() -> [T] {\n        return compactMap { $0.getObject() }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Project/PBXObjects.swift",
    "content": "import Foundation\n\n// swiftlint:disable type_body_length\nclass PBXObjects: Equatable {\n    // MARK: - Properties\n\n    private let lock = NSRecursiveLock()\n\n    private var unsyncProjects: [PBXObjectReference: PBXProject] = [:]\n    var projects: [PBXObjectReference: PBXProject] {\n        return lock.whileLocked { unsyncProjects }\n    }\n\n    private var unsyncReferenceProxies: [PBXObjectReference: PBXReferenceProxy] = [:]\n    var referenceProxies: [PBXObjectReference: PBXReferenceProxy] {\n        return lock.whileLocked { unsyncReferenceProxies }\n    }\n\n    // File elements\n    private var unsyncFileReferences: [PBXObjectReference: PBXFileReference] = [:]\n    var fileReferences: [PBXObjectReference: PBXFileReference] {\n        return lock.whileLocked { unsyncFileReferences }\n    }\n\n    private var unsyncVersionGroups: [PBXObjectReference: XCVersionGroup] = [:]\n    var versionGroups: [PBXObjectReference: XCVersionGroup] {\n        return lock.whileLocked { unsyncVersionGroups }\n    }\n\n    private var unsyncVariantGroups: [PBXObjectReference: PBXVariantGroup] = [:]\n    var variantGroups: [PBXObjectReference: PBXVariantGroup] {\n        return lock.whileLocked { unsyncVariantGroups }\n    }\n\n    private var unsyncGroups: [PBXObjectReference: PBXGroup] = [:]\n    var groups: [PBXObjectReference: PBXGroup] {\n        return lock.whileLocked { unsyncGroups }\n    }\n\n    // Configuration\n    private var unsyncBuildConfigurations: [PBXObjectReference: XCBuildConfiguration] = [:]\n    var buildConfigurations: [PBXObjectReference: XCBuildConfiguration] {\n        return lock.whileLocked { unsyncBuildConfigurations }\n    }\n\n    private var unsyncConfigurationLists: [PBXObjectReference: XCConfigurationList] = [:]\n    var configurationLists: [PBXObjectReference: XCConfigurationList] {\n        return lock.whileLocked { unsyncConfigurationLists }\n    }\n\n    // Targets\n    private var unsyncLegacyTargets: [PBXObjectReference: PBXLegacyTarget] = [:]\n    var legacyTargets: [PBXObjectReference: PBXLegacyTarget] {\n        return lock.whileLocked { unsyncLegacyTargets }\n    }\n\n    private var unsyncAggregateTargets: [PBXObjectReference: PBXAggregateTarget] = [:]\n    var aggregateTargets: [PBXObjectReference: PBXAggregateTarget] {\n        return lock.whileLocked { unsyncAggregateTargets }\n    }\n\n    private var unsyncNativeTargets: [PBXObjectReference: PBXNativeTarget] = [:]\n    var nativeTargets: [PBXObjectReference: PBXNativeTarget] {\n        return lock.whileLocked { unsyncNativeTargets }\n    }\n\n    private var unsyncTargetDependencies: [PBXObjectReference: PBXTargetDependency] = [:]\n    var targetDependencies: [PBXObjectReference: PBXTargetDependency] {\n        return lock.whileLocked { unsyncTargetDependencies }\n    }\n\n    private var unsyncContainerItemProxies: [PBXObjectReference: PBXContainerItemProxy] = [:]\n    var containerItemProxies: [PBXObjectReference: PBXContainerItemProxy] {\n        return lock.whileLocked { unsyncContainerItemProxies }\n    }\n\n    private var unsyncBuildRules: [PBXObjectReference: PBXBuildRule] = [:]\n    var buildRules: [PBXObjectReference: PBXBuildRule] {\n        return lock.whileLocked { unsyncBuildRules }\n    }\n\n    // Build Phases\n    private var unsyncBuildFiles: [PBXObjectReference: PBXBuildFile] = [:]\n    var buildFiles: [PBXObjectReference: PBXBuildFile] {\n        return lock.whileLocked { unsyncBuildFiles }\n    }\n\n    private var unsyncCopyFilesBuildPhases: [PBXObjectReference: PBXCopyFilesBuildPhase] = [:]\n    var copyFilesBuildPhases: [PBXObjectReference: PBXCopyFilesBuildPhase] {\n        return lock.whileLocked { unsyncCopyFilesBuildPhases }\n    }\n\n    private var unsyncShellScriptBuildPhases: [PBXObjectReference: PBXShellScriptBuildPhase] = [:]\n    var shellScriptBuildPhases: [PBXObjectReference: PBXShellScriptBuildPhase] {\n        return lock.whileLocked { unsyncShellScriptBuildPhases }\n    }\n\n    private var unsyncResourcesBuildPhases: [PBXObjectReference: PBXResourcesBuildPhase] = [:]\n    var resourcesBuildPhases: [PBXObjectReference: PBXResourcesBuildPhase] {\n        return lock.whileLocked { unsyncResourcesBuildPhases }\n    }\n\n    private var unsyncFrameworksBuildPhases: [PBXObjectReference: PBXFrameworksBuildPhase] = [:]\n    var frameworksBuildPhases: [PBXObjectReference: PBXFrameworksBuildPhase] {\n        return lock.whileLocked { unsyncFrameworksBuildPhases }\n    }\n\n    private var unsyncHeadersBuildPhases: [PBXObjectReference: PBXHeadersBuildPhase] = [:]\n    var headersBuildPhases: [PBXObjectReference: PBXHeadersBuildPhase] {\n        return lock.whileLocked { unsyncHeadersBuildPhases }\n    }\n\n    private var unsyncSourcesBuildPhases: [PBXObjectReference: PBXSourcesBuildPhase] = [:]\n    var sourcesBuildPhases: [PBXObjectReference: PBXSourcesBuildPhase] {\n        return lock.whileLocked { unsyncSourcesBuildPhases }\n    }\n\n    private var unsyncCarbonResourcesBuildPhases: [PBXObjectReference: PBXRezBuildPhase] = [:]\n    var carbonResourcesBuildPhases: [PBXObjectReference: PBXRezBuildPhase] {\n        return lock.whileLocked { unsyncCarbonResourcesBuildPhases }\n    }\n\n    /// Initializes the project objects container\n    ///\n    /// - Parameters:\n    ///   - objects: project objects\n    init(objects: [PBXObject] = []) {\n        objects.forEach {\n            _ = self.add(object: $0)\n        }\n    }\n\n    // MARK: - Equatable\n\n    public static func == (lhs: PBXObjects, rhs: PBXObjects) -> Bool {\n        return lhs.buildFiles == rhs.buildFiles &&\n            lhs.legacyTargets == rhs.legacyTargets &&\n            lhs.aggregateTargets == rhs.aggregateTargets &&\n            lhs.containerItemProxies == rhs.containerItemProxies &&\n            lhs.copyFilesBuildPhases == rhs.copyFilesBuildPhases &&\n            lhs.groups == rhs.groups &&\n            lhs.configurationLists == rhs.configurationLists &&\n            lhs.buildConfigurations == rhs.buildConfigurations &&\n            lhs.variantGroups == rhs.variantGroups &&\n            lhs.targetDependencies == rhs.targetDependencies &&\n            lhs.sourcesBuildPhases == rhs.sourcesBuildPhases &&\n            lhs.shellScriptBuildPhases == rhs.shellScriptBuildPhases &&\n            lhs.resourcesBuildPhases == rhs.resourcesBuildPhases &&\n            lhs.frameworksBuildPhases == rhs.frameworksBuildPhases &&\n            lhs.headersBuildPhases == rhs.headersBuildPhases &&\n            lhs.nativeTargets == rhs.nativeTargets &&\n            lhs.fileReferences == rhs.fileReferences &&\n            lhs.projects == rhs.projects &&\n            lhs.versionGroups == rhs.versionGroups &&\n            lhs.referenceProxies == rhs.referenceProxies &&\n            lhs.carbonResourcesBuildPhases == rhs.carbonResourcesBuildPhases &&\n            lhs.buildRules == rhs.buildRules\n    }\n\n    // MARK: - Helpers\n\n    /// Add a new object.\n    ///\n    /// - Parameters:\n    ///   - object: object.\n    func add(object: PBXObject) {\n        lock.lock()\n        defer {\n            lock.unlock()\n        }\n        let objectReference: PBXObjectReference = object.reference\n        objectReference.objects = self\n\n        switch object {\n        // subclasses of PBXGroup; must be tested before PBXGroup\n        case let object as PBXVariantGroup: unsyncVariantGroups[objectReference] = object\n        case let object as XCVersionGroup: unsyncVersionGroups[objectReference] = object\n\n        // everything else\n        case let object as PBXBuildFile: unsyncBuildFiles[objectReference] = object\n        case let object as PBXAggregateTarget: unsyncAggregateTargets[objectReference] = object\n        case let object as PBXLegacyTarget: unsyncLegacyTargets[objectReference] = object\n        case let object as PBXContainerItemProxy: unsyncContainerItemProxies[objectReference] = object\n        case let object as PBXCopyFilesBuildPhase: unsyncCopyFilesBuildPhases[objectReference] = object\n        case let object as PBXGroup: unsyncGroups[objectReference] = object\n        case let object as XCConfigurationList: unsyncConfigurationLists[objectReference] = object\n        case let object as XCBuildConfiguration: unsyncBuildConfigurations[objectReference] = object\n        case let object as PBXTargetDependency: unsyncTargetDependencies[objectReference] = object\n        case let object as PBXSourcesBuildPhase: unsyncSourcesBuildPhases[objectReference] = object\n        case let object as PBXShellScriptBuildPhase: unsyncShellScriptBuildPhases[objectReference] = object\n        case let object as PBXResourcesBuildPhase: unsyncResourcesBuildPhases[objectReference] = object\n        case let object as PBXFrameworksBuildPhase: unsyncFrameworksBuildPhases[objectReference] = object\n        case let object as PBXHeadersBuildPhase: unsyncHeadersBuildPhases[objectReference] = object\n        case let object as PBXNativeTarget: unsyncNativeTargets[objectReference] = object\n        case let object as PBXFileReference: unsyncFileReferences[objectReference] = object\n        case let object as PBXProject: unsyncProjects[objectReference] = object\n        case let object as PBXReferenceProxy: unsyncReferenceProxies[objectReference] = object\n        case let object as PBXRezBuildPhase: unsyncCarbonResourcesBuildPhases[objectReference] = object\n        case let object as PBXBuildRule: unsyncBuildRules[objectReference] = object\n        default: fatalError(\"Unhandled PBXObject type for \\(object), this is likely a bug / todo\")\n        }\n    }\n\n    /// Deletes the object with the given reference.\n    ///\n    /// - Parameter reference: referenc of the object to be deleted.\n    /// - Returns: the deleted object.\n    // swiftlint:disable:next function_body_length Note: SwiftLint doesn't disable if @discardable and the function are on different lines.\n    @discardableResult func delete(reference: PBXObjectReference) -> PBXObject? {\n        lock.lock()\n        if let index = buildFiles.index(forKey: reference) {\n            return unsyncBuildFiles.remove(at: index).value\n        } else if let index = aggregateTargets.index(forKey: reference) {\n            return unsyncAggregateTargets.remove(at: index).value\n        } else if let index = legacyTargets.index(forKey: reference) {\n            return unsyncLegacyTargets.remove(at: index).value\n        } else if let index = containerItemProxies.index(forKey: reference) {\n            return unsyncContainerItemProxies.remove(at: index).value\n        } else if let index = groups.index(forKey: reference) {\n            return unsyncGroups.remove(at: index).value\n        } else if let index = configurationLists.index(forKey: reference) {\n            return unsyncConfigurationLists.remove(at: index).value\n        } else if let index = buildConfigurations.index(forKey: reference) {\n            return unsyncBuildConfigurations.remove(at: index).value\n        } else if let index = variantGroups.index(forKey: reference) {\n            return unsyncVariantGroups.remove(at: index).value\n        } else if let index = targetDependencies.index(forKey: reference) {\n            return unsyncTargetDependencies.remove(at: index).value\n        } else if let index = nativeTargets.index(forKey: reference) {\n            return unsyncNativeTargets.remove(at: index).value\n        } else if let index = fileReferences.index(forKey: reference) {\n            return unsyncFileReferences.remove(at: index).value\n        } else if let index = projects.index(forKey: reference) {\n            return unsyncProjects.remove(at: index).value\n        } else if let index = versionGroups.index(forKey: reference) {\n            return unsyncVersionGroups.remove(at: index).value\n        } else if let index = referenceProxies.index(forKey: reference) {\n            return unsyncReferenceProxies.remove(at: index).value\n        } else if let index = copyFilesBuildPhases.index(forKey: reference) {\n            return unsyncCopyFilesBuildPhases.remove(at: index).value\n        } else if let index = shellScriptBuildPhases.index(forKey: reference) {\n            return unsyncShellScriptBuildPhases.remove(at: index).value\n        } else if let index = resourcesBuildPhases.index(forKey: reference) {\n            return unsyncResourcesBuildPhases.remove(at: index).value\n        } else if let index = frameworksBuildPhases.index(forKey: reference) {\n            return unsyncFrameworksBuildPhases.remove(at: index).value\n        } else if let index = headersBuildPhases.index(forKey: reference) {\n            return unsyncHeadersBuildPhases.remove(at: index).value\n        } else if let index = sourcesBuildPhases.index(forKey: reference) {\n            return unsyncSourcesBuildPhases.remove(at: index).value\n        } else if let index = carbonResourcesBuildPhases.index(forKey: reference) {\n            return unsyncCarbonResourcesBuildPhases.remove(at: index).value\n        } else if let index = buildRules.index(forKey: reference) {\n            return unsyncBuildRules.remove(at: index).value\n        }\n        lock.unlock()\n        return nil\n    }\n\n    /// It returns the object with the given reference.\n    ///\n    /// - Parameter reference: Xcode reference.\n    /// - Returns: object.\n    // swiftlint:disable:next function_body_length\n    func get(reference: PBXObjectReference) -> PBXObject? {\n        // This if-let expression is used because the equivalent chain of `??` separated lookups causes,\n        // with Swift 4, this compiler error:\n        //     Expression was too complex to be solved in reasonable time;\n        //     consider breaking up the expression into distinct sub-expressions\n        if let object = buildFiles[reference] {\n            return object\n        } else if let object = aggregateTargets[reference] {\n            return object\n        } else if let object = legacyTargets[reference] {\n            return object\n        } else if let object = containerItemProxies[reference] {\n            return object\n        } else if let object = groups[reference] {\n            return object\n        } else if let object = configurationLists[reference] {\n            return object\n        } else if let object = buildConfigurations[reference] {\n            return object\n        } else if let object = variantGroups[reference] {\n            return object\n        } else if let object = targetDependencies[reference] {\n            return object\n        } else if let object = nativeTargets[reference] {\n            return object\n        } else if let object = fileReferences[reference] {\n            return object\n        } else if let object = projects[reference] {\n            return object\n        } else if let object = versionGroups[reference] {\n            return object\n        } else if let object = referenceProxies[reference] {\n            return object\n        } else if let object = copyFilesBuildPhases[reference] {\n            return object\n        } else if let object = shellScriptBuildPhases[reference] {\n            return object\n        } else if let object = resourcesBuildPhases[reference] {\n            return object\n        } else if let object = frameworksBuildPhases[reference] {\n            return object\n        } else if let object = headersBuildPhases[reference] {\n            return object\n        } else if let object = sourcesBuildPhases[reference] {\n            return object\n        } else if let object = carbonResourcesBuildPhases[reference] {\n            return object\n        } else if let object = buildRules[reference] {\n            return object\n        } else {\n            return nil\n        }\n    }\n}\n\n// MARK: - Public\n\nextension PBXObjects {\n    /// Returns all the targets with the given name.\n    ///\n    /// - Parameters:\n    ///   - name: target name.\n    /// - Returns: targets with the given name.\n    func targets(named name: String) -> [PBXTarget] {\n        var targets: [PBXTarget] = []\n        let filter = { (targets: [PBXObjectReference: PBXTarget]) -> [PBXTarget] in\n            targets.values.filter({ $0.name == name })\n        }\n        targets.append(contentsOf: filter(nativeTargets))\n        targets.append(contentsOf: filter(legacyTargets))\n        targets.append(contentsOf: filter(aggregateTargets))\n        return targets\n    }\n\n    /// Invalidates all the objects references.\n    func invalidateReferences() {\n        forEach {\n            $0.reference.invalidate()\n        }\n    }\n\n    // MARK: - Computed Properties\n\n    var buildPhases: [PBXObjectReference: PBXBuildPhase] {\n        var phases: [PBXObjectReference: PBXBuildPhase] = [:]\n        phases.merge(copyFilesBuildPhases as [PBXObjectReference: PBXBuildPhase], uniquingKeysWith: { first, _ in first })\n        phases.merge(sourcesBuildPhases as [PBXObjectReference: PBXBuildPhase], uniquingKeysWith: { first, _ in first })\n        phases.merge(shellScriptBuildPhases as [PBXObjectReference: PBXBuildPhase], uniquingKeysWith: { first, _ in first })\n        phases.merge(resourcesBuildPhases as [PBXObjectReference: PBXBuildPhase], uniquingKeysWith: { first, _ in first })\n        phases.merge(headersBuildPhases as [PBXObjectReference: PBXBuildPhase], uniquingKeysWith: { first, _ in first })\n        phases.merge(carbonResourcesBuildPhases as [PBXObjectReference: PBXBuildPhase], uniquingKeysWith: { first, _ in first })\n        phases.merge(frameworksBuildPhases as [PBXObjectReference: PBXBuildPhase], uniquingKeysWith: { first, _ in first })\n        return phases\n    }\n\n    // This dictionary is used to quickly get a connection between the build phase and the build files of this phase.\n    // This is used to decode build files. (we need the name of the build phase)\n    // Otherwise, we would have to go through all the build phases for each file.\n    var buildPhaseFile: [PBXObjectReference: PBXBuildPhaseFile] {\n        let values: [[PBXBuildPhaseFile]] = buildPhases.values.map({ buildPhase in\n            let files = buildPhase.files\n            let buildPhaseFile: [PBXBuildPhaseFile] = files.compactMap({ (file: PBXBuildFile) -> (PBXBuildPhaseFile) in\n                PBXBuildPhaseFile(\n                    buildFile: file,\n                    buildPhase: buildPhase\n                )\n            })\n            return buildPhaseFile\n        })\n        return Dictionary(uniqueKeysWithValues: values.flatMap({ $0 }).map({ ($0.buildFile.reference, $0) }))\n    }\n\n    /// Runs the given closure for each of the objects that are part of the project.\n    ///\n    /// - Parameter closure: closure to be run.\n    func forEach(_ closure: (PBXObject) -> Void) {\n        buildFiles.values.forEach(closure)\n        legacyTargets.values.forEach(closure)\n        aggregateTargets.values.forEach(closure)\n        containerItemProxies.values.forEach(closure)\n        groups.values.forEach(closure)\n        configurationLists.values.forEach(closure)\n        versionGroups.values.forEach(closure)\n        buildConfigurations.values.forEach(closure)\n        variantGroups.values.forEach(closure)\n        targetDependencies.values.forEach(closure)\n        nativeTargets.values.forEach(closure)\n        fileReferences.values.forEach(closure)\n        projects.values.forEach(closure)\n        referenceProxies.values.forEach(closure)\n        buildRules.values.forEach(closure)\n        copyFilesBuildPhases.values.forEach(closure)\n        shellScriptBuildPhases.values.forEach(closure)\n        resourcesBuildPhases.values.forEach(closure)\n        frameworksBuildPhases.values.forEach(closure)\n        headersBuildPhases.values.forEach(closure)\n        sourcesBuildPhases.values.forEach(closure)\n        carbonResourcesBuildPhases.values.forEach(closure)\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Project/PBXOutputSettings.swift",
    "content": "import Foundation\n\n/// Code for controlling sorting of files in an pbxproj file.\n\n// MARK: - Core sort functions\n\n// Because of the number of optional data items in PBXBuildFiles, we've externalised the core code in these two functions.\n// Note, PBXBuildFile's contains PBXFileElements so this first function is an optional handling wrapper driving the second.\n// Also note that we use the .fileName() function to retrieve the name as both .path and .name properties can be nil.\n\nprivate func sortUsingNames(_ lhs: PBXBuildFile, _ rhs: PBXBuildFile) -> Bool {\n    if let lhsFile = lhs.file, let rhsFile = rhs.file {\n        return sortUsingNames(lhsFile, rhsFile)\n    }\n    return lhs.uuid < rhs.uuid\n}\n\nprivate func sortUsingNames(_ lhs: PBXFileElement, _ rhs: PBXFileElement) -> Bool {\n    if let lhsFilename = lhs.fileName(), let rhsFilename = rhs.fileName() {\n        return lhsFilename == rhsFilename ? lhs.uuid < rhs.uuid : lhsFilename < rhsFilename\n    }\n    return lhs.uuid < rhs.uuid\n}\n\n// MARK: - Sorting enums\n\n/// Defines the sorting applied to files within the file lists. Defaults to by UUID.\npublic enum PBXFileOrder {\n    /// Sort files by Xcode's UUID\n    case byUUID\n\n    /// Sort files by their file name. This is a case sensistive sort with lower case names coming after uppercase names.\n    case byFilename\n\n    internal func sort<Object>(lhs: (PBXObjectReference, Object), rhs: (PBXObjectReference, Object)) -> Bool\n        where Object: PlistSerializable & Equatable {\n        return lhs.0 < rhs.0\n    }\n\n    internal func sort(lhs: (PBXObjectReference, PBXBuildFile), rhs: (PBXObjectReference, PBXBuildFile)) -> Bool {\n        switch self {\n        case .byFilename:\n            return sortUsingNames(lhs.1, rhs.1)\n        default:\n            return lhs.0 < rhs.0\n        }\n    }\n\n    internal func sort(lhs: (PBXObjectReference, PBXBuildPhaseFile), rhs: (PBXObjectReference, PBXBuildPhaseFile)) -> Bool {\n        switch self {\n        case .byFilename:\n            return sortUsingNames(lhs.1.buildFile, rhs.1.buildFile)\n        default:\n            return lhs.0 < rhs.0\n        }\n    }\n\n    internal func sort(lhs: (PBXObjectReference, PBXFileReference), rhs: (PBXObjectReference, PBXFileReference)) -> Bool {\n        switch self {\n        case .byFilename:\n            return sortUsingNames(lhs.1, rhs.1)\n\n        default:\n            return lhs.0 < rhs.0\n        }\n    }\n}\n\nprivate extension PBXFileElement {\n    var isGroup: Bool {\n        switch self {\n        case is PBXVariantGroup, is XCVersionGroup: return false\n        case is PBXGroup: return true\n        default: return false\n        }\n    }\n}\n\n/// Defines the sorting applied to groups with the project navigator and various build phases.\npublic enum PBXNavigatorFileOrder {\n    /// Leave the files unsorted.\n    case unsorted\n\n    /// Sort the file by their file name. This is a case sensitive sort with uppercase name preceeding lowercase names.\n    case byFilename\n\n    /// Sorts the files by their file names with all groups appear at the top of the list.\n    case byFilenameGroupsFirst\n\n    internal var sort: ((PBXFileElement, PBXFileElement) -> Bool)? {\n        switch self {\n        case .byFilename:\n            return { sortUsingNames($0, $1) }\n\n        case .byFilenameGroupsFirst:\n            return { lhs, rhs in\n                let lhsIsGroup = lhs.isGroup\n                if lhsIsGroup != rhs.isGroup {\n                    return lhsIsGroup\n                }\n                return sortUsingNames(lhs, rhs)\n            }\n\n        default:\n            return nil // Don't sort.\n        }\n    }\n}\n\n/// Defines the sorting of file within a build phase.\npublic enum PBXBuildPhaseFileOrder {\n    /// Leave the files unsorted.\n    case unsorted\n\n    /// Sort the files by their file name. This is a case sensitive sort with uppercase names appearing before lowercase names.\n    case byFilename\n\n    internal var sort: ((PBXBuildFile, PBXBuildFile) -> Bool)? {\n        switch self {\n        case .byFilename:\n            return { lhs, rhs in\n                sortUsingNames(lhs, rhs)\n            }\n\n        default:\n            return nil // Don't sort.\n        }\n    }\n}\n\n/// Defines the format of project file references\npublic enum PBXReferenceFormat {\n    /// Adds prefix and suffix characters to the references.\n    /// The prefix characters identify the type of reference generated (e.g. BP for Build Phase).\n    /// The suffix number is only added for uniqueness if clashes occur.\n    case withPrefixAndSuffix\n    /// Standard 32 char format that XCode generates.\n    /// Note: Not guaranteed to be the same as XCode generates - only the format is the same.\n    case xcode\n}\n\n/// Struct of output settings passed to various methods.\npublic struct PBXOutputSettings {\n    /// The sorting order for the list of files in Xcode's project file.\n    let projFileListOrder: PBXFileOrder\n\n    /// The sort order for files and groups that appear in the Xcode Project Navigator.\n    let projNavigatorFileOrder: PBXNavigatorFileOrder\n\n    /// The sort order for lists of files in build phases.\n    let projBuildPhaseFileOrder: PBXBuildPhaseFileOrder\n\n    /// The format of project file references\n    let projReferenceFormat: PBXReferenceFormat\n\n    /**\n     Default initializer\n\n     - Parameter projFileListOrder: Defines the sort order for internal file lists in the project file.\n     - Parameter projNavigatorFileOrder: Defines the order of files in the project navigator groups.\n     - Parameter projBuildPhaseFileOrder: Defines the sort order of files in build phases.\n     */\n    public init(projFileListOrder: PBXFileOrder = .byUUID,\n                projNavigatorFileOrder: PBXNavigatorFileOrder = .unsorted,\n                projBuildPhaseFileOrder: PBXBuildPhaseFileOrder = .unsorted,\n                projReferenceFormat: PBXReferenceFormat = .xcode) {\n        self.projFileListOrder = projFileListOrder\n        self.projNavigatorFileOrder = projNavigatorFileOrder\n        self.projBuildPhaseFileOrder = projBuildPhaseFileOrder\n        self.projReferenceFormat = projReferenceFormat\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Project/PBXProj.swift",
    "content": "import Foundation\nimport PathKit\n\n/// Represents a .pbxproj file\npublic final class PBXProj: Decodable {\n    // MARK: - Properties\n\n    let objects: PBXObjects\n\n    /// Project archive version.\n    public var archiveVersion: UInt\n\n    /// Project object version.\n    public var objectVersion: UInt\n\n    /// Project classes.\n    public var classes: [String: Any]\n\n    /// Project root object.\n    var rootObjectReference: PBXObjectReference?\n\n    /// Project root object.\n    public var rootObject: PBXProject? {\n        set {\n            rootObjectReference = newValue?.reference\n        }\n        get {\n            return rootObjectReference?.getObject()\n        }\n    }\n\n    /// Initializes the project with its attributes.\n    ///\n    /// - Parameters:\n    ///   - rootObject: project root object.\n    ///   - objectVersion: project object version.\n    ///   - archiveVersion: project archive version.\n    ///   - classes: project classes.\n    ///   - objects: project objects\n    public init(rootObject: PBXProject? = nil,\n                objectVersion: UInt = Xcode.LastKnown.objectVersion,\n                archiveVersion: UInt = Xcode.LastKnown.archiveVersion,\n                classes: [String: Any] = [:],\n                objects: [PBXObject] = []) {\n        self.archiveVersion = archiveVersion\n        self.objectVersion = objectVersion\n        self.classes = classes\n        rootObjectReference = rootObject?.reference\n        self.objects = PBXObjects(objects: objects)\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case archiveVersion\n        case objectVersion\n        case classes\n        case objects\n        case rootObject\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let objects = decoder.context.objects\n        let objectReferenceRepository = decoder.context.objectReferenceRepository\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        let rootObjectReference: String = try container.decode(.rootObject)\n        self.rootObjectReference = objectReferenceRepository.getOrCreate(reference: rootObjectReference, objects: objects)\n        objectVersion = try container.decodeIntIfPresent(.objectVersion) ?? 0\n        archiveVersion = try container.decodeIntIfPresent(.archiveVersion) ?? 1\n        classes = try container.decodeIfPresent([String: Any].self, forKey: .classes) ?? [:]\n        let objectsDictionary: [String: Any] = try container.decodeIfPresent([String: Any].self, forKey: .objects) ?? [:]\n        let objectsDictionaries: [String: [String: Any]] = (objectsDictionary as? [String: [String: Any]]) ?? [:]\n\n        let parser = PBXObjectParser(\n            userInfo: decoder.userInfo\n        )\n        try objectsDictionaries.enumerateKeysAndObjects(options: .concurrent) { key, obj, _ in\n            // swiftlint:disable force_cast\n            let reference = key as! String\n            let dictionary = obj as! [String: Any]\n            // swiftlint:enable force_cast\n            let object = try parser.parse(\n                reference: reference,\n                dictionary: dictionary\n            )\n            objects.add(object: object)\n        }\n        self.objects = objects\n    }\n}\n\n// MARK: - Public helpers\n\npublic extension PBXProj {\n    // MARK: - Properties\n\n    var projects: [PBXProject] { return Array(objects.projects.values) }\n    var referenceProxies: [PBXReferenceProxy] { return Array(objects.referenceProxies.values) }\n\n    // File elements\n    var fileReferences: [PBXFileReference] { return Array(objects.fileReferences.values) }\n    var versionGroups: [XCVersionGroup] { return Array(objects.versionGroups.values) }\n    var variantGroups: [PBXVariantGroup] { return Array(objects.variantGroups.values) }\n    var groups: [PBXGroup] { return Array(objects.groups.values) }\n\n    // Configuration\n    var buildConfigurations: [XCBuildConfiguration] { return Array(objects.buildConfigurations.values) }\n    var configurationLists: [XCConfigurationList] { return Array(objects.configurationLists.values) }\n\n    // Targets\n    var legacyTargets: [PBXLegacyTarget] { return Array(objects.legacyTargets.values) }\n    var aggregateTargets: [PBXAggregateTarget] { return Array(objects.aggregateTargets.values) }\n    var nativeTargets: [PBXNativeTarget] { return Array(objects.nativeTargets.values) }\n    var targetDependencies: [PBXTargetDependency] { return Array(objects.targetDependencies.values) }\n    var containerItemProxies: [PBXContainerItemProxy] { return Array(objects.containerItemProxies.values) }\n    var buildRules: [PBXBuildRule] { return Array(objects.buildRules.values) }\n\n    // Build\n    var buildFiles: [PBXBuildFile] { return Array(objects.buildFiles.values) }\n    var copyFilesBuildPhases: [PBXCopyFilesBuildPhase] { return Array(objects.copyFilesBuildPhases.values) }\n    var shellScriptBuildPhases: [PBXShellScriptBuildPhase] { return Array(objects.shellScriptBuildPhases.values) }\n    var resourcesBuildPhases: [PBXResourcesBuildPhase] { return Array(objects.resourcesBuildPhases.values) }\n    var frameworksBuildPhases: [PBXFrameworksBuildPhase] { return Array(objects.frameworksBuildPhases.values) }\n    var headersBuildPhases: [PBXHeadersBuildPhase] { return Array(objects.headersBuildPhases.values) }\n    var sourcesBuildPhases: [PBXSourcesBuildPhase] { return Array(objects.sourcesBuildPhases.values) }\n    var carbonResourcesBuildPhases: [PBXRezBuildPhase] { return Array(objects.carbonResourcesBuildPhases.values) }\n    var buildPhases: [PBXBuildPhase] { return Array(objects.buildPhases.values) }\n\n    /// Returns root project.\n    func rootProject() throws -> PBXProject? {\n        return try rootObjectReference?.getThrowingObject()\n    }\n\n    /// Returns root project's root group.\n    func rootGroup() throws -> PBXGroup? {\n        let project = try rootProject()\n        return try project?.mainGroupReference.getThrowingObject()\n    }\n\n    /// Adds a new object to the project.\n    ///\n    /// - Parameter object: object to be added.\n    func add(object: PBXObject) {\n        objects.add(object: object)\n    }\n\n    /// Deletes an object from the project.\n    ///\n    /// - Parameter object: object to be deleted.\n    func delete(object: PBXObject) {\n        objects.delete(reference: object.reference)\n    }\n\n    /// Returns all the targets with the given name.\n    ///\n    /// - Parameters:\n    ///   - name: target name.\n    /// - Returns: targets with the given name.\n    func targets(named name: String) -> [PBXTarget] {\n        return objects.targets(named: name)\n    }\n\n    /// Invalidates all the objects UUIDs.\n    /// Those UUIDs will be generated deterministically when the project is saved.\n    func invalidateUUIDs() {\n        objects.invalidateReferences()\n    }\n\n    /// Runs the given closure passing each of the objects that are part of the project.\n    ///\n    /// - Parameter closure: closure to be run.\n    func forEach(_ closure: (PBXObject) -> Void) {\n        objects.forEach(closure)\n    }\n}\n\n// MARK: - Internal helpers\n\nextension PBXProj {\n    /// Infers project name from Path and sets it as project name\n    ///\n    /// Project name is needed for certain comments when serialising PBXProj\n    ///\n    /// - Parameters:\n    ///   - path: path to .xcodeproj directory.\n    func updateProjectName(path: Path) throws {\n        guard path.parent().extension == \"xcodeproj\" else {\n            return\n        }\n        let projectName = path.parent().lastComponent.split(separator: \".\").first\n        try rootProject()?.name = projectName.map(String.init) ?? \"\"\n    }\n}\n\n// MARK: - Equatable\n\nextension PBXProj: Equatable {\n    public static func == (lhs: PBXProj, rhs: PBXProj) -> Bool {\n        let equalClasses = NSDictionary(dictionary: lhs.classes).isEqual(to: rhs.classes)\n        return lhs.archiveVersion == rhs.archiveVersion &&\n            lhs.objectVersion == rhs.objectVersion &&\n            equalClasses &&\n            lhs.objects == rhs.objects\n    }\n}\n\n// MARK: - Writable\n\nextension PBXProj: Writable {\n    public func write(path: Path, override: Bool) throws {\n        try write(path: path, override: override, outputSettings: PBXOutputSettings())\n    }\n\n    public func write(path: Path, override: Bool, outputSettings: PBXOutputSettings) throws {\n        let encoder = PBXProjEncoder(outputSettings: outputSettings)\n        let output = try encoder.encode(proj: self)\n        if override, path.exists {\n            try path.delete()\n        }\n        try path.write(output)\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Project/PBXProjEncoder.swift",
    "content": "import Foundation\n\n/// Protocol that defines that the element can return a plist element that represents itself.\nprotocol PlistSerializable {\n    func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue)\n    var multiline: Bool { get }\n}\n\nextension PlistSerializable {\n    var multiline: Bool { return true }\n}\n\nfinal class StateHolder {\n    var indent: UInt = 0\n    var multiline: Bool = true\n\n    func increaseIndent() {\n        indent += 1\n    }\n\n    func decreaseIndent() {\n        indent -= 1\n    }\n}\n\n/// Encodes your PBXProj files to String\n// swiftlint:disable:next type_body_length\nfinal class PBXProjEncoder {\n    let outputSettings: PBXOutputSettings\n    let referenceGenerator: ReferenceGenerating\n\n    init(outputSettings: PBXOutputSettings) {\n        self.outputSettings = outputSettings\n        referenceGenerator = ReferenceGenerator(outputSettings: outputSettings)\n    }\n\n    // swiftlint:disable function_body_length\n    func encode(proj: PBXProj) throws -> String {\n        try referenceGenerator.generateReferences(proj: proj)\n        guard let rootObject = proj.rootObjectReference else { throw PBXProjEncoderError.emptyProjectReference }\n\n        sort(buildPhases: proj.objects.copyFilesBuildPhases, outputSettings: outputSettings)\n        sort(buildPhases: proj.objects.frameworksBuildPhases, outputSettings: outputSettings)\n        sort(buildPhases: proj.objects.headersBuildPhases, outputSettings: outputSettings)\n        sort(buildPhases: proj.objects.resourcesBuildPhases, outputSettings: outputSettings)\n        sort(buildPhases: proj.objects.sourcesBuildPhases, outputSettings: outputSettings)\n        sort(navigatorGroups: proj.objects.groups, outputSettings: outputSettings)\n\n        var output = [String]()\n        var stateHolder = StateHolder()\n\n        writeUtf8(to: &output)\n        writeNewLine(stateHolder: &stateHolder, to: &output)\n        writeDictionaryStart(stateHolder: &stateHolder, to: &output)\n        write(dictionaryKey: \"archiveVersion\",\n              dictionaryValue: .string(CommentedString(\"\\(proj.archiveVersion)\")),\n              stateHolder: &stateHolder,\n              to: &output)\n        write(dictionaryKey: \"classes\",\n              dictionaryValue: .dictionary([:]),\n              stateHolder: &stateHolder,\n              to: &output)\n        write(dictionaryKey: \"objectVersion\",\n              dictionaryValue: .string(CommentedString(\"\\(proj.objectVersion)\")),\n              stateHolder: &stateHolder,\n              to: &output)\n        writeIndent(stateHolder: &stateHolder, to: &output)\n        write(string: \"objects = {\", to: &output)\n        stateHolder.increaseIndent()\n        writeNewLine(stateHolder: &stateHolder, to: &output)\n        try write(section: \"PBXAggregateTarget\",\n                  proj: proj,\n                  objects: proj.objects.aggregateTargets,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXBuildFile\",\n                  proj: proj,\n                  objects: proj.objects.buildPhaseFile,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXBuildRule\",\n                  proj: proj,\n                  objects: proj.objects.buildRules,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXContainerItemProxy\",\n                  proj: proj,\n                  objects: proj.objects.containerItemProxies,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXCopyFilesBuildPhase\",\n                  proj: proj,\n                  objects: proj.objects.copyFilesBuildPhases,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXFileReference\",\n                  proj: proj,\n                  objects: proj.objects.fileReferences,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXFrameworksBuildPhase\",\n                  proj: proj,\n                  objects: proj.objects.frameworksBuildPhases,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXGroup\",\n                  proj: proj,\n                  objects: proj.objects.groups,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXHeadersBuildPhase\",\n                  proj: proj,\n                  objects: proj.objects.headersBuildPhases,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXLegacyTarget\",\n                  proj: proj,\n                  objects: proj.objects.legacyTargets,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXNativeTarget\",\n                  proj: proj,\n                  objects: proj.objects.nativeTargets,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXProject\",\n                  proj: proj,\n                  objects: proj.objects.projects,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXReferenceProxy\",\n                  proj: proj,\n                  objects: proj.objects.referenceProxies,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXResourcesBuildPhase\",\n                  proj: proj,\n                  objects: proj.objects.resourcesBuildPhases,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXRezBuildPhase\",\n                  proj: proj,\n                  objects: proj.objects.carbonResourcesBuildPhases,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXShellScriptBuildPhase\",\n                  proj: proj,\n                  objects: proj.objects.shellScriptBuildPhases,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXSourcesBuildPhase\",\n                  proj: proj,\n                  objects: proj.objects.sourcesBuildPhases,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXTargetDependency\",\n                  proj: proj,\n                  objects: proj.objects.targetDependencies,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"PBXVariantGroup\",\n                  proj: proj,\n                  objects: proj.objects.variantGroups,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"XCBuildConfiguration\",\n                  proj: proj,\n                  objects: proj.objects.buildConfigurations,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"XCConfigurationList\",\n                  proj: proj,\n                  objects: proj.objects.configurationLists,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        try write(section: \"XCVersionGroup\",\n                  proj: proj,\n                  objects: proj.objects.versionGroups,\n                  outputSettings: outputSettings,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        stateHolder.decreaseIndent()\n        writeIndent(stateHolder: &stateHolder, to: &output)\n        write(string: \"};\", to: &output)\n        writeNewLine(stateHolder: &stateHolder, to: &output)\n        write(dictionaryKey: \"rootObject\",\n              dictionaryValue: .string(\n                  CommentedString(\n                      rootObject.value,\n                      comment: \"Project object\"\n                  )\n        ), stateHolder: &stateHolder, to: &output)\n        writeDictionaryEnd(stateHolder: &stateHolder, to: &output)\n        writeNewLine(stateHolder: &stateHolder, to: &output)\n\n        // clear reference cache\n        return output.joined()\n    }\n\n    // MARK: - Private\n\n    private func writeUtf8(to output: inout [String]) {\n        output.append(\"// !$*UTF8*$!\")\n    }\n\n    private func writeNewLine(stateHolder: inout StateHolder, to output: inout [String]) {\n        if stateHolder.multiline {\n            output.append(\"\\n\")\n        } else {\n            output.append(\" \")\n        }\n    }\n\n    private func write(value: PlistValue, stateHolder: inout StateHolder, to output: inout [String]) {\n        switch value {\n        case let .array(array):\n            write(array: array, stateHolder: &stateHolder, to: &output)\n        case let .dictionary(dictionary):\n            write(dictionary: dictionary, stateHolder: &stateHolder, to: &output)\n        case let .string(commentedString):\n            write(commentedString: commentedString, to: &output)\n        }\n    }\n\n    private func write(commentedString: CommentedString, to output: inout [String]) {\n        write(string: commentedString.validString, to: &output)\n        if let comment = commentedString.comment {\n            write(string: \" \", to: &output)\n            write(comment: comment, to: &output)\n        }\n    }\n\n    private func write(string: String, to output: inout [String]) {\n        output.append(string)\n    }\n\n    private func write(comment: String, to output: inout [String]) {\n        output.append(\"/* \\(comment) */\")\n    }\n\n    private func write<T>(section: String,\n                          proj: PBXProj,\n                          objects: [PBXObjectReference: T],\n                          outputSettings: PBXOutputSettings,\n                          stateHolder: inout StateHolder,\n                          to output: inout [String]) throws where T: PlistSerializable & Equatable {\n        try write(section: section, proj: proj, objects: objects, sort: outputSettings.projFileListOrder.sort, stateHolder: &stateHolder, to: &output)\n    }\n\n    private func write(section: String,\n                       proj: PBXProj,\n                       objects: [PBXObjectReference: PBXBuildPhaseFile],\n                       outputSettings: PBXOutputSettings,\n                       stateHolder: inout StateHolder,\n                       to output: inout [String]) throws {\n        try write(section: section, proj: proj, objects: objects, sort: outputSettings.projFileListOrder.sort, stateHolder: &stateHolder, to: &output)\n    }\n\n    private func write(section: String,\n                       proj: PBXProj,\n                       objects: [PBXObjectReference: PBXFileReference],\n                       outputSettings: PBXOutputSettings,\n                       stateHolder: inout StateHolder,\n                       to output: inout [String]) throws {\n        try write(section: section, proj: proj, objects: objects, sort: outputSettings.projFileListOrder.sort, stateHolder: &stateHolder, to: &output)\n    }\n\n    final class PBXProjElement {\n        let key: CommentedString\n        let value: PlistValue\n        let multiline: Bool\n\n        init(key: CommentedString, value: PlistValue, multiline: Bool) {\n            self.key = key\n            self.value = value\n            self.multiline = multiline\n        }\n    }\n\n    private func write<T>(section: String,\n                          proj: PBXProj,\n                          objects: [PBXObjectReference: T],\n                          sort: ((PBXObjectReference, T), (PBXObjectReference, T)) -> Bool,\n                          stateHolder: inout StateHolder,\n                          to output: inout [String]) throws where T: PlistSerializable & Equatable {\n        if objects.isEmpty { return }\n        writeNewLine(stateHolder: &stateHolder, to: &output)\n        write(string: \"/* Begin \\(section) section */\", to: &output)\n        writeNewLine(stateHolder: &stateHolder, to: &output)\n        let sorted = objects.sorted(by: sort)\n        let elements: [PBXProjElement] = try sorted.map { key, value in\n            let element = try value.plistKeyAndValue(proj: proj, reference: key.value)\n            return PBXProjElement(key: element.key, value: element.value, multiline: value.multiline)\n        }\n        let elementsArray = NSArray(array: elements)\n        let lock = NSRecursiveLock()\n        var resultArray = [[String]](repeating: [], count: elementsArray.count)\n        elementsArray.enumerateObjects(options: .concurrent) { arg, index, _ in\n            // swiftlint:disable:next force_cast\n            let element = arg as! PBXProjElement\n            var array = [String]()\n            var tmpStateHolder = StateHolder()\n            write(dictionaryKey: element.key, dictionaryValue: element.value, multiline: element.multiline, stateHolder: &tmpStateHolder, to: &array)\n            lock.whileLocked {\n                resultArray[index] = array\n            }\n        }\n\n        let joinedArray: [String] = resultArray.flatMap({ $0 })\n        // should check multiline\n        output.append(contentsOf: joinedArray)\n        write(string: \"/* End \\(section) section */\", to: &output)\n        writeNewLine(stateHolder: &stateHolder, to: &output)\n    }\n\n    private func write(dictionary: [CommentedString: PlistValue],\n                       newLines _: Bool = true,\n                       stateHolder: inout StateHolder,\n                       to output: inout [String]) {\n        writeDictionaryStart(stateHolder: &stateHolder, to: &output)\n        let sorted = dictionary.sorted(by: { (left, right) -> Bool in\n            if left.key == \"isa\" {\n                return true\n            } else if right.key == \"isa\" {\n                return false\n            } else {\n                return left.key.string < right.key.string\n            }\n        })\n        sorted.forEach({\n            write(dictionaryKey: $0.key,\n                  dictionaryValue: $0.value,\n                  multiline: stateHolder.multiline,\n                  stateHolder: &stateHolder,\n                  to: &output)\n        })\n        writeDictionaryEnd(stateHolder: &stateHolder, to: &output)\n    }\n\n    private func write(dictionaryKey: CommentedString,\n                       dictionaryValue: PlistValue,\n                       multiline: Bool = true,\n                       stateHolder: inout StateHolder,\n                       to output: inout [String]) {\n        writeIndent(stateHolder: &stateHolder, to: &output)\n        let beforeMultiline = stateHolder.multiline\n        stateHolder.multiline = multiline\n        write(commentedString: dictionaryKey, to: &output)\n        output.append(\" = \")\n        write(value: dictionaryValue, stateHolder: &stateHolder, to: &output)\n        output.append(\";\")\n        stateHolder.multiline = beforeMultiline\n        writeNewLine(stateHolder: &stateHolder, to: &output)\n    }\n\n    private func writeDictionaryStart(stateHolder: inout StateHolder, to output: inout [String]) {\n        output.append(\"{\")\n        if stateHolder.multiline { writeNewLine(stateHolder: &stateHolder, to: &output) }\n        stateHolder.increaseIndent()\n    }\n\n    private func writeDictionaryEnd(stateHolder: inout StateHolder, to output: inout [String]) {\n        stateHolder.decreaseIndent()\n        writeIndent(stateHolder: &stateHolder, to: &output)\n        output.append(\"}\")\n    }\n\n    private func write(array: [PlistValue], stateHolder: inout StateHolder, to output: inout [String]) {\n        writeArrayStart(stateHolder: &stateHolder, to: &output)\n        array.forEach { write(arrayValue: $0, stateHolder: &stateHolder, to: &output) }\n        writeArrayEnd(stateHolder: &stateHolder, to: &output)\n    }\n\n    private func write(arrayValue: PlistValue, stateHolder: inout StateHolder, to output: inout [String]) {\n        writeIndent(stateHolder: &stateHolder, to: &output)\n        write(value: arrayValue, stateHolder: &stateHolder, to: &output)\n        output.append(\",\")\n        writeNewLine(stateHolder: &stateHolder, to: &output)\n    }\n\n    private func writeArrayStart(stateHolder: inout StateHolder, to output: inout [String]) {\n        output.append(\"(\")\n        if stateHolder.multiline { writeNewLine(stateHolder: &stateHolder, to: &output) }\n        stateHolder.increaseIndent()\n    }\n\n    private func writeArrayEnd(stateHolder: inout StateHolder, to output: inout [String]) {\n        stateHolder.decreaseIndent()\n        writeIndent(stateHolder: &stateHolder, to: &output)\n        output.append(\")\")\n    }\n\n    private func writeIndent(stateHolder: inout StateHolder, to output: inout [String]) {\n        if stateHolder.multiline {\n            output.append(String(repeating: \"\\t\", count: Int(stateHolder.indent)))\n        }\n    }\n\n    private func sort(buildPhases: [PBXObjectReference: PBXBuildPhase], outputSettings: PBXOutputSettings) {\n        if let sort = outputSettings.projBuildPhaseFileOrder.sort {\n            buildPhases.values.forEach { $0.files = $0.files.sorted(by: sort) }\n        }\n    }\n\n    private func sort(navigatorGroups: [PBXObjectReference: PBXGroup], outputSettings: PBXOutputSettings) {\n        if let sort = outputSettings.projNavigatorFileOrder.sort {\n            navigatorGroups.values.forEach { $0.children = $0.children.sorted(by: sort) }\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Project/PBXProject.swift",
    "content": "import Foundation\n\npublic final class PBXProject: PBXObject {\n    // MARK: - Attributes\n\n    /// Project name\n    public var name: String\n\n    /// Build configuration list reference.\n    var buildConfigurationListReference: PBXObjectReference\n\n    /// Build configuration list.\n    public var buildConfigurationList: XCConfigurationList! {\n        set {\n            buildConfigurationListReference = newValue.reference\n        }\n        get {\n            return buildConfigurationListReference.getObject()\n        }\n    }\n\n    /// A string representation of the XcodeCompatibilityVersion.\n    public var compatibilityVersion: String\n\n    /// The region of development.\n    public var developmentRegion: String?\n\n    /// Whether file encodings have been scanned.\n    public var hasScannedForEncodings: Int\n\n    /// The known regions for localized files.\n    public var knownRegions: [String]\n\n    /// The object is a reference to a PBXGroup element.\n    var mainGroupReference: PBXObjectReference\n\n    /// Project main group.\n    public var mainGroup: PBXGroup! {\n        set {\n            mainGroupReference = newValue.reference\n        }\n        get {\n            return mainGroupReference.getObject()\n        }\n    }\n\n    /// The object is a reference to a PBXGroup element.\n    var productsGroupReference: PBXObjectReference?\n\n    /// Products group.\n    public var productsGroup: PBXGroup? {\n        set {\n            productsGroupReference = newValue?.reference\n        }\n        get {\n            return productsGroupReference?.getObject()\n        }\n    }\n\n    /// The relative path of the project.\n    public var projectDirPath: String\n\n    /// Project references.\n    var projectReferences: [[String: PBXObjectReference]]\n\n    /// Project projects.\n    //    {\n    //        ProductGroup = B900DB69213936CC004AEC3E /* Products group reference */;\n    //        ProjectRef = B900DB68213936CC004AEC3E /* Project file reference  */;\n    //    },\n    public var projects: [[String: PBXFileElement]] {\n        set {\n            projectReferences = newValue.map { project in\n                project.mapValues({ $0.reference })\n            }\n        }\n        get {\n            return projectReferences.map { project in\n                project.mapValues({ $0.getObject()! })\n            }\n        }\n    }\n\n    private static let targetAttributesKey = \"TargetAttributes\"\n\n    /// The relative root paths of the project.\n    public var projectRoots: [String]\n\n    /// The objects are a reference to a PBXTarget element.\n    var targetReferences: [PBXObjectReference]\n\n    /// Project targets.\n    public var targets: [PBXTarget] {\n        set {\n            targetReferences = newValue.references()\n        }\n        get {\n            return targetReferences.objects()\n        }\n    }\n\n    /// Project attributes.\n    /// Target attributes will be merged into this\n    public var attributes: [String: Any]\n\n    /// Target attribute references.\n    var targetAttributeReferences: [PBXObjectReference: [String: Any]]\n\n    /// Target attributes.\n    public var targetAttributes: [PBXTarget: [String: Any]] {\n        set {\n            targetAttributeReferences = [:]\n            newValue.forEach {\n                targetAttributeReferences[$0.key.reference] = $0.value\n            }\n        } get {\n            var attributes: [PBXTarget: [String: Any]] = [:]\n            targetAttributeReferences.forEach {\n                if let object: PBXTarget = $0.key.getObject() {\n                    attributes[object] = $0.value\n                }\n            }\n            return attributes\n        }\n    }\n\n    /// Sets the attributes for the given target.\n    ///\n    /// - Parameters:\n    ///   - attributes: attributes that will be set.\n    ///   - target: target.\n    public func setTargetAttributes(_ attributes: [String: Any], target: PBXTarget) {\n        targetAttributeReferences[target.reference] = attributes\n    }\n\n    /// Removes the attributes for the given target.\n    ///\n    /// - Parameter target: target whose attributes will be removed.\n    public func removeTargetAttributes(target: PBXTarget) {\n        targetAttributeReferences.removeValue(forKey: target.reference)\n    }\n\n    /// Removes the all the target attributes\n    public func clearAllTargetAttributes() {\n        targetAttributeReferences.removeAll()\n    }\n\n    /// Returns the attributes of a given target.\n    ///\n    /// - Parameter for: target whose attributes will be returned.\n    /// - Returns: target attributes.\n    public func attributes(for target: PBXTarget) -> [String: Any]? {\n        return targetAttributeReferences[target.reference]\n    }\n\n    // MARK: - Init\n\n    /// Initializes the project with its attributes\n    ///\n    /// - Parameters:\n    ///   - name: xcodeproj's name.\n    ///   - buildConfigurationList: project build configuration list.\n    ///   - compatibilityVersion: project compatibility version.\n    ///   - mainGroup: project main group.\n    ///   - developmentRegion: project has development region.\n    ///   - hasScannedForEncodings: project has scanned for encodings.\n    ///   - knownRegions: project known regions.\n    ///   - productsGroup: products group.\n    ///   - projectDirPath: project dir path.\n    ///   - projects: projects.\n    ///   - projectRoots: project roots.\n    ///   - targets: project targets.\n    public init(name: String,\n                buildConfigurationList: XCConfigurationList,\n                compatibilityVersion: String,\n                mainGroup: PBXGroup,\n                developmentRegion: String? = nil,\n                hasScannedForEncodings: Int = 0,\n                knownRegions: [String] = [],\n                productsGroup: PBXGroup? = nil,\n                projectDirPath: String = \"\",\n                projects: [[String: PBXFileElement]] = [],\n                projectRoots: [String] = [],\n                targets: [PBXTarget] = [],\n                attributes: [String: Any] = [:],\n                targetAttributes: [PBXTarget: [String: Any]] = [:]) {\n        self.name = name\n        buildConfigurationListReference = buildConfigurationList.reference\n        self.compatibilityVersion = compatibilityVersion\n        mainGroupReference = mainGroup.reference\n        self.developmentRegion = developmentRegion\n        self.hasScannedForEncodings = hasScannedForEncodings\n        self.knownRegions = knownRegions\n        productsGroupReference = productsGroup?.reference\n        self.projectDirPath = projectDirPath\n        projectReferences = projects.map({ project in project.mapValues({ $0.reference }) })\n        self.projectRoots = projectRoots\n        targetReferences = targets.references()\n        self.attributes = attributes\n        targetAttributeReferences = [:]\n        super.init()\n        self.targetAttributes = targetAttributes\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case name\n        case buildConfigurationList\n        case compatibilityVersion\n        case developmentRegion\n        case hasScannedForEncodings\n        case knownRegions\n        case mainGroup\n        case productRefGroup\n        case projectDirPath\n        case projectReferences\n        case projectRoot\n        case projectRoots\n        case targets\n        case attributes\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        let referenceRepository = decoder.context.objectReferenceRepository\n        let objects = decoder.context.objects\n        name = (try container.decodeIfPresent(.name)) ?? \"\"\n        let buildConfigurationListReference: String = try container.decode(.buildConfigurationList)\n        self.buildConfigurationListReference = referenceRepository.getOrCreate(reference: buildConfigurationListReference, objects: objects)\n        compatibilityVersion = try container.decode(.compatibilityVersion)\n        developmentRegion = try container.decodeIfPresent(.developmentRegion)\n        let hasScannedForEncodingsString: String? = try container.decodeIfPresent(.hasScannedForEncodings)\n        hasScannedForEncodings = hasScannedForEncodingsString.flatMap({ Int($0) }) ?? 0\n        knownRegions = (try container.decodeIfPresent(.knownRegions)) ?? []\n        let mainGroupReference: String = try container.decode(.mainGroup)\n        self.mainGroupReference = referenceRepository.getOrCreate(reference: mainGroupReference, objects: objects)\n        if let productRefGroupReference: String = try container.decodeIfPresent(.productRefGroup) {\n            productsGroupReference = referenceRepository.getOrCreate(reference: productRefGroupReference, objects: objects)\n        } else {\n            productsGroupReference = nil\n        }\n        projectDirPath = try container.decodeIfPresent(.projectDirPath) ?? \"\"\n        let projectReferences: [[String: String]] = (try container.decodeIfPresent(.projectReferences)) ?? []\n        self.projectReferences = projectReferences.map({ references in\n            references.mapValues({ referenceRepository.getOrCreate(reference: $0, objects: objects) })\n        })\n        if let projectRoots: [String] = try container.decodeIfPresent(.projectRoots) {\n            self.projectRoots = projectRoots\n        } else if let projectRoot: String = try container.decodeIfPresent(.projectRoot) {\n            projectRoots = [projectRoot]\n        } else {\n            projectRoots = []\n        }\n        let targetReferences: [String] = (try container.decodeIfPresent(.targets)) ?? []\n        self.targetReferences = targetReferences.map({ referenceRepository.getOrCreate(reference: $0, objects: objects) })\n\n        var attributes = (try container.decodeIfPresent([String: Any].self, forKey: .attributes) ?? [:])\n        var targetAttributeReferences: [PBXObjectReference: [String: Any]] = [:]\n        if let targetAttributes = attributes[PBXProject.targetAttributesKey] as? [String: [String: Any]] {\n            targetAttributes.forEach { targetAttributeReferences[referenceRepository.getOrCreate(reference: $0.key, objects: objects)] = $0.value }\n            attributes[PBXProject.targetAttributesKey] = nil\n        }\n        self.attributes = attributes\n        self.targetAttributeReferences = targetAttributeReferences\n\n        try super.init(from: decoder)\n    }\n}\n\n// MARK: - PlistSerializable\n\nextension PBXProject: PlistSerializable {\n    // swiftlint:disable:next function_body_length\n    func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = [:]\n        dictionary[\"isa\"] = .string(CommentedString(PBXProject.isa))\n        let buildConfigurationListComment = \"Build configuration list for PBXProject \\\"\\(name)\\\"\"\n        let buildConfigurationListCommentedString = CommentedString(buildConfigurationListReference.value,\n                                                                    comment: buildConfigurationListComment)\n        dictionary[\"buildConfigurationList\"] = .string(buildConfigurationListCommentedString)\n        dictionary[\"compatibilityVersion\"] = .string(CommentedString(compatibilityVersion))\n        if let developmentRegion = developmentRegion {\n            dictionary[\"developmentRegion\"] = .string(CommentedString(developmentRegion))\n        }\n        dictionary[\"hasScannedForEncodings\"] = .string(CommentedString(\"\\(hasScannedForEncodings)\"))\n\n        if !knownRegions.isEmpty {\n            dictionary[\"knownRegions\"] = PlistValue.array(knownRegions\n                .map { .string(CommentedString(\"\\($0)\")) })\n        }\n        let mainGroupObject: PBXGroup? = mainGroupReference.getObject()\n        dictionary[\"mainGroup\"] = .string(CommentedString(mainGroupReference.value, comment: mainGroupObject?.fileName()))\n        if let productsGroupReference = productsGroupReference {\n            let productRefGroupObject: PBXGroup? = productsGroupReference.getObject()\n            dictionary[\"productRefGroup\"] = .string(CommentedString(productsGroupReference.value,\n                                                                    comment: productRefGroupObject?.fileName()))\n        }\n        dictionary[\"projectDirPath\"] = .string(CommentedString(projectDirPath))\n        if projectRoots.count > 1 {\n            dictionary[\"projectRoots\"] = projectRoots.plist()\n        } else {\n            dictionary[\"projectRoot\"] = .string(CommentedString(projectRoots.first ?? \"\"))\n        }\n        if let projectReferences = try projectReferencesPlistValue(proj: proj) {\n            dictionary[\"projectReferences\"] = projectReferences\n        }\n        dictionary[\"targets\"] = PlistValue.array(targetReferences\n            .map { targetReference in\n                let target: PBXTarget? = targetReference.getObject()\n                return .string(CommentedString(targetReference.value, comment: target?.name))\n        })\n\n        var plistAttributes: [String: Any] = attributes\n        if !targetAttributeReferences.isEmpty {\n            // merge target attributes\n            var plistTargetAttributes: [String: Any] = [:]\n            for (reference, value) in targetAttributeReferences {\n                plistTargetAttributes[reference.value] = value.mapValues { value in\n                    (value as? PBXObject)?.reference.value ?? value\n                }\n            }\n            plistAttributes[PBXProject.targetAttributesKey] = plistTargetAttributes\n        }\n        dictionary[\"attributes\"] = plistAttributes.plist()\n\n        return (key: CommentedString(reference,\n                                     comment: \"Project object\"),\n                value: .dictionary(dictionary))\n    }\n\n    private func projectReferencesPlistValue(proj _: PBXProj) throws -> PlistValue? {\n        guard !projectReferences.isEmpty else {\n            return nil\n        }\n        return .array(projectReferences.compactMap { reference in\n            guard let productGroupReference = reference[\"ProductGroup\"], let projectRef = reference[\"ProjectRef\"] else {\n                return nil\n            }\n            let producGroup: PBXGroup? = productGroupReference.getObject()\n            let groupName = producGroup?.fileName()\n            let project: PBXFileElement? = projectRef.getObject()\n            let fileRefName = project?.fileName()\n\n            return [\n                CommentedString(\"ProductGroup\"): PlistValue.string(CommentedString(productGroupReference.value, comment: groupName)),\n                CommentedString(\"ProjectRef\"): PlistValue.string(CommentedString(projectRef.value, comment: fileRefName)),\n            ]\n        })\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Sourcery/Equality.generated.swift",
    "content": "// Generated using Sourcery 0.13.1 — https://github.com/krzysztofzablocki/Sourcery\n// DO NOT EDIT\n\nimport Foundation\n\nextension PBXAggregateTarget {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXAggregateTarget else { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXBuildFile {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXBuildFile else { return false }\n        if fileReference != rhs.fileReference { return false }\n        if !NSDictionary(dictionary: settings ?? [:]).isEqual(to: rhs.settings ?? [:]) { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXBuildPhase {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXBuildPhase else { return false }\n        if buildActionMask != rhs.buildActionMask { return false }\n        if fileReferences != rhs.fileReferences { return false }\n        if inputFileListPaths != rhs.inputFileListPaths { return false }\n        if outputFileListPaths != rhs.outputFileListPaths { return false }\n        if runOnlyForDeploymentPostprocessing != rhs.runOnlyForDeploymentPostprocessing { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXBuildRule {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXBuildRule else { return false }\n        if compilerSpec != rhs.compilerSpec { return false }\n        if filePatterns != rhs.filePatterns { return false }\n        if fileType != rhs.fileType { return false }\n        if isEditable != rhs.isEditable { return false }\n        if name != rhs.name { return false }\n        if outputFiles != rhs.outputFiles { return false }\n        if outputFilesCompilerFlags != rhs.outputFilesCompilerFlags { return false }\n        if script != rhs.script { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXContainerItem {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXContainerItem else { return false }\n        if comments != rhs.comments { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXContainerItemProxy {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXContainerItemProxy else { return false }\n        if containerPortalReference != rhs.containerPortalReference { return false }\n        if proxyType != rhs.proxyType { return false }\n        if remoteGlobalIDReference != rhs.remoteGlobalIDReference { return false }\n        if remoteInfo != rhs.remoteInfo { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXCopyFilesBuildPhase {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXCopyFilesBuildPhase else { return false }\n        if dstPath != rhs.dstPath { return false }\n        if dstSubfolderSpec != rhs.dstSubfolderSpec { return false }\n        if name != rhs.name { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXFileElement {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXFileElement else { return false }\n        if sourceTree != rhs.sourceTree { return false }\n        if path != rhs.path { return false }\n        if name != rhs.name { return false }\n        if includeInIndex != rhs.includeInIndex { return false }\n        if usesTabs != rhs.usesTabs { return false }\n        if indentWidth != rhs.indentWidth { return false }\n        if tabWidth != rhs.tabWidth { return false }\n        if wrapsLines != rhs.wrapsLines { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXFileReference {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXFileReference else { return false }\n        if fileEncoding != rhs.fileEncoding { return false }\n        if explicitFileType != rhs.explicitFileType { return false }\n        if lastKnownFileType != rhs.lastKnownFileType { return false }\n        if lineEnding != rhs.lineEnding { return false }\n        if languageSpecificationIdentifier != rhs.languageSpecificationIdentifier { return false }\n        if xcLanguageSpecificationIdentifier != rhs.xcLanguageSpecificationIdentifier { return false }\n        if plistStructureDefinitionIdentifier != rhs.plistStructureDefinitionIdentifier { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXFrameworksBuildPhase {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXFrameworksBuildPhase else { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXGroup {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXGroup else { return false }\n        if childrenReferences != rhs.childrenReferences { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXHeadersBuildPhase {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXHeadersBuildPhase else { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXLegacyTarget {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXLegacyTarget else { return false }\n        if buildToolPath != rhs.buildToolPath { return false }\n        if buildArgumentsString != rhs.buildArgumentsString { return false }\n        if passBuildSettingsInEnvironment != rhs.passBuildSettingsInEnvironment { return false }\n        if buildWorkingDirectory != rhs.buildWorkingDirectory { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXNativeTarget {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXNativeTarget else { return false }\n        if productInstallPath != rhs.productInstallPath { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXProject {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXProject else { return false }\n        if name != rhs.name { return false }\n        if buildConfigurationListReference != rhs.buildConfigurationListReference { return false }\n        if compatibilityVersion != rhs.compatibilityVersion { return false }\n        if developmentRegion != rhs.developmentRegion { return false }\n        if hasScannedForEncodings != rhs.hasScannedForEncodings { return false }\n        if knownRegions != rhs.knownRegions { return false }\n        if mainGroupReference != rhs.mainGroupReference { return false }\n        if productsGroupReference != rhs.productsGroupReference { return false }\n        if projectDirPath != rhs.projectDirPath { return false }\n        if projectReferences != rhs.projectReferences { return false }\n        if projectRoots != rhs.projectRoots { return false }\n        if targetReferences != rhs.targetReferences { return false }\n        if !NSDictionary(dictionary: attributes).isEqual(to: rhs.attributes) { return false }\n        if !NSDictionary(dictionary: targetAttributeReferences).isEqual(to: rhs.targetAttributeReferences) { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXReferenceProxy {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXReferenceProxy else { return false }\n        if fileType != rhs.fileType { return false }\n        if path != rhs.path { return false }\n        if remoteReference != rhs.remoteReference { return false }\n        if sourceTree != rhs.sourceTree { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXResourcesBuildPhase {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXResourcesBuildPhase else { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXRezBuildPhase {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXRezBuildPhase else { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXShellScriptBuildPhase {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXShellScriptBuildPhase else { return false }\n        if name != rhs.name { return false }\n        if inputPaths != rhs.inputPaths { return false }\n        if outputPaths != rhs.outputPaths { return false }\n        if shellPath != rhs.shellPath { return false }\n        if shellScript != rhs.shellScript { return false }\n        if showEnvVarsInLog != rhs.showEnvVarsInLog { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXSourcesBuildPhase {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXSourcesBuildPhase else { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXTarget {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXTarget else { return false }\n        if buildConfigurationListReference != rhs.buildConfigurationListReference { return false }\n        if buildPhaseReferences != rhs.buildPhaseReferences { return false }\n        if buildRuleReferences != rhs.buildRuleReferences { return false }\n        if dependencyReferences != rhs.dependencyReferences { return false }\n        if name != rhs.name { return false }\n        if productName != rhs.productName { return false }\n        if productReference != rhs.productReference { return false }\n        if productType != rhs.productType { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXTargetDependency {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXTargetDependency else { return false }\n        if name != rhs.name { return false }\n        if targetReference != rhs.targetReference { return false }\n        if targetProxyReference != rhs.targetProxyReference { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension PBXVariantGroup {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? PBXVariantGroup else { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension XCBuildConfiguration {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? XCBuildConfiguration else { return false }\n        if baseConfigurationReference != rhs.baseConfigurationReference { return false }\n        if !NSDictionary(dictionary: buildSettings).isEqual(to: rhs.buildSettings) { return false }\n        if name != rhs.name { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension XCConfigurationList {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? XCConfigurationList else { return false }\n        if buildConfigurationReferences != rhs.buildConfigurationReferences { return false }\n        if defaultConfigurationIsVisible != rhs.defaultConfigurationIsVisible { return false }\n        if defaultConfigurationName != rhs.defaultConfigurationName { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n\nextension XCVersionGroup {\n    /// :nodoc:\n    @objc public override func isEqual(to object: Any?) -> Bool {\n        guard let rhs = object as? XCVersionGroup else { return false }\n        if currentVersionReference != rhs.currentVersionReference { return false }\n        if versionGroupType != rhs.versionGroupType { return false }\n        return super.isEqual(to: rhs)\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Sourcery/Sourcery.swift",
    "content": "import Foundation\n\nprotocol AutoEquatable {}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Targets/PBXAggregateTarget.swift",
    "content": "import Foundation\n\n/// This is the element for a build target that aggregates several others.\npublic final class PBXAggregateTarget: PBXTarget {}\n\n// MARK: - PBXAggregateTarget Extension (PlistSerializable)\n\nextension PBXAggregateTarget: PlistSerializable {\n    func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        return try plistValues(proj: proj, isa: PBXAggregateTarget.isa, reference: reference)\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Targets/PBXLegacyTarget.swift",
    "content": "import Foundation\n\n/// This is the element for a build target that according to Xcode is an \"External Build System\". You can use this target to run a script.\npublic final class PBXLegacyTarget: PBXTarget {\n    /// Path to the build tool that is invoked (required)\n    public var buildToolPath: String?\n\n    /// Build arguments to be passed to the build tool.\n    public var buildArgumentsString: String?\n\n    /// Whether or not to pass Xcode build settings as environment variables down to the tool when invoked\n    public var passBuildSettingsInEnvironment: Bool\n\n    /// The directory where the build tool will be invoked during a build\n    public var buildWorkingDirectory: String?\n\n    /// Initializes the legacy target with its attributes.\n    ///\n    /// - Parameters:\n    ///   - name: name.\n    ///   - buildToolPath: build tool path.\n    ///   - buildArgumentsString: build arguments.\n    ///   - passBuildSettingsInEnvironment: pass build settings in environment.\n    ///   - buildWorkingDirectory: build working directory.\n    ///   - buildConfigurationList: build configuration list.\n    ///   - buildPhases: build phases.\n    ///   - buildRules: build rules.\n    ///   - dependencies: dependencies.\n    ///   - productName: product name.\n    ///   - product: product file reference.\n    ///   - productType: product type.\n    public init(name: String,\n                buildToolPath: String? = nil,\n                buildArgumentsString: String? = nil,\n                passBuildSettingsInEnvironment: Bool = false,\n                buildWorkingDirectory: String? = nil,\n                buildConfigurationList: XCConfigurationList? = nil,\n                buildPhases: [PBXBuildPhase] = [],\n                buildRules: [PBXBuildRule] = [],\n                dependencies: [PBXTargetDependency] = [],\n                productName: String? = nil,\n                product: PBXFileReference? = nil,\n                productType: PBXProductType? = nil) {\n        self.buildToolPath = buildToolPath\n        self.buildArgumentsString = buildArgumentsString\n        self.passBuildSettingsInEnvironment = passBuildSettingsInEnvironment\n        self.buildWorkingDirectory = buildWorkingDirectory\n        super.init(name: name,\n                   buildConfigurationList: buildConfigurationList,\n                   buildPhases: buildPhases,\n                   buildRules: buildRules,\n                   dependencies: dependencies,\n                   productName: productName,\n                   product: product,\n                   productType: productType)\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case buildToolPath\n        case buildArgumentsString\n        case passBuildSettingsInEnvironment\n        case buildWorkingDirectory\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        buildToolPath = try container.decodeIfPresent(.buildToolPath)\n        buildArgumentsString = try container.decodeIfPresent(.buildArgumentsString)\n        passBuildSettingsInEnvironment = try container.decodeIntBool(.passBuildSettingsInEnvironment)\n        buildWorkingDirectory = try container.decodeIfPresent(.buildWorkingDirectory)\n        try super.init(from: decoder)\n    }\n\n    override func plistValues(proj: PBXProj, isa _: String, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        let (key, value) = try super.plistValues(proj: proj, isa: PBXLegacyTarget.isa, reference: reference)\n        var dict: [CommentedString: PlistValue]!\n        switch value {\n        case let .dictionary(dictValue):\n            dict = dictValue\n            if let buildToolPath = buildToolPath {\n                dict[\"buildToolPath\"] = PlistValue.string(CommentedString(buildToolPath))\n            }\n            if let buildArgumentsString = buildArgumentsString {\n                dict[\"buildArgumentsString\"] =\n                    PlistValue.string(CommentedString(buildArgumentsString))\n            }\n            dict[\"passBuildSettingsInEnvironment\"] =\n                PlistValue.string(CommentedString(passBuildSettingsInEnvironment.int.description))\n            if let buildWorkingDirectory = buildWorkingDirectory {\n                dict[\"buildWorkingDirectory\"] =\n                    PlistValue.string(CommentedString(buildWorkingDirectory))\n            }\n        default:\n            throw XcodeprojWritingError.invalidType(class: String(describing: type(of: self)), expected: \"Dictionary\")\n        }\n        return (key: key, value: .dictionary(dict))\n    }\n}\n\n// MARK: - PBXNativeTarget Extension (PlistSerializable)\n\nextension PBXLegacyTarget: PlistSerializable {\n    func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        return try plistValues(proj: proj, isa: PBXLegacyTarget.isa, reference: reference)\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Targets/PBXNativeTarget.swift",
    "content": "import Foundation\n\n/// This is the element for a build target that produces a binary content (application or library).\npublic final class PBXNativeTarget: PBXTarget {\n    // Target product install path.\n    public var productInstallPath: String?\n\n    /// Initializes the native target with its attributes.\n    ///\n    /// - Parameters:\n    ///   - name: target name.\n    ///   - buildConfigurationList: build configuratino list.\n    ///   - buildPhases: build phases.\n    ///   - buildRules: build rules.\n    ///   - dependencies: dependencies.\n    ///   - productInstallPath: product install path.\n    ///   - productName: product name.\n    ///   - product: product file reference.\n    ///   - productType: product type.\n    public init(name: String,\n                buildConfigurationList: XCConfigurationList? = nil,\n                buildPhases: [PBXBuildPhase] = [],\n                buildRules: [PBXBuildRule] = [],\n                dependencies: [PBXTargetDependency] = [],\n                productInstallPath: String? = nil,\n                productName: String? = nil,\n                product: PBXFileReference? = nil,\n                productType: PBXProductType? = nil) {\n        self.productInstallPath = productInstallPath\n        super.init(name: name,\n                   buildConfigurationList: buildConfigurationList,\n                   buildPhases: buildPhases,\n                   buildRules: buildRules,\n                   dependencies: dependencies,\n                   productName: productName,\n                   product: product,\n                   productType: productType)\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case productInstallPath\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        productInstallPath = try container.decodeIfPresent(.productInstallPath)\n        try super.init(from: decoder)\n    }\n\n    override func plistValues(proj: PBXProj, isa: String, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        let (key, value) = try super.plistValues(proj: proj, isa: isa, reference: reference)\n        guard case var PlistValue.dictionary(dict) = value else {\n            throw XcodeprojWritingError.invalidType(class: String(describing: type(of: self)), expected: \"Dictionary\")\n        }\n        if let productInstallPath = productInstallPath {\n            dict[\"productInstallPath\"] = .string(CommentedString(productInstallPath))\n        }\n        return (key: key, value: .dictionary(dict))\n    }\n}\n\n// MARK: - PBXNativeTarget Extension (PlistSerializable)\n\nextension PBXNativeTarget: PlistSerializable {\n    func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        return try plistValues(proj: proj, isa: PBXNativeTarget.isa, reference: reference)\n    }\n}\n\n// MARK: - Helpers\n\npublic extension PBXNativeTarget {\n    /// Adds a dependency to the target.\n    ///\n    /// - Parameter target: dependency target.\n    /// - Returns: target dependency reference.\n    /// - Throws: an error if the dependency cannot be created.\n    func addDependency(target: PBXTarget) throws -> PBXTargetDependency? {\n        let objects = try target.objects()\n        guard let project = objects.projects.first?.value else {\n            return nil\n        }\n        let proxy = PBXContainerItemProxy(containerPortal: project,\n                                          remoteGlobalID: target,\n                                          proxyType: .nativeTarget,\n                                          remoteInfo: target.name)\n        objects.add(object: proxy)\n        let targetDependency = PBXTargetDependency(name: target.name,\n                                                   target: target,\n                                                   targetProxy: proxy)\n        objects.add(object: targetDependency)\n        dependencies.append(targetDependency)\n        return targetDependency\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Targets/PBXProductType.swift",
    "content": "import Foundation\n\npublic enum PBXProductType: String, Decodable {\n    case none = \"\"\n    case application = \"com.apple.product-type.application\"\n    case framework = \"com.apple.product-type.framework\"\n    case dynamicLibrary = \"com.apple.product-type.library.dynamic\"\n    case staticLibrary = \"com.apple.product-type.library.static\"\n    case bundle = \"com.apple.product-type.bundle\"\n    case unitTestBundle = \"com.apple.product-type.bundle.unit-test\"\n    case uiTestBundle = \"com.apple.product-type.bundle.ui-testing\"\n    case appExtension = \"com.apple.product-type.app-extension\"\n    case commandLineTool = \"com.apple.product-type.tool\"\n    case watchApp = \"com.apple.product-type.application.watchapp\"\n    case watch2App = \"com.apple.product-type.application.watchapp2\"\n    case watchExtension = \"com.apple.product-type.watchkit-extension\"\n    case watch2Extension = \"com.apple.product-type.watchkit2-extension\"\n    case tvExtension = \"com.apple.product-type.tv-app-extension\"\n    case messagesApplication = \"com.apple.product-type.application.messages\"\n    case messagesExtension = \"com.apple.product-type.app-extension.messages\"\n    case stickerPack = \"com.apple.product-type.app-extension.messages-sticker-pack\"\n    case xpcService = \"com.apple.product-type.xpc-service\"\n    case ocUnitTestBundle = \"com.apple.product-type.bundle.ocunit-test\"\n    case xcodeExtension = \"com.apple.product-type.xcode-extension\"\n    case instrumentsPackage = \"com.apple.product-type.instruments-package\"\n    case intentsServiceExtension = \"com.apple.product-type.app-extension.intents-service\"\n\n    /// Returns the file extension for the given product type.\n    public var fileExtension: String? {\n        switch self {\n        case .application, .watchApp, .watch2App, .messagesApplication:\n            return \"app\"\n        case .framework:\n            return \"framework\"\n        case .dynamicLibrary:\n            return \"dylib\"\n        case .staticLibrary:\n            return \"a\"\n        case .bundle:\n            return \"bundle\"\n        case .unitTestBundle, .uiTestBundle:\n            return \"xctest\"\n        case .appExtension, .tvExtension, .watchExtension, .watch2Extension, .messagesExtension, .stickerPack, .xcodeExtension, .intentsServiceExtension:\n            return \"appex\"\n        case .commandLineTool:\n            return nil\n        case .xpcService:\n            return \"xpc\"\n        case .ocUnitTestBundle:\n            return \"octest\"\n        case .instrumentsPackage:\n            return \"instrpkg\"\n        case .none:\n            return nil\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Targets/PBXReferenceProxy.swift",
    "content": "import Foundation\n\n/// A proxy for another object which might belong to another project\n/// contained in the same workspace of the document.\n/// This class is referenced by PBXTargetDependency.\npublic final class PBXReferenceProxy: PBXFileElement {\n    // MARK: - Attributes\n\n    /// Element file type\n    public var fileType: String?\n\n    /// Element remote reference.\n    var remoteReference: PBXObjectReference?\n\n    /// Element remote.\n    public var remote: PBXContainerItemProxy? {\n        get {\n            return remoteReference?.getObject()\n        }\n        set {\n            remoteReference = newValue?.reference\n        }\n    }\n\n    // MARK: - Init\n\n    /// Initializes the reference proxy.\n    ///\n    /// - Parameters:\n    ///   - fileType: File type.\n    ///   - path: Path.\n    ///   - remote: Remote.\n    ///   - sourceTree: Source tree.\n    public init(fileType: String? = nil,\n                path: String? = nil,\n                name: String? = nil,\n                remote: PBXContainerItemProxy? = nil,\n                sourceTree: PBXSourceTree? = nil) {\n        self.fileType = fileType\n        remoteReference = remote?.reference\n        super.init(sourceTree: sourceTree, path: path, name: name)\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case fileType\n        case remoteRef\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let objectReferenceRepository = decoder.context.objectReferenceRepository\n        let objects = decoder.context.objects\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        if let remoteRefString: String = try container.decodeIfPresent(.remoteRef) {\n            remoteReference = objectReferenceRepository.getOrCreate(reference: remoteRefString, objects: objects)\n        }\n        fileType = try container.decodeIfPresent(.fileType)\n        try super.init(from: decoder)\n    }\n\n    override func plistKeyAndValue(proj: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        guard case var .dictionary(dictionary) = try super.plistKeyAndValue(proj: proj, reference: reference).value else {\n            fatalError(\"super implementation changed and we didn’t realise!\")\n        }\n        dictionary[\"isa\"] = .string(CommentedString(PBXReferenceProxy.isa))\n        if let fileType = fileType {\n            dictionary[\"fileType\"] = .string(CommentedString(fileType))\n        }\n        if let remoteReference = remoteReference {\n            dictionary[\"remoteRef\"] = .string(CommentedString(remoteReference.value, comment: \"PBXContainerItemProxy\"))\n        }\n        return (key: CommentedString(reference, comment: path),\n                value: .dictionary(dictionary))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Targets/PBXTarget.swift",
    "content": "import Foundation\n\n/// This element is an abstract parent for specialized targets.\npublic class PBXTarget: PBXContainerItem {\n    /// Target build configuration list.\n    var buildConfigurationListReference: PBXObjectReference?\n\n    /// Build configuration list.\n    public var buildConfigurationList: XCConfigurationList? {\n        get {\n            return buildConfigurationListReference?.getObject()\n        }\n        set {\n            buildConfigurationListReference = newValue?.reference\n        }\n    }\n\n    /// Target build phase references.\n    var buildPhaseReferences: [PBXObjectReference]\n\n    /// Target build phases.\n    public var buildPhases: [PBXBuildPhase] {\n        get {\n            return buildPhaseReferences.objects()\n        }\n        set {\n            buildPhaseReferences = newValue.references()\n        }\n    }\n\n    /// Target build rule references.\n    var buildRuleReferences: [PBXObjectReference]\n\n    /// Target build rules.\n    public var buildRules: [PBXBuildRule] {\n        get {\n            return buildRuleReferences.objects()\n        }\n        set {\n            buildRuleReferences = newValue.references()\n        }\n    }\n\n    /// Target dependency references.\n    var dependencyReferences: [PBXObjectReference]\n\n    /// Target dependencies.\n    public var dependencies: [PBXTargetDependency] {\n        get {\n            return dependencyReferences.objects()\n        }\n        set {\n            dependencyReferences = newValue.references()\n        }\n    }\n\n    /// Target name.\n    public var name: String\n\n    /// Target product name.\n    public var productName: String?\n\n    /// Target product reference.\n    var productReference: PBXObjectReference?\n\n    /// Target product.\n    public var product: PBXFileReference? {\n        get {\n            return productReference?.getObject()\n        }\n        set {\n            productReference = newValue?.reference\n        }\n    }\n\n    /// Target product type.\n    public var productType: PBXProductType?\n\n    /// Initializes the target with dependencies as objects.\n    ///\n    /// - Parameters:\n    ///   - name: Target name.\n    ///   - buildConfigurationList: Target configuration list.\n    ///   - buildPhases: Target build phases.\n    ///   - buildRules: Target build rules.\n    ///   - dependencies: Target dependencies.\n    ///   - productName: Target product name.\n    ///   - product: Target product.\n    ///   - productType: Target product type.\n    public init(name: String,\n                buildConfigurationList: XCConfigurationList? = nil,\n                buildPhases: [PBXBuildPhase] = [],\n                buildRules: [PBXBuildRule] = [],\n                dependencies: [PBXTargetDependency] = [],\n                productName: String? = nil,\n                product: PBXFileReference? = nil,\n                productType: PBXProductType? = nil) {\n        buildConfigurationListReference = buildConfigurationList?.reference\n        buildPhaseReferences = buildPhases.references()\n        buildRuleReferences = buildRules.references()\n        dependencyReferences = dependencies.references()\n        self.name = name\n        self.productName = productName\n        productReference = product?.reference\n        self.productType = productType\n        super.init()\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case buildConfigurationList\n        case buildPhases\n        case buildRules\n        case dependencies\n        case name\n        case productName\n        case productReference\n        case productType\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let objectReferenceRepository = decoder.context.objectReferenceRepository\n        let objects = decoder.context.objects\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n\n        name = try container.decode(.name)\n        if let buildConfigurationListReference: String = try container.decodeIfPresent(.buildConfigurationList) {\n            self.buildConfigurationListReference = objectReferenceRepository.getOrCreate(reference: buildConfigurationListReference, objects: objects)\n        } else {\n            buildConfigurationListReference = nil\n        }\n        let buildPhaseReferences: [String] = try container.decodeIfPresent(.buildPhases) ?? []\n        self.buildPhaseReferences = buildPhaseReferences.map({ objectReferenceRepository.getOrCreate(reference: $0, objects: objects) })\n        let buildRuleReferences: [String] = try container.decodeIfPresent(.buildRules) ?? []\n        self.buildRuleReferences = buildRuleReferences.map({ objectReferenceRepository.getOrCreate(reference: $0, objects: objects) })\n        let dependencyReferences: [String] = try container.decodeIfPresent(.dependencies) ?? []\n        self.dependencyReferences = dependencyReferences.map({ objectReferenceRepository.getOrCreate(reference: $0, objects: objects) })\n        productName = try container.decodeIfPresent(.productName)\n        if let productReferenceString: String = try container.decodeIfPresent(.productReference) {\n            productReference = objectReferenceRepository.getOrCreate(reference: productReferenceString, objects: objects)\n        } else {\n            productReference = nil\n        }\n        productType = try container.decodeIfPresent(.productType)\n        try super.init(from: decoder)\n    }\n\n    func plistValues(proj: PBXProj, isa: String, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary = try super.plistValues(proj: proj, reference: reference)\n        dictionary[\"isa\"] = .string(CommentedString(isa))\n        let buildConfigurationListComment = \"Build configuration list for \\(isa) \\\"\\(name)\\\"\"\n        if let buildConfigurationListReference = buildConfigurationListReference {\n            dictionary[\"buildConfigurationList\"] = .string(CommentedString(buildConfigurationListReference.value,\n                                                                           comment: buildConfigurationListComment))\n        }\n        dictionary[\"buildPhases\"] = .array(buildPhaseReferences\n            .map { (buildPhaseReference: PBXObjectReference) in\n                let buildPhase: PBXBuildPhase? = buildPhaseReference.getObject()\n                return .string(CommentedString(buildPhaseReference.value, comment: buildPhase?.name()))\n        })\n\n        // Xcode doesn't write PBXAggregateTarget buildRules or empty PBXLegacyTarget buildRules\n        if !(self is PBXAggregateTarget), !(self is PBXLegacyTarget) || !buildRuleReferences.isEmpty {\n            dictionary[\"buildRules\"] = .array(buildRuleReferences.map { .string(CommentedString($0.value, comment: PBXBuildRule.isa)) })\n        }\n\n        dictionary[\"dependencies\"] = .array(dependencyReferences.map { .string(CommentedString($0.value, comment: PBXTargetDependency.isa)) })\n        dictionary[\"name\"] = .string(CommentedString(name))\n        if let productName = productName {\n            dictionary[\"productName\"] = .string(CommentedString(productName))\n        }\n        if let productType = productType {\n            dictionary[\"productType\"] = .string(CommentedString(productType.rawValue))\n        }\n        if let productReference = productReference {\n            let fileElement: PBXFileElement? = productReference.getObject()\n            dictionary[\"productReference\"] = .string(CommentedString(productReference.value, comment: fileElement?.fileName()))\n        }\n        return (key: CommentedString(reference, comment: name),\n                value: .dictionary(dictionary))\n    }\n}\n\n// MARK: - Helpers\n\npublic extension PBXTarget {\n    /// Returns the product name with the extension joined with a period.\n    ///\n    /// - Returns: product name with extension.\n    func productNameWithExtension() -> String? {\n        guard let productName = self.productName else { return nil }\n        guard let fileExtension = self.productType?.fileExtension else { return nil }\n        return \"\\(productName).\\(fileExtension)\"\n    }\n\n    /// Returns the sources build phase.\n    ///\n    /// - Returns: sources build phase.\n    /// - Throws: an error if the build phase cannot be obtained.\n    func sourcesBuildPhase() throws -> PBXSourcesBuildPhase? {\n        return try buildPhaseReferences\n            .compactMap({ try $0.getThrowingObject() as? PBXBuildPhase })\n            .filter({ $0.buildPhase == .sources })\n            .compactMap { $0 as? PBXSourcesBuildPhase }\n            .first\n    }\n\n    /// Returns the resources build phase.\n    ///\n    /// - Returns: sources build phase.\n    /// - Throws: an error if the build phase cannot be obtained.\n    func resourcesBuildPhase() throws -> PBXResourcesBuildPhase? {\n        return try buildPhaseReferences\n            .compactMap({ try $0.getThrowingObject() as? PBXResourcesBuildPhase })\n            .filter({ $0.buildPhase == .resources })\n            .first\n    }\n\n    /// Returns the target source files.\n    ///\n    /// - Returns: source files.\n    /// - Throws: an error if something goes wrong.\n    func sourceFiles() throws -> [PBXFileElement] {\n        return try sourcesBuildPhase()?.fileReferences\n            .compactMap { try $0.getThrowingObject() as? PBXBuildFile }\n            .filter { $0.fileReference != nil }\n            .compactMap { try $0.fileReference!.getThrowingObject() as? PBXFileElement }\n            ?? []\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Objects/Targets/PBXTargetDependency.swift",
    "content": "import Foundation\n\n/// This is the element for referencing other targets through content proxies.\npublic final class PBXTargetDependency: PBXObject {\n    // MARK: - Attributes\n\n    /// Target name.\n    public var name: String?\n\n    /// Target reference.\n    var targetReference: PBXObjectReference?\n\n    /// Target.\n    public var target: PBXTarget? {\n        get {\n            return targetReference?.getObject()\n        }\n        set {\n            targetReference = newValue?.reference\n        }\n    }\n\n    /// Target proxy reference.\n    var targetProxyReference: PBXObjectReference?\n\n    /// Target proxy.\n    public var targetProxy: PBXContainerItemProxy? {\n        get {\n            return targetProxyReference?.getObject()\n        }\n        set {\n            targetProxyReference = newValue?.reference\n        }\n    }\n\n    // MARK: - Init\n\n    /// Initializes the target dependency with dependencies as objects.\n    ///\n    /// - Parameters:\n    ///   - name: Dependency name.\n    ///   - target: Target.\n    ///   - targetProxy: Target proxy.\n    public init(name: String? = nil,\n                target: PBXTarget? = nil,\n                targetProxy: PBXContainerItemProxy? = nil) {\n        self.name = name\n        targetReference = target?.reference\n        targetProxyReference = targetProxy?.reference\n        super.init()\n    }\n\n    // MARK: - Decodable\n\n    fileprivate enum CodingKeys: String, CodingKey {\n        case name\n        case target\n        case targetProxy\n    }\n\n    public required init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        let referenceRepository = decoder.context.objectReferenceRepository\n        let objects = decoder.context.objects\n        name = try container.decodeIfPresent(.name)\n        if let targetReference: String = try container.decodeIfPresent(.target) {\n            self.targetReference = referenceRepository.getOrCreate(reference: targetReference, objects: objects)\n        }\n        if let targetProxyReference: String = try container.decodeIfPresent(.targetProxy) {\n            self.targetProxyReference = referenceRepository.getOrCreate(reference: targetProxyReference, objects: objects)\n        }\n        try super.init(from: decoder)\n    }\n}\n\n// MARK: - PlistSerializable\n\nextension PBXTargetDependency: PlistSerializable {\n    func plistKeyAndValue(proj _: PBXProj, reference: String) throws -> (key: CommentedString, value: PlistValue) {\n        var dictionary: [CommentedString: PlistValue] = [:]\n        dictionary[\"isa\"] = .string(CommentedString(PBXTargetDependency.isa))\n        if let name = name {\n            dictionary[\"name\"] = .string(CommentedString(name))\n        }\n        if let targetReference = targetReference {\n            let targetObject: PBXTarget? = targetReference.getObject()\n            dictionary[\"target\"] = .string(CommentedString(targetReference.value, comment: targetObject?.name))\n        }\n        if let targetProxyReference = targetProxyReference {\n            dictionary[\"targetProxy\"] = .string(CommentedString(targetProxyReference.value, comment: \"PBXContainerItemProxy\"))\n        }\n        return (key: CommentedString(reference,\n                                     comment: \"PBXTargetDependency\"),\n                value: .dictionary(dictionary))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Project/WorkspaceSettings.swift",
    "content": "import Foundation\nimport PathKit\n\npublic enum WorkspaceSettingsError: Error {\n    /// thrown when the settings file was not found.\n    case notFound(path: Path)\n}\n\n/// It represents the WorkspaceSettings.xcsettings file under a workspace data directory.\npublic class WorkspaceSettings: Codable, Equatable, Writable {\n    public enum BuildSystem: String {\n        /// Original build system\n        case original = \"Original\"\n\n        /// New build system\n        case new\n    }\n\n    /// Workspace build system.\n    public var buildSystem: BuildSystem\n\n    /// Decodable coding keys.\n    ///\n    /// - buildSystem: Build system.\n    enum CodingKeys: String, CodingKey {\n        case buildSystem = \"BuildSystemType\"\n    }\n\n    /// Initializes the settings with its attributes.\n    ///\n    /// - Parameter buildSystem: Workspace build system.\n    init(buildSystem: BuildSystem = .new) {\n        self.buildSystem = buildSystem\n    }\n\n    /// Initializes the settings decoding the values from the plist representation.\n    ///\n    /// - Parameter decoder: Propertly list decoder.\n    /// - Throws: An error if required attributes are missing or have a wrong type.\n    public required init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        if let buildSystemString: String = try container.decodeIfPresent(.buildSystem),\n            let buildSystem = BuildSystem(rawValue: buildSystemString) {\n            self.buildSystem = buildSystem\n        } else {\n            buildSystem = .new\n        }\n    }\n\n    /// Encodes the settings into the given encoder.\n    ///\n    /// - Parameter encoder: Encoder where the settings will be encoded into.\n    /// - Throws: An error if the settings can't be encoded.\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        if buildSystem == .original {\n            try container.encode(buildSystem.rawValue, forKey: .buildSystem)\n        }\n    }\n\n    /// Initializes the settings reading the values from the WorkspaceSettings.xcsettings file.\n    ///\n    /// - Parameter path: Path to the WorkspaceSettings.xcsettings\n    /// - Returns: The initialized workspace settings.\n    /// - Throws: An error if the file doesn't exist or has an invalid format.\n    public static func at(path: Path) throws -> WorkspaceSettings {\n        if !path.exists {\n            throw WorkspaceSettingsError.notFound(path: path)\n        }\n        let data = try Data(contentsOf: path.url)\n        let plistDecoder = PropertyListDecoder()\n        return try plistDecoder.decode(WorkspaceSettings.self, from: data)\n    }\n\n    /// Compares two instances of WorkspaceSettings and retrus true if the two instances are equal.\n    ///\n    /// - Parameters:\n    ///   - lhs: First instance to be compared.\n    ///   - rhs: Second instance to be compared.\n    /// - Returns: True if the two instances are the same.\n    public static func == (lhs: WorkspaceSettings, rhs: WorkspaceSettings) -> Bool {\n        return lhs.buildSystem == rhs.buildSystem\n    }\n\n    /// Writes the workspace settings.\n    ///\n    /// - Parameter path: The path to write to\n    /// - Parameter override: True if the content should be overriden if it already exists.\n    /// - Throws: writing error if something goes wrong.\n    public func write(path: Path, override: Bool) throws {\n        let encoder = PropertyListEncoder()\n        let data = try encoder.encode(self)\n        if override, path.exists {\n            try path.delete()\n        }\n        try path.write(data)\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Project/XCBreakpointList.swift",
    "content": "import AEXML\nimport Foundation\nimport PathKit\n\n// swiftlint:disable:next type_body_length\npublic final class XCBreakpointList: Equatable, Writable {\n    // MARK: - Breakpoint Proxy\n\n    // swiftlint:disable type_body_length\n    public final class BreakpointProxy: Equatable {\n        // MARK: - Breakpoint Content\n\n        public final class BreakpointContent: Equatable {\n            // MARK: - Breakpoint Action Proxy\n\n            public final class BreakpointActionProxy: Equatable {\n                // MARK: - Breakpoint Action Content\n\n                public final class ActionContent: Equatable {\n                    // MARK: - Attributes\n\n                    public var consoleCommand: String?\n                    public var message: String?\n                    public var conveyanceType: String?\n                    public var command: String?\n                    public var arguments: String?\n                    public var waitUntilDone: Bool?\n                    public var script: String?\n                    public var soundName: String?\n\n                    // MARK: - Init\n\n                    public init(consoleCommand: String? = nil,\n                                message: String? = nil,\n                                conveyanceType: String? = nil,\n                                command: String? = nil,\n                                arguments: String? = nil,\n                                waitUntilDone: Bool? = nil,\n                                script: String? = nil,\n                                soundName: String? = nil) {\n                        self.consoleCommand = consoleCommand\n                        self.message = message\n                        self.conveyanceType = conveyanceType\n                        self.command = command\n                        self.arguments = arguments\n                        self.waitUntilDone = waitUntilDone\n                        self.script = script\n                        self.soundName = soundName\n                    }\n\n                    init(element: AEXMLElement) throws {\n                        consoleCommand = element.attributes[\"consoleCommand\"]\n                        message = element.attributes[\"message\"]\n                        conveyanceType = element.attributes[\"conveyanceType\"]\n                        command = element.attributes[\"command\"]\n                        arguments = element.attributes[\"arguments\"]\n                        if let waitUntilDoneString = element.attributes[\"waitUntilDone\"] {\n                            waitUntilDone = waitUntilDoneString == \"YES\"\n                        }\n                        script = element.attributes[\"script\"]\n                        soundName = element.attributes[\"soundName\"]\n                    }\n\n                    // MARK: - XML\n\n                    fileprivate func xmlElement() -> AEXMLElement {\n                        var attributes: [String: String] = [:]\n                        attributes[\"consoleCommand\"] = consoleCommand\n                        attributes[\"message\"] = message\n                        attributes[\"conveyanceType\"] = conveyanceType\n                        attributes[\"command\"] = command\n                        attributes[\"arguments\"] = arguments\n                        if let waitUntilDone = waitUntilDone {\n                            attributes[\"waitUntilDone\"] = waitUntilDone ? \"YES\" : \"NO\"\n                        }\n                        attributes[\"script\"] = script\n                        attributes[\"soundName\"] = soundName\n\n                        let element = AEXMLElement(name: \"ActionContent\",\n                                                   value: nil,\n                                                   attributes: attributes)\n                        return element\n                    }\n\n                    // MARK: - Equatable\n\n                    public static func == (lhs: ActionContent, rhs: ActionContent) -> Bool {\n                        return lhs.consoleCommand == rhs.consoleCommand &&\n                            lhs.message == rhs.message &&\n                            lhs.conveyanceType == rhs.conveyanceType &&\n                            lhs.command == rhs.command &&\n                            lhs.arguments == rhs.arguments &&\n                            lhs.waitUntilDone == rhs.waitUntilDone &&\n                            lhs.script == rhs.script &&\n                            lhs.soundName == rhs.soundName\n                    }\n                }\n\n                // MARK: - Breakpoint Action Extension ID\n\n                public enum ActionExtensionID: String {\n                    case debuggerCommand = \"Xcode.BreakpointAction.DebuggerCommand\"\n                    case log = \"Xcode.BreakpointAction.Log\"\n                    case shellCommand = \"Xcode.BreakpointAction.ShellCommand\"\n                    case graphicsTrace = \"Xcode.BreakpointAction.GraphicsTrace\"\n                    case appleScript = \"Xcode.BreakpointAction.AppleScript\"\n                    case sound = \"Xcode.BreakpointAction.Sound\"\n                    case openGLError = \"Xcode.BreakpointAction.OpenGLError\"\n                }\n\n                // MARK: - Attributes\n\n                public var actionExtensionID: ActionExtensionID\n                public var actionContent: ActionContent\n\n                // MARK: - Init\n\n                public init(actionExtensionID: ActionExtensionID,\n                            actionContent: ActionContent) {\n                    self.actionExtensionID = actionExtensionID\n                    self.actionContent = actionContent\n                }\n\n                init(element: AEXMLElement) throws {\n                    guard let actionExtensionIDString = element.attributes[\"ActionExtensionID\"],\n                        let actionExtensionID = ActionExtensionID(rawValue: actionExtensionIDString) else {\n                        throw XCBreakpointListError.missing(property: \"ActionExtensionID\")\n                    }\n                    self.actionExtensionID = actionExtensionID\n                    actionContent = try ActionContent(element: element[\"ActionContent\"])\n                }\n\n                // MARK: - XML\n\n                fileprivate func xmlElement() -> AEXMLElement {\n                    let element = AEXMLElement(name: \"BreakpointActionProxy\",\n                                               value: nil,\n                                               attributes: [\"ActionExtensionID\": actionExtensionID.rawValue])\n                    element.addChild(actionContent.xmlElement())\n                    return element\n                }\n\n                // MARK: - Equatable\n\n                public static func == (lhs: BreakpointActionProxy, rhs: BreakpointActionProxy) -> Bool {\n                    return lhs.actionExtensionID == rhs.actionExtensionID &&\n                        lhs.actionContent == rhs.actionContent\n                }\n            }\n\n            // MARK: - Breakpoint Location Proxy\n\n            public final class BreakpointLocationProxy: Equatable {\n                public init() {}\n\n                init(element _: AEXMLElement) throws {}\n\n                fileprivate func xmlElement() -> AEXMLElement {\n                    let element = AEXMLElement(name: \"BreakpointLocationProxy\",\n                                               value: nil,\n                                               attributes: [:])\n                    return element\n                }\n\n                public static func == (_: BreakpointLocationProxy, _: BreakpointLocationProxy) -> Bool {\n                    return true\n                }\n            }\n\n            public static func == (lhs: BreakpointContent, rhs: BreakpointContent) -> Bool {\n                return lhs.enabled == rhs.enabled &&\n                    lhs.ignoreCount == rhs.ignoreCount &&\n                    lhs.continueAfterRunningActions == rhs.continueAfterRunningActions &&\n                    lhs.filePath == rhs.filePath &&\n                    lhs.timestamp == rhs.timestamp &&\n                    lhs.startingColumn == rhs.startingColumn &&\n                    lhs.endingColumn == rhs.endingColumn &&\n                    lhs.startingLine == rhs.startingLine &&\n                    lhs.endingLine == rhs.endingLine &&\n                    lhs.breakpointStackSelectionBehavior == rhs.breakpointStackSelectionBehavior &&\n                    lhs.symbol == rhs.symbol &&\n                    lhs.module == rhs.module &&\n                    lhs.scope == rhs.scope &&\n                    lhs.stopOnStyle == rhs.stopOnStyle &&\n                    lhs.condition == rhs.condition &&\n                    lhs.actions == rhs.actions &&\n                    lhs.locations == rhs.locations\n            }\n\n            // MARK: - Attributes\n\n            public var enabled: Bool\n            public var ignoreCount: String\n            public var continueAfterRunningActions: Bool\n            public var filePath: String?\n            public var timestamp: String?\n            public var startingColumn: String?\n            public var endingColumn: String?\n            public var startingLine: String?\n            public var endingLine: String?\n            public var breakpointStackSelectionBehavior: String?\n            public var symbol: String?\n            public var module: String?\n            public var scope: String?\n            public var stopOnStyle: String?\n            public var condition: String?\n            public var actions: [BreakpointActionProxy]\n            public var locations: [BreakpointLocationProxy]\n\n            // MARK: - Init\n\n            public init(enabled: Bool = true,\n                        ignoreCount: String = \"0\",\n                        continueAfterRunningActions: Bool = false,\n                        filePath: String? = nil,\n                        timestamp: String? = nil,\n                        startingColumn: String? = nil,\n                        endingColumn: String? = nil,\n                        startingLine: String? = nil,\n                        endingLine: String? = nil,\n                        breakpointStackSelectionBehavior: String? = nil,\n                        symbol: String? = nil,\n                        module: String? = nil,\n                        scope: String? = nil,\n                        stopOnStyle: String? = nil,\n                        condition: String? = nil,\n                        actions: [BreakpointActionProxy] = [],\n                        locations: [BreakpointLocationProxy] = []) {\n                self.enabled = enabled\n                self.ignoreCount = ignoreCount\n                self.continueAfterRunningActions = continueAfterRunningActions\n                self.filePath = filePath\n                self.timestamp = timestamp\n                self.startingColumn = startingColumn\n                self.endingColumn = endingColumn\n                self.startingLine = startingLine\n                self.endingLine = endingLine\n                self.breakpointStackSelectionBehavior = breakpointStackSelectionBehavior\n                self.symbol = symbol\n                self.module = module\n                self.scope = scope\n                self.stopOnStyle = stopOnStyle\n                self.condition = condition\n                self.actions = actions\n                self.locations = locations\n            }\n\n            init(element: AEXMLElement) throws {\n                enabled = element.attributes[\"shouldBeEnabled\"] == \"Yes\"\n                ignoreCount = element.attributes[\"ignoreCount\"] ?? \"0\"\n                continueAfterRunningActions = element.attributes[\"continueAfterRunningActions\"] == \"Yes\"\n                filePath = element.attributes[\"filePath\"]\n                timestamp = element.attributes[\"timestampString\"]\n                startingColumn = element.attributes[\"startingColumnNumber\"]\n                endingColumn = element.attributes[\"endingColumnNumber\"]\n                startingLine = element.attributes[\"startingLineNumber\"]\n                endingLine = element.attributes[\"endingLineNumber\"]\n                breakpointStackSelectionBehavior = element.attributes[\"breakpointStackSelectionBehavior\"]\n                symbol = element.attributes[\"symbolName\"]\n                module = element.attributes[\"moduleName\"]\n                scope = element.attributes[\"scope\"]\n                stopOnStyle = element.attributes[\"stopOnStyle\"]\n                condition = element.attributes[\"condition\"]\n\n                actions = try element[\"Actions\"][\"BreakpointActionProxy\"]\n                    .all?\n                    .map(BreakpointActionProxy.init) ?? []\n                locations = try element[\"Locations\"][\"BreakpointLocationProxy\"]\n                    .all?\n                    .map(BreakpointLocationProxy.init) ?? []\n            }\n\n            // MARK: - XML\n\n            fileprivate func xmlElement() -> AEXMLElement {\n                var attributes: [String: String] = [:]\n                attributes[\"shouldBeEnabled\"] = enabled ? \"Yes\" : \"No\"\n                attributes[\"ignoreCount\"] = ignoreCount\n                attributes[\"continueAfterRunningActions\"] = continueAfterRunningActions ? \"Yes\" : \"No\"\n                attributes[\"filePath\"] = filePath\n                attributes[\"timestampString\"] = timestamp\n                attributes[\"startingColumnNumber\"] = startingColumn\n                attributes[\"endingColumnNumber\"] = endingColumn\n                attributes[\"startingLineNumber\"] = startingLine\n                attributes[\"endingLineNumber\"] = endingLine\n                attributes[\"breakpointStackSelectionBehavior\"] = breakpointStackSelectionBehavior\n                attributes[\"symbolName\"] = symbol\n                attributes[\"moduleName\"] = module\n                attributes[\"scope\"] = scope\n                attributes[\"stopOnStyle\"] = stopOnStyle\n                attributes[\"condition\"] = condition\n\n                let element = AEXMLElement(name: \"BreakpointContent\",\n                                           value: nil,\n                                           attributes: attributes)\n\n                let actions = AEXMLElement(name: \"Actions\", value: nil, attributes: [:])\n                self.actions.map({ $0.xmlElement() }).forEach({ actions.addChild($0) })\n                element.addChild(actions)\n\n                let locations = AEXMLElement(name: \"Locations\", value: nil, attributes: [:])\n                self.locations.map({ $0.xmlElement() }).forEach({ locations.addChild($0) })\n                element.addChild(locations)\n\n                return element\n            }\n        }\n\n        // MARK: - Breakpoint Extension ID\n\n        public enum BreakpointExtensionID: String {\n            case file = \"Xcode.Breakpoint.FileBreakpoint\"\n            case exception = \"Xcode.Breakpoint.ExceptionBreakpoint\"\n            case swiftError = \"Xcode.Breakpoint.SwiftErrorBreakpoint\"\n            case openGLError = \"Xcode.Breakpoint.OpenGLErrorBreakpoint\"\n            case symbolic = \"Xcode.Breakpoint.SymbolicBreakpoint\"\n            case ideConstraintError = \"Xcode.Breakpoint.IDEConstraintErrorBreakpoint\"\n            case ideTestFailure = \"Xcode.Breakpoint.IDETestFailureBreakpoint\"\n        }\n\n        // MARK: - Attributes\n\n        public var breakpointExtensionID: BreakpointExtensionID\n        public var breakpointContent: BreakpointContent\n\n        // MARK: - Init\n\n        public init(breakpointExtensionID: BreakpointExtensionID,\n                    breakpointContent: BreakpointContent) {\n            self.breakpointExtensionID = breakpointExtensionID\n            self.breakpointContent = breakpointContent\n        }\n\n        init(element: AEXMLElement) throws {\n            guard let breakpointExtensionIDString = element.attributes[\"BreakpointExtensionID\"],\n                let breakpointExtensionID = BreakpointExtensionID(rawValue: breakpointExtensionIDString) else {\n                throw XCBreakpointListError.missing(property: \"BreakpointExtensionID\")\n            }\n            self.breakpointExtensionID = breakpointExtensionID\n            breakpointContent = try BreakpointContent(element: element[\"BreakpointContent\"])\n        }\n\n        // MARK: - XML\n\n        fileprivate func xmlElement() -> AEXMLElement {\n            let element = AEXMLElement(name: \"BreakpointProxy\",\n                                       value: nil,\n                                       attributes: [\"BreakpointExtensionID\": breakpointExtensionID.rawValue])\n            element.addChild(breakpointContent.xmlElement())\n            return element\n        }\n\n        // MARK: - Equatable\n\n        public static func == (lhs: BreakpointProxy, rhs: BreakpointProxy) -> Bool {\n            return lhs.breakpointExtensionID == rhs.breakpointExtensionID &&\n                lhs.breakpointContent == rhs.breakpointContent\n        }\n    }\n\n    // MARK: - Attributes\n\n    public var breakpoints: [BreakpointProxy]\n    public var type: String?\n    public var version: String?\n\n    // MARK: - Init\n\n    /// Initializes the breakpoints reading the content from the disk.\n    ///\n    /// - Parameters:\n    ///   - path: breakpoints path.\n    public init(path: Path) throws {\n        if !path.exists {\n            throw XCBreakpointListError.notFound(path: path)\n        }\n        let document = try AEXMLDocument(xml: try path.read())\n        let bucket = document[\"Bucket\"]\n        type = bucket.attributes[\"type\"]\n        version = bucket.attributes[\"version\"]\n        breakpoints = try bucket[\"Breakpoints\"][\"BreakpointProxy\"]\n            .all?\n            .map(BreakpointProxy.init) ?? []\n    }\n\n    public init(type: String? = nil,\n                version: String? = nil,\n                breakpoints: [BreakpointProxy] = []) {\n        self.type = type\n        self.version = version\n        self.breakpoints = breakpoints\n    }\n\n    // MARK: - Helpers\n\n    public func add(breakpointProxy: BreakpointProxy) -> XCBreakpointList {\n        var breakpoints = self.breakpoints\n        breakpoints.append(breakpointProxy)\n        return XCBreakpointList(type: type, version: version, breakpoints: breakpoints)\n    }\n\n    // MARK: - Writable\n\n    public func write(path: Path, override: Bool) throws {\n        let document = AEXMLDocument()\n        var schemeAttributes: [String: String] = [:]\n        schemeAttributes[\"type\"] = type\n        schemeAttributes[\"version\"] = version\n        let bucket = document.addChild(name: \"Bucket\", value: nil, attributes: schemeAttributes)\n\n        let breakpoints = AEXMLElement(name: \"Breakpoints\", value: nil, attributes: [:])\n        self.breakpoints.map({ $0.xmlElement() }).forEach({ breakpoints.addChild($0) })\n        bucket.addChild(breakpoints)\n\n        if override, path.exists {\n            try path.delete()\n        }\n        try path.write(document.xmlXcodeFormat)\n    }\n\n    // MARK: - Equatable\n\n    public static func == (lhs: XCBreakpointList, rhs: XCBreakpointList) -> Bool {\n        return lhs.breakpoints == rhs.breakpoints &&\n            lhs.type == rhs.type &&\n            lhs.version == rhs.version\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Project/XCSharedData.swift",
    "content": "import Foundation\nimport PathKit\n\npublic final class XCSharedData: Equatable {\n    // MARK: - Attributes\n\n    /// Shared data schemes.\n    public var schemes: [XCScheme]\n\n    /// Shared data breakpoints.\n    public var breakpoints: XCBreakpointList?\n\n    /// Workspace settings (represents the WorksapceSettings.xcsettings file).\n    public var workspaceSettings: WorkspaceSettings?\n\n    // MARK: - Init\n\n    /// Initializes the shared data with its properties.\n    ///\n    /// - Parameters:\n    ///   - schemes: Shared data schemes.\n    ///   - breakpoints: Shared data breakpoints.\n    ///   - workspaceSettings: Workspace settings (represents the WorksapceSettings.xcsettings file).\n    public init(schemes: [XCScheme],\n                breakpoints: XCBreakpointList? = nil,\n                workspaceSettings: WorkspaceSettings? = nil) {\n        self.schemes = schemes\n        self.breakpoints = breakpoints\n        self.workspaceSettings = workspaceSettings\n    }\n\n    /// Initializes the XCSharedData reading the content from the disk.\n    ///\n    /// - Parameter path: path where the .xcshareddata is.\n    public init(path: Path) throws {\n        if !path.exists {\n            throw XCSharedDataError.notFound(path: path)\n        }\n        schemes = path.glob(\"xcschemes/*.xcscheme\")\n            .compactMap { try? XCScheme(path: $0) }\n        breakpoints = try? XCBreakpointList(path: path + \"xcdebugger/Breakpoints_v2.xcbkptlist\")\n\n        let workspaceSettingsPath = path + \"WorkspaceSettings.xcsettings\"\n        if workspaceSettingsPath.exists {\n            workspaceSettings = try WorkspaceSettings.at(path: workspaceSettingsPath)\n        } else {\n            workspaceSettings = nil\n        }\n    }\n\n    // MARK: - Equatable\n\n    public static func == (lhs: XCSharedData, rhs: XCSharedData) -> Bool {\n        return lhs.schemes == rhs.schemes &&\n            lhs.breakpoints == rhs.breakpoints &&\n            lhs.workspaceSettings == rhs.workspaceSettings\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Project/Xcode.swift",
    "content": "import Foundation\n\n/// Class that contains Xcode constants.\npublic struct Xcode {\n    /// Last known constants.\n    public struct LastKnown {\n        /// Last known SDKs.\n        public struct SDK {\n            /// Last known SDK for iOS.\n            public static let ios: String = \"12.0\"\n\n            /// Last known SDK for macOS.\n            public static let macos: String = \"10.14\"\n\n            /// Last known SDK for tvOS.\n            public static let tvos: String = \"12.0\"\n\n            /// Last known SDK for watchos.\n            public static let watchos: String = \"5.0\"\n        }\n\n        /// Last known archive version for Xcodeproj.\n        public static let archiveVersion: UInt = 1\n\n        /// Last known Swift version (stable).\n        public static let swiftVersion = \"4.2\"\n\n        /// Last known object version for Xcodeproj.\n        public static let objectVersion: UInt = 51\n\n        /// Last known upgrade check.\n        public static let upgradeCheck = \"1000\"\n\n        /// Last known Swift upgrade check.\n        public static let swiftUpgradeCheck = \"1000\"\n    }\n\n    /// Default values.\n    public struct Default {\n        /// The default object version for Xcodeproj.\n        public static let objectVersion: UInt = 50\n\n        /// Default compatibility version.\n        public static let compatibilityVersion: String = \"Xcode 9.3\"\n\n        /// Default development region.\n        public static let developmentRegion: String = \"en\"\n    }\n\n    /// Inherited keywords used in build settings.\n    public static let inheritedKeywords = [\"${inherited}\", \"$(inherited)\"]\n\n    /// Header files extensions.\n    public static let headersExtensions = [\".h\", \".hh\", \".hpp\", \".ipp\", \".tpp\", \".hxx\", \".def\", \".inl\", \".inc\"]\n\n    /// Supported values.\n    public struct Supported {\n        /// The version of `.xcscheme` files supported by Xcodeproj\n        public static let xcschemeFormatVersion = \"1.3\"\n    }\n\n    /// Returns the Xcode file type for any given extension.\n    ///\n    /// - Parameter extension: file extension.\n    /// - Returns: Xcode file type.\n    public static func filetype(extension: String) -> String? {\n        return [\n            \"a\": \"archive.ar\",\n            \"apns\": \"text\",\n            \"app\": \"wrapper.application\",\n            \"appex\": \"wrapper.app-extension\",\n            \"bundle\": \"wrapper.plug-in\",\n            \"dylib\": \"compiled.mach-o.dylib\",\n            \"entitlements\": \"text.plist.entitlements\",\n            \"framework\": \"wrapper.framework\",\n            \"gif\": \"image.gif\",\n            \"gpx\": \"text.xml\",\n            \"h\": \"sourcecode.c.h\",\n            \"m\": \"sourcecode.c.objc\",\n            \"markdown\": \"text\",\n            \"mdimporter\": \"wrapper.cfbundle\",\n            \"modulemap\": \"sourcecode.module\",\n            \"mov\": \"video.quicktime\",\n            \"mp3\": \"audio.mp3\",\n            \"octest\": \"wrapper.cfbundle\",\n            \"pch\": \"sourcecode.c.h\",\n            \"plist\": \"text.plist.xml\",\n            \"png\": \"image.png\",\n            \"sh\": \"text.script.sh\",\n            \"sks\": \"file.sks\",\n            \"storyboard\": \"file.storyboard\",\n            \"strings\": \"text.plist.strings\",\n            \"swift\": \"sourcecode.swift\",\n            \"xcassets\": \"folder.assetcatalog\",\n            \"xcconfig\": \"text.xcconfig\",\n            \"xcdatamodel\": \"wrapper.xcdatamodel\",\n            \"xcodeproj\": \"wrapper.pb-project\",\n            \"xctest\": \"wrapper.cfbundle\",\n            \"xib\": \"file.xib\",\n            \"zip\": \"archive.zip\",\n        ][`extension`]\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Project/XcodeProj.swift",
    "content": "import Foundation\nimport PathKit\n\n/// Model that represents a .xcodeproj project.\npublic final class XcodeProj: Equatable {\n    // MARK: - Properties\n\n    /// Project workspace\n    public var workspace: XCWorkspace\n\n    /// .pbxproj representatino\n    public var pbxproj: PBXProj\n\n    /// Shared data.\n    public var sharedData: XCSharedData?\n\n    // MARK: - Init\n\n    public init(path: Path) throws {\n        var pbxproj: PBXProj!\n        var workspace: XCWorkspace!\n        var sharedData: XCSharedData?\n\n        try OSLogger.instance.log(name: \"Write workspace\", path.string) {\n            if !path.exists { throw XCodeProjError.notFound(path: path) }\n            let pbxprojPaths = path.glob(\"*.pbxproj\")\n            if pbxprojPaths.isEmpty {\n                throw XCodeProjError.pbxprojNotFound(path: path)\n            }\n            let pbxprojPath = pbxprojPaths.first!\n            let (pbxProjData, pbxProjDictionary) = try XcodeProj.readPBXProj(path: pbxprojPath)\n            let context = ProjectDecodingContext(\n                pbxProjValueReader: { key in\n                    pbxProjDictionary[key]\n                }\n            )\n\n            let plistDecoder = XcodeprojPropertyListDecoder(context: context)\n            pbxproj = try plistDecoder.decode(PBXProj.self, from: pbxProjData)\n            try pbxproj.updateProjectName(path: pbxprojPaths.first!)\n            let xcworkspacePaths = path.glob(\"*.xcworkspace\")\n            if xcworkspacePaths.isEmpty {\n                workspace = XCWorkspace()\n            } else {\n                workspace = try XCWorkspace(path: xcworkspacePaths.first!)\n            }\n            let sharedDataPath = path + \"xcshareddata\"\n            sharedData = try? XCSharedData(path: sharedDataPath)\n        }\n\n        self.pbxproj = pbxproj\n        self.workspace = workspace\n        self.sharedData = sharedData\n    }\n\n    public convenience init(pathString: String) throws {\n        try self.init(path: Path(pathString))\n    }\n\n    /// Initializes the XCodeProj\n    ///\n    /// - Parameters:\n    ///   - workspace: project internal workspace.\n    ///   - pbxproj: project .pbxproj.\n    public init(workspace: XCWorkspace, pbxproj: PBXProj, sharedData: XCSharedData? = nil) {\n        self.workspace = workspace\n        self.pbxproj = pbxproj\n        self.sharedData = sharedData\n    }\n\n    // MARK: - Equatable\n\n    public static func == (lhs: XcodeProj, rhs: XcodeProj) -> Bool {\n        return lhs.workspace == rhs.workspace &&\n            lhs.pbxproj == rhs.pbxproj &&\n            lhs.sharedData == rhs.sharedData\n    }\n\n    // MARK: - Private\n\n    private static func readPBXProj(path: Path) throws -> (Data, [String: Any]) {\n        let plistXML = try Data(contentsOf: path.url)\n        var propertyListFormat = PropertyListSerialization.PropertyListFormat.xml\n        let serialized = try PropertyListSerialization.propertyList(\n            from: plistXML,\n            options: .mutableContainersAndLeaves,\n            format: &propertyListFormat\n        )\n        // swiftlint:disable:next force_cast\n        let pbxProjDictionary = serialized as! [String: Any]\n        return (plistXML, pbxProjDictionary)\n    }\n}\n\n// MARK: - <Writable>\n\nextension XcodeProj: Writable {\n    /// Writes project to the given path.\n    ///\n    /// - Parameter path: path to `.xcodeproj` file.\n    /// - Parameter override: if project should be overridden. Default is true.\n    ///   If false will throw error if project already exists at the given path.\n    public func write(path: Path, override: Bool = true) throws {\n        try write(path: path, override: override, outputSettings: PBXOutputSettings())\n    }\n\n    /// Writes project to the given path.\n    ///\n    /// - Parameter path: path to `.xcodeproj` file.\n    /// - Parameter override: if project should be overridden. Default is true.\n    /// - Parameter outputSettings: Controls the writing of various files.\n    ///   If false will throw error if project already exists at the given path.\n    public func write(path: Path, override: Bool = true, outputSettings: PBXOutputSettings) throws {\n        try path.mkpath()\n        try OSLogger.instance.log(name: \"Write workspace\", path.string) {\n            try writeWorkspace(path: path, override: override)\n        }\n        try OSLogger.instance.log(name: \"Write pbxproj\", path.string) {\n            try writePBXProj(path: path, override: override, outputSettings: outputSettings)\n        }\n        try OSLogger.instance.log(name: \"Write schemes\", path.string) {\n            try writeSchemes(path: path, override: override)\n        }\n        try OSLogger.instance.log(name: \"Write breakpoints\", path.string) {\n            try writeBreakPoints(path: path, override: override)\n        }\n    }\n\n    /// Returns workspace file path relative to the given path.\n    ///\n    /// - Parameter path: `.xcodeproj` file path\n    /// - Returns: worspace file path relative to the given path.\n    public static func workspacePath(_ path: Path) -> Path {\n        return path + \"project.xcworkspace\"\n    }\n\n    /// Writes workspace to the given path.\n    ///\n    /// - Parameter path: path to `.xcodeproj` file.\n    /// - Parameter override: if workspace should be overridden. Default is true.\n    ///   If false will throw error if workspace already exists at the given path.\n    public func writeWorkspace(path: Path, override: Bool = true) throws {\n        try workspace.write(path: XcodeProj.workspacePath(path), override: override)\n    }\n\n    /// Returns project file path relative to the given path.\n    ///\n    /// - Parameter path: `.xcodeproj` file path\n    /// - Returns: project file path relative to the given path.\n    public static func pbxprojPath(_ path: Path) -> Path {\n        return path + \"project.pbxproj\"\n    }\n\n    /// Writes project to the given path.\n    ///\n    /// - Parameter path: path to `.xcodeproj` file.\n    /// - Parameter override: if project should be overridden. Default is true.\n    /// - Parameter outputSettings: Controls the writing of various files.\n    ///   If false will throw error if project already exists at the given path.\n    public func writePBXProj(path: Path, override: Bool = true, outputSettings: PBXOutputSettings) throws {\n        try pbxproj.write(path: XcodeProj.pbxprojPath(path), override: override, outputSettings: outputSettings)\n    }\n\n    /// Returns shared data path relative to the given path.\n    ///\n    /// - Parameter path: `.xcodeproj` file path\n    /// - Returns: shared data path relative to the given path.\n    public static func sharedDataPath(_ path: Path) -> Path {\n        return path + \"xcshareddata\"\n    }\n\n    /// Returns schemes folder path relative to the given path.\n    ///\n    /// - Parameter path: `.xcodeproj` file path\n    /// - Returns: schemes folder path relative to the given path.\n    public static func schemesPath(_ path: Path) -> Path {\n        return XcodeProj.sharedDataPath(path) + \"xcschemes\"\n    }\n\n    /// Returns scheme file path relative to the given path.\n    ///\n    /// - Parameter path: `.xcodeproj` file path\n    /// - Parameter schemeName: scheme name\n    /// - Returns: scheme file path relative to the given path.\n    public static func schemePath(_ path: Path, schemeName: String) -> Path {\n        return XcodeProj.schemesPath(path) + \"\\(schemeName).xcscheme\"\n    }\n\n    /// Writes all project schemes to the given path.\n    ///\n    /// - Parameter path: path to `.xcodeproj` file.\n    /// - Parameter override: if project should be overridden. Default is true.\n    ///   If true will remove all existing schemes before writing.\n    ///   If false will throw error if scheme already exists at the given path.\n    public func writeSchemes(path: Path, override: Bool = true) throws {\n        guard let sharedData = sharedData else { return }\n\n        let schemesPath = XcodeProj.schemesPath(path)\n        if override, schemesPath.exists {\n            try schemesPath.delete()\n        }\n        try schemesPath.mkpath()\n        for scheme in sharedData.schemes {\n            try scheme.write(path: XcodeProj.schemePath(path, schemeName: scheme.name), override: override)\n        }\n    }\n\n    /// Returns debugger folder path relative to the given path.\n    ///\n    /// - Parameter path: `.xcodeproj` file path\n    /// - Parameter schemeName: scheme name\n    /// - Returns: debugger folder path relative to the given path.\n    public static func debuggerPath(_ path: Path) -> Path {\n        return XcodeProj.sharedDataPath(path) + \"xcdebugger\"\n    }\n\n    /// Returns breakpoints plist path relative to the given path.\n    ///\n    /// - Parameter path: `.xcodeproj` file path\n    /// - Parameter schemeName: scheme name\n    /// - Returns: breakpoints plist path relative to the given path.\n    public static func breakPointsPath(_ path: Path) -> Path {\n        return XcodeProj.debuggerPath(path) + \"Breakpoints_v2.xcbkptlist\"\n    }\n\n    /// Writes all project breakpoints to the given path.\n    ///\n    /// - Parameter path: path to `.xcodeproj` file.\n    /// - Parameter override: if project should be overridden. Default is true.\n    ///   If true will remove all existing debugger data before writing.\n    ///   If false will throw error if breakpoints file exists at the given path.\n    public func writeBreakPoints(path: Path, override: Bool = true) throws {\n        guard let sharedData = sharedData else { return }\n\n        let debuggerPath = XcodeProj.debuggerPath(path)\n        if override, debuggerPath.exists {\n            try debuggerPath.delete()\n        }\n        try debuggerPath.mkpath()\n        try sharedData.breakpoints?.write(path: XcodeProj.breakPointsPath(path), override: override)\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Protocols/Writable.swift",
    "content": "import Foundation\nimport PathKit\n\n/// Protocol that defines how an entity can be writed into disk\npublic protocol Writable {\n    /// Writes the object that conforms the protocol.\n    ///\n    /// - Parameter path: The path to write to\n    /// - Parameter override: True if the content should be overriden if it already exists.\n    /// - Throws: writing error if something goes wrong.\n    func write(path: Path, override: Bool) throws\n\n    /// Writes the object that conforms the protocol.\n    ///\n    /// - Parameter pathString: The path string to write to\n    /// - Parameter override: True if the content should be overriden if it already exists.\n    /// - Throws: writing error if something goes wrong.\n    func write(pathString: String, override: Bool) throws\n}\n\nextension Writable {\n    public func write(pathString: String, override: Bool) throws {\n        let path = Path(pathString)\n        try write(path: path, override: override)\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+AditionalOption.swift",
    "content": "import AEXML\nimport Foundation\nimport PathKit\n\nextension XCScheme {\n    public final class AdditionalOption: Equatable {\n        // MARK: - Attributes\n\n        public var key: String\n        public var value: String\n        public var isEnabled: Bool\n\n        // MARK: - Init\n\n        public init(key: String, value: String, isEnabled: Bool) {\n            self.key = key\n            self.value = value\n            self.isEnabled = isEnabled\n        }\n\n        init(element: AEXMLElement) throws {\n            key = element.attributes[\"key\"]!\n            value = element.attributes[\"value\"]!\n            isEnabled = element.attributes[\"isEnabled\"] == \"YES\"\n        }\n\n        // MARK: - XML\n\n        func xmlElement() -> AEXMLElement {\n            return AEXMLElement(name: \"AdditionalOption\",\n                                value: nil,\n                                attributes: [\n                                    \"key\": key,\n                                    \"value\": value,\n                                    \"isEnabled\": isEnabled.xmlString,\n            ])\n        }\n\n        // MARK: - Equatable\n\n        public static func == (lhs: AdditionalOption, rhs: AdditionalOption) -> Bool {\n            return lhs.key == rhs.key &&\n                lhs.value == rhs.value &&\n                lhs.isEnabled == rhs.isEnabled\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+AnalyzeAction.swift",
    "content": "import AEXML\nimport Foundation\nimport PathKit\n\nextension XCScheme {\n    public final class AnalyzeAction: Equatable {\n        // MARK: - Static\n\n        // Xcode disables PreActions and PostActions for Analyze actions, so this Action\n        // does not exetend SerialAction.\n        private static let defaultBuildConfiguration = \"Debug\"\n\n        // MARK: - Attributes\n\n        public var buildConfiguration: String\n\n        // MARK: - Init\n\n        public init(buildConfiguration: String) {\n            self.buildConfiguration = buildConfiguration\n        }\n\n        init(element: AEXMLElement) throws {\n            buildConfiguration = element.attributes[\"buildConfiguration\"] ?? AnalyzeAction.defaultBuildConfiguration\n        }\n\n        // MARK: - XML\n\n        func xmlElement() -> AEXMLElement {\n            var attributes: [String: String] = [:]\n            attributes[\"buildConfiguration\"] = buildConfiguration\n            return AEXMLElement(name: \"AnalyzeAction\", value: nil, attributes: attributes)\n        }\n\n        // MARK: - Equatable\n\n        public static func == (lhs: AnalyzeAction, rhs: AnalyzeAction) -> Bool {\n            return lhs.buildConfiguration == rhs.buildConfiguration\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+ArchiveAction.swift",
    "content": "import AEXML\nimport Foundation\nimport PathKit\n\nextension XCScheme {\n    public final class ArchiveAction: SerialAction {\n        // MARK: - Static\n\n        private static let defaultBuildConfiguration = \"Release\"\n\n        // MARK: - Attributes\n\n        public var buildConfiguration: String\n        public var revealArchiveInOrganizer: Bool\n        public var customArchiveName: String?\n\n        // MARK: - Init\n\n        public init(buildConfiguration: String,\n                    revealArchiveInOrganizer: Bool,\n                    customArchiveName: String? = nil,\n                    preActions: [ExecutionAction] = [],\n                    postActions: [ExecutionAction] = []) {\n            self.buildConfiguration = buildConfiguration\n            self.revealArchiveInOrganizer = revealArchiveInOrganizer\n            self.customArchiveName = customArchiveName\n            super.init(preActions, postActions)\n        }\n\n        override init(element: AEXMLElement) throws {\n            buildConfiguration = element.attributes[\"buildConfiguration\"] ?? ArchiveAction.defaultBuildConfiguration\n            revealArchiveInOrganizer = element.attributes[\"revealArchiveInOrganizer\"].map { $0 == \"YES\" } ?? true\n            customArchiveName = element.attributes[\"customArchiveName\"]\n            try super.init(element: element)\n        }\n\n        // MARK: - XML\n\n        func xmlElement() -> AEXMLElement {\n            var attributes: [String: String] = [:]\n            attributes[\"buildConfiguration\"] = buildConfiguration\n            attributes[\"customArchiveName\"] = customArchiveName\n            attributes[\"revealArchiveInOrganizer\"] = revealArchiveInOrganizer.xmlString\n            let element = AEXMLElement(name: \"ArchiveAction\", value: nil, attributes: attributes)\n            super.writeXML(parent: element)\n            return element\n        }\n\n        // MARK: - Equatable\n\n        override func isEqual(to: Any?) -> Bool {\n            guard let rhs = to as? ArchiveAction else { return false }\n            return super.isEqual(to: to) &&\n                buildConfiguration == rhs.buildConfiguration &&\n                revealArchiveInOrganizer == rhs.revealArchiveInOrganizer &&\n                customArchiveName == rhs.customArchiveName\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+BuildAction.swift",
    "content": "import AEXML\nimport Foundation\nimport PathKit\n\nextension XCScheme {\n    public final class BuildAction: SerialAction {\n        public final class Entry: Equatable {\n            public enum BuildFor {\n                case running, testing, profiling, archiving, analyzing\n                public static var `default`: [BuildFor] = [.running, .testing, .archiving, .analyzing]\n                public static var indexing: [BuildFor] = [.testing, .analyzing, .archiving]\n                public static var testOnly: [BuildFor] = [.testing, .analyzing]\n            }\n\n            // MARK: - Attributes\n\n            public var buildableReference: BuildableReference\n            public var buildFor: [BuildFor]\n\n            // MARK: - Init\n\n            public init(buildableReference: BuildableReference,\n                        buildFor: [BuildFor]) {\n                self.buildableReference = buildableReference\n                self.buildFor = buildFor\n            }\n\n            init(element: AEXMLElement) throws {\n                var buildFor: [BuildFor] = []\n                if (element.attributes[\"buildForTesting\"].map { $0 == \"YES\" }) ?? true {\n                    buildFor.append(.testing)\n                }\n                if (element.attributes[\"buildForRunning\"].map { $0 == \"YES\" }) ?? true {\n                    buildFor.append(.running)\n                }\n                if (element.attributes[\"buildForProfiling\"].map { $0 == \"YES\" }) ?? true {\n                    buildFor.append(.profiling)\n                }\n                if (element.attributes[\"buildForArchiving\"].map { $0 == \"YES\" }) ?? true {\n                    buildFor.append(.archiving)\n                }\n                if (element.attributes[\"buildForAnalyzing\"].map { $0 == \"YES\" }) ?? true {\n                    buildFor.append(.analyzing)\n                }\n                self.buildFor = buildFor\n                buildableReference = try BuildableReference(element: element[\"BuildableReference\"])\n            }\n\n            // MARK: - XML\n\n            fileprivate func xmlElement() -> AEXMLElement {\n                var attributes: [String: String] = [:]\n                attributes[\"buildForTesting\"] = buildFor.contains(.testing) ? \"YES\" : \"NO\"\n                attributes[\"buildForRunning\"] = buildFor.contains(.running) ? \"YES\" : \"NO\"\n                attributes[\"buildForProfiling\"] = buildFor.contains(.profiling) ? \"YES\" : \"NO\"\n                attributes[\"buildForArchiving\"] = buildFor.contains(.archiving) ? \"YES\" : \"NO\"\n                attributes[\"buildForAnalyzing\"] = buildFor.contains(.analyzing) ? \"YES\" : \"NO\"\n                let element = AEXMLElement(name: \"BuildActionEntry\",\n                                           value: nil,\n                                           attributes: attributes)\n                element.addChild(buildableReference.xmlElement())\n                return element\n            }\n\n            // MARK: - Equatable\n\n            public static func == (lhs: Entry, rhs: Entry) -> Bool {\n                return lhs.buildableReference == rhs.buildableReference &&\n                    lhs.buildFor == rhs.buildFor\n            }\n        }\n\n        // MARK: - Attributes\n\n        public var buildActionEntries: [Entry]\n        public var parallelizeBuild: Bool\n        public var buildImplicitDependencies: Bool\n\n        // MARK: - Init\n\n        public init(buildActionEntries: [Entry] = [],\n                    preActions: [ExecutionAction] = [],\n                    postActions: [ExecutionAction] = [],\n                    parallelizeBuild: Bool = false,\n                    buildImplicitDependencies: Bool = false) {\n            self.buildActionEntries = buildActionEntries\n            self.parallelizeBuild = parallelizeBuild\n            self.buildImplicitDependencies = buildImplicitDependencies\n            super.init(preActions, postActions)\n        }\n\n        override init(element: AEXMLElement) throws {\n            parallelizeBuild = element.attributes[\"parallelizeBuildables\"].map { $0 == \"YES\" } ?? true\n            buildImplicitDependencies = element.attributes[\"buildImplicitDependencies\"].map { $0 == \"YES\" } ?? true\n            buildActionEntries = try element[\"BuildActionEntries\"][\"BuildActionEntry\"]\n                .all?\n                .map(Entry.init) ?? []\n            try super.init(element: element)\n        }\n\n        // MARK: - Helpers\n\n        public func add(buildActionEntry: Entry) -> BuildAction {\n            var buildActionEntries = self.buildActionEntries\n            buildActionEntries.append(buildActionEntry)\n            return BuildAction(buildActionEntries: buildActionEntries,\n                               parallelizeBuild: parallelizeBuild)\n        }\n\n        // MARK: - XML\n\n        func xmlElement() -> AEXMLElement {\n            let element = AEXMLElement(name: \"BuildAction\",\n                                       value: nil,\n                                       attributes: [\n                                           \"parallelizeBuildables\": parallelizeBuild.xmlString,\n                                           \"buildImplicitDependencies\": buildImplicitDependencies.xmlString,\n            ])\n            super.writeXML(parent: element)\n            let entries = element.addChild(name: \"BuildActionEntries\")\n            buildActionEntries.forEach { entry in\n                entries.addChild(entry.xmlElement())\n            }\n            return element\n        }\n\n        // MARK: - Equatable\n\n        override func isEqual(to: Any?) -> Bool {\n            guard let rhs = to as? BuildAction else { return false }\n            return super.isEqual(to: to) &&\n                buildActionEntries == rhs.buildActionEntries &&\n                parallelizeBuild == rhs.parallelizeBuild &&\n                buildImplicitDependencies == rhs.buildImplicitDependencies\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+BuildableProductRunnable.swift",
    "content": "import AEXML\nimport Foundation\n\nextension XCScheme {\n    public final class BuildableProductRunnable: Equatable {\n        // MARK: - Attributes\n\n        public var runnableDebuggingMode: String\n        public var buildableReference: BuildableReference\n\n        // MARK: - Init\n\n        public init(buildableReference: BuildableReference,\n                    runnableDebuggingMode: String = \"0\") {\n            self.buildableReference = buildableReference\n            self.runnableDebuggingMode = runnableDebuggingMode\n        }\n\n        init(element: AEXMLElement) throws {\n            runnableDebuggingMode = element.attributes[\"runnableDebuggingMode\"] ?? \"0\"\n            buildableReference = try BuildableReference(element: element[\"BuildableReference\"])\n        }\n\n        // MARK: - XML\n\n        func xmlElement() -> AEXMLElement {\n            let element = AEXMLElement(name: \"BuildableProductRunnable\",\n                                       value: nil,\n                                       attributes: [\"runnableDebuggingMode\": runnableDebuggingMode])\n            element.addChild(buildableReference.xmlElement())\n            return element\n        }\n\n        // MARK: - Equatable\n\n        public static func == (lhs: BuildableProductRunnable, rhs: BuildableProductRunnable) -> Bool {\n            return lhs.runnableDebuggingMode == rhs.runnableDebuggingMode &&\n                lhs.buildableReference == rhs.buildableReference\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+BuildableReference.swift",
    "content": "import AEXML\nimport Foundation\n\nextension XCScheme {\n    public final class BuildableReference: Equatable {\n        // MARK: - Attributes\n\n        public var referencedContainer: String\n\n        private enum Blueprint: Equatable {\n            case reference(PBXObjectReference)\n            case string(String)\n\n            var string: String {\n                switch self {\n                case let .reference(object): return object.value\n                case let .string(string): return string\n                }\n            }\n        }\n\n        public func setBlueprint(_ object: PBXObject) {\n            blueprint = .reference(object.reference)\n        }\n\n        private var blueprint: Blueprint\n        public var blueprintIdentifier: String {\n            return blueprint.string\n        }\n\n        public var buildableName: String\n        public var buildableIdentifier: String\n        public var blueprintName: String\n\n        // MARK: - Init\n\n        public init(referencedContainer: String,\n                    blueprint: PBXObject,\n                    buildableName: String,\n                    blueprintName: String,\n                    buildableIdentifier: String = \"primary\") {\n            self.referencedContainer = referencedContainer\n            self.blueprint = .reference(blueprint.reference)\n            self.buildableName = buildableName\n            self.buildableIdentifier = buildableIdentifier\n            self.blueprintName = blueprintName\n        }\n\n        // MARK: - XML\n\n        init(element: AEXMLElement) throws {\n            guard let buildableIdentifier = element.attributes[\"BuildableIdentifier\"] else {\n                throw XCSchemeError.missing(property: \"BuildableIdentifier\")\n            }\n            guard let blueprintIdentifier = element.attributes[\"BlueprintIdentifier\"] else {\n                throw XCSchemeError.missing(property: \"BlueprintIdentifier\")\n            }\n            guard let buildableName = element.attributes[\"BuildableName\"] else {\n                throw XCSchemeError.missing(property: \"BuildableName\")\n            }\n            guard let blueprintName = element.attributes[\"BlueprintName\"] else {\n                throw XCSchemeError.missing(property: \"BlueprintName\")\n            }\n            guard let referencedContainer = element.attributes[\"ReferencedContainer\"] else {\n                throw XCSchemeError.missing(property: \"ReferencedContainer\")\n            }\n            self.buildableIdentifier = buildableIdentifier\n            blueprint = .string(blueprintIdentifier)\n            self.buildableName = buildableName\n            self.blueprintName = blueprintName\n            self.referencedContainer = referencedContainer\n        }\n\n        func xmlElement() -> AEXMLElement {\n            return AEXMLElement(name: \"BuildableReference\",\n                                value: nil,\n                                attributes: [\n                                    \"BuildableIdentifier\": buildableIdentifier,\n                                    \"BlueprintIdentifier\": blueprint.string,\n                                    \"BuildableName\": buildableName,\n                                    \"BlueprintName\": blueprintName,\n                                    \"ReferencedContainer\": referencedContainer,\n            ])\n        }\n\n        // MARK: - Equatable\n\n        public static func == (lhs: BuildableReference, rhs: BuildableReference) -> Bool {\n            return lhs.referencedContainer == rhs.referencedContainer &&\n                lhs.blueprintIdentifier == rhs.blueprintIdentifier &&\n                lhs.buildableName == rhs.buildableName &&\n                lhs.blueprint == rhs.blueprint &&\n                lhs.blueprintName == rhs.blueprintName\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+CommandLineArguments.swift",
    "content": "import AEXML\nimport Foundation\n\nextension XCScheme {\n    public final class CommandLineArguments: Equatable {\n        // MARK: - Attributes\n\n        public let arguments: [CommandLineArgument]\n\n        // MARK: - Init\n\n        public init(arguments args: [CommandLineArgument]) {\n            arguments = args\n        }\n\n        init(element: AEXMLElement) throws {\n            arguments = try element.children.map { elt in\n                guard let argName = elt.attributes[\"argument\"] else {\n                    throw XCSchemeError.missing(property: \"argument\")\n                }\n                guard let argEnabledRaw = elt.attributes[\"isEnabled\"] else {\n                    throw XCSchemeError.missing(property: \"isEnabled\")\n                }\n                return CommandLineArgument(name: argName, enabled: argEnabledRaw == \"YES\")\n            }\n        }\n\n        // MARK: - XML\n\n        func xmlElement() -> AEXMLElement {\n            let element = AEXMLElement(name: \"CommandLineArguments\",\n                                       value: nil)\n            arguments.forEach { arg in\n                element.addChild(arg.xmlElement())\n            }\n            return element\n        }\n\n        // MARK: - Equatable\n\n        public static func == (lhs: CommandLineArguments, rhs: CommandLineArguments) -> Bool {\n            return lhs.arguments == rhs.arguments\n        }\n    }\n}\n\nextension XCScheme.CommandLineArguments {\n    public struct CommandLineArgument: Equatable {\n        // MARK: - Attributes\n\n        public let name: String\n        public let enabled: Bool\n\n        // MARK: - Init\n\n        public init(name: String, enabled: Bool) {\n            self.name = name\n            self.enabled = enabled\n        }\n\n        // MARK: - XML\n\n        func xmlElement() -> AEXMLElement {\n            return AEXMLElement(name: \"CommandLineArgument\",\n                                value: nil,\n                                attributes: [\"argument\": name, \"isEnabled\": enabled ? \"YES\" : \"NO\"])\n        }\n\n        // MARK: - Equatable\n\n        public static func == (lhs: CommandLineArgument, rhs: CommandLineArgument) -> Bool {\n            return lhs.name == rhs.name &&\n                lhs.enabled == rhs.enabled\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+EnvironmentVariable.swift",
    "content": "import AEXML\nimport Foundation\n\nextension XCScheme {\n    public struct EnvironmentVariable: Equatable {\n        // MARK: - Attributes\n\n        public let variable: String\n        public let value: String\n        public let enabled: Bool\n\n        // MARK: - Init\n\n        public init(variable: String, value: String, enabled: Bool) {\n            self.variable = variable\n            self.value = value\n            self.enabled = enabled\n        }\n\n        // MARK: - XML\n\n        func xmlElement() -> AEXMLElement {\n            return AEXMLElement(name: \"EnvironmentVariable\",\n                                value: nil,\n                                attributes: [\"key\": variable, \"value\": value, \"isEnabled\": enabled ? \"YES\" : \"NO\"])\n        }\n\n        static func parseVariables(from element: AEXMLElement) throws -> [EnvironmentVariable] {\n            return try element.children.map { elt in\n                guard let variableKey = elt.attributes[\"key\"] else {\n                    throw XCSchemeError.missing(property: \"key\")\n                }\n                guard let variableValue = elt.attributes[\"value\"] else {\n                    throw XCSchemeError.missing(property: \"value\")\n                }\n                guard let variableEnabledRaw = elt.attributes[\"isEnabled\"] else {\n                    throw XCSchemeError.missing(property: \"isEnabled\")\n                }\n\n                return EnvironmentVariable(variable: variableKey, value: variableValue, enabled: variableEnabledRaw == \"YES\")\n            }\n        }\n\n        static func xmlElement(from variables: [EnvironmentVariable]) -> AEXMLElement {\n            let element = AEXMLElement(name: \"EnvironmentVariables\",\n                                       value: nil)\n            variables.forEach { arg in\n                element.addChild(arg.xmlElement())\n            }\n\n            return element\n        }\n\n        // MARK: - Equatable\n\n        public static func == (lhs: EnvironmentVariable, rhs: EnvironmentVariable) -> Bool {\n            return lhs.variable == rhs.variable &&\n                lhs.value == rhs.value &&\n                lhs.enabled == rhs.enabled\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+ExecutionAction.swift",
    "content": "import AEXML\nimport Foundation\n\nextension XCScheme {\n    public final class ExecutionAction: Equatable {\n        private static let ActionType = \"Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction\"\n\n        // MARK: - Attributes\n\n        public var title: String\n        public var scriptText: String\n        public var environmentBuildable: BuildableReference?\n\n        // MARK: - Init\n\n        public init(scriptText: String, title: String = \"Run Script\", environmentBuildable: BuildableReference? = nil) {\n            self.scriptText = scriptText\n            self.title = title\n            self.environmentBuildable = environmentBuildable\n        }\n\n        init(element: AEXMLElement) throws {\n            scriptText = element[\"ActionContent\"].attributes[\"scriptText\"] ?? \"\"\n            title = element[\"ActionContent\"].attributes[\"title\"] ?? \"Run Script\"\n            environmentBuildable = try? BuildableReference(element: element[\"ActionContent\"][\"EnvironmentBuildable\"][\"BuildableReference\"])\n        }\n\n        // MARK: - XML\n\n        func xmlElement() -> AEXMLElement {\n            let element = AEXMLElement(name: \"ExecutionAction\",\n                                       value: nil,\n                                       attributes: [\"ActionType\": ExecutionAction.ActionType])\n            let content = AEXMLElement(name: \"ActionContent\",\n                                       value: nil,\n                                       attributes: [\n                                           \"title\": title,\n                                           \"scriptText\": scriptText,\n            ])\n            element.addChild(content)\n            if let environmentBuildable = environmentBuildable {\n                let environment = content.addChild(name: \"EnvironmentBuildable\")\n                environment.addChild(environmentBuildable.xmlElement())\n            }\n            return element\n        }\n\n        // MARK: - Equatable\n\n        public static func == (lhs: ExecutionAction, rhs: ExecutionAction) -> Bool {\n            return lhs.title == rhs.title &&\n                lhs.scriptText == rhs.scriptText &&\n                lhs.environmentBuildable == rhs.environmentBuildable\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+LaunchAction.swift",
    "content": "import AEXML\nimport Foundation\nimport PathKit\n\nextension XCScheme {\n    // swiftlint:disable:next type_body_length\n    public final class LaunchAction: SerialAction {\n        public enum Style: String {\n            case auto = \"0\"\n            case wait = \"1\"\n        }\n\n        public enum GPUFrameCaptureMode: String {\n            case autoEnabled = \"0\"\n            case metal = \"1\"\n            case openGL = \"2\"\n            case disabled = \"3\"\n        }\n\n        public enum GPUValidationMode: String {\n            case enabled = \"0\"\n            case disabled = \"1\"\n            case extended = \"2\"\n        }\n\n        // MARK: - Static\n\n        private static let defaultBuildConfiguration = \"Debug\"\n        public static let defaultDebugServiceExtension = \"internal\"\n        private static let defaultLaunchStyle = Style.auto\n        public static let defaultGPUFrameCaptureMode = GPUFrameCaptureMode.autoEnabled\n        public static let defaultGPUValidationMode = GPUValidationMode.enabled\n\n        // MARK: - Attributes\n\n        public var buildableProductRunnable: BuildableProductRunnable?\n        public var macroExpansion: BuildableReference?\n        public var selectedDebuggerIdentifier: String\n        public var selectedLauncherIdentifier: String\n        public var buildConfiguration: String\n        public var launchStyle: Style\n        public var useCustomWorkingDirectory: Bool\n        public var ignoresPersistentStateOnLaunch: Bool\n        public var debugDocumentVersioning: Bool\n        public var debugServiceExtension: String\n        public var allowLocationSimulation: Bool\n        public var locationScenarioReference: LocationScenarioReference?\n        public var enableGPUFrameCaptureMode: GPUFrameCaptureMode\n        public var enableGPUValidationMode: GPUValidationMode\n        public var enableAddressSanitizer: Bool\n        public var enableASanStackUseAfterReturn: Bool\n        public var enableThreadSanitizer: Bool\n        public var stopOnEveryThreadSanitizerIssue: Bool\n        public var enableUBSanitizer: Bool\n        public var stopOnEveryUBSanitizerIssue: Bool\n        public var disableMainThreadChecker: Bool\n        public var stopOnEveryMainThreadCheckerIssue: Bool\n        public var additionalOptions: [AdditionalOption]\n        public var commandlineArguments: CommandLineArguments?\n        public var environmentVariables: [EnvironmentVariable]?\n        public var language: String?\n        public var region: String?\n        public var launchAutomaticallySubstyle: String?\n\n        // MARK: - Init\n\n        public init(buildableProductRunnable: BuildableProductRunnable?,\n                    buildConfiguration: String,\n                    preActions: [ExecutionAction] = [],\n                    postActions: [ExecutionAction] = [],\n                    macroExpansion: BuildableReference? = nil,\n                    selectedDebuggerIdentifier: String = XCScheme.defaultDebugger,\n                    selectedLauncherIdentifier: String = XCScheme.defaultLauncher,\n                    launchStyle: Style = .auto,\n                    useCustomWorkingDirectory: Bool = false,\n                    ignoresPersistentStateOnLaunch: Bool = false,\n                    debugDocumentVersioning: Bool = true,\n                    debugServiceExtension: String = LaunchAction.defaultDebugServiceExtension,\n                    allowLocationSimulation: Bool = true,\n                    locationScenarioReference: LocationScenarioReference? = nil,\n                    enableGPUFrameCaptureMode: GPUFrameCaptureMode = LaunchAction.defaultGPUFrameCaptureMode,\n                    enableGPUValidationMode: GPUValidationMode = LaunchAction.defaultGPUValidationMode,\n                    enableAddressSanitizer: Bool = false,\n                    enableASanStackUseAfterReturn: Bool = false,\n                    enableThreadSanitizer: Bool = false,\n                    stopOnEveryThreadSanitizerIssue: Bool = false,\n                    enableUBSanitizer: Bool = false,\n                    stopOnEveryUBSanitizerIssue: Bool = false,\n                    disableMainThreadChecker: Bool = false,\n                    stopOnEveryMainThreadCheckerIssue: Bool = false,\n                    additionalOptions: [AdditionalOption] = [],\n                    commandlineArguments: CommandLineArguments? = nil,\n                    environmentVariables: [EnvironmentVariable]? = nil,\n                    language: String? = nil,\n                    region: String? = nil,\n                    launchAutomaticallySubstyle: String? = nil) {\n            self.buildableProductRunnable = buildableProductRunnable\n            self.macroExpansion = macroExpansion\n            self.buildConfiguration = buildConfiguration\n            self.launchStyle = launchStyle\n            self.selectedDebuggerIdentifier = selectedDebuggerIdentifier\n            self.selectedLauncherIdentifier = selectedLauncherIdentifier\n            self.useCustomWorkingDirectory = useCustomWorkingDirectory\n            self.ignoresPersistentStateOnLaunch = ignoresPersistentStateOnLaunch\n            self.debugDocumentVersioning = debugDocumentVersioning\n            self.debugServiceExtension = debugServiceExtension\n            self.allowLocationSimulation = allowLocationSimulation\n            self.locationScenarioReference = locationScenarioReference\n            self.enableGPUFrameCaptureMode = enableGPUFrameCaptureMode\n            self.enableGPUValidationMode = enableGPUValidationMode\n            self.enableAddressSanitizer = enableAddressSanitizer\n            self.enableASanStackUseAfterReturn = enableASanStackUseAfterReturn\n            self.enableThreadSanitizer = enableThreadSanitizer\n            self.stopOnEveryThreadSanitizerIssue = stopOnEveryThreadSanitizerIssue\n            self.enableUBSanitizer = enableUBSanitizer\n            self.stopOnEveryUBSanitizerIssue = stopOnEveryUBSanitizerIssue\n            self.disableMainThreadChecker = disableMainThreadChecker\n            self.stopOnEveryMainThreadCheckerIssue = stopOnEveryMainThreadCheckerIssue\n            self.additionalOptions = additionalOptions\n            self.commandlineArguments = commandlineArguments\n            self.environmentVariables = environmentVariables\n            self.language = language\n            self.region = region\n            self.launchAutomaticallySubstyle = launchAutomaticallySubstyle\n            super.init(preActions, postActions)\n        }\n\n        // swiftlint:disable:next function_body_length\n        override init(element: AEXMLElement) throws {\n            buildConfiguration = element.attributes[\"buildConfiguration\"] ?? LaunchAction.defaultBuildConfiguration\n            selectedDebuggerIdentifier = element.attributes[\"selectedDebuggerIdentifier\"] ?? XCScheme.defaultDebugger\n            selectedLauncherIdentifier = element.attributes[\"selectedLauncherIdentifier\"] ?? XCScheme.defaultLauncher\n            launchStyle = element.attributes[\"launchStyle\"].flatMap { Style(rawValue: $0) } ?? .auto\n            useCustomWorkingDirectory = element.attributes[\"useCustomWorkingDirectory\"] == \"YES\"\n            ignoresPersistentStateOnLaunch = element.attributes[\"ignoresPersistentStateOnLaunch\"] == \"YES\"\n            debugDocumentVersioning = element.attributes[\"debugDocumentVersioning\"].map { $0 == \"YES\" } ?? true\n            debugServiceExtension = element.attributes[\"debugServiceExtension\"] ?? LaunchAction.defaultDebugServiceExtension\n            allowLocationSimulation = element.attributes[\"allowLocationSimulation\"].map { $0 == \"YES\" } ?? true\n\n            let buildableProductRunnableElement = element[\"BuildableProductRunnable\"]\n            if buildableProductRunnableElement.error == nil {\n                buildableProductRunnable = try BuildableProductRunnable(element: buildableProductRunnableElement)\n            }\n            let buildableReferenceElement = element[\"MacroExpansion\"][\"BuildableReference\"]\n            if buildableReferenceElement.error == nil {\n                macroExpansion = try BuildableReference(element: buildableReferenceElement)\n            }\n\n            if element[\"LocationScenarioReference\"].all?.first != nil {\n                locationScenarioReference = try LocationScenarioReference(element: element[\"LocationScenarioReference\"])\n            } else {\n                locationScenarioReference = nil\n            }\n\n            enableGPUFrameCaptureMode = element.attributes[\"enableGPUFrameCaptureMode\"]\n                .flatMap { GPUFrameCaptureMode(rawValue: $0) } ?? LaunchAction.defaultGPUFrameCaptureMode\n            enableGPUValidationMode = element.attributes[\"enableGPUValidationMode\"]\n                .flatMap { GPUValidationMode(rawValue: $0) } ?? LaunchAction.defaultGPUValidationMode\n            enableAddressSanitizer = element.attributes[\"enableAddressSanitizer\"] == \"YES\"\n            enableASanStackUseAfterReturn = element.attributes[\"enableASanStackUseAfterReturn\"] == \"YES\"\n            enableThreadSanitizer = element.attributes[\"enableThreadSanitizer\"] == \"YES\"\n            stopOnEveryThreadSanitizerIssue = element.attributes[\"stopOnEveryThreadSanitizerIssue\"] == \"YES\"\n            enableUBSanitizer = element.attributes[\"enableUBSanitizer\"] == \"YES\"\n            stopOnEveryUBSanitizerIssue = element.attributes[\"stopOnEveryUBSanitizerIssue\"] == \"YES\"\n            disableMainThreadChecker = element.attributes[\"disableMainThreadChecker\"] == \"YES\"\n            stopOnEveryMainThreadCheckerIssue = element.attributes[\"stopOnEveryMainThreadCheckerIssue\"] == \"YES\"\n\n            additionalOptions = try element[\"AdditionalOptions\"][\"AdditionalOption\"]\n                .all?\n                .map(AdditionalOption.init) ?? []\n\n            let commandlineOptions = element[\"CommandLineArguments\"]\n            if commandlineOptions.error == nil {\n                commandlineArguments = try CommandLineArguments(element: commandlineOptions)\n            }\n\n            let environmentVariables = element[\"EnvironmentVariables\"]\n            if environmentVariables.error == nil {\n                self.environmentVariables = try EnvironmentVariable.parseVariables(from: environmentVariables)\n            }\n\n            language = element.attributes[\"language\"]\n            region = element.attributes[\"region\"]\n            launchAutomaticallySubstyle = element.attributes[\"launchAutomaticallySubstyle\"]\n            try super.init(element: element)\n        }\n\n        // MARK: - XML\n\n        private var xmlAttributes: [String: String] {\n            var attributes = [\n                \"buildConfiguration\": buildConfiguration,\n                \"selectedDebuggerIdentifier\": selectedDebuggerIdentifier,\n                \"selectedLauncherIdentifier\": selectedLauncherIdentifier,\n                \"launchStyle\": launchStyle.rawValue,\n                \"useCustomWorkingDirectory\": useCustomWorkingDirectory.xmlString,\n                \"ignoresPersistentStateOnLaunch\": ignoresPersistentStateOnLaunch.xmlString,\n                \"debugDocumentVersioning\": debugDocumentVersioning.xmlString,\n                \"debugServiceExtension\": debugServiceExtension,\n                \"allowLocationSimulation\": allowLocationSimulation.xmlString,\n            ]\n\n            if enableGPUFrameCaptureMode != LaunchAction.defaultGPUFrameCaptureMode {\n                attributes[\"enableGPUFrameCaptureMode\"] = enableGPUFrameCaptureMode.rawValue\n            }\n            if enableGPUValidationMode != LaunchAction.defaultGPUValidationMode {\n                attributes[\"enableGPUValidationMode\"] = enableGPUValidationMode.rawValue\n            }\n            if enableAddressSanitizer {\n                attributes[\"enableAddressSanitizer\"] = enableAddressSanitizer.xmlString\n            }\n            if enableASanStackUseAfterReturn {\n                attributes[\"enableASanStackUseAfterReturn\"] = enableASanStackUseAfterReturn.xmlString\n            }\n            if enableThreadSanitizer {\n                attributes[\"enableThreadSanitizer\"] = enableThreadSanitizer.xmlString\n            }\n            if stopOnEveryThreadSanitizerIssue {\n                attributes[\"stopOnEveryThreadSanitizerIssue\"] = stopOnEveryThreadSanitizerIssue.xmlString\n            }\n            if enableUBSanitizer {\n                attributes[\"enableUBSanitizer\"] = enableUBSanitizer.xmlString\n            }\n            if stopOnEveryUBSanitizerIssue {\n                attributes[\"stopOnEveryUBSanitizerIssue\"] = stopOnEveryUBSanitizerIssue.xmlString\n            }\n            if disableMainThreadChecker {\n                attributes[\"disableMainThreadChecker\"] = disableMainThreadChecker.xmlString\n            }\n            if stopOnEveryMainThreadCheckerIssue {\n                attributes[\"stopOnEveryMainThreadCheckerIssue\"] = stopOnEveryMainThreadCheckerIssue.xmlString\n            }\n\n            return attributes\n        }\n\n        func xmlElement() -> AEXMLElement {\n            let element = AEXMLElement(name: \"LaunchAction\",\n                                       value: nil,\n                                       attributes: xmlAttributes)\n            super.writeXML(parent: element)\n            if let buildableProductRunnable = buildableProductRunnable {\n                element.addChild(buildableProductRunnable.xmlElement())\n            }\n\n            if let locationScenarioReference = locationScenarioReference {\n                element.addChild(locationScenarioReference.xmlElement())\n            }\n\n            if let macroExpansion = macroExpansion {\n                let macro = element.addChild(name: \"MacroExpansion\")\n                macro.addChild(macroExpansion.xmlElement())\n            }\n\n            if let commandlineArguments = commandlineArguments {\n                element.addChild(commandlineArguments.xmlElement())\n            }\n\n            if let environmentVariables = environmentVariables {\n                element.addChild(EnvironmentVariable.xmlElement(from: environmentVariables))\n            }\n\n            if let language = language {\n                element.attributes[\"language\"] = language\n            }\n\n            if let region = region {\n                element.attributes[\"region\"] = region\n            }\n            if let launchAutomaticallySubstyle = launchAutomaticallySubstyle {\n                element.attributes[\"launchAutomaticallySubstyle\"] = launchAutomaticallySubstyle\n            }\n\n            let additionalOptionsElement = element.addChild(AEXMLElement(name: \"AdditionalOptions\"))\n            additionalOptions.forEach { additionalOption in\n                additionalOptionsElement.addChild(additionalOption.xmlElement())\n            }\n            return element\n        }\n\n        // MARK: - Equatable\n\n        override func isEqual(to: Any?) -> Bool {\n            guard let rhs = to as? LaunchAction else { return false }\n            return super.isEqual(to: to) &&\n                buildableProductRunnable == rhs.buildableProductRunnable &&\n                macroExpansion == rhs.macroExpansion &&\n                selectedDebuggerIdentifier == rhs.selectedDebuggerIdentifier &&\n                selectedLauncherIdentifier == rhs.selectedLauncherIdentifier &&\n                buildConfiguration == rhs.buildConfiguration &&\n                launchStyle == rhs.launchStyle &&\n                useCustomWorkingDirectory == rhs.useCustomWorkingDirectory &&\n                ignoresPersistentStateOnLaunch == rhs.ignoresPersistentStateOnLaunch &&\n                debugDocumentVersioning == rhs.debugDocumentVersioning &&\n                debugServiceExtension == rhs.debugServiceExtension &&\n                allowLocationSimulation == rhs.allowLocationSimulation &&\n                locationScenarioReference == rhs.locationScenarioReference &&\n                enableGPUFrameCaptureMode == rhs.enableGPUFrameCaptureMode &&\n                enableGPUValidationMode == rhs.enableGPUValidationMode &&\n                enableAddressSanitizer == rhs.enableAddressSanitizer &&\n                enableASanStackUseAfterReturn == rhs.enableASanStackUseAfterReturn &&\n                enableThreadSanitizer == rhs.enableThreadSanitizer &&\n                stopOnEveryThreadSanitizerIssue == rhs.stopOnEveryThreadSanitizerIssue &&\n                enableUBSanitizer == rhs.enableUBSanitizer &&\n                stopOnEveryUBSanitizerIssue == rhs.stopOnEveryUBSanitizerIssue &&\n                disableMainThreadChecker == rhs.disableMainThreadChecker &&\n                stopOnEveryMainThreadCheckerIssue == rhs.stopOnEveryMainThreadCheckerIssue &&\n                additionalOptions == rhs.additionalOptions &&\n                commandlineArguments == rhs.commandlineArguments &&\n                environmentVariables == rhs.environmentVariables &&\n                language == rhs.language &&\n                region == rhs.region &&\n                launchAutomaticallySubstyle == rhs.launchAutomaticallySubstyle\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+LocationScenarioReference.swift",
    "content": "import AEXML\nimport Foundation\n\nextension XCScheme {\n    public final class LocationScenarioReference: Equatable {\n        // MARK: - Attributes\n\n        public var identifier: String\n        public var referenceType: String\n\n        // MARK: - Init\n\n        public init(identifier: String, referenceType: String) {\n            self.identifier = identifier\n            self.referenceType = referenceType\n        }\n\n        init(element: AEXMLElement) throws {\n            identifier = element.attributes[\"identifier\"]!\n            referenceType = element.attributes[\"referenceType\"]!\n        }\n\n        // MARK: - XML\n\n        func xmlElement() -> AEXMLElement {\n            return AEXMLElement(name: \"LocationScenarioReference\",\n                                value: nil,\n                                attributes: [\n                                    \"identifier\": identifier,\n                                    \"referenceType\": referenceType,\n            ])\n        }\n\n        // MARK: - Equatable\n\n        public static func == (lhs: LocationScenarioReference, rhs: LocationScenarioReference) -> Bool {\n            return lhs.identifier == rhs.identifier &&\n                lhs.referenceType == rhs.referenceType\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+ProfileAction.swift",
    "content": "import AEXML\nimport Foundation\nimport PathKit\n\nextension XCScheme {\n    public final class ProfileAction: SerialAction {\n        // MARK: - Static\n\n        private static let defaultBuildConfiguration = \"Release\"\n\n        // MARK: - Attributes\n\n        public var buildableProductRunnable: BuildableProductRunnable?\n        public var buildConfiguration: String\n        public var shouldUseLaunchSchemeArgsEnv: Bool\n        public var savedToolIdentifier: String\n        public var ignoresPersistentStateOnLaunch: Bool\n        public var useCustomWorkingDirectory: Bool\n        public var debugDocumentVersioning: Bool\n        public var commandlineArguments: CommandLineArguments?\n        public var environmentVariables: [EnvironmentVariable]?\n        public var macroExpansion: BuildableReference?\n        public var enableTestabilityWhenProfilingTests: Bool\n\n        // MARK: - Init\n\n        public init(buildableProductRunnable: BuildableProductRunnable?,\n                    buildConfiguration: String,\n                    preActions: [ExecutionAction] = [],\n                    postActions: [ExecutionAction] = [],\n                    macroExpansion: BuildableReference? = nil,\n                    shouldUseLaunchSchemeArgsEnv: Bool = true,\n                    savedToolIdentifier: String = \"\",\n                    ignoresPersistentStateOnLaunch: Bool = false,\n                    useCustomWorkingDirectory: Bool = false,\n                    debugDocumentVersioning: Bool = true,\n                    commandlineArguments: CommandLineArguments? = nil,\n                    environmentVariables: [EnvironmentVariable]? = nil,\n                    enableTestabilityWhenProfilingTests: Bool = true) {\n            self.buildableProductRunnable = buildableProductRunnable\n            self.buildConfiguration = buildConfiguration\n            self.macroExpansion = macroExpansion\n            self.shouldUseLaunchSchemeArgsEnv = shouldUseLaunchSchemeArgsEnv\n            self.savedToolIdentifier = savedToolIdentifier\n            self.useCustomWorkingDirectory = useCustomWorkingDirectory\n            self.debugDocumentVersioning = debugDocumentVersioning\n            self.commandlineArguments = commandlineArguments\n            self.environmentVariables = environmentVariables\n            self.ignoresPersistentStateOnLaunch = ignoresPersistentStateOnLaunch\n            self.enableTestabilityWhenProfilingTests = enableTestabilityWhenProfilingTests\n            super.init(preActions, postActions)\n        }\n\n        override init(element: AEXMLElement) throws {\n            buildConfiguration = element.attributes[\"buildConfiguration\"] ?? ProfileAction.defaultBuildConfiguration\n            shouldUseLaunchSchemeArgsEnv = element.attributes[\"shouldUseLaunchSchemeArgsEnv\"].map { $0 == \"YES\" } ?? true\n            savedToolIdentifier = element.attributes[\"savedToolIdentifier\"] ?? \"\"\n            useCustomWorkingDirectory = element.attributes[\"useCustomWorkingDirectory\"] == \"YES\"\n            debugDocumentVersioning = element.attributes[\"debugDocumentVersioning\"].map { $0 == \"YES\" } ?? true\n            ignoresPersistentStateOnLaunch = element.attributes[\"ignoresPersistentStateOnLaunch\"].map { $0 == \"YES\" } ?? false\n\n            let buildableProductRunnableElement = element[\"BuildableProductRunnable\"]\n            if buildableProductRunnableElement.error == nil {\n                buildableProductRunnable = try BuildableProductRunnable(element: buildableProductRunnableElement)\n            }\n            let buildableReferenceElement = element[\"MacroExpansion\"][\"BuildableReference\"]\n            if buildableReferenceElement.error == nil {\n                macroExpansion = try BuildableReference(element: buildableReferenceElement)\n            }\n            let commandlineOptions = element[\"CommandLineArguments\"]\n            if commandlineOptions.error == nil {\n                commandlineArguments = try CommandLineArguments(element: commandlineOptions)\n            }\n            let environmentVariables = element[\"EnvironmentVariables\"]\n            if environmentVariables.error == nil {\n                self.environmentVariables = try EnvironmentVariable.parseVariables(from: environmentVariables)\n            }\n            enableTestabilityWhenProfilingTests = element.attributes[\"enableTestabilityWhenProfilingTests\"].map { $0 != \"No\" } ?? true\n            try super.init(element: element)\n        }\n\n        // MARK: - XML\n\n        func xmlElement() -> AEXMLElement {\n            let element = AEXMLElement(name: \"ProfileAction\",\n                                       value: nil,\n                                       attributes: [\n                                           \"buildConfiguration\": buildConfiguration,\n                                           \"shouldUseLaunchSchemeArgsEnv\": shouldUseLaunchSchemeArgsEnv.xmlString,\n                                           \"savedToolIdentifier\": savedToolIdentifier,\n                                           \"useCustomWorkingDirectory\": useCustomWorkingDirectory.xmlString,\n                                           \"debugDocumentVersioning\": debugDocumentVersioning.xmlString,\n            ])\n            super.writeXML(parent: element)\n            if ignoresPersistentStateOnLaunch {\n                element.attributes[\"ignoresPersistentStateOnLaunch\"] = ignoresPersistentStateOnLaunch.xmlString\n            }\n            if !enableTestabilityWhenProfilingTests {\n                element.attributes[\"enableTestabilityWhenProfilingTests\"] = \"No\"\n            }\n            if let buildableProductRunnable = buildableProductRunnable {\n                element.addChild(buildableProductRunnable.xmlElement())\n            }\n            if let commandlineArguments = commandlineArguments {\n                element.addChild(commandlineArguments.xmlElement())\n            }\n            if let environmentVariables = environmentVariables {\n                element.addChild(EnvironmentVariable.xmlElement(from: environmentVariables))\n            }\n\n            if let macroExpansion = macroExpansion {\n                let macro = element.addChild(name: \"MacroExpansion\")\n                macro.addChild(macroExpansion.xmlElement())\n            }\n\n            return element\n        }\n\n        // MARK: - Equatable\n\n        override func isEqual(to: Any?) -> Bool {\n            guard let rhs = to as? ProfileAction else { return false }\n            return super.isEqual(to: to) &&\n                buildableProductRunnable == rhs.buildableProductRunnable &&\n                buildConfiguration == rhs.buildConfiguration &&\n                shouldUseLaunchSchemeArgsEnv == rhs.shouldUseLaunchSchemeArgsEnv &&\n                savedToolIdentifier == rhs.savedToolIdentifier &&\n                ignoresPersistentStateOnLaunch == rhs.ignoresPersistentStateOnLaunch &&\n                useCustomWorkingDirectory == rhs.useCustomWorkingDirectory &&\n                debugDocumentVersioning == rhs.debugDocumentVersioning &&\n                commandlineArguments == rhs.commandlineArguments &&\n                environmentVariables == rhs.environmentVariables &&\n                macroExpansion == rhs.macroExpansion &&\n                enableTestabilityWhenProfilingTests == rhs.enableTestabilityWhenProfilingTests\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+SerialAction.swift",
    "content": "import AEXML\nimport Foundation\n\nextension XCScheme {\n    public class SerialAction: Equatable {\n        // MARK: - Attributes\n\n        public var preActions: [ExecutionAction]\n        public var postActions: [ExecutionAction]\n\n        // MARK: - Init\n\n        init(_ preActions: [ExecutionAction], _ postActions: [ExecutionAction]) {\n            self.preActions = preActions\n            self.postActions = postActions\n        }\n\n        init(element: AEXMLElement) throws {\n            preActions = try element[\"PreActions\"][\"ExecutionAction\"].all?.map(ExecutionAction.init) ?? []\n            postActions = try element[\"PostActions\"][\"ExecutionAction\"].all?.map(ExecutionAction.init) ?? []\n        }\n\n        // MARK: - XML\n\n        func writeXML(parent element: AEXMLElement) {\n            if !preActions.isEmpty {\n                let preActions = element.addChild(name: \"PreActions\")\n                self.preActions.forEach { preAction in\n                    preActions.addChild(preAction.xmlElement())\n                }\n            }\n            if !postActions.isEmpty {\n                let postActions = element.addChild(name: \"PostActions\")\n                self.postActions.forEach { postAction in\n                    postActions.addChild(postAction.xmlElement())\n                }\n            }\n        }\n\n        // MARK: - Equatable\n\n        @objc dynamic func isEqual(to: Any?) -> Bool {\n            guard let rhs = to as? SerialAction else { return false }\n            return preActions == rhs.preActions &&\n                postActions == rhs.postActions\n        }\n\n        public static func == (lhs: SerialAction, rhs: SerialAction) -> Bool {\n            return lhs.isEqual(to: rhs)\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+SkippedTests.swift",
    "content": "import AEXML\nimport Foundation\n\nextension XCScheme {\n    public final class SkippedTest: Equatable {\n        // MARK: - Attributes\n\n        public var identifier: String\n\n        // MARK: - Init\n\n        public init(identifier: String) {\n            self.identifier = identifier\n        }\n\n        init(element: AEXMLElement) throws {\n            identifier = element.attributes[\"Identifier\"]!\n        }\n\n        // MARK: - XML\n\n        func xmlElement() -> AEXMLElement {\n            return AEXMLElement(name: \"Test\",\n                                value: nil,\n                                attributes: [\"Identifier\": identifier])\n        }\n\n        // MARK: - Equatable\n\n        public static func == (lhs: SkippedTest, rhs: SkippedTest) -> Bool {\n            return lhs.identifier == rhs.identifier\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+TestAction.swift",
    "content": "import AEXML\nimport Foundation\nimport PathKit\n\nextension XCScheme {\n    public final class TestAction: SerialAction {\n        public enum AttachmentLifetime: String {\n            case keepAlways, keepNever\n        }\n\n        // MARK: - Static\n\n        private static let defaultBuildConfiguration = \"Debug\"\n\n        // MARK: - Attributes\n\n        public var testables: [TestableReference]\n        public var buildConfiguration: String\n        public var selectedDebuggerIdentifier: String\n        public var selectedLauncherIdentifier: String\n        public var shouldUseLaunchSchemeArgsEnv: Bool\n        public var codeCoverageEnabled: Bool\n        public var enableAddressSanitizer: Bool\n        public var enableASanStackUseAfterReturn: Bool\n        public var enableThreadSanitizer: Bool\n        public var enableUBSanitizer: Bool\n        public var disableMainThreadChecker: Bool\n        public var macroExpansion: BuildableReference?\n        public var additionalOptions: [AdditionalOption]\n        public var commandlineArguments: CommandLineArguments?\n        public var environmentVariables: [EnvironmentVariable]?\n        public var language: String?\n        public var region: String?\n        public var systemAttachmentLifetime: AttachmentLifetime?\n        public var userAttachmentLifetime: AttachmentLifetime?\n\n        // MARK: - Init\n\n        public init(buildConfiguration: String,\n                    macroExpansion: BuildableReference?,\n                    testables: [TestableReference] = [],\n                    preActions: [ExecutionAction] = [],\n                    postActions: [ExecutionAction] = [],\n                    selectedDebuggerIdentifier: String = XCScheme.defaultDebugger,\n                    selectedLauncherIdentifier: String = XCScheme.defaultLauncher,\n                    shouldUseLaunchSchemeArgsEnv: Bool = true,\n                    codeCoverageEnabled: Bool = false,\n                    enableAddressSanitizer: Bool = false,\n                    enableASanStackUseAfterReturn: Bool = false,\n                    enableThreadSanitizer: Bool = false,\n                    enableUBSanitizer: Bool = false,\n                    disableMainThreadChecker: Bool = false,\n                    additionalOptions: [AdditionalOption] = [],\n                    commandlineArguments: CommandLineArguments? = nil,\n                    environmentVariables: [EnvironmentVariable]? = nil,\n                    language: String? = nil,\n                    region: String? = nil,\n                    systemAttachmentLifetime: AttachmentLifetime? = nil,\n                    userAttachmentLifetime: AttachmentLifetime? = nil) {\n            self.buildConfiguration = buildConfiguration\n            self.macroExpansion = macroExpansion\n            self.testables = testables\n            self.selectedDebuggerIdentifier = selectedDebuggerIdentifier\n            self.selectedLauncherIdentifier = selectedLauncherIdentifier\n            self.shouldUseLaunchSchemeArgsEnv = shouldUseLaunchSchemeArgsEnv\n            self.codeCoverageEnabled = codeCoverageEnabled\n            self.enableAddressSanitizer = enableAddressSanitizer\n            self.enableASanStackUseAfterReturn = enableASanStackUseAfterReturn\n            self.enableThreadSanitizer = enableThreadSanitizer\n            self.enableUBSanitizer = enableUBSanitizer\n            self.disableMainThreadChecker = disableMainThreadChecker\n            self.additionalOptions = additionalOptions\n            self.commandlineArguments = commandlineArguments\n            self.environmentVariables = environmentVariables\n            self.language = language\n            self.region = region\n            self.systemAttachmentLifetime = systemAttachmentLifetime\n            self.userAttachmentLifetime = userAttachmentLifetime\n            super.init(preActions, postActions)\n        }\n\n        override init(element: AEXMLElement) throws {\n            buildConfiguration = element.attributes[\"buildConfiguration\"] ?? TestAction.defaultBuildConfiguration\n            selectedDebuggerIdentifier = element.attributes[\"selectedDebuggerIdentifier\"] ?? XCScheme.defaultDebugger\n            selectedLauncherIdentifier = element.attributes[\"selectedLauncherIdentifier\"] ?? XCScheme.defaultLauncher\n            shouldUseLaunchSchemeArgsEnv = element.attributes[\"shouldUseLaunchSchemeArgsEnv\"].map { $0 == \"YES\" } ?? true\n            codeCoverageEnabled = element.attributes[\"codeCoverageEnabled\"] == \"YES\"\n            enableAddressSanitizer = element.attributes[\"enableAddressSanitizer\"] == \"YES\"\n            enableASanStackUseAfterReturn = element.attributes[\"enableASanStackUseAfterReturn\"] == \"YES\"\n            enableThreadSanitizer = element.attributes[\"enableThreadSanitizer\"] == \"YES\"\n            enableUBSanitizer = element.attributes[\"enableUBSanitizer\"] == \"YES\"\n            disableMainThreadChecker = element.attributes[\"disableMainThreadChecker\"] == \"YES\"\n            testables = try element[\"Testables\"][\"TestableReference\"]\n                .all?\n                .map(TestableReference.init) ?? []\n\n            let buildableReferenceElement = element[\"MacroExpansion\"][\"BuildableReference\"]\n            if buildableReferenceElement.error == nil {\n                macroExpansion = try BuildableReference(element: buildableReferenceElement)\n            }\n\n            additionalOptions = try element[\"AdditionalOptions\"][\"AdditionalOption\"]\n                .all?\n                .map(AdditionalOption.init) ?? []\n\n            let commandlineOptions = element[\"CommandLineArguments\"]\n            if commandlineOptions.error == nil {\n                commandlineArguments = try CommandLineArguments(element: commandlineOptions)\n            }\n\n            let environmentVariables = element[\"EnvironmentVariables\"]\n            if environmentVariables.error == nil {\n                self.environmentVariables = try EnvironmentVariable.parseVariables(from: environmentVariables)\n            }\n\n            language = element.attributes[\"language\"]\n            region = element.attributes[\"region\"]\n\n            systemAttachmentLifetime = element.attributes[\"systemAttachmentLifetime\"]\n                .flatMap(AttachmentLifetime.init(rawValue:))\n            userAttachmentLifetime = element.attributes[\"userAttachmentLifetime\"]\n                .flatMap(AttachmentLifetime.init(rawValue:))\n            try super.init(element: element)\n        }\n\n        // MARK: - XML\n\n        func xmlElement() -> AEXMLElement {\n            var attributes: [String: String] = [:]\n            attributes[\"buildConfiguration\"] = buildConfiguration\n            attributes[\"selectedDebuggerIdentifier\"] = selectedDebuggerIdentifier\n            attributes[\"selectedLauncherIdentifier\"] = selectedLauncherIdentifier\n            if let language = language {\n                attributes[\"language\"] = language\n            }\n            attributes[\"region\"] = region\n            attributes[\"shouldUseLaunchSchemeArgsEnv\"] = shouldUseLaunchSchemeArgsEnv.xmlString\n            if codeCoverageEnabled {\n                attributes[\"codeCoverageEnabled\"] = codeCoverageEnabled.xmlString\n            }\n            if enableAddressSanitizer {\n                attributes[\"enableAddressSanitizer\"] = enableAddressSanitizer.xmlString\n            }\n            if enableASanStackUseAfterReturn {\n                attributes[\"enableASanStackUseAfterReturn\"] = enableASanStackUseAfterReturn.xmlString\n            }\n            if enableThreadSanitizer {\n                attributes[\"enableThreadSanitizer\"] = enableThreadSanitizer.xmlString\n            }\n            if enableUBSanitizer {\n                attributes[\"enableUBSanitizer\"] = enableUBSanitizer.xmlString\n            }\n            if disableMainThreadChecker {\n                attributes[\"disableMainThreadChecker\"] = disableMainThreadChecker.xmlString\n            }\n            attributes[\"systemAttachmentLifetime\"] = systemAttachmentLifetime?.rawValue\n            if case .keepAlways? = userAttachmentLifetime {\n                attributes[\"userAttachmentLifetime\"] = userAttachmentLifetime?.rawValue\n            }\n\n            let element = AEXMLElement(name: \"TestAction\", value: nil, attributes: attributes)\n            super.writeXML(parent: element)\n            let testablesElement = element.addChild(name: \"Testables\")\n            testables.forEach { testable in\n                testablesElement.addChild(testable.xmlElement())\n            }\n            if let macroExpansion = macroExpansion {\n                let macro = element.addChild(name: \"MacroExpansion\")\n                macro.addChild(macroExpansion.xmlElement())\n            }\n\n            if let commandlineArguments = commandlineArguments {\n                element.addChild(commandlineArguments.xmlElement())\n            }\n\n            if let environmentVariables = environmentVariables {\n                element.addChild(EnvironmentVariable.xmlElement(from: environmentVariables))\n            }\n\n            let additionalOptionsElement = element.addChild(AEXMLElement(name: \"AdditionalOptions\"))\n            additionalOptions.forEach { additionalOption in\n                additionalOptionsElement.addChild(additionalOption.xmlElement())\n            }\n            return element\n        }\n\n        // MARK: - Equatable\n\n        override func isEqual(to: Any?) -> Bool {\n            guard let rhs = to as? TestAction else { return false }\n            return testables == rhs.testables &&\n                buildConfiguration == rhs.buildConfiguration &&\n                selectedDebuggerIdentifier == rhs.selectedDebuggerIdentifier &&\n                selectedLauncherIdentifier == rhs.selectedLauncherIdentifier &&\n                shouldUseLaunchSchemeArgsEnv == rhs.shouldUseLaunchSchemeArgsEnv &&\n                codeCoverageEnabled == rhs.codeCoverageEnabled &&\n                enableAddressSanitizer == rhs.enableAddressSanitizer &&\n                enableASanStackUseAfterReturn == rhs.enableASanStackUseAfterReturn &&\n                enableThreadSanitizer == rhs.enableThreadSanitizer &&\n                enableUBSanitizer == rhs.enableUBSanitizer &&\n                disableMainThreadChecker == rhs.disableMainThreadChecker &&\n                macroExpansion == rhs.macroExpansion &&\n                additionalOptions == rhs.additionalOptions &&\n                commandlineArguments == rhs.commandlineArguments &&\n                environmentVariables == rhs.environmentVariables &&\n                language == rhs.language &&\n                region == rhs.region &&\n                systemAttachmentLifetime == rhs.systemAttachmentLifetime &&\n                userAttachmentLifetime == rhs.userAttachmentLifetime\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme+TestableReference.swift",
    "content": "import AEXML\nimport Foundation\n\nextension XCScheme {\n    public final class TestableReference: Equatable {\n        // MARK: - Attributes\n\n        public var skipped: Bool\n        public var parallelizable: Bool\n        public var randomExecutionOrdering: Bool\n        public var buildableReference: BuildableReference\n        public var skippedTests: [SkippedTest]\n\n        // MARK: - Init\n\n        public init(skipped: Bool,\n                    parallelizable: Bool = false,\n                    randomExecutionOrdering: Bool = false,\n                    buildableReference: BuildableReference,\n                    skippedTests: [SkippedTest] = []) {\n            self.skipped = skipped\n            self.parallelizable = parallelizable\n            self.randomExecutionOrdering = randomExecutionOrdering\n            self.buildableReference = buildableReference\n            self.skippedTests = skippedTests\n        }\n\n        init(element: AEXMLElement) throws {\n            skipped = element.attributes[\"skipped\"] == \"YES\"\n            parallelizable = element.attributes[\"parallelizable\"] == \"YES\"\n            randomExecutionOrdering = element.attributes[\"testExecutionOrdering\"] == \"random\"\n            buildableReference = try BuildableReference(element: element[\"BuildableReference\"])\n            if let skippedTests = element[\"SkippedTests\"][\"Test\"].all, !skippedTests.isEmpty {\n                self.skippedTests = try skippedTests.map(SkippedTest.init)\n            } else {\n                skippedTests = []\n            }\n        }\n\n        // MARK: - XML\n\n        func xmlElement() -> AEXMLElement {\n            var attributes: [String: String] = [\"skipped\": skipped.xmlString]\n            attributes[\"parallelizable\"] = parallelizable ? parallelizable.xmlString : nil\n            attributes[\"testExecutionOrdering\"] = randomExecutionOrdering ? \"random\" : nil\n            let element = AEXMLElement(name: \"TestableReference\",\n                                       value: nil,\n                                       attributes: attributes)\n            element.addChild(buildableReference.xmlElement())\n            if !skippedTests.isEmpty {\n                let skippedTestsElement = element.addChild(name: \"SkippedTests\")\n                skippedTests.forEach { skippedTest in\n                    skippedTestsElement.addChild(skippedTest.xmlElement())\n                }\n            }\n            return element\n        }\n\n        // MARK: - Equatable\n\n        public static func == (lhs: TestableReference, rhs: TestableReference) -> Bool {\n            return lhs.skipped == rhs.skipped &&\n                lhs.parallelizable == rhs.parallelizable &&\n                lhs.randomExecutionOrdering == rhs.randomExecutionOrdering &&\n                lhs.buildableReference == rhs.buildableReference &&\n                lhs.skippedTests == rhs.skippedTests\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Scheme/XCScheme.swift",
    "content": "import AEXML\nimport Foundation\nimport PathKit\n\npublic enum XCSchemeError: Error, CustomStringConvertible {\n    case notFound(path: Path)\n    case missing(property: String)\n\n    public var description: String {\n        switch self {\n        case let .notFound(path):\n            return \".xcscheme couldn't be found at path \\(path.string)\"\n        case let .missing(property):\n            return \"Property \\(property) missing\"\n        }\n    }\n}\n\npublic final class XCScheme: Writable, Equatable {\n    // MARK: - Static\n\n    public static let defaultDebugger = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n    public static let defaultLauncher = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n\n    // MARK: - Properties\n\n    public var buildAction: BuildAction?\n    public var testAction: TestAction?\n    public var launchAction: XCScheme.LaunchAction?\n    public var profileAction: ProfileAction?\n    public var analyzeAction: AnalyzeAction?\n    public var archiveAction: ArchiveAction?\n    public var lastUpgradeVersion: String?\n    public var version: String?\n    public var wasCreatedForAppExtension: Bool?\n    public var name: String\n\n    // MARK: - Init\n\n    public init(path: Path) throws {\n        if !path.exists {\n            throw XCSchemeError.notFound(path: path)\n        }\n        name = path.lastComponentWithoutExtension\n        let document = try AEXMLDocument(xml: try path.read())\n        let scheme = document[\"Scheme\"]\n        lastUpgradeVersion = scheme.attributes[\"LastUpgradeVersion\"]\n        version = scheme.attributes[\"version\"]\n        buildAction = try BuildAction(element: scheme[\"BuildAction\"])\n        testAction = try TestAction(element: scheme[\"TestAction\"])\n        launchAction = try XCScheme.LaunchAction(element: scheme[\"LaunchAction\"])\n        analyzeAction = try AnalyzeAction(element: scheme[\"AnalyzeAction\"])\n        archiveAction = try ArchiveAction(element: scheme[\"ArchiveAction\"])\n        profileAction = try ProfileAction(element: scheme[\"ProfileAction\"])\n\n        if let wasCreatedForAppExtension = scheme.attributes[\"wasCreatedForAppExtension\"] {\n            self.wasCreatedForAppExtension = wasCreatedForAppExtension == \"YES\"\n        }\n    }\n\n    public init(name: String,\n                lastUpgradeVersion: String?,\n                version: String?,\n                buildAction: BuildAction? = nil,\n                testAction: TestAction? = nil,\n                launchAction: XCScheme.LaunchAction? = nil,\n                profileAction: ProfileAction? = nil,\n                analyzeAction: AnalyzeAction? = nil,\n                archiveAction: ArchiveAction? = nil,\n                wasCreatedForAppExtension: Bool? = nil) {\n        self.name = name\n        self.lastUpgradeVersion = lastUpgradeVersion\n        self.version = version\n        self.buildAction = buildAction\n        self.testAction = testAction\n        self.launchAction = launchAction\n        self.profileAction = profileAction\n        self.analyzeAction = analyzeAction\n        self.archiveAction = archiveAction\n        self.wasCreatedForAppExtension = wasCreatedForAppExtension\n    }\n\n    // MARK: - Writable\n\n    public func write(path: Path, override: Bool) throws {\n        let document = AEXMLDocument()\n        var schemeAttributes: [String: String] = [:]\n        schemeAttributes[\"LastUpgradeVersion\"] = lastUpgradeVersion\n        schemeAttributes[\"version\"] = version\n        let scheme = document.addChild(name: \"Scheme\", value: nil, attributes: schemeAttributes)\n        if let buildAction = buildAction {\n            scheme.addChild(buildAction.xmlElement())\n        }\n        if let testAction = testAction {\n            scheme.addChild(testAction.xmlElement())\n        }\n        if let launchAction = launchAction {\n            scheme.addChild(launchAction.xmlElement())\n        }\n        if let profileAction = profileAction {\n            scheme.addChild(profileAction.xmlElement())\n        }\n        if let analyzeAction = analyzeAction {\n            scheme.addChild(analyzeAction.xmlElement())\n        }\n        if let archiveAction = archiveAction {\n            scheme.addChild(archiveAction.xmlElement())\n        }\n        if let wasCreatedForAppExtension = wasCreatedForAppExtension {\n            scheme.attributes[\"wasCreatedForAppExtension\"] = wasCreatedForAppExtension.xmlString\n        }\n        if override, path.exists {\n            try path.delete()\n        }\n        try path.write(document.xmlXcodeFormat)\n    }\n\n    // MARK: - Equatable\n\n    public static func == (lhs: XCScheme, rhs: XCScheme) -> Bool {\n        return lhs.buildAction == rhs.buildAction &&\n            lhs.testAction == rhs.testAction &&\n            lhs.launchAction == rhs.launchAction &&\n            lhs.profileAction == rhs.profileAction &&\n            lhs.analyzeAction == rhs.analyzeAction &&\n            lhs.archiveAction == rhs.archiveAction &&\n            lhs.lastUpgradeVersion == rhs.lastUpgradeVersion &&\n            lhs.version == rhs.version &&\n            lhs.name == rhs.name &&\n            lhs.wasCreatedForAppExtension == rhs.wasCreatedForAppExtension\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Utils/BuildSettingsProvider.swift",
    "content": "import Foundation\n\n/// Class that provides default build settings to be used in Xcode projects.\npublic class BuildSettingsProvider {\n    /// Build settings variant.\n    ///\n    /// - all: all (debug & release).\n    /// - debug: debug.\n    /// - release: release.\n    public enum Variant {\n        case all, debug, release\n    }\n\n    /// Target platform.\n    ///\n    /// - iOS: iOS.\n    /// - macOS: macOS.\n    /// - tvOS: tvOS.\n    /// - watchOS: watchOS.\n    public enum Platform {\n        case iOS, macOS, tvOS, watchOS\n    }\n\n    /// Target product type.\n    ///\n    /// - framework: framework.\n    /// - staticLibrary: static library.\n    /// - dynamicLibrary: dynamic library.\n    /// - application: application.\n    /// - bundle: bundle.\n    public enum Product {\n        case framework, staticLibrary, dynamicLibrary, application, bundle\n    }\n\n    /// Returns the default target build settings.\n    ///\n    /// - Parameters:\n    ///   - variant: build settings variant.\n    ///   - platform: target platform.\n    ///   - product: target product.\n    ///   - swift: true if the target contains Swift code.\n    /// - Returns: build settings.\n    // swiftlint:disable:next function_body_length\n    public static func targetDefault(variant: Variant? = nil, platform: Platform?, product: Product?, swift: Bool? = nil) -> BuildSettings {\n        var buildSettings: [String: Any] = [:]\n        if let platform = platform, platform == .iOS {\n            buildSettings[\"SDKROOT\"] = \"iphoneos\"\n            buildSettings[\"CODE_SIGN_IDENTITY\"] = \"iPhone Developer\"\n            buildSettings[\"LD_RUNPATH_SEARCH_PATHS\"] = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\"\n        }\n        if let platform = platform, platform == .macOS {\n            buildSettings[\"SDKROOT\"] = \"macosx\"\n            buildSettings[\"CODE_SIGN_IDENTITY\"] = \"-\"\n            buildSettings[\"LD_RUNPATH_SEARCH_PATHS\"] = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\"\n        }\n        if let platform = platform, platform == .watchOS {\n            buildSettings[\"SDKROOT\"] = \"watchos\"\n            buildSettings[\"LD_RUNPATH_SEARCH_PATHS\"] = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\"\n        }\n        if let platform = platform, platform == .tvOS {\n            buildSettings[\"SDKROOT\"] = \"appletvos\"\n            buildSettings[\"LD_RUNPATH_SEARCH_PATHS\"] = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\"\n        }\n        if let platform = platform, let variant = variant, [.iOS, .watchOS, .tvOS].contains(platform), variant == .release {\n            buildSettings[\"VALIDATE_PRODUCT\"] = \"YES\"\n        }\n        if let variant = variant, let swift = swift, variant == .debug, swift == true {\n            buildSettings[\"SWIFT_OPTIMIZATION_LEVEL\"] = \"-Onone\"\n            buildSettings[\"SWIFT_ACTIVE_COMPILATION_CONDITIONS\"] = \"DEBUG\"\n        }\n        if let variant = variant, let swift = swift, variant == .release, swift == true {\n            buildSettings[\"SWIFT_OPTIMIZATION_LEVEL\"] = \"-Owholemodule\"\n            buildSettings[\"SWIFT_ACTIVE_COMPILATION_CONDITIONS\"] = \"DEBUG\"\n        }\n        if let product = product, product == .framework {\n            buildSettings[\"CODE_SIGN_IDENTITY\"] = \"\"\n            buildSettings[\"CURRENT_PROJECT_VERSION\"] = \"1\"\n            buildSettings[\"DEFINES_MODULE\"] = \"YES\"\n            buildSettings[\"DYLIB_COMPATIBILITY_VERSION\"] = \"1\"\n            buildSettings[\"DYLIB_CURRENT_VERSION\"] = \"1\"\n            buildSettings[\"DYLIB_INSTALL_NAME_BASE\"] = \"@rpath\"\n            buildSettings[\"INSTALL_PATH\"] = \"$(LOCAL_LIBRARY_DIR)/Frameworks\"\n            buildSettings[\"PRODUCT_NAME\"] = \"$(TARGET_NAME:c99extidentifier)\"\n            buildSettings[\"SKIP_INSTALL\"] = \"YES\"\n            buildSettings[\"VERSION_INFO_PREFIX\"] = \"\"\n            buildSettings[\"VERSIONING_SYSTEM\"] = \"apple-generic\"\n        }\n        if let platform = platform, let product = product, platform == .iOS, product == .framework {\n            buildSettings[\"TARGETED_DEVICE_FAMILY\"] = \"1,2\"\n        }\n\n        if let platform = platform, let product = product, platform == .macOS, product == .framework {\n            buildSettings[\"COMBINE_HIDPI_IMAGES\"] = \"YES\"\n            buildSettings[\"FRAMEWORK_VERSION\"] = \"A\"\n        }\n        if let platform = platform, let product = product, platform == .watchOS, product == .framework {\n            buildSettings[\"APPLICATION_EXTENSION_API_ONLY\"] = \"YES\"\n            buildSettings[\"TARGETED_DEVICE_FAMILY\"] = \"4\"\n        }\n        if let platform = platform, let product = product, platform == .tvOS, product == .framework {\n            buildSettings[\"TARGETED_DEVICE_FAMILY\"] = \"3\"\n        }\n        if let product = product, let swift = swift, product == .framework, swift == true {\n            buildSettings[\"DEFINES_MODULE\"] = \"YES\"\n        }\n        if let platform = platform, let product = product, platform == .iOS, product == .staticLibrary {\n            buildSettings[\"OTHER_LDFLAGS\"] = \"-ObjC\"\n            buildSettings[\"SKIP_INSTALL\"] = \"YES\"\n            buildSettings[\"TARGETED_DEVICE_FAMILY\"] = \"1,2\"\n        }\n        if let platform = platform, let product = product, platform == .watchOS, product == .staticLibrary {\n            buildSettings[\"OTHER_LDFLAGS\"] = \"-ObjC\"\n            buildSettings[\"SKIP_INSTALL\"] = \"YES\"\n            buildSettings[\"TARGETED_DEVICE_FAMILY\"] = \"4\"\n        }\n        if let platform = platform, let product = product, platform == .tvOS, product == .staticLibrary {\n            buildSettings[\"OTHER_LDFLAGS\"] = \"-ObjC\"\n            buildSettings[\"SKIP_INSTALL\"] = \"YES\"\n            buildSettings[\"TARGETED_DEVICE_FAMILY\"] = \"3\"\n        }\n        if let platform = platform, let product = product, platform == .macOS, product == .staticLibrary {\n            buildSettings[\"EXECUTABLE_PREFIX\"] = \"lib\"\n            buildSettings[\"SKIP_INSTALL\"] = \"YES\"\n        }\n        if let platform = platform, let product = product, platform == .macOS, product == .dynamicLibrary {\n            buildSettings[\"DYLIB_COMPATIBILITY_VERSION\"] = \"1\"\n            buildSettings[\"DYLIB_CURRENT_VERSION\"] = \"1\"\n            buildSettings[\"EXECUTABLE_PREFIX\"] = \"lib\"\n            buildSettings[\"SKIP_INSTALL\"] = \"YES\"\n        }\n        if let product = product, product == .application {\n            buildSettings[\"ASSETCATALOG_COMPILER_APPICON_NAME\"] = \"AppIcon\"\n        }\n        if let platform = platform, let product = product, platform == .iOS, product == .application {\n            buildSettings[\"LD_RUNPATH_SEARCH_PATHS\"] = \"$(inherited) @executable_path/Frameworks\"\n            buildSettings[\"TARGETED_DEVICE_FAMILY\"] = \"1,2\"\n        }\n        if let platform = platform, let product = product, platform == .watchOS, product == .application {\n            buildSettings[\"SKIP_INSTALL\"] = \"YES\"\n            buildSettings[\"TARGETED_DEVICE_FAMILY\"] = \"4\"\n        }\n        if let platform = platform, let product = product, platform == .tvOS, product == .application {\n            buildSettings[\"ASSETCATALOG_COMPILER_APPICON_NAME\"] = \"App Icon & Top Shelf Image\"\n            buildSettings[\"ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME\"] = \"LaunchImage\"\n            buildSettings[\"LD_RUNPATH_SEARCH_PATHS\"] = \"$(inherited) @executable_path/Frameworks\"\n            buildSettings[\"TARGETED_DEVICE_FAMILY\"] = \"3\"\n        }\n        if let platform = platform, let product = product, platform == .macOS, product == .application {\n            buildSettings[\"COMBINE_HIDPI_IMAGES\"] = \"YES\"\n            buildSettings[\"LD_RUNPATH_SEARCH_PATHS\"] = \"$(inherited) @executable_path/../Frameworks\"\n        }\n        if let platform = platform, let product = product, let swift = swift, platform == .watchOS, product == .application, swift == true {\n            buildSettings[\"ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES\"] = \"YES\"\n        }\n        if let product = product, product == .bundle {\n            buildSettings[\"WRAPPER_EXTENSION\"] = \"bundle\"\n            buildSettings[\"SKIP_INSTALL\"] = \"YES\"\n        }\n        if let product = product, let platform = platform, product == .bundle, platform == .macOS {\n            buildSettings[\"COMBINE_HIDPI_IMAGES\"] = \"YES\"\n            buildSettings[\"INSTALL_PATH\"] = \"$(LOCAL_LIBRARY_DIR)/Bundles\"\n            buildSettings[\"SDKROOT\"] = \"macosx\"\n        }\n        return buildSettings\n    }\n\n    /// Returns default build settings that Xcode sets in new projects.\n    ///\n    /// - Returns: build settings.\n    public static func projectDefault(variant: Variant) -> BuildSettings {\n        switch variant {\n        case .all:\n            return projectAll()\n        case .debug:\n            return projectDebug()\n        case .release:\n            return projectRelease()\n        }\n    }\n\n    // MARK: - Private\n\n    // swiftlint:disable:next function_body_length\n    private static func projectAll() -> BuildSettings {\n        return [\n            \"ALWAYS_SEARCH_USER_PATHS\": \"NO\",\n            \"CLANG_ANALYZER_NONNULL\": \"YES\",\n            \"CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION\": \"YES_AGGRESSIVE\",\n            \"CLANG_CXX_LANGUAGE_STANDARD\": \"gnu++14\",\n            \"CLANG_CXX_LIBRARY\": \"libc++\",\n            \"CLANG_ENABLE_MODULES\": \"YES\",\n            \"CLANG_ENABLE_OBJC_ARC\": \"YES\",\n            \"CLANG_ENABLE_OBJC_WEAK\": \"YES\",\n            \"CLANG_WARN__DUPLICATE_METHOD_MATCH\": \"YES\",\n            \"CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING\": \"YES\",\n            \"CLANG_WARN_BOOL_CONVERSION\": \"YES\",\n            \"CLANG_WARN_COMMA\": \"YES\",\n            \"CLANG_WARN_CONSTANT_CONVERSION\": \"YES\",\n            \"CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS\": \"YES\",\n            \"CLANG_WARN_DIRECT_OBJC_ISA_USAGE\": \"YES_ERROR\",\n            \"CLANG_WARN_DOCUMENTATION_COMMENTS\": \"YES\",\n            \"CLANG_WARN_EMPTY_BODY\": \"YES\",\n            \"CLANG_WARN_ENUM_CONVERSION\": \"YES\",\n            \"CLANG_WARN_INFINITE_RECURSION\": \"YES\",\n            \"CLANG_WARN_INT_CONVERSION\": \"YES\",\n            \"CLANG_WARN_NON_LITERAL_NULL_CONVERSION\": \"YES\",\n            \"CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF\": \"YES\",\n            \"CLANG_WARN_OBJC_LITERAL_CONVERSION\": \"YES\",\n            \"CLANG_WARN_OBJC_ROOT_CLASS\": \"YES_ERROR\",\n            \"CLANG_WARN_RANGE_LOOP_ANALYSIS\": \"YES\",\n            \"CLANG_WARN_STRICT_PROTOTYPES\": \"YES\",\n            \"CLANG_WARN_SUSPICIOUS_MOVE\": \"YES\",\n            \"CLANG_WARN_UNGUARDED_AVAILABILITY\": \"YES_AGGRESSIVE\",\n            \"CLANG_WARN_UNREACHABLE_CODE\": \"YES\",\n            \"COPY_PHASE_STRIP\": \"NO\",\n            \"ENABLE_STRICT_OBJC_MSGSEND\": \"YES\",\n            \"GCC_C_LANGUAGE_STANDARD\": \"gnu11\",\n            \"GCC_NO_COMMON_BLOCKS\": \"YES\",\n            \"GCC_WARN_64_TO_32_BIT_CONVERSION\": \"YES\",\n            \"GCC_WARN_ABOUT_RETURN_TYPE\": \"YES_ERROR\",\n            \"GCC_WARN_UNDECLARED_SELECTOR\": \"YES\",\n            \"GCC_WARN_UNINITIALIZED_AUTOS\": \"YES_AGGRESSIVE\",\n            \"GCC_WARN_UNUSED_FUNCTION\": \"YES\",\n            \"GCC_WARN_UNUSED_VARIABLE\": \"YES\",\n            \"PRODUCT_NAME\": \"$(TARGET_NAME)\",\n        ]\n    }\n\n    private static func projectDebug() -> BuildSettings {\n        return [\n            \"DEBUG_INFORMATION_FORMAT\": \"dwarf\",\n            \"ENABLE_TESTABILITY\": \"YES\",\n            \"GCC_DYNAMIC_NO_PIC\": \"NO\",\n            \"GCC_OPTIMIZATION_LEVEL\": \"0\",\n            \"GCC_PREPROCESSOR_DEFINITIONS\": [\"DEBUG=1\", \"$(inherited)\"],\n            \"MTL_ENABLE_DEBUG_INFO\": \"YES\",\n            \"ONLY_ACTIVE_ARCH\": \"YES\",\n        ]\n    }\n\n    private static func projectRelease() -> BuildSettings {\n        return [\n            \"DEBUG_INFORMATION_FORMAT\": \"dwarf-with-dsym\",\n            \"ENABLE_NS_ASSERTIONS\": \"NO\",\n            \"MTL_ENABLE_DEBUG_INFO\": \"NO\",\n        ]\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Utils/CommentedString.swift",
    "content": "import Foundation\n\n/// String that includes a comment\nstruct CommentedString {\n    /// Entity string value.\n    let string: String\n\n    /// String comment.\n    let comment: String?\n\n    /// Initializes the commented string with the value and the comment.\n    ///\n    /// - Parameters:\n    ///   - string: string value.\n    ///   - comment: comment.\n    init(_ string: String, comment: String? = nil) {\n        self.string = string\n        self.comment = comment\n    }\n\n    /// Set of characters that are invalid.\n    private static var invalidCharacters: CharacterSet = {\n        var invalidSet = CharacterSet(charactersIn: \"_$\")\n        invalidSet.insert(charactersIn: UnicodeScalar(\".\") ... UnicodeScalar(\"9\"))\n        invalidSet.insert(charactersIn: UnicodeScalar(\"A\") ... UnicodeScalar(\"Z\"))\n        invalidSet.insert(charactersIn: UnicodeScalar(\"a\") ... UnicodeScalar(\"z\"))\n        invalidSet.invert()\n        return invalidSet\n    }()\n\n    /// Substrings that cause Xcode to quote the string content.\n    private let invalidStrings = [\n        \"___\",\n        \"//\",\n    ]\n\n    /// Returns a valid string for Xcode projects.\n    var validString: String {\n        switch string {\n        case \"\": return \"\".quoted\n        case \"false\": return \"NO\"\n        case \"true\": return \"YES\"\n        default: break\n        }\n\n        var escaped = string\n        // escape escape\n        if escaped.contains(\"\\\\\" as Character) {\n            escaped = escaped.replacingOccurrences(of: \"\\\\\", with: \"\\\\\\\\\")\n        }\n        // escape quotes\n        if escaped.contains(\"\\\"\" as Character) {\n            escaped = escaped.replacingOccurrences(of: \"\\\"\", with: \"\\\\\\\"\")\n        }\n        // escape tab\n        if escaped.contains(\"\\t\" as Character) {\n            escaped = escaped.replacingOccurrences(of: \"\\t\", with: \"\\\\t\")\n        }\n        // escape newlines\n        if escaped.contains(\"\\n\" as Character) {\n            escaped = escaped.replacingOccurrences(of: \"\\n\", with: \"\\\\n\")\n        }\n\n        if !escaped.isQuoted,\n            escaped.rangeOfCharacter(from: CommentedString.invalidCharacters) != nil ||\n            invalidStrings.contains(where: { escaped.range(of: $0) != nil }) {\n            escaped = escaped.quoted\n        }\n\n        return escaped\n    }\n}\n\n// MARK: - Hashable\n\nextension CommentedString: Hashable {\n    public func hash(into hasher: inout Hasher) {\n        hasher.combine(string)\n    }\n\n    static func == (lhs: CommentedString, rhs: CommentedString) -> Bool {\n        return lhs.string == rhs.string && lhs.comment == rhs.comment\n    }\n}\n\n// MARK: - ExpressibleByStringLiteral\n\nextension CommentedString: ExpressibleByStringLiteral {\n    public init(stringLiteral value: String) {\n        self.init(value)\n    }\n\n    public init(extendedGraphemeClusterLiteral value: String) {\n        self.init(value)\n    }\n\n    public init(unicodeScalarLiteral value: String) {\n        self.init(value)\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Utils/Decoders.swift",
    "content": "import Foundation\n\n/// Project object reference repository.\nclass PBXObjectReferenceRepository {\n    /// References.\n    var references: [String: PBXObjectReference] = [:]\n    let lock = NSRecursiveLock()\n\n    /// Returns and creates if it doesn't exist an object reference.\n    ///\n    /// - Parameters:\n    ///   - reference: reference value.\n    ///   - objects: objects.\n    /// - Returns: object reference.\n    func getOrCreate(reference: String, objects: PBXObjects) -> PBXObjectReference {\n        return lock.whileLocked {\n            if let objectReference = references[reference] {\n                return objectReference\n            }\n            let objectReference = PBXObjectReference(reference, objects: objects)\n            references[reference] = objectReference\n            return objectReference\n        }\n    }\n}\n\n/// Context used when the project is being decoded.\nclass ProjectDecodingContext {\n    /// Object reference repository.\n    let objectReferenceRepository: PBXObjectReferenceRepository\n\n    /// Objects.\n    let objects: PBXObjects\n    let pbxProjValueReader: ((String) -> Any?)?\n\n    init(pbxProjValueReader: ((String) -> Any?)? = nil) {\n        objectReferenceRepository = PBXObjectReferenceRepository()\n        objects = PBXObjects(objects: [])\n        self.pbxProjValueReader = pbxProjValueReader\n    }\n}\n\n// MARK: - CodingUserInfoKey (Context)\n\nextension CodingUserInfoKey {\n    /// Context user info key.\n    static var context: CodingUserInfoKey = CodingUserInfoKey(rawValue: \"context\")!\n}\n\n/// Xcodeproj JSON decoder.\nclass XcodeprojJSONDecoder: JSONDecoder {\n    /// Default init.\n    init(context: ProjectDecodingContext = ProjectDecodingContext()) {\n        super.init()\n        userInfo = [.context: context]\n    }\n}\n\n/// Xcodeproj property list decoder.\nclass XcodeprojPropertyListDecoder: PropertyListDecoder {\n    /// Default init.\n    init(context: ProjectDecodingContext = ProjectDecodingContext()) {\n        super.init()\n        userInfo = [.context: context]\n    }\n}\n\n// MARK: - Decoder (Context)\n\nextension Decoder {\n    /// Returns the decoding context.\n    var context: ProjectDecodingContext {\n        // swiftlint:disable:next force_cast\n        return userInfo[.context] as! ProjectDecodingContext\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Utils/JSONDecoding.swift",
    "content": "import Foundation\n\n// Inspired by https://gist.github.com/mbuchetics/c9bc6c22033014aa0c550d3b4324411a\n\nstruct JSONCodingKeys: CodingKey {\n    var stringValue: String\n\n    init?(stringValue: String) {\n        self.stringValue = stringValue\n    }\n\n    var intValue: Int?\n\n    init?(intValue: Int) {\n        self.init(stringValue: \"\\(intValue)\")\n        self.intValue = intValue\n    }\n}\n\nextension KeyedDecodingContainer {\n    func decode(_ type: [String: Any].Type, forKey key: K) throws -> [String: Any] {\n        // Optimization for root dictionary decoding\n        if let decoder = try? superDecoder().context,\n            let pbxProjValueReader = decoder.pbxProjValueReader,\n            let result = pbxProjValueReader(key.stringValue) as? [String: Any] {\n            return result\n        }\n        let container = try nestedContainer(keyedBy: JSONCodingKeys.self, forKey: key)\n        return try container.decode(type)\n    }\n\n    func decodeIfPresent(_ type: [String: Any].Type, forKey key: K) throws -> [String: Any]? {\n        guard contains(key) else {\n            return nil\n        }\n        return try decode(type, forKey: key)\n    }\n\n    func decode(_ type: [Any].Type, forKey key: K) throws -> [Any] {\n        var container = try nestedUnkeyedContainer(forKey: key)\n        return try container.decode(type)\n    }\n\n    func decodeIfPresent(_ type: [Any].Type, forKey key: K) throws -> [Any]? {\n        guard contains(key) else {\n            return nil\n        }\n        return try decode(type, forKey: key)\n    }\n\n    func decode(_: [String: Any].Type) throws -> [String: Any] {\n        var dictionary = [String: Any]()\n\n        for key in allKeys {\n            // Order is important for performance\n            if let nestedDictionary = try? decode([String: Any].self, forKey: key) {\n                dictionary[key.stringValue] = nestedDictionary\n            } else if let intValue = try? decode(Int.self, forKey: key) {\n                dictionary[key.stringValue] = intValue\n            } else if let unsignedIntValue = try? decode(UInt.self, forKey: key) {\n                dictionary[key.stringValue] = unsignedIntValue\n            } else if let stringValue = try? decode(String.self, forKey: key) {\n                dictionary[key.stringValue] = stringValue\n            } else if let boolValue = try? decode(Bool.self, forKey: key) {\n                dictionary[key.stringValue] = boolValue\n            } else if let doubleValue = try? decode(Double.self, forKey: key) {\n                dictionary[key.stringValue] = doubleValue\n            } else if let nestedArray = try? decode([Any].self, forKey: key) {\n                dictionary[key.stringValue] = nestedArray\n            } else if try decodeNil(forKey: key) {\n                dictionary[key.stringValue] = true\n            }\n        }\n        return dictionary\n    }\n}\n\nextension UnkeyedDecodingContainer {\n    mutating func decode(_: [Any].Type) throws -> [Any] {\n        var array: [Any] = []\n        while isAtEnd == false {\n            if let value = try? decode(Bool.self) {\n                array.append(value)\n            } else if let value = try? decode(Double.self) {\n                array.append(value)\n            } else if let value = try? decode(String.self) {\n                array.append(value)\n            } else if let nestedDictionary = try? decode([String: Any].self) {\n                array.append(nestedDictionary)\n            } else if let nestedArray = try? decode([Any].self) {\n                array.append(nestedArray)\n            }\n        }\n        return array\n    }\n\n    mutating func decode(_ type: [String: Any].Type) throws -> [String: Any] {\n        let nestedContainer = try self.nestedContainer(keyedBy: JSONCodingKeys.self)\n        return try nestedContainer.decode(type)\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Utils/OSLogger.swift",
    "content": "import Foundation\nimport os.signpost\n\n/// OSLog wrapper that runs logging functions if logging is enabled through\n/// environment variables and the feature is available in the system where\n/// the user is using the project.\nclass OSLogger {\n    /// Shared instance of OSLogger\n    static var instance: OSLogger = OSLogger()\n\n    /// Logs when the given closure starts and ends.\n    ///\n    /// - Parameters:\n    ///   - category: Category of the code being logged. For example, if it's a function in PBXObjectReference, that can be the category.\n    ///   - name: Name for the code being logged. If we are logging the time it takes to write a project, the name can be \"Project Writing\"\n    ///   - arguments: Arguments to be passed to the function.\n    ///   - closure: Piece of code that will be logged.\n    /// - Throws: An error if the given closure throws.\n    func log(category: String = #file, name: StaticString, _ arguments: CVarArg..., closure: () throws -> Void) throws {\n        if !shouldLog {\n            try closure()\n            return\n        }\n\n        if #available(OSX 10.14, *) {\n            let log: OSLog = OSLog.xcodeproj(category: category)\n            let signpostID = OSSignpostID(log: log)\n            os_signpost(.begin,\n                        log: log,\n                        name: name,\n                        signpostID: signpostID,\n                        \"%{public}s\",\n                        arguments)\n        }\n\n        try closure()\n\n        if #available(OSX 10.14, *) {\n            let log: OSLog = OSLog.xcodeproj(category: category)\n            let signpostID = OSSignpostID(log: log)\n            os_signpost(.end,\n                        log: log,\n                        name: name,\n                        signpostID: signpostID,\n                        \"%{public}s\",\n                        arguments)\n        }\n    }\n\n    /// Logs when the given closure starts and ends.\n    ///\n    /// - Parameters:\n    ///   - category: Category of the code being logged. For example, if it's a function in PBXObjectReference, that can be the category.\n    ///   - name: Name for the code being logged. If we are logging the time it takes to write a project, the name can be \"Project Writing\"\n    ///   - arguments: Arguments to be passed to the function.\n    ///   - closure: Piece of code that will be logged.\n    /// - Returns: The value returned by the closure.\n    /// - Throws: An error if the given closure throws.\n    func log<T>(category: String = #file, name: StaticString, _ arguments: CVarArg..., closure: () throws -> T) throws -> T {\n        if !shouldLog {\n            return try closure()\n        }\n\n        if #available(OSX 10.14, *) {\n            let log: OSLog = OSLog.xcodeproj(category: category)\n            let signpostID = OSSignpostID(log: log)\n            os_signpost(.begin,\n                        log: log,\n                        name: name,\n                        signpostID: signpostID,\n                        \"%{public}s\",\n                        arguments)\n        }\n\n        let result = try closure()\n\n        if #available(OSX 10.14, *) {\n            let log: OSLog = OSLog.xcodeproj(category: category)\n            let signpostID = OSSignpostID(log: log)\n            os_signpost(.end,\n                        log: log,\n                        name: name,\n                        signpostID: signpostID,\n                        \"%{public}s\",\n                        arguments)\n        }\n\n        return result\n    }\n\n    /// Returns true if the XCODEPROJ_OSLOG environment variable is defined in the environment.\n    lazy var shouldLog: Bool = {\n        ProcessInfo.processInfo.environment[\"XCODEPROJ_OSLOG\"] != nil\n    }()\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Utils/PlistValue.swift",
    "content": "import Foundation\n\n/// It represents a plist value.\n///\n/// - string: commented string.\n/// - array: array of plist values.\n/// - dictionary: dictionary where the keys are a commented strings and the values are a plist values.\nindirect enum PlistValue {\n    case string(CommentedString)\n    case array([PlistValue])\n    case dictionary([CommentedString: PlistValue])\n\n    var string: CommentedString? {\n        switch self {\n        case let .string(string): return string\n        default: return nil\n        }\n    }\n\n    var array: [PlistValue]? {\n        switch self {\n        case let .array(array): return array\n        default: return nil\n        }\n    }\n\n    var dictionary: [CommentedString: PlistValue]? {\n        switch self {\n        case let .dictionary(dictionary): return dictionary\n        default: return nil\n        }\n    }\n}\n\n// MARK: - PlistValue Extension (ExpressibleByArrayLiteral)\n\nextension PlistValue: ExpressibleByArrayLiteral {\n    public init(arrayLiteral elements: PlistValue...) {\n        self = .array(elements)\n    }\n}\n\n// MARK: - PlistValue Extension (ExpressibleByDictionaryLiteral)\n\nextension PlistValue: ExpressibleByDictionaryLiteral {\n    public init(dictionaryLiteral elements: (CommentedString, PlistValue)...) {\n        var dictionary: [CommentedString: PlistValue] = [:]\n        elements.forEach { dictionary[$0.0] = $0.1 }\n        self = .dictionary(dictionary)\n    }\n}\n\n// MARK: - PlistValue Extension (ExpressibleByStringLiteral)\n\nextension PlistValue: ExpressibleByStringLiteral {\n    public init(stringLiteral value: String) {\n        self = .string(CommentedString(value))\n    }\n\n    public init(extendedGraphemeClusterLiteral value: String) {\n        self = .string(CommentedString(value))\n    }\n\n    public init(unicodeScalarLiteral value: String) {\n        self = .string(CommentedString(value))\n    }\n}\n\n// MARK: PlistValue Extension (Equatable)\n\nextension PlistValue: Equatable {\n    static func == (lhs: PlistValue, rhs: PlistValue) -> Bool {\n        switch (lhs, rhs) {\n        case let (.string(lhsString), .string(rhsString)):\n            return lhsString == rhsString\n        case let (.array(lhsArray), .array(rhsArray)):\n            return lhsArray == rhsArray\n        case let (.dictionary(lhsDictionary), .dictionary(rhsDictionary)):\n            return lhsDictionary == rhsDictionary\n        default:\n            return false\n        }\n    }\n}\n\n// MARK: - Dictionary Extension (PlistValue)\n\nextension Dictionary where Key == String {\n    func plist() -> PlistValue {\n        var dictionary: [CommentedString: PlistValue] = [:]\n        forEach { key, value in\n            if let array = value as? [Any] {\n                dictionary[CommentedString(key)] = array.plist()\n            } else if let subDictionary = value as? [String: Any] {\n                dictionary[CommentedString(key)] = subDictionary.plist()\n            } else if let string = value as? CustomStringConvertible {\n                dictionary[CommentedString(key)] = .string(CommentedString(string.description))\n            }\n        }\n        return .dictionary(dictionary)\n    }\n}\n\n// MARK: - Array Extension (PlistValue)\n\nextension Array {\n    func plist() -> PlistValue {\n        return .array(compactMap({ (element) -> PlistValue? in\n            if let array = element as? [Any] {\n                return array.plist()\n            } else if let dictionary = element as? [String: Any] {\n                return dictionary.plist()\n            } else if let string = element as? CustomStringConvertible {\n                return PlistValue.string(CommentedString(string.description))\n            }\n            return nil\n        }))\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Utils/ReferenceGenerator.swift",
    "content": "import Foundation\n\n/// Generates the deterministic references of the project objects that have a temporary reference.\n/// When objects are added to the project, those are added with a temporary reference that other\n/// objects can refer to. Before saving the project, we make those references permanent giving them\n/// a deterministic value that depends on the object itself and its ancestor.\nprotocol ReferenceGenerating: AnyObject {\n    /// Generates the references of the objects of the given project.\n    ///\n    /// - Parameter proj: project whose objects references will be generated.\n    /// - Parameter settings: settings to control the output references\n    func generateReferences(proj: PBXProj) throws\n}\n\n/// Reference generator.\nfinal class ReferenceGenerator: ReferenceGenerating {\n    let outputSettings: PBXOutputSettings\n    var references: Set<String> = []\n\n    init(outputSettings: PBXOutputSettings) {\n        self.outputSettings = outputSettings\n    }\n\n    /// Generates the references of the objects of the given project.\n    ///\n    /// - Parameter proj: project whose objects references will be generated.\n    func generateReferences(proj: PBXProj) throws {\n        guard let project: PBXProject = try proj.rootObjectReference?.getThrowingObject() else {\n            return\n        }\n\n        // cache current reference values\n        var references: Set<String> = []\n        proj.objects.forEach { object in\n            if !object.reference.temporary {\n                references.insert(object.reference.value)\n            }\n        }\n        self.references = references\n\n        // Projects, targets, groups and file references.\n        // Note: The references of those type of objects should be generated first.\n        ///      We use them to generate the references of the objects that depend on them.\n        ///      For instance, the reference of a build file, is generated from the reference of\n        ///      the file it refers to.\n        let identifiers = [project.name]\n        generateProjectAndTargets(project: project, identifiers: identifiers)\n        try generateGroupReferences(project.mainGroup, identifiers: identifiers)\n        if let productsGroup: PBXGroup = project.productsGroup {\n            try generateGroupReferences(productsGroup, identifiers: identifiers)\n        }\n\n        // Targets\n        let targets: [PBXTarget] = project.targets\n        try targets.forEach({ try generateTargetReferences($0, identifiers: identifiers) })\n\n        // Project references\n        try project.projectReferences.flatMap({ $0.values }).forEach { objectReference in\n            guard let fileReference: PBXFileReference = objectReference.getObject() else { return }\n            try generateFileReference(fileReference, identifiers: identifiers)\n        }\n\n        /// Configuration list\n        if let configurationList: XCConfigurationList = project.buildConfigurationListReference.getObject() {\n            try generateConfigurationListReferences(configurationList, identifiers: identifiers)\n        }\n    }\n\n    /// Generates the reference for the project and its target.\n    ///\n    /// - Parameters:\n    ///   - project: project whose reference will be generated.\n    ///   - identifiers: list of identifiers.\n    private func generateProjectAndTargets(project: PBXProject,\n                                           identifiers: [String]) {\n        // Project\n        fixReference(for: project, identifiers: identifiers)\n\n        // Targets\n        let targets: [PBXTarget] = project.targetReferences.objects()\n        targets.forEach { target in\n\n            var identifiers = identifiers\n            identifiers.append(target.name)\n\n            fixReference(for: target, identifiers: identifiers)\n        }\n    }\n\n    /// Generates the reference for a group object.\n    ///\n    /// - Parameters:\n    ///   - group: group instance.\n    ///   - identifiers: list of identifiers.\n    private func generateGroupReferences(_ group: PBXGroup,\n                                         identifiers: [String]) throws {\n        var identifiers = identifiers\n        if let groupName = group.fileName() {\n            identifiers.append(groupName)\n        }\n\n        // Group\n        fixReference(for: group, identifiers: identifiers)\n\n        // Children\n        try group.childrenReferences.forEach { child in\n            guard let childFileElement: PBXFileElement = child.getObject() else { return }\n            if let childGroup = childFileElement as? PBXGroup {\n                try generateGroupReferences(childGroup, identifiers: identifiers)\n            } else if let childFileReference = childFileElement as? PBXFileReference {\n                try generateFileReference(childFileReference, identifiers: identifiers)\n            }\n        }\n    }\n\n    /// Generates the reference for a file reference object.\n    ///\n    /// - Parameters:\n    ///   - fileReference: file reference instance.\n    ///   - identifiers: list of identifiers.\n    private func generateFileReference(_ fileReference: PBXFileReference, identifiers: [String]) throws {\n        var identifiers = identifiers\n        if let groupName = fileReference.fileName() {\n            identifiers.append(groupName)\n        }\n\n        fixReference(for: fileReference, identifiers: identifiers)\n    }\n\n    /// Generates the reference for a configuration list object.\n    ///\n    /// - Parameters:\n    ///   - configurationList: configuration list instance.\n    ///   - identifiers: list of identifiers.\n    private func generateConfigurationListReferences(_ configurationList: XCConfigurationList,\n                                                     identifiers: [String]) throws {\n        fixReference(for: configurationList, identifiers: identifiers)\n\n        let buildConfigurations: [XCBuildConfiguration] = configurationList.buildConfigurations\n\n        buildConfigurations.forEach { configuration in\n            if !configuration.reference.temporary { return }\n\n            var identifiers = identifiers\n            identifiers.append(configuration.name)\n\n            fixReference(for: configuration, identifiers: identifiers)\n        }\n    }\n\n    /// Generates the reference for a target object.\n    ///\n    /// - Parameters:\n    ///   - target: target instance.\n    ///   - identifiers: list of identifiers.\n    private func generateTargetReferences(_ target: PBXTarget,\n                                          identifiers: [String]) throws {\n        var identifiers = identifiers\n        identifiers.append(target.name)\n\n        // Configuration list\n        if let configurationList = target.buildConfigurationList {\n            try generateConfigurationListReferences(configurationList,\n                                                    identifiers: identifiers)\n        }\n\n        // Build phases\n        let buildPhases: [PBXBuildPhase] = target.buildPhaseReferences.objects()\n        try buildPhases.forEach({ try generateBuildPhaseReferences($0,\n                                                                   identifiers: identifiers) })\n\n        // Build rules\n        let buildRules: [PBXBuildRule] = target.buildRuleReferences.objects()\n        try buildRules.forEach({ try generateBuildRules($0, identifiers: identifiers) })\n\n        // Dependencies\n        let dependencies: [PBXTargetDependency] = target.dependencyReferences.objects()\n        try dependencies.forEach({ try generateTargetDependencyReferences($0, identifiers: identifiers) })\n    }\n\n    /// Generates the reference for a target dependency object.\n    ///\n    /// - Parameters:\n    ///   - targetDependency: target dependency instance.\n    ///   - identifiers: list of identifiers.\n    private func generateTargetDependencyReferences(_ targetDependency: PBXTargetDependency,\n                                                    identifiers: [String]) throws {\n        var identifiers = identifiers\n\n        // Target proxy\n        if let targetProxyReference = targetDependency.targetProxyReference,\n            targetProxyReference.temporary,\n            let targetProxy = targetDependency.targetProxy,\n            let remoteGlobalIDReference = targetProxy.remoteGlobalIDReference {\n            var identifiers = identifiers\n            identifiers.append(remoteGlobalIDReference.value)\n            fixReference(for: targetProxy, identifiers: identifiers)\n        }\n\n        // Target dependency\n        if targetDependency.reference.temporary {\n            if let targetReference = targetDependency.targetReference?.value {\n                identifiers.append(targetReference)\n            }\n            if let targetProxyReference = targetDependency.targetProxyReference?.value {\n                identifiers.append(targetProxyReference)\n            }\n            fixReference(for: targetDependency, identifiers: identifiers)\n        }\n    }\n\n    /// Generates the reference for a build phase object.\n    ///\n    /// - Parameters:\n    ///   - buildPhase: build phase instance.\n    ///   - identifiers: list of identifiers.\n    private func generateBuildPhaseReferences(_ buildPhase: PBXBuildPhase,\n                                              identifiers: [String]) throws {\n        var identifiers = identifiers\n        if let name = buildPhase.name() {\n            identifiers.append(name)\n        }\n\n        // Build phase\n        fixReference(for: buildPhase, identifiers: identifiers)\n\n        // Build files\n        buildPhase.fileReferences.forEach { buildFileReference in\n            if !buildFileReference.temporary { return }\n\n            guard let buildFile: PBXBuildFile = buildFileReference.getObject() else { return }\n\n            var identifiers = identifiers\n\n            if let fileReference = buildFile.fileReference,\n                let fileReferenceObject: PBXObject = fileReference.getObject() {\n                identifiers.append(fileReferenceObject.reference.value)\n            }\n\n            fixReference(for: buildFile, identifiers: identifiers)\n        }\n    }\n\n    /// Generates the reference for a build rule object.\n    ///\n    /// - Parameters:\n    ///   - buildRule: build phase instance.\n    ///   - identifiers: list of identifiers.\n    private func generateBuildRules(_ buildRule: PBXBuildRule,\n                                    identifiers: [String]) throws {\n        var identifiers = identifiers\n        if let name = buildRule.name {\n            identifiers.append(name)\n        }\n\n        // Build rule\n        fixReference(for: buildRule, identifiers: identifiers)\n    }\n}\n\nextension ReferenceGenerator {\n    /// Given a list of identifiers, it generates a deterministic reference for a PBXObject.\n    ///\n    /// - Parameters:\n    ///   - object: The object to generate a reference for\n    ///   - identifiers: list of identifiers used to generate the reference of the object.\n    func fixReference<T: PBXObject>(for object: T,\n                                    identifiers: [String]) {\n        if object.reference.temporary {\n            var identifiers = identifiers\n            if let context = object.context {\n                identifiers.append(context)\n            }\n            let typeName = String(describing: type(of: object))\n\n            // Get acronym to be used as prefix for the reference.\n            // PBXFileReference is turned to FR.\n            let acronym = typeName\n                .replacingOccurrences(of: \"PBX\", with: \"\")\n                .replacingOccurrences(of: \"XC\", with: \"\")\n                .filter { String($0).lowercased() != String($0) }\n\n            var reference = \"\"\n            var counter = 0\n            // Get the first reference that doesn't already exist\n            repeat {\n                counter += 1\n                reference = generateReferenceFrom(acronym: acronym,\n                                                  typeName: typeName,\n                                                  identifiers: identifiers,\n                                                  counter: counter)\n            } while references.contains(reference)\n            references.insert(reference)\n            object.reference.fix(reference)\n        }\n    }\n\n    private func generateReferenceFrom(acronym: String,\n                                       typeName: String,\n                                       identifiers: [String],\n                                       counter: Int) -> String {\n        let typeNameAndIdentifiers = ([typeName] + identifiers).joined(separator: \"-\")\n        switch outputSettings.projReferenceFormat {\n        case .withPrefixAndSuffix:\n            let base = \"\\(acronym)_\\(typeNameAndIdentifiers.md5.uppercased())\"\n            if counter > 1 {\n                return \"\\(base)_\\(counter)\"\n            } else {\n                return base\n            }\n        case .xcode:\n            return \"\\(acronym)_\\(typeNameAndIdentifiers)_\\(counter)\".md5.uppercased()\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Utils/XCConfig.swift",
    "content": "import Foundation\nimport PathKit\n\npublic typealias XCConfigInclude = (include: Path, config: XCConfig)\n\n/// .xcconfig configuration file.\npublic final class XCConfig {\n    // MARK: - Attributes\n\n    /// Configuration file includes.\n    public var includes: [XCConfigInclude]\n\n    /// Build settings\n    public var buildSettings: BuildSettings\n\n    // MARK: - Init\n\n    /// Initializes the XCConfig file with its attributes.\n    ///\n    /// - Parameters:\n    ///   - includes: all the .xcconfig file includes. The order determines how the values get overriden.\n    ///   - dictionary: dictionary that contains the config.\n    public init(includes: [XCConfigInclude], buildSettings: BuildSettings = [:]) {\n        self.includes = includes\n        self.buildSettings = buildSettings\n    }\n\n    /// Initializes the XCConfig reading the content from the file at the given path and parsing it.\n    ///\n    /// - Parameter path: path where the .xcconfig file is.\n    /// - Parameter projectPath: path where the .xcodeproj is, for resolving project-relative includes.\n    /// - Throws: an error if the config file cannot be found or it has an invalid format.\n    public init(path: Path, projectPath: Path? = nil) throws {\n        if !path.exists { throw XCConfigError.notFound(path: path) }\n        let fileLines = try path.read().components(separatedBy: \"\\n\")\n        includes = fileLines\n            .compactMap(XCConfigParser.configFrom(path: path, projectPath: projectPath))\n        var buildSettings: [String: String] = [:]\n        fileLines\n            .compactMap(XCConfigParser.settingFrom)\n            .forEach { buildSettings[$0.key] = $0.value }\n        self.buildSettings = buildSettings\n    }\n}\n\nfinal class XCConfigParser {\n    /// Given the path the line is being parsed from, it returns a function that parses a line,\n    /// and returns the include path and the config that the include is pointing to.\n    ///\n    /// - Parameter path: path of the config file that the line belongs to.\n    /// - Parameter projectPath: path where the .xcodeproj is, for resolving project-relative includes.\n    /// - Returns: function that parses the line.\n    static func configFrom(path: Path, projectPath: Path?) -> (String) -> (include: Path, config: XCConfig)? {\n        return { line in\n            includeRegex.matches(in: line,\n                                 options: [],\n                                 range: NSRange(location: 0,\n                                                length: line.count))\n                .compactMap { (match) -> String? in\n                    if match.numberOfRanges == 2 {\n                        return NSString(string: line).substring(with: match.range(at: 1))\n                    }\n                    return nil\n                }\n                .compactMap { pathString in\n                    let includePath: Path = Path(pathString)\n                    var config: XCConfig?\n                    do {\n                        // first try to load the included xcconfig relative to the current xcconfig\n                        config = try XCConfig(path: path.parent() + includePath, projectPath: projectPath)\n                    } catch (XCConfigError.notFound(_)) where projectPath != nil {\n                        // if that fails, try to load the included xcconfig relative to the project\n                        config = try? XCConfig(path: projectPath!.parent() + includePath, projectPath: projectPath)\n                    } catch {\n                        config = nil\n                    }\n                    return config.map { (includePath, $0) }\n                }\n                .first\n        }\n    }\n\n    static func settingFrom(line: String) -> (key: String, value: String)? {\n        return settingRegex.matches(in: line,\n                                    options: [],\n                                    range: NSRange(location: 0,\n                                                   length: line.count))\n            .compactMap { (match) -> (key: String, value: String)? in\n                if match.numberOfRanges == 3 {\n                    let key: String = NSString(string: line).substring(with: match.range(at: 1))\n                    let value: String = NSString(string: line).substring(with: match.range(at: 2))\n                    return (key, value)\n                }\n                return nil\n            }\n            .first\n    }\n\n    // swiftlint:disable:next force_try\n    private static var includeRegex = try! NSRegularExpression(pattern: \"#include\\\\s+\\\"(.+\\\\.xcconfig)\\\"\", options: .caseInsensitive)\n    // swiftlint:disable:next force_try\n    private static var settingRegex = try! NSRegularExpression(pattern: \"^([a-zA-Z0-9_\\\\[\\\\]=\\\\*~]+)\\\\s*=\\\\s*(\\\"?.*?\\\"?)\\\\s*(?:;\\\\s*)?$\", options: [])\n}\n\n// MARK: - XCConfig Extension (Equatable)\n\nextension XCConfig: Equatable {\n    public static func == (lhs: XCConfig, rhs: XCConfig) -> Bool {\n        if lhs.includes.count != rhs.includes.count { return false }\n        for index in 0 ..< lhs.includes.count {\n            let lhsInclude = lhs.includes[index]\n            let rhsInclude = rhs.includes[index]\n            if lhsInclude.config != rhsInclude.config || lhsInclude.include != rhsInclude.include {\n                return false\n            }\n        }\n        return NSDictionary(dictionary: lhs.buildSettings).isEqual(to: rhs.buildSettings)\n    }\n}\n\n// MARK: - XCConfig Extension (Helpers)\n\nextension XCConfig {\n    /// It returns the build settings after flattening all the includes.\n    ///\n    /// - Returns: build settings flattening all the includes.\n    public func flattenedBuildSettings() -> [String: Any] {\n        var content: [String: Any] = buildSettings\n        includes\n            .map { $0.1 }\n            .flattened()\n            .map { $0.buildSettings }\n            .forEach { configDictionary in\n                configDictionary.forEach { key, value in\n                    if content[key] == nil { content[key] = value }\n                }\n            }\n        return content\n    }\n}\n\n// MARK: - XCConfig Extension (Writable)\n\nextension XCConfig: Writable {\n    public func write(path: Path, override: Bool) throws {\n        var content = \"\"\n        content.append(writeIncludes())\n        content.append(\"\\n\")\n        content.append(writeBuildSettings())\n        if override, path.exists {\n            try path.delete()\n        }\n        try path.write(content)\n    }\n\n    private func writeIncludes() -> String {\n        var content = \"\"\n        includes.forEach { include in\n            content.append(\"#include \\\"\\(include.0.string)\\\"\\n\")\n        }\n        content.append(\"\\n\")\n        return content\n    }\n\n    private func writeBuildSettings() -> String {\n        var content = \"\"\n        buildSettings.forEach { key, value in\n            content.append(\"\\(key) = \\(value)\\n\")\n        }\n        content.append(\"\\n\")\n        return content\n    }\n}\n\n// MARK: - Array Extension (XCConfig)\n\nextension Array where Element == XCConfig {\n    /// It returns an array with the XCConfig reversely flattened. It's useful for resolving the build settings.\n    ///\n    /// - Returns: flattened configurations array.\n    func flattened() -> [XCConfig] {\n        let reversed = self.reversed()\n            .flatMap { (config) -> [XCConfig] in\n                var configs = [XCConfig(includes: [], buildSettings: config.buildSettings)]\n                configs.append(contentsOf: config.includes.map { $0.1 }.flattened())\n                return configs\n            }\n        return reversed\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Workspace/XCWorkspace.swift",
    "content": "import Foundation\nimport PathKit\n\n/// Model that represents a Xcode workspace.\npublic final class XCWorkspace: Writable, Equatable {\n    /// Workspace data\n    public var data: XCWorkspaceData\n\n    // MARK: - Init\n\n    /// Initializes the workspace with the path where the workspace is.\n    /// The initializer will try to find an .xcworkspacedata inside the workspace.\n    /// If the .xcworkspacedata cannot be found, the init will fail.\n    ///\n    /// - Parameter path: .xcworkspace path.\n    /// - Throws: throws an error if the workspace cannot be initialized.\n    public convenience init(path: Path) throws {\n        if !path.exists {\n            throw XCWorkspaceError.notFound(path: path)\n        }\n        let xcworkspaceDataPaths = path.glob(\"*.xcworkspacedata\")\n        if xcworkspaceDataPaths.isEmpty {\n            self.init()\n        } else {\n            try self.init(data: XCWorkspaceData(path: xcworkspaceDataPaths.first!))\n        }\n    }\n\n    /// Initializes a default workspace with a single reference that points to self:\n    public convenience init() {\n        let data = XCWorkspaceData(children: [.file(.init(location: .self(\"\")))])\n        self.init(data: data)\n    }\n\n    /// Initializes the workspace with the path string.\n    ///\n    /// - Parameter pathString: path string.\n    /// - Throws: throws an error if the initialization fails.\n    public convenience init(pathString: String) throws {\n        try self.init(path: Path(pathString))\n    }\n\n    /// Initializes the workspace with its properties.\n    ///\n    /// - Parameters:\n    ///   - data: workspace data.\n    public init(data: XCWorkspaceData) {\n        self.data = data\n    }\n\n    // MARK: - Writable\n\n    public func write(path: Path, override: Bool = true) throws {\n        let dataPath = path + \"contents.xcworkspacedata\"\n        if override, dataPath.exists {\n            try dataPath.delete()\n        }\n        try dataPath.mkpath()\n        try data.write(path: dataPath)\n    }\n\n    // MARK: - Equatable\n\n    public static func == (_: XCWorkspace, rhs: XCWorkspace) -> Bool {\n        return rhs.data == rhs.data\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Workspace/XCWorkspaceData.swift",
    "content": "import AEXML\nimport Foundation\nimport PathKit\n\npublic final class XCWorkspaceData {\n    public var children: [XCWorkspaceDataElement]\n\n    public init(children: [XCWorkspaceDataElement]) {\n        self.children = children\n    }\n}\n\nextension XCWorkspaceData: Equatable {\n    public static func == (_: XCWorkspaceData, rhs: XCWorkspaceData) -> Bool {\n        return rhs.children == rhs.children\n    }\n}\n\nextension XCWorkspaceData: Writable {\n    /// Initializes the workspace with the path where the workspace is.\n    /// The initializer will try to find an .xcworkspacedata inside the workspace.\n    /// If the .xcworkspacedata cannot be found, the init will fail.\n    ///\n    /// - Parameter path: .xcworkspace path.\n    /// - Throws: throws an error if the workspace cannot be initialized.\n    public convenience init(path: Path) throws {\n        if !path.exists {\n            throw XCWorkspaceDataError.notFound(path: path)\n        }\n\n        let xml = try AEXMLDocument(xml: path.read())\n        let children = try xml\n            .root\n            .children\n            .compactMap(XCWorkspaceDataElement.init(element:))\n\n        self.init(children: children)\n    }\n\n    // MARK: - <Writable>\n\n    public func write(path: Path, override: Bool = true) throws {\n        let document = AEXMLDocument()\n        let workspace = document.addChild(name: \"Workspace\", value: nil, attributes: [\"version\": \"1.0\"])\n        _ = children\n            .map({ $0.xmlElement() })\n            .map(workspace.addChild)\n\n        if override, path.exists {\n            try path.delete()\n        }\n        try path.write(document.xmlXcodeFormat)\n    }\n}\n\n// MARK: - XCWorkspaceDataElement AEXMLElement decoding and encoding\n\nprivate extension XCWorkspaceDataElement {\n    init(element: AEXMLElement) throws {\n        switch element.name {\n        case \"FileRef\":\n            self = try .file(XCWorkspaceDataFileRef(element: element))\n        case \"Group\":\n            self = try .group(XCWorkspaceDataGroup(element: element))\n        default:\n            throw Error.unknownName(element.name)\n        }\n    }\n\n    func xmlElement() -> AEXMLElement {\n        switch self {\n        case let .file(fileRef):\n            return fileRef.xmlElement()\n        case let .group(group):\n            return group.xmlElement()\n        }\n    }\n}\n\n// MARK: - XCWorkspaceDataGroup AEXMLElement decoding and encoding\n\nprivate extension XCWorkspaceDataGroup {\n    enum Error: Swift.Error {\n        case wrongElementName\n        case missingLocationAttribute\n    }\n\n    convenience init(element: AEXMLElement) throws {\n        guard element.name == \"Group\" else {\n            throw Error.wrongElementName\n        }\n        guard let location = element.attributes[\"location\"] else {\n            throw Error.missingLocationAttribute\n        }\n        let locationType = try XCWorkspaceDataElementLocationType(string: location)\n        let name = element.attributes[\"name\"]\n        let children = try element.children.map(XCWorkspaceDataElement.init(element:))\n        self.init(location: locationType, name: name, children: children)\n    }\n\n    func xmlElement() -> AEXMLElement {\n        var attributes = [\"location\": location.description]\n        attributes[\"name\"] = name\n        let element = AEXMLElement(name: \"Group\", value: nil, attributes: attributes)\n\n        _ = children\n            .map({ $0.xmlElement() })\n            .map(element.addChild)\n\n        return element\n    }\n}\n\n// MARK: - XCWorkspaceDataFileRef AEXMLElement decoding and encoding\n\nprivate extension XCWorkspaceDataFileRef {\n    enum Error: Swift.Error {\n        case wrongElementName\n        case missingLocationAttribute\n    }\n\n    convenience init(element: AEXMLElement) throws {\n        guard element.name == \"FileRef\" else {\n            throw Error.wrongElementName\n        }\n        guard let location = element.attributes[\"location\"] else {\n            throw Error.missingLocationAttribute\n        }\n        self.init(location: try XCWorkspaceDataElementLocationType(string: location))\n    }\n\n    func xmlElement() -> AEXMLElement {\n        return AEXMLElement(name: \"FileRef\",\n                            value: nil,\n                            attributes: [\"location\": location.description])\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Workspace/XCWorkspaceDataElement.swift",
    "content": "import Foundation\n\npublic enum XCWorkspaceDataElement {\n    public enum Error: Swift.Error {\n        case unknownName(String)\n    }\n\n    case file(XCWorkspaceDataFileRef)\n    case group(XCWorkspaceDataGroup)\n}\n\nextension XCWorkspaceDataElement: Equatable {\n    public static func == (lhs: XCWorkspaceDataElement, rhs: XCWorkspaceDataElement) -> Bool {\n        switch (lhs, rhs) {\n        case let (.file(lhs), .file(rhs)):\n            return lhs == rhs\n        case let (.group(lhs), .group(rhs)):\n            return lhs == rhs\n        default:\n            return false\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Workspace/XCWorkspaceDataElementLocationType.swift",
    "content": "import Foundation\n\npublic enum XCWorkspaceDataElementLocationType {\n    public enum Error: Swift.Error {\n        case missingSchema\n    }\n\n    case absolute(String) // \"Absolute path\"\n    case container(String) // \"Relative to container\"\n    case developer(String) // \"Relative to Developer Directory\"\n    case group(String) // \"Relative to group\"\n    case `self`(String) // Single project workspace in xcodeproj directory\n    case other(String, String)\n\n    public var schema: String {\n        switch self {\n        case .absolute:\n            return \"absolute\"\n        case .container:\n            return \"container\"\n        case .developer:\n            return \"developer\"\n        case .group:\n            return \"group\"\n        case .self:\n            return \"self\"\n        case let .other(schema, _):\n            return schema\n        }\n    }\n\n    public var path: String {\n        switch self {\n        case let .absolute(path):\n            return path\n        case let .container(path):\n            return path\n        case let .developer(path):\n            return path\n        case let .group(path):\n            return path\n        case let .self(path):\n            return path\n        case let .other(_, path):\n            return path\n        }\n    }\n\n    public init(string: String) throws {\n        let elements = string.split(separator: \":\", maxSplits: 1, omittingEmptySubsequences: false)\n        guard let schema = elements.first.map(String.init) else {\n            throw Error.missingSchema\n        }\n        let path = String(elements.last ?? \"\")\n        switch schema {\n        case \"absolute\":\n            self = .absolute(path)\n        case \"container\":\n            self = .container(path)\n        case \"developer\":\n            self = .developer(path)\n        case \"group\":\n            self = .group(path)\n        case \"self\":\n            self = .self(path)\n        default:\n            self = .other(schema, path)\n        }\n    }\n}\n\nextension XCWorkspaceDataElementLocationType: CustomStringConvertible {\n    public var description: String {\n        return \"\\(schema):\\(path)\"\n    }\n}\n\nextension XCWorkspaceDataElementLocationType: Equatable {\n    public static func == (lhs: XCWorkspaceDataElementLocationType, rhs: XCWorkspaceDataElementLocationType) -> Bool {\n        switch (lhs, rhs) {\n        case let (.absolute(lhs), .absolute(rhs)):\n            return lhs == rhs\n        case let (.container(lhs), .container(rhs)):\n            return lhs == rhs\n        case let (.developer(lhs), .developer(rhs)):\n            return lhs == rhs\n        case let (.group(lhs), .group(rhs)):\n            return lhs == rhs\n        case let (.self(lhs), .self(rhs)):\n            return lhs == rhs\n        case let (.other(lhs), .other(rhs)):\n            return lhs.0 == rhs.0 && lhs.1 == rhs.1\n        default: return false\n        }\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Workspace/XCWorkspaceDataFileRef.swift",
    "content": "import Foundation\n\npublic final class XCWorkspaceDataFileRef {\n    public var location: XCWorkspaceDataElementLocationType\n\n    public init(location: XCWorkspaceDataElementLocationType) {\n        self.location = location\n    }\n}\n\nextension XCWorkspaceDataFileRef: Equatable {\n    public static func == (lhs: XCWorkspaceDataFileRef, rhs: XCWorkspaceDataFileRef) -> Bool {\n        return lhs.location == rhs.location\n    }\n}\n"
  },
  {
    "path": "Dependencies/tuist∕xcodeproj-6.6.0/Workspace/XCWorkspaceDataGroup.swift",
    "content": "import Foundation\n\npublic final class XCWorkspaceDataGroup {\n    public var location: XCWorkspaceDataElementLocationType\n    public var name: String?\n    public var children: [XCWorkspaceDataElement]\n\n    public init(location: XCWorkspaceDataElementLocationType, name: String?, children: [XCWorkspaceDataElement]) {\n        self.location = location\n        self.name = name\n        self.children = children\n    }\n}\n\nextension XCWorkspaceDataGroup: Equatable {\n    public static func == (lhs: XCWorkspaceDataGroup, rhs: XCWorkspaceDataGroup) -> Bool {\n        return lhs.location == rhs.location &&\n            lhs.name == rhs.name &&\n            lhs.children == rhs.children\n    }\n}\n"
  },
  {
    "path": "Documents/Advanced-Module-Hierarchies.md",
    "content": "# Advanced Module Hierarchies\n\nThere are some additional rules for hierarchies:\n\n    .\n    └ Sources\n      └ Model\n        ├ foo.swift\n        ├ Module1\n        │ ├ a.swift\n        │ └ b.swift\n        └ Module2\n          ├ c.swift\n          └ d.swift\n\nHere `foo.swift` is part of the “base” module that by default is called\n`Bakeware`, all modules depend on the base-module.\n\n    .\n    └ Sources\n      └ Model\n        ├ Module1\n        │ ├ a.swift\n        │ └ b.swift\n        └ Module2\n          ├ c.swift\n          └ d.swift\n\nHere there is no “base” module. `Module1` cannot not import `Module2`.\n\n    .\n    └ Sources\n      └ Model\n        ├ Module1\n        │ ├ a.swift\n        │ └ b.swift\n        │ └ Module3\n        │   ├ c.swift\n        │   └ d.swift\n        └ Module2\n          ├ c.swift\n          └ d.swift\n\n`Module3` has a direct dependency on `Module1`, but also depends on (and can\nimport) `Module1`. A module can always import all of the modules at the level\nbelow it. The direct-dependency is your choice and suggests a closer\nrelationship.\n\n    .\n    └ Sources\n      └ Model\n        ├ Module1\n        │ ├ a.swift\n        │ ├ b.swift\n        │ └ Module3\n        │   ├ c.swift\n        │   └ d.swift\n        └ Module2\n          ├ c.swift\n          ├ d.swift\n          └ Module4\n            ├ c.swift\n            └ d.swift\n\n`Module3` **cannot** import `Module4`.\n\n    .\n    └ Sources\n      └ Model\n        └ Module1\n          ├ a.swift\n          ├ b.swift\n          └ Gap\n          | └ Module2\n          |   ├ c.swift\n          |   └ d.swift\n          └ Module2\n            ├ c.swift\n            └ d.swift\n\nHere because of the empty `Gap` folder, `Module2` cannot import `Module1`, but\nstill depends on `Module1`. Use gaps where you want to insulate some dependency\nrelationships.\n"
  },
  {
    "path": "Documents/Cakefile.md",
    "content": "# The Cakefile\n\nYour Cakefile defines your dependencies, and some other properties of your\ngenerated project.\n\n## The `import`\n\nYou need the `import`:\n\n```swift\nimport Cakefile\n```\n\n## Dependencies\n\n```swift\ndependencies = [\n    .github(\"mxcl/Path.swift\" ~> 0.9),\n    .git(\"https://mygit.place/repo\" == 2.4)\n]\n```\n\nIf you need more specific version specifications, this is possible:\n\n```swift\nlet branch = \"fix-remote-target-dependency\"\nvar xcodeproj = GitHubPackageSpecification(user: \"mxcl\", repo: \"xcodeproj\", constraint: .ref(.branch(branch)))\n\ndependencies.append(xcodeproj)\n\nlet foo = PackageSpecification(url: \"https://mygit.place/repo\", constraint: .ref(.branch(\"foo\")))\n\ndependencies.append(foo)\n```\n\n## Options\n\nWe provide some options that change the project generation properties:\n\n```swift\noptions.baseModuleName = \"Bakeware\"\n```\n\nThe `baseModuleName` is the name of the root module in your model.\n\n```swift\noptions.suppressDependencyWarnings = true\n```\n\nThis will suppress all warnings in your dependencies, it defaults to `true`\nsince you have no easy control over them.\n"
  },
  {
    "path": "Documents/FAQ.md",
    "content": "# FAQ\n\n## What does integration do?\n\nNot much.\n\n* We create a `.cake` directory and a `Cakefile.swift` (you can delete that if\n    you don’t want Cake to manage your dependencies) in your project directory.\n* It adds a “blue folder” in your Xcode project for your Model.\n* It adds a reference to `.cake/Cake.xcodeproj` in your Xcode project.\n* It makes your application-target link to `Cake.a` and depend on the `Cake`\n    target.\n* We add a few entries to your `.gitignore`\n\n## How do I deintegrate Cake?\n\n1. Delete `.cake`\n2. Delete `Cakefile.swift`\n3. Remove the `Cake.xcodeproj` reference from your project\n4. Remove the `Model` blue-folder from your project\n5. Remove the entries about Cake in your `.gitignore`\n\n## What should I commit?\n\nWe recommend committing `.cake` and `Dependencies`. This way anyone can\ncheck out your project and build your app, and they **don’t** need\nCake.app to do so.\n\nSpecifically ignore:\n\n`.cake/*.json`\n\nDevelopers working on your project will benefit from having Cake.app\ninstalled, but it *isn’t required*. Working on your project without\nCake.app means they will not get any of Cake’s automagical features, eg.\nbuildable model generation.\n\nIf you don’t want to commit anything that is generated then add `.cake` to your\n`.gitignore`. \n\n> Though this means you are also ignoring `.cake/Package.resolved` which\nis your dependency-pin-file, without this co-workers may have different versions\nof their dependencies to you which can make debugging issues harder. Note\nopen a PR to allow configuration of the location of this file in `Cakefile.swift`.\n\n## Should I commit my deps?\n\nYeah, you should.\n\nBecause your dependencies came from the Internet, and the Internet is not a\nconsistent or stable place. There is no guarantee your deps will exist next\nweek, tomorrow or even five seconds from now.\n\nWe should never forget [leftpad].\n\nAlso, committing your deps *guarantees* everyone on your team is using the same\ncodebase and not some subtely different set of dependencies.\n\nAnd committing your deps means people can clone your project and build it\nwithout needing any other tools.\n\n[leftpad]: https://arstechnica.com/information-technology/2016/03/rage-quit-coder-unpublished-17-lines-of-javascript-and-broke-the-internet/\n\n## I don’t want to use Cake for dependencies\n\nIt’s not mandatory. If you don’t specify dependencies in your `Cakefile`\neverything works fine and there any ugly build artifacts are either deleted or\nnever created. You could even delete your `Cakefile`.\n\n## Why can modules import ancestors?\n\nWhat we mean is, for the following:\n\n    .\n    ├─ Foo \n    │   ├─ Bar\n    │   └─ Baz\n    └─ Faz\n\nFoo can `import Bar`. Strictly this does not work for a clean build, Xcode will\nfail to find the module in that case.\n\nThis happens because the modules are all built to the same directory so they\ncan see each other.\n\nWe should be able to fix this and [plan to](../../issues/13).\n\n## What Swift version is used for compiling modules?\n\nIt is extracted from your base project. Dependencies specify their own Swift\nversions.\n\n## How do I stay up‐to‐date?\n\nFollow [mxcl](https://twitter.com/mxcl) on Twitter, he strictly only tweets\nabout Cake, Swift and Open Source.\n\n## Can I make dependencies “editable”?\n\nYes, this is a SwiftPM feature and since we use SwiftPM for dependency\nmangement, it’s the same:\n\n```bash\nswift package --package-path .cake --build-path .cake/swift-pm edit foo\n```\n\nYou will need to force a manual regeneration, ([this is a bug](../../issues/new?title=editable-deps)) but\nafter that you will be able to edit the package in Xcode.\n\nMake sure you push your changes and make a pull-request!\n"
  },
  {
    "path": "Documents/Suggested-Usage.md",
    "content": "# Suggested Usage\n\n## 1\n\n`import` precise Batter modules from within Batter modules. In your app\n`import Cake`. In Batter import `Dependencies`. This means you are being aware\nof the right relative encapsulation when working in the different parts of your\nproject. Trying to keep all the different levels in mind at all times is a waste\nof cognitive load better spent figuring out your actual code.\n\nBeing precise in your models means you are acutely aware of your internal\ndependency graph.\n\n## 2\n\nBe judicious with modules. This allows you to use internal access control\nliberally and have eg. an Error enum per module. If you find yourself needing\nmore than one error enum, maybe this is a hint that it's time to figure out\nwhere to split this module into two. \n\n## Precisely specify `import`s\n\nIf you are only using a small portion of a module specify that, for \nexample, don’t:\n\n```swift\nimport Foo\n```\n\nInstead:\n\n```\nimport enum Foo.Bar\n```\n\nThis is instructive to you and others using your code, that this file is\nonly concerned with a portion of module `Foo`; not its entirety.\n\nIf you start importing more and more then switch to `import Foo`, since\nyou are wasting your reader’s time, and also, you now use the majority\nof `Foo`.\n\nUse your judgement: this suggestion is a legibility aid.\n\n## Model Purity\n\nAttempt to keep your model “pure”, that is, do not manipulate global state,\nthis includes `UserDefaults`, and controlling the implementations of how\ninput and output occur.\n\nObviously within reason, it would be a pretty lame database module that\ncouldn’t persist and fetch data. Apply this suggestion with common sense.\n\n## Xcode navigation\n\nWe provide a blue folder for your Model that is the direct directory structure,\nwith this you can see the module heriarchy.\n\nIn the embedded Cake.xcodeproj there is also a flat, topologically sorted module\nlisting.\n\nUse both (along with `⌘⇧O`) when navigating your module structures.\n"
  },
  {
    "path": "Documents/Troubleshooting.md",
    "content": "Please note, most of the solutions are: **fully clean and then restart Xcode**.\n\n# Troubleshooting\n\nXcode builds modules in parallel, it is able to build modules before their\ndependencies have finished building to a certain extent. This results in\nspurious errors being output during builds that will later disappear. So the\nfirst rule is:\n\n**Let the build finish before reacting to errors that don’t make sense**\n\nGenerally it can help to create schemes for Batter or even individual modules in\nBatter and build those individually, this will stop Xcode surfacing the wrong\nerrors, and often, deleting the errors that are actually the root cause. *sigh* \n\nXcode 10 seems buggy when it comes to reloading changed projects from disk. If\nproject navigator is wrong, restart Xcode.\n\nYou may get errors in dependent modules when trying to use new API from higher\nmodules. Xcode doesn’t know about the changes you make in higher modules in the\nlower ones until you build. So: `⌘B`.\n\n## Beach-balling\n\nCake 1.0.0 is not multi-threaded (I know: lol), so give it a bit, it can take\nminutes if it is checking out deps.\n\n## Changes are not present in build\n\nSadly Xcode 10.2 seems to have a bug where static libraries that are themselves \njust accumulations of other static libraries are not always rebuilt. The only\neasy solution is cleaning the build :( Or you can open the build folder and\ndelete `Cake.a`, `Batter.a` and the `.a` for the module you changed and then\nbuild.\n\nIf this isn’t fixed for 10.2 GM we will build a single Cake.framework instead\n(for debug builds) which should fix it.\n\n## No syntax highlighting in new files\n\nXcode 10 regressed many aspects of “blue folder” work. One of which is where\nsyntax highlighting and completion will sometimes not work in new files.\nRestart Xcode.\n\n## No such module 'Foo'\n\nThis error is misleading, it actually means a dependency of Foo failed to build.\nLook at the other errors Xcode is showing you, at least one will concern a\ndependency of Foo, and that is the error you need to tackle.\n\n## “Find selected symbol in workspace” doesn’t work\n\nXcode only searches within the currently selected scheme, eg. if you want to\nsearch in your iOS app and the macOS app is selected it will only find references\nin the macOS codebase. This is an unfortunate “feature” of Xcode.\n\n## No autocomplete when typing `import foo` in Model module\n\nWe have no known workaround for this yet, if you have one, please submit. For\nnow, type it, the import will succeed if the module exists and your dependency\nheirarchy is correct.\n\n## New Blue Folders Empty in Xcode 10.x\n\nXcode 10.x broke blue folders pretty substantially, if you blue folders are\nempty but do *actually* contains files, restart Xcode.\n\n## Regeneration doesn’t produce new Batter modules\n\nXcode 10.x is broken, we *did* regenerate the modules, but Xcode is ignoring the\nchanges. Fully clean and then restart Xcode.\n"
  },
  {
    "path": "LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "![Cake](../gh-pages/Cake.png)\n\n**We are aware of Xcode 11, probably don’t commit to Cake at this time**\n\nModules are a powerful Swift feature, yet existing tooling makes modulizing your\nprojects *so* tedious that most people don’t bother.\n\nA modular app gains:\n\n* **Encapsulation**. Internal scope is a criminally under-utilized Swift feature\n    that makes encapsulation significantly more achievable.\n* **Namespacing**. Modules have an implicit namespace; fear not about reusing\n    names, modulize instead.\n* **Hierarchy**. Once you start creating modules you automatically\n    arrange them so that some have more importance than others.\n    This naturally leads to a *structured* codebase where new files nestle into\n    their logical, encapsulated homes, *effortlessly*.\n* **Organization**. You no longer have to cram everything concerning an area of\n    responsibility into a single file to gain from file-private. Instead\n    separate all that code out into multiple files in its own module and use\n    `internal` access control.\n* **Testability**. Making a piece of functionality its own module means you can\n    make more of that module internal scope rather than private and this means\n    more of the module can be imported `@testable` making the functionality\n    easier to test without adopting practices that make your code less readable\n    for the sake of testing (like injection).\n\nCake makes working with Swift modules *a breeze*.\n\n# Xcode 10.2-beta Required\n\nSupporting Swift tools-version-5 and tools-version-4 is not our thing. Cake\nrequires at least Xcode 10.2 to function.\n\n# Support Cake’s development\n\nHey there, I’m Max Howell, a prolific producer of open source software and\nprobably you already use some of it (I created [`brew`]). I work full-time on\nopen source and it’s hard; currently *I earn less than minimum wage*. Please\nhelp me continue my work, I appreciate it 🙏🏻\n\n<a href=\"https://www.patreon.com/mxcl\">\n\t<img src=\"https://c5.patreon.com/external/logo/become_a_patron_button@2x.png\" width=\"160\">\n</a>\n\n[Other ways to say thanks](http://mxcl.dev/#donate).\n\n[`brew`]: https://brew.sh\n\n# How it works\n\n> “The secret of getting ahead is getting started. The secret of getting started\n> is breaking your complex overwhelming tasks into small, manageable tasks, and\n> then starting on the first one.” —*Mark Twain*\n\nCake is an app that runs in your menu bar and watches your Xcode projects. If\nyou chose to integrate Cake into your App’s xcodeproj it will automatically\ngenerate your module hierarchy based on your directory structure. For example:\n\n    .\n    └ Sources\n      └ Model\n        ├ Module1\n        │ ├ a.swift\n        │ └ b.swift\n        └ Module2\n          ├ c.swift\n          └ d.swift\n\nNow **⌘B** and you’ll be able to `import`:\n\n```swift\nimport Module1\nimport Module2\n```\n\n> **FAQ**: What is a cake project? A Cake project has a `Cakefile.swift` file \n> in its root.\n\n> **Delicious**: All your modules are built *statically* so there’s no\n> launch-time consequences.\n\n> **Curious?** Cake is made with Cake, so is [Workbench], check out the sources\n> to see more about what a cake‐project looks like.\n\n> **Details**: Cake generates a sub-project (Cake.xcodeproj), you *lightly*\n> integrate this into your app’s project.\n\n[Workbench]: https://github.com/mxcl/Workbench\n\n## Module hierarchies\n\n> “You’ve got to think about the big things while you’re doing small things, so\n> that all the small things go in the right direction.” —*Alvin Toffler*\n\nBefore long you will need some modules to depend on others. This is an important\nstep since you are starting to acknowledge the relationships between components\nin your codebase. Cake makes declaring dependencies as easy as nesting\ndirectories.\n\n    .\n    └ Sources\n      └ Model\n        └ Base\n          ├ a.swift\n          ├ b.swift\n          └ Foo\n            ├ c.swift\n            └ d.swift\n\nHere `Foo` depends on `Base` and thus, `Foo` can *now* import `Base`.\n\n*All* other tools require you to specify relationships *cryptically*, either\ntextually or with a confounding GUI. With Cake, use the filesystem,\nrelationships are not only easy to read, but also, trivial to refactor (just\nmove the directory).\n\n> **Further Reading**: [Advanced module hierarchies](Documents/Advanced-Module-Hierarchies.md)\n\n> **FAQ**: What should go in your `Base` module? Cake’s `Base` module contains\n> extensions on the standard library.\n\n## Dependencies\n\n> “You can do anything, but not everything.” —*David Allen*\n\nCake makes using Swift packages in Xcode easy. Write out your\n[`Cakefile`](Documents/Cakefile.md), **⌘B**, Cake fetches your deps and\nintegrates them: no muss, no fuss.\n\n```swift\nimport Cakefile\n\ndependencies = [\n    .github(\"mxcl/Path.swift\" ~> 0.8),\n    .github(\"Weebly/OrderedSet\" ~> 3),\n]\n\n// ^^ naturally, using Cake to manage your deps is entirely optional\n```\n\nWe figure out your deployment targets, we make your deps available to *all* your\ntargets and we generate a stub module that imports all your deps in one line\n(`import Dependencies`).\n\nWe check out your dependencies *tidily*, for example the above `Cakefile` gives\nyou:\n\n    .\n    └ Dependencies\n      ├ mxcl/Path.swift-0.8.0\n      │ ├ Path.swift\n      │ └ …\n      └ Weebly∕OrderedSet-3.1.0.swift\n\nWhich generates this in your `Cake.xcodeproj`:\n\n<img src='../gh-pages/Screenshot.Deps.png' width='269.5'>\n\nWhich you can then commit, *or not commit*: that’s up to you.\n[Though we suggest you do](Documents/FAQ.md#should-i-commit-my-deps).\n\n> **Delicious**: All dependency modules are built *statically* so there are no\n> launch-time consequences.\n\n> **Delicious**: A fresh clone of a Cake project builds with vanilla Xcode,\n> no other tools (even Cake) are required. Distribute away *without* worry!\n\n> **Delicious**: Cake finally makes it possible to use SwiftPM packages for iOS\n> development!\n\n> **FAQ**: [Should I commit my deps?](Documents/FAQ.md#should-i-commit-my-deps)\n\n> **Caveat**: We only support SwiftPM dependencies [*at this time*](../../issues/new?title=cocoapods).\n\n> **Further Reading**: [Cakefile Reference]\n\n[more with your Cakefile]: Documents/Cakefile.md\n\n### Carthage & CocoaPods\n\nIf your app uses Carthage or CocoaPods we detect that and integrate them so\nyour cake modules (the `Batter`) can use these dependencies.\n\nNote, this only applies to cake modules (the `Batter`); for your App target\nfollow the instructions provided by CocoaPods and Carthage themselves; nothing\nis different.\n\n### Op‐Ed—an era for Swift µ-frameworks?\n\nCocoaPods and Carthage libraries tend to be on the *large* side, and this is at\nleast partly because being modular has been historically hard and tedious when\ndeveloping for Apple platforms and Swift. SwiftPM encourages smaller, tighter\nframeworks and using Cake means making apps with Swift packages is now possible.\n\nChoose small, modular, single‐responsibility libraries with 100% code coverage\nthat take semantic-versioning **seriously**. Reject bloated libraries that don’t\nknow how to say no to feature requests.\n\n## Constructing frameworks/dylibs\n\nSince everything Cake builds is a static archive, you can simply link whichever\nparts you like into whatever Frameworks or dylibs you need for your final\nbinaries.\n\nThis is a purely optional step, statically linking `Cake.a` into your App (which\nCake sets up by default for you) is perfectly fine. This more advanced option is\navailable to make apps with extensions more optimal in terms of disk usage and\nmemory consumption.\n\n# Installation\n\n1. [Download it](../../releases).\n2. Run it.\n3. Check your menu bar:\n\n    <img src='../gh-pages/Screenshot.Integrate-Cake.png' width='431'>\n\n4. Open a project and integrate Cake; or\n5. Create a new Cake.\n\n    <img src='../gh-pages/Screenshot.New-Cake.png' width='431'>\n\n> **FAQ**: [What does integration do?](Documents/FAQ.md#what-does-integration-do)\n\n> **Delicious**: We auto-update!\n\n# Bonus Features\n\n## Extracting your app’s version from Git\n\nCake determines your App’s version from your git tags, to use them simply\nset each target’s “Version” to: `$(SEMANTIC_PROJECT_VERSION)` and if you\nlike the “Build” number to: `$(CURRENT_PROJECT_VERSION)`.\n\n> *Delicious!* We even append `-debug` to debug builds.\n\n## Xcode Remote Control \n\n<img src='../gh-pages/Screenshot.Xcode-Menu.png' width='724'>\n\n# Caveats\n\nDue to some Xcode bugs Cake is not a complete *Cake‐walk* in use. Please see our\n[troubleshooting](Documents/Troubleshooting.md) guide for details.\n\n# Documentation\n\n* Handbook\n  * [FAQ](Documents/FAQ.md)\n  * [Suggested Usage](Documents/Suggested-Usage.md)\n  * [Troubleshooting](Documents/Troubleshooting.md)\n* Reference\n  * [Cakefile Reference]\n  * [Advanced Module Hierarchies](Documents/Advanced-Module-Hierarchies.md)\n\n[Cakefile Reference]: Documents/Cakefile.md\n\n# Icons credit\n\nIcons made by [Google](https://www.flaticon.com/authors/google) and\n[Freepik](https://www.freepik.com) from\n[www.flaticon.com](https://www.flaticon.com) licensed by\n[CC 3.0 BY](http://creativecommons.org/licenses/by/3.0/).\n"
  },
  {
    "path": "Sources/AppKit/AppDelegate+NSMenu.swift",
    "content": "import AppKit\nimport Cake\n\nextension AppDelegate: NSMenuDelegate {\n    @objc func regenerate(sender: NSMenuItem) {\n        guard let index = sender.parent?.tag else {\n            return\n        }\n        do {\n            let cake = kitchen.cakes[index]\n            try cake.forceRegenerate()\n            kitchen(regenerated: cake) // shows notification\n        } catch {\n            alert(error)\n        }\n    }\n\n    func updateStatusItemMenu(cake: [CakeProject], notCake: [String]) {\n        func notCakeMenu(index: Int) -> NSMenu {\n            let menu = NSMenu()\n            menu.addItem(withTitle: \"Integrate Cake\", action: #selector(integrateCake), keyEquivalent: \"\")\n            return menu\n        }\n        func cakeMenu(for cake: CakeProject, index: Int) -> NSMenu {\n            let menu = NSMenu()\n            menu.addItem(withTitle: \"Update Dependencies\", action: #selector(updateDependencies), keyEquivalent: \"\")\n            menu.addItem(.separator())\n            menu.addItem(withTitle: \"Regenerate Cake.xcodeproj\", action: #selector(regenerate), keyEquivalent: \"\")\n            menu.addItem(withTitle: \"\", action: nil, keyEquivalent: \"\")\n//            menu.addItem(.separator())\n//            menu.addItem(withTitle: \"Deintegrate Cake\", action: #selector(deintegrateCake), keyEquivalent: \"\").tag = index\n            menu.delegate = self\n            return menu\n        }\n\n        menu.removeAllItems()\n        for (index, cake) in cake.enumerated() {\n            let item = menu.addItem(withTitle: cake.name, action: nil, keyEquivalent: \"\")\n            item.submenu = cakeMenu(for: cake, index: index)\n            item.tag = index\n        }\n        for (index, item) in notCake.enumerated() {\n            let item = menu.addItem(withTitle: item, action: nil, keyEquivalent: \"\")\n            item.submenu = notCakeMenu(index: index)\n            item.tag = index\n        }\n        if cake.isEmpty, notCake.isEmpty {\n            menu.addItem(withTitle: \"No Xcode projects open\", action: nil, keyEquivalent: \"\")\n        }\n        fillMenuBottom()\n    }\n\n    func fillMenuBottom() {\n        menu.addItem(.separator())\n        let newCake = menu.addItem(withTitle: \"New Cake\", action: nil, keyEquivalent: \"\")\n\n        let xcode = menu.addItem(withTitle: \"Xcode\", action: nil, keyEquivalent: \"\")\n        xcode.submenu = {\n            let menu = NSMenu(title: \"Xcode\")\n            let item = menu.addItem(withTitle: \"Open Active Project in Terminal\", action: #selector(openActiveWorkspaceInTerminal), keyEquivalent: \"t\")\n            item.keyEquivalentModifierMask = [.command, .option, .control]\n            menu.addItem(.separator())\n            menu.addItem(withTitle: \"rm -rf 'Derived Data'\", action: #selector(derivedDataDance), keyEquivalent: \"\")\n            menu.addItem(.separator())\n            menu.addItem(withTitle: \"Quit Xcode\", action: #selector(quitXcode), keyEquivalent: \"\")\n            return menu\n        }()\n\n        menu.addItem(.separator())\n        menu.addItem(withTitle: \"Quit Cake \\(Bundle.main.version)\", action: #selector(NSApplication.terminate), keyEquivalent: \"\")\n\n        newCake.submenu = NSMenu()\n        newCake.submenu!.addItem(withTitle: \"macOS\", action: #selector(createNewCake), keyEquivalent: \"\")\n        newCake.submenu!.addItem(withTitle: \"iOS\", action: #selector(createNewCake), keyEquivalent: \"\")\n    }\n\n    func menuWillOpen(_ menu: NSMenu) {\n        let item = menu.items[3]\n        let index = item.tag\n        let time = kitchen.cakes[index].lastGenerationTime.relativeTimeString\n        item.title = \"Last generated \\(time)\"\n    }\n}\n\nprivate extension Optional where Wrapped == Date {\n    var relativeTimeString: String {\n        switch self {\n        case .none:\n            return \"never\"\n        case .some(let date):\n            let formatter = DateFormatter()\n            formatter.dateStyle = .long\n            formatter.timeStyle = .short\n            formatter.doesRelativeDateFormatting = true\n            formatter.formattingContext = .middleOfSentence\n            return formatter.string(from: date)\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/AppKit/AppDelegate.swift",
    "content": "import PromiseKit\nimport AppKit\nimport Cake\n\n@NSApplicationMain\nclass AppDelegate: NSObject, NSApplicationDelegate {\n    let menu = NSMenu()\n    let statusBarItem = NSStatusBar.system.statusItem(withLength: 22)\n    let kitchen = Kitchen(cake: Bundle.main)\n    let updater = AppUpdater(owner: \"mxcl\", repo: \"Cake\")\n    var hotKey: HotKey!\n\n    override func awakeFromNib() {\n        statusBarItem.button?.appearsDisabled = true\n        statusBarItem.button?.image = NSImage(named: \"NSStatusBarItem\")\n        statusBarItem.menu = menu\n\n        PromiseKit.conf.Q.map = .global()\n\n        let name = Notification.Name(rawValue: \"dev.mxcl.Cake.build\")\n        DistributedNotificationCenter.default().addObserver(self, selector: #selector(build), name: name, object: nil)\n    }\n\n    func applicationDidFinishLaunching(_ aNotification: Notification) {\n        kitchen.delegate = self\n\n        hotKey = HotKey(key: .t, modifiers: [.command, .option, .control])\n        hotKey.keyDownHandler = { [weak self] in\n            self?.openActiveWorkspaceInTerminal()\n        }\n    }\n}\n\nextension AppDelegate: KitchenDelegate {\n    func xcode(isRunning: Bool) {\n        statusBarItem.button?.appearsDisabled = !isRunning\n\n        menu.removeAllItems()\n        menu.addItem(withTitle: isRunning ? \"Loading…\" : \"Xcode not open\", action: nil, keyEquivalent: \"\")\n        fillMenuBottom()\n    }\n\n    func kitchen(cake: [CakeProject], notCake: [String]) {\n        updateStatusItemMenu(cake: cake, notCake: notCake)\n    }\n\n    func kitchen(error: Error) {\n        alert(error)\n    }\n\n    func kitchen(regenerated cake: CakeProject) {\n        let note = NSUserNotification()\n        note.title = \"Regenerated \\(cake.name)’s Cake\"\n        NSUserNotificationCenter.default.deliver(note)\n        DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(2)) {\n            NSUserNotificationCenter.default.removeDeliveredNotification(note)\n        }\n    }\n\n    @objc func build(note: Notification) {\n        enum E: Error {\n            case noPROJECT_DIR\n        }\n        var userInfo: [String: Any]!\n        do {\n            guard let path = note.userInfo?[\"PROJECT_DIR\"] as? String else {\n                throw E.noPROJECT_DIR\n            }\n            try kitchen.generate(for: Path.root.join(path).parent)\n        } catch {\n            userInfo = .init()\n            userInfo[\"error\"] = error.legibleLocalizedDescription\n            userInfo[\"error.userInfo\"] = (error as NSError).userInfo\n        }\n        let name = Notification.Name(rawValue: \"dev.mxcl.Cake.built\")\n        DistributedNotificationCenter.default().postNotificationName(name, object: nil, userInfo: userInfo, options: .deliverImmediately)\n    }\n\n    @objc func openActiveWorkspaceInTerminal() {\n        guard let path = kitchen.activeWorkspace?.parent else {\n            NSSound.beep()\n            return\n        }\n\n        let task = Process()\n        task.launchPath = \"/usr/bin/open\"\n        task.arguments = [\"-a\", \"Terminal\", path.string]\n        task.launch(.promise).alert()\n    }\n}\n"
  },
  {
    "path": "Sources/AppKit/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"16x16\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"cake-16.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"16x16\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"cake-32.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"32x32\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"cake-33.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"32x32\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"cake-64.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"128x128\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"cake-128.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"128x128\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"cake-256.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"256x256\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"cake-257.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"256x256\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"cake-512.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"512x512\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"cake-513.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"512x512\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"cake-1024.png\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Sources/AppKit/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Sources/AppKit/Assets.xcassets/NSStatusBarItem.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"filename\" : \"cake-3.png\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"properties\" : {\n    \"template-rendering-intent\" : \"template\"\n  }\n}"
  },
  {
    "path": "Sources/AppKit/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=\"14490.59\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" useAutolayout=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"14490.59\"/>\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=\"Cake\" id=\"1Xt-HY-uBw\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Cake\" systemMenu=\"apple\" id=\"uQy-DD-JDr\">\n                                    <items>\n                                        <menuItem title=\"About Cake\" 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 Cake\" 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 Cake\" 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                                                        <connections>\n                                                            <action selector=\"orderFrontFontPanel:\" target=\"YLy-65-1bz\" id=\"WHr-nq-2xA\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Bold\" tag=\"2\" keyEquivalent=\"b\" id=\"GB9-OM-e27\">\n                                                        <connections>\n                                                            <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"hqk-hr-sYV\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Italic\" tag=\"1\" keyEquivalent=\"i\" id=\"Vjx-xi-njq\">\n                                                        <connections>\n                                                            <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"IHV-OB-c03\"/>\n                                                        </connections>\n                                                    </menuItem>\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                                                        <connections>\n                                                            <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"Uc7-di-UnL\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smaller\" tag=\"4\" keyEquivalent=\"-\" id=\"i1d-Er-qST\">\n                                                        <connections>\n                                                            <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"HcX-Lf-eNd\"/>\n                                                        </connections>\n                                                    </menuItem>\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=\"toggleSidebar:\" 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=\"Cake 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=\"App\" customModuleProvider=\"target\"/>\n                <customObject id=\"YLy-65-1bz\" customClass=\"NSFontManager\"/>\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    </scenes>\n</document>\n"
  },
  {
    "path": "Sources/AppKit/Bundled Files/iOS.LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"14460.31\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\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=\"14460.20\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\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                    <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                        <subviews>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" alpha=\"0.61699999999999999\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" usesAttributedText=\"YES\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"3jY-k2-gCu\">\n                                <rect key=\"frame\" x=\"138.5\" y=\"626.5\" width=\"98.5\" height=\"20.5\"/>\n                                <attributedString key=\"attributedText\">\n                                    <fragment content=\"Made with \">\n                                        <attributes>\n                                            <font key=\"NSFont\" size=\"13\" name=\"Georgia\"/>\n                                            <font key=\"NSOriginalFont\" size=\"16\" name=\"Georgia\"/>\n                                        </attributes>\n                                    </fragment>\n                                    <fragment content=\"Cake\">\n                                        <attributes>\n                                            <font key=\"NSFont\" size=\"18\" name=\"Cochin-Italic\"/>\n                                            <font key=\"NSOriginalFont\" size=\"16\" name=\"Cochin-Italic\"/>\n                                        </attributes>\n                                    </fragment>\n                                </attributedString>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"6Tk-OE-BBY\" firstAttribute=\"bottom\" secondItem=\"3jY-k2-gCu\" secondAttribute=\"bottom\" constant=\"20\" id=\"LLT-3W-nWR\"/>\n                            <constraint firstItem=\"3jY-k2-gCu\" firstAttribute=\"centerX\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerX\" id=\"McQ-l0-hRd\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\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": "Sources/AppKit/Cake.entitlements",
    "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>com.apple.security.automation.apple-events</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Sources/AppKit/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>$(DEVELOPMENT_LANGUAGE)</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>$(SEMANTIC_PROJECT_VERSION)</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>LSApplicationCategoryType</key>\n\t<string>public.app-category.developer-tools</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>$(MACOSX_DEPLOYMENT_TARGET)</string>\n\t<key>LSUIElement</key>\n\t<true/>\n\t<key>NSAppleEventsUsageDescription</key>\n\t<string>Monitoring loaded Xcode projects.</string>\n\t<key>NSAppleScriptEnabled</key>\n\t<true/>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2019‒present Max Howell. 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": "Sources/AppKit/Menu·$CAKE.swift",
    "content": "import AppKit\nimport Cake\n\nextension AppDelegate {\n    @objc func integrateCake(sender: NSMenuItem) {\n        guard let index = sender.parent?.tag else {\n            return\n        }\n        do {\n            let path = kitchen.notCakes[index]\n            let proj = try XcodeProject(existing: path)\n            let (_,_) = try scaffold(.existing(proj), cakeVersion: Bundle.main.version)\n\n            //TODO update menu items\n\n        } catch {\n            alert(error)\n        }\n    }\n\n    @objc func deintegrateCake(sender: NSMenuItem) {\n        guard let index = sender.parent?.tag else {\n            return\n        }\n        do {\n            let item = kitchen.cakes[index]\n            let proj = try XcodeProject(existing: item.xcodeproj)\n            let cake = try XcakeProject(existing: item.prefix/\".cake/Cake.xcodeproj\")\n            try cake.deintegrate(proj)\n\n        } catch {\n            alert(error)\n        }\n    }\n\n    @objc func updateDependencies(sender: NSMenuItem) {\n        guard let index = sender.parent?.tag else {\n            return\n        }\n        do {\n            try kitchen.cakes[index].updateDependencies()\n        } catch ProcessorError.noDependenciesInCakefile {\n            alert(message: \"No dependencies in Cakefile.\", title: \"noop\")\n        } catch {\n            alert(error)\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/AppKit/Menu·New Cake.swift",
    "content": "import AppKit\nimport Cake\n\nextension AppDelegate {\n    @objc func createNewCake(sender: NSMenuItem) {\n        do {\n            //TODO figure out deployment targets from xcodebuild or something\n\n            let platform: PlatformSpecification\n            switch sender.menu?.index(of: sender) {\n            case 0?:\n                platform = PlatformSpecification(platform: .macOS, version: Version(10,14,0))\n            case 1?:\n                platform = PlatformSpecification(platform: .iOS, version: Version(12,0,0))\n            default:\n                return\n            }\n\n            let name = cakes.randomElement()!\n            let prefix = Path.home/\"Desktop\"/name\n\n            enum E: Error {\n                case directoryNameConflict\n            }\n\n            if prefix.isDirectory {\n                throw E.directoryNameConflict\n            }\n\n            let (proj, _) = try scaffold(.new(name: name, prefix, platform), cakeVersion: Bundle.main.version)\n            NSWorkspace.shared.open(proj.path.url)\n        } catch {\n            alert(error)\n        }\n    }\n}\n\nprivate var cakes: [String] {\n    return [\n        \"Madeira Cake\",\n        \"Torte\",\n        \"Savarin\",\n\n        \"Cherry Cake\",\n        \"Cheesecake\",\n        \"Chocolate Cake\",\n        \"Red Velvet Cake\",\n        \"Key Lime Pie\",\n        \"Pound Cake\",\n        \"Sponge Cake\",\n        \"Upside Down Cake\",\n        \"Icecream Cake\",\n        \"German Chocolate Cake\",\n        \"Cupcake\",\n        \"Strawberry Shortcake\",\n        \"Fruitcake\",\n        \"Bundt Cake\",\n        \"Hummingbird Cake\",\n        \"Black Forest Cake\",\n        \"Angel Food Cake\",\n        \"Carrot Cake\",\n        \"Christmas Pudding\",\n        \"Yule Log\",\n        \"Bûche de Noël\",\n        \"Devil’s Food Cake\",\n        \"Pumpkin Roll\",\n        \"Bread Pudding\",\n        \"Coffee Cake\",\n        \"Birthday Cake\",\n        \"Pancake\",\n        \"Chocolate Lava Cake\",\n        \"Pineapple Upside‐down Cake\"\n    ]\n}\n"
  },
  {
    "path": "Sources/AppKit/Menu·Xcode.swift",
    "content": "import AppKit\nimport Cake\n\nextension AppDelegate {\n    @objc func derivedDataDance(sender: NSMenuItem) {\n        do {\n            let apps = NSRunningApplication.runningApplications(withBundleIdentifier: \"com.apple.dt.Xcode\")\n            for app in apps {\n                let xcode = try Xcode(pid: app.processIdentifier)\n                let dd = xcode.derivedData\n                \n                // sanity checks, shouldn’t happen, but we should be careful!\n                guard dd != Path.root, dd != Path.home else { return }\n                \n                if xcode.isRunning {\n                    let docs = xcode.documents\n                    try xcode.quit()\n                    try dd.delete()\n                    xcode.open(documents: docs)\n                } else {\n                    try dd.delete()\n                }\n            }\n        } catch {\n            alert(error)\n        }\n    }\n\n    @objc func quitXcode(sender: NSMenuItem) {\n        let apps = NSRunningApplication.runningApplications(withBundleIdentifier: \"com.apple.dt.Xcode\")\n        for app in apps {\n            if !app.terminate() {\n                print(\"warning: failed to terminate Xcode\")\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/AppKit/alert().swift",
    "content": "import LegibleError\nimport Foundation\nimport AppKit\n\nprotocol TitledError: LocalizedError {\n    var title: String { get }\n}\n\nprivate func _alert(error: Error, title: String?, file: StaticString, line: UInt) -> (String, String) {\n    print(\"\\(file):\\(line)\", error.legibleDescription, error)\n\n    var computeTitle: String {\n        switch (error as NSError).domain {\n        case \"SKErrorDomain\":\n            return \"App Store Error\"\n        case \"kCLErrorDomain\":\n            return \"Core Location Error\"\n        case NSCocoaErrorDomain:\n            return \"Error\"\n        default:\n            return \"Unexpected Error\"\n        }\n    }\n\n    let title = title ?? (error as? TitledError)?.title ?? computeTitle\n\n    return (error.legibleLocalizedDescription, title)\n}\n\nfunc alert(_ error: Error, title: String? = nil, file: StaticString = #file, line: UInt = #line) {\n    let (msg, title) = _alert(error: error, title: title, file: file, line: line)\n\n    // we cannot make SKError CancellableError sadly (still)\n    let pair: (String, Int) = { ($0.domain, $0.code) }(error as NSError)\n    guard (\"SKErrorDomain\", 2) != pair else { return } // user-cancelled\n    guard (\"NSOSStatusErrorDomain\", -128) != pair else { return } // Apple Script user-cancelled\n\n    alert(message: msg, title: title)\n}\n\nfunc alert(message: String, title: String) {\n    func go() {\n      #if os(macOS)\n        let alert = NSAlert()\n        alert.informativeText = message\n        alert.messageText = title\n        alert.addButton(withTitle: \"OK\")\n        alert.runModal()\n      #else\n\n      #endif\n    }\n    if Thread.isMainThread {\n        go()\n    } else {\n        DispatchQueue.main.async(execute: go)\n    }\n}\n\nimport PromiseKit\n\nextension Promise {\n    @discardableResult\n    func alert(title: String? = nil, file: StaticString = #file, line: UInt = #line) -> PMKFinalizer {\n        return self.catch {\n            App.alert($0, title: title, file: file, line: line)\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Kitchenware/Makefile",
    "content": ".PHONY: all\n\nBUILD_DIR = $(OUTDIR)/swift-pm/$(CONFIGURATION)\nCONFIGURATION = release\noutputs = $(OUTDIR)/lib/pm/4/libPackageDescription.dylib $(OUTDIR)/lib/pm/4_2/libPackageDescription.dylib $(OUTDIR)/lib/Cakefile.swiftmodule $(OUTDIR)/lib/Cakefile.swiftdoc $(OUTDIR)/lib/libCakefile.dylib $(OUTDIR)/lib/Version.swiftmodule $(OUTDIR)/lib/Version.swiftdoc\nswift_build_outputs = $(BUILD_DIR)/Cakefile.swiftmodule $(BUILD_DIR)/Cakefile.swiftdoc $(BUILD_DIR)/libCakefile.a $(BUILD_DIR)/Version.swiftmodule $(BUILD_DIR)/Version.swiftdoc\n\nall: $(outputs)\n\n$(OUTDIR)/lib:\n\tmkdir -p $@\n$(OUTDIR)/lib/pm/4:\n\tmkdir -p $@\n$(OUTDIR)/lib/pm/4_2:\n\tmkdir -p $@\n\n$(swift_build_outputs): $(wildcard Sources/Cakefile/*.swift)\n\tswift build --configuration $(CONFIGURATION) --build-path $(OUTDIR)/swift-pm\n\n$(OUTDIR)/lib/pm/4_2/libPackageDescription.dylib: $(wildcard Sources/PackageDescription/*.swift) | $(OUTDIR)/lib/pm/4_2\n\tswiftc $^ -emit-library -o $@ -emit-module -module-name PackageDescription -target x86_64-apple-macosx10.10 -suppress-warnings -DPACKAGE_DESCRIPTION_4_2\n\n$(OUTDIR)/lib/pm/4/libPackageDescription.dylib: $(wildcard Sources/PackageDescription/*.swift) | $(OUTDIR)/lib/pm/4\n\tswiftc $^ -emit-library -o $@ -emit-module -module-name PackageDescription -target x86_64-apple-macosx10.10 -suppress-warnings -DPACKAGE_DESCRIPTION_4\n\n$(OUTDIR)/lib/libCakefile.dylib: $(BUILD_DIR)/libCakefile.a | $(OUTDIR)/lib\n\tswiftc -Xlinker -dylib -o $@ -Xlinker -all_load $< -target x86_64-apple-macosx10.10\n$(OUTDIR)/lib/Cakefile.swiftmodule: $(BUILD_DIR)/Cakefile.swiftmodule | $(OUTDIR)/lib\n\tcp $< $@\n$(OUTDIR)/lib/Cakefile.swiftdoc: $(BUILD_DIR)/Cakefile.swiftdoc | $(OUTDIR)/lib\n\tcp $< $@\n$(OUTDIR)/lib/Version.swiftmodule: $(BUILD_DIR)/Version.swiftmodule | $(OUTDIR)/lib\n\tcp $< $@\n$(OUTDIR)/lib/Version.swiftdoc: $(BUILD_DIR)/Version.swiftdoc | $(OUTDIR)/lib\n\tcp $< $@\n"
  },
  {
    "path": "Sources/Kitchenware/Package.swift",
    "content": "// swift-tools-version:5.0\n\nimport PackageDescription\n\nlet pkg = Package(name: \"Kitchenware\")\npkg.products = [\n    .library(name: \"Cakefile\", type: .static, targets: [\"Cakefile\"]),\n]\npkg.dependencies = [\n    .package(url: \"https://github.com/mxcl/Version\", from: \"1.0.0\"),\n]\npkg.targets = [\n    .target(name: \"Cakefile\", dependencies: [\"Version\"]),\n]\n"
  },
  {
    "path": "Sources/Mixer/Makefile",
    "content": ".PHONY: all\n\t\nall: libCakefileDescription.dylib\n\n_build:\n\tmkdir $@\n\nlibCakefileDescription.dylib: ../Sources/Model/CakefileDescription/* | _build"
  },
  {
    "path": "Sources/Mixer/Modelize/etc.swift",
    "content": "enum Error: Swift.Error {\n    /// Couldn't find all tools needed by the package manager.\n    case invalidToolchain(problem: String)\n\n    /// The root manifest was not found.\n    case rootManifestFileNotFound\n\n    /// There were fatal diagnostics during the operation.\n    case hasFatalDiagnostics\n}\n\nimport protocol Workspace.WorkspaceDelegate\nimport struct PackageGraph.PackageGraph\nimport struct Basic.Diagnostic\nimport class Workspace.ManagedDependency\n\npublic class Delegate: WorkspaceDelegate {\n    public init()\n    {}\n\n    public func packageGraphWillLoad(currentGraph: PackageGraph, dependencies: AnySequence<ManagedDependency>, missingURLs: Set<String>) {\n\n    }\n\n    public func fetchingWillBegin(repository: String) {\n\n    }\n\n    public func fetchingDidFinish(repository: String, diagnostic: Diagnostic?) {\n\n    }\n\n    public func cloning(repository: String) {\n\n    }\n\n    public func removing(repository: String) {\n\n    }\n\n    public func managedDependenciesDidUpdate(_ dependencies: AnySequence<ManagedDependency>) {\n\n    }\n}\n\nimport struct Basic.Diagnostic\n\nextension Diagnostic.Behavior: CustomStringConvertible {\n    public var description: String {\n        switch self {\n        case .error:\n            return \"error\"\n        case .warning:\n            return \"warning\"\n        case .note:\n            return \"note\"\n        case .ignored:\n            return \"ignored\"\n        }\n    }\n}\n\nimport func Darwin.fputs\nimport func Darwin.exit\nimport var Darwin.stderr\n\npublic func doctor(diagnostic: Diagnostic) {\n    switch diagnostic.id.name {\n    case \"org.swift.diags.workspace.PD3DeprecatedDiagnostic\":\n        // The consumer cannot help that the Package in question is poorly maintained\n        // we *could* show the warning as it would encourage the consumer to report\n        // the bug or even update the manifest with a PR. But in my experience nobody\n        // does, instead they have to search the Internet for workarounds so that they\n        // can hide this warning. We prioritize DX and user-satisfaction.\n        break\n    case \"org.swift.diags.unused-dependency\":\n        // Our manifest has no targets so this warning is always emitted\n        break\n    default:\n        fputs(\"\\(diagnostic.behavior): \\(diagnostic.data)\\n\", stderr)\n    }\n}\n\npublic func error(_ message: Any) -> Never {\n    fputs(\"error: \\(message)\\n\", stderr)\n    exit(1)\n}\n\npublic func warning(_ message: Any) {\n    fputs(\"warning: \\(message)\\n\", stderr)\n}\n\nimport class PackageModel.ResolvedPackage\nimport class PackageModel.ResolvedTarget\n\npublic extension ResolvedPackage {\n    var libraryTargets: [ResolvedTarget] {\n        return targets.filter{ $0.type == .library }\n    }\n}\n\npublic extension Array where Element == ResolvedPackage {\n    var libraryTargets: [ResolvedTarget] {\n        return flatMap(\\.targets).filter{ $0.type == .library }\n    }\n}\n"
  },
  {
    "path": "Sources/Mixer/Modelize/modelize().swift",
    "content": "import struct Foundation.URLComponents\nimport struct Foundation.URL\nimport struct Basic.AbsolutePath\nimport PackageModel\nimport Base\nimport Path\n\n/// returns topological sorted flat-list of module hierarchy\n/// also copies sources into visible folders TODO this breaks the responsibility of this method\npublic func modelize(to root: Path, packages: [ResolvedPackage], targets: [ResolvedTarget]) throws -> DependenciesJSON {\n\n    var map = [ResolvedTarget: (SwiftVersion, ResolvedPackage)]()\n\n    do {\n        var set = Set<ResolvedPackage>()\n\n        func recursePackage(_ package: ResolvedPackage) {\n            guard !set.contains(package) else { return }\n            set.insert(package)\n\n            let ver = package.swiftVersions.max() ?? SwiftVersion(package.manifest.manifestVersion)\n            for target in package.targets {\n                map[target] = (ver, package)\n            }\n            package.dependencies.forEach(recursePackage)\n        }\n        packages.forEach(recursePackage)\n    }\n\n    var roots = Set<Path>()\n    var scaffolded = [ResolvedPackage: [ResolvedTarget: (Path, [Path])]]()\n\n    func scaffold(package: ResolvedPackage) throws -> [ResolvedTarget: (Path, [Path])] {\n        if let sources = scaffolded[package] {\n            return sources\n        }\n\n        var packageDirname = package.checkoutBasename\n        if let version = package.manifest.version {\n            packageDirname += \"-\\(version)\"\n        }\n\n        let targets = package.libraryTargets\n        let map = try targets.map { target -> (ResolvedTarget, (Path, [Path])) in\n            let srcroot = Path(absolutePath: target.sources.root)\n\n            let dir: Path\n            if targets.count > 1 {\n                dir = root/packageDirname/target.name\n            } else if let sourceFile = targets.first?.sources.singleFile {\n                let sourceFile = try sourceFile.copy(to: root.mkdir(.p).join(\"\\(packageDirname).swift\"), overwrite: true)\n                roots.insert(sourceFile)\n                return (target, (root, [sourceFile]))\n            } else {\n                dir = root/packageDirname\n            }\n\n            let sources = try target.sources.paths.map { sourceFile -> Path in\n                let sourceFile = Path(absolutePath: sourceFile)\n                let relativeDir = sourceFile.parent.relative(to: srcroot)\n                let into = try dir.join(relativeDir).mkdir(.p)\n                return try sourceFile.copy(into: into, overwrite: true)\n            }\n\n            if !sources.isEmpty {\n                roots.insert(dir)\n            }\n\n            return (target, (dir, sources))\n        }\n        let dict = Dictionary(uniqueKeysWithValues: map)\n        scaffolded[package] = dict\n        return dict\n    }\n\n    var modules = [ResolvedTarget: Module]()\n\n    func recurseTarget(with target: ResolvedTarget) throws -> Module? {\n        if let module = modules[target] {\n            return module\n        }\n        guard target.type == .library else {\n            return nil\n        }\n        guard let (version, package) = map[target] else {\n            error(\"missing target to (version, pkg) entry for \\(target)\")\n        }\n        guard let (srcroot, sources) = try scaffold(package: package)[target] else {\n            error(\"missing scaffolding for \\(package)\")\n        }\n        let deps = target.dependencies.flatMap { resolvedDependency -> [ResolvedTarget] in\n            switch resolvedDependency {\n            case .product(let product):\n                return product.targets  // external dependencies\n            case .target(let target):\n                return [target]         // internal to the package these targets came from\n            }\n        }\n        let module = Module(\n            name: target.name,\n            directory: srcroot,\n            dependencies: try deps.compactMap(recurseTarget),\n            files: sources,\n            swift: version\n        )\n        modules[target] = module\n        return module\n    }\n\n    let sortedModules = try targets.compactMap(recurseTarget).flattened\n\n    if sortedModules.isEmpty {\n        // if nothing left then delete entire Dependencies directory (let’s be clean)\n        try root.delete()\n    } else {\n        // delete everything else ∵ old versions\n        //TODO do better, only delete stuff that was here before (read Dependencies.json)\n        for entry in try root.ls() where !roots.contains(entry.path) {\n            try entry.path.delete()\n        }\n    }\n\n    let pkgs = scaffolded.map { foo in\n        DependenciesJSON.Package(\n            name: foo.key.qualifiedName,\n            path: Path(absolutePath: foo.key.path),\n            version: foo.key.manifest.version,\n            moduleNames: foo.value.keys.map{ modules[$0]!.name })\n    }\n    let imports = targets.map{ $0.c99name }\n\n    return DependenciesJSON(modules: sortedModules, imports: imports, packages: pkgs)\n}\n\nprivate extension ResolvedPackage {\n    var swiftVersions: [SwiftVersion] {\n        return manifest.swiftLanguageVersions?.compactMap(SwiftVersion.init) ?? []\n    }\n\n    var qualifiedName: String {\n        if let (user, repo) = URLComponents(string: manifest.url)?.githubPair {\n            return \"\\(user)/\\(repo)\"\n        } else {\n            return name\n        }\n    }\n\n    var checkoutBasename: String {\n        let slash = \"∕\" // special unicode value that is _not_ the UNIX filesystem slash\n\n        guard let cc = URLComponents(string: manifest.url) else {\n            fatalError() //TODO\n        }\n        if let (user, repo) = cc.githubPair {\n            return \"\\(user)\\(slash)\\(repo)\"\n        }\n\n        guard let host = cc.host else {\n            fatalError() //TODO\n        }\n\n        var components = cc.path.split(separator: \"/\")\n        if let last = components.last, last.hasSuffix(\".git\") {\n            components[components.endIndex - 1] = last.dropLast(4)\n        }\n\n        func sanitize<S>(_ s: S) -> String where S: StringProtocol {\n            return s.replacingOccurrences(of: \":\", with: \"%3A\")\n        }\n\n        let path = components.map(sanitize).joined(separator: slash)\n        return sanitize(host) + slash + path\n    }\n}\n\npublic extension Path {\n    init(absolutePath path: AbsolutePath) {\n        self = Path.root / path.pathString\n    }\n}\n\nprivate extension SwiftVersion {\n    init?(spmValue: SwiftLanguageVersion) {\n        if spmValue >= .v5 {\n            self = .v5\n        } else if spmValue >= .v4_2 {\n            self = .v4_2\n        } else if spmValue >= .v4 {\n            self = .v4\n        } else {\n            return nil\n        }\n    }\n\n    init(_ manifestVersion: ManifestVersion) {\n        switch manifestVersion {\n        case .v4:\n            self = .v4\n        case .v4_2:\n            self = .v4_2\n        case .v5:\n            self = .v5\n        }\n    }\n}\n\nprivate extension URLComponents {\n    var githubPair: (String.SubSequence, String.SubSequence)? {\n        let cc = self\n        guard let host = cc.host, host.hasSuffix(\"github.com\") else { return nil }\n        let components = cc.path.split(separator: \"/\")\n        guard components.count == 2 else { return nil }\n        let owner = components[0]\n        var repo = components[1]\n        if repo.hasSuffix(\".git\") {\n            repo = repo.dropLast(4)\n        }\n        return (owner, repo)\n    }\n}\n\nprivate extension Sources {\n    var singleFile: Path? {\n        guard relativePaths.count == 1 else { return nil }\n        return Path(absolutePath: root.appending(relativePaths[0]))\n    }\n}\n\nprivate extension Dictionary {\n    func mapPairs<OutKey: Hashable, OutValue>(_ transform: (Element) throws -> (OutKey, OutValue)) rethrows -> [OutKey: OutValue] {\n        return Dictionary<OutKey, OutValue>(uniqueKeysWithValues: try map(transform))\n    }\n}\n"
  },
  {
    "path": "Sources/Mixer/Package.resolved",
    "content": "{\n  \"object\": {\n    \"pins\": [\n      {\n        \"package\": \"OrderedSet\",\n        \"repositoryURL\": \"https://github.com/Weebly/OrderedSet\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"4247c60cc190dbbaff63ecfe42bd7a1f2cbaf225\",\n          \"version\": \"3.1.0\"\n        }\n      },\n      {\n        \"package\": \"Path.swift\",\n        \"repositoryURL\": \"https://github.com/mxcl/Path.swift\",\n        \"state\": {\n          \"branch\": null,\n          \"revision\": \"e915bc0cfb5bcee9d48adfdb9e8208d07291c0e8\",\n          \"version\": \"0.16.0\"\n        }\n      },\n      {\n        \"package\": \"llbuild\",\n        \"repositoryURL\": \"https://github.com/apple/swift-llbuild.git\",\n        \"state\": {\n          \"branch\": \"master\",\n          \"revision\": \"06a25536b8d7f6b43f93139dea15dd8f7873b8d9\",\n          \"version\": null\n        }\n      },\n      {\n        \"package\": \"SwiftPM\",\n        \"repositoryURL\": \"https://github.com/apple/swift-package-manager.git\",\n        \"state\": {\n          \"branch\": \"swift-DEVELOPMENT-SNAPSHOT-2019-02-03-a\",\n          \"revision\": \"9b6be668d93829f9ef0727ad2d2490e56487fedc\",\n          \"version\": null\n        }\n      }\n    ]\n  },\n  \"version\": 1\n}\n"
  },
  {
    "path": "Sources/Mixer/Package.swift",
    "content": "// swift-tools-version:5.0\n\nimport PackageDescription\n\nlet pkg = Package(name: \"Mixer\")\npkg.products = [\n    .executable(name: \"mixer\", targets: [\"Mixer\"]),\n]\npkg.dependencies = [\n    .package(url: \"https://github.com/apple/swift-package-manager.git\", .branch(\"swift-DEVELOPMENT-SNAPSHOT-2019-02-03-a\")),\n    .package(url: \"https://github.com/Weebly/OrderedSet\", from: \"3.1.0\"),\n    .package(url: \"https://github.com/mxcl/Path.swift\", from: \"0.16.0\"),\n]\npkg.targets = [\n    .target(name: \"Mixer\", dependencies: [\"OrderedSet\", \"Modelize\"], path: \".\", sources: [\"main.swift\"]),\n    .target(name: \"Modelize\", dependencies: [\"SwiftPM\", \"Base\", \"Path\"], path: \"Modelize\"),\n    .target(name: \"Base\", dependencies: [\"Path\"], path: \"Base\"),\n]\npkg.platforms = [\n    .macOS(.v10_14)\n]\npkg.swiftLanguageVersions = [\n    .v5\n]\n"
  },
  {
    "path": "Sources/Mixer/README.md",
    "content": "Mixer is an independent Swift-Package because it builds its own copy\nof SwiftPM (since libSwiftPM is not usable from an Xcode installation)\nand 1. Cake cannot support c-packages yet; 2. adding SwiftPM as a\ndependency kills clean builds (which we intend to fix); and 3. this\nwould be inefficient since we only need libSwiftPM for Mixer so really\nwe need Cake to support this more advanced use-case.\n\nWe have a subfolder `Base` that contains symlinks to our Cake base\nmodule swift files. This is due to SwiftPM refusing to create modules\nfor directories that are below the `Package.swift` directory.\n\n# Getting an Xcodeproj\n\nIn this directory:\n\n    swift package generate-xcodeproj --xcconfig-overrides .build/libSwiftPM.xcconfig\n\n# Building Cake\n\nBootstrapping SwiftPM requires `ninja`:\n\n    brew install ninja"
  },
  {
    "path": "Sources/Mixer/main.swift",
    "content": "/*\n Reads a Package.swift and converts the output to a list of Modules that\n Cake can embed in Cake.xcodeproj.\n\n We tried to use the generated Xcodeproj that SwiftPM can use but that\n proved overall undesirable since we needed to edit the resulting project\n to have a dependency on the Cakefile target in our Cake.xcodeproj.\n\n This worked but was tedious. Also the generated project only produced\n dynamic frameworks and we want static ones.\n\n This approach is neater and makes it possible to make it possible for\n Cake projects to be standalone which was a goal of the Cake menifesto.\n\n The other attempt was to use SwiftPM’s commands to output the module\n content for a Package.swift, however these commands do not output\n all the information we need (most vital was inter-package module\n dependencies). We may submit this PR to SwiftPM to add the information\n we need. But since SwiftPM has an annual release cycle, this was no\n good for our immediate needs.\n */\n\nimport struct Foundation.URL\nimport class Foundation.JSONEncoder\nimport class SourceControl.GitRepositoryProvider\nimport func Darwin.exit\nimport PackageLoading\nimport PackageGraph\nimport SPMUtility\nimport Workspace\nimport Modelize\nimport Basic\nimport Base\nimport Path\n\n// hi, this code is hard to understand and really I don’t know what\n// to do about it other than make a facade wrapper for SwiftPM.\n\nguard CommandLine.arguments.count == 3 else {\n    error(\"error: mixer <project-dir> <lib-pm-dir>\")\n}\n\nlet root = AbsolutePath(CommandLine.arguments[1])\nlet pkgpath = root.appending(component: \".cake\")\nlet depsPath = root.appending(component: \"Dependencies\")\nlet swiftPath = try Process.checkNonZeroExit(arguments: [\"xcrun\", \"--sdk\", \"macosx\", \"-f\", \"swift\"]).spm_chomp()\nlet sdkroot = try Process.checkNonZeroExit(arguments: [\"xcrun\", \"--sdk\", \"macosx\", \"--show-sdk-path\"]).spm_chomp()\nlet L = AbsolutePath(CommandLine.arguments[2])\n\nstruct UserManifestResources: ManifestResourceProvider {\n    let swiftCompiler: AbsolutePath\n    let libDir: AbsolutePath\n    let sdkRoot: AbsolutePath?\n}\n\nlet manifestResources = UserManifestResources(\n    swiftCompiler: AbsolutePath(swiftPath).parentDirectory.appending(component: \"swiftc\"),\n    libDir: L,\n    sdkRoot: AbsolutePath(sdkroot)\n)\n\nlet loader = ManifestLoader(manifestResources: manifestResources)\nlet delegate = Delegate()\nlet provider = GitRepositoryProvider()\nlet workspace = Workspace(\n    dataPath: pkgpath.appending(component: \"swift-pm\"),\n    editablesPath: depsPath,\n    pinsFile: pkgpath.appending(component: \"Package.resolved\"),\n    manifestLoader: loader,\n    toolsVersionLoader: ToolsVersionLoader(),\n    delegate: delegate,\n    repositoryProvider: provider,\n    isResolverPrefetchingEnabled: true,\n    skipUpdate: true\n)\n\nlet diagnostics = DiagnosticsEngine(handlers: [doctor])\nlet graphRootInput = PackageGraphRootInput(packages: [pkgpath])\n\nworkspace.resolve(root: graphRootInput, diagnostics: diagnostics)\nguard !diagnostics.hasErrors else { exit(2) }\n\nlet graph = workspace.loadPackageGraph(root: graphRootInput, diagnostics: diagnostics)\nguard !diagnostics.hasErrors else { exit(3) }\n\nlet rootPackages = graph.rootPackages.flatMap{ $0.dependencies }\nlet rootTargets = rootPackages.libraryTargets\nlet output = try modelize(to: Path(absolutePath: depsPath), packages: rootPackages, targets: rootTargets)\n\nlet encoder = JSONEncoder()\nencoder.outputFormatting = .prettyPrinted\nencoder.userInfo[.relativePath] = Path(absolutePath: depsPath)\nlet data = try encoder.encode(output)\nlet outpath = pkgpath.appending(component: \"Dependencies.json\").pathString\ntry data.write(to: URL(fileURLWithPath: outpath))\n\nprint(String(data: data, encoding: .utf8)!)\n"
  },
  {
    "path": "Sources/Model/Base/Modelizer/Dependencies.json.swift",
    "content": "#if SWIFT_PACKAGE\nimport struct Workspace.Version\n#else\nimport Version\n#endif\nimport Path\n\npublic struct DependenciesJSON {\n    public let modules: [Module]  // topologically sorted\n    public let imports: [String]  // topologically sorted\n    public let packages: [Package]\n\n    public struct Package: Codable {\n        public let name: String\n        public let path: Path\n        public let version: Version?  //TODO VersionSpecification\n        public let moduleNames: [String]\n    }\n\n    public var isEmpty: Bool {\n        return modules.isEmpty\n    }\n}\n\nextension DependenciesJSON: Codable {\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        imports = try container.decode([String].self, forKey: .imports)\n        var arrayContainer = try container.nestedUnkeyedContainer(forKey: .modules)\n        modules = try .decode(from: &arrayContainer)\n        packages = try container.decode([Package].self, forKey: .packages)\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        try container.encode(imports, forKey: .imports)\n        var arrayContainer = container.nestedUnkeyedContainer(forKey: .modules)\n        try modules.encode(to: &arrayContainer)\n        try container.encode(packages, forKey: .packages)\n    }\n\n    enum CodingKeys: CodingKey {\n        case modules, imports, packages\n    }\n}\n\npublic extension DependenciesJSON {\n    init() {\n        modules = []\n        imports = []\n        packages = []\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/Modelizer/Module.swift",
    "content": "import Base\nimport Path\n\npublic final class Module: Codable {\n    public let name: String\n    public let path: Path\n    public let dependencies: [Module]\n    public let files: [Path]\n\n    // if nil the SwiftVersion is determined by the project\n    public let swiftVersion: SwiftVersion?\n\n    var relativeFiles: [String] {\n        return files.map{ $0.relative(to: path) }\n    }\n\n    init(name: String, directory: Path, dependencies: [Module], files: [Path], swift: SwiftVersion? = nil) {\n        self.name = name\n        self.path = directory\n        self.dependencies = dependencies.sorted()\n        self.files = files.sorted()\n        self.swiftVersion = swift\n    }\n\n    enum CodingKeys: CodingKey {\n        case name, path, dependencies, files, swiftVersion\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        name = try container.decode(String.self, forKey: .name)\n        path = try container.decode(Path.self, forKey: .path)\n        files = try container.decode([String].self, forKey: .files).map(path.join)\n        dependencies = try container.decode([Module].self, forKey: .dependencies)\n        swiftVersion = try container.decode(SwiftVersion?.self, forKey: .swiftVersion)\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        try encodeCommon(to: &container)\n        try container.encode(dependencies, forKey: .dependencies)\n    }\n\n    fileprivate func encodeCommon(to container: inout KeyedEncodingContainer<CodingKeys>) throws {\n        //TODO no bangs!\n        try container.encode(name, forKey: .name)\n        try container.encode(path, forKey: .path)\n        try container.encode(files.map{ $0.relative(to: path) }, forKey: .files)\n        try container.encode(swiftVersion, forKey: .swiftVersion)\n    }\n}\n\nextension Array where Element == Module {\n    /// encodes dependencies as references, thus avoiding potentially enormous JSON\n    public func encode(to arrayContainer: inout UnkeyedEncodingContainer) throws {\n        var encoded = Set<Module>()\n        var stack = self\n        while let module = stack.popLast() {\n            var container = arrayContainer.nestedContainer(keyedBy: Module.CodingKeys.self)\n            try module.encodeCommon(to: &container)\n            try container.encode(module.dependencies.map(\\.name), forKey: .dependencies)\n            stack.append(contentsOf: module.dependencies.filter{ !encoded.contains($0) })\n            encoded.insert(module)\n        }\n    }\n\n    /// - Note: requires modules to be topographically sorted\n    static public func decode(from arrayContainer: inout UnkeyedDecodingContainer) throws -> [Module] {\n        var decoded: [String: Module] = [:]\n        var rv = [Module]()\n        while !arrayContainer.isAtEnd {\n            let container = try arrayContainer.nestedContainer(keyedBy: Module.CodingKeys.self)\n            let path = try container.decode(Path.self, forKey: .path)\n            let deps = try container.decode([String].self, forKey: .dependencies).map{ decoded[$0]! }\n            let files = try container.decode([String].self, forKey: .files).map(path.join)\n            let name = try container.decode(String.self, forKey: .name)\n            let swift = try container.decode(SwiftVersion?.self, forKey: .swiftVersion)\n            let module = Module(name: name, directory: path, dependencies: deps, files: files, swift: swift)\n            decoded[module.name] = module\n            rv.append(module)\n        }\n        //TODO only return the “tips” (maybe?)\n        return rv\n    }\n}\n\nextension Module: Equatable, Hashable, Comparable {\n    public static func ==(lhs: Module, rhs: Module) -> Bool {\n        return lhs.path == rhs.path && lhs.dependencies == rhs.dependencies && lhs.files == rhs.files\n    }\n\n    public func hash(into hasher: inout Hasher) {\n        hasher.combine(path)\n    }\n\n    public static func <(lhs: Module, rhs: Module) -> Bool {\n        return lhs.name.compare(rhs.name) == .orderedAscending\n    }\n}\n\npublic extension Array where Element == Module {\n    var flattened: [Module] {\n        return topologicallySorted{ $0.dependencies }\n    }\n\n    var bases: [Module] {\n        return flattened.filter {\n            $0.dependencies.isEmpty\n        }\n    }\n}\n\nextension Module: CustomStringConvertible {\n    public var description: String {\n        return \"<Module: \\(name) [\\(dependencies.map(\\.name).joined(separator: \", \"))]>\"\n    }\n\n    public func dump() {\n        func recursiveWalk(modules: [Module], prefix: String = \"\") {\n            var hanger = prefix + \"├── \"\n\n            for (index, module) in modules.enumerated() {\n                if index == modules.count - 1 {\n                    hanger = prefix + \"└── \"\n                }\n\n                print(\"\\(hanger)\\(module.name)\")\n\n                if !module.dependencies.isEmpty {\n                    let replacement = (index == modules.count - 1) ?  \"    \" : \"│   \"\n                    var childPrefix = hanger\n                    let startIndex = childPrefix.index(childPrefix.endIndex, offsetBy: -4)\n                    childPrefix.replaceSubrange(startIndex..<childPrefix.endIndex, with: replacement)\n                    recursiveWalk(modules: module.dependencies, prefix: childPrefix)\n                }\n            }\n        }\n\n        print(name)\n        recursiveWalk(modules: dependencies)\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/Modelizer/modelize().swift",
    "content": "import Foundation\nimport Path\n\npublic func modelize(root: Path, basename: String) throws -> [Module] {\n    let modelizer = Modelizer(root: root, basename: basename)\n    return try modelizer.go()\n}\n\npublic enum ModelizerError: Error {\n    case noSwiftFiles(Path)\n}\n\nprivate class Modelizer {\n    let root: Path\n    var tips: [Module] = []\n    let basename: String\n\n    init(root: Path, basename: String) {\n        self.root = root\n        self.basename = basename\n    }\n\n    func go() throws -> [Module] {\n        let base = try Module(directory: root, name: basename)\n        let deps = base.map{ [$0] } ?? []\n\n        try descend(into: ModuleOrPath(path: root, module: base), deps: deps)\n\n        if tips.isEmpty {\n            throw ModelizerError.noSwiftFiles(root)\n        }\n\n        return tips\n    }\n\n    @discardableResult\n    private func descend(into: ModuleOrPath, deps: [Module]) throws -> Bool {\n        let descendables = try into.path.ls().directories.map {\n            ModuleOrPath(path: $0, module: try Module(directory: $0, deps: deps))\n        }\n        var consumers = descendables.compactMap(\\.module)\n\n        // if no descendent directories are modules\n        // we push the undelying deps forward instead\n        if consumers.isEmpty {\n            consumers = deps\n        }\n\n        var validDescendents = false\n        for descendable in descendables {\n            if try descend(into: descendable, deps: consumers) {\n                validDescendents = true\n            }\n        }\n\n        if let module = into.module {\n            if !module.files.isEmpty {\n                if !validDescendents {\n                    tips.append(module)\n                }\n                return true\n            } else {\n                return validDescendents\n            }\n        } else {\n            return validDescendents\n        }\n    }\n}\n\nprivate enum ModuleOrPath {\n    case path(Path)\n    case module(Module)\n\n    var path: Path {\n        switch self {\n        case .path(let path): return path\n        case .module(let module): return module.path\n        }\n    }\n\n    var module: Module? {\n        switch self {\n        case .module(let module): return module\n        case .path: return nil\n        }\n    }\n\n    init(path: Path, module: Module?) {\n        if let module = module {\n            assert(path == module.path)\n            self = .module(module)\n        } else {\n            self = .path(path)\n        }\n    }\n}\n\nprivate extension Module {\n    convenience init?(directory: Path, name: String? = nil, deps: [Module] = []) throws {\n        let files = try directory.ls().files(withExtension: \"swift\").sorted()\n        if files.isEmpty {\n            return nil\n        }\n        self.init(\n            name: name ?? directory.basename(),\n            directory: directory,\n            dependencies: deps,\n            files: files)\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/Path+inreplace().swift",
    "content": "import Path\n\npublic extension Path {\n    func inreplace(_ target: String, with replacement: String) throws {\n        //TODO could replace more efficiently if we did it with FileHandle\n\n        try StreamReader(path: self).map {\n            $0.replacingOccurrences(of: target, with: replacement)\n        }.joined(separator: \"\\n\").write(to: self, atomically: true)\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/Process+facade.swift",
    "content": "import Foundation\n\npublic extension Process {\n\n    class Output {\n        public let data: Data\n        public lazy var string = { [unowned self] () -> String? in\n            guard var str = String(data: self.data, encoding: .utf8) else { return nil }\n            str = str.trimmingCharacters(in: .whitespacesAndNewlines)\n            return str.isEmpty ? nil : str\n        }()\n\n        fileprivate init(_ data: Data) {\n            self.data = data\n        }\n    }\n\n    struct ExecutionError: Error {\n        public let stdout: Output\n        public let stderr: Output\n        public let status: Int32\n        public let arg0: String\n        public let args: [String]\n    }\n\n    func runSync(tee: Bool = false) throws -> (stdout: Output, stderr: Output) {\n        let q = DispatchQueue(label: \"output-queue\")\n\n        var out = Data()\n        var err = Data()\n\n        let outpipe = Pipe()\n        standardOutput = outpipe\n\n        let errpipe = Pipe()\n        standardError = errpipe\n\n        outpipe.fileHandleForReading.readabilityHandler = { handler in\n            q.async {\n                out.append(handler.availableData)\n            }\n        }\n\n        errpipe.fileHandleForReading.readabilityHandler = { handler in\n            q.async {\n                let data = handler.availableData\n                err.append(data)\n                if tee, let str = String(data: data, encoding: .utf8) {\n                    Darwin.fputs(str, stderr)\n                }\n            }\n        }\n\n        try run()\n        waitUntilExit()\n\n        outpipe.fileHandleForReading.readabilityHandler = nil\n        errpipe.fileHandleForReading.readabilityHandler = nil\n\n        return try q.sync {\n            guard terminationStatus == 0, terminationReason == .exit else {\n                throw ExecutionError(stdout: .init(out), stderr: .init(err), status: terminationStatus, arg0: launchPath!, args: arguments ?? [])\n            }\n            return (stdout: Output(out), stderr: Output(err))\n        }\n    }\n\n    static func system(_ arg0: String, args: String...) throws {\n        let task = Process()\n        task.launchPath = arg0\n        task.arguments = args\n        try task.run()\n        task.waitUntilExit()\n\n        guard task.terminationReason == .exit, task.terminationStatus == 0 else {\n            let output = Output(Data())\n            throw ExecutionError(stdout: output, stderr: output, status: task.terminationStatus, arg0: arg0, args: args)\n        }\n    }\n}\n\nextension Process.Output: CustomStringConvertible {\n    public var description: String {\n        return string ?? \"\"\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/Sequence+KeyPath.swift",
    "content": "public extension Sequence {\n    @inlinable\n    func map<T>(_ keyPath: KeyPath<Element, T>) -> [T] {\n        return map {\n            $0[keyPath: keyPath]\n        }\n    }\n\n    @inlinable\n    func compactMap<T>(_ keyPath: KeyPath<Element, T?>) -> [T] {\n        return compactMap {\n            $0[keyPath: keyPath]\n        }\n    }\n\n    @inlinable\n    func flatMap<T>(_ keyPath: KeyPath<Element, [T]>) -> [T] {\n        return flatMap {\n            $0[keyPath: keyPath]\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/StreamReader.swift",
    "content": "import Foundation\nimport Path\n\n// I confess I copy and pasted this from StackOverflow.com\n\npublic class StreamReader  {\n    public let encoding: String.Encoding\n    public let chunkSize: Int\n    private var fileHandle: FileHandle!\n    private var buffer: Data\n    private var atEof: Bool\n    let delimData: Data\n\n    public init(path: Path, delimiter: String = \"\\n\", encoding: String.Encoding = .utf8, chunkSize: Int = 4096) throws {\n        guard let fileHandle = FileHandle(forReadingAtPath: path.string), let delimData = delimiter.data(using: encoding) else {\n            throw CocoaError.error(.fileReadNoSuchFile)\n        }\n        self.encoding = encoding\n        self.chunkSize = chunkSize\n        self.fileHandle = fileHandle\n        self.delimData = delimData\n        self.buffer = Data(capacity: chunkSize)\n        self.atEof = false\n    }\n\n    deinit {\n        close()\n    }\n\n    /// Return next line, or nil on EOF.\n    func nextLine() -> String? {\n        precondition(fileHandle != nil, \"Attempt to read from closed file\")\n\n        // Read data chunks from file until a line delimiter is found:\n        while !atEof {\n            if let range = buffer.range(of: delimData) {\n                // Convert complete line (excluding the delimiter) to a string:\n                let line = String(data: buffer.subdata(in: 0..<range.lowerBound), encoding: encoding)\n                // Remove line (and the delimiter) from the buffer:\n                buffer.removeSubrange(0..<range.upperBound)\n                return line\n            }\n            let tmpData = fileHandle.readData(ofLength: chunkSize)\n            if tmpData.count > 0 {\n                buffer.append(tmpData)\n            } else {\n                // EOF or read error.\n                atEof = true\n                if buffer.count > 0 {\n                    // Buffer contains last line in file (not terminated by delimiter).\n                    let line = String(data: buffer as Data, encoding: encoding)\n                    buffer.count = 0\n                    return line\n                }\n            }\n        }\n        return nil\n    }\n\n    /// Start reading from the beginning of file.\n    func rewind() -> Void {\n        fileHandle.seek(toFileOffset: 0)\n        buffer.count = 0\n        atEof = false\n    }\n\n    /// Close the underlying file. No reading must be done after calling this method.\n    func close() -> Void {\n        fileHandle?.closeFile()\n        fileHandle = nil\n    }\n}\n\nextension StreamReader: Sequence {\n    public func makeIterator() -> AnyIterator<String> {\n        return AnyIterator {\n            return self.nextLine()\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/SwiftVersion.swift",
    "content": "/// The Swift version specifications that Xcode supports\npublic enum SwiftVersion: String, Comparable, Codable {\n    case v4 = \"4\"\n    case v4_2 = \"4.2\"\n    case v5 = \"5.0\"\n\n    private var intValue: Int {\n        switch self {\n        case .v4:\n            return 04_00_00\n        case .v4_2:\n            return 04_02_00\n        case .v5:\n            return 05_00_00\n        }\n    }\n\n    public static func <(lhs: SwiftVersion, rhs: SwiftVersion) -> Bool {\n        return lhs.intValue < rhs.intValue\n    }\n\n#if false\n    public var version: Version {\n        switch self {\n        case .v4:\n            return Version(4,0,0)\n        case .v4_2:\n            return Version(4,2,0)\n        case .v5:\n            return Version(5,0,0)\n        }\n    }\n#endif\n\n#if swift(>=5)\n    public static let `default` = SwiftVersion.v5\n#else\n    public static let `default` = SwiftVersion.v4_2\n#endif\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeObserver/Diff.swift",
    "content": "public struct Diff<T: Hashable> {\n    public let added: Set<T>\n    public let removed: Set<T>\n    public let newValue: Set<T>\n}\n\nextension Diff {\n    init?(old: Set<T>, new: Set<T>) {\n        if old.isEmpty, new.isEmpty {\n            return nil\n        } else if old.isEmpty {\n            added = Set(new)\n            removed = Set()\n        } else if new.isEmpty {\n            added = Set()\n            removed = Set(old)\n        } else {\n            added = Set(new.filter{ !old.contains($0) })\n            removed = Set(old.filter{ !new.contains($0) })\n\n            if added.isEmpty, removed.isEmpty {\n                return nil\n            }\n        }\n\n        newValue = new\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeObserver/XcodeObserver.swift",
    "content": "import Version\nimport Cocoa\nimport Base\nimport Path\n\n//TODO we're hiding errors when Xcode objects cannot be made etc.\n\npublic enum RunStatus {\n    case notRunning\n    case running([Version])\n}\n\npublic enum XcodeError: Error {\n    case unknownVersion\n    case appleScriptBridgeFailed\n}\n\npublic protocol XcodeObserverDelegate: class {\n    func xcode(runStatus: RunStatus)\n    func xcode(workspaceDiff: Diff<Path>)\n    func xcode(error: Error)\n}\n\npublic class XcodeObserver: NSObject {\n\n    public override init() {\n        runningApplications = NSRunningApplication.runningApplications(withBundleIdentifier: \"com.apple.dt.Xcode\")\n        openWorkspaces = Set(runningApplications.compactMap(\\.xcode).flatMap(\\.workspaces))\n\n        super.init()\n\n        NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(onApplicationDidLaunch), name: NSWorkspace.didLaunchApplicationNotification, object: nil)\n\n        let rawNames = [\n             \"com.apple.dt.Xcode.notification.IDEActivityReportDistributedDidCompleteNotification\",\n             \"com.apple.dt.Xcode.notification.IDEEditorCoordinatorDistributedDidCompleteNotification\",\n             \"IDESchemeRunDestinationsDidUpdateNotification\",\n             \"com.apple.sharedfilelist.change\"  //happens when workspaces close for some reason\n        ]\n\n        for rawName in rawNames {\n            let name = Notification.Name(rawName)\n            DistributedNotificationCenter.default().addObserver(self, selector: #selector(onDistributedNotification), name: name, object: nil)\n        }\n    }\n\n    public private(set) var openWorkspaces: Set<Path> {\n        didSet {\n            if let diff = Diff(old: oldValue, new: openWorkspaces) {\n                delegate?.xcode(workspaceDiff: diff)\n            }\n        }\n    }\n\n    public var isRunning: Bool {\n        return runningApplications.first(where: { !$0.isTerminated }) != nil\n    }\n\n    var xcodes: [Xcode] {\n        return runningApplications.compactMap(\\.xcode)\n    }\n\n    func runStatus() throws -> RunStatus {\n        if !isRunning {\n            return .notRunning\n        } else {\n            return .running(xcodes.map{ $0.version ?? .null })\n        }\n    }\n\n    public weak var delegate: XcodeObserverDelegate? {\n        didSet {\n            do {\n                delegate?.xcode(runStatus: try runStatus())\n                delegate?.xcode(workspaceDiff: Diff(added: openWorkspaces, removed: [], newValue: openWorkspaces))\n            } catch {\n                delegate?.xcode(error: error)\n            }\n        }\n    }\n\n    private var kvoRefs: [NSKeyValueObservation] = []\n\n    private var runningApplications: [NSRunningApplication] = [] {\n        didSet {\n            do {\n                delegate?.xcode(runStatus: try runStatus())\n                kvoRefs = runningApplications.map{\n                    $0.observe(\\.isTerminated) { [unowned self] app, _ in\n                        self.delegate?.xcode(runStatus: .notRunning)\n                        self.openWorkspaces = []\n                    }\n                }\n            } catch {\n                delegate?.xcode(error: error)\n                kvoRefs = []\n            }\n        }\n    }\n\n    @objc func onApplicationDidLaunch(_ note: Notification) {\n        guard let userInfo = note.userInfo else { return }\n        guard userInfo[\"NSApplicationBundleIdentifier\"] as? String == \"com.apple.dt.Xcode\" else { return }\n\n        if let app = userInfo[\"NSWorkspaceApplicationKey\"] as? NSRunningApplication {\n            runningApplications.append(app)\n        }\n\n        delegate?.xcode(workspaceDiff: Diff(added: [], removed: [], newValue: []))\n    }\n\n    @objc func onDistributedNotification(_ note: Notification) {\n        //NOTE the distributed notifications we subscribe to all undocumented and coincidental\n        // and thus may be removed at any given Xcode or not behave as we expect at any given\n        // moment. Therefore, this code should be changed!\n\n        openWorkspaces = Set(xcodes.flatMap(\\.workspaces))\n    }\n\n    public var activeWorkspace: Path? {\n        guard let xcode = xcodes.first else { return nil }\n        return xcode.activeWorkspace\n    }\n\n    public var paths: [Path] {\n        return runningApplications.compactMap(\\.bundleURL).compactMap(Path.init)\n    }\n}\n\nprivate extension NSRunningApplication {\n    var xcode: Xcode? {\n        return try? Xcode(pid: processIdentifier)\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeObserver/XcodeScriptingBridge.swift",
    "content": "import ScriptingBridge\nimport Foundation\nimport Version\nimport Base\nimport Path\n\n// NOTE if this class is NOT in this file, the AppleScript stops working… WTF?\npublic class Xcode {\n    private let bridge: XcodeApplication\n\n    public init(pid: pid_t) throws {\n        guard let b = SBApplication(processIdentifier: pid) else {\n            throw XcodeError.appleScriptBridgeFailed\n        }\n        bridge = b\n    }\n\n    /// only works if Xcode is *still* running\n    public var version: Version? {\n        guard bridge.isRunning else {\n            return nil\n        }\n        return bridge.version.flatMap(Version.init(tolerant:))\n    }\n\n    public var isRunning: Bool {\n        return bridge.isRunning\n    }\n\n    public var derivedData: Path {\n        var `default`: Path { return Path.home/\"Library/Developer/Xcode/DerivedData\" }\n        guard let defaults = UserDefaults(suiteName: \"com.apple.dt.Xcode.plist\") else {\n            return `default`\n        }\n        if let customPath = defaults.string(forKey: \"IDECustomDerivedDataLocation\") {\n            return Path.root/customPath\n        } else {\n            return `default`\n        }\n    }\n\n    public func quit() throws {\n        guard bridge.isRunning else { return }\n        bridge.quitSaving?(.ask)\n        if let err = bridge.lastError() {\n            throw err\n        }\n    }\n\n    public func open(documents: [Path] = []) {\n        bridge.activate()\n        _ = bridge.open?(documents.map(\\.string))\n    }\n\n    public var documents: [Path] {\n        guard bridge.isRunning else {\n            // ^^ otherwise causes Xcode to open due to use of scripting bridge\n            return []\n        }\n        // get() or risks crashing since array is “live”\n        guard let docs = bridge.workspaceDocuments?().get() else {\n            return []\n        }\n        return docs.compactMap {\n            ($0 as? XcodeWorkspaceDocument)?.path\n        }.compactMap(Path.init)\n    }\n\n    var workspaces: [Path] {\n        return documents.filter {\n            [\"xcodeproj\", \"xcworkspace\"].contains($0.extension)\n        }\n    }\n\n    public var activeWorkspace: Path? {\n        guard let doc = bridge.activeWorkspaceDocument else { return nil }\n        return doc.path.flatMap(Path.init)\n    }\n}\n\n\n//MARK: Generated\n//NOTE: using sdef, sdp and https://github.com/tingraldi/SwiftScripting\n\n@objc protocol SBObjectProtocol: NSObjectProtocol {\n    func get() -> Any!\n    func lastError() -> Error?\n}\n\n@objc protocol SBApplicationProtocol: SBObjectProtocol {\n    func activate()\n    var delegate: SBApplicationDelegate! { get set }\n    var isRunning: Bool { get }\n}\n\n// MARK: XcodeSaveOptions\n@objc enum XcodeSaveOptions : AEKeyword {\n    case yes = 0x79657320 /* 'yes ' */\n    case no = 0x6e6f2020 /* 'no  ' */\n    case ask = 0x61736b20 /* 'ask ' */\n}\n\n// MARK: XcodeSchemeActionResultStatus\n@objc enum XcodeSchemeActionResultStatus : AEKeyword {\n    case notYetStarted = 0x7372736e /* 'srsn' */\n    case running = 0x73727372 /* 'srsr' */\n    case cancelled = 0x73727363 /* 'srsc' */\n    case failed = 0x73727366 /* 'srsf' */\n    case errorOccurred = 0x73727365 /* 'srse' */\n    case succeeded = 0x73727373 /* 'srss' */\n}\n\n// MARK: XcodeGenericMethods\n@objc protocol XcodeGenericMethods {\n    @objc optional func closeSaving(_ saving: XcodeSaveOptions, savingIn: Any!) // Close a document.\n    @objc optional func delete() // Delete an object.\n    @objc optional func moveTo(_ to: Any!) // Move an object to a new location.\n    @objc optional func build() -> XcodeSchemeActionResult // Invoke the \"build\" scheme action. This command should be sent to a workspace document. The build will be performed using the workspace document's current active scheme and active run destination. This command does not wait for the action to complete; its progress can be tracked with the returned scheme action result.\n    @objc optional func clean() -> XcodeSchemeActionResult // Invoke the \"clean\" scheme action. This command should be sent to a workspace document. The clean will be performed using the workspace document's current active scheme and active run destination. This command does not wait for the action to complete; its progress can be tracked with the returned scheme action result.\n    @objc optional func stop() // Stop the active scheme action, if one is running. This command should be sent to a workspace document. This command does not wait for the action to stop.\n    @objc optional func runWithCommandLineArguments(_ withCommandLineArguments: Any!, withEnvironmentVariables: Any!) -> XcodeSchemeActionResult // Invoke the \"run\" scheme action. This command should be sent to a workspace document. The run action will be performed using the workspace document's current active scheme and active run destination. This command does not wait for the action to complete; its progress can be tracked with the returned scheme action result.\n    @objc optional func testWithCommandLineArguments(_ withCommandLineArguments: Any!, withEnvironmentVariables: Any!) -> XcodeSchemeActionResult // Invoke the \"test\" scheme action. This command should be sent to a workspace document. The test action will be performed using the workspace document's current active scheme and active run destination. This command does not wait for the action to complete; its progress can be tracked with the returned scheme action result.\n}\n\n// MARK: XcodeApplication\n@objc protocol XcodeApplication: SBApplicationProtocol {\n    @objc optional func documents() -> SBElementArray\n    @objc optional func windows() -> SBElementArray\n    @objc optional var name: Int { get } // The name of the application.\n    @objc optional var frontmost: Int { get } // Is this the active application?\n    @objc optional var version: String { get } // The version number of the application.\n    @objc optional func `open`(_ x: Any!) -> Any // Open a document.\n    @objc optional func quitSaving(_ saving: XcodeSaveOptions) // Quit the application.\n    @objc optional func exists(_ x: Any!) // Verify that an object exists.\n    @objc optional func fileDocuments() -> SBElementArray\n    @objc optional func sourceDocuments() -> SBElementArray\n    @objc optional func workspaceDocuments() -> SBElementArray\n    @objc optional var activeWorkspaceDocument: XcodeWorkspaceDocument { get } // The active workspace document in Xcode.\n    @objc optional func setActiveWorkspaceDocument(_ activeWorkspaceDocument: XcodeWorkspaceDocument!) // The active workspace document in Xcode.\n}\nextension SBApplication: XcodeApplication {}\n\n// MARK: XcodeDocument\n@objc protocol XcodeDocument: SBObjectProtocol, XcodeGenericMethods {\n    @objc optional var name: Int { get } // Its name.\n    @objc optional var modified: Int { get } // Has it been modified since the last save?\n    @objc optional var file: Int { get } // Its location on disk, if it has one.\n    @objc optional var path: String { get } // The document's path.\n    @objc optional func setPath(_ path: Int) // The document's path.\n}\nextension SBObject: XcodeDocument {}\n\n// MARK: XcodeWindow\n@objc protocol XcodeWindow: SBObjectProtocol, XcodeGenericMethods {\n    @objc optional var name: Int { get } // The title of the window.\n    @objc optional func id() // The unique identifier of the window.\n    @objc optional var index: Int { get } // The index of the window, ordered front to back.\n    @objc optional var bounds: Int { get } // The bounding rectangle of the window.\n    @objc optional var closeable: Int { get } // Does the window have a close button?\n    @objc optional var miniaturizable: Int { get } // Does the window have a minimize button?\n    @objc optional var miniaturized: Int { get } // Is the window minimized right now?\n    @objc optional var resizable: Int { get } // Can the window be resized?\n    @objc optional var visible: Int { get } // Is the window visible right now?\n    @objc optional var zoomable: Int { get } // Does the window have a zoom button?\n    @objc optional var zoomed: Int { get } // Is the window zoomed right now?\n    @objc optional var document: XcodeDocument { get } // The document whose contents are displayed in the window.\n    @objc optional func setIndex(_ index: Int) // The index of the window, ordered front to back.\n    @objc optional func setBounds(_ bounds: Int) // The bounding rectangle of the window.\n    @objc optional func setMiniaturized(_ miniaturized: Int) // Is the window minimized right now?\n    @objc optional func setVisible(_ visible: Int) // Is the window visible right now?\n    @objc optional func setZoomed(_ zoomed: Int) // Is the window zoomed right now?\n}\nextension SBObject: XcodeWindow {}\n\n// MARK: XcodeFileDocument\n@objc protocol XcodeFileDocument: XcodeDocument {\n}\nextension SBObject: XcodeFileDocument {}\n\n// MARK: XcodeTextDocument\n@objc protocol XcodeTextDocument: XcodeFileDocument {\n    @objc optional var text: Int { get } // The text of the text file referenced.\n    @objc optional var notifiesWhenClosing: Int { get } // Should Xcode notify other apps when this document is closed?\n    @objc optional func setText(_ text: Int) // The text of the text file referenced.\n    @objc optional func setNotifiesWhenClosing(_ notifiesWhenClosing: Int) // Should Xcode notify other apps when this document is closed?\n}\nextension SBObject: XcodeTextDocument {}\n\n// MARK: XcodeSourceDocument\n@objc protocol XcodeSourceDocument: XcodeTextDocument {\n}\nextension SBObject: XcodeSourceDocument {}\n\n// MARK: XcodeWorkspaceDocument\n@objc protocol XcodeWorkspaceDocument: XcodeDocument {\n    @objc optional func breakpoints() -> SBElementArray\n    @objc optional func projects()\n    @objc optional func schemes()\n    @objc optional func runDestinations()\n    @objc optional var loaded: Int { get } // Whether the workspace document has finsished loading after being opened. Messages sent to a workspace document before it has loaded will result in errors.\n    @objc optional var activeScheme: XcodeScheme { get } // The workspace's scheme that will be used for scheme actions.\n    @objc optional var activeRunDestination: XcodeRunDestination { get } // The workspace's run destination that will be used for scheme actions.\n    @objc optional var lastSchemeActionResult: XcodeSchemeActionResult { get } // The scheme action result for the last scheme action command issued to the workspace document.\n    @objc optional var file: Int { get } // The workspace document's location on disk, if it has one.\n    @objc optional func setLoaded(_ loaded: Int) // Whether the workspace document has finsished loading after being opened. Messages sent to a workspace document before it has loaded will result in errors.\n    @objc optional func setActiveScheme(_ activeScheme: XcodeScheme!) // The workspace's scheme that will be used for scheme actions.\n    @objc optional func setActiveRunDestination(_ activeRunDestination: XcodeRunDestination!) // The workspace's run destination that will be used for scheme actions.\n    @objc optional func setLastSchemeActionResult(_ lastSchemeActionResult: XcodeSchemeActionResult!) // The scheme action result for the last scheme action command issued to the workspace document.\n}\nextension SBObject: XcodeWorkspaceDocument {}\n\n// MARK: XcodeSchemeActionResult\n@objc protocol XcodeSchemeActionResult: SBObjectProtocol, XcodeGenericMethods {\n    @objc optional func buildErrors()\n    @objc optional func buildWarnings()\n    @objc optional func analyzerIssues()\n    @objc optional func testFailures()\n    @objc optional func id() // The unique identifier for the scheme.\n    @objc optional var completed: Int { get } // Whether this scheme action has completed (sucessfully or otherwise) or not.\n    @objc optional var status: XcodeSchemeActionResultStatus { get } // Indicates the status of the scheme action.\n    @objc optional var errorMessage: Int { get } // If the result's status is \"error occurred\", this will be the error message; otherwise, this will be \"missing value\".\n    @objc optional var buildLog: Int { get } // If this scheme action performed a build, this will be the text of the build log.\n    @objc optional func setStatus(_ status: XcodeSchemeActionResultStatus) // Indicates the status of the scheme action.\n    @objc optional func setErrorMessage(_ errorMessage: Int) // If the result's status is \"error occurred\", this will be the error message; otherwise, this will be \"missing value\".\n    @objc optional func setBuildLog(_ buildLog: Int) // If this scheme action performed a build, this will be the text of the build log.\n}\nextension SBObject: XcodeSchemeActionResult {}\n\n// MARK: XcodeSchemeActionIssue\n@objc protocol XcodeSchemeActionIssue: SBObjectProtocol, XcodeGenericMethods {\n    @objc optional var message: Int { get } // The text of the issue.\n    @objc optional var filePath: Int { get } // The file path where the issue occurred. This may be 'missing value' if the issue is not associated with a specific source file.\n    @objc optional var startingLineNumber: Int { get } // The starting line number in the file where the issue occurred. This may be 'missing value' if the issue is not associated with a specific source file.\n    @objc optional var endingLineNumber: Int { get } // The ending line number in the file where the issue occurred. This may be 'missing value' if the issue is not associated with a specific source file.\n    @objc optional var startingColumnNumber: Int { get } // The starting column number in the file where the issue occurred. This may be 'missing value' if the issue is not associated with a specific source file.\n    @objc optional var endingColumnNumber: Int { get } // The ending column number in the file where the issue occurred. This may be 'missing value' if the issue is not associated with a specific source file.\n    @objc optional func setMessage(_ message: Int) // The text of the issue.\n    @objc optional func setFilePath(_ filePath: Int) // The file path where the issue occurred. This may be 'missing value' if the issue is not associated with a specific source file.\n    @objc optional func setStartingLineNumber(_ startingLineNumber: Int) // The starting line number in the file where the issue occurred. This may be 'missing value' if the issue is not associated with a specific source file.\n    @objc optional func setEndingLineNumber(_ endingLineNumber: Int) // The ending line number in the file where the issue occurred. This may be 'missing value' if the issue is not associated with a specific source file.\n    @objc optional func setStartingColumnNumber(_ startingColumnNumber: Int) // The starting column number in the file where the issue occurred. This may be 'missing value' if the issue is not associated with a specific source file.\n    @objc optional func setEndingColumnNumber(_ endingColumnNumber: Int) // The ending column number in the file where the issue occurred. This may be 'missing value' if the issue is not associated with a specific source file.\n}\nextension SBObject: XcodeSchemeActionIssue {}\n\n// MARK: XcodeBuildError\n@objc protocol XcodeBuildError: XcodeSchemeActionIssue {\n}\nextension SBObject: XcodeBuildError {}\n\n// MARK: XcodeBuildWarning\n@objc protocol XcodeBuildWarning: XcodeSchemeActionIssue {\n}\nextension SBObject: XcodeBuildWarning {}\n\n// MARK: XcodeAnalyzerIssue\n@objc protocol XcodeAnalyzerIssue: XcodeSchemeActionIssue {\n}\nextension SBObject: XcodeAnalyzerIssue {}\n\n// MARK: XcodeTestFailure\n@objc protocol XcodeTestFailure: XcodeSchemeActionIssue {\n}\nextension SBObject: XcodeTestFailure {}\n\n// MARK: XcodeScheme\n@objc protocol XcodeScheme: SBObjectProtocol, XcodeGenericMethods {\n    @objc optional var name: Int { get } // The name of the scheme.\n    @objc optional func id() // The unique identifier for the scheme.\n}\nextension SBObject: XcodeScheme {}\n\n// MARK: XcodeRunDestination\n@objc protocol XcodeRunDestination: SBObjectProtocol, XcodeGenericMethods {\n    @objc optional var name: Int { get } // The name of the run destination, as displayed in Xcode's interface.\n    @objc optional var architecture: Int { get } // The architecture for which this run destination results in execution.\n    @objc optional var platform: Int { get } // The identifier of the platform which this run destination targets, such as \"macosx\", \"iphoneos\", \"iphonesimulator\", etc .\n    @objc optional var device: XcodeDevice { get } // The physical or virtual device which this run destination targets.\n    @objc optional var companionDevice: XcodeDevice { get } // If the run destination's device has a companion (e.g. a paired watch for a phone) which it will use, this is that device.\n}\nextension SBObject: XcodeRunDestination {}\n\n// MARK: XcodeDevice\n@objc protocol XcodeDevice: SBObjectProtocol, XcodeGenericMethods {\n    @objc optional var name: Int { get } // The name of the device.\n    @objc optional var deviceIdentifier: Int { get } // A stable identifier for the device, as shown in Xcode's \"Devices\" window.\n    @objc optional var operatingSystemVersion: Int { get } // The version of the operating system installed on the device which this run destination targets.\n    @objc optional var deviceModel: Int { get } // The model of device (e.g. \"iPad Air\") which this run destination targets.\n    @objc optional var generic: Int { get } // Whether this run destination is generic instead of representing a specific device. Most destinations are not generic, but a generic destination (such as \"Generic iOS Device\") will be available for some platforms if no physical devices are connected.\n}\nextension SBObject: XcodeDevice {}\n\n// MARK: XcodeBuildConfiguration\n@objc protocol XcodeBuildConfiguration: SBObjectProtocol, XcodeGenericMethods {\n    @objc optional func buildSettings()\n    @objc optional func resolvedBuildSettings()\n    @objc optional func id() // The unique identifier for the build configuration.\n    @objc optional var name: Int { get } // The name of the build configuration.\n}\nextension SBObject: XcodeBuildConfiguration {}\n\n// MARK: XcodeProject\n@objc protocol XcodeProject: SBObjectProtocol, XcodeGenericMethods {\n    @objc optional func buildConfigurations()\n    @objc optional func targets()\n    @objc optional var name: Int { get } // The name of the project\n    @objc optional func id() // The unique identifier for the project.\n}\nextension SBObject: XcodeProject {}\n\n// MARK: XcodeBuildSetting\n@objc protocol XcodeBuildSetting: SBObjectProtocol, XcodeGenericMethods {\n    @objc optional var name: Int { get } // The unlocalized build setting name (e.g. DSTROOT).\n    @objc optional var value: Int { get } // A string value for the build setting.\n    @objc optional func setName(_ name: Int) // The unlocalized build setting name (e.g. DSTROOT).\n    @objc optional func setValue(_ value: Int) // A string value for the build setting.\n}\nextension SBObject: XcodeBuildSetting {}\n\n// MARK: XcodeResolvedBuildSetting\n@objc protocol XcodeResolvedBuildSetting: SBObjectProtocol, XcodeGenericMethods {\n    @objc optional var name: Int { get } // The unlocalized build setting name (e.g. DSTROOT).\n    @objc optional var value: Int { get } // A string value for the build setting.\n    @objc optional func setName(_ name: Int) // The unlocalized build setting name (e.g. DSTROOT).\n    @objc optional func setValue(_ value: Int) // A string value for the build setting.\n}\nextension SBObject: XcodeResolvedBuildSetting {}\n\n// MARK: XcodeTarget\n@objc protocol XcodeTarget: SBObjectProtocol, XcodeGenericMethods {\n    @objc optional func buildConfigurations()\n    @objc optional var name: Int { get } // The name of this target.\n    @objc optional func id() // The unique identifier for the target.\n    @objc optional var project: XcodeProject { get } // The project that contains this target\n    @objc optional func setName(_ name: Int) // The name of this target.\n}\nextension SBObject: XcodeTarget {}\n\n\nenum XcodeScripting: String {\n    case analyzerIssue = \"analyzer issue\"\n    case application = \"application\"\n    case buildConfiguration = \"build configuration\"\n    case buildError = \"build error\"\n    case buildSetting = \"build setting\"\n    case buildWarning = \"build warning\"\n    case device = \"device\"\n    case document = \"document\"\n    case fileDocument = \"file document\"\n    case project = \"project\"\n    case resolvedBuildSetting = \"resolved build setting\"\n    case runDestination = \"run destination\"\n    case schemeActionIssue = \"scheme action issue\"\n    case schemeActionResult = \"scheme action result\"\n    case scheme = \"scheme\"\n    case sourceDocument = \"source document\"\n    case target = \"target\"\n    case testFailure = \"test failure\"\n    case textDocument = \"text document\"\n    case window = \"window\"\n    case workspaceDocument = \"workspace document\"\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/*Target.swift",
    "content": "import xcodeproj\nimport Base\n\npublic extension XcodeProject {\n    class Target {\n        let owner: XcodeProject\n        let underlyingTarget: PBXTarget\n\n        init(owner: XcodeProject, underlyingTarget: PBXTarget) {\n            self.owner = owner\n            self.underlyingTarget = underlyingTarget\n        }\n    }\n\n    class NativeTarget: Target {\n\n    }\n}\n\npublic extension XcodeProject.Target {\n    var name: String {\n        return underlyingTarget.name\n    }\n\n    var type: PBXProductType? {\n        return underlyingTarget.productType\n    }\n\n    var hasDependencies: Bool {\n        return !underlyingTarget.dependencies.isEmpty\n    }\n\n    func add(script: String) -> PBXShellScriptBuildPhase {\n        let phase = PBXShellScriptBuildPhase(shellScript: script, showEnvVarsInLog: false)\n        underlyingTarget.buildPhases.append(phase)\n        owner.add(phase)\n        return phase\n    }\n}\n\npublic extension  XcodeProject.NativeTarget {\n\n    func link(to target: XcodeProject.NativeTarget) throws {\n        guard let productRef = target.underlyingTarget.product else {\n            throw XcodeProject.E.nativeTargetHasNoProductReference\n        }\n        if target.owner == owner {\n            _ = try linkPhase.add(file: productRef)\n        } else {\n            let (containerPortal, productsGroup) = try owner._addProjectReference(to: target.owner)\n            let remote = PBXContainerItemProxy(containerPortal: containerPortal, remoteGlobalID: productRef, proxyType: .reference, remoteInfo: target.name)\n            let refProxy = PBXReferenceProxy(fileType: productRef.explicitFileType, path: productRef.path, name: target.name, remote: remote, sourceTree: .buildProductsDir)\n            _ = try linkPhase.add(file: refProxy)\n            owner.add(remote)\n            owner.add(refProxy)\n            productsGroup.children.append(refProxy)\n        }\n    }\n\n    func build(source: PBXFileReference) throws {\n        _ = try sourcesPhase.add(file: source)\n    }\n\n    func build(resource: PBXFileReference) throws {\n        _ = try resourcesPhase.add(file: resource)\n    }\n\n    func depend(on target: XcodeProject.Target) throws {\n        if target.owner == owner {\n            _ = try (underlyingTarget as! PBXNativeTarget).addDependency(target: target.underlyingTarget)\n        } else {\n            let (containerPortal, _) = try owner._addProjectReference(to: target.owner)\n            let proxy = PBXContainerItemProxy(containerPortal: containerPortal, remoteGlobalID: target.underlyingTarget, proxyType: .nativeTarget, remoteInfo: target.name)\n            let dep = PBXTargetDependency(name: target.name, target: target.underlyingTarget, targetProxy: proxy)\n            underlyingTarget.dependencies.append(dep)\n            owner.add(proxy)\n            owner.add(dep)\n        }\n    }\n\n    func purge(_ dependency: XcodeProject.NativeTarget) {\n        if dependency.owner == owner {\n            fatalError()\n        } else {\n            for dep in owner.pbxproj.targetDependencies where dep.target == dependency.underlyingTarget {\n                owner.remove(dep.targetProxy)\n                owner.remove(dep)\n                if let index = underlyingTarget.dependencies.firstIndex(of: dep) {\n                    underlyingTarget.dependencies.remove(at: index)\n                }\n            }\n            //FIXME will create the linkPhase if doesn't exist yet!\n            let linkPhase = self.linkPhase\n            //FIXME needs to compare containerPortal\n            for case let (index, file) in linkPhase.files.reversed().enumerated() {\n                if let ref = file.file, ref.name == dependency.name {\n                    linkPhase.files.remove(at: index)\n                    owner.remove(ref)\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/+functions.swift",
    "content": "import xcodeproj\n\nextension XcodeProject {\n    public func preventSwiftMigration(for targets: [NativeTarget]) {\n        let dict = [\n            \"LastSwiftMigration\": \"9999\"\n        ]\n        for target in targets {\n            proj.pbxproj.rootObject!.setTargetAttributes(dict, target: target.underlyingTarget)\n        }\n    }\n\n    public func addNativeTarget(name: String, type: PBXProductType, productName: String? = nil) -> NativeTarget {\n        var displayName: String {\n            let name = productName ?? name\n            switch type {\n            case .dynamicLibrary:\n                return \"\\(name).dylib\"\n            case .staticLibrary:\n                return \"\\(name).a\"\n            default:\n                return name\n            }\n        }\n        let productRef = PBXFileReference(sourceTree: .group, path: displayName)\n        add(productRef)\n        productsGroup.children.append(productRef)\n        let target = PBXNativeTarget(name: name, buildConfigurationList: nil, buildPhases: [], buildRules: [], dependencies: [], productInstallPath: nil, productName: productName, product: productRef, productType: type)\n        target.product = productRef\n        add(target)\n        pbxproj.rootObject!.targets.append(target)\n        let nativeTarget = NativeTarget(owner: self, underlyingTarget: target)\n        if let productName = productName {\n            nativeTarget[\"PRODUCT_NAME\"] = productName\n        }\n        if type == .dynamicLibrary {\n            nativeTarget[\"EXECUTABLE_PREFIX\"] = \"lib\"\n        }\n        return nativeTarget\n    }\n\n    public func addAggregateTarget(name: String) -> Target {\n        let target = PBXAggregateTarget(name: name)\n        add(target)\n        pbxproj.rootObject!.targets.append(target)\n        return Target(owner: self, underlyingTarget: target)\n    }\n\n    public func addProjectReference(to other: XcodeProject) throws {\n        _ = try _addProjectReference(to: other)\n    }\n\n    func _addProjectReference(to other: XcodeProject) throws -> (PBXFileReference, PBXGroup) {\n        if let foo = projectReferences[other] {\n            return foo\n        }\n\n        guard other != self else { throw E.cannotReferenceSelf }\n\n        let projectfileRef = mainGroup.add(file: other.path, name: .basename, type: .project)\n        projectfileRef.explicitFileType = FileType.project.rawValue\n\n        let hiddenProductGroup = PBXGroup(name: \"Products\")\n        add(hiddenProductGroup)\n        add(projectfileRef)\n\n        // https://github.com/tuist/xcodeproj/issues/352\n        proj.pbxproj.rootObject!.projects.append([\n            \"ProjectRef\": projectfileRef,\n            \"ProductGroup\": hiddenProductGroup\n        ])\n\n        projectReferences[other] = (projectfileRef, hiddenProductGroup)\n\n        return (projectfileRef, hiddenProductGroup)\n    }\n\n    public func removeProjectReference(_ proj: XcodeProject) {\n\n        func isProj(_ ref: PBXFileReference) -> Bool {\n            return ref.lastKnownFileType == FileType.project.rawValue || ref.explicitFileType == FileType.project.rawValue\n        }\n\n        //FIXME not specific enough\n        //FIXME doesn't remove all necessary objects\n        for (index, dict) in proj.pbxproj.rootObject!.projects.reversed().enumerated() {\n            if let ref = dict[\"ProjectRef\"] as? PBXFileReference, isProj(ref), ref.name == proj.path.basename() {\n                proj.pbxproj.rootObject!.projects.remove(at: index)\n            }\n        }\n    }\n\n    func add(_ object: PBXObject) {\n        pbxproj.add(object: object)\n    }\n\n    func remove(_ object: PBXObject?) {\n        if let object = object {\n            pbxproj.delete(object: object)\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/+platforms.swift",
    "content": "import CakefileDescription\nimport xcodeproj\nimport Version\nimport Base\n\npublic extension XcodeProject {\n    var platforms: Set<PlatformSpecification> {\n\n        func extract(buildConfiguration: XCBuildConfiguration) -> [(Platform, Version)] {\n            return buildConfiguration.platforms.compactMap {\n                guard let v = buildConfiguration.deploymentVersion(for: $0) else { return nil }\n                return ($0, v)\n            }\n        }\n\n        var rv = [Platform: Version]()\n        for (platform, version) in pbxproj.buildConfigurations.flatMap(extract) {\n            rv[platform] = min(rv[platform, default: version], version)\n        }\n\n        return Set(rv.map(PlatformSpecification.init))\n    }\n\n    var swiftVersion: SwiftVersion {\n        return pbxproj.buildConfigurations.compactMap {\n            $0.buildSettings[\"SWIFT_VERSION\"] as? String\n        }.compactMap(SwiftVersion.init).max() ?? .default\n    }\n}\n\nprivate extension Platform {\n    init?(buildSetting: Any?) {\n        switch buildSetting as? String {\n        case \"maxosx\"?:\n            self = .macOS\n        case \"iphoneos\"?, \"iphonesimulator\"?:\n            self = .iOS\n        default:\n            return nil\n        }\n    }\n}\n\nextension XCBuildConfiguration {\n    fileprivate var platforms: Set<Platform> {\n        if let foo = buildSettings[\"SUPPORTED_PLATFORMS\"] as? [String] {\n            return Set(foo.compactMap(Platform.init(buildSetting:)))\n        } else if let foo = buildSettings[\"SDKROOT\"] as? String, let platform = Platform(buildSetting: foo) {\n            return [platform]\n        } else {\n            return []\n        }\n    }\n\n    public func deploymentVersion(for platform: Platform) -> Version? {\n        var string: String? {\n            switch platform {\n            case .macOS:\n                return buildSettings[\"MACOSX_DEPLOYMENT_TARGET\"] as? String\n            case .iOS:\n                return buildSettings[\"IPHONEOS_DEPLOYMENT_TARGET\"] as? String\n            }\n        }\n        guard let str = string, let f = Double(str) else {\n            return nil\n        }\n        return Version(floatLiteral: f)\n    }\n}\n\nextension XcodeProject {\n    public func deploymentVersion(for platform: Platform) -> Version? {\n        return pbxproj.buildConfigurations.compactMap {\n            $0.buildSettings[platform.buildConfigurationKey] as? String\n        }.compactMap(Version.init(tolerant:)).max()\n    }\n\n    public var deploymentTargets: Set<PlatformSpecification> {\n        return Set([Platform.iOS, .macOS].compactMap { platform in\n            deploymentVersion(for: platform).map {\n                PlatformSpecification(platform: platform, version: $0)\n            }\n        })\n    }\n}\n\nprivate extension Platform {\n    var buildConfigurationKey: String {\n        switch self {\n        case .iOS:\n            return \"IPHONEOS_DEPLOYMENT_TARGET\"\n        case .macOS:\n            return \"MACOSX_DEPLOYMENT_TARGET\"\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/Group.swift",
    "content": "import xcodeproj\nimport Path\n\npublic extension XcodeProject {\n    struct Group {\n        let owner: XcodeProject\n        let parentPath: Path\n        let underlyingGroup: PBXGroup\n\n        var path: Path {\n            return parentPath/(underlyingGroup.path ?? \"\")\n        }\n    }\n}\n\npublic extension XcodeProject.Group {\n\n    enum Position {\n        case top, bottom\n    }\n\n    var name: String {\n        return underlyingGroup.name ?? path.basename()\n    }\n\n    var subgroups: [XcodeProject.Group] {\n        return underlyingGroup.children.compactMap{ $0 as? PBXGroup }.map {\n            .init(owner: owner, parentPath: path, underlyingGroup: $0)\n        }\n    }\n\n    private func smartAppend(_ ref: PBXFileElement) {\n        // insert before the Products Group if applicable\n        if underlyingGroup === owner.mainGroup.underlyingGroup, let index = underlyingGroup.children.firstIndex(where: { $0 === owner.productsGroup }) {\n            underlyingGroup.children.insert(ref, at: index)\n        } else {\n            underlyingGroup.children.append(ref)\n        }\n    }\n\n    @discardableResult\n    func add(file: Path, name: XcodeProject.Name = .inferred, type: XcodeProject.FileType? = nil, at position: Position = .bottom) -> PBXFileReference {\n        let ref = PBXFileReference(sourceTree: .group, name: name.string(path: file), lastKnownFileType: type?.rawValue, path: file.relative(to: path))\n        owner.add(ref)\n        switch position {\n        case .bottom:\n            smartAppend(ref)\n        case .top:\n            underlyingGroup.children.insert(ref, at: 0)\n        }\n        return ref\n    }\n\n    func add(group groupPath: Path, name: XcodeProject.Name = .inferred) throws -> XcodeProject.Group {\n        let group = PBXGroup(sourceTree: .group, name: name.string(path: groupPath), path: groupPath.relative(to: path))\n        smartAppend(group)\n        owner.add(group)\n        return .init(owner: owner, parentPath: self.path, underlyingGroup: group)\n    }\n\n    // adds a group without a path\n    func addGroup(name: String) -> XcodeProject.Group {\n        let group = PBXGroup(sourceTree: .group, name: name)\n        smartAppend(group)\n        owner.add(group)\n        return .init(owner: owner, parentPath: path, underlyingGroup: group)\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcakeProject/+functions.swift",
    "content": "import Modelizer\nimport Path\n\nextension XcakeProject {\n    func generateBatterDotSwift(tips: [Module]) throws {\n        var string = \"\"\"\n            // Generated by Cake. Regeneration will occur! Edits will be lost!\n            // Modules are sorted *topologically*.\n\n            \"\"\"\n\n        for module in tips.flattened {\n            string += \"@_exported import \\(module.name)\\n\"\n        }\n        try string.write(to: caked.join(\"Batter.swift\").makeWritable()).chmod(0o444)\n    }\n\n    func generateDependenciesDotSwift(importNames: [String]) throws {\n        var string = \"\"\"\n            // Generated by Cake. Regeneration will occur! Edits will be lost!\n            // We only export _directly_specified_ dependencies.\n\n            \"\"\"\n\n        for moduleName in importNames {\n            string += \"@_exported import \\(moduleName)\\n\"\n        }\n        try string.write(to: caked.join(\"Dependencies.swift\").makeWritable()).chmod(0o444)\n    }\n}\n\nprivate extension Path {\n    func makeWritable() throws -> Path {\n        if isFile {\n            return try chmod(0o600)\n        } else {\n            return self\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcakeProject/Processor/Cakefile.swift",
    "content": "import CakefileDescription\nimport Foundation\nimport Version\nimport Path\n\npublic enum E: Error {\n    case noCakefile\n    case executionFailed(String, args: [String], exit: Int32)\n    case toolkit(required: Range<Version>, available: Version)\n    case noDependenciesInCakefile\n}\n\npublic typealias ProcessorError = E\n\nstruct Cakefile {\n    let path: Path\n    let mtime: Date?\n    private let dump: CakefileDump\n\n    var options: Options { return dump.options }\n    var dependencies: [PackageSpecification] { return dump.dependencies }\n    var platforms: Set<PlatformSpecification> { return dump.platforms }\n\n    var cakeRequirement: Range<Version>? {\n        if case .version(.range(let v))? = dump.cake {\n            return v\n        } else {\n            return nil\n        }\n    }\n\n    init(path: Path, toolkit: Processor.Toolkit) throws {\n        guard path.isFile else {\n            throw E.noCakefile\n        }\n        self.path = path\n        self.dump = try parse(cakefile: path, toolkit: toolkit)\n        self.mtime = path.mtime\n    }\n}\n\npublic struct CakefileParseError: LocalizedError {\n    public let errorDescription: String?\n}\n\nprivate func parse(cakefile path: Path, toolkit: Processor.Toolkit) throws -> CakefileDump {\n    //TODO use stdin to `swift -`\n    \n    var contents = try String(contentsOf: path)\n    contents += \"\"\"\n\n        import Foundation\n        let dump = CakefileDump(platforms: platforms, dependencies: dependencies, options: options)\n        let encoder = JSONEncoder()\n        encoder.outputFormatting = .prettyPrinted\n        let data = try encoder.encode(dump)\n        let str = String(data: data, encoding: .utf8)!\n        print(str)\n        \"\"\"\n\n    let (stdout, stderr) = try Path.mktemp { tmpdir -> (Process.Output, Process.Output) in\n        let tmpfile = tmpdir/\"Cakefile.swift\"\n        try contents.write(to: tmpfile)\n        let tmppath = tmpdir.join(\"Cakefile.swift\").string\n        let task = Process()\n        task.launchPath = toolkit.swift.string\n        task.arguments = [\n            \"-module-name\", \"CakefileScript\",\n            \"-L\", toolkit.L.string,\n            \"-I\", toolkit.I.string,\n            \"-lCakefile\",\n            tmppath]\n        do {\n            return try task.runSync(tee: true)\n        } catch let error as Process.ExecutionError {\n            guard let str = error.stderr.string else { throw error }\n            let mangledError: [Substring] = str.split(separator: \"\\n\").map { line in\n                if line.hasPrefix(tmpfile.string) {\n                    return path.string + line.dropFirst(tmpfile.string.count)\n                } else {\n                    return line\n                }\n            }\n            throw CakefileParseError(errorDescription: mangledError.joined(separator: \"\\n\"))\n        }\n    }\n\n    if !stderr.data.isEmpty, let string = stderr.string {\n        fputs(string, Darwin.stderr)\n    }\n\n    try stdout.data.write(to: path.parent/\".cake/Cakefile.json\")\n\n    return try JSONDecoder().decode(CakefileDump.self, from: stdout.data)\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcakeProject/Processor/Dependencies.swift",
    "content": "import struct Modelizer.DependenciesJSON\nimport CakefileDescription\nimport Foundation\nimport Path\n\nclass Dependencies {\n    let cakefileRepresentation: [PackageSpecification]\n    let json: DependenciesJSON\n\n    var isEmpty: Bool {\n        return json.packages.isEmpty\n    }\n\n    init(deps: [PackageSpecification], prefix: Path, bindir: Path, libpmdir: Path, DEVELOPER_DIR: Path) throws {\n        cakefileRepresentation = deps\n\n        guard !deps.isEmpty else {\n            // no need to do all the heavy SwiftPM lifting\n            json = .init()\n            return\n        }\n\n        var manifest = \"\"\"\n        // swift-tools-version:5.0\n        import PackageDescription\n\n        let pkg = Package(name: \"Dependencies\", dependencies: [\n\n        \"\"\"\n\n        for dep in deps {\n            manifest += \"    \\(dep),\\n\"\n        }\n        manifest += \"])\\n\"\n\n        try manifest.write(to: prefix/\".cake/Package.swift\")\n\n        let decoder = JSONDecoder()\n        decoder.userInfo[.relativePath] = prefix/\"Dependencies\"\n\n        let task = Process()\n        task.launchPath = bindir.join(\"mixer\").string\n        task.arguments = [prefix.string, libpmdir.string]\n        task.environment = ProcessInfo.processInfo.environment\n        task.environment![\"DEVELOPER_DIR\"] = DEVELOPER_DIR.string\n        let (stdout, _) = try task.runSync(tee: true)\n\n        json = try decoder.decode(DependenciesJSON.self, from: stdout.data)\n    }\n}\n\nextension PackageSpecification: CustomStringConvertible {\n    public var description: String {\n        switch constraint {\n        case .version(.range(let range)):\n            let v1 = range.lowerBound\n            let v2 = range.upperBound\n            if v2.major == v1.major + 1, v2.minor == 0, v2.patch == 0 {\n                return \"\"\"\n                .package(url: \"\\(url)\", from: \"\\(v1)\")\n                \"\"\"\n            } else {\n                return \"\"\"\n                .package(url: \"\\(url)\", Version(\\(v1.major),\\(v1.minor),\\(v1.patch))..<Version(\\(v2.major),\\(v2.minor),\\(v2.patch)))\n                \"\"\"\n            }\n        case .version(.exact(let v)):\n            return \"\"\"\n            .package(url: \"\\(url)\", .exact(Version(\\(v.major),\\(v.minor),\\(v.patch)))\n            \"\"\"\n        case .ref(.branch(let branch)), .ref(.tag(let branch)):\n            return \"\"\"\n            .package(url: \"\\(url)\", .branch(\"\\(branch)\"))\n            \"\"\"\n        case .ref(.revision(let SHA)):\n            return \"\"\"\n            .package(url: \"\\(url)\", .revision(\"\\(SHA)\"))\n            \"\"\"\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcakeProject/Processor/Kitchen/CakeProject.swift",
    "content": "import Foundation\nimport Modelizer\nimport Processor\nimport Path\n\npublic protocol CakeProjectDelegate: class {\n    func cakeProjectCakefileChanged(_ cake: CakeProject)\n    func cakeProjectModulesChanged(_ cake: CakeProject)\n    func cakeProjectDependenciesUpdated(_ cake: CakeProject)\n}\n\npublic class CakeProject {\n    let processor: Processor\n\n    public var xcodeproj: Path { return processor.xcodeproj }\n    public var prefix: Path { return processor.prefix }\n    public var lastGenerationTime: Date? { return processor.lastGenerationTime }\n\n    private let fswatcher = FSWatcher()\n\n    weak var delegate: CakeProjectDelegate?\n\n    var modelsPrefix: Path { return processor.modelsPrefix }\n    var cakefile: Path { return processor.cakefilePath }\n\n    public var name: String {\n        return xcodeproj.basename(dropExtension: true)\n    }\n\n    init(xcodeproj: Path, toolkit: Processor.Toolkit) throws {\n        do {\n            processor = try Processor(xcodeproj: xcodeproj, toolkit: toolkit)\n\n            fswatcher.delegate = self\n            fswatcher.watchingPaths = [modelsPrefix.string, cakefile.string]\n\n            try generateXcodeproj()\n\n        } catch ProcessorError.noCakefile {\n            throw E.notCake(xcodeproj.parent)\n        }\n    }\n\n    public func forceRegenerate() throws {\n        try processor.generate(force: true)\n    }\n\n    func processCakefile() throws {\n        fatalError()\n    }\n\n    @discardableResult\n    func generateXcodeproj() throws -> Bool {\n        //TODO don't do cakefile too!\n        return try processor.generate()\n    }\n\n    public func updateDependencies() throws {\n        try processor.updateDependencies()\n        delegate?.cakeProjectDependenciesUpdated(self)\n    }\n}\n\nextension CakeProject: FSWatcherDelegate {\n    func fsWatcherRescanRequired() {\n        delegate?.cakeProjectModulesChanged(self)\n    }\n\n    func fsWatcher(paths: [String], events: [FSWatcher.Event]) {\n        for (path, event) in zip(paths, events) {\n            if path == cakefile.string {\n                if event == .modified {\n                    delegate?.cakeProjectCakefileChanged(self)\n                    return  // triggers module scan too\n                }\n            } else {\n                delegate?.cakeProjectModulesChanged(self)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcakeProject/Processor/Kitchen/FSWatcher.swift",
    "content": "import Foundation\n\nprotocol FSWatcherDelegate: class {\n    func fsWatcherRescanRequired()\n    func fsWatcher(paths: [String], events: [FSWatcher.Event])\n}\n\nclass FSWatcher {\n\n    private var stream: FSEventStreamRef?\n\n    weak var delegate: FSWatcherDelegate? {\n        didSet {\n            if delegate == nil {\n                pause()\n            } else {\n                resume()\n            }\n        }\n    }\n\n    deinit {\n        if let stream = stream {\n            FSEventStreamStop(stream)\n            FSEventStreamInvalidate(stream)\n            FSEventStreamRelease(stream)\n        }\n    }\n\n    var watchingPaths: Set<String> = [] {\n        didSet {\n            guard watchingPaths != oldValue else { return }\n\n            pause()\n            stream = nil\n            start()\n        }\n    }\n\n    private func start() {\n        guard stream == nil, !watchingPaths.isEmpty else {\n            return\n        }\n\n        let paths = Array(watchingPaths) as CFArray\n\n        var context = FSEventStreamContext(version: 0, info: UnsafeMutableRawPointer(mutating: Unmanaged.passUnretained(self).toOpaque()), retain: nil, release: nil, copyDescription: nil)\n        stream = FSEventStreamCreate(kCFAllocatorDefault, innerEventCallback, &context, paths, FSEventStreamEventId(kFSEventStreamEventIdSinceNow), 0, UInt32(kFSEventStreamCreateFlagUseCFTypes | kFSEventStreamCreateFlagFileEvents))\n        FSEventStreamScheduleWithRunLoop(stream!, RunLoop.current.getCFRunLoop(), CFRunLoopMode.defaultMode.rawValue)\n        FSEventStreamStart(stream!)\n    }\n\n    func resume() {\n        _ = stream.map(FSEventStreamStart)\n    }\n\n    func pause() {\n        stream.map(FSEventStreamStop)\n    }\n\n    private let innerEventCallback: FSEventStreamCallback = { (stream, contextInfo, numEvents, eventPaths, eventFlags, eventIds) in\n        let fsWatcher = unsafeBitCast(contextInfo, to: FSWatcher.self)\n        func path(at: Int) -> String {\n            return unsafeBitCast(eventPaths, to: NSArray.self)[at] as! String\n        }\n\n        var paths: [String] = []\n        var events: [Event] = []\n\n        for x in 0..<numEvents {\n            let flags = Flag(rawValue: eventFlags[x])\n\n            if flags.contains(.rescan) {\n                fsWatcher.delegate?.fsWatcherRescanRequired()\n                return\n            }\n\n            var event: Event? {\n                if flags.contains(.removed) {\n                    return .deleted\n                } else if flags.contains(.created) {\n                    return .created\n                } else if flags.contains(.renamed) {\n                    return .renamed\n                } else if flags.contains(.modified) {\n                    return .modified\n                } else {\n                    return nil\n                }\n            }\n            if let e = event {\n                paths.append(path(at: x))\n                events.append(e)\n            }\n        }\n\n        assert(paths.count == events.count)\n\n        if !paths.isEmpty {\n            fsWatcher.delegate?.fsWatcher(paths: paths, events: events)\n        }\n    }\n\n    enum Event {\n        case created\n        case modified\n        case deleted\n        case renamed\n    }\n}\n\nprivate struct Flag: OptionSet {\n    let rawValue: FSEventStreamEventFlags\n    init(rawValue: FSEventStreamEventFlags) {\n        self.rawValue = rawValue\n    }\n    init(_ value: Int) {\n        self.rawValue = FSEventStreamEventFlags(value)\n    }\n\n    // we don’t care about most events\n\n    static let created = Flag(kFSEventStreamEventFlagItemCreated)\n    static let modified = Flag(kFSEventStreamEventFlagItemModified)\n    static let removed = Flag(kFSEventStreamEventFlagItemRemoved)\n    static let renamed = Flag(kFSEventStreamEventFlagItemRenamed)\n\n    static let rescan = Flag(kFSEventStreamEventFlagMustScanSubDirs)\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcakeProject/Processor/Kitchen/Kitchen.swift",
    "content": "import class Modelizer.Module\nimport XcodeObserver\nimport Foundation\nimport Processor\nimport Version\nimport Path\n\nenum E: Error {\n    case notCake(Path)\n    case xcodeTooOld\n    case xcodeVersionUnavailable\n}\n\npublic extension Version {\n    static var minXcode: Version {\n        return Version(10,2,0)\n    }\n}\n\n/// knows what Xcode projects are open and which are Cakes\npublic class Kitchen {\n    public init(cake: Bundle) {\n        self.cakeBundle = cake\n    }\n\n    let cakeBundle: Bundle\n\n    public weak var delegate: KitchenDelegate? {\n        didSet {\n            dispatchPrecondition(condition: .onQueue(.main))\n            \n            xcodeObserver.delegate = delegate == nil ? nil : self\n        }\n    }\n\n    let xcodeObserver = XcodeObserver()\n\n    public private(set) var cakes: [CakeProject] = []\n    public private(set) var notCakes: [Path] = []\n\n    /// called via AppleScript bridge\n    public func generate(for path: Path) throws {\n        dispatchPrecondition(condition: .onQueue(.main))\n\n        for cake in cakes {\n            if cake.prefix == path {\n                _ = try cake.generateXcodeproj()\n                return\n            }\n        }\n        throw E.notCake(path)\n    }\n\n    public var activeWorkspace: Path? {\n        return xcodeObserver.activeWorkspace\n    }\n}\n\nextension Kitchen: XcodeObserverDelegate {\n    public func xcode(runStatus: RunStatus) {\n        dispatchPrecondition(condition: .onQueue(.main))\n\n        switch runStatus {\n        case .notRunning:\n            delegate?.xcode(isRunning: false)\n        case .running(let versions) where versions.count == 1 && versions[0] < .minXcode:\n            delegate?.kitchen(error: E.xcodeTooOld)\n        case .running:\n            delegate?.xcode(isRunning: true)\n        }\n    }\n\n    public func xcode(workspaceDiff diff: Diff<Path>) {\n        dispatchPrecondition(condition: .onQueue(.main))\n\n        cakes.remove(paths: diff.removed)\n\n        for path in diff.added {\n            do {\n                //TODO path needs to be determined from the Xcode for this project\n                guard let xcodePath = xcodeObserver.paths.first, let toolkit = Processor.Toolkit(cake: cakeBundle, xcode: xcodePath) else {\n                    throw E.xcodeVersionUnavailable\n                }\n                let proj = try CakeProject(xcodeproj: path, toolkit: toolkit)\n                proj.delegate = self\n                cakes.append(proj)\n            } catch E.notCake {\n                //noop\n            } catch {\n                delegate?.kitchen(error: error)\n            }\n        }\n\n        notCakes = xcodeObserver.openWorkspaces.subtracting(cakes.map(\\.xcodeproj)).sorted()\n\n        delegate?.kitchen(\n            cake: cakes,\n            notCake: notCakes.map{ $0.basename(dropExtension: true) })\n    }\n\n    public func xcode(error: Error) {\n        dispatchPrecondition(condition: .onQueue(.main))\n\n        delegate?.kitchen(error: error)\n    }\n}\n\nextension Kitchen: CakeProjectDelegate {\n    public func cakeProjectCakefileChanged(_ cake: CakeProject) {\n        dispatchPrecondition(condition: .onQueue(.main))\n\n        do {\n            try cake.processCakefile()\n            if try cake.generateXcodeproj() {\n                delegate?.kitchen(regenerated: cake)\n            }\n        } catch {\n            delegate?.kitchen(error: error)\n        }\n    }\n\n    public func cakeProjectModulesChanged(_ cake: CakeProject) {\n        dispatchPrecondition(condition: .onQueue(.main))\n\n        do {\n            if try cake.generateXcodeproj() {\n                delegate?.kitchen(regenerated: cake)\n            }\n        } catch {\n            delegate?.kitchen(error: error)\n        }\n    }\n\n    public func cakeProjectDependenciesUpdated(_ cake: CakeProject) {\n        dispatchPrecondition(condition: .onQueue(.main))\n\n        delegate?.kitchen(regenerated: cake)\n    }\n}\n\nprivate extension Array where Element == CakeProject {\n    mutating func remove(paths: Set<Path>) {\n        guard !paths.isEmpty else { return }\n        removeAll {\n            paths.contains($0.xcodeproj)\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcakeProject/Processor/Kitchen/KitchenDelegate.swift",
    "content": "public protocol KitchenDelegate: class {\n    func xcode(isRunning: Bool)\n    func kitchen(cake: [CakeProject], notCake: [String])\n    func kitchen(error: Error)\n    func kitchen(regenerated: CakeProject)\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcakeProject/Processor/Self.swift",
    "content": "import struct CakefileDescription.PlatformSpecification\nimport enum Base.SwiftVersion\nimport XcakeProject\nimport XcodeProject\nimport Foundation\nimport Modelizer\nimport Path\n\npublic class Processor {\n    /// path to the Xcode Project that is Cake\n    public let xcodeproj: Path\n\n    /// time that the last generation attempt *completed*\n    public internal(set) var lastGenerationTime: Date?\n\n    var cakefile: Cakefile\n    var dependencies: Dependencies\n    var extractedData: ExtractedData\n\n    var platforms: Set<PlatformSpecification> {\n        return cakefile.platforms.union(extractedData.platforms)\n    }\n\n    public var cakefilePath: Path { return cakefile.path }\n    public var prefix: Path { return xcodeproj.parent }\n    public var modelsPrefix: Path { return prefix/\"Sources/Model\" }\n\n    public let toolkit: Toolkit\n\n    public init(xcodeproj: Path, toolkit: Toolkit) throws {\n        //TODO should load from JSON unless mtime is greater\n        self.toolkit = toolkit\n        self.xcodeproj = xcodeproj\n        (cakefile, dependencies) = try toolkit.foo(prefix: xcodeproj.parent)\n        self.extractedData = try ExtractedData(path: xcodeproj)\n        try _generate(tips: getTips())\n    }\n\n    var previousTips = Set<Module>()\n\n    private func getTips() throws -> [Module] {\n        return try modelize(root: modelsPrefix, basename: cakefile.options.baseModuleName)\n    }\n\n    func _generate(tips: [Module], set: Set<Module>? = nil) throws {\n        try XcakeProject(\n            tips: tips,\n            dependencies: dependencies.json,\n            prefix: prefix,\n            platforms: platforms,\n            swift: extractedData.swiftVersion,\n            suppressDependencyWarnings: cakefile.options.suppressDependencyWarnings\n        ).write()\n        previousTips = set ?? Set(tips)\n        lastGenerationTime = Date()\n    }\n\n    /// - Parameter force: force generation ignoring dependency information\n    /// - Returns: if generation occurred\n    @discardableResult\n    public func generate(force: Bool = false) throws -> Bool {\n\n        //TODO change detection could be more efficient\n        // no need to calculate modules for eg. if directory structure is identical\n        // FSEvent system provides granular event detail, and we're only interested\n        // in move, rename, create and delete basically and then only if they are\n        // swift files or directories that contain swift files or subdirectories\n        // with swift files\n\n        var needsGeneration = false\n\n        guard !force else {\n            (cakefile, dependencies) = try toolkit.foo(prefix: prefix)\n            extractedData = try ExtractedData(path: xcodeproj)\n            let tips = try getTips()\n            previousTips = Set(tips)\n            try _generate(tips: tips)\n            return true\n        }\n\n        try toolkit.make()\n\n        if isDirty(input: cakefilePath.mtime, cache: cakefile.mtime) {\n            cakefile = try toolkit.bar(prefix: prefix)\n            needsGeneration = true\n        }\n\n        if cakefile.dependencies != dependencies.cakefileRepresentation {\n            //FIXME not DRY\n            dependencies = try Dependencies(deps: cakefile.dependencies, prefix: prefix, bindir: toolkit.bindir, libpmdir: toolkit.pm, DEVELOPER_DIR: toolkit.xcodePath)\n            needsGeneration = true\n\n            //FIXME currently the Mixer writes dependencies.json, but maybe we should?\n        }\n\n        if isDirty(input: extractedData.path.mtime, cache: extractedData.mtime) {\n            extractedData = try ExtractedData(path: xcodeproj)\n        }\n\n        let tips = try getTips()\n        let set = Set(tips)\n\n        needsGeneration = needsGeneration || set != previousTips\n\n        if needsGeneration {\n            try _generate(tips: tips, set: set)\n            return true\n        } else {\n            return false\n        }\n    }\n\n    public func updateDependencies() throws {\n        if dependencies.isEmpty {\n            throw E.noDependenciesInCakefile\n        }\n\n        let task = Process()\n        task.launchPath = toolkit.swift.string\n        task.arguments = [\"package\",\n                          \"--build-path\", \"swift-pm\",\n                          \"update\"]\n        task.currentDirectoryPath = prefix.join(\".cake\").string\n        try task.run()\n        task.waitUntilExit()\n        if task.terminationReason == .uncaughtSignal || task.terminationStatus != 0 {\n            throw CocoaError.error(.executableLoad)\n        }\n        try generate(force: true)\n    }\n}\n\n\nprivate extension Processor.Toolkit {\n    func foo(prefix: Path) throws -> (Cakefile, Dependencies) {\n        try make()\n        let cakefile = try bar(prefix: prefix)\n        let dependencies = try Dependencies(deps: cakefile.dependencies, prefix: prefix, bindir: bindir, libpmdir: pm, DEVELOPER_DIR: xcodePath)\n        return (cakefile, dependencies)\n    }\n\n    func bar(prefix: Path) throws -> Cakefile {\n        let cakefile = try Cakefile(path: prefix/\"Cakefile.swift\", toolkit: self)\n        if let requirement = cakefile.cakeRequirement, !requirement.contains(cakeVersion) {\n            throw E.toolkit(required: requirement, available: cakeVersion)\n        }\n        return cakefile\n    }\n}\n\nprivate extension Bundle {\n    var executables: Path {\n        return executablePath.flatMap(Path.init)!.parent\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcakeProject/Processor/SwiftVersion.swift",
    "content": "import struct CakefileDescription.PlatformSpecification\nimport enum Base.SwiftVersion\nimport XcodeProject\nimport Foundation\nimport Path\n\nstruct ExtractedData {\n    let path: Path\n    let swiftVersion: Base.SwiftVersion\n    let platforms: Set<PlatformSpecification>\n    let mtime: Date?\n\n    init(path: Path) throws {\n        self.path = path\n        let xcodeproj = try XcodeProject(existing: path)\n        swiftVersion = xcodeproj.swiftVersion\n        platforms = xcodeproj.deploymentTargets\n        mtime = path.mtime\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcakeProject/Processor/TemporaryDirectory.swift",
    "content": "import Foundation\nimport Path\n\nclass TemporaryDirectory {\n    let url: URL\n    var path: Path { return Path.root/url.path }\n    var string: String { return url.path }\n\n    /**\n     Creates a new temporary directory.\n\n     The directory is recursively deleted when this object deallocates.\n\n     If you need a temporary directory on a specific volume use the `appropriateFor`\n     parameter.\n\n     - Important: If you are moving a file, ensure to use the `appropriateFor`\n     parameter, since it is volume aware and moving the file across volumes will take\n     exponentially longer!\n     - Important: The `appropriateFor` parameter does not work on Linux.\n     - Parameter appropriateFor: The temporary directory will be located on this\n     volume.\n    */\n    init(appropriateFor: URL? = nil) throws {\n      #if !os(Linux)\n        let appropriate: URL\n        if let appropriateFor = appropriateFor {\n            appropriate = appropriateFor\n        } else if #available(OSX 10.12, iOS 10, tvOS 10, watchOS 3, *) {\n            appropriate = FileManager.default.temporaryDirectory\n        } else {\n            appropriate = URL(fileURLWithPath: NSTemporaryDirectory())\n        }\n        url = try FileManager.default.url(for: .itemReplacementDirectory, in: .userDomainMask, appropriateFor: appropriate, create: true)\n      #else\n        let envs = ProcessInfo.processInfo.environment\n        let env = envs[\"TMPDIR\"] ?? envs[\"TEMP\"] ?? envs[\"TMP\"] ?? \"/tmp\"\n        let dir = Path.root/env/\"swift-sh.XXXXXX\"\n        var template = [UInt8](dir.string.utf8).map({ Int8($0) }) + [Int8(0)]\n        guard mkdtemp(&template) != nil else { throw CocoaError.error(.featureUnsupported) }\n        url = URL(fileURLWithPath: String(cString: template))\n      #endif\n    }\n\n    deinit {\n        _ = try? FileManager.default.removeItem(at: url)\n    }\n}\n\nextension Path {\n    static func mktemp<T>(body: (Path) throws -> T) throws -> T {\n        let tmp = try TemporaryDirectory()\n        return try body(tmp.path)\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcakeProject/Processor/etc.swift",
    "content": "import Foundation\n\nfunc warning(_ msg: Any) {\n    fputs(\"warning: \\(msg)\\n\", stderr)\n}\n\nfunc error(_ msg: Any) -> Never {\n    fputs(\"error: \\(msg)\\n\", stderr)\n    exit(1)\n}\n\nimport Version\nimport Path\n\npublic extension Processor {\n    struct Toolkit {\n        let cakePath: Path\n        public let xcodePath: Path\n        public let cakeVersion: Version\n        public let xcodeProductBuildVersion: String\n\n        static var derivedData: Path {\n            return Path.home.Library.Developer.Cake.DerivedData\n        }\n\n        var makedir: Path {\n            return Toolkit.derivedData/xcodeProductBuildVersion\n        }\n        var L: Path {\n            return makedir/\"lib\"\n        }\n        var I: Path {\n            return L\n        }\n        var pm: Path {\n            return L.pm\n        }\n        var bindir: Path {\n            return cakePath.Contents.MacOS\n        }\n\n        func make() throws {\n            let task = Process()\n            task.launchPath = xcodePath.join(\"Contents/Developer/usr/bin/make\").string\n            task.currentDirectoryPath = cakePath.Contents.KitchenWare.string\n            var env = ProcessInfo.processInfo.environment\n            env[\"OUTDIR\"] = makedir.string\n            task.environment = env\n            try task.run()\n            task.waitUntilExit()\n            if task.terminationReason == .uncaughtSignal || task.terminationStatus != 0 {\n                throw CocoaError.error(.executableLoad)\n            }\n        }\n\n        public var swift: Path {\n            return xcodePath/\"Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift\"\n        }\n\n        public init?(cake: Bundle, xcode: Path) {\n            guard let dict = NSDictionary(contentsOf: xcode.join(\"Contents/version.plist\").url) else {\n                return nil\n            }\n            guard let v = dict[\"ProductBuildVersion\"] as? String else {\n                return nil\n            }\n            xcodeProductBuildVersion = v\n            cakeVersion = cake.version\n            xcodePath = xcode\n            cakePath = cake.path\n        }\n    }\n}\n\nfunc isDirty(input: Date?, cache: Date?) -> Bool {\n    if let a = input, let b = cache {\n        return a > b\n    } else {\n        return true\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcakeProject/XcakeProject.swift",
    "content": "import class Foundation.Bundle\nimport enum Base.SwiftVersion\nimport CakefileDescription\nimport XcodeProject\nimport Modelizer\nimport Path\n\npublic class XcakeProject: XcodeProject {\n    let tips: [Module]\n    let dependencies: DependenciesJSON\n\n    var caked: Path { return parentDirectory }\n    var prefix: Path { return caked.parent }\n    var modelPrefix: Path { return prefix/\"Sources/Model\" }\n\n    var cakeTarget: NativeTarget!\n\n    enum E: Error {\n        case modulePathNotInPrefix(Path)\n        case programmerError\n        case pathRelationError\n        case noModules\n        case invalidModuleHeirarchy\n\n        /// we can support different structures, open a PR without code for discussion\n        case unsupportedDirectoryHierarchy\n\n        case noPlatforms\n    }\n\n    /// - Note: Tips and dependencies are **not** accurate\n    override public init(existing: Path) throws {\n        tips = []\n        dependencies = .init()\n        try super.init(existing: existing)\n        cakeTarget = nativeTargets.first(where: { $0.name == \"Cake\" })\n    }\n\n    /// Creates a cake project without any dependencies determining modules itself\n    /// - Parameter prefix: the directory that contains the `.cake` directory\n    public convenience init(prefix: Path, platforms: Set<PlatformSpecification>, swift swiftVersion: SwiftVersion, options: CakefileDescription.Options) throws {\n        guard !platforms.isEmpty else { throw E.noPlatforms }\n        let model = prefix/\"Sources/Model\"\n        let modules = try modelize(root: model, basename: options.baseModuleName)\n        try self.init(tips: modules, dependencies: .init(), prefix: prefix, platforms: platforms, swift: swiftVersion, suppressDependencyWarnings: options.suppressDependencyWarnings)\n    }\n\n    /// Creates a cake project for the specified modules and dependencies\n    /// - Parameter prefix: the directory that contains the `.cake` directory\n    public init(tips: [Module], dependencies: DependenciesJSON, prefix: Path, platforms: Set<PlatformSpecification>, swift swiftVersion: SwiftVersion, suppressDependencyWarnings: Bool) throws {\n\n        self.tips = tips\n        self.dependencies = dependencies\n\n        super.init(name: \"Cake\", parentDirectory: prefix/\".cake\", for: platforms, swift: swiftVersion)\n\n        let cakefileTarget = addAggregateTarget(name: \"Cakefile\")\n        cakefileTarget[\"SDKROOT\"] = \"macosx\"\n        cakefileTarget[\"SUPPORTED_PLATFORMS\"] = [\"macosx\"]\n        let script = cakefileTarget.add(script: .cakefileScript)\n        script.name = \"Regenerate Cake.xcodeproj\"\n        script.shellPath = \"$(DT_TOOLCHAIN_DIR)/usr/bin/swift\"\n        script.inputPaths = [\"$(PROJECT_DIR)/../Cakefile.swift\"]\n        script.outputPaths = [\n            \"$(PROJECT_DIR)/Cakefile.json\",\n            \"$(PROJECT_DIR)/Dependencies.json\"]\n\n        let libdir = \"$(HOME)/Library/Developer/Cake/DerivedData/$(XCODE_PRODUCT_BUILD_VERSION)/lib\"\n\n        let cakefileCompletionTarget = addNativeTarget(name: \"Cakefile·Completion\", type: .commandLineTool)\n        try cakefileCompletionTarget.build(source: mainGroup.add(file: prefix/\"Cakefile.swift\", name: .basename))\n        cakefileCompletionTarget[\"SDKROOT\"] = \"macosx\"\n        cakefileCompletionTarget[\"SUPPORTED_PLATFORMS\"] = [\"macosx\"]\n        cakefileCompletionTarget[\"LD\"] = \"/usr/bin/true\"  // prevents link failure\n        cakefileCompletionTarget[\"OTHER_SWIFT_FLAGS\"] = [\"-I\", libdir, \"-L\", libdir]\n        cakefileCompletionTarget[\"PRODUCT_NAME\"] = \"CakefileScript\"\n        cakefileCompletionTarget[\"PRODUCT_MODULE_NAME\"] = \"Script\"\n\n      //// third party dependencies\n        let thirdPartyTarget: XcodeProject.NativeTarget?, thirdPartyTargets: [XcodeProject.NativeTarget]\n        if !dependencies.isEmpty {\n            let thirdPartyDepsGroup = try mainGroup.add(group: prefix/\"Dependencies\", name: .basename)\n\n            let tips: [XcodeProject.NativeTarget]\n            (tips, thirdPartyTargets) = try add(modules: dependencies.modules, to: { module in\n                try dependencies.group(for: module, root: thirdPartyDepsGroup)\n            }, prefix: \"Deps·\")\n\n            for target in thirdPartyTargets {\n                if !target.hasDependencies {\n                    try target.depend(on: cakefileTarget)\n                }\n                target[\"SWIFT_ACTIVE_COMPILATION_CONDITIONS\"] = [\"$(inherited)\", \"SWIFT_PACKAGE\"]\n                if suppressDependencyWarnings {\n                    // we don’t set for false since that is our project default\n                    target[\"SWIFT_SUPPRESS_WARNINGS\"] = true\n                }\n            }\n\n            thirdPartyTarget = addNativeTarget(name: \"Dependencies\", type: .staticLibrary)\n            for target in tips {\n                try thirdPartyTarget!.depend(on: target)\n            }\n\n            for target in thirdPartyTargets {\n                try thirdPartyTarget!.link(to: target)\n            }\n\n            preventSwiftMigration(for: thirdPartyTargets)\n\n        } else {\n            thirdPartyTarget = nil\n            thirdPartyTargets = []\n        }\n\n      //// Model refs & targets\n        let batterTarget: NativeTarget, batterTargets: [NativeTarget]\n        do {\n            let group = try mainGroup.add(group: modelPrefix, name: .custom(\"Batter\"))\n            let batterTips: [NativeTarget]\n            (batterTips, batterTargets) = try add(modules: tips, to: group, prefix: \"Batter·\")\n\n            if let thirdPartyTarget = thirdPartyTarget {\n                for target in batterTargets where !target.hasDependencies {\n                    try target.depend(on: thirdPartyTarget)\n                }\n            }\n\n          //// batter target is an aggregate static archive of all modules\n            batterTarget = addNativeTarget(name: \"Batter\", type: .staticLibrary)\n            for target in batterTips {\n                try batterTarget.depend(on: target)\n            }\n            for target in batterTargets {\n                try batterTarget.link(to: target)\n            }\n\n          //// we may need to depend on Cakefile\n            if thirdPartyTarget == nil {\n                for target in batterTargets where !target.hasDependencies {\n                    try target.depend(on: cakefileTarget)\n                }\n            }\n\n          //// integrate Carthage stuff if its there\n            if prefix.Carthage.isDirectory, prefix.Cartfile.isFile {\n                for target in batterTargets {\n                    for spec in platforms {\n                        let platform = spec.platform\n                        for sdk in platform.sdks {\n                            let key = \"FRAMEWORK_SEARCH_PATHS[sdk=\\(sdk)*]\"\n                            let value = \"../Carthage/Build/\\(platform.carthageDir)\"\n                            target.debug.buildSettings[key] = value\n                            target.release.buildSettings[key] = value\n                        }\n                    }\n                }\n            }\n        }\n\n    ////// Kitchenware group\n        let kitchenware = try mainGroup.add(group: caked, name: .custom(\"Kitchenware\"))\n\n        try batterTarget.build(source: kitchenware.add(file: caked/\"Batter.swift\"))\n        try thirdPartyTarget?.build(source: kitchenware.add(file: caked/\"Dependencies.swift\"))\n\n    ////// integrate Cocoapods if available\n        if prefix.Podfile.isFile, prefix.Pods.isDirectory {\n\n            let podProject = try XcodeProject(existing: prefix.Pods / \"Pods.xcodeproj\")\n\n            if let podTarget = podProject.nativeTargets.first(where: { $0.name.hasPrefix(\"Pods-\") }) {\n\n                let targetSupportFiles = prefix.Pods/\"Target Support Files\"/podTarget.name\n                let debugConfigurationFile = kitchenware.add(file: targetSupportFiles/\"\\(podTarget.name).debug.xcconfig\", name: .basename)\n                let releaseConfigurationFile = kitchenware.add(file: targetSupportFiles/\"\\(podTarget.name).release.xcconfig\", name: .basename)\n\n                for target in batterTargets {\n                    try target.depend(on: podTarget)\n                    target.debug.baseConfiguration = debugConfigurationFile\n                    target.release.baseConfiguration = releaseConfigurationFile\n                }\n            }\n        }\n\n    ////// Versionator\n        let versionator = addAggregateTarget(name: \"Versionator\")\n        let vscript = versionator.add(script: \"\"\"\n            v=$(git describe --tags --always --abbrev=0)\n            n=$(git rev-list HEAD --count)\n\n            if [[ -z $v ]]; then v=\"0.0.0\"; fi\n            if [[ -z $n ]]; then n=\"0\"; fi\n\n            echo \"CURRENT_PROJECT_VERSION = $n\" > Version.xcconfig\n            echo \"SEMANTIC_PROJECT_VERSION = $v\" >> Version.xcconfig\n            echo \"SEMANTIC_PROJECT_VERSION[config=Debug] = $v-debug\" >> Version.xcconfig\n\n            \"\"\")\n        vscript.name = \"Determine Version\"\n        vscript.outputPaths = [\"Version.xcconfig\"]\n        vscript.inputPaths = [\"../.git/refs/tags\"]\n\n    ////// Cake.a\n        cakeTarget = addNativeTarget(name: \"Cake\", type: .staticLibrary)\n        try cakeTarget.build(source: kitchenware.add(file: caked/\"Cake.swift\"))\n        try cakeTarget.depend(on: batterTarget)\n        try cakeTarget.depend(on: versionator)\n        try cakeTarget.link(to: batterTarget)\n        if let thirdPartyTarget = thirdPartyTarget {\n            try cakeTarget.depend(on: thirdPartyTarget)\n            try cakeTarget.link(to: thirdPartyTarget)\n        }\n    }\n\n    private func add(modules tips: [Module], to parent: Group, prefix: String) throws -> (tips: [NativeTarget], all: [NativeTarget]) {\n        return try add(modules: tips, to: { module in\n            try parent.add(group: module.path, name: .custom(module.name))\n        }, prefix: prefix)\n    }\n\n    private func add(modules tips: [Module], to groupFor: (Module) throws -> Group, prefix: String) throws -> (tips: [NativeTarget], all: [NativeTarget]) {\n        var targets = [Module: NativeTarget]()\n        let modules = tips.flattened\n\n        for module in modules {\n            let group = try groupFor(module)\n            let target = addNativeTarget(name: \"\\(prefix)\\(module.name)\", type: .staticLibrary, productName: module.name)\n            if let v = module.swiftVersion {\n                target[\"SWIFT_VERSION\"] = v.rawValue\n            }\n            for file in module.files {\n                try target.build(source: group.add(file: file))\n            }\n            targets[module] = target\n        }\n\n        for module in modules {\n            for dep in module.dependencies {\n                guard let dep = targets[dep] else { throw E.programmerError }\n                try targets[module]!.depend(on: dep)\n            }\n        }\n\n        // return in order we received them to prevent the pbxproj\n        // diff changing every time we generate\n        return (tips.map{ targets[$0]! }, modules.map{ targets[$0]! })\n    }\n\n    override open func write() throws {\n        try super.write()\n        try generateBatterDotSwift(tips: tips)\n\n        if !dependencies.isEmpty {\n            try generateDependenciesDotSwift(importNames: dependencies.imports)\n        } else {\n            // no deps, so delete generated files (if any)\n            func rm(root: Path, prefix: String, extnames: [String]) throws {\n                for extname in extnames {\n                    let path = root/\"\\(prefix).\\(extname)\"\n                    if path.exists {\n                        try path.delete()\n                    }\n                }\n            }\n            try rm(root: caked, prefix: \"Dependencies\", extnames: [\"swift\", \"json\"])\n            try rm(root: caked, prefix: \"Package\", extnames: [\"swift\", \"resolved\"])\n        }\n\n        try generateDependenciesDotSwift(importNames: dependencies.imports)\n    }\n}\n\nprivate extension DependenciesJSON {\n    func group(for module: Module, root: XcodeProject.Group) throws -> XcodeProject.Group {\n        func findOrCreate(_ package: Package, _ module: Module) throws -> XcodeProject.Group {\n            for packageGroup in root.subgroups where packageGroup.name == package.displayName {\n                return try packageGroup.add(group: module.path, name: .custom(module.name))\n            }\n            if package.moduleNames.count <= 1 {\n                if module.files.count <= 1 {\n                    return root\n                } else {\n                    return try root.add(group: module.path, name: .custom(package.displayName))\n                }\n            } else {\n                return try root\n                    .add(group: package.path, name: .custom(package.displayName))\n                    .add(group: module.path, name: .custom(module.name))\n            }\n        }\n        for package in packages where package.moduleNames.contains(module.name) {\n            return try findOrCreate(package, module)\n        }\n        fatalError(\"FIXME: throw\")\n    }\n}\n\nprivate extension DependenciesJSON.Package {\n    var displayName: String {\n        if let version = version {\n            return \"\\(name)-\\(version)\"\n        } else {\n            return name\n        }\n    }\n}\n\nprivate extension Platform {\n    var sdks: [String] {\n        switch self {\n        case .iOS:\n            return [\"iphoneos\", \"iphonesimulator\"]\n        case .macOS:\n            return [\"macosx\"]\n        }\n    }\n\n    var carthageDir: String {\n        switch self {\n        case .iOS:\n            return \"iOS\"\n        case .macOS:\n            return \"Mac\"\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcakeProject/deintegrate().swift",
    "content": "import XcodeProject\n\npublic extension XcakeProject {\n    func deintegrate(_ proj: XcodeProject) throws {\n\n        for target in proj.nativeTargets {\n            target.purge(cakeTarget)\n        }\n        proj.removeProjectReference(self)\n\n        try proj.write()\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcakeProject/etc.swift",
    "content": "import class Foundation.Bundle\nimport enum CakefileDescription.Platform\nimport Path\n\nextension Path {\n    public static var xcode: Path {\n        //TODO use scripting bridge or something duh\n        return Path.root/\"Applications/Xcode.app\"\n    }\n\n    fileprivate static func template(for os: Platform) -> Path {\n        switch os {\n        case .iOS:\n            return xcode/\"Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application/Cocoa Touch App Base.xctemplate\"\n        case .macOS:\n            return xcode/\"Contents/Developer/Library/Xcode/Templates/Project Templates/Mac/Application/Cocoa App Storyboard.xctemplate\"\n        }\n    }\n}\n\nextension Platform {\n    var storyboardName: String {\n        switch self {\n        case .iOS:\n            return \"LaunchScreen.storyboard\"\n        case .macOS:\n            return \"Main.storyboard\"\n        }\n    }\n\n    var storyboard: Path {\n        switch self {\n        case .macOS:\n            return Path.template(for: self).join(storyboardName)\n        case .iOS:\n            return Bundle.main.resources/\"iOS.Launchscreen.storyboard\"\n        }\n    }\n\n    var rpath: String {\n        switch self {\n        case .iOS:\n            return \"Frameworks\"\n        case .macOS:\n            return \"../Frameworks\"\n        }\n    }\n\n    var infoPlist: String {\n        switch self {\n        case .iOS:\n            return \"\"\"\n                <?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                    <key>CFBundleDevelopmentRegion</key>\n                    <string>$(DEVELOPMENT_LANGUAGE)</string>\n                    <key>CFBundleExecutable</key>\n                    <string>$(EXECUTABLE_NAME)</string>\n                    <key>CFBundleIdentifier</key>\n                    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n                    <key>CFBundleInfoDictionaryVersion</key>\n                    <string>6.0</string>\n                    <key>CFBundleName</key>\n                    <string>$(PRODUCT_NAME)</string>\n                    <key>CFBundlePackageType</key>\n                    <string>APPL</string>\n                    <key>CFBundleShortVersionString</key>\n                    <string>$(SEMANTIC_PROJECT_VERSION)</string>\n                    <key>CFBundleVersion</key>\n                    <string>$(CURRENT_PROJECT_VERSION)</string>\n                    <key>LSRequiresIPhoneOS</key>\n                    <true/>\n                    <key>UILaunchStoryboardName</key>\n                    <string>LaunchScreen</string>\n                    <key>UIRequiredDeviceCapabilities</key>\n                    <array>\n                        <string>armv7</string>\n                    </array>\n                    <key>UISupportedInterfaceOrientations</key>\n                    <array>\n                        <string>UIInterfaceOrientationPortrait</string>\n                    </array>\n                </dict>\n                </plist>\n                \"\"\"\n        case .macOS:\n            return \"\"\"\n                <?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                    <key>CFBundleDevelopmentRegion</key>\n                    <string>$(DEVELOPMENT_LANGUAGE)</string>\n                    <key>CFBundleExecutable</key>\n                    <string>$(EXECUTABLE_NAME)</string>\n                    <key>CFBundleIconFile</key>\n                    <string></string>\n                    <key>CFBundleIdentifier</key>\n                    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n                    <key>CFBundleInfoDictionaryVersion</key>\n                    <string>6.0</string>\n                    <key>CFBundleName</key>\n                    <string>$(PRODUCT_NAME)</string>\n                    <key>CFBundlePackageType</key>\n                    <string>APPL</string>\n                    <key>CFBundleShortVersionString</key>\n                    <string>$(SEMANTIC_PROJECT_VERSION)</string>\n                    <key>CFBundleVersion</key>\n                    <string>$(CURRENT_PROJECT_VERSION)</string>\n                    <key>LSMinimumSystemVersion</key>\n                    <string>$(MACOSX_DEPLOYMENT_TARGET)</string>\n                    <key>NSMainStoryboardFile</key>\n                    <string>Main</string>\n                    <key>NSPrincipalClass</key>\n                    <string>NSApplication</string>\n                </dict>\n                </plist>\n                \"\"\"\n        }\n    }\n\n    var appDelegate: String {\n        switch self {\n        case .iOS:\n            return \"\"\"\n                import UIKit\n                import Cake\n\n                @UIApplicationMain\n                class AppDelegate: UIResponder, UIApplicationDelegate {\n                    var window: UIWindow?\n\n                    func application(_: UIApplication, didFinishLaunchingWithOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n                        window = UIWindow()\n                        window!.rootViewController = UIViewController()\n                        window!.makeKeyAndVisible()\n                        return true\n                    }\n                }\n                \"\"\"\n        case .macOS:\n            return \"\"\"\n                import AppKit\n                import Cake\n\n                @NSApplicationMain\n                class AppDelegate: NSObject, NSApplicationDelegate {\n                    func applicationDidFinishLaunching(_ note: Notification) {\n\n                    }\n                }\n                \"\"\"\n        }\n    }\n}\n\nextension String {\n    static var cakefileScript: String {\n        return #\"\"\"\n        import func Darwin.fputs\n        import var Darwin.stderr\n        import ScriptingBridge\n        import AppKit\n\n        func print(_ objs: Any...) {\n            let str = objs.reduce(into: \"\") { $0.append(\" \\($1)\") }\n            fputs(str, stderr)\n        }\n\n        let apps = NSRunningApplication.runningApplications(withBundleIdentifier: \"dev.mxcl.Cake\")\n\n        switch apps.count {\n        case 0:\n            print(\"warning: Cake.app not running, Cakefile changes will not take effect\")\n        case 1:\n            guard let bundle = apps[0].bundleURL else {\n                print(\"Failed to obtain Cake.app location\")\n                exit(1)\n            }\n            guard let projectDir = ProcessInfo.processInfo.environment[\"PROJECT_DIR\"] else {\n                print(\"Failed to obtain PROJECT_DIR\")\n                exit(2)\n            }\n            let path = bundle.appendingPathComponent(\"Contents/MacOS/cake-build\").path\n            let task = Process()\n            task.launchPath = path\n            task.arguments = [String(apps[0].processIdentifier), projectDir]\n            try task.run()\n            task.waitUntilExit()\n            exit(task.terminationStatus)\n        default:\n            print(\"error: More than one instance of Cake.app is running\")\n            exit(3)\n        }\n\n        \"\"\"#\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcakeProject/scaffold().swift",
    "content": "import enum Base.SwiftVersion\nimport CakefileDescription\nimport XcodeProject\nimport Foundation\nimport Version\nimport Path\n\nprivate enum E: Error {\n    case directoryExists(Path)\n}\n\npublic enum ScaffoldingOption {\n    case new(name: String, Path, PlatformSpecification)\n    case existing(XcodeProject)\n}\n\npublic func scaffold(_ option: ScaffoldingOption, cakeVersion: Version) throws -> (XcodeProject, XcakeProject) {\n\n    if case .new(_, let prefix, _) = option, prefix.exists {\n        throw E.directoryExists(prefix)\n    }\n\n    let mainProject: XcodeProject\n    let platforms: Set<PlatformSpecification>\n    let targets: [XcodeProject.NativeTarget]\n    let swiftVersion: SwiftVersion\n    let detritus: XcodeProject.Group?\n\n    switch option {\n    case .existing(let proj):\n        mainProject = proj\n        swiftVersion = mainProject.swiftVersion\n        platforms = mainProject.platforms\n        targets = mainProject.nativeTargets.filter{ $0.type == .application }\n\n        //TODO read gitignore and ensure we don’t add duplicates\n        try \"\"\"\n            /.cake/swift-pm\n            /.cake/*.json\n            /.cake/Package.swift\n            /.cake/Version.xcconfig\n            \"\"\".concatenate(to: mainProject.parentDirectory/\".gitignore\")\n\n        detritus = nil\n\n    case .new(let name, let prefix, let platspec):\n        swiftVersion = .default\n        platforms = [platspec]\n        mainProject = XcodeProject(name: name, parentDirectory: prefix, for: platforms, swift: swiftVersion)\n        let os = platspec.platform\n        let srcdir = try prefix.Sources.App.mkdir(.p)\n\n        try \"\"\"\n            xcuserdata\n            *.xcscmblueprint\n            .DS_Store\n            # In case you are using Carthage too\n            /Carthage\n            # In case you are using CocoaPods too\n            /Pods\n            # In case you have a root SwiftPM manifest too\n            /.build\n            # SwiftPM metadata when resolving dependencies\n            /.cake/swift-pm\n            # intermediary files for Cake.xcodeproj\n            /.cake/*.json\n            /.cake/Package.swift\n            /.cake/Version.xcconfig\n            \"\"\".write(to: prefix/\".gitignore\")\n\n        try prefix.join(\"Documents\").mkdir(.p)\n        try prefix.join(\"Tests\").mkdir(.p)\n\n        try mainProject.path.mkdir(.p)\n\n        let sources = try mainProject.mainGroup.add(group: srcdir, name: .custom(\"Sources·App\"))\n\n        detritus = try mainProject.mainGroup.add(group: srcdir, name: .custom(\"Detritus\"))\n        detritus!.add(file: try os.infoPlist.write(to: srcdir/\"Info.plist\"))\n\n        let storyboard = try os.storyboard.copy(to: srcdir/os.storyboardName)\n        let target = mainProject.addNativeTarget(name: name, type: .application)\n        try target.build(source: sources.add(file: os.appDelegate.write(to: srcdir/\"AppDelegate.swift\")))\n        try target.build(resource: detritus!.add(file: storyboard))\n\n        if os == .macOS {\n            try storyboard.inreplace(\"___PACKAGENAMEASXML___\", with: name)\n        }\n        target[\"INFOPLIST_FILE\"] = \"Sources/App/Info.plist\"\n        target[\"ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES\"] = \"YES\"\n        target[\"SKIP_INSTALL\"] = \"NO\"\n        target[\"PRODUCT_MODULE_NAME\"] = \"App\"\n        target[\"LD_RUNPATH_SEARCH_PATHS\"] = [\"$(inherited)\", \"@executable_path/\\(os.rpath)\"]\n\n        var bids = [\"dev\"]\n        bids += NSUserName().domainSafed.reversed().map{ $0.lowercased() }\n        bids += [name.domainSafed.joined(separator: \"-\")]\n        target[\"PRODUCT_BUNDLE_IDENTIFIER\"] = bids.joined(separator: \".\")\n\n        targets = [target]\n\n        // this prevents autocreation of schemes\n        // this prevents listing Cakeproj’s schemes in the scheme selector\n        mainProject.schemify(target: target)\n    }\n\n    try \"\"\"\n        import Cakefile\n\n        dependencies = [\n            // add your dependencies here, for example:\n            //.github(\"mxcl/PromiseKit\" ~> 6.7),\n\n            // dependencies must be Swift packages, we will add support for\n            // CocoaPods and Carthage provided our donation goals are met:\n            // https://patreon.com/mxcl\n\n            // this is optional, but you should leave it ∵ if you work in a team,\n            // you should all be using the same version of Cake.\n            .cake(~>\\(cakeVersion.constraintStringValue))\n        ]\n\n        // you can specify your platforms and deployment targets like so\n        // NOTE: if unspecified we mirror the app-project’s settings\n        // platforms = [\\(platforms.map(\\.description).joined(separator: \", \"))]\n\n        // uncomment if you want to change the base-module-name\n        // options.baseModuleName = \"Bakeware\"\n\n        \"\"\".write(to: mainProject.parentDirectory/\"Cakefile.swift\")\n\n    let models = try mainProject.parentDirectory.Sources.Model.mkdir(.p)\n\n    try \"\"\"\n        #if canImport(Dependencies)\n            // to add 3rd-party dependencies, edit `Cakefile.swift` (in the project’s root directory)\n            import Dependencies\n        #endif\n\n        /// Base model module\n\n        \"\"\".write(to: models/\"Base.swift\")\n\n    let cakeProject = try XcakeProject(prefix: mainProject.parentDirectory, platforms: platforms, swift: swiftVersion, options: Options())\n    try cakeProject.path.mkdir(.p)\n    try cakeProject.write()\n\n    try \"\"\"\n        @_exported import Batter\n\n        #if canImport(Dependencies)\n            // to add 3rd-party dependencies, edit `Cakefile.swift` (in the project’s root directory)\n            @_exported import Dependencies\n        #endif\n\n        \"\"\".write(to: cakeProject.parentDirectory/\"Cake.swift\").chmod(0o444)\n\n    let cakeXCConfig = cakeProject.caked/\"Cake.xcconfig\"\n    try \"\"\"\n        #include? \"Version.xcconfig\"\n\n        \"\"\".write(to: cakeXCConfig)\n\n    //FIXME we are writing this anyway due to bug: https://github.com/mxcl/Cake/issues/49\n    // we need to do a proper fix, which may require this to be build-phase in the App’s\n    // project: https://gist.github.com/mbinna/4068616#gistcomment-2734031\n    try \"\"\"\n        CURRENT_PROJECT_VERSION = 0\n        SEMANTIC_PROJECT_VERSION = 0.0.0\n        SEMANTIC_PROJECT_VERSION[config=Debug] = 0.0.0-debug\n\n        \"\"\".write(to: cakeProject.caked/\"Version.xcconfig\")\n\n    if let detritus = detritus {\n        mainProject.baseConfiguration = detritus.add(file: cakeXCConfig, name: .basename)\n    }\n\n    mainProject.mainGroup.add(file: models, name: .custom(\"Sources·Model\"), type: .folder, at: .top)\n\n    if case .new(let name, let prefix, _) = option {\n        //TODO describe each directory in the generated project\n        try mainProject.mainGroup.add(file: \"\"\"\n            # \\(name)\n\n            This project is “Made with Cake”. Cake is a delicious, quality‑of‑life\n            supplement for your app‑development toolbox.\n\n            You do not need to install Cake.app to work with this project, but there are\n            numerous advantages if you do so.\n\n            https://github.com/mxcl/cake\n\n            \"\"\".write(to: prefix/\"README.md\"), at: .top)\n    }\n\n    for target in targets {\n        try target.depend(on: cakeProject.cakeTarget)\n        try target.link(to: cakeProject.cakeTarget)\n    }\n\n    try mainProject.write()\n\n    return (mainProject, cakeProject)\n}\n\nprivate extension Version {\n    var constraintStringValue: String {\n        if prereleaseIdentifiers.isEmpty {\n            return \"\\(major).\\(minor)\"\n        } else {\n            let pi = prereleaseIdentifiers.map{ \"\\\"\\($0)\\\"\" }.joined(separator: \", \")\n            return \"Version(\\(major),\\(minor),\\(patch), prereleaseIdentifiers: [\\(pi)])\"\n        }\n    }\n}\n\nprivate extension String {\n    // justified due to `String` having `write(to:)`\n    func concatenate(to path: Path, encoding: String.Encoding = .utf8) throws {\n\n        // we need to know if end of file is a newline or not, but I couldn't figure out\n        // how to do that efficiently, so we wrap the input in newlines\n        let str = \"\\n\\(self)\\n\"\n\n        guard let data = str.data(using: .utf8) else {\n            throw CocoaError.error(.fileReadInapplicableStringEncoding)\n        }\n        if let fileHandle = try? FileHandle(forWritingTo: path.url) {\n            fileHandle.seekToEndOfFile()\n            fileHandle.write(data)\n            fileHandle.closeFile()\n        } else {\n            try data.write(to: path)\n        }\n    }\n\n    var domainSafed: [String] {\n        return folding(options: .diacriticInsensitive, locale: .init(identifier: \"en_US\"))\n            .components(separatedBy: CharacterSet.alphanumerics.inverted)\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/XcodeProject.swift",
    "content": "/**\n tuist/xcodeproj is a very literal implementation of the PBXProject file-format.\n\n This makes using it error-prone and unreadable, this is a facade pattern for\n tuist/xcodeproj. However we only implemented what we needed so don’t expect\n it to be everything *you* might need in your own projects!\n */\n\nimport enum Base.SwiftVersion\nimport CakefileDescription\nimport xcodeproj\nimport Path\n\nopen class XcodeProject {\n    let proj: XcodeProj\n    var projectReferences: [XcodeProject: (PBXFileReference, PBXGroup)] = [:]\n\n    public let parentDirectory: Path\n\n    /// pass the path to the .xcodeproj *directory*\n    public init(existing: Path) throws {\n\n        if existing.extension == \"xcworkspace\" {\n            let wsp = try XCWorkspace(pathString: existing.string)\n            let prj: [String] = wsp.data.children.compactMap {\n                switch $0 {\n                case .file(let ref) where ref.location.path == \"Pods/Pods.xcodeproj\":\n                    return nil\n                case .file(let ref):\n                    return ref.location.path\n                default:\n                    return nil\n                }\n            }\n            guard prj.count == 1 else {\n                throw E.workspaceHasTooManyProjects\n            }\n            proj = try XcodeProj(pathString: existing.parent.join(prj[0]).string)\n        } else {\n            proj = try XcodeProj(pathString: existing.string)\n        }\n\n        parentDirectory = existing.parent\n\n        guard proj.pbxproj.rootObject != nil else {\n            throw E.readNoRootObject\n        }\n        guard proj.pbxproj.rootObject!.mainGroup != nil else {\n            throw E.readNoMainGroup\n        }\n        guard proj.pbxproj.rootObject!.productsGroup != nil else {\n            throw E.readNoProductsGroup\n        }\n    }\n\n    /// for a _not_yet_existing_ project, however parentDirectory must exist\n    public init(name: String, parentDirectory: Path, for platforms: Set<PlatformSpecification>, swift swiftVersion: SwiftVersion) {\n        let common = [String: Any].commonBuildSettings(for: platforms, swift: swiftVersion)\n        let debug = XCBuildConfiguration(name: \"Debug\", buildSettings: common.merging(.debugBuildSettings){ $1 })\n        let release = XCBuildConfiguration(name: \"Release\", buildSettings: common.merging(.releaseBuildSettings){ $1 })\n        let confs = XCConfigurationList(buildConfigurations: [debug, release], defaultConfigurationName: \"Release\")\n\n        let mainGroup = PBXGroup(sourceTree: .sourceRoot, path: \"\")\n        let rootObject = PBXProject(\n            name: name,\n            buildConfigurationList: confs,\n            compatibilityVersion: \"Xcode 9.3\",\n            mainGroup: mainGroup\n        )\n\n        let pbxProj = PBXProj(rootObject: rootObject)\n\n        let productsGroup = PBXGroup(sourceTree: .group, name: \"Products\")\n        rootObject.productsGroup = productsGroup\n        mainGroup.children.append(productsGroup)\n\n        pbxProj.add(object: mainGroup)\n        pbxProj.add(object: rootObject)\n        pbxProj.add(object: productsGroup)\n        pbxProj.add(object: confs)\n        pbxProj.add(object: debug)\n        pbxProj.add(object: release)\n\n        self.proj = XcodeProj(workspace: XCWorkspace(), pbxproj: pbxProj)\n        self.parentDirectory = parentDirectory\n    }\n\n    open func write() throws {\n        try proj.write(path: PathKitPath(path))\n\n        // we don’t want this, but tuist/xcodeproj cannot *not* create it\n        try path.join(\"project.xcworkspace/contents.xcworkspacedata\").delete()\n\n        try \"\"\"\n            <?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                <key>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>\n                <false/>\n            </dict>\n            </plist>\n            \"\"\".write(to: path.join(\"project.xcworkspace/xcshareddata\").mkdir(.p).join(\"WorkspaceSettings.xcsettings\"))\n\n        if let target = xcschememanagementPlistTarget {\n            let d = path/\"xcshareddata/xcschemes\"\n            try d.mkdir(.p)\n            try \"\"\"\n                <?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                    <key>SchemeUserState</key>\n                    <dict>\n                        <key>\\(target.name).xcscheme_^#shared#^_</key>\n                        <dict>\n                            <key>orderHint</key>\n                            <integer>0</integer>\n                        </dict>\n                    </dict>\n                    <key>SuppressBuildableAutocreation</key>\n                    <dict>\n                        <key>\\(target.uuid)</key>\n                        <dict>\n                            <key>primary</key>\n                            <true/>\n                        </dict>\n                    </dict>\n                </dict>\n                </plist>\n                \"\"\".write(to: d/\"xcschememanagement.plist\")\n        }\n    }\n\n    private var xcschememanagementPlistTarget: PBXTarget?\n\n    /// configures project to have a single scheme for the specified target\n    public func schemify(target: NativeTarget) {\n        let scheme = XCScheme(name: name, lastUpgradeVersion: nil, version: nil)\n        scheme.buildAction = XCScheme.BuildAction()\n        scheme.buildAction!.parallelizeBuild = true\n        scheme.buildAction!.buildImplicitDependencies = false\n\n        let ref = XCScheme.BuildableReference(\n            referencedContainer: \"container:\\(name).xcodeproj\",\n            blueprint: target.underlyingTarget,\n            buildableName: \"\\(target.name).app\",\n            blueprintName: target.name)\n\n        scheme.buildAction!.buildActionEntries = [\n            XCScheme.BuildAction.Entry(buildableReference: ref, buildFor: XCScheme.BuildAction.Entry.BuildFor.default)\n        ]\n\n        let runnable = XCScheme.BuildableProductRunnable(buildableReference: ref)\n\n        scheme.launchAction = XCScheme.LaunchAction(buildableProductRunnable: runnable, buildConfiguration: \"Debug\")\n        scheme.launchAction!.environmentVariables = [\n            // prevents the log filling with junk and garbage\n            XCScheme.EnvironmentVariable(variable: \"OS_ACTIVITY_MODE\", value: \"disable\", enabled: true)\n        ]\n\n        proj.sharedData = XCSharedData(schemes: [scheme])\n\n        xcschememanagementPlistTarget = target.underlyingTarget\n    }\n}\n\npublic extension XcodeProject {\n    var name: String {\n        return proj.pbxproj.rootObject!.name\n    }\n\n    var path: Path {\n        return parentDirectory/\"\\(name).xcodeproj\"\n    }\n\n    var mainGroup: Group {\n        return Group(owner: self, parentPath: parentDirectory, underlyingGroup: proj.pbxproj.rootObject!.mainGroup!)\n    }\n\n    var nativeTargets: [NativeTarget] {\n        return proj.pbxproj.nativeTargets.map {\n            NativeTarget(owner: self, underlyingTarget: $0)\n        }\n    }\n\n    enum E: Error {\n        case readNoRootObject\n        case readNoMainGroup\n        case cannotReferenceSelf\n        case nativeTargetHasNoProductReference\n        case readNoProductsGroup\n        case groupHasNoPath\n        case invalidBuildConfigurations\n        case workspaceHasTooManyProjects\n    }\n\n    enum Name {\n        case inferred\n        case basename\n        case custom(String)\n\n        func string(path: Path) -> String? {\n            switch self {\n            case .basename:\n                return path.basename()\n            case .inferred:\n                return nil\n            case .custom(let name):\n                return name\n            }\n        }\n    }\n\n    enum FileType: String {\n        case project = \"wrapper.pb-project\"\n        case folder = \"folder\"\n    }\n\n    var baseConfiguration: PBXFileReference {\n        set {\n            guard let confs = pbxproj.rootObject?.buildConfigurationList?.buildConfigurations else {\n                fatalError()\n            }\n            for conf in confs {\n                conf.baseConfiguration = newValue\n            }\n        }\n        get {\n            fatalError()\n        }\n    }\n}\n\ninternal extension XcodeProject {\n    var pbxproj: PBXProj {\n        return proj.pbxproj\n    }\n\n    var productsGroup: PBXGroup {\n        return pbxproj.rootObject!.productsGroup!\n    }\n}\n\nextension XcodeProject: Equatable, Hashable {\n    public static func ==(lhs: XcodeProject, rhs: XcodeProject) -> Bool {\n        return lhs.name == rhs.name && lhs.parentDirectory == rhs.parentDirectory\n    }\n\n    public func hash(into hasher: inout Hasher) {\n        hasher.combine(name)\n        hasher.combine(parentDirectory)\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/_PathDisambiguation.swift",
    "content": "import struct Path.Path\n\ntypealias PathType = Path\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/z+buildSettings.swift",
    "content": "import CakefileDescription\nimport xcodeproj\nimport Base\nimport Path\n\npublic extension XcodeProject.Target {\n    var debug: XCBuildConfiguration { return find(name: \"Debug\") }\n    var release: XCBuildConfiguration { return find(name: \"Release\") }\n\n    subscript(key: String) -> Any? {\n        set {\n            //TODO if nil don’t create configurations if so far they aren't created (which can happen easily for eg. target specific configuration lists)\n            debug.buildSettings[key] = newValue\n            release.buildSettings[key] = newValue\n        }\n        get {\n            fatalError()\n        }\n    }\n\n    private func find(name: String) -> XCBuildConfiguration {\n        if let c = underlyingTarget.buildConfigurationList?.configuration(name: name) {\n            return c\n        } else {\n            let c = XCBuildConfiguration(name: name)\n            owner.add(c)\n            if let list = underlyingTarget.buildConfigurationList {\n                list.buildConfigurations.append(c)\n            } else {\n                let list = XCConfigurationList(buildConfigurations: [c])\n                underlyingTarget.buildConfigurationList = list\n                owner.add(list)\n            }\n            return c\n        }\n    }\n}\n\nextension Dictionary where Key == String, Value == Any {\n    static func commonBuildSettings(for platforms: Set<PlatformSpecification>, swift swiftVersion: SwiftVersion) -> [String: Any] {\n        var foo: [String: Any] = [\n            \"PRODUCT_NAME\": \"$(TARGET_NAME)\",\n            \"COMBINE_HIDPI_IMAGES\": \"YES\",  //prevents Xcode warning\n            \"SUPPORTED_PLATFORMS\": platforms.flatMap(\\.platform.supportedPlatforms),\n            \"SDKROOT\": platforms.suggestedSdkRoot,\n            \"SWIFT_ACTIVE_COMPILATION_CONDITIONS\": [\"Cake\"],\n            \"USE_HEADERMAP\": \"NO\", // copied from SwiftPM which provides rationale\n            \"CLANG_ENABLE_OBJC_WEAK\": \"YES\",\n            \"CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING\": \"YES\",\n            \"CLANG_WARN_BOOL_CONVERSION\": \"YES\",\n            \"CLANG_WARN_COMMA\": \"YES\",\n            \"CLANG_WARN_CONSTANT_CONVERSION\": \"YES\",\n            \"CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS\": \"YES\",\n            \"CLANG_WARN_EMPTY_BODY\": \"YES\",\n            \"CLANG_WARN_ENUM_CONVERSION\": \"YES\",\n            \"CLANG_WARN_INFINITE_RECURSION\": \"YES\",\n            \"CLANG_WARN_INT_CONVERSION\": \"YES\",\n            \"CLANG_WARN_NON_LITERAL_NULL_CONVERSION\": \"YES\",\n            \"CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF\": \"YES\",\n            \"CLANG_WARN_OBJC_LITERAL_CONVERSION\": \"YES\",\n            \"CLANG_WARN_RANGE_LOOP_ANALYSIS\": \"YES\",\n            \"CLANG_WARN_STRICT_PROTOTYPES\": \"YES\",\n            \"CLANG_WARN_SUSPICIOUS_MOVE\": \"YES\",\n            \"CLANG_WARN_UNREACHABLE_CODE\": \"YES\",\n            \"CLANG_WARN__DUPLICATE_METHOD_MATCH\": \"YES\",\n            \"ENABLE_STRICT_OBJC_MSGSEND\": \"YES\",\n            \"GCC_NO_COMMON_BLOCKS\": \"YES\",\n            \"GCC_WARN_64_TO_32_BIT_CONVERSION\": \"YES\",\n            \"GCC_WARN_ABOUT_RETURN_TYPE\": \"YES\",\n            \"GCC_WARN_UNDECLARED_SELECTOR\": \"YES\",\n            \"GCC_WARN_UNINITIALIZED_AUTOS\": \"YES\",\n            \"GCC_WARN_UNUSED_FUNCTION\": \"YES\",\n            \"GCC_WARN_UNUSED_VARIABLE\": \"YES\",\n            \"SWIFT_VERSION\": swiftVersion.rawValue,\n            \"SKIP_INSTALL\": \"YES\"\n        ]\n        for spec in platforms {\n            switch spec.platform {\n            case .iOS:\n                foo[\"IPHONEOS_DEPLOYMENT_TARGET\"] = spec.version.description\n            case .macOS:\n                foo[\"MACOSX_DEPLOYMENT_TARGET\"] = spec.version.description\n            }\n        }\n        return foo\n    }\n\n    static var debugBuildSettings: [String: Any] {\n        return [\n            \"COPY_PHASE_STRIP\": \"NO\",\n            \"DEBUG_INFORMATION_FORMAT\": \"dwarf\",\n            \"ENABLE_NS_ASSERTIONS\": \"YES\",\n            \"GCC_OPTIMIZATION_LEVEL\": \"0\",\n            \"ONLY_ACTIVE_ARCH\": \"YES\",\n            \"SWIFT_OPTIMIZATION_LEVEL\": \"-Onone\",\n            \"SWIFT_ACTIVE_COMPILATION_CONDITIONS\": [\"Cake\", \"DEBUG\"],\n            \"ENABLE_TESTABILITY\": \"YES\",\n        ]\n    }\n\n    static var releaseBuildSettings: [String: Any] {\n        return [\n            \"COPY_PHASE_STRIP\": \"YES\",\n            \"DEBUG_INFORMATION_FORMAT\": \"dwarf-with-dsym\",\n            \"GCC_OPTIMIZATION_LEVEL\": \"s\",\n            \"SWIFT_OPTIMIZATION_LEVEL\": \"-Owholemodule\",\n            \"SWIFT_COMPILATION_MODE\": \"wholemodule\",\n        ]\n    }\n}\n\nprivate extension Platform {\n    var supportedPlatforms: [String] {\n        switch self {\n        case .iOS:\n            return [\"iphoneos\", \"iphonesimulator\"]\n        case .macOS:\n            return [\"macosx\"]\n        }\n    }\n}\n\nprivate extension Set where Element == PlatformSpecification {\n    var suggestedSdkRoot: String {\n        if map(\\.platform).contains(.macOS) {\n            return \"macosx\"\n        } else {\n            return \"iphoneos\"\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/XcodeProject/z.etc.swift",
    "content": "import struct PathKit.Path\nimport struct Path.Path\nimport Foundation\nimport xcodeproj\n\ntypealias PathKitPath = PathKit.Path\n\nextension PathKitPath {\n    init(_ path: PathType) {\n        self.init(path.string)\n    }\n}\n\nextension XcodeProject.NativeTarget {\n    var linkPhase: PBXFrameworksBuildPhase {\n        if let phase = underlyingTarget.buildPhases.first(where: { $0 is PBXFrameworksBuildPhase }) {\n            return phase as! PBXFrameworksBuildPhase\n        } else {\n            let phase = PBXFrameworksBuildPhase()\n            underlyingTarget.buildPhases.append(phase)\n            owner.add(phase)\n            return phase\n        }\n    }\n\n    var sourcesPhase: PBXSourcesBuildPhase {\n        if let phase = try? underlyingTarget.sourcesBuildPhase() {\n            return phase\n        } else {\n            let phase = PBXSourcesBuildPhase()\n            underlyingTarget.buildPhases.append(phase)\n            owner.add(phase)\n            return phase\n        }\n    }\n\n    var resourcesPhase: PBXResourcesBuildPhase {\n        if let phase = try? underlyingTarget.resourcesBuildPhase() {\n            return phase\n        } else {\n            let phase = PBXResourcesBuildPhase()\n            underlyingTarget.buildPhases.append(phase)\n            owner.add(phase)\n            return phase\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Model/Base/topologicalSort().swift",
    "content": "import OrderedSet\n\nextension Array where Element: Hashable, Element: Comparable {\n    public func topologicallySorted(successors: (Element) -> [Element]) -> [Element] {\n        // Implements a topological sort via recursion and reverse postorder DFS.\n        func visit(_ node: Element,\n                   _ stack: inout OrderedSet<Element>, _ visited: inout Set<Element>, _ result: inout [Element],\n                   _ successors: (Element) -> [Element]) {\n            // Mark this node as visited -- we are done if it already was.\n            if !visited.insert(node).inserted {\n                return\n            }\n\n            // Otherwise, visit each adjacent node.\n            for succ in successors(node).sorted() {\n                assert(stack.index(of: succ) == nil)\n                stack.append(succ)\n                visit(succ, &stack, &visited, &result, successors)\n                stack.removeLast()\n            }\n\n            // Add to the result.\n            result.append(node)\n        }\n\n        var visited = Set<Element>()\n        var result = [Element]()\n        var stack = OrderedSet<Element>()\n        for node in sorted() {\n            precondition(stack.isEmpty)\n            stack.append(node)\n            visit(node, &stack, &visited, &result, successors)\n            stack.removeLast()\n        }\n\n        return result.reversed()\n    }\n}\n\nprivate extension OrderedSet {\n    func removeLast() {\n        remove(last!)  // is efficient in implementation\n    }\n}\n"
  },
  {
    "path": "Sources/Model/CakefileDescription/CakefileDescription.swift",
    "content": "#if !Cake\n@_exported import struct Foundation.URL\n#endif\nimport Foundation\nimport Version\n\n\n\n#if !Cake\n// ^^ Defined when building Batter, thus when building dylib for consumption\n// by Cake Projects is *not* defined, thus anything here is available to\n// all users of Cake except inside the mxcl/Cake project itself.\n\n/// Dependencies for your Model (can be used by App too, but we will eventually add a separate\npublic var dependencies: [Dependency] = []\n\n/// Checks out the dependency but does not integrate, integration is up to you\npublic var vendors: [Vendor] = []\n\n/**\n Will also build executables and then make those executables available for scripts\n possibly make it possible for these tools to define their own scripts for user benefit\n*/\npublic var buildDependencies: [Dependency] = []\n\n/// Configures the build targets for model modules\npublic var platforms: Set<PlatformSpecification> = []\n\n/// Configurable parameters for your Cake.\npublic var options = Options()\n\n#endif\n\n\n/// Various configurable properties.\npublic struct Options: Codable {\n    /// The name of the base model module, if there is only one.\n    public var baseModuleName = \"Bakeware\"\n\n    /// If `true`, warnings in dependencies are suppressed.\n    public var suppressDependencyWarnings = true\n\n  #if Cake\n    public init()\n    {}\n  #endif\n}\n\n\npublic enum Dependency {\n    case github(GitHubPackageSpecification)\n    case git(PackageSpecification)\n//TODO    case xcode(VersionSpecification)\n    case cake(Range<Version>)\n}\n\npublic enum VersionSpecification: Codable, Equatable {\n    case version(Constraint)\n    case ref(Ref)\n\n    public enum Constraint {\n        case range(Range<Version>)\n        case exact(Version)\n    }\n\n    public enum Ref {\n        case branch(String)\n        case tag(String)\n        case revision(String)\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n\n        if container.contains(.version) {\n            let str = try container.decode(String.self, forKey: .version)\n            let parts = str.components(separatedBy: \"..<\")\n            switch parts.count {\n            case 2:\n                guard let v1 = Version(parts[0]), let v2 = Version(parts[1]) else { fallthrough }\n                self = .version(.range(v1..<v2))\n            case 1:\n                guard let v = Version(str) else { fallthrough }\n                self = .version(.exact(v))\n            default:\n                throw DecodingError.dataCorrupted(.init(codingPath: [CodingKeys.version], debugDescription: \"Invalid version specification\"))\n            }\n        } else if container.contains(.branch) {\n            self = .ref(.branch(try container.decode(String.self, forKey: .branch)))\n        } else if container.contains(.tag) {\n            self = .ref(.tag(try container.decode(String.self, forKey: .tag)))\n        } else if container.contains(.revision) {\n            self = .ref(.revision(try container.decode(String.self, forKey: .revision)))\n        } else {\n            throw DecodingError.dataCorrupted(.init(codingPath: [], debugDescription: \"Invalid version specification\"))\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        switch self {\n        case .version(.range(let range)):\n            try container.encode(\"\\(range.lowerBound)..<\\(range.upperBound)\", forKey: .version)\n        case .version(.exact(let version)):\n            try container.encode(version, forKey: .version)\n        case .ref(.branch(let branch)):\n            try container.encode(branch, forKey: .branch)\n        case .ref(.tag(let tag)):\n            try container.encode(tag, forKey: .branch)\n        case .ref(.revision(let sha)):\n            try container.encode(sha, forKey: .branch)\n        }\n    }\n\n    enum CodingKeys: CodingKey {\n        case version\n        case branch\n        case tag\n        case revision\n    }\n\n    public static func ==(lhs: VersionSpecification, rhs: VersionSpecification) -> Bool {\n        switch (lhs, rhs) {\n        case (.version(.range(let range1)), .version(.range(let range2))):\n            return range1 == range2\n        case (.version(.exact(let v1)), .version(.exact(let v2))):\n            return v1 == v2\n        case (.ref(.branch(let b1)), .ref(.branch(let b2))):\n            return b1 == b2\n        case (.ref(.tag(let b1)), .ref(.tag(let b2))):\n            return b1 == b2\n        case (.ref(.revision(let b1)), .ref(.revision(let b2))):\n            return b1 == b2\n        default:\n            return false\n        }\n    }\n}\n\npublic struct PackageSpecification: Codable, Equatable  {\n    public init(url: URL, constraint: VersionSpecification) {\n        self.url = url\n        self.constraint = constraint\n    }\n    public var url: URL\n    public var constraint: VersionSpecification\n\n    enum CodingKeys: CodingKey {\n        case url\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        try container.encode(url, forKey: .url)\n        try constraint.encode(to: encoder)\n    }\n\n    public init(from decoder: Decoder) throws {\n        url = try decoder.container(keyedBy: CodingKeys.self).decode(URL.self, forKey: .url)\n        constraint = try VersionSpecification(from: decoder)\n    }\n}\n\npublic struct GitHubPackageSpecification {\n    public var user: String\n    public var repo: String\n    public var constraint: VersionSpecification\n\n    fileprivate var packageSpecification: PackageSpecification {\n        let url = URL(string: \"https://github.com/\\(user)/\\(repo).git\")!\n        return .init(url: url, constraint: constraint)\n    }\n\n    public init(user: String, repo: String, constraint: VersionSpecification) {\n        self.user = user\n        self.repo = repo\n        self.constraint = constraint\n    }\n}\n\npublic enum Platform: String, Codable, Hashable, Equatable {\n    case iOS, macOS\n}\n\npublic struct PlatformSpecification: Codable, Equatable, Hashable {\n    public let platform: Platform\n    public let version: Version\n\n    //FIXME Set semantics may make this bad in practice\n    func hasher(into hasher: inout Hasher) {\n        hasher.combine(platform)\n    }\n\n    public init(platform: Platform, version: Version) {\n        self.platform = platform\n        self.version = version\n    }\n}\n\nextension PlatformSpecification: CustomStringConvertible {\n    public var description: String {\n        var str = \".\\(platform) ~> \\(version.major).\\(version.minor)\"\n        if version.patch > 0 {\n            str += \".\\(version.patch)\"\n        }\n        return str\n    }\n}\n\nextension GitHubPackageSpecification: ExpressibleByStringLiteral {\n    public init(stringLiteral value: String) {\n        (user, repo) = value.githubPair\n        self.constraint = .version(.range(Version(0,0,0)..<Version(1_000_000,0,0)))\n\n        warning(\"Specifying packages without a version constraint (~>) fetches the newest release, which while seemingly convenient—in extreme cases—may lead to irritable co‐workers.\")\n    }\n}\n\nextension PackageSpecification: ExpressibleByStringLiteral {\n    public init(stringLiteral value: String) {\n        self.url = URL(string: \"https://github.com/\\(value.githubPair).git\")!\n        self.constraint = .ref(.branch(\"master\"))\n\n        warning(\"Specifying packages without a version constraint (~>) fetches `master` which—in extreme cases—may lead to irritable co‐workers.\")\n    }\n}\n\nextension VersionSpecification: ExpressibleByFloatLiteral {\n    @inlinable\n    public init(floatLiteral value: FloatLiteralType) {\n        self = .version(.exact(Version(value)))\n    }\n}\n\npublic enum Vendor {\n    case github(PackageSpecification)\n}\n\npublic func ~> (lhs: String, rhs: Double) -> GitHubPackageSpecification {\n    let (user, repo) = lhs.githubPair\n    return .init(user: user, repo: repo, constraint: .version(.range(~>rhs)))\n}\n\npublic func ~> (lhs: String, rhs: Version) -> GitHubPackageSpecification {\n    let (user, repo) = lhs.githubPair\n    return .init(user: user, repo: repo, constraint: .version(.range(~>rhs)))\n}\n\npublic func ~> (lhs: Platform, rhs: Double) -> PlatformSpecification {\n    return .init(platform: lhs, version: Version(floatLiteral: rhs))\n}\n\npublic func ~> (lhs: Platform, rhs: Version) -> PlatformSpecification {\n    return .init(platform: lhs, version: rhs)\n}\n\nprefix operator ~>\npublic prefix func ~> (value: Double) -> Range<Version> {\n    let v = Version(floatLiteral: value)\n    return v..<Version(v.major + 1, 0, 0)\n}\n\npublic prefix func ~> (value: Version) -> Range<Version> {\n    return value..<Version(value.major + 1, 0, 0)\n}\n\nprivate func warning(_ msg: String) {\n    fputs(\"warning: \\(msg)\\n\", stderr)\n}\n\nprivate extension String {\n    var githubPair: (String, String) {\n        if hasPrefix(\"/\") {\n            warning(\"package specifier has leading slashes\")\n        }\n        if hasSuffix(\"/\") {\n            warning(\"package specifier has trailing slashes\")\n        }\n\n        let split = self.split(separator: \"/\", omittingEmptySubsequences: true)\n\n        if split.count < 2 {\n            warning(\"insufficient path components for package specification, SwiftPM *will* fail\")\n        }\n        if split.count > 2 {\n            warning(\"ignoring components in package specification beyond 2\")\n        }\n\n        return (String(split[0]), String(split[1]))\n    }\n}\n\npublic struct CakefileDump: Codable {\n    public let platforms: Set<PlatformSpecification>\n    public let dependencies: [PackageSpecification]\n    public let options: Options\n    public let cake: VersionSpecification?\n    // ^^ not Range<Version> as Range is not codable, and we cannot\n    // make it codable without a public impl which would infect\n    // the entire app. Swift 5 has a Codable impl though.\n\n    public init(platforms: Set<PlatformSpecification>, dependencies: [Dependency], options: Options) {\n        self.platforms = platforms\n        self.dependencies = dependencies.compactMap {\n            if case .github(let spec) = $0 {\n                return spec.packageSpecification\n            } else {\n                return nil\n            }\n        }\n        self.options = options\n        self.cake = dependencies.compactMap {\n            if case .cake(let range) = $0 {\n                return .version(.range(range))\n            } else {\n                return nil\n            }\n        }.last\n    }\n}\n"
  },
  {
    "path": "Sources/Model/CakefileDescription/Version+.swift",
    "content": "#if !Cake\n@_exported import Version\n#else\nimport Version\n#endif\n\nextension Version: ExpressibleByFloatLiteral {\n    @inlinable\n    public init(_ value: FloatLiteralType) {\n        self.init(floatLiteral: value)\n    }\n\n    @inlinable\n    public init(floatLiteral value: FloatLiteralType) {\n        self = Version(\"\\(value).0\") ?? .null\n    }\n}\n"
  },
  {
    "path": "Sources/cake-build/main.swift",
    "content": "import AppKit\n\n/**\n Using distributed notifications.\n\n We tried AppleEvents (ie. AppleScript) but due to the AEpocalypse\n this was extremely fickle.\n\n Which is a pity.\n\n If there’s a better XPC system that allows blocking that we can use,\n please let us know.\n */\n\nlet pid = pid_t(CommandLine.arguments[1])!\nlet PROJECT_DIR = CommandLine.arguments[2]\n\nguard let app = NSRunningApplication(processIdentifier: pid) else {\n    fputs(\"error: no such pid: \\(pid)\\n\", stderr)\n    exit(1)\n}\n\nlet name = Notification.Name(rawValue: \"dev.mxcl.Cake.build\")\nlet center = DistributedNotificationCenter.default()\nlet userInfo = [\"PROJECT_DIR\": PROJECT_DIR]\ncenter.postNotificationName(name, object: nil, userInfo: userInfo, options: .deliverImmediately)\n\nclass Waiter: NSObject {\n    override init() {\n        super.init()\n        let name = Notification.Name(rawValue: \"dev.mxcl.Cake.built\")\n        center.addObserver(self, selector: #selector(result), name: name, object: nil)\n    }\n\n    @objc func result(notification: Notification) {\n        if let userInfo = notification.userInfo, let error = userInfo[\"error\"] as? String {\n            fputs(\"error: \\(error)\\n\", stderr)\n            if let userInfo = userInfo[\"error.userInfo\"] {\n                fputs(\"notice: \\(userInfo)\\n\", stderr)\n            }\n            exit(2)\n        } else {\n            exit(0)\n        }\n    }\n}\n\nlet waiter = Waiter()\nRunLoop.main.run()\n"
  },
  {
    "path": "Tests/CakefileDescriptionTests.swift",
    "content": "import CakefileDescription\nimport XCTest\n\n//TODO good opportunity to use cake’s test generators\n// eg. could replace warning() so it injects, thus making it testable\n// eg. could make the variables not global\n\nclass CakefileDescriptionTests: XCTestCase {\n    func test() {\n        let cakefile = \"\"\"\n            import Cakefile\n\n            dependencies = [\n                .github(\"mxcl/PromiseKit\" ~> 6)\n            ]\n\n            platforms = [.macOS ~> 10.14, .iOS ~> 12]\n            \"\"\"\n        _ = cakefile\n        //TODO\n    }\n}\n"
  },
  {
    "path": "Tests/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>$(DEVELOPMENT_LANGUAGE)</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>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Tests/MixerTests.swift",
    "content": "@testable import Processor\nimport Modelizer\nimport Version\nimport XCTest\nimport Path\n\nclass MixerTests: XCTestCase {\n    var tmpdir: TemporaryDirectory!\n\n    override func setUp() {\n        tmpdir = try! TemporaryDirectory()\n        FileManager.default.changeCurrentDirectoryPath(tmpdir.string)\n    }\n\n    override func tearDown() {\n        tmpdir = nil\n        FileManager.default.changeCurrentDirectoryPath(\"/\")\n    }\n\n    func testCanFindBinary() {\n        XCTAssertTrue(Path.mixer.isExecutable)\n        XCTAssertTrue(Path.mixer.isFile)\n    }\n\n    func testOutput() throws {\n        let buildDir = Bundle(for: MixerTests.self).path.parent\n        guard let cake = Bundle(path: buildDir.join(\"Cake.app\").string), let xcodePath = Path.xcode else {\n            return XCTFail()\n        }\n        guard let toolkit = Processor.Toolkit(cake: cake, xcode: xcodePath) else {\n            return XCTFail()\n        }\n        try toolkit.make()\n\n        let deps = try tmpdir.path.join(\".cake\").mkdir()\n        try \"\"\"\n            // swift-tools-version:4.2\n            import PackageDescription\n\n            let pkg = Package(name: \"Dependencies\", dependencies: [\n                .package(url: \"https://github.com/Weebly/OrderedSet.git\", .exact(\"3.1.0\")),\n            ])\n            \"\"\".write(to: deps/\"Package.swift\")\n\n        let task = Process()\n        task.launchPath = Path.mixer.string\n        task.arguments = [tmpdir.string, toolkit.pm.string]\n        let stdout = try task.runSync(tee: true).stdout\n\n        let decoder = JSONDecoder()\n        decoder.userInfo[.relativePath] = tmpdir.path/\"Dependencies\"\n        let output = try decoder.decode(DependenciesJSON.self, from: stdout.data)\n\n        XCTAssertEqual(output.imports, [\"OrderedSet\"])\n        XCTAssertEqual(output.modules.count, 1)\n        XCTAssertEqual(output.modules.first?.name, \"OrderedSet\")\n        XCTAssertEqual(output.modules.first?.files.count, 1)\n        XCTAssertEqual(output.modules.first?.dependencies.count, 0)\n        XCTAssertEqual(output.modules.first?.path, tmpdir.path/\"Dependencies\")\n    }\n}\n\nprivate extension Path {\n    static var mixer: Path {\n        return Bundle(for: MixerTests.self).path.parent/\"Cake.app/Contents/MacOS/mixer\"\n    }\n    static var xcode: Path? {\n        return ProcessInfo.processInfo\n            .environment[\"PATH\"]?\n            .split(separator: \":\")\n            .first.flatMap(Path.init)?\n            .parent.parent.parent.parent\n    }\n}\n"
  },
  {
    "path": "Tests/ModelizerTests.swift",
    "content": "@testable import Modelizer\nimport XCTest\nimport Base\nimport Path\n\nclass ModelizerTests: XCTestCase {\n    func testOneModule() throws {\n        try createFixture(\"a.swift\") { root, paths in\n            let modules = try modelize(root: root)\n            XCTAssertEqual(modules.count, 1)\n            XCTAssertEqual(modules.flattened.count, 1)\n            XCTAssertEqual(modules.bases, modules)\n            let base = try modules.get(\"Base\")\n            XCTAssertEqual(base.relativeFiles, [\"a.swift\"])\n            XCTAssertEqual(base.dependencies.count, 0)\n        }\n    }\n\n    func testOneModuleButGapped() throws {\n        try createFixture(\"a/b/c.swift\") { root, paths in\n            let modules = try modelize(root: root)\n            XCTAssertEqual(modules.count, 1)\n            XCTAssertEqual(modules.flattened.count, 1)\n            let b = try modules.get(\"b\")\n            XCTAssertEqual(b.path, root/\"a/b\")\n            XCTAssertEqual(b.relativeFiles, [\"c.swift\"])\n            XCTAssertEqual(b.dependencies.count, 0)\n        }\n    }\n\n    func testOneModuleButGappedWithRedHerrings() throws {\n        try createFixture(\"gap/b/c.swift\", \"d/e/foo\", \"a/f/goo\") { root, paths in\n            let modules = try modelize(root: root)\n            XCTAssertEqual(modules.count, 1)\n            XCTAssertEqual(modules.flattened.count, 1)\n            let b = try modules.get(\"b\")\n            XCTAssertEqual(b.relativeFiles, [\"c.swift\"])\n            XCTAssertEqual(b.dependencies.count, 0)\n        }\n    }\n\n    func testTwoNestedModules() throws {\n        try createFixture(\"a.swift\", \"b/b.swift\") { root, paths in\n            let modules = try modelize(root: root)\n            XCTAssertEqual(modules.count, 1)\n            XCTAssertEqual(modules.flattened.count, 2)\n            let b = try modules.get(\"b\")\n            XCTAssertEqual(b.path, root/\"b\")\n            XCTAssertEqual(b.relativeFiles, [\"b.swift\"])\n            XCTAssertEqual(b.dependencies.count, 1)\n            let base = try b.dep(\"Base\")\n            XCTAssertEqual(base.path, root)\n            XCTAssertEqual(base.relativeFiles, [\"a.swift\"])\n            XCTAssertEqual(base.dependencies.count, 0)\n        }\n    }\n\n    func testTwoNestedModulesWithAGap() throws {\n        try createFixture(\"a.swift\", \"gap/c/c.swift\") { root, paths in\n            let modules = try modelize(root: root)\n            XCTAssertEqual(modules.count, 1)\n            XCTAssertEqual(modules.flattened.count, 2)\n            let c = try modules.get(\"c\")\n            XCTAssertEqual(c.dependencies.count, 1)\n            let base = try c.dep(\"Base\")\n            XCTAssertEqual(base.relativeFiles, [\"a.swift\"])\n        }\n    }\n\n    func testThreeNestedModulesWithAGap_IgnoredRule() throws {\n        //NOTE disabled for now, maybe this isn’t a good idea?\n\n        // describe: c should not depend on b\n\n        try createFixture(\"a.swift\", \"gap/c/c.swift\", \"b/b.swift\") { root, paths in\n            let modules = try modelize(root: root)\n            XCTAssertEqual(modules.count, 2)\n            XCTAssertEqual(modules.flattened.count, 3)\n            let c = try modules.get(\"c\")\n            XCTAssertEqual(c.dependencies.count, 1)\n            let b = try modules.get(\"b\")\n            XCTAssertEqual(b.dependencies.count, 1)\n            let base1 = try c.dep(\"Base\")\n            let base2 = try b.dep(\"Base\")\n            XCTAssertEqual(base1.relativeFiles, [\"a.swift\"])\n            XCTAssertEqual(base2.relativeFiles, base1.relativeFiles)\n            XCTAssertEqual(base1, base2)\n        }\n    }\n\n\n    func testRegression1() throws {\n        try createFixture(\"a/a.swift\", \"b/b.swift\", \"b/c/d/d.swift\") { root, paths in\n            let modules = try modelize(root: root)\n            XCTAssertEqual(modules.count, 2)\n            XCTAssertEqual(modules.flattened.count, 3)\n            let d = try modules.get(\"d\")\n            let a = try modules.get(\"a\")\n            let b = try d.dep(\"b\")\n            XCTAssertEqual(d.dependencies, [a, b])\n        }\n    }\n\n    func testRegression2() throws {\n        try createFixture(\"a/a.swift\", \"b/b.swift\", \"b/c/c.swift\", \"b/d/d.swift\", \"b/d/e/e.swift\") { root, paths in\n            let modules = try modelize(root: root)\n            XCTAssertEqual(modules.count, 3)\n            let a = try modules.get(\"a\")\n            XCTAssertEqual(a.relativeFiles, [\"a.swift\"])\n            XCTAssertEqual(a.path, root/\"a\")\n            let e = try modules.get(\"e\")\n            XCTAssertEqual(e.relativeFiles, [\"e.swift\"])\n            XCTAssertEqual(e.path, root/\"b/d/e\")\n            let c = try modules.get(\"c\")\n            XCTAssertEqual(c.relativeFiles, [\"c.swift\"])\n            XCTAssertEqual(c.path, root/\"b/c\")\n            let b = try c.dep(\"b\")\n            let d = try e.dep(\"d\")\n            XCTAssertEqual(d.dependencies, [a, b])\n            XCTAssertEqual(c.dependencies, [a, b])\n        }\n    }\n\n    func testThreeNestedModules() throws {\n        try createFixture(\"a.swift\", \"b/b.swift\", \"b/c/c.swift\") { root, paths in\n            let modules = try modelize(root: root)\n            XCTAssertEqual(modules.count, 1)\n            XCTAssertEqual(modules.flattened.count, 3)\n            let c = try modules.get(\"c\")\n            XCTAssertEqual(c.path, root/\"b/c\")\n            XCTAssertEqual(c.relativeFiles, [\"c.swift\"])\n            XCTAssertEqual(c.dependencies.count, 1)\n            let b = try c.dep(\"b\")\n            XCTAssertEqual(b.path, root/\"b\")\n            XCTAssertEqual(b.relativeFiles, [\"b.swift\"])\n            XCTAssertEqual(b.dependencies.count, 1)\n            let base = try b.dep(\"Base\")\n            XCTAssertEqual(base.path, root)\n            XCTAssertEqual(base.relativeFiles, [\"a.swift\"])\n            XCTAssertEqual(base.dependencies.count, 0)\n        }\n    }\n\n    func testFiveModulesSplitOverTwoLevels() throws {\n        try createFixture(\"a.swift\", \"b/b.swift\", \"c/c.swift\", \"b/d/d.swift\") { root, paths in\n            let modules = try modelize(root: root)\n            XCTAssertEqual(modules.count, 2)\n            XCTAssertEqual(modules.flattened.count, 4)\n\n            let c = try modules.get(\"c\")\n            XCTAssertEqual(c.path, root/\"c\")\n            XCTAssertEqual(c.relativeFiles, [\"c.swift\"])\n            XCTAssertEqual(c.dependencies.count, 1)\n            let base = try c.dep(\"Base\")\n            XCTAssertEqual(base.path, root)\n            XCTAssertEqual(base.relativeFiles, [\"a.swift\"])\n            XCTAssertEqual(base.dependencies.count, 0)\n            let d = try modules.get(\"d\")\n            XCTAssertEqual(d.path, root/\"b/d\")\n            XCTAssertEqual(d.relativeFiles, [\"d.swift\"])\n            XCTAssertEqual(d.dependencies.count, 2)\n            let b = try d.dep(\"b\")\n            XCTAssertEqual(b.path, root/\"b\")\n            XCTAssertEqual(b.relativeFiles, [\"b.swift\"])\n\n            XCTAssertTrue(d.dependencies.contains(c))\n            XCTAssertTrue(d.dependencies.contains(b))\n        }\n    }\n\n    func testOneModuleWithNestedRedHerring() throws {\n        try createFixture(\"a.swift\", \"b/b.foo\") { root, paths in\n            var modules: [Module]!\n            XCTAssertNoThrow(modules = try modelize(root: root))\n            XCTAssertEqual(modules.count, 1)\n            XCTAssertEqual(modules.flattened.count, 1)\n            let base = try modules.get(\"Base\")\n            XCTAssertEqual(base.path, root)\n            XCTAssertEqual(base.relativeFiles, [\"a.swift\"])\n            XCTAssertEqual(base.dependencies.count, 0)\n\n        }\n    }\n\n    func testThrowsIfNoModules() throws {\n        for fixture in [[\"foo\"], [\"a/b/c/d/foo\"], [\"a/b/c/d/foo\", \"e/f/goo\"]] {\n            try createFixture(files: fixture) { root, paths in\n                XCTAssertThrowsError(try modelize(root: root)) { error in\n                    do {\n                        throw error\n                    } catch ModelizerError.noSwiftFiles(let path) {\n                        XCTAssertEqual(root, path)\n                    } catch {\n                        XCTFail()\n                    }\n                }\n            }\n        }\n    }\n}\n\nprivate enum E: LocalizedError {\n    case moduleNotFound(desired: String, searching: [String])\n    case dependencyNotFound(desired: String, module: String)\n\n    var errorDescription: String? {\n        switch self {\n        case .moduleNotFound(let desired, let searching):\n            return \"Could not find `\\(desired)` in \\(searching)\"\n        case .dependencyNotFound(let desired, let module):\n            return \"Dependency `\\(desired)` not found in `\\(module)`\"\n        }\n    }\n}\n\nprivate extension Array where Element == Module {\n    var mapped: [String: Module] {\n        return Dictionary(uniqueKeysWithValues: map{ ($0.name, $0) })\n    }\n\n    func get(_ name: String) throws -> Module {\n        guard let module = first(where: { $0.name == name}) else {\n            throw E.moduleNotFound(desired: name, searching: map(\\.name))\n        }\n        return module\n    }\n}\n\nprivate extension Module {\n    func dep(_ name: String) throws -> Module {\n        do {\n            return try dependencies.get(name)\n        } catch E.moduleNotFound(let name, _) {\n            throw E.dependencyNotFound(desired: name, module: self.name)\n        }\n    }\n}\n\nprivate func modelize(root: Path) throws -> [Module] {\n    return try modelize(root: root, basename: \"Base\")\n}\n"
  },
  {
    "path": "Tests/Utility.swift",
    "content": "import Foundation\nimport Base\nimport Path\n\nfunc createFixture(_ files: String..., body: (Path, [Path]) throws -> Void) throws {\n    try createFixture(files: files, body: body)\n}\n\nfunc createFixture(files: [String], body: (Path, [Path]) throws -> Void) throws {\n    try Path.mktemp { root in\n        let paths = files.map{ root/$0 }\n        for path in paths {\n            try path.parent.mkdir(.p)\n            try path.touch()\n        }\n        try body(root, paths)\n    }\n}\n"
  },
  {
    "path": "Tests/XcakeprojTests.swift",
    "content": "@testable import XcakeProject\nimport CakefileDescription\nimport Foundation\nimport Modelizer\nimport XCTest\nimport Base\n\nclass XcakeprojTests: XCTestCase {\n    func test() throws {\n\n        struct Output: Decodable {\n            let project: Project\n            struct Project: Decodable {\n                let targets: [String]\n            }\n        }\n\n        let basename = \"Floobles\"\n\n        try createFixture(\"Sources/Model/a.swift\", \"Sources/Model/b/b.swift\", \"Sources/Model/b/c/c.swift\", \"Sources/Model/b/d/d.swift\") { root, paths in\n            var opts = Options()\n            opts.baseModuleName = basename\n            try XcakeProject(prefix: root, platforms: [.macOS ~> 10.14], swift: .v4_2, options: opts).write()\n\n            let task = Process()\n            task.currentDirectoryPath = root.join(\".cake\").string\n            task.launchPath = \"/usr/bin/xcodebuild\"\n            task.arguments = [\"-list\", \"-json\"]\n            let data = try task.runSync().stdout.data\n            let json = try JSONDecoder().decode(Output.self, from: data)\n            XCTAssertEqual(Set(json.project.targets), [\"Batter·\\(basename)\", \"Batter·b\", \"Batter·c\", \"Batter·d\", \"Cakefile\", \"Cakefile·Completion\", \"Batter\", \"Cake\", \"Versionator\"])\n\n            // or cannot delete fixture dir and test fails\n            for entry in try root.join(\".cake\").ls() where entry.kind == .file && entry.path.extension == \"swift\" {\n                try entry.path.unlock()\n            }\n        }\n    }\n}\n"
  }
]