From 9242783a1376d4ec9bc1e506435dd482acb6b660 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Wed, 15 Jun 2016 15:37:19 -0700 Subject: [PATCH] Added generalized (Apple) project, working on funneling in the guides --- README.md | 181 +---------- docs/{testing.md => docker_linux_testing.md} | 0 docs/docker_linux_zt_sdk.md | 45 +++ docs/limitations.md | 15 + docs/linux_zt_sdk.md | 192 ++++++++++- docs/osx_zt_sdk.md | 25 +- docs/zt_sdk.md | 10 + .../project.pbxproj | 304 ++++++++++++++++++ .../contents.xcworkspacedata | 0 .../UserInterfaceState.xcuserstate | Bin 0 -> 20202 bytes .../xcschemes/ZeroTierSDK_OSX.xcscheme | 80 +++++ .../ZeroTierSDK_Unity3D_OSX.xcscheme | 80 +++++ .../ZeroTierSDK_Unity3D_iOS.xcscheme | 80 +++++ .../xcschemes/ZeroTierSDK_iOS.xcscheme | 0 .../xcschemes/xcschememanagement.plist | 52 +++ .../ZeroTierSDK_OSX/Info.plist | 28 ++ .../ZeroTierSDK_OSX/ZeroTierSDK_OSX.h | 19 ++ .../ZeroTierSDK_Unity3D_OSX/Info.plist | 28 ++ .../ZeroTierSDK_Unity3D_iOS/Info.plist | 28 ++ .../ZeroTierSDK_iOS}/Info.plist | 0 .../ZeroTierSDK_iOS/ZeroTierSDK_iOS.h | 0 .../UserInterfaceState.xcuserstate | Bin 45747 -> 0 bytes integrations/README.md | 3 + integrations/{ => _attic}/OSX/README.md | 0 .../project.pbxproj | 0 .../contents.xcworkspacedata | 0 .../ZT_API_OSX_EXAMPLE.xcscmblueprint | 0 .../UserInterfaceState.xcuserstate | Bin 0 -> 45128 bytes .../xcschemes/ZT_API_OSX_EXAMPLE.xcscheme | 0 .../xcschemes/xcschememanagement.plist | 0 .../ZT_API_OSX_EXAMPLE/AppDelegate.swift | 0 .../AppIcon.appiconset/Contents.json | 0 .../Base.lproj/Main.storyboard | 0 .../ZT_API_OSX_EXAMPLE/Info.plist | 0 .../ZT_API_OSX_EXAMPLE/ViewController.swift | 0 .../ZT_API_OSX_EXAMPLE-Bridging-Header.h | 0 .../ZeroTierSDK_OSX.xcodeproj/project.pbxproj | 286 ++++++++++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 8349 bytes .../xcschemes/ZeroTierSDK_OSX.xcscheme | 80 +++++ .../xcschemes/xcschememanagement.plist | 4 +- .../ZeroTierSDK_OSX/Info.plist | 28 ++ .../ZeroTierSDK_OSX/ZeroTierSDK_OSX.h | 19 ++ integrations/{ => _attic}/Unity3D/README.md | 0 .../xcshareddata/ZeroTierUnity.xcscmblueprint | 0 .../iOS/Netcon-iOS.xcodeproj/project.pbxproj | 0 .../contents.xcworkspacedata | 0 .../UserInterfaceState.xcuserstate | Bin .../xcdebugger/Breakpoints_v2.xcbkptlist | 0 .../xcschemes/Netcon-iOS.xcscheme | 0 .../xcschemes/ServiceSetup.xcscheme | 0 .../xcschemes/ZeroTierNetcon.xcscheme | 0 .../xcschemes/xcschememanagement.plist | 0 .../iOS/Netcon-iOS/AppDelegate.swift | 0 .../AppIcon.appiconset/Contents.json | 0 .../Base.lproj/LaunchScreen.storyboard | 0 .../iOS/Netcon-iOS/Base.lproj/Main.storyboard | 0 .../{ => _attic}/iOS/Netcon-iOS/Info.plist | 0 .../Netcon-iOS/Netcon-iOS-Bridging-Header.h | 0 .../iOS/Netcon-iOS/NetconWrapper.cpp | 0 .../iOS/Netcon-iOS/NetconWrapper.hpp | 0 .../iOS/Netcon-iOS/ViewController.swift | 0 .../iOS/Netcon-iOSTests/Info.plist | 0 .../iOS/Netcon-iOSTests/Netcon_iOSTests.swift | 0 .../iOS/Netcon-iOSUITests/Info.plist | 0 .../Netcon-iOSUITests/Netcon_iOSUITests.swift | 0 integrations/{ => _attic}/iOS/README.md | 0 .../iOS/ServiceSetup/ServiceSetup.h | 0 .../iOS/ServiceSetup/ServiceSetup.m | 0 .../iOS/ZeroTierNetcon}/Info.plist | 0 .../iOS/ZeroTierNetcon/ZeroTierNetcon.h | 0 .../iOS/ZeroTierNetconTests/Info.plist | 0 .../ZeroTierNetconTests.swift | 0 .../iOS/ZeroTierOne/ZeroTierOne.h | 0 .../iOS/ZeroTierOne/ZeroTierOne.m | 0 integrations/{ => _attic}/iOS/lwIP/lwIP.h | 0 integrations/{ => _attic}/iOS/lwIP/lwIP.m | 0 .../UserInterfaceState.xcuserstate | Bin 19551 -> 0 bytes 78 files changed, 1415 insertions(+), 179 deletions(-) rename docs/{testing.md => docker_linux_testing.md} (100%) create mode 100644 docs/limitations.md rename integrations/{iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj => Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj}/project.pbxproj (89%) rename integrations/{iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj => Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (100%) create mode 100644 integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_OSX.xcscheme create mode 100644 integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_OSX.xcscheme create mode 100644 integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_iOS.xcscheme rename integrations/{iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj => Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj}/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_iOS.xcscheme (100%) create mode 100644 integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_OSX/Info.plist create mode 100644 integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h create mode 100644 integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_OSX/Info.plist create mode 100644 integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_iOS/Info.plist rename integrations/{iOS/ZeroTierNetcon => Apple/ZeroTierSDK_Apple/ZeroTierSDK_iOS}/Info.plist (100%) rename integrations/{iOS_new/ZeroTierSDK_iOS => Apple/ZeroTierSDK_Apple}/ZeroTierSDK_iOS/ZeroTierSDK_iOS.h (100%) delete mode 100644 integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate rename integrations/{ => _attic}/OSX/README.md (100%) rename integrations/{ => _attic}/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.pbxproj (100%) rename integrations/{ => _attic}/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename integrations/{ => _attic}/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/xcshareddata/ZT_API_OSX_EXAMPLE.xcscmblueprint (100%) create mode 100644 integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate rename integrations/{ => _attic}/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZT_API_OSX_EXAMPLE.xcscheme (100%) rename integrations/{ => _attic}/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist (100%) rename integrations/{ => _attic}/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/AppDelegate.swift (100%) rename integrations/{ => _attic}/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename integrations/{ => _attic}/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/Base.lproj/Main.storyboard (100%) rename integrations/{ => _attic}/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/Info.plist (100%) rename integrations/{ => _attic}/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/ViewController.swift (100%) rename integrations/{ => _attic}/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/ZT_API_OSX_EXAMPLE-Bridging-Header.h (100%) create mode 100644 integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/project.pbxproj create mode 100644 integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_OSX.xcscheme rename integrations/{iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj => _attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj}/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist (84%) create mode 100644 integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX/Info.plist create mode 100644 integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h rename integrations/{ => _attic}/Unity3D/README.md (100%) rename integrations/{ => _attic}/Unity3D/osx_bundle/ZeroTierUnity/ZeroTierUnity.xcodeproj/project.xcworkspace/xcshareddata/ZeroTierUnity.xcscmblueprint (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS.xcodeproj/project.pbxproj (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/Netcon-iOS.xcscheme (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ServiceSetup.xcscheme (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierNetcon.xcscheme (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS/AppDelegate.swift (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS/Base.lproj/LaunchScreen.storyboard (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS/Base.lproj/Main.storyboard (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS/Info.plist (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS/Netcon-iOS-Bridging-Header.h (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS/NetconWrapper.cpp (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS/NetconWrapper.hpp (100%) rename integrations/{ => _attic}/iOS/Netcon-iOS/ViewController.swift (100%) rename integrations/{ => _attic}/iOS/Netcon-iOSTests/Info.plist (100%) rename integrations/{ => _attic}/iOS/Netcon-iOSTests/Netcon_iOSTests.swift (100%) rename integrations/{ => _attic}/iOS/Netcon-iOSUITests/Info.plist (100%) rename integrations/{ => _attic}/iOS/Netcon-iOSUITests/Netcon_iOSUITests.swift (100%) rename integrations/{ => _attic}/iOS/README.md (100%) rename integrations/{ => _attic}/iOS/ServiceSetup/ServiceSetup.h (100%) rename integrations/{ => _attic}/iOS/ServiceSetup/ServiceSetup.m (100%) rename integrations/{iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS => _attic/iOS/ZeroTierNetcon}/Info.plist (100%) rename integrations/{ => _attic}/iOS/ZeroTierNetcon/ZeroTierNetcon.h (100%) rename integrations/{ => _attic}/iOS/ZeroTierNetconTests/Info.plist (100%) rename integrations/{ => _attic}/iOS/ZeroTierNetconTests/ZeroTierNetconTests.swift (100%) rename integrations/{ => _attic}/iOS/ZeroTierOne/ZeroTierOne.h (100%) rename integrations/{ => _attic}/iOS/ZeroTierOne/ZeroTierOne.m (100%) rename integrations/{ => _attic}/iOS/lwIP/lwIP.h (100%) rename integrations/{ => _attic}/iOS/lwIP/lwIP.m (100%) delete mode 100644 integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/README.md b/README.md index 011ff3d..b9b08d7 100644 --- a/README.md +++ b/README.md @@ -1,186 +1,21 @@ ZeroTier SDK (beta) ====== -The ZeroTier SDK offers a microkernel-like networking paradigm for containerized applications and application-specific virtual networking. +ZeroTier virtual network access embedded directly into applications and games. -The SDK couples the ZeroTier core Ethernet virtualization engine with a user-space TCP/IP stack and a library that intercepts calls to the Posix network API. This allows servers and applications to be used without modification or recompilation. It can be used to run services on virtual networks without elevated privileges, special configuration of the physical host, kernel support, or any other application specific configuration. It's ideal for use with [Docker](http://http://www.docker.com), [LXC](https://linuxcontainers.org), or [Rkt](https://coreos.com/rkt/docs/latest/) to build containerized microservices that automatically connect to a virtual network when deployed. It can also be used on a plain un-containerized Linux system to run applications on virtual networks without elevated privileges or system modification. +## What does it do? -More discussion can be found in our [original blog announcement](https://www.zerotier.com/blog/?p=490) and [the SDK product page](https://www.zerotier.com/product-netcon.shtml). +Imagine starting an instance of your application or game and it's automatically a member of a virtual network. +Imagine being able to do this using APIs you're already familiar with. -The SDK is currently in **BETA** and is suitable for testing and experimentation. Only Linux is supported. Future updates will focus on compatibility, full stack support, and improved performance, and may also port to other OSes. - -## Building the SDK - -The SDK works on Linux and has been lightly tested on OSX. To build the service host, IP stack, and intercept library, from the base of the ZeroTier One tree run: - - make clean - make netcon - -This will build a binary called `zerotier-sdk-service` and a library called `libztintercept.so`. It will also build the IP stack as `src/liblwip.so`. - -To enable debug trace statements for Network Containers, use `-D_SDK_DEBUG` - -The `zerotier-sdk-service` binary is almost the same as a regular ZeroTier One build except instead of creating virtual network ports using Linux's `/dev/net/tun` interface, it creates instances of a user-space TCP/IP stack for each virtual network and provides RPC access to this stack via a Unix domain socket. The latter is a library that can be loaded with the Linux `LD_PRELOAD` environment variable or by placement into `/etc/ld.so.preload` on a Linux system or container. Additional magic involving nameless Unix domain socket pairs and interprocess socket handoff is used to emulate TCP sockets with extremely low overhead and in a way that's compatible with select, poll, epoll, and other I/O event mechanisms. - -The intercept library does nothing unless the `ZT_NC_NETWORK` environment variable is set. If on program launch (or fork) it detects the presence of this environment variable, it will attempt to connect to a running `zerotier-sdk-service` at the specified Unix domain socket path. - -Unlike `zerotier-one`, `zerotier-sdk-service` does not need to be run with root privileges and will not modify the host's network configuration in any way. It can be run alongside `zerotier-one` on the same host with no ill effect, though this can be confusing since you'll have to remember the difference between "real" host interfaces (tun/tap) and network containerized endpoints. The latter are completely unknown to the kernel and will not show up in `ifconfig`. - - -## Modes of operation +## How is it used? There are generally two ways one might want to use this SDK/service. The first approach is a *compile-time static linking* of our SDK/service directly into your application. With this option you can bundle our entire functionality right into your app with no need to communicate with a service externally, it'll all be handled automatically. The second is a service-oriented approach where our SDK is *dynamically-linked* into your applications upon startup and will communicate to a single ZeroTier service on the host. This can be useful if you've already compiled your applications and can't perform a static linking. ![Image](docs/img/methods.png) +## How does it work? -## Linking into an application on Mac OSX - -Example: - - gcc myapp.c -o myapp libzerotierintercept.so - export ZT_NC_NETWORK=/tmp/netcon-test-home/nc_8056c2e21c000001 - -Start service - - ./zerotier-netcon-service -d -p8000 /tmp/netcon-test-home - -Run application - - ./myapp - - -## Starting the Network Containers Service - -You don't need Docker or any other container engine to try Network Containers. A simple test can be performed in user space (no root) in your own home directory. - -First, build the netcon service and intercept library as described above. Then create a directory to act as a temporary ZeroTier home for your test netcon service instance. You'll need to move the `liblwip.so` binary that was built with `make netcon` into there, since the service must be able to find it there and load it. - - mkdir /tmp/netcon-test-home - cp -f ./netcon/liblwip.so /tmp/netcon-test-home - -Now you can run the service (no sudo needed, and `-d` tells it to run in the background): - - ./zerotier-netcon-service -d -p8000 /tmp/netcon-test-home - -As with ZeroTier One in its normal incarnation, you'll need to join a network for anything interesting to happen: - - ./zerotier-cli -D/tmp/netcon-test-home join 8056c2e21c000001 - -If you don't want to use [Earth](https://www.zerotier.com/public.shtml) for this test, replace 8056c2e21c000001 with a different network ID. The `-D` option tells `zerotier-cli` not to look in `/var/lib/zerotier-one` for information about a running instance of the ZeroTier system service but instead to look in `/tmp/netcon-test-home`. - -Now type: - - ./zerotier-cli -D/tmp/netcon-test-home listnetworks - -Try it a few times until you see that you've successfully joined the network and have an IP address. Instead of a *zt#* device, a path to a Unix domain socket will be listed for the network's port. - -Now you will want to have ZeroTier One (the normal `zerotier-one` build, not network containers) running somewhere else, such as on another Linux system or VM. Technically you could run it on the *same* Linux system and it wouldn't matter at all, but many people find this intensely confusing until they grasp just what exactly is happening here. - -On the other Linux system, join the same network if you haven't already (8056c2e21c000001 if you're using Earth) and wait until you have an IP address. Then try pinging the IP address your netcon instance received. You should see ping replies. - -Back on the host that's running `zerotier-sdk-service`, type `ip addr list` or `ifconfig` (ifconfig is technically deprecated so some Linux systems might not have it). Notice that the IP address of the network containers endpoint is not listed and no network device is listed for it either. That's because as far as the Linux kernel is concerned it doesn't exist. - -What are you pinging? What is happening here? - -The `zerotier-sdk-service` binary has joined a *virtual* network and is running a *virtual* TCP/IP stack entirely in user space. As far as your system is concerned it's just another program exchanging UDP packets with a few other hosts on the Internet and nothing out of the ordinary is happening at all. That's why you never had to type *sudo*. It didn't change anything on the host. - -Now you can run an application inside your network container. - - export LD_PRELOAD=`pwd`/libzerotierintercept.so - export ZT_NC_NETWORK=/tmp/netcon-test-home/nc_8056c2e21c000001 - node netcon/httpserver.js - -Also note that the "pwd" in LD_PRELOAD assumes you are in the ZeroTier source root and have built netcon there. If not, substitute the full path to *libzerotierintercept.so*. If you want to remove those environment variables later, use "unset LD_PRELOAD" and "unset ZT_NC_NETWORK". - -If you don't have node.js installed, an alternative test using python would be: - - python -m SimpleHTTPServer 80 - -If you are running Python 3, use `-m http.server`. - -If all went well a small static HTTP server is now serving up the current directory, but only inside the network container. Going to port 80 on your machine won't work. To reach it, go to the other system where you joined the same network with a conventional ZeroTier instance and try: - - curl http://NETCON.INSTANCE.IP/ - -Replace *NETCON.INSTANCE.IP* with the IP address that *zerotier-netcon-service* was assigned on the virtual network. (This is the same IP you pinged in your first test.) If everything works, you should get back a copy of ZeroTier One's main README.md file. - -## Installing in a Docker container (or any other container engine) - -If it's not immediately obvious, installation into a Docker container is easy. Just install `zerotier-sdk-service`, `libztintercept.so`, and `liblwip.so` into the container at an appropriate locations. We suggest putting it all in `/var/lib/zerotier-one` since this is the default ZeroTier home and will eliminate the need to supply a path to any of ZeroTier's services or utilities. Then, in your Docker container entry point script launch the service with *-d* to run it in the background, set the appropriate environment variables as described above, and launch your container's main application. - -The only bit of complexity is configuring which virtual network to join. ZeroTier's service automatically joins networks that have `.conf` files in `ZTHOME/networks.d` even if the `.conf` file is empty. So one way of doing this very easily is to add the following commands to your Dockerfile or container entry point script: - - mkdir -p /var/lib/zerotier-one/networks.d - touch /var/lib/zerotier-one/networks.d/8056c2e21c000001.conf - -Replace 8056c2e21c000001 with the network ID of the network you want your container to automatically join. It's also a good idea in your container's entry point script to add a small loop to wait until the container's instance of ZeroTier generates an identity and comes online. This could be something like: - - /var/lib/zerotier-one/zerotier-netcon-service -d - while [ ! -f /var/lib/zerotier-one/identity.secret ]; do - sleep 0.1 - done - # zerotier-netcon-service is now running and has generated an identity - -(Be sure you don't bundle the identity into the container, otherwise every container will try to be the same device and they will "fight" over the device's address.) - -Now each new instance of your container will automatically join the specified network on startup. Authorizing the container on a private network still requires a manual authorization step either via the ZeroTier Central web UI or the API. We're working on some ideas to automate this via bearer token auth or similar since doing this manually or with scripts for large deployments is tedious. - -## Tests - -For info on testing the SDK, take a look at [docs/testing.md](docs/testing.md) - -## Mobile App Embedding - -For information on the app-embedding aspect of the SDK check out our [ZeroTier SDK](http://10.6.6.2/ZeroTier/ZeroTierSDK/docs/master/zt_sdk.md) blog post. - -## Limitations and Compatibility - -The beta version of the SDK **only supports IPv4**. There is no IPv6 support and no support for ICMP (or RAW sockets). That means network-containerizing *ping* won't work. - -The virtual TCP/IP stack will respond to *incoming* ICMP ECHO requests, which means that you can ping it from another host on the same ZeroTier virtual network. This is useful for testing. - -#### Controlling traffic - -**Network Containers are currently all or nothing.** If engaged, the intercept library intercepts all network I/O calls and redirects them through the new path. A network-containerized application cannot communicate over the regular network connection of its host or container or with anything else except other hosts on its ZeroTier virtual LAN. Support for optional "fall-through" to the host IP stack for outgoing connections outside the virtual network and for gateway routes within the virtual network is planned. (It will be optional since in some cases total network isolation might be considered a nice security feature.) - -The exception to this rule is if you use a network library in your application that supports the use of a SOCKS5 proxy and if you configure your network library to use the proxy service provided by the ZeroTier service you can disable all other shims and only talk to ZeroTier virtual networks via the proxied connections you specifically set up. - -#### Compatibility Test Results - -The following applications have been tested and confirmed to work for the beta release: - -Fedora 23: - - httpstub.c - nginx 1.8.0 - http 2.4.16, 2.4.17 - darkhttpd 1.11 - python 2.7.10 (python -m SimpleHTTPServer) - python 3.4.3 (python -m http.server) - redis 3.0.4 - node 6.0.0-pre - sshd - -CentOS 7: - - httpstub.c - nginx 1.6.3 - httpd 2.4.6 (debug mode -X) - darkhttpd 1.11 - node 4.2.2 - redis 2.8.19 - sshd - -Ubuntu 14.04.3: - - httpstub.c - nginx 1.4.6 - python 2.7.6 (python -m SimpleHTTPServer) - python 3.4.0 (python -m http.server) - node 5.2.0 - redis 2.8.4 - sshd - -It is *likely* to work with other things but there are no guarantees. +We've built a special background service that pairs the ZeroTier protocol with a user-space [Lightweight IP (lwIP) stack](http://savannah.nongnu.org/projects/lwip/) to create a new way for you to bring your applications onto your virtual network. Check out the [Integrations]() page to learn how to integrate this with your particular application. +For a more in-depth explanation of our technology take a look at our [SDK Primer]() \ No newline at end of file diff --git a/docs/testing.md b/docs/docker_linux_testing.md similarity index 100% rename from docs/testing.md rename to docs/docker_linux_testing.md diff --git a/docs/docker_linux_zt_sdk.md b/docs/docker_linux_zt_sdk.md index d7a4e4b..dc8004b 100644 --- a/docs/docker_linux_zt_sdk.md +++ b/docs/docker_linux_zt_sdk.md @@ -69,3 +69,48 @@ At this point, simply run your application as you normally would. It will be aut **Additional info** If you'd like to know the IP address your service can be reached at on this particular virtual network, use the following: `zerotier-cli -D/var/lib/zerotier-one/nc_XXXXXXXXXXXXXXXX listnetworks` + + + + + + + + +## Tests + +For info on testing the SDK, take a look at [docs/docker_linux_testing.md](docs/docker_linux_testing.md) + + + + + + + + + + + + + + +## Installing in a Docker container (or any other container engine) + +If it's not immediately obvious, installation into a Docker container is easy. Just install `zerotier-sdk-service`, `libztintercept.so`, and `liblwip.so` into the container at an appropriate locations. We suggest putting it all in `/var/lib/zerotier-one` since this is the default ZeroTier home and will eliminate the need to supply a path to any of ZeroTier's services or utilities. Then, in your Docker container entry point script launch the service with *-d* to run it in the background, set the appropriate environment variables as described above, and launch your container's main application. + +The only bit of complexity is configuring which virtual network to join. ZeroTier's service automatically joins networks that have `.conf` files in `ZTHOME/networks.d` even if the `.conf` file is empty. So one way of doing this very easily is to add the following commands to your Dockerfile or container entry point script: + + mkdir -p /var/lib/zerotier-one/networks.d + touch /var/lib/zerotier-one/networks.d/8056c2e21c000001.conf + +Replace 8056c2e21c000001 with the network ID of the network you want your container to automatically join. It's also a good idea in your container's entry point script to add a small loop to wait until the container's instance of ZeroTier generates an identity and comes online. This could be something like: + + /var/lib/zerotier-one/zerotier-netcon-service -d + while [ ! -f /var/lib/zerotier-one/identity.secret ]; do + sleep 0.1 + done + # zerotier-netcon-service is now running and has generated an identity + +(Be sure you don't bundle the identity into the container, otherwise every container will try to be the same device and they will "fight" over the device's address.) + +Now each new instance of your container will automatically join the specified network on startup. Authorizing the container on a private network still requires a manual authorization step either via the ZeroTier Central web UI or the API. We're working on some ideas to automate this via bearer token auth or similar since doing this manually or with scripts for large deployments is tedious. diff --git a/docs/limitations.md b/docs/limitations.md new file mode 100644 index 0000000..00a6393 --- /dev/null +++ b/docs/limitations.md @@ -0,0 +1,15 @@ +Notes / Limitations +==== + +## Limitations and Compatibility + +The beta version of the SDK **only supports IPv4**. There is no IPv6 support and no support for ICMP (or RAW sockets). That means network-containerizing *ping* won't work. + +The virtual TCP/IP stack will respond to *incoming* ICMP ECHO requests, which means that you can ping it from another host on the same ZeroTier virtual network. This is useful for testing. + + +#### Controlling traffic + +**Network Containers are currently all or nothing.** If engaged, the intercept library intercepts all network I/O calls and redirects them through the new path. A network-containerized application cannot communicate over the regular network connection of its host or container or with anything else except other hosts on its ZeroTier virtual LAN. Support for optional "fall-through" to the host IP stack for outgoing connections outside the virtual network and for gateway routes within the virtual network is planned. (It will be optional since in some cases total network isolation might be considered a nice security feature.) + +The exception to this rule is if you use a network library in your application that supports the use of a SOCKS5 proxy and if you configure your network library to use the proxy service provided by the ZeroTier service you can disable all other shims and only talk to ZeroTier virtual networks via the proxied connections you specifically set up. \ No newline at end of file diff --git a/docs/linux_zt_sdk.md b/docs/linux_zt_sdk.md index d7a4e4b..40d278f 100644 --- a/docs/linux_zt_sdk.md +++ b/docs/linux_zt_sdk.md @@ -1,11 +1,51 @@ -Docker + ZeroTier SDK +Linux + ZeroTier SDK ==== Welcome! -Imagine a flat, encrypted, no-configuration LAN for all of your Docker containers. +Imagine a flat, encrypted, no-configuration LAN for all of your Linux applications. + +This short tutorial will show you how to enable ZeroTier functionality for Linux applications using static-linking and dynamic linking methods. + + + + + + + + + + +## Building the SDK + +To build the service host, IP stack, and intercept library, from the base of the ZeroTier One tree run: + + make clean + make netcon + +This will build a binary called `zerotier-sdk-service` and a library called `libztintercept.so`. It will also build the IP stack as `src/liblwip.so`. + +To enable debug trace statements for Network Containers, use `-D_SDK_DEBUG` + +The `zerotier-sdk-service` binary is almost the same as a regular ZeroTier One build except instead of creating virtual network ports using Linux's `/dev/net/tun` interface, it creates instances of a user-space TCP/IP stack for each virtual network and provides RPC access to this stack via a Unix domain socket. The latter is a library that can be loaded with the Linux `LD_PRELOAD` environment variable or by placement into `/etc/ld.so.preload` on a Linux system or container. Additional magic involving nameless Unix domain socket pairs and interprocess socket handoff is used to emulate TCP sockets with extremely low overhead and in a way that's compatible with select, poll, epoll, and other I/O event mechanisms. + +The intercept library does nothing unless the `ZT_NC_NETWORK` environment variable is set. If on program launch (or fork) it detects the presence of this environment variable, it will attempt to connect to a running `zerotier-sdk-service` at the specified Unix domain socket path. + +Unlike `zerotier-one`, `zerotier-sdk-service` does not need to be run with root privileges and will not modify the host's network configuration in any way. It can be run alongside `zerotier-one` on the same host with no ill effect, though this can be confusing since you'll have to remember the difference between "real" host interfaces (tun/tap) and network containerized endpoints. The latter are completely unknown to the kernel and will not show up in `ifconfig`. + + + + + + + + + + + + + -This short tutorial will show you how to enable ZeroTier functionality for your Docker software container with little to no configuration. In this example we aim to build a Docker container with ZeroTier’s Network Container service bundled right in so that it’s effortless to hook any number of your services in the container up to your virtual network. **Step 1: Build the ZeroTier service binaries** @@ -69,3 +109,149 @@ At this point, simply run your application as you normally would. It will be aut **Additional info** If you'd like to know the IP address your service can be reached at on this particular virtual network, use the following: `zerotier-cli -D/var/lib/zerotier-one/nc_XXXXXXXXXXXXXXXX listnetworks` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Starting the Network Containers Service + +You don't need Docker or any other container engine to try Network Containers. A simple test can be performed in user space (no root) in your own home directory. + +First, build the netcon service and intercept library as described above. Then create a directory to act as a temporary ZeroTier home for your test netcon service instance. You'll need to move the `liblwip.so` binary that was built with `make netcon` into there, since the service must be able to find it there and load it. + + mkdir /tmp/netcon-test-home + cp -f ./netcon/liblwip.so /tmp/netcon-test-home + +Now you can run the service (no sudo needed, and `-d` tells it to run in the background): + + ./zerotier-netcon-service -d -p8000 /tmp/netcon-test-home + +As with ZeroTier One in its normal incarnation, you'll need to join a network for anything interesting to happen: + + ./zerotier-cli -D/tmp/netcon-test-home join 8056c2e21c000001 + +If you don't want to use [Earth](https://www.zerotier.com/public.shtml) for this test, replace 8056c2e21c000001 with a different network ID. The `-D` option tells `zerotier-cli` not to look in `/var/lib/zerotier-one` for information about a running instance of the ZeroTier system service but instead to look in `/tmp/netcon-test-home`. + +Now type: + + ./zerotier-cli -D/tmp/netcon-test-home listnetworks + +Try it a few times until you see that you've successfully joined the network and have an IP address. Instead of a *zt#* device, a path to a Unix domain socket will be listed for the network's port. + +Now you will want to have ZeroTier One (the normal `zerotier-one` build, not network containers) running somewhere else, such as on another Linux system or VM. Technically you could run it on the *same* Linux system and it wouldn't matter at all, but many people find this intensely confusing until they grasp just what exactly is happening here. + +On the other Linux system, join the same network if you haven't already (8056c2e21c000001 if you're using Earth) and wait until you have an IP address. Then try pinging the IP address your netcon instance received. You should see ping replies. + +Back on the host that's running `zerotier-sdk-service`, type `ip addr list` or `ifconfig` (ifconfig is technically deprecated so some Linux systems might not have it). Notice that the IP address of the network containers endpoint is not listed and no network device is listed for it either. That's because as far as the Linux kernel is concerned it doesn't exist. + +What are you pinging? What is happening here? + +The `zerotier-sdk-service` binary has joined a *virtual* network and is running a *virtual* TCP/IP stack entirely in user space. As far as your system is concerned it's just another program exchanging UDP packets with a few other hosts on the Internet and nothing out of the ordinary is happening at all. That's why you never had to type *sudo*. It didn't change anything on the host. + +Now you can run an application inside your network container. + + export LD_PRELOAD=`pwd`/libzerotierintercept.so + export ZT_NC_NETWORK=/tmp/netcon-test-home/nc_8056c2e21c000001 + node netcon/httpserver.js + +Also note that the "pwd" in LD_PRELOAD assumes you are in the ZeroTier source root and have built netcon there. If not, substitute the full path to *libzerotierintercept.so*. If you want to remove those environment variables later, use "unset LD_PRELOAD" and "unset ZT_NC_NETWORK". + +If you don't have node.js installed, an alternative test using python would be: + + python -m SimpleHTTPServer 80 + +If you are running Python 3, use `-m http.server`. + +If all went well a small static HTTP server is now serving up the current directory, but only inside the network container. Going to port 80 on your machine won't work. To reach it, go to the other system where you joined the same network with a conventional ZeroTier instance and try: + + curl http://NETCON.INSTANCE.IP/ + +Replace *NETCON.INSTANCE.IP* with the IP address that *zerotier-netcon-service* was assigned on the virtual network. (This is the same IP you pinged in your first test.) If everything works, you should get back a copy of ZeroTier One's main README.md file. + + + + + + + + + + + + + + + + + + + + +#### Compatibility Test Results + +The following applications have been tested and confirmed to work for the beta release: + +Fedora 23: + + httpstub.c + nginx 1.8.0 + http 2.4.16, 2.4.17 + darkhttpd 1.11 + python 2.7.10 (python -m SimpleHTTPServer) + python 3.4.3 (python -m http.server) + redis 3.0.4 + node 6.0.0-pre + sshd + +CentOS 7: + + httpstub.c + nginx 1.6.3 + httpd 2.4.6 (debug mode -X) + darkhttpd 1.11 + node 4.2.2 + redis 2.8.19 + sshd + +Ubuntu 14.04.3: + + httpstub.c + nginx 1.4.6 + python 2.7.6 (python -m SimpleHTTPServer) + python 3.4.0 (python -m http.server) + node 5.2.0 + redis 2.8.4 + sshd + +It is *likely* to work with other things but there are no guarantees. diff --git a/docs/osx_zt_sdk.md b/docs/osx_zt_sdk.md index a676257..036db87 100644 --- a/docs/osx_zt_sdk.md +++ b/docs/osx_zt_sdk.md @@ -3,7 +3,7 @@ OSX + ZeroTier SDK Welcome! -Imagine a flat, encrypted, no-configuration LAN for all of the instances of your iOS app. +Imagine a flat, encrypted, no-configuration LAN for all of the instances of your OSX app. This short tutorial will show you how to enable ZeroTier functionality for your iOS app with little to no code modification. Check out our [ZeroTier SDK](https://www.zerotier.com/blog) page for more info on how the integration works and [Shim Techniques](https://www.zerotier.com/blog) for a discussion of shims available for your app/technology. @@ -76,3 +76,26 @@ outputStream!.setProperty(myDict, forKey: NSStreamSOCKSProxyConfigurationKey) // END proxy configuration ``` + + + + + + + + +## Linking into an application on Mac OSX + +Example: + + gcc myapp.c -o myapp libztintercept.so + export ZT_NC_NETWORK=/tmp/netcon-test-home/nc_8056c2e21c000001 + +Start service + + ./zerotier-netcon-service -d -p8000 /tmp/netcon-test-home + +Run application + + ./myapp + diff --git a/docs/zt_sdk.md b/docs/zt_sdk.md index c18b19a..af1f168 100644 --- a/docs/zt_sdk.md +++ b/docs/zt_sdk.md @@ -1,5 +1,15 @@ # ZeroTier SDK + +The ZeroTier SDK (formerly known as Network Containers) offers a microkernel-like networking paradigm for containerized applications and application-specific virtual networking. + +The SDK couples the ZeroTier core Ethernet virtualization engine with a user-space TCP/IP stack and a library that intercepts calls to the Posix network API. This allows servers and applications to be used without modification or recompilation. It can be used to run services on virtual networks without elevated privileges, special configuration of the physical host, kernel support, or any other application specific configuration. It's ideal for use with [Docker](http://http://www.docker.com), [LXC](https://linuxcontainers.org), or [Rkt](https://coreos.com/rkt/docs/latest/) to build containerized microservices that automatically connect to a virtual network when deployed. It can also be used on a plain un-containerized Linux system to run applications on virtual networks without elevated privileges or system modification. + +More discussion can be found in our [original blog announcement](https://www.zerotier.com/blog/?p=490) and [the SDK product page](https://www.zerotier.com/product-netcon.shtml). + +The SDK is currently in **BETA** and is suitable for testing and experimentation. Linux, Android, OSX, and iOS are supported. Future updates will focus on compatibility, full stack support, and improved performance, and may also port to other OSes. + + ## What can it do? True P2P injected right into your app with no code changes! A ZeroTier-enabled app. (formerly known as Network Containers) diff --git a/integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj/project.pbxproj b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj similarity index 89% rename from integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj/project.pbxproj rename to integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj index a0d9109..5e82bf8 100644 --- a/integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj/project.pbxproj +++ b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 7C0FEDDB1D120376007A4E66 /* ZeroTierSDK_OSX.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C0FEDDA1D120376007A4E66 /* ZeroTierSDK_OSX.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7C936A381D11EBEA00470058 /* ZeroTierSDK_iOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C936A371D11EBEA00470058 /* ZeroTierSDK_iOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7C936A511D11EC3000470058 /* SDK_Debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 7C936A431D11EC3000470058 /* SDK_Debug.c */; }; 7C936A521D11EC3000470058 /* SDK_Debug.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C936A441D11EC3000470058 /* SDK_Debug.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -184,6 +185,13 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 7C0FEDD81D120376007A4E66 /* ZeroTierSDK_OSX.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZeroTierSDK_OSX.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7C0FEDDA1D120376007A4E66 /* ZeroTierSDK_OSX.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ZeroTierSDK_OSX.h; sourceTree = ""; }; + 7C0FEDDC1D120376007A4E66 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7C0FEDE41D12039C007A4E66 /* ZeroTierSDK_Unity3D_iOS.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZeroTierSDK_Unity3D_iOS.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 7C0FEDE61D12039C007A4E66 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7C0FEDEE1D1203AF007A4E66 /* ZeroTierSDK_Unity3D_OSX.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZeroTierSDK_Unity3D_OSX.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 7C0FEDF01D1203AF007A4E66 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 7C936A341D11EBEA00470058 /* ZeroTierSDK_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZeroTierSDK_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7C936A371D11EBEA00470058 /* ZeroTierSDK_iOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ZeroTierSDK_iOS.h; sourceTree = ""; }; 7C936A391D11EBEA00470058 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -363,6 +371,27 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 7C0FEDD41D120376007A4E66 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7C0FEDE11D12039C007A4E66 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7C0FEDEB1D1203AF007A4E66 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 7C936A301D11EBEA00470058 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -373,6 +402,31 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 7C0FEDD91D120376007A4E66 /* ZeroTierSDK_OSX */ = { + isa = PBXGroup; + children = ( + 7C0FEDDA1D120376007A4E66 /* ZeroTierSDK_OSX.h */, + 7C0FEDDC1D120376007A4E66 /* Info.plist */, + ); + path = ZeroTierSDK_OSX; + sourceTree = ""; + }; + 7C0FEDE51D12039C007A4E66 /* ZeroTierSDK_Unity3D_iOS */ = { + isa = PBXGroup; + children = ( + 7C0FEDE61D12039C007A4E66 /* Info.plist */, + ); + path = ZeroTierSDK_Unity3D_iOS; + sourceTree = ""; + }; + 7C0FEDEF1D1203AF007A4E66 /* ZeroTierSDK_Unity3D_OSX */ = { + isa = PBXGroup; + children = ( + 7C0FEDF01D1203AF007A4E66 /* Info.plist */, + ); + path = ZeroTierSDK_Unity3D_OSX; + sourceTree = ""; + }; 7C936A2A1D11EBEA00470058 = { isa = PBXGroup; children = ( @@ -381,6 +435,9 @@ 7C936A401D11EC0900470058 /* ext */, 7C936A3F1D11EBF900470058 /* lwIP */, 7C936A361D11EBEA00470058 /* ZeroTierSDK_iOS */, + 7C0FEDD91D120376007A4E66 /* ZeroTierSDK_OSX */, + 7C0FEDE51D12039C007A4E66 /* ZeroTierSDK_Unity3D_iOS */, + 7C0FEDEF1D1203AF007A4E66 /* ZeroTierSDK_Unity3D_OSX */, 7C936A351D11EBEA00470058 /* Products */, ); sourceTree = ""; @@ -389,6 +446,9 @@ isa = PBXGroup; children = ( 7C936A341D11EBEA00470058 /* ZeroTierSDK_iOS.framework */, + 7C0FEDD81D120376007A4E66 /* ZeroTierSDK_OSX.framework */, + 7C0FEDE41D12039C007A4E66 /* ZeroTierSDK_Unity3D_iOS.bundle */, + 7C0FEDEE1D1203AF007A4E66 /* ZeroTierSDK_Unity3D_OSX.bundle */, ); name = Products; sourceTree = ""; @@ -608,6 +668,14 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 7C0FEDD51D120376007A4E66 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 7C0FEDDB1D120376007A4E66 /* ZeroTierSDK_OSX.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 7C936A311D11EBEA00470058 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -720,6 +788,58 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 7C0FEDD71D120376007A4E66 /* ZeroTierSDK_OSX */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7C0FEDDF1D120376007A4E66 /* Build configuration list for PBXNativeTarget "ZeroTierSDK_OSX" */; + buildPhases = ( + 7C0FEDD31D120376007A4E66 /* Sources */, + 7C0FEDD41D120376007A4E66 /* Frameworks */, + 7C0FEDD51D120376007A4E66 /* Headers */, + 7C0FEDD61D120376007A4E66 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ZeroTierSDK_OSX; + productName = ZeroTierSDK_OSX; + productReference = 7C0FEDD81D120376007A4E66 /* ZeroTierSDK_OSX.framework */; + productType = "com.apple.product-type.framework"; + }; + 7C0FEDE31D12039C007A4E66 /* ZeroTierSDK_Unity3D_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7C0FEDE71D12039C007A4E66 /* Build configuration list for PBXNativeTarget "ZeroTierSDK_Unity3D_iOS" */; + buildPhases = ( + 7C0FEDE01D12039C007A4E66 /* Sources */, + 7C0FEDE11D12039C007A4E66 /* Frameworks */, + 7C0FEDE21D12039C007A4E66 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ZeroTierSDK_Unity3D_iOS; + productName = ZeroTierSDK_Unity3D_iOS; + productReference = 7C0FEDE41D12039C007A4E66 /* ZeroTierSDK_Unity3D_iOS.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 7C0FEDED1D1203AF007A4E66 /* ZeroTierSDK_Unity3D_OSX */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7C0FEDF11D1203AF007A4E66 /* Build configuration list for PBXNativeTarget "ZeroTierSDK_Unity3D_OSX" */; + buildPhases = ( + 7C0FEDEA1D1203AF007A4E66 /* Sources */, + 7C0FEDEB1D1203AF007A4E66 /* Frameworks */, + 7C0FEDEC1D1203AF007A4E66 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ZeroTierSDK_Unity3D_OSX; + productName = ZeroTierSDK_Unity3D_OSX; + productReference = 7C0FEDEE1D1203AF007A4E66 /* ZeroTierSDK_Unity3D_OSX.bundle */; + productType = "com.apple.product-type.bundle"; + }; 7C936A331D11EBEA00470058 /* ZeroTierSDK_iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 7C936A3C1D11EBEA00470058 /* Build configuration list for PBXNativeTarget "ZeroTierSDK_iOS" */; @@ -747,6 +867,15 @@ LastUpgradeCheck = 0730; ORGANIZATIONNAME = "ZeroTier Inc."; TargetAttributes = { + 7C0FEDD71D120376007A4E66 = { + CreatedOnToolsVersion = 7.3; + }; + 7C0FEDE31D12039C007A4E66 = { + CreatedOnToolsVersion = 7.3; + }; + 7C0FEDED1D1203AF007A4E66 = { + CreatedOnToolsVersion = 7.3; + }; 7C936A331D11EBEA00470058 = { CreatedOnToolsVersion = 7.3; }; @@ -765,11 +894,35 @@ projectRoot = ""; targets = ( 7C936A331D11EBEA00470058 /* ZeroTierSDK_iOS */, + 7C0FEDD71D120376007A4E66 /* ZeroTierSDK_OSX */, + 7C0FEDE31D12039C007A4E66 /* ZeroTierSDK_Unity3D_iOS */, + 7C0FEDED1D1203AF007A4E66 /* ZeroTierSDK_Unity3D_OSX */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 7C0FEDD61D120376007A4E66 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7C0FEDE21D12039C007A4E66 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7C0FEDEC1D1203AF007A4E66 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 7C936A321D11EBEA00470058 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -780,6 +933,27 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 7C0FEDD31D120376007A4E66 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7C0FEDE01D12039C007A4E66 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7C0FEDEA1D1203AF007A4E66 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 7C936A2F1D11EBEA00470058 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -862,6 +1036,112 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ + 7C0FEDDD1D120376007A4E66 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = ZeroTierSDK_OSX/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-OSX"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 7C0FEDDE1D120376007A4E66 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = ZeroTierSDK_OSX/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-OSX"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 7C0FEDE81D12039C007A4E66 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = ZeroTierSDK_Unity3D_iOS/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-Unity3D-iOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 7C0FEDE91D12039C007A4E66 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = ZeroTierSDK_Unity3D_iOS/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-Unity3D-iOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 7C0FEDF21D1203AF007A4E66 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = ZeroTierSDK_Unity3D_OSX/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-Unity3D-OSX"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 7C0FEDF31D1203AF007A4E66 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = ZeroTierSDK_Unity3D_OSX/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-Unity3D-OSX"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; 7C936A3A1D11EBEA00470058 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -994,6 +1274,30 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 7C0FEDDF1D120376007A4E66 /* Build configuration list for PBXNativeTarget "ZeroTierSDK_OSX" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7C0FEDDD1D120376007A4E66 /* Debug */, + 7C0FEDDE1D120376007A4E66 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + 7C0FEDE71D12039C007A4E66 /* Build configuration list for PBXNativeTarget "ZeroTierSDK_Unity3D_iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7C0FEDE81D12039C007A4E66 /* Debug */, + 7C0FEDE91D12039C007A4E66 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + 7C0FEDF11D1203AF007A4E66 /* Build configuration list for PBXNativeTarget "ZeroTierSDK_Unity3D_OSX" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7C0FEDF21D1203AF007A4E66 /* Debug */, + 7C0FEDF31D1203AF007A4E66 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; 7C936A2E1D11EBEA00470058 /* Build configuration list for PBXProject "ZeroTierSDK_iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..ba5f756f964f9ba44cb3cbc2a1e3bf155e54d6aa GIT binary patch literal 20202 zcmc(H2Vj#`*Z;lGNZYiuA>GiCHtB+5x40KBM8xqwPoAc2p!)j0-}`<4f~0w#d(S!d+;h%7_uSug zPFK6#<$L2FgS#l!eqN9~GcNRD>p>$*2xZK{L=yWJPn( zT-1s>P$zPtWoQMu08zExrn0k2m5Q@QwIp zd^_HXd+{!OH{Ol!!S~`l_(6OaKaHQk&*JCs^XP8;0)7P_MZ59q_y>Fj|ANosKPXHw zlpiIgMo|(fl!~CDsTeArN~DsgRBAkxL1j@IN=q520;+^6rOK$8l$Dx8&81qY`BXdA zMJ=GZsfE-MYAJOYMW|KO<)lc0^?V;|Y?xzk? zk5f-jhp3mSSEyI1*Qg`ZQR*0Voce(Jkot%^MV+R;qrRtpp#Gr#q!Ep2il%9XX6ezi zln$lCXc?VAC(?2{lUC7Lw3gPget~|OewTiaexLq;{*eBJ{+#}T{*wNdK2QJ2AckRBCV&w$!AuAf%7igd zOf)l|NoSNy29wFCm@G!kOk^sUOPEPaB~!&zGc`;tGnr{++88@CkD1T3GaXDP<6yd& z#moxkYGxg?f!V~|#N5K%%JedQ%ns%*=3eFj=3(Yh<`DBF^BnU$bBsC8oM2vOPBQN? zA2Fwx)693w_skE>kIbJeVlhjxG#kK**$_68jbfwO1U8YCvuW%&HiOl$de+1ivnA{# zwvw%4&FmC*Hfv?=>^#=ZcC!oFMeJ(!N_Gvqmc5F-nq9|U&u(OIX1B1r*t^-?>^>l<$_I`FBdyqZMzQDf79$`~1Zr`hk=@7W*NAK9PSGwjdoIreuE644@& zC_oe<3KzwS;zaSH6j7=uO_U{4i?T%;QBH%Rv%9_h7z#jQ6o`UQ2$D8cn=|IydR)`s zbHL*p70vBdm#YtrLcxS0bRUwS(S+e}5vj6B!YWG3njFsgt}bh{t<=%n-C^r=TO^7y zwN95?uGT6`vP;U98g;o|X)4JoR~DTxGKvI~AIKRF(;Sv?IE%w-k_;jhJ8jna zT@HJv+huBY+ZS5hwib(IOsQ?IwY%M2)?#-%oMtyXb(K4u4Rw{S8J=b~b90-m!v+L| zuXWv>r8bw_-f4A11hhzEeF&60tsOSAeTi*=hDD;Pw7T3Sj*hN&8!)Wp1EpaDtjbyc%n=ceXedxh#^XI$JaJ5rp)<q2j5{$75RiheI%bVjIP~3F*blTcsA{N>RBH<*=B2h0^F6M`+Y)l zCHnI6QhiyjQeUnzDK*8KVr8*5H&>}E&jmuIr5a6Hv3FM5&^(mdi|iz}7tJSeyzNAr zZS7zLwid6ER63eH4&XZK2@?*qpci$Kc#?Di=E;TJs2eRri(tNbP%T1uY`yWG=T1_A^qdMa4FZE>yD-9{7y`I9grJBF5{OM&QRh#<}) z8C`9z@V2S6b+)?Oz+r|xE48|<5{e`c`BAhIx~)Q&^Y+pLkBezU5{21bjjo(oZLaEe zTj#Xf_%8iuHClt38mrCxH=)s0=xQ*rL2i9$9cmi>KxnldU2Bm^_p-iyk1#e_}lk^MdRn86ydD5Irskl1Wq-S@l2jj$zUdiFp`3 zGpLhi2`mwUPF~1KJ+$v zhiHku550%pCwXL!Z$SIl`q;;;n-3C!Bv%v-HMCK(9m#wQUlMiQ^OKeVu+YV1# z=4ZkZW@~i{?w4umf|Vt68oaKD*XGhmmcMwC;fae~5Y01(2aGQ~%ncSv%YVS!USqa& z+7|h+hi4alA7bs*%h%{9lzIpH27QZ8qwmo7=m+#8$tMM*kQ5OkF_Gds&>8eII*Wcm z=g_a{JSiciq>R)NGpQ#td81PLEIq<u!K)kERyjfw72*?tLU8T z5V}|-sXlLnrx`BK0#*qNc!mo$NA87o+ail3eT1f7LF%o}R@=b3Js^i-gysWs3>RP| zs(%@TEs{xpP1WRb+1&NkR@cDTF0vKN@F)C~N+Nxz4T&`{eOQG3Q0msLycv7aL@dTZ z;7vG?l=tFMWCA}wqam`Hc`Y@9mMYw~4q>Ulqj6Xtmf}z{kyMk(UIGy~8cF+bB#t5# zO$`t>3 zG{j5Hgi9f!;9^`trjV(9xD1z*X=FM{ZW=K9Mz0Bv9zLy}pzzld>(L9Y!qt$_`po@> zYg0e2!L|H&|GwGC3!8Tgb+~~agBjP8S;W$Z8*vkvO{~1t#0cCyiTEU2Pl=%?YI@UVLP6O=aV*KCvMVBcKj#t<$o_?{F|X*q`){3V2Zo#?JZ`T8@4Zl;ox67 zyBja$eY=~?>&1)6{J-<v@Ky@@KUkAJNZNU(>8k{a_AK}YxTI=Y__lH`@_A^aFh-GTSwhw(oA2;Pq$ zB^+5nR+3fZa&pBEd;lNBkHeos_;IqDTuH8iKUc$l;P}I3ghmSsb%Yu9At4{83ojo}7VFz;F!1XDT|g`m~p^spR=fg`XSibXHt zuwMKUSwkitg*g8zehnX)3i}b4+X+5M*22KC*~V8-W&EzkwQSkMGE-?;oyA;cswJ02!%pMB;_!vIn*_#UAg_(H+hutfQ#&6=c@JakOeh0sc-^1_Y z5AcWhBYX;fj6cDj;?MBs_zV0c{tADMzro+))A&2Gj$A|5lWWNaaviyzY$P|38_6be z6WL5|CR@lY~X+vQiji*cY!O&7o20lI@NE2>K>8%oP8 zg4)cM^17NTOL0R*Wj#=PpHiK&qzB zGC&@tz%zLi;`=A!i8gBsB;(7LmDJQu9pqitP;F_bt|%`pEBCgi`SyyxXg|=_QeJ7A zFvvl~_lU)n_RjfWAH?-0KTal*IJwBTU$MiE2_(DYAY+u z{NT&VE2a#H=Is!~cSsrDp|-A~(NsT7eKnQ5_3>us?G(ayN*vy)3iMi8R%NOME<$%+ zVczyqzJ2oW_O%Vgl@%p}YAU~&N4OxEuP2x)n@m&9UQcK+56CsBsVKfv(gp5QUT3N* zYpSW6P1O^4@2zRFRM%8nJl1I%a$R5oQNe2!g6$64P&Uu!uV>(5K4sOWV$hsG#!^~V z+%RFnFu8MidisAuZXbGsV(ED@lP@9z+sZDdquJ(idAyys4wy}db0uYFGej#0JQdXy z^%XVMW>7`F1$52p*lRh1T#tv`Ll%kVpON#< zmZQt<%4i!tNtb#kJ^WuEy$_R>9wv|c4`$72UF55QD?KD1wMfeTJq>v5)!y0M4kZ%7 zfI%m|Dp}_tec&HU>z%7Icbm=G$=8&?XuG<+?t3kD103d18>s83>#2?8aqmVrE zW=^!X*dRnzxLnPHm&kQNIGI-^j=06Cm~J|6c`vt32|_ z9$^SMYF@!vIohmYqo74};7AIlgXmGzO>_wPoO}VJ_;SGLzF7Zlj6hAT)$!D{y5ZAB zhtp$5q&Ak00cvsNYw`_H`&OWK?!cxer2@6AERSsZ+~FonE9kV5CW{_NkM~U0cjWtF zlV!heLZpY9IyY-@mS{DtLDF72oBY^I=a8SElmrKGe7Qi_1z%jT81Qb|K$jrtopc_Z zPZ!XIbP;W&O>{B&nVcoRkaOf$a-RG~e!r70MKT!L1bQM}L0^Jo{q z<2?9KAX0Aau($VEB;mse@Fj+J{xJO_jwO!HW+$KxrgvDI9j?V$s*J2G*uk|dbhmh9 zg0t~vYrC=;KndLtQ4OB2Z4Q^aX|XQXlB;Q}omFLRE_OKPLxChqou1`Y-gJ5v)NSb* z=xq)&MB7JO=-C_=aZvY%lYqe!dfJl^ahUxtWJI3h1-gx%4<$X?PS4}8ABX+>=ytk; z!vP!?ld6VA_7-;=llE5K=s1h-NCPYf~A^mtvogctRw28E(665;q=&-TD{%fE)=`zbvSH0eGR>yzLwrV zU&rBa4##j<#$g4AQwNK%^bPc8Ui2I3P4rD1j^J=4hok!Go9Qj|EgX*K@E8t`TtM{X zi{$W;6joZOe!0OK$Nzo9VyH@(ZIB~c0a#;^r2TzsfrqCMCpY>FQ`n4TNfeS@;LLD9 z<+aD{G%VE@kLfOY7e5`b9FFr$hukR8Lz86ju&!?DVkwL zdHMegYPs9bKSVNSY>Xmle3nK#0N@G`2L_D_2GGiYY6V0K-~&uiIFHB1#fxPLiE?<( zL!W@<-12rfZ-noBNR}Iug%OV)CE=l4V9yzzt*5yMkWd{B6+E$GM|;cBD z4Es{Y4PkK7mEw#{6~J@qCKSVnsFbS!%eooysEnlv5%>_D0wn7nfLslR z6VW)FfX4wwRf|gjnOX%0aP@cwpi)}^kLm_A>NR)+-U0RYNAVMao+&JR0K)*@91$Fxa5F-dUm6F4m zP`Y2uM~cM1cj@|`E?ArXMI%7lK%^%_i{MHQ%|Qqr9T71;%WEMpYlhVl6psrwMS-k%hU#qMpj!Tndd2|(_cXi zA7G9&U+e}@Bz+o(-36GAQu+t_NBSrF4E-~G79eaUz<59u&E{|phqWBmb2yK~1psOb z<>TO{&;sq;f4r;nZkdM)92Zs&7=M8#AXNV2qREB(T4t0$6M!fG zG0h7LF^p88ng3s^J}{92y~6)i9>a`b5&`zYjAde&SSF5%XJiblGDZ%YI9$x(5)PMg zxQxT)cQA5B!6czzW-OnGa(DuV-{kOHgofsxR22NL5WHp(Wm|8Z19_j@2?yo?lgKVB z)nsQC7b~^!snnF0sQ~Gx&QfY~)mb`~syxS3UObEM?m?J(P^*BWfCn{BIM=YXj7%1? zl=R^|h2BGK8#?U^x@|+S3plTb=AO*OHZnyx(i@bb-r;DUV|7-z2Dbb{N+j@r(G?GS zHL!p)*-QaS-N|T}94431GCD@j7??aJpTiS5T*2W>I6R5Nl^m|(a5aZ(I9$7vDMT{- zIAdapnGz&p%9wHvPX?7<#o-${47t!tWE6*A=kOaOncr0i7y}cahap11cXOL#QMGlU zy;aC-A^?j3fFP?Eo$IQ!_Bgr$#jE58=EXq!%ua*b4zQRWp5!22MW8)MS77I(Y#$N; zLAJMcjzEEzPM{Abl>7`sw{lqC`NPHO!q-ac9Ge&4&D1e7cnzAFdZvMCWSW>M%v5F? zGo8bA95!>fp2H0sZsc$iho^9ODu<`-WM(q6cpZWk=P=Do3vZv$p`BMEug1k3UdQ2U zV84_+4R9Htje4gIVmA+x6tv0jT`Yj{=xnh%TX-e&Vta8bVU0XU+R-U|H+RqJfY#H7 zb(Dlcj{(?qsclYotDr5}z@s6IH2|vN5E9aB0V~I2lKAGWfRpnAlR)o0Z|`%S(s5=1 z<78YYka44GW+Af(k^p{j7bcb;O0{R#71?U*w094ns(2@WNGiOE>JrLZg3QBSakvdY ztat{8=fBSMFiU{PQf3*m9Qe2yg6?KGw0jDipSHI+ZJmvfJA>@gn|acmZeclcPWTeMdQ+KbsyHG0&@w!?0h_!%d)8Ox8UPkB>p46dkOj1|KGL=z3fln=NOOGLN4Yu=5_?(#Kz&d1pQyZK!g$X zGuuYSR`oI4`GNc;o|w6Vxf5WG7tX|xVtmc0kJ-tS`^W8l%$eB*22CKTtwy^!Z0F4o z&NGC$-NVoALhu2SB#h`m2Fm+-w0zyjcIVxxir`0~LAsKj6^E?B}Wf zlcwGk=rQIX9DFg59(VLIk8`+_PmGfU#~)Y;{wf}MNj$|o&67CHVMi|mTg5JtTwew5 z;eG!C^9qvoGcPhPF)wp?0f(I&cJ(u_f=3+Tu$y;)h5V(PG#{=W1f3bysm@l>?pD~|vxQD|_IJ}g@%eFCJGGE~X%r_if z&SS=4*8vEjDV4Ul9w;dY2~#;3zy}wAX@a`>rDbXzUkc(;qFx>T#GK=~ond}v&N9Dn z_)-pE#$m!?ZX0zItYnQ);(Hoaui3DM!32(Nv^wp4Y=vCJwuoOKTy@q(p6UeTKx2I0 z4k*vu44@^8MCS9-(;cqOz)>!g{|KKZ9_oB>ACQ%WjX&4}%W`;SFYCwQRlG!h zfu>~x0ddC$v7%HGR1IoUZd_~hY!JPi$FQ+J zo#NPd4zJM`fZRCa37_88Z0*pLOy=+=uaNb;kPR&4N00;E zJS5~)cE)gaIF+46Ap6`*s^rFNrufjF!`d!r+R8WG!Z+>Q>eF;S>wppy+s<~dogBWE z!?$tx_I|dDUBE(2*vjGk93bw%T4aOEE`QZ)FssZMTxY?cyk}&CZ@rja?+vlR7a77a zn|B5mvzI~XfbC(IuuIux>~a>Ish7ij9Pa1vHV$v+@QxiUVL5gMbrZXa&kpb4@ckTq zfIQ9NeSBId+z>4DTm%}x_VRfZpRW!i|8U_Aa%g^HymAUTB)>-yF2i}V55dGB%$0TW z9t(H+__TRYcpoOkwz+VEKiESc$*=w9k}5t*cDn}O4N&tA`Wp6HIB;MgDY>(k1#8>s zwHqNQm|Q$9Z{r)-O}x3>$l<$sSs4B=_{Z}OUJw1{8Tf!Sp-Nf{aJ=C>VRz>4$u6~c5dJ=m0ns@H zO8qU6gF$#2u@f|bz&jMu)j4ngmz9;HAB^bi1MEXXD%#882T7H8gpaU~4k_d@4nH(_ zbAWxEJ;c8P1KQKeKFQ&|L$97@;jFWlg(dOfUKUJ!H$Teg;X{IJgZ7^kFaU*ESLk!l;9Zr(k65rB*!;} zXZ(I#aIg!dfo;%m_7j|r?k?zXu~B5JmM{0D4D4C<7l=yFdeSiVSN1&AUcKm5o4X&L z{DzvKgbVN>q5U7;_E2RLVH~z~pyDQChQII=z6?x|NG#&-p0F&xUW!I>_~n7%ERx`` ze$i-=R20hLS2zsG((%CvEs7BNTsRSp5sl?ASj%g?WApp`!3e_d3FXEvZl zwV1zf1~9XEuq|4;RGF>iJzbTnUk;g^TCMVAaygoTDHid!Sr{0Bk|ezz2D4i zfvfko!{z&aW;?T&*~jc>AmfJ1_lKEhnHL}F4&_>9^N!pWlAJ$Nawc`@p#iA!N1Ml?SH91@n7M;(*JV*)&3j(@ATjA|Cs+l|0n#P_dnu) z-2Zj|_x-=||H=P+023ey2oFdI7#C0ya7jROKu^GmfVBbZ18xeqC*YxgCj(v$I2v#~ z;EjN{0^SbzIN-B@F9N<2BQYgr#H`p)93YMmr-{dlmEufszPLzi5|@h0#S_IX;tp|_ z*eQ04*NCqYuM=M*zE*sl_*wCB@$2GK;!nk&i@y?oBR(zuMSNcTyZFz*u)v7GsKDsJ zv4OFH;{wwIGXk}NhQR#5iooi?+Q7QNrogFz(*tJ)&I@c0>RfPWuq-$sI5AieoE5AI&JETF=LHu8PY#|IYzejoHwW8-oxzKOdxDn+li(G>tAeix z-WYsG@QcC6gWnDQDEM^nPr*M2{}TLr@Sh<#gbrasMukL#B!#4hm_n*UYC>v5>O!W6 z%nF$uGAG0pvOMIn5H4h8$mJo|glq}f8qycCEo5iNu8`d!_l7(iaxmm*$k!ofB;k@6 zNxq~`0{0*#b0uw(4v9muK;n{ICwWkEKypy>gygW~h~yo~dy)?%A4xuzd@A`~@}uO8 zdcl4)HBpoG{NTt$nX{0n-s+8tR^P~mRBB@DQEj3FUq)pNp z(pl2k(mB#D=}PGx(mm1x(kG>drO!xTl)fx|ReD5vRQk5`Y$yt)L)lQj(5TQcp)sLx zp|a2`LpOxp7P>w3j?kT6ny|@Xv%+SF%?WD>n;X^^HZQC_Y(v=Yu;XFBhRec@;T7SP;nm@_;Zwt# z!)@Vf!>(v2zf+OL`sAzLLE^V(GbxTaaqKb5o;q}j(9!d&B#%a5s^`m1(D^E z6C)jwizAmr-W=H>IsK6*yls+miswJu;$`Q3WsxN9=)Jst(qTY!5 zEt-w?i%yQtjLwRl9^Dc>H+om}gVB4Vzl%N>eSXZiG1+5s#&nOlbPO5u?wC)Xg? z#cYn*5_4fN z5vz(_5PNAXiCq!9D)w;fk=SFgCt}}-ON+~m)5RI$^5YiAT^_eOZcW@(aZkp*8h0e_ zSlo&Dlz2^iZoDqu5WggTb^Mz6tK!$ipNRh`{^R&h<3E?B%5r3dGNY_mRw^r()yO8x z%(4bqlWeNYE!!g7DLW!NDf?LViR`rOw*)r9FCicyFkw_eL_$=;n1q;wxCB{3T0%}j zQ9@-xLqb!+)P(5?GZW?}v?a_-Xiw-&=t}5GSedXc;pT+?gzX7;BB9p;}uFprXov`t;koDD{2)p6>}ABig}85MWW$jY*h3r zwkdWfb}Du$b}JrLysS8>_)77O;#gB?JinEGyit|Z9Nx?~yBxzDuQe@JYq}ZhR zq=cmLNx4ZiNpq8yCS99!XVRghmy>=-`Zei%vN$<1IVL$iIUzYYIW0LoIU_kQxgfbH zxj1=c^0mn~B;S<0C3$OdfAWsxJCpB8ekl21^0Udulix~yC;9#4kCQ)3{xbRNDN!l$DTygbDXA%$De9D*6kUoTr6c9al-`uPQXWd#m-1-J!IVQOhf|(OIhJxV z<=vDIQck6Onet7_cPT%noJoyKtxR2<%B5bJdUNU>srRJbm-=Ap!>I>T52YSXeKz&^ z)T61#Q%|OTmile#_o+Xno=yED4W}__erW+|(zNijlr&9RURq(ADXlbZQd)J|NH|IW;`%>-?xo5Sp+HqQ?R;A6>=4y4?+1d_mm)50SsO`}%)e`MG z?MCe;?akU-wcE6JXm@Jw*50E%sr^AG)`jXKbkVx8x>Q}7Zk#S%m!s3^@^l5dMqRV6 zUFXm_b=|tfI!?Drw_3MGceU;s-6q|=y8XJtx+A)ix_5OS=uYWA)t%OTulrGVMt4?s zP9Le)=$rIi`sI3}U#Y)BzeazR{&xMH`rZ0H`Umt6>7Ud;tAAeqqW(4gG5zcMH}xOt zzto@A|EB-LfDEj`-w+6wWG~U)Wi=pwL~osIaH-io!L8R~N1?ysmI#;hw?+ zg-;YdRrpNd^Mx-KzFGKI;mN{x3jZt$DvB>kEJ`X$EgD~xQIu7rDbf}himHlgit36Q zil!7zE1Fp}yJ$|4t*EtVMbU<$?M06iJy-NW(N9K+G09k9EH_RtUSc#GXB%6M9ma*m zMaCt@mBv-ZD~#)n*BY-k-eSDfxYfAZxX1W_aj)?a^i_8(%k`GJbCS z()hLUd*e^Wv&M6#AXB(0(Uf9JGmST?OxdPflg?Cbsxi$lSxwC*n`xe@!_;MRnl3ke mQjCjb#c9Rq#hJxf#U;fPi>p05H$+jwr>H>q^!{61`~Lv{JX03{ literal 0 HcmV?d00001 diff --git a/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_OSX.xcscheme b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_OSX.xcscheme new file mode 100644 index 0000000..61000be --- /dev/null +++ b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_OSX.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_OSX.xcscheme b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_OSX.xcscheme new file mode 100644 index 0000000..bf2e078 --- /dev/null +++ b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_OSX.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_iOS.xcscheme b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_iOS.xcscheme new file mode 100644 index 0000000..1d1724b --- /dev/null +++ b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_iOS.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_iOS.xcscheme b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_iOS.xcscheme similarity index 100% rename from integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_iOS.xcscheme rename to integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_iOS.xcscheme diff --git a/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..a0d143b --- /dev/null +++ b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,52 @@ + + + + + SchemeUserState + + ZeroTierSDK_OSX.xcscheme + + orderHint + 1 + + ZeroTierSDK_Unity3D_OSX.xcscheme + + orderHint + 3 + + ZeroTierSDK_Unity3D_iOS.xcscheme + + orderHint + 2 + + ZeroTierSDK_iOS.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 7C0FEDD71D120376007A4E66 + + primary + + + 7C0FEDE31D12039C007A4E66 + + primary + + + 7C0FEDED1D1203AF007A4E66 + + primary + + + 7C936A331D11EBEA00470058 + + primary + + + + + diff --git a/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_OSX/Info.plist b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_OSX/Info.plist new file mode 100644 index 0000000..44f4d61 --- /dev/null +++ b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_OSX/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSHumanReadableCopyright + Copyright © 2016 ZeroTier Inc. All rights reserved. + NSPrincipalClass + + + diff --git a/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h new file mode 100644 index 0000000..8325739 --- /dev/null +++ b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h @@ -0,0 +1,19 @@ +// +// ZeroTierSDK_OSX.h +// ZeroTierSDK_OSX +// +// Created by Joseph Henry on 6/15/16. +// Copyright © 2016 ZeroTier Inc. All rights reserved. +// + +#import + +//! Project version number for ZeroTierSDK_OSX. +FOUNDATION_EXPORT double ZeroTierSDK_OSXVersionNumber; + +//! Project version string for ZeroTierSDK_OSX. +FOUNDATION_EXPORT const unsigned char ZeroTierSDK_OSXVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_OSX/Info.plist b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_OSX/Info.plist new file mode 100644 index 0000000..a3ef5c8 --- /dev/null +++ b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_OSX/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSHumanReadableCopyright + Copyright © 2016 ZeroTier Inc. All rights reserved. + NSPrincipalClass + + + diff --git a/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_iOS/Info.plist b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_iOS/Info.plist new file mode 100644 index 0000000..a3ef5c8 --- /dev/null +++ b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_iOS/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSHumanReadableCopyright + Copyright © 2016 ZeroTier Inc. All rights reserved. + NSPrincipalClass + + + diff --git a/integrations/iOS/ZeroTierNetcon/Info.plist b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_iOS/Info.plist similarity index 100% rename from integrations/iOS/ZeroTierNetcon/Info.plist rename to integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_iOS/Info.plist diff --git a/integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS/ZeroTierSDK_iOS.h b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_iOS/ZeroTierSDK_iOS.h similarity index 100% rename from integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS/ZeroTierSDK_iOS.h rename to integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_iOS/ZeroTierSDK_iOS.h diff --git a/integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index bb8a4657a96e13134308fd0a8b6d095a319499ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45747 zcmdSC2VfJ&6E}Lhr#tEHY;4>M?s5TJ?o~iQmSqsQVaWzlB8)A-U~I>QPI8-GAiY;G z5CViWQb;GgH%fXZmGmA`-|U@EmRtxV|L=S6g~CjhXJ=+-_jVU_wYT;3=H?z? z5Q7<((J>su2aE}bn`KGZ+y-AejlG>+Aq+ZmW-_ywCT2D>hndUF zV|tigrjJ?9tYB6$tC-cy8fGnXDsvih4s$MZDRUWfIdcVb4YP~6g}Ifvjk%q|Kr{-4 zpiq>65>XOLMky!<<)S>4&pd?+Q3;yJyogRf708CBp?c&%PSk)J(TT`~7NCWw9W6uM zXf;}c)}qtV8R$%OKDrWJkNVM#XdAi--HdjjJJ8+eKJ*ZJ96f_xLHp2t^cH#>9Y$ZE zFVR=%YxE8J8#5STj9IM19F}kZ4#A-~0Vm=loQzYj31{ORT!hQ88BfNQxC*yoH(rPr z;l;QOFTqQ3J6?u6@JV<%UW;XXIzAVlhcCgG;w$jAcoW`=Z^AqA?f4FSH+~X7g`dXH z;Aio3_<8&Seht5l-@tF;ckz4p5dH{%j6cDD;6L$S_-~eB5sO)t)v+AQvjQ8y2D9O8 z92?Iju!(FEJC-eA3)v#Jm@Q#T+41ZIb`o38PGxJ@Ms_AUi=EFlvkTZI>{7O!?PdGe z{^3VIO6mWS?T6W1nYVW?x|s zvahmlvTw2PvG21Vu^+Rav){1avOluFv482Xj@Jd~f^`wPNL`FBQD@YR)8*<4b!Oc} zomDqQSFLmCX6okYT6Bwa%XA&OlXShh)w+{)r|ZtrZO~n$yFz!R?t0x#x|?;obhqp7 z(A}-ONB4y8N!?Srr*+Thp4C04dquZT_nPiK-TS%^bRX&t>Aui?sryRzweEY}ueu|; z-#E;%oQ~r-o|CvBE{==m61Y@u9GB0Tx$)d2u7b01m0TS+gRAEp+)Qo}x0q|=mT*hC zc5WGW64%QU{&fB<{#r~@e=UCl-_LL5Z{m0IxA3>~ck=h}_wf(%d-=!s zC;4ai=lPfTef&ZGb^a~>UH$|9BmPtVF#i?*E&l`mGk=8tga2EP^_ zNPUbxPM@ex(WmLh>a+AY`h0znzEnS6e}dkkuh37?Pt#ZH>+}wNqrOQ$SMSm<(7W}E z^-J{~`jhm%`W5=s`gM9)f13VG{W<#e`U~_I>o3z^slP^ly?&E^i+-Dahklp-HvMk> z-THg=59lA(KdOI1|Fr%&{fqin^au2>>EG19qkmt2NdJlcbN!e4Z}i{mf71V||6Tu= z0U2}#y+Jet8iEa>h6qEnVT>WckZedbWEe6H*@iqrp`pZJHcT{3Hdqan2D_okP;00+ zG#F+X<`_;iG#gqCiwsK)%M4wH9>a3OD#KdCDTY%GXBf^loM$-SaFO9s!xe_B4c8eq z8a5klG;BBAY`E2Mhv6>69>e{HhYXJx9ydH?c-HWO;bp^q!>fij3~w9WGkj?H*zlR* z3&Yoj?+ia0elh%J_)}m6R^SCe2oQpV5FuQM5@LmTAxSU_>B2a{B;*POLa|ULOb{js z<$_I^Doht@gc*WUm?_K_<_YtK7Ga^#CbSEkLbuQ-tQ6J=CksS4T{ufPSJ)t2C|n|3 zE?gyCE8HM#7H$=86K)so5Oxdq3J(cS3Qq}73(pA83j2ip!U5rR;T_>!;XUC~;WOcL z;VUsv94&^35n`kmD~=Hp#UwFROcTe6nPQHZD;A1HVwq?bPY@@GR;DXo%LOQ%a`NM}lCNf$_0NmonPNY_f&N!Lp^NZX|y(oX4S>2B#B zX^(WT^qBOx^n~=Z^t$wh^rrNd^tSZAbV&M0`dIp0`dRu-`d#`vfCwoF>R#0|8~*ipzD8q9dvi}uKNHA|lCjM8 zGr`PgSx1mTp6m)XmRDFS^K(n{OogRIW$>e<&{SGhl5eUg%q=M>ww4qWm6f=H!|WBd znVsEBd%Bui+!dWIeaqY(y;{u?OgxjejfrHUm}n-3iDkwxaWW_KvR*dGf-K6?HYR~d zWRie|XvWB-$^mkq90bhhI@(U^bK6^?nQaT(+}*C=1R%Gx^g;+RJWH(=d4`Zkxz-^4_N zxJK<`3Yj9Nm?@d9c54U7YnJ+}y9avT(%s#>svihSXVo}rmDoq?CNpDW(snT8nF-89 z<^*OEGnuh4<&2f7kb~vXa)=x%hsoh`gd8bH$?p#sRyu58ub8lz&Jov)a+6KQ_ zy4}sLU=tOFrcHib*U;P6-qyQ{k~tu_>uqdvuTTNKU@C-P=lMZYxO>_bb@(C7r7#ul z1$~Pa(Vo=!Q!8t8_fY)154tMwRwidU;-P_kCXktE*S0mmUF6JZzNJA`EsV5C7U)g7lJe| zma{>E_0+(P^{Wo#)a!PDUUn=}eywPO5#8C*+zndb3J&+Db+^OJ!QDFe`zh|uW$xbY zRqD{Zk`B$QP1a+nBA)jm$RY zCit_1*(sOErLsk?fIi`+ z_Fnh08pV!AYo>abXR+Ed+e+wPI$0X9c5}364fR#vBU(C_WjA+qwY#%hd$U1bvXxO# z)wzh;OHc{Qr`GzrnLSL%CgvWwY!h>@Y^Gfh?eIuaL#^s;QME`F;e%9!56R=@Q3t_~ zJ;FT7JjOiEJi$E4JjFcCJk!+Mw#?nr+q|p`MuK}~7ihY(ySbyMrMs=GcTTIv83CtF zV0+yw=?Io5$&5jsAWw7!=dU!aYyqV=wRbKu=j7yBEG5NdWu+#oEw8{-n3r2&D$mQe znexhP`K5WbvJy){*?#7E<^|y7Mfmd)6|BRq0av*@7EuEc?DJh?b9LBwfm>G~INO7=OHZ!j=uQR11K6eF&Rx~;Xmr`-xWZs%v`L(E6a$Iytu5GM|3fNBSUVi^p#fv>5Pqq3-7sFfXf zCQp^E@^raep5h8ln?+?#b;VEfvh6)ReQs!Sj|!~z|7W!SKbI@$5c(3>{0e&h8|GUY z%PeT_af9%(yWQ=eG0WXDBUj4cyZ=S6s`B}P`LUtK0m{FYM}J?;PkfMY}E*9eV*;3v_4%15hd-O+J7%OB%uHhPmQCxub0}m0X^P~ zB&x~5jG{6q2vi0I%MN)IjFL5Lam~+)IJ+j!4)z28@;Xyl_E2E zS5zi9Z-U?s0y(gDVAFd#+uh)UdfnZ$x33WR?YAuz> z-jAlBsq#X3sk}@Bn2u_gkbYE!s^vxU;(k<%>f|F0Y_&Gzdy*F&B-}QYJSkMVSNWEOa(H2WGJ6GEbuQXoD*_q`R}T zS5;mbj@3Xnx`HDYxjWkWdeoW~*S)e=eG=8x-L|Z`d)1IfGJzqzNfKL_}M$BWgsK~b#3){=aDSfoKA?mJTWEIMC8-t z)jr+|U4^cu-U?kOpCYeOoXg3ohTT97z(#qkpU*&B6$7;HUm2jmz5s1ke1ZJ0eSx3M z&@CXf%TXZw43tj=Hcyj1rffHD$$Aj7I=4gjpgmxHp|6LZA^CS|Kf0HCfMX?Bhr<2n z0atL!G1SnH9;E2ULaGg#htVTmBk`zwrd+3X*AsMrJc*u?&yvp_7$DE07yOj{Mf8$< zwtS8}xh`e$`TpbL0D5f@=^H?Lo;*2aa>qu$5%dl^#H4LS@1pn6`{)Dop}avpU%o)T zP`+p@`UriDK0%+N&*Y2co$}N28}gfUSSR}VI`2#~+tJ(I*V5b9O%3k|B<0P$EsHB5 z@N@-_8G%F@vtU@YDAe?jOJ}@O33VPRqQjh25RcV%ZA_ca`(c{ zZjbSYNs>xV(=qk#78s~n1fY5cAh2~%M@Cx@G!APuou~Bm41P=}*q&4f;J`eZ+A>WZ zKJ!J)V*|_{uwK4;6BguaG_$ArMoW(`X&?>)O~a$)Yd7Iw`8wL#kl9X`rOxiEbzt_ukRA@EsUNB>(wpvH_ zN*c#@b$2eARoC6w3fcf3_9)dDaR!sN8K(kfy1W_iwrr;GN(Bo1>;Y_$!oUY7%y6_0 z$GJG)D}@62MtQQxZEv~~ea6NWlCvL!vc&2=_yi2}CzE!?WzFodU z-YwrL-?albF|~LO{GEqSgqe6PW5f&OyCJsN1AiZpAA_GWAPjnf_LmW~z&n7v`e=m= zUvpQFyLC!;XI~e{o7$hDWR4b^3asnwX`?fEnCK5nMTe%Px3{}(K_5)zVL*e_kouqO;hVTS17X|nk%3QsG*cFDQ|}i>ChVKK=hJRrf5tC2Eg}g zZ+-N+8gtSaqPLiRQ3s4oD@=)8!E|cnec&yqG3uRQD`|u2?p6D6CwT8b+y#@v`sR*B zZfj>>N3VR3;t+5*h6cej*AsOsZG@!OX55SWr~?@K2=dDs)qcE!k?=~q3a`d%AnB;e z80zr~p+~+~-Yeg~56ITxlkq7{Frn*FdP2U>38|Del?#GTr9(pFLdDsP2|i6pW~!gH zk#Gh+iz@h;@&lXj+46((>)X}W%ZhWU-bd2x8 z4}nv{d+@#ZK72oZ06!={BR?xYCqFO0AisDcei-kC!JmpBgLMB(^2;#jPn2JWzcB1+ zE*uoIWvR7u8BHqE+>>JAAw-2oioaAcJTx>^G#Jz~vZ8#7SI?E;wWC)ZBMKZ$qG~(Z zSJn4*bifENZ|`hbs-$)Oybc|0bV5Wa?U1>Gx_g1zgBFZ6<$4kCqgMPS{4#z;ens9V z@81m1jQF5@08H0wv<-AJs4(j1Jzc?h@cq>02B$xhRoKnysf*lgRZYwS|PCR=}{G*4r00%fZxLJY{GBL2W3bg4daPa#dsfo z03*;do|U2eKK_s?h13UpI5Br+$wGHa>w@Nj=CYRDVSGt$S>8H`qDKmPfFm_7(ggM? z{tj~9_%r-DK8(M>U*fOu*Z3R!t^Ah!w)~F#uKb?-zWjmwp?qjNsKgKWNBk4~`wRXR ze*OkZ@sa$o{0aQ~sr(E4{8dvDTX%P7_dmuGqe0|ep8?d=I@9ko$*aK>4MCL2aQQ0L z^eWSN&+J-NEIK1si+bTGDSSs)cGLi9FgMT#zSV0kYp8cFDE2JouzLK?M)_5xGg;B+ z_dsOd#Ez0blb5N_MnlZZhOnXX=knLyn3;`WqahGxBiShVu>3_o8^gxRU&>#}lk3}B z>w8zt^<9&gvB=XwY%-hbS1OH7m%ovJ_QnP5I5rzpp3P*lSd;v%{GI&$W;Tb-W%J}8 zR@1~eYMkWTwCt9yu5?vSWyro!UN!@~2n-K)qK`x;E5B z)P%Jo`(}0;JDshPf0zFv2o1=(maX@lbg&NADgPn=N$n(EL-Lva7(fpiCyRcG32!7G3CE7-y=^eecCT}%)rh}G)#u3M?ayC(Y;U&eMZY5i;m z+er{d5Z@0gOhzzUYU)WD0@VI_3?ogmsLO=VjS1eTKGxBXqUv~h4dQ1{&(ToY^XtrR zSV?eq)Be*sW+h9Qw42yf>}qxmyOv$Yp3I)Y$^;1ni3CXm1rQWS&?tg}2nxQ5F|wzz zr?Y3UXR>FpXS3(fRmjnVh5y3{n@m^}VQUCmON~faIpj%}c6EX>^(bq%u=)dYl^D@F=l=7&_?NatiI%Y3p zFK4eHD1@L;g2FblSFu;K*ANs=&`sCr2#O*ohM+M7 z#S@fBP%=SAg3<`e*um~%Z((m`Z)0y~?_hVccd~b}cM~+0pj?8A2r4CL0zs1qDko?v zK~)6ufe`O_mlfFiX^M!T$RRl*Ye}xHFt?!6R8d@3X)3gpm76SO6?vx8!peM$%>uh5 z$}4<<_NqY9Lx9RFt+_>(;&M}7NqLc}u%yyzvgBEcO+^Kk+}!fYisFjgN?)KSRG`=) zK-PRqMSgC6nJK@lsKQiOP*QFxD=UBntNhBMyrPOSYeBx%7wB0PC~gQ)MX{|Mu!>EU zMMV}^^eP69ii(O%#d*cHyb{>tQCS9Q&;c2}qyi-j0kY*5=i3VM3Qe|(LfBYQR9S8+ zEiNxH6*kXYh_W;lV6)0&4P?@!&w78_Qz?2W%fUxuPO{JBv|D>$6yr`(S zzyeEg#lApqs6Z)0fGWyMtmUwO#Z*#QS_n-msWg?@a;*TFS7I%zwB{9A^L>HdRe@56 z0F~z#Rg~o0@=ewvtHKe;*;Z6+vVd#~i%X#gbN#yikP4JO1gNOIIIqH5R%Wv1gLn$_ zY*tgLwX(!iSy^tgRF>ye78dw_%bU8tGp(QP{8NT9}QkWyrPo8$@^g6-Y4jq{BJdeNC1p==+ zu;ux~@Tv>bg?o4{AgFMNY>#bdc~)w{Qmk>5L^%QzQ!)%k z>=Ry&z|9nDSeZK009H1E6%;kmsmr5S`2?AV!+KU%=4o9VLF2v4%)0Tw===djPtZ*s z0Jjh{Q3J1_;5LFz7!Ld;FQW-QjMnJt2C!xjSiSKu>ZDi=1X+f|I^e}h^1(V$H-7*N zG{vf6wNflML9l{5WCdThRM+llG;m%yq)U%&0DE*+*U7v@&=gHWyLG61J_60ux}{II zVt~Vy1lctX*H8}E5;ScX4%v5gr+GL`C20CUx10gp!Vh%I*}8KFz|SMFiscdI`4s#D zf@+2V*IniXuLbZS%|AA4q3rO}U8TDQ7#P@Eq0QrUH|RD)AfVf*+obC!sGcAvL5-Vr zTXb7>Hxe|9pydQ#>*oe_J5}@La0Sn&!8z=V7%sBw^@ik~9qybCB`ul*+0~rYy{_i2 zHkW%P?8<0&=M2re4kS*YbG!~gcbi&mgDcp6ywwhbkp78TKm5B?{Fz6^AIj}f8=xuI z9vx&nw(9QH-KV=>_kiv}f|>}LP0$>I<`Oh-tL|alUfmU9?TFMC+QFn4^v7n0NQfu@DhXjou8}^Qcohq>=zUOr>g7)fOAZY$3 z9gN~;Dwfg1FCgpo!`xSQKzER!1q3bf&d7AH>)wL7k?sxMn*_BG)Y`9mTlWq@V0#uG z!!j~#EFBP`-@5g{>T}9ux8Hn9_mS??K~;XH`_csS#znh>Qxvo*|%SN@!hi&V~*(grW8ML)7O_2s` z+GbARM4B*Fm&8UQ8-DMMrwLpD7wDIy&a#36~7sG*X2Y0cG zpmhYDOz<@$4Ox%oE4yeQlSZ?Lp7nGH($xMR=9$J{BA4tP0$d6~t34isO9OT1(zy(R z))2JTtL|JTmpw@LeAHb-E#Qg=5&0rxHX6 zg2_1OFLoO{X3Vl#iRHsvkk8ZRV=DYOaQ$(+N6*AXrRx1t*Uv zWFMO~a!>fB$JF-IK!}4t=q&HH7;YBlg4{OO#LedBaC5nN9GLU72|9W(b%0gx4eg@gegRU!|nc{i(dUO#hlzC0ZdFvWV`#fGT~(s$tP(5+5j4TCme)69mg+SoyDEaox`2WoyV=`HgM;27jPGH7jYMJmvEPImvNVK zS8!KyS8-Q!*KpTz*KyZ#H*g!dOncKo`xgFe2?q+TmcMEqbcN=#* zcL%qdyOX<%yPLa*+r!<<-N)U}J-|K4J;XiC?d2Zf9_1e69_OCmp5&h5p5~t6p5>n7 zp66cRUgTclUglom_Hp~U1KdIGRqi$Jb?y!BP3|r3ZSEcJUG6>ZeeMJ9L+%jw5%)3o z3HK@Y8TUDNnEQhJlKYDLn)`=y#{JIy!Trho#r@4Q zJmN9W@;aX5d0x*Oc!3vri4Wid`B8ijAIy*DL-=f=il2)c-%iwU}fpi2q5jG)U2f^6261YJeY)dXEb(6t0zN6_^I z-9XSrf;JHZQSN4fwh*+HAc%0c5p)wl+X>o1&`yGGCTJHyw-9tILAMcfJ3)64w40zi z3A&3Q$QIp0&>n*BCFnka?kDI0f*vI3A%Y$zXfHvJ5cDWP5X3!B&=UkbNzhXSJx$Ov z1U*a8a|At45JWLA5(H7q%LKhb&_06p6Lf%}g9N=w&}#&}PS6_!L6q_qL2ncE4ngk{ z^d3R)6Z8Q=9};wkppOXpn4nJx`jnv02!f#EFhO4s^d&)G5%e`d-w*_0!*>LIPtXqp z{YcPH1pQ19*yUddIzrHI1pQ9X9|ZkL&|d`oO)x_+A{Z7;S%P&0a|H7Q>j^dxED$Ub zED;<)a3H~>2o54RnBdU_hY%b}a2Ubi1V<1YNpKXw(FDg3982&Rg5wB|CpdxNM1qqD zP9`{oU?ah)1g8<4PH+anV+kHda3;Z71e*xXCOC)ST!Qlm&L_Bl;6j3n2reeLgy2$w z%Lq0TJf7eQ1WzRR1cE0KJegn%!Q}*739ca6MsOv;QwW|)u$|y(1WzZpir{L3YY46- zxQ<}Ra@G^p znBYqYzLen02)>-)D+s=l;HwC}+G}O`)2NkA7;I%N6%}@;y|%_u1)k|{D(XF;(+WGaAC}l8?qoJ;@w%%#0aMe{=oRzip)n3#KXo1+l1sW|?_6nE9 zxB81IVLF2MY}~!zEi4X)&FQMMSf{(HEj9K^o5SgXRJW_H-d1U!r8Vm^S}4m~$W~nr zJPZ_dxa>7hqPC*J>U5Pi)Kpa2w31hP8se$WR%0ozvbkz&TopE`ufkPtbJRA}TW#Kk zTtf@wd8-m2vTMvti8l#(N!Dyrg z1>TSb+-Xy_>Q2>;*)jrIZTU1`vTc+sbr`g%mU`NK^)_p5b)CaiVfQis`vY9T@tz{J zUCPToYuA=H*sCgBjh1@5rN-%P+7SJZE z8_;U1nl$zwpk?z1mvvYzKnhx;>YWRkU;{R4>p`6q*1SS~n3hjPbnzt70dKa!lw<8$ z+EkarJ_RbSaoU|#wrcp-TjWt%Bx}SXnzFm<8)&6<7Uxur*(Yd8@7 zPFsBq?eQt~wGEJZQ?=ujqfyq*1SQcZ4^Yb35iqNLbmuinm@xujovpsw?x1ah?xLNh z!M{mMCHa+t!BuXr0WGsvz^+7lwPnfx`8$+6(T}{sR##QqM0?UzRjcZi2L3*!P8*53 zuGZlMDTDcPfWWmfhiI7?zcQMs@{`~vBh&fG?{i8QKP(=Vo{M&%R`-{bHq4K<0(x1Q z5UBn34W)?oqtLkXRmkrtS*jmdwZ%#|c=|}oX{n!L^V*A_h8FRRX(&^vSZx@lFmxT> zBEQliCcj#=LE-?rPSL?k!5&t-720X3whs*N--outG2LFLc?C@%e^IhHzZ$Hybxp3i zsTK!}WI6ymqMV*8^QL^ze>-vfImE1nNV6L8BKLJ!@J=S zHYg(0Y<0B`TJtj~QR)CuMN^f%91M9ij4*pSI8A5MAWyB&q(u^j6ltihr)Fso6WNqF&W9Mh zsmD)Hg{~VgM*2KTnm#}Z4tqK{l?uB9V#p>3jryikfo4+?dpo0$7RnkZ1n%2mt8cV{ z7HSpI;p}kH5DvV9HxAX83~B}hFKXj88{^xRW=fniP|Z+ES2>JQO{x9 z%4@4sx1bSEro^EG*uY3lt*g%NMYB?ZhyeoHAQw0|CpZobq>|F44bV{Gxn|m(Q^9aR z(=GKCF6h{Lh|UINXQySt2g-oegizDvY^w9ZR#B3$0TLw;Rh*huaV@17<3piD0#KK; zwzkUGVe9KDrH?+UF+){_A5jA(iWv;&q+9m==w?wmAHDU)des&Obh8VhTpNV=)ctCl z&Y?wo#0aXQNC|lLs?&*-CVrs$={8#(L?`w}8dT5#uD-@g+e~Ro256z*W;E0SokwxO zCp0KAmlCtlAqC8UJ_Fjo_-myg#sQFen^#vV>p{_H*49t=*Z4)WMDnmD)E;i~r(g2V z^wgVro3)J6`=~lJ3(O`ZaXD;sf~G`+Uh*zV?jx}Qf1#+l%LcPgtp_}5K(9s8dcdz| zmk+AnGnE7<3-VV+8BFNv>>B1ON*+BR4hM9*M@xNTQ2km;=3|Ha!Tj{(6iVu&f{OA% zm)R?uTs|?N{?tK?Hq>~#Zn$B7#vn##TI!Y9chCSho09p+6U6VM+jV}No=0g@Q621) zZeFC=csk!`@&xTL(^Z_GZwRVCpBBmXEn=;=QRTMRRMsj15A?ECnXf>32u&^Z+B8Lf z5iJ|zTUH5{V1A%FKdnnHrF4nDbhcSGYlBmnPs^%2Pb&smF~F3Dx`$Gy`L>zrvN~5(J-ov;wGx6& zi_@Z&xu2Fv_bsDYZY}<+tgV9B$9Fobe~1=J_ANBPzE<3~BOjskeq&CXIe6kLy6e|z zue1-?_{V9H1m7yOB5GBBLE}@DIBGaz-+1I%N@et;qLURxi(L>I4AqGjXbC@o)-{wv zZek$6F;q4$(=r*pwa`fbj4Qu-Y&DQ-@QLI0(^7r|dS*S?C6N1&vHvP1O-BxQGn`qH zNH>_#L|@fR8t!?VO#_5;{vPKIS}1i;p@9K9oRfN+7D*mdL{$o{9zP%W9;HtiM6Y?* z;VSr$7DyOWpx!onSoDu6@q|IdwpmI}hvpfr4Uidw5Z0$6m!qK^GH{A-^NHX-8xF~n z9XdXwFDTNOK|F!%J?a62SsP_vQ_8`8ru5QL1o|B<6pH98jEbLf((EnF#hyb*cMGEx&@o*4-YHYFAuWVwH% zCF1=`cqkNK=;sjrq_n9c)2fai<{Z{44?_lq7D*hrh-ynUYW5$f9SxNOe$c>=$T~HU zjwXnJt2JbS(k6|}hvG23w#pDd$!i9^t6@s?yl0f?Xr?bM!Alr0v95yomR%n>8w@b$aoy>v)6creLcAD!9PD|0fMah?M6D+sh| zXVPUSZ~Mkkykk&O+JPQLfGkCgt%~OUY*n>&bjqhOXQE)^{#jV`tteNOvsNpYOUo7f zb2-XHy^We_k7L#V3MfGFu>nBuz~rPQ9Y z(wNEDh8oH!T+Tnk(Kc1WBp&iT-bDw)1X{TC*a|zRg72tsSSqPhfS-ZBokUTNVVEm} z)03$gUhB#!QvR{=(@;}i3#&L)wY7C#Ewj<`$1uiK+0qUkPQF@iPo-$XjLE*9-p*x- z^d%$MzuTRtyxhEYt!J&qcZy+{K7wS9icnY80I9hKhaXZ6MH)u)hDXvS!B#(v8N;`y z3f@ZZgVzezuB9Dhg#}8N-2wSry2wSB2;mD&B2J2sH>7|35j?}!;;42_w>3egr9vw{ zlNKM^z5d0mF6sdr!1#M}Y+Cu*w0zb-RBr{t164bkz+YJT$gq$W9_ns}Eey67 zh9|hJx>`G3&{Fb~O)e{}d3py*+p*w5#0x_n1_=aJo;+KHCvbH+Kr03&Cx&*4SMm=+ z8i1jQ5P11dc@3Quj*&CJwd zLF=qpBM&x0kwzY@!yu`OrVZB9Y59@IjaHu898b?!;RqO*ui3!m`2>+?QJj&xWdxjh z$W&>ZoJ$dAk0@S1P*(PMJ_nG0e z$V98^O*|aIvH|q+kgmOo0uFW8KFaC`sCJHGY861ppF?ouog-XJ(M~vK_Ea=q1|eS6 zntB7p8XB%1oiksonKp}8Zv7N&=tzJ!MY_5>Tj(hqbYqF9v}g9BG_cw+#bK-Qy3ef? zXU32Q4#J@W3XCMgigZ^3%*=eUk)YGCyUPJy9rV~^j=g$v6NMkz8#9}`>CTtLy3Y2t z7TB_^b}WrB0AwmGX40uvmCF-yc+qxJw4uZHC}?%I3fSUg_x8ap6k%u|43FSc5*r#5 zG@oIsudl85vU58Hn?6K#9+;%)CT+Alc)Wa49aXrjguQ=CglVzT!M zoed-maRL1}4EL|o8XU(_gLfQwcC;#)K5C;Yp#m6V^{_3MZh+DT+FP`O<56R81*);B zw>cZYZu?Ge-ldRJ{teGs78y1&foYiv%ST@G^1<k*J^Y%^(+P3yYD6n1FZXJkv}quH?0THSEk;LSgO^&i`> z%niZfs*`+J0`Ru~TZ()3f~1-z5vmN{Xl7_2afDVk@84CYHA0(uDk~dw8=$hMbx6$e2d%35 zIIB|JDs6)rwK7p4R^!yR=NbN{(En=G!`?l0_dVDu*f9cA1Wj`UOhJdv4@OpT zujVw=Os|0*ufU{b3hXrUj2VHWfR)D~0G}}f=|MO;W~ySeeYU3yhX25%5;<#~r!gr} zz<)Jf8fp|ka4g>S7hx1dJ06$nBSQs^ZY!+@pP}XKgwg+%KX`|vK^xCP*nbtD@+Jek z0-}j8k^&B$H2WxxPr^b`ZkR}dlczI37(aC7fv!J!btdK?o2%e?#YSiOjrMwH1Eg~X z;56>yj*UAn8tgZReF|PcO;^0!B~rYjYP3Ihs@t~LsPFOAR#w6moZ3pr;alsqRShA9 zVh&CD97TeV_sON_^m<;L@N$<%k&f#6hMAA6vkhetoo)}bLh{%GbIgIoJ7Fw^J!(ih z60EDDL4DD~<^r9bT3bO^FRa=-6G9dRK5D!*60pjsW{)k-TDqPFu>fqRa1P{bg`EFZ zffmMifSZ)0Gz3a^uf+3@Pc&XVgBdqus8s(2>1yR&9A~YyR$IpvivBg{J`+-}l$0s2 z>ZY`jQA#T~st56ty_a)OegifhsO!dl9Xg(Z9yPul9u(dEl6^*3%a!T=1ngJ`yYxaMsbBk`G`aT$z&yc_l5gs0nb$|{l zE4qjb^B{W#EC*TX@+H{ofjpg1O)JQ&byz&BagfJRU*Pk;Kc_CsQ3`dZu1iWHsyzmzVNsMFwDhe?53CFFDG*d@;7t^K;(r3ypypDjilI=- zP7@GwPSZ%AWt%t3{P{kC*K4}~-pm5Rf8iILF!ew_OIX5c3OdY~Id+bf4M_uA zE`)Uyaq53z(=+*iy*~r7vrJL{Q)f~CqU39|&N}TsGwShN)>>HY(NNE%sKX3IuRtAe zrgt}-@jAo~!7luUdiwU2vPw=jk0`(ccK93$Z9j@+{}~!~J;1~hyzRjI6vBE6JL^Be z!Zs_)yp6uJ18diGS;7Xp1ZhT3lgkCP7Ptps#L@Q8%=^{?FJIQpg!d%8>juKbw1T?- zSq0V8>7Gh$53Fz*MgMQz>dSsTES77MxspO3&1f8-WFU&Q)@kb>!Zj4U=6@!YMtJQ& zTRar5r`Se%Vz&v7K5px9x2|0~{ClyU6P<*O!Y047xP&djcDR8>*ecv8Y!hxG_&S2G zC-??}H*OJj2s?$Fgw%;k-4d;9*H>C;p5Zv!M=1aH_ zj`1`kNFZF79NEYyo9~NBLr_Dcx%7#nD98kHxj(wMo+!iDFA z7yYZ$eI~$JHgF6ITo#iud3~2cJ?uem%8^dOK{z%`c$MIreU1$i-Vojt-qQU-@T~;j zLNJ`d1ILC<8~LQi<2;Emhn^cYeP8cy*J_e}Ux3S=d=IS?J`z4A_%?!XrwTO8k$l4* zQ>Vcl7QXOT+OLH_nY3GkZ-j4!?}YD#AA}!;pM;-TL7dZj0qD&s>V@ptJuBK4!j13)GAdAOddw9(=XjYPRFm4-^wd{Vd3ReYeHqfE z9s%Irwowct>my8^xL8EP`Jlcpt(02|lnzoGs2_QbjnF>>$Cf%5XB7a;H#K zoq7wWb~dVW;NENFphuqDJFJVFyPM&T@^0l$uX$73THUaLNS%McJ57TMX{Y@9m!dv( zLBYDUyPN1Wy7`4=CF>g13w5=YEE3ykOBRc5;u3Kw!EX@!Cc$qJ{Pq@cnb-j>fm71n zA^2U|lJ}_J{eP<^4~{+*eQ?p2N=x#JOH0=^t;x$TDW!^5U?%KYzVa}T3l0pzrL4H1kEh#DRg*`_+e?-^|#0voy&Uk~!1a3JZ z_)`z;%Cjx+czA^imjE;`SGmbpx_HI3DJy5GU0L95 z^^M}r5s_{dcd1BU68x19lKa+IcAV-_ilPAl-YMQop@!9l`^5VJ>Oq3PA#nK)*~ZvZ4HF+{7sQph7JWcz0`e=SrX;W7z;%+L4h z=MThBDCCFYA@L&-`tx^!Aq4!B;J>zrpNgLWH< zzWm$VHF*U^bg1U%me5gEmRsbbXi}n-IwEeGln%IK2|J3gK@>Mw#a&Q$W|)00C_^zw zu%Ni4j4E((Nq$yhsh8gzDGzSblX3|QKl2G(+@;*~M32!`uW&os)I%zfCNm*7Nu^Sm zWR}KD6QqgK3DP9Oh7&e|u#tp~B5X8ap~#?=BEoy^H&fuUF_3H{af4;?S@0khLa>3naa1L;o z?*r}lLEu~c+5#_fw|S2E^?s>>R5mYbYhMK?&iDe*bBf#P8=ymKgut<-8}3G$v#hzL zvu9;qZgyTCyu{tQyth^1$<*H2(%f!pfw!CB-p+2b@^NuzPjBN&c-gbKuODO9%_hjFl%htY~ZPUEH|XO)r>FnS72i$!1a}pSf50O>4zT zQZL2mmU;-AN!YBBF|-nEB=BmRrM1#J>14uY6E=sixtk?fQZy!yu+?x$9607&IKaUF z<|)rDRd4{kqi-3#165) zQr6RkROZJi#5!=6buXx3=Fthu;XoCK8*VFahKuObYh(SJ=Lf5PP>$73nQTz|tA$BS z#Z2N+hx0~h%W%!wD%~h;BdnRQ;|V(fY|CU7l9`d%pez|`9lA@peYo;>NV}yw33~!z z!8E{KE-90PRe*Z)(fPSgg3Bw0iuqw_uk;9E%L!{GYz5#=Qg1V0JZ)5N0+OE8q1w@S z{sOpjqNg`E_W;6h;}1W6!Yt!*IED>WXO^*Z0lg}$r^(n%Z3KMnH1>9Og)r#Mjl1-Q zpx~I;F~-!)yuy+OV+Y(JxL**ZfWT4S>tY*?E%e?C|660R93ZoemCf*eW9$CWA!2Am zG`)~$se4rq+;W=jsj@#TT-M24e`J)*%YrO5{`_(9xu_V3E81Gb}@G`4>3=`eY6LecbN~EL(Ip_Ux-Dc zP$Y^+NoX9(LnWvJO-I$J7CF&eBQHdGRJ3YZ7NP9?1UM(Hv%M%phOKx5#hIJQ_` zK-g&nu5nzT9>Je{bUUEl0{Ra`aHADCFM2EVQEUVy^0`0yD3o+Yr%>*b-eDx^UFkil z(7o_2jgk+AA9~tASV+1TGDXq{(ueAmTJC=71LYQGXJ>2ks>J5r#JqfSeojYUiRX9U9OE^ck zOt?w7TlhpcB4&t1;#9~lb&2c64dT_}F7a0Jc5%0Omw1nOuXw-sp!l%3Pdp&LD!wkh zDZVYfE4~kN*N?1WfL8+c2OJD|E#RYoZv&;kguwBEO@Z#f^?_FfUK@CQ;HJRM zfm;I~34Av2g}|2rUkUsq@Y_-BsGw2Nqhd$Jjfx+YI4XJ6%u%hQR*pJv)P_+PjJk5v zmQmYB-8Jf=QLl}9choOIfk6>LDM1-Q6NBo4TtVGI=LcOFbaBw7L6-+z8T3fdvq3Ke zy%h9H(7QpO1brX$W6;k*zXqFvi-RWwTY{$r&kSw~o)bJT_~PJef^QGLJNWtFgQJ9LF{~wQVc6oZrD4m$I>Sy2TOW2&*d<|?gUlM*p_@m)3 zhQA!XFZ@9GtKnaSe--{s_;=wyg#Q%&R|JY+Be;l=h_Hx=h^UC_h{lMP2zSJyh_;C9 zBkqZ~H{$+?2O}Picsk;_h!-MWig-N|N9rT})<^A(dN}I6s4t_AMExH1XVl-(D4LDt zqC=v?q9dZCqGO`RM8`)bMwdh{j6OGdd-R^@XQN+>elz;*==Y*Oh&~kkQw)ybV)QX$ zOhC-2n3R~@n6jAhF%x4Z#aLpd#Z<-A#MH&q$2emeV%lT+V$O}ZBIf#-jWPW(TVi&` z?25TH=JuG~F%QMO9P>`h`!OHJd>r#>%;zyb$NUoWYs_!4A+ZUu$+5=R^w_bnnX#p@ z<6|erPL3^)t%#iw>x^xTZHk=}J1=%g>?yG%_O#eDV$X^_C-%J94Y3!*UKD#t>`k#d zVsDPUCHA)1J7VvQy*qYK?0vBh#6A@J@fc}L$(Xt^tH*2~vvW@L<8Fz&C+?BB$KsxjdnN8r+~K$%;+c3ho{Klci}3;R zq4CD}%=p6i@$nV$Q{wIM)8psIx5anG_r;$ae|7w(_y^^|I6vXSgo_g{O}ISa z%7m*Ewk2#&*qN{^;nsxP6Lu%umGE-H;Y3|xLSlAeO=4Z*yu{YTg^7z3mn5E)*pt|o zxFT^?;zfy1Bz}|lYvS*TeBJ=l6d^@Q2}}u2 z2~9~%NlwX0DNHF&DNUJ}GAYH9Voj+_nVHg*GACtTN^8o(l*K7aQrc5aN?Dh3R?78o zH@9FEjRD3{#zQVz! zV^R}RlT%Yu$E9YaW~b(+)}(f&KAie|>N~0LryffEB=z&uFH^rs{XX@lG(OFcCZ&x^ z8=V%G7MT{47MGTgR-EQYo1eBK?TWN#)80<|C0&;;rH@Jd%ucyD2{%-mQ=^v$kntnL_tMqTvf5$G$uEi?Lsg{bua<ElI&S>9u5s(eoidJ$JAK@}fydtlv$+ zrVvw@DclrgiZx}JGELbgxOmxAY?@>$H`z>6Omj^qn&z9DO|7Oyre4zu(`wT?lWaQG zbe`#a(?zCBOgEW!m~J-hGTmm{ZTigglj&E}Z`o`%pDkoZWJhO@$xg^l&NgP7vU9Tw zvWv2(Wmjd_WY=cbXE$Uo$ZpMEnB9}TJbP94+U!%ZN%pzf8?rCVzBqeZ_V(A7d+o}0TN_sZOBa<9+bl)EK&TkiJUH}Z6O z1$hhd&db}HcSqh`d3*Bi&wD6uZ{C5tck({W`#A5jyu*3F&M%%+JhgawaZPbu@x06lzm{dsG}%sai$rq>g?*3E6umKoSCxu=kX( zle`Hec~{;fl7SP^x~U>{RO|N8Q>(|VxQbhkTC3J-q4j+IUZ+1jf5d$~_uU^10w011 z5D7+rPrw*34on1-!DnDPm2ET?|;CA>8?110GeeeK01dqZKunYbOPs6kD0=x{n;SKmR zyaVsSXYe^~1Z^B`0xgb4qs7y7G!rd@hSL1BX4-DrLE0hOBiakvD|!rl7X1slnr@({ z(tY%m^wsoJ^o#V%^q2HL`d{(U@iFmJ<0bJ4@k#Mj@wRw-d~5vH`0eqx;vdF8W{hG? zV0_9*W8^Uk7^@jyGd44BG9EA8!b|`7Ak0%hIzNStN^Mb+W!^9cJBOJz+g#k7iF|Phr#9e72CC#V%%-vVH88 z?A7c}_V?_=?Cb1%><64k&KOQKhshCfB%C@);Yx5BFQ{A?^|GWA01tZ@g$;3~wq=%+v4^c@?~Ro`tuDw~4of*Tp-_ zJI{N?`;+&MKbAj*{~2G**YFehReT%Y&Tr#y=eP5(@^AC+3PuXX3nmKU1p2j%A+9GX}Zj_#so{^rFzLO1+4V8T%TO?Z|)5_9h=`yR#EyH97WhZ4_ zvS+g2WpCv(!<1ht=}Lw&Us<87R0fo5m95HC%8Sa&%6FQ0M zDx)e#m8Zg0&8nd4vg&8mZS`dJO!X|aNUeVVWy+yrE-J^c2exezv8LyeB zp=GfJhJ8cm&Mt!A@ktLC)kvgWGhkA(gS0~2N>%uiUD;7A}6JPGF#t|i<^{50|N z#F>dXiKU6qFV3IINm840+l2#-IlDd=bB;C`_)GpA*X)CoBtxemm z-K*WNeXf10?bR*RK^09(S^$+xqk|!n4 zNRCa;O)g8WNZygWCwX7;^W?Y5y@ol4#fGJZB7@mbZP;wsW!P=FYj|q-C1qAhT*{)9 zoRrd(@|1lkM^lccewaEUbyTV}H8EA2>P)3leW^dCUP`@Uj5LlhMjLrXxlw8K8e5F3 zjMt6#j1QKLUp95w^kwPG3YHZu+qkTK+0L|&(?+L_O-o73O3O*xkhUZ3o3v+Xzo)%5 z(M^1l(1e?sO+nLD({0n;^l9mH(&wcYrdOs{rT>(EDg8>uxQx#-rezp1GBdI>wq$f< zbY}L?jL7^rGc_|iGdFWz=F!aKS%b5NXN|~uA3e^>&)S@|D{FUFU-rQ4!P%7Ze;G5-00lm+^XD~++(??a!==t$(x)PlUJRG z&#hGF#pT^>U<>Mk$)loM*gjWDFv|wvkUA6cmY}PvY@ZvufmkVtiqha zeT7F0j~9JhG`eVPQEJiuhqgM34itS~JfL`3ab&TwSYK=?ZY$ni++O^mxVQMv5>|=0 zL|Wo2Sy{5Wq^IO@$&=D~rAtdesiTxA^^~3|y;9m;Hmz(<*}SrbGH02)?B}vaW&bH> zlncwn<>B)6SwFLWL491kr#@8QQvYlHAN73=vWBDvUBi}! zj)qRlV9RjJ2#d**Zz;5_u(Vp%TiPreEghBvmP3}KmJ^mP%UR0>%VkTq<%Z?fdqT6s znr)@5tF7y->#ZBDo2^@|yRG}I2dsyzN35r<=dG8lSFJa#J=VL{`_@;s!M0f2LL0-z zwFzuuo5H5HCEB#MG+U+3Vnb|=Hm5CQTWMQkYqf2#y|DEnLy%#}aAYJh1{sG;L?$6| zh!9Cck`OJTN3szI;zUq{Kq$nI1duSY3R#P+M>Zmxk!?sjatb+voI@@mSCDJSO{538 zi#$LcBTtd%$V=ok^2R>UKG^=DJ;E-uC)%}ky*0h#<<2sjY}FqqqlKQ{ z)~2?mjZK@I{_7m(jC4jhM>(^c<<8|!v$Mwe(D|G5cjsGYpNs8MxKu8UE6LUDTJPHC zYIp5&b-MPtj<}Ay{^|O`b;@DW5Vo_K$7K6>jmS6y*V@!;L zNihYc#u6|srpMB;LaYX}V@;SF!!ZvQ!d7Byuyt4)wh?Q`4qzv-^VoIl7IquEhdso8 z#a>~*V{frO>@R#UJ{%v5Ps8Wn^YJ)*G5!_K#(B697vnNqf$MM+o{v}IHr#I-Tv1t~hkpx6{ng{d`EE46{zLT#tMp>|PwsY6s3b(XqG-J$MNkEmzV zuhc8*HPz?s?;Y+P?Tz+M@J{kh_s;ar_RjIn^QL29{cbB)*yVv`j_n`M* z-m~5d-pk%@Z;$t`_ks7Z_lfTlAIn$dGy58Re&0IZCf`=y4&P4SUf*}V?|nyn$9$)J zr+pWEJ-&y&|M;Hye)YZa_4@wu_w)DnNBATCpZVwc7yG~R)BFrS-!Jk@{R+RzpX@jJ z^PB(Oe7^bT=BLfin_o7+ZhqU`*ZeLJ5r_;#1x5u%2gU}*1ttWTfvf-(_%3ifa4K*y za3#=*1Gj0i>sqk*WDIqL4u_70j)(pkjt)-`&j`nczX)UDP`D+$D!ewlJ=`AN m8QvW}5`u_mW2jJTP diff --git a/integrations/README.md b/integrations/README.md index 4853897..8e64683 100644 --- a/integrations/README.md +++ b/integrations/README.md @@ -25,3 +25,6 @@ Also stop by our [community section](https://www.zerotier.com/community/) for mo ### Android - [Embedding within an app](../docs/android_zt_sdk.md) - [Unity 3D plugin](../docs/unity3d_android_zt_sdk.md) + +### Windows + - Anyone want to volunteer? diff --git a/integrations/OSX/README.md b/integrations/_attic/OSX/README.md similarity index 100% rename from integrations/OSX/README.md rename to integrations/_attic/OSX/README.md diff --git a/integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.pbxproj b/integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.pbxproj similarity index 100% rename from integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.pbxproj rename to integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.pbxproj diff --git a/integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/xcshareddata/ZT_API_OSX_EXAMPLE.xcscmblueprint b/integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/xcshareddata/ZT_API_OSX_EXAMPLE.xcscmblueprint similarity index 100% rename from integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/xcshareddata/ZT_API_OSX_EXAMPLE.xcscmblueprint rename to integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/xcshareddata/ZT_API_OSX_EXAMPLE.xcscmblueprint diff --git a/integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..5efc7fae30cdd9d9259db789e3024ba68dee6823 GIT binary patch literal 45128 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 literal 0 HcmV?d00001 diff --git a/integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZT_API_OSX_EXAMPLE.xcscheme b/integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZT_API_OSX_EXAMPLE.xcscheme similarity index 100% rename from integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZT_API_OSX_EXAMPLE.xcscheme rename to integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZT_API_OSX_EXAMPLE.xcscheme diff --git a/integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist b/integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 100% rename from integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist rename to integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/AppDelegate.swift b/integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/AppDelegate.swift similarity index 100% rename from integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/AppDelegate.swift rename to integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/AppDelegate.swift diff --git a/integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/Assets.xcassets/AppIcon.appiconset/Contents.json b/integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/Assets.xcassets/AppIcon.appiconset/Contents.json rename to integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/Base.lproj/Main.storyboard b/integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/Base.lproj/Main.storyboard similarity index 100% rename from integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/Base.lproj/Main.storyboard rename to integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/Base.lproj/Main.storyboard diff --git a/integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/Info.plist b/integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/Info.plist similarity index 100% rename from integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/Info.plist rename to integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/Info.plist diff --git a/integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/ViewController.swift b/integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/ViewController.swift similarity index 100% rename from integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/ViewController.swift rename to integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/ViewController.swift diff --git a/integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/ZT_API_OSX_EXAMPLE-Bridging-Header.h b/integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/ZT_API_OSX_EXAMPLE-Bridging-Header.h similarity index 100% rename from integrations/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/ZT_API_OSX_EXAMPLE-Bridging-Header.h rename to integrations/_attic/OSX/zt_api_example/ZT_API_OSX_EXAMPLE/ZT_API_OSX_EXAMPLE-Bridging-Header.h diff --git a/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/project.pbxproj b/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/project.pbxproj new file mode 100644 index 0000000..a248440 --- /dev/null +++ b/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/project.pbxproj @@ -0,0 +1,286 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 7C0FEDCC1D1202FD007A4E66 /* ZeroTierSDK_OSX.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C0FEDCB1D1202FD007A4E66 /* ZeroTierSDK_OSX.h */; settings = {ATTRIBUTES = (Public, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 7C0FEDC81D1202FD007A4E66 /* ZeroTierSDK_OSX.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZeroTierSDK_OSX.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7C0FEDCB1D1202FD007A4E66 /* ZeroTierSDK_OSX.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ZeroTierSDK_OSX.h; sourceTree = ""; }; + 7C0FEDCD1D1202FD007A4E66 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 7C0FEDC41D1202FD007A4E66 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 7C0FEDBE1D1202FD007A4E66 = { + isa = PBXGroup; + children = ( + 7C0FEDCA1D1202FD007A4E66 /* ZeroTierSDK_OSX */, + 7C0FEDC91D1202FD007A4E66 /* Products */, + ); + sourceTree = ""; + }; + 7C0FEDC91D1202FD007A4E66 /* Products */ = { + isa = PBXGroup; + children = ( + 7C0FEDC81D1202FD007A4E66 /* ZeroTierSDK_OSX.framework */, + ); + name = Products; + sourceTree = ""; + }; + 7C0FEDCA1D1202FD007A4E66 /* ZeroTierSDK_OSX */ = { + isa = PBXGroup; + children = ( + 7C0FEDCB1D1202FD007A4E66 /* ZeroTierSDK_OSX.h */, + 7C0FEDCD1D1202FD007A4E66 /* Info.plist */, + ); + path = ZeroTierSDK_OSX; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 7C0FEDC51D1202FD007A4E66 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 7C0FEDCC1D1202FD007A4E66 /* ZeroTierSDK_OSX.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 7C0FEDC71D1202FD007A4E66 /* ZeroTierSDK_OSX */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7C0FEDD01D1202FD007A4E66 /* Build configuration list for PBXNativeTarget "ZeroTierSDK_OSX" */; + buildPhases = ( + 7C0FEDC31D1202FD007A4E66 /* Sources */, + 7C0FEDC41D1202FD007A4E66 /* Frameworks */, + 7C0FEDC51D1202FD007A4E66 /* Headers */, + 7C0FEDC61D1202FD007A4E66 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ZeroTierSDK_OSX; + productName = ZeroTierSDK_OSX; + productReference = 7C0FEDC81D1202FD007A4E66 /* ZeroTierSDK_OSX.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 7C0FEDBF1D1202FD007A4E66 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0730; + ORGANIZATIONNAME = "ZeroTier Inc."; + TargetAttributes = { + 7C0FEDC71D1202FD007A4E66 = { + CreatedOnToolsVersion = 7.3; + }; + }; + }; + buildConfigurationList = 7C0FEDC21D1202FD007A4E66 /* Build configuration list for PBXProject "ZeroTierSDK_OSX" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7C0FEDBE1D1202FD007A4E66; + productRefGroup = 7C0FEDC91D1202FD007A4E66 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 7C0FEDC71D1202FD007A4E66 /* ZeroTierSDK_OSX */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 7C0FEDC61D1202FD007A4E66 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 7C0FEDC31D1202FD007A4E66 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 7C0FEDCE1D1202FD007A4E66 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 7C0FEDCF1D1202FD007A4E66 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 7C0FEDD11D1202FD007A4E66 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = ZeroTierSDK_OSX/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-OSX"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 7C0FEDD21D1202FD007A4E66 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = ZeroTierSDK_OSX/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-OSX"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 7C0FEDC21D1202FD007A4E66 /* Build configuration list for PBXProject "ZeroTierSDK_OSX" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7C0FEDCE1D1202FD007A4E66 /* Debug */, + 7C0FEDCF1D1202FD007A4E66 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7C0FEDD01D1202FD007A4E66 /* Build configuration list for PBXNativeTarget "ZeroTierSDK_OSX" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7C0FEDD11D1202FD007A4E66 /* Debug */, + 7C0FEDD21D1202FD007A4E66 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 7C0FEDBF1D1202FD007A4E66 /* Project object */; +} diff --git a/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..3ac9cd3 --- /dev/null +++ b/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..05185d57513b32b928c2db8c20c4aac9feef80dc GIT binary patch literal 8349 zcmcgxd3;mF_CGU8leAgx&3cmpQfRS)bfKlCWo@A?*3wewLRoA`o7)mdlbWQIvdB@v zg+&D1o<4<^9T8OY`4mw^ML~V+xIabkDFW`#efiDJZQ2I$ef;a!ewyApbLMPw&i9;| z)HQoO!BBeo2_Qg00ZNDg75$d}w7zld&zM3R|-E6Tw6r7sm3e?Z?u;I$2kiXdk z=I~B`^u9pc?9+9^4>819+hc z0x%yIz(QCAH^7Z>J1m3ca0je{weSG^9X7%y*bG}>D?9?bU^hGg&%hpd7LLGCI0nbz z1e}CZ@Fu(kZ^JwAF1!ct!@uE6_zJ#;Z{S<_FMJ2z!w*D9^u$0o!V@Dg5i_w6E3uK@ zq#qeb29XSsNk)*7WE3eSWn>~LCzHrzQbDGYX=EmG5f7P7=8)@23z&aHKjXY2Gkr&8*@*;VOyi5*|SIDd6U*s@3NluXu$!YQtIYT}nKa!uw&*T^K zEBTH5PJt4trv_@G0=3fw+K*mM2h((#O^4ADbR^BA1@szPOiO7QokpkA8T2|@OJ~zL z)JvPFk6uq(={(v-7t3X_}K0@{fxbqM(v$RU`VM`U zen8LCPw55vWmS@|#p^u|u@DDZ&;bXgDPfDK^3Y|gRvO58Loi7kO2LlKO~|S zc{Jis%)%T@cJlVgVm%XB==OyCfr$93$rFN3o{PLr@%Y^SRyGn}AU3#Kyq(k)Ay-HY z7Wo4*xn*oXbj@k@dwii_etpO@m(99ogrCHU`dMO=$c&X=C%5Ca3hIzM4(ZI9Lm&e(VW{NJI#*Df&i)5PFIzBIL_h=ToxIrK@ruLK($cDeEWy&Q z^#{e~S!wltx0p6x4ERGHHtL>}#uO4817T6Yw22ipPM_GCHjNQfGJ=YN5+@tG^gVT+ z#HKmmpPhCLhCvSG!tiPGHu_vmVvYPL2CK>{nDrfOdPGfG#l&!W%L_)q=-RT1(w2~` z&MW2z0_cGTVR($!s}_3Sm4XwL=k_+Tj{BOPe&TM$#rV{FzzK zlwu%K(bC-P4}?;qcP^SH!g2zXNi0jz(hd{RhRHo$Tp4z!_5aJA5uK*M3`p7tH82&X z!E_YRjt-392-iU^IAJFC!mDr~W=iH?6=k?=aB9%s5~vp^Fvv{}GUN@-^@y!be(+^T z%LC$EkG~~Y=?XN8ov}MkO32HTSBPHbUeO(i{t5niId+`VOcmU|&q=fL54? z{jfhKUdPxJyIJ0P8dwZFd7iyX97|n|K2NB{%~Gvjw}YYtb}viJbI%0nM-JG2I0A7iS<%xN>^yIPvRyuieSKxQE+W;#hhECq} zM~BHixD(d2!)hFa87JT_xEt-JM{`5)cRD z)u_iIiTQg?ijjF$=OcPQ2(^s)Y-Hp~cnTOs z`~$Pw;h#8+MFlG*WelAvLIIDj@sH|97Vd=uVA=}L!Sk>WUV#1ZBD@4IV=fNI5jYY@ z;buK~btaI`< zdANY3UA+5#WKY4`}vz*+bh{)5+GFOaPa(4SZaGyx&-E>0H!L{$zKmQh)R*Vzjuo;zpzqig6C=OP8g7WU$yXRbW zW22_x7c9ug$r+q5Br`i}(cpvyLx!fO4^GI<%2~81;^7|&g`}#o<)u-)T4tZF%UE=U47Od~_H2N;XK~hNO?-7GiCd&XNQS!h%ehCzHHz=K+BLZpMs`$;Enfhs$21sCN0u$tQ#nG?iIe;t8d8O{6mPY6)XNM1#?!kaf3Y z49O$;WGop+3Q)ubY{XgU!P%Qh5ga7fu)k|b3C>{v6<~iMY?0(j&2{0tW|z+`y2I7B zG9a>~lX6Dxdn4FellnEcyoFs#Me!IbHuwW#*9w_sZ^p7>T&dI(w*%+qVDW7r1cR~D@iqjbW(-hb}|KQK5Msd7vjHA>=`UP zg16#r+gO{!E zn8e^Hu4pI6aU~{KmbyH?$n2ZsT`+ARZ;`jjJ9r1K!aFyR_n0^TjjNdlACdNHV3as1 zBgG1a^uEUMV^>GYV3su$(X^c@dFl9g(cdJ70&Oy)o@IS1`54z=MntJk$(O7xAm_+u z~*U>au<1#B^?bJXvOU)pA%_59eeq6 zO9ve%vH#N}4K1Wa>@d$XjB-x5y3z67LB~t%{xbdL{K9VK=(Un}OK>M=O_e1M-i+0!^H z{4`Alw=gpERtb_Lhx{&xjl{5%x+O6)sf*UpdVCW9fluK-H?qp0ppER5HI{Ai)2t$} znC?~W3V5WFY4G(bZPlW7q5v=ar>kLhM)Cy1cm+t~+6hVvw1;(WT0k%uon z=puZsvyxL}tth>b-h|KN3td&5E~U5ithmho%b4%?Nws-FRBfhr(A80tljvHuNBhH+ z%{{9)y_eo6Hz^T~9-t3)Y4i}j9MPy<(x`)Ozyo-&Tcgc%Ta=vb^kIAjUuEZAwy`oe zC+2x(MoD~>?v7gX1bq?@;cJl&E>bzATAP?RV_$gf3Hl7(L!V_ax)(C&^K>6Wv4Gzn zl4D6Ks%7ERt<|(?LzQ_c;L|>){ zn2^2nAiM28L@YJztnGCNL|=8Yi+zTs*GqhTAt?e_^te0kR{ktGr~3n*NN2z#oxoH0 zuby!GI(;Jyw@2_e9uA}9F*&Y|N!fTDk91?*DGBTF=;fj9f5B0dZS+HC-9ci33}V5P zOr=v2UP<}?u_W<%=8Oy(C(qH(oP09d$u2mKI-o^6zk{BaK5O2jtNEpL$+I7+{x-&cjZ1|;l@BnP|hznXnPIs`cKOUuz z(i3VRlKUVs;{b_Dp55|m8U9HjaL<`N>nwf z>r_saOVyy7rJAkss^+U!svc84qk2(wM0Ha2k?IrGIn{a9m#VK-->SY-eXj;}th%rI zO7#eJfqJ~USY4u?p>9w&s~4(oP^0=L^%C_;_5JE~>UQ-8^;Y$E^$zt;^^@vn)koE5 z)E6{5jaieaDb`HZOwqVCqNYJJOXJbZ)wF3AXl~G;<|fUZnhwn_%|6Y3%}bgCnpZW4 zG_Py^r8%NGtvRFlSo4YIoaVgdqUH%P?es8{K=dcB_0Tl6-)T_3Mc)lbsb>gVX2^nU&I`k=l= z->P4tzeRtWewluS{to?}`ZfA(`Zx5y7xM=v?@Fl0_ES$hO zxZd0qTmqNErE?iv7B`H`<%+msu7oS&%DKthbgqtba}C@qZZ_A-E#z+CkXy>#%H7T_ z=kDU#xy{^GZacS&dyL!7J;^=Cy~Z8kj&Ucrx4Cz@_qh+aueslO6K~;dyq%Bdd-GTD z34DJ(i66%2@+0_B{1`r;AIBH+>3LT_P!Fi03IqzdW6C}FHnAQTBDLa8uO zm?TUS8U?T56Pkq!fK-E6no1^YmIhJBp9#vZV*w6C(Swy(9{ZQp5s z%Kn`Fko}_lNBhtAU+up;h{NWvJK`O^9alIK90MJL9jT6V$0)}bN4{g6qsme1nB!=2 z_#M|fmN`~9?r_}cSmSuW@sMM^qr>sA@I_?7<$i*-GF literal 0 HcmV?d00001 diff --git a/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_OSX.xcscheme b/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_OSX.xcscheme new file mode 100644 index 0000000..1d72de7 --- /dev/null +++ b/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_OSX.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist b/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 84% rename from integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist rename to integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist index f414021..d3f41a0 100644 --- a/integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,7 +4,7 @@ SchemeUserState - ZeroTierSDK_iOS.xcscheme + ZeroTierSDK_OSX.xcscheme orderHint 0 @@ -12,7 +12,7 @@ SuppressBuildableAutocreation - 7C936A331D11EBEA00470058 + 7C0FEDC71D1202FD007A4E66 primary diff --git a/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX/Info.plist b/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX/Info.plist new file mode 100644 index 0000000..44f4d61 --- /dev/null +++ b/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSHumanReadableCopyright + Copyright © 2016 ZeroTier Inc. All rights reserved. + NSPrincipalClass + + + diff --git a/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h b/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h new file mode 100644 index 0000000..8325739 --- /dev/null +++ b/integrations/_attic/OSX_new/ZeroTierSDK_OSX/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h @@ -0,0 +1,19 @@ +// +// ZeroTierSDK_OSX.h +// ZeroTierSDK_OSX +// +// Created by Joseph Henry on 6/15/16. +// Copyright © 2016 ZeroTier Inc. All rights reserved. +// + +#import + +//! Project version number for ZeroTierSDK_OSX. +FOUNDATION_EXPORT double ZeroTierSDK_OSXVersionNumber; + +//! Project version string for ZeroTierSDK_OSX. +FOUNDATION_EXPORT const unsigned char ZeroTierSDK_OSXVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/integrations/Unity3D/README.md b/integrations/_attic/Unity3D/README.md similarity index 100% rename from integrations/Unity3D/README.md rename to integrations/_attic/Unity3D/README.md diff --git a/integrations/Unity3D/osx_bundle/ZeroTierUnity/ZeroTierUnity.xcodeproj/project.xcworkspace/xcshareddata/ZeroTierUnity.xcscmblueprint b/integrations/_attic/Unity3D/osx_bundle/ZeroTierUnity/ZeroTierUnity.xcodeproj/project.xcworkspace/xcshareddata/ZeroTierUnity.xcscmblueprint similarity index 100% rename from integrations/Unity3D/osx_bundle/ZeroTierUnity/ZeroTierUnity.xcodeproj/project.xcworkspace/xcshareddata/ZeroTierUnity.xcscmblueprint rename to integrations/_attic/Unity3D/osx_bundle/ZeroTierUnity/ZeroTierUnity.xcodeproj/project.xcworkspace/xcshareddata/ZeroTierUnity.xcscmblueprint diff --git a/integrations/iOS/Netcon-iOS.xcodeproj/project.pbxproj b/integrations/_attic/iOS/Netcon-iOS.xcodeproj/project.pbxproj similarity index 100% rename from integrations/iOS/Netcon-iOS.xcodeproj/project.pbxproj rename to integrations/_attic/iOS/Netcon-iOS.xcodeproj/project.pbxproj diff --git a/integrations/iOS/Netcon-iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/integrations/_attic/iOS/Netcon-iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from integrations/iOS/Netcon-iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to integrations/_attic/iOS/Netcon-iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/integrations/iOS/Netcon-iOS.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/_attic/iOS/Netcon-iOS.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate similarity index 100% rename from integrations/iOS/Netcon-iOS.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate rename to integrations/_attic/iOS/Netcon-iOS.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/integrations/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/integrations/_attic/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist similarity index 100% rename from integrations/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist rename to integrations/_attic/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist diff --git a/integrations/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/Netcon-iOS.xcscheme b/integrations/_attic/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/Netcon-iOS.xcscheme similarity index 100% rename from integrations/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/Netcon-iOS.xcscheme rename to integrations/_attic/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/Netcon-iOS.xcscheme diff --git a/integrations/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ServiceSetup.xcscheme b/integrations/_attic/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ServiceSetup.xcscheme similarity index 100% rename from integrations/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ServiceSetup.xcscheme rename to integrations/_attic/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ServiceSetup.xcscheme diff --git a/integrations/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierNetcon.xcscheme b/integrations/_attic/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierNetcon.xcscheme similarity index 100% rename from integrations/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierNetcon.xcscheme rename to integrations/_attic/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierNetcon.xcscheme diff --git a/integrations/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist b/integrations/_attic/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 100% rename from integrations/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist rename to integrations/_attic/iOS/Netcon-iOS.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/integrations/iOS/Netcon-iOS/AppDelegate.swift b/integrations/_attic/iOS/Netcon-iOS/AppDelegate.swift similarity index 100% rename from integrations/iOS/Netcon-iOS/AppDelegate.swift rename to integrations/_attic/iOS/Netcon-iOS/AppDelegate.swift diff --git a/integrations/iOS/Netcon-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/integrations/_attic/iOS/Netcon-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from integrations/iOS/Netcon-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json rename to integrations/_attic/iOS/Netcon-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/integrations/iOS/Netcon-iOS/Base.lproj/LaunchScreen.storyboard b/integrations/_attic/iOS/Netcon-iOS/Base.lproj/LaunchScreen.storyboard similarity index 100% rename from integrations/iOS/Netcon-iOS/Base.lproj/LaunchScreen.storyboard rename to integrations/_attic/iOS/Netcon-iOS/Base.lproj/LaunchScreen.storyboard diff --git a/integrations/iOS/Netcon-iOS/Base.lproj/Main.storyboard b/integrations/_attic/iOS/Netcon-iOS/Base.lproj/Main.storyboard similarity index 100% rename from integrations/iOS/Netcon-iOS/Base.lproj/Main.storyboard rename to integrations/_attic/iOS/Netcon-iOS/Base.lproj/Main.storyboard diff --git a/integrations/iOS/Netcon-iOS/Info.plist b/integrations/_attic/iOS/Netcon-iOS/Info.plist similarity index 100% rename from integrations/iOS/Netcon-iOS/Info.plist rename to integrations/_attic/iOS/Netcon-iOS/Info.plist diff --git a/integrations/iOS/Netcon-iOS/Netcon-iOS-Bridging-Header.h b/integrations/_attic/iOS/Netcon-iOS/Netcon-iOS-Bridging-Header.h similarity index 100% rename from integrations/iOS/Netcon-iOS/Netcon-iOS-Bridging-Header.h rename to integrations/_attic/iOS/Netcon-iOS/Netcon-iOS-Bridging-Header.h diff --git a/integrations/iOS/Netcon-iOS/NetconWrapper.cpp b/integrations/_attic/iOS/Netcon-iOS/NetconWrapper.cpp similarity index 100% rename from integrations/iOS/Netcon-iOS/NetconWrapper.cpp rename to integrations/_attic/iOS/Netcon-iOS/NetconWrapper.cpp diff --git a/integrations/iOS/Netcon-iOS/NetconWrapper.hpp b/integrations/_attic/iOS/Netcon-iOS/NetconWrapper.hpp similarity index 100% rename from integrations/iOS/Netcon-iOS/NetconWrapper.hpp rename to integrations/_attic/iOS/Netcon-iOS/NetconWrapper.hpp diff --git a/integrations/iOS/Netcon-iOS/ViewController.swift b/integrations/_attic/iOS/Netcon-iOS/ViewController.swift similarity index 100% rename from integrations/iOS/Netcon-iOS/ViewController.swift rename to integrations/_attic/iOS/Netcon-iOS/ViewController.swift diff --git a/integrations/iOS/Netcon-iOSTests/Info.plist b/integrations/_attic/iOS/Netcon-iOSTests/Info.plist similarity index 100% rename from integrations/iOS/Netcon-iOSTests/Info.plist rename to integrations/_attic/iOS/Netcon-iOSTests/Info.plist diff --git a/integrations/iOS/Netcon-iOSTests/Netcon_iOSTests.swift b/integrations/_attic/iOS/Netcon-iOSTests/Netcon_iOSTests.swift similarity index 100% rename from integrations/iOS/Netcon-iOSTests/Netcon_iOSTests.swift rename to integrations/_attic/iOS/Netcon-iOSTests/Netcon_iOSTests.swift diff --git a/integrations/iOS/Netcon-iOSUITests/Info.plist b/integrations/_attic/iOS/Netcon-iOSUITests/Info.plist similarity index 100% rename from integrations/iOS/Netcon-iOSUITests/Info.plist rename to integrations/_attic/iOS/Netcon-iOSUITests/Info.plist diff --git a/integrations/iOS/Netcon-iOSUITests/Netcon_iOSUITests.swift b/integrations/_attic/iOS/Netcon-iOSUITests/Netcon_iOSUITests.swift similarity index 100% rename from integrations/iOS/Netcon-iOSUITests/Netcon_iOSUITests.swift rename to integrations/_attic/iOS/Netcon-iOSUITests/Netcon_iOSUITests.swift diff --git a/integrations/iOS/README.md b/integrations/_attic/iOS/README.md similarity index 100% rename from integrations/iOS/README.md rename to integrations/_attic/iOS/README.md diff --git a/integrations/iOS/ServiceSetup/ServiceSetup.h b/integrations/_attic/iOS/ServiceSetup/ServiceSetup.h similarity index 100% rename from integrations/iOS/ServiceSetup/ServiceSetup.h rename to integrations/_attic/iOS/ServiceSetup/ServiceSetup.h diff --git a/integrations/iOS/ServiceSetup/ServiceSetup.m b/integrations/_attic/iOS/ServiceSetup/ServiceSetup.m similarity index 100% rename from integrations/iOS/ServiceSetup/ServiceSetup.m rename to integrations/_attic/iOS/ServiceSetup/ServiceSetup.m diff --git a/integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS/Info.plist b/integrations/_attic/iOS/ZeroTierNetcon/Info.plist similarity index 100% rename from integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS/Info.plist rename to integrations/_attic/iOS/ZeroTierNetcon/Info.plist diff --git a/integrations/iOS/ZeroTierNetcon/ZeroTierNetcon.h b/integrations/_attic/iOS/ZeroTierNetcon/ZeroTierNetcon.h similarity index 100% rename from integrations/iOS/ZeroTierNetcon/ZeroTierNetcon.h rename to integrations/_attic/iOS/ZeroTierNetcon/ZeroTierNetcon.h diff --git a/integrations/iOS/ZeroTierNetconTests/Info.plist b/integrations/_attic/iOS/ZeroTierNetconTests/Info.plist similarity index 100% rename from integrations/iOS/ZeroTierNetconTests/Info.plist rename to integrations/_attic/iOS/ZeroTierNetconTests/Info.plist diff --git a/integrations/iOS/ZeroTierNetconTests/ZeroTierNetconTests.swift b/integrations/_attic/iOS/ZeroTierNetconTests/ZeroTierNetconTests.swift similarity index 100% rename from integrations/iOS/ZeroTierNetconTests/ZeroTierNetconTests.swift rename to integrations/_attic/iOS/ZeroTierNetconTests/ZeroTierNetconTests.swift diff --git a/integrations/iOS/ZeroTierOne/ZeroTierOne.h b/integrations/_attic/iOS/ZeroTierOne/ZeroTierOne.h similarity index 100% rename from integrations/iOS/ZeroTierOne/ZeroTierOne.h rename to integrations/_attic/iOS/ZeroTierOne/ZeroTierOne.h diff --git a/integrations/iOS/ZeroTierOne/ZeroTierOne.m b/integrations/_attic/iOS/ZeroTierOne/ZeroTierOne.m similarity index 100% rename from integrations/iOS/ZeroTierOne/ZeroTierOne.m rename to integrations/_attic/iOS/ZeroTierOne/ZeroTierOne.m diff --git a/integrations/iOS/lwIP/lwIP.h b/integrations/_attic/iOS/lwIP/lwIP.h similarity index 100% rename from integrations/iOS/lwIP/lwIP.h rename to integrations/_attic/iOS/lwIP/lwIP.h diff --git a/integrations/iOS/lwIP/lwIP.m b/integrations/_attic/iOS/lwIP/lwIP.m similarity index 100% rename from integrations/iOS/lwIP/lwIP.m rename to integrations/_attic/iOS/lwIP/lwIP.m diff --git a/integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/iOS_new/ZeroTierSDK_iOS/ZeroTierSDK_iOS.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index f30b4b0f059f1ed8719557a64aa48c59b9ad3aa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19551 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