Full Code of Kapeli/Dash-iOS for AI

master d47f6e99bacf cached
814 files
45.4 MB
742.2k tokens
320 symbols
1 requests
Download .txt
Showing preview only (2,943K chars total). Download the full file or copy to clipboard to get everything.
Repository: Kapeli/Dash-iOS
Branch: master
Commit: d47f6e99bacf
Files: 814
Total size: 45.4 MB

Directory structure:
gitextract_ynms4_oa/

├── .gitignore
├── CHANGELOG.md
├── Dash/
│   ├── Base.lproj/
│   │   └── Main.storyboard
│   ├── DHAppDelegate.h
│   ├── DHAppDelegate.m
│   ├── DHAppUpdateChecker.h
│   ├── DHAppUpdateChecker.m
│   ├── DHAppleAPIProtocol.h
│   ├── DHAppleAPIProtocol.m
│   ├── DHAppleActiveLanguage.h
│   ├── DHAppleActiveLanguage.m
│   ├── DHBlockProtocol.h
│   ├── DHBlockProtocol.m
│   ├── DHBrowserCell.xib
│   ├── DHBrowserTableView.h
│   ├── DHBrowserTableView.m
│   ├── DHBrowserTableViewCell.h
│   ├── DHBrowserTableViewCell.m
│   ├── DHCSS.h
│   ├── DHCSS.m
│   ├── DHCheatRepo.h
│   ├── DHCheatRepo.m
│   ├── DHCheatRepoList.h
│   ├── DHCheatRepoList.m
│   ├── DHDBNestedResultSorter.h
│   ├── DHDBNestedResultSorter.m
│   ├── DHDBResult.h
│   ├── DHDBResult.m
│   ├── DHDBResultSorter.h
│   ├── DHDBResultSorter.m
│   ├── DHDBSearchController.h
│   ├── DHDBSearchController.m
│   ├── DHDBSearcher.h
│   ├── DHDBSearcher.m
│   ├── DHDocset.h
│   ├── DHDocset.m
│   ├── DHDocsetBrowser.h
│   ├── DHDocsetBrowser.m
│   ├── DHDocsetBrowserViewModel.h
│   ├── DHDocsetBrowserViewModel.m
│   ├── DHDocsetDownloader.h
│   ├── DHDocsetDownloader.m
│   ├── DHDocsetIndexer.h
│   ├── DHDocsetIndexer.m
│   ├── DHDocsetManager.h
│   ├── DHDocsetManager.m
│   ├── DHDocsetTransferrer.h
│   ├── DHDocsetTransferrer.m
│   ├── DHEntryBrowser.h
│   ├── DHEntryBrowser.m
│   ├── DHFeed.h
│   ├── DHFeed.m
│   ├── DHFeedResult.h
│   ├── DHFeedResult.m
│   ├── DHFileDownload.h
│   ├── DHFileDownload.m
│   ├── DHImageCache.h
│   ├── DHImageCache.m
│   ├── DHJavaScript.h
│   ├── DHJavaScript.m
│   ├── DHJavaScriptBridge.h
│   ├── DHJavaScriptBridge.m
│   ├── DHLatencyTestResult.h
│   ├── DHLatencyTestResult.m
│   ├── DHLatencyTester.h
│   ├── DHLatencyTester.m
│   ├── DHLoadingCell.xib
│   ├── DHNavigationAnimator.h
│   ├── DHNavigationAnimator.m
│   ├── DHNavigationController.h
│   ├── DHNavigationController.m
│   ├── DHNestedViewController.h
│   ├── DHNestedViewController.m
│   ├── DHPreferences.h
│   ├── DHPreferences.m
│   ├── DHQueuedDB.h
│   ├── DHQueuedDB.m
│   ├── DHRemote.h
│   ├── DHRemote.m
│   ├── DHRemoteBrowser.h
│   ├── DHRemoteBrowser.m
│   ├── DHRemoteImage.h
│   ├── DHRemoteImage.m
│   ├── DHRemoteProtocol.h
│   ├── DHRemoteProtocol.m
│   ├── DHRemoteServer.h
│   ├── DHRemoteServer.m
│   ├── DHRepo.h
│   ├── DHRepo.m
│   ├── DHRepoCell.xib
│   ├── DHRepoTableView.h
│   ├── DHRepoTableView.m
│   ├── DHRepoTableViewCell.h
│   ├── DHRepoTableViewCell.m
│   ├── DHRightDetailLabel.h
│   ├── DHRightDetailLabel.m
│   ├── DHSearchDisplayController.h
│   ├── DHSearchDisplayController.m
│   ├── DHSplitViewController.h
│   ├── DHSplitViewController.m
│   ├── DHTarixIndex.h
│   ├── DHTarixIndex.m
│   ├── DHTarixProtocol.h
│   ├── DHTarixProtocol.m
│   ├── DHTocBrowser.h
│   ├── DHTocBrowser.m
│   ├── DHTransferFeed.h
│   ├── DHTransferFeed.m
│   ├── DHType.h
│   ├── DHType.m
│   ├── DHTypeBrowser.h
│   ├── DHTypeBrowser.m
│   ├── DHTypes.h
│   ├── DHTypes.m
│   ├── DHUnarchiver.h
│   ├── DHUnarchiver.m
│   ├── DHUserRepo.h
│   ├── DHUserRepo.m
│   ├── DHUserRepoList.h
│   ├── DHUserRepoList.m
│   ├── DHWebProgressView.h
│   ├── DHWebProgressView.m
│   ├── DHWebView.h
│   ├── DHWebView.m
│   ├── DHWebViewController.h
│   ├── DHWebViewController.m
│   ├── DHWindow.h
│   ├── DHWindow.m
│   ├── Dash iOS.xcodeproj/
│   │   ├── project.pbxproj
│   │   └── project.xcworkspace/
│   │       ├── contents.xcworkspacedata
│   │       └── xcshareddata/
│   │           ├── Dash iOS.xccheckout
│   │           └── Dash iOS.xcscmblueprint
│   ├── Dash-Info.plist
│   ├── Dash-Prefix.pch
│   ├── Defaults.plist
│   ├── FMDatabase.h
│   ├── FMDatabase.m
│   ├── FMDatabaseAdditions.h
│   ├── FMDatabaseAdditions.m
│   ├── FMDatabasePool.h
│   ├── FMDatabasePool.m
│   ├── FMDatabaseQueue.h
│   ├── FMDatabaseQueue.m
│   ├── FMResultSet.h
│   ├── FMResultSet.m
│   ├── Images.xcassets/
│   │   ├── AppIcon.appiconset/
│   │   │   └── Contents.json
│   │   ├── Empty Placeholders/
│   │   │   ├── placeholder_docsets.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── placeholder_transfer.imageset/
│   │   │       └── Contents.json
│   │   ├── Platforms/
│   │   │   ├── Contents.json
│   │   │   ├── Dash.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Google.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Mac.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Other.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── SproutCore.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Stack Overflow.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── actionscript.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── akka.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── android.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── angular.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── angulardart.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── angularjs.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── angularts.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ansible.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── apache.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── apple.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── applescript.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── arduino.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── awesome.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── awsjs.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── backbone.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── bash.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── boost.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── bootstrap.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── bourbon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── c.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cakephp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cappuccino.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cf.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── chai.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cheatsheet.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── chef.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cljlib.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── clojure.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cmake.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cocoadocs_platform.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cocoapods.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cocos2d.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cocos2dx.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── codeigniter.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── coffee.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── compass.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cordova.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── corona.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── couchdb.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cpp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── craft.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── css.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cvc.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cvcpp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cvj.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cvp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── d3.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── dartdocs.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── dartlang.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── django.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── docker.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── doctrine.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── dojo.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── dom.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── drupal.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ee.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── elasticsearch.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── elisp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── elixir.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ember.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── emmet.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── erlang.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── express.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── extjs.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── flask.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── foundation.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── git.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── github.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── gl2.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── gl3.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── gl4.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── glib.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── go.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── godoc.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── gradle.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── grails.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── groovy.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── grunt.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── gulp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── hackage.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── haml.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── handlebars.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── haskell.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── hex.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── html.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ionic.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── iphone.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jQuery.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jade.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jasmine.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── java.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── javadoc.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── javafx.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── javascript.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jee6.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jee7.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jee8.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jekyll.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jinja.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── joomla.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jquerym.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jqueryui.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── julia.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── knockout.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── kobold2d.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── laravel.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── latex.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── less.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── linux.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── lisp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── lodash.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── lua.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── manPages.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── marionette.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── markdown.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── matlab.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── matplotlib.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── meteor.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── mocha.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── moment.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── mongodb.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── mongoose.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── mono.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── moo.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── mysql.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── neat.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── net.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── nginx.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── nodejs.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── numpy.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ocaml.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── opencv.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── pandas.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── perl.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── phalcon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── phonegap.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── php.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── phpp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── phpunit.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── playjava.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── playscala.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── polymerdart.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── processing.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── prototype.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── psql.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── pug.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── puppet.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── python.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── qt.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── r.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── racket.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── rails.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── react.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── redis.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── require.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ruby.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── rubyGems.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── rubymotion.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── rust.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sails.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── salt.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sass.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── scala.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── scaladoc.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── scipy.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── semantic.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sencha.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sinon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── smarty.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sooffline.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── soonline.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sparrow.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── spring.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sqlalchemy.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sqlite.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── statamic.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── stylus.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── susy.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── svg.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── swift.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── symfony.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── tcl.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── titanium.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── tornado.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── tvos.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── twig.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── twisted.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── typescript.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── typo3.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── underscore.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── unity3d.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── vagrant.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── vim.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── vsphere.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── vue.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── watchos.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── wordpress.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── xamarin.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── xojo.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── xslt.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── xul.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── yii.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── yui.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── zend.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── zepto.imageset/
│   │   │       └── Contents.json
│   │   ├── Preferences/
│   │   │   ├── Contents.json
│   │   │   ├── cheat_repo.imageset/
│   │   │   │   ├── Contents.json
│   │   │   │   ├── cheat_repo.psd
│   │   │   │   └── cheat_repo@2x.psd
│   │   │   ├── main_repo.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── transfer_repo.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── user_repo.imageset/
│   │   │       ├── Contents.json
│   │   │       ├── user_repo.psd
│   │   │       └── user_repo@2x.psd
│   │   ├── Repos/
│   │   │   ├── checkmark.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── download_button_arrow.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── download_button_background.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── error.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── transfer_button.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── trash.imageset/
│   │   │       └── Contents.json
│   │   ├── Types/
│   │   │   ├── Abbreviation.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Alias.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Annotation.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Attribute.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Axiom.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Binding.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Block.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Bookmark.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Builtin.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Callback.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Category.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Class.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Collection.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Column.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Command.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Component.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Constant.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Constructor.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Contents.json
│   │   │   ├── Control Structure.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Conversion.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Data Source.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Database.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Decorator.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Define.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Delegate.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── DeletedSnippet.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Device.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Diagram.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Directive.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Element.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Entry.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Enum.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Environment.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Error.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Event.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Exception.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Expression.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Extension.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Field.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── File.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Filter.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Flag.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Foreign Key.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Framework.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Function.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Global.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Glossary.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Guide.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Handler.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Helper.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Hook.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Index.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Indirection.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Inductive.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Instance.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Instruction.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Interface.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Iterator.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Keyword.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Kind.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Lemma.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Library.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Literal.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Macro.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Member.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Message.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Method.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Mixin.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Modifier.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Module.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Namespace.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── NewSnippet.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Node.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Notation.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Object.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Operator.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Option.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Package.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Parameter.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Pattern.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Pipe.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Plugin.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Procedure.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Projection.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Property.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Protocol.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Provider.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Provisioner.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Query.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Record.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Reference.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Register.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Relationship.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Report.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Request.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Resource.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Role.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Sample.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Schema.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Script.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Section.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Sender.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Service.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Setting.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Shortcut.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Signature.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Snippet.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Special Form.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── State.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Statement.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Struct.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Style.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Subroutine.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Syntax.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Table.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Tactic.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Tag.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Template.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Test.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Trait.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Trigger.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Type.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Union.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Unknown.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Value.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Variable.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Variant.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── View.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Web.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── WebSearch.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Widget.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Word.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── _DashAnnotations.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── _Struct.imageset/
│   │   │       └── Contents.json
│   │   └── WebView/
│   │       ├── back.imageset/
│   │       │   └── Contents.json
│   │       ├── collapse.imageset/
│   │       │   └── Contents.json
│   │       ├── expand.imageset/
│   │       │   └── Contents.json
│   │       ├── forward.imageset/
│   │       │   └── Contents.json
│   │       ├── tocMenu.imageset/
│   │       │   └── Contents.json
│   │       ├── zoomIn.imageset/
│   │       │   └── Contents.json
│   │       └── zoomOut.imageset/
│   │           └── Contents.json
│   ├── Launch.xib
│   ├── NSArray+DHUtils.h
│   ├── NSArray+DHUtils.m
│   ├── NSData+DHUtils.h
│   ├── NSData+DHUtils.m
│   ├── NSFileManager+DHUtils.h
│   ├── NSFileManager+DHUtils.m
│   ├── NSObject+DHUtils.h
│   ├── NSObject+DHUtils.m
│   ├── NSString+DHUtils.h
│   ├── NSString+DHUtils.m
│   ├── NSString+GTM.h
│   ├── NSString+GTM.m
│   ├── NSTimer+DHUtils.h
│   ├── NSTimer+DHUtils.m
│   ├── NSURL+DHUtils.h
│   ├── NSURL+DHUtils.m
│   ├── Settings.bundle/
│   │   ├── Cocoa_Pods_Acknowledgements.plist
│   │   ├── License.plist
│   │   ├── Other_Acknowledgements.plist
│   │   ├── Root.plist
│   │   └── en.lproj/
│   │       └── Root.strings
│   ├── UIButton+DHUtils.h
│   ├── UIButton+DHUtils.m
│   ├── UITableView+DHUtils.h
│   ├── UITableView+DHUtils.m
│   ├── UIView+DHUtils.h
│   ├── UIView+DHUtils.m
│   ├── UIViewController+DHUtils.h
│   ├── UIViewController+DHUtils.m
│   ├── apple.js
│   ├── archive.h
│   ├── archive_entry.h
│   ├── cocoa.js
│   ├── en.lproj/
│   │   └── InfoPlist.strings
│   ├── hash_change_notifier.js
│   ├── home.html
│   ├── libarchive.a
│   ├── main.m
│   ├── msdn.js
│   ├── on_page_load.js
│   ├── ruby.js
│   ├── scroll_to_current_anchor.js
│   ├── style.css
│   ├── whitespace_tokenizer.c
│   └── whitespace_tokenizer.h
├── Dash iOS.xcworkspace/
│   ├── contents.xcworkspacedata
│   └── xcshareddata/
│       ├── Dash iOS.xccheckout
│       ├── Dash iOS.xcscmblueprint
│       └── IDEWorkspaceChecks.plist
├── Frameworks/
│   └── Apple_Docs_Framework.framework/
│       ├── Apple_Docs_Framework
│       ├── Headers/
│       │   ├── Apple_Docs_Framework.h
│       │   ├── DHCommandLineParser.h
│       │   ├── DHTester.h
│       │   ├── DHViewer.h
│       │   ├── DHViewerHelper.h
│       │   └── DHXcodeHelper.h
│       ├── Info.plist
│       ├── Modules/
│       │   └── module.modulemap
│       └── prism.js
├── Icon/
│   └── Icon.psd
├── LICENSE
├── Modified Pods/
│   ├── DTBonjour/
│   │   ├── .gitignore
│   │   ├── .travis.yml
│   │   ├── AppledocSettings.plist
│   │   ├── Core/
│   │   │   ├── DTBonjour-Prefix.pch
│   │   │   └── Source/
│   │   │       ├── DTBonjourDataChunk.h
│   │   │       ├── DTBonjourDataChunk.m
│   │   │       ├── DTBonjourDataConnection.h
│   │   │       ├── DTBonjourDataConnection.m
│   │   │       ├── DTBonjourServer.h
│   │   │       ├── DTBonjourServer.m
│   │   │       ├── NSScanner+DTBonjour.h
│   │   │       └── NSScanner+DTBonjour.m
│   │   ├── DTBonjour.podspec
│   │   ├── DTBonjour.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   └── xcshareddata/
│   │   │       └── xcschemes/
│   │   │           ├── DTBonjour (OS X).xcscheme
│   │   │           └── DTBonjour (iOS).xcscheme
│   │   ├── Documentation/
│   │   │   └── Change Log-template.markdown
│   │   ├── LICENSE
│   │   ├── build.gradle
│   │   ├── coveralls.rb
│   │   └── readme.markdown
│   ├── KissXML-5.1.2/
│   │   ├── .gitignore
│   │   ├── .hgignore
│   │   ├── .travis.yml
│   │   ├── KissXML/
│   │   │   ├── Additions/
│   │   │   │   ├── DDXMLElementAdditions.h
│   │   │   │   └── DDXMLElementAdditions.m
│   │   │   ├── Categories/
│   │   │   │   ├── NSString+DDXML.h
│   │   │   │   └── NSString+DDXML.m
│   │   │   ├── DDXML.h
│   │   │   ├── DDXML.swift
│   │   │   ├── DDXMLDocument.h
│   │   │   ├── DDXMLDocument.m
│   │   │   ├── DDXMLElement.h
│   │   │   ├── DDXMLElement.m
│   │   │   ├── DDXMLNode.h
│   │   │   ├── DDXMLNode.m
│   │   │   ├── KissXML.h
│   │   │   └── Private/
│   │   │       └── DDXMLPrivate.h
│   │   ├── KissXML.podspec
│   │   ├── LICENSE.txt
│   │   ├── README.markdown
│   │   └── Tests/
│   │       ├── Mac/
│   │       │   ├── KissXML.xcodeproj/
│   │       │   │   ├── project.pbxproj
│   │       │   │   ├── project.xcworkspace/
│   │       │   │   │   └── contents.xcworkspacedata
│   │       │   │   └── xcshareddata/
│   │       │   │       └── xcschemes/
│   │       │   │           └── KissXMLTests.xcscheme
│   │       │   ├── KissXML.xcworkspace/
│   │       │   │   └── contents.xcworkspacedata
│   │       │   ├── KissXMLTests/
│   │       │   │   └── Info.plist
│   │       │   └── Podfile
│   │       ├── Shared/
│   │       │   └── KissXMLTests.m
│   │       ├── Swift/
│   │       │   ├── KissXML.xcodeproj/
│   │       │   │   ├── project.pbxproj
│   │       │   │   ├── project.xcworkspace/
│   │       │   │   │   └── contents.xcworkspacedata
│   │       │   │   └── xcshareddata/
│   │       │   │       └── xcschemes/
│   │       │   │           └── KissXMLSwiftTests.xcscheme
│   │       │   ├── KissXML.xcworkspace/
│   │       │   │   └── contents.xcworkspacedata
│   │       │   ├── KissXMLSwiftTests/
│   │       │   │   ├── Info.plist
│   │       │   │   └── KissXMLSwiftTests.swift
│   │       │   └── Podfile
│   │       ├── Swift-iOS/
│   │       │   ├── KissXML.xcodeproj/
│   │       │   │   ├── project.pbxproj
│   │       │   │   ├── project.xcworkspace/
│   │       │   │   │   └── contents.xcworkspacedata
│   │       │   │   └── xcshareddata/
│   │       │   │       └── xcschemes/
│   │       │   │           └── KissXMLSwiftTests.xcscheme
│   │       │   ├── KissXML.xcworkspace/
│   │       │   │   └── contents.xcworkspacedata
│   │       │   ├── KissXMLSwiftTests/
│   │       │   │   ├── Info.plist
│   │       │   │   └── KissXMLSwiftTests.swift
│   │       │   └── Podfile
│   │       ├── iOS/
│   │       │   ├── KissXML.xcodeproj/
│   │       │   │   ├── project.pbxproj
│   │       │   │   ├── project.xcworkspace/
│   │       │   │   │   └── contents.xcworkspacedata
│   │       │   │   └── xcshareddata/
│   │       │   │       └── xcschemes/
│   │       │   │           └── KissXMLTests.xcscheme
│   │       │   ├── KissXML.xcworkspace/
│   │       │   │   └── contents.xcworkspacedata
│   │       │   ├── KissXMLTests/
│   │       │   │   └── Info.plist
│   │       │   └── Podfile
│   │       └── iOS-static/
│   │           ├── KissXML.xcodeproj/
│   │           │   ├── project.pbxproj
│   │           │   ├── project.xcworkspace/
│   │           │   │   └── contents.xcworkspacedata
│   │           │   └── xcshareddata/
│   │           │       └── xcschemes/
│   │           │           └── KissXMLTests.xcscheme
│   │           ├── KissXML.xcworkspace/
│   │           │   └── contents.xcworkspacedata
│   │           ├── KissXMLTests/
│   │           │   └── Info.plist
│   │           └── Podfile
│   └── MRProgress/
│       ├── LICENSE
│       ├── MRProgress.podspec
│       ├── README.md
│       └── src/
│           ├── Blur/
│           │   ├── MRBlurView.h
│           │   ├── MRBlurView.m
│           │   ├── UIImage+MRImageEffects.h
│           │   └── UIImage+MRImageEffects.m
│           ├── Components/
│           │   ├── MRActivityIndicatorView.h
│           │   ├── MRActivityIndicatorView.m
│           │   ├── MRCircularProgressView.h
│           │   ├── MRCircularProgressView.m
│           │   ├── MRIconView.h
│           │   ├── MRIconView.m
│           │   ├── MRNavigationBarProgressView.h
│           │   ├── MRNavigationBarProgressView.m
│           │   ├── MRProgressOverlayView.h
│           │   ├── MRProgressOverlayView.m
│           │   ├── MRProgressView.h
│           │   ├── MRProgressView.m
│           │   ├── MRStopButton.h
│           │   ├── MRStopButton.m
│           │   └── MRStopableView.h
│           ├── MRProgress.h
│           └── Utils/
│               └── MRProgressHelper.h
├── Podfile
├── Pods/
│   ├── AutoCoding/
│   │   ├── AutoCoding/
│   │   │   ├── AutoCoding.h
│   │   │   └── AutoCoding.m
│   │   ├── LICENCE.md
│   │   └── README.md
│   ├── DZNEmptyDataSet/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   └── Source/
│   │       ├── UIScrollView+EmptyDataSet.h
│   │       └── UIScrollView+EmptyDataSet.m
│   ├── GZIP/
│   │   ├── GZIP/
│   │   │   ├── GZIP.h
│   │   │   ├── NSData+GZIP.h
│   │   │   └── NSData+GZIP.m
│   │   ├── LICENCE.md
│   │   └── README.md
│   ├── HockeySDK/
│   │   └── HockeySDK-iOS/
│   │       ├── HockeySDK.embeddedframework/
│   │       │   ├── HockeySDK.framework/
│   │       │   │   ├── Headers/
│   │       │   │   │   ├── BITAuthenticator.h
│   │       │   │   │   ├── BITCrashAttachment.h
│   │       │   │   │   ├── BITCrashDetails.h
│   │       │   │   │   ├── BITCrashManager.h
│   │       │   │   │   ├── BITCrashManagerDelegate.h
│   │       │   │   │   ├── BITCrashMetaData.h
│   │       │   │   │   ├── BITHockeyAttachment.h
│   │       │   │   │   ├── BITHockeyBaseManager.h
│   │       │   │   │   ├── BITHockeyBaseViewController.h
│   │       │   │   │   ├── BITHockeyManager.h
│   │       │   │   │   ├── BITHockeyManagerDelegate.h
│   │       │   │   │   ├── BITMetricsManager.h
│   │       │   │   │   ├── BITStoreUpdateManager.h
│   │       │   │   │   ├── BITStoreUpdateManagerDelegate.h
│   │       │   │   │   ├── BITUpdateManager.h
│   │       │   │   │   ├── BITUpdateManagerDelegate.h
│   │       │   │   │   ├── BITUpdateViewController.h
│   │       │   │   │   ├── HockeySDK.h
│   │       │   │   │   ├── HockeySDKEnums.h
│   │       │   │   │   ├── HockeySDKFeatureConfig.h
│   │       │   │   │   └── HockeySDKNullability.h
│   │       │   │   ├── HockeySDK
│   │       │   │   └── Modules/
│   │       │   │       └── module.modulemap
│   │       │   └── HockeySDKResources.bundle/
│   │       │       ├── de.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── en.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── es.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── fa.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── fr.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── hr.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── hu.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── it.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── ja.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── nb.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── nl.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── pt-PT.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── pt.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── ru.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── tr.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       └── zh-Hans.lproj/
│   │       │           └── HockeySDK.strings
│   │       ├── LICENSE
│   │       └── README.md
│   ├── JGMethodSwizzler/
│   │   ├── JGMethodSwizzler/
│   │   │   ├── JGMethodSwizzler.h
│   │   │   └── JGMethodSwizzler.m
│   │   └── README.md
│   ├── Local Podspecs/
│   │   ├── DTBonjour.podspec.json
│   │   ├── DZNEmptyDataSet.podspec.json
│   │   ├── KissXML.podspec.json
│   │   └── MRProgress.podspec.json
│   ├── NSTimer-Blocks/
│   │   ├── NSTimer+Blocks.h
│   │   ├── NSTimer+Blocks.m
│   │   └── README.md
│   ├── Pods.xcodeproj/
│   │   └── project.pbxproj
│   ├── Reachability/
│   │   ├── LICENCE.txt
│   │   ├── README.md
│   │   ├── Reachability.h
│   │   └── Reachability.m
│   ├── SAMKeychain/
│   │   ├── LICENSE
│   │   ├── Readme.markdown
│   │   ├── Sources/
│   │   │   ├── SAMKeychain.h
│   │   │   ├── SAMKeychain.m
│   │   │   ├── SAMKeychainQuery.h
│   │   │   └── SAMKeychainQuery.m
│   │   └── Support/
│   │       └── SAMKeychain.bundle/
│   │           └── en.lproj/
│   │               └── SAMKeychain.strings
│   ├── Target Support Files/
│   │   ├── AutoCoding/
│   │   │   ├── AutoCoding-dummy.m
│   │   │   ├── AutoCoding-prefix.pch
│   │   │   └── AutoCoding.xcconfig
│   │   ├── DTBonjour/
│   │   │   ├── DTBonjour-dummy.m
│   │   │   ├── DTBonjour-prefix.pch
│   │   │   └── DTBonjour.xcconfig
│   │   ├── DZNEmptyDataSet/
│   │   │   ├── DZNEmptyDataSet-dummy.m
│   │   │   ├── DZNEmptyDataSet-prefix.pch
│   │   │   └── DZNEmptyDataSet.xcconfig
│   │   ├── GZIP/
│   │   │   ├── GZIP-dummy.m
│   │   │   ├── GZIP-prefix.pch
│   │   │   └── GZIP.xcconfig
│   │   ├── HockeySDK/
│   │   │   └── ResourceBundle-HockeySDKResources-Info.plist
│   │   ├── JGMethodSwizzler/
│   │   │   ├── JGMethodSwizzler-dummy.m
│   │   │   ├── JGMethodSwizzler-prefix.pch
│   │   │   └── JGMethodSwizzler.xcconfig
│   │   ├── KissXML/
│   │   │   ├── KissXML-dummy.m
│   │   │   ├── KissXML-prefix.pch
│   │   │   └── KissXML.xcconfig
│   │   ├── MRProgress/
│   │   │   ├── MRProgress-dummy.m
│   │   │   ├── MRProgress-prefix.pch
│   │   │   └── MRProgress.xcconfig
│   │   ├── NSTimer-Blocks/
│   │   │   ├── NSTimer-Blocks-dummy.m
│   │   │   ├── NSTimer-Blocks-prefix.pch
│   │   │   └── NSTimer-Blocks.xcconfig
│   │   ├── Pods-Dash/
│   │   │   ├── Pods-Dash-acknowledgements.markdown
│   │   │   ├── Pods-Dash-acknowledgements.plist
│   │   │   ├── Pods-Dash-dummy.m
│   │   │   ├── Pods-Dash-frameworks.sh
│   │   │   ├── Pods-Dash-resources.sh
│   │   │   ├── Pods-Dash.debug.xcconfig
│   │   │   └── Pods-Dash.release.xcconfig
│   │   ├── Pods-Dash-Dash App Store/
│   │   │   ├── Pods-Dash-Dash App Store-acknowledgements.markdown
│   │   │   ├── Pods-Dash-Dash App Store-acknowledgements.plist
│   │   │   ├── Pods-Dash-Dash App Store-dummy.m
│   │   │   ├── Pods-Dash-Dash App Store-frameworks.sh
│   │   │   ├── Pods-Dash-Dash App Store-resources.sh
│   │   │   ├── Pods-Dash-Dash App Store.debug.xcconfig
│   │   │   └── Pods-Dash-Dash App Store.release.xcconfig
│   │   ├── Reachability/
│   │   │   ├── Reachability-dummy.m
│   │   │   ├── Reachability-prefix.pch
│   │   │   └── Reachability.xcconfig
│   │   ├── SAMKeychain/
│   │   │   ├── SAMKeychain-dummy.m
│   │   │   ├── SAMKeychain-prefix.pch
│   │   │   └── SAMKeychain.xcconfig
│   │   ├── UIActionSheet+Blocks/
│   │   │   ├── UIActionSheet+Blocks-dummy.m
│   │   │   ├── UIActionSheet+Blocks-prefix.pch
│   │   │   └── UIActionSheet+Blocks.xcconfig
│   │   └── UIAlertView+Blocks/
│   │       ├── UIAlertView+Blocks-dummy.m
│   │       ├── UIAlertView+Blocks-prefix.pch
│   │       └── UIAlertView+Blocks.xcconfig
│   ├── UIActionSheet+Blocks/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── UIActionSheet+Blocks.h
│   │   └── UIActionSheet+Blocks.m
│   └── UIAlertView+Blocks/
│       ├── LICENSE
│       ├── README.md
│       ├── UIAlertView+Blocks.h
│       └── UIAlertView+Blocks.m
└── README.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

## Build generated
build/
DerivedData/

## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/

## Other
*.moved-aside
*.xcuserstate

## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/

# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build

# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md

fastlane/report.xml
fastlane/screenshots

#Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode

iOSInjectionProject/


================================================
FILE: CHANGELOG.md
================================================
# Master

* Nothing yet.

# 1.8.13

* Added support for the Xcode 11 docs - [b052c97](https://github.com/Kapeli/Dash-iOS/commit/b052c970b6536cc12ce5ab216f723466eff9899c)

# 1.8.12

* Added support for the Xcode 10.2 docs - [2065d5b](https://github.com/Kapeli/Dash-iOS/commit/2065d5b4995d7ab4b35a25a3bd12ad305a4a106d)

# 1.8.11

* Added support for the Xcode 10.1 docs - [b6d3e4f](https://github.com/Kapeli/Dash-iOS/commit/b6d3e4f3d53c4ac77628e3142b656aaa7c0ab966)

# 1.8.10

* Added support for the Xcode 10 docs - [2aa2284](https://github.com/Kapeli/Dash-iOS/commit/2aa228480092f311b6ae809cfedff2ad5701e2cf)
* Added Java SE11 docset - [55ca952](https://github.com/Kapeli/Dash-iOS/commit/55ca952e25edfbf82100299f9c1f9d7ba6eb377a)

# 1.8.9

* Added the Swift docset back - [ec51356](https://github.com/Kapeli/Dash-iOS/commit/ec51356e95ac7a0aedbd94e648771578174db35a)
* Fixed an UI issue which occurred only in landscape mode on iPhone X. Thanks to [@qinyuhang](https://github.com/qinyuhang) for reporting the issue and [@DmytriE](https://github.com/DmytriE) for fixing it - [#80](https://github.com/Kapeli/Dash-iOS/pull/80)

# 1.8.8

* Apple API Reference docset: added support for Xcode 9.4 and Xcode 10 - [f29d3f0](https://github.com/Kapeli/Dash-iOS/commit/f29d3f01bb2030b81e311f74e45f5743568e53e6) and [0acc05c](https://github.com/Kapeli/Dash-iOS/commit/0acc05c01aadb427a51579c2b7a048a32e825bdf)

# 1.8.7

* Improved the way Dash selects the best server to connect to - [e122d05](https://github.com/Kapeli/Dash-iOS/commit/e122d05120aab70b2545f5300806a564276ee6d8)
* Added Java SE10 docset - [c9d62b1](https://github.com/Kapeli/Dash-iOS/commit/c9d62b169fe9aa8945d8d0af7034e57928473741)
* Removed JavaFX docset as it's now part of the Java SE docset - [c9d62b1](https://github.com/Kapeli/Dash-iOS/commit/c9d62b169fe9aa8945d8d0af7034e57928473741)
* Docset index pages can now scroll to a specific section within the page - [091f04a](https://github.com/Kapeli/Dash-iOS/commit/091f04a10754a4256bd5e35545b3532440e63571)

# 1.8.6

* Fixed an issue with the Apple API Reference docset which caused some pages to not load - [bac544a](https://github.com/Kapeli/Dash-iOS/commit/bac544af11f3823bb246989201623b3bee3b8a39)
* Updated Stylus docset icon - [0ad39d3](https://github.com/Kapeli/Dash-iOS/commit/0ad39d3363ead03d430f2cd8dcfa1007c93e5697)

# 1.8.5

* Added Apple API Reference docset support for Xcode 9.3 - [c585578](https://github.com/Kapeli/Dash-iOS/commit/c585578d0ab965dd3481f4c06aff6c320873d5f3)

# 1.8.4

* Fixed an issue which caused the Apple API Reference docset to not be able to display some pages. Thanks to [@philosopherdog](https://github.com/philosopherdog) for reporting the issue - [#71](https://github.com/Kapeli/Dash-iOS/issues/71)
* Fixed an issue which caused docset alphabetical sorting to be case-sensitive. Thanks to [@ewalkie](https://github.com/ewalkie) for reporting the issue - [#72](https://github.com/Kapeli/Dash-iOS/issues/72)

# 1.8.3

* Added support for sorting docsets alphabetically in the docset browser. Thanks to [@waffleboot](https://github.com/waffleboot) for the great work on this - [#69](https://github.com/Kapeli/Dash-iOS/pull/69)
* Added support for Xcode 9.3 docs - [73cadfb](https://github.com/Kapeli/Dash-iOS/commit/73cadfbcbb6e172ec8d12c2ef222a64160e4e42d)

# 1.8.2

* Fixed crash at launch for release build - [c0d2582](https://github.com/Kapeli/Dash-iOS/commit/c0d2582e70dbeec560c03781727fd8dcf95b9e7d)

# 1.8.1

* Fixed Apple API Reference docset transfer issues - [#66](https://github.com/Kapeli/Dash-iOS/issues/66)

# 1.8.0

* Fixed docset index page button on iOS 11 - [7fd09e8](https://github.com/Kapeli/Dash-iOS/commit/7fd09e8cae3b981aa75662ef3d19111a3ab2039a)
* Fixed an issue which caused the Swift docset to still appear in Dash, although it was removed - [ca9c9f6](https://github.com/Kapeli/Dash-iOS/commit/ca9c9f64daf9eac30c4dcc000f99240a424bb123)
* Fixed an issue which caused the search results table to be inset on iOS 11 - [d022d88](https://github.com/Kapeli/Dash-iOS/commit/d022d888e21a37e54a9960239689cac54bb7ef5b)
* Fixed an issue which caused search results to not be highlighted correctly - [aea602e](https://github.com/Kapeli/Dash-iOS/commit/aea602e9b5292c110f6cb934f892349a3290689d)
* Fixed access to UI on background thread - [90b1875](https://github.com/Kapeli/Dash-iOS/commit/90b1875f3728f5ca4485693ec8209cf8342cecfe)
* Fixed an issue which caused extra table row separators to appear above the search results table - [313893d](https://github.com/Kapeli/Dash-iOS/commit/313893ddeddb10b029d7bb2c324867a09a127946)
* Fixed Settings button sometimes appearing faded - [2bb42fe](https://github.com/Kapeli/Dash-iOS/commit/2bb42fe2ee51a3fabadb921100da6b0c7674efbc)
* Consolidated the OpenCV C, C++, Python and Java docsets into a single OpenCV docset - [9af12ee](https://github.com/Kapeli/Dash-iOS/commit/9af12ee33f4d60de14d4bbb0a0741be61296e2b0)

# 1.7.0

* Added support for adding docsets using the "Open in..." menu. Thanks to [@insightmind](https://github.com/insightmind) for the great work on this - [#52](https://github.com/Kapeli/Dash-iOS/pull/52)
* Added Java SE9 docset - [7c727c2](https://github.com/Kapeli/Dash-iOS/commit/7c727c2d30d41c0f37a4588510a804e4300b8c61)
* Added Java EE8 docset - [61e2df7](https://github.com/Kapeli/Dash-iOS/commit/61e2df74f955bcf22ff6611be1ff0f6e45f6024a)
* Added AngularJS docset (now separate from the Angular docset) - [b0ef193](https://github.com/Kapeli/Dash-iOS/commit/b0ef1936b71b026baa92e76371331be26c1f32dd)
* Removed Swift docset. Swift docs can be found in the Apple API Reference docset - [88913a6](https://github.com/Kapeli/Dash-iOS/commit/88913a6236c8c3c3874da63b300930496658637e)
* Fixed an AirDrop issue. Thanks to [@ClementPadovani](https://github.com/ClementPadovani) for the fix - [#61](https://github.com/Kapeli/Dash-iOS/pull/61)
* Added Glossary, Control Structure, Expression, Handler, Iterator, Widget, Block, Template types - [a94006b](https://github.com/Kapeli/Dash-iOS/commit/a94006bc39996c69d168f9c2d8f94b0e37c31ac6)

# 1.6.3

* Fixed an iPad-only crash which occurred in Settings while going into split view mode with the search field active - [36cf36d](https://github.com/Kapeli/Dash-iOS/commit/36cf36df40619ebfae903e39af4ea836e26fdc42)

# 1.6.2

* Fixed an issue which caused the iOS remote feature to sometimes not pair correctly - [9f9dd6c](https://github.com/Kapeli/Dash-iOS/commit/9f9dd6c8b5761b28899dcae01f828888ab9011d8)
* Consolidated all Angular docsets into one - [56fda1b](https://github.com/Kapeli/Dash-iOS/commit/56fda1b4fa94fa910e377004ba7988ecc5e389eb)
* Fixed an issue which caused empty rows to sometimes appear in the table of contents - [097197c](https://github.com/Kapeli/Dash-iOS/commit/097197c828db9e1b1524f46da41a0db92e7376cf)
* Fixed an iPad-only crash which occurred in Settings while pressing Done with the search field active - [e87a069](https://github.com/Kapeli/Dash-iOS/commit/e87a069b6a94f31d9fac91be9ac6ca4569bcf251)
* Fixed an issue in the User Contributed repo which caused author names to not be truncated when there's not enough space - [3482d8f](https://github.com/Kapeli/Dash-iOS/commit/3482d8f7cd0f6e19b1a42c80a69f09783565522a)
* Added "Data Source" type - [6a45537](https://github.com/Kapeli/Dash-iOS/commit/6a45537447319a68341c2b4686da3b4753828310)

# 1.6.1

* Added support for receiving docsets using AirDrop. Thanks to [@vinayjn](https://github.com/vinayjn) for the great work on this - [#36](https://github.com/Kapeli/Dash-iOS/pull/36)
* Added Pug docset. Removed Jade docset - [36fdff3](https://github.com/Kapeli/Dash-iOS/commit/36fdff3a2ac6d74bddb07ef8c430d46b19dd64d3)
* Fixed build products path. Thanks to [@RegalMedia](https://github.com/RegalMedia) for reporting the issue - [#28](https://github.com/Kapeli/Dash-iOS/issues/28)
* Fixed the display of included modules for Ruby docsets - [4416ccb](https://github.com/Kapeli/Dash-iOS/commit/4416ccbb7b78b0b4b0e72608f1ce5bd38a013b72)
* Fixed Dash App Store display/product name - [5015177](https://github.com/Kapeli/Dash-iOS/commit/5015177c23cefaea0688db95b462b33705e12952)

# 1.6.0

* Added support for cheat sheets - [#22](https://github.com/Kapeli/Dash-iOS/pull/22)
* Added support for user contributed docsets - [#20](https://github.com/Kapeli/Dash-iOS/pull/20)
* Added state restoration support. Thanks to [@zhongwuzw](https://github.com/zhongwuzw) for the great work on this - [#18](https://github.com/Kapeli/Dash-iOS/pull/18)
* Fixed Unity 3D docset bug which caused it to not remember the selected language. Thanks to [@hantengx](https://github.com/hantengx) for reporting the issue - [#17](https://github.com/Kapeli/Dash-iOS/issues/17)
* Fixed a crash in the docset downloader. Thanks to [@zhongwuzw](https://github.com/zhongwuzw) for the fix - [#16](https://github.com/Kapeli/Dash-iOS/pull/16)
* Stopped an evil `if()` from taking over the world. Thanks to [@BalestraPatrick](https://github.com/BalestraPatrick) for reporting the issue and [@flovilmart](https://github.com/flovilmart) for fixing it - [#4](https://github.com/Kapeli/Dash-iOS/pull/4)


================================================
FILE: Dash/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11542" systemVersion="16B2657" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="H1p-Uh-vWS">
    <device id="retina5_5" orientation="portrait">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11524"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--Navigation Controller-->
        <scene sceneID="pY4-Hu-kfo">
            <objects>
                <navigationController storyboardIdentifier="DHMainNavigationController" useStoryboardIdentifierAsRestorationIdentifier="YES" id="RMx-3f-FxP" customClass="DHNavigationController" sceneMemberID="viewController">
                    <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" misplaced="YES" id="Pmd-2v-anx">
                        <rect key="frame" x="0.0" y="20" width="414" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <connections>
                        <segue destination="7bK-jq-Zjz" kind="relationship" relationship="rootViewController" id="tsl-Nk-0bq"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="8fS-aE-onr" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="246" y="-545"/>
        </scene>
        <!--Nested Result-->
        <scene sceneID="ftd-z8-gfn">
            <objects>
                <tableViewController storyboardIdentifier="DHNestedBrowser" useStoryboardIdentifierAsRestorationIdentifier="YES" id="On6-fK-Wo0" customClass="DHNestedViewController" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" restorationIdentifier="DHNestedBrowserTableView" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="34K-oz-RHA">
                        <rect key="frame" x="0.0" y="0.0" width="414" height="672"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <prototypes>
                            <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="BLABLA Cell" id="x0P-fR-ekF">
                                <rect key="frame" x="0.0" y="22" width="414" height="44"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="x0P-fR-ekF" id="xkY-Bg-Jb1">
                                    <rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/>
                                    <autoresizingMask key="autoresizingMask"/>
                                </tableViewCellContentView>
                            </tableViewCell>
                        </prototypes>
                        <connections>
                            <outlet property="dataSource" destination="On6-fK-Wo0" id="1bW-nC-WxR"/>
                            <outlet property="delegate" destination="On6-fK-Wo0" id="33f-4n-Xfr"/>
                        </connections>
                    </tableView>
                    <extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
                    <navigationItem key="navigationItem" title="Nested Result" id="BLr-sT-VsR"/>
                    <connections>
                        <segue destination="JEX-9P-axG" kind="push" identifier="DHSearchWebViewSegue" id="JVl-yk-gWU"/>
                    </connections>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="qBi-q0-XGz" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="2322" y="404"/>
        </scene>
        <!--WebView-->
        <scene sceneID="yUG-lL-AsK">
            <objects>
                <viewController storyboardIdentifier="DHWebViewController" title="WebView" useStoryboardIdentifierAsRestorationIdentifier="YES" id="JEX-9P-axG" customClass="DHWebViewController" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="KEp-bG-ttG"/>
                        <viewControllerLayoutGuide type="bottom" id="UCD-CE-b5i"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="svH-Pt-448">
                        <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <webView opaque="NO" contentMode="scaleToFill" misplaced="YES" restorationIdentifier="DHWebView" scalesPageToFit="YES" translatesAutoresizingMaskIntoConstraints="NO" id="0LW-3L-DOL" customClass="DHWebView">
                                <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                                <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <dataDetectorType key="dataDetectorTypes"/>
                            </webView>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="0LW-3L-DOL" firstAttribute="top" secondItem="svH-Pt-448" secondAttribute="top" id="0jL-UA-6vM"/>
                            <constraint firstItem="0LW-3L-DOL" firstAttribute="leading" secondItem="svH-Pt-448" secondAttribute="leading" id="Hek-yP-hkF"/>
                            <constraint firstAttribute="bottom" secondItem="0LW-3L-DOL" secondAttribute="bottom" id="Jyu-U7-lXJ"/>
                            <constraint firstAttribute="trailing" secondItem="0LW-3L-DOL" secondAttribute="trailing" id="TI5-dG-fOf"/>
                        </constraints>
                    </view>
                    <toolbarItems/>
                    <navigationItem key="navigationItem" title="WebView" id="LO3-Fn-NLm"/>
                    <simulatedToolbarMetrics key="simulatedBottomBarMetrics"/>
                    <connections>
                        <outlet property="webView" destination="0LW-3L-DOL" id="ZcG-L8-Mdc"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="FJe-Yq-33r" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="246" y="636"/>
        </scene>
        <!--Split View Controller-->
        <scene sceneID="Nki-YV-4Qg">
            <objects>
                <splitViewController storyboardIdentifier="DHSplitView" useStoryboardIdentifierAsRestorationIdentifier="YES" id="H1p-Uh-vWS" customClass="DHSplitViewController" sceneMemberID="viewController">
                    <toolbarItems/>
                    <connections>
                        <segue destination="RMx-3f-FxP" kind="relationship" relationship="masterViewController" id="BlO-5A-QYV"/>
                        <segue destination="vC3-pB-5Vb" kind="relationship" relationship="detailViewController" id="Tll-UG-LXB"/>
                    </connections>
                </splitViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="cZU-Oi-B1e" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-536.71875" y="-544.921875"/>
        </scene>
        <!--Settings-->
        <scene sceneID="PgB-42-Mhn">
            <objects>
                <tableViewController storyboardIdentifier="DHPreferences" useStoryboardIdentifierAsRestorationIdentifier="YES" id="LN4-2N-5f1" customClass="DHPreferences" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="9XA-MP-Y6T">
                        <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <sections>
                            <tableViewSection headerTitle="Download" id="5ll-Jq-5KZ">
                                <cells>
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="DHSettingsCell" textLabel="Ug3-nq-xyc" imageView="CfY-ch-rUA" style="IBUITableViewCellStyleDefault" id="r0i-wt-QAr">
                                        <rect key="frame" x="0.0" y="55.333333333333336" width="414" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="r0i-wt-QAr" id="x7u-4T-8E0">
                                            <rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Main Docsets" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Ug3-nq-xyc">
                                                    <rect key="frame" x="63" y="0.0" width="331" height="43.666666666666664"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="18"/>
                                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" image="main_repo" id="CfY-ch-rUA">
                                                    <rect key="frame" x="20" y="7" width="28" height="28"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                </imageView>
                                            </subviews>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="DHSettingsCell" textLabel="tCo-zC-KEK" imageView="mGt-fn-iWH" style="IBUITableViewCellStyleDefault" id="Il7-Fa-eRd">
                                        <rect key="frame" x="0.0" y="99.333333333333343" width="414" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Il7-Fa-eRd" id="ewh-53-hgF">
                                            <rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Cheat Sheets" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="tCo-zC-KEK">
                                                    <rect key="frame" x="63" y="0.0" width="331" height="43.666666666666664"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="18"/>
                                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" image="cheat_repo" id="mGt-fn-iWH">
                                                    <rect key="frame" x="20" y="7" width="28" height="28"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                </imageView>
                                            </subviews>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="DHSettingsCell" textLabel="g0J-MY-Gyr" imageView="6px-e6-A4A" style="IBUITableViewCellStyleDefault" id="gTK-ia-7zI">
                                        <rect key="frame" x="0.0" y="143.33333333333334" width="414" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="gTK-ia-7zI" id="3LL-D8-sfE">
                                            <rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="User Contributed Docsets" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="g0J-MY-Gyr">
                                                    <rect key="frame" x="63" y="0.0" width="331" height="43.666666666666664"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="18"/>
                                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" image="user_repo" id="6px-e6-A4A">
                                                    <rect key="frame" x="20" y="7" width="28" height="28"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                </imageView>
                                            </subviews>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                </cells>
                            </tableViewSection>
                            <tableViewSection headerTitle="Other Sources" id="geA-nh-aJW">
                                <cells>
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="DHSettingsCell" textLabel="tH7-qh-OUH" imageView="hJO-jA-eBm" style="IBUITableViewCellStyleDefault" id="sda-gL-9CQ">
                                        <rect key="frame" x="0.0" y="235.33333333333334" width="414" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="sda-gL-9CQ" id="Wp8-gy-b2o">
                                            <rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Transfer Docsets" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="tH7-qh-OUH">
                                                    <rect key="frame" x="63" y="0.0" width="331" height="43.666666666666664"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="18"/>
                                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" image="transfer_repo" id="hJO-jA-eBm">
                                                    <rect key="frame" x="20" y="7" width="28" height="28"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                </imageView>
                                            </subviews>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                </cells>
                            </tableViewSection>
                            <tableViewSection headerTitle="Settings" footerTitle="Dash will notify you when docset updates are available." id="DSC-i5-noV" userLabel="Updates Section">
                                <cells>
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="auto_updates" textLabel="L5q-QS-QhJ" style="IBUITableViewCellStyleDefault" id="NBw-o2-OgI">
                                        <rect key="frame" x="0.0" y="334.66666666666669" width="414" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="NBw-o2-OgI" id="P7F-Da-gdU">
                                            <rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Automatic Updates" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="L5q-QS-QhJ">
                                                    <rect key="frame" x="20" y="0.0" width="374" height="43.666666666666664"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="18"/>
                                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hvT-X0-nTG">
                                                    <rect key="frame" x="345" y="6" width="51" height="31"/>
                                                    <connections>
                                                        <action selector="updatesSwitchValueChanged:" destination="LN4-2N-5f1" eventType="valueChanged" id="74Q-tw-KN2"/>
                                                    </connections>
                                                </switch>
                                            </subviews>
                                            <constraints>
                                                <constraint firstItem="hvT-X0-nTG" firstAttribute="centerY" secondItem="L5q-QS-QhJ" secondAttribute="centerY" id="Znc-x7-6X4"/>
                                                <constraint firstItem="hvT-X0-nTG" firstAttribute="trailing" secondItem="L5q-QS-QhJ" secondAttribute="trailing" id="rUM-hk-XWB"/>
                                            </constraints>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                </cells>
                            </tableViewSection>
                            <tableViewSection footerTitle="Docsets will be sorted alphabetically in the docset browser." id="o2t-VJ-no4" userLabel="Alphabetizing Section">
                                <cells>
                                    <tableViewCell contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="alphabetizing" textLabel="j8z-O0-bgo" style="IBUITableViewCellStyleDefault" id="qBR-gw-pYW">
                                        <rect key="frame" x="0.0" y="418.66666666666674" width="414" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="qBR-gw-pYW" id="1cz-0u-7TA">
                                            <rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Sort Alphabetically" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="j8z-O0-bgo">
                                                    <rect key="frame" x="20" y="0.0" width="374" height="43.666666666666664"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="18"/>
                                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Wrv-Ov-oob">
                                                    <rect key="frame" x="345" y="6" width="51" height="31"/>
                                                    <connections>
                                                        <action selector="alphabetizingSwitchValueChanged:" destination="LN4-2N-5f1" eventType="valueChanged" id="uRX-cV-Fn1"/>
                                                    </connections>
                                                </switch>
                                            </subviews>
                                            <constraints>
                                                <constraint firstItem="Wrv-Ov-oob" firstAttribute="centerY" secondItem="j8z-O0-bgo" secondAttribute="centerY" id="aQw-Zc-KSP"/>
                                                <constraint firstItem="Wrv-Ov-oob" firstAttribute="trailing" secondItem="j8z-O0-bgo" secondAttribute="trailing" id="df9-KI-7WX"/>
                                            </constraints>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                </cells>
                            </tableViewSection>
                        </sections>
                        <connections>
                            <outlet property="dataSource" destination="LN4-2N-5f1" id="Efj-iq-t4A"/>
                            <outlet property="delegate" destination="LN4-2N-5f1" id="u0Q-nm-tNM"/>
                        </connections>
                    </tableView>
                    <toolbarItems>
                        <barButtonItem style="plain" systemItem="flexibleSpace" id="T2e-0d-yIN"/>
                        <barButtonItem title="Get Dash for macOS" id="2rJ-qk-tNm">
                            <connections>
                                <action selector="getDashForMacOS:" destination="LN4-2N-5f1" id="53W-TV-cwl"/>
                            </connections>
                        </barButtonItem>
                        <barButtonItem style="plain" systemItem="flexibleSpace" id="vy5-DI-Lqt"/>
                    </toolbarItems>
                    <navigationItem key="navigationItem" title="Settings" id="OIB-dx-J0z">
                        <barButtonItem key="leftBarButtonItem" style="done" systemItem="done" id="Fip-DI-Smg">
                            <connections>
                                <action selector="dismissModal:" destination="LN4-2N-5f1" id="KMc-0W-FPt"/>
                            </connections>
                        </barButtonItem>
                    </navigationItem>
                    <simulatedToolbarMetrics key="simulatedBottomBarMetrics"/>
                    <connections>
                        <outlet property="alphabetizingCell" destination="qBR-gw-pYW" id="2ud-R6-qlJ"/>
                        <outlet property="alphabetizingSwitch" destination="Wrv-Ov-oob" id="xXQ-YN-OMD"/>
                        <outlet property="updatesCell" destination="NBw-o2-OgI" id="jen-wa-vKn"/>
                        <outlet property="updatesSwitch" destination="hvT-X0-nTG" id="uqh-Ew-FYx"/>
                        <segue destination="bVq-xA-3wd" kind="push" identifier="DHDocsetDownloaderToDetailSegue" splitViewControllerTargetIndex="1" id="078-Zd-cbO"/>
                        <segue destination="KZf-iV-yPx" kind="push" identifier="DHDocsetTransferrerToMasterSegue" splitViewControllerTargetIndex="0" id="vh9-ti-qTq"/>
                        <segue destination="KZf-iV-yPx" kind="push" identifier="DHDocsetTransferrerToDetailSegue" splitViewControllerTargetIndex="1" id="jto-ap-CAv"/>
                        <segue destination="bVq-xA-3wd" kind="push" identifier="DHDocsetDownloaderToMasterSegue" splitViewControllerTargetIndex="0" id="tZ0-kY-m9B"/>
                        <segue destination="7Pl-oD-WzV" kind="push" identifier="DHUserRepoToDetailSegue" splitViewControllerTargetIndex="1" id="UMU-KR-a0h"/>
                        <segue destination="7Pl-oD-WzV" kind="push" identifier="DHUserRepoToMasterSegue" splitViewControllerTargetIndex="0" id="BNM-LK-jE2"/>
                        <segue destination="bSe-FO-aTh" kind="push" identifier="DHCheatRepoToDetailSegue" splitViewControllerTargetIndex="1" id="oW0-T5-9L9"/>
                        <segue destination="bSe-FO-aTh" kind="push" identifier="DHCheatRepoToMasterSegue" splitViewControllerTargetIndex="0" id="z3k-ky-jyi"/>
                    </connections>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="fmo-gt-gw4" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="1586" y="-1657"/>
        </scene>
        <!--Docset Browser-->
        <scene sceneID="smW-Zh-WAh">
            <objects>
                <tableViewController storyboardIdentifier="DHDocsetsBrowser" title="Docset Browser" useStoryboardIdentifierAsRestorationIdentifier="YES" clearsSelectionOnViewWillAppear="NO" id="7bK-jq-Zjz" customClass="DHDocsetBrowser" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" restorationIdentifier="DHDocsetsBrowserTableView" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="r7i-6Z-zg0" customClass="DHBrowserTableView">
                        <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <searchBar key="tableHeaderView" contentMode="redraw" restorationIdentifier="DocsetsSearchBar" id="VJZ-Lp-FAA">
                            <rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
                            <textInputTraits key="textInputTraits" autocorrectionType="no" spellCheckingType="no"/>
                            <connections>
                                <outlet property="delegate" destination="7bK-jq-Zjz" id="dJ4-gv-uRt"/>
                            </connections>
                        </searchBar>
                        <prototypes>
                            <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="BLABLA" id="H2Y-Rn-XFZ">
                                <rect key="frame" x="0.0" y="66" width="414" height="44"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="H2Y-Rn-XFZ" id="kux-Q3-Ab3">
                                    <rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/>
                                    <autoresizingMask key="autoresizingMask"/>
                                </tableViewCellContentView>
                            </tableViewCell>
                        </prototypes>
                        <sections/>
                        <connections>
                            <outlet property="dataSource" destination="7bK-jq-Zjz" id="Gho-Na-rnu"/>
                            <outlet property="delegate" destination="7bK-jq-Zjz" id="RA6-mI-bju"/>
                        </connections>
                    </tableView>
                    <navigationItem key="navigationItem" title="Docsets" id="Zdf-7t-Un8">
                        <barButtonItem key="leftBarButtonItem" title="Settings" id="UFq-dX-jiF">
                            <connections>
                                <action selector="openSettings:" destination="7bK-jq-Zjz" id="q2C-N5-b8Q"/>
                            </connections>
                        </barButtonItem>
                    </navigationItem>
                    <connections>
                        <outlet property="searchDisplayController" destination="4Nc-re-3YX" id="d5C-Zk-9Cy"/>
                        <segue destination="LN4-2N-5f1" kind="show" identifier="DHOpenSettingsSegue" id="4LN-qs-RRA"/>
                        <segue destination="bVq-xA-3wd" kind="push" identifier="DHDocsetDownloaderToDetailSegue" splitViewControllerTargetIndex="1" id="BAb-G2-tNG"/>
                        <segue destination="MG8-DW-Fv2" kind="show" identifier="DHTypeBrowserSegue" id="Ocj-J9-g6q"/>
                        <segue destination="On6-fK-Wo0" kind="show" identifier="DHNestedSegue" id="Zvp-4Y-BjQ"/>
                        <segue destination="fAU-6P-OeP" kind="show" identifier="DHRemoteBrowserSegue" id="bdX-NV-KLl"/>
                        <segue destination="JEX-9P-axG" kind="push" identifier="DHSearchWebViewSegue" id="iku-X1-02v"/>
                    </connections>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="Rux-fX-hf1" sceneMemberID="firstResponder"/>
                <searchDisplayController id="4Nc-re-3YX" customClass="DHSearchDisplayController">
                    <connections>
                        <outlet property="delegate" destination="7bK-jq-Zjz" id="t43-uI-qHE"/>
                        <outlet property="searchBar" destination="VJZ-Lp-FAA" id="sUn-GY-TJA"/>
                        <outlet property="searchContentsController" destination="7bK-jq-Zjz" id="FYG-uq-SSP"/>
                        <outlet property="searchResultsDataSource" destination="7bK-jq-Zjz" id="58Z-1R-yn6"/>
                        <outlet property="searchResultsDelegate" destination="7bK-jq-Zjz" id="Yap-xw-oMZ"/>
                    </connections>
                </searchDisplayController>
            </objects>
            <point key="canvasLocation" x="918" y="-545"/>
        </scene>
        <!--Type Browser-->
        <scene sceneID="0HO-gO-dJg">
            <objects>
                <tableViewController storyboardIdentifier="DHTypesBrowser" title="Type Browser" useStoryboardIdentifierAsRestorationIdentifier="YES" id="MG8-DW-Fv2" customClass="DHTypeBrowser" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" restorationIdentifier="DHTypesBrowserTableView" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="XY4-1C-CBf">
                        <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <searchBar key="tableHeaderView" contentMode="redraw" id="VJR-eZ-B8V">
                            <rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
                            <textInputTraits key="textInputTraits" autocorrectionType="no" spellCheckingType="no"/>
                            <connections>
                                <outlet property="delegate" destination="MG8-DW-Fv2" id="4dd-ej-3oY"/>
                            </connections>
                        </searchBar>
                        <prototypes>
                            <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="BLABLA" id="VA8-am-q6Z">
                                <rect key="frame" x="0.0" y="66" width="414" height="44"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="VA8-am-q6Z" id="nIL-hj-vFk">
                                    <rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/>
                                    <autoresizingMask key="autoresizingMask"/>
                                </tableViewCellContentView>
                            </tableViewCell>
                        </prototypes>
                        <connections>
                            <outlet property="dataSource" destination="MG8-DW-Fv2" id="9mk-Iz-bpP"/>
                            <outlet property="delegate" destination="MG8-DW-Fv2" id="Nn0-Nk-gye"/>
                        </connections>
                    </tableView>
                    <navigationItem key="navigationItem" title="Types" id="1DN-dq-KAm"/>
                    <connections>
                        <outlet property="searchDisplayController" destination="QXT-TT-18q" id="Ffp-2g-pgc"/>
                        <segue destination="9Rs-Yt-R1b" kind="show" identifier="DHEntryBrowserSegue" id="FUX-Tg-BvC"/>
                        <segue destination="On6-fK-Wo0" kind="show" identifier="DHNestedSegue" id="ljv-Qq-slv"/>
                        <segue destination="JEX-9P-axG" kind="push" identifier="DHSearchWebViewSegue" id="l26-aC-Nx3"/>
                        <segue destination="JEX-9P-axG" kind="push" identifier="DHShowIndexPageSegue" id="5fr-qx-aky"/>
                    </connections>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="l8s-68-JtL" userLabel="First Responder" sceneMemberID="firstResponder"/>
                <searchDisplayController id="QXT-TT-18q" customClass="DHSearchDisplayController">
                    <connections>
                        <outlet property="delegate" destination="MG8-DW-Fv2" id="NhR-F4-gaX"/>
                        <outlet property="searchBar" destination="VJR-eZ-B8V" id="ZoK-EI-6Xc"/>
                        <outlet property="searchContentsController" destination="MG8-DW-Fv2" id="59w-BX-ea7"/>
                        <outlet property="searchResultsDataSource" destination="MG8-DW-Fv2" id="SJ6-b1-uYr"/>
                        <outlet property="searchResultsDelegate" destination="MG8-DW-Fv2" id="kPV-0H-TmG"/>
                    </connections>
                </searchDisplayController>
            </objects>
            <point key="canvasLocation" x="1743" y="-451"/>
        </scene>
        <!--Entry Browser-->
        <scene sceneID="hsl-sd-m15">
            <objects>
                <tableViewController storyboardIdentifier="DHEntriesBrowser" title="Type Browser" useStoryboardIdentifierAsRestorationIdentifier="YES" id="9Rs-Yt-R1b" userLabel="Entry Browser" customClass="DHEntryBrowser" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" restorationIdentifier="DHEntriesBrowserTableView" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="wwv-Id-rNo">
                        <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <searchBar key="tableHeaderView" contentMode="redraw" restorationIdentifier="EntriesSearchBar" id="ar1-R2-LNh">
                            <rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
                            <textInputTraits key="textInputTraits" autocorrectionType="no" spellCheckingType="no"/>
                            <connections>
                                <outlet property="delegate" destination="9Rs-Yt-R1b" id="dCU-Oq-KCt"/>
                            </connections>
                        </searchBar>
                        <prototypes>
                            <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="BLABLA" id="gr3-qP-hfk">
                                <rect key="frame" x="0.0" y="66" width="414" height="44"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="gr3-qP-hfk" id="HWD-2S-7F9">
                                    <rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/>
                                    <autoresizingMask key="autoresizingMask"/>
                                </tableViewCellContentView>
                            </tableViewCell>
                        </prototypes>
                        <connections>
                            <outlet property="dataSource" destination="9Rs-Yt-R1b" id="6dg-AY-vP5"/>
                            <outlet property="delegate" destination="9Rs-Yt-R1b" id="nix-zh-9ZC"/>
                        </connections>
                    </tableView>
                    <navigationItem key="navigationItem" title="Entries" id="Un0-xc-bRD"/>
                    <connections>
                        <outlet property="searchDisplayController" destination="zcF-qB-4QT" id="cms-mv-pRf"/>
                        <segue destination="On6-fK-Wo0" kind="show" identifier="DHNestedSegue" id="y34-0z-6ul"/>
                        <segue destination="JEX-9P-axG" kind="push" identifier="DHSearchWebViewSegue" id="hEp-xK-Brz"/>
                        <segue destination="JEX-9P-axG" kind="push" identifier="DHWebViewSegue" id="Vt3-tf-TGA"/>
                    </connections>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="KwV-Su-f2V" userLabel="First Responder" sceneMemberID="firstResponder"/>
                <searchDisplayController id="zcF-qB-4QT" customClass="DHSearchDisplayController">
                    <connections>
                        <outlet property="delegate" destination="9Rs-Yt-R1b" id="PES-ZY-NqP"/>
                        <outlet property="searchBar" destination="ar1-R2-LNh" id="Yvm-7w-6oa"/>
                        <outlet property="searchContentsController" destination="9Rs-Yt-R1b" id="8Ws-Jg-PC2"/>
                        <outlet property="searchResultsDataSource" destination="9Rs-Yt-R1b" id="eHe-KB-xvu"/>
                        <outlet property="searchResultsDelegate" destination="9Rs-Yt-R1b" id="jRI-Em-gu9"/>
                    </connections>
                </searchDisplayController>
            </objects>
            <point key="canvasLocation" x="2556" y="-470"/>
        </scene>
        <!--Remote Browser-->
        <scene sceneID="gnf-QR-1ra">
            <objects>
                <tableViewController storyboardIdentifier="DHRemoteBrowser" title="Remote Browser" useStoryboardIdentifierAsRestorationIdentifier="YES" id="fAU-6P-OeP" customClass="DHRemoteBrowser" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" restorationIdentifier="DHEntriesBrowserTableView" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="GI0-k2-aY7">
                        <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <prototypes>
                            <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="BLABLA" id="geM-gl-w4a">
                                <rect key="frame" x="0.0" y="22" width="414" height="44"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="geM-gl-w4a" id="dRi-kM-G9B">
                                    <rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/>
                                    <autoresizingMask key="autoresizingMask"/>
                                </tableViewCellContentView>
                            </tableViewCell>
                        </prototypes>
                        <connections>
                            <outlet property="dataSource" destination="fAU-6P-OeP" id="NIx-So-K1H"/>
                            <outlet property="delegate" destination="fAU-6P-OeP" id="bP7-1o-Pks"/>
                        </connections>
                    </tableView>
                    <navigationItem key="navigationItem" title="Remotes" id="q55-40-w46"/>
                    <connections>
                        <outlet property="searchDisplayController" destination="zcF-qB-4QT" id="Vgn-AA-Bhw"/>
                        <segue destination="On6-fK-Wo0" kind="show" identifier="DHNestedSegue" id="cEQ-Zo-INv"/>
                        <segue destination="JEX-9P-axG" kind="push" identifier="DHSearchWebViewSegue" id="q6b-SO-d4X"/>
                    </connections>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="fUb-q5-H6p" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="1383" y="353"/>
        </scene>
        <!--Main Docsets-->
        <scene sceneID="j1n-HE-PZF">
            <objects>
                <tableViewController storyboardIdentifier="DHDocsetDownloader" modalPresentationStyle="currentContext" useStoryboardIdentifierAsRestorationIdentifier="YES" id="bVq-xA-3wd" customClass="DHDocsetDownloader" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" restorationIdentifier="DHDocsetsDownloaderTableView" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" allowsSelection="NO" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="Ktb-IW-SX0">
                        <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <searchBar key="tableHeaderView" contentMode="redraw" restorationIdentifier="DownloadSearchBar" placeholder="Find docsets to download" id="ibw-RZ-LKe">
                            <rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
                            <textInputTraits key="textInputTraits" autocorrectionType="no" spellCheckingType="no"/>
                            <connections>
                                <outlet property="delegate" destination="bVq-xA-3wd" id="Ihj-hM-GF4"/>
                            </connections>
                        </searchBar>
                        <connections>
                            <outlet property="dataSource" destination="bVq-xA-3wd" id="nTB-cw-YaL"/>
                            <outlet property="delegate" destination="bVq-xA-3wd" id="kNS-Ag-j4A"/>
                        </connections>
                    </tableView>
                    <navigationItem key="navigationItem" title="Main Docsets" id="9ic-mO-5WP">
                        <barButtonItem key="rightBarButtonItem" title="Update" id="rwQ-iw-bgR">
                            <connections>
                                <action selector="updateButtonPressed:" destination="bVq-xA-3wd" id="KBw-7q-bpx"/>
                            </connections>
                        </barButtonItem>
                    </navigationItem>
                    <nil key="simulatedBottomBarMetrics"/>
                    <connections>
                        <outlet property="searchBar" destination="ibw-RZ-LKe" id="Q52-Do-Tr4"/>
                        <outlet property="searchDisplayController" destination="PMB-N5-wGr" id="pz9-mU-T4r"/>
                    </connections>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="0xz-hu-dUi" userLabel="First Responder" sceneMemberID="firstResponder"/>
                <searchDisplayController id="PMB-N5-wGr">
                    <connections>
                        <outlet property="delegate" destination="bVq-xA-3wd" id="xQ2-19-HTr"/>
                        <outlet property="searchBar" destination="ibw-RZ-LKe" id="N2f-yf-RkE"/>
                        <outlet property="searchContentsController" destination="bVq-xA-3wd" id="lUZ-i4-ck1"/>
                        <outlet property="searchResultsDataSource" destination="bVq-xA-3wd" id="SiM-kY-Q8J"/>
                        <outlet property="searchResultsDelegate" destination="bVq-xA-3wd" id="wdp-p8-Zh2"/>
                    </connections>
                </searchDisplayController>
            </objects>
            <point key="canvasLocation" x="2445" y="-3288"/>
        </scene>
        <!--User Contributed Docsets-->
        <scene sceneID="okr-5a-bHb">
            <objects>
                <tableViewController storyboardIdentifier="DHUserRepo" modalPresentationStyle="currentContext" useStoryboardIdentifierAsRestorationIdentifier="YES" id="7Pl-oD-WzV" userLabel="User Contributed Docsets" customClass="DHUserRepo" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" restorationIdentifier="DHUserRepoTableView" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" allowsSelection="NO" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="o2K-Hn-pqx">
                        <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <searchBar key="tableHeaderView" contentMode="redraw" restorationIdentifier="UserRepoSearchBar" placeholder="Find docsets to download" id="frS-D7-CD1">
                            <rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
                            <textInputTraits key="textInputTraits" autocorrectionType="no" spellCheckingType="no"/>
                            <connections>
                                <outlet property="delegate" destination="7Pl-oD-WzV" id="G9T-Rt-21p"/>
                            </connections>
                        </searchBar>
                        <connections>
                            <outlet property="dataSource" destination="7Pl-oD-WzV" id="VGy-Sm-bWh"/>
                            <outlet property="delegate" destination="7Pl-oD-WzV" id="PBv-CB-bY0"/>
                        </connections>
                    </tableView>
                    <navigationItem key="navigationItem" title="User Contributed Docsets" id="7o6-m1-emM">
                        <barButtonItem key="rightBarButtonItem" title="Update" id="nLQ-uE-WPX">
                            <connections>
                                <action selector="updateButtonPressed:" destination="7Pl-oD-WzV" id="Ix3-Ob-twG"/>
                            </connections>
                        </barButtonItem>
                    </navigationItem>
                    <nil key="simulatedBottomBarMetrics"/>
                    <connections>
                        <outlet property="searchBar" destination="frS-D7-CD1" id="faI-Fs-5RH"/>
                        <outlet property="searchDisplayController" destination="PMB-N5-wGr" id="UiB-JZ-mBV"/>
                    </connections>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="DbY-qO-Frw" userLabel="First Responder" sceneMemberID="firstResponder"/>
                <searchDisplayController id="NDK-Ah-hu2">
                    <connections>
                        <outlet property="delegate" destination="7Pl-oD-WzV" id="8Tv-80-sIu"/>
                        <outlet property="searchBar" destination="frS-D7-CD1" id="L4k-b0-GNj"/>
                        <outlet property="searchContentsController" destination="7Pl-oD-WzV" id="3mr-yZ-Dez"/>
                        <outlet property="searchResultsDataSource" destination="7Pl-oD-WzV" id="dNb-KO-I0W"/>
                        <outlet property="searchResultsDelegate" destination="7Pl-oD-WzV" id="hEh-mv-02t"/>
                    </connections>
                </searchDisplayController>
            </objects>
            <point key="canvasLocation" x="2445" y="-2618"/>
        </scene>
        <!--Transfer Docsets-->
        <scene sceneID="dSW-F9-RBB">
            <objects>
                <tableViewController storyboardIdentifier="DHDocsetTransferrer" modalPresentationStyle="currentContext" useStoryboardIdentifierAsRestorationIdentifier="YES" id="KZf-iV-yPx" customClass="DHDocsetTransferrer" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" restorationIdentifier="DHTransferDocsetsTableView" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" allowsSelection="NO" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="RlC-hy-GCI">
                        <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <connections>
                            <outlet property="dataSource" destination="KZf-iV-yPx" id="ICT-G5-j4u"/>
                            <outlet property="delegate" destination="KZf-iV-yPx" id="4Gd-H2-3Ta"/>
                        </connections>
                    </tableView>
                    <navigationItem key="navigationItem" title="Transfer Docsets" id="w85-3G-Wi2">
                        <barButtonItem key="rightBarButtonItem" title="Refresh" id="g6k-h1-fQg">
                            <connections>
                                <action selector="refreshFeeds:" destination="KZf-iV-yPx" id="seQ-0r-Kic"/>
                            </connections>
                        </barButtonItem>
                    </navigationItem>
                    <nil key="simulatedBottomBarMetrics"/>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="Ar8-em-khk" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="2468" y="-1204"/>
        </scene>
        <!--Navigation Controller-->
        <scene sceneID="r7l-gg-dq7">
            <objects>
                <navigationController storyboardIdentifier="DHWebViewNavigationController" useStoryboardIdentifierAsRestorationIdentifier="YES" id="vC3-pB-5Vb" customClass="DHNavigationController" sceneMemberID="viewController">
                    <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" misplaced="YES" id="DjV-YW-jjY">
                        <rect key="frame" x="0.0" y="20" width="414" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <connections>
                        <segue destination="JEX-9P-axG" kind="relationship" relationship="rootViewController" id="GKi-kA-LjT"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="SLD-UC-DBI" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-539.453125" y="588.28125"/>
        </scene>
        <!--ToC Browser-->
        <scene sceneID="krs-xc-y3h">
            <objects>
                <tableViewController storyboardIdentifier="DHTocBrowser" title="Table of Contents" clearsSelectionOnViewWillAppear="NO" id="Wkz-GU-NNB" userLabel="ToC Browser" customClass="DHTocBrowser" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" restorationIdentifier="DHTocBrowserTableView" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="us7-S7-Voe">
                        <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <searchBar key="tableHeaderView" contentMode="redraw" id="Lzc-4G-LSC">
                            <rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
                            <rect key="contentStretch" x="0.0" y="0.0" width="0.0" height="0.0"/>
                            <textInputTraits key="textInputTraits" autocorrectionType="no" spellCheckingType="no"/>
                            <connections>
                                <outlet property="delegate" destination="Wkz-GU-NNB" id="08o-8I-7Be"/>
                            </connections>
                        </searchBar>
                        <prototypes>
                            <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="BLABLA" id="uat-DW-uld">
                                <rect key="frame" x="0.0" y="66" width="414" height="44"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="uat-DW-uld" id="B7g-3q-qBW">
                                    <rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/>
                                    <autoresizingMask key="autoresizingMask"/>
                                </tableViewCellContentView>
                            </tableViewCell>
                        </prototypes>
                        <connections>
                            <outlet property="dataSource" destination="Wkz-GU-NNB" id="b4q-De-aK8"/>
                            <outlet property="delegate" destination="Wkz-GU-NNB" id="Zcd-Yw-Zcp"/>
                        </connections>
                    </tableView>
                    <toolbarItems/>
                    <navigationItem key="navigationItem" title="Table of Contents" id="zNW-Es-vkB">
                        <barButtonItem key="rightBarButtonItem" style="done" systemItem="done" id="g7R-rT-w04">
                            <connections>
                                <action selector="dismissModal:" destination="Wkz-GU-NNB" id="u7Z-XE-Bwx"/>
                            </connections>
                        </barButtonItem>
                    </navigationItem>
                    <simulatedToolbarMetrics key="simulatedBottomBarMetrics"/>
                    <connections>
                        <outlet property="searchBar" destination="Lzc-4G-LSC" id="kW7-uu-5Rf"/>
                        <outlet property="searchDisplayController" destination="QXT-TT-18q" id="hDw-2l-hBA"/>
                    </connections>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="1fg-gS-VxA" userLabel="First Responder" sceneMemberID="firstResponder"/>
                <searchDisplayController id="8u3-sF-Owm" customClass="DHSearchDisplayController">
                    <connections>
                        <outlet property="delegate" destination="Wkz-GU-NNB" id="kvD-zX-wpP"/>
                        <outlet property="searchBar" destination="Lzc-4G-LSC" id="fNw-gA-Vhh"/>
                        <outlet property="searchContentsController" destination="Wkz-GU-NNB" id="8fa-tp-JZ0"/>
                        <outlet property="searchResultsDataSource" destination="Wkz-GU-NNB" id="ga5-o2-6Ts"/>
                        <outlet property="searchResultsDelegate" destination="Wkz-GU-NNB" id="M5n-z4-w4w"/>
                    </connections>
                </searchDisplayController>
            </objects>
            <point key="canvasLocation" x="1999" y="1202"/>
        </scene>
        <!--Navigation Controller-->
        <scene sceneID="lHw-UH-CNc">
            <objects>
                <navigationController storyboardIdentifier="DHTocBrowserNavigationController" automaticallyAdjustsScrollViewInsets="NO" id="pJz-3h-N98" customClass="DHNavigationController" sceneMemberID="viewController">
                    <toolbarItems/>
                    <navigationBar key="navigationBar" contentMode="scaleToFill" misplaced="YES" id="U01-gx-C7H">
                        <rect key="frame" x="0.0" y="20" width="414" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <nil name="viewControllers"/>
                    <connections>
                        <segue destination="Wkz-GU-NNB" kind="relationship" relationship="rootViewController" id="3ME-RF-aVw"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="QwS-fp-JCr" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="1177" y="1202"/>
        </scene>
        <!--Cheat Sheets-->
        <scene sceneID="kGo-MS-1Iv">
            <objects>
                <tableViewController storyboardIdentifier="DHCheatRepo" modalPresentationStyle="currentContext" useStoryboardIdentifierAsRestorationIdentifier="YES" id="bSe-FO-aTh" userLabel="Cheat Sheets" customClass="DHCheatRepo" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" restorationIdentifier="DHCheatRepoTableView" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" allowsSelection="NO" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="9Wm-HT-qeH">
                        <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <searchBar key="tableHeaderView" contentMode="redraw" restorationIdentifier="CheatRepoSearchBar" placeholder="Find cheat sheets to download" id="0Tx-yl-ZpH">
                            <rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
                            <textInputTraits key="textInputTraits" autocorrectionType="no" spellCheckingType="no"/>
                            <connections>
                                <outlet property="delegate" destination="bSe-FO-aTh" id="tFS-Ty-amy"/>
                            </connections>
                        </searchBar>
                        <connections>
                            <outlet property="dataSource" destination="bSe-FO-aTh" id="ZXy-xZ-NcM"/>
                            <outlet property="delegate" destination="bSe-FO-aTh" id="hUe-NY-iYK"/>
                        </connections>
                    </tableView>
                    <navigationItem key="navigationItem" title="Cheat Sheets" id="EeG-gR-3NH" userLabel="Cheat Sheets">
                        <barButtonItem key="rightBarButtonItem" title="Update" id="20V-ZH-ehJ">
                            <connections>
                                <action selector="updateButtonPressed:" destination="bSe-FO-aTh" id="OHn-dd-osM"/>
                            </connections>
                        </barButtonItem>
                    </navigationItem>
                    <nil key="simulatedBottomBarMetrics"/>
                    <connections>
                        <outlet property="searchBar" destination="0Tx-yl-ZpH" id="pnt-J4-9nb"/>
                        <outlet property="searchDisplayController" destination="PMB-N5-wGr" id="SJx-7j-3jo"/>
                    </connections>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="lpb-DD-g0c" userLabel="First Responder" sceneMemberID="firstResponder"/>
                <searchDisplayController id="gvn-dN-aaF">
                    <connections>
                        <outlet property="delegate" destination="bSe-FO-aTh" id="tNi-fL-tpC"/>
                        <outlet property="searchBar" destination="0Tx-yl-ZpH" id="0qn-rZ-zFT"/>
                        <outlet property="searchContentsController" destination="bSe-FO-aTh" id="q2m-lz-cUb"/>
                        <outlet property="searchResultsDataSource" destination="bSe-FO-aTh" id="FR4-Tz-wfo"/>
                        <outlet property="searchResultsDelegate" destination="bSe-FO-aTh" id="PLW-Zm-zsW"/>
                    </connections>
                </searchDisplayController>
            </objects>
            <point key="canvasLocation" x="2445" y="-1928"/>
        </scene>
    </scenes>
    <resources>
        <image name="cheat_repo" width="28" height="28"/>
        <image name="main_repo" width="28" height="28"/>
        <image name="transfer_repo" width="28" height="28"/>
        <image name="user_repo" width="28" height="28"/>
    </resources>
    <inferredMetricsTieBreakers>
        <segue reference="z3k-ky-jyi"/>
        <segue reference="vh9-ti-qTq"/>
        <segue reference="UMU-KR-a0h"/>
        <segue reference="tZ0-kY-m9B"/>
        <segue reference="GKi-kA-LjT"/>
        <segue reference="ljv-Qq-slv"/>
    </inferredMetricsTieBreakers>
</document>


================================================
FILE: Dash/DHAppDelegate.h
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import <UIKit/UIKit.h>
#import "DHWindow.h"

@interface DHAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) DHWindow *_window;
@property (strong) NSTimer *clipboardChangedTimer;

+ (DHAppDelegate *)sharedDelegate;
+ (UIStoryboard *)mainStoryboard;

@end


================================================
FILE: Dash/DHAppDelegate.m
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import "DHAppDelegate.h"
#import "DHDocsetDownloader.h"
#import "DHUserRepo.h"
#import "DHCheatRepo.h"
#import "DHDocsetTransferrer.h"
#import "DHDocsetManager.h"
#import "DHTarixProtocol.h"
#import "DHBlockProtocol.h"
#import "DHAppleAPIProtocol.h"
#import "DHCSS.h"
#import "DHWebViewController.h"
#import "DHAppUpdateChecker.h"
#import "DHDocsetBrowser.h"
#ifdef APP_STORE
#import <HockeySDK/HockeySDK.h>
#endif
#import "DHRemoteServer.h"
#import "DHRemoteProtocol.h"

@implementation DHAppDelegate

+ (DHAppDelegate *)sharedDelegate
{
    return (id)[[UIApplication sharedApplication] delegate];
}

+ (UIStoryboard *)mainStoryboard
{
    return [self sharedDelegate].window.rootViewController.storyboard;
}

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self setDoNotBackUp]; // this needs to be first because it deletes the preferences after a backup restore
    NSLog(@"Home Path: %@", homePath);
    [self.window makeKeyAndVisible];
    
    NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    if(cacheDir)
    {
        [[NSFileManager defaultManager] removeItemAtPath:[cacheDir stringByAppendingPathComponent:@"com.apple.nsurlsessiond/Downloads"] error:nil];
    }
    
#ifdef APP_STORE
#ifndef DEBUG
    [[BITHockeyManager sharedHockeyManager] configureWithIdentifier:@"40091a11e4b749fcb7808992057b165a"];
    [[BITHockeyManager sharedHockeyManager].crashManager setCrashManagerStatus:BITCrashManagerStatusAutoSend];
    [[BITHockeyManager sharedHockeyManager] startManager];
    [[BITHockeyManager sharedHockeyManager].authenticator authenticateInstallation];
#endif
#endif
    
#ifdef DEBUG
    [self checkCommitHashes];
#endif
//    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Mozilla/5.0 (iPhone; CPU iPhone OS 10_10 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B411 Xcode/6.1.0", @"UserAgent", nil];
//    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
    
//    NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);

    NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:4*1024*1024 diskCapacity:32*1024*1024 diskPath:@"dh_nsurlcache"];
    [sharedCache removeAllCachedResponses];
    [NSURLCache setSharedURLCache:sharedCache];
    [NSURLProtocol registerClass:[DHTarixProtocol class]];
    [NSURLProtocol registerClass:[DHAppleAPIProtocol class]];
    [NSURLProtocol registerClass:[DHRemoteProtocol class]];
    [NSURLProtocol registerClass:[DHBlockProtocol class]];
    [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];
    [DHDocset stepLock];
    [DHDocsetManager sharedManager];
    [DHCSS sharedCSS];
    [DHDBResultSorter sharedSorter];
    [DHDBNestedResultSorter sharedSorter];
//    self.window.tintColor = [UIColor purpleColor];
    [DHDocsetDownloader sharedDownloader];
    [DHDocsetTransferrer sharedTransferrer];
    [DHUserRepo sharedUserRepo];
    [DHCheatRepo sharedCheatRepo];
    [DHRemoteServer sharedServer];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(clipboardChanged:) name:UIPasteboardChangedNotification object:nil];
    return YES;
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UITextField *lagFreeField = [[UITextField alloc] init];
    [self.window addSubview:lagFreeField];
    [lagFreeField becomeFirstResponder];
    [lagFreeField resignFirstResponder];
    [lagFreeField setHidden:YES];
    return YES;
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)actualURL sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if([[actualURL absoluteString] hasCaseInsensitivePrefix:@"dash://"] || [[actualURL absoluteString] hasCaseInsensitivePrefix:@"dash-plugin://"])
    {
        [[NSNotificationCenter defaultCenter] postNotificationName:DHPrepareForURLSearch object:nil];
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [[NSNotificationCenter defaultCenter] postNotificationName:DHPerformURLSearch object:[actualURL absoluteString]];
        });
    }
    else if([[actualURL pathExtension] isCaseInsensitiveEqual:@"docset"])
    {
        NSError *error;
        NSString *fileName = [actualURL lastPathComponent];
        NSURL *copyToURL = [[NSURL fileURLWithPath:transfersPath] URLByAppendingPathComponent:fileName isDirectory:NO];
        [[NSFileManager defaultManager] removeItemAtPath:copyToURL.path error:nil];
        [[NSFileManager defaultManager] moveItemAtURL:actualURL toURL:copyToURL error:&error];
        NSString *title;
        NSString *message;
        if(error)
        {
            title = @"Import Failed";
            message = @"Could not import the docset. Please try again!";
            NSLog(@"%@", error.localizedDescription);
        }
        else
        {
            title = @"Import Successful";
            message = @"You can find the docset in Settings, under the Transfer Docsets section.";
            NSLog(@"Docset successfully imported");
        }
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle: UIAlertControllerStyleAlert];
        [alert addAction:[UIAlertAction actionWithTitle:@"Okay" style:UIAlertActionStyleDefault handler:nil]];
        [[self topViewController] presentViewController:alert animated:YES completion:nil];
    }
    return YES;
}

- (UINavigationController *)navigationController
{
    if([self.window.rootViewController isKindOfClass:[UINavigationController class]])
    {
        return (UINavigationController*)self.window.rootViewController;
    }
    return self.window.rootViewController.navigationController;
}

- (void)applicationWillResignActive:(UIApplication *)application
{
    [[NSUserDefaults standardUserDefaults] synchronize];
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[NSUserDefaults standardUserDefaults] synchronize];
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{

}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if(![[DHAppUpdateChecker sharedUpdateChecker] alertIfUpdatesAreScheduled])
    {
        [[DHAppUpdateChecker sharedUpdateChecker] backgroundCheckForUpdatesIfNeeded];
        if(![[DHDocsetDownloader sharedDownloader] alertIfUpdatesAreScheduled])
        {
            [[DHDocsetDownloader sharedDownloader] backgroundCheckForUpdatesIfNeeded];
            if(![[DHUserRepo sharedUserRepo] alertIfUpdatesAreScheduled])
            {
                [[DHUserRepo sharedUserRepo] backgroundCheckForUpdatesIfNeeded];
                if(![[DHCheatRepo sharedCheatRepo] alertIfUpdatesAreScheduled])
                {
                    [[DHCheatRepo sharedCheatRepo] backgroundCheckForUpdatesIfNeeded];
                }
            }
        }
    }
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
    [[NSURLCache sharedURLCache] removeAllCachedResponses];
    NSLog(@"did receive memory warning");
}

- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)(void))completionHandler
{
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        completionHandler();
    }];
}

#pragma mark - UIStateRestoration

- (BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder {
    return YES;
}

- (BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder {
    return YES;
}

- (void)setDoNotBackUp
{
    NSString *path = [homePath stringByAppendingPathComponent:@"Docsets"];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if(![fileManager fileExistsAtPath:path])
    {
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        for(NSString *key in @[@"DHDocsetDownloaderScheduledUpdate", @"DHDocsetDownloader", @"DHDocsetTransferrer", @"docsets"])
        {
            [defaults removeObjectForKey:key];
        }
        [fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
    }
    NSURL *url = [NSURL fileURLWithPath:path];
    [url setResourceValue:@YES forKey: NSURLIsExcludedFromBackupKey error:nil];
}

- (void)clipboardChanged:(NSNotification*)notification
{
    NSString *string = [UIPasteboard generalPasteboard].string;
    if(string && string.length && [DHRemoteServer sharedServer].connectedRemote)
    {
        self.clipboardChangedTimer = [self.clipboardChangedTimer invalidateTimer];
        self.clipboardChangedTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 block:^{
            [[DHRemoteServer sharedServer] sendObject:@{@"string": string} forRequestName:@"syncClipboard" encrypted:YES toMacName:[DHRemoteServer sharedServer].connectedRemote.name];
        } repeats:NO];
    }
}

- (void)checkCommitHashes
{
    NSDictionary *hashes = @{@"DHDBSearcher": @"31900da1",
                             @"DHDBResult": @"31900da1",
                             @"DHDBUnifiedResult": @"31900da1",
                             @"DHQueuedDB": @"31900da1",
                             @"DHUnifiedQueuedDB": @"31900da1",
                             @"DHDBUnifiedOperation": @"31900da1",
                             @"DHWebViewController": @"da4e9df6",
                             @"DHWebPreferences": @"6896e837",
                             @"DHDocsetDownloader": @"3efbf5e6",
                             @"PlatformIcons": @"31900da1",
                             @"DHTypes": @"062c6b03",
                             @"Types": @"062c6b03",
                             @"CSS": @"7be5591d",
                             };
    [hashes enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        NSString *plistHash = [[NSBundle mainBundle] infoDictionary][[key stringByAppendingString:@"Commit"]];
        if(![plistHash isEqualToString:@"not set"] && ![plistHash isEqualToString:obj])
        {
            NSLog(@"Wrong git hash %@ for %@. Maybe you forgot to sync something or update this list?", plistHash, key);
        }
    }];
}

- (DHWindow *)window
{
    if(self._window)
    {
        return self._window;
    }
    self._window = [[DHWindow alloc] init];
    return self._window;
}

- (UIViewController *)topViewController
{
    return [self topViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
}

- (UIViewController *)topViewController:(UIViewController *)rootViewController
{
    if (rootViewController.presentedViewController == nil)
    {
        return rootViewController;
    }
    if ([rootViewController.presentedViewController isKindOfClass:[UINavigationController class]])
    {
        UINavigationController *navigationController = (UINavigationController *)rootViewController.presentedViewController;
        UIViewController *lastViewController = [[navigationController viewControllers] lastObject];
        return [self topViewController:lastViewController];
    }
    UIViewController *presentedViewController = (UIViewController *)rootViewController.presentedViewController;
    return [self topViewController:presentedViewController];
}

@end


================================================
FILE: Dash/DHAppUpdateChecker.h
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import <Foundation/Foundation.h>

@interface DHAppUpdateChecker : NSObject

+ (DHAppUpdateChecker *)sharedUpdateChecker;
- (BOOL)alertIfUpdatesAreScheduled;
- (void)backgroundCheckForUpdatesIfNeeded;

@end


================================================
FILE: Dash/DHAppUpdateChecker.m
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import "DHAppUpdateChecker.h"

#define DHAppUpdateCheckerLastCheckDate @"DHAppUpdateCheckerLastCheckDate"
#define DHAppUpdateCheckerScheduledUpdateVersion @"DHAppUpdateCheckerScheduledUpdateVersion"

@implementation DHAppUpdateChecker

+ (DHAppUpdateChecker *)sharedUpdateChecker
{
#ifdef APP_STORE
    return nil;
#endif
    static dispatch_once_t pred;
    static DHAppUpdateChecker *_checker = nil;
    
    dispatch_once(&pred, ^{
        _checker = [[DHAppUpdateChecker alloc] init];
    });
    return _checker;
}

- (void)backgroundCheckForUpdatesIfNeeded
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSDate *lastDate = [defaults objectForKey:DHAppUpdateCheckerLastCheckDate];
    if(!lastDate || [[NSDate date] timeIntervalSinceDate:lastDate] > 60*60*24)
    {
        [defaults setObject:[NSDate date] forKey:DHAppUpdateCheckerLastCheckDate];
        dispatch_queue_t queue = dispatch_queue_create([[NSString stringWithFormat:@"%u", arc4random() % 100000] UTF8String], 0);
        dispatch_async(queue, ^{
            NSData *jsonData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[@"https://kapeli.com/dash_ios.json?bundle_id=" stringByAppendingString:[NSBundle mainBundle].bundleIdentifier]]];
            if(jsonData)
            {
                NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
                if(json)
                {
                    NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
                    NSString *myVersion = [infoDict objectForKey:@"CFBundleVersion"];
                    if([myVersion integerValue] < [json[@"version"] integerValue])
                    {
                        [[NSUserDefaults standardUserDefaults] setObject:json[@"version"] forKey:DHAppUpdateCheckerScheduledUpdateVersion];
                    }
                }
            }
        });
    }
}

- (BOOL)alertIfUpdatesAreScheduled
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *version = [defaults objectForKey:DHAppUpdateCheckerScheduledUpdateVersion];
    if(version)
    {
        [defaults removeObjectForKey:DHAppUpdateCheckerScheduledUpdateVersion];
        NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
        NSString *myVersion = [infoDict objectForKey:@"CFBundleVersion"];
        if([version integerValue] > [myVersion integerValue])
        {
            [UIAlertView showWithTitle:@"Dash Update Available" message:@"A new version of Dash has been released. Would you like to update?" cancelButtonTitle:@"Maybe Later" otherButtonTitles:@[@"Update"] tapBlock:^(UIAlertView *alertView, NSInteger buttonIndex) {
                if(buttonIndex == alertView.firstOtherButtonIndex)
                {
                    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://kapeli.com/dash_ios?ref=update#update"]];
                }
            }];
            return YES;
        }
    }
    return NO;
}

@end


================================================
FILE: Dash/DHAppleAPIProtocol.h
================================================
//
//  Copyright (C) 2018  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import <Foundation/Foundation.h>

@interface DHAppleAPIProtocol : NSURLProtocol

@end


================================================
FILE: Dash/DHAppleAPIProtocol.m
================================================
//
//  Copyright (C) 2018  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import "DHAppleAPIProtocol.h"
#import <Apple_Docs_Framework/Apple_Docs_Framework.h>
#import "DHDocsetManager.h"
#import "DHLatencyTester.h"
#import "DHWebViewController.h"
#import "DHTocBrowser.h"

@implementation DHAppleAPIProtocol

+ (BOOL)canInitWithRequest:(NSURLRequest *)request
{
    if([[[request URL] scheme] isCaseInsensitiveEqual:@"dash-apple-api"])
    {
        return YES;
    }
    return NO;
}

+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request
{
    return request;
}

- (void)startLoading
{
    @autoreleasepool {
        NSURLResponse *response = [[NSURLResponse alloc] initWithURL:[self.request URL] MIMEType:@"text/html" expectedContentLength:-1 textEncodingName:nil];
        [[self client] URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];
        NSString *url = [[self.request.URL absoluteString] substringToString:@"#"];
        if(![url contains:@"&language="])
        {
            url = [url stringByAppendingFormat:@"&language=%@", ([DHAppleActiveLanguage currentLanguage] == DHNewActiveAppleLanguageObjC) ? @"occ" : @"swift"];
        }
        DHDocset *docset = [[DHDocsetManager sharedManager] appleAPIReferenceDocset];
        NSString *toolPath = [docset.documentsPath stringByAppendingPathComponent:@"Apple Docs Helper"];
        NSData *data = [@"<html><head><title>Error</title></head><body>Error. Please reinstall the Apple API Reference docset.</body></html>" dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
        if(toolPath.length)
        {
            @try {
                DHViewer *viewer = [DHViewer sharedViewer];
                DHCommandLineParser *parser = [DHCommandLineParser sharedParser];
                parser.ownPath = toolPath;
                NSString *bestMirror = [[DHLatencyTester sharedLatency].bestMirror stringByConvertingKapeliHttpURLToHttps];
                bestMirror = (bestMirror) ? bestMirror : @"https://kapeli.com/feeds/";
                viewer.isIOS = YES;
                parser.bestMirror = bestMirror;
                viewer.url = url;
                parser.dashBuildNumber = 450;
                data = [[viewer htmlOutput] dataUsingEncoding:NSUTF8StringEncoding];
                [self setUpTOC:viewer];
                [DHXcodeHelper cleanUp];
                [DHViewer cleanUp];
            }
            @catch(NSException *exception) { NSLog(@"%@ %@", exception, [exception callStackSymbols]); }
        }
        [[self client] URLProtocol:self didLoadData:data];
        [[self client] URLProtocolDidFinishLoading:self];
    }
}

- (void)setUpTOC:(DHViewer *)viewer
{
    dispatch_sync(dispatch_get_main_queue(), ^{
        DHWebViewController *controller = [DHWebViewController sharedWebViewController];
        if(iPad && isRegularHorizontalClass)
        {
            if(controller.methodsPopover.popoverVisible)
            {
                [controller.methodsPopover dismissPopoverAnimated:YES];
            }
        }
        else
        {
            [[controller.actualTOCBrowser searchDisplayController] setActive:NO animated:NO];
            [[controller.actualTOCBrowser presentingViewController] dismissViewControllerAnimated:YES completion:nil];
        }
        controller.lastTocBrowser = nil;
        controller.currentMethods = viewer.tocEntries.count ? viewer.tocEntries : nil;
        controller.navigationItem.rightBarButtonItem = (viewer.tocEntries.count) ? [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"tocMenu"] style:UIBarButtonItemStylePlain target:controller action:@selector(tocButtonPressed:)] : nil;
    });
}

- (void)stopLoading
{
}

@end


================================================
FILE: Dash/DHAppleActiveLanguage.h
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import <Foundation/Foundation.h>

@interface DHAppleActiveLanguage : NSObject

@property (assign) NSInteger activeLanguage;

+ (NSInteger)currentLanguage;
+ (void)setLanguage:(NSInteger)language;

@end

#define DHNewAppleActiveLanguageKey @"DHNewAppleActiveLanguageKey"
#define DHNewActiveAppleLanguageSwift 0
#define DHNewActiveAppleLanguageObjC 1


================================================
FILE: Dash/DHAppleActiveLanguage.m
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import "DHAppleActiveLanguage.h"

@implementation DHAppleActiveLanguage

+ (DHAppleActiveLanguage *)sharedActiveLanguage
{
    static dispatch_once_t pred;
    static DHAppleActiveLanguage *_singleton = nil;
    
    dispatch_once(&pred, ^{
        _singleton = [[DHAppleActiveLanguage alloc] init];
        [_singleton setUp];
    });
    return _singleton;
}

- (void)setUp
{
    self.activeLanguage = [[NSUserDefaults standardUserDefaults] integerForKey:DHNewAppleActiveLanguageKey];
}

+ (NSInteger)currentLanguage
{
    return [[DHAppleActiveLanguage sharedActiveLanguage] activeLanguage];
}

+ (void)setLanguage:(NSInteger)language
{
    [[NSUserDefaults standardUserDefaults] setInteger:language forKey:DHNewAppleActiveLanguageKey];
    [DHAppleActiveLanguage sharedActiveLanguage].activeLanguage = language;
}

@end


================================================
FILE: Dash/DHBlockProtocol.h
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import <Foundation/Foundation.h>

@interface DHBlockProtocol : NSURLProtocol

@end


================================================
FILE: Dash/DHBlockProtocol.m
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import "DHBlockProtocol.h"
#import "DHWebViewController.h"
#import "DHDocsetManager.h"
#import "DHRemoteProtocol.h"

@implementation DHBlockProtocol

+ (BOOL)canInitWithRequest:(NSURLRequest *)request
{
#ifdef DEBUG
    if([[[request URL] scheme] isCaseInsensitiveEqual:@"http"])
    {
        NSLog(@"HTTP URL load detected: %@", request);
    }
#endif
    DHWebViewController *webController = [DHWebViewController sharedWebViewController];
    NSString *url = [[request URL] absoluteString];
    NSString *mainFrameURL = webController.mainFrameURL;
    if([url isEqualToString:@"about:blank"])
    {
        return YES;
    }
    if([url contains:@"kapeli.com/"])
    {
        return NO;
    }
    if([[[request URL] scheme] hasCaseInsensitivePrefix:@"http"])
    {
        if(![[[request URL] host] length] || [[[request URL] host] hasSuffix:@"."])
        {
            return YES;
        }
    }
    NSString *lastPathComponent = [url lastPathComponent];
    if([lastPathComponent contains:@"xcode"] && [[lastPathComponent pathExtension] isCaseInsensitiveEqual:@"css"])
    {
        return YES;
    }
    if([webController isLocalURL] || ([mainFrameURL contains:@"developer.apple.com"] && [mainFrameURL contains:@"/documentation/"]))
    {
        if([url rangeOfString:@"disqus.com/" options:NSCaseInsensitiveSearch].location != NSNotFound || [url contains:@"lloogg.com/"] || [url rangeOfString:@"google-analytics.com/" options:NSCaseInsensitiveSearch].location != NSNotFound || [url contains:@"adzerk.net"] || [url contains:@"ghbtns.com"] || [url contains:@"platform.twitter.com/widgets.js"] || [url contains:@"analytics.twitter.com"] || [url contains:@"login.persona.org"] || [url contains:@"omtrdc.net"] || [url contains:@"google.com/cse/"] || [url contains:@"jashkenas.s3.amazonaws.com/images/a_documentcloud_project.png"] || [url contains:@"media.mongodb.org"] || [url contains:@"googleusercontent.com/beacon"] || [url contains:@"carbonads.com/"] || [url contains:@"facebook.com/plugins"] || [url contains:@"fbcdn.net"] || [url contains:@"http://nodejs.org/images/platform-icons.png"] || [url contains:@"apis.google.com/js/plusone.js"] || ([url contains:@"community.adobe.com"] && [url hasCaseInsensitiveSuffix:@".css"]))
        {
            return YES;
        }
        if(([url contains:@"codeclimate.com"]  || [url contains:@"coveralls.io"] || [url contains:@"travis-ci.org"]) && [mainFrameURL rangeOfString:@"/Ruby%20DocSets/"].location == NSNotFound && [mainFrameURL rangeOfString:@"/Cocoa%20DocSets/"].location == NSNotFound && [mainFrameURL rangeOfString:@"/Cocoa%20DocSets/"].location == NSNotFound && [mainFrameURL rangeOfString:@"/Hex%20DocSets/"].location == NSNotFound && ([mainFrameURL rangeOfString:@"/Versioned%20DocSets/"].location == NSNotFound || [mainFrameURL rangeOfString:@"DHDocsetDownloader/"].location != NSNotFound) && ![url hasPrefix:@"file://"])
        {
            return YES;
        }
        
        BOOL isJSEnabled = NO;
        BOOL blockOnlineResources = NO;
        NSString *platform = nil;
        BOOL isHTTPRequest = ([url hasCaseInsensitivePrefix:@"http"]);
        BOOL isJSRequest = [[[url stringByDeletingPathFragment] pathExtension] rangeOfString:@"js"].location != NSNotFound;
        if(isHTTPRequest || isJSRequest)
        {
            if([DHRemoteServer sharedServer].connectedRemote)
            {
                NSDictionary *userInfo = [DHRemoteProtocol lastResponseUserInfo];
                platform = userInfo[@"platform"];
                isJSEnabled = [userInfo[@"javaScriptEnabled"] boolValue];
                blockOnlineResources = [userInfo[@"blocksOnline"] boolValue];
            }
            else
            {
                DHDocset *docset = [[DHDocsetManager sharedManager] docsetForDocumentationPage:mainFrameURL];
                platform = docset.platform;
                isJSEnabled = docset.isJavaScriptEnabled;
                blockOnlineResources = docset.blocksOnlineResources;
            }
        }
        
        if(([mainFrameURL containsAny:@[@"SciPy.docset", @"NumPy.docset"]]) && isHTTPRequest)
        {
            if(![url contains:@"mathjax"])
            {
                return YES;
            }
        }
        if(([mainFrameURL containsAny:@[@"SQLAlchemy.docset", @"RequireJS.docset", @"Tornado.docset"]] || blockOnlineResources) && isHTTPRequest)
        {
            if([mainFrameURL containsAny:@[@"Julia.docset"]] && [url contains:@"mathjax"])
            {
                return NO;
            }
            return YES;
        }
        if([mainFrameURL contains:@"jQuery%20UI.docset"] || [mainFrameURL contains:@"jQuery%20Mobile.docset"] || [mainFrameURL contains:@"jQuery.docset"] || [mainFrameURL contains:@"Foundation.docset"])
        {
            return NO;
        }
        if(isJSRequest)
        {
            if([url contains:@"Sass.docset"] || [url rangeOfString:@"UnderscoreJS.docset" options:NSCaseInsensitiveSearch].location != NSNotFound || [url rangeOfString:@"BackboneJS.docset" options:NSCaseInsensitiveSearch].location != NSNotFound || [url rangeOfString:@"Bootstrap.docset" options:NSCaseInsensitiveSearch].location != NSNotFound)
            {
                return NO;
            }
            if([url contains:@"CSS.docset"] || [url contains:@"HTML.docset"] || [url contains:@"XSLT.docset"] || [url contains:@"XUL.docset"] || [url contains:@"SVG.docset"] || [url contains:@"JavaScript.docset"])
            {
                return NO;
            }
            if([url contains:@"Dojo.docset"] || [url contains:@"Elixir.docset"] || [url contains:@"KnockoutJS.docset"] || [url contains:@"PhoneGap.docset"] || [url contains:@"MarionetteJS.docset"])
            {
                return NO;
            }
            if([url contains:@"Bourbon.docset"] || [url contains:@"Puppet.docset"] || [url contains:@"Neat.docset"] || [url contains:@"Xojo.docset"] || [url contains:@"Redis.docset"] || [url contains:@"sproutcore.docset"])
            {
                return NO;
            }
            if([url rangeOfString:@"Compass.docset" options:NSCaseInsensitiveSearch].location != NSNotFound)
            {
                return NO;
            }
            if([url contains:@"Processing.docset"])
            {
                return NO;
            }
            if([url contains:@"Laravel.docset"])
            {
                return NO;
            }
            if([url contains:@"Sencha%20Touch.docset"] || [url contains:@"ExtJS.docset"] || [url contains:@"Appcelerator%20Titanium.docset"])
            {
                return NO;
            }
            if([url rangeOfString:@"Zend_Framework.docset" options:NSCaseInsensitiveSearch].location != NSNotFound)
            {
                return NO;
            }
            if([mainFrameURL contains:@"AngularJS.docset"] || [url rangeOfString:@"PrototypeJS.docset" options:NSCaseInsensitiveSearch].location != NSNotFound || [url rangeOfString:@"Go.docset" options:NSCaseInsensitiveSearch].location != NSNotFound)
            {
                return NO;
            }
            if([url rangeOfString:@"RubyMotion.docset" options:NSCaseInsensitiveSearch].location != NSNotFound)
            {
                return NO;
            }
            if([url rangeOfString:@"Ruby.docset" options:NSCaseInsensitiveSearch].location != NSNotFound)
            {
                return NO;
            }
            if([url rangeOfString:@"Ruby%20on%20Rails.docset" options:NSCaseInsensitiveSearch].location != NSNotFound && ![[url lastPathComponent] isEqualToString:@"main.js"])
            {
                return NO;
            }
            if([url rangeOfString:@"Cappuccino.docset" options:NSCaseInsensitiveSearch].location != NSNotFound && ([url hasSuffix:@"jquery.js"] || [url hasSuffix:@"dynsections.js"]))
            {
                return NO;
            }
            if([url rangeOfString:@"Unity%203D.docset" options:NSCaseInsensitiveSearch].location != NSNotFound)
            {
                return NO;
            }
            if([url rangeOfString:@"CoffeeScript.docset" options:NSCaseInsensitiveSearch].location != NSNotFound)
            {
                return NO;
            }
            if([url rangeOfString:@"Yii.docset" options:NSCaseInsensitiveSearch].location != NSNotFound)
            {
                return NO;
            }
            if([url rangeOfString:@"Scala.docset" options:NSCaseInsensitiveSearch].location != NSNotFound || [url rangeOfString:@"Akka.docset" options:NSCaseInsensitiveSearch].location != NSNotFound || [url contains:@"/dash_scaladoc/"])
            {
                return NO;
            }
            if([url rangeOfString:@"YUI.docset" options:NSCaseInsensitiveSearch].location != NSNotFound)
            {
                return NO;
            }
            if([url rangeOfString:@"Haskell.docset" options:NSCaseInsensitiveSearch].location != NSNotFound)
            {
                return NO;
            }
            if([url rangeOfString:@"Android.docset" options:NSCaseInsensitiveSearch].location != NSNotFound)
            {
                return NO;
            }
            if([url rangeOfString:@"Drupal.docset" options:NSCaseInsensitiveSearch].location != NSNotFound || [url rangeOfString:@"CodeIgniter.docset" options:NSCaseInsensitiveSearch].location != NSNotFound || [url rangeOfString:@"Joomla.docset" options:NSCaseInsensitiveSearch].location != NSNotFound || [url rangeOfString:@"Symfony.docset" options:NSCaseInsensitiveSearch].location != NSNotFound || [url rangeOfString:@"TYPO3.docset" options:NSCaseInsensitiveSearch].location != NSNotFound || [url rangeOfString:@"Cocos2D-X.docset" options:NSCaseInsensitiveSearch].location != NSNotFound || [url rangeOfString:@"Zend_Framework.docset"].location != NSNotFound)
            {
                return NO;
            }
            if(isJSEnabled)
            {
                return NO;
            }
            if([platform isEqualToString:@"java"] || [platform isEqualToString:@"playjava"] || [platform isEqualToString:@"groovy"] || [platform isEqualToString:@"javafx"] || [platform isEqualToString:@"scaladoc"])
            {
                return NO;
            }
            if([[request mainDocumentURL] isEqual:[request URL]])
            {
                return NO;
            }
            return YES;
        }
        if([url rangeOfString:@"://developer.mozilla.org"].location != NSNotFound || [url rangeOfString:@"google.com/jsapi"].location != NSNotFound)
        {
            return YES;
        }
    }
    return NO;
}

+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request
{
    return request;
}

- (void)startLoading
{
    NSString *path = [[self.request URL] path];
    NSString *extension = [path pathExtension];
    NSString *mimeType = [NSString mimeTypeForPathExtension:extension];
    NSURLResponse *response = [[NSURLResponse alloc] initWithURL:[self.request URL]
                                                        MIMEType:mimeType
                                           expectedContentLength:-1
                                                textEncodingName:nil];
    [[self client] URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];
    NSData *data = [@"" dataUsingEncoding:NSUTF8StringEncoding];
    [[self client] URLProtocol:self didLoadData:data];
    [[self client] URLProtocolDidFinishLoading:self];
}

- (void)stopLoading
{

}

@end


================================================
FILE: Dash/DHBrowserCell.xib
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
    <device id="retina4_7" orientation="portrait">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="DHBrowserCell" id="S6W-09-1z9" userLabel="Browser Cell" customClass="DHBrowserTableViewCell" colorLabel="IBBuiltInLabel-Blue">
            <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
            <autoresizingMask key="autoresizingMask"/>
            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="S6W-09-1z9" id="Ca5-1b-CYh">
                <rect key="frame" x="0.0" y="0.0" width="320" height="43.5"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="579-AP-FUS" customClass="DHRightDetailLabel">
                        <rect key="frame" x="46" y="1" width="274" height="43"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
                        <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                        <nil key="highlightedColor"/>
                    </label>
                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" id="JGq-Sz-Apf" userLabel="Platform">
                        <rect key="frame" x="15" y="14" width="16" height="16"/>
                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
                    </imageView>
                </subviews>
            </tableViewCellContentView>
            <inset key="separatorInset" minX="46" minY="0.0" maxX="0.0" maxY="0.0"/>
            <connections>
                <outlet property="platformImageView" destination="JGq-Sz-Apf" id="el0-Nd-vxM"/>
                <outlet property="titleLabel" destination="579-AP-FUS" id="xTO-dh-YM0"/>
            </connections>
            <point key="canvasLocation" x="139" y="154"/>
        </tableViewCell>
    </objects>
</document>


================================================
FILE: Dash/DHBrowserTableView.h
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import <UIKit/UIKit.h>

@interface DHBrowserTableView : UITableView

@end

@protocol DHBrowserTableViewDelegate <NSObject>

@optional
- (void)tableViewWillBeginEditing:(UITableView *)tableView;
- (void)tableViewDidBeginEditing:(UITableView *)tableView;
- (void)tableViewWillEndEditing:(UITableView *)tableView;
- (void)tableViewDidEndEditing:(UITableView *)tableView;

@end

================================================
FILE: Dash/DHBrowserTableView.m
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import "DHBrowserTableView.h"

@implementation DHBrowserTableView

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    if(editing == self.editing)
    {
        return;
    }
    if(editing && [[self delegate] respondsToSelector:@selector(tableViewWillBeginEditing:)])
    {
        [(id)[self delegate] tableViewWillBeginEditing:self];
    }
    if(!editing && [[self delegate] respondsToSelector:@selector(tableViewWillEndEditing:)])
    {
        [(id)[self delegate] tableViewWillEndEditing:self];
    }
    [super setEditing:editing animated:animated];
    if(editing && [[self delegate] respondsToSelector:@selector(tableViewDidBeginEditing:)])
    {
        [(id)[self delegate] tableViewDidBeginEditing:self];
    }
    if(!editing && [[self delegate] respondsToSelector:@selector(tableViewDidEndEditing:)])
    {
        [(id)[self delegate] tableViewDidEndEditing:self];
    }
}

@end


================================================
FILE: Dash/DHBrowserTableViewCell.h
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import <UIKit/UIKit.h>
#import "DHRightDetailLabel.h"

@interface DHBrowserTableViewCell : UITableViewCell

@property (assign) UIImageView *typeImageView;
@property (weak) IBOutlet DHRightDetailLabel *titleLabel;
@property (assign) IBOutlet UIImageView *platformImageView;

- (void)makeEntryCell;

@end


================================================
FILE: Dash/DHBrowserTableViewCell.m
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import "DHBrowserTableViewCell.h"

@implementation DHBrowserTableViewCell

- (void)awakeFromNib
{
    [super awakeFromNib];
    self.titleLabel.isBrowserCell = YES;
}

- (void)makeEntryCell
{
    if(self.typeImageView)
    {
        return;
    }
    self.separatorInset = UIEdgeInsetsMake(0, 70, 0, 0);
    [self.titleLabel increaseFrameByX:24 y:0 width:-24 height:0];
    UIImageView *typeImageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.imageView.frame.origin.x+28, self.imageView.frame.origin.y+1, 14, 14)];
    [typeImageView setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin];
    self.typeImageView = typeImageView;
    [self addSubview:typeImageView];
}

- (UIImageView *)imageView
{
    return self.platformImageView;
}

- (UILabel *)textLabel
{
    return self.titleLabel;
}

- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index
{
    if(self.editing)
    {
        return;
    }
    [super insertSubview:view atIndex:index];
}

- (NSString *)accessibilityValue
{
    return [self.titleLabel accessibilityValue];
}

@end


================================================
FILE: Dash/DHCSS.h
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import <Foundation/Foundation.h>

@interface DHCSS : NSObject

@property (strong) NSString *bothCSS;
@property (strong) NSString *swiftCSS;
@property (strong) NSString *objcCSS;

+ (DHCSS *)sharedCSS;
+ (NSString *)currentCSSString;
+ (NSString *)currentCSSStringWithTextModifier;
+ (int)activeAppleLanguage;
- (void)refreshActiveCSS;
- (void)modifyTextSize:(BOOL)increase;
- (BOOL)shouldModifyTextSize;
- (NSString *)textSizeAdjust;

@end

#define DHActiveAppleLanguageKey @"ActiveAppleLanguage"
#define DHActiveAppleLanguageBoth 0
#define DHActiveAppleLanguageSwift 1
#define DHActiveAppleLanguageObjC 2

================================================
FILE: Dash/DHCSS.m
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import "DHCSS.h"

@implementation DHCSS

static int _activeAppleLanguage;
static long _textSizeAdjust;

+ (DHCSS *)sharedCSS
{
    static dispatch_once_t pred;
    static DHCSS *_css = nil;
    
    dispatch_once(&pred, ^{
        _css = [[DHCSS alloc] init];
        [_css setUp];
    });
    return _css;
}

- (void)setUp
{
    self.bothCSS = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"style" ofType:@"css"] encoding:NSUTF8StringEncoding error:nil];
    self.objcCSS = [self.bothCSS stringByAppendingString:@"body.jazz #bashful #language #obj_c + label, body.jazz #bashful #language #objective_c + label {background: rgba(0,136,204,1) !important;color: rgba(255,255,255,1) !important;border-radius: 2px !important;cursor: default !important;} body#reference.jazz:not(.swift) .Swift { display: none !important; } body#reference.jazz:not(.java_script) .code-sample .Swift:only-child {display:inline-block !important} body#reference.jazz:not(.swift) .height-container .z-module-import {display:none !important}"];
    self.swiftCSS = [self.bothCSS stringByAppendingString:@"body.jazz #bashful #language #swift + label {background: rgba(0,136,204,1) !important;color: rgba(255,255,255,1) !important;border-radius: 2px !important;cursor: default !important;} body#reference.jazz:not(.java_script) .Objective-C { display: none !important; } body#reference.jazz:not(.java_script) .code-sample .Objective-C:only-child {display:inline-block !important} body#reference.jazz:not(.java_script) .obj-c-only .height-container { display:none !important; } body#reference.jazz:not(.java_script) .obj-c-only .task-group-term a { display:block !important; text-decoration: line-through !important; -webkit-text-stroke-color: rgba(163,21,21,1) !important; -webkit-text-stroke-width: .0000000001px !important; } body.jazz:not(.java_script) .obj-c-only .task-group-term::after {content: '(Not available in Swift)' !important; color:rgba(163,21,21,1) !important; font-size:.8em !important; margin-left:5px !important; } body.jazz p.para.Swift {display:block !important} body.jazz .Swift { display: inline-block !important; } body.jazz #metadata_table .Swift { display: block !important; } body.jazz .task-group-term a.Swift, body.jazz #jump_to .Swift { display: block !important; } body.jazz .declaration .Swift { display: block !important; }"];
    self.bothCSS = [self.bothCSS stringByAppendingString:@"body.jazz #bashful #language #both + label {background: rgba(0,136,204,1) !important;color: rgba(255,255,255,1) !important;border-radius: 2px !important;cursor: default !important;}"];
    [self refreshActiveCSS];
    [self refreshTextSize];
}

- (void)refreshActiveCSS
{
    NSString *active = [[NSUserDefaults standardUserDefaults] objectForKey:DHActiveAppleLanguageKey];
    if([active isEqualToString:@"swift"])
    {
        _activeAppleLanguage = DHActiveAppleLanguageSwift;
    }
    else if([active isEqualToString:@"obj_c"] || [active isEqualToString:@"objective_c"])
    {
        _activeAppleLanguage = DHActiveAppleLanguageObjC;
    }
    else
    {
        _activeAppleLanguage = DHActiveAppleLanguageBoth;
    }
    [[NSURLCache sharedURLCache] removeAllCachedResponses];
}

+ (NSString *)currentCSSString
{
    DHCSS *css = [DHCSS sharedCSS];
    if(_activeAppleLanguage == DHActiveAppleLanguageBoth)
    {
        return css.bothCSS;
    }
    else if(_activeAppleLanguage == DHActiveAppleLanguageObjC)
    {
        return css.objcCSS;
    }
    else if(_activeAppleLanguage == DHActiveAppleLanguageSwift)
    {
        return css.swiftCSS;
    }
    return css.bothCSS;
}

+ (NSString *)currentCSSStringWithTextModifier
{
    return [NSString stringWithFormat:@"%@%@", [DHCSS currentCSSString], ([[DHCSS sharedCSS] shouldModifyTextSize]) ? [NSString stringWithFormat:@"\n\nbody {-webkit-text-size-adjust: %@}", [[DHCSS sharedCSS] textSizeAdjust]] : @""];
}

+ (int)activeAppleLanguage
{
    return _activeAppleLanguage;
}

- (void)refreshTextSize
{
    _textSizeAdjust = [[NSUserDefaults standardUserDefaults] integerForKey:@"DHTextSizeAdjust"];
}

- (NSString *)textSizeAdjust
{
    return [NSString stringWithFormat:@"%ld%%", 100+_textSizeAdjust];
}

- (BOOL)shouldModifyTextSize
{
    return _textSizeAdjust != 0;
}

- (void)modifyTextSize:(BOOL)increase
{
    if(increase)
    {
        _textSizeAdjust += 5;
    }
    else
    {
        _textSizeAdjust -= 5;
    }
    if(_textSizeAdjust < -70)
    {
        _textSizeAdjust = -70;
    }
    else if(_textSizeAdjust > 70)
    {
        _textSizeAdjust = 70;
    }
    [[NSURLCache sharedURLCache] removeAllCachedResponses];
    NSLog(@"Text size adjust set to %ld", _textSizeAdjust);
    [[NSUserDefaults standardUserDefaults] setInteger:_textSizeAdjust forKey:@"DHTextSizeAdjust"];
}

@end


================================================
FILE: Dash/DHCheatRepo.h
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import "DHRepo.h"

@interface DHCheatRepo : DHRepo

@property (strong) NSDate *lastListLoad;

+ (instancetype)sharedCheatRepo;

@end


================================================
FILE: Dash/DHCheatRepo.m
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import "DHCheatRepo.h"
#import "DHCheatRepoList.h"

@implementation DHCheatRepo

static id singleton = nil;

+ (instancetype)sharedCheatRepo
{
    if(singleton)
    {
        return singleton;
    }
    id cheatRepo = [[DHAppDelegate mainStoryboard] instantiateViewControllerWithIdentifier:NSStringFromClass([self class])];
    [cheatRepo setUp];
    return cheatRepo;
}

- (void)setUp
{
    [super setUp];
    [self reloadCheatsheetsIfNeeded];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self reloadCheatsheetsIfNeeded];
}

- (void)reloadCheatsheetsIfNeeded
{
    if(!self.loading && (!self.lastListLoad || (!self.searchBar.text.length && [[NSDate date] timeIntervalSinceDate:self.lastListLoad] > 300)))
    {
        self.loading = YES;
        BOOL shouldDelay = [self.loadingText contains:@"Retrying"];
        self.loadingText = nil;
        self.searchBar.userInteractionEnabled = NO;
        self.searchBar.alpha = 0.5;
        self.searchBar.placeholder = @"Loading...";
        [self.tableView reloadData];
        dispatch_queue_t queue = dispatch_queue_create([[NSString stringWithFormat:@"%u", arc4random() % 100000] UTF8String], 0);
        dispatch_async(queue, ^{
            if(shouldDelay)
            {
                [NSThread sleepForTimeInterval:1.0];
            }
            [[DHCheatRepoList sharedCheatRepoList] reload];
            NSMutableArray *feeds = [[DHCheatRepoList sharedCheatRepoList] allCheatsheets];
            dispatch_sync(dispatch_get_main_queue(), ^{
                if(feeds.count)
                {
                    NSArray *savedFeeds = [[NSUserDefaults standardUserDefaults] objectForKey:[self defaultsKey]];
                    for(NSDictionary *feedDictionary in savedFeeds)
                    {
                        DHFeed *savedFeed = [DHFeed feedWithDictionaryRepresentation:feedDictionary];
                        NSUInteger index = [feeds indexOfObject:savedFeed];
                        if(index != NSNotFound)
                        {
                            DHFeed *feed = feeds[index];
                            feed.installed = savedFeed.installed;
                            feed.installedVersion = savedFeed.installedVersion;
                            feed.size = savedFeed.size;
                        }
                    }
                    [feeds sortUsingFunction:compareFeeds context:nil];
                    
                    self.lastListLoad = [NSDate date];
                    self.searchBar.userInteractionEnabled = YES;
                    self.searchBar.alpha = 1.0;
                    self.searchBar.placeholder = @"Find cheat sheets to download";
                    self.loading = NO;
                    self.feeds = feeds;
                    [self.tableView reloadData];
                }
                else
                {
                    self.loadingText = @"Loading failed. Retrying...";
                    [self.tableView reloadData];
                    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                        self.loading = NO;
                        [self reloadCheatsheetsIfNeeded];
                    });
                }
            });
        });
    }
}

- (NSString *)installFeed:(DHFeed *)feed isAnUpdate:(BOOL)isAnUpdate
{
    NSObject *identifier = [[NSObject alloc] init];
    feed.identifier = identifier;
    feed.waiting = YES;
    BOOL didStallOnce = NO;
    BOOL didSetStallLabel = NO;
    while([self shouldStall] && feed.installing && feed.identifier == identifier)
    {
        if(didStallOnce && !didSetStallLabel)
        {
            didSetStallLabel = YES;
            dispatch_sync(dispatch_get_main_queue(), ^{
                [feed setDetailString:@"Waiting..."];
                [[feed cell].titleLabel setRightDetailText:@"Waiting..." adjustMainWidth:YES];
                [feed setMaxRightDetailWidth:[feed cell].titleLabel.maxRightDetailWidth];
            });
        }
        didStallOnce = YES;
        [NSThread sleepForTimeInterval:1.0f];
    }
    if(!feed.installing || feed.identifier != identifier)
    {
        return @"cancelled";
    }
    feed.waiting = NO;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *installPath = [self docsetPathForFeed:feed];
    NSString *tempPath = [self uniqueTempDirAtPath:installPath];
    NSString *tempFile = [tempPath stringByAppendingPathComponent:@"dash_temp_docset.tgz"];
    NSString *tarixFile = [tempFile stringByAppendingString:@".tarix"];
    
    __block BOOL shouldWait = NO;
    dispatch_sync(dispatch_get_main_queue(), ^{
        shouldWait = [[DHLatencyTester sharedLatency] performTests:NO];
    });
    if(shouldWait)
    {
        [NSThread sleepForTimeInterval:3.0f];
    }
    if(!feed.installing || feed.identifier != identifier)
    {
        return @"cancelled";
    }
    NSString *error = nil;
    DHFeedResult *feedResult = [self loadFeed:feed error:&error];
    if(!feed.installing || feed.identifier != identifier)
    {
        return @"cancelled";
    }
    if(feedResult && feed.installing)
    {
        feed.feedResult = feedResult;
        feedResult.feed = feed;
        NSError *downloadError = nil;
        if(feedResult.downloadURLs.count)
        {
            NSString *downloadURL = feedResult.downloadURLs[0];
            [self emptyTrashAtPath:tempPath];
            if(![fileManager createDirectoryAtPath:tempPath withIntermediateDirectories:YES attributes:nil error:nil])
            {
                return @"Couldn't create install directory.";
            }
            if([feedResult isCancelled])
            {
                [self emptyTrashAtPath:tempPath];
                return @"cancelled";
            }
            NSURL *url = [NSURL URLWithString:downloadURL];
            if(url)
            {
                BOOL result = NO;
                NSURL *tarixURL = [NSURL URLWithString:[[downloadURL stringByAppendingString:@".tarix"] stringByConvertingKapeliHttpURLToHttps]];
                feedResult.hasTarix = [NSURL URLIsFound:[tarixURL absoluteString] timeoutInterval:120.0f checkForRedirect:YES];
                downloadError = nil;
#ifdef DEBUG
                NSLog(@"Downloading %@", url);
#endif
                if([DHFileDownload downloadItemAtURL:url toFile:tempFile error:&downloadError delegate:self identifier:feedResult] && !downloadError)
                {
                    if([feedResult isCancelled])
                    {
                        [self emptyTrashAtPath:tempPath];
                        return @"cancelled";
                    }
                    
                    [feedResult setRightDetail:@"Waiting..."];
                    @synchronized([DHDocsetIndexer class])
                    {
                        if(!feedResult.hasTarix)
                        {
                            if([feedResult isCancelled])
                            {
                                [self emptyTrashAtPath:tempPath];
                                return @"cancelled";
                            }
                            [fileManager removeItemAtPath:tarixFile error:nil];
                            result = [DHUnarchiver unarchiveArchive:tempFile delegate:feedResult];
                        }
                        else
                        {
                            if([feedResult isCancelled])
                            {
                                [self emptyTrashAtPath:tempPath];
                                return @"cancelled";
                            }
                            [feedResult setRightDetail:@"Preparing..."];
                            result = [DHFileDownload downloadItemAtURL:tarixURL toFile:tarixFile error:nil delegate:nil identifier:nil];
                            if([feedResult isCancelled])
                            {
                                [self emptyTrashAtPath:tempPath];
                                return @"cancelled";
                            }
                            if(!result)
                            {
                                [self emptyTrashAtPath:tempPath];
                                return @"Couldn't download index file.";
                            }
                            if([feedResult isCancelled])
                            {
                                [self emptyTrashAtPath:tempPath];
                                return @"cancelled";
                            }
                            [feedResult setRightDetail:@"Extracting..."];
                            result = [DHUnarchiver unarchiveArchive:tarixFile delegate:nil];
                            if([feedResult isCancelled])
                            {
                                [self emptyTrashAtPath:tempPath];
                                return @"cancelled";
                            }
                            if(!result)
                            {
                                [self emptyTrashAtPath:tempPath];
                                return @"Couldn't unarchive index file.";
                            }
                            [fileManager removeItemAtPath:tarixFile error:nil];
                            tarixFile = [fileManager firstFileWithExtension:@"tarix" atPath:tempPath ignoreHidden:YES];
                            if(!tarixFile)
                            {
                                [self emptyTrashAtPath:tempPath];
                                return @"Couldn't find index file.";
                            }
                            tarixFile = [tempPath stringByAppendingPathComponent:tarixFile];
                            result = [DHUnarchiver unpackTarixDocset:tempFile tarixPath:tarixFile delegate:feedResult];
                            if([feedResult isCancelled])
                            {
                                [self emptyTrashAtPath:tempPath];
                                return @"cancelled";
                            }
                            if(!result)
                            {
                                [self emptyTrashAtPath:tempPath];
                                return @"Couldn't unarchive docset.";
                            }
                        }
                        if([feedResult isCancelled])
                        {
                            [self emptyTrashAtPath:tempPath];
                            return @"cancelled";
                        }
                        
                        if(!result)
                        {
                            [self emptyTrashAtPath:tempPath];
                            return @"Couldn't unarchive docset.";
                        }
                        
                        if(!feedResult.hasTarix)
                        {
                            [fileManager removeItemAtPath:tempFile error:nil];
                        }
                        DHDocset *docset = [DHDocset firstDocsetInsideFolder:tempPath];
                        if(!docset)
                        {
                            [self emptyTrashAtPath:tempPath];
                            return @"Couldn't install docset.";
                        }
                        else if(feedResult.hasTarix)
                        {
                            [fileManager moveItemAtPath:tarixFile toPath:docset.tarixIndexPath error:nil];
                            [fileManager moveItemAtPath:tempFile toPath:docset.tarixPath error:nil];
                        }
                        
                        [DHDocsetIndexer indexerForDocset:docset delegate:feedResult];
                        [fileManager removeItemAtPath:docset.sqlPath error:nil];
                        [fileManager removeItemAtPath:[docset.sqlPath stringByAppendingString:@"-shm"] error:nil];
                        [fileManager removeItemAtPath:[docset.sqlPath stringByAppendingString:@"-wal"] error:nil];
                        if([feedResult isCancelled])
                        {
                            [self emptyTrashAtPath:tempPath];
                            return @"cancelled";
                        }
                        
                        NSDirectoryEnumerator *dirEnum = [fileManager enumeratorAtPath:installPath];
                        NSString *file = nil;
                        while(file = [dirEnum nextObject])
                        {
                            [dirEnum skipDescendents];
                            NSString *filePath = [installPath stringByAppendingPathComponent:file];
                            if(![filePath isEqualToString:tempPath])
                            {
                                NSString *trashPath = [self uniqueTrashPath];
                                [fileManager moveItemAtPath:filePath toPath:trashPath error:nil];
                                dispatch_queue_t queue = dispatch_queue_create([[NSString stringWithFormat:@"%u", arc4random() % 100000] UTF8String], 0);
                                dispatch_async(queue, ^{
                                    [self emptyTrashAtPath:trashPath];
                                });
                            }
                        }
                        [fileManager moveItemAtPath:docset.path toPath:[installPath stringByAppendingPathComponent:[docset.path lastPathComponent]] error:nil];
                        [self emptyTrashAtPath:tempPath];
                        return nil;
                    }
                }
                else if(downloadError.code == DHDownloadCancelled)
                {
                    [self emptyTrashAtPath:tempPath];
                    return @"cancelled";
                }
                else
                {
                    [self emptyTrashAtPath:tempPath];
                }
            }
        }
        return @"Couldn't download cheat sheet.";
    }
    else
    {
        return error;
    }
    return nil;
}

- (DHFeedResult *)loadFeed:(DHFeed *)feed error:(NSString **)returnError
{
    DHFeedResult *feedResult = [[DHFeedResult alloc] init];
    DHCheatRepoList *list = [DHCheatRepoList sharedCheatRepoList];
    feedResult.downloadURLs = @[[list downloadURLForEntry:feed]];
    feedResult.version = [list versionForEntry:feed];
    return feedResult;
}

- (NSString *)docsetInstallFolderName
{
    return @"Cheat Sheets";
}

- (void)showUpdateRequestForFeeds:(NSArray *)toUpdate count:(NSInteger)feedCount docsetList:(NSString *)docsetList
{
    [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:[self defaultsScheduledUpdateKey]];
    [UIAlertView showWithTitle:@"Updates Found" message:[NSString stringWithFormat:@"Updates are available for %ld %@:%@%@", (long)feedCount, (feedCount > 1) ? @"cheat sheets" : @"cheat sheet", (feedCount > 1) ? @"\n\n" : @" ", docsetList] cancelButtonTitle:@"Maybe Later" otherButtonTitles:@[@"Update"] tapBlock:^(UIAlertView *alertView, NSInteger buttonIndex) {
        if(buttonIndex != alertView.cancelButtonIndex)
        {
            if(toUpdate)
            {
                [self updateFeeds:toUpdate];
            }
            else
            {
                [self checkForUpdatesAndShowInterface:NO updateWithoutAsking:YES];
            }
        }
    }];
}

- (IBAction)errorButtonPressed:(id)sender
{
    NSUInteger row = [sender tag];
    DHFeed *feed = [self activeFeeds][row];
    [[[UIAlertView alloc] initWithTitle:@"Cheat Sheet Install Failed" message:[NSString stringWithFormat:@"%@ Please check your Internet connection and available free space and try again.", feed.error] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
}

+ (id)alloc
{
    if(singleton)
    {
        return singleton;
    }
    return [super alloc];
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
    if(singleton)
    {
        return singleton;
    }
    self = [super initWithCoder:aDecoder];
    singleton = self;
    return self;
}

@end


================================================
FILE: Dash/DHCheatRepoList.h
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import <Foundation/Foundation.h>
#import "DHFeed.h"

@interface DHCheatRepoList : NSObject

@property (retain) NSDictionary *json;

+ (DHCheatRepoList *)sharedCheatRepoList;
- (NSMutableArray *)allCheatsheets;
- (NSString *)downloadURLForEntry:(DHFeed *)entry;
- (NSString *)versionForEntry:(DHFeed *)entry;
- (void)reload;

@end


================================================
FILE: Dash/DHCheatRepoList.m
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import "DHCheatRepoList.h"
#import "DHLatencyTester.h"

@implementation DHCheatRepoList

+ (DHCheatRepoList *)sharedCheatRepoList
{
    static dispatch_once_t pred;
    static DHCheatRepoList *_cheatList = nil;
    
    dispatch_once(&pred, ^{
        _cheatList = [[DHCheatRepoList alloc] init];
        [_cheatList setUp];
    });
    return _cheatList;
}

- (void)setUp
{
}

- (void)reload
{
    BOOL success = NO;
    NSString *url = [[[[DHLatencyTester sharedLatency] bestMirror] stringByAppendingString:@"zzz/cheatsheets/cheat.json"] stringByConvertingKapeliHttpURLToHttps];
    NSString *json = [NSString stringWithContentsOfURLString:url];
    if(json)
    {
        NSDictionary *newJSON = [NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
        if(newJSON)
        {
            self.json = newJSON;
            success = YES;
        }
    }
    if(!success)
    {
        dispatch_sync(dispatch_get_main_queue(), ^{
            [[DHLatencyTester sharedLatency] performTests:YES];
        });
    }
}

- (NSMutableArray *)allCheatsheets
{
    NSMutableArray *entries = [NSMutableArray array];
    [self.json[@"cheatsheets"] enumerateKeysAndObjectsUsingBlock:^(id key, NSDictionary *value, BOOL *stop) {
        DHFeed *entry = [DHFeed entryWithName:value[@"name"] platform:@"cheatsheet" icon:nil];
        entry.aliases = value[@"aliases"];
        entry._uniqueIdentifier = key;
        entry._icon = [UIImage imageNamed:@"cheatsheet"];
        [entries addObject:entry];
    }];
    if(!entries.count)
    {
        return nil;
    }
    return entries;
}

- (NSString *)versionForEntry:(DHFeed *)entry
{
    if(!self.json)
    {
        return nil;
    }
    NSString *globalVersion = self.json[@"global_version"];
    NSString *version = self.json[@"cheatsheets"][entry.uniqueIdentifier][@"version"];
    if(version)
    {
        return [NSString stringWithFormat:@"Global: %@, Individual: %@", globalVersion, version];
    }
    return nil;
}

- (NSString *)downloadURLForEntry:(DHFeed *)entry
{
    if(!self.json)
    {
        return nil;
    }
    return [[[[DHLatencyTester sharedLatency] bestMirror] stringByAppendingFormat:@"zzz/cheatsheets/%@.tgz", entry.uniqueIdentifier] stringByConvertingKapeliHttpURLToHttps];
}

@end


================================================
FILE: Dash/DHDBNestedResultSorter.h
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import <Foundation/Foundation.h>

@class DHDBResult;

@interface DHDBNestedResultSorter : NSObject {
}

@property (retain) NSMutableDictionary *ranks;

+ (DHDBNestedResultSorter *)sharedSorter;
- (void)saveDefaults:(NSMutableDictionary *)entries;
- (DHDBResult *)sortNestedResults:(DHDBResult *)parentResult;
- (NSInteger)rankForResult:(DHDBResult *)aResult;
- (void)increaseRankForResult:(DHDBResult *)aResult;

@end


================================================
FILE: Dash/DHDBNestedResultSorter.m
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import "DHDBNestedResultSorter.h"
#import "DHDBResult.h"

@implementation DHDBNestedResultSorter

static DHDBNestedResultSorter *_sorter = nil;

+ (DHDBNestedResultSorter *)sharedSorter
{
    @synchronized([DHDBNestedResultSorter class])
	{
		if(!_sorter)
		{
			_sorter = [[DHDBNestedResultSorter alloc] init];
            [_sorter setUp];
		}
	}
	return _sorter;
}

- (void)setUp
{
    self.ranks = [[[NSUserDefaults standardUserDefaults] objectForKey:@"nestedResultSortRanks"] mutableCopy];
    if(!self.ranks)
    {
        self.ranks = [NSMutableDictionary dictionary];
    }
}

- (DHDBResult *)sortNestedResults:(DHDBResult *)parentResult
{
    NSMutableArray *allResults = [parentResult similarResults];
    [allResults insertObject:parentResult atIndex:0];
    parentResult.similarResults = [NSMutableArray array];
    [parentResult setIsActive:NO];
    
    NSCharacterSet *symbolsSet = [NSCharacterSet characterSetWithCharactersInString:@":./\\#"];
    [allResults sortUsingComparator:^NSComparisonResult(DHDBResult *obj1, DHDBResult *obj2) {
        NSInteger rank1 = [self rankForResult:obj1];
        NSInteger rank2 = [self rankForResult:obj2];
        if(rank1 > rank2)
        {
            return NSOrderedAscending;
        }
        else if(rank2 > rank1)
        {
            return NSOrderedDescending;
        }
        if(obj1.perfectMatchOriginal && !obj2.perfectMatchOriginal)
        {
            return NSOrderedAscending;
        }
        else if(obj2.perfectMatchOriginal && !obj1.perfectMatchOriginal)
        {
            return NSOrderedDescending;
        }
        if(obj1.queryIsPrefixOfOriginal && !obj2.queryIsPrefixOfOriginal)
        {
            return NSOrderedAscending;
        }
        else if(obj2.queryIsPrefixOfOriginal && !obj1.queryIsPrefixOfOriginal)
        {
            return NSOrderedDescending;
        }
        if(obj1.queryIsSuffixOfOriginal && !obj2.queryIsSuffixOfOriginal)
        {
            return NSOrderedAscending;
        }
        else if(obj2.queryIsSuffixOfOriginal && !obj1.queryIsSuffixOfOriginal)
        {
            return NSOrderedDescending;
        }
        if(obj1.originalMatchesQueryAtAll && !obj2.originalMatchesQueryAtAll)
        {
            return NSOrderedAscending;
        }
        else if(obj2.originalMatchesQueryAtAll && !obj1.originalMatchesQueryAtAll)
        {
            return NSOrderedDescending;
        }
        NSInteger count1 = [[[obj1 declaredInPage] stringByReplacingOccurrencesOfString:@"..." withString:@""] countOfCharactersInSet:symbolsSet];
        NSInteger count2 = [[[obj2 declaredInPage] stringByReplacingOccurrencesOfString:@"..." withString:@""] countOfCharactersInSet:symbolsSet];
        if(count1 < count2)
        {
            return NSOrderedAscending;
        }
        else if(count2 < count1)
        {
            return NSOrderedDescending;
        }
        return [[obj1 declaredInPage] localizedCaseInsensitiveCompare:[obj2 declaredInPage]];
    }];
    
    DHDBResult *newParent = allResults[0];
    [allResults removeObjectAtIndex:0];
    newParent.similarResults = allResults;
    [newParent setIsActive:YES];
    return newParent;
}

- (NSInteger)rankForResult:(DHDBResult *)aResult
{
    NSMutableDictionary *nestedEntry = (self.ranks)[[aResult name]];
    if(!nestedEntry)
    {
        return 0;
    }
    NSNumber *rank = nestedEntry[[aResult relativePath]];
    if(!rank)
    {
        return 0;
    }
    return [rank integerValue];
}

- (void)increaseRankForResult:(DHDBResult *)aResult
{
    if(aResult.isRemote)
    {
        return;
    }
    NSMutableDictionary *entries = self.ranks;
    if(entries.count > 500)
    {
        [self purgeDictionary:entries];
    }
    NSMutableDictionary *nestedEntry = entries[[aResult name]];
    if(!nestedEntry)
    {
        nestedEntry = [NSMutableDictionary dictionaryWithObject:@1 forKey:[aResult relativePath]];
        entries[[aResult name]] = nestedEntry;
    }
    else
    {
        nestedEntry = [NSMutableDictionary dictionaryWithDictionary:nestedEntry];
        NSNumber *rank = nestedEntry[[aResult relativePath]];
        if([rank integerValue] <= 0)
        {
            nestedEntry[[aResult relativePath]] = @1;
        }
        else
        {
            nestedEntry[[aResult relativePath]] = @([rank integerValue]+1);
        }
        entries[[aResult name]] = nestedEntry;
    }
    [self saveDefaults:entries];
}


- (void)saveDefaults:(NSMutableDictionary *)entries
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:entries forKey:@"nestedResultSortRanks"];
}

- (void)purgeDictionary:(NSMutableDictionary *)entries
{
    NSInteger threshold = 0;
    while(entries.count > 250)
    {
        ++threshold;
        @autoreleasepool {
            NSMutableArray *entriesToRemove = [NSMutableArray array];
            __block NSMutableDictionary *toReplace = [NSMutableDictionary dictionary];
            [entries enumerateKeysAndObjectsUsingBlock:^(id entryKey, id entry, BOOL *stop) {
                NSMutableArray *nestedToRemove = [NSMutableArray array];
                [entry enumerateKeysAndObjectsUsingBlock:^(id nestedKey, id nested, BOOL *stop2) {
                    if([nested integerValue] <= threshold)
                    {
                        [nestedToRemove addObject:nestedKey];
                    }
                }];
                entry = [NSMutableDictionary dictionaryWithDictionary:entry];
                [entry removeObjectsForKeys:nestedToRemove];
                if([entry count] == 0)
                {
                    [entriesToRemove addObject:entryKey];
                }
                else
                {
                    toReplace[entryKey] = entry;
                }
            }];
            [entries removeObjectsForKeys:entriesToRemove];
            [toReplace enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
                entries[key] = obj;
            }];
        }
    }
    for(NSString *entryKey in [entries allKeys])
    {
        NSMutableDictionary *nestedEntry = entries[entryKey];
        for(NSString *nestedKey in [nestedEntry allKeys])
        {
            nestedEntry[nestedKey] = @([nestedEntry[nestedKey] integerValue]-threshold);
        }
    }
}

@end


================================================
FILE: Dash/DHDBResult.h
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import <Foundation/Foundation.h>
#import "DHDocset.h"
#import "DHDBResultSorter.h"

@interface DHDBResult : NSObject

@property (retain) NSString *path, *anchor, *relativePath, *fullPath, *name, *originalName, *type, *platform;
@property (retain) DHDocset *docset;
@property (retain) NSMutableArray *similarResults;
@property (retain) NSString *query;
@property (retain) NSString *_declaredInPage;
@property (retain) NSNumber *distanceFromQuery;
@property (assign) BOOL isHTTP, isSO, isPHP, isRust, isGo, isSwift;
@property (assign) BOOL perfectMatch, queryIsPrefix, queryIsSuffix, perfectMatchOriginal, queryIsPrefixOfOriginal, queryIsSuffixOfOriginal, matchesQueryAtAll, fuzzyCamel, fuzzyPerfect, fuzzy, whitespaceMatch, originalMatchesQueryAtAll, fuzzyShouldIgnore;
@property (retain) NSMutableArray *highlightRanges;
@property (assign) NSInteger fragmentation;
@property (assign) NSInteger actualFragmentation;
@property (assign) BOOL isApple;
@property (assign) NSInteger appleLanguage;
@property (assign) BOOL linkIsSwift;
@property (assign) NSInteger score;
@property (assign) BOOL isAGuide;
@property (assign) BOOL isActive;
@property (assign) BOOL isRemote;
@property (retain) UIImage *_typeImage;
@property (retain) UIImage *_platformImage;
@property (retain) NSString *remoteDocsetName;
@property (retain) NSString *remoteResultURL;
@property (retain) NSString *menuDescription; // used to build the declaredInPage, set it using #<dash_entry_menuDescription=value_encoded>
@property (retain) NSString *appleObjCPath;
@property (retain) NSString *appleSwiftPath;

+ (DHDBResult *)resultWithDocset:(DHDocset *)docset resultSet:(FMResultSet *)rs;
- (void)prepareName;
- (UIImage *)typeImage;
- (UIImage *)platformImage;
- (NSString *)declaredInPage;
- (void)highlightLabel:(UILabel *)label;
- (void)highlightWithQuery:(NSString *)aQuery;
+ (NSDictionary *)highlightDictionary;
- (NSComparisonResult)compare:(DHDBResult *)aResult;
- (NSComparisonResult)levenshteinCompare:(DHDBResult *)aResult;
- (NSComparisonResult)compareFuziness:(DHDBResult *)aResult;
- (float)levenshteinDistance;
- (NSString *)sortType;
- (NSString *)duplicateHash;
- (NSString *)browserDuplicateHash;
- (DHDBResult *)activeResult;
- (NSUInteger)indexOfActiveItem;
- (void)setActiveItemByIndex:(NSUInteger)index;
- (NSString *)webViewURL;

@end


================================================
FILE: Dash/DHDBResult.m
================================================
//
//  Copyright (C) 2016  Kapeli
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#import "DHDBResult.h"
#import "DHAppDelegate.h"
#import "DHCSS.h"

@implementation DHDBResult

static NSSet *commonDeclaredInStylePlatforms;
static NSDictionary *highlightDictionary;

+ (DHDBResult *)resultWithDocset:(DHDocset *)docset resultSet:(FMResultSet *)rs
{
    return [[DHDBResult alloc] initWithDocset:docset resultSet:rs];
}

- (id)initWithDocset:(DHDocset *)docset resultSet:(FMResultSet *)rs
{
    self = [super init];
    if(self)
    {
        self.docset = docset;
        self.platform = self.docset.platform;
        self.isSO = [self.platform isEqualToString:@"soonline"] || [self.platform isEqualToString:@"sooffline"];
        self.path = [rs stringForColumnIndex:0];
        if(!self.path.length)
        {
            return nil;
        }
        NSRange anchorRange = [self.path rangeOfString:@"#"];
        if(anchorRange.location != NSNotFound && anchorRange.location+1 < self.path.length)
        {
            self.anchor = [self.path substringFromDashIndex:anchorRange.location+1];
            self.path = [self.path substringToDashIndex:anchorRange.location];
        }
        
        if([self.platform isEqualToString:@"apple"])
        {
            NSInteger activeLanguage = [DHAppleActiveLanguage currentLanguage];
            if([self.anchor contains:@"<dash_entry_language=objc>"] || [self.anchor contains:@"<dash_entry_language=occ>"])
            {
                if(activeLanguage == DHNewActiveAppleLanguageSwift)
                {
                    return nil;
                }
                self.appleLanguage = DHNewActiveAppleLanguageObjC;
                self.anchor = [self.anchor stringByReplacingOccurrencesOfString:@"<dash_entry_language=objc>" withString:@""];
                self.anchor = [self.anchor stringByReplacingOccurrencesOfString:@"<dash_entry_language=occ>" withString:@""];
            }
            else if([self.anchor contains:@"<dash_entry_language=swift>"])
            {
                if(activeLanguage == DHNewActiveAppleLanguageObjC)
                {
                    return nil;
                }
                self.appleLanguage = DHNewActiveAppleLanguageSwift;
                self.anchor = [self.anchor stringByReplacingOccurrencesOfString:@"<dash_entry_language=swift>" withString:@""];
            }
        }
        BOOL isOSX = ([self.platform isEqualToString:@"macosx"] || [self.platform isEqualToString:@"osx"]);
        if(self.anchor && isOSX && [self.anchor rangeOfString:@"java" options:NSCaseInsensitiveSearch].location != NSNotFound)
        {
            return nil;
        }
        
        self.type = [rs stringForColumnIndex:2];
        if(!self.type.length)
        {
            return nil;
        }
        
        self.isApple = (isOSX || [[self platform] isEqualToString:@"ios"] || [[self platform] isEqualToString:@"iphoneos"] || [self.platform isEqualToString:@"watchos"] || [self.platform isEqualToString:@"tvos"]);
        if(self.isApple)
        {
            if([self.anchor hasSuffix:@"-dash-swift-hack"])
            {
                self.linkIsSwift = YES;
                self.anchor = [self.anchor substringToIndex:self.anchor.length-16];
            }
            self.linkIsSwift = self.linkIsSwift || [self.anchor contains:@"apple_ref/swift/"];
            int active = [DHCSS activeAppleLanguage];
            if(active == DHActiveAppleLanguageObjC && ![docset.name contains:@"Xcode"])
            {
                if(self.linkIsSwift)
                {
                    return nil;
                }
            }
            else if(active == DHActiveAppleLanguageSwift)
            {
                BOOL isObjC = [self.anchor contains:@"apple_ref/occ"];
                if(isObjC)
                {
                    return nil;
                }
            }
        }
        
        BOOL isOnlineGuide = NO;
        if([self.type isEqualToString:@"Guide"] || [self.type isEqualToString:@"Sample"])
        {
            if([self.path hasPrefix:@"gfile://"])
            {
                self.isAGuide = YES;
                self.path = [self.path substringFromDashIndex:8];
                self.fullPath = self.path;
                self.relativePath = self.path;
            }
            else if([self.path hasPrefix:@"ghttp://"] || [self.path hasPrefix:@"ghttps://"])
            {
                self.isAGuide = YES;
                isOnlineGuide = YES;
                self.path = [self.path substringFromDashIndex:8];
                self.fullPath = self.path;
                self.relativePath = self.path;
            }
        }
        
        if(!isOnlineGuide)
        {
            if([self.path hasPrefix:@"http://"] || [self.path hasPrefix:@"https://"] || self.isSO || [self.path hasPrefix:@"dash-apple-api://"])
            {
                self.isHTTP = YES;
                self.fullPath = self.path;
                if([self.platform isEqualToString:@"sooffline"])
                {
                    self.fullPath = [self.fullPath stringByAppendingFormat:@"?dbPath=%@", [self.docset.sqlPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
                }
            }
            else
            {
                self.fullPath = [@"file://" stringByAppendingString:[[self.docset.path stringByAppendingPathComponent:@"Contents/Resources/Documents"] stringByAppendingPathComponent:self.path]];
            }
            self.fullPath = (self.anchor) ? [self.fullPath stringByAppendingFormat:@"#%@", self.anchor] : self.fullPath;
            self.relativePath = (self.anchor) ? [self.path stringByAppendingFormat:@"#%@", self.anchor] : self.path;
        }
        self.name = [rs stringForColumnIndex:1];
        if(!self.name.length)
        {
            return nil;
        }
        self.originalName = self.name;
        self.similarResults = [NSMutableArray array];
        [self prepareName];
    }
    return self;
}

- (void)prepareName
{
    if(self.isSO)
    {
        if([self.anchor hasPrefix:@"dash-score-"])
        {
            self.score = [[self.anchor substringFromIndex:11] integerValue];
        }
    }
    if(self.isApple)
    {
        self.isApple = YES;
    }
    if([self.platform isEqualToString:@"unity3d"])
    {
        self.name = [self.name stringByReplacingOccurrencesOfString:@"%47" withString:@"/"];
        self.originalName = [self.originalName stringByReplacingOccurrencesOfString:@"%47" withString:@"/"];
    }
    if([self.platform isEqualToString:@"go"] || [self.platform isEqualToString:@"godoc"])
    {
        self.isGo = YES;
    }
    
    NSString *shorteningFamily = self.docset.nameShorteningFamily;
    NSString *parseFamily = (shorteningFamily) ? shorteningFamily : self.docset.parseFamily;
    parseFamily = (parseFamily && parseFamily.length) ? parseFamily : self.platform;
    if(([parseFamily isEqualToString:@"python"] || [parseFamily isEqualToString:@"flask"] || [parseFamily isEqualToString:@"scipy"] || [parseFamily isEqualToString:@"numpy"] || [parseFamily isEqualToString:@"pandas"] || [parseFamily isEqualToString:@"sqlalchemy"] || [parseFamily isEqualToString:@"tornado"] || [parseFamily isEqualToString:@"matplotlib"] || [parseFamily isEqualToString:@"salt"] || [parseFamily isEqualToString:@"jinja"] || ([self.platform isEqualToString:@"ocaml"] && ([self.type isEqualToString:@"Type"] || [self.type isEqualToString:@"Value"])) || [parseFamily isEqualToString:@"mono"] || [parseFamily isEqualToString:@"xamarin"] || [parseFamily isEqualToString:@"sencha"] || [parseFamily isEqualToString:@"extjs"] || [parseFamily isEqualToString:@"titanium"] || [parseFamily isEqualToString:@"twisted"] || [parseFamily isEqualToString:@"unity3d"] || [parseFamily isEqualToString:@"django"] || ([parseFamily isEqualToString:@"javascript"] && ![self.type isEqualToString:@"Function"] && ![self.type isEqualToString:@"Keyword"]) || [parseFamily isEqualToString:@"actionscript"] || [parseFamily isEqualToString:@"yui"] || [parseFamily isEqualToString:@"vsphere"] || ([self.platform isEqualToString:@"SproutCore"] && ![self.type isClassType] && ![self.type isEqualToString:@"Protocol"] && ![self.type isEqualToString:@"Delegate"])) && ![self.type isPackageType])
    {
        self.name = [self.name lastPackageComponent:@"."];
    }
    else if([parseFamily isEqualToString:@"apple"])
    {
        self.name = [self.name substringFromLastOccurrenceOfString:@"."];
    }
    else if([parseFamily isEqualToString:@"jQuery"] || [parseFamily isEqualToString:@"jqueryui"])
    {
        if([self.name hasPrefix:@"."])
        {
            self.name = [self.name substringFromDashIndex:1];
        }
        else if([self.name hasPrefix:@":"])
        {
            self.name = [self.name substringFromDashIndex:1];
        }
        else if([self.name hasCaseInsensitivePrefix:@"jQuery."])
        {
            self.name = [self.name substringFromDashIndex:@"jQuery.".length];
        }
    }
    else if([self.platform isEqualToString:@"net"] && ![@[@"Class", @"Delegate", @"Interface", @"Namespace", @"Constructor", @"Enum", @"Struct", @"Conversion"] containsObject:self.type])
    {
        self.name = [self.name substringFromString:@"."];
    }
    else if([self.platform isEqualToString:@"matlab"])
    {
        if([self.type isEqualToString:@"Class"])
        {
            self.name = [self.name lastPackageComponent:@"."];
        }
    }
    else if([self.platform isEqualToString:@"handlebars"])
    {
        if([self.type isEqualToString:@"Method"])
        {
            self.name = [self.name substringFromLastOccurrenceOfString:@"."];
        }
    }
    else if([parseFamily isEqualToString:@"lodash"])
    {
        if([self.name hasPrefix:@"_."])
        {
            self.name = [self.name substringFromIndex:2];
        }
    }
    else if([parseFamily isEqualToString:@"jquerym"])
    {
        if([self.name hasCaseInsensitivePrefix:@"jQuery.mobile."])
        {
            self.name = [self.name substringFromDashIndex:@"jQuery.mobile.".length];
        }
    }
    else if([parseFamily isCaseInsensitiveEqual:@"smarty"])
    {
        self.name = [self.name substringFromString:@"->"];
    }
    else if(([parseFamily isEqualToString:@"scala"] || [parseFamily isEqualToString:@"scaladoc"] || [parseFamily isEqualToString:@"playscala"] || [parseFamily isEqualToString:@"akka"]) && ![self.type isPackageType])
    {
        self.name = [self.name lastPackageComponent:@"."];
    }
    else if([parseFamily isEqualToString:@"ember"] && ![self.type isPackageType] && ![self.type isClassType] && ![self.type isEqualToString:@"Guide"])
    {
        self.name = [self.name lastPackageComponent:@"."];
    }
    else if([self.platform isEqualToString:@"erlang"] || [parseFamily isEqualToString:@"erlang_shortening"])
    {
        self.name = [self.name lastPackageComponent:@":"];
        NSInteger location = [self.name rangeOfString:@"/"].location;
        if(location != NSNotFound && location != 0)
        {
            self.name = [self.name substringToDashIndex:location];
        }
    }
    else if([self.platform isEqualToString:@"elixir"] || [self.platform isEqualToString:@"hex"] || [parseFamily isEqualToString:@"elixir_shortening"])
    {
        if(![@[@"Exception", @"Protocol", @"Module"] containsObject:self.type] && ![self.type isPackageType] && ![self.type isClassType] && ![self.type isEqualToString:@"Guide"])
        {
            self.name = [self.name lastPackageComponent:@"."];
            self.name = [self.name substringToLastOccurrenceOfString:@"/"];
        }
    }
    else if(([self.platform isEqualToString:@"dartlang"] || [parseFamily isEqualToString:@"dartlang"] || [self.platform isEqualToString:@"polymerdart"] || [self.platform isEqualToString:@"angulardart"]) && ![self.type isPackageType])
    {
        if([self.type isEqualToString:@"Constructor"])
        {
            if([[self.name substringFromLastOccurrenceOfString:@"."] firstCharIsLowercase])
            {
                self.name = [self.name lastTwoPackageComponents:@"."];
            }
            else
            {
                self.name = [self.name substringFromLastOccurrenceOfString:@"."];
            }
        }
        else
        {
            self.name = [self.name substringFromLastOccurrenceOfString:@"."];
        }
    }
    else if((([parseFamily isEqualToString:@"go"] || [self.platform isEqualToString:@"godoc"]) && ![self.type isEqualToString:@"Package"]) || ([self.platform isEqualToString:@"zepto"] && ![self.type isEqualToString:@"Module"]))
    {
        self.name = [self.name substringFromString:@"."];
    }
    else if(([parseFamily isEqualToString:@"compass"] && ![self.type isEqualToString:@"Module"]) || [parseFamily isEqualToString:@"dojo"])
    {
        self.name = [self.name lastPackageComponent:@"/"];
    }
    else if([self.platform isEqualToString:@"ee"])
    {
        self.name = [self.name substringFromString:@"::"];
    }
    else if([parseFamily isEqualToString:@"cappuccino"] || [self.platform isEqualToString:@"cvcpp"] || [self.platform isEqualToString:@"drupal"] || [self.platform isEqualToString:@"zend"] || [self.platform isEqualToString:@"cocos2dx"] || [self.platform isEqualToString:@"doxy"] || [self.platform isEqualToString:@"doxygen"] || [parseFamily isEqualToString:@"doxy"] || [parseFamily isEqualToString:@"doxygen"])
    {
        self.name = [self.name lastPackageComponent:@"::"];
    }
    else if([self.platform isEqualToString:@"php"])
    {
        self.name = [self.name lastPackageComponent:@"::"];
        self.isPHP = YES;
    }
    else if([self.platform isEqualToString:@"rust"])
    {
        if(![self.type isEqualToString:@"Module"])
        {
            self.name = [self.name lastPackageComponent:@"::"];
        }
        self.isRust = YES;
    }
    else if([self.platform isEqualToString:@"swift"])
    {
        if([@[@"Method", @"Variable", @"Constant", @"Alias"] containsObject:self.type])
        {
            self.name = [self.name substringFromString:@"."];
        }
        self.isSwift = YES;
    }
    else if([self.platform isEqualToString:@"wordpress"] && [self.type isEqualToString:@"Method"]&& [self.name contains:@"::"])
    {
        self.name = [self.name substringFromLastOccurrenceOfString:@"::"];
    }
    else if([parseFamily isEqualToString:@"prototype"] && [self.type isEqualToString:@"Constructor"] && [self.name hasCaseInsensitivePrefix:@"new "])
    {
        self.name = [self.name substringFromDashIndex:4];
    }
    else if([parseFamily isEqualToString:@"cpp"] || [parseFamily isEqualToString:@"cocos2dx"])
    {
        self.name = [[self.name lastPackageComponent:@"::"] stringByUnescapingFromHTML];
        self.originalName = [self.originalName stringByUnescapingFromHTML];
    }
    else if([self.platform isEqualToString:@"awsjs"])
    {
        if(![@[@"Guide", @"Section", @"Sample"] containsObject:self.type])
        {
            if(![self.type isPackageType] && ![self.type isClassType])
            {
                self.name = [self.name substringFromString:@"."];
            }
        }
    }
    else if([parseFamily isEqualToString:@"ruby"] || [parseFamily isEqualToString:@"rubyGems"] || [parseFamily isEqualToString:@"rails"])
    {
        if([parseFamily isEqualToString:@"rails"])
        {
            self.name = [self.name stringByUnescapingFromHTML];
            self.originalName = [self.originalName stringByUnescapingFromHTML];
        }
        if(![@[@"Guide", @"Section", @"Sample"] containsObject:self.type])
        {
            if([self.name contains:@"::"])
            {
                self.name = [self.name lastPackageComponent:@"::"];
            }
            if(![self.type isPackageType] && ![self.type isClassType])
            {
                if([self.name contains:@"#"])
                {
                    self.name = [self.name substringFromString:@"#"];
                }
                else
                {
                    self.name = [self.name substringFromString:@"."];
                }
            }
        }
    }
    else if([self.platform isEqualToString:@"laravel"] || [self.platform isEqualToString:@"phpp"] || [parseFamily isEqualToString:@"phpShortening"] || [self.platform isEqualToString:@"joomla"] || [self.platform isEqualToString:@"symfony"] || [self.platform isEqualToString:@"cakephp"] || [self.platform isEqualToString:@"typo3"])
    {
        if(![self.type isPackageType] && ![self.type isEqualToString:@"Function"])
        {
            self.name = [self.name lastPackageComponent:@"\\"];
            self.name = [self.name lastPackageComponent:@"::"];
        }
    }
    else if(([parseFamily isEqualToString:@"yard"] || [parseFamily isEqualToString:@"qt"] || [parseFamily isEqualToString:@"yii"]) && [self.name rangeOfString:@"::"].location != NSNotFound)
    {
        self.name = [self.name lastPackageComponent:@"::"];
    }
    else if([parseFamily isEqualToString:@"manPages"])
    {
        NSInteger loc = [self.name rangeOfString:@"(" options:NSBackwardsSearch].location;
        if(loc != NSNotFound)
        {
            self.name = [self.name substringToDashIndex:loc];
        }
    }
    else if([parseFamily isEqualToString:@"java"] || [parseFamily isEqualToString:@"playjava"] || [parseFamily isEqualToString:@"javafx"] || [parseFamily isEqualToString:@"groovy"])
    {
        self.name = [self.name stringByUnescapingFromHTML];
        self.originalName = self.name;
    }
    
    if([self.fullPath contains:@"<dash_entry_name="])
    {
        NSString *newName = [[self.fullPath substringBetweenString:@"<dash_entry_name=" andString:@">"] stringByReplacingPercentEscapes];
        if(newName.length)
        {
            self.name = newName;
        }
    }
    if([self.fullPath contains:@"<dash_entry_originalName="])
    {
        NSString *newOriginalName = [[self.fullPath substringBetweenString:@"<dash_entry_originalName=" andString:@">"] stringByReplacingPercentEscapes];
        if(newOriginalName.length)
        {
            self.originalName = newOriginalName;
        }
    }
    if([self.fullPath contains:@"<dash_entry_menuDescription="])
    {
        NSString *newMenuDescription = [[self.fullPath substringBetweenString:@"<dash_entry_menuDescription=" andString:@">"] stringByReplacingPercentEscapes];
        if(newMenuDescription.length)
        {
            self.menuDescription = newMenuDescription;
        }
    }
    if([self.fullPath contains:@"<dash_entry_objcPath="])
    {
        NSString *objcPath = [[self.fullPath substringBetweenString:@"<dash_entry_objcPath=" andString:@">"] stringByReplacingPercentEscapes];
        if(objcPath.length)
        {
            self.appleObjCPath = objcPath;
        }
    }
    if([self.fullPath contains:@"<dash_entry_swiftPath="])
    {
        NSString *swift = [[self.fullPath substringBetweenString:@"<dash_entry_swiftPath=" andString:@">"] stringByReplacingPercentEscapes];
        if(swift.length)
        {
            self.appleSwiftPath = swift;
        }
    }
    while([self.fullPath contains:@"<dash_entry_"])
    {
        NSString *toRemove = [self.fullPath substringBetweenString:@"<dash_entry_" andString:@">"];
        if(toRemove.length)
        {
            toRemove = [NSString stringWithFormat:@"<dash_entry_%@>", toRemove];
            self.fullPath = [self.fullPath stringByReplacingOccurrencesOfString:toRemove withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, self.fullPath.length)];
            self.relativePath = [self.relativePath stringByReplacingOccurrencesOfString:toRemove withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, self.relativePath.length)];
            self.path = [self.path stringByReplacingOccurrencesOfString:toRemove withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, self.path.length)];
        }
        else
        {
            break;
        }
    }
}

- (NSString *)description
{
    return [NSString stringWithFormat:@"Name: %@, Full Path: %@, Platform: %@, Type: %@, Similars: %@", self.name, self.fullPath, self.platform, self.type, self.similarResults];
}

- (BOOL)isEqual:(DHDBResult *)someResult
{
    NSString *myFamily = self.docset.parseFamily;
    NSString *theirFamily = someResult.docset.parseFamily;
    if(self.isSO && someResult.isSO)
    {
        return [self.path isEqualToString:someResult.path];
    }
    return ([self.name isEqualToString:someResult.name] && [self.type isEqualToString:someResult.type] && ([self.platform isEqualToString:someResult.platform] || (myFamily.length && [myFamily isEqualToString:@"cheatsheet"] && theirFamily.length && [myFamily isEqualToString:theirFamily])));
}

- (UIImage *)typeImage
{
    if(self._typeImage)
    {
        return self._typeImage;
    }
    UIImage *image = [UIImage imageNamed:self.type];
    return image;
}

- (UIImage *)platformImage
{
    if(self._platformImage)
    {
        return self._platformImage;
    }
    return self.docset.icon;
}

- (NSString *)declaredInPage
{
    if(self._declaredInPage)
    {
        return self._declaredInPage;
    }
    if(self.menuDescription)
    {
        self._declaredInPage = [@" - " stringByAppendingString:self.menuDescription];
        return self._declaredInPage;
    }
    if(self.isAGuide)
    {
        NSString *toAppend = self.originalName;
        for(NSString *token in @[@"/Conceptual/", @"/GettingStarted/", @"/General/", @"releasenotes/", @"samplecode/", @"featuredarticles/", @"technotes/", @"documentation/", @"/"])
        {
            NSRange tokenRange = [self.path rangeOfString:token];
            if(tokenRange.location != NSNotFound)
            {
                NSString *guideName = [[self.path substringFromDashIndex:NSMaxRange(tokenRange)] substringToString:@"/"];
                guideName = [guideName removePrefixIfExists:@"DevPedia-"];
                guideName = [guideName removePrefixIfExists:@"xcode_guide-"];
                guideName = [guideName stringByReplacingOccurrencesOfString:@"_" withString:@" "];
                toAppend = [guideName stringByAppendingFormat:@" - %@", self.originalName];
                break;
            }
        }
        self._declaredInPage = [@" - " stringByAppendingString:toAppend];
        return self._declaredInPage;
    }
    if([self.platform isEqualToString:@"lisp"])
    {
        self._declaredInPage = [@" - " stringByAppendingString:[self.path lastPathComponent]];
        return self._declaredInPage;
    }
    if([self.platform isEqualToString:@"ee"] && [self.originalName contains:@"::"])
    {
        self._declaredInPage = [@" - " stringByAppendingString:self.originalName];
        return self._declaredInPage;
    }
    if([self.platform isEqualToString:@"net"])
    {
        NSString *fqn = [self.relativePath substringFromStringReturningNil:@"#dashFQN"];
        if(fqn && fqn.length)
        {
            fqn = [fqn stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            self._declaredInPage = [@" - " stringByAppendingString:fqn];
            return self._declaredInPage;
        }
        else
        {
            self._declaredInPage = [@" - " stringByAppendingString:self.originalName];
            return self._declaredInPage;
        }
    }
    if([self.platform isEqualToString:@"moo"])
    {
        if([[[[self.path lastPathComponent] stringByDeletingPathExtension] stringByDeletingPathFragment] contains:@"-"])
        {
            self._declaredInPage = [@" - " stringByAppendingString:self.originalName];
            return self._declaredInPage;
        }
    }
    NSString *declaredInStyle = self.docset.declaredInStyle;
    NSString *parseFamily = self.docset.parseFamily;
    parseFamily = (declaredInStyle) ? declaredInStyle : parseFamily;
    if([[DHDBResult commonDeclaredInStylePlatforms] containsObject:self.platform] || ([self.platform isEqualToString:@"wordpress"] && [self.originalName contains:@"::"] && [self.type isEqualToString:@"Method"]) || ([self.platform isEqualToString:@"matlab"] && [self.type isEqualToString:@"Class"]) || ([self.platform isEqualToString:@"actionscript"] && ![self.type isEqualToString:@"Class"]) || ([self.platform isEqualToString:@"grails"] && [self.type isEqualToString:@"Guide"]) || [parseFamily isEqualToString:@"cheatsheet"] || [parseFamily isEqualToString:@"originalName"])
    {
        self._declaredInPage = [@" - " stringByAppendingString:self.originalName];
        return self._declaredInPage;
    }
    else if([self.platform isEqualToString:@"cappuccino"] || [self.platform isEqualToString:@"zend"] || [self.platform isEqualToString:@"typo3"] || [self.platform isEqualToString:@"cocos2dx"] || [self.platform isEqualToString:@"doxy"] || [self.platform isEqualToString:@"doxygen"] || [parseFamily isEqualToString:@"doxy"] || [parseFamily isEqualToString:@"doxygen"])
    {
        if([self.type isClassType] || [self.type isPackageType] || [self.type isEqualToString:@"Interface"] || [self.type isEqualToString:@"Exception"] || [self.type isEqualToString:@"Union"] || [self.type isEqualToString:@"Struct"] || [self.type isEqualToString:@"Guide"] || [self.type isEqualToString:@"Sample"] || [self.type isEqualToString:@"Protocol"] || [self.type isEqualToString:@"Delegate"])
        {
            self._declaredInPage = [@" - " stringByAppendingString:self.originalName];
            return self._declaredInPage;
        }
        NSString *filename = [[[self.path lastPathComponent] stringByDeletingPathExtension] stringByDeletingPathFragment];
        if([filename hasCaseInsensitivePrefix:@"dir_"])
        {
            self._declaredInPage = [@" - " stringByAppendingString:self.originalName];
            return self._declaredInPage;
        }
        if(filename.length == 128)
        {
            filename = [filename substringToDashIndex:96];
            NSRange alphaRange = [filename rangeOfCharacterFromSet:[NSCharacterSet lowercaseLetterCharacterSet] options:NSBackwardsSearch];
            if(alphaRange.location != NSNotFound)
            {
                filename = [filename substringToDashIndex:alphaRange.location+1];
                filename = [filename stringByAppendingString:@"..."];
            }
            else
            {
                self._declaredInPage = [@" - " stringByAppendingString:self.originalName];
                return self._declaredInPage;
            }
        }
        if([filename hasCaseInsensitivePrefix:@"group_"])
        {
            filename = [filename substringFromDashIndex:6];
        }
        if([filename hasCaseInsensitivePrefix:@"category"])
        {
            filename = [filename substringFromDashIndex:8];
        }
        else if([filename hasCaseInsensitivePrefix:@"interface"])
        {
            filename = [filename substringFromDashIndex:9];
        }
        else if([filename hasCaseInsensitivePrefix:@"class"])
        {
            filename = [filename substringFromDashIndex:5];
        }
        else if([filename hasCaseInsensitivePrefix:@"namespace"])
        {
            filename = [filename substringFromDashIndex:9];
        }
        else if([filename hasCaseInsensitivePrefix:@"struct"])
        {
            filename = [filename substringFromDashIndex:6];
        }
        else if([filename hasCaseInsensitivePrefix:@"union"])
        {
            filename = [filename substringFromDashIndex:5];
        }
        NSString *declaredName = [[[[[[[[[[[[[[[[[[[[[[[[filename stringByReplacingOccurrencesOfString:@"_1" withString:@":"] stringByReplacingOccurrencesOfString:@"_2" withString:@"/"] stringByReplacingOccurrencesOfString:@"_3" withString:@"<"] stringByReplacingOccurrencesOfString:@"_4" withString:@">"] stringByReplacingOccurrencesOfString:@"_5" withString:@"*"] stringByReplacingOccurrencesOfString:@"_6" withString:@"&"] stringByReplacingOccurrencesOfString:@"_7" withString:@"|"] stringByReplacingOccurrencesOfString:@"_9" withString:@"!"] stringByReplacingOccurrencesOfString:@"_00" withString:@","] stringByReplacingOccurrencesOfString:@"_01" withString:@" "] stringByReplacingOccurrencesOfString:@"_02" withString:@"{"] stringByReplacingOccurrencesOfString:@"_03" withString:@"}"] stringByReplacingOccurrencesOfString:@"_04" withString:@"?"] stringByReplacingOccurrencesOfString:@"_05" withString:@"^"] stringByReplacingOccurrencesOfString:@"_06" withString:@"%"] stringByReplacingOccurrencesOfString:@"_07" withString:@"("] stringByReplacingOccurrencesOfString:@"_08" withString:@")"] stringByReplacingOccurrencesOfString:@"_09" withString:@"+"] stringByReplacingOccurrencesOfString:@"_0A" withString:@"="] stringByReplacingOccurrencesOfString:@"_0B" withString:@"$"] stringByReplacingOccurrencesOfString:@"_0C" withString:@"\\"] stringByReplacingOccurrencesOfString:@"_8" withString:@"."] stringByReplacingOccurrencesOfString:@"__" withString:@" "] stringByReplacingOccurrencesOfString:@"::" withString:@"\\"];
        NSRange underRange = [declared
Download .txt
gitextract_ynms4_oa/

├── .gitignore
├── CHANGELOG.md
├── Dash/
│   ├── Base.lproj/
│   │   └── Main.storyboard
│   ├── DHAppDelegate.h
│   ├── DHAppDelegate.m
│   ├── DHAppUpdateChecker.h
│   ├── DHAppUpdateChecker.m
│   ├── DHAppleAPIProtocol.h
│   ├── DHAppleAPIProtocol.m
│   ├── DHAppleActiveLanguage.h
│   ├── DHAppleActiveLanguage.m
│   ├── DHBlockProtocol.h
│   ├── DHBlockProtocol.m
│   ├── DHBrowserCell.xib
│   ├── DHBrowserTableView.h
│   ├── DHBrowserTableView.m
│   ├── DHBrowserTableViewCell.h
│   ├── DHBrowserTableViewCell.m
│   ├── DHCSS.h
│   ├── DHCSS.m
│   ├── DHCheatRepo.h
│   ├── DHCheatRepo.m
│   ├── DHCheatRepoList.h
│   ├── DHCheatRepoList.m
│   ├── DHDBNestedResultSorter.h
│   ├── DHDBNestedResultSorter.m
│   ├── DHDBResult.h
│   ├── DHDBResult.m
│   ├── DHDBResultSorter.h
│   ├── DHDBResultSorter.m
│   ├── DHDBSearchController.h
│   ├── DHDBSearchController.m
│   ├── DHDBSearcher.h
│   ├── DHDBSearcher.m
│   ├── DHDocset.h
│   ├── DHDocset.m
│   ├── DHDocsetBrowser.h
│   ├── DHDocsetBrowser.m
│   ├── DHDocsetBrowserViewModel.h
│   ├── DHDocsetBrowserViewModel.m
│   ├── DHDocsetDownloader.h
│   ├── DHDocsetDownloader.m
│   ├── DHDocsetIndexer.h
│   ├── DHDocsetIndexer.m
│   ├── DHDocsetManager.h
│   ├── DHDocsetManager.m
│   ├── DHDocsetTransferrer.h
│   ├── DHDocsetTransferrer.m
│   ├── DHEntryBrowser.h
│   ├── DHEntryBrowser.m
│   ├── DHFeed.h
│   ├── DHFeed.m
│   ├── DHFeedResult.h
│   ├── DHFeedResult.m
│   ├── DHFileDownload.h
│   ├── DHFileDownload.m
│   ├── DHImageCache.h
│   ├── DHImageCache.m
│   ├── DHJavaScript.h
│   ├── DHJavaScript.m
│   ├── DHJavaScriptBridge.h
│   ├── DHJavaScriptBridge.m
│   ├── DHLatencyTestResult.h
│   ├── DHLatencyTestResult.m
│   ├── DHLatencyTester.h
│   ├── DHLatencyTester.m
│   ├── DHLoadingCell.xib
│   ├── DHNavigationAnimator.h
│   ├── DHNavigationAnimator.m
│   ├── DHNavigationController.h
│   ├── DHNavigationController.m
│   ├── DHNestedViewController.h
│   ├── DHNestedViewController.m
│   ├── DHPreferences.h
│   ├── DHPreferences.m
│   ├── DHQueuedDB.h
│   ├── DHQueuedDB.m
│   ├── DHRemote.h
│   ├── DHRemote.m
│   ├── DHRemoteBrowser.h
│   ├── DHRemoteBrowser.m
│   ├── DHRemoteImage.h
│   ├── DHRemoteImage.m
│   ├── DHRemoteProtocol.h
│   ├── DHRemoteProtocol.m
│   ├── DHRemoteServer.h
│   ├── DHRemoteServer.m
│   ├── DHRepo.h
│   ├── DHRepo.m
│   ├── DHRepoCell.xib
│   ├── DHRepoTableView.h
│   ├── DHRepoTableView.m
│   ├── DHRepoTableViewCell.h
│   ├── DHRepoTableViewCell.m
│   ├── DHRightDetailLabel.h
│   ├── DHRightDetailLabel.m
│   ├── DHSearchDisplayController.h
│   ├── DHSearchDisplayController.m
│   ├── DHSplitViewController.h
│   ├── DHSplitViewController.m
│   ├── DHTarixIndex.h
│   ├── DHTarixIndex.m
│   ├── DHTarixProtocol.h
│   ├── DHTarixProtocol.m
│   ├── DHTocBrowser.h
│   ├── DHTocBrowser.m
│   ├── DHTransferFeed.h
│   ├── DHTransferFeed.m
│   ├── DHType.h
│   ├── DHType.m
│   ├── DHTypeBrowser.h
│   ├── DHTypeBrowser.m
│   ├── DHTypes.h
│   ├── DHTypes.m
│   ├── DHUnarchiver.h
│   ├── DHUnarchiver.m
│   ├── DHUserRepo.h
│   ├── DHUserRepo.m
│   ├── DHUserRepoList.h
│   ├── DHUserRepoList.m
│   ├── DHWebProgressView.h
│   ├── DHWebProgressView.m
│   ├── DHWebView.h
│   ├── DHWebView.m
│   ├── DHWebViewController.h
│   ├── DHWebViewController.m
│   ├── DHWindow.h
│   ├── DHWindow.m
│   ├── Dash iOS.xcodeproj/
│   │   ├── project.pbxproj
│   │   └── project.xcworkspace/
│   │       ├── contents.xcworkspacedata
│   │       └── xcshareddata/
│   │           ├── Dash iOS.xccheckout
│   │           └── Dash iOS.xcscmblueprint
│   ├── Dash-Info.plist
│   ├── Dash-Prefix.pch
│   ├── Defaults.plist
│   ├── FMDatabase.h
│   ├── FMDatabase.m
│   ├── FMDatabaseAdditions.h
│   ├── FMDatabaseAdditions.m
│   ├── FMDatabasePool.h
│   ├── FMDatabasePool.m
│   ├── FMDatabaseQueue.h
│   ├── FMDatabaseQueue.m
│   ├── FMResultSet.h
│   ├── FMResultSet.m
│   ├── Images.xcassets/
│   │   ├── AppIcon.appiconset/
│   │   │   └── Contents.json
│   │   ├── Empty Placeholders/
│   │   │   ├── placeholder_docsets.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── placeholder_transfer.imageset/
│   │   │       └── Contents.json
│   │   ├── Platforms/
│   │   │   ├── Contents.json
│   │   │   ├── Dash.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Google.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Mac.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Other.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── SproutCore.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Stack Overflow.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── actionscript.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── akka.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── android.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── angular.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── angulardart.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── angularjs.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── angularts.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ansible.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── apache.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── apple.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── applescript.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── arduino.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── awesome.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── awsjs.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── backbone.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── bash.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── boost.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── bootstrap.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── bourbon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── c.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cakephp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cappuccino.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cf.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── chai.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cheatsheet.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── chef.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cljlib.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── clojure.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cmake.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cocoadocs_platform.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cocoapods.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cocos2d.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cocos2dx.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── codeigniter.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── coffee.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── compass.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cordova.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── corona.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── couchdb.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cpp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── craft.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── css.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cvc.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cvcpp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cvj.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── cvp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── d3.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── dartdocs.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── dartlang.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── django.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── docker.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── doctrine.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── dojo.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── dom.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── drupal.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ee.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── elasticsearch.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── elisp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── elixir.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ember.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── emmet.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── erlang.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── express.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── extjs.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── flask.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── foundation.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── git.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── github.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── gl2.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── gl3.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── gl4.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── glib.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── go.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── godoc.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── gradle.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── grails.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── groovy.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── grunt.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── gulp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── hackage.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── haml.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── handlebars.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── haskell.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── hex.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── html.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ionic.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── iphone.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jQuery.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jade.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jasmine.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── java.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── javadoc.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── javafx.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── javascript.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jee6.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jee7.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jee8.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jekyll.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jinja.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── joomla.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jquerym.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── jqueryui.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── julia.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── knockout.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── kobold2d.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── laravel.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── latex.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── less.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── linux.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── lisp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── lodash.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── lua.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── manPages.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── marionette.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── markdown.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── matlab.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── matplotlib.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── meteor.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── mocha.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── moment.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── mongodb.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── mongoose.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── mono.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── moo.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── mysql.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── neat.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── net.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── nginx.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── nodejs.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── numpy.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ocaml.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── opencv.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── pandas.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── perl.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── phalcon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── phonegap.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── php.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── phpp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── phpunit.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── playjava.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── playscala.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── polymerdart.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── processing.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── prototype.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── psql.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── pug.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── puppet.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── python.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── qt.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── r.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── racket.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── rails.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── react.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── redis.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── require.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ruby.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── rubyGems.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── rubymotion.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── rust.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sails.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── salt.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sass.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── scala.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── scaladoc.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── scipy.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── semantic.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sencha.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sinon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── smarty.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sooffline.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── soonline.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sparrow.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── spring.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sqlalchemy.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── sqlite.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── statamic.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── stylus.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── susy.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── svg.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── swift.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── symfony.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── tcl.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── titanium.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── tornado.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── tvos.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── twig.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── twisted.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── typescript.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── typo3.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── underscore.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── unity3d.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── vagrant.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── vim.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── vsphere.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── vue.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── watchos.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── wordpress.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── xamarin.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── xojo.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── xslt.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── xul.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── yii.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── yui.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── zend.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── zepto.imageset/
│   │   │       └── Contents.json
│   │   ├── Preferences/
│   │   │   ├── Contents.json
│   │   │   ├── cheat_repo.imageset/
│   │   │   │   ├── Contents.json
│   │   │   │   ├── cheat_repo.psd
│   │   │   │   └── cheat_repo@2x.psd
│   │   │   ├── main_repo.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── transfer_repo.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── user_repo.imageset/
│   │   │       ├── Contents.json
│   │   │       ├── user_repo.psd
│   │   │       └── user_repo@2x.psd
│   │   ├── Repos/
│   │   │   ├── checkmark.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── download_button_arrow.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── download_button_background.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── error.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── transfer_button.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── trash.imageset/
│   │   │       └── Contents.json
│   │   ├── Types/
│   │   │   ├── Abbreviation.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Alias.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Annotation.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Attribute.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Axiom.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Binding.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Block.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Bookmark.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Builtin.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Callback.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Category.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Class.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Collection.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Column.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Command.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Component.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Constant.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Constructor.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Contents.json
│   │   │   ├── Control Structure.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Conversion.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Data Source.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Database.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Decorator.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Define.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Delegate.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── DeletedSnippet.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Device.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Diagram.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Directive.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Element.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Entry.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Enum.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Environment.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Error.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Event.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Exception.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Expression.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Extension.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Field.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── File.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Filter.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Flag.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Foreign Key.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Framework.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Function.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Global.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Glossary.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Guide.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Handler.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Helper.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Hook.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Index.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Indirection.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Inductive.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Instance.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Instruction.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Interface.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Iterator.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Keyword.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Kind.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Lemma.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Library.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Literal.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Macro.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Member.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Message.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Method.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Mixin.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Modifier.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Module.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Namespace.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── NewSnippet.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Node.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Notation.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Object.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Operator.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Option.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Package.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Parameter.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Pattern.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Pipe.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Plugin.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Procedure.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Projection.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Property.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Protocol.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Provider.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Provisioner.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Query.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Record.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Reference.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Register.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Relationship.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Report.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Request.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Resource.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Role.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Sample.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Schema.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Script.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Section.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Sender.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Service.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Setting.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Shortcut.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Signature.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Snippet.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Special Form.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── State.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Statement.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Struct.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Style.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Subroutine.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Syntax.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Table.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Tactic.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Tag.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Template.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Test.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Trait.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Trigger.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Type.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Union.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Unknown.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Value.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Variable.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Variant.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── View.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Web.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── WebSearch.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Widget.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Word.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── _DashAnnotations.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── _Struct.imageset/
│   │   │       └── Contents.json
│   │   └── WebView/
│   │       ├── back.imageset/
│   │       │   └── Contents.json
│   │       ├── collapse.imageset/
│   │       │   └── Contents.json
│   │       ├── expand.imageset/
│   │       │   └── Contents.json
│   │       ├── forward.imageset/
│   │       │   └── Contents.json
│   │       ├── tocMenu.imageset/
│   │       │   └── Contents.json
│   │       ├── zoomIn.imageset/
│   │       │   └── Contents.json
│   │       └── zoomOut.imageset/
│   │           └── Contents.json
│   ├── Launch.xib
│   ├── NSArray+DHUtils.h
│   ├── NSArray+DHUtils.m
│   ├── NSData+DHUtils.h
│   ├── NSData+DHUtils.m
│   ├── NSFileManager+DHUtils.h
│   ├── NSFileManager+DHUtils.m
│   ├── NSObject+DHUtils.h
│   ├── NSObject+DHUtils.m
│   ├── NSString+DHUtils.h
│   ├── NSString+DHUtils.m
│   ├── NSString+GTM.h
│   ├── NSString+GTM.m
│   ├── NSTimer+DHUtils.h
│   ├── NSTimer+DHUtils.m
│   ├── NSURL+DHUtils.h
│   ├── NSURL+DHUtils.m
│   ├── Settings.bundle/
│   │   ├── Cocoa_Pods_Acknowledgements.plist
│   │   ├── License.plist
│   │   ├── Other_Acknowledgements.plist
│   │   ├── Root.plist
│   │   └── en.lproj/
│   │       └── Root.strings
│   ├── UIButton+DHUtils.h
│   ├── UIButton+DHUtils.m
│   ├── UITableView+DHUtils.h
│   ├── UITableView+DHUtils.m
│   ├── UIView+DHUtils.h
│   ├── UIView+DHUtils.m
│   ├── UIViewController+DHUtils.h
│   ├── UIViewController+DHUtils.m
│   ├── apple.js
│   ├── archive.h
│   ├── archive_entry.h
│   ├── cocoa.js
│   ├── en.lproj/
│   │   └── InfoPlist.strings
│   ├── hash_change_notifier.js
│   ├── home.html
│   ├── libarchive.a
│   ├── main.m
│   ├── msdn.js
│   ├── on_page_load.js
│   ├── ruby.js
│   ├── scroll_to_current_anchor.js
│   ├── style.css
│   ├── whitespace_tokenizer.c
│   └── whitespace_tokenizer.h
├── Dash iOS.xcworkspace/
│   ├── contents.xcworkspacedata
│   └── xcshareddata/
│       ├── Dash iOS.xccheckout
│       ├── Dash iOS.xcscmblueprint
│       └── IDEWorkspaceChecks.plist
├── Frameworks/
│   └── Apple_Docs_Framework.framework/
│       ├── Apple_Docs_Framework
│       ├── Headers/
│       │   ├── Apple_Docs_Framework.h
│       │   ├── DHCommandLineParser.h
│       │   ├── DHTester.h
│       │   ├── DHViewer.h
│       │   ├── DHViewerHelper.h
│       │   └── DHXcodeHelper.h
│       ├── Info.plist
│       ├── Modules/
│       │   └── module.modulemap
│       └── prism.js
├── Icon/
│   └── Icon.psd
├── LICENSE
├── Modified Pods/
│   ├── DTBonjour/
│   │   ├── .gitignore
│   │   ├── .travis.yml
│   │   ├── AppledocSettings.plist
│   │   ├── Core/
│   │   │   ├── DTBonjour-Prefix.pch
│   │   │   └── Source/
│   │   │       ├── DTBonjourDataChunk.h
│   │   │       ├── DTBonjourDataChunk.m
│   │   │       ├── DTBonjourDataConnection.h
│   │   │       ├── DTBonjourDataConnection.m
│   │   │       ├── DTBonjourServer.h
│   │   │       ├── DTBonjourServer.m
│   │   │       ├── NSScanner+DTBonjour.h
│   │   │       └── NSScanner+DTBonjour.m
│   │   ├── DTBonjour.podspec
│   │   ├── DTBonjour.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   └── xcshareddata/
│   │   │       └── xcschemes/
│   │   │           ├── DTBonjour (OS X).xcscheme
│   │   │           └── DTBonjour (iOS).xcscheme
│   │   ├── Documentation/
│   │   │   └── Change Log-template.markdown
│   │   ├── LICENSE
│   │   ├── build.gradle
│   │   ├── coveralls.rb
│   │   └── readme.markdown
│   ├── KissXML-5.1.2/
│   │   ├── .gitignore
│   │   ├── .hgignore
│   │   ├── .travis.yml
│   │   ├── KissXML/
│   │   │   ├── Additions/
│   │   │   │   ├── DDXMLElementAdditions.h
│   │   │   │   └── DDXMLElementAdditions.m
│   │   │   ├── Categories/
│   │   │   │   ├── NSString+DDXML.h
│   │   │   │   └── NSString+DDXML.m
│   │   │   ├── DDXML.h
│   │   │   ├── DDXML.swift
│   │   │   ├── DDXMLDocument.h
│   │   │   ├── DDXMLDocument.m
│   │   │   ├── DDXMLElement.h
│   │   │   ├── DDXMLElement.m
│   │   │   ├── DDXMLNode.h
│   │   │   ├── DDXMLNode.m
│   │   │   ├── KissXML.h
│   │   │   └── Private/
│   │   │       └── DDXMLPrivate.h
│   │   ├── KissXML.podspec
│   │   ├── LICENSE.txt
│   │   ├── README.markdown
│   │   └── Tests/
│   │       ├── Mac/
│   │       │   ├── KissXML.xcodeproj/
│   │       │   │   ├── project.pbxproj
│   │       │   │   ├── project.xcworkspace/
│   │       │   │   │   └── contents.xcworkspacedata
│   │       │   │   └── xcshareddata/
│   │       │   │       └── xcschemes/
│   │       │   │           └── KissXMLTests.xcscheme
│   │       │   ├── KissXML.xcworkspace/
│   │       │   │   └── contents.xcworkspacedata
│   │       │   ├── KissXMLTests/
│   │       │   │   └── Info.plist
│   │       │   └── Podfile
│   │       ├── Shared/
│   │       │   └── KissXMLTests.m
│   │       ├── Swift/
│   │       │   ├── KissXML.xcodeproj/
│   │       │   │   ├── project.pbxproj
│   │       │   │   ├── project.xcworkspace/
│   │       │   │   │   └── contents.xcworkspacedata
│   │       │   │   └── xcshareddata/
│   │       │   │       └── xcschemes/
│   │       │   │           └── KissXMLSwiftTests.xcscheme
│   │       │   ├── KissXML.xcworkspace/
│   │       │   │   └── contents.xcworkspacedata
│   │       │   ├── KissXMLSwiftTests/
│   │       │   │   ├── Info.plist
│   │       │   │   └── KissXMLSwiftTests.swift
│   │       │   └── Podfile
│   │       ├── Swift-iOS/
│   │       │   ├── KissXML.xcodeproj/
│   │       │   │   ├── project.pbxproj
│   │       │   │   ├── project.xcworkspace/
│   │       │   │   │   └── contents.xcworkspacedata
│   │       │   │   └── xcshareddata/
│   │       │   │       └── xcschemes/
│   │       │   │           └── KissXMLSwiftTests.xcscheme
│   │       │   ├── KissXML.xcworkspace/
│   │       │   │   └── contents.xcworkspacedata
│   │       │   ├── KissXMLSwiftTests/
│   │       │   │   ├── Info.plist
│   │       │   │   └── KissXMLSwiftTests.swift
│   │       │   └── Podfile
│   │       ├── iOS/
│   │       │   ├── KissXML.xcodeproj/
│   │       │   │   ├── project.pbxproj
│   │       │   │   ├── project.xcworkspace/
│   │       │   │   │   └── contents.xcworkspacedata
│   │       │   │   └── xcshareddata/
│   │       │   │       └── xcschemes/
│   │       │   │           └── KissXMLTests.xcscheme
│   │       │   ├── KissXML.xcworkspace/
│   │       │   │   └── contents.xcworkspacedata
│   │       │   ├── KissXMLTests/
│   │       │   │   └── Info.plist
│   │       │   └── Podfile
│   │       └── iOS-static/
│   │           ├── KissXML.xcodeproj/
│   │           │   ├── project.pbxproj
│   │           │   ├── project.xcworkspace/
│   │           │   │   └── contents.xcworkspacedata
│   │           │   └── xcshareddata/
│   │           │       └── xcschemes/
│   │           │           └── KissXMLTests.xcscheme
│   │           ├── KissXML.xcworkspace/
│   │           │   └── contents.xcworkspacedata
│   │           ├── KissXMLTests/
│   │           │   └── Info.plist
│   │           └── Podfile
│   └── MRProgress/
│       ├── LICENSE
│       ├── MRProgress.podspec
│       ├── README.md
│       └── src/
│           ├── Blur/
│           │   ├── MRBlurView.h
│           │   ├── MRBlurView.m
│           │   ├── UIImage+MRImageEffects.h
│           │   └── UIImage+MRImageEffects.m
│           ├── Components/
│           │   ├── MRActivityIndicatorView.h
│           │   ├── MRActivityIndicatorView.m
│           │   ├── MRCircularProgressView.h
│           │   ├── MRCircularProgressView.m
│           │   ├── MRIconView.h
│           │   ├── MRIconView.m
│           │   ├── MRNavigationBarProgressView.h
│           │   ├── MRNavigationBarProgressView.m
│           │   ├── MRProgressOverlayView.h
│           │   ├── MRProgressOverlayView.m
│           │   ├── MRProgressView.h
│           │   ├── MRProgressView.m
│           │   ├── MRStopButton.h
│           │   ├── MRStopButton.m
│           │   └── MRStopableView.h
│           ├── MRProgress.h
│           └── Utils/
│               └── MRProgressHelper.h
├── Podfile
├── Pods/
│   ├── AutoCoding/
│   │   ├── AutoCoding/
│   │   │   ├── AutoCoding.h
│   │   │   └── AutoCoding.m
│   │   ├── LICENCE.md
│   │   └── README.md
│   ├── DZNEmptyDataSet/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   └── Source/
│   │       ├── UIScrollView+EmptyDataSet.h
│   │       └── UIScrollView+EmptyDataSet.m
│   ├── GZIP/
│   │   ├── GZIP/
│   │   │   ├── GZIP.h
│   │   │   ├── NSData+GZIP.h
│   │   │   └── NSData+GZIP.m
│   │   ├── LICENCE.md
│   │   └── README.md
│   ├── HockeySDK/
│   │   └── HockeySDK-iOS/
│   │       ├── HockeySDK.embeddedframework/
│   │       │   ├── HockeySDK.framework/
│   │       │   │   ├── Headers/
│   │       │   │   │   ├── BITAuthenticator.h
│   │       │   │   │   ├── BITCrashAttachment.h
│   │       │   │   │   ├── BITCrashDetails.h
│   │       │   │   │   ├── BITCrashManager.h
│   │       │   │   │   ├── BITCrashManagerDelegate.h
│   │       │   │   │   ├── BITCrashMetaData.h
│   │       │   │   │   ├── BITHockeyAttachment.h
│   │       │   │   │   ├── BITHockeyBaseManager.h
│   │       │   │   │   ├── BITHockeyBaseViewController.h
│   │       │   │   │   ├── BITHockeyManager.h
│   │       │   │   │   ├── BITHockeyManagerDelegate.h
│   │       │   │   │   ├── BITMetricsManager.h
│   │       │   │   │   ├── BITStoreUpdateManager.h
│   │       │   │   │   ├── BITStoreUpdateManagerDelegate.h
│   │       │   │   │   ├── BITUpdateManager.h
│   │       │   │   │   ├── BITUpdateManagerDelegate.h
│   │       │   │   │   ├── BITUpdateViewController.h
│   │       │   │   │   ├── HockeySDK.h
│   │       │   │   │   ├── HockeySDKEnums.h
│   │       │   │   │   ├── HockeySDKFeatureConfig.h
│   │       │   │   │   └── HockeySDKNullability.h
│   │       │   │   ├── HockeySDK
│   │       │   │   └── Modules/
│   │       │   │       └── module.modulemap
│   │       │   └── HockeySDKResources.bundle/
│   │       │       ├── de.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── en.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── es.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── fa.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── fr.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── hr.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── hu.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── it.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── ja.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── nb.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── nl.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── pt-PT.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── pt.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── ru.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       ├── tr.lproj/
│   │       │       │   └── HockeySDK.strings
│   │       │       └── zh-Hans.lproj/
│   │       │           └── HockeySDK.strings
│   │       ├── LICENSE
│   │       └── README.md
│   ├── JGMethodSwizzler/
│   │   ├── JGMethodSwizzler/
│   │   │   ├── JGMethodSwizzler.h
│   │   │   └── JGMethodSwizzler.m
│   │   └── README.md
│   ├── Local Podspecs/
│   │   ├── DTBonjour.podspec.json
│   │   ├── DZNEmptyDataSet.podspec.json
│   │   ├── KissXML.podspec.json
│   │   └── MRProgress.podspec.json
│   ├── NSTimer-Blocks/
│   │   ├── NSTimer+Blocks.h
│   │   ├── NSTimer+Blocks.m
│   │   └── README.md
│   ├── Pods.xcodeproj/
│   │   └── project.pbxproj
│   ├── Reachability/
│   │   ├── LICENCE.txt
│   │   ├── README.md
│   │   ├── Reachability.h
│   │   └── Reachability.m
│   ├── SAMKeychain/
│   │   ├── LICENSE
│   │   ├── Readme.markdown
│   │   ├── Sources/
│   │   │   ├── SAMKeychain.h
│   │   │   ├── SAMKeychain.m
│   │   │   ├── SAMKeychainQuery.h
│   │   │   └── SAMKeychainQuery.m
│   │   └── Support/
│   │       └── SAMKeychain.bundle/
│   │           └── en.lproj/
│   │               └── SAMKeychain.strings
│   ├── Target Support Files/
│   │   ├── AutoCoding/
│   │   │   ├── AutoCoding-dummy.m
│   │   │   ├── AutoCoding-prefix.pch
│   │   │   └── AutoCoding.xcconfig
│   │   ├── DTBonjour/
│   │   │   ├── DTBonjour-dummy.m
│   │   │   ├── DTBonjour-prefix.pch
│   │   │   └── DTBonjour.xcconfig
│   │   ├── DZNEmptyDataSet/
│   │   │   ├── DZNEmptyDataSet-dummy.m
│   │   │   ├── DZNEmptyDataSet-prefix.pch
│   │   │   └── DZNEmptyDataSet.xcconfig
│   │   ├── GZIP/
│   │   │   ├── GZIP-dummy.m
│   │   │   ├── GZIP-prefix.pch
│   │   │   └── GZIP.xcconfig
│   │   ├── HockeySDK/
│   │   │   └── ResourceBundle-HockeySDKResources-Info.plist
│   │   ├── JGMethodSwizzler/
│   │   │   ├── JGMethodSwizzler-dummy.m
│   │   │   ├── JGMethodSwizzler-prefix.pch
│   │   │   └── JGMethodSwizzler.xcconfig
│   │   ├── KissXML/
│   │   │   ├── KissXML-dummy.m
│   │   │   ├── KissXML-prefix.pch
│   │   │   └── KissXML.xcconfig
│   │   ├── MRProgress/
│   │   │   ├── MRProgress-dummy.m
│   │   │   ├── MRProgress-prefix.pch
│   │   │   └── MRProgress.xcconfig
│   │   ├── NSTimer-Blocks/
│   │   │   ├── NSTimer-Blocks-dummy.m
│   │   │   ├── NSTimer-Blocks-prefix.pch
│   │   │   └── NSTimer-Blocks.xcconfig
│   │   ├── Pods-Dash/
│   │   │   ├── Pods-Dash-acknowledgements.markdown
│   │   │   ├── Pods-Dash-acknowledgements.plist
│   │   │   ├── Pods-Dash-dummy.m
│   │   │   ├── Pods-Dash-frameworks.sh
│   │   │   ├── Pods-Dash-resources.sh
│   │   │   ├── Pods-Dash.debug.xcconfig
│   │   │   └── Pods-Dash.release.xcconfig
│   │   ├── Pods-Dash-Dash App Store/
│   │   │   ├── Pods-Dash-Dash App Store-acknowledgements.markdown
│   │   │   ├── Pods-Dash-Dash App Store-acknowledgements.plist
│   │   │   ├── Pods-Dash-Dash App Store-dummy.m
│   │   │   ├── Pods-Dash-Dash App Store-frameworks.sh
│   │   │   ├── Pods-Dash-Dash App Store-resources.sh
│   │   │   ├── Pods-Dash-Dash App Store.debug.xcconfig
│   │   │   └── Pods-Dash-Dash App Store.release.xcconfig
│   │   ├── Reachability/
│   │   │   ├── Reachability-dummy.m
│   │   │   ├── Reachability-prefix.pch
│   │   │   └── Reachability.xcconfig
│   │   ├── SAMKeychain/
│   │   │   ├── SAMKeychain-dummy.m
│   │   │   ├── SAMKeychain-prefix.pch
│   │   │   └── SAMKeychain.xcconfig
│   │   ├── UIActionSheet+Blocks/
│   │   │   ├── UIActionSheet+Blocks-dummy.m
│   │   │   ├── UIActionSheet+Blocks-prefix.pch
│   │   │   └── UIActionSheet+Blocks.xcconfig
│   │   └── UIAlertView+Blocks/
│   │       ├── UIAlertView+Blocks-dummy.m
│   │       ├── UIAlertView+Blocks-prefix.pch
│   │       └── UIAlertView+Blocks.xcconfig
│   ├── UIActionSheet+Blocks/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── UIActionSheet+Blocks.h
│   │   └── UIActionSheet+Blocks.m
│   └── UIAlertView+Blocks/
│       ├── LICENSE
│       ├── README.md
│       ├── UIAlertView+Blocks.h
│       └── UIAlertView+Blocks.m
└── README.md
Download .txt
SYMBOL INDEX (320 symbols across 28 files)

FILE: Dash/DHDBNestedResultSorter.h
  function interface (line 22) | interface DHDBNestedResultSorter : NSObject {

FILE: Dash/DHType.h
  function interface (line 20) | interface DHType : NSObject {

FILE: Dash/DHTypes.h
  function interface (line 20) | interface DHTypes : NSObject {

FILE: Dash/FMDatabase.h
  function interface (line 28) | interface FMDatabase : NSObject  {

FILE: Dash/FMDatabasePool.h
  function interface (line 31) | interface FMDatabasePool : NSObject {

FILE: Dash/FMDatabaseQueue.h
  function interface (line 14) | interface FMDatabaseQueue : NSObject {

FILE: Dash/FMResultSet.h
  function interface (line 19) | interface FMResultSet : NSObject {

FILE: Dash/NSString+DHUtils.h
  function interface (line 21) | interface NSString (DHUtils) {

FILE: Dash/archive.h
  type archive (line 164) | struct archive
  type tk_archive_entry (line 165) | struct tk_archive_entry
  type __LA_SSIZE_T (line 203) | typedef __LA_SSIZE_T	tk_archive_read_callback(struct archive *,
  type __LA_SSIZE_T (line 210) | typedef __LA_SSIZE_T	tk_archive_skip_callback(struct archive *,
  type off_t (line 215) | typedef off_t		tk_archive_skip_callback(struct archive *,
  type __LA_INT64_T (line 220) | typedef __LA_INT64_T	tk_archive_skip_callback(struct archive *,
  type __LA_SSIZE_T (line 225) | typedef __LA_SSIZE_T	tk_archive_write_callback(struct archive *,
  type archive (line 231) | struct archive
  type archive (line 234) | struct archive
  type archive (line 312) | struct archive
  type archive (line 313) | struct archive
  type archive (line 314) | struct archive
  type archive (line 315) | struct archive
  type archive (line 316) | struct archive
  type archive (line 317) | struct archive
  type archive (line 318) | struct archive
  type archive (line 321) | struct archive
  type archive (line 324) | struct archive
  type archive (line 325) | struct archive
  type archive (line 326) | struct archive
  type archive (line 328) | struct archive
  type archive (line 329) | struct archive
  type archive (line 330) | struct archive
  type archive (line 331) | struct archive
  type archive (line 332) | struct archive
  type archive (line 333) | struct archive
  type archive (line 334) | struct archive
  type archive (line 335) | struct archive
  type archive (line 336) | struct archive
  type archive (line 337) | struct archive
  type archive (line 338) | struct archive
  type archive (line 342) | struct archive
  type archive (line 345) | struct archive
  type archive (line 355) | struct archive
  type archive (line 358) | struct archive
  type archive (line 361) | struct archive
  type archive (line 364) | struct archive
  type archive (line 367) | struct archive
  type archive (line 371) | struct archive
  type archive (line 374) | struct archive
  type tk_archive_entry (line 375) | struct tk_archive_entry
  type archive (line 378) | struct archive
  type tk_archive_entry (line 379) | struct tk_archive_entry
  type archive (line 385) | struct archive
  type archive (line 388) | struct archive
  type archive (line 398) | struct archive
  type archive (line 401) | struct archive
  type archive (line 412) | struct archive
  type archive (line 413) | struct archive
  type archive (line 415) | struct archive
  type archive (line 421) | struct archive
  type archive (line 424) | struct archive
  type archive (line 427) | struct archive
  type archive (line 474) | struct archive
  type tk_archive_entry (line 474) | struct tk_archive_entry
  type archive (line 476) | struct archive
  type tk_archive_entry (line 476) | struct tk_archive_entry
  type archive (line 477) | struct archive
  type archive (line 478) | struct archive
  type archive (line 483) | struct archive
  type archive (line 487) | struct archive
  type archive (line 492) | struct archive
  type archive (line 494) | struct archive
  type archive (line 513) | struct archive
  type archive (line 515) | struct archive
  type archive (line 517) | struct archive
  type archive (line 519) | struct archive
  type archive (line 523) | struct archive
  type archive (line 525) | struct archive
  type archive (line 526) | struct archive
  type archive (line 527) | struct archive
  type archive (line 528) | struct archive
  type archive (line 529) | struct archive
  type archive (line 530) | struct archive
  type archive (line 532) | struct archive
  type archive (line 534) | struct archive
  type archive (line 535) | struct archive
  type archive (line 538) | struct archive
  type archive (line 539) | struct archive
  type archive (line 540) | struct archive
  type archive (line 541) | struct archive
  type archive (line 542) | struct archive
  type archive (line 544) | struct archive
  type archive (line 545) | struct archive
  type archive (line 546) | struct archive
  type archive (line 547) | struct archive
  type archive (line 548) | struct archive
  type archive (line 549) | struct archive
  type archive (line 550) | struct archive
  type archive (line 553) | struct archive
  type archive (line 554) | struct archive
  type archive (line 556) | struct archive
  type archive (line 557) | struct archive
  type archive (line 560) | struct archive
  type archive (line 567) | struct archive
  type tk_archive_entry (line 568) | struct tk_archive_entry
  type archive (line 571) | struct archive
  type archive (line 575) | struct archive
  type archive (line 582) | struct archive
  type archive (line 586) | struct archive
  type archive (line 589) | struct archive
  type archive (line 590) | struct archive
  type archive (line 593) | struct archive
  type archive (line 598) | struct archive
  type archive (line 605) | struct archive
  type archive (line 608) | struct archive
  type archive (line 611) | struct archive
  type archive (line 633) | struct archive
  type archive (line 637) | struct archive
  type archive (line 656) | struct archive
  type archive (line 662) | struct archive
  type archive (line 666) | struct archive
  type archive (line 680) | struct archive
  type archive (line 682) | struct archive
  type archive (line 684) | struct archive
  type archive (line 686) | struct archive
  type tk_archive_entry (line 687) | struct tk_archive_entry
  type stat (line 687) | struct stat
  type archive (line 690) | struct archive
  type archive (line 691) | struct archive
  type archive (line 694) | struct archive
  type archive (line 696) | struct archive
  type archive (line 700) | struct archive
  type archive (line 710) | struct archive
  type archive (line 712) | struct archive
  type archive (line 714) | struct archive
  type archive (line 715) | struct archive
  type archive (line 716) | struct archive
  type archive (line 717) | struct archive
  type archive (line 718) | struct archive
  type archive (line 719) | struct archive
  type archive (line 720) | struct archive
  type archive (line 721) | struct archive
  type archive (line 723) | struct archive
  type archive (line 724) | struct archive
  type archive (line 725) | struct archive

FILE: Dash/archive_entry.h
  type tk_archive_entry (line 124) | struct tk_archive_entry
  type tk_archive_entry (line 160) | struct tk_archive_entry
  type tk_archive_entry (line 162) | struct tk_archive_entry
  type tk_archive_entry (line 163) | struct tk_archive_entry
  type tk_archive_entry (line 185) | struct tk_archive_entry
  type tk_archive_entry (line 186) | struct tk_archive_entry
  type tk_archive_entry (line 187) | struct tk_archive_entry
  type tk_archive_entry (line 188) | struct tk_archive_entry
  type tk_archive_entry (line 189) | struct tk_archive_entry
  type tk_archive_entry (line 190) | struct tk_archive_entry
  type tk_archive_entry (line 191) | struct tk_archive_entry
  type tk_archive_entry (line 192) | struct tk_archive_entry
  type tk_archive_entry (line 193) | struct tk_archive_entry
  type tk_archive_entry (line 194) | struct tk_archive_entry
  type tk_archive_entry (line 195) | struct tk_archive_entry
  type tk_archive_entry (line 196) | struct tk_archive_entry
  type tk_archive_entry (line 197) | struct tk_archive_entry
  type tk_archive_entry (line 198) | struct tk_archive_entry
  type tk_archive_entry (line 201) | struct tk_archive_entry
  type tk_archive_entry (line 202) | struct tk_archive_entry
  type tk_archive_entry (line 203) | struct tk_archive_entry
  type tk_archive_entry (line 204) | struct tk_archive_entry
  type tk_archive_entry (line 205) | struct tk_archive_entry
  type tk_archive_entry (line 206) | struct tk_archive_entry
  type tk_archive_entry (line 207) | struct tk_archive_entry
  type tk_archive_entry (line 208) | struct tk_archive_entry
  type tk_archive_entry (line 209) | struct tk_archive_entry
  type tk_archive_entry (line 210) | struct tk_archive_entry
  type tk_archive_entry (line 211) | struct tk_archive_entry
  type tk_archive_entry (line 212) | struct tk_archive_entry
  type tk_archive_entry (line 213) | struct tk_archive_entry
  type tk_archive_entry (line 214) | struct tk_archive_entry
  type tk_archive_entry (line 215) | struct tk_archive_entry
  type tk_archive_entry (line 216) | struct tk_archive_entry
  type tk_archive_entry (line 217) | struct tk_archive_entry
  type tk_archive_entry (line 218) | struct tk_archive_entry
  type tk_archive_entry (line 219) | struct tk_archive_entry
  type tk_archive_entry (line 220) | struct tk_archive_entry
  type tk_archive_entry (line 221) | struct tk_archive_entry
  type tk_archive_entry (line 222) | struct tk_archive_entry
  type tk_archive_entry (line 223) | struct tk_archive_entry
  type tk_archive_entry (line 224) | struct tk_archive_entry
  type tk_archive_entry (line 225) | struct tk_archive_entry
  type tk_archive_entry (line 226) | struct tk_archive_entry
  type tk_archive_entry (line 227) | struct tk_archive_entry
  type tk_archive_entry (line 240) | struct tk_archive_entry
  type tk_archive_entry (line 241) | struct tk_archive_entry
  type tk_archive_entry (line 243) | struct tk_archive_entry
  type tk_archive_entry (line 246) | struct tk_archive_entry
  type tk_archive_entry (line 247) | struct tk_archive_entry
  type tk_archive_entry (line 248) | struct tk_archive_entry
  type tk_archive_entry (line 249) | struct tk_archive_entry
  type tk_archive_entry (line 250) | struct tk_archive_entry
  type tk_archive_entry (line 251) | struct tk_archive_entry
  type tk_archive_entry (line 252) | struct tk_archive_entry
  type tk_archive_entry (line 253) | struct tk_archive_entry
  type tk_archive_entry (line 254) | struct tk_archive_entry
  type tk_archive_entry (line 258) | struct tk_archive_entry
  type tk_archive_entry (line 260) | struct tk_archive_entry
  type tk_archive_entry (line 262) | struct tk_archive_entry
  type tk_archive_entry (line 263) | struct tk_archive_entry
  type tk_archive_entry (line 264) | struct tk_archive_entry
  type tk_archive_entry (line 265) | struct tk_archive_entry
  type tk_archive_entry (line 266) | struct tk_archive_entry
  type tk_archive_entry (line 267) | struct tk_archive_entry
  type tk_archive_entry (line 268) | struct tk_archive_entry
  type tk_archive_entry (line 269) | struct tk_archive_entry
  type tk_archive_entry (line 270) | struct tk_archive_entry
  type tk_archive_entry (line 273) | struct tk_archive_entry
  type tk_archive_entry (line 275) | struct tk_archive_entry
  type tk_archive_entry (line 277) | struct tk_archive_entry
  type tk_archive_entry (line 278) | struct tk_archive_entry
  type tk_archive_entry (line 279) | struct tk_archive_entry
  type tk_archive_entry (line 280) | struct tk_archive_entry
  type tk_archive_entry (line 281) | struct tk_archive_entry
  type tk_archive_entry (line 282) | struct tk_archive_entry
  type tk_archive_entry (line 283) | struct tk_archive_entry
  type tk_archive_entry (line 284) | struct tk_archive_entry
  type tk_archive_entry (line 285) | struct tk_archive_entry
  type tk_archive_entry (line 286) | struct tk_archive_entry
  type tk_archive_entry (line 287) | struct tk_archive_entry
  type tk_archive_entry (line 288) | struct tk_archive_entry
  type tk_archive_entry (line 289) | struct tk_archive_entry
  type tk_archive_entry (line 290) | struct tk_archive_entry
  type tk_archive_entry (line 291) | struct tk_archive_entry
  type tk_archive_entry (line 292) | struct tk_archive_entry
  type tk_archive_entry (line 293) | struct tk_archive_entry
  type tk_archive_entry (line 294) | struct tk_archive_entry
  type tk_archive_entry (line 295) | struct tk_archive_entry
  type tk_archive_entry (line 296) | struct tk_archive_entry
  type tk_archive_entry (line 297) | struct tk_archive_entry
  type tk_archive_entry (line 298) | struct tk_archive_entry
  type tk_archive_entry (line 299) | struct tk_archive_entry
  type tk_archive_entry (line 300) | struct tk_archive_entry
  type tk_archive_entry (line 301) | struct tk_archive_entry
  type tk_archive_entry (line 302) | struct tk_archive_entry
  type tk_archive_entry (line 303) | struct tk_archive_entry
  type tk_archive_entry (line 304) | struct tk_archive_entry
  type tk_archive_entry (line 305) | struct tk_archive_entry
  type tk_archive_entry (line 315) | struct tk_archive_entry
  type tk_archive_entry (line 316) | struct tk_archive_entry
  type stat (line 316) | struct stat
  type tk_archive_entry (line 365) | struct tk_archive_entry
  type tk_archive_entry (line 366) | struct tk_archive_entry
  type tk_archive_entry (line 369) | struct tk_archive_entry
  type tk_archive_entry (line 378) | struct tk_archive_entry
  type tk_archive_entry (line 379) | struct tk_archive_entry
  type tk_archive_entry (line 382) | struct tk_archive_entry
  type tk_archive_entry (line 399) | struct tk_archive_entry
  type tk_archive_entry (line 403) | struct tk_archive_entry
  type tk_archive_entry (line 418) | struct tk_archive_entry
  type tk_archive_entry (line 425) | struct tk_archive_entry
  type tk_archive_entry (line 426) | struct tk_archive_entry
  type tk_archive_entry (line 435) | struct tk_archive_entry
  type tk_archive_entry (line 436) | struct tk_archive_entry
  type tk_archive_entry (line 437) | struct tk_archive_entry
  type tk_archive_entry_linkresolver (line 468) | struct tk_archive_entry_linkresolver
  type tk_archive_entry_linkresolver (line 512) | struct tk_archive_entry_linkresolver
  type tk_archive_entry_linkresolver (line 513) | struct tk_archive_entry_linkresolver
  type tk_archive_entry_linkresolver (line 514) | struct tk_archive_entry_linkresolver
  type tk_archive_entry (line 515) | struct tk_archive_entry
  type tk_archive_entry (line 515) | struct tk_archive_entry

FILE: Dash/cocoa.js
  function toggleOverviews (line 12) | function toggleOverviews()

FILE: Dash/msdn.js
  function dashSetUpMSDN (line 1) | function dashSetUpMSDN(prefs)

FILE: Dash/ruby.js
  function replaceAll (line 1) | function replaceAll(str, find, replace)

FILE: Dash/whitespace_tokenizer.c
  function whitespaceDelim (line 8) | static int whitespaceDelim(whitespace_tokenizer *t, unsigned char c){
  function whitespaceCreate (line 15) | int whitespaceCreate(
  function whitespaceDestroy (line 31) | int whitespaceDestroy(sqlite3_tokenizer *pTokenizer){
  function whitespaceOpen (line 42) | int whitespaceOpen(
  function whitespaceClose (line 73) | int whitespaceClose(sqlite3_tokenizer_cursor *pCursor){
  function whitespaceNext (line 84) | int whitespaceNext(
  function sqlite3Fts3WhitespaceTokenizerModule (line 142) | void sqlite3Fts3WhitespaceTokenizerModule(
  function rankfunc (line 148) | void rankfunc(sqlite3_context *pCtx, int nVal, sqlite3_value **apVal){
  function dashCompress (line 196) | void dashCompress(sqlite3_context *context, int argc, sqlite3_value **ar...
  function dashUncompress (line 219) | void dashUncompress(sqlite3_context *context, int argc, sqlite3_value **...

FILE: Dash/whitespace_tokenizer.h
  type sqlite3_tokenizer_module (line 49) | typedef struct sqlite3_tokenizer_module sqlite3_tokenizer_module;
  type sqlite3_tokenizer (line 50) | typedef struct sqlite3_tokenizer sqlite3_tokenizer;
  type sqlite3_tokenizer_cursor (line 51) | typedef struct sqlite3_tokenizer_cursor sqlite3_tokenizer_cursor;
  type sqlite3_tokenizer_module (line 53) | struct sqlite3_tokenizer_module {
  type sqlite3_tokenizer (line 148) | struct sqlite3_tokenizer {
  type sqlite3_tokenizer_cursor (line 153) | struct sqlite3_tokenizer_cursor {
  type whitespace_tokenizer (line 161) | typedef struct whitespace_tokenizer {
  type whitespace_tokenizer_cursor (line 166) | typedef struct whitespace_tokenizer_cursor {

FILE: Modified Pods/KissXML-5.1.2/KissXML/Categories/NSString+DDXML.h
  type xmlChar (line 4) | typedef unsigned char xmlChar;

FILE: Modified Pods/KissXML-5.1.2/KissXML/DDXMLDocument.h
  type NSUInteger (line 29) | typedef NSUInteger DDXMLDocumentContentKind;

FILE: Modified Pods/KissXML-5.1.2/KissXML/DDXMLNode.h
  type NSUInteger (line 38) | typedef NSUInteger DDXMLNodeKind;

FILE: Modified Pods/KissXML-5.1.2/KissXML/Private/DDXMLPrivate.h
  type _xmlKind (line 50) | struct _xmlKind {
  type _xmlKind (line 54) | struct _xmlKind
  type _xmlStd (line 61) | struct _xmlStd {
  type _xmlStd (line 72) | struct _xmlStd
  function NS_INLINE (line 75) | NS_INLINE BOOL IsXmlAttrPtr(void *kindPtr)
  function NS_INLINE (line 80) | NS_INLINE BOOL IsXmlNodePtr(void *kindPtr)
  function NS_INLINE (line 93) | NS_INLINE BOOL IsXmlDocPtr(void *kindPtr)
  function NS_INLINE (line 98) | NS_INLINE BOOL IsXmlDtdPtr(void *kindPtr)
  function NS_INLINE (line 103) | NS_INLINE BOOL IsXmlNsPtr(void *kindPtr)
  function interface (line 112) | interface DDXMLNamespaceNode : DDXMLNode
  function interface (line 133) | interface DDXMLAttributeNode : DDXMLNode
  function interface (line 160) | interface DDXMLInvalidNode : DDXMLNode
  function end (line 229) | end

FILE: Modified Pods/MRProgress/src/Components/MRActivityIndicatorView.h
  function interface (line 17) | interface MRActivityIndicatorView : UIView<MRStopableView> {

FILE: Modified Pods/MRProgress/src/Components/MRProgressOverlayView.h
  type MRProgressOverlayViewModeIndeterminate (line 19) | typedef NS_ENUM(NSUInteger, MRProgressOverlayViewMode){

FILE: Modified Pods/MRProgress/src/Components/MRProgressView.h
  function interface (line 19) | interface MRProgressView : UIView {

FILE: Modified Pods/MRProgress/src/Utils/MRProgressHelper.h
  function CGFloat (line 16) | static inline CGFloat MRCGFloatCeil(CGFloat x) {
  function CGFloat (line 20) | static inline CGFloat MRCGFloatCeil(CGFloat x) {
  function CGRect (line 26) | static inline CGRect MRCenterCGSizeInCGRect(CGSize innerRectSize, CGRect...
  function CGFloat (line 35) | static inline CGFloat MRRotationForStatusBarOrientation() {

FILE: Pods/HockeySDK/HockeySDK-iOS/HockeySDK.embeddedframework/HockeySDK.framework/Headers/BITAuthenticator.h
  type BITAuthenticatorAppRestrictionEnforcementOnFirstLaunch (line 98) | typedef NS_ENUM(NSUInteger, BITAuthenticatorAppRestrictionEnforcementFre...

FILE: Pods/HockeySDK/HockeySDK-iOS/HockeySDK.embeddedframework/HockeySDK.framework/Headers/BITCrashManager.h
  type BITCrashManagerCallbacks (line 82) | typedef struct BITCrashManagerCallbacks {

FILE: Pods/HockeySDK/HockeySDK-iOS/HockeySDK.embeddedframework/HockeySDK.framework/Headers/HockeySDKEnums.h
  type NSString (line 38) | typedef NSString *(^BITLogMessageProvider)(void);
  type BITCrashErrorUnknown (line 63) | typedef NS_ENUM (NSInteger, BITCrashErrorReason) {
  type BITUpdateErrorUnknown (line 85) | typedef NS_ENUM (NSInteger, BITUpdateErrorReason) {
  type BITFeedbackErrorUnknown (line 115) | typedef NS_ENUM(NSInteger, BITFeedbackErrorReason) {
  type BITAuthenticatorErrorUnknown (line 145) | typedef NS_ENUM(NSInteger, BITAuthenticatorReason) {
  type BITHockeyErrorUnknown (line 180) | typedef NS_ENUM(NSInteger, BITHockeyErrorReason) {

FILE: Pods/SAMKeychain/Sources/SAMKeychain.h
  function NS_ASSUME_NONNULL_BEGIN (line 15) | NS_ASSUME_NONNULL_BEGIN

FILE: Pods/SAMKeychain/Sources/SAMKeychainQuery.h
  type SAMKeychainQuerySynchronizationModeAny (line 30) | typedef NS_ENUM(NSUInteger, SAMKeychainQuerySynchronizationMode) {
Condensed preview — 814 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,980K chars).
[
  {
    "path": ".gitignore",
    "chars": 1341,
    "preview": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 9094,
    "preview": "# Master\n\n* Nothing yet.\n\n# 1.8.13\n\n* Added support for the Xcode 11 docs - [b052c97](https://github.com/Kapeli/Dash-iOS"
  },
  {
    "path": "Dash/Base.lproj/Main.storyboard",
    "chars": 69246,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "Dash/DHAppDelegate.h",
    "chars": 983,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHAppDelegate.m",
    "chars": 12415,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHAppUpdateChecker.h",
    "chars": 904,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHAppUpdateChecker.m",
    "chars": 3732,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHAppleAPIProtocol.h",
    "chars": 784,
    "preview": "//\n//  Copyright (C) 2018  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHAppleAPIProtocol.m",
    "chars": 4363,
    "preview": "//\n//  Copyright (C) 2018  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHAppleActiveLanguage.h",
    "chars": 1047,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHAppleActiveLanguage.m",
    "chars": 1522,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHBlockProtocol.h",
    "chars": 781,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHBlockProtocol.m",
    "chars": 12206,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHBrowserCell.xib",
    "chars": 3252,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVe"
  },
  {
    "path": "Dash/DHBrowserTableView.h",
    "chars": 1071,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHBrowserTableView.m",
    "chars": 1604,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHBrowserTableViewCell.h",
    "chars": 1001,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHBrowserTableViewCell.m",
    "chars": 1760,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHCSS.h",
    "chars": 1303,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHCSS.m",
    "chars": 5480,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHCheatRepo.h",
    "chars": 831,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHCheatRepo.m",
    "chars": 16787,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHCheatRepoList.h",
    "chars": 1028,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHCheatRepoList.m",
    "chars": 3030,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDBNestedResultSorter.h",
    "chars": 1116,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDBNestedResultSorter.m",
    "chars": 7017,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDBResult.h",
    "chars": 3023,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDBResult.m",
    "chars": 65729,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDBResultSorter.h",
    "chars": 1213,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDBResultSorter.m",
    "chars": 4197,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDBSearchController.h",
    "chars": 1951,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDBSearchController.m",
    "chars": 15080,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDBSearcher.h",
    "chars": 1376,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDBSearcher.m",
    "chars": 17484,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDocset.h",
    "chars": 2800,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDocset.m",
    "chars": 17567,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDocsetBrowser.h",
    "chars": 1409,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDocsetBrowser.m",
    "chars": 24881,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDocsetBrowserViewModel.h",
    "chars": 455,
    "preview": "\n#import <Foundation/Foundation.h>\n\n@interface DHDocsetBrowserViewModel : NSObject\n@property (nonatomic, strong, readonl"
  },
  {
    "path": "Dash/DHDocsetBrowserViewModel.m",
    "chars": 1563,
    "preview": "\n#import \"DHDocsetBrowserViewModel.h\"\n#import \"DHDocsetManager.h\"\n#import \"DHDocsetDownloader.h\"\n\n@interface DHDocsetBro"
  },
  {
    "path": "Dash/DHDocsetDownloader.h",
    "chars": 837,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDocsetDownloader.m",
    "chars": 55025,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDocsetIndexer.h",
    "chars": 1100,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDocsetIndexer.m",
    "chars": 18681,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDocsetManager.h",
    "chars": 1390,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDocsetManager.m",
    "chars": 5798,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDocsetTransferrer.h",
    "chars": 1026,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHDocsetTransferrer.m",
    "chars": 13999,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHEntryBrowser.h",
    "chars": 1133,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHEntryBrowser.m",
    "chars": 9721,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHFeed.h",
    "chars": 2588,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHFeed.m",
    "chars": 9625,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHFeedResult.h",
    "chars": 1475,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHFeedResult.m",
    "chars": 3689,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHFileDownload.h",
    "chars": 1364,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHFileDownload.m",
    "chars": 5244,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHImageCache.h",
    "chars": 943,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHImageCache.m",
    "chars": 2256,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHJavaScript.h",
    "chars": 1029,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHJavaScript.m",
    "chars": 2497,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHJavaScriptBridge.h",
    "chars": 1474,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHJavaScriptBridge.m",
    "chars": 5250,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHLatencyTestResult.h",
    "chars": 1266,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHLatencyTestResult.m",
    "chars": 5273,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHLatencyTester.h",
    "chars": 1324,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHLatencyTester.m",
    "chars": 7461,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHLoadingCell.xib",
    "chars": 2446,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" versi"
  },
  {
    "path": "Dash/DHNavigationAnimator.h",
    "chars": 859,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHNavigationAnimator.m",
    "chars": 3533,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHNavigationController.h",
    "chars": 787,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHNavigationController.m",
    "chars": 779,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHNestedViewController.h",
    "chars": 960,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHNestedViewController.m",
    "chars": 7216,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHPreferences.h",
    "chars": 1220,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHPreferences.m",
    "chars": 12523,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHQueuedDB.h",
    "chars": 1677,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHQueuedDB.m",
    "chars": 7866,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRemote.h",
    "chars": 1015,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRemote.m",
    "chars": 1492,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRemoteBrowser.h",
    "chars": 1264,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRemoteBrowser.m",
    "chars": 9630,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRemoteImage.h",
    "chars": 774,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRemoteImage.m",
    "chars": 1187,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRemoteProtocol.h",
    "chars": 1125,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRemoteProtocol.m",
    "chars": 5406,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRemoteServer.h",
    "chars": 1692,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRemoteServer.m",
    "chars": 21397,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRepo.h",
    "chars": 2924,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRepo.m",
    "chars": 34855,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRepoCell.xib",
    "chars": 7467,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVe"
  },
  {
    "path": "Dash/DHRepoTableView.h",
    "chars": 769,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRepoTableView.m",
    "chars": 766,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRepoTableViewCell.h",
    "chars": 1310,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRepoTableViewCell.m",
    "chars": 1059,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRightDetailLabel.h",
    "chars": 1228,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHRightDetailLabel.m",
    "chars": 4620,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHSearchDisplayController.h",
    "chars": 793,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHSearchDisplayController.m",
    "chars": 1811,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHSplitViewController.h",
    "chars": 785,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHSplitViewController.m",
    "chars": 5754,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHTarixIndex.h",
    "chars": 818,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHTarixIndex.m",
    "chars": 2095,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHTarixProtocol.h",
    "chars": 970,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHTarixProtocol.m",
    "chars": 6800,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHTocBrowser.h",
    "chars": 1167,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHTocBrowser.m",
    "chars": 8115,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHTransferFeed.h",
    "chars": 990,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHTransferFeed.m",
    "chars": 3064,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHType.h",
    "chars": 1188,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHType.m",
    "chars": 1711,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHTypeBrowser.h",
    "chars": 1162,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHTypeBrowser.m",
    "chars": 14622,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHTypes.h",
    "chars": 1555,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHTypes.m",
    "chars": 20164,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHUnarchiver.h",
    "chars": 1198,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHUnarchiver.m",
    "chars": 13875,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHUserRepo.h",
    "chars": 829,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHUserRepo.m",
    "chars": 18745,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHUserRepoList.h",
    "chars": 1229,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHUserRepoList.m",
    "chars": 5054,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHWebProgressView.h",
    "chars": 562,
    "preview": "#import <UIKit/UIKit.h>\n\n@interface DHWebProgressView : UIView\n\n@property (nonatomic) float progress;\n@property (nonatom"
  },
  {
    "path": "Dash/DHWebProgressView.m",
    "chars": 4222,
    "preview": "//\n// The MIT License (MIT)\n//\n// Copyright (c) 2013 Satoshi Asano\n//\n// Permission is hereby granted, free of charge, t"
  },
  {
    "path": "Dash/DHWebView.h",
    "chars": 914,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHWebView.m",
    "chars": 2352,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHWebViewController.h",
    "chars": 2780,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHWebViewController.m",
    "chars": 31639,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHWindow.h",
    "chars": 759,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/DHWindow.m",
    "chars": 1002,
    "preview": "//\n//  Copyright (C) 2016  Kapeli\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it und"
  },
  {
    "path": "Dash/Dash iOS.xcodeproj/project.pbxproj",
    "chars": 142589,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Dash/Dash iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 153,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:Dash iOS.xcodep"
  },
  {
    "path": "Dash/Dash iOS.xcodeproj/project.xcworkspace/xcshareddata/Dash iOS.xccheckout",
    "chars": 1982,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Dash/Dash iOS.xcodeproj/project.xcworkspace/xcshareddata/Dash iOS.xcscmblueprint",
    "chars": 1653,
    "preview": "{\n  \"DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey\" : \"F5E17E5D12ABF060C985F6771FC999275B646DB4\",\n  \"DVTS"
  },
  {
    "path": "Dash/Dash-Info.plist",
    "chars": 4952,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Dash/Dash-Prefix.pch",
    "chars": 2883,
    "preview": "//\n//  Prefix header\n//\n//  The contents of this file are implicitly included at the beginning of every source file.\n//\n"
  },
  {
    "path": "Dash/Defaults.plist",
    "chars": 287,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Dash/FMDatabase.h",
    "chars": 3924,
    "preview": "#import <Foundation/Foundation.h>\n#import \"sqlite3.h\"\n#import \"FMResultSet.h\"\n#import \"FMDatabasePool.h\"\n#import \"whites"
  },
  {
    "path": "Dash/FMDatabase.m",
    "chars": 34960,
    "preview": "#import \"FMDatabase.h\"\n#import \"unistd.h\"\n#import <objc/runtime.h>\n\n\n#ifndef DOCSETGENERATOR\n#import \"DHPreferences.h\"\n#"
  },
  {
    "path": "Dash/FMDatabaseAdditions.h",
    "chars": 1013,
    "preview": "//\n//  FMDatabaseAdditions.h\n//  fmkit\n//\n//  Created by August Mueller on 10/30/05.\n//  Copyright 2005 Flying Meat Inc."
  },
  {
    "path": "Dash/FMDatabaseAdditions.m",
    "chars": 5161,
    "preview": "//\n//  FMDatabaseAdditions.m\n//  fmkit\n//\n//  Created by August Mueller on 10/30/05.\n//  Copyright 2005 Flying Meat Inc."
  },
  {
    "path": "Dash/FMDatabasePool.h",
    "chars": 2055,
    "preview": "//\n//  FMDatabasePool.h\n//  fmdb\n//\n//  Created by August Mueller on 6/22/11.\n//  Copyright 2011 Flying Meat Inc. All ri"
  },
  {
    "path": "Dash/FMDatabasePool.m",
    "chars": 5832,
    "preview": "//\n//  FMDatabasePool.m\n//  fmdb\n//\n//  Created by August Mueller on 6/22/11.\n//  Copyright 2011 Flying Meat Inc. All ri"
  },
  {
    "path": "Dash/FMDatabaseQueue.h",
    "chars": 1014,
    "preview": "//\n//  FMDatabasePool.h\n//  fmdb\n//\n//  Created by August Mueller on 6/22/11.\n//  Copyright 2011 Flying Meat Inc. All ri"
  },
  {
    "path": "Dash/FMDatabaseQueue.m",
    "chars": 4020,
    "preview": "//\n//  FMDatabasePool.m\n//  fmdb\n//\n//  Created by August Mueller on 6/22/11.\n//  Copyright 2011 Flying Meat Inc. All ri"
  },
  {
    "path": "Dash/FMResultSet.h",
    "chars": 3192,
    "preview": "#import <Foundation/Foundation.h>\n#import \"sqlite3.h\"\n\n#ifndef __has_feature      // Optional.\n#define __has_feature(x) "
  },
  {
    "path": "Dash/FMResultSet.m",
    "chars": 11762,
    "preview": "#import \"FMResultSet.h\"\n#import \"FMDatabase.h\"\n#import \"unistd.h\"\n\n@interface FMDatabase ()\n- (void)resultSetDidClose:(F"
  },
  {
    "path": "Dash/Images.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 3029,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\""
  },
  {
    "path": "Dash/Images.xcassets/Empty Placeholders/placeholder_docsets.imageset/Contents.json",
    "chars": 414,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"placeholder_docsets.png\"\n "
  },
  {
    "path": "Dash/Images.xcassets/Empty Placeholders/placeholder_transfer.imageset/Contents.json",
    "chars": 417,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"placeholder_transfer.png\"\n"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/Dash.imageset/Contents.json",
    "chars": 335,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Dash.png\"\n    },\n    {\n   "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/Google.imageset/Contents.json",
    "chars": 339,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Google.png\"\n    },\n    {\n "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/Mac.imageset/Contents.json",
    "chars": 333,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Mac.png\"\n    },\n    {\n    "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/Other.imageset/Contents.json",
    "chars": 337,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Other.png\"\n    },\n    {\n  "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/SproutCore.imageset/Contents.json",
    "chars": 347,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"SproutCore.png\"\n    },\n   "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/Stack Overflow.imageset/Contents.json",
    "chars": 355,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Stack Overflow.png\"\n    },"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/actionscript.imageset/Contents.json",
    "chars": 351,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"actionscript.png\"\n    },\n "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/akka.imageset/Contents.json",
    "chars": 335,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"akka.png\"\n    },\n    {\n   "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/android.imageset/Contents.json",
    "chars": 341,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"android.png\"\n    },\n    {\n"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/angular.imageset/Contents.json",
    "chars": 341,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"angular.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/angulardart.imageset/Contents.json",
    "chars": 349,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"angulardart.png\"\n    },\n  "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/angularjs.imageset/Contents.json",
    "chars": 345,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"angularjs.png\"\n    },\n    "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/angularts.imageset/Contents.json",
    "chars": 345,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"angularts.png\",\n      \"scale\" : \"1x\"\n    },\n    "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/ansible.imageset/Contents.json",
    "chars": 341,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"ansible.png\"\n    },\n    {\n"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/apache.imageset/Contents.json",
    "chars": 339,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"apache.png\"\n    },\n    {\n "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/apple.imageset/Contents.json",
    "chars": 337,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"apple.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n  "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/applescript.imageset/Contents.json",
    "chars": 349,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"applescript.png\"\n    },\n  "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/arduino.imageset/Contents.json",
    "chars": 341,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"arduino.png\"\n    },\n    {\n"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/awesome.imageset/Contents.json",
    "chars": 341,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"awesome.png\"\n    },\n    {\n"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/awsjs.imageset/Contents.json",
    "chars": 337,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"awsjs.png\"\n    },\n    {\n  "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/backbone.imageset/Contents.json",
    "chars": 343,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"backbone.png\"\n    },\n    {"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/bash.imageset/Contents.json",
    "chars": 335,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"bash.png\"\n    },\n    {\n   "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/boost.imageset/Contents.json",
    "chars": 337,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"boost.png\"\n    },\n    {\n  "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/bootstrap.imageset/Contents.json",
    "chars": 345,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"bootstrap.png\"\n    },\n    "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/bourbon.imageset/Contents.json",
    "chars": 341,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"bourbon.png\"\n    },\n    {\n"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/c.imageset/Contents.json",
    "chars": 329,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"c.png\"\n    },\n    {\n      "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/cakephp.imageset/Contents.json",
    "chars": 341,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"cakephp.png\"\n    },\n    {\n"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/cappuccino.imageset/Contents.json",
    "chars": 347,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"cappuccino.png\"\n    },\n   "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/cf.imageset/Contents.json",
    "chars": 331,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"cf.png\"\n    },\n    {\n     "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/chai.imageset/Contents.json",
    "chars": 335,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"chai.png\"\n    },\n    {\n   "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/cheatsheet.imageset/Contents.json",
    "chars": 347,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"cheatsheet.png\"\n    },\n   "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/chef.imageset/Contents.json",
    "chars": 335,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"chef.png\"\n    },\n    {\n   "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/cljlib.imageset/Contents.json",
    "chars": 339,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"cljlib.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/clojure.imageset/Contents.json",
    "chars": 341,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"clojure.png\"\n    },\n    {\n"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/cmake.imageset/Contents.json",
    "chars": 337,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"cmake.png\"\n    },\n    {\n  "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/cocoadocs_platform.imageset/Contents.json",
    "chars": 363,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"cocoadocs_platform.png\"\n  "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/cocoapods.imageset/Contents.json",
    "chars": 345,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"cocoapods.png\"\n    },\n    "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/cocos2d.imageset/Contents.json",
    "chars": 341,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"cocos2d.png\"\n    },\n    {\n"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/cocos2dx.imageset/Contents.json",
    "chars": 343,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"cocos2dx.png\"\n    },\n    {"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/codeigniter.imageset/Contents.json",
    "chars": 349,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"codeigniter.png\"\n    },\n  "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/coffee.imageset/Contents.json",
    "chars": 339,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"coffee.png\"\n    },\n    {\n "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/compass.imageset/Contents.json",
    "chars": 341,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"compass.png\"\n    },\n    {\n"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/cordova.imageset/Contents.json",
    "chars": 341,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"cordova.png\"\n    },\n    {\n"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/corona.imageset/Contents.json",
    "chars": 339,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"corona.png\"\n    },\n    {\n "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/couchdb.imageset/Contents.json",
    "chars": 341,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"couchdb.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n"
  },
  {
    "path": "Dash/Images.xcassets/Platforms/cpp.imageset/Contents.json",
    "chars": 333,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"cpp.png\"\n    },\n    {\n    "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/craft.imageset/Contents.json",
    "chars": 337,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"craft.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n  "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/css.imageset/Contents.json",
    "chars": 333,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"css.png\"\n    },\n    {\n    "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/cvc.imageset/Contents.json",
    "chars": 333,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"cvc.png\"\n    },\n    {\n    "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/cvcpp.imageset/Contents.json",
    "chars": 337,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"cvcpp.png\"\n    },\n    {\n  "
  },
  {
    "path": "Dash/Images.xcassets/Platforms/cvj.imageset/Contents.json",
    "chars": 333,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"cvj.png\"\n    },\n    {\n    "
  }
]

// ... and 614 more files (download for full content)

About this extraction

This page contains the full source code of the Kapeli/Dash-iOS GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 814 files (45.4 MB), approximately 742.2k tokens, and a symbol index with 320 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!