summaryrefslogtreecommitdiffstats
path: root/lib/libUPnP/Platinum/Source/Tests
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 18:07:22 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 18:07:22 +0000
commitc04dcc2e7d834218ef2d4194331e383402495ae1 (patch)
tree7333e38d10d75386e60f336b80c2443c1166031d /lib/libUPnP/Platinum/Source/Tests
parentInitial commit. (diff)
downloadkodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz
kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'lib/libUPnP/Platinum/Source/Tests')
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/FileMediaServer/FileMediaServerTest.cpp159
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/Http/HttpTest.cpp526
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/LightSample/LightSampleTest.cpp76
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/LightSample/PltLightSample.cpp171
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/LightSample/PltLightSample.h59
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/MediaRenderer/MediaRendererTest.cpp121
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/English.lproj/InfoPlist.strings1
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/English.lproj/MainMenu.xib3224
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest-Info.plist32
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.h20
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.mm64
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.h28
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.m212
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.mm195
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_DataModel.xcdatamodel/elementsbin0 -> 1199 bytes
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_DataModel.xcdatamodel/layoutbin0 -> 475 bytes
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_Prefix.pch7
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/main.mm14
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/Simple/PltSimple.cpp111
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/Simple/PltSimple.h56
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/Simple/SimpleTest.cpp63
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/Ssdp/SsdpTest1.cpp66
-rw-r--r--lib/libUPnP/Platinum/Source/Tests/Time/TimeTest1.cpp189
23 files changed, 5394 insertions, 0 deletions
diff --git a/lib/libUPnP/Platinum/Source/Tests/FileMediaServer/FileMediaServerTest.cpp b/lib/libUPnP/Platinum/Source/Tests/FileMediaServer/FileMediaServerTest.cpp
new file mode 100644
index 0000000..0d1223b
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/FileMediaServer/FileMediaServerTest.cpp
@@ -0,0 +1,159 @@
+/*****************************************************************
+|
+| Platinum - Test UPnP A/V MediaServer
+|
+|
+| Copyright (c) 2004-2010, Plutinosoft, LLC.
+| All rights reserved.
+| http://www.plutinosoft.com
+|
+| This program is free software; you can redistribute it and/or
+| modify it under the terms of the GNU General Public License
+| as published by the Free Software Foundation; either version 2
+| of the License, or (at your option) any later version.
+|
+| OEMs, ISVs, VARs and other distributors that combine and
+| distribute commercially licensed software with Platinum software
+| and do not wish to distribute the source code for the commercially
+| licensed software under version 2, or (at your option) any later
+| version, of the GNU General Public License (the "GPL") must enter
+| into a commercial license agreement with Plutinosoft, LLC.
+| licensing@plutinosoft.com
+|
+| This program is distributed in the hope that it will be useful,
+| but WITHOUT ANY WARRANTY; without even the implied warranty of
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+| GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License
+| along with this program; see the file LICENSE.txt. If not, write to
+| the Free Software Foundation, Inc.,
+| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+| http://www.gnu.org/licenses/gpl-2.0.html
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "PltUPnP.h"
+#include "PltFileMediaServer.h"
+
+#include <stdlib.h>
+
+NPT_SET_LOCAL_LOGGER("platinum.media.server.file.test")
+
+/*----------------------------------------------------------------------
+| globals
++---------------------------------------------------------------------*/
+struct Options {
+ const char* path;
+ const char* friendly_name;
+ const char* guid;
+ NPT_UInt32 port;
+} Options;
+
+/*----------------------------------------------------------------------
+| PrintUsageAndExit
++---------------------------------------------------------------------*/
+static void
+PrintUsageAndExit()
+{
+ fprintf(stderr, "usage: FileMediaServerTest [-f <friendly_name>] [-p <port>] [-g <guid>] <path>\n");
+ fprintf(stderr, "-f : optional upnp device friendly name\n");
+ fprintf(stderr, "-p : optional http port\n");
+ fprintf(stderr, "<path> : local path to serve\n");
+ exit(1);
+}
+
+/*----------------------------------------------------------------------
+| ParseCommandLine
++---------------------------------------------------------------------*/
+static void
+ParseCommandLine(char** args)
+{
+ const char* arg;
+
+ /* default values */
+ Options.path = NULL;
+ Options.friendly_name = NULL;
+ Options.guid = NULL;
+ Options.port = 0;
+
+ while ((arg = *args++)) {
+ if (!strcmp(arg, "-f")) {
+ Options.friendly_name = *args++;
+ } else if (!strcmp(arg, "-g")) {
+ Options.guid = *args++;
+ } else if (!strcmp(arg, "-p")) {
+ if (NPT_FAILED(NPT_ParseInteger32(*args++, Options.port))) {
+ fprintf(stderr, "ERROR: invalid argument\n");
+ PrintUsageAndExit();
+ }
+ } else if (Options.path == NULL) {
+ Options.path = arg;
+ } else {
+ fprintf(stderr, "ERROR: too many arguments\n");
+ PrintUsageAndExit();
+ }
+ }
+
+ /* check args */
+ if (Options.path == NULL) {
+ fprintf(stderr, "ERROR: path missing\n");
+ PrintUsageAndExit();
+ }
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /* argc */, char** argv)
+{
+ // setup Neptune logging
+ NPT_LogManager::GetDefault().Configure("plist:.level=FINE;.handlers=ConsoleHandler;.ConsoleHandler.colors=off;.ConsoleHandler.filter=56");
+
+ /* parse command line */
+ ParseCommandLine(argv+1);
+
+ /* for faster DLNA faster testing */
+ PLT_Constants::GetInstance().SetDefaultDeviceLease(NPT_TimeInterval(60.));
+
+ PLT_UPnP upnp;
+ PLT_DeviceHostReference device(
+ new PLT_FileMediaServer(
+ Options.path,
+ Options.friendly_name?Options.friendly_name:"Platinum UPnP Media Server",
+ false,
+ Options.guid, // NULL for random ID
+ (NPT_UInt16)Options.port)
+ );
+
+ NPT_List<NPT_IpAddress> list;
+ NPT_CHECK_SEVERE(PLT_UPnPMessageHelper::GetIPAddresses(list));
+ NPT_String ip = list.GetFirstItem()->ToString();
+
+ device->m_ModelDescription = "Platinum File Media Server";
+ device->m_ModelURL = "http://www.plutinosoft.com/";
+ device->m_ModelNumber = "1.0";
+ device->m_ModelName = "Platinum File Media Server";
+ device->m_Manufacturer = "Plutinosoft";
+ device->m_ManufacturerURL = "http://www.plutinosoft.com/";
+
+ upnp.AddDevice(device);
+ NPT_String uuid = device->GetUUID();
+
+ NPT_CHECK_SEVERE(upnp.Start());
+ NPT_LOG_INFO("Press 'q' to quit.");
+
+ char buf[256];
+ while (gets(buf)) {
+ if (*buf == 'q')
+ break;
+ }
+
+ upnp.Stop();
+
+ return 0;
+}
diff --git a/lib/libUPnP/Platinum/Source/Tests/Http/HttpTest.cpp b/lib/libUPnP/Platinum/Source/Tests/Http/HttpTest.cpp
new file mode 100644
index 0000000..00b1f52
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/Http/HttpTest.cpp
@@ -0,0 +1,526 @@
+/*****************************************************************
+|
+| Platinum - HTTP tests
+|
+| Copyright (c) 2004-2010, Plutinosoft, LLC.
+| All rights reserved.
+| http://www.plutinosoft.com
+|
+| This program is free software; you can redistribute it and/or
+| modify it under the terms of the GNU General Public License
+| as published by the Free Software Foundation; either version 2
+| of the License, or (at your option) any later version.
+|
+| OEMs, ISVs, VARs and other distributors that combine and
+| distribute commercially licensed software with Platinum software
+| and do not wish to distribute the source code for the commercially
+| licensed software under version 2, or (at your option) any later
+| version, of the GNU General Public License (the "GPL") must enter
+| into a commercial license agreement with Plutinosoft, LLC.
+| licensing@plutinosoft.com
+|
+| This program is distributed in the hope that it will be useful,
+| but WITHOUT ANY WARRANTY; without even the implied warranty of
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+| GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License
+| along with this program; see the file LICENSE.txt. If not, write to
+| the Free Software Foundation, Inc.,
+| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+| http://www.gnu.org/licenses/gpl-2.0.html
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+#include "PltTaskManager.h"
+#include "PltHttpServer.h"
+#include "PltDownloader.h"
+#include "PltRingBufferStream.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+NPT_SET_LOCAL_LOGGER("platinum.core.http.test")
+
+//#define TEST1
+//#define TEST2
+//#define TEST3
+//#define TEST4
+#define TEST5
+
+/*----------------------------------------------------------------------
+| globals
++---------------------------------------------------------------------*/
+struct Options {
+ NPT_UInt32 port;
+ NPT_String path;
+} Options;
+
+/*----------------------------------------------------------------------
+| PLT_HttpCustomRequestHandler
++---------------------------------------------------------------------*/
+class PLT_HttpCustomRequestHandler : public NPT_HttpRequestHandler
+{
+public:
+ // constructors
+ PLT_HttpCustomRequestHandler(NPT_InputStreamReference& body,
+ const char* mime_type,
+ bool update_content_length = false) :
+ m_Body(body),
+ m_MimeType(mime_type),
+ m_UpdateContentLength(update_content_length) {}
+
+ // NPT_HttpRequetsHandler methods
+ virtual NPT_Result SetupResponse(NPT_HttpRequest& request,
+ const NPT_HttpRequestContext& context,
+ NPT_HttpResponse& response) {
+ NPT_COMPILER_UNUSED(request);
+ NPT_COMPILER_UNUSED(context);
+
+ NPT_HttpEntity* entity = response.GetEntity();
+ if (entity == NULL) return NPT_ERROR_INVALID_STATE;
+
+ entity->SetContentType(m_MimeType);
+ entity->SetInputStream(m_Body, m_UpdateContentLength);
+
+ return NPT_SUCCESS;
+ }
+
+private:
+ NPT_InputStreamReference m_Body;
+ NPT_String m_MimeType;
+ bool m_UpdateContentLength;
+};
+
+
+#ifdef TEST1
+/*----------------------------------------------------------------------
+| Test1
++---------------------------------------------------------------------*/
+static bool
+Test1(PLT_TaskManager* task_manager, NPT_HttpUrl url, NPT_Size& size)
+{
+ NPT_LOG_INFO("########### TEST 1 ######################");
+
+ NPT_MemoryStreamReference memory_stream(new NPT_MemoryStream());
+ NPT_OutputStreamReference output_stream(memory_stream);
+ PLT_Downloader downloader(task_manager, url, output_stream);
+ downloader.Start();
+
+ while (1) {
+ switch(downloader.GetState()) {
+ case PLT_DOWNLOADER_SUCCESS: {
+ size = memory_stream->GetDataSize();
+ return true;
+ }
+
+ case PLT_DOWNLOADER_ERROR:
+ return false;
+
+ default:
+ NPT_System::Sleep(NPT_TimeInterval(.1f));
+ break;
+ }
+ };
+
+ return false;
+}
+#endif
+
+#ifdef TEST2
+/*----------------------------------------------------------------------
+| DumpBody
++---------------------------------------------------------------------*/
+static NPT_Result
+ReadBody(PLT_Downloader& downloader, NPT_InputStreamReference& stream, NPT_Size& size)
+{
+ NPT_LargeSize avail;
+ char buffer[2048];
+ NPT_Result ret = NPT_ERROR_WOULD_BLOCK;
+
+ /* reset output param first */
+ size = 0;
+
+ /*
+ we test for availability first to avoid
+ getting stuck in Read forever in case blocking is true
+ and the download is done writing to the stream
+ */
+ NPT_CHECK(stream->GetAvailable(avail));
+
+ if (avail) {
+ ret = stream->Read(buffer, 2048, &size);
+ NPT_LOG_FINER_2("Read %d bytes (result = %d)\n", size, ret);
+ return ret;
+ } else {
+ Plt_DowloaderState state = downloader.GetState();
+ switch (state) {
+ case PLT_DOWNLOADER_ERROR:
+ return NPT_FAILURE;
+
+ case PLT_DOWNLOADER_SUCCESS:
+ /* no more data expected */
+ return NPT_ERROR_EOS;
+
+ default:
+ NPT_System::Sleep(NPT_TimeInterval(.1f));
+ break;
+ }
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| Test2
++---------------------------------------------------------------------*/
+static bool
+Test2(PLT_TaskManager* task_manager, NPT_HttpUrl url, NPT_Size& size)
+{
+ NPT_LOG_INFO("########### TEST 2 ######################");
+
+ /* reset output param first */
+ size = 0;
+
+ PLT_RingBufferStreamReference ringbuffer_stream(new PLT_RingBufferStream());
+ NPT_OutputStreamReference output_stream(ringbuffer_stream);
+ NPT_InputStreamReference input_stream(ringbuffer_stream);
+ PLT_Downloader downloader(task_manager, url, output_stream);
+ downloader.Start();
+
+ while (1) {
+ switch(downloader.GetState()) {
+ case PLT_DOWNLOADER_SUCCESS:
+ ringbuffer_stream->SetEOS();
+ /* fallthrough */
+
+ case PLT_DOWNLOADER_DOWNLOADING: {
+ NPT_Size bytes_read;
+ NPT_Result res = ReadBody(downloader, input_stream, bytes_read);
+ if (NPT_FAILED(res)) {
+ return (res==NPT_ERROR_EOS)?true:false;
+ }
+ size += bytes_read;
+ }
+ break;
+
+ case PLT_DOWNLOADER_ERROR:
+ return false;
+
+ default:
+ NPT_System::Sleep(NPT_TimeInterval(.1f));
+ break;
+ }
+ };
+
+ return false;
+}
+#endif
+
+
+#ifdef TEST3
+class RingBufferWriterTask : public PLT_ThreadTask
+{
+public:
+ RingBufferWriterTask(PLT_RingBufferStreamReference& ringbuffer_stream)
+ : m_RingBufferStream(ringbuffer_stream) {}
+
+ // PLT_ThreadTask methods
+ virtual void DoRun() {
+ char buffer[32768];
+ m_RingBufferStream->WriteFully(buffer, 32768);
+
+ /* mark as done */
+ m_RingBufferStream->SetEOS();
+ }
+
+private:
+ PLT_RingBufferStreamReference m_RingBufferStream;
+};
+
+/*----------------------------------------------------------------------
+| Test3
++---------------------------------------------------------------------*/
+static bool
+Test3(PLT_TaskManager* task_manager, NPT_HttpUrl url, PLT_RingBufferStreamReference& ringbuffer_stream, NPT_Size& size)
+{
+ NPT_LOG_INFO("########### TEST 3 ######################");
+
+ /* reset output param first */
+ size = 0;
+
+ NPT_MemoryStreamReference memory_stream(new NPT_MemoryStream());
+ NPT_OutputStreamReference output_stream(memory_stream);
+ PLT_Downloader downloader(task_manager, url, output_stream);
+ downloader.Start();
+
+ /* asynchronously write onto ring buffer stream */
+ task_manager->StartTask(new RingBufferWriterTask(ringbuffer_stream));
+
+ /* start pulling data */
+ while (1) {
+ switch(downloader.GetState()) {
+ case PLT_DOWNLOADER_SUCCESS:
+ size = memory_stream->GetDataSize();
+ return true;
+
+ case PLT_DOWNLOADER_ERROR:
+ return false;
+
+ default:
+ NPT_System::Sleep(NPT_TimeInterval(.1f));
+ break;
+ }
+ };
+
+ return false;
+}
+#endif
+
+#ifdef TEST4
+class ClientStuckTask : public PLT_ThreadTask
+{
+public:
+ ClientStuckTask(NPT_HttpUrl& url, NPT_HttpClient& client)
+ : m_Url(url), m_Client(client) {}
+
+ // PLT_ThreadTask methods
+ virtual void DoRun() {
+ NPT_HttpRequest request(m_Url, NPT_HTTP_METHOD_GET);
+ NPT_HttpResponse* response = NULL;
+ m_Client.SendRequest(request, response);
+ }
+
+ virtual void DoAbort() {
+ m_Client.Abort();
+ }
+
+private:
+ NPT_HttpUrl m_Url;
+ NPT_HttpClient& m_Client;
+ bool m_Aborted;
+};
+/*----------------------------------------------------------------------
+| Test4
++---------------------------------------------------------------------*/
+static bool
+Test4(PLT_TaskManager* task_manager, NPT_HttpUrl url, NPT_TimeInterval wait_before_kill)
+{
+ NPT_LOG_INFO("########### TEST 4 ######################");
+
+ NPT_HttpClient client;
+
+ /* start task to asynchronously fetch url */
+ ClientStuckTask* task = new ClientStuckTask(url, client);
+ task_manager->StartTask(task, NULL, false);
+
+ /* wait a bit and abort client */
+ NPT_System::Sleep(wait_before_kill);
+
+ task->Kill();
+ return true;
+}
+#endif
+
+#ifdef TEST5
+/*----------------------------------------------------------------------
+| Test5
++---------------------------------------------------------------------*/
+static bool
+Test5(NPT_HttpUrl url)
+{
+ NPT_LOG_INFO("########### TEST 5 ######################");
+
+ NPT_HttpClient client;
+
+ // first request
+ NPT_HttpRequest request(url, NPT_HTTP_METHOD_POST, NPT_HTTP_PROTOCOL_1_1);
+ NPT_HttpEntity* request_entity = new NPT_HttpEntity();
+ request_entity->SetInputStream("Testing");
+ request.SetEntity(request_entity);
+
+ NPT_HttpResponse* response = NULL;
+ client.SendRequest(request, response);
+ NPT_HttpEntity* entity = NULL;
+ if (response && (entity = response->GetEntity())) {
+ NPT_DataBuffer buffer;
+ if (NPT_FAILED(entity->Load(buffer))) return false;
+ }
+
+ // try again
+ delete response;
+ response = NULL;
+ request_entity = new NPT_HttpEntity();
+ request_entity->SetInputStream("Testing2");
+ request.SetEntity(request_entity);
+ client.SendRequest(request, response);
+ entity = NULL;
+ if (response && (entity = response->GetEntity())) {
+ NPT_DataBuffer buffer;
+ if (NPT_FAILED(entity->Load(buffer))) return false;
+ }
+
+ return true;
+}
+#endif
+
+/*----------------------------------------------------------------------
+| PrintUsageAndExit
++---------------------------------------------------------------------*/
+static void
+PrintUsageAndExit(char** args)
+{
+ fprintf(stderr, "usage: %s [-p <port>] [-f <filepath>]\n", args[0]);
+ fprintf(stderr, "-p : optional server port\n");
+ fprintf(stderr, "-f : optional local filepath to serve\n");
+ exit(1);
+}
+
+/*----------------------------------------------------------------------
+| ParseCommandLine
++---------------------------------------------------------------------*/
+static void
+ParseCommandLine(char** args)
+{
+ const char* arg;
+ char** tmp = args+1;
+
+ /* default values */
+ Options.port = 0;
+ Options.path = "";
+
+ while ((arg = *tmp++)) {
+ if (Options.port == 0 && !strcmp(arg, "-p")) {
+ NPT_UInt32 port;
+ if (NPT_FAILED(NPT_ParseInteger32(*tmp++, port, false))) {
+ fprintf(stderr, "ERROR: invalid port\n");
+ exit(1);
+ }
+ Options.port = port;
+ } else if (Options.path.IsEmpty() && !strcmp(arg, "-f")) {
+ Options.path = *tmp++;
+ } else {
+ fprintf(stderr, "ERROR: too many arguments\n");
+ PrintUsageAndExit(args);
+ }
+ }
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int argc, char** argv)
+{
+ NPT_COMPILER_UNUSED(argc);
+
+ NPT_HttpRequestHandler* handler;
+ NPT_Reference<NPT_DataBuffer> buffer;
+ bool result;
+
+ /* parse command line */
+ ParseCommandLine(argv);
+
+ /* create http server */
+ PLT_HttpServer http_server(Options.port?Options.port:8089);
+ NPT_String url;
+
+ if (!Options.path.IsEmpty()) {
+ /* extract folder path */
+ int index1 = Options.path.ReverseFind('\\');
+ int index2 = Options.path.ReverseFind('/');
+ if (index1 <= 0 && index2 <=0) {
+ fprintf(stderr, "ERROR: invalid path\n");
+ exit(1);
+ }
+
+ NPT_FileInfo info;
+ NPT_CHECK_SEVERE(NPT_File::GetInfo(Options.path, &info));
+
+ /* add file request handler */
+ handler = new NPT_HttpFileRequestHandler(
+ Options.path.Left(index1>index2?index1:index2),
+ "/");
+ http_server.AddRequestHandler(handler, "/", true);
+
+ /* build url */
+ url = "/" + Options.path.SubString((index1>index2?index1:index2)+1);
+ } else {
+ /* create random garbage data */
+ buffer = new NPT_DataBuffer(32768);
+ buffer->SetDataSize(32768);
+
+ /* add static handler */
+ handler = new NPT_HttpStaticRequestHandler(buffer->GetData(),
+ buffer->GetDataSize(),
+ "application/octet-stream");
+ http_server.AddRequestHandler(handler, "/test");
+
+ /* build url */
+ url = "/test";
+ }
+
+ /* add custom handler */
+ PLT_RingBufferStreamReference ringbuffer_stream(new PLT_RingBufferStream());
+ NPT_InputStreamReference stream(ringbuffer_stream);
+ NPT_HttpRequestHandler* custom_handler = new PLT_HttpCustomRequestHandler(stream, "text/xml");
+ http_server.AddRequestHandler(custom_handler, "/custom");
+
+ /* start server */
+ NPT_CHECK_SEVERE(http_server.Start());
+
+ /* a task manager for the tests downloader */
+ PLT_TaskManager task_manager;
+
+ /* small delay to let the server start */
+ NPT_System::Sleep(NPT_TimeInterval(1.f));
+
+ /* execute tests */
+ NPT_Size size;
+ NPT_COMPILER_UNUSED(size);
+
+#ifdef TEST1
+ result = Test1(&task_manager, NPT_HttpUrl("127.0.0.1", http_server.GetPort(), url), size);
+ if (!result) return -1;
+#endif
+
+#ifdef TEST2
+ result = Test2(&task_manager, NPT_HttpUrl("127.0.0.1", http_server.GetPort(), url), size);
+ if (!result) return -1;
+#endif
+
+#ifdef TEST3
+ result = Test3(&task_manager, NPT_HttpUrl("127.0.0.1", http_server.GetPort(), "/custom"), ringbuffer_stream, size);
+ if (!result) return -1;
+#endif
+
+#ifdef TEST4
+ result = Test4(&task_manager, NPT_HttpUrl("127.0.0.1", http_server.GetPort(), "/custom"), NPT_TimeInterval(.1f));
+ if (!result) return -1;
+
+ result = Test4(&task_manager, NPT_HttpUrl("127.0.0.1", http_server.GetPort(), "/custom"), NPT_TimeInterval(1.f));
+ if (!result) return -1;
+
+ result = Test4(&task_manager, NPT_HttpUrl("127.0.0.1", http_server.GetPort(), "/custom"), NPT_TimeInterval(2.f));
+ if (!result) return -1;
+#endif
+
+#ifdef TEST5
+ result = Test5(NPT_HttpUrl("127.0.0.1", http_server.GetPort(), "/test"));
+ if (!result) return -1;
+#endif
+
+ NPT_System::Sleep(NPT_TimeInterval(1.f));
+
+ // abort server tasks that are waiting on ring buffer stream
+ ringbuffer_stream->Abort();
+
+ http_server.Stop();
+
+ return 0;
+}
diff --git a/lib/libUPnP/Platinum/Source/Tests/LightSample/LightSampleTest.cpp b/lib/libUPnP/Platinum/Source/Tests/LightSample/LightSampleTest.cpp
new file mode 100644
index 0000000..d9f35a0
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/LightSample/LightSampleTest.cpp
@@ -0,0 +1,76 @@
+/*****************************************************************
+|
+| Platinum - Test Light Device
+|
+| Copyright (c) 2004-2010, Plutinosoft, LLC.
+| All rights reserved.
+| http://www.plutinosoft.com
+|
+| This program is free software; you can redistribute it and/or
+| modify it under the terms of the GNU General Public License
+| as published by the Free Software Foundation; either version 2
+| of the License, or (at your option) any later version.
+|
+| OEMs, ISVs, VARs and other distributors that combine and
+| distribute commercially licensed software with Platinum software
+| and do not wish to distribute the source code for the commercially
+| licensed software under version 2, or (at your option) any later
+| version, of the GNU General Public License (the "GPL") must enter
+| into a commercial license agreement with Plutinosoft, LLC.
+| licensing@plutinosoft.com
+|
+| This program is distributed in the hope that it will be useful,
+| but WITHOUT ANY WARRANTY; without even the implied warranty of
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+| GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License
+| along with this program; see the file LICENSE.txt. If not, write to
+| the Free Software Foundation, Inc.,
+| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+| http://www.gnu.org/licenses/gpl-2.0.html
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "PltUPnP.h"
+#include "PltLightSample.h"
+
+#define TEST_EMBEDDED_DEVICE 1
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /* argc */, char** /* argv */)
+{
+ // setup Neptune logging
+ NPT_LogManager::GetDefault().Configure("plist:.level=FINE;.handlers=ConsoleHandler;.ConsoleHandler.colors=off;.ConsoleHandler.filter=42");
+
+ PLT_UPnP upnp;
+
+ PLT_DeviceHostReference device(new PLT_LightSampleDevice("Platinum Light Bulb"));
+
+#ifdef TEST_EMBEDDED_DEVICE
+ PLT_DeviceDataReference device2(new PLT_LightSampleDevice("Platinum Light Bulb embed 1"));
+ device->AddEmbeddedDevice((PLT_DeviceDataReference&)device2);
+
+ PLT_DeviceDataReference device3(new PLT_LightSampleDevice("Platinum Light Bulb embed 2"));
+ device->AddEmbeddedDevice(device3);
+#endif
+
+ upnp.AddDevice(device);
+ upnp.Start();
+
+ char buf[256];
+ while (gets(buf)) {
+ if (*buf == 'q')
+ break;
+ }
+
+ upnp.Stop();
+
+ return 0;
+}
diff --git a/lib/libUPnP/Platinum/Source/Tests/LightSample/PltLightSample.cpp b/lib/libUPnP/Platinum/Source/Tests/LightSample/PltLightSample.cpp
new file mode 100644
index 0000000..f31ffe1
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/LightSample/PltLightSample.cpp
@@ -0,0 +1,171 @@
+/*****************************************************************
+|
+| Platinum - Light Sample Device
+|
+| Copyright (c) 2004-2010, Plutinosoft, LLC.
+| All rights reserved.
+| http://www.plutinosoft.com
+|
+| This program is free software; you can redistribute it and/or
+| modify it under the terms of the GNU General Public License
+| as published by the Free Software Foundation; either version 2
+| of the License, or (at your option) any later version.
+|
+| OEMs, ISVs, VARs and other distributors that combine and
+| distribute commercially licensed software with Platinum software
+| and do not wish to distribute the source code for the commercially
+| licensed software under version 2, or (at your option) any later
+| version, of the GNU General Public License (the "GPL") must enter
+| into a commercial license agreement with Plutinosoft, LLC.
+| licensing@plutinosoft.com
+|
+| This program is distributed in the hope that it will be useful,
+| but WITHOUT ANY WARRANTY; without even the implied warranty of
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+| GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License
+| along with this program; see the file LICENSE.txt. If not, write to
+| the Free Software Foundation, Inc.,
+| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+| http://www.gnu.org/licenses/gpl-2.0.html
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+#include "Platinum.h"
+#include "PltLightSample.h"
+
+NPT_SET_LOCAL_LOGGER("platinum.test.lightsample")
+
+/*----------------------------------------------------------------------
+| forward references
++---------------------------------------------------------------------*/
+extern NPT_UInt8 SCPDXML[];
+
+/*----------------------------------------------------------------------
+| PLT_LightSampleDevice::PLT_LightSampleDevice
++---------------------------------------------------------------------*/
+PLT_LightSampleDevice::PLT_LightSampleDevice(const char* FriendlyName, const char* UUID) :
+ PLT_DeviceHost("/", UUID, "urn:schemas-upnp-org:device:SwitchPower:1", FriendlyName)
+{
+}
+
+/*----------------------------------------------------------------------
+| PLT_LightSampleDevice::~PLT_LightSampleDevice
++---------------------------------------------------------------------*/
+PLT_LightSampleDevice::~PLT_LightSampleDevice()
+{
+}
+
+/*----------------------------------------------------------------------
+| PLT_LightSampleDevice::SetupServices
++---------------------------------------------------------------------*/
+NPT_Result
+PLT_LightSampleDevice::SetupServices()
+{
+ NPT_Result res;
+ PLT_Service* service = new PLT_Service(
+ this,
+ "urn:schemas-upnp-org:service:SwitchPower:1",
+ "urn:upnp-org:serviceId:SwitchPower.001",
+ "SwitchPower");
+ NPT_CHECK_LABEL_FATAL(res = service->SetSCPDXML((const char*)SCPDXML), failure);
+ NPT_CHECK_LABEL_FATAL(res = AddService(service), failure);
+
+ service->SetStateVariable("Status", "True");
+
+ return NPT_SUCCESS;
+
+failure:
+ delete service;
+ return res;
+}
+
+/*----------------------------------------------------------------------
+| PLT_LightSampleDevice::OnAction
++---------------------------------------------------------------------*/
+NPT_Result
+PLT_LightSampleDevice::OnAction(PLT_ActionReference& action,
+ const PLT_HttpRequestContext& context)
+{
+ NPT_COMPILER_UNUSED(context);
+
+ /* parse the action name */
+ NPT_String name = action->GetActionDesc().GetName();
+ if (name.Compare("SetTarget") == 0) {
+ NPT_String value;
+ action->GetArgumentValue("newTargetValue", value);
+
+ PLT_StateVariable* variable = action->GetActionDesc().GetService()->FindStateVariable("Status");
+ if (NPT_FAILED(variable->SetValue(value))) {
+ action->SetError(402, "Invalid Args");
+ return NPT_FAILURE;
+ }
+ return NPT_SUCCESS;
+ } else if (name.Compare("GetStatus") == 0) {
+ PLT_StateVariable* variable = action->GetActionDesc().GetService()->FindStateVariable("Status");
+ if (variable) {
+ action->SetArgumentValue("ResultStatus", variable->GetValue());
+ return NPT_SUCCESS;
+ }
+ }
+
+ action->SetError(501, "Action Failed");
+ return NPT_FAILURE;
+}
+
+NPT_UInt8 SCPDXML[957] =
+{
+ 0x20, 0x20, 0x3C, 0x3F, 0x78, 0x6D, 0x6C, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3D, 0x22, 0x31, 0x2E, 0x30,
+ 0x22, 0x20, 0x65, 0x6E, 0x63, 0x6F, 0x64, 0x69, 0x6E, 0x67, 0x3D, 0x22, 0x75, 0x74, 0x66, 0x2D, 0x38, 0x22, 0x20, 0x3F,
+ 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x73, 0x63, 0x70, 0x64, 0x20, 0x78, 0x6D, 0x6C, 0x6E, 0x73, 0x3D, 0x22, 0x75,
+ 0x72, 0x6E, 0x3A, 0x73, 0x63, 0x68, 0x65, 0x6D, 0x61, 0x73, 0x2D, 0x75, 0x70, 0x6E, 0x70, 0x2D, 0x6F, 0x72, 0x67, 0x3A,
+ 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2D, 0x31, 0x2D, 0x30, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x73, 0x70,
+ 0x65, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x6D, 0x61, 0x6A, 0x6F, 0x72,
+ 0x3E, 0x31, 0x3C, 0x2F, 0x6D, 0x61, 0x6A, 0x6F, 0x72, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x6D, 0x69, 0x6E, 0x6F,
+ 0x72, 0x3E, 0x30, 0x3C, 0x2F, 0x6D, 0x69, 0x6E, 0x6F, 0x72, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x73, 0x70,
+ 0x65, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x61, 0x63, 0x74, 0x69, 0x6F,
+ 0x6E, 0x4C, 0x69, 0x73, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0D, 0x0A,
+ 0x20, 0x20, 0x3C, 0x6E, 0x61, 0x6D, 0x65, 0x3E, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3C, 0x2F, 0x6E,
+ 0x61, 0x6D, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x4C, 0x69,
+ 0x73, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x3E, 0x0D, 0x0A, 0x20,
+ 0x20, 0x3C, 0x6E, 0x61, 0x6D, 0x65, 0x3E, 0x52, 0x65, 0x73, 0x75, 0x6C, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3C,
+ 0x2F, 0x6E, 0x61, 0x6D, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6F,
+ 0x6E, 0x3E, 0x6F, 0x75, 0x74, 0x3C, 0x2F, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x20, 0x0D, 0x0A,
+ 0x20, 0x20, 0x3C, 0x72, 0x65, 0x6C, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61,
+ 0x62, 0x6C, 0x65, 0x3E, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3C, 0x2F, 0x72, 0x65, 0x6C, 0x61, 0x74, 0x65, 0x64, 0x53,
+ 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F,
+ 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x61, 0x72, 0x67, 0x75, 0x6D,
+ 0x65, 0x6E, 0x74, 0x4C, 0x69, 0x73, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E,
+ 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x6E, 0x61,
+ 0x6D, 0x65, 0x3E, 0x53, 0x65, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3C, 0x2F, 0x6E, 0x61, 0x6D, 0x65, 0x3E, 0x20,
+ 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x4C, 0x69, 0x73, 0x74, 0x3E, 0x0D, 0x0A,
+ 0x20, 0x20, 0x3C, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x6E, 0x61, 0x6D,
+ 0x65, 0x3E, 0x6E, 0x65, 0x77, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3C, 0x2F, 0x6E, 0x61,
+ 0x6D, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x69,
+ 0x6E, 0x3C, 0x2F, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x72,
+ 0x65, 0x6C, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C, 0x65, 0x3E,
+ 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3C, 0x2F, 0x72, 0x65, 0x6C, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65,
+ 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x61, 0x72, 0x67, 0x75,
+ 0x6D, 0x65, 0x6E, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x4C,
+ 0x69, 0x73, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3E, 0x0D, 0x0A, 0x20,
+ 0x20, 0x3C, 0x2F, 0x61, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x4C, 0x69, 0x73, 0x74, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x73,
+ 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6C, 0x65, 0x3E, 0x0D, 0x0A, 0x20,
+ 0x20, 0x3C, 0x73, 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C, 0x65, 0x20, 0x73, 0x65, 0x6E, 0x64,
+ 0x45, 0x76, 0x65, 0x6E, 0x74, 0x73, 0x3D, 0x22, 0x79, 0x65, 0x73, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x6E, 0x61,
+ 0x6D, 0x65, 0x3E, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3C, 0x2F, 0x6E, 0x61, 0x6D, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20,
+ 0x20, 0x3C, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x3E, 0x62, 0x6F, 0x6F, 0x6C, 0x65, 0x61, 0x6E, 0x3C, 0x2F,
+ 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x73, 0x74, 0x61, 0x74,
+ 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C, 0x65, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x73, 0x74, 0x61, 0x74, 0x65,
+ 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C, 0x65, 0x20, 0x73, 0x65, 0x6E, 0x64, 0x45, 0x76, 0x65, 0x6E, 0x74, 0x73, 0x3D,
+ 0x22, 0x6E, 0x6F, 0x22, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x6E, 0x61, 0x6D, 0x65, 0x3E, 0x54, 0x61, 0x72, 0x67, 0x65,
+ 0x74, 0x3C, 0x2F, 0x6E, 0x61, 0x6D, 0x65, 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79,
+ 0x70, 0x65, 0x3E, 0x62, 0x6F, 0x6F, 0x6C, 0x65, 0x61, 0x6E, 0x3C, 0x2F, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65,
+ 0x3E, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x73, 0x74, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C,
+ 0x65, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65,
+ 0x54, 0x61, 0x62, 0x6C, 0x65, 0x3E, 0x0D, 0x0A, 0x20, 0x20, 0x3C, 0x2F, 0x73, 0x63, 0x70, 0x64, 0x3E
+};
diff --git a/lib/libUPnP/Platinum/Source/Tests/LightSample/PltLightSample.h b/lib/libUPnP/Platinum/Source/Tests/LightSample/PltLightSample.h
new file mode 100644
index 0000000..a23e8ff
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/LightSample/PltLightSample.h
@@ -0,0 +1,59 @@
+/*****************************************************************
+|
+| Platinum - Light Sample Device
+|
+| Copyright (c) 2004-2010, Plutinosoft, LLC.
+| All rights reserved.
+| http://www.plutinosoft.com
+|
+| This program is free software; you can redistribute it and/or
+| modify it under the terms of the GNU General Public License
+| as published by the Free Software Foundation; either version 2
+| of the License, or (at your option) any later version.
+|
+| OEMs, ISVs, VARs and other distributors that combine and
+| distribute commercially licensed software with Platinum software
+| and do not wish to distribute the source code for the commercially
+| licensed software under version 2, or (at your option) any later
+| version, of the GNU General Public License (the "GPL") must enter
+| into a commercial license agreement with Plutinosoft, LLC.
+| licensing@plutinosoft.com
+|
+| This program is distributed in the hope that it will be useful,
+| but WITHOUT ANY WARRANTY; without even the implied warranty of
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+| GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License
+| along with this program; see the file LICENSE.txt. If not, write to
+| the Free Software Foundation, Inc.,
+| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+| http://www.gnu.org/licenses/gpl-2.0.html
+|
+****************************************************************/
+
+#ifndef _PLT_LIGHT_SAMPLE_H_
+#define _PLT_LIGHT_SAMPLE_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "PltDeviceHost.h"
+
+/*----------------------------------------------------------------------
+| PLT_LightSampleDevice class
++---------------------------------------------------------------------*/
+class PLT_LightSampleDevice : public PLT_DeviceHost
+{
+public:
+ PLT_LightSampleDevice(const char* FriendlyName,
+ const char* UUID = "");
+ virtual ~PLT_LightSampleDevice();
+
+ // PLT_DeviceHost methods
+ virtual NPT_Result SetupServices();
+ virtual NPT_Result OnAction(PLT_ActionReference& action,
+ const PLT_HttpRequestContext& context);
+};
+
+#endif /* _PLT_LIGHT_SAMPLE_H_ */
diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaRenderer/MediaRendererTest.cpp b/lib/libUPnP/Platinum/Source/Tests/MediaRenderer/MediaRendererTest.cpp
new file mode 100644
index 0000000..54d9d24
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/MediaRenderer/MediaRendererTest.cpp
@@ -0,0 +1,121 @@
+/*****************************************************************
+|
+| Platinum - Test UPnP A/V MediaRenderer
+|
+| Copyright (c) 2004-2010, Plutinosoft, LLC.
+| All rights reserved.
+| http://www.plutinosoft.com
+|
+| This program is free software; you can redistribute it and/or
+| modify it under the terms of the GNU General Public License
+| as published by the Free Software Foundation; either version 2
+| of the License, or (at your option) any later version.
+|
+| OEMs, ISVs, VARs and other distributors that combine and
+| distribute commercially licensed software with Platinum software
+| and do not wish to distribute the source code for the commercially
+| licensed software under version 2, or (at your option) any later
+| version, of the GNU General Public License (the "GPL") must enter
+| into a commercial license agreement with Plutinosoft, LLC.
+| licensing@plutinosoft.com
+|
+| This program is distributed in the hope that it will be useful,
+| but WITHOUT ANY WARRANTY; without even the implied warranty of
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+| GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License
+| along with this program; see the file LICENSE.txt. If not, write to
+| the Free Software Foundation, Inc.,
+| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+| http://www.gnu.org/licenses/gpl-2.0.html
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "PltUPnP.h"
+#include "PltMediaRenderer.h"
+
+#include <stdlib.h>
+
+/*----------------------------------------------------------------------
+| globals
++---------------------------------------------------------------------*/
+struct Options {
+ const char* friendly_name;
+} Options;
+
+/*----------------------------------------------------------------------
+| PrintUsageAndExit
++---------------------------------------------------------------------*/
+static void
+PrintUsageAndExit(char** args)
+{
+ fprintf(stderr, "usage: %s [-f <friendly_name>]\n", args[0]);
+ fprintf(stderr, "-f : optional upnp server friendly name\n");
+ fprintf(stderr, "<path> : local path to serve\n");
+ exit(1);
+}
+
+/*----------------------------------------------------------------------
+| ParseCommandLine
++---------------------------------------------------------------------*/
+static void
+ParseCommandLine(char** args)
+{
+ const char* arg;
+ char** tmp = args+1;
+
+ /* default values */
+ Options.friendly_name = NULL;
+
+ while ((arg = *tmp++)) {
+ if (!strcmp(arg, "-f")) {
+ Options.friendly_name = *tmp++;
+ } else {
+ fprintf(stderr, "ERROR: too many arguments\n");
+ PrintUsageAndExit(args);
+ }
+ }
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /* argc */, char** argv)
+{
+ PLT_UPnP upnp;
+
+ /* parse command line */
+ ParseCommandLine(argv);
+
+ PLT_DeviceHostReference device(
+ new PLT_MediaRenderer(Options.friendly_name?Options.friendly_name:"Platinum Media Renderer",
+ false,
+ "e6572b54-f3c7-2d91-2fb5-b757f2537e21"));
+ upnp.AddDevice(device);
+ bool added = true;
+
+ upnp.Start();
+
+ char buf[256];
+ while (gets(buf)) {
+ if (*buf == 'q')
+ break;
+
+ if (*buf == 's') {
+ if (added) {
+ upnp.RemoveDevice(device);
+ } else {
+ upnp.AddDevice(device);
+ }
+ added = !added;
+ }
+ }
+
+ upnp.Stop();
+ return 0;
+}
diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/English.lproj/InfoPlist.strings b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/English.lproj/InfoPlist.strings
new file mode 100644
index 0000000..b92732c
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/English.lproj/InfoPlist.strings
@@ -0,0 +1 @@
+/* Localized versions of Info.plist keys */
diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/English.lproj/MainMenu.xib b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/English.lproj/MainMenu.xib
new file mode 100644
index 0000000..8d4fb5c
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/English.lproj/MainMenu.xib
@@ -0,0 +1,3224 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
+ <data>
+ <int key="IBDocument.SystemTarget">1050</int>
+ <string key="IBDocument.SystemVersion">10F569</string>
+ <string key="IBDocument.InterfaceBuilderVersion">788</string>
+ <string key="IBDocument.AppKitVersion">1038.29</string>
+ <string key="IBDocument.HIToolboxVersion">461.00</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="NS.object.0">788</string>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="2"/>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.Metadata">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="53522055">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="493647166">
+ <object class="NSMutableString" key="NSClassName">
+ <characters key="NS.bytes">NSApplication</characters>
+ </object>
+ </object>
+ <object class="NSCustomObject" id="909243075">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="547858435">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSWindowTemplate" id="483958638">
+ <int key="NSWindowStyleMask">15</int>
+ <int key="NSWindowBacking">2</int>
+ <string key="NSWindowRect">{{6, 593}, {480, 360}}</string>
+ <int key="NSWTFlags">1886912512</int>
+ <string key="NSWindowTitle">MediaServerCocoaTest</string>
+ <string key="NSWindowClass">NSWindow</string>
+ <object class="NSMutableString" key="NSViewClass">
+ <characters key="NS.bytes">View</characters>
+ </object>
+ <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+ <string key="NSWindowContentMinSize">{213, 107}</string>
+ <object class="NSView" key="NSWindowView" id="823886803">
+ <reference key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSButton" id="544612128">
+ <reference key="NSNextResponder" ref="823886803"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{19, 312}, {96, 32}}</string>
+ <reference key="NSSuperview" ref="823886803"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="879879405">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents">Start</string>
+ <object class="NSFont" key="NSSupport" id="293448079">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">13</double>
+ <int key="NSfFlags">1044</int>
+ </object>
+ <reference key="NSControlView" ref="544612128"/>
+ <int key="NSButtonFlags">-927579905</int>
+ <int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="293448079"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrameSize">{480, 360}</string>
+ <reference key="NSSuperview"/>
+ </object>
+ <string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
+ <string key="NSMinSize">{213, 129}</string>
+ <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+ </object>
+ <object class="NSMenu" id="1055885701">
+ <string key="NSTitle">MainMenu</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="376192112">
+ <reference key="NSMenu" ref="1055885701"/>
+ <string key="NSTitle">MediaServerCocoaTest</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <object class="NSCustomResource" key="NSOnImage" id="893455832">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuCheckmark</string>
+ </object>
+ <object class="NSCustomResource" key="NSMixedImage" id="424226900">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuMixedState</string>
+ </object>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="123765298">
+ <string key="NSTitle">MediaServerCocoaTest</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="743093781">
+ <reference key="NSMenu" ref="123765298"/>
+ <string key="NSTitle">About MediaServerCocoaTest</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="791044830">
+ <reference key="NSMenu" ref="123765298"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="124073989">
+ <reference key="NSMenu" ref="123765298"/>
+ <string key="NSTitle">Preferences…</string>
+ <string key="NSKeyEquiv">,</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="621602699">
+ <reference key="NSMenu" ref="123765298"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="515282677">
+ <reference key="NSMenu" ref="123765298"/>
+ <string key="NSTitle">Services</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="939189088">
+ <object class="NSMutableString" key="NSTitle">
+ <characters key="NS.bytes">Services</characters>
+ </object>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <string key="NSName">_NSServicesMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="931166327">
+ <reference key="NSMenu" ref="123765298"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="780549861">
+ <reference key="NSMenu" ref="123765298"/>
+ <string key="NSTitle">Hide MediaServerCocoaTest</string>
+ <string key="NSKeyEquiv">h</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="514007154">
+ <reference key="NSMenu" ref="123765298"/>
+ <string key="NSTitle">Hide Others</string>
+ <string key="NSKeyEquiv">h</string>
+ <int key="NSKeyEquivModMask">1572864</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="163840636">
+ <reference key="NSMenu" ref="123765298"/>
+ <string key="NSTitle">Show All</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="901869444">
+ <reference key="NSMenu" ref="123765298"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="349823970">
+ <reference key="NSMenu" ref="123765298"/>
+ <string key="NSTitle">Quit MediaServerCocoaTest</string>
+ <string key="NSKeyEquiv">q</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ </object>
+ <string key="NSName">_NSAppleMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="842783111">
+ <reference key="NSMenu" ref="1055885701"/>
+ <string key="NSTitle">File</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="960517776">
+ <object class="NSMutableString" key="NSTitle">
+ <characters key="NS.bytes">File</characters>
+ </object>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="1005751409">
+ <reference key="NSMenu" ref="960517776"/>
+ <string key="NSTitle">Save</string>
+ <string key="NSKeyEquiv">s</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="402151840">
+ <reference key="NSMenu" ref="960517776"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="620705007">
+ <reference key="NSMenu" ref="960517776"/>
+ <string key="NSTitle">Page Setup…</string>
+ <string key="NSKeyEquiv">P</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="51940822">
+ <reference key="NSMenu" ref="960517776"/>
+ <string key="NSTitle">Print…</string>
+ <string key="NSKeyEquiv">p</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="545718297">
+ <reference key="NSMenu" ref="1055885701"/>
+ <string key="NSTitle">Edit</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="1022019938">
+ <string key="NSTitle">Edit</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="307109690">
+ <reference key="NSMenu" ref="1022019938"/>
+ <string key="NSTitle">Undo</string>
+ <string key="NSKeyEquiv">z</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="744402274">
+ <reference key="NSMenu" ref="1022019938"/>
+ <string key="NSTitle">Redo</string>
+ <string key="NSKeyEquiv">Z</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="831119715">
+ <reference key="NSMenu" ref="1022019938"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="70873500">
+ <reference key="NSMenu" ref="1022019938"/>
+ <string key="NSTitle">Cut</string>
+ <string key="NSKeyEquiv">x</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="808304593">
+ <reference key="NSMenu" ref="1022019938"/>
+ <string key="NSTitle">Copy</string>
+ <string key="NSKeyEquiv">c</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="597871667">
+ <reference key="NSMenu" ref="1022019938"/>
+ <string key="NSTitle">Paste</string>
+ <string key="NSKeyEquiv">v</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="324532357">
+ <reference key="NSMenu" ref="1022019938"/>
+ <string key="NSTitle">Paste and Match Style</string>
+ <string key="NSKeyEquiv">V</string>
+ <int key="NSKeyEquivModMask">1572864</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="618358412">
+ <reference key="NSMenu" ref="1022019938"/>
+ <string key="NSTitle">Delete</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="883438165">
+ <reference key="NSMenu" ref="1022019938"/>
+ <string key="NSTitle">Select All</string>
+ <string key="NSKeyEquiv">a</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="473717252">
+ <reference key="NSMenu" ref="1022019938"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="69846141">
+ <reference key="NSMenu" ref="1022019938"/>
+ <string key="NSTitle">Find</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="216314426">
+ <string key="NSTitle">Find</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="914446540">
+ <reference key="NSMenu" ref="216314426"/>
+ <string key="NSTitle">Find…</string>
+ <string key="NSKeyEquiv">f</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <int key="NSTag">1</int>
+ </object>
+ <object class="NSMenuItem" id="160366792">
+ <reference key="NSMenu" ref="216314426"/>
+ <string key="NSTitle">Find Next</string>
+ <string key="NSKeyEquiv">g</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <int key="NSTag">2</int>
+ </object>
+ <object class="NSMenuItem" id="248661547">
+ <reference key="NSMenu" ref="216314426"/>
+ <string key="NSTitle">Find Previous</string>
+ <string key="NSKeyEquiv">G</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <int key="NSTag">3</int>
+ </object>
+ <object class="NSMenuItem" id="30033296">
+ <reference key="NSMenu" ref="216314426"/>
+ <string key="NSTitle">Use Selection for Find</string>
+ <string key="NSKeyEquiv">e</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <int key="NSTag">7</int>
+ </object>
+ <object class="NSMenuItem" id="827334636">
+ <reference key="NSMenu" ref="216314426"/>
+ <string key="NSTitle">Jump to Selection</string>
+ <string key="NSKeyEquiv">j</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="365048869">
+ <reference key="NSMenu" ref="1022019938"/>
+ <string key="NSTitle">Spelling and Grammar</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="666968844">
+ <string key="NSTitle">Spelling</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="356339891">
+ <reference key="NSMenu" ref="666968844"/>
+ <string key="NSTitle">Show Spelling and Grammar</string>
+ <string key="NSKeyEquiv">:</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="416352713">
+ <reference key="NSMenu" ref="666968844"/>
+ <string key="NSTitle">Check Document Now</string>
+ <string key="NSKeyEquiv">;</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="47615281">
+ <reference key="NSMenu" ref="666968844"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="252035059">
+ <reference key="NSMenu" ref="666968844"/>
+ <string key="NSTitle">Check Spelling While Typing</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="286376998">
+ <reference key="NSMenu" ref="666968844"/>
+ <string key="NSTitle">Check Grammar With Spelling</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="81755183">
+ <reference key="NSMenu" ref="666968844"/>
+ <string key="NSTitle">Correct Spelling Automatically</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="958645126">
+ <reference key="NSMenu" ref="1022019938"/>
+ <string key="NSTitle">Substitutions</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="218631249">
+ <string key="NSTitle">Substitutions</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="64764928">
+ <reference key="NSMenu" ref="218631249"/>
+ <string key="NSTitle">Show Substitutions</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="136936362">
+ <reference key="NSMenu" ref="218631249"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="607672977">
+ <reference key="NSMenu" ref="218631249"/>
+ <string key="NSTitle">Smart Copy/Paste</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="484928874">
+ <reference key="NSMenu" ref="218631249"/>
+ <string key="NSTitle">Smart Quotes</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="693070189">
+ <reference key="NSMenu" ref="218631249"/>
+ <string key="NSTitle">Smart Dashes</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="1059551809">
+ <reference key="NSMenu" ref="218631249"/>
+ <string key="NSTitle">Smart Links</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="416554597">
+ <reference key="NSMenu" ref="218631249"/>
+ <string key="NSTitle">Text Replacement</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="814247416">
+ <reference key="NSMenu" ref="1022019938"/>
+ <string key="NSTitle">Transformations</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="562140037">
+ <string key="NSTitle">Transformations</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="698135111">
+ <reference key="NSMenu" ref="562140037"/>
+ <string key="NSTitle">Make Upper Case</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="899181471">
+ <reference key="NSMenu" ref="562140037"/>
+ <string key="NSTitle">Make Lower Case</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="582459168">
+ <reference key="NSMenu" ref="562140037"/>
+ <string key="NSTitle">Capitalize</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="1058116061">
+ <reference key="NSMenu" ref="1022019938"/>
+ <string key="NSTitle">Speech</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="792127484">
+ <string key="NSTitle">Speech</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="318734362">
+ <reference key="NSMenu" ref="792127484"/>
+ <string key="NSTitle">Start Speaking</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="612849471">
+ <reference key="NSMenu" ref="792127484"/>
+ <string key="NSTitle">Stop Speaking</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="259022320">
+ <reference key="NSMenu" ref="1055885701"/>
+ <string key="NSTitle">Format</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="708542952">
+ <string key="NSTitle">Format</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="1044121641">
+ <reference key="NSMenu" ref="708542952"/>
+ <string key="NSTitle">Font</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="16789759">
+ <string key="NSTitle">Font</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="486510693">
+ <reference key="NSMenu" ref="16789759"/>
+ <string key="NSTitle">Show Fonts</string>
+ <string key="NSKeyEquiv">t</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="322671057">
+ <reference key="NSMenu" ref="16789759"/>
+ <string key="NSTitle">Bold</string>
+ <string key="NSKeyEquiv">b</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <int key="NSTag">2</int>
+ </object>
+ <object class="NSMenuItem" id="294925675">
+ <reference key="NSMenu" ref="16789759"/>
+ <string key="NSTitle">Italic</string>
+ <string key="NSKeyEquiv">i</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <int key="NSTag">1</int>
+ </object>
+ <object class="NSMenuItem" id="386587767">
+ <reference key="NSMenu" ref="16789759"/>
+ <string key="NSTitle">Underline</string>
+ <string key="NSKeyEquiv">u</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="530490813">
+ <reference key="NSMenu" ref="16789759"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="791073707">
+ <reference key="NSMenu" ref="16789759"/>
+ <string key="NSTitle">Bigger</string>
+ <string key="NSKeyEquiv">+</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <int key="NSTag">3</int>
+ </object>
+ <object class="NSMenuItem" id="820131188">
+ <reference key="NSMenu" ref="16789759"/>
+ <string key="NSTitle">Smaller</string>
+ <string key="NSKeyEquiv">-</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <int key="NSTag">4</int>
+ </object>
+ <object class="NSMenuItem" id="593643800">
+ <reference key="NSMenu" ref="16789759"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="17067790">
+ <reference key="NSMenu" ref="16789759"/>
+ <string key="NSTitle">Kern</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="277000559">
+ <string key="NSTitle">Kern</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="53041874">
+ <reference key="NSMenu" ref="277000559"/>
+ <string key="NSTitle">Use Default</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="665619559">
+ <reference key="NSMenu" ref="277000559"/>
+ <string key="NSTitle">Use None</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="807093337">
+ <reference key="NSMenu" ref="277000559"/>
+ <string key="NSTitle">Tighten</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="81316040">
+ <reference key="NSMenu" ref="277000559"/>
+ <string key="NSTitle">Loosen</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="654563803">
+ <reference key="NSMenu" ref="16789759"/>
+ <string key="NSTitle">Ligature</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="164619877">
+ <string key="NSTitle">Ligature</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="291130592">
+ <reference key="NSMenu" ref="164619877"/>
+ <string key="NSTitle">Use Default</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="557989785">
+ <reference key="NSMenu" ref="164619877"/>
+ <string key="NSTitle">Use None</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="8023761">
+ <reference key="NSMenu" ref="164619877"/>
+ <string key="NSTitle">Use All</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="35184653">
+ <reference key="NSMenu" ref="16789759"/>
+ <string key="NSTitle">Baseline</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="1040787833">
+ <string key="NSTitle">Baseline</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="299485767">
+ <reference key="NSMenu" ref="1040787833"/>
+ <string key="NSTitle">Use Default</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="362581379">
+ <reference key="NSMenu" ref="1040787833"/>
+ <string key="NSTitle">Superscript</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="368049810">
+ <reference key="NSMenu" ref="1040787833"/>
+ <string key="NSTitle">Subscript</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="650703522">
+ <reference key="NSMenu" ref="1040787833"/>
+ <string key="NSTitle">Raise</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="470064337">
+ <reference key="NSMenu" ref="1040787833"/>
+ <string key="NSTitle">Lower</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="638669489">
+ <reference key="NSMenu" ref="16789759"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="169445129">
+ <reference key="NSMenu" ref="16789759"/>
+ <string key="NSTitle">Show Colors</string>
+ <string key="NSKeyEquiv">C</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="511988305">
+ <reference key="NSMenu" ref="16789759"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="637704817">
+ <reference key="NSMenu" ref="16789759"/>
+ <string key="NSTitle">Copy Style</string>
+ <string key="NSKeyEquiv">c</string>
+ <int key="NSKeyEquivModMask">1572864</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="684848834">
+ <reference key="NSMenu" ref="16789759"/>
+ <string key="NSTitle">Paste Style</string>
+ <string key="NSKeyEquiv">v</string>
+ <int key="NSKeyEquivModMask">1572864</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ </object>
+ <string key="NSName">_NSFontMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="446410933">
+ <reference key="NSMenu" ref="708542952"/>
+ <string key="NSTitle">Text</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="640850853">
+ <string key="NSTitle">Text</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="775088230">
+ <reference key="NSMenu" ref="640850853"/>
+ <string key="NSTitle">Align Left</string>
+ <string key="NSKeyEquiv">{</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="20804296">
+ <reference key="NSMenu" ref="640850853"/>
+ <string key="NSTitle">Center</string>
+ <string key="NSKeyEquiv">|</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="489997371">
+ <reference key="NSMenu" ref="640850853"/>
+ <string key="NSTitle">Justify</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="766941912">
+ <reference key="NSMenu" ref="640850853"/>
+ <string key="NSTitle">Align Right</string>
+ <string key="NSKeyEquiv">}</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="831789293">
+ <reference key="NSMenu" ref="640850853"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="473944779">
+ <reference key="NSMenu" ref="640850853"/>
+ <string key="NSTitle">Show Ruler</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="405928732">
+ <reference key="NSMenu" ref="640850853"/>
+ <string key="NSTitle">Copy Ruler</string>
+ <string key="NSKeyEquiv">c</string>
+ <int key="NSKeyEquivModMask">1310720</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="784305476">
+ <reference key="NSMenu" ref="640850853"/>
+ <string key="NSTitle">Paste Ruler</string>
+ <string key="NSKeyEquiv">v</string>
+ <int key="NSKeyEquivModMask">1310720</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="147235865">
+ <reference key="NSMenu" ref="1055885701"/>
+ <string key="NSTitle">View</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="877676881">
+ <string key="NSTitle">View</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="653321099">
+ <reference key="NSMenu" ref="877676881"/>
+ <string key="NSTitle">Show Toolbar</string>
+ <string key="NSKeyEquiv">t</string>
+ <int key="NSKeyEquivModMask">1572864</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="854660346">
+ <reference key="NSMenu" ref="877676881"/>
+ <string key="NSTitle">Customize Toolbar…</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="560112995">
+ <reference key="NSMenu" ref="1055885701"/>
+ <string key="NSTitle">Window</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="747245393">
+ <object class="NSMutableString" key="NSTitle">
+ <characters key="NS.bytes">Window</characters>
+ </object>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="814052996">
+ <reference key="NSMenu" ref="747245393"/>
+ <string key="NSTitle">Minimize</string>
+ <string key="NSKeyEquiv">m</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="319459889">
+ <reference key="NSMenu" ref="747245393"/>
+ <string key="NSTitle">Zoom</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="1042829312">
+ <reference key="NSMenu" ref="747245393"/>
+ <bool key="NSIsDisabled">YES</bool>
+ <bool key="NSIsSeparator">YES</bool>
+ <string key="NSTitle"/>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ <object class="NSMenuItem" id="1057689233">
+ <reference key="NSMenu" ref="747245393"/>
+ <string key="NSTitle">Bring All to Front</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ </object>
+ <string key="NSName">_NSWindowsMenu</string>
+ </object>
+ </object>
+ <object class="NSMenuItem" id="713319646">
+ <reference key="NSMenu" ref="1055885701"/>
+ <string key="NSTitle">Help</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ <string key="NSAction">submenuAction:</string>
+ <object class="NSMenu" key="NSSubmenu" id="508081226">
+ <string key="NSTitle">Help</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMenuItem" id="954120217">
+ <reference key="NSMenu" ref="508081226"/>
+ <string key="NSTitle">MediaServerCocoaTest Help</string>
+ <string key="NSKeyEquiv">?</string>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="893455832"/>
+ <reference key="NSMixedImage" ref="424226900"/>
+ </object>
+ </object>
+ <string key="NSName">_NSHelpMenu</string>
+ </object>
+ </object>
+ </object>
+ <string key="NSName">_NSMainMenu</string>
+ </object>
+ <object class="NSCustomObject" id="612578685">
+ <string key="NSClassName">MediaServerCocoaTest_AppDelegate</string>
+ </object>
+ <object class="NSCustomObject" id="39582327">
+ <string key="NSClassName">NSFontManager</string>
+ </object>
+ <object class="NSCustomObject" id="770142414">
+ <string key="NSClassName">MediaServerCocoaTestController</string>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">print:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="51940822"/>
+ </object>
+ <int key="connectionID">86</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">runPageLayout:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="620705007"/>
+ </object>
+ <int key="connectionID">87</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">terminate:</string>
+ <reference key="source" ref="493647166"/>
+ <reference key="destination" ref="349823970"/>
+ </object>
+ <int key="connectionID">139</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">orderFrontStandardAboutPanel:</string>
+ <reference key="source" ref="493647166"/>
+ <reference key="destination" ref="743093781"/>
+ </object>
+ <int key="connectionID">142</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">hideOtherApplications:</string>
+ <reference key="source" ref="493647166"/>
+ <reference key="destination" ref="514007154"/>
+ </object>
+ <int key="connectionID">146</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">hide:</string>
+ <reference key="source" ref="493647166"/>
+ <reference key="destination" ref="780549861"/>
+ </object>
+ <int key="connectionID">152</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">unhideAllApplications:</string>
+ <reference key="source" ref="493647166"/>
+ <reference key="destination" ref="163840636"/>
+ </object>
+ <int key="connectionID">153</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">delegate</string>
+ <reference key="source" ref="493647166"/>
+ <reference key="destination" ref="612578685"/>
+ </object>
+ <int key="connectionID">206</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">delegate</string>
+ <reference key="source" ref="483958638"/>
+ <reference key="destination" ref="612578685"/>
+ </object>
+ <int key="connectionID">207</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">window</string>
+ <reference key="source" ref="612578685"/>
+ <reference key="destination" ref="483958638"/>
+ </object>
+ <int key="connectionID">208</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">saveAction:</string>
+ <reference key="source" ref="612578685"/>
+ <reference key="destination" ref="1005751409"/>
+ </object>
+ <int key="connectionID">211</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performMiniaturize:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="814052996"/>
+ </object>
+ <int key="connectionID">247</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performZoom:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="319459889"/>
+ </object>
+ <int key="connectionID">248</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">arrangeInFront:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="1057689233"/>
+ </object>
+ <int key="connectionID">249</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleToolbarShown:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="653321099"/>
+ </object>
+ <int key="connectionID">342</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">runToolbarCustomizationPalette:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="854660346"/>
+ </object>
+ <int key="connectionID">343</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">addFontTrait:</string>
+ <reference key="source" ref="39582327"/>
+ <reference key="destination" ref="322671057"/>
+ </object>
+ <int key="connectionID">393</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">addFontTrait:</string>
+ <reference key="source" ref="39582327"/>
+ <reference key="destination" ref="294925675"/>
+ </object>
+ <int key="connectionID">394</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">modifyFont:</string>
+ <reference key="source" ref="39582327"/>
+ <reference key="destination" ref="820131188"/>
+ </object>
+ <int key="connectionID">395</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">orderFrontFontPanel:</string>
+ <reference key="source" ref="39582327"/>
+ <reference key="destination" ref="486510693"/>
+ </object>
+ <int key="connectionID">396</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">modifyFont:</string>
+ <reference key="source" ref="39582327"/>
+ <reference key="destination" ref="791073707"/>
+ </object>
+ <int key="connectionID">397</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">raiseBaseline:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="650703522"/>
+ </object>
+ <int key="connectionID">398</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">lowerBaseline:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="470064337"/>
+ </object>
+ <int key="connectionID">399</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">copyFont:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="637704817"/>
+ </object>
+ <int key="connectionID">400</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">subscript:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="368049810"/>
+ </object>
+ <int key="connectionID">401</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">superscript:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="362581379"/>
+ </object>
+ <int key="connectionID">402</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">tightenKerning:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="807093337"/>
+ </object>
+ <int key="connectionID">403</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">underline:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="386587767"/>
+ </object>
+ <int key="connectionID">404</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">orderFrontColorPanel:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="169445129"/>
+ </object>
+ <int key="connectionID">405</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">useAllLigatures:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="8023761"/>
+ </object>
+ <int key="connectionID">406</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">loosenKerning:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="81316040"/>
+ </object>
+ <int key="connectionID">407</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">pasteFont:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="684848834"/>
+ </object>
+ <int key="connectionID">408</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">unscript:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="299485767"/>
+ </object>
+ <int key="connectionID">409</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">useStandardKerning:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="53041874"/>
+ </object>
+ <int key="connectionID">410</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">useStandardLigatures:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="291130592"/>
+ </object>
+ <int key="connectionID">411</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">turnOffLigatures:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="557989785"/>
+ </object>
+ <int key="connectionID">412</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">turnOffKerning:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="665619559"/>
+ </object>
+ <int key="connectionID">413</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">alignLeft:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="775088230"/>
+ </object>
+ <int key="connectionID">414</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">alignJustified:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="489997371"/>
+ </object>
+ <int key="connectionID">415</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">copyRuler:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="405928732"/>
+ </object>
+ <int key="connectionID">416</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">alignCenter:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="20804296"/>
+ </object>
+ <int key="connectionID">417</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleRuler:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="473944779"/>
+ </object>
+ <int key="connectionID">418</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">alignRight:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="766941912"/>
+ </object>
+ <int key="connectionID">419</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">pasteRuler:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="784305476"/>
+ </object>
+ <int key="connectionID">420</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">capitalizeWord:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="582459168"/>
+ </object>
+ <int key="connectionID">489</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">cut:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="70873500"/>
+ </object>
+ <int key="connectionID">490</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">paste:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="597871667"/>
+ </object>
+ <int key="connectionID">491</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleSmartInsertDelete:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="607672977"/>
+ </object>
+ <int key="connectionID">492</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleAutomaticQuoteSubstitution:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="484928874"/>
+ </object>
+ <int key="connectionID">493</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">redo:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="744402274"/>
+ </object>
+ <int key="connectionID">494</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleAutomaticDashSubstitution:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="693070189"/>
+ </object>
+ <int key="connectionID">495</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleContinuousSpellChecking:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="252035059"/>
+ </object>
+ <int key="connectionID">496</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">undo:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="307109690"/>
+ </object>
+ <int key="connectionID">497</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleGrammarChecking:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="286376998"/>
+ </object>
+ <int key="connectionID">498</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">startSpeaking:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="318734362"/>
+ </object>
+ <int key="connectionID">499</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showGuessPanel:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="356339891"/>
+ </object>
+ <int key="connectionID">500</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">checkSpelling:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="416352713"/>
+ </object>
+ <int key="connectionID">501</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">pasteAsPlainText:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="324532357"/>
+ </object>
+ <int key="connectionID">502</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">copy:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="808304593"/>
+ </object>
+ <int key="connectionID">503</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">delete:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="618358412"/>
+ </object>
+ <int key="connectionID">504</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">lowercaseWord:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="899181471"/>
+ </object>
+ <int key="connectionID">505</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">selectAll:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="883438165"/>
+ </object>
+ <int key="connectionID">506</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">stopSpeaking:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="612849471"/>
+ </object>
+ <int key="connectionID">507</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">orderFrontSubstitutionsPanel:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="64764928"/>
+ </object>
+ <int key="connectionID">508</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleAutomaticTextReplacement:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="416554597"/>
+ </object>
+ <int key="connectionID">509</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleAutomaticLinkDetection:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="1059551809"/>
+ </object>
+ <int key="connectionID">510</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleAutomaticSpellingCorrection:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="81755183"/>
+ </object>
+ <int key="connectionID">511</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">uppercaseWord:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="698135111"/>
+ </object>
+ <int key="connectionID">512</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="160366792"/>
+ </object>
+ <int key="connectionID">513</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="30033296"/>
+ </object>
+ <int key="connectionID">514</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="914446540"/>
+ </object>
+ <int key="connectionID">515</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">centerSelectionInVisibleArea:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="827334636"/>
+ </object>
+ <int key="connectionID">516</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">performFindPanelAction:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="248661547"/>
+ </object>
+ <int key="connectionID">517</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showHelp:</string>
+ <reference key="source" ref="909243075"/>
+ <reference key="destination" ref="954120217"/>
+ </object>
+ <int key="connectionID">521</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">window</string>
+ <reference key="source" ref="770142414"/>
+ <reference key="destination" ref="483958638"/>
+ </object>
+ <int key="connectionID">524</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">mainButton</string>
+ <reference key="source" ref="770142414"/>
+ <reference key="destination" ref="544612128"/>
+ </object>
+ <int key="connectionID">527</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <reference key="object" ref="0"/>
+ <reference key="children" ref="53522055"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="493647166"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">File's Owner</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="909243075"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="547858435"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Application</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">21</int>
+ <reference key="object" ref="483958638"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="823886803"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Window</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2</int>
+ <reference key="object" ref="823886803"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="544612128"/>
+ </object>
+ <reference key="parent" ref="483958638"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">29</int>
+ <reference key="object" ref="1055885701"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="376192112"/>
+ <reference ref="842783111"/>
+ <reference ref="560112995"/>
+ <reference ref="147235865"/>
+ <reference ref="259022320"/>
+ <reference ref="545718297"/>
+ <reference ref="713319646"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">MainMenu</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">56</int>
+ <reference key="object" ref="376192112"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="123765298"/>
+ </object>
+ <reference key="parent" ref="1055885701"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">57</int>
+ <reference key="object" ref="123765298"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="743093781"/>
+ <reference ref="124073989"/>
+ <reference ref="515282677"/>
+ <reference ref="780549861"/>
+ <reference ref="349823970"/>
+ <reference ref="621602699"/>
+ <reference ref="931166327"/>
+ <reference ref="514007154"/>
+ <reference ref="901869444"/>
+ <reference ref="163840636"/>
+ <reference ref="791044830"/>
+ </object>
+ <reference key="parent" ref="376192112"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">58</int>
+ <reference key="object" ref="743093781"/>
+ <reference key="parent" ref="123765298"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">129</int>
+ <reference key="object" ref="124073989"/>
+ <reference key="parent" ref="123765298"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">131</int>
+ <reference key="object" ref="515282677"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="939189088"/>
+ </object>
+ <reference key="parent" ref="123765298"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">130</int>
+ <reference key="object" ref="939189088"/>
+ <reference key="parent" ref="515282677"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">134</int>
+ <reference key="object" ref="780549861"/>
+ <reference key="parent" ref="123765298"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">136</int>
+ <reference key="object" ref="349823970"/>
+ <reference key="parent" ref="123765298"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">143</int>
+ <reference key="object" ref="621602699"/>
+ <reference key="parent" ref="123765298"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">144</int>
+ <reference key="object" ref="931166327"/>
+ <reference key="parent" ref="123765298"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">145</int>
+ <reference key="object" ref="514007154"/>
+ <reference key="parent" ref="123765298"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">149</int>
+ <reference key="object" ref="901869444"/>
+ <reference key="parent" ref="123765298"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">150</int>
+ <reference key="object" ref="163840636"/>
+ <reference key="parent" ref="123765298"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">196</int>
+ <reference key="object" ref="791044830"/>
+ <reference key="parent" ref="123765298"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">83</int>
+ <reference key="object" ref="842783111"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="960517776"/>
+ </object>
+ <reference key="parent" ref="1055885701"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">81</int>
+ <reference key="object" ref="960517776"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="402151840"/>
+ <reference ref="1005751409"/>
+ <reference ref="620705007"/>
+ <reference ref="51940822"/>
+ </object>
+ <reference key="parent" ref="842783111"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">74</int>
+ <reference key="object" ref="402151840"/>
+ <reference key="parent" ref="960517776"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">75</int>
+ <reference key="object" ref="1005751409"/>
+ <reference key="parent" ref="960517776"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">77</int>
+ <reference key="object" ref="620705007"/>
+ <reference key="parent" ref="960517776"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">78</int>
+ <reference key="object" ref="51940822"/>
+ <reference key="parent" ref="960517776"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">241</int>
+ <reference key="object" ref="560112995"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="747245393"/>
+ </object>
+ <reference key="parent" ref="1055885701"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">242</int>
+ <reference key="object" ref="747245393"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1042829312"/>
+ <reference ref="319459889"/>
+ <reference ref="1057689233"/>
+ <reference ref="814052996"/>
+ </object>
+ <reference key="parent" ref="560112995"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">243</int>
+ <reference key="object" ref="1042829312"/>
+ <reference key="parent" ref="747245393"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">244</int>
+ <reference key="object" ref="319459889"/>
+ <reference key="parent" ref="747245393"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">245</int>
+ <reference key="object" ref="1057689233"/>
+ <reference key="parent" ref="747245393"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">246</int>
+ <reference key="object" ref="814052996"/>
+ <reference key="parent" ref="747245393"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">338</int>
+ <reference key="object" ref="147235865"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="877676881"/>
+ </object>
+ <reference key="parent" ref="1055885701"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">339</int>
+ <reference key="object" ref="877676881"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="854660346"/>
+ <reference ref="653321099"/>
+ </object>
+ <reference key="parent" ref="147235865"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">340</int>
+ <reference key="object" ref="854660346"/>
+ <reference key="parent" ref="877676881"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">341</int>
+ <reference key="object" ref="653321099"/>
+ <reference key="parent" ref="877676881"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">205</int>
+ <reference key="object" ref="612578685"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">MediaServerCocoaTest_AppDelegate</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">347</int>
+ <reference key="object" ref="259022320"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="708542952"/>
+ </object>
+ <reference key="parent" ref="1055885701"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">348</int>
+ <reference key="object" ref="708542952"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1044121641"/>
+ <reference ref="446410933"/>
+ </object>
+ <reference key="parent" ref="259022320"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">349</int>
+ <reference key="object" ref="1044121641"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="16789759"/>
+ </object>
+ <reference key="parent" ref="708542952"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">350</int>
+ <reference key="object" ref="446410933"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="640850853"/>
+ </object>
+ <reference key="parent" ref="708542952"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">351</int>
+ <reference key="object" ref="640850853"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="775088230"/>
+ <reference ref="20804296"/>
+ <reference ref="489997371"/>
+ <reference ref="766941912"/>
+ <reference ref="831789293"/>
+ <reference ref="473944779"/>
+ <reference ref="405928732"/>
+ <reference ref="784305476"/>
+ </object>
+ <reference key="parent" ref="446410933"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">352</int>
+ <reference key="object" ref="775088230"/>
+ <reference key="parent" ref="640850853"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">353</int>
+ <reference key="object" ref="20804296"/>
+ <reference key="parent" ref="640850853"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">354</int>
+ <reference key="object" ref="489997371"/>
+ <reference key="parent" ref="640850853"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">355</int>
+ <reference key="object" ref="766941912"/>
+ <reference key="parent" ref="640850853"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">356</int>
+ <reference key="object" ref="831789293"/>
+ <reference key="parent" ref="640850853"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">357</int>
+ <reference key="object" ref="473944779"/>
+ <reference key="parent" ref="640850853"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">358</int>
+ <reference key="object" ref="405928732"/>
+ <reference key="parent" ref="640850853"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">359</int>
+ <reference key="object" ref="784305476"/>
+ <reference key="parent" ref="640850853"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">360</int>
+ <reference key="object" ref="16789759"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="486510693"/>
+ <reference ref="322671057"/>
+ <reference ref="294925675"/>
+ <reference ref="386587767"/>
+ <reference ref="530490813"/>
+ <reference ref="791073707"/>
+ <reference ref="820131188"/>
+ <reference ref="593643800"/>
+ <reference ref="17067790"/>
+ <reference ref="654563803"/>
+ <reference ref="35184653"/>
+ <reference ref="638669489"/>
+ <reference ref="169445129"/>
+ <reference ref="511988305"/>
+ <reference ref="637704817"/>
+ <reference ref="684848834"/>
+ </object>
+ <reference key="parent" ref="1044121641"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">361</int>
+ <reference key="object" ref="486510693"/>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">362</int>
+ <reference key="object" ref="322671057"/>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">363</int>
+ <reference key="object" ref="294925675"/>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">364</int>
+ <reference key="object" ref="386587767"/>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">365</int>
+ <reference key="object" ref="530490813"/>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">366</int>
+ <reference key="object" ref="791073707"/>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">367</int>
+ <reference key="object" ref="820131188"/>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">368</int>
+ <reference key="object" ref="593643800"/>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">369</int>
+ <reference key="object" ref="17067790"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="277000559"/>
+ </object>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">370</int>
+ <reference key="object" ref="654563803"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="164619877"/>
+ </object>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">371</int>
+ <reference key="object" ref="35184653"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1040787833"/>
+ </object>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">372</int>
+ <reference key="object" ref="638669489"/>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">373</int>
+ <reference key="object" ref="169445129"/>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">374</int>
+ <reference key="object" ref="511988305"/>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">375</int>
+ <reference key="object" ref="637704817"/>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">376</int>
+ <reference key="object" ref="684848834"/>
+ <reference key="parent" ref="16789759"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">377</int>
+ <reference key="object" ref="1040787833"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="299485767"/>
+ <reference ref="362581379"/>
+ <reference ref="368049810"/>
+ <reference ref="650703522"/>
+ <reference ref="470064337"/>
+ </object>
+ <reference key="parent" ref="35184653"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">378</int>
+ <reference key="object" ref="299485767"/>
+ <reference key="parent" ref="1040787833"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">379</int>
+ <reference key="object" ref="362581379"/>
+ <reference key="parent" ref="1040787833"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">380</int>
+ <reference key="object" ref="368049810"/>
+ <reference key="parent" ref="1040787833"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">381</int>
+ <reference key="object" ref="650703522"/>
+ <reference key="parent" ref="1040787833"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">382</int>
+ <reference key="object" ref="470064337"/>
+ <reference key="parent" ref="1040787833"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">383</int>
+ <reference key="object" ref="164619877"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="291130592"/>
+ <reference ref="557989785"/>
+ <reference ref="8023761"/>
+ </object>
+ <reference key="parent" ref="654563803"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">384</int>
+ <reference key="object" ref="291130592"/>
+ <reference key="parent" ref="164619877"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">385</int>
+ <reference key="object" ref="557989785"/>
+ <reference key="parent" ref="164619877"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">386</int>
+ <reference key="object" ref="8023761"/>
+ <reference key="parent" ref="164619877"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">387</int>
+ <reference key="object" ref="277000559"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="53041874"/>
+ <reference ref="665619559"/>
+ <reference ref="807093337"/>
+ <reference ref="81316040"/>
+ </object>
+ <reference key="parent" ref="17067790"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">388</int>
+ <reference key="object" ref="53041874"/>
+ <reference key="parent" ref="277000559"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">389</int>
+ <reference key="object" ref="665619559"/>
+ <reference key="parent" ref="277000559"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">390</int>
+ <reference key="object" ref="807093337"/>
+ <reference key="parent" ref="277000559"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">391</int>
+ <reference key="object" ref="81316040"/>
+ <reference key="parent" ref="277000559"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">392</int>
+ <reference key="object" ref="39582327"/>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">444</int>
+ <reference key="object" ref="545718297"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1022019938"/>
+ </object>
+ <reference key="parent" ref="1055885701"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">445</int>
+ <reference key="object" ref="1022019938"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="307109690"/>
+ <reference ref="744402274"/>
+ <reference ref="831119715"/>
+ <reference ref="70873500"/>
+ <reference ref="808304593"/>
+ <reference ref="597871667"/>
+ <reference ref="324532357"/>
+ <reference ref="618358412"/>
+ <reference ref="883438165"/>
+ <reference ref="473717252"/>
+ <reference ref="69846141"/>
+ <reference ref="365048869"/>
+ <reference ref="958645126"/>
+ <reference ref="814247416"/>
+ <reference ref="1058116061"/>
+ </object>
+ <reference key="parent" ref="545718297"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">446</int>
+ <reference key="object" ref="307109690"/>
+ <reference key="parent" ref="1022019938"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">447</int>
+ <reference key="object" ref="744402274"/>
+ <reference key="parent" ref="1022019938"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">448</int>
+ <reference key="object" ref="831119715"/>
+ <reference key="parent" ref="1022019938"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">449</int>
+ <reference key="object" ref="70873500"/>
+ <reference key="parent" ref="1022019938"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">450</int>
+ <reference key="object" ref="808304593"/>
+ <reference key="parent" ref="1022019938"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">451</int>
+ <reference key="object" ref="597871667"/>
+ <reference key="parent" ref="1022019938"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">452</int>
+ <reference key="object" ref="324532357"/>
+ <reference key="parent" ref="1022019938"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">453</int>
+ <reference key="object" ref="618358412"/>
+ <reference key="parent" ref="1022019938"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">454</int>
+ <reference key="object" ref="883438165"/>
+ <reference key="parent" ref="1022019938"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">455</int>
+ <reference key="object" ref="473717252"/>
+ <reference key="parent" ref="1022019938"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">456</int>
+ <reference key="object" ref="69846141"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="216314426"/>
+ </object>
+ <reference key="parent" ref="1022019938"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">457</int>
+ <reference key="object" ref="365048869"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="666968844"/>
+ </object>
+ <reference key="parent" ref="1022019938"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">458</int>
+ <reference key="object" ref="958645126"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="218631249"/>
+ </object>
+ <reference key="parent" ref="1022019938"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">459</int>
+ <reference key="object" ref="814247416"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="562140037"/>
+ </object>
+ <reference key="parent" ref="1022019938"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">460</int>
+ <reference key="object" ref="1058116061"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="792127484"/>
+ </object>
+ <reference key="parent" ref="1022019938"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">461</int>
+ <reference key="object" ref="792127484"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="318734362"/>
+ <reference ref="612849471"/>
+ </object>
+ <reference key="parent" ref="1058116061"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">462</int>
+ <reference key="object" ref="318734362"/>
+ <reference key="parent" ref="792127484"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">463</int>
+ <reference key="object" ref="612849471"/>
+ <reference key="parent" ref="792127484"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">464</int>
+ <reference key="object" ref="562140037"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="698135111"/>
+ <reference ref="899181471"/>
+ <reference ref="582459168"/>
+ </object>
+ <reference key="parent" ref="814247416"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">465</int>
+ <reference key="object" ref="698135111"/>
+ <reference key="parent" ref="562140037"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">466</int>
+ <reference key="object" ref="899181471"/>
+ <reference key="parent" ref="562140037"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">467</int>
+ <reference key="object" ref="582459168"/>
+ <reference key="parent" ref="562140037"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">468</int>
+ <reference key="object" ref="218631249"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="64764928"/>
+ <reference ref="136936362"/>
+ <reference ref="607672977"/>
+ <reference ref="484928874"/>
+ <reference ref="693070189"/>
+ <reference ref="1059551809"/>
+ <reference ref="416554597"/>
+ </object>
+ <reference key="parent" ref="958645126"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">469</int>
+ <reference key="object" ref="64764928"/>
+ <reference key="parent" ref="218631249"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">470</int>
+ <reference key="object" ref="136936362"/>
+ <reference key="parent" ref="218631249"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">471</int>
+ <reference key="object" ref="607672977"/>
+ <reference key="parent" ref="218631249"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">472</int>
+ <reference key="object" ref="484928874"/>
+ <reference key="parent" ref="218631249"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">473</int>
+ <reference key="object" ref="693070189"/>
+ <reference key="parent" ref="218631249"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">474</int>
+ <reference key="object" ref="1059551809"/>
+ <reference key="parent" ref="218631249"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">475</int>
+ <reference key="object" ref="416554597"/>
+ <reference key="parent" ref="218631249"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">476</int>
+ <reference key="object" ref="666968844"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="356339891"/>
+ <reference ref="416352713"/>
+ <reference ref="47615281"/>
+ <reference ref="252035059"/>
+ <reference ref="286376998"/>
+ <reference ref="81755183"/>
+ </object>
+ <reference key="parent" ref="365048869"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">477</int>
+ <reference key="object" ref="356339891"/>
+ <reference key="parent" ref="666968844"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">478</int>
+ <reference key="object" ref="416352713"/>
+ <reference key="parent" ref="666968844"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">479</int>
+ <reference key="object" ref="47615281"/>
+ <reference key="parent" ref="666968844"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">480</int>
+ <reference key="object" ref="252035059"/>
+ <reference key="parent" ref="666968844"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">481</int>
+ <reference key="object" ref="286376998"/>
+ <reference key="parent" ref="666968844"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">482</int>
+ <reference key="object" ref="81755183"/>
+ <reference key="parent" ref="666968844"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">483</int>
+ <reference key="object" ref="216314426"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="914446540"/>
+ <reference ref="160366792"/>
+ <reference ref="248661547"/>
+ <reference ref="30033296"/>
+ <reference ref="827334636"/>
+ </object>
+ <reference key="parent" ref="69846141"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">484</int>
+ <reference key="object" ref="914446540"/>
+ <reference key="parent" ref="216314426"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">485</int>
+ <reference key="object" ref="160366792"/>
+ <reference key="parent" ref="216314426"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">486</int>
+ <reference key="object" ref="248661547"/>
+ <reference key="parent" ref="216314426"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">487</int>
+ <reference key="object" ref="30033296"/>
+ <reference key="parent" ref="216314426"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">488</int>
+ <reference key="object" ref="827334636"/>
+ <reference key="parent" ref="216314426"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">518</int>
+ <reference key="object" ref="713319646"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="508081226"/>
+ </object>
+ <reference key="parent" ref="1055885701"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">519</int>
+ <reference key="object" ref="508081226"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="954120217"/>
+ </object>
+ <reference key="parent" ref="713319646"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">520</int>
+ <reference key="object" ref="954120217"/>
+ <reference key="parent" ref="508081226"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">523</int>
+ <reference key="object" ref="770142414"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">MediaServerCocoaTestController</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">525</int>
+ <reference key="object" ref="544612128"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="879879405"/>
+ </object>
+ <reference key="parent" ref="823886803"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">526</int>
+ <reference key="object" ref="879879405"/>
+ <reference key="parent" ref="544612128"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>-3.IBPluginDependency</string>
+ <string>-3.ImportedFromIB2</string>
+ <string>129.IBPluginDependency</string>
+ <string>129.ImportedFromIB2</string>
+ <string>130.IBEditorWindowLastContentRect</string>
+ <string>130.IBPluginDependency</string>
+ <string>130.ImportedFromIB2</string>
+ <string>131.IBPluginDependency</string>
+ <string>131.ImportedFromIB2</string>
+ <string>134.IBPluginDependency</string>
+ <string>134.ImportedFromIB2</string>
+ <string>136.IBPluginDependency</string>
+ <string>136.ImportedFromIB2</string>
+ <string>143.IBPluginDependency</string>
+ <string>143.ImportedFromIB2</string>
+ <string>144.IBPluginDependency</string>
+ <string>144.ImportedFromIB2</string>
+ <string>145.IBPluginDependency</string>
+ <string>145.ImportedFromIB2</string>
+ <string>149.IBPluginDependency</string>
+ <string>149.ImportedFromIB2</string>
+ <string>150.IBPluginDependency</string>
+ <string>150.ImportedFromIB2</string>
+ <string>196.IBPluginDependency</string>
+ <string>196.ImportedFromIB2</string>
+ <string>2.IBPluginDependency</string>
+ <string>2.ImportedFromIB2</string>
+ <string>205.ImportedFromIB2</string>
+ <string>21.IBEditorWindowLastContentRect</string>
+ <string>21.IBPluginDependency</string>
+ <string>21.IBWindowTemplateEditedContentRect</string>
+ <string>21.ImportedFromIB2</string>
+ <string>21.NSWindowTemplate.visibleAtLaunch</string>
+ <string>21.windowTemplate.hasMinSize</string>
+ <string>21.windowTemplate.minSize</string>
+ <string>241.IBPluginDependency</string>
+ <string>241.ImportedFromIB2</string>
+ <string>242.IBEditorWindowLastContentRect</string>
+ <string>242.IBPluginDependency</string>
+ <string>242.ImportedFromIB2</string>
+ <string>243.IBPluginDependency</string>
+ <string>243.ImportedFromIB2</string>
+ <string>244.IBPluginDependency</string>
+ <string>244.ImportedFromIB2</string>
+ <string>245.IBPluginDependency</string>
+ <string>245.ImportedFromIB2</string>
+ <string>246.IBPluginDependency</string>
+ <string>246.ImportedFromIB2</string>
+ <string>29.IBEditorWindowLastContentRect</string>
+ <string>29.IBPluginDependency</string>
+ <string>29.ImportedFromIB2</string>
+ <string>338.IBPluginDependency</string>
+ <string>338.ImportedFromIB2</string>
+ <string>339.IBEditorWindowLastContentRect</string>
+ <string>339.IBPluginDependency</string>
+ <string>339.ImportedFromIB2</string>
+ <string>340.IBPluginDependency</string>
+ <string>340.ImportedFromIB2</string>
+ <string>341.IBPluginDependency</string>
+ <string>341.ImportedFromIB2</string>
+ <string>347.IBPluginDependency</string>
+ <string>348.IBEditorWindowLastContentRect</string>
+ <string>348.IBPluginDependency</string>
+ <string>349.IBPluginDependency</string>
+ <string>350.IBPluginDependency</string>
+ <string>351.IBPluginDependency</string>
+ <string>352.IBPluginDependency</string>
+ <string>353.IBPluginDependency</string>
+ <string>354.IBPluginDependency</string>
+ <string>355.IBPluginDependency</string>
+ <string>356.IBPluginDependency</string>
+ <string>357.IBPluginDependency</string>
+ <string>358.IBPluginDependency</string>
+ <string>359.IBPluginDependency</string>
+ <string>360.IBPluginDependency</string>
+ <string>361.IBPluginDependency</string>
+ <string>362.IBPluginDependency</string>
+ <string>363.IBPluginDependency</string>
+ <string>364.IBPluginDependency</string>
+ <string>365.IBPluginDependency</string>
+ <string>366.IBPluginDependency</string>
+ <string>367.IBPluginDependency</string>
+ <string>368.IBPluginDependency</string>
+ <string>369.IBPluginDependency</string>
+ <string>370.IBPluginDependency</string>
+ <string>371.IBPluginDependency</string>
+ <string>372.IBPluginDependency</string>
+ <string>373.IBPluginDependency</string>
+ <string>374.IBPluginDependency</string>
+ <string>375.IBPluginDependency</string>
+ <string>376.IBPluginDependency</string>
+ <string>377.IBPluginDependency</string>
+ <string>378.IBPluginDependency</string>
+ <string>379.IBPluginDependency</string>
+ <string>380.IBPluginDependency</string>
+ <string>381.IBPluginDependency</string>
+ <string>382.IBPluginDependency</string>
+ <string>383.IBPluginDependency</string>
+ <string>384.IBPluginDependency</string>
+ <string>385.IBPluginDependency</string>
+ <string>386.IBPluginDependency</string>
+ <string>387.IBPluginDependency</string>
+ <string>388.IBPluginDependency</string>
+ <string>389.IBPluginDependency</string>
+ <string>390.IBPluginDependency</string>
+ <string>391.IBPluginDependency</string>
+ <string>444.IBPluginDependency</string>
+ <string>445.IBEditorWindowLastContentRect</string>
+ <string>445.IBPluginDependency</string>
+ <string>446.IBPluginDependency</string>
+ <string>447.IBPluginDependency</string>
+ <string>448.IBPluginDependency</string>
+ <string>449.IBPluginDependency</string>
+ <string>450.IBPluginDependency</string>
+ <string>451.IBPluginDependency</string>
+ <string>452.IBPluginDependency</string>
+ <string>453.IBPluginDependency</string>
+ <string>454.IBPluginDependency</string>
+ <string>455.IBPluginDependency</string>
+ <string>456.IBPluginDependency</string>
+ <string>457.IBPluginDependency</string>
+ <string>458.IBPluginDependency</string>
+ <string>459.IBPluginDependency</string>
+ <string>460.IBPluginDependency</string>
+ <string>461.IBPluginDependency</string>
+ <string>462.IBPluginDependency</string>
+ <string>463.IBPluginDependency</string>
+ <string>464.IBEditorWindowLastContentRect</string>
+ <string>464.IBPluginDependency</string>
+ <string>465.IBPluginDependency</string>
+ <string>466.IBPluginDependency</string>
+ <string>467.IBPluginDependency</string>
+ <string>468.IBPluginDependency</string>
+ <string>469.IBPluginDependency</string>
+ <string>470.IBPluginDependency</string>
+ <string>471.IBPluginDependency</string>
+ <string>472.IBPluginDependency</string>
+ <string>473.IBPluginDependency</string>
+ <string>474.IBPluginDependency</string>
+ <string>475.IBPluginDependency</string>
+ <string>476.IBPluginDependency</string>
+ <string>477.IBPluginDependency</string>
+ <string>478.IBPluginDependency</string>
+ <string>479.IBPluginDependency</string>
+ <string>480.IBPluginDependency</string>
+ <string>481.IBPluginDependency</string>
+ <string>482.IBPluginDependency</string>
+ <string>483.IBPluginDependency</string>
+ <string>484.IBPluginDependency</string>
+ <string>485.IBPluginDependency</string>
+ <string>486.IBPluginDependency</string>
+ <string>487.IBPluginDependency</string>
+ <string>488.IBPluginDependency</string>
+ <string>518.IBPluginDependency</string>
+ <string>519.IBEditorWindowLastContentRect</string>
+ <string>519.IBPluginDependency</string>
+ <string>520.IBPluginDependency</string>
+ <string>523.IBPluginDependency</string>
+ <string>525.IBPluginDependency</string>
+ <string>526.IBPluginDependency</string>
+ <string>56.IBPluginDependency</string>
+ <string>56.ImportedFromIB2</string>
+ <string>57.IBEditorWindowLastContentRect</string>
+ <string>57.IBPluginDependency</string>
+ <string>57.ImportedFromIB2</string>
+ <string>58.IBPluginDependency</string>
+ <string>58.ImportedFromIB2</string>
+ <string>74.IBPluginDependency</string>
+ <string>74.ImportedFromIB2</string>
+ <string>75.IBPluginDependency</string>
+ <string>75.ImportedFromIB2</string>
+ <string>77.IBPluginDependency</string>
+ <string>77.ImportedFromIB2</string>
+ <string>78.IBPluginDependency</string>
+ <string>78.ImportedFromIB2</string>
+ <string>81.IBEditorWindowLastContentRect</string>
+ <string>81.IBPluginDependency</string>
+ <string>81.ImportedFromIB2</string>
+ <string>83.IBPluginDependency</string>
+ <string>83.ImportedFromIB2</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{370, 880}, {64, 6}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <integer value="1"/>
+ <string>{{319, 476}, {480, 360}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{319, 476}, {480, 360}}</string>
+ <integer value="1"/>
+ <integer value="1"/>
+ <integer value="1"/>
+ <string>{213, 107}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{610, 1023}, {194, 73}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{380, 810}, {528, 20}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{410, 921}, {234, 43}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{494, 1053}, {83, 43}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{450, 813}, {254, 283}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{783, 793}, {170, 63}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{681, 1073}, {250, 23}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{85, 781}, {245, 183}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>{{408, 1023}, {176, 73}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <integer value="1"/>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">527</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">MediaServerCocoaTestController</string>
+ <string key="superclassName">NSObject</string>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>mainButton</string>
+ <string>window</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSButton</string>
+ <string>NSWindow</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="toOneOutletInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>mainButton</string>
+ <string>window</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBToOneOutletInfo">
+ <string key="name">mainButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">window</string>
+ <string key="candidateClassName">NSWindow</string>
+ </object>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">../../../Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">MediaServerCocoaTest_AppDelegate</string>
+ <string key="superclassName">NSObject</string>
+ <object class="NSMutableDictionary" key="actions">
+ <string key="NS.key.0">saveAction:</string>
+ <string key="NS.object.0">id</string>
+ </object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <string key="NS.key.0">saveAction:</string>
+ <object class="IBActionInfo" key="NS.object.0">
+ <string key="name">saveAction:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <string key="NS.key.0">window</string>
+ <string key="NS.object.0">NSWindow</string>
+ </object>
+ <object class="NSMutableDictionary" key="toOneOutletInfosByName">
+ <string key="NS.key.0">window</string>
+ <object class="IBToOneOutletInfo" key="NS.object.0">
+ <string key="name">window</string>
+ <string key="candidateClassName">NSWindow</string>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">../../../Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">MediaServerCocoaTest_AppDelegate</string>
+ <string key="superclassName">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+ <integer value="1050" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+ <integer value="3000" key="NS.object.0"/>
+ </object>
+ <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+ <string key="IBDocument.LastKnownRelativeProjectPath">../../../../Build/Targets/universal-apple-macosx/Platinum.xcodeproj</string>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSMenuCheckmark</string>
+ <string>NSMenuMixedState</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>{9, 8}</string>
+ <string>{7, 2}</string>
+ </object>
+ </object>
+ </data>
+</archive>
diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest-Info.plist b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest-Info.plist
new file mode 100644
index 0000000..883d858
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest-Info.plist
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>LSMinimumSystemVersion</key>
+ <string>${MACOSX_DEPLOYMENT_TARGET}</string>
+ <key>NSMainNibFile</key>
+ <string>MainMenu</string>
+ <key>NSPrincipalClass</key>
+ <string>NSApplication</string>
+</dict>
+</plist>
diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.h b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.h
new file mode 100644
index 0000000..2de7c10
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.h
@@ -0,0 +1,20 @@
+//
+// MediaServerCocoaTestController.h
+// Platinum
+//
+// Created by Sylvain on 9/14/10.
+// Copyright 2010 Plutinosoft LLC. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import <Platinum/PltUPnPObject.h>
+#import <Platinum/PltMediaServerObject.h>
+
+@interface MediaServerCocoaTestController : NSObject <PLT_MediaServerDelegateObject> {
+ IBOutlet NSWindow* window;
+ IBOutlet NSButton* mainButton;
+
+ PLT_UPnPObject* upnp;
+}
+
+@end
diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.mm b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.mm
new file mode 100644
index 0000000..d7b9a29
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTestController.mm
@@ -0,0 +1,64 @@
+//
+// MediaServerCocoaTestController.mm
+// Platinum
+//
+// Created by Sylvain on 9/14/10.
+// Copyright 2010 Plutinosoft LLC. All rights reserved.
+//
+
+#import "MediaServerCocoaTestController.h"
+#import <Neptune/Neptune.h>
+
+
+@implementation MediaServerCocoaTestController
+
++ (void)initialize {
+ NPT_LogManager::GetDefault().Configure("plist:.level=INFO;.handlers=ConsoleHandler;.ConsoleHandler.outputs=1;.ConsoleHandler.filter=61");
+}
+
+- (void)awakeFromNib {
+ upnp = [[PLT_UPnPObject alloc] init];
+
+ // create server and add ourselves as the delegate
+ PLT_MediaServerObject* server = [[PLT_MediaServerObject alloc] init];
+ [server setDelegate:self];
+ [upnp addDevice:server];
+
+ [mainButton setTarget:self];
+ [mainButton setTitle:@"Start"];
+ [mainButton setAction:@selector(performUPnPStarStop:)];
+}
+
+- (void)performUPnPStarStop:(id)sender {
+ if ([upnp isRunning]) {
+ [upnp stop];
+ [mainButton setTitle:@"Start"];
+ } else {
+ [upnp start];
+ [mainButton setTitle:@"Stop"];
+ }
+}
+
+#pragma mark - PLT_MediaServerDelegateObject
+
+- (NPT_Result)onBrowseMetadata:(PLT_MediaServerBrowseCapsule*)info
+{
+ return NPT_FAILURE;
+}
+
+- (NPT_Result)onBrowseDirectChildren:(PLT_MediaServerBrowseCapsule*)info
+{
+ return NPT_FAILURE;
+}
+
+- (NPT_Result)onSearchContainer:(PLT_MediaServerSearchCapsule*)info
+{
+ return NPT_FAILURE;
+}
+
+- (NPT_Result)onFileRequest:(PLT_MediaServerFileRequestCapsule*)info
+{
+ return NPT_FAILURE;
+}
+
+@end
diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.h b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.h
new file mode 100644
index 0000000..07ca005
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.h
@@ -0,0 +1,28 @@
+//
+// MediaServerCocoaTest_AppDelegate.h
+// MediaServerCocoaTest
+//
+// Created by Sylvain on 9/14/10.
+// Copyright Plutinosoft LLC 2010 . All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+@interface MediaServerCocoaTest_AppDelegate : NSObject
+{
+ NSWindow *window;
+
+ NSPersistentStoreCoordinator *persistentStoreCoordinator;
+ NSManagedObjectModel *managedObjectModel;
+ NSManagedObjectContext *managedObjectContext;
+}
+
+@property (nonatomic, retain) IBOutlet NSWindow *window;
+
+@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
+@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
+@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
+
+- (IBAction)saveAction:sender;
+
+@end
diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.m b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.m
new file mode 100644
index 0000000..e8120ba
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.m
@@ -0,0 +1,212 @@
+//
+// MediaServerCocoaTest_AppDelegate.m
+// MediaServerCocoaTest
+//
+// Created by Sylvain on 9/14/10.
+// Copyright Plutinosoft LLC 2010 . All rights reserved.
+//
+
+#import "MediaServerCocoaTest_AppDelegate.h"
+
+@implementation MediaServerCocoaTest_AppDelegate
+
+@synthesize window;
+
+/**
+ Returns the support directory for the application, used to store the Core Data
+ store file. This code uses a directory named "MediaServerCocoaTest" for
+ the content, either in the NSApplicationSupportDirectory location or (if the
+ former cannot be found), the system's temporary directory.
+ */
+
+- (NSString *)applicationSupportDirectory {
+
+ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
+ NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : NSTemporaryDirectory();
+ return [basePath stringByAppendingPathComponent:@"MediaServerCocoaTest"];
+}
+
+
+/**
+ Creates, retains, and returns the managed object model for the application
+ by merging all of the models found in the application bundle.
+ */
+
+- (NSManagedObjectModel *)managedObjectModel {
+
+ if (managedObjectModel) return managedObjectModel;
+
+ managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
+ return managedObjectModel;
+}
+
+
+/**
+ Returns the persistent store coordinator for the application. This
+ implementation will create and return a coordinator, having added the
+ store for the application to it. (The directory for the store is created,
+ if necessary.)
+ */
+
+- (NSPersistentStoreCoordinator *) persistentStoreCoordinator {
+
+ if (persistentStoreCoordinator) return persistentStoreCoordinator;
+
+ NSManagedObjectModel *mom = [self managedObjectModel];
+ if (!mom) {
+ NSAssert(NO, @"Managed object model is nil");
+ NSLog(@"%@:%s No model to generate a store from", [self class], _cmd);
+ return nil;
+ }
+
+ NSFileManager *fileManager = [NSFileManager defaultManager];
+ NSString *applicationSupportDirectory = [self applicationSupportDirectory];
+ NSError *error = nil;
+
+ if ( ![fileManager fileExistsAtPath:applicationSupportDirectory isDirectory:NULL] ) {
+ if (![fileManager createDirectoryAtPath:applicationSupportDirectory withIntermediateDirectories:NO attributes:nil error:&error]) {
+ NSAssert(NO, ([NSString stringWithFormat:@"Failed to create App Support directory %@ : %@", applicationSupportDirectory,error]));
+ NSLog(@"Error creating application support directory at %@ : %@",applicationSupportDirectory,error);
+ return nil;
+ }
+ }
+
+ NSURL *url = [NSURL fileURLWithPath: [applicationSupportDirectory stringByAppendingPathComponent: @"storedata"]];
+ persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: mom];
+ if (![persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType
+ configuration:nil
+ URL:url
+ options:nil
+ error:&error]){
+ [[NSApplication sharedApplication] presentError:error];
+ [persistentStoreCoordinator release], persistentStoreCoordinator = nil;
+ return nil;
+ }
+
+ return persistentStoreCoordinator;
+}
+
+/**
+ Returns the managed object context for the application (which is already
+ bound to the persistent store coordinator for the application.)
+ */
+
+- (NSManagedObjectContext *) managedObjectContext {
+
+ if (managedObjectContext) return managedObjectContext;
+
+ NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
+ if (!coordinator) {
+ NSMutableDictionary *dict = [NSMutableDictionary dictionary];
+ [dict setValue:@"Failed to initialize the store" forKey:NSLocalizedDescriptionKey];
+ [dict setValue:@"There was an error building up the data file." forKey:NSLocalizedFailureReasonErrorKey];
+ NSError *error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict];
+ [[NSApplication sharedApplication] presentError:error];
+ return nil;
+ }
+ managedObjectContext = [[NSManagedObjectContext alloc] init];
+ [managedObjectContext setPersistentStoreCoordinator: coordinator];
+
+ return managedObjectContext;
+}
+
+/**
+ Returns the NSUndoManager for the application. In this case, the manager
+ returned is that of the managed object context for the application.
+ */
+
+- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
+ return [[self managedObjectContext] undoManager];
+}
+
+
+/**
+ Performs the save action for the application, which is to send the save:
+ message to the application's managed object context. Any encountered errors
+ are presented to the user.
+ */
+
+- (IBAction) saveAction:(id)sender {
+
+ NSError *error = nil;
+
+ if (![[self managedObjectContext] commitEditing]) {
+ NSLog(@"%@:%s unable to commit editing before saving", [self class], _cmd);
+ }
+
+ if (![[self managedObjectContext] save:&error]) {
+ [[NSApplication sharedApplication] presentError:error];
+ }
+}
+
+
+/**
+ Implementation of the applicationShouldTerminate: method, used here to
+ handle the saving of changes in the application managed object context
+ before the application terminates.
+ */
+
+- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
+
+ if (!managedObjectContext) return NSTerminateNow;
+
+ if (![managedObjectContext commitEditing]) {
+ NSLog(@"%@:%s unable to commit editing to terminate", [self class], _cmd);
+ return NSTerminateCancel;
+ }
+
+ if (![managedObjectContext hasChanges]) return NSTerminateNow;
+
+ NSError *error = nil;
+ if (![managedObjectContext save:&error]) {
+
+ // This error handling simply presents error information in a panel with an
+ // "Ok" button, which does not include any attempt at error recovery (meaning,
+ // attempting to fix the error.) As a result, this implementation will
+ // present the information to the user and then follow up with a panel asking
+ // if the user wishes to "Quit Anyway", without saving the changes.
+
+ // Typically, this process should be altered to include application-specific
+ // recovery steps.
+
+ BOOL result = [sender presentError:error];
+ if (result) return NSTerminateCancel;
+
+ NSString *question = NSLocalizedString(@"Could not save changes while quitting. Quit anyway?", @"Quit without saves error question message");
+ NSString *info = NSLocalizedString(@"Quitting now will lose any changes you have made since the last successful save", @"Quit without saves error question info");
+ NSString *quitButton = NSLocalizedString(@"Quit anyway", @"Quit anyway button title");
+ NSString *cancelButton = NSLocalizedString(@"Cancel", @"Cancel button title");
+ NSAlert *alert = [[NSAlert alloc] init];
+ [alert setMessageText:question];
+ [alert setInformativeText:info];
+ [alert addButtonWithTitle:quitButton];
+ [alert addButtonWithTitle:cancelButton];
+
+ NSInteger answer = [alert runModal];
+ [alert release];
+ alert = nil;
+
+ if (answer == NSAlertAlternateReturn) return NSTerminateCancel;
+
+ }
+
+ return NSTerminateNow;
+}
+
+
+/**
+ Implementation of dealloc, to release the retained variables.
+ */
+
+- (void)dealloc {
+
+ [window release];
+ [managedObjectContext release];
+ [persistentStoreCoordinator release];
+ [managedObjectModel release];
+
+ [super dealloc];
+}
+
+
+@end
diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.mm b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.mm
new file mode 100644
index 0000000..c6fb49a
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_AppDelegate.mm
@@ -0,0 +1,195 @@
+//
+// MediaServerCocoaTest_AppDelegate.m
+// MediaServerCocoaTest
+//
+// Created by Sylvain on 9/14/10.
+// Copyright Plutinosoft LLC 2010 . All rights reserved.
+//
+
+#import "MediaServerCocoaTest_AppDelegate.h"
+
+@implementation MediaServerCocoaTest_AppDelegate
+
+@synthesize window;
+
+/**
+ Returns the support directory for the application, used to store the Core Data
+ store file. This code uses a directory named "MediaServerCocoaTest" for
+ the content, either in the NSApplicationSupportDirectory location or (if the
+ former cannot be found), the system's temporary directory.
+ */
+
+- (NSString *)applicationSupportDirectory {
+
+ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
+ NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : NSTemporaryDirectory();
+ return [basePath stringByAppendingPathComponent:@"MediaServerCocoaTest"];
+}
+
+
+/**
+ Creates, retains, and returns the managed object model for the application
+ by merging all of the models found in the application bundle.
+ */
+
+- (NSManagedObjectModel *)managedObjectModel {
+
+ if (managedObjectModel) return managedObjectModel;
+
+ managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
+ return managedObjectModel;
+}
+
+
+/**
+ Returns the persistent store coordinator for the application. This
+ implementation will create and return a coordinator, having added the
+ store for the application to it. (The directory for the store is created,
+ if necessary.)
+ */
+
+- (NSPersistentStoreCoordinator *) persistentStoreCoordinator {
+
+ if (persistentStoreCoordinator) return persistentStoreCoordinator;
+
+ NSManagedObjectModel *mom = [self managedObjectModel];
+ if (!mom) {
+ NSAssert(NO, @"Managed object model is nil");
+ //NSLog(@"%@:%s No model to generate a store from", [self class], _cmd);
+ return nil;
+ }
+
+ NSFileManager *fileManager = [NSFileManager defaultManager];
+ NSString *applicationSupportDirectory = [self applicationSupportDirectory];
+ NSError *error = nil;
+
+ if ( ![fileManager fileExistsAtPath:applicationSupportDirectory isDirectory:NULL] ) {
+ if (![fileManager createDirectoryAtPath:applicationSupportDirectory withIntermediateDirectories:NO attributes:nil error:&error]) {
+ NSAssert(NO, ([NSString stringWithFormat:@"Failed to create App Support directory %@ : %@", applicationSupportDirectory,error]));
+ NSLog(@"Error creating application support directory at %@ : %@",applicationSupportDirectory,error);
+ return nil;
+ }
+ }
+
+ NSURL *url = [NSURL fileURLWithPath: [applicationSupportDirectory stringByAppendingPathComponent: @"storedata"]];
+ persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: mom];
+ if (![persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType
+ configuration:nil
+ URL:url
+ options:nil
+ error:&error]){
+ [[NSApplication sharedApplication] presentError:error];
+ persistentStoreCoordinator = nil;
+ return nil;
+ }
+
+ return persistentStoreCoordinator;
+}
+
+/**
+ Returns the managed object context for the application (which is already
+ bound to the persistent store coordinator for the application.)
+ */
+
+- (NSManagedObjectContext *) managedObjectContext {
+
+ if (managedObjectContext) return managedObjectContext;
+
+ NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
+ if (!coordinator) {
+ NSMutableDictionary *dict = [NSMutableDictionary dictionary];
+ [dict setValue:@"Failed to initialize the store" forKey:NSLocalizedDescriptionKey];
+ [dict setValue:@"There was an error building up the data file." forKey:NSLocalizedFailureReasonErrorKey];
+ NSError *error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict];
+ [[NSApplication sharedApplication] presentError:error];
+ return nil;
+ }
+ managedObjectContext = [[NSManagedObjectContext alloc] init];
+ [managedObjectContext setPersistentStoreCoordinator: coordinator];
+
+ return managedObjectContext;
+}
+
+/**
+ Returns the NSUndoManager for the application. In this case, the manager
+ returned is that of the managed object context for the application.
+ */
+
+- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
+ return [[self managedObjectContext] undoManager];
+}
+
+
+/**
+ Performs the save action for the application, which is to send the save:
+ message to the application's managed object context. Any encountered errors
+ are presented to the user.
+ */
+
+- (IBAction) saveAction:(id)sender {
+
+ NSError *error = nil;
+
+ if (![[self managedObjectContext] commitEditing]) {
+ //NSLog(@"%@:%s unable to commit editing before saving", [self class], _cmd);
+ }
+
+ if (![[self managedObjectContext] save:&error]) {
+ [[NSApplication sharedApplication] presentError:error];
+ }
+}
+
+
+/**
+ Implementation of the applicationShouldTerminate: method, used here to
+ handle the saving of changes in the application managed object context
+ before the application terminates.
+ */
+
+- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
+
+ if (!managedObjectContext) return NSTerminateNow;
+
+ if (![managedObjectContext commitEditing]) {
+ //NSLog(@"%@:%s unable to commit editing to terminate", [self class], _cmd);
+ return NSTerminateCancel;
+ }
+
+ if (![managedObjectContext hasChanges]) return NSTerminateNow;
+
+ NSError *error = nil;
+ if (![managedObjectContext save:&error]) {
+
+ // This error handling simply presents error information in a panel with an
+ // "Ok" button, which does not include any attempt at error recovery (meaning,
+ // attempting to fix the error.) As a result, this implementation will
+ // present the information to the user and then follow up with a panel asking
+ // if the user wishes to "Quit Anyway", without saving the changes.
+
+ // Typically, this process should be altered to include application-specific
+ // recovery steps.
+
+ BOOL result = [sender presentError:error];
+ if (result) return NSTerminateCancel;
+
+ NSString *question = NSLocalizedString(@"Could not save changes while quitting. Quit anyway?", @"Quit without saves error question message");
+ NSString *info = NSLocalizedString(@"Quitting now will lose any changes you have made since the last successful save", @"Quit without saves error question info");
+ NSString *quitButton = NSLocalizedString(@"Quit anyway", @"Quit anyway button title");
+ NSString *cancelButton = NSLocalizedString(@"Cancel", @"Cancel button title");
+ NSAlert *alert = [[NSAlert alloc] init];
+ [alert setMessageText:question];
+ [alert setInformativeText:info];
+ [alert addButtonWithTitle:quitButton];
+ [alert addButtonWithTitle:cancelButton];
+
+ NSInteger answer = [alert runModal];
+ alert = nil;
+
+ if (answer == NSAlertAlternateReturn) return NSTerminateCancel;
+
+ }
+
+ return NSTerminateNow;
+}
+
+@end
diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_DataModel.xcdatamodel/elements b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_DataModel.xcdatamodel/elements
new file mode 100644
index 0000000..2209062
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_DataModel.xcdatamodel/elements
Binary files differ
diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_DataModel.xcdatamodel/layout b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_DataModel.xcdatamodel/layout
new file mode 100644
index 0000000..85196a8
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_DataModel.xcdatamodel/layout
Binary files differ
diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_Prefix.pch b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_Prefix.pch
new file mode 100644
index 0000000..23e1c62
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/MediaServerCocoaTest_Prefix.pch
@@ -0,0 +1,7 @@
+//
+// Prefix header for all source files of the 'MediaServerCocoaTest' target in the 'MediaServerCocoaTest' project
+//
+
+#ifdef __OBJC__
+ #import <Cocoa/Cocoa.h>
+#endif
diff --git a/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/main.mm b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/main.mm
new file mode 100644
index 0000000..87077c6
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/MediaServerCocoaTest/main.mm
@@ -0,0 +1,14 @@
+//
+// main.m
+// MediaServerCocoaTest
+//
+// Created by Sylvain on 9/14/10.
+// Copyright Plutinosoft LLC 2010. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+int main(int argc, char *argv[])
+{
+ return NSApplicationMain(argc, (const char **) argv);
+}
diff --git a/lib/libUPnP/Platinum/Source/Tests/Simple/PltSimple.cpp b/lib/libUPnP/Platinum/Source/Tests/Simple/PltSimple.cpp
new file mode 100644
index 0000000..0d32ec2
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/Simple/PltSimple.cpp
@@ -0,0 +1,111 @@
+/*****************************************************************
+|
+| Platinum - Simple Device
+|
+| Copyright (c) 2004-2010, Plutinosoft, LLC.
+| All rights reserved.
+| http://www.plutinosoft.com
+|
+| This program is free software; you can redistribute it and/or
+| modify it under the terms of the GNU General Public License
+| as published by the Free Software Foundation; either version 2
+| of the License, or (at your option) any later version.
+|
+| OEMs, ISVs, VARs and other distributors that combine and
+| distribute commercially licensed software with Platinum software
+| and do not wish to distribute the source code for the commercially
+| licensed software under version 2, or (at your option) any later
+| version, of the GNU General Public License (the "GPL") must enter
+| into a commercial license agreement with Plutinosoft, LLC.
+| licensing@plutinosoft.com
+|
+| This program is distributed in the hope that it will be useful,
+| but WITHOUT ANY WARRANTY; without even the implied warranty of
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+| GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License
+| along with this program; see the file LICENSE.txt. If not, write to
+| the Free Software Foundation, Inc.,
+| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+| http://www.gnu.org/licenses/gpl-2.0.html
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+#include "Platinum.h"
+#include "PltSimple.h"
+
+NPT_SET_LOCAL_LOGGER("platinum.test.simple")
+
+/*----------------------------------------------------------------------
+| forward references
++---------------------------------------------------------------------*/
+extern const char* SCPDXML_SIMPLE;
+
+/*----------------------------------------------------------------------
+| PLT_Simple::PLT_Simple
++---------------------------------------------------------------------*/
+PLT_Simple::PLT_Simple(const char* FriendlyName, const char* UUID) :
+ PLT_DeviceHost("/", UUID, "urn:schemas-upnp-org:device:Simple:1", FriendlyName)
+{
+}
+
+/*----------------------------------------------------------------------
+| PLT_Simple::~PLT_Simple
++---------------------------------------------------------------------*/
+PLT_Simple::~PLT_Simple()
+{
+}
+
+/*----------------------------------------------------------------------
+| PLT_Simple::SetupServices
++---------------------------------------------------------------------*/
+NPT_Result
+PLT_Simple::SetupServices()
+{
+ NPT_Result res;
+ PLT_Service* service = new PLT_Service(
+ this,
+ "urn:schemas-upnp-org:service:Test:1",
+ "urn:upnp-org:serviceId:Test.001",
+ "Test");
+
+ NPT_CHECK_LABEL_FATAL(res = service->SetSCPDXML((const char*)SCPDXML_SIMPLE), failure);
+ NPT_CHECK_LABEL_FATAL(res = AddService(service), failure);
+
+ service->SetStateVariable("Status", "True");
+
+ return NPT_SUCCESS;
+
+failure:
+ delete service;
+ return res;
+}
+
+const char* SCPDXML_SIMPLE =
+ "<?xml version=\"1.0\" ?>"
+ " <scpd xmlns=\"urn:schemas-upnp-org:service-1-0\">"
+ " <specVersion>"
+ " <major>1</major>"
+ " <minor>0</minor>"
+ " </specVersion>"
+ " <serviceStateTable>"
+ " <stateVariable sendEvents=\"yes\">"
+ " <name>LastChange</name>"
+ " <dataType>string</dataType>"
+ " <defaultValue></defaultValue>"
+ " </stateVariable>"
+ " <stateVariable sendEvents=\"yes\">"
+ " <name>PresetNameList</name>"
+ " <dataType>string</dataType>"
+ " <defaultValue></defaultValue>"
+ " </stateVariable>"
+ " </serviceStateTable>"
+ " <intel_nmpr:X_INTEL_NMPR xmlns:intel_nmpr=\"udn:schemas-intel-com:device-1-0\">2.1</intel_nmpr:X_INTEL_NMPR>"
+ " <dlna:X_DLNADOC xmlns:dlna=\"udn:schemas-dlna-org:device-1-0\">DMP 1.00</dlna:X_DLNADOC>"
+ " </scpd>";
+
diff --git a/lib/libUPnP/Platinum/Source/Tests/Simple/PltSimple.h b/lib/libUPnP/Platinum/Source/Tests/Simple/PltSimple.h
new file mode 100644
index 0000000..487e760
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/Simple/PltSimple.h
@@ -0,0 +1,56 @@
+/*****************************************************************
+|
+| Platinum -Simple Device
+|
+| Copyright (c) 2004-2010, Plutinosoft, LLC.
+| All rights reserved.
+| http://www.plutinosoft.com
+|
+| This program is free software; you can redistribute it and/or
+| modify it under the terms of the GNU General Public License
+| as published by the Free Software Foundation; either version 2
+| of the License, or (at your option) any later version.
+|
+| OEMs, ISVs, VARs and other distributors that combine and
+| distribute commercially licensed software with Platinum software
+| and do not wish to distribute the source code for the commercially
+| licensed software under version 2, or (at your option) any later
+| version, of the GNU General Public License (the "GPL") must enter
+| into a commercial license agreement with Plutinosoft, LLC.
+| licensing@plutinosoft.com
+|
+| This program is distributed in the hope that it will be useful,
+| but WITHOUT ANY WARRANTY; without even the implied warranty of
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+| GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License
+| along with this program; see the file LICENSE.txt. If not, write to
+| the Free Software Foundation, Inc.,
+| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+| http://www.gnu.org/licenses/gpl-2.0.html
+|
+****************************************************************/
+
+#ifndef _PLT_SIMPLE_H_
+#define _PLT_SIMPLE_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "PltDeviceHost.h"
+
+/*----------------------------------------------------------------------
+| PLT_Simple class
++---------------------------------------------------------------------*/
+class PLT_Simple : public PLT_DeviceHost
+{
+public:
+ PLT_Simple(const char* FriendlyName, const char* UUID = "");
+ virtual ~PLT_Simple();
+
+ // PLT_DeviceHost methods
+ virtual NPT_Result SetupServices();
+};
+
+#endif /* _PLT_SIMPLE_H_ */
diff --git a/lib/libUPnP/Platinum/Source/Tests/Simple/SimpleTest.cpp b/lib/libUPnP/Platinum/Source/Tests/Simple/SimpleTest.cpp
new file mode 100644
index 0000000..6596227
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/Simple/SimpleTest.cpp
@@ -0,0 +1,63 @@
+/*****************************************************************
+|
+| Platinum - Test Light Device
+|
+| Copyright (c) 2004-2010, Plutinosoft, LLC.
+| All rights reserved.
+| http://www.plutinosoft.com
+|
+| This program is free software; you can redistribute it and/or
+| modify it under the terms of the GNU General Public License
+| as published by the Free Software Foundation; either version 2
+| of the License, or (at your option) any later version.
+|
+| OEMs, ISVs, VARs and other distributors that combine and
+| distribute commercially licensed software with Platinum software
+| and do not wish to distribute the source code for the commercially
+| licensed software under version 2, or (at your option) any later
+| version, of the GNU General Public License (the "GPL") must enter
+| into a commercial license agreement with Plutinosoft, LLC.
+| licensing@plutinosoft.com
+|
+| This program is distributed in the hope that it will be useful,
+| but WITHOUT ANY WARRANTY; without even the implied warranty of
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+| GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License
+| along with this program; see the file LICENSE.txt. If not, write to
+| the Free Software Foundation, Inc.,
+| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+| http://www.gnu.org/licenses/gpl-2.0.html
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "PltUPnP.h"
+#include "PltSimple.h"
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /* argc */, char** /* argv */)
+{
+ PLT_UPnP upnp;
+
+ PLT_DeviceHostReference device(new PLT_Simple("Platinum Test"));
+
+ upnp.AddDevice(device);
+ upnp.Start();
+
+ char buf[256];
+ while (gets(buf)) {
+ if (*buf == 'q')
+ break;
+ }
+
+ upnp.Stop();
+
+ return 0;
+}
diff --git a/lib/libUPnP/Platinum/Source/Tests/Ssdp/SsdpTest1.cpp b/lib/libUPnP/Platinum/Source/Tests/Ssdp/SsdpTest1.cpp
new file mode 100644
index 0000000..1e1f6aa
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/Ssdp/SsdpTest1.cpp
@@ -0,0 +1,66 @@
+/*****************************************************************
+|
+| Platinum - SSDP Test Program 1
+|
+| Copyright (c) 2004-2010, Plutinosoft, LLC.
+| All rights reserved.
+| http://www.plutinosoft.com
+|
+| This program is free software; you can redistribute it and/or
+| modify it under the terms of the GNU General Public License
+| as published by the Free Software Foundation; either version 2
+| of the License, or (at your option) any later version.
+|
+| OEMs, ISVs, VARs and other distributors that combine and
+| distribute commercially licensed software with Platinum software
+| and do not wish to distribute the source code for the commercially
+| licensed software under version 2, or (at your option) any later
+| version, of the GNU General Public License (the "GPL") must enter
+| into a commercial license agreement with Plutinosoft, LLC.
+| licensing@plutinosoft.com
+|
+| This program is distributed in the hope that it will be useful,
+| but WITHOUT ANY WARRANTY; without even the implied warranty of
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+| GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License
+| along with this program; see the file LICENSE.txt. If not, write to
+| the Free Software Foundation, Inc.,
+| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+| http://www.gnu.org/licenses/gpl-2.0.html
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+#include "Platinum.h"
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int, char**)
+{
+ // setup Neptune logging
+ NPT_LogManager::GetDefault().Configure("plist:.level=FINE;.handlers=ConsoleHandler;.ConsoleHandler.colors=off;.ConsoleHandler.filter=42");
+
+ PLT_UPnP upnp;
+ PLT_CtrlPointReference ctrl_point(new PLT_CtrlPoint());
+ upnp.AddCtrlPoint(ctrl_point);
+
+ if (NPT_FAILED(upnp.Start()))
+ return 1;
+
+ char buf[256];
+ while (gets(buf)) {
+ if (*buf == 'q')
+ break;
+ }
+
+ upnp.Stop();
+
+ return 0;
+}
diff --git a/lib/libUPnP/Platinum/Source/Tests/Time/TimeTest1.cpp b/lib/libUPnP/Platinum/Source/Tests/Time/TimeTest1.cpp
new file mode 100644
index 0000000..6d62708
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Tests/Time/TimeTest1.cpp
@@ -0,0 +1,189 @@
+/*****************************************************************
+|
+| Platinum - Time Test
+|
+| Copyright (c) 2004-2010, Plutinosoft, LLC.
+| All rights reserved.
+| http://www.plutinosoft.com
+|
+| This program is free software; you can redistribute it and/or
+| modify it under the terms of the GNU General Public License
+| as published by the Free Software Foundation; either version 2
+| of the License, or (at your option) any later version.
+|
+| OEMs, ISVs, VARs and other distributors that combine and
+| distribute commercially licensed software with Platinum software
+| and do not wish to distribute the source code for the commercially
+| licensed software under version 2, or (at your option) any later
+| version, of the GNU General Public License (the "GPL") must enter
+| into a commercial license agreement with Plutinosoft, LLC.
+| licensing@plutinosoft.com
+|
+| This program is distributed in the hope that it will be useful,
+| but WITHOUT ANY WARRANTY; without even the implied warranty of
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+| GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License
+| along with this program; see the file LICENSE.txt. If not, write to
+| the Free Software Foundation, Inc.,
+| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+| http://www.gnu.org/licenses/gpl-2.0.html
+|
+****************************************************************/
+
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdlib.h>
+#include <stdio.h>
+#include "Neptune.h"
+#include "Platinum.h"
+
+/*----------------------------------------------------------------------
+| macros
++---------------------------------------------------------------------*/
+#define SHOULD_SUCCEED(r) \
+ do { \
+ if (NPT_FAILED(r)) { \
+ fprintf(stderr, "FAILED: line %d\n", __LINE__); \
+ NPT_ASSERT(0); \
+ } \
+ } while(0)
+
+#define SHOULD_FAIL(r) \
+ do { \
+ if (NPT_SUCCEEDED(r)) { \
+ fprintf(stderr, "should have failed line %d (%d)\n", \
+ __LINE__, r); \
+ NPT_ASSERT(0); \
+ } \
+ } while(0)
+
+#define SHOULD_EQUAL_I(a, b) \
+ do { \
+ if ((a) != (b)) { \
+ fprintf(stderr, "got %d expected %d line %d\n", \
+ (int)a, (int)b, __LINE__); \
+ NPT_ASSERT(0); \
+ } \
+ } while(0)
+
+#define SHOULD_EQUAL_F(a, b) \
+ do { \
+ if ((a) != (b)) { \
+ fprintf(stderr, "got %f, expected %f line %d\n", \
+ (float)a, (float)b, __LINE__); \
+ NPT_ASSERT(0); \
+ } \
+ } while(0)
+
+#define SHOULD_EQUAL_S(a, b) \
+ do { \
+ if (!NPT_StringsEqual(a,b)) { \
+ fprintf(stderr, "got %s, expected %s line %d\n", \
+ a, b, __LINE__); \
+ NPT_ASSERT(0); \
+ } \
+ } while(0)
+
+/*----------------------------------------------------------------------
+| TestSuiteGetTime
++---------------------------------------------------------------------*/
+static void
+TestSuiteGetTime()
+{
+ NPT_TimeStamp now, now2;
+ NPT_DateTime today;
+
+ /* get utc time */
+ SHOULD_SUCCEED(NPT_System::GetCurrentTimeStamp(now));
+
+ /* convert utc time to date */
+ SHOULD_SUCCEED(today.FromTimeStamp(now));
+
+ /* convert local time back to utc */
+ SHOULD_SUCCEED(today.ToTimeStamp(now2));
+
+ /* verify utc time has not change */
+ SHOULD_EQUAL_I(now.ToSeconds(), now2.ToSeconds());
+}
+
+/*----------------------------------------------------------------------
+| TestSuiteSetDateTimeZone
++---------------------------------------------------------------------*/
+static void
+TestSuiteSetDateTimeZone()
+{
+ NPT_TimeStamp now, now2;
+ NPT_DateTime today, today2;
+ NPT_Int32 tz;
+
+ /* get utc time */
+ SHOULD_SUCCEED(NPT_System::GetCurrentTimeStamp(now));
+
+ /* convert utc time to date */
+ SHOULD_SUCCEED(today.FromTimeStamp(now));
+
+ for (tz = -60*12; tz <= 60*12; tz+=30) {
+ /* convert date to another timezone */
+ today2 = today;
+ SHOULD_SUCCEED(today2.ChangeTimeZone(tz));
+
+ /* get timestamp from converted date */
+ SHOULD_SUCCEED(today2.ToTimeStamp(now2));
+
+ /* verify utc time has not change */
+ SHOULD_EQUAL_I(now.ToSeconds(), now2.ToSeconds());
+ }
+}
+
+/*----------------------------------------------------------------------
+| TestSuiteFormatTime
++---------------------------------------------------------------------*/
+static void
+TestSuiteFormatTime()
+{
+ NPT_DateTime gmt_today, tz_today;
+ NPT_TimeStamp now;
+ NPT_String output_s;
+
+ /* current time */
+ SHOULD_SUCCEED(NPT_System::GetCurrentTimeStamp(now));
+
+ /* get the date */
+ SHOULD_SUCCEED(gmt_today.FromTimeStamp(now));
+
+ /* print out current local date and daylight savings settings */
+ /* this should convert to GMT internally if dst is set */
+ printf("GMT time for Today is: %s\n", gmt_today.ToString().GetChars());
+
+ /* convert the date to GMT-8 */
+ tz_today = gmt_today;
+ SHOULD_SUCCEED(tz_today.ChangeTimeZone(-8*60));
+
+ /* this should convert to GMT internally if dst is set */
+ printf("(GMT-8) time for Today is: %s\n", tz_today.ToString(NPT_DateTime::FORMAT_RFC_1123).GetChars());
+ printf("(GMT-8) time for Today is: %s\n", tz_today.ToString(NPT_DateTime::FORMAT_RFC_1036).GetChars());
+ printf("(GMT-8) time for Today is: %s\n", tz_today.ToString(NPT_DateTime::FORMAT_ANSI).GetChars());
+ printf("(GMT-8) time for Today is: %s\n", tz_today.ToString(NPT_DateTime::FORMAT_W3C).GetChars());
+
+ /* print with RFC1123 */
+ printf("GMT time for Today is: %s\n", gmt_today.ToString(NPT_DateTime::FORMAT_RFC_1123).GetChars());
+ printf("GMT time for Today is: %s\n", gmt_today.ToString(NPT_DateTime::FORMAT_RFC_1036).GetChars());
+ printf("GMT time for Today is: %s\n", gmt_today.ToString(NPT_DateTime::FORMAT_ANSI).GetChars());
+ printf("GMT time for Today is: %s\n", gmt_today.ToString(NPT_DateTime::FORMAT_W3C).GetChars());
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ TestSuiteGetTime();
+ TestSuiteSetDateTimeZone();
+ TestSuiteFormatTime();
+ return 0;
+}